@seniorsistemas/angular-components 19.9.8 → 19.9.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/card/lib/card/card.component.d.ts +6 -2
- package/country-phone-picker/lib/country-phone-picker/country-phone-picker.component.d.ts +0 -1
- package/datepicker/README.md +6 -2
- package/datepicker/lib/datepicker/date-segment-input.d.ts +7 -1
- package/datepicker/lib/datepicker/datepicker.component.d.ts +137 -3
- package/dialog/lib/src/dialog/services/dialog.service.d.ts +2 -0
- package/esm2022/accordion/lib/accordion/components/accordion-panel/accordion-panel.component.mjs +3 -3
- package/esm2022/autocomplete/lib/autocomplete/autocomplete.component.mjs +8 -3
- package/esm2022/autocomplete/lib/autocomplete/components/autocomplete-chip/autocomplete-chip.component.mjs +4 -3
- package/esm2022/breadcrumb/lib/breadcrumb/breadcrumb.component.mjs +3 -3
- package/esm2022/breadcrumb/lib/dynamic-breadcrumb/dynamic-breadcrumb.component.mjs +4 -2
- package/esm2022/button/lib/button/button.component.mjs +3 -3
- package/esm2022/card/lib/card/card.component.mjs +13 -5
- package/esm2022/checkbox/lib/checkbox/checkbox.component.mjs +3 -3
- package/esm2022/checkbox-list/lib/checkbox-list/checkbox-list.component.mjs +3 -3
- package/esm2022/chips/lib/chips/chip-item/chip-item.component.mjs +3 -3
- package/esm2022/chips/lib/chips/chips/chips.component.mjs +3 -3
- package/esm2022/code-editor/lib/code-editor/infra/cores/codemirror-6/themes/sds-light/sds-light-style.mjs +3 -2
- package/esm2022/collapse-link/lib/collapse-link/collapse-link.component.mjs +3 -3
- package/esm2022/country-phone-picker/lib/country-phone-picker/country-phone-picker.component.mjs +14 -9
- package/esm2022/datepicker/lib/datepicker/date-segment-input.mjs +19 -2
- package/esm2022/datepicker/lib/datepicker/datepicker.component.mjs +405 -38
- package/esm2022/dialog/lib/src/dialog/dialog.component.mjs +3 -3
- package/esm2022/dialog/lib/src/dialog/services/dialog.service.mjs +13 -1
- package/esm2022/drawer/lib/drawer/drawer.component.mjs +3 -3
- package/esm2022/dynamic-form/dynamic-form/components/lookup/lookup.component.mjs +3 -3
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/bignumber/bignumber-field.component.mjs +3 -3
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/currency/currency-field.component.mjs +3 -3
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/number/number-field.component.mjs +3 -3
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/password/password-field.component.mjs +3 -3
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/text/text-field.component.mjs +3 -3
- package/esm2022/editor/lib/editor/editor.component.mjs +3 -3
- package/esm2022/editor/lib/editor/toolbar-button/editor-toolbar-button.component.mjs +3 -3
- package/esm2022/fieldset/lib/fieldset/fieldset.component.mjs +3 -3
- package/esm2022/file-picker/lib/file-picker/file-picker.component.mjs +3 -3
- package/esm2022/gantt/lib/gantt/components/gantt/bar.mjs +2 -1
- package/esm2022/gantt/lib/gantt/gantt.component.mjs +3 -3
- package/esm2022/global-search/lib/global-search/global-search.component.mjs +16 -25
- package/esm2022/grid-menu/lib/grid-menu/components/grid-menu-item/grid-menu-item.component.mjs +3 -3
- package/esm2022/input-text/lib/input-text/input-text.directive.mjs +3 -3
- package/esm2022/lib/locale/fallback.mjs +47 -13
- package/esm2022/navigation-button/lib/navigation-button/navigation-button.component.mjs +3 -3
- package/esm2022/object-card/lib/object-card/object-card.component.mjs +3 -3
- package/esm2022/paginator/lib/paginator/paginator.component.mjs +3 -3
- package/esm2022/pin-code-field/lib/pin-code-field/pin-code-field.component.mjs +3 -3
- package/esm2022/radio-button/lib/radio-button/radio-button.component.mjs +4 -10
- package/esm2022/rating-scale/lib/rating-scale/rating-scale.component.mjs +3 -3
- package/esm2022/select/lib/select/components/select-option/select-option.component.mjs +31 -3
- package/esm2022/select/lib/select/select.component.mjs +240 -23
- package/esm2022/select-button/lib/select-button/components/select-button-item/select-button-item.component.mjs +3 -3
- package/esm2022/shared/lib/accessibility/datepicker-no-period-tab.directive.mjs +6 -6
- package/esm2022/side-sheet/lib/side-sheet/side-sheet.component.mjs +3 -3
- package/esm2022/slider/lib/slider/slider.component.mjs +67 -65
- package/esm2022/slider/lib/slider/slider.module.mjs +2 -2
- package/esm2022/split-button/lib/split-button/split-button.component.mjs +3 -3
- package/esm2022/star-rating/star-rating/star-rating.component.mjs +3 -3
- package/esm2022/stepper/lib/stepper/stepper.component.mjs +3 -3
- package/esm2022/switch/lib/switch/switch.component.mjs +5 -19
- package/esm2022/tabs/lib/tabs/tabs.component.mjs +3 -3
- package/esm2022/text-area/lib/text-area/text-area.component.mjs +3 -3
- package/esm2022/thumbnail/lib/thumbnail/thumbnail.component.mjs +10 -3
- package/esm2022/thumbnails/lib/thumbnails/components/thumbnail-item/thumbnail-item.component.mjs +3 -3
- package/esm2022/tiered-menu/lib/tiered-menu/components/tiered-menu-item/tiered-menu-item.component.mjs +3 -3
- package/esm2022/tiered-menu/lib/tiered-menu/services/tiered-menu.global.service.mjs +4 -3
- package/esm2022/tile/lib/tile/tile.component.mjs +3 -3
- package/esm2022/tree/lib/tree/components/tree-node-item/tree-node-item.component.mjs +20 -3
- package/esm2022/workspace-switch/lib/workspace-switch/workspace-switch.component.mjs +3 -3
- package/fesm2022/seniorsistemas-angular-components-accordion.mjs +2 -2
- package/fesm2022/seniorsistemas-angular-components-accordion.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-autocomplete.mjs +10 -5
- package/fesm2022/seniorsistemas-angular-components-autocomplete.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-breadcrumb.mjs +5 -3
- package/fesm2022/seniorsistemas-angular-components-breadcrumb.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-button.mjs +2 -2
- package/fesm2022/seniorsistemas-angular-components-button.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-card.mjs +12 -4
- package/fesm2022/seniorsistemas-angular-components-card.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-checkbox-list.mjs +2 -2
- package/fesm2022/seniorsistemas-angular-components-checkbox-list.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-checkbox.mjs +2 -2
- package/fesm2022/seniorsistemas-angular-components-checkbox.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-chips.mjs +4 -4
- package/fesm2022/seniorsistemas-angular-components-chips.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-code-editor.mjs +2 -1
- package/fesm2022/seniorsistemas-angular-components-code-editor.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-collapse-link.mjs +2 -2
- package/fesm2022/seniorsistemas-angular-components-collapse-link.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-country-phone-picker.mjs +13 -8
- package/fesm2022/seniorsistemas-angular-components-country-phone-picker.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-datepicker.mjs +422 -38
- package/fesm2022/seniorsistemas-angular-components-datepicker.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-dialog.mjs +14 -2
- package/fesm2022/seniorsistemas-angular-components-dialog.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-drawer.mjs +2 -2
- package/fesm2022/seniorsistemas-angular-components-drawer.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs +12 -12
- package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-editor.mjs +4 -4
- package/fesm2022/seniorsistemas-angular-components-editor.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-fieldset.mjs +2 -2
- package/fesm2022/seniorsistemas-angular-components-fieldset.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-file-picker.mjs +2 -2
- package/fesm2022/seniorsistemas-angular-components-file-picker.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-gantt.mjs +3 -2
- package/fesm2022/seniorsistemas-angular-components-gantt.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-global-search.mjs +14 -23
- package/fesm2022/seniorsistemas-angular-components-global-search.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-grid-menu.mjs +2 -2
- package/fesm2022/seniorsistemas-angular-components-grid-menu.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-input-text.mjs +2 -2
- package/fesm2022/seniorsistemas-angular-components-input-text.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-navigation-button.mjs +2 -2
- package/fesm2022/seniorsistemas-angular-components-navigation-button.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-object-card.mjs +2 -2
- package/fesm2022/seniorsistemas-angular-components-object-card.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-paginator.mjs +2 -2
- package/fesm2022/seniorsistemas-angular-components-paginator.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-pin-code-field.mjs +2 -2
- package/fesm2022/seniorsistemas-angular-components-pin-code-field.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-radio-button.mjs +3 -9
- package/fesm2022/seniorsistemas-angular-components-radio-button.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-rating-scale.mjs +2 -2
- package/fesm2022/seniorsistemas-angular-components-rating-scale.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-select-button.mjs +2 -2
- package/fesm2022/seniorsistemas-angular-components-select-button.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-select.mjs +269 -24
- package/fesm2022/seniorsistemas-angular-components-select.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-shared.mjs +5 -5
- package/fesm2022/seniorsistemas-angular-components-shared.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-side-sheet.mjs +2 -2
- package/fesm2022/seniorsistemas-angular-components-side-sheet.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-slider.mjs +67 -65
- package/fesm2022/seniorsistemas-angular-components-slider.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-split-button.mjs +2 -2
- package/fesm2022/seniorsistemas-angular-components-split-button.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-star-rating.mjs +2 -2
- package/fesm2022/seniorsistemas-angular-components-star-rating.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-stepper.mjs +2 -2
- package/fesm2022/seniorsistemas-angular-components-stepper.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-switch.mjs +4 -18
- package/fesm2022/seniorsistemas-angular-components-switch.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-tabs.mjs +2 -2
- package/fesm2022/seniorsistemas-angular-components-tabs.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-text-area.mjs +2 -2
- package/fesm2022/seniorsistemas-angular-components-text-area.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-thumbnail.mjs +9 -2
- package/fesm2022/seniorsistemas-angular-components-thumbnail.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-thumbnails.mjs +2 -2
- package/fesm2022/seniorsistemas-angular-components-thumbnails.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-tiered-menu.mjs +5 -4
- package/fesm2022/seniorsistemas-angular-components-tiered-menu.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-tile.mjs +2 -2
- package/fesm2022/seniorsistemas-angular-components-tile.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-tree.mjs +20 -3
- package/fesm2022/seniorsistemas-angular-components-tree.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-workspace-switch.mjs +2 -2
- package/fesm2022/seniorsistemas-angular-components-workspace-switch.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components.mjs +46 -12
- package/fesm2022/seniorsistemas-angular-components.mjs.map +1 -1
- package/global-search/lib/global-search/global-search.component.d.ts +7 -3
- package/package.json +1 -1
- package/radio-button/lib/radio-button/radio-button.component.d.ts +0 -1
- package/select/README.md +16 -3
- package/select/lib/select/components/select-option/select-option.component.d.ts +23 -1
- package/select/lib/select/select.component.d.ts +111 -17
- package/slider/lib/slider/slider.component.d.ts +25 -7
- package/styles.css +5 -0
- package/switch/lib/switch/switch.component.d.ts +0 -2
- package/thumbnail/lib/thumbnail/thumbnail.component.d.ts +1 -0
- package/tree/lib/tree/components/tree-node-item/tree-node-item.component.d.ts +4 -0
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
import { Component, EventEmitter, forwardRef,
|
|
1
|
+
import { Component, EventEmitter, forwardRef, Input, Output, ViewChild, } from '@angular/core';
|
|
2
2
|
import { NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
3
3
|
import { NgClass } from '@angular/common';
|
|
4
|
+
import { TranslateModule } from '@ngx-translate/core';
|
|
4
5
|
import { TooltipDirective } from '@seniorsistemas/angular-components/tooltip';
|
|
5
6
|
import * as i0 from "@angular/core";
|
|
7
|
+
import * as i1 from "@ngx-translate/core";
|
|
6
8
|
/**
|
|
7
9
|
* @description Componente de controle deslizante (slider) para seleção de valores numéricos
|
|
8
10
|
* dentro de um intervalo definido. Suporta modo simples (um valor) e modo de intervalo
|
|
@@ -115,7 +117,6 @@ export class SliderComponent {
|
|
|
115
117
|
*/
|
|
116
118
|
mapRangeValuesForSlider = new Map();
|
|
117
119
|
activeMouseDown = false;
|
|
118
|
-
focusActive = false;
|
|
119
120
|
ngOnInit() {
|
|
120
121
|
this.setUserRangeMapValues();
|
|
121
122
|
}
|
|
@@ -135,17 +136,57 @@ export class SliderComponent {
|
|
|
135
136
|
this.setRangeValues();
|
|
136
137
|
});
|
|
137
138
|
}
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
139
|
+
/**
|
|
140
|
+
* Handles arrow-key navigation for a single thumb. Each thumb owns its own keydown
|
|
141
|
+
* handler (instead of a shared `document:keydown` listener) so that Left/Right only
|
|
142
|
+
* move the thumb that currently has keyboard focus — never both at once.
|
|
143
|
+
*/
|
|
144
|
+
onThumbKeydown(event, thumb) {
|
|
145
|
+
if (this.disabled) {
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
const isIncrement = event.key === 'ArrowRight' || event.key === 'ArrowUp';
|
|
149
|
+
const isDecrement = event.key === 'ArrowLeft' || event.key === 'ArrowDown';
|
|
150
|
+
if (!isIncrement && !isDecrement) {
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
event.preventDefault();
|
|
154
|
+
if (this.multiple) {
|
|
155
|
+
this._incrementOrDecrementSingleThumb(thumb, isIncrement);
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
this._incrementOrDecrementEndValue(isIncrement);
|
|
159
|
+
}
|
|
160
|
+
this.setProgress();
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Returns the current user-facing value represented by the given thumb.
|
|
164
|
+
*/
|
|
165
|
+
getThumbValue(thumb) {
|
|
166
|
+
if (Array.isArray(this.value)) {
|
|
167
|
+
return thumb === 'start' ? this.value[0] : this.value[1];
|
|
168
|
+
}
|
|
169
|
+
return this.value;
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* The "start" thumb can never move past the "end" thumb, so its effective minimum
|
|
173
|
+
* stays at `min` but its maximum is capped by the "end" thumb's current value.
|
|
174
|
+
*/
|
|
175
|
+
getThumbMin(thumb) {
|
|
176
|
+
if (thumb === 'end' && this.multiple) {
|
|
177
|
+
return this.getThumbValue('start');
|
|
178
|
+
}
|
|
179
|
+
return this.min;
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Mirror of {@link getThumbMin}: the "end" thumb's minimum is capped by the "start"
|
|
183
|
+
* thumb's current value, so the two thumbs can never cross each other.
|
|
184
|
+
*/
|
|
185
|
+
getThumbMax(thumb) {
|
|
186
|
+
if (thumb === 'start' && this.multiple) {
|
|
187
|
+
return this.getThumbValue('end');
|
|
148
188
|
}
|
|
189
|
+
return this.max;
|
|
149
190
|
}
|
|
150
191
|
get tooltipStartText() {
|
|
151
192
|
return Array.isArray(this.value) ? this.value[0]?.toString() : this.value?.toString();
|
|
@@ -166,12 +207,6 @@ export class SliderComponent {
|
|
|
166
207
|
setDisabledState(isDisabled) {
|
|
167
208
|
this.disabled = isDisabled;
|
|
168
209
|
}
|
|
169
|
-
onFocusIn() {
|
|
170
|
-
this.focusActive = true;
|
|
171
|
-
}
|
|
172
|
-
onBlur() {
|
|
173
|
-
this.focusActive = false;
|
|
174
|
-
}
|
|
175
210
|
onTrackClick(evt) {
|
|
176
211
|
if (this.disabled || this.movingProgressBar || this.activeMouseDown) {
|
|
177
212
|
return;
|
|
@@ -532,49 +567,19 @@ export class SliderComponent {
|
|
|
532
567
|
return item.mapped;
|
|
533
568
|
}
|
|
534
569
|
}
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
this._incrementOrDecrementEndValue(false);
|
|
541
|
-
}
|
|
542
|
-
this.setProgress();
|
|
543
|
-
}
|
|
544
|
-
handleArrowKeyRight() {
|
|
545
|
-
if (this.multiple) {
|
|
546
|
-
this._incrementOrDecrementStartAndEndValue(true);
|
|
547
|
-
}
|
|
548
|
-
else {
|
|
549
|
-
this._incrementOrDecrementEndValue(true);
|
|
550
|
-
}
|
|
551
|
-
this.setProgress();
|
|
552
|
-
}
|
|
553
|
-
_incrementOrDecrementStartAndEndValue(increment) {
|
|
570
|
+
/**
|
|
571
|
+
* Moves only the given thumb by one `step`, clamped so it never crosses the other
|
|
572
|
+
* thumb (start ≤ end always) nor the slider's global `min`/`max`.
|
|
573
|
+
*/
|
|
574
|
+
_incrementOrDecrementSingleThumb(thumb, increment) {
|
|
554
575
|
let [start, end] = this.value;
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
start
|
|
558
|
-
end += this.step;
|
|
576
|
+
if (thumb === 'start') {
|
|
577
|
+
start += increment ? this.step : -this.step;
|
|
578
|
+
start = Math.min(Math.max(start, this.min), end);
|
|
559
579
|
}
|
|
560
580
|
else {
|
|
561
|
-
|
|
562
|
-
end
|
|
563
|
-
}
|
|
564
|
-
const startLessThanMin = start < this.min;
|
|
565
|
-
const endGreaterThanMax = end > this.max;
|
|
566
|
-
if (startLessThanMin || endGreaterThanMax) {
|
|
567
|
-
if (startLessThanMin) {
|
|
568
|
-
start = this.min;
|
|
569
|
-
end = start + difference;
|
|
570
|
-
}
|
|
571
|
-
else if (endGreaterThanMax) {
|
|
572
|
-
end = this.max;
|
|
573
|
-
start = end - difference;
|
|
574
|
-
}
|
|
575
|
-
}
|
|
576
|
-
if (start < this.min || end > this.max) {
|
|
577
|
-
return;
|
|
581
|
+
end += increment ? this.step : -this.step;
|
|
582
|
+
end = Math.max(Math.min(end, this.max), start);
|
|
578
583
|
}
|
|
579
584
|
this.setValue([start, end], false);
|
|
580
585
|
if (this.needParseValues) {
|
|
@@ -607,13 +612,13 @@ export class SliderComponent {
|
|
|
607
612
|
return this.max !== this.MAX_RANGE_VALUE || this.min !== this.MIN_RANGE_VALUE;
|
|
608
613
|
}
|
|
609
614
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SliderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
610
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: SliderComponent, isStandalone: true, selector: "s-slider", inputs: { multiple: "multiple", value: "value", step: "step", hiddenThumb: "hiddenThumb", disabled: "disabled", min: "min", max: "max", minValueLabel: "minValueLabel", maxValueLabel: "maxValueLabel", tabindex: "tabindex" }, outputs: { valueChange: "valueChange" },
|
|
615
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: SliderComponent, isStandalone: true, selector: "s-slider", inputs: { multiple: "multiple", value: "value", step: "step", hiddenThumb: "hiddenThumb", disabled: "disabled", min: "min", max: "max", minValueLabel: "minValueLabel", maxValueLabel: "maxValueLabel", tabindex: "tabindex" }, outputs: { valueChange: "valueChange" }, providers: [
|
|
611
616
|
{
|
|
612
617
|
provide: NG_VALUE_ACCESSOR,
|
|
613
618
|
useExisting: forwardRef(() => SliderComponent),
|
|
614
619
|
multi: true,
|
|
615
620
|
},
|
|
616
|
-
], viewQueries: [{ propertyName: "track", first: true, predicate: ["track"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\r\n class=\"slider-container\"\r\n [ngClass]=\"{ 'slider-container--disabled': disabled }\"\r\n
|
|
621
|
+
], viewQueries: [{ propertyName: "track", first: true, predicate: ["track"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\r\n class=\"slider-container\"\r\n [ngClass]=\"{ 'slider-container--disabled': disabled }\"\r\n (click)=\"onTrackClick($event)\"\r\n>\r\n <div\r\n #track\r\n class=\"slider-track\"\r\n [ngClass]=\"{\r\n 'slider-track--hidden-thumb': hiddenThumb,\r\n 'slider-track--moving-multiple-thumbs': movingProgressBar,\r\n }\"\r\n >\r\n <div\r\n class=\"slider-progress\"\r\n (mousedown)=\"onProgressMouseDown($event)\"\r\n [style.left.%]=\"progressLeft\"\r\n [style.width]=\"progressWidth\"\r\n ></div>\r\n @if (multiple) {\r\n <div\r\n class=\"slider-thumb\"\r\n role=\"slider\"\r\n [sTooltip]=\"tooltipStartText\"\r\n [showDelay]=\"0\"\r\n [tabindex]=\"disabled ? -1 : tabindex\"\r\n [attr.aria-valuenow]=\"getThumbValue('start')\"\r\n [attr.aria-valuemin]=\"getThumbMin('start')\"\r\n [attr.aria-valuemax]=\"getThumbMax('start')\"\r\n [attr.aria-label]=\"'platform.angular_components.slider_min_value' | translate\"\r\n [attr.aria-disabled]=\"disabled || null\"\r\n (mousedown)=\"onMouseDown($event, 'start')\"\r\n (keydown)=\"onThumbKeydown($event, 'start')\"\r\n [style.left.%]=\"startValue\"\r\n ></div>\r\n }\r\n <div\r\n [sTooltip]=\"tooltipEndText\"\r\n class=\"slider-thumb\"\r\n role=\"slider\"\r\n [showDelay]=\"0\"\r\n [tabindex]=\"disabled ? -1 : tabindex\"\r\n [attr.aria-valuenow]=\"getThumbValue('end')\"\r\n [attr.aria-valuemin]=\"getThumbMin('end')\"\r\n [attr.aria-valuemax]=\"getThumbMax('end')\"\r\n [attr.aria-label]=\"\r\n (multiple\r\n ? 'platform.angular_components.slider_max_value'\r\n : 'platform.angular_components.slider_value') | translate\r\n \"\r\n [attr.aria-disabled]=\"disabled || null\"\r\n (mousedown)=\"onMouseDown($event, 'end')\"\r\n (keydown)=\"onThumbKeydown($event, 'end')\"\r\n [style.left.%]=\"endValue\"\r\n ></div>\r\n </div>\r\n <div class=\"footer\">\r\n <span>{{ minValueLabel || min }}</span>\r\n <span>{{ maxValueLabel || max }}</span>\r\n </div>\r\n</div>\r\n", styles: [".slider-container{height:20px;padding:16px 0 40px;position:relative;-webkit-user-select:none;user-select:none;width:100%}.slider-container .slider-track{background-color:#ddd;border-radius:3px;cursor:pointer;height:6px;position:relative;width:100%}.slider-container .slider-track .slider-progress{background-color:#428bca;border-radius:3px;cursor:pointer;height:100%;left:0;position:absolute;top:0;width:0}.slider-container .slider-track .slider-thumb{background-color:#fff;border:2px solid #428bca;border-radius:50%;cursor:pointer;height:20px;position:absolute;transform:translateY(-50%);top:50%;width:20px}.slider-container .slider-track .slider-thumb:active{box-shadow:0 0 0 4px #428bca33}.slider-container .slider-track .slider-thumb:focus-visible{outline:2px solid var(--s-focus-ring-color);outline-offset:2px}.slider-container .slider-track--hidden-thumb:not(:hover) .slider-thumb{opacity:0}.slider-container .slider-track--moving-multiple-thumbs .slider-thumb{box-shadow:0 0 0 4px #428bca33}.slider-container .footer{color:#212533;display:flex;font-family:Open Sans,sans-serif;font-size:14px;justify-content:space-between;margin-top:8px}.slider-container--disabled .slider-track{cursor:default}.slider-container--disabled .slider-track .slider-thumb{border-color:#a5a5b2;cursor:default}.slider-container--disabled .slider-track .slider-thumb:active{box-shadow:none}.slider-container--disabled .slider-track .slider-progress{background-color:#a5a5b2;cursor:default}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: TooltipDirective, selector: "[sTooltip]", inputs: ["sTooltip", "tooltipPosition", "showDelay", "displayTime", "tooltipEvent", "escape", "visible", "mobileBehavior", "focusedInputRef", "checkTruncatedText"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }] });
|
|
617
622
|
}
|
|
618
623
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SliderComponent, decorators: [{
|
|
619
624
|
type: Component,
|
|
@@ -623,7 +628,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
623
628
|
useExisting: forwardRef(() => SliderComponent),
|
|
624
629
|
multi: true,
|
|
625
630
|
},
|
|
626
|
-
], standalone: true, imports: [NgClass, TooltipDirective], template: "<div\r\n class=\"slider-container\"\r\n [ngClass]=\"{ 'slider-container--disabled': disabled }\"\r\n
|
|
631
|
+
], standalone: true, imports: [NgClass, TooltipDirective, TranslateModule], template: "<div\r\n class=\"slider-container\"\r\n [ngClass]=\"{ 'slider-container--disabled': disabled }\"\r\n (click)=\"onTrackClick($event)\"\r\n>\r\n <div\r\n #track\r\n class=\"slider-track\"\r\n [ngClass]=\"{\r\n 'slider-track--hidden-thumb': hiddenThumb,\r\n 'slider-track--moving-multiple-thumbs': movingProgressBar,\r\n }\"\r\n >\r\n <div\r\n class=\"slider-progress\"\r\n (mousedown)=\"onProgressMouseDown($event)\"\r\n [style.left.%]=\"progressLeft\"\r\n [style.width]=\"progressWidth\"\r\n ></div>\r\n @if (multiple) {\r\n <div\r\n class=\"slider-thumb\"\r\n role=\"slider\"\r\n [sTooltip]=\"tooltipStartText\"\r\n [showDelay]=\"0\"\r\n [tabindex]=\"disabled ? -1 : tabindex\"\r\n [attr.aria-valuenow]=\"getThumbValue('start')\"\r\n [attr.aria-valuemin]=\"getThumbMin('start')\"\r\n [attr.aria-valuemax]=\"getThumbMax('start')\"\r\n [attr.aria-label]=\"'platform.angular_components.slider_min_value' | translate\"\r\n [attr.aria-disabled]=\"disabled || null\"\r\n (mousedown)=\"onMouseDown($event, 'start')\"\r\n (keydown)=\"onThumbKeydown($event, 'start')\"\r\n [style.left.%]=\"startValue\"\r\n ></div>\r\n }\r\n <div\r\n [sTooltip]=\"tooltipEndText\"\r\n class=\"slider-thumb\"\r\n role=\"slider\"\r\n [showDelay]=\"0\"\r\n [tabindex]=\"disabled ? -1 : tabindex\"\r\n [attr.aria-valuenow]=\"getThumbValue('end')\"\r\n [attr.aria-valuemin]=\"getThumbMin('end')\"\r\n [attr.aria-valuemax]=\"getThumbMax('end')\"\r\n [attr.aria-label]=\"\r\n (multiple\r\n ? 'platform.angular_components.slider_max_value'\r\n : 'platform.angular_components.slider_value') | translate\r\n \"\r\n [attr.aria-disabled]=\"disabled || null\"\r\n (mousedown)=\"onMouseDown($event, 'end')\"\r\n (keydown)=\"onThumbKeydown($event, 'end')\"\r\n [style.left.%]=\"endValue\"\r\n ></div>\r\n </div>\r\n <div class=\"footer\">\r\n <span>{{ minValueLabel || min }}</span>\r\n <span>{{ maxValueLabel || max }}</span>\r\n </div>\r\n</div>\r\n", styles: [".slider-container{height:20px;padding:16px 0 40px;position:relative;-webkit-user-select:none;user-select:none;width:100%}.slider-container .slider-track{background-color:#ddd;border-radius:3px;cursor:pointer;height:6px;position:relative;width:100%}.slider-container .slider-track .slider-progress{background-color:#428bca;border-radius:3px;cursor:pointer;height:100%;left:0;position:absolute;top:0;width:0}.slider-container .slider-track .slider-thumb{background-color:#fff;border:2px solid #428bca;border-radius:50%;cursor:pointer;height:20px;position:absolute;transform:translateY(-50%);top:50%;width:20px}.slider-container .slider-track .slider-thumb:active{box-shadow:0 0 0 4px #428bca33}.slider-container .slider-track .slider-thumb:focus-visible{outline:2px solid var(--s-focus-ring-color);outline-offset:2px}.slider-container .slider-track--hidden-thumb:not(:hover) .slider-thumb{opacity:0}.slider-container .slider-track--moving-multiple-thumbs .slider-thumb{box-shadow:0 0 0 4px #428bca33}.slider-container .footer{color:#212533;display:flex;font-family:Open Sans,sans-serif;font-size:14px;justify-content:space-between;margin-top:8px}.slider-container--disabled .slider-track{cursor:default}.slider-container--disabled .slider-track .slider-thumb{border-color:#a5a5b2;cursor:default}.slider-container--disabled .slider-track .slider-thumb:active{box-shadow:none}.slider-container--disabled .slider-track .slider-progress{background-color:#a5a5b2;cursor:default}\n"] }]
|
|
627
632
|
}], propDecorators: { track: [{
|
|
628
633
|
type: ViewChild,
|
|
629
634
|
args: ['track']
|
|
@@ -649,9 +654,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
649
654
|
type: Input
|
|
650
655
|
}], tabindex: [{
|
|
651
656
|
type: Input
|
|
652
|
-
}], onKeydown: [{
|
|
653
|
-
type: HostListener,
|
|
654
|
-
args: ['document:keydown', ['$event']]
|
|
655
657
|
}] } });
|
|
656
658
|
/**
|
|
657
659
|
* Calculates a new range based on the old range and the positions clicked and finalized.
|
|
@@ -679,4 +681,4 @@ const getMidpoint = (start, end) => {
|
|
|
679
681
|
const getDifference = (end, start) => {
|
|
680
682
|
return Math.abs(end - start);
|
|
681
683
|
};
|
|
682
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItY29tcG9uZW50cy9zbGlkZXIvc3JjL2xpYi9zbGlkZXIvc2xpZGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItY29tcG9uZW50cy9zbGlkZXIvc3JjL2xpYi9zbGlkZXIvc2xpZGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHSCxTQUFTLEVBRVQsWUFBWSxFQUNaLFVBQVUsRUFDVixZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sRUFFTixTQUFTLEdBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQzs7QUFFOUU7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7QUFlSCxNQUFNLE9BQU8sZUFBZTtJQUNQLGVBQWUsR0FBRyxHQUFHLENBQUM7SUFDdEIsZUFBZSxHQUFHLENBQUMsQ0FBQztJQUU5QixLQUFLLENBQWM7SUFFMUI7Ozs7O09BS0c7SUFFSSxRQUFRLEdBQUcsS0FBSyxDQUFDO0lBRXhCOzs7OztPQUtHO0lBRUksS0FBSyxHQUE4QixDQUFDLENBQUM7SUFFNUM7OztPQUdHO0lBRUksV0FBVyxHQUFHLElBQUksWUFBWSxFQUE2QixDQUFDO0lBRW5FOzs7O09BSUc7SUFFSSxJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBRWhCOzs7OztPQUtHO0lBRUksV0FBVyxHQUFHLEtBQUssQ0FBQztJQUUzQjs7OztPQUlHO0lBRUksUUFBUSxHQUFHLEtBQUssQ0FBQztJQUV4Qjs7OztPQUlHO0lBRUksR0FBRyxHQUFHLElBQUks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OlsiaW1wb3J0IHtcclxuICAgIEFmdGVyVmlld0luaXQsXHJcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIENvbXBvbmVudCxcclxuICAgIEVsZW1lbnRSZWYsXHJcbiAgICBFdmVudEVtaXR0ZXIsXHJcbiAgICBmb3J3YXJkUmVmLFxyXG4gICAgSG9zdExpc3RlbmVyLFxyXG4gICAgSW5wdXQsXHJcbiAgICBPbkNoYW5nZXMsXHJcbiAgICBPbkluaXQsXHJcbiAgICBPdXRwdXQsXHJcbiAgICBTaW1wbGVDaGFuZ2VzLFxyXG4gICAgVmlld0NoaWxkLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE5nQ2xhc3MgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBUb29sdGlwRGlyZWN0aXZlIH0gZnJvbSAnQHNlbmlvcnNpc3RlbWFzL2FuZ3VsYXItY29tcG9uZW50cy90b29sdGlwJztcclxuXHJcbi8qKlxyXG4gKiBAZGVzY3JpcHRpb24gQ29tcG9uZW50ZSBkZSBjb250cm9sZSBkZXNsaXphbnRlIChzbGlkZXIpIHBhcmEgc2VsZcOnw6NvIGRlIHZhbG9yZXMgbnVtw6lyaWNvc1xyXG4gKiBkZW50cm8gZGUgdW0gaW50ZXJ2YWxvIGRlZmluaWRvLiBTdXBvcnRhIG1vZG8gc2ltcGxlcyAodW0gdmFsb3IpIGUgbW9kbyBkZSBpbnRlcnZhbG9cclxuICogKGRvaXMgdmFsb3JlczogaW7DrWNpbyBlIGZpbSkuIEltcGxlbWVudGEge0BsaW5rIENvbnRyb2xWYWx1ZUFjY2Vzc29yfSBwYXJhIGludGVncmHDp8Ojb1xyXG4gKiBjb20gUmVhY3RpdmUgRm9ybXMgZSBUZW1wbGF0ZS1kcml2ZW4gRm9ybXMgZG8gQW5ndWxhci5cclxuICpcclxuICogQGV4YW1wbGVcclxuICogYGBgaHRtbFxyXG4gKiA8IS0tIFNsaWRlciBzaW1wbGVzIC0tPlxyXG4gKiA8cy1zbGlkZXIgZm9ybUNvbnRyb2xOYW1lPVwidm9sdW1lXCIgW21pbl09XCIwXCIgW21heF09XCIxMDBcIiBbc3RlcF09XCI1XCIgLz5cclxuICpcclxuICogPCEtLSBTbGlkZXIgZGUgaW50ZXJ2YWxvIC0tPlxyXG4gKiA8cy1zbGlkZXIgZm9ybUNvbnRyb2xOYW1lPVwiZmFpeGFcIiBbbXVsdGlwbGVdPVwidHJ1ZVwiIFttaW5dPVwiMFwiIFttYXhdPVwiMTAwMFwiIC8+XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBAY2F0ZWdvcnkgSW5wdXRzXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAncy1zbGlkZXInLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL3NsaWRlci5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9zbGlkZXIuY29tcG9uZW50LnNjc3MnXSxcclxuICAgIHByb3ZpZGVyczogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFNsaWRlckNvbXBvbmVudCksXHJcbiAgICAgICAgICAgIG11bHRpOiB0cnVlLFxyXG4gICAgICAgIH0sXHJcbiAgICBdLFxyXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICAgIGltcG9ydHM6IFtOZ0NsYXNzLCBUb29sdGlwRGlyZWN0aXZlXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFNsaWRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uQ2hhbmdlcyB7XHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IE1BWF9SQU5HRV9WQUxVRSA9IDEwMDtcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgTUlOX1JBTkdFX1ZBTFVFID0gMDtcclxuICAgIEBWaWV3Q2hpbGQoJ3RyYWNrJylcclxuICAgIHB1YmxpYyB0cmFjayE6IEVsZW1lbnRSZWY7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gSGFiaWxpdGEgbyBtb2RvIGRlIGludGVydmFsbywgcGVybWl0aW5kbyBzZWxlY2lvbmFyIHVtIHZhbG9yIG3DrW5pbW8gZSBtw6F4aW1vLlxyXG4gICAgICogUXVhbmRvIGB0cnVlYCwgbyB2YWxvciBkbyBjb21wb25lbnRlIMOpIHVtIGFycmF5IGBbaW5pY2lvLCBmaW1dYC5cclxuICAgICAqXHJcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIG11bHRpcGxlID0gZmFsc2U7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gVmFsb3IgYXR1YWwgZG8gc2xpZGVyLiBObyBtb2RvIHNpbXBsZXMgw6kgdW0gbsO6bWVybzsgbm8gbW9kbyBkZVxyXG4gICAgICogaW50ZXJ2YWxvIChgbXVsdGlwbGU6IHRydWVgKSDDqSB1bSBhcnJheSBgW2luaWNpbywgZmltXWAuXHJcbiAgICAgKlxyXG4gICAgICogQGRlZmF1bHQgMFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHZhbHVlOiBudW1iZXIgfCBbbnVtYmVyLCBudW1iZXJdID0gMDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBFbWl0aWRvIHNlbXByZSBxdWUgbyB2YWxvciBkbyBzbGlkZXIgw6kgYWx0ZXJhZG8gcGVsbyB1c3XDoXJpby5cclxuICAgICAqIEVtaXRlIG8gbm92byB2YWxvciAobsO6bWVybyBvdSBhcnJheSBkZSBkb2lzIG7Dum1lcm9zIG5vIG1vZG8gZGUgaW50ZXJ2YWxvKS5cclxuICAgICAqL1xyXG4gICAgQE91dHB1dCgpXHJcbiAgICBwdWJsaWMgdmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlciB8IFtudW1iZXIsIG51bWJlcl0+KCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gSW5jcmVtZW50byBhcGxpY2FkbyBhIGNhZGEgbW92aW1lbnRvIGRvIHRodW1iIGRvIHNsaWRlci5cclxuICAgICAqXHJcbiAgICAgKiBAZGVmYXVsdCAxXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgc3RlcCA9IDE7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gT2N1bHRhIHZpc3VhbG1lbnRlIG8gdGh1bWIgKGJvdMOjbyBhcnJhc3TDoXZlbCkgZG8gc2xpZGVyLlxyXG4gICAgICogw5p0aWwgcGFyYSB2aXN1YWxpemHDp8O1ZXMgb25kZSBhcGVuYXMgYSBmYWl4YSBkZSBwcm9ncmVzc28gZGV2ZSBzZXIgZXhpYmlkYS5cclxuICAgICAqXHJcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGhpZGRlblRodW1iID0gZmFsc2U7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gRGVzYWJpbGl0YSBhIGludGVyYcOnw6NvIGRvIHVzdcOhcmlvIGNvbSBvIHNsaWRlci5cclxuICAgICAqXHJcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGRpc2FibGVkID0gZmFsc2U7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gVmFsb3IgbcOtbmltbyBwZXJtaXRpZG8gbm8gc2xpZGVyLlxyXG4gICAgICpcclxuICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBtaW4gPSB0aGlzLk1JTl9SQU5HRV9WQUxVRTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBWYWxvciBtw6F4aW1vIHBlcm1pdGlkbyBubyBzbGlkZXIuXHJcbiAgICAgKlxyXG4gICAgICogQGRlZmF1bHQgMTAwXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgbWF4ID0gdGhpcy5NQVhfUkFOR0VfVkFMVUU7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gTGFiZWwgZXhpYmlkbyBhYmFpeG8gb3UgYW8gbGFkbyBkbyB2YWxvciBtw61uaW1vIGRvIHNsaWRlci5cclxuICAgICAqIMOadGlsIHBhcmEgaW5kaWNhciBzZW1hbnRpY2FtZW50ZSBvcyBleHRyZW1vcyBkbyBpbnRlcnZhbG8uXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgbWluVmFsdWVMYWJlbD86IHN0cmluZztcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBMYWJlbCBleGliaWRvIGFiYWl4byBvdSBhbyBsYWRvIGRvIHZhbG9yIG3DoXhpbW8gZG8gc2xpZGVyLlxyXG4gICAgICogw5p0aWwgcGFyYSBpbmRpY2FyIHNlbWFudGljYW1lbnRlIG9zIGV4dHJlbW9zIGRvIGludGVydmFsby5cclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBtYXhWYWx1ZUxhYmVsPzogc3RyaW5nO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIMONbmRpY2UgZGUgdGFidWxhw6fDo28gZG8gZWxlbWVudG8sIGNvbnRyb2xhbmRvIGEgb3JkZW0gZGUgZm9jbyB2aWEgdGVjbGFkby5cclxuICAgICAqXHJcbiAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgdGFiaW5kZXggPSAwO1xyXG5cclxuICAgIHB1YmxpYyBzdGFydFZhbHVlID0gMDtcclxuICAgIHB1YmxpYyBlbmRWYWx1ZSA9IDA7XHJcbiAgICBwdWJsaWMgbW92aW5nUHJvZ3Jlc3NCYXIgPSBmYWxzZTtcclxuICAgIHB1YmxpYyBwcm9ncmVzc0xlZnQgPSAwO1xyXG4gICAgcHVibGljIHByb2dyZXNzV2lkdGggPSAnJztcclxuXHJcbiAgICBwdWJsaWMgb25DaGFuZ2U6ICh2YWx1ZTogbnVtYmVyIHwgW251bWJlciwgbnVtYmVyXSkgPT4gdm9pZCA9ICgpID0+IHt9O1xyXG4gICAgcHVibGljIG9uVG91Y2hlZDogKHZhbHVlOiBudW1iZXIgfCBbbnVtYmVyLCBudW1iZXJdKSA9PiB2b2lkID0gKCkgPT4ge307XHJcblxyXG4gICAgcHJpdmF0ZSBkcmFnZ2luZ1RodW1iOiAnc3RhcnQnIHwgJ2VuZCcgfCBudWxsID0gbnVsbDtcclxuICAgIHByaXZhdGUgcHJvZ3Jlc3NCYXJFdmVudFBvc2l0aW9uU3RhcnQgPSAtMTtcclxuICAgIHByaXZhdGUgc3RhcnRWYWx1ZUJlZm9yZVByb2dyZXNzQmFyRXZlbnQgPSAtMTtcclxuICAgIHByaXZhdGUgcmFuZ2VCZXR3ZWVuRWxlbWVudHNCZWZvcmVQcm9ncmVzc0JhckV2ZW50ID0gLTE7XHJcbiAgICBwcml2YXRlIHRvdGFsUmFuZ2VCZWZvcmVQcm9ncmVzc0JhckV2ZW50ID0gLTE7XHJcbiAgICAvKipcclxuICAgICAqIE1hcCBvZiB2YWxpZCB2YWx1ZXMgZm9yIHZhbHVlcyBpbiByYW5nZS5cclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiB3aXRoIG1pbiA9IC0xMCBhbmQgbWF4ID0gMTAgd2lsbCBoYXZlIHRoaXMgbWFwLlxyXG4gICAgICoge1xyXG4gICAgICogICAgIC0xMDogeyAwIH0sXHJcbiAgICAgKiAgICAgLTk6IHsgMTAgfSxcclxuICAgICAqICAgICAgLi4uXHJcbiAgICAgKiAgICAgMTA6IHsgMTAgfVxyXG4gICAgICogfVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIG1hcFJhbmdlVmFsdWVzRm9yU2xpZGVyOiBNYXA8bnVtYmVyLCBudW1iZXI+ID0gbmV3IE1hcCgpO1xyXG4gICAgcHJpdmF0ZSBhY3RpdmVNb3VzZURvd24gPSBmYWxzZTtcclxuICAgIHByaXZhdGUgZm9jdXNBY3RpdmUgPSBmYWxzZTtcclxuXHJcbiAgICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zZXRVc2VyUmFuZ2VNYXBWYWx1ZXMoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGhhc0NoYW5nZXNPbk1pbiA9IGNoYW5nZXNbJ21pbiddICYmICFjaGFuZ2VzWydtaW4nXS5maXJzdENoYW5nZTtcclxuICAgICAgICBjb25zdCBoYXNDaGFuZ2VzT25NYXggPSBjaGFuZ2VzWydtYXgnXSAmJiAhY2hhbmdlc1snbWF4J10uZmlyc3RDaGFuZ2U7XHJcbiAgICAgICAgY29uc3QgaGFzQ2hhbmdlcyA9IGhhc0NoYW5nZXNPbk1pbiB8fCBoYXNDaGFuZ2VzT25NYXg7XHJcbiAgICAgICAgaWYgKGhhc0NoYW5nZXMpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRVc2VyUmFuZ2VNYXBWYWx1ZXMoKTtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFJhbmdlVmFsdWVzKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0UmFuZ2VWYWx1ZXMoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXlkb3duJywgWyckZXZlbnQnXSlcclxuICAgIHB1YmxpYyBvbktleWRvd24oJGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZm9jdXNBY3RpdmUgJiYgIXRoaXMuZGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgY29uc3QgaXNBcnJvd0tleUxlZnQgPSAkZXZlbnQua2V5ID09PSAnQXJyb3dMZWZ0JztcclxuICAgICAgICAgICAgY29uc3QgaXNBcnJvd0tleVJpZ2h0ID0gJGV2ZW50LmtleSA9PT0gJ0Fycm93UmlnaHQnO1xyXG4gICAgICAgICAgICBpZiAoaXNBcnJvd0tleUxlZnQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlQXJyb3dLZXlMZWZ0KCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNBcnJvd0tleVJpZ2h0KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUFycm93S2V5UmlnaHQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IHRvb2x0aXBTdGFydFRleHQoKSB7XHJcbiAgICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSkgPyB0aGlzLnZhbHVlWzBdPy50b1N0cmluZygpIDogdGhpcy52YWx1ZT8udG9TdHJpbmcoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IHRvb2x0aXBFbmRUZXh0KCkge1xyXG4gICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KHRoaXMudmFsdWUpID8gdGhpcy52YWx1ZVsxXT8udG9TdHJpbmcoKSA6IHRoaXMudmFsdWU/LnRvU3RyaW5nKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHdyaXRlVmFsdWUob2JqOiBudW1iZXIgfCBbbnVtYmVyLCBudW1iZXJdKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG9iajtcclxuICAgICAgICB0aGlzLnNldFJhbmdlVmFsdWVzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICh2YWx1ZTogbnVtYmVyIHwgW251bWJlciwgbnVtYmVyXSkgPT4gdm9pZCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25Gb2N1c0luKCkge1xyXG4gICAgICAgIHRoaXMuZm9jdXNBY3RpdmUgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvbkJsdXIoKSB7XHJcbiAgICAgICAgdGhpcy5mb2N1c0FjdGl2ZSA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvblRyYWNrQ2xpY2soZXZ0OiBNb3VzZUV2ZW50KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5tb3ZpbmdQcm9ncmVzc0JhciB8fCB0aGlzLmFjdGl2ZU1vdXNlRG93bikge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHRyYWNrQ2xpY2tQZXJjZW50YWdlID0gdGhpcy5nZXRQZXJjZW50YWdlQnlFdmVudChldnQpO1xyXG4gICAgICAgIGNvbnN0IHRyYWNrQ2xpY2tUb1VzZXJSYW5nZSA9IHRoaXMuZ2V0VmFsdWVGcm9tTWFwQnlWYWx1ZSh0cmFja0NsaWNrUGVyY2VudGFnZSk7XHJcbiAgICAgICAgY29uc3QgX3RyYWNrQ2xpY2tWYWxpZCA9IHRoaXMubmVlZFBhcnNlVmFsdWVzID8gdHJhY2tDbGlja1RvVXNlclJhbmdlIDogdHJhY2tDbGlja1BlcmNlbnRhZ2U7XHJcbiAgICAgICAgY29uc3QgX3NldEVuZFZhbHVlID0gKCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBfZW5kVmFsdWVVc2VyVmFsdWUgPSB0aGlzLmdldFZhbHVlRnJvbU1hcEJ5VmFsdWUodGhpcy5lbmRWYWx1ZSk7XHJcbiAgICAgICAgICAgIGNvbnN0IF9lbmRWYWx1ZSA9XHJcbiAgICAgICAgICAgICAgICAodGhpcy5uZWVkUGFyc2VWYWx1ZXNcclxuICAgICAgICAgICAgICAgICAgICA/IHRoaXMubWFwUmFuZ2VWYWx1ZXNGb3JTbGlkZXIuZ2V0KHRyYWNrQ2xpY2tUb1VzZXJSYW5nZSlcclxuICAgICAgICAgICAgICAgICAgICA6IHRyYWNrQ2xpY2tQZXJjZW50YWdlKSA/PyAwO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5uZWVkUGFyc2VWYWx1ZXMgJiYgX2VuZFZhbHVlVXNlclZhbHVlICE9PSB0cmFja0NsaWNrVG9Vc2VyUmFuZ2UpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZW5kVmFsdWUgPSBfZW5kVmFsdWU7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXMubmVlZFBhcnNlVmFsdWVzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVuZFZhbHVlID0gdHJhY2tDbGlja1BlcmNlbnRhZ2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBjb25zdCBfc2V0U3RhcnRWYWx1ZSA9ICgpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgX3N0YXJ0VmFsdWVVc2VyVmFsdWUgPSB0aGlzLmdldFZhbHVlRnJvbU1hcEJ5VmFsdWUodGhpcy5zdGFydFZhbHVlKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMubmVlZFBhcnNlVmFsdWVzICYmIF9zdGFydFZhbHVlVXNlclZhbHVlICE9PSB0cmFja0NsaWNrVG9Vc2VyUmFuZ2UpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IF9zdGFydFZhbHVlID1cclxuICAgICAgICAgICAgICAgICAgICAodGhpcy5uZWVkUGFyc2VWYWx1ZXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLm1hcFJhbmdlVmFsdWVzRm9yU2xpZGVyLmdldCh0cmFja0NsaWNrVG9Vc2VyUmFuZ2UpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdHJhY2tDbGlja1BlcmNlbnRhZ2UpID8/IDA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0VmFsdWUgPSBfc3RhcnRWYWx1ZTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICghdGhpcy5uZWVkUGFyc2VWYWx1ZXMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRWYWx1ZSA9IHRyYWNrQ2xpY2tQZXJjZW50YWdlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICBjb25zdCBbc3RhcnQsIGVuZF0gPSB0aGlzLnZhbHVlIGFzIFtudW1iZXIsIG51bWJlcl07XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbGlkU3RhcnQgPSAodGhpcy5uZWVkUGFyc2VWYWx1ZXMgPyB0aGlzLm1hcFJhbmdlVmFsdWVzRm9yU2xpZGVyLmdldChzdGFydCkgOiBzdGFydCkgPz8gMDtcclxuICAgICAgICAgICAgY29uc3QgdmFsaWRFbmQgPSAodGhpcy5uZWVkUGFyc2VWYWx1ZXMgPyB0aGlzLm1hcFJhbmdlVmFsdWVzRm9yU2xpZGVyLmdldChlbmQpIDogZW5kKSA/PyAwO1xyXG4gICAgICAgICAgICBjb25zdCBfdXBkYXRlU3RhcnQgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBfc2V0U3RhcnRWYWx1ZSgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZShbdHJhY2tDbGlja1BlcmNlbnRhZ2UsIHZhbGlkRW5kXSk7XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBjb25zdCBfdXBkYXRlRW5kID0gKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgX3NldEVuZFZhbHVlKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFZhbHVlKFt2YWxpZFN0YXJ0LCB0cmFja0NsaWNrUGVyY2VudGFnZV0pO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBjb25zdCBjbGlja1BlcmNlbnRhZ2VCZXR3ZWVuUmFuZ2UgPSBpc0luUmFuZ2UoX3RyYWNrQ2xpY2tWYWxpZCwgc3RhcnQsIGVuZCk7XHJcbiAgICAgICAgICAgIGlmIChfdHJhY2tDbGlja1ZhbGlkIDwgc3RhcnQpIHtcclxuICAgICAgICAgICAgICAgIF91cGRhdGVTdGFydCgpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKF90cmFja0NsaWNrVmFsaWQgPiBlbmQpIHtcclxuICAgICAgICAgICAgICAgIF91cGRhdGVFbmQoKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChjbGlja1BlcmNlbnRhZ2VCZXR3ZWVuUmFuZ2UpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG1pZGRsZSA9IChzdGFydCArIGVuZCkgLyAyO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdHJhY2tDbGlja1BlcmNlbnRhZ2VJc0V4YWN0aWRkbGUgPSBfdHJhY2tDbGlja1ZhbGlkID09PSBtaWRkbGU7XHJcbiAgICAgICAgICAgICAgICBpZiAodHJhY2tDbGlja1BlcmNlbnRhZ2VJc0V4YWN0aWRkbGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBfdXBkYXRlU3RhcnQoKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2V0U3RhcnQgPSBfdHJhY2tDbGlja1ZhbGlkIDwgbWlkZGxlO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNldEVuZCA9IF90cmFja0NsaWNrVmFsaWQgPiBtaWRkbGU7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNldFN0YXJ0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF91cGRhdGVTdGFydCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc2V0RW5kKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF91cGRhdGVFbmQoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNldFZhbHVlKHRyYWNrQ2xpY2tQZXJjZW50YWdlKTtcclxuICAgICAgICAgICAgX3NldEVuZFZhbHVlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNldFByb2dyZXNzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uUHJvZ3Jlc3NNb3VzZURvd24oZXZ0OiBNb3VzZUV2ZW50KSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLm11bHRpcGxlIHx8IHRoaXMuZGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnByb2dyZXNzQmFyRXZlbnRQb3NpdGlvblN0YXJ0ID0gdGhpcy5nZXRQZXJjZW50YWdlQnlFdmVudChldnQpO1xyXG4gICAgICAgIHRoaXMuc3RhcnRWYWx1ZUJlZm9yZVByb2dyZXNzQmFyRXZlbnQgPSB0aGlzLnN0YXJ0VmFsdWU7XHJcbiAgICAgICAgdGhpcy5yYW5nZUJldHdlZW5FbGVtZW50c0JlZm9yZVByb2dyZXNzQmFyRXZlbnQgPSB0aGlzLmVuZFZhbHVlIC0gdGhpcy5zdGFydFZhbHVlO1xyXG4gICAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IFtzdGFydCwgZW5kXSA9IHRoaXMudmFsdWUgYXMgW251bWJlciwgbnVtYmVyXTtcclxuICAgICAgICAgICAgdGhpcy50b3RhbFJhbmdlQmVmb3JlUHJvZ3Jlc3NCYXJFdmVudCA9IGVuZCAtIHN0YXJ0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLmhhbmRsZVByb2dyZXNzQmFyTW92ZSk7XHJcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIHRoaXMuaGFuZGxlUHJvZ3Jlc3NCYXJNb3ZlRW5kKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25Nb3VzZURvd24oXzogTW91c2VFdmVudCwgdGh1bWI6ICdzdGFydCcgfCAnZW5kJyk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkKSByZXR1cm47XHJcblxyXG4gICAgICAgIHRoaXMuZHJhZ2dpbmdUaHVtYiA9IHRodW1iO1xyXG4gICAgICAgIHRoaXMuYWN0aXZlTW91c2VEb3duID0gdHJ1ZTtcclxuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLm9uVGh1bWJNb3ZlKTtcclxuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgdGhpcy5vbk1vdXNlVXApO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc2V0UmFuZ2VWYWx1ZXMoKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgX3NldFN0YXJ0QW5kRW5kVmFsdWUgPSAoc3RhcnRWYWx1ZTogbnVtYmVyLCBlbmRWYWx1ZTogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhcnRWYWx1ZSA9IHRoaXMuZ2V0Q2xvc2VzdFZhbHVlRnJvbU1hcFNsaWRlcihzdGFydFZhbHVlKTtcclxuICAgICAgICAgICAgdGhpcy5lbmRWYWx1ZSA9IHRoaXMuZ2V0Q2xvc2VzdFZhbHVlRnJvbU1hcFNsaWRlcihlbmRWYWx1ZSk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAodGhpcy52YWx1ZSA9PT0gbnVsbCB8fCB0aGlzLnZhbHVlID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKSAmJiAhdGhpcy5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBtdXN0IHVzZSBcIm11bHRpcGxlXCIgd2l0aCB2YWx1ZSBhcyBhcnJheScpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSAmJiBBcnJheS5pc0FycmF5KHRoaXMudmFsdWUpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhcnRWYWx1ZSA9IHRoaXMudmFsdWVbMF07XHJcbiAgICAgICAgICAgIHRoaXMuZW5kVmFsdWUgPSB0aGlzLnZhbHVlWzFdO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoIXRoaXMubXVsdGlwbGUpIHtcclxuICAgICAgICAgICAgdGhpcy5zdGFydFZhbHVlID0gdGhpcy52YWx1ZSBhcyBudW1iZXI7XHJcbiAgICAgICAgICAgIHRoaXMuZW5kVmFsdWUgPSB0aGlzLnZhbHVlIGFzIG51bWJlcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgX3NldFN0YXJ0QW5kRW5kVmFsdWUodGhpcy5zdGFydFZhbHVlLCB0aGlzLmVuZFZhbHVlKTtcclxuICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICBsZXQgW19zdGFydFZhbHVlLCBfZW5kVmFsdWVdID0gdGhpcy52YWx1ZSBhcyBbbnVtYmVyLCBudW1iZXJdO1xyXG4gICAgICAgICAgICBjb25zdCBkaWZmZXJlbmNlID0gZ2V0RGlmZmVyZW5jZShfZW5kVmFsdWUsIF9zdGFydFZhbHVlKTtcclxuICAgICAgICAgICAgY29uc3QgZW5kVmFsdWVJc0dyZWF0aGVyVGhhbk1heCA9IF9lbmRWYWx1ZSA+IHRoaXMubWF4O1xyXG4gICAgICAgICAgICBjb25zdCBzdGFydFZhbHVlSXNMZXNzVGhhbk1pbiA9IF9zdGFydFZhbHVlIDwgdGhpcy5taW47XHJcbiAgICAgICAgICAgIGNvbnN0IG5lZWRVcGRhdGVWYWx1ZXMgPSBlbmRWYWx1ZUlzR3JlYXRoZXJUaGFuTWF4IHx8IHN0YXJ0VmFsdWVJc0xlc3NUaGFuTWluO1xyXG4gICAgICAgICAgICBpZiAoZW5kVmFsdWVJc0dyZWF0aGVyVGhhbk1heCkge1xyXG4gICAgICAgICAgICAgICAgX2VuZFZhbHVlID0gdGhpcy5tYXg7XHJcbiAgICAgICAgICAgICAgICBfc3RhcnRWYWx1ZSA9IF9lbmRWYWx1ZSAtIGRpZmZlcmVuY2U7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhcnRWYWx1ZUlzTGVzc1RoYW5NaW4pIHtcclxuICAgICAgICAgICAgICAgIF9zdGFydFZhbHVlID0gdGhpcy5taW47XHJcbiAgICAgICAgICAgICAgICBfZW5kVmFsdWUgPSBfc3RhcnRWYWx1ZSArIGRpZmZlcmVuY2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG5lZWRVcGRhdGVWYWx1ZXMpIHtcclxuICAgICAgICAgICAgICAgIF9zZXRTdGFydEFuZEVuZFZhbHVlKF9zdGFydFZhbHVlLCBfZW5kVmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZShbdGhpcy5zdGFydFZhbHVlLCB0aGlzLmVuZFZhbHVlXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBsZXQgX3ZhbHVlID0gdGhpcy52YWx1ZSBhcyBudW1iZXI7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlR3JlYXRoZXJUaGFuTWF4ID0gX3ZhbHVlID4gdGhpcy5tYXg7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlTGVzc1RoYW5NaW4gPSBfdmFsdWUgPCB0aGlzLm1pbjtcclxuICAgICAgICAgICAgY29uc3QgbmVlZFVwZGF0ZVZhbHVlID0gdmFsdWVHcmVhdGhlclRoYW5NYXggfHwgdmFsdWVMZXNzVGhhbk1pbjtcclxuICAgICAgICAgICAgaWYgKHZhbHVlR3JlYXRoZXJUaGFuTWF4KSB7XHJcbiAgICAgICAgICAgICAgICBfdmFsdWUgPSB0aGlzLm1heDtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZUxlc3NUaGFuTWluKSB7XHJcbiAgICAgICAgICAgICAgICBfdmFsdWUgPSB0aGlzLm1pbjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAobmVlZFVwZGF0ZVZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFZhbHVlKF92YWx1ZSwgZmFsc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2V0UHJvZ3Jlc3MoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG9uVGh1bWJNb3ZlID0gKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMubW92aW5nUHJvZ3Jlc3NCYXIgfHwgIXRoaXMuZHJhZ2dpbmdUaHVtYikgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgbmV3UG9zaXRpb24gPSB0aGlzLmdldFBlcmNlbnRhZ2VCeUV2ZW50KGV2ZW50KTtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICh0aGlzLm11bHRpcGxlICYmIHRoaXMuZHJhZ2dpbmdUaHVtYiA9PT0gJ3N0YXJ0JyAmJiBuZXdQb3NpdGlvbiA+IHRoaXMuZW5kVmFsdWUpIHx8XHJcbiAgICAgICAgICAgICh0aGlzLm11bHRpcGxlICYmIHRoaXMuZHJhZ2dpbmdUaHVtYiA9PT0gJ2VuZCcgJiYgbmV3UG9zaXRpb24gPCB0aGlzLnN0YXJ0VmFsdWUpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHBvc2l0aW9uSW5Vc2VyUmFuZ2UgPSB0aGlzLmdldFZhbHVlRnJvbU1hcEJ5VmFsdWUobmV3UG9zaXRpb24pO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5kcmFnZ2luZ1RodW1iID09PSAnc3RhcnQnKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0VmFsdWUgPVxyXG4gICAgICAgICAgICAgICAgICAgICh0aGlzLm5lZWRQYXJzZVZhbHVlcyA/IHRoaXMubWFwUmFuZ2VWYWx1ZXNGb3JTbGlkZXIuZ2V0KHBvc2l0aW9uSW5Vc2VyUmFuZ2UpIDogbmV3UG9zaXRpb24pID8/IDA7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5kcmFnZ2luZ1RodW1iID09PSAnZW5kJykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lbmRWYWx1ZSA9XHJcbiAgICAgICAgICAgICAgICAgICAgKHRoaXMubmVlZFBhcnNlVmFsdWVzID8gdGhpcy5tYXBSYW5nZVZhbHVlc0ZvclNsaWRlci5nZXQocG9zaXRpb25JblVzZXJSYW5nZSkgOiBuZXdQb3NpdGlvbikgPz8gMDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZShbdGhpcy5zdGFydFZhbHVlLCB0aGlzLmVuZFZhbHVlXSk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBbc3RhcnQsIGVuZF0gPSB0aGlzLnZhbHVlIGFzIFtudW1iZXIsIG51bWJlcl07XHJcblxyXG4gICAgICAgICAgICBpZiAoc3RhcnQgPT09IGVuZCAmJiB0aGlzLmRyYWdnaW5nVGh1bWIgPT09ICdzdGFydCcpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRWYWx1ZSA9IHRoaXMuZW5kVmFsdWU7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhcnQgPT09IGVuZCAmJiB0aGlzLmRyYWdnaW5nVGh1bWIgPT09ICdlbmQnKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVuZFZhbHVlID0gdGhpcy5zdGFydFZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3QgY3VycmVudFZhbHVlID0gdGhpcy52YWx1ZSBhcyBudW1iZXI7XHJcbiAgICAgICAgICAgIGNvbnN0IF92YWx1ZSA9IHRoaXMubmVlZFBhcnNlVmFsdWVzID8gcG9zaXRpb25JblVzZXJSYW5nZSA6IG5ld1Bvc2l0aW9uO1xyXG4gICAgICAgICAgICBjb25zdCBpc0F0U2FtZVZhbHVlID0gdGhpcy5uZWVkUGFyc2VWYWx1ZXMgPyBwb3NpdGlvbkluVXNlclJhbmdlID09PSB0aGlzLnZhbHVlIDogZmFsc2U7XHJcbiAgICAgICAgICAgIGNvbnN0IGhhc1N0ZXAgPSB0aGlzLnN0ZXAgIT09IDA7XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld1ZhbHVlSXNWYWxpZEJ5U3RlcCA9IGhhc1N0ZXBcclxuICAgICAgICAgICAgICAgID8gY3VycmVudFZhbHVlICsgdGhpcy5zdGVwID09PSBfdmFsdWUgfHwgY3VycmVudFZhbHVlIC0gdGhpcy5zdGVwID09PSBfdmFsdWVcclxuICAgICAgICAgICAgICAgIDogZmFsc2U7XHJcbiAgICAgICAgICAgIGlmIChpc0F0U2FtZVZhbHVlICYmICFuZXdWYWx1ZUlzVmFsaWRCeVN0ZXApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmVuZFZhbHVlID1cclxuICAgICAgICAgICAgICAgICh0aGlzLm5lZWRQYXJzZVZhbHVlcyA/IHRoaXMubWFwUmFuZ2VWYWx1ZXNGb3JTbGlkZXIuZ2V0KHBvc2l0aW9uSW5Vc2VyUmFuZ2UpIDogbmV3UG9zaXRpb24pID8/IDA7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhcnRWYWx1ZSA9IHRoaXMuZW5kVmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0VmFsdWUodGhpcy5lbmRWYWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2V0UHJvZ3Jlc3MoKTtcclxuICAgIH07XHJcblxyXG4gICAgcHJpdmF0ZSBvbk1vdXNlVXAgPSAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5kcmFnZ2luZ1RodW1iID0gbnVsbDtcclxuICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLm9uVGh1bWJNb3ZlKTtcclxuICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgdGhpcy5vbk1vdXNlVXApO1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmFjdGl2ZU1vdXNlRG93biA9IGZhbHNlO1xyXG4gICAgICAgIH0sIDE1MCk7XHJcbiAgICB9O1xyXG5cclxuICAgIHByaXZhdGUgaGFuZGxlUHJvZ3Jlc3NCYXJNb3ZlID0gKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XHJcbiAgICAgICAgdGhpcy5tb3ZpbmdQcm9ncmVzc0JhciA9IHRydWU7XHJcbiAgICAgICAgY29uc3QgbmV3Q2VudGVyID0gdGhpcy5nZXRQZXJjZW50YWdlQnlFdmVudChldmVudCk7XHJcbiAgICAgICAgY29uc3Qgc3RhcnRQb3NpdGlvbkJlZm9yZUV2ZW50ID0gdGhpcy5wcm9ncmVzc0JhckV2ZW50UG9zaXRpb25TdGFydDtcclxuICAgICAgICBjb25zdCBzdGFydFZhbHVlQmVmb3JlRXZlbnQgPSB0aGlzLnN0YXJ0VmFsdWVCZWZvcmVQcm9ncmVzc0JhckV2ZW50O1xyXG4gICAgICAgIGNvbnN0IHJhbmdlID0gdGhpcy5yYW5nZUJldHdlZW5FbGVtZW50c0JlZm9yZVByb2dyZXNzQmFyRXZlbnQ7XHJcbiAgICAgICAgbGV0IHsgbmV3U3RhcnQsIG5ld0VuZCB9ID0gY2FsY3VsYXRlTmV3UmFuZ2UoXHJcbiAgICAgICAgICAgIHN0YXJ0VmFsdWVCZWZvcmVFdmVudCxcclxuICAgICAgICAgICAgc3RhcnRWYWx1ZUJlZm9yZUV2ZW50ICsgcmFuZ2UsXHJcbiAgICAgICAgICAgIHN0YXJ0UG9zaXRpb25CZWZvcmVFdmVudCxcclxuICAgICAgICAgICAgbmV3Q2VudGVyLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKG5ld1N0YXJ0IDwgdGhpcy5NSU5fUkFOR0VfVkFMVUUgfHwgbmV3RW5kID4gdGhpcy5NQVhfUkFOR0VfVkFMVUUpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5uZWVkUGFyc2VWYWx1ZXMpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnRWYWx1ZUJlZm9yZUV2ZW50VXNlclJhbmdlID0gdGhpcy5nZXRWYWx1ZUZyb21NYXBCeVZhbHVlKHN0YXJ0VmFsdWVCZWZvcmVFdmVudCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0UG9zaXRpb25CZWZvcmVFdmVudFVzZXJSYW5nZSA9IHRoaXMuZ2V0VmFsdWVGcm9tTWFwQnlWYWx1ZShzdGFydFBvc2l0aW9uQmVmb3JlRXZlbnQpO1xyXG4gICAgICAgICAgICBjb25zdCBjZW50ZXJVc2VyUmFuZ2UgPSB0aGlzLmdldFZhbHVlRnJvbU1hcEJ5VmFsdWUobmV3Q2VudGVyKTtcclxuICAgICAgICAgICAgY29uc3QgdmFsdWVSYW5nZSA9IHRoaXMudG90YWxSYW5nZUJlZm9yZVByb2dyZXNzQmFyRXZlbnQ7XHJcbiAgICAgICAgICAgIGxldCB7IG5ld1N0YXJ0LCBuZXdFbmQgfSA9IGNhbGN1bGF0ZU5ld1JhbmdlKFxyXG4gICAgICAgICAgICAgICAgc3RhcnRWYWx1ZUJlZm9yZUV2ZW50VXNlclJhbmdlLFxyXG4gICAgICAgICAgICAgICAgc3RhcnRWYWx1ZUJlZm9yZUV2ZW50VXNlclJhbmdlICsgdmFsdWVSYW5nZSxcclxuICAgICAgICAgICAgICAgIHN0YXJ0UG9zaXRpb25CZWZvcmVFdmVudFVzZXJSYW5nZSxcclxuICAgICAgICAgICAgICAgIGNlbnRlclVzZXJSYW5nZSxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgaWYgKG5ld1N0YXJ0IDwgdGhpcy5taW4gfHwgbmV3RW5kID4gdGhpcy5tYXgpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnN0YXJ0VmFsdWUgPSB0aGlzLm1hcFJhbmdlVmFsdWVzRm9yU2xpZGVyLmdldChuZXdTdGFydCkgPz8gMDtcclxuICAgICAgICAgICAgdGhpcy5lbmRWYWx1ZSA9IHRoaXMubWFwUmFuZ2VWYWx1ZXNGb3JTbGlkZXIuZ2V0KG5ld0VuZCkgPz8gMDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnN0YXJ0VmFsdWUgPSBuZXdTdGFydDtcclxuICAgICAgICAgICAgdGhpcy5lbmRWYWx1ZSA9IG5ld0VuZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZXRWYWx1ZShbdGhpcy5zdGFydFZhbHVlLCB0aGlzLmVuZFZhbHVlXSk7XHJcbiAgICAgICAgdGhpcy5zZXRQcm9ncmVzcygpO1xyXG4gICAgfTtcclxuXHJcbiAgICBwcml2YXRlIGhhbmRsZVByb2dyZXNzQmFyTW92ZUVuZCA9ICgpID0+IHtcclxuICAgICAgICB0aGlzLnByb2dyZXNzQmFyRXZlbnRQb3NpdGlvblN0YXJ0ID0gLTE7XHJcbiAgICAgICAgdGhpcy5zdGFydFZhbHVlQmVmb3JlUHJvZ3Jlc3NCYXJFdmVudCA9IC0xO1xyXG4gICAgICAgIHRoaXMucmFuZ2VCZXR3ZWVuRWxlbWVudHNCZWZvcmVQcm9ncmVzc0JhckV2ZW50ID0gLTE7XHJcbiAgICAgICAgdGhpcy50b3RhbFJhbmdlQmVmb3JlUHJvZ3Jlc3NCYXJFdmVudCA9IC0xO1xyXG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuaGFuZGxlUHJvZ3Jlc3NCYXJNb3ZlKTtcclxuICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgdGhpcy5oYW5kbGVQcm9ncmVzc0Jhck1vdmVFbmQpO1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLm1vdmluZ1Byb2dyZXNzQmFyID0gZmFsc2U7XHJcbiAgICAgICAgfSwgMTUwKTtcclxuICAgIH07XHJcblxyXG4gICAgcHJpdmF0ZSBzZXRQcm9ncmVzcygpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICB0aGlzLnByb2dyZXNzTGVmdCA9IHRoaXMuc3RhcnRWYWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5wcm9ncmVzc1dpZHRoID0gYGNhbGMoJHt0aGlzLmVuZFZhbHVlIC0gdGhpcy5zdGFydFZhbHVlfSUgKyAxMHB4KWA7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5wcm9ncmVzc0xlZnQgPSAwO1xyXG4gICAgICAgICAgICB0aGlzLnByb2dyZXNzV2lkdGggPSBgY2FsYygke3RoaXMuZW5kVmFsdWV9JSArIDEwcHgpYDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgdGhlIHBlcmNlbnRhZ2Ugb2YgYSBtb3VzZSBldmVudCBmcm9tIHRoZSB0cmFjaydzIGxlZnQgZWRnZVxyXG4gICAgICogQHBhcmFtIG1vdXNlRXZlbnQgbW91c2UgZXZlbnRcclxuICAgICAqIEByZXR1cm5zIHBlcmNlbnRhZ2UgZnJvbSB0aGUgbGVmdCBlZGdlXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZ2V0UGVyY2VudGFnZUJ5RXZlbnQobW91c2VFdmVudDogTW91c2VFdmVudCB8IFBvaW50ZXJFdmVudCk6IG51bWJlciB7XHJcbiAgICAgICAgY29uc3QgdHJhY2tSZWN0ID0gdGhpcy50cmFjay5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgICAgIGxldCBuZXdMZWZ0ID0gTWF0aC5yb3VuZCgoKG1vdXNlRXZlbnQuY2xpZW50WCAtIHRyYWNrUmVjdC5sZWZ0KSAvIHRyYWNrUmVjdC53aWR0aCkgKiB0aGlzLk1BWF9SQU5HRV9WQUxVRSk7XHJcbiAgICAgICAgbmV3TGVmdCA9IE1hdGgubWF4KDAsIE1hdGgubWluKG5ld0xlZnQsIHRoaXMuTUFYX1JBTkdFX1ZBTFVFKSk7XHJcbiAgICAgICAgcmV0dXJuIG5ld0xlZnQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzZXRWYWx1ZSh2YWx1ZTogbnVtYmVyIHwgW251bWJlciwgbnVtYmVyXSwgcGFyc2UgPSB0cnVlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMubmVlZFBhcnNlVmFsdWVzICYmIHBhcnNlKSB7XHJcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5tYXAoKHgpID0+IHRoaXMuZ2V0VmFsdWVGcm9tTWFwQnlWYWx1ZSh4KSkgYXMgW251bWJlciwgbnVtYmVyXTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHZhbHVlID0gdGhpcy5nZXRWYWx1ZUZyb21NYXBCeVZhbHVlKHZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHZhbHVlKTtcclxuICAgICAgICB0aGlzLndyaXRlVmFsdWUodGhpcy52YWx1ZSk7XHJcbiAgICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLnZhbHVlKTtcclxuICAgICAgICB0aGlzLm9uVG91Y2hlZCh0aGlzLnZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNldFVzZXJSYW5nZU1hcFZhbHVlcygpIHtcclxuICAgICAgICBjb25zdCBzdGFydCA9IHRoaXMubWluO1xyXG4gICAgICAgIGNvbnN0IGVuZCA9IHRoaXMubWF4O1xyXG4gICAgICAgIGlmIChzdGFydCA+IGVuZCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ01heCB2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBtaW4gdmFsdWUnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5tYXBSYW5nZVZhbHVlc0ZvclNsaWRlci5jbGVhcigpO1xyXG4gICAgICAgIGNvbnN0IHJhbmdlID0gZW5kIC0gc3RhcnQ7XHJcbiAgICAgICAgY29uc3QgZGVjaW1hbFBsYWNlcyA9IDI7XHJcbiAgICAgICAgY29uc3Qgc3RlcENvdW50ID0gTWF0aC5mbG9vcihyYW5nZSAvIHRoaXMuc3RlcCk7XHJcbiAgICAgICAgY29uc3QgdmFsdWVzOiBudW1iZXJbXSA9IFtdO1xyXG4gICAgICAgIGZvciAobGV0IHZhbHVlID0gc3RhcnQ7IHZhbHVlIDw9IGVuZDsgdmFsdWUgKz0gdGhpcy5zdGVwKSB7XHJcbiAgICAgICAgICAgIHZhbHVlcy5wdXNoKHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHZhbHVlc1t2YWx1ZXMubGVuZ3RoIC0gMV0gIT09IGVuZCkge1xyXG4gICAgICAgICAgICB2YWx1ZXMucHVzaChlbmQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBtYXBwZWRWYWx1ZXMgPSB2YWx1ZXMubWFwKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgbWFwcGVkID0gKCh2YWx1ZSAtIHN0YXJ0KSAvIHJhbmdlKSAqIHRoaXMuTUFYX1JBTkdFX1ZBTFVFO1xyXG4gICAgICAgICAgICByZXR1cm4gcGFyc2VGbG9hdChtYXBwZWQudG9GaXhlZChkZWNpbWFsUGxhY2VzKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgbWFwcGVkVmFsdWVzWzBdID0gMDtcclxuICAgICAgICBtYXBwZWRWYWx1ZXNbbWFwcGVkVmFsdWVzLmxlbmd0aCAtIDFdID0gdGhpcy5NQVhfUkFOR0VfVkFMVUU7XHJcbiAgICAgICAgY29uc3QgZXJyb3IgPSB0aGlzLk1BWF9SQU5HRV9WQUxVRSAtIG1hcHBlZFZhbHVlc1ttYXBwZWRWYWx1ZXMubGVuZ3RoIC0gMV07XHJcbiAgICAgICAgY29uc3QgZXJyb3JQZXJTdGVwID0gZXJyb3IgLyBzdGVwQ291bnQ7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBtYXBwZWRWYWx1ZXMubGVuZ3RoIC0gMTsgaSsrKSB7XHJcbiAgICAgICAgICAgIG1hcHBlZFZhbHVlc1tpXSArPSBlcnJvclBlclN0ZXA7XHJcbiAgICAgICAgICAgIG1hcHBlZFZhbHVlc1tpXSA9IHBhcnNlRmxvYXQobWFwcGVkVmFsdWVzW2ldLnRvRml4ZWQoZGVjaW1hbFBsYWNlcykpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YWx1ZXMuZm9yRWFjaCgodmFsdWUsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubWFwUmFuZ2VWYWx1ZXNGb3JTbGlkZXIuc2V0KHZhbHVlLCBtYXBwZWRWYWx1ZXNbaW5kZXhdKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIHVzZXIgdmFsdWUgZnJvbSB0aGUgZ2l2ZW4gc2xpZGVyIHZhbHVlIGJ5IHVzaW5nIHRoZSBtYXAgb2YgcmFuZ2UgdmFsdWVzLlxyXG4gICAgICogQGV4YW1wbGVcclxuICAgICAqIElmIHRoZSBtYXAgaXMgMDogeyAwIH0sIDE6IHsgMTAgfSwgMjogeyAzMCB9LCAzOiB7IDQwIH0sIDQ6IHsgNTAgfVxyXG4gICAgICogYW5kIHRoZSBzbGlkZXJWYWx1ZSBpcyAzNywgdGhlIGZ1bmN0aW9uIHJldHVybnMgM1xyXG4gICAgICogb3IgdGhlIHNsaWRlciB2YWx1ZSBpcyA0MCwgdGhlIGZ1bmN0aW9uIHJldHVybnMgNFxyXG4gICAgICogQHBhcmFtIHNsaWRlclZhbHVlIHRoZSB2YWx1ZSBvZiB0aGUgc2xpZGVyICh2YWx1ZXMgb25seSBiZXR3ZWVuIHJhbmdlIE1JTiBhbmQgTUFYKVxyXG4gICAgICogQHJldHVybnMgdGhlIHVzZXIgdmFsdWUgZnJvbSB0aGUgZ2l2ZW4gc2xpZGVyIHZhbHVlXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZ2V0VmFsdWVGcm9tTWFwQnlWYWx1ZShzbGlkZXJWYWx1ZTogbnVtYmVyKSB7XHJcbiAgICAgICAgY29uc3QgbWFwVG9BcnJheSA9IEFycmF5LmZyb20odGhpcy5tYXBSYW5nZVZhbHVlc0ZvclNsaWRlcikubWFwKChbdmFsdWUsIG1hcHBlZF0pID0+ICh7IHZhbHVlLCBtYXBwZWQgfSkpO1xyXG4gICAgICAgIGNvbnN0IGV4YWN0VmFsdWUgPSBtYXBUb0FycmF5LmZpbmQoKHgpID0+IHgubWFwcGVkID09IHNsaWRlclZhbHVlKTtcclxuICAgICAgICBjb25zdCBjbG9zZXN0ID0gbWFwVG9BcnJheS5yZWR1Y2UoKHByZXYsIGN1cnIpID0+XHJcbiAgICAgICAgICAgIE1hdGguYWJzKGN1cnIubWFwcGVkIC0gc2xpZGVyVmFsdWUpIDwgTWF0aC5hYnMocHJldi5tYXBwZWQgLSBzbGlkZXJWYWx1ZSkgPyBjdXJyIDogcHJldixcclxuICAgICAgICApO1xyXG4gICAgICAgIHJldHVybiBleGFjdFZhbHVlID8gZXhhY3RWYWx1ZS52YWx1ZSA6IGNsb3Nlc3QudmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXRyaWV2ZXMgdGhlIGtleSBmcm9tIHRoZSBtYXAgdGhhdCBpcyBjbG9zZXN0IHRvIHRoZSBnaXZlbiBzbGlkZXIgdmFsdWUuXHJcbiAgICAgKiBAcGFyYW0gdXNlclZhbHVlIC0gVGhlIHZhbHVlIHRvIGZpbmQgdGhlIGNsb3Nlc3Qga2V5IGZvci4gKHZhbHVlcyBvbmx5IGJldHdlZW4gMCAtIDEwMClcclxuICAgICAqIEByZXR1cm5zIFRoZSBrZXkgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgY2xvc2VzdCBtYXBwZWQgdmFsdWUuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZ2V0Q2xvc2VzdFZhbHVlRnJvbU1hcFNsaWRlcih1c2VyVmFsdWU6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICAgICAgY29uc3QgbWFwVG9BcnJheSA9IEFycmF5LmZyb20odGhpcy5tYXBSYW5nZVZhbHVlc0ZvclNsaWRlcikubWFwKChbdmFsdWUsIG1hcHBlZF0pID0+ICh7IHZhbHVlLCBtYXBwZWQgfSkpO1xyXG4gICAgICAgIGlmICh1c2VyVmFsdWUgPj0gdGhpcy5tYXgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG1hcFRvQXJyYXlbbWFwVG9BcnJheS5sZW5ndGggLSAxXS5tYXBwZWQ7XHJcbiAgICAgICAgfSBlbHNlIGlmICh1c2VyVmFsdWUgPD0gdGhpcy5taW4pIHtcclxuICAgICAgICAgICAgcmV0dXJuIG1hcFRvQXJyYXlbMF0ubWFwcGVkO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBleGFjdFZhbHVlID0gbWFwVG9BcnJheS5maW5kKCh4KSA9PiB4LnZhbHVlID09IHVzZXJWYWx1ZSk7XHJcbiAgICAgICAgY29uc3QgY2xvc2VzdFZhbHVlID0gbWFwVG9BcnJheS5yZWR1Y2UoKHByZXYsIGN1cnIpID0+XHJcbiAgICAgICAgICAgIE1hdGguYWJzKGN1cnIudmFsdWUgLSB1c2VyVmFsdWUpIDwgTWF0aC5hYnMocHJldi52YWx1ZSAtIHVzZXJWYWx1ZSkgPyBjdXJyIDogcHJldixcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IGl0ZW0gPSBleGFjdFZhbHVlIHx8IGNsb3Nlc3RWYWx1ZTtcclxuICAgICAgICBjb25zdCBpc0ZpcnN0SXRlbSA9IG1hcFRvQXJyYXlbMF0gPT09IGl0ZW07XHJcbiAgICAgICAgY29uc3QgaXNMYXN0SXRlbSA9IG1hcFRvQXJyYXlbbWFwVG9BcnJheS5sZW5ndGggLSAxXSA9PT0gaXRlbTtcclxuICAgICAgICBpZiAoaXNGaXJzdEl0ZW0gJiYgdXNlclZhbHVlID4gdGhpcy5taW4pIHtcclxuICAgICAgICAgICAgcmV0dXJuIGdldE1pZHBvaW50KGl0ZW0ubWFwcGVkLCBtYXBUb0FycmF5WzFdLm1hcHBlZCk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChpc0xhc3RJdGVtICYmIHVzZXJWYWx1ZSA8IHRoaXMubWF4KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBnZXRNaWRwb2ludChpdGVtLm1hcHBlZCwgbWFwVG9BcnJheVttYXBUb0FycmF5Lmxlbmd0aCAtIDJdLm1hcHBlZCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIGl0ZW0ubWFwcGVkO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGhhbmRsZUFycm93S2V5TGVmdCgpIHtcclxuICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICB0aGlzLl9pbmNyZW1lbnRPckRlY3JlbWVudFN0YXJ0QW5kRW5kVmFsdWUoZmFsc2UpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2luY3JlbWVudE9yRGVjcmVtZW50RW5kVmFsdWUoZmFsc2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNldFByb2dyZXNzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBoYW5kbGVBcnJvd0tleVJpZ2h0KCkge1xyXG4gICAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2luY3JlbWVudE9yRGVjcmVtZW50U3RhcnRBbmRFbmRWYWx1ZSh0cnVlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLl9pbmNyZW1lbnRPckRlY3JlbWVudEVuZFZhbHVlKHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNldFByb2dyZXNzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfaW5jcmVtZW50T3JEZWNyZW1lbnRTdGFydEFuZEVuZFZhbHVlKGluY3JlbWVudDogYm9vbGVhbikge1xyXG4gICAgICAgIGxldCBbc3RhcnQsIGVuZF0gPSB0aGlzLnZhbHVlIGFzIFtudW1iZXIsIG51bWJlcl07XHJcbiAgICAgICAgY29uc3QgZGlmZmVyZW5jZSA9IGdldERpZmZlcmVuY2UoZW5kLCBzdGFydCk7XHJcbiAgICAgICAgaWYgKGluY3JlbWVudCkge1xyXG4gICAgICAgICAgICBzdGFydCArPSB0aGlzLnN0ZXA7XHJcbiAgICAgICAgICAgIGVuZCArPSB0aGlzLnN0ZXA7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc3RhcnQgLT0gdGhpcy5zdGVwO1xyXG4gICAgICAgICAgICBlbmQgLT0gdGhpcy5zdGVwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBzdGFydExlc3NUaGFuTWluID0gc3RhcnQgPCB0aGlzLm1pbjtcclxuICAgICAgICBjb25zdCBlbmRHcmVhdGVyVGhhbk1heCA9IGVuZCA+IHRoaXMubWF4O1xyXG4gICAgICAgIGlmIChzdGFydExlc3NUaGFuTWluIHx8IGVuZEdyZWF0ZXJUaGFuTWF4KSB7XHJcbiAgICAgICAgICAgIGlmIChzdGFydExlc3NUaGFuTWluKSB7XHJcbiAgICAgICAgICAgICAgICBzdGFydCA9IHRoaXMubWluO1xyXG4gICAgICAgICAgICAgICAgZW5kID0gc3RhcnQgKyBkaWZmZXJlbmNlO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGVuZEdyZWF0ZXJUaGFuTWF4KSB7XHJcbiAgICAgICAgICAgICAgICBlbmQgPSB0aGlzLm1heDtcclxuICAgICAgICAgICAgICAgIHN0YXJ0ID0gZW5kIC0gZGlmZmVyZW5jZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc3RhcnQgPCB0aGlzLm1pbiB8fCBlbmQgPiB0aGlzLm1heCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2V0VmFsdWUoW3N0YXJ0LCBlbmRdLCBmYWxzZSk7XHJcbiAgICAgICAgaWYgKHRoaXMubmVlZFBhcnNlVmFsdWVzKSB7XHJcbiAgICAgICAgICAgIHN0YXJ0ID0gdGhpcy5nZXRDbG9zZXN0VmFsdWVGcm9tTWFwU2xpZGVyKHN0YXJ0KTtcclxuICAgICAgICAgICAgZW5kID0gdGhpcy5nZXRDbG9zZXN0VmFsdWVGcm9tTWFwU2xpZGVyKGVuZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc3RhcnRWYWx1ZSA9IHN0YXJ0O1xyXG4gICAgICAgIHRoaXMuZW5kVmFsdWUgPSBlbmQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfaW5jcmVtZW50T3JEZWNyZW1lbnRFbmRWYWx1ZShpbmNyZW1lbnQ6IGJvb2xlYW4pIHtcclxuICAgICAgICBsZXQgdmFsdWUgPSB0aGlzLnZhbHVlIGFzIG51bWJlcjtcclxuICAgICAgICBpZiAoaW5jcmVtZW50KSB7XHJcbiAgICAgICAgICAgIHZhbHVlICs9IHRoaXMuc3RlcDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB2YWx1ZSAtPSB0aGlzLnN0ZXA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBfbmV3RW5kVmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICBpZiAodGhpcy5uZWVkUGFyc2VWYWx1ZXMpIHtcclxuICAgICAgICAgICAgX25ld0VuZFZhbHVlID0gdGhpcy5nZXRDbG9zZXN0VmFsdWVGcm9tTWFwU2xpZGVyKF9uZXdFbmRWYWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChfbmV3RW5kVmFsdWUgPCB0aGlzLk1JTl9SQU5HRV9WQUxVRSB8fCBfbmV3RW5kVmFsdWUgPiB0aGlzLk1BWF9SQU5HRV9WQUxVRSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZW5kVmFsdWUgPSBfbmV3RW5kVmFsdWU7XHJcbiAgICAgICAgdGhpcy5zdGFydFZhbHVlID0gdGhpcy5lbmRWYWx1ZTtcclxuICAgICAgICB0aGlzLnNldFZhbHVlKF9uZXdFbmRWYWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXQgbmVlZFBhcnNlVmFsdWVzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1heCAhPT0gdGhpcy5NQVhfUkFOR0VfVkFMVUUgfHwgdGhpcy5taW4gIT09IHRoaXMuTUlOX1JBTkdFX1ZBTFVFO1xyXG4gICAgfVxyXG59XHJcblxyXG4vKipcclxuICogQ2FsY3VsYXRlcyBhIG5ldyByYW5nZSBiYXNlZCBvbiB0aGUgb2xkIHJhbmdlIGFuZCB0aGUgcG9zaXRpb25zIGNsaWNrZWQgYW5kIGZpbmFsaXplZC5cclxuICpcclxuICogQHBhcmFtIG9sZFN0YXJ0IC0gVGhlIHN0YXJ0aW5nIHZhbHVlIG9mIHRoZSBvbGQgcmFuZ2UuXHJcbiAqIEBwYXJhbSBvbGRFbmQgLSBUaGUgZW5kaW5nIHZhbHVlIG9mIHRoZSBvbGQgcmFuZ2UuXHJcbiAqIEBwYXJhbSBjbGlja2VkUG9zaXRpb24gLSBUaGUgcG9zaXRpb24gd2hlcmUgdGhlIGNsaWNrIG9jY3VycmVkLlxyXG4gKiBAcGFyYW0gZmluYWxQb3NpdGlvbiAtIFRoZSBwb3NpdGlvbiB3aGVyZSB0aGUgcmFuZ2Ugc2hvdWxkIGVuZC5cclxuICogQHJldHVybnMgQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIG5ldyBzdGFydCBhbmQgZW5kIHZhbHVlcyBvZiB0aGUgcmFuZ2UuXHJcbiAqL1xyXG5jb25zdCBjYWxjdWxhdGVOZXdSYW5nZSA9IChvbGRTdGFydDogbnVtYmVyLCBvbGRFbmQ6IG51bWJlciwgY2xpY2tlZFBvc2l0aW9uOiBudW1iZXIsIGZpbmFsUG9zaXRpb246IG51bWJlcikgPT4ge1xyXG4gICAgY29uc3QgcmFuZ2UgPSBvbGRFbmQgLSBvbGRTdGFydDtcclxuICAgIGNvbnN0IG5ld1N0YXJ0ID0gZmluYWxQb3NpdGlvbiAtIChjbGlja2VkUG9zaXRpb24gLSBvbGRTdGFydCk7XHJcbiAgICBjb25zdCBuZXdFbmQgPSBuZXdTdGFydCArIHJhbmdlO1xyXG4gICAgcmV0dXJuIHsgbmV3U3RhcnQsIG5ld0VuZCB9O1xyXG59O1xyXG5cclxuY29uc3QgaXNJblJhbmdlID0gKHZhbHVlOiBudW1iZXIsIHJhbmdlU3RhcnQ6IG51bWJlciwgcmFuZ2VFbmQ6IG51bWJlcik6IGJvb2xlYW4gPT4ge1xyXG4gICAgY29uc3QgW21pbiwgbWF4XSA9IHJhbmdlU3RhcnQgPCByYW5nZUVuZCA/IFtyYW5nZVN0YXJ0LCByYW5nZUVuZF0gOiBbcmFuZ2VFbmQsIHJhbmdlU3RhcnRdO1xyXG4gICAgcmV0dXJuIHZhbHVlID49IG1pbiAmJiB2YWx1ZSA8PSBtYXg7XHJcbn07XHJcblxyXG5jb25zdCBnZXRNaWRwb2ludCA9IChzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlcikgPT4ge1xyXG4gICAgY29uc3QgbWlkcG9pbnQgPSAoc3RhcnQgKyBlbmQpIC8gMjtcclxuICAgIHJldHVybiBwYXJzZUZsb2F0KG1pZHBvaW50LnRvRml4ZWQoMikpO1xyXG59O1xyXG5jb25zdCBnZXREaWZmZXJlbmNlID0gKGVuZDogbnVtYmVyLCBzdGFydDogbnVtYmVyKSA9PiB7XHJcbiAgICByZXR1cm4gTWF0aC5hYnMoZW5kIC0gc3RhcnQpO1xyXG59O1xyXG4iLCI8ZGl2XHJcbiAgICBjbGFzcz1cInNsaWRlci1jb250YWluZXJcIlxyXG4gICAgW25nQ2xhc3NdPVwieyAnc2xpZGVyLWNvbnRhaW5lci0tZGlzYWJsZWQnOiBkaXNhYmxlZCB9XCJcclxuICAgIFt0YWJpbmRleF09XCJkaXNhYmxlZCA/ICctMScgOiB0YWJpbmRleFwiXHJcbiAgICAoY2xpY2spPVwib25UcmFja0NsaWNrKCRldmVudClcIlxyXG4gICAgKGZvY3VzKT1cIm9uRm9jdXNJbigpXCJcclxuICAgIChibHVyKT1cIm9uQmx1cigpXCJcclxuPlxyXG4gICAgPGRpdlxyXG4gICAgICAgICN0cmFja1xyXG4gICAgICAgIGNsYXNzPVwic2xpZGVyLXRyYWNrXCJcclxuICAgICAgICBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgICAgICdzbGlkZXItdHJhY2stLWhpZGRlbi10aHVtYic6IGhpZGRlblRodW1iLFxyXG4gICAgICAgICAgICAnc2xpZGVyLXRyYWNrLS1tb3ZpbmctbXVsdGlwbGUtdGh1bWJzJzogbW92aW5nUHJvZ3Jlc3NCYXIsXHJcbiAgICAgICAgfVwiXHJcbiAgICA+XHJcbiAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICBjbGFzcz1cInNsaWRlci1wcm9ncmVzc1wiXHJcbiAgICAgICAgICAgIChtb3VzZWRvd24pPVwib25Qcm9ncmVzc01vdXNlRG93bigkZXZlbnQpXCJcclxuICAgICAgICAgICAgW3N0eWxlLmxlZnQuJV09XCJwcm9ncmVzc0xlZnRcIlxyXG4gICAgICAgICAgICBbc3R5bGUud2lkdGhdPVwicHJvZ3Jlc3NXaWR0aFwiXHJcbiAgICAgICAgPjwvZGl2PlxyXG4gICAgICAgIEBpZiAobXVsdGlwbGUpIHtcclxuICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJzbGlkZXItdGh1bWJcIlxyXG4gICAgICAgICAgICAgICAgW3NUb29sdGlwXT1cInRvb2x0aXBTdGFydFRleHRcIlxyXG4gICAgICAgICAgICAgICAgW3Nob3dEZWxheV09XCIwXCJcclxuICAgICAgICAgICAgICAgIChtb3VzZWRvd24pPVwib25Nb3VzZURvd24oJGV2ZW50LCAnc3RhcnQnKVwiXHJcbiAgICAgICAgICAgICAgICBbc3R5bGUubGVmdC4lXT1cInN0YXJ0VmFsdWVcIlxyXG4gICAgICAgICAgICA+PC9kaXY+XHJcbiAgICAgICAgfVxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgICAgW3NUb29sdGlwXT1cInRvb2x0aXBFbmRUZXh0XCJcclxuICAgICAgICAgICAgY2xhc3M9XCJzbGlkZXItdGh1bWJcIlxyXG4gICAgICAgICAgICBbc2hvd0RlbGF5XT1cIjBcIlxyXG4gICAgICAgICAgICAobW91c2Vkb3duKT1cIm9uTW91c2VEb3duKCRldmVudCwgJ2VuZCcpXCJcclxuICAgICAgICAgICAgW3N0eWxlLmxlZnQuJV09XCJlbmRWYWx1ZVwiXHJcbiAgICAgICAgPjwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZm9vdGVyXCI+XHJcbiAgICAgICAgPHNwYW4+e3sgbWluVmFsdWVMYWJlbCB8fCBtaW4gfX08L3NwYW4+XHJcbiAgICAgICAgPHNwYW4+e3sgbWF4VmFsdWVMYWJlbCB8fCBtYXggfX08L3NwYW4+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==
|
|
684
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItY29tcG9uZW50cy9zbGlkZXIvc3JjL2xpYi9zbGlkZXIvc2xpZGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItY29tcG9uZW50cy9zbGlkZXIvc3JjL2xpYi9zbGlkZXIvc2xpZGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHSCxTQUFTLEVBRVQsWUFBWSxFQUNaLFVBQVUsRUFDVixLQUFLLEVBR0wsTUFBTSxFQUVOLFNBQVMsR0FDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQzs7O0FBRTlFOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBZUgsTUFBTSxPQUFPLGVBQWU7SUFDUCxlQUFlLEdBQUcsR0FBRyxDQUFDO0lBQ3RCLGVBQWUsR0FBRyxDQUFDLENBQUM7SUFFOUIsS0FBSyxDQUFjO0lBRTFCOzs7OztPQUtHO0lBRUksUUFBUSxHQUFHLEtBQUssQ0FBQztJQUV4Qjs7Ozs7T0FLRztJQUVJLEtBQUssR0FBOEIsQ0FBQyxDQUFDO0lBRTVDOzs7T0FHRztJQUVJLFdBQVcsR0FBRyxJQUFJLFlBQVksRUFBNkIsQ0FBQztJQUVuRTs7OztPQUlHO0lBRUksSUFBSSxHQUFHLENBQUMsQ0FBQztJQUVoQjs7Ozs7T0FLRztJQUVJLFdBQVcsR0FBRyxLQUFLLENBQUM7SUFFM0I7Ozs7T0FJRztJQUVJLFFBQVEsR0FBRyxLQUFLLENBQUM7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LEdBQUcsR0FBRyxLQUFLLENBQUMsQ0FBQztBQUNqQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gICAgQWZ0ZXJWaWV3SW5pdCxcclxuICAgIENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgQ29tcG9uZW50LFxyXG4gICAgRWxlbWVudFJlZixcclxuICAgIEV2ZW50RW1pdHRlcixcclxuICAgIGZvcndhcmRSZWYsXHJcbiAgICBJbnB1dCxcclxuICAgIE9uQ2hhbmdlcyxcclxuICAgIE9uSW5pdCxcclxuICAgIE91dHB1dCxcclxuICAgIFNpbXBsZUNoYW5nZXMsXHJcbiAgICBWaWV3Q2hpbGQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgTmdDbGFzcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG5pbXBvcnQgeyBUb29sdGlwRGlyZWN0aXZlIH0gZnJvbSAnQHNlbmlvcnNpc3RlbWFzL2FuZ3VsYXItY29tcG9uZW50cy90b29sdGlwJztcclxuXHJcbi8qKlxyXG4gKiBAZGVzY3JpcHRpb24gQ29tcG9uZW50ZSBkZSBjb250cm9sZSBkZXNsaXphbnRlIChzbGlkZXIpIHBhcmEgc2VsZcOnw6NvIGRlIHZhbG9yZXMgbnVtw6lyaWNvc1xyXG4gKiBkZW50cm8gZGUgdW0gaW50ZXJ2YWxvIGRlZmluaWRvLiBTdXBvcnRhIG1vZG8gc2ltcGxlcyAodW0gdmFsb3IpIGUgbW9kbyBkZSBpbnRlcnZhbG9cclxuICogKGRvaXMgdmFsb3JlczogaW7DrWNpbyBlIGZpbSkuIEltcGxlbWVudGEge0BsaW5rIENvbnRyb2xWYWx1ZUFjY2Vzc29yfSBwYXJhIGludGVncmHDp8Ojb1xyXG4gKiBjb20gUmVhY3RpdmUgRm9ybXMgZSBUZW1wbGF0ZS1kcml2ZW4gRm9ybXMgZG8gQW5ndWxhci5cclxuICpcclxuICogQGV4YW1wbGVcclxuICogYGBgaHRtbFxyXG4gKiA8IS0tIFNsaWRlciBzaW1wbGVzIC0tPlxyXG4gKiA8cy1zbGlkZXIgZm9ybUNvbnRyb2xOYW1lPVwidm9sdW1lXCIgW21pbl09XCIwXCIgW21heF09XCIxMDBcIiBbc3RlcF09XCI1XCIgLz5cclxuICpcclxuICogPCEtLSBTbGlkZXIgZGUgaW50ZXJ2YWxvIC0tPlxyXG4gKiA8cy1zbGlkZXIgZm9ybUNvbnRyb2xOYW1lPVwiZmFpeGFcIiBbbXVsdGlwbGVdPVwidHJ1ZVwiIFttaW5dPVwiMFwiIFttYXhdPVwiMTAwMFwiIC8+XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBAY2F0ZWdvcnkgSW5wdXRzXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAncy1zbGlkZXInLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL3NsaWRlci5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9zbGlkZXIuY29tcG9uZW50LnNjc3MnXSxcclxuICAgIHByb3ZpZGVyczogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFNsaWRlckNvbXBvbmVudCksXHJcbiAgICAgICAgICAgIG11bHRpOiB0cnVlLFxyXG4gICAgICAgIH0sXHJcbiAgICBdLFxyXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICAgIGltcG9ydHM6IFtOZ0NsYXNzLCBUb29sdGlwRGlyZWN0aXZlLCBUcmFuc2xhdGVNb2R1bGVdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2xpZGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBDb250cm9sVmFsdWVBY2Nlc3NvciwgT25DaGFuZ2VzIHtcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgTUFYX1JBTkdFX1ZBTFVFID0gMTAwO1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSBNSU5fUkFOR0VfVkFMVUUgPSAwO1xyXG4gICAgQFZpZXdDaGlsZCgndHJhY2snKVxyXG4gICAgcHVibGljIHRyYWNrITogRWxlbWVudFJlZjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBIYWJpbGl0YSBvIG1vZG8gZGUgaW50ZXJ2YWxvLCBwZXJtaXRpbmRvIHNlbGVjaW9uYXIgdW0gdmFsb3IgbcOtbmltbyBlIG3DoXhpbW8uXHJcbiAgICAgKiBRdWFuZG8gYHRydWVgLCBvIHZhbG9yIGRvIGNvbXBvbmVudGUgw6kgdW0gYXJyYXkgYFtpbmljaW8sIGZpbV1gLlxyXG4gICAgICpcclxuICAgICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgbXVsdGlwbGUgPSBmYWxzZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBWYWxvciBhdHVhbCBkbyBzbGlkZXIuIE5vIG1vZG8gc2ltcGxlcyDDqSB1bSBuw7ptZXJvOyBubyBtb2RvIGRlXHJcbiAgICAgKiBpbnRlcnZhbG8gKGBtdWx0aXBsZTogdHJ1ZWApIMOpIHVtIGFycmF5IGBbaW5pY2lvLCBmaW1dYC5cclxuICAgICAqXHJcbiAgICAgKiBAZGVmYXVsdCAwXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgdmFsdWU6IG51bWJlciB8IFtudW1iZXIsIG51bWJlcl0gPSAwO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIEVtaXRpZG8gc2VtcHJlIHF1ZSBvIHZhbG9yIGRvIHNsaWRlciDDqSBhbHRlcmFkbyBwZWxvIHVzdcOhcmlvLlxyXG4gICAgICogRW1pdGUgbyBub3ZvIHZhbG9yIChuw7ptZXJvIG91IGFycmF5IGRlIGRvaXMgbsO6bWVyb3Mgbm8gbW9kbyBkZSBpbnRlcnZhbG8pLlxyXG4gICAgICovXHJcbiAgICBAT3V0cHV0KClcclxuICAgIHB1YmxpYyB2YWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyIHwgW251bWJlciwgbnVtYmVyXT4oKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBJbmNyZW1lbnRvIGFwbGljYWRvIGEgY2FkYSBtb3ZpbWVudG8gZG8gdGh1bWIgZG8gc2xpZGVyLlxyXG4gICAgICpcclxuICAgICAqIEBkZWZhdWx0IDFcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBzdGVwID0gMTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBPY3VsdGEgdmlzdWFsbWVudGUgbyB0aHVtYiAoYm90w6NvIGFycmFzdMOhdmVsKSBkbyBzbGlkZXIuXHJcbiAgICAgKiDDmnRpbCBwYXJhIHZpc3VhbGl6YcOnw7VlcyBvbmRlIGFwZW5hcyBhIGZhaXhhIGRlIHByb2dyZXNzbyBkZXZlIHNlciBleGliaWRhLlxyXG4gICAgICpcclxuICAgICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgaGlkZGVuVGh1bWIgPSBmYWxzZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBEZXNhYmlsaXRhIGEgaW50ZXJhw6fDo28gZG8gdXN1w6FyaW8gY29tIG8gc2xpZGVyLlxyXG4gICAgICpcclxuICAgICAqIEBkZWZhdWx0IGZhbHNlXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgZGlzYWJsZWQgPSBmYWxzZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBWYWxvciBtw61uaW1vIHBlcm1pdGlkbyBubyBzbGlkZXIuXHJcbiAgICAgKlxyXG4gICAgICogQGRlZmF1bHQgMFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIG1pbiA9IHRoaXMuTUlOX1JBTkdFX1ZBTFVFO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIFZhbG9yIG3DoXhpbW8gcGVybWl0aWRvIG5vIHNsaWRlci5cclxuICAgICAqXHJcbiAgICAgKiBAZGVmYXVsdCAxMDBcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBtYXggPSB0aGlzLk1BWF9SQU5HRV9WQUxVRTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBkZXNjcmlwdGlvbiBMYWJlbCBleGliaWRvIGFiYWl4byBvdSBhbyBsYWRvIGRvIHZhbG9yIG3DrW5pbW8gZG8gc2xpZGVyLlxyXG4gICAgICogw5p0aWwgcGFyYSBpbmRpY2FyIHNlbWFudGljYW1lbnRlIG9zIGV4dHJlbW9zIGRvIGludGVydmFsby5cclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBtaW5WYWx1ZUxhYmVsPzogc3RyaW5nO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQGRlc2NyaXB0aW9uIExhYmVsIGV4aWJpZG8gYWJhaXhvIG91IGFvIGxhZG8gZG8gdmFsb3IgbcOheGltbyBkbyBzbGlkZXIuXHJcbiAgICAgKiDDmnRpbCBwYXJhIGluZGljYXIgc2VtYW50aWNhbWVudGUgb3MgZXh0cmVtb3MgZG8gaW50ZXJ2YWxvLlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIG1heFZhbHVlTGFiZWw/OiBzdHJpbmc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAZGVzY3JpcHRpb24gw41uZGljZSBkZSB0YWJ1bGHDp8OjbyBkbyBlbGVtZW50bywgY29udHJvbGFuZG8gYSBvcmRlbSBkZSBmb2NvIHZpYSB0ZWNsYWRvLlxyXG4gICAgICpcclxuICAgICAqIEBkZWZhdWx0IDBcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyB0YWJpbmRleCA9IDA7XHJcblxyXG4gICAgcHVibGljIHN0YXJ0VmFsdWUgPSAwO1xyXG4gICAgcHVibGljIGVuZFZhbHVlID0gMDtcclxuICAgIHB1YmxpYyBtb3ZpbmdQcm9ncmVzc0JhciA9IGZhbHNlO1xyXG4gICAgcHVibGljIHByb2dyZXNzTGVmdCA9IDA7XHJcbiAgICBwdWJsaWMgcHJvZ3Jlc3NXaWR0aCA9ICcnO1xyXG5cclxuICAgIHB1YmxpYyBvbkNoYW5nZTogKHZhbHVlOiBudW1iZXIgfCBbbnVtYmVyLCBudW1iZXJdKSA9PiB2b2lkID0gKCkgPT4ge307XHJcbiAgICBwdWJsaWMgb25Ub3VjaGVkOiAodmFsdWU6IG51bWJlciB8IFtudW1iZXIsIG51bWJlcl0pID0+IHZvaWQgPSAoKSA9PiB7fTtcclxuXHJcbiAgICBwcml2YXRlIGRyYWdnaW5nVGh1bWI6ICdzdGFydCcgfCAnZW5kJyB8IG51bGwgPSBudWxsO1xyXG4gICAgcHJpdmF0ZSBwcm9ncmVzc0JhckV2ZW50UG9zaXRpb25TdGFydCA9IC0xO1xyXG4gICAgcHJpdmF0ZSBzdGFydFZhbHVlQmVmb3JlUHJvZ3Jlc3NCYXJFdmVudCA9IC0xO1xyXG4gICAgcHJpdmF0ZSByYW5nZUJldHdlZW5FbGVtZW50c0JlZm9yZVByb2dyZXNzQmFyRXZlbnQgPSAtMTtcclxuICAgIHByaXZhdGUgdG90YWxSYW5nZUJlZm9yZVByb2dyZXNzQmFyRXZlbnQgPSAtMTtcclxuICAgIC8qKlxyXG4gICAgICogTWFwIG9mIHZhbGlkIHZhbHVlcyBmb3IgdmFsdWVzIGluIHJhbmdlLlxyXG4gICAgICogQGV4YW1wbGVcclxuICAgICAqIHdpdGggbWluID0gLTEwIGFuZCBtYXggPSAxMCB3aWxsIGhhdmUgdGhpcyBtYXAuXHJcbiAgICAgKiB7XHJcbiAgICAgKiAgICAgLTEwOiB7IDAgfSxcclxuICAgICAqICAgICAtOTogeyAxMCB9LFxyXG4gICAgICogICAgICAuLi5cclxuICAgICAqICAgICAxMDogeyAxMCB9XHJcbiAgICAgKiB9XHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgbWFwUmFuZ2VWYWx1ZXNGb3JTbGlkZXI6IE1hcDxudW1iZXIsIG51bWJlcj4gPSBuZXcgTWFwKCk7XHJcbiAgICBwcml2YXRlIGFjdGl2ZU1vdXNlRG93biA9IGZhbHNlO1xyXG5cclxuICAgIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnNldFVzZXJSYW5nZU1hcFZhbHVlcygpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgaGFzQ2hhbmdlc09uTWluID0gY2hhbmdlc1snbWluJ10gJiYgIWNoYW5nZXNbJ21pbiddLmZpcnN0Q2hhbmdlO1xyXG4gICAgICAgIGNvbnN0IGhhc0NoYW5nZXNPbk1heCA9IGNoYW5nZXNbJ21heCddICYmICFjaGFuZ2VzWydtYXgnXS5maXJzdENoYW5nZTtcclxuICAgICAgICBjb25zdCBoYXNDaGFuZ2VzID0gaGFzQ2hhbmdlc09uTWluIHx8IGhhc0NoYW5nZXNPbk1heDtcclxuICAgICAgICBpZiAoaGFzQ2hhbmdlcykge1xyXG4gICAgICAgICAgICB0aGlzLnNldFVzZXJSYW5nZU1hcFZhbHVlcygpO1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0UmFuZ2VWYWx1ZXMoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zZXRSYW5nZVZhbHVlcygpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogSGFuZGxlcyBhcnJvdy1rZXkgbmF2aWdhdGlvbiBmb3IgYSBzaW5nbGUgdGh1bWIuIEVhY2ggdGh1bWIgb3ducyBpdHMgb3duIGtleWRvd25cclxuICAgICAqIGhhbmRsZXIgKGluc3RlYWQgb2YgYSBzaGFyZWQgYGRvY3VtZW50OmtleWRvd25gIGxpc3RlbmVyKSBzbyB0aGF0IExlZnQvUmlnaHQgb25seVxyXG4gICAgICogbW92ZSB0aGUgdGh1bWIgdGhhdCBjdXJyZW50bHkgaGFzIGtleWJvYXJkIGZvY3VzIOKAlCBuZXZlciBib3RoIGF0IG9uY2UuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBvblRodW1iS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCwgdGh1bWI6ICdzdGFydCcgfCAnZW5kJyk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgaXNJbmNyZW1lbnQgPSBldmVudC5rZXkgPT09ICdBcnJvd1JpZ2h0JyB8fCBldmVudC5rZXkgPT09ICdBcnJvd1VwJztcclxuICAgICAgICBjb25zdCBpc0RlY3JlbWVudCA9IGV2ZW50LmtleSA9PT0gJ0Fycm93TGVmdCcgfHwgZXZlbnQua2V5ID09PSAnQXJyb3dEb3duJztcclxuICAgICAgICBpZiAoIWlzSW5jcmVtZW50ICYmICFpc0RlY3JlbWVudCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcclxuICAgICAgICAgICAgdGhpcy5faW5jcmVtZW50T3JEZWNyZW1lbnRTaW5nbGVUaHVtYih0aHVtYiwgaXNJbmNyZW1lbnQpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2luY3JlbWVudE9yRGVjcmVtZW50RW5kVmFsdWUoaXNJbmNyZW1lbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNldFByb2dyZXNzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHVzZXItZmFjaW5nIHZhbHVlIHJlcHJlc2VudGVkIGJ5IHRoZSBnaXZlbiB0aHVtYi5cclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldFRodW1iVmFsdWUodGh1bWI6ICdzdGFydCcgfCAnZW5kJyk6IG51bWJlciB7XHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRodW1iID09PSAnc3RhcnQnID8gdGhpcy52YWx1ZVswXSA6IHRoaXMudmFsdWVbMV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIFwic3RhcnRcIiB0aHVtYiBjYW4gbmV2ZXIgbW92ZSBwYXN0IHRoZSBcImVuZFwiIHRodW1iLCBzbyBpdHMgZWZmZWN0aXZlIG1pbmltdW1cclxuICAgICAqIHN0YXlzIGF0IGBtaW5gIGJ1dCBpdHMgbWF4aW11bSBpcyBjYXBwZWQgYnkgdGhlIFwiZW5kXCIgdGh1bWIncyBjdXJyZW50IHZhbHVlLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0VGh1bWJNaW4odGh1bWI6ICdzdGFydCcgfCAnZW5kJyk6IG51bWJlciB7XHJcbiAgICAgICAgaWYgKHRodW1iID09PSAnZW5kJyAmJiB0aGlzLm11bHRpcGxlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFRodW1iVmFsdWUoJ3N0YXJ0Jyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLm1pbjtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE1pcnJvciBvZiB7QGxpbmsgZ2V0VGh1bWJNaW59OiB0aGUgXCJlbmRcIiB0aHVtYidzIG1pbmltdW0gaXMgY2FwcGVkIGJ5IHRoZSBcInN0YXJ0XCJcclxuICAgICAqIHRodW1iJ3MgY3VycmVudCB2YWx1ZSwgc28gdGhlIHR3byB0aHVtYnMgY2FuIG5ldmVyIGNyb3NzIGVhY2ggb3RoZXIuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRUaHVtYk1heCh0aHVtYjogJ3N0YXJ0JyB8ICdlbmQnKTogbnVtYmVyIHtcclxuICAgICAgICBpZiAodGh1bWIgPT09ICdzdGFydCcgJiYgdGhpcy5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRUaHVtYlZhbHVlKCdlbmQnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubWF4O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgdG9vbHRpcFN0YXJ0VGV4dCgpIHtcclxuICAgICAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKSA/IHRoaXMudmFsdWVbMF0/LnRvU3RyaW5nKCkgOiB0aGlzLnZhbHVlPy50b1N0cmluZygpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgdG9vbHRpcEVuZFRleHQoKSB7XHJcbiAgICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSkgPyB0aGlzLnZhbHVlWzFdPy50b1N0cmluZygpIDogdGhpcy52YWx1ZT8udG9TdHJpbmcoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgd3JpdGVWYWx1ZShvYmo6IG51bWJlciB8IFtudW1iZXIsIG51bWJlcl0pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnZhbHVlID0gb2JqO1xyXG4gICAgICAgIHRoaXMuc2V0UmFuZ2VWYWx1ZXMoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbjogKHZhbHVlOiBudW1iZXIgfCBbbnVtYmVyLCBudW1iZXJdKSA9PiB2b2lkKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMub25Ub3VjaGVkID0gZm47XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvblRyYWNrQ2xpY2soZXZ0OiBNb3VzZUV2ZW50KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5tb3ZpbmdQcm9ncmVzc0JhciB8fCB0aGlzLmFjdGl2ZU1vdXNlRG93bikge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHRyYWNrQ2xpY2tQZXJjZW50YWdlID0gdGhpcy5nZXRQZXJjZW50YWdlQnlFdmVudChldnQpO1xyXG4gICAgICAgIGNvbnN0IHRyYWNrQ2xpY2tUb1VzZXJSYW5nZSA9IHRoaXMuZ2V0VmFsdWVGcm9tTWFwQnlWYWx1ZSh0cmFja0NsaWNrUGVyY2VudGFnZSk7XHJcbiAgICAgICAgY29uc3QgX3RyYWNrQ2xpY2tWYWxpZCA9IHRoaXMubmVlZFBhcnNlVmFsdWVzID8gdHJhY2tDbGlja1RvVXNlclJhbmdlIDogdHJhY2tDbGlja1BlcmNlbnRhZ2U7XHJcbiAgICAgICAgY29uc3QgX3NldEVuZFZhbHVlID0gKCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBfZW5kVmFsdWVVc2VyVmFsdWUgPSB0aGlzLmdldFZhbHVlRnJvbU1hcEJ5VmFsdWUodGhpcy5lbmRWYWx1ZSk7XHJcbiAgICAgICAgICAgIGNvbnN0IF9lbmRWYWx1ZSA9XHJcbiAgICAgICAgICAgICAgICAodGhpcy5uZWVkUGFyc2VWYWx1ZXNcclxuICAgICAgICAgICAgICAgICAgICA/IHRoaXMubWFwUmFuZ2VWYWx1ZXNGb3JTbGlkZXIuZ2V0KHRyYWNrQ2xpY2tUb1VzZXJSYW5nZSlcclxuICAgICAgICAgICAgICAgICAgICA6IHRyYWNrQ2xpY2tQZXJjZW50YWdlKSA/PyAwO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5uZWVkUGFyc2VWYWx1ZXMgJiYgX2VuZFZhbHVlVXNlclZhbHVlICE9PSB0cmFja0NsaWNrVG9Vc2VyUmFuZ2UpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZW5kVmFsdWUgPSBfZW5kVmFsdWU7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXMubmVlZFBhcnNlVmFsdWVzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVuZFZhbHVlID0gdHJhY2tDbGlja1BlcmNlbnRhZ2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBjb25zdCBfc2V0U3RhcnRWYWx1ZSA9ICgpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgX3N0YXJ0VmFsdWVVc2VyVmFsdWUgPSB0aGlzLmdldFZhbHVlRnJvbU1hcEJ5VmFsdWUodGhpcy5zdGFydFZhbHVlKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMubmVlZFBhcnNlVmFsdWVzICYmIF9zdGFydFZhbHVlVXNlclZhbHVlICE9PSB0cmFja0NsaWNrVG9Vc2VyUmFuZ2UpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IF9zdGFydFZhbHVlID1cclxuICAgICAgICAgICAgICAgICAgICAodGhpcy5uZWVkUGFyc2VWYWx1ZXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLm1hcFJhbmdlVmFsdWVzRm9yU2xpZGVyLmdldCh0cmFja0NsaWNrVG9Vc2VyUmFuZ2UpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdHJhY2tDbGlja1BlcmNlbnRhZ2UpID8/IDA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0VmFsdWUgPSBfc3RhcnRWYWx1ZTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICghdGhpcy5uZWVkUGFyc2VWYWx1ZXMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRWYWx1ZSA9IHRyYWNrQ2xpY2tQZXJjZW50YWdlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICBjb25zdCBbc3RhcnQsIGVuZF0gPSB0aGlzLnZhbHVlIGFzIFtudW1iZXIsIG51bWJlcl07XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbGlkU3RhcnQgPSAodGhpcy5uZWVkUGFyc2VWYWx1ZXMgPyB0aGlzLm1hcFJhbmdlVmFsdWVzRm9yU2xpZGVyLmdldChzdGFydCkgOiBzdGFydCkgPz8gMDtcclxuICAgICAgICAgICAgY29uc3QgdmFsaWRFbmQgPSAodGhpcy5uZWVkUGFyc2VWYWx1ZXMgPyB0aGlzLm1hcFJhbmdlVmFsdWVzRm9yU2xpZGVyLmdldChlbmQpIDogZW5kKSA/PyAwO1xyXG4gICAgICAgICAgICBjb25zdCBfdXBkYXRlU3RhcnQgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBfc2V0U3RhcnRWYWx1ZSgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZShbdHJhY2tDbGlja1BlcmNlbnRhZ2UsIHZhbGlkRW5kXSk7XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBjb25zdCBfdXBkYXRlRW5kID0gKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgX3NldEVuZFZhbHVlKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFZhbHVlKFt2YWxpZFN0YXJ0LCB0cmFja0NsaWNrUGVyY2VudGFnZV0pO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBjb25zdCBjbGlja1BlcmNlbnRhZ2VCZXR3ZWVuUmFuZ2UgPSBpc0luUmFuZ2UoX3RyYWNrQ2xpY2tWYWxpZCwgc3RhcnQsIGVuZCk7XHJcbiAgICAgICAgICAgIGlmIChfdHJhY2tDbGlja1ZhbGlkIDwgc3RhcnQpIHtcclxuICAgICAgICAgICAgICAgIF91cGRhdGVTdGFydCgpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKF90cmFja0NsaWNrVmFsaWQgPiBlbmQpIHtcclxuICAgICAgICAgICAgICAgIF91cGRhdGVFbmQoKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChjbGlja1BlcmNlbnRhZ2VCZXR3ZWVuUmFuZ2UpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG1pZGRsZSA9IChzdGFydCArIGVuZCkgLyAyO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdHJhY2tDbGlja1BlcmNlbnRhZ2VJc0V4YWN0aWRkbGUgPSBfdHJhY2tDbGlja1ZhbGlkID09PSBtaWRkbGU7XHJcbiAgICAgICAgICAgICAgICBpZiAodHJhY2tDbGlja1BlcmNlbnRhZ2VJc0V4YWN0aWRkbGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBfdXBkYXRlU3RhcnQoKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2V0U3RhcnQgPSBfdHJhY2tDbGlja1ZhbGlkIDwgbWlkZGxlO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNldEVuZCA9IF90cmFja0NsaWNrVmFsaWQgPiBtaWRkbGU7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNldFN0YXJ0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF91cGRhdGVTdGFydCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc2V0RW5kKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF91cGRhdGVFbmQoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNldFZhbHVlKHRyYWNrQ2xpY2tQZXJjZW50YWdlKTtcclxuICAgICAgICAgICAgX3NldEVuZFZhbHVlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNldFByb2dyZXNzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uUHJvZ3Jlc3NNb3VzZURvd24oZXZ0OiBNb3VzZUV2ZW50KSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLm11bHRpcGxlIHx8IHRoaXMuZGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnByb2dyZXNzQmFyRXZlbnRQb3NpdGlvblN0YXJ0ID0gdGhpcy5nZXRQZXJjZW50YWdlQnlFdmVudChldnQpO1xyXG4gICAgICAgIHRoaXMuc3RhcnRWYWx1ZUJlZm9yZVByb2dyZXNzQmFyRXZlbnQgPSB0aGlzLnN0YXJ0VmFsdWU7XHJcbiAgICAgICAgdGhpcy5yYW5nZUJldHdlZW5FbGVtZW50c0JlZm9yZVByb2dyZXNzQmFyRXZlbnQgPSB0aGlzLmVuZFZhbHVlIC0gdGhpcy5zdGFydFZhbHVlO1xyXG4gICAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IFtzdGFydCwgZW5kXSA9IHRoaXMudmFsdWUgYXMgW251bWJlciwgbnVtYmVyXTtcclxuICAgICAgICAgICAgdGhpcy50b3RhbFJhbmdlQmVmb3JlUHJvZ3Jlc3NCYXJFdmVudCA9IGVuZCAtIHN0YXJ0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLmhhbmRsZVByb2dyZXNzQmFyTW92ZSk7XHJcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIHRoaXMuaGFuZGxlUHJvZ3Jlc3NCYXJNb3ZlRW5kKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25Nb3VzZURvd24oXzogTW91c2VFdmVudCwgdGh1bWI6ICdzdGFydCcgfCAnZW5kJyk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkKSByZXR1cm47XHJcblxyXG4gICAgICAgIHRoaXMuZHJhZ2dpbmdUaHVtYiA9IHRodW1iO1xyXG4gICAgICAgIHRoaXMuYWN0aXZlTW91c2VEb3duID0gdHJ1ZTtcclxuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLm9uVGh1bWJNb3ZlKTtcclxuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgdGhpcy5vbk1vdXNlVXApO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc2V0UmFuZ2VWYWx1ZXMoKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgX3NldFN0YXJ0QW5kRW5kVmFsdWUgPSAoc3RhcnRWYWx1ZTogbnVtYmVyLCBlbmRWYWx1ZTogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhcnRWYWx1ZSA9IHRoaXMuZ2V0Q2xvc2VzdFZhbHVlRnJvbU1hcFNsaWRlcihzdGFydFZhbHVlKTtcclxuICAgICAgICAgICAgdGhpcy5lbmRWYWx1ZSA9IHRoaXMuZ2V0Q2xvc2VzdFZhbHVlRnJvbU1hcFNsaWRlcihlbmRWYWx1ZSk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAodGhpcy52YWx1ZSA9PT0gbnVsbCB8fCB0aGlzLnZhbHVlID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKSAmJiAhdGhpcy5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBtdXN0IHVzZSBcIm11bHRpcGxlXCIgd2l0aCB2YWx1ZSBhcyBhcnJheScpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSAmJiBBcnJheS5pc0FycmF5KHRoaXMudmFsdWUpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhcnRWYWx1ZSA9IHRoaXMudmFsdWVbMF07XHJcbiAgICAgICAgICAgIHRoaXMuZW5kVmFsdWUgPSB0aGlzLnZhbHVlWzFdO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoIXRoaXMubXVsdGlwbGUpIHtcclxuICAgICAgICAgICAgdGhpcy5zdGFydFZhbHVlID0gdGhpcy52YWx1ZSBhcyBudW1iZXI7XHJcbiAgICAgICAgICAgIHRoaXMuZW5kVmFsdWUgPSB0aGlzLnZhbHVlIGFzIG51bWJlcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgX3NldFN0YXJ0QW5kRW5kVmFsdWUodGhpcy5zdGFydFZhbHVlLCB0aGlzLmVuZFZhbHVlKTtcclxuICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICBsZXQgW19zdGFydFZhbHVlLCBfZW5kVmFsdWVdID0gdGhpcy52YWx1ZSBhcyBbbnVtYmVyLCBudW1iZXJdO1xyXG4gICAgICAgICAgICBjb25zdCBkaWZmZXJlbmNlID0gZ2V0RGlmZmVyZW5jZShfZW5kVmFsdWUsIF9zdGFydFZhbHVlKTtcclxuICAgICAgICAgICAgY29uc3QgZW5kVmFsdWVJc0dyZWF0aGVyVGhhbk1heCA9IF9lbmRWYWx1ZSA+IHRoaXMubWF4O1xyXG4gICAgICAgICAgICBjb25zdCBzdGFydFZhbHVlSXNMZXNzVGhhbk1pbiA9IF9zdGFydFZhbHVlIDwgdGhpcy5taW47XHJcbiAgICAgICAgICAgIGNvbnN0IG5lZWRVcGRhdGVWYWx1ZXMgPSBlbmRWYWx1ZUlzR3JlYXRoZXJUaGFuTWF4IHx8IHN0YXJ0VmFsdWVJc0xlc3NUaGFuTWluO1xyXG4gICAgICAgICAgICBpZiAoZW5kVmFsdWVJc0dyZWF0aGVyVGhhbk1heCkge1xyXG4gICAgICAgICAgICAgICAgX2VuZFZhbHVlID0gdGhpcy5tYXg7XHJcbiAgICAgICAgICAgICAgICBfc3RhcnRWYWx1ZSA9IF9lbmRWYWx1ZSAtIGRpZmZlcmVuY2U7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhcnRWYWx1ZUlzTGVzc1RoYW5NaW4pIHtcclxuICAgICAgICAgICAgICAgIF9zdGFydFZhbHVlID0gdGhpcy5taW47XHJcbiAgICAgICAgICAgICAgICBfZW5kVmFsdWUgPSBfc3RhcnRWYWx1ZSArIGRpZmZlcmVuY2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG5lZWRVcGRhdGVWYWx1ZXMpIHtcclxuICAgICAgICAgICAgICAgIF9zZXRTdGFydEFuZEVuZFZhbHVlKF9zdGFydFZhbHVlLCBfZW5kVmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZShbdGhpcy5zdGFydFZhbHVlLCB0aGlzLmVuZFZhbHVlXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBsZXQgX3ZhbHVlID0gdGhpcy52YWx1ZSBhcyBudW1iZXI7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlR3JlYXRoZXJUaGFuTWF4ID0gX3ZhbHVlID4gdGhpcy5tYXg7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlTGVzc1RoYW5NaW4gPSBfdmFsdWUgPCB0aGlzLm1pbjtcclxuICAgICAgICAgICAgY29uc3QgbmVlZFVwZGF0ZVZhbHVlID0gdmFsdWVHcmVhdGhlclRoYW5NYXggfHwgdmFsdWVMZXNzVGhhbk1pbjtcclxuICAgICAgICAgICAgaWYgKHZhbHVlR3JlYXRoZXJUaGFuTWF4KSB7XHJcbiAgICAgICAgICAgICAgICBfdmFsdWUgPSB0aGlzLm1heDtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZUxlc3NUaGFuTWluKSB7XHJcbiAgICAgICAgICAgICAgICBfdmFsdWUgPSB0aGlzLm1pbjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAobmVlZFVwZGF0ZVZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFZhbHVlKF92YWx1ZSwgZmFsc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2V0UHJvZ3Jlc3MoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG9uVGh1bWJNb3ZlID0gKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMubW92aW5nUHJvZ3Jlc3NCYXIgfHwgIXRoaXMuZHJhZ2dpbmdUaHVtYikgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgbmV3UG9zaXRpb24gPSB0aGlzLmdldFBlcmNlbnRhZ2VCeUV2ZW50KGV2ZW50KTtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICh0aGlzLm11bHRpcGxlICYmIHRoaXMuZHJhZ2dpbmdUaHVtYiA9PT0gJ3N0YXJ0JyAmJiBuZXdQb3NpdGlvbiA+IHRoaXMuZW5kVmFsdWUpIHx8XHJcbiAgICAgICAgICAgICh0aGlzLm11bHRpcGxlICYmIHRoaXMuZHJhZ2dpbmdUaHVtYiA9PT0gJ2VuZCcgJiYgbmV3UG9zaXRpb24gPCB0aGlzLnN0YXJ0VmFsdWUpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHBvc2l0aW9uSW5Vc2VyUmFuZ2UgPSB0aGlzLmdldFZhbHVlRnJvbU1hcEJ5VmFsdWUobmV3UG9zaXRpb24pO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5kcmFnZ2luZ1RodW1iID09PSAnc3RhcnQnKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0VmFsdWUgPVxyXG4gICAgICAgICAgICAgICAgICAgICh0aGlzLm5lZWRQYXJzZVZhbHVlcyA/IHRoaXMubWFwUmFuZ2VWYWx1ZXNGb3JTbGlkZXIuZ2V0KHBvc2l0aW9uSW5Vc2VyUmFuZ2UpIDogbmV3UG9zaXRpb24pID8/IDA7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5kcmFnZ2luZ1RodW1iID09PSAnZW5kJykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lbmRWYWx1ZSA9XHJcbiAgICAgICAgICAgICAgICAgICAgKHRoaXMubmVlZFBhcnNlVmFsdWVzID8gdGhpcy5tYXBSYW5nZVZhbHVlc0ZvclNsaWRlci5nZXQocG9zaXRpb25JblVzZXJSYW5nZSkgOiBuZXdQb3NpdGlvbikgPz8gMDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZShbdGhpcy5zdGFydFZhbHVlLCB0aGlzLmVuZFZhbHVlXSk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBbc3RhcnQsIGVuZF0gPSB0aGlzLnZhbHVlIGFzIFtudW1iZXIsIG51bWJlcl07XHJcblxyXG4gICAgICAgICAgICBpZiAoc3RhcnQgPT09IGVuZCAmJiB0aGlzLmRyYWdnaW5nVGh1bWIgPT09ICdzdGFydCcpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRWYWx1ZSA9IHRoaXMuZW5kVmFsdWU7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhcnQgPT09IGVuZCAmJiB0aGlzLmRyYWdnaW5nVGh1bWIgPT09ICdlbmQnKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVuZFZhbHVlID0gdGhpcy5zdGFydFZhbHVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3QgY3VycmVudFZhbHVlID0gdGhpcy52YWx1ZSBhcyBudW1iZXI7XHJcbiAgICAgICAgICAgIGNvbnN0IF92YWx1ZSA9IHRoaXMubmVlZFBhcnNlVmFsdWVzID8gcG9zaXRpb25JblVzZXJSYW5nZSA6IG5ld1Bvc2l0aW9uO1xyXG4gICAgICAgICAgICBjb25zdCBpc0F0U2FtZVZhbHVlID0gdGhpcy5uZWVkUGFyc2VWYWx1ZXMgPyBwb3NpdGlvbkluVXNlclJhbmdlID09PSB0aGlzLnZhbHVlIDogZmFsc2U7XHJcbiAgICAgICAgICAgIGNvbnN0IGhhc1N0ZXAgPSB0aGlzLnN0ZXAgIT09IDA7XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld1ZhbHVlSXNWYWxpZEJ5U3RlcCA9IGhhc1N0ZXBcclxuICAgICAgICAgICAgICAgID8gY3VycmVudFZhbHVlICsgdGhpcy5zdGVwID09PSBfdmFsdWUgfHwgY3VycmVudFZhbHVlIC0gdGhpcy5zdGVwID09PSBfdmFsdWVcclxuICAgICAgICAgICAgICAgIDogZmFsc2U7XHJcbiAgICAgICAgICAgIGlmIChpc0F0U2FtZVZhbHVlICYmICFuZXdWYWx1ZUlzVmFsaWRCeVN0ZXApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmVuZFZhbHVlID1cclxuICAgICAgICAgICAgICAgICh0aGlzLm5lZWRQYXJzZVZhbHVlcyA/IHRoaXMubWFwUmFuZ2VWYWx1ZXNGb3JTbGlkZXIuZ2V0KHBvc2l0aW9uSW5Vc2VyUmFuZ2UpIDogbmV3UG9zaXRpb24pID8/IDA7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhcnRWYWx1ZSA9IHRoaXMuZW5kVmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0VmFsdWUodGhpcy5lbmRWYWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2V0UHJvZ3Jlc3MoKTtcclxuICAgIH07XHJcblxyXG4gICAgcHJpdmF0ZSBvbk1vdXNlVXAgPSAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5kcmFnZ2luZ1RodW1iID0gbnVsbDtcclxuICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLCB0aGlzLm9uVGh1bWJNb3ZlKTtcclxuICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgdGhpcy5vbk1vdXNlVXApO1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmFjdGl2ZU1vdXNlRG93biA9IGZhbHNlO1xyXG4gICAgICAgIH0sIDE1MCk7XHJcbiAgICB9O1xyXG5cclxuICAgIHByaXZhdGUgaGFuZGxlUHJvZ3Jlc3NCYXJNb3ZlID0gKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XHJcbiAgICAgICAgdGhpcy5tb3ZpbmdQcm9ncmVzc0JhciA9IHRydWU7XHJcbiAgICAgICAgY29uc3QgbmV3Q2VudGVyID0gdGhpcy5nZXRQZXJjZW50YWdlQnlFdmVudChldmVudCk7XHJcbiAgICAgICAgY29uc3Qgc3RhcnRQb3NpdGlvbkJlZm9yZUV2ZW50ID0gdGhpcy5wcm9ncmVzc0JhckV2ZW50UG9zaXRpb25TdGFydDtcclxuICAgICAgICBjb25zdCBzdGFydFZhbHVlQmVmb3JlRXZlbnQgPSB0aGlzLnN0YXJ0VmFsdWVCZWZvcmVQcm9ncmVzc0JhckV2ZW50O1xyXG4gICAgICAgIGNvbnN0IHJhbmdlID0gdGhpcy5yYW5nZUJldHdlZW5FbGVtZW50c0JlZm9yZVByb2dyZXNzQmFyRXZlbnQ7XHJcbiAgICAgICAgbGV0IHsgbmV3U3RhcnQsIG5ld0VuZCB9ID0gY2FsY3VsYXRlTmV3UmFuZ2UoXHJcbiAgICAgICAgICAgIHN0YXJ0VmFsdWVCZWZvcmVFdmVudCxcclxuICAgICAgICAgICAgc3RhcnRWYWx1ZUJlZm9yZUV2ZW50ICsgcmFuZ2UsXHJcbiAgICAgICAgICAgIHN0YXJ0UG9zaXRpb25CZWZvcmVFdmVudCxcclxuICAgICAgICAgICAgbmV3Q2VudGVyLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKG5ld1N0YXJ0IDwgdGhpcy5NSU5fUkFOR0VfVkFMVUUgfHwgbmV3RW5kID4gdGhpcy5NQVhfUkFOR0VfVkFMVUUpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5uZWVkUGFyc2VWYWx1ZXMpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnRWYWx1ZUJlZm9yZUV2ZW50VXNlclJhbmdlID0gdGhpcy5nZXRWYWx1ZUZyb21NYXBCeVZhbHVlKHN0YXJ0VmFsdWVCZWZvcmVFdmVudCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0UG9zaXRpb25CZWZvcmVFdmVudFVzZXJSYW5nZSA9IHRoaXMuZ2V0VmFsdWVGcm9tTWFwQnlWYWx1ZShzdGFydFBvc2l0aW9uQmVmb3JlRXZlbnQpO1xyXG4gICAgICAgICAgICBjb25zdCBjZW50ZXJVc2VyUmFuZ2UgPSB0aGlzLmdldFZhbHVlRnJvbU1hcEJ5VmFsdWUobmV3Q2VudGVyKTtcclxuICAgICAgICAgICAgY29uc3QgdmFsdWVSYW5nZSA9IHRoaXMudG90YWxSYW5nZUJlZm9yZVByb2dyZXNzQmFyRXZlbnQ7XHJcbiAgICAgICAgICAgIGxldCB7IG5ld1N0YXJ0LCBuZXdFbmQgfSA9IGNhbGN1bGF0ZU5ld1JhbmdlKFxyXG4gICAgICAgICAgICAgICAgc3RhcnRWYWx1ZUJlZm9yZUV2ZW50VXNlclJhbmdlLFxyXG4gICAgICAgICAgICAgICAgc3RhcnRWYWx1ZUJlZm9yZUV2ZW50VXNlclJhbmdlICsgdmFsdWVSYW5nZSxcclxuICAgICAgICAgICAgICAgIHN0YXJ0UG9zaXRpb25CZWZvcmVFdmVudFVzZXJSYW5nZSxcclxuICAgICAgICAgICAgICAgIGNlbnRlclVzZXJSYW5nZSxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgaWYgKG5ld1N0YXJ0IDwgdGhpcy5taW4gfHwgbmV3RW5kID4gdGhpcy5tYXgpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnN0YXJ0VmFsdWUgPSB0aGlzLm1hcFJhbmdlVmFsdWVzRm9yU2xpZGVyLmdldChuZXdTdGFydCkgPz8gMDtcclxuICAgICAgICAgICAgdGhpcy5lbmRWYWx1ZSA9IHRoaXMubWFwUmFuZ2VWYWx1ZXNGb3JTbGlkZXIuZ2V0KG5ld0VuZCkgPz8gMDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnN0YXJ0VmFsdWUgPSBuZXdTdGFydDtcclxuICAgICAgICAgICAgdGhpcy5lbmRWYWx1ZSA9IG5ld0VuZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZXRWYWx1ZShbdGhpcy5zdGFydFZhbHVlLCB0aGlzLmVuZFZhbHVlXSk7XHJcbiAgICAgICAgdGhpcy5zZXRQcm9ncmVzcygpO1xyXG4gICAgfTtcclxuXHJcbiAgICBwcml2YXRlIGhhbmRsZVByb2dyZXNzQmFyTW92ZUVuZCA9ICgpID0+IHtcclxuICAgICAgICB0aGlzLnByb2dyZXNzQmFyRXZlbnRQb3NpdGlvblN0YXJ0ID0gLTE7XHJcbiAgICAgICAgdGhpcy5zdGFydFZhbHVlQmVmb3JlUHJvZ3Jlc3NCYXJFdmVudCA9IC0xO1xyXG4gICAgICAgIHRoaXMucmFuZ2VCZXR3ZWVuRWxlbWVudHNCZWZvcmVQcm9ncmVzc0JhckV2ZW50ID0gLTE7XHJcbiAgICAgICAgdGhpcy50b3RhbFJhbmdlQmVmb3JlUHJvZ3Jlc3NCYXJFdmVudCA9IC0xO1xyXG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMuaGFuZGxlUHJvZ3Jlc3NCYXJNb3ZlKTtcclxuICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgdGhpcy5oYW5kbGVQcm9ncmVzc0Jhck1vdmVFbmQpO1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLm1vdmluZ1Byb2dyZXNzQmFyID0gZmFsc2U7XHJcbiAgICAgICAgfSwgMTUwKTtcclxuICAgIH07XHJcblxyXG4gICAgcHJpdmF0ZSBzZXRQcm9ncmVzcygpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICB0aGlzLnByb2dyZXNzTGVmdCA9IHRoaXMuc3RhcnRWYWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5wcm9ncmVzc1dpZHRoID0gYGNhbGMoJHt0aGlzLmVuZFZhbHVlIC0gdGhpcy5zdGFydFZhbHVlfSUgKyAxMHB4KWA7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5wcm9ncmVzc0xlZnQgPSAwO1xyXG4gICAgICAgICAgICB0aGlzLnByb2dyZXNzV2lkdGggPSBgY2FsYygke3RoaXMuZW5kVmFsdWV9JSArIDEwcHgpYDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgdGhlIHBlcmNlbnRhZ2Ugb2YgYSBtb3VzZSBldmVudCBmcm9tIHRoZSB0cmFjaydzIGxlZnQgZWRnZVxyXG4gICAgICogQHBhcmFtIG1vdXNlRXZlbnQgbW91c2UgZXZlbnRcclxuICAgICAqIEByZXR1cm5zIHBlcmNlbnRhZ2UgZnJvbSB0aGUgbGVmdCBlZGdlXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZ2V0UGVyY2VudGFnZUJ5RXZlbnQobW91c2VFdmVudDogTW91c2VFdmVudCB8IFBvaW50ZXJFdmVudCk6IG51bWJlciB7XHJcbiAgICAgICAgY29uc3QgdHJhY2tSZWN0ID0gdGhpcy50cmFjay5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgICAgIGxldCBuZXdMZWZ0ID0gTWF0aC5yb3VuZCgoKG1vdXNlRXZlbnQuY2xpZW50WCAtIHRyYWNrUmVjdC5sZWZ0KSAvIHRyYWNrUmVjdC53aWR0aCkgKiB0aGlzLk1BWF9SQU5HRV9WQUxVRSk7XHJcbiAgICAgICAgbmV3TGVmdCA9IE1hdGgubWF4KDAsIE1hdGgubWluKG5ld0xlZnQsIHRoaXMuTUFYX1JBTkdFX1ZBTFVFKSk7XHJcbiAgICAgICAgcmV0dXJuIG5ld0xlZnQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzZXRWYWx1ZSh2YWx1ZTogbnVtYmVyIHwgW251bWJlciwgbnVtYmVyXSwgcGFyc2UgPSB0cnVlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMubmVlZFBhcnNlVmFsdWVzICYmIHBhcnNlKSB7XHJcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5tYXAoKHgpID0+IHRoaXMuZ2V0VmFsdWVGcm9tTWFwQnlWYWx1ZSh4KSkgYXMgW251bWJlciwgbnVtYmVyXTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHZhbHVlID0gdGhpcy5nZXRWYWx1ZUZyb21NYXBCeVZhbHVlKHZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHZhbHVlKTtcclxuICAgICAgICB0aGlzLndyaXRlVmFsdWUodGhpcy52YWx1ZSk7XHJcbiAgICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLnZhbHVlKTtcclxuICAgICAgICB0aGlzLm9uVG91Y2hlZCh0aGlzLnZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNldFVzZXJSYW5nZU1hcFZhbHVlcygpIHtcclxuICAgICAgICBjb25zdCBzdGFydCA9IHRoaXMubWluO1xyXG4gICAgICAgIGNvbnN0IGVuZCA9IHRoaXMubWF4O1xyXG4gICAgICAgIGlmIChzdGFydCA+IGVuZCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ01heCB2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBtaW4gdmFsdWUnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5tYXBSYW5nZVZhbHVlc0ZvclNsaWRlci5jbGVhcigpO1xyXG4gICAgICAgIGNvbnN0IHJhbmdlID0gZW5kIC0gc3RhcnQ7XHJcbiAgICAgICAgY29uc3QgZGVjaW1hbFBsYWNlcyA9IDI7XHJcbiAgICAgICAgY29uc3Qgc3RlcENvdW50ID0gTWF0aC5mbG9vcihyYW5nZSAvIHRoaXMuc3RlcCk7XHJcbiAgICAgICAgY29uc3QgdmFsdWVzOiBudW1iZXJbXSA9IFtdO1xyXG4gICAgICAgIGZvciAobGV0IHZhbHVlID0gc3RhcnQ7IHZhbHVlIDw9IGVuZDsgdmFsdWUgKz0gdGhpcy5zdGVwKSB7XHJcbiAgICAgICAgICAgIHZhbHVlcy5wdXNoKHZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHZhbHVlc1t2YWx1ZXMubGVuZ3RoIC0gMV0gIT09IGVuZCkge1xyXG4gICAgICAgICAgICB2YWx1ZXMucHVzaChlbmQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBtYXBwZWRWYWx1ZXMgPSB2YWx1ZXMubWFwKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgbWFwcGVkID0gKCh2YWx1ZSAtIHN0YXJ0KSAvIHJhbmdlKSAqIHRoaXMuTUFYX1JBTkdFX1ZBTFVFO1xyXG4gICAgICAgICAgICByZXR1cm4gcGFyc2VGbG9hdChtYXBwZWQudG9GaXhlZChkZWNpbWFsUGxhY2VzKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgbWFwcGVkVmFsdWVzWzBdID0gMDtcclxuICAgICAgICBtYXBwZWRWYWx1ZXNbbWFwcGVkVmFsdWVzLmxlbmd0aCAtIDFdID0gdGhpcy5NQVhfUkFOR0VfVkFMVUU7XHJcbiAgICAgICAgY29uc3QgZXJyb3IgPSB0aGlzLk1BWF9SQU5HRV9WQUxVRSAtIG1hcHBlZFZhbHVlc1ttYXBwZWRWYWx1ZXMubGVuZ3RoIC0gMV07XHJcbiAgICAgICAgY29uc3QgZXJyb3JQZXJTdGVwID0gZXJyb3IgLyBzdGVwQ291bnQ7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBtYXBwZWRWYWx1ZXMubGVuZ3RoIC0gMTsgaSsrKSB7XHJcbiAgICAgICAgICAgIG1hcHBlZFZhbHVlc1tpXSArPSBlcnJvclBlclN0ZXA7XHJcbiAgICAgICAgICAgIG1hcHBlZFZhbHVlc1tpXSA9IHBhcnNlRmxvYXQobWFwcGVkVmFsdWVzW2ldLnRvRml4ZWQoZGVjaW1hbFBsYWNlcykpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YWx1ZXMuZm9yRWFjaCgodmFsdWUsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubWFwUmFuZ2VWYWx1ZXNGb3JTbGlkZXIuc2V0KHZhbHVlLCBtYXBwZWRWYWx1ZXNbaW5kZXhdKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgdGhlIHVzZXIgdmFsdWUgZnJvbSB0aGUgZ2l2ZW4gc2xpZGVyIHZhbHVlIGJ5IHVzaW5nIHRoZSBtYXAgb2YgcmFuZ2UgdmFsdWVzLlxyXG4gICAgICogQGV4YW1wbGVcclxuICAgICAqIElmIHRoZSBtYXAgaXMgMDogeyAwIH0sIDE6IHsgMTAgfSwgMjogeyAzMCB9LCAzOiB7IDQwIH0sIDQ6IHsgNTAgfVxyXG4gICAgICogYW5kIHRoZSBzbGlkZXJWYWx1ZSBpcyAzNywgdGhlIGZ1bmN0aW9uIHJldHVybnMgM1xyXG4gICAgICogb3IgdGhlIHNsaWRlciB2YWx1ZSBpcyA0MCwgdGhlIGZ1bmN0aW9uIHJldHVybnMgNFxyXG4gICAgICogQHBhcmFtIHNsaWRlclZhbHVlIHRoZSB2YWx1ZSBvZiB0aGUgc2xpZGVyICh2YWx1ZXMgb25seSBiZXR3ZWVuIHJhbmdlIE1JTiBhbmQgTUFYKVxyXG4gICAgICogQHJldHVybnMgdGhlIHVzZXIgdmFsdWUgZnJvbSB0aGUgZ2l2ZW4gc2xpZGVyIHZhbHVlXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZ2V0VmFsdWVGcm9tTWFwQnlWYWx1ZShzbGlkZXJWYWx1ZTogbnVtYmVyKSB7XHJcbiAgICAgICAgY29uc3QgbWFwVG9BcnJheSA9IEFycmF5LmZyb20odGhpcy5tYXBSYW5nZVZhbHVlc0ZvclNsaWRlcikubWFwKChbdmFsdWUsIG1hcHBlZF0pID0+ICh7IHZhbHVlLCBtYXBwZWQgfSkpO1xyXG4gICAgICAgIGNvbnN0IGV4YWN0VmFsdWUgPSBtYXBUb0FycmF5LmZpbmQoKHgpID0+IHgubWFwcGVkID09IHNsaWRlclZhbHVlKTtcclxuICAgICAgICBjb25zdCBjbG9zZXN0ID0gbWFwVG9BcnJheS5yZWR1Y2UoKHByZXYsIGN1cnIpID0+XHJcbiAgICAgICAgICAgIE1hdGguYWJzKGN1cnIubWFwcGVkIC0gc2xpZGVyVmFsdWUpIDwgTWF0aC5hYnMocHJldi5tYXBwZWQgLSBzbGlkZXJWYWx1ZSkgPyBjdXJyIDogcHJldixcclxuICAgICAgICApO1xyXG4gICAgICAgIHJldHVybiBleGFjdFZhbHVlID8gZXhhY3RWYWx1ZS52YWx1ZSA6IGNsb3Nlc3QudmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXRyaWV2ZXMgdGhlIGtleSBmcm9tIHRoZSBtYXAgdGhhdCBpcyBjbG9zZXN0IHRvIHRoZSBnaXZlbiBzbGlkZXIgdmFsdWUuXHJcbiAgICAgKiBAcGFyYW0gdXNlclZhbHVlIC0gVGhlIHZhbHVlIHRvIGZpbmQgdGhlIGNsb3Nlc3Qga2V5IGZvci4gKHZhbHVlcyBvbmx5IGJldHdlZW4gMCAtIDEwMClcclxuICAgICAqIEByZXR1cm5zIFRoZSBrZXkgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgY2xvc2VzdCBtYXBwZWQgdmFsdWUuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZ2V0Q2xvc2VzdFZhbHVlRnJvbU1hcFNsaWRlcih1c2VyVmFsdWU6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICAgICAgY29uc3QgbWFwVG9BcnJheSA9IEFycmF5LmZyb20odGhpcy5tYXBSYW5nZVZhbHVlc0ZvclNsaWRlcikubWFwKChbdmFsdWUsIG1hcHBlZF0pID0+ICh7IHZhbHVlLCBtYXBwZWQgfSkpO1xyXG4gICAgICAgIGlmICh1c2VyVmFsdWUgPj0gdGhpcy5tYXgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG1hcFRvQXJyYXlbbWFwVG9BcnJheS5sZW5ndGggLSAxXS5tYXBwZWQ7XHJcbiAgICAgICAgfSBlbHNlIGlmICh1c2VyVmFsdWUgPD0gdGhpcy5taW4pIHtcclxuICAgICAgICAgICAgcmV0dXJuIG1hcFRvQXJyYXlbMF0ubWFwcGVkO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBleGFjdFZhbHVlID0gbWFwVG9BcnJheS5maW5kKCh4KSA9PiB4LnZhbHVlID09IHVzZXJWYWx1ZSk7XHJcbiAgICAgICAgY29uc3QgY2xvc2VzdFZhbHVlID0gbWFwVG9BcnJheS5yZWR1Y2UoKHByZXYsIGN1cnIpID0+XHJcbiAgICAgICAgICAgIE1hdGguYWJzKGN1cnIudmFsdWUgLSB1c2VyVmFsdWUpIDwgTWF0aC5hYnMocHJldi52YWx1ZSAtIHVzZXJWYWx1ZSkgPyBjdXJyIDogcHJldixcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IGl0ZW0gPSBleGFjdFZhbHVlIHx8IGNsb3Nlc3RWYWx1ZTtcclxuICAgICAgICBjb25zdCBpc0ZpcnN0SXRlbSA9IG1hcFRvQXJyYXlbMF0gPT09IGl0ZW07XHJcbiAgICAgICAgY29uc3QgaXNMYXN0SXRlbSA9IG1hcFRvQXJyYXlbbWFwVG9BcnJheS5sZW5ndGggLSAxXSA9PT0gaXRlbTtcclxuICAgICAgICBpZiAoaXNGaXJzdEl0ZW0gJiYgdXNlclZhbHVlID4gdGhpcy5taW4pIHtcclxuICAgICAgICAgICAgcmV0dXJuIGdldE1pZHBvaW50KGl0ZW0ubWFwcGVkLCBtYXBUb0FycmF5WzFdLm1hcHBlZCk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChpc0xhc3RJdGVtICYmIHVzZXJWYWx1ZSA8IHRoaXMubWF4KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBnZXRNaWRwb2ludChpdGVtLm1hcHBlZCwgbWFwVG9BcnJheVttYXBUb0FycmF5Lmxlbmd0aCAtIDJdLm1hcHBlZCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIGl0ZW0ubWFwcGVkO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE1vdmVzIG9ubHkgdGhlIGdpdmVuIHRodW1iIGJ5IG9uZSBgc3RlcGAsIGNsYW1wZWQgc28gaXQgbmV2ZXIgY3Jvc3NlcyB0aGUgb3RoZXJcclxuICAgICAqIHRodW1iIChzdGFydCDiiaQgZW5kIGFsd2F5cykgbm9yIHRoZSBzbGlkZXIncyBnbG9iYWwgYG1pbmAvYG1heGAuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgX2luY3JlbWVudE9yRGVjcmVtZW50U2luZ2xlVGh1bWIodGh1bWI6ICdzdGFydCcgfCAnZW5kJywgaW5jcmVtZW50OiBib29sZWFuKSB7XHJcbiAgICAgICAgbGV0IFtzdGFydCwgZW5kXSA9IHRoaXMudmFsdWUgYXMgW251bWJlciwgbnVtYmVyXTtcclxuICAgICAgICBpZiAodGh1bWIgPT09ICdzdGFydCcpIHtcclxuICAgICAgICAgICAgc3RhcnQgKz0gaW5jcmVtZW50ID8gdGhpcy5zdGVwIDogLXRoaXMuc3RlcDtcclxuICAgICAgICAgICAgc3RhcnQgPSBNYXRoLm1pbihNYXRoLm1heChzdGFydCwgdGhpcy5taW4pLCBlbmQpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGVuZCArPSBpbmNyZW1lbnQgPyB0aGlzLnN0ZXAgOiAtdGhpcy5zdGVwO1xyXG4gICAgICAgICAgICBlbmQgPSBNYXRoLm1heChNYXRoLm1pbihlbmQsIHRoaXMubWF4KSwgc3RhcnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNldFZhbHVlKFtzdGFydCwgZW5kXSwgZmFsc2UpO1xyXG4gICAgICAgIGlmICh0aGlzLm5lZWRQYXJzZVZhbHVlcykge1xyXG4gICAgICAgICAgICBzdGFydCA9IHRoaXMuZ2V0Q2xvc2VzdFZhbHVlRnJvbU1hcFNsaWRlcihzdGFydCk7XHJcbiAgICAgICAgICAgIGVuZCA9IHRoaXMuZ2V0Q2xvc2VzdFZhbHVlRnJvbU1hcFNsaWRlcihlbmQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnN0YXJ0VmFsdWUgPSBzdGFydDtcclxuICAgICAgICB0aGlzLmVuZFZhbHVlID0gZW5kO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX2luY3JlbWVudE9yRGVjcmVtZW50RW5kVmFsdWUoaW5jcmVtZW50OiBib29sZWFuKSB7XHJcbiAgICAgICAgbGV0IHZhbHVlID0gdGhpcy52YWx1ZSBhcyBudW1iZXI7XHJcbiAgICAgICAgaWYgKGluY3JlbWVudCkge1xyXG4gICAgICAgICAgICB2YWx1ZSArPSB0aGlzLnN0ZXA7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdmFsdWUgLT0gdGhpcy5zdGVwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgX25ld0VuZFZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgaWYgKHRoaXMubmVlZFBhcnNlVmFsdWVzKSB7XHJcbiAgICAgICAgICAgIF9uZXdFbmRWYWx1ZSA9IHRoaXMuZ2V0Q2xvc2VzdFZhbHVlRnJvbU1hcFNsaWRlcihfbmV3RW5kVmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoX25ld0VuZFZhbHVlIDwgdGhpcy5NSU5fUkFOR0VfVkFMVUUgfHwgX25ld0VuZFZhbHVlID4gdGhpcy5NQVhfUkFOR0VfVkFMVUUpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmVuZFZhbHVlID0gX25ld0VuZFZhbHVlO1xyXG4gICAgICAgIHRoaXMuc3RhcnRWYWx1ZSA9IHRoaXMuZW5kVmFsdWU7XHJcbiAgICAgICAgdGhpcy5zZXRWYWx1ZShfbmV3RW5kVmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0IG5lZWRQYXJzZVZhbHVlcygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5tYXggIT09IHRoaXMuTUFYX1JBTkdFX1ZBTFVFIHx8IHRoaXMubWluICE9PSB0aGlzLk1JTl9SQU5HRV9WQUxVRTtcclxuICAgIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIENhbGN1bGF0ZXMgYSBuZXcgcmFuZ2UgYmFzZWQgb24gdGhlIG9sZCByYW5nZSBhbmQgdGhlIHBvc2l0aW9ucyBjbGlja2VkIGFuZCBmaW5hbGl6ZWQuXHJcbiAqXHJcbiAqIEBwYXJhbSBvbGRTdGFydCAtIFRoZSBzdGFydGluZyB2YWx1ZSBvZiB0aGUgb2xkIHJhbmdlLlxyXG4gKiBAcGFyYW0gb2xkRW5kIC0gVGhlIGVuZGluZyB2YWx1ZSBvZiB0aGUgb2xkIHJhbmdlLlxyXG4gKiBAcGFyYW0gY2xpY2tlZFBvc2l0aW9uIC0gVGhlIHBvc2l0aW9uIHdoZXJlIHRoZSBjbGljayBvY2N1cnJlZC5cclxuICogQHBhcmFtIGZpbmFsUG9zaXRpb24gLSBUaGUgcG9zaXRpb24gd2hlcmUgdGhlIHJhbmdlIHNob3VsZCBlbmQuXHJcbiAqIEByZXR1cm5zIEFuIG9iamVjdCBjb250YWluaW5nIHRoZSBuZXcgc3RhcnQgYW5kIGVuZCB2YWx1ZXMgb2YgdGhlIHJhbmdlLlxyXG4gKi9cclxuY29uc3QgY2FsY3VsYXRlTmV3UmFuZ2UgPSAob2xkU3RhcnQ6IG51bWJlciwgb2xkRW5kOiBudW1iZXIsIGNsaWNrZWRQb3NpdGlvbjogbnVtYmVyLCBmaW5hbFBvc2l0aW9uOiBudW1iZXIpID0+IHtcclxuICAgIGNvbnN0IHJhbmdlID0gb2xkRW5kIC0gb2xkU3RhcnQ7XHJcbiAgICBjb25zdCBuZXdTdGFydCA9IGZpbmFsUG9zaXRpb24gLSAoY2xpY2tlZFBvc2l0aW9uIC0gb2xkU3RhcnQpO1xyXG4gICAgY29uc3QgbmV3RW5kID0gbmV3U3RhcnQgKyByYW5nZTtcclxuICAgIHJldHVybiB7IG5ld1N0YXJ0LCBuZXdFbmQgfTtcclxufTtcclxuXHJcbmNvbnN0IGlzSW5SYW5nZSA9ICh2YWx1ZTogbnVtYmVyLCByYW5nZVN0YXJ0OiBudW1iZXIsIHJhbmdlRW5kOiBudW1iZXIpOiBib29sZWFuID0+IHtcclxuICAgIGNvbnN0IFttaW4sIG1heF0gPSByYW5nZVN0YXJ0IDwgcmFuZ2VFbmQgPyBbcmFuZ2VTdGFydCwgcmFuZ2VFbmRdIDogW3JhbmdlRW5kLCByYW5nZVN0YXJ0XTtcclxuICAgIHJldHVybiB2YWx1ZSA+PSBtaW4gJiYgdmFsdWUgPD0gbWF4O1xyXG59O1xyXG5cclxuY29uc3QgZ2V0TWlkcG9pbnQgPSAoc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIpID0+IHtcclxuICAgIGNvbnN0IG1pZHBvaW50ID0gKHN0YXJ0ICsgZW5kKSAvIDI7XHJcbiAgICByZXR1cm4gcGFyc2VGbG9hdChtaWRwb2ludC50b0ZpeGVkKDIpKTtcclxufTtcclxuY29uc3QgZ2V0RGlmZmVyZW5jZSA9IChlbmQ6IG51bWJlciwgc3RhcnQ6IG51bWJlcikgPT4ge1xyXG4gICAgcmV0dXJuIE1hdGguYWJzKGVuZCAtIHN0YXJ0KTtcclxufTtcclxuIiwiPGRpdlxyXG4gICAgY2xhc3M9XCJzbGlkZXItY29udGFpbmVyXCJcclxuICAgIFtuZ0NsYXNzXT1cInsgJ3NsaWRlci1jb250YWluZXItLWRpc2FibGVkJzogZGlzYWJsZWQgfVwiXHJcbiAgICAoY2xpY2spPVwib25UcmFja0NsaWNrKCRldmVudClcIlxyXG4+XHJcbiAgICA8ZGl2XHJcbiAgICAgICAgI3RyYWNrXHJcbiAgICAgICAgY2xhc3M9XCJzbGlkZXItdHJhY2tcIlxyXG4gICAgICAgIFtuZ0NsYXNzXT1cIntcclxuICAgICAgICAgICAgJ3NsaWRlci10cmFjay0taGlkZGVuLXRodW1iJzogaGlkZGVuVGh1bWIsXHJcbiAgICAgICAgICAgICdzbGlkZXItdHJhY2stLW1vdmluZy1tdWx0aXBsZS10aHVtYnMnOiBtb3ZpbmdQcm9ncmVzc0JhcixcclxuICAgICAgICB9XCJcclxuICAgID5cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIGNsYXNzPVwic2xpZGVyLXByb2dyZXNzXCJcclxuICAgICAgICAgICAgKG1vdXNlZG93bik9XCJvblByb2dyZXNzTW91c2VEb3duKCRldmVudClcIlxyXG4gICAgICAgICAgICBbc3R5bGUubGVmdC4lXT1cInByb2dyZXNzTGVmdFwiXHJcbiAgICAgICAgICAgIFtzdHlsZS53aWR0aF09XCJwcm9ncmVzc1dpZHRoXCJcclxuICAgICAgICA+PC9kaXY+XHJcbiAgICAgICAgQGlmIChtdWx0aXBsZSkge1xyXG4gICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInNsaWRlci10aHVtYlwiXHJcbiAgICAgICAgICAgICAgICByb2xlPVwic2xpZGVyXCJcclxuICAgICAgICAgICAgICAgIFtzVG9vbHRpcF09XCJ0b29sdGlwU3RhcnRUZXh0XCJcclxuICAgICAgICAgICAgICAgIFtzaG93RGVsYXldPVwiMFwiXHJcbiAgICAgICAgICAgICAgICBbdGFiaW5kZXhdPVwiZGlzYWJsZWQgPyAtMSA6IHRhYmluZGV4XCJcclxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtdmFsdWVub3ddPVwiZ2V0VGh1bWJWYWx1ZSgnc3RhcnQnKVwiXHJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLXZhbHVlbWluXT1cImdldFRodW1iTWluKCdzdGFydCcpXCJcclxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtdmFsdWVtYXhdPVwiZ2V0VGh1bWJNYXgoJ3N0YXJ0JylcIlxyXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCIncGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLnNsaWRlcl9taW5fdmFsdWUnIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiZGlzYWJsZWQgfHwgbnVsbFwiXHJcbiAgICAgICAgICAgICAgICAobW91c2Vkb3duKT1cIm9uTW91c2VEb3duKCRldmVudCwgJ3N0YXJ0JylcIlxyXG4gICAgICAgICAgICAgICAgKGtleWRvd24pPVwib25UaHVtYktleWRvd24oJGV2ZW50LCAnc3RhcnQnKVwiXHJcbiAgICAgICAgICAgICAgICBbc3R5bGUubGVmdC4lXT1cInN0YXJ0VmFsdWVcIlxyXG4gICAgICAgICAgICA+PC9kaXY+XHJcbiAgICAgICAgfVxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgICAgW3NUb29sdGlwXT1cInRvb2x0aXBFbmRUZXh0XCJcclxuICAgICAgICAgICAgY2xhc3M9XCJzbGlkZXItdGh1bWJcIlxyXG4gICAgICAgICAgICByb2xlPVwic2xpZGVyXCJcclxuICAgICAgICAgICAgW3Nob3dEZWxheV09XCIwXCJcclxuICAgICAgICAgICAgW3RhYmluZGV4XT1cImRpc2FibGVkID8gLTEgOiB0YWJpbmRleFwiXHJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtdmFsdWVub3ddPVwiZ2V0VGh1bWJWYWx1ZSgnZW5kJylcIlxyXG4gICAgICAgICAgICBbYXR0ci5hcmlhLXZhbHVlbWluXT1cImdldFRodW1iTWluKCdlbmQnKVwiXHJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtdmFsdWVtYXhdPVwiZ2V0VGh1bWJNYXgoJ2VuZCcpXCJcclxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJcclxuICAgICAgICAgICAgICAgIChtdWx0aXBsZVxyXG4gICAgICAgICAgICAgICAgICAgID8gJ3BsYXRmb3JtLmFuZ3VsYXJfY29tcG9uZW50cy5zbGlkZXJfbWF4X3ZhbHVlJ1xyXG4gICAgICAgICAgICAgICAgICAgIDogJ3BsYXRmb3JtLmFuZ3VsYXJfY29tcG9uZW50cy5zbGlkZXJfdmFsdWUnKSB8IHRyYW5zbGF0ZVxyXG4gICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cImRpc2FibGVkIHx8IG51bGxcIlxyXG4gICAgICAgICAgICAobW91c2Vkb3duKT1cIm9uTW91c2VEb3duKCRldmVudCwgJ2VuZCcpXCJcclxuICAgICAgICAgICAgKGtleWRvd24pPVwib25UaHVtYktleWRvd24oJGV2ZW50LCAnZW5kJylcIlxyXG4gICAgICAgICAgICBbc3R5bGUubGVmdC4lXT1cImVuZFZhbHVlXCJcclxuICAgICAgICA+PC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJmb290ZXJcIj5cclxuICAgICAgICA8c3Bhbj57eyBtaW5WYWx1ZUxhYmVsIHx8IG1pbiB9fTwvc3Bhbj5cclxuICAgICAgICA8c3Bhbj57eyBtYXhWYWx1ZUxhYmVsIHx8IG1heCB9fTwvc3Bhbj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19
|
|
@@ -4,7 +4,7 @@ import * as i0 from "@angular/core";
|
|
|
4
4
|
export class SliderModule {
|
|
5
5
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SliderModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
6
6
|
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.14", ngImport: i0, type: SliderModule, imports: [SliderComponent], exports: [SliderComponent] });
|
|
7
|
-
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SliderModule });
|
|
7
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SliderModule, imports: [SliderComponent] });
|
|
8
8
|
}
|
|
9
9
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SliderModule, decorators: [{
|
|
10
10
|
type: NgModule,
|
|
@@ -13,4 +13,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
13
13
|
exports: [SliderComponent],
|
|
14
14
|
}]
|
|
15
15
|
}] });
|
|
16
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpZGVyLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItY29tcG9uZW50cy9zbGlkZXIvc3JjL2xpYi9zbGlkZXIvc2xpZGVyLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXpDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7QUFNckQsTUFBTSxPQUFPLFlBQVk7d0dBQVosWUFBWTt5R0FBWixZQUFZLFlBSFgsZUFBZSxhQUNmLGVBQWU7eUdBRWhCLFlBQVksWUFIWCxlQUFlOzs0RkFHaEIsWUFBWTtrQkFKeEIsUUFBUTttQkFBQztvQkFDTixPQUFPLEVBQUUsQ0FBQyxlQUFlLENBQUM7b0JBQzFCLE9BQU8sRUFBRSxDQUFDLGVBQWUsQ0FBQztpQkFDN0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IHsgU2xpZGVyQ29tcG9uZW50IH0gZnJvbSAnLi9zbGlkZXIuY29tcG9uZW50JztcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgICBpbXBvcnRzOiBbU2xpZGVyQ29tcG9uZW50XSxcclxuICAgIGV4cG9ydHM6IFtTbGlkZXJDb21wb25lbnRdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2xpZGVyTW9kdWxlIHt9XHJcbiJdfQ==
|