@dev-tcloud/tcloud-ui 0.1.8 → 0.1.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/_modules/tcloud-ui-datepicker/tcloud-ui-datepicker.component.mjs +22 -4
- package/esm2020/lib/_modules/tcloud-ui-datepicker-time/tcloud-ui-datepicker-time.component.mjs +10 -8
- package/esm2020/lib/_modules/tcloud-ui-filters/components/range-date/range-date.component.mjs +33 -22
- package/esm2020/lib/_modules/tcloud-ui-filters/tcloud-ui-filters.component.mjs +17 -5
- package/fesm2015/dev-tcloud-tcloud-ui.mjs +78 -35
- package/fesm2015/dev-tcloud-tcloud-ui.mjs.map +1 -1
- package/fesm2020/dev-tcloud-tcloud-ui.mjs +78 -35
- package/fesm2020/dev-tcloud-tcloud-ui.mjs.map +1 -1
- package/lib/_modules/tcloud-ui-datepicker-time/tcloud-ui-datepicker-time.component.d.ts +1 -2
- package/lib/_modules/tcloud-ui-filters/components/range-date/range-date.component.d.ts +2 -2
- package/lib/_modules/tcloud-ui-filters/tcloud-ui-filters.component.d.ts +1 -0
- package/package.json +1 -1
- package/scss/components/custom/ui-datepicker.scss +10 -0
- package/scss/components/styles.scss +2 -0
|
@@ -126,7 +126,6 @@ export class TCloudUiFiltersComponent {
|
|
|
126
126
|
this.searchIn(filter, 'sync');
|
|
127
127
|
});
|
|
128
128
|
}
|
|
129
|
-
// this.toResult();
|
|
130
129
|
if (!this.useOnChangeSubmit) {
|
|
131
130
|
this.result_accept(this.data);
|
|
132
131
|
}
|
|
@@ -258,7 +257,7 @@ export class TCloudUiFiltersComponent {
|
|
|
258
257
|
item.searchText = event;
|
|
259
258
|
this.onChange.emit(true);
|
|
260
259
|
}
|
|
261
|
-
if (event === undefined || event === null || event === '' && isValid) {
|
|
260
|
+
if ((event === undefined || event === null || event === '') && isValid) {
|
|
262
261
|
isValid = false;
|
|
263
262
|
item.searchText = '';
|
|
264
263
|
this.onChange.emit(true);
|
|
@@ -283,6 +282,10 @@ export class TCloudUiFiltersComponent {
|
|
|
283
282
|
item.searchText = `${this.convertDataToNumber(item.value)}`;
|
|
284
283
|
this.onChange.emit(true);
|
|
285
284
|
}
|
|
285
|
+
if (event && event.result && (event.result.start || event.result.stop)) {
|
|
286
|
+
isValid = false;
|
|
287
|
+
this.onChange.emit(true);
|
|
288
|
+
}
|
|
286
289
|
if (this.useOnChangeSubmit || this.first_active_filter) {
|
|
287
290
|
this.start_filter_fc = this.start_filter();
|
|
288
291
|
this.first_active_filter = false;
|
|
@@ -291,6 +294,15 @@ export class TCloudUiFiltersComponent {
|
|
|
291
294
|
this.emitSubmitFilters();
|
|
292
295
|
}
|
|
293
296
|
}
|
|
297
|
+
getDateUTC(dt) {
|
|
298
|
+
const ano = dt.getFullYear();
|
|
299
|
+
const mes = dt.getMonth();
|
|
300
|
+
const dia = dt.getDate();
|
|
301
|
+
const horas = dt.getHours();
|
|
302
|
+
const minutos = dt.getMinutes();
|
|
303
|
+
const segundos = dt.getSeconds();
|
|
304
|
+
return new Date(Date.UTC(ano, mes, dia, horas, minutos, segundos));
|
|
305
|
+
}
|
|
294
306
|
start_filter() {
|
|
295
307
|
for (let i = 0; i < (this.data).length; i++) {
|
|
296
308
|
this.setDataIndex(i, true);
|
|
@@ -442,10 +454,10 @@ export class TCloudUiFiltersComponent {
|
|
|
442
454
|
}
|
|
443
455
|
}
|
|
444
456
|
TCloudUiFiltersComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: TCloudUiFiltersComponent, deps: [{ token: i1.DatePipe }], target: i0.ɵɵFactoryTarget.Component });
|
|
445
|
-
TCloudUiFiltersComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: TCloudUiFiltersComponent, selector: "tcloud-ui-filters", inputs: { data: "data", filters: "filters", submitText: "submitText", btnSubmitClass: "btnSubmitClass", useOnChangeSubmit: "useOnChangeSubmit", useButtonSubmit: "useButtonSubmit", useNormalizeCaseSensitive: "useNormalizeCaseSensitive", useRangeDate: "useRangeDate", useFilterAccept: "useFilterAccept" }, outputs: { result: "result", onFilter: "onFilter", onChange: "onChange", onSubmit: "onSubmit" }, viewQueries: [{ propertyName: "_formulario", first: true, predicate: ["_formulario"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div *ngIf=\"show_filters\" class=\"tcloud-ui-filters.component area-filter\">\r\n <ng-container *ngFor=\"let item of filters; let i = index\">\r\n\r\n <ng-container *ngIf=\"!item.type || (item.type && item.type !== 'boolean')\">\r\n\r\n <ng-container *ngIf=\"item.type === 'date-local'\">\r\n\r\n <div class=\"box-filter-input type-{{item.type}} box-type-{{item.type}}\" [style]=\"(item.width !== '') ? 'width:'+item.width : ''\">\r\n <div class=\"m-description tc-title-ellipsis box-type-{{item.type}}\" title=\"{{ item.description }}\"><i [class.to-active]=\"(item.value !== undefined && item.value !== null && item.value !== '')\" class=\"fas fa-filter icon-filter\"></i> {{ item.description }}</div>\r\n <div class=\"box-type-{{item.type}}\">\r\n <tcloud-ui-datepicker \r\n #_input\r\n name=\"input_{{i+1}}\"\r\n [modeInput]=\"true\"\r\n [(ngModel)]=\"item.value\"\r\n (ngModelChange)=\"searchIn(item, _input)\">\r\n </tcloud-ui-datepicker>\r\n <button class=\"btn-clear-filter-text\" [class.to-hide]=\"!(item.value !== undefined && item.value !== null && item.value !== '')\" (click)=\"searchIn(item, null); item.searchText = undefined; item.value = ''\">\r\n <i class=\"fas fa-times\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n \r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"item.type !== 'date-local'\">\r\n <ng-container *ngIf=\"item.type === 'datetime-local'\">\r\n\r\n <ng-container *ngIf=\"start_stop\">\r\n <ng-container *ngIf=\"item.id === 'start'\">\r\n <div class=\"box-filter-input type-{{item.type}} box-type-{{item.type}}\" [style]=\"(item.width !== '') ? 'width:'+start_stop_width+''+start_stop_und : ''\">\r\n <div class=\"m-description tc-title-ellipsis box-type-{{item.type}}\" title=\"{{ item.description }}\"><i [class.to-active]=\"(_range_date && _range_date.result && _range_date.result.start && _range_date.result.stop )\" class=\"fas fa-filter icon-filter\"></i> </div>\r\n <range-date \r\n #_range_date ngModel name=\"input_{{i+1}}\" \r\n [defaultValuePeriodStartStop]=\"item.defaultValuePeriodStartStop\"\r\n [descriptionStart]=\"descriptionStart\"\r\n [descriptionStop]=\"descriptionStop\"\r\n [UTC]=\"(item && item.UTC) ? true : false\"\r\n required \r\n (onChange)=\"searchInRange(_range_date); searchIn(item, _range_date)\">\r\n </range-date>\r\n </div>\r\n </ng-container> \r\n <input *ngIf=\"item.id === 'start'\" #_input name=\"input_{{i+1}}\" type=\"hidden\" [(ngModel)]=\"start_value\"> \r\n <input *ngIf=\"item.id === 'stop'\" #_input name=\"input_{{i+1}}\" type=\"hidden\" [(ngModel)]=\"stop_value\"> \r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!start_stop\">\r\n\r\n <div class=\"box-filter-input type-{{item.type}} box-type-{{item.type}}\" [style]=\"(item.width !== '') ? 'width:'+item.width : ''\">\r\n <div class=\"m-description tc-title-ellipsis box-type-{{item.type}}\" title=\"{{ item.description }}\"><i [class.to-active]=\"(item.value !== undefined && item.value !== null && item.value !== '')\" class=\"fas fa-filter icon-filter\"></i> {{ item.description }}</div>\r\n <div class=\"box-type-{{item.type}}\">\r\n <tcloud-ui-datepicker-time \r\n #_input \r\n [(ngModel)]=\"item.value\" \r\n name=\"input_{{i+1}}\" \r\n [useOptionsDateTime]=\"(item && item.useOptionsDateTime) ? true : false\"\r\n [UTC]=\"(item && item.UTC) ? true : false\"\r\n (eventChange)=\"searchIn(item, _input)\" >\r\n </tcloud-ui-datepicker-time>\r\n <button class=\"btn-clear-filter-text\" [class.to-hide]=\"!(item.value !== undefined && item.value !== null && item.value !== '')\" (click)=\"searchIn(item, null); item.searchText = undefined; item.value = ''\">\r\n <i class=\"fas fa-times\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n </ng-container>\r\n\r\n </ng-container>\r\n </ng-container>\r\n \r\n <ng-container *ngIf=\"item.type !== 'select' && item.type !== 'datetime-local' && item.type !== 'date-local'\">\r\n <div class=\"box-filter-input type-{{item.type}} box-type-{{item.type}}\" [style]=\"(item.width !== '') ? 'width:'+item.width : ''\">\r\n\r\n <div class=\"m-description tc-title-ellipsis box-type-{{item.type}}\" title=\"{{ item.description }}\"><i [class.to-active]=\"_input.value !== ''\" class=\"fas fa-filter icon-filter\"></i> {{ item.description }}</div>\r\n <div class=\"box-type-{{item.type}}\">\r\n <input \r\n #_input\r\n [(ngModel)]=\"item.value\"\r\n placeholder=\"{{ (item.placeholder !== '') ? item.placeholder : '' }}\"\r\n name=\"input_{{i+1}}\" \r\n type=\"{{ (item.type === 'number') ? 'text' : item.type }}\" \r\n class=\"form-control tc-form-control\" \r\n (keyup)=\"searchIn(item, $event)\"> \r\n <button class=\"btn-clear-filter-text\" [class.to-hide]=\"_input.value === ''\" (click)=\"searchIn(item, null); _input.value = ''\">\r\n <i class=\"fas fa-times\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"item.type === 'select' && item.data && (item.data).length > 0\" >\r\n <div class=\"box-filter-input type-{{item.type}} box-type-{{item.type}}\" [style]=\"(item.width !== '') ? 'width:'+item.width : ''\">\r\n\r\n <div class=\"m-description tc-title-ellipsis box-type-{{item.type}}\" title=\"{{ item.description }}\"><i [class.to-active]=\"_input.value !== ''\" class=\"fas fa-filter icon-filter\"></i> {{ item.description }}</div>\r\n <div class=\"box-type-{{item.type}}\">\r\n <select \r\n #_input\r\n [(ngModel)]=\"item.value\"\r\n name=\"input_{{i+1}}\" \r\n class=\"form-control tc-form-control\" \r\n (change)=\"searchIn(item, $event)\">\r\n <option [ngValue]=\"\"></option>\r\n <ng-container *ngFor=\"let v of item.data\">\r\n <option [value]=\"v.value\">{{ v.description }}</option>\r\n </ng-container>\r\n </select>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n </ng-container>\r\n\r\n\r\n <ng-container *ngIf=\"item.type && item.type === 'boolean'\">\r\n \r\n <div class=\"box-filter-input\" [style]=\"(item.width !== '') ? 'width:'+item.width : ''\">\r\n <div class=\"m-description tc-title-ellipsis\" title=\"{{ item.description }}\" title=\"{{ item.description }}\"><i [class.to-active]=\"_input.checked === true\" class=\"fas fa-filter icon-filter\"></i> {{ item.description }}</div>\r\n <div class=\"area-input-checkbox\">\r\n <div class=\"form-control tc-form-control\">\r\n <label>\r\n {{ item.placeholder }}\r\n <input \r\n #_input\r\n placeholder=\"{{ (item.placeholder !== '') ? item.placeholder : '' }}\"\r\n name=\"input_{{i+1}}\" \r\n type=\"checkbox\" \r\n (change)=\"searchIn(item, _input.checked)\"> \r\n </label>\r\n </div> \r\n </div>\r\n </div>\r\n\r\n </ng-container>\r\n\r\n\r\n </ng-container>\r\n\r\n <div class=\"text-right mb-1 mr-1\" *ngIf=\"useButtonSubmit\">\r\n <button type=\"button\" class=\"tc-btn {{ btnSubmitClass }}\" (click)=\"toSubmit()\" >{{ submitText }}</button>\r\n </div>\r\n\r\n</div>\r\n\r\n<!-- <pre>{{ inputs | json }}</pre> -->\r\n <!-- <pre> {{ data | json }} </pre>\r\n\r\n<p>FILTERS</p>\r\n<pre> {{ filters | json }}</pre> -->\r\n\r\n<!--\r\n <pre>start_stop: {{ start_stop }}</pre>\r\n <pre>start_stop_width: {{ start_stop_width }}</pre>\r\n <pre>start_stop_und: {{ start_stop_und }}</pre>\r\n-->", styles: [".box-filter-input{display:inline-grid;padding:10px 5px;position:relative}.area-filter{border:1px solid #eeeeee;border-radius:5px;margin-bottom:5px}.btn-clear-filter-text{position:absolute;right:8px;top:38px;background-color:#fff;border:none;cursor:pointer;color:#aaa}.to-hide{display:none}.icon-filter{color:#ccc}.to-active{color:var(--tc-primary)}.area-input-checkbox label{cursor:pointer;margin-bottom:0;color:#9f9f9f}.area-input-checkbox div.tc-form-control{height:40px}.m-description{margin-bottom:3px}input{color:#535353}input[type=text],input[type=number],select{height:40px!important}.type-hidden{display:none;width:0px!important}.box-type-global_vars{display:none!important;width:0px!important}.tc-title-ellipsis{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.TCloudUiDatepickerTimeComponent, selector: "tcloud-ui-datepicker-time", inputs: ["UTC", "ngModel", "useOptionsDateTime"], outputs: ["ngModelChange", "onChange", "eventChange"] }, { kind: "component", type: i4.TCloudUiDatepickerComponent, selector: "tcloud-ui-datepicker", inputs: ["multiple", "maxNumberOfDates", "daysOfWeekDisabled", "minDate", "maxDate", "datesDisabled", "modeInput", "useBorder", "childInputDateTime", "ngModel", "code"], outputs: ["onChange", "ngModelChange"] }, { kind: "component", type: i5.TCloudUiRangeDateComponent, selector: "range-date", inputs: ["defaultValuePeriodStartStop", "required", "descriptionStart", "descriptionStop", "UTC"], outputs: ["onChange"] }] });
|
|
457
|
+
TCloudUiFiltersComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: TCloudUiFiltersComponent, selector: "tcloud-ui-filters", inputs: { data: "data", filters: "filters", submitText: "submitText", btnSubmitClass: "btnSubmitClass", useOnChangeSubmit: "useOnChangeSubmit", useButtonSubmit: "useButtonSubmit", useNormalizeCaseSensitive: "useNormalizeCaseSensitive", useRangeDate: "useRangeDate", useFilterAccept: "useFilterAccept" }, outputs: { result: "result", onFilter: "onFilter", onChange: "onChange", onSubmit: "onSubmit" }, viewQueries: [{ propertyName: "_formulario", first: true, predicate: ["_formulario"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div *ngIf=\"show_filters\" class=\"tcloud-ui-filters area-filter\">\r\n <ng-container *ngFor=\"let item of filters; let i = index\">\r\n\r\n <ng-container *ngIf=\"!item.type || (item.type && item.type !== 'boolean')\">\r\n\r\n <ng-container *ngIf=\"item.type === 'date-local'\">\r\n\r\n <div class=\"box-filter-input type-{{item.type}} box-type-{{item.type}}\" [style]=\"(item.width !== '') ? 'width:'+item.width : ''\">\r\n <div class=\"m-description tc-title-ellipsis box-type-{{item.type}}\" title=\"{{ item.description }}\"><i [class.to-active]=\"(item.value !== undefined && item.value !== null && item.value !== '')\" class=\"fas fa-filter icon-filter\"></i> {{ item.description }}</div>\r\n <div class=\"box-type-{{item.type}}\">\r\n <tcloud-ui-datepicker \r\n #_input\r\n name=\"input_{{i+1}}\"\r\n [modeInput]=\"true\"\r\n [(ngModel)]=\"item.value\"\r\n (ngModelChange)=\"searchIn(item, _input)\">\r\n </tcloud-ui-datepicker>\r\n <button class=\"btn-clear-filter-text\" [class.to-hide]=\"!(item.value !== undefined && item.value !== null && item.value !== '')\" (click)=\"searchIn(item, null); item.searchText = undefined; item.value = ''\">\r\n <i class=\"fas fa-times\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n \r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"item.type !== 'date-local'\">\r\n <ng-container *ngIf=\"item.type === 'datetime-local'\">\r\n\r\n <ng-container *ngIf=\"start_stop\">\r\n <!-- PERIOD RANGE DATE -->\r\n <ng-container *ngIf=\"item.id === 'start'\">\r\n <div class=\"box-filter-input type-{{item.type}} box-type-{{item.type}}\" [style]=\"(item.width !== '') ? 'width:'+start_stop_width+''+start_stop_und : ''\">\r\n <div class=\"m-description tc-title-ellipsis box-type-{{item.type}}\" title=\"{{ item.description }}\"><i [class.to-active]=\"(_range_date && _range_date.result && _range_date.result.start && _range_date.result.stop )\" class=\"fas fa-filter icon-filter\"></i> </div>\r\n <range-date \r\n #_range_date ngModel name=\"input_{{i+1}}\" \r\n [defaultValuePeriodStartStop]=\"item.defaultValuePeriodStartStop\"\r\n [descriptionStart]=\"descriptionStart\"\r\n [descriptionStop]=\"descriptionStop\"\r\n required \r\n (onChange)=\"searchInRange(_range_date); searchIn(item, _range_date)\">\r\n </range-date>\r\n </div>\r\n </ng-container> \r\n <input *ngIf=\"item.id === 'start'\" #_input name=\"input_{{i+1}}\" type=\"hidden\" [(ngModel)]=\"start_value\"> \r\n <input *ngIf=\"item.id === 'stop'\" #_input name=\"input_{{i+1}}\" type=\"hidden\" [(ngModel)]=\"stop_value\"> \r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!start_stop\">\r\n\r\n <div class=\"box-filter-input type-{{item.type}} box-type-{{item.type}}\" [style]=\"(item.width !== '') ? 'width:'+item.width : ''\">\r\n <div class=\"m-description tc-title-ellipsis box-type-{{item.type}}\" title=\"{{ item.description }}\"><i [class.to-active]=\"(item.value !== undefined && item.value !== null && item.value !== '')\" class=\"fas fa-filter icon-filter\"></i> {{ item.description }}</div>\r\n <div class=\"box-type-{{item.type}}\">\r\n <tcloud-ui-datepicker-time \r\n #_input \r\n [(ngModel)]=\"item.value\" \r\n name=\"input_{{i+1}}\" \r\n [useOptionsDateTime]=\"(item && item.useOptionsDateTime) ? true : false\"\r\n (eventChange)=\"searchIn(item, _input)\" >\r\n </tcloud-ui-datepicker-time>\r\n <button class=\"btn-clear-filter-text\" [class.to-hide]=\"!(item.value !== undefined && item.value !== null && item.value !== '')\" (click)=\"searchIn(item, null); item.searchText = undefined; item.value = ''\">\r\n <i class=\"fas fa-times\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n </ng-container>\r\n\r\n </ng-container>\r\n </ng-container>\r\n \r\n <ng-container *ngIf=\"item.type !== 'select' && item.type !== 'datetime-local' && item.type !== 'date-local'\">\r\n <div class=\"box-filter-input type-{{item.type}} box-type-{{item.type}}\" [style]=\"(item.width !== '') ? 'width:'+item.width : ''\">\r\n\r\n <div class=\"m-description tc-title-ellipsis box-type-{{item.type}}\" title=\"{{ item.description }}\"><i [class.to-active]=\"_input.value !== ''\" class=\"fas fa-filter icon-filter\"></i> {{ item.description }}</div>\r\n <div class=\"box-type-{{item.type}}\">\r\n <input \r\n #_input\r\n [(ngModel)]=\"item.value\"\r\n placeholder=\"{{ (item.placeholder !== '') ? item.placeholder : '' }}\"\r\n name=\"input_{{i+1}}\" \r\n type=\"{{ (item.type === 'number') ? 'text' : item.type }}\" \r\n class=\"form-control tc-form-control\" \r\n (keyup)=\"searchIn(item, $event)\"> \r\n <button class=\"btn-clear-filter-text\" [class.to-hide]=\"_input.value === ''\" (click)=\"searchIn(item, null); _input.value = ''\">\r\n <i class=\"fas fa-times\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"item.type === 'select' && item.data && (item.data).length > 0\" >\r\n <div class=\"box-filter-input type-{{item.type}} box-type-{{item.type}}\" [style]=\"(item.width !== '') ? 'width:'+item.width : ''\">\r\n\r\n <div class=\"m-description tc-title-ellipsis box-type-{{item.type}}\" title=\"{{ item.description }}\"><i [class.to-active]=\"_input.value !== ''\" class=\"fas fa-filter icon-filter\"></i> {{ item.description }}</div>\r\n <div class=\"box-type-{{item.type}}\">\r\n <select \r\n #_input\r\n [(ngModel)]=\"item.value\"\r\n name=\"input_{{i+1}}\" \r\n class=\"form-control tc-form-control\" \r\n (change)=\"searchIn(item, $event)\">\r\n <option [ngValue]=\"\"></option>\r\n <ng-container *ngFor=\"let v of item.data\">\r\n <option [value]=\"v.value\">{{ v.description }}</option>\r\n </ng-container>\r\n </select>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n </ng-container>\r\n\r\n\r\n <ng-container *ngIf=\"item.type && item.type === 'boolean'\">\r\n \r\n <div class=\"box-filter-input\" [style]=\"(item.width !== '') ? 'width:'+item.width : ''\">\r\n <div class=\"m-description tc-title-ellipsis\" title=\"{{ item.description }}\" title=\"{{ item.description }}\"><i [class.to-active]=\"_input.checked === true\" class=\"fas fa-filter icon-filter\"></i> {{ item.description }}</div>\r\n <div class=\"area-input-checkbox\">\r\n <div class=\"form-control tc-form-control\">\r\n <label>\r\n {{ item.placeholder }}\r\n <input \r\n #_input\r\n placeholder=\"{{ (item.placeholder !== '') ? item.placeholder : '' }}\"\r\n name=\"input_{{i+1}}\" \r\n type=\"checkbox\" \r\n (change)=\"searchIn(item, _input.checked)\"> \r\n </label>\r\n </div> \r\n </div>\r\n </div>\r\n\r\n </ng-container>\r\n\r\n\r\n </ng-container>\r\n\r\n <div class=\"text-right mb-1 mr-1\" *ngIf=\"useButtonSubmit\">\r\n <button type=\"button\" class=\"tc-btn {{ btnSubmitClass }}\" (click)=\"toSubmit()\" >{{ submitText }}</button>\r\n </div>\r\n\r\n</div>\r\n\r\n<!-- <pre>{{ inputs | json }}</pre> -->\r\n<!-- <pre> {{ data | json }} </pre> -->\r\n\r\n<!-- <p>FILTERS</p><pre> {{ filters | json }}</pre> -->\r\n\r\n<!--\r\n <pre>start_stop: {{ start_stop }}</pre>\r\n <pre>start_stop_width: {{ start_stop_width }}</pre>\r\n <pre>start_stop_und: {{ start_stop_und }}</pre>\r\n-->", styles: [".box-filter-input{display:inline-grid;padding:10px 5px;position:relative}.area-filter{border:1px solid #eeeeee;border-radius:5px;margin-bottom:5px}.btn-clear-filter-text{position:absolute;right:8px;top:38px;background-color:#fff;border:none;cursor:pointer;color:#aaa}.to-hide{display:none}.icon-filter{color:#ccc}.to-active{color:var(--tc-primary)}.area-input-checkbox label{cursor:pointer;margin-bottom:0;color:#9f9f9f}.area-input-checkbox div.tc-form-control{height:40px}.m-description{margin-bottom:3px}input{color:#535353}input[type=text],input[type=number],select{height:40px!important}.type-hidden{display:none;width:0px!important}.box-type-global_vars{display:none!important;width:0px!important}.tc-title-ellipsis{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.TCloudUiDatepickerTimeComponent, selector: "tcloud-ui-datepicker-time", inputs: ["ngModel", "useOptionsDateTime"], outputs: ["ngModelChange", "onChange", "eventChange"] }, { kind: "component", type: i4.TCloudUiDatepickerComponent, selector: "tcloud-ui-datepicker", inputs: ["multiple", "maxNumberOfDates", "daysOfWeekDisabled", "minDate", "maxDate", "datesDisabled", "modeInput", "useBorder", "childInputDateTime", "ngModel", "code"], outputs: ["onChange", "ngModelChange"] }, { kind: "component", type: i5.TCloudUiRangeDateComponent, selector: "range-date", inputs: ["defaultValuePeriodStartStop", "required", "descriptionStart", "descriptionStop"], outputs: ["onChange"] }] });
|
|
446
458
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: TCloudUiFiltersComponent, decorators: [{
|
|
447
459
|
type: Component,
|
|
448
|
-
args: [{ selector: 'tcloud-ui-filters', template: "<div *ngIf=\"show_filters\" class=\"tcloud-ui-filters.component area-filter\">\r\n <ng-container *ngFor=\"let item of filters; let i = index\">\r\n\r\n <ng-container *ngIf=\"!item.type || (item.type && item.type !== 'boolean')\">\r\n\r\n <ng-container *ngIf=\"item.type === 'date-local'\">\r\n\r\n <div class=\"box-filter-input type-{{item.type}} box-type-{{item.type}}\" [style]=\"(item.width !== '') ? 'width:'+item.width : ''\">\r\n <div class=\"m-description tc-title-ellipsis box-type-{{item.type}}\" title=\"{{ item.description }}\"><i [class.to-active]=\"(item.value !== undefined && item.value !== null && item.value !== '')\" class=\"fas fa-filter icon-filter\"></i> {{ item.description }}</div>\r\n <div class=\"box-type-{{item.type}}\">\r\n <tcloud-ui-datepicker \r\n #_input\r\n name=\"input_{{i+1}}\"\r\n [modeInput]=\"true\"\r\n [(ngModel)]=\"item.value\"\r\n (ngModelChange)=\"searchIn(item, _input)\">\r\n </tcloud-ui-datepicker>\r\n <button class=\"btn-clear-filter-text\" [class.to-hide]=\"!(item.value !== undefined && item.value !== null && item.value !== '')\" (click)=\"searchIn(item, null); item.searchText = undefined; item.value = ''\">\r\n <i class=\"fas fa-times\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n \r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"item.type !== 'date-local'\">\r\n <ng-container *ngIf=\"item.type === 'datetime-local'\">\r\n\r\n <ng-container *ngIf=\"start_stop\">\r\n <ng-container *ngIf=\"item.id === 'start'\">\r\n <div class=\"box-filter-input type-{{item.type}} box-type-{{item.type}}\" [style]=\"(item.width !== '') ? 'width:'+start_stop_width+''+start_stop_und : ''\">\r\n <div class=\"m-description tc-title-ellipsis box-type-{{item.type}}\" title=\"{{ item.description }}\"><i [class.to-active]=\"(_range_date && _range_date.result && _range_date.result.start && _range_date.result.stop )\" class=\"fas fa-filter icon-filter\"></i> </div>\r\n <range-date \r\n #_range_date ngModel name=\"input_{{i+1}}\" \r\n [defaultValuePeriodStartStop]=\"item.defaultValuePeriodStartStop\"\r\n [descriptionStart]=\"descriptionStart\"\r\n [descriptionStop]=\"descriptionStop\"\r\n [UTC]=\"(item && item.UTC) ? true : false\"\r\n required \r\n (onChange)=\"searchInRange(_range_date); searchIn(item, _range_date)\">\r\n </range-date>\r\n </div>\r\n </ng-container> \r\n <input *ngIf=\"item.id === 'start'\" #_input name=\"input_{{i+1}}\" type=\"hidden\" [(ngModel)]=\"start_value\"> \r\n <input *ngIf=\"item.id === 'stop'\" #_input name=\"input_{{i+1}}\" type=\"hidden\" [(ngModel)]=\"stop_value\"> \r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!start_stop\">\r\n\r\n <div class=\"box-filter-input type-{{item.type}} box-type-{{item.type}}\" [style]=\"(item.width !== '') ? 'width:'+item.width : ''\">\r\n <div class=\"m-description tc-title-ellipsis box-type-{{item.type}}\" title=\"{{ item.description }}\"><i [class.to-active]=\"(item.value !== undefined && item.value !== null && item.value !== '')\" class=\"fas fa-filter icon-filter\"></i> {{ item.description }}</div>\r\n <div class=\"box-type-{{item.type}}\">\r\n <tcloud-ui-datepicker-time \r\n #_input \r\n [(ngModel)]=\"item.value\" \r\n name=\"input_{{i+1}}\" \r\n [useOptionsDateTime]=\"(item && item.useOptionsDateTime) ? true : false\"\r\n [UTC]=\"(item && item.UTC) ? true : false\"\r\n (eventChange)=\"searchIn(item, _input)\" >\r\n </tcloud-ui-datepicker-time>\r\n <button class=\"btn-clear-filter-text\" [class.to-hide]=\"!(item.value !== undefined && item.value !== null && item.value !== '')\" (click)=\"searchIn(item, null); item.searchText = undefined; item.value = ''\">\r\n <i class=\"fas fa-times\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n </ng-container>\r\n\r\n </ng-container>\r\n </ng-container>\r\n \r\n <ng-container *ngIf=\"item.type !== 'select' && item.type !== 'datetime-local' && item.type !== 'date-local'\">\r\n <div class=\"box-filter-input type-{{item.type}} box-type-{{item.type}}\" [style]=\"(item.width !== '') ? 'width:'+item.width : ''\">\r\n\r\n <div class=\"m-description tc-title-ellipsis box-type-{{item.type}}\" title=\"{{ item.description }}\"><i [class.to-active]=\"_input.value !== ''\" class=\"fas fa-filter icon-filter\"></i> {{ item.description }}</div>\r\n <div class=\"box-type-{{item.type}}\">\r\n <input \r\n #_input\r\n [(ngModel)]=\"item.value\"\r\n placeholder=\"{{ (item.placeholder !== '') ? item.placeholder : '' }}\"\r\n name=\"input_{{i+1}}\" \r\n type=\"{{ (item.type === 'number') ? 'text' : item.type }}\" \r\n class=\"form-control tc-form-control\" \r\n (keyup)=\"searchIn(item, $event)\"> \r\n <button class=\"btn-clear-filter-text\" [class.to-hide]=\"_input.value === ''\" (click)=\"searchIn(item, null); _input.value = ''\">\r\n <i class=\"fas fa-times\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"item.type === 'select' && item.data && (item.data).length > 0\" >\r\n <div class=\"box-filter-input type-{{item.type}} box-type-{{item.type}}\" [style]=\"(item.width !== '') ? 'width:'+item.width : ''\">\r\n\r\n <div class=\"m-description tc-title-ellipsis box-type-{{item.type}}\" title=\"{{ item.description }}\"><i [class.to-active]=\"_input.value !== ''\" class=\"fas fa-filter icon-filter\"></i> {{ item.description }}</div>\r\n <div class=\"box-type-{{item.type}}\">\r\n <select \r\n #_input\r\n [(ngModel)]=\"item.value\"\r\n name=\"input_{{i+1}}\" \r\n class=\"form-control tc-form-control\" \r\n (change)=\"searchIn(item, $event)\">\r\n <option [ngValue]=\"\"></option>\r\n <ng-container *ngFor=\"let v of item.data\">\r\n <option [value]=\"v.value\">{{ v.description }}</option>\r\n </ng-container>\r\n </select>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n </ng-container>\r\n\r\n\r\n <ng-container *ngIf=\"item.type && item.type === 'boolean'\">\r\n \r\n <div class=\"box-filter-input\" [style]=\"(item.width !== '') ? 'width:'+item.width : ''\">\r\n <div class=\"m-description tc-title-ellipsis\" title=\"{{ item.description }}\" title=\"{{ item.description }}\"><i [class.to-active]=\"_input.checked === true\" class=\"fas fa-filter icon-filter\"></i> {{ item.description }}</div>\r\n <div class=\"area-input-checkbox\">\r\n <div class=\"form-control tc-form-control\">\r\n <label>\r\n {{ item.placeholder }}\r\n <input \r\n #_input\r\n placeholder=\"{{ (item.placeholder !== '') ? item.placeholder : '' }}\"\r\n name=\"input_{{i+1}}\" \r\n type=\"checkbox\" \r\n (change)=\"searchIn(item, _input.checked)\"> \r\n </label>\r\n </div> \r\n </div>\r\n </div>\r\n\r\n </ng-container>\r\n\r\n\r\n </ng-container>\r\n\r\n <div class=\"text-right mb-1 mr-1\" *ngIf=\"useButtonSubmit\">\r\n <button type=\"button\" class=\"tc-btn {{ btnSubmitClass }}\" (click)=\"toSubmit()\" >{{ submitText }}</button>\r\n </div>\r\n\r\n</div>\r\n\r\n<!-- <pre>{{ inputs | json }}</pre> -->\r\n <!-- <pre> {{ data | json }} </pre>\r\n\r\n<p>FILTERS</p>\r\n<pre> {{ filters | json }}</pre> -->\r\n\r\n<!--\r\n <pre>start_stop: {{ start_stop }}</pre>\r\n <pre>start_stop_width: {{ start_stop_width }}</pre>\r\n <pre>start_stop_und: {{ start_stop_und }}</pre>\r\n-->", styles: [".box-filter-input{display:inline-grid;padding:10px 5px;position:relative}.area-filter{border:1px solid #eeeeee;border-radius:5px;margin-bottom:5px}.btn-clear-filter-text{position:absolute;right:8px;top:38px;background-color:#fff;border:none;cursor:pointer;color:#aaa}.to-hide{display:none}.icon-filter{color:#ccc}.to-active{color:var(--tc-primary)}.area-input-checkbox label{cursor:pointer;margin-bottom:0;color:#9f9f9f}.area-input-checkbox div.tc-form-control{height:40px}.m-description{margin-bottom:3px}input{color:#535353}input[type=text],input[type=number],select{height:40px!important}.type-hidden{display:none;width:0px!important}.box-type-global_vars{display:none!important;width:0px!important}.tc-title-ellipsis{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}\n"] }]
|
|
460
|
+
args: [{ selector: 'tcloud-ui-filters', template: "<div *ngIf=\"show_filters\" class=\"tcloud-ui-filters area-filter\">\r\n <ng-container *ngFor=\"let item of filters; let i = index\">\r\n\r\n <ng-container *ngIf=\"!item.type || (item.type && item.type !== 'boolean')\">\r\n\r\n <ng-container *ngIf=\"item.type === 'date-local'\">\r\n\r\n <div class=\"box-filter-input type-{{item.type}} box-type-{{item.type}}\" [style]=\"(item.width !== '') ? 'width:'+item.width : ''\">\r\n <div class=\"m-description tc-title-ellipsis box-type-{{item.type}}\" title=\"{{ item.description }}\"><i [class.to-active]=\"(item.value !== undefined && item.value !== null && item.value !== '')\" class=\"fas fa-filter icon-filter\"></i> {{ item.description }}</div>\r\n <div class=\"box-type-{{item.type}}\">\r\n <tcloud-ui-datepicker \r\n #_input\r\n name=\"input_{{i+1}}\"\r\n [modeInput]=\"true\"\r\n [(ngModel)]=\"item.value\"\r\n (ngModelChange)=\"searchIn(item, _input)\">\r\n </tcloud-ui-datepicker>\r\n <button class=\"btn-clear-filter-text\" [class.to-hide]=\"!(item.value !== undefined && item.value !== null && item.value !== '')\" (click)=\"searchIn(item, null); item.searchText = undefined; item.value = ''\">\r\n <i class=\"fas fa-times\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n \r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"item.type !== 'date-local'\">\r\n <ng-container *ngIf=\"item.type === 'datetime-local'\">\r\n\r\n <ng-container *ngIf=\"start_stop\">\r\n <!-- PERIOD RANGE DATE -->\r\n <ng-container *ngIf=\"item.id === 'start'\">\r\n <div class=\"box-filter-input type-{{item.type}} box-type-{{item.type}}\" [style]=\"(item.width !== '') ? 'width:'+start_stop_width+''+start_stop_und : ''\">\r\n <div class=\"m-description tc-title-ellipsis box-type-{{item.type}}\" title=\"{{ item.description }}\"><i [class.to-active]=\"(_range_date && _range_date.result && _range_date.result.start && _range_date.result.stop )\" class=\"fas fa-filter icon-filter\"></i> </div>\r\n <range-date \r\n #_range_date ngModel name=\"input_{{i+1}}\" \r\n [defaultValuePeriodStartStop]=\"item.defaultValuePeriodStartStop\"\r\n [descriptionStart]=\"descriptionStart\"\r\n [descriptionStop]=\"descriptionStop\"\r\n required \r\n (onChange)=\"searchInRange(_range_date); searchIn(item, _range_date)\">\r\n </range-date>\r\n </div>\r\n </ng-container> \r\n <input *ngIf=\"item.id === 'start'\" #_input name=\"input_{{i+1}}\" type=\"hidden\" [(ngModel)]=\"start_value\"> \r\n <input *ngIf=\"item.id === 'stop'\" #_input name=\"input_{{i+1}}\" type=\"hidden\" [(ngModel)]=\"stop_value\"> \r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!start_stop\">\r\n\r\n <div class=\"box-filter-input type-{{item.type}} box-type-{{item.type}}\" [style]=\"(item.width !== '') ? 'width:'+item.width : ''\">\r\n <div class=\"m-description tc-title-ellipsis box-type-{{item.type}}\" title=\"{{ item.description }}\"><i [class.to-active]=\"(item.value !== undefined && item.value !== null && item.value !== '')\" class=\"fas fa-filter icon-filter\"></i> {{ item.description }}</div>\r\n <div class=\"box-type-{{item.type}}\">\r\n <tcloud-ui-datepicker-time \r\n #_input \r\n [(ngModel)]=\"item.value\" \r\n name=\"input_{{i+1}}\" \r\n [useOptionsDateTime]=\"(item && item.useOptionsDateTime) ? true : false\"\r\n (eventChange)=\"searchIn(item, _input)\" >\r\n </tcloud-ui-datepicker-time>\r\n <button class=\"btn-clear-filter-text\" [class.to-hide]=\"!(item.value !== undefined && item.value !== null && item.value !== '')\" (click)=\"searchIn(item, null); item.searchText = undefined; item.value = ''\">\r\n <i class=\"fas fa-times\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n </ng-container>\r\n\r\n </ng-container>\r\n </ng-container>\r\n \r\n <ng-container *ngIf=\"item.type !== 'select' && item.type !== 'datetime-local' && item.type !== 'date-local'\">\r\n <div class=\"box-filter-input type-{{item.type}} box-type-{{item.type}}\" [style]=\"(item.width !== '') ? 'width:'+item.width : ''\">\r\n\r\n <div class=\"m-description tc-title-ellipsis box-type-{{item.type}}\" title=\"{{ item.description }}\"><i [class.to-active]=\"_input.value !== ''\" class=\"fas fa-filter icon-filter\"></i> {{ item.description }}</div>\r\n <div class=\"box-type-{{item.type}}\">\r\n <input \r\n #_input\r\n [(ngModel)]=\"item.value\"\r\n placeholder=\"{{ (item.placeholder !== '') ? item.placeholder : '' }}\"\r\n name=\"input_{{i+1}}\" \r\n type=\"{{ (item.type === 'number') ? 'text' : item.type }}\" \r\n class=\"form-control tc-form-control\" \r\n (keyup)=\"searchIn(item, $event)\"> \r\n <button class=\"btn-clear-filter-text\" [class.to-hide]=\"_input.value === ''\" (click)=\"searchIn(item, null); _input.value = ''\">\r\n <i class=\"fas fa-times\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"item.type === 'select' && item.data && (item.data).length > 0\" >\r\n <div class=\"box-filter-input type-{{item.type}} box-type-{{item.type}}\" [style]=\"(item.width !== '') ? 'width:'+item.width : ''\">\r\n\r\n <div class=\"m-description tc-title-ellipsis box-type-{{item.type}}\" title=\"{{ item.description }}\"><i [class.to-active]=\"_input.value !== ''\" class=\"fas fa-filter icon-filter\"></i> {{ item.description }}</div>\r\n <div class=\"box-type-{{item.type}}\">\r\n <select \r\n #_input\r\n [(ngModel)]=\"item.value\"\r\n name=\"input_{{i+1}}\" \r\n class=\"form-control tc-form-control\" \r\n (change)=\"searchIn(item, $event)\">\r\n <option [ngValue]=\"\"></option>\r\n <ng-container *ngFor=\"let v of item.data\">\r\n <option [value]=\"v.value\">{{ v.description }}</option>\r\n </ng-container>\r\n </select>\r\n </div>\r\n </div>\r\n </ng-container>\r\n\r\n </ng-container>\r\n\r\n\r\n <ng-container *ngIf=\"item.type && item.type === 'boolean'\">\r\n \r\n <div class=\"box-filter-input\" [style]=\"(item.width !== '') ? 'width:'+item.width : ''\">\r\n <div class=\"m-description tc-title-ellipsis\" title=\"{{ item.description }}\" title=\"{{ item.description }}\"><i [class.to-active]=\"_input.checked === true\" class=\"fas fa-filter icon-filter\"></i> {{ item.description }}</div>\r\n <div class=\"area-input-checkbox\">\r\n <div class=\"form-control tc-form-control\">\r\n <label>\r\n {{ item.placeholder }}\r\n <input \r\n #_input\r\n placeholder=\"{{ (item.placeholder !== '') ? item.placeholder : '' }}\"\r\n name=\"input_{{i+1}}\" \r\n type=\"checkbox\" \r\n (change)=\"searchIn(item, _input.checked)\"> \r\n </label>\r\n </div> \r\n </div>\r\n </div>\r\n\r\n </ng-container>\r\n\r\n\r\n </ng-container>\r\n\r\n <div class=\"text-right mb-1 mr-1\" *ngIf=\"useButtonSubmit\">\r\n <button type=\"button\" class=\"tc-btn {{ btnSubmitClass }}\" (click)=\"toSubmit()\" >{{ submitText }}</button>\r\n </div>\r\n\r\n</div>\r\n\r\n<!-- <pre>{{ inputs | json }}</pre> -->\r\n<!-- <pre> {{ data | json }} </pre> -->\r\n\r\n<!-- <p>FILTERS</p><pre> {{ filters | json }}</pre> -->\r\n\r\n<!--\r\n <pre>start_stop: {{ start_stop }}</pre>\r\n <pre>start_stop_width: {{ start_stop_width }}</pre>\r\n <pre>start_stop_und: {{ start_stop_und }}</pre>\r\n-->", styles: [".box-filter-input{display:inline-grid;padding:10px 5px;position:relative}.area-filter{border:1px solid #eeeeee;border-radius:5px;margin-bottom:5px}.btn-clear-filter-text{position:absolute;right:8px;top:38px;background-color:#fff;border:none;cursor:pointer;color:#aaa}.to-hide{display:none}.icon-filter{color:#ccc}.to-active{color:var(--tc-primary)}.area-input-checkbox label{cursor:pointer;margin-bottom:0;color:#9f9f9f}.area-input-checkbox div.tc-form-control{height:40px}.m-description{margin-bottom:3px}input{color:#535353}input[type=text],input[type=number],select{height:40px!important}.type-hidden{display:none;width:0px!important}.box-type-global_vars{display:none!important;width:0px!important}.tc-title-ellipsis{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}\n"] }]
|
|
449
461
|
}], ctorParameters: function () { return [{ type: i1.DatePipe }]; }, propDecorators: { _formulario: [{
|
|
450
462
|
type: ViewChild,
|
|
451
463
|
args: ['_formulario']
|
|
@@ -476,4 +488,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
|
|
|
476
488
|
}], onSubmit: [{
|
|
477
489
|
type: Output
|
|
478
490
|
}] } });
|
|
479
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGNsb3VkLXVpLWZpbHRlcnMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGNsb3VkLXVpL3NyYy9saWIvX21vZHVsZXMvdGNsb3VkLXVpLWZpbHRlcnMvdGNsb3VkLXVpLWZpbHRlcnMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGNsb3VkLXVpL3NyYy9saWIvX21vZHVsZXMvdGNsb3VkLXVpLWZpbHRlcnMvdGNsb3VkLXVpLWZpbHRlcnMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBaUIsWUFBWSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVwSCxPQUFPLEVBQUUsV0FBVyxFQUFpQixhQUFhLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7OztBQU9oRixNQUFNLE9BQU8sd0JBQXdCO0lBcURuQyxZQUNVLFFBQWtCO1FBQWxCLGFBQVEsR0FBUixRQUFRLENBQVU7UUFwRDVCLGdCQUFXLEdBQUcsRUFBUyxDQUFDO1FBSXhCLFdBQU0sR0FBYSxFQUFFLENBQUM7UUFFdEIsaUJBQVksR0FBWSxLQUFLLENBQUM7UUFnQnRCLGdCQUFXLEdBQVcsU0FBUyxDQUFDO1FBUS9CLG1CQUFjLEdBQVcsZ0JBQWdCLENBQUM7UUFDMUMsc0JBQWlCLEdBQVksSUFBSSxDQUFDLENBQUMsMkVBQTJFO1FBQzlHLG9CQUFlLEdBQVksS0FBSyxDQUFDLENBQUMsbUZBQW1GO1FBQ3JILDhCQUF5QixHQUFZLElBQUksQ0FBQyxDQUFDLG9GQUFvRjtRQUMvSCxpQkFBWSxHQUFZLElBQUksQ0FBQztRQUM3QixvQkFBZSxHQUFZLEtBQUssQ0FBQztRQUVoQyxXQUFNLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUNqQyxhQUFRLEdBQUcsSUFBSSxZQUFZLEVB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QUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBRUksTUFBTTtzQkFBZixNQUFNO2dCQUNHLFFBQVE7c0JBQWpCLE1BQU07Z0JBQ0csUUFBUTtzQkFBakIsTUFBTTtnQkFDRyxRQUFRO3NCQUFqQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGF0ZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcywgRXZlbnRFbWl0dGVyLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5nRm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFRDQ29uZGl0aW9uLCBUQ0RhdGFGaWx0ZXJzLCBUQ0ZpbHRlcnNUeXBlIH0gZnJvbSAnLi90Y2xvdWQtdWktZmlsdGVycyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3RjbG91ZC11aS1maWx0ZXJzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3RjbG91ZC11aS1maWx0ZXJzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vdGNsb3VkLXVpLWZpbHRlcnMuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBUQ2xvdWRVaUZpbHRlcnNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG5cbiAgZGF0ZXBpY2tlcnMgPSBbXSBhcyBhbnk7XG5cbiAgQFZpZXdDaGlsZCgnX2Zvcm11bGFyaW8nKSAgX2Zvcm11bGFyaW86IE5nRm9ybSB8IHVuZGVmaW5lZDtcblxuICBpbnB1dHM6IHN0cmluZ1tdID0gW107XG5cbiAgc2hvd19maWx0ZXJzOiBib29sZWFuID0gZmFsc2U7XG5cbiAgc2VhcmNoX2RhdGE6IGFueSB8IHVuZGVmaW5lZDtcblxuICBwcml2YXRlIF9kYXRhOiBhbnkgfCB1bmRlZmluZWQ7XG4gIEBJbnB1dCgpIHNldCBkYXRhKGRhdGE6IGFueSl7XG4gICAgLy8gdGhpcy5fZGF0YSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xuICB9XG4gIGdldCBkYXRhKCk6IGFueXsgcmV0dXJuIHRoaXMuX2RhdGE7IH1cblxuICBwcml2YXRlIF9maWx0ZXJzOiBUQ0RhdGFGaWx0ZXJzIHwgdW5kZWZpbmVkO1xuICBASW5wdXQoKSBzZXQgZmlsdGVycyhmaWx0ZXJzOiBhbnkpe1xuICAgIC8vdGhpcy5fZmlsdGVycyA9IGZpbHRlcnM7XG4gIH1cbiAgZ2V0IGZpbHRlcnMoKTogYW55eyByZXR1cm4gdGhpcy5fZmlsdGVyczsgfVxuXG4gIHByaXZhdGUgX3N1Ym1pdFRleHQ6IHN0cmluZyA9ICdGaWx0cmFyJztcbiAgQElucHV0KCkgc2V0IHN1Ym1pdFRleHQodjogc3RyaW5nKXsgXG4gICAgaWYoIHYgJiYgdiAhPT0gdGhpcy5fc3VibWl0VGV4dCApe1xuICAgICAgdGhpcy5fc3VibWl0VGV4dCA9IHY7XG4gICAgfVxuICB9XG4gIGdldCBzdWJtaXRUZXh0KCk6c3RyaW5neyByZXR1cm4gdGhpcy5fc3VibWl0VGV4dDsgfVxuXG4gIEBJbnB1dCgpIGJ0blN1Ym1pdENsYXNzOiBzdHJpbmcgPSAndGMtYnRuLXByaW1hcnknO1xuICBASW5wdXQoKSB1c2VPbkNoYW5nZVN1Ym1pdDogYm9vbGVhbiA9IHRydWU7IC8vIHVzZU9uQ2hhbmdlU3VibWl0IC0gU3VibWl0IGF1dG9tYXRpY28gcXVhbmRvIGZvciBhbHRlcmFkbyBxdWFucXVlciBpbnB1dFxuICBASW5wdXQoKSB1c2VCdXR0b25TdWJtaXQ6IGJvb2xlYW4gPSBmYWxzZTsgLy8gdXNlQnV0dG9uU3VibWl0IC0gRXhpYmUgdW0gYm90w6NvIGRlIHN1Ym1pdCBlIG7Do28gZXhlY3V0YSBhIGJ1c2NhIGF1dG9tYXRpY2FtZW50ZVxuICBASW5wdXQoKSB1c2VOb3JtYWxpemVDYXNlU2Vuc2l0aXZlOiBib29sZWFuID0gdHJ1ZTsgLy8gdXNlTm9ybWFsaXplQ2FzZVNlbnNpdGl2ZSAtIE7Do28gdmFsaWRhIGNhaXhhIGFsdGEgb3UgYmFpeGEgZSBjYXJhY3RlcmVzIGVzcGVjaWFpc1xuICBASW5wdXQoKSB1c2VSYW5nZURhdGU6IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoKSB1c2VGaWx0ZXJBY2NlcHQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBAT3V0cHV0KCkgcmVzdWx0ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBvbkZpbHRlciA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIG9uU3VibWl0ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgZGVzY3JpcHRpb25TdGFydDogc3RyaW5nID0gJyc7XG4gIGRlc2NyaXB0aW9uU3RvcDogc3RyaW5nID0gJyc7XG5cbiAgcHJpdmF0ZSBmaXJzdF9hY3RpdmVfZmlsdGVyOiBib29sZWFuID0gZmFsc2U7XG5cbiAgc3RhcnRfc3RvcDogYm9vbGVhbiA9IGZhbHNlO1xuICBzdGFydF9zdG9wX3dpZHRoOiBudW1iZXIgPSAwO1xuICBzdGFydF9zdG9wX3VuZDogc3RyaW5nID0gJyc7IC8vIHB4IG91ICVcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGRhdGVwaXBlOiBEYXRlUGlwZVxuICApIHsgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYoIHRoaXMuZmlsdGVycyAmJiAodGhpcy5maWx0ZXJzKS5sZW5ndGggPiAwICl7XG4gICAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCAodGhpcy5maWx0ZXJzKS5sZW5ndGg7IGkrKyl7XG4gICAgICAgICAgaWYoIHRoaXMuZmlsdGVyc1tpXS52YWx1ZSApe1xuICAgICAgICAgICAgaWYoIHRoaXMuZmlsdGVyc1tpXS50eXBlID09PSAnZGF0ZXRpbWUtbG9jYWwnICl7XG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJzW2ldLnNlYXJjaFRleHQgPSBuZXcgRGF0ZSggYCR7dGhpcy5maWx0ZXJzW2ldLnZhbHVlfWAgKTtcbiAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHt9XG4gICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgdGhpcy5maWx0ZXJzW2ldLnNlYXJjaFRleHQgPSB0aGlzLmZpbHRlcnNbaV0udmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmZpcnN0X2FjdGl2ZV9maWx0ZXIgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSAgICAgIFxuICAgICAgfVxuICAgICAgdGhpcy5zdGFydF9zdG9wID0gKHRoaXMudXNlUmFuZ2VEYXRlKSA/IHRoaXMuaXNfc3RhcnRfc3RvcF9kYXRldGltZSgpIDogZmFsc2U7XG4gICAgICB0aGlzLnRvU3VibWl0KCk7XG4gICAgfSk7XG4gIH1cblxuICBpc19zdGFydF9zdG9wX2RhdGV0aW1lKCl7XG4gICAgbGV0IHN0YXJ0ID0gZmFsc2U7XG4gICAgbGV0IHN0b3AgPSBmYWxzZTtcbiAgICBpZiggdGhpcy5maWx0ZXJzICYmICh0aGlzLmZpbHRlcnMpLmxlbmd0aCA+IDAgKXtcbiAgICAgIHRoaXMuc3RhcnRfc3RvcF93aWR0aCA9IDA7XG4gICAgICBmb3IobGV0IGkgPSAwOyBpIDwgKHRoaXMuZmlsdGVycykubGVuZ3RoOyBpKyspe1xuICAgICAgICBpZiggdGhpcy5maWx0ZXJzW2ldLmlkID09PSAnc3RhcnQnICl7XG4gICAgICAgICAgc3RhcnQgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuc3RhcnRfc3RvcF93aWR0aCArPSB0aGlzLmdldFZhbHVlV2lkdGgodGhpcy5maWx0ZXJzW2ldLndpZHRoKTtcbiAgICAgICAgICB0aGlzLnN0YXJ0X3N0b3BfdW5kID0gdGhpcy5nZXRVbmlkYWRlKHRoaXMuZmlsdGVyc1tpXS53aWR0aCk7XG4gICAgICAgICAgdGhpcy5kZXNjcmlwdGlvblN0YXJ0ID0gdGhpcy5maWx0ZXJzW2ldLmRlc2NyaXB0aW9uO1xuICAgICAgICB9XG4gICAgICAgIGlmKCB0aGlzLmZpbHRlcnNbaV0uaWQgPT09ICdzdG9wJyApe1xuICAgICAgICAgIHN0b3AgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuc3RhcnRfc3RvcF93aWR0aCArPSB0aGlzLmdldFZhbHVlV2lkdGgodGhpcy5maWx0ZXJzW2ldLndpZHRoKTtcbiAgICAgICAgICB0aGlzLmRlc2NyaXB0aW9uU3RvcCA9IHRoaXMuZmlsdGVyc1tpXS5kZXNjcmlwdGlvbjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gKCBzdGFydCAmJiBzdG9wICkgPyB0cnVlIDogZmFsc2U7XG4gIH1cblxuICBnZXRWYWx1ZVdpZHRoKHY6IHN0cmluZyk6bnVtYmVyIHtcbiAgICBsZXQgdW5kID0gdGhpcy5nZXRVbmlkYWRlKHYpO1xuICAgIHYgPSAodikucmVwbGFjZSh1bmQsICcnKTtcbiAgICByZXR1cm4gKyh2KTtcbiAgfVxuXG4gIGdldFVuaWRhZGUodjogc3RyaW5nKTpzdHJpbmcge1xuICAgIGxldCB1bmQgPSAnJSc7XG4gICAgaWYoIHYgJiYgKHYpLmluY2x1ZGVzKCdweCcpICl7XG4gICAgICB1bmQgPSAncHgnO1xuICAgIH1cbiAgICByZXR1cm4gdW5kO1xuICB9XG4gXG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykgeyAgXG4gICAgXG4gICAgaWYoIGNoYW5nZXMgJiYgY2hhbmdlc1snZGF0YSddICl7XG4gICAgICBjb25zdCBkYXRhID0gY2hhbmdlc1snZGF0YSddLmN1cnJlbnRWYWx1ZTtcbiAgICAgIGlmKCB0aGlzLl9kYXRhICE9PSBkYXRhICl7XG4gICAgICAgIHRoaXMuX2RhdGEgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcbiAgICAgICAgdGhpcy5zZWFyY2hfZGF0YSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xuICAgICAgICB0aGlzLmluaXQoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiggY2hhbmdlcyAmJiBjaGFuZ2VzWydmaWx0ZXJzJ10gKXtcbiAgICAgIGNvbnN0IGZpbHRlcnMgPSBjaGFuZ2VzWydmaWx0ZXJzJ10uY3VycmVudFZhbHVlO1xuICAgICAgaWYoIHRoaXMuX2ZpbHRlcnMgIT09IGZpbHRlcnMgKXtcbiAgICAgICAgdGhpcy5fZmlsdGVycyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZmlsdGVycykpO1xuICAgICAgICB0aGlzLmluaXQoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGluaXQoKXtcbiAgICBpZiggdGhpcy5kYXRhICYmIHRoaXMuZmlsdGVycyApe1xuICAgICAgdGhpcy5zaG93X2ZpbHRlcnMgPSB0cnVlO1xuICAgICAgaWYoIHRoaXMuZmlsdGVycyAmJiAodGhpcy5maWx0ZXJzKS5sZW5ndGggPiAwICl7XG4gICAgICAgICh0aGlzLmZpbHRlcnMpLmZvckVhY2goKGZpbHRlcjogVENEYXRhRmlsdGVycykgPT4geyAgICAgICAgICAgIFxuICAgICAgICAgIHRoaXMuc2VhcmNoSW4oZmlsdGVyLCAnc3luYycpO1xuICAgICAgICB9KTtcbiAgICAgIH0gXG4gICAgICAvLyB0aGlzLnRvUmVzdWx0KCk7XG4gICAgICBpZiggIXRoaXMudXNlT25DaGFuZ2VTdWJtaXQgKXtcbiAgICAgICAgdGhpcy5yZXN1bHRfYWNjZXB0KHRoaXMuZGF0YSk7XG4gICAgICB9XG5cbiAgICAgIGlmKCB0aGlzLnVzZU9uQ2hhbmdlU3VibWl0IHx8IHRoaXMudXNlQnV0dG9uU3VibWl0ICl7XG4gICAgICAgIHRoaXMuc3RhcnRfZmlsdGVyKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBub3JtYWxpemUodGV4dDogYW55KTogc3RyaW5ne1xuICAgIGlmKCB0aGlzLnVzZU5vcm1hbGl6ZUNhc2VTZW5zaXRpdmUgKXtcbiAgICAgIGNvbnN0IHYgPSAoICggKGAke3RleHR9YCkubm9ybWFsaXplKCdORkQnKS5yZXBsYWNlKC9bXFx1MDMwMC1cXHUwMzZmXS9nLCBcIlwiKSApLnRyaW0oKSApLnRvTG93ZXJDYXNlKCk7XG4gICAgICByZXR1cm4gdjtcbiAgICB9XG4gICAgcmV0dXJuIHRleHQ7XG4gIH1cblxuICB0b1N1Ym1pdCgpe1xuICAgIGlmKCB0aGlzLmZpbHRlcnMgJiYgKHRoaXMuZmlsdGVycykubGVuZ3RoID4gMCApe1xuICAgICAgdGhpcy5pbml0KCk7XG4gICAgfVxuICAgIHRoaXMuZW1pdFN1Ym1pdEZpbHRlcnMoKTtcbiAgfVxuXG4gIHByaXZhdGUgZW1pdFN1Ym1pdEZpbHRlcnMoKXtcbiAgICBsZXQgZmlsdGVycyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5maWx0ZXJzKSk7XG4gICAgaWYoIGZpbHRlcnMgJiYgKGZpbHRlcnMpLmxlbmd0aCA+IDAgKXtcbiAgICAgIChmaWx0ZXJzKS5mb3JFYWNoKChmaWx0ZXI6IFRDRGF0YUZpbHRlcnMsIGk6IG51bWJlcikgPT4ge1xuXG4gICAgICAgIGlmKCBmaWx0ZXIud2lkdGggKXsgZGVsZXRlKGZpbHRlcnNbaV0ud2lkdGgpOyB9XG4gICAgICAgIGlmKCBmaWx0ZXIucGxhY2Vob2xkZXIgKXsgZGVsZXRlKGZpbHRlcnNbaV0ucGxhY2Vob2xkZXIpOyB9XG4gICAgICAgIGlmKCBmaWx0ZXIuZGVzY3JpcHRpb24gKXsgZGVsZXRlKGZpbHRlcnNbaV0uZGVzY3JpcHRpb24pOyB9XG5cbiAgICAgICAgaWYoICghZmlsdGVyLnNlYXJjaFRleHQgfHwgZmlsdGVyLnNlYXJjaFRleHQgJiYgZmlsdGVyLnNlYXJjaFRleHQgPT09ICcnKSAmJiBmaWx0ZXIudHlwZSAhPT0gXCJib29sZWFuXCIgKXtcbiAgICAgICAgICBkZWxldGUoZmlsdGVyc1tpXSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYoIGZpbHRlci50eXBlID09PSBcImJvb2xlYW5cIiApe1xuICAgICAgICAgIGlmKCAhZmlsdGVyLnNlYXJjaFRleHQgKXtcbiAgICAgICAgICAgIGZpbHRlci5zZWFyY2hUZXh0ID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgfSk7XG4gICAgfSAgIFxuICAgIFxuICAgIHRoaXMub25TdWJtaXQuZW1pdCh0aGlzLmZpbHRlcnMpO1xuICB9XG5cblxuICBwcml2YXRlIGNvbGxlY3Rpb25GaW5kKG9iajogYW55LCBwYXRoOiBhbnkpOiBhbnkge1xuICAgIGNvbnN0IHBhdGhBcnJheSA9IHBhdGguc3BsaXQoXCIuXCIpO1xuICAgIGxldCBjdXJyZW50ID0gb2JqO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aEFycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBrZXkgPSBwYXRoQXJyYXlbaV07XG5cbiAgICAgIGlmIChrZXkuaW5jbHVkZXMoJ1snKSAmJiBrZXkuaW5jbHVkZXMoJ10nKSkge1xuICAgICAgICBjb25zdCBuZXh0S2V5cyA9IHBhdGhBcnJheS5zbGljZShpICsgMSk7XG4gICAgICAgIGNvbnN0IGluZGV4ID0ga2V5LnN1YnN0cmluZyhrZXkuaW5kZXhPZignWycpICsgMSwga2V5LmluZGV4T2YoJ10nKSk7XG4gICAgICAgIGNvbnN0IGFycmF5S2V5ID0ga2V5LnN1YnN0cmluZygwLCBrZXkuaW5kZXhPZignWycpKTtcbiAgICAgICAgaWYoIGN1cnJlbnQgJiYgY3VycmVudFthcnJheUtleV0gJiYgY3VycmVudFthcnJheUtleV1baW5kZXhdICl7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuY29sbGVjdGlvbkZpbmQoY3VycmVudFthcnJheUtleV1baW5kZXhdLCBuZXh0S2V5cy5qb2luKFwiLlwiKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuXG4gICAgICBpZiAoa2V5LmluY2x1ZGVzKFwiW11cIikpIHtcbiAgICAgICAgY29uc3QgYXJyYXlLZXkgPSBrZXkucmVwbGFjZShcIltdXCIsIFwiXCIpO1xuICAgICAgICBjdXJyZW50ID0gY3VycmVudFthcnJheUtleV0gfHwgW107XG4gICAgICAgIGNvbnN0IG5leHRLZXlzID0gcGF0aEFycmF5LnNsaWNlKGkgKyAxKTtcbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IFtdO1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGN1cnJlbnQubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICBsZXQgcmVzdWx0ID0gdGhpcy5jb2xsZWN0aW9uRmluZChjdXJyZW50W2pdLCBuZXh0S2V5cy5qb2luKFwiLlwiKSk7XG4gICAgICAgICAgaWYgKHJlc3VsdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXN1bHRzLnB1c2gocmVzdWx0KTsgXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChyZXN1bHRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiggIWN1cnJlbnQgfHwgKGN1cnJlbnQgJiYgIWN1cnJlbnRba2V5XSkgKXtcbiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGN1cnJlbnQgPSBjdXJyZW50W2tleV07XG4gICAgICAgIGlmIChjdXJyZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjdXJyZW50O1xuICB9XG4gICAgXG4gIGZpcnN0OiBib29sZWFuID0gdHJ1ZTtcbiAgc3RhcnRfZmlsdGVyX2ZjOiBhbnkgPSB1bmRlZmluZWQ7XG5cbiAgc3RhcnRfdmFsdWU6IGFueSB8IHVuZGVmaW5lZDtcbiAgc3RvcF92YWx1ZTogYW55IHwgdW5kZWZpbmVkO1xuXG4gIHNlYXJjaEluUmFuZ2UoIHJhbmdlX2RhdGU6IGFueSl7XG4gICAgXG4gICAgaWYoIHRoaXMuZmlsdGVycyAmJiAodGhpcy5maWx0ZXJzKS5sZW5ndGggPiAwICl7XG5cbiAgICAgIGxldCBldmVudCA9IHt9IGFzIGFueTsgXG4gICAgICBldmVudC5kYXRlcGlja2VydGltZSA9IHRydWU7XG5cbiAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgKHRoaXMuZmlsdGVycykubGVuZ3RoOyBpKysgKXtcblxuICAgICAgICBpZiggdGhpcy5maWx0ZXJzW2ldICYmIHRoaXMuZmlsdGVyc1tpXS5pZCAmJiB0aGlzLmZpbHRlcnNbaV0uaWQgPT09ICdzdGFydCcgKXtcbiAgICAgICAgICB0aGlzLmZpbHRlcnNbaV0udmFsdWUgPSByYW5nZV9kYXRlPy5yZXN1bHQ/LnN0YXJ0ITtcbiAgICAgICAgICB0aGlzLmZpbHRlcnNbaV0uc2VhcmNoVGV4dCA9IHJhbmdlX2RhdGU/LnJlc3VsdD8uc3RhcnQhO1xuICAgICAgICAgIGV2ZW50LmlubmVyVmFsdWUgPSB0aGlzLnN0YXJ0X3ZhbHVlID0gcmFuZ2VfZGF0ZT8ucmVzdWx0Py5zdGFydCE7XG4gICAgICAgICAgdGhpcy5zZWFyY2hJbih0aGlzLmZpbHRlcnNbaV0sIGV2ZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKCB0aGlzLmZpbHRlcnNbaV0gJiYgdGhpcy5maWx0ZXJzW2ldLmlkICYmIHRoaXMuZmlsdGVyc1tpXS5pZCA9PT0gJ3N0b3AnICl7XG4gICAgICAgICAgdGhpcy5maWx0ZXJzW2ldLnZhbHVlID0gcmFuZ2VfZGF0ZT8ucmVzdWx0Py5zdG9wITtcbiAgICAgICAgICB0aGlzLmZpbHRlcnNbaV0uc2VhcmNoVGV4dCA9IHJhbmdlX2RhdGU/LnJlc3VsdD8uc3RvcCE7XG4gICAgICAgICAgZXZlbnQuaW5uZXJWYWx1ZSA9IHRoaXMuc3RvcF92YWx1ZSA9IHJhbmdlX2RhdGU/LnJlc3VsdD8uc3RvcCE7XG4gICAgICAgICAgdGhpcy5zZWFyY2hJbih0aGlzLmZpbHRlcnNbaV0sIGV2ZW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYoIHRoaXMuZmlyc3QgfHwgdGhpcy51c2VPbkNoYW5nZVN1Ym1pdCApe1xuICAgICAgICB0aGlzLnRvU3VibWl0KCk7XG4gICAgICB9XG4gICAgICBcbiAgICB9XG4gICAgdGhpcy5maXJzdCA9IGZhbHNlO1xuXG4gIH1cblxuICBjb252ZXJ0RGF0YVRvTnVtYmVyKGRhdGFTdHJpbmc6IHN0cmluZyk6IG51bWJlciB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IFtkaWEsIG1lcywgYW5vXSA9IGRhdGFTdHJpbmcuc3BsaXQoJy8nKTtcbiAgICAgIHJldHVybiArKGAke2Fub30ke21lc30ke2RpYX1gKTtcbiAgICB9IGNhdGNoIChlcnJvcikge31cbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIHNlYXJjaEluKGl0ZW06IFRDRGF0YUZpbHRlcnMsIGV2ZW50PzogYW55KXtcblxuICAgXG5cbiAgICB0aGlzLnN0YXJ0X2ZpbHRlcl9mYyA9IHVuZGVmaW5lZDtcblxuICAgIGxldCBpc1ZhbGlkID0gdHJ1ZTtcblxuICAgIGlmKCBldmVudCA9PT0gJ3N5bmMnICYmIGlzVmFsaWQgKXtcbiAgICAgIGlzVmFsaWQgPSBmYWxzZTtcbiAgICAgIHRoaXMub25DaGFuZ2UuZW1pdCh0cnVlKTtcbiAgICB9XG5cbiAgICBpZiggdHlwZW9mIGV2ZW50ID09PSAnYm9vbGVhbicgJiYgaXNWYWxpZCApe1xuICAgICAgaXNWYWxpZCA9IGZhbHNlO1xuICAgICAgaXRlbS5zZWFyY2hUZXh0ID0gZXZlbnQ7XG4gICAgICB0aGlzLm9uQ2hhbmdlLmVtaXQodHJ1ZSk7XG4gICAgfVxuXG4gICAgaWYoIGV2ZW50ID09PSB1bmRlZmluZWQgfHwgZXZlbnQgPT09IG51bGwgfHwgZXZlbnQgPT09ICcnICYmIGlzVmFsaWQgKXtcbiAgICAgIGlzVmFsaWQgPSBmYWxzZTtcbiAgICAgIGl0ZW0uc2VhcmNoVGV4dCA9ICcnO1xuICAgICAgdGhpcy5vbkNoYW5nZS5lbWl0KHRydWUpO1xuICAgIH1cblxuICAgIGlmKCBldmVudD8uZGF0ZXBpY2tlcnRpbWUgICYmIGlzVmFsaWQgKXtcbiAgICAgIGlzVmFsaWQgPSBmYWxzZTtcbiAgICAgIGl0ZW0uc2VhcmNoVGV4dCA9IGV2ZW50Py5pbm5lclZhbHVlOyAgICAgIFxuICAgICAgdGhpcy5vbkNoYW5nZS5lbWl0KHRydWUpO1xuICAgIH1cblxuICAgIGlmKGV2ZW50Py50YXJnZXQ/LnZhbHVlICYmIGlzVmFsaWQgKXtcbiAgICAgIGlzVmFsaWQgPSBmYWxzZTtcbiAgICAgIGl0ZW0uc2VhcmNoVGV4dCA9IHRoaXMubm9ybWFsaXplKGV2ZW50LnRhcmdldC52YWx1ZSk7XG4gICAgICB0aGlzLm9uQ2hhbmdlLmVtaXQodHJ1ZSk7XG4gICAgfVxuXG4gICAgaWYoZXZlbnQ/LnRhcmdldD8udmFsdWUgPT09ICcnICYmIGlzVmFsaWQgKXtcbiAgICAgIGlzVmFsaWQgPSBmYWxzZTtcbiAgICAgIGl0ZW0uc2VhcmNoVGV4dCA9ICcnO1xuICAgICAgdGhpcy5vbkNoYW5nZS5lbWl0KHRydWUpO1xuICAgIH1cblxuICAgIGlmKCBpdGVtLnR5cGUgPT09ICdkYXRlLWxvY2FsJyAmJiBpdGVtLnZhbHVlICl7XG4gICAgICBpc1ZhbGlkID0gZmFsc2U7XG4gICAgICBpdGVtLnNlYXJjaFRleHQgPSBgJHt0aGlzLmNvbnZlcnREYXRhVG9OdW1iZXIoIGl0ZW0udmFsdWUgKX1gO1xuICAgICAgdGhpcy5vbkNoYW5nZS5lbWl0KHRydWUpO1xuICAgIH1cbiAgICBcbiAgICBpZiggdGhpcy51c2VPbkNoYW5nZVN1Ym1pdCB8fCB0aGlzLmZpcnN0X2FjdGl2ZV9maWx0ZXIgKXsgICAgICBcbiAgICAgIHRoaXMuc3RhcnRfZmlsdGVyX2ZjID0gdGhpcy5zdGFydF9maWx0ZXIoKTtcbiAgICAgIHRoaXMuZmlyc3RfYWN0aXZlX2ZpbHRlciA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmKCAhdGhpcy51c2VCdXR0b25TdWJtaXQgKXtcbiAgICAgIHRoaXMuZW1pdFN1Ym1pdEZpbHRlcnMoKTtcbiAgICB9IFxuICB9XG5cbiAgXG4gIHN0YXJ0X2ZpbHRlcigpe1xuICAgIGZvciggbGV0IGkgPSAwOyBpIDwgKHRoaXMuZGF0YSkubGVuZ3RoOyBpKysgKXtcblxuICAgICAgdGhpcy5zZXREYXRhSW5kZXgoaSwgdHJ1ZSk7XG5cbiAgICAgIGZvciggbGV0IGogPSAwOyBqIDwgKHRoaXMuZmlsdGVycykubGVuZ3RoOyBqKysgKXsgICAgICAgIFxuICAgICAgICBjb25zdCBmaWx0ZXJfaXRlbSA9IHRoaXMuZmlsdGVyc1tqXTsgICBcblxuICAgICAgICBpZiggZmlsdGVyX2l0ZW0uc2VhcmNoVGV4dCAmJiB0eXBlb2YgKGZpbHRlcl9pdGVtLnNlYXJjaFRleHQpID09PSAnc3RyaW5nJyAmJiBmaWx0ZXJfaXRlbS5zZWFyY2hUZXh0ICE9PSAnJyAmJiBmaWx0ZXJfaXRlbS50eXBlICE9PSBUQ0ZpbHRlcnNUeXBlLm51bWJlciAmJiBmaWx0ZXJfaXRlbS50eXBlICE9PSBUQ0ZpbHRlcnNUeXBlLmRhdGUgKXtcbiAgICAgICAgICBcbiAgICAgICAgICBmaWx0ZXJfaXRlbS5zZWFyY2hUZXh0ID0gdGhpcy5ub3JtYWxpemUoZmlsdGVyX2l0ZW0uc2VhcmNoVGV4dCk7ICAgICAgICBcbiAgICAgICAgICBsZXQgaXRlbV92YWx1ZSA9IHRoaXMuY29sbGVjdGlvbkZpbmQodGhpcy5kYXRhW2ldLCBmaWx0ZXJfaXRlbS5zZWFyY2hJbik7XG4gICAgICAgICAgaWYoIGl0ZW1fdmFsdWUgKXtcbiAgICAgICAgICAgIGl0ZW1fdmFsdWUgPSB0aGlzLm5vcm1hbGl6ZShpdGVtX3ZhbHVlKTsgICAgICAgICAgICBcbiAgICAgICAgICAgIGlmKCAhKCBpdGVtX3ZhbHVlLmluY2x1ZGVzKGZpbHRlcl9pdGVtLnNlYXJjaFRleHQpIHx8IGl0ZW1fdmFsdWUgPT09IGZpbHRlcl9pdGVtLnNlYXJjaFRleHQgKSApe1xuICAgICAgICAgICAgICB0aGlzLnNldERhdGFJbmRleChpLCBmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICB0aGlzLnNldERhdGFJbmRleChpLCBmYWxzZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IFxuICAgICAgICBcblxuICAgICAgICBpZiggZmlsdGVyX2l0ZW0uc2VhcmNoVGV4dCAmJiBmaWx0ZXJfaXRlbS5zZWFyY2hUZXh0IGluc3RhbmNlb2YgRGF0ZSAmJiAhaXNOYU4oIGZpbHRlcl9pdGVtLnNlYXJjaFRleHQudmFsdWVPZigpKSAmJiBmaWx0ZXJfaXRlbS50eXBlID09PSBUQ0ZpbHRlcnNUeXBlLmRhdGV0aW1lICl7XG4gICAgICAgICAgXG4gICAgICAgICAgbGV0IGl0ZW1fdmFsdWU6IGFueSA9IHRoaXMuY29sbGVjdGlvbkZpbmQodGhpcy5kYXRhW2ldLCBmaWx0ZXJfaXRlbS5zZWFyY2hJbik7XG5cbiAgICAgICAgICB0cnkgeyBpdGVtX3ZhbHVlID0gbmV3IERhdGUoaXRlbV92YWx1ZSk7IH0gY2F0Y2ggKGVycm9yKSB7fVxuICAgICAgICAgIGlmKCBpdGVtX3ZhbHVlICYmICBpdGVtX3ZhbHVlIGluc3RhbmNlb2YgRGF0ZSAmJiAhaXNOYU4oIGl0ZW1fdmFsdWUudmFsdWVPZigpKSApe1xuICAgICAgICAgICAgbGV0IGlzX2FjY2VwdCA9IGZhbHNlO1xuICAgICAgICAgICAgY29uc3QgZHRfdGFyZ2V0ICAgPSAoIChmaWx0ZXJfaXRlbS5zZWFyY2hUZXh0KS5nZXRUaW1lKCkgKS50b1N0cmluZygpLnN1YnN0cmluZygwLCAxMCk7IC8qICsgKDMgKiA2MCAqIDYwICogMTAwMCk7ICovXG4gICAgICAgICAgICBjb25zdCBkdF9jdXJyZW50ICA9ICggKGl0ZW1fdmFsdWUpLmdldFRpbWUoKSApLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDAsIDEwKTtcbiAgICAgICAgICAgIGlmKCBmaWx0ZXJfaXRlbS5jb25kaXRpb24gKXtcbiAgICAgICAgICAgICAgc3dpdGNoIChmaWx0ZXJfaXRlbS5jb25kaXRpb24pIHtcbiAgICAgICAgICAgICAgICBjYXNlIFRDQ29uZGl0aW9uLmd0OiAgICBpc19hY2NlcHQgPSAoIE51bWJlcihkdF90YXJnZXQpID4gIE51bWJlcihkdF9jdXJyZW50KSApOyAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBUQ0NvbmRpdGlvbi5sdDogICAgaXNfYWNjZXB0ID0gKCBOdW1iZXIoZHRfdGFyZ2V0KSA8ICBOdW1iZXIoZHRfY3VycmVudCkgKTsgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgVENDb25kaXRpb24uZ3RlOiAgIGlzX2FjY2VwdCA9ICggTnVtYmVyKGR0X3RhcmdldCkgPD0gTnVtYmVyKGR0X2N1cnJlbnQpICk7ICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFRDQ29uZGl0aW9uLmx0ZTogICBpc19hY2NlcHQgPSAoIE51bWJlcihkdF90YXJnZXQpID49IE51bWJlcihkdF9jdXJyZW50KSApOyAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBUQ0NvbmRpdGlvbi5lcXVhbDogaXNfYWNjZXB0ID0gKCBOdW1iZXIoZHRfdGFyZ2V0KSA9PT0gTnVtYmVyKGR0X2N1cnJlbnQpICk7ICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiBpc19hY2NlcHQgPSAoIE51bWJlcihkdF90YXJnZXQpID09IE51bWJlcihkdF9jdXJyZW50KSApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgaXNfYWNjZXB0ID0gKCBOdW1iZXIoZmlsdGVyX2l0ZW0uc2VhcmNoVGV4dCkgPT09IE51bWJlcihpdGVtX3ZhbHVlKSApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYoICFpc19hY2NlcHQgKXtcbiAgICAgICAgICAgICAgdGhpcy5zZXREYXRhSW5kZXgoaSwgZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIFxuXG4gICAgICAgIGlmKCBmaWx0ZXJfaXRlbS5zZWFyY2hUZXh0ICYmIHR5cGVvZiBOdW1iZXIoZmlsdGVyX2l0ZW0uc2VhcmNoVGV4dCkgPT09ICdudW1iZXInICYmICggZmlsdGVyX2l0ZW0udHlwZSA9PT0gVENGaWx0ZXJzVHlwZS5udW1iZXIgfHwgZmlsdGVyX2l0ZW0udHlwZSA9PT0gVENGaWx0ZXJzVHlwZS5kYXRlICkgKXtcbiAgICAgICAgICBcbiAgICAgICAgICBmaWx0ZXJfaXRlbS5zZWFyY2hUZXh0ID0gTnVtYmVyKGZpbHRlcl9pdGVtLnNlYXJjaFRleHQpO1xuICAgICAgICAgIGxldCBpdGVtX3ZhbHVlID0gdGhpcy5jb2xsZWN0aW9uRmluZCh0aGlzLmRhdGFbaV0sIGZpbHRlcl9pdGVtLnNlYXJjaEluKTtcblxuICAgICAgICAgIGlmKCB0eXBlb2YgTnVtYmVyKGl0ZW1fdmFsdWUpID09PSAnbnVtYmVyJyApeyAgIFxuICAgICAgICAgICAgaXRlbV92YWx1ZSA9IE51bWJlcihpdGVtX3ZhbHVlKTsgICAgICAgICAgICBcbiAgICAgICAgICAgIGxldCBpc19hY2NlcHQgPSBmYWxzZTtcbiAgICAgICAgICAgIGlmKCBmaWx0ZXJfaXRlbS5jb25kaXRpb24gKXtcblxuICAgICAgICAgICAgICBzd2l0Y2ggKGZpbHRlcl9pdGVtLmNvbmRpdGlvbikge1xuICAgICAgICAgICAgICAgIGNhc2UgVENDb25kaXRpb24uZ3Q6ICAgIGlzX2FjY2VwdCA9ICggTnVtYmVyKGZpbHRlcl9pdGVtLnNlYXJjaFRleHQpID4gIE51bWJlcihpdGVtX3ZhbHVlKSApOyAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBUQ0NvbmRpdGlvbi5sdDogICAgaXNfYWNjZXB0ID0gKCBOdW1iZXIoZmlsdGVyX2l0ZW0uc2VhcmNoVGV4dCkgPCAgTnVtYmVyKGl0ZW1fdmFsdWUpICk7ICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFRDQ29uZGl0aW9uLmd0ZTogICBpc19hY2NlcHQgPSAoIE51bWJlcihmaWx0ZXJfaXRlbS5zZWFyY2hUZXh0KSA8PSBOdW1iZXIoaXRlbV92YWx1ZSkgKTsgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBUQ0NvbmRpdGlvbi5sdGU6ICAgaXNfYWNjZXB0ID0gKCBOdW1iZXIoZmlsdGVyX2l0ZW0uc2VhcmNoVGV4dCkgPj0gTnVtYmVyKGl0ZW1fdmFsdWUpICk7ICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFRDQ29uZGl0aW9uLmVxdWFsOiBpc19hY2NlcHQgPSAoIE51bWJlcihmaWx0ZXJfaXRlbS5zZWFyY2hUZXh0KSA9PT0gTnVtYmVyKGl0ZW1fdmFsdWUpICk7IGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGlzX2FjY2VwdCA9ICggTnVtYmVyKGZpbHRlcl9pdGVtLnNlYXJjaFRleHQpID09IE51bWJlcihpdGVtX3ZhbHVlKSApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgaXNfYWNjZXB0ID0gKCBOdW1iZXIoZmlsdGVyX2l0ZW0uc2VhcmNoVGV4dCkgPT09IE51bWJlcihpdGVtX3ZhbHVlKSApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYoICFpc19hY2NlcHQgKXtcbiAgICAgICAgICAgICAgdGhpcy5zZXREYXRhSW5kZXgoaSwgZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgXG4gICAgICAgIGlmKCB0eXBlb2YgKGZpbHRlcl9pdGVtLnNlYXJjaFRleHQpID09PSAnYm9vbGVhbicgJiYgZmlsdGVyX2l0ZW0uc2VhcmNoVGV4dCA9PT0gdHJ1ZSApe1xuXG4gICAgICAgICAgbGV0IGl0ZW1fdmFsdWU6IGFueSA9IHRoaXMuY29sbGVjdGlvbkZpbmQodGhpcy5kYXRhW2ldLCBmaWx0ZXJfaXRlbS5zZWFyY2hJbik7XG4gICAgICAgICAgXG4gICAgICAgICAgaWYoIGl0ZW1fdmFsdWUgJiYgKGl0ZW1fdmFsdWUpLmxlbmd0aCA+IDAgKXsgIFxuICAgICAgICAgICAgbGV0IHF0ZF9pc190cnVlID0gMDsgICAgICAgICAgXG4gICAgICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8ICgoaXRlbV92YWx1ZSkubGVuZ3RoKTsgaSsrICl7XG4gICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBpdGVtX3ZhbHVlW2ldO1xuICAgICAgICAgICAgICBpZiggaXRlbSA9PT0gZmlsdGVyX2l0ZW0uc2VhcmNoVGV4dCApe1xuICAgICAgICAgICAgICAgIHF0ZF9pc190cnVlKys7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmKCBxdGRfaXNfdHJ1ZSA9PT0gMCApe1xuICAgICAgICAgICAgICB0aGlzLnNldERhdGFJbmRleChpLCBmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICBpZiggISggaXRlbV92YWx1ZSA9PT0gZmlsdGVyX2l0ZW0uc2VhcmNoVGV4dCApICl7XG4gICAgICAgICAgICAgIHRoaXMuc2V0RGF0YUluZGV4KGksIGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9ICAgICAgICAgIFxuICAgICAgICB9XG4gICAgICBcbiAgICAgIH1cblxuICAgIH0gLy8gZW5kIGZvclxuICAgIFxuICAgIHRoaXMudG9SZXN1bHQoKTtcbiAgICAgIFxuICB9XG5cbiAgcHJpdmF0ZSB0b1Jlc3VsdCgpe1xuXG5cbiAgICBjb25zdCBzZWFyY2hfZGF0YSA9IFtdO1xuXG4gICAgbGV0IGlzX2ZpbHRlciA9IGZhbHNlO1xuICAgIGZvciggbGV0IGkgPSAwOyBpIDwgKHRoaXMuZmlsdGVycykubGVuZ3RoOyBpKysgKXtcbiAgICAgIGlmKCB0aGlzLmZpbHRlcnNbaV0uc2VhcmNoVGV4dCAmJiB0aGlzLmZpbHRlcnNbaV0uc2VhcmNoVGV4dCAhPT0gJycgKXtcbiAgICAgICAgaXNfZmlsdGVyID0gdHJ1ZTsgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYoIGlzX2ZpbHRlciApe1xuICAgICAgZm9yKCBsZXQgaSA9IDA7IGkgPCAodGhpcy5kYXRhKS5sZW5ndGg7IGkrKyApe1xuICAgICAgICBpZiggdGhpcy5kYXRhICYmIHRoaXMuZGF0YVtpXSAmJiB0aGlzLmRhdGFbaV1bJ3RjX2ZpbHRlcl9hY2NlcHQnXSApe1xuICAgICAgICAgIChzZWFyY2hfZGF0YSkucHVzaCh0aGlzLmRhdGFbaV0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMucmVzdWx0X2FjY2VwdChzZWFyY2hfZGF0YSk7XG4gICAgICB0aGlzLm9uRmlsdGVyLmVtaXQoey4uLnRoaXMuZmlsdGVyc30pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucmVzdWx0X2FjY2VwdCh0aGlzLmRhdGEpO1xuICAgIHRoaXMub25GaWx0ZXIuZW1pdCh7Li4udGhpcy5maWx0ZXJzfSk7XG4gIH1cblxuICBzZXREYXRhSW5kZXgoaW5kZXg6IG51bWJlciwgdmFsdWU6IGJvb2xlYW4gKXtcbiAgICBpZiggdGhpcy5kYXRhICYmIHRoaXMuZGF0YVtpbmRleF0gKXtcbiAgICAgIHRoaXMuZGF0YVtpbmRleF1bJ3RjX2ZpbHRlcl9hY2NlcHQnXSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIHJlc3VsdF9hY2NlcHQoZGF0YTogYW55KXtcbiAgICBpZiggIXRoaXMudXNlRmlsdGVyQWNjZXB0ICYmIGRhdGEgJiYgKGRhdGEpLmxlbmd0aCA+IDAgKXtcbiAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgKGRhdGEpLmxlbmd0aDsgaSsrICl7XG4gICAgICAgIGRlbGV0ZSBkYXRhW2ldWyd0Y19maWx0ZXJfYWNjZXB0J107XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMucmVzdWx0LmVtaXQoZGF0YSk7XG4gIH1cblxufVxuIiwiPGRpdiAqbmdJZj1cInNob3dfZmlsdGVyc1wiIGNsYXNzPVwidGNsb3VkLXVpLWZpbHRlcnMuY29tcG9uZW50IGFyZWEtZmlsdGVyXCI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIGZpbHRlcnM7IGxldCBpID0gaW5kZXhcIj5cclxuXHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpdGVtLnR5cGUgfHwgKGl0ZW0udHlwZSAmJiBpdGVtLnR5cGUgIT09ICdib29sZWFuJylcIj5cclxuXHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpdGVtLnR5cGUgPT09ICdkYXRlLWxvY2FsJ1wiPlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJib3gtZmlsdGVyLWlucHV0IHR5cGUte3tpdGVtLnR5cGV9fSBib3gtdHlwZS17e2l0ZW0udHlwZX19XCIgW3N0eWxlXT1cIihpdGVtLndpZHRoICE9PSAnJykgPyAnd2lkdGg6JytpdGVtLndpZHRoIDogJydcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1kZXNjcmlwdGlvbiB0Yy10aXRsZS1lbGxpcHNpcyBib3gtdHlwZS17e2l0ZW0udHlwZX19XCIgdGl0bGU9XCJ7eyBpdGVtLmRlc2NyaXB0aW9uIH19XCI+PGkgW2NsYXNzLnRvLWFjdGl2ZV09XCIoaXRlbS52YWx1ZSAhPT0gdW5kZWZpbmVkICYmIGl0ZW0udmFsdWUgIT09IG51bGwgJiYgaXRlbS52YWx1ZSAhPT0gJycpXCIgY2xhc3M9XCJmYXMgZmEtZmlsdGVyIGljb24tZmlsdGVyXCI+PC9pPiZuYnNwO3t7IGl0ZW0uZGVzY3JpcHRpb24gfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm94LXR5cGUte3tpdGVtLnR5cGV9fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGNsb3VkLXVpLWRhdGVwaWNrZXIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjX2lucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwiaW5wdXRfe3tpKzF9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbW9kZUlucHV0XT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJpdGVtLnZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInNlYXJjaEluKGl0ZW0sIF9pbnB1dClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90Y2xvdWQtdWktZGF0ZXBpY2tlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0bi1jbGVhci1maWx0ZXItdGV4dFwiIFtjbGFzcy50by1oaWRlXT1cIiEoaXRlbS52YWx1ZSAhPT0gdW5kZWZpbmVkICYmIGl0ZW0udmFsdWUgIT09IG51bGwgJiYgaXRlbS52YWx1ZSAhPT0gJycpXCIgKGNsaWNrKT1cInNlYXJjaEluKGl0ZW0sIG51bGwpOyBpdGVtLnNlYXJjaFRleHQgPSB1bmRlZmluZWQ7IGl0ZW0udmFsdWUgPSAnJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtdGltZXNcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIml0ZW0udHlwZSAhPT0gJ2RhdGUtbG9jYWwnXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXRlbS50eXBlID09PSAnZGF0ZXRpbWUtbG9jYWwnXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzdGFydF9zdG9wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpdGVtLmlkID09PSAnc3RhcnQnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm94LWZpbHRlci1pbnB1dCB0eXBlLXt7aXRlbS50eXBlfX0gYm94LXR5cGUte3tpdGVtLnR5cGV9fVwiIFtzdHlsZV09XCIoaXRlbS53aWR0aCAhPT0gJycpID8gJ3dpZHRoOicrc3RhcnRfc3RvcF93aWR0aCsnJytzdGFydF9zdG9wX3VuZCA6ICcnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZGVzY3JpcHRpb24gdGMtdGl0bGUtZWxsaXBzaXMgYm94LXR5cGUte3tpdGVtLnR5cGV9fVwiIHRpdGxlPVwie3sgaXRlbS5kZXNjcmlwdGlvbiB9fVwiPjxpIFtjbGFzcy50by1hY3RpdmVdPVwiKF9yYW5nZV9kYXRlICYmIF9yYW5nZV9kYXRlLnJlc3VsdCAmJiBfcmFuZ2VfZGF0ZS5yZXN1bHQuc3RhcnQgJiYgX3JhbmdlX2RhdGUucmVzdWx0LnN0b3AgKVwiIGNsYXNzPVwiZmFzIGZhLWZpbHRlciBpY29uLWZpbHRlclwiPjwvaT4mbmJzcDs8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmFuZ2UtZGF0ZSAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNfcmFuZ2VfZGF0ZSBuZ01vZGVsIG5hbWU9XCJpbnB1dF97e2krMX19XCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkZWZhdWx0VmFsdWVQZXJpb2RTdGFydFN0b3BdPVwiaXRlbS5kZWZhdWx0VmFsdWVQZXJpb2RTdGFydFN0b3BcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGVzY3JpcHRpb25TdGFydF09XCJkZXNjcmlwdGlvblN0YXJ0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rlc2NyaXB0aW9uU3RvcF09XCJkZXNjcmlwdGlvblN0b3BcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbVVRDXT1cIihpdGVtICYmIGl0ZW0uVVRDKSA/IHRydWUgOiBmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25DaGFuZ2UpPVwic2VhcmNoSW5SYW5nZShfcmFuZ2VfZGF0ZSk7IHNlYXJjaEluKGl0ZW0sIF9yYW5nZV9kYXRlKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcmFuZ2UtZGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj4gICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0ICpuZ0lmPVwiaXRlbS5pZCA9PT0gJ3N0YXJ0J1wiICNfaW5wdXQgbmFtZT1cImlucHV0X3t7aSsxfX1cIiB0eXBlPVwiaGlkZGVuXCIgWyhuZ01vZGVsKV09XCJzdGFydF92YWx1ZVwiPiAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCAqbmdJZj1cIml0ZW0uaWQgPT09ICdzdG9wJ1wiICNfaW5wdXQgbmFtZT1cImlucHV0X3t7aSsxfX1cIiB0eXBlPVwiaGlkZGVuXCIgWyhuZ01vZGVsKV09XCJzdG9wX3ZhbHVlXCI+ICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhc3RhcnRfc3RvcFwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJveC1maWx0ZXItaW5wdXQgdHlwZS17e2l0ZW0udHlwZX19IGJveC10eXBlLXt7aXRlbS50eXBlfX1cIiBbc3R5bGVdPVwiKGl0ZW0ud2lkdGggIT09ICcnKSA/ICd3aWR0aDonK2l0ZW0ud2lkdGggOiAnJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZGVzY3JpcHRpb24gdGMtdGl0bGUtZWxsaXBzaXMgYm94LXR5cGUte3tpdGVtLnR5cGV9fVwiIHRpdGxlPVwie3sgaXRlbS5kZXNjcmlwdGlvbiB9fVwiPjxpIFtjbGFzcy50by1hY3RpdmVdPVwiKGl0ZW0udmFsdWUgIT09IHVuZGVmaW5lZCAmJiBpdGVtLnZhbHVlICE9PSBudWxsICYmIGl0ZW0udmFsdWUgIT09ICcnKVwiIGNsYXNzPVwiZmFzIGZhLWZpbHRlciBpY29uLWZpbHRlclwiPjwvaT4mbmJzcDt7eyBpdGVtLmRlc2NyaXB0aW9uIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm94LXR5cGUte3tpdGVtLnR5cGV9fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0Y2xvdWQtdWktZGF0ZXBpY2tlci10aW1lIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjX2lucHV0IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIml0ZW0udmFsdWVcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cImlucHV0X3t7aSsxfX1cIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3VzZU9wdGlvbnNEYXRlVGltZV09XCIoaXRlbSAmJiBpdGVtLnVzZU9wdGlvbnNEYXRlVGltZSkgPyB0cnVlIDogZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbVVRDXT1cIihpdGVtICYmIGl0ZW0uVVRDKSA/IHRydWUgOiBmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChldmVudENoYW5nZSk9XCJzZWFyY2hJbihpdGVtLCBfaW5wdXQpXCIgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGNsb3VkLXVpLWRhdGVwaWNrZXItdGltZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuLWNsZWFyLWZpbHRlci10ZXh0XCIgW2NsYXNzLnRvLWhpZGVdPVwiIShpdGVtLnZhbHVlICE9PSB1bmRlZmluZWQgJiYgaXRlbS52YWx1ZSAhPT0gbnVsbCAmJiBpdGVtLnZhbHVlICE9PSAnJylcIiAoY2xpY2spPVwic2VhcmNoSW4oaXRlbSwgbnVsbCk7IGl0ZW0uc2VhcmNoVGV4dCA9IHVuZGVmaW5lZDsgaXRlbS52YWx1ZSA9ICcnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXRpbWVzXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXRlbS50eXBlICE9PSAnc2VsZWN0JyAmJiBpdGVtLnR5cGUgIT09ICdkYXRldGltZS1sb2NhbCcgJiYgaXRlbS50eXBlICE9PSAnZGF0ZS1sb2NhbCdcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJib3gtZmlsdGVyLWlucHV0IHR5cGUte3tpdGVtLnR5cGV9fSBib3gtdHlwZS17e2l0ZW0udHlwZX19XCIgW3N0eWxlXT1cIihpdGVtLndpZHRoICE9PSAnJykgPyAnd2lkdGg6JytpdGVtLndpZHRoIDogJydcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZGVzY3JpcHRpb24gdGMtdGl0bGUtZWxsaXBzaXMgYm94LXR5cGUte3tpdGVtLnR5cGV9fVwiIHRpdGxlPVwie3sgaXRlbS5kZXNjcmlwdGlvbiB9fVwiPjxpIFtjbGFzcy50by1hY3RpdmVdPVwiX2lucHV0LnZhbHVlICE9PSAnJ1wiIGNsYXNzPVwiZmFzIGZhLWZpbHRlciBpY29uLWZpbHRlclwiPjwvaT4mbmJzcDt7eyBpdGVtLmRlc2NyaXB0aW9uIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJveC10eXBlLXt7aXRlbS50eXBlfX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgI19pbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJpdGVtLnZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3sgKGl0ZW0ucGxhY2Vob2xkZXIgIT09ICcnKSA/IGl0ZW0ucGxhY2Vob2xkZXIgOiAnJyB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwiaW5wdXRfe3tpKzF9fVwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInt7IChpdGVtLnR5cGUgPT09ICdudW1iZXInKSA/ICd0ZXh0JyA6IGl0ZW0udHlwZSB9fVwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgdGMtZm9ybS1jb250cm9sXCIgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXl1cCk9XCJzZWFyY2hJbihpdGVtLCAkZXZlbnQpXCI+ICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0bi1jbGVhci1maWx0ZXItdGV4dFwiIFtjbGFzcy50by1oaWRlXT1cIl9pbnB1dC52YWx1ZSA9PT0gJydcIiAoY2xpY2spPVwic2VhcmNoSW4oaXRlbSwgbnVsbCk7IF9pbnB1dC52YWx1ZSA9ICcnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS10aW1lc1wiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXRlbS50eXBlID09PSAnc2VsZWN0JyAmJiBpdGVtLmRhdGEgJiYgKGl0ZW0uZGF0YSkubGVuZ3RoID4gMFwiID5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJib3gtZmlsdGVyLWlucHV0IHR5cGUte3tpdGVtLnR5cGV9fSBib3gtdHlwZS17e2l0ZW0udHlwZX19XCIgW3N0eWxlXT1cIihpdGVtLndpZHRoICE9PSAnJykgPyAnd2lkdGg6JytpdGVtLndpZHRoIDogJydcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZGVzY3JpcHRpb24gdGMtdGl0bGUtZWxsaXBzaXMgYm94LXR5cGUte3tpdGVtLnR5cGV9fVwiIHRpdGxlPVwie3sgaXRlbS5kZXNjcmlwdGlvbiB9fVwiPjxpIFtjbGFzcy50by1hY3RpdmVdPVwiX2lucHV0LnZhbHVlICE9PSAnJ1wiIGNsYXNzPVwiZmFzIGZhLWZpbHRlciBpY29uLWZpbHRlclwiPjwvaT4mbmJzcDt7eyBpdGVtLmRlc2NyaXB0aW9uIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJveC10eXBlLXt7aXRlbS50eXBlfX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICNfaW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiaXRlbS52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwiaW5wdXRfe3tpKzF9fVwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgdGMtZm9ybS1jb250cm9sXCIgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwic2VhcmNoSW4oaXRlbSwgJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbbmdWYWx1ZV09XCJcIj48L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHYgb2YgaXRlbS5kYXRhXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbdmFsdWVdPVwidi52YWx1ZVwiPnt7IHYuZGVzY3JpcHRpb24gfX08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXRlbS50eXBlICYmIGl0ZW0udHlwZSA9PT0gJ2Jvb2xlYW4nXCI+XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm94LWZpbHRlci1pbnB1dFwiIFtzdHlsZV09XCIoaXRlbS53aWR0aCAhPT0gJycpID8gJ3dpZHRoOicraXRlbS53aWR0aCA6ICcnXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1kZXNjcmlwdGlvbiB0Yy10aXRsZS1lbGxpcHNpc1wiIHRpdGxlPVwie3sgaXRlbS5kZXNjcmlwdGlvbiB9fVwiIHRpdGxlPVwie3sgaXRlbS5kZXNjcmlwdGlvbiB9fVwiPjxpIFtjbGFzcy50by1hY3RpdmVdPVwiX2lucHV0LmNoZWNrZWQgPT09IHRydWVcIiBjbGFzcz1cImZhcyBmYS1maWx0ZXIgaWNvbi1maWx0ZXJcIj48L2k+Jm5ic3A7e3sgaXRlbS5kZXNjcmlwdGlvbiB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFyZWEtaW5wdXQtY2hlY2tib3hcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jb250cm9sIHRjLWZvcm0tY29udHJvbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLnBsYWNlaG9sZGVyIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI19pbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3sgKGl0ZW0ucGxhY2Vob2xkZXIgIT09ICcnKSA/IGl0ZW0ucGxhY2Vob2xkZXIgOiAnJyB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cImlucHV0X3t7aSsxfX1cIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIiAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInNlYXJjaEluKGl0ZW0sIF9pbnB1dC5jaGVja2VkKVwiPiAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PiAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuXHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwidGV4dC1yaWdodCBtYi0xIG1yLTFcIiAqbmdJZj1cInVzZUJ1dHRvblN1Ym1pdFwiPlxyXG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwidGMtYnRuIHt7IGJ0blN1Ym1pdENsYXNzIH19XCIgKGNsaWNrKT1cInRvU3VibWl0KClcIiA+e3sgc3VibWl0VGV4dCB9fTwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcblxyXG48L2Rpdj5cclxuXHJcbjwhLS0gPHByZT57eyBpbnB1dHMgfCBqc29uIH19PC9wcmU+IC0tPlxyXG4gICAgPCEtLSA8cHJlPiB7eyBkYXRhIHwganNvbiB9fSA8L3ByZT5cclxuXHJcbjxwPkZJTFRFUlM8L3A+XHJcbjxwcmU+IHt7IGZpbHRlcnMgfCBqc29uIH19PC9wcmU+IC0tPlxyXG5cclxuPCEtLVxyXG4gICAgPHByZT5zdGFydF9zdG9wOiB7eyBzdGFydF9zdG9wIH19PC9wcmU+XHJcbiAgICA8cHJlPnN0YXJ0X3N0b3Bfd2lkdGg6IHt7IHN0YXJ0X3N0b3Bfd2lkdGggfX08L3ByZT5cclxuICAgIDxwcmU+c3RhcnRfc3RvcF91bmQ6IHt7IHN0YXJ0X3N0b3BfdW5kIH19PC9wcmU+XHJcbi0tPiJdfQ==
|
|
491
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGNsb3VkLXVpLWZpbHRlcnMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGNsb3VkLXVpL3NyYy9saWIvX21vZHVsZXMvdGNsb3VkLXVpLWZpbHRlcnMvdGNsb3VkLXVpLWZpbHRlcnMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGNsb3VkLXVpL3NyYy9saWIvX21vZHVsZXMvdGNsb3VkLXVpLWZpbHRlcnMvdGNsb3VkLXVpLWZpbHRlcnMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBaUIsWUFBWSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVwSCxPQUFPLEVBQUUsV0FBVyxFQUFpQixhQUFhLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7OztBQU9oRixNQUFNLE9BQU8sd0JBQXdCO0lBcURuQyxZQUNVLFFBQWtCO1FBQWxCLGFBQVEsR0FBUixRQUFRLENBQVU7UUFwRDVCLGdCQUFXLEdBQUcsRUFBUyxDQUFDO1FBSXhCLFdBQU0sR0FBYSxFQUFFLENBQUM7UUFFdEIsaUJBQVksR0FBWSxLQUFLLENBQUM7UUFnQnRCLGdCQUFXLEdBQVcsU0FBUyxDQUFDO1FBUS9CLG1CQUFjLEdBQVcsZ0JBQWdCLENBQUM7UUFDMUMsc0JBQWlCLEdBQVksSUFBSSxDQUFDLENBQUMsMkVBQTJFO1FBQzlHLG9CQUFlLEdBQVksS0FBSyxDQUFDLENBQUMsbUZBQW1GO1FBQ3JILDhCQUF5QixHQUFZLElBQUksQ0FBQyxDQUFDLG9GQUFvRjtRQUMvSCxpQkFBWSxHQUFZLElBQUksQ0FBQztRQUM3QixvQkFBZSxHQUFZLEtBQUssQ0FBQztRQUVoQyxXQUFNLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUNqQyxhQUFRLEdBQUcsSUFBSSxZQUFZLEVB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QUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsNkJBQTZCO3dCQUNySCxNQUFNLFVBQVUsR0FBSSxDQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO3dCQUMzRSxJQUFJLFdBQVcsQ0FBQyxTQUFTLEVBQUU7NEJBQ3pCLFFBQVEsV0FBVyxDQUFDLFNBQVMsRUFBRTtnQ0FDN0IsS0FBSyxXQUFXLENBQUMsRUFBRTtvQ0FBSyxTQUFTLEdBQUcsQ0FBRSxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUksTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFFLENBQUM7b0NBQUUsTUFBTTtnQ0FDeEYsS0FBSyxXQUFXLENBQUMsRUFBRTtvQ0FBSyxTQUFTLEdBQUcsQ0FBRSxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUksTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFFLENBQUM7b0NBQUUsTUFBTTtnQ0FDeEYsS0FBSyxXQUFXLENBQUMsR0FBRztvQ0FBSSxTQUFTLEdBQUcsQ0FBRSxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFFLENBQUM7b0NBQUUsTUFBTTtnQ0FDeEYsS0FBSyxXQUFXLENBQUMsR0FBRztvQ0FBSSxTQUFTLEdBQUcsQ0FBRSxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFFLENBQUM7b0NBQUUsTUFBTTtnQ0FDeEYsS0FBSyxXQUFXLENBQUMsS0FBSztvQ0FBRSxTQUFTLEdBQUcsQ0FBRSxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFFLENBQUM7b0NBQUUsTUFBTTtnQ0FDekYsT0FBTyxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxVQUFVLENB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UztRQUNyQixJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3RELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDdEMsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUMsQ0FBQzthQUNwQztTQUNGO1FBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDekIsQ0FBQzs7c0hBaGdCVSx3QkFBd0I7MEdBQXhCLHdCQUF3Qiwya0JDVnJDLGlvVEF5Skc7NEZEL0lVLHdCQUF3QjtrQkFMcEMsU0FBUzsrQkFDRSxtQkFBbUI7K0ZBUUYsV0FBVztzQkFBckMsU0FBUzt1QkFBQyxhQUFhO2dCQVNYLElBQUk7c0JBQWhCLEtBQUs7Z0JBTU8sT0FBTztzQkFBbkIsS0FBSztnQkFNTyxVQUFVO3NCQUF0QixLQUFLO2dCQU9HLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0cseUJBQXlCO3NCQUFqQyxLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFFSSxNQUFNO3NCQUFmLE1BQU07Z0JBQ0csUUFBUTtzQkFBakIsTUFBTTtnQkFDRyxRQUFRO3NCQUFqQixNQUFNO2dCQUNHLFFBQVE7c0JBQWpCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uQ2hhbmdlcywgT25Jbml0LCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMsIEV2ZW50RW1pdHRlciwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE5nRm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgVENDb25kaXRpb24sIFRDRGF0YUZpbHRlcnMsIFRDRmlsdGVyc1R5cGUgfSBmcm9tICcuL3RjbG91ZC11aS1maWx0ZXJzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAndGNsb3VkLXVpLWZpbHRlcnMnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi90Y2xvdWQtdWktZmlsdGVycy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vdGNsb3VkLXVpLWZpbHRlcnMuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgVENsb3VkVWlGaWx0ZXJzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xyXG5cclxuICBkYXRlcGlja2VycyA9IFtdIGFzIGFueTtcclxuXHJcbiAgQFZpZXdDaGlsZCgnX2Zvcm11bGFyaW8nKSAgX2Zvcm11bGFyaW86IE5nRm9ybSB8IHVuZGVmaW5lZDtcclxuXHJcbiAgaW5wdXRzOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICBzaG93X2ZpbHRlcnM6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgc2VhcmNoX2RhdGE6IGFueSB8IHVuZGVmaW5lZDtcclxuXHJcbiAgcHJpdmF0ZSBfZGF0YTogYW55IHwgdW5kZWZpbmVkO1xyXG4gIEBJbnB1dCgpIHNldCBkYXRhKGRhdGE6IGFueSl7XHJcbiAgICAvLyB0aGlzLl9kYXRhID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShkYXRhKSk7XHJcbiAgfVxyXG4gIGdldCBkYXRhKCk6IGFueXsgcmV0dXJuIHRoaXMuX2RhdGE7IH1cclxuXHJcbiAgcHJpdmF0ZSBfZmlsdGVyczogVENEYXRhRmlsdGVycyB8IHVuZGVmaW5lZDtcclxuICBASW5wdXQoKSBzZXQgZmlsdGVycyhmaWx0ZXJzOiBhbnkpe1xyXG4gICAgLy90aGlzLl9maWx0ZXJzID0gZmlsdGVycztcclxuICB9XHJcbiAgZ2V0IGZpbHRlcnMoKTogYW55eyByZXR1cm4gdGhpcy5fZmlsdGVyczsgfVxyXG5cclxuICBwcml2YXRlIF9zdWJtaXRUZXh0OiBzdHJpbmcgPSAnRmlsdHJhcic7XHJcbiAgQElucHV0KCkgc2V0IHN1Ym1pdFRleHQodjogc3RyaW5nKXsgXHJcbiAgICBpZiggdiAmJiB2ICE9PSB0aGlzLl9zdWJtaXRUZXh0ICl7XHJcbiAgICAgIHRoaXMuX3N1Ym1pdFRleHQgPSB2O1xyXG4gICAgfVxyXG4gIH1cclxuICBnZXQgc3VibWl0VGV4dCgpOnN0cmluZ3sgcmV0dXJuIHRoaXMuX3N1Ym1pdFRleHQ7IH1cclxuXHJcbiAgQElucHV0KCkgYnRuU3VibWl0Q2xhc3M6IHN0cmluZyA9ICd0Yy1idG4tcHJpbWFyeSc7XHJcbiAgQElucHV0KCkgdXNlT25DaGFuZ2VTdWJtaXQ6IGJvb2xlYW4gPSB0cnVlOyAvLyB1c2VPbkNoYW5nZVN1Ym1pdCAtIFN1Ym1pdCBhdXRvbWF0aWNvIHF1YW5kbyBmb3IgYWx0ZXJhZG8gcXVhbnF1ZXIgaW5wdXRcclxuICBASW5wdXQoKSB1c2VCdXR0b25TdWJtaXQ6IGJvb2xlYW4gPSBmYWxzZTsgLy8gdXNlQnV0dG9uU3VibWl0IC0gRXhpYmUgdW0gYm90w6NvIGRlIHN1Ym1pdCBlIG7Do28gZXhlY3V0YSBhIGJ1c2NhIGF1dG9tYXRpY2FtZW50ZVxyXG4gIEBJbnB1dCgpIHVzZU5vcm1hbGl6ZUNhc2VTZW5zaXRpdmU6IGJvb2xlYW4gPSB0cnVlOyAvLyB1c2VOb3JtYWxpemVDYXNlU2Vuc2l0aXZlIC0gTsOjbyB2YWxpZGEgY2FpeGEgYWx0YSBvdSBiYWl4YSBlIGNhcmFjdGVyZXMgZXNwZWNpYWlzXHJcbiAgQElucHV0KCkgdXNlUmFuZ2VEYXRlOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSB1c2VGaWx0ZXJBY2NlcHQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQE91dHB1dCgpIHJlc3VsdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBvbkZpbHRlciA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBvbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBvblN1Ym1pdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICBkZXNjcmlwdGlvblN0YXJ0OiBzdHJpbmcgPSAnJztcclxuICBkZXNjcmlwdGlvblN0b3A6IHN0cmluZyA9ICcnO1xyXG5cclxuICBwcml2YXRlIGZpcnN0X2FjdGl2ZV9maWx0ZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgc3RhcnRfc3RvcDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHN0YXJ0X3N0b3Bfd2lkdGg6IG51bWJlciA9IDA7XHJcbiAgc3RhcnRfc3RvcF91bmQ6IHN0cmluZyA9ICcnOyAvLyBweCBvdSAlXHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBkYXRlcGlwZTogRGF0ZVBpcGVcclxuICApIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBpZiggdGhpcy5maWx0ZXJzICYmICh0aGlzLmZpbHRlcnMpLmxlbmd0aCA+IDAgKXtcclxuICAgICAgICBmb3IobGV0IGkgPSAwOyBpIDwgKHRoaXMuZmlsdGVycykubGVuZ3RoOyBpKyspe1xyXG4gICAgICAgICAgaWYoIHRoaXMuZmlsdGVyc1tpXS52YWx1ZSApe1xyXG4gICAgICAgICAgICBpZiggdGhpcy5maWx0ZXJzW2ldLnR5cGUgPT09ICdkYXRldGltZS1sb2NhbCcgKXtcclxuICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJzW2ldLnNlYXJjaFRleHQgPSBuZXcgRGF0ZSggYCR7dGhpcy5maWx0ZXJzW2ldLnZhbHVlfWAgKTtcclxuICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge31cclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgdGhpcy5maWx0ZXJzW2ldLnNlYXJjaFRleHQgPSB0aGlzLmZpbHRlcnNbaV0udmFsdWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5maXJzdF9hY3RpdmVfZmlsdGVyID0gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9ICAgICAgXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zdGFydF9zdG9wID0gKHRoaXMudXNlUmFuZ2VEYXRlKSA/IHRoaXMuaXNfc3RhcnRfc3RvcF9kYXRldGltZSgpIDogZmFsc2U7XHJcbiAgICAgIHRoaXMudG9TdWJtaXQoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgaXNfc3RhcnRfc3RvcF9kYXRldGltZSgpe1xyXG4gICAgbGV0IHN0YXJ0ID0gZmFsc2U7XHJcbiAgICBsZXQgc3RvcCA9IGZhbHNlO1xyXG4gICAgaWYoIHRoaXMuZmlsdGVycyAmJiAodGhpcy5maWx0ZXJzKS5sZW5ndGggPiAwICl7XHJcbiAgICAgIHRoaXMuc3RhcnRfc3RvcF93aWR0aCA9IDA7XHJcbiAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCAodGhpcy5maWx0ZXJzKS5sZW5ndGg7IGkrKyl7XHJcbiAgICAgICAgaWYoIHRoaXMuZmlsdGVyc1tpXS5pZCA9PT0gJ3N0YXJ0JyApe1xyXG4gICAgICAgICAgc3RhcnQgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5zdGFydF9zdG9wX3dpZHRoICs9IHRoaXMuZ2V0VmFsdWVXaWR0aCh0aGlzLmZpbHRlcnNbaV0ud2lkdGgpO1xyXG4gICAgICAgICAgdGhpcy5zdGFydF9zdG9wX3VuZCA9IHRoaXMuZ2V0VW5pZGFkZSh0aGlzLmZpbHRlcnNbaV0ud2lkdGgpO1xyXG4gICAgICAgICAgdGhpcy5kZXNjcmlwdGlvblN0YXJ0ID0gdGhpcy5maWx0ZXJzW2ldLmRlc2NyaXB0aW9uO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiggdGhpcy5maWx0ZXJzW2ldLmlkID09PSAnc3RvcCcgKXtcclxuICAgICAgICAgIHN0b3AgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5zdGFydF9zdG9wX3dpZHRoICs9IHRoaXMuZ2V0VmFsdWVXaWR0aCh0aGlzLmZpbHRlcnNbaV0ud2lkdGgpO1xyXG4gICAgICAgICAgdGhpcy5kZXNjcmlwdGlvblN0b3AgPSB0aGlzLmZpbHRlcnNbaV0uZGVzY3JpcHRpb247XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gKCBzdGFydCAmJiBzdG9wICkgPyB0cnVlIDogZmFsc2U7XHJcbiAgfVxyXG5cclxuICBnZXRWYWx1ZVdpZHRoKHY6IHN0cmluZyk6bnVtYmVyIHtcclxuICAgIGxldCB1bmQgPSB0aGlzLmdldFVuaWRhZGUodik7XHJcbiAgICB2ID0gKHYpLnJlcGxhY2UodW5kLCAnJyk7XHJcbiAgICByZXR1cm4gKyh2KTtcclxuICB9XHJcblxyXG4gIGdldFVuaWRhZGUodjogc3RyaW5nKTpzdHJpbmcge1xyXG4gICAgbGV0IHVuZCA9ICclJztcclxuICAgIGlmKCB2ICYmICh2KS5pbmNsdWRlcygncHgnKSApe1xyXG4gICAgICB1bmQgPSAncHgnO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHVuZDtcclxuICB9XHJcbiBcclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykgeyAgXHJcbiAgICBcclxuICAgIGlmKCBjaGFuZ2VzICYmIGNoYW5nZXNbJ2RhdGEnXSApe1xyXG4gICAgICBjb25zdCBkYXRhID0gY2hhbmdlc1snZGF0YSddLmN1cnJlbnRWYWx1ZTtcclxuICAgICAgaWYoIHRoaXMuX2RhdGEgIT09IGRhdGEgKXtcclxuICAgICAgICB0aGlzLl9kYXRhID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShkYXRhKSk7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hfZGF0YSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYoIGNoYW5nZXMgJiYgY2hhbmdlc1snZmlsdGVycyddICl7XHJcbiAgICAgIGNvbnN0IGZpbHRlcnMgPSBjaGFuZ2VzWydmaWx0ZXJzJ10uY3VycmVudFZhbHVlO1xyXG4gICAgICBpZiggdGhpcy5fZmlsdGVycyAhPT0gZmlsdGVycyApe1xyXG4gICAgICAgIHRoaXMuX2ZpbHRlcnMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGZpbHRlcnMpKTtcclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbml0KCl7XHJcbiAgICBpZiggdGhpcy5kYXRhICYmIHRoaXMuZmlsdGVycyApe1xyXG4gICAgICB0aGlzLnNob3dfZmlsdGVycyA9IHRydWU7XHJcbiAgICAgIGlmKCB0aGlzLmZpbHRlcnMgJiYgKHRoaXMuZmlsdGVycykubGVuZ3RoID4gMCApe1xyXG4gICAgICAgICh0aGlzLmZpbHRlcnMpLmZvckVhY2goKGZpbHRlcjogVENEYXRhRmlsdGVycykgPT4geyAgICAgICAgICAgIFxyXG4gICAgICAgICAgdGhpcy5zZWFyY2hJbihmaWx0ZXIsICdzeW5jJyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gXHJcbiAgICAgIGlmKCAhdGhpcy51c2VPbkNoYW5nZVN1Ym1pdCApe1xyXG4gICAgICAgIHRoaXMucmVzdWx0X2FjY2VwdCh0aGlzLmRhdGEpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiggdGhpcy51c2VPbkNoYW5nZVN1Ym1pdCB8fCB0aGlzLnVzZUJ1dHRvblN1Ym1pdCApe1xyXG4gICAgICAgIHRoaXMuc3RhcnRfZmlsdGVyKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgbm9ybWFsaXplKHRleHQ6IGFueSk6IHN0cmluZ3tcclxuICAgIGlmKCB0aGlzLnVzZU5vcm1hbGl6ZUNhc2VTZW5zaXRpdmUgKXtcclxuICAgICAgY29uc3QgdiA9ICggKCAoYCR7dGV4dH1gKS5ub3JtYWxpemUoJ05GRCcpLnJlcGxhY2UoL1tcXHUwMzAwLVxcdTAzNmZdL2csIFwiXCIpICkudHJpbSgpICkudG9Mb3dlckNhc2UoKTtcclxuICAgICAgcmV0dXJuIHY7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGV4dDtcclxuICB9XHJcblxyXG4gIHRvU3VibWl0KCl7XHJcbiAgICBpZiggdGhpcy5maWx0ZXJzICYmICh0aGlzLmZpbHRlcnMpLmxlbmd0aCA+IDAgKXtcclxuICAgICAgdGhpcy5pbml0KCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmVtaXRTdWJtaXRGaWx0ZXJzKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGVtaXRTdWJtaXRGaWx0ZXJzKCl7XHJcbiAgICBsZXQgZmlsdGVycyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5maWx0ZXJzKSk7XHJcbiAgICBpZiggZmlsdGVycyAmJiAoZmlsdGVycykubGVuZ3RoID4gMCApe1xyXG4gICAgICAoZmlsdGVycykuZm9yRWFjaCgoZmlsdGVyOiBUQ0RhdGFGaWx0ZXJzLCBpOiBudW1iZXIpID0+IHtcclxuXHJcbiAgICAgICAgaWYoIGZpbHRlci53aWR0aCApeyBkZWxldGUoZmlsdGVyc1tpXS53aWR0aCk7IH1cclxuICAgICAgICBpZiggZmlsdGVyLnBsYWNlaG9sZGVyICl7IGRlbGV0ZShmaWx0ZXJzW2ldLnBsYWNlaG9sZGVyKTsgfVxyXG4gICAgICAgIGlmKCBmaWx0ZXIuZGVzY3JpcHRpb24gKXsgZGVsZXRlKGZpbHRlcnNbaV0uZGVzY3JpcHRpb24pOyB9XHJcblxyXG4gICAgICAgIGlmKCAoIWZpbHRlci5zZWFyY2hUZXh0IHx8IGZpbHRlci5zZWFyY2hUZXh0ICYmIGZpbHRlci5zZWFyY2hUZXh0ID09PSAnJykgJiYgZmlsdGVyLnR5cGUgIT09IFwiYm9vbGVhblwiICl7XHJcbiAgICAgICAgICBkZWxldGUoZmlsdGVyc1tpXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKCBmaWx0ZXIudHlwZSA9PT0gXCJib29sZWFuXCIgKXtcclxuICAgICAgICAgIGlmKCAhZmlsdGVyLnNlYXJjaFRleHQgKXtcclxuICAgICAgICAgICAgZmlsdGVyLnNlYXJjaFRleHQgPSBmYWxzZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgIH0pO1xyXG4gICAgfSAgIFxyXG4gICAgXHJcbiAgICB0aGlzLm9uU3VibWl0LmVtaXQodGhpcy5maWx0ZXJzKTtcclxuICB9XHJcblxyXG5cclxuICBwcml2YXRlIGNvbGxlY3Rpb25GaW5kKG9iajogYW55LCBwYXRoOiBhbnkpOiBhbnkge1xyXG4gICAgY29uc3QgcGF0aEFycmF5ID0gcGF0aC5zcGxpdChcIi5cIik7XHJcbiAgICBsZXQgY3VycmVudCA9IG9iajtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aEFycmF5Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IGtleSA9IHBhdGhBcnJheVtpXTtcclxuXHJcbiAgICAgIGlmIChrZXkuaW5jbHVkZXMoJ1snKSAmJiBrZXkuaW5jbHVkZXMoJ10nKSkge1xyXG4gICAgICAgIGNvbnN0IG5leHRLZXlzID0gcGF0aEFycmF5LnNsaWNlKGkgKyAxKTtcclxuICAgICAgICBjb25zdCBpbmRleCA9IGtleS5zdWJzdHJpbmcoa2V5LmluZGV4T2YoJ1snKSArIDEsIGtleS5pbmRleE9mKCddJykpO1xyXG4gICAgICAgIGNvbnN0IGFycmF5S2V5ID0ga2V5LnN1YnN0cmluZygwLCBrZXkuaW5kZXhPZignWycpKTtcclxuICAgICAgICBpZiggY3VycmVudCAmJiBjdXJyZW50W2FycmF5S2V5XSAmJiBjdXJyZW50W2FycmF5S2V5XVtpbmRleF0gKXtcclxuICAgICAgICAgIHJldHVybiB0aGlzLmNvbGxlY3Rpb25GaW5kKGN1cnJlbnRbYXJyYXlLZXldW2luZGV4XSwgbmV4dEtleXMuam9pbihcIi5cIikpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuXHJcbiAgICAgIGlmIChrZXkuaW5jbHVkZXMoXCJbXVwiKSkge1xyXG4gICAgICAgIGNvbnN0IGFycmF5S2V5ID0ga2V5LnJlcGxhY2UoXCJbXVwiLCBcIlwiKTtcclxuICAgICAgICBjdXJyZW50ID0gY3VycmVudFthcnJheUtleV0gfHwgW107XHJcbiAgICAgICAgY29uc3QgbmV4dEtleXMgPSBwYXRoQXJyYXkuc2xpY2UoaSArIDEpO1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdHMgPSBbXTtcclxuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGN1cnJlbnQubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgIGxldCByZXN1bHQgPSB0aGlzLmNvbGxlY3Rpb25GaW5kKGN1cnJlbnRbal0sIG5leHRLZXlzLmpvaW4oXCIuXCIpKTtcclxuICAgICAgICAgIGlmIChyZXN1bHQgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICByZXN1bHRzLnB1c2gocmVzdWx0KTsgXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChyZXN1bHRzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdHM7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYoICFjdXJyZW50IHx8IChjdXJyZW50ICYmICFjdXJyZW50W2tleV0pICl7XHJcbiAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjdXJyZW50ID0gY3VycmVudFtrZXldO1xyXG4gICAgICAgIGlmIChjdXJyZW50ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY3VycmVudDtcclxuICB9XHJcbiAgICBcclxuICBmaXJzdDogYm9vbGVhbiA9IHRydWU7XHJcbiAgc3RhcnRfZmlsdGVyX2ZjOiBhbnkgPSB1bmRlZmluZWQ7XHJcblxyXG4gIHN0YXJ0X3ZhbHVlOiBhbnkgfCB1bmRlZmluZWQ7XHJcbiAgc3RvcF92YWx1ZTogYW55IHwgdW5kZWZpbmVkO1xyXG5cclxuICBzZWFyY2hJblJhbmdlKCByYW5nZV9kYXRlOiBhbnkpe1xyXG4gICAgXHJcbiAgICBpZiggdGhpcy5maWx0ZXJzICYmICh0aGlzLmZpbHRlcnMpLmxlbmd0aCA+IDAgKXtcclxuXHJcbiAgICAgIGxldCBldmVudCA9IHt9IGFzIGFueTsgXHJcbiAgICAgIGV2ZW50LmRhdGVwaWNrZXJ0aW1lID0gdHJ1ZTtcclxuXHJcbiAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgKHRoaXMuZmlsdGVycykubGVuZ3RoOyBpKysgKXtcclxuXHJcbiAgICAgICAgaWYoIHRoaXMuZmlsdGVyc1tpXSAmJiB0aGlzLmZpbHRlcnNbaV0uaWQgJiYgdGhpcy5maWx0ZXJzW2ldLmlkID09PSAnc3RhcnQnICl7XHJcbiAgICAgICAgICB0aGlzLmZpbHRlcnNbaV0udmFsdWUgPSByYW5nZV9kYXRlPy5yZXN1bHQ/LnN0YXJ0ITtcclxuICAgICAgICAgIHRoaXMuZmlsdGVyc1tpXS5zZWFyY2hUZXh0ID0gcmFuZ2VfZGF0ZT8ucmVzdWx0Py5zdGFydCE7XHJcbiAgICAgICAgICBldmVudC5pbm5lclZhbHVlID0gdGhpcy5zdGFydF92YWx1ZSA9IHJhbmdlX2RhdGU/LnJlc3VsdD8uc3RhcnQhO1xyXG4gICAgICAgICAgdGhpcy5zZWFyY2hJbih0aGlzLmZpbHRlcnNbaV0sIGV2ZW50KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKCB0aGlzLmZpbHRlcnNbaV0gJiYgdGhpcy5maWx0ZXJzW2ldLmlkICYmIHRoaXMuZmlsdGVyc1tpXS5pZCA9PT0gJ3N0b3AnICl7XHJcbiAgICAgICAgICB0aGlzLmZpbHRlcnNbaV0udmFsdWUgPSByYW5nZV9kYXRlPy5yZXN1bHQ/LnN0b3AhO1xyXG4gICAgICAgICAgdGhpcy5maWx0ZXJzW2ldLnNlYXJjaFRleHQgPSByYW5nZV9kYXRlPy5yZXN1bHQ/LnN0b3AhO1xyXG4gICAgICAgICAgZXZlbnQuaW5uZXJWYWx1ZSA9IHRoaXMuc3RvcF92YWx1ZSA9IHJhbmdlX2RhdGU/LnJlc3VsdD8uc3RvcCE7XHJcbiAgICAgICAgICB0aGlzLnNlYXJjaEluKHRoaXMuZmlsdGVyc1tpXSwgZXZlbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiggdGhpcy5maXJzdCB8fCB0aGlzLnVzZU9uQ2hhbmdlU3VibWl0ICl7XHJcbiAgICAgICAgdGhpcy50b1N1Ym1pdCgpO1xyXG4gICAgICB9XHJcbiAgICAgIFxyXG4gICAgfVxyXG4gICAgdGhpcy5maXJzdCA9IGZhbHNlO1xyXG5cclxuICB9XHJcblxyXG4gIGNvbnZlcnREYXRhVG9OdW1iZXIoZGF0YVN0cmluZzogc3RyaW5nKTogbnVtYmVyIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IFtkaWEsIG1lcywgYW5vXSA9IGRhdGFTdHJpbmcuc3BsaXQoJy8nKTtcclxuICAgICAgcmV0dXJuICsoYCR7YW5vfSR7bWVzfSR7ZGlhfWApO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHt9XHJcbiAgICByZXR1cm4gMDtcclxuICB9XHJcblxyXG4gIHNlYXJjaEluKGl0ZW06IFRDRGF0YUZpbHRlcnMsIGV2ZW50PzogYW55KXtcclxuXHJcbiAgICBcclxuXHJcbiAgICB0aGlzLnN0YXJ0X2ZpbHRlcl9mYyA9IHVuZGVmaW5lZDtcclxuXHJcbiAgICBsZXQgaXNWYWxpZCA9IHRydWU7XHJcblxyXG4gICAgaWYoIGV2ZW50ID09PSAnc3luYycgJiYgaXNWYWxpZCApe1xyXG4gICAgICBpc1ZhbGlkID0gZmFsc2U7XHJcbiAgICAgIHRoaXMub25DaGFuZ2UuZW1pdCh0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiggdHlwZW9mIGV2ZW50ID09PSAnYm9vbGVhbicgJiYgaXNWYWxpZCApe1xyXG4gICAgICBpc1ZhbGlkID0gZmFsc2U7XHJcbiAgICAgIGl0ZW0uc2VhcmNoVGV4dCA9IGV2ZW50O1xyXG4gICAgICB0aGlzLm9uQ2hhbmdlLmVtaXQodHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYoIChldmVudCA9PT0gdW5kZWZpbmVkIHx8IGV2ZW50ID09PSBudWxsIHx8IGV2ZW50ID09PSAnJykgJiYgaXNWYWxpZCApe1xyXG4gICAgICBpc1ZhbGlkID0gZmFsc2U7XHJcbiAgICAgIGl0ZW0uc2VhcmNoVGV4dCA9ICcnO1xyXG4gICAgICB0aGlzLm9uQ2hhbmdlLmVtaXQodHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYoIGV2ZW50Py5kYXRlcGlja2VydGltZSAgJiYgaXNWYWxpZCApe1xyXG4gICAgICBpc1ZhbGlkID0gZmFsc2U7XHJcbiAgICAgIGl0ZW0uc2VhcmNoVGV4dCA9IGV2ZW50Py5pbm5lclZhbHVlOyAgICAgIFxyXG4gICAgICB0aGlzLm9uQ2hhbmdlLmVtaXQodHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYoZXZlbnQ/LnRhcmdldD8udmFsdWUgJiYgaXNWYWxpZCApe1xyXG4gICAgICBpc1ZhbGlkID0gZmFsc2U7XHJcbiAgICAgIGl0ZW0uc2VhcmNoVGV4dCA9IHRoaXMubm9ybWFsaXplKGV2ZW50LnRhcmdldC52YWx1ZSk7XHJcbiAgICAgIHRoaXMub25DaGFuZ2UuZW1pdCh0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICBpZihldmVudD8udGFyZ2V0Py52YWx1ZSA9PT0gJycgJiYgaXNWYWxpZCApe1xyXG4gICAgICBpc1ZhbGlkID0gZmFsc2U7XHJcbiAgICAgIGl0ZW0uc2VhcmNoVGV4dCA9ICcnO1xyXG4gICAgICB0aGlzLm9uQ2hhbmdlLmVtaXQodHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYoIGl0ZW0udHlwZSA9PT0gJ2RhdGUtbG9jYWwnICYmIGl0ZW0udmFsdWUgKXtcclxuICAgICAgaXNWYWxpZCA9IGZhbHNlO1xyXG4gICAgICBpdGVtLnNlYXJjaFRleHQgPSBgJHt0aGlzLmNvbnZlcnREYXRhVG9OdW1iZXIoIGl0ZW0udmFsdWUgKX1gO1xyXG4gICAgICB0aGlzLm9uQ2hhbmdlLmVtaXQodHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYoIGV2ZW50ICYmIGV2ZW50LnJlc3VsdCAmJiAoIGV2ZW50LnJlc3VsdC5zdGFydCB8fCBldmVudC5yZXN1bHQuc3RvcCApICl7XHJcbiAgICAgIGlzVmFsaWQgPSBmYWxzZTtcclxuICAgICAgdGhpcy5vbkNoYW5nZS5lbWl0KHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIFxyXG4gICAgXHJcbiAgICBpZiggdGhpcy51c2VPbkNoYW5nZVN1Ym1pdCB8fCB0aGlzLmZpcnN0X2FjdGl2ZV9maWx0ZXIgKXsgICAgICBcclxuICAgICAgdGhpcy5zdGFydF9maWx0ZXJfZmMgPSB0aGlzLnN0YXJ0X2ZpbHRlcigpO1xyXG4gICAgICB0aGlzLmZpcnN0X2FjdGl2ZV9maWx0ZXIgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiggIXRoaXMudXNlQnV0dG9uU3VibWl0ICl7XHJcbiAgICAgIHRoaXMuZW1pdFN1Ym1pdEZpbHRlcnMoKTtcclxuICAgIH0gXHJcbiAgfVxyXG5cclxuICBnZXREYXRlVVRDKGR0OiBhbnkpe1xyXG4gICAgY29uc3QgYW5vID0gZHQuZ2V0RnVsbFllYXIoKTtcclxuICAgIGNvbnN0IG1lcyA9IGR0LmdldE1vbnRoKCk7XHJcbiAgICBjb25zdCBkaWEgPSBkdC5nZXREYXRlKCk7XHJcbiAgICBjb25zdCBob3JhcyA9IGR0LmdldEhvdXJzKCk7XHJcbiAgICBjb25zdCBtaW51dG9zID0gZHQuZ2V0TWludXRlcygpO1xyXG4gICAgY29uc3Qgc2VndW5kb3MgPSBkdC5nZXRTZWNvbmRzKCk7XHJcbiAgICByZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEMoYW5vLCBtZXMsIGRpYSwgaG9yYXMsIG1pbnV0b3MsIHNlZ3VuZG9zKSk7XHJcbiAgfVxyXG5cclxuICBcclxuICBzdGFydF9maWx0ZXIoKXtcclxuICAgIGZvciggbGV0IGkgPSAwOyBpIDwgKHRoaXMuZGF0YSkubGVuZ3RoOyBpKysgKXtcclxuXHJcbiAgICAgIHRoaXMuc2V0RGF0YUluZGV4KGksIHRydWUpO1xyXG5cclxuICAgICAgZm9yKCBsZXQgaiA9IDA7IGogPCAodGhpcy5maWx0ZXJzKS5sZW5ndGg7IGorKyApeyAgICAgICAgXHJcbiAgICAgICAgY29uc3QgZmlsdGVyX2l0ZW0gPSB0aGlzLmZpbHRlcnNbal07ICAgXHJcblxyXG4gICAgICAgIGlmKCBmaWx0ZXJfaXRlbS5zZWFyY2hUZXh0ICYmIHR5cGVvZiAoZmlsdGVyX2l0ZW0uc2VhcmNoVGV4dCkgPT09ICdzdHJpbmcnICYmIGZpbHRlcl9pdGVtLnNlYXJjaFRleHQgIT09ICcnICYmIGZpbHRlcl9pdGVtLnR5cGUgIT09IFRDRmlsdGVyc1R5cGUubnVtYmVyICYmIGZpbHRlcl9pdGVtLnR5cGUgIT09IFRDRmlsdGVyc1R5cGUuZGF0ZSApe1xyXG4gICAgICAgICAgXHJcbiAgICAgICAgICBmaWx0ZXJfaXRlbS5zZWFyY2hUZXh0ID0gdGhpcy5ub3JtYWxpemUoZmlsdGVyX2l0ZW0uc2VhcmNoVGV4dCk7ICAgICAgICBcclxuICAgICAgICAgIGxldCBpdGVtX3ZhbHVlID0gdGhpcy5jb2xsZWN0aW9uRmluZCh0aGlzLmRhdGFbaV0sIGZpbHRlcl9pdGVtLnNlYXJjaEluKTtcclxuICAgICAgICAgIGlmKCBpdGVtX3ZhbHVlICl7XHJcbiAgICAgICAgICAgIGl0ZW1fdmFsdWUgPSB0aGlzLm5vcm1hbGl6ZShpdGVtX3ZhbHVlKTsgICAgICAgICAgICBcclxuICAgICAgICAgICAgaWYoICEoIGl0ZW1fdmFsdWUuaW5jbHVkZXMoZmlsdGVyX2l0ZW0uc2VhcmNoVGV4dCkgfHwgaXRlbV92YWx1ZSA9PT0gZmlsdGVyX2l0ZW0uc2VhcmNoVGV4dCApICl7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZXREYXRhSW5kZXgoaSwgZmFsc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgdGhpcy5zZXREYXRhSW5kZXgoaSwgZmFsc2UpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gXHJcbiAgICAgICAgXHJcblxyXG4gICAgICAgIGlmKCBmaWx0ZXJfaXRlbS5zZWFyY2hUZXh0ICYmIGZpbHRlcl9pdGVtLnNlYXJjaFRleHQgaW5zdGFuY2VvZiBEYXRlICYmICFpc05hTiggZmlsdGVyX2l0ZW0uc2VhcmNoVGV4dC52YWx1ZU9mKCkpICYmIGZpbHRlcl9pdGVtLnR5cGUgPT09IFRDRmlsdGVyc1R5cGUuZGF0ZXRpbWUgKXtcclxuICAgICAgICAgIFxyXG4gICAgICAgICAgbGV0IGl0ZW1fdmFsdWU6IGFueSA9IHRoaXMuY29sbGVjdGlvbkZpbmQodGhpcy5kYXRhW2ldLCBmaWx0ZXJfaXRlbS5zZWFyY2hJbik7XHJcblxyXG4gICAgICAgICAgdHJ5IHsgaXRlbV92YWx1ZSA9IG5ldyBEYXRlKGl0ZW1fdmFsdWUpOyB9IGNhdGNoIChlcnJvcikge31cclxuICAgICAgICAgIGlmKCBpdGVtX3ZhbHVlICYmICBpdGVtX3ZhbHVlIGluc3RhbmNlb2YgRGF0ZSAmJiAhaXNOYU4oIGl0ZW1fdmFsdWUudmFsdWVPZigpKSApe1xyXG4gICAgICAgICAgICBsZXQgaXNfYWNjZXB0ID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBkdF90YXJnZXQgICA9ICggKGZpbHRlcl9pdGVtLnNlYXJjaFRleHQpLmdldFRpbWUoKSApLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDAsIDEwKTsgLyogKyAoMyAqIDYwICogNjAgKiAxMDAwKTsgKi9cclxuICAgICAgICAgICAgY29uc3QgZHRfY3VycmVudCAgPSAoIChpdGVtX3ZhbHVlKS5nZXRUaW1lKCkgKS50b1N0cmluZygpLnN1YnN0cmluZygwLCAxMCk7XHJcbiAgICAgICAgICAgIGlmKCBmaWx0ZXJfaXRlbS5jb25kaXRpb24gKXtcclxuICAgICAgICAgICAgICBzd2l0Y2ggKGZpbHRlcl9pdGVtLmNvbmRpdGlvbikge1xyXG4gICAgICAgICAgICAgICAgY2FzZSBUQ0NvbmRpdGlvbi5ndDogICAgaXNfYWNjZXB0ID0gKCBOdW1iZXIoZHRfdGFyZ2V0KSA+ICBOdW1iZXIoZHRfY3VycmVudCkgKTsgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBUQ0NvbmRpdGlvbi5sdDogICAgaXNfYWNjZXB0ID0gKCBOdW1iZXIoZHRfdGFyZ2V0KSA8ICBOdW1iZXIoZHRfY3VycmVudCkgKTsgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBUQ0NvbmRpdGlvbi5ndGU6ICAgaXNfYWNjZXB0ID0gKCBOdW1iZXIoZHRfdGFyZ2V0KSA8PSBOdW1iZXIoZHRfY3VycmVudCkgKTsgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBUQ0NvbmRpdGlvbi5sdGU6ICAgaXNfYWNjZXB0ID0gKCBOdW1iZXIoZHRfdGFyZ2V0KSA+PSBOdW1iZXIoZHRfY3VycmVudCkgKTsgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBUQ0NvbmRpdGlvbi5lcXVhbDogaXNfYWNjZXB0ID0gKCBOdW1iZXIoZHRfdGFyZ2V0KSA9PT0gTnVtYmVyKGR0X2N1cnJlbnQpICk7ICBicmVhaztcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGlzX2FjY2VwdCA9ICggTnVtYmVyKGR0X3RhcmdldCkgPT0gTnVtYmVyKGR0X2N1cnJlbnQpICk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICBpc19hY2NlcHQgPSAoIE51bWJlcihmaWx0ZXJfaXRlbS5zZWFyY2hUZXh0KSA9PT0gTnVtYmVyKGl0ZW1fdmFsdWUpICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYoICFpc19hY2NlcHQgKXtcclxuICAgICAgICAgICAgICB0aGlzLnNldERhdGFJbmRleChpLCBmYWxzZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFxyXG5cclxuICAgICAgICBpZiggZmlsdGVyX2l0ZW0uc2VhcmNoVGV4dCAmJiB0eXBlb2YgTnVtYmVyKGZpbHRlcl9pdGVtLnNlYXJjaFRleHQpID09PSAnbnVtYmVyJyAmJiAoIGZpbHRlcl9pdGVtLnR5cGUgPT09IFRDRmlsdGVyc1R5cGUubnVtYmVyIHx8IGZpbHRlcl9pdGVtLnR5cGUgPT09IFRDRmlsdGVyc1R5cGUuZGF0ZSApICl7XHJcbiAgICAgICAgICBcclxuICAgICAgICAgIGZpbHRlcl9pdGVtLnNlYXJjaFRleHQgPSBOdW1iZXIoZmlsdGVyX2l0ZW0uc2VhcmNoVGV4dCk7XHJcbiAgICAgICAgICBsZXQgaXRlbV92YWx1ZSA9IHRoaXMuY29sbGVjdGlvbkZpbmQodGhpcy5kYXRhW2ldLCBmaWx0ZXJfaXRlbS5zZWFyY2hJbik7XHJcblxyXG4gICAgICAgICAgaWYoIHR5cGVvZiBOdW1iZXIoaXRlbV92YWx1ZSkgPT09ICdudW1iZXInICl7ICAgXHJcbiAgICAgICAgICAgIGl0ZW1fdmFsdWUgPSBOdW1iZXIoaXRlbV92YWx1ZSk7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGxldCBpc19hY2NlcHQgPSBmYWxzZTtcclxuICAgICAgICAgICAgaWYoIGZpbHRlcl9pdGVtLmNvbmRpdGlvbiApe1xyXG5cclxuICAgICAgICAgICAgICBzd2l0Y2ggKGZpbHRlcl9pdGVtLmNvbmRpdGlvbikge1xyXG4gICAgICAgICAgICAgICAgY2FzZSBUQ0NvbmRpdGlvbi5ndDogICAgaXNfYWNjZXB0ID0gKCBOdW1iZXIoZmlsdGVyX2l0ZW0uc2VhcmNoVGV4dCkgPiAgTnVtYmVyKGl0ZW1fdmFsdWUpICk7ICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgVENDb25kaXRpb24ubHQ6ICAgIGlzX2FjY2VwdCA9ICggTnVtYmVyKGZpbHRlcl9pdGVtLnNlYXJjaFRleHQpIDwgIE51bWJlcihpdGVtX3ZhbHVlKSApOyAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFRDQ29uZGl0aW9uLmd0ZTogICBpc19hY2NlcHQgPSAoIE51bWJlcihmaWx0ZXJfaXRlbS5zZWFyY2hUZXh0KSA8PSBOdW1iZXIoaXRlbV92YWx1ZSkgKTsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFRDQ29uZGl0aW9uLmx0ZTogICBpc19hY2NlcHQgPSAoIE51bWJlcihmaWx0ZXJfaXRlbS5zZWFyY2hUZXh0KSA+PSBOdW1iZXIoaXRlbV92YWx1ZSkgKTsgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBUQ0NvbmRpdGlvbi5lcXVhbDogaXNfYWNjZXB0ID0gKCBOdW1iZXIoZmlsdGVyX2l0ZW0uc2VhcmNoVGV4dCkgPT09IE51bWJlcihpdGVtX3ZhbHVlKSApOyBicmVhaztcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGlzX2FjY2VwdCA9ICggTnVtYmVyKGZpbHRlcl9pdGVtLnNlYXJjaFRleHQpID09IE51bWJlcihpdGVtX3ZhbHVlKSApO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgaXNfYWNjZXB0ID0gKCBOdW1iZXIoZmlsdGVyX2l0ZW0uc2VhcmNoVGV4dCkgPT09IE51bWJlcihpdGVtX3ZhbHVlKSApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKCAhaXNfYWNjZXB0ICl7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZXREYXRhSW5kZXgoaSwgZmFsc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIFxyXG4gICAgICAgIGlmKCB0eXBlb2YgKGZpbHRlcl9pdGVtLnNlYXJjaFRleHQpID09PSAnYm9vbGVhbicgJiYgZmlsdGVyX2l0ZW0uc2VhcmNoVGV4dCA9PT0gdHJ1ZSApe1xyXG5cclxuICAgICAgICAgIGxldCBpdGVtX3ZhbHVlOiBhbnkgPSB0aGlzLmNvbGxlY3Rpb25GaW5kKHRoaXMuZGF0YVtpXSwgZmlsdGVyX2l0ZW0uc2VhcmNoSW4pO1xyXG4gICAgICAgICAgXHJcbiAgICAgICAgICBpZiggaXRlbV92YWx1ZSAmJiAoaXRlbV92YWx1ZSkubGVuZ3RoID4gMCApeyAgXHJcbiAgICAgICAgICAgIGxldCBxdGRfaXNfdHJ1ZSA9IDA7ICAgICAgICAgIFxyXG4gICAgICAgICAgICBmb3IoIGxldCBpID0gMDsgaSA8ICgoaXRlbV92YWx1ZSkubGVuZ3RoKTsgaSsrICl7XHJcbiAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IGl0ZW1fdmFsdWVbaV07XHJcbiAgICAgICAgICAgICAgaWYoIGl0ZW0gPT09IGZpbHRlcl9pdGVtLnNlYXJjaFRleHQgKXtcclxuICAgICAgICAgICAgICAgIHF0ZF9pc190cnVlKys7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKCBxdGRfaXNfdHJ1ZSA9PT0gMCApe1xyXG4gICAgICAgICAgICAgIHRoaXMuc2V0RGF0YUluZGV4KGksIGZhbHNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIGlmKCAhKCBpdGVtX3ZhbHVlID09PSBmaWx0ZXJfaXRlbS5zZWFyY2hUZXh0ICkgKXtcclxuICAgICAgICAgICAgICB0aGlzLnNldERhdGFJbmRleChpLCBmYWxzZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gICAgICAgICAgXHJcbiAgICAgICAgfVxyXG4gICAgICBcclxuICAgICAgfVxyXG5cclxuICAgIH0gLy8gZW5kIGZvclxyXG4gICAgXHJcbiAgICB0aGlzLnRvUmVzdWx0KCk7XHJcbiAgICAgIFxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB0b1Jlc3VsdCgpe1xyXG5cclxuXHJcbiAgICBjb25zdCBzZWFyY2hfZGF0YSA9IFtdO1xyXG5cclxuICAgIGxldCBpc19maWx0ZXIgPSBmYWxzZTtcclxuICAgIGZvciggbGV0IGkgPSAwOyBpIDwgKHRoaXMuZmlsdGVycykubGVuZ3RoOyBpKysgKXtcclxuICAgICAgaWYoIHRoaXMuZmlsdGVyc1tpXS5zZWFyY2hUZXh0ICYmIHRoaXMuZmlsdGVyc1tpXS5zZWFyY2hUZXh0ICE9PSAnJyApe1xyXG4gICAgICAgIGlzX2ZpbHRlciA9IHRydWU7IGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYoIGlzX2ZpbHRlciApe1xyXG4gICAgICBmb3IoIGxldCBpID0gMDsgaSA8ICh0aGlzLmRhdGEpLmxlbmd0aDsgaSsrICl7XHJcbiAgICAgICAgaWYoIHRoaXMuZGF0YSAmJiB0aGlzLmRhdGFbaV0gJiYgdGhpcy5kYXRhW2ldWyd0Y19maWx0ZXJfYWNjZXB0J10gKXtcclxuICAgICAgICAgIChzZWFyY2hfZGF0YSkucHVzaCh0aGlzLmRhdGFbaV0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5yZXN1bHRfYWNjZXB0KHNlYXJjaF9kYXRhKTtcclxuICAgICAgdGhpcy5vbkZpbHRlci5lbWl0KHsuLi50aGlzLmZpbHRlcnN9KTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucmVzdWx0X2FjY2VwdCh0aGlzLmRhdGEpO1xyXG4gICAgdGhpcy5vbkZpbHRlci5lbWl0KHsuLi50aGlzLmZpbHRlcnN9KTtcclxuICB9XHJcblxyXG4gIHNldERhdGFJbmRleChpbmRleDogbnVtYmVyLCB2YWx1ZTogYm9vbGVhbiApe1xyXG4gICAgaWYoIHRoaXMuZGF0YSAmJiB0aGlzLmRhdGFbaW5kZXhdICl7XHJcbiAgICAgIHRoaXMuZGF0YVtpbmRleF1bJ3RjX2ZpbHRlcl9hY2NlcHQnXSA9IHZhbHVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVzdWx0X2FjY2VwdChkYXRhOiBhbnkpe1xyXG4gICAgaWYoICF0aGlzLnVzZUZpbHRlckFjY2VwdCAmJiBkYXRhICYmIChkYXRhKS5sZW5ndGggPiAwICl7XHJcbiAgICAgIGZvciggbGV0IGkgPSAwOyBpIDwgKGRhdGEpLmxlbmd0aDsgaSsrICl7XHJcbiAgICAgICAgZGVsZXRlIGRhdGFbaV1bJ3RjX2ZpbHRlcl9hY2NlcHQnXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5yZXN1bHQuZW1pdChkYXRhKTtcclxuICB9XHJcblxyXG59XHJcbiIsIjxkaXYgKm5nSWY9XCJzaG93X2ZpbHRlcnNcIiBjbGFzcz1cInRjbG91ZC11aS1maWx0ZXJzIGFyZWEtZmlsdGVyXCI+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIGZpbHRlcnM7IGxldCBpID0gaW5kZXhcIj5cclxuXHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpdGVtLnR5cGUgfHwgKGl0ZW0udHlwZSAmJiBpdGVtLnR5cGUgIT09ICdib29sZWFuJylcIj5cclxuXHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpdGVtLnR5cGUgPT09ICdkYXRlLWxvY2FsJ1wiPlxyXG5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJib3gtZmlsdGVyLWlucHV0IHR5cGUte3tpdGVtLnR5cGV9fSBib3gtdHlwZS17e2l0ZW0udHlwZX19XCIgW3N0eWxlXT1cIihpdGVtLndpZHRoICE9PSAnJykgPyAnd2lkdGg6JytpdGVtLndpZHRoIDogJydcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1kZXNjcmlwdGlvbiB0Yy10aXRsZS1lbGxpcHNpcyBib3gtdHlwZS17e2l0ZW0udHlwZX19XCIgdGl0bGU9XCJ7eyBpdGVtLmRlc2NyaXB0aW9uIH19XCI+PGkgW2NsYXNzLnRvLWFjdGl2ZV09XCIoaXRlbS52YWx1ZSAhPT0gdW5kZWZpbmVkICYmIGl0ZW0udmFsdWUgIT09IG51bGwgJiYgaXRlbS52YWx1ZSAhPT0gJycpXCIgY2xhc3M9XCJmYXMgZmEtZmlsdGVyIGljb24tZmlsdGVyXCI+PC9pPiZuYnNwO3t7IGl0ZW0uZGVzY3JpcHRpb24gfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm94LXR5cGUte3tpdGVtLnR5cGV9fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGNsb3VkLXVpLWRhdGVwaWNrZXIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjX2lucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwiaW5wdXRfe3tpKzF9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbW9kZUlucHV0XT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJpdGVtLnZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInNlYXJjaEluKGl0ZW0sIF9pbnB1dClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90Y2xvdWQtdWktZGF0ZXBpY2tlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0bi1jbGVhci1maWx0ZXItdGV4dFwiIFtjbGFzcy50by1oaWRlXT1cIiEoaXRlbS52YWx1ZSAhPT0gdW5kZWZpbmVkICYmIGl0ZW0udmFsdWUgIT09IG51bGwgJiYgaXRlbS52YWx1ZSAhPT0gJycpXCIgKGNsaWNrKT1cInNlYXJjaEluKGl0ZW0sIG51bGwpOyBpdGVtLnNlYXJjaFRleHQgPSB1bmRlZmluZWQ7IGl0ZW0udmFsdWUgPSAnJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtdGltZXNcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIml0ZW0udHlwZSAhPT0gJ2RhdGUtbG9jYWwnXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXRlbS50eXBlID09PSAnZGF0ZXRpbWUtbG9jYWwnXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzdGFydF9zdG9wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gUEVSSU9EIFJBTkdFIERBVEUgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpdGVtLmlkID09PSAnc3RhcnQnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm94LWZpbHRlci1pbnB1dCB0eXBlLXt7aXRlbS50eXBlfX0gYm94LXR5cGUte3tpdGVtLnR5cGV9fVwiIFtzdHlsZV09XCIoaXRlbS53aWR0aCAhPT0gJycpID8gJ3dpZHRoOicrc3RhcnRfc3RvcF93aWR0aCsnJytzdGFydF9zdG9wX3VuZCA6ICcnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm0tZGVzY3JpcHRpb24gdGMtdGl0bGUtZWxsaXBzaXMgYm94LXR5cGUte3tpdGVtLnR5cGV9fVwiIHRpdGxlPVwie3sgaXRlbS5kZXNjcmlwdGlvbiB9fVwiPjxpIFtjbGFzcy50by1hY3RpdmVdPVwiKF9yYW5nZV9kYXRlICYmIF9yYW5nZV9kYXRlLnJlc3VsdCAmJiBfcmFuZ2VfZGF0ZS5yZXN1bHQuc3RhcnQgJiYgX3JhbmdlX2RhdGUucmVzdWx0LnN0b3AgKVwiIGNsYXNzPVwiZmFzIGZhLWZpbHRlciBpY29uLWZpbHRlclwiPjwvaT4mbmJzcDs8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmFuZ2UtZGF0ZSAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNfcmFuZ2VfZGF0ZSBuZ01vZGVsIG5hbWU9XCJpbnB1dF97e2krMX19XCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkZWZhdWx0VmFsdWVQZXJpb2RTdGFydFN0b3BdPVwiaXRlbS5kZWZhdWx0VmFsdWVQZXJpb2RTdGFydFN0b3BcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGVzY3JpcHRpb25TdGFydF09XCJkZXNjcmlwdGlvblN0YXJ0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rlc2NyaXB0aW9uU3RvcF09XCJkZXNjcmlwdGlvblN0b3BcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9uQ2hhbmdlKT1cInNlYXJjaEluUmFuZ2UoX3JhbmdlX2RhdGUpOyBzZWFyY2hJbihpdGVtLCBfcmFuZ2VfZGF0ZSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3JhbmdlLWRhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+ICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCAqbmdJZj1cIml0ZW0uaWQgPT09ICdzdGFydCdcIiAjX2lucHV0IG5hbWU9XCJpbnB1dF97e2krMX19XCIgdHlwZT1cImhpZGRlblwiIFsobmdNb2RlbCldPVwic3RhcnRfdmFsdWVcIj4gIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgKm5nSWY9XCJpdGVtLmlkID09PSAnc3RvcCdcIiAjX2lucHV0IG5hbWU9XCJpbnB1dF97e2krMX19XCIgdHlwZT1cImhpZGRlblwiIFsobmdNb2RlbCldPVwic3RvcF92YWx1ZVwiPiAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXN0YXJ0X3N0b3BcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJib3gtZmlsdGVyLWlucHV0IHR5cGUte3tpdGVtLnR5cGV9fSBib3gtdHlwZS17e2l0ZW0udHlwZX19XCIgW3N0eWxlXT1cIihpdGVtLndpZHRoICE9PSAnJykgPyAnd2lkdGg6JytpdGVtLndpZHRoIDogJydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWRlc2NyaXB0aW9uIHRjLXRpdGxlLWVsbGlwc2lzIGJveC10eXBlLXt7aXRlbS50eXBlfX1cIiB0aXRsZT1cInt7IGl0ZW0uZGVzY3JpcHRpb24gfX1cIj48aSBbY2xhc3MudG8tYWN0aXZlXT1cIihpdGVtLnZhbHVlICE9PSB1bmRlZmluZWQgJiYgaXRlbS52YWx1ZSAhPT0gbnVsbCAmJiBpdGVtLnZhbHVlICE9PSAnJylcIiBjbGFzcz1cImZhcyBmYS1maWx0ZXIgaWNvbi1maWx0ZXJcIj48L2k+Jm5ic3A7e3sgaXRlbS5kZXNjcmlwdGlvbiB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJveC10eXBlLXt7aXRlbS50eXBlfX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGNsb3VkLXVpLWRhdGVwaWNrZXItdGltZSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI19pbnB1dCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJpdGVtLnZhbHVlXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJpbnB1dF97e2krMX19XCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt1c2VPcHRpb25zRGF0ZVRpbWVdPVwiKGl0ZW0gJiYgaXRlbS51c2VPcHRpb25zRGF0ZVRpbWUpID8gdHJ1ZSA6IGZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGV2ZW50Q2hhbmdlKT1cInNlYXJjaEluKGl0ZW0sIF9pbnB1dClcIiA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90Y2xvdWQtdWktZGF0ZXBpY2tlci10aW1lPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4tY2xlYXItZmlsdGVyLXRleHRcIiBbY2xhc3MudG8taGlkZV09XCIhKGl0ZW0udmFsdWUgIT09IHVuZGVmaW5lZCAmJiBpdGVtLnZhbHVlICE9PSBudWxsICYmIGl0ZW0udmFsdWUgIT09ICcnKVwiIChjbGljayk9XCJzZWFyY2hJbihpdGVtLCBudWxsKTsgaXRlbS5zZWFyY2hUZXh0ID0gdW5kZWZpbmVkOyBpdGVtLnZhbHVlID0gJydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtdGltZXNcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpdGVtLnR5cGUgIT09ICdzZWxlY3QnICYmIGl0ZW0udHlwZSAhPT0gJ2RhdGV0aW1lLWxvY2FsJyAmJiBpdGVtLnR5cGUgIT09ICdkYXRlLWxvY2FsJ1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJveC1maWx0ZXItaW5wdXQgdHlwZS17e2l0ZW0udHlwZX19IGJveC10eXBlLXt7aXRlbS50eXBlfX1cIiBbc3R5bGVdPVwiKGl0ZW0ud2lkdGggIT09ICcnKSA/ICd3aWR0aDonK2l0ZW0ud2lkdGggOiAnJ1wiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1kZXNjcmlwdGlvbiB0Yy10aXRsZS1lbGxpcHNpcyBib3gtdHlwZS17e2l0ZW0udHlwZX19XCIgdGl0bGU9XCJ7eyBpdGVtLmRlc2NyaXB0aW9uIH19XCI+PGkgW2NsYXNzLnRvLWFjdGl2ZV09XCJfaW5wdXQudmFsdWUgIT09ICcnXCIgY2xhc3M9XCJmYXMgZmEtZmlsdGVyIGljb24tZmlsdGVyXCI+PC9pPiZuYnNwO3t7IGl0ZW0uZGVzY3JpcHRpb24gfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm94LXR5cGUte3tpdGVtLnR5cGV9fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjX2lucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIml0ZW0udmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyAoaXRlbS5wbGFjZWhvbGRlciAhPT0gJycpID8gaXRlbS5wbGFjZWhvbGRlciA6ICcnIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJpbnB1dF97e2krMX19XCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwie3sgKGl0ZW0udHlwZSA9PT0gJ251bWJlcicpID8gJ3RleHQnIDogaXRlbS50eXBlIH19XCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCB0Yy1mb3JtLWNvbnRyb2xcIiAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleXVwKT1cInNlYXJjaEluKGl0ZW0sICRldmVudClcIj4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuLWNsZWFyLWZpbHRlci10ZXh0XCIgW2NsYXNzLnRvLWhpZGVdPVwiX2lucHV0LnZhbHVlID09PSAnJ1wiIChjbGljayk9XCJzZWFyY2hJbihpdGVtLCBudWxsKTsgX2lucHV0LnZhbHVlID0gJydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXRpbWVzXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpdGVtLnR5cGUgPT09ICdzZWxlY3QnICYmIGl0ZW0uZGF0YSAmJiAoaXRlbS5kYXRhKS5sZW5ndGggPiAwXCIgPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJveC1maWx0ZXItaW5wdXQgdHlwZS17e2l0ZW0udHlwZX19IGJveC10eXBlLXt7aXRlbS50eXBlfX1cIiBbc3R5bGVdPVwiKGl0ZW0ud2lkdGggIT09ICcnKSA/ICd3aWR0aDonK2l0ZW0ud2lkdGggOiAnJ1wiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibS1kZXNjcmlwdGlvbiB0Yy10aXRsZS1lbGxpcHNpcyBib3gtdHlwZS17e2l0ZW0udHlwZX19XCIgdGl0bGU9XCJ7eyBpdGVtLmRlc2NyaXB0aW9uIH19XCI+PGkgW2NsYXNzLnRvLWFjdGl2ZV09XCJfaW5wdXQudmFsdWUgIT09ICcnXCIgY2xhc3M9XCJmYXMgZmEtZmlsdGVyIGljb24tZmlsdGVyXCI+PC9pPiZuYnNwO3t7IGl0ZW0uZGVzY3JpcHRpb24gfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm94LXR5cGUte3tpdGVtLnR5cGV9fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgI19pbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJpdGVtLnZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJpbnB1dF97e2krMX19XCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCB0Yy1mb3JtLWNvbnRyb2xcIiAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJzZWFyY2hJbihpdGVtLCAkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIFtuZ1ZhbHVlXT1cIlwiPjwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgdiBvZiBpdGVtLmRhdGFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIFt2YWx1ZV09XCJ2LnZhbHVlXCI+e3sgdi5kZXNjcmlwdGlvbiB9fTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcblxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpdGVtLnR5cGUgJiYgaXRlbS50eXBlID09PSAnYm9vbGVhbidcIj5cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJib3gtZmlsdGVyLWlucHV0XCIgW3N0eWxlXT1cIihpdGVtLndpZHRoICE9PSAnJykgPyAnd2lkdGg6JytpdGVtLndpZHRoIDogJydcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtLWRlc2NyaXB0aW9uIHRjLXRpdGxlLWVsbGlwc2lzXCIgdGl0bGU9XCJ7eyBpdGVtLmRlc2NyaXB0aW9uIH19XCIgdGl0bGU9XCJ7eyBpdGVtLmRlc2NyaXB0aW9uIH19XCI+PGkgW2NsYXNzLnRvLWFjdGl2ZV09XCJfaW5wdXQuY2hlY2tlZCA9PT0gdHJ1ZVwiIGNsYXNzPVwiZmFzIGZhLWZpbHRlciBpY29uLWZpbHRlclwiPjwvaT4mbmJzcDt7eyBpdGVtLmRlc2NyaXB0aW9uIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXJlYS1pbnB1dC1jaGVja2JveFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNvbnRyb2wgdGMtZm9ybS1jb250cm9sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0ucGxhY2Vob2xkZXIgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjX2lucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyAoaXRlbS5wbGFjZWhvbGRlciAhPT0gJycpID8gaXRlbS5wbGFjZWhvbGRlciA6ICcnIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwiaW5wdXRfe3tpKzF9fVwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwic2VhcmNoSW4oaXRlbSwgX2lucHV0LmNoZWNrZWQpXCI+ICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+ICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXJpZ2h0IG1iLTEgbXItMVwiICpuZ0lmPVwidXNlQnV0dG9uU3VibWl0XCI+XHJcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJ0Yy1idG4ge3sgYnRuU3VibWl0Q2xhc3MgfX1cIiAoY2xpY2spPVwidG9TdWJtaXQoKVwiID57eyBzdWJtaXRUZXh0IH19PC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuXHJcbjwvZGl2PlxyXG5cclxuPCEtLSA8cHJlPnt7IGlucHV0cyB8IGpzb24gfX08L3ByZT4gLS0+XHJcbjwhLS0gPHByZT4ge3sgZGF0YSB8IGpzb24gfX0gPC9wcmU+IC0tPlxyXG5cclxuPCEtLSA8cD5GSUxURVJTPC9wPjxwcmU+IHt7IGZpbHRlcnMgfCBqc29uIH19PC9wcmU+IC0tPlxyXG5cclxuPCEtLVxyXG4gICAgPHByZT5zdGFydF9zdG9wOiB7eyBzdGFydF9zdG9wIH19PC9wcmU+XHJcbiAgICA8cHJlPnN0YXJ0X3N0b3Bfd2lkdGg6IHt7IHN0YXJ0X3N0b3Bfd2lkdGggfX08L3ByZT5cclxuICAgIDxwcmU+c3RhcnRfc3RvcF91bmQ6IHt7IHN0YXJ0X3N0b3BfdW5kIH19PC9wcmU+XHJcbi0tPiJdfQ==
|