valtech-components 4.0.429 → 4.0.430
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/components/organisms/mini-games/christianity-game.component.mjs +275 -156
- package/esm2022/lib/components/organisms/mini-games/mini-games.i18n.mjs +27 -1
- package/esm2022/lib/version.mjs +2 -2
- package/fesm2022/valtech-components.mjs +301 -156
- package/fesm2022/valtech-components.mjs.map +1 -1
- package/lib/components/organisms/mini-games/chessimals-game.component.d.ts +1 -1
- package/lib/components/organisms/mini-games/christianity-game.component.d.ts +18 -1
- package/lib/version.d.ts +1 -1
- package/package.json +1 -1
|
@@ -63,11 +63,13 @@ export class ChristianityGameComponent {
|
|
|
63
63
|
this.game = signal(structuredClone(STARTING_GAME));
|
|
64
64
|
this.selectedHandCard = signal(null);
|
|
65
65
|
this.selectedAttacker = signal(null);
|
|
66
|
+
this.selectedPreview = signal(null);
|
|
66
67
|
this.showHistory = signal(false);
|
|
67
68
|
this.player = computed(() => this.game().players.P1);
|
|
68
69
|
this.opponent = computed(() => this.game().players.P2);
|
|
69
70
|
this.currentPlayer = computed(() => this.game().players[this.game().turnOwner]);
|
|
70
71
|
this.isOwnTurn = computed(() => this.game().turnOwner === 'P1');
|
|
72
|
+
this.hasOpponentGuards = computed(() => this.opponent().battleZone.length > 0);
|
|
71
73
|
this.opponentHandCount = computed(() => this.opponent().handCount ?? this.opponent().hand?.length ?? 0);
|
|
72
74
|
this.statusText = computed(() => {
|
|
73
75
|
const attacker = this.selectedAttacker();
|
|
@@ -76,7 +78,7 @@ export class ChristianityGameComponent {
|
|
|
76
78
|
return this.t('christianityWaitTurn');
|
|
77
79
|
}
|
|
78
80
|
if (attacker) {
|
|
79
|
-
return this.t('christianityChooseTarget');
|
|
81
|
+
return this.hasOpponentGuards() ? this.t('christianityChooseCharacterTarget') : this.t('christianityChooseTarget');
|
|
80
82
|
}
|
|
81
83
|
if (handCard) {
|
|
82
84
|
const card = this.cardDefinition(handCard);
|
|
@@ -95,11 +97,24 @@ export class ChristianityGameComponent {
|
|
|
95
97
|
}
|
|
96
98
|
battleSlots(seat) {
|
|
97
99
|
const cards = this.game().players[seat].battleZone;
|
|
98
|
-
return Array.from({ length:
|
|
100
|
+
return Array.from({ length: 4 }, (_, index) => ({
|
|
99
101
|
trackId: cards[index]?.instanceId ?? `${seat}-empty-${index}`,
|
|
100
102
|
card: cards[index],
|
|
101
103
|
}));
|
|
102
104
|
}
|
|
105
|
+
hiddenHandCards(count) {
|
|
106
|
+
return Array.from({ length: count });
|
|
107
|
+
}
|
|
108
|
+
fanTransform(index, total, opponent) {
|
|
109
|
+
if (total <= 1)
|
|
110
|
+
return opponent ? 'rotate(180deg)' : 'none';
|
|
111
|
+
const center = (total - 1) / 2;
|
|
112
|
+
const offset = index - center;
|
|
113
|
+
const rotate = offset * 5;
|
|
114
|
+
const lift = Math.abs(offset) * 0.25;
|
|
115
|
+
const base = opponent ? 'rotate(180deg)' : '';
|
|
116
|
+
return `${base} translateY(${lift}rem) rotate(${rotate}deg)`;
|
|
117
|
+
}
|
|
103
118
|
readyOfferings(player) {
|
|
104
119
|
return player.offerings.reduce((total, offering) => total + (offering.ready ? offering.value : 0), 0);
|
|
105
120
|
}
|
|
@@ -108,7 +123,7 @@ export class ChristianityGameComponent {
|
|
|
108
123
|
return false;
|
|
109
124
|
if (card.type === 'offering')
|
|
110
125
|
return !this.player().offeringPlayedThisTurn;
|
|
111
|
-
return this.readyOfferings(this.player()) >= card.cost && this.player().battleZone.length <
|
|
126
|
+
return this.readyOfferings(this.player()) >= card.cost && this.player().battleZone.length < 4;
|
|
112
127
|
}
|
|
113
128
|
canPlaySelected() {
|
|
114
129
|
const selected = this.selectedHandCard();
|
|
@@ -117,6 +132,7 @@ export class ChristianityGameComponent {
|
|
|
117
132
|
selectHandCard(cardId) {
|
|
118
133
|
this.selectedAttacker.set(null);
|
|
119
134
|
this.selectedHandCard.set(this.selectedHandCard() === cardId ? null : cardId);
|
|
135
|
+
this.inspectHandCard(cardId);
|
|
120
136
|
}
|
|
121
137
|
playSelectedCard() {
|
|
122
138
|
const cardId = this.selectedHandCard();
|
|
@@ -168,14 +184,36 @@ export class ChristianityGameComponent {
|
|
|
168
184
|
}
|
|
169
185
|
selectAttacker(card) {
|
|
170
186
|
this.selectedHandCard.set(null);
|
|
187
|
+
this.inspectCharacter(card);
|
|
171
188
|
if (!this.isOwnTurn() || !card.canAttack)
|
|
172
189
|
return;
|
|
173
190
|
this.selectedAttacker.set(this.selectedAttacker()?.instanceId === card.instanceId ? null : card);
|
|
174
191
|
}
|
|
192
|
+
handleOpponentCharacter(card) {
|
|
193
|
+
this.inspectCharacter(card);
|
|
194
|
+
if (this.selectedAttacker()) {
|
|
195
|
+
this.attackCharacter(card);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
handleOpponentLeader() {
|
|
199
|
+
this.inspectLeader('P2');
|
|
200
|
+
if (this.selectedAttacker() && !this.hasOpponentGuards()) {
|
|
201
|
+
this.attackLeader();
|
|
202
|
+
}
|
|
203
|
+
}
|
|
175
204
|
attackLeader() {
|
|
176
205
|
const attacker = this.selectedAttacker();
|
|
177
206
|
if (!attacker)
|
|
178
207
|
return;
|
|
208
|
+
if (this.hasOpponentGuards()) {
|
|
209
|
+
this.selectedPreview.set({
|
|
210
|
+
title: this.opponent().leaderName,
|
|
211
|
+
eyebrow: this.t('christianityLeaderCard'),
|
|
212
|
+
meta: `${this.opponent().leaderHp}/${this.opponent().leaderMaxHp}`,
|
|
213
|
+
body: this.t('christianityLeaderProtected'),
|
|
214
|
+
});
|
|
215
|
+
return;
|
|
216
|
+
}
|
|
179
217
|
this.game.update(game => {
|
|
180
218
|
const next = structuredClone(game);
|
|
181
219
|
const liveAttacker = next.players.P1.battleZone.find(card => card.instanceId === attacker.instanceId);
|
|
@@ -230,6 +268,7 @@ export class ChristianityGameComponent {
|
|
|
230
268
|
this.game.set(structuredClone(STARTING_GAME));
|
|
231
269
|
this.selectedHandCard.set(null);
|
|
232
270
|
this.selectedAttacker.set(null);
|
|
271
|
+
this.selectedPreview.set(null);
|
|
233
272
|
}
|
|
234
273
|
historyNames() {
|
|
235
274
|
return this.game()
|
|
@@ -243,6 +282,40 @@ export class ChristianityGameComponent {
|
|
|
243
282
|
game.historyZone.push(...destroyed.map(card => card.cardId));
|
|
244
283
|
player.battleZone = player.battleZone.filter(card => card.currentHp > 0);
|
|
245
284
|
}
|
|
285
|
+
inspectLeader(seat) {
|
|
286
|
+
const player = this.game().players[seat];
|
|
287
|
+
this.selectedPreview.set({
|
|
288
|
+
title: player.leaderName,
|
|
289
|
+
eyebrow: this.t('christianityLeaderCard'),
|
|
290
|
+
meta: `${player.leaderHp}/${player.leaderMaxHp}`,
|
|
291
|
+
body: seat === 'P2' && this.hasOpponentGuards() ? this.t('christianityLeaderProtected') : this.t('christianityLeaderBody'),
|
|
292
|
+
});
|
|
293
|
+
}
|
|
294
|
+
inspectOffering(offering) {
|
|
295
|
+
this.selectedPreview.set({
|
|
296
|
+
title: offering.name,
|
|
297
|
+
eyebrow: this.t('christianityOfferingCard'),
|
|
298
|
+
meta: offering.ready ? this.t('christianityOfferingReady') : this.t('christianityOfferingExhausted'),
|
|
299
|
+
body: this.t('christianityOfferingBody'),
|
|
300
|
+
});
|
|
301
|
+
}
|
|
302
|
+
inspectHandCard(cardId) {
|
|
303
|
+
const card = this.cardDefinition(cardId);
|
|
304
|
+
this.selectedPreview.set({
|
|
305
|
+
title: card.name,
|
|
306
|
+
eyebrow: card.type === 'offering' ? this.t('christianityOfferingCard') : this.t('christianityCharacterCard'),
|
|
307
|
+
meta: card.type === 'offering' ? `+${card.life}` : `${this.t('christianityCost')} ${card.cost} · ${card.attack}/${card.life}`,
|
|
308
|
+
body: card.type === 'offering' ? this.t('christianityOfferingBody') : this.t('christianityCharacterBody'),
|
|
309
|
+
});
|
|
310
|
+
}
|
|
311
|
+
inspectCharacter(card) {
|
|
312
|
+
this.selectedPreview.set({
|
|
313
|
+
title: card.name,
|
|
314
|
+
eyebrow: this.t('christianityCharacterCard'),
|
|
315
|
+
meta: `${card.attack}/${card.currentHp}`,
|
|
316
|
+
body: card.canAttack ? this.t('christianityCharacterReady') : this.t('christianityCharacterExhausted'),
|
|
317
|
+
});
|
|
318
|
+
}
|
|
246
319
|
spendOfferings(player, cost) {
|
|
247
320
|
let remaining = cost;
|
|
248
321
|
player.offerings = player.offerings.map(offering => {
|
|
@@ -266,109 +339,123 @@ export class ChristianityGameComponent {
|
|
|
266
339
|
</div>
|
|
267
340
|
</section>
|
|
268
341
|
|
|
342
|
+
<section class="christianity-hand-fan christianity-hand-fan--opponent" [attr.aria-label]="t('christianityOpponentHand')">
|
|
343
|
+
@for (_ of hiddenHandCards(opponentHandCount()); track $index) {
|
|
344
|
+
<button
|
|
345
|
+
type="button"
|
|
346
|
+
class="christianity-card-preview-card christianity-card-preview-card--back"
|
|
347
|
+
[style.transform]="fanTransform($index, opponentHandCount(), true)"
|
|
348
|
+
[attr.aria-label]="t('christianityHiddenCard')"
|
|
349
|
+
></button>
|
|
350
|
+
}
|
|
351
|
+
</section>
|
|
352
|
+
|
|
269
353
|
<section class="christianity-table" [attr.aria-label]="t('christianityTable')">
|
|
270
|
-
<section class="christianity-player christianity-player--opponent">
|
|
271
|
-
<div class="christianity-
|
|
272
|
-
|
|
273
|
-
<
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
}
|
|
283
|
-
</div>
|
|
284
|
-
</div>
|
|
285
|
-
<div class="christianity-hidden-hand">
|
|
286
|
-
<span>{{ t('christianityHand') }}</span>
|
|
287
|
-
<strong>{{ opponentHandCount() }}</strong>
|
|
288
|
-
</div>
|
|
289
|
-
</div>
|
|
290
|
-
<div class="christianity-battle-zone" [attr.aria-label]="t('christianityOpponentBattle')">
|
|
291
|
-
@for (slot of battleSlots('P2'); track slot.trackId) {
|
|
292
|
-
@if (slot.card) {
|
|
293
|
-
<button
|
|
294
|
-
type="button"
|
|
295
|
-
class="christianity-card christianity-card--battle"
|
|
296
|
-
[class.is-target]="selectedAttacker()"
|
|
297
|
-
(click)="attackCharacter(slot.card)"
|
|
298
|
-
>
|
|
299
|
-
<span>{{ slot.card.name }}</span>
|
|
300
|
-
<strong>{{ slot.card.attack }} / {{ slot.card.currentHp }}</strong>
|
|
301
|
-
</button>
|
|
302
|
-
} @else {
|
|
303
|
-
<span class="christianity-slot"></span>
|
|
304
|
-
}
|
|
354
|
+
<section class="christianity-player-rack christianity-player-rack--opponent">
|
|
355
|
+
<div class="christianity-offerings-zone">
|
|
356
|
+
@for (offering of opponent().offerings; track offering.instanceId) {
|
|
357
|
+
<button
|
|
358
|
+
type="button"
|
|
359
|
+
class="christianity-card-mini christianity-card-mini--offering"
|
|
360
|
+
[class.is-exhausted]="!offering.ready"
|
|
361
|
+
(click)="inspectOffering(offering)"
|
|
362
|
+
>
|
|
363
|
+
<span>{{ t('christianityOfferingCard') }}</span>
|
|
364
|
+
<strong>+{{ offering.value }}</strong>
|
|
365
|
+
</button>
|
|
305
366
|
}
|
|
306
367
|
</div>
|
|
368
|
+
<button type="button" class="christianity-leader-card" [class.is-target]="selectedAttacker() && !hasOpponentGuards()" (click)="handleOpponentLeader()">
|
|
369
|
+
<span>{{ opponent().leaderName }}</span>
|
|
370
|
+
<strong>{{ opponent().leaderHp }}/{{ opponent().leaderMaxHp }}</strong>
|
|
371
|
+
</button>
|
|
372
|
+
</section>
|
|
373
|
+
|
|
374
|
+
<section class="christianity-battle-zone christianity-battle-zone--opponent" [attr.aria-label]="t('christianityOpponentBattle')">
|
|
375
|
+
@for (slot of battleSlots('P2'); track slot.trackId) {
|
|
376
|
+
@if (slot.card) {
|
|
377
|
+
<button
|
|
378
|
+
type="button"
|
|
379
|
+
class="christianity-card-preview-card christianity-card-preview-card--battle"
|
|
380
|
+
[class.is-target]="selectedAttacker()"
|
|
381
|
+
(click)="handleOpponentCharacter(slot.card)"
|
|
382
|
+
>
|
|
383
|
+
<span>{{ slot.card.name }}</span>
|
|
384
|
+
<strong>{{ slot.card.attack }} / {{ slot.card.currentHp }}</strong>
|
|
385
|
+
</button>
|
|
386
|
+
} @else {
|
|
387
|
+
<span class="christianity-slot"></span>
|
|
388
|
+
}
|
|
389
|
+
}
|
|
307
390
|
</section>
|
|
308
391
|
|
|
309
392
|
<section class="christianity-shared-zone" [attr.aria-label]="t('christianitySharedZone')">
|
|
310
|
-
<button type="button" class="christianity-
|
|
393
|
+
<button type="button" class="christianity-zone-card" (click)="showHistory.set(!showHistory())">
|
|
311
394
|
<span>{{ t('christianityHistory') }}</span>
|
|
312
395
|
<strong>{{ game().historyZone.length }}</strong>
|
|
313
396
|
</button>
|
|
314
|
-
<div class="christianity-
|
|
397
|
+
<div class="christianity-zone-card" aria-live="polite">
|
|
315
398
|
<span>{{ t('christianityDeck') }}</span>
|
|
316
399
|
<strong>{{ game().sharedDeckCount }}</strong>
|
|
317
400
|
</div>
|
|
318
|
-
<div class="christianity-
|
|
401
|
+
<div class="christianity-zone-card">
|
|
319
402
|
<span>{{ t('christianityPlace') }}</span>
|
|
320
403
|
<strong>{{ t('christianityEmpty') }}</strong>
|
|
321
404
|
</div>
|
|
322
405
|
</section>
|
|
323
406
|
|
|
324
|
-
<section class="christianity-
|
|
325
|
-
|
|
326
|
-
@
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
>
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
407
|
+
<section class="christianity-battle-zone" [attr.aria-label]="t('christianityYourBattle')">
|
|
408
|
+
@for (slot of battleSlots('P1'); track slot.trackId) {
|
|
409
|
+
@if (slot.card) {
|
|
410
|
+
<button
|
|
411
|
+
type="button"
|
|
412
|
+
class="christianity-card-preview-card christianity-card-preview-card--battle"
|
|
413
|
+
[class.is-selected]="selectedAttacker()?.instanceId === slot.card.instanceId"
|
|
414
|
+
[class.is-exhausted]="!slot.card.canAttack"
|
|
415
|
+
(click)="selectAttacker(slot.card)"
|
|
416
|
+
>
|
|
417
|
+
<span>{{ slot.card.name }}</span>
|
|
418
|
+
<strong>{{ slot.card.attack }} / {{ slot.card.currentHp }}</strong>
|
|
419
|
+
</button>
|
|
420
|
+
} @else {
|
|
421
|
+
<span class="christianity-slot"></span>
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
</section>
|
|
425
|
+
|
|
426
|
+
<section class="christianity-player-rack">
|
|
427
|
+
<div class="christianity-offerings-zone">
|
|
428
|
+
@for (offering of player().offerings; track offering.instanceId) {
|
|
429
|
+
<button
|
|
430
|
+
type="button"
|
|
431
|
+
class="christianity-card-mini christianity-card-mini--offering"
|
|
432
|
+
[class.is-exhausted]="!offering.ready"
|
|
433
|
+
(click)="inspectOffering(offering)"
|
|
434
|
+
>
|
|
435
|
+
<span>{{ t('christianityOfferingCard') }}</span>
|
|
436
|
+
<strong>+{{ offering.value }}</strong>
|
|
437
|
+
</button>
|
|
341
438
|
}
|
|
342
439
|
</div>
|
|
343
|
-
<
|
|
344
|
-
<
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
}
|
|
351
|
-
</div>
|
|
352
|
-
</div>
|
|
353
|
-
<button type="button" class="christianity-leader christianity-leader--target" (click)="attackLeader()">
|
|
354
|
-
<span>{{ player().leaderName }}</span>
|
|
355
|
-
<strong>{{ player().leaderHp }}/{{ player().leaderMaxHp }}</strong>
|
|
356
|
-
</button>
|
|
357
|
-
<button type="button" class="christianity-end-turn" (click)="endTurn()">
|
|
358
|
-
{{ t('christianityEndTurn') }}
|
|
359
|
-
</button>
|
|
360
|
-
</div>
|
|
440
|
+
<button type="button" class="christianity-leader-card" (click)="inspectLeader('P1')">
|
|
441
|
+
<span>{{ player().leaderName }}</span>
|
|
442
|
+
<strong>{{ player().leaderHp }}/{{ player().leaderMaxHp }}</strong>
|
|
443
|
+
</button>
|
|
444
|
+
<button type="button" class="christianity-end-turn" (click)="endTurn()">
|
|
445
|
+
{{ t('christianityEndTurn') }}
|
|
446
|
+
</button>
|
|
361
447
|
</section>
|
|
362
448
|
</section>
|
|
363
449
|
|
|
364
|
-
<section class="christianity-hand" [attr.aria-label]="t('christianityYourHand')">
|
|
450
|
+
<section class="christianity-hand-fan" [attr.aria-label]="t('christianityYourHand')">
|
|
365
451
|
@for (cardId of player().hand ?? []; track cardId + $index) {
|
|
366
452
|
@let card = cardDefinition(cardId);
|
|
367
453
|
<button
|
|
368
454
|
type="button"
|
|
369
|
-
class="christianity-card christianity-card--hand"
|
|
455
|
+
class="christianity-card-preview-card christianity-card-preview-card--hand"
|
|
370
456
|
[class.is-selected]="selectedHandCard() === cardId"
|
|
371
457
|
[class.is-disabled]="!canPlay(card)"
|
|
458
|
+
[style.transform]="fanTransform($index, player().hand?.length ?? 0, false)"
|
|
372
459
|
(click)="selectHandCard(cardId)"
|
|
373
460
|
>
|
|
374
461
|
<small>
|
|
@@ -390,6 +477,15 @@ export class ChristianityGameComponent {
|
|
|
390
477
|
}
|
|
391
478
|
</section>
|
|
392
479
|
|
|
480
|
+
@if (selectedPreview()) {
|
|
481
|
+
<aside class="christianity-floating-card" aria-live="polite">
|
|
482
|
+
<small>{{ selectedPreview()?.eyebrow }}</small>
|
|
483
|
+
<strong>{{ selectedPreview()?.title }}</strong>
|
|
484
|
+
<span>{{ selectedPreview()?.meta }}</span>
|
|
485
|
+
<p>{{ selectedPreview()?.body }}</p>
|
|
486
|
+
</aside>
|
|
487
|
+
}
|
|
488
|
+
|
|
393
489
|
<section class="christianity-actions" aria-live="polite">
|
|
394
490
|
<p>{{ statusText() }}</p>
|
|
395
491
|
<div>
|
|
@@ -413,7 +509,7 @@ export class ChristianityGameComponent {
|
|
|
413
509
|
</section>
|
|
414
510
|
}
|
|
415
511
|
</main>
|
|
416
|
-
`, isInline: true, styles: [":host{display:block;color:var(--val-text-color, #1f2933)}.christianity-shell{display:grid;gap:.875rem;padding:.75rem .25rem;border:1px solid rgba(36,48,68,.12);border-radius:.75rem;background:#f6f8fb}.christianity-header,.christianity-player__summary,.christianity-shared-zone,.christianity-actions{display:flex;align-items:center;justify-content:space-between;gap:.75rem}.christianity-header h1,.christianity-header p,.christianity-history h2,.christianity-actions p{margin:0}.christianity-header h1{font-size:1.35rem;line-height:1.1}.christianity-header p,.christianity-turn span,.christianity-offerings span,.christianity-hidden-hand span,.christianity-deck span,.christianity-place span,.christianity-pile span,.christianity-leader span{color:#1f2933a3;font-size:.75rem}.christianity-turn,.christianity-leader,.christianity-offerings,.christianity-hidden-hand,.christianity-pile,.christianity-deck,.christianity-place{display:grid;gap:.15rem;min-width:5.25rem;padding:.55rem .65rem;border:1px solid rgba(36,48,68,.12);border-radius:.5rem;background:#fff}.christianity-turn.is-own-turn{border-color:#12806c59;background:#ecfdf5}.christianity-table{display:grid;gap:.75rem;padding:.55rem .35rem;border-radius:.75rem;background:#dceafb}.christianity-player{display:grid;gap:.65rem}.christianity-battle-zone{display:grid;grid-template-columns:repeat(5,minmax(4.2rem,1fr));gap:.5rem;min-height:7rem;padding:.55rem .4rem;border-radius:.75rem;background:#ffffffc2}.christianity-shared-zone{padding:.55rem .4rem;border-radius:.75rem;background:#ffffffe6}.christianity-card,.christianity-end-turn,.christianity-actions button,.christianity-pile,.christianity-leader--target{border:1px solid rgba(36,48,68,.16);border-radius:.5rem;background:#fff;color:inherit;font:inherit}.christianity-card{display:grid;align-content:space-between;min-height:5.8rem;padding:.5rem;text-align:left;box-shadow:0 .5rem 1.25rem #24304414}.christianity-card span{font-weight:700}.christianity-card strong{justify-self:end;padding:.15rem .35rem;border-radius:999px;background:#edf2f7;font-size:.8rem}.christianity-card.is-selected{border-color:#2563eb;box-shadow:0 0 0 .2rem #2563eb29}.christianity-card.is-disabled,.christianity-card.is-exhausted{opacity:.55}.christianity-card.is-target{border-color:#dc2626}.christianity-offering-cards{display:grid;grid-auto-flow:column;grid-auto-columns:.7rem;gap:.16rem;align-items:end;min-height:1.05rem}.christianity-offering-cards i{display:block;width:.65rem;height:.95rem;border:1px solid rgba(16,42,67,.22);border-radius:.18rem;background:#f8fafc}.christianity-offering-cards i.is-used{background:#cbd5e1;transform:rotate(90deg);transform-origin:center}.christianity-slot{min-height:5.8rem;border:1px dashed rgba(36,48,68,.22);border-radius:.5rem;background:#ffffff73}.christianity-hand{display:grid;grid-auto-columns:minmax(6rem,8rem);grid-auto-flow:column;gap:.55rem;overflow-x:auto;padding-bottom:.25rem}.christianity-actions{align-items:flex-start;padding:.75rem;border-radius:.75rem;background:#fff}.christianity-actions div{display:flex;flex-wrap:wrap;gap:.5rem;justify-content:flex-end}.christianity-actions button,.christianity-end-turn{min-height:2.4rem;padding:0 .75rem;font-weight:700}.christianity-actions button:not(:disabled),.christianity-end-turn{background:#102a43;color:#fff}.christianity-history{padding:.75rem;border-radius:.75rem;background:#fff}button{cursor:pointer}button:disabled{cursor:not-allowed;opacity:.55}button:focus-visible{outline:.1875rem solid rgba(37,99,235,.24);outline-offset:.125rem}@media (max-width: 720px){.christianity-shell{padding:.55rem 0;border-right:0;border-left:0;border-radius:0}.christianity-header,.christianity-player__summary,.christianity-shared-zone,.christianity-actions{align-items:stretch;flex-direction:column}.christianity-battle-zone{grid-template-columns:repeat(
|
|
512
|
+
`, isInline: true, styles: [":host{display:block;color:var(--val-text-color, #1f2933)}.christianity-shell{display:grid;gap:.875rem;padding:.75rem .25rem;border:1px solid rgba(36,48,68,.12);border-radius:.75rem;background:#f6f8fb}.christianity-header,.christianity-player__summary,.christianity-shared-zone,.christianity-actions{display:flex;align-items:center;justify-content:space-between;gap:.75rem}.christianity-header h1,.christianity-header p,.christianity-history h2,.christianity-actions p{margin:0}.christianity-header h1{font-size:1.35rem;line-height:1.1}.christianity-header p,.christianity-turn span,.christianity-offerings span,.christianity-hidden-hand span,.christianity-deck span,.christianity-place span,.christianity-pile span,.christianity-leader span{color:#1f2933a3;font-size:.75rem}.christianity-turn,.christianity-leader,.christianity-offerings,.christianity-hidden-hand,.christianity-pile,.christianity-deck,.christianity-place{display:grid;gap:.15rem;min-width:5.25rem;padding:.55rem .65rem;border:1px solid rgba(36,48,68,.12);border-radius:.5rem;background:#fff}.christianity-turn.is-own-turn{border-color:#12806c59;background:#ecfdf5}.christianity-table{display:grid;gap:.75rem;padding:.55rem .35rem;border-radius:.75rem;background:#dceafb}.christianity-player{display:grid;gap:.65rem}.christianity-battle-zone{display:grid;grid-template-columns:repeat(5,minmax(4.2rem,1fr));gap:.5rem;min-height:7rem;padding:.55rem .4rem;border-radius:.75rem;background:#ffffffc2}.christianity-shared-zone{padding:.55rem .4rem;border-radius:.75rem;background:#ffffffe6}.christianity-card,.christianity-end-turn,.christianity-actions button,.christianity-pile,.christianity-leader--target{border:1px solid rgba(36,48,68,.16);border-radius:.5rem;background:#fff;color:inherit;font:inherit}.christianity-card{display:grid;align-content:space-between;min-height:5.8rem;padding:.5rem;text-align:left;box-shadow:0 .5rem 1.25rem #24304414}.christianity-card span{font-weight:700}.christianity-card strong{justify-self:end;padding:.15rem .35rem;border-radius:999px;background:#edf2f7;font-size:.8rem}.christianity-card.is-selected{border-color:#2563eb;box-shadow:0 0 0 .2rem #2563eb29}.christianity-card.is-disabled,.christianity-card.is-exhausted{opacity:.55}.christianity-card.is-target{border-color:#dc2626}.christianity-offering-cards{display:grid;grid-auto-flow:column;grid-auto-columns:.7rem;gap:.16rem;align-items:end;min-height:1.05rem}.christianity-offering-cards i{display:block;width:.65rem;height:.95rem;border:1px solid rgba(16,42,67,.22);border-radius:.18rem;background:#f8fafc}.christianity-offering-cards i.is-used{background:#cbd5e1;transform:rotate(90deg);transform-origin:center}.christianity-slot{min-height:5.8rem;border:1px dashed rgba(36,48,68,.22);border-radius:.5rem;background:#ffffff73}.christianity-hand{display:grid;grid-auto-columns:minmax(6rem,8rem);grid-auto-flow:column;gap:.55rem;overflow-x:auto;padding-bottom:.25rem}.christianity-actions{align-items:flex-start;padding:.75rem;border-radius:.75rem;background:#fff}.christianity-actions div{display:flex;flex-wrap:wrap;gap:.5rem;justify-content:flex-end}.christianity-actions button,.christianity-end-turn{min-height:2.4rem;padding:0 .75rem;font-weight:700}.christianity-actions button:not(:disabled),.christianity-end-turn{background:#102a43;color:#fff}.christianity-history{padding:.75rem;border-radius:.75rem;background:#fff}.christianity-hand-fan{position:relative;display:flex;justify-content:center;min-height:7.4rem;padding:0 .25rem;isolation:isolate}.christianity-hand-fan--opponent{min-height:4.7rem;margin-bottom:-1.1rem}.christianity-card-preview-card,.christianity-card-mini,.christianity-leader-card,.christianity-zone-card,.christianity-end-turn{border:1px solid rgba(36,48,68,.16);border-radius:.5rem;background:#fff;color:inherit;font:inherit}.christianity-card-preview-card{display:grid;align-content:space-between;width:clamp(4.9rem,17vw,7.1rem);min-height:clamp(6.6rem,22vw,8.8rem);margin-inline:-.42rem;padding:.48rem;text-align:left;transform-origin:50% 115%;transition:transform .16s ease,box-shadow .16s ease,border-color .16s ease;box-shadow:0 .5rem 1.25rem #2430441a}.christianity-card-preview-card--hand:hover,.christianity-card-preview-card--hand.is-selected{z-index:3;border-color:#2563eb;box-shadow:0 1rem 2rem #2563eb2e}.christianity-card-preview-card--back{min-height:4.8rem;background:linear-gradient(135deg,#102a431f,#102a4305),repeating-linear-gradient(45deg,#e2e8f0 0 .35rem,#f8fafc .35rem .7rem)}.christianity-card-preview-card--battle{width:100%;min-height:5.7rem;margin-inline:0}.christianity-card-preview-card span,.christianity-card-mini span,.christianity-leader-card span,.christianity-zone-card span{font-weight:700}.christianity-card-preview-card strong,.christianity-card-mini strong,.christianity-leader-card strong,.christianity-zone-card strong{justify-self:end;padding:.15rem .35rem;border-radius:999px;background:#edf2f7;font-size:.8rem}.christianity-player-rack{display:grid;grid-template-columns:minmax(4.2rem,1fr) minmax(5rem,6.5rem) minmax(4.2rem,1fr);gap:.55rem;align-items:end;justify-items:center}.christianity-player-rack--opponent{align-items:start}.christianity-offerings-zone{display:flex;flex-wrap:wrap;gap:.25rem;justify-content:flex-end;width:100%}.christianity-card-mini,.christianity-leader-card,.christianity-zone-card{display:grid;align-content:space-between;min-height:4.9rem;padding:.48rem;text-align:left}.christianity-card-mini{width:3.5rem}.christianity-leader-card{width:min(100%,6.5rem);min-height:5.8rem}.christianity-battle-zone{grid-template-columns:repeat(4,minmax(4rem,1fr))}.christianity-shared-zone{display:grid;grid-template-columns:repeat(3,minmax(4.3rem,1fr));align-items:stretch}.christianity-floating-card{position:fixed;right:max(.75rem,env(safe-area-inset-right));bottom:max(5.8rem,env(safe-area-inset-bottom));z-index:10;display:grid;gap:.28rem;width:min(14rem,calc(100vw - 1.5rem));min-height:10rem;padding:.8rem;border:1px solid rgba(36,48,68,.18);border-radius:.6rem;background:#fffffff5;box-shadow:0 1.25rem 2.5rem #102a432e}.christianity-floating-card small,.christianity-floating-card span{color:#1f2933a3}.christianity-floating-card strong{font-size:1.05rem}.christianity-floating-card p{margin:0;font-size:.86rem;line-height:1.35}button{cursor:pointer}button:disabled{cursor:not-allowed;opacity:.55}button:focus-visible{outline:.1875rem solid rgba(37,99,235,.24);outline-offset:.125rem}@media (max-width: 720px){.christianity-shell{padding:.55rem 0;border-right:0;border-left:0;border-radius:0}.christianity-header,.christianity-player__summary,.christianity-shared-zone,.christianity-actions{align-items:stretch;flex-direction:column}.christianity-battle-zone{grid-template-columns:repeat(4,minmax(3.35rem,1fr));overflow-x:auto}.christianity-hand-fan{min-height:6.8rem;overflow-x:clip}.christianity-player-rack{grid-template-columns:minmax(3.6rem,1fr) minmax(4.8rem,5.6rem) minmax(3.6rem,1fr)}.christianity-shared-zone{grid-template-columns:repeat(3,minmax(3.7rem,1fr))}.christianity-card-preview-card{width:clamp(4.2rem,20vw,5.7rem);min-height:clamp(5.8rem,26vw,7.4rem)}.christianity-floating-card{right:.5rem;bottom:4.8rem}}\n"] }); }
|
|
417
513
|
}
|
|
418
514
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ChristianityGameComponent, decorators: [{
|
|
419
515
|
type: Component,
|
|
@@ -430,109 +526,123 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
430
526
|
</div>
|
|
431
527
|
</section>
|
|
432
528
|
|
|
529
|
+
<section class="christianity-hand-fan christianity-hand-fan--opponent" [attr.aria-label]="t('christianityOpponentHand')">
|
|
530
|
+
@for (_ of hiddenHandCards(opponentHandCount()); track $index) {
|
|
531
|
+
<button
|
|
532
|
+
type="button"
|
|
533
|
+
class="christianity-card-preview-card christianity-card-preview-card--back"
|
|
534
|
+
[style.transform]="fanTransform($index, opponentHandCount(), true)"
|
|
535
|
+
[attr.aria-label]="t('christianityHiddenCard')"
|
|
536
|
+
></button>
|
|
537
|
+
}
|
|
538
|
+
</section>
|
|
539
|
+
|
|
433
540
|
<section class="christianity-table" [attr.aria-label]="t('christianityTable')">
|
|
434
|
-
<section class="christianity-player christianity-player--opponent">
|
|
435
|
-
<div class="christianity-
|
|
436
|
-
|
|
437
|
-
<
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
}
|
|
447
|
-
</div>
|
|
448
|
-
</div>
|
|
449
|
-
<div class="christianity-hidden-hand">
|
|
450
|
-
<span>{{ t('christianityHand') }}</span>
|
|
451
|
-
<strong>{{ opponentHandCount() }}</strong>
|
|
452
|
-
</div>
|
|
453
|
-
</div>
|
|
454
|
-
<div class="christianity-battle-zone" [attr.aria-label]="t('christianityOpponentBattle')">
|
|
455
|
-
@for (slot of battleSlots('P2'); track slot.trackId) {
|
|
456
|
-
@if (slot.card) {
|
|
457
|
-
<button
|
|
458
|
-
type="button"
|
|
459
|
-
class="christianity-card christianity-card--battle"
|
|
460
|
-
[class.is-target]="selectedAttacker()"
|
|
461
|
-
(click)="attackCharacter(slot.card)"
|
|
462
|
-
>
|
|
463
|
-
<span>{{ slot.card.name }}</span>
|
|
464
|
-
<strong>{{ slot.card.attack }} / {{ slot.card.currentHp }}</strong>
|
|
465
|
-
</button>
|
|
466
|
-
} @else {
|
|
467
|
-
<span class="christianity-slot"></span>
|
|
468
|
-
}
|
|
541
|
+
<section class="christianity-player-rack christianity-player-rack--opponent">
|
|
542
|
+
<div class="christianity-offerings-zone">
|
|
543
|
+
@for (offering of opponent().offerings; track offering.instanceId) {
|
|
544
|
+
<button
|
|
545
|
+
type="button"
|
|
546
|
+
class="christianity-card-mini christianity-card-mini--offering"
|
|
547
|
+
[class.is-exhausted]="!offering.ready"
|
|
548
|
+
(click)="inspectOffering(offering)"
|
|
549
|
+
>
|
|
550
|
+
<span>{{ t('christianityOfferingCard') }}</span>
|
|
551
|
+
<strong>+{{ offering.value }}</strong>
|
|
552
|
+
</button>
|
|
469
553
|
}
|
|
470
554
|
</div>
|
|
555
|
+
<button type="button" class="christianity-leader-card" [class.is-target]="selectedAttacker() && !hasOpponentGuards()" (click)="handleOpponentLeader()">
|
|
556
|
+
<span>{{ opponent().leaderName }}</span>
|
|
557
|
+
<strong>{{ opponent().leaderHp }}/{{ opponent().leaderMaxHp }}</strong>
|
|
558
|
+
</button>
|
|
559
|
+
</section>
|
|
560
|
+
|
|
561
|
+
<section class="christianity-battle-zone christianity-battle-zone--opponent" [attr.aria-label]="t('christianityOpponentBattle')">
|
|
562
|
+
@for (slot of battleSlots('P2'); track slot.trackId) {
|
|
563
|
+
@if (slot.card) {
|
|
564
|
+
<button
|
|
565
|
+
type="button"
|
|
566
|
+
class="christianity-card-preview-card christianity-card-preview-card--battle"
|
|
567
|
+
[class.is-target]="selectedAttacker()"
|
|
568
|
+
(click)="handleOpponentCharacter(slot.card)"
|
|
569
|
+
>
|
|
570
|
+
<span>{{ slot.card.name }}</span>
|
|
571
|
+
<strong>{{ slot.card.attack }} / {{ slot.card.currentHp }}</strong>
|
|
572
|
+
</button>
|
|
573
|
+
} @else {
|
|
574
|
+
<span class="christianity-slot"></span>
|
|
575
|
+
}
|
|
576
|
+
}
|
|
471
577
|
</section>
|
|
472
578
|
|
|
473
579
|
<section class="christianity-shared-zone" [attr.aria-label]="t('christianitySharedZone')">
|
|
474
|
-
<button type="button" class="christianity-
|
|
580
|
+
<button type="button" class="christianity-zone-card" (click)="showHistory.set(!showHistory())">
|
|
475
581
|
<span>{{ t('christianityHistory') }}</span>
|
|
476
582
|
<strong>{{ game().historyZone.length }}</strong>
|
|
477
583
|
</button>
|
|
478
|
-
<div class="christianity-
|
|
584
|
+
<div class="christianity-zone-card" aria-live="polite">
|
|
479
585
|
<span>{{ t('christianityDeck') }}</span>
|
|
480
586
|
<strong>{{ game().sharedDeckCount }}</strong>
|
|
481
587
|
</div>
|
|
482
|
-
<div class="christianity-
|
|
588
|
+
<div class="christianity-zone-card">
|
|
483
589
|
<span>{{ t('christianityPlace') }}</span>
|
|
484
590
|
<strong>{{ t('christianityEmpty') }}</strong>
|
|
485
591
|
</div>
|
|
486
592
|
</section>
|
|
487
593
|
|
|
488
|
-
<section class="christianity-
|
|
489
|
-
|
|
490
|
-
@
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
>
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
594
|
+
<section class="christianity-battle-zone" [attr.aria-label]="t('christianityYourBattle')">
|
|
595
|
+
@for (slot of battleSlots('P1'); track slot.trackId) {
|
|
596
|
+
@if (slot.card) {
|
|
597
|
+
<button
|
|
598
|
+
type="button"
|
|
599
|
+
class="christianity-card-preview-card christianity-card-preview-card--battle"
|
|
600
|
+
[class.is-selected]="selectedAttacker()?.instanceId === slot.card.instanceId"
|
|
601
|
+
[class.is-exhausted]="!slot.card.canAttack"
|
|
602
|
+
(click)="selectAttacker(slot.card)"
|
|
603
|
+
>
|
|
604
|
+
<span>{{ slot.card.name }}</span>
|
|
605
|
+
<strong>{{ slot.card.attack }} / {{ slot.card.currentHp }}</strong>
|
|
606
|
+
</button>
|
|
607
|
+
} @else {
|
|
608
|
+
<span class="christianity-slot"></span>
|
|
609
|
+
}
|
|
610
|
+
}
|
|
611
|
+
</section>
|
|
612
|
+
|
|
613
|
+
<section class="christianity-player-rack">
|
|
614
|
+
<div class="christianity-offerings-zone">
|
|
615
|
+
@for (offering of player().offerings; track offering.instanceId) {
|
|
616
|
+
<button
|
|
617
|
+
type="button"
|
|
618
|
+
class="christianity-card-mini christianity-card-mini--offering"
|
|
619
|
+
[class.is-exhausted]="!offering.ready"
|
|
620
|
+
(click)="inspectOffering(offering)"
|
|
621
|
+
>
|
|
622
|
+
<span>{{ t('christianityOfferingCard') }}</span>
|
|
623
|
+
<strong>+{{ offering.value }}</strong>
|
|
624
|
+
</button>
|
|
505
625
|
}
|
|
506
626
|
</div>
|
|
507
|
-
<
|
|
508
|
-
<
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
}
|
|
515
|
-
</div>
|
|
516
|
-
</div>
|
|
517
|
-
<button type="button" class="christianity-leader christianity-leader--target" (click)="attackLeader()">
|
|
518
|
-
<span>{{ player().leaderName }}</span>
|
|
519
|
-
<strong>{{ player().leaderHp }}/{{ player().leaderMaxHp }}</strong>
|
|
520
|
-
</button>
|
|
521
|
-
<button type="button" class="christianity-end-turn" (click)="endTurn()">
|
|
522
|
-
{{ t('christianityEndTurn') }}
|
|
523
|
-
</button>
|
|
524
|
-
</div>
|
|
627
|
+
<button type="button" class="christianity-leader-card" (click)="inspectLeader('P1')">
|
|
628
|
+
<span>{{ player().leaderName }}</span>
|
|
629
|
+
<strong>{{ player().leaderHp }}/{{ player().leaderMaxHp }}</strong>
|
|
630
|
+
</button>
|
|
631
|
+
<button type="button" class="christianity-end-turn" (click)="endTurn()">
|
|
632
|
+
{{ t('christianityEndTurn') }}
|
|
633
|
+
</button>
|
|
525
634
|
</section>
|
|
526
635
|
</section>
|
|
527
636
|
|
|
528
|
-
<section class="christianity-hand" [attr.aria-label]="t('christianityYourHand')">
|
|
637
|
+
<section class="christianity-hand-fan" [attr.aria-label]="t('christianityYourHand')">
|
|
529
638
|
@for (cardId of player().hand ?? []; track cardId + $index) {
|
|
530
639
|
@let card = cardDefinition(cardId);
|
|
531
640
|
<button
|
|
532
641
|
type="button"
|
|
533
|
-
class="christianity-card christianity-card--hand"
|
|
642
|
+
class="christianity-card-preview-card christianity-card-preview-card--hand"
|
|
534
643
|
[class.is-selected]="selectedHandCard() === cardId"
|
|
535
644
|
[class.is-disabled]="!canPlay(card)"
|
|
645
|
+
[style.transform]="fanTransform($index, player().hand?.length ?? 0, false)"
|
|
536
646
|
(click)="selectHandCard(cardId)"
|
|
537
647
|
>
|
|
538
648
|
<small>
|
|
@@ -554,6 +664,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
554
664
|
}
|
|
555
665
|
</section>
|
|
556
666
|
|
|
667
|
+
@if (selectedPreview()) {
|
|
668
|
+
<aside class="christianity-floating-card" aria-live="polite">
|
|
669
|
+
<small>{{ selectedPreview()?.eyebrow }}</small>
|
|
670
|
+
<strong>{{ selectedPreview()?.title }}</strong>
|
|
671
|
+
<span>{{ selectedPreview()?.meta }}</span>
|
|
672
|
+
<p>{{ selectedPreview()?.body }}</p>
|
|
673
|
+
</aside>
|
|
674
|
+
}
|
|
675
|
+
|
|
557
676
|
<section class="christianity-actions" aria-live="polite">
|
|
558
677
|
<p>{{ statusText() }}</p>
|
|
559
678
|
<div>
|
|
@@ -577,6 +696,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
577
696
|
</section>
|
|
578
697
|
}
|
|
579
698
|
</main>
|
|
580
|
-
`, styles: [":host{display:block;color:var(--val-text-color, #1f2933)}.christianity-shell{display:grid;gap:.875rem;padding:.75rem .25rem;border:1px solid rgba(36,48,68,.12);border-radius:.75rem;background:#f6f8fb}.christianity-header,.christianity-player__summary,.christianity-shared-zone,.christianity-actions{display:flex;align-items:center;justify-content:space-between;gap:.75rem}.christianity-header h1,.christianity-header p,.christianity-history h2,.christianity-actions p{margin:0}.christianity-header h1{font-size:1.35rem;line-height:1.1}.christianity-header p,.christianity-turn span,.christianity-offerings span,.christianity-hidden-hand span,.christianity-deck span,.christianity-place span,.christianity-pile span,.christianity-leader span{color:#1f2933a3;font-size:.75rem}.christianity-turn,.christianity-leader,.christianity-offerings,.christianity-hidden-hand,.christianity-pile,.christianity-deck,.christianity-place{display:grid;gap:.15rem;min-width:5.25rem;padding:.55rem .65rem;border:1px solid rgba(36,48,68,.12);border-radius:.5rem;background:#fff}.christianity-turn.is-own-turn{border-color:#12806c59;background:#ecfdf5}.christianity-table{display:grid;gap:.75rem;padding:.55rem .35rem;border-radius:.75rem;background:#dceafb}.christianity-player{display:grid;gap:.65rem}.christianity-battle-zone{display:grid;grid-template-columns:repeat(5,minmax(4.2rem,1fr));gap:.5rem;min-height:7rem;padding:.55rem .4rem;border-radius:.75rem;background:#ffffffc2}.christianity-shared-zone{padding:.55rem .4rem;border-radius:.75rem;background:#ffffffe6}.christianity-card,.christianity-end-turn,.christianity-actions button,.christianity-pile,.christianity-leader--target{border:1px solid rgba(36,48,68,.16);border-radius:.5rem;background:#fff;color:inherit;font:inherit}.christianity-card{display:grid;align-content:space-between;min-height:5.8rem;padding:.5rem;text-align:left;box-shadow:0 .5rem 1.25rem #24304414}.christianity-card span{font-weight:700}.christianity-card strong{justify-self:end;padding:.15rem .35rem;border-radius:999px;background:#edf2f7;font-size:.8rem}.christianity-card.is-selected{border-color:#2563eb;box-shadow:0 0 0 .2rem #2563eb29}.christianity-card.is-disabled,.christianity-card.is-exhausted{opacity:.55}.christianity-card.is-target{border-color:#dc2626}.christianity-offering-cards{display:grid;grid-auto-flow:column;grid-auto-columns:.7rem;gap:.16rem;align-items:end;min-height:1.05rem}.christianity-offering-cards i{display:block;width:.65rem;height:.95rem;border:1px solid rgba(16,42,67,.22);border-radius:.18rem;background:#f8fafc}.christianity-offering-cards i.is-used{background:#cbd5e1;transform:rotate(90deg);transform-origin:center}.christianity-slot{min-height:5.8rem;border:1px dashed rgba(36,48,68,.22);border-radius:.5rem;background:#ffffff73}.christianity-hand{display:grid;grid-auto-columns:minmax(6rem,8rem);grid-auto-flow:column;gap:.55rem;overflow-x:auto;padding-bottom:.25rem}.christianity-actions{align-items:flex-start;padding:.75rem;border-radius:.75rem;background:#fff}.christianity-actions div{display:flex;flex-wrap:wrap;gap:.5rem;justify-content:flex-end}.christianity-actions button,.christianity-end-turn{min-height:2.4rem;padding:0 .75rem;font-weight:700}.christianity-actions button:not(:disabled),.christianity-end-turn{background:#102a43;color:#fff}.christianity-history{padding:.75rem;border-radius:.75rem;background:#fff}button{cursor:pointer}button:disabled{cursor:not-allowed;opacity:.55}button:focus-visible{outline:.1875rem solid rgba(37,99,235,.24);outline-offset:.125rem}@media (max-width: 720px){.christianity-shell{padding:.55rem 0;border-right:0;border-left:0;border-radius:0}.christianity-header,.christianity-player__summary,.christianity-shared-zone,.christianity-actions{align-items:stretch;flex-direction:column}.christianity-battle-zone{grid-template-columns:repeat(
|
|
699
|
+
`, styles: [":host{display:block;color:var(--val-text-color, #1f2933)}.christianity-shell{display:grid;gap:.875rem;padding:.75rem .25rem;border:1px solid rgba(36,48,68,.12);border-radius:.75rem;background:#f6f8fb}.christianity-header,.christianity-player__summary,.christianity-shared-zone,.christianity-actions{display:flex;align-items:center;justify-content:space-between;gap:.75rem}.christianity-header h1,.christianity-header p,.christianity-history h2,.christianity-actions p{margin:0}.christianity-header h1{font-size:1.35rem;line-height:1.1}.christianity-header p,.christianity-turn span,.christianity-offerings span,.christianity-hidden-hand span,.christianity-deck span,.christianity-place span,.christianity-pile span,.christianity-leader span{color:#1f2933a3;font-size:.75rem}.christianity-turn,.christianity-leader,.christianity-offerings,.christianity-hidden-hand,.christianity-pile,.christianity-deck,.christianity-place{display:grid;gap:.15rem;min-width:5.25rem;padding:.55rem .65rem;border:1px solid rgba(36,48,68,.12);border-radius:.5rem;background:#fff}.christianity-turn.is-own-turn{border-color:#12806c59;background:#ecfdf5}.christianity-table{display:grid;gap:.75rem;padding:.55rem .35rem;border-radius:.75rem;background:#dceafb}.christianity-player{display:grid;gap:.65rem}.christianity-battle-zone{display:grid;grid-template-columns:repeat(5,minmax(4.2rem,1fr));gap:.5rem;min-height:7rem;padding:.55rem .4rem;border-radius:.75rem;background:#ffffffc2}.christianity-shared-zone{padding:.55rem .4rem;border-radius:.75rem;background:#ffffffe6}.christianity-card,.christianity-end-turn,.christianity-actions button,.christianity-pile,.christianity-leader--target{border:1px solid rgba(36,48,68,.16);border-radius:.5rem;background:#fff;color:inherit;font:inherit}.christianity-card{display:grid;align-content:space-between;min-height:5.8rem;padding:.5rem;text-align:left;box-shadow:0 .5rem 1.25rem #24304414}.christianity-card span{font-weight:700}.christianity-card strong{justify-self:end;padding:.15rem .35rem;border-radius:999px;background:#edf2f7;font-size:.8rem}.christianity-card.is-selected{border-color:#2563eb;box-shadow:0 0 0 .2rem #2563eb29}.christianity-card.is-disabled,.christianity-card.is-exhausted{opacity:.55}.christianity-card.is-target{border-color:#dc2626}.christianity-offering-cards{display:grid;grid-auto-flow:column;grid-auto-columns:.7rem;gap:.16rem;align-items:end;min-height:1.05rem}.christianity-offering-cards i{display:block;width:.65rem;height:.95rem;border:1px solid rgba(16,42,67,.22);border-radius:.18rem;background:#f8fafc}.christianity-offering-cards i.is-used{background:#cbd5e1;transform:rotate(90deg);transform-origin:center}.christianity-slot{min-height:5.8rem;border:1px dashed rgba(36,48,68,.22);border-radius:.5rem;background:#ffffff73}.christianity-hand{display:grid;grid-auto-columns:minmax(6rem,8rem);grid-auto-flow:column;gap:.55rem;overflow-x:auto;padding-bottom:.25rem}.christianity-actions{align-items:flex-start;padding:.75rem;border-radius:.75rem;background:#fff}.christianity-actions div{display:flex;flex-wrap:wrap;gap:.5rem;justify-content:flex-end}.christianity-actions button,.christianity-end-turn{min-height:2.4rem;padding:0 .75rem;font-weight:700}.christianity-actions button:not(:disabled),.christianity-end-turn{background:#102a43;color:#fff}.christianity-history{padding:.75rem;border-radius:.75rem;background:#fff}.christianity-hand-fan{position:relative;display:flex;justify-content:center;min-height:7.4rem;padding:0 .25rem;isolation:isolate}.christianity-hand-fan--opponent{min-height:4.7rem;margin-bottom:-1.1rem}.christianity-card-preview-card,.christianity-card-mini,.christianity-leader-card,.christianity-zone-card,.christianity-end-turn{border:1px solid rgba(36,48,68,.16);border-radius:.5rem;background:#fff;color:inherit;font:inherit}.christianity-card-preview-card{display:grid;align-content:space-between;width:clamp(4.9rem,17vw,7.1rem);min-height:clamp(6.6rem,22vw,8.8rem);margin-inline:-.42rem;padding:.48rem;text-align:left;transform-origin:50% 115%;transition:transform .16s ease,box-shadow .16s ease,border-color .16s ease;box-shadow:0 .5rem 1.25rem #2430441a}.christianity-card-preview-card--hand:hover,.christianity-card-preview-card--hand.is-selected{z-index:3;border-color:#2563eb;box-shadow:0 1rem 2rem #2563eb2e}.christianity-card-preview-card--back{min-height:4.8rem;background:linear-gradient(135deg,#102a431f,#102a4305),repeating-linear-gradient(45deg,#e2e8f0 0 .35rem,#f8fafc .35rem .7rem)}.christianity-card-preview-card--battle{width:100%;min-height:5.7rem;margin-inline:0}.christianity-card-preview-card span,.christianity-card-mini span,.christianity-leader-card span,.christianity-zone-card span{font-weight:700}.christianity-card-preview-card strong,.christianity-card-mini strong,.christianity-leader-card strong,.christianity-zone-card strong{justify-self:end;padding:.15rem .35rem;border-radius:999px;background:#edf2f7;font-size:.8rem}.christianity-player-rack{display:grid;grid-template-columns:minmax(4.2rem,1fr) minmax(5rem,6.5rem) minmax(4.2rem,1fr);gap:.55rem;align-items:end;justify-items:center}.christianity-player-rack--opponent{align-items:start}.christianity-offerings-zone{display:flex;flex-wrap:wrap;gap:.25rem;justify-content:flex-end;width:100%}.christianity-card-mini,.christianity-leader-card,.christianity-zone-card{display:grid;align-content:space-between;min-height:4.9rem;padding:.48rem;text-align:left}.christianity-card-mini{width:3.5rem}.christianity-leader-card{width:min(100%,6.5rem);min-height:5.8rem}.christianity-battle-zone{grid-template-columns:repeat(4,minmax(4rem,1fr))}.christianity-shared-zone{display:grid;grid-template-columns:repeat(3,minmax(4.3rem,1fr));align-items:stretch}.christianity-floating-card{position:fixed;right:max(.75rem,env(safe-area-inset-right));bottom:max(5.8rem,env(safe-area-inset-bottom));z-index:10;display:grid;gap:.28rem;width:min(14rem,calc(100vw - 1.5rem));min-height:10rem;padding:.8rem;border:1px solid rgba(36,48,68,.18);border-radius:.6rem;background:#fffffff5;box-shadow:0 1.25rem 2.5rem #102a432e}.christianity-floating-card small,.christianity-floating-card span{color:#1f2933a3}.christianity-floating-card strong{font-size:1.05rem}.christianity-floating-card p{margin:0;font-size:.86rem;line-height:1.35}button{cursor:pointer}button:disabled{cursor:not-allowed;opacity:.55}button:focus-visible{outline:.1875rem solid rgba(37,99,235,.24);outline-offset:.125rem}@media (max-width: 720px){.christianity-shell{padding:.55rem 0;border-right:0;border-left:0;border-radius:0}.christianity-header,.christianity-player__summary,.christianity-shared-zone,.christianity-actions{align-items:stretch;flex-direction:column}.christianity-battle-zone{grid-template-columns:repeat(4,minmax(3.35rem,1fr));overflow-x:auto}.christianity-hand-fan{min-height:6.8rem;overflow-x:clip}.christianity-player-rack{grid-template-columns:minmax(3.6rem,1fr) minmax(4.8rem,5.6rem) minmax(3.6rem,1fr)}.christianity-shared-zone{grid-template-columns:repeat(3,minmax(3.7rem,1fr))}.christianity-card-preview-card{width:clamp(4.2rem,20vw,5.7rem);min-height:clamp(5.8rem,26vw,7.4rem)}.christianity-floating-card{right:.5rem;bottom:4.8rem}}\n"] }]
|
|
581
700
|
}], ctorParameters: () => [] });
|
|
582
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hyaXN0aWFuaXR5LWdhbWUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL29yZ2FuaXNtcy9taW5pLWdhbWVzL2NocmlzdGlhbml0eS1nYW1lLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXBFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7O0FBU3BELE1BQU0sYUFBYSxHQUErQztJQUNoRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFO0lBQ25HLE9BQU8sRUFBRSxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFO0lBQ3pGLE9BQU8sRUFBRSxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFO0lBQ3pGLFNBQVMsRUFBRSxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFO0lBQy9GLE9BQU8sRUFBRSxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFO0lBQ3pGLFVBQVUsRUFBRSxFQUFFLEVBQUUsRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFO0NBQ25HLENBQUM7QUFFRixNQUFNLGFBQWEsR0FBMEI7SUFDM0MsTUFBTSxFQUFFLG1CQUFtQjtJQUMzQixNQUFNLEVBQUUsYUFBYTtJQUNyQixJQUFJLEVBQUUsWUFBWTtJQUNsQixTQUFTLEVBQUUsSUFBSTtJQUNmLFFBQVEsRUFBRSxDQUFDO0lBQ1gsU0FBUyxFQUFFLENBQUM7SUFDWixlQUFlLEVBQUUsRUFBRTtJQUNuQixXQUFXLEVBQUUsRUFBRTtJQUNmLE9BQU8sRUFBRTtRQUNQLEVBQUUsRUFBRTtZQUNGLElBQUksRUFBRSxJQUFJO1lBQ1YsV0FBVyxFQUFFLFNBQVM7WUFDdEIsVUFBVSxFQUFFLE1BQU07WUFDbEIsUUFBUSxFQUFFLEVBQUU7WUFDWixXQUFXLEVBQUUsRUFBRTtZQUNmLFNBQVMsRUFBRSxDQUFDLEVBQUUsVUFBVSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDOUgsc0JBQXNCLEVBQUUsS0FBSztZQUM3QixJQUFJLEVBQUUsQ0FBQyxVQUFVLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxTQUFTLENBQUM7WUFDckQsVUFBVSxFQUFFLEVBQUU7U0FDZjtRQUNELEVBQUUsRUFBRTtZQUNGLElBQUksRUFBRSxJQUFJO1lBQ1YsV0FBVyxFQUFFLE9BQU87WUFDcEIsVUFBVSxFQUFFLE1BQU07WUFDbEIsUUFBUSxFQUFFLEVBQUU7WUFDWixXQUFXLEVBQUUsRUFBRTtZQUNmLFNBQVMsRUFBRSxDQUFDLEVBQUUsVUFBVSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDOUgsc0JBQXNCLEVBQUUsS0FBSztZQUM3QixTQUFTLEVBQUUsQ0FBQztZQUNaLFVBQVUsRUFBRTtnQkFDVjtvQkFDRSxVQUFVLEVBQUUsU0FBUztvQkFDckIsTUFBTSxFQUFFLFNBQVM7b0JBQ2pCLElBQUksRUFBRSxPQUFPO29CQUNiLEtBQUssRUFBRSxJQUFJO29CQUNYLFVBQVUsRUFBRSxJQUFJO29CQUNoQixNQUFNLEVBQUUsQ0FBQztvQkFDVCxTQUFTLEVBQUUsQ0FBQztvQkFDWixLQUFLLEVBQUUsQ0FBQztvQkFDUixTQUFTLEVBQUUsS0FBSztpQkFDakI7YUFDRjtTQUNGO0tBQ0Y7SUFDRCxHQUFHLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQztDQUMzQixDQUFDO0FBd2FGLE1BQU0sT0FBTyx5QkFBeUI7SUE2QnBDO1FBNUJRLFNBQUksR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFaEIsU0FBSSxHQUFHLE1BQU0sQ0FBd0IsZUFBZSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7UUFDckUscUJBQWdCLEdBQUcsTUFBTSxDQUFnQixJQUFJLENBQUMsQ0FBQztRQUMvQyxxQkFBZ0IsR0FBRyxNQUFNLENBQXVDLElBQUksQ0FBQyxDQUFDO1FBQ3RFLGdCQUFXLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTVCLFdBQU0sR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNoRCxhQUFRLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDbEQsa0JBQWEsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUMzRSxjQUFTLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxTQUFTLEtBQUssSUFBSSxDQUFDLENBQUM7UUFDM0Qsc0JBQWlCLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLElBQUksRUFBRSxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDbkcsZUFBVSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDNUMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDekMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDekMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDO2dCQUN0QixPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsc0JBQXNCLENBQUMsQ0FBQztZQUN4QyxDQUFDO1lBQ0QsSUFBSSxRQUFRLEVBQUUsQ0FBQztnQkFDYixPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsMEJBQTBCLENBQUMsQ0FBQztZQUM1QyxDQUFDO1lBQ0QsSUFBSSxRQUFRLEVBQUUsQ0FBQztnQkFDYixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUMzQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMseUJBQXlCLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1lBQ3RHLENBQUM7WUFDRCxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsd0JBQXdCLENBQUMsQ0FBQztRQUMxQyxDQUFDLENBQUMsQ0FBQztRQUdELElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLGVBQWUsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFUyxDQUFDLENBQUMsR0FBVztRQUNyQixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFUyxjQUFjLENBQUMsTUFBYztRQUNyQyxPQUFPLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVTLFdBQVcsQ0FBQyxJQUFzQjtRQUMxQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLFVBQVUsQ0FBQztRQUNuRCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzlDLE9BQU8sRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsVUFBVSxJQUFJLEdBQUcsSUFBSSxVQUFVLEtBQUssRUFBRTtZQUM3RCxJQUFJLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQztTQUNuQixDQUFDLENBQUMsQ0FBQztJQUNOLENBQUM7SUFFUyxjQUFjLENBQUMsTUFBK0I7UUFDdEQsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLEtBQUssR0FBRyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3hHLENBQUM7SUFFUyxPQUFPLENBQUMsSUFBZ0M7UUFDaEQsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUNwQyxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssVUFBVTtZQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsc0JBQXNCLENBQUM7UUFDM0UsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQ2hHLENBQUM7SUFFUyxlQUFlO1FBQ3ZCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3pDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRVMsY0FBYyxDQUFDLE1BQWM7UUFDckMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNoRixDQUFDO0lBRVMsZ0JBQWdCO1FBQ3hCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxNQUFNO1lBQUUsT0FBTztRQUNwQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztZQUFFLE9BQU87UUFFaEMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDdEIsTUFBTSxJQUFJLEdBQUcsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ25DLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQy9CLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ3JELElBQUksU0FBUyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJO2dCQUFFLE9BQU8sSUFBSSxDQUFDO1lBQy9DLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNqQyxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssVUFBVSxFQUFFLENBQUM7Z0JBQzdCLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDO29CQUNwQixVQUFVLEVBQUUsZUFBZSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsRUFBRTtvQkFDOUMsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFO29CQUNmLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtvQkFDZixLQUFLLEVBQUUsSUFBSTtvQkFDWCxLQUFLLEVBQUUsSUFBSTtvQkFDWCxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUk7aUJBQ2pCLENBQUMsQ0FBQztnQkFDSCxNQUFNLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDO1lBQ3ZDLENBQUM7aUJBQU0sQ0FBQztnQkFDTixJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3ZDLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDO29CQUNyQixVQUFVLEVBQUUsTUFBTSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRTtvQkFDakUsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFO29CQUNmLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtvQkFDZixLQUFLLEVBQUUsSUFBSTtvQkFDWCxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO29CQUNuQixTQUFTLEVBQUUsSUFBSSxDQUFDLElBQUk7b0JBQ3BCLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSTtvQkFDaEIsU0FBUyxFQUFFLEtBQUs7aUJBQ2pCLENBQUMsQ0FBQztZQUNMLENBQUM7WUFDRCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLEdBQUcsR0FBRztnQkFDVCxJQUFJLENBQUMsSUFBSSxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSw0QkFBNEIsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxvQkFBb0I7Z0JBQ3RHLEdBQUcsSUFBSSxDQUFDLEdBQUc7YUFDWixDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDZCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRVMsY0FBYyxDQUFDLElBQW1DO1FBQzFELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTO1lBQUUsT0FBTztRQUNqRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLFVBQVUsS0FBSyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ25HLENBQUM7SUFFUyxZQUFZO1FBQ3BCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3pDLElBQUksQ0FBQyxRQUFRO1lBQUUsT0FBTztRQUN0QixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN0QixNQUFNLElBQUksR0FBRyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbkMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLEtBQUssUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3RHLElBQUksQ0FBQyxZQUFZLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUztnQkFBRSxPQUFPLElBQUksQ0FBQztZQUMxRCxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsUUFBUSxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN2RixZQUFZLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztZQUMvQixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsWUFBWSxDQUFDLElBQUksd0JBQXdCLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNuRixPQUFPLElBQUksQ0FBQztRQUNkLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRVMsZUFBZSxDQUFDLE1BQXFDO1FBQzdELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3pDLElBQUksQ0FBQyxRQUFRO1lBQUUsT0FBTztRQUN0QixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN0QixNQUFNLElBQUksR0FBRyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbkMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLEtBQUssUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3RHLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxLQUFLLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNsRyxJQUFJLENBQUMsWUFBWSxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVM7Z0JBQUUsT0FBTyxJQUFJLENBQUM7WUFDekUsVUFBVSxDQUFDLFNBQVMsSUFBSSxZQUFZLENBQUMsTUFBTSxDQUFDO1lBQzVDLFlBQVksQ0FBQyxTQUFTLElBQUksVUFBVSxDQUFDLE1BQU0sQ0FBQztZQUM1QyxZQUFZLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztZQUMvQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDN0MsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQzdDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNoQixJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxZQUFZLENBQUMsSUFBSSxtQkFBbUIsVUFBVSxDQUFDLElBQUksR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDaEcsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVTLE9BQU87UUFDZixJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDdEIsTUFBTSxJQUFJLEdBQUcsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ25DLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ3ZELElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNqQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUM3QyxPQUFPLENBQUMsc0JBQXNCLEdBQUcsS0FBSyxDQUFDO1lBQ3ZDLE9BQU8sQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxRQUFRLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztZQUN0RixPQUFPLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDcEYsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2hCLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxZQUFZLE9BQU8sQ0FBQyxXQUFXLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3pFLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRVMsU0FBUztRQUNqQixJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztRQUM5QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVTLFlBQVk7UUFDcEIsT0FBTyxJQUFJLENBQUMsSUFBSSxFQUFFO2FBQ2YsV0FBVyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDO2FBQzNELElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNoQixDQUFDO0lBRU8sZ0JBQWdCLENBQUMsTUFBK0IsRUFBRSxJQUEyQjtRQUNuRixNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDeEUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNO1lBQUUsT0FBTztRQUM5QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUM3RCxNQUFNLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBRU8sY0FBYyxDQUFDLE1BQStCLEVBQUUsSUFBWTtRQUNsRSxJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDckIsTUFBTSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNqRCxJQUFJLFNBQVMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSztnQkFBRSxPQUFPLFFBQVEsQ0FBQztZQUN2RCxTQUFTLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQztZQUM1QixPQUFPLEVBQUUsR0FBRyxRQUFRLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDO1FBQ3ZDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzsrR0F6TVUseUJBQXlCO21HQUF6Qix5QkFBeUIsaUZBbmExQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWdLVDs7NEZBbVFVLHlCQUF5QjtrQkF0YXJDLFNBQVM7K0JBQ0UsdUJBQXVCLGNBQ3JCLElBQUksWUFDTjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWdLVCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgY29tcHV0ZWQsIGluamVjdCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEkxOG5TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvaTE4bic7XG5pbXBvcnQgeyBNSU5JX0dBTUVTX0kxOE4gfSBmcm9tICcuL21pbmktZ2FtZXMuaTE4bic7XG5pbXBvcnQge1xuICBDaHJpc3RpYW5pdHlDYXJkRGVmaW5pdGlvbixcbiAgQ2hyaXN0aWFuaXR5Q2hhcmFjdGVySW5zdGFuY2UsXG4gIENocmlzdGlhbml0eUdhbWVTdGF0ZSxcbiAgQ2hyaXN0aWFuaXR5UGxheWVyU3RhdGUsXG4gIENocmlzdGlhbml0eVNlYXQsXG59IGZyb20gJy4vdHlwZXMnO1xuXG5jb25zdCBTVEFSVEVSX0NBUkRTOiBSZWNvcmQ8c3RyaW5nLCBDaHJpc3RpYW5pdHlDYXJkRGVmaW5pdGlvbj4gPSB7XG4gIG9fc2ltcGxlOiB7IGlkOiAnb19zaW1wbGUnLCBuYW1lOiAnT2ZyZW5kYSBzaW1wbGUnLCB0eXBlOiAnb2ZmZXJpbmcnLCBjb3N0OiAwLCBhdHRhY2s6IDAsIGxpZmU6IDEgfSxcbiAgcF9zY291dDogeyBpZDogJ3Bfc2NvdXQnLCBuYW1lOiAnU2NvdXQnLCB0eXBlOiAnY2hhcmFjdGVyJywgY29zdDogMSwgYXR0YWNrOiAxLCBsaWZlOiAxIH0sXG4gIHBfZ3VhcmQ6IHsgaWQ6ICdwX2d1YXJkJywgbmFtZTogJ0d1YXJkJywgdHlwZTogJ2NoYXJhY3RlcicsIGNvc3Q6IDIsIGF0dGFjazogMSwgbGlmZTogMyB9LFxuICBwX3dhcnJpb3I6IHsgaWQ6ICdwX3dhcnJpb3InLCBuYW1lOiAnV2FycmlvcicsIHR5cGU6ICdjaGFyYWN0ZXInLCBjb3N0OiAyLCBhdHRhY2s6IDIsIGxpZmU6IDIgfSxcbiAgcF9lbGRlcjogeyBpZDogJ3BfZWxkZXInLCBuYW1lOiAnRWxkZXInLCB0eXBlOiAnY2hhcmFjdGVyJywgY29zdDogMywgYXR0YWNrOiAyLCBsaWZlOiA0IH0sXG4gIHBfY2hhbXBpb246IHsgaWQ6ICdwX2NoYW1waW9uJywgbmFtZTogJ0NoYW1waW9uJywgdHlwZTogJ2NoYXJhY3RlcicsIGNvc3Q6IDQsIGF0dGFjazogNCwgbGlmZTogNCB9LFxufTtcblxuY29uc3QgU1RBUlRJTkdfR0FNRTogQ2hyaXN0aWFuaXR5R2FtZVN0YXRlID0ge1xuICBnYW1lSWQ6ICdtb2NrLWNocmlzdGlhbml0eScsXG4gIHN0YXR1czogJ2luX3Byb2dyZXNzJyxcbiAgbW9kZTogJ2xvY2FsX3Bhc3MnLFxuICB0dXJuT3duZXI6ICdQMScsXG4gIHJldmlzaW9uOiAwLFxuICB0dXJuQ291bnQ6IDEsXG4gIHNoYXJlZERlY2tDb3VudDogMTIsXG4gIGhpc3Rvcnlab25lOiBbXSxcbiAgcGxheWVyczoge1xuICAgIFAxOiB7XG4gICAgICBzZWF0OiAnUDEnLFxuICAgICAgZGlzcGxheU5hbWU6ICdKdWdhZG9yJyxcbiAgICAgIGxlYWRlck5hbWU6ICdBZGFtJyxcbiAgICAgIGxlYWRlckhwOiAxNSxcbiAgICAgIGxlYWRlck1heEhwOiAxNSxcbiAgICAgIG9mZmVyaW5nczogW3sgaW5zdGFuY2VJZDogJ3AxX29mZmVyaW5nXzAwMScsIGNhcmRJZDogJ29fc2ltcGxlJywgbmFtZTogJ09mcmVuZGEgc2ltcGxlJywgb3duZXI6ICdQMScsIHJlYWR5OiB0cnVlLCB2YWx1ZTogMSB9XSxcbiAgICAgIG9mZmVyaW5nUGxheWVkVGhpc1R1cm46IGZhbHNlLFxuICAgICAgaGFuZDogWydvX3NpbXBsZScsICdwX3Njb3V0JywgJ3Bfd2FycmlvcicsICdwX2d1YXJkJ10sXG4gICAgICBiYXR0bGVab25lOiBbXSxcbiAgICB9LFxuICAgIFAyOiB7XG4gICAgICBzZWF0OiAnUDInLFxuICAgICAgZGlzcGxheU5hbWU6ICdSaXZhbCcsXG4gICAgICBsZWFkZXJOYW1lOiAnTm9haCcsXG4gICAgICBsZWFkZXJIcDogMTUsXG4gICAgICBsZWFkZXJNYXhIcDogMTUsXG4gICAgICBvZmZlcmluZ3M6IFt7IGluc3RhbmNlSWQ6ICdwMl9vZmZlcmluZ18wMDEnLCBjYXJkSWQ6ICdvX3NpbXBsZScsIG5hbWU6ICdPZnJlbmRhIHNpbXBsZScsIG93bmVyOiAnUDInLCByZWFkeTogdHJ1ZSwgdmFsdWU6IDEgfV0sXG4gICAgICBvZmZlcmluZ1BsYXllZFRoaXNUdXJuOiBmYWxzZSxcbiAgICAgIGhhbmRDb3VudDogNCxcbiAgICAgIGJhdHRsZVpvbmU6IFtcbiAgICAgICAge1xuICAgICAgICAgIGluc3RhbmNlSWQ6ICdvcHBfMDAxJyxcbiAgICAgICAgICBjYXJkSWQ6ICdwX3Njb3V0JyxcbiAgICAgICAgICBuYW1lOiAnU2NvdXQnLFxuICAgICAgICAgIG93bmVyOiAnUDInLFxuICAgICAgICAgIGNvbnRyb2xsZXI6ICdQMicsXG4gICAgICAgICAgYXR0YWNrOiAxLFxuICAgICAgICAgIGN1cnJlbnRIcDogMSxcbiAgICAgICAgICBtYXhIcDogMSxcbiAgICAgICAgICBjYW5BdHRhY2s6IGZhbHNlLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9LFxuICB9LFxuICBsb2c6IFsnUGFydGlkYSBpbmljaWFkYS4nXSxcbn07XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbC1jaHJpc3RpYW5pdHktZ2FtZScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHRlbXBsYXRlOiBgXG4gICAgPG1haW4gY2xhc3M9XCJjaHJpc3RpYW5pdHktc2hlbGxcIj5cbiAgICAgIDxzZWN0aW9uIGNsYXNzPVwiY2hyaXN0aWFuaXR5LWhlYWRlclwiPlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIDxwPnt7IHQoJ2NocmlzdGlhbml0eUV5ZWJyb3cnKSB9fTwvcD5cbiAgICAgICAgICA8aDE+e3sgdCgnY2hyaXN0aWFuaXR5VGl0bGUnKSB9fTwvaDE+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2hyaXN0aWFuaXR5LXR1cm5cIiBbY2xhc3MuaXMtb3duLXR1cm5dPVwiaXNPd25UdXJuKClcIj5cbiAgICAgICAgICA8c3Bhbj57eyB0KCdjaHJpc3RpYW5pdHlUdXJuJykgfX08L3NwYW4+XG4gICAgICAgICAgPHN0cm9uZz57eyBjdXJyZW50UGxheWVyKCkuZGlzcGxheU5hbWUgfX08L3N0cm9uZz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L3NlY3Rpb24+XG5cbiAgICAgIDxzZWN0aW9uIGNsYXNzPVwiY2hyaXN0aWFuaXR5LXRhYmxlXCIgW2F0dHIuYXJpYS1sYWJlbF09XCJ0KCdjaHJpc3RpYW5pdHlUYWJsZScpXCI+XG4gICAgICAgIDxzZWN0aW9uIGNsYXNzPVwiY2hyaXN0aWFuaXR5LXBsYXllciBjaHJpc3RpYW5pdHktcGxheWVyLS1vcHBvbmVudFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaHJpc3RpYW5pdHktcGxheWVyX19zdW1tYXJ5XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hyaXN0aWFuaXR5LWxlYWRlclwiPlxuICAgICAgICAgICAgICA8c3Bhbj57eyBvcHBvbmVudCgpLmxlYWRlck5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDxzdHJvbmc+e3sgb3Bwb25lbnQoKS5sZWFkZXJIcCB9fS97eyBvcHBvbmVudCgpLmxlYWRlck1heEhwIH19PC9zdHJvbmc+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaHJpc3RpYW5pdHktb2ZmZXJpbmdzXCI+XG4gICAgICAgICAgICAgIDxzcGFuPnt7IHQoJ2NocmlzdGlhbml0eU9mZmVyaW5ncycpIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8c3Ryb25nPnt7IHJlYWR5T2ZmZXJpbmdzKG9wcG9uZW50KCkpIH19L3t7IG9wcG9uZW50KCkub2ZmZXJpbmdzLmxlbmd0aCB9fTwvc3Ryb25nPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hyaXN0aWFuaXR5LW9mZmVyaW5nLWNhcmRzXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgQGZvciAob2ZmZXJpbmcgb2Ygb3Bwb25lbnQoKS5vZmZlcmluZ3M7IHRyYWNrIG9mZmVyaW5nLmluc3RhbmNlSWQpIHtcbiAgICAgICAgICAgICAgICAgIDxpIFtjbGFzcy5pcy11c2VkXT1cIiFvZmZlcmluZy5yZWFkeVwiPjwvaT5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hyaXN0aWFuaXR5LWhpZGRlbi1oYW5kXCI+XG4gICAgICAgICAgICAgIDxzcGFuPnt7IHQoJ2NocmlzdGlhbml0eUhhbmQnKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPHN0cm9uZz57eyBvcHBvbmVudEhhbmRDb3VudCgpIH19PC9zdHJvbmc+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hyaXN0aWFuaXR5LWJhdHRsZS16b25lXCIgW2F0dHIuYXJpYS1sYWJlbF09XCJ0KCdjaHJpc3RpYW5pdHlPcHBvbmVudEJhdHRsZScpXCI+XG4gICAgICAgICAgICBAZm9yIChzbG90IG9mIGJhdHRsZVNsb3RzKCdQMicpOyB0cmFjayBzbG90LnRyYWNrSWQpIHtcbiAgICAgICAgICAgICAgQGlmIChzbG90LmNhcmQpIHtcbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hyaXN0aWFuaXR5LWNhcmQgY2hyaXN0aWFuaXR5LWNhcmQtLWJhdHRsZVwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3MuaXMtdGFyZ2V0XT1cInNlbGVjdGVkQXR0YWNrZXIoKVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYXR0YWNrQ2hhcmFjdGVyKHNsb3QuY2FyZClcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IHNsb3QuY2FyZC5uYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPHN0cm9uZz57eyBzbG90LmNhcmQuYXR0YWNrIH19IC8ge3sgc2xvdC5jYXJkLmN1cnJlbnRIcCB9fTwvc3Ryb25nPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNocmlzdGlhbml0eS1zbG90XCI+PC9zcGFuPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvc2VjdGlvbj5cblxuICAgICAgICA8c2VjdGlvbiBjbGFzcz1cImNocmlzdGlhbml0eS1zaGFyZWQtem9uZVwiIFthdHRyLmFyaWEtbGFiZWxdPVwidCgnY2hyaXN0aWFuaXR5U2hhcmVkWm9uZScpXCI+XG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjaHJpc3RpYW5pdHktcGlsZVwiIChjbGljayk9XCJzaG93SGlzdG9yeS5zZXQoIXNob3dIaXN0b3J5KCkpXCI+XG4gICAgICAgICAgICA8c3Bhbj57eyB0KCdjaHJpc3RpYW5pdHlIaXN0b3J5JykgfX08L3NwYW4+XG4gICAgICAgICAgICA8c3Ryb25nPnt7IGdhbWUoKS5oaXN0b3J5Wm9uZS5sZW5ndGggfX08L3N0cm9uZz5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hyaXN0aWFuaXR5LWRlY2tcIiBhcmlhLWxpdmU9XCJwb2xpdGVcIj5cbiAgICAgICAgICAgIDxzcGFuPnt7IHQoJ2NocmlzdGlhbml0eURlY2snKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxzdHJvbmc+e3sgZ2FtZSgpLnNoYXJlZERlY2tDb3VudCB9fTwvc3Ryb25nPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaHJpc3RpYW5pdHktcGxhY2VcIj5cbiAgICAgICAgICAgIDxzcGFuPnt7IHQoJ2NocmlzdGlhbml0eVBsYWNlJykgfX08L3NwYW4+XG4gICAgICAgICAgICA8c3Ryb25nPnt7IHQoJ2NocmlzdGlhbml0eUVtcHR5JykgfX08L3N0cm9uZz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9zZWN0aW9uPlxuXG4gICAgICAgIDxzZWN0aW9uIGNsYXNzPVwiY2hyaXN0aWFuaXR5LXBsYXllclwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaHJpc3RpYW5pdHktYmF0dGxlLXpvbmVcIiBbYXR0ci5hcmlhLWxhYmVsXT1cInQoJ2NocmlzdGlhbml0eVlvdXJCYXR0bGUnKVwiPlxuICAgICAgICAgICAgQGZvciAoc2xvdCBvZiBiYXR0bGVTbG90cygnUDEnKTsgdHJhY2sgc2xvdC50cmFja0lkKSB7XG4gICAgICAgICAgICAgIEBpZiAoc2xvdC5jYXJkKSB7XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNocmlzdGlhbml0eS1jYXJkIGNocmlzdGlhbml0eS1jYXJkLS1iYXR0bGVcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzLmlzLXNlbGVjdGVkXT1cInNlbGVjdGVkQXR0YWNrZXIoKT8uaW5zdGFuY2VJZCA9PT0gc2xvdC5jYXJkLmluc3RhbmNlSWRcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzLmlzLWV4aGF1c3RlZF09XCIhc2xvdC5jYXJkLmNhbkF0dGFja1wiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0QXR0YWNrZXIoc2xvdC5jYXJkKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgc2xvdC5jYXJkLm5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8c3Ryb25nPnt7IHNsb3QuY2FyZC5hdHRhY2sgfX0gLyB7eyBzbG90LmNhcmQuY3VycmVudEhwIH19PC9zdHJvbmc+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hyaXN0aWFuaXR5LXNsb3RcIj48L3NwYW4+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hyaXN0aWFuaXR5LXBsYXllcl9fc3VtbWFyeVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNocmlzdGlhbml0eS1vZmZlcmluZ3NcIj5cbiAgICAgICAgICAgICAgPHNwYW4+e3sgdCgnY2hyaXN0aWFuaXR5T2ZmZXJpbmdzJykgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDxzdHJvbmc+e3sgcmVhZHlPZmZlcmluZ3MocGxheWVyKCkpIH19L3t7IHBsYXllcigpLm9mZmVyaW5ncy5sZW5ndGggfX08L3N0cm9uZz5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNocmlzdGlhbml0eS1vZmZlcmluZy1jYXJkc1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgIEBmb3IgKG9mZmVyaW5nIG9mIHBsYXllcigpLm9mZmVyaW5nczsgdHJhY2sgb2ZmZXJpbmcuaW5zdGFuY2VJZCkge1xuICAgICAgICAgICAgICAgICAgPGkgW2NsYXNzLmlzLXVzZWRdPVwiIW9mZmVyaW5nLnJlYWR5XCI+PC9pPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY2hyaXN0aWFuaXR5LWxlYWRlciBjaHJpc3RpYW5pdHktbGVhZGVyLS10YXJnZXRcIiAoY2xpY2spPVwiYXR0YWNrTGVhZGVyKClcIj5cbiAgICAgICAgICAgICAgPHNwYW4+e3sgcGxheWVyKCkubGVhZGVyTmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPHN0cm9uZz57eyBwbGF5ZXIoKS5sZWFkZXJIcCB9fS97eyBwbGF5ZXIoKS5sZWFkZXJNYXhIcCB9fTwvc3Ryb25nPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImNocmlzdGlhbml0eS1lbmQtdHVyblwiIChjbGljayk9XCJlbmRUdXJuKClcIj5cbiAgICAgICAgICAgICAge3sgdCgnY2hyaXN0aWFuaXR5RW5kVHVybicpIH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgPC9zZWN0aW9uPlxuXG4gICAgICA8c2VjdGlvbiBjbGFzcz1cImNocmlzdGlhbml0eS1oYW5kXCIgW2F0dHIuYXJpYS1sYWJlbF09XCJ0KCdjaHJpc3RpYW5pdHlZb3VySGFuZCcpXCI+XG4gICAgICAgIEBmb3IgKGNhcmRJZCBvZiBwbGF5ZXIoKS5oYW5kID8/IFtdOyB0cmFjayBjYXJkSWQgKyAkaW5kZXgpIHtcbiAgICAgICAgICBAbGV0IGNhcmQgPSBjYXJkRGVmaW5pdGlvbihjYXJkSWQpO1xuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgY2xhc3M9XCJjaHJpc3RpYW5pdHktY2FyZCBjaHJpc3RpYW5pdHktY2FyZC0taGFuZFwiXG4gICAgICAgICAgICBbY2xhc3MuaXMtc2VsZWN0ZWRdPVwic2VsZWN0ZWRIYW5kQ2FyZCgpID09PSBjYXJkSWRcIlxuICAgICAgICAgICAgW2NsYXNzLmlzLWRpc2FibGVkXT1cIiFjYW5QbGF5KGNhcmQpXCJcbiAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RIYW5kQ2FyZChjYXJkSWQpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c21hbGw+XG4gICAgICAgICAgICAgIEBpZiAoY2FyZC50eXBlID09PSAnb2ZmZXJpbmcnKSB7XG4gICAgICAgICAgICAgICAge3sgdCgnY2hyaXN0aWFuaXR5T2ZmZXJpbmdDYXJkJykgfX1cbiAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAge3sgdCgnY2hyaXN0aWFuaXR5Q29zdCcpIH19IHt7IGNhcmQuY29zdCB9fVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L3NtYWxsPlxuICAgICAgICAgICAgPHNwYW4+e3sgY2FyZC5uYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgPHN0cm9uZz5cbiAgICAgICAgICAgICAgQGlmIChjYXJkLnR5cGUgPT09ICdvZmZlcmluZycpIHtcbiAgICAgICAgICAgICAgICAre3sgY2FyZC5saWZlIH19XG4gICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgIHt7IGNhcmQuYXR0YWNrIH19IC8ge3sgY2FyZC5saWZlIH19XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvc3Ryb25nPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICB9XG4gICAgICA8L3NlY3Rpb24+XG5cbiAgICAgIDxzZWN0aW9uIGNsYXNzPVwiY2hyaXN0aWFuaXR5LWFjdGlvbnNcIiBhcmlhLWxpdmU9XCJwb2xpdGVcIj5cbiAgICAgICAgPHA+e3sgc3RhdHVzVGV4dCgpIH19PC9wPlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIFtkaXNhYmxlZF09XCIhc2VsZWN0ZWRIYW5kQ2FyZCgpIHx8ICFjYW5QbGF5U2VsZWN0ZWQoKVwiIChjbGljayk9XCJwbGF5U2VsZWN0ZWRDYXJkKClcIj5cbiAgICAgICAgICAgIHt7IHQoJ2NocmlzdGlhbml0eVBsYXlDYXJkJykgfX1cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwicmVzZXRNb2NrKClcIj5cbiAgICAgICAgICAgIHt7IHQoJ2NocmlzdGlhbml0eVJlc2V0JykgfX1cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L3NlY3Rpb24+XG5cbiAgICAgIEBpZiAoc2hvd0hpc3RvcnkoKSkge1xuICAgICAgICA8c2VjdGlvbiBjbGFzcz1cImNocmlzdGlhbml0eS1oaXN0b3J5XCI+XG4gICAgICAgICAgPGgyPnt7IHQoJ2NocmlzdGlhbml0eUhpc3RvcnknKSB9fTwvaDI+XG4gICAgICAgICAgQGlmIChnYW1lKCkuaGlzdG9yeVpvbmUubGVuZ3RoKSB7XG4gICAgICAgICAgICA8cD57eyBoaXN0b3J5TmFtZXMoKSB9fTwvcD5cbiAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgIDxwPnt7IHQoJ2NocmlzdGlhbml0eUhpc3RvcnlFbXB0eScpIH19PC9wPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgfVxuICAgIDwvbWFpbj5cbiAgYCxcbiAgc3R5bGVzOiBbXG4gICAgYFxuICAgICAgOmhvc3Qge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgY29sb3I6IHZhcigtLXZhbC10ZXh0LWNvbG9yLCAjMWYyOTMzKTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1zaGVsbCB7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIGdhcDogMC44NzVyZW07XG4gICAgICAgIHBhZGRpbmc6IDAuNzVyZW0gMC4yNXJlbTtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgzNiwgNDgsIDY4LCAwLjEyKTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMC43NXJlbTtcbiAgICAgICAgYmFja2dyb3VuZDogI2Y2ZjhmYjtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1oZWFkZXIsXG4gICAgICAuY2hyaXN0aWFuaXR5LXBsYXllcl9fc3VtbWFyeSxcbiAgICAgIC5jaHJpc3RpYW5pdHktc2hhcmVkLXpvbmUsXG4gICAgICAuY2hyaXN0aWFuaXR5LWFjdGlvbnMge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgICAgIGdhcDogMC43NXJlbTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1oZWFkZXIgaDEsXG4gICAgICAuY2hyaXN0aWFuaXR5LWhlYWRlciBwLFxuICAgICAgLmNocmlzdGlhbml0eS1oaXN0b3J5IGgyLFxuICAgICAgLmNocmlzdGlhbml0eS1hY3Rpb25zIHAge1xuICAgICAgICBtYXJnaW46IDA7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktaGVhZGVyIGgxIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjM1cmVtO1xuICAgICAgICBsaW5lLWhlaWdodDogMS4xO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWhlYWRlciBwLFxuICAgICAgLmNocmlzdGlhbml0eS10dXJuIHNwYW4sXG4gICAgICAuY2hyaXN0aWFuaXR5LW9mZmVyaW5ncyBzcGFuLFxuICAgICAgLmNocmlzdGlhbml0eS1oaWRkZW4taGFuZCBzcGFuLFxuICAgICAgLmNocmlzdGlhbml0eS1kZWNrIHNwYW4sXG4gICAgICAuY2hyaXN0aWFuaXR5LXBsYWNlIHNwYW4sXG4gICAgICAuY2hyaXN0aWFuaXR5LXBpbGUgc3BhbixcbiAgICAgIC5jaHJpc3RpYW5pdHktbGVhZGVyIHNwYW4ge1xuICAgICAgICBjb2xvcjogcmdiYSgzMSwgNDEsIDUxLCAwLjY0KTtcbiAgICAgICAgZm9udC1zaXplOiAwLjc1cmVtO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXR1cm4sXG4gICAgICAuY2hyaXN0aWFuaXR5LWxlYWRlcixcbiAgICAgIC5jaHJpc3RpYW5pdHktb2ZmZXJpbmdzLFxuICAgICAgLmNocmlzdGlhbml0eS1oaWRkZW4taGFuZCxcbiAgICAgIC5jaHJpc3RpYW5pdHktcGlsZSxcbiAgICAgIC5jaHJpc3RpYW5pdHktZGVjayxcbiAgICAgIC5jaHJpc3RpYW5pdHktcGxhY2Uge1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBnYXA6IDAuMTVyZW07XG4gICAgICAgIG1pbi13aWR0aDogNS4yNXJlbTtcbiAgICAgICAgcGFkZGluZzogMC41NXJlbSAwLjY1cmVtO1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDM2LCA0OCwgNjgsIDAuMTIpO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAwLjVyZW07XG4gICAgICAgIGJhY2tncm91bmQ6ICNmZmZmZmY7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktdHVybi5pcy1vd24tdHVybiB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogcmdiYSgxOCwgMTI4LCAxMDgsIDAuMzUpO1xuICAgICAgICBiYWNrZ3JvdW5kOiAjZWNmZGY1O1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXRhYmxlIHtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgZ2FwOiAwLjc1cmVtO1xuICAgICAgICBwYWRkaW5nOiAwLjU1cmVtIDAuMzVyZW07XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDAuNzVyZW07XG4gICAgICAgIGJhY2tncm91bmQ6ICNkY2VhZmI7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktcGxheWVyIHtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgZ2FwOiAwLjY1cmVtO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWJhdHRsZS16b25lIHtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoNSwgbWlubWF4KDQuMnJlbSwgMWZyKSk7XG4gICAgICAgIGdhcDogMC41cmVtO1xuICAgICAgICBtaW4taGVpZ2h0OiA3cmVtO1xuICAgICAgICBwYWRkaW5nOiAwLjU1cmVtIDAuNHJlbTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMC43NXJlbTtcbiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjc2KTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1zaGFyZWQtem9uZSB7XG4gICAgICAgIHBhZGRpbmc6IDAuNTVyZW0gMC40cmVtO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAwLjc1cmVtO1xuICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOSk7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZCxcbiAgICAgIC5jaHJpc3RpYW5pdHktZW5kLXR1cm4sXG4gICAgICAuY2hyaXN0aWFuaXR5LWFjdGlvbnMgYnV0dG9uLFxuICAgICAgLmNocmlzdGlhbml0eS1waWxlLFxuICAgICAgLmNocmlzdGlhbml0eS1sZWFkZXItLXRhcmdldCB7XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMzYsIDQ4LCA2OCwgMC4xNik7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDAuNXJlbTtcbiAgICAgICAgYmFja2dyb3VuZDogI2ZmZmZmZjtcbiAgICAgICAgY29sb3I6IGluaGVyaXQ7XG4gICAgICAgIGZvbnQ6IGluaGVyaXQ7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZCB7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIGFsaWduLWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgICAgIG1pbi1oZWlnaHQ6IDUuOHJlbTtcbiAgICAgICAgcGFkZGluZzogMC41cmVtO1xuICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgICAgICBib3gtc2hhZG93OiAwIDAuNXJlbSAxLjI1cmVtIHJnYmEoMzYsIDQ4LCA2OCwgMC4wOCk7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZCBzcGFuIHtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkIHN0cm9uZyB7XG4gICAgICAgIGp1c3RpZnktc2VsZjogZW5kO1xuICAgICAgICBwYWRkaW5nOiAwLjE1cmVtIDAuMzVyZW07XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4O1xuICAgICAgICBiYWNrZ3JvdW5kOiAjZWRmMmY3O1xuICAgICAgICBmb250LXNpemU6IDAuOHJlbTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkLmlzLXNlbGVjdGVkIHtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiAjMjU2M2ViO1xuICAgICAgICBib3gtc2hhZG93OiAwIDAgMCAwLjJyZW0gcmdiYSgzNywgOTksIDIzNSwgMC4xNik7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZC5pcy1kaXNhYmxlZCxcbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZC5pcy1leGhhdXN0ZWQge1xuICAgICAgICBvcGFjaXR5OiAwLjU1O1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWNhcmQuaXMtdGFyZ2V0IHtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiAjZGMyNjI2O1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LW9mZmVyaW5nLWNhcmRzIHtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgZ3JpZC1hdXRvLWZsb3c6IGNvbHVtbjtcbiAgICAgICAgZ3JpZC1hdXRvLWNvbHVtbnM6IDAuN3JlbTtcbiAgICAgICAgZ2FwOiAwLjE2cmVtO1xuICAgICAgICBhbGlnbi1pdGVtczogZW5kO1xuICAgICAgICBtaW4taGVpZ2h0OiAxLjA1cmVtO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LW9mZmVyaW5nLWNhcmRzIGkge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgd2lkdGg6IDAuNjVyZW07XG4gICAgICAgIGhlaWdodDogMC45NXJlbTtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgxNiwgNDIsIDY3LCAwLjIyKTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMC4xOHJlbTtcbiAgICAgICAgYmFja2dyb3VuZDogI2Y4ZmFmYztcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1vZmZlcmluZy1jYXJkcyBpLmlzLXVzZWQge1xuICAgICAgICBiYWNrZ3JvdW5kOiAjY2JkNWUxO1xuICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSg5MGRlZyk7XG4gICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IGNlbnRlcjtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1zbG90IHtcbiAgICAgICAgbWluLWhlaWdodDogNS44cmVtO1xuICAgICAgICBib3JkZXI6IDFweCBkYXNoZWQgcmdiYSgzNiwgNDgsIDY4LCAwLjIyKTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMC41cmVtO1xuICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNDUpO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWhhbmQge1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBncmlkLWF1dG8tY29sdW1uczogbWlubWF4KDZyZW0sIDhyZW0pO1xuICAgICAgICBncmlkLWF1dG8tZmxvdzogY29sdW1uO1xuICAgICAgICBnYXA6IDAuNTVyZW07XG4gICAgICAgIG92ZXJmbG93LXg6IGF1dG87XG4gICAgICAgIHBhZGRpbmctYm90dG9tOiAwLjI1cmVtO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWFjdGlvbnMge1xuICAgICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgICAgICAgcGFkZGluZzogMC43NXJlbTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMC43NXJlbTtcbiAgICAgICAgYmFja2dyb3VuZDogI2ZmZmZmZjtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1hY3Rpb25zIGRpdiB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICAgICAgZ2FwOiAwLjVyZW07XG4gICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktYWN0aW9ucyBidXR0b24sXG4gICAgICAuY2hyaXN0aWFuaXR5LWVuZC10dXJuIHtcbiAgICAgICAgbWluLWhlaWdodDogMi40cmVtO1xuICAgICAgICBwYWRkaW5nOiAwIDAuNzVyZW07XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktYWN0aW9ucyBidXR0b246bm90KDpkaXNhYmxlZCksXG4gICAgICAuY2hyaXN0aWFuaXR5LWVuZC10dXJuIHtcbiAgICAgICAgYmFja2dyb3VuZDogIzEwMmE0MztcbiAgICAgICAgY29sb3I6ICNmZmZmZmY7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktaGlzdG9yeSB7XG4gICAgICAgIHBhZGRpbmc6IDAuNzVyZW07XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDAuNzVyZW07XG4gICAgICAgIGJhY2tncm91bmQ6ICNmZmZmZmY7XG4gICAgICB9XG5cbiAgICAgIGJ1dHRvbiB7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIH1cblxuICAgICAgYnV0dG9uOmRpc2FibGVkIHtcbiAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbiAgICAgICAgb3BhY2l0eTogMC41NTtcbiAgICAgIH1cblxuICAgICAgYnV0dG9uOmZvY3VzLXZpc2libGUge1xuICAgICAgICBvdXRsaW5lOiAwLjE4NzVyZW0gc29saWQgcmdiYSgzNywgOTksIDIzNSwgMC4yNCk7XG4gICAgICAgIG91dGxpbmUtb2Zmc2V0OiAwLjEyNXJlbTtcbiAgICAgIH1cblxuICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDcyMHB4KSB7XG4gICAgICAgIC5jaHJpc3RpYW5pdHktc2hlbGwge1xuICAgICAgICAgIHBhZGRpbmc6IDAuNTVyZW0gMDtcbiAgICAgICAgICBib3JkZXItcmlnaHQ6IDA7XG4gICAgICAgICAgYm9yZGVyLWxlZnQ6IDA7XG4gICAgICAgICAgYm9yZGVyLXJhZGl1czogMDtcbiAgICAgICAgfVxuXG4gICAgICAgIC5jaHJpc3RpYW5pdHktaGVhZGVyLFxuICAgICAgICAuY2hyaXN0aWFuaXR5LXBsYXllcl9fc3VtbWFyeSxcbiAgICAgICAgLmNocmlzdGlhbml0eS1zaGFyZWQtem9uZSxcbiAgICAgICAgLmNocmlzdGlhbml0eS1hY3Rpb25zIHtcbiAgICAgICAgICBhbGlnbi1pdGVtczogc3RyZXRjaDtcbiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICB9XG5cbiAgICAgICAgLmNocmlzdGlhbml0eS1iYXR0bGUtem9uZSB7XG4gICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoNSwgbWlubWF4KDMuOHJlbSwgMWZyKSk7XG4gICAgICAgICAgb3ZlcmZsb3cteDogYXV0bztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIGAsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIENocmlzdGlhbml0eUdhbWVDb21wb25lbnQge1xuICBwcml2YXRlIGkxOG4gPSBpbmplY3QoSTE4blNlcnZpY2UpO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBnYW1lID0gc2lnbmFsPENocmlzdGlhbml0eUdhbWVTdGF0ZT4oc3RydWN0dXJlZENsb25lKFNUQVJUSU5HX0dBTUUpKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHNlbGVjdGVkSGFuZENhcmQgPSBzaWduYWw8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gIHByb3RlY3RlZCByZWFkb25seSBzZWxlY3RlZEF0dGFja2VyID0gc2lnbmFsPENocmlzdGlhbml0eUNoYXJhY3Rlckluc3RhbmNlIHwgbnVsbD4obnVsbCk7XG4gIHByb3RlY3RlZCByZWFkb25seSBzaG93SGlzdG9yeSA9IHNpZ25hbChmYWxzZSk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHBsYXllciA9IGNvbXB1dGVkKCgpID0+IHRoaXMuZ2FtZSgpLnBsYXllcnMuUDEpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgb3Bwb25lbnQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmdhbWUoKS5wbGF5ZXJzLlAyKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGN1cnJlbnRQbGF5ZXIgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmdhbWUoKS5wbGF5ZXJzW3RoaXMuZ2FtZSgpLnR1cm5Pd25lcl0pO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgaXNPd25UdXJuID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5nYW1lKCkudHVybk93bmVyID09PSAnUDEnKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IG9wcG9uZW50SGFuZENvdW50ID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5vcHBvbmVudCgpLmhhbmRDb3VudCA/PyB0aGlzLm9wcG9uZW50KCkuaGFuZD8ubGVuZ3RoID8/IDApO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc3RhdHVzVGV4dCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBhdHRhY2tlciA9IHRoaXMuc2VsZWN0ZWRBdHRhY2tlcigpO1xuICAgIGNvbnN0IGhhbmRDYXJkID0gdGhpcy5zZWxlY3RlZEhhbmRDYXJkKCk7XG4gICAgaWYgKCF0aGlzLmlzT3duVHVybigpKSB7XG4gICAgICByZXR1cm4gdGhpcy50KCdjaHJpc3RpYW5pdHlXYWl0VHVybicpO1xuICAgIH1cbiAgICBpZiAoYXR0YWNrZXIpIHtcbiAgICAgIHJldHVybiB0aGlzLnQoJ2NocmlzdGlhbml0eUNob29zZVRhcmdldCcpO1xuICAgIH1cbiAgICBpZiAoaGFuZENhcmQpIHtcbiAgICAgIGNvbnN0IGNhcmQgPSB0aGlzLmNhcmREZWZpbml0aW9uKGhhbmRDYXJkKTtcbiAgICAgIHJldHVybiB0aGlzLmNhblBsYXkoY2FyZCkgPyB0aGlzLnQoJ2NocmlzdGlhbml0eVJlYWR5VG9QbGF5JykgOiB0aGlzLnQoJ2NocmlzdGlhbml0eU5lZWRPZmZlcmluZ3MnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudCgnY2hyaXN0aWFuaXR5Q2hvb3NlQ2FyZCcpO1xuICB9KTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmkxOG4ucmVnaXN0ZXJEZWZhdWx0cygnTWluaUdhbWVzJywgTUlOSV9HQU1FU19JMThOKTtcbiAgfVxuXG4gIHByb3RlY3RlZCB0KGtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICB0aGlzLmkxOG4ubGFuZygpO1xuICAgIHJldHVybiB0aGlzLmkxOG4udChrZXksICdNaW5pR2FtZXMnKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjYXJkRGVmaW5pdGlvbihjYXJkSWQ6IHN0cmluZyk6IENocmlzdGlhbml0eUNhcmREZWZpbml0aW9uIHtcbiAgICByZXR1cm4gU1RBUlRFUl9DQVJEU1tjYXJkSWRdID8/IFNUQVJURVJfQ0FSRFNbJ3Bfc2NvdXQnXTtcbiAgfVxuXG4gIHByb3RlY3RlZCBiYXR0bGVTbG90cyhzZWF0OiBDaHJpc3RpYW5pdHlTZWF0KTogQXJyYXk8eyB0cmFja0lkOiBzdHJpbmc7IGNhcmQ/OiBDaHJpc3RpYW5pdHlDaGFyYWN0ZXJJbnN0YW5jZSB9PiB7XG4gICAgY29uc3QgY2FyZHMgPSB0aGlzLmdhbWUoKS5wbGF5ZXJzW3NlYXRdLmJhdHRsZVpvbmU7XG4gICAgcmV0dXJuIEFycmF5LmZyb20oeyBsZW5ndGg6IDUgfSwgKF8sIGluZGV4KSA9PiAoe1xuICAgICAgdHJhY2tJZDogY2FyZHNbaW5kZXhdPy5pbnN0YW5jZUlkID8/IGAke3NlYXR9LWVtcHR5LSR7aW5kZXh9YCxcbiAgICAgIGNhcmQ6IGNhcmRzW2luZGV4XSxcbiAgICB9KSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVhZHlPZmZlcmluZ3MocGxheWVyOiBDaHJpc3RpYW5pdHlQbGF5ZXJTdGF0ZSk6IG51bWJlciB7XG4gICAgcmV0dXJuIHBsYXllci5vZmZlcmluZ3MucmVkdWNlKCh0b3RhbCwgb2ZmZXJpbmcpID0+IHRvdGFsICsgKG9mZmVyaW5nLnJlYWR5ID8gb2ZmZXJpbmcudmFsdWUgOiAwKSwgMCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY2FuUGxheShjYXJkOiBDaHJpc3RpYW5pdHlDYXJkRGVmaW5pdGlvbik6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5pc093blR1cm4oKSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChjYXJkLnR5cGUgPT09ICdvZmZlcmluZycpIHJldHVybiAhdGhpcy5wbGF5ZXIoKS5vZmZlcmluZ1BsYXllZFRoaXNUdXJuO1xuICAgIHJldHVybiB0aGlzLnJlYWR5T2ZmZXJpbmdzKHRoaXMucGxheWVyKCkpID49IGNhcmQuY29zdCAmJiB0aGlzLnBsYXllcigpLmJhdHRsZVpvbmUubGVuZ3RoIDwgNTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjYW5QbGF5U2VsZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGVkSGFuZENhcmQoKTtcbiAgICByZXR1cm4gISFzZWxlY3RlZCAmJiB0aGlzLmNhblBsYXkodGhpcy5jYXJkRGVmaW5pdGlvbihzZWxlY3RlZCkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNlbGVjdEhhbmRDYXJkKGNhcmRJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZEF0dGFja2VyLnNldChudWxsKTtcbiAgICB0aGlzLnNlbGVjdGVkSGFuZENhcmQuc2V0KHRoaXMuc2VsZWN0ZWRIYW5kQ2FyZCgpID09PSBjYXJkSWQgPyBudWxsIDogY2FyZElkKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBwbGF5U2VsZWN0ZWRDYXJkKCk6IHZvaWQge1xuICAgIGNvbnN0IGNhcmRJZCA9IHRoaXMuc2VsZWN0ZWRIYW5kQ2FyZCgpO1xuICAgIGlmICghY2FyZElkKSByZXR1cm47XG4gICAgY29uc3QgY2FyZCA9IHRoaXMuY2FyZERlZmluaXRpb24oY2FyZElkKTtcbiAgICBpZiAoIXRoaXMuY2FuUGxheShjYXJkKSkgcmV0dXJuO1xuXG4gICAgdGhpcy5nYW1lLnVwZGF0ZShnYW1lID0+IHtcbiAgICAgIGNvbnN0IG5leHQgPSBzdHJ1Y3R1cmVkQ2xvbmUoZ2FtZSk7XG4gICAgICBjb25zdCBwbGF5ZXIgPSBuZXh0LnBsYXllcnMuUDE7XG4gICAgICBjb25zdCBoYW5kSW5kZXggPSBwbGF5ZXIuaGFuZD8uaW5kZXhPZihjYXJkSWQpID8/IC0xO1xuICAgICAgaWYgKGhhbmRJbmRleCA8IDAgfHwgIXBsYXllci5oYW5kKSByZXR1cm4gZ2FtZTtcbiAgICAgIHBsYXllci5oYW5kLnNwbGljZShoYW5kSW5kZXgsIDEpO1xuICAgICAgaWYgKGNhcmQudHlwZSA9PT0gJ29mZmVyaW5nJykge1xuICAgICAgICBwbGF5ZXIub2ZmZXJpbmdzLnB1c2goe1xuICAgICAgICAgIGluc3RhbmNlSWQ6IGBwMV9vZmZlcmluZ18ke25leHQucmV2aXNpb24gKyAxfWAsXG4gICAgICAgICAgY2FyZElkOiBjYXJkLmlkLFxuICAgICAgICAgIG5hbWU6IGNhcmQubmFtZSxcbiAgICAgICAgICBvd25lcjogJ1AxJyxcbiAgICAgICAgICByZWFkeTogdHJ1ZSxcbiAgICAgICAgICB2YWx1ZTogY2FyZC5saWZlLFxuICAgICAgICB9KTtcbiAgICAgICAgcGxheWVyLm9mZmVyaW5nUGxheWVkVGhpc1R1cm4gPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zcGVuZE9mZmVyaW5ncyhwbGF5ZXIsIGNhcmQuY29zdCk7XG4gICAgICAgIHBsYXllci5iYXR0bGVab25lLnB1c2goe1xuICAgICAgICAgIGluc3RhbmNlSWQ6IGBwMV8ke25leHQucmV2aXNpb24gKyAxfV8ke3BsYXllci5iYXR0bGVab25lLmxlbmd0aH1gLFxuICAgICAgICAgIGNhcmRJZDogY2FyZC5pZCxcbiAgICAgICAgICBuYW1lOiBjYXJkLm5hbWUsXG4gICAgICAgICAgb3duZXI6ICdQMScsXG4gICAgICAgICAgY29udHJvbGxlcjogJ1AxJyxcbiAgICAgICAgICBhdHRhY2s6IGNhcmQuYXR0YWNrLFxuICAgICAgICAgIGN1cnJlbnRIcDogY2FyZC5saWZlLFxuICAgICAgICAgIG1heEhwOiBjYXJkLmxpZmUsXG4gICAgICAgICAgY2FuQXR0YWNrOiBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBuZXh0LnJldmlzaW9uKys7XG4gICAgICBuZXh0LmxvZyA9IFtcbiAgICAgICAgY2FyZC50eXBlID09PSAnb2ZmZXJpbmcnID8gYCR7Y2FyZC5uYW1lfSBxdWVkYSBsaXN0YSBjb21vIG9mcmVuZGEuYCA6IGAke2NhcmQubmFtZX0gZW50cmEgZW4gYmF0YWxsYS5gLFxuICAgICAgICAuLi5uZXh0LmxvZyxcbiAgICAgIF0uc2xpY2UoMCwgNCk7XG4gICAgICByZXR1cm4gbmV4dDtcbiAgICB9KTtcbiAgICB0aGlzLnNlbGVjdGVkSGFuZENhcmQuc2V0KG51bGwpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNlbGVjdEF0dGFja2VyKGNhcmQ6IENocmlzdGlhbml0eUNoYXJhY3Rlckluc3RhbmNlKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZEhhbmRDYXJkLnNldChudWxsKTtcbiAgICBpZiAoIXRoaXMuaXNPd25UdXJuKCkgfHwgIWNhcmQuY2FuQXR0YWNrKSByZXR1cm47XG4gICAgdGhpcy5zZWxlY3RlZEF0dGFja2VyLnNldCh0aGlzLnNlbGVjdGVkQXR0YWNrZXIoKT8uaW5zdGFuY2VJZCA9PT0gY2FyZC5pbnN0YW5jZUlkID8gbnVsbCA6IGNhcmQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGF0dGFja0xlYWRlcigpOiB2b2lkIHtcbiAgICBjb25zdCBhdHRhY2tlciA9IHRoaXMuc2VsZWN0ZWRBdHRhY2tlcigpO1xuICAgIGlmICghYXR0YWNrZXIpIHJldHVybjtcbiAgICB0aGlzLmdhbWUudXBkYXRlKGdhbWUgPT4ge1xuICAgICAgY29uc3QgbmV4dCA9IHN0cnVjdHVyZWRDbG9uZShnYW1lKTtcbiAgICAgIGNvbnN0IGxpdmVBdHRhY2tlciA9IG5leHQucGxheWVycy5QMS5iYXR0bGVab25lLmZpbmQoY2FyZCA9PiBjYXJkLmluc3RhbmNlSWQgPT09IGF0dGFja2VyLmluc3RhbmNlSWQpO1xuICAgICAgaWYgKCFsaXZlQXR0YWNrZXIgfHwgIWxpdmVBdHRhY2tlci5jYW5BdHRhY2spIHJldHVybiBnYW1lO1xuICAgICAgbmV4dC5wbGF5ZXJzLlAyLmxlYWRlckhwID0gTWF0aC5tYXgoMCwgbmV4dC5wbGF5ZXJzLlAyLmxlYWRlckhwIC0gbGl2ZUF0dGFja2VyLmF0dGFjayk7XG4gICAgICBsaXZlQXR0YWNrZXIuY2FuQXR0YWNrID0gZmFsc2U7XG4gICAgICBuZXh0LnJldmlzaW9uKys7XG4gICAgICBuZXh0LmxvZyA9IFtgJHtsaXZlQXR0YWNrZXIubmFtZX0gYXRhY2EgYWwgbGlkZXIgcml2YWwuYCwgLi4ubmV4dC5sb2ddLnNsaWNlKDAsIDQpO1xuICAgICAgcmV0dXJuIG5leHQ7XG4gICAgfSk7XG4gICAgdGhpcy5zZWxlY3RlZEF0dGFja2VyLnNldChudWxsKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhdHRhY2tDaGFyYWN0ZXIodGFyZ2V0OiBDaHJpc3RpYW5pdHlDaGFyYWN0ZXJJbnN0YW5jZSk6IHZvaWQge1xuICAgIGNvbnN0IGF0dGFja2VyID0gdGhpcy5zZWxlY3RlZEF0dGFja2VyKCk7XG4gICAgaWYgKCFhdHRhY2tlcikgcmV0dXJuO1xuICAgIHRoaXMuZ2FtZS51cGRhdGUoZ2FtZSA9PiB7XG4gICAgICBjb25zdCBuZXh0ID0gc3RydWN0dXJlZENsb25lKGdhbWUpO1xuICAgICAgY29uc3QgbGl2ZUF0dGFja2VyID0gbmV4dC5wbGF5ZXJzLlAxLmJhdHRsZVpvbmUuZmluZChjYXJkID0+IGNhcmQuaW5zdGFuY2VJZCA9PT0gYXR0YWNrZXIuaW5zdGFuY2VJZCk7XG4gICAgICBjb25zdCBsaXZlVGFyZ2V0ID0gbmV4dC5wbGF5ZXJzLlAyLmJhdHRsZVpvbmUuZmluZChjYXJkID0+IGNhcmQuaW5zdGFuY2VJZCA9PT0gdGFyZ2V0Lmluc3RhbmNlSWQpO1xuICAgICAgaWYgKCFsaXZlQXR0YWNrZXIgfHwgIWxpdmVUYXJnZXQgfHwgIWxpdmVBdHRhY2tlci5jYW5BdHRhY2spIHJldHVybiBnYW1lO1xuICAgICAgbGl2ZVRhcmdldC5jdXJyZW50SHAgLT0gbGl2ZUF0dGFja2VyLmF0dGFjaztcbiAgICAgIGxpdmVBdHRhY2tlci5jdXJyZW50SHAgLT0gbGl2ZVRhcmdldC5hdHRhY2s7XG4gICAgICBsaXZlQXR0YWNrZXIuY2FuQXR0YWNrID0gZmFsc2U7XG4gICAgICB0aGlzLmNsZWFudXBEZXN0cm95ZWQobmV4dC5wbGF5ZXJzLlAxLCBuZXh0KTtcbiAgICAgIHRoaXMuY2xlYW51cERlc3Ryb3llZChuZXh0LnBsYXllcnMuUDIsIG5leHQpO1xuICAgICAgbmV4dC5yZXZpc2lvbisrO1xuICAgICAgbmV4dC5sb2cgPSBbYCR7bGl2ZUF0dGFja2VyLm5hbWV9IGNvbWJhdGUgY29udHJhICR7bGl2ZVRhcmdldC5uYW1lfS5gLCAuLi5uZXh0LmxvZ10uc2xpY2UoMCwgNCk7XG4gICAgICByZXR1cm4gbmV4dDtcbiAgICB9KTtcbiAgICB0aGlzLnNlbGVjdGVkQXR0YWNrZXIuc2V0KG51bGwpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGVuZFR1cm4oKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZEhhbmRDYXJkLnNldChudWxsKTtcbiAgICB0aGlzLnNlbGVjdGVkQXR0YWNrZXIuc2V0KG51bGwpO1xuICAgIHRoaXMuZ2FtZS51cGRhdGUoZ2FtZSA9PiB7XG4gICAgICBjb25zdCBuZXh0ID0gc3RydWN0dXJlZENsb25lKGdhbWUpO1xuICAgICAgbmV4dC50dXJuT3duZXIgPSBuZXh0LnR1cm5Pd25lciA9PT0gJ1AxJyA/ICdQMicgOiAnUDEnO1xuICAgICAgbmV4dC50dXJuQ291bnQrKztcbiAgICAgIGNvbnN0IGN1cnJlbnQgPSBuZXh0LnBsYXllcnNbbmV4dC50dXJuT3duZXJdO1xuICAgICAgY3VycmVudC5vZmZlcmluZ1BsYXllZFRoaXNUdXJuID0gZmFsc2U7XG4gICAgICBjdXJyZW50Lm9mZmVyaW5ncyA9IGN1cnJlbnQub2ZmZXJpbmdzLm1hcChvZmZlcmluZyA9PiAoeyAuLi5vZmZlcmluZywgcmVhZHk6IHRydWUgfSkpO1xuICAgICAgY3VycmVudC5iYXR0bGVab25lID0gY3VycmVudC5iYXR0bGVab25lLm1hcChjYXJkID0+ICh7IC4uLmNhcmQsIGNhbkF0dGFjazogdHJ1ZSB9KSk7XG4gICAgICBuZXh0LnJldmlzaW9uKys7XG4gICAgICBuZXh0LmxvZyA9IFtgVHVybm8gZGUgJHtjdXJyZW50LmRpc3BsYXlOYW1lfS5gLCAuLi5uZXh0LmxvZ10uc2xpY2UoMCwgNCk7XG4gICAgICByZXR1cm4gbmV4dDtcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZXNldE1vY2soKTogdm9pZCB7XG4gICAgdGhpcy5nYW1lLnNldChzdHJ1Y3R1cmVkQ2xvbmUoU1RBUlRJTkdfR0FNRSkpO1xuICAgIHRoaXMuc2VsZWN0ZWRIYW5kQ2FyZC5zZXQobnVsbCk7XG4gICAgdGhpcy5zZWxlY3RlZEF0dGFja2VyLnNldChudWxsKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoaXN0b3J5TmFtZXMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nYW1lKClcbiAgICAgIC5oaXN0b3J5Wm9uZS5tYXAoY2FyZElkID0+IHRoaXMuY2FyZERlZmluaXRpb24oY2FyZElkKS5uYW1lKVxuICAgICAgLmpvaW4oJywgJyk7XG4gIH1cblxuICBwcml2YXRlIGNsZWFudXBEZXN0cm95ZWQocGxheWVyOiBDaHJpc3RpYW5pdHlQbGF5ZXJTdGF0ZSwgZ2FtZTogQ2hyaXN0aWFuaXR5R2FtZVN0YXRlKTogdm9pZCB7XG4gICAgY29uc3QgZGVzdHJveWVkID0gcGxheWVyLmJhdHRsZVpvbmUuZmlsdGVyKGNhcmQgPT4gY2FyZC5jdXJyZW50SHAgPD0gMCk7XG4gICAgaWYgKCFkZXN0cm95ZWQubGVuZ3RoKSByZXR1cm47XG4gICAgZ2FtZS5oaXN0b3J5Wm9uZS5wdXNoKC4uLmRlc3Ryb3llZC5tYXAoY2FyZCA9PiBjYXJkLmNhcmRJZCkpO1xuICAgIHBsYXllci5iYXR0bGVab25lID0gcGxheWVyLmJhdHRsZVpvbmUuZmlsdGVyKGNhcmQgPT4gY2FyZC5jdXJyZW50SHAgPiAwKTtcbiAgfVxuXG4gIHByaXZhdGUgc3BlbmRPZmZlcmluZ3MocGxheWVyOiBDaHJpc3RpYW5pdHlQbGF5ZXJTdGF0ZSwgY29zdDogbnVtYmVyKTogdm9pZCB7XG4gICAgbGV0IHJlbWFpbmluZyA9IGNvc3Q7XG4gICAgcGxheWVyLm9mZmVyaW5ncyA9IHBsYXllci5vZmZlcmluZ3MubWFwKG9mZmVyaW5nID0+IHtcbiAgICAgIGlmIChyZW1haW5pbmcgPD0gMCB8fCAhb2ZmZXJpbmcucmVhZHkpIHJldHVybiBvZmZlcmluZztcbiAgICAgIHJlbWFpbmluZyAtPSBvZmZlcmluZy52YWx1ZTtcbiAgICAgIHJldHVybiB7IC4uLm9mZmVyaW5nLCByZWFkeTogZmFsc2UgfTtcbiAgICB9KTtcbiAgfVxufVxuIl19
|
|
701
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hyaXN0aWFuaXR5LWdhbWUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL29yZ2FuaXNtcy9taW5pLWdhbWVzL2NocmlzdGlhbml0eS1nYW1lLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXBFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7O0FBaUJwRCxNQUFNLGFBQWEsR0FBK0M7SUFDaEUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRTtJQUNuRyxPQUFPLEVBQUUsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRTtJQUN6RixPQUFPLEVBQUUsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRTtJQUN6RixTQUFTLEVBQUUsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRTtJQUMvRixPQUFPLEVBQUUsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRTtJQUN6RixVQUFVLEVBQUUsRUFBRSxFQUFFLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRTtDQUNuRyxDQUFDO0FBRUYsTUFBTSxhQUFhLEdBQTBCO0lBQzNDLE1BQU0sRUFBRSxtQkFBbUI7SUFDM0IsTUFBTSxFQUFFLGFBQWE7SUFDckIsSUFBSSxFQUFFLFlBQVk7SUFDbEIsU0FBUyxFQUFFLElBQUk7SUFDZixRQUFRLEVBQUUsQ0FBQztJQUNYLFNBQVMsRUFBRSxDQUFDO0lBQ1osZUFBZSxFQUFFLEVBQUU7SUFDbkIsV0FBVyxFQUFFLEVBQUU7SUFDZixPQUFPLEVBQUU7UUFDUCxFQUFFLEVBQUU7WUFDRixJQUFJLEVBQUUsSUFBSTtZQUNWLFdBQVcsRUFBRSxTQUFTO1lBQ3RCLFVBQVUsRUFBRSxNQUFNO1lBQ2xCLFFBQVEsRUFBRSxFQUFFO1lBQ1osV0FBVyxFQUFFLEVBQUU7WUFDZixTQUFTLEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQzlILHNCQUFzQixFQUFFLEtBQUs7WUFDN0IsSUFBSSxFQUFFLENBQUMsVUFBVSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsU0FBUyxDQUFDO1lBQ3JELFVBQVUsRUFBRSxFQUFFO1NBQ2Y7UUFDRCxFQUFFLEVBQUU7WUFDRixJQUFJLEVBQUUsSUFBSTtZQUNWLFdBQVcsRUFBRSxPQUFPO1lBQ3BCLFVBQVUsRUFBRSxNQUFNO1lBQ2xCLFFBQVEsRUFBRSxFQUFFO1lBQ1osV0FBVyxFQUFFLEVBQUU7WUFDZixTQUFTLEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQzlILHNCQUFzQixFQUFFLEtBQUs7WUFDN0IsU0FBUyxFQUFFLENBQUM7WUFDWixVQUFVLEVBQUU7Z0JBQ1Y7b0JBQ0UsVUFBVSxFQUFFLFNBQVM7b0JBQ3JCLE1BQU0sRUFBRSxTQUFTO29CQUNqQixJQUFJLEVBQUUsT0FBTztvQkFDYixLQUFLLEVBQUUsSUFBSTtvQkFDWCxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsTUFBTSxFQUFFLENBQUM7b0JBQ1QsU0FBUyxFQUFFLENBQUM7b0JBQ1osS0FBSyxFQUFFLENBQUM7b0JBQ1IsU0FBUyxFQUFFLEtBQUs7aUJBQ2pCO2FBQ0Y7U0FDRjtLQUNGO0lBQ0QsR0FBRyxFQUFFLENBQUMsbUJBQW1CLENBQUM7Q0FDM0IsQ0FBQztBQXNuQkYsTUFBTSxPQUFPLHlCQUF5QjtJQStCcEM7UUE5QlEsU0FBSSxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUVoQixTQUFJLEdBQUcsTUFBTSxDQUF3QixlQUFlLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztRQUNyRSxxQkFBZ0IsR0FBRyxNQUFNLENBQWdCLElBQUksQ0FBQyxDQUFDO1FBQy9DLHFCQUFnQixHQUFHLE1BQU0sQ0FBdUMsSUFBSSxDQUFDLENBQUM7UUFDdEUsb0JBQWUsR0FBRyxNQUFNLENBQWlDLElBQUksQ0FBQyxDQUFDO1FBQy9ELGdCQUFXLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTVCLFdBQU0sR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNoRCxhQUFRLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDbEQsa0JBQWEsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUMzRSxjQUFTLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxTQUFTLEtBQUssSUFBSSxDQUFDLENBQUM7UUFDM0Qsc0JBQWlCLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzFFLHNCQUFpQixHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxJQUFJLEVBQUUsTUFBTSxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ25HLGVBQVUsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQzVDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3pDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3pDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQztnQkFDdEIsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLHNCQUFzQixDQUFDLENBQUM7WUFDeEMsQ0FBQztZQUNELElBQUksUUFBUSxFQUFFLENBQUM7Z0JBQ2IsT0FBTyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLDBCQUEwQixDQUFDLENBQUM7WUFDckgsQ0FBQztZQUNELElBQUksUUFBUSxFQUFFLENBQUM7Z0JBQ2IsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDM0MsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLHlCQUF5QixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsMkJBQTJCLENBQUMsQ0FBQztZQUN0RyxDQUFDO1lBQ0QsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLHdCQUF3QixDQUFDLENBQUM7UUFDMUMsQ0FBQyxDQUFDLENBQUM7UUFHRCxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsRUFBRSxlQUFlLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRVMsQ0FBQyxDQUFDLEdBQVc7UUFDckIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNqQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRVMsY0FBYyxDQUFDLE1BQWM7UUFDckMsT0FBTyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFUyxXQUFXLENBQUMsSUFBc0I7UUFDMUMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxVQUFVLENBQUM7UUFDbkQsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztZQUM5QyxPQUFPLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLFVBQVUsSUFBSSxHQUFHLElBQUksVUFBVSxLQUFLLEVBQUU7WUFDN0QsSUFBSSxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUM7U0FDbkIsQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDO0lBRVMsZUFBZSxDQUFDLEtBQWE7UUFDckMsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVTLFlBQVksQ0FBQyxLQUFhLEVBQUUsS0FBYSxFQUFFLFFBQWlCO1FBQ3BFLElBQUksS0FBSyxJQUFJLENBQUM7WUFBRSxPQUFPLFFBQVEsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUM1RCxNQUFNLE1BQU0sR0FBRyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDL0IsTUFBTSxNQUFNLEdBQUcsS0FBSyxHQUFHLE1BQU0sQ0FBQztRQUM5QixNQUFNLE1BQU0sR0FBRyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQzFCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDO1FBQ3JDLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUM5QyxPQUFPLEdBQUcsSUFBSSxlQUFlLElBQUksZUFBZSxNQUFNLE1BQU0sQ0FBQztJQUMvRCxDQUFDO0lBRVMsY0FBYyxDQUFDLE1BQStCO1FBQ3RELE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN4RyxDQUFDO0lBRVMsT0FBTyxDQUFDLElBQWdDO1FBQ2hELElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDcEMsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFVBQVU7WUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLHNCQUFzQixDQUFDO1FBQzNFLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNoRyxDQUFDO0lBRVMsZUFBZTtRQUN2QixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUN6QyxPQUFPLENBQUMsQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDbkUsQ0FBQztJQUVTLGNBQWMsQ0FBQyxNQUFjO1FBQ3JDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDOUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRVMsZ0JBQWdCO1FBQ3hCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxNQUFNO1lBQUUsT0FBTztRQUNwQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztZQUFFLE9BQU87UUFFaEMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDdEIsTUFBTSxJQUFJLEdBQUcsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ25DLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQy9CLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ3JELElBQUksU0FBUyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJO2dCQUFFLE9BQU8sSUFBSSxDQUFDO1lBQy9DLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNqQyxJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssVUFBVSxFQUFFLENBQUM7Z0JBQzdCLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDO29CQUNwQixVQUFVLEVBQUUsZUFBZSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsRUFBRTtvQkFDOUMsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFO29CQUNmLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtvQkFDZixLQUFLLEVBQUUsSUFBSTtvQkFDWCxLQUFLLEVBQUUsSUFBSTtvQkFDWCxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUk7aUJBQ2pCLENBQUMsQ0FBQztnQkFDSCxNQUFNLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDO1lBQ3ZDLENBQUM7aUJBQU0sQ0FBQztnQkFDTixJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3ZDLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDO29CQUNyQixVQUFVLEVBQUUsTUFBTSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRTtvQkFDakUsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFO29CQUNmLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtvQkFDZixLQUFLLEVBQUUsSUFBSTtvQkFDWCxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO29CQUNuQixTQUFTLEVBQUUsSUFBSSxDQUFDLElBQUk7b0JBQ3BCLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSTtvQkFDaEIsU0FBUyxFQUFFLEtBQUs7aUJBQ2pCLENBQUMsQ0FBQztZQUNMLENBQUM7WUFDRCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLEdBQUcsR0FBRztnQkFDVCxJQUFJLENBQUMsSUFBSSxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSw0QkFBNEIsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxvQkFBb0I7Z0JBQ3RHLEdBQUcsSUFBSSxDQUFDLEdBQUc7YUFDWixDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDZCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRVMsY0FBYyxDQUFDLElBQW1DO1FBQzFELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVCLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUztZQUFFLE9BQU87UUFDakQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxVQUFVLEtBQUssSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNuRyxDQUFDO0lBRVMsdUJBQXVCLENBQUMsSUFBbUM7UUFDbkUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVCLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFLEVBQUUsQ0FBQztZQUM1QixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdCLENBQUM7SUFDSCxDQUFDO0lBRVMsb0JBQW9CO1FBQzVCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekIsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLENBQUM7WUFDekQsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3RCLENBQUM7SUFDSCxDQUFDO0lBRVMsWUFBWTtRQUNwQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUN6QyxJQUFJLENBQUMsUUFBUTtZQUFFLE9BQU87UUFDdEIsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxDQUFDO1lBQzdCLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDO2dCQUN2QixLQUFLLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLFVBQVU7Z0JBQ2pDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLHdCQUF3QixDQUFDO2dCQUN6QyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxXQUFXLEVBQUU7Z0JBQ2xFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLDZCQUE2QixDQUFDO2FBQzVDLENBQUMsQ0FBQztZQUNILE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDdEIsTUFBTSxJQUFJLEdBQUcsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ25DLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxLQUFLLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUN0RyxJQUFJLENBQUMsWUFBWSxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVM7Z0JBQUUsT0FBTyxJQUFJLENBQUM7WUFDMUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLFFBQVEsR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDdkYsWUFBWSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7WUFDL0IsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2hCLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLFlBQVksQ0FBQyxJQUFJLHdCQUF3QixFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDbkYsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVTLGVBQWUsQ0FBQyxNQUFxQztRQUM3RCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUN6QyxJQUFJLENBQUMsUUFBUTtZQUFFLE9BQU87UUFDdEIsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDdEIsTUFBTSxJQUFJLEdBQUcsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ25DLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxLQUFLLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUN0RyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsS0FBSyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDbEcsSUFBSSxDQUFDLFlBQVksSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTO2dCQUFFLE9BQU8sSUFBSSxDQUFDO1lBQ3pFLFVBQVUsQ0FBQyxTQUFTLElBQUksWUFBWSxDQUFDLE1BQU0sQ0FBQztZQUM1QyxZQUFZLENBQUMsU0FBUyxJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQUM7WUFDNUMsWUFBWSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7WUFDL0IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQzdDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUM3QyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsWUFBWSxDQUFDLElBQUksbUJBQW1CLFVBQVUsQ0FBQyxJQUFJLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ2hHLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFUyxPQUFPO1FBQ2YsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3RCLE1BQU0sSUFBSSxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNuQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUN2RCxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDakIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDN0MsT0FBTyxDQUFDLHNCQUFzQixHQUFHLEtBQUssQ0FBQztZQUN2QyxPQUFPLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsUUFBUSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDdEYsT0FBTyxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3BGLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNoQixJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsWUFBWSxPQUFPLENBQUMsV0FBVyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUN6RSxPQUFPLElBQUksQ0FBQztRQUNkLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVTLFNBQVM7UUFDakIsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7UUFDOUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFUyxZQUFZO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLElBQUksRUFBRTthQUNmLFdBQVcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQzthQUMzRCxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEIsQ0FBQztJQUVPLGdCQUFnQixDQUFDLE1BQStCLEVBQUUsSUFBMkI7UUFDbkYsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3hFLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTTtZQUFFLE9BQU87UUFDOUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDN0QsTUFBTSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0UsQ0FBQztJQUVTLGFBQWEsQ0FBQyxJQUFzQjtRQUM1QyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDO1lBQ3ZCLEtBQUssRUFBRSxNQUFNLENBQUMsVUFBVTtZQUN4QixPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyx3QkFBd0IsQ0FBQztZQUN6QyxJQUFJLEVBQUUsR0FBRyxNQUFNLENBQUMsUUFBUSxJQUFJLE1BQU0sQ0FBQyxXQUFXLEVBQUU7WUFDaEQsSUFBSSxFQUFFLElBQUksS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsNkJBQTZCLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyx3QkFBd0IsQ0FBQztTQUMzSCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRVMsZUFBZSxDQUFDLFFBQXNDO1FBQzlELElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDO1lBQ3ZCLEtBQUssRUFBRSxRQUFRLENBQUMsSUFBSTtZQUNwQixPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQywwQkFBMEIsQ0FBQztZQUMzQyxJQUFJLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQywyQkFBMkIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLCtCQUErQixDQUFDO1lBQ3BHLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLDBCQUEwQixDQUFDO1NBQ3pDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxlQUFlLENBQUMsTUFBYztRQUNwQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDO1lBQ3ZCLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSTtZQUNoQixPQUFPLEVBQUUsSUFBSSxDQUFDLElBQUksS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQywyQkFBMkIsQ0FBQztZQUM1RyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxNQUFNLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLElBQUksRUFBRTtZQUM3SCxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksS0FBSyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQywyQkFBMkIsQ0FBQztTQUMxRyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sZ0JBQWdCLENBQUMsSUFBbUM7UUFDMUQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUM7WUFDdkIsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ2hCLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLDJCQUEyQixDQUFDO1lBQzVDLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUN4QyxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLGdDQUFnQyxDQUFDO1NBQ3ZHLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxjQUFjLENBQUMsTUFBK0IsRUFBRSxJQUFZO1FBQ2xFLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQztRQUNyQixNQUFNLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ2pELElBQUksU0FBUyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLO2dCQUFFLE9BQU8sUUFBUSxDQUFDO1lBQ3ZELFNBQVMsSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDO1lBQzVCLE9BQU8sRUFBRSxHQUFHLFFBQVEsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUM7UUFDdkMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOytHQXpSVSx5QkFBeUI7bUdBQXpCLHlCQUF5QixpRkFqbkIxQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBdUxUOzs0RkEwYlUseUJBQXlCO2tCQXBuQnJDLFNBQVM7K0JBQ0UsdUJBQXVCLGNBQ3JCLElBQUksWUFDTjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBdUxUIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBjb21wdXRlZCwgaW5qZWN0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgSTE4blNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9pMThuJztcbmltcG9ydCB7IE1JTklfR0FNRVNfSTE4TiB9IGZyb20gJy4vbWluaS1nYW1lcy5pMThuJztcbmltcG9ydCB7XG4gIENocmlzdGlhbml0eUNhcmREZWZpbml0aW9uLFxuICBDaHJpc3RpYW5pdHlDaGFyYWN0ZXJJbnN0YW5jZSxcbiAgQ2hyaXN0aWFuaXR5R2FtZVN0YXRlLFxuICBDaHJpc3RpYW5pdHlPZmZlcmluZ0luc3RhbmNlLFxuICBDaHJpc3RpYW5pdHlQbGF5ZXJTdGF0ZSxcbiAgQ2hyaXN0aWFuaXR5U2VhdCxcbn0gZnJvbSAnLi90eXBlcyc7XG5cbmludGVyZmFjZSBDaHJpc3RpYW5pdHlDYXJkUHJldmlldyB7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIGV5ZWJyb3c6IHN0cmluZztcbiAgbWV0YTogc3RyaW5nO1xuICBib2R5OiBzdHJpbmc7XG59XG5cbmNvbnN0IFNUQVJURVJfQ0FSRFM6IFJlY29yZDxzdHJpbmcsIENocmlzdGlhbml0eUNhcmREZWZpbml0aW9uPiA9IHtcbiAgb19zaW1wbGU6IHsgaWQ6ICdvX3NpbXBsZScsIG5hbWU6ICdPZnJlbmRhIHNpbXBsZScsIHR5cGU6ICdvZmZlcmluZycsIGNvc3Q6IDAsIGF0dGFjazogMCwgbGlmZTogMSB9LFxuICBwX3Njb3V0OiB7IGlkOiAncF9zY291dCcsIG5hbWU6ICdTY291dCcsIHR5cGU6ICdjaGFyYWN0ZXInLCBjb3N0OiAxLCBhdHRhY2s6IDEsIGxpZmU6IDEgfSxcbiAgcF9ndWFyZDogeyBpZDogJ3BfZ3VhcmQnLCBuYW1lOiAnR3VhcmQnLCB0eXBlOiAnY2hhcmFjdGVyJywgY29zdDogMiwgYXR0YWNrOiAxLCBsaWZlOiAzIH0sXG4gIHBfd2FycmlvcjogeyBpZDogJ3Bfd2FycmlvcicsIG5hbWU6ICdXYXJyaW9yJywgdHlwZTogJ2NoYXJhY3RlcicsIGNvc3Q6IDIsIGF0dGFjazogMiwgbGlmZTogMiB9LFxuICBwX2VsZGVyOiB7IGlkOiAncF9lbGRlcicsIG5hbWU6ICdFbGRlcicsIHR5cGU6ICdjaGFyYWN0ZXInLCBjb3N0OiAzLCBhdHRhY2s6IDIsIGxpZmU6IDQgfSxcbiAgcF9jaGFtcGlvbjogeyBpZDogJ3BfY2hhbXBpb24nLCBuYW1lOiAnQ2hhbXBpb24nLCB0eXBlOiAnY2hhcmFjdGVyJywgY29zdDogNCwgYXR0YWNrOiA0LCBsaWZlOiA0IH0sXG59O1xuXG5jb25zdCBTVEFSVElOR19HQU1FOiBDaHJpc3RpYW5pdHlHYW1lU3RhdGUgPSB7XG4gIGdhbWVJZDogJ21vY2stY2hyaXN0aWFuaXR5JyxcbiAgc3RhdHVzOiAnaW5fcHJvZ3Jlc3MnLFxuICBtb2RlOiAnbG9jYWxfcGFzcycsXG4gIHR1cm5Pd25lcjogJ1AxJyxcbiAgcmV2aXNpb246IDAsXG4gIHR1cm5Db3VudDogMSxcbiAgc2hhcmVkRGVja0NvdW50OiAxMixcbiAgaGlzdG9yeVpvbmU6IFtdLFxuICBwbGF5ZXJzOiB7XG4gICAgUDE6IHtcbiAgICAgIHNlYXQ6ICdQMScsXG4gICAgICBkaXNwbGF5TmFtZTogJ0p1Z2Fkb3InLFxuICAgICAgbGVhZGVyTmFtZTogJ0FkYW0nLFxuICAgICAgbGVhZGVySHA6IDE1LFxuICAgICAgbGVhZGVyTWF4SHA6IDE1LFxuICAgICAgb2ZmZXJpbmdzOiBbeyBpbnN0YW5jZUlkOiAncDFfb2ZmZXJpbmdfMDAxJywgY2FyZElkOiAnb19zaW1wbGUnLCBuYW1lOiAnT2ZyZW5kYSBzaW1wbGUnLCBvd25lcjogJ1AxJywgcmVhZHk6IHRydWUsIHZhbHVlOiAxIH1dLFxuICAgICAgb2ZmZXJpbmdQbGF5ZWRUaGlzVHVybjogZmFsc2UsXG4gICAgICBoYW5kOiBbJ29fc2ltcGxlJywgJ3Bfc2NvdXQnLCAncF93YXJyaW9yJywgJ3BfZ3VhcmQnXSxcbiAgICAgIGJhdHRsZVpvbmU6IFtdLFxuICAgIH0sXG4gICAgUDI6IHtcbiAgICAgIHNlYXQ6ICdQMicsXG4gICAgICBkaXNwbGF5TmFtZTogJ1JpdmFsJyxcbiAgICAgIGxlYWRlck5hbWU6ICdOb2FoJyxcbiAgICAgIGxlYWRlckhwOiAxNSxcbiAgICAgIGxlYWRlck1heEhwOiAxNSxcbiAgICAgIG9mZmVyaW5nczogW3sgaW5zdGFuY2VJZDogJ3AyX29mZmVyaW5nXzAwMScsIGNhcmRJZDogJ29fc2ltcGxlJywgbmFtZTogJ09mcmVuZGEgc2ltcGxlJywgb3duZXI6ICdQMicsIHJlYWR5OiB0cnVlLCB2YWx1ZTogMSB9XSxcbiAgICAgIG9mZmVyaW5nUGxheWVkVGhpc1R1cm46IGZhbHNlLFxuICAgICAgaGFuZENvdW50OiA0LFxuICAgICAgYmF0dGxlWm9uZTogW1xuICAgICAgICB7XG4gICAgICAgICAgaW5zdGFuY2VJZDogJ29wcF8wMDEnLFxuICAgICAgICAgIGNhcmRJZDogJ3Bfc2NvdXQnLFxuICAgICAgICAgIG5hbWU6ICdTY291dCcsXG4gICAgICAgICAgb3duZXI6ICdQMicsXG4gICAgICAgICAgY29udHJvbGxlcjogJ1AyJyxcbiAgICAgICAgICBhdHRhY2s6IDEsXG4gICAgICAgICAgY3VycmVudEhwOiAxLFxuICAgICAgICAgIG1heEhwOiAxLFxuICAgICAgICAgIGNhbkF0dGFjazogZmFsc2UsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0sXG4gIH0sXG4gIGxvZzogWydQYXJ0aWRhIGluaWNpYWRhLiddLFxufTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsLWNocmlzdGlhbml0eS1nYW1lJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8bWFpbiBjbGFzcz1cImNocmlzdGlhbml0eS1zaGVsbFwiPlxuICAgICAgPHNlY3Rpb24gY2xhc3M9XCJjaHJpc3RpYW5pdHktaGVhZGVyXCI+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPHA+e3sgdCgnY2hyaXN0aWFuaXR5RXllYnJvdycpIH19PC9wPlxuICAgICAgICAgIDxoMT57eyB0KCdjaHJpc3RpYW5pdHlUaXRsZScpIH19PC9oMT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjaHJpc3RpYW5pdHktdHVyblwiIFtjbGFzcy5pcy1vd24tdHVybl09XCJpc093blR1cm4oKVwiPlxuICAgICAgICAgIDxzcGFuPnt7IHQoJ2NocmlzdGlhbml0eVR1cm4nKSB9fTwvc3Bhbj5cbiAgICAgICAgICA8c3Ryb25nPnt7IGN1cnJlbnRQbGF5ZXIoKS5kaXNwbGF5TmFtZSB9fTwvc3Ryb25nPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvc2VjdGlvbj5cblxuICAgICAgPHNlY3Rpb24gY2xhc3M9XCJjaHJpc3RpYW5pdHktaGFuZC1mYW4gY2hyaXN0aWFuaXR5LWhhbmQtZmFuLS1vcHBvbmVudFwiIFthdHRyLmFyaWEtbGFiZWxdPVwidCgnY2hyaXN0aWFuaXR5T3Bwb25lbnRIYW5kJylcIj5cbiAgICAgICAgQGZvciAoXyBvZiBoaWRkZW5IYW5kQ2FyZHMob3Bwb25lbnRIYW5kQ291bnQoKSk7IHRyYWNrICRpbmRleCkge1xuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgY2xhc3M9XCJjaHJpc3RpYW5pdHktY2FyZC1wcmV2aWV3LWNhcmQgY2hyaXN0aWFuaXR5LWNhcmQtcHJldmlldy1jYXJkLS1iYWNrXCJcbiAgICAgICAgICAgIFtzdHlsZS50cmFuc2Zvcm1dPVwiZmFuVHJhbnNmb3JtKCRpbmRleCwgb3Bwb25lbnRIYW5kQ291bnQoKSwgdHJ1ZSlcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJ0KCdjaHJpc3RpYW5pdHlIaWRkZW5DYXJkJylcIlxuICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgfVxuICAgICAgPC9zZWN0aW9uPlxuXG4gICAgICA8c2VjdGlvbiBjbGFzcz1cImNocmlzdGlhbml0eS10YWJsZVwiIFthdHRyLmFyaWEtbGFiZWxdPVwidCgnY2hyaXN0aWFuaXR5VGFibGUnKVwiPlxuICAgICAgICA8c2VjdGlvbiBjbGFzcz1cImNocmlzdGlhbml0eS1wbGF5ZXItcmFjayBjaHJpc3RpYW5pdHktcGxheWVyLXJhY2stLW9wcG9uZW50XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNocmlzdGlhbml0eS1vZmZlcmluZ3Mtem9uZVwiPlxuICAgICAgICAgICAgQGZvciAob2ZmZXJpbmcgb2Ygb3Bwb25lbnQoKS5vZmZlcmluZ3M7IHRyYWNrIG9mZmVyaW5nLmluc3RhbmNlSWQpIHtcbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hyaXN0aWFuaXR5LWNhcmQtbWluaSBjaHJpc3RpYW5pdHktY2FyZC1taW5pLS1vZmZlcmluZ1wiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmlzLWV4aGF1c3RlZF09XCIhb2ZmZXJpbmcucmVhZHlcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJpbnNwZWN0T2ZmZXJpbmcob2ZmZXJpbmcpXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IHQoJ2NocmlzdGlhbml0eU9mZmVyaW5nQ2FyZCcpIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzdHJvbmc+K3t7IG9mZmVyaW5nLnZhbHVlIH19PC9zdHJvbmc+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY2hyaXN0aWFuaXR5LWxlYWRlci1jYXJkXCIgW2NsYXNzLmlzLXRhcmdldF09XCJzZWxlY3RlZEF0dGFja2VyKCkgJiYgIWhhc09wcG9uZW50R3VhcmRzKClcIiAoY2xpY2spPVwiaGFuZGxlT3Bwb25lbnRMZWFkZXIoKVwiPlxuICAgICAgICAgICAgPHNwYW4+e3sgb3Bwb25lbnQoKS5sZWFkZXJOYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgPHN0cm9uZz57eyBvcHBvbmVudCgpLmxlYWRlckhwIH19L3t7IG9wcG9uZW50KCkubGVhZGVyTWF4SHAgfX08L3N0cm9uZz5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9zZWN0aW9uPlxuXG4gICAgICAgIDxzZWN0aW9uIGNsYXNzPVwiY2hyaXN0aWFuaXR5LWJhdHRsZS16b25lIGNocmlzdGlhbml0eS1iYXR0bGUtem9uZS0tb3Bwb25lbnRcIiBbYXR0ci5hcmlhLWxhYmVsXT1cInQoJ2NocmlzdGlhbml0eU9wcG9uZW50QmF0dGxlJylcIj5cbiAgICAgICAgICBAZm9yIChzbG90IG9mIGJhdHRsZVNsb3RzKCdQMicpOyB0cmFjayBzbG90LnRyYWNrSWQpIHtcbiAgICAgICAgICAgIEBpZiAoc2xvdC5jYXJkKSB7XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNocmlzdGlhbml0eS1jYXJkLXByZXZpZXctY2FyZCBjaHJpc3RpYW5pdHktY2FyZC1wcmV2aWV3LWNhcmQtLWJhdHRsZVwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmlzLXRhcmdldF09XCJzZWxlY3RlZEF0dGFja2VyKClcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVPcHBvbmVudENoYXJhY3RlcihzbG90LmNhcmQpXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IHNsb3QuY2FyZC5uYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzdHJvbmc+e3sgc2xvdC5jYXJkLmF0dGFjayB9fSAvIHt7IHNsb3QuY2FyZC5jdXJyZW50SHAgfX08L3N0cm9uZz5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaHJpc3RpYW5pdHktc2xvdFwiPjwvc3Bhbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIDwvc2VjdGlvbj5cblxuICAgICAgICA8c2VjdGlvbiBjbGFzcz1cImNocmlzdGlhbml0eS1zaGFyZWQtem9uZVwiIFthdHRyLmFyaWEtbGFiZWxdPVwidCgnY2hyaXN0aWFuaXR5U2hhcmVkWm9uZScpXCI+XG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjaHJpc3RpYW5pdHktem9uZS1jYXJkXCIgKGNsaWNrKT1cInNob3dIaXN0b3J5LnNldCghc2hvd0hpc3RvcnkoKSlcIj5cbiAgICAgICAgICAgIDxzcGFuPnt7IHQoJ2NocmlzdGlhbml0eUhpc3RvcnknKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxzdHJvbmc+e3sgZ2FtZSgpLmhpc3Rvcnlab25lLmxlbmd0aCB9fTwvc3Ryb25nPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaHJpc3RpYW5pdHktem9uZS1jYXJkXCIgYXJpYS1saXZlPVwicG9saXRlXCI+XG4gICAgICAgICAgICA8c3Bhbj57eyB0KCdjaHJpc3RpYW5pdHlEZWNrJykgfX08L3NwYW4+XG4gICAgICAgICAgICA8c3Ryb25nPnt7IGdhbWUoKS5zaGFyZWREZWNrQ291bnQgfX08L3N0cm9uZz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hyaXN0aWFuaXR5LXpvbmUtY2FyZFwiPlxuICAgICAgICAgICAgPHNwYW4+e3sgdCgnY2hyaXN0aWFuaXR5UGxhY2UnKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxzdHJvbmc+e3sgdCgnY2hyaXN0aWFuaXR5RW1wdHknKSB9fTwvc3Ryb25nPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3NlY3Rpb24+XG5cbiAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJjaHJpc3RpYW5pdHktYmF0dGxlLXpvbmVcIiBbYXR0ci5hcmlhLWxhYmVsXT1cInQoJ2NocmlzdGlhbml0eVlvdXJCYXR0bGUnKVwiPlxuICAgICAgICAgIEBmb3IgKHNsb3Qgb2YgYmF0dGxlU2xvdHMoJ1AxJyk7IHRyYWNrIHNsb3QudHJhY2tJZCkge1xuICAgICAgICAgICAgQGlmIChzbG90LmNhcmQpIHtcbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hyaXN0aWFuaXR5LWNhcmQtcHJldmlldy1jYXJkIGNocmlzdGlhbml0eS1jYXJkLXByZXZpZXctY2FyZC0tYmF0dGxlXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuaXMtc2VsZWN0ZWRdPVwic2VsZWN0ZWRBdHRhY2tlcigpPy5pbnN0YW5jZUlkID09PSBzbG90LmNhcmQuaW5zdGFuY2VJZFwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmlzLWV4aGF1c3RlZF09XCIhc2xvdC5jYXJkLmNhbkF0dGFja1wiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdEF0dGFja2VyKHNsb3QuY2FyZClcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHNwYW4+e3sgc2xvdC5jYXJkLm5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHN0cm9uZz57eyBzbG90LmNhcmQuYXR0YWNrIH19IC8ge3sgc2xvdC5jYXJkLmN1cnJlbnRIcCB9fTwvc3Ryb25nPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNocmlzdGlhbml0eS1zbG90XCI+PC9zcGFuPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgPC9zZWN0aW9uPlxuXG4gICAgICAgIDxzZWN0aW9uIGNsYXNzPVwiY2hyaXN0aWFuaXR5LXBsYXllci1yYWNrXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNocmlzdGlhbml0eS1vZmZlcmluZ3Mtem9uZVwiPlxuICAgICAgICAgICAgQGZvciAob2ZmZXJpbmcgb2YgcGxheWVyKCkub2ZmZXJpbmdzOyB0cmFjayBvZmZlcmluZy5pbnN0YW5jZUlkKSB7XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNocmlzdGlhbml0eS1jYXJkLW1pbmkgY2hyaXN0aWFuaXR5LWNhcmQtbWluaS0tb2ZmZXJpbmdcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5pcy1leGhhdXN0ZWRdPVwiIW9mZmVyaW5nLnJlYWR5XCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiaW5zcGVjdE9mZmVyaW5nKG9mZmVyaW5nKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8c3Bhbj57eyB0KCdjaHJpc3RpYW5pdHlPZmZlcmluZ0NhcmQnKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3Ryb25nPit7eyBvZmZlcmluZy52YWx1ZSB9fTwvc3Ryb25nPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImNocmlzdGlhbml0eS1sZWFkZXItY2FyZFwiIChjbGljayk9XCJpbnNwZWN0TGVhZGVyKCdQMScpXCI+XG4gICAgICAgICAgICA8c3Bhbj57eyBwbGF5ZXIoKS5sZWFkZXJOYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgPHN0cm9uZz57eyBwbGF5ZXIoKS5sZWFkZXJIcCB9fS97eyBwbGF5ZXIoKS5sZWFkZXJNYXhIcCB9fTwvc3Ryb25nPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY2hyaXN0aWFuaXR5LWVuZC10dXJuXCIgKGNsaWNrKT1cImVuZFR1cm4oKVwiPlxuICAgICAgICAgICAge3sgdCgnY2hyaXN0aWFuaXR5RW5kVHVybicpIH19XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvc2VjdGlvbj5cbiAgICAgIDwvc2VjdGlvbj5cblxuICAgICAgPHNlY3Rpb24gY2xhc3M9XCJjaHJpc3RpYW5pdHktaGFuZC1mYW5cIiBbYXR0ci5hcmlhLWxhYmVsXT1cInQoJ2NocmlzdGlhbml0eVlvdXJIYW5kJylcIj5cbiAgICAgICAgQGZvciAoY2FyZElkIG9mIHBsYXllcigpLmhhbmQgPz8gW107IHRyYWNrIGNhcmRJZCArICRpbmRleCkge1xuICAgICAgICAgIEBsZXQgY2FyZCA9IGNhcmREZWZpbml0aW9uKGNhcmRJZCk7XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBjbGFzcz1cImNocmlzdGlhbml0eS1jYXJkLXByZXZpZXctY2FyZCBjaHJpc3RpYW5pdHktY2FyZC1wcmV2aWV3LWNhcmQtLWhhbmRcIlxuICAgICAgICAgICAgW2NsYXNzLmlzLXNlbGVjdGVkXT1cInNlbGVjdGVkSGFuZENhcmQoKSA9PT0gY2FyZElkXCJcbiAgICAgICAgICAgIFtjbGFzcy5pcy1kaXNhYmxlZF09XCIhY2FuUGxheShjYXJkKVwiXG4gICAgICAgICAgICBbc3R5bGUudHJhbnNmb3JtXT1cImZhblRyYW5zZm9ybSgkaW5kZXgsIHBsYXllcigpLmhhbmQ/Lmxlbmd0aCA/PyAwLCBmYWxzZSlcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdEhhbmRDYXJkKGNhcmRJZClcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzbWFsbD5cbiAgICAgICAgICAgICAgQGlmIChjYXJkLnR5cGUgPT09ICdvZmZlcmluZycpIHtcbiAgICAgICAgICAgICAgICB7eyB0KCdjaHJpc3RpYW5pdHlPZmZlcmluZ0NhcmQnKSB9fVxuICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICB7eyB0KCdjaHJpc3RpYW5pdHlDb3N0JykgfX0ge3sgY2FyZC5jb3N0IH19XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvc21hbGw+XG4gICAgICAgICAgICA8c3Bhbj57eyBjYXJkLm5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgICA8c3Ryb25nPlxuICAgICAgICAgICAgICBAaWYgKGNhcmQudHlwZSA9PT0gJ29mZmVyaW5nJykge1xuICAgICAgICAgICAgICAgICt7eyBjYXJkLmxpZmUgfX1cbiAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAge3sgY2FyZC5hdHRhY2sgfX0gLyB7eyBjYXJkLmxpZmUgfX1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9zdHJvbmc+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIH1cbiAgICAgIDwvc2VjdGlvbj5cblxuICAgICAgQGlmIChzZWxlY3RlZFByZXZpZXcoKSkge1xuICAgICAgICA8YXNpZGUgY2xhc3M9XCJjaHJpc3RpYW5pdHktZmxvYXRpbmctY2FyZFwiIGFyaWEtbGl2ZT1cInBvbGl0ZVwiPlxuICAgICAgICAgIDxzbWFsbD57eyBzZWxlY3RlZFByZXZpZXcoKT8uZXllYnJvdyB9fTwvc21hbGw+XG4gICAgICAgICAgPHN0cm9uZz57eyBzZWxlY3RlZFByZXZpZXcoKT8udGl0bGUgfX08L3N0cm9uZz5cbiAgICAgICAgICA8c3Bhbj57eyBzZWxlY3RlZFByZXZpZXcoKT8ubWV0YSB9fTwvc3Bhbj5cbiAgICAgICAgICA8cD57eyBzZWxlY3RlZFByZXZpZXcoKT8uYm9keSB9fTwvcD5cbiAgICAgICAgPC9hc2lkZT5cbiAgICAgIH1cblxuICAgICAgPHNlY3Rpb24gY2xhc3M9XCJjaHJpc3RpYW5pdHktYWN0aW9uc1wiIGFyaWEtbGl2ZT1cInBvbGl0ZVwiPlxuICAgICAgICA8cD57eyBzdGF0dXNUZXh0KCkgfX08L3A+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgW2Rpc2FibGVkXT1cIiFzZWxlY3RlZEhhbmRDYXJkKCkgfHwgIWNhblBsYXlTZWxlY3RlZCgpXCIgKGNsaWNrKT1cInBsYXlTZWxlY3RlZENhcmQoKVwiPlxuICAgICAgICAgICAge3sgdCgnY2hyaXN0aWFuaXR5UGxheUNhcmQnKSB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJyZXNldE1vY2soKVwiPlxuICAgICAgICAgICAge3sgdCgnY2hyaXN0aWFuaXR5UmVzZXQnKSB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvc2VjdGlvbj5cblxuICAgICAgQGlmIChzaG93SGlzdG9yeSgpKSB7XG4gICAgICAgIDxzZWN0aW9uIGNsYXNzPVwiY2hyaXN0aWFuaXR5LWhpc3RvcnlcIj5cbiAgICAgICAgICA8aDI+e3sgdCgnY2hyaXN0aWFuaXR5SGlzdG9yeScpIH19PC9oMj5cbiAgICAgICAgICBAaWYgKGdhbWUoKS5oaXN0b3J5Wm9uZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIDxwPnt7IGhpc3RvcnlOYW1lcygpIH19PC9wPlxuICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgPHA+e3sgdCgnY2hyaXN0aWFuaXR5SGlzdG9yeUVtcHR5JykgfX08L3A+XG4gICAgICAgICAgfVxuICAgICAgICA8L3NlY3Rpb24+XG4gICAgICB9XG4gICAgPC9tYWluPlxuICBgLFxuICBzdHlsZXM6IFtcbiAgICBgXG4gICAgICA6aG9zdCB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBjb2xvcjogdmFyKC0tdmFsLXRleHQtY29sb3IsICMxZjI5MzMpO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXNoZWxsIHtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgZ2FwOiAwLjg3NXJlbTtcbiAgICAgICAgcGFkZGluZzogMC43NXJlbSAwLjI1cmVtO1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDM2LCA0OCwgNjgsIDAuMTIpO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAwLjc1cmVtO1xuICAgICAgICBiYWNrZ3JvdW5kOiAjZjZmOGZiO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWhlYWRlcixcbiAgICAgIC5jaHJpc3RpYW5pdHktcGxheWVyX19zdW1tYXJ5LFxuICAgICAgLmNocmlzdGlhbml0eS1zaGFyZWQtem9uZSxcbiAgICAgIC5jaHJpc3RpYW5pdHktYWN0aW9ucyB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICAgICAgZ2FwOiAwLjc1cmVtO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWhlYWRlciBoMSxcbiAgICAgIC5jaHJpc3RpYW5pdHktaGVhZGVyIHAsXG4gICAgICAuY2hyaXN0aWFuaXR5LWhpc3RvcnkgaDIsXG4gICAgICAuY2hyaXN0aWFuaXR5LWFjdGlvbnMgcCB7XG4gICAgICAgIG1hcmdpbjogMDtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1oZWFkZXIgaDEge1xuICAgICAgICBmb250LXNpemU6IDEuMzVyZW07XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktaGVhZGVyIHAsXG4gICAgICAuY2hyaXN0aWFuaXR5LXR1cm4gc3BhbixcbiAgICAgIC5jaHJpc3RpYW5pdHktb2ZmZXJpbmdzIHNwYW4sXG4gICAgICAuY2hyaXN0aWFuaXR5LWhpZGRlbi1oYW5kIHNwYW4sXG4gICAgICAuY2hyaXN0aWFuaXR5LWRlY2sgc3BhbixcbiAgICAgIC5jaHJpc3RpYW5pdHktcGxhY2Ugc3BhbixcbiAgICAgIC5jaHJpc3RpYW5pdHktcGlsZSBzcGFuLFxuICAgICAgLmNocmlzdGlhbml0eS1sZWFkZXIgc3BhbiB7XG4gICAgICAgIGNvbG9yOiByZ2JhKDMxLCA0MSwgNTEsIDAuNjQpO1xuICAgICAgICBmb250LXNpemU6IDAuNzVyZW07XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktdHVybixcbiAgICAgIC5jaHJpc3RpYW5pdHktbGVhZGVyLFxuICAgICAgLmNocmlzdGlhbml0eS1vZmZlcmluZ3MsXG4gICAgICAuY2hyaXN0aWFuaXR5LWhpZGRlbi1oYW5kLFxuICAgICAgLmNocmlzdGlhbml0eS1waWxlLFxuICAgICAgLmNocmlzdGlhbml0eS1kZWNrLFxuICAgICAgLmNocmlzdGlhbml0eS1wbGFjZSB7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIGdhcDogMC4xNXJlbTtcbiAgICAgICAgbWluLXdpZHRoOiA1LjI1cmVtO1xuICAgICAgICBwYWRkaW5nOiAwLjU1cmVtIDAuNjVyZW07XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMzYsIDQ4LCA2OCwgMC4xMik7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDAuNXJlbTtcbiAgICAgICAgYmFja2dyb3VuZDogI2ZmZmZmZjtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS10dXJuLmlzLW93bi10dXJuIHtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiByZ2JhKDE4LCAxMjgsIDEwOCwgMC4zNSk7XG4gICAgICAgIGJhY2tncm91bmQ6ICNlY2ZkZjU7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktdGFibGUge1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBnYXA6IDAuNzVyZW07XG4gICAgICAgIHBhZGRpbmc6IDAuNTVyZW0gMC4zNXJlbTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMC43NXJlbTtcbiAgICAgICAgYmFja2dyb3VuZDogI2RjZWFmYjtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1wbGF5ZXIge1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBnYXA6IDAuNjVyZW07XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktYmF0dGxlLXpvbmUge1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCg1LCBtaW5tYXgoNC4ycmVtLCAxZnIpKTtcbiAgICAgICAgZ2FwOiAwLjVyZW07XG4gICAgICAgIG1pbi1oZWlnaHQ6IDdyZW07XG4gICAgICAgIHBhZGRpbmc6IDAuNTVyZW0gMC40cmVtO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAwLjc1cmVtO1xuICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNzYpO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXNoYXJlZC16b25lIHtcbiAgICAgICAgcGFkZGluZzogMC41NXJlbSAwLjRyZW07XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDAuNzVyZW07XG4gICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45KTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkLFxuICAgICAgLmNocmlzdGlhbml0eS1lbmQtdHVybixcbiAgICAgIC5jaHJpc3RpYW5pdHktYWN0aW9ucyBidXR0b24sXG4gICAgICAuY2hyaXN0aWFuaXR5LXBpbGUsXG4gICAgICAuY2hyaXN0aWFuaXR5LWxlYWRlci0tdGFyZ2V0IHtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgzNiwgNDgsIDY4LCAwLjE2KTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMC41cmVtO1xuICAgICAgICBiYWNrZ3JvdW5kOiAjZmZmZmZmO1xuICAgICAgICBjb2xvcjogaW5oZXJpdDtcbiAgICAgICAgZm9udDogaW5oZXJpdDtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkIHtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgYWxpZ24tY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICAgICAgbWluLWhlaWdodDogNS44cmVtO1xuICAgICAgICBwYWRkaW5nOiAwLjVyZW07XG4gICAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgICAgIGJveC1zaGFkb3c6IDAgMC41cmVtIDEuMjVyZW0gcmdiYSgzNiwgNDgsIDY4LCAwLjA4KTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkIHNwYW4ge1xuICAgICAgICBmb250LXdlaWdodDogNzAwO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWNhcmQgc3Ryb25nIHtcbiAgICAgICAganVzdGlmeS1zZWxmOiBlbmQ7XG4gICAgICAgIHBhZGRpbmc6IDAuMTVyZW0gMC4zNXJlbTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogOTk5cHg7XG4gICAgICAgIGJhY2tncm91bmQ6ICNlZGYyZjc7XG4gICAgICAgIGZvbnQtc2l6ZTogMC44cmVtO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWNhcmQuaXMtc2VsZWN0ZWQge1xuICAgICAgICBib3JkZXItY29sb3I6ICMyNTYzZWI7XG4gICAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDAuMnJlbSByZ2JhKDM3LCA5OSwgMjM1LCAwLjE2KTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkLmlzLWRpc2FibGVkLFxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkLmlzLWV4aGF1c3RlZCB7XG4gICAgICAgIG9wYWNpdHk6IDAuNTU7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZC5pcy10YXJnZXQge1xuICAgICAgICBib3JkZXItY29sb3I6ICNkYzI2MjY7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktb2ZmZXJpbmctY2FyZHMge1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBncmlkLWF1dG8tZmxvdzogY29sdW1uO1xuICAgICAgICBncmlkLWF1dG8tY29sdW1uczogMC43cmVtO1xuICAgICAgICBnYXA6IDAuMTZyZW07XG4gICAgICAgIGFsaWduLWl0ZW1zOiBlbmQ7XG4gICAgICAgIG1pbi1oZWlnaHQ6IDEuMDVyZW07XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktb2ZmZXJpbmctY2FyZHMgaSB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICB3aWR0aDogMC42NXJlbTtcbiAgICAgICAgaGVpZ2h0OiAwLjk1cmVtO1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDE2LCA0MiwgNjcsIDAuMjIpO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAwLjE4cmVtO1xuICAgICAgICBiYWNrZ3JvdW5kOiAjZjhmYWZjO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LW9mZmVyaW5nLWNhcmRzIGkuaXMtdXNlZCB7XG4gICAgICAgIGJhY2tncm91bmQ6ICNjYmQ1ZTE7XG4gICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTtcbiAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogY2VudGVyO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXNsb3Qge1xuICAgICAgICBtaW4taGVpZ2h0OiA1LjhyZW07XG4gICAgICAgIGJvcmRlcjogMXB4IGRhc2hlZCByZ2JhKDM2LCA0OCwgNjgsIDAuMjIpO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAwLjVyZW07XG4gICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC40NSk7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktaGFuZCB7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIGdyaWQtYXV0by1jb2x1bW5zOiBtaW5tYXgoNnJlbSwgOHJlbSk7XG4gICAgICAgIGdyaWQtYXV0by1mbG93OiBjb2x1bW47XG4gICAgICAgIGdhcDogMC41NXJlbTtcbiAgICAgICAgb3ZlcmZsb3cteDogYXV0bztcbiAgICAgICAgcGFkZGluZy1ib3R0b206IDAuMjVyZW07XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktYWN0aW9ucyB7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICAgICAgICBwYWRkaW5nOiAwLjc1cmVtO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAwLjc1cmVtO1xuICAgICAgICBiYWNrZ3JvdW5kOiAjZmZmZmZmO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWFjdGlvbnMgZGl2IHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgICAgICBnYXA6IDAuNXJlbTtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1hY3Rpb25zIGJ1dHRvbixcbiAgICAgIC5jaHJpc3RpYW5pdHktZW5kLXR1cm4ge1xuICAgICAgICBtaW4taGVpZ2h0OiAyLjRyZW07XG4gICAgICAgIHBhZGRpbmc6IDAgMC43NXJlbTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1hY3Rpb25zIGJ1dHRvbjpub3QoOmRpc2FibGVkKSxcbiAgICAgIC5jaHJpc3RpYW5pdHktZW5kLXR1cm4ge1xuICAgICAgICBiYWNrZ3JvdW5kOiAjMTAyYTQzO1xuICAgICAgICBjb2xvcjogI2ZmZmZmZjtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1oaXN0b3J5IHtcbiAgICAgICAgcGFkZGluZzogMC43NXJlbTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMC43NXJlbTtcbiAgICAgICAgYmFja2dyb3VuZDogI2ZmZmZmZjtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1oYW5kLWZhbiB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgIG1pbi1oZWlnaHQ6IDcuNHJlbTtcbiAgICAgICAgcGFkZGluZzogMCAwLjI1cmVtO1xuICAgICAgICBpc29sYXRpb246IGlzb2xhdGU7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktaGFuZC1mYW4tLW9wcG9uZW50IHtcbiAgICAgICAgbWluLWhlaWdodDogNC43cmVtO1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAtMS4xcmVtO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWNhcmQtcHJldmlldy1jYXJkLFxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkLW1pbmksXG4gICAgICAuY2hyaXN0aWFuaXR5LWxlYWRlci1jYXJkLFxuICAgICAgLmNocmlzdGlhbml0eS16b25lLWNhcmQsXG4gICAgICAuY2hyaXN0aWFuaXR5LWVuZC10dXJuIHtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgzNiwgNDgsIDY4LCAwLjE2KTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMC41cmVtO1xuICAgICAgICBiYWNrZ3JvdW5kOiAjZmZmZmZmO1xuICAgICAgICBjb2xvcjogaW5oZXJpdDtcbiAgICAgICAgZm9udDogaW5oZXJpdDtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkLXByZXZpZXctY2FyZCB7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIGFsaWduLWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgICAgIHdpZHRoOiBjbGFtcCg0LjlyZW0sIDE3dncsIDcuMXJlbSk7XG4gICAgICAgIG1pbi1oZWlnaHQ6IGNsYW1wKDYuNnJlbSwgMjJ2dywgOC44cmVtKTtcbiAgICAgICAgbWFyZ2luLWlubGluZTogLTAuNDJyZW07XG4gICAgICAgIHBhZGRpbmc6IDAuNDhyZW07XG4gICAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IDUwJSAxMTUlO1xuICAgICAgICB0cmFuc2l0aW9uOlxuICAgICAgICAgIHRyYW5zZm9ybSAxNjBtcyBlYXNlLFxuICAgICAgICAgIGJveC1zaGFkb3cgMTYwbXMgZWFzZSxcbiAgICAgICAgICBib3JkZXItY29sb3IgMTYwbXMgZWFzZTtcbiAgICAgICAgYm94LXNoYWRvdzogMCAwLjVyZW0gMS4yNXJlbSByZ2JhKDM2LCA0OCwgNjgsIDAuMSk7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZC1wcmV2aWV3LWNhcmQtLWhhbmQ6aG92ZXIsXG4gICAgICAuY2hyaXN0aWFuaXR5LWNhcmQtcHJldmlldy1jYXJkLS1oYW5kLmlzLXNlbGVjdGVkIHtcbiAgICAgICAgei1pbmRleDogMztcbiAgICAgICAgYm9yZGVyLWNvbG9yOiAjMjU2M2ViO1xuICAgICAgICBib3gtc2hhZG93OiAwIDFyZW0gMnJlbSByZ2JhKDM3LCA5OSwgMjM1LCAwLjE4KTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkLXByZXZpZXctY2FyZC0tYmFjayB7XG4gICAgICAgIG1pbi1oZWlnaHQ6IDQuOHJlbTtcbiAgICAgICAgYmFja2dyb3VuZDpcbiAgICAgICAgICBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCByZ2JhKDE2LCA0MiwgNjcsIDAuMTIpLCByZ2JhKDE2LCA0MiwgNjcsIDAuMDIpKSxcbiAgICAgICAgICByZXBlYXRpbmctbGluZWFyLWdyYWRpZW50KDQ1ZGVnLCAjZTJlOGYwIDAgMC4zNXJlbSwgI2Y4ZmFmYyAwLjM1cmVtIDAuN3JlbSk7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZC1wcmV2aWV3LWNhcmQtLWJhdHRsZSB7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBtaW4taGVpZ2h0OiA1LjdyZW07XG4gICAgICAgIG1hcmdpbi1pbmxpbmU6IDA7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZC1wcmV2aWV3LWNhcmQgc3BhbixcbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZC1taW5pIHNwYW4sXG4gICAgICAuY2hyaXN0aWFuaXR5LWxlYWRlci1jYXJkIHNwYW4sXG4gICAgICAuY2hyaXN0aWFuaXR5LXpvbmUtY2FyZCBzcGFuIHtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkLXByZXZpZXctY2FyZCBzdHJvbmcsXG4gICAgICAuY2hyaXN0aWFuaXR5LWNhcmQtbWluaSBzdHJvbmcsXG4gICAgICAuY2hyaXN0aWFuaXR5LWxlYWRlci1jYXJkIHN0cm9uZyxcbiAgICAgIC5jaHJpc3RpYW5pdHktem9uZS1jYXJkIHN0cm9uZyB7XG4gICAgICAgIGp1c3RpZnktc2VsZjogZW5kO1xuICAgICAgICBwYWRkaW5nOiAwLjE1cmVtIDAuMzVyZW07XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4O1xuICAgICAgICBiYWNrZ3JvdW5kOiAjZWRmMmY3O1xuICAgICAgICBmb250LXNpemU6IDAuOHJlbTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1wbGF5ZXItcmFjayB7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogbWlubWF4KDQuMnJlbSwgMWZyKSBtaW5tYXgoNXJlbSwgNi41cmVtKSBtaW5tYXgoNC4ycmVtLCAxZnIpO1xuICAgICAgICBnYXA6IDAuNTVyZW07XG4gICAgICAgIGFsaWduLWl0ZW1zOiBlbmQ7XG4gICAgICAgIGp1c3RpZnktaXRlbXM6IGNlbnRlcjtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1wbGF5ZXItcmFjay0tb3Bwb25lbnQge1xuICAgICAgICBhbGlnbi1pdGVtczogc3RhcnQ7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktb2ZmZXJpbmdzLXpvbmUge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgICAgIGdhcDogMC4yNXJlbTtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZC1taW5pLFxuICAgICAgLmNocmlzdGlhbml0eS1sZWFkZXItY2FyZCxcbiAgICAgIC5jaHJpc3RpYW5pdHktem9uZS1jYXJkIHtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgYWxpZ24tY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICAgICAgbWluLWhlaWdodDogNC45cmVtO1xuICAgICAgICBwYWRkaW5nOiAwLjQ4cmVtO1xuICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWNhcmQtbWluaSB7XG4gICAgICAgIHdpZHRoOiAzLjVyZW07XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktbGVhZGVyLWNhcmQge1xuICAgICAgICB3aWR0aDogbWluKDEwMCUsIDYuNXJlbSk7XG4gICAgICAgIG1pbi1oZWlnaHQ6IDUuOHJlbTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1iYXR0bGUtem9uZSB7XG4gICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDQsIG1pbm1heCg0cmVtLCAxZnIpKTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1zaGFyZWQtem9uZSB7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDMsIG1pbm1heCg0LjNyZW0sIDFmcikpO1xuICAgICAgICBhbGlnbi1pdGVtczogc3RyZXRjaDtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1mbG9hdGluZy1jYXJkIHtcbiAgICAgICAgcG9zaXRpb246IGZpeGVkO1xuICAgICAgICByaWdodDogbWF4KDAuNzVyZW0sIGVudihzYWZlLWFyZWEtaW5zZXQtcmlnaHQpKTtcbiAgICAgICAgYm90dG9tOiBtYXgoNS44cmVtLCBlbnYoc2FmZS1hcmVhLWluc2V0LWJvdHRvbSkpO1xuICAgICAgICB6LWluZGV4OiAxMDtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgZ2FwOiAwLjI4cmVtO1xuICAgICAgICB3aWR0aDogbWluKDE0cmVtLCBjYWxjKDEwMHZ3IC0gMS41cmVtKSk7XG4gICAgICAgIG1pbi1oZWlnaHQ6IDEwcmVtO1xuICAgICAgICBwYWRkaW5nOiAwLjhyZW07XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMzYsIDQ4LCA2OCwgMC4xOCk7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDAuNnJlbTtcbiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjk2KTtcbiAgICAgICAgYm94LXNoYWRvdzogMCAxLjI1cmVtIDIuNXJlbSByZ2JhKDE2LCA0MiwgNjcsIDAuMTgpO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWZsb2F0aW5nLWNhcmQgc21hbGwsXG4gICAgICAuY2hyaXN0aWFuaXR5LWZsb2F0aW5nLWNhcmQgc3BhbiB7XG4gICAgICAgIGNvbG9yOiByZ2JhKDMxLCA0MSwgNTEsIDAuNjQpO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWZsb2F0aW5nLWNhcmQgc3Ryb25nIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjA1cmVtO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWZsb2F0aW5nLWNhcmQgcCB7XG4gICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgZm9udC1zaXplOiAwLjg2cmVtO1xuICAgICAgICBsaW5lLWhlaWdodDogMS4zNTtcbiAgICAgIH1cblxuICAgICAgYnV0dG9uIHtcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgfVxuXG4gICAgICBidXR0b246ZGlzYWJsZWQge1xuICAgICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xuICAgICAgICBvcGFjaXR5OiAwLjU1O1xuICAgICAgfVxuXG4gICAgICBidXR0b246Zm9jdXMtdmlzaWJsZSB7XG4gICAgICAgIG91dGxpbmU6IDAuMTg3NXJlbSBzb2xpZCByZ2JhKDM3LCA5OSwgMjM1LCAwLjI0KTtcbiAgICAgICAgb3V0bGluZS1vZmZzZXQ6IDAuMTI1cmVtO1xuICAgICAgfVxuXG4gICAgICBAbWVkaWEgKG1heC13aWR0aDogNzIwcHgpIHtcbiAgICAgICAgLmNocmlzdGlhbml0eS1zaGVsbCB7XG4gICAgICAgICAgcGFkZGluZzogMC41NXJlbSAwO1xuICAgICAgICAgIGJvcmRlci1yaWdodDogMDtcbiAgICAgICAgICBib3JkZXItbGVmdDogMDtcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgLmNocmlzdGlhbml0eS1oZWFkZXIsXG4gICAgICAgIC5jaHJpc3RpYW5pdHktcGxheWVyX19zdW1tYXJ5LFxuICAgICAgICAuY2hyaXN0aWFuaXR5LXNoYXJlZC16b25lLFxuICAgICAgICAuY2hyaXN0aWFuaXR5LWFjdGlvbnMge1xuICAgICAgICAgIGFsaWduLWl0ZW1zOiBzdHJldGNoO1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIH1cblxuICAgICAgICAuY2hyaXN0aWFuaXR5LWJhdHRsZS16b25lIHtcbiAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCg0LCBtaW5tYXgoMy4zNXJlbSwgMWZyKSk7XG4gICAgICAgICAgb3ZlcmZsb3cteDogYXV0bztcbiAgICAgICAgfVxuXG4gICAgICAgIC5jaHJpc3RpYW5pdHktaGFuZC1mYW4ge1xuICAgICAgICAgIG1pbi1oZWlnaHQ6IDYuOHJlbTtcbiAgICAgICAgICBvdmVyZmxvdy14OiBjbGlwO1xuICAgICAgICB9XG5cbiAgICAgICAgLmNocmlzdGlhbml0eS1wbGF5ZXItcmFjayB7XG4gICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBtaW5tYXgoMy42cmVtLCAxZnIpIG1pbm1heCg0LjhyZW0sIDUuNnJlbSkgbWlubWF4KDMuNnJlbSwgMWZyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5jaHJpc3RpYW5pdHktc2hhcmVkLXpvbmUge1xuICAgICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDMsIG1pbm1heCgzLjdyZW0sIDFmcikpO1xuICAgICAgICB9XG5cbiAgICAgICAgLmNocmlzdGlhbml0eS1jYXJkLXByZXZpZXctY2FyZCB7XG4gICAgICAgICAgd2lkdGg6IGNsYW1wKDQuMnJlbSwgMjB2dywgNS43cmVtKTtcbiAgICAgICAgICBtaW4taGVpZ2h0OiBjbGFtcCg1LjhyZW0sIDI2dncsIDcuNHJlbSk7XG4gICAgICAgIH1cblxuICAgICAgICAuY2hyaXN0aWFuaXR5LWZsb2F0aW5nLWNhcmQge1xuICAgICAgICAgIHJpZ2h0OiAwLjVyZW07XG4gICAgICAgICAgYm90dG9tOiA0LjhyZW07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICBgLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBDaHJpc3RpYW5pdHlHYW1lQ29tcG9uZW50IHtcbiAgcHJpdmF0ZSBpMThuID0gaW5qZWN0KEkxOG5TZXJ2aWNlKTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZ2FtZSA9IHNpZ25hbDxDaHJpc3RpYW5pdHlHYW1lU3RhdGU+KHN0cnVjdHVyZWRDbG9uZShTVEFSVElOR19HQU1FKSk7XG4gIHByb3RlY3RlZCByZWFkb25seSBzZWxlY3RlZEhhbmRDYXJkID0gc2lnbmFsPHN0cmluZyB8IG51bGw+KG51bGwpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2VsZWN0ZWRBdHRhY2tlciA9IHNpZ25hbDxDaHJpc3RpYW5pdHlDaGFyYWN0ZXJJbnN0YW5jZSB8IG51bGw+KG51bGwpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2VsZWN0ZWRQcmV2aWV3ID0gc2lnbmFsPENocmlzdGlhbml0eUNhcmRQcmV2aWV3IHwgbnVsbD4obnVsbCk7XG4gIHByb3RlY3RlZCByZWFkb25seSBzaG93SGlzdG9yeSA9IHNpZ25hbChmYWxzZSk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHBsYXllciA9IGNvbXB1dGVkKCgpID0+IHRoaXMuZ2FtZSgpLnBsYXllcnMuUDEpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgb3Bwb25lbnQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmdhbWUoKS5wbGF5ZXJzLlAyKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGN1cnJlbnRQbGF5ZXIgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmdhbWUoKS5wbGF5ZXJzW3RoaXMuZ2FtZSgpLnR1cm5Pd25lcl0pO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgaXNPd25UdXJuID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5nYW1lKCkudHVybk93bmVyID09PSAnUDEnKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGhhc09wcG9uZW50R3VhcmRzID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5vcHBvbmVudCgpLmJhdHRsZVpvbmUubGVuZ3RoID4gMCk7XG4gIHByb3RlY3RlZCByZWFkb25seSBvcHBvbmVudEhhbmRDb3VudCA9IGNvbXB1dGVkKCgpID0+IHRoaXMub3Bwb25lbnQoKS5oYW5kQ291bnQgPz8gdGhpcy5vcHBvbmVudCgpLmhhbmQ/Lmxlbmd0aCA/PyAwKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHN0YXR1c1RleHQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgYXR0YWNrZXIgPSB0aGlzLnNlbGVjdGVkQXR0YWNrZXIoKTtcbiAgICBjb25zdCBoYW5kQ2FyZCA9IHRoaXMuc2VsZWN0ZWRIYW5kQ2FyZCgpO1xuICAgIGlmICghdGhpcy5pc093blR1cm4oKSkge1xuICAgICAgcmV0dXJuIHRoaXMudCgnY2hyaXN0aWFuaXR5V2FpdFR1cm4nKTtcbiAgICB9XG4gICAgaWYgKGF0dGFja2VyKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYXNPcHBvbmVudEd1YXJkcygpID8gdGhpcy50KCdjaHJpc3RpYW5pdHlDaG9vc2VDaGFyYWN0ZXJUYXJnZXQnKSA6IHRoaXMudCgnY2hyaXN0aWFuaXR5Q2hvb3NlVGFyZ2V0Jyk7XG4gICAgfVxuICAgIGlmIChoYW5kQ2FyZCkge1xuICAgICAgY29uc3QgY2FyZCA9IHRoaXMuY2FyZERlZmluaXRpb24oaGFuZENhcmQpO1xuICAgICAgcmV0dXJuIHRoaXMuY2FuUGxheShjYXJkKSA/IHRoaXMudCgnY2hyaXN0aWFuaXR5UmVhZHlUb1BsYXknKSA6IHRoaXMudCgnY2hyaXN0aWFuaXR5TmVlZE9mZmVyaW5ncycpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy50KCdjaHJpc3RpYW5pdHlDaG9vc2VDYXJkJyk7XG4gIH0pO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuaTE4bi5yZWdpc3RlckRlZmF1bHRzKCdNaW5pR2FtZXMnLCBNSU5JX0dBTUVTX0kxOE4pO1xuICB9XG5cbiAgcHJvdGVjdGVkIHQoa2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHRoaXMuaTE4bi5sYW5nKCk7XG4gICAgcmV0dXJuIHRoaXMuaTE4bi50KGtleSwgJ01pbmlHYW1lcycpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNhcmREZWZpbml0aW9uKGNhcmRJZDogc3RyaW5nKTogQ2hyaXN0aWFuaXR5Q2FyZERlZmluaXRpb24ge1xuICAgIHJldHVybiBTVEFSVEVSX0NBUkRTW2NhcmRJZF0gPz8gU1RBUlRFUl9DQVJEU1sncF9zY291dCddO1xuICB9XG5cbiAgcHJvdGVjdGVkIGJhdHRsZVNsb3RzKHNlYXQ6IENocmlzdGlhbml0eVNlYXQpOiBBcnJheTx7IHRyYWNrSWQ6IHN0cmluZzsgY2FyZD86IENocmlzdGlhbml0eUNoYXJhY3Rlckluc3RhbmNlIH0+IHtcbiAgICBjb25zdCBjYXJkcyA9IHRoaXMuZ2FtZSgpLnBsYXllcnNbc2VhdF0uYmF0dGxlWm9uZTtcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aDogNCB9LCAoXywgaW5kZXgpID0+ICh7XG4gICAgICB0cmFja0lkOiBjYXJkc1tpbmRleF0/Lmluc3RhbmNlSWQgPz8gYCR7c2VhdH0tZW1wdHktJHtpbmRleH1gLFxuICAgICAgY2FyZDogY2FyZHNbaW5kZXhdLFxuICAgIH0pKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoaWRkZW5IYW5kQ2FyZHMoY291bnQ6IG51bWJlcik6IHVua25vd25bXSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20oeyBsZW5ndGg6IGNvdW50IH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGZhblRyYW5zZm9ybShpbmRleDogbnVtYmVyLCB0b3RhbDogbnVtYmVyLCBvcHBvbmVudDogYm9vbGVhbik6IHN0cmluZyB7XG4gICAgaWYgKHRvdGFsIDw9IDEpIHJldHVybiBvcHBvbmVudCA/ICdyb3RhdGUoMTgwZGVnKScgOiAnbm9uZSc7XG4gICAgY29uc3QgY2VudGVyID0gKHRvdGFsIC0gMSkgLyAyO1xuICAgIGNvbnN0IG9mZnNldCA9IGluZGV4IC0gY2VudGVyO1xuICAgIGNvbnN0IHJvdGF0ZSA9IG9mZnNldCAqIDU7XG4gICAgY29uc3QgbGlmdCA9IE1hdGguYWJzKG9mZnNldCkgKiAwLjI1O1xuICAgIGNvbnN0IGJhc2UgPSBvcHBvbmVudCA/ICdyb3RhdGUoMTgwZGVnKScgOiAnJztcbiAgICByZXR1cm4gYCR7YmFzZX0gdHJhbnNsYXRlWSgke2xpZnR9cmVtKSByb3RhdGUoJHtyb3RhdGV9ZGVnKWA7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVhZHlPZmZlcmluZ3MocGxheWVyOiBDaHJpc3RpYW5pdHlQbGF5ZXJTdGF0ZSk6IG51bWJlciB7XG4gICAgcmV0dXJuIHBsYXllci5vZmZlcmluZ3MucmVkdWNlKCh0b3RhbCwgb2ZmZXJpbmcpID0+IHRvdGFsICsgKG9mZmVyaW5nLnJlYWR5ID8gb2ZmZXJpbmcudmFsdWUgOiAwKSwgMCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY2FuUGxheShjYXJkOiBDaHJpc3RpYW5pdHlDYXJkRGVmaW5pdGlvbik6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5pc093blR1cm4oKSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChjYXJkLnR5cGUgPT09ICdvZmZlcmluZycpIHJldHVybiAhdGhpcy5wbGF5ZXIoKS5vZmZlcmluZ1BsYXllZFRoaXNUdXJuO1xuICAgIHJldHVybiB0aGlzLnJlYWR5T2ZmZXJpbmdzKHRoaXMucGxheWVyKCkpID49IGNhcmQuY29zdCAmJiB0aGlzLnBsYXllcigpLmJhdHRsZVpvbmUubGVuZ3RoIDwgNDtcbiAgfVxuXG4gIHByb3RlY3RlZCBjYW5QbGF5U2VsZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGVkSGFuZENhcmQoKTtcbiAgICByZXR1cm4gISFzZWxlY3RlZCAmJiB0aGlzLmNhblBsYXkodGhpcy5jYXJkRGVmaW5pdGlvbihzZWxlY3RlZCkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNlbGVjdEhhbmRDYXJkKGNhcmRJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZEF0dGFja2VyLnNldChudWxsKTtcbiAgICB0aGlzLnNlbGVjdGVkSGFuZENhcmQuc2V0KHRoaXMuc2VsZWN0ZWRIYW5kQ2FyZCgpID09PSBjYXJkSWQgPyBudWxsIDogY2FyZElkKTtcbiAgICB0aGlzLmluc3BlY3RIYW5kQ2FyZChjYXJkSWQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHBsYXlTZWxlY3RlZENhcmQoKTogdm9pZCB7XG4gICAgY29uc3QgY2FyZElkID0gdGhpcy5zZWxlY3RlZEhhbmRDYXJkKCk7XG4gICAgaWYgKCFjYXJkSWQpIHJldHVybjtcbiAgICBjb25zdCBjYXJkID0gdGhpcy5jYXJkRGVmaW5pdGlvbihjYXJkSWQpO1xuICAgIGlmICghdGhpcy5jYW5QbGF5KGNhcmQpKSByZXR1cm47XG5cbiAgICB0aGlzLmdhbWUudXBkYXRlKGdhbWUgPT4ge1xuICAgICAgY29uc3QgbmV4dCA9IHN0cnVjdHVyZWRDbG9uZShnYW1lKTtcbiAgICAgIGNvbnN0IHBsYXllciA9IG5leHQucGxheWVycy5QMTtcbiAgICAgIGNvbnN0IGhhbmRJbmRleCA9IHBsYXllci5oYW5kPy5pbmRleE9mKGNhcmRJZCkgPz8gLTE7XG4gICAgICBpZiAoaGFuZEluZGV4IDwgMCB8fCAhcGxheWVyLmhhbmQpIHJldHVybiBnYW1lO1xuICAgICAgcGxheWVyLmhhbmQuc3BsaWNlKGhhbmRJbmRleCwgMSk7XG4gICAgICBpZiAoY2FyZC50eXBlID09PSAnb2ZmZXJpbmcnKSB7XG4gICAgICAgIHBsYXllci5vZmZlcmluZ3MucHVzaCh7XG4gICAgICAgICAgaW5zdGFuY2VJZDogYHAxX29mZmVyaW5nXyR7bmV4dC5yZXZpc2lvbiArIDF9YCxcbiAgICAgICAgICBjYXJkSWQ6IGNhcmQuaWQsXG4gICAgICAgICAgbmFtZTogY2FyZC5uYW1lLFxuICAgICAgICAgIG93bmVyOiAnUDEnLFxuICAgICAgICAgIHJlYWR5OiB0cnVlLFxuICAgICAgICAgIHZhbHVlOiBjYXJkLmxpZmUsXG4gICAgICAgIH0pO1xuICAgICAgICBwbGF5ZXIub2ZmZXJpbmdQbGF5ZWRUaGlzVHVybiA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNwZW5kT2ZmZXJpbmdzKHBsYXllciwgY2FyZC5jb3N0KTtcbiAgICAgICAgcGxheWVyLmJhdHRsZVpvbmUucHVzaCh7XG4gICAgICAgICAgaW5zdGFuY2VJZDogYHAxXyR7bmV4dC5yZXZpc2lvbiArIDF9XyR7cGxheWVyLmJhdHRsZVpvbmUubGVuZ3RofWAsXG4gICAgICAgICAgY2FyZElkOiBjYXJkLmlkLFxuICAgICAgICAgIG5hbWU6IGNhcmQubmFtZSxcbiAgICAgICAgICBvd25lcjogJ1AxJyxcbiAgICAgICAgICBjb250cm9sbGVyOiAnUDEnLFxuICAgICAgICAgIGF0dGFjazogY2FyZC5hdHRhY2ssXG4gICAgICAgICAgY3VycmVudEhwOiBjYXJkLmxpZmUsXG4gICAgICAgICAgbWF4SHA6IGNhcmQubGlmZSxcbiAgICAgICAgICBjYW5BdHRhY2s6IGZhbHNlLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIG5leHQucmV2aXNpb24rKztcbiAgICAgIG5leHQubG9nID0gW1xuICAgICAgICBjYXJkLnR5cGUgPT09ICdvZmZlcmluZycgPyBgJHtjYXJkLm5hbWV9IHF1ZWRhIGxpc3RhIGNvbW8gb2ZyZW5kYS5gIDogYCR7Y2FyZC5uYW1lfSBlbnRyYSBlbiBiYXRhbGxhLmAsXG4gICAgICAgIC4uLm5leHQubG9nLFxuICAgICAgXS5zbGljZSgwLCA0KTtcbiAgICAgIHJldHVybiBuZXh0O1xuICAgIH0pO1xuICAgIHRoaXMuc2VsZWN0ZWRIYW5kQ2FyZC5zZXQobnVsbCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2VsZWN0QXR0YWNrZXIoY2FyZDogQ2hyaXN0aWFuaXR5Q2hhcmFjdGVySW5zdGFuY2UpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkSGFuZENhcmQuc2V0KG51bGwpO1xuICAgIHRoaXMuaW5zcGVjdENoYXJhY3RlcihjYXJkKTtcbiAgICBpZiAoIXRoaXMuaXNPd25UdXJuKCkgfHwgIWNhcmQuY2FuQXR0YWNrKSByZXR1cm47XG4gICAgdGhpcy5zZWxlY3RlZEF0dGFja2VyLnNldCh0aGlzLnNlbGVjdGVkQXR0YWNrZXIoKT8uaW5zdGFuY2VJZCA9PT0gY2FyZC5pbnN0YW5jZUlkID8gbnVsbCA6IGNhcmQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZU9wcG9uZW50Q2hhcmFjdGVyKGNhcmQ6IENocmlzdGlhbml0eUNoYXJhY3Rlckluc3RhbmNlKTogdm9pZCB7XG4gICAgdGhpcy5pbnNwZWN0Q2hhcmFjdGVyKGNhcmQpO1xuICAgIGlmICh0aGlzLnNlbGVjdGVkQXR0YWNrZXIoKSkge1xuICAgICAgdGhpcy5hdHRhY2tDaGFyYWN0ZXIoY2FyZCk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZU9wcG9uZW50TGVhZGVyKCk6IHZvaWQge1xuICAgIHRoaXMuaW5zcGVjdExlYWRlcignUDInKTtcbiAgICBpZiAodGhpcy5zZWxlY3RlZEF0dGFja2VyKCkgJiYgIXRoaXMuaGFzT3Bwb25lbnRHdWFyZHMoKSkge1xuICAgICAgdGhpcy5hdHRhY2tMZWFkZXIoKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgYXR0YWNrTGVhZGVyKCk6IHZvaWQge1xuICAgIGNvbnN0IGF0dGFja2VyID0gdGhpcy5zZWxlY3RlZEF0dGFja2VyKCk7XG4gICAgaWYgKCFhdHRhY2tlcikgcmV0dXJuO1xuICAgIGlmICh0aGlzLmhhc09wcG9uZW50R3VhcmRzKCkpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRQcmV2aWV3LnNldCh7XG4gICAgICAgIHRpdGxlOiB0aGlzLm9wcG9uZW50KCkubGVhZGVyTmFtZSxcbiAgICAgICAgZXllYnJvdzogdGhpcy50KCdjaHJpc3RpYW5pdHlMZWFkZXJDYXJkJyksXG4gICAgICAgIG1ldGE6IGAke3RoaXMub3Bwb25lbnQoKS5sZWFkZXJIcH0vJHt0aGlzLm9wcG9uZW50KCkubGVhZGVyTWF4SHB9YCxcbiAgICAgICAgYm9keTogdGhpcy50KCdjaHJpc3RpYW5pdHlMZWFkZXJQcm90ZWN0ZWQnKSxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmdhbWUudXBkYXRlKGdhbWUgPT4ge1xuICAgICAgY29uc3QgbmV4dCA9IHN0cnVjdHVyZWRDbG9uZShnYW1lKTtcbiAgICAgIGNvbnN0IGxpdmVBdHRhY2tlciA9IG5leHQucGxheWVycy5QMS5iYXR0bGVab25lLmZpbmQoY2FyZCA9PiBjYXJkLmluc3RhbmNlSWQgPT09IGF0dGFja2VyLmluc3RhbmNlSWQpO1xuICAgICAgaWYgKCFsaXZlQXR0YWNrZXIgfHwgIWxpdmVBdHRhY2tlci5jYW5BdHRhY2spIHJldHVybiBnYW1lO1xuICAgICAgbmV4dC5wbGF5ZXJzLlAyLmxlYWRlckhwID0gTWF0aC5tYXgoMCwgbmV4dC5wbGF5ZXJzLlAyLmxlYWRlckhwIC0gbGl2ZUF0dGFja2VyLmF0dGFjayk7XG4gICAgICBsaXZlQXR0YWNrZXIuY2FuQXR0YWNrID0gZmFsc2U7XG4gICAgICBuZXh0LnJldmlzaW9uKys7XG4gICAgICBuZXh0LmxvZyA9IFtgJHtsaXZlQXR0YWNrZXIubmFtZX0gYXRhY2EgYWwgbGlkZXIgcml2YWwuYCwgLi4ubmV4dC5sb2ddLnNsaWNlKDAsIDQpO1xuICAgICAgcmV0dXJuIG5leHQ7XG4gICAgfSk7XG4gICAgdGhpcy5zZWxlY3RlZEF0dGFja2VyLnNldChudWxsKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhdHRhY2tDaGFyYWN0ZXIodGFyZ2V0OiBDaHJpc3RpYW5pdHlDaGFyYWN0ZXJJbnN0YW5jZSk6IHZvaWQge1xuICAgIGNvbnN0IGF0dGFja2VyID0gdGhpcy5zZWxlY3RlZEF0dGFja2VyKCk7XG4gICAgaWYgKCFhdHRhY2tlcikgcmV0dXJuO1xuICAgIHRoaXMuZ2FtZS51cGRhdGUoZ2FtZSA9PiB7XG4gICAgICBjb25zdCBuZXh0ID0gc3RydWN0dXJlZENsb25lKGdhbWUpO1xuICAgICAgY29uc3QgbGl2ZUF0dGFja2VyID0gbmV4dC5wbGF5ZXJzLlAxLmJhdHRsZVpvbmUuZmluZChjYXJkID0+IGNhcmQuaW5zdGFuY2VJZCA9PT0gYXR0YWNrZXIuaW5zdGFuY2VJZCk7XG4gICAgICBjb25zdCBsaXZlVGFyZ2V0ID0gbmV4dC5wbGF5ZXJzLlAyLmJhdHRsZVpvbmUuZmluZChjYXJkID0+IGNhcmQuaW5zdGFuY2VJZCA9PT0gdGFyZ2V0Lmluc3RhbmNlSWQpO1xuICAgICAgaWYgKCFsaXZlQXR0YWNrZXIgfHwgIWxpdmVUYXJnZXQgfHwgIWxpdmVBdHRhY2tlci5jYW5BdHRhY2spIHJldHVybiBnYW1lO1xuICAgICAgbGl2ZVRhcmdldC5jdXJyZW50SHAgLT0gbGl2ZUF0dGFja2VyLmF0dGFjaztcbiAgICAgIGxpdmVBdHRhY2tlci5jdXJyZW50SHAgLT0gbGl2ZVRhcmdldC5hdHRhY2s7XG4gICAgICBsaXZlQXR0YWNrZXIuY2FuQXR0YWNrID0gZmFsc2U7XG4gICAgICB0aGlzLmNsZWFudXBEZXN0cm95ZWQobmV4dC5wbGF5ZXJzLlAxLCBuZXh0KTtcbiAgICAgIHRoaXMuY2xlYW51cERlc3Ryb3llZChuZXh0LnBsYXllcnMuUDIsIG5leHQpO1xuICAgICAgbmV4dC5yZXZpc2lvbisrO1xuICAgICAgbmV4dC5sb2cgPSBbYCR7bGl2ZUF0dGFja2VyLm5hbWV9IGNvbWJhdGUgY29udHJhICR7bGl2ZVRhcmdldC5uYW1lfS5gLCAuLi5uZXh0LmxvZ10uc2xpY2UoMCwgNCk7XG4gICAgICByZXR1cm4gbmV4dDtcbiAgICB9KTtcbiAgICB0aGlzLnNlbGVjdGVkQXR0YWNrZXIuc2V0KG51bGwpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGVuZFR1cm4oKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZEhhbmRDYXJkLnNldChudWxsKTtcbiAgICB0aGlzLnNlbGVjdGVkQXR0YWNrZXIuc2V0KG51bGwpO1xuICAgIHRoaXMuZ2FtZS51cGRhdGUoZ2FtZSA9PiB7XG4gICAgICBjb25zdCBuZXh0ID0gc3RydWN0dXJlZENsb25lKGdhbWUpO1xuICAgICAgbmV4dC50dXJuT3duZXIgPSBuZXh0LnR1cm5Pd25lciA9PT0gJ1AxJyA/ICdQMicgOiAnUDEnO1xuICAgICAgbmV4dC50dXJuQ291bnQrKztcbiAgICAgIGNvbnN0IGN1cnJlbnQgPSBuZXh0LnBsYXllcnNbbmV4dC50dXJuT3duZXJdO1xuICAgICAgY3VycmVudC5vZmZlcmluZ1BsYXllZFRoaXNUdXJuID0gZmFsc2U7XG4gICAgICBjdXJyZW50Lm9mZmVyaW5ncyA9IGN1cnJlbnQub2ZmZXJpbmdzLm1hcChvZmZlcmluZyA9PiAoeyAuLi5vZmZlcmluZywgcmVhZHk6IHRydWUgfSkpO1xuICAgICAgY3VycmVudC5iYXR0bGVab25lID0gY3VycmVudC5iYXR0bGVab25lLm1hcChjYXJkID0+ICh7IC4uLmNhcmQsIGNhbkF0dGFjazogdHJ1ZSB9KSk7XG4gICAgICBuZXh0LnJldmlzaW9uKys7XG4gICAgICBuZXh0LmxvZyA9IFtgVHVybm8gZGUgJHtjdXJyZW50LmRpc3BsYXlOYW1lfS5gLCAuLi5uZXh0LmxvZ10uc2xpY2UoMCwgNCk7XG4gICAgICByZXR1cm4gbmV4dDtcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZXNldE1vY2soKTogdm9pZCB7XG4gICAgdGhpcy5nYW1lLnNldChzdHJ1Y3R1cmVkQ2xvbmUoU1RBUlRJTkdfR0FNRSkpO1xuICAgIHRoaXMuc2VsZWN0ZWRIYW5kQ2FyZC5zZXQobnVsbCk7XG4gICAgdGhpcy5zZWxlY3RlZEF0dGFja2VyLnNldChudWxsKTtcbiAgICB0aGlzLnNlbGVjdGVkUHJldmlldy5zZXQobnVsbCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGlzdG9yeU5hbWVzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2FtZSgpXG4gICAgICAuaGlzdG9yeVpvbmUubWFwKGNhcmRJZCA9PiB0aGlzLmNhcmREZWZpbml0aW9uKGNhcmRJZCkubmFtZSlcbiAgICAgIC5qb2luKCcsICcpO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhbnVwRGVzdHJveWVkKHBsYXllcjogQ2hyaXN0aWFuaXR5UGxheWVyU3RhdGUsIGdhbWU6IENocmlzdGlhbml0eUdhbWVTdGF0ZSk6IHZvaWQge1xuICAgIGNvbnN0IGRlc3Ryb3llZCA9IHBsYXllci5iYXR0bGVab25lLmZpbHRlcihjYXJkID0+IGNhcmQuY3VycmVudEhwIDw9IDApO1xuICAgIGlmICghZGVzdHJveWVkLmxlbmd0aCkgcmV0dXJuO1xuICAgIGdhbWUuaGlzdG9yeVpvbmUucHVzaCguLi5kZXN0cm95ZWQubWFwKGNhcmQgPT4gY2FyZC5jYXJkSWQpKTtcbiAgICBwbGF5ZXIuYmF0dGxlWm9uZSA9IHBsYXllci5iYXR0bGVab25lLmZpbHRlcihjYXJkID0+IGNhcmQuY3VycmVudEhwID4gMCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaW5zcGVjdExlYWRlcihzZWF0OiBDaHJpc3RpYW5pdHlTZWF0KTogdm9pZCB7XG4gICAgY29uc3QgcGxheWVyID0gdGhpcy5nYW1lKCkucGxheWVyc1tzZWF0XTtcbiAgICB0aGlzLnNlbGVjdGVkUHJldmlldy5zZXQoe1xuICAgICAgdGl0bGU6IHBsYXllci5sZWFkZXJOYW1lLFxuICAgICAgZXllYnJvdzogdGhpcy50KCdjaHJpc3RpYW5pdHlMZWFkZXJDYXJkJyksXG4gICAgICBtZXRhOiBgJHtwbGF5ZXIubGVhZGVySHB9LyR7cGxheWVyLmxlYWRlck1heEhwfWAsXG4gICAgICBib2R5OiBzZWF0ID09PSAnUDInICYmIHRoaXMuaGFzT3Bwb25lbnRHdWFyZHMoKSA/IHRoaXMudCgnY2hyaXN0aWFuaXR5TGVhZGVyUHJvdGVjdGVkJykgOiB0aGlzLnQoJ2NocmlzdGlhbml0eUxlYWRlckJvZHknKSxcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBpbnNwZWN0T2ZmZXJpbmcob2ZmZXJpbmc6IENocmlzdGlhbml0eU9mZmVyaW5nSW5zdGFuY2UpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkUHJldmlldy5zZXQoe1xuICAgICAgdGl0bGU6IG9mZmVyaW5nLm5hbWUsXG4gICAgICBleWVicm93OiB0aGlzLnQoJ2NocmlzdGlhbml0eU9mZmVyaW5nQ2FyZCcpLFxuICAgICAgbWV0YTogb2ZmZXJpbmcucmVhZHkgPyB0aGlzLnQoJ2NocmlzdGlhbml0eU9mZmVyaW5nUmVhZHknKSA6IHRoaXMudCgnY2hyaXN0aWFuaXR5T2ZmZXJpbmdFeGhhdXN0ZWQnKSxcbiAgICAgIGJvZHk6IHRoaXMudCgnY2hyaXN0aWFuaXR5T2ZmZXJpbmdCb2R5JyksXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGluc3BlY3RIYW5kQ2FyZChjYXJkSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGNhcmQgPSB0aGlzLmNhcmREZWZpbml0aW9uKGNhcmRJZCk7XG4gICAgdGhpcy5zZWxlY3RlZFByZXZpZXcuc2V0KHtcbiAgICAgIHRpdGxlOiBjYXJkLm5hbWUsXG4gICAgICBleWVicm93OiBjYXJkLnR5cGUgPT09ICdvZmZlcmluZycgPyB0aGlzLnQoJ2NocmlzdGlhbml0eU9mZmVyaW5nQ2FyZCcpIDogdGhpcy50KCdjaHJpc3RpYW5pdHlDaGFyYWN0ZXJDYXJkJyksXG4gICAgICBtZXRhOiBjYXJkLnR5cGUgPT09ICdvZmZlcmluZycgPyBgKyR7Y2FyZC5saWZlfWAgOiBgJHt0aGlzLnQoJ2NocmlzdGlhbml0eUNvc3QnKX0gJHtjYXJkLmNvc3R9IMK3ICR7Y2FyZC5hdHRhY2t9LyR7Y2FyZC5saWZlfWAsXG4gICAgICBib2R5OiBjYXJkLnR5cGUgPT09ICdvZmZlcmluZycgPyB0aGlzLnQoJ2NocmlzdGlhbml0eU9mZmVyaW5nQm9keScpIDogdGhpcy50KCdjaHJpc3RpYW5pdHlDaGFyYWN0ZXJCb2R5JyksXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGluc3BlY3RDaGFyYWN0ZXIoY2FyZDogQ2hyaXN0aWFuaXR5Q2hhcmFjdGVySW5zdGFuY2UpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkUHJldmlldy5zZXQoe1xuICAgICAgdGl0bGU6IGNhcmQubmFtZSxcbiAgICAgIGV5ZWJyb3c6IHRoaXMudCgnY2hyaXN0aWFuaXR5Q2hhcmFjdGVyQ2FyZCcpLFxuICAgICAgbWV0YTogYCR7Y2FyZC5hdHRhY2t9LyR7Y2FyZC5jdXJyZW50SHB9YCxcbiAgICAgIGJvZHk6IGNhcmQuY2FuQXR0YWNrID8gdGhpcy50KCdjaHJpc3RpYW5pdHlDaGFyYWN0ZXJSZWFkeScpIDogdGhpcy50KCdjaHJpc3RpYW5pdHlDaGFyYWN0ZXJFeGhhdXN0ZWQnKSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc3BlbmRPZmZlcmluZ3MocGxheWVyOiBDaHJpc3RpYW5pdHlQbGF5ZXJTdGF0ZSwgY29zdDogbnVtYmVyKTogdm9pZCB7XG4gICAgbGV0IHJlbWFpbmluZyA9IGNvc3Q7XG4gICAgcGxheWVyLm9mZmVyaW5ncyA9IHBsYXllci5vZmZlcmluZ3MubWFwKG9mZmVyaW5nID0+IHtcbiAgICAgIGlmIChyZW1haW5pbmcgPD0gMCB8fCAhb2ZmZXJpbmcucmVhZHkpIHJldHVybiBvZmZlcmluZztcbiAgICAgIHJlbWFpbmluZyAtPSBvZmZlcmluZy52YWx1ZTtcbiAgICAgIHJldHVybiB7IC4uLm9mZmVyaW5nLCByZWFkeTogZmFsc2UgfTtcbiAgICB9KTtcbiAgfVxufVxuIl19
|