igniteui-angular 17.2.22 → 17.2.23
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/esm2022/lib/calendar/calendar.component.mjs +3 -10
- package/esm2022/lib/calendar/days-view/days-view.component.mjs +3 -3
- package/esm2022/lib/combo/combo.common.mjs +17 -7
- package/esm2022/lib/combo/combo.component.mjs +3 -3
- package/esm2022/lib/date-common/picker-base.directive.mjs +12 -1
- package/esm2022/lib/date-picker/date-picker.component.mjs +10 -7
- package/esm2022/lib/date-range-picker/date-range-picker.component.mjs +9 -2
- package/esm2022/lib/grids/filtering/base/grid-filtering-row.component.mjs +7 -7
- package/esm2022/lib/slider/slider.component.mjs +4 -38
- package/esm2022/lib/slider/thumb/thumb-slider.component.mjs +55 -2
- package/esm2022/lib/time-picker/time-picker.component.mjs +4 -1
- package/fesm2022/igniteui-angular.mjs +116 -70
- package/fesm2022/igniteui-angular.mjs.map +1 -1
- package/lib/combo/combo.common.d.ts +3 -0
- package/lib/core/styles/components/input/_input-group-theme.scss +1 -0
- package/lib/date-common/picker-base.directive.d.ts +6 -0
- package/lib/date-picker/date-picker.component.d.ts +2 -0
- package/lib/date-range-picker/date-range-picker.component.d.ts +2 -0
- package/lib/grids/filtering/base/grid-filtering-row.component.d.ts +1 -1
- package/lib/slider/slider.component.d.ts +0 -16
- package/lib/slider/thumb/thumb-slider.component.d.ts +12 -1
- package/lib/time-picker/time-picker.component.d.ts +1 -0
- package/package.json +1 -1
- package/styles/igniteui-angular-dark.css +1 -1
- package/styles/igniteui-angular.css +1 -1
- package/styles/igniteui-bootstrap-dark.css +1 -1
- package/styles/igniteui-bootstrap-light.css +1 -1
- package/styles/igniteui-dark-green.css +1 -1
- package/styles/igniteui-fluent-dark-excel.css +1 -1
- package/styles/igniteui-fluent-dark-word.css +1 -1
- package/styles/igniteui-fluent-dark.css +1 -1
- package/styles/igniteui-fluent-light-excel.css +1 -1
- package/styles/igniteui-fluent-light-word.css +1 -1
- package/styles/igniteui-fluent-light.css +1 -1
- package/styles/igniteui-indigo-dark.css +1 -1
- package/styles/igniteui-indigo-light.css +1 -1
- package/styles/maps/igniteui-angular-dark.css.map +1 -1
- package/styles/maps/igniteui-angular.css.map +1 -1
- package/styles/maps/igniteui-bootstrap-dark.css.map +1 -1
- package/styles/maps/igniteui-bootstrap-light.css.map +1 -1
- package/styles/maps/igniteui-dark-green.css.map +1 -1
- package/styles/maps/igniteui-fluent-dark-excel.css.map +1 -1
- package/styles/maps/igniteui-fluent-dark-word.css.map +1 -1
- package/styles/maps/igniteui-fluent-dark.css.map +1 -1
- package/styles/maps/igniteui-fluent-light-excel.css.map +1 -1
- package/styles/maps/igniteui-fluent-light-word.css.map +1 -1
- package/styles/maps/igniteui-fluent-light.css.map +1 -1
- package/styles/maps/igniteui-indigo-dark.css.map +1 -1
- package/styles/maps/igniteui-indigo-light.css.map +1 -1
|
@@ -46,24 +46,6 @@ export class IgxSliderComponent {
|
|
|
46
46
|
get labelTo() {
|
|
47
47
|
return this.labelRefs.find(label => label.type === SliderHandle.TO);
|
|
48
48
|
}
|
|
49
|
-
/**
|
|
50
|
-
* @hidden
|
|
51
|
-
*/
|
|
52
|
-
get valuemin() {
|
|
53
|
-
return this.minValue;
|
|
54
|
-
}
|
|
55
|
-
/**
|
|
56
|
-
* @hidden
|
|
57
|
-
*/
|
|
58
|
-
get valuemax() {
|
|
59
|
-
return this.maxValue;
|
|
60
|
-
}
|
|
61
|
-
/**
|
|
62
|
-
* @hidden
|
|
63
|
-
*/
|
|
64
|
-
get readonly() {
|
|
65
|
-
return this.disabled;
|
|
66
|
-
}
|
|
67
49
|
/**
|
|
68
50
|
* @hidden
|
|
69
51
|
*/
|
|
@@ -479,10 +461,6 @@ export class IgxSliderComponent {
|
|
|
479
461
|
this._cdr = _cdr;
|
|
480
462
|
this._ngZone = _ngZone;
|
|
481
463
|
this._dir = _dir;
|
|
482
|
-
/**
|
|
483
|
-
* @hidden
|
|
484
|
-
*/
|
|
485
|
-
this.role = 'slider';
|
|
486
464
|
/**
|
|
487
465
|
* @hidden
|
|
488
466
|
*/
|
|
@@ -1103,7 +1081,7 @@ export class IgxSliderComponent {
|
|
|
1103
1081
|
this.hideSliderIndicators();
|
|
1104
1082
|
}
|
|
1105
1083
|
changeThumbFocusableState(state) {
|
|
1106
|
-
const value = state ? -1 :
|
|
1084
|
+
const value = state ? -1 : 0;
|
|
1107
1085
|
if (this.isRange) {
|
|
1108
1086
|
this.thumbFrom.tabindex = value;
|
|
1109
1087
|
}
|
|
@@ -1176,11 +1154,11 @@ export class IgxSliderComponent {
|
|
|
1176
1154
|
this.valueChange.emit({ oldValue, value: this.value });
|
|
1177
1155
|
}
|
|
1178
1156
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: IgxSliderComponent, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i0.NgZone }, { token: i1.IgxDirectionality }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
1179
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "17.2.4", type: IgxSliderComponent, isStandalone: true, selector: "igx-slider", inputs: { id: "id", thumbLabelVisibilityDuration: "thumbLabelVisibilityDuration", type: "type", labels: "labels", step: "step", disabled: ["disabled", "disabled", booleanAttribute], continuous: ["continuous", "continuous", booleanAttribute], minValue: "minValue", maxValue: "maxValue", lowerBound: "lowerBound", upperBound: "upperBound", value: "value", primaryTicks: "primaryTicks", secondaryTicks: "secondaryTicks", showTicks: ["showTicks", "showTicks", booleanAttribute], primaryTickLabels: ["primaryTickLabels", "primaryTickLabels", booleanAttribute], secondaryTickLabels: ["secondaryTickLabels", "secondaryTickLabels", booleanAttribute], ticksOrientation: "ticksOrientation", tickLabelsOrientation: "tickLabelsOrientation", lowerValue: "lowerValue", upperValue: "upperValue" }, outputs: { valueChange: "valueChange", lowerValueChange: "lowerValueChange", upperValueChange: "upperValueChange", dragFinished: "dragFinished" }, host: { listeners: { "focus": "onFocus()", "pointerdown": "onPointerDown($event)", "pointerup": "onPointerUp($event)" }, properties: { "
|
|
1157
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "17.2.4", type: IgxSliderComponent, isStandalone: true, selector: "igx-slider", inputs: { id: "id", thumbLabelVisibilityDuration: "thumbLabelVisibilityDuration", type: "type", labels: "labels", step: "step", disabled: ["disabled", "disabled", booleanAttribute], continuous: ["continuous", "continuous", booleanAttribute], minValue: "minValue", maxValue: "maxValue", lowerBound: "lowerBound", upperBound: "upperBound", value: "value", primaryTicks: "primaryTicks", secondaryTicks: "secondaryTicks", showTicks: ["showTicks", "showTicks", booleanAttribute], primaryTickLabels: ["primaryTickLabels", "primaryTickLabels", booleanAttribute], secondaryTickLabels: ["secondaryTickLabels", "secondaryTickLabels", booleanAttribute], ticksOrientation: "ticksOrientation", tickLabelsOrientation: "tickLabelsOrientation", lowerValue: "lowerValue", upperValue: "upperValue" }, outputs: { valueChange: "valueChange", lowerValueChange: "lowerValueChange", upperValueChange: "upperValueChange", dragFinished: "dragFinished" }, host: { listeners: { "focus": "onFocus()", "pointerdown": "onPointerDown($event)", "pointerup": "onPointerUp($event)" }, properties: { "class.igx-slider": "this.slierClass", "attr.id": "this.id", "class.igx-slider--disabled": "this.disabledClass" } }, providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: IgxSliderComponent, multi: true }], queries: [{ propertyName: "thumbFromTemplateRef", first: true, predicate: IgxThumbFromTemplateDirective, descendants: true, read: TemplateRef }, { propertyName: "thumbToTemplateRef", first: true, predicate: IgxThumbToTemplateDirective, descendants: true, read: TemplateRef }, { propertyName: "tickLabelTemplateRef", first: true, predicate: IgxTickLabelTemplateDirective, descendants: true, read: TemplateRef }], viewQueries: [{ propertyName: "trackRef", first: true, predicate: ["track"], descendants: true, static: true }, { propertyName: "ticks", first: true, predicate: ["ticks"], descendants: true, static: true }, { propertyName: "thumbs", predicate: IgxSliderThumbComponent, descendants: true }, { propertyName: "labelRefs", predicate: IgxThumbLabelComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<igx-ticks\n *ngIf=\"showTicks && showTopTicks\"\n ticksOrientation=\"top\"\n [primaryTicks]=\"primaryTicks\"\n [secondaryTicks]=\"secondaryTicks\"\n [primaryTickLabels]=\"primaryTickLabels\"\n [secondaryTickLabels]=\"secondaryTickLabels\"\n [tickLabelsOrientation]=\"tickLabelsOrientation\"\n [labelsViewEnabled]=\"labelsViewEnabled\"\n [labels]=\"labels | spreadTickLabels:secondaryTicks\"\n [tickLabelTemplateRef]=\"tickLabelTemplateRef\"\n [minValue]=\"minValue\"\n [maxValue]=\"maxValue\">\n</igx-ticks>\n<div class=\"igx-slider__track\">\n <div class=\"igx-slider__track-inactive\"></div>\n <div #track class=\"igx-slider__track-fill\"></div>\n <div class=\"igx-slider__track-steps\">\n <svg width=\"100%\" height=\"100%\">\n <line #ticks x1=\"0\" y1=\"2\" x2=\"100%\" y2=\"2\"></line>\n </svg>\n </div>\n</div>\n<div class=\"igx-slider__thumbs\">\n <igx-thumb-label\n *ngIf=\"isRange\"\n type=\"from\"\n [value]=\"lowerLabel\"\n [templateRef]=\"thumbFromTemplateRef\"\n [continuous]=\"continuous\"\n [context]=\"context\"\n [deactiveState]=\"deactivateThumbLabel\"\n [thumb]=\"thumbFrom\"></igx-thumb-label>\n\n <igx-thumb\n *ngIf=\"isRange\"\n #thumbFrom\n type=\"from\"\n [value]=\"lowerLabel\"\n [min]=\"minValue\"\n [max]=\"maxValue\"\n [disabled]=\"disabled\"\n [continuous]=\"continuous\"\n [onPan]=\"onPan\"\n [stepDistance]=\"stepDistance\"\n [step]=\"step\"\n [templateRef]=\"thumbFromTemplateRef\"\n [context]=\"context\"\n [labels]=\"labels\"\n (thumbChange)=\"onThumbChange()\"\n (hoverChange)=\"onHoverChange($event)\"\n [deactiveState]=\"deactivateThumbLabel\"\n [thumbLabelVisibilityDuration]=\"thumbLabelVisibilityDuration\"></igx-thumb>\n\n <igx-thumb-label\n [value]=\"upperLabel\"\n type=\"to\"\n [templateRef]=\"thumbToTemplateRef\"\n [continuous]=\"continuous\"\n [context]=\"context\"\n [deactiveState]=\"deactivateThumbLabel\"\n [thumb]=\"thumbTo\"></igx-thumb-label>\n\n <igx-thumb\n #thumbTo\n type=\"to\"\n [value]=\"upperLabel\"\n [min]=\"minValue\"\n [max]=\"maxValue\"\n [disabled]=\"disabled\"\n [continuous]=\"continuous\"\n [onPan]=\"onPan\"\n [stepDistance]=\"stepDistance\"\n [step]=\"step\"\n [templateRef]=\"thumbToTemplateRef\"\n [context]=\"context\"\n [labels]=\"labels\"\n (thumbChange)=\"onThumbChange()\"\n (hoverChange)=\"onHoverChange($event)\"\n [deactiveState]=\"deactivateThumbLabel\"\n [thumbLabelVisibilityDuration]=\"thumbLabelVisibilityDuration\"></igx-thumb>\n</div>\n<igx-ticks\n *ngIf=\"showTicks && showBottomTicks\"\n ticksOrientation=\"bottom\"\n [primaryTicks]=\"primaryTicks\"\n [secondaryTicks]=\"secondaryTicks\"\n [primaryTickLabels]=\"primaryTickLabels\"\n [secondaryTickLabels]=\"secondaryTickLabels\"\n [tickLabelsOrientation]=\"tickLabelsOrientation\"\n [labelsViewEnabled]=\"labelsViewEnabled\"\n [labels]=\"labels | spreadTickLabels:secondaryTicks\"\n [tickLabelTemplateRef]=\"tickLabelTemplateRef\"\n [minValue]=\"minValue\"\n [maxValue]=\"maxValue\">\n</igx-ticks>\n", dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: IgxTicksComponent, selector: "igx-ticks", inputs: ["primaryTicks", "secondaryTicks", "primaryTickLabels", "secondaryTickLabels", "ticksOrientation", "tickLabelsOrientation", "maxValue", "minValue", "labelsViewEnabled", "labels", "tickLabelTemplateRef"] }, { kind: "component", type: IgxThumbLabelComponent, selector: "igx-thumb-label", inputs: ["value", "templateRef", "context", "type", "continuous", "deactiveState", "thumb"] }, { kind: "component", type: IgxSliderThumbComponent, selector: "igx-thumb", inputs: ["value", "continuous", "thumbLabelVisibilityDuration", "disabled", "onPan", "stepDistance", "step", "templateRef", "context", "type", "deactiveState", "min", "max", "labels"], outputs: ["thumbValueChange", "thumbChange", "thumbBlur", "hoverChange"] }, { kind: "pipe", type: IgxTickLabelsPipe, name: "spreadTickLabels" }] }); }
|
|
1180
1158
|
}
|
|
1181
1159
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: IgxSliderComponent, decorators: [{
|
|
1182
1160
|
type: Component,
|
|
1183
|
-
args: [{ providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: IgxSliderComponent, multi: true }], selector: 'igx-slider', standalone: true, imports: [NgIf, IgxTicksComponent, IgxThumbLabelComponent, IgxSliderThumbComponent, IgxTickLabelsPipe], template: "<igx-ticks\n *ngIf=\"showTicks && showTopTicks\"\n ticksOrientation=\"top\"\n [primaryTicks]=\"primaryTicks\"\n [secondaryTicks]=\"secondaryTicks\"\n [primaryTickLabels]=\"primaryTickLabels\"\n [secondaryTickLabels]=\"secondaryTickLabels\"\n [tickLabelsOrientation]=\"tickLabelsOrientation\"\n [labelsViewEnabled]=\"labelsViewEnabled\"\n [labels]=\"labels | spreadTickLabels:secondaryTicks\"\n [tickLabelTemplateRef]=\"tickLabelTemplateRef\"\n [minValue]=\"minValue\"\n [maxValue]=\"maxValue\">\n</igx-ticks>\n<div class=\"igx-slider__track\">\n <div class=\"igx-slider__track-inactive\"></div>\n <div #track class=\"igx-slider__track-fill\"></div>\n <div class=\"igx-slider__track-steps\">\n <svg width=\"100%\" height=\"100%\">\n <line #ticks x1=\"0\" y1=\"2\" x2=\"100%\" y2=\"2\"></line>\n </svg>\n </div>\n</div>\n<div class=\"igx-slider__thumbs\">\n <igx-thumb-label\n *ngIf=\"isRange\"\n type=\"from\"\n [value]=\"lowerLabel\"\n [templateRef]=\"thumbFromTemplateRef\"\n [continuous]=\"continuous\"\n [context]=\"context\"\n [deactiveState]=\"deactivateThumbLabel\"\n [thumb]=\"thumbFrom\"></igx-thumb-label>\n\n <igx-thumb\n *ngIf=\"isRange\"\n #thumbFrom\n type=\"from\"\n [value]=\"lowerLabel\"\n [disabled]=\"disabled\"\n [continuous]=\"continuous\"\n [onPan]=\"onPan\"\n [stepDistance]=\"stepDistance\"\n [step]=\"step\"\n [templateRef]=\"thumbFromTemplateRef\"\n [context]=\"context\"\n (thumbChange)=\"onThumbChange()\"\n (hoverChange)=\"onHoverChange($event)\"\n [deactiveState]=\"deactivateThumbLabel\"\n [thumbLabelVisibilityDuration]=\"thumbLabelVisibilityDuration\"></igx-thumb>\n\n <igx-thumb-label\n [value]=\"upperLabel\"\n type=\"to\"\n [templateRef]=\"thumbToTemplateRef\"\n [continuous]=\"continuous\"\n [context]=\"context\"\n [deactiveState]=\"deactivateThumbLabel\"\n [thumb]=\"thumbTo\"></igx-thumb-label>\n\n <igx-thumb\n #thumbTo\n type=\"to\"\n [value]=\"upperLabel\"\n [disabled]=\"disabled\"\n [continuous]=\"continuous\"\n [onPan]=\"onPan\"\n [stepDistance]=\"stepDistance\"\n [step]=\"step\"\n [templateRef]=\"thumbToTemplateRef\"\n [context]=\"context\"\n (thumbChange)=\"onThumbChange()\"\n (hoverChange)=\"onHoverChange($event)\"\n [deactiveState]=\"deactivateThumbLabel\"\n [thumbLabelVisibilityDuration]=\"thumbLabelVisibilityDuration\"></igx-thumb>\n</div>\n<igx-ticks\n *ngIf=\"showTicks && showBottomTicks\"\n ticksOrientation=\"bottom\"\n [primaryTicks]=\"primaryTicks\"\n [secondaryTicks]=\"secondaryTicks\"\n [primaryTickLabels]=\"primaryTickLabels\"\n [secondaryTickLabels]=\"secondaryTickLabels\"\n [tickLabelsOrientation]=\"tickLabelsOrientation\"\n [labelsViewEnabled]=\"labelsViewEnabled\"\n [labels]=\"labels | spreadTickLabels:secondaryTicks\"\n [tickLabelTemplateRef]=\"tickLabelTemplateRef\"\n [minValue]=\"minValue\"\n [maxValue]=\"maxValue\">\n</igx-ticks>\n" }]
|
|
1161
|
+
args: [{ providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: IgxSliderComponent, multi: true }], selector: 'igx-slider', standalone: true, imports: [NgIf, IgxTicksComponent, IgxThumbLabelComponent, IgxSliderThumbComponent, IgxTickLabelsPipe], template: "<igx-ticks\n *ngIf=\"showTicks && showTopTicks\"\n ticksOrientation=\"top\"\n [primaryTicks]=\"primaryTicks\"\n [secondaryTicks]=\"secondaryTicks\"\n [primaryTickLabels]=\"primaryTickLabels\"\n [secondaryTickLabels]=\"secondaryTickLabels\"\n [tickLabelsOrientation]=\"tickLabelsOrientation\"\n [labelsViewEnabled]=\"labelsViewEnabled\"\n [labels]=\"labels | spreadTickLabels:secondaryTicks\"\n [tickLabelTemplateRef]=\"tickLabelTemplateRef\"\n [minValue]=\"minValue\"\n [maxValue]=\"maxValue\">\n</igx-ticks>\n<div class=\"igx-slider__track\">\n <div class=\"igx-slider__track-inactive\"></div>\n <div #track class=\"igx-slider__track-fill\"></div>\n <div class=\"igx-slider__track-steps\">\n <svg width=\"100%\" height=\"100%\">\n <line #ticks x1=\"0\" y1=\"2\" x2=\"100%\" y2=\"2\"></line>\n </svg>\n </div>\n</div>\n<div class=\"igx-slider__thumbs\">\n <igx-thumb-label\n *ngIf=\"isRange\"\n type=\"from\"\n [value]=\"lowerLabel\"\n [templateRef]=\"thumbFromTemplateRef\"\n [continuous]=\"continuous\"\n [context]=\"context\"\n [deactiveState]=\"deactivateThumbLabel\"\n [thumb]=\"thumbFrom\"></igx-thumb-label>\n\n <igx-thumb\n *ngIf=\"isRange\"\n #thumbFrom\n type=\"from\"\n [value]=\"lowerLabel\"\n [min]=\"minValue\"\n [max]=\"maxValue\"\n [disabled]=\"disabled\"\n [continuous]=\"continuous\"\n [onPan]=\"onPan\"\n [stepDistance]=\"stepDistance\"\n [step]=\"step\"\n [templateRef]=\"thumbFromTemplateRef\"\n [context]=\"context\"\n [labels]=\"labels\"\n (thumbChange)=\"onThumbChange()\"\n (hoverChange)=\"onHoverChange($event)\"\n [deactiveState]=\"deactivateThumbLabel\"\n [thumbLabelVisibilityDuration]=\"thumbLabelVisibilityDuration\"></igx-thumb>\n\n <igx-thumb-label\n [value]=\"upperLabel\"\n type=\"to\"\n [templateRef]=\"thumbToTemplateRef\"\n [continuous]=\"continuous\"\n [context]=\"context\"\n [deactiveState]=\"deactivateThumbLabel\"\n [thumb]=\"thumbTo\"></igx-thumb-label>\n\n <igx-thumb\n #thumbTo\n type=\"to\"\n [value]=\"upperLabel\"\n [min]=\"minValue\"\n [max]=\"maxValue\"\n [disabled]=\"disabled\"\n [continuous]=\"continuous\"\n [onPan]=\"onPan\"\n [stepDistance]=\"stepDistance\"\n [step]=\"step\"\n [templateRef]=\"thumbToTemplateRef\"\n [context]=\"context\"\n [labels]=\"labels\"\n (thumbChange)=\"onThumbChange()\"\n (hoverChange)=\"onHoverChange($event)\"\n [deactiveState]=\"deactivateThumbLabel\"\n [thumbLabelVisibilityDuration]=\"thumbLabelVisibilityDuration\"></igx-thumb>\n</div>\n<igx-ticks\n *ngIf=\"showTicks && showBottomTicks\"\n ticksOrientation=\"bottom\"\n [primaryTicks]=\"primaryTicks\"\n [secondaryTicks]=\"secondaryTicks\"\n [primaryTickLabels]=\"primaryTickLabels\"\n [secondaryTickLabels]=\"secondaryTickLabels\"\n [tickLabelsOrientation]=\"tickLabelsOrientation\"\n [labelsViewEnabled]=\"labelsViewEnabled\"\n [labels]=\"labels | spreadTickLabels:secondaryTicks\"\n [tickLabelTemplateRef]=\"tickLabelTemplateRef\"\n [minValue]=\"minValue\"\n [maxValue]=\"maxValue\">\n</igx-ticks>\n" }]
|
|
1184
1162
|
}], ctorParameters: () => [{ type: i0.Renderer2 }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i0.NgZone }, { type: i1.IgxDirectionality }], propDecorators: { trackRef: [{
|
|
1185
1163
|
type: ViewChild,
|
|
1186
1164
|
args: ['track', { static: true }]
|
|
@@ -1193,9 +1171,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
|
|
|
1193
1171
|
}], tickLabelTemplateRef: [{
|
|
1194
1172
|
type: ContentChild,
|
|
1195
1173
|
args: [IgxTickLabelTemplateDirective, { read: TemplateRef, static: false }]
|
|
1196
|
-
}], role: [{
|
|
1197
|
-
type: HostBinding,
|
|
1198
|
-
args: [`attr.role`]
|
|
1199
1174
|
}], slierClass: [{
|
|
1200
1175
|
type: HostBinding,
|
|
1201
1176
|
args: ['class.igx-slider']
|
|
@@ -1206,15 +1181,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
|
|
|
1206
1181
|
type: Input
|
|
1207
1182
|
}], thumbLabelVisibilityDuration: [{
|
|
1208
1183
|
type: Input
|
|
1209
|
-
}], valuemin: [{
|
|
1210
|
-
type: HostBinding,
|
|
1211
|
-
args: [`attr.aria-valuemin`]
|
|
1212
|
-
}], valuemax: [{
|
|
1213
|
-
type: HostBinding,
|
|
1214
|
-
args: [`attr.aria-valuemax`]
|
|
1215
|
-
}], readonly: [{
|
|
1216
|
-
type: HostBinding,
|
|
1217
|
-
args: [`attr.aria-readonly`]
|
|
1218
1184
|
}], disabledClass: [{
|
|
1219
1185
|
type: HostBinding,
|
|
1220
1186
|
args: ['class.igx-slider--disabled']
|
|
@@ -1288,4 +1254,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
|
|
|
1288
1254
|
type: HostListener,
|
|
1289
1255
|
args: ['pointerup', ['$event']]
|
|
1290
1256
|
}] } });
|
|
1291
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9zbGlkZXIvc2xpZGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9zbGlkZXIvc2xpZGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2QyxPQUFPLEVBQ2lELFNBQVMsRUFBRSxZQUFZLEVBQWMsWUFBWSxFQUNyRyxXQUFXLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBd0MsTUFBTSxFQUFFLFNBQVMsRUFBNEIsV0FBVyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQzlLLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFjLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDN0csT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFbkUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWpELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3ZFLE9BQU8sRUFDSCxhQUFhLEVBQUUsNkJBQTZCLEVBQzVDLDJCQUEyQixFQUFFLDZCQUE2QixFQUFrRCxZQUFZLEVBQUUscUJBQXFCLEVBQUUsZ0JBQWdCLEVBQ3BLLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0s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RTtnQkFhL0IsZ0JBQWdCO3NCQUR0QixLQUFLO2dCQWFDLHFCQUFxQjtzQkFEM0IsS0FBSztnQkF1QkMsV0FBVztzQkFEakIsTUFBTTtnQkFlQSxnQkFBZ0I7c0JBRHRCLE1BQU07Z0JBZUEsZ0JBQWdCO3NCQUR0QixNQUFNO2dCQWVBLFlBQVk7c0JBRGxCLE1BQU07Z0JBT0MsS0FBSztzQkFEWixTQUFTO3VCQUFDLE9BQU8sRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBTzVCLE1BQU07c0JBRGIsWUFBWTt1QkFBQyx1QkFBdUI7Z0JBTzdCLFNBQVM7c0JBRGhCLFlBQVk7dUJBQUMsc0JBQXNCO2dCQXlEN0IsT0FBTztzQkFEYixZQUFZO3VCQUFDLE9BQU87Z0JBZ0RWLFVBQVU7c0JBRHBCLEtBQUs7Z0JBd0NLLFVBQVU7c0JBRHBCLEtBQUs7Z0JBbVJFLGFBQWE7c0JBRHBCLFlBQVk7dUJBQUMsYUFBYSxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQXVCL0IsV0FBVztzQkFEbEIsWUFBWTt1QkFBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ0lmIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgQWZ0ZXJDb250ZW50SW5pdCwgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgQ29udGVudENoaWxkLCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdEJpbmRpbmcsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIE5nWm9uZSwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0LCBRdWVyeUxpc3QsIFJlbmRlcmVyMiwgU2ltcGxlQ2hhbmdlcywgVGVtcGxhdGVSZWYsIFZpZXdDaGlsZCwgVmlld0NoaWxkcmVuLCBib29sZWFuQXR0cmlidXRlXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgYW5pbWF0aW9uRnJhbWVTY2hlZHVsZXIsIGZyb21FdmVudCwgaW50ZXJ2YWwsIG1lcmdlLCBub29wLCBPYnNlcnZhYmxlLCBTdWJqZWN0LCB0aW1lciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsLCB0aHJvdHRsZSwgdGhyb3R0bGVUaW1lIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgRWRpdG9yUHJvdmlkZXIgfSBmcm9tICcuLi9jb3JlL2VkaXQtcHJvdmlkZXInO1xuaW1wb3J0IHsgcmVzaXplT2JzZXJ2YWJsZSB9IGZyb20gJy4uL2NvcmUvdXRpbHMnO1xuaW1wb3J0IHsgSWd4RGlyZWN0aW9uYWxpdHkgfSBmcm9tICcuLi9zZXJ2aWNlcy9kaXJlY3Rpb24vZGlyZWN0aW9uYWxpdHknO1xuaW1wb3J0IHsgSWd4VGh1bWJMYWJlbENvbXBvbmVudCB9IGZyb20gJy4vbGFiZWwvdGh1bWItbGFiZWwuY29tcG9uZW50JztcbmltcG9ydCB7XG4gICAgSWd4U2xpZGVyVHlwZSwgSWd4VGh1bWJGcm9tVGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgSWd4VGh1bWJUb1RlbXBsYXRlRGlyZWN0aXZlLCBJZ3hUaWNrTGFiZWxUZW1wbGF0ZURpcmVjdGl2ZSwgSVJhbmdlU2xpZGVyVmFsdWUsIElTbGlkZXJWYWx1ZUNoYW5nZUV2ZW50QXJncywgU2xpZGVySGFuZGxlLCBUaWNrTGFiZWxzT3JpZW50YXRpb24sIFRpY2tzT3JpZW50YXRpb25cbn0gZnJvbSAnLi9zbGlkZXIuY29tbW9uJztcbmltcG9ydCB7IElneFNsaWRlclRodW1iQ29tcG9uZW50IH0gZnJvbSAnLi90aHVtYi90aHVtYi1zbGlkZXIuY29tcG9uZW50JztcbmltcG9ydCB7IElneFRpY2tMYWJlbHNQaXBlIH0gZnJvbSAnLi90aWNrcy90aWNrLnBpcGUnO1xuaW1wb3J0IHsgSWd4VGlja3NDb21wb25lbnQgfSBmcm9tICcuL3RpY2tzL3RpY2tzLmNvbXBvbmVudCc7XG5cbmxldCBORVhUX0lEID0gMDtcblxuLyoqXG4gKiAqKklnbml0ZSBVSSBmb3IgQW5ndWxhciBTbGlkZXIqKiAtXG4gKiBbRG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly93d3cuaW5mcmFnaXN0aWNzLmNvbS9wcm9kdWN0cy9pZ25pdGUtdWktYW5ndWxhci9hbmd1bGFyL2NvbXBvbmVudHMvc2xpZGVyL3NsaWRlcilcbiAqXG4gKiBUaGUgSWduaXRlIFVJIFNsaWRlciBhbGxvd3Mgc2VsZWN0aW9uIGluIGEgZ2l2ZW4gcmFuZ2UgYnkgbW92aW5nIHRoZSB0aHVtYiBhbG9uZyB0aGUgdHJhY2suIFRoZSB0cmFja1xuICogY2FuIGJlIGRlZmluZWQgYXMgY29udGludW91cyBvciBzdGVwcGVkLCBhbmQgeW91IGNhbiBjaG9vc2UgYmV0d2VlbiBzaW5nbGUgYW5kIHJhbmdlIHNsaWRlciB0eXBlcy5cbiAqXG4gKiBFeGFtcGxlOlxuICogYGBgaHRtbFxuICogPGlneC1zbGlkZXIgaWQ9XCJzbGlkZXJcIlxuICogICAgICAgICAgICBbbWluVmFsdWVdPVwiMFwiIFttYXhWYWx1ZV09XCIxMDBcIlxuICogICAgICAgICAgICBbY29udGludW91c109dHJ1ZSBbKG5nTW9kZWwpXT1cInZvbHVtZVwiPlxuICogPC9pZ3gtc2xpZGVyPlxuICogYGBgXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHByb3ZpZGVyczogW3sgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsIHVzZUV4aXN0aW5nOiBJZ3hTbGlkZXJDb21wb25lbnQsIG11bHRpOiB0cnVlIH1dLFxuICAgIHNlbGVjdG9yOiAnaWd4LXNsaWRlcicsXG4gICAgdGVtcGxhdGVVcmw6ICdzbGlkZXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW05nSWYsIElneFRpY2tzQ29tcG9uZW50LCBJZ3hUaHVtYkxhYmVsQ29tcG9uZW50LCBJZ3hTbGlkZXJUaHVtYkNvbXBvbmVudCwgSWd4VGlja0xhYmVsc1BpcGVdXG59KVxuZXhwb3J0IGNsYXNzIElneFNsaWRlckNvbXBvbmVudCBpbXBsZW1lbnRzXG4gICAgQ29udHJvbFZhbHVlQWNjZXNzb3IsXG4gICAgRWRpdG9yUHJvdmlkZXIsXG4gICAgT25Jbml0LFxuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25EZXN0cm95IHtcbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIGdldCB0aHVtYkZyb20oKTogSWd4U2xpZGVyVGh1bWJDb21wb25lbnQge1xuICAgICAgICByZXR1cm4gdGhpcy50aHVtYnMuZmluZCh0aHVtYiA9PiB0aHVtYi50eXBlID09PSBTbGlkZXJIYW5kbGUuRlJPTSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgdGh1bWJUbygpOiBJZ3hTbGlkZXJUaHVtYkNvbXBvbmVudCB7XG4gICAgICAgIHJldHVybiB0aGlzLnRodW1icy5maW5kKHRodW1iID0+IHRodW1iLnR5cGUgPT09IFNsaWRlckhhbmRsZS5UTyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXQgbGFiZWxGcm9tKCk6IElneFRodW1iTGFiZWxDb21wb25lbnQge1xuICAgICAgICByZXR1cm4gdGhpcy5sYWJlbFJlZnMuZmluZChsYWJlbCA9PiBsYWJlbC50eXBlID09PSBTbGlkZXJIYW5kbGUuRlJPTSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXQgbGFiZWxUbygpOiBJZ3hUaHVtYkxhYmVsQ29tcG9uZW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubGFiZWxSZWZzLmZpbmQobGFiZWwgPT4gbGFiZWwudHlwZSA9PT0gU2xpZGVySGFuZGxlLlRPKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQFZpZXdDaGlsZCgndHJhY2snLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICAgIHB1YmxpYyB0cmFja1JlZjogRWxlbWVudFJlZjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBAQ29udGVudENoaWxkKElneFRodW1iRnJvbVRlbXBsYXRlRGlyZWN0aXZlLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pXG4gICAgcHVibGljIHRodW1iRnJvbVRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGQoSWd4VGh1bWJUb1RlbXBsYXRlRGlyZWN0aXZlLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pXG4gICAgcHVibGljIHRodW1iVG9UZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBAQ29udGVudENoaWxkKElneFRpY2tMYWJlbFRlbXBsYXRlRGlyZWN0aXZlLCB7IHJlYWQ6IFRlbXBsYXRlUmVmLCBzdGF0aWM6IGZhbHNlIH0pXG4gICAgcHVibGljIHRpY2tMYWJlbFRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZyhgYXR0ci5yb2xlYClcbiAgICBwdWJsaWMgcm9sZSA9ICdzbGlkZXInO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnY2xhc3MuaWd4LXNsaWRlcicpXG4gICAgcHVibGljIHNsaWVyQ2xhc3MgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgdmFsdWUgb2YgdGhlIGBpZGAgYXR0cmlidXRlLlxuICAgICAqIElmIG5vdCBwcm92aWRlZCBpdCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXNsaWRlciBbaWRdPVwiJ2lneC1zbGlkZXItMzInXCIgWyhuZ01vZGVsKV09XCJ0YXNrLnBlcmNlbnRDb21wbGV0ZWRcIiBbc3RlcF09XCI1XCIgW2xvd2VyQm91bmRdPVwiMjBcIj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuaWQnKVxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGlkID0gYGlneC1zbGlkZXItJHtORVhUX0lEKyt9YDtcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGR1cmF0aW9uIHZpc2liaWxpdHkgb2YgdGh1bWJzIGxhYmVscy4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgNzUwIG1pbGxpc2Vjb25kcy5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1zbGlkZXIgI3NsaWRlciBbdGh1bWJMYWJlbFZpc2liaWxpdHlEdXJhdGlvbl09XCIzMDAwXCIgWyhuZ01vZGVsKV09XCJ0YXNrLnBlcmNlbnRDb21wbGV0ZWRcIiBbc3RlcF09XCI1XCI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgdGh1bWJMYWJlbFZpc2liaWxpdHlEdXJhdGlvbiA9IDc1MDtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoYGF0dHIuYXJpYS12YWx1ZW1pbmApXG4gICAgcHVibGljIGdldCB2YWx1ZW1pbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWluVmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZyhgYXR0ci5hcmlhLXZhbHVlbWF4YClcbiAgICBwdWJsaWMgZ2V0IHZhbHVlbWF4KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tYXhWYWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKGBhdHRyLmFyaWEtcmVhZG9ubHlgKVxuICAgIHB1YmxpYyBnZXQgcmVhZG9ubHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRpc2FibGVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1zbGlkZXItLWRpc2FibGVkJylcbiAgICBwdWJsaWMgZ2V0IGRpc2FibGVkQ2xhc3MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRpc2FibGVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIHR5cGUgb2YgdGhlIGBJZ3hTbGlkZXJDb21wb25lbnRgLlxuICAgICAqIFRoZSBzbGlkZXIgY2FuIGJlIElneFNsaWRlclR5cGUuU0xJREVSKGRlZmF1bHQpIG9yIElneFNsaWRlclR5cGUuUkFOR0UuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIEBWaWV3Q2hpbGQoXCJzbGlkZXIyXCIpXG4gICAgICogcHVibGljIHNsaWRlcjogSWd4U2xpZGVyQ29tcG9uZW50O1xuICAgICAqIG5nQWZ0ZXJWaWV3SW5pdCgpe1xuICAgICAqICAgICBsZXQgdHlwZSA9IHRoaXMuc2xpZGVyLnR5cGU7XG4gICAgICogfVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCB0eXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdHlwZSBhcyBJZ3hTbGlkZXJUeXBlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHR5cGUgb2YgdGhlIGBJZ3hTbGlkZXJDb21wb25lbnRgLlxuICAgICAqIFRoZSBzbGlkZXIgY2FuIGJlIElneFNsaWRlclR5cGUuU0xJREVSKGRlZmF1bHQpIG9yIElneFNsaWRlclR5cGUuUkFOR0UuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHNsaWRlclR5cGU6IElneFNsaWRlclR5cGUgPSBJZ3hTbGlkZXJUeXBlLlJBTkdFO1xuICAgICAqIGBgYFxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXNsaWRlciAjc2xpZGVyMiBbdHlwZV09XCJzbGlkZXJUeXBlXCIgWyhuZ01vZGVsKV09XCJyYW5nZVZhbHVlXCIgW21pblZhbHVlXT1cIjBcIiBbbWF4VmFsdWVdPVwiMTAwXCI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIHNldCB0eXBlKHR5cGU6IElneFNsaWRlclR5cGUpIHtcbiAgICAgICAgdGhpcy5fdHlwZSA9IHR5cGU7XG5cbiAgICAgICAgaWYgKHR5cGUgPT09IElneFNsaWRlclR5cGUuU0xJREVSKSB7XG4gICAgICAgICAgICB0aGlzLmxvd2VyVmFsdWUgPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX2hhc1ZpZXdJbml0KSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVRyYWNrKCk7XG4gICAgICAgIH1cbiAgICB9XG5cblxuICAgIC8qKlxuICAgICAqIEVuYWJsZXMgYGxhYmVsVmlld2AsIGJ5IGFjY2VwdGluZyBhIGNvbGxlY3Rpb24gb2YgcHJpbWl0aXZlIHZhbHVlcyB3aXRoIG1vcmUgdGhhbiBvbmUgZWxlbWVudC5cbiAgICAgKiBFYWNoIGVsZW1lbnQgd2lsbCBiZSBlcXVhbGx5IHNwcmVhZCBvdmVyIHRoZSBzbGlkZXIgYW5kIGl0IHdpbGwgc2VydmUgYXMgYSB0aHVtYiBsYWJlbC5cbiAgICAgKiBPbmNlIHRoZSBwcm9wZXJ0eSBpcyBzZXQsIGl0IHdpbGwgcHJlY2VuZGVuY2Ugb3ZlciB7QGxpbmsgbWF4VmFsdWV9LCB7QGxpbmsgbWluVmFsdWV9LCB7QGxpbmsgc3RlcH0uXG4gICAgICogVGhpcyBtZWFucyB0aGF0IHRoZSBtYW5pcHVsYXRpb24gZm9yIHRob3NlIHByb3BlcnRpZXMgd29uJ3QgYmUgYWxsb3dlZC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgbGFiZWxzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbGFiZWxzO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgbGFiZWxzKGxhYmVsczogQXJyYXk8bnVtYmVyIHwgc3RyaW5nIHwgYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWQ+KSB7XG4gICAgICAgIHRoaXMuX2xhYmVscyA9IGxhYmVscztcblxuICAgICAgICB0aGlzLl9wTWF4ID0gdGhpcy52YWx1ZVRvRnJhY3Rpb24odGhpcy51cHBlckJvdW5kLCAwLCAxKTtcbiAgICAgICAgdGhpcy5fcE1pbiA9IHRoaXMudmFsdWVUb0ZyYWN0aW9uKHRoaXMubG93ZXJCb3VuZCwgMCwgMSk7XG5cbiAgICAgICAgdGhpcy5wb3NpdGlvbkhhbmRsZXJzQW5kVXBkYXRlVHJhY2soKTtcblxuICAgICAgICBpZiAodGhpcy5faGFzVmlld0luaXQpIHtcbiAgICAgICAgICAgIHRoaXMuc3RlcERpc3RhbmNlID0gdGhpcy5jYWxjdWxhdGVTdGVwRGlzdGFuY2UoKTtcbiAgICAgICAgICAgIHRoaXMuc2V0VGlja0ludGVydmFsKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSB0ZW1wbGF0ZSBjb250ZXh0IGNvcnJlc3BvbmRpbmdcbiAgICAgKiB0byB7QGxpbmsgSWd4VGh1bWJGcm9tVGVtcGxhdGVEaXJlY3RpdmV9IGFuZCB7QGxpbmsgSWd4VGh1bWJUb1RlbXBsYXRlRGlyZWN0aXZlfSB0ZW1wbGF0ZXMuXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogcmV0dXJuIHtcbiAgICAgKiAgJGltcGxpY2l0IC8vIHJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBsYWJlbCxcbiAgICAgKiAgbGFiZWxzIC8vIHJldHVybnMgdGhlIGxhYmVscyBjb2xsZWN0aW9uIHRoZSB1c2VyIGhhcyBwYXNzZWQuXG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgY29udGV4dCgpOiBhbnkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJGltcGxpY2l0OiB0aGlzLnZhbHVlLFxuICAgICAgICAgICAgbGFiZWxzOiB0aGlzLmxhYmVsc1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGluY3JlbWVudGFsL2RlY3JlbWVudGFsIHN0ZXAgb2YgdGhlIHZhbHVlIHdoZW4gZHJhZ2dpbmcgdGhlIHRodW1iLlxuICAgICAqIFRoZSBkZWZhdWx0IHN0ZXAgaXMgMSwgYW5kIHN0ZXAgc2hvdWxkIG5vdCBiZSBsZXNzIG9yIGVxdWFsIHRoYW4gMC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1zbGlkZXIgI3NsaWRlciBbKG5nTW9kZWwpXT1cInRhc2sucGVyY2VudENvbXBsZXRlZFwiIFtzdGVwXT1cIjVcIj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgc3RlcChzdGVwOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5fc3RlcCA9IHN0ZXA7XG5cbiAgICAgICAgaWYgKHRoaXMuX2hhc1ZpZXdJbml0KSB7XG4gICAgICAgICAgICB0aGlzLnN0ZXBEaXN0YW5jZSA9IHRoaXMuY2FsY3VsYXRlU3RlcERpc3RhbmNlKCk7XG4gICAgICAgICAgICB0aGlzLm5vcm1hbGl6ZUJ5U3RlcCh0aGlzLl92YWx1ZSk7XG4gICAgICAgICAgICB0aGlzLnNldFZhbHVlKHRoaXMuX3ZhbHVlLCB0cnVlKTtcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb25IYW5kbGVyc0FuZFVwZGF0ZVRyYWNrKCk7XG4gICAgICAgICAgICB0aGlzLnNldFRpY2tJbnRlcnZhbCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgaW5jcmVtZW50YWwvZGVjcmVtZW50YWwgZHJhZ2dpbmcgc3RlcCBvZiB0aGUge0BsaW5rIElneFNsaWRlckNvbXBvbmVudH0uXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIEBWaWV3Q2hpbGQoXCJzbGlkZXIyXCIpXG4gICAgICogcHVibGljIHNsaWRlcjogSWd4U2xpZGVyQ29tcG9uZW50O1xuICAgICAqIG5nQWZ0ZXJWaWV3SW5pdCgpe1xuICAgICAqICAgICBsZXQgc3RlcCA9IHRoaXMuc2xpZGVyLnN0ZXA7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgc3RlcCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubGFiZWxzVmlld0VuYWJsZWQgPyAxIDogdGhpcy5fc3RlcDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGlmIHRoZSB7QGxpbmsgSWd4U2xpZGVyQ29tcG9uZW50fSBpcyBkaXNhYmxlZC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogQFZpZXdDaGlsZChcInNsaWRlcjJcIilcbiAgICAgKiBwdWJsaWMgc2xpZGVyOiBJZ3hTbGlkZXJDb21wb25lbnQ7XG4gICAgICogbmdBZnRlclZpZXdJbml0KCl7XG4gICAgICogICAgIGxldCBpc0Rpc2FibGVkID0gdGhpcy5zbGlkZXIuZGlzYWJsZWQ7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICAgIHB1YmxpYyBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEaXNhYmxlcyB0aGUgY29tcG9uZW50LlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXNsaWRlciAjc2xpZGVyIFtkaXNhYmxlZF09XCJ0cnVlXCIgWyhuZ01vZGVsKV09XCJ0YXNrLnBlcmNlbnRDb21wbGV0ZWRcIiBbc3RlcF09XCI1XCIgW2xvd2VyQm91bmRdPVwiMjBcIj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0IGRpc2FibGVkKGRpc2FibGU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fZGlzYWJsZWQgPSBkaXNhYmxlO1xuXG4gICAgICAgIGlmICh0aGlzLl9oYXNWaWV3SW5pdCkge1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VUaHVtYkZvY3VzYWJsZVN0YXRlKGRpc2FibGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBpZiB0aGUge0BsaW5rIElneFNsaWRlckNvbXBvbmVudH0gaXMgc2V0IGFzIGNvbnRpbnVvdXMuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIEBWaWV3Q2hpbGQoXCJzbGlkZXIyXCIpXG4gICAgICogcHVibGljIHNsaWRlcjogSWd4U2xpZGVyQ29tcG9uZW50O1xuICAgICAqIG5nQWZ0ZXJWaWV3SW5pdCgpe1xuICAgICAqICAgICBsZXQgY29udGludW91cyA9IHRoaXMuc2xpZGVyLmNvbnRpbnVvdXM7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICAgIHB1YmxpYyBnZXQgY29udGludW91cygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnRpbnVvdXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUge0BsaW5rIElneFNsaWRlckNvbXBvbmVudH0gYXMgY29udGludW91cy5cbiAgICAgKiBCeSBkZWZhdWx0IGlzIGNvbnNpZGVyZWQgdGhhdCB0aGUge0BsaW5rIElneFNsaWRlckNvbXBvbmVudH0gaXMgZGlzY3JldGUuXG4gICAgICogRGlzY3JldGUge0BsaW5rIElneFNsaWRlckNvbXBvbmVudH0gc2xpZGVyIGhhcyBzdGVwIGluZGljYXRvcnMgb3ZlciB0aGUgdHJhY2sgYW5kIHZpc2libGUgdGh1bWIgbGFiZWxzIGR1cmluZyBpbnRlcmFjdGlvbi5cbiAgICAgKiBDb250aW51b3VzIHtAbGluayBJZ3hTbGlkZXJDb21wb25lbnR9IGRvZXMgbm90IGhhdmUgdGlja3MgYW5kIGRvZXMgbm90IHNob3cgYnViYmxlIGxhYmVscyBmb3IgdmFsdWVzLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXNsaWRlciAjc2xpZGVyIFtjb250aW51b3VzXT1cIid0cnVlJ1wiIFsobmdNb2RlbCldPVwidGFzay5wZXJjZW50Q29tcGxldGVkXCIgW3N0ZXBdPVwiNVwiIFtsb3dlckJvdW5kXT1cIjIwXCI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIHNldCBjb250aW51b3VzKGNvbnRpbnVvdXM6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fY29udGludW91cyA9IGNvbnRpbnVvdXM7XG4gICAgICAgIGlmICh0aGlzLl9oYXNWaWV3SW5pdCkge1xuICAgICAgICAgICAgdGhpcy5zZXRUaWNrSW50ZXJ2YWwoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIG1pbmltYWwgZGlzcGxheWVkIHRyYWNrIHZhbHVlIG9mIHRoZSBgSWd4U2xpZGVyQ29tcG9uZW50YC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogIEBWaWV3Q2hpbGQoXCJzbGlkZXIyXCIpXG4gICAgICogcHVibGljIHNsaWRlcjogSWd4U2xpZGVyQ29tcG9uZW50O1xuICAgICAqIG5nQWZ0ZXJWaWV3SW5pdCgpe1xuICAgICAqICAgICBsZXQgc2xpZGVyTWluID0gdGhpcy5zbGlkZXIubWluVmFsdWU7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgbWluVmFsdWUoKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKHRoaXMubGFiZWxzVmlld0VuYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX21pblZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIG1pbmltYWwgZGlzcGxheWVkIHRyYWNrIHZhbHVlIGZvciB0aGUgYElneFNsaWRlckNvbXBvbmVudGAuXG4gICAgICogVGhlIGRlZmF1bHQgbWluaW1hbCB2YWx1ZSBpcyAwLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXNsaWRlciBbdHlwZV09XCJzbGlkZXJUeXBlXCIgW21pblZhbHVlXT1cIjU2XCIgW21heFZhbHVlXT1cIjEwMFwiPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCBtaW5WYWx1ZSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIGlmICh2YWx1ZSA+PSB0aGlzLm1heFZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9taW5WYWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbHVlID4gdGhpcy5fdXBwZXJCb3VuZCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVVcHBlckJvdW5kQW5kTWF4VHJhdmVsWm9uZSgpO1xuICAgICAgICAgICAgdGhpcy5sb3dlckJvdW5kID0gdmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBSZWZyZXNoIG1pbiB0cmF2ZWwgem9uZSBsaW1pdC5cbiAgICAgICAgdGhpcy5fcE1pbiA9IDA7XG4gICAgICAgIC8vIFJlY2FsY3VsYXRlIHN0ZXAgZGlzdGFuY2UuXG4gICAgICAgIHRoaXMucG9zaXRpb25IYW5kbGVyc0FuZFVwZGF0ZVRyYWNrKCk7XG4gICAgICAgIGlmICh0aGlzLl9oYXNWaWV3SW5pdCkge1xuICAgICAgICAgICAgdGhpcy5zdGVwRGlzdGFuY2UgPSB0aGlzLmNhbGN1bGF0ZVN0ZXBEaXN0YW5jZSgpO1xuICAgICAgICAgICAgdGhpcy5zZXRUaWNrSW50ZXJ2YWwoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIG1heGltdW0gZGlzcGxheWVkIHRyYWNrIHZhbHVlIGZvciB0aGUge0BsaW5rIElneFNsaWRlckNvbXBvbmVudH0uXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIEBWaWV3Q2hpbGQoXCJzbGlkZXJcIilcbiAgICAgKiBwdWJsaWMgc2xpZGVyOiBJZ3hTbGlkZXJDb21wb25lbnQ7XG4gICAgICogbmdBZnRlclZpZXdJbml0KCl7XG4gICAgICogICAgIGxldCBzbGlkZXJNYXggPSB0aGlzLnNsaWRlci5tYXhWYWx1ZTtcbiAgICAgKiB9XG4gICAgICogIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgbWF4VmFsdWUoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubGFiZWxzVmlld0VuYWJsZWQgP1xuICAgICAgICAgICAgdGhpcy5sYWJlbHMubGVuZ3RoIC0gMSA6XG4gICAgICAgICAgICB0aGlzLl9tYXhWYWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBtYXhpbWFsIGRpc3BsYXllZCB0cmFjayB2YWx1ZSBmb3IgdGhlIGBJZ3hTbGlkZXJDb21wb25lbnRgLlxuICAgICAqIFRoZSBkZWZhdWx0IG1heGltdW0gdmFsdWUgaXMgMTAwLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXNsaWRlciBbdHlwZV09XCJzbGlkZXJUeXBlXCIgW21pblZhbHVlXT1cIjU2XCIgW21heFZhbHVlXT1cIjI1NlwiPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCBtYXhWYWx1ZSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIGlmICh2YWx1ZSA8PSB0aGlzLl9taW5WYWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fbWF4VmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2YWx1ZSA8IHRoaXMuX2xvd2VyQm91bmQpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlTG93ZXJCb3VuZEFuZE1pblRyYXZlbFpvbmUoKTtcbiAgICAgICAgICAgIHRoaXMudXBwZXJCb3VuZCA9IHZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gcmVmcmVzaCBtYXggdHJhdmVsIHpvbmUgbGltaXRzLlxuICAgICAgICB0aGlzLl9wTWF4ID0gMTtcbiAgICAgICAgLy8gcmVjYWxjdWxhdGUgc3RlcCBkaXN0YW5jZS5cbiAgICAgICAgdGhpcy5wb3NpdGlvbkhhbmRsZXJzQW5kVXBkYXRlVHJhY2soKTtcbiAgICAgICAgaWYgKHRoaXMuX2hhc1ZpZXdJbml0KSB7XG4gICAgICAgICAgICB0aGlzLnN0ZXBEaXN0YW5jZSA9IHRoaXMuY2FsY3VsYXRlU3RlcERpc3RhbmNlKCk7XG4gICAgICAgICAgICB0aGlzLnNldFRpY2tJbnRlcnZhbCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgbG93ZXIgYm91bmRhcnkgb2Ygc2V0dGFibGUgdmFsdWVzIG9mIHRoZSBgSWd4U2xpZGVyQ29tcG9uZW50YC5cbiAgICAgKiBJZiBub3Qgc2V0LCB3aWxsIHJldHVybiBgbWluVmFsdWVgLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBAVmlld0NoaWxkKFwic2xpZGVyXCIpXG4gICAgICogcHVibGljIHNsaWRlcjogSWd4U2xpZGVyQ29tcG9uZW50O1xuICAgICAqIG5nQWZ0ZXJWaWV3SW5pdCgpe1xuICAgICAqICAgICBsZXQgc2xpZGVyTG93Qm91bmQgPSB0aGlzLnNsaWRlci5sb3dlckJvdW5kO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGxvd2VyQm91bmQoKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKCFOdW1iZXIuaXNOYU4odGhpcy5fbG93ZXJCb3VuZCkgJiYgdGhpcy5fbG93ZXJCb3VuZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZUluUmFuZ2UodGhpcy5fbG93ZXJCb3VuZCwgdGhpcy5taW5WYWx1ZSwgdGhpcy5tYXhWYWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5taW5WYWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBsb3dlciBib3VuZGFyeSBvZiBzZXR0YWJsZSB2YWx1ZXMgb2YgdGhlIGBJZ3hTbGlkZXJDb21wb25lbnRgLlxuICAgICAqIElmIG5vdCBzZXQgaXMgdGhlIHNhbWUgYXMgbWluIHZhbHVlLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXNsaWRlciBbc3RlcF09XCI1XCIgW2xvd2VyQm91bmRdPVwiMjBcIj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgbG93ZXJCb3VuZCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIGlmICh2YWx1ZSA+PSB0aGlzLnVwcGVyQm91bmQgfHwgKHRoaXMubGFiZWxzVmlld0VuYWJsZWQgJiYgdmFsdWUgPCAwKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fbG93ZXJCb3VuZCA9IHRoaXMudmFsdWVJblJhbmdlKHZhbHVlLCB0aGlzLm1pblZhbHVlLCB0aGlzLm1heFZhbHVlKTtcblxuICAgICAgICAvLyBSZWZyZXNoIG1pbiB0cmF2ZWwgem9uZS5cbiAgICAgICAgdGhpcy5fcE1pbiA9IHRoaXMudmFsdWVUb0ZyYWN0aW9uKHRoaXMuX2xvd2VyQm91bmQsIDAsIDEpO1xuICAgICAgICB0aGlzLnBvc2l0aW9uSGFuZGxlcnNBbmRVcGRhdGVUcmFjaygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHVwcGVyIGJvdW5kYXJ5IG9mIHNldHRhYmxlIHZhbHVlcyBvZiB0aGUgYElneFNsaWRlckNvbXBvbmVudGAuXG4gICAgICogSWYgbm90IHNldCwgd2lsbCByZXR1cm4gYG1heFZhbHVlYFxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBAVmlld0NoaWxkKFwic2xpZGVyXCIpXG4gICAgICogcHVibGljIHNsaWRlcjogSWd4U2xpZGVyQ29tcG9uZW50O1xuICAgICAqIG5nQWZ0ZXJWaWV3SW5pdCgpe1xuICAgICAqICAgIGxldCBzbGlkZXJVcEJvdW5kID0gdGhpcy5zbGlkZXIudXBwZXJCb3VuZDtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGdldCB1cHBlckJvdW5kKCk6IG51bWJlciB7XG4gICAgICAgIGlmICghTnVtYmVyLmlzTmFOKHRoaXMuX3VwcGVyQm91bmQpICYmIHRoaXMuX3VwcGVyQm91bmQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVJblJhbmdlKHRoaXMuX3VwcGVyQm91bmQsIHRoaXMubWluVmFsdWUsIHRoaXMubWF4VmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMubWF4VmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgdXBwZXIgYm91bmRhcnkgb2YgdGhlIGBJZ3hTbGlkZXJDb21wb25lbnRgLlxuICAgICAqIElmIG5vdCBzZXQgaXMgdGhlIHNhbWUgYXMgbWF4IHZhbHVlLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXNsaWRlciBbc3RlcF09XCI1XCIgW3VwcGVyQm91bmRdPVwiMjBcIj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgdXBwZXJCb3VuZCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIGlmICh2YWx1ZSA8PSB0aGlzLmxvd2VyQm91bmQgfHwgKHRoaXMubGFiZWxzVmlld0VuYWJsZWQgJiYgdmFsdWUgPiB0aGlzLmxhYmVscy5sZW5ndGggLSAxKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fdXBwZXJCb3VuZCA9IHRoaXMudmFsdWVJblJhbmdlKHZhbHVlLCB0aGlzLm1pblZhbHVlLCB0aGlzLm1heFZhbHVlKTtcbiAgICAgICAgLy8gUmVmcmVzaCB0aW1lIHRyYXZlbCB6b25lLlxuICAgICAgICB0aGlzLl9wTWF4ID0gdGhpcy52YWx1ZVRvRnJhY3Rpb24odGhpcy5fdXBwZXJCb3VuZCwgMCwgMSk7XG4gICAgICAgIHRoaXMucG9zaXRpb25IYW5kbGVyc0FuZFVwZGF0ZVRyYWNrKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgc2xpZGVyIHZhbHVlLiBJZiB0aGUgc2xpZGVyIGlzIG9mIHR5cGUge0BsaW5rIElneFNsaWRlclR5cGUuU0xJREVSfSB0aGUgcmV0dXJuZWQgdmFsdWUgaXMgbnVtYmVyLlxuICAgICAqIElmIHRoZSBzbGlkZXIgdHlwZSBpcyB7QGxpbmsgSWd4U2xpZGVyVHlwZS5SQU5HRX0uXG4gICAgICogVGhlIHJldHVybmVkIHZhbHVlIHJlcHJlc2VudHMgYW4gb2JqZWN0IG9mIHtAbGluayBsb3dlclZhbHVlfSBhbmQge0BsaW5rIHVwcGVyVmFsdWV9LlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBAVmlld0NoaWxkKFwic2xpZGVyMlwiKVxuICAgICAqIHB1YmxpYyBzbGlkZXI6IElneFNsaWRlckNvbXBvbmVudDtcbiAgICAgKiBwdWJsaWMgc2xpZGVyVmFsdWUoZXZlbnQpe1xuICAgICAqICAgICBsZXQgc2xpZGVyVmFsID0gdGhpcy5zbGlkZXIudmFsdWU7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgdmFsdWUoKTogbnVtYmVyIHwgSVJhbmdlU2xpZGVyVmFsdWUge1xuICAgICAgICBpZiAodGhpcy5pc1JhbmdlKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGxvd2VyOiB0aGlzLnZhbHVlSW5SYW5nZSh0aGlzLmxvd2VyVmFsdWUsIHRoaXMubG93ZXJCb3VuZCwgdGhpcy51cHBlckJvdW5kKSxcbiAgICAgICAgICAgICAgICB1cHBlcjogdGhpcy52YWx1ZUluUmFuZ2UodGhpcy51cHBlclZhbHVlLCB0aGlzLmxvd2VyQm91bmQsIHRoaXMudXBwZXJCb3VuZClcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZUluUmFuZ2UodGhpcy51cHBlclZhbHVlLCB0aGlzLmxvd2VyQm91bmQsIHRoaXMudXBwZXJCb3VuZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzbGlkZXIgdmFsdWUuXG4gICAgICogSWYgdGhlIHNsaWRlciBpcyBvZiB0eXBlIHtAbGluayBJZ3hTbGlkZXJUeXBlLlNMSURFUn0uXG4gICAgICogVGhlIGFyZ3VtZW50IGlzIG51bWJlci4gQnkgZGVmYXVsdCB0aGUge0BsaW5rIHZhbHVlfSBnZXRzIHRoZSB7QGxpbmsgbG93ZXJCb3VuZH0uXG4gICAgICogSWYgdGhlIHNsaWRlciB0eXBlIGlzIHtAbGluayBJZ3hTbGlkZXJUeXBlLlJBTkdFfSB0aGUgYXJndW1lbnRcbiAgICAgKiByZXByZXNlbnRzIGFuIG9iamVjdCBvZiB7QGxpbmsgbG93ZXJWYWx1ZX0gYW5kIHtAbGluayB1cHBlclZhbHVlfSBwcm9wZXJ0aWVzLlxuICAgICAqIEJ5IGRlZmF1bHQgdGhlIG9iamVjdCBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIHtAbGluayBsb3dlckJvdW5kfSBhbmQge0BsaW5rIHVwcGVyQm91bmR9IHByb3BlcnR5IHZhbHVlcy5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogcmFuZ2VWYWx1ZSA9IHtcbiAgICAgKiAgIGxvd2VyOiAzMCxcbiAgICAgKiAgIHVwcGVyOiA2MFxuICAgICAqIH07XG4gICAgICogYGBgXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtc2xpZGVyIFt0eXBlXT1cInNsaWRlclR5cGVcIiBbKG5nTW9kZWwpXT1cInJhbmdlVmFsdWVcIiBbbWluVmFsdWVdPVwiNTZcIiBbbWF4VmFsdWVdPVwiMjU2XCI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IHZhbHVlKHZhbHVlOiBudW1iZXIgfCBJUmFuZ2VTbGlkZXJWYWx1ZSkge1xuICAgICAgICB0aGlzLm5vcm1hbGl6ZUJ5U3RlcCh2YWx1ZSk7XG5cbiAgICAgICAgaWYgKHRoaXMuX2hhc1ZpZXdJbml0KSB7XG4gICAgICAgICAgICB0aGlzLnNldFZhbHVlKHRoaXMuX3ZhbHVlLCB0cnVlKTtcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb25IYW5kbGVyc0FuZFVwZGF0ZVRyYWNrKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgdGhlIHByZXNlbnRlZCBwcmltYXJ5IHRpY2tzLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBjb25zdCBwcmltYXJ5VGlja3MgPSB0aGlzLnNsaWRlci5wcmltYXJ5VGlja3M7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IHByaW1hcnlUaWNrcygpIHtcbiAgICAgICAgaWYgKHRoaXMubGFiZWxzVmlld0VuYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9wcmltYXJ5VGlja3MgPSB0aGlzLmxhYmVscy5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX3ByaW1hcnlUaWNrcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBudW1iZXIgb2YgcHJpbWFyeSB0aWNrcy4gSWYge0BsaW5rIEBsYWJlbHN9IGlzIGVuYWJsZWQsIHRoaXMgcHJvcGVydHkgd29uJ3QgZnVuY3Rpb24uXG4gICAgICogSW5zdGVkIGVuYWJsZSB0aWNrcyBieSB7QGxpbmsgc2hvd1RpY2tzfSBwcm9wZXJ0eS5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5zbGlkZXIucHJpbWFyeVRpY2tzID0gNTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0IHByaW1hcnlUaWNrcyh2YWw6IG51bWJlcikge1xuICAgICAgICBpZiAodmFsIDw9IDEpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3ByaW1hcnlUaWNrcyA9IHZhbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgdGhlIHByZXNlbnRlZCBzZWNvbmRhcnkgdGlja3MuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIGNvbnN0IHNlY29uZGFyeVRpY2tzID0gdGhpcy5zbGlkZXIuc2Vjb25kYXJ5VGlja3M7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IHNlY29uZGFyeVRpY2tzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2Vjb25kYXJ5VGlja3M7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbnVtYmVyIG9mIHNlY29uZGFyeSB0aWNrcy4gVGhlIHByb3BlcnR5IGZ1bmN0aW9ucyBldmVuIHdoZW4ge0BsaW5rIGxhYmVsc30gaXMgZW5hYmxlZCxcbiAgICAgKiBidXQgYWxsIHNlY29uZGFyeSB0aWNrcyB3b24ndCBwcmVzZW50IGFueSB0aWNrIGxhYmVscy5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5zbGlkZXIuc2Vjb25kYXJ5VGlja3MgPSA1O1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBzZXQgc2Vjb25kYXJ5VGlja3ModmFsOiBudW1iZXIpIHtcbiAgICAgICAgaWYgKHZhbCA8IDEpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3NlY29uZGFyeVRpY2tzID0gdmFsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNob3cvaGlkZSBzbGlkZXIgdGlja3NcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1zbGllciBbc2hvd1RpY2tzXT1cInRydWVcIiBbcHJpbWFyeVRpY2tzXT1cIjVcIj48L2lneC1zbGllcj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgICBwdWJsaWMgc2hvd1RpY2tzID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBzaG93L2hpZGUgcHJpbWFyeSB0aWNrIGxhYmVsc1xuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXNsaWRlciBbcHJpbWFyeVRpY2tzXT1cIjVcIiBbcHJpbWFyeVRpY2tMYWJlbHNdPVwiZmFsc2VcIj48L2lneC1zbGlkZXI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gICAgcHVibGljIHByaW1hcnlUaWNrTGFiZWxzID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIHNob3cvaGlkZSBzZWNvbmRhcnkgdGljayBsYWJlbHNcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1zbGlkZXIgW3NlY29uZGFyeVRpY2tzXT1cIjVcIiBbc2Vjb25kYXJ5VGlja0xhYmVsc109XCJmYWxzZVwiPjwvaWd4LXNsaWRlcj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgICBwdWJsaWMgc2Vjb25kYXJ5VGlja0xhYmVscyA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBDaGFuZ2VzIHRpY2tzIG9yaWVudGF0aW9uOlxuICAgICAqIGJvdHRvbSAtIFRoZSBkZWZhdWx0IG9yaWVuYXRpb24sIGJlbG93IHRoZSBzbGlkZXIgdHJhY2suXG4gICAgICogdG9wIC0gQWJvdmUgdGhlIHNsaWRlciB0cmFja1xuICAgICAqIG1pcnJvciAtIGNvbWJpbmVzIHRvcCBhbmQgYm90dG9tIG9yaWVudGF0aW9uLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXNsaWRlciBbcHJpbWFyeVRpY2tzXT1cIjVcIiBbdGlja3NPcmllbnRhdGlvbl09XCJ0aWNrc09yaWVudGF0aW9uXCI+PC9pZ3gtc2xpZGVyPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHRpY2tzT3JpZW50YXRpb246IFRpY2tzT3JpZW50YXRpb24gPSBUaWNrc09yaWVudGF0aW9uLkJvdHRvbTtcblxuICAgIC8qKlxuICAgICAqIENoYW5nZXMgdGljayBsYWJlbHMgcm90YXRpb246XG4gICAgICogaG9yaXpvbnRhbCAtIFRoZSBkZWZhdWx0IHJvdGF0aW9uXG4gICAgICogdG9wdG9ib3R0b20gLSBSb3RhdGVzIHRpY2sgbGFiZWxzIHZlcnRpY2FsbHkgdG8gOTBkZWdcbiAgICAgKiBib3R0b210b3RvcCAtIFJvdGF0ZSB0aWNrIGxhYmVscyB2ZXJ0aWNhbGx5IHRvIC05MGRlZ1xuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXNsaWRlciBbcHJpbWFyeVRpY2tzXT1cIjVcIiBbc2Vjb25kYXJ5VGlja3NdPVwiM1wiIFt0aWNrTGFiZWxzT3JpZW50YXRpb25dPVwidGlja0xhYmVsc09yaWVudGFpdG9uXCI+PC9pZ3gtc2xpZGVyPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHRpY2tMYWJlbHNPcmllbnRhdGlvbjogVGlja0xhYmVsc09yaWVudGF0aW9uID0gVGlja0xhYmVsc09yaWVudGF0aW9uLkhvcml6b250YWw7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIGdldCBkZWFjdGl2YXRlVGh1bWJMYWJlbCgpIHtcbiAgICAgICAgcmV0dXJuICgodGhpcy5wcmltYXJ5VGlja3MgJiYgdGhpcy5wcmltYXJ5VGlja0xhYmVscykgfHwgKHRoaXMuc2Vjb25kYXJ5VGlja3MgJiYgdGhpcy5zZWNvbmRhcnlUaWNrTGFiZWxzKSkgJiZcbiAgICAgICAgICAgICh0aGlzLnRpY2tzT3JpZW50YXRpb24gPT09IFRpY2tzT3JpZW50YXRpb24uVG9wIHx8IHRoaXMudGlja3NPcmllbnRhdGlvbiA9PT0gVGlja3NPcmllbnRhdGlvbi5NaXJyb3IpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgZXZlbnQgaXMgZW1pdHRlZCBldmVyeSB0aW1lIHRoZSB2YWx1ZSBpcyBjaGFuZ2VkLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBwdWJsaWMgY2hhbmdlKGV2ZW50KXtcbiAgICAgKiAgICBhbGVydChcIlRoZSB2YWx1ZSBoYXMgYmVlbiBjaGFuZ2VkIVwiKTtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtc2xpZGVyICh2YWx1ZUNoYW5nZSk9XCJjaGFuZ2UoJGV2ZW50KVwiICNzbGlkZXIgWyhuZ01vZGVsKV09XCJ0YXNrLnBlcmNlbnRDb21wbGV0ZWRcIiBbc3RlcF09XCI1XCI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxJU2xpZGVyVmFsdWVDaGFuZ2VFdmVudEFyZ3M+KCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGV2ZW50IGlzIGVtaXR0ZWQgZXZlcnkgdGltZSB0aGUgbG93ZXIgdmFsdWUgb2YgYSByYW5nZSBzbGlkZXIgaXMgY2hhbmdlZC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogcHVibGljIGNoYW5nZSh2YWx1ZSl7XG4gICAgICogICAgYWxlcnQoYFRoZSBsb3dlciB2YWx1ZSBoYXMgYmVlbiBjaGFuZ2VkIHRvICR7dmFsdWV9YCk7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXNsaWRlciBbKGxvd2VyVmFsdWUpXT1cIm1vZGVsLmxvd2VydmFsdWVcIiAobG93ZXJWYWx1ZUNoYW5nZSk9XCJjaGFuZ2UoJGV2ZW50KVwiIFtzdGVwXT1cIjVcIj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgbG93ZXJWYWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBldmVudCBpcyBlbWl0dGVkIGV2ZXJ5IHRpbWUgdGhlIHVwcGVyIHZhbHVlIG9mIGEgcmFuZ2Ugc2xpZGVyIGlzIGNoYW5nZWQuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHB1YmxpYyBjaGFuZ2UodmFsdWUpe1xuICAgICAqICAgIGFsZXJ0KGBUaGUgdXBwZXIgdmFsdWUgaGFzIGJlZW4gY2hhbmdlZCB0byAke3ZhbHVlfWApO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1zbGlkZXIgWyh1cHBlclZhbHVlKV09XCJtb2RlbC51cHBlcnZhbHVlXCIgKHVwcGVyVmFsdWVDaGFuZ2UpPVwiY2hhbmdlKCRldmVudClcIiBbc3RlcF09XCI1XCI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHVwcGVyVmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgZXZlbnQgaXMgZW1pdHRlZCBhdCB0aGUgZW5kIG9mIGV2ZXJ5IHNsaWRlIGludGVyYWN0aW9uLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBwdWJsaWMgY2hhbmdlKGV2ZW50KXtcbiAgICAgKiAgICBhbGVydChcIlRoZSB2YWx1ZSBoYXMgYmVlbiBjaGFuZ2VkIVwiKTtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtc2xpZGVyIChkcmFnRmluaXNoZWQpPVwiY2hhbmdlKCRldmVudClcIiAjc2xpZGVyIFsobmdNb2RlbCldPVwidGFzay5wZXJjZW50Q29tcGxldGVkXCIgW3N0ZXBdPVwiNVwiPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBkcmFnRmluaXNoZWQgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlciB8IElSYW5nZVNsaWRlclZhbHVlPigpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGQoJ3RpY2tzJywgeyBzdGF0aWM6IHRydWUgfSlcbiAgICBwcml2YXRlIHRpY2tzOiBFbGVtZW50UmVmO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGRyZW4oSWd4U2xpZGVyVGh1bWJDb21wb25lbnQpXG4gICAgcHJpdmF0ZSB0aHVtYnM6IFF1ZXJ5TGlzdDxJZ3hTbGlkZXJUaHVtYkNvbXBvbmVudD4gPSBuZXcgUXVlcnlMaXN0PElneFNsaWRlclRodW1iQ29tcG9uZW50PigpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGRyZW4oSWd4VGh1bWJMYWJlbENvbXBvbmVudClcbiAgICBwcml2YXRlIGxhYmVsUmVmczogUXVlcnlMaXN0PElneFRodW1iTGFiZWxDb21wb25lbnQ+ID0gbmV3IFF1ZXJ5TGlzdDxJZ3hUaHVtYkxhYmVsQ29tcG9uZW50PigpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBvblBhbjogU3ViamVjdDxudW1iZXI+ID0gbmV3IFN1YmplY3Q8bnVtYmVyPigpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBzdGVwRGlzdGFuY2U6IG51bWJlcjtcblxuICAgIC8vIExpbWl0IGhhbmRsZSB0cmF2ZWwgem9uZVxuICAgIHByaXZhdGUgX3BNaW4gPSAwO1xuICAgIHByaXZhdGUgX3BNYXggPSAxO1xuXG4gICAgLy8gRnJvbS91cHBlclZhbHVlIGluIHBlcmNlbnQgdmFsdWVzXG4gICAgcHJpdmF0ZSBfaGFzVmlld0luaXQgPSBmYWxzZTtcbiAgICBwcml2YXRlIF9taW5WYWx1ZSA9IDA7XG4gICAgcHJpdmF0ZSBfbWF4VmFsdWUgPSAxMDA7XG4gICAgcHJpdmF0ZSBfbG93ZXJCb3VuZDogbnVtYmVyO1xuICAgIHByaXZhdGUgX3VwcGVyQm91bmQ6IG51bWJlcjtcbiAgICBwcml2YXRlIF9sb3dlclZhbHVlOiBudW1iZXI7XG4gICAgcHJpdmF0ZSBfdXBwZXJWYWx1ZTogbnVtYmVyO1xuICAgIHByaXZhdGUgX2NvbnRpbnVvdXMgPSBmYWxzZTtcbiAgICBwcml2YXRlIF9kaXNhYmxlZCA9IGZhbHNlO1xuICAgIHByaXZhdGUgX3N0ZXAgPSAxO1xuICAgIHByaXZhdGUgX3ZhbHVlOiBudW1iZXIgfCBJUmFuZ2VTbGlkZXJWYWx1ZSA9IDA7XG5cbiAgICAvLyB0aWNrc1xuICAgIHByaXZhdGUgX3ByaW1hcnlUaWNrcyA9IDA7XG4gICAgcHJpdmF0ZSBfc2Vjb25kYXJ5VGlja3MgPSAwO1xuICAgIHByaXZhdGUgX3NsaWRpbmcgPSBmYWxzZTtcblxuICAgIHByaXZhdGUgX2xhYmVscyA9IG5ldyBBcnJheTxudW1iZXIgfCBzdHJpbmcgfCBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZD4oKTtcbiAgICBwcml2YXRlIF90eXBlOiBJZ3hTbGlkZXJUeXBlID0gSWd4U2xpZGVyVHlwZS5TTElERVI7XG5cbiAgICBwcml2YXRlIF9kZXN0cm95ZXIkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcbiAgICBwcml2YXRlIF9pbmRpY2F0b3JzRGVzdHJveWVyJCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG4gICAgcHJpdmF0ZSBfaW5kaWNhdG9yc1RpbWVyOiBPYnNlcnZhYmxlPGFueT47XG5cbiAgICBwcml2YXRlIF9vbkNoYW5nZUNhbGxiYWNrOiAoXzogYW55KSA9PiB2b2lkID0gbm9vcDtcbiAgICBwcml2YXRlIF9vblRvdWNoZWRDYWxsYmFjazogKCkgPT4gdm9pZCA9IG5vb3A7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgICAgIHByaXZhdGUgX2VsOiBFbGVtZW50UmVmLFxuICAgICAgICBwcml2YXRlIF9jZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBwcml2YXRlIF9uZ1pvbmU6IE5nWm9uZSxcbiAgICAgICAgcHJpdmF0ZSBfZGlyOiBJZ3hEaXJlY3Rpb25hbGl0eSkge1xuICAgICAgICB0aGlzLnN0ZXBEaXN0YW5jZSA9IHRoaXMuX3N0ZXA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2ZvY3VzJylcbiAgICBwdWJsaWMgb25Gb2N1cygpIHtcbiAgICAgICAgdGhpcy50b2dnbGVTbGlkZXJJbmRpY2F0b3JzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB3aGV0aGVyIHRoZSBgSWd4U2xpZGVyQ29tcG9uZW50YCB0eXBlIGlzIFJBTkdFLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAgQFZpZXdDaGlsZChcInNsaWRlclwiKVxuICAgICAqIHB1YmxpYyBzbGlkZXI6IElneFNsaWRlckNvbXBvbmVudDtcbiAgICAgKiBuZ0FmdGVyVmlld0luaXQoKXtcbiAgICAgKiAgICAgbGV0IHNsaWRlclJhbmdlID0gdGhpcy5zbGlkZXIuaXNSYW5nZTtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGdldCBpc1JhbmdlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy50eXBlID09PSBJZ3hTbGlkZXJUeXBlLlJBTkdFO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGxvd2VyIHZhbHVlIG9mIGEgUkFOR0UgYElneFNsaWRlckNvbXBvbmVudGAuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIEBWaWV3Q2hpbGQoXCJzbGlkZXJcIilcbiAgICAgKiBwdWJsaWMgc2xpZGVyOiBJZ3hTbGlkZXJDb21wb25lbnQ7XG4gICAgICogcHVibGljIGxvd1ZhbHVlKGV2ZW50KXtcbiAgICAgKiAgICBsZXQgc2xpZGVyTG93VmFsdWUgPSB0aGlzLnNsaWRlci5sb3dlclZhbHVlO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGxvd2VyVmFsdWUoKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKCFOdW1iZXIuaXNOYU4odGhpcy5fbG93ZXJWYWx1ZSkgJiYgdGhpcy5fbG93ZXJWYWx1ZSAhPT0gdW5kZWZpbmVkICYmIHRoaXMuX2xvd2VyVmFsdWUgPj0gdGhpcy5sb3dlckJvdW5kKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbG93ZXJWYWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmxvd2VyQm91bmQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbG93ZXIgdmFsdWUgb2YgYSBSQU5HRSBgSWd4U2xpZGVyQ29tcG9uZW50YC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogQFZpZXdDaGlsZChcInNsaWRlclwiKVxuICAgICAqIHB1YmxpYyBzbGlkZXI6IElneFNsaWRlckNvbXBvbmVudDtcbiAgICAgKiBwdWJsaWMgbG93VmFsdWUoZXZlbnQpe1xuICAgICAqICAgIHRoaXMuc2xpZGVyLmxvd2VyVmFsdWUgPSB2YWx1ZTtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IGxvd2VyVmFsdWUodmFsdWU6IG51bWJlcikge1xuICAgICAgICBjb25zdCBhZGp1c3RlZFZhbHVlID0gdGhpcy52YWx1ZUluUmFuZ2UodmFsdWUsIHRoaXMubG93ZXJCb3VuZCwgdGhpcy51cHBlckJvdW5kKTtcbiAgICAgICAgaWYgKHRoaXMuX2xvd2VyVmFsdWUgIT09IGFkanVzdGVkVmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuX2xvd2VyVmFsdWUgPSBhZGp1c3RlZFZhbHVlO1xuICAgICAgICAgICAgdGhpcy5sb3dlclZhbHVlQ2hhbmdlLmVtaXQodGhpcy5fbG93ZXJWYWx1ZSk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0geyBsb3dlcjogdGhpcy5fbG93ZXJWYWx1ZSwgdXBwZXI6IHRoaXMuX3VwcGVyVmFsdWUgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHVwcGVyIHZhbHVlIG9mIGEgUkFOR0UgYElneFNsaWRlckNvbXBvbmVudGAuXG4gICAgICogUmV0dXJucyBgdmFsdWVgIG9mIGEgU0xJREVSIGBJZ3hTbGlkZXJDb21wb25lbnRgXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqICBAVmlld0NoaWxkKFwic2xpZGVyMlwiKVxuICAgICAqIHB1YmxpYyBzbGlkZXI6IElneFNsaWRlckNvbXBvbmVudDtcbiAgICAgKiBwdWJsaWMgdXBwZXJWYWx1ZShldmVudCl7XG4gICAgICogICAgIGxldCB1cHBlclZhbHVlID0gdGhpcy5zbGlkZXIudXBwZXJWYWx1ZTtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGdldCB1cHBlclZhbHVlKCkge1xuICAgICAgICBpZiAoIU51bWJlci5pc05hTih0aGlzLl91cHBlclZhbHVlKSAmJiB0aGlzLl91cHBlclZhbHVlICE9PSB1bmRlZmluZWQgJiYgdGhpcy5fdXBwZXJWYWx1ZSA8PSB0aGlzLnVwcGVyQm91bmQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl91cHBlclZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMudXBwZXJCb3VuZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSB1cHBlciB2YWx1ZSBvZiBhIFJBTkdFIGBJZ3hTbGlkZXJDb21wb25lbnRgLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAgQFZpZXdDaGlsZChcInNsaWRlcjJcIilcbiAgICAgKiBwdWJsaWMgc2xpZGVyOiBJZ3hTbGlkZXJDb21wb25lbnQ7XG4gICAgICogcHVibGljIHVwcGVyVmFsdWUoZXZlbnQpe1xuICAgICAqICAgICB0aGlzLnNsaWRlci51cHBlclZhbHVlID0gdmFsdWU7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCB1cHBlclZhbHVlKHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgYWRqdXN0ZWRWYWx1ZSA9IHRoaXMudmFsdWVJblJhbmdlKHZhbHVlLCB0aGlzLmxvd2VyQm91bmQsIHRoaXMudXBwZXJCb3VuZCk7XG4gICAgICAgIGlmICh0aGlzLl91cHBlclZhbHVlICE9PSBhZGp1c3RlZFZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLl91cHBlclZhbHVlID0gYWRqdXN0ZWRWYWx1ZTtcbiAgICAgICAgICAgIHRoaXMudXBwZXJWYWx1ZUNoYW5nZS5lbWl0KHRoaXMuX3VwcGVyVmFsdWUpO1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHsgbG93ZXI6IHRoaXMuX2xvd2VyVmFsdWUsIHVwcGVyOiB0aGlzLl91cHBlclZhbHVlIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBjb3JyZXNwb25kaW5nIHRoZSBsb3dlciBsYWJlbC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogQFZpZXdDaGlsZChcInNsaWRlclwiKVxuICAgICAqIHB1YmxpYyBzbGlkZXI6IElneFNsaWRlckNvbXBvbmVudDtcbiAgICAgKiBsZXQgbGFiZWwgPSB0aGlzLnNsaWRlci5sb3dlckxhYmVsO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgbG93ZXJMYWJlbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubGFiZWxzVmlld0VuYWJsZWQgPyB0aGlzLmxhYmVsc1t0aGlzLmxvd2VyVmFsdWVdIDogdGhpcy5sb3dlclZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHZhbHVlIGNvcnJlc3BvbmRpbmcgdGhlIHVwcGVyIGxhYmVsLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBAVmlld0NoaWxkKFwic2xpZGVyXCIpXG4gICAgICogcHVibGljIHNsaWRlcjogSWd4U2xpZGVyQ29tcG9uZW50O1xuICAgICAqIGxldCBsYWJlbCA9IHRoaXMuc2xpZGVyLnVwcGVyTGFiZWw7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGdldCB1cHBlckxhYmVsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sYWJlbHNWaWV3RW5hYmxlZCA/IHRoaXMubGFiZWxzW3RoaXMudXBwZXJWYWx1ZV0gOiB0aGlzLnVwcGVyVmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBpZiBsYWJlbCB2aWV3IGlzIGVuYWJsZWQuXG4gICAgICogSWYgdGhlIHtAbGluayBsYWJlbHN9IGlzIHNldCwgdGhlIHZpZXcgaXMgYXV0b21hdGljYWxseSBhY3RpdmF0ZWQuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIEBWaWV3Q2hpbGQoXCJzbGlkZXJcIilcbiAgICAgKiBwdWJsaWMgc2xpZGVyOiBJZ3hTbGlkZXJDb21wb25lbnQ7XG4gICAgICogbGV0IGxhYmVsVmlldyA9IHRoaXMuc2xpZGVyLmxhYmVsc1ZpZXdFbmFibGVkO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgbGFiZWxzVmlld0VuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhISh0aGlzLmxhYmVscyAmJiB0aGlzLmxhYmVscy5sZW5ndGggPiAxKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIGdldCBzaG93VG9wVGlja3MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRpY2tzT3JpZW50YXRpb24gPT09IFRpY2tzT3JpZW50YXRpb24uVG9wIHx8XG4gICAgICAgICAgICB0aGlzLnRpY2tzT3JpZW50YXRpb24gPT09IFRpY2tzT3JpZW50YXRpb24uTWlycm9yO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHNob3dCb3R0b21UaWNrcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGlja3NPcmllbnRhdGlvbiA9PT0gVGlja3NPcmllbnRhdGlvbi5Cb3R0b20gfHxcbiAgICAgICAgICAgIHRoaXMudGlja3NPcmllbnRhdGlvbiA9PT0gVGlja3NPcmllbnRhdGlvbi5NaXJyb3I7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgICAgIGlmIChjaGFuZ2VzLm1pblZhbHVlICYmIGNoYW5nZXMubWF4VmFsdWUgJiZcbiAgICAgICAgICAgIGNoYW5nZXMubWluVmFsdWUuY3VycmVudFZhbHVlIDwgY2hhbmdlcy5tYXhWYWx1ZS5jdXJyZW50VmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuX21heFZhbHVlID0gY2hhbmdlcy5tYXhWYWx1ZS5jdXJyZW50VmFsdWU7XG4gICAgICAgICAgICB0aGlzLl9taW5WYWx1ZSA9IGNoYW5nZXMubWluVmFsdWUuY3VycmVudFZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoYW5nZXMuc3RlcCAmJiBjaGFuZ2VzLnN0ZXAuaXNGaXJzdENoYW5nZSgpKSB7XG4gICAgICAgICAgICB0aGlzLm5vcm1hbGl6ZUJ5U3RlcCh0aGlzLl92YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIG5nT25Jbml0KCkge1xuICAgICAgICAvKipcbiAgICAgICAgICogaWYge0BsaW5rIFNsaWRlclR5cGUuU0xJREVSfSB0aGFuIHRoZSBpbml0aWFsIHZhbHVlIHNob2xkIGJlIHRoZSBsb3dlc3Qgb25lLlxuICAgICAgICAgKi9cbiAgICAgICAgaWYgKCF0aGlzLmlzUmFuZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuX3VwcGVyVmFsdWUgPSB0aGlzLmxvd2VyQm91bmQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTZXQgdHJhY2sgdHJhdmVsIHpvbmVcbiAgICAgICAgdGhpcy5fcE1pbiA9IHRoaXMudmFsdWVUb0ZyYWN0aW9uKHRoaXMubG93ZXJCb3VuZCkgfHwgMDtcbiAgICAgICAgdGhpcy5fcE1heCA9IHRoaXMudmFsdWVUb0ZyYWN0aW9uKHRoaXMudXBwZXJCb3VuZCkgfHwgMTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgICAgICB0aGlzLnNldFZhbHVlKHRoaXMuX3ZhbHVlLCBmYWxzZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIHRoaXMuX2hhc1ZpZXdJbml0ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zdGVwRGlzdGFuY2UgPSB0aGlzLmNhbGN1bGF0ZVN0ZXBEaXN0YW5jZSgpO1xuICAgICAgICB0aGlzLnBvc2l0aW9uSGFuZGxlcnNBbmRVcGRhdGVUcmFjaygpO1xuICAgICAgICB0aGlzLnNldFRpY2tJbnRlcnZhbCgpO1xuICAgICAgICB0aGlzLmNoYW5nZVRodW1iRm9jdXNhYmxlU3RhdGUodGhpcy5kaXNhYmxlZCk7XG5cbiAgICAgICAgdGhpcy5zdWJzY3JpYmVUb0V2ZW50cyh0aGlzLnRodW1iRnJvbSk7XG4gICAgICAgIHRoaXMuc3Vic2NyaWJlVG9FdmVudHModGhpcy50aHVtYlRvKTtcblxuICAgICAgICB0aGlzLnRodW1icy5jaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3llciQpKS5zdWJzY3JpYmUoY2hhbmdlID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRodW1iRnJvbSA9IGNoYW5nZS5maW5kKCh0aHVtYjogSWd4U2xpZGVyVGh1bWJDb21wb25lbnQpID0+IHRodW1iLnR5cGUgPT09IFNsaWRlckhhbmRsZS5GUk9NKTtcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb25IYW5kbGVyKHRodW1iRnJvbSwgbnVsbCwgdGhpcy5sb3dlclZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaWJlVG9FdmVudHModGh1bWJGcm9tKTtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlVGh1bWJGb2N1c2FibGVTdGF0ZSh0aGlzLmRpc2FibGVkKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5sYWJlbFJlZnMuY2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95ZXIkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGxhYmVsRnJvbSA9IHRoaXMubGFiZWxSZWZzLmZpbmQoKGxhYmVsOiBJZ3hUaHVtYkxhYmVsQ29tcG9uZW50KSA9PiBsYWJlbC50eXBlID09PSBTbGlkZXJIYW5kbGUuRlJPTSk7XG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uSGFuZGxlcihudWxsLCBsYWJlbEZyb20sIHRoaXMubG93ZXJWYWx1ZSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICByZXNpemVPYnNlcnZhYmxlKHRoaXMuX2VsLm5hdGl2ZUVsZW1lbnQpLnBpcGUoXG4gICAgICAgICAgICAgICAgdGhyb3R0bGVUaW1lKDQwKSxcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveWVyJCkpLnN1YnNjcmliZSgoKSA9PiB0aGlzLl9uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGVwRGlzdGFuY2UgPSB0aGlzLmNhbGN1bGF0ZVN0ZXBEaXN0YW5jZSgpO1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIGZyb21FdmVudCh0aGlzLl9lbC5uYXRpdmVFbGVtZW50LCAncG9pbnRlcm1vdmUnKS5waXBlKFxuICAgICAgICAgICAgICAgIHRocm90dGxlKCgpID0+IGludGVydmFsKDAsIGFuaW1hdGlvbkZyYW1lU2NoZWR1bGVyKSksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3llciQpKS5zdWJzY3JpYmUoKCRldmVudDogUG9pbnRlckV2ZW50KSA9PiB0aGlzLl9uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vblBvaW50ZXJNb3ZlKCRldmVudCk7XG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLl9kZXN0cm95ZXIkLm5leHQodHJ1ZSk7XG4gICAgICAgIHRoaXMuX2Rlc3Ryb3llciQuY29tcGxldGUoKTtcblxuICAgICAgICB0aGlzLl9pbmRpY2F0b3JzRGVzdHJveWVyJC5uZXh0KHRydWUpO1xuICAgICAgICB0aGlzLl9pbmRpY2F0b3JzRGVzdHJveWVyJC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgd3JpdGVWYWx1ZSh2YWx1ZTogSVJhbmdlU2xpZGVyVmFsdWUgfCBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaXNOdWxsaXNoQnV0Tm90WmVybyh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubm9ybWFsaXplQnlTdGVwKHZhbHVlKTtcbiAgICAgICAgdGhpcy5zZXRWYWx1ZSh0aGlzLl92YWx1ZSwgZmFsc2UpO1xuICAgICAgICB0aGlzLnBvc2l0aW9uSGFuZGxlcnNBbmRVcGRhdGVUcmFjaygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2sgPSBmbjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fb25Ub3VjaGVkQ2FsbGJhY2sgPSBmbjtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHB1YmxpYyBnZXRFZGl0RWxlbWVudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNSYW5nZSA/IHRoaXMudGh1bWJGcm9tLm5hdGl2ZUVsZW1lbnQgOiB0aGlzLnRodW1iVG8ubmF0aXZlRWxlbWVudDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgdXBkYXRlKG1vdXNlWCkge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVXBkYXRlIFRvL0Zyb20gVmFsdWVzXG4gICAgICAgIHRoaXMub25QYW4ubmV4dChtb3VzZVgpO1xuXG4gICAgICAgIC8vIEZpbmFsbHkgZG8gcG9zaXRpb25IYW5kbGVyc0FuZFVwZGF0ZVRyYWNrIHRoZSBET01cbiAgICAgICAgLy8gYmFzZWQgb24gZGF0YSB2YWx1ZXNcbiAgICAgICAgdGhpcy5wb3NpdGlvbkhhbmRsZXJzQW5kVXBkYXRlVHJhY2soKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIHRodW1iQ2hhbmdlZCh2YWx1ZTogbnVtYmVyLCB0aHVtYlR5cGU6IHN0cmluZykge1xuICAgICAgICBjb25zdCBvbGRWYWx1ZSA9IHRoaXMudmFsdWU7XG5cbiAgICAgICAgaWYgKHRoaXMuaXNSYW5nZSkge1xuICAgICAgICAgICAgaWYgKHRodW1iVHlwZSA9PT0gU2xpZGVySGFuZGxlLkZST00pIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5sb3dlclZhbHVlICsgdmFsdWUgPiB0aGlzLnVwcGVyVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cHBlclZhbHVlID0gdGhpcy5sb3dlclZhbHVlICsgdmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMubG93ZXJWYWx1ZSArPSB2YWx1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMudXBwZXJWYWx1ZSArIHZhbHVlIDwgdGhpcy5sb3dlclZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG93ZXJWYWx1ZSA9IHRoaXMudXBwZXJWYWx1ZSArIHZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnVwcGVyVmFsdWUgKz0gdmFsdWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IG5ld1ZhbDogSVJhbmdlU2xpZGVyVmFsdWUgPSB7XG4gICAgICAgICAgICAgICAgbG93ZXI6IHRoaXMubG93ZXJWYWx1ZSxcbiAgICAgICAgICAgICAgICB1cHBlcjogdGhpcy51cHBlclZhbHVlXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFN3YXAgdGhlIHRodW1icyBpZiBhIGNvbGxpc2lvbiBhcHBlYXJzLlxuICAgICAgICAgICAgLy8gaWYgKG5ld1ZhbC5sb3dlciA9PSBuZXdWYWwudXBwZXIpIHtcbiAgICAgICAgICAgIC8vICAgICB0aGlzLnRvZ2dsZVRodW1iKCk7XG4gICAgICAgICAgICAvLyB9XG5cbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBuZXdWYWw7XG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld1ZhbCA9ICh0aGlzLnZhbHVlIGFzIG51bWJlcikgKyB2YWx1ZTtcbiAgICAgICAgICAgIGlmIChuZXdWYWwgPj0gdGhpcy5sb3dlckJvdW5kICYmIG5ld1ZhbCA8PSB0aGlzLnVwcGVyQm91bmQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlID0gbmV3VmFsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaGFzVmFsdWVDaGFuZ2VkKG9sZFZhbHVlKSkge1xuICAgICAgICAgICAgdGhpcy5lbWl0VmFsdWVDaGFuZ2Uob2xkVmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBvblRodW1iQ2hhbmdlKCkge1xuICAgICAgICB0aGlzLnRvZ2dsZVNsaWRlckluZGljYXRvcnMoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIG9uSG92ZXJDaGFuZ2Uoc3RhdGU6IGJvb2xlYW4pIHtcbiAgICAgICAgcmV0dXJuIHN0YXRlID8gdGhpcy5zaG93U2xpZGVySW5kaWNhdG9ycygpIDogdGhpcy5oaWRlU2xpZGVySW5kaWNhdG9ycygpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRWYWx1ZSh2YWx1ZTogbnVtYmVyIHwgSVJhbmdlU2xpZGVyVmFsdWUsIHRyaWdnZXJDaGFuZ2U6IGJvb2xlYW4pIHtcbiAgICAgICAgbGV0IHJlcztcbiAgICAgICAgaWYgKCF0aGlzLmlzUmFuZ2UpIHtcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUgYXMgbnVtYmVyO1xuICAgICAgICAgICAgaWYgKCFpc05hTih2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl91cHBlclZhbHVlID0gdmFsdWUgLSB2YWx1ZSAlIHRoaXMuc3RlcDtcbiAgICAgICAgICAgICAgICByZXMgPSB0aGlzLnVwcGVyVmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHRoaXMudmFsaWRhdGVJbml0aWFsVmFsdWUodmFsdWUgYXMgSVJhbmdlU2xpZGVyVmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5fdXBwZXJWYWx1ZSA9IHZhbHVlLnVwcGVyO1xuICAgICAgICAgICAgdGhpcy5fbG93ZXJWYWx1ZSA9IHZhbHVlLmxvd2VyO1xuICAgICAgICAgICAgcmVzID0geyBsb3dlcjogdGhpcy5sb3dlclZhbHVlLCB1cHBlcjogdGhpcy51cHBlclZhbHVlIH07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHJpZ2dlckNoYW5nZSkge1xuICAgICAgICAgICAgdGhpcy5fb25DaGFuZ2VDYWxsYmFjayhyZXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcigncG9pbnRlcmRvd24nLCBbJyRldmVudCddKVxuICAgIHByaXZhdGUgb25Qb2ludGVyRG93bigkZXZlbnQ6IFBvaW50ZXJFdmVudCkge1xuICAgICAgICB0aGlzLmZpbmRDbG9zZXN0VGh1bWIoJGV2ZW50KTtcblxuICAgICAgICBpZiAoIXRoaXMudGh1bWJUby5pc0FjdGl2ZSAmJiB0aGlzLnRodW1iRnJvbSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9zbGlkaW5nID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgYWN0aXZlVGh1bWIgPSB0aGlzLnRodW1iVG8uaXNBY3RpdmUgPyB0aGlzLnRodW1iVG8gOiB0aGlzLnRodW1iRnJvbTtcbiAgICAgICAgYWN0aXZlVGh1bWIubmF0aXZlRWxlbWVudC5zZXRQb2ludGVyQ2FwdHVyZSgkZXZlbnQucG9pbnRlcklkKTtcbiAgICAgICAgdGhpcy5zaG93U2xpZGVySW5kaWNhdG9ycygpO1xuXG4gICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25Qb2ludGVyTW92ZSgkZXZlbnQ6IFBvaW50ZXJFdmVudCkge1xuICAgICAgICBpZiAodGhpcy5fc2xpZGluZykge1xuICAgICAgICAgICAgdGhpcy51cGRhdGUoJGV2ZW50LmNsaWVudFgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcigncG9pbnRlcnVwJywgWyckZXZlbnQnXSlcbiAgICBwcml2YXRlIG9uUG9pbnRlclVwKCRldmVudDogUG9pbnRlckV2ZW50KSB7XG4gICAgICAgIGlmICghdGhpcy50aHVtYlRvLmlzQWN0aXZlICYmIHRoaXMudGh1bWJGcm9tID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFjdGl2ZVRodW1iID0gdGhpcy50aHVtYlRvLmlzQWN0aXZlID8gdGhpcy50aHVtYlRvIDogdGhpcy50aHVtYkZyb207XG4gICAgICAgIGFjdGl2ZVRodW1iLm5hdGl2ZUVsZW1lbnQucmVsZWFzZVBvaW50ZXJDYXB0dXJlKCRldmVudC5wb2ludGVySWQpO1xuXG4gICAgICAgIHRoaXMuX3NsaWRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5oaWRlU2xpZGVySW5kaWNhdG9ycygpO1xuICAgICAgICB0aGlzLmRyYWdGaW5pc2hlZC5lbWl0KHRoaXMudmFsdWUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdmFsaWRhdGVJbml0aWFsVmFsdWUodmFsdWU6IElSYW5nZVNsaWRlclZhbHVlKSB7XG4gICAgICAgIGlmICh2YWx1ZS51cHBlciA8IHZhbHVlLmxvd2VyKSB7XG4gICAgICAgICAgICBjb25zdCB0ZW1wID0gdmFsdWUudXBwZXI7XG4gICAgICAgICAgICB2YWx1ZS51cHBlciA9IHZhbHVlLmxvd2VyO1xuICAgICAgICAgICAgdmFsdWUubG93ZXIgPSB0ZW1wO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbHVlLmxvd2VyIDwgdGhpcy5sb3dlckJvdW5kKSB7XG4gICAgICAgICAgICB2YWx1ZS5sb3dlciA9IHRoaXMubG93ZXJCb3VuZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2YWx1ZS51cHBlciA+IHRoaXMudXBwZXJCb3VuZCkge1xuICAgICAgICAgICAgdmFsdWUudXBwZXIgPSB0aGlzLnVwcGVyQm91bmQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmaW5kQ2xvc2VzdFRodW1iKGV2ZW50OiBQb2ludGVyRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNSYW5nZSkge1xuICAgICAgICAgICAgdGhpcy5jbG9zZXN0SGFuZGxlKGV2ZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudGh1bWJUby5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnVwZGF0ZShldmVudC5jbGllbnRYKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZUxvd2VyQm91bmRBbmRNaW5UcmF2ZWxab25lKCkge1xuICAgICAgICB0aGlzLmxvd2VyQm91bmQgPSB0aGlzLm1pblZhbHVlO1xuICAgICAgICB0aGlzLl9wTWluID0gMDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZVVwcGVyQm91bmRBbmRNYXhUcmF2ZWxab25lKCkge1xuICAgICAgICB0aGlzLnVwcGVyQm91bmQgPSB0aGlzLm1heFZhbHVlO1xuICAgICAgICB0aGlzLl9wTWF4ID0gMTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNhbGN1bGF0ZVN0ZXBEaXN0YW5jZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VsLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggLyAodGhpcy5tYXhWYWx1ZSAtIHRoaXMubWluVmFsdWUpICogdGhpcy5zdGVwO1xuICAgIH1cblxuICAgIC8vIHByaXZhdGUgdG9nZ2xlVGh1bWIoKSB7XG4gICAgLy8gICAgIHJldHVybiB0aGlzLnRodW1iRnJvbS5pc0FjdGl2ZSA/XG4gICAgLy8gICAgICAgICB0aGlzLnRodW1iVG8ubmF0aXZlRWxlbWVudC5mb2N1cygpIDpcbiAgICAvLyAgICAgICAgIHRoaXMudGh1bWJGcm9tLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAvLyB9XG5cbiAgICBwcml2YXRlIHZhbHVlSW5SYW5nZSh2YWx1ZSwgbWluID0gMCwgbWF4ID0gMTAwKSB7XG4gICAgICAgIHJldHVybiBNYXRoLm1heChNYXRoLm1pbih2YWx1ZSwgbWF4KSwgbWluKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHBvc2l0aW9uSGFuZGxlcih0aHVtYkhhbmRsZTogRWxlbWVudFJlZiwgbGFiZWxIYW5kbGU6IEVsZW1lbnRSZWYsIHBvc2l0aW9uOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgcGVyY2VudCA9IGAke3RoaXMudmFsdWVUb0ZyYWN0aW9uKHBvc2l0aW9uKSAqIDEwMH0lYDtcbiAgICAgICAgY29uc3QgZGlyID0gdGhpcy5fZGlyLnJ0bCA/ICdyaWdodCcgOiAnbGVmdCc7XG5cbiAgICAgICAgaWYgKHRodW1iSGFuZGxlKSB7XG4gICAgICAgICAgICB0aHVtYkhhbmRsZS5uYXRpdmVFbGVtZW50LnN0eWxlW2Rpcl0gPSBwZXJjZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGxhYmVsSGFuZGxlKSB7XG4gICAgICAgICAgICBsYWJlbEhhbmRsZS5uYXRpdmVFbGVtZW50LnN0eWxlW2Rpcl0gPSBwZXJjZW50O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwb3NpdGlvbkhhbmRsZXJzQW5kVXBkYXRlVHJhY2soKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1JhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uSGFuZGxlcih0aGlzLnRodW1iVG8sIHRoaXMubGFiZWxUbywgdGhpcy52YWx1ZSBhcyBudW1iZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5wb3NpdGlvbkhhbmRsZXIodGhpcy50aHVtYlRvLCB0aGlzLmxhYmVsVG8sICh0aGlzLnZhbHVlIGFzIElSYW5nZVNsaWRlclZhbHVlKS51cHBlcik7XG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uSGFuZGxlcih0aGlzLnRodW1iRnJvbSwgdGhpcy5sYWJlbEZyb20sICh0aGlzLnZhbHVlIGFzIElSYW5nZVNsaWRlclZhbHVlKS5sb3dlcik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5faGFzVmlld0luaXQpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlVHJhY2soKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgY2xvc2VzdEhhbmRsZShldmVudDogUG9pbnRlckV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGZyb21PZmZzZXQgPSB0aGlzLnRodW1iRnJvbS5uYXRpdmVFbGVtZW50Lm9mZnNldExlZnQgKyB0aGlzLnRodW1iRnJvbS5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoIC8gMjtcbiAgICAgICAgY29uc3QgdG9PZmZzZXQgPSB0aGlzLnRodW1iVG8ubmF0aXZlRWxlbWVudC5vZmZzZXRMZWZ0ICsgdGhpcy50aHVtYlRvLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGggLyAyO1xuICAgICAgICBjb25zdCB4UG9pbnRlciA9IGV2ZW50LmNsaWVudFggLSB0aGlzLl9lbC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQ7XG4gICAgICAgIGNvbnN0IG1hdGNoID0gdGhpcy5jbG9zZXN0VG8oeFBvaW50ZXIsIFtmcm9tT2Zmc2V0LCB0b09mZnNldF0pO1xuXG4gICAgICAgIGlmIChmcm9tT2Zmc2V0ID09PSB0b09mZnNldCAmJiB0b09mZnNldCA8IHhQb2ludGVyKSB7XG4gICAgICAgICAgICB0aGlzLnRodW1iVG8ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB9IGVsc2UgaWYgKGZyb21PZmZzZXQgPT09IHRvT2Zmc2V0ICYmIHRvT2Zmc2V0ID4geFBvaW50ZXIpIHtcbiAgICAgICAgICAgIHRoaXMudGh1bWJGcm9tLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfSBlbHNlIGlmIChtYXRjaCA9PT0gZnJvbU9mZnNldCkge1xuICAgICAgICAgICAgdGhpcy50aHVtYkZyb20ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy50aHVtYlRvLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2V0VGlja0ludGVydmFsKCkge1xuICAgICAgICBsZXQgdGlja0ludGVydmFsO1xuICAgICAgICBjb25zdCB0cmFja1Byb2dyZXNzID0gMTAwO1xuXG4gICAgICAgIGlmICh0aGlzLmxhYmVsc1ZpZXdFbmFibGVkKSB7XG4gICAgICAgICAgICAvLyBDYWxjIHRpY2tzIGRlcGVuZGluZyBvbiB0aGUgbGFiZWxzIGxlbmd0aDtcbiAgICAgICAgICAgIHRpY2tJbnRlcnZhbCA9ICgodHJhY2tQcm9ncmVzcyAvICh0aGlzLmxhYmVscy5sZW5ndGggLSAxKSAqIDEwKSkgLyAxMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHRyYWNrUmFuZ2UgPSB0aGlzLm1heFZhbHVlIC0gdGhpcy5taW5WYWx1ZTtcbiAgICAgICAgICAgIHRpY2tJbnRlcnZhbCA9IHRoaXMuc3RlcCA+IDEgP1xuICAgICAgICAgICAgICAgICh0cmFja1Byb2dyZXNzIC8gKCh0cmFja1JhbmdlIC8gdGhpcy5zdGVwKSkgKiAxMCkgLyAxMFxuICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy50aWNrcy5uYXRpdmVFbGVtZW50LCAnc3Ryb2tlLWRhc2hhcnJheScsIGAwLCAke3RpY2tJbnRlcnZhbCAqIE1hdGguc3FydCgyKX0lYCk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy50aWNrcy5uYXRpdmVFbGVtZW50LCAndmlzaWJpbGl0eScsIHRoaXMuY29udGludW91cyB8fCB0aWNrSW50ZXJ2YWwgPT09IG51bGwgPyAnaGlkZGVuJyA6ICd2aXNpYmxlJyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzaG93U2xpZGVySW5kaWNhdG9ycygpIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9pbmRpY2F0b3JzVGltZXIpIHtcbiAgICAgICAgICAgIHRoaXMuX2luZGljYXRvcnNEZXN0cm95ZXIkLm5leHQodHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLl9pbmRpY2F0b3JzVGltZXIgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50aHVtYlRvLnNob3dUaHVtYkluZGljYXRvcnMoKTtcbiAgICAgICAgdGhpcy5sYWJlbFRvLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgIGlmICh0aGlzLnRodW1iRnJvbSkge1xuICAgICAgICAgICAgdGhpcy50aHVtYkZyb20uc2hvd1RodW1iSW5kaWNhdG9ycygpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMubGFiZWxGcm9tKSB7XG4gICAgICAgICAgICB0aGlzLmxhYmVsRnJvbS5hY3RpdmUgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICB9XG5cbiAgICBwcml2YXRlIGhpZGVTbGlkZXJJbmRpY2F0b3JzKCkge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5faW5kaWNhdG9yc1RpbWVyID0gdGltZXIodGhpcy50aHVtYkxhYmVsVmlzaWJpbGl0eUR1cmF0aW9uKTtcbiAgICAgICAgdGhpcy5faW5kaWNhdG9yc1RpbWVyLnBpcGUodGFrZVVudGlsKHRoaXMuX2luZGljYXRvcnNEZXN0cm95ZXIkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudGh1bWJUby5oaWRlVGh1bWJJbmRpY2F0b3JzKCk7XG4gICAgICAgICAgICB0aGlzLmxhYmVsVG8uYWN0aXZlID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAodGhpcy50aHVtYkZyb20pIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRodW1iRnJvbS5oaWRlVGh1bWJJbmRpY2F0b3JzKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmxhYmVsRnJvbSkge1xuICAgICAgICAgICAgICAgIHRoaXMubGFiZWxGcm9tLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHRvZ2dsZVNsaWRlckluZGljYXRvcnMoKSB7XG4gICAgICAgIHRoaXMuc2hvd1NsaWRlckluZGljYXRvcnMoKTtcbiAgICAgICAgdGhpcy5oaWRlU2xpZGVySW5kaWNhdG9ycygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2hhbmdlVGh1bWJGb2N1c2FibGVTdGF0ZShzdGF0ZTogYm9vbGVhbikge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHN0YXRlID8gLTEgOiAxO1xuXG4gICAgICAgIGlmICh0aGlzLmlzUmFuZ2UpIHtcbiAgICAgICAgICAgIHRoaXMudGh1bWJGcm9tLnRhYmluZGV4ID0gdmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRodW1iVG8udGFiaW5kZXggPSB2YWx1ZTtcblxuICAgICAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2xvc2VzdFRvKGdvYWw6IG51bWJlciwgcG9zaXRpb25zOiBudW1iZXJbXSk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiBwb3NpdGlvbnMucmVkdWNlKChwcmV2aW91cywgY3VycmVudCkgPT4gKE1hdGguYWJzKGdvYWwgLSBjdXJyZW50KSA8IE1hdGguYWJzKGdvYWwgLSBwcmV2aW91cykgPyBjdXJyZW50IDogcHJldmlvdXMpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHZhbHVlVG9GcmFjdGlvbih2YWx1ZTogbnVtYmVyLCBwTWluID0gdGhpcy5fcE1pbiwgcE1heCA9IHRoaXMuX3BNYXgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVJblJhbmdlKCh2YWx1ZSAtIHRoaXMubWluVmFsdWUpIC8gKHRoaXMubWF4VmFsdWUgLSB0aGlzLm1pblZhbHVlKSwgcE1pbiwgcE1heCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc051bGxpc2hCdXROb3RaZXJvKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICF2YWx1ZSAmJiB2YWx1ZSAhPT0gMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTm9ybWFsaXrQtSB0aGUgdmFsdWUgd2hlbiB0d28td2F5IGRhdGEgYmluZCBpcyB1c2VkIGFuZCB7QGxpbmsgdGhpcy5zdGVwfSBpcyBzZXQuXG4gICAgICogQHBhcmFtIHZhbHVlXG4gICAgICovXG4gICAgcHJpdmF0ZSBub3JtYWxpemVCeVN0ZXAodmFsdWU6IElSYW5nZVNsaWRlclZhbHVlIHwgbnVtYmVyKSB7XG4gICAgICAgIGlmICh0aGlzLmlzUmFuZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0ge1xuICAgICAgICAgICAgICAgIGxvd2VyOiAodmFsdWUgYXMgSVJhbmdlU2xpZGVyVmFsdWUpLmxvd2VyIC0gKCh2YWx1ZSBhcyBJUmFuZ2VTbGlkZXJWYWx1ZSkubG93ZXIgJSB0aGlzLnN0ZXApLFxuICAgICAgICAgICAgICAgIHVwcGVyOiAodmFsdWUgYXMgSVJhbmdlU2xpZGVyVmFsdWUpLnVwcGVyIC0gKCh2YWx1ZSBhcyBJUmFuZ2VTbGlkZXJWYWx1ZSkudXBwZXIgJSB0aGlzLnN0ZXApXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSAodmFsdWUgYXMgbnVtYmVyKSAtICgodmFsdWUgYXMgbnVtYmVyKSAlIHRoaXMuc3RlcCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZVRyYWNrKCkge1xuICAgICAgICBjb25zdCBmcm9tUG9zaXRpb24gPSB0aGlzLnZhbHVlVG9GcmFjdGlvbih0aGlzLmxvd2VyVmFsdWUpO1xuICAgICAgICBjb25zdCB0b1Bvc2l0aW9uID0gdGhpcy52YWx1ZVRvRnJhY3Rpb24odGhpcy51cHBlclZhbHVlKTtcbiAgICAgICAgY29uc3QgcG9zaXRpb25HYXAgPSB0b1Bvc2l0aW9uIC0gZnJvbVBvc2l0aW9uO1xuXG4gICAgICAgIGxldCB0cmFja0xlZnRJbmRlbnRpb24gPSBmcm9tUG9zaXRpb247XG4gICAgICAgIGlmICh0aGlzLmlzUmFuZ2UpIHtcbiAgICAgICAgICAgIGlmIChwb3NpdGlvbkdhcCkge1xuICAgICAgICAgICAgICAgIHRyYWNrTGVmdEluZGVudGlvbiA9IE1hdGgucm91bmQoKDEgLyBwb3NpdGlvbkdhcCAqIGZyb21Qb3NpdGlvbikgKiAxMDApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0cmFja0xlZnRJbmRlbnRpb24gPSB0aGlzLl9kaXIucnRsID8gLXRyYWNrTGVmdEluZGVudGlvbiA6IHRyYWNrTGVmdEluZGVudGlvbjtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy50cmFja1JlZi5uYXRpdmVFbGVtZW50LCAndHJhbnNmb3JtJywgYHNjYWxlWCgke3Bvc2l0aW9uR2FwfSkgdHJhbnNsYXRlWCgke3RyYWNrTGVmdEluZGVudGlvbn0lKWApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnRyYWNrUmVmLm5hdGl2ZUVsZW1lbnQsICd0cmFuc2Zvcm0nLCBgc2NhbGVYKCR7dG9Qb3NpdGlvbn0pYCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHN1YnNjcmliZVRvRXZlbnRzKHRodW1iOiBJZ3hTbGlkZXJUaHVtYkNvbXBvbmVudCkge1xuICAgICAgICBpZiAoIXRodW1iKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aHVtYi50aHVtYlZhbHVlQ2hhbmdlXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZXIodGh1bWIpKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUodmFsdWUgPT4gdGhpcy50aHVtYkNoYW5nZWQodmFsdWUsIHRodW1iLnR5cGUpKTtcblxuICAgICAgICB0aHVtYi50aHVtYkJsdXJcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlcih0aHVtYikpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLl9vblRvdWNoZWRDYWxsYmFjaygpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVuc3Vic2NyaWJlcih0aHVtYjogSWd4U2xpZGVyVGh1bWJDb21wb25lbnQpIHtcbiAgICAgICAgcmV0dXJuIG1lcmdlKHRoaXMuX2Rlc3Ryb3llciQsIHRodW1iLmRlc3Ryb3kpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFzVmFsdWVDaGFuZ2VkKG9sZFZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGlzU2xpZGVyV2l0aERpZmZlcmVudFZhbHVlOiBib29sZWFuID0gIXRoaXMuaXNSYW5nZSAmJiBvbGRWYWx1ZSAhPT0gdGhpcy52YWx1ZTtcbiAgICAgICAgY29uc3QgaXNSYW5nZVdpdGhPbmVEaWZmZXJlbnRWYWx1ZTogYm9vbGVhbiA9IHRoaXMuaXNSYW5nZSAmJlxuICAgICAgICAgICAgKChvbGRWYWx1ZSBhcyBJUmFuZ2VTbGlkZXJWYWx1ZSkubG93ZXIgIT09ICh0aGlzLnZhbHVlIGFzIElSYW5nZVNsaWRlclZhbHVlKS5sb3dlciB8fFxuICAgICAgICAgICAgICAgIChvbGRWYWx1ZSBhcyBJUmFuZ2VTbGlkZXJWYWx1ZSkudXBwZXIgIT09ICh0aGlzLnZhbHVlIGFzIElSYW5nZVNsaWRlclZhbHVlKS51cHBlcik7XG5cbiAgICAgICAgcmV0dXJuIGlzU2xpZGVyV2l0aERpZmZlcmVudFZhbHVlIHx8IGlzUmFuZ2VXaXRoT25lRGlmZmVyZW50VmFsdWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBlbWl0VmFsdWVDaGFuZ2Uob2xkVmFsdWU6IG51bWJlciB8IElSYW5nZVNsaWRlclZhbHVlKSB7XG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh7IG9sZFZhbHVlLCB2YWx1ZTogdGhpcy52YWx1ZSB9KTtcbiAgICB9XG59XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5cbiIsIjxpZ3gtdGlja3NcbiAgICAqbmdJZj1cInNob3dUaWNrcyAmJiBzaG93VG9wVGlja3NcIlxuICAgIHRpY2tzT3JpZW50YXRpb249XCJ0b3BcIlxuICAgIFtwcmltYXJ5VGlja3NdPVwicHJpbWFyeVRpY2tzXCJcbiAgICBbc2Vjb25kYXJ5VGlja3NdPVwic2Vjb25kYXJ5VGlja3NcIlxuICAgIFtwcmltYXJ5VGlja0xhYmVsc109XCJwcmltYXJ5VGlja0xhYmVsc1wiXG4gICAgW3NlY29uZGFyeVRpY2tMYWJlbHNdPVwic2Vjb25kYXJ5VGlja0xhYmVsc1wiXG4gICAgW3RpY2tMYWJlbHNPcmllbnRhdGlvbl09XCJ0aWNrTGFiZWxzT3JpZW50YXRpb25cIlxuICAgIFtsYWJlbHNWaWV3RW5hYmxlZF09XCJsYWJlbHNWaWV3RW5hYmxlZFwiXG4gICAgW2xhYmVsc109XCJsYWJlbHMgfCBzcHJlYWRUaWNrTGFiZWxzOnNlY29uZGFyeVRpY2tzXCJcbiAgICBbdGlja0xhYmVsVGVtcGxhdGVSZWZdPVwidGlja0xhYmVsVGVtcGxhdGVSZWZcIlxuICAgIFttaW5WYWx1ZV09XCJtaW5WYWx1ZVwiXG4gICAgW21heFZhbHVlXT1cIm1heFZhbHVlXCI+XG48L2lneC10aWNrcz5cbjxkaXYgY2xhc3M9XCJpZ3gtc2xpZGVyX190cmFja1wiPlxuICAgIDxkaXYgY2xhc3M9XCJpZ3gtc2xpZGVyX190cmFjay1pbmFjdGl2ZVwiPjwvZGl2PlxuICAgIDxkaXYgI3RyYWNrIGNsYXNzPVwiaWd4LXNsaWRlcl9fdHJhY2stZmlsbFwiPjwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJpZ3gtc2xpZGVyX190cmFjay1zdGVwc1wiPlxuICAgICAgICA8c3ZnIHdpZHRoPVwiMTAwJVwiIGhlaWdodD1cIjEwMCVcIj5cbiAgICAgICAgICA8bGluZSAjdGlja3MgeDE9XCIwXCIgeTE9XCIyXCIgeDI9XCIxMDAlXCIgeTI9XCIyXCI+PC9saW5lPlxuICAgICAgICA8L3N2Zz5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuPGRpdiBjbGFzcz1cImlneC1zbGlkZXJfX3RodW1ic1wiPlxuICAgIDxpZ3gtdGh1bWItbGFiZWxcbiAgICAgICAgKm5nSWY9XCJpc1JhbmdlXCJcbiAgICAgICAgdHlwZT1cImZyb21cIlxuICAgICAgICBbdmFsdWVdPVwibG93ZXJMYWJlbFwiXG4gICAgICAgIFt0ZW1wbGF0ZVJlZl09XCJ0aHVtYkZyb21UZW1wbGF0ZVJlZlwiXG4gICAgICAgIFtjb250aW51b3VzXT1cImNvbnRpbnVvdXNcIlxuICAgICAgICBbY29udGV4dF09XCJjb250ZXh0XCJcbiAgICAgICAgW2RlYWN0aXZlU3RhdGVdPVwiZGVhY3RpdmF0ZVRodW1iTGFiZWxcIlxuICAgICAgICBbdGh1bWJdPVwidGh1bWJGcm9tXCI+PC9pZ3gtdGh1bWItbGFiZWw+XG5cbiAgICA8aWd4LXRodW1iXG4gICAgICAgICpuZ0lmPVwiaXNSYW5nZVwiXG4gICAgICAgICN0aHVtYkZyb21cbiAgICAgICAgdHlwZT1cImZyb21cIlxuICAgICAgICBbdmFsdWVdPVwibG93ZXJMYWJlbFwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgIFtjb250aW51b3VzXT1cImNvbnRpbnVvdXNcIlxuICAgICAgICBbb25QYW5dPVwib25QYW5cIlxuICAgICAgICBbc3RlcERpc3RhbmNlXT1cInN0ZXBEaXN0YW5jZVwiXG4gICAgICAgIFtzdGVwXT1cInN0ZXBcIlxuICAgICAgICBbdGVtcGxhdGVSZWZdPVwidGh1bWJGcm9tVGVtcGxhdGVSZWZcIlxuICAgICAgICBbY29udGV4dF09XCJjb250ZXh0XCJcbiAgICAgICAgKHRodW1iQ2hhbmdlKT1cIm9uVGh1bWJDaGFuZ2UoKVwiXG4gICAgICAgIChob3ZlckNoYW5nZSk9XCJvbkhvdmVyQ2hhbmdlKCRldmVudClcIlxuICAgICAgICBbZGVhY3RpdmVTdGF0ZV09XCJkZWFjdGl2YXRlVGh1bWJMYWJlbFwiXG4gICAgICAgIFt0aHVtYkxhYmVsVmlzaWJpbGl0eUR1cmF0aW9uXT1cInRodW1iTGFiZWxWaXNpYmlsaXR5RHVyYXRpb25cIj48L2lneC10aHVtYj5cblxuICAgIDxpZ3gtdGh1bWItbGFiZWxcbiAgICAgICAgW3ZhbHVlXT1cInVwcGVyTGFiZWxcIlxuICAgICAgICB0eXBlPVwidG9cIlxuICAgICAgICBbdGVtcGxhdGVSZWZdPVwidGh1bWJUb1RlbXBsYXRlUmVmXCJcbiAgICAgICAgW2NvbnRpbnVvdXNdPVwiY29udGludW91c1wiXG4gICAgICAgIFtjb250ZXh0XT1cImNvbnRleHRcIlxuICAgICAgICBbZGVhY3RpdmVTdGF0ZV09XCJkZWFjdGl2YXRlVGh1bWJMYWJlbFwiXG4gICAgICAgIFt0aHVtYl09XCJ0aHVtYlRvXCI+PC9pZ3gtdGh1bWItbGFiZWw+XG5cbiAgICA8aWd4LXRodW1iXG4gICAgICAgICN0aHVtYlRvXG4gICAgICAgIHR5cGU9XCJ0b1wiXG4gICAgICAgIFt2YWx1ZV09XCJ1cHBlckxhYmVsXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgW2NvbnRpbnVvdXNdPVwiY29udGludW91c1wiXG4gICAgICAgIFtvblBhbl09XCJvblBhblwiXG4gICAgICAgIFtzdGVwRGlzdGFuY2VdPVwic3RlcERpc3RhbmNlXCJcbiAgICAgICAgW3N0ZXBdPVwic3RlcFwiXG4gICAgICAgIFt0ZW1wbGF0ZVJlZl09XCJ0aHVtYlRvVGVtcGxhdGVSZWZcIlxuICAgICAgICBbY29udGV4dF09XCJjb250ZXh0XCJcbiAgICAgICAgKHRodW1iQ2hhbmdlKT1cIm9uVGh1bWJDaGFuZ2UoKVwiXG4gICAgICAgIChob3ZlckNoYW5nZSk9XCJvbkhvdmVyQ2hhbmdlKCRldmVudClcIlxuICAgICAgICBbZGVhY3RpdmVTdGF0ZV09XCJkZWFjdGl2YXRlVGh1bWJMYWJlbFwiXG4gICAgICAgIFt0aHVtYkxhYmVsVmlzaWJpbGl0eUR1cmF0aW9uXT1cInRodW1iTGFiZWxWaXNpYmlsaXR5RHVyYXRpb25cIj48L2lneC10aHVtYj5cbjwvZGl2PlxuPGlneC10aWNrc1xuICAgICpuZ0lmPVwic2hvd1RpY2tzICYmIHNob3dCb3R0b21UaWNrc1wiXG4gICAgdGlja3NPcmllbnRhdGlvbj1cImJvdHRvbVwiXG4gICAgW3ByaW1hcnlUaWNrc109XCJwcmltYXJ5VGlja3NcIlxuICAgIFtzZWNvbmRhcnlUaWNrc109XCJzZWNvbmRhcnlUaWNrc1wiXG4gICAgW3ByaW1hcnlUaWNrTGFiZWxzXT1cInByaW1hcnlUaWNrTGFiZWxzXCJcbiAgICBbc2Vjb25kYXJ5VGlja0xhYmVsc109XCJzZWNvbmRhcnlUaWNrTGFiZWxzXCJcbiAgICBbdGlja0xhYmVsc09yaWVudGF0aW9uXT1cInRpY2tMYWJlbHNPcmllbnRhdGlvblwiXG4gICAgW2xhYmVsc1ZpZXdFbmFibGVkXT1cImxhYmVsc1ZpZXdFbmFibGVkXCJcbiAgICBbbGFiZWxzXT1cImxhYmVscyB8IHNwcmVhZFRpY2tMYWJlbHM6c2Vjb25kYXJ5VGlja3NcIlxuICAgIFt0aWNrTGFiZWxUZW1wbGF0ZVJlZl09XCJ0aWNrTGFiZWxUZW1wbGF0ZVJlZlwiXG4gICAgW21pblZhbHVlXT1cIm1pblZhbHVlXCJcbiAgICBbbWF4VmFsdWVdPVwibWF4VmFsdWVcIj5cbjwvaWd4LXRpY2tzPlxuIl19
|
|
1257
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9zbGlkZXIvc2xpZGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9zbGlkZXIvc2xpZGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2QyxPQUFPLEVBQ2lELFNBQVMsRUFBRSxZQUFZLEVBQWMsWUFBWSxFQUNyRyxXQUFXLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBd0MsTUFBTSxFQUFFLFNBQVMsRUFBNEIsV0FBVyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQzlLLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFjLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDN0csT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFbkUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWpELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3ZFLE9BQU8sRUFDSCxhQUFhLEVBQUUsNkJBQTZCLEVBQzVDLDJCQUEyQixFQUFFLDZCQUE2QixFQUFrRCxZQUFZLEVBQUUscUJBQXFCLEVBQUUsZ0JBQWdCLEVBQ3BLLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0s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QURwQixZQUFZO3VCQUFDLGFBQWEsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkF1Qi9CLFdBQVc7c0JBRGxCLFlBQVk7dUJBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdJZiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICAgIEFmdGVyQ29udGVudEluaXQsIEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIENvbnRlbnRDaGlsZCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3RCaW5kaW5nLCBIb3N0TGlzdGVuZXIsIElucHV0LCBOZ1pvbmUsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgUXVlcnlMaXN0LCBSZW5kZXJlcjIsIFNpbXBsZUNoYW5nZXMsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGQsIFZpZXdDaGlsZHJlbiwgYm9vbGVhbkF0dHJpYnV0ZVxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IGFuaW1hdGlvbkZyYW1lU2NoZWR1bGVyLCBmcm9tRXZlbnQsIGludGVydmFsLCBtZXJnZSwgbm9vcCwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgdGltZXIgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCwgdGhyb3R0bGUsIHRocm90dGxlVGltZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEVkaXRvclByb3ZpZGVyIH0gZnJvbSAnLi4vY29yZS9lZGl0LXByb3ZpZGVyJztcbmltcG9ydCB7IHJlc2l6ZU9ic2VydmFibGUgfSBmcm9tICcuLi9jb3JlL3V0aWxzJztcbmltcG9ydCB7IElneERpcmVjdGlvbmFsaXR5IH0gZnJvbSAnLi4vc2VydmljZXMvZGlyZWN0aW9uL2RpcmVjdGlvbmFsaXR5JztcbmltcG9ydCB7IElneFRodW1iTGFiZWxDb21wb25lbnQgfSBmcm9tICcuL2xhYmVsL3RodW1iLWxhYmVsLmNvbXBvbmVudCc7XG5pbXBvcnQge1xuICAgIElneFNsaWRlclR5cGUsIElneFRodW1iRnJvbVRlbXBsYXRlRGlyZWN0aXZlLFxuICAgIElneFRodW1iVG9UZW1wbGF0ZURpcmVjdGl2ZSwgSWd4VGlja0xhYmVsVGVtcGxhdGVEaXJlY3RpdmUsIElSYW5nZVNsaWRlclZhbHVlLCBJU2xpZGVyVmFsdWVDaGFuZ2VFdmVudEFyZ3MsIFNsaWRlckhhbmRsZSwgVGlja0xhYmVsc09yaWVudGF0aW9uLCBUaWNrc09yaWVudGF0aW9uXG59IGZyb20gJy4vc2xpZGVyLmNvbW1vbic7XG5pbXBvcnQgeyBJZ3hTbGlkZXJUaHVtYkNvbXBvbmVudCB9IGZyb20gJy4vdGh1bWIvdGh1bWItc2xpZGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJZ3hUaWNrTGFiZWxzUGlwZSB9IGZyb20gJy4vdGlja3MvdGljay5waXBlJztcbmltcG9ydCB7IElneFRpY2tzQ29tcG9uZW50IH0gZnJvbSAnLi90aWNrcy90aWNrcy5jb21wb25lbnQnO1xuXG5sZXQgTkVYVF9JRCA9IDA7XG5cbi8qKlxuICogKipJZ25pdGUgVUkgZm9yIEFuZ3VsYXIgU2xpZGVyKiogLVxuICogW0RvY3VtZW50YXRpb25dKGh0dHBzOi8vd3d3LmluZnJhZ2lzdGljcy5jb20vcHJvZHVjdHMvaWduaXRlLXVpLWFuZ3VsYXIvYW5ndWxhci9jb21wb25lbnRzL3NsaWRlci9zbGlkZXIpXG4gKlxuICogVGhlIElnbml0ZSBVSSBTbGlkZXIgYWxsb3dzIHNlbGVjdGlvbiBpbiBhIGdpdmVuIHJhbmdlIGJ5IG1vdmluZyB0aGUgdGh1bWIgYWxvbmcgdGhlIHRyYWNrLiBUaGUgdHJhY2tcbiAqIGNhbiBiZSBkZWZpbmVkIGFzIGNvbnRpbnVvdXMgb3Igc3RlcHBlZCwgYW5kIHlvdSBjYW4gY2hvb3NlIGJldHdlZW4gc2luZ2xlIGFuZCByYW5nZSBzbGlkZXIgdHlwZXMuXG4gKlxuICogRXhhbXBsZTpcbiAqIGBgYGh0bWxcbiAqIDxpZ3gtc2xpZGVyIGlkPVwic2xpZGVyXCJcbiAqICAgICAgICAgICAgW21pblZhbHVlXT1cIjBcIiBbbWF4VmFsdWVdPVwiMTAwXCJcbiAqICAgICAgICAgICAgW2NvbnRpbnVvdXNdPXRydWUgWyhuZ01vZGVsKV09XCJ2b2x1bWVcIj5cbiAqIDwvaWd4LXNsaWRlcj5cbiAqIGBgYFxuICovXG5AQ29tcG9uZW50KHtcbiAgICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLCB1c2VFeGlzdGluZzogSWd4U2xpZGVyQ29tcG9uZW50LCBtdWx0aTogdHJ1ZSB9XSxcbiAgICBzZWxlY3RvcjogJ2lneC1zbGlkZXInLFxuICAgIHRlbXBsYXRlVXJsOiAnc2xpZGVyLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtOZ0lmLCBJZ3hUaWNrc0NvbXBvbmVudCwgSWd4VGh1bWJMYWJlbENvbXBvbmVudCwgSWd4U2xpZGVyVGh1bWJDb21wb25lbnQsIElneFRpY2tMYWJlbHNQaXBlXVxufSlcbmV4cG9ydCBjbGFzcyBJZ3hTbGlkZXJDb21wb25lbnQgaW1wbGVtZW50c1xuICAgIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICAgIEVkaXRvclByb3ZpZGVyLFxuICAgIE9uSW5pdCxcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIEFmdGVyQ29udGVudEluaXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSB7XG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgdGh1bWJGcm9tKCk6IElneFNsaWRlclRodW1iQ29tcG9uZW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGh1bWJzLmZpbmQodGh1bWIgPT4gdGh1bWIudHlwZSA9PT0gU2xpZGVySGFuZGxlLkZST00pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHRodW1iVG8oKTogSWd4U2xpZGVyVGh1bWJDb21wb25lbnQge1xuICAgICAgICByZXR1cm4gdGhpcy50aHVtYnMuZmluZCh0aHVtYiA9PiB0aHVtYi50eXBlID09PSBTbGlkZXJIYW5kbGUuVE8pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0IGxhYmVsRnJvbSgpOiBJZ3hUaHVtYkxhYmVsQ29tcG9uZW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubGFiZWxSZWZzLmZpbmQobGFiZWwgPT4gbGFiZWwudHlwZSA9PT0gU2xpZGVySGFuZGxlLkZST00pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0IGxhYmVsVG8oKTogSWd4VGh1bWJMYWJlbENvbXBvbmVudCB7XG4gICAgICAgIHJldHVybiB0aGlzLmxhYmVsUmVmcy5maW5kKGxhYmVsID0+IGxhYmVsLnR5cGUgPT09IFNsaWRlckhhbmRsZS5UTyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGQoJ3RyYWNrJywgeyBzdGF0aWM6IHRydWUgfSlcbiAgICBwdWJsaWMgdHJhY2tSZWY6IEVsZW1lbnRSZWY7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZChJZ3hUaHVtYkZyb21UZW1wbGF0ZURpcmVjdGl2ZSwgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KVxuICAgIHB1YmxpYyB0aHVtYkZyb21UZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBAQ29udGVudENoaWxkKElneFRodW1iVG9UZW1wbGF0ZURpcmVjdGl2ZSwgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KVxuICAgIHB1YmxpYyB0aHVtYlRvVGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZChJZ3hUaWNrTGFiZWxUZW1wbGF0ZURpcmVjdGl2ZSwgeyByZWFkOiBUZW1wbGF0ZVJlZiwgc3RhdGljOiBmYWxzZSB9KVxuICAgIHB1YmxpYyB0aWNrTGFiZWxUZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1zbGlkZXInKVxuICAgIHB1YmxpYyBzbGllckNsYXNzID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHZhbHVlIG9mIHRoZSBgaWRgIGF0dHJpYnV0ZS5cbiAgICAgKiBJZiBub3QgcHJvdmlkZWQgaXQgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1zbGlkZXIgW2lkXT1cIidpZ3gtc2xpZGVyLTMyJ1wiIFsobmdNb2RlbCldPVwidGFzay5wZXJjZW50Q29tcGxldGVkXCIgW3N0ZXBdPVwiNVwiIFtsb3dlckJvdW5kXT1cIjIwXCI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmlkJylcbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBpZCA9IGBpZ3gtc2xpZGVyLSR7TkVYVF9JRCsrfWA7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBkdXJhdGlvbiB2aXNpYmlsaXR5IG9mIHRodW1icyBsYWJlbHMuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDc1MCBtaWxsaXNlY29uZHMuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtc2xpZGVyICNzbGlkZXIgW3RodW1iTGFiZWxWaXNpYmlsaXR5RHVyYXRpb25dPVwiMzAwMFwiIFsobmdNb2RlbCldPVwidGFzay5wZXJjZW50Q29tcGxldGVkXCIgW3N0ZXBdPVwiNVwiPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHRodW1iTGFiZWxWaXNpYmlsaXR5RHVyYXRpb24gPSA3NTA7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5pZ3gtc2xpZGVyLS1kaXNhYmxlZCcpXG4gICAgcHVibGljIGdldCBkaXNhYmxlZENsYXNzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kaXNhYmxlZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSB0eXBlIG9mIHRoZSBgSWd4U2xpZGVyQ29tcG9uZW50YC5cbiAgICAgKiBUaGUgc2xpZGVyIGNhbiBiZSBJZ3hTbGlkZXJUeXBlLlNMSURFUihkZWZhdWx0KSBvciBJZ3hTbGlkZXJUeXBlLlJBTkdFLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBAVmlld0NoaWxkKFwic2xpZGVyMlwiKVxuICAgICAqIHB1YmxpYyBzbGlkZXI6IElneFNsaWRlckNvbXBvbmVudDtcbiAgICAgKiBuZ0FmdGVyVmlld0luaXQoKXtcbiAgICAgKiAgICAgbGV0IHR5cGUgPSB0aGlzLnNsaWRlci50eXBlO1xuICAgICAqIH1cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBnZXQgdHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3R5cGUgYXMgSWd4U2xpZGVyVHlwZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSB0eXBlIG9mIHRoZSBgSWd4U2xpZGVyQ29tcG9uZW50YC5cbiAgICAgKiBUaGUgc2xpZGVyIGNhbiBiZSBJZ3hTbGlkZXJUeXBlLlNMSURFUihkZWZhdWx0KSBvciBJZ3hTbGlkZXJUeXBlLlJBTkdFLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBzbGlkZXJUeXBlOiBJZ3hTbGlkZXJUeXBlID0gSWd4U2xpZGVyVHlwZS5SQU5HRTtcbiAgICAgKiBgYGBcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1zbGlkZXIgI3NsaWRlcjIgW3R5cGVdPVwic2xpZGVyVHlwZVwiIFsobmdNb2RlbCldPVwicmFuZ2VWYWx1ZVwiIFttaW5WYWx1ZV09XCIwXCIgW21heFZhbHVlXT1cIjEwMFwiPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBzZXQgdHlwZSh0eXBlOiBJZ3hTbGlkZXJUeXBlKSB7XG4gICAgICAgIHRoaXMuX3R5cGUgPSB0eXBlO1xuXG4gICAgICAgIGlmICh0eXBlID09PSBJZ3hTbGlkZXJUeXBlLlNMSURFUikge1xuICAgICAgICAgICAgdGhpcy5sb3dlclZhbHVlID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9oYXNWaWV3SW5pdCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVUcmFjaygpO1xuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiBFbmFibGVzIGBsYWJlbFZpZXdgLCBieSBhY2NlcHRpbmcgYSBjb2xsZWN0aW9uIG9mIHByaW1pdGl2ZSB2YWx1ZXMgd2l0aCBtb3JlIHRoYW4gb25lIGVsZW1lbnQuXG4gICAgICogRWFjaCBlbGVtZW50IHdpbGwgYmUgZXF1YWxseSBzcHJlYWQgb3ZlciB0aGUgc2xpZGVyIGFuZCBpdCB3aWxsIHNlcnZlIGFzIGEgdGh1bWIgbGFiZWwuXG4gICAgICogT25jZSB0aGUgcHJvcGVydHkgaXMgc2V0LCBpdCB3aWxsIHByZWNlbmRlbmNlIG92ZXIge0BsaW5rIG1heFZhbHVlfSwge0BsaW5rIG1pblZhbHVlfSwge0BsaW5rIHN0ZXB9LlxuICAgICAqIFRoaXMgbWVhbnMgdGhhdCB0aGUgbWFuaXB1bGF0aW9uIGZvciB0aG9zZSBwcm9wZXJ0aWVzIHdvbid0IGJlIGFsbG93ZWQuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZ2V0IGxhYmVscygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xhYmVscztcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IGxhYmVscyhsYWJlbHM6IEFycmF5PG51bWJlciB8IHN0cmluZyB8IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkPikge1xuICAgICAgICB0aGlzLl9sYWJlbHMgPSBsYWJlbHM7XG5cbiAgICAgICAgdGhpcy5fcE1heCA9IHRoaXMudmFsdWVUb0ZyYWN0aW9uKHRoaXMudXBwZXJCb3VuZCwgMCwgMSk7XG4gICAgICAgIHRoaXMuX3BNaW4gPSB0aGlzLnZhbHVlVG9GcmFjdGlvbih0aGlzLmxvd2VyQm91bmQsIDAsIDEpO1xuXG4gICAgICAgIHRoaXMucG9zaXRpb25IYW5kbGVyc0FuZFVwZGF0ZVRyYWNrKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuX2hhc1ZpZXdJbml0KSB7XG4gICAgICAgICAgICB0aGlzLnN0ZXBEaXN0YW5jZSA9IHRoaXMuY2FsY3VsYXRlU3RlcERpc3RhbmNlKCk7XG4gICAgICAgICAgICB0aGlzLnNldFRpY2tJbnRlcnZhbCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgdGVtcGxhdGUgY29udGV4dCBjb3JyZXNwb25kaW5nXG4gICAgICogdG8ge0BsaW5rIElneFRodW1iRnJvbVRlbXBsYXRlRGlyZWN0aXZlfSBhbmQge0BsaW5rIElneFRodW1iVG9UZW1wbGF0ZURpcmVjdGl2ZX0gdGVtcGxhdGVzLlxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHJldHVybiB7XG4gICAgICogICRpbXBsaWNpdCAvLyByZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgbGFiZWwsXG4gICAgICogIGxhYmVscyAvLyByZXR1cm5zIHRoZSBsYWJlbHMgY29sbGVjdGlvbiB0aGUgdXNlciBoYXMgcGFzc2VkLlxuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGNvbnRleHQoKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICRpbXBsaWNpdDogdGhpcy52YWx1ZSxcbiAgICAgICAgICAgIGxhYmVsczogdGhpcy5sYWJlbHNcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBpbmNyZW1lbnRhbC9kZWNyZW1lbnRhbCBzdGVwIG9mIHRoZSB2YWx1ZSB3aGVuIGRyYWdnaW5nIHRoZSB0aHVtYi5cbiAgICAgKiBUaGUgZGVmYXVsdCBzdGVwIGlzIDEsIGFuZCBzdGVwIHNob3VsZCBub3QgYmUgbGVzcyBvciBlcXVhbCB0aGFuIDAuXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtc2xpZGVyICNzbGlkZXIgWyhuZ01vZGVsKV09XCJ0YXNrLnBlcmNlbnRDb21wbGV0ZWRcIiBbc3RlcF09XCI1XCI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IHN0ZXAoc3RlcDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuX3N0ZXAgPSBzdGVwO1xuXG4gICAgICAgIGlmICh0aGlzLl9oYXNWaWV3SW5pdCkge1xuICAgICAgICAgICAgdGhpcy5zdGVwRGlzdGFuY2UgPSB0aGlzLmNhbGN1bGF0ZVN0ZXBEaXN0YW5jZSgpO1xuICAgICAgICAgICAgdGhpcy5ub3JtYWxpemVCeVN0ZXAodGhpcy5fdmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZSh0aGlzLl92YWx1ZSwgdHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uSGFuZGxlcnNBbmRVcGRhdGVUcmFjaygpO1xuICAgICAgICAgICAgdGhpcy5zZXRUaWNrSW50ZXJ2YWwoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGluY3JlbWVudGFsL2RlY3JlbWVudGFsIGRyYWdnaW5nIHN0ZXAgb2YgdGhlIHtAbGluayBJZ3hTbGlkZXJDb21wb25lbnR9LlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBAVmlld0NoaWxkKFwic2xpZGVyMlwiKVxuICAgICAqIHB1YmxpYyBzbGlkZXI6IElneFNsaWRlckNvbXBvbmVudDtcbiAgICAgKiBuZ0FmdGVyVmlld0luaXQoKXtcbiAgICAgKiAgICAgbGV0IHN0ZXAgPSB0aGlzLnNsaWRlci5zdGVwO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHN0ZXAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxhYmVsc1ZpZXdFbmFibGVkID8gMSA6IHRoaXMuX3N0ZXA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBpZiB0aGUge0BsaW5rIElneFNsaWRlckNvbXBvbmVudH0gaXMgZGlzYWJsZWQuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIEBWaWV3Q2hpbGQoXCJzbGlkZXIyXCIpXG4gICAgICogcHVibGljIHNsaWRlcjogSWd4U2xpZGVyQ29tcG9uZW50O1xuICAgICAqIG5nQWZ0ZXJWaWV3SW5pdCgpe1xuICAgICAqICAgICBsZXQgaXNEaXNhYmxlZCA9IHRoaXMuc2xpZGVyLmRpc2FibGVkO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgICBwdWJsaWMgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGlzYWJsZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGlzYWJsZXMgdGhlIGNvbXBvbmVudC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1zbGlkZXIgI3NsaWRlciBbZGlzYWJsZWRdPVwidHJ1ZVwiIFsobmdNb2RlbCldPVwidGFzay5wZXJjZW50Q29tcGxldGVkXCIgW3N0ZXBdPVwiNVwiIFtsb3dlckJvdW5kXT1cIjIwXCI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIHNldCBkaXNhYmxlZChkaXNhYmxlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX2Rpc2FibGVkID0gZGlzYWJsZTtcblxuICAgICAgICBpZiAodGhpcy5faGFzVmlld0luaXQpIHtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlVGh1bWJGb2N1c2FibGVTdGF0ZShkaXNhYmxlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgaWYgdGhlIHtAbGluayBJZ3hTbGlkZXJDb21wb25lbnR9IGlzIHNldCBhcyBjb250aW51b3VzLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBAVmlld0NoaWxkKFwic2xpZGVyMlwiKVxuICAgICAqIHB1YmxpYyBzbGlkZXI6IElneFNsaWRlckNvbXBvbmVudDtcbiAgICAgKiBuZ0FmdGVyVmlld0luaXQoKXtcbiAgICAgKiAgICAgbGV0IGNvbnRpbnVvdXMgPSB0aGlzLnNsaWRlci5jb250aW51b3VzO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgICBwdWJsaWMgZ2V0IGNvbnRpbnVvdXMoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb250aW51b3VzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHtAbGluayBJZ3hTbGlkZXJDb21wb25lbnR9IGFzIGNvbnRpbnVvdXMuXG4gICAgICogQnkgZGVmYXVsdCBpcyBjb25zaWRlcmVkIHRoYXQgdGhlIHtAbGluayBJZ3hTbGlkZXJDb21wb25lbnR9IGlzIGRpc2NyZXRlLlxuICAgICAqIERpc2NyZXRlIHtAbGluayBJZ3hTbGlkZXJDb21wb25lbnR9IHNsaWRlciBoYXMgc3RlcCBpbmRpY2F0b3JzIG92ZXIgdGhlIHRyYWNrIGFuZCB2aXNpYmxlIHRodW1iIGxhYmVscyBkdXJpbmcgaW50ZXJhY3Rpb24uXG4gICAgICogQ29udGludW91cyB7QGxpbmsgSWd4U2xpZGVyQ29tcG9uZW50fSBkb2VzIG5vdCBoYXZlIHRpY2tzIGFuZCBkb2VzIG5vdCBzaG93IGJ1YmJsZSBsYWJlbHMgZm9yIHZhbHVlcy5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1zbGlkZXIgI3NsaWRlciBbY29udGludW91c109XCIndHJ1ZSdcIiBbKG5nTW9kZWwpXT1cInRhc2sucGVyY2VudENvbXBsZXRlZFwiIFtzdGVwXT1cIjVcIiBbbG93ZXJCb3VuZF09XCIyMFwiPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBzZXQgY29udGludW91cyhjb250aW51b3VzOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX2NvbnRpbnVvdXMgPSBjb250aW51b3VzO1xuICAgICAgICBpZiAodGhpcy5faGFzVmlld0luaXQpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0VGlja0ludGVydmFsKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBtaW5pbWFsIGRpc3BsYXllZCB0cmFjayB2YWx1ZSBvZiB0aGUgYElneFNsaWRlckNvbXBvbmVudGAuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqICBAVmlld0NoaWxkKFwic2xpZGVyMlwiKVxuICAgICAqIHB1YmxpYyBzbGlkZXI6IElneFNsaWRlckNvbXBvbmVudDtcbiAgICAgKiBuZ0FmdGVyVmlld0luaXQoKXtcbiAgICAgKiAgICAgbGV0IHNsaWRlck1pbiA9IHRoaXMuc2xpZGVyLm1pblZhbHVlO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IG1pblZhbHVlKCk6IG51bWJlciB7XG4gICAgICAgIGlmICh0aGlzLmxhYmVsc1ZpZXdFbmFibGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLl9taW5WYWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBtaW5pbWFsIGRpc3BsYXllZCB0cmFjayB2YWx1ZSBmb3IgdGhlIGBJZ3hTbGlkZXJDb21wb25lbnRgLlxuICAgICAqIFRoZSBkZWZhdWx0IG1pbmltYWwgdmFsdWUgaXMgMC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1zbGlkZXIgW3R5cGVdPVwic2xpZGVyVHlwZVwiIFttaW5WYWx1ZV09XCI1NlwiIFttYXhWYWx1ZV09XCIxMDBcIj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgbWluVmFsdWUodmFsdWU6IG51bWJlcikge1xuICAgICAgICBpZiAodmFsdWUgPj0gdGhpcy5tYXhWYWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fbWluVmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2YWx1ZSA+IHRoaXMuX3VwcGVyQm91bmQpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlVXBwZXJCb3VuZEFuZE1heFRyYXZlbFpvbmUoKTtcbiAgICAgICAgICAgIHRoaXMubG93ZXJCb3VuZCA9IHZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUmVmcmVzaCBtaW4gdHJhdmVsIHpvbmUgbGltaXQuXG4gICAgICAgIHRoaXMuX3BNaW4gPSAwO1xuICAgICAgICAvLyBSZWNhbGN1bGF0ZSBzdGVwIGRpc3RhbmNlLlxuICAgICAgICB0aGlzLnBvc2l0aW9uSGFuZGxlcnNBbmRVcGRhdGVUcmFjaygpO1xuICAgICAgICBpZiAodGhpcy5faGFzVmlld0luaXQpIHtcbiAgICAgICAgICAgIHRoaXMuc3RlcERpc3RhbmNlID0gdGhpcy5jYWxjdWxhdGVTdGVwRGlzdGFuY2UoKTtcbiAgICAgICAgICAgIHRoaXMuc2V0VGlja0ludGVydmFsKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBtYXhpbXVtIGRpc3BsYXllZCB0cmFjayB2YWx1ZSBmb3IgdGhlIHtAbGluayBJZ3hTbGlkZXJDb21wb25lbnR9LlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBAVmlld0NoaWxkKFwic2xpZGVyXCIpXG4gICAgICogcHVibGljIHNsaWRlcjogSWd4U2xpZGVyQ29tcG9uZW50O1xuICAgICAqIG5nQWZ0ZXJWaWV3SW5pdCgpe1xuICAgICAqICAgICBsZXQgc2xpZGVyTWF4ID0gdGhpcy5zbGlkZXIubWF4VmFsdWU7XG4gICAgICogfVxuICAgICAqICBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IG1heFZhbHVlKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmxhYmVsc1ZpZXdFbmFibGVkID9cbiAgICAgICAgICAgIHRoaXMubGFiZWxzLmxlbmd0aCAtIDEgOlxuICAgICAgICAgICAgdGhpcy5fbWF4VmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbWF4aW1hbCBkaXNwbGF5ZWQgdHJhY2sgdmFsdWUgZm9yIHRoZSBgSWd4U2xpZGVyQ29tcG9uZW50YC5cbiAgICAgKiBUaGUgZGVmYXVsdCBtYXhpbXVtIHZhbHVlIGlzIDEwMC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1zbGlkZXIgW3R5cGVdPVwic2xpZGVyVHlwZVwiIFttaW5WYWx1ZV09XCI1NlwiIFttYXhWYWx1ZV09XCIyNTZcIj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgbWF4VmFsdWUodmFsdWU6IG51bWJlcikge1xuICAgICAgICBpZiAodmFsdWUgPD0gdGhpcy5fbWluVmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX21heFZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsdWUgPCB0aGlzLl9sb3dlckJvdW5kKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUxvd2VyQm91bmRBbmRNaW5UcmF2ZWxab25lKCk7XG4gICAgICAgICAgICB0aGlzLnVwcGVyQm91bmQgPSB2YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHJlZnJlc2ggbWF4IHRyYXZlbCB6b25lIGxpbWl0cy5cbiAgICAgICAgdGhpcy5fcE1heCA9IDE7XG4gICAgICAgIC8vIHJlY2FsY3VsYXRlIHN0ZXAgZGlzdGFuY2UuXG4gICAgICAgIHRoaXMucG9zaXRpb25IYW5kbGVyc0FuZFVwZGF0ZVRyYWNrKCk7XG4gICAgICAgIGlmICh0aGlzLl9oYXNWaWV3SW5pdCkge1xuICAgICAgICAgICAgdGhpcy5zdGVwRGlzdGFuY2UgPSB0aGlzLmNhbGN1bGF0ZVN0ZXBEaXN0YW5jZSgpO1xuICAgICAgICAgICAgdGhpcy5zZXRUaWNrSW50ZXJ2YWwoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGxvd2VyIGJvdW5kYXJ5IG9mIHNldHRhYmxlIHZhbHVlcyBvZiB0aGUgYElneFNsaWRlckNvbXBvbmVudGAuXG4gICAgICogSWYgbm90IHNldCwgd2lsbCByZXR1cm4gYG1pblZhbHVlYC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogQFZpZXdDaGlsZChcInNsaWRlclwiKVxuICAgICAqIHB1YmxpYyBzbGlkZXI6IElneFNsaWRlckNvbXBvbmVudDtcbiAgICAgKiBuZ0FmdGVyVmlld0luaXQoKXtcbiAgICAgKiAgICAgbGV0IHNsaWRlckxvd0JvdW5kID0gdGhpcy5zbGlkZXIubG93ZXJCb3VuZDtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGdldCBsb3dlckJvdW5kKCk6IG51bWJlciB7XG4gICAgICAgIGlmICghTnVtYmVyLmlzTmFOKHRoaXMuX2xvd2VyQm91bmQpICYmIHRoaXMuX2xvd2VyQm91bmQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVJblJhbmdlKHRoaXMuX2xvd2VyQm91bmQsIHRoaXMubWluVmFsdWUsIHRoaXMubWF4VmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMubWluVmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbG93ZXIgYm91bmRhcnkgb2Ygc2V0dGFibGUgdmFsdWVzIG9mIHRoZSBgSWd4U2xpZGVyQ29tcG9uZW50YC5cbiAgICAgKiBJZiBub3Qgc2V0IGlzIHRoZSBzYW1lIGFzIG1pbiB2YWx1ZS5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1zbGlkZXIgW3N0ZXBdPVwiNVwiIFtsb3dlckJvdW5kXT1cIjIwXCI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IGxvd2VyQm91bmQodmFsdWU6IG51bWJlcikge1xuICAgICAgICBpZiAodmFsdWUgPj0gdGhpcy51cHBlckJvdW5kIHx8ICh0aGlzLmxhYmVsc1ZpZXdFbmFibGVkICYmIHZhbHVlIDwgMCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2xvd2VyQm91bmQgPSB0aGlzLnZhbHVlSW5SYW5nZSh2YWx1ZSwgdGhpcy5taW5WYWx1ZSwgdGhpcy5tYXhWYWx1ZSk7XG5cbiAgICAgICAgLy8gUmVmcmVzaCBtaW4gdHJhdmVsIHpvbmUuXG4gICAgICAgIHRoaXMuX3BNaW4gPSB0aGlzLnZhbHVlVG9GcmFjdGlvbih0aGlzLl9sb3dlckJvdW5kLCAwLCAxKTtcbiAgICAgICAgdGhpcy5wb3NpdGlvbkhhbmRsZXJzQW5kVXBkYXRlVHJhY2soKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSB1cHBlciBib3VuZGFyeSBvZiBzZXR0YWJsZSB2YWx1ZXMgb2YgdGhlIGBJZ3hTbGlkZXJDb21wb25lbnRgLlxuICAgICAqIElmIG5vdCBzZXQsIHdpbGwgcmV0dXJuIGBtYXhWYWx1ZWBcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogQFZpZXdDaGlsZChcInNsaWRlclwiKVxuICAgICAqIHB1YmxpYyBzbGlkZXI6IElneFNsaWRlckNvbXBvbmVudDtcbiAgICAgKiBuZ0FmdGVyVmlld0luaXQoKXtcbiAgICAgKiAgICBsZXQgc2xpZGVyVXBCb3VuZCA9IHRoaXMuc2xpZGVyLnVwcGVyQm91bmQ7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgdXBwZXJCb3VuZCgpOiBudW1iZXIge1xuICAgICAgICBpZiAoIU51bWJlci5pc05hTih0aGlzLl91cHBlckJvdW5kKSAmJiB0aGlzLl91cHBlckJvdW5kICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlSW5SYW5nZSh0aGlzLl91cHBlckJvdW5kLCB0aGlzLm1pblZhbHVlLCB0aGlzLm1heFZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLm1heFZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHVwcGVyIGJvdW5kYXJ5IG9mIHRoZSBgSWd4U2xpZGVyQ29tcG9uZW50YC5cbiAgICAgKiBJZiBub3Qgc2V0IGlzIHRoZSBzYW1lIGFzIG1heCB2YWx1ZS5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1zbGlkZXIgW3N0ZXBdPVwiNVwiIFt1cHBlckJvdW5kXT1cIjIwXCI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IHVwcGVyQm91bmQodmFsdWU6IG51bWJlcikge1xuICAgICAgICBpZiAodmFsdWUgPD0gdGhpcy5sb3dlckJvdW5kIHx8ICh0aGlzLmxhYmVsc1ZpZXdFbmFibGVkICYmIHZhbHVlID4gdGhpcy5sYWJlbHMubGVuZ3RoIC0gMSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3VwcGVyQm91bmQgPSB0aGlzLnZhbHVlSW5SYW5nZSh2YWx1ZSwgdGhpcy5taW5WYWx1ZSwgdGhpcy5tYXhWYWx1ZSk7XG4gICAgICAgIC8vIFJlZnJlc2ggdGltZSB0cmF2ZWwgem9uZS5cbiAgICAgICAgdGhpcy5fcE1heCA9IHRoaXMudmFsdWVUb0ZyYWN0aW9uKHRoaXMuX3VwcGVyQm91bmQsIDAsIDEpO1xuICAgICAgICB0aGlzLnBvc2l0aW9uSGFuZGxlcnNBbmRVcGRhdGVUcmFjaygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHNsaWRlciB2YWx1ZS4gSWYgdGhlIHNsaWRlciBpcyBvZiB0eXBlIHtAbGluayBJZ3hTbGlkZXJUeXBlLlNMSURFUn0gdGhlIHJldHVybmVkIHZhbHVlIGlzIG51bWJlci5cbiAgICAgKiBJZiB0aGUgc2xpZGVyIHR5cGUgaXMge0BsaW5rIElneFNsaWRlclR5cGUuUkFOR0V9LlxuICAgICAqIFRoZSByZXR1cm5lZCB2YWx1ZSByZXByZXNlbnRzIGFuIG9iamVjdCBvZiB7QGxpbmsgbG93ZXJWYWx1ZX0gYW5kIHtAbGluayB1cHBlclZhbHVlfS5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogQFZpZXdDaGlsZChcInNsaWRlcjJcIilcbiAgICAgKiBwdWJsaWMgc2xpZGVyOiBJZ3hTbGlkZXJDb21wb25lbnQ7XG4gICAgICogcHVibGljIHNsaWRlclZhbHVlKGV2ZW50KXtcbiAgICAgKiAgICAgbGV0IHNsaWRlclZhbCA9IHRoaXMuc2xpZGVyLnZhbHVlO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHZhbHVlKCk6IG51bWJlciB8IElSYW5nZVNsaWRlclZhbHVlIHtcbiAgICAgICAgaWYgKHRoaXMuaXNSYW5nZSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBsb3dlcjogdGhpcy52YWx1ZUluUmFuZ2UodGhpcy5sb3dlclZhbHVlLCB0aGlzLmxvd2VyQm91bmQsIHRoaXMudXBwZXJCb3VuZCksXG4gICAgICAgICAgICAgICAgdXBwZXI6IHRoaXMudmFsdWVJblJhbmdlKHRoaXMudXBwZXJWYWx1ZSwgdGhpcy5sb3dlckJvdW5kLCB0aGlzLnVwcGVyQm91bmQpXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVJblJhbmdlKHRoaXMudXBwZXJWYWx1ZSwgdGhpcy5sb3dlckJvdW5kLCB0aGlzLnVwcGVyQm91bmQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgc2xpZGVyIHZhbHVlLlxuICAgICAqIElmIHRoZSBzbGlkZXIgaXMgb2YgdHlwZSB7QGxpbmsgSWd4U2xpZGVyVHlwZS5TTElERVJ9LlxuICAgICAqIFRoZSBhcmd1bWVudCBpcyBudW1iZXIuIEJ5IGRlZmF1bHQgdGhlIHtAbGluayB2YWx1ZX0gZ2V0cyB0aGUge0BsaW5rIGxvd2VyQm91bmR9LlxuICAgICAqIElmIHRoZSBzbGlkZXIgdHlwZSBpcyB7QGxpbmsgSWd4U2xpZGVyVHlwZS5SQU5HRX0gdGhlIGFyZ3VtZW50XG4gICAgICogcmVwcmVzZW50cyBhbiBvYmplY3Qgb2Yge0BsaW5rIGxvd2VyVmFsdWV9IGFuZCB7QGxpbmsgdXBwZXJWYWx1ZX0gcHJvcGVydGllcy5cbiAgICAgKiBCeSBkZWZhdWx0IHRoZSBvYmplY3QgaXMgYXNzb2NpYXRlZCB3aXRoIHRoZSB7QGxpbmsgbG93ZXJCb3VuZH0gYW5kIHtAbGluayB1cHBlckJvdW5kfSBwcm9wZXJ0eSB2YWx1ZXMuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHJhbmdlVmFsdWUgPSB7XG4gICAgICogICBsb3dlcjogMzAsXG4gICAgICogICB1cHBlcjogNjBcbiAgICAgKiB9O1xuICAgICAqIGBgYFxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXNsaWRlciBbdHlwZV09XCJzbGlkZXJUeXBlXCIgWyhuZ01vZGVsKV09XCJyYW5nZVZhbHVlXCIgW21pblZhbHVlXT1cIjU2XCIgW21heFZhbHVlXT1cIjI1NlwiPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCB2YWx1ZSh2YWx1ZTogbnVtYmVyIHwgSVJhbmdlU2xpZGVyVmFsdWUpIHtcbiAgICAgICAgdGhpcy5ub3JtYWxpemVCeVN0ZXAodmFsdWUpO1xuXG4gICAgICAgIGlmICh0aGlzLl9oYXNWaWV3SW5pdCkge1xuICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZSh0aGlzLl92YWx1ZSwgdHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uSGFuZGxlcnNBbmRVcGRhdGVUcmFjaygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHRoZSBwcmVzZW50ZWQgcHJpbWFyeSB0aWNrcy5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogY29uc3QgcHJpbWFyeVRpY2tzID0gdGhpcy5zbGlkZXIucHJpbWFyeVRpY2tzO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCBwcmltYXJ5VGlja3MoKSB7XG4gICAgICAgIGlmICh0aGlzLmxhYmVsc1ZpZXdFbmFibGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcHJpbWFyeVRpY2tzID0gdGhpcy5sYWJlbHMubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9wcmltYXJ5VGlja3M7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgbnVtYmVyIG9mIHByaW1hcnkgdGlja3MuIElmIHtAbGluayBAbGFiZWxzfSBpcyBlbmFibGVkLCB0aGlzIHByb3BlcnR5IHdvbid0IGZ1bmN0aW9uLlxuICAgICAqIEluc3RlZCBlbmFibGUgdGlja3MgYnkge0BsaW5rIHNob3dUaWNrc30gcHJvcGVydHkuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuc2xpZGVyLnByaW1hcnlUaWNrcyA9IDU7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIHNldCBwcmltYXJ5VGlja3ModmFsOiBudW1iZXIpIHtcbiAgICAgICAgaWYgKHZhbCA8PSAxKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9wcmltYXJ5VGlja3MgPSB2YWw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHRoZSBwcmVzZW50ZWQgc2Vjb25kYXJ5IHRpY2tzLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBjb25zdCBzZWNvbmRhcnlUaWNrcyA9IHRoaXMuc2xpZGVyLnNlY29uZGFyeVRpY2tzO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCBzZWNvbmRhcnlUaWNrcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlY29uZGFyeVRpY2tzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIG51bWJlciBvZiBzZWNvbmRhcnkgdGlja3MuIFRoZSBwcm9wZXJ0eSBmdW5jdGlvbnMgZXZlbiB3aGVuIHtAbGluayBsYWJlbHN9IGlzIGVuYWJsZWQsXG4gICAgICogYnV0IGFsbCBzZWNvbmRhcnkgdGlja3Mgd29uJ3QgcHJlc2VudCBhbnkgdGljayBsYWJlbHMuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHRoaXMuc2xpZGVyLnNlY29uZGFyeVRpY2tzID0gNTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0IHNlY29uZGFyeVRpY2tzKHZhbDogbnVtYmVyKSB7XG4gICAgICAgIGlmICh2YWwgPCAxKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9zZWNvbmRhcnlUaWNrcyA9IHZhbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTaG93L2hpZGUgc2xpZGVyIHRpY2tzXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtc2xpZXIgW3Nob3dUaWNrc109XCJ0cnVlXCIgW3ByaW1hcnlUaWNrc109XCI1XCI+PC9pZ3gtc2xpZXI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gICAgcHVibGljIHNob3dUaWNrcyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogc2hvdy9oaWRlIHByaW1hcnkgdGljayBsYWJlbHNcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1zbGlkZXIgW3ByaW1hcnlUaWNrc109XCI1XCIgW3ByaW1hcnlUaWNrTGFiZWxzXT1cImZhbHNlXCI+PC9pZ3gtc2xpZGVyPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICAgIHB1YmxpYyBwcmltYXJ5VGlja0xhYmVscyA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBzaG93L2hpZGUgc2Vjb25kYXJ5IHRpY2sgbGFiZWxzXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtc2xpZGVyIFtzZWNvbmRhcnlUaWNrc109XCI1XCIgW3NlY29uZGFyeVRpY2tMYWJlbHNdPVwiZmFsc2VcIj48L2lneC1zbGlkZXI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pXG4gICAgcHVibGljIHNlY29uZGFyeVRpY2tMYWJlbHMgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogQ2hhbmdlcyB0aWNrcyBvcmllbnRhdGlvbjpcbiAgICAgKiBib3R0b20gLSBUaGUgZGVmYXVsdCBvcmllbmF0aW9uLCBiZWxvdyB0aGUgc2xpZGVyIHRyYWNrLlxuICAgICAqIHRvcCAtIEFib3ZlIHRoZSBzbGlkZXIgdHJhY2tcbiAgICAgKiBtaXJyb3IgLSBjb21iaW5lcyB0b3AgYW5kIGJvdHRvbSBvcmllbnRhdGlvbi5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1zbGlkZXIgW3ByaW1hcnlUaWNrc109XCI1XCIgW3RpY2tzT3JpZW50YXRpb25dPVwidGlja3NPcmllbnRhdGlvblwiPjwvaWd4LXNsaWRlcj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyB0aWNrc09yaWVudGF0aW9uOiBUaWNrc09yaWVudGF0aW9uID0gVGlja3NPcmllbnRhdGlvbi5Cb3R0b207XG5cbiAgICAvKipcbiAgICAgKiBDaGFuZ2VzIHRpY2sgbGFiZWxzIHJvdGF0aW9uOlxuICAgICAqIGhvcml6b250YWwgLSBUaGUgZGVmYXVsdCByb3RhdGlvblxuICAgICAqIHRvcHRvYm90dG9tIC0gUm90YXRlcyB0aWNrIGxhYmVscyB2ZXJ0aWNhbGx5IHRvIDkwZGVnXG4gICAgICogYm90dG9tdG90b3AgLSBSb3RhdGUgdGljayBsYWJlbHMgdmVydGljYWxseSB0byAtOTBkZWdcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1zbGlkZXIgW3ByaW1hcnlUaWNrc109XCI1XCIgW3NlY29uZGFyeVRpY2tzXT1cIjNcIiBbdGlja0xhYmVsc09yaWVudGF0aW9uXT1cInRpY2tMYWJlbHNPcmllbnRhaXRvblwiPjwvaWd4LXNsaWRlcj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyB0aWNrTGFiZWxzT3JpZW50YXRpb246IFRpY2tMYWJlbHNPcmllbnRhdGlvbiA9IFRpY2tMYWJlbHNPcmllbnRhdGlvbi5Ib3Jpem9udGFsO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgZGVhY3RpdmF0ZVRodW1iTGFiZWwoKSB7XG4gICAgICAgIHJldHVybiAoKHRoaXMucHJpbWFyeVRpY2tzICYmIHRoaXMucHJpbWFyeVRpY2tMYWJlbHMpIHx8ICh0aGlzLnNlY29uZGFyeVRpY2tzICYmIHRoaXMuc2Vjb25kYXJ5VGlja0xhYmVscykpICYmXG4gICAgICAgICAgICAodGhpcy50aWNrc09yaWVudGF0aW9uID09PSBUaWNrc09yaWVudGF0aW9uLlRvcCB8fCB0aGlzLnRpY2tzT3JpZW50YXRpb24gPT09IFRpY2tzT3JpZW50YXRpb24uTWlycm9yKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGV2ZW50IGlzIGVtaXR0ZWQgZXZlcnkgdGltZSB0aGUgdmFsdWUgaXMgY2hhbmdlZC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogcHVibGljIGNoYW5nZShldmVudCl7XG4gICAgICogICAgYWxlcnQoXCJUaGUgdmFsdWUgaGFzIGJlZW4gY2hhbmdlZCFcIik7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXNsaWRlciAodmFsdWVDaGFuZ2UpPVwiY2hhbmdlKCRldmVudClcIiAjc2xpZGVyIFsobmdNb2RlbCldPVwidGFzay5wZXJjZW50Q29tcGxldGVkXCIgW3N0ZXBdPVwiNVwiPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyB2YWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8SVNsaWRlclZhbHVlQ2hhbmdlRXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBldmVudCBpcyBlbWl0dGVkIGV2ZXJ5IHRpbWUgdGhlIGxvd2VyIHZhbHVlIG9mIGEgcmFuZ2Ugc2xpZGVyIGlzIGNoYW5nZWQuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHB1YmxpYyBjaGFuZ2UodmFsdWUpe1xuICAgICAqICAgIGFsZXJ0KGBUaGUgbG93ZXIgdmFsdWUgaGFzIGJlZW4gY2hhbmdlZCB0byAke3ZhbHVlfWApO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1zbGlkZXIgWyhsb3dlclZhbHVlKV09XCJtb2RlbC5sb3dlcnZhbHVlXCIgKGxvd2VyVmFsdWVDaGFuZ2UpPVwiY2hhbmdlKCRldmVudClcIiBbc3RlcF09XCI1XCI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIGxvd2VyVmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgZXZlbnQgaXMgZW1pdHRlZCBldmVyeSB0aW1lIHRoZSB1cHBlciB2YWx1ZSBvZiBhIHJhbmdlIHNsaWRlciBpcyBjaGFuZ2VkLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBwdWJsaWMgY2hhbmdlKHZhbHVlKXtcbiAgICAgKiAgICBhbGVydChgVGhlIHVwcGVyIHZhbHVlIGhhcyBiZWVuIGNoYW5nZWQgdG8gJHt2YWx1ZX1gKTtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtc2xpZGVyIFsodXBwZXJWYWx1ZSldPVwibW9kZWwudXBwZXJ2YWx1ZVwiICh1cHBlclZhbHVlQ2hhbmdlKT1cImNoYW5nZSgkZXZlbnQpXCIgW3N0ZXBdPVwiNVwiPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyB1cHBlclZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGV2ZW50IGlzIGVtaXR0ZWQgYXQgdGhlIGVuZCBvZiBldmVyeSBzbGlkZSBpbnRlcmFjdGlvbi5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogcHVibGljIGNoYW5nZShldmVudCl7XG4gICAgICogICAgYWxlcnQoXCJUaGUgdmFsdWUgaGFzIGJlZW4gY2hhbmdlZCFcIik7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LXNsaWRlciAoZHJhZ0ZpbmlzaGVkKT1cImNoYW5nZSgkZXZlbnQpXCIgI3NsaWRlciBbKG5nTW9kZWwpXT1cInRhc2sucGVyY2VudENvbXBsZXRlZFwiIFtzdGVwXT1cIjVcIj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgZHJhZ0ZpbmlzaGVkID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXIgfCBJUmFuZ2VTbGlkZXJWYWx1ZT4oKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBAVmlld0NoaWxkKCd0aWNrcycsIHsgc3RhdGljOiB0cnVlIH0pXG4gICAgcHJpdmF0ZSB0aWNrczogRWxlbWVudFJlZjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBAVmlld0NoaWxkcmVuKElneFNsaWRlclRodW1iQ29tcG9uZW50KVxuICAgIHByaXZhdGUgdGh1bWJzOiBRdWVyeUxpc3Q8SWd4U2xpZGVyVGh1bWJDb21wb25lbnQ+ID0gbmV3IFF1ZXJ5TGlzdDxJZ3hTbGlkZXJUaHVtYkNvbXBvbmVudD4oKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBAVmlld0NoaWxkcmVuKElneFRodW1iTGFiZWxDb21wb25lbnQpXG4gICAgcHJpdmF0ZSBsYWJlbFJlZnM6IFF1ZXJ5TGlzdDxJZ3hUaHVtYkxhYmVsQ29tcG9uZW50PiA9IG5ldyBRdWVyeUxpc3Q8SWd4VGh1bWJMYWJlbENvbXBvbmVudD4oKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgb25QYW46IFN1YmplY3Q8bnVtYmVyPiA9IG5ldyBTdWJqZWN0PG51bWJlcj4oKTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RlcERpc3RhbmNlOiBudW1iZXI7XG5cbiAgICAvLyBMaW1pdCBoYW5kbGUgdHJhdmVsIHpvbmVcbiAgICBwcml2YXRlIF9wTWluID0gMDtcbiAgICBwcml2YXRlIF9wTWF4ID0gMTtcblxuICAgIC8vIEZyb20vdXBwZXJWYWx1ZSBpbiBwZXJjZW50IHZhbHVlc1xuICAgIHByaXZhdGUgX2hhc1ZpZXdJbml0ID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfbWluVmFsdWUgPSAwO1xuICAgIHByaXZhdGUgX21heFZhbHVlID0gMTAwO1xuICAgIHByaXZhdGUgX2xvd2VyQm91bmQ6IG51bWJlcjtcbiAgICBwcml2YXRlIF91cHBlckJvdW5kOiBudW1iZXI7XG4gICAgcHJpdmF0ZSBfbG93ZXJWYWx1ZTogbnVtYmVyO1xuICAgIHByaXZhdGUgX3VwcGVyVmFsdWU6IG51bWJlcjtcbiAgICBwcml2YXRlIF9jb250aW51b3VzID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfZGlzYWJsZWQgPSBmYWxzZTtcbiAgICBwcml2YXRlIF9zdGVwID0gMTtcbiAgICBwcml2YXRlIF92YWx1ZTogbnVtYmVyIHwgSVJhbmdlU2xpZGVyVmFsdWUgPSAwO1xuXG4gICAgLy8gdGlja3NcbiAgICBwcml2YXRlIF9wcmltYXJ5VGlja3MgPSAwO1xuICAgIHByaXZhdGUgX3NlY29uZGFyeVRpY2tzID0gMDtcbiAgICBwcml2YXRlIF9zbGlkaW5nID0gZmFsc2U7XG5cbiAgICBwcml2YXRlIF9sYWJlbHMgPSBuZXcgQXJyYXk8bnVtYmVyIHwgc3RyaW5nIHwgYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWQ+KCk7XG4gICAgcHJpdmF0ZSBfdHlwZTogSWd4U2xpZGVyVHlwZSA9IElneFNsaWRlclR5cGUuU0xJREVSO1xuXG4gICAgcHJpdmF0ZSBfZGVzdHJveWVyJCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG4gICAgcHJpdmF0ZSBfaW5kaWNhdG9yc0Rlc3Ryb3llciQgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuICAgIHByaXZhdGUgX2luZGljYXRvcnNUaW1lcjogT2JzZXJ2YWJsZTxhbnk+O1xuXG4gICAgcHJpdmF0ZSBfb25DaGFuZ2VDYWxsYmFjazogKF86IGFueSkgPT4gdm9pZCA9IG5vb3A7XG4gICAgcHJpdmF0ZSBfb25Ub3VjaGVkQ2FsbGJhY2s6ICgpID0+IHZvaWQgPSBub29wO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgICAgICBwcml2YXRlIF9lbDogRWxlbWVudFJlZixcbiAgICAgICAgcHJpdmF0ZSBfY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJpdmF0ZSBfbmdab25lOiBOZ1pvbmUsXG4gICAgICAgIHByaXZhdGUgX2RpcjogSWd4RGlyZWN0aW9uYWxpdHkpIHtcbiAgICAgICAgdGhpcy5zdGVwRGlzdGFuY2UgPSB0aGlzLl9zdGVwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBASG9zdExpc3RlbmVyKCdmb2N1cycpXG4gICAgcHVibGljIG9uRm9jdXMoKSB7XG4gICAgICAgIHRoaXMudG9nZ2xlU2xpZGVySW5kaWNhdG9ycygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgd2hldGhlciB0aGUgYElneFNsaWRlckNvbXBvbmVudGAgdHlwZSBpcyBSQU5HRS5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogIEBWaWV3Q2hpbGQoXCJzbGlkZXJcIilcbiAgICAgKiBwdWJsaWMgc2xpZGVyOiBJZ3hTbGlkZXJDb21wb25lbnQ7XG4gICAgICogbmdBZnRlclZpZXdJbml0KCl7XG4gICAgICogICAgIGxldCBzbGlkZXJSYW5nZSA9IHRoaXMuc2xpZGVyLmlzUmFuZ2U7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgaXNSYW5nZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHlwZSA9PT0gSWd4U2xpZGVyVHlwZS5SQU5HRTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBsb3dlciB2YWx1ZSBvZiBhIFJBTkdFIGBJZ3hTbGlkZXJDb21wb25lbnRgLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBAVmlld0NoaWxkKFwic2xpZGVyXCIpXG4gICAgICogcHVibGljIHNsaWRlcjogSWd4U2xpZGVyQ29tcG9uZW50O1xuICAgICAqIHB1YmxpYyBsb3dWYWx1ZShldmVudCl7XG4gICAgICogICAgbGV0IHNsaWRlckxvd1ZhbHVlID0gdGhpcy5zbGlkZXIubG93ZXJWYWx1ZTtcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGdldCBsb3dlclZhbHVlKCk6IG51bWJlciB7XG4gICAgICAgIGlmICghTnVtYmVyLmlzTmFOKHRoaXMuX2xvd2VyVmFsdWUpICYmIHRoaXMuX2xvd2VyVmFsdWUgIT09IHVuZGVmaW5lZCAmJiB0aGlzLl9sb3dlclZhbHVlID49IHRoaXMubG93ZXJCb3VuZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xvd2VyVmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5sb3dlckJvdW5kO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIGxvd2VyIHZhbHVlIG9mIGEgUkFOR0UgYElneFNsaWRlckNvbXBvbmVudGAuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIEBWaWV3Q2hpbGQoXCJzbGlkZXJcIilcbiAgICAgKiBwdWJsaWMgc2xpZGVyOiBJZ3hTbGlkZXJDb21wb25lbnQ7XG4gICAgICogcHVibGljIGxvd1ZhbHVlKGV2ZW50KXtcbiAgICAgKiAgICB0aGlzLnNsaWRlci5sb3dlclZhbHVlID0gdmFsdWU7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNldCBsb3dlclZhbHVlKHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgYWRqdXN0ZWRWYWx1ZSA9IHRoaXMudmFsdWVJblJhbmdlKHZhbHVlLCB0aGlzLmxvd2VyQm91bmQsIHRoaXMudXBwZXJCb3VuZCk7XG4gICAgICAgIGlmICh0aGlzLl9sb3dlclZhbHVlICE9PSBhZGp1c3RlZFZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLl9sb3dlclZhbHVlID0gYWRqdXN0ZWRWYWx1ZTtcbiAgICAgICAgICAgIHRoaXMubG93ZXJWYWx1ZUNoYW5nZS5lbWl0KHRoaXMuX2xvd2VyVmFsdWUpO1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHsgbG93ZXI6IHRoaXMuX2xvd2VyVmFsdWUsIHVwcGVyOiB0aGlzLl91cHBlclZhbHVlIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSB1cHBlciB2YWx1ZSBvZiBhIFJBTkdFIGBJZ3hTbGlkZXJDb21wb25lbnRgLlxuICAgICAqIFJldHVybnMgYHZhbHVlYCBvZiBhIFNMSURFUiBgSWd4U2xpZGVyQ29tcG9uZW50YFxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAgQFZpZXdDaGlsZChcInNsaWRlcjJcIilcbiAgICAgKiBwdWJsaWMgc2xpZGVyOiBJZ3hTbGlkZXJDb21wb25lbnQ7XG4gICAgICogcHVibGljIHVwcGVyVmFsdWUoZXZlbnQpe1xuICAgICAqICAgICBsZXQgdXBwZXJWYWx1ZSA9IHRoaXMuc2xpZGVyLnVwcGVyVmFsdWU7XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgdXBwZXJWYWx1ZSgpIHtcbiAgICAgICAgaWYgKCFOdW1iZXIuaXNOYU4odGhpcy5fdXBwZXJWYWx1ZSkgJiYgdGhpcy5fdXBwZXJWYWx1ZSAhPT0gdW5kZWZpbmVkICYmIHRoaXMuX3VwcGVyVmFsdWUgPD0gdGhpcy51cHBlckJvdW5kKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdXBwZXJWYWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLnVwcGVyQm91bmQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgdXBwZXIgdmFsdWUgb2YgYSBSQU5HRSBgSWd4U2xpZGVyQ29tcG9uZW50YC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogIEBWaWV3Q2hpbGQoXCJzbGlkZXIyXCIpXG4gICAgICogcHVibGljIHNsaWRlcjogSWd4U2xpZGVyQ29tcG9uZW50O1xuICAgICAqIHB1YmxpYyB1cHBlclZhbHVlKGV2ZW50KXtcbiAgICAgKiAgICAgdGhpcy5zbGlkZXIudXBwZXJWYWx1ZSA9IHZhbHVlO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzZXQgdXBwZXJWYWx1ZSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGFkanVzdGVkVmFsdWUgPSB0aGlzLnZhbHVlSW5SYW5nZSh2YWx1ZSwgdGhpcy5sb3dlckJvdW5kLCB0aGlzLnVwcGVyQm91bmQpO1xuICAgICAgICBpZiAodGhpcy5fdXBwZXJWYWx1ZSAhPT0gYWRqdXN0ZWRWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5fdXBwZXJWYWx1ZSA9IGFkanVzdGVkVmFsdWU7XG4gICAgICAgICAgICB0aGlzLnVwcGVyVmFsdWVDaGFuZ2UuZW1pdCh0aGlzLl91cHBlclZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB7IGxvd2VyOiB0aGlzLl9sb3dlclZhbHVlLCB1cHBlcjogdGhpcy5fdXBwZXJWYWx1ZSB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgdmFsdWUgY29ycmVzcG9uZGluZyB0aGUgbG93ZXIgbGFiZWwuXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIEBWaWV3Q2hpbGQoXCJzbGlkZXJcIilcbiAgICAgKiBwdWJsaWMgc2xpZGVyOiBJZ3hTbGlkZXJDb21wb25lbnQ7XG4gICAgICogbGV0IGxhYmVsID0gdGhpcy5zbGlkZXIubG93ZXJMYWJlbDtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGxvd2VyTGFiZWwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxhYmVsc1ZpZXdFbmFibGVkID8gdGhpcy5sYWJlbHNbdGhpcy5sb3dlclZhbHVlXSA6IHRoaXMubG93ZXJWYWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBjb3JyZXNwb25kaW5nIHRoZSB1cHBlciBsYWJlbC5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogQFZpZXdDaGlsZChcInNsaWRlclwiKVxuICAgICAqIHB1YmxpYyBzbGlkZXI6IElneFNsaWRlckNvbXBvbmVudDtcbiAgICAgKiBsZXQgbGFiZWwgPSB0aGlzLnNsaWRlci51cHBlckxhYmVsO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgdXBwZXJMYWJlbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubGFiZWxzVmlld0VuYWJsZWQgPyB0aGlzLmxhYmVsc1t0aGlzLnVwcGVyVmFsdWVdIDogdGhpcy51cHBlclZhbHVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgaWYgbGFiZWwgdmlldyBpcyBlbmFibGVkLlxuICAgICAqIElmIHRoZSB7QGxpbmsgbGFiZWxzfSBpcyBzZXQsIHRoZSB2aWV3IGlzIGF1dG9tYXRpY2FsbHkgYWN0aXZhdGVkLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBAVmlld0NoaWxkKFwic2xpZGVyXCIpXG4gICAgICogcHVibGljIHNsaWRlcjogSWd4U2xpZGVyQ29tcG9uZW50O1xuICAgICAqIGxldCBsYWJlbFZpZXcgPSB0aGlzLnNsaWRlci5sYWJlbHNWaWV3RW5hYmxlZDtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGxhYmVsc1ZpZXdFbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISEodGhpcy5sYWJlbHMgJiYgdGhpcy5sYWJlbHMubGVuZ3RoID4gMSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgc2hvd1RvcFRpY2tzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50aWNrc09yaWVudGF0aW9uID09PSBUaWNrc09yaWVudGF0aW9uLlRvcCB8fFxuICAgICAgICAgICAgdGhpcy50aWNrc09yaWVudGF0aW9uID09PSBUaWNrc09yaWVudGF0aW9uLk1pcnJvcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIGdldCBzaG93Qm90dG9tVGlja3MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRpY2tzT3JpZW50YXRpb24gPT09IFRpY2tzT3JpZW50YXRpb24uQm90dG9tIHx8XG4gICAgICAgICAgICB0aGlzLnRpY2tzT3JpZW50YXRpb24gPT09IFRpY2tzT3JpZW50YXRpb24uTWlycm9yO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgICAgICBpZiAoY2hhbmdlcy5taW5WYWx1ZSAmJiBjaGFuZ2VzLm1heFZhbHVlICYmXG4gICAgICAgICAgICBjaGFuZ2VzLm1pblZhbHVlLmN1cnJlbnRWYWx1ZSA8IGNoYW5nZXMubWF4VmFsdWUuY3VycmVudFZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLl9tYXhWYWx1ZSA9IGNoYW5nZXMubWF4VmFsdWUuY3VycmVudFZhbHVlO1xuICAgICAgICAgICAgdGhpcy5fbWluVmFsdWUgPSBjaGFuZ2VzLm1pblZhbHVlLmN1cnJlbnRWYWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGFuZ2VzLnN0ZXAgJiYgY2hhbmdlcy5zdGVwLmlzRmlyc3RDaGFuZ2UoKSkge1xuICAgICAgICAgICAgdGhpcy5ub3JtYWxpemVCeVN0ZXAodGhpcy5fdmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBuZ09uSW5pdCgpIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIGlmIHtAbGluayBTbGlkZXJUeXBlLlNMSURFUn0gdGhhbiB0aGUgaW5pdGlhbCB2YWx1ZSBzaG9sZCBiZSB0aGUgbG93ZXN0IG9uZS5cbiAgICAgICAgICovXG4gICAgICAgIGlmICghdGhpcy5pc1JhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLl91cHBlclZhbHVlID0gdGhpcy5sb3dlckJvdW5kO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2V0IHRyYWNrIHRyYXZlbCB6b25lXG4gICAgICAgIHRoaXMuX3BNaW4gPSB0aGlzLnZhbHVlVG9GcmFjdGlvbih0aGlzLmxvd2VyQm91bmQpIHx8IDA7XG4gICAgICAgIHRoaXMuX3BNYXggPSB0aGlzLnZhbHVlVG9GcmFjdGlvbih0aGlzLnVwcGVyQm91bmQpIHx8IDE7XG4gICAgfVxuXG4gICAgcHVibGljIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICAgICAgdGhpcy5zZXRWYWx1ZSh0aGlzLl92YWx1ZSwgZmFsc2UpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICB0aGlzLl9oYXNWaWV3SW5pdCA9IHRydWU7XG4gICAgICAgIHRoaXMuc3RlcERpc3RhbmNlID0gdGhpcy5jYWxjdWxhdGVTdGVwRGlzdGFuY2UoKTtcbiAgICAgICAgdGhpcy5wb3NpdGlvbkhhbmRsZXJzQW5kVXBkYXRlVHJhY2soKTtcbiAgICAgICAgdGhpcy5zZXRUaWNrSW50ZXJ2YWwoKTtcbiAgICAgICAgdGhpcy5jaGFuZ2VUaHVtYkZvY3VzYWJsZVN0YXRlKHRoaXMuZGlzYWJsZWQpO1xuXG4gICAgICAgIHRoaXMuc3Vic2NyaWJlVG9FdmVudHModGhpcy50aHVtYkZyb20pO1xuICAgICAgICB0aGlzLnN1YnNjcmliZVRvRXZlbnRzKHRoaXMudGh1bWJUbyk7XG5cbiAgICAgICAgdGhpcy50aHVtYnMuY2hhbmdlcy5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95ZXIkKSkuc3Vic2NyaWJlKGNoYW5nZSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0aHVtYkZyb20gPSBjaGFuZ2UuZmluZCgodGh1bWI6IElneFNsaWRlclRodW1iQ29tcG9uZW50KSA9PiB0aHVtYi50eXBlID09PSBTbGlkZXJIYW5kbGUuRlJPTSk7XG4gICAgICAgICAgICB0aGlzLnBvc2l0aW9uSGFuZGxlcih0aHVtYkZyb20sIG51bGwsIHRoaXMubG93ZXJWYWx1ZSk7XG4gICAgICAgICAgICB0aGlzLnN1YnNjcmliZVRvRXZlbnRzKHRodW1iRnJvbSk7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZVRodW1iRm9jdXNhYmxlU3RhdGUodGhpcy5kaXNhYmxlZCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMubGFiZWxSZWZzLmNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveWVyJCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBsYWJlbEZyb20gPSB0aGlzLmxhYmVsUmVmcy5maW5kKChsYWJlbDogSWd4VGh1bWJMYWJlbENvbXBvbmVudCkgPT4gbGFiZWwudHlwZSA9PT0gU2xpZGVySGFuZGxlLkZST00pO1xuICAgICAgICAgICAgdGhpcy5wb3NpdGlvbkhhbmRsZXIobnVsbCwgbGFiZWxGcm9tLCB0aGlzLmxvd2VyVmFsdWUpO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgcmVzaXplT2JzZXJ2YWJsZSh0aGlzLl9lbC5uYXRpdmVFbGVtZW50KS5waXBlKFxuICAgICAgICAgICAgICAgIHRocm90dGxlVGltZSg0MCksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3llciQpKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5fbmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RlcERpc3RhbmNlID0gdGhpcy5jYWxjdWxhdGVTdGVwRGlzdGFuY2UoKTtcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICBmcm9tRXZlbnQodGhpcy5fZWwubmF0aXZlRWxlbWVudCwgJ3BvaW50ZXJtb3ZlJykucGlwZShcbiAgICAgICAgICAgICAgICB0aHJvdHRsZSgoKSA9PiBpbnRlcnZhbCgwLCBhbmltYXRpb25GcmFtZVNjaGVkdWxlcikpLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95ZXIkKSkuc3Vic2NyaWJlKCgkZXZlbnQ6IFBvaW50ZXJFdmVudCkgPT4gdGhpcy5fbmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25Qb2ludGVyTW92ZSgkZXZlbnQpO1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5fZGVzdHJveWVyJC5uZXh0KHRydWUpO1xuICAgICAgICB0aGlzLl9kZXN0cm95ZXIkLmNvbXBsZXRlKCk7XG5cbiAgICAgICAgdGhpcy5faW5kaWNhdG9yc0Rlc3Ryb3llciQubmV4dCh0cnVlKTtcbiAgICAgICAgdGhpcy5faW5kaWNhdG9yc0Rlc3Ryb3llciQuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIHdyaXRlVmFsdWUodmFsdWU6IElSYW5nZVNsaWRlclZhbHVlIHwgbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmlzTnVsbGlzaEJ1dE5vdFplcm8odmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm5vcm1hbGl6ZUJ5U3RlcCh2YWx1ZSk7XG4gICAgICAgIHRoaXMuc2V0VmFsdWUodGhpcy5fdmFsdWUsIGZhbHNlKTtcbiAgICAgICAgdGhpcy5wb3NpdGlvbkhhbmRsZXJzQW5kVXBkYXRlVHJhY2soKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrID0gZm47XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX29uVG91Y2hlZENhbGxiYWNrID0gZm47XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwdWJsaWMgZ2V0RWRpdEVsZW1lbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzUmFuZ2UgPyB0aGlzLnRodW1iRnJvbS5uYXRpdmVFbGVtZW50IDogdGhpcy50aHVtYlRvLm5hdGl2ZUVsZW1lbnQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHVibGljIHVwZGF0ZShtb3VzZVgpIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFVwZGF0ZSBUby9Gcm9tIFZhbHVlc1xuICAgICAgICB0aGlzLm9uUGFuLm5leHQobW91c2VYKTtcblxuICAgICAgICAvLyBGaW5hbGx5IGRvIHBvc2l0aW9uSGFuZGxlcnNBbmRVcGRhdGVUcmFjayB0aGUgRE9NXG4gICAgICAgIC8vIGJhc2VkIG9uIGRhdGEgdmFsdWVzXG4gICAgICAgIHRoaXMucG9zaXRpb25IYW5kbGVyc0FuZFVwZGF0ZVRyYWNrKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyB0aHVtYkNoYW5nZWQodmFsdWU6IG51bWJlciwgdGh1bWJUeXBlOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3Qgb2xkVmFsdWUgPSB0aGlzLnZhbHVlO1xuXG4gICAgICAgIGlmICh0aGlzLmlzUmFuZ2UpIHtcbiAgICAgICAgICAgIGlmICh0aHVtYlR5cGUgPT09IFNsaWRlckhhbmRsZS5GUk9NKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubG93ZXJWYWx1ZSArIHZhbHVlID4gdGhpcy51cHBlclZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBwZXJWYWx1ZSA9IHRoaXMubG93ZXJWYWx1ZSArIHZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmxvd2VyVmFsdWUgKz0gdmFsdWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnVwcGVyVmFsdWUgKyB2YWx1ZSA8IHRoaXMubG93ZXJWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvd2VyVmFsdWUgPSB0aGlzLnVwcGVyVmFsdWUgKyB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy51cHBlclZhbHVlICs9IHZhbHVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBuZXdWYWw6IElSYW5nZVNsaWRlclZhbHVlID0ge1xuICAgICAgICAgICAgICAgIGxvd2VyOiB0aGlzLmxvd2VyVmFsdWUsXG4gICAgICAgICAgICAgICAgdXBwZXI6IHRoaXMudXBwZXJWYWx1ZVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBTd2FwIHRoZSB0aHVtYnMgaWYgYSBjb2xsaXNpb24gYXBwZWFycy5cbiAgICAgICAgICAgIC8vIGlmIChuZXdWYWwubG93ZXIgPT0gbmV3VmFsLnVwcGVyKSB7XG4gICAgICAgICAgICAvLyAgICAgdGhpcy50b2dnbGVUaHVtYigpO1xuICAgICAgICAgICAgLy8gfVxuXG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gbmV3VmFsO1xuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBuZXdWYWwgPSAodGhpcy52YWx1ZSBhcyBudW1iZXIpICsgdmFsdWU7XG4gICAgICAgICAgICBpZiAobmV3VmFsID49IHRoaXMubG93ZXJCb3VuZCAmJiBuZXdWYWwgPD0gdGhpcy51cHBlckJvdW5kKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IG5ld1ZhbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmhhc1ZhbHVlQ2hhbmdlZChvbGRWYWx1ZSkpIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdFZhbHVlQ2hhbmdlKG9sZFZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwdWJsaWMgb25UaHVtYkNoYW5nZSgpIHtcbiAgICAgICAgdGhpcy50b2dnbGVTbGlkZXJJbmRpY2F0b3JzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHB1YmxpYyBvbkhvdmVyQ2hhbmdlKHN0YXRlOiBib29sZWFuKSB7XG4gICAgICAgIHJldHVybiBzdGF0ZSA/IHRoaXMuc2hvd1NsaWRlckluZGljYXRvcnMoKSA6IHRoaXMuaGlkZVNsaWRlckluZGljYXRvcnMoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0VmFsdWUodmFsdWU6IG51bWJlciB8IElSYW5nZVNsaWRlclZhbHVlLCB0cmlnZ2VyQ2hhbmdlOiBib29sZWFuKSB7XG4gICAgICAgIGxldCByZXM7XG4gICAgICAgIGlmICghdGhpcy5pc1JhbmdlKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlIGFzIG51bWJlcjtcbiAgICAgICAgICAgIGlmICghaXNOYU4odmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdXBwZXJWYWx1ZSA9IHZhbHVlIC0gdmFsdWUgJSB0aGlzLnN0ZXA7XG4gICAgICAgICAgICAgICAgcmVzID0gdGhpcy51cHBlclZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFsdWUgPSB0aGlzLnZhbGlkYXRlSW5pdGlhbFZhbHVlKHZhbHVlIGFzIElSYW5nZVNsaWRlclZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMuX3VwcGVyVmFsdWUgPSB2YWx1ZS51cHBlcjtcbiAgICAgICAgICAgIHRoaXMuX2xvd2VyVmFsdWUgPSB2YWx1ZS5sb3dlcjtcbiAgICAgICAgICAgIHJlcyA9IHsgbG93ZXI6IHRoaXMubG93ZXJWYWx1ZSwgdXBwZXI6IHRoaXMudXBwZXJWYWx1ZSB9O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRyaWdnZXJDaGFuZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2socmVzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ3BvaW50ZXJkb3duJywgWyckZXZlbnQnXSlcbiAgICBwcml2YXRlIG9uUG9pbnRlckRvd24oJGV2ZW50OiBQb2ludGVyRXZlbnQpIHtcbiAgICAgICAgdGhpcy5maW5kQ2xvc2VzdFRodW1iKCRldmVudCk7XG5cbiAgICAgICAgaWYgKCF0aGlzLnRodW1iVG8uaXNBY3RpdmUgJiYgdGhpcy50aHVtYkZyb20gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fc2xpZGluZyA9IHRydWU7XG4gICAgICAgIGNvbnN0IGFjdGl2ZVRodW1iID0gdGhpcy50aHVtYlRvLmlzQWN0aXZlID8gdGhpcy50aHVtYlRvIDogdGhpcy50aHVtYkZyb207XG4gICAgICAgIGFjdGl2ZVRodW1iLm5hdGl2ZUVsZW1lbnQuc2V0UG9pbnRlckNhcHR1cmUoJGV2ZW50LnBvaW50ZXJJZCk7XG4gICAgICAgIHRoaXMuc2hvd1NsaWRlckluZGljYXRvcnMoKTtcblxuICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uUG9pbnRlck1vdmUoJGV2ZW50OiBQb2ludGVyRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuX3NsaWRpbmcpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlKCRldmVudC5jbGllbnRYKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoJ3BvaW50ZXJ1cCcsIFsnJGV2ZW50J10pXG4gICAgcHJpdmF0ZSBvblBvaW50ZXJVcCgkZXZlbnQ6IFBvaW50ZXJFdmVudCkge1xuICAgICAgICBpZiAoIXRoaXMudGh1bWJUby5pc0FjdGl2ZSAmJiB0aGlzLnRodW1iRnJvbSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhY3RpdmVUaHVtYiA9IHRoaXMudGh1bWJUby5pc0FjdGl2ZSA/IHRoaXMudGh1bWJUbyA6IHRoaXMudGh1bWJGcm9tO1xuICAgICAgICBhY3RpdmVUaHVtYi5uYXRpdmVFbGVtZW50LnJlbGVhc2VQb2ludGVyQ2FwdHVyZSgkZXZlbnQucG9pbnRlcklkKTtcblxuICAgICAgICB0aGlzLl9zbGlkaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaGlkZVNsaWRlckluZGljYXRvcnMoKTtcbiAgICAgICAgdGhpcy5kcmFnRmluaXNoZWQuZW1pdCh0aGlzLnZhbHVlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHZhbGlkYXRlSW5pdGlhbFZhbHVlKHZhbHVlOiBJUmFuZ2VTbGlkZXJWYWx1ZSkge1xuICAgICAgICBpZiAodmFsdWUudXBwZXIgPCB2YWx1ZS5sb3dlcikge1xuICAgICAgICAgICAgY29uc3QgdGVtcCA9IHZhbHVlLnVwcGVyO1xuICAgICAgICAgICAgdmFsdWUudXBwZXIgPSB2YWx1ZS5sb3dlcjtcbiAgICAgICAgICAgIHZhbHVlLmxvd2VyID0gdGVtcDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2YWx1ZS5sb3dlciA8IHRoaXMubG93ZXJCb3VuZCkge1xuICAgICAgICAgICAgdmFsdWUubG93ZXIgPSB0aGlzLmxvd2VyQm91bmQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsdWUudXBwZXIgPiB0aGlzLnVwcGVyQm91bmQpIHtcbiAgICAgICAgICAgIHZhbHVlLnVwcGVyID0gdGhpcy51cHBlckJvdW5kO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgZmluZENsb3Nlc3RUaHVtYihldmVudDogUG9pbnRlckV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmlzUmFuZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VzdEhhbmRsZShldmVudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnRodW1iVG8ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy51cGRhdGUoZXZlbnQuY2xpZW50WCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVMb3dlckJvdW5kQW5kTWluVHJhdmVsWm9uZSgpIHtcbiAgICAgICAgdGhpcy5sb3dlckJvdW5kID0gdGhpcy5taW5WYWx1ZTtcbiAgICAgICAgdGhpcy5fcE1pbiA9IDA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVVcHBlckJvdW5kQW5kTWF4VHJhdmVsWm9uZSgpIHtcbiAgICAgICAgdGhpcy51cHBlckJvdW5kID0gdGhpcy5tYXhWYWx1ZTtcbiAgICAgICAgdGhpcy5fcE1heCA9IDE7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjYWxjdWxhdGVTdGVwRGlzdGFuY2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoIC8gKHRoaXMubWF4VmFsdWUgLSB0aGlzLm1pblZhbHVlKSAqIHRoaXMuc3RlcDtcbiAgICB9XG5cbiAgICAvLyBwcml2YXRlIHRvZ2dsZVRodW1iKCkge1xuICAgIC8vICAgICByZXR1cm4gdGhpcy50aHVtYkZyb20uaXNBY3RpdmUgP1xuICAgIC8vICAgICAgICAgdGhpcy50aHVtYlRvLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKSA6XG4gICAgLy8gICAgICAgICB0aGlzLnRodW1iRnJvbS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgLy8gfVxuXG4gICAgcHJpdmF0ZSB2YWx1ZUluUmFuZ2UodmFsdWUsIG1pbiA9IDAsIG1heCA9IDEwMCkge1xuICAgICAgICByZXR1cm4gTWF0aC5tYXgoTWF0aC5taW4odmFsdWUsIG1heCksIG1pbik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwb3NpdGlvbkhhbmRsZXIodGh1bWJIYW5kbGU6IEVsZW1lbnRSZWYsIGxhYmVsSGFuZGxlOiBFbGVtZW50UmVmLCBwb3NpdGlvbjogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IHBlcmNlbnQgPSBgJHt0aGlzLnZhbHVlVG9GcmFjdGlvbihwb3NpdGlvbikgKiAxMDB9JWA7XG4gICAgICAgIGNvbnN0IGRpciA9IHRoaXMuX2Rpci5ydGwgPyAncmlnaHQnIDogJ2xlZnQnO1xuXG4gICAgICAgIGlmICh0aHVtYkhhbmRsZSkge1xuICAgICAgICAgICAgdGh1bWJIYW5kbGUubmF0aXZlRWxlbWVudC5zdHlsZVtkaXJdID0gcGVyY2VudDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsYWJlbEhhbmRsZSkge1xuICAgICAgICAgICAgbGFiZWxIYW5kbGUubmF0aXZlRWxlbWVudC5zdHlsZVtkaXJdID0gcGVyY2VudDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcG9zaXRpb25IYW5kbGVyc0FuZFVwZGF0ZVRyYWNrKCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNSYW5nZSkge1xuICAgICAgICAgICAgdGhpcy5wb3NpdGlvbkhhbmRsZXIodGhpcy50aHVtYlRvLCB0aGlzLmxhYmVsVG8sIHRoaXMudmFsdWUgYXMgbnVtYmVyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucG9zaXRpb25IYW5kbGVyKHRoaXMudGh1bWJUbywgdGhpcy5sYWJlbFRvLCAodGhpcy52YWx1ZSBhcyBJUmFuZ2VTbGlkZXJWYWx1ZSkudXBwZXIpO1xuICAgICAgICAgICAgdGhpcy5wb3NpdGlvbkhhbmRsZXIodGhpcy50aHVtYkZyb20sIHRoaXMubGFiZWxGcm9tLCAodGhpcy52YWx1ZSBhcyBJUmFuZ2VTbGlkZXJWYWx1ZSkubG93ZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX2hhc1ZpZXdJbml0KSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVRyYWNrKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGNsb3Nlc3RIYW5kbGUoZXZlbnQ6IFBvaW50ZXJFdmVudCkge1xuICAgICAgICBjb25zdCBmcm9tT2Zmc2V0ID0gdGhpcy50aHVtYkZyb20ubmF0aXZlRWxlbWVudC5vZmZzZXRMZWZ0ICsgdGhpcy50aHVtYkZyb20ubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aCAvIDI7XG4gICAgICAgIGNvbnN0IHRvT2Zmc2V0ID0gdGhpcy50aHVtYlRvLm5hdGl2ZUVsZW1lbnQub2Zmc2V0TGVmdCArIHRoaXMudGh1bWJUby5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoIC8gMjtcbiAgICAgICAgY29uc3QgeFBvaW50ZXIgPSBldmVudC5jbGllbnRYIC0gdGhpcy5fZWwubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0O1xuICAgICAgICBjb25zdCBtYXRjaCA9IHRoaXMuY2xvc2VzdFRvKHhQb2ludGVyLCBbZnJvbU9mZnNldCwgdG9PZmZzZXRdKTtcblxuICAgICAgICBpZiAoZnJvbU9mZnNldCA9PT0gdG9PZmZzZXQgJiYgdG9PZmZzZXQgPCB4UG9pbnRlcikge1xuICAgICAgICAgICAgdGhpcy50aHVtYlRvLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfSBlbHNlIGlmIChmcm9tT2Zmc2V0ID09PSB0b09mZnNldCAmJiB0b09mZnNldCA+IHhQb2ludGVyKSB7XG4gICAgICAgICAgICB0aGlzLnRodW1iRnJvbS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIH0gZWxzZSBpZiAobWF0Y2ggPT09IGZyb21PZmZzZXQpIHtcbiAgICAgICAgICAgIHRoaXMudGh1bWJGcm9tLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudGh1bWJUby5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNldFRpY2tJbnRlcnZhbCgpIHtcbiAgICAgICAgbGV0IHRpY2tJbnRlcnZhbDtcbiAgICAgICAgY29uc3QgdHJhY2tQcm9ncmVzcyA9IDEwMDtcblxuICAgICAgICBpZiAodGhpcy5sYWJlbHNWaWV3RW5hYmxlZCkge1xuICAgICAgICAgICAgLy8gQ2FsYyB0aWNrcyBkZXBlbmRpbmcgb24gdGhlIGxhYmVscyBsZW5ndGg7XG4gICAgICAgICAgICB0aWNrSW50ZXJ2YWwgPSAoKHRyYWNrUHJvZ3Jlc3MgLyAodGhpcy5sYWJlbHMubGVuZ3RoIC0gMSkgKiAxMCkpIC8gMTA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB0cmFja1JhbmdlID0gdGhpcy5tYXhWYWx1ZSAtIHRoaXMubWluVmFsdWU7XG4gICAgICAgICAgICB0aWNrSW50ZXJ2YWwgPSB0aGlzLnN0ZXAgPiAxID9cbiAgICAgICAgICAgICAgICAodHJhY2tQcm9ncmVzcyAvICgodHJhY2tSYW5nZSAvIHRoaXMuc3RlcCkpICogMTApIC8gMTBcbiAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMudGlja3MubmF0aXZlRWxlbWVudCwgJ3N0cm9rZS1kYXNoYXJyYXknLCBgMCwgJHt0aWNrSW50ZXJ2YWwgKiBNYXRoLnNxcnQoMil9JWApO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMudGlja3MubmF0aXZlRWxlbWVudCwgJ3Zpc2liaWxpdHknLCB0aGlzLmNvbnRpbnVvdXMgfHwgdGlja0ludGVydmFsID09PSBudWxsID8gJ2hpZGRlbicgOiAndmlzaWJsZScpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2hvd1NsaWRlckluZGljYXRvcnMoKSB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5faW5kaWNhdG9yc1RpbWVyKSB7XG4gICAgICAgICAgICB0aGlzLl9pbmRpY2F0b3JzRGVzdHJveWVyJC5uZXh0KHRydWUpO1xuICAgICAgICAgICAgdGhpcy5faW5kaWNhdG9yc1RpbWVyID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudGh1bWJUby5zaG93VGh1bWJJbmRpY2F0b3JzKCk7XG4gICAgICAgIHRoaXMubGFiZWxUby5hY3RpdmUgPSB0cnVlO1xuICAgICAgICBpZiAodGhpcy50aHVtYkZyb20pIHtcbiAgICAgICAgICAgIHRoaXMudGh1bWJGcm9tLnNob3dUaHVtYkluZGljYXRvcnMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmxhYmVsRnJvbSkge1xuICAgICAgICAgICAgdGhpcy5sYWJlbEZyb20uYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoaWRlU2xpZGVySW5kaWNhdG9ycygpIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2luZGljYXRvcnNUaW1lciA9IHRpbWVyKHRoaXMudGh1bWJMYWJlbFZpc2liaWxpdHlEdXJhdGlvbik7XG4gICAgICAgIHRoaXMuX2luZGljYXRvcnNUaW1lci5waXBlKHRha2VVbnRpbCh0aGlzLl9pbmRpY2F0b3JzRGVzdHJveWVyJCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnRodW1iVG8uaGlkZVRodW1iSW5kaWNhdG9ycygpO1xuICAgICAgICAgICAgdGhpcy5sYWJlbFRvLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKHRoaXMudGh1bWJGcm9tKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50aHVtYkZyb20uaGlkZVRodW1iSW5kaWNhdG9ycygpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5sYWJlbEZyb20pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxhYmVsRnJvbS5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB0b2dnbGVTbGlkZXJJbmRpY2F0b3JzKCkge1xuICAgICAgICB0aGlzLnNob3dTbGlkZXJJbmRpY2F0b3JzKCk7XG4gICAgICAgIHRoaXMuaGlkZVNsaWRlckluZGljYXRvcnMoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNoYW5nZVRodW1iRm9jdXNhYmxlU3RhdGUoc3RhdGU6IGJvb2xlYW4pIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBzdGF0ZSA/IC0xIDogMDtcblxuICAgICAgICBpZiAodGhpcy5pc1JhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLnRodW1iRnJvbS50YWJpbmRleCA9IHZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50aHVtYlRvLnRhYmluZGV4ID0gdmFsdWU7XG5cbiAgICAgICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNsb3Nlc3RUbyhnb2FsOiBudW1iZXIsIHBvc2l0aW9uczogbnVtYmVyW10pOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gcG9zaXRpb25zLnJlZHVjZSgocHJldmlvdXMsIGN1cnJlbnQpID0+IChNYXRoLmFicyhnb2FsIC0gY3VycmVudCkgPCBNYXRoLmFicyhnb2FsIC0gcHJldmlvdXMpID8gY3VycmVudCA6IHByZXZpb3VzKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB2YWx1ZVRvRnJhY3Rpb24odmFsdWU6IG51bWJlciwgcE1pbiA9IHRoaXMuX3BNaW4sIHBNYXggPSB0aGlzLl9wTWF4KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlSW5SYW5nZSgodmFsdWUgLSB0aGlzLm1pblZhbHVlKSAvICh0aGlzLm1heFZhbHVlIC0gdGhpcy5taW5WYWx1ZSksIHBNaW4sIHBNYXgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNOdWxsaXNoQnV0Tm90WmVybyh2YWx1ZTogYW55KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhdmFsdWUgJiYgdmFsdWUgIT09IDA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIE5vcm1hbGl60LUgdGhlIHZhbHVlIHdoZW4gdHdvLXdheSBkYXRhIGJpbmQgaXMgdXNlZCBhbmQge0BsaW5rIHRoaXMuc3RlcH0gaXMgc2V0LlxuICAgICAqIEBwYXJhbSB2YWx1ZVxuICAgICAqL1xuICAgIHByaXZhdGUgbm9ybWFsaXplQnlTdGVwKHZhbHVlOiBJUmFuZ2VTbGlkZXJWYWx1ZSB8IG51bWJlcikge1xuICAgICAgICBpZiAodGhpcy5pc1JhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLl92YWx1ZSA9IHtcbiAgICAgICAgICAgICAgICBsb3dlcjogKHZhbHVlIGFzIElSYW5nZVNsaWRlclZhbHVlKS5sb3dlciAtICgodmFsdWUgYXMgSVJhbmdlU2xpZGVyVmFsdWUpLmxvd2VyICUgdGhpcy5zdGVwKSxcbiAgICAgICAgICAgICAgICB1cHBlcjogKHZhbHVlIGFzIElSYW5nZVNsaWRlclZhbHVlKS51cHBlciAtICgodmFsdWUgYXMgSVJhbmdlU2xpZGVyVmFsdWUpLnVwcGVyICUgdGhpcy5zdGVwKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gKHZhbHVlIGFzIG51bWJlcikgLSAoKHZhbHVlIGFzIG51bWJlcikgJSB0aGlzLnN0ZXApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVUcmFjaygpIHtcbiAgICAgICAgY29uc3QgZnJvbVBvc2l0aW9uID0gdGhpcy52YWx1ZVRvRnJhY3Rpb24odGhpcy5sb3dlclZhbHVlKTtcbiAgICAgICAgY29uc3QgdG9Qb3NpdGlvbiA9IHRoaXMudmFsdWVUb0ZyYWN0aW9uKHRoaXMudXBwZXJWYWx1ZSk7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uR2FwID0gdG9Qb3NpdGlvbiAtIGZyb21Qb3NpdGlvbjtcblxuICAgICAgICBsZXQgdHJhY2tMZWZ0SW5kZW50aW9uID0gZnJvbVBvc2l0aW9uO1xuICAgICAgICBpZiAodGhpcy5pc1JhbmdlKSB7XG4gICAgICAgICAgICBpZiAocG9zaXRpb25HYXApIHtcbiAgICAgICAgICAgICAgICB0cmFja0xlZnRJbmRlbnRpb24gPSBNYXRoLnJvdW5kKCgxIC8gcG9zaXRpb25HYXAgKiBmcm9tUG9zaXRpb24pICogMTAwKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdHJhY2tMZWZ0SW5kZW50aW9uID0gdGhpcy5fZGlyLnJ0bCA/IC10cmFja0xlZnRJbmRlbnRpb24gOiB0cmFja0xlZnRJbmRlbnRpb247XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMudHJhY2tSZWYubmF0aXZlRWxlbWVudCwgJ3RyYW5zZm9ybScsIGBzY2FsZVgoJHtwb3NpdGlvbkdhcH0pIHRyYW5zbGF0ZVgoJHt0cmFja0xlZnRJbmRlbnRpb259JSlgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy50cmFja1JlZi5uYXRpdmVFbGVtZW50LCAndHJhbnNmb3JtJywgYHNjYWxlWCgke3RvUG9zaXRpb259KWApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdWJzY3JpYmVUb0V2ZW50cyh0aHVtYjogSWd4U2xpZGVyVGh1bWJDb21wb25lbnQpIHtcbiAgICAgICAgaWYgKCF0aHVtYikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGh1bWIudGh1bWJWYWx1ZUNoYW5nZVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmVyKHRodW1iKSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHZhbHVlID0+IHRoaXMudGh1bWJDaGFuZ2VkKHZhbHVlLCB0aHVtYi50eXBlKSk7XG5cbiAgICAgICAgdGh1bWIudGh1bWJCbHVyXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZXIodGh1bWIpKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5fb25Ub3VjaGVkQ2FsbGJhY2soKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1bnN1YnNjcmliZXIodGh1bWI6IElneFNsaWRlclRodW1iQ29tcG9uZW50KSB7XG4gICAgICAgIHJldHVybiBtZXJnZSh0aGlzLl9kZXN0cm95ZXIkLCB0aHVtYi5kZXN0cm95KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhc1ZhbHVlQ2hhbmdlZChvbGRWYWx1ZSkge1xuICAgICAgICBjb25zdCBpc1NsaWRlcldpdGhEaWZmZXJlbnRWYWx1ZTogYm9vbGVhbiA9ICF0aGlzLmlzUmFuZ2UgJiYgb2xkVmFsdWUgIT09IHRoaXMudmFsdWU7XG4gICAgICAgIGNvbnN0IGlzUmFuZ2VXaXRoT25lRGlmZmVyZW50VmFsdWU6IGJvb2xlYW4gPSB0aGlzLmlzUmFuZ2UgJiZcbiAgICAgICAgICAgICgob2xkVmFsdWUgYXMgSVJhbmdlU2xpZGVyVmFsdWUpLmxvd2VyICE9PSAodGhpcy52YWx1ZSBhcyBJUmFuZ2VTbGlkZXJWYWx1ZSkubG93ZXIgfHxcbiAgICAgICAgICAgICAgICAob2xkVmFsdWUgYXMgSVJhbmdlU2xpZGVyVmFsdWUpLnVwcGVyICE9PSAodGhpcy52YWx1ZSBhcyBJUmFuZ2VTbGlkZXJWYWx1ZSkudXBwZXIpO1xuXG4gICAgICAgIHJldHVybiBpc1NsaWRlcldpdGhEaWZmZXJlbnRWYWx1ZSB8fCBpc1JhbmdlV2l0aE9uZURpZmZlcmVudFZhbHVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgZW1pdFZhbHVlQ2hhbmdlKG9sZFZhbHVlOiBudW1iZXIgfCBJUmFuZ2VTbGlkZXJWYWx1ZSkge1xuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQoeyBvbGRWYWx1ZSwgdmFsdWU6IHRoaXMudmFsdWUgfSk7XG4gICAgfVxufVxuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuXG4iLCI8aWd4LXRpY2tzXG4gICAgKm5nSWY9XCJzaG93VGlja3MgJiYgc2hvd1RvcFRpY2tzXCJcbiAgICB0aWNrc09yaWVudGF0aW9uPVwidG9wXCJcbiAgICBbcHJpbWFyeVRpY2tzXT1cInByaW1hcnlUaWNrc1wiXG4gICAgW3NlY29uZGFyeVRpY2tzXT1cInNlY29uZGFyeVRpY2tzXCJcbiAgICBbcHJpbWFyeVRpY2tMYWJlbHNdPVwicHJpbWFyeVRpY2tMYWJlbHNcIlxuICAgIFtzZWNvbmRhcnlUaWNrTGFiZWxzXT1cInNlY29uZGFyeVRpY2tMYWJlbHNcIlxuICAgIFt0aWNrTGFiZWxzT3JpZW50YXRpb25dPVwidGlja0xhYmVsc09yaWVudGF0aW9uXCJcbiAgICBbbGFiZWxzVmlld0VuYWJsZWRdPVwibGFiZWxzVmlld0VuYWJsZWRcIlxuICAgIFtsYWJlbHNdPVwibGFiZWxzIHwgc3ByZWFkVGlja0xhYmVsczpzZWNvbmRhcnlUaWNrc1wiXG4gICAgW3RpY2tMYWJlbFRlbXBsYXRlUmVmXT1cInRpY2tMYWJlbFRlbXBsYXRlUmVmXCJcbiAgICBbbWluVmFsdWVdPVwibWluVmFsdWVcIlxuICAgIFttYXhWYWx1ZV09XCJtYXhWYWx1ZVwiPlxuPC9pZ3gtdGlja3M+XG48ZGl2IGNsYXNzPVwiaWd4LXNsaWRlcl9fdHJhY2tcIj5cbiAgICA8ZGl2IGNsYXNzPVwiaWd4LXNsaWRlcl9fdHJhY2staW5hY3RpdmVcIj48L2Rpdj5cbiAgICA8ZGl2ICN0cmFjayBjbGFzcz1cImlneC1zbGlkZXJfX3RyYWNrLWZpbGxcIj48L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiaWd4LXNsaWRlcl9fdHJhY2stc3RlcHNcIj5cbiAgICAgICAgPHN2ZyB3aWR0aD1cIjEwMCVcIiBoZWlnaHQ9XCIxMDAlXCI+XG4gICAgICAgICAgPGxpbmUgI3RpY2tzIHgxPVwiMFwiIHkxPVwiMlwiIHgyPVwiMTAwJVwiIHkyPVwiMlwiPjwvbGluZT5cbiAgICAgICAgPC9zdmc+XG4gICAgPC9kaXY+XG48L2Rpdj5cbjxkaXYgY2xhc3M9XCJpZ3gtc2xpZGVyX190aHVtYnNcIj5cbiAgICA8aWd4LXRodW1iLWxhYmVsXG4gICAgICAgICpuZ0lmPVwiaXNSYW5nZVwiXG4gICAgICAgIHR5cGU9XCJmcm9tXCJcbiAgICAgICAgW3ZhbHVlXT1cImxvd2VyTGFiZWxcIlxuICAgICAgICBbdGVtcGxhdGVSZWZdPVwidGh1bWJGcm9tVGVtcGxhdGVSZWZcIlxuICAgICAgICBbY29udGludW91c109XCJjb250aW51b3VzXCJcbiAgICAgICAgW2NvbnRleHRdPVwiY29udGV4dFwiXG4gICAgICAgIFtkZWFjdGl2ZVN0YXRlXT1cImRlYWN0aXZhdGVUaHVtYkxhYmVsXCJcbiAgICAgICAgW3RodW1iXT1cInRodW1iRnJvbVwiPjwvaWd4LXRodW1iLWxhYmVsPlxuXG4gICAgPGlneC10aHVtYlxuICAgICAgICAqbmdJZj1cImlzUmFuZ2VcIlxuICAgICAgICAjdGh1bWJGcm9tXG4gICAgICAgIHR5cGU9XCJmcm9tXCJcbiAgICAgICAgW3ZhbHVlXT1cImxvd2VyTGFiZWxcIlxuICAgICAgICBbbWluXT1cIm1pblZhbHVlXCJcbiAgICAgICAgW21heF09XCJtYXhWYWx1ZVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgIFtjb250aW51b3VzXT1cImNvbnRpbnVvdXNcIlxuICAgICAgICBbb25QYW5dPVwib25QYW5cIlxuICAgICAgICBbc3RlcERpc3RhbmNlXT1cInN0ZXBEaXN0YW5jZVwiXG4gICAgICAgIFtzdGVwXT1cInN0ZXBcIlxuICAgICAgICBbdGVtcGxhdGVSZWZdPVwidGh1bWJGcm9tVGVtcGxhdGVSZWZcIlxuICAgICAgICBbY29udGV4dF09XCJjb250ZXh0XCJcbiAgICAgICAgW2xhYmVsc109XCJsYWJlbHNcIlxuICAgICAgICAodGh1bWJDaGFuZ2UpPVwib25UaHVtYkNoYW5nZSgpXCJcbiAgICAgICAgKGhvdmVyQ2hhbmdlKT1cIm9uSG92ZXJDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgIFtkZWFjdGl2ZVN0YXRlXT1cImRlYWN0aXZhdGVUaHVtYkxhYmVsXCJcbiAgICAgICAgW3RodW1iTGFiZWxWaXNpYmlsaXR5RHVyYXRpb25dPVwidGh1bWJMYWJlbFZpc2liaWxpdHlEdXJhdGlvblwiPjwvaWd4LXRodW1iPlxuXG4gICAgPGlneC10aHVtYi1sYWJlbFxuICAgICAgICBbdmFsdWVdPVwidXBwZXJMYWJlbFwiXG4gICAgICAgIHR5cGU9XCJ0b1wiXG4gICAgICAgIFt0ZW1wbGF0ZVJlZl09XCJ0aHVtYlRvVGVtcGxhdGVSZWZcIlxuICAgICAgICBbY29udGludW91c109XCJjb250aW51b3VzXCJcbiAgICAgICAgW2NvbnRleHRdPVwiY29udGV4dFwiXG4gICAgICAgIFtkZWFjdGl2ZVN0YXRlXT1cImRlYWN0aXZhdGVUaHVtYkxhYmVsXCJcbiAgICAgICAgW3RodW1iXT1cInRodW1iVG9cIj48L2lneC10aHVtYi1sYWJlbD5cblxuICAgIDxpZ3gtdGh1bWJcbiAgICAgICAgI3RodW1iVG9cbiAgICAgICAgdHlwZT1cInRvXCJcbiAgICAgICAgW3ZhbHVlXT1cInVwcGVyTGFiZWxcIlxuICAgICAgICBbbWluXT1cIm1pblZhbHVlXCJcbiAgICAgICAgW21heF09XCJtYXhWYWx1ZVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgIFtjb250aW51b3VzXT1cImNvbnRpbnVvdXNcIlxuICAgICAgICBbb25QYW5dPVwib25QYW5cIlxuICAgICAgICBbc3RlcERpc3RhbmNlXT1cInN0ZXBEaXN0YW5jZVwiXG4gICAgICAgIFtzdGVwXT1cInN0ZXBcIlxuICAgICAgICBbdGVtcGxhdGVSZWZdPVwidGh1bWJUb1RlbXBsYXRlUmVmXCJcbiAgICAgICAgW2NvbnRleHRdPVwiY29udGV4dFwiXG4gICAgICAgIFtsYWJlbHNdPVwibGFiZWxzXCJcbiAgICAgICAgKHRodW1iQ2hhbmdlKT1cIm9uVGh1bWJDaGFuZ2UoKVwiXG4gICAgICAgIChob3ZlckNoYW5nZSk9XCJvbkhvdmVyQ2hhbmdlKCRldmVudClcIlxuICAgICAgICBbZGVhY3RpdmVTdGF0ZV09XCJkZWFjdGl2YXRlVGh1bWJMYWJlbFwiXG4gICAgICAgIFt0aHVtYkxhYmVsVmlzaWJpbGl0eUR1cmF0aW9uXT1cInRodW1iTGFiZWxWaXNpYmlsaXR5RHVyYXRpb25cIj48L2lneC10aHVtYj5cbjwvZGl2PlxuPGlneC10aWNrc1xuICAgICpuZ0lmPVwic2hvd1RpY2tzICYmIHNob3dCb3R0b21UaWNrc1wiXG4gICAgdGlja3NPcmllbnRhdGlvbj1cImJvdHRvbVwiXG4gICAgW3ByaW1hcnlUaWNrc109XCJwcmltYXJ5VGlja3NcIlxuICAgIFtzZWNvbmRhcnlUaWNrc109XCJzZWNvbmRhcnlUaWNrc1wiXG4gICAgW3ByaW1hcnlUaWNrTGFiZWxzXT1cInByaW1hcnlUaWNrTGFiZWxzXCJcbiAgICBbc2Vjb25kYXJ5VGlja0xhYmVsc109XCJzZWNvbmRhcnlUaWNrTGFiZWxzXCJcbiAgICBbdGlja0xhYmVsc09yaWVudGF0aW9uXT1cInRpY2tMYWJlbHNPcmllbnRhdGlvblwiXG4gICAgW2xhYmVsc1ZpZXdFbmFibGVkXT1cImxhYmVsc1ZpZXdFbmFibGVkXCJcbiAgICBbbGFiZWxzXT1cImxhYmVscyB8IHNwcmVhZFRpY2tMYWJlbHM6c2Vjb25kYXJ5VGlja3NcIlxuICAgIFt0aWNrTGFiZWxUZW1wbGF0ZVJlZl09XCJ0aWNrTGFiZWxUZW1wbGF0ZVJlZlwiXG4gICAgW21pblZhbHVlXT1cIm1pblZhbHVlXCJcbiAgICBbbWF4VmFsdWVdPVwibWF4VmFsdWVcIj5cbjwvaWd4LXRpY2tzPlxuIl19
|