@oneteme/jquery-organizer 0.0.5 → 0.0.7

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.
@@ -18,7 +18,6 @@ export class SlicePanelComponent {
18
18
  this.sliceConfigs = [];
19
19
  this.columns = [];
20
20
  this.data = [];
21
- this.lazyData = new Map();
22
21
  this.lazyStatus = new Map();
23
22
  this.showToggle = true;
24
23
  this.showCounts = true;
@@ -38,23 +37,28 @@ export class SlicePanelComponent {
38
37
  this._countCache = new Map();
39
38
  this.trackBySliceIndex = (index, _) => index;
40
39
  this.trackByCategoryKey = (_, cat) => cat.key;
40
+ this._columnIndex = new Map();
41
41
  }
42
42
  get hostCollapsed() { return this.isCollapsed; }
43
43
  ngOnInit() {
44
44
  this.isCollapsed = this.collapsedByDefault;
45
45
  }
46
46
  ngOnChanges(changes) {
47
- if (changes['sliceConfigs'] || changes['data'] || changes['columns'] || changes['lazyData'] || changes['lazyStatus']) {
47
+ if (changes['sliceConfigs'] || changes['data'] || changes['columns'] || changes['lazyStatus']) {
48
+ const hadActiveFilters = this._hasActiveFilters();
48
49
  this._refreshDynamicSlices();
49
50
  this._rebuildCache();
50
- const shouldReemitFilter = !!(changes['data'] || changes['columns'] || changes['lazyData'] || changes['lazyStatus']);
51
- const hasActiveFilters = [...this.activeKeysBySlice.values()].some(s => s.size > 0);
52
- if (hasActiveFilters && shouldReemitFilter) {
51
+ const shouldReemitFilter = !!(changes['sliceConfigs'] || changes['data'] || changes['columns'] || changes['lazyStatus']);
52
+ // Un slice retiré de la config emporte sa sélection : le parent doit en être informé.
53
+ if (shouldReemitFilter && (hadActiveFilters || this._hasActiveFilters())) {
53
54
  this._emitFilter();
54
55
  }
55
56
  this._cdr.markForCheck();
56
57
  }
57
58
  }
59
+ _hasActiveFilters() {
60
+ return [...this.activeKeysBySlice.values()].some(s => s.size > 0);
61
+ }
58
62
  get showPanel() {
59
63
  const hasCfg = (this.sliceConfigs || []).length > 0 || this._dynamicSlices.length > 0;
60
64
  if (this.alwaysShow)
@@ -163,14 +167,16 @@ export class SlicePanelComponent {
163
167
  return !this.activeKeysBySlice.has(sliceIndex) || this.activeKeysBySlice.get(sliceIndex).size === 0;
164
168
  }
165
169
  sliceCategoryCount(sliceIndex, categoryKey) {
166
- const cacheKey = `${sliceIndex}:${categoryKey}`;
167
- if (this._countCache.has(cacheKey)) {
168
- return this._countCache.get(cacheKey);
169
- }
170
170
  const slice = this._cachedSlices[sliceIndex];
171
171
  if (!slice)
172
172
  return 0;
173
173
  const category = (slice.categories || []).find((c) => c.key === categoryKey);
174
+ if (category?.count !== undefined)
175
+ return category.count;
176
+ const cacheKey = `${sliceIndex}:${categoryKey}`;
177
+ if (this._countCache.has(cacheKey)) {
178
+ return this._countCache.get(cacheKey);
179
+ }
174
180
  const count = category ? (this.data || []).filter((row) => category.filter ? category.filter(row) : true).length : 0;
175
181
  this._countCache.set(cacheKey, count);
176
182
  return count;
@@ -238,11 +244,11 @@ export class SlicePanelComponent {
238
244
  addDynamicSlice(column) {
239
245
  if (this._dynamicSlices.some(slice => slice.key === column.key))
240
246
  return;
241
- const distinctValues = this._computeDistinctValues(column.key);
247
+ const distinct = this._computeDistinctValues(column.key);
242
248
  const newSlice = {
243
249
  title: column.header,
244
250
  columnKey: column.key,
245
- categories: distinctValues.map((v) => this._buildCategoryFromValue(column.key, v)),
251
+ categories: this._buildCategories(column.key, distinct),
246
252
  };
247
253
  this._dynamicSlices = [...this._dynamicSlices, { key: column.key, slice: newSlice }];
248
254
  this._rebuildCache();
@@ -254,14 +260,7 @@ export class SlicePanelComponent {
254
260
  const dynamicIndex = sliceIndex - this.staticSliceCount;
255
261
  if (dynamicIndex < 0)
256
262
  return;
257
- const newActiveKeys = new Map();
258
- this.activeKeysBySlice.forEach((keys, idx) => {
259
- if (idx < sliceIndex)
260
- newActiveKeys.set(idx, keys);
261
- else if (idx > sliceIndex)
262
- newActiveKeys.set(idx - 1, keys);
263
- });
264
- this.activeKeysBySlice = newActiveKeys;
263
+ // Les sélections sont rapprochées des slices restants par identité dans _rebuildCache.
265
264
  this._dynamicSlices = this._dynamicSlices.filter((_, i) => i !== dynamicIndex);
266
265
  this._rebuildCache();
267
266
  this.dynamicSliceKeysChange.emit(this._dynamicSlices.map(d => d.key));
@@ -318,32 +317,37 @@ export class SlicePanelComponent {
318
317
  if (!slice.columnKey || (slice.categories && slice.categories.length > 0)) {
319
318
  return slice;
320
319
  }
321
- const col = (this.columns || []).find(c => c.key === slice.columnKey);
320
+ const col = this._column(slice.columnKey);
322
321
  const isLazy = !!col?.lazy;
323
322
  if (isLazy && this.lazyStatus.get(slice.columnKey) !== 'loaded') {
324
323
  return { ...slice, categories: [] };
325
324
  }
326
325
  if (slice.bucket) {
327
- const distinctValues = [...new Set((this.data || []).map(slice.bucket))].sort();
326
+ const bucket = slice.bucket;
327
+ const counts = new Map();
328
+ (this.data || []).forEach(row => { const v = bucket(row); counts.set(v, (counts.get(v) ?? 0) + 1); });
328
329
  return {
329
330
  ...slice,
330
- categories: distinctValues.map((v) => ({
331
- key: v, label: v,
332
- filter: (row) => slice.bucket(row) === v,
331
+ categories: [...counts.keys()].sort().map((v) => ({
332
+ key: v, label: v, count: counts.get(v),
333
+ filter: (row) => bucket(row) === v,
333
334
  })),
334
335
  };
335
336
  }
336
- const distinctValues = this._computeDistinctValues(slice.columnKey);
337
337
  return {
338
338
  ...slice,
339
- categories: distinctValues.map((v) => this._buildCategoryFromValue(slice.columnKey, v)),
339
+ categories: this._buildCategories(slice.columnKey, this._computeDistinctValues(slice.columnKey)),
340
340
  };
341
341
  }
342
- _buildCategoryFromValue(columnKey, v) {
342
+ _buildCategories(columnKey, distinct) {
343
+ return distinct.values.map((v) => this._buildCategoryFromValue(columnKey, v, distinct.counts.get(v)));
344
+ }
345
+ _buildCategoryFromValue(columnKey, v, count) {
343
346
  if (v === EMPTY_CATEGORY_KEY) {
344
347
  return {
345
348
  key: EMPTY_CATEGORY_KEY,
346
349
  label: EMPTY_CATEGORY_LABEL,
350
+ count,
347
351
  filter: (row) => {
348
352
  const val = this._getLazyAwareValue(columnKey, row);
349
353
  return val == null || val === '';
@@ -351,24 +355,44 @@ export class SlicePanelComponent {
351
355
  };
352
356
  }
353
357
  return {
354
- key: v, label: v,
358
+ key: v, label: v, count,
355
359
  filter: (row) => String(this._getLazyAwareValue(columnKey, row) ?? '') === v,
356
360
  };
357
361
  }
362
+ /** Valeurs distinctes (triées, « vide » en dernier) et effectifs, calculés en un seul passage. */
358
363
  _computeDistinctValues(columnKey) {
359
- const rawValues = (this.data || []).map((row) => {
364
+ const counts = new Map();
365
+ let empty = 0;
366
+ (this.data || []).forEach((row) => {
360
367
  const val = this._getLazyAwareValue(columnKey, row);
361
- return val != null && val !== '' ? String(val) : null;
368
+ if (val != null && val !== '') {
369
+ const text = String(val);
370
+ counts.set(text, (counts.get(text) ?? 0) + 1);
371
+ }
372
+ else {
373
+ empty++;
374
+ }
362
375
  });
363
- const distinct = [...new Set(rawValues.filter((v) => v !== null))].sort();
364
- if (rawValues.some(v => v === null))
365
- distinct.push(EMPTY_CATEGORY_KEY);
366
- return distinct;
376
+ const values = [...counts.keys()].sort();
377
+ if (empty > 0) {
378
+ values.push(EMPTY_CATEGORY_KEY);
379
+ counts.set(EMPTY_CATEGORY_KEY, empty);
380
+ }
381
+ return { values, counts };
382
+ }
383
+ _column(key) {
384
+ if (this._columnsRef !== this.columns) {
385
+ this._columnsRef = this.columns;
386
+ this._columnIndex = new Map();
387
+ (this.columns || []).forEach(c => { if (!this._columnIndex.has(c.key))
388
+ this._columnIndex.set(c.key, c); });
389
+ }
390
+ return key === undefined ? undefined : this._columnIndex.get(key);
367
391
  }
368
392
  _getLazyAwareValue(columnKey, row) {
369
- const colDef = (this.columns || []).find(c => c.key === columnKey);
370
- if (colDef?.lazy) {
371
- return this.lazyData.get(columnKey)?.get(row) ?? null;
393
+ const colDef = this._column(columnKey);
394
+ if (colDef?.lazy && this.lazyStatus.get(columnKey) !== 'loaded') {
395
+ return null;
372
396
  }
373
397
  if (colDef?.value) {
374
398
  return colDef.value(row, 0);
@@ -401,16 +425,10 @@ export class SlicePanelComponent {
401
425
  this._countCache.clear();
402
426
  }
403
427
  _refreshDynamicSlices() {
404
- this._dynamicSlices = this._dynamicSlices.map(({ key, slice }) => {
405
- const distinctValues = this._computeDistinctValues(key);
406
- return {
407
- key,
408
- slice: {
409
- ...slice,
410
- categories: distinctValues.map((v) => this._buildCategoryFromValue(key, v)),
411
- },
412
- };
413
- });
428
+ this._dynamicSlices = this._dynamicSlices.map(({ key, slice }) => ({
429
+ key,
430
+ slice: { ...slice, categories: this._buildCategories(key, this._computeDistinctValues(key)) },
431
+ }));
414
432
  }
415
433
  _scrollSliceTitleIntoView(sliceIndex) {
416
434
  setTimeout(() => {
@@ -422,19 +440,17 @@ export class SlicePanelComponent {
422
440
  }, 50);
423
441
  }
424
442
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SlicePanelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
425
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: SlicePanelComponent, isStandalone: true, selector: "slice-panel", inputs: { sliceConfigs: "sliceConfigs", columns: "columns", data: "data", lazyData: "lazyData", lazyStatus: "lazyStatus", showToggle: "showToggle", showCounts: "showCounts", collapsedByDefault: "collapsedByDefault", alwaysShow: "alwaysShow" }, outputs: { filterChange: "filterChange", activeKeysChange: "activeKeysChange", dynamicSliceKeysChange: "dynamicSliceKeysChange", collapsedChange: "collapsedChange" }, host: { properties: { "class.collapsed": "this.hostCollapsed" } }, viewQueries: [{ propertyName: "slicePanelBodyRef", first: true, predicate: ["slicePanelBody"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"slice-panel-wrapper\" [class.collapsed]=\"isCollapsed\">\n <aside class=\"slice-panel\" [class.collapsed]=\"isCollapsed\">\n <div class=\"slice-panel-header\">\n <span *ngIf=\"!isCollapsed\" class=\"slice-panel-title\">\n {{ i18n.filterPanelTitle(slices.length) }}\n </span>\n <button\n *ngIf=\"showToggle\"\n type=\"button\"\n class=\"slice-toggle\"\n [attr.aria-label]=\"isCollapsed ? i18n.expandFilterTitle : i18n.collapseFilterTitle\"\n (click)=\"togglePanel()\"\n >\n <mat-icon class=\"slice-toggle-mat-icon\">{{ isCollapsed ? 'filter_list' : 'filter_list_off' }}</mat-icon>\n </button>\n </div>\n\n <div class=\"slice-panel-body\" *ngIf=\"!isCollapsed\" #slicePanelBody>\n <ng-container *ngFor=\"let slice of slices; let si = index; trackBy: trackBySliceIndex\">\n <div class=\"slice-title-row\" [attr.data-slice-index]=\"si\" (click)=\"toggleSliceCollapse(si)\">\n <span class=\"slice-title-chevron\" [class.expanded]=\"!isSliceCollapsed(si)\">\u203A</span>\n <mat-icon *ngIf=\"getSliceIcon(slice)\" class=\"slice-title-icon\">{{ getSliceIcon(slice) }}</mat-icon>\n <p class=\"slice-title\">{{ slice.title || i18n.filterBlockDefaultTitle }}</p>\n <button\n *ngIf=\"isSliceDynamic(si)\"\n type=\"button\"\n class=\"slice-remove-btn\"\n (click)=\"$event.stopPropagation(); removeDynamicSlice(si)\"\n >\u00D7</button>\n </div>\n\n <div class=\"slice-section-items\" *ngIf=\"!isSliceCollapsed(si)\">\n <ng-container *ngIf=\"isSliceLoading(si); else sliceContent\">\n <div class=\"slice-lazy-loading\">\n <span class=\"lazy-skeleton\"></span>\n <span class=\"lazy-skeleton\"></span>\n <span class=\"lazy-skeleton\"></span>\n </div>\n </ng-container>\n <ng-template #sliceContent>\n <ng-container *ngFor=\"let category of slice.categories; trackBy: trackByCategoryKey\">\n <button\n *ngIf=\"sliceCategoryCount(si, category.key) > 0\"\n class=\"slice-item\"\n type=\"button\"\n [class.active]=\"isSliceCategoryActive(si, category.key)\"\n [attr.data-category-key]=\"category.key\"\n [title]=\"category.label\"\n (click)=\"onSliceCategorySelected(si, category.key)\"\n >\n <span>{{ category.label }}</span>\n <span *ngIf=\"showCounts\">{{ sliceCategoryCount(si, category.key) }}</span>\n </button>\n </ng-container>\n <div *ngIf=\"isSliceEmpty(si)\" class=\"slice-empty-state\">{{ i18n.filterEmptyState }}</div>\n </ng-template>\n </div>\n\n <hr *ngIf=\"si < slices.length - 1\" class=\"slice-divider\" />\n </ng-container>\n </div>\n </aside>\n</div>\n", styles: ["@keyframes slideInLeft{0%{opacity:0;transform:translate(-24px)}to{opacity:1;transform:translate(0)}}:host{display:block;height:100%;min-height:0;box-sizing:border-box;animation:slideInLeft .3s cubic-bezier(.34,1.56,.64,1) forwards}.slice-panel-wrapper{height:100%;max-height:100%;overflow-y:auto;box-sizing:border-box}.slice-panel{margin-top:0;border:1px solid var(--jqt-border-color);border-radius:10px;background:var(--jqt-surface-color);display:flex;flex-direction:column;min-width:0;height:100%;overflow:hidden;box-sizing:border-box}.slice-panel-header{flex-shrink:0;display:flex;justify-content:flex-end;align-items:center;height:34px;padding:0 8px;margin-bottom:8px}.slice-panel-header:has(.slice-panel-title){justify-content:space-between;padding-left:12px}.slice-panel-body{flex:1 1 0;min-height:0;overflow-y:auto;display:flex;flex-direction:column;gap:4px;padding:4px 10px 10px;scrollbar-width:thin;scrollbar-color:var(--jqt-border-color) transparent}.slice-panel-body::-webkit-scrollbar{width:2px}.slice-panel-body::-webkit-scrollbar-thumb{background:var(--jqt-primary-color);border-radius:4px}.slice-panel-title{margin:0;padding-top:2px;font-size:11px;font-weight:700;line-height:1;text-transform:uppercase;letter-spacing:.08em;color:var(--jqt-text-color);-webkit-user-select:none;user-select:none;align-self:center;display:inline-flex;align-items:center;gap:5px}.slice-panel-title .slice-panel-title-icon{font-size:16px;width:16px;height:16px;line-height:1;flex-shrink:0}.slice-section-items{display:flex;flex-direction:column;gap:2px;flex:0 0 auto;scrollbar-width:thin;scrollbar-color:var(--jqt-border-color) transparent}.slice-section-items::-webkit-scrollbar{width:2px}.slice-section-items .slice-empty-state{padding:8px 10px;font-size:12px;color:var(--jqt-text-muted, #9ca3af);font-style:italic;text-align:center}.slice-section-items::-webkit-scrollbar-thumb{background:var(--jqt-border-color);border-radius:4px}.slice-toggle{border:0;background:var(--jqt-surface-color);color:var(--jqt-text-color);border-radius:6px;width:22px;height:22px;padding:0;font-size:14px;text-align:center;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;line-height:1}.slice-toggle-mat-icon{font-size:16px;width:16px;height:16px;line-height:1}.slice-panel.collapsed{border-color:transparent;background:transparent;overflow:visible}.slice-panel.collapsed .slice-panel-header{height:34px;padding:0;justify-content:center;align-items:center}.slice-panel.collapsed .slice-toggle{width:34px;height:34px;border:1px solid var(--jqt-border-color);background:var(--jqt-surface-color);border-radius:8px}.slice-panel.collapsed .slice-toggle:hover{border-color:var(--jqt-text-muted)}.slice-panel.collapsed .slice-toggle .slice-toggle-mat-icon{font-size:18px;width:18px;height:18px}.slice-title-row{display:flex;align-items:center;justify-content:space-between;gap:6px;margin:4px 0 6px;cursor:pointer;-webkit-user-select:none;user-select:none}.slice-title-row:hover .slice-title{color:var(--jqt-text-color)}.slice-title-row:hover .slice-title-chevron{color:var(--jqt-text-secondary)}.slice-title-row:first-of-type .slice-title{margin-top:0}.slice-title-chevron{flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;font-size:16px;line-height:1;color:var(--jqt-text-muted);transition:transform .15s ease;transform:rotate(0);position:relative;top:-1px}.slice-title-chevron.expanded{transform:rotate(90deg)}.slice-title{flex:1 1 auto;margin:0;font-size:14px;font-weight:600;color:var(--jqt-title-color)}.slice-title-icon{flex-shrink:0;font-size:14px!important;width:14px!important;height:14px!important;color:var(--jqt-title-color)}.slice-remove-btn{background:none;border:none;cursor:pointer;color:var(--jqt-border-color);font-size:12px;padding:0 2px;line-height:1;flex-shrink:0;opacity:.5;transition:opacity .15s,color .15s}.slice-remove-btn:hover{color:var(--jqt-text-secondary);opacity:1}.slice-title-row:hover .slice-remove-btn{opacity:.8}.slice-item{display:flex;justify-content:space-between;align-items:center;text-align:left;width:100%;padding:5px 10px 5px 16px;background:transparent;border:0;cursor:pointer;border-radius:8px;color:var(--jqt-text-color);box-sizing:border-box;min-width:0;gap:8px}.slice-item.active{background:var(--jqt-row-hover-bg);font-weight:600}.slice-item.slice-multi{padding-left:6px}.slice-item span:first-child{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.slice-item span:last-child{flex:0 0 auto;min-width:1.2em;text-align:right}.slice-check-box{flex:0 0 16px;width:16px;height:16px;border:1.5px solid var(--jqt-text-muted);border-radius:4px;background:var(--jqt-surface-color);display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;transition:background .15s,border-color .15s}.slice-check-box.checked{background:var(--jqt-text-secondary);border-color:var(--jqt-text-secondary)}.slice-check-box.checked:after{content:\"\";display:block;width:9px;height:5px;border-left:2px solid #fff;border-bottom:2px solid #fff;transform:rotate(-45deg) translateY(-1px)}.slice-divider{border:none;border-top:1px solid var(--jqt-border-color);margin:6px 0}.lazy-skeleton{display:block;height:12px;width:70%;border-radius:4px;background:linear-gradient(90deg,var(--jqt-border-color) 25%,var(--jqt-surface-alt-color) 50%,var(--jqt-border-color) 75%);background-size:200% 100%;animation:lazy-shimmer 1.4s ease-in-out infinite}.slice-lazy-loading{display:flex;flex-direction:column;gap:8px;padding:8px 10px}.slice-lazy-loading .lazy-skeleton{width:80%}.slice-lazy-loading .lazy-skeleton:nth-child(2){width:60%}.slice-lazy-loading .lazy-skeleton:nth-child(3){width:45%}@keyframes lazy-shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
443
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: SlicePanelComponent, isStandalone: true, selector: "slice-panel", inputs: { sliceConfigs: "sliceConfigs", columns: "columns", data: "data", lazyStatus: "lazyStatus", showToggle: "showToggle", showCounts: "showCounts", collapsedByDefault: "collapsedByDefault", alwaysShow: "alwaysShow" }, outputs: { filterChange: "filterChange", activeKeysChange: "activeKeysChange", dynamicSliceKeysChange: "dynamicSliceKeysChange", collapsedChange: "collapsedChange" }, host: { properties: { "class.collapsed": "this.hostCollapsed" } }, viewQueries: [{ propertyName: "slicePanelBodyRef", first: true, predicate: ["slicePanelBody"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"slice-panel-wrapper\" [class.collapsed]=\"isCollapsed\">\n <aside class=\"slice-panel\" [class.collapsed]=\"isCollapsed\">\n <div class=\"slice-panel-header\">\n <span *ngIf=\"!isCollapsed\" class=\"slice-panel-title\">\n {{ i18n.filterPanelTitle(slices.length) }}\n </span>\n <button\n *ngIf=\"showToggle\"\n type=\"button\"\n class=\"slice-toggle\"\n [attr.aria-label]=\"isCollapsed ? i18n.expandFilterTitle : i18n.collapseFilterTitle\"\n (click)=\"togglePanel()\"\n >\n <mat-icon class=\"slice-toggle-mat-icon\">{{ isCollapsed ? 'filter_list' : 'filter_list_off' }}</mat-icon>\n </button>\n </div>\n\n <div class=\"slice-panel-body\" *ngIf=\"!isCollapsed\" #slicePanelBody>\n <ng-container *ngFor=\"let slice of slices; let si = index; trackBy: trackBySliceIndex\">\n <div class=\"slice-title-row\" [attr.data-slice-index]=\"si\">\n <button\n type=\"button\"\n class=\"slice-title-toggle\"\n [attr.aria-controls]=\"'slice-section-' + si\"\n [attr.aria-expanded]=\"!isSliceCollapsed(si)\"\n (click)=\"toggleSliceCollapse(si)\"\n >\n <span class=\"slice-title-chevron\" [class.expanded]=\"!isSliceCollapsed(si)\">\u203A</span>\n <mat-icon *ngIf=\"getSliceIcon(slice)\" class=\"slice-title-icon\">{{ getSliceIcon(slice) }}</mat-icon>\n <span class=\"slice-title\">{{ slice.title || i18n.filterBlockDefaultTitle }}</span>\n </button>\n <button\n *ngIf=\"isSliceDynamic(si)\"\n type=\"button\"\n class=\"slice-remove-btn\"\n [attr.aria-label]=\"'Supprimer le filtre ' + (slice.title || i18n.filterBlockDefaultTitle)\"\n (click)=\"removeDynamicSlice(si)\"\n >\u00D7</button>\n </div>\n\n <div [id]=\"'slice-section-' + si\" class=\"slice-section-items\" *ngIf=\"!isSliceCollapsed(si)\">\n <ng-container *ngIf=\"isSliceLoading(si); else sliceContent\">\n <div class=\"slice-lazy-loading\">\n <span class=\"lazy-skeleton\"></span>\n <span class=\"lazy-skeleton\"></span>\n <span class=\"lazy-skeleton\"></span>\n </div>\n </ng-container>\n <ng-template #sliceContent>\n <ng-container *ngFor=\"let category of slice.categories; trackBy: trackByCategoryKey\">\n <button\n *ngIf=\"sliceCategoryCount(si, category.key) > 0\"\n class=\"slice-item\"\n type=\"button\"\n [class.active]=\"isSliceCategoryActive(si, category.key)\"\n [attr.data-category-key]=\"category.key\"\n [title]=\"category.label\"\n (click)=\"onSliceCategorySelected(si, category.key)\"\n >\n <span>{{ category.label }}</span>\n <span *ngIf=\"showCounts\">{{ sliceCategoryCount(si, category.key) }}</span>\n </button>\n </ng-container>\n <div *ngIf=\"isSliceEmpty(si)\" class=\"slice-empty-state\">{{ i18n.filterEmptyState }}</div>\n </ng-template>\n </div>\n\n <hr *ngIf=\"si < slices.length - 1\" class=\"slice-divider\" />\n </ng-container>\n </div>\n </aside>\n</div>\n", styles: ["@keyframes slideInLeft{0%{opacity:0;transform:translate(-24px)}to{opacity:1;transform:translate(0)}}:host{display:block;height:100%;min-height:0;box-sizing:border-box;animation:slideInLeft .3s cubic-bezier(.34,1.56,.64,1) forwards}.slice-panel-wrapper{height:100%;max-height:100%;overflow-y:auto;box-sizing:border-box}.slice-panel{margin-top:0;border:1px solid var(--jqt-border-color);border-radius:10px;background:var(--jqt-surface-color);display:flex;flex-direction:column;min-width:0;height:100%;overflow:hidden;box-sizing:border-box}.slice-panel-header{flex-shrink:0;display:flex;justify-content:flex-end;align-items:center;height:var(--jqt-slice-header-height, 34px);padding:0 8px;margin-bottom:var(--jqt-slice-header-margin-bottom, 8px)}.slice-panel-header:has(.slice-panel-title){justify-content:space-between;padding-left:12px}.slice-panel-body{flex:1 1 0;min-height:0;overflow-y:auto;display:flex;flex-direction:column;gap:4px;padding:var(--jqt-slice-body-padding, 4px 10px 10px);scrollbar-width:thin;scrollbar-color:var(--jqt-border-color) transparent}.slice-panel-body::-webkit-scrollbar{width:2px}.slice-panel-body::-webkit-scrollbar-thumb{background:var(--jqt-primary-color);border-radius:4px}.slice-panel-title{margin:0;padding-top:2px;font-size:11px;font-weight:700;line-height:1;text-transform:uppercase;letter-spacing:.08em;color:var(--jqt-text-color);-webkit-user-select:none;user-select:none;align-self:center;display:inline-flex;align-items:center;gap:5px}.slice-panel-title .slice-panel-title-icon{font-size:16px;width:16px;height:16px;line-height:1;flex-shrink:0}.slice-section-items{display:flex;flex-direction:column;gap:2px;flex:0 0 auto;scrollbar-width:thin;scrollbar-color:var(--jqt-border-color) transparent}.slice-section-items::-webkit-scrollbar{width:2px}.slice-section-items .slice-empty-state{padding:8px 10px;font-size:12px;color:var(--jqt-text-muted, #9ca3af);font-style:italic;text-align:center}.slice-section-items::-webkit-scrollbar-thumb{background:var(--jqt-border-color);border-radius:4px}.slice-toggle{border:0;background:var(--jqt-surface-color);color:var(--jqt-text-color);border-radius:6px;width:22px;height:22px;padding:0;font-size:14px;text-align:center;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;line-height:1}.slice-toggle-mat-icon{font-size:16px;width:16px;height:16px;line-height:1}.slice-panel.collapsed{border-color:transparent;background:transparent;overflow:visible}.slice-panel.collapsed .slice-panel-header{height:34px;padding:0;justify-content:center;align-items:center}.slice-panel.collapsed .slice-toggle{width:34px;height:34px;border:1px solid var(--jqt-border-color);background:var(--jqt-surface-color);border-radius:8px}.slice-panel.collapsed .slice-toggle:hover{border-color:var(--jqt-text-muted)}.slice-panel.collapsed .slice-toggle .slice-toggle-mat-icon{font-size:18px;width:18px;height:18px}.slice-title-row{display:flex;align-items:center;justify-content:space-between;gap:6px;margin:4px 0 6px;-webkit-user-select:none;user-select:none}.slice-title-row:first-of-type .slice-title{margin-top:0}.slice-title-toggle{flex:1 1 auto;min-width:0;display:flex;align-items:center;gap:6px;padding:0;border:0;background:transparent;color:inherit;cursor:pointer;text-align:left}.slice-title-toggle:hover .slice-title{color:var(--jqt-text-color)}.slice-title-toggle:hover .slice-title-chevron{color:var(--jqt-text-secondary)}.slice-title-toggle:focus-visible{outline:2px solid var(--jqt-primary-color);outline-offset:2px;border-radius:4px}.slice-title-chevron{flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;font-size:16px;line-height:1;color:var(--jqt-text-muted);transition:transform .15s ease;transform:rotate(0);position:relative;top:-1px}.slice-title-chevron.expanded{transform:rotate(90deg)}.slice-title{flex:1 1 auto;margin:0;font-size:var(--jqt-slice-section-title-font-size, 14px);font-weight:600;color:var(--jqt-title-color)}.slice-title-icon{flex-shrink:0;font-size:14px!important;width:14px!important;height:14px!important;color:var(--jqt-title-color)}.slice-remove-btn{background:none;border:none;cursor:pointer;color:var(--jqt-border-color);font-size:12px;padding:0 2px;line-height:1;flex-shrink:0;opacity:.5;transition:opacity .15s,color .15s}.slice-remove-btn:hover{color:var(--jqt-text-secondary);opacity:1}.slice-title-row:hover .slice-remove-btn{opacity:.8}.slice-item{display:flex;justify-content:space-between;align-items:center;text-align:left;width:100%;min-height:var(--jqt-slice-item-min-height, 30px);padding:var(--jqt-slice-item-padding, 5px 10px 5px 16px);background:transparent;border:0;cursor:pointer;border-radius:8px;color:var(--jqt-text-color);box-sizing:border-box;min-width:0;gap:8px;font-size:var(--jqt-slice-item-font-size, 13px)}.slice-item.active{background:var(--jqt-row-hover-bg);font-weight:600}.slice-item.slice-multi{padding-left:6px}.slice-item span:first-child{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.slice-item span:last-child{flex:0 0 auto;min-width:1.2em;text-align:right}.slice-check-box{flex:0 0 16px;width:16px;height:16px;border:1.5px solid var(--jqt-text-muted);border-radius:4px;background:var(--jqt-surface-color);display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;transition:background .15s,border-color .15s}.slice-check-box.checked{background:var(--jqt-text-secondary);border-color:var(--jqt-text-secondary)}.slice-check-box.checked:after{content:\"\";display:block;width:9px;height:5px;border-left:2px solid #fff;border-bottom:2px solid #fff;transform:rotate(-45deg) translateY(-1px)}.slice-divider{border:none;border-top:1px solid var(--jqt-border-color);margin:6px 0}.lazy-skeleton{display:block;height:12px;width:70%;border-radius:4px;background:linear-gradient(90deg,var(--jqt-border-color) 25%,var(--jqt-surface-alt-color) 50%,var(--jqt-border-color) 75%);background-size:200% 100%;animation:lazy-shimmer 1.4s ease-in-out infinite}.slice-lazy-loading{display:flex;flex-direction:column;gap:8px;padding:8px 10px}.slice-lazy-loading .lazy-skeleton{width:80%}.slice-lazy-loading .lazy-skeleton:nth-child(2){width:60%}.slice-lazy-loading .lazy-skeleton:nth-child(3){width:45%}@keyframes lazy-shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
426
444
  }
427
445
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SlicePanelComponent, decorators: [{
428
446
  type: Component,
429
- args: [{ standalone: true, selector: 'slice-panel', imports: [CommonModule, MatIconModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"slice-panel-wrapper\" [class.collapsed]=\"isCollapsed\">\n <aside class=\"slice-panel\" [class.collapsed]=\"isCollapsed\">\n <div class=\"slice-panel-header\">\n <span *ngIf=\"!isCollapsed\" class=\"slice-panel-title\">\n {{ i18n.filterPanelTitle(slices.length) }}\n </span>\n <button\n *ngIf=\"showToggle\"\n type=\"button\"\n class=\"slice-toggle\"\n [attr.aria-label]=\"isCollapsed ? i18n.expandFilterTitle : i18n.collapseFilterTitle\"\n (click)=\"togglePanel()\"\n >\n <mat-icon class=\"slice-toggle-mat-icon\">{{ isCollapsed ? 'filter_list' : 'filter_list_off' }}</mat-icon>\n </button>\n </div>\n\n <div class=\"slice-panel-body\" *ngIf=\"!isCollapsed\" #slicePanelBody>\n <ng-container *ngFor=\"let slice of slices; let si = index; trackBy: trackBySliceIndex\">\n <div class=\"slice-title-row\" [attr.data-slice-index]=\"si\" (click)=\"toggleSliceCollapse(si)\">\n <span class=\"slice-title-chevron\" [class.expanded]=\"!isSliceCollapsed(si)\">\u203A</span>\n <mat-icon *ngIf=\"getSliceIcon(slice)\" class=\"slice-title-icon\">{{ getSliceIcon(slice) }}</mat-icon>\n <p class=\"slice-title\">{{ slice.title || i18n.filterBlockDefaultTitle }}</p>\n <button\n *ngIf=\"isSliceDynamic(si)\"\n type=\"button\"\n class=\"slice-remove-btn\"\n (click)=\"$event.stopPropagation(); removeDynamicSlice(si)\"\n >\u00D7</button>\n </div>\n\n <div class=\"slice-section-items\" *ngIf=\"!isSliceCollapsed(si)\">\n <ng-container *ngIf=\"isSliceLoading(si); else sliceContent\">\n <div class=\"slice-lazy-loading\">\n <span class=\"lazy-skeleton\"></span>\n <span class=\"lazy-skeleton\"></span>\n <span class=\"lazy-skeleton\"></span>\n </div>\n </ng-container>\n <ng-template #sliceContent>\n <ng-container *ngFor=\"let category of slice.categories; trackBy: trackByCategoryKey\">\n <button\n *ngIf=\"sliceCategoryCount(si, category.key) > 0\"\n class=\"slice-item\"\n type=\"button\"\n [class.active]=\"isSliceCategoryActive(si, category.key)\"\n [attr.data-category-key]=\"category.key\"\n [title]=\"category.label\"\n (click)=\"onSliceCategorySelected(si, category.key)\"\n >\n <span>{{ category.label }}</span>\n <span *ngIf=\"showCounts\">{{ sliceCategoryCount(si, category.key) }}</span>\n </button>\n </ng-container>\n <div *ngIf=\"isSliceEmpty(si)\" class=\"slice-empty-state\">{{ i18n.filterEmptyState }}</div>\n </ng-template>\n </div>\n\n <hr *ngIf=\"si < slices.length - 1\" class=\"slice-divider\" />\n </ng-container>\n </div>\n </aside>\n</div>\n", styles: ["@keyframes slideInLeft{0%{opacity:0;transform:translate(-24px)}to{opacity:1;transform:translate(0)}}:host{display:block;height:100%;min-height:0;box-sizing:border-box;animation:slideInLeft .3s cubic-bezier(.34,1.56,.64,1) forwards}.slice-panel-wrapper{height:100%;max-height:100%;overflow-y:auto;box-sizing:border-box}.slice-panel{margin-top:0;border:1px solid var(--jqt-border-color);border-radius:10px;background:var(--jqt-surface-color);display:flex;flex-direction:column;min-width:0;height:100%;overflow:hidden;box-sizing:border-box}.slice-panel-header{flex-shrink:0;display:flex;justify-content:flex-end;align-items:center;height:34px;padding:0 8px;margin-bottom:8px}.slice-panel-header:has(.slice-panel-title){justify-content:space-between;padding-left:12px}.slice-panel-body{flex:1 1 0;min-height:0;overflow-y:auto;display:flex;flex-direction:column;gap:4px;padding:4px 10px 10px;scrollbar-width:thin;scrollbar-color:var(--jqt-border-color) transparent}.slice-panel-body::-webkit-scrollbar{width:2px}.slice-panel-body::-webkit-scrollbar-thumb{background:var(--jqt-primary-color);border-radius:4px}.slice-panel-title{margin:0;padding-top:2px;font-size:11px;font-weight:700;line-height:1;text-transform:uppercase;letter-spacing:.08em;color:var(--jqt-text-color);-webkit-user-select:none;user-select:none;align-self:center;display:inline-flex;align-items:center;gap:5px}.slice-panel-title .slice-panel-title-icon{font-size:16px;width:16px;height:16px;line-height:1;flex-shrink:0}.slice-section-items{display:flex;flex-direction:column;gap:2px;flex:0 0 auto;scrollbar-width:thin;scrollbar-color:var(--jqt-border-color) transparent}.slice-section-items::-webkit-scrollbar{width:2px}.slice-section-items .slice-empty-state{padding:8px 10px;font-size:12px;color:var(--jqt-text-muted, #9ca3af);font-style:italic;text-align:center}.slice-section-items::-webkit-scrollbar-thumb{background:var(--jqt-border-color);border-radius:4px}.slice-toggle{border:0;background:var(--jqt-surface-color);color:var(--jqt-text-color);border-radius:6px;width:22px;height:22px;padding:0;font-size:14px;text-align:center;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;line-height:1}.slice-toggle-mat-icon{font-size:16px;width:16px;height:16px;line-height:1}.slice-panel.collapsed{border-color:transparent;background:transparent;overflow:visible}.slice-panel.collapsed .slice-panel-header{height:34px;padding:0;justify-content:center;align-items:center}.slice-panel.collapsed .slice-toggle{width:34px;height:34px;border:1px solid var(--jqt-border-color);background:var(--jqt-surface-color);border-radius:8px}.slice-panel.collapsed .slice-toggle:hover{border-color:var(--jqt-text-muted)}.slice-panel.collapsed .slice-toggle .slice-toggle-mat-icon{font-size:18px;width:18px;height:18px}.slice-title-row{display:flex;align-items:center;justify-content:space-between;gap:6px;margin:4px 0 6px;cursor:pointer;-webkit-user-select:none;user-select:none}.slice-title-row:hover .slice-title{color:var(--jqt-text-color)}.slice-title-row:hover .slice-title-chevron{color:var(--jqt-text-secondary)}.slice-title-row:first-of-type .slice-title{margin-top:0}.slice-title-chevron{flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;font-size:16px;line-height:1;color:var(--jqt-text-muted);transition:transform .15s ease;transform:rotate(0);position:relative;top:-1px}.slice-title-chevron.expanded{transform:rotate(90deg)}.slice-title{flex:1 1 auto;margin:0;font-size:14px;font-weight:600;color:var(--jqt-title-color)}.slice-title-icon{flex-shrink:0;font-size:14px!important;width:14px!important;height:14px!important;color:var(--jqt-title-color)}.slice-remove-btn{background:none;border:none;cursor:pointer;color:var(--jqt-border-color);font-size:12px;padding:0 2px;line-height:1;flex-shrink:0;opacity:.5;transition:opacity .15s,color .15s}.slice-remove-btn:hover{color:var(--jqt-text-secondary);opacity:1}.slice-title-row:hover .slice-remove-btn{opacity:.8}.slice-item{display:flex;justify-content:space-between;align-items:center;text-align:left;width:100%;padding:5px 10px 5px 16px;background:transparent;border:0;cursor:pointer;border-radius:8px;color:var(--jqt-text-color);box-sizing:border-box;min-width:0;gap:8px}.slice-item.active{background:var(--jqt-row-hover-bg);font-weight:600}.slice-item.slice-multi{padding-left:6px}.slice-item span:first-child{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.slice-item span:last-child{flex:0 0 auto;min-width:1.2em;text-align:right}.slice-check-box{flex:0 0 16px;width:16px;height:16px;border:1.5px solid var(--jqt-text-muted);border-radius:4px;background:var(--jqt-surface-color);display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;transition:background .15s,border-color .15s}.slice-check-box.checked{background:var(--jqt-text-secondary);border-color:var(--jqt-text-secondary)}.slice-check-box.checked:after{content:\"\";display:block;width:9px;height:5px;border-left:2px solid #fff;border-bottom:2px solid #fff;transform:rotate(-45deg) translateY(-1px)}.slice-divider{border:none;border-top:1px solid var(--jqt-border-color);margin:6px 0}.lazy-skeleton{display:block;height:12px;width:70%;border-radius:4px;background:linear-gradient(90deg,var(--jqt-border-color) 25%,var(--jqt-surface-alt-color) 50%,var(--jqt-border-color) 75%);background-size:200% 100%;animation:lazy-shimmer 1.4s ease-in-out infinite}.slice-lazy-loading{display:flex;flex-direction:column;gap:8px;padding:8px 10px}.slice-lazy-loading .lazy-skeleton{width:80%}.slice-lazy-loading .lazy-skeleton:nth-child(2){width:60%}.slice-lazy-loading .lazy-skeleton:nth-child(3){width:45%}@keyframes lazy-shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}\n"] }]
447
+ args: [{ standalone: true, selector: 'slice-panel', imports: [CommonModule, MatIconModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"slice-panel-wrapper\" [class.collapsed]=\"isCollapsed\">\n <aside class=\"slice-panel\" [class.collapsed]=\"isCollapsed\">\n <div class=\"slice-panel-header\">\n <span *ngIf=\"!isCollapsed\" class=\"slice-panel-title\">\n {{ i18n.filterPanelTitle(slices.length) }}\n </span>\n <button\n *ngIf=\"showToggle\"\n type=\"button\"\n class=\"slice-toggle\"\n [attr.aria-label]=\"isCollapsed ? i18n.expandFilterTitle : i18n.collapseFilterTitle\"\n (click)=\"togglePanel()\"\n >\n <mat-icon class=\"slice-toggle-mat-icon\">{{ isCollapsed ? 'filter_list' : 'filter_list_off' }}</mat-icon>\n </button>\n </div>\n\n <div class=\"slice-panel-body\" *ngIf=\"!isCollapsed\" #slicePanelBody>\n <ng-container *ngFor=\"let slice of slices; let si = index; trackBy: trackBySliceIndex\">\n <div class=\"slice-title-row\" [attr.data-slice-index]=\"si\">\n <button\n type=\"button\"\n class=\"slice-title-toggle\"\n [attr.aria-controls]=\"'slice-section-' + si\"\n [attr.aria-expanded]=\"!isSliceCollapsed(si)\"\n (click)=\"toggleSliceCollapse(si)\"\n >\n <span class=\"slice-title-chevron\" [class.expanded]=\"!isSliceCollapsed(si)\">\u203A</span>\n <mat-icon *ngIf=\"getSliceIcon(slice)\" class=\"slice-title-icon\">{{ getSliceIcon(slice) }}</mat-icon>\n <span class=\"slice-title\">{{ slice.title || i18n.filterBlockDefaultTitle }}</span>\n </button>\n <button\n *ngIf=\"isSliceDynamic(si)\"\n type=\"button\"\n class=\"slice-remove-btn\"\n [attr.aria-label]=\"'Supprimer le filtre ' + (slice.title || i18n.filterBlockDefaultTitle)\"\n (click)=\"removeDynamicSlice(si)\"\n >\u00D7</button>\n </div>\n\n <div [id]=\"'slice-section-' + si\" class=\"slice-section-items\" *ngIf=\"!isSliceCollapsed(si)\">\n <ng-container *ngIf=\"isSliceLoading(si); else sliceContent\">\n <div class=\"slice-lazy-loading\">\n <span class=\"lazy-skeleton\"></span>\n <span class=\"lazy-skeleton\"></span>\n <span class=\"lazy-skeleton\"></span>\n </div>\n </ng-container>\n <ng-template #sliceContent>\n <ng-container *ngFor=\"let category of slice.categories; trackBy: trackByCategoryKey\">\n <button\n *ngIf=\"sliceCategoryCount(si, category.key) > 0\"\n class=\"slice-item\"\n type=\"button\"\n [class.active]=\"isSliceCategoryActive(si, category.key)\"\n [attr.data-category-key]=\"category.key\"\n [title]=\"category.label\"\n (click)=\"onSliceCategorySelected(si, category.key)\"\n >\n <span>{{ category.label }}</span>\n <span *ngIf=\"showCounts\">{{ sliceCategoryCount(si, category.key) }}</span>\n </button>\n </ng-container>\n <div *ngIf=\"isSliceEmpty(si)\" class=\"slice-empty-state\">{{ i18n.filterEmptyState }}</div>\n </ng-template>\n </div>\n\n <hr *ngIf=\"si < slices.length - 1\" class=\"slice-divider\" />\n </ng-container>\n </div>\n </aside>\n</div>\n", styles: ["@keyframes slideInLeft{0%{opacity:0;transform:translate(-24px)}to{opacity:1;transform:translate(0)}}:host{display:block;height:100%;min-height:0;box-sizing:border-box;animation:slideInLeft .3s cubic-bezier(.34,1.56,.64,1) forwards}.slice-panel-wrapper{height:100%;max-height:100%;overflow-y:auto;box-sizing:border-box}.slice-panel{margin-top:0;border:1px solid var(--jqt-border-color);border-radius:10px;background:var(--jqt-surface-color);display:flex;flex-direction:column;min-width:0;height:100%;overflow:hidden;box-sizing:border-box}.slice-panel-header{flex-shrink:0;display:flex;justify-content:flex-end;align-items:center;height:var(--jqt-slice-header-height, 34px);padding:0 8px;margin-bottom:var(--jqt-slice-header-margin-bottom, 8px)}.slice-panel-header:has(.slice-panel-title){justify-content:space-between;padding-left:12px}.slice-panel-body{flex:1 1 0;min-height:0;overflow-y:auto;display:flex;flex-direction:column;gap:4px;padding:var(--jqt-slice-body-padding, 4px 10px 10px);scrollbar-width:thin;scrollbar-color:var(--jqt-border-color) transparent}.slice-panel-body::-webkit-scrollbar{width:2px}.slice-panel-body::-webkit-scrollbar-thumb{background:var(--jqt-primary-color);border-radius:4px}.slice-panel-title{margin:0;padding-top:2px;font-size:11px;font-weight:700;line-height:1;text-transform:uppercase;letter-spacing:.08em;color:var(--jqt-text-color);-webkit-user-select:none;user-select:none;align-self:center;display:inline-flex;align-items:center;gap:5px}.slice-panel-title .slice-panel-title-icon{font-size:16px;width:16px;height:16px;line-height:1;flex-shrink:0}.slice-section-items{display:flex;flex-direction:column;gap:2px;flex:0 0 auto;scrollbar-width:thin;scrollbar-color:var(--jqt-border-color) transparent}.slice-section-items::-webkit-scrollbar{width:2px}.slice-section-items .slice-empty-state{padding:8px 10px;font-size:12px;color:var(--jqt-text-muted, #9ca3af);font-style:italic;text-align:center}.slice-section-items::-webkit-scrollbar-thumb{background:var(--jqt-border-color);border-radius:4px}.slice-toggle{border:0;background:var(--jqt-surface-color);color:var(--jqt-text-color);border-radius:6px;width:22px;height:22px;padding:0;font-size:14px;text-align:center;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;line-height:1}.slice-toggle-mat-icon{font-size:16px;width:16px;height:16px;line-height:1}.slice-panel.collapsed{border-color:transparent;background:transparent;overflow:visible}.slice-panel.collapsed .slice-panel-header{height:34px;padding:0;justify-content:center;align-items:center}.slice-panel.collapsed .slice-toggle{width:34px;height:34px;border:1px solid var(--jqt-border-color);background:var(--jqt-surface-color);border-radius:8px}.slice-panel.collapsed .slice-toggle:hover{border-color:var(--jqt-text-muted)}.slice-panel.collapsed .slice-toggle .slice-toggle-mat-icon{font-size:18px;width:18px;height:18px}.slice-title-row{display:flex;align-items:center;justify-content:space-between;gap:6px;margin:4px 0 6px;-webkit-user-select:none;user-select:none}.slice-title-row:first-of-type .slice-title{margin-top:0}.slice-title-toggle{flex:1 1 auto;min-width:0;display:flex;align-items:center;gap:6px;padding:0;border:0;background:transparent;color:inherit;cursor:pointer;text-align:left}.slice-title-toggle:hover .slice-title{color:var(--jqt-text-color)}.slice-title-toggle:hover .slice-title-chevron{color:var(--jqt-text-secondary)}.slice-title-toggle:focus-visible{outline:2px solid var(--jqt-primary-color);outline-offset:2px;border-radius:4px}.slice-title-chevron{flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;font-size:16px;line-height:1;color:var(--jqt-text-muted);transition:transform .15s ease;transform:rotate(0);position:relative;top:-1px}.slice-title-chevron.expanded{transform:rotate(90deg)}.slice-title{flex:1 1 auto;margin:0;font-size:var(--jqt-slice-section-title-font-size, 14px);font-weight:600;color:var(--jqt-title-color)}.slice-title-icon{flex-shrink:0;font-size:14px!important;width:14px!important;height:14px!important;color:var(--jqt-title-color)}.slice-remove-btn{background:none;border:none;cursor:pointer;color:var(--jqt-border-color);font-size:12px;padding:0 2px;line-height:1;flex-shrink:0;opacity:.5;transition:opacity .15s,color .15s}.slice-remove-btn:hover{color:var(--jqt-text-secondary);opacity:1}.slice-title-row:hover .slice-remove-btn{opacity:.8}.slice-item{display:flex;justify-content:space-between;align-items:center;text-align:left;width:100%;min-height:var(--jqt-slice-item-min-height, 30px);padding:var(--jqt-slice-item-padding, 5px 10px 5px 16px);background:transparent;border:0;cursor:pointer;border-radius:8px;color:var(--jqt-text-color);box-sizing:border-box;min-width:0;gap:8px;font-size:var(--jqt-slice-item-font-size, 13px)}.slice-item.active{background:var(--jqt-row-hover-bg);font-weight:600}.slice-item.slice-multi{padding-left:6px}.slice-item span:first-child{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.slice-item span:last-child{flex:0 0 auto;min-width:1.2em;text-align:right}.slice-check-box{flex:0 0 16px;width:16px;height:16px;border:1.5px solid var(--jqt-text-muted);border-radius:4px;background:var(--jqt-surface-color);display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;transition:background .15s,border-color .15s}.slice-check-box.checked{background:var(--jqt-text-secondary);border-color:var(--jqt-text-secondary)}.slice-check-box.checked:after{content:\"\";display:block;width:9px;height:5px;border-left:2px solid #fff;border-bottom:2px solid #fff;transform:rotate(-45deg) translateY(-1px)}.slice-divider{border:none;border-top:1px solid var(--jqt-border-color);margin:6px 0}.lazy-skeleton{display:block;height:12px;width:70%;border-radius:4px;background:linear-gradient(90deg,var(--jqt-border-color) 25%,var(--jqt-surface-alt-color) 50%,var(--jqt-border-color) 75%);background-size:200% 100%;animation:lazy-shimmer 1.4s ease-in-out infinite}.slice-lazy-loading{display:flex;flex-direction:column;gap:8px;padding:8px 10px}.slice-lazy-loading .lazy-skeleton{width:80%}.slice-lazy-loading .lazy-skeleton:nth-child(2){width:60%}.slice-lazy-loading .lazy-skeleton:nth-child(3){width:45%}@keyframes lazy-shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}\n"] }]
430
448
  }], propDecorators: { sliceConfigs: [{
431
449
  type: Input
432
450
  }], columns: [{
433
451
  type: Input
434
452
  }], data: [{
435
453
  type: Input
436
- }], lazyData: [{
437
- type: Input
438
454
  }], lazyStatus: [{
439
455
  type: Input
440
456
  }], showToggle: [{
@@ -460,4 +476,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
460
476
  type: HostBinding,
461
477
  args: ['class.collapsed']
462
478
  }] } });
463
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpY2UtcGFuZWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb25ldGVtZS9qcXVlcnktb3JnYW5pemVyL3NyYy9saWIvc2xpY2UtcGFuZWwvc2xpY2UtcGFuZWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb25ldGVtZS9qcXVlcnktb3JnYW5pemVyL3NyYy9saWIvc2xpY2UtcGFuZWwvc2xpY2UtcGFuZWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFpQixTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7O0FBR2pNLE1BQU0sa0JBQWtCLEdBQUcsV0FBVyxDQUFDO0FBQ3ZDLE1BQU0sb0JBQW9CLEdBQUcsTUFBTSxDQUFDO0FBRXBDLE1BQU0sSUFBSSxHQUFHO0lBQ1gsaUJBQWlCLEVBQUUsbUJBQW1CO0lBQ3RDLG1CQUFtQixFQUFFLG1CQUFtQjtJQUN4QyxnQkFBZ0IsRUFBRSxDQUFDLEtBQWEsRUFBRSxFQUFFLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxRQUFRO0lBQ3JFLHVCQUF1QixFQUFFLFNBQVM7SUFDbEMsZ0JBQWdCLEVBQUUsZUFBZTtDQUNsQyxDQUFDO0FBWUYsTUFBTSxPQUFPLG1CQUFtQjtJQVJoQztRQVVXLGlCQUFZLEdBQXFCLEVBQUUsQ0FBQztRQUNwQyxZQUFPLEdBQXdCLEVBQUUsQ0FBQztRQUNs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QUFhLENBQUMsc0JBQXNCLFVBQVUsSUFBSSxDQUF1QixDQUFDO1lBQzFGLEVBQUUsRUFBRSxjQUFjLENBQUMsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQy9ELENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNULENBQUM7K0dBOWFVLG1CQUFtQjttR0FBbkIsbUJBQW1CLCtxQkMxQmhDLGk3RkErREEsbXNMRDFDWSxZQUFZLCtQQUFFLGFBQWE7OzRGQUsxQixtQkFBbUI7a0JBUi9CLFNBQVM7aUNBQ0ksSUFBSSxZQUNOLGFBQWEsV0FDZCxDQUFDLFlBQVksRUFBRSxhQUFhLENBQUMsbUJBR3JCLHVCQUF1QixDQUFDLE1BQU07OEJBSXRDLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUVJLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUNHLHNCQUFzQjtzQkFBL0IsTUFBTTtnQkFDRyxlQUFlO3NCQUF4QixNQUFNO2dCQUVzQixpQkFBaUI7c0JBQTdDLFNBQVM7dUJBQUMsZ0JBQWdCO2dCQVFTLGFBQWE7c0JBQWhELFdBQVc7dUJBQUMsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIEhvc3RCaW5kaW5nLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcywgVmlld0NoaWxkLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFNsaWNlQ29sdW1uRGVmLCBTbGljZUNvbmZpZyB9IGZyb20gJy4vc2xpY2UtcGFuZWwubW9kZWwnO1xuXG5jb25zdCBFTVBUWV9DQVRFR09SWV9LRVkgPSAnX19lbXB0eV9fJztcbmNvbnN0IEVNUFRZX0NBVEVHT1JZX0xBQkVMID0gJ1ZpZGUnO1xuXG5jb25zdCBJMThOID0ge1xuICBleHBhbmRGaWx0ZXJUaXRsZTogJ0TDqXBsaWVyIGxlIGZpbHRyZScsXG4gIGNvbGxhcHNlRmlsdGVyVGl0bGU6ICdSZXBsaWVyIGxlIGZpbHRyZScsXG4gIGZpbHRlclBhbmVsVGl0bGU6IChjb3VudDogbnVtYmVyKSA9PiBjb3VudCA+IDEgPyAnRmlsdHJlcycgOiAnRmlsdHJlJyxcbiAgZmlsdGVyQmxvY2tEZWZhdWx0VGl0bGU6ICdGaWx0cmVyJyxcbiAgZmlsdGVyRW1wdHlTdGF0ZTogJ0F1Y3VuZSBkb25uw6llJyxcbn07XG5cbmV4cG9ydCB0eXBlIFNsaWNlUGFuZWxGaWx0ZXJzID0gUmVjb3JkPHN0cmluZywgc3RyaW5nW10+O1xuXG5AQ29tcG9uZW50KHtcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgc2VsZWN0b3I6ICdzbGljZS1wYW5lbCcsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIE1hdEljb25Nb2R1bGVdLFxuICB0ZW1wbGF0ZVVybDogJy4vc2xpY2UtcGFuZWwuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9zbGljZS1wYW5lbC5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgU2xpY2VQYW5lbENvbXBvbmVudDxUID0gYW55PiBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25Jbml0IHtcblxuICBASW5wdXQoKSBzbGljZUNvbmZpZ3M6IFNsaWNlQ29uZmlnPFQ+W10gPSBbXTtcbiAgQElucHV0KCkgY29sdW1uczogU2xpY2VDb2x1bW5EZWY8VD5bXSA9IFtdO1xuICBASW5wdXQoKSBkYXRhOiBUW10gPSBbXTtcbiAgQElucHV0KCkgbGF6eURhdGE6IE1hcDxzdHJpbmcsIE1hcDxhbnksIGFueT4+ID0gbmV3IE1hcCgpO1xuICBASW5wdXQoKSBsYXp5U3RhdHVzOiBNYXA8c3RyaW5nLCAnaWRsZScgfCAnbG9hZGluZycgfCAnbG9hZGVkJyB8ICdlcnJvcic+ID0gbmV3IE1hcCgpO1xuICBASW5wdXQoKSBzaG93VG9nZ2xlID0gdHJ1ZTtcbiAgQElucHV0KCkgc2hvd0NvdW50cyA9IHRydWU7XG4gIEBJbnB1dCgpIGNvbGxhcHNlZEJ5RGVmYXVsdCA9IGZhbHNlO1xuICBASW5wdXQoKSBhbHdheXNTaG93ID0gZmFsc2U7XG5cbiAgQE91dHB1dCgpIGZpbHRlckNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8KHJvdzogVCkgPT4gYm9vbGVhbj4oKTtcbiAgQE91dHB1dCgpIGFjdGl2ZUtleXNDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZ1tdW10+KCk7XG4gIEBPdXRwdXQoKSBkeW5hbWljU2xpY2VLZXlzQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmdbXT4oKTtcbiAgQE91dHB1dCgpIGNvbGxhcHNlZENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICBAVmlld0NoaWxkKCdzbGljZVBhbmVsQm9keScpIHNsaWNlUGFuZWxCb2R5UmVmPzogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG5cbiAgcHJpdmF0ZSBfY2RyID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcblxuICByZWFkb25seSBpMThuID0gSTE4TjtcblxuICBpc0NvbGxhcHNlZCA9IGZhbHNlO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MuY29sbGFwc2VkJykgZ2V0IGhvc3RDb2xsYXBzZWQoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLmlzQ29sbGFwc2VkOyB9XG4gIGFjdGl2ZUtleXNCeVNsaWNlOiBNYXA8bnVtYmVyLCBTZXQ8c3RyaW5nPj4gPSBuZXcgTWFwKCk7XG4gIHByaXZhdGUgX2V4cGFuZGVkU2xpY2VzID0gbmV3IFNldDxudW1iZXI+KCk7XG4gIF9keW5hbWljU2xpY2VzOiBBcnJheTx7IGtleTogc3RyaW5nOyBzbGljZTogU2xpY2VDb25maWc8VD4gfT4gPSBbXTtcblxuICBfY2FjaGVkU2xpY2VzOiBTbGljZUNvbmZpZzxUPltdID0gW107XG4gIHByaXZhdGUgX2NvdW50Q2FjaGUgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuXG4gIHJlYWRvbmx5IHRyYWNrQnlTbGljZUluZGV4ID0gKGluZGV4OiBudW1iZXIsIF86IGFueSk6IG51bWJlciA9PiBpbmRleDtcbiAgcmVhZG9ubHkgdHJhY2tCeUNhdGVnb3J5S2V5ID0gKF86IG51bWJlciwgY2F0OiBhbnkpOiBzdHJpbmcgPT4gY2F0LmtleTtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmlzQ29sbGFwc2VkID0gdGhpcy5jb2xsYXBzZWRCeURlZmF1bHQ7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXNbJ3NsaWNlQ29uZmlncyddIHx8IGNoYW5nZXNbJ2RhdGEnXSB8fCBjaGFuZ2VzWydjb2x1bW5zJ10gfHwgY2hhbmdlc1snbGF6eURhdGEnXSB8fCBjaGFuZ2VzWydsYXp5U3RhdHVzJ10pIHtcbiAgICAgIHRoaXMuX3JlZnJlc2hEeW5hbWljU2xpY2VzKCk7XG4gICAgICB0aGlzLl9yZWJ1aWxkQ2FjaGUoKTtcbiAgICAgIGNvbnN0IHNob3VsZFJlZW1pdEZpbHRlciA9ICEhKGNoYW5nZXNbJ2RhdGEnXSB8fCBjaGFuZ2VzWydjb2x1bW5zJ10gfHwgY2hhbmdlc1snbGF6eURhdGEnXSB8fCBjaGFuZ2VzWydsYXp5U3RhdHVzJ10pO1xuICAgICAgY29uc3QgaGFzQWN0aXZlRmlsdGVycyA9IFsuLi50aGlzLmFjdGl2ZUtleXNCeVNsaWNlLnZhbHVlcygpXS5zb21lKHMgPT4gcy5zaXplID4gMCk7XG4gICAgICBpZiAoaGFzQWN0aXZlRmlsdGVycyAmJiBzaG91bGRSZWVtaXRGaWx0ZXIpIHtcbiAgICAgICAgdGhpcy5fZW1pdEZpbHRlcigpO1xuICAgICAgfVxuICAgICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBzaG93UGFuZWwoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgaGFzQ2ZnID0gKHRoaXMuc2xpY2VDb25maWdzIHx8IFtdKS5sZW5ndGggPiAwIHx8IHRoaXMuX2R5bmFtaWNTbGljZXMubGVuZ3RoID4gMDtcbiAgICBpZiAodGhpcy5hbHdheXNTaG93KSByZXR1cm4gaGFzQ2ZnO1xuICAgIHJldHVybiBoYXNDZmcgJiYgKHRoaXMuZGF0YT8ubGVuZ3RoID8/IDApID4gMDtcbiAgfVxuXG4gIGdldCBzbGljZXMoKTogU2xpY2VDb25maWc8VD5bXSB7XG4gICAgcmV0dXJuIHRoaXMuX2NhY2hlZFNsaWNlcztcbiAgfVxuXG4gIGdldCBzdGF0aWNTbGljZUNvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuICh0aGlzLnNsaWNlQ29uZmlncyB8fCBbXSkubGVuZ3RoO1xuICB9XG5cbiAgZ2V0IHN0YXRpY1NsaWNlc0Zvck1lbnUoKTogQXJyYXk8eyBrZXk6IHN0cmluZzsgdGl0bGU6IHN0cmluZyB9PiB7XG4gICAgcmV0dXJuICh0aGlzLnNsaWNlQ29uZmlncyB8fCBbXSlcbiAgICAgIC5maWx0ZXIoKHMpID0+ICEhcy5jb2x1bW5LZXkpXG4gICAgICAubWFwKChzKSA9PiAoeyBrZXk6IHMuY29sdW1uS2V5ISwgdGl0bGU6IHMudGl0bGUgfHwgcy5jb2x1bW5LZXkhIH0pKTtcbiAgfVxuXG4gIGdldCBhY3RpdmVEeW5hbWljU2xpY2VDb2x1bW5zKCk6IFNsaWNlQ29sdW1uRGVmPFQ+W10ge1xuICAgIHJldHVybiB0aGlzLl9keW5hbWljU2xpY2VzXG4gICAgICAubWFwKChkKSA9PiAodGhpcy5jb2x1bW5zIHx8IFtdKS5maW5kKChjKSA9PiBjLmtleSA9PT0gZC5rZXkpKVxuICAgICAgLmZpbHRlcigoYyk6IGMgaXMgU2xpY2VDb2x1bW5EZWY8VD4gPT4gISFjKTtcbiAgfVxuXG4gIGdldCBhdmFpbGFibGVDb2x1bW5zRm9yRHluYW1pY1NsaWNlKCk6IFNsaWNlQ29sdW1uRGVmPFQ+W10ge1xuICAgIGNvbnN0IGR5bmFtaWNLZXlzID0gbmV3IFNldCh0aGlzLl9keW5hbWljU2xpY2VzLm1hcCgoZCkgPT4gZC5rZXkpKTtcbiAgICBjb25zdCBzdGF0aWNLZXlzID0gbmV3IFNldChcbiAgICAgICh0aGlzLnNsaWNlQ29uZmlncyB8fCBbXSkubWFwKChzKSA9PiBzLmNvbHVtbktleSkuZmlsdGVyKChrKTogayBpcyBzdHJpbmcgPT4gISFrKVxuICAgICk7XG4gICAgY29uc3QgZXhpc3RpbmdLZXlzID0gbmV3IFNldChbLi4uZHluYW1pY0tleXMsIC4uLnN0YXRpY0tleXNdKTtcbiAgICBjb25zdCBzZWVuID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgcmV0dXJuICh0aGlzLmNvbHVtbnMgfHwgW10pLmZpbHRlcigoYykgPT4ge1xuICAgICAgaWYgKGV4aXN0aW5nS2V5cy5oYXMoYy5rZXkpIHx8IHNlZW4uaGFzKGMua2V5KSkgcmV0dXJuIGZhbHNlO1xuICAgICAgc2Vlbi5hZGQoYy5rZXkpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG4gIH1cblxuICBpc1NsaWNlQ29sbGFwc2VkKHNsaWNlSW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLl9jYWNoZWRTbGljZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZXhwYW5kZWRTbGljZXMuaGFzKC0xIC0gc2xpY2VJbmRleCk7XG4gICAgfVxuICAgIHJldHVybiAhdGhpcy5fZXhwYW5kZWRTbGljZXMuaGFzKHNsaWNlSW5kZXgpO1xuICB9XG5cbiAgdG9nZ2xlU2xpY2VDb2xsYXBzZShzbGljZUluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zbGljZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICBjb25zdCBjbG9zZWRLZXkgPSAtMSAtIHNsaWNlSW5kZXg7XG4gICAgICBpZiAodGhpcy5fZXhwYW5kZWRTbGljZXMuaGFzKGNsb3NlZEtleSkpIHtcbiAgICAgICAgdGhpcy5fZXhwYW5kZWRTbGljZXMuZGVsZXRlKGNsb3NlZEtleSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9leHBhbmRlZFNsaWNlcy5hZGQoY2xvc2VkS2V5KTtcbiAgICAgICAgdGhpcy5fc2Nyb2xsU2xpY2VUaXRsZUludG9WaWV3KHNsaWNlSW5kZXgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5fZXhwYW5kZWRTbGljZXMuaGFzKHNsaWNlSW5kZXgpKSB7XG4gICAgICAgIHRoaXMuX2V4cGFuZGVkU2xpY2VzLmRlbGV0ZShzbGljZUluZGV4KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2V4cGFuZGVkU2xpY2VzLmNsZWFyKCk7XG4gICAgICAgIHRoaXMuX2V4cGFuZGVkU2xpY2VzLmFkZChzbGljZUluZGV4KTtcbiAgICAgICAgdGhpcy5fc2Nyb2xsU2xpY2VUaXRsZUludG9WaWV3KHNsaWNlSW5kZXgpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICB0b2dnbGVQYW5lbCgpOiB2b2lkIHtcbiAgICB0aGlzLmlzQ29sbGFwc2VkID0gIXRoaXMuaXNDb2xsYXBzZWQ7XG4gICAgdGhpcy5jb2xsYXBzZWRDaGFuZ2UuZW1pdCh0aGlzLmlzQ29sbGFwc2VkKTtcbiAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBpc1NsaWNlRHluYW1pYyhzbGljZUluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gc2xpY2VJbmRleCA+PSB0aGlzLnN0YXRpY1NsaWNlQ291bnQ7XG4gIH1cblxuICBpc1NsaWNlTG9hZGluZyhzbGljZUluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBjb25zdCBzdGF0aWNTbGljZSA9ICh0aGlzLnNsaWNlQ29uZmlncyB8fCBbXSlbc2xpY2VJbmRleF07XG4gICAgaWYgKHN0YXRpY1NsaWNlPy5jb2x1bW5LZXkpIHtcbiAgICAgIGNvbnN0IGNvbERlZiA9ICh0aGlzLmNvbHVtbnMgfHwgW10pLmZpbmQoYyA9PiBjLmtleSA9PT0gc3RhdGljU2xpY2UuY29sdW1uS2V5KTtcbiAgICAgIGlmIChjb2xEZWY/LmxhenkpIHtcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gdGhpcy5sYXp5U3RhdHVzLmdldChzdGF0aWNTbGljZS5jb2x1bW5LZXkhKSA/PyAnaWRsZSc7XG4gICAgICAgIHJldHVybiBzdGF0dXMgPT09ICdsb2FkaW5nJyB8fCBzdGF0dXMgPT09ICdpZGxlJztcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3Qga2V5ID0gdGhpcy5fZ2V0RHluYW1pY1NsaWNlQ29sdW1uS2V5KHNsaWNlSW5kZXgpO1xuICAgIGlmICgha2V5KSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgY29sRGVmID0gKHRoaXMuY29sdW1ucyB8fCBbXSkuZmluZChjID0+IGMua2V5ID09PSBrZXkpO1xuICAgIGlmICghY29sRGVmPy5sYXp5KSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3Qgc3RhdHVzID0gdGhpcy5sYXp5U3RhdHVzLmdldChrZXkpID8/ICdpZGxlJztcbiAgICByZXR1cm4gc3RhdHVzID09PSAnbG9hZGluZycgfHwgc3RhdHVzID09PSAnaWRsZSc7XG4gIH1cblxuICBpc1N0YXRpY1NsaWNlVmlzaWJsZShfY29sdW1uS2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGdldFNsaWNlSWNvbihzbGljZTogU2xpY2VDb25maWc8VD4pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGlmIChzbGljZS5pY29uKSByZXR1cm4gc2xpY2UuaWNvbjtcbiAgICBpZiAoc2xpY2UuY29sdW1uS2V5KSB7XG4gICAgICByZXR1cm4gKHRoaXMuY29sdW1ucyB8fCBbXSkuZmluZChjID0+IGMua2V5ID09PSBzbGljZS5jb2x1bW5LZXkpPy5pY29uO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgaXNTbGljZUNhdGVnb3J5QWN0aXZlKHNsaWNlSW5kZXg6IG51bWJlciwgY2F0ZWdvcnlLZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmFjdGl2ZUtleXNCeVNsaWNlLmdldChzbGljZUluZGV4KT8uaGFzKGNhdGVnb3J5S2V5KSA/PyBmYWxzZTtcbiAgfVxuXG4gIGlzU2xpY2VBbGxBY3RpdmUoc2xpY2VJbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmFjdGl2ZUtleXNCeVNsaWNlLmhhcyhzbGljZUluZGV4KSB8fCB0aGlzLmFjdGl2ZUtleXNCeVNsaWNlLmdldChzbGljZUluZGV4KSEuc2l6ZSA9PT0gMDtcbiAgfVxuXG4gIHNsaWNlQ2F0ZWdvcnlDb3VudChzbGljZUluZGV4OiBudW1iZXIsIGNhdGVnb3J5S2V5OiBzdHJpbmcpOiBudW1iZXIge1xuICAgIGNvbnN0IGNhY2hlS2V5ID0gYCR7c2xpY2VJbmRleH06JHtjYXRlZ29yeUtleX1gO1xuICAgIGlmICh0aGlzLl9jb3VudENhY2hlLmhhcyhjYWNoZUtleSkpIHtcbiAgICAgIHJldHVybiB0aGlzLl9jb3VudENhY2hlLmdldChjYWNoZUtleSkhO1xuICAgIH1cbiAgICBjb25zdCBzbGljZSA9IHRoaXMuX2NhY2hlZFNsaWNlc1tzbGljZUluZGV4XTtcbiAgICBpZiAoIXNsaWNlKSByZXR1cm4gMDtcbiAgICBjb25zdCBjYXRlZ29yeSA9IChzbGljZS5jYXRlZ29yaWVzIHx8IFtdKS5maW5kKChjKSA9PiBjLmtleSA9PT0gY2F0ZWdvcnlLZXkpO1xuICAgIGNvbnN0IGNvdW50ID0gY2F0ZWdvcnkgPyAodGhpcy5kYXRhIHx8IFtdKS5maWx0ZXIoKHJvdykgPT4gY2F0ZWdvcnkuZmlsdGVyID8gY2F0ZWdvcnkuZmlsdGVyKHJvdykgOiB0cnVlKS5sZW5ndGggOiAwO1xuICAgIHRoaXMuX2NvdW50Q2FjaGUuc2V0KGNhY2hlS2V5LCBjb3VudCk7XG4gICAgcmV0dXJuIGNvdW50O1xuICB9XG5cbiAgaXNTbGljZUVtcHR5KHNsaWNlSW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHNsaWNlID0gdGhpcy5fY2FjaGVkU2xpY2VzW3NsaWNlSW5kZXhdO1xuICAgIGlmICghc2xpY2UpIHJldHVybiB0cnVlO1xuICAgIHJldHVybiAoc2xpY2UuY2F0ZWdvcmllcyB8fCBbXSkuZXZlcnkoYyA9PiB0aGlzLnNsaWNlQ2F0ZWdvcnlDb3VudChzbGljZUluZGV4LCBjLmtleSkgPT09IDApO1xuICB9XG5cbiAgb25TbGljZUNhdGVnb3J5U2VsZWN0ZWQoc2xpY2VJbmRleDogbnVtYmVyLCBjYXRlZ29yeUtleTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3Qgc2xpY2UgPSB0aGlzLnNsaWNlc1tzbGljZUluZGV4XTtcbiAgICBpZiAoIXNsaWNlKSByZXR1cm47XG4gICAgaWYgKCF0aGlzLmFjdGl2ZUtleXNCeVNsaWNlLmhhcyhzbGljZUluZGV4KSkge1xuICAgICAgdGhpcy5hY3RpdmVLZXlzQnlTbGljZS5zZXQoc2xpY2VJbmRleCwgbmV3IFNldCgpKTtcbiAgICB9XG4gICAgY29uc3QgYWN0aXZlS2V5cyA9IHRoaXMuYWN0aXZlS2V5c0J5U2xpY2UuZ2V0KHNsaWNlSW5kZXgpITtcbiAgICBpZiAoc2xpY2UubXVsdGlTZWxlY3QgPT09IGZhbHNlKSB7XG4gICAgICBpZiAoYWN0aXZlS2V5cy5oYXMoY2F0ZWdvcnlLZXkpKSB7XG4gICAgICAgIGFjdGl2ZUtleXMuY2xlYXIoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFjdGl2ZUtleXMuY2xlYXIoKTtcbiAgICAgICAgYWN0aXZlS2V5cy5hZGQoY2F0ZWdvcnlLZXkpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoYWN0aXZlS2V5cy5oYXMoY2F0ZWdvcnlLZXkpKSB7XG4gICAgICAgIGFjdGl2ZUtleXMuZGVsZXRlKGNhdGVnb3J5S2V5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFjdGl2ZUtleXMuYWRkKGNhdGVnb3J5S2V5KTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5fZW1pdEZpbHRlcigpO1xuICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIG9uU2xpY2VBbGxTZWxlY3RlZChzbGljZUluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5hY3RpdmVLZXlzQnlTbGljZS5oYXMoc2xpY2VJbmRleCkpIHtcbiAgICAgIHRoaXMuYWN0aXZlS2V5c0J5U2xpY2UuZ2V0KHNsaWNlSW5kZXgpIS5jbGVhcigpO1xuICAgIH1cbiAgICB0aGlzLl9lbWl0RmlsdGVyKCk7XG4gICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgZ2V0QWN0aXZlRmlsdGVycygpOiBTbGljZVBhbmVsRmlsdGVycyB7XG4gICAgY29uc3QgcmVzdWx0OiBTbGljZVBhbmVsRmlsdGVycyA9IHt9O1xuICAgIHRoaXMuX2NhY2hlZFNsaWNlcy5mb3JFYWNoKChzbGljZSwgaWR4KSA9PiB7XG4gICAgICBjb25zdCBrZXlzID0gdGhpcy5hY3RpdmVLZXlzQnlTbGljZS5nZXQoaWR4KTtcbiAgICAgIHJlc3VsdFt0aGlzLl9nZXRQZXJzaXN0ZW50U2xpY2VLZXkoc2xpY2UsIGlkeCldID0ga2V5cyA/IFsuLi5rZXlzXSA6IFtdO1xuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICByZXN0b3JlRmlsdGVycyhmaWx0ZXJzOiBTbGljZVBhbmVsRmlsdGVycyk6IHZvaWQge1xuICAgIHRoaXMuYWN0aXZlS2V5c0J5U2xpY2UgPSBuZXcgTWFwKCk7XG4gICAgdGhpcy5fY2FjaGVkU2xpY2VzLmZvckVhY2goKHNsaWNlLCBpbmRleCkgPT4ge1xuICAgICAgLy8gTGVzIHByw6lmw6lyZW5jZXMgaGlzdG9yaXF1ZXMgdXRpbGlzYWllbnQgbCdpbmRleCBudW3DqXJpcXVlIGNvbW1lIGNsw6kuXG4gICAgICBjb25zdCBrZXlzID0gZmlsdGVyc1t0aGlzLl9nZXRQZXJzaXN0ZW50U2xpY2VLZXkoc2xpY2UsIGluZGV4KV0gPz8gZmlsdGVyc1tTdHJpbmcoaW5kZXgpXTtcbiAgICAgIGlmIChrZXlzPy5sZW5ndGgpIHRoaXMuYWN0aXZlS2V5c0J5U2xpY2Uuc2V0KGluZGV4LCBuZXcgU2V0KGtleXMpKTtcbiAgICB9KTtcbiAgICB0aGlzLl9lbWl0RmlsdGVyKCk7XG4gICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgYWRkRHluYW1pY1NsaWNlKGNvbHVtbjogU2xpY2VDb2x1bW5EZWY8VD4pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fZHluYW1pY1NsaWNlcy5zb21lKHNsaWNlID0+IHNsaWNlLmtleSA9PT0gY29sdW1uLmtleSkpIHJldHVybjtcbiAgICBjb25zdCBkaXN0aW5jdFZhbHVlcyA9IHRoaXMuX2NvbXB1dGVEaXN0aW5jdFZhbHVlcyhjb2x1bW4ua2V5KTtcbiAgICBjb25zdCBuZXdTbGljZTogU2xpY2VDb25maWc8VD4gPSB7XG4gICAgICB0aXRsZTogY29sdW1uLmhlYWRlcixcbiAgICAgIGNvbHVtbktleTogY29sdW1uLmtleSxcbiAgICAgIGNhdGVnb3JpZXM6IGRpc3RpbmN0VmFsdWVzLm1hcCgodikgPT4gdGhpcy5fYnVpbGRDYXRlZ29yeUZyb21WYWx1ZShjb2x1bW4ua2V5LCB2KSksXG4gICAgfTtcbiAgICB0aGlzLl9keW5hbWljU2xpY2VzID0gWy4uLnRoaXMuX2R5bmFtaWNTbGljZXMsIHsga2V5OiBjb2x1bW4ua2V5LCBzbGljZTogbmV3U2xpY2UgfV07XG4gICAgdGhpcy5fcmVidWlsZENhY2hlKCk7XG4gICAgdGhpcy5keW5hbWljU2xpY2VLZXlzQ2hhbmdlLmVtaXQodGhpcy5fZHluYW1pY1NsaWNlcy5tYXAoZCA9PiBkLmtleSkpO1xuICAgIHRoaXMuX2VtaXRGaWx0ZXIoKTtcbiAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICByZW1vdmVEeW5hbWljU2xpY2Uoc2xpY2VJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgZHluYW1pY0luZGV4ID0gc2xpY2VJbmRleCAtIHRoaXMuc3RhdGljU2xpY2VDb3VudDtcbiAgICBpZiAoZHluYW1pY0luZGV4IDwgMCkgcmV0dXJuO1xuICAgIGNvbnN0IG5ld0FjdGl2ZUtleXMgPSBuZXcgTWFwPG51bWJlciwgU2V0PHN0cmluZz4+KCk7XG4gICAgdGhpcy5hY3RpdmVLZXlzQnlTbGljZS5mb3JFYWNoKChrZXlzLCBpZHgpID0+IHtcbiAgICAgIGlmIChpZHggPCBzbGljZUluZGV4KSBuZXdBY3RpdmVLZXlzLnNldChpZHgsIGtleXMpO1xuICAgICAgZWxzZSBpZiAoaWR4ID4gc2xpY2VJbmRleCkgbmV3QWN0aXZlS2V5cy5zZXQoaWR4IC0gMSwga2V5cyk7XG4gICAgfSk7XG4gICAgdGhpcy5hY3RpdmVLZXlzQnlTbGljZSA9IG5ld0FjdGl2ZUtleXM7XG4gICAgdGhpcy5fZHluYW1pY1NsaWNlcyA9IHRoaXMuX2R5bmFtaWNTbGljZXMuZmlsdGVyKChfLCBpKSA9PiBpICE9PSBkeW5hbWljSW5kZXgpO1xuICAgIHRoaXMuX3JlYnVpbGRDYWNoZSgpO1xuICAgIHRoaXMuZHluYW1pY1NsaWNlS2V5c0NoYW5nZS5lbWl0KHRoaXMuX2R5bmFtaWNTbGljZXMubWFwKGQgPT4gZC5rZXkpKTtcbiAgICB0aGlzLl9lbWl0RmlsdGVyKCk7XG4gICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcmVtb3ZlRHluYW1pY1NsaWNlQnlLZXkoa2V5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBkeW5hbWljSW5kZXggPSB0aGlzLl9keW5hbWljU2xpY2VzLmZpbmRJbmRleCgoZCkgPT4gZC5rZXkgPT09IGtleSk7XG4gICAgaWYgKGR5bmFtaWNJbmRleCA8IDApIHJldHVybjtcbiAgICBjb25zdCBzbGljZUluZGV4ID0gdGhpcy5zdGF0aWNTbGljZUNvdW50ICsgZHluYW1pY0luZGV4O1xuICAgIHRoaXMucmVtb3ZlRHluYW1pY1NsaWNlKHNsaWNlSW5kZXgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfZW1pdEZpbHRlcigpOiB2b2lkIHtcbiAgICBjb25zdCBzbGljZXMgPSB0aGlzLnNsaWNlcztcbiAgICBjb25zdCBhY3RpdmVLZXlzQnlTbGljZSA9IHRoaXMuYWN0aXZlS2V5c0J5U2xpY2U7XG5cbiAgICB0aGlzLmFjdGl2ZUtleXNDaGFuZ2UuZW1pdChcbiAgICAgIHNsaWNlcy5tYXAoKF8sIGkpID0+IHtcbiAgICAgICAgY29uc3Qga2V5cyA9IGFjdGl2ZUtleXNCeVNsaWNlLmdldChpKTtcbiAgICAgICAgcmV0dXJuIGtleXMgPyBbLi4ua2V5c10gOiBbXTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGNvbnN0IHByZWQgPSAocm93OiBUKTogYm9vbGVhbiA9PlxuICAgICAgc2xpY2VzLmV2ZXJ5KChzbGljZSwgc2xpY2VJbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBhY3RpdmVLZXlzID0gYWN0aXZlS2V5c0J5U2xpY2UuZ2V0KHNsaWNlSW5kZXgpO1xuICAgICAgICBpZiAoIWFjdGl2ZUtleXMgfHwgYWN0aXZlS2V5cy5zaXplID09PSAwKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgaWYgKCFzbGljZS5jYXRlZ29yaWVzIHx8IHNsaWNlLmNhdGVnb3JpZXMubGVuZ3RoID09PSAwKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIFsuLi5hY3RpdmVLZXlzXS5zb21lKChrZXkpID0+IHtcbiAgICAgICAgICBjb25zdCBjYXRlZ29yeSA9IChzbGljZS5jYXRlZ29yaWVzIHx8IFtdKS5maW5kKChjKSA9PiBjLmtleSA9PT0ga2V5KTtcbiAgICAgICAgICBpZiAoIWNhdGVnb3J5KSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgaWYgKCFjYXRlZ29yeT8uZmlsdGVyKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICByZXR1cm4gY2F0ZWdvcnkuZmlsdGVyKHJvdyk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgdGhpcy5maWx0ZXJDaGFuZ2UuZW1pdChwcmVkKTtcbiAgfVxuXG4gIHByaXZhdGUgX2dldER5bmFtaWNTbGljZUNvbHVtbktleShzbGljZUluZGV4OiBudW1iZXIpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBjb25zdCBkeW5hbWljSW5kZXggPSBzbGljZUluZGV4IC0gdGhpcy5zdGF0aWNTbGljZUNvdW50O1xuICAgIHJldHVybiB0aGlzLl9keW5hbWljU2xpY2VzW2R5bmFtaWNJbmRleF0/LmtleSA/PyBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0UGVyc2lzdGVudFNsaWNlS2V5KHNsaWNlOiBTbGljZUNvbmZpZzxUPiwgaW5kZXg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIHNsaWNlLmNvbHVtbktleSA/IGBjb2x1bW46JHtzbGljZS5jb2x1bW5LZXl9YCA6IGBpbmRleDoke2luZGV4fWA7XG4gIH1cblxuICBwcml2YXRlIF9nZXRTbGljZUlkZW50aXR5KHNsaWNlOiBTbGljZUNvbmZpZzxUPiwgZmFsbGJhY2tJbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBpZiAoc2xpY2UuY29sdW1uS2V5KSByZXR1cm4gYGNvbHVtbjoke3NsaWNlLmNvbHVtbktleX1gO1xuICAgIGlmIChzbGljZS50aXRsZSkgcmV0dXJuIGB0aXRsZToke3NsaWNlLnRpdGxlfWA7XG4gICAgY29uc3QgY2F0ZWdvcnlLZXlzID0gKHNsaWNlLmNhdGVnb3JpZXMgfHwgW10pLm1hcCgoYykgPT4gYy5rZXkpLmpvaW4oJ3wnKTtcbiAgICByZXR1cm4gYGluZGV4OiR7ZmFsbGJhY2tJbmRleH18Y2F0ZWdvcmllczoke2NhdGVnb3J5S2V5c31gO1xuICB9XG5cbiAgcHJpdmF0ZSBfbWF0ZXJpYWxpemVTbGljZShzbGljZTogU2xpY2VDb25maWc8VD4pOiBTbGljZUNvbmZpZzxUPiB7XG4gICAgaWYgKCFzbGljZS5jb2x1bW5LZXkgfHwgKHNsaWNlLmNhdGVnb3JpZXMgJiYgc2xpY2UuY2F0ZWdvcmllcy5sZW5ndGggPiAwKSkge1xuICAgICAgcmV0dXJuIHNsaWNlO1xuICAgIH1cbiAgICBjb25zdCBjb2wgPSAodGhpcy5jb2x1bW5zIHx8IFtdKS5maW5kKGMgPT4gYy5rZXkgPT09IHNsaWNlLmNvbHVtbktleSk7XG4gICAgY29uc3QgaXNMYXp5ID0gISFjb2w/Lmxhenk7XG4gICAgaWYgKGlzTGF6eSAmJiB0aGlzLmxhenlTdGF0dXMuZ2V0KHNsaWNlLmNvbHVtbktleSEpICE9PSAnbG9hZGVkJykge1xuICAgICAgcmV0dXJuIHsgLi4uc2xpY2UsIGNhdGVnb3JpZXM6IFtdIH07XG4gICAgfVxuICAgIGlmIChzbGljZS5idWNrZXQpIHtcbiAgICAgIGNvbnN0IGRpc3RpbmN0VmFsdWVzID0gWy4uLm5ldyBTZXQoKHRoaXMuZGF0YSB8fCBbXSkubWFwKHNsaWNlLmJ1Y2tldCkpXS5zb3J0KCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zbGljZSxcbiAgICAgICAgY2F0ZWdvcmllczogZGlzdGluY3RWYWx1ZXMubWFwKCh2KSA9PiAoe1xuICAgICAgICAgIGtleTogdiwgbGFiZWw6IHYsXG4gICAgICAgICAgZmlsdGVyOiAocm93OiBUKSA9PiBzbGljZS5idWNrZXQhKHJvdykgPT09IHYsXG4gICAgICAgIH0pKSxcbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IGRpc3RpbmN0VmFsdWVzID0gdGhpcy5fY29tcHV0ZURpc3RpbmN0VmFsdWVzKHNsaWNlLmNvbHVtbktleSEpO1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zbGljZSxcbiAgICAgIGNhdGVnb3JpZXM6IGRpc3RpbmN0VmFsdWVzLm1hcCgodikgPT4gdGhpcy5fYnVpbGRDYXRlZ29yeUZyb21WYWx1ZShzbGljZS5jb2x1bW5LZXkhLCB2KSksXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgX2J1aWxkQ2F0ZWdvcnlGcm9tVmFsdWUoY29sdW1uS2V5OiBzdHJpbmcsIHY6IHN0cmluZyk6IHsga2V5OiBzdHJpbmc7IGxhYmVsOiBzdHJpbmc7IGZpbHRlcjogKHJvdzogVCkgPT4gYm9vbGVhbiB9IHtcbiAgICBpZiAodiA9PT0gRU1QVFlfQ0FURUdPUllfS0VZKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBrZXk6IEVNUFRZX0NBVEVHT1JZX0tFWSxcbiAgICAgICAgbGFiZWw6IEVNUFRZX0NBVEVHT1JZX0xBQkVMLFxuICAgICAgICBmaWx0ZXI6IChyb3c6IFQpID0+IHtcbiAgICAgICAgICBjb25zdCB2YWwgPSB0aGlzLl9nZXRMYXp5QXdhcmVWYWx1ZShjb2x1bW5LZXksIHJvdyk7XG4gICAgICAgICAgcmV0dXJuIHZhbCA9PSBudWxsIHx8IHZhbCA9PT0gJyc7XG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAga2V5OiB2LCBsYWJlbDogdixcbiAgICAgIGZpbHRlcjogKHJvdzogVCkgPT4gU3RyaW5nKHRoaXMuX2dldExhenlBd2FyZVZhbHVlKGNvbHVtbktleSwgcm93KSA/PyAnJykgPT09IHYsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgX2NvbXB1dGVEaXN0aW5jdFZhbHVlcyhjb2x1bW5LZXk6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCByYXdWYWx1ZXMgPSAodGhpcy5kYXRhIHx8IFtdKS5tYXAoKHJvdykgPT4ge1xuICAgICAgY29uc3QgdmFsID0gdGhpcy5fZ2V0TGF6eUF3YXJlVmFsdWUoY29sdW1uS2V5LCByb3cpO1xuICAgICAgcmV0dXJuIHZhbCAhPSBudWxsICYmIHZhbCAhPT0gJycgPyBTdHJpbmcodmFsKSA6IG51bGw7XG4gICAgfSk7XG4gICAgY29uc3QgZGlzdGluY3QgPSBbLi4ubmV3IFNldChyYXdWYWx1ZXMuZmlsdGVyKCh2KTogdiBpcyBzdHJpbmcgPT4gdiAhPT0gbnVsbCkpXS5zb3J0KCk7XG4gICAgaWYgKHJhd1ZhbHVlcy5zb21lKHYgPT4gdiA9PT0gbnVsbCkpIGRpc3RpbmN0LnB1c2goRU1QVFlfQ0FURUdPUllfS0VZKTtcbiAgICByZXR1cm4gZGlzdGluY3Q7XG4gIH1cblxuICBwcml2YXRlIF9nZXRMYXp5QXdhcmVWYWx1ZShjb2x1bW5LZXk6IHN0cmluZywgcm93OiBUKTogYW55IHtcbiAgICBjb25zdCBjb2xEZWYgPSAodGhpcy5jb2x1bW5zIHx8IFtdKS5maW5kKGMgPT4gYy5rZXkgPT09IGNvbHVtbktleSk7XG4gICAgaWYgKGNvbERlZj8ubGF6eSkge1xuICAgICAgcmV0dXJuIHRoaXMubGF6eURhdGEuZ2V0KGNvbHVtbktleSk/LmdldChyb3cpID8/IG51bGw7XG4gICAgfVxuICAgIGlmIChjb2xEZWY/LnZhbHVlKSB7XG4gICAgICByZXR1cm4gKGNvbERlZi52YWx1ZSBhcyBhbnkpKHJvdywgMCk7XG4gICAgfVxuICAgIHJldHVybiAocm93IGFzIGFueSlbY29sdW1uS2V5XTtcbiAgfVxuXG4gIHByaXZhdGUgX3JlYnVpbGRDYWNoZSgpOiB2b2lkIHtcbiAgICBjb25zdCBwcmV2aW91c1NsaWNlcyA9IHRoaXMuX2NhY2hlZFNsaWNlcztcbiAgICBjb25zdCBwcmV2aW91c0FjdGl2ZUtleXMgPSB0aGlzLmFjdGl2ZUtleXNCeVNsaWNlO1xuICAgIGNvbnN0IGFsbFNsaWNlcyA9IFsuLi4odGhpcy5zbGljZUNvbmZpZ3MgfHwgW10pLCAuLi50aGlzLl9keW5hbWljU2xpY2VzLm1hcCgoZCkgPT4gZC5zbGljZSldO1xuICAgIHRoaXMuX2NhY2hlZFNsaWNlcyA9IGFsbFNsaWNlcy5tYXAoKHNsaWNlKSA9PiB0aGlzLl9tYXRlcmlhbGl6ZVNsaWNlKHNsaWNlKSk7XG5cbiAgICBjb25zdCBwcmV2aW91c0tleXNCeUlkZW50aXR5ID0gbmV3IE1hcDxzdHJpbmcsIFNldDxzdHJpbmc+PigpO1xuICAgIHByZXZpb3VzU2xpY2VzLmZvckVhY2goKHNsaWNlLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgYWN0aXZlS2V5cyA9IHByZXZpb3VzQWN0aXZlS2V5cy5nZXQoaW5kZXgpO1xuICAgICAgaWYgKCFhY3RpdmVLZXlzIHx8IGFjdGl2ZUtleXMuc2l6ZSA9PT0gMCkgcmV0dXJuO1xuICAgICAgcHJldmlvdXNLZXlzQnlJZGVudGl0eS5zZXQodGhpcy5fZ2V0U2xpY2VJZGVudGl0eShzbGljZSwgaW5kZXgpLCBuZXcgU2V0KGFjdGl2ZUtleXMpKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IG5leHRBY3RpdmVLZXlzID0gbmV3IE1hcDxudW1iZXIsIFNldDxzdHJpbmc+PigpO1xuICAgIHRoaXMuX2NhY2hlZFNsaWNlcy5mb3JFYWNoKChzbGljZSwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IHByZXZpb3VzS2V5cyA9IHByZXZpb3VzS2V5c0J5SWRlbnRpdHkuZ2V0KHRoaXMuX2dldFNsaWNlSWRlbnRpdHkoc2xpY2UsIGluZGV4KSk7XG4gICAgICBpZiAoIXByZXZpb3VzS2V5cyB8fCBwcmV2aW91c0tleXMuc2l6ZSA9PT0gMCkgcmV0dXJuO1xuICAgICAgY29uc3QgYXZhaWxhYmxlS2V5cyA9IG5ldyBTZXQoKHNsaWNlLmNhdGVnb3JpZXMgfHwgW10pLm1hcCgoYykgPT4gYy5rZXkpKTtcbiAgICAgIGNvbnN0IG1hdGNoaW5nS2V5cyA9IFsuLi5wcmV2aW91c0tleXNdLmZpbHRlcigoa2V5KSA9PiBhdmFpbGFibGVLZXlzLmhhcyhrZXkpKTtcbiAgICAgIGlmIChtYXRjaGluZ0tleXMubGVuZ3RoID4gMCkgbmV4dEFjdGl2ZUtleXMuc2V0KGluZGV4LCBuZXcgU2V0KG1hdGNoaW5nS2V5cykpO1xuICAgIH0pO1xuICAgIHRoaXMuYWN0aXZlS2V5c0J5U2xpY2UgPSBuZXh0QWN0aXZlS2V5cztcbiAgICB0aGlzLl9jb3VudENhY2hlLmNsZWFyKCk7XG4gIH1cblxuICBwcml2YXRlIF9yZWZyZXNoRHluYW1pY1NsaWNlcygpOiB2b2lkIHtcbiAgICB0aGlzLl9keW5hbWljU2xpY2VzID0gdGhpcy5fZHluYW1pY1NsaWNlcy5tYXAoKHsga2V5LCBzbGljZSB9KSA9PiB7XG4gICAgICBjb25zdCBkaXN0aW5jdFZhbHVlcyA9IHRoaXMuX2NvbXB1dGVEaXN0aW5jdFZhbHVlcyhrZXkpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAga2V5LFxuICAgICAgICBzbGljZToge1xuICAgICAgICAgIC4uLnNsaWNlLFxuICAgICAgICAgIGNhdGVnb3JpZXM6IGRpc3RpbmN0VmFsdWVzLm1hcCgodikgPT4gdGhpcy5fYnVpbGRDYXRlZ29yeUZyb21WYWx1ZShrZXksIHYpKSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9zY3JvbGxTbGljZVRpdGxlSW50b1ZpZXcoc2xpY2VJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBib2R5ID0gdGhpcy5zbGljZVBhbmVsQm9keVJlZj8ubmF0aXZlRWxlbWVudDtcbiAgICAgIGlmICghYm9keSkgcmV0dXJuO1xuICAgICAgY29uc3QgZWwgPSBib2R5LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLXNsaWNlLWluZGV4PVwiJHtzbGljZUluZGV4fVwiXWApIGFzIEhUTUxFbGVtZW50IHwgbnVsbDtcbiAgICAgIGVsPy5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiAnc21vb3RoJywgYmxvY2s6ICduZWFyZXN0JyB9KTtcbiAgICB9LCA1MCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJzbGljZS1wYW5lbC13cmFwcGVyXCIgW2NsYXNzLmNvbGxhcHNlZF09XCJpc0NvbGxhcHNlZFwiPlxuICA8YXNpZGUgY2xhc3M9XCJzbGljZS1wYW5lbFwiIFtjbGFzcy5jb2xsYXBzZWRdPVwiaXNDb2xsYXBzZWRcIj5cbiAgICA8ZGl2IGNsYXNzPVwic2xpY2UtcGFuZWwtaGVhZGVyXCI+XG4gICAgICA8c3BhbiAqbmdJZj1cIiFpc0NvbGxhcHNlZFwiIGNsYXNzPVwic2xpY2UtcGFuZWwtdGl0bGVcIj5cbiAgICAgICAge3sgaTE4bi5maWx0ZXJQYW5lbFRpdGxlKHNsaWNlcy5sZW5ndGgpIH19XG4gICAgICA8L3NwYW4+XG4gICAgICA8YnV0dG9uXG4gICAgICAgICpuZ0lmPVwic2hvd1RvZ2dsZVwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBjbGFzcz1cInNsaWNlLXRvZ2dsZVwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiaXNDb2xsYXBzZWQgPyBpMThuLmV4cGFuZEZpbHRlclRpdGxlIDogaTE4bi5jb2xsYXBzZUZpbHRlclRpdGxlXCJcbiAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVBhbmVsKClcIlxuICAgICAgPlxuICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJzbGljZS10b2dnbGUtbWF0LWljb25cIj57eyBpc0NvbGxhcHNlZCA/ICdmaWx0ZXJfbGlzdCcgOiAnZmlsdGVyX2xpc3Rfb2ZmJyB9fTwvbWF0LWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJzbGljZS1wYW5lbC1ib2R5XCIgKm5nSWY9XCIhaXNDb2xsYXBzZWRcIiAjc2xpY2VQYW5lbEJvZHk+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBzbGljZSBvZiBzbGljZXM7IGxldCBzaSA9IGluZGV4OyB0cmFja0J5OiB0cmFja0J5U2xpY2VJbmRleFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2xpY2UtdGl0bGUtcm93XCIgW2F0dHIuZGF0YS1zbGljZS1pbmRleF09XCJzaVwiIChjbGljayk9XCJ0b2dnbGVTbGljZUNvbGxhcHNlKHNpKVwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2xpY2UtdGl0bGUtY2hldnJvblwiIFtjbGFzcy5leHBhbmRlZF09XCIhaXNTbGljZUNvbGxhcHNlZChzaSlcIj7igLo8L3NwYW4+XG4gICAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwiZ2V0U2xpY2VJY29uKHNsaWNlKVwiIGNsYXNzPVwic2xpY2UtdGl0bGUtaWNvblwiPnt7IGdldFNsaWNlSWNvbihzbGljZSkgfX08L21hdC1pY29uPlxuICAgICAgICAgIDxwIGNsYXNzPVwic2xpY2UtdGl0bGVcIj57eyBzbGljZS50aXRsZSB8fCBpMThuLmZpbHRlckJsb2NrRGVmYXVsdFRpdGxlIH19PC9wPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICpuZ0lmPVwiaXNTbGljZUR5bmFtaWMoc2kpXCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgY2xhc3M9XCJzbGljZS1yZW1vdmUtYnRuXCJcbiAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IHJlbW92ZUR5bmFtaWNTbGljZShzaSlcIlxuICAgICAgICAgID7DlzwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwic2xpY2Utc2VjdGlvbi1pdGVtc1wiICpuZ0lmPVwiIWlzU2xpY2VDb2xsYXBzZWQoc2kpXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzU2xpY2VMb2FkaW5nKHNpKTsgZWxzZSBzbGljZUNvbnRlbnRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzbGljZS1sYXp5LWxvYWRpbmdcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYXp5LXNrZWxldG9uXCI+PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhenktc2tlbGV0b25cIj48L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGF6eS1za2VsZXRvblwiPjwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjc2xpY2VDb250ZW50PlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY2F0ZWdvcnkgb2Ygc2xpY2UuY2F0ZWdvcmllczsgdHJhY2tCeTogdHJhY2tCeUNhdGVnb3J5S2V5XCI+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAqbmdJZj1cInNsaWNlQ2F0ZWdvcnlDb3VudChzaSwgY2F0ZWdvcnkua2V5KSA+IDBcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwic2xpY2UtaXRlbVwiXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJpc1NsaWNlQ2F0ZWdvcnlBY3RpdmUoc2ksIGNhdGVnb3J5LmtleSlcIlxuICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtY2F0ZWdvcnkta2V5XT1cImNhdGVnb3J5LmtleVwiXG4gICAgICAgICAgICAgICAgW3RpdGxlXT1cImNhdGVnb3J5LmxhYmVsXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib25TbGljZUNhdGVnb3J5U2VsZWN0ZWQoc2ksIGNhdGVnb3J5LmtleSlcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHNwYW4+e3sgY2F0ZWdvcnkubGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzaG93Q291bnRzXCI+e3sgc2xpY2VDYXRlZ29yeUNvdW50KHNpLCBjYXRlZ29yeS5rZXkpIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzU2xpY2VFbXB0eShzaSlcIiBjbGFzcz1cInNsaWNlLWVtcHR5LXN0YXRlXCI+e3sgaTE4bi5maWx0ZXJFbXB0eVN0YXRlIH19PC9kaXY+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGhyICpuZ0lmPVwic2kgPCBzbGljZXMubGVuZ3RoIC0gMVwiIGNsYXNzPVwic2xpY2UtZGl2aWRlclwiIC8+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgPC9hc2lkZT5cbjwvZGl2PlxuIl19
479
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpY2UtcGFuZWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb25ldGVtZS9qcXVlcnktb3JnYW5pemVyL3NyYy9saWIvc2xpY2UtcGFuZWwvc2xpY2UtcGFuZWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb25ldGVtZS9qcXVlcnktb3JnYW5pemVyL3NyYy9saWIvc2xpY2UtcGFuZWwvc2xpY2UtcGFuZWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFpQixTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7O0FBR2pNLE1BQU0sa0JBQWtCLEdBQUcsV0FBVyxDQUFDO0FBQ3ZDLE1BQU0sb0JBQW9CLEdBQUcsTUFBTSxDQUFDO0FBRXBDLE1BQU0sSUFBSSxHQUFHO0lBQ1gsaUJBQWlCLEVBQUUsbUJBQW1CO0lBQ3RDLG1CQUFtQixFQUFFLG1CQUFtQjtJQUN4QyxnQkFBZ0IsRUFBRSxDQUFDLEtBQWEsRUFBRSxFQUFFLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxRQUFRO0lBQ3JFLHVCQUF1QixFQUFFLFNBQVM7SUFDbEMsZ0JBQWdCLEVBQUUsZUFBZTtDQUNsQyxDQUFDO0FBWUYsTUFBTSxPQUFPLG1CQUFtQjtJQVJoQztRQVVXLGlCQUFZLEdBQXFCLEVBQUUsQ0FBQztRQUNwQyxZQUFPLEdBQXdCLEVBQUUsQ0FBQztRQUNs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LElBQUksWUFDTixhQUFhLFdBQ2QsQ0FBQyxZQUFZLEVBQUUsYUFBYSxDQUFDLG1CQUdyQix1QkFBdUIsQ0FBQyxNQUFNOzhCQUl0QyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBRUksWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBQ0csc0JBQXNCO3NCQUEvQixNQUFNO2dCQUNHLGVBQWU7c0JBQXhCLE1BQU07Z0JBRXNCLGlCQUFpQjtzQkFBN0MsU0FBUzt1QkFBQyxnQkFBZ0I7Z0JBUVMsYUFBYTtzQkFBaEQsV0FBVzt1QkFBQyxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSG9zdEJpbmRpbmcsIElucHV0LCBPbkNoYW5nZXMsIE9uSW5pdCwgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzLCBWaWV3Q2hpbGQsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU2xpY2VDb2x1bW5EZWYsIFNsaWNlQ29uZmlnIH0gZnJvbSAnLi9zbGljZS1wYW5lbC5tb2RlbCc7XG5cbmNvbnN0IEVNUFRZX0NBVEVHT1JZX0tFWSA9ICdfX2VtcHR5X18nO1xuY29uc3QgRU1QVFlfQ0FURUdPUllfTEFCRUwgPSAnVmlkZSc7XG5cbmNvbnN0IEkxOE4gPSB7XG4gIGV4cGFuZEZpbHRlclRpdGxlOiAnRMOpcGxpZXIgbGUgZmlsdHJlJyxcbiAgY29sbGFwc2VGaWx0ZXJUaXRsZTogJ1JlcGxpZXIgbGUgZmlsdHJlJyxcbiAgZmlsdGVyUGFuZWxUaXRsZTogKGNvdW50OiBudW1iZXIpID0+IGNvdW50ID4gMSA/ICdGaWx0cmVzJyA6ICdGaWx0cmUnLFxuICBmaWx0ZXJCbG9ja0RlZmF1bHRUaXRsZTogJ0ZpbHRyZXInLFxuICBmaWx0ZXJFbXB0eVN0YXRlOiAnQXVjdW5lIGRvbm7DqWUnLFxufTtcblxuZXhwb3J0IHR5cGUgU2xpY2VQYW5lbEZpbHRlcnMgPSBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT47XG5cbkBDb21wb25lbnQoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBzZWxlY3RvcjogJ3NsaWNlLXBhbmVsJyxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgTWF0SWNvbk1vZHVsZV0sXG4gIHRlbXBsYXRlVXJsOiAnLi9zbGljZS1wYW5lbC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3NsaWNlLXBhbmVsLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBTbGljZVBhbmVsQ29tcG9uZW50PFQgPSBhbnk+IGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkluaXQge1xuXG4gIEBJbnB1dCgpIHNsaWNlQ29uZmlnczogU2xpY2VDb25maWc8VD5bXSA9IFtdO1xuICBASW5wdXQoKSBjb2x1bW5zOiBTbGljZUNvbHVtbkRlZjxUPltdID0gW107XG4gIEBJbnB1dCgpIGRhdGE6IFRbXSA9IFtdO1xuICBASW5wdXQoKSBsYXp5U3RhdHVzOiBNYXA8c3RyaW5nLCAnaWRsZScgfCAnbG9hZGluZycgfCAnbG9hZGVkJyB8ICdlcnJvcic+ID0gbmV3IE1hcCgpO1xuICBASW5wdXQoKSBzaG93VG9nZ2xlID0gdHJ1ZTtcbiAgQElucHV0KCkgc2hvd0NvdW50cyA9IHRydWU7XG4gIEBJbnB1dCgpIGNvbGxhcHNlZEJ5RGVmYXVsdCA9IGZhbHNlO1xuICBASW5wdXQoKSBhbHdheXNTaG93ID0gZmFsc2U7XG5cbiAgQE91dHB1dCgpIGZpbHRlckNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8KHJvdzogVCkgPT4gYm9vbGVhbj4oKTtcbiAgQE91dHB1dCgpIGFjdGl2ZUtleXNDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZ1tdW10+KCk7XG4gIEBPdXRwdXQoKSBkeW5hbWljU2xpY2VLZXlzQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmdbXT4oKTtcbiAgQE91dHB1dCgpIGNvbGxhcHNlZENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICBAVmlld0NoaWxkKCdzbGljZVBhbmVsQm9keScpIHNsaWNlUGFuZWxCb2R5UmVmPzogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG5cbiAgcHJpdmF0ZSBfY2RyID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcblxuICByZWFkb25seSBpMThuID0gSTE4TjtcblxuICBpc0NvbGxhcHNlZCA9IGZhbHNlO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MuY29sbGFwc2VkJykgZ2V0IGhvc3RDb2xsYXBzZWQoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLmlzQ29sbGFwc2VkOyB9XG4gIGFjdGl2ZUtleXNCeVNsaWNlOiBNYXA8bnVtYmVyLCBTZXQ8c3RyaW5nPj4gPSBuZXcgTWFwKCk7XG4gIHByaXZhdGUgX2V4cGFuZGVkU2xpY2VzID0gbmV3IFNldDxudW1iZXI+KCk7XG4gIF9keW5hbWljU2xpY2VzOiBBcnJheTx7IGtleTogc3RyaW5nOyBzbGljZTogU2xpY2VDb25maWc8VD4gfT4gPSBbXTtcblxuICBfY2FjaGVkU2xpY2VzOiBTbGljZUNvbmZpZzxUPltdID0gW107XG4gIHByaXZhdGUgX2NvdW50Q2FjaGUgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuXG4gIHJlYWRvbmx5IHRyYWNrQnlTbGljZUluZGV4ID0gKGluZGV4OiBudW1iZXIsIF86IGFueSk6IG51bWJlciA9PiBpbmRleDtcbiAgcmVhZG9ubHkgdHJhY2tCeUNhdGVnb3J5S2V5ID0gKF86IG51bWJlciwgY2F0OiBhbnkpOiBzdHJpbmcgPT4gY2F0LmtleTtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmlzQ29sbGFwc2VkID0gdGhpcy5jb2xsYXBzZWRCeURlZmF1bHQ7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXNbJ3NsaWNlQ29uZmlncyddIHx8IGNoYW5nZXNbJ2RhdGEnXSB8fCBjaGFuZ2VzWydjb2x1bW5zJ10gfHwgY2hhbmdlc1snbGF6eVN0YXR1cyddKSB7XG4gICAgICBjb25zdCBoYWRBY3RpdmVGaWx0ZXJzID0gdGhpcy5faGFzQWN0aXZlRmlsdGVycygpO1xuICAgICAgdGhpcy5fcmVmcmVzaER5bmFtaWNTbGljZXMoKTtcbiAgICAgIHRoaXMuX3JlYnVpbGRDYWNoZSgpO1xuICAgICAgY29uc3Qgc2hvdWxkUmVlbWl0RmlsdGVyID0gISEoY2hhbmdlc1snc2xpY2VDb25maWdzJ10gfHwgY2hhbmdlc1snZGF0YSddIHx8IGNoYW5nZXNbJ2NvbHVtbnMnXSB8fCBjaGFuZ2VzWydsYXp5U3RhdHVzJ10pO1xuICAgICAgLy8gVW4gc2xpY2UgcmV0aXLDqSBkZSBsYSBjb25maWcgZW1wb3J0ZSBzYSBzw6lsZWN0aW9uIDogbGUgcGFyZW50IGRvaXQgZW4gw6p0cmUgaW5mb3Jtw6kuXG4gICAgICBpZiAoc2hvdWxkUmVlbWl0RmlsdGVyICYmIChoYWRBY3RpdmVGaWx0ZXJzIHx8IHRoaXMuX2hhc0FjdGl2ZUZpbHRlcnMoKSkpIHtcbiAgICAgICAgdGhpcy5fZW1pdEZpbHRlcigpO1xuICAgICAgfVxuICAgICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2hhc0FjdGl2ZUZpbHRlcnMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIFsuLi50aGlzLmFjdGl2ZUtleXNCeVNsaWNlLnZhbHVlcygpXS5zb21lKHMgPT4gcy5zaXplID4gMCk7XG4gIH1cblxuICBnZXQgc2hvd1BhbmVsKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGhhc0NmZyA9ICh0aGlzLnNsaWNlQ29uZmlncyB8fCBbXSkubGVuZ3RoID4gMCB8fCB0aGlzLl9keW5hbWljU2xpY2VzLmxlbmd0aCA+IDA7XG4gICAgaWYgKHRoaXMuYWx3YXlzU2hvdykgcmV0dXJuIGhhc0NmZztcbiAgICByZXR1cm4gaGFzQ2ZnICYmICh0aGlzLmRhdGE/Lmxlbmd0aCA/PyAwKSA+IDA7XG4gIH1cblxuICBnZXQgc2xpY2VzKCk6IFNsaWNlQ29uZmlnPFQ+W10ge1xuICAgIHJldHVybiB0aGlzLl9jYWNoZWRTbGljZXM7XG4gIH1cblxuICBnZXQgc3RhdGljU2xpY2VDb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiAodGhpcy5zbGljZUNvbmZpZ3MgfHwgW10pLmxlbmd0aDtcbiAgfVxuXG4gIGdldCBzdGF0aWNTbGljZXNGb3JNZW51KCk6IEFycmF5PHsga2V5OiBzdHJpbmc7IHRpdGxlOiBzdHJpbmcgfT4ge1xuICAgIHJldHVybiAodGhpcy5zbGljZUNvbmZpZ3MgfHwgW10pXG4gICAgICAuZmlsdGVyKChzKSA9PiAhIXMuY29sdW1uS2V5KVxuICAgICAgLm1hcCgocykgPT4gKHsga2V5OiBzLmNvbHVtbktleSEsIHRpdGxlOiBzLnRpdGxlIHx8IHMuY29sdW1uS2V5ISB9KSk7XG4gIH1cblxuICBnZXQgYWN0aXZlRHluYW1pY1NsaWNlQ29sdW1ucygpOiBTbGljZUNvbHVtbkRlZjxUPltdIHtcbiAgICByZXR1cm4gdGhpcy5fZHluYW1pY1NsaWNlc1xuICAgICAgLm1hcCgoZCkgPT4gKHRoaXMuY29sdW1ucyB8fCBbXSkuZmluZCgoYykgPT4gYy5rZXkgPT09IGQua2V5KSlcbiAgICAgIC5maWx0ZXIoKGMpOiBjIGlzIFNsaWNlQ29sdW1uRGVmPFQ+ID0+ICEhYyk7XG4gIH1cblxuICBnZXQgYXZhaWxhYmxlQ29sdW1uc0ZvckR5bmFtaWNTbGljZSgpOiBTbGljZUNvbHVtbkRlZjxUPltdIHtcbiAgICBjb25zdCBkeW5hbWljS2V5cyA9IG5ldyBTZXQodGhpcy5fZHluYW1pY1NsaWNlcy5tYXAoKGQpID0+IGQua2V5KSk7XG4gICAgY29uc3Qgc3RhdGljS2V5cyA9IG5ldyBTZXQoXG4gICAgICAodGhpcy5zbGljZUNvbmZpZ3MgfHwgW10pLm1hcCgocykgPT4gcy5jb2x1bW5LZXkpLmZpbHRlcigoayk6IGsgaXMgc3RyaW5nID0+ICEhaylcbiAgICApO1xuICAgIGNvbnN0IGV4aXN0aW5nS2V5cyA9IG5ldyBTZXQoWy4uLmR5bmFtaWNLZXlzLCAuLi5zdGF0aWNLZXlzXSk7XG4gICAgY29uc3Qgc2VlbiA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIHJldHVybiAodGhpcy5jb2x1bW5zIHx8IFtdKS5maWx0ZXIoKGMpID0+IHtcbiAgICAgIGlmIChleGlzdGluZ0tleXMuaGFzKGMua2V5KSB8fCBzZWVuLmhhcyhjLmtleSkpIHJldHVybiBmYWxzZTtcbiAgICAgIHNlZW4uYWRkKGMua2V5KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0pO1xuICB9XG5cbiAgaXNTbGljZUNvbGxhcHNlZChzbGljZUluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5fY2FjaGVkU2xpY2VzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgcmV0dXJuIHRoaXMuX2V4cGFuZGVkU2xpY2VzLmhhcygtMSAtIHNsaWNlSW5kZXgpO1xuICAgIH1cbiAgICByZXR1cm4gIXRoaXMuX2V4cGFuZGVkU2xpY2VzLmhhcyhzbGljZUluZGV4KTtcbiAgfVxuXG4gIHRvZ2dsZVNsaWNlQ29sbGFwc2Uoc2xpY2VJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2xpY2VzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgY29uc3QgY2xvc2VkS2V5ID0gLTEgLSBzbGljZUluZGV4O1xuICAgICAgaWYgKHRoaXMuX2V4cGFuZGVkU2xpY2VzLmhhcyhjbG9zZWRLZXkpKSB7XG4gICAgICAgIHRoaXMuX2V4cGFuZGVkU2xpY2VzLmRlbGV0ZShjbG9zZWRLZXkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fZXhwYW5kZWRTbGljZXMuYWRkKGNsb3NlZEtleSk7XG4gICAgICAgIHRoaXMuX3Njcm9sbFNsaWNlVGl0bGVJbnRvVmlldyhzbGljZUluZGV4KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMuX2V4cGFuZGVkU2xpY2VzLmhhcyhzbGljZUluZGV4KSkge1xuICAgICAgICB0aGlzLl9leHBhbmRlZFNsaWNlcy5kZWxldGUoc2xpY2VJbmRleCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9leHBhbmRlZFNsaWNlcy5jbGVhcigpO1xuICAgICAgICB0aGlzLl9leHBhbmRlZFNsaWNlcy5hZGQoc2xpY2VJbmRleCk7XG4gICAgICAgIHRoaXMuX3Njcm9sbFNsaWNlVGl0bGVJbnRvVmlldyhzbGljZUluZGV4KTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgdG9nZ2xlUGFuZWwoKTogdm9pZCB7XG4gICAgdGhpcy5pc0NvbGxhcHNlZCA9ICF0aGlzLmlzQ29sbGFwc2VkO1xuICAgIHRoaXMuY29sbGFwc2VkQ2hhbmdlLmVtaXQodGhpcy5pc0NvbGxhcHNlZCk7XG4gICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgaXNTbGljZUR5bmFtaWMoc2xpY2VJbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHNsaWNlSW5kZXggPj0gdGhpcy5zdGF0aWNTbGljZUNvdW50O1xuICB9XG5cbiAgaXNTbGljZUxvYWRpbmcoc2xpY2VJbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgc3RhdGljU2xpY2UgPSAodGhpcy5zbGljZUNvbmZpZ3MgfHwgW10pW3NsaWNlSW5kZXhdO1xuICAgIGlmIChzdGF0aWNTbGljZT8uY29sdW1uS2V5KSB7XG4gICAgICBjb25zdCBjb2xEZWYgPSAodGhpcy5jb2x1bW5zIHx8IFtdKS5maW5kKGMgPT4gYy5rZXkgPT09IHN0YXRpY1NsaWNlLmNvbHVtbktleSk7XG4gICAgICBpZiAoY29sRGVmPy5sYXp5KSB7XG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IHRoaXMubGF6eVN0YXR1cy5nZXQoc3RhdGljU2xpY2UuY29sdW1uS2V5ISkgPz8gJ2lkbGUnO1xuICAgICAgICByZXR1cm4gc3RhdHVzID09PSAnbG9hZGluZycgfHwgc3RhdHVzID09PSAnaWRsZSc7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGtleSA9IHRoaXMuX2dldER5bmFtaWNTbGljZUNvbHVtbktleShzbGljZUluZGV4KTtcbiAgICBpZiAoIWtleSkgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IGNvbERlZiA9ICh0aGlzLmNvbHVtbnMgfHwgW10pLmZpbmQoYyA9PiBjLmtleSA9PT0ga2V5KTtcbiAgICBpZiAoIWNvbERlZj8ubGF6eSkgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IHN0YXR1cyA9IHRoaXMubGF6eVN0YXR1cy5nZXQoa2V5KSA/PyAnaWRsZSc7XG4gICAgcmV0dXJuIHN0YXR1cyA9PT0gJ2xvYWRpbmcnIHx8IHN0YXR1cyA9PT0gJ2lkbGUnO1xuICB9XG5cbiAgaXNTdGF0aWNTbGljZVZpc2libGUoX2NvbHVtbktleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBnZXRTbGljZUljb24oc2xpY2U6IFNsaWNlQ29uZmlnPFQ+KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoc2xpY2UuaWNvbikgcmV0dXJuIHNsaWNlLmljb247XG4gICAgaWYgKHNsaWNlLmNvbHVtbktleSkge1xuICAgICAgcmV0dXJuICh0aGlzLmNvbHVtbnMgfHwgW10pLmZpbmQoYyA9PiBjLmtleSA9PT0gc2xpY2UuY29sdW1uS2V5KT8uaWNvbjtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlzU2xpY2VDYXRlZ29yeUFjdGl2ZShzbGljZUluZGV4OiBudW1iZXIsIGNhdGVnb3J5S2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5hY3RpdmVLZXlzQnlTbGljZS5nZXQoc2xpY2VJbmRleCk/LmhhcyhjYXRlZ29yeUtleSkgPz8gZmFsc2U7XG4gIH1cblxuICBpc1NsaWNlQWxsQWN0aXZlKHNsaWNlSW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5hY3RpdmVLZXlzQnlTbGljZS5oYXMoc2xpY2VJbmRleCkgfHwgdGhpcy5hY3RpdmVLZXlzQnlTbGljZS5nZXQoc2xpY2VJbmRleCkhLnNpemUgPT09IDA7XG4gIH1cblxuICBzbGljZUNhdGVnb3J5Q291bnQoc2xpY2VJbmRleDogbnVtYmVyLCBjYXRlZ29yeUtleTogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBjb25zdCBzbGljZSA9IHRoaXMuX2NhY2hlZFNsaWNlc1tzbGljZUluZGV4XTtcbiAgICBpZiAoIXNsaWNlKSByZXR1cm4gMDtcbiAgICBjb25zdCBjYXRlZ29yeSA9IChzbGljZS5jYXRlZ29yaWVzIHx8IFtdKS5maW5kKChjKSA9PiBjLmtleSA9PT0gY2F0ZWdvcnlLZXkpO1xuICAgIGlmIChjYXRlZ29yeT8uY291bnQgIT09IHVuZGVmaW5lZCkgcmV0dXJuIGNhdGVnb3J5LmNvdW50O1xuICAgIGNvbnN0IGNhY2hlS2V5ID0gYCR7c2xpY2VJbmRleH06JHtjYXRlZ29yeUtleX1gO1xuICAgIGlmICh0aGlzLl9jb3VudENhY2hlLmhhcyhjYWNoZUtleSkpIHtcbiAgICAgIHJldHVybiB0aGlzLl9jb3VudENhY2hlLmdldChjYWNoZUtleSkhO1xuICAgIH1cbiAgICBjb25zdCBjb3VudCA9IGNhdGVnb3J5ID8gKHRoaXMuZGF0YSB8fCBbXSkuZmlsdGVyKChyb3cpID0+IGNhdGVnb3J5LmZpbHRlciA/IGNhdGVnb3J5LmZpbHRlcihyb3cpIDogdHJ1ZSkubGVuZ3RoIDogMDtcbiAgICB0aGlzLl9jb3VudENhY2hlLnNldChjYWNoZUtleSwgY291bnQpO1xuICAgIHJldHVybiBjb3VudDtcbiAgfVxuXG4gIGlzU2xpY2VFbXB0eShzbGljZUluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBjb25zdCBzbGljZSA9IHRoaXMuX2NhY2hlZFNsaWNlc1tzbGljZUluZGV4XTtcbiAgICBpZiAoIXNsaWNlKSByZXR1cm4gdHJ1ZTtcbiAgICByZXR1cm4gKHNsaWNlLmNhdGVnb3JpZXMgfHwgW10pLmV2ZXJ5KGMgPT4gdGhpcy5zbGljZUNhdGVnb3J5Q291bnQoc2xpY2VJbmRleCwgYy5rZXkpID09PSAwKTtcbiAgfVxuXG4gIG9uU2xpY2VDYXRlZ29yeVNlbGVjdGVkKHNsaWNlSW5kZXg6IG51bWJlciwgY2F0ZWdvcnlLZXk6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHNsaWNlID0gdGhpcy5zbGljZXNbc2xpY2VJbmRleF07XG4gICAgaWYgKCFzbGljZSkgcmV0dXJuO1xuICAgIGlmICghdGhpcy5hY3RpdmVLZXlzQnlTbGljZS5oYXMoc2xpY2VJbmRleCkpIHtcbiAgICAgIHRoaXMuYWN0aXZlS2V5c0J5U2xpY2Uuc2V0KHNsaWNlSW5kZXgsIG5ldyBTZXQoKSk7XG4gICAgfVxuICAgIGNvbnN0IGFjdGl2ZUtleXMgPSB0aGlzLmFjdGl2ZUtleXNCeVNsaWNlLmdldChzbGljZUluZGV4KSE7XG4gICAgaWYgKHNsaWNlLm11bHRpU2VsZWN0ID09PSBmYWxzZSkge1xuICAgICAgaWYgKGFjdGl2ZUtleXMuaGFzKGNhdGVnb3J5S2V5KSkge1xuICAgICAgICBhY3RpdmVLZXlzLmNsZWFyKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhY3RpdmVLZXlzLmNsZWFyKCk7XG4gICAgICAgIGFjdGl2ZUtleXMuYWRkKGNhdGVnb3J5S2V5KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGFjdGl2ZUtleXMuaGFzKGNhdGVnb3J5S2V5KSkge1xuICAgICAgICBhY3RpdmVLZXlzLmRlbGV0ZShjYXRlZ29yeUtleSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhY3RpdmVLZXlzLmFkZChjYXRlZ29yeUtleSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuX2VtaXRGaWx0ZXIoKTtcbiAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBvblNsaWNlQWxsU2VsZWN0ZWQoc2xpY2VJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuYWN0aXZlS2V5c0J5U2xpY2UuaGFzKHNsaWNlSW5kZXgpKSB7XG4gICAgICB0aGlzLmFjdGl2ZUtleXNCeVNsaWNlLmdldChzbGljZUluZGV4KSEuY2xlYXIoKTtcbiAgICB9XG4gICAgdGhpcy5fZW1pdEZpbHRlcigpO1xuICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIGdldEFjdGl2ZUZpbHRlcnMoKTogU2xpY2VQYW5lbEZpbHRlcnMge1xuICAgIGNvbnN0IHJlc3VsdDogU2xpY2VQYW5lbEZpbHRlcnMgPSB7fTtcbiAgICB0aGlzLl9jYWNoZWRTbGljZXMuZm9yRWFjaCgoc2xpY2UsIGlkeCkgPT4ge1xuICAgICAgY29uc3Qga2V5cyA9IHRoaXMuYWN0aXZlS2V5c0J5U2xpY2UuZ2V0KGlkeCk7XG4gICAgICByZXN1bHRbdGhpcy5fZ2V0UGVyc2lzdGVudFNsaWNlS2V5KHNsaWNlLCBpZHgpXSA9IGtleXMgPyBbLi4ua2V5c10gOiBbXTtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcmVzdG9yZUZpbHRlcnMoZmlsdGVyczogU2xpY2VQYW5lbEZpbHRlcnMpOiB2b2lkIHtcbiAgICB0aGlzLmFjdGl2ZUtleXNCeVNsaWNlID0gbmV3IE1hcCgpO1xuICAgIHRoaXMuX2NhY2hlZFNsaWNlcy5mb3JFYWNoKChzbGljZSwgaW5kZXgpID0+IHtcbiAgICAgIC8vIExlcyBwcsOpZsOpcmVuY2VzIGhpc3RvcmlxdWVzIHV0aWxpc2FpZW50IGwnaW5kZXggbnVtw6lyaXF1ZSBjb21tZSBjbMOpLlxuICAgICAgY29uc3Qga2V5cyA9IGZpbHRlcnNbdGhpcy5fZ2V0UGVyc2lzdGVudFNsaWNlS2V5KHNsaWNlLCBpbmRleCldID8/IGZpbHRlcnNbU3RyaW5nKGluZGV4KV07XG4gICAgICBpZiAoa2V5cz8ubGVuZ3RoKSB0aGlzLmFjdGl2ZUtleXNCeVNsaWNlLnNldChpbmRleCwgbmV3IFNldChrZXlzKSk7XG4gICAgfSk7XG4gICAgdGhpcy5fZW1pdEZpbHRlcigpO1xuICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIGFkZER5bmFtaWNTbGljZShjb2x1bW46IFNsaWNlQ29sdW1uRGVmPFQ+KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2R5bmFtaWNTbGljZXMuc29tZShzbGljZSA9PiBzbGljZS5rZXkgPT09IGNvbHVtbi5rZXkpKSByZXR1cm47XG4gICAgY29uc3QgZGlzdGluY3QgPSB0aGlzLl9jb21wdXRlRGlzdGluY3RWYWx1ZXMoY29sdW1uLmtleSk7XG4gICAgY29uc3QgbmV3U2xpY2U6IFNsaWNlQ29uZmlnPFQ+ID0ge1xuICAgICAgdGl0bGU6IGNvbHVtbi5oZWFkZXIsXG4gICAgICBjb2x1bW5LZXk6IGNvbHVtbi5rZXksXG4gICAgICBjYXRlZ29yaWVzOiB0aGlzLl9idWlsZENhdGVnb3JpZXMoY29sdW1uLmtleSwgZGlzdGluY3QpLFxuICAgIH07XG4gICAgdGhpcy5fZHluYW1pY1NsaWNlcyA9IFsuLi50aGlzLl9keW5hbWljU2xpY2VzLCB7IGtleTogY29sdW1uLmtleSwgc2xpY2U6IG5ld1NsaWNlIH1dO1xuICAgIHRoaXMuX3JlYnVpbGRDYWNoZSgpO1xuICAgIHRoaXMuZHluYW1pY1NsaWNlS2V5c0NoYW5nZS5lbWl0KHRoaXMuX2R5bmFtaWNTbGljZXMubWFwKGQgPT4gZC5rZXkpKTtcbiAgICB0aGlzLl9lbWl0RmlsdGVyKCk7XG4gICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcmVtb3ZlRHluYW1pY1NsaWNlKHNsaWNlSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IGR5bmFtaWNJbmRleCA9IHNsaWNlSW5kZXggLSB0aGlzLnN0YXRpY1NsaWNlQ291bnQ7XG4gICAgaWYgKGR5bmFtaWNJbmRleCA8IDApIHJldHVybjtcbiAgICAvLyBMZXMgc8OpbGVjdGlvbnMgc29udCByYXBwcm9jaMOpZXMgZGVzIHNsaWNlcyByZXN0YW50cyBwYXIgaWRlbnRpdMOpIGRhbnMgX3JlYnVpbGRDYWNoZS5cbiAgICB0aGlzLl9keW5hbWljU2xpY2VzID0gdGhpcy5fZHluYW1pY1NsaWNlcy5maWx0ZXIoKF8sIGkpID0+IGkgIT09IGR5bmFtaWNJbmRleCk7XG4gICAgdGhpcy5fcmVidWlsZENhY2hlKCk7XG4gICAgdGhpcy5keW5hbWljU2xpY2VLZXlzQ2hhbmdlLmVtaXQodGhpcy5fZHluYW1pY1NsaWNlcy5tYXAoZCA9PiBkLmtleSkpO1xuICAgIHRoaXMuX2VtaXRGaWx0ZXIoKTtcbiAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICByZW1vdmVEeW5hbWljU2xpY2VCeUtleShrZXk6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGR5bmFtaWNJbmRleCA9IHRoaXMuX2R5bmFtaWNTbGljZXMuZmluZEluZGV4KChkKSA9PiBkLmtleSA9PT0ga2V5KTtcbiAgICBpZiAoZHluYW1pY0luZGV4IDwgMCkgcmV0dXJuO1xuICAgIGNvbnN0IHNsaWNlSW5kZXggPSB0aGlzLnN0YXRpY1NsaWNlQ291bnQgKyBkeW5hbWljSW5kZXg7XG4gICAgdGhpcy5yZW1vdmVEeW5hbWljU2xpY2Uoc2xpY2VJbmRleCk7XG4gIH1cblxuICBwcml2YXRlIF9lbWl0RmlsdGVyKCk6IHZvaWQge1xuICAgIGNvbnN0IHNsaWNlcyA9IHRoaXMuc2xpY2VzO1xuICAgIGNvbnN0IGFjdGl2ZUtleXNCeVNsaWNlID0gdGhpcy5hY3RpdmVLZXlzQnlTbGljZTtcblxuICAgIHRoaXMuYWN0aXZlS2V5c0NoYW5nZS5lbWl0KFxuICAgICAgc2xpY2VzLm1hcCgoXywgaSkgPT4ge1xuICAgICAgICBjb25zdCBrZXlzID0gYWN0aXZlS2V5c0J5U2xpY2UuZ2V0KGkpO1xuICAgICAgICByZXR1cm4ga2V5cyA/IFsuLi5rZXlzXSA6IFtdO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgY29uc3QgcHJlZCA9IChyb3c6IFQpOiBib29sZWFuID0+XG4gICAgICBzbGljZXMuZXZlcnkoKHNsaWNlLCBzbGljZUluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IGFjdGl2ZUtleXMgPSBhY3RpdmVLZXlzQnlTbGljZS5nZXQoc2xpY2VJbmRleCk7XG4gICAgICAgIGlmICghYWN0aXZlS2V5cyB8fCBhY3RpdmVLZXlzLnNpemUgPT09IDApIHJldHVybiB0cnVlO1xuICAgICAgICBpZiAoIXNsaWNlLmNhdGVnb3JpZXMgfHwgc2xpY2UuY2F0ZWdvcmllcy5sZW5ndGggPT09IDApIHJldHVybiB0cnVlO1xuICAgICAgICByZXR1cm4gWy4uLmFjdGl2ZUtleXNdLnNvbWUoKGtleSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGNhdGVnb3J5ID0gKHNsaWNlLmNhdGVnb3JpZXMgfHwgW10pLmZpbmQoKGMpID0+IGMua2V5ID09PSBrZXkpO1xuICAgICAgICAgIGlmICghY2F0ZWdvcnkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICBpZiAoIWNhdGVnb3J5Py5maWx0ZXIpIHJldHVybiB0cnVlO1xuICAgICAgICAgIHJldHVybiBjYXRlZ29yeS5maWx0ZXIocm93KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB0aGlzLmZpbHRlckNoYW5nZS5lbWl0KHByZWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0RHluYW1pY1NsaWNlQ29sdW1uS2V5KHNsaWNlSW5kZXg6IG51bWJlcik6IHN0cmluZyB8IG51bGwge1xuICAgIGNvbnN0IGR5bmFtaWNJbmRleCA9IHNsaWNlSW5kZXggLSB0aGlzLnN0YXRpY1NsaWNlQ291bnQ7XG4gICAgcmV0dXJuIHRoaXMuX2R5bmFtaWNTbGljZXNbZHluYW1pY0luZGV4XT8ua2V5ID8/IG51bGw7XG4gIH1cblxuICBwcml2YXRlIF9nZXRQZXJzaXN0ZW50U2xpY2VLZXkoc2xpY2U6IFNsaWNlQ29uZmlnPFQ+LCBpbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gc2xpY2UuY29sdW1uS2V5ID8gYGNvbHVtbjoke3NsaWNlLmNvbHVtbktleX1gIDogYGluZGV4OiR7aW5kZXh9YDtcbiAgfVxuXG4gIHByaXZhdGUgX2dldFNsaWNlSWRlbnRpdHkoc2xpY2U6IFNsaWNlQ29uZmlnPFQ+LCBmYWxsYmFja0luZGV4OiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGlmIChzbGljZS5jb2x1bW5LZXkpIHJldHVybiBgY29sdW1uOiR7c2xpY2UuY29sdW1uS2V5fWA7XG4gICAgaWYgKHNsaWNlLnRpdGxlKSByZXR1cm4gYHRpdGxlOiR7c2xpY2UudGl0bGV9YDtcbiAgICBjb25zdCBjYXRlZ29yeUtleXMgPSAoc2xpY2UuY2F0ZWdvcmllcyB8fCBbXSkubWFwKChjKSA9PiBjLmtleSkuam9pbignfCcpO1xuICAgIHJldHVybiBgaW5kZXg6JHtmYWxsYmFja0luZGV4fXxjYXRlZ29yaWVzOiR7Y2F0ZWdvcnlLZXlzfWA7XG4gIH1cblxuICBwcml2YXRlIF9tYXRlcmlhbGl6ZVNsaWNlKHNsaWNlOiBTbGljZUNvbmZpZzxUPik6IFNsaWNlQ29uZmlnPFQ+IHtcbiAgICBpZiAoIXNsaWNlLmNvbHVtbktleSB8fCAoc2xpY2UuY2F0ZWdvcmllcyAmJiBzbGljZS5jYXRlZ29yaWVzLmxlbmd0aCA+IDApKSB7XG4gICAgICByZXR1cm4gc2xpY2U7XG4gICAgfVxuICAgIGNvbnN0IGNvbCA9IHRoaXMuX2NvbHVtbihzbGljZS5jb2x1bW5LZXkpO1xuICAgIGNvbnN0IGlzTGF6eSA9ICEhY29sPy5sYXp5O1xuICAgIGlmIChpc0xhenkgJiYgdGhpcy5sYXp5U3RhdHVzLmdldChzbGljZS5jb2x1bW5LZXkhKSAhPT0gJ2xvYWRlZCcpIHtcbiAgICAgIHJldHVybiB7IC4uLnNsaWNlLCBjYXRlZ29yaWVzOiBbXSB9O1xuICAgIH1cbiAgICBpZiAoc2xpY2UuYnVja2V0KSB7XG4gICAgICBjb25zdCBidWNrZXQgPSBzbGljZS5idWNrZXQ7XG4gICAgICBjb25zdCBjb3VudHMgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuICAgICAgKHRoaXMuZGF0YSB8fCBbXSkuZm9yRWFjaChyb3cgPT4geyBjb25zdCB2ID0gYnVja2V0KHJvdyk7IGNvdW50cy5zZXQodiwgKGNvdW50cy5nZXQodikgPz8gMCkgKyAxKTsgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zbGljZSxcbiAgICAgICAgY2F0ZWdvcmllczogWy4uLmNvdW50cy5rZXlzKCldLnNvcnQoKS5tYXAoKHYpID0+ICh7XG4gICAgICAgICAga2V5OiB2LCBsYWJlbDogdiwgY291bnQ6IGNvdW50cy5nZXQodiksXG4gICAgICAgICAgZmlsdGVyOiAocm93OiBUKSA9PiBidWNrZXQocm93KSA9PT0gdixcbiAgICAgICAgfSkpLFxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnNsaWNlLFxuICAgICAgY2F0ZWdvcmllczogdGhpcy5fYnVpbGRDYXRlZ29yaWVzKHNsaWNlLmNvbHVtbktleSEsIHRoaXMuX2NvbXB1dGVEaXN0aW5jdFZhbHVlcyhzbGljZS5jb2x1bW5LZXkhKSksXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgX2J1aWxkQ2F0ZWdvcmllcyhjb2x1bW5LZXk6IHN0cmluZywgZGlzdGluY3Q6IHsgdmFsdWVzOiBzdHJpbmdbXTsgY291bnRzOiBNYXA8c3RyaW5nLCBudW1iZXI+IH0pIHtcbiAgICByZXR1cm4gZGlzdGluY3QudmFsdWVzLm1hcCgodikgPT4gdGhpcy5fYnVpbGRDYXRlZ29yeUZyb21WYWx1ZShjb2x1bW5LZXksIHYsIGRpc3RpbmN0LmNvdW50cy5nZXQodikpKTtcbiAgfVxuXG4gIHByaXZhdGUgX2J1aWxkQ2F0ZWdvcnlGcm9tVmFsdWUoY29sdW1uS2V5OiBzdHJpbmcsIHY6IHN0cmluZywgY291bnQ/OiBudW1iZXIpOiB7IGtleTogc3RyaW5nOyBsYWJlbDogc3RyaW5nOyBmaWx0ZXI6IChyb3c6IFQpID0+IGJvb2xlYW47IGNvdW50PzogbnVtYmVyIH0ge1xuICAgIGlmICh2ID09PSBFTVBUWV9DQVRFR09SWV9LRVkpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGtleTogRU1QVFlfQ0FURUdPUllfS0VZLFxuICAgICAgICBsYWJlbDogRU1QVFlfQ0FURUdPUllfTEFCRUwsXG4gICAgICAgIGNvdW50LFxuICAgICAgICBmaWx0ZXI6IChyb3c6IFQpID0+IHtcbiAgICAgICAgICBjb25zdCB2YWwgPSB0aGlzLl9nZXRMYXp5QXdhcmVWYWx1ZShjb2x1bW5LZXksIHJvdyk7XG4gICAgICAgICAgcmV0dXJuIHZhbCA9PSBudWxsIHx8IHZhbCA9PT0gJyc7XG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAga2V5OiB2LCBsYWJlbDogdiwgY291bnQsXG4gICAgICBmaWx0ZXI6IChyb3c6IFQpID0+IFN0cmluZyh0aGlzLl9nZXRMYXp5QXdhcmVWYWx1ZShjb2x1bW5LZXksIHJvdykgPz8gJycpID09PSB2LFxuICAgIH07XG4gIH1cblxuICAvKiogVmFsZXVycyBkaXN0aW5jdGVzICh0cmnDqWVzLCDCqyB2aWRlIMK7IGVuIGRlcm5pZXIpIGV0IGVmZmVjdGlmcywgY2FsY3Vsw6lzIGVuIHVuIHNldWwgcGFzc2FnZS4gKi9cbiAgcHJpdmF0ZSBfY29tcHV0ZURpc3RpbmN0VmFsdWVzKGNvbHVtbktleTogc3RyaW5nKTogeyB2YWx1ZXM6IHN0cmluZ1tdOyBjb3VudHM6IE1hcDxzdHJpbmcsIG51bWJlcj4gfSB7XG4gICAgY29uc3QgY291bnRzID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcbiAgICBsZXQgZW1wdHkgPSAwO1xuICAgICh0aGlzLmRhdGEgfHwgW10pLmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgY29uc3QgdmFsID0gdGhpcy5fZ2V0TGF6eUF3YXJlVmFsdWUoY29sdW1uS2V5LCByb3cpO1xuICAgICAgaWYgKHZhbCAhPSBudWxsICYmIHZhbCAhPT0gJycpIHtcbiAgICAgICAgY29uc3QgdGV4dCA9IFN0cmluZyh2YWwpO1xuICAgICAgICBjb3VudHMuc2V0KHRleHQsIChjb3VudHMuZ2V0KHRleHQpID8/IDApICsgMSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbXB0eSsrO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IHZhbHVlcyA9IFsuLi5jb3VudHMua2V5cygpXS5zb3J0KCk7XG4gICAgaWYgKGVtcHR5ID4gMCkge1xuICAgICAgdmFsdWVzLnB1c2goRU1QVFlfQ0FURUdPUllfS0VZKTtcbiAgICAgIGNvdW50cy5zZXQoRU1QVFlfQ0FURUdPUllfS0VZLCBlbXB0eSk7XG4gICAgfVxuICAgIHJldHVybiB7IHZhbHVlcywgY291bnRzIH07XG4gIH1cblxuICBwcml2YXRlIF9jb2x1bW5zUmVmPzogU2xpY2VDb2x1bW5EZWY8VD5bXTtcbiAgcHJpdmF0ZSBfY29sdW1uSW5kZXggPSBuZXcgTWFwPHN0cmluZywgU2xpY2VDb2x1bW5EZWY8VD4+KCk7XG5cbiAgcHJpdmF0ZSBfY29sdW1uKGtleTogc3RyaW5nIHwgdW5kZWZpbmVkKTogU2xpY2VDb2x1bW5EZWY8VD4gfCB1bmRlZmluZWQge1xuICAgIGlmICh0aGlzLl9jb2x1bW5zUmVmICE9PSB0aGlzLmNvbHVtbnMpIHtcbiAgICAgIHRoaXMuX2NvbHVtbnNSZWYgPSB0aGlzLmNvbHVtbnM7XG4gICAgICB0aGlzLl9jb2x1bW5JbmRleCA9IG5ldyBNYXAoKTtcbiAgICAgICh0aGlzLmNvbHVtbnMgfHwgW10pLmZvckVhY2goYyA9PiB7IGlmICghdGhpcy5fY29sdW1uSW5kZXguaGFzKGMua2V5KSkgdGhpcy5fY29sdW1uSW5kZXguc2V0KGMua2V5LCBjKTsgfSk7XG4gICAgfVxuICAgIHJldHVybiBrZXkgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHRoaXMuX2NvbHVtbkluZGV4LmdldChrZXkpO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0TGF6eUF3YXJlVmFsdWUoY29sdW1uS2V5OiBzdHJpbmcsIHJvdzogVCk6IGFueSB7XG4gICAgY29uc3QgY29sRGVmID0gdGhpcy5fY29sdW1uKGNvbHVtbktleSk7XG4gICAgaWYgKGNvbERlZj8ubGF6eSAmJiB0aGlzLmxhenlTdGF0dXMuZ2V0KGNvbHVtbktleSkgIT09ICdsb2FkZWQnKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKGNvbERlZj8udmFsdWUpIHtcbiAgICAgIHJldHVybiAoY29sRGVmLnZhbHVlIGFzIGFueSkocm93LCAwKTtcbiAgICB9XG4gICAgcmV0dXJuIChyb3cgYXMgYW55KVtjb2x1bW5LZXldO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVidWlsZENhY2hlKCk6IHZvaWQge1xuICAgIGNvbnN0IHByZXZpb3VzU2xpY2VzID0gdGhpcy5fY2FjaGVkU2xpY2VzO1xuICAgIGNvbnN0IHByZXZpb3VzQWN0aXZlS2V5cyA9IHRoaXMuYWN0aXZlS2V5c0J5U2xpY2U7XG4gICAgY29uc3QgYWxsU2xpY2VzID0gWy4uLih0aGlzLnNsaWNlQ29uZmlncyB8fCBbXSksIC4uLnRoaXMuX2R5bmFtaWNTbGljZXMubWFwKChkKSA9PiBkLnNsaWNlKV07XG4gICAgdGhpcy5fY2FjaGVkU2xpY2VzID0gYWxsU2xpY2VzLm1hcCgoc2xpY2UpID0+IHRoaXMuX21hdGVyaWFsaXplU2xpY2Uoc2xpY2UpKTtcblxuICAgIGNvbnN0IHByZXZpb3VzS2V5c0J5SWRlbnRpdHkgPSBuZXcgTWFwPHN0cmluZywgU2V0PHN0cmluZz4+KCk7XG4gICAgcHJldmlvdXNTbGljZXMuZm9yRWFjaCgoc2xpY2UsIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBhY3RpdmVLZXlzID0gcHJldmlvdXNBY3RpdmVLZXlzLmdldChpbmRleCk7XG4gICAgICBpZiAoIWFjdGl2ZUtleXMgfHwgYWN0aXZlS2V5cy5zaXplID09PSAwKSByZXR1cm47XG4gICAgICBwcmV2aW91c0tleXNCeUlkZW50aXR5LnNldCh0aGlzLl9nZXRTbGljZUlkZW50aXR5KHNsaWNlLCBpbmRleCksIG5ldyBTZXQoYWN0aXZlS2V5cykpO1xuICAgIH0pO1xuXG4gICAgY29uc3QgbmV4dEFjdGl2ZUtleXMgPSBuZXcgTWFwPG51bWJlciwgU2V0PHN0cmluZz4+KCk7XG4gICAgdGhpcy5fY2FjaGVkU2xpY2VzLmZvckVhY2goKHNsaWNlLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgcHJldmlvdXNLZXlzID0gcHJldmlvdXNLZXlzQnlJZGVudGl0eS5nZXQodGhpcy5fZ2V0U2xpY2VJZGVudGl0eShzbGljZSwgaW5kZXgpKTtcbiAgICAgIGlmICghcHJldmlvdXNLZXlzIHx8IHByZXZpb3VzS2V5cy5zaXplID09PSAwKSByZXR1cm47XG4gICAgICBjb25zdCBhdmFpbGFibGVLZXlzID0gbmV3IFNldCgoc2xpY2UuY2F0ZWdvcmllcyB8fCBbXSkubWFwKChjKSA9PiBjLmtleSkpO1xuICAgICAgY29uc3QgbWF0Y2hpbmdLZXlzID0gWy4uLnByZXZpb3VzS2V5c10uZmlsdGVyKChrZXkpID0+IGF2YWlsYWJsZUtleXMuaGFzKGtleSkpO1xuICAgICAgaWYgKG1hdGNoaW5nS2V5cy5sZW5ndGggPiAwKSBuZXh0QWN0aXZlS2V5cy5zZXQoaW5kZXgsIG5ldyBTZXQobWF0Y2hpbmdLZXlzKSk7XG4gICAgfSk7XG4gICAgdGhpcy5hY3RpdmVLZXlzQnlTbGljZSA9IG5leHRBY3RpdmVLZXlzO1xuICAgIHRoaXMuX2NvdW50Q2FjaGUuY2xlYXIoKTtcbiAgfVxuXG4gIHByaXZhdGUgX3JlZnJlc2hEeW5hbWljU2xpY2VzKCk6IHZvaWQge1xuICAgIHRoaXMuX2R5bmFtaWNTbGljZXMgPSB0aGlzLl9keW5hbWljU2xpY2VzLm1hcCgoeyBrZXksIHNsaWNlIH0pID0+ICh7XG4gICAgICBrZXksXG4gICAgICBzbGljZTogeyAuLi5zbGljZSwgY2F0ZWdvcmllczogdGhpcy5fYnVpbGRDYXRlZ29yaWVzKGtleSwgdGhpcy5fY29tcHV0ZURpc3RpbmN0VmFsdWVzKGtleSkpIH0sXG4gICAgfSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2Nyb2xsU2xpY2VUaXRsZUludG9WaWV3KHNsaWNlSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc3QgYm9keSA9IHRoaXMuc2xpY2VQYW5lbEJvZHlSZWY/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICBpZiAoIWJvZHkpIHJldHVybjtcbiAgICAgIGNvbnN0IGVsID0gYm9keS5xdWVyeVNlbGVjdG9yKGBbZGF0YS1zbGljZS1pbmRleD1cIiR7c2xpY2VJbmRleH1cIl1gKSBhcyBIVE1MRWxlbWVudCB8IG51bGw7XG4gICAgICBlbD8uc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogJ3Ntb290aCcsIGJsb2NrOiAnbmVhcmVzdCcgfSk7XG4gICAgfSwgNTApO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwic2xpY2UtcGFuZWwtd3JhcHBlclwiIFtjbGFzcy5jb2xsYXBzZWRdPVwiaXNDb2xsYXBzZWRcIj5cbiAgPGFzaWRlIGNsYXNzPVwic2xpY2UtcGFuZWxcIiBbY2xhc3MuY29sbGFwc2VkXT1cImlzQ29sbGFwc2VkXCI+XG4gICAgPGRpdiBjbGFzcz1cInNsaWNlLXBhbmVsLWhlYWRlclwiPlxuICAgICAgPHNwYW4gKm5nSWY9XCIhaXNDb2xsYXBzZWRcIiBjbGFzcz1cInNsaWNlLXBhbmVsLXRpdGxlXCI+XG4gICAgICAgIHt7IGkxOG4uZmlsdGVyUGFuZWxUaXRsZShzbGljZXMubGVuZ3RoKSB9fVxuICAgICAgPC9zcGFuPlxuICAgICAgPGJ1dHRvblxuICAgICAgICAqbmdJZj1cInNob3dUb2dnbGVcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3M9XCJzbGljZS10b2dnbGVcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImlzQ29sbGFwc2VkID8gaTE4bi5leHBhbmRGaWx0ZXJUaXRsZSA6IGkxOG4uY29sbGFwc2VGaWx0ZXJUaXRsZVwiXG4gICAgICAgIChjbGljayk9XCJ0b2dnbGVQYW5lbCgpXCJcbiAgICAgID5cbiAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwic2xpY2UtdG9nZ2xlLW1hdC1pY29uXCI+e3sgaXNDb2xsYXBzZWQgPyAnZmlsdGVyX2xpc3QnIDogJ2ZpbHRlcl9saXN0X29mZicgfX08L21hdC1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwic2xpY2UtcGFuZWwtYm9keVwiICpuZ0lmPVwiIWlzQ29sbGFwc2VkXCIgI3NsaWNlUGFuZWxCb2R5PlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgc2xpY2Ugb2Ygc2xpY2VzOyBsZXQgc2kgPSBpbmRleDsgdHJhY2tCeTogdHJhY2tCeVNsaWNlSW5kZXhcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNsaWNlLXRpdGxlLXJvd1wiIFthdHRyLmRhdGEtc2xpY2UtaW5kZXhdPVwic2lcIj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIGNsYXNzPVwic2xpY2UtdGl0bGUtdG9nZ2xlXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtY29udHJvbHNdPVwiJ3NsaWNlLXNlY3Rpb24tJyArIHNpXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwiIWlzU2xpY2VDb2xsYXBzZWQoc2kpXCJcbiAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVTbGljZUNvbGxhcHNlKHNpKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzbGljZS10aXRsZS1jaGV2cm9uXCIgW2NsYXNzLmV4cGFuZGVkXT1cIiFpc1NsaWNlQ29sbGFwc2VkKHNpKVwiPuKAujwvc3Bhbj5cbiAgICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cImdldFNsaWNlSWNvbihzbGljZSlcIiBjbGFzcz1cInNsaWNlLXRpdGxlLWljb25cIj57eyBnZXRTbGljZUljb24oc2xpY2UpIH19PC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2xpY2UtdGl0bGVcIj57eyBzbGljZS50aXRsZSB8fCBpMThuLmZpbHRlckJsb2NrRGVmYXVsdFRpdGxlIH19PC9zcGFuPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICpuZ0lmPVwiaXNTbGljZUR5bmFtaWMoc2kpXCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgY2xhc3M9XCJzbGljZS1yZW1vdmUtYnRuXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ1N1cHByaW1lciBsZSBmaWx0cmUgJyArIChzbGljZS50aXRsZSB8fCBpMThuLmZpbHRlckJsb2NrRGVmYXVsdFRpdGxlKVwiXG4gICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlRHluYW1pY1NsaWNlKHNpKVwiXG4gICAgICAgICAgPsOXPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgW2lkXT1cIidzbGljZS1zZWN0aW9uLScgKyBzaVwiIGNsYXNzPVwic2xpY2Utc2VjdGlvbi1pdGVtc1wiICpuZ0lmPVwiIWlzU2xpY2VDb2xsYXBzZWQoc2kpXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzU2xpY2VMb2FkaW5nKHNpKTsgZWxzZSBzbGljZUNvbnRlbnRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzbGljZS1sYXp5LWxvYWRpbmdcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYXp5LXNrZWxldG9uXCI+PC9zcGFuPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhenktc2tlbGV0b25cIj48L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGF6eS1za2VsZXRvblwiPjwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjc2xpY2VDb250ZW50PlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY2F0ZWdvcnkgb2Ygc2xpY2UuY2F0ZWdvcmllczsgdHJhY2tCeTogdHJhY2tCeUNhdGVnb3J5S2V5XCI+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAqbmdJZj1cInNsaWNlQ2F0ZWdvcnlDb3VudChzaSwgY2F0ZWdvcnkua2V5KSA+IDBcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwic2xpY2UtaXRlbVwiXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJpc1NsaWNlQ2F0ZWdvcnlBY3RpdmUoc2ksIGNhdGVnb3J5LmtleSlcIlxuICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtY2F0ZWdvcnkta2V5XT1cImNhdGVnb3J5LmtleVwiXG4gICAgICAgICAgICAgICAgW3RpdGxlXT1cImNhdGVnb3J5LmxhYmVsXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib25TbGljZUNhdGVnb3J5U2VsZWN0ZWQoc2ksIGNhdGVnb3J5LmtleSlcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHNwYW4+e3sgY2F0ZWdvcnkubGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzaG93Q291bnRzXCI+e3sgc2xpY2VDYXRlZ29yeUNvdW50KHNpLCBjYXRlZ29yeS5rZXkpIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzU2xpY2VFbXB0eShzaSlcIiBjbGFzcz1cInNsaWNlLWVtcHR5LXN0YXRlXCI+e3sgaTE4bi5maWx0ZXJFbXB0eVN0YXRlIH19PC9kaXY+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGhyICpuZ0lmPVwic2kgPCBzbGljZXMubGVuZ3RoIC0gMVwiIGNsYXNzPVwic2xpY2UtZGl2aWRlclwiIC8+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgPC9hc2lkZT5cbjwvZGl2PlxuIl19
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpY2UtcGFuZWwubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vbmV0ZW1lL2pxdWVyeS1vcmdhbml6ZXIvc3JjL2xpYi9zbGljZS1wYW5lbC9zbGljZS1wYW5lbC5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGF0YVByb3ZpZGVyIH0gZnJvbSAnQG9uZXRlbWUvanF1ZXJ5LWNvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNsaWNlQ2F0ZWdvcnk8VCA9IGFueT4ge1xuICBrZXk6IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZztcbiAgZmlsdGVyPzogKHJvdzogVCkgPT4gYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTbGljZUNvbmZpZzxUID0gYW55PiB7XG4gIHRpdGxlPzogc3RyaW5nO1xuICBpY29uPzogc3RyaW5nO1xuICBtdWx0aVNlbGVjdD86IGJvb2xlYW47XG4gIGNvbHVtbktleT86IHN0cmluZztcbiAgaGlkZGVuPzogYm9vbGVhbjtcbiAgYnVja2V0PzogKHJvdzogVCkgPT4gc3RyaW5nO1xuICBjYXRlZ29yaWVzPzogU2xpY2VDYXRlZ29yeTxUPltdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNsaWNlQ29sdW1uRGVmPFQgPSBhbnk+IHtcbiAga2V5OiBzdHJpbmc7XG4gIGhlYWRlcj86IHN0cmluZztcbiAgaWNvbj86IHN0cmluZztcbiAgdmFsdWU/OiBEYXRhUHJvdmlkZXI8YW55PjtcbiAgbGF6eT86IHtcbiAgICBmZXRjaEZuOiAoKSA9PiBPYnNlcnZhYmxlPGFueVtdPjtcbiAgfTtcbn1cbiJdfQ==
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpY2UtcGFuZWwubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vbmV0ZW1lL2pxdWVyeS1vcmdhbml6ZXIvc3JjL2xpYi9zbGljZS1wYW5lbC9zbGljZS1wYW5lbC5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGF0YVByb3ZpZGVyIH0gZnJvbSAnQG9uZXRlbWUvanF1ZXJ5LWNvcmUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNsaWNlQ2F0ZWdvcnk8VCA9IGFueT4ge1xuICBrZXk6IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZztcbiAgZmlsdGVyPzogKHJvdzogVCkgPT4gYm9vbGVhbjtcbiAgLyoqIEVmZmVjdGlmIHByw6ljYWxjdWzDqSAocmVtcGxpIHBhciBsZSBwYW5uZWF1IHBvdXIgbGVzIGNhdMOpZ29yaWVzIGTDqXJpdsOpZXMgZCd1bmUgY29sb25uZSkuICovXG4gIGNvdW50PzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNsaWNlQ29uZmlnPFQgPSBhbnk+IHtcbiAgdGl0bGU/OiBzdHJpbmc7XG4gIGljb24/OiBzdHJpbmc7XG4gIG11bHRpU2VsZWN0PzogYm9vbGVhbjtcbiAgY29sdW1uS2V5Pzogc3RyaW5nO1xuICBoaWRkZW4/OiBib29sZWFuO1xuICBidWNrZXQ/OiAocm93OiBUKSA9PiBzdHJpbmc7XG4gIGNhdGVnb3JpZXM/OiBTbGljZUNhdGVnb3J5PFQ+W107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2xpY2VDb2x1bW5EZWY8VCA9IGFueT4ge1xuICBrZXk6IHN0cmluZztcbiAgaGVhZGVyPzogc3RyaW5nO1xuICBpY29uPzogc3RyaW5nO1xuICB2YWx1ZT86IERhdGFQcm92aWRlcjxhbnk+O1xuICAvKiogQ29sb25uZSBhYnNlbnRlIGRlIGxhIHJlcXXDqnRlIGRlIGJhc2UgOiBzZXMgdmFsZXVycyBzb250IGRhbnMgbGVzIGxpZ25lcyB1bmUgZm9pcyBjaGFyZ8OpZSAoYGxhenlTdGF0dXNgKS4gKi9cbiAgbGF6eT86IHRydWU7XG59XG4iXX0=
@@ -4,9 +4,9 @@ export * from './lib/slice-panel/slice-panel.component';
4
4
  export * from './lib/slice-panel/slice-panel.model';
5
5
  export * from './lib/models/organizer-config.interface';
6
6
  export * from './lib/models/organizer-menu.model';
7
+ export { OrganizerButtonEventType } from './lib/models/organizer-chart-config';
7
8
  export { buildYFields, resolveYKey } from './lib/models/organizer-utils';
8
9
  export { buildOrganizerChartBinding, chartConfigToOrganizer, chartConfigToState, chartConfigToUnifiedState, applyOrganizerEventToChart, handleOrganizerChartEvent, resolveYUnit, } from './lib/models/organizer-chart-adapter';
9
10
  export { OrganizerFacade, humanizeKey } from './lib/organizer-facade/organizer-facade';
10
11
  export { GroupByManager } from './lib/group-by-manager/group-by-manager';
11
- export { LazyFieldManager, LAZY_FIELD_LOADING_VALUE, LAZY_FIELD_ERROR_VALUE, } from './lib/lazy-field-manager/lazy-field-manager';
12
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL29uZXRlbWUvanF1ZXJ5LW9yZ2FuaXplci9zcmMvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG1EQUFtRCxDQUFDO0FBQ2xFLGNBQWMsZ0RBQWdELENBQUM7QUFDL0QsY0FBYyx5Q0FBeUMsQ0FBQztBQUN4RCxjQUFjLHFDQUFxQyxDQUFDO0FBQ3BELGNBQWMseUNBQXlDLENBQUM7QUFDeEQsY0FBYyxtQ0FBbUMsQ0FBQztBQUVsRCxPQUFPLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBdUIsTUFBTSw4QkFBOEIsQ0FBQztBQUU5RixPQUFPLEVBQ0wsMEJBQTBCLEVBQzFCLHNCQUFzQixFQUN0QixrQkFBa0IsRUFDbEIseUJBQXlCLEVBQ3pCLDBCQUEwQixFQUMxQix5QkFBeUIsRUFDekIsWUFBWSxHQU9iLE1BQU0sc0NBQXNDLENBQUM7QUFFOUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQVN2RixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFFekUsT0FBTyxFQUNMLGdCQUFnQixFQUdoQix3QkFBd0IsRUFDeEIsc0JBQXNCLEdBQ3ZCLE1BQU0sNkNBQTZDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2xpYi9vcmdhbml6ZXItYnV0dG9uL29yZ2FuaXplci1idXR0b24uY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL29yZ2FuaXplci1idXR0b24vb3JnYW5pemVyLWJ1dHRvbi5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2xpY2UtcGFuZWwvc2xpY2UtcGFuZWwuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NsaWNlLXBhbmVsL3NsaWNlLXBhbmVsLm1vZGVsJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZGVscy9vcmdhbml6ZXItY29uZmlnLmludGVyZmFjZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2RlbHMvb3JnYW5pemVyLW1lbnUubW9kZWwnO1xuXG5leHBvcnQgeyBidWlsZFlGaWVsZHMsIHJlc29sdmVZS2V5LCBPcmdhbml6ZXJZSW5kaWNhdG9yIH0gZnJvbSAnLi9saWIvbW9kZWxzL29yZ2FuaXplci11dGlscyc7XG5cbmV4cG9ydCB7XG4gIGJ1aWxkT3JnYW5pemVyQ2hhcnRCaW5kaW5nLFxuICBjaGFydENvbmZpZ1RvT3JnYW5pemVyLFxuICBjaGFydENvbmZpZ1RvU3RhdGUsXG4gIGNoYXJ0Q29uZmlnVG9VbmlmaWVkU3RhdGUsXG4gIGFwcGx5T3JnYW5pemVyRXZlbnRUb0NoYXJ0LFxuICBoYW5kbGVPcmdhbml6ZXJDaGFydEV2ZW50LFxuICByZXNvbHZlWVVuaXQsXG4gIE9yZ2FuaXplckNoYXJ0SXRlbSxcbiAgT3JnYW5pemVyQ2hhcnRTZWN0aW9uLFxuICBPcmdhbml6ZXJDaGFydENvbmZpZyxcbiAgT3JnYW5pemVyQ2hhcnRCcmlkZ2VPcHRpb25zLFxuICBPcmdhbml6ZXJDaGFydEJpbmRpbmcsXG4gIE9yZ2FuaXplckNoYXJ0RXZlbnRSZXN1bHQsXG59IGZyb20gJy4vbGliL21vZGVscy9vcmdhbml6ZXItY2hhcnQtYWRhcHRlcic7XG5cbmV4cG9ydCB7IE9yZ2FuaXplckZhY2FkZSwgaHVtYW5pemVLZXkgfSBmcm9tICcuL2xpYi9vcmdhbml6ZXItZmFjYWRlL29yZ2FuaXplci1mYWNhZGUnO1xuZXhwb3J0IHtcbiAgT3JnYW5pemVyRmllbGREZWYsXG4gIE9yZ2FuaXplclBhbmVsQ29uZmlnLFxuICBPcmdhbml6ZXJGaWVsZHNTdGF0ZSxcbiAgT3JnYW5pemVyR3JvdXBCeVN0YXRlLFxuICBPcmdhbml6ZXJTbGljZUJ5U3RhdGUsXG59IGZyb20gJy4vbGliL29yZ2FuaXplci1mYWNhZGUvb3JnYW5pemVyLWZhY2FkZS50eXBlcyc7XG5cbmV4cG9ydCB7IEdyb3VwQnlNYW5hZ2VyIH0gZnJvbSAnLi9saWIvZ3JvdXAtYnktbWFuYWdlci9ncm91cC1ieS1tYW5hZ2VyJztcblxuZXhwb3J0IHtcbiAgTGF6eUZpZWxkTWFuYWdlcixcbiAgTGF6eUZpZWxkRGVmLFxuICBMYXp5RmllbGRDYWxsYmFja3MsXG4gIExBWllfRklFTERfTE9BRElOR19WQUxVRSxcbiAgTEFaWV9GSUVMRF9FUlJPUl9WQUxVRSxcbn0gZnJvbSAnLi9saWIvbGF6eS1maWVsZC1tYW5hZ2VyL2xhenktZmllbGQtbWFuYWdlcic7XG4iXX0=
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL29uZXRlbWUvanF1ZXJ5LW9yZ2FuaXplci9zcmMvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLG1EQUFtRCxDQUFDO0FBQ2xFLGNBQWMsZ0RBQWdELENBQUM7QUFDL0QsY0FBYyx5Q0FBeUMsQ0FBQztBQUN4RCxjQUFjLHFDQUFxQyxDQUFDO0FBQ3BELGNBQWMseUNBQXlDLENBQUM7QUFDeEQsY0FBYyxtQ0FBbUMsQ0FBQztBQUNsRCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUUvRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBdUIsTUFBTSw4QkFBOEIsQ0FBQztBQUU5RixPQUFPLEVBQ0wsMEJBQTBCLEVBQzFCLHNCQUFzQixFQUN0QixrQkFBa0IsRUFDbEIseUJBQXlCLEVBQ3pCLDBCQUEwQixFQUMxQix5QkFBeUIsRUFDekIsWUFBWSxHQU9iLE1BQU0sc0NBQXNDLENBQUM7QUFFOUMsT0FBTyxFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQVN2RixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUNBQXlDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2xpYi9vcmdhbml6ZXItYnV0dG9uL29yZ2FuaXplci1idXR0b24uY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL29yZ2FuaXplci1idXR0b24vb3JnYW5pemVyLWJ1dHRvbi5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc2xpY2UtcGFuZWwvc2xpY2UtcGFuZWwuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NsaWNlLXBhbmVsL3NsaWNlLXBhbmVsLm1vZGVsJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZGVscy9vcmdhbml6ZXItY29uZmlnLmludGVyZmFjZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2RlbHMvb3JnYW5pemVyLW1lbnUubW9kZWwnO1xuZXhwb3J0IHsgT3JnYW5pemVyQnV0dG9uRXZlbnRUeXBlIH0gZnJvbSAnLi9saWIvbW9kZWxzL29yZ2FuaXplci1jaGFydC1jb25maWcnO1xuXG5leHBvcnQgeyBidWlsZFlGaWVsZHMsIHJlc29sdmVZS2V5LCBPcmdhbml6ZXJZSW5kaWNhdG9yIH0gZnJvbSAnLi9saWIvbW9kZWxzL29yZ2FuaXplci11dGlscyc7XG5cbmV4cG9ydCB7XG4gIGJ1aWxkT3JnYW5pemVyQ2hhcnRCaW5kaW5nLFxuICBjaGFydENvbmZpZ1RvT3JnYW5pemVyLFxuICBjaGFydENvbmZpZ1RvU3RhdGUsXG4gIGNoYXJ0Q29uZmlnVG9VbmlmaWVkU3RhdGUsXG4gIGFwcGx5T3JnYW5pemVyRXZlbnRUb0NoYXJ0LFxuICBoYW5kbGVPcmdhbml6ZXJDaGFydEV2ZW50LFxuICByZXNvbHZlWVVuaXQsXG4gIE9yZ2FuaXplckNoYXJ0SXRlbSxcbiAgT3JnYW5pemVyQ2hhcnRTZWN0aW9uLFxuICBPcmdhbml6ZXJDaGFydENvbmZpZyxcbiAgT3JnYW5pemVyQ2hhcnRCcmlkZ2VPcHRpb25zLFxuICBPcmdhbml6ZXJDaGFydEJpbmRpbmcsXG4gIE9yZ2FuaXplckNoYXJ0RXZlbnRSZXN1bHQsXG59IGZyb20gJy4vbGliL21vZGVscy9vcmdhbml6ZXItY2hhcnQtYWRhcHRlcic7XG5cbmV4cG9ydCB7IE9yZ2FuaXplckZhY2FkZSwgaHVtYW5pemVLZXkgfSBmcm9tICcuL2xpYi9vcmdhbml6ZXItZmFjYWRlL29yZ2FuaXplci1mYWNhZGUnO1xuZXhwb3J0IHtcbiAgT3JnYW5pemVyRmllbGREZWYsXG4gIE9yZ2FuaXplclBhbmVsQ29uZmlnLFxuICBPcmdhbml6ZXJGaWVsZHNTdGF0ZSxcbiAgT3JnYW5pemVyR3JvdXBCeVN0YXRlLFxuICBPcmdhbml6ZXJTbGljZUJ5U3RhdGUsXG59IGZyb20gJy4vbGliL29yZ2FuaXplci1mYWNhZGUvb3JnYW5pemVyLWZhY2FkZS50eXBlcyc7XG5cbmV4cG9ydCB7IEdyb3VwQnlNYW5hZ2VyIH0gZnJvbSAnLi9saWIvZ3JvdXAtYnktbWFuYWdlci9ncm91cC1ieS1tYW5hZ2VyJztcbiJdfQ==