valtech-components 2.0.713 → 2.0.714

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.
Files changed (36) hide show
  1. package/esm2022/lib/components/organisms/cards-carousel/cards-carousel.component.mjs +63 -16
  2. package/esm2022/lib/components/organisms/cards-carousel/types.mjs +1 -1
  3. package/esm2022/lib/components/templates/simple/simple.component.mjs +7 -9
  4. package/esm2022/lib/services/auth/auth.service.mjs +33 -17
  5. package/esm2022/lib/version.mjs +2 -2
  6. package/esm2022/public-api.mjs +1 -12
  7. package/fesm2022/valtech-components.mjs +100 -1995
  8. package/fesm2022/valtech-components.mjs.map +1 -1
  9. package/lib/components/organisms/bottom-nav/bottom-nav.component.d.ts +1 -1
  10. package/lib/components/organisms/cards-carousel/cards-carousel.component.d.ts +12 -6
  11. package/lib/components/organisms/cards-carousel/types.d.ts +32 -3
  12. package/lib/version.d.ts +1 -1
  13. package/package.json +1 -1
  14. package/public-api.d.ts +0 -11
  15. package/esm2022/lib/components/molecules/participant-card/participant-card.component.mjs +0 -514
  16. package/esm2022/lib/components/molecules/participant-card/types.mjs +0 -21
  17. package/esm2022/lib/components/molecules/raffle-status-card/raffle-status-card.component.mjs +0 -476
  18. package/esm2022/lib/components/molecules/raffle-status-card/types.mjs +0 -23
  19. package/esm2022/lib/components/molecules/recap-card/recap-card.component.mjs +0 -78
  20. package/esm2022/lib/components/molecules/recap-card/types.mjs +0 -2
  21. package/esm2022/lib/components/molecules/ticket-grid/ticket-grid.component.mjs +0 -489
  22. package/esm2022/lib/components/molecules/ticket-grid/types.mjs +0 -11
  23. package/esm2022/lib/components/molecules/winner-display/types.mjs +0 -9
  24. package/esm2022/lib/components/molecules/winner-display/winner-display.component.mjs +0 -359
  25. package/esm2022/lib/components/templates/layout/layout.component.mjs +0 -19
  26. package/lib/components/molecules/participant-card/participant-card.component.d.ts +0 -34
  27. package/lib/components/molecules/participant-card/types.d.ts +0 -132
  28. package/lib/components/molecules/raffle-status-card/raffle-status-card.component.d.ts +0 -21
  29. package/lib/components/molecules/raffle-status-card/types.d.ts +0 -108
  30. package/lib/components/molecules/recap-card/recap-card.component.d.ts +0 -36
  31. package/lib/components/molecules/recap-card/types.d.ts +0 -30
  32. package/lib/components/molecules/ticket-grid/ticket-grid.component.d.ts +0 -40
  33. package/lib/components/molecules/ticket-grid/types.d.ts +0 -122
  34. package/lib/components/molecules/winner-display/types.d.ts +0 -103
  35. package/lib/components/molecules/winner-display/winner-display.component.d.ts +0 -36
  36. package/lib/components/templates/layout/layout.component.d.ts +0 -5
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvbW9sZWN1bGVzL3JlY2FwLWNhcmQvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IExpbmtNZXRhZGF0YSB9IGZyb20gJy4uL2xpbmsvdHlwZXMnO1xuaW1wb3J0IHsgVGl0bGVCbG9ja01ldGFkYSB9IGZyb20gJy4uL3RpdGxlLWJsb2NrL3R5cGVzJztcblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIGZvciBhIGRlY29yYXRpdmUgc2hhcGUgd2l0aGluIHRoZSByZWNhcCBjYXJkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlY2FwQ2FyZFNoYXBlIHtcbiAgLyoqIEJhY2tncm91bmQgY29sb3Igb2YgdGhlIHNoYXBlICovXG4gIGNvbG9yOiBzdHJpbmc7XG4gIC8qKiBBZGRpdGlvbmFsIENTUyBzdHlsZXMgKHBvc2l0aW9uLCBzaXplLCBldGMuKSAqL1xuICBzdHlsZT86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIHwgbnVtYmVyIH07XG59XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBmb3IgdGhlIHJlY2FwIGNhcmQgY29tcG9uZW50LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlY2FwQ2FyZE1ldGFkYXRhIHtcbiAgLyoqIFRpdGxlIGJsb2NrIGNvbmZpZ3VyYXRpb24gKi9cbiAgdGl0bGU6IFRpdGxlQmxvY2tNZXRhZGE7XG4gIC8qKiBMaW5rIGNvbmZpZ3VyYXRpb24gKi9cbiAgbGluazogTGlua01ldGFkYXRhO1xuICAvKiogRGVjb3JhdGl2ZSBzaGFwZXMgdG8gZGlzcGxheSBiZWhpbmQgY29udGVudCAqL1xuICBzaGFwZXM/OiBSZWNhcENhcmRTaGFwZVtdO1xuICAvKiogQmFja2dyb3VuZCBjb2xvciBvZiB0aGUgY2FyZCAoSW9uaWMgY29sb3IpICovXG4gIGNvbG9yPzogc3RyaW5nO1xuICAvKiogTWluaW11bSBoZWlnaHQgb2YgdGhlIGNhcmQuIERlZmF1bHQ6ICc0MDBweCcgKi9cbiAgbWluSGVpZ2h0Pzogc3RyaW5nO1xuICAvKiogV2lkdGggb2YgdGhlIGNhcmQuIERlZmF1bHQ6ICcyODBweCcgKi9cbiAgd2lkdGg/OiBzdHJpbmc7XG59XG4iXX0=
@@ -1,489 +0,0 @@
1
- import { CommonModule } from '@angular/common';
2
- import { Component, Input, Output, EventEmitter } from '@angular/core';
3
- import { FormsModule } from '@angular/forms';
4
- import { IonButton, IonIcon, IonSearchbar } from '@ionic/angular/standalone';
5
- import { addIcons } from 'ionicons';
6
- import { shuffleOutline } from 'ionicons/icons';
7
- import { DEFAULT_LEGEND_LABELS, } from './types';
8
- import * as i0 from "@angular/core";
9
- addIcons({ shuffleOutline });
10
- /**
11
- * val-ticket-grid
12
- *
13
- * A grid for selecting ticket numbers, commonly used in raffles and lotteries.
14
- *
15
- * @example Basic usage
16
- * ```html
17
- * <val-ticket-grid
18
- * [props]="{
19
- * totalTickets: 100,
20
- * soldTickets: [1, 5, 12, 23],
21
- * selectionMode: 'multiple',
22
- * maxSelection: 10
23
- * }"
24
- * (selectionChange)="onSelectionChange($event)"
25
- * ></val-ticket-grid>
26
- * ```
27
- *
28
- * @example With legend and search
29
- * ```html
30
- * <val-ticket-grid
31
- * [props]="{
32
- * totalTickets: 500,
33
- * soldTickets: soldNumbers,
34
- * reservedTickets: reservedNumbers,
35
- * columns: 20,
36
- * showLegend: true,
37
- * showSearch: true,
38
- * showRandomSelect: true,
39
- * randomSelectCount: 5,
40
- * maxSelection: 10
41
- * }"
42
- * ></val-ticket-grid>
43
- * ```
44
- */
45
- export class TicketGridComponent {
46
- constructor() {
47
- this.selectionChange = new EventEmitter();
48
- this.ticketClick = new EventEmitter();
49
- this.tickets = [];
50
- this.displayedTickets = [];
51
- this.selectedTickets = [];
52
- this.searchTerm = '';
53
- this.highlightedNumbers = [];
54
- }
55
- ngOnInit() {
56
- this.buildTickets();
57
- }
58
- ngOnChanges(changes) {
59
- if (changes['props']) {
60
- this.buildTickets();
61
- }
62
- }
63
- buildTickets() {
64
- const start = this.props.startNumber ?? 1;
65
- const total = this.props.totalTickets;
66
- const soldSet = new Set(this.props.soldTickets || []);
67
- const reservedSet = new Set(this.props.reservedTickets || []);
68
- const disabledSet = new Set(this.props.disabledTickets || []);
69
- const selectedSet = new Set(this.props.selectedTickets || []);
70
- // Initialize selected tickets from props
71
- this.selectedTickets = [...(this.props.selectedTickets || [])];
72
- // Build ticket array
73
- if (this.props.ticketData?.length) {
74
- // Use custom ticket data
75
- this.tickets = [...this.props.ticketData];
76
- }
77
- else {
78
- // Generate from numbers
79
- this.tickets = [];
80
- for (let i = start; i < start + total; i++) {
81
- let status = 'available';
82
- if (disabledSet.has(i)) {
83
- status = 'disabled';
84
- }
85
- else if (soldSet.has(i)) {
86
- status = 'sold';
87
- }
88
- else if (reservedSet.has(i)) {
89
- status = 'reserved';
90
- }
91
- else if (selectedSet.has(i)) {
92
- status = 'selected';
93
- }
94
- this.tickets.push({ number: i, status });
95
- }
96
- }
97
- this.applySearch();
98
- }
99
- applySearch() {
100
- if (!this.searchTerm) {
101
- this.displayedTickets = [...this.tickets];
102
- this.highlightedNumbers = [];
103
- }
104
- else {
105
- // Filter/highlight tickets matching search
106
- const term = this.searchTerm.trim();
107
- this.highlightedNumbers = this.tickets
108
- .filter(t => this.formatNumber(t.number).includes(term))
109
- .map(t => t.number);
110
- this.displayedTickets = [...this.tickets];
111
- }
112
- }
113
- onSearch(event) {
114
- this.searchTerm = event.detail.value || '';
115
- this.applySearch();
116
- }
117
- isHighlighted(number) {
118
- return this.highlightedNumbers.includes(number);
119
- }
120
- isSelectable(ticket) {
121
- if (this.props.selectionMode === 'none')
122
- return false;
123
- // Check if sold/reserved and admin override
124
- if (ticket.status === 'sold' || ticket.status === 'reserved') {
125
- return this.props.allowSelectSold === true;
126
- }
127
- if (ticket.status === 'disabled')
128
- return false;
129
- // Check max selection
130
- if (ticket.status !== 'selected' &&
131
- this.props.maxSelection &&
132
- this.selectedTickets.length >= this.props.maxSelection) {
133
- return false;
134
- }
135
- return true;
136
- }
137
- onTicketClick(ticket) {
138
- const isSelected = this.selectedTickets.includes(ticket.number);
139
- // Emit click event regardless
140
- this.ticketClick.emit({
141
- number: ticket.number,
142
- status: ticket.status,
143
- selected: this.isSelectable(ticket) ? !isSelected : null,
144
- });
145
- if (!this.isSelectable(ticket) && ticket.status !== 'selected') {
146
- return;
147
- }
148
- // Handle selection
149
- if (isSelected) {
150
- // Deselect
151
- this.selectedTickets = this.selectedTickets.filter(n => n !== ticket.number);
152
- ticket.status = 'available';
153
- this.selectionChange.emit({
154
- selectedTickets: [...this.selectedTickets],
155
- changedTicket: ticket.number,
156
- action: 'deselect',
157
- count: this.selectedTickets.length,
158
- maxReached: false,
159
- });
160
- }
161
- else {
162
- // Select
163
- if (this.props.selectionMode === 'single') {
164
- // Deselect previous
165
- this.selectedTickets.forEach(num => {
166
- const t = this.tickets.find(x => x.number === num);
167
- if (t)
168
- t.status = 'available';
169
- });
170
- this.selectedTickets = [ticket.number];
171
- }
172
- else {
173
- this.selectedTickets.push(ticket.number);
174
- }
175
- ticket.status = 'selected';
176
- this.selectionChange.emit({
177
- selectedTickets: [...this.selectedTickets],
178
- changedTicket: ticket.number,
179
- action: 'select',
180
- count: this.selectedTickets.length,
181
- maxReached: this.props.maxSelection
182
- ? this.selectedTickets.length >= this.props.maxSelection
183
- : false,
184
- });
185
- }
186
- }
187
- selectRandom() {
188
- const count = this.props.randomSelectCount || 1;
189
- const available = this.tickets.filter(t => t.status === 'available' && !this.selectedTickets.includes(t.number));
190
- // Determine how many we can select
191
- const maxCanSelect = this.props.maxSelection
192
- ? Math.min(count, this.props.maxSelection - this.selectedTickets.length)
193
- : count;
194
- if (available.length === 0 || maxCanSelect <= 0)
195
- return;
196
- // Random shuffle and pick
197
- const shuffled = [...available].sort(() => Math.random() - 0.5);
198
- const toSelect = shuffled.slice(0, Math.min(maxCanSelect, available.length));
199
- toSelect.forEach(ticket => {
200
- ticket.status = 'selected';
201
- this.selectedTickets.push(ticket.number);
202
- });
203
- this.selectionChange.emit({
204
- selectedTickets: [...this.selectedTickets],
205
- changedTicket: toSelect[toSelect.length - 1].number,
206
- action: 'select',
207
- count: this.selectedTickets.length,
208
- maxReached: this.props.maxSelection
209
- ? this.selectedTickets.length >= this.props.maxSelection
210
- : false,
211
- });
212
- }
213
- /**
214
- * Clear all selections.
215
- */
216
- clearSelection() {
217
- this.selectedTickets.forEach(num => {
218
- const ticket = this.tickets.find(t => t.number === num);
219
- if (ticket)
220
- ticket.status = 'available';
221
- });
222
- this.selectedTickets = [];
223
- }
224
- /**
225
- * Get selected ticket numbers.
226
- */
227
- getSelectedTickets() {
228
- return [...this.selectedTickets];
229
- }
230
- get availableCount() {
231
- return this.tickets.filter(t => t.status === 'available').length;
232
- }
233
- get soldCount() {
234
- return this.tickets.filter(t => t.status === 'sold').length;
235
- }
236
- getLegendItems() {
237
- if (this.props.legendItems) {
238
- return this.props.legendItems;
239
- }
240
- const items = [
241
- { status: 'available', label: DEFAULT_LEGEND_LABELS.available, count: this.availableCount },
242
- { status: 'selected', label: DEFAULT_LEGEND_LABELS.selected, count: this.selectedTickets.length },
243
- ];
244
- if (this.props.soldTickets?.length) {
245
- items.push({ status: 'sold', label: DEFAULT_LEGEND_LABELS.sold, count: this.soldCount });
246
- }
247
- if (this.props.reservedTickets?.length) {
248
- items.push({
249
- status: 'reserved',
250
- label: DEFAULT_LEGEND_LABELS.reserved,
251
- count: this.props.reservedTickets.length,
252
- });
253
- }
254
- return items;
255
- }
256
- formatNumber(num) {
257
- if (this.props.numberPadding) {
258
- return String(num).padStart(this.props.numberPadding, '0');
259
- }
260
- return String(num);
261
- }
262
- getTicketAriaLabel(ticket) {
263
- const statusLabel = DEFAULT_LEGEND_LABELS[ticket.status];
264
- return `Boleto ${this.formatNumber(ticket.number)}, ${statusLabel}`;
265
- }
266
- getSearchPlaceholder() {
267
- return this.props.searchPlaceholder || 'Buscar número...';
268
- }
269
- getRandomSelectLabel() {
270
- return this.props.randomSelectLabel || 'Aleatorio';
271
- }
272
- getColor() {
273
- if (this.props.color) {
274
- return `var(--ion-color-${this.props.color})`;
275
- }
276
- return 'var(--ion-color-primary)';
277
- }
278
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TicketGridComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
279
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: TicketGridComponent, isStandalone: true, selector: "val-ticket-grid", inputs: { props: "props" }, outputs: { selectionChange: "selectionChange", ticketClick: "ticketClick" }, usesOnChanges: true, ngImport: i0, template: `
280
- <div
281
- class="ticket-grid-container"
282
- [class]="props.cssClass"
283
- [class.size-small]="props.ticketSize === 'small'"
284
- [class.size-medium]="props.ticketSize === 'medium' || !props.ticketSize"
285
- [class.size-large]="props.ticketSize === 'large'"
286
- [style.--grid-columns]="props.columns || 10"
287
- [style.--grid-gap]="(props.gap || 4) + 'px'"
288
- [style.--selected-color]="getColor()"
289
- >
290
- <!-- Search and controls -->
291
- @if (props.showSearch || props.showRandomSelect) {
292
- <div class="grid-controls">
293
- @if (props.showSearch) {
294
- <ion-searchbar
295
- [placeholder]="getSearchPlaceholder()"
296
- [debounce]="300"
297
- (ionInput)="onSearch($event)"
298
- class="ticket-search"
299
- ></ion-searchbar>
300
- }
301
-
302
- @if (props.showRandomSelect && props.selectionMode !== 'none') {
303
- <ion-button
304
- fill="outline"
305
- [color]="props.color || 'primary'"
306
- (click)="selectRandom()"
307
- [disabled]="availableCount < (props.randomSelectCount || 1)"
308
- >
309
- <ion-icon slot="start" name="shuffle-outline"></ion-icon>
310
- {{ getRandomSelectLabel() }}
311
- </ion-button>
312
- }
313
- </div>
314
- }
315
-
316
- <!-- Legend (top) -->
317
- @if (props.showLegend && props.legendPosition !== 'bottom') {
318
- <div class="ticket-legend">
319
- @for (item of getLegendItems(); track item.status) {
320
- <div class="legend-item">
321
- <span class="legend-color" [class]="'status-' + item.status"></span>
322
- <span class="legend-label">{{ item.label }}</span>
323
- @if (item.count !== undefined) {
324
- <span class="legend-count">({{ item.count }})</span>
325
- }
326
- </div>
327
- }
328
- </div>
329
- }
330
-
331
- <!-- Summary -->
332
- @if (props.showSummary) {
333
- <div class="ticket-summary">
334
- <span class="summary-item">
335
- <strong>{{ selectedTickets.length }}</strong> seleccionado{{ selectedTickets.length !== 1 ? 's' : '' }}
336
- </span>
337
- @if (props.maxSelection) {
338
- <span class="summary-item">
339
- (máx: {{ props.maxSelection }})
340
- </span>
341
- }
342
- </div>
343
- }
344
-
345
- <!-- Grid -->
346
- <div class="ticket-grid" role="grid">
347
- @for (ticket of displayedTickets; track ticket.number) {
348
- <button
349
- type="button"
350
- class="ticket-cell"
351
- [class]="'status-' + ticket.status"
352
- [class.highlighted]="isHighlighted(ticket.number)"
353
- [disabled]="!isSelectable(ticket)"
354
- [attr.aria-label]="getTicketAriaLabel(ticket)"
355
- [attr.aria-pressed]="ticket.status === 'selected'"
356
- (click)="onTicketClick(ticket)"
357
- >
358
- {{ formatNumber(ticket.number) }}
359
- </button>
360
- }
361
- </div>
362
-
363
- <!-- Legend (bottom) -->
364
- @if (props.showLegend && props.legendPosition === 'bottom') {
365
- <div class="ticket-legend bottom">
366
- @for (item of getLegendItems(); track item.status) {
367
- <div class="legend-item">
368
- <span class="legend-color" [class]="'status-' + item.status"></span>
369
- <span class="legend-label">{{ item.label }}</span>
370
- @if (item.count !== undefined) {
371
- <span class="legend-count">({{ item.count }})</span>
372
- }
373
- </div>
374
- }
375
- </div>
376
- }
377
- </div>
378
- `, isInline: true, styles: ["@charset \"UTF-8\";:host{display:block}.ticket-grid-container{--grid-columns: 10;--grid-gap: 4px;--selected-color: var(--ion-color-primary);display:flex;flex-direction:column;gap:16px}.grid-controls{display:flex;flex-wrap:wrap;gap:12px;align-items:center;justify-content:space-between}.ticket-search{flex:1;min-width:200px;max-width:300px;--border-radius: 8px}.ticket-legend{display:flex;flex-wrap:wrap;gap:16px;padding:8px 0}.ticket-legend.bottom{border-top:1px solid var(--ion-color-light-shade);padding-top:12px;margin-top:8px}.legend-item{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--ion-color-medium-shade)}.legend-color{width:16px;height:16px;border-radius:4px;border:1px solid var(--ion-color-medium)}.legend-color.status-available{background:var(--ion-color-light);border-color:var(--ion-color-medium)}.legend-color.status-selected{background:var(--selected-color);border-color:var(--selected-color)}.legend-color.status-sold{background:var(--ion-color-medium);border-color:var(--ion-color-medium-shade)}.legend-color.status-reserved{background:var(--ion-color-warning-tint);border-color:var(--ion-color-warning)}.legend-color.status-disabled{background:var(--ion-color-light-shade);border-color:var(--ion-color-medium);opacity:.5}.legend-count{color:var(--ion-color-medium);font-size:11px}.ticket-summary{display:flex;gap:8px;align-items:center;font-size:14px;color:var(--ion-color-dark);padding:8px 12px;background:var(--ion-color-light);border-radius:8px}.summary-item:not(:last-child):after{content:\"\\2022\";margin-left:8px;color:var(--ion-color-medium)}.ticket-grid{display:grid;grid-template-columns:repeat(var(--grid-columns),1fr);gap:var(--grid-gap)}.ticket-cell{aspect-ratio:1;display:flex;align-items:center;justify-content:center;border:1px solid var(--ion-color-medium);border-radius:4px;background:var(--ion-color-light);font-size:12px;font-weight:500;color:var(--ion-color-dark);cursor:pointer;transition:all .15s ease;padding:0;font-family:inherit}.ticket-cell:hover:not(:disabled){border-color:var(--selected-color);transform:scale(1.05);z-index:1}.ticket-cell:focus{outline:2px solid var(--selected-color);outline-offset:1px}.ticket-cell.status-available{background:var(--ion-color-light);border-color:var(--ion-color-medium)}.ticket-cell.status-available:hover:not(:disabled){background:var(--ion-color-light-shade)}.ticket-cell.status-selected{background:var(--selected-color);border-color:var(--selected-color);color:#fff;font-weight:600}.ticket-cell.status-sold{background:var(--ion-color-medium);border-color:var(--ion-color-medium-shade);color:var(--ion-color-medium-contrast);cursor:not-allowed;opacity:.7}.ticket-cell.status-reserved{background:var(--ion-color-warning-tint);border-color:var(--ion-color-warning);color:var(--ion-color-warning-shade);cursor:not-allowed}.ticket-cell.status-disabled{background:var(--ion-color-light-shade);border-color:var(--ion-color-medium);color:var(--ion-color-medium);cursor:not-allowed;opacity:.5}.ticket-cell.highlighted{box-shadow:0 0 0 2px var(--ion-color-tertiary);z-index:2}.ticket-cell:disabled{cursor:not-allowed}.size-small .ticket-grid{--grid-gap: 2px}.size-small .ticket-cell{font-size:10px;border-radius:2px}.size-small .ticket-legend{gap:12px}.size-small .legend-color{width:12px;height:12px}.size-small .legend-item{font-size:11px}.size-large .ticket-grid{--grid-gap: 6px}.size-large .ticket-cell{font-size:14px;border-radius:6px;font-weight:600}.size-large .ticket-legend{gap:20px}.size-large .legend-color{width:20px;height:20px}.size-large .legend-item{font-size:14px}@media (max-width: 576px){.grid-controls{flex-direction:column;align-items:stretch}.ticket-search{max-width:100%}.ticket-legend{justify-content:center}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "component", type: IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonSearchbar, selector: "ion-searchbar", inputs: ["animated", "autocomplete", "autocorrect", "cancelButtonIcon", "cancelButtonText", "clearIcon", "color", "debounce", "disabled", "enterkeyhint", "inputmode", "mode", "name", "placeholder", "searchIcon", "showCancelButton", "showClearButton", "spellcheck", "type", "value"] }] }); }
379
- }
380
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TicketGridComponent, decorators: [{
381
- type: Component,
382
- args: [{ selector: 'val-ticket-grid', standalone: true, imports: [CommonModule, FormsModule, IonButton, IonIcon, IonSearchbar], template: `
383
- <div
384
- class="ticket-grid-container"
385
- [class]="props.cssClass"
386
- [class.size-small]="props.ticketSize === 'small'"
387
- [class.size-medium]="props.ticketSize === 'medium' || !props.ticketSize"
388
- [class.size-large]="props.ticketSize === 'large'"
389
- [style.--grid-columns]="props.columns || 10"
390
- [style.--grid-gap]="(props.gap || 4) + 'px'"
391
- [style.--selected-color]="getColor()"
392
- >
393
- <!-- Search and controls -->
394
- @if (props.showSearch || props.showRandomSelect) {
395
- <div class="grid-controls">
396
- @if (props.showSearch) {
397
- <ion-searchbar
398
- [placeholder]="getSearchPlaceholder()"
399
- [debounce]="300"
400
- (ionInput)="onSearch($event)"
401
- class="ticket-search"
402
- ></ion-searchbar>
403
- }
404
-
405
- @if (props.showRandomSelect && props.selectionMode !== 'none') {
406
- <ion-button
407
- fill="outline"
408
- [color]="props.color || 'primary'"
409
- (click)="selectRandom()"
410
- [disabled]="availableCount < (props.randomSelectCount || 1)"
411
- >
412
- <ion-icon slot="start" name="shuffle-outline"></ion-icon>
413
- {{ getRandomSelectLabel() }}
414
- </ion-button>
415
- }
416
- </div>
417
- }
418
-
419
- <!-- Legend (top) -->
420
- @if (props.showLegend && props.legendPosition !== 'bottom') {
421
- <div class="ticket-legend">
422
- @for (item of getLegendItems(); track item.status) {
423
- <div class="legend-item">
424
- <span class="legend-color" [class]="'status-' + item.status"></span>
425
- <span class="legend-label">{{ item.label }}</span>
426
- @if (item.count !== undefined) {
427
- <span class="legend-count">({{ item.count }})</span>
428
- }
429
- </div>
430
- }
431
- </div>
432
- }
433
-
434
- <!-- Summary -->
435
- @if (props.showSummary) {
436
- <div class="ticket-summary">
437
- <span class="summary-item">
438
- <strong>{{ selectedTickets.length }}</strong> seleccionado{{ selectedTickets.length !== 1 ? 's' : '' }}
439
- </span>
440
- @if (props.maxSelection) {
441
- <span class="summary-item">
442
- (máx: {{ props.maxSelection }})
443
- </span>
444
- }
445
- </div>
446
- }
447
-
448
- <!-- Grid -->
449
- <div class="ticket-grid" role="grid">
450
- @for (ticket of displayedTickets; track ticket.number) {
451
- <button
452
- type="button"
453
- class="ticket-cell"
454
- [class]="'status-' + ticket.status"
455
- [class.highlighted]="isHighlighted(ticket.number)"
456
- [disabled]="!isSelectable(ticket)"
457
- [attr.aria-label]="getTicketAriaLabel(ticket)"
458
- [attr.aria-pressed]="ticket.status === 'selected'"
459
- (click)="onTicketClick(ticket)"
460
- >
461
- {{ formatNumber(ticket.number) }}
462
- </button>
463
- }
464
- </div>
465
-
466
- <!-- Legend (bottom) -->
467
- @if (props.showLegend && props.legendPosition === 'bottom') {
468
- <div class="ticket-legend bottom">
469
- @for (item of getLegendItems(); track item.status) {
470
- <div class="legend-item">
471
- <span class="legend-color" [class]="'status-' + item.status"></span>
472
- <span class="legend-label">{{ item.label }}</span>
473
- @if (item.count !== undefined) {
474
- <span class="legend-count">({{ item.count }})</span>
475
- }
476
- </div>
477
- }
478
- </div>
479
- }
480
- </div>
481
- `, styles: ["@charset \"UTF-8\";:host{display:block}.ticket-grid-container{--grid-columns: 10;--grid-gap: 4px;--selected-color: var(--ion-color-primary);display:flex;flex-direction:column;gap:16px}.grid-controls{display:flex;flex-wrap:wrap;gap:12px;align-items:center;justify-content:space-between}.ticket-search{flex:1;min-width:200px;max-width:300px;--border-radius: 8px}.ticket-legend{display:flex;flex-wrap:wrap;gap:16px;padding:8px 0}.ticket-legend.bottom{border-top:1px solid var(--ion-color-light-shade);padding-top:12px;margin-top:8px}.legend-item{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--ion-color-medium-shade)}.legend-color{width:16px;height:16px;border-radius:4px;border:1px solid var(--ion-color-medium)}.legend-color.status-available{background:var(--ion-color-light);border-color:var(--ion-color-medium)}.legend-color.status-selected{background:var(--selected-color);border-color:var(--selected-color)}.legend-color.status-sold{background:var(--ion-color-medium);border-color:var(--ion-color-medium-shade)}.legend-color.status-reserved{background:var(--ion-color-warning-tint);border-color:var(--ion-color-warning)}.legend-color.status-disabled{background:var(--ion-color-light-shade);border-color:var(--ion-color-medium);opacity:.5}.legend-count{color:var(--ion-color-medium);font-size:11px}.ticket-summary{display:flex;gap:8px;align-items:center;font-size:14px;color:var(--ion-color-dark);padding:8px 12px;background:var(--ion-color-light);border-radius:8px}.summary-item:not(:last-child):after{content:\"\\2022\";margin-left:8px;color:var(--ion-color-medium)}.ticket-grid{display:grid;grid-template-columns:repeat(var(--grid-columns),1fr);gap:var(--grid-gap)}.ticket-cell{aspect-ratio:1;display:flex;align-items:center;justify-content:center;border:1px solid var(--ion-color-medium);border-radius:4px;background:var(--ion-color-light);font-size:12px;font-weight:500;color:var(--ion-color-dark);cursor:pointer;transition:all .15s ease;padding:0;font-family:inherit}.ticket-cell:hover:not(:disabled){border-color:var(--selected-color);transform:scale(1.05);z-index:1}.ticket-cell:focus{outline:2px solid var(--selected-color);outline-offset:1px}.ticket-cell.status-available{background:var(--ion-color-light);border-color:var(--ion-color-medium)}.ticket-cell.status-available:hover:not(:disabled){background:var(--ion-color-light-shade)}.ticket-cell.status-selected{background:var(--selected-color);border-color:var(--selected-color);color:#fff;font-weight:600}.ticket-cell.status-sold{background:var(--ion-color-medium);border-color:var(--ion-color-medium-shade);color:var(--ion-color-medium-contrast);cursor:not-allowed;opacity:.7}.ticket-cell.status-reserved{background:var(--ion-color-warning-tint);border-color:var(--ion-color-warning);color:var(--ion-color-warning-shade);cursor:not-allowed}.ticket-cell.status-disabled{background:var(--ion-color-light-shade);border-color:var(--ion-color-medium);color:var(--ion-color-medium);cursor:not-allowed;opacity:.5}.ticket-cell.highlighted{box-shadow:0 0 0 2px var(--ion-color-tertiary);z-index:2}.ticket-cell:disabled{cursor:not-allowed}.size-small .ticket-grid{--grid-gap: 2px}.size-small .ticket-cell{font-size:10px;border-radius:2px}.size-small .ticket-legend{gap:12px}.size-small .legend-color{width:12px;height:12px}.size-small .legend-item{font-size:11px}.size-large .ticket-grid{--grid-gap: 6px}.size-large .ticket-cell{font-size:14px;border-radius:6px;font-weight:600}.size-large .ticket-legend{gap:20px}.size-large .legend-color{width:20px;height:20px}.size-large .legend-item{font-size:14px}@media (max-width: 576px){.grid-controls{flex-direction:column;align-items:stretch}.ticket-search{max-width:100%}.ticket-legend{justify-content:center}}\n"] }]
482
- }], propDecorators: { props: [{
483
- type: Input
484
- }], selectionChange: [{
485
- type: Output
486
- }], ticketClick: [{
487
- type: Output
488
- }] } });
489
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGlja2V0LWdyaWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL21vbGVjdWxlcy90aWNrZXQtZ3JpZC90aWNrZXQtZ3JpZC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQW9DLE1BQU0sZUFBZSxDQUFDO0FBQ3pHLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNoRCxPQUFPLEVBT0wscUJBQXFCLEdBQ3RCLE1BQU0sU0FBUyxDQUFDOztBQUVqQixRQUFRLENBQUMsRUFBRSxjQUFjLEVBQUUsQ0FBQyxDQUFDO0FBNEc3Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtDRztBQUNILE1BQU0sT0FBTyxtQkFBbUI7SUE3SWhDO1FBZ0pZLG9CQUFlLEdBQUcsSUFBSSxZQUFZLEVBQTRCLENBQUM7UUFDL0QsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBd0IsQ0FBQztRQUVqRSxZQUFPLEdBQWlCLEVBQUUsQ0FBQztRQUMzQixxQkFBZ0IsR0FBaUIsRUFBRSxDQUFDO1FBQ3BDLG9CQUFlLEdBQWEsRUFBRSxDQUFDO1FBQy9CLGVBQVUsR0FBRyxFQUFFLENBQUM7UUFDaEIsdUJBQWtCLEdBQWEsRUFBRSxDQUFDO0tBbVFuQztJQWpRQyxRQUFRO1FBQ04sSUFBSSxDQUFDLFlB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Q0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsWUFBWSxDQUFDLFlBQzVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtR1Q7OEJBdUNRLEtBQUs7c0JBQWIsS0FBSztnQkFFSSxlQUFlO3NCQUF4QixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIE9uSW5pdCwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IElvbkJ1dHRvbiwgSW9uSWNvbiwgSW9uU2VhcmNoYmFyIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXIvc3RhbmRhbG9uZSc7XG5pbXBvcnQgeyBhZGRJY29ucyB9IGZyb20gJ2lvbmljb25zJztcbmltcG9ydCB7IHNodWZmbGVPdXRsaW5lIH0gZnJvbSAnaW9uaWNvbnMvaWNvbnMnO1xuaW1wb3J0IHtcbiAgVGlja2V0R3JpZE1ldGFkYXRhLFxuICBUaWNrZXRHcmlkU2VsZWN0aW9uRXZlbnQsXG4gIFRpY2tldEdyaWRDbGlja0V2ZW50LFxuICBUaWNrZXRTdGF0dXMsXG4gIFRpY2tldERhdGEsXG4gIFRpY2tldEdyaWRMZWdlbmRJdGVtLFxuICBERUZBVUxUX0xFR0VORF9MQUJFTFMsXG59IGZyb20gJy4vdHlwZXMnO1xuXG5hZGRJY29ucyh7IHNodWZmbGVPdXRsaW5lIH0pO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWwtdGlja2V0LWdyaWQnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBGb3Jtc01vZHVsZSwgSW9uQnV0dG9uLCBJb25JY29uLCBJb25TZWFyY2hiYXJdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwidGlja2V0LWdyaWQtY29udGFpbmVyXCJcbiAgICAgIFtjbGFzc109XCJwcm9wcy5jc3NDbGFzc1wiXG4gICAgICBbY2xhc3Muc2l6ZS1zbWFsbF09XCJwcm9wcy50aWNrZXRTaXplID09PSAnc21hbGwnXCJcbiAgICAgIFtjbGFzcy5zaXplLW1lZGl1bV09XCJwcm9wcy50aWNrZXRTaXplID09PSAnbWVkaXVtJyB8fCAhcHJvcHMudGlja2V0U2l6ZVwiXG4gICAgICBbY2xhc3Muc2l6ZS1sYXJnZV09XCJwcm9wcy50aWNrZXRTaXplID09PSAnbGFyZ2UnXCJcbiAgICAgIFtzdHlsZS4tLWdyaWQtY29sdW1uc109XCJwcm9wcy5jb2x1bW5zIHx8IDEwXCJcbiAgICAgIFtzdHlsZS4tLWdyaWQtZ2FwXT1cIihwcm9wcy5nYXAgfHwgNCkgKyAncHgnXCJcbiAgICAgIFtzdHlsZS4tLXNlbGVjdGVkLWNvbG9yXT1cImdldENvbG9yKClcIlxuICAgID5cbiAgICAgIDwhLS0gU2VhcmNoIGFuZCBjb250cm9scyAtLT5cbiAgICAgIEBpZiAocHJvcHMuc2hvd1NlYXJjaCB8fCBwcm9wcy5zaG93UmFuZG9tU2VsZWN0KSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJncmlkLWNvbnRyb2xzXCI+XG4gICAgICAgICAgQGlmIChwcm9wcy5zaG93U2VhcmNoKSB7XG4gICAgICAgICAgICA8aW9uLXNlYXJjaGJhclxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZ2V0U2VhcmNoUGxhY2Vob2xkZXIoKVwiXG4gICAgICAgICAgICAgIFtkZWJvdW5jZV09XCIzMDBcIlxuICAgICAgICAgICAgICAoaW9uSW5wdXQpPVwib25TZWFyY2goJGV2ZW50KVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwidGlja2V0LXNlYXJjaFwiXG4gICAgICAgICAgICA+PC9pb24tc2VhcmNoYmFyPlxuICAgICAgICAgIH1cblxuICAgICAgICAgIEBpZiAocHJvcHMuc2hvd1JhbmRvbVNlbGVjdCAmJiBwcm9wcy5zZWxlY3Rpb25Nb2RlICE9PSAnbm9uZScpIHtcbiAgICAgICAgICAgIDxpb24tYnV0dG9uXG4gICAgICAgICAgICAgIGZpbGw9XCJvdXRsaW5lXCJcbiAgICAgICAgICAgICAgW2NvbG9yXT1cInByb3BzLmNvbG9yIHx8ICdwcmltYXJ5J1wiXG4gICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RSYW5kb20oKVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJhdmFpbGFibGVDb3VudCA8IChwcm9wcy5yYW5kb21TZWxlY3RDb3VudCB8fCAxKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpb24taWNvbiBzbG90PVwic3RhcnRcIiBuYW1lPVwic2h1ZmZsZS1vdXRsaW5lXCI+PC9pb24taWNvbj5cbiAgICAgICAgICAgICAge3sgZ2V0UmFuZG9tU2VsZWN0TGFiZWwoKSB9fVxuICAgICAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG5cbiAgICAgIDwhLS0gTGVnZW5kICh0b3ApIC0tPlxuICAgICAgQGlmIChwcm9wcy5zaG93TGVnZW5kICYmIHByb3BzLmxlZ2VuZFBvc2l0aW9uICE9PSAnYm90dG9tJykge1xuICAgICAgICA8ZGl2IGNsYXNzPVwidGlja2V0LWxlZ2VuZFwiPlxuICAgICAgICAgIEBmb3IgKGl0ZW0gb2YgZ2V0TGVnZW5kSXRlbXMoKTsgdHJhY2sgaXRlbS5zdGF0dXMpIHtcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsZWdlbmQtaXRlbVwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxlZ2VuZC1jb2xvclwiIFtjbGFzc109XCInc3RhdHVzLScgKyBpdGVtLnN0YXR1c1wiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsZWdlbmQtbGFiZWxcIj57eyBpdGVtLmxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgICBAaWYgKGl0ZW0uY291bnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGVnZW5kLWNvdW50XCI+KHt7IGl0ZW0uY291bnQgfX0pPC9zcGFuPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuXG4gICAgICA8IS0tIFN1bW1hcnkgLS0+XG4gICAgICBAaWYgKHByb3BzLnNob3dTdW1tYXJ5KSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0aWNrZXQtc3VtbWFyeVwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3VtbWFyeS1pdGVtXCI+XG4gICAgICAgICAgICA8c3Ryb25nPnt7IHNlbGVjdGVkVGlja2V0cy5sZW5ndGggfX08L3N0cm9uZz4gc2VsZWNjaW9uYWRve3sgc2VsZWN0ZWRUaWNrZXRzLmxlbmd0aCAhPT0gMSA/ICdzJyA6ICcnIH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIEBpZiAocHJvcHMubWF4U2VsZWN0aW9uKSB7XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN1bW1hcnktaXRlbVwiPlxuICAgICAgICAgICAgICAobcOheDoge3sgcHJvcHMubWF4U2VsZWN0aW9uIH19KVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG5cbiAgICAgIDwhLS0gR3JpZCAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJ0aWNrZXQtZ3JpZFwiIHJvbGU9XCJncmlkXCI+XG4gICAgICAgIEBmb3IgKHRpY2tldCBvZiBkaXNwbGF5ZWRUaWNrZXRzOyB0cmFjayB0aWNrZXQubnVtYmVyKSB7XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBjbGFzcz1cInRpY2tldC1jZWxsXCJcbiAgICAgICAgICAgIFtjbGFzc109XCInc3RhdHVzLScgKyB0aWNrZXQuc3RhdHVzXCJcbiAgICAgICAgICAgIFtjbGFzcy5oaWdobGlnaHRlZF09XCJpc0hpZ2hsaWdodGVkKHRpY2tldC5udW1iZXIpXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhaXNTZWxlY3RhYmxlKHRpY2tldClcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJnZXRUaWNrZXRBcmlhTGFiZWwodGlja2V0KVwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLXByZXNzZWRdPVwidGlja2V0LnN0YXR1cyA9PT0gJ3NlbGVjdGVkJ1wiXG4gICAgICAgICAgICAoY2xpY2spPVwib25UaWNrZXRDbGljayh0aWNrZXQpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7eyBmb3JtYXROdW1iZXIodGlja2V0Lm51bWJlcikgfX1cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gTGVnZW5kIChib3R0b20pIC0tPlxuICAgICAgQGlmIChwcm9wcy5zaG93TGVnZW5kICYmIHByb3BzLmxlZ2VuZFBvc2l0aW9uID09PSAnYm90dG9tJykge1xuICAgICAgICA8ZGl2IGNsYXNzPVwidGlja2V0LWxlZ2VuZCBib3R0b21cIj5cbiAgICAgICAgICBAZm9yIChpdGVtIG9mIGdldExlZ2VuZEl0ZW1zKCk7IHRyYWNrIGl0ZW0uc3RhdHVzKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGVnZW5kLWl0ZW1cIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsZWdlbmQtY29sb3JcIiBbY2xhc3NdPVwiJ3N0YXR1cy0nICsgaXRlbS5zdGF0dXNcIj48L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGVnZW5kLWxhYmVsXCI+e3sgaXRlbS5sYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgQGlmIChpdGVtLmNvdW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxlZ2VuZC1jb3VudFwiPih7eyBpdGVtLmNvdW50IH19KTwvc3Bhbj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgYCxcbiAgc3R5bGVVcmxzOiBbJy4vdGlja2V0LWdyaWQuY29tcG9uZW50LnNjc3MnXSxcbn0pXG4vKipcbiAqIHZhbC10aWNrZXQtZ3JpZFxuICpcbiAqIEEgZ3JpZCBmb3Igc2VsZWN0aW5nIHRpY2tldCBudW1iZXJzLCBjb21tb25seSB1c2VkIGluIHJhZmZsZXMgYW5kIGxvdHRlcmllcy5cbiAqXG4gKiBAZXhhbXBsZSBCYXNpYyB1c2FnZVxuICogYGBgaHRtbFxuICogPHZhbC10aWNrZXQtZ3JpZFxuICogICBbcHJvcHNdPVwie1xuICogICAgIHRvdGFsVGlja2V0czogMTAwLFxuICogICAgIHNvbGRUaWNrZXRzOiBbMSwgNSwgMTIsIDIzXSxcbiAqICAgICBzZWxlY3Rpb25Nb2RlOiAnbXVsdGlwbGUnLFxuICogICAgIG1heFNlbGVjdGlvbjogMTBcbiAqICAgfVwiXG4gKiAgIChzZWxlY3Rpb25DaGFuZ2UpPVwib25TZWxlY3Rpb25DaGFuZ2UoJGV2ZW50KVwiXG4gKiA+PC92YWwtdGlja2V0LWdyaWQ+XG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZSBXaXRoIGxlZ2VuZCBhbmQgc2VhcmNoXG4gKiBgYGBodG1sXG4gKiA8dmFsLXRpY2tldC1ncmlkXG4gKiAgIFtwcm9wc109XCJ7XG4gKiAgICAgdG90YWxUaWNrZXRzOiA1MDAsXG4gKiAgICAgc29sZFRpY2tldHM6IHNvbGROdW1iZXJzLFxuICogICAgIHJlc2VydmVkVGlja2V0czogcmVzZXJ2ZWROdW1iZXJzLFxuICogICAgIGNvbHVtbnM6IDIwLFxuICogICAgIHNob3dMZWdlbmQ6IHRydWUsXG4gKiAgICAgc2hvd1NlYXJjaDogdHJ1ZSxcbiAqICAgICBzaG93UmFuZG9tU2VsZWN0OiB0cnVlLFxuICogICAgIHJhbmRvbVNlbGVjdENvdW50OiA1LFxuICogICAgIG1heFNlbGVjdGlvbjogMTBcbiAqICAgfVwiXG4gKiA+PC92YWwtdGlja2V0LWdyaWQ+XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIFRpY2tldEdyaWRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gIEBJbnB1dCgpIHByb3BzOiBUaWNrZXRHcmlkTWV0YWRhdGE7XG5cbiAgQE91dHB1dCgpIHNlbGVjdGlvbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8VGlja2V0R3JpZFNlbGVjdGlvbkV2ZW50PigpO1xuICBAT3V0cHV0KCkgdGlja2V0Q2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPFRpY2tldEdyaWRDbGlja0V2ZW50PigpO1xuXG4gIHRpY2tldHM6IFRpY2tldERhdGFbXSA9IFtdO1xuICBkaXNwbGF5ZWRUaWNrZXRzOiBUaWNrZXREYXRhW10gPSBbXTtcbiAgc2VsZWN0ZWRUaWNrZXRzOiBudW1iZXJbXSA9IFtdO1xuICBzZWFyY2hUZXJtID0gJyc7XG4gIGhpZ2hsaWdodGVkTnVtYmVyczogbnVtYmVyW10gPSBbXTtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmJ1aWxkVGlja2V0cygpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWydwcm9wcyddKSB7XG4gICAgICB0aGlzLmJ1aWxkVGlja2V0cygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRUaWNrZXRzKCk6IHZvaWQge1xuICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5wcm9wcy5zdGFydE51bWJlciA/PyAxO1xuICAgIGNvbnN0IHRvdGFsID0gdGhpcy5wcm9wcy50b3RhbFRpY2tldHM7XG4gICAgY29uc3Qgc29sZFNldCA9IG5ldyBTZXQodGhpcy5wcm9wcy5zb2xkVGlja2V0cyB8fCBbXSk7XG4gICAgY29uc3QgcmVzZXJ2ZWRTZXQgPSBuZXcgU2V0KHRoaXMucHJvcHMucmVzZXJ2ZWRUaWNrZXRzIHx8IFtdKTtcbiAgICBjb25zdCBkaXNhYmxlZFNldCA9IG5ldyBTZXQodGhpcy5wcm9wcy5kaXNhYmxlZFRpY2tldHMgfHwgW10pO1xuICAgIGNvbnN0IHNlbGVjdGVkU2V0ID0gbmV3IFNldCh0aGlzLnByb3BzLnNlbGVjdGVkVGlja2V0cyB8fCBbXSk7XG5cbiAgICAvLyBJbml0aWFsaXplIHNlbGVjdGVkIHRpY2tldHMgZnJvbSBwcm9wc1xuICAgIHRoaXMuc2VsZWN0ZWRUaWNrZXRzID0gWy4uLih0aGlzLnByb3BzLnNlbGVjdGVkVGlja2V0cyB8fCBbXSldO1xuXG4gICAgLy8gQnVpbGQgdGlja2V0IGFycmF5XG4gICAgaWYgKHRoaXMucHJvcHMudGlja2V0RGF0YT8ubGVuZ3RoKSB7XG4gICAgICAvLyBVc2UgY3VzdG9tIHRpY2tldCBkYXRhXG4gICAgICB0aGlzLnRpY2tldHMgPSBbLi4udGhpcy5wcm9wcy50aWNrZXREYXRhXTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gR2VuZXJhdGUgZnJvbSBudW1iZXJzXG4gICAgICB0aGlzLnRpY2tldHMgPSBbXTtcbiAgICAgIGZvciAobGV0IGkgPSBzdGFydDsgaSA8IHN0YXJ0ICsgdG90YWw7IGkrKykge1xuICAgICAgICBsZXQgc3RhdHVzOiBUaWNrZXRTdGF0dXMgPSAnYXZhaWxhYmxlJztcblxuICAgICAgICBpZiAoZGlzYWJsZWRTZXQuaGFzKGkpKSB7XG4gICAgICAgICAgc3RhdHVzID0gJ2Rpc2FibGVkJztcbiAgICAgICAgfSBlbHNlIGlmIChzb2xkU2V0LmhhcyhpKSkge1xuICAgICAgICAgIHN0YXR1cyA9ICdzb2xkJztcbiAgICAgICAgfSBlbHNlIGlmIChyZXNlcnZlZFNldC5oYXMoaSkpIHtcbiAgICAgICAgICBzdGF0dXMgPSAncmVzZXJ2ZWQnO1xuICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdGVkU2V0LmhhcyhpKSkge1xuICAgICAgICAgIHN0YXR1cyA9ICdzZWxlY3RlZCc7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRpY2tldHMucHVzaCh7IG51bWJlcjogaSwgc3RhdHVzIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuYXBwbHlTZWFyY2goKTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlTZWFyY2goKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnNlYXJjaFRlcm0pIHtcbiAgICAgIHRoaXMuZGlzcGxheWVkVGlja2V0cyA9IFsuLi50aGlzLnRpY2tldHNdO1xuICAgICAgdGhpcy5oaWdobGlnaHRlZE51bWJlcnMgPSBbXTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRmlsdGVyL2hpZ2hsaWdodCB0aWNrZXRzIG1hdGNoaW5nIHNlYXJjaFxuICAgICAgY29uc3QgdGVybSA9IHRoaXMuc2VhcmNoVGVybS50cmltKCk7XG4gICAgICB0aGlzLmhpZ2hsaWdodGVkTnVtYmVycyA9IHRoaXMudGlja2V0c1xuICAgICAgICAuZmlsdGVyKHQgPT4gdGhpcy5mb3JtYXROdW1iZXIodC5udW1iZXIpLmluY2x1ZGVzKHRlcm0pKVxuICAgICAgICAubWFwKHQgPT4gdC5udW1iZXIpO1xuICAgICAgdGhpcy5kaXNwbGF5ZWRUaWNrZXRzID0gWy4uLnRoaXMudGlja2V0c107XG4gICAgfVxuICB9XG5cbiAgb25TZWFyY2goZXZlbnQ6IEN1c3RvbUV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5zZWFyY2hUZXJtID0gZXZlbnQuZGV0YWlsLnZhbHVlIHx8ICcnO1xuICAgIHRoaXMuYXBwbHlTZWFyY2goKTtcbiAgfVxuXG4gIGlzSGlnaGxpZ2h0ZWQobnVtYmVyOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5oaWdobGlnaHRlZE51bWJlcnMuaW5jbHVkZXMobnVtYmVyKTtcbiAgfVxuXG4gIGlzU2VsZWN0YWJsZSh0aWNrZXQ6IFRpY2tldERhdGEpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5wcm9wcy5zZWxlY3Rpb25Nb2RlID09PSAnbm9uZScpIHJldHVybiBmYWxzZTtcblxuICAgIC8vIENoZWNrIGlmIHNvbGQvcmVzZXJ2ZWQgYW5kIGFkbWluIG92ZXJyaWRlXG4gICAgaWYgKHRpY2tldC5zdGF0dXMgPT09ICdzb2xkJyB8fCB0aWNrZXQuc3RhdHVzID09PSAncmVzZXJ2ZWQnKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9wcy5hbGxvd1NlbGVjdFNvbGQgPT09IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHRpY2tldC5zdGF0dXMgPT09ICdkaXNhYmxlZCcpIHJldHVybiBmYWxzZTtcblxuICAgIC8vIENoZWNrIG1heCBzZWxlY3Rpb25cbiAgICBpZiAoXG4gICAgICB0aWNrZXQuc3RhdHVzICE9PSAnc2VsZWN0ZWQnICYmXG4gICAgICB0aGlzLnByb3BzLm1heFNlbGVjdGlvbiAmJlxuICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldHMubGVuZ3RoID49IHRoaXMucHJvcHMubWF4U2VsZWN0aW9uXG4gICAgKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBvblRpY2tldENsaWNrKHRpY2tldDogVGlja2V0RGF0YSk6IHZvaWQge1xuICAgIGNvbnN0IGlzU2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGVkVGlja2V0cy5pbmNsdWRlcyh0aWNrZXQubnVtYmVyKTtcblxuICAgIC8vIEVtaXQgY2xpY2sgZXZlbnQgcmVnYXJkbGVzc1xuICAgIHRoaXMudGlja2V0Q2xpY2suZW1pdCh7XG4gICAgICBudW1iZXI6IHRpY2tldC5udW1iZXIsXG4gICAgICBzdGF0dXM6IHRpY2tldC5zdGF0dXMsXG4gICAgICBzZWxlY3RlZDogdGhpcy5pc1NlbGVjdGFibGUodGlja2V0KSA/ICFpc1NlbGVjdGVkIDogbnVsbCxcbiAgICB9KTtcblxuICAgIGlmICghdGhpcy5pc1NlbGVjdGFibGUodGlja2V0KSAmJiB0aWNrZXQuc3RhdHVzICE9PSAnc2VsZWN0ZWQnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIHNlbGVjdGlvblxuICAgIGlmIChpc1NlbGVjdGVkKSB7XG4gICAgICAvLyBEZXNlbGVjdFxuICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldHMgPSB0aGlzLnNlbGVjdGVkVGlja2V0cy5maWx0ZXIobiA9PiBuICE9PSB0aWNrZXQubnVtYmVyKTtcbiAgICAgIHRpY2tldC5zdGF0dXMgPSAnYXZhaWxhYmxlJztcblxuICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdCh7XG4gICAgICAgIHNlbGVjdGVkVGlja2V0czogWy4uLnRoaXMuc2VsZWN0ZWRUaWNrZXRzXSxcbiAgICAgICAgY2hhbmdlZFRpY2tldDogdGlja2V0Lm51bWJlcixcbiAgICAgICAgYWN0aW9uOiAnZGVzZWxlY3QnLFxuICAgICAgICBjb3VudDogdGhpcy5zZWxlY3RlZFRpY2tldHMubGVuZ3RoLFxuICAgICAgICBtYXhSZWFjaGVkOiBmYWxzZSxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTZWxlY3RcbiAgICAgIGlmICh0aGlzLnByb3BzLnNlbGVjdGlvbk1vZGUgPT09ICdzaW5nbGUnKSB7XG4gICAgICAgIC8vIERlc2VsZWN0IHByZXZpb3VzXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUaWNrZXRzLmZvckVhY2gobnVtID0+IHtcbiAgICAgICAgICBjb25zdCB0ID0gdGhpcy50aWNrZXRzLmZpbmQoeCA9PiB4Lm51bWJlciA9PT0gbnVtKTtcbiAgICAgICAgICBpZiAodCkgdC5zdGF0dXMgPSAnYXZhaWxhYmxlJztcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUaWNrZXRzID0gW3RpY2tldC5udW1iZXJdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRpY2tldHMucHVzaCh0aWNrZXQubnVtYmVyKTtcbiAgICAgIH1cblxuICAgICAgdGlja2V0LnN0YXR1cyA9ICdzZWxlY3RlZCc7XG5cbiAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQoe1xuICAgICAgICBzZWxlY3RlZFRpY2tldHM6IFsuLi50aGlzLnNlbGVjdGVkVGlja2V0c10sXG4gICAgICAgIGNoYW5nZWRUaWNrZXQ6IHRpY2tldC5udW1iZXIsXG4gICAgICAgIGFjdGlvbjogJ3NlbGVjdCcsXG4gICAgICAgIGNvdW50OiB0aGlzLnNlbGVjdGVkVGlja2V0cy5sZW5ndGgsXG4gICAgICAgIG1heFJlYWNoZWQ6IHRoaXMucHJvcHMubWF4U2VsZWN0aW9uXG4gICAgICAgICAgPyB0aGlzLnNlbGVjdGVkVGlja2V0cy5sZW5ndGggPj0gdGhpcy5wcm9wcy5tYXhTZWxlY3Rpb25cbiAgICAgICAgICA6IGZhbHNlLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgc2VsZWN0UmFuZG9tKCk6IHZvaWQge1xuICAgIGNvbnN0IGNvdW50ID0gdGhpcy5wcm9wcy5yYW5kb21TZWxlY3RDb3VudCB8fCAxO1xuICAgIGNvbnN0IGF2YWlsYWJsZSA9IHRoaXMudGlja2V0cy5maWx0ZXIoXG4gICAgICB0ID0+IHQuc3RhdHVzID09PSAnYXZhaWxhYmxlJyAmJiAhdGhpcy5zZWxlY3RlZFRpY2tldHMuaW5jbHVkZXModC5udW1iZXIpXG4gICAgKTtcblxuICAgIC8vIERldGVybWluZSBob3cgbWFueSB3ZSBjYW4gc2VsZWN0XG4gICAgY29uc3QgbWF4Q2FuU2VsZWN0ID0gdGhpcy5wcm9wcy5tYXhTZWxlY3Rpb25cbiAgICAgID8gTWF0aC5taW4oY291bnQsIHRoaXMucHJvcHMubWF4U2VsZWN0aW9uIC0gdGhpcy5zZWxlY3RlZFRpY2tldHMubGVuZ3RoKVxuICAgICAgOiBjb3VudDtcblxuICAgIGlmIChhdmFpbGFibGUubGVuZ3RoID09PSAwIHx8IG1heENhblNlbGVjdCA8PSAwKSByZXR1cm47XG5cbiAgICAvLyBSYW5kb20gc2h1ZmZsZSBhbmQgcGlja1xuICAgIGNvbnN0IHNodWZmbGVkID0gWy4uLmF2YWlsYWJsZV0uc29ydCgoKSA9PiBNYXRoLnJhbmRvbSgpIC0gMC41KTtcbiAgICBjb25zdCB0b1NlbGVjdCA9IHNodWZmbGVkLnNsaWNlKDAsIE1hdGgubWluKG1heENhblNlbGVjdCwgYXZhaWxhYmxlLmxlbmd0aCkpO1xuXG4gICAgdG9TZWxlY3QuZm9yRWFjaCh0aWNrZXQgPT4ge1xuICAgICAgdGlja2V0LnN0YXR1cyA9ICdzZWxlY3RlZCc7XG4gICAgICB0aGlzLnNlbGVjdGVkVGlja2V0cy5wdXNoKHRpY2tldC5udW1iZXIpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdCh7XG4gICAgICBzZWxlY3RlZFRpY2tldHM6IFsuLi50aGlzLnNlbGVjdGVkVGlja2V0c10sXG4gICAgICBjaGFuZ2VkVGlja2V0OiB0b1NlbGVjdFt0b1NlbGVjdC5sZW5ndGggLSAxXS5udW1iZXIsXG4gICAgICBhY3Rpb246ICdzZWxlY3QnLFxuICAgICAgY291bnQ6IHRoaXMuc2VsZWN0ZWRUaWNrZXRzLmxlbmd0aCxcbiAgICAgIG1heFJlYWNoZWQ6IHRoaXMucHJvcHMubWF4U2VsZWN0aW9uXG4gICAgICAgID8gdGhpcy5zZWxlY3RlZFRpY2tldHMubGVuZ3RoID49IHRoaXMucHJvcHMubWF4U2VsZWN0aW9uXG4gICAgICAgIDogZmFsc2UsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXIgYWxsIHNlbGVjdGlvbnMuXG4gICAqL1xuICBjbGVhclNlbGVjdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkVGlja2V0cy5mb3JFYWNoKG51bSA9PiB7XG4gICAgICBjb25zdCB0aWNrZXQgPSB0aGlzLnRpY2tldHMuZmluZCh0ID0+IHQubnVtYmVyID09PSBudW0pO1xuICAgICAgaWYgKHRpY2tldCkgdGlja2V0LnN0YXR1cyA9ICdhdmFpbGFibGUnO1xuICAgIH0pO1xuICAgIHRoaXMuc2VsZWN0ZWRUaWNrZXRzID0gW107XG4gIH1cblxuICAvKipcbiAgICogR2V0IHNlbGVjdGVkIHRpY2tldCBudW1iZXJzLlxuICAgKi9cbiAgZ2V0U2VsZWN0ZWRUaWNrZXRzKCk6IG51bWJlcltdIHtcbiAgICByZXR1cm4gWy4uLnRoaXMuc2VsZWN0ZWRUaWNrZXRzXTtcbiAgfVxuXG4gIGdldCBhdmFpbGFibGVDb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnRpY2tldHMuZmlsdGVyKHQgPT4gdC5zdGF0dXMgPT09ICdhdmFpbGFibGUnKS5sZW5ndGg7XG4gIH1cblxuICBnZXQgc29sZENvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMudGlja2V0cy5maWx0ZXIodCA9PiB0LnN0YXR1cyA9PT0gJ3NvbGQnKS5sZW5ndGg7XG4gIH1cblxuICBnZXRMZWdlbmRJdGVtcygpOiBUaWNrZXRHcmlkTGVnZW5kSXRlbVtdIHtcbiAgICBpZiAodGhpcy5wcm9wcy5sZWdlbmRJdGVtcykge1xuICAgICAgcmV0dXJuIHRoaXMucHJvcHMubGVnZW5kSXRlbXM7XG4gICAgfVxuXG4gICAgY29uc3QgaXRlbXM6IFRpY2tldEdyaWRMZWdlbmRJdGVtW10gPSBbXG4gICAgICB7IHN0YXR1czogJ2F2YWlsYWJsZScsIGxhYmVsOiBERUZBVUxUX0xFR0VORF9MQUJFTFMuYXZhaWxhYmxlLCBjb3VudDogdGhpcy5hdmFpbGFibGVDb3VudCB9LFxuICAgICAgeyBzdGF0dXM6ICdzZWxlY3RlZCcsIGxhYmVsOiBERUZBVUxUX0xFR0VORF9MQUJFTFMuc2VsZWN0ZWQsIGNvdW50OiB0aGlzLnNlbGVjdGVkVGlja2V0cy5sZW5ndGggfSxcbiAgICBdO1xuXG4gICAgaWYgKHRoaXMucHJvcHMuc29sZFRpY2tldHM/Lmxlbmd0aCkge1xuICAgICAgaXRlbXMucHVzaCh7IHN0YXR1czogJ3NvbGQnLCBsYWJlbDogREVGQVVMVF9MRUdFTkRfTEFCRUxTLnNvbGQsIGNvdW50OiB0aGlzLnNvbGRDb3VudCB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5wcm9wcy5yZXNlcnZlZFRpY2tldHM/Lmxlbmd0aCkge1xuICAgICAgaXRlbXMucHVzaCh7XG4gICAgICAgIHN0YXR1czogJ3Jlc2VydmVkJyxcbiAgICAgICAgbGFiZWw6IERFRkFVTFRfTEVHRU5EX0xBQkVMUy5yZXNlcnZlZCxcbiAgICAgICAgY291bnQ6IHRoaXMucHJvcHMucmVzZXJ2ZWRUaWNrZXRzLmxlbmd0aCxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBpdGVtcztcbiAgfVxuXG4gIGZvcm1hdE51bWJlcihudW06IG51bWJlcik6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMucHJvcHMubnVtYmVyUGFkZGluZykge1xuICAgICAgcmV0dXJuIFN0cmluZyhudW0pLnBhZFN0YXJ0KHRoaXMucHJvcHMubnVtYmVyUGFkZGluZywgJzAnKTtcbiAgICB9XG4gICAgcmV0dXJuIFN0cmluZyhudW0pO1xuICB9XG5cbiAgZ2V0VGlja2V0QXJpYUxhYmVsKHRpY2tldDogVGlja2V0RGF0YSk6IHN0cmluZyB7XG4gICAgY29uc3Qgc3RhdHVzTGFiZWwgPSBERUZBVUxUX0xFR0VORF9MQUJFTFNbdGlja2V0LnN0YXR1c107XG4gICAgcmV0dXJuIGBCb2xldG8gJHt0aGlzLmZvcm1hdE51bWJlcih0aWNrZXQubnVtYmVyKX0sICR7c3RhdHVzTGFiZWx9YDtcbiAgfVxuXG4gIGdldFNlYXJjaFBsYWNlaG9sZGVyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMuc2VhcmNoUGxhY2Vob2xkZXIgfHwgJ0J1c2NhciBuw7ptZXJvLi4uJztcbiAgfVxuXG4gIGdldFJhbmRvbVNlbGVjdExhYmVsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucHJvcHMucmFuZG9tU2VsZWN0TGFiZWwgfHwgJ0FsZWF0b3Jpbyc7XG4gIH1cblxuICBnZXRDb2xvcigpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLnByb3BzLmNvbG9yKSB7XG4gICAgICByZXR1cm4gYHZhcigtLWlvbi1jb2xvci0ke3RoaXMucHJvcHMuY29sb3J9KWA7XG4gICAgfVxuICAgIHJldHVybiAndmFyKC0taW9uLWNvbG9yLXByaW1hcnkpJztcbiAgfVxufVxuIl19
@@ -1,11 +0,0 @@
1
- /**
2
- * Default legend labels in Spanish.
3
- */
4
- export const DEFAULT_LEGEND_LABELS = {
5
- available: 'Disponible',
6
- sold: 'Vendido',
7
- reserved: 'Reservado',
8
- selected: 'Seleccionado',
9
- disabled: 'No disponible',
10
- };
11
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvbW9sZWN1bGVzL3RpY2tldC1ncmlkL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQXVJQTs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFpQztJQUNqRSxTQUFTLEVBQUUsWUFBWTtJQUN2QixJQUFJLEVBQUUsU0FBUztJQUNmLFFBQVEsRUFBRSxXQUFXO0lBQ3JCLFFBQVEsRUFBRSxjQUFjO0lBQ3hCLFFBQVEsRUFBRSxlQUFlO0NBQzFCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb2xvciB9IGZyb20gJ0Bpb25pYy9jb3JlJztcblxuLyoqXG4gKiBUaWNrZXQgc3RhdHVzIGluIHRoZSBncmlkLlxuICovXG5leHBvcnQgdHlwZSBUaWNrZXRTdGF0dXMgPSAnYXZhaWxhYmxlJyB8ICdzb2xkJyB8ICdyZXNlcnZlZCcgfCAnc2VsZWN0ZWQnIHwgJ2Rpc2FibGVkJztcblxuLyoqXG4gKiBJbmRpdmlkdWFsIHRpY2tldCBkYXRhLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRpY2tldERhdGEge1xuICAvKiogVGlja2V0IG51bWJlciAqL1xuICBudW1iZXI6IG51bWJlcjtcbiAgLyoqIFRpY2tldCBzdGF0dXMgKi9cbiAgc3RhdHVzOiBUaWNrZXRTdGF0dXM7XG4gIC8qKiBPcHRpb25hbCBvd25lciBuYW1lIChmb3Igc29sZCB0aWNrZXRzKSAqL1xuICBvd25lcj86IHN0cmluZztcbiAgLyoqIE9wdGlvbmFsIGN1c3RvbSBsYWJlbCAqL1xuICBsYWJlbD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBMZWdlbmQgaXRlbSBmb3IgdGlja2V0IGdyaWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGlja2V0R3JpZExlZ2VuZEl0ZW0ge1xuICAvKiogU3RhdHVzIHRoaXMgbGVnZW5kIHJlcHJlc2VudHMgKi9cbiAgc3RhdHVzOiBUaWNrZXRTdGF0dXM7XG4gIC8qKiBEaXNwbGF5IGxhYmVsICovXG4gIGxhYmVsOiBzdHJpbmc7XG4gIC8qKiBPcHRpb25hbCBjb3VudCAqL1xuICBjb3VudD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBNZXRhZGF0YSBmb3IgdGhlIHRpY2tldCBncmlkIGNvbXBvbmVudC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUaWNrZXRHcmlkTWV0YWRhdGEge1xuICAvKiogVG90YWwgbnVtYmVyIG9mIHRpY2tldHMgKi9cbiAgdG90YWxUaWNrZXRzOiBudW1iZXI7XG4gIC8qKiBTdGFydGluZyB0aWNrZXQgbnVtYmVyIChkZWZhdWx0OiAxKSAqL1xuICBzdGFydE51bWJlcj86IG51bWJlcjtcbiAgLyoqIE51bWJlcnMgb2Ygc29sZCB0aWNrZXRzICovXG4gIHNvbGRUaWNrZXRzPzogbnVtYmVyW107XG4gIC8qKiBOdW1iZXJzIG9mIHJlc2VydmVkIHRpY2tldHMgKi9cbiAgcmVzZXJ2ZWRUaWNrZXRzPzogbnVtYmVyW107XG4gIC8qKiBOdW1iZXJzIG9mIGRpc2FibGVkIHRpY2tldHMgKi9cbiAgZGlzYWJsZWRUaWNrZXRzPzogbnVtYmVyW107XG4gIC8qKiBDdXJyZW50bHkgc2VsZWN0ZWQgdGlja2V0cyAqL1xuICBzZWxlY3RlZFRpY2tldHM/OiBudW1iZXJbXTtcbiAgLyoqIEN1c3RvbSB0aWNrZXQgZGF0YSAob3ZlcnJpZGVzIGNvbXB1dGVkIHN0YXR1cykgKi9cbiAgdGlja2V0RGF0YT86IFRpY2tldERhdGFbXTtcblxuICAvLyA9PT0gU2VsZWN0aW9uID09PVxuICAvKiogU2VsZWN0aW9uIG1vZGUgKi9cbiAgc2VsZWN0aW9uTW9kZT86ICdzaW5nbGUnIHwgJ211bHRpcGxlJyB8ICdub25lJztcbiAgLyoqIE1heGltdW0gdGlja2V0cyB0aGF0IGNhbiBiZSBzZWxlY3RlZCAqL1xuICBtYXhTZWxlY3Rpb24/OiBudW1iZXI7XG4gIC8qKiBNaW5pbXVtIHRpY2tldHMgcmVxdWlyZWQgKi9cbiAgbWluU2VsZWN0aW9uPzogbnVtYmVyO1xuICAvKiogQWxsb3cgc2VsZWN0aW5nIHNvbGQvcmVzZXJ2ZWQgdGlja2V0cyAoZm9yIGFkbWluKSAqL1xuICBhbGxvd1NlbGVjdFNvbGQ/OiBib29sZWFuO1xuXG4gIC8vID09PSBEaXNwbGF5ID09PVxuICAvKiogTnVtYmVyIG9mIGNvbHVtbnMgKi9cbiAgY29sdW1ucz86IG51bWJlcjtcbiAgLyoqIFNob3cgbGVnZW5kICovXG4gIHNob3dMZWdlbmQ/OiBib29sZWFuO1xuICAvKiogTGVnZW5kIHBvc2l0aW9uICovXG4gIGxlZ2VuZFBvc2l0aW9uPzogJ3RvcCcgfCAnYm90dG9tJztcbiAgLyoqIEN1c3RvbSBsZWdlbmQgaXRlbXMgKi9cbiAgbGVnZW5kSXRlbXM/OiBUaWNrZXRHcmlkTGVnZW5kSXRlbVtdO1xuICAvKiogU2hvdyB0aWNrZXQgY291bnQgc3VtbWFyeSAqL1xuICBzaG93U3VtbWFyeT86IGJvb2xlYW47XG4gIC8qKiBTaG93IHNlYXJjaC9maWx0ZXIgaW5wdXQgKi9cbiAgc2hvd1NlYXJjaD86IGJvb2xlYW47XG4gIC8qKiBTZWFyY2ggcGxhY2Vob2xkZXIgKi9cbiAgc2VhcmNoUGxhY2Vob2xkZXI/OiBzdHJpbmc7XG4gIC8qKiBUaWNrZXQgbnVtYmVyIHBhZGRpbmcgKGUuZy4sIDMgPSBcIjAwMVwiKSAqL1xuICBudW1iZXJQYWRkaW5nPzogbnVtYmVyO1xuXG4gIC8vID09PSBTdHlsaW5nID09PVxuICAvKiogQ29tcG9uZW50IGNvbG9yIGZvciBzZWxlY3RlZCBzdGF0ZSAqL1xuICBjb2xvcj86IENvbG9yO1xuICAvKiogVGlja2V0IHNpemUgKi9cbiAgdGlja2V0U2l6ZT86ICdzbWFsbCcgfCAnbWVkaXVtJyB8ICdsYXJnZSc7XG4gIC8qKiBHcmlkIGdhcCAqL1xuICBnYXA/OiBudW1iZXI7XG4gIC8qKiBDdXN0b20gQ1NTIGNsYXNzICovXG4gIGNzc0NsYXNzPzogc3RyaW5nO1xuXG4gIC8vID09PSBRdWljayBzZWxlY3QgPT09XG4gIC8qKiBTaG93IHJhbmRvbSBzZWxlY3Rpb24gYnV0dG9uICovXG4gIHNob3dSYW5kb21TZWxlY3Q/OiBib29sZWFuO1xuICAvKiogUmFuZG9tIHNlbGVjdGlvbiBjb3VudCAqL1xuICByYW5kb21TZWxlY3RDb3VudD86IG51bWJlcjtcbiAgLyoqIFJhbmRvbSBzZWxlY3QgYnV0dG9uIGxhYmVsICovXG4gIHJhbmRvbVNlbGVjdExhYmVsPzogc3RyaW5nO1xuXG4gIC8vID09PSBSZWFjdGl2ZSBjb250ZW50ID09PVxuICAvKiogQ29udGVudCBrZXkgZm9yIHNlYXJjaCBwbGFjZWhvbGRlciAqL1xuICBzZWFyY2hQbGFjZWhvbGRlckNvbnRlbnRLZXk/OiBzdHJpbmc7XG4gIC8qKiBDb250ZW50IGtleSBmb3IgcmFuZG9tIHNlbGVjdCBsYWJlbCAqL1xuICByYW5kb21TZWxlY3RMYWJlbENvbnRlbnRLZXk/OiBzdHJpbmc7XG4gIC8qKiBDb250ZW50IGNsYXNzIGZvciByZWFjdGl2ZSBjb250ZW50ICovXG4gIGNvbnRlbnRDbGFzcz86IHN0cmluZztcbn1cblxuLyoqXG4gKiBFdmVudCBlbWl0dGVkIHdoZW4gc2VsZWN0aW9uIGNoYW5nZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGlja2V0R3JpZFNlbGVjdGlvbkV2ZW50IHtcbiAgLyoqIEN1cnJlbnRseSBzZWxlY3RlZCB0aWNrZXQgbnVtYmVycyAqL1xuICBzZWxlY3RlZFRpY2tldHM6IG51bWJlcltdO1xuICAvKiogTGFzdCBjaGFuZ2VkIHRpY2tldCBudW1iZXIgKi9cbiAgY2hhbmdlZFRpY2tldDogbnVtYmVyO1xuICAvKiogV2hldGhlciB0aGUgdGlja2V0IHdhcyBzZWxlY3RlZCBvciBkZXNlbGVjdGVkICovXG4gIGFjdGlvbjogJ3NlbGVjdCcgfCAnZGVzZWxlY3QnO1xuICAvKiogVG90YWwgY291bnQgb2Ygc2VsZWN0ZWQgdGlja2V0cyAqL1xuICBjb3VudDogbnVtYmVyO1xuICAvKiogV2hldGhlciBtYXggc2VsZWN0aW9uIHJlYWNoZWQgKi9cbiAgbWF4UmVhY2hlZDogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBFdmVudCBlbWl0dGVkIHdoZW4gYSB0aWNrZXQgaXMgY2xpY2tlZCAocmVnYXJkbGVzcyBvZiBzZWxlY3Rpb24pLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRpY2tldEdyaWRDbGlja0V2ZW50IHtcbiAgLyoqIFRpY2tldCBudW1iZXIgKi9cbiAgbnVtYmVyOiBudW1iZXI7XG4gIC8qKiBUaWNrZXQgc3RhdHVzICovXG4gIHN0YXR1czogVGlja2V0U3RhdHVzO1xuICAvKiogV2hldGhlciBpdCB3YXMgc2VsZWN0ZWQvZGVzZWxlY3RlZCAobnVsbCBpZiBub3Qgc2VsZWN0YWJsZSkgKi9cbiAgc2VsZWN0ZWQ6IGJvb2xlYW4gfCBudWxsO1xufVxuXG4vKipcbiAqIERlZmF1bHQgbGVnZW5kIGxhYmVscyBpbiBTcGFuaXNoLlxuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9MRUdFTkRfTEFCRUxTOiBSZWNvcmQ8VGlja2V0U3RhdHVzLCBzdHJpbmc+ID0ge1xuICBhdmFpbGFibGU6ICdEaXNwb25pYmxlJyxcbiAgc29sZDogJ1ZlbmRpZG8nLFxuICByZXNlcnZlZDogJ1Jlc2VydmFkbycsXG4gIHNlbGVjdGVkOiAnU2VsZWNjaW9uYWRvJyxcbiAgZGlzYWJsZWQ6ICdObyBkaXNwb25pYmxlJyxcbn07XG4iXX0=
@@ -1,9 +0,0 @@
1
- /**
2
- * Default labels.
3
- */
4
- export const DEFAULT_WINNER_LABELS = {
5
- winner: '¡Ganador!',
6
- ticket: 'Boleto #',
7
- prize: 'Premio:',
8
- };
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvbW9sZWN1bGVzL3dpbm5lci1kaXNwbGF5L3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQXlIQTs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHO0lBQ25DLE1BQU0sRUFBRSxXQUFXO0lBQ25CLE1BQU0sRUFBRSxVQUFVO0lBQ2xCLEtBQUssRUFBRSxTQUFTO0NBQ2pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb2xvciB9IGZyb20gJ0Bpb25pYy9jb3JlJztcbmltcG9ydCB7IEF2YXRhck1ldGFkYXRhIH0gZnJvbSAnLi4vLi4vYXRvbXMvYXZhdGFyL3R5cGVzJztcblxuLyoqXG4gKiBXaW5uZXIgaW5mb3JtYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2lubmVySW5mbyB7XG4gIC8qKiBXaW5uZXIncyBuYW1lICovXG4gIG5hbWU6IHN0cmluZztcbiAgLyoqIFdpbm5lcidzIHRpY2tldCBudW1iZXIgKi9cbiAgdGlja2V0TnVtYmVyOiBudW1iZXIgfCBzdHJpbmc7XG4gIC8qKiBXaW5uZXIncyBhdmF0YXIgKi9cbiAgYXZhdGFyPzogQXZhdGFyTWV0YWRhdGE7XG4gIC8qKiBQcml6ZSB3b24gKi9cbiAgcHJpemU/OiBzdHJpbmc7XG4gIC8qKiBQcml6ZSBkZXNjcmlwdGlvbiAqL1xuICBwcml6ZURlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAvKiogUHJpemUgaW1hZ2UgVVJMICovXG4gIHByaXplSW1hZ2U/OiBzdHJpbmc7XG4gIC8qKiBQcml6ZSB2YWx1ZSAqL1xuICBwcml6ZVZhbHVlPzogbnVtYmVyO1xuICAvKiogV2lubmVyJ3MgbG9jYXRpb24gKGNpdHksIGNvdW50cnkpICovXG4gIGxvY2F0aW9uPzogc3RyaW5nO1xuICAvKiogQWRkaXRpb25hbCB3aW5uZXIgaW5mbyAqL1xuICBjdXN0b21EYXRhPzogUmVjb3JkPHN0cmluZywgYW55Pjtcbn1cblxuLyoqXG4gKiBBbmltYXRpb24gdHlwZSBmb3Igd2lubmVyIHJldmVhbC5cbiAqL1xuZXhwb3J0IHR5cGUgV2lubmVyQW5pbWF0aW9uVHlwZSA9XG4gIHwgJ25vbmUnXG4gIHwgJ2ZhZGUnXG4gIHwgJ3pvb20nXG4gIHwgJ3NsaWRlJ1xuICB8ICdjb25mZXR0aSdcbiAgfCAnc3BvdGxpZ2h0JztcblxuLyoqXG4gKiBEaXNwbGF5IG1vZGUgZm9yIHRoZSB3aW5uZXIuXG4gKi9cbmV4cG9ydCB0eXBlIFdpbm5lckRpc3BsYXlNb2RlID1cbiAgfCAnY29tcGFjdCcgICAgLy8gSnVzdCBuYW1lIGFuZCB0aWNrZXRcbiAgfCAnc3RhbmRhcmQnICAgLy8gTmFtZSwgdGlja2V0LCBwcml6ZVxuICB8ICdmdWxsJyAgICAgICAvLyBBbGwgaW5mbyB3aXRoIGltYWdlXG4gIHwgJ2NlbGVicmF0aW9uJzsgLy8gRnVsbCB3aXRoIGFuaW1hdGlvbnNcblxuLyoqXG4gKiBNZXRhZGF0YSBmb3IgdGhlIHdpbm5lciBkaXNwbGF5IGNvbXBvbmVudC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXaW5uZXJEaXNwbGF5TWV0YWRhdGEge1xuICAvKiogV2lubmVyIGluZm9ybWF0aW9uICovXG4gIHdpbm5lcjogV2lubmVySW5mbztcblxuICAvLyA9PT0gRGlzcGxheSBvcHRpb25zID09PVxuICAvKiogRGlzcGxheSBtb2RlICovXG4gIG1vZGU/OiBXaW5uZXJEaXNwbGF5TW9kZTtcbiAgLyoqIFNpemUgdmFyaWFudCAqL1xuICBzaXplPzogJ3NtYWxsJyB8ICdtZWRpdW0nIHwgJ2xhcmdlJztcbiAgLyoqIFNob3cgY29uZmV0dGkgYW5pbWF0aW9uICovXG4gIHNob3dDb25mZXR0aT86IGJvb2xlYW47XG4gIC8qKiBTaG93IHRyb3BoeSBpY29uICovXG4gIHNob3dUcm9waHk/OiBib29sZWFuO1xuICAvKiogU2hvdyB0aWNrZXQgbnVtYmVyICovXG4gIHNob3dUaWNrZXROdW1iZXI/OiBib29sZWFuO1xuICAvKiogU2hvdyBwcml6ZSBpbmZvICovXG4gIHNob3dQcml6ZT86IGJvb2xlYW47XG4gIC8qKiBTaG93IHByaXplIHZhbHVlICovXG4gIHNob3dQcml6ZVZhbHVlPzogYm9vbGVhbjtcbiAgLyoqIFNob3cgbG9jYXRpb24gKi9cbiAgc2hvd0xvY2F0aW9uPzogYm9vbGVhbjtcbiAgLyoqIE51bWJlciBwYWRkaW5nIGZvciB0aWNrZXQgKi9cbiAgbnVtYmVyUGFkZGluZz86IG51bWJlcjtcblxuICAvLyA9PT0gQW5pbWF0aW9uID09PVxuICAvKiogQW5pbWF0aW9uIHR5cGUgKi9cbiAgYW5pbWF0aW9uPzogV2lubmVyQW5pbWF0aW9uVHlwZTtcbiAgLyoqIEFuaW1hdGlvbiBkdXJhdGlvbiBpbiBtcyAqL1xuICBhbmltYXRpb25EdXJhdGlvbj86IG51bWJlcjtcbiAgLyoqIERlbGF5IGJlZm9yZSBzaG93aW5nIChmb3Igc3VzcGVuc2UpICovXG4gIHJldmVhbERlbGF5PzogbnVtYmVyO1xuICAvKiogQXV0by1wbGF5IGFuaW1hdGlvbiBvbiBpbml0ICovXG4gIGF1dG9QbGF5PzogYm9vbGVhbjtcblxuICAvLyA9PT0gU3R5bGluZyA9PT1cbiAgLyoqIENvbXBvbmVudCBjb2xvciAqL1xuICBjb2xvcj86IENvbG9yO1xuICAvKiogQ3VzdG9tIENTUyBjbGFzcyAqL1xuICBjc3NDbGFzcz86IHN0cmluZztcbiAgLyoqIEJhY2tncm91bmQgc3R5bGUgKi9cbiAgYmFja2dyb3VuZD86ICdzb2xpZCcgfCAnZ3JhZGllbnQnIHwgJ3RyYW5zcGFyZW50JztcblxuICAvLyA9PT0gTGFiZWxzID09PVxuICAvKiogV2lubmVyIGxhYmVsIChlLmcuLCBcIsKhR2FuYWRvciFcIikgKi9cbiAgd2lubmVyTGFiZWw/OiBzdHJpbmc7XG4gIC8qKiBUaWNrZXQgbGFiZWwgKGUuZy4sIFwiQm9sZXRvICNcIikgKi9cbiAgdGlja2V0TGFiZWw/OiBzdHJpbmc7XG4gIC8qKiBQcml6ZSBsYWJlbCAoZS5nLiwgXCJQcmVtaW86XCIpICovXG4gIHByaXplTGFiZWw/OiBzdHJpbmc7XG5cbiAgLy8gPT09IFJlYWN0aXZlIGNvbnRlbnQgPT09XG4gIC8qKiBDb250ZW50IGNsYXNzIGZvciByZWFjdGl2ZSBjb250ZW50ICovXG4gIGNvbnRlbnRDbGFzcz86IHN0cmluZztcbiAgLyoqIENvbnRlbnQga2V5IGZvciB3aW5uZXIgbGFiZWwgKi9cbiAgd2lubmVyTGFiZWxDb250ZW50S2V5Pzogc3RyaW5nO1xuICAvKiogQ29udGVudCBrZXkgZm9yIHRpY2tldCBsYWJlbCAqL1xuICB0aWNrZXRMYWJlbENvbnRlbnRLZXk/OiBzdHJpbmc7XG4gIC8qKiBDb250ZW50IGtleSBmb3IgcHJpemUgbGFiZWwgKi9cbiAgcHJpemVMYWJlbENvbnRlbnRLZXk/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogRXZlbnQgZW1pdHRlZCB3aGVuIGFuaW1hdGlvbiBjb21wbGV0ZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgV2lubmVyRGlzcGxheUFuaW1hdGlvbkV2ZW50IHtcbiAgLyoqIEFuaW1hdGlvbiB0eXBlIHRoYXQgY29tcGxldGVkICovXG4gIGFuaW1hdGlvbjogV2lubmVyQW5pbWF0aW9uVHlwZTtcbiAgLyoqIFdpbm5lciBpbmZvICovXG4gIHdpbm5lcjogV2lubmVySW5mbztcbn1cblxuLyoqXG4gKiBEZWZhdWx0IGxhYmVscy5cbiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfV0lOTkVSX0xBQkVMUyA9IHtcbiAgd2lubmVyOiAnwqFHYW5hZG9yIScsXG4gIHRpY2tldDogJ0JvbGV0byAjJyxcbiAgcHJpemU6ICdQcmVtaW86Jyxcbn07XG4iXX0=