@snabcentr/client-ui 4.16.9 → 4.16.10-profstroy
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/alerts/confirm-alert/sc-confirm-alert.component.d.ts +22 -0
- package/alerts/index.d.ts +1 -0
- package/cart/add-or-editing-cart-item-dialog/sc-add-or-editing-cart-item-dialog.component.d.ts +1 -1
- package/cart/sc-cart-add-products-from-csv-dialog/sc-cart-add-products-from-csv-dialog.component.d.ts +3 -3
- package/catalog/input-quantity/sc-input-quantity.component.d.ts +17 -1
- package/esm2022/alerts/confirm-alert/sc-confirm-alert.component.mjs +29 -0
- package/esm2022/alerts/index.mjs +2 -0
- package/esm2022/cart/add-or-editing-cart-item-dialog/sc-add-or-editing-cart-item-dialog.component.mjs +4 -3
- package/esm2022/cart/sc-cart-add-products-from-csv-dialog/sc-cart-add-products-from-csv-dialog.component.mjs +5 -16
- package/esm2022/catalog/input-quantity/sc-input-quantity.component.mjs +24 -4
- package/esm2022/helpers/sc-api-error-helper.mjs +25 -0
- package/esm2022/helpers/sc-file-helper.mjs +29 -0
- package/esm2022/order/draft/helpers/sc-draft-list-helper.mjs +83 -0
- package/esm2022/order/draft/models/sc-i-draft-list-item.mjs +2 -0
- package/esm2022/order/draft/profstroy/actualization-panel/sc-profstroy-actualization-panel.component.mjs +73 -0
- package/esm2022/order/draft/profstroy/badge/sc-profstroy-badge.component.mjs +21 -0
- package/esm2022/order/draft/profstroy/badges/sc-profstroy-draft-badges.component.mjs +31 -0
- package/esm2022/order/draft/profstroy/create-dialog/sc-profstroy-draft-create-dialog.component.mjs +139 -0
- package/esm2022/order/draft/profstroy/enums/sc-profstroy-draft-state.mjs +32 -0
- package/esm2022/order/draft/profstroy/helpers/sc-profstroy-draft-helper.mjs +94 -0
- package/esm2022/order/draft/profstroy/index.mjs +8 -0
- package/esm2022/order/draft/profstroy/models/sc-i-profstroy-draft-state-view.mjs +2 -0
- package/esm2022/order/draft/sc-draft.component.mjs +148 -14
- package/esm2022/order/draft/services/sc-draft-expiration-clock.service.mjs +42 -0
- package/esm2022/order/draft/services/sc-draft-list-updates.service.mjs +288 -0
- package/esm2022/order/index.mjs +6 -1
- package/esm2022/order/new-order-items/sc-new-order-items.component.mjs +11 -3
- package/esm2022/order/order-form/sc-order-form.component.mjs +4 -2
- package/esm2022/order/order-item/sc-order-item.component.mjs +37 -5
- package/esm2022/order/order-items-list/sc-order-items-list.component.mjs +180 -47
- package/esm2022/order/order-items-list-by-stock/sc-order-items-list-by-stock.component.mjs +1 -1
- package/esm2022/order/order-items-list-with-actions/sc-order-items-list-with-actions.component.mjs +15 -3
- package/esm2022/pipes/sc-format-date.mjs +1 -1
- package/esm2022/providers/sc-date-formatter.mjs +1 -1
- package/esm2022/public-api.mjs +2 -1
- package/fesm2022/snabcentr-client-ui.mjs +1273 -122
- package/fesm2022/snabcentr-client-ui.mjs.map +1 -1
- package/helpers/sc-api-error-helper.d.ts +18 -0
- package/helpers/sc-file-helper.d.ts +13 -0
- package/order/draft/helpers/sc-draft-list-helper.d.ts +51 -0
- package/order/draft/models/sc-i-draft-list-item.d.ts +14 -0
- package/order/draft/profstroy/actualization-panel/sc-profstroy-actualization-panel.component.d.ts +58 -0
- package/order/draft/profstroy/badge/sc-profstroy-badge.component.d.ts +12 -0
- package/order/draft/profstroy/badges/sc-profstroy-draft-badges.component.d.ts +21 -0
- package/order/draft/profstroy/create-dialog/sc-profstroy-draft-create-dialog.component.d.ts +65 -0
- package/order/draft/profstroy/enums/sc-profstroy-draft-state.d.ts +29 -0
- package/order/draft/profstroy/helpers/sc-profstroy-draft-helper.d.ts +33 -0
- package/order/draft/profstroy/index.d.ts +7 -0
- package/order/draft/profstroy/models/sc-i-profstroy-draft-state-view.d.ts +17 -0
- package/order/draft/sc-draft.component.d.ts +73 -1
- package/order/draft/services/sc-draft-expiration-clock.service.d.ts +29 -0
- package/order/draft/services/sc-draft-list-updates.service.d.ts +158 -0
- package/order/index.d.ts +5 -0
- package/order/new-order-items/sc-new-order-items.component.d.ts +9 -1
- package/order/order-form/sc-order-form.component.d.ts +1 -0
- package/order/order-item/sc-order-item.component.d.ts +25 -1
- package/order/order-items-list/sc-order-items-list.component.d.ts +87 -9
- package/order/order-items-list-with-actions/sc-order-items-list-with-actions.component.d.ts +13 -1
- package/package.json +2 -2
- package/pipes/sc-format-date.d.ts +1 -1
- package/providers/sc-date-formatter.d.ts +1 -1
- package/public-api.d.ts +1 -0
- package/release_notes.tmp +1 -1
- package/styles/tailwind/tailwind.scss +41 -0
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
/* eslint-disable no-param-reassign */
|
|
2
2
|
import { AsyncPipe } from '@angular/common';
|
|
3
|
-
import { ChangeDetectionStrategy, Component, computed, DestroyRef, inject, Input, input, signal } from '@angular/core';
|
|
3
|
+
import { ChangeDetectionStrategy, Component, computed, DestroyRef, effect, inject, Input, input, signal, untracked } from '@angular/core';
|
|
4
4
|
import { outputFromObservable, takeUntilDestroyed, toObservable, toSignal } from '@angular/core/rxjs-interop';
|
|
5
5
|
import { FormControl, FormGroup, FormsModule, ReactiveFormsModule } from '@angular/forms';
|
|
6
|
-
import { SC_ORDER_LOADER, ScNumberHelper, ScUnitsHelper } from '@snabcentr/client-core';
|
|
6
|
+
import { SC_ORDER_LOADER, ScNumberHelper, ScOrderItem, ScOrderItemsGroup, ScUnitsHelper } from '@snabcentr/client-core';
|
|
7
7
|
import { TuiCurrencyPipe } from '@taiga-ui/addon-commerce';
|
|
8
|
-
import { TuiButton, TuiFormatNumberPipe, TuiLabel } from '@taiga-ui/core';
|
|
9
|
-
import { TuiButtonLoading, TuiCheckbox } from '@taiga-ui/kit';
|
|
10
|
-
import {
|
|
8
|
+
import { TuiAlertService, TuiButton, TuiDialogService, TuiFormatNumberPipe, TuiLabel } from '@taiga-ui/core';
|
|
9
|
+
import { TUI_CONFIRM, TuiButtonLoading, TuiCheckbox } from '@taiga-ui/kit';
|
|
10
|
+
import { filter, finalize, map, noop, of, switchMap } from 'rxjs';
|
|
11
11
|
import { ScPrintDirective } from '../../directives';
|
|
12
12
|
import { SC_DIALOG_SERVICE_TOKEN } from '../../providers';
|
|
13
13
|
import { SC_ORDER_OPTIONS } from '../directives/sc-order-options';
|
|
@@ -18,6 +18,10 @@ import * as i1 from "@angular/forms";
|
|
|
18
18
|
* Компонент списка товаров корзины, заказа или черновика.
|
|
19
19
|
*/
|
|
20
20
|
export class ScOrderItemsListComponent {
|
|
21
|
+
/**
|
|
22
|
+
* Инициализирует экземпляр класса {@link ScOrderItemsListComponent}.
|
|
23
|
+
* Входы выбора и пометки недоступных позиций могут прийти после списка позиций, поэтому при их изменении выбор синхронизируется заново.
|
|
24
|
+
*/
|
|
21
25
|
constructor() {
|
|
22
26
|
/**
|
|
23
27
|
* Внутренний сигнал списка элементов корзины (товаров).
|
|
@@ -31,6 +35,43 @@ export class ScOrderItemsListComponent {
|
|
|
31
35
|
* Включить редактирование позиций.
|
|
32
36
|
*/
|
|
33
37
|
this.editable = input(false);
|
|
38
|
+
/**
|
|
39
|
+
* Признак вывода позиций по группам (группа позиции или «Без группы») с заголовками и итогами. Без признака позиции выводятся одним списком без заголовков.
|
|
40
|
+
*/
|
|
41
|
+
this.grouped = input(false);
|
|
42
|
+
/**
|
|
43
|
+
* Признак, что позиции, которые не попадут в заказ, помечаются примечанием и не выбираются. Неактивные позиции приглушаются и зачёркиваются.
|
|
44
|
+
*/
|
|
45
|
+
this.markUnavailable = input(false);
|
|
46
|
+
/**
|
|
47
|
+
* Признак, что цена за единицу берётся из позиции, а не из текущей цены товара.
|
|
48
|
+
*/
|
|
49
|
+
this.useLinePrice = input(false);
|
|
50
|
+
/**
|
|
51
|
+
* Признак, что параметры позиции меняются в диалоге товара: диалог доступен у любой активной позиции, а количество и метраж измеряемых товаров
|
|
52
|
+
* меняются только в нём, даже если метраж ещё не задан.
|
|
53
|
+
*/
|
|
54
|
+
this.measuredInDialog = input(false);
|
|
55
|
+
/**
|
|
56
|
+
* Откуда удаляется позиция для текста подтверждения, например «из черновика». Если не задано, позиция удаляется без подтверждения.
|
|
57
|
+
* Тот же текст используется в предупреждении о нулевом количестве.
|
|
58
|
+
*/
|
|
59
|
+
this.deleteConfirmationTarget = input(null);
|
|
60
|
+
/**
|
|
61
|
+
* Подпись итоговой суммы.
|
|
62
|
+
*/
|
|
63
|
+
this.totalLabel = input('Итого');
|
|
64
|
+
/**
|
|
65
|
+
* Позиции, разбитые на группы. Без группировки все позиции идут одной группой без заголовка.
|
|
66
|
+
*/
|
|
67
|
+
this.groups = computed(() => {
|
|
68
|
+
const items = this.itemsSignal();
|
|
69
|
+
return this.grouped() ? ScOrderItemsGroup.fromItems(items) : [new ScOrderItemsGroup('', items)];
|
|
70
|
+
});
|
|
71
|
+
/**
|
|
72
|
+
* Идентификаторы позиций, изменение или удаление которых ждёт очереди или выполняется.
|
|
73
|
+
*/
|
|
74
|
+
this.pendingItemsIds = signal(new Set());
|
|
34
75
|
/**
|
|
35
76
|
* Внутренняя группа формы для выбора позиций.
|
|
36
77
|
*/
|
|
@@ -46,11 +87,12 @@ export class ScOrderItemsListComponent {
|
|
|
46
87
|
initialValue: [],
|
|
47
88
|
});
|
|
48
89
|
/**
|
|
49
|
-
* Состояние флага «Выбрать все»: `true`, если выбраны все позиции, `false`, если ни
|
|
90
|
+
* Состояние флага «Выбрать все»: `true`, если выбраны все доступные для выбора позиции, `false`, если ни одной или выбирать нечего,
|
|
91
|
+
* и `null`, если только часть.
|
|
50
92
|
*/
|
|
51
93
|
this.allItemsSelected = computed(() => {
|
|
52
94
|
const checkedList = this.itemsIds().map(([, checked]) => checked);
|
|
53
|
-
if (checkedList.every(Boolean)) {
|
|
95
|
+
if (checkedList.length > 0 && checkedList.every(Boolean)) {
|
|
54
96
|
return true;
|
|
55
97
|
}
|
|
56
98
|
return checkedList.some(Boolean) ? null : false;
|
|
@@ -75,7 +117,7 @@ export class ScOrderItemsListComponent {
|
|
|
75
117
|
const items = this.itemsSignal();
|
|
76
118
|
const selectedItemsIds = this.selectedItemsIds();
|
|
77
119
|
const selectable = this.selectable();
|
|
78
|
-
return
|
|
120
|
+
return ScOrderItem.getCostSum(items.filter((item) => !selectable || selectedItemsIds.includes(item.id)));
|
|
79
121
|
});
|
|
80
122
|
/**
|
|
81
123
|
* Сервис получения и редактирования списка товаров заказа (корзина / заказ / черновик = заказ).
|
|
@@ -99,6 +141,21 @@ export class ScOrderItemsListComponent {
|
|
|
99
141
|
* Предоставляется родителем через токен {@link SC_DIALOG_SERVICE_TOKEN}.
|
|
100
142
|
*/
|
|
101
143
|
this.scDialogService = inject(SC_DIALOG_SERVICE_TOKEN);
|
|
144
|
+
/**
|
|
145
|
+
* Сервис диалоговых окон Taiga для подтверждений.
|
|
146
|
+
*/
|
|
147
|
+
this.dialogService = inject(TuiDialogService);
|
|
148
|
+
/**
|
|
149
|
+
* Сервис уведомлений.
|
|
150
|
+
*/
|
|
151
|
+
this.alerts = inject(TuiAlertService);
|
|
152
|
+
effect(() => {
|
|
153
|
+
this.markUnavailable();
|
|
154
|
+
this.selectable();
|
|
155
|
+
untracked(() => {
|
|
156
|
+
this.syncSelectionControls();
|
|
157
|
+
});
|
|
158
|
+
});
|
|
102
159
|
}
|
|
103
160
|
/**
|
|
104
161
|
* Список элементов корзины (товаров). При установке синхронно обновляет контролы выбора в форме.
|
|
@@ -109,6 +166,7 @@ export class ScOrderItemsListComponent {
|
|
|
109
166
|
}
|
|
110
167
|
/**
|
|
111
168
|
* Синхронизирует контролы формы выбора с текущим списком товаров: удаляет контролы для отсутствующих id, добавляет для новых.
|
|
169
|
+
* Контролы меняются без событий, а значение группы пересчитывается один раз в конце: на заявках в сотни позиций это заметно.
|
|
112
170
|
*/
|
|
113
171
|
syncSelectionControls() {
|
|
114
172
|
if (!this.selectable()) {
|
|
@@ -118,70 +176,100 @@ export class ScOrderItemsListComponent {
|
|
|
118
176
|
const currentIds = new Set(currentItems.map((item) => item.id));
|
|
119
177
|
Object.keys(this.selectionFormGroup.controls).forEach((name) => {
|
|
120
178
|
if (!currentIds.has(name)) {
|
|
121
|
-
this.selectionFormGroup.removeControl(name);
|
|
179
|
+
this.selectionFormGroup.removeControl(name, { emitEvent: false });
|
|
122
180
|
}
|
|
123
181
|
});
|
|
124
182
|
currentItems.forEach((item) => {
|
|
125
|
-
|
|
126
|
-
|
|
183
|
+
const control = this.selectionFormGroup.get(item.id);
|
|
184
|
+
const isSelectable = !this.markUnavailable() || item.isOrderable;
|
|
185
|
+
if (!control) {
|
|
186
|
+
this.selectionFormGroup.addControl(item.id, new FormControl({ value: isSelectable, disabled: !isSelectable }, { nonNullable: true }), { emitEvent: false });
|
|
187
|
+
}
|
|
188
|
+
else if (!isSelectable && control.enabled) {
|
|
189
|
+
control.setValue(false, { emitEvent: false });
|
|
190
|
+
control.disable({ emitEvent: false });
|
|
191
|
+
}
|
|
192
|
+
else if (isSelectable && control.disabled) {
|
|
193
|
+
control.enable({ emitEvent: false });
|
|
194
|
+
control.setValue(true, { emitEvent: false });
|
|
127
195
|
}
|
|
128
196
|
});
|
|
197
|
+
this.selectionFormGroup.updateValueAndValidity();
|
|
129
198
|
}
|
|
130
199
|
/**
|
|
131
|
-
* Выбирает все позиции или снимает выбор со всех.
|
|
200
|
+
* Выбирает все доступные для выбора позиции или снимает выбор со всех.
|
|
132
201
|
*
|
|
133
202
|
* @param event Событие изменения флага выбора всех позиций.
|
|
134
203
|
*/
|
|
135
204
|
selectAllChangeHandler(event) {
|
|
136
205
|
const { checked } = event.target;
|
|
137
|
-
|
|
206
|
+
const enabledIds = Object.entries(this.selectionFormGroup.controls)
|
|
207
|
+
.filter(([, control]) => control.enabled)
|
|
208
|
+
.map(([id]) => id);
|
|
209
|
+
this.selectionFormGroup.patchValue(Object.fromEntries(enabledIds.map((id) => [id, checked])));
|
|
138
210
|
}
|
|
139
211
|
/**
|
|
140
|
-
*
|
|
212
|
+
* Возвращает признак, что позиция приглушена: она неактивна или не выбрана для заказа.
|
|
213
|
+
*
|
|
214
|
+
* @param item Позиция.
|
|
215
|
+
*/
|
|
216
|
+
isItemDimmed(item) {
|
|
217
|
+
const isUnselected = this.selectable() && !this.selectionFormGroup.get(item.id)?.value;
|
|
218
|
+
return this.markUnavailable() ? item.isInactive || (item.isOrderable && isUnselected) : isUnselected;
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Возвращает признак, что количество и метраж товара позиции меняются в диалоге товара.
|
|
222
|
+
*
|
|
223
|
+
* @param item Позиция.
|
|
224
|
+
*/
|
|
225
|
+
isEditedInDialog(item) {
|
|
226
|
+
return this.measuredInDialog() && ScUnitsHelper.productIsMeasurable(item.product);
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* Удаляет позицию, при необходимости после подтверждения. Сообщение об ошибке показывает перехватчик приложения.
|
|
141
230
|
*
|
|
142
231
|
* @param item Позиция товара для удаления.
|
|
143
|
-
* @param priceCard Компонент карточки товара.
|
|
144
232
|
*/
|
|
145
|
-
deleteItem(item
|
|
146
|
-
if (!this.canEdit()) {
|
|
233
|
+
deleteItem(item) {
|
|
234
|
+
if (!this.canEdit() || this.pendingItemsIds().has(item.id)) {
|
|
147
235
|
return;
|
|
148
236
|
}
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
.
|
|
152
|
-
.pipe(
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
});
|
|
156
|
-
return of();
|
|
157
|
-
}), finalize(() => {
|
|
158
|
-
priceCard.showLoader.set(false);
|
|
237
|
+
this.confirmDelete$(item)
|
|
238
|
+
.pipe(switchMap(() => {
|
|
239
|
+
this.setItemPending(item.id, true);
|
|
240
|
+
return this.orderItemsListLoader.deleteProduct$(item, this.orderOptions?.orderId()).pipe(finalize(() => {
|
|
241
|
+
this.setItemPending(item.id, false);
|
|
242
|
+
}));
|
|
159
243
|
}), takeUntilDestroyed(this.destroyRef))
|
|
160
|
-
.subscribe();
|
|
244
|
+
.subscribe({ error: noop });
|
|
161
245
|
}
|
|
162
246
|
/**
|
|
163
|
-
* Обновляет количество товара.
|
|
247
|
+
* Обновляет количество товара. Количество неактивной позиции не меняется. Пустое или нулевое значение возвращается к сохранённому количеству.
|
|
164
248
|
*
|
|
165
249
|
* @param newQuantity Новое значение количества товара.
|
|
166
250
|
* @param priceCard Компонент карточки товара.
|
|
167
251
|
*/
|
|
168
252
|
patchItem(newQuantity, priceCard) {
|
|
169
|
-
|
|
253
|
+
const { orderItem } = priceCard;
|
|
254
|
+
if (!this.canEdit() || !orderItem || !priceCard.product || orderItem.isInactive) {
|
|
255
|
+
return;
|
|
256
|
+
}
|
|
257
|
+
if (!newQuantity) {
|
|
258
|
+
priceCard.quantityControl.patchValue(orderItem.quantity, { emitEvent: false });
|
|
259
|
+
this.warnEmptyQuantity();
|
|
170
260
|
return;
|
|
171
261
|
}
|
|
172
|
-
|
|
262
|
+
this.setItemPending(orderItem.id, true);
|
|
173
263
|
this.orderItemsListLoader
|
|
174
|
-
.updateProduct$(
|
|
175
|
-
.pipe(
|
|
176
|
-
|
|
177
|
-
priceCard.quantityControl.patchValue(priceCard.orderItem.quantity, {
|
|
178
|
-
emitEvent: false,
|
|
179
|
-
});
|
|
180
|
-
return of();
|
|
181
|
-
}), finalize(() => {
|
|
182
|
-
priceCard.showLoader.set(false);
|
|
264
|
+
.updateProduct$(orderItem.id, { quantity: newQuantity }, this.orderOptions?.orderId())
|
|
265
|
+
.pipe(finalize(() => {
|
|
266
|
+
this.setItemPending(orderItem.id, false);
|
|
183
267
|
}), takeUntilDestroyed(this.destroyRef))
|
|
184
|
-
.subscribe(
|
|
268
|
+
.subscribe({
|
|
269
|
+
error: () => {
|
|
270
|
+
priceCard.quantityControl.patchValue((priceCard.orderItem ?? orderItem).quantity, { emitEvent: false });
|
|
271
|
+
},
|
|
272
|
+
});
|
|
185
273
|
}
|
|
186
274
|
/**
|
|
187
275
|
* Открывает модальное окно описания товара.
|
|
@@ -196,7 +284,7 @@ export class ScOrderItemsListComponent {
|
|
|
196
284
|
}
|
|
197
285
|
}
|
|
198
286
|
/**
|
|
199
|
-
* Открывает модальное окно изменения товара или его конфигуратора.
|
|
287
|
+
* Открывает модальное окно изменения товара или его конфигуратора. Если параметры позиции меняются в диалоге, окно товара открывается и у штучного товара.
|
|
200
288
|
*
|
|
201
289
|
* @param item Позиция товара.
|
|
202
290
|
*/
|
|
@@ -205,7 +293,7 @@ export class ScOrderItemsListComponent {
|
|
|
205
293
|
if (isConfigurator) {
|
|
206
294
|
this.scDialogService.openConfiguratorDialog(item.product, item, this.orderOptions?.orderId());
|
|
207
295
|
}
|
|
208
|
-
else if (ScUnitsHelper.productIsMeasurable(item.product)) {
|
|
296
|
+
else if (this.measuredInDialog() || ScUnitsHelper.productIsMeasurable(item.product)) {
|
|
209
297
|
this.scDialogService.openAddOrEditingCartItemDialog(item.product, item, this.orderOptions?.orderId(), true);
|
|
210
298
|
}
|
|
211
299
|
}
|
|
@@ -217,8 +305,53 @@ export class ScOrderItemsListComponent {
|
|
|
217
305
|
openPriceHistoryChartDialog(product) {
|
|
218
306
|
this.scDialogService.openPriceHistoryChartDialog(product);
|
|
219
307
|
}
|
|
308
|
+
/**
|
|
309
|
+
* Возвращает {@link Observable}, который выдаёт значение, когда удаление позиции подтверждено или подтверждение не требуется.
|
|
310
|
+
*
|
|
311
|
+
* @param item Удаляемая позиция.
|
|
312
|
+
*/
|
|
313
|
+
confirmDelete$(item) {
|
|
314
|
+
const target = this.deleteConfirmationTarget();
|
|
315
|
+
if (!target) {
|
|
316
|
+
return of(true);
|
|
317
|
+
}
|
|
318
|
+
return this.dialogService
|
|
319
|
+
.open(TUI_CONFIRM, {
|
|
320
|
+
label: `Удалить позицию «${item.product.name}» ${target}?`,
|
|
321
|
+
data: { yes: 'Да, удалить', no: 'Нет, оставить' },
|
|
322
|
+
})
|
|
323
|
+
.pipe(filter(Boolean));
|
|
324
|
+
}
|
|
325
|
+
/**
|
|
326
|
+
* Отмечает позицию как ожидающую ответа или снимает отметку.
|
|
327
|
+
*
|
|
328
|
+
* @param id Идентификатор позиции.
|
|
329
|
+
* @param isPending Признак ожидания.
|
|
330
|
+
*/
|
|
331
|
+
setItemPending(id, isPending) {
|
|
332
|
+
this.pendingItemsIds.update((ids) => {
|
|
333
|
+
const next = new Set(ids);
|
|
334
|
+
if (isPending) {
|
|
335
|
+
next.add(id);
|
|
336
|
+
}
|
|
337
|
+
else {
|
|
338
|
+
next.delete(id);
|
|
339
|
+
}
|
|
340
|
+
return next;
|
|
341
|
+
});
|
|
342
|
+
}
|
|
343
|
+
/**
|
|
344
|
+
* Предупреждает, что количество не может быть пустым или нулевым, а убрать позицию можно удалением. Поле возвращается к сохранённому количеству
|
|
345
|
+
* в любом списке, предупреждение показывается только в списках с подтверждением удаления.
|
|
346
|
+
*/
|
|
347
|
+
warnEmptyQuantity() {
|
|
348
|
+
const target = this.deleteConfirmationTarget();
|
|
349
|
+
if (target) {
|
|
350
|
+
this.alerts.open(`Количество должно быть больше нуля. Чтобы убрать позицию ${target}, удалите её.`, { appearance: 'warning' }).subscribe();
|
|
351
|
+
}
|
|
352
|
+
}
|
|
220
353
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScOrderItemsListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
221
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: ScOrderItemsListComponent, isStandalone: true, selector: "sc-order-items-list", inputs: { selectable: { classPropertyName: "selectable", publicName: "selectable", isSignal: true, isRequired: false, transformFunction: null }, editable: { classPropertyName: "editable", publicName: "editable", isSignal: true, isRequired: false, transformFunction: null }, items: { classPropertyName: "items", publicName: "items", isSignal: false, isRequired: true, transformFunction: null } }, outputs: { selectedItemsIdsChange: "selectedItemsIdsChange" }, ngImport: i0, template: "<div\n [formGroup]=\"selectionFormGroup\"\n class=\"flex flex-col gap-5\"\n>\n <!-- \u0424\u043B\u0430\u0433 \u0432\u044B\u0431\u043E\u0440\u0430 \u0432\u0441\u0435\u0445 \u043F\u043E\u0437\u0438\u0446\u0438\u0439. -->\n @if (selectable() && itemsSignal().length) {\n <label\n tuiLabel\n scPrint=\"defaultNoPrint\"\n class=\"self-start\"\n >\n <input\n tuiCheckbox\n type=\"checkbox\"\n size=\"m\"\n [ngModel]=\"allItemsSelected()\"\n [ngModelOptions]=\"{ standalone: true }\"\n (change)=\"selectAllChangeHandler($event)\"\n />\n \u0412\u044B\u0431\u0440\u0430\u0442\u044C \u0432\u0441\u0435\n </label>\n }\n\n @for (
|
|
354
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: ScOrderItemsListComponent, isStandalone: true, selector: "sc-order-items-list", inputs: { selectable: { classPropertyName: "selectable", publicName: "selectable", isSignal: true, isRequired: false, transformFunction: null }, editable: { classPropertyName: "editable", publicName: "editable", isSignal: true, isRequired: false, transformFunction: null }, grouped: { classPropertyName: "grouped", publicName: "grouped", isSignal: true, isRequired: false, transformFunction: null }, markUnavailable: { classPropertyName: "markUnavailable", publicName: "markUnavailable", isSignal: true, isRequired: false, transformFunction: null }, useLinePrice: { classPropertyName: "useLinePrice", publicName: "useLinePrice", isSignal: true, isRequired: false, transformFunction: null }, measuredInDialog: { classPropertyName: "measuredInDialog", publicName: "measuredInDialog", isSignal: true, isRequired: false, transformFunction: null }, deleteConfirmationTarget: { classPropertyName: "deleteConfirmationTarget", publicName: "deleteConfirmationTarget", isSignal: true, isRequired: false, transformFunction: null }, totalLabel: { classPropertyName: "totalLabel", publicName: "totalLabel", isSignal: true, isRequired: false, transformFunction: null }, items: { classPropertyName: "items", publicName: "items", isSignal: false, isRequired: true, transformFunction: null } }, outputs: { selectedItemsIdsChange: "selectedItemsIdsChange" }, ngImport: i0, template: "<div\n [formGroup]=\"selectionFormGroup\"\n class=\"flex flex-col gap-5\"\n>\n <!-- \u0424\u043B\u0430\u0433 \u0432\u044B\u0431\u043E\u0440\u0430 \u0432\u0441\u0435\u0445 \u043F\u043E\u0437\u0438\u0446\u0438\u0439. -->\n @if (selectable() && itemsSignal().length) {\n <label\n tuiLabel\n scPrint=\"defaultNoPrint\"\n class=\"self-start\"\n >\n <input\n tuiCheckbox\n type=\"checkbox\"\n size=\"m\"\n [ngModel]=\"allItemsSelected()\"\n [ngModelOptions]=\"{ standalone: true }\"\n [disabled]=\"selectionFormGroup.disabled\"\n (change)=\"selectAllChangeHandler($event)\"\n />\n \u0412\u044B\u0431\u0440\u0430\u0442\u044C \u0432\u0441\u0435\n </label>\n }\n\n @for (group of groups(); track group.name) {\n <!-- \u0417\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A \u0433\u0440\u0443\u043F\u043F\u044B \u043F\u043E\u0437\u0438\u0446\u0438\u0439. -->\n @if (group.name) {\n <div class=\"flex flex-wrap items-end justify-between gap-x-4 gap-y-1 border-b border-tui-base-03 pb-2\">\n <div class=\"flex min-w-0 flex-col\">\n <span class=\"break-words text-body-l-bold\">{{ group.name }}</span>\n <span class=\"text-body-s text-tui-text-02\">\u043F\u043E\u0437\u0438\u0446\u0438\u0439: {{ group.items.length }}, \u0432 \u0437\u0430\u043A\u0430\u0437: {{ group.orderableCount }}</span>\n </div>\n <span class=\"whitespace-nowrap text-body-m-bold\">{{ group.orderableSum | tuiFormatNumber: moneyFormat | async }} {{ 'RUB' | tuiCurrency }}</span>\n </div>\n }\n\n @for (item of group.items; track item.id) {\n @if ($index !== 0) {\n <hr class=\"mt-auto h-px w-full bg-tui-clear\" />\n }\n\n <div class=\"flex items-center gap-4 relative\">\n @let isActive = !selectable() || selectionFormGroup.get(item.id)?.value || (markUnavailable() && !item.isOrderable);\n @let isPending = pendingItemsIds().has(item.id);\n @let editedInDialog = isEditedInDialog(item);\n\n <!-- \u0427\u0435\u043A\u0431\u043E\u043A\u0441 \u0432\u044B\u0431\u043E\u0440\u0430 \u0442\u043E\u0432\u0430\u0440\u0430. -->\n @if (selectable()) {\n <input\n tuiCheckbox\n type=\"checkbox\"\n size=\"m\"\n [formControlName]=\"item.id\"\n />\n }\n\n <!-- \u041A\u0430\u0440\u0442\u043E\u0447\u043A\u0430 \u0442\u043E\u0432\u0430\u0440\u0430. -->\n <sc-order-item\n #itemComponent\n [product]=\"item.product\"\n [orderItem]=\"item\"\n [showQuantityControl]=\"canEdit() && !item.configurator && !editedInDialog\"\n [isShowEditControls]=\"canEdit()\"\n [useLinePrice]=\"useLinePrice()\"\n [markUnavailable]=\"markUnavailable()\"\n [isPending]=\"isPending\"\n [settingsAvailable]=\"canEdit() && measuredInDialog() && !item.configurator && !item.isInactive\"\n class=\"w-full duration-200\"\n [class.opacity-60]=\"isItemDimmed(item)\"\n (clickCardEvent)=\"openProductInfoDialog(item.product, item, orderOptions?.orderId())\"\n (quantityValueChanges)=\"patchItem($event, itemComponent)\"\n (clickPriceHistoryEvent)=\"openPriceHistoryChartDialog(item.product)\"\n (clickSettings)=\"openSettingsDialog(item)\"\n [class.pointer-events-none]=\"!isActive\"\n />\n\n <!-- \u041A\u043D\u043E\u043F\u043A\u0430 \u0443\u0434\u0430\u043B\u0435\u043D\u0438\u044F \u0442\u043E\u0432\u0430\u0440\u0430. -->\n @if (canEdit()) {\n <button\n tuiIconButton\n iconStart=\"@tui.trash\"\n (click)=\"deleteItem(item)\"\n [loading]=\"isPending\"\n size=\"s\"\n appearance=\"secondary\"\n class=\"!absolute left-1 top-1 lg:!relative lg:left-0 lg:top-0 lg:!self-center\"\n ></button>\n }\n </div>\n }\n }\n\n <!-- \u0424\u0443\u0442\u0435\u0440 \u0441\u043F\u0438\u0441\u043A\u0430. -->\n <div\n scPrint=\"cost\"\n class=\"flex flex-col items-end gap-2.5\"\n >\n @let totalSum = sumSelectedItems();\n <!-- \u0418\u0442\u043E\u0433\u043E\u0432\u0430\u044F \u0441\u0443\u043C\u043C\u0430. -->\n <div class=\"text-base font-bold\">{{ totalLabel() }}: {{ totalSum | tuiFormatNumber: moneyFormat | async }} {{ 'RUB' | tuiCurrency }}</div>\n </div>\n</div>\n", dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: TuiFormatNumberPipe, name: "tuiFormatNumber" }, { kind: "component", type: ScOrderItemComponent, selector: "sc-order-item", inputs: ["isShowEditControls", "useLinePrice", "markUnavailable", "isPending", "settingsAvailable"], outputs: ["clickSettings"] }, { kind: "directive", type: ScPrintDirective, selector: "[scPrint]", inputs: ["scPrint"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: TuiCheckbox, selector: "input[type=\"checkbox\"][tuiCheckbox]", inputs: ["size"] }, { kind: "directive", type: TuiLabel, selector: "label[tuiLabel]" }, { kind: "directive", type: TuiButton, selector: "a[tuiButton],button[tuiButton],a[tuiIconButton],button[tuiIconButton]", inputs: ["size"] }, { kind: "component", type: TuiButtonLoading, selector: "[tuiButton][loading],[tuiIconButton][loading]", inputs: ["size", "loading"] }, { kind: "pipe", type: TuiCurrencyPipe, name: "tuiCurrency" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
222
355
|
}
|
|
223
356
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScOrderItemsListComponent, decorators: [{
|
|
224
357
|
type: Component,
|
|
@@ -234,9 +367,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
234
367
|
TuiButton,
|
|
235
368
|
TuiButtonLoading,
|
|
236
369
|
TuiCurrencyPipe,
|
|
237
|
-
], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n [formGroup]=\"selectionFormGroup\"\n class=\"flex flex-col gap-5\"\n>\n <!-- \u0424\u043B\u0430\u0433 \u0432\u044B\u0431\u043E\u0440\u0430 \u0432\u0441\u0435\u0445 \u043F\u043E\u0437\u0438\u0446\u0438\u0439. -->\n @if (selectable() && itemsSignal().length) {\n <label\n tuiLabel\n scPrint=\"defaultNoPrint\"\n class=\"self-start\"\n >\n <input\n tuiCheckbox\n type=\"checkbox\"\n size=\"m\"\n [ngModel]=\"allItemsSelected()\"\n [ngModelOptions]=\"{ standalone: true }\"\n (change)=\"selectAllChangeHandler($event)\"\n />\n \u0412\u044B\u0431\u0440\u0430\u0442\u044C \u0432\u0441\u0435\n </label>\n }\n\n @for (
|
|
238
|
-
}], propDecorators: { items: [{
|
|
370
|
+
], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n [formGroup]=\"selectionFormGroup\"\n class=\"flex flex-col gap-5\"\n>\n <!-- \u0424\u043B\u0430\u0433 \u0432\u044B\u0431\u043E\u0440\u0430 \u0432\u0441\u0435\u0445 \u043F\u043E\u0437\u0438\u0446\u0438\u0439. -->\n @if (selectable() && itemsSignal().length) {\n <label\n tuiLabel\n scPrint=\"defaultNoPrint\"\n class=\"self-start\"\n >\n <input\n tuiCheckbox\n type=\"checkbox\"\n size=\"m\"\n [ngModel]=\"allItemsSelected()\"\n [ngModelOptions]=\"{ standalone: true }\"\n [disabled]=\"selectionFormGroup.disabled\"\n (change)=\"selectAllChangeHandler($event)\"\n />\n \u0412\u044B\u0431\u0440\u0430\u0442\u044C \u0432\u0441\u0435\n </label>\n }\n\n @for (group of groups(); track group.name) {\n <!-- \u0417\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A \u0433\u0440\u0443\u043F\u043F\u044B \u043F\u043E\u0437\u0438\u0446\u0438\u0439. -->\n @if (group.name) {\n <div class=\"flex flex-wrap items-end justify-between gap-x-4 gap-y-1 border-b border-tui-base-03 pb-2\">\n <div class=\"flex min-w-0 flex-col\">\n <span class=\"break-words text-body-l-bold\">{{ group.name }}</span>\n <span class=\"text-body-s text-tui-text-02\">\u043F\u043E\u0437\u0438\u0446\u0438\u0439: {{ group.items.length }}, \u0432 \u0437\u0430\u043A\u0430\u0437: {{ group.orderableCount }}</span>\n </div>\n <span class=\"whitespace-nowrap text-body-m-bold\">{{ group.orderableSum | tuiFormatNumber: moneyFormat | async }} {{ 'RUB' | tuiCurrency }}</span>\n </div>\n }\n\n @for (item of group.items; track item.id) {\n @if ($index !== 0) {\n <hr class=\"mt-auto h-px w-full bg-tui-clear\" />\n }\n\n <div class=\"flex items-center gap-4 relative\">\n @let isActive = !selectable() || selectionFormGroup.get(item.id)?.value || (markUnavailable() && !item.isOrderable);\n @let isPending = pendingItemsIds().has(item.id);\n @let editedInDialog = isEditedInDialog(item);\n\n <!-- \u0427\u0435\u043A\u0431\u043E\u043A\u0441 \u0432\u044B\u0431\u043E\u0440\u0430 \u0442\u043E\u0432\u0430\u0440\u0430. -->\n @if (selectable()) {\n <input\n tuiCheckbox\n type=\"checkbox\"\n size=\"m\"\n [formControlName]=\"item.id\"\n />\n }\n\n <!-- \u041A\u0430\u0440\u0442\u043E\u0447\u043A\u0430 \u0442\u043E\u0432\u0430\u0440\u0430. -->\n <sc-order-item\n #itemComponent\n [product]=\"item.product\"\n [orderItem]=\"item\"\n [showQuantityControl]=\"canEdit() && !item.configurator && !editedInDialog\"\n [isShowEditControls]=\"canEdit()\"\n [useLinePrice]=\"useLinePrice()\"\n [markUnavailable]=\"markUnavailable()\"\n [isPending]=\"isPending\"\n [settingsAvailable]=\"canEdit() && measuredInDialog() && !item.configurator && !item.isInactive\"\n class=\"w-full duration-200\"\n [class.opacity-60]=\"isItemDimmed(item)\"\n (clickCardEvent)=\"openProductInfoDialog(item.product, item, orderOptions?.orderId())\"\n (quantityValueChanges)=\"patchItem($event, itemComponent)\"\n (clickPriceHistoryEvent)=\"openPriceHistoryChartDialog(item.product)\"\n (clickSettings)=\"openSettingsDialog(item)\"\n [class.pointer-events-none]=\"!isActive\"\n />\n\n <!-- \u041A\u043D\u043E\u043F\u043A\u0430 \u0443\u0434\u0430\u043B\u0435\u043D\u0438\u044F \u0442\u043E\u0432\u0430\u0440\u0430. -->\n @if (canEdit()) {\n <button\n tuiIconButton\n iconStart=\"@tui.trash\"\n (click)=\"deleteItem(item)\"\n [loading]=\"isPending\"\n size=\"s\"\n appearance=\"secondary\"\n class=\"!absolute left-1 top-1 lg:!relative lg:left-0 lg:top-0 lg:!self-center\"\n ></button>\n }\n </div>\n }\n }\n\n <!-- \u0424\u0443\u0442\u0435\u0440 \u0441\u043F\u0438\u0441\u043A\u0430. -->\n <div\n scPrint=\"cost\"\n class=\"flex flex-col items-end gap-2.5\"\n >\n @let totalSum = sumSelectedItems();\n <!-- \u0418\u0442\u043E\u0433\u043E\u0432\u0430\u044F \u0441\u0443\u043C\u043C\u0430. -->\n <div class=\"text-base font-bold\">{{ totalLabel() }}: {{ totalSum | tuiFormatNumber: moneyFormat | async }} {{ 'RUB' | tuiCurrency }}</div>\n </div>\n</div>\n" }]
|
|
371
|
+
}], ctorParameters: () => [], propDecorators: { items: [{
|
|
239
372
|
type: Input,
|
|
240
373
|
args: [{ required: true }]
|
|
241
374
|
}] } });
|
|
242
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Mtb3JkZXItaXRlbXMtbGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtdWkvb3JkZXIvb3JkZXItaXRlbXMtbGlzdC9zYy1vcmRlci1pdGVtcy1saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC11aS9vcmRlci9vcmRlci1pdGVtcy1saXN0L3NjLW9yZGVyLWl0ZW1zLWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM1QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZILE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxrQkFBa0IsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDOUcsT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUYsT0FBTyxFQUFFLGVBQWUsRUFBd0MsY0FBYyxFQUFlLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzNJLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsU0FBUyxFQUFFLG1CQUFtQixFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxNQUFNLE1B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RUQ7Ozs7T0FJRztJQUNPLDJCQUEyQixDQUFDLE9BQStCO1FBQ2pFLElBQUksQ0FBQyxlQUFlLENBQUMsMkJBQTJCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDOUQsQ0FBQzsrR0FwUFEseUJBQXlCO21HQUF6Qix5QkFBeUIsMGhCQ3ZDdEMsbWtIQW1GQSx1Q0QxRFEsU0FBUyx5Q0FDVCxtQkFBbUIsd0RBQ25CLG9CQUFvQixzSEFDcEIsZ0JBQWdCLDBFQUNoQixXQUFXLDJxQkFDWCxtQkFBbUIsZ1ZBQ25CLFdBQVcsb0dBQ1gsUUFBUSw0REFDUixTQUFTLG9JQUNULGdCQUFnQixrSEFDaEIsZUFBZTs7NEZBSVYseUJBQXlCO2tCQW5CckMsU0FBUztpQ0FDTSxJQUFJLFlBQ04scUJBQXFCLFdBRXRCO3dCQUNMLFNBQVM7d0JBQ1QsbUJBQW1CO3dCQUNuQixvQkFBb0I7d0JBQ3BCLGdCQUFnQjt3QkFDaEIsV0FBVzt3QkFDWCxtQkFBbUI7d0JBQ25CLFdBQVc7d0JBQ1gsUUFBUTt3QkFDUixTQUFTO3dCQUNULGdCQUFnQjt3QkFDaEIsZUFBZTtxQkFDbEIsbUJBQ2dCLHVCQUF1QixDQUFDLE1BQU07OEJBNEczQyxLQUFLO3NCQURSLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tcGFyYW0tcmVhc3NpZ24gKi9cblxuaW1wb3J0IHsgQXN5bmNQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGNvbXB1dGVkLCBEZXN0cm95UmVmLCBpbmplY3QsIElucHV0LCBpbnB1dCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBvdXRwdXRGcm9tT2JzZXJ2YWJsZSwgdGFrZVVudGlsRGVzdHJveWVkLCB0b09ic2VydmFibGUsIHRvU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTQ19PUkRFUl9MT0FERVIsIFNjSU9yZGVyRWRpdG9yTG9hZGVyLCBTY0lPcmRlckxvYWRlciwgU2NOdW1iZXJIZWxwZXIsIFNjT3JkZXJJdGVtLCBTY1VuaXRzSGVscGVyIH0gZnJvbSAnQHNuYWJjZW50ci9jbGllbnQtY29yZSc7XG5pbXBvcnQgeyBUdWlDdXJyZW5jeVBpcGUgfSBmcm9tICdAdGFpZ2EtdWkvYWRkb24tY29tbWVyY2UnO1xuaW1wb3J0IHsgVHVpQnV0dG9uLCBUdWlGb3JtYXROdW1iZXJQaXBlLCBUdWlMYWJlbCB9IGZyb20gJ0B0YWlnYS11aS9jb3JlJztcbmltcG9ydCB7IFR1aUJ1dHRvbkxvYWRpbmcsIFR1aUNoZWNrYm94IH0gZnJvbSAnQHRhaWdhLXVpL2tpdCc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBmaW5hbGl6ZSwgbWFwLCBvZiB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBBYnN0cmFjdFNjUHJpY2VDYXJkLCBTY1ByaW50RGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcyc7XG5pbXBvcnQgeyBJU2NEaWFsb2dTZXJ2aWNlLCBTQ19ESUFMT0dfU0VSVklDRV9UT0tFTiB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycyc7XG5pbXBvcnQgeyBTQ19PUkRFUl9PUFRJT05TLCBTY09yZGVyT3B0aW9ucyB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvc2Mtb3JkZXItb3B0aW9ucyc7XG5pbXBvcnQgeyBTY09yZGVySXRlbUNvbXBvbmVudCB9IGZyb20gJy4uL29yZGVyLWl0ZW0vc2Mtb3JkZXItaXRlbS5jb21wb25lbnQnO1xuXG4vKipcbiAqINCa0L7QvNC/0L7QvdC10L3RgiDRgdC/0LjRgdC60LAg0YLQvtCy0LDRgNC+0LIg0LrQvtGA0LfQuNC90YssINC30LDQutCw0LfQsCDQuNC70Lgg0YfQtdGA0L3QvtCy0LjQutCwLlxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHNlbGVjdG9yOiAnc2Mtb3JkZXItaXRlbXMtbGlzdCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3NjLW9yZGVyLWl0ZW1zLWxpc3QuY29tcG9uZW50Lmh0bWwnLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgQXN5bmNQaXBlLFxuICAgICAgICBUdWlGb3JtYXROdW1iZXJQaXBlLFxuICAgICAgICBTY09yZGVySXRlbUNvbXBvbmVudCxcbiAgICAgICAgU2NQcmludERpcmVjdGl2ZSxcbiAgICAgICAgRm9ybXNNb2R1bGUsXG4gICAgICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgICAgIFR1aUNoZWNrYm94LFxuICAgICAgICBUdWlMYWJlbCxcbiAgICAgICAgVHVpQnV0dG9uLFxuICAgICAgICBUdWlCdXR0b25Mb2FkaW5nLFxuICAgICAgICBUdWlDdXJyZW5jeVBpcGUsXG4gICAgXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgU2NPcmRlckl0ZW1zTGlzdENvbXBvbmVudCB7XG4gICAgLyoqXG4gICAgICog0JLQvdGD0YLRgNC10L3QvdC40Lkg0YHQuNCz0L3QsNC7INGB0L/QuNGB0LrQsCDRjdC70LXQvNC10L3RgtC+0LIg0LrQvtGA0LfQuNC90YsgKNGC0L7QstCw0YDQvtCyKS5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgaXRlbXNTaWduYWwgPSBzaWduYWw8U2NPcmRlckl0ZW1bXT4oW10pO1xuXG4gICAgLyoqXG4gICAgICog0JLQutC70Y7Rh9C40YLRjCDQstGL0LHQvtGAINC/0L7Qt9C40YbQuNC5INGH0LXQutCx0L7QutGB0LDQvNC4LlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBzZWxlY3RhYmxlID0gaW5wdXQ8Ym9vbGVhbj4odHJ1ZSk7XG5cbiAgICAvKipcbiAgICAgKiDQktC60LvRjtGH0LjRgtGMINGA0LXQtNCw0LrRgtC40YDQvtCy0LDQvdC40LUg0L/QvtC30LjRhtC40LkuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IGVkaXRhYmxlID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gICAgLyoqXG4gICAgICog0JLQvdGD0YLRgNC10L3QvdGP0Y8g0LPRgNGD0L/Qv9CwINGE0L7RgNC80Ysg0LTQu9GPINCy0YvQsdC+0YDQsCDQv9C+0LfQuNGG0LjQuS5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2VsZWN0aW9uRm9ybUdyb3VwID0gbmV3IEZvcm1Hcm91cDxSZWNvcmQ8c3RyaW5nLCBGb3JtQ29udHJvbDxib29sZWFuPj4+KHt9KTtcblxuICAgIC8qKlxuICAgICAqINCe0L/RhtC40Lgg0LfQsNC60LDQt9CwICjRh9C10YDQvdC+0LLQuNC60LApLiDQn9GA0LXQtNC+0YHRgtCw0LLQu9GP0LXRgtGB0Y8g0LTQuNGA0LXQutGC0LjQstC+0Lkge0BsaW5rIFNjT3JkZXJBY2Nlc3NvckRpcmVjdGl2ZX0g0LIg0LrQvtC90YLQtdC60YHRgtC1INGH0LXRgNC90L7QstC40LrQsC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgb3JkZXJPcHRpb25zID0gaW5qZWN0PFNjT3JkZXJPcHRpb25zPihTQ19PUkRFUl9PUFRJT05TLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXG4gICAgLyoqXG4gICAgICog0JjQtNC10L3RgtC40YTQuNC60LDRgtC+0YDRiyDQstGL0LHRgNCw0L3QvdGL0YUg0L/QvtC30LjRhtC40LkuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGl0ZW1zSWRzID0gdG9TaWduYWwodGhpcy5zZWxlY3Rpb25Gb3JtR3JvdXAudmFsdWVDaGFuZ2VzLnBpcGUobWFwKCh2YWx1ZSkgPT4gT2JqZWN0LmVudHJpZXM8Ym9vbGVhbj4odmFsdWUgYXMgUmVjb3JkPHN0cmluZywgYm9vbGVhbj4pKSksIHtcbiAgICAgICAgaW5pdGlhbFZhbHVlOiBbXSxcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqINCh0L7RgdGC0L7Rj9C90LjQtSDRhNC70LDQs9CwIMKr0JLRi9Cx0YDQsNGC0Ywg0LLRgdC1wrs6IGB0cnVlYCwg0LXRgdC70Lgg0LLRi9Cx0YDQsNC90Ysg0LLRgdC1INC/0L7Qt9C40YbQuNC4LCBgZmFsc2VgLCDQtdGB0LvQuCDQvdC4INC+0LTQvdC+0LksINC4IGBudWxsYCwg0LXRgdC70Lgg0YLQvtC70YzQutC+INGH0LDRgdGC0YwuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGFsbEl0ZW1zU2VsZWN0ZWQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNoZWNrZWRMaXN0ID0gdGhpcy5pdGVtc0lkcygpLm1hcCgoWywgY2hlY2tlZF0pID0+IGNoZWNrZWQpO1xuXG4gICAgICAgIGlmIChjaGVja2VkTGlzdC5ldmVyeShCb29sZWFuKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY2hlY2tlZExpc3Quc29tZShCb29sZWFuKSA/IG51bGwgOiBmYWxzZTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqINCh0LjQs9C90LDQuyDQuNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgNC+0LIg0LLRi9Cx0YDQsNC90L3Ri9GFINC/0L7Qt9C40YbQuNC5LlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBzZWxlY3RlZEl0ZW1zSWRzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICBjb25zdCBzZWxlY3RhYmxlID0gdGhpcy5zZWxlY3RhYmxlKCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaXRlbXNJZHMoKVxuICAgICAgICAgICAgLmZpbHRlcigoWywgY2hlY2tlZF0pID0+ICFzZWxlY3RhYmxlIHx8IGNoZWNrZWQpXG4gICAgICAgICAgICAubWFwKChba2V5XSkgPT4ga2V5KTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqINCS0YvRhdC+0LTQvdGL0LUg0LTQsNC90L3Ri9C1INC/0YDQuCDQuNC30LzQtdC90LXQvdC40Lgg0LLRi9Cx0L7RgNCwINC/0L7Qt9C40YbQuNC5LlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBzZWxlY3RlZEl0ZW1zSWRzQ2hhbmdlID0gb3V0cHV0RnJvbU9ic2VydmFibGUodG9PYnNlcnZhYmxlKHRoaXMuc2VsZWN0ZWRJdGVtc0lkcykpO1xuXG4gICAgLyoqXG4gICAgICog0KHRg9C80LzQsCDRgdGC0L7QuNC80L7RgdGC0Lgg0LLRi9Cx0YDQsNC90L3Ri9GFINC/0L7Qt9C40YbQuNC5LlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBzdW1TZWxlY3RlZEl0ZW1zID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICBjb25zdCBpdGVtcyA9IHRoaXMuaXRlbXNTaWduYWwoKTtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRJdGVtc0lkcyA9IHRoaXMuc2VsZWN0ZWRJdGVtc0lkcygpO1xuICAgICAgICBjb25zdCBzZWxlY3RhYmxlID0gdGhpcy5zZWxlY3RhYmxlKCk7XG5cbiAgICAgICAgcmV0dXJuIFNjTnVtYmVySGVscGVyLnJvdW5kTW9uZXkoXG4gICAgICAgICAgICBpdGVtcy5maWx0ZXIoKGl0ZW0pID0+ICFzZWxlY3RhYmxlIHx8IHNlbGVjdGVkSXRlbXNJZHMuaW5jbHVkZXMoaXRlbS5pZCkpLnJlZHVjZSgoc3VtOiBudW1iZXIsIGl0ZW06IFNjT3JkZXJJdGVtKSA9PiBzdW0gKyBpdGVtLmNvc3RSdWIsIDApXG4gICAgICAgICk7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiDQodC10YDQstC40YEg0L/QvtC70YPRh9C10L3QuNGPINC4INGA0LXQtNCw0LrRgtC40YDQvtCy0LDQvdC40Y8g0YHQv9C40YHQutCwINGC0L7QstCw0YDQvtCyINC30LDQutCw0LfQsCAo0LrQvtGA0LfQuNC90LAgLyDQt9Cw0LrQsNC3IC8g0YfQtdGA0L3QvtCy0LjQuiA9INC30LDQutCw0LcpLlxuICAgICAqINCf0YDQtdC00L7RgdGC0LDQstC70Y/QtdGC0YHRjyDRgNC+0LTQuNGC0LXQu9C10Lwg0YfQtdGA0LXQtyDRgtC+0LrQtdC9IHtAbGluayBTQ19PUkRFUl9MT0FERVJ9ICjRgNC10LDQu9C40LfQsNGG0LjRjyB7QGxpbmsgU2NJT3JkZXJMb2FkZXJ9KS5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgb3JkZXJJdGVtc0xpc3RMb2FkZXIgPSBpbmplY3Q8U2NJT3JkZXJMb2FkZXIgfCBTY0lPcmRlckVkaXRvckxvYWRlcj4oU0NfT1JERVJfTE9BREVSKTtcblxuICAgIC8qKlxuICAgICAqINCf0YDQuNC30L3QsNC6LCDRh9GC0L4g0LzQvtC20L3QviDRgNC10LTQsNC60YLQuNGA0L7QstCw0YLRjCDQv9C+0LfQuNGG0LjQuC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgY2FuRWRpdCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuZWRpdGFibGUoKSAmJiAndXBkYXRlUHJvZHVjdCQnIGluIHRoaXMub3JkZXJJdGVtc0xpc3RMb2FkZXIpO1xuXG4gICAgLyoqXG4gICAgICog0J3QsNGB0YLRgNC+0LnQutC4INCy0YvQstC+0LTQsCDRgdGD0LzQvCDQsiDRgNGD0LHQu9GP0YUuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IG1vbmV5Rm9ybWF0ID0gU2NOdW1iZXJIZWxwZXIuZ2V0TW9uZXlGb3JtYXQoKTtcblxuICAgIC8qKlxuICAgICAqINCh0YHRi9C70LrQsCDQtNC70Y8g0LDQstGC0L7QvNCw0YLQuNGH0LXRgdC60L7Qs9C+INGD0L/RgNCw0LLQu9C10L3QuNGPINGD0L3QuNGH0YLQvtC20LXQvdC40LXQvCDQt9Cw0LLQuNGB0LjQvNC+0YHRgtC10LkuXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuXG4gICAgLyoqXG4gICAgICog0KHQtdGA0LLQuNGBINC00LvRjyDRgNCw0LHQvtGC0Ysg0YEg0LTQuNCw0LvQvtCz0L7QstGL0LzQuCDQvtC60L3QsNC80LguXG4gICAgICog0J/RgNC10LTQvtGB0YLQsNCy0LvRj9C10YLRgdGPINGA0L7QtNC40YLQtdC70LXQvCDRh9C10YDQtdC3INGC0L7QutC10L0ge0BsaW5rIFNDX0RJQUxPR19TRVJWSUNFX1RPS0VOfS5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IHNjRGlhbG9nU2VydmljZSA9IGluamVjdDxJU2NEaWFsb2dTZXJ2aWNlPihTQ19ESUFMT0dfU0VSVklDRV9UT0tFTik7XG5cbiAgICAvKipcbiAgICAgKiDQodC/0LjRgdC+0Log0Y3Qu9C10LzQtdC90YLQvtCyINC60L7RgNC30LjQvdGLICjRgtC+0LLQsNGA0L7QsikuINCf0YDQuCDRg9GB0YLQsNC90L7QstC60LUg0YHQuNC90YXRgNC+0L3QvdC+INC+0LHQvdC+0LLQu9GP0LXRgiDQutC+0L3RgtGA0L7Qu9GLINCy0YvQsdC+0YDQsCDQsiDRhNC+0YDQvNC1LlxuICAgICAqL1xuICAgIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXG4gICAgc2V0IGl0ZW1zKHZhbHVlOiBTY09yZGVySXRlbVtdKSB7XG4gICAgICAgIHRoaXMuaXRlbXNTaWduYWwuc2V0KHZhbHVlKTtcbiAgICAgICAgdGhpcy5zeW5jU2VsZWN0aW9uQ29udHJvbHMoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQodC40L3RhdGA0L7QvdC40LfQuNGA0YPQtdGCINC60L7QvdGC0YDQvtC70Ysg0YTQvtGA0LzRiyDQstGL0LHQvtGA0LAg0YEg0YLQtdC60YPRidC40Lwg0YHQv9C40YHQutC+0Lwg0YLQvtCy0LDRgNC+0LI6INGD0LTQsNC70Y/QtdGCINC60L7QvdGC0YDQvtC70Ysg0LTQu9GPINC+0YLRgdGD0YLRgdGC0LLRg9GO0YnQuNGFIGlkLCDQtNC+0LHQsNCy0LvRj9C10YIg0LTQu9GPINC90L7QstGL0YUuXG4gICAgICovXG4gICAgcHJpdmF0ZSBzeW5jU2VsZWN0aW9uQ29udHJvbHMoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5zZWxlY3RhYmxlKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGN1cnJlbnRJdGVtcyA9IHRoaXMuaXRlbXNTaWduYWwoKTtcbiAgICAgICAgY29uc3QgY3VycmVudElkcyA9IG5ldyBTZXQoY3VycmVudEl0ZW1zLm1hcCgoaXRlbSkgPT4gaXRlbS5pZCkpO1xuXG4gICAgICAgIE9iamVjdC5rZXlzKHRoaXMuc2VsZWN0aW9uRm9ybUdyb3VwLmNvbnRyb2xzKS5mb3JFYWNoKChuYW1lKSA9PiB7XG4gICAgICAgICAgICBpZiAoIWN1cnJlbnRJZHMuaGFzKG5hbWUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25Gb3JtR3JvdXAucmVtb3ZlQ29udHJvbChuYW1lIGFzIG5ldmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgY3VycmVudEl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGlmICghdGhpcy5zZWxlY3Rpb25Gb3JtR3JvdXAuY29udGFpbnMoaXRlbS5pZCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbkZvcm1Hcm91cC5hZGRDb250cm9sKGl0ZW0uaWQsIG5ldyBGb3JtQ29udHJvbCh0cnVlLCB7IG5vbk51bGxhYmxlOiB0cnVlIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0JLRi9Cx0LjRgNCw0LXRgiDQstGB0LUg0L/QvtC30LjRhtC40Lgg0LjQu9C4INGB0L3QuNC80LDQtdGCINCy0YvQsdC+0YAg0YHQviDQstGB0LXRhS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudCDQodC+0LHRi9GC0LjQtSDQuNC30LzQtdC90LXQvdC40Y8g0YTQu9Cw0LPQsCDQstGL0LHQvtGA0LAg0LLRgdC10YUg0L/QvtC30LjRhtC40LkuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHNlbGVjdEFsbENoYW5nZUhhbmRsZXIoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHsgY2hlY2tlZCB9ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG5cbiAgICAgICAgdGhpcy5zZWxlY3Rpb25Gb3JtR3JvdXAuc2V0VmFsdWUoT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5rZXlzKHRoaXMuc2VsZWN0aW9uRm9ybUdyb3VwLmNvbnRyb2xzKS5tYXAoKGlkKSA9PiBbaWQsIGNoZWNrZWRdKSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCj0LTQsNC70Y/QtdGCINC/0L7Qt9C40YbQuNGOLlxuICAgICAqXG4gICAgICogQHBhcmFtIGl0ZW0g0J/QvtC30LjRhtC40Y8g0YLQvtCy0LDRgNCwINC00LvRjyDRg9C00LDQu9C10L3QuNGPLlxuICAgICAqIEBwYXJhbSBwcmljZUNhcmQg0JrQvtC80L/QvtC90LXQvdGCINC60LDRgNGC0L7Rh9C60Lgg0YLQvtCy0LDRgNCwLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBkZWxldGVJdGVtKGl0ZW06IFNjT3JkZXJJdGVtLCBwcmljZUNhcmQ6IEFic3RyYWN0U2NQcmljZUNhcmQpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmNhbkVkaXQoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcHJpY2VDYXJkLnNob3dMb2FkZXIuc2V0KHRydWUpO1xuXG4gICAgICAgICh0aGlzLm9yZGVySXRlbXNMaXN0TG9hZGVyIGFzIFNjSU9yZGVyRWRpdG9yTG9hZGVyKVxuICAgICAgICAgICAgLmRlbGV0ZVByb2R1Y3QkKGl0ZW0sIHRoaXMub3JkZXJPcHRpb25zPy5vcmRlcklkKCkpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBjYXRjaEVycm9yKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcHJpY2VDYXJkLnF1YW50aXR5Q29udHJvbC5wYXRjaFZhbHVlKGl0ZW0ucXVhbnRpdHksIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVtaXRFdmVudDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvZigpO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIGZpbmFsaXplKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcHJpY2VDYXJkLnNob3dMb2FkZXIuc2V0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCe0LHQvdC+0LLQu9GP0LXRgiDQutC+0LvQuNGH0LXRgdGC0LLQviDRgtC+0LLQsNGA0LAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbmV3UXVhbnRpdHkg0J3QvtCy0L7QtSDQt9C90LDRh9C10L3QuNC1INC60L7Qu9C40YfQtdGB0YLQstCwINGC0L7QstCw0YDQsC5cbiAgICAgKiBAcGFyYW0gcHJpY2VDYXJkINCa0L7QvNC/0L7QvdC10L3RgiDQutCw0YDRgtC+0YfQutC4INGC0L7QstCw0YDQsC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcGF0Y2hJdGVtKG5ld1F1YW50aXR5OiBudW1iZXIgfCBudWxsLCBwcmljZUNhcmQ6IEFic3RyYWN0U2NQcmljZUNhcmQpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmNhbkVkaXQoKSB8fCAhcHJpY2VDYXJkLm9yZGVySXRlbSB8fCAhcHJpY2VDYXJkLnByb2R1Y3QgfHwgIW5ld1F1YW50aXR5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBwcmljZUNhcmQuc2hvd0xvYWRlci5zZXQodHJ1ZSk7XG5cbiAgICAgICAgKHRoaXMub3JkZXJJdGVtc0xpc3RMb2FkZXIgYXMgU2NJT3JkZXJFZGl0b3JMb2FkZXIpXG4gICAgICAgICAgICAudXBkYXRlUHJvZHVjdCQocHJpY2VDYXJkLm9yZGVySXRlbS5pZCwgeyBxdWFudGl0eTogbmV3UXVhbnRpdHkgfSwgdGhpcy5vcmRlck9wdGlvbnM/Lm9yZGVySWQoKSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvblxuICAgICAgICAgICAgICAgICAgICBwcmljZUNhcmQucXVhbnRpdHlDb250cm9sLnBhdGNoVmFsdWUocHJpY2VDYXJkLm9yZGVySXRlbSEucXVhbnRpdHksIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVtaXRFdmVudDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvZigpO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIGZpbmFsaXplKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcHJpY2VDYXJkLnNob3dMb2FkZXIuc2V0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCe0YLQutGA0YvQstCw0LXRgiDQvNC+0LTQsNC70YzQvdC+0LUg0L7QutC90L4g0L7Qv9C40YHQsNC90LjRjyDRgtC+0LLQsNGA0LAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvZHVjdCDQotC+0LLQsNGAL9GD0YHQu9GD0LPQsCwg0L7Qv9C40YHQsNC90LjQtSDQutC+0YLQvtGA0L7QuSDQvdC10L7QsdGF0L7QtNC40LzQviDQvtGC0L7QsdGA0LDQt9C40YLRjC5cbiAgICAgKiBAcGFyYW0gb3JkZXJJdGVtINCV0LTQuNC90LjRh9C90LDRjyDQv9C+0LfQuNGG0LjRjyDRgtC+0LLQsNGA0LAv0YPRgdC70YPQs9C4INCyINC30LDQutCw0LfQtSwg0LTQu9GPINC60L7RgtC+0YDQvtC5INC90LXQvtCx0YXQvtC00LjQvNC+INC+0YLQutGA0YvRgtGMINC60L7QvdGE0LjQs9GD0YDQsNGC0L7RgC5cbiAgICAgKiBAcGFyYW0gb3JkZXJJZCDQmNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgCDQt9Cw0LrQsNC30LAsINCyINC60L7RgtC+0YDQvtC8INC90LXQvtCx0YXQvtC00LjQvNC+INC+0YLQutGA0YvRgtGMINC60L7QvdGE0LjQs9GD0YDQsNGC0L7RgC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgb3BlblByb2R1Y3RJbmZvRGlhbG9nKHByb2R1Y3Q6IFNjT3JkZXJJdGVtWydwcm9kdWN0J10sIG9yZGVySXRlbT86IFNjT3JkZXJJdGVtLCBvcmRlcklkPzogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnNjRGlhbG9nU2VydmljZS5vcGVuUHJvZHVjdEluZm9EaWFsb2cpIHtcbiAgICAgICAgICAgIHRoaXMuc2NEaWFsb2dTZXJ2aWNlLm9wZW5Qcm9kdWN0SW5mb0RpYWxvZyhwcm9kdWN0LCBvcmRlckl0ZW0sIG9yZGVySWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0J7RgtC60YDRi9Cy0LDQtdGCINC80L7QtNCw0LvRjNC90L7QtSDQvtC60L3QviDQuNC30LzQtdC90LXQvdC40Y8g0YLQvtCy0LDRgNCwINC40LvQuCDQtdCz0L4g0LrQvtC90YTQuNCz0YPRgNCw0YLQvtGA0LAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaXRlbSDQn9C+0LfQuNGG0LjRjyDRgtC+0LLQsNGA0LAuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIG9wZW5TZXR0aW5nc0RpYWxvZyhpdGVtOiBTY09yZGVySXRlbSk6IHZvaWQge1xuICAgICAgICBjb25zdCBpc0NvbmZpZ3VyYXRvciA9IEJvb2xlYW4oaXRlbS5jb25maWd1cmF0b3IpO1xuXG4gICAgICAgIGlmIChpc0NvbmZpZ3VyYXRvcikge1xuICAgICAgICAgICAgdGhpcy5zY0RpYWxvZ1NlcnZpY2Uub3BlbkNvbmZpZ3VyYXRvckRpYWxvZyhpdGVtLnByb2R1Y3QsIGl0ZW0sIHRoaXMub3JkZXJPcHRpb25zPy5vcmRlcklkKCkpO1xuICAgICAgICB9IGVsc2UgaWYgKFNjVW5pdHNIZWxwZXIucHJvZHVjdElzTWVhc3VyYWJsZShpdGVtLnByb2R1Y3QpKSB7XG4gICAgICAgICAgICB0aGlzLnNjRGlhbG9nU2VydmljZS5vcGVuQWRkT3JFZGl0aW5nQ2FydEl0ZW1EaWFsb2coaXRlbS5wcm9kdWN0LCBpdGVtLCB0aGlzLm9yZGVyT3B0aW9ucz8ub3JkZXJJZCgpLCB0cnVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCe0YLQutGA0YvQstCw0LXRgiDQtNC40LDQu9C+0LPQvtCy0L7QtSDQvtC60L3QviBcItCT0YDQsNGE0LjQuiDQuNC30LzQtdC90LXQvdC40Y8g0YHRgtC+0LjQvNC+0YHRgtC4XCIg0LTQu9GPINGC0L7QstCw0YDQsC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9kdWN0INCi0L7QstCw0YAv0YPRgdC70YPQs9CwLCDQtNC70Y8g0LrQvtGC0L7RgNC+0LPQviDQvdC10L7QsdGF0L7QtNC40LzQviDQvtGC0L7QsdGA0LDQt9C40YLRjCDQs9GA0LDRhNC40Log0LjQt9C80LXQvdC10L3QuNGPINGB0YLQvtC40LzQvtGB0YLQuC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgb3BlblByaWNlSGlzdG9yeUNoYXJ0RGlhbG9nKHByb2R1Y3Q6IFNjT3JkZXJJdGVtWydwcm9kdWN0J10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zY0RpYWxvZ1NlcnZpY2Uub3BlblByaWNlSGlzdG9yeUNoYXJ0RGlhbG9nKHByb2R1Y3QpO1xuICAgIH1cbn1cbiIsIjxkaXZcbiAgICBbZm9ybUdyb3VwXT1cInNlbGVjdGlvbkZvcm1Hcm91cFwiXG4gICAgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC01XCJcbj5cbiAgICA8IS0tINCk0LvQsNCzINCy0YvQsdC+0YDQsCDQstGB0LXRhSDQv9C+0LfQuNGG0LjQuS4gLS0+XG4gICAgQGlmIChzZWxlY3RhYmxlKCkgJiYgaXRlbXNTaWduYWwoKS5sZW5ndGgpIHtcbiAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICB0dWlMYWJlbFxuICAgICAgICAgICAgc2NQcmludD1cImRlZmF1bHROb1ByaW50XCJcbiAgICAgICAgICAgIGNsYXNzPVwic2VsZi1zdGFydFwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIHR1aUNoZWNrYm94XG4gICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICBzaXplPVwibVwiXG4gICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiYWxsSXRlbXNTZWxlY3RlZCgpXCJcbiAgICAgICAgICAgICAgICBbbmdNb2RlbE9wdGlvbnNdPVwieyBzdGFuZGFsb25lOiB0cnVlIH1cIlxuICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwic2VsZWN0QWxsQ2hhbmdlSGFuZGxlcigkZXZlbnQpXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICDQktGL0LHRgNCw0YLRjCDQstGB0LVcbiAgICAgICAgPC9sYWJlbD5cbiAgICB9XG5cbiAgICBAZm9yIChpdGVtIG9mIGl0ZW1zU2lnbmFsKCk7IHRyYWNrIGl0ZW0uaWQpIHtcbiAgICAgICAgQGlmICgkaW5kZXggIT09IDApIHtcbiAgICAgICAgICAgIDxociBjbGFzcz1cIm10LWF1dG8gaC1weCB3LWZ1bGwgYmctdHVpLWNsZWFyXCIgLz5cbiAgICAgICAgfVxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtNCByZWxhdGl2ZVwiPlxuICAgICAgICAgICAgQGxldCBpc0FjdGl2ZSA9ICFzZWxlY3RhYmxlKCkgfHwgc2VsZWN0aW9uRm9ybUdyb3VwLmdldChpdGVtLmlkKT8udmFsdWU7XG5cbiAgICAgICAgICAgIDwhLS0g0KfQtdC60LHQvtC60YEg0LLRi9Cx0L7RgNCwINGC0L7QstCw0YDQsC4gLS0+XG4gICAgICAgICAgICBAaWYgKHNlbGVjdGFibGUoKSkge1xuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICB0dWlDaGVja2JveFxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXRlbUNvbXBvbmVudC5zaG93TG9hZGVyKClcIlxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICAgICBzaXplPVwibVwiXG4gICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiaXRlbS5pZFwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgPCEtLSDQmtCw0YDRgtC+0YfQutCwINGC0L7QstCw0YDQsC4gLS0+XG4gICAgICAgICAgICA8c2Mtb3JkZXItaXRlbVxuICAgICAgICAgICAgICAgICNpdGVtQ29tcG9uZW50XG4gICAgICAgICAgICAgICAgW3Byb2R1Y3RdPVwiaXRlbS5wcm9kdWN0XCJcbiAgICAgICAgICAgICAgICBbb3JkZXJJdGVtXT1cIml0ZW1cIlxuICAgICAgICAgICAgICAgIFtzaG93UXVhbnRpdHlDb250cm9sXT1cImNhbkVkaXQoKSAmJiAhaXRlbS5jb25maWd1cmF0b3JcIlxuICAgICAgICAgICAgICAgIFtpc1Nob3dFZGl0Q29udHJvbHNdPVwiY2FuRWRpdCgpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInctZnVsbCBkdXJhdGlvbi0yMDBcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5vcGFjaXR5LTYwXT1cInNlbGVjdGFibGUoKSAmJiAhc2VsZWN0aW9uRm9ybUdyb3VwLmdldChpdGVtLmlkKT8udmFsdWVcIlxuICAgICAgICAgICAgICAgIChjbGlja0NhcmRFdmVudCk9XCJvcGVuUHJvZHVjdEluZm9EaWFsb2coaXRlbS5wcm9kdWN0LCBpdGVtLCBvcmRlck9wdGlvbnM/Lm9yZGVySWQoKSlcIlxuICAgICAgICAgICAgICAgIChxdWFudGl0eVZhbHVlQ2hhbmdlcyk9XCJwYXRjaEl0ZW0oJGV2ZW50LCBpdGVtQ29tcG9uZW50KVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrUHJpY2VIaXN0b3J5RXZlbnQpPVwib3BlblByaWNlSGlzdG9yeUNoYXJ0RGlhbG9nKGl0ZW0ucHJvZHVjdClcIlxuICAgICAgICAgICAgICAgIChjbGlja1NldHRpbmdzKT1cIm9wZW5TZXR0aW5nc0RpYWxvZyhpdGVtKVwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLnBvaW50ZXItZXZlbnRzLW5vbmVdPVwiIWlzQWN0aXZlXCJcbiAgICAgICAgICAgIC8+XG5cbiAgICAgICAgICAgIDwhLS0g0JrQvdC+0L/QutCwINGD0LTQsNC70LXQvdC40Y8g0YLQvtCy0LDRgNCwLiAtLT5cbiAgICAgICAgICAgIEBpZiAoY2FuRWRpdCgpKSB7XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICB0dWlJY29uQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGljb25TdGFydD1cIkB0dWkudHJhc2hcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZGVsZXRlSXRlbShpdGVtLCBpdGVtQ29tcG9uZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIFtsb2FkaW5nXT1cIml0ZW1Db21wb25lbnQuc2hvd0xvYWRlcigpXCJcbiAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInNcIlxuICAgICAgICAgICAgICAgICAgICBhcHBlYXJhbmNlPVwic2Vjb25kYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCIhYWJzb2x1dGUgbGVmdC0xIHRvcC0xIGxnOiFyZWxhdGl2ZSBsZzpsZWZ0LTAgbGc6dG9wLTAgbGc6IXNlbGYtY2VudGVyXCJcbiAgICAgICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgIH1cblxuICAgIDwhLS0g0KTRg9GC0LXRgCDRgdC/0LjRgdC60LAuIC0tPlxuICAgIDxkaXZcbiAgICAgICAgc2NQcmludD1cImNvc3RcIlxuICAgICAgICBjbGFzcz1cImZsZXggZmxleC1jb2wgaXRlbXMtZW5kIGdhcC0yLjVcIlxuICAgID5cbiAgICAgICAgQGxldCB0b3RhbFN1bSA9IHN1bVNlbGVjdGVkSXRlbXMoKTtcbiAgICAgICAgPCEtLSDQmNGC0L7Qs9C+0LLQsNGPINGB0YPQvNC80LAuIC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1iYXNlIGZvbnQtYm9sZFwiPtCY0YLQvtCz0L46IHt7IHRvdGFsU3VtIHwgdHVpRm9ybWF0TnVtYmVyOiBtb25leUZvcm1hdCB8IGFzeW5jIH19IHt7ICdSVUInIHwgdHVpQ3VycmVuY3kgfX08L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuIl19
|
|
375
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Mtb3JkZXItaXRlbXMtbGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtdWkvb3JkZXIvb3JkZXItaXRlbXMtbGlzdC9zYy1vcmRlci1pdGVtcy1saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC11aS9vcmRlci9vcmRlci1pdGVtcy1saXN0L3NjLW9yZGVyLWl0ZW1zLWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM1QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUksT0FBTyxFQUFFLG9CQUFvQixFQUFFLGtCQUFrQixFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM5RyxPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxRixPQUFPLEVBQUUsZUFBZSxFQUE0RCxjQUFjLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2xMLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxtQkFBbUIsRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3RyxPQUFPLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxNQUFN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dUNEN0VRLFNBQVMseUNBQ1QsbUJBQW1CLHdEQUNuQixvQkFBb0IsMkxBQ3BCLGdCQUFnQiwwRUFDaEIsV0FBVywycUJBQ1gsbUJBQW1CLGdWQUNuQixXQUFXLG9HQUNYLFFBQVEsNERBQ1IsU0FBUyxvSUFDVCxnQkFBZ0Isa0hBQ2hCLGVBQWU7OzRGQUlWLHlCQUF5QjtrQkFuQnJDLFNBQVM7aUNBQ00sSUFBSSxZQUNOLHFCQUFxQixXQUV0Qjt3QkFDTCxTQUFTO3dCQUNULG1CQUFtQjt3QkFDbkIsb0JBQW9CO3dCQUNwQixnQkFBZ0I7d0JBQ2hCLFdBQVc7d0JBQ1gsbUJBQW1CO3dCQUNuQixXQUFXO3dCQUNYLFFBQVE7d0JBQ1IsU0FBUzt3QkFDVCxnQkFBZ0I7d0JBQ2hCLGVBQWU7cUJBQ2xCLG1CQUNnQix1QkFBdUIsQ0FBQyxNQUFNO3dEQWlMM0MsS0FBSztzQkFEUixLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLXBhcmFtLXJlYXNzaWduICovXG5cbmltcG9ydCB7IEFzeW5jUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBjb21wdXRlZCwgRGVzdHJveVJlZiwgZWZmZWN0LCBpbmplY3QsIElucHV0LCBpbnB1dCwgc2lnbmFsLCB1bnRyYWNrZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IG91dHB1dEZyb21PYnNlcnZhYmxlLCB0YWtlVW50aWxEZXN0cm95ZWQsIHRvT2JzZXJ2YWJsZSwgdG9TaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFNDX09SREVSX0xPQURFUiwgU2NJT3JkZXJFZGl0b3JMb2FkZXIsIFNjSU9yZGVySXRlbXNHcm91cCwgU2NJT3JkZXJMb2FkZXIsIFNjTnVtYmVySGVscGVyLCBTY09yZGVySXRlbSwgU2NPcmRlckl0ZW1zR3JvdXAsIFNjVW5pdHNIZWxwZXIgfSBmcm9tICdAc25hYmNlbnRyL2NsaWVudC1jb3JlJztcbmltcG9ydCB7IFR1aUN1cnJlbmN5UGlwZSB9IGZyb20gJ0B0YWlnYS11aS9hZGRvbi1jb21tZXJjZSc7XG5pbXBvcnQgeyBUdWlBbGVydFNlcnZpY2UsIFR1aUJ1dHRvbiwgVHVpRGlhbG9nU2VydmljZSwgVHVpRm9ybWF0TnVtYmVyUGlwZSwgVHVpTGFiZWwgfSBmcm9tICdAdGFpZ2EtdWkvY29yZSc7XG5pbXBvcnQgeyBUVUlfQ09ORklSTSwgVHVpQnV0dG9uTG9hZGluZywgVHVpQ2hlY2tib3ggfSBmcm9tICdAdGFpZ2EtdWkva2l0JztcbmltcG9ydCB7IGZpbHRlciwgZmluYWxpemUsIG1hcCwgbm9vcCwgT2JzZXJ2YWJsZSwgb2YsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBBYnN0cmFjdFNjUHJpY2VDYXJkLCBTY1ByaW50RGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcyc7XG5pbXBvcnQgeyBJU2NEaWFsb2dTZXJ2aWNlLCBTQ19ESUFMT0dfU0VSVklDRV9UT0tFTiB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycyc7XG5pbXBvcnQgeyBTQ19PUkRFUl9PUFRJT05TLCBTY09yZGVyT3B0aW9ucyB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvc2Mtb3JkZXItb3B0aW9ucyc7XG5pbXBvcnQgeyBTY09yZGVySXRlbUNvbXBvbmVudCB9IGZyb20gJy4uL29yZGVyLWl0ZW0vc2Mtb3JkZXItaXRlbS5jb21wb25lbnQnO1xuXG4vKipcbiAqINCa0L7QvNC/0L7QvdC10L3RgiDRgdC/0LjRgdC60LAg0YLQvtCy0LDRgNC+0LIg0LrQvtGA0LfQuNC90YssINC30LDQutCw0LfQsCDQuNC70Lgg0YfQtdGA0L3QvtCy0LjQutCwLlxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHNlbGVjdG9yOiAnc2Mtb3JkZXItaXRlbXMtbGlzdCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3NjLW9yZGVyLWl0ZW1zLWxpc3QuY29tcG9uZW50Lmh0bWwnLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgQXN5bmNQaXBlLFxuICAgICAgICBUdWlGb3JtYXROdW1iZXJQaXBlLFxuICAgICAgICBTY09yZGVySXRlbUNvbXBvbmVudCxcbiAgICAgICAgU2NQcmludERpcmVjdGl2ZSxcbiAgICAgICAgRm9ybXNNb2R1bGUsXG4gICAgICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgICAgIFR1aUNoZWNrYm94LFxuICAgICAgICBUdWlMYWJlbCxcbiAgICAgICAgVHVpQnV0dG9uLFxuICAgICAgICBUdWlCdXR0b25Mb2FkaW5nLFxuICAgICAgICBUdWlDdXJyZW5jeVBpcGUsXG4gICAgXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgU2NPcmRlckl0ZW1zTGlzdENvbXBvbmVudCB7XG4gICAgLyoqXG4gICAgICog0JLQvdGD0YLRgNC10L3QvdC40Lkg0YHQuNCz0L3QsNC7INGB0L/QuNGB0LrQsCDRjdC70LXQvNC10L3RgtC+0LIg0LrQvtGA0LfQuNC90YsgKNGC0L7QstCw0YDQvtCyKS5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgaXRlbXNTaWduYWwgPSBzaWduYWw8U2NPcmRlckl0ZW1bXT4oW10pO1xuXG4gICAgLyoqXG4gICAgICog0JLQutC70Y7Rh9C40YLRjCDQstGL0LHQvtGAINC/0L7Qt9C40YbQuNC5INGH0LXQutCx0L7QutGB0LDQvNC4LlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBzZWxlY3RhYmxlID0gaW5wdXQ8Ym9vbGVhbj4odHJ1ZSk7XG5cbiAgICAvKipcbiAgICAgKiDQktC60LvRjtGH0LjRgtGMINGA0LXQtNCw0LrRgtC40YDQvtCy0LDQvdC40LUg0L/QvtC30LjRhtC40LkuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IGVkaXRhYmxlID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gICAgLyoqXG4gICAgICog0J/RgNC40LfQvdCw0Log0LLRi9Cy0L7QtNCwINC/0L7Qt9C40YbQuNC5INC/0L4g0LPRgNGD0L/Qv9Cw0LwgKNCz0YDRg9C/0L/QsCDQv9C+0LfQuNGG0LjQuCDQuNC70LggwqvQkdC10Lcg0LPRgNGD0L/Qv9GLwrspINGBINC30LDQs9C+0LvQvtCy0LrQsNC80Lgg0Lgg0LjRgtC+0LPQsNC80LguINCR0LXQtyDQv9GA0LjQt9C90LDQutCwINC/0L7Qt9C40YbQuNC4INCy0YvQstC+0LTRj9GC0YHRjyDQvtC00L3QuNC8INGB0L/QuNGB0LrQvtC8INCx0LXQtyDQt9Cw0LPQvtC70L7QstC60L7Qsi5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgZ3JvdXBlZCA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcblxuICAgIC8qKlxuICAgICAqINCf0YDQuNC30L3QsNC6LCDRh9GC0L4g0L/QvtC30LjRhtC40LgsINC60L7RgtC+0YDRi9C1INC90LUg0L/QvtC/0LDQtNGD0YIg0LIg0LfQsNC60LDQtywg0L/QvtC80LXRh9Cw0Y7RgtGB0Y8g0L/RgNC40LzQtdGH0LDQvdC40LXQvCDQuCDQvdC1INCy0YvQsdC40YDQsNGO0YLRgdGPLiDQndC10LDQutGC0LjQstC90YvQtSDQv9C+0LfQuNGG0LjQuCDQv9GA0LjQs9C70YPRiNCw0Y7RgtGB0Y8g0Lgg0LfQsNGH0ZHRgNC60LjQstCw0Y7RgtGB0Y8uXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IG1hcmtVbmF2YWlsYWJsZSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcblxuICAgIC8qKlxuICAgICAqINCf0YDQuNC30L3QsNC6LCDRh9GC0L4g0YbQtdC90LAg0LfQsCDQtdC00LjQvdC40YbRgyDQsdC10YDRkdGC0YHRjyDQuNC3INC/0L7Qt9C40YbQuNC4LCDQsCDQvdC1INC40Lcg0YLQtdC60YPRidC10Lkg0YbQtdC90Ysg0YLQvtCy0LDRgNCwLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSB1c2VMaW5lUHJpY2UgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG5cbiAgICAvKipcbiAgICAgKiDQn9GA0LjQt9C90LDQuiwg0YfRgtC+INC/0LDRgNCw0LzQtdGC0YDRiyDQv9C+0LfQuNGG0LjQuCDQvNC10L3Rj9GO0YLRgdGPINCyINC00LjQsNC70L7Qs9C1INGC0L7QstCw0YDQsDog0LTQuNCw0LvQvtCzINC00L7RgdGC0YPQv9C10L0g0YMg0LvRjtCx0L7QuSDQsNC60YLQuNCy0L3QvtC5INC/0L7Qt9C40YbQuNC4LCDQsCDQutC+0LvQuNGH0LXRgdGC0LLQviDQuCDQvNC10YLRgNCw0LYg0LjQt9C80LXRgNGP0LXQvNGL0YUg0YLQvtCy0LDRgNC+0LJcbiAgICAgKiDQvNC10L3Rj9GO0YLRgdGPINGC0L7Qu9GM0LrQviDQsiDQvdGR0LwsINC00LDQttC1INC10YHQu9C4INC80LXRgtGA0LDQtiDQtdGJ0ZEg0L3QtSDQt9Cw0LTQsNC9LlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBtZWFzdXJlZEluRGlhbG9nID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gICAgLyoqXG4gICAgICog0J7RgtC60YPQtNCwINGD0LTQsNC70Y/QtdGC0YHRjyDQv9C+0LfQuNGG0LjRjyDQtNC70Y8g0YLQtdC60YHRgtCwINC/0L7QtNGC0LLQtdGA0LbQtNC10L3QuNGPLCDQvdCw0L/RgNC40LzQtdGAIMKr0LjQtyDRh9C10YDQvdC+0LLQuNC60LDCuy4g0JXRgdC70Lgg0L3QtSDQt9Cw0LTQsNC90L4sINC/0L7Qt9C40YbQuNGPINGD0LTQsNC70Y/QtdGC0YHRjyDQsdC10Lcg0L/QvtC00YLQstC10YDQttC00LXQvdC40Y8uXG4gICAgICog0KLQvtGCINC20LUg0YLQtdC60YHRgiDQuNGB0L/QvtC70YzQt9GD0LXRgtGB0Y8g0LIg0L/RgNC10LTRg9C/0YDQtdC20LTQtdC90LjQuCDQviDQvdGD0LvQtdCy0L7QvCDQutC+0LvQuNGH0LXRgdGC0LLQtS5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgZGVsZXRlQ29uZmlybWF0aW9uVGFyZ2V0ID0gaW5wdXQ8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG5cbiAgICAvKipcbiAgICAgKiDQn9C+0LTQv9C40YHRjCDQuNGC0L7Qs9C+0LLQvtC5INGB0YPQvNC80YsuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IHRvdGFsTGFiZWwgPSBpbnB1dDxzdHJpbmc+KCfQmNGC0L7Qs9C+Jyk7XG5cbiAgICAvKipcbiAgICAgKiDQn9C+0LfQuNGG0LjQuCwg0YDQsNC30LHQuNGC0YvQtSDQvdCwINCz0YDRg9C/0L/Riy4g0JHQtdC3INCz0YDRg9C/0L/QuNGA0L7QstC60Lgg0LLRgdC1INC/0L7Qt9C40YbQuNC4INC40LTRg9GCINC+0LTQvdC+0Lkg0LPRgNGD0L/Qv9C+0Lkg0LHQtdC3INC30LDQs9C+0LvQvtCy0LrQsC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgZ3JvdXBzID0gY29tcHV0ZWQ8U2NJT3JkZXJJdGVtc0dyb3VwW10+KCgpID0+IHtcbiAgICAgICAgY29uc3QgaXRlbXMgPSB0aGlzLml0ZW1zU2lnbmFsKCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JvdXBlZCgpID8gU2NPcmRlckl0ZW1zR3JvdXAuZnJvbUl0ZW1zKGl0ZW1zKSA6IFtuZXcgU2NPcmRlckl0ZW1zR3JvdXAoJycsIGl0ZW1zKV07XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiDQmNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgNGLINC/0L7Qt9C40YbQuNC5LCDQuNC30LzQtdC90LXQvdC40LUg0LjQu9C4INGD0LTQsNC70LXQvdC40LUg0LrQvtGC0L7RgNGL0YUg0LbQtNGR0YIg0L7Rh9C10YDQtdC00Lgg0LjQu9C4INCy0YvQv9C+0LvQvdGP0LXRgtGB0Y8uXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHBlbmRpbmdJdGVtc0lkcyA9IHNpZ25hbDxSZWFkb25seVNldDxzdHJpbmc+PihuZXcgU2V0PHN0cmluZz4oKSk7XG5cbiAgICAvKipcbiAgICAgKiDQktC90YPRgtGA0LXQvdC90Y/RjyDQs9GA0YPQv9C/0LAg0YTQvtGA0LzRiyDQtNC70Y8g0LLRi9Cx0L7RgNCwINC/0L7Qt9C40YbQuNC5LlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBzZWxlY3Rpb25Gb3JtR3JvdXAgPSBuZXcgRm9ybUdyb3VwPFJlY29yZDxzdHJpbmcsIEZvcm1Db250cm9sPGJvb2xlYW4+Pj4oe30pO1xuXG4gICAgLyoqXG4gICAgICog0J7Qv9GG0LjQuCDQt9Cw0LrQsNC30LAgKNGH0LXRgNC90L7QstC40LrQsCkuINCf0YDQtdC00L7RgdGC0LDQstC70Y/QtdGC0YHRjyDQtNC40YDQtdC60YLQuNCy0L7QuSB7QGxpbmsgU2NPcmRlckFjY2Vzc29yRGlyZWN0aXZlfSDQsiDQutC+0L3RgtC10LrRgdGC0LUg0YfQtdGA0L3QvtCy0LjQutCwLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBvcmRlck9wdGlvbnMgPSBpbmplY3Q8U2NPcmRlck9wdGlvbnM+KFNDX09SREVSX09QVElPTlMsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG5cbiAgICAvKipcbiAgICAgKiDQmNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgNGLINCy0YvQsdGA0LDQvdC90YvRhSDQv9C+0LfQuNGG0LjQuS5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgaXRlbXNJZHMgPSB0b1NpZ25hbCh0aGlzLnNlbGVjdGlvbkZvcm1Hcm91cC52YWx1ZUNoYW5nZXMucGlwZShtYXAoKHZhbHVlKSA9PiBPYmplY3QuZW50cmllczxib29sZWFuPih2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPikpKSwge1xuICAgICAgICBpbml0aWFsVmFsdWU6IFtdLFxuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICog0KHQvtGB0YLQvtGP0L3QuNC1INGE0LvQsNCz0LAgwqvQktGL0LHRgNCw0YLRjCDQstGB0LXCuzogYHRydWVgLCDQtdGB0LvQuCDQstGL0LHRgNCw0L3RiyDQstGB0LUg0LTQvtGB0YLRg9C/0L3Ri9C1INC00LvRjyDQstGL0LHQvtGA0LAg0L/QvtC30LjRhtC40LgsIGBmYWxzZWAsINC10YHQu9C4INC90Lgg0L7QtNC90L7QuSDQuNC70Lgg0LLRi9Cx0LjRgNCw0YLRjCDQvdC10YfQtdCz0L4sXG4gICAgICog0LggYG51bGxgLCDQtdGB0LvQuCDRgtC+0LvRjNC60L4g0YfQsNGB0YLRjC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgYWxsSXRlbXNTZWxlY3RlZCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgY29uc3QgY2hlY2tlZExpc3QgPSB0aGlzLml0ZW1zSWRzKCkubWFwKChbLCBjaGVja2VkXSkgPT4gY2hlY2tlZCk7XG5cbiAgICAgICAgaWYgKGNoZWNrZWRMaXN0Lmxlbmd0aCA+IDAgJiYgY2hlY2tlZExpc3QuZXZlcnkoQm9vbGVhbikpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNoZWNrZWRMaXN0LnNvbWUoQm9vbGVhbikgPyBudWxsIDogZmFsc2U7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiDQodC40LPQvdCw0Lsg0LjQtNC10L3RgtC40YTQuNC60LDRgtC+0YDQvtCyINCy0YvQsdGA0LDQvdC90YvRhSDQv9C+0LfQuNGG0LjQuS5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgc2VsZWN0ZWRJdGVtc0lkcyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgY29uc3Qgc2VsZWN0YWJsZSA9IHRoaXMuc2VsZWN0YWJsZSgpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLml0ZW1zSWRzKClcbiAgICAgICAgICAgIC5maWx0ZXIoKFssIGNoZWNrZWRdKSA9PiAhc2VsZWN0YWJsZSB8fCBjaGVja2VkKVxuICAgICAgICAgICAgLm1hcCgoW2tleV0pID0+IGtleSk7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiDQktGL0YXQvtC00L3Ri9C1INC00LDQvdC90YvQtSDQv9GA0Lgg0LjQt9C80LXQvdC10L3QuNC4INCy0YvQsdC+0YDQsCDQv9C+0LfQuNGG0LjQuS5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgc2VsZWN0ZWRJdGVtc0lkc0NoYW5nZSA9IG91dHB1dEZyb21PYnNlcnZhYmxlKHRvT2JzZXJ2YWJsZSh0aGlzLnNlbGVjdGVkSXRlbXNJZHMpKTtcblxuICAgIC8qKlxuICAgICAqINCh0YPQvNC80LAg0YHRgtC+0LjQvNC+0YHRgtC4INCy0YvQsdGA0LDQvdC90YvRhSDQv9C+0LfQuNGG0LjQuS5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgc3VtU2VsZWN0ZWRJdGVtcyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgY29uc3QgaXRlbXMgPSB0aGlzLml0ZW1zU2lnbmFsKCk7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkSXRlbXNJZHMgPSB0aGlzLnNlbGVjdGVkSXRlbXNJZHMoKTtcbiAgICAgICAgY29uc3Qgc2VsZWN0YWJsZSA9IHRoaXMuc2VsZWN0YWJsZSgpO1xuXG4gICAgICAgIHJldHVybiBTY09yZGVySXRlbS5nZXRDb3N0U3VtKGl0ZW1zLmZpbHRlcigoaXRlbSkgPT4gIXNlbGVjdGFibGUgfHwgc2VsZWN0ZWRJdGVtc0lkcy5pbmNsdWRlcyhpdGVtLmlkKSkpO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICog0KHQtdGA0LLQuNGBINC/0L7Qu9GD0YfQtdC90LjRjyDQuCDRgNC10LTQsNC60YLQuNGA0L7QstCw0L3QuNGPINGB0L/QuNGB0LrQsCDRgtC+0LLQsNGA0L7QsiDQt9Cw0LrQsNC30LAgKNC60L7RgNC30LjQvdCwIC8g0LfQsNC60LDQtyAvINGH0LXRgNC90L7QstC40LogPSDQt9Cw0LrQsNC3KS5cbiAgICAgKiDQn9GA0LXQtNC+0YHRgtCw0LLQu9GP0LXRgtGB0Y8g0YDQvtC00LjRgtC10LvQtdC8INGH0LXRgNC10Lcg0YLQvtC60LXQvSB7QGxpbmsgU0NfT1JERVJfTE9BREVSfSAo0YDQtdCw0LvQuNC30LDRhtC40Y8ge0BsaW5rIFNjSU9yZGVyTG9hZGVyfSkuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IG9yZGVySXRlbXNMaXN0TG9hZGVyID0gaW5qZWN0PFNjSU9yZGVyTG9hZGVyIHwgU2NJT3JkZXJFZGl0b3JMb2FkZXI+KFNDX09SREVSX0xPQURFUik7XG5cbiAgICAvKipcbiAgICAgKiDQn9GA0LjQt9C90LDQuiwg0YfRgtC+INC80L7QttC90L4g0YDQtdC00LDQutGC0LjRgNC+0LLQsNGC0Ywg0L/QvtC30LjRhtC40LguXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGNhbkVkaXQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmVkaXRhYmxlKCkgJiYgJ3VwZGF0ZVByb2R1Y3QkJyBpbiB0aGlzLm9yZGVySXRlbXNMaXN0TG9hZGVyKTtcblxuICAgIC8qKlxuICAgICAqINCd0LDRgdGC0YDQvtC50LrQuCDQstGL0LLQvtC00LAg0YHRg9C80Lwg0LIg0YDRg9Cx0LvRj9GFLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBtb25leUZvcm1hdCA9IFNjTnVtYmVySGVscGVyLmdldE1vbmV5Rm9ybWF0KCk7XG5cbiAgICAvKipcbiAgICAgKiDQodGB0YvQu9C60LAg0LTQu9GPINCw0LLRgtC+0LzQsNGC0LjRh9C10YHQutC+0LPQviDRg9C/0YDQsNCy0LvQtdC90LjRjyDRg9C90LjRh9GC0L7QttC10L3QuNC10Lwg0LfQsNCy0LjRgdC40LzQvtGB0YLQtdC5LlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcblxuICAgIC8qKlxuICAgICAqINCh0LXRgNCy0LjRgSDQtNC70Y8g0YDQsNCx0L7RgtGLINGBINC00LjQsNC70L7Qs9C+0LLRi9C80Lgg0L7QutC90LDQvNC4LlxuICAgICAqINCf0YDQtdC00L7RgdGC0LDQstC70Y/QtdGC0YHRjyDRgNC+0LTQuNGC0LXQu9C10Lwg0YfQtdGA0LXQtyDRgtC+0LrQtdC9IHtAbGluayBTQ19ESUFMT0dfU0VSVklDRV9UT0tFTn0uXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBzY0RpYWxvZ1NlcnZpY2UgPSBpbmplY3Q8SVNjRGlhbG9nU2VydmljZT4oU0NfRElBTE9HX1NFUlZJQ0VfVE9LRU4pO1xuXG4gICAgLyoqXG4gICAgICog0KHQtdGA0LLQuNGBINC00LjQsNC70L7Qs9C+0LLRi9GFINC+0LrQvtC9IFRhaWdhINC00LvRjyDQv9C+0LTRgtCy0LXRgNC20LTQtdC90LjQuS5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGRpYWxvZ1NlcnZpY2UgPSBpbmplY3QoVHVpRGlhbG9nU2VydmljZSk7XG5cbiAgICAvKipcbiAgICAgKiDQodC10YDQstC40YEg0YPQstC10LTQvtC80LvQtdC90LjQuS5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGFsZXJ0cyA9IGluamVjdChUdWlBbGVydFNlcnZpY2UpO1xuXG4gICAgLyoqXG4gICAgICog0JjQvdC40YbQuNCw0LvQuNC30LjRgNGD0LXRgiDRjdC60LfQtdC80L/Qu9GP0YAg0LrQu9Cw0YHRgdCwIHtAbGluayBTY09yZGVySXRlbXNMaXN0Q29tcG9uZW50fS5cbiAgICAgKiDQktGF0L7QtNGLINCy0YvQsdC+0YDQsCDQuCDQv9C+0LzQtdGC0LrQuCDQvdC10LTQvtGB0YLRg9C/0L3Ri9GFINC/0L7Qt9C40YbQuNC5INC80L7Qs9GD0YIg0L/RgNC40LnRgtC4INC/0L7RgdC70LUg0YHQv9C40YHQutCwINC/0L7Qt9C40YbQuNC5LCDQv9C+0Y3RgtC+0LzRgyDQv9GA0Lgg0LjRhSDQuNC30LzQtdC90LXQvdC40Lgg0LLRi9Cx0L7RgCDRgdC40L3RhdGA0L7QvdC40LfQuNGA0YPQtdGC0YHRjyDQt9Cw0L3QvtCy0L4uXG4gICAgICovXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5tYXJrVW5hdmFpbGFibGUoKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0YWJsZSgpO1xuICAgICAgICAgICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnN5bmNTZWxlY3Rpb25Db250cm9scygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCh0L/QuNGB0L7QuiDRjdC70LXQvNC10L3RgtC+0LIg0LrQvtGA0LfQuNC90YsgKNGC0L7QstCw0YDQvtCyKS4g0J/RgNC4INGD0YHRgtCw0L3QvtCy0LrQtSDRgdC40L3RhdGA0L7QvdC90L4g0L7QsdC90L7QstC70Y/QtdGCINC60L7QvdGC0YDQvtC70Ysg0LLRi9Cx0L7RgNCwINCyINGE0L7RgNC80LUuXG4gICAgICovXG4gICAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcbiAgICBzZXQgaXRlbXModmFsdWU6IFNjT3JkZXJJdGVtW10pIHtcbiAgICAgICAgdGhpcy5pdGVtc1NpZ25hbC5zZXQodmFsdWUpO1xuICAgICAgICB0aGlzLnN5bmNTZWxlY3Rpb25Db250cm9scygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCh0LjQvdGF0YDQvtC90LjQt9C40YDRg9C10YIg0LrQvtC90YLRgNC+0LvRiyDRhNC+0YDQvNGLINCy0YvQsdC+0YDQsCDRgSDRgtC10LrRg9GJ0LjQvCDRgdC/0LjRgdC60L7QvCDRgtC+0LLQsNGA0L7Qsjog0YPQtNCw0LvRj9C10YIg0LrQvtC90YLRgNC+0LvRiyDQtNC70Y8g0L7RgtGB0YPRgtGB0YLQstGD0Y7RidC40YUgaWQsINC00L7QsdCw0LLQu9GP0LXRgiDQtNC70Y8g0L3QvtCy0YvRhS5cbiAgICAgKiDQmtC+0L3RgtGA0L7Qu9GLINC80LXQvdGP0Y7RgtGB0Y8g0LHQtdC3INGB0L7QsdGL0YLQuNC5LCDQsCDQt9C90LDRh9C10L3QuNC1INCz0YDRg9C/0L/RiyDQv9C10YDQtdGB0YfQuNGC0YvQstCw0LXRgtGB0Y8g0L7QtNC40L0g0YDQsNC3INCyINC60L7QvdGG0LU6INC90LAg0LfQsNGP0LLQutCw0YUg0LIg0YHQvtGC0L3QuCDQv9C+0LfQuNGG0LjQuSDRjdGC0L4g0LfQsNC80LXRgtC90L4uXG4gICAgICovXG4gICAgcHJpdmF0ZSBzeW5jU2VsZWN0aW9uQ29udHJvbHMoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5zZWxlY3RhYmxlKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGN1cnJlbnRJdGVtcyA9IHRoaXMuaXRlbXNTaWduYWwoKTtcbiAgICAgICAgY29uc3QgY3VycmVudElkcyA9IG5ldyBTZXQoY3VycmVudEl0ZW1zLm1hcCgoaXRlbSkgPT4gaXRlbS5pZCkpO1xuXG4gICAgICAgIE9iamVjdC5rZXlzKHRoaXMuc2VsZWN0aW9uRm9ybUdyb3VwLmNvbnRyb2xzKS5mb3JFYWNoKChuYW1lKSA9PiB7XG4gICAgICAgICAgICBpZiAoIWN1cnJlbnRJZHMuaGFzKG5hbWUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25Gb3JtR3JvdXAucmVtb3ZlQ29udHJvbChuYW1lIGFzIG5ldmVyLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGN1cnJlbnRJdGVtcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb250cm9sID0gdGhpcy5zZWxlY3Rpb25Gb3JtR3JvdXAuZ2V0KGl0ZW0uaWQpO1xuICAgICAgICAgICAgY29uc3QgaXNTZWxlY3RhYmxlID0gIXRoaXMubWFya1VuYXZhaWxhYmxlKCkgfHwgaXRlbS5pc09yZGVyYWJsZTtcblxuICAgICAgICAgICAgaWYgKCFjb250cm9sKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25Gb3JtR3JvdXAuYWRkQ29udHJvbChpdGVtLmlkLCBuZXcgRm9ybUNvbnRyb2woeyB2YWx1ZTogaXNTZWxlY3RhYmxlLCBkaXNhYmxlZDogIWlzU2VsZWN0YWJsZSB9LCB7IG5vbk51bGxhYmxlOiB0cnVlIH0pLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFpc1NlbGVjdGFibGUgJiYgY29udHJvbC5lbmFibGVkKSB7XG4gICAgICAgICAgICAgICAgY29udHJvbC5zZXRWYWx1ZShmYWxzZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICAgICAgICAgIGNvbnRyb2wuZGlzYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzU2VsZWN0YWJsZSAmJiBjb250cm9sLmRpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgY29udHJvbC5lbmFibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICAgICAgICAgIGNvbnRyb2wuc2V0VmFsdWUodHJ1ZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnNlbGVjdGlvbkZvcm1Hcm91cC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0JLRi9Cx0LjRgNCw0LXRgiDQstGB0LUg0LTQvtGB0YLRg9C/0L3Ri9C1INC00LvRjyDQstGL0LHQvtGA0LAg0L/QvtC30LjRhtC40Lgg0LjQu9C4INGB0L3QuNC80LDQtdGCINCy0YvQsdC+0YAg0YHQviDQstGB0LXRhS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudCDQodC+0LHRi9GC0LjQtSDQuNC30LzQtdC90LXQvdC40Y8g0YTQu9Cw0LPQsCDQstGL0LHQvtGA0LAg0LLRgdC10YUg0L/QvtC30LjRhtC40LkuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHNlbGVjdEFsbENoYW5nZUhhbmRsZXIoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHsgY2hlY2tlZCB9ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGVuYWJsZWRJZHMgPSBPYmplY3QuZW50cmllcyh0aGlzLnNlbGVjdGlvbkZvcm1Hcm91cC5jb250cm9scylcbiAgICAgICAgICAgIC5maWx0ZXIoKFssIGNvbnRyb2xdKSA9PiBjb250cm9sLmVuYWJsZWQpXG4gICAgICAgICAgICAubWFwKChbaWRdKSA9PiBpZCk7XG5cbiAgICAgICAgdGhpcy5zZWxlY3Rpb25Gb3JtR3JvdXAucGF0Y2hWYWx1ZShPYmplY3QuZnJvbUVudHJpZXMoZW5hYmxlZElkcy5tYXAoKGlkKSA9PiBbaWQsIGNoZWNrZWRdKSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCS0L7Qt9Cy0YDQsNGJ0LDQtdGCINC/0YDQuNC30L3QsNC6LCDRh9GC0L4g0L/QvtC30LjRhtC40Y8g0L/RgNC40LPQu9GD0YjQtdC90LA6INC+0L3QsCDQvdC10LDQutGC0LjQstC90LAg0LjQu9C4INC90LUg0LLRi9Cx0YDQsNC90LAg0LTQu9GPINC30LDQutCw0LfQsC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBpdGVtINCf0L7Qt9C40YbQuNGPLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBpc0l0ZW1EaW1tZWQoaXRlbTogU2NPcmRlckl0ZW0pOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgaXNVbnNlbGVjdGVkID0gdGhpcy5zZWxlY3RhYmxlKCkgJiYgIXRoaXMuc2VsZWN0aW9uRm9ybUdyb3VwLmdldChpdGVtLmlkKT8udmFsdWU7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMubWFya1VuYXZhaWxhYmxlKCkgPyBpdGVtLmlzSW5hY3RpdmUgfHwgKGl0ZW0uaXNPcmRlcmFibGUgJiYgaXNVbnNlbGVjdGVkKSA6IGlzVW5zZWxlY3RlZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQktC+0LfQstGA0LDRidCw0LXRgiDQv9GA0LjQt9C90LDQuiwg0YfRgtC+INC60L7Qu9C40YfQtdGB0YLQstC+INC4INC80LXRgtGA0LDQtiDRgtC+0LLQsNGA0LAg0L/QvtC30LjRhtC40Lgg0LzQtdC90Y/RjtGC0YHRjyDQsiDQtNC40LDQu9C+0LPQtSDRgtC+0LLQsNGA0LAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaXRlbSDQn9C+0LfQuNGG0LjRjy5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgaXNFZGl0ZWRJbkRpYWxvZyhpdGVtOiBTY09yZGVySXRlbSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5tZWFzdXJlZEluRGlhbG9nKCkgJiYgU2NVbml0c0hlbHBlci5wcm9kdWN0SXNNZWFzdXJhYmxlKGl0ZW0ucHJvZHVjdCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0KPQtNCw0LvRj9C10YIg0L/QvtC30LjRhtC40Y4sINC/0YDQuCDQvdC10L7QsdGF0L7QtNC40LzQvtGB0YLQuCDQv9C+0YHQu9C1INC/0L7QtNGC0LLQtdGA0LbQtNC10L3QuNGPLiDQodC+0L7QsdGJ0LXQvdC40LUg0L7QsSDQvtGI0LjQsdC60LUg0L/QvtC60LDQt9GL0LLQsNC10YIg0L/QtdGA0LXRhdCy0LDRgtGH0LjQuiDQv9GA0LjQu9C+0LbQtdC90LjRjy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBpdGVtINCf0L7Qt9C40YbQuNGPINGC0L7QstCw0YDQsCDQtNC70Y8g0YPQtNCw0LvQtdC90LjRjy5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgZGVsZXRlSXRlbShpdGVtOiBTY09yZGVySXRlbSk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuY2FuRWRpdCgpIHx8IHRoaXMucGVuZGluZ0l0ZW1zSWRzKCkuaGFzKGl0ZW0uaWQpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbmZpcm1EZWxldGUkKGl0ZW0pXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEl0ZW1QZW5kaW5nKGl0ZW0uaWQsIHRydWUpO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAodGhpcy5vcmRlckl0ZW1zTGlzdExvYWRlciBhcyBTY0lPcmRlckVkaXRvckxvYWRlcikuZGVsZXRlUHJvZHVjdCQoaXRlbSwgdGhpcy5vcmRlck9wdGlvbnM/Lm9yZGVySWQoKSkucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsaXplKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEl0ZW1QZW5kaW5nKGl0ZW0uaWQsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZilcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoeyBlcnJvcjogbm9vcCB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQntCx0L3QvtCy0LvRj9C10YIg0LrQvtC70LjRh9C10YHRgtCy0L4g0YLQvtCy0LDRgNCwLiDQmtC+0LvQuNGH0LXRgdGC0LLQviDQvdC10LDQutGC0LjQstC90L7QuSDQv9C+0LfQuNGG0LjQuCDQvdC1INC80LXQvdGP0LXRgtGB0Y8uINCf0YPRgdGC0L7QtSDQuNC70Lgg0L3Rg9C70LXQstC+0LUg0LfQvdCw0YfQtdC90LjQtSDQstC+0LfQstGA0LDRidCw0LXRgtGB0Y8g0Log0YHQvtGF0YDQsNC90ZHQvdC90L7QvNGDINC60L7Qu9C40YfQtdGB0YLQstGDLlxuICAgICAqXG4gICAgICogQHBhcmFtIG5ld1F1YW50aXR5INCd0L7QstC+0LUg0LfQvdCw0YfQtdC90LjQtSDQutC+0LvQuNGH0LXRgdGC0LLQsCDRgtC+0LLQsNGA0LAuXG4gICAgICogQHBhcmFtIHByaWNlQ2FyZCDQmtC+0LzQv9C+0L3QtdC90YIg0LrQsNGA0YLQvtGH0LrQuCDRgtC+0LLQsNGA0LAuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHBhdGNoSXRlbShuZXdRdWFudGl0eTogbnVtYmVyIHwgbnVsbCwgcHJpY2VDYXJkOiBBYnN0cmFjdFNjUHJpY2VDYXJkKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHsgb3JkZXJJdGVtIH0gPSBwcmljZUNhcmQ7XG5cbiAgICAgICAgaWYgKCF0aGlzLmNhbkVkaXQoKSB8fCAhb3JkZXJJdGVtIHx8ICFwcmljZUNhcmQucHJvZHVjdCB8fCBvcmRlckl0ZW0uaXNJbmFjdGl2ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFuZXdRdWFudGl0eSkge1xuICAgICAgICAgICAgcHJpY2VDYXJkLnF1YW50aXR5Q29udHJvbC5wYXRjaFZhbHVlKG9yZGVySXRlbS5xdWFudGl0eSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICAgICAgdGhpcy53YXJuRW1wdHlRdWFudGl0eSgpO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNldEl0ZW1QZW5kaW5nKG9yZGVySXRlbS5pZCwgdHJ1ZSk7XG5cbiAgICAgICAgKHRoaXMub3JkZXJJdGVtc0xpc3RMb2FkZXIgYXMgU2NJT3JkZXJFZGl0b3JMb2FkZXIpXG4gICAgICAgICAgICAudXBkYXRlUHJvZHVjdCQob3JkZXJJdGVtLmlkLCB7IHF1YW50aXR5OiBuZXdRdWFudGl0eSB9LCB0aGlzLm9yZGVyT3B0aW9ucz8ub3JkZXJJZCgpKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgZmluYWxpemUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEl0ZW1QZW5kaW5nKG9yZGVySXRlbS5pZCwgZmFsc2UpO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBwcmljZUNhcmQucXVhbnRpdHlDb250cm9sLnBhdGNoVmFsdWUoKHByaWNlQ2FyZC5vcmRlckl0ZW0gPz8gb3JkZXJJdGVtKS5xdWFudGl0eSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQntGC0LrRgNGL0LLQsNC10YIg0LzQvtC00LDQu9GM0L3QvtC1INC+0LrQvdC+INC+0L/QuNGB0LDQvdC40Y8g0YLQvtCy0LDRgNCwLlxuICAgICAqXG4gICAgICogQHBhcmFtIHByb2R1Y3Qg0KLQvtCy0LDRgC/Rg9GB0LvRg9Cz0LAsINC+0L/QuNGB0LDQvdC40LUg0LrQvtGC0L7RgNC+0Lkg0L3QtdC+0LHRhdC+0LTQuNC80L4g0L7RgtC+0LHRgNCw0LfQuNGC0YwuXG4gICAgICogQHBhcmFtIG9yZGVySXRlbSDQldC00LjQvdC40YfQvdCw0Y8g0L/QvtC30LjRhtC40Y8g0YLQvtCy0LDRgNCwL9GD0YHQu9GD0LPQuCDQsiDQt9Cw0LrQsNC30LUsINC00LvRjyDQutC+0YLQvtGA0L7QuSDQvdC10L7QsdGF0L7QtNC40LzQviDQvtGC0LrRgNGL0YLRjCDQutC+0L3RhNC40LPRg9GA0LDRgtC+0YAuXG4gICAgICogQHBhcmFtIG9yZGVySWQg0JjQtNC10L3RgtC40YTQuNC60LDRgtC+0YAg0LfQsNC60LDQt9CwLCDQsiDQutC+0YLQvtGA0L7QvCDQvdC10L7QsdGF0L7QtNC40LzQviDQvtGC0LrRgNGL0YLRjCDQutC+0L3RhNC40LPRg9GA0LDRgtC+0YAuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIG9wZW5Qcm9kdWN0SW5mb0RpYWxvZyhwcm9kdWN0OiBTY09yZGVySXRlbVsncHJvZHVjdCddLCBvcmRlckl0ZW0/OiBTY09yZGVySXRlbSwgb3JkZXJJZD86IG51bWJlcik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zY0RpYWxvZ1NlcnZpY2Uub3BlblByb2R1Y3RJbmZvRGlhbG9nKSB7XG4gICAgICAgICAgICB0aGlzLnNjRGlhbG9nU2VydmljZS5vcGVuUHJvZHVjdEluZm9EaWFsb2cocHJvZHVjdCwgb3JkZXJJdGVtLCBvcmRlcklkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCe0YLQutGA0YvQstCw0LXRgiDQvNC+0LTQsNC70YzQvdC+0LUg0L7QutC90L4g0LjQt9C80LXQvdC10L3QuNGPINGC0L7QstCw0YDQsCDQuNC70Lgg0LXQs9C+INC60L7QvdGE0LjQs9GD0YDQsNGC0L7RgNCwLiDQldGB0LvQuCDQv9Cw0YDQsNC80LXRgtGA0Ysg0L/QvtC30LjRhtC40Lgg0LzQtdC90Y/RjtGC0YHRjyDQsiDQtNC40LDQu9C+0LPQtSwg0L7QutC90L4g0YLQvtCy0LDRgNCwINC+0YLQutGA0YvQstCw0LXRgtGB0Y8g0Lgg0YMg0YjRgtGD0YfQvdC+0LPQviDRgtC+0LLQsNGA0LAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaXRlbSDQn9C+0LfQuNGG0LjRjyDRgtC+0LLQsNGA0LAuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIG9wZW5TZXR0aW5nc0RpYWxvZyhpdGVtOiBTY09yZGVySXRlbSk6IHZvaWQge1xuICAgICAgICBjb25zdCBpc0NvbmZpZ3VyYXRvciA9IEJvb2xlYW4oaXRlbS5jb25maWd1cmF0b3IpO1xuXG4gICAgICAgIGlmIChpc0NvbmZpZ3VyYXRvcikge1xuICAgICAgICAgICAgdGhpcy5zY0RpYWxvZ1NlcnZpY2Uub3BlbkNvbmZpZ3VyYXRvckRpYWxvZyhpdGVtLnByb2R1Y3QsIGl0ZW0sIHRoaXMub3JkZXJPcHRpb25zPy5vcmRlcklkKCkpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMubWVhc3VyZWRJbkRpYWxvZygpIHx8IFNjVW5pdHNIZWxwZXIucHJvZHVjdElzTWVhc3VyYWJsZShpdGVtLnByb2R1Y3QpKSB7XG4gICAgICAgICAgICB0aGlzLnNjRGlhbG9nU2VydmljZS5vcGVuQWRkT3JFZGl0aW5nQ2FydEl0ZW1EaWFsb2coaXRlbS5wcm9kdWN0LCBpdGVtLCB0aGlzLm9yZGVyT3B0aW9ucz8ub3JkZXJJZCgpLCB0cnVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCe0YLQutGA0YvQstCw0LXRgiDQtNC40LDQu9C+0LPQvtCy0L7QtSDQvtC60L3QviBcItCT0YDQsNGE0LjQuiDQuNC30LzQtdC90LXQvdC40Y8g0YHRgtC+0LjQvNC+0YHRgtC4XCIg0LTQu9GPINGC0L7QstCw0YDQsC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9kdWN0INCi0L7QstCw0YAv0YPRgdC70YPQs9CwLCDQtNC70Y8g0LrQvtGC0L7RgNC+0LPQviDQvdC10L7QsdGF0L7QtNC40LzQviDQvtGC0L7QsdGA0LDQt9C40YLRjCDQs9GA0LDRhNC40Log0LjQt9C80LXQvdC10L3QuNGPINGB0YLQvtC40LzQvtGB0YLQuC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgb3BlblByaWNlSGlzdG9yeUNoYXJ0RGlhbG9nKHByb2R1Y3Q6IFNjT3JkZXJJdGVtWydwcm9kdWN0J10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zY0RpYWxvZ1NlcnZpY2Uub3BlblByaWNlSGlzdG9yeUNoYXJ0RGlhbG9nKHByb2R1Y3QpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCS0L7Qt9Cy0YDQsNGJ0LDQtdGCIHtAbGluayBPYnNlcnZhYmxlfSwg0LrQvtGC0L7RgNGL0Lkg0LLRi9C00LDRkdGCINC30L3QsNGH0LXQvdC40LUsINC60L7Qs9C00LAg0YPQtNCw0LvQtdC90LjQtSDQv9C+0LfQuNGG0LjQuCDQv9C+0LTRgtCy0LXRgNC20LTQtdC90L4g0LjQu9C4INC/0L7QtNGC0LLQtdGA0LbQtNC10L3QuNC1INC90LUg0YLRgNC10LHRg9C10YLRgdGPLlxuICAgICAqXG4gICAgICogQHBhcmFtIGl0ZW0g0KPQtNCw0LvRj9C10LzQsNGPINC/0L7Qt9C40YbQuNGPLlxuICAgICAqL1xuICAgIHByaXZhdGUgY29uZmlybURlbGV0ZSQoaXRlbTogU2NPcmRlckl0ZW0pOiBPYnNlcnZhYmxlPHVua25vd24+IHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gdGhpcy5kZWxldGVDb25maXJtYXRpb25UYXJnZXQoKTtcblxuICAgICAgICBpZiAoIXRhcmdldCkge1xuICAgICAgICAgICAgcmV0dXJuIG9mKHRydWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZGlhbG9nU2VydmljZVxuICAgICAgICAgICAgLm9wZW48Ym9vbGVhbj4oVFVJX0NPTkZJUk0sIHtcbiAgICAgICAgICAgICAgICBsYWJlbDogYNCj0LTQsNC70LjRgtGMINC/0L7Qt9C40YbQuNGOIMKrJHtpdGVtLnByb2R1Y3QubmFtZX3CuyAke3RhcmdldH0/YCxcbiAgICAgICAgICAgICAgICBkYXRhOiB7IHllczogJ9CU0LAsINGD0LTQsNC70LjRgtGMJywgbm86ICfQndC10YIsINC+0YHRgtCw0LLQuNGC0YwnIH0sXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnBpcGUoZmlsdGVyKEJvb2xlYW4pKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQntGC0LzQtdGH0LDQtdGCINC/0L7Qt9C40YbQuNGOINC60LDQuiDQvtC20LjQtNCw0Y7RidGD0Y4g0L7RgtCy0LXRgtCwINC40LvQuCDRgdC90LjQvNCw0LXRgiDQvtGC0LzQtdGC0LrRgy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBpZCDQmNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgCDQv9C+0LfQuNGG0LjQuC5cbiAgICAgKiBAcGFyYW0gaXNQZW5kaW5nINCf0YDQuNC30L3QsNC6INC+0LbQuNC00LDQvdC40Y8uXG4gICAgICovXG4gICAgcHJpdmF0ZSBzZXRJdGVtUGVuZGluZyhpZDogc3RyaW5nLCBpc1BlbmRpbmc6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5wZW5kaW5nSXRlbXNJZHMudXBkYXRlKChpZHMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5leHQgPSBuZXcgU2V0KGlkcyk7XG5cbiAgICAgICAgICAgIGlmIChpc1BlbmRpbmcpIHtcbiAgICAgICAgICAgICAgICBuZXh0LmFkZChpZCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG5leHQuZGVsZXRlKGlkKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCf0YDQtdC00YPQv9GA0LXQttC00LDQtdGCLCDRh9GC0L4g0LrQvtC70LjRh9C10YHRgtCy0L4g0L3QtSDQvNC+0LbQtdGCINCx0YvRgtGMINC/0YPRgdGC0YvQvCDQuNC70Lgg0L3Rg9C70LXQstGL0LwsINCwINGD0LHRgNCw0YLRjCDQv9C+0LfQuNGG0LjRjiDQvNC+0LbQvdC+INGD0LTQsNC70LXQvdC40LXQvC4g0J/QvtC70LUg0LLQvtC30LLRgNCw0YnQsNC10YLRgdGPINC6INGB0L7RhdGA0LDQvdGR0L3QvdC+0LzRgyDQutC+0LvQuNGH0LXRgdGC0LLRg1xuICAgICAqINCyINC70Y7QsdC+0Lwg0YHQv9C40YHQutC1LCDQv9GA0LXQtNGD0L/RgNC10LbQtNC10L3QuNC1INC/0L7QutCw0LfRi9Cy0LDQtdGC0YHRjyDRgtC+0LvRjNC60L4g0LIg0YHQv9C40YHQutCw0YUg0YEg0L/QvtC00YLQstC10YDQttC00LXQvdC40LXQvCDRg9C00LDQu9C10L3QuNGPLlxuICAgICAqL1xuICAgIHByaXZhdGUgd2FybkVtcHR5UXVhbnRpdHkoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IHRoaXMuZGVsZXRlQ29uZmlybWF0aW9uVGFyZ2V0KCk7XG5cbiAgICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICAgICAgdGhpcy5hbGVydHMub3Blbihg0JrQvtC70LjRh9C10YHRgtCy0L4g0LTQvtC70LbQvdC+INCx0YvRgtGMINCx0L7Qu9GM0YjQtSDQvdGD0LvRjy4g0KfRgtC+0LHRiyDRg9Cx0YDQsNGC0Ywg0L/QvtC30LjRhtC40Y4gJHt0YXJnZXR9LCDRg9C00LDQu9C40YLQtSDQtdGRLmAsIHsgYXBwZWFyYW5jZTogJ3dhcm5pbmcnIH0pLnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiPGRpdlxuICAgIFtmb3JtR3JvdXBdPVwic2VsZWN0aW9uRm9ybUdyb3VwXCJcbiAgICBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLTVcIlxuPlxuICAgIDwhLS0g0KTQu9Cw0LMg0LLRi9Cx0L7RgNCwINCy0YHQtdGFINC/0L7Qt9C40YbQuNC5LiAtLT5cbiAgICBAaWYgKHNlbGVjdGFibGUoKSAmJiBpdGVtc1NpZ25hbCgpLmxlbmd0aCkge1xuICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgIHR1aUxhYmVsXG4gICAgICAgICAgICBzY1ByaW50PVwiZGVmYXVsdE5vUHJpbnRcIlxuICAgICAgICAgICAgY2xhc3M9XCJzZWxmLXN0YXJ0XCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgdHVpQ2hlY2tib3hcbiAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgIHNpemU9XCJtXCJcbiAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJhbGxJdGVtc1NlbGVjdGVkKClcIlxuICAgICAgICAgICAgICAgIFtuZ01vZGVsT3B0aW9uc109XCJ7IHN0YW5kYWxvbmU6IHRydWUgfVwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInNlbGVjdGlvbkZvcm1Hcm91cC5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJzZWxlY3RBbGxDaGFuZ2VIYW5kbGVyKCRldmVudClcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgINCS0YvQsdGA0LDRgtGMINCy0YHQtVxuICAgICAgICA8L2xhYmVsPlxuICAgIH1cblxuICAgIEBmb3IgKGdyb3VwIG9mIGdyb3VwcygpOyB0cmFjayBncm91cC5uYW1lKSB7XG4gICAgICAgIDwhLS0g0JfQsNCz0L7Qu9C+0LLQvtC6INCz0YDRg9C/0L/RiyDQv9C+0LfQuNGG0LjQuS4gLS0+XG4gICAgICAgIEBpZiAoZ3JvdXAubmFtZSkge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC13cmFwIGl0ZW1zLWVuZCBqdXN0aWZ5LWJldHdlZW4gZ2FwLXgtNCBnYXAteS0xIGJvcmRlci1iIGJvcmRlci10dWktYmFzZS0wMyBwYi0yXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggbWluLXctMCBmbGV4LWNvbFwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJyZWFrLXdvcmRzIHRleHQtYm9keS1sLWJvbGRcIj57eyBncm91cC5uYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtYm9keS1zIHRleHQtdHVpLXRleHQtMDJcIj7Qv9C+0LfQuNGG0LjQuToge3sgZ3JvdXAuaXRlbXMubGVuZ3RoIH19LCDQsiDQt9Cw0LrQsNC3OiB7eyBncm91cC5vcmRlcmFibGVDb3VudCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIndoaXRlc3BhY2Utbm93cmFwIHRleHQtYm9keS1tLWJvbGRcIj57eyBncm91cC5vcmRlcmFibGVTdW0gfCB0dWlGb3JtYXROdW1iZXI6IG1vbmV5Rm9ybWF0IHwgYXN5bmMgfX0ge3sgJ1JVQicgfCB0dWlDdXJyZW5jeSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG5cbiAgICAgICAgQGZvciAoaXRlbSBvZiBncm91cC5pdGVtczsgdHJhY2sgaXRlbS5pZCkge1xuICAgICAgICAgICAgQGlmICgkaW5kZXggIT09IDApIHtcbiAgICAgICAgICAgICAgICA8aHIgY2xhc3M9XCJtdC1hdXRvIGgtcHggdy1mdWxsIGJnLXR1aS1jbGVhclwiIC8+XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtNCByZWxhdGl2ZVwiPlxuICAgICAgICAgICAgICAgIEBsZXQgaXNBY3RpdmUgPSAhc2VsZWN0YWJsZSgpIHx8IHNlbGVjdGlvbkZvcm1Hcm91cC5nZXQoaXRlbS5pZCk/LnZhbHVlIHx8IChtYXJrVW5hdmFpbGFibGUoKSAmJiAhaXRlbS5pc09yZGVyYWJsZSk7XG4gICAgICAgICAgICAgICAgQGxldCBpc1BlbmRpbmcgPSBwZW5kaW5nSXRlbXNJZHMoKS5oYXMoaXRlbS5pZCk7XG4gICAgICAgICAgICAgICAgQGxldCBlZGl0ZWRJbkRpYWxvZyA9IGlzRWRpdGVkSW5EaWFsb2coaXRlbSk7XG5cbiAgICAgICAgICAgICAgICA8IS0tINCn0LXQutCx0L7QutGBINCy0YvQsdC+0YDQsCDRgtC+0LLQsNGA0LAuIC0tPlxuICAgICAgICAgICAgICAgIEBpZiAoc2VsZWN0YWJsZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgdHVpQ2hlY2tib3hcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwibVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cIml0ZW0uaWRcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIDwhLS0g0JrQsNGA0YLQvtGH0LrQsCDRgtC+0LLQsNGA0LAuIC0tPlxuICAgICAgICAgICAgICAgIDxzYy1vcmRlci1pdGVtXG4gICAgICAgICAgICAgICAgICAgICNpdGVtQ29tcG9uZW50XG4gICAgICAgICAgICAgICAgICAgIFtwcm9kdWN0XT1cIml0ZW0ucHJvZHVjdFwiXG4gICAgICAgICAgICAgICAgICAgIFtvcmRlckl0ZW1dPVwiaXRlbVwiXG4gICAgICAgICAgICAgICAgICAgIFtzaG93UXVhbnRpdHlDb250cm9sXT1cImNhbkVkaXQoKSAmJiAhaXRlbS5jb25maWd1cmF0b3IgJiYgIWVkaXRlZEluRGlhbG9nXCJcbiAgICAgICAgICAgICAgICAgICAgW2lzU2hvd0VkaXRDb250cm9sc109XCJjYW5FZGl0KClcIlxuICAgICAgICAgICAgICAgICAgICBbdXNlTGluZVByaWNlXT1cInVzZUxpbmVQcmljZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgW21hcmtVbmF2YWlsYWJsZV09XCJtYXJrVW5hdmFpbGFibGUoKVwiXG4gICAgICAgICAgICAgICAgICAgIFtpc1BlbmRpbmddPVwiaXNQZW5kaW5nXCJcbiAgICAgICAgICAgICAgICAgICAgW3NldHRpbmdzQXZhaWxhYmxlXT1cImNhbkVkaXQoKSAmJiBtZWFzdXJlZEluRGlhbG9nKCkgJiYgIWl0ZW0uY29uZmlndXJhdG9yICYmICFpdGVtLmlzSW5hY3RpdmVcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInctZnVsbCBkdXJhdGlvbi0yMDBcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3Mub3BhY2l0eS02MF09XCJpc0l0ZW1EaW1tZWQoaXRlbSlcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2tDYXJkRXZlbnQpPVwib3BlblByb2R1Y3RJbmZvRGlhbG9nKGl0ZW0ucHJvZHVjdCwgaXRlbSwgb3JkZXJPcHRpb25zPy5vcmRlcklkKCkpXCJcbiAgICAgICAgICAgICAgICAgICAgKHF1YW50aXR5VmFsdWVDaGFuZ2VzKT1cInBhdGNoSXRlbSgkZXZlbnQsIGl0ZW1Db21wb25lbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrUHJpY2VIaXN0b3J5RXZlbnQpPVwib3BlblByaWNlSGlzdG9yeUNoYXJ0RGlhbG9nKGl0ZW0ucHJvZHVjdClcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2tTZXR0aW5ncyk9XCJvcGVuU2V0dGluZ3NEaWFsb2coaXRlbSlcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MucG9pbnRlci1ldmVudHMtbm9uZV09XCIhaXNBY3RpdmVcIlxuICAgICAgICAgICAgICAgIC8+XG5cbiAgICAgICAgICAgICAgICA8IS0tINCa0L3QvtC/0LrQsCDRg9C00LDQu9C10L3QuNGPINGC0L7QstCw0YDQsC4gLS0+XG4gICAgICAgICAgICAgICAgQGlmIChjYW5FZGl0KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgdHVpSWNvbkJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgaWNvblN0YXJ0PVwiQHR1aS50cmFzaFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZGVsZXRlSXRlbShpdGVtKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbG9hZGluZ109XCJpc1BlbmRpbmdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgYXBwZWFyYW5jZT1cInNlY29uZGFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIiFhYnNvbHV0ZSBsZWZ0LTEgdG9wLTEgbGc6IXJlbGF0aXZlIGxnOmxlZnQtMCBsZzp0b3AtMCBsZzohc2VsZi1jZW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICA8IS0tINCk0YPRgtC10YAg0YHQv9C40YHQutCwLiAtLT5cbiAgICA8ZGl2XG4gICAgICAgIHNjUHJpbnQ9XCJjb3N0XCJcbiAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGl0ZW1zLWVuZCBnYXAtMi41XCJcbiAgICA+XG4gICAgICAgIEBsZXQgdG90YWxTdW0gPSBzdW1TZWxlY3RlZEl0ZW1zKCk7XG4gICAgICAgIDwhLS0g0JjRgtC+0LPQvtCy0LDRjyDRgdGD0LzQvNCwLiAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtYmFzZSBmb250LWJvbGRcIj57eyB0b3RhbExhYmVsKCkgfX06IHt7IHRvdGFsU3VtIHwgdHVpRm9ybWF0TnVtYmVyOiBtb25leUZvcm1hdCB8IGFzeW5jIH19IHt7ICdSVUInIHwgdHVpQ3VycmVuY3kgfX08L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuIl19
|
|
@@ -66,7 +66,7 @@ export class ScOrderItemsListByStockComponent {
|
|
|
66
66
|
this.selectedItemsIds.update((previous) => [...previous.filter((id) => !items.some((item) => item.id === id) && this.items().some((item) => item.id === id)), ...itemsIds]);
|
|
67
67
|
}
|
|
68
68
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScOrderItemsListByStockComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
69
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: ScOrderItemsListByStockComponent, isStandalone: true, selector: "sc-order-items-list-by-stock", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: true, transformFunction: null }, warehouseId: { classPropertyName: "warehouseId", publicName: "warehouseId", isSignal: true, isRequired: true, transformFunction: null }, selectable: { classPropertyName: "selectable", publicName: "selectable", isSignal: true, isRequired: false, transformFunction: null }, editable: { classPropertyName: "editable", publicName: "editable", isSignal: true, isRequired: false, transformFunction: null }, sectionHeader: { classPropertyName: "sectionHeader", publicName: "sectionHeader", isSignal: true, isRequired: false, transformFunction: null }, selectedItemsIds: { classPropertyName: "selectedItemsIds", publicName: "selectedItemsIds", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selectedItemsIds: "selectedItemsIdsChange" }, ngImport: i0, template: "<div class=\"flex flex-col gap-5\">\n @if (itemsInWarehouseStock().length > 0) {\n <sc-order-items-list\n [items]=\"itemsInWarehouseStock()\"\n [selectable]=\"selectable()\"\n [editable]=\"editable()\"\n (selectedItemsIdsChange)=\"selectedItemsHandler($event, itemsInWarehouseStock())\"\n />\n }\n\n @if (itemsOnOrder().length > 0) {\n <div class=\"flex flex-col gap-2.5\">\n @if (sectionHeader()) {\n <div class=\"text-base font-bold text-sc-dark-grey\">{{ sectionHeader() }}</div>\n }\n <sc-order-items-list\n [items]=\"itemsOnOrder()\"\n [selectable]=\"selectable()\"\n [editable]=\"editable()\"\n (selectedItemsIdsChange)=\"selectedItemsHandler($event, itemsOnOrder())\"\n />\n </div>\n }\n\n @if (itemsNotInWarehouseStock().length > 0) {\n <div class=\"flex flex-col gap-2.5\">\n @if (sectionHeader()) {\n <div class=\"text-base font-bold text-sc-dark-grey\">{{ sectionHeader() }}</div>\n }\n <sc-order-items-list\n [items]=\"itemsNotInWarehouseStock()\"\n [selectable]=\"selectable()\"\n [editable]=\"editable()\"\n (selectedItemsIdsChange)=\"selectedItemsHandler($event, itemsNotInWarehouseStock())\"\n />\n </div>\n }\n</div>\n", dependencies: [{ kind: "component", type: ScOrderItemsListComponent, selector: "sc-order-items-list", inputs: ["selectable", "editable", "items"], outputs: ["selectedItemsIdsChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
69
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: ScOrderItemsListByStockComponent, isStandalone: true, selector: "sc-order-items-list-by-stock", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: true, transformFunction: null }, warehouseId: { classPropertyName: "warehouseId", publicName: "warehouseId", isSignal: true, isRequired: true, transformFunction: null }, selectable: { classPropertyName: "selectable", publicName: "selectable", isSignal: true, isRequired: false, transformFunction: null }, editable: { classPropertyName: "editable", publicName: "editable", isSignal: true, isRequired: false, transformFunction: null }, sectionHeader: { classPropertyName: "sectionHeader", publicName: "sectionHeader", isSignal: true, isRequired: false, transformFunction: null }, selectedItemsIds: { classPropertyName: "selectedItemsIds", publicName: "selectedItemsIds", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selectedItemsIds: "selectedItemsIdsChange" }, ngImport: i0, template: "<div class=\"flex flex-col gap-5\">\n @if (itemsInWarehouseStock().length > 0) {\n <sc-order-items-list\n [items]=\"itemsInWarehouseStock()\"\n [selectable]=\"selectable()\"\n [editable]=\"editable()\"\n (selectedItemsIdsChange)=\"selectedItemsHandler($event, itemsInWarehouseStock())\"\n />\n }\n\n @if (itemsOnOrder().length > 0) {\n <div class=\"flex flex-col gap-2.5\">\n @if (sectionHeader()) {\n <div class=\"text-base font-bold text-sc-dark-grey\">{{ sectionHeader() }}</div>\n }\n <sc-order-items-list\n [items]=\"itemsOnOrder()\"\n [selectable]=\"selectable()\"\n [editable]=\"editable()\"\n (selectedItemsIdsChange)=\"selectedItemsHandler($event, itemsOnOrder())\"\n />\n </div>\n }\n\n @if (itemsNotInWarehouseStock().length > 0) {\n <div class=\"flex flex-col gap-2.5\">\n @if (sectionHeader()) {\n <div class=\"text-base font-bold text-sc-dark-grey\">{{ sectionHeader() }}</div>\n }\n <sc-order-items-list\n [items]=\"itemsNotInWarehouseStock()\"\n [selectable]=\"selectable()\"\n [editable]=\"editable()\"\n (selectedItemsIdsChange)=\"selectedItemsHandler($event, itemsNotInWarehouseStock())\"\n />\n </div>\n }\n</div>\n", dependencies: [{ kind: "component", type: ScOrderItemsListComponent, selector: "sc-order-items-list", inputs: ["selectable", "editable", "grouped", "markUnavailable", "useLinePrice", "measuredInDialog", "deleteConfirmationTarget", "totalLabel", "items"], outputs: ["selectedItemsIdsChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
70
70
|
}
|
|
71
71
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScOrderItemsListByStockComponent, decorators: [{
|
|
72
72
|
type: Component,
|