@seniorsistemas/angular-components 17.9.7 → 17.10.1
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/bundles/seniorsistemas-angular-components.umd.js +893 -169
- package/bundles/seniorsistemas-angular-components.umd.js.map +1 -1
- package/bundles/seniorsistemas-angular-components.umd.min.js +2 -2
- package/bundles/seniorsistemas-angular-components.umd.min.js.map +1 -1
- package/components/button/button.component.d.ts +1 -0
- package/components/dynamic-form/services/IAssist/models/index.d.ts +2 -0
- package/components/index.d.ts +2 -0
- package/components/inline-edit/components/fields/inline-edit-calendar/inline-edit-calendar.component.d.ts +17 -0
- package/components/inline-edit/components/fields/inline-edit-lookup/inline-edit-lookup.component.d.ts +10 -0
- package/components/inline-edit/components/fields/inline-edit-number/inline-edit-number.component.d.ts +18 -0
- package/components/inline-edit/components/fields/inline-edit-text/inline-edit-text.component.d.ts +9 -0
- package/components/inline-edit/components/fields/inline-edit-text-area/inline-edit-text-area.component.d.ts +10 -0
- package/components/inline-edit/components/fields/inline-edit-text-area-ia/inline-edit-text-area-ia.component.d.ts +9 -0
- package/components/inline-edit/components/index.d.ts +7 -0
- package/components/inline-edit/components/inline-edit-item/inline-edit-item.component.d.ts +27 -0
- package/components/inline-edit/fields/index.d.ts +7 -0
- package/components/inline-edit/fields/inline-edit-calendar-field.d.ts +44 -0
- package/components/inline-edit/fields/inline-edit-field.d.ts +13 -0
- package/components/inline-edit/fields/inline-edit-lookup-field.d.ts +79 -0
- package/components/inline-edit/fields/inline-edit-number-field.d.ts +38 -0
- package/components/inline-edit/fields/inline-edit-text-area-field.d.ts +14 -0
- package/components/inline-edit/fields/inline-edit-text-area-ia-field.d.ts +6 -0
- package/components/inline-edit/fields/inline-edit-text-field.d.ts +6 -0
- package/components/inline-edit/index.d.ts +3 -0
- package/components/inline-edit/inline-edit.component.d.ts +14 -0
- package/components/inline-edit/inline-edit.module.d.ts +2 -0
- package/components/text-area-ia/index.d.ts +2 -0
- package/components/text-area-ia/text-area-ia.component.d.ts +39 -0
- package/components/text-area-ia/text-area-ia.module.d.ts +2 -0
- package/components/tooltip/tooltip.directive.d.ts +1 -1
- package/esm2015/components/button/button.component.js +5 -2
- package/esm2015/components/dynamic-form/components/fields/lookup/lookup-field.component.js +2 -2
- package/esm2015/components/dynamic-form/components/lookup/lookup.component.js +1 -1
- package/esm2015/components/dynamic-form/services/IAssist/models/index.js +1 -0
- package/esm2015/components/index.js +3 -1
- package/esm2015/components/inline-edit/components/fields/inline-edit-calendar/inline-edit-calendar.component.js +51 -0
- package/esm2015/components/inline-edit/components/fields/inline-edit-lookup/inline-edit-lookup.component.js +30 -0
- package/esm2015/components/inline-edit/components/fields/inline-edit-number/inline-edit-number.component.js +75 -0
- package/esm2015/components/inline-edit/components/fields/inline-edit-text/inline-edit-text.component.js +30 -0
- package/esm2015/components/inline-edit/components/fields/inline-edit-text-area/inline-edit-text-area.component.js +30 -0
- package/esm2015/components/inline-edit/components/fields/inline-edit-text-area-ia/inline-edit-text-area-ia.component.js +30 -0
- package/esm2015/components/inline-edit/components/index.js +8 -0
- package/esm2015/components/inline-edit/components/inline-edit-item/inline-edit-item.component.js +98 -0
- package/esm2015/components/inline-edit/fields/index.js +8 -0
- package/esm2015/components/inline-edit/fields/inline-edit-calendar-field.js +26 -0
- package/esm2015/components/inline-edit/fields/inline-edit-field.js +9 -0
- package/esm2015/components/inline-edit/fields/inline-edit-lookup-field.js +32 -0
- package/esm2015/components/inline-edit/fields/inline-edit-number-field.js +24 -0
- package/esm2015/components/inline-edit/fields/inline-edit-text-area-field.js +11 -0
- package/esm2015/components/inline-edit/fields/inline-edit-text-area-ia-field.js +7 -0
- package/esm2015/components/inline-edit/fields/inline-edit-text-field.js +7 -0
- package/esm2015/components/inline-edit/index.js +4 -0
- package/esm2015/components/inline-edit/inline-edit.component.js +70 -0
- package/esm2015/components/inline-edit/inline-edit.module.js +62 -0
- package/esm2015/components/text-area-ia/index.js +3 -0
- package/esm2015/components/text-area-ia/text-area-ia.component.js +128 -0
- package/esm2015/components/text-area-ia/text-area-ia.module.js +32 -0
- package/esm2015/components/tooltip/tooltip.component.js +3 -3
- package/esm2015/components/tooltip/tooltip.directive.js +59 -138
- package/esm2015/locale/fallback.js +3 -1
- package/esm2015/seniorsistemas-angular-components.js +37 -29
- package/esm5/components/button/button.component.js +5 -2
- package/esm5/components/dynamic-form/components/fields/lookup/lookup-field.component.js +2 -2
- package/esm5/components/dynamic-form/components/lookup/lookup.component.js +1 -1
- package/esm5/components/dynamic-form/services/IAssist/models/index.js +1 -0
- package/esm5/components/index.js +3 -1
- package/esm5/components/inline-edit/components/fields/inline-edit-calendar/inline-edit-calendar.component.js +53 -0
- package/esm5/components/inline-edit/components/fields/inline-edit-lookup/inline-edit-lookup.component.js +33 -0
- package/esm5/components/inline-edit/components/fields/inline-edit-number/inline-edit-number.component.js +99 -0
- package/esm5/components/inline-edit/components/fields/inline-edit-text/inline-edit-text.component.js +33 -0
- package/esm5/components/inline-edit/components/fields/inline-edit-text-area/inline-edit-text-area.component.js +33 -0
- package/esm5/components/inline-edit/components/fields/inline-edit-text-area-ia/inline-edit-text-area-ia.component.js +33 -0
- package/esm5/components/inline-edit/components/index.js +8 -0
- package/esm5/components/inline-edit/components/inline-edit-item/inline-edit-item.component.js +112 -0
- package/esm5/components/inline-edit/fields/index.js +8 -0
- package/esm5/components/inline-edit/fields/inline-edit-calendar-field.js +31 -0
- package/esm5/components/inline-edit/fields/inline-edit-field.js +11 -0
- package/esm5/components/inline-edit/fields/inline-edit-lookup-field.js +50 -0
- package/esm5/components/inline-edit/fields/inline-edit-number-field.js +29 -0
- package/esm5/components/inline-edit/fields/inline-edit-text-area-field.js +16 -0
- package/esm5/components/inline-edit/fields/inline-edit-text-area-ia-field.js +11 -0
- package/esm5/components/inline-edit/fields/inline-edit-text-field.js +11 -0
- package/esm5/components/inline-edit/index.js +4 -0
- package/esm5/components/inline-edit/inline-edit.component.js +84 -0
- package/esm5/components/inline-edit/inline-edit.module.js +65 -0
- package/esm5/components/text-area-ia/index.js +3 -0
- package/esm5/components/text-area-ia/text-area-ia.component.js +131 -0
- package/esm5/components/text-area-ia/text-area-ia.module.js +35 -0
- package/esm5/components/tooltip/tooltip.component.js +3 -3
- package/esm5/components/tooltip/tooltip.directive.js +71 -139
- package/esm5/locale/fallback.js +3 -1
- package/esm5/seniorsistemas-angular-components.js +37 -29
- package/fesm2015/seniorsistemas-angular-components.js +731 -142
- package/fesm2015/seniorsistemas-angular-components.js.map +1 -1
- package/fesm5/seniorsistemas-angular-components.js +848 -143
- package/fesm5/seniorsistemas-angular-components.js.map +1 -1
- package/package.json +1 -1
- package/seniorsistemas-angular-components.d.ts +36 -28
- package/seniorsistemas-angular-components.metadata.json +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { __decorate } from "tslib";
|
|
2
|
-
import { ApplicationRef, ComponentFactoryResolver, ComponentRef, Directive, ElementRef, EmbeddedViewRef, HostListener, Injector, Input, OnDestroy, OnInit, Renderer2 } from "@angular/core";
|
|
1
|
+
import { __decorate, __values } from "tslib";
|
|
2
|
+
import { ApplicationRef, ComponentFactoryResolver, ComponentRef, Directive, ElementRef, EmbeddedViewRef, HostListener, Injector, Input, OnDestroy, OnInit, Renderer2, } from "@angular/core";
|
|
3
3
|
import { DebounceUtils } from "../utils/debouce";
|
|
4
4
|
import { MobileBehavior, TooltipEvent, TooltipPosition } from "./models";
|
|
5
5
|
import { TooltipComponent } from "./tooltip.component";
|
|
@@ -39,7 +39,7 @@ var TooltipDirective = /** @class */ (function () {
|
|
|
39
39
|
top: Math.min(elementRect.top, toolTipRect.top),
|
|
40
40
|
right: Math.max(elementRect.right, toolTipRect.right),
|
|
41
41
|
left: Math.min(elementRect.left, toolTipRect.left),
|
|
42
|
-
bottom: Math.max(elementRect.bottom, toolTipRect.bottom)
|
|
42
|
+
bottom: Math.max(elementRect.bottom, toolTipRect.bottom),
|
|
43
43
|
};
|
|
44
44
|
if (this.isMousePositionOutsideOfElement(event.clientX, event.clientY, totalElementArea)) {
|
|
45
45
|
this.destroy();
|
|
@@ -56,12 +56,12 @@ var TooltipDirective = /** @class */ (function () {
|
|
|
56
56
|
if (this.focusedInputRef) {
|
|
57
57
|
var inputFocus = this.focusedInputRef;
|
|
58
58
|
var icon_1 = this.getIconFromFocusedInput();
|
|
59
|
-
this.renderer.listen(this.focusedInputRef,
|
|
59
|
+
this.renderer.listen(this.focusedInputRef, "focus", function () {
|
|
60
60
|
if (icon_1 && _this.isMatchingTooltip(icon_1)) {
|
|
61
61
|
_this.createTootipByFocus(icon_1);
|
|
62
62
|
}
|
|
63
63
|
});
|
|
64
|
-
this.renderer.listen(inputFocus,
|
|
64
|
+
this.renderer.listen(inputFocus, "blur", function () {
|
|
65
65
|
if (icon_1 && _this.isMatchingTooltip(icon_1)) {
|
|
66
66
|
_this.removeTooltip(icon_1);
|
|
67
67
|
_this.destroy();
|
|
@@ -82,7 +82,7 @@ var TooltipDirective = /** @class */ (function () {
|
|
|
82
82
|
* @returns true se o tooltip corresponde; caso contrário, false.
|
|
83
83
|
*/
|
|
84
84
|
TooltipDirective.prototype.isMatchingTooltip = function (icon) {
|
|
85
|
-
var tooltipText = icon.getAttribute(
|
|
85
|
+
var tooltipText = icon.getAttribute("ng-reflect-tooltip");
|
|
86
86
|
return this.tooltip === tooltipText;
|
|
87
87
|
};
|
|
88
88
|
/**
|
|
@@ -90,7 +90,7 @@ var TooltipDirective = /** @class */ (function () {
|
|
|
90
90
|
* @param icon O ícone do input em focus.
|
|
91
91
|
*/
|
|
92
92
|
TooltipDirective.prototype.removeTooltip = function (icon) {
|
|
93
|
-
var tooltip = icon.querySelector(
|
|
93
|
+
var tooltip = icon.querySelector(".tooltip");
|
|
94
94
|
if (tooltip) {
|
|
95
95
|
tooltip.remove();
|
|
96
96
|
}
|
|
@@ -98,9 +98,7 @@ var TooltipDirective = /** @class */ (function () {
|
|
|
98
98
|
// whenever the component with the tooltip is clicked I destroy the tooltip.
|
|
99
99
|
// whenever a key is pressed on the component with the tooltip I destroy the tooltip.
|
|
100
100
|
TooltipDirective.prototype.onClick = function () {
|
|
101
|
-
if (this.tooltipEvent === TooltipEvent.Hover &&
|
|
102
|
-
!navigator.userAgent.match(/Android/i) &&
|
|
103
|
-
!navigator.userAgent.match(/iPhone/i)) {
|
|
101
|
+
if (this.tooltipEvent === TooltipEvent.Hover && !navigator.userAgent.match(/Android/i) && !navigator.userAgent.match(/iPhone/i)) {
|
|
104
102
|
this.destroy();
|
|
105
103
|
}
|
|
106
104
|
};
|
|
@@ -145,12 +143,7 @@ var TooltipDirective = /** @class */ (function () {
|
|
|
145
143
|
}
|
|
146
144
|
};
|
|
147
145
|
TooltipDirective.prototype.validatePosition = function () {
|
|
148
|
-
var containsPosition = [
|
|
149
|
-
TooltipPosition.Top,
|
|
150
|
-
TooltipPosition.Right,
|
|
151
|
-
TooltipPosition.Bottom,
|
|
152
|
-
TooltipPosition.Left,
|
|
153
|
-
].includes(this.position);
|
|
146
|
+
var containsPosition = [TooltipPosition.Top, TooltipPosition.Right, TooltipPosition.Bottom, TooltipPosition.Left].includes(this.position);
|
|
154
147
|
if (!containsPosition) {
|
|
155
148
|
this.position = TooltipPosition.Top;
|
|
156
149
|
throw new Error("Tooltip " + this.position + " position is unexpected");
|
|
@@ -163,7 +156,7 @@ var TooltipDirective = /** @class */ (function () {
|
|
|
163
156
|
document.body.appendChild(domElem);
|
|
164
157
|
this.setTooltipComponentProperties();
|
|
165
158
|
this.showTimeout = window.setTimeout(this.showTooltip.bind(this), this.showDelay);
|
|
166
|
-
this.tooltipDivElement = domElem.querySelector(
|
|
159
|
+
this.tooltipDivElement = domElem.querySelector(".tooltip");
|
|
167
160
|
if (this.displayTime) {
|
|
168
161
|
window.setTimeout(this.destroy.bind(this), this.displayTime);
|
|
169
162
|
}
|
|
@@ -185,142 +178,81 @@ var TooltipDirective = /** @class */ (function () {
|
|
|
185
178
|
var _a;
|
|
186
179
|
if (this.componentRef === null && ((_a = this.tooltip) === null || _a === void 0 ? void 0 : _a.length)) {
|
|
187
180
|
var domElem = this.getDomElement();
|
|
188
|
-
var tooltip_1 = domElem.querySelector(
|
|
181
|
+
var tooltip_1 = domElem.querySelector(".tooltip");
|
|
189
182
|
icon.appendChild(tooltip_1);
|
|
190
183
|
this.setTooltipComponentProperties();
|
|
191
184
|
setTimeout(function () { return tooltip_1.classList.add("tooltip--visible"); }, 0);
|
|
192
|
-
this.renderer.listen(window,
|
|
193
|
-
_this.
|
|
185
|
+
this.renderer.listen(window, "scroll", function () {
|
|
186
|
+
_this.setTooltipPositionProperty();
|
|
194
187
|
});
|
|
195
188
|
}
|
|
196
189
|
};
|
|
197
|
-
TooltipDirective.prototype.updateTooltipPosition = function () {
|
|
198
|
-
if (this.componentRef) {
|
|
199
|
-
var _a = this.elementRef.nativeElement.getBoundingClientRect(), left = _a.left, right = _a.right, top_1 = _a.top, bottom = _a.bottom;
|
|
200
|
-
var tooltipWidth = right - left;
|
|
201
|
-
var tooltipHeight = bottom - top_1;
|
|
202
|
-
switch (this.position) {
|
|
203
|
-
case TooltipPosition.Top:
|
|
204
|
-
this.componentRef.instance.left = Math.round(tooltipWidth / 2 + left);
|
|
205
|
-
this.componentRef.instance.top = Math.round(top_1 - 20 - 5);
|
|
206
|
-
break;
|
|
207
|
-
case TooltipPosition.Bottom:
|
|
208
|
-
this.componentRef.instance.left = Math.round(tooltipWidth / 2 + left);
|
|
209
|
-
this.componentRef.instance.top = Math.round(bottom + 20);
|
|
210
|
-
break;
|
|
211
|
-
case TooltipPosition.Left:
|
|
212
|
-
this.componentRef.instance.left = Math.round(left - 20);
|
|
213
|
-
this.componentRef.instance.top = Math.round(top_1 + tooltipHeight / 2 - 5);
|
|
214
|
-
break;
|
|
215
|
-
case TooltipPosition.Right:
|
|
216
|
-
this.componentRef.instance.left = Math.round(right + 20);
|
|
217
|
-
this.componentRef.instance.top = Math.round(top_1 + tooltipHeight / 2 - 5);
|
|
218
|
-
break;
|
|
219
|
-
default:
|
|
220
|
-
break;
|
|
221
|
-
}
|
|
222
|
-
}
|
|
223
|
-
};
|
|
224
190
|
TooltipDirective.prototype.showTooltip = function () {
|
|
225
191
|
if (this.componentRef !== null) {
|
|
226
192
|
this.componentRef.instance.visible = this.visible;
|
|
227
|
-
|
|
193
|
+
this.setTooltipPositionProperty();
|
|
194
|
+
window.addEventListener("mousemove", this.boundOnWindowMouseMoveFunction);
|
|
228
195
|
}
|
|
229
196
|
};
|
|
230
|
-
TooltipDirective.prototype.
|
|
197
|
+
TooltipDirective.prototype.setTooltipPositionProperty = function () {
|
|
198
|
+
var e_1, _a;
|
|
231
199
|
var margin = 20;
|
|
232
200
|
var anchorSize = 5;
|
|
201
|
+
var domElem = this.componentRef.hostView.rootNodes[0].querySelector("#tooltip");
|
|
202
|
+
var _b = domElem.getBoundingClientRect(), height = _b.height, width = _b.width;
|
|
203
|
+
var _c = this.elementRef.nativeElement.getBoundingClientRect(), left = _c.left, right = _c.right, top = _c.top, bottom = _c.bottom;
|
|
204
|
+
var positions = [
|
|
205
|
+
{
|
|
206
|
+
pos: TooltipPosition.Top,
|
|
207
|
+
check: function () { return top > height; },
|
|
208
|
+
set: function () { return ({ left: left + (right - left) / 2, top: top - margin - anchorSize }); },
|
|
209
|
+
},
|
|
210
|
+
{
|
|
211
|
+
pos: TooltipPosition.Bottom,
|
|
212
|
+
check: function () { return document.body.clientHeight - bottom > height; },
|
|
213
|
+
set: function () { return ({ left: left + (right - left) / 2, top: bottom + margin }); },
|
|
214
|
+
},
|
|
215
|
+
{
|
|
216
|
+
pos: TooltipPosition.Left,
|
|
217
|
+
check: function () { return left > width; },
|
|
218
|
+
set: function () { return ({ left: left - margin, top: top + height / 2 - anchorSize }); },
|
|
219
|
+
},
|
|
220
|
+
{
|
|
221
|
+
pos: TooltipPosition.Right,
|
|
222
|
+
check: function () { return document.body.clientWidth - right > width; },
|
|
223
|
+
set: function () { return ({ left: right + margin, top: top + height / 2 - anchorSize }); },
|
|
224
|
+
},
|
|
225
|
+
];
|
|
226
|
+
try {
|
|
227
|
+
for (var positions_1 = __values(positions), positions_1_1 = positions_1.next(); !positions_1_1.done; positions_1_1 = positions_1.next()) {
|
|
228
|
+
var _d = positions_1_1.value, pos = _d.pos, check = _d.check, set = _d.set;
|
|
229
|
+
if (check()) {
|
|
230
|
+
this.position = pos;
|
|
231
|
+
var _e = set(), left_1 = _e.left, top_1 = _e.top;
|
|
232
|
+
this.componentRef.instance.left = Math.round(left_1);
|
|
233
|
+
this.componentRef.instance.top = Math.round(top_1);
|
|
234
|
+
this.componentRef.instance.position = this.position;
|
|
235
|
+
return;
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
240
|
+
finally {
|
|
241
|
+
try {
|
|
242
|
+
if (positions_1_1 && !positions_1_1.done && (_a = positions_1.return)) _a.call(positions_1);
|
|
243
|
+
}
|
|
244
|
+
finally { if (e_1) throw e_1.error; }
|
|
245
|
+
}
|
|
246
|
+
// Se não conseguir posicionar, mostrar abaixo
|
|
247
|
+
this.position = TooltipPosition.Bottom;
|
|
248
|
+
this.componentRef.instance.left = Math.round(left + (right - left) / 2);
|
|
249
|
+
this.componentRef.instance.top = Math.round(bottom + margin);
|
|
250
|
+
this.componentRef.instance.position = this.position;
|
|
251
|
+
};
|
|
252
|
+
TooltipDirective.prototype.setTooltipComponentProperties = function () {
|
|
233
253
|
if (this.componentRef !== null) {
|
|
234
254
|
this.componentRef.instance.tooltip = this.tooltip;
|
|
235
255
|
this.componentRef.instance.escape = this.escape;
|
|
236
|
-
var _a = this.elementRef.nativeElement.getBoundingClientRect(), left = _a.left, right = _a.right, top_2 = _a.top, bottom = _a.bottom;
|
|
237
|
-
var tooltipHeight = bottom - top_2;
|
|
238
|
-
var tooltipWidth = right - left;
|
|
239
|
-
var safeSpace = 150;
|
|
240
|
-
var positioned = false;
|
|
241
|
-
var invalidOptions = [];
|
|
242
|
-
while (!positioned) {
|
|
243
|
-
if (invalidOptions.includes(TooltipPosition.Top)
|
|
244
|
-
&& invalidOptions.includes(TooltipPosition.Bottom)
|
|
245
|
-
&& invalidOptions.includes(TooltipPosition.Left)
|
|
246
|
-
&& invalidOptions.includes(TooltipPosition.Right)) {
|
|
247
|
-
this.destroy();
|
|
248
|
-
throw new Error("No space to show tooltip");
|
|
249
|
-
}
|
|
250
|
-
switch (this.position) {
|
|
251
|
-
case TooltipPosition.Top: {
|
|
252
|
-
if (invalidOptions.includes(TooltipPosition.Top)) {
|
|
253
|
-
this.position = TooltipPosition.Left;
|
|
254
|
-
break;
|
|
255
|
-
}
|
|
256
|
-
var topShift = top_2;
|
|
257
|
-
if (topShift <= tooltipHeight + safeSpace) {
|
|
258
|
-
this.position = TooltipPosition.Bottom;
|
|
259
|
-
invalidOptions.push(TooltipPosition.Top);
|
|
260
|
-
positioned = false;
|
|
261
|
-
break;
|
|
262
|
-
}
|
|
263
|
-
this.componentRef.instance.left = Math.round(tooltipWidth / 2 + left);
|
|
264
|
-
this.componentRef.instance.top = Math.round(top_2 - margin - anchorSize);
|
|
265
|
-
positioned = true;
|
|
266
|
-
break;
|
|
267
|
-
}
|
|
268
|
-
case TooltipPosition.Bottom: {
|
|
269
|
-
if (invalidOptions.includes(TooltipPosition.Bottom)) {
|
|
270
|
-
this.position = TooltipPosition.Left;
|
|
271
|
-
break;
|
|
272
|
-
}
|
|
273
|
-
var bottomShift = document.body.clientHeight - bottom;
|
|
274
|
-
if (bottomShift <= tooltipHeight + safeSpace) {
|
|
275
|
-
this.position = TooltipPosition.Top;
|
|
276
|
-
invalidOptions.push(TooltipPosition.Bottom);
|
|
277
|
-
break;
|
|
278
|
-
}
|
|
279
|
-
this.componentRef.instance.left = Math.round(tooltipWidth / 2 + left);
|
|
280
|
-
this.componentRef.instance.top = Math.round(bottom + margin);
|
|
281
|
-
positioned = true;
|
|
282
|
-
break;
|
|
283
|
-
}
|
|
284
|
-
case TooltipPosition.Left: {
|
|
285
|
-
if (invalidOptions.includes(TooltipPosition.Left)) {
|
|
286
|
-
this.position = TooltipPosition.Top;
|
|
287
|
-
break;
|
|
288
|
-
}
|
|
289
|
-
var leftShift = left;
|
|
290
|
-
if (leftShift <= tooltipWidth + safeSpace) {
|
|
291
|
-
this.position = TooltipPosition.Right;
|
|
292
|
-
invalidOptions.push(TooltipPosition.Left);
|
|
293
|
-
positioned = false;
|
|
294
|
-
break;
|
|
295
|
-
}
|
|
296
|
-
this.componentRef.instance.left = Math.round(left - margin);
|
|
297
|
-
this.componentRef.instance.top = Math.round(top_2 + tooltipHeight / 2 - anchorSize);
|
|
298
|
-
positioned = true;
|
|
299
|
-
break;
|
|
300
|
-
}
|
|
301
|
-
case TooltipPosition.Right: {
|
|
302
|
-
if (invalidOptions.includes(TooltipPosition.Right)) {
|
|
303
|
-
this.position = TooltipPosition.Top;
|
|
304
|
-
break;
|
|
305
|
-
}
|
|
306
|
-
var rightShift = document.body.clientWidth - right;
|
|
307
|
-
if (rightShift <= tooltipWidth + safeSpace) {
|
|
308
|
-
this.position = TooltipPosition.Left;
|
|
309
|
-
invalidOptions.push(TooltipPosition.Right);
|
|
310
|
-
positioned = false;
|
|
311
|
-
break;
|
|
312
|
-
}
|
|
313
|
-
this.componentRef.instance.left = Math.round(right + margin);
|
|
314
|
-
this.componentRef.instance.top = Math.round(top_2 + tooltipHeight / 2 - anchorSize);
|
|
315
|
-
positioned = true;
|
|
316
|
-
break;
|
|
317
|
-
}
|
|
318
|
-
default: {
|
|
319
|
-
break;
|
|
320
|
-
}
|
|
321
|
-
}
|
|
322
|
-
this.componentRef.instance.position = this.position;
|
|
323
|
-
}
|
|
324
256
|
}
|
|
325
257
|
};
|
|
326
258
|
TooltipDirective.prototype.destroy = function () {
|
|
@@ -331,7 +263,7 @@ var TooltipDirective = /** @class */ (function () {
|
|
|
331
263
|
this.componentRef = null;
|
|
332
264
|
this.tooltipDivElement = null;
|
|
333
265
|
}
|
|
334
|
-
window.removeEventListener(
|
|
266
|
+
window.removeEventListener("mousemove", this.boundOnWindowMouseMoveFunction);
|
|
335
267
|
};
|
|
336
268
|
TooltipDirective.ctorParameters = function () { return [
|
|
337
269
|
{ type: ElementRef },
|
|
@@ -402,4 +334,4 @@ var TooltipDirective = /** @class */ (function () {
|
|
|
402
334
|
return TooltipDirective;
|
|
403
335
|
}());
|
|
404
336
|
export { TooltipDirective };
|
|
405
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbHRpcC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2VuaW9yc2lzdGVtYXMvYW5ndWxhci1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsiY29tcG9uZW50cy90b29sdGlwL3Rvb2x0aXAuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0osY0FBYyxFQUNkLHdCQUF3QixFQUN4QixZQUFZLEVBQ1osU0FBUyxFQUNULFVBQVUsRUFDVixlQUFlLEVBQ2YsWUFBWSxFQUNaLFFBQVEsRUFDUixLQUFLLEVBQ0wsU0FBUyxFQUNULE1BQU0sRUFDTixTQUFTLEVBQ1gsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUN6RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQU12RDtJQW1DRywwQkFDb0IsVUFBc0IsRUFDdEIsTUFBc0IsRUFDdEIsd0JBQWtELEVBQ2xELFFBQWtCLEVBQ2xCLGFBQTRCLEVBQzVCLFFBQW1CO1FBTnZDLGlCQVVDO1FBVG1CLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsV0FBTSxHQUFOLE1BQU0sQ0FBZ0I7UUFDdEIsNkJBQXdCLEdBQXhCLHdCQUF3QixDQUEwQjtRQUNsRCxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2xCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLGFBQVEsR0FBUixRQUFRLENBQVc7UUFwQ2hDLGFBQVEsR0FBb0IsZUFBZSxDQUFDLEdBQUcsQ0FBQztRQUdoRCxjQUFTLEdBQUcsR0FBRyxDQUFDO1FBTWhCLGlCQUFZLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQztRQUdsQyxXQUFNLEdBQUcsS0FBSyxDQUFDO1FBR2YsWUFBTyxHQUFHLElBQUksQ0FBQztRQUdmLG1C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S0FBSyxFQUFFO3VEQUNlO0lBR3ZCO1FBREMsS0FBSyxFQUFFO3lEQUNtQjtJQUczQjtRQURDLEtBQUssRUFBRTswREFDaUM7SUFHekM7UUFEQyxLQUFLLEVBQUU7b0RBQ2M7SUFHdEI7UUFEQyxLQUFLLEVBQUU7cURBQ2M7SUFHdEI7UUFEQyxLQUFLLEVBQUU7NERBQ3dDO0lBR2hEO1FBREMsS0FBSyxFQUFFOzZEQUNpQztJQTRHekM7UUFGQyxZQUFZLENBQUMsT0FBTyxDQUFDO1FBQ3JCLFlBQVksQ0FBQyxTQUFTLENBQUM7bURBT3ZCO0lBSUQ7UUFEQyxZQUFZLENBQUMscUJBQXFCLENBQUM7Z0VBS25DO0lBR0Q7UUFEQyxZQUFZLENBQUMsT0FBTyxDQUFDO21EQUtyQjtJQUdEO1FBREMsWUFBWSxDQUFDLE1BQU0sQ0FBQztrREFLcEI7SUFHRDtRQURDLFlBQVksQ0FBQyxZQUFZLENBQUM7d0RBSzFCO0lBSUQ7UUFGQyxZQUFZLENBQUMsWUFBWSxDQUFDO1FBQzFCLFlBQVksQ0FBQyxPQUFPLENBQUM7d0RBS3JCO0lBR0Q7UUFEQyxZQUFZLENBQUMsWUFBWSxDQUFDO3dEQVMxQjtJQUdEO1FBREMsWUFBWSxDQUFDLFVBQVUsQ0FBQztzREFReEI7SUF0TVMsZ0JBQWdCO1FBSDVCLFNBQVMsQ0FBQztZQUNSLFFBQVEsRUFBRSxZQUFZO1NBQ3hCLENBQUM7T0FDVyxnQkFBZ0IsQ0FvYTVCO0lBQUQsdUJBQUM7Q0FBQSxBQXBhRCxJQW9hQztTQXBhWSxnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgQXBwbGljYXRpb25SZWYsXG4gICBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICBDb21wb25lbnRSZWYsXG4gICBEaXJlY3RpdmUsXG4gICBFbGVtZW50UmVmLFxuICAgRW1iZWRkZWRWaWV3UmVmLFxuICAgSG9zdExpc3RlbmVyLFxuICAgSW5qZWN0b3IsXG4gICBJbnB1dCxcbiAgIE9uRGVzdHJveSxcbiAgIE9uSW5pdCxcbiAgIFJlbmRlcmVyMlxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgRGVib3VuY2VVdGlscyB9IGZyb20gXCIuLi91dGlscy9kZWJvdWNlXCI7XG5pbXBvcnQgeyBNb2JpbGVCZWhhdmlvciwgVG9vbHRpcEV2ZW50LCBUb29sdGlwUG9zaXRpb24gfSBmcm9tIFwiLi9tb2RlbHNcIjtcbmltcG9ydCB7IFRvb2x0aXBDb21wb25lbnQgfSBmcm9tIFwiLi90b29sdGlwLmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgRWxlbWVudEFyZWEgfSBmcm9tIFwiLi9tb2RlbHMvZWxlbWVudC1hcmVhXCI7XG5cbkBEaXJlY3RpdmUoe1xuICAgc2VsZWN0b3I6IFwiW3NUb29sdGlwXVwiLFxufSlcbmV4cG9ydCBjbGFzcyBUb29sdGlwRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAgQElucHV0KFwic1Rvb2x0aXBcIilcbiAgIHB1YmxpYyB0b29sdGlwOiBzdHJpbmc7XG5cbiAgIEBJbnB1dChcInRvb2x0aXBQb3NpdGlvblwiKVxuICAgcHVibGljIHBvc2l0aW9uOiBUb29sdGlwUG9zaXRpb24gPSBUb29sdGlwUG9zaXRpb24uVG9wO1xuXG4gICBASW5wdXQoKVxuICAgcHVibGljIHNob3dEZWxheSA9IDUwMDtcblxuICAgQElucHV0KClcbiAgIHB1YmxpYyBkaXNwbGF5VGltZTogbnVtYmVyO1xuXG4gICBASW5wdXQoKVxuICAgcHVibGljIHRvb2x0aXBFdmVudCA9IFRvb2x0aXBFdmVudC5Ib3ZlcjtcblxuICAgQElucHV0KClcbiAgIHB1YmxpYyBlc2NhcGUgPSBmYWxzZTtcblxuICAgQElucHV0KClcbiAgIHB1YmxpYyB2aXNpYmxlID0gdHJ1ZTtcblxuICAgQElucHV0KClcbiAgIHB1YmxpYyBtb2JpbGVCZWhhdmlvciA9IE1vYmlsZUJlaGF2aW9yLlByZXNzaW5nO1xuXG4gICBASW5wdXQoKVxuICAgcHVibGljIGZvY3VzZWRJbnB1dFJlZjogSFRNTElucHV0RWxlbWVudDtcblxuICAgcHJpdmF0ZSBjb21wb25lbnRSZWY6IENvbXBvbmVudFJlZjxhbnk+ID0gbnVsbDtcbiAgIHByaXZhdGUgc2hvd1RpbWVvdXQ/OiBudW1iZXI7XG4gICBwcml2YXRlIHRvdWNoVGltZW91dD86IG51bWJlcjtcbiAgIHByaXZhdGUgdG9vbHRpcERpdkVsZW1lbnQ/OiBIVE1MRWxlbWVudDtcbiAgIHByaXZhdGUgcmVhZG9ubHkgYm91bmRPbldpbmRvd01vdXNlTW92ZUZ1bmN0aW9uOiAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHZvaWQ7XG4gICBwcml2YXRlIHJlYWRvbmx5IGRlYm91bmNlQ3JlYXRlVG9vbHRpcEZ1bmN0aW9uOiAoKSA9PiB2b2lkO1xuXG4gICBjb25zdHJ1Y3RvcihcbiAgICAgIHByaXZhdGUgcmVhZG9ubHkgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICAgIHByaXZhdGUgcmVhZG9ubHkgYXBwUmVmOiBBcHBsaWNhdGlvblJlZixcbiAgICAgIHByaXZhdGUgcmVhZG9ubHkgY29tcG9uZW50RmFjdG9yeVJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgICBwcml2YXRlIHJlYWRvbmx5IGluamVjdG9yOiBJbmplY3RvcixcbiAgICAgIHByaXZhdGUgcmVhZG9ubHkgZGVib3VuY2VVdGlsczogRGVib3VuY2VVdGlscyxcbiAgICAgIHByaXZhdGUgcmVhZG9ubHkgcmVuZGVyZXI6IFJlbmRlcmVyMlxuICAgKSB7XG4gICAgICB0aGlzLmJvdW5kT25XaW5kb3dNb3VzZU1vdmVGdW5jdGlvbiA9IHRoaXMub25XaW5kb3dNb3VzZU1vdmUuYmluZCh0aGlzKTtcbiAgICAgIHRoaXMuZGVib3VuY2VDcmVhdGVUb29sdGlwRnVuY3Rpb24gPSB0aGlzLmRlYm91bmNlVXRpbHMuZGVib3VuY2VMZWFkaW5nKCgpID0+IHRoaXMuY3JlYXRlVG9vdGlwKCkpO1xuICAgfVxuXG4gICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICB0aGlzLnZhbGlkYXRlUG9zaXRpb24oKTtcbiAgICAgIHRoaXMudXBkYXRlVG9vbHRpcFZpc2liaWxpdHlXaGVuRm9jdXNPbklucHV0KCk7XG4gICB9XG5cbiAgIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgIHRoaXMuZGVzdHJveSgpO1xuICAgfVxuXG4gICBwcml2YXRlIG9uV2luZG93TW91c2VNb3ZlKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgICBpZiAoIXRoaXMuY29tcG9uZW50UmVmKSB7XG4gICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBlbGVtZW50UmVjdCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgY29uc3QgdG9vbFRpcFJlY3QgPSB0aGlzLnRvb2x0aXBEaXZFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICBjb25zdCB0b3RhbEVsZW1lbnRBcmVhID0ge1xuICAgICAgICAgdG9wOiBNYXRoLm1pbihlbGVtZW50UmVjdC50b3AsIHRvb2xUaXBSZWN0LnRvcCksXG4gICAgICAgICByaWdodDogTWF0aC5tYXgoZWxlbWVudFJlY3QucmlnaHQsIHRvb2xUaXBSZWN0LnJpZ2h0KSxcbiAgICAgICAgIGxlZnQ6IE1hdGgubWluKGVsZW1lbnRSZWN0LmxlZnQsIHRvb2xUaXBSZWN0LmxlZnQpLFxuICAgICAgICAgYm90dG9tOiBNYXRoLm1heChlbGVtZW50UmVjdC5ib3R0b20sIHRvb2xUaXBSZWN0LmJvdHRvbSlcbiAgICAgIH07XG5cbiAgICAgIGlmICh0aGlzLmlzTW91c2VQb3NpdGlvbk91dHNpZGVPZkVsZW1lbnQoZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSwgdG90YWxFbGVtZW50QXJlYSkpIHtcbiAgICAgICAgIHRoaXMuZGVzdHJveSgpO1xuICAgICAgfVxuICAgfVxuXG4gICBwcml2YXRlIGlzTW91c2VQb3NpdGlvbk91dHNpZGVPZkVsZW1lbnQobW91c2VYOiBudW1iZXIsIG1vdXNlWTogbnVtYmVyLCBlbGVtZW50QXJlYTogRWxlbWVudEFyZWEpIHtcbiAgICAgIHJldHVybiBtb3VzZVggPCBlbGVtZW50QXJlYS5sZWZ0IHx8IG1vdXNlWCA+PSBlbGVtZW50QXJlYS5yaWdodCB8fCBtb3VzZVkgPCBlbGVtZW50QXJlYS50b3AgfHwgbW91c2VZID49IGVsZW1lbnRBcmVhLmJvdHRvbTtcbiAgIH1cblxuICAgLyoqXG4gICAgKiBNYW5pcHVsYSBhIHZpc2liaWxpZGFkZSBkbyB0b29sdGlwIHF1YW5kbyBob3V2ZXIgdW1hIHJlZmVyw6puY2lhIGRlIGlucHV0LlxuICAgICovXG4gICBwcml2YXRlIHVwZGF0ZVRvb2x0aXBWaXNpYmlsaXR5V2hlbkZvY3VzT25JbnB1dCgpIHtcbiAgICAgICAgaWYgKHRoaXMuZm9jdXNlZElucHV0UmVmKSB7XG4gICAgICAgICAgICBjb25zdCBpbnB1dEZvY3VzID0gdGhpcy5mb2N1c2VkSW5wdXRSZWY7XG4gICAgICAgICAgICBjb25zdCBpY29uID0gdGhpcy5nZXRJY29uRnJvbUZvY3VzZWRJbnB1dCgpO1xuXG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmxpc3Rlbih0aGlzLmZvY3VzZWRJbnB1dFJlZiwgJ2ZvY3VzJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChpY29uICYmIHRoaXMuaXNNYXRjaGluZ1Rvb2x0aXAoaWNvbikpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVUb290aXBCeUZvY3VzKGljb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5saXN0ZW4oaW5wdXRGb2N1cywgJ2JsdXInLCAoKSA9PiB7XG4gICAgICAgICAgICAgICBpZiAoaWNvbiAmJiB0aGlzLmlzTWF0Y2hpbmdUb29sdGlwKGljb24pKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlVG9vbHRpcChpY29uKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXN0cm95KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBPYnTDqW0gbyBlbGVtZW50byBkbyDDrWNvbmUgYXNzb2NpYWRvIGFvIGxhYmVsIGRvIGlucHV0IGVtIGZvY3VzLlxuICAgICAqIEByZXR1cm5zIE8gw61jb25lIGRvIGlucHV0IGVtIGZvY3VzLlxuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0SWNvbkZyb21Gb2N1c2VkSW5wdXQoKTogSFRNTEVsZW1lbnQge1xuICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFZlcmlmaWNhIHNlIG8gw61jb25lIHRlbSBvIHRvb2x0aXAgY29ycmVzcG9uZGVudGUgYW8gYXR1YWwuXG4gICAgICogQHBhcmFtIGljb24gTyDDrWNvbmUgZG8gaW5wdXQgZW0gZm9jdXMuXG4gICAgICogQHJldHVybnMgdHJ1ZSBzZSBvIHRvb2x0aXAgY29ycmVzcG9uZGU7IGNhc28gY29udHLDoXJpbywgZmFsc2UuXG4gICAgICovXG4gICAgcHJpdmF0ZSBpc01hdGNoaW5nVG9vbHRpcChpY29uOiBIVE1MRWxlbWVudCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCB0b29sdGlwVGV4dCA9IGljb24uZ2V0QXR0cmlidXRlKCduZy1yZWZsZWN0LXRvb2x0aXAnKTtcbiAgICAgICAgcmV0dXJuIHRoaXMudG9vbHRpcCA9PT0gdG9vbHRpcFRleHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlIG8gdG9vbHRpcCBhc3NvY2lhZG8gYW8gw61jb25lIGRvIGlucHV0IGVtIGZvY3VzLlxuICAgICAqIEBwYXJhbSBpY29uIE8gw61jb25lIGRvIGlucHV0IGVtIGZvY3VzLlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVtb3ZlVG9vbHRpcChpY29uOiBIVE1MRWxlbWVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCB0b29sdGlwID0gaWNvbi5xdWVyeVNlbGVjdG9yKCcudG9vbHRpcCcpIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBpZiAodG9vbHRpcCkge1xuICAgICAgICAgICAgdG9vbHRpcC5yZW1vdmUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgLy8gd2hlbmV2ZXIgdGhlIGNvbXBvbmVudCB3aXRoIHRoZSB0b29sdGlwIGlzIGNsaWNrZWQgSSBkZXN0cm95IHRoZSB0b29sdGlwLlxuICAgLy8gd2hlbmV2ZXIgYSBrZXkgaXMgcHJlc3NlZCBvbiB0aGUgY29tcG9uZW50IHdpdGggdGhlIHRvb2x0aXAgSSBkZXN0cm95IHRoZSB0b29sdGlwLlxuICAgQEhvc3RMaXN0ZW5lcihcImNsaWNrXCIpXG4gICBASG9zdExpc3RlbmVyKFwia2V5ZG93blwiKVxuICAgcHVibGljIG9uQ2xpY2soKTogdm9pZCB7XG4gICAgICBpZiAodGhpcy50b29sdGlwRXZlbnQgPT09IFRvb2x0aXBFdmVudC5Ib3ZlciAmJlxuICAgICAgICAgIW5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FuZHJvaWQvaSkgJiZcbiAgICAgICAgICFuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUGhvbmUvaSkpIHtcbiAgICAgICAgIHRoaXMuZGVzdHJveSgpO1xuICAgICAgfVxuICAgfVxuXG4gICAvLyB3aGVuZXZlciB5b3UgdG91Y2ggb3V0c2lkZSB0aGUgY29tcG9uZW50IHdpdGggdGhlIHRvb2x0aXAgSSBkZXN0cm95IHRoZSB0b29sdGlwLlxuICAgQEhvc3RMaXN0ZW5lcihcImRvY3VtZW50OnRvdWNoc3RhcnRcIilcbiAgIHB1YmxpYyBvbkRvY3VtZW50VG91Y2hTdGFydCgpOiB2b2lkIHtcbiAgICAgIGlmICh0aGlzLnRvb2x0aXBFdmVudCA9PT0gVG9vbHRpcEV2ZW50LkhvdmVyKSB7XG4gICAgICAgICB0aGlzLmRlc3Ryb3koKTtcbiAgICAgIH1cbiAgIH1cblxuICAgQEhvc3RMaXN0ZW5lcihcImZvY3VzXCIpXG4gICBwdWJsaWMgb25Gb2N1cygpOiB2b2lkIHtcbiAgICAgIGlmICh0aGlzLnRvb2x0aXBFdmVudCA9PT0gVG9vbHRpcEV2ZW50LkZvY3VzKSB7XG4gICAgICAgICB0aGlzLmNyZWF0ZVRvb3RpcCgpO1xuICAgICAgfVxuICAgfVxuXG4gICBASG9zdExpc3RlbmVyKFwiYmx1clwiKVxuICAgcHVibGljIG9uQmx1cigpOiB2b2lkIHtcbiAgICAgIGlmICh0aGlzLnRvb2x0aXBFdmVudCA9PT0gVG9vbHRpcEV2ZW50LkZvY3VzKSB7XG4gICAgICAgICB0aGlzLmRlc3Ryb3koKTtcbiAgICAgIH1cbiAgIH1cblxuICAgQEhvc3RMaXN0ZW5lcihcIm1vdXNlZW50ZXJcIilcbiAgIHB1YmxpYyBvbk1vdXNlRW50ZXIoKTogdm9pZCB7XG4gICAgICBpZiAodGhpcy50b29sdGlwRXZlbnQgPT09IFRvb2x0aXBFdmVudC5Ib3Zlcikge1xuICAgICAgICAgdGhpcy5kZWJvdW5jZUNyZWF0ZVRvb2x0aXBGdW5jdGlvbigpO1xuICAgICAgfVxuICAgfVxuXG4gICBASG9zdExpc3RlbmVyKFwibW91c2VsZWF2ZVwiKVxuICAgQEhvc3RMaXN0ZW5lcihcIndoZWVsXCIpXG4gICBwdWJsaWMgb25Nb3VzZUxlYXZlKCk6IHZvaWQge1xuICAgICAgaWYgKHRoaXMudG9vbHRpcEV2ZW50ID09PSBUb29sdGlwRXZlbnQuSG92ZXIpIHtcbiAgICAgICAgIHRoaXMuZGVzdHJveSgpO1xuICAgICAgfVxuICAgfVxuXG4gICBASG9zdExpc3RlbmVyKFwidG91Y2hzdGFydFwiKVxuICAgcHVibGljIG9uVG91Y2hTdGFydCgpOiB2b2lkIHtcbiAgICAgIGlmICh0aGlzLnRvb2x0aXBFdmVudCA9PT0gVG9vbHRpcEV2ZW50LkhvdmVyKSB7XG4gICAgICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHRoaXMudG91Y2hUaW1lb3V0KTtcbiAgICAgICAgIHRoaXMudG91Y2hUaW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZVRvb3RpcC5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgdGhpcy5tb2JpbGVCZWhhdmlvciA9PT0gTW9iaWxlQmVoYXZpb3IuUHJlc3NpbmcgPyB0aGlzLnNob3dEZWxheSA6IDBcbiAgICAgICAgICk7XG4gICAgICB9XG4gICB9XG5cbiAgIEBIb3N0TGlzdGVuZXIoXCJ0b3VjaGVuZFwiKVxuICAgcHVibGljIG9uVG91Y2hFbmQoKTogdm9pZCB7XG4gICAgICBpZiAodGhpcy50b29sdGlwRXZlbnQgPT09IFRvb2x0aXBFdmVudC5Ib3Zlcikge1xuICAgICAgICAgaWYgKHRoaXMubW9iaWxlQmVoYXZpb3IgPT09IE1vYmlsZUJlaGF2aW9yLlByZXNzaW5nKSB7XG4gICAgICAgICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHRoaXMudG91Y2hUaW1lb3V0KTtcbiAgICAgICAgICAgIHRoaXMuZGVzdHJveSgpO1xuICAgICAgICAgfVxuICAgICAgfVxuICAgfVxuXG4gICBwcml2YXRlIHZhbGlkYXRlUG9zaXRpb24oKSB7XG4gICAgICBjb25zdCBjb250YWluc1Bvc2l0aW9uID0gW1xuICAgICAgICAgVG9vbHRpcFBvc2l0aW9uLlRvcCxcbiAgICAgICAgIFRvb2x0aXBQb3NpdGlvbi5SaWdodCxcbiAgICAgICAgIFRvb2x0aXBQb3NpdGlvbi5Cb3R0b20sXG4gICAgICAgICBUb29sdGlwUG9zaXRpb24uTGVmdCxcbiAgICAgIF0uaW5jbHVkZXModGhpcy5wb3NpdGlvbik7XG5cbiAgICAgIGlmICghY29udGFpbnNQb3NpdGlvbikge1xuICAgICAgICAgdGhpcy5wb3NpdGlvbiA9IFRvb2x0aXBQb3NpdGlvbi5Ub3A7XG4gICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRvb2x0aXAgJHt0aGlzLnBvc2l0aW9ufSBwb3NpdGlvbiBpcyB1bmV4cGVjdGVkYCk7XG4gICAgICB9XG4gICB9XG5cbiAgIHByaXZhdGUgY3JlYXRlVG9vdGlwKCkge1xuICAgICAgaWYgKHRoaXMuY29tcG9uZW50UmVmID09PSBudWxsICYmIHRoaXMudG9vbHRpcD8ubGVuZ3RoKSB7XG4gICAgICAgICBjb25zdCBkb21FbGVtID0gdGhpcy5nZXREb21FbGVtZW50KCk7XG4gICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRvbUVsZW0pO1xuICAgICAgICAgdGhpcy5zZXRUb29sdGlwQ29tcG9uZW50UHJvcGVydGllcygpO1xuICAgICAgICAgdGhpcy5zaG93VGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KHRoaXMuc2hvd1Rvb2x0aXAuYmluZCh0aGlzKSwgdGhpcy5zaG93RGVsYXkpO1xuXG4gICAgICAgICB0aGlzLnRvb2x0aXBEaXZFbGVtZW50ID0gZG9tRWxlbS5xdWVyeVNlbGVjdG9yKCcudG9vbHRpcCcpO1xuXG4gICAgICAgICBpZiAodGhpcy5kaXNwbGF5VGltZSkge1xuICAgICAgICAgICAgd2luZG93LnNldFRpbWVvdXQodGhpcy5kZXN0cm95LmJpbmQodGhpcyksIHRoaXMuZGlzcGxheVRpbWUpO1xuICAgICAgICAgfVxuICAgICAgfVxuICAgfVxuXG4gICBwcml2YXRlIGdldERvbUVsZW1lbnQoKTogSFRNTEVsZW1lbnQge1xuICAgICAgICBjb25zdCBjb21wb25lbnRGYWN0b3J5ID0gdGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoVG9vbHRpcENvbXBvbmVudCk7XG4gICAgICAgIHRoaXMuY29tcG9uZW50UmVmID0gY29tcG9uZW50RmFjdG9yeS5jcmVhdGUodGhpcy5pbmplY3Rvcik7XG4gICAgICAgIHRoaXMuYXBwUmVmLmF0dGFjaFZpZXcodGhpcy5jb21wb25lbnRSZWYuaG9zdFZpZXcpO1xuICAgICAgICByZXR1cm4gKHRoaXMuY29tcG9uZW50UmVmLmhvc3RWaWV3IGFzIEVtYmVkZGVkVmlld1JlZjxhbnk+KS5yb290Tm9kZXNbMF0gYXMgSFRNTEVsZW1lbnQ7XG4gICB9XG5cbiAgIC8qKlxuICAgICogQ3JpYSB1bSB0b29sdGlwIHBhcmEgbyBpY29uZSBkbyBpbnB1dCBlbSBmb2N1cy5cbiAgICAqXG4gICAgKiBAcGFyYW0gaWNvbiBPIMOtY29uZSBkbyBpbnB1dCBlbSBmb2N1cy5cbiAgICAqL1xuICAgcHJpdmF0ZSBjcmVhdGVUb290aXBCeUZvY3VzKGljb246IEhUTUxFbGVtZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmNvbXBvbmVudFJlZiA9PT0gbnVsbCAmJiB0aGlzLnRvb2x0aXA/Lmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgZG9tRWxlbSA9IHRoaXMuZ2V0RG9tRWxlbWVudCgpO1xuICAgICAgICAgICAgY29uc3QgdG9vbHRpcCA9IGRvbUVsZW0ucXVlcnlTZWxlY3RvcignLnRvb2x0aXAnKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgICAgIGljb24uYXBwZW5kQ2hpbGQodG9vbHRpcCk7XG4gICAgICAgICAgICB0aGlzLnNldFRvb2x0aXBDb21wb25lbnRQcm9wZXJ0aWVzKCk7XG5cbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdG9vbHRpcC5jbGFzc0xpc3QuYWRkKFwidG9vbHRpcC0tdmlzaWJsZVwiKSwgMCk7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmxpc3Rlbih3aW5kb3csICdzY3JvbGwnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVUb29sdGlwUG9zaXRpb24oKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVUb29sdGlwUG9zaXRpb24oKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbXBvbmVudFJlZikge1xuICAgICAgICAgICAgY29uc3QgeyBsZWZ0LCByaWdodCwgdG9wLCBib3R0b20gfSA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAgICAgY29uc3QgdG9vbHRpcFdpZHRoID0gcmlnaHQgLSBsZWZ0O1xuICAgICAgICAgICAgY29uc3QgdG9vbHRpcEhlaWdodCA9IGJvdHRvbSAtIHRvcDtcblxuICAgICAgICAgICAgc3dpdGNoICh0aGlzLnBvc2l0aW9uKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBUb29sdGlwUG9zaXRpb24uVG9wOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZS5sZWZ0ID0gTWF0aC5yb3VuZCh0b29sdGlwV2lkdGggLyAyICsgbGVmdCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlLnRvcCA9IE1hdGgucm91bmQodG9wIC0gMjAgLSA1KTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBUb29sdGlwUG9zaXRpb24uQm90dG9tOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZS5sZWZ0ID0gTWF0aC5yb3VuZCh0b29sdGlwV2lkdGggLyAyICsgbGVmdCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlLnRvcCA9IE1hdGgucm91bmQoYm90dG9tICsgMjApO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFRvb2x0aXBQb3NpdGlvbi5MZWZ0OlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZS5sZWZ0ID0gTWF0aC5yb3VuZChsZWZ0IC0gMjApO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZS50b3AgPSBNYXRoLnJvdW5kKHRvcCArIHRvb2x0aXBIZWlnaHQgLyAyIC0gNSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgVG9vbHRpcFBvc2l0aW9uLlJpZ2h0OlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZS5sZWZ0ID0gTWF0aC5yb3VuZChyaWdodCArIDIwKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2UudG9wID0gTWF0aC5yb3VuZCh0b3AgKyB0b29sdGlwSGVpZ2h0IC8gMiAtIDUpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgcHJpdmF0ZSBzaG93VG9vbHRpcCgpIHtcbiAgICAgIGlmICh0aGlzLmNvbXBvbmVudFJlZiAhPT0gbnVsbCkge1xuICAgICAgICAgdGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2UudmlzaWJsZSA9IHRoaXMudmlzaWJsZTtcblxuICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuYm91bmRPbldpbmRvd01vdXNlTW92ZUZ1bmN0aW9uKTtcbiAgICAgIH1cbiAgIH1cblxuICAgcHJpdmF0ZSBzZXRUb29sdGlwQ29tcG9uZW50UHJvcGVydGllcygpIHtcbiAgICAgIGNvbnN0IG1hcmdpbiA9IDIwO1xuICAgICAgY29uc3QgYW5jaG9yU2l6ZSA9IDU7XG5cbiAgICAgIGlmICh0aGlzLmNvbXBvbmVudFJlZiAhPT0gbnVsbCkge1xuICAgICAgICAgdGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2UudG9vbHRpcCA9IHRoaXMudG9vbHRpcDtcbiAgICAgICAgIHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlLmVzY2FwZSA9IHRoaXMuZXNjYXBlO1xuXG4gICAgICAgICBjb25zdCB7IGxlZnQsIHJpZ2h0LCB0b3AsIGJvdHRvbSB9ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICAgICAgIGNvbnN0IHRvb2x0aXBIZWlnaHQgPSBib3R0b20gLSB0b3A7XG4gICAgICAgICBjb25zdCB0b29sdGlwV2lkdGggPSByaWdodCAtIGxlZnQ7XG4gICAgICAgICBjb25zdCBzYWZlU3BhY2UgPSAxNTA7XG5cbiAgICAgICAgIGxldCBwb3NpdGlvbmVkID0gZmFsc2U7XG4gICAgICAgICBjb25zdCBpbnZhbGlkT3B0aW9uczogVG9vbHRpcFBvc2l0aW9uW10gPSBbXTtcblxuICAgICAgICAgd2hpbGUgKCFwb3NpdGlvbmVkKSB7XG4gICAgICAgICAgICBpZiAoaW52YWxpZE9wdGlvbnMuaW5jbHVkZXMoVG9vbHRpcFBvc2l0aW9uLlRvcClcbiAgICAgICAgICAgICAgICYmIGludmFsaWRPcHRpb25zLmluY2x1ZGVzKFRvb2x0aXBQb3NpdGlvbi5Cb3R0b20pXG4gICAgICAgICAgICAgICAmJiBpbnZhbGlkT3B0aW9ucy5pbmNsdWRlcyhUb29sdGlwUG9zaXRpb24uTGVmdClcbiAgICAgICAgICAgICAgICYmIGludmFsaWRPcHRpb25zLmluY2x1ZGVzKFRvb2x0aXBQb3NpdGlvbi5SaWdodCkpIHtcbiAgICAgICAgICAgICAgIHRoaXMuZGVzdHJveSgpO1xuICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gc3BhY2UgdG8gc2hvdyB0b29sdGlwXCIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzd2l0Y2ggKHRoaXMucG9zaXRpb24pIHtcbiAgICAgICAgICAgICAgIGNhc2UgVG9vbHRpcFBvc2l0aW9uLlRvcDoge1xuICAgICAgICAgICAgICAgICAgaWYgKGludmFsaWRPcHRpb25zLmluY2x1ZGVzKFRvb2x0aXBQb3NpdGlvbi5Ub3ApKSB7XG4gICAgICAgICAgICAgICAgICAgICB0aGlzLnBvc2l0aW9uID0gVG9vbHRpcFBvc2l0aW9uLkxlZnQ7XG4gICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgY29uc3QgdG9wU2hpZnQgPSB0b3A7XG5cbiAgICAgICAgICAgICAgICAgIGlmICh0b3BTaGlmdCA8PSB0b29sdGlwSGVpZ2h0ICsgc2FmZVNwYWNlKSB7XG4gICAgICAgICAgICAgICAgICAgICB0aGlzLnBvc2l0aW9uID0gVG9vbHRpcFBvc2l0aW9uLkJvdHRvbTtcbiAgICAgICAgICAgICAgICAgICAgIGludmFsaWRPcHRpb25zLnB1c2goVG9vbHRpcFBvc2l0aW9uLlRvcCk7XG4gICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbmVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgdGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2UubGVmdCA9IE1hdGgucm91bmQodG9vbHRpcFdpZHRoIC8gMiArIGxlZnQpO1xuICAgICAgICAgICAgICAgICAgdGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2UudG9wID0gTWF0aC5yb3VuZCh0b3AgLSBtYXJnaW4gLSBhbmNob3JTaXplKTtcbiAgICAgICAgICAgICAgICAgIHBvc2l0aW9uZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICBjYXNlIFRvb2x0aXBQb3NpdGlvbi5Cb3R0b206IHtcblxuICAgICAgICAgICAgICAgICAgaWYgKGludmFsaWRPcHRpb25zLmluY2x1ZGVzKFRvb2x0aXBQb3NpdGlvbi5Cb3R0b20pKSB7XG4gICAgICAgICAgICAgICAgICAgICB0aGlzLnBvc2l0aW9uID0gVG9vbHRpcFBvc2l0aW9uLkxlZnQ7XG4gICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgY29uc3QgYm90dG9tU2hpZnQgPSBkb2N1bWVudC5ib2R5LmNsaWVudEhlaWdodCAtIGJvdHRvbTtcblxuICAgICAgICAgICAgICAgICAgaWYgKGJvdHRvbVNoaWZ0IDw9IHRvb2x0aXBIZWlnaHQgKyBzYWZlU3BhY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgIHRoaXMucG9zaXRpb24gPSBUb29sdGlwUG9zaXRpb24uVG9wO1xuICAgICAgICAgICAgICAgICAgICAgaW52YWxpZE9wdGlvbnMucHVzaChUb29sdGlwUG9zaXRpb24uQm90dG9tKTtcbiAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICB0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZS5sZWZ0ID0gTWF0aC5yb3VuZCh0b29sdGlwV2lkdGggLyAyICsgbGVmdCk7XG4gICAgICAgICAgICAgICAgICB0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZS50b3AgPSBNYXRoLnJvdW5kKGJvdHRvbSArIG1hcmdpbik7XG4gICAgICAgICAgICAgICAgICBwb3NpdGlvbmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgY2FzZSBUb29sdGlwUG9zaXRpb24uTGVmdDoge1xuICAgICAgICAgICAgICAgICAgaWYgKGludmFsaWRPcHRpb25zLmluY2x1ZGVzKFRvb2x0aXBQb3NpdGlvbi5MZWZ0KSkge1xuICAgICAgICAgICAgICAgICAgICAgdGhpcy5wb3NpdGlvbiA9IFRvb2x0aXBQb3NpdGlvbi5Ub3A7XG4gICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgY29uc3QgbGVmdFNoaWZ0ID0gbGVmdDtcblxuICAgICAgICAgICAgICAgICAgaWYgKGxlZnRTaGlmdCA8PSB0b29sdGlwV2lkdGggKyBzYWZlU3BhY2UpIHtcbiAgICAgICAgICAgICAgICAgICAgIHRoaXMucG9zaXRpb24gPSBUb29sdGlwUG9zaXRpb24uUmlnaHQ7XG4gICAgICAgICAgICAgICAgICAgICBpbnZhbGlkT3B0aW9ucy5wdXNoKFRvb2x0aXBQb3NpdGlvbi5MZWZ0KTtcbiAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICB0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZS5sZWZ0ID0gTWF0aC5yb3VuZChsZWZ0IC0gbWFyZ2luKTtcbiAgICAgICAgICAgICAgICAgIHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlLnRvcCA9IE1hdGgucm91bmQodG9wICsgdG9vbHRpcEhlaWdodCAvIDIgLSBhbmNob3JTaXplKTtcbiAgICAgICAgICAgICAgICAgIHBvc2l0aW9uZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICBjYXNlIFRvb2x0aXBQb3NpdGlvbi5SaWdodDoge1xuICAgICAgICAgICAgICAgICAgaWYgKGludmFsaWRPcHRpb25zLmluY2x1ZGVzKFRvb2x0aXBQb3NpdGlvbi5SaWdodCkpIHtcbiAgICAgICAgICAgICAgICAgICAgIHRoaXMucG9zaXRpb24gPSBUb29sdGlwUG9zaXRpb24uVG9wO1xuICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIGNvbnN0IHJpZ2h0U2hpZnQgPSBkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoIC0gcmlnaHQ7XG5cbiAgICAgICAgICAgICAgICAgIGlmIChyaWdodFNoaWZ0IDw9IHRvb2x0aXBXaWR0aCArIHNhZmVTcGFjZSkge1xuICAgICAgICAgICAgICAgICAgICAgdGhpcy5wb3NpdGlvbiA9IFRvb2x0aXBQb3NpdGlvbi5MZWZ0O1xuICAgICAgICAgICAgICAgICAgICAgaW52YWxpZE9wdGlvbnMucHVzaChUb29sdGlwUG9zaXRpb24uUmlnaHQpO1xuICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb25lZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlLmxlZnQgPSBNYXRoLnJvdW5kKHJpZ2h0ICsgbWFyZ2luKTtcbiAgICAgICAgICAgICAgICAgIHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlLnRvcCA9IE1hdGgucm91bmQodG9wICsgdG9vbHRpcEhlaWdodCAvIDIgLSBhbmNob3JTaXplKTtcbiAgICAgICAgICAgICAgICAgIHBvc2l0aW9uZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2UucG9zaXRpb24gPSB0aGlzLnBvc2l0aW9uO1xuICAgICAgICAgfVxuICAgICAgfVxuICAgfVxuXG4gICBwcml2YXRlIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgICBpZiAodGhpcy5jb21wb25lbnRSZWYgIT09IG51bGwpIHtcbiAgICAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5zaG93VGltZW91dCk7XG4gICAgICAgICB0aGlzLmFwcFJlZi5kZXRhY2hWaWV3KHRoaXMuY29tcG9uZW50UmVmLmhvc3RWaWV3KTtcbiAgICAgICAgIHRoaXMuY29tcG9uZW50UmVmLmRlc3Ryb3koKTtcbiAgICAgICAgIHRoaXMuY29tcG9uZW50UmVmID0gbnVsbDtcbiAgICAgICAgIHRoaXMudG9vbHRpcERpdkVsZW1lbnQgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5ib3VuZE9uV2luZG93TW91c2VNb3ZlRnVuY3Rpb24pO1xuICAgfVxufVxuIl19
|
|
337
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbHRpcC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2VuaW9yc2lzdGVtYXMvYW5ndWxhci1jb21wb25lbnRzLyIsInNvdXJjZXMiOlsiY29tcG9uZW50cy90b29sdGlwL3Rvb2x0aXAuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0gsY0FBYyxFQUNkLHdCQUF3QixFQUN4QixZQUFZLEVBQ1osU0FBUyxFQUNULFVBQVUsRUFDVixlQUFlLEVBQ2YsWUFBWSxFQUNaLFFBQVEsRUFDUixLQUFLLEVBQ0wsU0FBUyxFQUNULE1BQU0sRUFDTixTQUFTLEdBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUN6RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQU12RDtJQW1DSSwwQkFDcUIsVUFBc0IsRUFDdEIsTUFBc0IsRUFDdEIsd0JBQWtELEVBQ2xELFFBQWtCLEVBQ2xCLGFBQTRCLEVBQzVCLFFBQW1CO1FBTnhDLGlCQVVDO1FBVG9CLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsV0FBTSxHQUFOLE1BQU0sQ0FBZ0I7UUFDdEIsNkJBQXdCLEdBQXhCLHdCQUF3QixDQUEwQjtRQUNsRCxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2xCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLGFBQVEsR0FBUixRQUFRLENBQVc7UUFwQ2pDLGFBQVEsR0FBb0IsZUFBZSxDQUFDLEdBQUcsQ0FBQztRQUdoRCxjQUFTLEdBQUcsR0FBRyxDQUFDO1FBTWhCLGlCQUFZLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQztRQUdsQyxXQUFNLEdBQUcsS0FBSyxDQUFDO1FBR2YsWUFBTyxHQUFHLElBQUksQ0FBQztRQUdmLG1C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QVUsQ0FBQztzREFReEI7SUFwTVEsZ0JBQWdCO1FBSDVCLFNBQVMsQ0FBQztZQUNQLFFBQVEsRUFBRSxZQUFZO1NBQ3pCLENBQUM7T0FDVyxnQkFBZ0IsQ0F1VTVCO0lBQUQsdUJBQUM7Q0FBQSxBQXZVRCxJQXVVQztTQXZVWSxnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFwcGxpY2F0aW9uUmVmLFxuICAgIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgICBDb21wb25lbnRSZWYsXG4gICAgRGlyZWN0aXZlLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRW1iZWRkZWRWaWV3UmVmLFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBJbmplY3RvcixcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIFJlbmRlcmVyMixcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IERlYm91bmNlVXRpbHMgfSBmcm9tIFwiLi4vdXRpbHMvZGVib3VjZVwiO1xuaW1wb3J0IHsgTW9iaWxlQmVoYXZpb3IsIFRvb2x0aXBFdmVudCwgVG9vbHRpcFBvc2l0aW9uIH0gZnJvbSBcIi4vbW9kZWxzXCI7XG5pbXBvcnQgeyBUb29sdGlwQ29tcG9uZW50IH0gZnJvbSBcIi4vdG9vbHRpcC5jb21wb25lbnRcIjtcbmltcG9ydCB7IEVsZW1lbnRBcmVhIH0gZnJvbSBcIi4vbW9kZWxzL2VsZW1lbnQtYXJlYVwiO1xuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogXCJbc1Rvb2x0aXBdXCIsXG59KVxuZXhwb3J0IGNsYXNzIFRvb2x0aXBEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gICAgQElucHV0KFwic1Rvb2x0aXBcIilcbiAgICBwdWJsaWMgdG9vbHRpcDogc3RyaW5nO1xuXG4gICAgQElucHV0KFwidG9vbHRpcFBvc2l0aW9uXCIpXG4gICAgcHVibGljIHBvc2l0aW9uOiBUb29sdGlwUG9zaXRpb24gPSBUb29sdGlwUG9zaXRpb24uVG9wO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2hvd0RlbGF5ID0gNTAwO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZGlzcGxheVRpbWU6IG51bWJlcjtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHRvb2x0aXBFdmVudCA9IFRvb2x0aXBFdmVudC5Ib3ZlcjtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGVzY2FwZSA9IGZhbHNlO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgdmlzaWJsZSA9IHRydWU7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBtb2JpbGVCZWhhdmlvciA9IE1vYmlsZUJlaGF2aW9yLlByZXNzaW5nO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZm9jdXNlZElucHV0UmVmOiBIVE1MSW5wdXRFbGVtZW50O1xuXG4gICAgcHJpdmF0ZSBjb21wb25lbnRSZWY6IENvbXBvbmVudFJlZjxhbnk+ID0gbnVsbDtcbiAgICBwcml2YXRlIHNob3dUaW1lb3V0PzogbnVtYmVyO1xuICAgIHByaXZhdGUgdG91Y2hUaW1lb3V0PzogbnVtYmVyO1xuICAgIHByaXZhdGUgdG9vbHRpcERpdkVsZW1lbnQ/OiBIVE1MRWxlbWVudDtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGJvdW5kT25XaW5kb3dNb3VzZU1vdmVGdW5jdGlvbjogKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB2b2lkO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZGVib3VuY2VDcmVhdGVUb29sdGlwRnVuY3Rpb246ICgpID0+IHZvaWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGFwcFJlZjogQXBwbGljYXRpb25SZWYsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgY29tcG9uZW50RmFjdG9yeVJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGRlYm91bmNlVXRpbHM6IERlYm91bmNlVXRpbHMsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgcmVuZGVyZXI6IFJlbmRlcmVyMlxuICAgICkge1xuICAgICAgICB0aGlzLmJvdW5kT25XaW5kb3dNb3VzZU1vdmVGdW5jdGlvbiA9IHRoaXMub25XaW5kb3dNb3VzZU1vdmUuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5kZWJvdW5jZUNyZWF0ZVRvb2x0aXBGdW5jdGlvbiA9IHRoaXMuZGVib3VuY2VVdGlscy5kZWJvdW5jZUxlYWRpbmcoKCkgPT4gdGhpcy5jcmVhdGVUb290aXAoKSk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnZhbGlkYXRlUG9zaXRpb24oKTtcbiAgICAgICAgdGhpcy51cGRhdGVUb29sdGlwVmlzaWJpbGl0eVdoZW5Gb2N1c09uSW5wdXQoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGVzdHJveSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25XaW5kb3dNb3VzZU1vdmUoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNvbXBvbmVudFJlZikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGVsZW1lbnRSZWN0ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGNvbnN0IHRvb2xUaXBSZWN0ID0gdGhpcy50b29sdGlwRGl2RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgICAgICBjb25zdCB0b3RhbEVsZW1lbnRBcmVhID0ge1xuICAgICAgICAgICAgdG9wOiBNYXRoLm1pbihlbGVtZW50UmVjdC50b3AsIHRvb2xUaXBSZWN0LnRvcCksXG4gICAgICAgICAgICByaWdodDogTWF0aC5tYXgoZWxlbWVudFJlY3QucmlnaHQsIHRvb2xUaXBSZWN0LnJpZ2h0KSxcbiAgICAgICAgICAgIGxlZnQ6IE1hdGgubWluKGVsZW1lbnRSZWN0LmxlZnQsIHRvb2xUaXBSZWN0LmxlZnQpLFxuICAgICAgICAgICAgYm90dG9tOiBNYXRoLm1heChlbGVtZW50UmVjdC5ib3R0b20sIHRvb2xUaXBSZWN0LmJvdHRvbSksXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHRoaXMuaXNNb3VzZVBvc2l0aW9uT3V0c2lkZU9mRWxlbWVudChldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZLCB0b3RhbEVsZW1lbnRBcmVhKSkge1xuICAgICAgICAgICAgdGhpcy5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGlzTW91c2VQb3NpdGlvbk91dHNpZGVPZkVsZW1lbnQobW91c2VYOiBudW1iZXIsIG1vdXNlWTogbnVtYmVyLCBlbGVtZW50QXJlYTogRWxlbWVudEFyZWEpIHtcbiAgICAgICAgcmV0dXJuIG1vdXNlWCA8IGVsZW1lbnRBcmVhLmxlZnQgfHwgbW91c2VYID49IGVsZW1lbnRBcmVhLnJpZ2h0IHx8IG1vdXNlWSA8IGVsZW1lbnRBcmVhLnRvcCB8fCBtb3VzZVkgPj0gZWxlbWVudEFyZWEuYm90dG9tO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1hbmlwdWxhIGEgdmlzaWJpbGlkYWRlIGRvIHRvb2x0aXAgcXVhbmRvIGhvdXZlciB1bWEgcmVmZXLDqm5jaWEgZGUgaW5wdXQuXG4gICAgICovXG4gICAgcHJpdmF0ZSB1cGRhdGVUb29sdGlwVmlzaWJpbGl0eVdoZW5Gb2N1c09uSW5wdXQoKSB7XG4gICAgICAgIGlmICh0aGlzLmZvY3VzZWRJbnB1dFJlZikge1xuICAgICAgICAgICAgY29uc3QgaW5wdXRGb2N1cyA9IHRoaXMuZm9jdXNlZElucHV0UmVmO1xuICAgICAgICAgICAgY29uc3QgaWNvbiA9IHRoaXMuZ2V0SWNvbkZyb21Gb2N1c2VkSW5wdXQoKTtcblxuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5saXN0ZW4odGhpcy5mb2N1c2VkSW5wdXRSZWYsIFwiZm9jdXNcIiwgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChpY29uICYmIHRoaXMuaXNNYXRjaGluZ1Rvb2x0aXAoaWNvbikpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVUb290aXBCeUZvY3VzKGljb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5saXN0ZW4oaW5wdXRGb2N1cywgXCJibHVyXCIsICgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaWNvbiAmJiB0aGlzLmlzTWF0Y2hpbmdUb29sdGlwKGljb24pKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlVG9vbHRpcChpY29uKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXN0cm95KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBPYnTDqW0gbyBlbGVtZW50byBkbyDDrWNvbmUgYXNzb2NpYWRvIGFvIGxhYmVsIGRvIGlucHV0IGVtIGZvY3VzLlxuICAgICAqIEByZXR1cm5zIE8gw61jb25lIGRvIGlucHV0IGVtIGZvY3VzLlxuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0SWNvbkZyb21Gb2N1c2VkSW5wdXQoKTogSFRNTEVsZW1lbnQge1xuICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVmVyaWZpY2Egc2UgbyDDrWNvbmUgdGVtIG8gdG9vbHRpcCBjb3JyZXNwb25kZW50ZSBhbyBhdHVhbC5cbiAgICAgKiBAcGFyYW0gaWNvbiBPIMOtY29uZSBkbyBpbnB1dCBlbSBmb2N1cy5cbiAgICAgKiBAcmV0dXJucyB0cnVlIHNlIG8gdG9vbHRpcCBjb3JyZXNwb25kZTsgY2FzbyBjb250csOhcmlvLCBmYWxzZS5cbiAgICAgKi9cbiAgICBwcml2YXRlIGlzTWF0Y2hpbmdUb29sdGlwKGljb246IEhUTUxFbGVtZW50KTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHRvb2x0aXBUZXh0ID0gaWNvbi5nZXRBdHRyaWJ1dGUoXCJuZy1yZWZsZWN0LXRvb2x0aXBcIik7XG4gICAgICAgIHJldHVybiB0aGlzLnRvb2x0aXAgPT09IHRvb2x0aXBUZXh0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZSBvIHRvb2x0aXAgYXNzb2NpYWRvIGFvIMOtY29uZSBkbyBpbnB1dCBlbSBmb2N1cy5cbiAgICAgKiBAcGFyYW0gaWNvbiBPIMOtY29uZSBkbyBpbnB1dCBlbSBmb2N1cy5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlbW92ZVRvb2x0aXAoaWNvbjogSFRNTEVsZW1lbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdG9vbHRpcCA9IGljb24ucXVlcnlTZWxlY3RvcihcIi50b29sdGlwXCIpIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBpZiAodG9vbHRpcCkge1xuICAgICAgICAgICAgdG9vbHRpcC5yZW1vdmUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIHdoZW5ldmVyIHRoZSBjb21wb25lbnQgd2l0aCB0aGUgdG9vbHRpcCBpcyBjbGlja2VkIEkgZGVzdHJveSB0aGUgdG9vbHRpcC5cbiAgICAvLyB3aGVuZXZlciBhIGtleSBpcyBwcmVzc2VkIG9uIHRoZSBjb21wb25lbnQgd2l0aCB0aGUgdG9vbHRpcCBJIGRlc3Ryb3kgdGhlIHRvb2x0aXAuXG4gICAgQEhvc3RMaXN0ZW5lcihcImNsaWNrXCIpXG4gICAgQEhvc3RMaXN0ZW5lcihcImtleWRvd25cIilcbiAgICBwdWJsaWMgb25DbGljaygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMudG9vbHRpcEV2ZW50ID09PSBUb29sdGlwRXZlbnQuSG92ZXIgJiYgIW5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL0FuZHJvaWQvaSkgJiYgIW5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goL2lQaG9uZS9pKSkge1xuICAgICAgICAgICAgdGhpcy5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyB3aGVuZXZlciB5b3UgdG91Y2ggb3V0c2lkZSB0aGUgY29tcG9uZW50IHdpdGggdGhlIHRvb2x0aXAgSSBkZXN0cm95IHRoZSB0b29sdGlwLlxuICAgIEBIb3N0TGlzdGVuZXIoXCJkb2N1bWVudDp0b3VjaHN0YXJ0XCIpXG4gICAgcHVibGljIG9uRG9jdW1lbnRUb3VjaFN0YXJ0KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy50b29sdGlwRXZlbnQgPT09IFRvb2x0aXBFdmVudC5Ib3Zlcikge1xuICAgICAgICAgICAgdGhpcy5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKFwiZm9jdXNcIilcbiAgICBwdWJsaWMgb25Gb2N1cygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMudG9vbHRpcEV2ZW50ID09PSBUb29sdGlwRXZlbnQuRm9jdXMpIHtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlVG9vdGlwKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKFwiYmx1clwiKVxuICAgIHB1YmxpYyBvbkJsdXIoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnRvb2x0aXBFdmVudCA9PT0gVG9vbHRpcEV2ZW50LkZvY3VzKSB7XG4gICAgICAgICAgICB0aGlzLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoXCJtb3VzZWVudGVyXCIpXG4gICAgcHVibGljIG9uTW91c2VFbnRlcigpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMudG9vbHRpcEV2ZW50ID09PSBUb29sdGlwRXZlbnQuSG92ZXIpIHtcbiAgICAgICAgICAgIHRoaXMuZGVib3VuY2VDcmVhdGVUb29sdGlwRnVuY3Rpb24oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoXCJtb3VzZWxlYXZlXCIpXG4gICAgQEhvc3RMaXN0ZW5lcihcIndoZWVsXCIpXG4gICAgcHVibGljIG9uTW91c2VMZWF2ZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMudG9vbHRpcEV2ZW50ID09PSBUb29sdGlwRXZlbnQuSG92ZXIpIHtcbiAgICAgICAgICAgIHRoaXMuZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcihcInRvdWNoc3RhcnRcIilcbiAgICBwdWJsaWMgb25Ub3VjaFN0YXJ0KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy50b29sdGlwRXZlbnQgPT09IFRvb2x0aXBFdmVudC5Ib3Zlcikge1xuICAgICAgICAgICAgd2luZG93LmNsZWFyVGltZW91dCh0aGlzLnRvdWNoVGltZW91dCk7XG4gICAgICAgICAgICB0aGlzLnRvdWNoVGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KFxuICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlVG9vdGlwLmJpbmQodGhpcyksXG4gICAgICAgICAgICAgICAgdGhpcy5tb2JpbGVCZWhhdmlvciA9PT0gTW9iaWxlQmVoYXZpb3IuUHJlc3NpbmcgPyB0aGlzLnNob3dEZWxheSA6IDBcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKFwidG91Y2hlbmRcIilcbiAgICBwdWJsaWMgb25Ub3VjaEVuZCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMudG9vbHRpcEV2ZW50ID09PSBUb29sdGlwRXZlbnQuSG92ZXIpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm1vYmlsZUJlaGF2aW9yID09PSBNb2JpbGVCZWhhdmlvci5QcmVzc2luZykge1xuICAgICAgICAgICAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQodGhpcy50b3VjaFRpbWVvdXQpO1xuICAgICAgICAgICAgICAgIHRoaXMuZGVzdHJveSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB2YWxpZGF0ZVBvc2l0aW9uKCkge1xuICAgICAgICBjb25zdCBjb250YWluc1Bvc2l0aW9uID0gW1Rvb2x0aXBQb3NpdGlvbi5Ub3AsIFRvb2x0aXBQb3NpdGlvbi5SaWdodCwgVG9vbHRpcFBvc2l0aW9uLkJvdHRvbSwgVG9vbHRpcFBvc2l0aW9uLkxlZnRdLmluY2x1ZGVzKFxuICAgICAgICAgICAgdGhpcy5wb3NpdGlvblxuICAgICAgICApO1xuXG4gICAgICAgIGlmICghY29udGFpbnNQb3NpdGlvbikge1xuICAgICAgICAgICAgdGhpcy5wb3NpdGlvbiA9IFRvb2x0aXBQb3NpdGlvbi5Ub3A7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRvb2x0aXAgJHt0aGlzLnBvc2l0aW9ufSBwb3NpdGlvbiBpcyB1bmV4cGVjdGVkYCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZVRvb3RpcCgpIHtcbiAgICAgICAgaWYgKHRoaXMuY29tcG9uZW50UmVmID09PSBudWxsICYmIHRoaXMudG9vbHRpcD8ubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBkb21FbGVtID0gdGhpcy5nZXREb21FbGVtZW50KCk7XG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRvbUVsZW0pO1xuICAgICAgICAgICAgdGhpcy5zZXRUb29sdGlwQ29tcG9uZW50UHJvcGVydGllcygpO1xuICAgICAgICAgICAgdGhpcy5zaG93VGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KHRoaXMuc2hvd1Rvb2x0aXAuYmluZCh0aGlzKSwgdGhpcy5zaG93RGVsYXkpO1xuXG4gICAgICAgICAgICB0aGlzLnRvb2x0aXBEaXZFbGVtZW50ID0gZG9tRWxlbS5xdWVyeVNlbGVjdG9yKFwiLnRvb2x0aXBcIik7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmRpc3BsYXlUaW1lKSB7XG4gICAgICAgICAgICAgICAgd2luZG93LnNldFRpbWVvdXQodGhpcy5kZXN0cm95LmJpbmQodGhpcyksIHRoaXMuZGlzcGxheVRpbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXREb21FbGVtZW50KCk6IEhUTUxFbGVtZW50IHtcbiAgICAgICAgY29uc3QgY29tcG9uZW50RmFjdG9yeSA9IHRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyLnJlc29sdmVDb21wb25lbnRGYWN0b3J5KFRvb2x0aXBDb21wb25lbnQpO1xuICAgICAgICB0aGlzLmNvbXBvbmVudFJlZiA9IGNvbXBvbmVudEZhY3RvcnkuY3JlYXRlKHRoaXMuaW5qZWN0b3IpO1xuICAgICAgICB0aGlzLmFwcFJlZi5hdHRhY2hWaWV3KHRoaXMuY29tcG9uZW50UmVmLmhvc3RWaWV3KTtcbiAgICAgICAgcmV0dXJuICh0aGlzLmNvbXBvbmVudFJlZi5ob3N0VmlldyBhcyBFbWJlZGRlZFZpZXdSZWY8YW55Pikucm9vdE5vZGVzWzBdIGFzIEhUTUxFbGVtZW50O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyaWEgdW0gdG9vbHRpcCBwYXJhIG8gaWNvbmUgZG8gaW5wdXQgZW0gZm9jdXMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaWNvbiBPIMOtY29uZSBkbyBpbnB1dCBlbSBmb2N1cy5cbiAgICAgKi9cbiAgICBwcml2YXRlIGNyZWF0ZVRvb3RpcEJ5Rm9jdXMoaWNvbjogSFRNTEVsZW1lbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuY29tcG9uZW50UmVmID09PSBudWxsICYmIHRoaXMudG9vbHRpcD8ubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBkb21FbGVtID0gdGhpcy5nZXREb21FbGVtZW50KCk7XG4gICAgICAgICAgICBjb25zdCB0b29sdGlwID0gZG9tRWxlbS5xdWVyeVNlbGVjdG9yKFwiLnRvb2x0aXBcIikgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgICAgICBpY29uLmFwcGVuZENoaWxkKHRvb2x0aXApO1xuICAgICAgICAgICAgdGhpcy5zZXRUb29sdGlwQ29tcG9uZW50UHJvcGVydGllcygpO1xuXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRvb2x0aXAuY2xhc3NMaXN0LmFkZChcInRvb2x0aXAtLXZpc2libGVcIiksIDApO1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5saXN0ZW4od2luZG93LCBcInNjcm9sbFwiLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRUb29sdGlwUG9zaXRpb25Qcm9wZXJ0eSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNob3dUb29sdGlwKCkge1xuICAgICAgICBpZiAodGhpcy5jb21wb25lbnRSZWYgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlLnZpc2libGUgPSB0aGlzLnZpc2libGU7XG5cbiAgICAgICAgICAgIHRoaXMuc2V0VG9vbHRpcFBvc2l0aW9uUHJvcGVydHkoKTtcblxuICAgICAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZW1vdmVcIiwgdGhpcy5ib3VuZE9uV2luZG93TW91c2VNb3ZlRnVuY3Rpb24pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRUb29sdGlwUG9zaXRpb25Qcm9wZXJ0eSgpIHtcbiAgICAgICAgY29uc3QgbWFyZ2luID0gMjA7XG4gICAgICAgIGNvbnN0IGFuY2hvclNpemUgPSA1O1xuXG4gICAgICAgIGNvbnN0IGRvbUVsZW0gPSAoKHRoaXMuY29tcG9uZW50UmVmLmhvc3RWaWV3IGFzIEVtYmVkZGVkVmlld1JlZjxhbnk+KS5yb290Tm9kZXNbMF0gYXMgSFRNTEVsZW1lbnQpLnF1ZXJ5U2VsZWN0b3IoXCIjdG9vbHRpcFwiKTtcbiAgICAgICAgY29uc3QgeyBoZWlnaHQsIHdpZHRoIH0gPSBkb21FbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBjb25zdCB7IGxlZnQsIHJpZ2h0LCB0b3AsIGJvdHRvbSB9ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICAgICAgY29uc3QgcG9zaXRpb25zID0gW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHBvczogVG9vbHRpcFBvc2l0aW9uLlRvcCxcbiAgICAgICAgICAgICAgICBjaGVjazogKCkgPT4gdG9wID4gaGVpZ2h0LFxuICAgICAgICAgICAgICAgIHNldDogKCkgPT4gKHsgbGVmdDogbGVmdCArIChyaWdodCAtIGxlZnQpIC8gMiwgdG9wOiB0b3AgLSBtYXJnaW4gLSBhbmNob3JTaXplIH0pLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBwb3M6IFRvb2x0aXBQb3NpdGlvbi5Cb3R0b20sXG4gICAgICAgICAgICAgICAgY2hlY2s6ICgpID0+IGRvY3VtZW50LmJvZHkuY2xpZW50SGVpZ2h0IC0gYm90dG9tID4gaGVpZ2h0LFxuICAgICAgICAgICAgICAgIHNldDogKCkgPT4gKHsgbGVmdDogbGVmdCArIChyaWdodCAtIGxlZnQpIC8gMiwgdG9wOiBib3R0b20gKyBtYXJnaW4gfSksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHBvczogVG9vbHRpcFBvc2l0aW9uLkxlZnQsXG4gICAgICAgICAgICAgICAgY2hlY2s6ICgpID0+IGxlZnQgPiB3aWR0aCxcbiAgICAgICAgICAgICAgICBzZXQ6ICgpID0+ICh7IGxlZnQ6IGxlZnQgLSBtYXJnaW4sIHRvcDogdG9wICsgaGVpZ2h0IC8gMiAtIGFuY2hvclNpemUgfSksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHBvczogVG9vbHRpcFBvc2l0aW9uLlJpZ2h0LFxuICAgICAgICAgICAgICAgIGNoZWNrOiAoKSA9PiBkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoIC0gcmlnaHQgPiB3aWR0aCxcbiAgICAgICAgICAgICAgICBzZXQ6ICgpID0+ICh7IGxlZnQ6IHJpZ2h0ICsgbWFyZ2luLCB0b3A6IHRvcCArIGhlaWdodCAvIDIgLSBhbmNob3JTaXplIH0pLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgXTtcblxuICAgICAgICBmb3IgKGNvbnN0IHsgcG9zLCBjaGVjaywgc2V0IH0gb2YgcG9zaXRpb25zKSB7XG4gICAgICAgICAgICBpZiAoY2hlY2soKSkge1xuICAgICAgICAgICAgICAgIHRoaXMucG9zaXRpb24gPSBwb3M7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBsZWZ0LCB0b3AgfSA9IHNldCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlLmxlZnQgPSBNYXRoLnJvdW5kKGxlZnQpO1xuICAgICAgICAgICAgICAgIHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlLnRvcCA9IE1hdGgucm91bmQodG9wKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZS5wb3NpdGlvbiA9IHRoaXMucG9zaXRpb247XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2UgbsOjbyBjb25zZWd1aXIgcG9zaWNpb25hciwgbW9zdHJhciBhYmFpeG9cbiAgICAgICAgdGhpcy5wb3NpdGlvbiA9IFRvb2x0aXBQb3NpdGlvbi5Cb3R0b207XG4gICAgICAgIHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlLmxlZnQgPSBNYXRoLnJvdW5kKGxlZnQgKyAocmlnaHQgLSBsZWZ0KSAvIDIpO1xuICAgICAgICB0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZS50b3AgPSBNYXRoLnJvdW5kKGJvdHRvbSArIG1hcmdpbik7XG4gICAgICAgIHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlLnBvc2l0aW9uID0gdGhpcy5wb3NpdGlvbjtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldFRvb2x0aXBDb21wb25lbnRQcm9wZXJ0aWVzKCkge1xuICAgICAgICBpZiAodGhpcy5jb21wb25lbnRSZWYgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlLnRvb2x0aXAgPSB0aGlzLnRvb2x0aXA7XG4gICAgICAgICAgICB0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZS5lc2NhcGUgPSB0aGlzLmVzY2FwZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuY29tcG9uZW50UmVmICE9PSBudWxsKSB7XG4gICAgICAgICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHRoaXMuc2hvd1RpbWVvdXQpO1xuICAgICAgICAgICAgdGhpcy5hcHBSZWYuZGV0YWNoVmlldyh0aGlzLmNvbXBvbmVudFJlZi5ob3N0Vmlldyk7XG4gICAgICAgICAgICB0aGlzLmNvbXBvbmVudFJlZi5kZXN0cm95KCk7XG4gICAgICAgICAgICB0aGlzLmNvbXBvbmVudFJlZiA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLnRvb2x0aXBEaXZFbGVtZW50ID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2Vtb3ZlXCIsIHRoaXMuYm91bmRPbldpbmRvd01vdXNlTW92ZUZ1bmN0aW9uKTtcbiAgICB9XG59XG4iXX0=
|