@dev-tcloud/tcloud-ui 0.1.8 → 0.1.9
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 +30 -22
- package/esm2020/lib/_modules/tcloud-ui-filters/tcloud-ui-filters.component.mjs +8 -4
- package/fesm2015/dev-tcloud-tcloud-ui.mjs +66 -34
- package/fesm2015/dev-tcloud-tcloud-ui.mjs.map +1 -1
- package/fesm2020/dev-tcloud-tcloud-ui.mjs +66 -34
- 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/package.json +1 -1
- package/scss/components/custom/ui-datepicker.scss +10 -0
- package/scss/components/styles.scss +2 -0
package/esm2020/lib/_modules/tcloud-ui-filters/components/range-date/range-date.component.mjs
CHANGED
|
@@ -25,7 +25,6 @@ export class TCloudUiRangeDateComponent {
|
|
|
25
25
|
this.defaultValuePeriodStartStop = '';
|
|
26
26
|
this.descriptionStart = '';
|
|
27
27
|
this.descriptionStop = '';
|
|
28
|
-
this.UTC = false;
|
|
29
28
|
this.mode = 'select';
|
|
30
29
|
this.isValid = false;
|
|
31
30
|
//Placeholders for the callbacks which are later providesd
|
|
@@ -59,26 +58,27 @@ export class TCloudUiRangeDateComponent {
|
|
|
59
58
|
// this.value_options_date_time = '';
|
|
60
59
|
event = (event.value) ? event.value : event;
|
|
61
60
|
let now = new Date();
|
|
61
|
+
let current_date = new Date();
|
|
62
62
|
let filter_date = undefined;
|
|
63
63
|
if (event === '1-last-time') {
|
|
64
|
-
filter_date = new Date(
|
|
64
|
+
filter_date = new Date(current_date.getTime() - 1 * 60 * 60 * 1000);
|
|
65
65
|
}
|
|
66
66
|
if (event === '3-last-time') {
|
|
67
|
-
filter_date = new Date(
|
|
67
|
+
filter_date = new Date(current_date.getTime() - 3 * 60 * 60 * 1000);
|
|
68
68
|
}
|
|
69
69
|
if (event === '24-last-time') {
|
|
70
|
-
filter_date = new Date(
|
|
70
|
+
filter_date = new Date(current_date.getTime() - 24 * 60 * 60 * 1000);
|
|
71
71
|
}
|
|
72
72
|
if (event === '7-days') {
|
|
73
|
-
filter_date = new Date((new Date(
|
|
73
|
+
filter_date = new Date((new Date(current_date)).setDate(now.getDate() - 7));
|
|
74
74
|
filter_date = new Date((filter_date).setSeconds(0));
|
|
75
75
|
}
|
|
76
76
|
if (event === '15-days') {
|
|
77
|
-
filter_date = new Date((new Date(
|
|
77
|
+
filter_date = new Date((new Date(current_date)).setDate(now.getDate() - 15));
|
|
78
78
|
filter_date = new Date((filter_date).setSeconds(0));
|
|
79
79
|
}
|
|
80
80
|
if (event === '30-days') {
|
|
81
|
-
filter_date = new Date((new Date(
|
|
81
|
+
filter_date = new Date((new Date(current_date)).setDate(now.getDate() - 30));
|
|
82
82
|
filter_date = new Date((filter_date).setSeconds(0));
|
|
83
83
|
}
|
|
84
84
|
if (event === 'current-month') {
|
|
@@ -89,8 +89,8 @@ export class TCloudUiRangeDateComponent {
|
|
|
89
89
|
}
|
|
90
90
|
if (filter_date) {
|
|
91
91
|
this.result = {
|
|
92
|
-
start: filter_date,
|
|
93
|
-
stop: now
|
|
92
|
+
start: this.getDateUTC(filter_date),
|
|
93
|
+
stop: this.getDateUTC(now)
|
|
94
94
|
};
|
|
95
95
|
this.onChange.emit(this.result);
|
|
96
96
|
this.isValid = true;
|
|
@@ -101,9 +101,19 @@ export class TCloudUiRangeDateComponent {
|
|
|
101
101
|
this.isValid = false;
|
|
102
102
|
}
|
|
103
103
|
}
|
|
104
|
+
getDateUTC(dt) {
|
|
105
|
+
const ano = dt.getFullYear();
|
|
106
|
+
const mes = dt.getMonth();
|
|
107
|
+
const dia = dt.getDate();
|
|
108
|
+
const horas = dt.getHours();
|
|
109
|
+
const minutos = dt.getMinutes();
|
|
110
|
+
const segundos = dt.getSeconds();
|
|
111
|
+
return new Date(Date.UTC(ano, mes, dia, horas, minutos, segundos));
|
|
112
|
+
}
|
|
104
113
|
onChangeStartDateTime(event) {
|
|
105
114
|
this.isValid = false;
|
|
106
|
-
if (this.result && this.result.start
|
|
115
|
+
if (this.result && this.result.start) {
|
|
116
|
+
this.result.start = event.value;
|
|
107
117
|
this.onChange.emit(this.result);
|
|
108
118
|
this.isValid = true;
|
|
109
119
|
}
|
|
@@ -114,7 +124,8 @@ export class TCloudUiRangeDateComponent {
|
|
|
114
124
|
}
|
|
115
125
|
onChangeStopDateTime(event) {
|
|
116
126
|
this.isValid = false;
|
|
117
|
-
if (this.result && this.result.
|
|
127
|
+
if (this.result && this.result.stop) {
|
|
128
|
+
this.result.start = event.value;
|
|
118
129
|
this.onChange.emit(this.result);
|
|
119
130
|
this.isValid = true;
|
|
120
131
|
}
|
|
@@ -124,13 +135,12 @@ export class TCloudUiRangeDateComponent {
|
|
|
124
135
|
}
|
|
125
136
|
}
|
|
126
137
|
toggle() {
|
|
127
|
-
const mode = (this.mode === 'select') ? 'datepickers' : 'select';
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
this.onChange.emit(this.result);
|
|
132
|
-
}
|
|
138
|
+
const mode = (`${this.mode}` === 'select') ? 'datepickers' : 'select';
|
|
139
|
+
this.defaultValuePeriodStartStop = '';
|
|
140
|
+
this.isValid = false;
|
|
141
|
+
this.result = {};
|
|
133
142
|
this.mode = mode;
|
|
143
|
+
this.onChange.emit(this.result);
|
|
134
144
|
}
|
|
135
145
|
//get accessor
|
|
136
146
|
get value() {
|
|
@@ -178,10 +188,10 @@ export class TCloudUiRangeDateComponent {
|
|
|
178
188
|
}
|
|
179
189
|
}
|
|
180
190
|
TCloudUiRangeDateComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: TCloudUiRangeDateComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
181
|
-
TCloudUiRangeDateComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: TCloudUiRangeDateComponent, selector: "range-date", inputs: { defaultValuePeriodStartStop: "defaultValuePeriodStartStop", required: "required", descriptionStart: "descriptionStart", descriptionStop: "descriptionStop"
|
|
191
|
+
TCloudUiRangeDateComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: TCloudUiRangeDateComponent, selector: "range-date", inputs: { defaultValuePeriodStartStop: "defaultValuePeriodStartStop", required: "required", descriptionStart: "descriptionStart", descriptionStop: "descriptionStop" }, outputs: { onChange: "onChange" }, providers: [CUSTOM_INPUT_CONTROL_VALUE_ACCESSOR, CUSTOM_INPUT_VALIDATORS], ngImport: i0, template: "<table class=\"tcloud-ui-filters-range-date area-range-date\">\r\n <tr>\r\n\r\n <td>\r\n <div *ngIf=\"mode === 'select'\">\r\n <div class=\"description-period\">Per\u00EDodo</div>\r\n <select name=\"periodo\" class=\"form-control tc-form-control\" (change)=\"onChangeOptionsDateTime($event.target)\" [(ngModel)]=\"defaultValuePeriodStartStop\" >\r\n <option value=\"\"></option> \r\n <ng-container *ngFor=\"let item of options_date_time\">\r\n <option [value]=\"item.value\">{{ item.description }}</option>\r\n </ng-container>\r\n </select>\r\n </div>\r\n <div *ngIf=\"mode === 'datepickers'\">\r\n\r\n <table class=\"area-range-datepickers\">\r\n <tr>\r\n <td>\r\n <div class=\"description-start\">{{ descriptionStart }}</div>\r\n <tcloud-ui-datepicker-time \r\n #_input_start \r\n [(ngModel)]=\"result.start\" \r\n name=\"input_start\" \r\n (eventChange)=\"onChangeStartDateTime(_input_start)\">\r\n </tcloud-ui-datepicker-time>\r\n </td>\r\n <td>\r\n <div class=\"description-stop\">{{ descriptionStop }}</div>\r\n <tcloud-ui-datepicker-time \r\n #_input_stop\r\n [(ngModel)]=\"result.stop\" \r\n name=\"input_stop\" \r\n (eventChange)=\"onChangeStopDateTime(_input_stop)\">\r\n </tcloud-ui-datepicker-time>\r\n </td>\r\n </tr>\r\n </table>\r\n\r\n </div>\r\n </td>\r\n\r\n <td>\r\n <button class=\"btn-mode-range-date\" [class.active]=\"mode === 'select'\" (click)=\"toggle()\" type=\"button\">\r\n\r\n <i *ngIf=\"mode === 'select'\" class=\"far fa-calendar-alt\" title=\"Alterar para calend\u00E1rio\"></i>\r\n <i *ngIf=\"mode !== 'select'\" class=\"fas fa-calendar-week\" title=\"Selecionar per\u00EDodo\"></i>\r\n\r\n <!-- <div *ngIf=\"mode === 'select'\">Exibir<br>Calend\u00E1rio</div> -->\r\n <!-- <div *ngIf=\"mode !== 'select'\">Exibir<br>Per\u00EDodo</div> -->\r\n </button>\r\n </td>\r\n\r\n </tr>\r\n</table>", styles: [".area-range-date{height:40px;width:100%}.area-range-date tr td:first-child{width:calc(100% - 35px)}.area-range-date tr td:first-child select{color:#535353;border-radius:3px 0 0 3px!important}.area-range-date tr td:first-child .area-range-datepickers{width:100%}.area-range-date tr td:first-child .area-range-datepickers td{width:50%!important}.area-range-date tr td:last-child{width:35px}.area-range-date tr td:last-child .btn-mode-range-date{width:100%;text-align:center;border:1px solid #ccc;background-color:#fff;font-size:17px;line-height:1;cursor:pointer;color:#6c6c6c;height:40px;border-radius:0 3px 3px 0}.area-range-date tr td:last-child .btn-mode-range-date:focus{color:#403d3d}.active{background-color:#eee!important}.description-period,.description-start{position:relative;left:17px;top:-15px;line-height:0}.description-stop{position:relative;top:-15px;line-height:0}\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.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.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"] }] });
|
|
182
192
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: TCloudUiRangeDateComponent, decorators: [{
|
|
183
193
|
type: Component,
|
|
184
|
-
args: [{ selector: 'range-date', providers: [CUSTOM_INPUT_CONTROL_VALUE_ACCESSOR, CUSTOM_INPUT_VALIDATORS], template: "<table class=\"tcloud-ui-filters-range-date area-range-date\">\r\n <tr>\r\n\r\n <td>\r\n <div *ngIf=\"mode === 'select'\">\r\n <div class=\"description-period\">Per\u00EDodo</div>\r\n <select name=\"periodo\" class=\"form-control tc-form-control\" (change)=\"onChangeOptionsDateTime($event.target)\" [(ngModel)]=\"defaultValuePeriodStartStop\" >\r\n <option value=\"\"></option> \r\n <ng-container *ngFor=\"let item of options_date_time\">\r\n <option [value]=\"item.value\">{{ item.description }}</option>\r\n </ng-container>\r\n </select>\r\n </div>\r\n <div *ngIf=\"mode === 'datepickers'\">\r\n\r\n <table class=\"area-range-datepickers\">\r\n <tr>\r\n <td>\r\n <div class=\"description-start\">{{ descriptionStart }}</div>\r\n <tcloud-ui-datepicker-time \r\n #_input_start \r\n [
|
|
194
|
+
args: [{ selector: 'range-date', providers: [CUSTOM_INPUT_CONTROL_VALUE_ACCESSOR, CUSTOM_INPUT_VALIDATORS], template: "<table class=\"tcloud-ui-filters-range-date area-range-date\">\r\n <tr>\r\n\r\n <td>\r\n <div *ngIf=\"mode === 'select'\">\r\n <div class=\"description-period\">Per\u00EDodo</div>\r\n <select name=\"periodo\" class=\"form-control tc-form-control\" (change)=\"onChangeOptionsDateTime($event.target)\" [(ngModel)]=\"defaultValuePeriodStartStop\" >\r\n <option value=\"\"></option> \r\n <ng-container *ngFor=\"let item of options_date_time\">\r\n <option [value]=\"item.value\">{{ item.description }}</option>\r\n </ng-container>\r\n </select>\r\n </div>\r\n <div *ngIf=\"mode === 'datepickers'\">\r\n\r\n <table class=\"area-range-datepickers\">\r\n <tr>\r\n <td>\r\n <div class=\"description-start\">{{ descriptionStart }}</div>\r\n <tcloud-ui-datepicker-time \r\n #_input_start \r\n [(ngModel)]=\"result.start\" \r\n name=\"input_start\" \r\n (eventChange)=\"onChangeStartDateTime(_input_start)\">\r\n </tcloud-ui-datepicker-time>\r\n </td>\r\n <td>\r\n <div class=\"description-stop\">{{ descriptionStop }}</div>\r\n <tcloud-ui-datepicker-time \r\n #_input_stop\r\n [(ngModel)]=\"result.stop\" \r\n name=\"input_stop\" \r\n (eventChange)=\"onChangeStopDateTime(_input_stop)\">\r\n </tcloud-ui-datepicker-time>\r\n </td>\r\n </tr>\r\n </table>\r\n\r\n </div>\r\n </td>\r\n\r\n <td>\r\n <button class=\"btn-mode-range-date\" [class.active]=\"mode === 'select'\" (click)=\"toggle()\" type=\"button\">\r\n\r\n <i *ngIf=\"mode === 'select'\" class=\"far fa-calendar-alt\" title=\"Alterar para calend\u00E1rio\"></i>\r\n <i *ngIf=\"mode !== 'select'\" class=\"fas fa-calendar-week\" title=\"Selecionar per\u00EDodo\"></i>\r\n\r\n <!-- <div *ngIf=\"mode === 'select'\">Exibir<br>Calend\u00E1rio</div> -->\r\n <!-- <div *ngIf=\"mode !== 'select'\">Exibir<br>Per\u00EDodo</div> -->\r\n </button>\r\n </td>\r\n\r\n </tr>\r\n</table>", styles: [".area-range-date{height:40px;width:100%}.area-range-date tr td:first-child{width:calc(100% - 35px)}.area-range-date tr td:first-child select{color:#535353;border-radius:3px 0 0 3px!important}.area-range-date tr td:first-child .area-range-datepickers{width:100%}.area-range-date tr td:first-child .area-range-datepickers td{width:50%!important}.area-range-date tr td:last-child{width:35px}.area-range-date tr td:last-child .btn-mode-range-date{width:100%;text-align:center;border:1px solid #ccc;background-color:#fff;font-size:17px;line-height:1;cursor:pointer;color:#6c6c6c;height:40px;border-radius:0 3px 3px 0}.area-range-date tr td:last-child .btn-mode-range-date:focus{color:#403d3d}.active{background-color:#eee!important}.description-period,.description-start{position:relative;left:17px;top:-15px;line-height:0}.description-stop{position:relative;top:-15px;line-height:0}\n"] }]
|
|
185
195
|
}], ctorParameters: function () { return []; }, propDecorators: { onChange: [{
|
|
186
196
|
type: Output
|
|
187
197
|
}], defaultValuePeriodStartStop: [{
|
|
@@ -192,7 +202,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
|
|
|
192
202
|
type: Input
|
|
193
203
|
}], descriptionStop: [{
|
|
194
204
|
type: Input
|
|
195
|
-
}], UTC: [{
|
|
196
|
-
type: Input
|
|
197
205
|
}] } });
|
|
198
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFuZ2UtZGF0ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90Y2xvdWQtdWkvc3JjL2xpYi9fbW9kdWxlcy90Y2xvdWQtdWktZmlsdGVycy9jb21wb25lbnRzL3JhbmdlLWRhdGUvcmFuZ2UtZGF0ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90Y2xvdWQtdWkvc3JjL2xpYi9fbW9kdWxlcy90Y2xvdWQtdWktZmlsdGVycy9jb21wb25lbnRzL3JhbmdlLWRhdGUvcmFuZ2UtZGF0ZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRixPQUFPLEVBQWUsYUFBYSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7O0FBRS9FLE1BQU8sdUJBQXVCLEdBQVE7SUFDcEMsT0FBTyxFQUFFLGFBQWE7SUFDdEIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQywwQkFBMEIsQ0FBQztJQUN6RCxLQUFLLEVBQUUsSUFBSTtDQUNaLENBQUE7QUFFRCxNQUFNLG1DQUFtQyxHQUFRO0lBQy9DLE9BQU8sRUFBRSxpQkFBaUI7SUFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQywwQkFBMEIsQ0FBQztJQUN6RCxLQUFLLEVBQUUsSUFBSTtDQUNaLENBQUM7QUFFRixNQUFNLElBQUksR0FBRyxHQUFHLEVBQUU7QUFDbEIsQ0FBQyxDQUFDO0FBY0YsTUFBTSxPQUFPLDBCQUEwQjtJQXFCckM7UUFuQkEsV0FBTSxHQUFHLEVBQXFCLENBQUM7UUFFL0Isc0JBQWlCLEdBQVEsRUFBRSxDQUFDO1FBQzVCLDRCQUF1QixHQUFZLEtBQUss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bnQsIElucHV0LCBPbkluaXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBmb3J3YXJkUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgTkdfVkFMSURBVE9SUywgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmNvbnN0ICBDVVNUT01fSU5QVVRfVkFMSURBVE9SUzogYW55ID0geyBcbiAgcHJvdmlkZTogTkdfVkFMSURBVE9SUywgXG4gIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFRDbG91ZFVpUmFuZ2VEYXRlQ29tcG9uZW50KSxcbiAgbXVsdGk6IHRydWVcbn1cblxuY29uc3QgQ1VTVE9NX0lOUFVUX0NPTlRST0xfVkFMVUVfQUNDRVNTT1I6IGFueSA9IHtcbiAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFRDbG91ZFVpUmFuZ2VEYXRlQ29tcG9uZW50KSxcbiAgbXVsdGk6IHRydWVcbn07XG5cbmNvbnN0IG5vb3AgPSAoKSA9PiB7XG59O1xuXG5cbmludGVyZmFjZSBJUmVzdWx0RGF0ZVRpbWV7XG4gIHN0YXJ0OiBhbnk7XG4gIHN0b3A6IGFueTtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncmFuZ2UtZGF0ZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9yYW5nZS1kYXRlLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcmFuZ2UtZGF0ZS5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFtDVVNUT01fSU5QVVRfQ09OVFJPTF9WQUxVRV9BQ0NFU1NPUiwgQ1VTVE9NX0lOUFVUX1ZBTElEQVRPUlNdXG59KVxuZXhwb3J0IGNsYXNzIFRDbG91ZFVpUmFuZ2VEYXRlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblxuICByZXN1bHQgPSB7fSBhcyBJUmVzdWx0RGF0ZVRpbWU7XG5cbiAgb3B0aW9uc19kYXRlX3RpbWU6IGFueSA9IFtdO1xuICB1c2VfdmFsaWRhdGlvbl9yZXF1aXJlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBPdXRwdXQoKSBvbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8SVJlc3VsdERhdGVUaW1lPigpO1xuXG4gIEBJbnB1dCgpIGRlZmF1bHRWYWx1ZVBlcmlvZFN0YXJ0U3RvcDogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIHJlcXVpcmVkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgQElucHV0KCkgZGVzY3JpcHRpb25TdGFydDogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIGRlc2NyaXB0aW9uU3RvcDogc3RyaW5nID0gJyc7XG5cbiAgQElucHV0KCkgVVRDOiBib29sZWFuID0gZmFsc2U7XG5cbiAgbW9kZTogc3RyaW5nID0gJ3NlbGVjdCc7XG5cbiAgaXNWYWxpZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKCkgeyB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5zZXRPcHRpb25zRGF0ZVRpbWUoKTtcbiAgfVxuXG4gIHNldE9wdGlvbnNEYXRlVGltZSgpe1xuICAgIHRoaXMub3B0aW9uc19kYXRlX3RpbWUgPSBbXG4gICAgICB7dmFsdWU6JzEtbGFzdC10aW1lJywgZGVzY3JpcHRpb246ICfDmmx0aW1hIDEgaG9yYSd9LFxuICAgICAge3ZhbHVlOiczLWxhc3QtdGltZScsIGRlc2NyaXB0aW9uOiAnw5psdGltYXMgMyBob3Jhcyd9LFxuICAgICAge3ZhbHVlOicyNC1sYXN0LXRpbWUnLCBkZXNjcmlwdGlvbjogJ8OabHRpbWFzIDI0IGhvcmFzJ30sXG5cbiAgICAgIHt2YWx1ZTonNy1kYXlzJywgZGVzY3JpcHRpb246ICfDmmx0aW1vcyA3IGRpYXMnfSxcbiAgICAgIHt2YWx1ZTonMTUtZGF5cycsIGRlc2NyaXB0aW9uOiAnw5psdGltb3MgMTUgZGlhcyd9LFxuICAgICAge3ZhbHVlOiczMC1kYXlzJywgZGVzY3JpcHRpb246ICfDmmx0aW1vcyAzMCBkaWFzJ30sXG4gICAgICB7dmFsdWU6J2N1cnJlbnQtbW9udGgnLCBkZXNjcmlwdGlvbjogJ03DqnMgYXR1YWwnfSxcbiAgICAgIHt2YWx1ZTonY3VycmVudC15ZWFyJywgZGVzY3JpcHRpb246ICdBbm8gYXR1YWwnfVxuICAgIF1cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmKCB0aGlzLmRlZmF1bHRWYWx1ZVBlcmlvZFN0YXJ0U3RvcCAhPT0gJycgKXtcbiAgICAgICAgdGhpcy5vbkNoYW5nZU9wdGlvbnNEYXRlVGltZSggdGhpcy5kZWZhdWx0VmFsdWVQZXJpb2RTdGFydFN0b3AgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBcbiAgfVxuXG4gIG9uQ2hhbmdlT3B0aW9uc0RhdGVUaW1lKGV2ZW50OiBhbnkpe1xuICAgIHRoaXMuaXNWYWxpZCA9IGZhbHNlO1xuICAgIC8vIHRoaXMuZGVzY3JpcHRpb25fb3B0aW9uc19kYXRlX3RpbWUgPSAnJztcbiAgICAvLyB0aGlzLnZhbHVlX29wdGlvbnNfZGF0ZV90aW1lID0gJyc7XG4gICAgZXZlbnQgPSAoZXZlbnQudmFsdWUpID8gZXZlbnQudmFsdWUgOiBldmVudDtcblxuICAgIGxldCBub3cgPSBuZXcgRGF0ZSgpO1xuICAgIGxldCBmaWx0ZXJfZGF0ZTogYW55ID0gdW5kZWZpbmVkO1xuXG4gICAgaWYoIGV2ZW50ID09PSAnMS1sYXN0LXRpbWUnICl7XG4gICAgICBmaWx0ZXJfZGF0ZSA9IG5ldyBEYXRlKG5vdy5nZXRUaW1lKCkgLSAxICogNjAgKiA2MCAqIDEwMDApO1xuICAgIH1cblxuICAgIGlmKCBldmVudCA9PT0gJzMtbGFzdC10aW1lJyApe1xuICAgICAgZmlsdGVyX2RhdGUgPSBuZXcgRGF0ZShub3cuZ2V0VGltZSgpIC0gMyAqIDYwICogNjAgKiAxMDAwKTtcbiAgICB9XG5cbiAgICBpZiggZXZlbnQgPT09ICcyNC1sYXN0LXRpbWUnICl7XG4gICAgICBmaWx0ZXJfZGF0ZSA9IG5ldyBEYXRlKG5vdy5nZXRUaW1lKCkgLSAyNCAqIDYwICogNjAgKiAxMDAwKTtcbiAgICB9XG5cbiAgICBpZiggZXZlbnQgPT09ICc3LWRheXMnICl7XG4gICAgICBmaWx0ZXJfZGF0ZSA9IG5ldyBEYXRlKCAobmV3IERhdGUobm93KSkuc2V0RGF0ZSggbm93LmdldERhdGUoKSAtIDcgKSApOyAgXG4gICAgICBmaWx0ZXJfZGF0ZSA9IG5ldyBEYXRlKCAoZmlsdGVyX2RhdGUpLnNldFNlY29uZHMoMCkgKTsgICAgICBcbiAgICB9XG5cbiAgICBpZiggZXZlbnQgPT09ICcxNS1kYXlzJyApe1xuICAgICAgZmlsdGVyX2RhdGUgPSBuZXcgRGF0ZSggKG5ldyBEYXRlKG5vdykpLnNldERhdGUoIG5vdy5nZXREYXRlKCkgLSAxNSApICk7XG4gICAgICBmaWx0ZXJfZGF0ZSA9IG5ldyBEYXRlKCAoZmlsdGVyX2RhdGUpLnNldFNlY29uZHMoMCkgKTtcbiAgICB9XG5cbiAgICBpZiggZXZlbnQgPT09ICczMC1kYXlzJyApe1xuICAgICAgZmlsdGVyX2RhdGUgPSBuZXcgRGF0ZSggKG5ldyBEYXRlKG5vdykpLnNldERhdGUoIG5vdy5nZXREYXRlKCkgLSAzMCApICk7XG4gICAgICBmaWx0ZXJfZGF0ZSA9IG5ldyBEYXRlKCAoZmlsdGVyX2RhdGUpLnNldFNlY29uZHMoMCkgKTtcbiAgICB9XG5cbiAgICBpZiggZXZlbnQgPT09ICdjdXJyZW50LW1vbnRoJyApe1xuICAgICAgZmlsdGVyX2RhdGUgPSBuZXcgRGF0ZShub3cuZ2V0RnVsbFllYXIoKSwgbm93LmdldE1vbnRoKCksIDEpO1xuICAgIH1cblxuICAgIGlmKCBldmVudCA9PT0gJ2N1cnJlbnQteWVhcicgKXtcbiAgICAgIGZpbHRlcl9kYXRlID0gbmV3IERhdGUobm93LmdldEZ1bGxZZWFyKCksIDAsIDEpO1xuICAgIH1cblxuICAgIGlmKGZpbHRlcl9kYXRlKXsgICBcbiAgICAgIFxuICAgICAgdGhpcy5yZXN1bHQgPSB7XG4gICAgICAgIHN0YXJ0OiBmaWx0ZXJfZGF0ZSxcbiAgICAgICAgc3RvcDogbm93XG4gICAgICB9IGFzIElSZXN1bHREYXRlVGltZTtcbiAgICAgIHRoaXMub25DaGFuZ2UuZW1pdCh0aGlzLnJlc3VsdCk7XG4gICAgICB0aGlzLmlzVmFsaWQgPSB0cnVlO1xuICAgIH1lbHNle1xuICAgICAgdGhpcy5yZXN1bHQgPSB7fSBhcyBJUmVzdWx0RGF0ZVRpbWU7XG4gICAgICB0aGlzLm9uQ2hhbmdlLmVtaXQodGhpcy5yZXN1bHQpO1xuICAgICAgdGhpcy5pc1ZhbGlkID0gZmFsc2U7XG4gICAgfVxuXG4gIH1cblxuICBvbkNoYW5nZVN0YXJ0RGF0ZVRpbWUoZXZlbnQ6IGFueSl7XG4gICAgdGhpcy5pc1ZhbGlkID0gZmFsc2U7XG4gICAgaWYoIHRoaXMucmVzdWx0ICYmIHRoaXMucmVzdWx0LnN0YXJ0ICYmIHRoaXMucmVzdWx0LnN0b3AgKXtcbiAgICAgIHRoaXMub25DaGFuZ2UuZW1pdCh0aGlzLnJlc3VsdCk7XG4gICAgICB0aGlzLmlzVmFsaWQgPSB0cnVlO1xuICAgIH1lbHNle1xuICAgICAgdGhpcy5yZXN1bHQgPSB7fSBhcyBJUmVzdWx0RGF0ZVRpbWU7XG4gICAgICB0aGlzLm9uQ2hhbmdlLmVtaXQodGhpcy5yZXN1bHQpO1xuICAgIH1cbiAgfVxuXG4gIG9uQ2hhbmdlU3RvcERhdGVUaW1lKGV2ZW50OiBhbnkpe1xuICAgIHRoaXMuaXNWYWxpZCA9IGZhbHNlO1xuICAgIGlmKCB0aGlzLnJlc3VsdCAmJiB0aGlzLnJlc3VsdC5zdGFydCAmJiB0aGlzLnJlc3VsdC5zdG9wICl7XG4gICAgICB0aGlzLm9uQ2hhbmdlLmVtaXQodGhpcy5yZXN1bHQpO1xuICAgICAgdGhpcy5pc1ZhbGlkID0gdHJ1ZTtcbiAgICB9ZWxzZXtcbiAgICAgIHRoaXMucmVzdWx0ID0ge30gYXMgSVJlc3VsdERhdGVUaW1lO1xuICAgICAgdGhpcy5vbkNoYW5nZS5lbWl0KHRoaXMucmVzdWx0KTtcbiAgICB9XG4gIH1cblxuICB0b2dnbGUoKXtcbiAgICBjb25zdCBtb2RlID0gKHRoaXMubW9kZSA9PT0gJ3NlbGVjdCcpID8gJ2RhdGVwaWNrZXJzJyA6ICdzZWxlY3QnO1xuICAgIGlmKCBtb2RlID09PSAnc2VsZWN0JyApe1xuICAgICAgdGhpcy5pc1ZhbGlkID0gZmFsc2U7XG4gICAgICB0aGlzLnJlc3VsdCA9IHt9IGFzIElSZXN1bHREYXRlVGltZTtcbiAgICAgIHRoaXMub25DaGFuZ2UuZW1pdCh0aGlzLnJlc3VsdCk7XG4gICAgfVxuICAgIHRoaXMubW9kZSA9IG1vZGU7XG4gIH1cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAgaW5uZXJWYWx1ZTogYW55IHwgdW5kZWZpbmVkO1xuICAvL1BsYWNlaG9sZGVycyBmb3IgdGhlIGNhbGxiYWNrcyB3aGljaCBhcmUgbGF0ZXIgcHJvdmlkZXNkXG4gIC8vYnkgdGhlIENvbnRyb2wgVmFsdWUgQWNjZXNzb3JcbiAgcHJpdmF0ZSBvblRvdWNoZWRDYWxsYmFjazogKCkgPT4gdm9pZCA9IG5vb3A7XG4gIHByaXZhdGUgb25DaGFuZ2VDYWxsYmFjazogKF86IGFueSkgPT4gdm9pZCA9IG5vb3A7XG5cbiAgLy9nZXQgYWNjZXNzb3JcbiAgZ2V0IHZhbHVlKCk6IGFueSB7XG4gICAgICByZXR1cm4gdGhpcy5pbm5lclZhbHVlO1xuICB9O1xuXG4gIC8vc2V0IGFjY2Vzc29yIGluY2x1ZGluZyBjYWxsIHRoZSBvbmNoYW5nZSBjYWxsYmFja1xuICBzZXQgdmFsdWUodjogYW55KSB7XG4gICAgaWYgKHYgIT09IHRoaXMuaW5uZXJWYWx1ZSkge1xuICAgICAgdGhpcy5pbm5lclZhbHVlID0gdjsgICAgICBcbiAgICAgIHRoaXMub25DaGFuZ2VDYWxsYmFjayh2KTtcbiAgICB9XG4gIH1cblxuICAvL1NldCB0b3VjaGVkIG9uIGJsdXJcbiAgb25CbHVyKCkge1xuICAgIHRoaXMub25Ub3VjaGVkQ2FsbGJhY2soKTtcbiAgfVxuXG4gIC8vRnJvbSBDb250cm9sVmFsdWVBY2Nlc3NvciBpbnRlcmZhY2VcbiAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgaWYgKHZhbHVlICE9PSB0aGlzLmlubmVyVmFsdWUpIHtcbiAgICAgIHRoaXMuaW5uZXJWYWx1ZSA9IHZhbHVlO1xuICAgICAgLy90aGlzLnRvU2V0RGVmYXVsdCh2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgLy9Gcm9tIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZVxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpIHtcbiAgICB0aGlzLm9uQ2hhbmdlQ2FsbGJhY2sgPSBmbjtcbiAgfVxuXG4gIC8vRnJvbSBDb250cm9sVmFsdWVBY2Nlc3NvciBpbnRlcmZhY2VcbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSkge1xuICAgIHRoaXMub25Ub3VjaGVkQ2FsbGJhY2sgPSBmbjtcbiAgfVxuXG4gIHB1YmxpYyB2YWxpZGF0ZShjOiBGb3JtQ29udHJvbCk6IGFueSB7XG4gICAgaWYoIGMgJiYgKCB0eXBlb2YgdGhpcy5yZXF1aXJlZCAhPT0gJ3VuZGVmaW5lZCcgKSApe1xuICAgICAgdGhpcy51c2VfdmFsaWRhdGlvbl9yZXF1aXJlZCA9IHRydWU7XG4gICAgICByZXR1cm4gKHRoaXMuY2hlY2tfaXNfdmFsaWQoKSkgPyBudWxsIDogJ3JlcXVpcmVkJztcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjaGVja19pc192YWxpZCgpOiBib29sZWFue1xuICAgIGlmKCB0aGlzLnJlc3VsdCAmJiB0aGlzLnJlc3VsdC5zdGFydCAmJiB0aGlzLnJlc3VsdC5zdG9wICl7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbn1cbiIsIjx0YWJsZSBjbGFzcz1cInRjbG91ZC11aS1maWx0ZXJzLXJhbmdlLWRhdGUgYXJlYS1yYW5nZS1kYXRlXCI+XHJcbiAgICA8dHI+XHJcblxyXG4gICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIm1vZGUgPT09ICdzZWxlY3QnXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGVzY3JpcHRpb24tcGVyaW9kXCI+UGVyw61vZG88L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxzZWxlY3QgbmFtZT1cInBlcmlvZG9cIiBjbGFzcz1cImZvcm0tY29udHJvbCB0Yy1mb3JtLWNvbnRyb2xcIiAoY2hhbmdlKT1cIm9uQ2hhbmdlT3B0aW9uc0RhdGVUaW1lKCRldmVudC50YXJnZXQpXCIgWyhuZ01vZGVsKV09XCJkZWZhdWx0VmFsdWVQZXJpb2RTdGFydFN0b3BcIiAgPlxyXG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJcIj48L29wdGlvbj4gXHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBvcHRpb25zX2RhdGVfdGltZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIFt2YWx1ZV09XCJpdGVtLnZhbHVlXCI+e3sgaXRlbS5kZXNjcmlwdGlvbiB9fTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwibW9kZSA9PT0gJ2RhdGVwaWNrZXJzJ1wiPlxyXG5cclxuICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cImFyZWEtcmFuZ2UtZGF0ZXBpY2tlcnNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZXNjcmlwdGlvbi1zdGFydFwiPnt7IGRlc2NyaXB0aW9uU3RhcnQgfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0Y2xvdWQtdWktZGF0ZXBpY2tlci10aW1lIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNfaW5wdXRfc3RhcnQgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1VUQ109XCJVVENcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwicmVzdWx0LnN0YXJ0XCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cImlucHV0X3N0YXJ0XCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGV2ZW50Q2hhbmdlKT1cIm9uQ2hhbmdlU3RhcnREYXRlVGltZShfaW5wdXRfc3RhcnQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RjbG91ZC11aS1kYXRlcGlja2VyLXRpbWU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZXNjcmlwdGlvbi1zdG9wXCI+e3sgZGVzY3JpcHRpb25TdG9wIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGNsb3VkLXVpLWRhdGVwaWNrZXItdGltZSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjX2lucHV0X3N0b3BcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbVVRDXT1cIlVUQ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJyZXN1bHQuc3RvcFwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJpbnB1dF9zdG9wXCIgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGV2ZW50Q2hhbmdlKT1cIm9uQ2hhbmdlU3RvcERhdGVUaW1lKF9pbnB1dF9zdG9wKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90Y2xvdWQtdWktZGF0ZXBpY2tlci10aW1lPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICA8L3RhYmxlPlxyXG5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC90ZD5cclxuXHJcbiAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuLW1vZGUtcmFuZ2UtZGF0ZVwiIFtjbGFzcy5hY3RpdmVdPVwibW9kZSA9PT0gJ3NlbGVjdCdcIiAoY2xpY2spPVwidG9nZ2xlKClcIiB0eXBlPVwiYnV0dG9uXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJtb2RlID09PSAnc2VsZWN0J1wiIGNsYXNzPVwiZmFyIGZhLWNhbGVuZGFyLWFsdFwiIHRpdGxlPVwiQWx0ZXJhciBwYXJhIGNhbGVuZMOhcmlvXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJtb2RlICE9PSAnc2VsZWN0J1wiIGNsYXNzPVwiZmFzIGZhLWNhbGVuZGFyLXdlZWtcIiB0aXRsZT1cIlNlbGVjaW9uYXIgcGVyw61vZG9cIj48L2k+XHJcblxyXG4gICAgICAgICAgICAgICAgPCEtLSA8ZGl2ICpuZ0lmPVwibW9kZSA9PT0gJ3NlbGVjdCdcIj5FeGliaXI8YnI+Q2FsZW5kw6FyaW88L2Rpdj4gLS0+XHJcbiAgICAgICAgICAgICAgICA8IS0tIDxkaXYgKm5nSWY9XCJtb2RlICE9PSAnc2VsZWN0J1wiPkV4aWJpcjxicj5QZXLDrW9kbzwvZGl2PiAtLT5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC90ZD5cclxuXHJcbiAgICA8L3RyPlxyXG48L3RhYmxlPiJdfQ==
|
|
206
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFuZ2UtZGF0ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90Y2xvdWQtdWkvc3JjL2xpYi9fbW9kdWxlcy90Y2xvdWQtdWktZmlsdGVycy9jb21wb25lbnRzL3JhbmdlLWRhdGUvcmFuZ2UtZGF0ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90Y2xvdWQtdWkvc3JjL2xpYi9fbW9kdWxlcy90Y2xvdWQtdWktZmlsdGVycy9jb21wb25lbnRzL3JhbmdlLWRhdGUvcmFuZ2UtZGF0ZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRixPQUFPLEVBQWUsYUFBYSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7O0FBRS9FLE1BQU8sdUJBQXVCLEdBQVE7SUFDcEMsT0FBTyxFQUFFLGFBQWE7SUFDdEIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQywwQkFBMEIsQ0FBQztJQUN6RCxLQUFLLEVBQUUsSUFBSTtDQUNaLENBQUE7QUFFRCxNQUFNLG1DQUFtQyxHQUFRO0lBQy9DLE9BQU8sRUFBRSxpQkFBaUI7SUFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQywwQkFBMEIsQ0FBQztJQUN6RCxLQUFLLEVBQUUsSUFBSTtDQUNaLENBQUM7QUFFRixNQUFNLElBQUksR0FBRyxHQUFHLEVBQUU7QUFDbEIsQ0FBQyxDQUFDO0FBY0YsTUFBTSxPQUFPLDBCQUEwQjtJQW1CckM7UUFqQkEsV0FBTSxHQUFHLEVBQXFCLENBQUM7UUFFL0Isc0JBQWlCLEdBQVEsRUFBRSxDQUFDO1FBQzVCLDRCQUF1QixHQUFZLEtBQUss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SUFBSSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUM7U0FDcEQ7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxjQUFjO1FBQ1osSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFO1lBQ3hELE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7O3dIQWxQVSwwQkFBMEI7NEdBQTFCLDBCQUEwQixnUEFGMUIsQ0FBQyxtQ0FBbUMsRUFBRSx1QkFBdUIsQ0FBQywwQkM1QjNFLHluRkFxRFE7NEZEdkJLLDBCQUEwQjtrQkFOdEMsU0FBUzsrQkFDRSxZQUFZLGFBR1gsQ0FBQyxtQ0FBbUMsRUFBRSx1QkFBdUIsQ0FBQzswRUFTL0QsUUFBUTtzQkFBakIsTUFBTTtnQkFFRSwyQkFBMkI7c0JBQW5DLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFFRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIGZvcndhcmRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIE5HX1ZBTElEQVRPUlMsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5cclxuY29uc3QgIENVU1RPTV9JTlBVVF9WQUxJREFUT1JTOiBhbnkgPSB7IFxyXG4gIHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsIFxyXG4gIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFRDbG91ZFVpUmFuZ2VEYXRlQ29tcG9uZW50KSxcclxuICBtdWx0aTogdHJ1ZVxyXG59XHJcblxyXG5jb25zdCBDVVNUT01fSU5QVVRfQ09OVFJPTF9WQUxVRV9BQ0NFU1NPUjogYW55ID0ge1xyXG4gIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFRDbG91ZFVpUmFuZ2VEYXRlQ29tcG9uZW50KSxcclxuICBtdWx0aTogdHJ1ZVxyXG59O1xyXG5cclxuY29uc3Qgbm9vcCA9ICgpID0+IHtcclxufTtcclxuXHJcblxyXG5pbnRlcmZhY2UgSVJlc3VsdERhdGVUaW1le1xyXG4gIHN0YXJ0OiBhbnk7XHJcbiAgc3RvcDogYW55O1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3JhbmdlLWRhdGUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9yYW5nZS1kYXRlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9yYW5nZS1kYXRlLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgcHJvdmlkZXJzOiBbQ1VTVE9NX0lOUFVUX0NPTlRST0xfVkFMVUVfQUNDRVNTT1IsIENVU1RPTV9JTlBVVF9WQUxJREFUT1JTXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgVENsb3VkVWlSYW5nZURhdGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICByZXN1bHQgPSB7fSBhcyBJUmVzdWx0RGF0ZVRpbWU7XHJcblxyXG4gIG9wdGlvbnNfZGF0ZV90aW1lOiBhbnkgPSBbXTtcclxuICB1c2VfdmFsaWRhdGlvbl9yZXF1aXJlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBAT3V0cHV0KCkgb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPElSZXN1bHREYXRlVGltZT4oKTtcclxuXHJcbiAgQElucHV0KCkgZGVmYXVsdFZhbHVlUGVyaW9kU3RhcnRTdG9wOiBzdHJpbmcgPSAnJztcclxuICBASW5wdXQoKSByZXF1aXJlZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG5cclxuICBASW5wdXQoKSBkZXNjcmlwdGlvblN0YXJ0OiBzdHJpbmcgPSAnJztcclxuICBASW5wdXQoKSBkZXNjcmlwdGlvblN0b3A6IHN0cmluZyA9ICcnO1xyXG5cclxuICBtb2RlOiBzdHJpbmcgPSAnc2VsZWN0JztcclxuXHJcbiAgaXNWYWxpZCA9IGZhbHNlO1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuc2V0T3B0aW9uc0RhdGVUaW1lKCk7XHJcbiAgfVxyXG5cclxuICBzZXRPcHRpb25zRGF0ZVRpbWUoKXtcclxuICAgIHRoaXMub3B0aW9uc19kYXRlX3RpbWUgPSBbXHJcbiAgICAgIHt2YWx1ZTonMS1sYXN0LXRpbWUnLCBkZXNjcmlwdGlvbjogJ8OabHRpbWEgMSBob3JhJ30sXHJcbiAgICAgIHt2YWx1ZTonMy1sYXN0LXRpbWUnLCBkZXNjcmlwdGlvbjogJ8OabHRpbWFzIDMgaG9yYXMnfSxcclxuICAgICAge3ZhbHVlOicyNC1sYXN0LXRpbWUnLCBkZXNjcmlwdGlvbjogJ8OabHRpbWFzIDI0IGhvcmFzJ30sXHJcblxyXG4gICAgICB7dmFsdWU6JzctZGF5cycsIGRlc2NyaXB0aW9uOiAnw5psdGltb3MgNyBkaWFzJ30sXHJcbiAgICAgIHt2YWx1ZTonMTUtZGF5cycsIGRlc2NyaXB0aW9uOiAnw5psdGltb3MgMTUgZGlhcyd9LFxyXG4gICAgICB7dmFsdWU6JzMwLWRheXMnLCBkZXNjcmlwdGlvbjogJ8OabHRpbW9zIDMwIGRpYXMnfSxcclxuICAgICAge3ZhbHVlOidjdXJyZW50LW1vbnRoJywgZGVzY3JpcHRpb246ICdNw6pzIGF0dWFsJ30sXHJcbiAgICAgIHt2YWx1ZTonY3VycmVudC15ZWFyJywgZGVzY3JpcHRpb246ICdBbm8gYXR1YWwnfVxyXG4gICAgXVxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIGlmKCB0aGlzLmRlZmF1bHRWYWx1ZVBlcmlvZFN0YXJ0U3RvcCAhPT0gJycgKXtcclxuICAgICAgICB0aGlzLm9uQ2hhbmdlT3B0aW9uc0RhdGVUaW1lKCB0aGlzLmRlZmF1bHRWYWx1ZVBlcmlvZFN0YXJ0U3RvcCApO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIFxyXG4gIH1cclxuXHJcbiAgb25DaGFuZ2VPcHRpb25zRGF0ZVRpbWUoZXZlbnQ6IGFueSl7XHJcbiAgICB0aGlzLmlzVmFsaWQgPSBmYWxzZTtcclxuICAgIC8vIHRoaXMuZGVzY3JpcHRpb25fb3B0aW9uc19kYXRlX3RpbWUgPSAnJztcclxuICAgIC8vIHRoaXMudmFsdWVfb3B0aW9uc19kYXRlX3RpbWUgPSAnJztcclxuICAgIGV2ZW50ID0gKGV2ZW50LnZhbHVlKSA/IGV2ZW50LnZhbHVlIDogZXZlbnQ7XHJcblxyXG4gICAgbGV0IG5vdyA9IG5ldyBEYXRlKCk7XHJcbiAgICBsZXQgY3VycmVudF9kYXRlID0gbmV3IERhdGUoKTtcclxuICAgIGxldCBmaWx0ZXJfZGF0ZTogYW55ID0gdW5kZWZpbmVkO1xyXG5cclxuXHJcbiAgICBpZiggZXZlbnQgPT09ICcxLWxhc3QtdGltZScgKXtcclxuICAgICAgZmlsdGVyX2RhdGUgPSBuZXcgRGF0ZShjdXJyZW50X2RhdGUuZ2V0VGltZSgpIC0gMSAqIDYwICogNjAgKiAxMDAwKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiggZXZlbnQgPT09ICczLWxhc3QtdGltZScgKXtcclxuICAgICAgZmlsdGVyX2RhdGUgPSBuZXcgRGF0ZShjdXJyZW50X2RhdGUuZ2V0VGltZSgpIC0gMyAqIDYwICogNjAgKiAxMDAwKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiggZXZlbnQgPT09ICcyNC1sYXN0LXRpbWUnICl7XHJcbiAgICAgIGZpbHRlcl9kYXRlID0gbmV3IERhdGUoY3VycmVudF9kYXRlLmdldFRpbWUoKSAtIDI0ICogNjAgKiA2MCAqIDEwMDApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmKCBldmVudCA9PT0gJzctZGF5cycgKXtcclxuICAgICAgZmlsdGVyX2RhdGUgPSBuZXcgRGF0ZSggKG5ldyBEYXRlKGN1cnJlbnRfZGF0ZSkpLnNldERhdGUoIG5vdy5nZXREYXRlKCkgLSA3ICkgKTsgIFxyXG4gICAgICBmaWx0ZXJfZGF0ZSA9IG5ldyBEYXRlKCAoZmlsdGVyX2RhdGUpLnNldFNlY29uZHMoMCkgKTsgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBpZiggZXZlbnQgPT09ICcxNS1kYXlzJyApe1xyXG4gICAgICBmaWx0ZXJfZGF0ZSA9IG5ldyBEYXRlKCAobmV3IERhdGUoY3VycmVudF9kYXRlKSkuc2V0RGF0ZSggbm93LmdldERhdGUoKSAtIDE1ICkgKTtcclxuICAgICAgZmlsdGVyX2RhdGUgPSBuZXcgRGF0ZSggKGZpbHRlcl9kYXRlKS5zZXRTZWNvbmRzKDApICk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYoIGV2ZW50ID09PSAnMzAtZGF5cycgKXtcclxuICAgICAgZmlsdGVyX2RhdGUgPSBuZXcgRGF0ZSggKG5ldyBEYXRlKGN1cnJlbnRfZGF0ZSkpLnNldERhdGUoIG5vdy5nZXREYXRlKCkgLSAzMCApICk7XHJcbiAgICAgIGZpbHRlcl9kYXRlID0gbmV3IERhdGUoIChmaWx0ZXJfZGF0ZSkuc2V0U2Vjb25kcygwKSApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmKCBldmVudCA9PT0gJ2N1cnJlbnQtbW9udGgnICl7XHJcbiAgICAgIGZpbHRlcl9kYXRlID0gbmV3IERhdGUobm93LmdldEZ1bGxZZWFyKCksIG5vdy5nZXRNb250aCgpLCAxKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiggZXZlbnQgPT09ICdjdXJyZW50LXllYXInICl7XHJcbiAgICAgIGZpbHRlcl9kYXRlID0gbmV3IERhdGUobm93LmdldEZ1bGxZZWFyKCksIDAsIDEpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmKGZpbHRlcl9kYXRlKXsgICAgICAgIFxyXG4gICAgICB0aGlzLnJlc3VsdCA9IHtcclxuICAgICAgICBzdGFydDogdGhpcy5nZXREYXRlVVRDKGZpbHRlcl9kYXRlKSxcclxuICAgICAgICBzdG9wOiB0aGlzLmdldERhdGVVVEMobm93KVxyXG4gICAgICB9IGFzIElSZXN1bHREYXRlVGltZTtcclxuXHJcbiAgICAgIHRoaXMub25DaGFuZ2UuZW1pdCh0aGlzLnJlc3VsdCk7XHJcbiAgICAgIHRoaXMuaXNWYWxpZCA9IHRydWU7XHJcbiAgICB9ZWxzZXtcclxuICAgICAgIFxyXG4gICAgICB0aGlzLnJlc3VsdCA9IHt9IGFzIElSZXN1bHREYXRlVGltZTtcclxuICAgICAgdGhpcy5vbkNoYW5nZS5lbWl0KHRoaXMucmVzdWx0KTtcclxuICAgICAgdGhpcy5pc1ZhbGlkID0gZmFsc2U7XHJcbiAgICAgIFxyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIGdldERhdGVVVEMoZHQ6IGFueSl7XHJcbiAgICBjb25zdCBhbm8gPSBkdC5nZXRGdWxsWWVhcigpO1xyXG4gICAgY29uc3QgbWVzID0gZHQuZ2V0TW9udGgoKTtcclxuICAgIGNvbnN0IGRpYSA9IGR0LmdldERhdGUoKTtcclxuICAgIGNvbnN0IGhvcmFzID0gZHQuZ2V0SG91cnMoKTtcclxuICAgIGNvbnN0IG1pbnV0b3MgPSBkdC5nZXRNaW51dGVzKCk7XHJcbiAgICBjb25zdCBzZWd1bmRvcyA9IGR0LmdldFNlY29uZHMoKTtcclxuICAgIHJldHVybiBuZXcgRGF0ZShEYXRlLlVUQyhhbm8sIG1lcywgZGlhLCBob3JhcywgbWludXRvcywgc2VndW5kb3MpKTtcclxuICB9XHJcblxyXG4gIG9uQ2hhbmdlU3RhcnREYXRlVGltZShldmVudDogYW55KXtcclxuICAgIHRoaXMuaXNWYWxpZCA9IGZhbHNlO1xyXG4gICAgaWYoIHRoaXMucmVzdWx0ICYmIHRoaXMucmVzdWx0LnN0YXJ0KXtcclxuICAgICAgdGhpcy5yZXN1bHQuc3RhcnQgPSBldmVudC52YWx1ZTtcclxuICAgICAgdGhpcy5vbkNoYW5nZS5lbWl0KHRoaXMucmVzdWx0KTtcclxuICAgICAgdGhpcy5pc1ZhbGlkID0gdHJ1ZTtcclxuICAgIH1lbHNle1xyXG4gICAgICB0aGlzLnJlc3VsdCA9IHt9IGFzIElSZXN1bHREYXRlVGltZTtcclxuICAgICAgdGhpcy5vbkNoYW5nZS5lbWl0KHRoaXMucmVzdWx0KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uQ2hhbmdlU3RvcERhdGVUaW1lKGV2ZW50OiBhbnkpe1xyXG4gICAgdGhpcy5pc1ZhbGlkID0gZmFsc2U7XHJcbiAgICBpZiggdGhpcy5yZXN1bHQgJiYgdGhpcy5yZXN1bHQuc3RvcCApe1xyXG4gICAgICB0aGlzLnJlc3VsdC5zdGFydCA9IGV2ZW50LnZhbHVlO1xyXG4gICAgICB0aGlzLm9uQ2hhbmdlLmVtaXQodGhpcy5yZXN1bHQpO1xyXG4gICAgICB0aGlzLmlzVmFsaWQgPSB0cnVlO1xyXG4gICAgfWVsc2V7XHJcbiAgICAgIHRoaXMucmVzdWx0ID0ge30gYXMgSVJlc3VsdERhdGVUaW1lO1xyXG4gICAgICB0aGlzLm9uQ2hhbmdlLmVtaXQodGhpcy5yZXN1bHQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdG9nZ2xlKCl7XHJcbiAgICBjb25zdCBtb2RlID0gKCBgJHt0aGlzLm1vZGV9YCA9PT0gJ3NlbGVjdCcgKSA/ICdkYXRlcGlja2VycycgOiAnc2VsZWN0JztcclxuICAgIHRoaXMuZGVmYXVsdFZhbHVlUGVyaW9kU3RhcnRTdG9wID0gJyc7XHJcbiAgICB0aGlzLmlzVmFsaWQgPSBmYWxzZTtcclxuICAgIHRoaXMucmVzdWx0ID0ge30gYXMgSVJlc3VsdERhdGVUaW1lO1xyXG4gICAgdGhpcy5tb2RlID0gbW9kZTtcclxuICAgIHRoaXMub25DaGFuZ2UuZW1pdCh0aGlzLnJlc3VsdCk7XHJcbiAgfVxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG5cclxuXHJcblxyXG4gIGlubmVyVmFsdWU6IGFueSB8IHVuZGVmaW5lZDtcclxuICAvL1BsYWNlaG9sZGVycyBmb3IgdGhlIGNhbGxiYWNrcyB3aGljaCBhcmUgbGF0ZXIgcHJvdmlkZXNkXHJcbiAgLy9ieSB0aGUgQ29udHJvbCBWYWx1ZSBBY2Nlc3NvclxyXG4gIHByaXZhdGUgb25Ub3VjaGVkQ2FsbGJhY2s6ICgpID0+IHZvaWQgPSBub29wO1xyXG4gIHByaXZhdGUgb25DaGFuZ2VDYWxsYmFjazogKF86IGFueSkgPT4gdm9pZCA9IG5vb3A7XHJcblxyXG4gIC8vZ2V0IGFjY2Vzc29yXHJcbiAgZ2V0IHZhbHVlKCk6IGFueSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmlubmVyVmFsdWU7XHJcbiAgfTtcclxuXHJcbiAgLy9zZXQgYWNjZXNzb3IgaW5jbHVkaW5nIGNhbGwgdGhlIG9uY2hhbmdlIGNhbGxiYWNrXHJcbiAgc2V0IHZhbHVlKHY6IGFueSkge1xyXG4gICAgaWYgKHYgIT09IHRoaXMuaW5uZXJWYWx1ZSkge1xyXG4gICAgICB0aGlzLmlubmVyVmFsdWUgPSB2OyAgICAgIFxyXG4gICAgICB0aGlzLm9uQ2hhbmdlQ2FsbGJhY2sodik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvL1NldCB0b3VjaGVkIG9uIGJsdXJcclxuICBvbkJsdXIoKSB7XHJcbiAgICB0aGlzLm9uVG91Y2hlZENhbGxiYWNrKCk7XHJcbiAgfVxyXG5cclxuICAvL0Zyb20gQ29udHJvbFZhbHVlQWNjZXNzb3IgaW50ZXJmYWNlXHJcbiAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KSB7XHJcbiAgICBpZiAodmFsdWUgIT09IHRoaXMuaW5uZXJWYWx1ZSkge1xyXG4gICAgICB0aGlzLmlubmVyVmFsdWUgPSB2YWx1ZTtcclxuICAgICAgLy90aGlzLnRvU2V0RGVmYXVsdCh2YWx1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvL0Zyb20gQ29udHJvbFZhbHVlQWNjZXNzb3IgaW50ZXJmYWNlXHJcbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KSB7XHJcbiAgICB0aGlzLm9uQ2hhbmdlQ2FsbGJhY2sgPSBmbjtcclxuICB9XHJcblxyXG4gIC8vRnJvbSBDb250cm9sVmFsdWVBY2Nlc3NvciBpbnRlcmZhY2VcclxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KSB7XHJcbiAgICB0aGlzLm9uVG91Y2hlZENhbGxiYWNrID0gZm47XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdmFsaWRhdGUoYzogRm9ybUNvbnRyb2wpOiBhbnkge1xyXG4gICAgaWYoIGMgJiYgKCB0eXBlb2YgdGhpcy5yZXF1aXJlZCAhPT0gJ3VuZGVmaW5lZCcgKSApe1xyXG4gICAgICB0aGlzLnVzZV92YWxpZGF0aW9uX3JlcXVpcmVkID0gdHJ1ZTtcclxuICAgICAgcmV0dXJuICh0aGlzLmNoZWNrX2lzX3ZhbGlkKCkpID8gbnVsbCA6ICdyZXF1aXJlZCc7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIGNoZWNrX2lzX3ZhbGlkKCk6IGJvb2xlYW57XHJcbiAgICBpZiggdGhpcy5yZXN1bHQgJiYgdGhpcy5yZXN1bHQuc3RhcnQgJiYgdGhpcy5yZXN1bHQuc3RvcCApe1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG59XHJcbiIsIjx0YWJsZSBjbGFzcz1cInRjbG91ZC11aS1maWx0ZXJzLXJhbmdlLWRhdGUgYXJlYS1yYW5nZS1kYXRlXCI+XHJcbiAgICA8dHI+XHJcblxyXG4gICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIm1vZGUgPT09ICdzZWxlY3QnXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGVzY3JpcHRpb24tcGVyaW9kXCI+UGVyw61vZG88L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxzZWxlY3QgbmFtZT1cInBlcmlvZG9cIiBjbGFzcz1cImZvcm0tY29udHJvbCB0Yy1mb3JtLWNvbnRyb2xcIiAoY2hhbmdlKT1cIm9uQ2hhbmdlT3B0aW9uc0RhdGVUaW1lKCRldmVudC50YXJnZXQpXCIgWyhuZ01vZGVsKV09XCJkZWZhdWx0VmFsdWVQZXJpb2RTdGFydFN0b3BcIiAgPlxyXG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJcIj48L29wdGlvbj4gXHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBvcHRpb25zX2RhdGVfdGltZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIFt2YWx1ZV09XCJpdGVtLnZhbHVlXCI+e3sgaXRlbS5kZXNjcmlwdGlvbiB9fTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwibW9kZSA9PT0gJ2RhdGVwaWNrZXJzJ1wiPlxyXG5cclxuICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cImFyZWEtcmFuZ2UtZGF0ZXBpY2tlcnNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZXNjcmlwdGlvbi1zdGFydFwiPnt7IGRlc2NyaXB0aW9uU3RhcnQgfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0Y2xvdWQtdWktZGF0ZXBpY2tlci10aW1lIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNfaW5wdXRfc3RhcnQgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJyZXN1bHQuc3RhcnRcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwiaW5wdXRfc3RhcnRcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXZlbnRDaGFuZ2UpPVwib25DaGFuZ2VTdGFydERhdGVUaW1lKF9pbnB1dF9zdGFydClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGNsb3VkLXVpLWRhdGVwaWNrZXItdGltZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRlc2NyaXB0aW9uLXN0b3BcIj57eyBkZXNjcmlwdGlvblN0b3AgfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0Y2xvdWQtdWktZGF0ZXBpY2tlci10aW1lIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNfaW5wdXRfc3RvcFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwicmVzdWx0LnN0b3BcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwiaW5wdXRfc3RvcFwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChldmVudENoYW5nZSk9XCJvbkNoYW5nZVN0b3BEYXRlVGltZShfaW5wdXRfc3RvcClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGNsb3VkLXVpLWRhdGVwaWNrZXItdGltZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgPC90YWJsZT5cclxuXHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvdGQ+XHJcblxyXG4gICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0bi1tb2RlLXJhbmdlLWRhdGVcIiBbY2xhc3MuYWN0aXZlXT1cIm1vZGUgPT09ICdzZWxlY3QnXCIgKGNsaWNrKT1cInRvZ2dsZSgpXCIgdHlwZT1cImJ1dHRvblwiPlxyXG5cclxuICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwibW9kZSA9PT0gJ3NlbGVjdCdcIiBjbGFzcz1cImZhciBmYS1jYWxlbmRhci1hbHRcIiB0aXRsZT1cIkFsdGVyYXIgcGFyYSBjYWxlbmTDoXJpb1wiPjwvaT5cclxuICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwibW9kZSAhPT0gJ3NlbGVjdCdcIiBjbGFzcz1cImZhcyBmYS1jYWxlbmRhci13ZWVrXCIgdGl0bGU9XCJTZWxlY2lvbmFyIHBlcsOtb2RvXCI+PC9pPlxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0gPGRpdiAqbmdJZj1cIm1vZGUgPT09ICdzZWxlY3QnXCI+RXhpYmlyPGJyPkNhbGVuZMOhcmlvPC9kaXY+IC0tPlxyXG4gICAgICAgICAgICAgICAgPCEtLSA8ZGl2ICpuZ0lmPVwibW9kZSAhPT0gJ3NlbGVjdCdcIj5FeGliaXI8YnI+UGVyw61vZG88L2Rpdj4gLS0+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvdGQ+XHJcblxyXG4gICAgPC90cj5cclxuPC90YWJsZT4iXX0=
|