valtech-components 4.0.485 → 4.0.487

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/esm2022/lib/components/organisms/mini-games/bubble-blitz-game.component.mjs +18 -9
  2. package/esm2022/lib/components/organisms/mini-games/chessimals-engine.mjs +109 -16
  3. package/esm2022/lib/components/organisms/mini-games/chessimals-game.component.mjs +351 -498
  4. package/esm2022/lib/components/organisms/mini-games/christianity-card.component.mjs +280 -0
  5. package/esm2022/lib/components/organisms/mini-games/christianity-game.component.mjs +2566 -0
  6. package/esm2022/lib/components/organisms/mini-games/memory-game.component.mjs +18 -9
  7. package/esm2022/lib/components/organisms/mini-games/mini-games.i18n.mjs +297 -23
  8. package/esm2022/lib/components/organisms/mini-games/simon-game.component.mjs +18 -9
  9. package/esm2022/lib/components/organisms/mini-games/types.mjs +1 -1
  10. package/esm2022/lib/directives/light-ripple.directive.mjs +57 -0
  11. package/esm2022/lib/version.mjs +2 -2
  12. package/esm2022/mini-games/public-api.mjs +34 -2
  13. package/esm2022/public-api.mjs +3 -1
  14. package/fesm2022/valtech-components-mini-games.mjs +34 -2
  15. package/fesm2022/valtech-components-mini-games.mjs.map +1 -1
  16. package/fesm2022/valtech-components.mjs +3654 -515
  17. package/fesm2022/valtech-components.mjs.map +1 -1
  18. package/lib/components/organisms/mini-games/bubble-blitz-game.component.d.ts +2 -0
  19. package/lib/components/organisms/mini-games/chessimals-game.component.d.ts +4 -4
  20. package/lib/components/organisms/mini-games/christianity-card.component.d.ts +48 -0
  21. package/lib/components/organisms/mini-games/christianity-game.component.d.ts +204 -0
  22. package/lib/components/organisms/mini-games/memory-game.component.d.ts +2 -0
  23. package/lib/components/organisms/mini-games/simon-game.component.d.ts +2 -0
  24. package/lib/components/organisms/mini-games/types.d.ts +131 -1
  25. package/lib/directives/light-ripple.directive.d.ts +8 -0
  26. package/lib/version.d.ts +1 -1
  27. package/mini-games/public-api.d.ts +4 -0
  28. package/package.json +2 -1
  29. package/public-api.d.ts +2 -0
  30. package/src/lib/assets/games/christianity/card-symbol.svg +51 -0
  31. package/src/lib/assets/games/christianity/card-template-reference/front.html +114 -0
  32. package/src/lib/assets/games/christianity/card-template-reference/front.style.css +352 -0
  33. package/src/lib/assets/games/christianity/data/01-genesis.bible-reference-suggestions.csv +191 -0
  34. package/src/lib/assets/games/christianity/data/01-genesis.bible-verses.nbv-open.csv +170 -0
  35. package/src/lib/assets/games/christianity/data/01-genesis.cards.csv +281 -0
  36. package/src/lib/assets/games/christianity/data/01-genesis.cards.i18n.csv +281 -0
  37. package/src/lib/assets/games/christianity/data/01-genesis.cards.json +16453 -0
  38. package/src/lib/assets/games/christianity/data/01-genesis.unassigned-effects.csv +49 -0
  39. package/src/lib/assets/games/christianity/data/README.md +40 -0
  40. package/src/lib/assets/games/christianity/data/data-con-habilides.csv +273 -0
  41. package/src/lib/assets/games/christianity/data/habilidades-por-tipo.xlsx +0 -0
  42. package/src/lib/assets/games/christianity/data/listado-edicion.csv +281 -0
  43. package/src/lib/assets/games/christianity/editions/1/cards/.gitkeep +1 -0
  44. package/src/lib/assets/games/christianity/editions/1/cards/PLACEHOLDER.png +0 -0
  45. package/src/lib/assets/games/christianity/editions/README.md +34 -0
  46. package/src/lib/assets/games/christianity/icons/1-icon.png +0 -0
  47. package/src/lib/assets/games/christianity/icons/action.png +0 -0
  48. package/src/lib/assets/games/christianity/icons/character.png +0 -0
  49. package/src/lib/assets/games/christianity/icons/event.png +0 -0
  50. package/src/lib/assets/games/christianity/icons/leader.png +0 -0
  51. package/src/lib/assets/games/christianity/icons/offering.png +0 -0
  52. package/src/lib/assets/games/christianity/icons/place.png +0 -0
  53. package/src/lib/assets/games/christianity/icons/tool.png +0 -0
  54. package/src/lib/assets/games/christianity/icons/wisdom.png +0 -0
  55. package/src/lib/assets/games/christianity/sources/README.md +16 -0
  56. package/src/lib/assets/games/christianity/sources/spaonbv_vpl.txt +29102 -0
  57. package/src/lib/assets/games/christianity/sources/spaonbv_vpl.xml +29104 -0
  58. package/src/lib/assets/games/christianity/spaonbv.txt +52 -0
@@ -0,0 +1,2566 @@
1
+ import { DOCUMENT } from '@angular/common';
2
+ import { Component, DestroyRef, computed, effect, inject, signal } from '@angular/core';
3
+ import { CdkDrag, CdkDragPlaceholder, CdkDragPreview, CdkDropList } from '@angular/cdk/drag-drop';
4
+ import { LightRippleDirective } from '../../../directives/light-ripple.directive';
5
+ import { I18nService } from '../../../services/i18n';
6
+ import { ChristianityCardComponent } from './christianity-card.component';
7
+ import { MINI_GAMES_I18N } from './mini-games.i18n';
8
+ import * as i0 from "@angular/core";
9
+ const GENESIS_CATALOG_URL = 'assets/games/christianity/data/01-genesis.cards.json';
10
+ const GENESIS_ICON_URL = 'assets/games/christianity/icons/1-icon.png';
11
+ const TUTORIAL_CHARACTER_LIMIT = 12;
12
+ const TUTORIAL_OFFERING_LIMIT = 6;
13
+ const SPLASH_MIN_DURATION_MS = 720;
14
+ const STARTER_CARDS = {
15
+ o_simple: {
16
+ id: 'o_simple',
17
+ name: 'Ofrenda simple',
18
+ type: 'offering',
19
+ cost: 0,
20
+ attack: 0,
21
+ life: 1,
22
+ verseText: 'Una ofrenda sencilla queda lista para sostener tus siguientes jugadas.',
23
+ scripture: 'Genesis 4:4',
24
+ edition: 'GEN',
25
+ collectorNumber: '001/020',
26
+ year: '2026',
27
+ author: 'MVP',
28
+ rarity: 'normal',
29
+ },
30
+ o_forbidden: {
31
+ id: 'o_forbidden',
32
+ name: 'El fruto prohibido',
33
+ type: 'offering',
34
+ cost: 0,
35
+ attack: 0,
36
+ life: 2,
37
+ abilityName: 'Conocimiento del bien y del mal',
38
+ abilityText: 'Al usarla, disminuye en 1 los puntos de vida de tu Líder.',
39
+ abilityCost: 0,
40
+ verseText: 'Dios el Señor puso al hombre en el jardín de Edén para que lo labrara y lo cuidara.',
41
+ scripture: 'Genesis 2:17 NBV',
42
+ edition: 'GEN',
43
+ collectorNumber: '012/180',
44
+ year: '2026',
45
+ author: 'MVP',
46
+ rarity: 'uncommon',
47
+ },
48
+ p_scout: {
49
+ id: 'p_scout',
50
+ name: 'Scout',
51
+ type: 'character',
52
+ cost: 1,
53
+ attack: 1,
54
+ life: 1,
55
+ verseText: 'Un explorador humilde abre camino antes de que llegue la batalla.',
56
+ scripture: 'Genesis 13:17',
57
+ edition: 'GEN',
58
+ collectorNumber: '002/020',
59
+ year: '2026',
60
+ author: 'MVP',
61
+ rarity: 'normal',
62
+ },
63
+ p_guard: { id: 'p_guard', name: 'Guard', type: 'character', cost: 2, attack: 1, life: 3, edition: 'GEN', collectorNumber: '003/020', year: '2026', author: 'MVP', rarity: 'normal' },
64
+ p_warrior: { id: 'p_warrior', name: 'Warrior', type: 'character', cost: 2, attack: 2, life: 2, edition: 'GEN', collectorNumber: '004/020', year: '2026', author: 'MVP', rarity: 'normal' },
65
+ p_elder: { id: 'p_elder', name: 'Elder', type: 'character', cost: 3, attack: 2, life: 4, edition: 'GEN', collectorNumber: '005/020', year: '2026', author: 'MVP', rarity: 'uncommon' },
66
+ p_champion: { id: 'p_champion', name: 'Champion', type: 'character', cost: 4, attack: 4, life: 4, edition: 'GEN', collectorNumber: '006/020', year: '2026', author: 'MVP', rarity: 'rare' },
67
+ };
68
+ const STARTING_SHARED_DECK = [
69
+ 'o_simple',
70
+ 'p_scout',
71
+ 'o_forbidden',
72
+ 'o_simple',
73
+ 'p_guard',
74
+ 'p_warrior',
75
+ 'o_simple',
76
+ 'p_elder',
77
+ 'p_scout',
78
+ 'o_simple',
79
+ 'p_champion',
80
+ 'p_guard',
81
+ 'o_simple',
82
+ 'p_warrior',
83
+ 'p_scout',
84
+ 'o_simple',
85
+ 'p_elder',
86
+ 'p_guard',
87
+ 'o_simple',
88
+ ];
89
+ const STARTING_GAME = {
90
+ gameId: 'mock-christianity',
91
+ status: 'in_progress',
92
+ mode: 'local_pass',
93
+ turnOwner: 'P1',
94
+ revision: 0,
95
+ turnCount: 1,
96
+ matchScore: { P1: 0, P2: 0 },
97
+ sharedDeck: STARTING_SHARED_DECK,
98
+ historyZone: [],
99
+ players: {
100
+ P1: {
101
+ seat: 'P1',
102
+ displayName: 'Jugador',
103
+ avatar: 'J',
104
+ avatarColor: '#2563eb',
105
+ leaderName: 'Adam',
106
+ leaderHp: 15,
107
+ leaderMaxHp: 15,
108
+ offerings: [
109
+ { instanceId: 'p1_offering_001', cardId: 'o_simple', name: 'Ofrenda simple', owner: 'P1', ready: true, value: 1 },
110
+ {
111
+ instanceId: 'p1_offering_002',
112
+ cardId: 'o_forbidden',
113
+ name: 'El fruto prohibido',
114
+ owner: 'P1',
115
+ ready: true,
116
+ value: 2,
117
+ abilityName: 'Conocimiento del bien y del mal',
118
+ abilityText: 'Al usarla, disminuye en 1 los puntos de vida de tu Lider.',
119
+ abilityCost: 0,
120
+ },
121
+ ],
122
+ offeringPlayedThisTurn: false,
123
+ hand: ['o_simple', 'p_scout', 'p_warrior', 'p_guard'],
124
+ battleZone: [],
125
+ },
126
+ P2: {
127
+ seat: 'P2',
128
+ displayName: 'Rival',
129
+ avatar: 'R',
130
+ avatarColor: '#b45309',
131
+ leaderName: 'Noah',
132
+ leaderHp: 15,
133
+ leaderMaxHp: 15,
134
+ offerings: [{ instanceId: 'p2_offering_001', cardId: 'o_simple', name: 'Ofrenda simple', owner: 'P2', ready: true, value: 1 }],
135
+ offeringPlayedThisTurn: false,
136
+ handCount: 4,
137
+ battleZone: [
138
+ {
139
+ instanceId: 'opp_001',
140
+ cardId: 'p_scout',
141
+ name: 'Scout',
142
+ owner: 'P2',
143
+ controller: 'P2',
144
+ slot: 0,
145
+ attack: 1,
146
+ currentHp: 1,
147
+ maxHp: 1,
148
+ canAttack: false,
149
+ },
150
+ ],
151
+ },
152
+ },
153
+ log: ['Partida iniciada.'],
154
+ };
155
+ export class ChristianityGameComponent {
156
+ constructor() {
157
+ this.i18n = inject(I18nService);
158
+ this.document = inject(DOCUMENT);
159
+ this.destroyRef = inject(DestroyRef);
160
+ this.bootStartedAt = performance.now();
161
+ this.impactEventSequence = 0;
162
+ this.impactTimers = new Set();
163
+ this.game = signal(structuredClone(STARTING_GAME));
164
+ this.screen = signal('splash');
165
+ this.catalogLoadState = signal('loading');
166
+ this.selectedHandCard = signal(null);
167
+ this.selectedAttacker = signal(null);
168
+ this.selectedPreview = signal(null);
169
+ this.selectedInfo = signal(null);
170
+ this.previewTilt = signal({ rotateX: 5, rotateY: -5, shiftX: 0, shiftY: 0 });
171
+ this.hoveredHandIndex = signal(null);
172
+ this.draggingCardId = signal(null);
173
+ this.showHistory = signal(false);
174
+ this.showGallery = signal(false);
175
+ this.offeringsSeat = signal(null);
176
+ this.impactEvents = signal([]);
177
+ this.cardCatalog = signal(STARTER_CARDS);
178
+ this.allCatalogCards = signal(Object.values(STARTER_CARDS));
179
+ this.catalogLoaded = signal(false);
180
+ this.gallerySearch = signal('');
181
+ this.galleryType = signal('all');
182
+ this.canDropOnBattleSlot = (drag) => {
183
+ const card = this.cardDefinition(drag.data);
184
+ return card.type === 'character' && this.canPlay(card);
185
+ };
186
+ this.canDropOnOfferings = (drag) => {
187
+ const card = this.cardDefinition(drag.data);
188
+ return card.type === 'offering' && this.canPlay(card);
189
+ };
190
+ this.player = computed(() => this.game().players.P1);
191
+ this.opponent = computed(() => this.game().players.P2);
192
+ this.currentPlayer = computed(() => this.game().players[this.game().turnOwner]);
193
+ this.isOwnTurn = computed(() => this.game().status === 'in_progress' && this.game().turnOwner === 'P1');
194
+ this.winnerSeat = computed(() => {
195
+ const game = this.game();
196
+ if (game.status !== 'finished')
197
+ return null;
198
+ if (game.players.P1.leaderHp <= 0)
199
+ return 'P2';
200
+ if (game.players.P2.leaderHp <= 0)
201
+ return 'P1';
202
+ return game.players.P1.leaderHp >= game.players.P2.leaderHp ? 'P1' : 'P2';
203
+ });
204
+ this.hasOpponentGuards = computed(() => this.opponent().battleZone.length > 0);
205
+ this.opponentHandCount = computed(() => this.opponent().handCount ?? this.opponent().hand?.length ?? 0);
206
+ this.galleryCards = computed(() => {
207
+ const query = this.gallerySearch().trim().toLowerCase().normalize('NFD').replace(/[\u0300-\u036f]/g, '');
208
+ const type = this.galleryType();
209
+ return this.allCatalogCards()
210
+ .filter(card => type === 'all' || card.type === type)
211
+ .filter(card => {
212
+ if (!query)
213
+ return true;
214
+ const text = this.translatedCardText(card);
215
+ const haystack = [text.name, card.type, text.scripture, text.abilityName, text.abilityText, text.verseText]
216
+ .filter(Boolean)
217
+ .join(' ')
218
+ .toLowerCase()
219
+ .normalize('NFD')
220
+ .replace(/[\u0300-\u036f]/g, '');
221
+ return haystack.includes(query);
222
+ })
223
+ .sort((left, right) => this.cardSortKey(left).localeCompare(this.cardSortKey(right), 'es'));
224
+ });
225
+ this.galleryEditionLabel = computed(() => {
226
+ const count = this.allCatalogCards().length;
227
+ return `${this.t('christianityGenesisEdition')} · ${count} ${this.t('christianityCards')}`;
228
+ });
229
+ this.galleryEditionIcon = computed(() => GENESIS_ICON_URL);
230
+ this.galleryTypeOptions = computed(() => [
231
+ { value: 'all', label: this.t('christianityAllCards') },
232
+ { value: 'leader', label: this.t('christianityLeaderCard') },
233
+ { value: 'offering', label: this.t('christianityOfferingCard') },
234
+ { value: 'character', label: this.t('christianityCharacterCard') },
235
+ { value: 'wisdom', label: this.t('christianityWisdomCard') },
236
+ { value: 'action', label: this.t('christianityActionCard') },
237
+ { value: 'tool', label: this.t('christianityToolCard') },
238
+ { value: 'place', label: this.t('christianityPlaceCard') },
239
+ { value: 'event', label: this.t('christianityEventCard') },
240
+ ]);
241
+ this.hasModalOverlay = computed(() => !!this.selectedPreview()
242
+ || !!this.selectedInfo()
243
+ || this.showHistory()
244
+ || this.showGallery()
245
+ || !!this.offeringsSeat());
246
+ this.canNavigateHistoryPreview = computed(() => {
247
+ const preview = this.selectedPreview();
248
+ if (!preview?.cardId || preview.source !== 'history')
249
+ return false;
250
+ return this.showHistory() && this.game().historyZone.length > 1;
251
+ });
252
+ this.splashStatusText = computed(() => {
253
+ const state = this.catalogLoadState();
254
+ if (state === 'ready')
255
+ return this.t('christianitySplashReady');
256
+ if (state === 'fallback')
257
+ return this.t('christianitySplashFallback');
258
+ return this.t('christianitySplashLoading');
259
+ });
260
+ this.startFeaturedCards = computed(() => {
261
+ const cards = this.allCatalogCards();
262
+ const preferred = ['GEN-009', 'GEN-013', 'GEN-032']
263
+ .map(id => this.cardCatalog()[id])
264
+ .filter((card) => !!card);
265
+ return (preferred.length ? preferred : cards.slice(0, 3)).slice(0, 3);
266
+ });
267
+ this.futureModes = computed(() => [
268
+ { title: this.t('christianitySoloBotMode'), body: this.t('christianitySoloBotModeBody') },
269
+ { title: this.t('christianityTwoPlayerMode'), body: this.t('christianityTwoPlayerModeBody') },
270
+ { title: this.t('christianityOneDeviceMode'), body: this.t('christianityOneDeviceModeBody') },
271
+ { title: this.t('christianitySpectatorMode'), body: this.t('christianitySpectatorModeBody') },
272
+ ]);
273
+ this.selectedCardDefinition = computed(() => {
274
+ const selected = this.selectedHandCard();
275
+ return selected ? this.cardDefinition(selected) : null;
276
+ });
277
+ this.selectedPreviewCard = computed(() => {
278
+ const cardId = this.selectedPreview()?.cardId;
279
+ return cardId ? this.cardDefinition(cardId) : null;
280
+ });
281
+ this.selectedPreviewRenderCard = computed(() => {
282
+ const preview = this.selectedPreview();
283
+ if (!preview)
284
+ return null;
285
+ const card = this.selectedPreviewCard();
286
+ if (card) {
287
+ return this.definitionToRenderCard(card, {
288
+ statusText: preview.body,
289
+ });
290
+ }
291
+ if (preview.eyebrow === this.t('christianityLeaderCard')) {
292
+ const [currentHp, maxHp] = preview.meta.split('/').map(value => Number(value));
293
+ return {
294
+ id: `leader-${preview.title.toLowerCase()}`,
295
+ name: preview.title,
296
+ type: 'leader',
297
+ typeLabel: this.t('christianityLeaderCard'),
298
+ currentHp: Number.isFinite(currentHp) ? currentHp : undefined,
299
+ maxHp: Number.isFinite(maxHp) ? maxHp : undefined,
300
+ life: Number.isFinite(currentHp) ? currentHp : undefined,
301
+ abilityName: this.t('christianityLeaderCard'),
302
+ abilityText: preview.body,
303
+ verseText: preview.body,
304
+ edition: 'MVP',
305
+ collectorNumber: 'LIDER',
306
+ year: '2026',
307
+ author: 'MVP',
308
+ rarity: 'legendary',
309
+ };
310
+ }
311
+ return {
312
+ id: `preview-${preview.title.toLowerCase()}`,
313
+ name: preview.title,
314
+ type: this.previewRenderType(preview.eyebrow),
315
+ typeLabel: preview.eyebrow,
316
+ abilityName: preview.eyebrow,
317
+ abilityText: preview.body,
318
+ verseText: preview.body,
319
+ edition: 'MVP',
320
+ collectorNumber: preview.eyebrow,
321
+ year: '2026',
322
+ author: 'MVP',
323
+ rarity: 'normal',
324
+ statusText: preview.meta,
325
+ };
326
+ });
327
+ this.previewRule = computed(() => {
328
+ const preview = this.selectedPreview();
329
+ if (!preview)
330
+ return null;
331
+ const card = this.selectedPreviewCard();
332
+ if (card?.type === 'offering') {
333
+ return { title: this.t('christianityOfferingCard'), body: this.t('christianityOfferingRuleBody') };
334
+ }
335
+ if (card?.type === 'character') {
336
+ return { title: this.t('christianityCharacterCard'), body: this.t('christianityCharacterRuleBody') };
337
+ }
338
+ if (card?.type === 'wisdom') {
339
+ return { title: this.t('christianityWisdomCard'), body: this.t('christianityWisdomRuleBody') };
340
+ }
341
+ if (card?.type === 'action') {
342
+ return { title: this.t('christianityActionCard'), body: this.t('christianityActionRuleBody') };
343
+ }
344
+ if (card?.type === 'tool') {
345
+ return { title: this.t('christianityToolCard'), body: this.t('christianityToolRuleBody') };
346
+ }
347
+ if (card?.type === 'place') {
348
+ return { title: this.t('christianityPlaceCard'), body: this.t('christianityPlaceRuleBody') };
349
+ }
350
+ if (card?.type === 'event') {
351
+ return { title: this.t('christianityEventCard'), body: this.t('christianityEventRuleBody') };
352
+ }
353
+ if (card?.type === 'leader') {
354
+ return { title: this.t('christianityLeaderCard'), body: this.t('christianityLeaderRuleBody') };
355
+ }
356
+ if (preview.eyebrow === this.t('christianityLeaderCard')) {
357
+ return { title: this.t('christianityLeaderCard'), body: this.t('christianityLeaderRuleBody') };
358
+ }
359
+ return null;
360
+ });
361
+ this.statusText = computed(() => {
362
+ const winner = this.winnerSeat();
363
+ if (winner) {
364
+ return winner === 'P1' ? this.t('christianityYouWin') : this.t('christianityOpponentWins');
365
+ }
366
+ const attacker = this.selectedAttacker();
367
+ const handCard = this.selectedCardDefinition();
368
+ if (!this.isOwnTurn()) {
369
+ return this.t('christianityWaitTurn');
370
+ }
371
+ if (attacker) {
372
+ return this.hasOpponentGuards() ? this.t('christianityChooseCharacterTarget') : this.t('christianityChooseTarget');
373
+ }
374
+ if (handCard) {
375
+ if (!this.canPlay(handCard)) {
376
+ return this.t('christianityNeedOfferings');
377
+ }
378
+ return handCard.type === 'offering' ? this.t('christianityPlaceOffering') : this.t('christianityChooseSlot');
379
+ }
380
+ return this.t('christianityChooseCard');
381
+ });
382
+ this.i18n.registerDefaults('MiniGames', MINI_GAMES_I18N);
383
+ effect((onCleanup) => {
384
+ if (!this.hasModalOverlay())
385
+ return;
386
+ const previousOverflow = this.document.body.style.overflow;
387
+ const previousOverscroll = this.document.body.style.overscrollBehavior;
388
+ this.document.body.style.overflow = 'hidden';
389
+ this.document.body.style.overscrollBehavior = 'contain';
390
+ onCleanup(() => {
391
+ this.document.body.style.overflow = previousOverflow;
392
+ this.document.body.style.overscrollBehavior = previousOverscroll;
393
+ });
394
+ });
395
+ this.destroyRef.onDestroy(() => {
396
+ for (const timer of this.impactTimers) {
397
+ window.clearTimeout(timer);
398
+ }
399
+ this.impactTimers.clear();
400
+ });
401
+ void this.loadGenesisCatalog();
402
+ }
403
+ t(key) {
404
+ this.i18n.lang();
405
+ return this.i18n.t(key, 'MiniGames');
406
+ }
407
+ async loadGenesisCatalog() {
408
+ let loaded = false;
409
+ try {
410
+ const response = await fetch(GENESIS_CATALOG_URL);
411
+ if (response.ok) {
412
+ const catalog = await response.json();
413
+ const cards = (catalog.cards ?? []).map(card => this.normalizeCatalogCard(card, catalog));
414
+ if (cards.length) {
415
+ this.cardCatalog.set(Object.fromEntries(cards.map(card => [card.id, card])));
416
+ this.allCatalogCards.set(cards);
417
+ this.catalogLoaded.set(true);
418
+ this.game.set(this.createTutorialGame(cards));
419
+ loaded = true;
420
+ }
421
+ }
422
+ }
423
+ catch (error) {
424
+ console.warn('Christianity catalog could not be loaded. Falling back to starter cards.', error);
425
+ }
426
+ this.catalogLoadState.set(loaded ? 'ready' : 'fallback');
427
+ this.finishSplash();
428
+ }
429
+ finishSplash() {
430
+ const elapsed = performance.now() - this.bootStartedAt;
431
+ const remaining = Math.max(0, SPLASH_MIN_DURATION_MS - elapsed);
432
+ window.setTimeout(() => {
433
+ if (this.screen() === 'splash') {
434
+ this.screen.set('home');
435
+ }
436
+ }, remaining);
437
+ }
438
+ normalizeCatalogCard(card, catalog) {
439
+ const editionIcon = card.editionIcon ?? catalog.edition?.icon ?? GENESIS_ICON_URL;
440
+ const verseText = card.verseText ?? card.bible?.text;
441
+ const scripture = card.scripture ?? this.formatScripture(card.bible);
442
+ const offeringValue = card.type === 'offering' ? card.offeringValue ?? card.life ?? card.cost ?? 1 : card.offeringValue;
443
+ const life = card.type === 'leader'
444
+ ? card.leaderLife ?? card.life ?? 10
445
+ : card.type === 'offering'
446
+ ? offeringValue
447
+ : card.life ?? 0;
448
+ return {
449
+ ...card,
450
+ cost: card.type === 'offering' ? 0 : card.cost ?? 0,
451
+ offeringValue,
452
+ life,
453
+ leaderLife: card.type === 'leader' ? card.leaderLife ?? life : card.leaderLife,
454
+ attack: card.type === 'character' ? card.attack ?? 0 : card.attack,
455
+ abilityName: card.abilityName ?? card.abilities?.[0]?.name,
456
+ abilityText: card.abilityText ?? card.abilities?.[0]?.text,
457
+ verseText,
458
+ scripture,
459
+ edition: card.edition ?? catalog.edition?.id ?? 'GEN',
460
+ editionNumber: card.editionNumber ?? catalog.edition?.number,
461
+ editionIcon,
462
+ imageUrl: card.imageUrl ?? card.art?.imageUrl,
463
+ author: card.author ?? card.art?.artistCredit,
464
+ year: card.year ?? '2026',
465
+ frontTemplate: card.frontTemplate ?? 'genesis-classic',
466
+ };
467
+ }
468
+ formatScripture(bible) {
469
+ if (!bible?.book || !bible.reference)
470
+ return undefined;
471
+ return `${bible.book} ${bible.reference}${bible.version ? ` ${bible.version}` : ''}`;
472
+ }
473
+ createTutorialGame(cards) {
474
+ const leaders = cards.filter(card => card.type === 'leader');
475
+ const playerLeader = this.findCard(leaders, 'Adán') ?? leaders[0];
476
+ const opponentLeader = this.findCard(leaders, 'Noé') ?? leaders[1] ?? leaders[0];
477
+ const offerings = cards.filter(card => card.type === 'offering').slice(0, TUTORIAL_OFFERING_LIMIT);
478
+ const characters = cards
479
+ .filter(card => card.type === 'character' && (card.cost ?? 0) <= 4 && (card.attack ?? 0) >= 0 && (card.life ?? 0) > 0)
480
+ .slice(0, TUTORIAL_CHARACTER_LIMIT);
481
+ const startingOffering = offerings[0] ?? STARTER_CARDS['o_simple'];
482
+ const tutorialDeck = [
483
+ ...offerings.slice(1),
484
+ ...characters,
485
+ ...offerings.slice(0, 1),
486
+ ].slice(0, 20);
487
+ const playerHand = tutorialDeck.slice(0, 4).map(card => card.id);
488
+ const opponentBattleCard = characters[0];
489
+ const sharedDeck = tutorialDeck.slice(4).map(card => card.id);
490
+ return {
491
+ ...structuredClone(STARTING_GAME),
492
+ status: 'in_progress',
493
+ turnOwner: 'P1',
494
+ turnCount: 1,
495
+ matchScore: { P1: 0, P2: 0 },
496
+ sharedDeck,
497
+ historyZone: [],
498
+ players: {
499
+ P1: this.createTutorialPlayer('P1', playerLeader, startingOffering, playerHand, []),
500
+ P2: this.createTutorialPlayer('P2', opponentLeader, startingOffering, undefined, opponentBattleCard ? [this.createCharacterInstance(opponentBattleCard, 'P2', 0, 'opp_001')] : []),
501
+ },
502
+ log: [this.t('christianityTutorialLoaded')],
503
+ };
504
+ }
505
+ createTutorialPlayer(seat, leader, startingOffering, hand, battleZone) {
506
+ const base = STARTING_GAME.players[seat];
507
+ const leaderLife = leader?.leaderLife ?? leader?.life ?? base.leaderMaxHp;
508
+ return {
509
+ ...structuredClone(base),
510
+ leaderCardId: leader?.id,
511
+ leaderName: leader ? this.translatedCardText(leader).name : base.leaderName,
512
+ leaderHp: leaderLife,
513
+ leaderMaxHp: leaderLife,
514
+ offerings: [this.createOfferingInstance(startingOffering, seat, `${seat.toLowerCase()}_offering_001`)],
515
+ offeringPlayedThisTurn: false,
516
+ hand,
517
+ handCount: hand ? undefined : 4,
518
+ battleZone,
519
+ };
520
+ }
521
+ createOfferingInstance(card, seat, instanceId) {
522
+ const value = card.offeringValue ?? card.life ?? 1;
523
+ return {
524
+ instanceId,
525
+ cardId: card.id,
526
+ name: this.translatedCardText(card).name,
527
+ owner: seat,
528
+ ready: true,
529
+ value,
530
+ abilityName: card.abilityName,
531
+ abilityText: card.abilityText,
532
+ abilityCost: card.abilityCost,
533
+ };
534
+ }
535
+ createCharacterInstance(card, seat, slot, instanceId) {
536
+ const life = card.life ?? 1;
537
+ return {
538
+ instanceId,
539
+ cardId: card.id,
540
+ name: this.translatedCardText(card).name,
541
+ owner: seat,
542
+ controller: seat,
543
+ slot,
544
+ attack: card.attack ?? 0,
545
+ currentHp: life,
546
+ maxHp: life,
547
+ canAttack: false,
548
+ };
549
+ }
550
+ findCard(cards, namePart) {
551
+ return cards.find(card => this.translatedCardText(card).name.toLowerCase().includes(namePart.toLowerCase()));
552
+ }
553
+ cardSortKey(card) {
554
+ const collector = card.collectorNumber ?? card.id;
555
+ return `${card.edition ?? ''}-${collector.padStart(8, '0')}-${this.translatedCardText(card).name}`;
556
+ }
557
+ cardDefinition(cardId) {
558
+ return this.cardCatalog()[cardId] ?? STARTER_CARDS[cardId] ?? STARTER_CARDS['p_scout'];
559
+ }
560
+ translatedCardText(card) {
561
+ const lang = this.i18n.lang();
562
+ const translation = card.i18n?.[lang] ?? card.i18n?.['es'];
563
+ const primaryAbility = translation?.abilities?.[0] ?? card.abilities?.[0];
564
+ return {
565
+ name: translation?.name ?? card.name,
566
+ fullName: translation?.fullName ?? card.fullName,
567
+ verseText: translation?.verseText ?? card.verseText,
568
+ scripture: translation?.scripture ?? card.scripture,
569
+ abilityName: translation?.abilityName ?? primaryAbility?.name ?? card.abilityName,
570
+ abilityText: translation?.abilityText ?? primaryAbility?.text ?? card.abilityText,
571
+ abilities: translation?.abilities ?? card.abilities,
572
+ };
573
+ }
574
+ cardDisplayName(cardId) {
575
+ return this.translatedCardText(this.cardDefinition(cardId)).name;
576
+ }
577
+ playerLeaderDisplayName(player) {
578
+ return player.leaderCardId ? this.cardDisplayName(player.leaderCardId) : player.leaderName;
579
+ }
580
+ catalogStatusLabel() {
581
+ const state = this.catalogLoadState();
582
+ if (state === 'ready')
583
+ return this.t('christianityCatalogReady');
584
+ if (state === 'fallback')
585
+ return this.t('christianityCatalogFallback');
586
+ return this.t('christianityCatalogLoading');
587
+ }
588
+ startFeaturedCardTransform(index) {
589
+ const transforms = [
590
+ 'translateX(-1.4rem) rotate(-9deg)',
591
+ 'translateY(-0.55rem) rotate(2deg)',
592
+ 'translateX(1.4rem) rotate(10deg)',
593
+ ];
594
+ return transforms[index] ?? 'none';
595
+ }
596
+ cardTypeLabel(card) {
597
+ const labels = {
598
+ action: this.t('christianityActionCard'),
599
+ character: this.t('christianityCharacterCard'),
600
+ event: this.t('christianityEventCard'),
601
+ leader: this.t('christianityLeaderCard'),
602
+ offering: this.t('christianityOfferingCard'),
603
+ place: this.t('christianityPlaceCard'),
604
+ tool: this.t('christianityToolCard'),
605
+ wisdom: this.t('christianityWisdomCard'),
606
+ };
607
+ return labels[card.type];
608
+ }
609
+ definitionToRenderCard(card, overrides = {}) {
610
+ const text = this.translatedCardText(card);
611
+ const base = {
612
+ id: card.id,
613
+ name: text.name,
614
+ type: card.type,
615
+ typeLabel: this.cardTypeLabel(card),
616
+ cost: card.cost,
617
+ offeringValue: card.type === 'offering' ? card.offeringValue ?? card.life : undefined,
618
+ attack: card.type === 'character' ? card.attack : undefined,
619
+ life: card.life,
620
+ currentHp: card.life,
621
+ maxHp: card.life,
622
+ abilityName: text.abilityName,
623
+ abilityText: text.abilityText || this.defaultCardBody(card.type),
624
+ verseText: text.verseText,
625
+ scripture: text.scripture,
626
+ edition: card.edition,
627
+ collectorNumber: card.collectorNumber,
628
+ editionIcon: card.editionIcon ?? (card.edition === 'GEN' ? GENESIS_ICON_URL : undefined),
629
+ year: card.year,
630
+ author: card.author,
631
+ rarity: card.rarity,
632
+ imageUrl: card.imageUrl,
633
+ frontTemplate: card.frontTemplate ?? (card.edition === 'GEN' ? 'genesis-classic' : undefined),
634
+ };
635
+ return { ...base, ...overrides };
636
+ }
637
+ hiddenCardRenderCard() {
638
+ return {
639
+ id: 'christianity-hidden-card',
640
+ name: this.t('christianityHiddenCard'),
641
+ type: 'event',
642
+ typeLabel: this.t('christianityHiddenCard'),
643
+ };
644
+ }
645
+ defaultCardBody(type) {
646
+ const bodies = {
647
+ action: this.t('christianityActionRuleBody'),
648
+ character: this.t('christianityCharacterBody'),
649
+ event: this.t('christianityEventRuleBody'),
650
+ leader: this.t('christianityLeaderBody'),
651
+ offering: this.t('christianityOfferingBody'),
652
+ place: this.t('christianityPlaceRuleBody'),
653
+ tool: this.t('christianityToolRuleBody'),
654
+ wisdom: this.t('christianityWisdomRuleBody'),
655
+ };
656
+ return bodies[type];
657
+ }
658
+ characterRenderCard(card) {
659
+ const definition = this.cardDefinition(card.cardId);
660
+ return this.definitionToRenderCard(definition, {
661
+ id: card.instanceId,
662
+ attack: card.attack,
663
+ life: card.maxHp,
664
+ currentHp: card.currentHp,
665
+ maxHp: card.maxHp,
666
+ statusText: card.canAttack ? this.t('christianityCharacterReady') : this.t('christianityCharacterExhausted'),
667
+ });
668
+ }
669
+ leaderRenderCard(player) {
670
+ if (player.leaderCardId) {
671
+ const definition = this.cardDefinition(player.leaderCardId);
672
+ return this.definitionToRenderCard(definition, {
673
+ id: `${player.seat}-leader`,
674
+ name: this.translatedCardText(definition).name,
675
+ type: 'leader',
676
+ typeLabel: this.t('christianityLeaderCard'),
677
+ life: player.leaderHp,
678
+ currentHp: player.leaderHp,
679
+ maxHp: player.leaderMaxHp,
680
+ statusText: this.t('christianityLeaderBody'),
681
+ });
682
+ }
683
+ return {
684
+ id: `${player.seat}-leader`,
685
+ name: player.leaderName,
686
+ type: 'leader',
687
+ typeLabel: this.t('christianityLeaderCard'),
688
+ life: player.leaderHp,
689
+ currentHp: player.leaderHp,
690
+ maxHp: player.leaderMaxHp,
691
+ abilityName: this.t('christianityLeaderCard'),
692
+ abilityText: this.t('christianityLeaderBody'),
693
+ verseText: this.t('christianityLeaderBody'),
694
+ edition: 'MVP',
695
+ collectorNumber: 'LIDER',
696
+ editionIcon: GENESIS_ICON_URL,
697
+ year: '2026',
698
+ author: 'MVP',
699
+ rarity: 'legendary',
700
+ frontTemplate: 'genesis-classic',
701
+ };
702
+ }
703
+ offeringRenderCard(offering) {
704
+ const definition = this.cardDefinition(offering.cardId);
705
+ const text = this.translatedCardText(definition);
706
+ return this.definitionToRenderCard(definition, {
707
+ id: offering.instanceId,
708
+ name: text.name,
709
+ type: 'offering',
710
+ typeLabel: this.t('christianityOfferingCard'),
711
+ offeringValue: offering.value,
712
+ life: offering.value,
713
+ currentHp: offering.value,
714
+ maxHp: offering.value,
715
+ abilityName: text.abilityName ?? offering.abilityName,
716
+ abilityText: text.abilityText ?? offering.abilityText ?? this.t('christianityOfferingNoAbility'),
717
+ statusText: offering.ready ? this.t('christianityOfferingReady') : this.t('christianityOfferingExhausted'),
718
+ });
719
+ }
720
+ previewRenderType(typeLabel) {
721
+ if (typeLabel === this.t('christianityLeaderCard'))
722
+ return 'leader';
723
+ if (typeLabel === this.t('christianityOfferingCard'))
724
+ return 'offering';
725
+ return 'character';
726
+ }
727
+ cardTypeIconUrl(card) {
728
+ return this.cardTypeIconUrlForType(card.type);
729
+ }
730
+ previewTypeIconUrl() {
731
+ const preview = this.selectedPreview();
732
+ if (preview?.eyebrow === this.t('christianityLeaderCard'))
733
+ return this.cardTypeIconUrlForType('leader');
734
+ if (preview?.eyebrow === this.t('christianityOfferingCard'))
735
+ return this.cardTypeIconUrlForType('offering');
736
+ return this.cardTypeIconUrlForType('character');
737
+ }
738
+ cardTypeIconUrlForType(type) {
739
+ const normalized = type.toLowerCase().normalize('NFD').replace(/[\u0300-\u036f]/g, '');
740
+ const icon = normalized === 'lider' ? 'leader' : normalized === 'personaje' ? 'character' : normalized === 'ofrenda' ? 'offering' : normalized;
741
+ return `assets/games/christianity/icons/${icon}.png`;
742
+ }
743
+ offeringPips(value) {
744
+ const count = Number(value);
745
+ if (!Number.isFinite(count) || count <= 0)
746
+ return [];
747
+ return Array.from({ length: Math.min(Math.floor(count), 5) });
748
+ }
749
+ battleSlots(seat) {
750
+ const cards = this.game().players[seat].battleZone;
751
+ const positionedCards = new Map();
752
+ cards.forEach((card, index) => {
753
+ const slot = Number.isInteger(card.slot) ? card.slot ?? index : index;
754
+ if (slot >= 0 && slot < 4 && !positionedCards.has(slot)) {
755
+ positionedCards.set(slot, card);
756
+ }
757
+ });
758
+ return Array.from({ length: 4 }, (_, index) => ({
759
+ trackId: positionedCards.get(index)?.instanceId ?? `${seat}-empty-${index}`,
760
+ card: positionedCards.get(index),
761
+ }));
762
+ }
763
+ battleSlotDropId(index) {
764
+ return `christianity-battle-slot-${index}`;
765
+ }
766
+ dropTargetIds() {
767
+ return ['christianity-offerings-drop', ...this.battleSlots('P1').map((_, index) => this.battleSlotDropId(index))];
768
+ }
769
+ hiddenHandCards(count) {
770
+ return Array.from({ length: count });
771
+ }
772
+ fanTransform(index, total, opponent) {
773
+ if (total <= 1)
774
+ return 'none';
775
+ const center = (total - 1) / 2;
776
+ const offset = index - center;
777
+ const rotate = offset * (opponent ? 6 : 5);
778
+ const lift = Math.abs(offset) * 0.25;
779
+ const hoverLift = opponent ? 0 : this.handWaveLift(index);
780
+ const scale = opponent ? 1 : this.handWaveScale(index);
781
+ const fanLift = opponent ? Math.abs(offset) * 0.22 : lift + hoverLift;
782
+ const fanSpread = opponent ? offset * 0.02 : 0;
783
+ return `translate(${fanSpread}rem, ${fanLift}rem) rotate(${rotate}deg) scale(${scale})`;
784
+ }
785
+ handCardZIndex(index) {
786
+ const hovered = this.hoveredHandIndex();
787
+ if (hovered === null)
788
+ return 2;
789
+ const distance = Math.abs(index - hovered);
790
+ return Math.max(2, 8 - distance);
791
+ }
792
+ setHoveredHandIndex(index) {
793
+ this.hoveredHandIndex.set(index);
794
+ }
795
+ clearHoveredHandIndex() {
796
+ this.hoveredHandIndex.set(null);
797
+ }
798
+ releaseHoveredHand(event) {
799
+ if (event.pointerType !== 'mouse') {
800
+ window.setTimeout(() => this.clearHoveredHandIndex(), 180);
801
+ }
802
+ }
803
+ handWaveLift(index) {
804
+ const hovered = this.hoveredHandIndex();
805
+ if (hovered === null)
806
+ return 0;
807
+ const distance = Math.abs(index - hovered);
808
+ if (distance === 0)
809
+ return -1.15;
810
+ if (distance === 1)
811
+ return -0.58;
812
+ if (distance === 2)
813
+ return -0.22;
814
+ return 0;
815
+ }
816
+ handWaveScale(index) {
817
+ const hovered = this.hoveredHandIndex();
818
+ if (hovered === null)
819
+ return 1;
820
+ const distance = Math.abs(index - hovered);
821
+ if (distance === 0)
822
+ return 1.06;
823
+ if (distance === 1)
824
+ return 1.03;
825
+ return 1;
826
+ }
827
+ readyOfferings(player) {
828
+ return player.offerings.reduce((total, offering) => total + (offering.ready ? offering.value : 0), 0);
829
+ }
830
+ totalOfferings(player) {
831
+ return player.offerings.reduce((total, offering) => total + offering.value, 0);
832
+ }
833
+ canPlay(card) {
834
+ if (this.game().status !== 'in_progress')
835
+ return false;
836
+ if (!this.isOwnTurn())
837
+ return false;
838
+ if (card.type === 'offering')
839
+ return !this.player().offeringPlayedThisTurn;
840
+ if (card.type === 'character')
841
+ return this.readyOfferings(this.player()) >= (card.cost ?? 0) && this.player().battleZone.length < 4;
842
+ return false;
843
+ }
844
+ canPlaySelected() {
845
+ const selected = this.selectedHandCard();
846
+ return !!selected && this.canPlay(this.cardDefinition(selected));
847
+ }
848
+ selectedActionLabel() {
849
+ const selected = this.selectedCardDefinition();
850
+ if (!selected)
851
+ return this.t('christianityPlayCard');
852
+ return selected.type === 'offering' ? this.t('christianityPlayOffering') : this.t('christianityPlayCard');
853
+ }
854
+ selectedActionDisabled() {
855
+ const selected = this.selectedCardDefinition();
856
+ if (!selected || !this.canPlay(selected))
857
+ return true;
858
+ return selected.type === 'character';
859
+ }
860
+ canPlaceSelectedCharacter() {
861
+ const selected = this.selectedCardDefinition();
862
+ return !!selected && selected.type === 'character' && this.canPlay(selected);
863
+ }
864
+ canPlaceSelectedOffering() {
865
+ const selected = this.selectedCardDefinition();
866
+ return !!selected && selected.type === 'offering' && this.canPlay(selected);
867
+ }
868
+ isDraggingCharacter() {
869
+ const cardId = this.draggingCardId();
870
+ if (!cardId)
871
+ return false;
872
+ const card = this.cardDefinition(cardId);
873
+ return card.type === 'character' && this.canPlay(card);
874
+ }
875
+ isDraggingOffering() {
876
+ const cardId = this.draggingCardId();
877
+ if (!cardId)
878
+ return false;
879
+ const card = this.cardDefinition(cardId);
880
+ return card.type === 'offering' && this.canPlay(card);
881
+ }
882
+ startDraggingCard(cardId) {
883
+ this.selectedAttacker.set(null);
884
+ this.selectedHandCard.set(cardId);
885
+ this.draggingCardId.set(cardId);
886
+ this.closePreview();
887
+ }
888
+ endDraggingCard() {
889
+ this.draggingCardId.set(null);
890
+ }
891
+ dropOnBattleSlot(event, slotIndex) {
892
+ const card = this.cardDefinition(event.item.data);
893
+ if (card.type !== 'character')
894
+ return;
895
+ this.playCardFromHand(event.item.data, slotIndex);
896
+ }
897
+ dropOnOfferings(event) {
898
+ const card = this.cardDefinition(event.item.data);
899
+ if (card.type !== 'offering')
900
+ return;
901
+ this.playCardFromHand(event.item.data);
902
+ }
903
+ selectHandCard(cardId) {
904
+ const wasSelected = this.selectedHandCard() === cardId;
905
+ this.selectedAttacker.set(null);
906
+ this.selectedHandCard.set(wasSelected ? null : cardId);
907
+ this.closePreview();
908
+ }
909
+ playSelectedCard(slotIndex) {
910
+ const cardId = this.selectedHandCard();
911
+ if (!cardId)
912
+ return;
913
+ this.playCardFromHand(cardId, slotIndex);
914
+ }
915
+ playCardFromHand(cardId, slotIndex) {
916
+ const card = this.cardDefinition(cardId);
917
+ if (!this.canPlay(card))
918
+ return;
919
+ let playedOfferingValue = 0;
920
+ let spentOfferings = 0;
921
+ this.game.update(game => {
922
+ const next = structuredClone(game);
923
+ const player = next.players.P1;
924
+ const handIndex = player.hand?.indexOf(cardId) ?? -1;
925
+ if (handIndex < 0 || !player.hand)
926
+ return game;
927
+ player.hand.splice(handIndex, 1);
928
+ if (card.type === 'offering') {
929
+ player.offerings.push({
930
+ instanceId: `p1_offering_${next.revision + 1}`,
931
+ cardId: card.id,
932
+ name: card.name,
933
+ owner: 'P1',
934
+ ready: true,
935
+ value: card.offeringValue ?? card.life ?? 1,
936
+ abilityName: card.abilityName,
937
+ abilityText: card.abilityText,
938
+ abilityCost: card.abilityCost,
939
+ });
940
+ player.offeringPlayedThisTurn = true;
941
+ playedOfferingValue = card.offeringValue ?? card.life ?? 1;
942
+ }
943
+ else {
944
+ spentOfferings = card.cost ?? 0;
945
+ this.spendOfferings(player, spentOfferings);
946
+ const occupiedSlots = new Set(player.battleZone.map((character, index) => Number.isInteger(character.slot) ? character.slot ?? index : index));
947
+ const targetSlot = slotIndex ?? [0, 1, 2, 3].find(index => !occupiedSlots.has(index));
948
+ if (targetSlot === undefined || occupiedSlots.has(targetSlot))
949
+ return game;
950
+ player.battleZone.push({
951
+ instanceId: `p1_${next.revision + 1}_${player.battleZone.length}`,
952
+ cardId: card.id,
953
+ name: card.name,
954
+ owner: 'P1',
955
+ controller: 'P1',
956
+ slot: targetSlot,
957
+ attack: card.attack ?? 0,
958
+ currentHp: card.life ?? 1,
959
+ maxHp: card.life ?? 1,
960
+ canAttack: false,
961
+ });
962
+ player.battleZone.sort((left, right) => (left.slot ?? 0) - (right.slot ?? 0));
963
+ }
964
+ next.revision++;
965
+ next.log = [
966
+ card.type === 'offering' ? `${card.name} queda lista como ofrenda.` : `${card.name} entra en batalla.`,
967
+ ...next.log,
968
+ ].slice(0, 4);
969
+ return next;
970
+ });
971
+ this.selectedHandCard.set(null);
972
+ this.draggingCardId.set(null);
973
+ this.closePreview();
974
+ if (playedOfferingValue > 0) {
975
+ this.pushImpactEvent({ text: `+${playedOfferingValue}`, tone: 'resource', seat: 'P1', target: 'offerings' });
976
+ }
977
+ else if (spentOfferings > 0) {
978
+ this.pushImpactEvent({ text: `-${spentOfferings}`, tone: 'resource', seat: 'P1', target: 'offerings' });
979
+ }
980
+ }
981
+ handleOfferingPile(seat) {
982
+ this.openOfferings(seat);
983
+ }
984
+ selectAttacker(card) {
985
+ this.selectedHandCard.set(null);
986
+ if (this.game().status !== 'in_progress' || !this.isOwnTurn() || !card.canAttack) {
987
+ this.inspectCharacter(card);
988
+ return;
989
+ }
990
+ this.closePreview();
991
+ this.selectedAttacker.set(this.selectedAttacker()?.instanceId === card.instanceId ? null : card);
992
+ }
993
+ handleOpponentCharacter(card) {
994
+ if (this.selectedAttacker()) {
995
+ this.attackCharacter(card);
996
+ return;
997
+ }
998
+ this.inspectCharacter(card);
999
+ }
1000
+ handleOpponentLeader() {
1001
+ if (this.selectedAttacker() && !this.hasOpponentGuards()) {
1002
+ this.attackLeader();
1003
+ return;
1004
+ }
1005
+ this.inspectLeader('P2');
1006
+ }
1007
+ attackLeader() {
1008
+ const attacker = this.selectedAttacker();
1009
+ if (!attacker)
1010
+ return;
1011
+ if (this.game().status !== 'in_progress')
1012
+ return;
1013
+ if (this.hasOpponentGuards()) {
1014
+ this.selectedPreview.set({
1015
+ title: this.opponent().leaderName,
1016
+ eyebrow: this.t('christianityLeaderCard'),
1017
+ meta: `${this.opponent().leaderHp}/${this.opponent().leaderMaxHp}`,
1018
+ body: this.t('christianityLeaderProtected'),
1019
+ });
1020
+ return;
1021
+ }
1022
+ let damage = 0;
1023
+ this.game.update(game => {
1024
+ const next = structuredClone(game);
1025
+ const liveAttacker = next.players.P1.battleZone.find(card => card.instanceId === attacker.instanceId);
1026
+ if (!liveAttacker || !liveAttacker.canAttack)
1027
+ return game;
1028
+ damage = liveAttacker.attack;
1029
+ next.players.P2.leaderHp = Math.max(0, next.players.P2.leaderHp - liveAttacker.attack);
1030
+ liveAttacker.canAttack = false;
1031
+ const log = [`${liveAttacker.name} ${this.t('christianityAttacksOpponentLeader')}`];
1032
+ this.evaluateVictory(next, log);
1033
+ next.revision++;
1034
+ next.log = [...log, ...next.log].slice(0, 4);
1035
+ return next;
1036
+ });
1037
+ this.selectedAttacker.set(null);
1038
+ if (damage > 0) {
1039
+ this.pushImpactEvent({ text: `-${damage}`, tone: 'damage', seat: 'P2', target: 'leader' });
1040
+ }
1041
+ }
1042
+ attackCharacter(target) {
1043
+ const attacker = this.selectedAttacker();
1044
+ if (!attacker)
1045
+ return;
1046
+ if (this.game().status !== 'in_progress')
1047
+ return;
1048
+ let attackerDamage = 0;
1049
+ let targetDamage = 0;
1050
+ this.game.update(game => {
1051
+ const next = structuredClone(game);
1052
+ const liveAttacker = next.players.P1.battleZone.find(card => card.instanceId === attacker.instanceId);
1053
+ const liveTarget = next.players.P2.battleZone.find(card => card.instanceId === target.instanceId);
1054
+ if (!liveAttacker || !liveTarget || !liveAttacker.canAttack)
1055
+ return game;
1056
+ targetDamage = liveAttacker.attack;
1057
+ attackerDamage = liveTarget.attack;
1058
+ liveTarget.currentHp -= liveAttacker.attack;
1059
+ liveAttacker.currentHp -= liveTarget.attack;
1060
+ liveAttacker.canAttack = false;
1061
+ this.cleanupDestroyed(next.players.P1, next);
1062
+ this.cleanupDestroyed(next.players.P2, next);
1063
+ const log = [`${liveAttacker.name} ${this.t('christianityCombatsAgainst')} ${liveTarget.name}.`];
1064
+ this.evaluateVictory(next, log);
1065
+ next.revision++;
1066
+ next.log = [...log, ...next.log].slice(0, 4);
1067
+ return next;
1068
+ });
1069
+ this.selectedAttacker.set(null);
1070
+ const impacts = [];
1071
+ if (targetDamage > 0)
1072
+ impacts.push({ text: `-${targetDamage}`, tone: 'damage', seat: 'P2', target: 'battle' });
1073
+ if (attackerDamage > 0)
1074
+ impacts.push({ text: `-${attackerDamage}`, tone: 'damage', seat: 'P1', target: 'battle' });
1075
+ this.pushImpactEvents(impacts);
1076
+ }
1077
+ endTurn() {
1078
+ if (this.game().status !== 'in_progress')
1079
+ return;
1080
+ this.selectedHandCard.set(null);
1081
+ this.selectedAttacker.set(null);
1082
+ this.selectedPreview.set(null);
1083
+ this.selectedInfo.set(null);
1084
+ this.game.update(game => {
1085
+ const next = structuredClone(game);
1086
+ const log = [];
1087
+ this.advanceTurn(next, log);
1088
+ next.revision++;
1089
+ next.log = [...log, ...next.log].slice(0, 4);
1090
+ return next;
1091
+ });
1092
+ this.scheduleBotTurnIfNeeded();
1093
+ }
1094
+ resetMock() {
1095
+ this.clearBotTurn();
1096
+ this.game.set(this.catalogLoaded() ? this.createTutorialGame(this.allCatalogCards()) : structuredClone(STARTING_GAME));
1097
+ this.selectedHandCard.set(null);
1098
+ this.selectedAttacker.set(null);
1099
+ this.selectedPreview.set(null);
1100
+ this.selectedInfo.set(null);
1101
+ this.showHistory.set(false);
1102
+ this.showGallery.set(false);
1103
+ this.offeringsSeat.set(null);
1104
+ }
1105
+ startTutorial() {
1106
+ this.resetMock();
1107
+ this.screen.set('table');
1108
+ }
1109
+ closePreview() {
1110
+ this.selectedPreview.set(null);
1111
+ this.resetPreviewTilt();
1112
+ }
1113
+ closeInfo() {
1114
+ this.selectedInfo.set(null);
1115
+ }
1116
+ openOfferings(seat) {
1117
+ this.selectedPreview.set(null);
1118
+ this.selectedInfo.set(null);
1119
+ this.showHistory.set(false);
1120
+ this.showGallery.set(false);
1121
+ this.offeringsSeat.set(seat);
1122
+ }
1123
+ openHistory() {
1124
+ this.selectedPreview.set(null);
1125
+ this.selectedInfo.set(null);
1126
+ this.offeringsSeat.set(null);
1127
+ this.showGallery.set(false);
1128
+ this.showHistory.set(true);
1129
+ }
1130
+ closeHistory() {
1131
+ this.showHistory.set(false);
1132
+ if (this.selectedPreview()?.source === 'history') {
1133
+ this.closePreview();
1134
+ }
1135
+ }
1136
+ closeOfferings() {
1137
+ this.offeringsSeat.set(null);
1138
+ }
1139
+ openGallery() {
1140
+ this.selectedPreview.set(null);
1141
+ this.selectedInfo.set(null);
1142
+ this.offeringsSeat.set(null);
1143
+ this.showHistory.set(false);
1144
+ this.showGallery.set(true);
1145
+ }
1146
+ closeGallery() {
1147
+ this.showGallery.set(false);
1148
+ }
1149
+ navigateHistoryPreview(direction) {
1150
+ const cardId = this.selectedPreview()?.cardId;
1151
+ const history = this.game().historyZone;
1152
+ if (!cardId || history.length < 2)
1153
+ return;
1154
+ const currentIndex = history.findIndex(id => id === cardId);
1155
+ if (currentIndex < 0)
1156
+ return;
1157
+ const nextIndex = (currentIndex + direction + history.length) % history.length;
1158
+ this.inspectHistoryCard(history[nextIndex]);
1159
+ }
1160
+ setGallerySearch(event) {
1161
+ this.gallerySearch.set(event.target.value);
1162
+ }
1163
+ setGalleryType(event) {
1164
+ this.galleryType.set(event.target.value);
1165
+ }
1166
+ tiltPreview(event) {
1167
+ const bounds = event.currentTarget.getBoundingClientRect();
1168
+ const x = (event.clientX - bounds.left) / bounds.width - 0.5;
1169
+ const y = (event.clientY - bounds.top) / bounds.height - 0.5;
1170
+ this.previewTilt.set({
1171
+ rotateX: 5 - y * 18,
1172
+ rotateY: -5 + x * 18,
1173
+ shiftX: x * 10,
1174
+ shiftY: y * 10,
1175
+ });
1176
+ }
1177
+ resetPreviewTilt() {
1178
+ this.previewTilt.set({ rotateX: 5, rotateY: -5, shiftX: 0, shiftY: 0 });
1179
+ }
1180
+ pushImpactEvent(event) {
1181
+ const id = ++this.impactEventSequence;
1182
+ this.impactEvents.update(events => [...events, { ...event, id }].slice(-6));
1183
+ const timer = window.setTimeout(() => {
1184
+ this.impactTimers.delete(timer);
1185
+ this.impactEvents.update(events => events.filter(impact => impact.id !== id));
1186
+ }, 1120);
1187
+ this.impactTimers.add(timer);
1188
+ }
1189
+ pushImpactEvents(events) {
1190
+ for (const event of events) {
1191
+ this.pushImpactEvent(event);
1192
+ }
1193
+ }
1194
+ clearBotTurn() {
1195
+ if (this.botTurnTimer === undefined)
1196
+ return;
1197
+ window.clearTimeout(this.botTurnTimer);
1198
+ this.botTurnTimer = undefined;
1199
+ }
1200
+ scheduleBotTurnIfNeeded() {
1201
+ this.clearBotTurn();
1202
+ const game = this.game();
1203
+ if (this.screen() !== 'table' || game.status !== 'in_progress' || game.turnOwner !== 'P2')
1204
+ return;
1205
+ this.botTurnTimer = window.setTimeout(() => {
1206
+ this.botTurnTimer = undefined;
1207
+ this.runTutorialBotTurn();
1208
+ }, 520);
1209
+ }
1210
+ runTutorialBotTurn() {
1211
+ this.selectedHandCard.set(null);
1212
+ this.selectedAttacker.set(null);
1213
+ this.selectedPreview.set(null);
1214
+ this.selectedInfo.set(null);
1215
+ const impacts = [];
1216
+ this.game.update(game => {
1217
+ if (game.status !== 'in_progress' || game.turnOwner !== 'P2')
1218
+ return game;
1219
+ const next = structuredClone(game);
1220
+ const log = [];
1221
+ this.resolveBotAttack(next, log, impacts);
1222
+ this.evaluateVictory(next, log);
1223
+ if (next.status === 'in_progress') {
1224
+ this.advanceTurn(next, log);
1225
+ }
1226
+ next.revision++;
1227
+ next.log = [...log, ...next.log].slice(0, 4);
1228
+ return next;
1229
+ });
1230
+ this.pushImpactEvents(impacts);
1231
+ }
1232
+ resolveBotAttack(game, log, impacts) {
1233
+ const bot = game.players.P2;
1234
+ const player = game.players.P1;
1235
+ const attacker = bot.battleZone
1236
+ .filter(card => card.canAttack && card.attack > 0)
1237
+ .sort((left, right) => (left.slot ?? 0) - (right.slot ?? 0))[0];
1238
+ if (!attacker) {
1239
+ log.push(this.t('christianityBotNoAttackers'));
1240
+ return;
1241
+ }
1242
+ const target = player.battleZone
1243
+ .filter(card => card.currentHp > 0)
1244
+ .sort((left, right) => left.currentHp - right.currentHp || (left.slot ?? 0) - (right.slot ?? 0))[0];
1245
+ if (target) {
1246
+ impacts.push({ text: `-${attacker.attack}`, tone: 'damage', seat: 'P1', target: 'battle' });
1247
+ impacts.push({ text: `-${target.attack}`, tone: 'damage', seat: 'P2', target: 'battle' });
1248
+ target.currentHp -= attacker.attack;
1249
+ attacker.currentHp -= target.attack;
1250
+ attacker.canAttack = false;
1251
+ log.push(`${attacker.name} ${this.t('christianityCombatsAgainst')} ${target.name}.`);
1252
+ this.cleanupDestroyed(player, game);
1253
+ this.cleanupDestroyed(bot, game);
1254
+ return;
1255
+ }
1256
+ impacts.push({ text: `-${attacker.attack}`, tone: 'damage', seat: 'P1', target: 'leader' });
1257
+ player.leaderHp = Math.max(0, player.leaderHp - attacker.attack);
1258
+ attacker.canAttack = false;
1259
+ log.push(`${attacker.name} ${this.t('christianityAttacksYourLeader')}`);
1260
+ }
1261
+ advanceTurn(game, log) {
1262
+ game.turnOwner = game.turnOwner === 'P1' ? 'P2' : 'P1';
1263
+ game.turnCount++;
1264
+ const current = game.players[game.turnOwner];
1265
+ current.offeringPlayedThisTurn = false;
1266
+ current.offerings = current.offerings.map(offering => ({ ...offering, ready: true }));
1267
+ current.battleZone = current.battleZone.map(card => ({ ...card, canAttack: true }));
1268
+ const drawnCard = game.sharedDeck.shift();
1269
+ if (drawnCard) {
1270
+ if (current.hand) {
1271
+ current.hand.push(drawnCard);
1272
+ }
1273
+ else {
1274
+ current.handCount = (current.handCount ?? 0) + 1;
1275
+ }
1276
+ }
1277
+ log.push(drawnCard ? `${current.displayName} ${this.t('christianityDrawsCard')}` : this.t('christianityDeckIsEmpty'));
1278
+ log.push(`${this.t('christianityTurnOf')} ${current.displayName}.`);
1279
+ }
1280
+ evaluateVictory(game, log) {
1281
+ if (game.players.P1.leaderHp > 0 && game.players.P2.leaderHp > 0)
1282
+ return;
1283
+ game.status = 'finished';
1284
+ const winner = game.players.P1.leaderHp <= 0 ? 'P2' : 'P1';
1285
+ game.matchScore[winner] += 1;
1286
+ log.push(winner === 'P1' ? this.t('christianityYouWin') : this.t('christianityOpponentWins'));
1287
+ }
1288
+ cleanupDestroyed(player, game) {
1289
+ const destroyed = player.battleZone.filter(card => card.currentHp <= 0);
1290
+ if (!destroyed.length)
1291
+ return;
1292
+ game.historyZone.push(...destroyed.map(card => card.cardId));
1293
+ player.battleZone = player.battleZone.filter(card => card.currentHp > 0);
1294
+ }
1295
+ inspectLeader(seat) {
1296
+ this.selectedInfo.set(null);
1297
+ const player = this.game().players[seat];
1298
+ const leader = player.leaderCardId ? this.cardDefinition(player.leaderCardId) : undefined;
1299
+ this.selectedPreview.set({
1300
+ title: leader ? this.translatedCardText(leader).name : player.leaderName,
1301
+ eyebrow: this.t('christianityLeaderCard'),
1302
+ meta: `${player.leaderHp}/${player.leaderMaxHp}`,
1303
+ body: seat === 'P2' && this.hasOpponentGuards() ? this.t('christianityLeaderProtected') : this.t('christianityLeaderBody'),
1304
+ cardId: player.leaderCardId,
1305
+ source: 'board',
1306
+ });
1307
+ }
1308
+ inspectOffering(offering) {
1309
+ this.selectedInfo.set(null);
1310
+ const definition = this.cardDefinition(offering.cardId);
1311
+ const text = this.translatedCardText(definition);
1312
+ this.selectedPreview.set({
1313
+ title: text.name,
1314
+ eyebrow: this.t('christianityOfferingCard'),
1315
+ meta: offering.ready ? this.t('christianityOfferingReady') : this.t('christianityOfferingExhausted'),
1316
+ body: text.abilityText ?? offering.abilityText ?? this.t('christianityOfferingBody'),
1317
+ cardId: offering.cardId,
1318
+ source: 'pile',
1319
+ });
1320
+ }
1321
+ offeringAbilityText(offering) {
1322
+ const text = this.translatedCardText(this.cardDefinition(offering.cardId));
1323
+ return text.abilityText ?? offering.abilityText ?? this.t('christianityOfferingNoAbility');
1324
+ }
1325
+ canUseOfferingAbility(offering, seat) {
1326
+ if (seat !== 'P1' || !this.isOwnTurn())
1327
+ return false;
1328
+ if (!offering.ready || !offering.abilityName)
1329
+ return false;
1330
+ return this.readyOfferings(this.game().players[seat]) >= (offering.abilityCost ?? 0);
1331
+ }
1332
+ useOfferingAbility(offering, seat) {
1333
+ if (!this.canUseOfferingAbility(offering, seat))
1334
+ return;
1335
+ let didResolve = false;
1336
+ this.game.update(game => {
1337
+ const next = structuredClone(game);
1338
+ const player = next.players[seat];
1339
+ const liveOffering = player.offerings.find(card => card.instanceId === offering.instanceId);
1340
+ if (!liveOffering || !liveOffering.ready)
1341
+ return game;
1342
+ const offeringId = liveOffering.instanceId;
1343
+ this.spendOfferings(player, liveOffering.abilityCost ?? 0);
1344
+ player.offerings = player.offerings.map(card => (card.instanceId === offeringId ? { ...card, ready: false } : card));
1345
+ player.leaderHp = Math.max(0, player.leaderHp - 1);
1346
+ didResolve = true;
1347
+ next.revision++;
1348
+ next.log = [`${liveOffering.name}: ${liveOffering.abilityName}.`, ...next.log].slice(0, 4);
1349
+ return next;
1350
+ });
1351
+ if (didResolve) {
1352
+ this.pushImpactEvent({ text: '-1', tone: 'damage', seat, target: 'leader' });
1353
+ }
1354
+ }
1355
+ inspectDeck() {
1356
+ const remainingCards = this.game().sharedDeck.length;
1357
+ this.selectedPreview.set(null);
1358
+ this.selectedInfo.set({
1359
+ title: this.t('christianityDeck'),
1360
+ eyebrow: this.t('christianitySharedZone'),
1361
+ meta: `${remainingCards} ${remainingCards === 1 ? this.t('christianityCardRemaining') : this.t('christianityCardsRemaining')}`,
1362
+ body: this.t('christianityDeckBody'),
1363
+ facts: [
1364
+ this.t('christianityDeckRuleShared'),
1365
+ this.t('christianityDeckRuleDraw'),
1366
+ this.t('christianityDeckRuleEmpty'),
1367
+ ],
1368
+ });
1369
+ }
1370
+ inspectHowToPlay() {
1371
+ this.selectedPreview.set(null);
1372
+ this.selectedInfo.set({
1373
+ title: this.t('christianityHowToPlay'),
1374
+ eyebrow: this.t('christianityGenesisEdition'),
1375
+ meta: this.t('christianityTutorialMode'),
1376
+ body: this.t('christianityHowToPlayIntro'),
1377
+ facts: [
1378
+ this.t('christianityHowToPlayGoal'),
1379
+ this.t('christianityHowToPlayTurn'),
1380
+ this.t('christianityHowToPlayOfferings'),
1381
+ this.t('christianityHowToPlayBattle'),
1382
+ ],
1383
+ });
1384
+ }
1385
+ inspectHandCard(cardId, fromHand = false) {
1386
+ this.selectedInfo.set(null);
1387
+ const card = this.cardDefinition(cardId);
1388
+ const text = this.translatedCardText(card);
1389
+ if (fromHand) {
1390
+ this.selectedAttacker.set(null);
1391
+ this.selectedHandCard.set(cardId);
1392
+ }
1393
+ this.selectedPreview.set({
1394
+ title: text.name,
1395
+ eyebrow: this.cardTypeLabel(card),
1396
+ meta: this.cardPreviewMeta(card),
1397
+ body: this.defaultCardBody(card.type),
1398
+ cardId,
1399
+ source: fromHand ? 'hand' : 'pile',
1400
+ });
1401
+ }
1402
+ inspectGalleryCard(cardId) {
1403
+ this.inspectHandCard(cardId);
1404
+ }
1405
+ inspectHistoryCard(cardId) {
1406
+ this.inspectHandCard(cardId);
1407
+ this.selectedPreview.update(preview => preview ? { ...preview, source: 'history' } : preview);
1408
+ }
1409
+ inspectCharacter(card) {
1410
+ this.selectedInfo.set(null);
1411
+ const definition = this.cardDefinition(card.cardId);
1412
+ this.selectedPreview.set({
1413
+ title: this.translatedCardText(definition).name,
1414
+ eyebrow: this.t('christianityCharacterCard'),
1415
+ meta: `${card.attack}/${card.currentHp}`,
1416
+ body: card.canAttack ? this.t('christianityCharacterReady') : this.t('christianityCharacterExhausted'),
1417
+ cardId: card.cardId,
1418
+ source: 'board',
1419
+ });
1420
+ }
1421
+ cardPreviewMeta(card) {
1422
+ if (card.type === 'offering')
1423
+ return `${card.offeringValue ?? card.life ?? 1}`;
1424
+ if (card.type === 'leader')
1425
+ return `${card.leaderLife ?? card.life ?? 0}`;
1426
+ if (card.type === 'character')
1427
+ return `${this.t('christianityCost')} ${card.cost ?? 0} · ${card.attack ?? 0}/${card.life ?? 0}`;
1428
+ if (card.cost !== undefined)
1429
+ return `${this.t('christianityCost')} ${card.cost}`;
1430
+ return card.collectorNumber ?? card.id;
1431
+ }
1432
+ spendOfferings(player, cost) {
1433
+ let remaining = cost;
1434
+ player.offerings = player.offerings.map(offering => {
1435
+ if (remaining <= 0 || !offering.ready)
1436
+ return offering;
1437
+ remaining -= offering.value;
1438
+ return { ...offering, ready: false };
1439
+ });
1440
+ }
1441
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ChristianityGameComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1442
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: ChristianityGameComponent, isStandalone: true, selector: "val-christianity-game", ngImport: i0, template: `
1443
+ <main class="christianity-shell" [class.has-modal-open]="hasModalOverlay()">
1444
+ <section class="christianity-header">
1445
+ <div>
1446
+ <p>{{ t('christianityEyebrow') }}</p>
1447
+ <h1>{{ t('christianityTitle') }}</h1>
1448
+ </div>
1449
+ <div class="christianity-header-actions">
1450
+ @if (screen() !== 'splash') {
1451
+ <button type="button" class="christianity-gallery-open" valLightRipple (click)="openGallery()">
1452
+ {{ t('christianityGallery') }}
1453
+ </button>
1454
+ }
1455
+ @if (screen() === 'table') {
1456
+ <div class="christianity-turn" [class.is-own-turn]="isOwnTurn()">
1457
+ <span>{{ t('christianityTurn') }}</span>
1458
+ <strong>{{ currentPlayer().displayName }}</strong>
1459
+ </div>
1460
+ }
1461
+ </div>
1462
+ </section>
1463
+
1464
+ @if (screen() === 'splash') {
1465
+ <section class="christianity-splash" role="status" aria-live="polite">
1466
+ <div class="christianity-splash__mark">
1467
+ <span aria-hidden="true"></span>
1468
+ <span aria-hidden="true"></span>
1469
+ <span aria-hidden="true"></span>
1470
+ </div>
1471
+ <div>
1472
+ <span>{{ t('christianitySplashEyebrow') }}</span>
1473
+ <h2>{{ t('christianitySplashTitle') }}</h2>
1474
+ <p>{{ splashStatusText() }}</p>
1475
+ </div>
1476
+ </section>
1477
+ } @else if (screen() === 'home') {
1478
+ <section class="christianity-start">
1479
+ <div class="christianity-start__hero">
1480
+ <div class="christianity-start__copy">
1481
+ <span>{{ t('christianityGenesisEdition') }}</span>
1482
+ <h2>{{ t('christianityStartTitle') }}</h2>
1483
+ <p>{{ t('christianityStartBody') }}</p>
1484
+ </div>
1485
+ <div class="christianity-start__fan" aria-hidden="true">
1486
+ @for (card of startFeaturedCards(); track card.id) {
1487
+ <val-christianity-card
1488
+ [card]="definitionToRenderCard(card)"
1489
+ variant="baby"
1490
+ [style.transform]="startFeaturedCardTransform($index)"
1491
+ ></val-christianity-card>
1492
+ }
1493
+ </div>
1494
+ </div>
1495
+ <div class="christianity-start__cards">
1496
+ <article>
1497
+ <strong>{{ t('christianityTutorialMode') }}</strong>
1498
+ <p>{{ t('christianityTutorialModeBody') }}</p>
1499
+ <button type="button" class="christianity-primary-action" valLightRipple (click)="startTutorial()">
1500
+ {{ t('christianityStartTutorial') }}
1501
+ </button>
1502
+ </article>
1503
+ <article>
1504
+ <strong>{{ t('christianityGallery') }}</strong>
1505
+ <p>{{ t('christianityGalleryModeBody') }}</p>
1506
+ <button type="button" class="christianity-secondary-action" valLightRipple (click)="openGallery()">
1507
+ {{ t('christianityOpenGallery') }}
1508
+ </button>
1509
+ </article>
1510
+ <article>
1511
+ <strong>{{ t('christianityHowToPlay') }}</strong>
1512
+ <p>{{ t('christianityHowToPlayBody') }}</p>
1513
+ <button type="button" class="christianity-secondary-action" valLightRipple (click)="inspectHowToPlay()">
1514
+ {{ t('learnMore') }}
1515
+ </button>
1516
+ </article>
1517
+ </div>
1518
+ <div class="christianity-start__status" [attr.aria-label]="t('christianityEditionStatus')">
1519
+ <span>{{ galleryEditionLabel() }}</span>
1520
+ <span>{{ t('christianityTutorialActive') }}</span>
1521
+ <span>{{ catalogStatusLabel() }}</span>
1522
+ </div>
1523
+ <section class="christianity-start__modes" [attr.aria-label]="t('christianityFutureModes')">
1524
+ @for (mode of futureModes(); track mode.title) {
1525
+ <article>
1526
+ <strong>{{ mode.title }}</strong>
1527
+ <p>{{ mode.body }}</p>
1528
+ <span>{{ t('soonTitle') }}</span>
1529
+ </article>
1530
+ }
1531
+ </section>
1532
+ </section>
1533
+ } @else {
1534
+ <section class="christianity-match-strip" [attr.aria-label]="t('christianityMatchScore')">
1535
+ <article class="christianity-match-player">
1536
+ <span class="christianity-avatar" [style.background]="player().avatarColor">{{ player().avatar }}</span>
1537
+ <div>
1538
+ <strong>{{ player().displayName }}</strong>
1539
+ <small>{{ playerLeaderDisplayName(player()) }} · {{ player().leaderHp }}/{{ player().leaderMaxHp }}</small>
1540
+ </div>
1541
+ </article>
1542
+ <div class="christianity-scoreboard">
1543
+ <span>{{ t('christianityMatch') }}</span>
1544
+ <strong>{{ game().matchScore.P1 }}-{{ game().matchScore.P2 }}</strong>
1545
+ </div>
1546
+ <article class="christianity-match-player christianity-match-player--opponent">
1547
+ <span class="christianity-avatar" [style.background]="opponent().avatarColor">{{ opponent().avatar }}</span>
1548
+ <div>
1549
+ <strong>{{ opponent().displayName }}</strong>
1550
+ <small>{{ playerLeaderDisplayName(opponent()) }} · {{ opponent().leaderHp }}/{{ opponent().leaderMaxHp }}</small>
1551
+ </div>
1552
+ </article>
1553
+ </section>
1554
+
1555
+ <section class="christianity-hand-shelf christianity-hand-shelf--opponent">
1556
+ <div class="christianity-hand-meter christianity-hand-meter--opponent">
1557
+ <span>{{ t('christianityHand') }}</span>
1558
+ <strong>{{ opponentHandCount() }}</strong>
1559
+ </div>
1560
+ <section class="christianity-hand-fan christianity-hand-fan--opponent" [attr.aria-label]="t('christianityOpponentHand')">
1561
+ @for (_ of hiddenHandCards(opponentHandCount()); track $index) {
1562
+ <button
1563
+ type="button"
1564
+ class="christianity-hidden-card-button christianity-render-card-button"
1565
+ valLightRipple
1566
+ [style.transform]="fanTransform($index, opponentHandCount(), true)"
1567
+ [attr.aria-label]="t('christianityHiddenCard')"
1568
+ >
1569
+ <val-christianity-card [card]="hiddenCardRenderCard()" variant="back"></val-christianity-card>
1570
+ </button>
1571
+ }
1572
+ </section>
1573
+ </section>
1574
+
1575
+ <section class="christianity-table" [attr.aria-label]="t('christianityTable')">
1576
+ <div class="christianity-impact-layer" aria-hidden="true">
1577
+ @for (impact of impactEvents(); track impact.id) {
1578
+ <span
1579
+ class="christianity-impact-pop"
1580
+ [class.is-damage]="impact.tone === 'damage'"
1581
+ [class.is-heal]="impact.tone === 'heal'"
1582
+ [class.is-resource]="impact.tone === 'resource'"
1583
+ [class.is-player-leader]="impact.seat === 'P1' && impact.target === 'leader'"
1584
+ [class.is-opponent-leader]="impact.seat === 'P2' && impact.target === 'leader'"
1585
+ [class.is-player-battle]="impact.seat === 'P1' && impact.target === 'battle'"
1586
+ [class.is-opponent-battle]="impact.seat === 'P2' && impact.target === 'battle'"
1587
+ [class.is-player-offerings]="impact.seat === 'P1' && impact.target === 'offerings'"
1588
+ [class.is-opponent-offerings]="impact.seat === 'P2' && impact.target === 'offerings'"
1589
+ >
1590
+ {{ impact.text }}
1591
+ </span>
1592
+ }
1593
+ </div>
1594
+ <section class="christianity-player-side christianity-player-side--opponent">
1595
+ <section class="christianity-player-rack christianity-player-rack--opponent">
1596
+ <div class="christianity-offerings-zone">
1597
+ <button type="button" class="christianity-offering-pile" valLightRipple (click)="openOfferings('P2')">
1598
+ <i aria-hidden="true"></i>
1599
+ <i aria-hidden="true"></i>
1600
+ <i aria-hidden="true"></i>
1601
+ <span>{{ t('christianityOfferings') }}</span>
1602
+ <strong>{{ readyOfferings(opponent()) }}/{{ totalOfferings(opponent()) }}</strong>
1603
+ </button>
1604
+ </div>
1605
+ <button type="button" class="christianity-leader-card christianity-render-card-button" valLightRipple [class.is-target]="selectedAttacker() && !hasOpponentGuards()" (click)="handleOpponentLeader()">
1606
+ <val-christianity-card [card]="leaderRenderCard(opponent())" variant="baby"></val-christianity-card>
1607
+ </button>
1608
+ <span class="christianity-rack-spacer" aria-hidden="true"></span>
1609
+ </section>
1610
+
1611
+ <section class="christianity-battle-zone christianity-battle-zone--opponent" [attr.aria-label]="t('christianityOpponentBattle')">
1612
+ @for (slot of battleSlots('P2'); track slot.trackId) {
1613
+ @if (slot.card) {
1614
+ <button
1615
+ type="button"
1616
+ class="christianity-card-preview-card christianity-card-preview-card--battle christianity-render-card-button"
1617
+ valLightRipple
1618
+ [class.is-target]="selectedAttacker()"
1619
+ (click)="handleOpponentCharacter(slot.card)"
1620
+ >
1621
+ <val-christianity-card [card]="characterRenderCard(slot.card)" variant="baby"></val-christianity-card>
1622
+ </button>
1623
+ } @else {
1624
+ <span class="christianity-slot"></span>
1625
+ }
1626
+ }
1627
+ </section>
1628
+ </section>
1629
+
1630
+ <section class="christianity-shared-zone" [attr.aria-label]="t('christianitySharedZone')">
1631
+ <button type="button" class="christianity-zone-pile christianity-zone-pile--history" valLightRipple (click)="openHistory()">
1632
+ <i aria-hidden="true"></i>
1633
+ <i aria-hidden="true"></i>
1634
+ <i aria-hidden="true"></i>
1635
+ <span>{{ t('christianityHistory') }}</span>
1636
+ <strong>{{ game().historyZone.length }}</strong>
1637
+ </button>
1638
+ <button type="button" class="christianity-zone-pile christianity-zone-pile--deck" valLightRipple aria-live="polite" (click)="inspectDeck()">
1639
+ <i aria-hidden="true"></i>
1640
+ <i aria-hidden="true"></i>
1641
+ <i aria-hidden="true"></i>
1642
+ <span>{{ t('christianityDeck') }}</span>
1643
+ <strong>{{ game().sharedDeck.length }}</strong>
1644
+ </button>
1645
+ <div class="christianity-zone-card">
1646
+ <span>{{ t('christianityPlace') }}</span>
1647
+ <strong>{{ t('christianityEmpty') }}</strong>
1648
+ </div>
1649
+ </section>
1650
+
1651
+ <section class="christianity-player-side">
1652
+ <section class="christianity-battle-zone" [class.is-placing-card]="canPlaceSelectedCharacter() || isDraggingCharacter()" [attr.aria-label]="t('christianityYourBattle')">
1653
+ @for (slot of battleSlots('P1'); track slot.trackId) {
1654
+ @if (slot.card) {
1655
+ <button
1656
+ type="button"
1657
+ class="christianity-card-preview-card christianity-card-preview-card--battle christianity-render-card-button"
1658
+ valLightRipple
1659
+ [class.is-selected]="selectedAttacker()?.instanceId === slot.card.instanceId"
1660
+ [class.is-exhausted]="!slot.card.canAttack"
1661
+ [class.is-ready-attacker]="isOwnTurn() && slot.card.canAttack"
1662
+ (click)="selectAttacker(slot.card)"
1663
+ >
1664
+ <val-christianity-card [card]="characterRenderCard(slot.card)" variant="baby"></val-christianity-card>
1665
+ </button>
1666
+ } @else {
1667
+ <button
1668
+ type="button"
1669
+ class="christianity-slot"
1670
+ cdkDropList
1671
+ [id]="battleSlotDropId($index)"
1672
+ [cdkDropListData]="$index"
1673
+ [cdkDropListConnectedTo]="['christianity-hand-source']"
1674
+ [cdkDropListEnterPredicate]="canDropOnBattleSlot"
1675
+ [cdkDropListSortingDisabled]="true"
1676
+ [class.christianity-slot--play-target]="canPlaceSelectedCharacter() || isDraggingCharacter()"
1677
+ valLightRipple
1678
+ (cdkDropListDropped)="dropOnBattleSlot($event, $index)"
1679
+ (click)="playSelectedCard($index)"
1680
+ >
1681
+ @if (canPlaceSelectedCharacter() || isDraggingCharacter()) {
1682
+ <span>{{ t('christianityPlayHere') }}</span>
1683
+ }
1684
+ </button>
1685
+ }
1686
+ }
1687
+ </section>
1688
+
1689
+ <section class="christianity-player-rack">
1690
+ <div class="christianity-offerings-zone">
1691
+ <div
1692
+ class="christianity-offering-drop-target"
1693
+ cdkDropList
1694
+ id="christianity-offerings-drop"
1695
+ [cdkDropListConnectedTo]="['christianity-hand-source']"
1696
+ [class.is-play-target]="canPlaceSelectedOffering() || isDraggingOffering()"
1697
+ [cdkDropListEnterPredicate]="canDropOnOfferings"
1698
+ [cdkDropListSortingDisabled]="true"
1699
+ (cdkDropListDropped)="dropOnOfferings($event)"
1700
+ >
1701
+ <button
1702
+ type="button"
1703
+ class="christianity-offering-pile"
1704
+ valLightRipple
1705
+ (click)="handleOfferingPile('P1')"
1706
+ >
1707
+ <i aria-hidden="true"></i>
1708
+ <i aria-hidden="true"></i>
1709
+ <i aria-hidden="true"></i>
1710
+ <span>{{ t('christianityOfferings') }}</span>
1711
+ <strong>{{ readyOfferings(player()) }}/{{ totalOfferings(player()) }}</strong>
1712
+ </button>
1713
+ </div>
1714
+ </div>
1715
+ <button type="button" class="christianity-leader-card christianity-render-card-button" valLightRipple (click)="inspectLeader('P1')">
1716
+ <val-christianity-card [card]="leaderRenderCard(player())" variant="baby"></val-christianity-card>
1717
+ </button>
1718
+ <div class="christianity-player-command">
1719
+ <div class="christianity-player-badge">
1720
+ <span class="christianity-avatar" [style.background]="player().avatarColor">{{ player().avatar }}</span>
1721
+ <strong>{{ player().displayName }}</strong>
1722
+ </div>
1723
+ <button
1724
+ type="button"
1725
+ class="christianity-end-turn"
1726
+ (click)="endTurn()"
1727
+ >
1728
+ {{ t('christianityEndTurn') }}
1729
+ </button>
1730
+ </div>
1731
+ </section>
1732
+ </section>
1733
+ </section>
1734
+
1735
+ <section class="christianity-hand-shelf">
1736
+ <div class="christianity-hand-meter">
1737
+ <span>{{ t('christianityHand') }}</span>
1738
+ <strong>{{ player().hand?.length ?? 0 }}</strong>
1739
+ </div>
1740
+ <section
1741
+ class="christianity-hand-fan"
1742
+ cdkDropList
1743
+ id="christianity-hand-source"
1744
+ [cdkDropListConnectedTo]="dropTargetIds()"
1745
+ [attr.aria-label]="t('christianityYourHand')"
1746
+ (pointerleave)="clearHoveredHandIndex()"
1747
+ >
1748
+ @for (cardId of player().hand ?? []; track cardId + $index) {
1749
+ @let card = cardDefinition(cardId);
1750
+ <div
1751
+ class="christianity-hand-card-wrap"
1752
+ [class.is-selected]="selectedHandCard() === cardId"
1753
+ [class.is-dragging]="draggingCardId() === cardId"
1754
+ [style.z-index]="handCardZIndex($index)"
1755
+ [style.transform]="fanTransform($index, player().hand?.length ?? 0, false)"
1756
+ (pointerenter)="setHoveredHandIndex($index)"
1757
+ (pointerdown)="setHoveredHandIndex($index)"
1758
+ (pointerup)="releaseHoveredHand($event)"
1759
+ >
1760
+ <button
1761
+ type="button"
1762
+ class="christianity-card-preview-card christianity-card-preview-card--hand christianity-render-card-button"
1763
+ cdkDrag
1764
+ valLightRipple
1765
+ [cdkDragData]="cardId"
1766
+ [cdkDragDisabled]="!canPlay(card)"
1767
+ [class.is-selected]="selectedHandCard() === cardId"
1768
+ [class.is-disabled]="!canPlay(card)"
1769
+ (cdkDragStarted)="startDraggingCard(cardId)"
1770
+ (cdkDragEnded)="endDraggingCard()"
1771
+ (click)="selectHandCard(cardId)"
1772
+ >
1773
+ <val-christianity-card [card]="definitionToRenderCard(card)" variant="baby"></val-christianity-card>
1774
+ <ng-template cdkDragPreview>
1775
+ <div class="christianity-card-drag-preview">
1776
+ <val-christianity-card [card]="definitionToRenderCard(card)" variant="baby"></val-christianity-card>
1777
+ </div>
1778
+ </ng-template>
1779
+ <ng-template cdkDragPlaceholder>
1780
+ <div class="christianity-card-drag-placeholder"></div>
1781
+ </ng-template>
1782
+ </button>
1783
+ <button
1784
+ type="button"
1785
+ class="christianity-card-eye"
1786
+ [attr.aria-label]="t('christianityPreviewCard')"
1787
+ (click)="inspectHandCard(cardId, true); $event.stopPropagation()"
1788
+ ></button>
1789
+ </div>
1790
+ }
1791
+ </section>
1792
+ </section>
1793
+ }
1794
+
1795
+ @if (selectedPreview()) {
1796
+ <button type="button" class="christianity-preview-backdrop" [attr.aria-label]="t('christianityClosePreview')" (click)="closePreview()"></button>
1797
+ <aside
1798
+ class="christianity-floating-card-shell"
1799
+ aria-live="polite"
1800
+ >
1801
+ <button type="button" class="christianity-floating-card-close" (click)="closePreview()">
1802
+ {{ t('close') }}
1803
+ </button>
1804
+ @if (canNavigateHistoryPreview()) {
1805
+ <button
1806
+ type="button"
1807
+ class="christianity-preview-nav christianity-preview-nav--previous"
1808
+ [attr.aria-label]="t('christianityPreviousHistoryCard')"
1809
+ (click)="navigateHistoryPreview(-1)"
1810
+ >
1811
+ &lt;
1812
+ </button>
1813
+ <button
1814
+ type="button"
1815
+ class="christianity-preview-nav christianity-preview-nav--next"
1816
+ [attr.aria-label]="t('christianityNextHistoryCard')"
1817
+ (click)="navigateHistoryPreview(1)"
1818
+ >
1819
+ &gt;
1820
+ </button>
1821
+ }
1822
+ <div
1823
+ class="christianity-floating-card"
1824
+ [style.--preview-rotate-x]="previewTilt().rotateX + 'deg'"
1825
+ [style.--preview-rotate-y]="previewTilt().rotateY + 'deg'"
1826
+ [style.--preview-shift-x]="previewTilt().shiftX + 'px'"
1827
+ [style.--preview-shift-y]="previewTilt().shiftY + 'px'"
1828
+ (pointermove)="tiltPreview($event)"
1829
+ (pointerleave)="resetPreviewTilt()"
1830
+ >
1831
+ @if (selectedPreviewRenderCard(); as previewCard) {
1832
+ <val-christianity-card [card]="previewCard" variant="full"></val-christianity-card>
1833
+ }
1834
+ </div>
1835
+ @if (previewRule(); as rule) {
1836
+ <div class="christianity-preview-rule-note">
1837
+ <span class="christianity-rule-note-icon" aria-hidden="true">i</span>
1838
+ <div>
1839
+ <small>{{ t('christianityCardRule') }}</small>
1840
+ <strong>{{ rule.title }}</strong>
1841
+ <p>{{ rule.body }}</p>
1842
+ </div>
1843
+ </div>
1844
+ }
1845
+ </aside>
1846
+ }
1847
+
1848
+ @if (selectedInfo(); as info) {
1849
+ <button type="button" class="christianity-info-backdrop" [attr.aria-label]="t('close')" (click)="closeInfo()"></button>
1850
+ <aside class="christianity-info-panel" aria-live="polite">
1851
+ <button type="button" class="christianity-dialog-close christianity-info-close" (click)="closeInfo()">
1852
+ {{ t('close') }}
1853
+ </button>
1854
+ <div class="christianity-rule-note">
1855
+ <span class="christianity-rule-note-icon" aria-hidden="true">i</span>
1856
+ <div>
1857
+ <small>{{ info.eyebrow }}</small>
1858
+ <h2>{{ info.title }}</h2>
1859
+ <strong>{{ info.meta }}</strong>
1860
+ <p>{{ info.body }}</p>
1861
+ <ul>
1862
+ @for (fact of info.facts; track fact) {
1863
+ <li>{{ fact }}</li>
1864
+ }
1865
+ </ul>
1866
+ </div>
1867
+ </div>
1868
+ </aside>
1869
+ }
1870
+
1871
+ @if (screen() === 'table') {
1872
+ <section class="christianity-actions" aria-live="polite">
1873
+ <p>{{ statusText() }}</p>
1874
+ <div>
1875
+ <button type="button" [disabled]="selectedActionDisabled()" (click)="playSelectedCard()">
1876
+ {{ selectedActionLabel() }}
1877
+ </button>
1878
+ <button type="button" (click)="resetMock()">
1879
+ {{ t('christianityReset') }}
1880
+ </button>
1881
+ </div>
1882
+ </section>
1883
+ }
1884
+
1885
+ @if (showHistory()) {
1886
+ <button type="button" class="christianity-history-backdrop" [attr.aria-label]="t('christianityCloseHistory')" (click)="closeHistory()"></button>
1887
+ <section class="christianity-history-drawer">
1888
+ <header>
1889
+ <h2>{{ t('christianityHistory') }}</h2>
1890
+ <div class="christianity-dialog-actions">
1891
+ <span>{{ game().historyZone.length }}</span>
1892
+ <button type="button" class="christianity-dialog-close" (click)="closeHistory()">
1893
+ {{ t('close') }}
1894
+ </button>
1895
+ </div>
1896
+ </header>
1897
+ @if (game().historyZone.length) {
1898
+ <div class="christianity-history-grid">
1899
+ @for (cardId of game().historyZone; track cardId + $index) {
1900
+ @let card = cardDefinition(cardId);
1901
+ <button type="button" class="christianity-gallery-card-button christianity-render-card-button" valLightRipple (click)="inspectHistoryCard(cardId)">
1902
+ <val-christianity-card [card]="definitionToRenderCard(card)" variant="baby"></val-christianity-card>
1903
+ </button>
1904
+ }
1905
+ </div>
1906
+ } @else {
1907
+ <p>{{ t('christianityHistoryEmpty') }}</p>
1908
+ }
1909
+ </section>
1910
+ }
1911
+
1912
+ @if (showGallery()) {
1913
+ <button type="button" class="christianity-history-backdrop" [attr.aria-label]="t('christianityCloseGallery')" (click)="closeGallery()"></button>
1914
+ <section class="christianity-history-drawer christianity-gallery-drawer">
1915
+ <header>
1916
+ <div>
1917
+ <h2>{{ t('christianityGallery') }}</h2>
1918
+ <p>{{ galleryEditionLabel() }}</p>
1919
+ </div>
1920
+ <div class="christianity-dialog-actions">
1921
+ <span>{{ galleryCards().length }}</span>
1922
+ <button type="button" class="christianity-dialog-close" (click)="closeGallery()">
1923
+ {{ t('close') }}
1924
+ </button>
1925
+ </div>
1926
+ </header>
1927
+ <div class="christianity-gallery-controls">
1928
+ <label>
1929
+ <span>{{ t('christianityGallerySearch') }}</span>
1930
+ <input type="search" [value]="gallerySearch()" (input)="setGallerySearch($event)" [placeholder]="t('christianityGallerySearchPlaceholder')" />
1931
+ </label>
1932
+ <label>
1933
+ <span>{{ t('christianityGalleryFilter') }}</span>
1934
+ <select [value]="galleryType()" (change)="setGalleryType($event)">
1935
+ @for (option of galleryTypeOptions(); track option.value) {
1936
+ <option [value]="option.value">{{ option.label }}</option>
1937
+ }
1938
+ </select>
1939
+ </label>
1940
+ </div>
1941
+ <div class="christianity-gallery-edition-strip">
1942
+ <button type="button" class="is-active" valLightRipple>
1943
+ <img [src]="galleryEditionIcon()" alt="" />
1944
+ <span>{{ t('christianityGenesisEdition') }}</span>
1945
+ </button>
1946
+ </div>
1947
+ <div class="christianity-gallery-grid">
1948
+ @for (card of galleryCards(); track card.id) {
1949
+ <button type="button" class="christianity-gallery-card-button christianity-render-card-button" valLightRipple (click)="inspectGalleryCard(card.id)">
1950
+ <val-christianity-card [card]="definitionToRenderCard(card)" variant="baby"></val-christianity-card>
1951
+ </button>
1952
+ } @empty {
1953
+ <p>{{ t('christianityGalleryEmpty') }}</p>
1954
+ }
1955
+ </div>
1956
+ </section>
1957
+ }
1958
+
1959
+ @if (offeringsSeat()) {
1960
+ @let offeringPlayer = game().players[offeringsSeat()!];
1961
+ <button type="button" class="christianity-history-backdrop" [attr.aria-label]="t('christianityCloseOfferings')" (click)="closeOfferings()"></button>
1962
+ <section class="christianity-history-drawer christianity-offerings-drawer">
1963
+ <header>
1964
+ <h2>{{ t('christianityOfferings') }}</h2>
1965
+ <div class="christianity-dialog-actions">
1966
+ <span>{{ readyOfferings(offeringPlayer) }}/{{ totalOfferings(offeringPlayer) }}</span>
1967
+ <button type="button" class="christianity-dialog-close" (click)="closeOfferings()">
1968
+ {{ t('close') }}
1969
+ </button>
1970
+ </div>
1971
+ </header>
1972
+ <div class="christianity-offerings-note">
1973
+ <span class="christianity-rule-note-icon" aria-hidden="true">i</span>
1974
+ <p>{{ t('christianityOfferingsRuleBody') }}</p>
1975
+ </div>
1976
+ <div class="christianity-offering-list">
1977
+ @for (offering of offeringPlayer.offerings; track offering.instanceId) {
1978
+ <article class="christianity-offering-row" [class.is-exhausted]="!offering.ready">
1979
+ <button type="button" class="christianity-offering-card christianity-render-card-button" valLightRipple (click)="inspectOffering(offering)">
1980
+ <val-christianity-card [card]="offeringRenderCard(offering)" variant="baby"></val-christianity-card>
1981
+ </button>
1982
+ <div>
1983
+ <strong>{{ offering.ready ? t('christianityOfferingReady') : t('christianityOfferingExhausted') }}</strong>
1984
+ <p>{{ offeringAbilityText(offering) }}</p>
1985
+ @if (offering.abilityName) {
1986
+ <button
1987
+ type="button"
1988
+ [disabled]="!canUseOfferingAbility(offering, offeringsSeat()!)"
1989
+ (click)="useOfferingAbility(offering, offeringsSeat()!)"
1990
+ >
1991
+ {{ t('christianityUseAbility') }}
1992
+ </button>
1993
+ }
1994
+ </div>
1995
+ </article>
1996
+ }
1997
+ </div>
1998
+ </section>
1999
+ }
2000
+ </main>
2001
+ `, isInline: true, styles: [":host{--christianity-theme-ink: var(--val-text-color, #1f2933);--christianity-theme-surface: #ffffff;--christianity-theme-parchment: #eff6ff;--christianity-theme-olive: #1d4ed8;--christianity-theme-gold: #2563eb;--christianity-theme-gold-soft: rgba(37, 99, 235, .16);--christianity-theme-gold-ring: rgba(37, 99, 235, .44);--christianity-theme-glow: rgba(37, 99, 235, .24);--christianity-theme-focus: #2563eb;--christianity-theme-shadow: rgba(37, 99, 235, .15);--christianity-theme-shadow-strong: rgba(37, 99, 235, .26);--christianity-card-aspect: 5 / 7.45;--christianity-card-back: linear-gradient(135deg, rgba(16, 42, 67, .16), rgba(16, 42, 67, .03)), repeating-linear-gradient(45deg, #dbeafe 0 .33rem, #ffffff .33rem .66rem);--christianity-card-back-soft: linear-gradient(135deg, rgba(16, 42, 67, .11), rgba(16, 42, 67, .02)), repeating-linear-gradient(45deg, #dbeafe 0 .33rem, #ffffff .33rem .66rem);display:block;max-width:100%;min-width:0;overflow-x:clip;color:var(--christianity-theme-ink)}.christianity-shell{box-sizing:border-box;display:grid;gap:.65rem;width:100%;max-width:100%;min-width:0;padding:.75rem .25rem;border:1px solid rgba(36,48,68,.12);border-radius:.75rem;background:#f6f8fb;overflow-x:clip;overflow-y:visible}.christianity-shell.has-modal-open{max-height:100dvh;overflow:hidden;overscroll-behavior:contain}.christianity-header,.christianity-match-strip,.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-match-player strong,.christianity-match-player small,.christianity-scoreboard span,.christianity-history h2,.christianity-actions p{margin:0}.christianity-header h1{font-size:1.35rem;line-height:1.1}.christianity-header-actions{display:flex;align-items:center;justify-content:flex-end;gap:.5rem;min-width:0}.christianity-gallery-open{min-height:2.2rem;padding:0 .75rem;border:1px solid var(--christianity-theme-gold-ring);border-radius:999px;background:linear-gradient(180deg,#eff6fffa,#fffffffa),radial-gradient(circle at 20% 0%,var(--christianity-theme-gold-soft),transparent 42%);color:var(--christianity-theme-ink);font:inherit;font-size:.82rem;font-weight:800;box-shadow:0 .55rem 1.2rem #2563eb1a}.christianity-splash,.christianity-start{min-height:min(34rem,calc(100dvh - 8rem));border:1px solid rgba(37,99,235,.18);border-radius:.9rem;background:radial-gradient(circle at 50% 18%,rgba(37,99,235,.16),transparent 22rem),linear-gradient(180deg,#eff6ffed,#fffffff7),var(--christianity-card-back-soft);box-shadow:0 1.2rem 3.2rem #2563eb1f}.christianity-splash{display:grid;place-items:center;align-content:center;gap:1.2rem;padding:2.5rem 1.25rem;text-align:center}.christianity-splash__mark{position:relative;display:grid;grid-template-columns:repeat(3,.74rem);place-content:center;gap:.55rem;width:5.8rem;height:5.8rem;border:1px solid rgba(37,99,235,.18);border-radius:999px;background:radial-gradient(circle at 50% 50%,rgba(37,99,235,.12),transparent 55%),#ffffff9e;box-shadow:inset 0 0 0 .55rem #fff6,0 1rem 2rem #2563eb1f}.christianity-splash__mark:before,.christianity-splash__mark:after{content:\"\";position:absolute;inset:.42rem;border:1px solid rgba(37,99,235,.16);border-radius:inherit;animation:christianity-loader-ring 1.8s ease-out infinite}.christianity-splash__mark:after{animation-delay:.48s}.christianity-splash__mark span{width:.74rem;height:.74rem;border-radius:999px;background:var(--christianity-theme-focus);box-shadow:0 .35rem .85rem #2563eb38;animation:christianity-loader-dot .96s ease-in-out infinite}.christianity-splash__mark span:nth-child(2){animation-delay:.14s}.christianity-splash__mark span:nth-child(3){animation-delay:.28s}@keyframes christianity-loader-dot{0%,to{opacity:.38;transform:translateY(0) scale(.82)}45%{opacity:1;transform:translateY(-.22rem) scale(1)}}@keyframes christianity-loader-ring{0%{opacity:.48;transform:scale(.72)}to{opacity:0;transform:scale(1.2)}}.christianity-splash span,.christianity-start__copy span{color:var(--christianity-theme-olive);font-size:.76rem;font-weight:900;text-transform:uppercase}.christianity-splash h2,.christianity-start h2,.christianity-start p{margin:0}.christianity-splash h2{margin-top:.2rem;font-size:clamp(1.65rem,7vw,2.7rem);line-height:1}.christianity-splash p{max-width:26rem;margin:.55rem auto 0;color:#1f2933ad;font-size:.96rem}.christianity-start{display:grid;align-content:center;gap:1rem;padding:clamp(.85rem,2vw,1.35rem)}.christianity-start__hero{display:grid;grid-template-columns:minmax(0,1fr) minmax(12rem,18rem);gap:1rem;align-items:center}.christianity-start__copy{display:grid;gap:.45rem;max-width:36rem}.christianity-start h2{font-size:clamp(1.6rem,6vw,2.5rem);line-height:1.02}.christianity-start__copy p,.christianity-start__cards p,.christianity-start__modes p{color:#1f2933ad;line-height:1.42}.christianity-start__fan{position:relative;display:grid;place-items:center;min-height:13rem;overflow:visible}.christianity-start__fan val-christianity-card{position:absolute;width:clamp(5.7rem,12vw,7.2rem);transform-origin:50% 92%;filter:drop-shadow(0 1rem 1.5rem rgba(82,64,28,.18))}.christianity-start__cards{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:.75rem}.christianity-start__cards article,.christianity-start__modes article{display:grid;gap:.65rem;align-content:start;padding:.95rem;border:1px solid rgba(36,48,68,.12);border-radius:.75rem;background:#ffffffd1;box-shadow:0 .75rem 1.7rem #52401c14}.christianity-start__cards article{min-height:11rem}.christianity-start__cards strong{font-size:1.05rem}.christianity-start__status{display:flex;flex-wrap:wrap;gap:.45rem}.christianity-start__status span,.christianity-start__modes article>span{display:inline-flex;align-items:center;width:fit-content;min-height:1.85rem;padding:0 .62rem;border:1px solid rgba(37,99,235,.22);border-radius:999px;background:#eff6ffe0;color:#1f2933b8;font-size:.75rem;font-weight:850}.christianity-start__modes{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:.55rem}.christianity-start__modes article{min-height:8.5rem;background:#f8fafcb8;box-shadow:none;opacity:.82}.christianity-start__modes strong{font-size:.92rem}.christianity-start__modes p{margin:0;font-size:.8rem}.christianity-primary-action,.christianity-secondary-action{justify-self:start;min-height:2.5rem;padding:0 .9rem;border-radius:999px;font:inherit;font-weight:900}.christianity-primary-action{border:1px solid rgba(16,42,67,.16);background:#102a43;color:#fff}.christianity-secondary-action{border:1px solid var(--christianity-theme-gold-ring);background:var(--christianity-theme-parchment);color:var(--christianity-theme-ink)}.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-match-strip{display:grid;grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);padding:.45rem;border:1px solid rgba(36,48,68,.1);border-radius:.75rem;background:#fff}.christianity-match-player{display:grid;grid-template-columns:auto minmax(0,1fr);gap:.5rem;align-items:center;min-width:0}.christianity-match-player--opponent{direction:rtl}.christianity-match-player--opponent div{direction:ltr;text-align:right}.christianity-match-player div{display:grid;min-width:0}.christianity-match-player strong,.christianity-match-player small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.christianity-match-player small,.christianity-scoreboard span{color:#1f293394;font-size:.72rem}.christianity-scoreboard{display:grid;justify-items:center;min-width:4.2rem;padding:0 .55rem;border-right:1px solid rgba(36,48,68,.1);border-left:1px solid rgba(36,48,68,.1)}.christianity-scoreboard strong{font-size:1.2rem;line-height:1}.christianity-table{box-sizing:border-box;position:relative;display:grid;gap:.45rem;width:100%;max-width:100%;min-width:0;padding:.45rem .35rem;border-radius:.75rem;background:#dceafb;overflow-x:clip;overflow-y:visible}.christianity-impact-layer{position:absolute;inset:0;z-index:30;pointer-events:none}.christianity-impact-pop{position:absolute;left:50%;top:50%;display:inline-grid;place-items:center;min-width:2.45rem;min-height:2.1rem;padding:.1rem .55rem;border:1px solid rgba(37,99,235,.26);border-radius:999px;background:radial-gradient(circle at 50% 42%,#fffffff2,#eff6ffc7),#ffffffe0;color:var(--christianity-theme-focus);font-size:1rem;font-weight:1000;line-height:1;text-shadow:0 1px 0 rgba(255,255,255,.72);box-shadow:0 .8rem 1.8rem #2563eb2e,0 0 0 .25rem #2563eb14;transform:translate(-50%,-50%);animation:christianity-impact-pop 1.12s ease-out both}.christianity-impact-pop:after{content:\"\";position:absolute;inset:-.35rem;border:1px solid currentColor;border-radius:inherit;opacity:.24;animation:christianity-impact-ring 1.12s ease-out both}.christianity-impact-pop.is-damage{border-color:#dc262652;color:#dc2626;box-shadow:0 .8rem 1.8rem #dc262629,0 0 0 .25rem #dc262614}.christianity-impact-pop.is-heal{border-color:#16a34a52;color:#15803d;box-shadow:0 .8rem 1.8rem #16a34a29,0 0 0 .25rem #16a34a14}.christianity-impact-pop.is-resource{border-color:#2563eb52;color:var(--christianity-theme-focus)}.christianity-impact-pop.is-opponent-leader{left:50%;top:10%}.christianity-impact-pop.is-opponent-battle{left:50%;top:27%}.christianity-impact-pop.is-opponent-offerings{left:11%;top:8%}.christianity-impact-pop.is-player-battle{left:50%;top:67%}.christianity-impact-pop.is-player-leader{left:50%;top:84%}.christianity-impact-pop.is-player-offerings{left:10%;top:84%}@keyframes christianity-impact-pop{0%{opacity:0;transform:translate(-50%,-22%) scale(.75)}18%{opacity:1;transform:translate(-50%,-58%) scale(1.08)}72%{opacity:1;transform:translate(-50%,-84%) scale(1)}to{opacity:0;transform:translate(-50%,-118%) scale(.94)}}@keyframes christianity-impact-ring{0%{opacity:.24;transform:scale(.78)}to{opacity:0;transform:scale(1.55)}}@media (prefers-reduced-motion: reduce){.christianity-impact-pop,.christianity-impact-pop:after,.christianity-splash__mark:before,.christianity-splash__mark:after,.christianity-splash__mark span{animation:none!important}}.christianity-player-side{box-sizing:border-box;display:grid;gap:.35rem;width:100%;max-width:100%;min-width:0;padding:.35rem .3rem;border-radius:.7rem;background:#ffffff57;grid-template-rows:minmax(7rem,1fr) auto;min-height:13.75rem}.christianity-player-side--opponent{grid-template-rows:auto minmax(7rem,1fr)}.christianity-player{display:grid;gap:.65rem}.christianity-battle-zone{--christianity-battle-card-width: clamp(4.8rem, 15vw, 6.6rem);box-sizing:border-box;display:grid;grid-template-columns:repeat(4,var(--christianity-battle-card-width));gap:.5rem;align-items:center;justify-content:center;width:100%;max-width:100%;min-width:0;min-height:clamp(9.1rem,29vw,11rem);padding:.55rem .4rem;border-radius:.75rem;background:#ffffffc2;transition:background .16s ease,box-shadow .16s ease}.christianity-battle-zone.is-placing-card{background:linear-gradient(180deg,#fffaf0f5,#ffffffd6),#ffffffc2;box-shadow:inset 0 0 0 .14rem var(--christianity-theme-gold-soft),0 .8rem 1.7rem #5f6f2a1f}.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:var(--christianity-theme-gold);box-shadow:0 0 0 .18rem var(--christianity-theme-gold-soft),0 .85rem 1.4rem var(--christianity-theme-shadow)}.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{display:grid;place-items:center;justify-self:center;width:var(--christianity-battle-card-width);height:auto;min-height:0;aspect-ratio:var(--christianity-card-aspect);border:1px dashed rgba(36,48,68,.22);border-radius:.5rem;background:#ffffff73;color:inherit;font:inherit}.christianity-slot--play-target{position:relative;border-color:var(--christianity-theme-gold-ring);background:linear-gradient(180deg,#fffaf0eb,#f8fafcd1),#ffffffb3;color:#5d4305;font-weight:800;overflow:hidden;box-shadow:inset 0 0 0 .12rem #d6a21d33,0 .7rem 1.25rem var(--christianity-theme-shadow);animation:christianity-target-pulse 1.45s ease-in-out infinite}.christianity-slot--play-target:before{content:\"\";position:absolute;inset:.35rem;border:1px solid rgba(214,162,29,.22);border-radius:.4rem;background:linear-gradient(135deg,rgba(214,162,29,.1),transparent 46%),radial-gradient(circle at 50% 42%,var(--christianity-theme-glow),transparent 58%)}.christianity-slot--play-target span{position:relative;z-index:2;padding:.16rem .44rem;border-radius:999px;background:#ffffffc7;font-size:.78rem}@keyframes christianity-target-pulse{0%,to{box-shadow:inset 0 0 0 .12rem #d6a21d33,0 .7rem 1.25rem var(--christianity-theme-shadow)}50%{box-shadow:inset 0 0 0 .16rem #d6a21d57,0 .9rem 1.65rem var(--christianity-theme-shadow-strong)}}.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:10.8rem;padding:.25rem .25rem 2.1rem;isolation:isolate;overflow:visible}.christianity-hand-shelf{position:relative;display:grid;z-index:12;min-height:12rem;margin-top:-1.15rem;padding:1.45rem .25rem 1rem;overflow:visible}.christianity-hand-shelf--opponent{z-index:8;min-height:6.85rem;margin-top:0;margin-bottom:0;padding:.45rem .25rem .85rem}.christianity-hand-fan--opponent{min-height:5.9rem;padding-bottom:.75rem;align-items:start}.christianity-hand-fan--opponent .christianity-hidden-card-button{width:clamp(3.7rem,12vw,4.9rem);aspect-ratio:var(--christianity-card-aspect);margin-inline:-.9rem;transform-origin:50% 120%}.christianity-hand-fan--opponent .christianity-hidden-card-button:first-child{margin-left:0}.christianity-hand-fan--opponent .christianity-hidden-card-button:last-child{margin-right:0}.christianity-card-preview-card,.christianity-card-mini,.christianity-offering-pile,.christianity-offering-card,.christianity-leader-card,.christianity-zone-card,.christianity-zone-pile,.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;grid-template-rows:auto minmax(0,1fr) auto auto;gap:.28rem;align-content:stretch;width:clamp(4.9rem,17vw,7.1rem);height:auto;min-height:0;aspect-ratio:var(--christianity-card-aspect);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-render-card-button{display:block;padding:0;overflow:visible;border:0;background:transparent;box-shadow:none}.christianity-render-card-button>val-christianity-card{display:block;width:100%;height:100%}.christianity-gallery-card-button{display:block;width:min(100%,6.8rem);min-width:0;aspect-ratio:var(--christianity-card-aspect);padding:0;overflow:visible;border:0;background:transparent;color:inherit;font:inherit;text-align:left;box-shadow:none}.christianity-gallery-card-button>val-christianity-card{display:block;width:100%;height:100%}.christianity-card-preview-card--hand.christianity-render-card-button,.christianity-card-preview-card--battle.christianity-render-card-button,.christianity-leader-card.christianity-render-card-button{aspect-ratio:var(--christianity-card-aspect)}.christianity-card-preview-card--hand.christianity-render-card-button:hover val-christianity-card,.christianity-card-preview-card--hand.christianity-render-card-button.is-selected val-christianity-card,.christianity-card-preview-card--battle.christianity-render-card-button.is-selected val-christianity-card,.christianity-card-preview-card--battle.christianity-render-card-button.is-target val-christianity-card,.christianity-leader-card.christianity-render-card-button.is-target val-christianity-card{filter:drop-shadow(0 0 .55rem rgba(214,162,29,.35))}.christianity-card-preview-card--battle.christianity-render-card-button.is-ready-attacker val-christianity-card{filter:drop-shadow(0 .45rem .8rem rgba(95,111,42,.16))}.christianity-card-preview-card--battle.christianity-render-card-button.is-selected{transform:translateY(-.28rem)}.christianity-card-frame{position:relative;display:grid;grid-template-rows:auto minmax(0,1fr) auto auto;gap:.28rem;align-content:stretch;overflow:hidden;padding:.48rem;text-align:left;background:linear-gradient(180deg,#fffffffa,#f8fafcfa),radial-gradient(circle at 15% 0%,rgba(214,162,29,.12),transparent 44%);box-shadow:0 .5rem 1.25rem #2430441a,inset 0 0 0 .18rem #ffffff9e}.christianity-card-frame-header{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:.16rem;align-items:start;min-width:0}.christianity-card-frame-header small{grid-column:1;min-width:0;overflow:hidden;color:#1f2933a3;font-size:clamp(.52rem,1.5vw,.68rem);line-height:1;text-overflow:ellipsis;white-space:nowrap}.christianity-card-frame-header strong{grid-column:1;justify-self:start;align-self:start;min-width:0;padding:0;overflow:hidden;border-radius:0;background:transparent;font-size:clamp(.82rem,2.5vw,1.05rem);line-height:1.02;text-overflow:ellipsis;white-space:nowrap}.christianity-card-preview-card--hand .christianity-card-frame-header strong,.christianity-card-preview-card--battle .christianity-card-frame-header strong,.christianity-leader-card .christianity-card-frame-header strong{display:-webkit-box;overflow-wrap:anywhere;text-overflow:clip;white-space:normal;-webkit-box-orient:vertical;-webkit-line-clamp:2}.christianity-card-preview-card--hand .christianity-card-frame-header small{text-transform:uppercase}.christianity-card-preview-card--hand .christianity-card-frame-art>span{display:-webkit-box;max-width:88%;overflow-wrap:anywhere;text-overflow:clip;white-space:normal;-webkit-box-orient:vertical;-webkit-line-clamp:2}.christianity-card-frame-header span{grid-column:2;grid-row:1 / span 2;display:grid;place-items:center;min-width:1.3rem;height:1.3rem;padding:0 .22rem;border-radius:999px;background:#ffd91a;color:#243044;font-size:.8rem;font-weight:900;line-height:1;box-shadow:inset 0 -.08rem #52401c2e}.christianity-card-frame-header span.is-offering-pips,.christianity-full-card-cost.is-offering-pips,.christianity-offering-card span.is-offering-pips{grid-auto-flow:column;gap:.14rem;min-width:auto;padding:0 .28rem}.christianity-card-frame-header span.is-offering-pips i,.christianity-full-card-cost.is-offering-pips i,.christianity-offering-card span.is-offering-pips i,.christianity-full-card-pips i{display:block;width:.72rem;height:.72rem;border-radius:999px;background:radial-gradient(circle at 34% 28%,rgba(255,255,255,.9) 0 .12rem,transparent .13rem),#ffd91a;box-shadow:inset 0 -.08rem #52401c2e,0 .12rem .24rem #102a431a}.christianity-card-frame-art{position:relative;display:grid;place-items:center;min-height:0;overflow:hidden;border-radius:.36rem;background:linear-gradient(135deg,#5f6f2a2e,#d6a21d24),radial-gradient(circle at 50% 18%,rgba(255,255,255,.72),transparent 48%),#dbe7ef;box-shadow:inset 0 0 0 1px #24304414}.christianity-card-frame-art>span{max-width:78%;overflow:hidden;color:#2430447a;font-size:clamp(.82rem,2.2vw,1.05rem);font-weight:900;line-height:1.02;text-align:center;text-overflow:ellipsis}.christianity-card-frame-art small{position:absolute;right:0;bottom:.28rem;max-width:78%;padding:.1rem .34rem;overflow:hidden;border-radius:999px 0 0 999px;background:#ffffffe6;color:#1f2933a8;font-size:.48rem;font-style:italic;font-weight:900;line-height:1;text-overflow:ellipsis;text-transform:uppercase;white-space:nowrap}.christianity-card-frame-effect{display:grid;align-content:center;gap:.1rem;min-height:1.45rem;padding:.24rem;overflow:hidden;border-radius:.34rem;background:radial-gradient(circle at 50% 70%,rgba(36,48,68,.06),transparent 44%),#ffffffdb}.christianity-card-frame-effect strong{justify-self:end;align-self:end;padding:.12rem .32rem;border-radius:999px;background:#edf2f7;font-size:clamp(.66rem,2vw,.82rem);line-height:1.05}.christianity-card-frame-effect p{margin:0;overflow:hidden;color:#1f2933b8;font-size:.58rem;line-height:1.1;text-overflow:ellipsis;white-space:nowrap}.christianity-card-frame-footer{display:flex;justify-content:space-between;gap:.22rem;color:#1f293385;font-size:.46rem;font-weight:800;line-height:1}.christianity-card-frame--battle{gap:.22rem;padding:.42rem}.christianity-card-frame--battle .christianity-card-frame-art{min-height:2.6rem}.christianity-card-frame--leader .christianity-card-frame-art{background:linear-gradient(135deg,#2563eb24,#d6a21d29),radial-gradient(circle at 50% 18%,rgba(255,255,255,.78),transparent 48%),#e7eef8}.christianity-card-frame--list{width:clamp(4.4rem,22vw,5.8rem);padding:.38rem}.christianity-card-frame--list .christianity-card-frame-art{min-height:2.5rem}.christianity-hand-card-wrap{position:relative;display:grid;justify-items:center;flex:0 0 auto;margin-inline:-.42rem;padding-bottom:2rem;transform-origin:50% 115%;transition:transform .16s ease,filter .16s ease}.christianity-hand-card-wrap:hover,.christianity-hand-card-wrap.is-selected,.christianity-hand-card-wrap.is-dragging{z-index:3}.christianity-hand-card-wrap:hover .christianity-card-preview-card--hand,.christianity-hand-card-wrap.is-selected .christianity-card-preview-card--hand,.christianity-hand-card-wrap.is-dragging .christianity-card-preview-card--hand{border-color:var(--christianity-theme-gold);box-shadow:0 0 0 .12rem var(--christianity-theme-gold-soft),0 1rem 2rem var(--christianity-theme-shadow)}.christianity-card-preview-card--hand{cursor:grab;touch-action:none}.christianity-card-preview-card--hand:active{cursor:grabbing}.christianity-card-preview-card--hand.cdk-drag-disabled{cursor:not-allowed}.christianity-card-drag-preview,.christianity-card-preview-card.cdk-drag-preview{width:clamp(4.9rem,17vw,7.1rem);height:auto;min-height:0;aspect-ratio:var(--christianity-card-aspect);border-radius:.5rem;box-shadow:0 0 0 .16rem #fff4c2ad,0 1.5rem 3rem var(--christianity-theme-shadow-strong);transform:rotate(2deg) scale(1.03)}.christianity-card-drag-preview val-christianity-card{display:block;width:100%;height:100%}.christianity-card-drag-placeholder,.christianity-card-preview-card.cdk-drag-placeholder{width:clamp(4.9rem,17vw,7.1rem);height:auto;min-height:0;aspect-ratio:var(--christianity-card-aspect);border-radius:.5rem;background:#94a3b81f;opacity:.22}.christianity-slot.cdk-drop-list-dragging,.christianity-offering-drop-target.cdk-drop-list-dragging{border-color:var(--christianity-theme-gold-ring)}.christianity-slot.cdk-drop-list-receiving,.christianity-offering-drop-target.cdk-drop-list-receiving{box-shadow:inset 0 0 0 .18rem #d6a21d57,0 1rem 1.9rem var(--christianity-theme-shadow-strong)}.christianity-card-eye{position:absolute;right:50%;bottom:.38rem;width:2.15rem;height:1.55rem;border:1px solid color-mix(in srgb,var(--christianity-theme-focus) 52%,transparent);border-radius:999px;background:#fffffff0;box-shadow:0 .55rem 1.1rem #102a4324;opacity:0;transform:translate(50%,-.2rem) scale(.92);transition:opacity .14s ease,transform .14s ease,border-color .14s ease}.christianity-card-eye:before{content:\"\";position:absolute;top:50%;left:50%;width:1.1rem;height:1.1rem;border:.12rem solid var(--christianity-theme-focus);border-radius:82% 0;background:#fffffff0;transform:translate(-50%,-50%) rotate(45deg)}.christianity-card-eye:after{content:\"\";position:absolute;top:50%;left:50%;width:.42rem;height:.42rem;border:.09rem solid rgba(255,255,255,.95);border-radius:999px;background:radial-gradient(circle at 35% 32%,#ffffff 0 .06rem,transparent .07rem),var(--christianity-theme-focus);transform:translate(-50%,-50%)}.christianity-hand-card-wrap:hover .christianity-card-eye,.christianity-hand-card-wrap.is-selected .christianity-card-eye,.christianity-card-eye:focus-visible{opacity:1;transform:translate(50%) scale(1)}.christianity-offering-drop-target{display:grid;width:min(100%,5.9rem);height:7.1rem;min-height:0;max-height:7.1rem;border:1px solid transparent;border-radius:.64rem;transition:border-color .16s ease,box-shadow .16s ease,background .16s ease}.christianity-offering-drop-target.is-play-target{border-color:var(--christianity-theme-gold-ring);background:linear-gradient(180deg,#fffaf0f5,#fffffff0),radial-gradient(circle at 82% 14%,rgba(250,204,21,.28) 0 .7rem,transparent .72rem);box-shadow:inset 0 0 0 .12rem #d6a21d3d,0 .8rem 1.55rem var(--christianity-theme-shadow);animation:christianity-target-pulse 1.45s ease-in-out infinite}.christianity-offering-drop-target>.cdk-drag-placeholder{display:none}.christianity-card-frame--back,.christianity-card-preview-card--back{width:clamp(4rem,14vw,5.7rem);min-height:0;aspect-ratio:var(--christianity-card-aspect);place-items:center;padding:.55rem;overflow:hidden;box-shadow:0 .8rem 1.55rem #24304424;transform-origin:50% -18%;background:var(--christianity-card-back)}.christianity-card-frame--back:before,.christianity-card-preview-card--back:before{content:\"\";position:absolute;inset:.5rem;border:1px solid rgba(16,42,67,.12);border-radius:.38rem;background:linear-gradient(180deg,#ffffff2e,#ffffff0a);box-shadow:inset 0 0 0 .12rem #ffffff1f}.christianity-card-preview-card--battle{justify-self:center;width:var(--christianity-battle-card-width);min-width:0;height:auto;min-height:0;aspect-ratio:var(--christianity-card-aspect);margin-inline:0}.christianity-card-preview-card>span,.christianity-card-mini>span,.christianity-offering-pile>span,.christianity-offering-card>span,.christianity-leader-card>span,.christianity-zone-card>span,.christianity-zone-pile>span{position:relative;z-index:2;align-self:start;font-weight:700;line-height:1.05}.christianity-card-preview-card>strong,.christianity-card-mini>strong,.christianity-offering-pile>strong,.christianity-offering-card>strong,.christianity-leader-card>strong,.christianity-zone-card>strong,.christianity-zone-pile>strong{position:relative;z-index:3;justify-self:end;align-self:end;padding:.15rem .35rem;border-radius:999px;background:#edf2f7;font-size:.8rem}.christianity-player-rack{box-sizing:border-box;display:grid;grid-template-columns:minmax(5.9rem,7rem) minmax(5rem,1fr) minmax(4.2rem,7rem);gap:.45rem;align-items:end;justify-items:stretch;width:100%;max-width:100%;min-width:0}.christianity-player-rack--opponent{align-items:start}.christianity-hand-meter{position:absolute;top:0;right:.35rem;z-index:4;display:inline-grid;grid-auto-flow:column;gap:.25rem;align-items:center;min-height:1.7rem;padding:.18rem .46rem;border:1px solid rgba(36,48,68,.12);border-radius:999px;background:#ffffffe6;box-shadow:0 .35rem .8rem #102a4314}.christianity-hand-meter--opponent{top:.15rem}.christianity-hand-meter span{color:#1f293394;font-size:.68rem}.christianity-hand-meter strong{font-size:.86rem}.christianity-player-badge,.christianity-player-command{display:grid;gap:.35rem;justify-items:center;min-width:0}.christianity-player-badge{align-content:start;color:#1f2933c2;font-size:.74rem}.christianity-player-badge--opponent{justify-self:center;grid-auto-flow:column;align-items:center;justify-content:center}.christianity-player-badge strong{max-width:6.5rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.christianity-avatar{display:grid;place-items:center;width:1.85rem;height:1.85rem;border-radius:999px;color:#fff;font-size:.76rem;font-weight:800;box-shadow:0 .35rem .9rem #102a4329}.christianity-offerings-zone{display:flex;flex-wrap:wrap;gap:.25rem;justify-content:flex-start;justify-self:start;width:100%}.christianity-card-mini,.christianity-offering-pile,.christianity-offering-card,.christianity-leader-card,.christianity-zone-card,.christianity-zone-pile{display:grid;align-content:space-between;min-height:4.9rem;padding:.48rem;text-align:left}.christianity-card-frame{display:grid;grid-template-rows:auto minmax(0,1fr) auto auto;align-content:stretch}.christianity-offering-pile,.christianity-zone-card,.christianity-zone-pile{grid-template-rows:auto minmax(2.6rem,1fr) auto;align-content:stretch;gap:.32rem}.christianity-card-mini{width:3.5rem}.christianity-offering-pile{position:relative;isolation:isolate;overflow:hidden;justify-self:start;width:min(100%,5.9rem);height:7.1rem;max-height:7.1rem;min-height:0;padding:.72rem .5rem .55rem;background:linear-gradient(180deg,#fff,#f8fafc),linear-gradient(135deg,rgba(250,204,21,.18),transparent 42%)}.christianity-offering-drop-target .christianity-offering-pile{width:100%;height:100%;max-height:none}.christianity-offering-pile>span{position:relative;z-index:2;max-width:100%;overflow:hidden;font-size:clamp(.86rem,2.4vw,1rem);text-overflow:ellipsis;white-space:nowrap}.christianity-offering-pile>strong{position:relative;z-index:2;justify-self:end;padding:.12rem .34rem;border-radius:999px;background:#edf2f7;font-size:.78rem}.christianity-slot>.cdk-drag-placeholder{display:none}.christianity-offering-pile i{position:absolute;top:2.25rem;left:50%;z-index:1;width:2.7rem;height:3.75rem;border:1px solid rgba(16,42,67,.18);border-radius:.35rem;background:linear-gradient(180deg,#ffffffeb,#f1f5f9eb),radial-gradient(circle at 78% 18%,#facc15 0 .38rem,transparent .4rem);box-shadow:0 .35rem .85rem #102a431a;transform:translate(-58%) rotate(-5deg)}.christianity-offering-pile i:nth-child(2){transform:translate(-50%) translate(.24rem,.08rem) rotate(3deg)}.christianity-offering-pile i:nth-child(3){transform:translate(-50%) translate(.48rem,.18rem) rotate(-1deg)}.christianity-leader-card{align-self:center;justify-self:center;width:clamp(4.75rem,17vw,6rem);min-height:0;aspect-ratio:var(--christianity-card-aspect)}.christianity-rack-spacer{display:block;min-height:1px}.christianity-battle-zone{grid-template-columns:repeat(4,var(--christianity-battle-card-width))}.christianity-shared-zone{box-sizing:border-box;display:grid;grid-template-columns:repeat(3,minmax(4.3rem,1fr));align-items:stretch;width:100%;max-width:100%;min-width:0}.christianity-zone-card,.christianity-zone-pile{min-height:6.45rem;padding:.7rem .52rem .55rem}.christianity-zone-pile{position:relative;isolation:isolate;overflow:hidden;box-shadow:inset 0 0 0 999px #ffffff1f}.christianity-zone-pile i{position:absolute;top:2.2rem;right:.72rem;z-index:-1;width:2.7rem;height:3.7rem;border:1px solid rgba(16,42,67,.18);border-radius:.35rem;background:#f8fafc;box-shadow:0 .35rem .85rem #102a431c;transform:rotate(4deg)}.christianity-zone-pile i:nth-child(2){transform:translate(-.28rem,.12rem) rotate(-3deg)}.christianity-zone-pile i:nth-child(3){background:var(--christianity-card-back);transform:translate(-.54rem,.24rem) rotate(2deg)}.christianity-floating-card-shell{position:fixed;top:calc(50% + 1.3rem);left:50%;z-index:132;display:grid;grid-template-rows:minmax(0,auto) auto;gap:.55rem;width:min(17.5rem,calc(52dvh - 3rem),calc(100vw - 1.25rem));max-height:calc(100dvh - 4.25rem);padding-top:2.5rem;transform:translate(-50%,-50%)}.christianity-floating-card{position:relative;z-index:1;display:block;width:100%;min-height:0;padding:0;border:0;border-radius:.75rem;background:transparent;box-shadow:0 0 2.2rem var(--christianity-theme-glow);touch-action:none;transform:translate(var(--preview-shift-x, 0px),var(--preview-shift-y, 0px)) perspective(48rem) rotateX(var(--preview-rotate-x, 5deg)) rotateY(var(--preview-rotate-y, -5deg));transition:transform 90ms ease-out}.christianity-floating-card val-christianity-card{display:block;width:100%;min-height:0}.christianity-full-card-header{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:.42rem;align-items:center}.christianity-full-card-header strong{min-width:0;display:-webkit-box;overflow:hidden;overflow-wrap:anywhere;text-overflow:clip;-webkit-box-orient:vertical;-webkit-line-clamp:2;font-size:clamp(1.25rem,5vw,1.85rem);line-height:1.04}.christianity-full-card-type-icon,.christianity-full-card-cost{display:grid;place-items:center;border-radius:999px}.christianity-full-card-type-icon{width:1.6rem;height:1.6rem;background:radial-gradient(circle at 50% 50%,rgba(95,111,42,.72) 0 .22rem,transparent .24rem),#2430441a}.christianity-full-card-type-icon img{width:1rem;height:1rem;object-fit:contain}.christianity-full-card-cost{min-width:2.1rem;height:2.1rem;padding:0 .36rem;background:#ffd91a;color:#243044;font-size:1.1rem;font-weight:900;box-shadow:inset 0 -.12rem #52401c2e}.christianity-full-card-art{position:relative;display:grid;place-items:center;min-height:9rem;overflow:hidden;border-radius:.48rem;background:linear-gradient(135deg,#5f6f2a33,#d6a21d29),radial-gradient(circle at 50% 25%,rgba(255,255,255,.76),transparent 42%),#dbe7ef;box-shadow:inset 0 0 0 1px #24304414}.christianity-full-card-art img{width:100%;height:100%;object-fit:cover}.christianity-full-card-art>span{max-width:80%;color:#24304494;font-size:clamp(1.1rem,5vw,1.8rem);font-weight:900;line-height:1.05;text-align:center}.christianity-full-card-art small{position:absolute;right:0;bottom:.55rem;min-width:5rem;padding:.16rem .48rem;border-radius:999px 0 0 999px;background:#ffffffe6;box-shadow:0 .3rem .8rem #102a431f;color:#1f2933bd;font-size:.68rem;font-style:italic;font-weight:900;text-align:center;text-transform:uppercase}.christianity-full-card-verse,.christianity-full-card-effect{display:grid;gap:.32rem}.christianity-full-card-verse p,.christianity-full-card-effect p{margin:0;line-height:1.25}.christianity-full-card-verse{color:#171923;font-family:Georgia,Times New Roman,serif;font-size:clamp(.72rem,2.7vw,.86rem)}.christianity-full-card-verse strong{font-family:inherit;font-size:.78rem;font-weight:900}.christianity-full-card-effect{position:relative;align-content:start;min-height:7rem;padding:.6rem .7rem;overflow:hidden;border-radius:.45rem;background:radial-gradient(circle at 50% 72%,rgba(36,48,68,.07),transparent 34%),#ffffffdb}.christianity-full-card-stats{display:flex;gap:1rem;min-height:1.35rem}.christianity-full-card-stats strong{font-size:1rem;line-height:1}.christianity-full-card-stats .christianity-full-card-pips{display:inline-grid;grid-auto-flow:column;gap:.2rem;justify-self:start;padding:0;background:transparent}.christianity-full-card-effect>div:last-of-type{display:grid;gap:.12rem}.christianity-full-card-effect>div:last-of-type strong{font-size:.82rem}.christianity-full-card-effect p{font-size:clamp(.78rem,2.9vw,.92rem)}.christianity-full-card-rarity{position:absolute;top:.62rem;right:.62rem;width:.46rem;height:.46rem;border-radius:.12rem;transform:rotate(45deg)}.christianity-full-card-rarity.is-normal{background:#d1d5db}.christianity-full-card-rarity.is-uncommon{background:#22c55e}.christianity-full-card-rarity.is-rare{background:#3b82f6}.christianity-full-card-rarity.is-legendary{background:#eab308}.christianity-full-card-footer{display:grid;grid-template-columns:auto auto minmax(0,1fr) auto;gap:.34rem;align-items:center;color:#1f2933ad;font-size:.58rem;line-height:1;text-transform:uppercase}.christianity-full-card-footer span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.christianity-floating-card-close{position:absolute;top:0;right:.15rem;z-index:6;min-height:2rem;padding:0 .6rem;border:1px solid rgba(36,48,68,.14);border-radius:999px;background:#ffffffe6;color:#1f2933c7;font:inherit;font-size:.76rem;font-weight:800;box-shadow:0 .45rem 1rem #102a431a}.christianity-preview-nav{position:absolute;top:50%;z-index:6;display:grid;place-items:center;width:2.35rem;height:2.35rem;border:1px solid rgba(37,99,235,.26);border-radius:999px;background:#ffffffeb;color:var(--christianity-theme-focus);font:inherit;font-size:1.1rem;font-weight:1000;box-shadow:0 .75rem 1.4rem #102a4324,inset 0 0 0 1px #ffffff70;transform:translateY(-50%)}.christianity-preview-nav--previous{left:-.65rem}.christianity-preview-nav--next{right:-.65rem}.christianity-preview-backdrop,.christianity-history-backdrop,.christianity-info-backdrop{position:fixed;inset:0;border:0;border-radius:0;background:#0f172a75}.christianity-preview-backdrop{z-index:131}.christianity-info-backdrop{z-index:50}.christianity-info-panel{position:fixed;top:50%;left:50%;z-index:51;width:min(31rem,calc(100vw - 1.25rem));max-height:min(34rem,calc(100vh - 2rem));padding-top:2.35rem;transform:translate(-50%,-50%)}.christianity-info-close{position:absolute;top:0;right:.15rem;z-index:2}.christianity-rule-note{display:grid;grid-template-columns:auto minmax(0,1fr);gap:.85rem;max-height:inherit;padding:1rem;overflow-y:auto;border:1px solid rgba(36,48,68,.14);border-radius:.9rem;background:linear-gradient(180deg,#fffffff7,#f8fafcf7),radial-gradient(circle at 8% 0%,rgba(37,99,235,.1),transparent 38%);box-shadow:0 1.2rem 2.6rem #102a433d,inset 0 0 0 .25rem #ffffff85}.christianity-rule-note-icon{display:grid;place-items:center;width:2.1rem;height:2.1rem;border-radius:999px;background:color-mix(in srgb,var(--christianity-theme-focus) 12%,#ffffff);color:var(--christianity-theme-focus);font-size:1rem;font-weight:900;box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--christianity-theme-focus) 24%,transparent)}.christianity-rule-note small,.christianity-rule-note strong,.christianity-rule-note p,.christianity-rule-note h2{margin:0}.christianity-rule-note small{color:#1f29339e;font-size:.78rem;font-weight:800;text-transform:uppercase}.christianity-rule-note h2{margin-top:.18rem;font-size:clamp(1.5rem,7vw,2.2rem);line-height:1.05}.christianity-rule-note strong{display:inline-flex;width:fit-content;margin-top:.55rem;padding:.22rem .55rem;border-radius:999px;background:#edf2f7;font-size:.92rem}.christianity-rule-note p{margin-top:.75rem;color:#1f2933c7;line-height:1.45}.christianity-rule-note ul{display:grid;gap:.45rem;margin:.8rem 0 0;padding-left:1.05rem;color:#1f2933c7;line-height:1.35}.christianity-floating-card>small,.christianity-floating-card>span{color:#1f2933a3}.christianity-floating-card>strong{font-size:clamp(1.55rem,8vw,2.35rem);line-height:1.05}.christianity-floating-card>p{margin:0;align-self:end;font-size:.95rem;line-height:1.35}.christianity-preview-rule-note{position:relative;z-index:4;display:grid;grid-template-columns:auto minmax(0,1fr);gap:.65rem;align-items:start;padding:.75rem .85rem;border:1px solid rgba(36,48,68,.14);border-radius:.75rem;background:linear-gradient(180deg,#fffffff5,#f8fafcf5),radial-gradient(circle at 8% 0%,rgba(37,99,235,.08),transparent 44%);box-shadow:0 .75rem 1.6rem #102a431f}.christianity-preview-rule-note small,.christianity-preview-rule-note strong,.christianity-preview-rule-note p{margin:0}.christianity-preview-rule-note small{color:#1f293394;font-size:.68rem;font-weight:800;text-transform:uppercase}.christianity-preview-rule-note strong{display:block;margin-top:.08rem;font-size:.92rem;line-height:1.1}.christianity-preview-rule-note p{margin-top:.22rem;color:#1f2933bd;font-size:.82rem;line-height:1.32}@media (min-width: 52rem){.christianity-floating-card-shell{width:min(22rem,calc(67dvh - 5.85rem),calc(100vw - 3rem))}.christianity-floating-card{min-height:0;padding:0}}@media (max-width: 51.99rem){.christianity-floating-card-shell{top:calc(50% + .7rem);gap:.45rem;max-height:calc(100dvh - 3.25rem);padding-top:2.15rem}.christianity-floating-card-close{min-height:1.9rem;padding:0 .58rem;font-size:.72rem}.christianity-preview-nav{top:calc(50% - .85rem);width:2rem;height:2rem}.christianity-preview-nav--previous{left:-.35rem}.christianity-preview-nav--next{right:-.35rem}.christianity-preview-rule-note{max-height:min(8.25rem,24dvh);padding:.62rem .68rem;overflow-y:auto;scrollbar-color:rgba(36,48,68,.28) transparent;scrollbar-gutter:stable}.christianity-preview-rule-note .christianity-rule-note-icon{width:1.8rem;height:1.8rem;font-size:.9rem}.christianity-preview-rule-note strong{font-size:.86rem}.christianity-preview-rule-note p{font-size:.78rem;line-height:1.28}}.christianity-history-backdrop{z-index:40}.christianity-history-drawer{position:fixed;right:auto;bottom:max(.5rem,env(safe-area-inset-bottom));left:50%;z-index:41;display:grid;grid-template-rows:auto minmax(0,1fr);gap:.75rem;width:min(calc(100vw - 1rem),44rem);min-height:min(18rem,calc(100dvh - 1rem));max-height:min(32rem,calc(100dvh - 2rem));padding:.8rem;border:1px solid rgba(36,48,68,.16);border-radius:.75rem;background:#fffffffa;box-shadow:0 1.5rem 4rem #102a4347;transform:translate(-50%)}.christianity-history-drawer header{display:flex;align-items:center;justify-content:space-between;gap:.75rem}.christianity-history-drawer h2,.christianity-history-drawer p{margin:0}.christianity-history-drawer header span{display:grid;place-items:center;min-width:1.85rem;height:1.85rem;border-radius:999px;background:#edf2f7;font-weight:800}.christianity-dialog-actions{display:flex;align-items:center;gap:.45rem}.christianity-dialog-close{min-height:1.85rem;padding:0 .62rem;border:1px solid rgba(36,48,68,.14);border-radius:999px;background:#fff;color:#1f2933c7;font:inherit;font-size:.76rem;font-weight:800;box-shadow:0 .35rem .8rem #102a4314}.christianity-history-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(5.4rem,1fr));gap:.55rem;min-height:0;overflow-y:scroll;scrollbar-color:rgba(36,48,68,.32) rgba(226,232,240,.72);scrollbar-gutter:stable;padding:.1rem .1rem .25rem}.christianity-history-grid::-webkit-scrollbar,.christianity-offering-list::-webkit-scrollbar{width:.65rem}.christianity-history-grid::-webkit-scrollbar-track,.christianity-offering-list::-webkit-scrollbar-track{border-radius:999px;background:#e2e8f0b8}.christianity-history-grid::-webkit-scrollbar-thumb,.christianity-offering-list::-webkit-scrollbar-thumb{border:.14rem solid rgba(226,232,240,.72);border-radius:999px;background:#24304452}.christianity-offerings-drawer{grid-template-rows:auto auto minmax(0,1fr);width:min(calc(100vw - 1rem),48rem);min-height:min(20rem,calc(100dvh - 1rem));max-height:min(34rem,calc(100dvh - 2rem))}.christianity-offerings-note{display:grid;grid-template-columns:auto minmax(0,1fr);gap:.65rem;align-items:start;padding:.72rem .8rem;border:1px solid rgba(36,48,68,.12);border-radius:.7rem;background:linear-gradient(180deg,#fffffff5,#f8fafcf5),radial-gradient(circle at 8% 0%,rgba(214,162,29,.12),transparent 42%)}.christianity-offerings-note p{margin:0;color:#1f2933c2;font-size:.86rem;line-height:1.35}.christianity-offering-list{display:grid;gap:.6rem;min-height:0;overflow-y:scroll;scrollbar-color:rgba(36,48,68,.32) rgba(226,232,240,.72);scrollbar-gutter:stable;padding:.1rem}.christianity-offering-row{display:grid;grid-template-columns:minmax(5.4rem,6.5rem) minmax(0,1fr);gap:.65rem;align-items:center;padding:.45rem;border:1px solid rgba(36,48,68,.12);border-radius:.65rem;background:#fff}.christianity-offering-row.is-exhausted{opacity:.68}.christianity-gallery-drawer{grid-template-rows:auto auto auto minmax(0,1fr);width:min(calc(100vw - 1rem),50rem);min-height:min(22rem,calc(100dvh - 1rem));max-height:min(36rem,calc(100dvh - 2rem))}.christianity-gallery-drawer header>div:first-child{display:grid;gap:.15rem;min-width:0}.christianity-gallery-drawer header p{color:#1f293394;font-size:.82rem}.christianity-gallery-controls{display:grid;grid-template-columns:minmax(0,1fr) minmax(8.5rem,13rem);gap:.65rem}.christianity-gallery-controls label{display:grid;gap:.25rem;min-width:0;color:#1f29339e;font-size:.74rem;font-weight:800}.christianity-gallery-controls input,.christianity-gallery-controls select{width:100%;min-width:0;min-height:2.35rem;padding:0 .75rem;border:1px solid rgba(36,48,68,.16);border-radius:.65rem;background:#fff;color:var(--christianity-theme-ink);font:inherit;font-size:.9rem}.christianity-gallery-edition-strip{display:flex;gap:.45rem;overflow-x:auto;padding-bottom:.1rem}.christianity-gallery-edition-strip button{display:inline-flex;align-items:center;gap:.45rem;min-height:2.35rem;padding:0 .75rem;border:1px solid rgba(214,162,29,.38);border-radius:999px;background:var(--christianity-theme-parchment);color:var(--christianity-theme-ink);font:inherit;font-size:.82rem;font-weight:800}.christianity-gallery-edition-strip img{width:1.2rem;height:1.2rem;object-fit:contain}.christianity-gallery-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(5.8rem,6.8rem));justify-content:center;align-content:start;gap:.65rem;min-height:0;overflow-y:scroll;scrollbar-color:rgba(36,48,68,.32) rgba(226,232,240,.72);scrollbar-gutter:stable;padding:.1rem .1rem .35rem}.christianity-gallery-grid::-webkit-scrollbar{width:.65rem}.christianity-gallery-grid::-webkit-scrollbar-track{border-radius:999px;background:#e2e8f0b8}.christianity-gallery-grid::-webkit-scrollbar-thumb{border:.14rem solid rgba(226,232,240,.72);border-radius:999px;background:#24304452}.christianity-offering-card{position:relative;display:grid;grid-template-rows:auto minmax(0,1fr) auto;align-content:stretch;gap:.26rem;width:100%;min-height:7.7rem;padding:.58rem;overflow:hidden;text-align:left;background:linear-gradient(180deg,#fffffff5,#f8fafcf5),radial-gradient(circle at 78% 14%,rgba(250,204,21,.78) 0 .42rem,transparent .44rem);box-shadow:0 .45rem 1rem #102a431a}.christianity-offering-card small{min-width:0;overflow:hidden;color:#1f293394;font-size:.62rem;font-weight:800;line-height:1;text-overflow:ellipsis;text-transform:uppercase;white-space:nowrap}.christianity-offering-card strong{display:-webkit-box;align-self:start;min-width:0;margin-top:.1rem;overflow:hidden;overflow-wrap:anywhere;font-size:.88rem;line-height:1.05;-webkit-box-orient:vertical;-webkit-line-clamp:3}.christianity-offering-card span{position:absolute;right:.42rem;bottom:.42rem;display:grid;place-items:center;min-width:1.55rem;height:1.55rem;padding:0 .28rem;border-radius:999px;background:#edf2f7;font-size:.82rem;font-weight:900}.christianity-offering-card em{align-self:end;max-width:calc(100% - 1.9rem);overflow:hidden;color:#1f29339e;font-size:.64rem;font-style:normal;font-weight:800;line-height:1.05;text-overflow:ellipsis;white-space:nowrap}.christianity-offering-card p,.christianity-offering-row p{margin:0}.christianity-offering-card p{align-self:end;color:#1f2933a3;font-size:.72rem;line-height:1.2}.christianity-offering-row>div{display:grid;gap:.35rem;align-content:center;min-width:0}.christianity-offering-row>div p{color:#1f2933b8;font-size:.85rem;line-height:1.3}.christianity-offering-row>div button{justify-self:start;min-height:2.2rem;padding:0 .7rem;border:1px solid rgba(16,42,67,.16);border-radius:.5rem;background:#102a43;color:#fff;font:inherit;font-weight:800}.christianity-offering-row>div button:disabled{background:#e2e8f0;color:#1f293394}.christianity-history-grid .christianity-render-card-button{justify-self:center;width:min(100%,6.4rem)}.christianity-gallery-grid .christianity-render-card-button{justify-self:center;width:min(100%,7rem)}.christianity-offering-card.christianity-render-card-button{width:min(100%,5.8rem);min-height:0;padding:0;border:0;background:transparent;box-shadow:none}button{cursor:pointer}button:disabled{cursor:not-allowed;opacity:.55}button:focus-visible{outline:.1875rem solid color-mix(in srgb,var(--christianity-theme-focus) 24%,transparent);outline-offset:.125rem}:host-context(.dark),:host-context(.ion-palette-dark),:host-context(html.ion-palette-dark),:host-context(body.dark),:host-context([data-theme=\"dark\"]){--christianity-theme-ink: var(--ion-text-color, #e5edf8);--christianity-theme-surface: #111827;--christianity-theme-parchment: #13223a;--christianity-theme-olive: #93c5fd;--christianity-theme-gold: #60a5fa;--christianity-theme-gold-soft: rgba(96, 165, 250, .18);--christianity-theme-gold-ring: rgba(147, 197, 253, .42);--christianity-theme-glow: rgba(96, 165, 250, .24);--christianity-theme-focus: #93c5fd;--christianity-theme-shadow: rgba(0, 0, 0, .34);--christianity-theme-shadow-strong: rgba(0, 0, 0, .48);--christianity-card-back: linear-gradient(135deg, rgba(147, 197, 253, .2), rgba(15, 23, 42, .08)), repeating-linear-gradient(45deg, #1e3a5f 0 .33rem, #0f172a .33rem .66rem);--christianity-card-back-soft: linear-gradient(135deg, rgba(147, 197, 253, .15), rgba(15, 23, 42, .06)), repeating-linear-gradient(45deg, #1e3a5f 0 .33rem, #0f172a .33rem .66rem);color-scheme:dark}:host-context(.dark) .christianity-shell,:host-context(.ion-palette-dark) .christianity-shell,:host-context(html.ion-palette-dark) .christianity-shell,:host-context(body.dark) .christianity-shell,:host-context([data-theme=\"dark\"]) .christianity-shell{border-color:#94a3b82e;background:#07111f}:host-context(.dark) .christianity-gallery-open,:host-context(.ion-palette-dark) .christianity-gallery-open,:host-context(html.ion-palette-dark) .christianity-gallery-open,:host-context(body.dark) .christianity-gallery-open,:host-context([data-theme=\"dark\"]) .christianity-gallery-open,:host-context(.dark) .christianity-secondary-action,:host-context(.ion-palette-dark) .christianity-secondary-action,:host-context(html.ion-palette-dark) .christianity-secondary-action,:host-context(body.dark) .christianity-secondary-action,:host-context([data-theme=\"dark\"]) .christianity-secondary-action,:host-context(.dark) .christianity-gallery-edition-strip button,:host-context(.ion-palette-dark) .christianity-gallery-edition-strip button,:host-context(html.ion-palette-dark) .christianity-gallery-edition-strip button,:host-context(body.dark) .christianity-gallery-edition-strip button,:host-context([data-theme=\"dark\"]) .christianity-gallery-edition-strip button{border-color:#93c5fd5c;background:linear-gradient(180deg,#1e3a5fd1,#0f172ae0),radial-gradient(circle at 20% 0%,rgba(96,165,250,.16),transparent 42%);color:var(--christianity-theme-ink);box-shadow:0 .55rem 1.2rem #0000003d}:host-context(.dark) .christianity-splash,:host-context(.ion-palette-dark) .christianity-splash,:host-context(html.ion-palette-dark) .christianity-splash,:host-context(body.dark) .christianity-splash,:host-context([data-theme=\"dark\"]) .christianity-splash,:host-context(.dark) .christianity-start,:host-context(.ion-palette-dark) .christianity-start,:host-context(html.ion-palette-dark) .christianity-start,:host-context(body.dark) .christianity-start,:host-context([data-theme=\"dark\"]) .christianity-start{border-color:#93c5fd38;background:radial-gradient(circle at 50% 18%,rgba(96,165,250,.16),transparent 22rem),linear-gradient(180deg,#0f172ae0,#07111ff7),var(--christianity-card-back-soft);box-shadow:0 1.2rem 3.2rem #00000047}:host-context(.dark) .christianity-start__cards article,:host-context(.ion-palette-dark) .christianity-start__cards article,:host-context(html.ion-palette-dark) .christianity-start__cards article,:host-context(body.dark) .christianity-start__cards article,:host-context([data-theme=\"dark\"]) .christianity-start__cards article,:host-context(.dark) .christianity-start__modes article,:host-context(.ion-palette-dark) .christianity-start__modes article,:host-context(html.ion-palette-dark) .christianity-start__modes article,:host-context(body.dark) .christianity-start__modes article,:host-context([data-theme=\"dark\"]) .christianity-start__modes article,:host-context(.dark) .christianity-start__status span,:host-context(.ion-palette-dark) .christianity-start__status span,:host-context(html.ion-palette-dark) .christianity-start__status span,:host-context(body.dark) .christianity-start__status span,:host-context([data-theme=\"dark\"]) .christianity-start__status span,:host-context(.dark) .christianity-start__modes article>span,:host-context(.ion-palette-dark) .christianity-start__modes article>span,:host-context(html.ion-palette-dark) .christianity-start__modes article>span,:host-context(body.dark) .christianity-start__modes article>span,:host-context([data-theme=\"dark\"]) .christianity-start__modes article>span{border-color:#94a3b833;background:#0f172aad;box-shadow:0 .75rem 1.7rem #00000038}:host-context(.dark) .christianity-splash p,:host-context(.ion-palette-dark) .christianity-splash p,:host-context(html.ion-palette-dark) .christianity-splash p,:host-context(body.dark) .christianity-splash p,:host-context([data-theme=\"dark\"]) .christianity-splash p,:host-context(.dark) .christianity-start__copy p,:host-context(.ion-palette-dark) .christianity-start__copy p,:host-context(html.ion-palette-dark) .christianity-start__copy p,:host-context(body.dark) .christianity-start__copy p,:host-context([data-theme=\"dark\"]) .christianity-start__copy p,:host-context(.dark) .christianity-start__cards p,:host-context(.ion-palette-dark) .christianity-start__cards p,:host-context(html.ion-palette-dark) .christianity-start__cards p,:host-context(body.dark) .christianity-start__cards p,:host-context([data-theme=\"dark\"]) .christianity-start__cards p,:host-context(.dark) .christianity-start__modes p,:host-context(.ion-palette-dark) .christianity-start__modes p,:host-context(html.ion-palette-dark) .christianity-start__modes p,:host-context(body.dark) .christianity-start__modes p,:host-context([data-theme=\"dark\"]) .christianity-start__modes p,:host-context(.dark) .christianity-header p,:host-context(.ion-palette-dark) .christianity-header p,:host-context(html.ion-palette-dark) .christianity-header p,:host-context(body.dark) .christianity-header p,:host-context([data-theme=\"dark\"]) .christianity-header p,:host-context(.dark) .christianity-match-player small,:host-context(.ion-palette-dark) .christianity-match-player small,:host-context(html.ion-palette-dark) .christianity-match-player small,:host-context(body.dark) .christianity-match-player small,:host-context([data-theme=\"dark\"]) .christianity-match-player small,:host-context(.dark) .christianity-scoreboard span,:host-context(.ion-palette-dark) .christianity-scoreboard span,:host-context(html.ion-palette-dark) .christianity-scoreboard span,:host-context(body.dark) .christianity-scoreboard span,:host-context([data-theme=\"dark\"]) .christianity-scoreboard span{color:#e2e8f0bd}:host-context(.dark) .christianity-turn,:host-context(.ion-palette-dark) .christianity-turn,:host-context(html.ion-palette-dark) .christianity-turn,:host-context(body.dark) .christianity-turn,:host-context([data-theme=\"dark\"]) .christianity-turn,:host-context(.dark) .christianity-leader,:host-context(.ion-palette-dark) .christianity-leader,:host-context(html.ion-palette-dark) .christianity-leader,:host-context(body.dark) .christianity-leader,:host-context([data-theme=\"dark\"]) .christianity-leader,:host-context(.dark) .christianity-offerings,:host-context(.ion-palette-dark) .christianity-offerings,:host-context(html.ion-palette-dark) .christianity-offerings,:host-context(body.dark) .christianity-offerings,:host-context([data-theme=\"dark\"]) .christianity-offerings,:host-context(.dark) .christianity-hidden-hand,:host-context(.ion-palette-dark) .christianity-hidden-hand,:host-context(html.ion-palette-dark) .christianity-hidden-hand,:host-context(body.dark) .christianity-hidden-hand,:host-context([data-theme=\"dark\"]) .christianity-hidden-hand,:host-context(.dark) .christianity-pile,:host-context(.ion-palette-dark) .christianity-pile,:host-context(html.ion-palette-dark) .christianity-pile,:host-context(body.dark) .christianity-pile,:host-context([data-theme=\"dark\"]) .christianity-pile,:host-context(.dark) .christianity-deck,:host-context(.ion-palette-dark) .christianity-deck,:host-context(html.ion-palette-dark) .christianity-deck,:host-context(body.dark) .christianity-deck,:host-context([data-theme=\"dark\"]) .christianity-deck,:host-context(.dark) .christianity-place,:host-context(.ion-palette-dark) .christianity-place,:host-context(html.ion-palette-dark) .christianity-place,:host-context(body.dark) .christianity-place,:host-context([data-theme=\"dark\"]) .christianity-place,:host-context(.dark) .christianity-match-strip,:host-context(.ion-palette-dark) .christianity-match-strip,:host-context(html.ion-palette-dark) .christianity-match-strip,:host-context(body.dark) .christianity-match-strip,:host-context([data-theme=\"dark\"]) .christianity-match-strip,:host-context(.dark) .christianity-actions,:host-context(.ion-palette-dark) .christianity-actions,:host-context(html.ion-palette-dark) .christianity-actions,:host-context(body.dark) .christianity-actions,:host-context([data-theme=\"dark\"]) .christianity-actions,:host-context(.dark) .christianity-history,:host-context(.ion-palette-dark) .christianity-history,:host-context(html.ion-palette-dark) .christianity-history,:host-context(body.dark) .christianity-history,:host-context([data-theme=\"dark\"]) .christianity-history{border-color:#94a3b82e;background:#0f172ad1}:host-context(.dark) .christianity-turn.is-own-turn,:host-context(.ion-palette-dark) .christianity-turn.is-own-turn,:host-context(html.ion-palette-dark) .christianity-turn.is-own-turn,:host-context(body.dark) .christianity-turn.is-own-turn,:host-context([data-theme=\"dark\"]) .christianity-turn.is-own-turn{border-color:#2dd4bf5c;background:#14534c5c}:host-context(.dark) .christianity-table,:host-context(.ion-palette-dark) .christianity-table,:host-context(html.ion-palette-dark) .christianity-table,:host-context(body.dark) .christianity-table,:host-context([data-theme=\"dark\"]) .christianity-table{background:linear-gradient(180deg,#10233d,#0b1728)}:host-context(.dark) .christianity-player-side,:host-context(.ion-palette-dark) .christianity-player-side,:host-context(html.ion-palette-dark) .christianity-player-side,:host-context(body.dark) .christianity-player-side,:host-context([data-theme=\"dark\"]) .christianity-player-side{background:#0f172a57}:host-context(.dark) .christianity-battle-zone,:host-context(.ion-palette-dark) .christianity-battle-zone,:host-context(html.ion-palette-dark) .christianity-battle-zone,:host-context(body.dark) .christianity-battle-zone,:host-context([data-theme=\"dark\"]) .christianity-battle-zone,:host-context(.dark) .christianity-shared-zone,:host-context(.ion-palette-dark) .christianity-shared-zone,:host-context(html.ion-palette-dark) .christianity-shared-zone,:host-context(body.dark) .christianity-shared-zone,:host-context([data-theme=\"dark\"]) .christianity-shared-zone{background:#0f172a94}:host-context(.dark) .christianity-battle-zone.is-placing-card,:host-context(.ion-palette-dark) .christianity-battle-zone.is-placing-card,:host-context(html.ion-palette-dark) .christianity-battle-zone.is-placing-card,:host-context(body.dark) .christianity-battle-zone.is-placing-card,:host-context([data-theme=\"dark\"]) .christianity-battle-zone.is-placing-card{background:linear-gradient(180deg,#1e3a5fd1,#0f172ab8),#0f172a94}:host-context(.dark) .christianity-card,:host-context(.ion-palette-dark) .christianity-card,:host-context(html.ion-palette-dark) .christianity-card,:host-context(body.dark) .christianity-card,:host-context([data-theme=\"dark\"]) .christianity-card,:host-context(.dark) .christianity-slot,:host-context(.ion-palette-dark) .christianity-slot,:host-context(html.ion-palette-dark) .christianity-slot,:host-context(body.dark) .christianity-slot,:host-context([data-theme=\"dark\"]) .christianity-slot{border-color:#94a3b83d;background:#0f172a8a}:host-context(.dark) .christianity-slot--play-target,:host-context(.ion-palette-dark) .christianity-slot--play-target,:host-context(html.ion-palette-dark) .christianity-slot--play-target,:host-context(body.dark) .christianity-slot--play-target,:host-context([data-theme=\"dark\"]) .christianity-slot--play-target{color:var(--christianity-theme-ink);background:linear-gradient(180deg,#2563eb3d,#0f172ac7),#0f172abd}:host-context(.dark) .christianity-slot--play-target span,:host-context(.ion-palette-dark) .christianity-slot--play-target span,:host-context(html.ion-palette-dark) .christianity-slot--play-target span,:host-context(body.dark) .christianity-slot--play-target span,:host-context([data-theme=\"dark\"]) .christianity-slot--play-target span,:host-context(.dark) .christianity-card strong,:host-context(.ion-palette-dark) .christianity-card strong,:host-context(html.ion-palette-dark) .christianity-card strong,:host-context(body.dark) .christianity-card strong,:host-context([data-theme=\"dark\"]) .christianity-card strong{background:#1e293beb}:host-context(.dark) .christianity-offering-pile,:host-context(.ion-palette-dark) .christianity-offering-pile,:host-context(html.ion-palette-dark) .christianity-offering-pile,:host-context(body.dark) .christianity-offering-pile,:host-context([data-theme=\"dark\"]) .christianity-offering-pile,:host-context(.dark) .christianity-zone-card,:host-context(.ion-palette-dark) .christianity-zone-card,:host-context(html.ion-palette-dark) .christianity-zone-card,:host-context(body.dark) .christianity-zone-card,:host-context([data-theme=\"dark\"]) .christianity-zone-card,:host-context(.dark) .christianity-zone-pile,:host-context(.ion-palette-dark) .christianity-zone-pile,:host-context(html.ion-palette-dark) .christianity-zone-pile,:host-context(body.dark) .christianity-zone-pile,:host-context([data-theme=\"dark\"]) .christianity-zone-pile{border-color:#94a3b83d;background:linear-gradient(180deg,#111827f5,#0f172af0),radial-gradient(circle at 14% 0%,rgba(96,165,250,.12),transparent 42%);color:var(--christianity-theme-ink);box-shadow:0 .55rem 1.25rem #00000047,inset 0 0 0 .12rem #ffffff08}:host-context(.dark) .christianity-offering-pile>span,:host-context(.ion-palette-dark) .christianity-offering-pile>span,:host-context(html.ion-palette-dark) .christianity-offering-pile>span,:host-context(body.dark) .christianity-offering-pile>span,:host-context([data-theme=\"dark\"]) .christianity-offering-pile>span,:host-context(.dark) .christianity-zone-card>span,:host-context(.ion-palette-dark) .christianity-zone-card>span,:host-context(html.ion-palette-dark) .christianity-zone-card>span,:host-context(body.dark) .christianity-zone-card>span,:host-context([data-theme=\"dark\"]) .christianity-zone-card>span,:host-context(.dark) .christianity-zone-pile>span,:host-context(.ion-palette-dark) .christianity-zone-pile>span,:host-context(html.ion-palette-dark) .christianity-zone-pile>span,:host-context(body.dark) .christianity-zone-pile>span,:host-context([data-theme=\"dark\"]) .christianity-zone-pile>span,:host-context(.dark) .christianity-player-badge,:host-context(.ion-palette-dark) .christianity-player-badge,:host-context(html.ion-palette-dark) .christianity-player-badge,:host-context(body.dark) .christianity-player-badge,:host-context([data-theme=\"dark\"]) .christianity-player-badge{color:#e2e8f0c7}:host-context(.dark) .christianity-offering-pile>strong,:host-context(.ion-palette-dark) .christianity-offering-pile>strong,:host-context(html.ion-palette-dark) .christianity-offering-pile>strong,:host-context(body.dark) .christianity-offering-pile>strong,:host-context([data-theme=\"dark\"]) .christianity-offering-pile>strong,:host-context(.dark) .christianity-zone-card>strong,:host-context(.ion-palette-dark) .christianity-zone-card>strong,:host-context(html.ion-palette-dark) .christianity-zone-card>strong,:host-context(body.dark) .christianity-zone-card>strong,:host-context([data-theme=\"dark\"]) .christianity-zone-card>strong,:host-context(.dark) .christianity-zone-pile>strong,:host-context(.ion-palette-dark) .christianity-zone-pile>strong,:host-context(html.ion-palette-dark) .christianity-zone-pile>strong,:host-context(body.dark) .christianity-zone-pile>strong,:host-context([data-theme=\"dark\"]) .christianity-zone-pile>strong,:host-context(.dark) .christianity-hand-meter,:host-context(.ion-palette-dark) .christianity-hand-meter,:host-context(html.ion-palette-dark) .christianity-hand-meter,:host-context(body.dark) .christianity-hand-meter,:host-context([data-theme=\"dark\"]) .christianity-hand-meter{border-color:#94a3b833;background:#0f172ae0;color:var(--christianity-theme-ink);box-shadow:0 .35rem .8rem #00000047}:host-context(.dark) .christianity-hand-meter span,:host-context(.ion-palette-dark) .christianity-hand-meter span,:host-context(html.ion-palette-dark) .christianity-hand-meter span,:host-context(body.dark) .christianity-hand-meter span,:host-context([data-theme=\"dark\"]) .christianity-hand-meter span{color:#e2e8f0b3}:host-context(.dark) .christianity-offering-pile i,:host-context(.ion-palette-dark) .christianity-offering-pile i,:host-context(html.ion-palette-dark) .christianity-offering-pile i,:host-context(body.dark) .christianity-offering-pile i,:host-context([data-theme=\"dark\"]) .christianity-offering-pile i{border-color:#94a3b833;background:linear-gradient(180deg,#e2e8f0f0,#cbd5e1e6),radial-gradient(circle at 78% 18%,#facc15 0 .38rem,transparent .4rem)}:host-context(.dark) .christianity-zone-pile i,:host-context(.ion-palette-dark) .christianity-zone-pile i,:host-context(html.ion-palette-dark) .christianity-zone-pile i,:host-context(body.dark) .christianity-zone-pile i,:host-context([data-theme=\"dark\"]) .christianity-zone-pile i{border-color:#94a3b838;background:#e2e8f0eb;box-shadow:0 .35rem .85rem #00000042}:host-context(.dark) .christianity-zone-pile i:nth-child(3),:host-context(.ion-palette-dark) .christianity-zone-pile i:nth-child(3),:host-context(html.ion-palette-dark) .christianity-zone-pile i:nth-child(3),:host-context(body.dark) .christianity-zone-pile i:nth-child(3),:host-context([data-theme=\"dark\"]) .christianity-zone-pile i:nth-child(3){background:var(--christianity-card-back)}:host-context(.dark) .christianity-end-turn:disabled,:host-context(.ion-palette-dark) .christianity-end-turn:disabled,:host-context(html.ion-palette-dark) .christianity-end-turn:disabled,:host-context(body.dark) .christianity-end-turn:disabled,:host-context([data-theme=\"dark\"]) .christianity-end-turn:disabled{border-color:#94a3b829;background:#0f172a75;color:#e2e8f06b;opacity:1}:host-context(.dark) .christianity-history-drawer,:host-context(.ion-palette-dark) .christianity-history-drawer,:host-context(html.ion-palette-dark) .christianity-history-drawer,:host-context(body.dark) .christianity-history-drawer,:host-context([data-theme=\"dark\"]) .christianity-history-drawer,:host-context(.dark) .christianity-rule-note,:host-context(.ion-palette-dark) .christianity-rule-note,:host-context(html.ion-palette-dark) .christianity-rule-note,:host-context(body.dark) .christianity-rule-note,:host-context([data-theme=\"dark\"]) .christianity-rule-note,:host-context(.dark) .christianity-preview-rule-note,:host-context(.ion-palette-dark) .christianity-preview-rule-note,:host-context(html.ion-palette-dark) .christianity-preview-rule-note,:host-context(body.dark) .christianity-preview-rule-note,:host-context([data-theme=\"dark\"]) .christianity-preview-rule-note{border-color:#94a3b82e;background:linear-gradient(180deg,#0f172af5,#111827f5),radial-gradient(circle at 8% 0%,rgba(96,165,250,.12),transparent 40%);box-shadow:0 1.5rem 4rem #0000006b}:host-context(.dark) .christianity-dialog-close,:host-context(.ion-palette-dark) .christianity-dialog-close,:host-context(html.ion-palette-dark) .christianity-dialog-close,:host-context(body.dark) .christianity-dialog-close,:host-context([data-theme=\"dark\"]) .christianity-dialog-close,:host-context(.dark) .christianity-floating-card-close,:host-context(.ion-palette-dark) .christianity-floating-card-close,:host-context(html.ion-palette-dark) .christianity-floating-card-close,:host-context(body.dark) .christianity-floating-card-close,:host-context([data-theme=\"dark\"]) .christianity-floating-card-close,:host-context(.dark) .christianity-preview-nav,:host-context(.ion-palette-dark) .christianity-preview-nav,:host-context(html.ion-palette-dark) .christianity-preview-nav,:host-context(body.dark) .christianity-preview-nav,:host-context([data-theme=\"dark\"]) .christianity-preview-nav{border-color:#94a3b838;background:#0f172af0;color:var(--christianity-theme-ink);box-shadow:0 .35rem .8rem #0000004d}:host-context(.dark) .christianity-history-drawer header span,:host-context(.ion-palette-dark) .christianity-history-drawer header span,:host-context(html.ion-palette-dark) .christianity-history-drawer header span,:host-context(body.dark) .christianity-history-drawer header span,:host-context([data-theme=\"dark\"]) .christianity-history-drawer header span,:host-context(.dark) .christianity-rule-note strong,:host-context(.ion-palette-dark) .christianity-rule-note strong,:host-context(html.ion-palette-dark) .christianity-rule-note strong,:host-context(body.dark) .christianity-rule-note strong,:host-context([data-theme=\"dark\"]) .christianity-rule-note strong{background:#1e293beb}:host-context(.dark) .christianity-rule-note small,:host-context(.ion-palette-dark) .christianity-rule-note small,:host-context(html.ion-palette-dark) .christianity-rule-note small,:host-context(body.dark) .christianity-rule-note small,:host-context([data-theme=\"dark\"]) .christianity-rule-note small,:host-context(.dark) .christianity-preview-rule-note small,:host-context(.ion-palette-dark) .christianity-preview-rule-note small,:host-context(html.ion-palette-dark) .christianity-preview-rule-note small,:host-context(body.dark) .christianity-preview-rule-note small,:host-context([data-theme=\"dark\"]) .christianity-preview-rule-note small,:host-context(.dark) .christianity-gallery-drawer header p,:host-context(.ion-palette-dark) .christianity-gallery-drawer header p,:host-context(html.ion-palette-dark) .christianity-gallery-drawer header p,:host-context(body.dark) .christianity-gallery-drawer header p,:host-context([data-theme=\"dark\"]) .christianity-gallery-drawer header p,:host-context(.dark) .christianity-gallery-controls label,:host-context(.ion-palette-dark) .christianity-gallery-controls label,:host-context(html.ion-palette-dark) .christianity-gallery-controls label,:host-context(body.dark) .christianity-gallery-controls label,:host-context([data-theme=\"dark\"]) .christianity-gallery-controls label{color:#e2e8f0ad}:host-context(.dark) .christianity-rule-note p,:host-context(.ion-palette-dark) .christianity-rule-note p,:host-context(html.ion-palette-dark) .christianity-rule-note p,:host-context(body.dark) .christianity-rule-note p,:host-context([data-theme=\"dark\"]) .christianity-rule-note p,:host-context(.dark) .christianity-rule-note ul,:host-context(.ion-palette-dark) .christianity-rule-note ul,:host-context(html.ion-palette-dark) .christianity-rule-note ul,:host-context(body.dark) .christianity-rule-note ul,:host-context([data-theme=\"dark\"]) .christianity-rule-note ul,:host-context(.dark) .christianity-preview-rule-note p,:host-context(.ion-palette-dark) .christianity-preview-rule-note p,:host-context(html.ion-palette-dark) .christianity-preview-rule-note p,:host-context(body.dark) .christianity-preview-rule-note p,:host-context([data-theme=\"dark\"]) .christianity-preview-rule-note p,:host-context(.dark) .christianity-offerings-note p,:host-context(.ion-palette-dark) .christianity-offerings-note p,:host-context(html.ion-palette-dark) .christianity-offerings-note p,:host-context(body.dark) .christianity-offerings-note p,:host-context([data-theme=\"dark\"]) .christianity-offerings-note p{color:#e2e8f0cc}:host-context(.dark) .christianity-gallery-controls input,:host-context(.ion-palette-dark) .christianity-gallery-controls input,:host-context(html.ion-palette-dark) .christianity-gallery-controls input,:host-context(body.dark) .christianity-gallery-controls input,:host-context([data-theme=\"dark\"]) .christianity-gallery-controls input,:host-context(.dark) .christianity-gallery-controls select,:host-context(.ion-palette-dark) .christianity-gallery-controls select,:host-context(html.ion-palette-dark) .christianity-gallery-controls select,:host-context(body.dark) .christianity-gallery-controls select,:host-context([data-theme=\"dark\"]) .christianity-gallery-controls select,:host-context(.dark) .christianity-offering-row,:host-context(.ion-palette-dark) .christianity-offering-row,:host-context(html.ion-palette-dark) .christianity-offering-row,:host-context(body.dark) .christianity-offering-row,:host-context([data-theme=\"dark\"]) .christianity-offering-row,:host-context(.dark) .christianity-offerings-note,:host-context(.ion-palette-dark) .christianity-offerings-note,:host-context(html.ion-palette-dark) .christianity-offerings-note,:host-context(body.dark) .christianity-offerings-note,:host-context([data-theme=\"dark\"]) .christianity-offerings-note{border-color:#94a3b833;background:#0f172ac7;color:var(--christianity-theme-ink)}:host-context(.dark) .christianity-history-grid,:host-context(.ion-palette-dark) .christianity-history-grid,:host-context(html.ion-palette-dark) .christianity-history-grid,:host-context(body.dark) .christianity-history-grid,:host-context([data-theme=\"dark\"]) .christianity-history-grid,:host-context(.dark) .christianity-offering-list,:host-context(.ion-palette-dark) .christianity-offering-list,:host-context(html.ion-palette-dark) .christianity-offering-list,:host-context(body.dark) .christianity-offering-list,:host-context([data-theme=\"dark\"]) .christianity-offering-list,:host-context(.dark) .christianity-gallery-grid,:host-context(.ion-palette-dark) .christianity-gallery-grid,:host-context(html.ion-palette-dark) .christianity-gallery-grid,:host-context(body.dark) .christianity-gallery-grid,:host-context([data-theme=\"dark\"]) .christianity-gallery-grid,:host-context(.dark) .christianity-preview-rule-note,:host-context(.ion-palette-dark) .christianity-preview-rule-note,:host-context(html.ion-palette-dark) .christianity-preview-rule-note,:host-context(body.dark) .christianity-preview-rule-note,:host-context([data-theme=\"dark\"]) .christianity-preview-rule-note{scrollbar-color:rgba(148,163,184,.54) rgba(15,23,42,.86)}:host-context(.dark) .christianity-rule-note-icon,:host-context(.ion-palette-dark) .christianity-rule-note-icon,:host-context(html.ion-palette-dark) .christianity-rule-note-icon,:host-context(body.dark) .christianity-rule-note-icon,:host-context([data-theme=\"dark\"]) .christianity-rule-note-icon{background:#60a5fa29;color:#bfdbfe;box-shadow:inset 0 0 0 1px #93c5fd38}:host-context(.dark) .christianity-history-grid::-webkit-scrollbar-track,:host-context(.ion-palette-dark) .christianity-history-grid::-webkit-scrollbar-track,:host-context(html.ion-palette-dark) .christianity-history-grid::-webkit-scrollbar-track,:host-context(body.dark) .christianity-history-grid::-webkit-scrollbar-track,:host-context([data-theme=\"dark\"]) .christianity-history-grid::-webkit-scrollbar-track,:host-context(.dark) .christianity-offering-list::-webkit-scrollbar-track,:host-context(.ion-palette-dark) .christianity-offering-list::-webkit-scrollbar-track,:host-context(html.ion-palette-dark) .christianity-offering-list::-webkit-scrollbar-track,:host-context(body.dark) .christianity-offering-list::-webkit-scrollbar-track,:host-context([data-theme=\"dark\"]) .christianity-offering-list::-webkit-scrollbar-track,:host-context(.dark) .christianity-gallery-grid::-webkit-scrollbar-track,:host-context(.ion-palette-dark) .christianity-gallery-grid::-webkit-scrollbar-track,:host-context(html.ion-palette-dark) .christianity-gallery-grid::-webkit-scrollbar-track,:host-context(body.dark) .christianity-gallery-grid::-webkit-scrollbar-track,:host-context([data-theme=\"dark\"]) .christianity-gallery-grid::-webkit-scrollbar-track{background:#0f172adb}:host-context(.dark) .christianity-history-grid::-webkit-scrollbar-thumb,:host-context(.ion-palette-dark) .christianity-history-grid::-webkit-scrollbar-thumb,:host-context(html.ion-palette-dark) .christianity-history-grid::-webkit-scrollbar-thumb,:host-context(body.dark) .christianity-history-grid::-webkit-scrollbar-thumb,:host-context([data-theme=\"dark\"]) .christianity-history-grid::-webkit-scrollbar-thumb,:host-context(.dark) .christianity-offering-list::-webkit-scrollbar-thumb,:host-context(.ion-palette-dark) .christianity-offering-list::-webkit-scrollbar-thumb,:host-context(html.ion-palette-dark) .christianity-offering-list::-webkit-scrollbar-thumb,:host-context(body.dark) .christianity-offering-list::-webkit-scrollbar-thumb,:host-context([data-theme=\"dark\"]) .christianity-offering-list::-webkit-scrollbar-thumb,:host-context(.dark) .christianity-gallery-grid::-webkit-scrollbar-thumb,:host-context(.ion-palette-dark) .christianity-gallery-grid::-webkit-scrollbar-thumb,:host-context(html.ion-palette-dark) .christianity-gallery-grid::-webkit-scrollbar-thumb,:host-context(body.dark) .christianity-gallery-grid::-webkit-scrollbar-thumb,:host-context([data-theme=\"dark\"]) .christianity-gallery-grid::-webkit-scrollbar-thumb{border-color:#0f172adb;background:#94a3b88a}@media (max-width: 720px){:host{overflow-x:hidden}.christianity-shell{padding:.55rem 0 .65rem;border-right:0;border-left:0;border-radius:0}.christianity-header,.christianity-match-strip,.christianity-actions{box-sizing:border-box;width:100%;padding-right:max(.5rem,env(safe-area-inset-right));padding-left:max(.5rem,env(safe-area-inset-left))}.christianity-header,.christianity-player__summary,.christianity-shared-zone,.christianity-actions{align-items:stretch;flex-direction:column}.christianity-match-strip{grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);gap:.35rem;padding:.35rem}.christianity-match-player{gap:.35rem}.christianity-match-player small{display:none}.christianity-header-actions{align-items:flex-end;flex-direction:column}.christianity-start__cards,.christianity-start__hero{grid-template-columns:minmax(0,1fr)}.christianity-start__fan{min-height:10.5rem}.christianity-start__fan val-christianity-card{width:clamp(5.2rem,22vw,6.4rem)}.christianity-start__modes{grid-template-columns:repeat(2,minmax(0,1fr))}.christianity-splash,.christianity-start{min-height:min(30rem,calc(100dvh - 7rem));padding-right:max(.65rem,env(safe-area-inset-right));padding-left:max(.65rem,env(safe-area-inset-left));border-right:0;border-left:0;border-radius:0}.christianity-scoreboard{min-width:3.65rem;padding:0 .35rem}.christianity-scoreboard strong{font-size:1.05rem}.christianity-table{gap:.35rem;padding-right:.25rem;padding-left:.25rem}.christianity-player-side{padding:.3rem .25rem}.christianity-battle-zone{--christianity-battle-card-width: min(5.2rem, calc((100vw - 4.25rem)/4) );grid-template-columns:repeat(4,var(--christianity-battle-card-width));justify-content:center;min-height:8.75rem;overflow-x:clip}.christianity-hand-fan{min-height:11.45rem;padding-bottom:2rem;overflow:visible}.christianity-hand-shelf{min-height:12.65rem;margin-top:-1rem;padding-top:1.35rem;padding-bottom:.9rem}.christianity-hand-shelf--opponent{min-height:6.65rem;margin-top:0;margin-bottom:0;padding-top:.4rem;padding-bottom:.85rem}.christianity-player-rack{grid-template-columns:minmax(4.5rem,5.7rem) minmax(4.4rem,1fr) minmax(3.5rem,4.8rem)}.christianity-shared-zone{gap:.45rem;grid-template-columns:repeat(3,minmax(0,1fr))}.christianity-zone-card,.christianity-zone-pile{min-height:6.15rem;padding:.58rem .46rem .5rem;gap:.24rem}.christianity-zone-pile i{top:2rem;right:.52rem;width:2.35rem;height:3.25rem}.christianity-offering-pile{height:6.85rem;max-height:6.85rem;padding:.72rem .46rem .5rem;gap:.24rem}.christianity-offering-drop-target{height:6.85rem;min-height:0;max-height:6.85rem}.christianity-offering-pile i{top:2.18rem;left:50%;width:2.35rem;height:3.25rem}.christianity-card-preview-card{width:clamp(4.2rem,20vw,5.7rem);height:auto;min-height:0}.christianity-leader-card{width:clamp(4.55rem,20vw,5.7rem);min-height:0}.christianity-offering-row{grid-template-columns:minmax(5rem,5.8rem) minmax(0,1fr);gap:.5rem}.christianity-gallery-controls{grid-template-columns:minmax(0,1fr)}.christianity-gallery-grid{grid-template-columns:repeat(auto-fill,minmax(5.35rem,6.1rem));justify-content:center}.christianity-offering-card{min-height:7.25rem;padding:.5rem}.christianity-hand-fan--opponent{min-height:5.75rem;padding-bottom:.7rem}.christianity-hand-fan--opponent .christianity-hidden-card-button{width:clamp(3.35rem,15vw,4.25rem);margin-inline:-.72rem}}\n"], dependencies: [{ kind: "directive", type: CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer", "cdkDragScale"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: CdkDragPlaceholder, selector: "ng-template[cdkDragPlaceholder]", inputs: ["data"] }, { kind: "directive", type: CdkDragPreview, selector: "ng-template[cdkDragPreview]", inputs: ["data", "matchSize"] }, { kind: "directive", type: CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep", "cdkDropListElementContainer"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: LightRippleDirective, selector: "[valLightRipple]" }, { kind: "component", type: ChristianityCardComponent, selector: "val-christianity-card", inputs: ["card", "variant"] }] }); }
2002
+ }
2003
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ChristianityGameComponent, decorators: [{
2004
+ type: Component,
2005
+ args: [{ selector: 'val-christianity-game', standalone: true, imports: [CdkDrag, CdkDragPlaceholder, CdkDragPreview, CdkDropList, LightRippleDirective, ChristianityCardComponent], template: `
2006
+ <main class="christianity-shell" [class.has-modal-open]="hasModalOverlay()">
2007
+ <section class="christianity-header">
2008
+ <div>
2009
+ <p>{{ t('christianityEyebrow') }}</p>
2010
+ <h1>{{ t('christianityTitle') }}</h1>
2011
+ </div>
2012
+ <div class="christianity-header-actions">
2013
+ @if (screen() !== 'splash') {
2014
+ <button type="button" class="christianity-gallery-open" valLightRipple (click)="openGallery()">
2015
+ {{ t('christianityGallery') }}
2016
+ </button>
2017
+ }
2018
+ @if (screen() === 'table') {
2019
+ <div class="christianity-turn" [class.is-own-turn]="isOwnTurn()">
2020
+ <span>{{ t('christianityTurn') }}</span>
2021
+ <strong>{{ currentPlayer().displayName }}</strong>
2022
+ </div>
2023
+ }
2024
+ </div>
2025
+ </section>
2026
+
2027
+ @if (screen() === 'splash') {
2028
+ <section class="christianity-splash" role="status" aria-live="polite">
2029
+ <div class="christianity-splash__mark">
2030
+ <span aria-hidden="true"></span>
2031
+ <span aria-hidden="true"></span>
2032
+ <span aria-hidden="true"></span>
2033
+ </div>
2034
+ <div>
2035
+ <span>{{ t('christianitySplashEyebrow') }}</span>
2036
+ <h2>{{ t('christianitySplashTitle') }}</h2>
2037
+ <p>{{ splashStatusText() }}</p>
2038
+ </div>
2039
+ </section>
2040
+ } @else if (screen() === 'home') {
2041
+ <section class="christianity-start">
2042
+ <div class="christianity-start__hero">
2043
+ <div class="christianity-start__copy">
2044
+ <span>{{ t('christianityGenesisEdition') }}</span>
2045
+ <h2>{{ t('christianityStartTitle') }}</h2>
2046
+ <p>{{ t('christianityStartBody') }}</p>
2047
+ </div>
2048
+ <div class="christianity-start__fan" aria-hidden="true">
2049
+ @for (card of startFeaturedCards(); track card.id) {
2050
+ <val-christianity-card
2051
+ [card]="definitionToRenderCard(card)"
2052
+ variant="baby"
2053
+ [style.transform]="startFeaturedCardTransform($index)"
2054
+ ></val-christianity-card>
2055
+ }
2056
+ </div>
2057
+ </div>
2058
+ <div class="christianity-start__cards">
2059
+ <article>
2060
+ <strong>{{ t('christianityTutorialMode') }}</strong>
2061
+ <p>{{ t('christianityTutorialModeBody') }}</p>
2062
+ <button type="button" class="christianity-primary-action" valLightRipple (click)="startTutorial()">
2063
+ {{ t('christianityStartTutorial') }}
2064
+ </button>
2065
+ </article>
2066
+ <article>
2067
+ <strong>{{ t('christianityGallery') }}</strong>
2068
+ <p>{{ t('christianityGalleryModeBody') }}</p>
2069
+ <button type="button" class="christianity-secondary-action" valLightRipple (click)="openGallery()">
2070
+ {{ t('christianityOpenGallery') }}
2071
+ </button>
2072
+ </article>
2073
+ <article>
2074
+ <strong>{{ t('christianityHowToPlay') }}</strong>
2075
+ <p>{{ t('christianityHowToPlayBody') }}</p>
2076
+ <button type="button" class="christianity-secondary-action" valLightRipple (click)="inspectHowToPlay()">
2077
+ {{ t('learnMore') }}
2078
+ </button>
2079
+ </article>
2080
+ </div>
2081
+ <div class="christianity-start__status" [attr.aria-label]="t('christianityEditionStatus')">
2082
+ <span>{{ galleryEditionLabel() }}</span>
2083
+ <span>{{ t('christianityTutorialActive') }}</span>
2084
+ <span>{{ catalogStatusLabel() }}</span>
2085
+ </div>
2086
+ <section class="christianity-start__modes" [attr.aria-label]="t('christianityFutureModes')">
2087
+ @for (mode of futureModes(); track mode.title) {
2088
+ <article>
2089
+ <strong>{{ mode.title }}</strong>
2090
+ <p>{{ mode.body }}</p>
2091
+ <span>{{ t('soonTitle') }}</span>
2092
+ </article>
2093
+ }
2094
+ </section>
2095
+ </section>
2096
+ } @else {
2097
+ <section class="christianity-match-strip" [attr.aria-label]="t('christianityMatchScore')">
2098
+ <article class="christianity-match-player">
2099
+ <span class="christianity-avatar" [style.background]="player().avatarColor">{{ player().avatar }}</span>
2100
+ <div>
2101
+ <strong>{{ player().displayName }}</strong>
2102
+ <small>{{ playerLeaderDisplayName(player()) }} · {{ player().leaderHp }}/{{ player().leaderMaxHp }}</small>
2103
+ </div>
2104
+ </article>
2105
+ <div class="christianity-scoreboard">
2106
+ <span>{{ t('christianityMatch') }}</span>
2107
+ <strong>{{ game().matchScore.P1 }}-{{ game().matchScore.P2 }}</strong>
2108
+ </div>
2109
+ <article class="christianity-match-player christianity-match-player--opponent">
2110
+ <span class="christianity-avatar" [style.background]="opponent().avatarColor">{{ opponent().avatar }}</span>
2111
+ <div>
2112
+ <strong>{{ opponent().displayName }}</strong>
2113
+ <small>{{ playerLeaderDisplayName(opponent()) }} · {{ opponent().leaderHp }}/{{ opponent().leaderMaxHp }}</small>
2114
+ </div>
2115
+ </article>
2116
+ </section>
2117
+
2118
+ <section class="christianity-hand-shelf christianity-hand-shelf--opponent">
2119
+ <div class="christianity-hand-meter christianity-hand-meter--opponent">
2120
+ <span>{{ t('christianityHand') }}</span>
2121
+ <strong>{{ opponentHandCount() }}</strong>
2122
+ </div>
2123
+ <section class="christianity-hand-fan christianity-hand-fan--opponent" [attr.aria-label]="t('christianityOpponentHand')">
2124
+ @for (_ of hiddenHandCards(opponentHandCount()); track $index) {
2125
+ <button
2126
+ type="button"
2127
+ class="christianity-hidden-card-button christianity-render-card-button"
2128
+ valLightRipple
2129
+ [style.transform]="fanTransform($index, opponentHandCount(), true)"
2130
+ [attr.aria-label]="t('christianityHiddenCard')"
2131
+ >
2132
+ <val-christianity-card [card]="hiddenCardRenderCard()" variant="back"></val-christianity-card>
2133
+ </button>
2134
+ }
2135
+ </section>
2136
+ </section>
2137
+
2138
+ <section class="christianity-table" [attr.aria-label]="t('christianityTable')">
2139
+ <div class="christianity-impact-layer" aria-hidden="true">
2140
+ @for (impact of impactEvents(); track impact.id) {
2141
+ <span
2142
+ class="christianity-impact-pop"
2143
+ [class.is-damage]="impact.tone === 'damage'"
2144
+ [class.is-heal]="impact.tone === 'heal'"
2145
+ [class.is-resource]="impact.tone === 'resource'"
2146
+ [class.is-player-leader]="impact.seat === 'P1' && impact.target === 'leader'"
2147
+ [class.is-opponent-leader]="impact.seat === 'P2' && impact.target === 'leader'"
2148
+ [class.is-player-battle]="impact.seat === 'P1' && impact.target === 'battle'"
2149
+ [class.is-opponent-battle]="impact.seat === 'P2' && impact.target === 'battle'"
2150
+ [class.is-player-offerings]="impact.seat === 'P1' && impact.target === 'offerings'"
2151
+ [class.is-opponent-offerings]="impact.seat === 'P2' && impact.target === 'offerings'"
2152
+ >
2153
+ {{ impact.text }}
2154
+ </span>
2155
+ }
2156
+ </div>
2157
+ <section class="christianity-player-side christianity-player-side--opponent">
2158
+ <section class="christianity-player-rack christianity-player-rack--opponent">
2159
+ <div class="christianity-offerings-zone">
2160
+ <button type="button" class="christianity-offering-pile" valLightRipple (click)="openOfferings('P2')">
2161
+ <i aria-hidden="true"></i>
2162
+ <i aria-hidden="true"></i>
2163
+ <i aria-hidden="true"></i>
2164
+ <span>{{ t('christianityOfferings') }}</span>
2165
+ <strong>{{ readyOfferings(opponent()) }}/{{ totalOfferings(opponent()) }}</strong>
2166
+ </button>
2167
+ </div>
2168
+ <button type="button" class="christianity-leader-card christianity-render-card-button" valLightRipple [class.is-target]="selectedAttacker() && !hasOpponentGuards()" (click)="handleOpponentLeader()">
2169
+ <val-christianity-card [card]="leaderRenderCard(opponent())" variant="baby"></val-christianity-card>
2170
+ </button>
2171
+ <span class="christianity-rack-spacer" aria-hidden="true"></span>
2172
+ </section>
2173
+
2174
+ <section class="christianity-battle-zone christianity-battle-zone--opponent" [attr.aria-label]="t('christianityOpponentBattle')">
2175
+ @for (slot of battleSlots('P2'); track slot.trackId) {
2176
+ @if (slot.card) {
2177
+ <button
2178
+ type="button"
2179
+ class="christianity-card-preview-card christianity-card-preview-card--battle christianity-render-card-button"
2180
+ valLightRipple
2181
+ [class.is-target]="selectedAttacker()"
2182
+ (click)="handleOpponentCharacter(slot.card)"
2183
+ >
2184
+ <val-christianity-card [card]="characterRenderCard(slot.card)" variant="baby"></val-christianity-card>
2185
+ </button>
2186
+ } @else {
2187
+ <span class="christianity-slot"></span>
2188
+ }
2189
+ }
2190
+ </section>
2191
+ </section>
2192
+
2193
+ <section class="christianity-shared-zone" [attr.aria-label]="t('christianitySharedZone')">
2194
+ <button type="button" class="christianity-zone-pile christianity-zone-pile--history" valLightRipple (click)="openHistory()">
2195
+ <i aria-hidden="true"></i>
2196
+ <i aria-hidden="true"></i>
2197
+ <i aria-hidden="true"></i>
2198
+ <span>{{ t('christianityHistory') }}</span>
2199
+ <strong>{{ game().historyZone.length }}</strong>
2200
+ </button>
2201
+ <button type="button" class="christianity-zone-pile christianity-zone-pile--deck" valLightRipple aria-live="polite" (click)="inspectDeck()">
2202
+ <i aria-hidden="true"></i>
2203
+ <i aria-hidden="true"></i>
2204
+ <i aria-hidden="true"></i>
2205
+ <span>{{ t('christianityDeck') }}</span>
2206
+ <strong>{{ game().sharedDeck.length }}</strong>
2207
+ </button>
2208
+ <div class="christianity-zone-card">
2209
+ <span>{{ t('christianityPlace') }}</span>
2210
+ <strong>{{ t('christianityEmpty') }}</strong>
2211
+ </div>
2212
+ </section>
2213
+
2214
+ <section class="christianity-player-side">
2215
+ <section class="christianity-battle-zone" [class.is-placing-card]="canPlaceSelectedCharacter() || isDraggingCharacter()" [attr.aria-label]="t('christianityYourBattle')">
2216
+ @for (slot of battleSlots('P1'); track slot.trackId) {
2217
+ @if (slot.card) {
2218
+ <button
2219
+ type="button"
2220
+ class="christianity-card-preview-card christianity-card-preview-card--battle christianity-render-card-button"
2221
+ valLightRipple
2222
+ [class.is-selected]="selectedAttacker()?.instanceId === slot.card.instanceId"
2223
+ [class.is-exhausted]="!slot.card.canAttack"
2224
+ [class.is-ready-attacker]="isOwnTurn() && slot.card.canAttack"
2225
+ (click)="selectAttacker(slot.card)"
2226
+ >
2227
+ <val-christianity-card [card]="characterRenderCard(slot.card)" variant="baby"></val-christianity-card>
2228
+ </button>
2229
+ } @else {
2230
+ <button
2231
+ type="button"
2232
+ class="christianity-slot"
2233
+ cdkDropList
2234
+ [id]="battleSlotDropId($index)"
2235
+ [cdkDropListData]="$index"
2236
+ [cdkDropListConnectedTo]="['christianity-hand-source']"
2237
+ [cdkDropListEnterPredicate]="canDropOnBattleSlot"
2238
+ [cdkDropListSortingDisabled]="true"
2239
+ [class.christianity-slot--play-target]="canPlaceSelectedCharacter() || isDraggingCharacter()"
2240
+ valLightRipple
2241
+ (cdkDropListDropped)="dropOnBattleSlot($event, $index)"
2242
+ (click)="playSelectedCard($index)"
2243
+ >
2244
+ @if (canPlaceSelectedCharacter() || isDraggingCharacter()) {
2245
+ <span>{{ t('christianityPlayHere') }}</span>
2246
+ }
2247
+ </button>
2248
+ }
2249
+ }
2250
+ </section>
2251
+
2252
+ <section class="christianity-player-rack">
2253
+ <div class="christianity-offerings-zone">
2254
+ <div
2255
+ class="christianity-offering-drop-target"
2256
+ cdkDropList
2257
+ id="christianity-offerings-drop"
2258
+ [cdkDropListConnectedTo]="['christianity-hand-source']"
2259
+ [class.is-play-target]="canPlaceSelectedOffering() || isDraggingOffering()"
2260
+ [cdkDropListEnterPredicate]="canDropOnOfferings"
2261
+ [cdkDropListSortingDisabled]="true"
2262
+ (cdkDropListDropped)="dropOnOfferings($event)"
2263
+ >
2264
+ <button
2265
+ type="button"
2266
+ class="christianity-offering-pile"
2267
+ valLightRipple
2268
+ (click)="handleOfferingPile('P1')"
2269
+ >
2270
+ <i aria-hidden="true"></i>
2271
+ <i aria-hidden="true"></i>
2272
+ <i aria-hidden="true"></i>
2273
+ <span>{{ t('christianityOfferings') }}</span>
2274
+ <strong>{{ readyOfferings(player()) }}/{{ totalOfferings(player()) }}</strong>
2275
+ </button>
2276
+ </div>
2277
+ </div>
2278
+ <button type="button" class="christianity-leader-card christianity-render-card-button" valLightRipple (click)="inspectLeader('P1')">
2279
+ <val-christianity-card [card]="leaderRenderCard(player())" variant="baby"></val-christianity-card>
2280
+ </button>
2281
+ <div class="christianity-player-command">
2282
+ <div class="christianity-player-badge">
2283
+ <span class="christianity-avatar" [style.background]="player().avatarColor">{{ player().avatar }}</span>
2284
+ <strong>{{ player().displayName }}</strong>
2285
+ </div>
2286
+ <button
2287
+ type="button"
2288
+ class="christianity-end-turn"
2289
+ (click)="endTurn()"
2290
+ >
2291
+ {{ t('christianityEndTurn') }}
2292
+ </button>
2293
+ </div>
2294
+ </section>
2295
+ </section>
2296
+ </section>
2297
+
2298
+ <section class="christianity-hand-shelf">
2299
+ <div class="christianity-hand-meter">
2300
+ <span>{{ t('christianityHand') }}</span>
2301
+ <strong>{{ player().hand?.length ?? 0 }}</strong>
2302
+ </div>
2303
+ <section
2304
+ class="christianity-hand-fan"
2305
+ cdkDropList
2306
+ id="christianity-hand-source"
2307
+ [cdkDropListConnectedTo]="dropTargetIds()"
2308
+ [attr.aria-label]="t('christianityYourHand')"
2309
+ (pointerleave)="clearHoveredHandIndex()"
2310
+ >
2311
+ @for (cardId of player().hand ?? []; track cardId + $index) {
2312
+ @let card = cardDefinition(cardId);
2313
+ <div
2314
+ class="christianity-hand-card-wrap"
2315
+ [class.is-selected]="selectedHandCard() === cardId"
2316
+ [class.is-dragging]="draggingCardId() === cardId"
2317
+ [style.z-index]="handCardZIndex($index)"
2318
+ [style.transform]="fanTransform($index, player().hand?.length ?? 0, false)"
2319
+ (pointerenter)="setHoveredHandIndex($index)"
2320
+ (pointerdown)="setHoveredHandIndex($index)"
2321
+ (pointerup)="releaseHoveredHand($event)"
2322
+ >
2323
+ <button
2324
+ type="button"
2325
+ class="christianity-card-preview-card christianity-card-preview-card--hand christianity-render-card-button"
2326
+ cdkDrag
2327
+ valLightRipple
2328
+ [cdkDragData]="cardId"
2329
+ [cdkDragDisabled]="!canPlay(card)"
2330
+ [class.is-selected]="selectedHandCard() === cardId"
2331
+ [class.is-disabled]="!canPlay(card)"
2332
+ (cdkDragStarted)="startDraggingCard(cardId)"
2333
+ (cdkDragEnded)="endDraggingCard()"
2334
+ (click)="selectHandCard(cardId)"
2335
+ >
2336
+ <val-christianity-card [card]="definitionToRenderCard(card)" variant="baby"></val-christianity-card>
2337
+ <ng-template cdkDragPreview>
2338
+ <div class="christianity-card-drag-preview">
2339
+ <val-christianity-card [card]="definitionToRenderCard(card)" variant="baby"></val-christianity-card>
2340
+ </div>
2341
+ </ng-template>
2342
+ <ng-template cdkDragPlaceholder>
2343
+ <div class="christianity-card-drag-placeholder"></div>
2344
+ </ng-template>
2345
+ </button>
2346
+ <button
2347
+ type="button"
2348
+ class="christianity-card-eye"
2349
+ [attr.aria-label]="t('christianityPreviewCard')"
2350
+ (click)="inspectHandCard(cardId, true); $event.stopPropagation()"
2351
+ ></button>
2352
+ </div>
2353
+ }
2354
+ </section>
2355
+ </section>
2356
+ }
2357
+
2358
+ @if (selectedPreview()) {
2359
+ <button type="button" class="christianity-preview-backdrop" [attr.aria-label]="t('christianityClosePreview')" (click)="closePreview()"></button>
2360
+ <aside
2361
+ class="christianity-floating-card-shell"
2362
+ aria-live="polite"
2363
+ >
2364
+ <button type="button" class="christianity-floating-card-close" (click)="closePreview()">
2365
+ {{ t('close') }}
2366
+ </button>
2367
+ @if (canNavigateHistoryPreview()) {
2368
+ <button
2369
+ type="button"
2370
+ class="christianity-preview-nav christianity-preview-nav--previous"
2371
+ [attr.aria-label]="t('christianityPreviousHistoryCard')"
2372
+ (click)="navigateHistoryPreview(-1)"
2373
+ >
2374
+ &lt;
2375
+ </button>
2376
+ <button
2377
+ type="button"
2378
+ class="christianity-preview-nav christianity-preview-nav--next"
2379
+ [attr.aria-label]="t('christianityNextHistoryCard')"
2380
+ (click)="navigateHistoryPreview(1)"
2381
+ >
2382
+ &gt;
2383
+ </button>
2384
+ }
2385
+ <div
2386
+ class="christianity-floating-card"
2387
+ [style.--preview-rotate-x]="previewTilt().rotateX + 'deg'"
2388
+ [style.--preview-rotate-y]="previewTilt().rotateY + 'deg'"
2389
+ [style.--preview-shift-x]="previewTilt().shiftX + 'px'"
2390
+ [style.--preview-shift-y]="previewTilt().shiftY + 'px'"
2391
+ (pointermove)="tiltPreview($event)"
2392
+ (pointerleave)="resetPreviewTilt()"
2393
+ >
2394
+ @if (selectedPreviewRenderCard(); as previewCard) {
2395
+ <val-christianity-card [card]="previewCard" variant="full"></val-christianity-card>
2396
+ }
2397
+ </div>
2398
+ @if (previewRule(); as rule) {
2399
+ <div class="christianity-preview-rule-note">
2400
+ <span class="christianity-rule-note-icon" aria-hidden="true">i</span>
2401
+ <div>
2402
+ <small>{{ t('christianityCardRule') }}</small>
2403
+ <strong>{{ rule.title }}</strong>
2404
+ <p>{{ rule.body }}</p>
2405
+ </div>
2406
+ </div>
2407
+ }
2408
+ </aside>
2409
+ }
2410
+
2411
+ @if (selectedInfo(); as info) {
2412
+ <button type="button" class="christianity-info-backdrop" [attr.aria-label]="t('close')" (click)="closeInfo()"></button>
2413
+ <aside class="christianity-info-panel" aria-live="polite">
2414
+ <button type="button" class="christianity-dialog-close christianity-info-close" (click)="closeInfo()">
2415
+ {{ t('close') }}
2416
+ </button>
2417
+ <div class="christianity-rule-note">
2418
+ <span class="christianity-rule-note-icon" aria-hidden="true">i</span>
2419
+ <div>
2420
+ <small>{{ info.eyebrow }}</small>
2421
+ <h2>{{ info.title }}</h2>
2422
+ <strong>{{ info.meta }}</strong>
2423
+ <p>{{ info.body }}</p>
2424
+ <ul>
2425
+ @for (fact of info.facts; track fact) {
2426
+ <li>{{ fact }}</li>
2427
+ }
2428
+ </ul>
2429
+ </div>
2430
+ </div>
2431
+ </aside>
2432
+ }
2433
+
2434
+ @if (screen() === 'table') {
2435
+ <section class="christianity-actions" aria-live="polite">
2436
+ <p>{{ statusText() }}</p>
2437
+ <div>
2438
+ <button type="button" [disabled]="selectedActionDisabled()" (click)="playSelectedCard()">
2439
+ {{ selectedActionLabel() }}
2440
+ </button>
2441
+ <button type="button" (click)="resetMock()">
2442
+ {{ t('christianityReset') }}
2443
+ </button>
2444
+ </div>
2445
+ </section>
2446
+ }
2447
+
2448
+ @if (showHistory()) {
2449
+ <button type="button" class="christianity-history-backdrop" [attr.aria-label]="t('christianityCloseHistory')" (click)="closeHistory()"></button>
2450
+ <section class="christianity-history-drawer">
2451
+ <header>
2452
+ <h2>{{ t('christianityHistory') }}</h2>
2453
+ <div class="christianity-dialog-actions">
2454
+ <span>{{ game().historyZone.length }}</span>
2455
+ <button type="button" class="christianity-dialog-close" (click)="closeHistory()">
2456
+ {{ t('close') }}
2457
+ </button>
2458
+ </div>
2459
+ </header>
2460
+ @if (game().historyZone.length) {
2461
+ <div class="christianity-history-grid">
2462
+ @for (cardId of game().historyZone; track cardId + $index) {
2463
+ @let card = cardDefinition(cardId);
2464
+ <button type="button" class="christianity-gallery-card-button christianity-render-card-button" valLightRipple (click)="inspectHistoryCard(cardId)">
2465
+ <val-christianity-card [card]="definitionToRenderCard(card)" variant="baby"></val-christianity-card>
2466
+ </button>
2467
+ }
2468
+ </div>
2469
+ } @else {
2470
+ <p>{{ t('christianityHistoryEmpty') }}</p>
2471
+ }
2472
+ </section>
2473
+ }
2474
+
2475
+ @if (showGallery()) {
2476
+ <button type="button" class="christianity-history-backdrop" [attr.aria-label]="t('christianityCloseGallery')" (click)="closeGallery()"></button>
2477
+ <section class="christianity-history-drawer christianity-gallery-drawer">
2478
+ <header>
2479
+ <div>
2480
+ <h2>{{ t('christianityGallery') }}</h2>
2481
+ <p>{{ galleryEditionLabel() }}</p>
2482
+ </div>
2483
+ <div class="christianity-dialog-actions">
2484
+ <span>{{ galleryCards().length }}</span>
2485
+ <button type="button" class="christianity-dialog-close" (click)="closeGallery()">
2486
+ {{ t('close') }}
2487
+ </button>
2488
+ </div>
2489
+ </header>
2490
+ <div class="christianity-gallery-controls">
2491
+ <label>
2492
+ <span>{{ t('christianityGallerySearch') }}</span>
2493
+ <input type="search" [value]="gallerySearch()" (input)="setGallerySearch($event)" [placeholder]="t('christianityGallerySearchPlaceholder')" />
2494
+ </label>
2495
+ <label>
2496
+ <span>{{ t('christianityGalleryFilter') }}</span>
2497
+ <select [value]="galleryType()" (change)="setGalleryType($event)">
2498
+ @for (option of galleryTypeOptions(); track option.value) {
2499
+ <option [value]="option.value">{{ option.label }}</option>
2500
+ }
2501
+ </select>
2502
+ </label>
2503
+ </div>
2504
+ <div class="christianity-gallery-edition-strip">
2505
+ <button type="button" class="is-active" valLightRipple>
2506
+ <img [src]="galleryEditionIcon()" alt="" />
2507
+ <span>{{ t('christianityGenesisEdition') }}</span>
2508
+ </button>
2509
+ </div>
2510
+ <div class="christianity-gallery-grid">
2511
+ @for (card of galleryCards(); track card.id) {
2512
+ <button type="button" class="christianity-gallery-card-button christianity-render-card-button" valLightRipple (click)="inspectGalleryCard(card.id)">
2513
+ <val-christianity-card [card]="definitionToRenderCard(card)" variant="baby"></val-christianity-card>
2514
+ </button>
2515
+ } @empty {
2516
+ <p>{{ t('christianityGalleryEmpty') }}</p>
2517
+ }
2518
+ </div>
2519
+ </section>
2520
+ }
2521
+
2522
+ @if (offeringsSeat()) {
2523
+ @let offeringPlayer = game().players[offeringsSeat()!];
2524
+ <button type="button" class="christianity-history-backdrop" [attr.aria-label]="t('christianityCloseOfferings')" (click)="closeOfferings()"></button>
2525
+ <section class="christianity-history-drawer christianity-offerings-drawer">
2526
+ <header>
2527
+ <h2>{{ t('christianityOfferings') }}</h2>
2528
+ <div class="christianity-dialog-actions">
2529
+ <span>{{ readyOfferings(offeringPlayer) }}/{{ totalOfferings(offeringPlayer) }}</span>
2530
+ <button type="button" class="christianity-dialog-close" (click)="closeOfferings()">
2531
+ {{ t('close') }}
2532
+ </button>
2533
+ </div>
2534
+ </header>
2535
+ <div class="christianity-offerings-note">
2536
+ <span class="christianity-rule-note-icon" aria-hidden="true">i</span>
2537
+ <p>{{ t('christianityOfferingsRuleBody') }}</p>
2538
+ </div>
2539
+ <div class="christianity-offering-list">
2540
+ @for (offering of offeringPlayer.offerings; track offering.instanceId) {
2541
+ <article class="christianity-offering-row" [class.is-exhausted]="!offering.ready">
2542
+ <button type="button" class="christianity-offering-card christianity-render-card-button" valLightRipple (click)="inspectOffering(offering)">
2543
+ <val-christianity-card [card]="offeringRenderCard(offering)" variant="baby"></val-christianity-card>
2544
+ </button>
2545
+ <div>
2546
+ <strong>{{ offering.ready ? t('christianityOfferingReady') : t('christianityOfferingExhausted') }}</strong>
2547
+ <p>{{ offeringAbilityText(offering) }}</p>
2548
+ @if (offering.abilityName) {
2549
+ <button
2550
+ type="button"
2551
+ [disabled]="!canUseOfferingAbility(offering, offeringsSeat()!)"
2552
+ (click)="useOfferingAbility(offering, offeringsSeat()!)"
2553
+ >
2554
+ {{ t('christianityUseAbility') }}
2555
+ </button>
2556
+ }
2557
+ </div>
2558
+ </article>
2559
+ }
2560
+ </div>
2561
+ </section>
2562
+ }
2563
+ </main>
2564
+ `, styles: [":host{--christianity-theme-ink: var(--val-text-color, #1f2933);--christianity-theme-surface: #ffffff;--christianity-theme-parchment: #eff6ff;--christianity-theme-olive: #1d4ed8;--christianity-theme-gold: #2563eb;--christianity-theme-gold-soft: rgba(37, 99, 235, .16);--christianity-theme-gold-ring: rgba(37, 99, 235, .44);--christianity-theme-glow: rgba(37, 99, 235, .24);--christianity-theme-focus: #2563eb;--christianity-theme-shadow: rgba(37, 99, 235, .15);--christianity-theme-shadow-strong: rgba(37, 99, 235, .26);--christianity-card-aspect: 5 / 7.45;--christianity-card-back: linear-gradient(135deg, rgba(16, 42, 67, .16), rgba(16, 42, 67, .03)), repeating-linear-gradient(45deg, #dbeafe 0 .33rem, #ffffff .33rem .66rem);--christianity-card-back-soft: linear-gradient(135deg, rgba(16, 42, 67, .11), rgba(16, 42, 67, .02)), repeating-linear-gradient(45deg, #dbeafe 0 .33rem, #ffffff .33rem .66rem);display:block;max-width:100%;min-width:0;overflow-x:clip;color:var(--christianity-theme-ink)}.christianity-shell{box-sizing:border-box;display:grid;gap:.65rem;width:100%;max-width:100%;min-width:0;padding:.75rem .25rem;border:1px solid rgba(36,48,68,.12);border-radius:.75rem;background:#f6f8fb;overflow-x:clip;overflow-y:visible}.christianity-shell.has-modal-open{max-height:100dvh;overflow:hidden;overscroll-behavior:contain}.christianity-header,.christianity-match-strip,.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-match-player strong,.christianity-match-player small,.christianity-scoreboard span,.christianity-history h2,.christianity-actions p{margin:0}.christianity-header h1{font-size:1.35rem;line-height:1.1}.christianity-header-actions{display:flex;align-items:center;justify-content:flex-end;gap:.5rem;min-width:0}.christianity-gallery-open{min-height:2.2rem;padding:0 .75rem;border:1px solid var(--christianity-theme-gold-ring);border-radius:999px;background:linear-gradient(180deg,#eff6fffa,#fffffffa),radial-gradient(circle at 20% 0%,var(--christianity-theme-gold-soft),transparent 42%);color:var(--christianity-theme-ink);font:inherit;font-size:.82rem;font-weight:800;box-shadow:0 .55rem 1.2rem #2563eb1a}.christianity-splash,.christianity-start{min-height:min(34rem,calc(100dvh - 8rem));border:1px solid rgba(37,99,235,.18);border-radius:.9rem;background:radial-gradient(circle at 50% 18%,rgba(37,99,235,.16),transparent 22rem),linear-gradient(180deg,#eff6ffed,#fffffff7),var(--christianity-card-back-soft);box-shadow:0 1.2rem 3.2rem #2563eb1f}.christianity-splash{display:grid;place-items:center;align-content:center;gap:1.2rem;padding:2.5rem 1.25rem;text-align:center}.christianity-splash__mark{position:relative;display:grid;grid-template-columns:repeat(3,.74rem);place-content:center;gap:.55rem;width:5.8rem;height:5.8rem;border:1px solid rgba(37,99,235,.18);border-radius:999px;background:radial-gradient(circle at 50% 50%,rgba(37,99,235,.12),transparent 55%),#ffffff9e;box-shadow:inset 0 0 0 .55rem #fff6,0 1rem 2rem #2563eb1f}.christianity-splash__mark:before,.christianity-splash__mark:after{content:\"\";position:absolute;inset:.42rem;border:1px solid rgba(37,99,235,.16);border-radius:inherit;animation:christianity-loader-ring 1.8s ease-out infinite}.christianity-splash__mark:after{animation-delay:.48s}.christianity-splash__mark span{width:.74rem;height:.74rem;border-radius:999px;background:var(--christianity-theme-focus);box-shadow:0 .35rem .85rem #2563eb38;animation:christianity-loader-dot .96s ease-in-out infinite}.christianity-splash__mark span:nth-child(2){animation-delay:.14s}.christianity-splash__mark span:nth-child(3){animation-delay:.28s}@keyframes christianity-loader-dot{0%,to{opacity:.38;transform:translateY(0) scale(.82)}45%{opacity:1;transform:translateY(-.22rem) scale(1)}}@keyframes christianity-loader-ring{0%{opacity:.48;transform:scale(.72)}to{opacity:0;transform:scale(1.2)}}.christianity-splash span,.christianity-start__copy span{color:var(--christianity-theme-olive);font-size:.76rem;font-weight:900;text-transform:uppercase}.christianity-splash h2,.christianity-start h2,.christianity-start p{margin:0}.christianity-splash h2{margin-top:.2rem;font-size:clamp(1.65rem,7vw,2.7rem);line-height:1}.christianity-splash p{max-width:26rem;margin:.55rem auto 0;color:#1f2933ad;font-size:.96rem}.christianity-start{display:grid;align-content:center;gap:1rem;padding:clamp(.85rem,2vw,1.35rem)}.christianity-start__hero{display:grid;grid-template-columns:minmax(0,1fr) minmax(12rem,18rem);gap:1rem;align-items:center}.christianity-start__copy{display:grid;gap:.45rem;max-width:36rem}.christianity-start h2{font-size:clamp(1.6rem,6vw,2.5rem);line-height:1.02}.christianity-start__copy p,.christianity-start__cards p,.christianity-start__modes p{color:#1f2933ad;line-height:1.42}.christianity-start__fan{position:relative;display:grid;place-items:center;min-height:13rem;overflow:visible}.christianity-start__fan val-christianity-card{position:absolute;width:clamp(5.7rem,12vw,7.2rem);transform-origin:50% 92%;filter:drop-shadow(0 1rem 1.5rem rgba(82,64,28,.18))}.christianity-start__cards{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:.75rem}.christianity-start__cards article,.christianity-start__modes article{display:grid;gap:.65rem;align-content:start;padding:.95rem;border:1px solid rgba(36,48,68,.12);border-radius:.75rem;background:#ffffffd1;box-shadow:0 .75rem 1.7rem #52401c14}.christianity-start__cards article{min-height:11rem}.christianity-start__cards strong{font-size:1.05rem}.christianity-start__status{display:flex;flex-wrap:wrap;gap:.45rem}.christianity-start__status span,.christianity-start__modes article>span{display:inline-flex;align-items:center;width:fit-content;min-height:1.85rem;padding:0 .62rem;border:1px solid rgba(37,99,235,.22);border-radius:999px;background:#eff6ffe0;color:#1f2933b8;font-size:.75rem;font-weight:850}.christianity-start__modes{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:.55rem}.christianity-start__modes article{min-height:8.5rem;background:#f8fafcb8;box-shadow:none;opacity:.82}.christianity-start__modes strong{font-size:.92rem}.christianity-start__modes p{margin:0;font-size:.8rem}.christianity-primary-action,.christianity-secondary-action{justify-self:start;min-height:2.5rem;padding:0 .9rem;border-radius:999px;font:inherit;font-weight:900}.christianity-primary-action{border:1px solid rgba(16,42,67,.16);background:#102a43;color:#fff}.christianity-secondary-action{border:1px solid var(--christianity-theme-gold-ring);background:var(--christianity-theme-parchment);color:var(--christianity-theme-ink)}.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-match-strip{display:grid;grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);padding:.45rem;border:1px solid rgba(36,48,68,.1);border-radius:.75rem;background:#fff}.christianity-match-player{display:grid;grid-template-columns:auto minmax(0,1fr);gap:.5rem;align-items:center;min-width:0}.christianity-match-player--opponent{direction:rtl}.christianity-match-player--opponent div{direction:ltr;text-align:right}.christianity-match-player div{display:grid;min-width:0}.christianity-match-player strong,.christianity-match-player small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.christianity-match-player small,.christianity-scoreboard span{color:#1f293394;font-size:.72rem}.christianity-scoreboard{display:grid;justify-items:center;min-width:4.2rem;padding:0 .55rem;border-right:1px solid rgba(36,48,68,.1);border-left:1px solid rgba(36,48,68,.1)}.christianity-scoreboard strong{font-size:1.2rem;line-height:1}.christianity-table{box-sizing:border-box;position:relative;display:grid;gap:.45rem;width:100%;max-width:100%;min-width:0;padding:.45rem .35rem;border-radius:.75rem;background:#dceafb;overflow-x:clip;overflow-y:visible}.christianity-impact-layer{position:absolute;inset:0;z-index:30;pointer-events:none}.christianity-impact-pop{position:absolute;left:50%;top:50%;display:inline-grid;place-items:center;min-width:2.45rem;min-height:2.1rem;padding:.1rem .55rem;border:1px solid rgba(37,99,235,.26);border-radius:999px;background:radial-gradient(circle at 50% 42%,#fffffff2,#eff6ffc7),#ffffffe0;color:var(--christianity-theme-focus);font-size:1rem;font-weight:1000;line-height:1;text-shadow:0 1px 0 rgba(255,255,255,.72);box-shadow:0 .8rem 1.8rem #2563eb2e,0 0 0 .25rem #2563eb14;transform:translate(-50%,-50%);animation:christianity-impact-pop 1.12s ease-out both}.christianity-impact-pop:after{content:\"\";position:absolute;inset:-.35rem;border:1px solid currentColor;border-radius:inherit;opacity:.24;animation:christianity-impact-ring 1.12s ease-out both}.christianity-impact-pop.is-damage{border-color:#dc262652;color:#dc2626;box-shadow:0 .8rem 1.8rem #dc262629,0 0 0 .25rem #dc262614}.christianity-impact-pop.is-heal{border-color:#16a34a52;color:#15803d;box-shadow:0 .8rem 1.8rem #16a34a29,0 0 0 .25rem #16a34a14}.christianity-impact-pop.is-resource{border-color:#2563eb52;color:var(--christianity-theme-focus)}.christianity-impact-pop.is-opponent-leader{left:50%;top:10%}.christianity-impact-pop.is-opponent-battle{left:50%;top:27%}.christianity-impact-pop.is-opponent-offerings{left:11%;top:8%}.christianity-impact-pop.is-player-battle{left:50%;top:67%}.christianity-impact-pop.is-player-leader{left:50%;top:84%}.christianity-impact-pop.is-player-offerings{left:10%;top:84%}@keyframes christianity-impact-pop{0%{opacity:0;transform:translate(-50%,-22%) scale(.75)}18%{opacity:1;transform:translate(-50%,-58%) scale(1.08)}72%{opacity:1;transform:translate(-50%,-84%) scale(1)}to{opacity:0;transform:translate(-50%,-118%) scale(.94)}}@keyframes christianity-impact-ring{0%{opacity:.24;transform:scale(.78)}to{opacity:0;transform:scale(1.55)}}@media (prefers-reduced-motion: reduce){.christianity-impact-pop,.christianity-impact-pop:after,.christianity-splash__mark:before,.christianity-splash__mark:after,.christianity-splash__mark span{animation:none!important}}.christianity-player-side{box-sizing:border-box;display:grid;gap:.35rem;width:100%;max-width:100%;min-width:0;padding:.35rem .3rem;border-radius:.7rem;background:#ffffff57;grid-template-rows:minmax(7rem,1fr) auto;min-height:13.75rem}.christianity-player-side--opponent{grid-template-rows:auto minmax(7rem,1fr)}.christianity-player{display:grid;gap:.65rem}.christianity-battle-zone{--christianity-battle-card-width: clamp(4.8rem, 15vw, 6.6rem);box-sizing:border-box;display:grid;grid-template-columns:repeat(4,var(--christianity-battle-card-width));gap:.5rem;align-items:center;justify-content:center;width:100%;max-width:100%;min-width:0;min-height:clamp(9.1rem,29vw,11rem);padding:.55rem .4rem;border-radius:.75rem;background:#ffffffc2;transition:background .16s ease,box-shadow .16s ease}.christianity-battle-zone.is-placing-card{background:linear-gradient(180deg,#fffaf0f5,#ffffffd6),#ffffffc2;box-shadow:inset 0 0 0 .14rem var(--christianity-theme-gold-soft),0 .8rem 1.7rem #5f6f2a1f}.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:var(--christianity-theme-gold);box-shadow:0 0 0 .18rem var(--christianity-theme-gold-soft),0 .85rem 1.4rem var(--christianity-theme-shadow)}.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{display:grid;place-items:center;justify-self:center;width:var(--christianity-battle-card-width);height:auto;min-height:0;aspect-ratio:var(--christianity-card-aspect);border:1px dashed rgba(36,48,68,.22);border-radius:.5rem;background:#ffffff73;color:inherit;font:inherit}.christianity-slot--play-target{position:relative;border-color:var(--christianity-theme-gold-ring);background:linear-gradient(180deg,#fffaf0eb,#f8fafcd1),#ffffffb3;color:#5d4305;font-weight:800;overflow:hidden;box-shadow:inset 0 0 0 .12rem #d6a21d33,0 .7rem 1.25rem var(--christianity-theme-shadow);animation:christianity-target-pulse 1.45s ease-in-out infinite}.christianity-slot--play-target:before{content:\"\";position:absolute;inset:.35rem;border:1px solid rgba(214,162,29,.22);border-radius:.4rem;background:linear-gradient(135deg,rgba(214,162,29,.1),transparent 46%),radial-gradient(circle at 50% 42%,var(--christianity-theme-glow),transparent 58%)}.christianity-slot--play-target span{position:relative;z-index:2;padding:.16rem .44rem;border-radius:999px;background:#ffffffc7;font-size:.78rem}@keyframes christianity-target-pulse{0%,to{box-shadow:inset 0 0 0 .12rem #d6a21d33,0 .7rem 1.25rem var(--christianity-theme-shadow)}50%{box-shadow:inset 0 0 0 .16rem #d6a21d57,0 .9rem 1.65rem var(--christianity-theme-shadow-strong)}}.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:10.8rem;padding:.25rem .25rem 2.1rem;isolation:isolate;overflow:visible}.christianity-hand-shelf{position:relative;display:grid;z-index:12;min-height:12rem;margin-top:-1.15rem;padding:1.45rem .25rem 1rem;overflow:visible}.christianity-hand-shelf--opponent{z-index:8;min-height:6.85rem;margin-top:0;margin-bottom:0;padding:.45rem .25rem .85rem}.christianity-hand-fan--opponent{min-height:5.9rem;padding-bottom:.75rem;align-items:start}.christianity-hand-fan--opponent .christianity-hidden-card-button{width:clamp(3.7rem,12vw,4.9rem);aspect-ratio:var(--christianity-card-aspect);margin-inline:-.9rem;transform-origin:50% 120%}.christianity-hand-fan--opponent .christianity-hidden-card-button:first-child{margin-left:0}.christianity-hand-fan--opponent .christianity-hidden-card-button:last-child{margin-right:0}.christianity-card-preview-card,.christianity-card-mini,.christianity-offering-pile,.christianity-offering-card,.christianity-leader-card,.christianity-zone-card,.christianity-zone-pile,.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;grid-template-rows:auto minmax(0,1fr) auto auto;gap:.28rem;align-content:stretch;width:clamp(4.9rem,17vw,7.1rem);height:auto;min-height:0;aspect-ratio:var(--christianity-card-aspect);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-render-card-button{display:block;padding:0;overflow:visible;border:0;background:transparent;box-shadow:none}.christianity-render-card-button>val-christianity-card{display:block;width:100%;height:100%}.christianity-gallery-card-button{display:block;width:min(100%,6.8rem);min-width:0;aspect-ratio:var(--christianity-card-aspect);padding:0;overflow:visible;border:0;background:transparent;color:inherit;font:inherit;text-align:left;box-shadow:none}.christianity-gallery-card-button>val-christianity-card{display:block;width:100%;height:100%}.christianity-card-preview-card--hand.christianity-render-card-button,.christianity-card-preview-card--battle.christianity-render-card-button,.christianity-leader-card.christianity-render-card-button{aspect-ratio:var(--christianity-card-aspect)}.christianity-card-preview-card--hand.christianity-render-card-button:hover val-christianity-card,.christianity-card-preview-card--hand.christianity-render-card-button.is-selected val-christianity-card,.christianity-card-preview-card--battle.christianity-render-card-button.is-selected val-christianity-card,.christianity-card-preview-card--battle.christianity-render-card-button.is-target val-christianity-card,.christianity-leader-card.christianity-render-card-button.is-target val-christianity-card{filter:drop-shadow(0 0 .55rem rgba(214,162,29,.35))}.christianity-card-preview-card--battle.christianity-render-card-button.is-ready-attacker val-christianity-card{filter:drop-shadow(0 .45rem .8rem rgba(95,111,42,.16))}.christianity-card-preview-card--battle.christianity-render-card-button.is-selected{transform:translateY(-.28rem)}.christianity-card-frame{position:relative;display:grid;grid-template-rows:auto minmax(0,1fr) auto auto;gap:.28rem;align-content:stretch;overflow:hidden;padding:.48rem;text-align:left;background:linear-gradient(180deg,#fffffffa,#f8fafcfa),radial-gradient(circle at 15% 0%,rgba(214,162,29,.12),transparent 44%);box-shadow:0 .5rem 1.25rem #2430441a,inset 0 0 0 .18rem #ffffff9e}.christianity-card-frame-header{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:.16rem;align-items:start;min-width:0}.christianity-card-frame-header small{grid-column:1;min-width:0;overflow:hidden;color:#1f2933a3;font-size:clamp(.52rem,1.5vw,.68rem);line-height:1;text-overflow:ellipsis;white-space:nowrap}.christianity-card-frame-header strong{grid-column:1;justify-self:start;align-self:start;min-width:0;padding:0;overflow:hidden;border-radius:0;background:transparent;font-size:clamp(.82rem,2.5vw,1.05rem);line-height:1.02;text-overflow:ellipsis;white-space:nowrap}.christianity-card-preview-card--hand .christianity-card-frame-header strong,.christianity-card-preview-card--battle .christianity-card-frame-header strong,.christianity-leader-card .christianity-card-frame-header strong{display:-webkit-box;overflow-wrap:anywhere;text-overflow:clip;white-space:normal;-webkit-box-orient:vertical;-webkit-line-clamp:2}.christianity-card-preview-card--hand .christianity-card-frame-header small{text-transform:uppercase}.christianity-card-preview-card--hand .christianity-card-frame-art>span{display:-webkit-box;max-width:88%;overflow-wrap:anywhere;text-overflow:clip;white-space:normal;-webkit-box-orient:vertical;-webkit-line-clamp:2}.christianity-card-frame-header span{grid-column:2;grid-row:1 / span 2;display:grid;place-items:center;min-width:1.3rem;height:1.3rem;padding:0 .22rem;border-radius:999px;background:#ffd91a;color:#243044;font-size:.8rem;font-weight:900;line-height:1;box-shadow:inset 0 -.08rem #52401c2e}.christianity-card-frame-header span.is-offering-pips,.christianity-full-card-cost.is-offering-pips,.christianity-offering-card span.is-offering-pips{grid-auto-flow:column;gap:.14rem;min-width:auto;padding:0 .28rem}.christianity-card-frame-header span.is-offering-pips i,.christianity-full-card-cost.is-offering-pips i,.christianity-offering-card span.is-offering-pips i,.christianity-full-card-pips i{display:block;width:.72rem;height:.72rem;border-radius:999px;background:radial-gradient(circle at 34% 28%,rgba(255,255,255,.9) 0 .12rem,transparent .13rem),#ffd91a;box-shadow:inset 0 -.08rem #52401c2e,0 .12rem .24rem #102a431a}.christianity-card-frame-art{position:relative;display:grid;place-items:center;min-height:0;overflow:hidden;border-radius:.36rem;background:linear-gradient(135deg,#5f6f2a2e,#d6a21d24),radial-gradient(circle at 50% 18%,rgba(255,255,255,.72),transparent 48%),#dbe7ef;box-shadow:inset 0 0 0 1px #24304414}.christianity-card-frame-art>span{max-width:78%;overflow:hidden;color:#2430447a;font-size:clamp(.82rem,2.2vw,1.05rem);font-weight:900;line-height:1.02;text-align:center;text-overflow:ellipsis}.christianity-card-frame-art small{position:absolute;right:0;bottom:.28rem;max-width:78%;padding:.1rem .34rem;overflow:hidden;border-radius:999px 0 0 999px;background:#ffffffe6;color:#1f2933a8;font-size:.48rem;font-style:italic;font-weight:900;line-height:1;text-overflow:ellipsis;text-transform:uppercase;white-space:nowrap}.christianity-card-frame-effect{display:grid;align-content:center;gap:.1rem;min-height:1.45rem;padding:.24rem;overflow:hidden;border-radius:.34rem;background:radial-gradient(circle at 50% 70%,rgba(36,48,68,.06),transparent 44%),#ffffffdb}.christianity-card-frame-effect strong{justify-self:end;align-self:end;padding:.12rem .32rem;border-radius:999px;background:#edf2f7;font-size:clamp(.66rem,2vw,.82rem);line-height:1.05}.christianity-card-frame-effect p{margin:0;overflow:hidden;color:#1f2933b8;font-size:.58rem;line-height:1.1;text-overflow:ellipsis;white-space:nowrap}.christianity-card-frame-footer{display:flex;justify-content:space-between;gap:.22rem;color:#1f293385;font-size:.46rem;font-weight:800;line-height:1}.christianity-card-frame--battle{gap:.22rem;padding:.42rem}.christianity-card-frame--battle .christianity-card-frame-art{min-height:2.6rem}.christianity-card-frame--leader .christianity-card-frame-art{background:linear-gradient(135deg,#2563eb24,#d6a21d29),radial-gradient(circle at 50% 18%,rgba(255,255,255,.78),transparent 48%),#e7eef8}.christianity-card-frame--list{width:clamp(4.4rem,22vw,5.8rem);padding:.38rem}.christianity-card-frame--list .christianity-card-frame-art{min-height:2.5rem}.christianity-hand-card-wrap{position:relative;display:grid;justify-items:center;flex:0 0 auto;margin-inline:-.42rem;padding-bottom:2rem;transform-origin:50% 115%;transition:transform .16s ease,filter .16s ease}.christianity-hand-card-wrap:hover,.christianity-hand-card-wrap.is-selected,.christianity-hand-card-wrap.is-dragging{z-index:3}.christianity-hand-card-wrap:hover .christianity-card-preview-card--hand,.christianity-hand-card-wrap.is-selected .christianity-card-preview-card--hand,.christianity-hand-card-wrap.is-dragging .christianity-card-preview-card--hand{border-color:var(--christianity-theme-gold);box-shadow:0 0 0 .12rem var(--christianity-theme-gold-soft),0 1rem 2rem var(--christianity-theme-shadow)}.christianity-card-preview-card--hand{cursor:grab;touch-action:none}.christianity-card-preview-card--hand:active{cursor:grabbing}.christianity-card-preview-card--hand.cdk-drag-disabled{cursor:not-allowed}.christianity-card-drag-preview,.christianity-card-preview-card.cdk-drag-preview{width:clamp(4.9rem,17vw,7.1rem);height:auto;min-height:0;aspect-ratio:var(--christianity-card-aspect);border-radius:.5rem;box-shadow:0 0 0 .16rem #fff4c2ad,0 1.5rem 3rem var(--christianity-theme-shadow-strong);transform:rotate(2deg) scale(1.03)}.christianity-card-drag-preview val-christianity-card{display:block;width:100%;height:100%}.christianity-card-drag-placeholder,.christianity-card-preview-card.cdk-drag-placeholder{width:clamp(4.9rem,17vw,7.1rem);height:auto;min-height:0;aspect-ratio:var(--christianity-card-aspect);border-radius:.5rem;background:#94a3b81f;opacity:.22}.christianity-slot.cdk-drop-list-dragging,.christianity-offering-drop-target.cdk-drop-list-dragging{border-color:var(--christianity-theme-gold-ring)}.christianity-slot.cdk-drop-list-receiving,.christianity-offering-drop-target.cdk-drop-list-receiving{box-shadow:inset 0 0 0 .18rem #d6a21d57,0 1rem 1.9rem var(--christianity-theme-shadow-strong)}.christianity-card-eye{position:absolute;right:50%;bottom:.38rem;width:2.15rem;height:1.55rem;border:1px solid color-mix(in srgb,var(--christianity-theme-focus) 52%,transparent);border-radius:999px;background:#fffffff0;box-shadow:0 .55rem 1.1rem #102a4324;opacity:0;transform:translate(50%,-.2rem) scale(.92);transition:opacity .14s ease,transform .14s ease,border-color .14s ease}.christianity-card-eye:before{content:\"\";position:absolute;top:50%;left:50%;width:1.1rem;height:1.1rem;border:.12rem solid var(--christianity-theme-focus);border-radius:82% 0;background:#fffffff0;transform:translate(-50%,-50%) rotate(45deg)}.christianity-card-eye:after{content:\"\";position:absolute;top:50%;left:50%;width:.42rem;height:.42rem;border:.09rem solid rgba(255,255,255,.95);border-radius:999px;background:radial-gradient(circle at 35% 32%,#ffffff 0 .06rem,transparent .07rem),var(--christianity-theme-focus);transform:translate(-50%,-50%)}.christianity-hand-card-wrap:hover .christianity-card-eye,.christianity-hand-card-wrap.is-selected .christianity-card-eye,.christianity-card-eye:focus-visible{opacity:1;transform:translate(50%) scale(1)}.christianity-offering-drop-target{display:grid;width:min(100%,5.9rem);height:7.1rem;min-height:0;max-height:7.1rem;border:1px solid transparent;border-radius:.64rem;transition:border-color .16s ease,box-shadow .16s ease,background .16s ease}.christianity-offering-drop-target.is-play-target{border-color:var(--christianity-theme-gold-ring);background:linear-gradient(180deg,#fffaf0f5,#fffffff0),radial-gradient(circle at 82% 14%,rgba(250,204,21,.28) 0 .7rem,transparent .72rem);box-shadow:inset 0 0 0 .12rem #d6a21d3d,0 .8rem 1.55rem var(--christianity-theme-shadow);animation:christianity-target-pulse 1.45s ease-in-out infinite}.christianity-offering-drop-target>.cdk-drag-placeholder{display:none}.christianity-card-frame--back,.christianity-card-preview-card--back{width:clamp(4rem,14vw,5.7rem);min-height:0;aspect-ratio:var(--christianity-card-aspect);place-items:center;padding:.55rem;overflow:hidden;box-shadow:0 .8rem 1.55rem #24304424;transform-origin:50% -18%;background:var(--christianity-card-back)}.christianity-card-frame--back:before,.christianity-card-preview-card--back:before{content:\"\";position:absolute;inset:.5rem;border:1px solid rgba(16,42,67,.12);border-radius:.38rem;background:linear-gradient(180deg,#ffffff2e,#ffffff0a);box-shadow:inset 0 0 0 .12rem #ffffff1f}.christianity-card-preview-card--battle{justify-self:center;width:var(--christianity-battle-card-width);min-width:0;height:auto;min-height:0;aspect-ratio:var(--christianity-card-aspect);margin-inline:0}.christianity-card-preview-card>span,.christianity-card-mini>span,.christianity-offering-pile>span,.christianity-offering-card>span,.christianity-leader-card>span,.christianity-zone-card>span,.christianity-zone-pile>span{position:relative;z-index:2;align-self:start;font-weight:700;line-height:1.05}.christianity-card-preview-card>strong,.christianity-card-mini>strong,.christianity-offering-pile>strong,.christianity-offering-card>strong,.christianity-leader-card>strong,.christianity-zone-card>strong,.christianity-zone-pile>strong{position:relative;z-index:3;justify-self:end;align-self:end;padding:.15rem .35rem;border-radius:999px;background:#edf2f7;font-size:.8rem}.christianity-player-rack{box-sizing:border-box;display:grid;grid-template-columns:minmax(5.9rem,7rem) minmax(5rem,1fr) minmax(4.2rem,7rem);gap:.45rem;align-items:end;justify-items:stretch;width:100%;max-width:100%;min-width:0}.christianity-player-rack--opponent{align-items:start}.christianity-hand-meter{position:absolute;top:0;right:.35rem;z-index:4;display:inline-grid;grid-auto-flow:column;gap:.25rem;align-items:center;min-height:1.7rem;padding:.18rem .46rem;border:1px solid rgba(36,48,68,.12);border-radius:999px;background:#ffffffe6;box-shadow:0 .35rem .8rem #102a4314}.christianity-hand-meter--opponent{top:.15rem}.christianity-hand-meter span{color:#1f293394;font-size:.68rem}.christianity-hand-meter strong{font-size:.86rem}.christianity-player-badge,.christianity-player-command{display:grid;gap:.35rem;justify-items:center;min-width:0}.christianity-player-badge{align-content:start;color:#1f2933c2;font-size:.74rem}.christianity-player-badge--opponent{justify-self:center;grid-auto-flow:column;align-items:center;justify-content:center}.christianity-player-badge strong{max-width:6.5rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.christianity-avatar{display:grid;place-items:center;width:1.85rem;height:1.85rem;border-radius:999px;color:#fff;font-size:.76rem;font-weight:800;box-shadow:0 .35rem .9rem #102a4329}.christianity-offerings-zone{display:flex;flex-wrap:wrap;gap:.25rem;justify-content:flex-start;justify-self:start;width:100%}.christianity-card-mini,.christianity-offering-pile,.christianity-offering-card,.christianity-leader-card,.christianity-zone-card,.christianity-zone-pile{display:grid;align-content:space-between;min-height:4.9rem;padding:.48rem;text-align:left}.christianity-card-frame{display:grid;grid-template-rows:auto minmax(0,1fr) auto auto;align-content:stretch}.christianity-offering-pile,.christianity-zone-card,.christianity-zone-pile{grid-template-rows:auto minmax(2.6rem,1fr) auto;align-content:stretch;gap:.32rem}.christianity-card-mini{width:3.5rem}.christianity-offering-pile{position:relative;isolation:isolate;overflow:hidden;justify-self:start;width:min(100%,5.9rem);height:7.1rem;max-height:7.1rem;min-height:0;padding:.72rem .5rem .55rem;background:linear-gradient(180deg,#fff,#f8fafc),linear-gradient(135deg,rgba(250,204,21,.18),transparent 42%)}.christianity-offering-drop-target .christianity-offering-pile{width:100%;height:100%;max-height:none}.christianity-offering-pile>span{position:relative;z-index:2;max-width:100%;overflow:hidden;font-size:clamp(.86rem,2.4vw,1rem);text-overflow:ellipsis;white-space:nowrap}.christianity-offering-pile>strong{position:relative;z-index:2;justify-self:end;padding:.12rem .34rem;border-radius:999px;background:#edf2f7;font-size:.78rem}.christianity-slot>.cdk-drag-placeholder{display:none}.christianity-offering-pile i{position:absolute;top:2.25rem;left:50%;z-index:1;width:2.7rem;height:3.75rem;border:1px solid rgba(16,42,67,.18);border-radius:.35rem;background:linear-gradient(180deg,#ffffffeb,#f1f5f9eb),radial-gradient(circle at 78% 18%,#facc15 0 .38rem,transparent .4rem);box-shadow:0 .35rem .85rem #102a431a;transform:translate(-58%) rotate(-5deg)}.christianity-offering-pile i:nth-child(2){transform:translate(-50%) translate(.24rem,.08rem) rotate(3deg)}.christianity-offering-pile i:nth-child(3){transform:translate(-50%) translate(.48rem,.18rem) rotate(-1deg)}.christianity-leader-card{align-self:center;justify-self:center;width:clamp(4.75rem,17vw,6rem);min-height:0;aspect-ratio:var(--christianity-card-aspect)}.christianity-rack-spacer{display:block;min-height:1px}.christianity-battle-zone{grid-template-columns:repeat(4,var(--christianity-battle-card-width))}.christianity-shared-zone{box-sizing:border-box;display:grid;grid-template-columns:repeat(3,minmax(4.3rem,1fr));align-items:stretch;width:100%;max-width:100%;min-width:0}.christianity-zone-card,.christianity-zone-pile{min-height:6.45rem;padding:.7rem .52rem .55rem}.christianity-zone-pile{position:relative;isolation:isolate;overflow:hidden;box-shadow:inset 0 0 0 999px #ffffff1f}.christianity-zone-pile i{position:absolute;top:2.2rem;right:.72rem;z-index:-1;width:2.7rem;height:3.7rem;border:1px solid rgba(16,42,67,.18);border-radius:.35rem;background:#f8fafc;box-shadow:0 .35rem .85rem #102a431c;transform:rotate(4deg)}.christianity-zone-pile i:nth-child(2){transform:translate(-.28rem,.12rem) rotate(-3deg)}.christianity-zone-pile i:nth-child(3){background:var(--christianity-card-back);transform:translate(-.54rem,.24rem) rotate(2deg)}.christianity-floating-card-shell{position:fixed;top:calc(50% + 1.3rem);left:50%;z-index:132;display:grid;grid-template-rows:minmax(0,auto) auto;gap:.55rem;width:min(17.5rem,calc(52dvh - 3rem),calc(100vw - 1.25rem));max-height:calc(100dvh - 4.25rem);padding-top:2.5rem;transform:translate(-50%,-50%)}.christianity-floating-card{position:relative;z-index:1;display:block;width:100%;min-height:0;padding:0;border:0;border-radius:.75rem;background:transparent;box-shadow:0 0 2.2rem var(--christianity-theme-glow);touch-action:none;transform:translate(var(--preview-shift-x, 0px),var(--preview-shift-y, 0px)) perspective(48rem) rotateX(var(--preview-rotate-x, 5deg)) rotateY(var(--preview-rotate-y, -5deg));transition:transform 90ms ease-out}.christianity-floating-card val-christianity-card{display:block;width:100%;min-height:0}.christianity-full-card-header{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:.42rem;align-items:center}.christianity-full-card-header strong{min-width:0;display:-webkit-box;overflow:hidden;overflow-wrap:anywhere;text-overflow:clip;-webkit-box-orient:vertical;-webkit-line-clamp:2;font-size:clamp(1.25rem,5vw,1.85rem);line-height:1.04}.christianity-full-card-type-icon,.christianity-full-card-cost{display:grid;place-items:center;border-radius:999px}.christianity-full-card-type-icon{width:1.6rem;height:1.6rem;background:radial-gradient(circle at 50% 50%,rgba(95,111,42,.72) 0 .22rem,transparent .24rem),#2430441a}.christianity-full-card-type-icon img{width:1rem;height:1rem;object-fit:contain}.christianity-full-card-cost{min-width:2.1rem;height:2.1rem;padding:0 .36rem;background:#ffd91a;color:#243044;font-size:1.1rem;font-weight:900;box-shadow:inset 0 -.12rem #52401c2e}.christianity-full-card-art{position:relative;display:grid;place-items:center;min-height:9rem;overflow:hidden;border-radius:.48rem;background:linear-gradient(135deg,#5f6f2a33,#d6a21d29),radial-gradient(circle at 50% 25%,rgba(255,255,255,.76),transparent 42%),#dbe7ef;box-shadow:inset 0 0 0 1px #24304414}.christianity-full-card-art img{width:100%;height:100%;object-fit:cover}.christianity-full-card-art>span{max-width:80%;color:#24304494;font-size:clamp(1.1rem,5vw,1.8rem);font-weight:900;line-height:1.05;text-align:center}.christianity-full-card-art small{position:absolute;right:0;bottom:.55rem;min-width:5rem;padding:.16rem .48rem;border-radius:999px 0 0 999px;background:#ffffffe6;box-shadow:0 .3rem .8rem #102a431f;color:#1f2933bd;font-size:.68rem;font-style:italic;font-weight:900;text-align:center;text-transform:uppercase}.christianity-full-card-verse,.christianity-full-card-effect{display:grid;gap:.32rem}.christianity-full-card-verse p,.christianity-full-card-effect p{margin:0;line-height:1.25}.christianity-full-card-verse{color:#171923;font-family:Georgia,Times New Roman,serif;font-size:clamp(.72rem,2.7vw,.86rem)}.christianity-full-card-verse strong{font-family:inherit;font-size:.78rem;font-weight:900}.christianity-full-card-effect{position:relative;align-content:start;min-height:7rem;padding:.6rem .7rem;overflow:hidden;border-radius:.45rem;background:radial-gradient(circle at 50% 72%,rgba(36,48,68,.07),transparent 34%),#ffffffdb}.christianity-full-card-stats{display:flex;gap:1rem;min-height:1.35rem}.christianity-full-card-stats strong{font-size:1rem;line-height:1}.christianity-full-card-stats .christianity-full-card-pips{display:inline-grid;grid-auto-flow:column;gap:.2rem;justify-self:start;padding:0;background:transparent}.christianity-full-card-effect>div:last-of-type{display:grid;gap:.12rem}.christianity-full-card-effect>div:last-of-type strong{font-size:.82rem}.christianity-full-card-effect p{font-size:clamp(.78rem,2.9vw,.92rem)}.christianity-full-card-rarity{position:absolute;top:.62rem;right:.62rem;width:.46rem;height:.46rem;border-radius:.12rem;transform:rotate(45deg)}.christianity-full-card-rarity.is-normal{background:#d1d5db}.christianity-full-card-rarity.is-uncommon{background:#22c55e}.christianity-full-card-rarity.is-rare{background:#3b82f6}.christianity-full-card-rarity.is-legendary{background:#eab308}.christianity-full-card-footer{display:grid;grid-template-columns:auto auto minmax(0,1fr) auto;gap:.34rem;align-items:center;color:#1f2933ad;font-size:.58rem;line-height:1;text-transform:uppercase}.christianity-full-card-footer span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.christianity-floating-card-close{position:absolute;top:0;right:.15rem;z-index:6;min-height:2rem;padding:0 .6rem;border:1px solid rgba(36,48,68,.14);border-radius:999px;background:#ffffffe6;color:#1f2933c7;font:inherit;font-size:.76rem;font-weight:800;box-shadow:0 .45rem 1rem #102a431a}.christianity-preview-nav{position:absolute;top:50%;z-index:6;display:grid;place-items:center;width:2.35rem;height:2.35rem;border:1px solid rgba(37,99,235,.26);border-radius:999px;background:#ffffffeb;color:var(--christianity-theme-focus);font:inherit;font-size:1.1rem;font-weight:1000;box-shadow:0 .75rem 1.4rem #102a4324,inset 0 0 0 1px #ffffff70;transform:translateY(-50%)}.christianity-preview-nav--previous{left:-.65rem}.christianity-preview-nav--next{right:-.65rem}.christianity-preview-backdrop,.christianity-history-backdrop,.christianity-info-backdrop{position:fixed;inset:0;border:0;border-radius:0;background:#0f172a75}.christianity-preview-backdrop{z-index:131}.christianity-info-backdrop{z-index:50}.christianity-info-panel{position:fixed;top:50%;left:50%;z-index:51;width:min(31rem,calc(100vw - 1.25rem));max-height:min(34rem,calc(100vh - 2rem));padding-top:2.35rem;transform:translate(-50%,-50%)}.christianity-info-close{position:absolute;top:0;right:.15rem;z-index:2}.christianity-rule-note{display:grid;grid-template-columns:auto minmax(0,1fr);gap:.85rem;max-height:inherit;padding:1rem;overflow-y:auto;border:1px solid rgba(36,48,68,.14);border-radius:.9rem;background:linear-gradient(180deg,#fffffff7,#f8fafcf7),radial-gradient(circle at 8% 0%,rgba(37,99,235,.1),transparent 38%);box-shadow:0 1.2rem 2.6rem #102a433d,inset 0 0 0 .25rem #ffffff85}.christianity-rule-note-icon{display:grid;place-items:center;width:2.1rem;height:2.1rem;border-radius:999px;background:color-mix(in srgb,var(--christianity-theme-focus) 12%,#ffffff);color:var(--christianity-theme-focus);font-size:1rem;font-weight:900;box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--christianity-theme-focus) 24%,transparent)}.christianity-rule-note small,.christianity-rule-note strong,.christianity-rule-note p,.christianity-rule-note h2{margin:0}.christianity-rule-note small{color:#1f29339e;font-size:.78rem;font-weight:800;text-transform:uppercase}.christianity-rule-note h2{margin-top:.18rem;font-size:clamp(1.5rem,7vw,2.2rem);line-height:1.05}.christianity-rule-note strong{display:inline-flex;width:fit-content;margin-top:.55rem;padding:.22rem .55rem;border-radius:999px;background:#edf2f7;font-size:.92rem}.christianity-rule-note p{margin-top:.75rem;color:#1f2933c7;line-height:1.45}.christianity-rule-note ul{display:grid;gap:.45rem;margin:.8rem 0 0;padding-left:1.05rem;color:#1f2933c7;line-height:1.35}.christianity-floating-card>small,.christianity-floating-card>span{color:#1f2933a3}.christianity-floating-card>strong{font-size:clamp(1.55rem,8vw,2.35rem);line-height:1.05}.christianity-floating-card>p{margin:0;align-self:end;font-size:.95rem;line-height:1.35}.christianity-preview-rule-note{position:relative;z-index:4;display:grid;grid-template-columns:auto minmax(0,1fr);gap:.65rem;align-items:start;padding:.75rem .85rem;border:1px solid rgba(36,48,68,.14);border-radius:.75rem;background:linear-gradient(180deg,#fffffff5,#f8fafcf5),radial-gradient(circle at 8% 0%,rgba(37,99,235,.08),transparent 44%);box-shadow:0 .75rem 1.6rem #102a431f}.christianity-preview-rule-note small,.christianity-preview-rule-note strong,.christianity-preview-rule-note p{margin:0}.christianity-preview-rule-note small{color:#1f293394;font-size:.68rem;font-weight:800;text-transform:uppercase}.christianity-preview-rule-note strong{display:block;margin-top:.08rem;font-size:.92rem;line-height:1.1}.christianity-preview-rule-note p{margin-top:.22rem;color:#1f2933bd;font-size:.82rem;line-height:1.32}@media (min-width: 52rem){.christianity-floating-card-shell{width:min(22rem,calc(67dvh - 5.85rem),calc(100vw - 3rem))}.christianity-floating-card{min-height:0;padding:0}}@media (max-width: 51.99rem){.christianity-floating-card-shell{top:calc(50% + .7rem);gap:.45rem;max-height:calc(100dvh - 3.25rem);padding-top:2.15rem}.christianity-floating-card-close{min-height:1.9rem;padding:0 .58rem;font-size:.72rem}.christianity-preview-nav{top:calc(50% - .85rem);width:2rem;height:2rem}.christianity-preview-nav--previous{left:-.35rem}.christianity-preview-nav--next{right:-.35rem}.christianity-preview-rule-note{max-height:min(8.25rem,24dvh);padding:.62rem .68rem;overflow-y:auto;scrollbar-color:rgba(36,48,68,.28) transparent;scrollbar-gutter:stable}.christianity-preview-rule-note .christianity-rule-note-icon{width:1.8rem;height:1.8rem;font-size:.9rem}.christianity-preview-rule-note strong{font-size:.86rem}.christianity-preview-rule-note p{font-size:.78rem;line-height:1.28}}.christianity-history-backdrop{z-index:40}.christianity-history-drawer{position:fixed;right:auto;bottom:max(.5rem,env(safe-area-inset-bottom));left:50%;z-index:41;display:grid;grid-template-rows:auto minmax(0,1fr);gap:.75rem;width:min(calc(100vw - 1rem),44rem);min-height:min(18rem,calc(100dvh - 1rem));max-height:min(32rem,calc(100dvh - 2rem));padding:.8rem;border:1px solid rgba(36,48,68,.16);border-radius:.75rem;background:#fffffffa;box-shadow:0 1.5rem 4rem #102a4347;transform:translate(-50%)}.christianity-history-drawer header{display:flex;align-items:center;justify-content:space-between;gap:.75rem}.christianity-history-drawer h2,.christianity-history-drawer p{margin:0}.christianity-history-drawer header span{display:grid;place-items:center;min-width:1.85rem;height:1.85rem;border-radius:999px;background:#edf2f7;font-weight:800}.christianity-dialog-actions{display:flex;align-items:center;gap:.45rem}.christianity-dialog-close{min-height:1.85rem;padding:0 .62rem;border:1px solid rgba(36,48,68,.14);border-radius:999px;background:#fff;color:#1f2933c7;font:inherit;font-size:.76rem;font-weight:800;box-shadow:0 .35rem .8rem #102a4314}.christianity-history-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(5.4rem,1fr));gap:.55rem;min-height:0;overflow-y:scroll;scrollbar-color:rgba(36,48,68,.32) rgba(226,232,240,.72);scrollbar-gutter:stable;padding:.1rem .1rem .25rem}.christianity-history-grid::-webkit-scrollbar,.christianity-offering-list::-webkit-scrollbar{width:.65rem}.christianity-history-grid::-webkit-scrollbar-track,.christianity-offering-list::-webkit-scrollbar-track{border-radius:999px;background:#e2e8f0b8}.christianity-history-grid::-webkit-scrollbar-thumb,.christianity-offering-list::-webkit-scrollbar-thumb{border:.14rem solid rgba(226,232,240,.72);border-radius:999px;background:#24304452}.christianity-offerings-drawer{grid-template-rows:auto auto minmax(0,1fr);width:min(calc(100vw - 1rem),48rem);min-height:min(20rem,calc(100dvh - 1rem));max-height:min(34rem,calc(100dvh - 2rem))}.christianity-offerings-note{display:grid;grid-template-columns:auto minmax(0,1fr);gap:.65rem;align-items:start;padding:.72rem .8rem;border:1px solid rgba(36,48,68,.12);border-radius:.7rem;background:linear-gradient(180deg,#fffffff5,#f8fafcf5),radial-gradient(circle at 8% 0%,rgba(214,162,29,.12),transparent 42%)}.christianity-offerings-note p{margin:0;color:#1f2933c2;font-size:.86rem;line-height:1.35}.christianity-offering-list{display:grid;gap:.6rem;min-height:0;overflow-y:scroll;scrollbar-color:rgba(36,48,68,.32) rgba(226,232,240,.72);scrollbar-gutter:stable;padding:.1rem}.christianity-offering-row{display:grid;grid-template-columns:minmax(5.4rem,6.5rem) minmax(0,1fr);gap:.65rem;align-items:center;padding:.45rem;border:1px solid rgba(36,48,68,.12);border-radius:.65rem;background:#fff}.christianity-offering-row.is-exhausted{opacity:.68}.christianity-gallery-drawer{grid-template-rows:auto auto auto minmax(0,1fr);width:min(calc(100vw - 1rem),50rem);min-height:min(22rem,calc(100dvh - 1rem));max-height:min(36rem,calc(100dvh - 2rem))}.christianity-gallery-drawer header>div:first-child{display:grid;gap:.15rem;min-width:0}.christianity-gallery-drawer header p{color:#1f293394;font-size:.82rem}.christianity-gallery-controls{display:grid;grid-template-columns:minmax(0,1fr) minmax(8.5rem,13rem);gap:.65rem}.christianity-gallery-controls label{display:grid;gap:.25rem;min-width:0;color:#1f29339e;font-size:.74rem;font-weight:800}.christianity-gallery-controls input,.christianity-gallery-controls select{width:100%;min-width:0;min-height:2.35rem;padding:0 .75rem;border:1px solid rgba(36,48,68,.16);border-radius:.65rem;background:#fff;color:var(--christianity-theme-ink);font:inherit;font-size:.9rem}.christianity-gallery-edition-strip{display:flex;gap:.45rem;overflow-x:auto;padding-bottom:.1rem}.christianity-gallery-edition-strip button{display:inline-flex;align-items:center;gap:.45rem;min-height:2.35rem;padding:0 .75rem;border:1px solid rgba(214,162,29,.38);border-radius:999px;background:var(--christianity-theme-parchment);color:var(--christianity-theme-ink);font:inherit;font-size:.82rem;font-weight:800}.christianity-gallery-edition-strip img{width:1.2rem;height:1.2rem;object-fit:contain}.christianity-gallery-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(5.8rem,6.8rem));justify-content:center;align-content:start;gap:.65rem;min-height:0;overflow-y:scroll;scrollbar-color:rgba(36,48,68,.32) rgba(226,232,240,.72);scrollbar-gutter:stable;padding:.1rem .1rem .35rem}.christianity-gallery-grid::-webkit-scrollbar{width:.65rem}.christianity-gallery-grid::-webkit-scrollbar-track{border-radius:999px;background:#e2e8f0b8}.christianity-gallery-grid::-webkit-scrollbar-thumb{border:.14rem solid rgba(226,232,240,.72);border-radius:999px;background:#24304452}.christianity-offering-card{position:relative;display:grid;grid-template-rows:auto minmax(0,1fr) auto;align-content:stretch;gap:.26rem;width:100%;min-height:7.7rem;padding:.58rem;overflow:hidden;text-align:left;background:linear-gradient(180deg,#fffffff5,#f8fafcf5),radial-gradient(circle at 78% 14%,rgba(250,204,21,.78) 0 .42rem,transparent .44rem);box-shadow:0 .45rem 1rem #102a431a}.christianity-offering-card small{min-width:0;overflow:hidden;color:#1f293394;font-size:.62rem;font-weight:800;line-height:1;text-overflow:ellipsis;text-transform:uppercase;white-space:nowrap}.christianity-offering-card strong{display:-webkit-box;align-self:start;min-width:0;margin-top:.1rem;overflow:hidden;overflow-wrap:anywhere;font-size:.88rem;line-height:1.05;-webkit-box-orient:vertical;-webkit-line-clamp:3}.christianity-offering-card span{position:absolute;right:.42rem;bottom:.42rem;display:grid;place-items:center;min-width:1.55rem;height:1.55rem;padding:0 .28rem;border-radius:999px;background:#edf2f7;font-size:.82rem;font-weight:900}.christianity-offering-card em{align-self:end;max-width:calc(100% - 1.9rem);overflow:hidden;color:#1f29339e;font-size:.64rem;font-style:normal;font-weight:800;line-height:1.05;text-overflow:ellipsis;white-space:nowrap}.christianity-offering-card p,.christianity-offering-row p{margin:0}.christianity-offering-card p{align-self:end;color:#1f2933a3;font-size:.72rem;line-height:1.2}.christianity-offering-row>div{display:grid;gap:.35rem;align-content:center;min-width:0}.christianity-offering-row>div p{color:#1f2933b8;font-size:.85rem;line-height:1.3}.christianity-offering-row>div button{justify-self:start;min-height:2.2rem;padding:0 .7rem;border:1px solid rgba(16,42,67,.16);border-radius:.5rem;background:#102a43;color:#fff;font:inherit;font-weight:800}.christianity-offering-row>div button:disabled{background:#e2e8f0;color:#1f293394}.christianity-history-grid .christianity-render-card-button{justify-self:center;width:min(100%,6.4rem)}.christianity-gallery-grid .christianity-render-card-button{justify-self:center;width:min(100%,7rem)}.christianity-offering-card.christianity-render-card-button{width:min(100%,5.8rem);min-height:0;padding:0;border:0;background:transparent;box-shadow:none}button{cursor:pointer}button:disabled{cursor:not-allowed;opacity:.55}button:focus-visible{outline:.1875rem solid color-mix(in srgb,var(--christianity-theme-focus) 24%,transparent);outline-offset:.125rem}:host-context(.dark),:host-context(.ion-palette-dark),:host-context(html.ion-palette-dark),:host-context(body.dark),:host-context([data-theme=\"dark\"]){--christianity-theme-ink: var(--ion-text-color, #e5edf8);--christianity-theme-surface: #111827;--christianity-theme-parchment: #13223a;--christianity-theme-olive: #93c5fd;--christianity-theme-gold: #60a5fa;--christianity-theme-gold-soft: rgba(96, 165, 250, .18);--christianity-theme-gold-ring: rgba(147, 197, 253, .42);--christianity-theme-glow: rgba(96, 165, 250, .24);--christianity-theme-focus: #93c5fd;--christianity-theme-shadow: rgba(0, 0, 0, .34);--christianity-theme-shadow-strong: rgba(0, 0, 0, .48);--christianity-card-back: linear-gradient(135deg, rgba(147, 197, 253, .2), rgba(15, 23, 42, .08)), repeating-linear-gradient(45deg, #1e3a5f 0 .33rem, #0f172a .33rem .66rem);--christianity-card-back-soft: linear-gradient(135deg, rgba(147, 197, 253, .15), rgba(15, 23, 42, .06)), repeating-linear-gradient(45deg, #1e3a5f 0 .33rem, #0f172a .33rem .66rem);color-scheme:dark}:host-context(.dark) .christianity-shell,:host-context(.ion-palette-dark) .christianity-shell,:host-context(html.ion-palette-dark) .christianity-shell,:host-context(body.dark) .christianity-shell,:host-context([data-theme=\"dark\"]) .christianity-shell{border-color:#94a3b82e;background:#07111f}:host-context(.dark) .christianity-gallery-open,:host-context(.ion-palette-dark) .christianity-gallery-open,:host-context(html.ion-palette-dark) .christianity-gallery-open,:host-context(body.dark) .christianity-gallery-open,:host-context([data-theme=\"dark\"]) .christianity-gallery-open,:host-context(.dark) .christianity-secondary-action,:host-context(.ion-palette-dark) .christianity-secondary-action,:host-context(html.ion-palette-dark) .christianity-secondary-action,:host-context(body.dark) .christianity-secondary-action,:host-context([data-theme=\"dark\"]) .christianity-secondary-action,:host-context(.dark) .christianity-gallery-edition-strip button,:host-context(.ion-palette-dark) .christianity-gallery-edition-strip button,:host-context(html.ion-palette-dark) .christianity-gallery-edition-strip button,:host-context(body.dark) .christianity-gallery-edition-strip button,:host-context([data-theme=\"dark\"]) .christianity-gallery-edition-strip button{border-color:#93c5fd5c;background:linear-gradient(180deg,#1e3a5fd1,#0f172ae0),radial-gradient(circle at 20% 0%,rgba(96,165,250,.16),transparent 42%);color:var(--christianity-theme-ink);box-shadow:0 .55rem 1.2rem #0000003d}:host-context(.dark) .christianity-splash,:host-context(.ion-palette-dark) .christianity-splash,:host-context(html.ion-palette-dark) .christianity-splash,:host-context(body.dark) .christianity-splash,:host-context([data-theme=\"dark\"]) .christianity-splash,:host-context(.dark) .christianity-start,:host-context(.ion-palette-dark) .christianity-start,:host-context(html.ion-palette-dark) .christianity-start,:host-context(body.dark) .christianity-start,:host-context([data-theme=\"dark\"]) .christianity-start{border-color:#93c5fd38;background:radial-gradient(circle at 50% 18%,rgba(96,165,250,.16),transparent 22rem),linear-gradient(180deg,#0f172ae0,#07111ff7),var(--christianity-card-back-soft);box-shadow:0 1.2rem 3.2rem #00000047}:host-context(.dark) .christianity-start__cards article,:host-context(.ion-palette-dark) .christianity-start__cards article,:host-context(html.ion-palette-dark) .christianity-start__cards article,:host-context(body.dark) .christianity-start__cards article,:host-context([data-theme=\"dark\"]) .christianity-start__cards article,:host-context(.dark) .christianity-start__modes article,:host-context(.ion-palette-dark) .christianity-start__modes article,:host-context(html.ion-palette-dark) .christianity-start__modes article,:host-context(body.dark) .christianity-start__modes article,:host-context([data-theme=\"dark\"]) .christianity-start__modes article,:host-context(.dark) .christianity-start__status span,:host-context(.ion-palette-dark) .christianity-start__status span,:host-context(html.ion-palette-dark) .christianity-start__status span,:host-context(body.dark) .christianity-start__status span,:host-context([data-theme=\"dark\"]) .christianity-start__status span,:host-context(.dark) .christianity-start__modes article>span,:host-context(.ion-palette-dark) .christianity-start__modes article>span,:host-context(html.ion-palette-dark) .christianity-start__modes article>span,:host-context(body.dark) .christianity-start__modes article>span,:host-context([data-theme=\"dark\"]) .christianity-start__modes article>span{border-color:#94a3b833;background:#0f172aad;box-shadow:0 .75rem 1.7rem #00000038}:host-context(.dark) .christianity-splash p,:host-context(.ion-palette-dark) .christianity-splash p,:host-context(html.ion-palette-dark) .christianity-splash p,:host-context(body.dark) .christianity-splash p,:host-context([data-theme=\"dark\"]) .christianity-splash p,:host-context(.dark) .christianity-start__copy p,:host-context(.ion-palette-dark) .christianity-start__copy p,:host-context(html.ion-palette-dark) .christianity-start__copy p,:host-context(body.dark) .christianity-start__copy p,:host-context([data-theme=\"dark\"]) .christianity-start__copy p,:host-context(.dark) .christianity-start__cards p,:host-context(.ion-palette-dark) .christianity-start__cards p,:host-context(html.ion-palette-dark) .christianity-start__cards p,:host-context(body.dark) .christianity-start__cards p,:host-context([data-theme=\"dark\"]) .christianity-start__cards p,:host-context(.dark) .christianity-start__modes p,:host-context(.ion-palette-dark) .christianity-start__modes p,:host-context(html.ion-palette-dark) .christianity-start__modes p,:host-context(body.dark) .christianity-start__modes p,:host-context([data-theme=\"dark\"]) .christianity-start__modes p,:host-context(.dark) .christianity-header p,:host-context(.ion-palette-dark) .christianity-header p,:host-context(html.ion-palette-dark) .christianity-header p,:host-context(body.dark) .christianity-header p,:host-context([data-theme=\"dark\"]) .christianity-header p,:host-context(.dark) .christianity-match-player small,:host-context(.ion-palette-dark) .christianity-match-player small,:host-context(html.ion-palette-dark) .christianity-match-player small,:host-context(body.dark) .christianity-match-player small,:host-context([data-theme=\"dark\"]) .christianity-match-player small,:host-context(.dark) .christianity-scoreboard span,:host-context(.ion-palette-dark) .christianity-scoreboard span,:host-context(html.ion-palette-dark) .christianity-scoreboard span,:host-context(body.dark) .christianity-scoreboard span,:host-context([data-theme=\"dark\"]) .christianity-scoreboard span{color:#e2e8f0bd}:host-context(.dark) .christianity-turn,:host-context(.ion-palette-dark) .christianity-turn,:host-context(html.ion-palette-dark) .christianity-turn,:host-context(body.dark) .christianity-turn,:host-context([data-theme=\"dark\"]) .christianity-turn,:host-context(.dark) .christianity-leader,:host-context(.ion-palette-dark) .christianity-leader,:host-context(html.ion-palette-dark) .christianity-leader,:host-context(body.dark) .christianity-leader,:host-context([data-theme=\"dark\"]) .christianity-leader,:host-context(.dark) .christianity-offerings,:host-context(.ion-palette-dark) .christianity-offerings,:host-context(html.ion-palette-dark) .christianity-offerings,:host-context(body.dark) .christianity-offerings,:host-context([data-theme=\"dark\"]) .christianity-offerings,:host-context(.dark) .christianity-hidden-hand,:host-context(.ion-palette-dark) .christianity-hidden-hand,:host-context(html.ion-palette-dark) .christianity-hidden-hand,:host-context(body.dark) .christianity-hidden-hand,:host-context([data-theme=\"dark\"]) .christianity-hidden-hand,:host-context(.dark) .christianity-pile,:host-context(.ion-palette-dark) .christianity-pile,:host-context(html.ion-palette-dark) .christianity-pile,:host-context(body.dark) .christianity-pile,:host-context([data-theme=\"dark\"]) .christianity-pile,:host-context(.dark) .christianity-deck,:host-context(.ion-palette-dark) .christianity-deck,:host-context(html.ion-palette-dark) .christianity-deck,:host-context(body.dark) .christianity-deck,:host-context([data-theme=\"dark\"]) .christianity-deck,:host-context(.dark) .christianity-place,:host-context(.ion-palette-dark) .christianity-place,:host-context(html.ion-palette-dark) .christianity-place,:host-context(body.dark) .christianity-place,:host-context([data-theme=\"dark\"]) .christianity-place,:host-context(.dark) .christianity-match-strip,:host-context(.ion-palette-dark) .christianity-match-strip,:host-context(html.ion-palette-dark) .christianity-match-strip,:host-context(body.dark) .christianity-match-strip,:host-context([data-theme=\"dark\"]) .christianity-match-strip,:host-context(.dark) .christianity-actions,:host-context(.ion-palette-dark) .christianity-actions,:host-context(html.ion-palette-dark) .christianity-actions,:host-context(body.dark) .christianity-actions,:host-context([data-theme=\"dark\"]) .christianity-actions,:host-context(.dark) .christianity-history,:host-context(.ion-palette-dark) .christianity-history,:host-context(html.ion-palette-dark) .christianity-history,:host-context(body.dark) .christianity-history,:host-context([data-theme=\"dark\"]) .christianity-history{border-color:#94a3b82e;background:#0f172ad1}:host-context(.dark) .christianity-turn.is-own-turn,:host-context(.ion-palette-dark) .christianity-turn.is-own-turn,:host-context(html.ion-palette-dark) .christianity-turn.is-own-turn,:host-context(body.dark) .christianity-turn.is-own-turn,:host-context([data-theme=\"dark\"]) .christianity-turn.is-own-turn{border-color:#2dd4bf5c;background:#14534c5c}:host-context(.dark) .christianity-table,:host-context(.ion-palette-dark) .christianity-table,:host-context(html.ion-palette-dark) .christianity-table,:host-context(body.dark) .christianity-table,:host-context([data-theme=\"dark\"]) .christianity-table{background:linear-gradient(180deg,#10233d,#0b1728)}:host-context(.dark) .christianity-player-side,:host-context(.ion-palette-dark) .christianity-player-side,:host-context(html.ion-palette-dark) .christianity-player-side,:host-context(body.dark) .christianity-player-side,:host-context([data-theme=\"dark\"]) .christianity-player-side{background:#0f172a57}:host-context(.dark) .christianity-battle-zone,:host-context(.ion-palette-dark) .christianity-battle-zone,:host-context(html.ion-palette-dark) .christianity-battle-zone,:host-context(body.dark) .christianity-battle-zone,:host-context([data-theme=\"dark\"]) .christianity-battle-zone,:host-context(.dark) .christianity-shared-zone,:host-context(.ion-palette-dark) .christianity-shared-zone,:host-context(html.ion-palette-dark) .christianity-shared-zone,:host-context(body.dark) .christianity-shared-zone,:host-context([data-theme=\"dark\"]) .christianity-shared-zone{background:#0f172a94}:host-context(.dark) .christianity-battle-zone.is-placing-card,:host-context(.ion-palette-dark) .christianity-battle-zone.is-placing-card,:host-context(html.ion-palette-dark) .christianity-battle-zone.is-placing-card,:host-context(body.dark) .christianity-battle-zone.is-placing-card,:host-context([data-theme=\"dark\"]) .christianity-battle-zone.is-placing-card{background:linear-gradient(180deg,#1e3a5fd1,#0f172ab8),#0f172a94}:host-context(.dark) .christianity-card,:host-context(.ion-palette-dark) .christianity-card,:host-context(html.ion-palette-dark) .christianity-card,:host-context(body.dark) .christianity-card,:host-context([data-theme=\"dark\"]) .christianity-card,:host-context(.dark) .christianity-slot,:host-context(.ion-palette-dark) .christianity-slot,:host-context(html.ion-palette-dark) .christianity-slot,:host-context(body.dark) .christianity-slot,:host-context([data-theme=\"dark\"]) .christianity-slot{border-color:#94a3b83d;background:#0f172a8a}:host-context(.dark) .christianity-slot--play-target,:host-context(.ion-palette-dark) .christianity-slot--play-target,:host-context(html.ion-palette-dark) .christianity-slot--play-target,:host-context(body.dark) .christianity-slot--play-target,:host-context([data-theme=\"dark\"]) .christianity-slot--play-target{color:var(--christianity-theme-ink);background:linear-gradient(180deg,#2563eb3d,#0f172ac7),#0f172abd}:host-context(.dark) .christianity-slot--play-target span,:host-context(.ion-palette-dark) .christianity-slot--play-target span,:host-context(html.ion-palette-dark) .christianity-slot--play-target span,:host-context(body.dark) .christianity-slot--play-target span,:host-context([data-theme=\"dark\"]) .christianity-slot--play-target span,:host-context(.dark) .christianity-card strong,:host-context(.ion-palette-dark) .christianity-card strong,:host-context(html.ion-palette-dark) .christianity-card strong,:host-context(body.dark) .christianity-card strong,:host-context([data-theme=\"dark\"]) .christianity-card strong{background:#1e293beb}:host-context(.dark) .christianity-offering-pile,:host-context(.ion-palette-dark) .christianity-offering-pile,:host-context(html.ion-palette-dark) .christianity-offering-pile,:host-context(body.dark) .christianity-offering-pile,:host-context([data-theme=\"dark\"]) .christianity-offering-pile,:host-context(.dark) .christianity-zone-card,:host-context(.ion-palette-dark) .christianity-zone-card,:host-context(html.ion-palette-dark) .christianity-zone-card,:host-context(body.dark) .christianity-zone-card,:host-context([data-theme=\"dark\"]) .christianity-zone-card,:host-context(.dark) .christianity-zone-pile,:host-context(.ion-palette-dark) .christianity-zone-pile,:host-context(html.ion-palette-dark) .christianity-zone-pile,:host-context(body.dark) .christianity-zone-pile,:host-context([data-theme=\"dark\"]) .christianity-zone-pile{border-color:#94a3b83d;background:linear-gradient(180deg,#111827f5,#0f172af0),radial-gradient(circle at 14% 0%,rgba(96,165,250,.12),transparent 42%);color:var(--christianity-theme-ink);box-shadow:0 .55rem 1.25rem #00000047,inset 0 0 0 .12rem #ffffff08}:host-context(.dark) .christianity-offering-pile>span,:host-context(.ion-palette-dark) .christianity-offering-pile>span,:host-context(html.ion-palette-dark) .christianity-offering-pile>span,:host-context(body.dark) .christianity-offering-pile>span,:host-context([data-theme=\"dark\"]) .christianity-offering-pile>span,:host-context(.dark) .christianity-zone-card>span,:host-context(.ion-palette-dark) .christianity-zone-card>span,:host-context(html.ion-palette-dark) .christianity-zone-card>span,:host-context(body.dark) .christianity-zone-card>span,:host-context([data-theme=\"dark\"]) .christianity-zone-card>span,:host-context(.dark) .christianity-zone-pile>span,:host-context(.ion-palette-dark) .christianity-zone-pile>span,:host-context(html.ion-palette-dark) .christianity-zone-pile>span,:host-context(body.dark) .christianity-zone-pile>span,:host-context([data-theme=\"dark\"]) .christianity-zone-pile>span,:host-context(.dark) .christianity-player-badge,:host-context(.ion-palette-dark) .christianity-player-badge,:host-context(html.ion-palette-dark) .christianity-player-badge,:host-context(body.dark) .christianity-player-badge,:host-context([data-theme=\"dark\"]) .christianity-player-badge{color:#e2e8f0c7}:host-context(.dark) .christianity-offering-pile>strong,:host-context(.ion-palette-dark) .christianity-offering-pile>strong,:host-context(html.ion-palette-dark) .christianity-offering-pile>strong,:host-context(body.dark) .christianity-offering-pile>strong,:host-context([data-theme=\"dark\"]) .christianity-offering-pile>strong,:host-context(.dark) .christianity-zone-card>strong,:host-context(.ion-palette-dark) .christianity-zone-card>strong,:host-context(html.ion-palette-dark) .christianity-zone-card>strong,:host-context(body.dark) .christianity-zone-card>strong,:host-context([data-theme=\"dark\"]) .christianity-zone-card>strong,:host-context(.dark) .christianity-zone-pile>strong,:host-context(.ion-palette-dark) .christianity-zone-pile>strong,:host-context(html.ion-palette-dark) .christianity-zone-pile>strong,:host-context(body.dark) .christianity-zone-pile>strong,:host-context([data-theme=\"dark\"]) .christianity-zone-pile>strong,:host-context(.dark) .christianity-hand-meter,:host-context(.ion-palette-dark) .christianity-hand-meter,:host-context(html.ion-palette-dark) .christianity-hand-meter,:host-context(body.dark) .christianity-hand-meter,:host-context([data-theme=\"dark\"]) .christianity-hand-meter{border-color:#94a3b833;background:#0f172ae0;color:var(--christianity-theme-ink);box-shadow:0 .35rem .8rem #00000047}:host-context(.dark) .christianity-hand-meter span,:host-context(.ion-palette-dark) .christianity-hand-meter span,:host-context(html.ion-palette-dark) .christianity-hand-meter span,:host-context(body.dark) .christianity-hand-meter span,:host-context([data-theme=\"dark\"]) .christianity-hand-meter span{color:#e2e8f0b3}:host-context(.dark) .christianity-offering-pile i,:host-context(.ion-palette-dark) .christianity-offering-pile i,:host-context(html.ion-palette-dark) .christianity-offering-pile i,:host-context(body.dark) .christianity-offering-pile i,:host-context([data-theme=\"dark\"]) .christianity-offering-pile i{border-color:#94a3b833;background:linear-gradient(180deg,#e2e8f0f0,#cbd5e1e6),radial-gradient(circle at 78% 18%,#facc15 0 .38rem,transparent .4rem)}:host-context(.dark) .christianity-zone-pile i,:host-context(.ion-palette-dark) .christianity-zone-pile i,:host-context(html.ion-palette-dark) .christianity-zone-pile i,:host-context(body.dark) .christianity-zone-pile i,:host-context([data-theme=\"dark\"]) .christianity-zone-pile i{border-color:#94a3b838;background:#e2e8f0eb;box-shadow:0 .35rem .85rem #00000042}:host-context(.dark) .christianity-zone-pile i:nth-child(3),:host-context(.ion-palette-dark) .christianity-zone-pile i:nth-child(3),:host-context(html.ion-palette-dark) .christianity-zone-pile i:nth-child(3),:host-context(body.dark) .christianity-zone-pile i:nth-child(3),:host-context([data-theme=\"dark\"]) .christianity-zone-pile i:nth-child(3){background:var(--christianity-card-back)}:host-context(.dark) .christianity-end-turn:disabled,:host-context(.ion-palette-dark) .christianity-end-turn:disabled,:host-context(html.ion-palette-dark) .christianity-end-turn:disabled,:host-context(body.dark) .christianity-end-turn:disabled,:host-context([data-theme=\"dark\"]) .christianity-end-turn:disabled{border-color:#94a3b829;background:#0f172a75;color:#e2e8f06b;opacity:1}:host-context(.dark) .christianity-history-drawer,:host-context(.ion-palette-dark) .christianity-history-drawer,:host-context(html.ion-palette-dark) .christianity-history-drawer,:host-context(body.dark) .christianity-history-drawer,:host-context([data-theme=\"dark\"]) .christianity-history-drawer,:host-context(.dark) .christianity-rule-note,:host-context(.ion-palette-dark) .christianity-rule-note,:host-context(html.ion-palette-dark) .christianity-rule-note,:host-context(body.dark) .christianity-rule-note,:host-context([data-theme=\"dark\"]) .christianity-rule-note,:host-context(.dark) .christianity-preview-rule-note,:host-context(.ion-palette-dark) .christianity-preview-rule-note,:host-context(html.ion-palette-dark) .christianity-preview-rule-note,:host-context(body.dark) .christianity-preview-rule-note,:host-context([data-theme=\"dark\"]) .christianity-preview-rule-note{border-color:#94a3b82e;background:linear-gradient(180deg,#0f172af5,#111827f5),radial-gradient(circle at 8% 0%,rgba(96,165,250,.12),transparent 40%);box-shadow:0 1.5rem 4rem #0000006b}:host-context(.dark) .christianity-dialog-close,:host-context(.ion-palette-dark) .christianity-dialog-close,:host-context(html.ion-palette-dark) .christianity-dialog-close,:host-context(body.dark) .christianity-dialog-close,:host-context([data-theme=\"dark\"]) .christianity-dialog-close,:host-context(.dark) .christianity-floating-card-close,:host-context(.ion-palette-dark) .christianity-floating-card-close,:host-context(html.ion-palette-dark) .christianity-floating-card-close,:host-context(body.dark) .christianity-floating-card-close,:host-context([data-theme=\"dark\"]) .christianity-floating-card-close,:host-context(.dark) .christianity-preview-nav,:host-context(.ion-palette-dark) .christianity-preview-nav,:host-context(html.ion-palette-dark) .christianity-preview-nav,:host-context(body.dark) .christianity-preview-nav,:host-context([data-theme=\"dark\"]) .christianity-preview-nav{border-color:#94a3b838;background:#0f172af0;color:var(--christianity-theme-ink);box-shadow:0 .35rem .8rem #0000004d}:host-context(.dark) .christianity-history-drawer header span,:host-context(.ion-palette-dark) .christianity-history-drawer header span,:host-context(html.ion-palette-dark) .christianity-history-drawer header span,:host-context(body.dark) .christianity-history-drawer header span,:host-context([data-theme=\"dark\"]) .christianity-history-drawer header span,:host-context(.dark) .christianity-rule-note strong,:host-context(.ion-palette-dark) .christianity-rule-note strong,:host-context(html.ion-palette-dark) .christianity-rule-note strong,:host-context(body.dark) .christianity-rule-note strong,:host-context([data-theme=\"dark\"]) .christianity-rule-note strong{background:#1e293beb}:host-context(.dark) .christianity-rule-note small,:host-context(.ion-palette-dark) .christianity-rule-note small,:host-context(html.ion-palette-dark) .christianity-rule-note small,:host-context(body.dark) .christianity-rule-note small,:host-context([data-theme=\"dark\"]) .christianity-rule-note small,:host-context(.dark) .christianity-preview-rule-note small,:host-context(.ion-palette-dark) .christianity-preview-rule-note small,:host-context(html.ion-palette-dark) .christianity-preview-rule-note small,:host-context(body.dark) .christianity-preview-rule-note small,:host-context([data-theme=\"dark\"]) .christianity-preview-rule-note small,:host-context(.dark) .christianity-gallery-drawer header p,:host-context(.ion-palette-dark) .christianity-gallery-drawer header p,:host-context(html.ion-palette-dark) .christianity-gallery-drawer header p,:host-context(body.dark) .christianity-gallery-drawer header p,:host-context([data-theme=\"dark\"]) .christianity-gallery-drawer header p,:host-context(.dark) .christianity-gallery-controls label,:host-context(.ion-palette-dark) .christianity-gallery-controls label,:host-context(html.ion-palette-dark) .christianity-gallery-controls label,:host-context(body.dark) .christianity-gallery-controls label,:host-context([data-theme=\"dark\"]) .christianity-gallery-controls label{color:#e2e8f0ad}:host-context(.dark) .christianity-rule-note p,:host-context(.ion-palette-dark) .christianity-rule-note p,:host-context(html.ion-palette-dark) .christianity-rule-note p,:host-context(body.dark) .christianity-rule-note p,:host-context([data-theme=\"dark\"]) .christianity-rule-note p,:host-context(.dark) .christianity-rule-note ul,:host-context(.ion-palette-dark) .christianity-rule-note ul,:host-context(html.ion-palette-dark) .christianity-rule-note ul,:host-context(body.dark) .christianity-rule-note ul,:host-context([data-theme=\"dark\"]) .christianity-rule-note ul,:host-context(.dark) .christianity-preview-rule-note p,:host-context(.ion-palette-dark) .christianity-preview-rule-note p,:host-context(html.ion-palette-dark) .christianity-preview-rule-note p,:host-context(body.dark) .christianity-preview-rule-note p,:host-context([data-theme=\"dark\"]) .christianity-preview-rule-note p,:host-context(.dark) .christianity-offerings-note p,:host-context(.ion-palette-dark) .christianity-offerings-note p,:host-context(html.ion-palette-dark) .christianity-offerings-note p,:host-context(body.dark) .christianity-offerings-note p,:host-context([data-theme=\"dark\"]) .christianity-offerings-note p{color:#e2e8f0cc}:host-context(.dark) .christianity-gallery-controls input,:host-context(.ion-palette-dark) .christianity-gallery-controls input,:host-context(html.ion-palette-dark) .christianity-gallery-controls input,:host-context(body.dark) .christianity-gallery-controls input,:host-context([data-theme=\"dark\"]) .christianity-gallery-controls input,:host-context(.dark) .christianity-gallery-controls select,:host-context(.ion-palette-dark) .christianity-gallery-controls select,:host-context(html.ion-palette-dark) .christianity-gallery-controls select,:host-context(body.dark) .christianity-gallery-controls select,:host-context([data-theme=\"dark\"]) .christianity-gallery-controls select,:host-context(.dark) .christianity-offering-row,:host-context(.ion-palette-dark) .christianity-offering-row,:host-context(html.ion-palette-dark) .christianity-offering-row,:host-context(body.dark) .christianity-offering-row,:host-context([data-theme=\"dark\"]) .christianity-offering-row,:host-context(.dark) .christianity-offerings-note,:host-context(.ion-palette-dark) .christianity-offerings-note,:host-context(html.ion-palette-dark) .christianity-offerings-note,:host-context(body.dark) .christianity-offerings-note,:host-context([data-theme=\"dark\"]) .christianity-offerings-note{border-color:#94a3b833;background:#0f172ac7;color:var(--christianity-theme-ink)}:host-context(.dark) .christianity-history-grid,:host-context(.ion-palette-dark) .christianity-history-grid,:host-context(html.ion-palette-dark) .christianity-history-grid,:host-context(body.dark) .christianity-history-grid,:host-context([data-theme=\"dark\"]) .christianity-history-grid,:host-context(.dark) .christianity-offering-list,:host-context(.ion-palette-dark) .christianity-offering-list,:host-context(html.ion-palette-dark) .christianity-offering-list,:host-context(body.dark) .christianity-offering-list,:host-context([data-theme=\"dark\"]) .christianity-offering-list,:host-context(.dark) .christianity-gallery-grid,:host-context(.ion-palette-dark) .christianity-gallery-grid,:host-context(html.ion-palette-dark) .christianity-gallery-grid,:host-context(body.dark) .christianity-gallery-grid,:host-context([data-theme=\"dark\"]) .christianity-gallery-grid,:host-context(.dark) .christianity-preview-rule-note,:host-context(.ion-palette-dark) .christianity-preview-rule-note,:host-context(html.ion-palette-dark) .christianity-preview-rule-note,:host-context(body.dark) .christianity-preview-rule-note,:host-context([data-theme=\"dark\"]) .christianity-preview-rule-note{scrollbar-color:rgba(148,163,184,.54) rgba(15,23,42,.86)}:host-context(.dark) .christianity-rule-note-icon,:host-context(.ion-palette-dark) .christianity-rule-note-icon,:host-context(html.ion-palette-dark) .christianity-rule-note-icon,:host-context(body.dark) .christianity-rule-note-icon,:host-context([data-theme=\"dark\"]) .christianity-rule-note-icon{background:#60a5fa29;color:#bfdbfe;box-shadow:inset 0 0 0 1px #93c5fd38}:host-context(.dark) .christianity-history-grid::-webkit-scrollbar-track,:host-context(.ion-palette-dark) .christianity-history-grid::-webkit-scrollbar-track,:host-context(html.ion-palette-dark) .christianity-history-grid::-webkit-scrollbar-track,:host-context(body.dark) .christianity-history-grid::-webkit-scrollbar-track,:host-context([data-theme=\"dark\"]) .christianity-history-grid::-webkit-scrollbar-track,:host-context(.dark) .christianity-offering-list::-webkit-scrollbar-track,:host-context(.ion-palette-dark) .christianity-offering-list::-webkit-scrollbar-track,:host-context(html.ion-palette-dark) .christianity-offering-list::-webkit-scrollbar-track,:host-context(body.dark) .christianity-offering-list::-webkit-scrollbar-track,:host-context([data-theme=\"dark\"]) .christianity-offering-list::-webkit-scrollbar-track,:host-context(.dark) .christianity-gallery-grid::-webkit-scrollbar-track,:host-context(.ion-palette-dark) .christianity-gallery-grid::-webkit-scrollbar-track,:host-context(html.ion-palette-dark) .christianity-gallery-grid::-webkit-scrollbar-track,:host-context(body.dark) .christianity-gallery-grid::-webkit-scrollbar-track,:host-context([data-theme=\"dark\"]) .christianity-gallery-grid::-webkit-scrollbar-track{background:#0f172adb}:host-context(.dark) .christianity-history-grid::-webkit-scrollbar-thumb,:host-context(.ion-palette-dark) .christianity-history-grid::-webkit-scrollbar-thumb,:host-context(html.ion-palette-dark) .christianity-history-grid::-webkit-scrollbar-thumb,:host-context(body.dark) .christianity-history-grid::-webkit-scrollbar-thumb,:host-context([data-theme=\"dark\"]) .christianity-history-grid::-webkit-scrollbar-thumb,:host-context(.dark) .christianity-offering-list::-webkit-scrollbar-thumb,:host-context(.ion-palette-dark) .christianity-offering-list::-webkit-scrollbar-thumb,:host-context(html.ion-palette-dark) .christianity-offering-list::-webkit-scrollbar-thumb,:host-context(body.dark) .christianity-offering-list::-webkit-scrollbar-thumb,:host-context([data-theme=\"dark\"]) .christianity-offering-list::-webkit-scrollbar-thumb,:host-context(.dark) .christianity-gallery-grid::-webkit-scrollbar-thumb,:host-context(.ion-palette-dark) .christianity-gallery-grid::-webkit-scrollbar-thumb,:host-context(html.ion-palette-dark) .christianity-gallery-grid::-webkit-scrollbar-thumb,:host-context(body.dark) .christianity-gallery-grid::-webkit-scrollbar-thumb,:host-context([data-theme=\"dark\"]) .christianity-gallery-grid::-webkit-scrollbar-thumb{border-color:#0f172adb;background:#94a3b88a}@media (max-width: 720px){:host{overflow-x:hidden}.christianity-shell{padding:.55rem 0 .65rem;border-right:0;border-left:0;border-radius:0}.christianity-header,.christianity-match-strip,.christianity-actions{box-sizing:border-box;width:100%;padding-right:max(.5rem,env(safe-area-inset-right));padding-left:max(.5rem,env(safe-area-inset-left))}.christianity-header,.christianity-player__summary,.christianity-shared-zone,.christianity-actions{align-items:stretch;flex-direction:column}.christianity-match-strip{grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);gap:.35rem;padding:.35rem}.christianity-match-player{gap:.35rem}.christianity-match-player small{display:none}.christianity-header-actions{align-items:flex-end;flex-direction:column}.christianity-start__cards,.christianity-start__hero{grid-template-columns:minmax(0,1fr)}.christianity-start__fan{min-height:10.5rem}.christianity-start__fan val-christianity-card{width:clamp(5.2rem,22vw,6.4rem)}.christianity-start__modes{grid-template-columns:repeat(2,minmax(0,1fr))}.christianity-splash,.christianity-start{min-height:min(30rem,calc(100dvh - 7rem));padding-right:max(.65rem,env(safe-area-inset-right));padding-left:max(.65rem,env(safe-area-inset-left));border-right:0;border-left:0;border-radius:0}.christianity-scoreboard{min-width:3.65rem;padding:0 .35rem}.christianity-scoreboard strong{font-size:1.05rem}.christianity-table{gap:.35rem;padding-right:.25rem;padding-left:.25rem}.christianity-player-side{padding:.3rem .25rem}.christianity-battle-zone{--christianity-battle-card-width: min(5.2rem, calc((100vw - 4.25rem)/4) );grid-template-columns:repeat(4,var(--christianity-battle-card-width));justify-content:center;min-height:8.75rem;overflow-x:clip}.christianity-hand-fan{min-height:11.45rem;padding-bottom:2rem;overflow:visible}.christianity-hand-shelf{min-height:12.65rem;margin-top:-1rem;padding-top:1.35rem;padding-bottom:.9rem}.christianity-hand-shelf--opponent{min-height:6.65rem;margin-top:0;margin-bottom:0;padding-top:.4rem;padding-bottom:.85rem}.christianity-player-rack{grid-template-columns:minmax(4.5rem,5.7rem) minmax(4.4rem,1fr) minmax(3.5rem,4.8rem)}.christianity-shared-zone{gap:.45rem;grid-template-columns:repeat(3,minmax(0,1fr))}.christianity-zone-card,.christianity-zone-pile{min-height:6.15rem;padding:.58rem .46rem .5rem;gap:.24rem}.christianity-zone-pile i{top:2rem;right:.52rem;width:2.35rem;height:3.25rem}.christianity-offering-pile{height:6.85rem;max-height:6.85rem;padding:.72rem .46rem .5rem;gap:.24rem}.christianity-offering-drop-target{height:6.85rem;min-height:0;max-height:6.85rem}.christianity-offering-pile i{top:2.18rem;left:50%;width:2.35rem;height:3.25rem}.christianity-card-preview-card{width:clamp(4.2rem,20vw,5.7rem);height:auto;min-height:0}.christianity-leader-card{width:clamp(4.55rem,20vw,5.7rem);min-height:0}.christianity-offering-row{grid-template-columns:minmax(5rem,5.8rem) minmax(0,1fr);gap:.5rem}.christianity-gallery-controls{grid-template-columns:minmax(0,1fr)}.christianity-gallery-grid{grid-template-columns:repeat(auto-fill,minmax(5.35rem,6.1rem));justify-content:center}.christianity-offering-card{min-height:7.25rem;padding:.5rem}.christianity-hand-fan--opponent{min-height:5.75rem;padding-bottom:.7rem}.christianity-hand-fan--opponent .christianity-hidden-card-button{width:clamp(3.35rem,15vw,4.25rem);margin-inline:-.72rem}}\n"] }]
2565
+ }], ctorParameters: () => [] });
2566
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hyaXN0aWFuaXR5LWdhbWUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL29yZ2FuaXNtcy9taW5pLWdhbWVzL2NocmlzdGlhbml0eS1nYW1lLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3hGLE9BQU8sRUFBRSxPQUFPLEVBQWUsa0JBQWtCLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRS9HLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUseUJBQXlCLEVBQTJELE1BQU0sK0JBQStCLENBQUM7QUFDbkksT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDOztBQTJFcEQsTUFBTSxtQkFBbUIsR0FBRyxzREFBc0QsQ0FBQztBQUNuRixNQUFNLGdCQUFnQixHQUFHLDRDQUE0QyxDQUFDO0FBQ3RFLE1BQU0sd0JBQXdCLEdBQUcsRUFBRSxDQUFDO0FBQ3BDLE1BQU0sdUJBQXVCLEdBQUcsQ0FBQyxDQUFDO0FBQ2xDLE1BQU0sc0JBQXNCLEdBQUcsR0FBRyxDQUFDO0FBRW5DLE1BQU0sYUFBYSxHQUErQztJQUNoRSxRQUFRLEVBQUU7UUFDUixFQUFFLEVBQUUsVUFBVTtRQUNkLElBQUksRUFBRSxnQkFBZ0I7UUFDdEIsSUFBSSxFQUFFLFVBQVU7UUFDaEIsSUFBSSxFQUFFLENBQUM7UUFDUCxNQUFNLEVBQUUsQ0FBQztRQUNULElBQUksRUFBRSxDQUFDO1FBQ1AsU0FBUyxFQUFFLHdFQUF3RTtRQUNuRixTQUFTLEVBQUUsYUFBYTtRQUN4QixPQUFPLEVBQUUsS0FBSztRQUNkLGVBQWUsRUFBRSxTQUFTO1FBQzFCLElBQUksRUFBRSxNQUFNO1FBQ1osTUFBTSxFQUFFLEtBQUs7UUFDYixNQUFNLEVBQUUsUUFBUTtLQUNqQjtJQUNELFdBQVcsRUFBRTtRQUNYLEVBQUUsRUFBRSxhQUFhO1FBQ2pCLElBQUksRUFBRSxvQkFBb0I7UUFDMUIsSUFBSSxFQUFFLFVBQVU7UUFDaEIsSUFBSSxFQUFFLENBQUM7UUFDUCxNQUFNLEVBQUUsQ0FBQztRQUNULElBQUksRUFBRSxDQUFDO1FBQ1AsV0FBVyxFQUFFLGlDQUFpQztRQUM5QyxXQUFXLEVBQUUsMkRBQTJEO1FBQ3hFLFdBQVcsRUFBRSxDQUFDO1FBQ2QsU0FBUyxFQUFFLHFGQUFxRjtRQUNoRyxTQUFTLEVBQUUsa0JBQWtCO1FBQzdCLE9BQU8sRUFBRSxLQUFLO1FBQ2QsZUFBZSxFQUFFLFNBQVM7UUFDMUIsSUFBSSxFQUFFLE1BQU07UUFDWixNQUFNLEVBQUUsS0FBSztRQUNiLE1BQU0sRUFBRSxVQUFVO0tBQ25CO0lBQ0QsT0FBTyxFQUFFO1FBQ1AsRUFBRSxFQUFFLFNBQVM7UUFDYixJQUFJLEVBQUUsT0FBTztRQUNiLElBQUksRUFBRSxXQUFXO1FBQ2pCLElBQUksRUFBRSxDQUFDO1FBQ1AsTUFBTSxFQUFFLENBQUM7UUFDVCxJQUFJLEVBQUUsQ0FBQztRQUNQLFNBQVMsRUFBRSxtRUFBbUU7UUFDOUUsU0FBUyxFQUFFLGVBQWU7UUFDMUIsT0FBTyxFQUFFLEtBQUs7UUFDZCxlQUFlLEVBQUUsU0FBUztRQUMxQixJQUFJLEVBQUUsTUFBTTtRQUNaLE1BQU0sRUFBRSxLQUFLO1FBQ2IsTUFBTSxFQUFFLFFBQVE7S0FDakI7SUFDRCxPQUFPLEVBQUUsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUU7SUFDcEwsU0FBUyxFQUFFLEVBQUUsRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFO0lBQzFMLE9BQU8sRUFBRSxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRTtJQUN0TCxVQUFVLEVBQUUsRUFBRSxFQUFFLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUU7Q0FDNUwsQ0FBQztBQUVGLE1BQU0sb0JB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QUMsQ0FBQztRQUM1QixJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1QixJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRVMsV0FBVztRQUNuQixJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMvQixJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1QixJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM3QixJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1QixJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRVMsWUFBWTtRQUNwQixJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1QixJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUUsRUFBRSxNQUFNLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDakQsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3RCLENBQUM7SUFDSCxDQUFDO0lBRVMsY0FBYztRQUN0QixJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRVMsV0FBVztRQUNuQixJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMvQixJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1QixJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM3QixJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1QixJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENB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SSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUM1RixPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztZQUMxRixNQUFNLENBQUMsU0FBUyxJQUFJLFFBQVEsQ0FBQyxNQUFNLENBQUM7WUFDcEMsUUFBUSxDQUFDLFNBQVMsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDO1lBQ3BDLFFBQVEsQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1lBQzNCLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxRQUFRLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsNEJBQTRCLENBQUMsSUFBSSxNQUFNLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztZQUNyRixJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3BDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDakMsT0FBTztRQUNULENBQUM7UUFFRCxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksUUFBUSxDQUFDLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUM1RixNQUFNLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2pFLFFBQVEsQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQzNCLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxRQUFRLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxD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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQStpQlQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIERlc3Ryb3lSZWYsIGNvbXB1dGVkLCBlZmZlY3QsIGluamVjdCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDZGtEcmFnLCBDZGtEcmFnRHJvcCwgQ2RrRHJhZ1BsYWNlaG9sZGVyLCBDZGtEcmFnUHJldmlldywgQ2RrRHJvcExpc3QgfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcblxuaW1wb3J0IHsgTGlnaHRSaXBwbGVEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmVzL2xpZ2h0LXJpcHBsZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSTE4blNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9pMThuJztcbmltcG9ydCB7IENocmlzdGlhbml0eUNhcmRDb21wb25lbnQsIENocmlzdGlhbml0eUNhcmRSZW5kZXJNb2RlbCwgQ2hyaXN0aWFuaXR5Q2FyZFJlbmRlclR5cGUgfSBmcm9tICcuL2NocmlzdGlhbml0eS1jYXJkLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNSU5JX0dBTUVTX0kxOE4gfSBmcm9tICcuL21pbmktZ2FtZXMuaTE4bic7XG5pbXBvcnQge1xuICBDaHJpc3RpYW5pdHlDYXJkQmlibGVSZWZlcmVuY2UsXG4gIENocmlzdGlhbml0eUNhcmREZWZpbml0aW9uLFxuICBDaHJpc3RpYW5pdHlDYXJkVHJhbnNsYXRpb24sXG4gIENocmlzdGlhbml0eUNhcmRUeXBlLFxuICBDaHJpc3RpYW5pdHlDaGFyYWN0ZXJJbnN0YW5jZSxcbiAgQ2hyaXN0aWFuaXR5R2FtZVN0YXRlLFxuICBDaHJpc3RpYW5pdHlPZmZlcmluZ0luc3RhbmNlLFxuICBDaHJpc3RpYW5pdHlQbGF5ZXJTdGF0ZSxcbiAgQ2hyaXN0aWFuaXR5U2VhdCxcbn0gZnJvbSAnLi90eXBlcyc7XG5cbmludGVyZmFjZSBDaHJpc3RpYW5pdHlDYXJkUHJldmlldyB7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIGV5ZWJyb3c6IHN0cmluZztcbiAgbWV0YTogc3RyaW5nO1xuICBib2R5OiBzdHJpbmc7XG4gIGNhcmRJZD86IHN0cmluZztcbiAgc291cmNlPzogJ2hhbmQnIHwgJ2JvYXJkJyB8ICdwaWxlJyB8ICdoaXN0b3J5Jztcbn1cblxuaW50ZXJmYWNlIENocmlzdGlhbml0eUluZm9QYW5lbCB7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIGV5ZWJyb3c6IHN0cmluZztcbiAgbWV0YTogc3RyaW5nO1xuICBib2R5OiBzdHJpbmc7XG4gIGZhY3RzOiBzdHJpbmdbXTtcbn1cblxuaW50ZXJmYWNlIENocmlzdGlhbml0eVByZXZpZXdSdWxlIHtcbiAgdGl0bGU6IHN0cmluZztcbiAgYm9keTogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgQ2hyaXN0aWFuaXR5UHJldmlld1RpbHQge1xuICByb3RhdGVYOiBudW1iZXI7XG4gIHJvdGF0ZVk6IG51bWJlcjtcbiAgc2hpZnRYOiBudW1iZXI7XG4gIHNoaWZ0WTogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgQ2hyaXN0aWFuaXR5SW1wYWN0RXZlbnQge1xuICBpZDogbnVtYmVyO1xuICB0ZXh0OiBzdHJpbmc7XG4gIHRvbmU6ICdkYW1hZ2UnIHwgJ2hlYWwnIHwgJ3Jlc291cmNlJztcbiAgc2VhdDogQ2hyaXN0aWFuaXR5U2VhdDtcbiAgdGFyZ2V0OiAnbGVhZGVyJyB8ICdiYXR0bGUnIHwgJ29mZmVyaW5ncyc7XG59XG5cbmludGVyZmFjZSBDaHJpc3RpYW5pdHlSZXNvbHZlZENhcmRUZXh0IHtcbiAgbmFtZTogc3RyaW5nO1xuICBmdWxsTmFtZT86IHN0cmluZztcbiAgdmVyc2VUZXh0Pzogc3RyaW5nO1xuICBzY3JpcHR1cmU/OiBzdHJpbmc7XG4gIGFiaWxpdHlOYW1lPzogc3RyaW5nO1xuICBhYmlsaXR5VGV4dD86IHN0cmluZztcbiAgYWJpbGl0aWVzPzogQ2hyaXN0aWFuaXR5Q2FyZFRyYW5zbGF0aW9uWydhYmlsaXRpZXMnXTtcbn1cblxuaW50ZXJmYWNlIENocmlzdGlhbml0eUVkaXRpb25DYXRhbG9nIHtcbiAgZWRpdGlvbj86IHtcbiAgICBpZD86IHN0cmluZztcbiAgICBudW1iZXI/OiBudW1iZXI7XG4gICAgc2x1Zz86IHN0cmluZztcbiAgICBuYW1lPzogc3RyaW5nO1xuICAgIGljb24/OiBzdHJpbmc7XG4gIH07XG4gIGNhcmRzPzogQ2hyaXN0aWFuaXR5Q2FyZERlZmluaXRpb25bXTtcbn1cblxudHlwZSBDaHJpc3RpYW5pdHlHYWxsZXJ5VHlwZUZpbHRlciA9ICdhbGwnIHwgQ2hyaXN0aWFuaXR5Q2FyZFR5cGU7XG50eXBlIENocmlzdGlhbml0eVNjcmVlbiA9ICdzcGxhc2gnIHwgJ2hvbWUnIHwgJ3RhYmxlJztcbnR5cGUgQ2hyaXN0aWFuaXR5Q2F0YWxvZ0xvYWRTdGF0ZSA9ICdsb2FkaW5nJyB8ICdyZWFkeScgfCAnZmFsbGJhY2snO1xuXG5jb25zdCBHRU5FU0lTX0NBVEFMT0dfVVJMID0gJ2Fzc2V0cy9nYW1lcy9jaHJpc3RpYW5pdHkvZGF0YS8wMS1nZW5lc2lzLmNhcmRzLmpzb24nO1xuY29uc3QgR0VORVNJU19JQ09OX1VSTCA9ICdhc3NldHMvZ2FtZXMvY2hyaXN0aWFuaXR5L2ljb25zLzEtaWNvbi5wbmcnO1xuY29uc3QgVFVUT1JJQUxfQ0hBUkFDVEVSX0xJTUlUID0gMTI7XG5jb25zdCBUVVRPUklBTF9PRkZFUklOR19MSU1JVCA9IDY7XG5jb25zdCBTUExBU0hfTUlOX0RVUkFUSU9OX01TID0gNzIwO1xuXG5jb25zdCBTVEFSVEVSX0NBUkRTOiBSZWNvcmQ8c3RyaW5nLCBDaHJpc3RpYW5pdHlDYXJkRGVmaW5pdGlvbj4gPSB7XG4gIG9fc2ltcGxlOiB7XG4gICAgaWQ6ICdvX3NpbXBsZScsXG4gICAgbmFtZTogJ09mcmVuZGEgc2ltcGxlJyxcbiAgICB0eXBlOiAnb2ZmZXJpbmcnLFxuICAgIGNvc3Q6IDAsXG4gICAgYXR0YWNrOiAwLFxuICAgIGxpZmU6IDEsXG4gICAgdmVyc2VUZXh0OiAnVW5hIG9mcmVuZGEgc2VuY2lsbGEgcXVlZGEgbGlzdGEgcGFyYSBzb3N0ZW5lciB0dXMgc2lndWllbnRlcyBqdWdhZGFzLicsXG4gICAgc2NyaXB0dXJlOiAnR2VuZXNpcyA0OjQnLFxuICAgIGVkaXRpb246ICdHRU4nLFxuICAgIGNvbGxlY3Rvck51bWJlcjogJzAwMS8wMjAnLFxuICAgIHllYXI6ICcyMDI2JyxcbiAgICBhdXRob3I6ICdNVlAnLFxuICAgIHJhcml0eTogJ25vcm1hbCcsXG4gIH0sXG4gIG9fZm9yYmlkZGVuOiB7XG4gICAgaWQ6ICdvX2ZvcmJpZGRlbicsXG4gICAgbmFtZTogJ0VsIGZydXRvIHByb2hpYmlkbycsXG4gICAgdHlwZTogJ29mZmVyaW5nJyxcbiAgICBjb3N0OiAwLFxuICAgIGF0dGFjazogMCxcbiAgICBsaWZlOiAyLFxuICAgIGFiaWxpdHlOYW1lOiAnQ29ub2NpbWllbnRvIGRlbCBiaWVuIHkgZGVsIG1hbCcsXG4gICAgYWJpbGl0eVRleHQ6ICdBbCB1c2FybGEsIGRpc21pbnV5ZSBlbiAxIGxvcyBwdW50b3MgZGUgdmlkYSBkZSB0dSBMw61kZXIuJyxcbiAgICBhYmlsaXR5Q29zdDogMCxcbiAgICB2ZXJzZVRleHQ6ICdEaW9zIGVsIFNlw7FvciBwdXNvIGFsIGhvbWJyZSBlbiBlbCBqYXJkw61uIGRlIEVkw6luIHBhcmEgcXVlIGxvIGxhYnJhcmEgeSBsbyBjdWlkYXJhLicsXG4gICAgc2NyaXB0dXJlOiAnR2VuZXNpcyAyOjE3IE5CVicsXG4gICAgZWRpdGlvbjogJ0dFTicsXG4gICAgY29sbGVjdG9yTnVtYmVyOiAnMDEyLzE4MCcsXG4gICAgeWVhcjogJzIwMjYnLFxuICAgIGF1dGhvcjogJ01WUCcsXG4gICAgcmFyaXR5OiAndW5jb21tb24nLFxuICB9LFxuICBwX3Njb3V0OiB7XG4gICAgaWQ6ICdwX3Njb3V0JyxcbiAgICBuYW1lOiAnU2NvdXQnLFxuICAgIHR5cGU6ICdjaGFyYWN0ZXInLFxuICAgIGNvc3Q6IDEsXG4gICAgYXR0YWNrOiAxLFxuICAgIGxpZmU6IDEsXG4gICAgdmVyc2VUZXh0OiAnVW4gZXhwbG9yYWRvciBodW1pbGRlIGFicmUgY2FtaW5vIGFudGVzIGRlIHF1ZSBsbGVndWUgbGEgYmF0YWxsYS4nLFxuICAgIHNjcmlwdHVyZTogJ0dlbmVzaXMgMTM6MTcnLFxuICAgIGVkaXRpb246ICdHRU4nLFxuICAgIGNvbGxlY3Rvck51bWJlcjogJzAwMi8wMjAnLFxuICAgIHllYXI6ICcyMDI2JyxcbiAgICBhdXRob3I6ICdNVlAnLFxuICAgIHJhcml0eTogJ25vcm1hbCcsXG4gIH0sXG4gIHBfZ3VhcmQ6IHsgaWQ6ICdwX2d1YXJkJywgbmFtZTogJ0d1YXJkJywgdHlwZTogJ2NoYXJhY3RlcicsIGNvc3Q6IDIsIGF0dGFjazogMSwgbGlmZTogMywgZWRpdGlvbjogJ0dFTicsIGNvbGxlY3Rvck51bWJlcjogJzAwMy8wMjAnLCB5ZWFyOiAnMjAyNicsIGF1dGhvcjogJ01WUCcsIHJhcml0eTogJ25vcm1hbCcgfSxcbiAgcF93YXJyaW9yOiB7IGlkOiAncF93YXJyaW9yJywgbmFtZTogJ1dhcnJpb3InLCB0eXBlOiAnY2hhcmFjdGVyJywgY29zdDogMiwgYXR0YWNrOiAyLCBsaWZlOiAyLCBlZGl0aW9uOiAnR0VOJywgY29sbGVjdG9yTnVtYmVyOiAnMDA0LzAyMCcsIHllYXI6ICcyMDI2JywgYXV0aG9yOiAnTVZQJywgcmFyaXR5OiAnbm9ybWFsJyB9LFxuICBwX2VsZGVyOiB7IGlkOiAncF9lbGRlcicsIG5hbWU6ICdFbGRlcicsIHR5cGU6ICdjaGFyYWN0ZXInLCBjb3N0OiAzLCBhdHRhY2s6IDIsIGxpZmU6IDQsIGVkaXRpb246ICdHRU4nLCBjb2xsZWN0b3JOdW1iZXI6ICcwMDUvMDIwJywgeWVhcjogJzIwMjYnLCBhdXRob3I6ICdNVlAnLCByYXJpdHk6ICd1bmNvbW1vbicgfSxcbiAgcF9jaGFtcGlvbjogeyBpZDogJ3BfY2hhbXBpb24nLCBuYW1lOiAnQ2hhbXBpb24nLCB0eXBlOiAnY2hhcmFjdGVyJywgY29zdDogNCwgYXR0YWNrOiA0LCBsaWZlOiA0LCBlZGl0aW9uOiAnR0VOJywgY29sbGVjdG9yTnVtYmVyOiAnMDA2LzAyMCcsIHllYXI6ICcyMDI2JywgYXV0aG9yOiAnTVZQJywgcmFyaXR5OiAncmFyZScgfSxcbn07XG5cbmNvbnN0IFNUQVJUSU5HX1NIQVJFRF9ERUNLID0gW1xuICAnb19zaW1wbGUnLFxuICAncF9zY291dCcsXG4gICdvX2ZvcmJpZGRlbicsXG4gICdvX3NpbXBsZScsXG4gICdwX2d1YXJkJyxcbiAgJ3Bfd2FycmlvcicsXG4gICdvX3NpbXBsZScsXG4gICdwX2VsZGVyJyxcbiAgJ3Bfc2NvdXQnLFxuICAnb19zaW1wbGUnLFxuICAncF9jaGFtcGlvbicsXG4gICdwX2d1YXJkJyxcbiAgJ29fc2ltcGxlJyxcbiAgJ3Bfd2FycmlvcicsXG4gICdwX3Njb3V0JyxcbiAgJ29fc2ltcGxlJyxcbiAgJ3BfZWxkZXInLFxuICAncF9ndWFyZCcsXG4gICdvX3NpbXBsZScsXG5dO1xuXG5jb25zdCBTVEFSVElOR19HQU1FOiBDaHJpc3RpYW5pdHlHYW1lU3RhdGUgPSB7XG4gIGdhbWVJZDogJ21vY2stY2hyaXN0aWFuaXR5JyxcbiAgc3RhdHVzOiAnaW5fcHJvZ3Jlc3MnLFxuICBtb2RlOiAnbG9jYWxfcGFzcycsXG4gIHR1cm5Pd25lcjogJ1AxJyxcbiAgcmV2aXNpb246IDAsXG4gIHR1cm5Db3VudDogMSxcbiAgbWF0Y2hTY29yZTogeyBQMTogMCwgUDI6IDAgfSxcbiAgc2hhcmVkRGVjazogU1RBUlRJTkdfU0hBUkVEX0RFQ0ssXG4gIGhpc3Rvcnlab25lOiBbXSxcbiAgcGxheWVyczoge1xuICAgIFAxOiB7XG4gICAgICBzZWF0OiAnUDEnLFxuICAgICAgZGlzcGxheU5hbWU6ICdKdWdhZG9yJyxcbiAgICAgIGF2YXRhcjogJ0onLFxuICAgICAgYXZhdGFyQ29sb3I6ICcjMjU2M2ViJyxcbiAgICAgIGxlYWRlck5hbWU6ICdBZGFtJyxcbiAgICAgIGxlYWRlckhwOiAxNSxcbiAgICAgIGxlYWRlck1heEhwOiAxNSxcbiAgICAgIG9mZmVyaW5nczogW1xuICAgICAgICB7IGluc3RhbmNlSWQ6ICdwMV9vZmZlcmluZ18wMDEnLCBjYXJkSWQ6ICdvX3NpbXBsZScsIG5hbWU6ICdPZnJlbmRhIHNpbXBsZScsIG93bmVyOiAnUDEnLCByZWFkeTogdHJ1ZSwgdmFsdWU6IDEgfSxcbiAgICAgICAge1xuICAgICAgICAgIGluc3RhbmNlSWQ6ICdwMV9vZmZlcmluZ18wMDInLFxuICAgICAgICAgIGNhcmRJZDogJ29fZm9yYmlkZGVuJyxcbiAgICAgICAgICBuYW1lOiAnRWwgZnJ1dG8gcHJvaGliaWRvJyxcbiAgICAgICAgICBvd25lcjogJ1AxJyxcbiAgICAgICAgICByZWFkeTogdHJ1ZSxcbiAgICAgICAgICB2YWx1ZTogMixcbiAgICAgICAgICBhYmlsaXR5TmFtZTogJ0Nvbm9jaW1pZW50byBkZWwgYmllbiB5IGRlbCBtYWwnLFxuICAgICAgICAgIGFiaWxpdHlUZXh0OiAnQWwgdXNhcmxhLCBkaXNtaW51eWUgZW4gMSBsb3MgcHVudG9zIGRlIHZpZGEgZGUgdHUgTGlkZXIuJyxcbiAgICAgICAgICBhYmlsaXR5Q29zdDogMCxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBvZmZlcmluZ1BsYXllZFRoaXNUdXJuOiBmYWxzZSxcbiAgICAgIGhhbmQ6IFsnb19zaW1wbGUnLCAncF9zY291dCcsICdwX3dhcnJpb3InLCAncF9ndWFyZCddLFxuICAgICAgYmF0dGxlWm9uZTogW10sXG4gICAgfSxcbiAgICBQMjoge1xuICAgICAgc2VhdDogJ1AyJyxcbiAgICAgIGRpc3BsYXlOYW1lOiAnUml2YWwnLFxuICAgICAgYXZhdGFyOiAnUicsXG4gICAgICBhdmF0YXJDb2xvcjogJyNiNDUzMDknLFxuICAgICAgbGVhZGVyTmFtZTogJ05vYWgnLFxuICAgICAgbGVhZGVySHA6IDE1LFxuICAgICAgbGVhZGVyTWF4SHA6IDE1LFxuICAgICAgb2ZmZXJpbmdzOiBbeyBpbnN0YW5jZUlkOiAncDJfb2ZmZXJpbmdfMDAxJywgY2FyZElkOiAnb19zaW1wbGUnLCBuYW1lOiAnT2ZyZW5kYSBzaW1wbGUnLCBvd25lcjogJ1AyJywgcmVhZHk6IHRydWUsIHZhbHVlOiAxIH1dLFxuICAgICAgb2ZmZXJpbmdQbGF5ZWRUaGlzVHVybjogZmFsc2UsXG4gICAgICBoYW5kQ291bnQ6IDQsXG4gICAgICBiYXR0bGVab25lOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBpbnN0YW5jZUlkOiAnb3BwXzAwMScsXG4gICAgICAgICAgY2FyZElkOiAncF9zY291dCcsXG4gICAgICAgICAgbmFtZTogJ1Njb3V0JyxcbiAgICAgICAgICBvd25lcjogJ1AyJyxcbiAgICAgICAgICBjb250cm9sbGVyOiAnUDInLFxuICAgICAgICAgIHNsb3Q6IDAsXG4gICAgICAgICAgYXR0YWNrOiAxLFxuICAgICAgICAgIGN1cnJlbnRIcDogMSxcbiAgICAgICAgICBtYXhIcDogMSxcbiAgICAgICAgICBjYW5BdHRhY2s6IGZhbHNlLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9LFxuICB9LFxuICBsb2c6IFsnUGFydGlkYSBpbmljaWFkYS4nXSxcbn07XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbC1jaHJpc3RpYW5pdHktZ2FtZScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDZGtEcmFnLCBDZGtEcmFnUGxhY2Vob2xkZXIsIENka0RyYWdQcmV2aWV3LCBDZGtEcm9wTGlzdCwgTGlnaHRSaXBwbGVEaXJlY3RpdmUsIENocmlzdGlhbml0eUNhcmRDb21wb25lbnRdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxtYWluIGNsYXNzPVwiY2hyaXN0aWFuaXR5LXNoZWxsXCIgW2NsYXNzLmhhcy1tb2RhbC1vcGVuXT1cImhhc01vZGFsT3ZlcmxheSgpXCI+XG4gICAgICA8c2VjdGlvbiBjbGFzcz1cImNocmlzdGlhbml0eS1oZWFkZXJcIj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8cD57eyB0KCdjaHJpc3RpYW5pdHlFeWVicm93JykgfX08L3A+XG4gICAgICAgICAgPGgxPnt7IHQoJ2NocmlzdGlhbml0eVRpdGxlJykgfX08L2gxPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNocmlzdGlhbml0eS1oZWFkZXItYWN0aW9uc1wiPlxuICAgICAgICAgIEBpZiAoc2NyZWVuKCkgIT09ICdzcGxhc2gnKSB7XG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImNocmlzdGlhbml0eS1nYWxsZXJ5LW9wZW5cIiB2YWxMaWdodFJpcHBsZSAoY2xpY2spPVwib3BlbkdhbGxlcnkoKVwiPlxuICAgICAgICAgICAgICB7eyB0KCdjaHJpc3RpYW5pdHlHYWxsZXJ5JykgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIH1cbiAgICAgICAgICBAaWYgKHNjcmVlbigpID09PSAndGFibGUnKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hyaXN0aWFuaXR5LXR1cm5cIiBbY2xhc3MuaXMtb3duLXR1cm5dPVwiaXNPd25UdXJuKClcIj5cbiAgICAgICAgICAgICAgPHNwYW4+e3sgdCgnY2hyaXN0aWFuaXR5VHVybicpIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8c3Ryb25nPnt7IGN1cnJlbnRQbGF5ZXIoKS5kaXNwbGF5TmFtZSB9fTwvc3Ryb25nPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvc2VjdGlvbj5cblxuICAgICAgQGlmIChzY3JlZW4oKSA9PT0gJ3NwbGFzaCcpIHtcbiAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJjaHJpc3RpYW5pdHktc3BsYXNoXCIgcm9sZT1cInN0YXR1c1wiIGFyaWEtbGl2ZT1cInBvbGl0ZVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaHJpc3RpYW5pdHktc3BsYXNoX19tYXJrXCI+XG4gICAgICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj48L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj48L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj48L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDxzcGFuPnt7IHQoJ2NocmlzdGlhbml0eVNwbGFzaEV5ZWJyb3cnKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxoMj57eyB0KCdjaHJpc3RpYW5pdHlTcGxhc2hUaXRsZScpIH19PC9oMj5cbiAgICAgICAgICAgIDxwPnt7IHNwbGFzaFN0YXR1c1RleHQoKSB9fTwvcD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgfSBAZWxzZSBpZiAoc2NyZWVuKCkgPT09ICdob21lJykge1xuICAgICAgICA8c2VjdGlvbiBjbGFzcz1cImNocmlzdGlhbml0eS1zdGFydFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaHJpc3RpYW5pdHktc3RhcnRfX2hlcm9cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaHJpc3RpYW5pdHktc3RhcnRfX2NvcHlcIj5cbiAgICAgICAgICAgICAgPHNwYW4+e3sgdCgnY2hyaXN0aWFuaXR5R2VuZXNpc0VkaXRpb24nKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPGgyPnt7IHQoJ2NocmlzdGlhbml0eVN0YXJ0VGl0bGUnKSB9fTwvaDI+XG4gICAgICAgICAgICAgIDxwPnt7IHQoJ2NocmlzdGlhbml0eVN0YXJ0Qm9keScpIH19PC9wPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hyaXN0aWFuaXR5LXN0YXJ0X19mYW5cIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgICAgICAgICAgQGZvciAoY2FyZCBvZiBzdGFydEZlYXR1cmVkQ2FyZHMoKTsgdHJhY2sgY2FyZC5pZCkge1xuICAgICAgICAgICAgICAgIDx2YWwtY2hyaXN0aWFuaXR5LWNhcmRcbiAgICAgICAgICAgICAgICAgIFtjYXJkXT1cImRlZmluaXRpb25Ub1JlbmRlckNhcmQoY2FyZClcIlxuICAgICAgICAgICAgICAgICAgdmFyaWFudD1cImJhYnlcIlxuICAgICAgICAgICAgICAgICAgW3N0eWxlLnRyYW5zZm9ybV09XCJzdGFydEZlYXR1cmVkQ2FyZFRyYW5zZm9ybSgkaW5kZXgpXCJcbiAgICAgICAgICAgICAgICA+PC92YWwtY2hyaXN0aWFuaXR5LWNhcmQ+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaHJpc3RpYW5pdHktc3RhcnRfX2NhcmRzXCI+XG4gICAgICAgICAgICA8YXJ0aWNsZT5cbiAgICAgICAgICAgICAgPHN0cm9uZz57eyB0KCdjaHJpc3RpYW5pdHlUdXRvcmlhbE1vZGUnKSB9fTwvc3Ryb25nPlxuICAgICAgICAgICAgICA8cD57eyB0KCdjaHJpc3RpYW5pdHlUdXRvcmlhbE1vZGVCb2R5JykgfX08L3A+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY2hyaXN0aWFuaXR5LXByaW1hcnktYWN0aW9uXCIgdmFsTGlnaHRSaXBwbGUgKGNsaWNrKT1cInN0YXJ0VHV0b3JpYWwoKVwiPlxuICAgICAgICAgICAgICAgIHt7IHQoJ2NocmlzdGlhbml0eVN0YXJ0VHV0b3JpYWwnKSB9fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvYXJ0aWNsZT5cbiAgICAgICAgICAgIDxhcnRpY2xlPlxuICAgICAgICAgICAgICA8c3Ryb25nPnt7IHQoJ2NocmlzdGlhbml0eUdhbGxlcnknKSB9fTwvc3Ryb25nPlxuICAgICAgICAgICAgICA8cD57eyB0KCdjaHJpc3RpYW5pdHlHYWxsZXJ5TW9kZUJvZHknKSB9fTwvcD5cbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjaHJpc3RpYW5pdHktc2Vjb25kYXJ5LWFjdGlvblwiIHZhbExpZ2h0UmlwcGxlIChjbGljayk9XCJvcGVuR2FsbGVyeSgpXCI+XG4gICAgICAgICAgICAgICAge3sgdCgnY2hyaXN0aWFuaXR5T3BlbkdhbGxlcnknKSB9fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvYXJ0aWNsZT5cbiAgICAgICAgICAgIDxhcnRpY2xlPlxuICAgICAgICAgICAgICA8c3Ryb25nPnt7IHQoJ2NocmlzdGlhbml0eUhvd1RvUGxheScpIH19PC9zdHJvbmc+XG4gICAgICAgICAgICAgIDxwPnt7IHQoJ2NocmlzdGlhbml0eUhvd1RvUGxheUJvZHknKSB9fTwvcD5cbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjaHJpc3RpYW5pdHktc2Vjb25kYXJ5LWFjdGlvblwiIHZhbExpZ2h0UmlwcGxlIChjbGljayk9XCJpbnNwZWN0SG93VG9QbGF5KClcIj5cbiAgICAgICAgICAgICAgICB7eyB0KCdsZWFybk1vcmUnKSB9fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvYXJ0aWNsZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hyaXN0aWFuaXR5LXN0YXJ0X19zdGF0dXNcIiBbYXR0ci5hcmlhLWxhYmVsXT1cInQoJ2NocmlzdGlhbml0eUVkaXRpb25TdGF0dXMnKVwiPlxuICAgICAgICAgICAgPHNwYW4+e3sgZ2FsbGVyeUVkaXRpb25MYWJlbCgpIH19PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4+e3sgdCgnY2hyaXN0aWFuaXR5VHV0b3JpYWxBY3RpdmUnKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuPnt7IGNhdGFsb2dTdGF0dXNMYWJlbCgpIH19PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPVwiY2hyaXN0aWFuaXR5LXN0YXJ0X19tb2Rlc1wiIFthdHRyLmFyaWEtbGFiZWxdPVwidCgnY2hyaXN0aWFuaXR5RnV0dXJlTW9kZXMnKVwiPlxuICAgICAgICAgICAgQGZvciAobW9kZSBvZiBmdXR1cmVNb2RlcygpOyB0cmFjayBtb2RlLnRpdGxlKSB7XG4gICAgICAgICAgICAgIDxhcnRpY2xlPlxuICAgICAgICAgICAgICAgIDxzdHJvbmc+e3sgbW9kZS50aXRsZSB9fTwvc3Ryb25nPlxuICAgICAgICAgICAgICAgIDxwPnt7IG1vZGUuYm9keSB9fTwvcD5cbiAgICAgICAgICAgICAgICA8c3Bhbj57eyB0KCdzb29uVGl0bGUnKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9hcnRpY2xlPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgfSBAZWxzZSB7XG4gICAgICA8c2VjdGlvbiBjbGFzcz1cImNocmlzdGlhbml0eS1tYXRjaC1zdHJpcFwiIFthdHRyLmFyaWEtbGFiZWxdPVwidCgnY2hyaXN0aWFuaXR5TWF0Y2hTY29yZScpXCI+XG4gICAgICAgIDxhcnRpY2xlIGNsYXNzPVwiY2hyaXN0aWFuaXR5LW1hdGNoLXBsYXllclwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hyaXN0aWFuaXR5LWF2YXRhclwiIFtzdHlsZS5iYWNrZ3JvdW5kXT1cInBsYXllcigpLmF2YXRhckNvbG9yXCI+e3sgcGxheWVyKCkuYXZhdGFyIH19PC9zcGFuPlxuICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8c3Ryb25nPnt7IHBsYXllcigpLmRpc3BsYXlOYW1lIH19PC9zdHJvbmc+XG4gICAgICAgICAgICA8c21hbGw+e3sgcGxheWVyTGVhZGVyRGlzcGxheU5hbWUocGxheWVyKCkpIH19IMK3IHt7IHBsYXllcigpLmxlYWRlckhwIH19L3t7IHBsYXllcigpLmxlYWRlck1heEhwIH19PC9zbWFsbD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9hcnRpY2xlPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2hyaXN0aWFuaXR5LXNjb3JlYm9hcmRcIj5cbiAgICAgICAgICA8c3Bhbj57eyB0KCdjaHJpc3RpYW5pdHlNYXRjaCcpIH19PC9zcGFuPlxuICAgICAgICAgIDxzdHJvbmc+e3sgZ2FtZSgpLm1hdGNoU2NvcmUuUDEgfX0te3sgZ2FtZSgpLm1hdGNoU2NvcmUuUDIgfX08L3N0cm9uZz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxhcnRpY2xlIGNsYXNzPVwiY2hyaXN0aWFuaXR5LW1hdGNoLXBsYXllciBjaHJpc3RpYW5pdHktbWF0Y2gtcGxheWVyLS1vcHBvbmVudFwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hyaXN0aWFuaXR5LWF2YXRhclwiIFtzdHlsZS5iYWNrZ3JvdW5kXT1cIm9wcG9uZW50KCkuYXZhdGFyQ29sb3JcIj57eyBvcHBvbmVudCgpLmF2YXRhciB9fTwvc3Bhbj5cbiAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPHN0cm9uZz57eyBvcHBvbmVudCgpLmRpc3BsYXlOYW1lIH19PC9zdHJvbmc+XG4gICAgICAgICAgICA8c21hbGw+e3sgcGxheWVyTGVhZGVyRGlzcGxheU5hbWUob3Bwb25lbnQoKSkgfX0gwrcge3sgb3Bwb25lbnQoKS5sZWFkZXJIcCB9fS97eyBvcHBvbmVudCgpLmxlYWRlck1heEhwIH19PC9zbWFsbD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9hcnRpY2xlPlxuICAgICAgPC9zZWN0aW9uPlxuXG4gICAgICA8c2VjdGlvbiBjbGFzcz1cImNocmlzdGlhbml0eS1oYW5kLXNoZWxmIGNocmlzdGlhbml0eS1oYW5kLXNoZWxmLS1vcHBvbmVudFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2hyaXN0aWFuaXR5LWhhbmQtbWV0ZXIgY2hyaXN0aWFuaXR5LWhhbmQtbWV0ZXItLW9wcG9uZW50XCI+XG4gICAgICAgICAgPHNwYW4+e3sgdCgnY2hyaXN0aWFuaXR5SGFuZCcpIH19PC9zcGFuPlxuICAgICAgICAgIDxzdHJvbmc+e3sgb3Bwb25lbnRIYW5kQ291bnQoKSB9fTwvc3Ryb25nPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJjaHJpc3RpYW5pdHktaGFuZC1mYW4gY2hyaXN0aWFuaXR5LWhhbmQtZmFuLS1vcHBvbmVudFwiIFthdHRyLmFyaWEtbGFiZWxdPVwidCgnY2hyaXN0aWFuaXR5T3Bwb25lbnRIYW5kJylcIj5cbiAgICAgICAgICBAZm9yIChfIG9mIGhpZGRlbkhhbmRDYXJkcyhvcHBvbmVudEhhbmRDb3VudCgpKTsgdHJhY2sgJGluZGV4KSB7XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBjbGFzcz1cImNocmlzdGlhbml0eS1oaWRkZW4tY2FyZC1idXR0b24gY2hyaXN0aWFuaXR5LXJlbmRlci1jYXJkLWJ1dHRvblwiXG4gICAgICAgICAgICAgIHZhbExpZ2h0UmlwcGxlXG4gICAgICAgICAgICAgIFtzdHlsZS50cmFuc2Zvcm1dPVwiZmFuVHJhbnNmb3JtKCRpbmRleCwgb3Bwb25lbnRIYW5kQ291bnQoKSwgdHJ1ZSlcIlxuICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInQoJ2NocmlzdGlhbml0eUhpZGRlbkNhcmQnKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDx2YWwtY2hyaXN0aWFuaXR5LWNhcmQgW2NhcmRdPVwiaGlkZGVuQ2FyZFJlbmRlckNhcmQoKVwiIHZhcmlhbnQ9XCJiYWNrXCI+PC92YWwtY2hyaXN0aWFuaXR5LWNhcmQ+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvc2VjdGlvbj5cbiAgICAgIDwvc2VjdGlvbj5cblxuICAgICAgPHNlY3Rpb24gY2xhc3M9XCJjaHJpc3RpYW5pdHktdGFibGVcIiBbYXR0ci5hcmlhLWxhYmVsXT1cInQoJ2NocmlzdGlhbml0eVRhYmxlJylcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNocmlzdGlhbml0eS1pbXBhY3QtbGF5ZXJcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgICAgICBAZm9yIChpbXBhY3Qgb2YgaW1wYWN0RXZlbnRzKCk7IHRyYWNrIGltcGFjdC5pZCkge1xuICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgY2xhc3M9XCJjaHJpc3RpYW5pdHktaW1wYWN0LXBvcFwiXG4gICAgICAgICAgICAgIFtjbGFzcy5pcy1kYW1hZ2VdPVwiaW1wYWN0LnRvbmUgPT09ICdkYW1hZ2UnXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmlzLWhlYWxdPVwiaW1wYWN0LnRvbmUgPT09ICdoZWFsJ1wiXG4gICAgICAgICAgICAgIFtjbGFzcy5pcy1yZXNvdXJjZV09XCJpbXBhY3QudG9uZSA9PT0gJ3Jlc291cmNlJ1wiXG4gICAgICAgICAgICAgIFtjbGFzcy5pcy1wbGF5ZXItbGVhZGVyXT1cImltcGFjdC5zZWF0ID09PSAnUDEnICYmIGltcGFjdC50YXJnZXQgPT09ICdsZWFkZXInXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmlzLW9wcG9uZW50LWxlYWRlcl09XCJpbXBhY3Quc2VhdCA9PT0gJ1AyJyAmJiBpbXBhY3QudGFyZ2V0ID09PSAnbGVhZGVyJ1wiXG4gICAgICAgICAgICAgIFtjbGFzcy5pcy1wbGF5ZXItYmF0dGxlXT1cImltcGFjdC5zZWF0ID09PSAnUDEnICYmIGltcGFjdC50YXJnZXQgPT09ICdiYXR0bGUnXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmlzLW9wcG9uZW50LWJhdHRsZV09XCJpbXBhY3Quc2VhdCA9PT0gJ1AyJyAmJiBpbXBhY3QudGFyZ2V0ID09PSAnYmF0dGxlJ1wiXG4gICAgICAgICAgICAgIFtjbGFzcy5pcy1wbGF5ZXItb2ZmZXJpbmdzXT1cImltcGFjdC5zZWF0ID09PSAnUDEnICYmIGltcGFjdC50YXJnZXQgPT09ICdvZmZlcmluZ3MnXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmlzLW9wcG9uZW50LW9mZmVyaW5nc109XCJpbXBhY3Quc2VhdCA9PT0gJ1AyJyAmJiBpbXBhY3QudGFyZ2V0ID09PSAnb2ZmZXJpbmdzJ1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt7IGltcGFjdC50ZXh0IH19XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJjaHJpc3RpYW5pdHktcGxheWVyLXNpZGUgY2hyaXN0aWFuaXR5LXBsYXllci1zaWRlLS1vcHBvbmVudFwiPlxuICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPVwiY2hyaXN0aWFuaXR5LXBsYXllci1yYWNrIGNocmlzdGlhbml0eS1wbGF5ZXItcmFjay0tb3Bwb25lbnRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaHJpc3RpYW5pdHktb2ZmZXJpbmdzLXpvbmVcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjaHJpc3RpYW5pdHktb2ZmZXJpbmctcGlsZVwiIHZhbExpZ2h0UmlwcGxlIChjbGljayk9XCJvcGVuT2ZmZXJpbmdzKCdQMicpXCI+XG4gICAgICAgICAgICAgICAgPGkgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICAgIDxpIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgICAgICA8aSBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICAgICAgPHNwYW4+e3sgdCgnY2hyaXN0aWFuaXR5T2ZmZXJpbmdzJykgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHN0cm9uZz57eyByZWFkeU9mZmVyaW5ncyhvcHBvbmVudCgpKSB9fS97eyB0b3RhbE9mZmVyaW5ncyhvcHBvbmVudCgpKSB9fTwvc3Ryb25nPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjaHJpc3RpYW5pdHktbGVhZGVyLWNhcmQgY2hyaXN0aWFuaXR5LXJlbmRlci1jYXJkLWJ1dHRvblwiIHZhbExpZ2h0UmlwcGxlIFtjbGFzcy5pcy10YXJnZXRdPVwic2VsZWN0ZWRBdHRhY2tlcigpICYmICFoYXNPcHBvbmVudEd1YXJkcygpXCIgKGNsaWNrKT1cImhhbmRsZU9wcG9uZW50TGVhZGVyKClcIj5cbiAgICAgICAgICAgICAgPHZhbC1jaHJpc3RpYW5pdHktY2FyZCBbY2FyZF09XCJsZWFkZXJSZW5kZXJDYXJkKG9wcG9uZW50KCkpXCIgdmFyaWFudD1cImJhYnlcIj48L3ZhbC1jaHJpc3RpYW5pdHktY2FyZD5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaHJpc3RpYW5pdHktcmFjay1zcGFjZXJcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L3NwYW4+XG4gICAgICAgICAgPC9zZWN0aW9uPlxuXG4gICAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJjaHJpc3RpYW5pdHktYmF0dGxlLXpvbmUgY2hyaXN0aWFuaXR5LWJhdHRsZS16b25lLS1vcHBvbmVudFwiIFthdHRyLmFyaWEtbGFiZWxdPVwidCgnY2hyaXN0aWFuaXR5T3Bwb25lbnRCYXR0bGUnKVwiPlxuICAgICAgICAgICAgQGZvciAoc2xvdCBvZiBiYXR0bGVTbG90cygnUDInKTsgdHJhY2sgc2xvdC50cmFja0lkKSB7XG4gICAgICAgICAgICAgIEBpZiAoc2xvdC5jYXJkKSB7XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNocmlzdGlhbml0eS1jYXJkLXByZXZpZXctY2FyZCBjaHJpc3RpYW5pdHktY2FyZC1wcmV2aWV3LWNhcmQtLWJhdHRsZSBjaHJpc3RpYW5pdHktcmVuZGVyLWNhcmQtYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIHZhbExpZ2h0UmlwcGxlXG4gICAgICAgICAgICAgICAgICBbY2xhc3MuaXMtdGFyZ2V0XT1cInNlbGVjdGVkQXR0YWNrZXIoKVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlT3Bwb25lbnRDaGFyYWN0ZXIoc2xvdC5jYXJkKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPHZhbC1jaHJpc3RpYW5pdHktY2FyZCBbY2FyZF09XCJjaGFyYWN0ZXJSZW5kZXJDYXJkKHNsb3QuY2FyZClcIiB2YXJpYW50PVwiYmFieVwiPjwvdmFsLWNocmlzdGlhbml0eS1jYXJkPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNocmlzdGlhbml0eS1zbG90XCI+PC9zcGFuPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICA8L3NlY3Rpb24+XG5cbiAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJjaHJpc3RpYW5pdHktc2hhcmVkLXpvbmVcIiBbYXR0ci5hcmlhLWxhYmVsXT1cInQoJ2NocmlzdGlhbml0eVNoYXJlZFpvbmUnKVwiPlxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY2hyaXN0aWFuaXR5LXpvbmUtcGlsZSBjaHJpc3RpYW5pdHktem9uZS1waWxlLS1oaXN0b3J5XCIgdmFsTGlnaHRSaXBwbGUgKGNsaWNrKT1cIm9wZW5IaXN0b3J5KClcIj5cbiAgICAgICAgICAgIDxpIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgIDxpIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgIDxpIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgIDxzcGFuPnt7IHQoJ2NocmlzdGlhbml0eUhpc3RvcnknKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxzdHJvbmc+e3sgZ2FtZSgpLmhpc3Rvcnlab25lLmxlbmd0aCB9fTwvc3Ryb25nPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY2hyaXN0aWFuaXR5LXpvbmUtcGlsZSBjaHJpc3RpYW5pdHktem9uZS1waWxlLS1kZWNrXCIgdmFsTGlnaHRSaXBwbGUgYXJpYS1saXZlPVwicG9saXRlXCIgKGNsaWNrKT1cImluc3BlY3REZWNrKClcIj5cbiAgICAgICAgICAgIDxpIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgIDxpIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgIDxpIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgIDxzcGFuPnt7IHQoJ2NocmlzdGlhbml0eURlY2snKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxzdHJvbmc+e3sgZ2FtZSgpLnNoYXJlZERlY2subGVuZ3RoIH19PC9zdHJvbmc+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNocmlzdGlhbml0eS16b25lLWNhcmRcIj5cbiAgICAgICAgICAgIDxzcGFuPnt7IHQoJ2NocmlzdGlhbml0eVBsYWNlJykgfX08L3NwYW4+XG4gICAgICAgICAgICA8c3Ryb25nPnt7IHQoJ2NocmlzdGlhbml0eUVtcHR5JykgfX08L3N0cm9uZz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9zZWN0aW9uPlxuXG4gICAgICAgIDxzZWN0aW9uIGNsYXNzPVwiY2hyaXN0aWFuaXR5LXBsYXllci1zaWRlXCI+XG4gICAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJjaHJpc3RpYW5pdHktYmF0dGxlLXpvbmVcIiBbY2xhc3MuaXMtcGxhY2luZy1jYXJkXT1cImNhblBsYWNlU2VsZWN0ZWRDaGFyYWN0ZXIoKSB8fCBpc0RyYWdnaW5nQ2hhcmFjdGVyKClcIiBbYXR0ci5hcmlhLWxhYmVsXT1cInQoJ2NocmlzdGlhbml0eVlvdXJCYXR0bGUnKVwiPlxuICAgICAgICAgICAgQGZvciAoc2xvdCBvZiBiYXR0bGVTbG90cygnUDEnKTsgdHJhY2sgc2xvdC50cmFja0lkKSB7XG4gICAgICAgICAgICAgIEBpZiAoc2xvdC5jYXJkKSB7XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNocmlzdGlhbml0eS1jYXJkLXByZXZpZXctY2FyZCBjaHJpc3RpYW5pdHktY2FyZC1wcmV2aWV3LWNhcmQtLWJhdHRsZSBjaHJpc3RpYW5pdHktcmVuZGVyLWNhcmQtYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIHZhbExpZ2h0UmlwcGxlXG4gICAgICAgICAgICAgICAgICBbY2xhc3MuaXMtc2VsZWN0ZWRdPVwic2VsZWN0ZWRBdHRhY2tlcigpPy5pbnN0YW5jZUlkID09PSBzbG90LmNhcmQuaW5zdGFuY2VJZFwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3MuaXMtZXhoYXVzdGVkXT1cIiFzbG90LmNhcmQuY2FuQXR0YWNrXCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy5pcy1yZWFkeS1hdHRhY2tlcl09XCJpc093blR1cm4oKSAmJiBzbG90LmNhcmQuY2FuQXR0YWNrXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RBdHRhY2tlcihzbG90LmNhcmQpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8dmFsLWNocmlzdGlhbml0eS1jYXJkIFtjYXJkXT1cImNoYXJhY3RlclJlbmRlckNhcmQoc2xvdC5jYXJkKVwiIHZhcmlhbnQ9XCJiYWJ5XCI+PC92YWwtY2hyaXN0aWFuaXR5LWNhcmQ+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjaHJpc3RpYW5pdHktc2xvdFwiXG4gICAgICAgICAgICAgICAgICBjZGtEcm9wTGlzdFxuICAgICAgICAgICAgICAgICAgW2lkXT1cImJhdHRsZVNsb3REcm9wSWQoJGluZGV4KVwiXG4gICAgICAgICAgICAgICAgICBbY2RrRHJvcExpc3REYXRhXT1cIiRpbmRleFwiXG4gICAgICAgICAgICAgICAgICBbY2RrRHJvcExpc3RDb25uZWN0ZWRUb109XCJbJ2NocmlzdGlhbml0eS1oYW5kLXNvdXJjZSddXCJcbiAgICAgICAgICAgICAgICAgIFtjZGtEcm9wTGlzdEVudGVyUHJlZGljYXRlXT1cImNhbkRyb3BPbkJhdHRsZVNsb3RcIlxuICAgICAgICAgICAgICAgICAgW2Nka0Ryb3BMaXN0U29ydGluZ0Rpc2FibGVkXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzLmNocmlzdGlhbml0eS1zbG90LS1wbGF5LXRhcmdldF09XCJjYW5QbGFjZVNlbGVjdGVkQ2hhcmFjdGVyKCkgfHwgaXNEcmFnZ2luZ0NoYXJhY3RlcigpXCJcbiAgICAgICAgICAgICAgICAgIHZhbExpZ2h0UmlwcGxlXG4gICAgICAgICAgICAgICAgICAoY2RrRHJvcExpc3REcm9wcGVkKT1cImRyb3BPbkJhdHRsZVNsb3QoJGV2ZW50LCAkaW5kZXgpXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJwbGF5U2VsZWN0ZWRDYXJkKCRpbmRleClcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIEBpZiAoY2FuUGxhY2VTZWxlY3RlZENoYXJhY3RlcigpIHx8IGlzRHJhZ2dpbmdDaGFyYWN0ZXIoKSkge1xuICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyB0KCdjaHJpc3RpYW5pdHlQbGF5SGVyZScpIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9zZWN0aW9uPlxuXG4gICAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJjaHJpc3RpYW5pdHktcGxheWVyLXJhY2tcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaHJpc3RpYW5pdHktb2ZmZXJpbmdzLXpvbmVcIj5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hyaXN0aWFuaXR5LW9mZmVyaW5nLWRyb3AtdGFyZ2V0XCJcbiAgICAgICAgICAgICAgICBjZGtEcm9wTGlzdFxuICAgICAgICAgICAgICAgIGlkPVwiY2hyaXN0aWFuaXR5LW9mZmVyaW5ncy1kcm9wXCJcbiAgICAgICAgICAgICAgICBbY2RrRHJvcExpc3RDb25uZWN0ZWRUb109XCJbJ2NocmlzdGlhbml0eS1oYW5kLXNvdXJjZSddXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuaXMtcGxheS10YXJnZXRdPVwiY2FuUGxhY2VTZWxlY3RlZE9mZmVyaW5nKCkgfHwgaXNEcmFnZ2luZ09mZmVyaW5nKClcIlxuICAgICAgICAgICAgICAgIFtjZGtEcm9wTGlzdEVudGVyUHJlZGljYXRlXT1cImNhbkRyb3BPbk9mZmVyaW5nc1wiXG4gICAgICAgICAgICAgICAgW2Nka0Ryb3BMaXN0U29ydGluZ0Rpc2FibGVkXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIChjZGtEcm9wTGlzdERyb3BwZWQpPVwiZHJvcE9uT2ZmZXJpbmdzKCRldmVudClcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImNocmlzdGlhbml0eS1vZmZlcmluZy1waWxlXCJcbiAgICAgICAgICAgICAgICAgIHZhbExpZ2h0UmlwcGxlXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlT2ZmZXJpbmdQaWxlKCdQMScpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8aSBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICAgICAgICA8aSBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICAgICAgICA8aSBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICAgICAgICA8c3Bhbj57eyB0KCdjaHJpc3RpYW5pdHlPZmZlcmluZ3MnKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxzdHJvbmc+e3sgcmVhZHlPZmZlcmluZ3MocGxheWVyKCkpIH19L3t7IHRvdGFsT2ZmZXJpbmdzKHBsYXllcigpKSB9fTwvc3Ryb25nPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjaHJpc3RpYW5pdHktbGVhZGVyLWNhcmQgY2hyaXN0aWFuaXR5LXJlbmRlci1jYXJkLWJ1dHRvblwiIHZhbExpZ2h0UmlwcGxlIChjbGljayk9XCJpbnNwZWN0TGVhZGVyKCdQMScpXCI+XG4gICAgICAgICAgICAgIDx2YWwtY2hyaXN0aWFuaXR5LWNhcmQgW2NhcmRdPVwibGVhZGVyUmVuZGVyQ2FyZChwbGF5ZXIoKSlcIiB2YXJpYW50PVwiYmFieVwiPjwvdmFsLWNocmlzdGlhbml0eS1jYXJkPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hyaXN0aWFuaXR5LXBsYXllci1jb21tYW5kXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaHJpc3RpYW5pdHktcGxheWVyLWJhZGdlXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaHJpc3RpYW5pdHktYXZhdGFyXCIgW3N0eWxlLmJhY2tncm91bmRdPVwicGxheWVyKCkuYXZhdGFyQ29sb3JcIj57eyBwbGF5ZXIoKS5hdmF0YXIgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHN0cm9uZz57eyBwbGF5ZXIoKS5kaXNwbGF5TmFtZSB9fTwvc3Ryb25nPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hyaXN0aWFuaXR5LWVuZC10dXJuXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiZW5kVHVybigpXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7IHQoJ2NocmlzdGlhbml0eUVuZFR1cm4nKSB9fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgPC9zZWN0aW9uPlxuXG4gICAgICA8c2VjdGlvbiBjbGFzcz1cImNocmlzdGlhbml0eS1oYW5kLXNoZWxmXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjaHJpc3RpYW5pdHktaGFuZC1tZXRlclwiPlxuICAgICAgICAgIDxzcGFuPnt7IHQoJ2NocmlzdGlhbml0eUhhbmQnKSB9fTwvc3Bhbj5cbiAgICAgICAgICA8c3Ryb25nPnt7IHBsYXllcigpLmhhbmQ/Lmxlbmd0aCA/PyAwIH19PC9zdHJvbmc+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8c2VjdGlvblxuICAgICAgICAgIGNsYXNzPVwiY2hyaXN0aWFuaXR5LWhhbmQtZmFuXCJcbiAgICAgICAgICBjZGtEcm9wTGlzdFxuICAgICAgICAgIGlkPVwiY2hyaXN0aWFuaXR5LWhhbmQtc291cmNlXCJcbiAgICAgICAgICBbY2RrRHJvcExpc3RDb25uZWN0ZWRUb109XCJkcm9wVGFyZ2V0SWRzKClcIlxuICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwidCgnY2hyaXN0aWFuaXR5WW91ckhhbmQnKVwiXG4gICAgICAgICAgKHBvaW50ZXJsZWF2ZSk9XCJjbGVhckhvdmVyZWRIYW5kSW5kZXgoKVwiXG4gICAgICAgID5cbiAgICAgICAgICBAZm9yIChjYXJkSWQgb2YgcGxheWVyKCkuaGFuZCA/PyBbXTsgdHJhY2sgY2FyZElkICsgJGluZGV4KSB7XG4gICAgICAgICAgICBAbGV0IGNhcmQgPSBjYXJkRGVmaW5pdGlvbihjYXJkSWQpO1xuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cImNocmlzdGlhbml0eS1oYW5kLWNhcmQtd3JhcFwiXG4gICAgICAgICAgICAgIFtjbGFzcy5pcy1zZWxlY3RlZF09XCJzZWxlY3RlZEhhbmRDYXJkKCkgPT09IGNhcmRJZFwiXG4gICAgICAgICAgICAgIFtjbGFzcy5pcy1kcmFnZ2luZ109XCJkcmFnZ2luZ0NhcmRJZCgpID09PSBjYXJkSWRcIlxuICAgICAgICAgICAgICBbc3R5bGUuei1pbmRleF09XCJoYW5kQ2FyZFpJbmRleCgkaW5kZXgpXCJcbiAgICAgICAgICAgICAgW3N0eWxlLnRyYW5zZm9ybV09XCJmYW5UcmFuc2Zvcm0oJGluZGV4LCBwbGF5ZXIoKS5oYW5kPy5sZW5ndGggPz8gMCwgZmFsc2UpXCJcbiAgICAgICAgICAgICAgKHBvaW50ZXJlbnRlcik9XCJzZXRIb3ZlcmVkSGFuZEluZGV4KCRpbmRleClcIlxuICAgICAgICAgICAgICAocG9pbnRlcmRvd24pPVwic2V0SG92ZXJlZEhhbmRJbmRleCgkaW5kZXgpXCJcbiAgICAgICAgICAgICAgKHBvaW50ZXJ1cCk9XCJyZWxlYXNlSG92ZXJlZEhhbmQoJGV2ZW50KVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNocmlzdGlhbml0eS1jYXJkLXByZXZpZXctY2FyZCBjaHJpc3RpYW5pdHktY2FyZC1wcmV2aWV3LWNhcmQtLWhhbmQgY2hyaXN0aWFuaXR5LXJlbmRlci1jYXJkLWJ1dHRvblwiXG4gICAgICAgICAgICAgICAgY2RrRHJhZ1xuICAgICAgICAgICAgICAgIHZhbExpZ2h0UmlwcGxlXG4gICAgICAgICAgICAgICAgW2Nka0RyYWdEYXRhXT1cImNhcmRJZFwiXG4gICAgICAgICAgICAgICAgW2Nka0RyYWdEaXNhYmxlZF09XCIhY2FuUGxheShjYXJkKVwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmlzLXNlbGVjdGVkXT1cInNlbGVjdGVkSGFuZENhcmQoKSA9PT0gY2FyZElkXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuaXMtZGlzYWJsZWRdPVwiIWNhblBsYXkoY2FyZClcIlxuICAgICAgICAgICAgICAgIChjZGtEcmFnU3RhcnRlZCk9XCJzdGFydERyYWdnaW5nQ2FyZChjYXJkSWQpXCJcbiAgICAgICAgICAgICAgICAoY2RrRHJhZ0VuZGVkKT1cImVuZERyYWdnaW5nQ2FyZCgpXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0SGFuZENhcmQoY2FyZElkKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8dmFsLWNocmlzdGlhbml0eS1jYXJkIFtjYXJkXT1cImRlZmluaXRpb25Ub1JlbmRlckNhcmQoY2FyZClcIiB2YXJpYW50PVwiYmFieVwiPjwvdmFsLWNocmlzdGlhbml0eS1jYXJkPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBjZGtEcmFnUHJldmlldz5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaHJpc3RpYW5pdHktY2FyZC1kcmFnLXByZXZpZXdcIj5cbiAgICAgICAgICAgICAgICAgICAgPHZhbC1jaHJpc3RpYW5pdHktY2FyZCBbY2FyZF09XCJkZWZpbml0aW9uVG9SZW5kZXJDYXJkKGNhcmQpXCIgdmFyaWFudD1cImJhYnlcIj48L3ZhbC1jaHJpc3RpYW5pdHktY2FyZD5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGNka0RyYWdQbGFjZWhvbGRlcj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaHJpc3RpYW5pdHktY2FyZC1kcmFnLXBsYWNlaG9sZGVyXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNocmlzdGlhbml0eS1jYXJkLWV5ZVwiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJ0KCdjaHJpc3RpYW5pdHlQcmV2aWV3Q2FyZCcpXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiaW5zcGVjdEhhbmRDYXJkKGNhcmRJZCwgdHJ1ZSk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH1cbiAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgPC9zZWN0aW9uPlxuICAgICAgfVxuXG4gICAgICBAaWYgKHNlbGVjdGVkUHJldmlldygpKSB7XG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY2hyaXN0aWFuaXR5LXByZXZpZXctYmFja2Ryb3BcIiBbYXR0ci5hcmlhLWxhYmVsXT1cInQoJ2NocmlzdGlhbml0eUNsb3NlUHJldmlldycpXCIgKGNsaWNrKT1cImNsb3NlUHJldmlldygpXCI+PC9idXR0b24+XG4gICAgICAgIDxhc2lkZVxuICAgICAgICAgIGNsYXNzPVwiY2hyaXN0aWFuaXR5LWZsb2F0aW5nLWNhcmQtc2hlbGxcIlxuICAgICAgICAgIGFyaWEtbGl2ZT1cInBvbGl0ZVwiXG4gICAgICAgID5cbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImNocmlzdGlhbml0eS1mbG9hdGluZy1jYXJkLWNsb3NlXCIgKGNsaWNrKT1cImNsb3NlUHJldmlldygpXCI+XG4gICAgICAgICAgICB7eyB0KCdjbG9zZScpIH19XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgQGlmIChjYW5OYXZpZ2F0ZUhpc3RvcnlQcmV2aWV3KCkpIHtcbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiY2hyaXN0aWFuaXR5LXByZXZpZXctbmF2IGNocmlzdGlhbml0eS1wcmV2aWV3LW5hdi0tcHJldmlvdXNcIlxuICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInQoJ2NocmlzdGlhbml0eVByZXZpb3VzSGlzdG9yeUNhcmQnKVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJuYXZpZ2F0ZUhpc3RvcnlQcmV2aWV3KC0xKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICZsdDtcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJjaHJpc3RpYW5pdHktcHJldmlldy1uYXYgY2hyaXN0aWFuaXR5LXByZXZpZXctbmF2LS1uZXh0XCJcbiAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJ0KCdjaHJpc3RpYW5pdHlOZXh0SGlzdG9yeUNhcmQnKVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJuYXZpZ2F0ZUhpc3RvcnlQcmV2aWV3KDEpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgJmd0O1xuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgfVxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiY2hyaXN0aWFuaXR5LWZsb2F0aW5nLWNhcmRcIlxuICAgICAgICAgICAgW3N0eWxlLi0tcHJldmlldy1yb3RhdGUteF09XCJwcmV2aWV3VGlsdCgpLnJvdGF0ZVggKyAnZGVnJ1wiXG4gICAgICAgICAgICBbc3R5bGUuLS1wcmV2aWV3LXJvdGF0ZS15XT1cInByZXZpZXdUaWx0KCkucm90YXRlWSArICdkZWcnXCJcbiAgICAgICAgICAgIFtzdHlsZS4tLXByZXZpZXctc2hpZnQteF09XCJwcmV2aWV3VGlsdCgpLnNoaWZ0WCArICdweCdcIlxuICAgICAgICAgICAgW3N0eWxlLi0tcHJldmlldy1zaGlmdC15XT1cInByZXZpZXdUaWx0KCkuc2hpZnRZICsgJ3B4J1wiXG4gICAgICAgICAgICAocG9pbnRlcm1vdmUpPVwidGlsdFByZXZpZXcoJGV2ZW50KVwiXG4gICAgICAgICAgICAocG9pbnRlcmxlYXZlKT1cInJlc2V0UHJldmlld1RpbHQoKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgQGlmIChzZWxlY3RlZFByZXZpZXdSZW5kZXJDYXJkKCk7IGFzIHByZXZpZXdDYXJkKSB7XG4gICAgICAgICAgICAgIDx2YWwtY2hyaXN0aWFuaXR5LWNhcmQgW2NhcmRdPVwicHJldmlld0NhcmRcIiB2YXJpYW50PVwiZnVsbFwiPjwvdmFsLWNocmlzdGlhbml0eS1jYXJkPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIEBpZiAocHJldmlld1J1bGUoKTsgYXMgcnVsZSkge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNocmlzdGlhbml0eS1wcmV2aWV3LXJ1bGUtbm90ZVwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNocmlzdGlhbml0eS1ydWxlLW5vdGUtaWNvblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPmk8L3NwYW4+XG4gICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgPHNtYWxsPnt7IHQoJ2NocmlzdGlhbml0eUNhcmRSdWxlJykgfX08L3NtYWxsPlxuICAgICAgICAgICAgICAgIDxzdHJvbmc+e3sgcnVsZS50aXRsZSB9fTwvc3Ryb25nPlxuICAgICAgICAgICAgICAgIDxwPnt7IHJ1bGUuYm9keSB9fTwvcD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvYXNpZGU+XG4gICAgICB9XG5cbiAgICAgIEBpZiAoc2VsZWN0ZWRJbmZvKCk7IGFzIGluZm8pIHtcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjaHJpc3RpYW5pdHktaW5mby1iYWNrZHJvcFwiIFthdHRyLmFyaWEtbGFiZWxdPVwidCgnY2xvc2UnKVwiIChjbGljayk9XCJjbG9zZUluZm8oKVwiPjwvYnV0dG9uPlxuICAgICAgICA8YXNpZGUgY2xhc3M9XCJjaHJpc3RpYW5pdHktaW5mby1wYW5lbFwiIGFyaWEtbGl2ZT1cInBvbGl0ZVwiPlxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY2hyaXN0aWFuaXR5LWRpYWxvZy1jbG9zZSBjaHJpc3RpYW5pdHktaW5mby1jbG9zZVwiIChjbGljayk9XCJjbG9zZUluZm8oKVwiPlxuICAgICAgICAgICAge3sgdCgnY2xvc2UnKSB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaHJpc3RpYW5pdHktcnVsZS1ub3RlXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNocmlzdGlhbml0eS1ydWxlLW5vdGUtaWNvblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPmk8L3NwYW4+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICA8c21hbGw+e3sgaW5mby5leWVicm93IH19PC9zbWFsbD5cbiAgICAgICAgICAgICAgPGgyPnt7IGluZm8udGl0bGUgfX08L2gyPlxuICAgICAgICAgICAgICA8c3Ryb25nPnt7IGluZm8ubWV0YSB9fTwvc3Ryb25nPlxuICAgICAgICAgICAgICA8cD57eyBpbmZvLmJvZHkgfX08L3A+XG4gICAgICAgICAgICAgIDx1bD5cbiAgICAgICAgICAgICAgICBAZm9yIChmYWN0IG9mIGluZm8uZmFjdHM7IHRyYWNrIGZhY3QpIHtcbiAgICAgICAgICAgICAgICAgIDxsaT57eyBmYWN0IH19PC9saT5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9hc2lkZT5cbiAgICAgIH1cblxuICAgICAgQGlmIChzY3JlZW4oKSA9PT0gJ3RhYmxlJykge1xuICAgICAgICA8c2VjdGlvbiBjbGFzcz1cImNocmlzdGlhbml0eS1hY3Rpb25zXCIgYXJpYS1saXZlPVwicG9saXRlXCI+XG4gICAgICAgICAgPHA+e3sgc3RhdHVzVGV4dCgpIH19PC9wPlxuICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBbZGlzYWJsZWRdPVwic2VsZWN0ZWRBY3Rpb25EaXNhYmxlZCgpXCIgKGNsaWNrKT1cInBsYXlTZWxlY3RlZENhcmQoKVwiPlxuICAgICAgICAgICAgICB7eyBzZWxlY3RlZEFjdGlvbkxhYmVsKCkgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cInJlc2V0TW9jaygpXCI+XG4gICAgICAgICAgICAgIHt7IHQoJ2NocmlzdGlhbml0eVJlc2V0JykgfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3NlY3Rpb24+XG4gICAgICB9XG5cbiAgICAgIEBpZiAoc2hvd0hpc3RvcnkoKSkge1xuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImNocmlzdGlhbml0eS1oaXN0b3J5LWJhY2tkcm9wXCIgW2F0dHIuYXJpYS1sYWJlbF09XCJ0KCdjaHJpc3RpYW5pdHlDbG9zZUhpc3RvcnknKVwiIChjbGljayk9XCJjbG9zZUhpc3RvcnkoKVwiPjwvYnV0dG9uPlxuICAgICAgICA8c2VjdGlvbiBjbGFzcz1cImNocmlzdGlhbml0eS1oaXN0b3J5LWRyYXdlclwiPlxuICAgICAgICAgIDxoZWFkZXI+XG4gICAgICAgICAgICA8aDI+e3sgdCgnY2hyaXN0aWFuaXR5SGlzdG9yeScpIH19PC9oMj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaHJpc3RpYW5pdHktZGlhbG9nLWFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgPHNwYW4+e3sgZ2FtZSgpLmhpc3Rvcnlab25lLmxlbmd0aCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjaHJpc3RpYW5pdHktZGlhbG9nLWNsb3NlXCIgKGNsaWNrKT1cImNsb3NlSGlzdG9yeSgpXCI+XG4gICAgICAgICAgICAgICAge3sgdCgnY2xvc2UnKSB9fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvaGVhZGVyPlxuICAgICAgICAgIEBpZiAoZ2FtZSgpLmhpc3Rvcnlab25lLmxlbmd0aCkge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNocmlzdGlhbml0eS1oaXN0b3J5LWdyaWRcIj5cbiAgICAgICAgICAgICAgQGZvciAoY2FyZElkIG9mIGdhbWUoKS5oaXN0b3J5Wm9uZTsgdHJhY2sgY2FyZElkICsgJGluZGV4KSB7XG4gICAgICAgICAgICAgICAgQGxldCBjYXJkID0gY2FyZERlZmluaXRpb24oY2FyZElkKTtcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImNocmlzdGlhbml0eS1nYWxsZXJ5LWNhcmQtYnV0dG9uIGNocmlzdGlhbml0eS1yZW5kZXItY2FyZC1idXR0b25cIiB2YWxMaWdodFJpcHBsZSAoY2xpY2spPVwiaW5zcGVjdEhpc3RvcnlDYXJkKGNhcmRJZClcIj5cbiAgICAgICAgICAgICAgICAgIDx2YWwtY2hyaXN0aWFuaXR5LWNhcmQgW2NhcmRdPVwiZGVmaW5pdGlvblRvUmVuZGVyQ2FyZChjYXJkKVwiIHZhcmlhbnQ9XCJiYWJ5XCI+PC92YWwtY2hyaXN0aWFuaXR5LWNhcmQ+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgPHA+e3sgdCgnY2hyaXN0aWFuaXR5SGlzdG9yeUVtcHR5JykgfX08L3A+XG4gICAgICAgICAgfVxuICAgICAgICA8L3NlY3Rpb24+XG4gICAgICB9XG5cbiAgICAgIEBpZiAoc2hvd0dhbGxlcnkoKSkge1xuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImNocmlzdGlhbml0eS1oaXN0b3J5LWJhY2tkcm9wXCIgW2F0dHIuYXJpYS1sYWJlbF09XCJ0KCdjaHJpc3RpYW5pdHlDbG9zZUdhbGxlcnknKVwiIChjbGljayk9XCJjbG9zZUdhbGxlcnkoKVwiPjwvYnV0dG9uPlxuICAgICAgICA8c2VjdGlvbiBjbGFzcz1cImNocmlzdGlhbml0eS1oaXN0b3J5LWRyYXdlciBjaHJpc3RpYW5pdHktZ2FsbGVyeS1kcmF3ZXJcIj5cbiAgICAgICAgICA8aGVhZGVyPlxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgPGgyPnt7IHQoJ2NocmlzdGlhbml0eUdhbGxlcnknKSB9fTwvaDI+XG4gICAgICAgICAgICAgIDxwPnt7IGdhbGxlcnlFZGl0aW9uTGFiZWwoKSB9fTwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNocmlzdGlhbml0eS1kaWFsb2ctYWN0aW9uc1wiPlxuICAgICAgICAgICAgICA8c3Bhbj57eyBnYWxsZXJ5Q2FyZHMoKS5sZW5ndGggfX08L3NwYW4+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY2hyaXN0aWFuaXR5LWRpYWxvZy1jbG9zZVwiIChjbGljayk9XCJjbG9zZUdhbGxlcnkoKVwiPlxuICAgICAgICAgICAgICAgIHt7IHQoJ2Nsb3NlJykgfX1cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2hlYWRlcj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hyaXN0aWFuaXR5LWdhbGxlcnktY29udHJvbHNcIj5cbiAgICAgICAgICAgIDxsYWJlbD5cbiAgICAgICAgICAgICAgPHNwYW4+e3sgdCgnY2hyaXN0aWFuaXR5R2FsbGVyeVNlYXJjaCcpIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInNlYXJjaFwiIFt2YWx1ZV09XCJnYWxsZXJ5U2VhcmNoKClcIiAoaW5wdXQpPVwic2V0R2FsbGVyeVNlYXJjaCgkZXZlbnQpXCIgW3BsYWNlaG9sZGVyXT1cInQoJ2NocmlzdGlhbml0eUdhbGxlcnlTZWFyY2hQbGFjZWhvbGRlcicpXCIgLz5cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8bGFiZWw+XG4gICAgICAgICAgICAgIDxzcGFuPnt7IHQoJ2NocmlzdGlhbml0eUdhbGxlcnlGaWx0ZXInKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNlbGVjdCBbdmFsdWVdPVwiZ2FsbGVyeVR5cGUoKVwiIChjaGFuZ2UpPVwic2V0R2FsbGVyeVR5cGUoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgIEBmb3IgKG9wdGlvbiBvZiBnYWxsZXJ5VHlwZU9wdGlvbnMoKTsgdHJhY2sgb3B0aW9uLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICA8b3B0aW9uIFt2YWx1ZV09XCJvcHRpb24udmFsdWVcIj57eyBvcHRpb24ubGFiZWwgfX08L29wdGlvbj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hyaXN0aWFuaXR5LWdhbGxlcnktZWRpdGlvbi1zdHJpcFwiPlxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJpcy1hY3RpdmVcIiB2YWxMaWdodFJpcHBsZT5cbiAgICAgICAgICAgICAgPGltZyBbc3JjXT1cImdhbGxlcnlFZGl0aW9uSWNvbigpXCIgYWx0PVwiXCIgLz5cbiAgICAgICAgICAgICAgPHNwYW4+e3sgdCgnY2hyaXN0aWFuaXR5R2VuZXNpc0VkaXRpb24nKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaHJpc3RpYW5pdHktZ2FsbGVyeS1ncmlkXCI+XG4gICAgICAgICAgICBAZm9yIChjYXJkIG9mIGdhbGxlcnlDYXJkcygpOyB0cmFjayBjYXJkLmlkKSB7XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY2hyaXN0aWFuaXR5LWdhbGxlcnktY2FyZC1idXR0b24gY2hyaXN0aWFuaXR5LXJlbmRlci1jYXJkLWJ1dHRvblwiIHZhbExpZ2h0UmlwcGxlIChjbGljayk9XCJpbnNwZWN0R2FsbGVyeUNhcmQoY2FyZC5pZClcIj5cbiAgICAgICAgICAgICAgICA8dmFsLWNocmlzdGlhbml0eS1jYXJkIFtjYXJkXT1cImRlZmluaXRpb25Ub1JlbmRlckNhcmQoY2FyZClcIiB2YXJpYW50PVwiYmFieVwiPjwvdmFsLWNocmlzdGlhbml0eS1jYXJkPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIH0gQGVtcHR5IHtcbiAgICAgICAgICAgICAgPHA+e3sgdCgnY2hyaXN0aWFuaXR5R2FsbGVyeUVtcHR5JykgfX08L3A+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvc2VjdGlvbj5cbiAgICAgIH1cblxuICAgICAgQGlmIChvZmZlcmluZ3NTZWF0KCkpIHtcbiAgICAgICAgQGxldCBvZmZlcmluZ1BsYXllciA9IGdhbWUoKS5wbGF5ZXJzW29mZmVyaW5nc1NlYXQoKSFdO1xuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImNocmlzdGlhbml0eS1oaXN0b3J5LWJhY2tkcm9wXCIgW2F0dHIuYXJpYS1sYWJlbF09XCJ0KCdjaHJpc3RpYW5pdHlDbG9zZU9mZmVyaW5ncycpXCIgKGNsaWNrKT1cImNsb3NlT2ZmZXJpbmdzKClcIj48L2J1dHRvbj5cbiAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJjaHJpc3RpYW5pdHktaGlzdG9yeS1kcmF3ZXIgY2hyaXN0aWFuaXR5LW9mZmVyaW5ncy1kcmF3ZXJcIj5cbiAgICAgICAgICA8aGVhZGVyPlxuICAgICAgICAgICAgPGgyPnt7IHQoJ2NocmlzdGlhbml0eU9mZmVyaW5ncycpIH19PC9oMj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaHJpc3RpYW5pdHktZGlhbG9nLWFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgPHNwYW4+e3sgcmVhZHlPZmZlcmluZ3Mob2ZmZXJpbmdQbGF5ZXIpIH19L3t7IHRvdGFsT2ZmZXJpbmdzKG9mZmVyaW5nUGxheWVyKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJjaHJpc3RpYW5pdHktZGlhbG9nLWNsb3NlXCIgKGNsaWNrKT1cImNsb3NlT2ZmZXJpbmdzKClcIj5cbiAgICAgICAgICAgICAgICB7eyB0KCdjbG9zZScpIH19XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9oZWFkZXI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNocmlzdGlhbml0eS1vZmZlcmluZ3Mtbm90ZVwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaHJpc3RpYW5pdHktcnVsZS1ub3RlLWljb25cIiBhcmlhLWhpZGRlbj1cInRydWVcIj5pPC9zcGFuPlxuICAgICAgICAgICAgPHA+e3sgdCgnY2hyaXN0aWFuaXR5T2ZmZXJpbmdzUnVsZUJvZHknKSB9fTwvcD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hyaXN0aWFuaXR5LW9mZmVyaW5nLWxpc3RcIj5cbiAgICAgICAgICAgIEBmb3IgKG9mZmVyaW5nIG9mIG9mZmVyaW5nUGxheWVyLm9mZmVyaW5nczsgdHJhY2sgb2ZmZXJpbmcuaW5zdGFuY2VJZCkge1xuICAgICAgICAgICAgICA8YXJ0aWNsZSBjbGFzcz1cImNocmlzdGlhbml0eS1vZmZlcmluZy1yb3dcIiBbY2xhc3MuaXMtZXhoYXVzdGVkXT1cIiFvZmZlcmluZy5yZWFkeVwiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiY2hyaXN0aWFuaXR5LW9mZmVyaW5nLWNhcmQgY2hyaXN0aWFuaXR5LXJlbmRlci1jYXJkLWJ1dHRvblwiIHZhbExpZ2h0UmlwcGxlIChjbGljayk9XCJpbnNwZWN0T2ZmZXJpbmcob2ZmZXJpbmcpXCI+XG4gICAgICAgICAgICAgICAgICA8dmFsLWNocmlzdGlhbml0eS1jYXJkIFtjYXJkXT1cIm9mZmVyaW5nUmVuZGVyQ2FyZChvZmZlcmluZylcIiB2YXJpYW50PVwiYmFieVwiPjwvdmFsLWNocmlzdGlhbml0eS1jYXJkPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICA8c3Ryb25nPnt7IG9mZmVyaW5nLnJlYWR5ID8gdCgnY2hyaXN0aWFuaXR5T2ZmZXJpbmdSZWFkeScpIDogdCgnY2hyaXN0aWFuaXR5T2ZmZXJpbmdFeGhhdXN0ZWQnKSB9fTwvc3Ryb25nPlxuICAgICAgICAgICAgICAgICAgPHA+e3sgb2ZmZXJpbmdBYmlsaXR5VGV4dChvZmZlcmluZykgfX08L3A+XG4gICAgICAgICAgICAgICAgICBAaWYgKG9mZmVyaW5nLmFiaWxpdHlOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWNhblVzZU9mZmVyaW5nQWJpbGl0eShvZmZlcmluZywgb2ZmZXJpbmdzU2VhdCgpISlcIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ1c2VPZmZlcmluZ0FiaWxpdHkob2ZmZXJpbmcsIG9mZmVyaW5nc1NlYXQoKSEpXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IHQoJ2NocmlzdGlhbml0eVVzZUFiaWxpdHknKSB9fVxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9hcnRpY2xlPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3NlY3Rpb24+XG4gICAgICB9XG4gICAgPC9tYWluPlxuICBgLFxuICBzdHlsZXM6IFtcbiAgICBgXG4gICAgICA6aG9zdCB7XG4gICAgICAgIC0tY2hyaXN0aWFuaXR5LXRoZW1lLWluazogdmFyKC0tdmFsLXRleHQtY29sb3IsICMxZjI5MzMpO1xuICAgICAgICAtLWNocmlzdGlhbml0eS10aGVtZS1zdXJmYWNlOiAjZmZmZmZmO1xuICAgICAgICAtLWNocmlzdGlhbml0eS10aGVtZS1wYXJjaG1lbnQ6ICNlZmY2ZmY7XG4gICAgICAgIC0tY2hyaXN0aWFuaXR5LXRoZW1lLW9saXZlOiAjMWQ0ZWQ4O1xuICAgICAgICAtLWNocmlzdGlhbml0eS10aGVtZS1nb2xkOiAjMjU2M2ViO1xuICAgICAgICAtLWNocmlzdGlhbml0eS10aGVtZS1nb2xkLXNvZnQ6IHJnYmEoMzcsIDk5LCAyMzUsIDAuMTYpO1xuICAgICAgICAtLWNocmlzdGlhbml0eS10aGVtZS1nb2xkLXJpbmc6IHJnYmEoMzcsIDk5LCAyMzUsIDAuNDQpO1xuICAgICAgICAtLWNocmlzdGlhbml0eS10aGVtZS1nbG93OiByZ2JhKDM3LCA5OSwgMjM1LCAwLjI0KTtcbiAgICAgICAgLS1jaHJpc3RpYW5pdHktdGhlbWUtZm9jdXM6ICMyNTYzZWI7XG4gICAgICAgIC0tY2hyaXN0aWFuaXR5LXRoZW1lLXNoYWRvdzogcmdiYSgzNywgOTksIDIzNSwgMC4xNSk7XG4gICAgICAgIC0tY2hyaXN0aWFuaXR5LXRoZW1lLXNoYWRvdy1zdHJvbmc6IHJnYmEoMzcsIDk5LCAyMzUsIDAuMjYpO1xuICAgICAgICAtLWNocmlzdGlhbml0eS1jYXJkLWFzcGVjdDogNSAvIDcuNDU7XG4gICAgICAgIC0tY2hyaXN0aWFuaXR5LWNhcmQtYmFjazpcbiAgICAgICAgICBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCByZ2JhKDE2LCA0MiwgNjcsIDAuMTYpLCByZ2JhKDE2LCA0MiwgNjcsIDAuMDMpKSxcbiAgICAgICAgICByZXBlYXRpbmctbGluZWFyLWdyYWRpZW50KDQ1ZGVnLCAjZGJlYWZlIDAgMC4zM3JlbSwgI2ZmZmZmZiAwLjMzcmVtIDAuNjZyZW0pO1xuICAgICAgICAtLWNocmlzdGlhbml0eS1jYXJkLWJhY2stc29mdDpcbiAgICAgICAgICBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCByZ2JhKDE2LCA0MiwgNjcsIDAuMTEpLCByZ2JhKDE2LCA0MiwgNjcsIDAuMDIpKSxcbiAgICAgICAgICByZXBlYXRpbmctbGluZWFyLWdyYWRpZW50KDQ1ZGVnLCAjZGJlYWZlIDAgMC4zM3JlbSwgI2ZmZmZmZiAwLjMzcmVtIDAuNjZyZW0pO1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgICAgICBtaW4td2lkdGg6IDA7XG4gICAgICAgIG92ZXJmbG93LXg6IGNsaXA7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1jaHJpc3RpYW5pdHktdGhlbWUtaW5rKTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1zaGVsbCB7XG4gICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIGdhcDogMC42NXJlbTtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIG1heC13aWR0aDogMTAwJTtcbiAgICAgICAgbWluLXdpZHRoOiAwO1xuICAgICAgICBwYWRkaW5nOiAwLjc1cmVtIDAuMjVyZW07XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMzYsIDQ4LCA2OCwgMC4xMik7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDAuNzVyZW07XG4gICAgICAgIGJhY2tncm91bmQ6ICNmNmY4ZmI7XG4gICAgICAgIG92ZXJmbG93LXg6IGNsaXA7XG4gICAgICAgIG92ZXJmbG93LXk6IHZpc2libGU7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktc2hlbGwuaGFzLW1vZGFsLW9wZW4ge1xuICAgICAgICBtYXgtaGVpZ2h0OiAxMDBkdmg7XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgIG92ZXJzY3JvbGwtYmVoYXZpb3I6IGNvbnRhaW47XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktaGVhZGVyLFxuICAgICAgLmNocmlzdGlhbml0eS1tYXRjaC1zdHJpcCxcbiAgICAgIC5jaHJpc3RpYW5pdHktcGxheWVyX19zdW1tYXJ5LFxuICAgICAgLmNocmlzdGlhbml0eS1zaGFyZWQtem9uZSxcbiAgICAgIC5jaHJpc3RpYW5pdHktYWN0aW9ucyB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICAgICAgZ2FwOiAwLjc1cmVtO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWhlYWRlciBoMSxcbiAgICAgIC5jaHJpc3RpYW5pdHktaGVhZGVyIHAsXG4gICAgICAuY2hyaXN0aWFuaXR5LW1hdGNoLXBsYXllciBzdHJvbmcsXG4gICAgICAuY2hyaXN0aWFuaXR5LW1hdGNoLXBsYXllciBzbWFsbCxcbiAgICAgIC5jaHJpc3RpYW5pdHktc2NvcmVib2FyZCBzcGFuLFxuICAgICAgLmNocmlzdGlhbml0eS1oaXN0b3J5IGgyLFxuICAgICAgLmNocmlzdGlhbml0eS1hY3Rpb25zIHAge1xuICAgICAgICBtYXJnaW46IDA7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktaGVhZGVyIGgxIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjM1cmVtO1xuICAgICAgICBsaW5lLWhlaWdodDogMS4xO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWhlYWRlci1hY3Rpb25zIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcbiAgICAgICAgZ2FwOiAwLjVyZW07XG4gICAgICAgIG1pbi13aWR0aDogMDtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1nYWxsZXJ5LW9wZW4ge1xuICAgICAgICBtaW4taGVpZ2h0OiAyLjJyZW07XG4gICAgICAgIHBhZGRpbmc6IDAgMC43NXJlbTtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tY2hyaXN0aWFuaXR5LXRoZW1lLWdvbGQtcmluZyk7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4O1xuICAgICAgICBiYWNrZ3JvdW5kOlxuICAgICAgICAgIGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHJnYmEoMjM5LCAyNDYsIDI1NSwgMC45OCksIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45OCkpLFxuICAgICAgICAgIHJhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQgMjAlIDAlLCB2YXIoLS1jaHJpc3RpYW5pdHktdGhlbWUtZ29sZC1zb2Z0KSwgdHJhbnNwYXJlbnQgNDIlKTtcbiAgICAgICAgY29sb3I6IHZhcigtLWNocmlzdGlhbml0eS10aGVtZS1pbmspO1xuICAgICAgICBmb250OiBpbmhlcml0O1xuICAgICAgICBmb250LXNpemU6IDAuODJyZW07XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA4MDA7XG4gICAgICAgIGJveC1zaGFkb3c6IDAgMC41NXJlbSAxLjJyZW0gcmdiYSgzNywgOTksIDIzNSwgMC4xKTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1zcGxhc2gsXG4gICAgICAuY2hyaXN0aWFuaXR5LXN0YXJ0IHtcbiAgICAgICAgbWluLWhlaWdodDogbWluKDM0cmVtLCBjYWxjKDEwMGR2aCAtIDhyZW0pKTtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgzNywgOTksIDIzNSwgMC4xOCk7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDAuOXJlbTtcbiAgICAgICAgYmFja2dyb3VuZDpcbiAgICAgICAgICByYWRpYWwtZ3JhZGllbnQoY2lyY2xlIGF0IDUwJSAxOCUsIHJnYmEoMzcsIDk5LCAyMzUsIDAuMTYpLCB0cmFuc3BhcmVudCAyMnJlbSksXG4gICAgICAgICAgbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSgyMzksIDI0NiwgMjU1LCAwLjkzKSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjk3KSksXG4gICAgICAgICAgdmFyKC0tY2hyaXN0aWFuaXR5LWNhcmQtYmFjay1zb2Z0KTtcbiAgICAgICAgYm94LXNoYWRvdzogMCAxLjJyZW0gMy4ycmVtIHJnYmEoMzcsIDk5LCAyMzUsIDAuMTIpO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXNwbGFzaCB7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIHBsYWNlLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGFsaWduLWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgICAgZ2FwOiAxLjJyZW07XG4gICAgICAgIHBhZGRpbmc6IDIuNXJlbSAxLjI1cmVtO1xuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktc3BsYXNoX19tYXJrIHtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCgzLCAwLjc0cmVtKTtcbiAgICAgICAgcGxhY2UtY29udGVudDogY2VudGVyO1xuICAgICAgICBnYXA6IDAuNTVyZW07XG4gICAgICAgIHdpZHRoOiA1LjhyZW07XG4gICAgICAgIGhlaWdodDogNS44cmVtO1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDM3LCA5OSwgMjM1LCAwLjE4KTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogOTk5cHg7XG4gICAgICAgIGJhY2tncm91bmQ6XG4gICAgICAgICAgcmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCA1MCUgNTAlLCByZ2JhKDM3LCA5OSwgMjM1LCAwLjEyKSwgdHJhbnNwYXJlbnQgNTUlKSxcbiAgICAgICAgICByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNjIpO1xuICAgICAgICBib3gtc2hhZG93OlxuICAgICAgICAgIGluc2V0IDAgMCAwIDAuNTVyZW0gcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjQpLFxuICAgICAgICAgIDAgMXJlbSAycmVtIHJnYmEoMzcsIDk5LCAyMzUsIDAuMTIpO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXNwbGFzaF9fbWFyazo6YmVmb3JlLFxuICAgICAgLmNocmlzdGlhbml0eS1zcGxhc2hfX21hcms6OmFmdGVyIHtcbiAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgaW5zZXQ6IDAuNDJyZW07XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMzcsIDk5LCAyMzUsIDAuMTYpO1xuICAgICAgICBib3JkZXItcmFkaXVzOiBpbmhlcml0O1xuICAgICAgICBhbmltYXRpb246IGNocmlzdGlhbml0eS1sb2FkZXItcmluZyAxODAwbXMgZWFzZS1vdXQgaW5maW5pdGU7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktc3BsYXNoX19tYXJrOjphZnRlciB7XG4gICAgICAgIGFuaW1hdGlvbi1kZWxheTogNDgwbXM7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktc3BsYXNoX19tYXJrIHNwYW4ge1xuICAgICAgICB3aWR0aDogMC43NHJlbTtcbiAgICAgICAgaGVpZ2h0OiAwLjc0cmVtO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA5OTlweDtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tY2hyaXN0aWFuaXR5LXRoZW1lLWZvY3VzKTtcbiAgICAgICAgYm94LXNoYWRvdzogMCAwLjM1cmVtIDAuODVyZW0gcmdiYSgzNywgOTksIDIzNSwgMC4yMik7XG4gICAgICAgIGFuaW1hdGlvbjogY2hyaXN0aWFuaXR5LWxvYWRlci1kb3QgOTYwbXMgZWFzZS1pbi1vdXQgaW5maW5pdGU7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktc3BsYXNoX19tYXJrIHNwYW46bnRoLWNoaWxkKDIpIHtcbiAgICAgICAgYW5pbWF0aW9uLWRlbGF5OiAxNDBtcztcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1zcGxhc2hfX21hcmsgc3BhbjpudGgtY2hpbGQoMykge1xuICAgICAgICBhbmltYXRpb24tZGVsYXk6IDI4MG1zO1xuICAgICAgfVxuXG4gICAgICBAa2V5ZnJhbWVzIGNocmlzdGlhbml0eS1sb2FkZXItZG90IHtcbiAgICAgICAgMCUsXG4gICAgICAgIDEwMCUge1xuICAgICAgICAgIG9wYWNpdHk6IDAuMzg7XG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApIHNjYWxlKDAuODIpO1xuICAgICAgICB9XG5cbiAgICAgICAgNDUlIHtcbiAgICAgICAgICBvcGFjaXR5OiAxO1xuICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMC4yMnJlbSkgc2NhbGUoMSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgQGtleWZyYW1lcyBjaHJpc3RpYW5pdHktbG9hZGVyLXJpbmcge1xuICAgICAgICAwJSB7XG4gICAgICAgICAgb3BhY2l0eTogMC40ODtcbiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDAuNzIpO1xuICAgICAgICB9XG5cbiAgICAgICAgMTAwJSB7XG4gICAgICAgICAgb3BhY2l0eTogMDtcbiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1zcGxhc2ggc3BhbixcbiAgICAgIC5jaHJpc3RpYW5pdHktc3RhcnRfX2NvcHkgc3BhbiB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1jaHJpc3RpYW5pdHktdGhlbWUtb2xpdmUpO1xuICAgICAgICBmb250LXNpemU6IDAuNzZyZW07XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA5MDA7XG4gICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktc3BsYXNoIGgyLFxuICAgICAgLmNocmlzdGlhbml0eS1zdGFydCBoMixcbiAgICAgIC5jaHJpc3RpYW5pdHktc3RhcnQgcCB7XG4gICAgICAgIG1hcmdpbjogMDtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1zcGxhc2ggaDIge1xuICAgICAgICBtYXJnaW4tdG9wOiAwLjJyZW07XG4gICAgICAgIGZvbnQtc2l6ZTogY2xhbXAoMS42NXJlbSwgN3Z3LCAyLjdyZW0pO1xuICAgICAgICBsaW5lLWhlaWdodDogMTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1zcGxhc2ggcCB7XG4gICAgICAgIG1heC13aWR0aDogMjZyZW07XG4gICAgICAgIG1hcmdpbjogMC41NXJlbSBhdXRvIDA7XG4gICAgICAgIGNvbG9yOiByZ2JhKDMxLCA0MSwgNTEsIDAuNjgpO1xuICAgICAgICBmb250LXNpemU6IDAuOTZyZW07XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktc3RhcnQge1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBhbGlnbi1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgIGdhcDogMXJlbTtcbiAgICAgICAgcGFkZGluZzogY2xhbXAoMC44NXJlbSwgMnZ3LCAxLjM1cmVtKTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1zdGFydF9faGVybyB7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogbWlubWF4KDAsIDFmcikgbWlubWF4KDEycmVtLCAxOHJlbSk7XG4gICAgICAgIGdhcDogMXJlbTtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1zdGFydF9fY29weSB7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIGdhcDogMC40NXJlbTtcbiAgICAgICAgbWF4LXdpZHRoOiAzNnJlbTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1zdGFydCBoMiB7XG4gICAgICAgIGZvbnQtc2l6ZTogY2xhbXAoMS42cmVtLCA2dncsIDIuNXJlbSk7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjAyO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXN0YXJ0X19jb3B5IHAsXG4gICAgICAuY2hyaXN0aWFuaXR5LXN0YXJ0X19jYXJkcyBwLFxuICAgICAgLmNocmlzdGlhbml0eS1zdGFydF9fbW9kZXMgcCB7XG4gICAgICAgIGNvbG9yOiByZ2JhKDMxLCA0MSwgNTEsIDAuNjgpO1xuICAgICAgICBsaW5lLWhlaWdodDogMS40MjtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1zdGFydF9fZmFuIHtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBwbGFjZS1pdGVtczogY2VudGVyO1xuICAgICAgICBtaW4taGVpZ2h0OiAxM3JlbTtcbiAgICAgICAgb3ZlcmZsb3c6IHZpc2libGU7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktc3RhcnRfX2ZhbiB2YWwtY2hyaXN0aWFuaXR5LWNhcmQge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHdpZHRoOiBjbGFtcCg1LjdyZW0sIDEydncsIDcuMnJlbSk7XG4gICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IDUwJSA5MiU7XG4gICAgICAgIGZpbHRlcjogZHJvcC1zaGFkb3coMCAxcmVtIDEuNXJlbSByZ2JhKDgyLCA2NCwgMjgsIDAuMTgpKTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1zdGFydF9fY2FyZHMge1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCgzLCBtaW5tYXgoMCwgMWZyKSk7XG4gICAgICAgIGdhcDogMC43NXJlbTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1zdGFydF9fY2FyZHMgYXJ0aWNsZSxcbiAgICAgIC5jaHJpc3RpYW5pdHktc3RhcnRfX21vZGVzIGFydGljbGUge1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBnYXA6IDAuNjVyZW07XG4gICAgICAgIGFsaWduLWNvbnRlbnQ6IHN0YXJ0O1xuICAgICAgICBwYWRkaW5nOiAwLjk1cmVtO1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDM2LCA0OCwgNjgsIDAuMTIpO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAwLjc1cmVtO1xuICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuODIpO1xuICAgICAgICBib3gtc2hhZG93OiAwIDAuNzVyZW0gMS43cmVtIHJnYmEoODIsIDY0LCAyOCwgMC4wOCk7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktc3RhcnRfX2NhcmRzIGFydGljbGUge1xuICAgICAgICBtaW4taGVpZ2h0OiAxMXJlbTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1zdGFydF9fY2FyZHMgc3Ryb25nIHtcbiAgICAgICAgZm9udC1zaXplOiAxLjA1cmVtO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXN0YXJ0X19zdGF0dXMge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgICAgIGdhcDogMC40NXJlbTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1zdGFydF9fc3RhdHVzIHNwYW4sXG4gICAgICAuY2hyaXN0aWFuaXR5LXN0YXJ0X19tb2RlcyBhcnRpY2xlID4gc3BhbiB7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICB3aWR0aDogZml0LWNvbnRlbnQ7XG4gICAgICAgIG1pbi1oZWlnaHQ6IDEuODVyZW07XG4gICAgICAgIHBhZGRpbmc6IDAgMC42MnJlbTtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgzNywgOTksIDIzNSwgMC4yMik7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4O1xuICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDIzOSwgMjQ2LCAyNTUsIDAuODgpO1xuICAgICAgICBjb2xvcjogcmdiYSgzMSwgNDEsIDUxLCAwLjcyKTtcbiAgICAgICAgZm9udC1zaXplOiAwLjc1cmVtO1xuICAgICAgICBmb250LXdlaWdodDogODUwO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXN0YXJ0X19tb2RlcyB7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDQsIG1pbm1heCgwLCAxZnIpKTtcbiAgICAgICAgZ2FwOiAwLjU1cmVtO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXN0YXJ0X19tb2RlcyBhcnRpY2xlIHtcbiAgICAgICAgbWluLWhlaWdodDogOC41cmVtO1xuICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI0OCwgMjUwLCAyNTIsIDAuNzIpO1xuICAgICAgICBib3gtc2hhZG93OiBub25lO1xuICAgICAgICBvcGFjaXR5OiAwLjgyO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXN0YXJ0X19tb2RlcyBzdHJvbmcge1xuICAgICAgICBmb250LXNpemU6IDAuOTJyZW07XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktc3RhcnRfX21vZGVzIHAge1xuICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgIGZvbnQtc2l6ZTogMC44cmVtO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXByaW1hcnktYWN0aW9uLFxuICAgICAgLmNocmlzdGlhbml0eS1zZWNvbmRhcnktYWN0aW9uIHtcbiAgICAgICAganVzdGlmeS1zZWxmOiBzdGFydDtcbiAgICAgICAgbWluLWhlaWdodDogMi41cmVtO1xuICAgICAgICBwYWRkaW5nOiAwIDAuOXJlbTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogOTk5cHg7XG4gICAgICAgIGZvbnQ6IGluaGVyaXQ7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA5MDA7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktcHJpbWFyeS1hY3Rpb24ge1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDE2LCA0MiwgNjcsIDAuMTYpO1xuICAgICAgICBiYWNrZ3JvdW5kOiAjMTAyYTQzO1xuICAgICAgICBjb2xvcjogI2ZmZmZmZjtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1zZWNvbmRhcnktYWN0aW9uIHtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tY2hyaXN0aWFuaXR5LXRoZW1lLWdvbGQtcmluZyk7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWNocmlzdGlhbml0eS10aGVtZS1wYXJjaG1lbnQpO1xuICAgICAgICBjb2xvcjogdmFyKC0tY2hyaXN0aWFuaXR5LXRoZW1lLWluayk7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktaGVhZGVyIHAsXG4gICAgICAuY2hyaXN0aWFuaXR5LXR1cm4gc3BhbixcbiAgICAgIC5jaHJpc3RpYW5pdHktb2ZmZXJpbmdzIHNwYW4sXG4gICAgICAuY2hyaXN0aWFuaXR5LWhpZGRlbi1oYW5kIHNwYW4sXG4gICAgICAuY2hyaXN0aWFuaXR5LWRlY2sgc3BhbixcbiAgICAgIC5jaHJpc3RpYW5pdHktcGxhY2Ugc3BhbixcbiAgICAgIC5jaHJpc3RpYW5pdHktcGlsZSBzcGFuLFxuICAgICAgLmNocmlzdGlhbml0eS1sZWFkZXIgc3BhbiB7XG4gICAgICAgIGNvbG9yOiByZ2JhKDMxLCA0MSwgNTEsIDAuNjQpO1xuICAgICAgICBmb250LXNpemU6IDAuNzVyZW07XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktdHVybixcbiAgICAgIC5jaHJpc3RpYW5pdHktbGVhZGVyLFxuICAgICAgLmNocmlzdGlhbml0eS1vZmZlcmluZ3MsXG4gICAgICAuY2hyaXN0aWFuaXR5LWhpZGRlbi1oYW5kLFxuICAgICAgLmNocmlzdGlhbml0eS1waWxlLFxuICAgICAgLmNocmlzdGlhbml0eS1kZWNrLFxuICAgICAgLmNocmlzdGlhbml0eS1wbGFjZSB7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIGdhcDogMC4xNXJlbTtcbiAgICAgICAgbWluLXdpZHRoOiA1LjI1cmVtO1xuICAgICAgICBwYWRkaW5nOiAwLjU1cmVtIDAuNjVyZW07XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMzYsIDQ4LCA2OCwgMC4xMik7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDAuNXJlbTtcbiAgICAgICAgYmFja2dyb3VuZDogI2ZmZmZmZjtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS10dXJuLmlzLW93bi10dXJuIHtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiByZ2JhKDE4LCAxMjgsIDEwOCwgMC4zNSk7XG4gICAgICAgIGJhY2tncm91bmQ6ICNlY2ZkZjU7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktbWF0Y2gtc3RyaXAge1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IG1pbm1heCgwLCAxZnIpIGF1dG8gbWlubWF4KDAsIDFmcik7XG4gICAgICAgIHBhZGRpbmc6IDAuNDVyZW07XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMzYsIDQ4LCA2OCwgMC4xKTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMC43NXJlbTtcbiAgICAgICAgYmFja2dyb3VuZDogI2ZmZmZmZjtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1tYXRjaC1wbGF5ZXIge1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IGF1dG8gbWlubWF4KDAsIDFmcik7XG4gICAgICAgIGdhcDogMC41cmVtO1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBtaW4td2lkdGg6IDA7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktbWF0Y2gtcGxheWVyLS1vcHBvbmVudCB7XG4gICAgICAgIGRpcmVjdGlvbjogcnRsO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LW1hdGNoLXBsYXllci0tb3Bwb25lbnQgZGl2IHtcbiAgICAgICAgZGlyZWN0aW9uOiBsdHI7XG4gICAgICAgIHRleHQtYWxpZ246IHJpZ2h0O1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LW1hdGNoLXBsYXllciBkaXYge1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBtaW4td2lkdGg6IDA7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktbWF0Y2gtcGxheWVyIHN0cm9uZyxcbiAgICAgIC5jaHJpc3RpYW5pdHktbWF0Y2gtcGxheWVyIHNtYWxsIHtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktbWF0Y2gtcGxheWVyIHNtYWxsLFxuICAgICAgLmNocmlzdGlhbml0eS1zY29yZWJvYXJkIHNwYW4ge1xuICAgICAgICBjb2xvcjogcmdiYSgzMSwgNDEsIDUxLCAwLjU4KTtcbiAgICAgICAgZm9udC1zaXplOiAwLjcycmVtO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXNjb3JlYm9hcmQge1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBqdXN0aWZ5LWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIG1pbi13aWR0aDogNC4ycmVtO1xuICAgICAgICBwYWRkaW5nOiAwIDAuNTVyZW07XG4gICAgICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkIHJnYmEoMzYsIDQ4LCA2OCwgMC4xKTtcbiAgICAgICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCByZ2JhKDM2LCA0OCwgNjgsIDAuMSk7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktc2NvcmVib2FyZCBzdHJvbmcge1xuICAgICAgICBmb250LXNpemU6IDEuMnJlbTtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDE7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktdGFibGUge1xuICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIGdhcDogMC40NXJlbTtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIG1heC13aWR0aDogMTAwJTtcbiAgICAgICAgbWluLXdpZHRoOiAwO1xuICAgICAgICBwYWRkaW5nOiAwLjQ1cmVtIDAuMzVyZW07XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDAuNzVyZW07XG4gICAgICAgIGJhY2tncm91bmQ6ICNkY2VhZmI7XG4gICAgICAgIG92ZXJmbG93LXg6IGNsaXA7XG4gICAgICAgIG92ZXJmbG93LXk6IHZpc2libGU7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktaW1wYWN0LWxheWVyIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBpbnNldDogMDtcbiAgICAgICAgei1pbmRleDogMzA7XG4gICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWltcGFjdC1wb3Age1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIGxlZnQ6IDUwJTtcbiAgICAgICAgdG9wOiA1MCU7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ncmlkO1xuICAgICAgICBwbGFjZS1pdGVtczogY2VudGVyO1xuICAgICAgICBtaW4td2lkdGg6IDIuNDVyZW07XG4gICAgICAgIG1pbi1oZWlnaHQ6IDIuMXJlbTtcbiAgICAgICAgcGFkZGluZzogMC4xcmVtIDAuNTVyZW07XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMzcsIDk5LCAyMzUsIDAuMjYpO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA5OTlweDtcbiAgICAgICAgYmFja2dyb3VuZDpcbiAgICAgICAgICByYWRpYWwtZ3JhZGllbnQoY2lyY2xlIGF0IDUwJSA0MiUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45NSksIHJnYmEoMjM5LCAyNDYsIDI1NSwgMC43OCkpLFxuICAgICAgICAgIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44OCk7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1jaHJpc3RpYW5pdHktdGhlbWUtZm9jdXMpO1xuICAgICAgICBmb250LXNpemU6IDFyZW07XG4gICAgICAgIGZvbnQtd2VpZ2h0OiAxMDAwO1xuICAgICAgICBsaW5lLWhlaWdodDogMTtcbiAgICAgICAgdGV4dC1zaGFkb3c6IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcyKTtcbiAgICAgICAgYm94LXNoYWRvdzpcbiAgICAgICAgICAwIDAuOHJlbSAxLjhyZW0gcmdiYSgzNywgOTksIDIzNSwgMC4xOCksXG4gICAgICAgICAgMCAwIDAgMC4yNXJlbSByZ2JhKDM3LCA5OSwgMjM1LCAwLjA4KTtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XG4gICAgICAgIGFuaW1hdGlvbjogY2hyaXN0aWFuaXR5LWltcGFjdC1wb3AgMTEyMG1zIGVhc2Utb3V0IGJvdGg7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktaW1wYWN0LXBvcDo6YWZ0ZXIge1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBpbnNldDogLTAuMzVyZW07XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIGN1cnJlbnRDb2xvcjtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogaW5oZXJpdDtcbiAgICAgICAgb3BhY2l0eTogMC4yNDtcbiAgICAgICAgYW5pbWF0aW9uOiBjaHJpc3RpYW5pdHktaW1wYWN0LXJpbmcgMTEyMG1zIGVhc2Utb3V0IGJvdGg7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktaW1wYWN0LXBvcC5pcy1kYW1hZ2Uge1xuICAgICAgICBib3JkZXItY29sb3I6IHJnYmEoMjIwLCAzOCwgMzgsIDAuMzIpO1xuICAgICAgICBjb2xvcjogI2RjMjYyNjtcbiAgICAgICAgYm94LXNoYWRvdzpcbiAgICAgICAgICAwIDAuOHJlbSAxLjhyZW0gcmdiYSgyMjAsIDM4LCAzOCwgMC4xNiksXG4gICAgICAgICAgMCAwIDAgMC4yNXJlbSByZ2JhKDIyMCwgMzgsIDM4LCAwLjA4KTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1pbXBhY3QtcG9wLmlzLWhlYWwge1xuICAgICAgICBib3JkZXItY29sb3I6IHJnYmEoMjIsIDE2MywgNzQsIDAuMzIpO1xuICAgICAgICBjb2xvcjogIzE1ODAzZDtcbiAgICAgICAgYm94LXNoYWRvdzpcbiAgICAgICAgICAwIDAuOHJlbSAxLjhyZW0gcmdiYSgyMiwgMTYzLCA3NCwgMC4xNiksXG4gICAgICAgICAgMCAwIDAgMC4yNXJlbSByZ2JhKDIyLCAxNjMsIDc0LCAwLjA4KTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1pbXBhY3QtcG9wLmlzLXJlc291cmNlIHtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiByZ2JhKDM3LCA5OSwgMjM1LCAwLjMyKTtcbiAgICAgICAgY29sb3I6IHZhcigtLWNocmlzdGlhbml0eS10aGVtZS1mb2N1cyk7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktaW1wYWN0LXBvcC5pcy1vcHBvbmVudC1sZWFkZXIge1xuICAgICAgICBsZWZ0OiA1MCU7XG4gICAgICAgIHRvcDogMTAlO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWltcGFjdC1wb3AuaXMtb3Bwb25lbnQtYmF0dGxlIHtcbiAgICAgICAgbGVmdDogNTAlO1xuICAgICAgICB0b3A6IDI3JTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1pbXBhY3QtcG9wLmlzLW9wcG9uZW50LW9mZmVyaW5ncyB7XG4gICAgICAgIGxlZnQ6IDExJTtcbiAgICAgICAgdG9wOiA4JTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1pbXBhY3QtcG9wLmlzLXBsYXllci1iYXR0bGUge1xuICAgICAgICBsZWZ0OiA1MCU7XG4gICAgICAgIHRvcDogNjclO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWltcGFjdC1wb3AuaXMtcGxheWVyLWxlYWRlciB7XG4gICAgICAgIGxlZnQ6IDUwJTtcbiAgICAgICAgdG9wOiA4NCU7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktaW1wYWN0LXBvcC5pcy1wbGF5ZXItb2ZmZXJpbmdzIHtcbiAgICAgICAgbGVmdDogMTAlO1xuICAgICAgICB0b3A6IDg0JTtcbiAgICAgIH1cblxuICAgICAgQGtleWZyYW1lcyBjaHJpc3RpYW5pdHktaW1wYWN0LXBvcCB7XG4gICAgICAgIDAlIHtcbiAgICAgICAgICBvcGFjaXR5OiAwO1xuICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC0yMiUpIHNjYWxlKDAuNzUpO1xuICAgICAgICB9XG5cbiAgICAgICAgMTglIHtcbiAgICAgICAgICBvcGFjaXR5OiAxO1xuICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01OCUpIHNjYWxlKDEuMDgpO1xuICAgICAgICB9XG5cbiAgICAgICAgNzIlIHtcbiAgICAgICAgICBvcGFjaXR5OiAxO1xuICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC04NCUpIHNjYWxlKDEpO1xuICAgICAgICB9XG5cbiAgICAgICAgMTAwJSB7XG4gICAgICAgICAgb3BhY2l0eTogMDtcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtMTE4JSkgc2NhbGUoMC45NCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgQGtleWZyYW1lcyBjaHJpc3RpYW5pdHktaW1wYWN0LXJpbmcge1xuICAgICAgICAwJSB7XG4gICAgICAgICAgb3BhY2l0eTogMC4yNDtcbiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDAuNzgpO1xuICAgICAgICB9XG5cbiAgICAgICAgMTAwJSB7XG4gICAgICAgICAgb3BhY2l0eTogMDtcbiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEuNTUpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIEBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSB7XG4gICAgICAgIC5jaHJpc3RpYW5pdHktaW1wYWN0LXBvcCxcbiAgICAgICAgLmNocmlzdGlhbml0eS1pbXBhY3QtcG9wOjphZnRlcixcbiAgICAgICAgLmNocmlzdGlhbml0eS1zcGxhc2hfX21hcms6OmJlZm9yZSxcbiAgICAgICAgLmNocmlzdGlhbml0eS1zcGxhc2hfX21hcms6OmFmdGVyLFxuICAgICAgICAuY2hyaXN0aWFuaXR5LXNwbGFzaF9fbWFyayBzcGFuIHtcbiAgICAgICAgICBhbmltYXRpb246IG5vbmUgIWltcG9ydGFudDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXBsYXllci1zaWRlIHtcbiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgZ2FwOiAwLjM1cmVtO1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgICAgICBtaW4td2lkdGg6IDA7XG4gICAgICAgIHBhZGRpbmc6IDAuMzVyZW0gMC4zcmVtO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAwLjdyZW07XG4gICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4zNCk7XG4gICAgICAgIGdyaWQtdGVtcGxhdGUtcm93czogbWlubWF4KDdyZW0sIDFmcikgYXV0bztcbiAgICAgICAgbWluLWhlaWdodDogMTMuNzVyZW07XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktcGxheWVyLXNpZGUtLW9wcG9uZW50IHtcbiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiBhdXRvIG1pbm1heCg3cmVtLCAxZnIpO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXBsYXllciB7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIGdhcDogMC42NXJlbTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1iYXR0bGUtem9uZSB7XG4gICAgICAgIC0tY2hyaXN0aWFuaXR5LWJhdHRsZS1jYXJkLXdpZHRoOiBjbGFtcCg0LjhyZW0sIDE1dncsIDYuNnJlbSk7XG4gICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDQsIHZhcigtLWNocmlzdGlhbml0eS1iYXR0bGUtY2FyZC13aWR0aCkpO1xuICAgICAgICBnYXA6IDAuNXJlbTtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAgICAgIG1pbi13aWR0aDogMDtcbiAgICAgICAgbWluLWhlaWdodDogY2xhbXAoOS4xcmVtLCAyOXZ3LCAxMXJlbSk7XG4gICAgICAgIHBhZGRpbmc6IDAuNTVyZW0gMC40cmVtO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAwLjc1cmVtO1xuICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNzYpO1xuICAgICAgICB0cmFuc2l0aW9uOlxuICAgICAgICAgIGJhY2tncm91bmQgMTYwbXMgZWFzZSxcbiAgICAgICAgICBib3gtc2hhZG93IDE2MG1zIGVhc2U7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktYmF0dGxlLXpvbmUuaXMtcGxhY2luZy1jYXJkIHtcbiAgICAgICAgYmFja2dyb3VuZDpcbiAgICAgICAgICBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDI1NSwgMjUwLCAyNDAsIDAuOTYpLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuODQpKSxcbiAgICAgICAgICByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNzYpO1xuICAgICAgICBib3gtc2hhZG93OlxuICAgICAgICAgIGluc2V0IDAgMCAwIDAuMTRyZW0gdmFyKC0tY2hyaXN0aWFuaXR5LXRoZW1lLWdvbGQtc29mdCksXG4gICAgICAgICAgMCAwLjhyZW0gMS43cmVtIHJnYmEoOTUsIDExMSwgNDIsIDAuMTIpO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXNoYXJlZC16b25lIHtcbiAgICAgICAgcGFkZGluZzogMC41NXJlbSAwLjRyZW07XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDAuNzVyZW07XG4gICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45KTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkLFxuICAgICAgLmNocmlzdGlhbml0eS1lbmQtdHVybixcbiAgICAgIC5jaHJpc3RpYW5pdHktYWN0aW9ucyBidXR0b24sXG4gICAgICAuY2hyaXN0aWFuaXR5LXBpbGUsXG4gICAgICAuY2hyaXN0aWFuaXR5LWxlYWRlci0tdGFyZ2V0IHtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgzNiwgNDgsIDY4LCAwLjE2KTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMC41cmVtO1xuICAgICAgICBiYWNrZ3JvdW5kOiAjZmZmZmZmO1xuICAgICAgICBjb2xvcjogaW5oZXJpdDtcbiAgICAgICAgZm9udDogaW5oZXJpdDtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkIHtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgYWxpZ24tY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICAgICAgbWluLWhlaWdodDogNS44cmVtO1xuICAgICAgICBwYWRkaW5nOiAwLjVyZW07XG4gICAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgICAgIGJveC1zaGFkb3c6IDAgMC41cmVtIDEuMjVyZW0gcmdiYSgzNiwgNDgsIDY4LCAwLjA4KTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkIHNwYW4ge1xuICAgICAgICBmb250LXdlaWdodDogNzAwO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWNhcmQgc3Ryb25nIHtcbiAgICAgICAganVzdGlmeS1zZWxmOiBlbmQ7XG4gICAgICAgIHBhZGRpbmc6IDAuMTVyZW0gMC4zNXJlbTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogOTk5cHg7XG4gICAgICAgIGJhY2tncm91bmQ6ICNlZGYyZjc7XG4gICAgICAgIGZvbnQtc2l6ZTogMC44cmVtO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWNhcmQuaXMtc2VsZWN0ZWQge1xuICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLWNocmlzdGlhbml0eS10aGVtZS1nb2xkKTtcbiAgICAgICAgYm94LXNoYWRvdzpcbiAgICAgICAgICAwIDAgMCAwLjE4cmVtIHZhcigtLWNocmlzdGlhbml0eS10aGVtZS1nb2xkLXNvZnQpLFxuICAgICAgICAgIDAgMC44NXJlbSAxLjRyZW0gdmFyKC0tY2hyaXN0aWFuaXR5LXRoZW1lLXNoYWRvdyk7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZC5pcy1kaXNhYmxlZCxcbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZC5pcy1leGhhdXN0ZWQge1xuICAgICAgICBvcGFjaXR5OiAwLjU1O1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWNhcmQuaXMtdGFyZ2V0IHtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiAjZGMyNjI2O1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LW9mZmVyaW5nLWNhcmRzIHtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgZ3JpZC1hdXRvLWZsb3c6IGNvbHVtbjtcbiAgICAgICAgZ3JpZC1hdXRvLWNvbHVtbnM6IDAuN3JlbTtcbiAgICAgICAgZ2FwOiAwLjE2cmVtO1xuICAgICAgICBhbGlnbi1pdGVtczogZW5kO1xuICAgICAgICBtaW4taGVpZ2h0OiAxLjA1cmVtO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LW9mZmVyaW5nLWNhcmRzIGkge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgd2lkdGg6IDAuNjVyZW07XG4gICAgICAgIGhlaWdodDogMC45NXJlbTtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgxNiwgNDIsIDY3LCAwLjIyKTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMC4xOHJlbTtcbiAgICAgICAgYmFja2dyb3VuZDogI2Y4ZmFmYztcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1vZmZlcmluZy1jYXJkcyBpLmlzLXVzZWQge1xuICAgICAgICBiYWNrZ3JvdW5kOiAjY2JkNWUxO1xuICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSg5MGRlZyk7XG4gICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IGNlbnRlcjtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1zbG90IHtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgcGxhY2UtaXRlbXM6IGNlbnRlcjtcbiAgICAgICAganVzdGlmeS1zZWxmOiBjZW50ZXI7XG4gICAgICAgIHdpZHRoOiB2YXIoLS1jaHJpc3RpYW5pdHktYmF0dGxlLWNhcmQtd2lkdGgpO1xuICAgICAgICBoZWlnaHQ6IGF1dG87XG4gICAgICAgIG1pbi1oZWlnaHQ6IDA7XG4gICAgICAgIGFzcGVjdC1yYXRpbzogdmFyKC0tY2hyaXN0aWFuaXR5LWNhcmQtYXNwZWN0KTtcbiAgICAgICAgYm9yZGVyOiAxcHggZGFzaGVkIHJnYmEoMzYsIDQ4LCA2OCwgMC4yMik7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDAuNXJlbTtcbiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjQ1KTtcbiAgICAgICAgY29sb3I6IGluaGVyaXQ7XG4gICAgICAgIGZvbnQ6IGluaGVyaXQ7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktc2xvdC0tcGxheS10YXJnZXQge1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tY2hyaXN0aWFuaXR5LXRoZW1lLWdvbGQtcmluZyk7XG4gICAgICAgIGJhY2tncm91bmQ6XG4gICAgICAgICAgbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSgyNTUsIDI1MCwgMjQwLCAwLjkyKSwgcmdiYSgyNDgsIDI1MCwgMjUyLCAwLjgyKSksXG4gICAgICAgICAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjcpO1xuICAgICAgICBjb2xvcjogIzVkNDMwNTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDgwMDtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgYm94LXNoYWRvdzpcbiAgICAgICAgICBpbnNldCAwIDAgMCAwLjEycmVtIHJnYmEoMjE0LCAxNjIsIDI5LCAwLjIpLFxuICAgICAgICAgIDAgMC43cmVtIDEuMjVyZW0gdmFyKC0tY2hyaXN0aWFuaXR5LXRoZW1lLXNoYWRvdyk7XG4gICAgICAgIGFuaW1hdGlvbjogY2hyaXN0aWFuaXR5LXRhcmdldC1wdWxzZSAxNDUwbXMgZWFzZS1pbi1vdXQgaW5maW5pdGU7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktc2xvdC0tcGxheS10YXJnZXQ6OmJlZm9yZSB7XG4gICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIGluc2V0OiAwLjM1cmVtO1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDIxNCwgMTYyLCAyOSwgMC4yMik7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDAuNHJlbTtcbiAgICAgICAgYmFja2dyb3VuZDpcbiAgICAgICAgICBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCByZ2JhKDIxNCwgMTYyLCAyOSwgMC4xKSwgdHJhbnNwYXJlbnQgNDYlKSxcbiAgICAgICAgICByYWRpYWwtZ3JhZGllbnQoY2lyY2xlIGF0IDUwJSA0MiUsIHZhcigtLWNocmlzdGlhbml0eS10aGVtZS1nbG93KSwgdHJhbnNwYXJlbnQgNTglKTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1zbG90LS1wbGF5LXRhcmdldCBzcGFuIHtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICB6LWluZGV4OiAyO1xuICAgICAgICBwYWRkaW5nOiAwLjE2cmVtIDAuNDRyZW07XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4O1xuICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNzgpO1xuICAgICAgICBmb250LXNpemU6IDAuNzhyZW07XG4gICAgICB9XG5cbiAgICAgIEBrZXlmcmFtZXMgY2hyaXN0aWFuaXR5LXRhcmdldC1wdWxzZSB7XG4gICAgICAgIDAlLFxuICAgICAgICAxMDAlIHtcbiAgICAgICAgICBib3gtc2hhZG93OlxuICAgICAgICAgICAgaW5zZXQgMCAwIDAgMC4xMnJlbSByZ2JhKDIxNCwgMTYyLCAyOSwgMC4yKSxcbiAgICAgICAgICAgIDAgMC43cmVtIDEuMjVyZW0gdmFyKC0tY2hyaXN0aWFuaXR5LXRoZW1lLXNoYWRvdyk7XG4gICAgICAgIH1cblxuICAgICAgICA1MCUge1xuICAgICAgICAgIGJveC1zaGFkb3c6XG4gICAgICAgICAgICBpbnNldCAwIDAgMCAwLjE2cmVtIHJnYmEoMjE0LCAxNjIsIDI5LCAwLjM0KSxcbiAgICAgICAgICAgIDAgMC45cmVtIDEuNjVyZW0gdmFyKC0tY2hyaXN0aWFuaXR5LXRoZW1lLXNoYWRvdy1zdHJvbmcpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktaGFuZCB7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIGdyaWQtYXV0by1jb2x1bW5zOiBtaW5tYXgoNnJlbSwgOHJlbSk7XG4gICAgICAgIGdyaWQtYXV0by1mbG93OiBjb2x1bW47XG4gICAgICAgIGdhcDogMC41NXJlbTtcbiAgICAgICAgb3ZlcmZsb3cteDogYXV0bztcbiAgICAgICAgcGFkZGluZy1ib3R0b206IDAuMjVyZW07XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktYWN0aW9ucyB7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICAgICAgICBwYWRkaW5nOiAwLjc1cmVtO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAwLjc1cmVtO1xuICAgICAgICBiYWNrZ3JvdW5kOiAjZmZmZmZmO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWFjdGlvbnMgZGl2IHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgICAgICBnYXA6IDAuNXJlbTtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1hY3Rpb25zIGJ1dHRvbixcbiAgICAgIC5jaHJpc3RpYW5pdHktZW5kLXR1cm4ge1xuICAgICAgICBtaW4taGVpZ2h0OiAyLjRyZW07XG4gICAgICAgIHBhZGRpbmc6IDAgMC43NXJlbTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1hY3Rpb25zIGJ1dHRvbjpub3QoOmRpc2FibGVkKSxcbiAgICAgIC5jaHJpc3RpYW5pdHktZW5kLXR1cm4ge1xuICAgICAgICBiYWNrZ3JvdW5kOiAjMTAyYTQzO1xuICAgICAgICBjb2xvcjogI2ZmZmZmZjtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1oaXN0b3J5IHtcbiAgICAgICAgcGFkZGluZzogMC43NXJlbTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMC43NXJlbTtcbiAgICAgICAgYmFja2dyb3VuZDogI2ZmZmZmZjtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1oYW5kLWZhbiB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgIG1pbi1oZWlnaHQ6IDEwLjhyZW07XG4gICAgICAgIHBhZGRpbmc6IDAuMjVyZW0gMC4yNXJlbSAyLjFyZW07XG4gICAgICAgIGlzb2xhdGlvbjogaXNvbGF0ZTtcbiAgICAgICAgb3ZlcmZsb3c6IHZpc2libGU7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktaGFuZC1zaGVsZiB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgei1pbmRleDogMTI7XG4gICAgICAgIG1pbi1oZWlnaHQ6IDEycmVtO1xuICAgICAgICBtYXJnaW4tdG9wOiAtMS4xNXJlbTtcbiAgICAgICAgcGFkZGluZzogMS40NXJlbSAwLjI1cmVtIDFyZW07XG4gICAgICAgIG92ZXJmbG93OiB2aXNpYmxlO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWhhbmQtc2hlbGYtLW9wcG9uZW50IHtcbiAgICAgICAgei1pbmRleDogODtcbiAgICAgICAgbWluLWhlaWdodDogNi44NXJlbTtcbiAgICAgICAgbWFyZ2luLXRvcDogMDtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICAgICAgcGFkZGluZzogMC40NXJlbSAwLjI1cmVtIDAuODVyZW07XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktaGFuZC1mYW4tLW9wcG9uZW50IHtcbiAgICAgICAgbWluLWhlaWdodDogNS45cmVtO1xuICAgICAgICBwYWRkaW5nLWJvdHRvbTogMC43NXJlbTtcbiAgICAgICAgYWxpZ24taXRlbXM6IHN0YXJ0O1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWhhbmQtZmFuLS1vcHBvbmVudCAuY2hyaXN0aWFuaXR5LWhpZGRlbi1jYXJkLWJ1dHRvbiB7XG4gICAgICAgIHdpZHRoOiBjbGFtcCgzLjdyZW0sIDEydncsIDQuOXJlbSk7XG4gICAgICAgIGFzcGVjdC1yYXRpbzogdmFyKC0tY2hyaXN0aWFuaXR5LWNhcmQtYXNwZWN0KTtcbiAgICAgICAgbWFyZ2luLWlubGluZTogLTAuOXJlbTtcbiAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogNTAlIDEyMCU7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktaGFuZC1mYW4tLW9wcG9uZW50IC5jaHJpc3RpYW5pdHktaGlkZGVuLWNhcmQtYnV0dG9uOmZpcnN0LWNoaWxkIHtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDA7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktaGFuZC1mYW4tLW9wcG9uZW50IC5jaHJpc3RpYW5pdHktaGlkZGVuLWNhcmQtYnV0dG9uOmxhc3QtY2hpbGQge1xuICAgICAgICBtYXJnaW4tcmlnaHQ6IDA7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZC1wcmV2aWV3LWNhcmQsXG4gICAgICAuY2hyaXN0aWFuaXR5LWNhcmQtbWluaSxcbiAgICAgIC5jaHJpc3RpYW5pdHktb2ZmZXJpbmctcGlsZSxcbiAgICAgIC5jaHJpc3RpYW5pdHktb2ZmZXJpbmctY2FyZCxcbiAgICAgIC5jaHJpc3RpYW5pdHktbGVhZGVyLWNhcmQsXG4gICAgICAuY2hyaXN0aWFuaXR5LXpvbmUtY2FyZCxcbiAgICAgIC5jaHJpc3RpYW5pdHktem9uZS1waWxlLFxuICAgICAgLmNocmlzdGlhbml0eS1lbmQtdHVybiB7XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMzYsIDQ4LCA2OCwgMC4xNik7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDAuNXJlbTtcbiAgICAgICAgYmFja2dyb3VuZDogI2ZmZmZmZjtcbiAgICAgICAgY29sb3I6IGluaGVyaXQ7XG4gICAgICAgIGZvbnQ6IGluaGVyaXQ7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZC1wcmV2aWV3LWNhcmQge1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBncmlkLXRlbXBsYXRlLXJvd3M6IGF1dG8gbWlubWF4KDAsIDFmcikgYXV0byBhdXRvO1xuICAgICAgICBnYXA6IDAuMjhyZW07XG4gICAgICAgIGFsaWduLWNvbnRlbnQ6IHN0cmV0Y2g7XG4gICAgICAgIHdpZHRoOiBjbGFtcCg0LjlyZW0sIDE3dncsIDcuMXJlbSk7XG4gICAgICAgIGhlaWdodDogYXV0bztcbiAgICAgICAgbWluLWhlaWdodDogMDtcbiAgICAgICAgYXNwZWN0LXJhdGlvOiB2YXIoLS1jaHJpc3RpYW5pdHktY2FyZC1hc3BlY3QpO1xuICAgICAgICBwYWRkaW5nOiAwLjQ4cmVtO1xuICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgICAgICB0cmFuc2Zvcm0tb3JpZ2luOiA1MCUgMTE1JTtcbiAgICAgICAgdHJhbnNpdGlvbjpcbiAgICAgICAgICB0cmFuc2Zvcm0gMTYwbXMgZWFzZSxcbiAgICAgICAgICBib3gtc2hhZG93IDE2MG1zIGVhc2UsXG4gICAgICAgICAgYm9yZGVyLWNvbG9yIDE2MG1zIGVhc2U7XG4gICAgICAgIGJveC1zaGFkb3c6IDAgMC41cmVtIDEuMjVyZW0gcmdiYSgzNiwgNDgsIDY4LCAwLjEpO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXJlbmRlci1jYXJkLWJ1dHRvbiB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICBvdmVyZmxvdzogdmlzaWJsZTtcbiAgICAgICAgYm9yZGVyOiAwO1xuICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICAgICAgYm94LXNoYWRvdzogbm9uZTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1yZW5kZXItY2FyZC1idXR0b24gPiB2YWwtY2hyaXN0aWFuaXR5LWNhcmQge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1nYWxsZXJ5LWNhcmQtYnV0dG9uIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIHdpZHRoOiBtaW4oMTAwJSwgNi44cmVtKTtcbiAgICAgICAgbWluLXdpZHRoOiAwO1xuICAgICAgICBhc3BlY3QtcmF0aW86IHZhcigtLWNocmlzdGlhbml0eS1jYXJkLWFzcGVjdCk7XG4gICAgICAgIHBhZGRpbmc6IDA7XG4gICAgICAgIG92ZXJmbG93OiB2aXNpYmxlO1xuICAgICAgICBib3JkZXI6IDA7XG4gICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgICAgICBjb2xvcjogaW5oZXJpdDtcbiAgICAgICAgZm9udDogaW5oZXJpdDtcbiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICAgICAgYm94LXNoYWRvdzogbm9uZTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1nYWxsZXJ5LWNhcmQtYnV0dG9uID4gdmFsLWNocmlzdGlhbml0eS1jYXJkIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZC1wcmV2aWV3LWNhcmQtLWhhbmQuY2hyaXN0aWFuaXR5LXJlbmRlci1jYXJkLWJ1dHRvbixcbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZC1wcmV2aWV3LWNhcmQtLWJhdHRsZS5jaHJpc3RpYW5pdHktcmVuZGVyLWNhcmQtYnV0dG9uLFxuICAgICAgLmNocmlzdGlhbml0eS1sZWFkZXItY2FyZC5jaHJpc3RpYW5pdHktcmVuZGVyLWNhcmQtYnV0dG9uIHtcbiAgICAgICAgYXNwZWN0LXJhdGlvOiB2YXIoLS1jaHJpc3RpYW5pdHktY2FyZC1hc3BlY3QpO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWNhcmQtcHJldmlldy1jYXJkLS1oYW5kLmNocmlzdGlhbml0eS1yZW5kZXItY2FyZC1idXR0b246aG92ZXIgdmFsLWNocmlzdGlhbml0eS1jYXJkLFxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkLXByZXZpZXctY2FyZC0taGFuZC5jaHJpc3RpYW5pdHktcmVuZGVyLWNhcmQtYnV0dG9uLmlzLXNlbGVjdGVkIHZhbC1jaHJpc3RpYW5pdHktY2FyZCxcbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZC1wcmV2aWV3LWNhcmQtLWJhdHRsZS5jaHJpc3RpYW5pdHktcmVuZGVyLWNhcmQtYnV0dG9uLmlzLXNlbGVjdGVkIHZhbC1jaHJpc3RpYW5pdHktY2FyZCxcbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZC1wcmV2aWV3LWNhcmQtLWJhdHRsZS5jaHJpc3RpYW5pdHktcmVuZGVyLWNhcmQtYnV0dG9uLmlzLXRhcmdldCB2YWwtY2hyaXN0aWFuaXR5LWNhcmQsXG4gICAgICAuY2hyaXN0aWFuaXR5LWxlYWRlci1jYXJkLmNocmlzdGlhbml0eS1yZW5kZXItY2FyZC1idXR0b24uaXMtdGFyZ2V0IHZhbC1jaHJpc3RpYW5pdHktY2FyZCB7XG4gICAgICAgIGZpbHRlcjogZHJvcC1zaGFkb3coMCAwIDAuNTVyZW0gcmdiYSgyMTQsIDE2MiwgMjksIDAuMzUpKTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkLXByZXZpZXctY2FyZC0tYmF0dGxlLmNocmlzdGlhbml0eS1yZW5kZXItY2FyZC1idXR0b24uaXMtcmVhZHktYXR0YWNrZXIgdmFsLWNocmlzdGlhbml0eS1jYXJkIHtcbiAgICAgICAgZmlsdGVyOiBkcm9wLXNoYWRvdygwIDAuNDVyZW0gMC44cmVtIHJnYmEoOTUsIDExMSwgNDIsIDAuMTYpKTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkLXByZXZpZXctY2FyZC0tYmF0dGxlLmNocmlzdGlhbml0eS1yZW5kZXItY2FyZC1idXR0b24uaXMtc2VsZWN0ZWQge1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTAuMjhyZW0pO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWNhcmQtZnJhbWUge1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIGdyaWQtdGVtcGxhdGUtcm93czogYXV0byBtaW5tYXgoMCwgMWZyKSBhdXRvIGF1dG87XG4gICAgICAgIGdhcDogMC4yOHJlbTtcbiAgICAgICAgYWxpZ24tY29udGVudDogc3RyZXRjaDtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgcGFkZGluZzogMC40OHJlbTtcbiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICAgICAgYmFja2dyb3VuZDpcbiAgICAgICAgICBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOTgpLCByZ2JhKDI0OCwgMjUwLCAyNTIsIDAuOTgpKSxcbiAgICAgICAgICByYWRpYWwtZ3JhZGllbnQoY2lyY2xlIGF0IDE1JSAwJSwgcmdiYSgyMTQsIDE2MiwgMjksIDAuMTIpLCB0cmFuc3BhcmVudCA0NCUpO1xuICAgICAgICBib3gtc2hhZG93OlxuICAgICAgICAgIDAgMC41cmVtIDEuMjVyZW0gcmdiYSgzNiwgNDgsIDY4LCAwLjEpLFxuICAgICAgICAgIGluc2V0IDAgMCAwIDAuMThyZW0gcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjYyKTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkLWZyYW1lLWhlYWRlciB7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogbWlubWF4KDAsIDFmcikgYXV0bztcbiAgICAgICAgZ2FwOiAwLjE2cmVtO1xuICAgICAgICBhbGlnbi1pdGVtczogc3RhcnQ7XG4gICAgICAgIG1pbi13aWR0aDogMDtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkLWZyYW1lLWhlYWRlciBzbWFsbCB7XG4gICAgICAgIGdyaWQtY29sdW1uOiAxO1xuICAgICAgICBtaW4td2lkdGg6IDA7XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgIGNvbG9yOiByZ2JhKDMxLCA0MSwgNTEsIDAuNjQpO1xuICAgICAgICBmb250LXNpemU6IGNsYW1wKDAuNTJyZW0sIDEuNXZ3LCAwLjY4cmVtKTtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDE7XG4gICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWNhcmQtZnJhbWUtaGVhZGVyIHN0cm9uZyB7XG4gICAgICAgIGdyaWQtY29sdW1uOiAxO1xuICAgICAgICBqdXN0aWZ5LXNlbGY6IHN0YXJ0O1xuICAgICAgICBhbGlnbi1zZWxmOiBzdGFydDtcbiAgICAgICAgbWluLXdpZHRoOiAwO1xuICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAwO1xuICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICAgICAgZm9udC1zaXplOiBjbGFtcCgwLjgycmVtLCAyLjV2dywgMS4wNXJlbSk7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjAyO1xuICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkLXByZXZpZXctY2FyZC0taGFuZCAuY2hyaXN0aWFuaXR5LWNhcmQtZnJhbWUtaGVhZGVyIHN0cm9uZyxcbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZC1wcmV2aWV3LWNhcmQtLWJhdHRsZSAuY2hyaXN0aWFuaXR5LWNhcmQtZnJhbWUtaGVhZGVyIHN0cm9uZyxcbiAgICAgIC5jaHJpc3RpYW5pdHktbGVhZGVyLWNhcmQgLmNocmlzdGlhbml0eS1jYXJkLWZyYW1lLWhlYWRlciBzdHJvbmcge1xuICAgICAgICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgICAgICAgb3ZlcmZsb3ctd3JhcDogYW55d2hlcmU7XG4gICAgICAgIHRleHQtb3ZlcmZsb3c6IGNsaXA7XG4gICAgICAgIHdoaXRlLXNwYWNlOiBub3JtYWw7XG4gICAgICAgIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG4gICAgICAgIC13ZWJraXQtbGluZS1jbGFtcDogMjtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkLXByZXZpZXctY2FyZC0taGFuZCAuY2hyaXN0aWFuaXR5LWNhcmQtZnJhbWUtaGVhZGVyIHNtYWxsIHtcbiAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkLXByZXZpZXctY2FyZC0taGFuZCAuY2hyaXN0aWFuaXR5LWNhcmQtZnJhbWUtYXJ0ID4gc3BhbiB7XG4gICAgICAgIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICAgICAgICBtYXgtd2lkdGg6IDg4JTtcbiAgICAgICAgb3ZlcmZsb3ctd3JhcDogYW55d2hlcmU7XG4gICAgICAgIHRleHQtb3ZlcmZsb3c6IGNsaXA7XG4gICAgICAgIHdoaXRlLXNwYWNlOiBub3JtYWw7XG4gICAgICAgIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG4gICAgICAgIC13ZWJraXQtbGluZS1jbGFtcDogMjtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkLWZyYW1lLWhlYWRlciBzcGFuIHtcbiAgICAgICAgZ3JpZC1jb2x1bW46IDI7XG4gICAgICAgIGdyaWQtcm93OiAxIC8gc3BhbiAyO1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBwbGFjZS1pdGVtczogY2VudGVyO1xuICAgICAgICBtaW4td2lkdGg6IDEuM3JlbTtcbiAgICAgICAgaGVpZ2h0OiAxLjNyZW07XG4gICAgICAgIHBhZGRpbmc6IDAgMC4yMnJlbTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogOTk5cHg7XG4gICAgICAgIGJhY2tncm91bmQ6ICNmZmQ5MWE7XG4gICAgICAgIGNvbG9yOiAjMjQzMDQ0O1xuICAgICAgICBmb250LXNpemU6IDAuOHJlbTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDkwMDtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDE7XG4gICAgICAgIGJveC1zaGFkb3c6IGluc2V0IDAgLTAuMDhyZW0gMCByZ2JhKDgyLCA2NCwgMjgsIDAuMTgpO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWNhcmQtZnJhbWUtaGVhZGVyIHNwYW4uaXMtb2ZmZXJpbmctcGlwcyxcbiAgICAgIC5jaHJpc3RpYW5pdHktZnVsbC1jYXJkLWNvc3QuaXMtb2ZmZXJpbmctcGlwcyxcbiAgICAgIC5jaHJpc3RpYW5pdHktb2ZmZXJpbmctY2FyZCBzcGFuLmlzLW9mZmVyaW5nLXBpcHMge1xuICAgICAgICBncmlkLWF1dG8tZmxvdzogY29sdW1uO1xuICAgICAgICBnYXA6IDAuMTRyZW07XG4gICAgICAgIG1pbi13aWR0aDogYXV0bztcbiAgICAgICAgcGFkZGluZzogMCAwLjI4cmVtO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWNhcmQtZnJhbWUtaGVhZGVyIHNwYW4uaXMtb2ZmZXJpbmctcGlwcyBpLFxuICAgICAgLmNocmlzdGlhbml0eS1mdWxsLWNhcmQtY29zdC5pcy1vZmZlcmluZy1waXBzIGksXG4gICAgICAuY2hyaXN0aWFuaXR5LW9mZmVyaW5nLWNhcmQgc3Bhbi5pcy1vZmZlcmluZy1waXBzIGksXG4gICAgICAuY2hyaXN0aWFuaXR5LWZ1bGwtY2FyZC1waXBzIGkge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgd2lkdGg6IDAuNzJyZW07XG4gICAgICAgIGhlaWdodDogMC43MnJlbTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogOTk5cHg7XG4gICAgICAgIGJhY2tncm91bmQ6XG4gICAgICAgICAgcmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCAzNCUgMjglLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOSkgMCAwLjEycmVtLCB0cmFuc3BhcmVudCAwLjEzcmVtKSxcbiAgICAgICAgICAjZmZkOTFhO1xuICAgICAgICBib3gtc2hhZG93OlxuICAgICAgICAgIGluc2V0IDAgLTAuMDhyZW0gMCByZ2JhKDgyLCA2NCwgMjgsIDAuMTgpLFxuICAgICAgICAgIDAgMC4xMnJlbSAwLjI0cmVtIHJnYmEoMTYsIDQyLCA2NywgMC4xKTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkLWZyYW1lLWFydCB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgcGxhY2UtaXRlbXM6IGNlbnRlcjtcbiAgICAgICAgbWluLWhlaWdodDogMDtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMC4zNnJlbTtcbiAgICAgICAgYmFja2dyb3VuZDpcbiAgICAgICAgICBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCByZ2JhKDk1LCAxMTEsIDQyLCAwLjE4KSwgcmdiYSgyMTQsIDE2MiwgMjksIDAuMTQpKSxcbiAgICAgICAgICByYWRpYWwtZ3JhZGllbnQoY2lyY2xlIGF0IDUwJSAxOCUsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43MiksIHRyYW5zcGFyZW50IDQ4JSksXG4gICAgICAgICAgI2RiZTdlZjtcbiAgICAgICAgYm94LXNoYWRvdzogaW5zZXQgMCAwIDAgMXB4IHJnYmEoMzYsIDQ4LCA2OCwgMC4wOCk7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZC1mcmFtZS1hcnQgPiBzcGFuIHtcbiAgICAgICAgbWF4LXdpZHRoOiA3OCU7XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgIGNvbG9yOiByZ2JhKDM2LCA0OCwgNjgsIDAuNDgpO1xuICAgICAgICBmb250LXNpemU6IGNsYW1wKDAuODJyZW0sIDIuMnZ3LCAxLjA1cmVtKTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDkwMDtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMDI7XG4gICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZC1mcmFtZS1hcnQgc21hbGwge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHJpZ2h0OiAwO1xuICAgICAgICBib3R0b206IDAuMjhyZW07XG4gICAgICAgIG1heC13aWR0aDogNzglO1xuICAgICAgICBwYWRkaW5nOiAwLjFyZW0gMC4zNHJlbTtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogOTk5cHggMCAwIDk5OXB4O1xuICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOSk7XG4gICAgICAgIGNvbG9yOiByZ2JhKDMxLCA0MSwgNTEsIDAuNjYpO1xuICAgICAgICBmb250LXNpemU6IDAuNDhyZW07XG4gICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgICAgICAgZm9udC13ZWlnaHQ6IDkwMDtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDE7XG4gICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWNhcmQtZnJhbWUtZWZmZWN0IHtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgYWxpZ24tY29udGVudDogY2VudGVyO1xuICAgICAgICBnYXA6IDAuMXJlbTtcbiAgICAgICAgbWluLWhlaWdodDogMS40NXJlbTtcbiAgICAgICAgcGFkZGluZzogMC4yNHJlbTtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMC4zNHJlbTtcbiAgICAgICAgYmFja2dyb3VuZDpcbiAgICAgICAgICByYWRpYWwtZ3JhZGllbnQoY2lyY2xlIGF0IDUwJSA3MCUsIHJnYmEoMzYsIDQ4LCA2OCwgMC4wNiksIHRyYW5zcGFyZW50IDQ0JSksXG4gICAgICAgICAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjg2KTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkLWZyYW1lLWVmZmVjdCBzdHJvbmcge1xuICAgICAgICBqdXN0aWZ5LXNlbGY6IGVuZDtcbiAgICAgICAgYWxpZ24tc2VsZjogZW5kO1xuICAgICAgICBwYWRkaW5nOiAwLjEycmVtIDAuMzJyZW07XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4O1xuICAgICAgICBiYWNrZ3JvdW5kOiAjZWRmMmY3O1xuICAgICAgICBmb250LXNpemU6IGNsYW1wKDAuNjZyZW0sIDJ2dywgMC44MnJlbSk7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjA1O1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWNhcmQtZnJhbWUtZWZmZWN0IHAge1xuICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgIGNvbG9yOiByZ2JhKDMxLCA0MSwgNTEsIDAuNzIpO1xuICAgICAgICBmb250LXNpemU6IDAuNThyZW07XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE7XG4gICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWNhcmQtZnJhbWUtZm9vdGVyIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgICAgICBnYXA6IDAuMjJyZW07XG4gICAgICAgIGNvbG9yOiByZ2JhKDMxLCA0MSwgNTEsIDAuNTIpO1xuICAgICAgICBmb250LXNpemU6IDAuNDZyZW07XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA4MDA7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWNhcmQtZnJhbWUtLWJhdHRsZSB7XG4gICAgICAgIGdhcDogMC4yMnJlbTtcbiAgICAgICAgcGFkZGluZzogMC40MnJlbTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkLWZyYW1lLS1iYXR0bGUgLmNocmlzdGlhbml0eS1jYXJkLWZyYW1lLWFydCB7XG4gICAgICAgIG1pbi1oZWlnaHQ6IDIuNnJlbTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkLWZyYW1lLS1sZWFkZXIgLmNocmlzdGlhbml0eS1jYXJkLWZyYW1lLWFydCB7XG4gICAgICAgIGJhY2tncm91bmQ6XG4gICAgICAgICAgbGluZWFyLWdyYWRpZW50KDEzNWRlZywgcmdiYSgzNywgOTksIDIzNSwgMC4xNCksIHJnYmEoMjE0LCAxNjIsIDI5LCAwLjE2KSksXG4gICAgICAgICAgcmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCA1MCUgMTglLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNzgpLCB0cmFuc3BhcmVudCA0OCUpLFxuICAgICAgICAgICNlN2VlZjg7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZC1mcmFtZS0tbGlzdCB7XG4gICAgICAgIHdpZHRoOiBjbGFtcCg0LjRyZW0sIDIydncsIDUuOHJlbSk7XG4gICAgICAgIHBhZGRpbmc6IDAuMzhyZW07XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZC1mcmFtZS0tbGlzdCAuY2hyaXN0aWFuaXR5LWNhcmQtZnJhbWUtYXJ0IHtcbiAgICAgICAgbWluLWhlaWdodDogMi41cmVtO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWhhbmQtY2FyZC13cmFwIHtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBqdXN0aWZ5LWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGZsZXg6IDAgMCBhdXRvO1xuICAgICAgICBtYXJnaW4taW5saW5lOiAtMC40MnJlbTtcbiAgICAgICAgcGFkZGluZy1ib3R0b206IDJyZW07XG4gICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IDUwJSAxMTUlO1xuICAgICAgICB0cmFuc2l0aW9uOlxuICAgICAgICAgIHRyYW5zZm9ybSAxNjBtcyBlYXNlLFxuICAgICAgICAgIGZpbHRlciAxNjBtcyBlYXNlO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWhhbmQtY2FyZC13cmFwOmhvdmVyLFxuICAgICAgLmNocmlzdGlhbml0eS1oYW5kLWNhcmQtd3JhcC5pcy1zZWxlY3RlZCxcbiAgICAgIC5jaHJpc3RpYW5pdHktaGFuZC1jYXJkLXdyYXAuaXMtZHJhZ2dpbmcge1xuICAgICAgICB6LWluZGV4OiAzO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWhhbmQtY2FyZC13cmFwOmhvdmVyIC5jaHJpc3RpYW5pdHktY2FyZC1wcmV2aWV3LWNhcmQtLWhhbmQsXG4gICAgICAuY2hyaXN0aWFuaXR5LWhhbmQtY2FyZC13cmFwLmlzLXNlbGVjdGVkIC5jaHJpc3RpYW5pdHktY2FyZC1wcmV2aWV3LWNhcmQtLWhhbmQsXG4gICAgICAuY2hyaXN0aWFuaXR5LWhhbmQtY2FyZC13cmFwLmlzLWRyYWdnaW5nIC5jaHJpc3RpYW5pdHktY2FyZC1wcmV2aWV3LWNhcmQtLWhhbmQge1xuICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLWNocmlzdGlhbml0eS10aGVtZS1nb2xkKTtcbiAgICAgICAgYm94LXNoYWRvdzpcbiAgICAgICAgICAwIDAgMCAwLjEycmVtIHZhcigtLWNocmlzdGlhbml0eS10aGVtZS1nb2xkLXNvZnQpLFxuICAgICAgICAgIDAgMXJlbSAycmVtIHZhcigtLWNocmlzdGlhbml0eS10aGVtZS1zaGFkb3cpO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWNhcmQtcHJldmlldy1jYXJkLS1oYW5kIHtcbiAgICAgICAgY3Vyc29yOiBncmFiO1xuICAgICAgICB0b3VjaC1hY3Rpb246IG5vbmU7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZC1wcmV2aWV3LWNhcmQtLWhhbmQ6YWN0aXZlIHtcbiAgICAgICAgY3Vyc29yOiBncmFiYmluZztcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkLXByZXZpZXctY2FyZC0taGFuZC5jZGstZHJhZy1kaXNhYmxlZCB7XG4gICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZC1kcmFnLXByZXZpZXcsXG4gICAgICAuY2hyaXN0aWFuaXR5LWNhcmQtcHJldmlldy1jYXJkLmNkay1kcmFnLXByZXZpZXcge1xuICAgICAgICB3aWR0aDogY2xhbXAoNC45cmVtLCAxN3Z3LCA3LjFyZW0pO1xuICAgICAgICBoZWlnaHQ6IGF1dG87XG4gICAgICAgIG1pbi1oZWlnaHQ6IDA7XG4gICAgICAgIGFzcGVjdC1yYXRpbzogdmFyKC0tY2hyaXN0aWFuaXR5LWNhcmQtYXNwZWN0KTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMC41cmVtO1xuICAgICAgICBib3gtc2hhZG93OlxuICAgICAgICAgIDAgMCAwIDAuMTZyZW0gcmdiYSgyNTUsIDI0NCwgMTk0LCAwLjY4KSxcbiAgICAgICAgICAwIDEuNXJlbSAzcmVtIHZhcigtLWNocmlzdGlhbml0eS10aGVtZS1zaGFkb3ctc3Ryb25nKTtcbiAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMmRlZykgc2NhbGUoMS4wMyk7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZC1kcmFnLXByZXZpZXcgdmFsLWNocmlzdGlhbml0eS1jYXJkIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZC1kcmFnLXBsYWNlaG9sZGVyLFxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkLXByZXZpZXctY2FyZC5jZGstZHJhZy1wbGFjZWhvbGRlciB7XG4gICAgICAgIHdpZHRoOiBjbGFtcCg0LjlyZW0sIDE3dncsIDcuMXJlbSk7XG4gICAgICAgIGhlaWdodDogYXV0bztcbiAgICAgICAgbWluLWhlaWdodDogMDtcbiAgICAgICAgYXNwZWN0LXJhdGlvOiB2YXIoLS1jaHJpc3RpYW5pdHktY2FyZC1hc3BlY3QpO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAwLjVyZW07XG4gICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMTQ4LCAxNjMsIDE4NCwgMC4xMik7XG4gICAgICAgIG9wYWNpdHk6IDAuMjI7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktc2xvdC5jZGstZHJvcC1saXN0LWRyYWdnaW5nLFxuICAgICAgLmNocmlzdGlhbml0eS1vZmZlcmluZy1kcm9wLXRhcmdldC5jZGstZHJvcC1saXN0LWRyYWdnaW5nIHtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1jaHJpc3RpYW5pdHktdGhlbWUtZ29sZC1yaW5nKTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1zbG90LmNkay1kcm9wLWxpc3QtcmVjZWl2aW5nLFxuICAgICAgLmNocmlzdGlhbml0eS1vZmZlcmluZy1kcm9wLXRhcmdldC5jZGstZHJvcC1saXN0LXJlY2VpdmluZyB7XG4gICAgICAgIGJveC1zaGFkb3c6XG4gICAgICAgICAgaW5zZXQgMCAwIDAgMC4xOHJlbSByZ2JhKDIxNCwgMTYyLCAyOSwgMC4zNCksXG4gICAgICAgICAgMCAxcmVtIDEuOXJlbSB2YXIoLS1jaHJpc3RpYW5pdHktdGhlbWUtc2hhZG93LXN0cm9uZyk7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZC1leWUge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHJpZ2h0OiA1MCU7XG4gICAgICAgIGJvdHRvbTogMC4zOHJlbTtcbiAgICAgICAgd2lkdGg6IDIuMTVyZW07XG4gICAgICAgIGhlaWdodDogMS41NXJlbTtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWNocmlzdGlhbml0eS10aGVtZS1mb2N1cykgNTIlLCB0cmFuc3BhcmVudCk7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4O1xuICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOTQpO1xuICAgICAgICBib3gtc2hhZG93OiAwIDAuNTVyZW0gMS4xcmVtIHJnYmEoMTYsIDQyLCA2NywgMC4xNCk7XG4gICAgICAgIG9wYWNpdHk6IDA7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDUwJSwgLTAuMnJlbSkgc2NhbGUoMC45Mik7XG4gICAgICAgIHRyYW5zaXRpb246XG4gICAgICAgICAgb3BhY2l0eSAxNDBtcyBlYXNlLFxuICAgICAgICAgIHRyYW5zZm9ybSAxNDBtcyBlYXNlLFxuICAgICAgICAgIGJvcmRlci1jb2xvciAxNDBtcyBlYXNlO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWNhcmQtZXllOjpiZWZvcmUge1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB0b3A6IDUwJTtcbiAgICAgICAgbGVmdDogNTAlO1xuICAgICAgICB3aWR0aDogMS4xcmVtO1xuICAgICAgICBoZWlnaHQ6IDEuMXJlbTtcbiAgICAgICAgYm9yZGVyOiAwLjEycmVtIHNvbGlkIHZhcigtLWNocmlzdGlhbml0eS10aGVtZS1mb2N1cyk7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDgyJSAwO1xuICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOTQpO1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKSByb3RhdGUoNDVkZWcpO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWNhcmQtZXllOjphZnRlciB7XG4gICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHRvcDogNTAlO1xuICAgICAgICBsZWZ0OiA1MCU7XG4gICAgICAgIHdpZHRoOiAwLjQycmVtO1xuICAgICAgICBoZWlnaHQ6IDAuNDJyZW07XG4gICAgICAgIGJvcmRlcjogMC4wOXJlbSBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOTUpO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA5OTlweDtcbiAgICAgICAgYmFja2dyb3VuZDpcbiAgICAgICAgICByYWRpYWwtZ3JhZGllbnQoY2lyY2xlIGF0IDM1JSAzMiUsICNmZmZmZmYgMCAwLjA2cmVtLCB0cmFuc3BhcmVudCAwLjA3cmVtKSxcbiAgICAgICAgICB2YXIoLS1jaHJpc3RpYW5pdHktdGhlbWUtZm9jdXMpO1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1oYW5kLWNhcmQtd3JhcDpob3ZlciAuY2hyaXN0aWFuaXR5LWNhcmQtZXllLFxuICAgICAgLmNocmlzdGlhbml0eS1oYW5kLWNhcmQtd3JhcC5pcy1zZWxlY3RlZCAuY2hyaXN0aWFuaXR5LWNhcmQtZXllLFxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkLWV5ZTpmb2N1cy12aXNpYmxlIHtcbiAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoNTAlLCAwKSBzY2FsZSgxKTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1vZmZlcmluZy1kcm9wLXRhcmdldCB7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIHdpZHRoOiBtaW4oMTAwJSwgNS45cmVtKTtcbiAgICAgICAgaGVpZ2h0OiA3LjFyZW07XG4gICAgICAgIG1pbi1oZWlnaHQ6IDA7XG4gICAgICAgIG1heC1oZWlnaHQ6IDcuMXJlbTtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDAuNjRyZW07XG4gICAgICAgIHRyYW5zaXRpb246XG4gICAgICAgICAgYm9yZGVyLWNvbG9yIDE2MG1zIGVhc2UsXG4gICAgICAgICAgYm94LXNoYWRvdyAxNjBtcyBlYXNlLFxuICAgICAgICAgIGJhY2tncm91bmQgMTYwbXMgZWFzZTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1vZmZlcmluZy1kcm9wLXRhcmdldC5pcy1wbGF5LXRhcmdldCB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tY2hyaXN0aWFuaXR5LXRoZW1lLWdvbGQtcmluZyk7XG4gICAgICAgIGJhY2tncm91bmQ6XG4gICAgICAgICAgbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSgyNTUsIDI1MCwgMjQwLCAwLjk2KSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjk0KSksXG4gICAgICAgICAgcmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCA4MiUgMTQlLCByZ2JhKDI1MCwgMjA0LCAyMSwgMC4yOCkgMCAwLjdyZW0sIHRyYW5zcGFyZW50IDAuNzJyZW0pO1xuICAgICAgICBib3gtc2hhZG93OlxuICAgICAgICAgIGluc2V0IDAgMCAwIDAuMTJyZW0gcmdiYSgyMTQsIDE2MiwgMjksIDAuMjQpLFxuICAgICAgICAgIDAgMC44cmVtIDEuNTVyZW0gdmFyKC0tY2hyaXN0aWFuaXR5LXRoZW1lLXNoYWRvdyk7XG4gICAgICAgIGFuaW1hdGlvbjogY2hyaXN0aWFuaXR5LXRhcmdldC1wdWxzZSAxNDUwbXMgZWFzZS1pbi1vdXQgaW5maW5pdGU7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktb2ZmZXJpbmctZHJvcC10YXJnZXQgPiAuY2RrLWRyYWctcGxhY2Vob2xkZXIge1xuICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWNhcmQtZnJhbWUtLWJhY2ssXG4gICAgICAuY2hyaXN0aWFuaXR5LWNhcmQtcHJldmlldy1jYXJkLS1iYWNrIHtcbiAgICAgICAgd2lkdGg6IGNsYW1wKDRyZW0sIDE0dncsIDUuN3JlbSk7XG4gICAgICAgIG1pbi1oZWlnaHQ6IDA7XG4gICAgICAgIGFzcGVjdC1yYXRpbzogdmFyKC0tY2hyaXN0aWFuaXR5LWNhcmQtYXNwZWN0KTtcbiAgICAgICAgcGxhY2UtaXRlbXM6IGNlbnRlcjtcbiAgICAgICAgcGFkZGluZzogMC41NXJlbTtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgYm94LXNoYWRvdzogMCAwLjhyZW0gMS41NXJlbSByZ2JhKDM2LCA0OCwgNjgsIDAuMTQpO1xuICAgICAgICB0cmFuc2Zvcm0tb3JpZ2luOiA1MCUgLTE4JTtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tY2hyaXN0aWFuaXR5LWNhcmQtYmFjayk7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZC1mcmFtZS0tYmFjazo6YmVmb3JlLFxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkLXByZXZpZXctY2FyZC0tYmFjazo6YmVmb3JlIHtcbiAgICAgICAgY29udGVudDogJyc7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgaW5zZXQ6IDAuNXJlbTtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgxNiwgNDIsIDY3LCAwLjEyKTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMC4zOHJlbTtcbiAgICAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE4KSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA0KSk7XG4gICAgICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMCAwIDAuMTJyZW0gcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkLXByZXZpZXctY2FyZC0tYmF0dGxlIHtcbiAgICAgICAganVzdGlmeS1zZWxmOiBjZW50ZXI7XG4gICAgICAgIHdpZHRoOiB2YXIoLS1jaHJpc3RpYW5pdHktYmF0dGxlLWNhcmQtd2lkdGgpO1xuICAgICAgICBtaW4td2lkdGg6IDA7XG4gICAgICAgIGhlaWdodDogYXV0bztcbiAgICAgICAgbWluLWhlaWdodDogMDtcbiAgICAgICAgYXNwZWN0LXJhdGlvOiB2YXIoLS1jaHJpc3RpYW5pdHktY2FyZC1hc3BlY3QpO1xuICAgICAgICBtYXJnaW4taW5saW5lOiAwO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWNhcmQtcHJldmlldy1jYXJkID4gc3BhbixcbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZC1taW5pID4gc3BhbixcbiAgICAgIC5jaHJpc3RpYW5pdHktb2ZmZXJpbmctcGlsZSA+IHNwYW4sXG4gICAgICAuY2hyaXN0aWFuaXR5LW9mZmVyaW5nLWNhcmQgPiBzcGFuLFxuICAgICAgLmNocmlzdGlhbml0eS1sZWFkZXItY2FyZCA+IHNwYW4sXG4gICAgICAuY2hyaXN0aWFuaXR5LXpvbmUtY2FyZCA+IHNwYW4sXG4gICAgICAuY2hyaXN0aWFuaXR5LXpvbmUtcGlsZSA+IHNwYW4ge1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIHotaW5kZXg6IDI7XG4gICAgICAgIGFsaWduLXNlbGY6IHN0YXJ0O1xuICAgICAgICBmb250LXdlaWdodDogNzAwO1xuICAgICAgICBsaW5lLWhlaWdodDogMS4wNTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1jYXJkLXByZXZpZXctY2FyZCA+IHN0cm9uZyxcbiAgICAgIC5jaHJpc3RpYW5pdHktY2FyZC1taW5pID4gc3Ryb25nLFxuICAgICAgLmNocmlzdGlhbml0eS1vZmZlcmluZy1waWxlID4gc3Ryb25nLFxuICAgICAgLmNocmlzdGlhbml0eS1vZmZlcmluZy1jYXJkID4gc3Ryb25nLFxuICAgICAgLmNocmlzdGlhbml0eS1sZWFkZXItY2FyZCA+IHN0cm9uZyxcbiAgICAgIC5jaHJpc3RpYW5pdHktem9uZS1jYXJkID4gc3Ryb25nLFxuICAgICAgLmNocmlzdGlhbml0eS16b25lLXBpbGUgPiBzdHJvbmcge1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIHotaW5kZXg6IDM7XG4gICAgICAgIGp1c3RpZnktc2VsZjogZW5kO1xuICAgICAgICBhbGlnbi1zZWxmOiBlbmQ7XG4gICAgICAgIHBhZGRpbmc6IDAuMTVyZW0gMC4zNXJlbTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogOTk5cHg7XG4gICAgICAgIGJhY2tncm91bmQ6ICNlZGYyZjc7XG4gICAgICAgIGZvbnQtc2l6ZTogMC44cmVtO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXBsYXllci1yYWNrIHtcbiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBtaW5tYXgoNS45cmVtLCA3cmVtKSBtaW5tYXgoNXJlbSwgMWZyKSBtaW5tYXgoNC4ycmVtLCA3cmVtKTtcbiAgICAgICAgZ2FwOiAwLjQ1cmVtO1xuICAgICAgICBhbGlnbi1pdGVtczogZW5kO1xuICAgICAgICBqdXN0aWZ5LWl0ZW1zOiBzdHJldGNoO1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgICAgICBtaW4td2lkdGg6IDA7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktcGxheWVyLXJhY2stLW9wcG9uZW50IHtcbiAgICAgICAgYWxpZ24taXRlbXM6IHN0YXJ0O1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWhhbmQtbWV0ZXIge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHRvcDogMDtcbiAgICAgICAgcmlnaHQ6IDAuMzVyZW07XG4gICAgICAgIHotaW5kZXg6IDQ7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ncmlkO1xuICAgICAgICBncmlkLWF1dG8tZmxvdzogY29sdW1uO1xuICAgICAgICBnYXA6IDAuMjVyZW07XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIG1pbi1oZWlnaHQ6IDEuN3JlbTtcbiAgICAgICAgcGFkZGluZzogMC4xOHJlbSAwLjQ2cmVtO1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDM2LCA0OCwgNjgsIDAuMTIpO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA5OTlweDtcbiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkpO1xuICAgICAgICBib3gtc2hhZG93OiAwIDAuMzVyZW0gMC44cmVtIHJnYmEoMTYsIDQyLCA2NywgMC4wOCk7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktaGFuZC1tZXRlci0tb3Bwb25lbnQge1xuICAgICAgICB0b3A6IDAuMTVyZW07XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktaGFuZC1tZXRlciBzcGFuIHtcbiAgICAgICAgY29sb3I6IHJnYmEoMzEsIDQxLCA1MSwgMC41OCk7XG4gICAgICAgIGZvbnQtc2l6ZTogMC42OHJlbTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1oYW5kLW1ldGVyIHN0cm9uZyB7XG4gICAgICAgIGZvbnQtc2l6ZTogMC44NnJlbTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1wbGF5ZXItYmFkZ2UsXG4gICAgICAuY2hyaXN0aWFuaXR5LXBsYXllci1jb21tYW5kIHtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgZ2FwOiAwLjM1cmVtO1xuICAgICAgICBqdXN0aWZ5LWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIG1pbi13aWR0aDogMDtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1wbGF5ZXItYmFkZ2Uge1xuICAgICAgICBhbGlnbi1jb250ZW50OiBzdGFydDtcbiAgICAgICAgY29sb3I6IHJnYmEoMzEsIDQxLCA1MSwgMC43Nik7XG4gICAgICAgIGZvbnQtc2l6ZTogMC43NHJlbTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1wbGF5ZXItYmFkZ2UtLW9wcG9uZW50IHtcbiAgICAgICAganVzdGlmeS1zZWxmOiBjZW50ZXI7XG4gICAgICAgIGdyaWQtYXV0by1mbG93OiBjb2x1bW47XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXBsYXllci1iYWRnZSBzdHJvbmcge1xuICAgICAgICBtYXgtd2lkdGg6IDYuNXJlbTtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktYXZhdGFyIHtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgcGxhY2UtaXRlbXM6IGNlbnRlcjtcbiAgICAgICAgd2lkdGg6IDEuODVyZW07XG4gICAgICAgIGhlaWdodDogMS44NXJlbTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogOTk5cHg7XG4gICAgICAgIGNvbG9yOiAjZmZmZmZmO1xuICAgICAgICBmb250LXNpemU6IDAuNzZyZW07XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA4MDA7XG4gICAgICAgIGJveC1zaGFkb3c6IDAgMC4zNXJlbSAwLjlyZW0gcmdiYSgxNiwgNDIsIDY3LCAwLjE2KTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1vZmZlcmluZ3Mtem9uZSB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICAgICAgZ2FwOiAwLjI1cmVtO1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gICAgICAgIGp1c3RpZnktc2VsZjogc3RhcnQ7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWNhcmQtbWluaSxcbiAgICAgIC5jaHJpc3RpYW5pdHktb2ZmZXJpbmctcGlsZSxcbiAgICAgIC5jaHJpc3RpYW5pdHktb2ZmZXJpbmctY2FyZCxcbiAgICAgIC5jaHJpc3RpYW5pdHktbGVhZGVyLWNhcmQsXG4gICAgICAuY2hyaXN0aWFuaXR5LXpvbmUtY2FyZCxcbiAgICAgIC5jaHJpc3RpYW5pdHktem9uZS1waWxlIHtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgYWxpZ24tY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICAgICAgbWluLWhlaWdodDogNC45cmVtO1xuICAgICAgICBwYWRkaW5nOiAwLjQ4cmVtO1xuICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWNhcmQtZnJhbWUge1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBncmlkLXRlbXBsYXRlLXJvd3M6IGF1dG8gbWlubWF4KDAsIDFmcikgYXV0byBhdXRvO1xuICAgICAgICBhbGlnbi1jb250ZW50OiBzdHJldGNoO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LW9mZmVyaW5nLXBpbGUsXG4gICAgICAuY2hyaXN0aWFuaXR5LXpvbmUtY2FyZCxcbiAgICAgIC5jaHJpc3RpYW5pdHktem9uZS1waWxlIHtcbiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiBhdXRvIG1pbm1heCgyLjZyZW0sIDFmcikgYXV0bztcbiAgICAgICAgYWxpZ24tY29udGVudDogc3RyZXRjaDtcbiAgICAgICAgZ2FwOiAwLjMycmVtO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWNhcmQtbWluaSB7XG4gICAgICAgIHdpZHRoOiAzLjVyZW07XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktb2ZmZXJpbmctcGlsZSB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgaXNvbGF0aW9uOiBpc29sYXRlO1xuICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICBqdXN0aWZ5LXNlbGY6IHN0YXJ0O1xuICAgICAgICB3aWR0aDogbWluKDEwMCUsIDUuOXJlbSk7XG4gICAgICAgIGhlaWdodDogNy4xcmVtO1xuICAgICAgICBtYXgtaGVpZ2h0OiA3LjFyZW07XG4gICAgICAgIG1pbi1oZWlnaHQ6IDA7XG4gICAgICAgIHBhZGRpbmc6IDAuNzJyZW0gMC41cmVtIDAuNTVyZW07XG4gICAgICAgIGJhY2tncm91bmQ6XG4gICAgICAgICAgbGluZWFyLWdyYWRpZW50KDE4MGRlZywgI2ZmZmZmZiwgI2Y4ZmFmYyksXG4gICAgICAgICAgbGluZWFyLWdyYWRpZW50KDEzNWRlZywgcmdiYSgyNTAsIDIwNCwgMjEsIDAuMTgpLCB0cmFuc3BhcmVudCA0MiUpO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LW9mZmVyaW5nLWRyb3AtdGFyZ2V0IC5jaHJpc3RpYW5pdHktb2ZmZXJpbmctcGlsZSB7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAgIG1heC1oZWlnaHQ6IG5vbmU7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktb2ZmZXJpbmctcGlsZSA+IHNwYW4ge1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIHotaW5kZXg6IDI7XG4gICAgICAgIG1heC13aWR0aDogMTAwJTtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgZm9udC1zaXplOiBjbGFtcCgwLjg2cmVtLCAyLjR2dywgMXJlbSk7XG4gICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LW9mZmVyaW5nLXBpbGUgPiBzdHJvbmcge1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIHotaW5kZXg6IDI7XG4gICAgICAgIGp1c3RpZnktc2VsZjogZW5kO1xuICAgICAgICBwYWRkaW5nOiAwLjEycmVtIDAuMzRyZW07XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4O1xuICAgICAgICBiYWNrZ3JvdW5kOiAjZWRmMmY3O1xuICAgICAgICBmb250LXNpemU6IDAuNzhyZW07XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktc2xvdCA+IC5jZGstZHJhZy1wbGFjZWhvbGRlciB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktb2ZmZXJpbmctcGlsZSBpIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB0b3A6IDIuMjVyZW07XG4gICAgICAgIGxlZnQ6IDUwJTtcbiAgICAgICAgei1pbmRleDogMTtcbiAgICAgICAgd2lkdGg6IDIuN3JlbTtcbiAgICAgICAgaGVpZ2h0OiAzLjc1cmVtO1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDE2LCA0MiwgNjcsIDAuMTgpO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAwLjM1cmVtO1xuICAgICAgICBiYWNrZ3JvdW5kOlxuICAgICAgICAgIGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45MiksIHJnYmEoMjQxLCAyNDUsIDI0OSwgMC45MikpLFxuICAgICAgICAgIHJhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQgNzglIDE4JSwgI2ZhY2MxNSAwIDAuMzhyZW0sIHRyYW5zcGFyZW50IDAuNHJlbSk7XG4gICAgICAgIGJveC1zaGFkb3c6IDAgMC4zNXJlbSAwLjg1cmVtIHJnYmEoMTYsIDQyLCA2NywgMC4xKTtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01OCUpIHJvdGF0ZSgtNWRlZyk7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktb2ZmZXJpbmctcGlsZSBpOm50aC1jaGlsZCgyKSB7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKSB0cmFuc2xhdGUoMC4yNHJlbSwgMC4wOHJlbSkgcm90YXRlKDNkZWcpO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LW9mZmVyaW5nLXBpbGUgaTpudGgtY2hpbGQoMykge1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSkgdHJhbnNsYXRlKDAuNDhyZW0sIDAuMThyZW0pIHJvdGF0ZSgtMWRlZyk7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktbGVhZGVyLWNhcmQge1xuICAgICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7XG4gICAgICAgIGp1c3RpZnktc2VsZjogY2VudGVyO1xuICAgICAgICB3aWR0aDogY2xhbXAoNC43NXJlbSwgMTd2dywgNnJlbSk7XG4gICAgICAgIG1pbi1oZWlnaHQ6IDA7XG4gICAgICAgIGFzcGVjdC1yYXRpbzogdmFyKC0tY2hyaXN0aWFuaXR5LWNhcmQtYXNwZWN0KTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1yYWNrLXNwYWNlciB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBtaW4taGVpZ2h0OiAxcHg7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktYmF0dGxlLXpvbmUge1xuICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCg0LCB2YXIoLS1jaHJpc3RpYW5pdHktYmF0dGxlLWNhcmQtd2lkdGgpKTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1zaGFyZWQtem9uZSB7XG4gICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDMsIG1pbm1heCg0LjNyZW0sIDFmcikpO1xuICAgICAgICBhbGlnbi1pdGVtczogc3RyZXRjaDtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIG1heC13aWR0aDogMTAwJTtcbiAgICAgICAgbWluLXdpZHRoOiAwO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXpvbmUtY2FyZCxcbiAgICAgIC5jaHJpc3RpYW5pdHktem9uZS1waWxlIHtcbiAgICAgICAgbWluLWhlaWdodDogNi40NXJlbTtcbiAgICAgICAgcGFkZGluZzogMC43cmVtIDAuNTJyZW0gMC41NXJlbTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS16b25lLXBpbGUge1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICAgIGlzb2xhdGlvbjogaXNvbGF0ZTtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgYm94LXNoYWRvdzogaW5zZXQgMCAwIDAgOTk5cHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEyKTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS16b25lLXBpbGUgaSB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgdG9wOiAyLjJyZW07XG4gICAgICAgIHJpZ2h0OiAwLjcycmVtO1xuICAgICAgICB6LWluZGV4OiAtMTtcbiAgICAgICAgd2lkdGg6IDIuN3JlbTtcbiAgICAgICAgaGVpZ2h0OiAzLjdyZW07XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMTYsIDQyLCA2NywgMC4xOCk7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDAuMzVyZW07XG4gICAgICAgIGJhY2tncm91bmQ6ICNmOGZhZmM7XG4gICAgICAgIGJveC1zaGFkb3c6IDAgMC4zNXJlbSAwLjg1cmVtIHJnYmEoMTYsIDQyLCA2NywgMC4xMSk7XG4gICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDRkZWcpO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXpvbmUtcGlsZSBpOm50aC1jaGlsZCgyKSB7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC0wLjI4cmVtLCAwLjEycmVtKSByb3RhdGUoLTNkZWcpO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXpvbmUtcGlsZSBpOm50aC1jaGlsZCgzKSB7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWNocmlzdGlhbml0eS1jYXJkLWJhY2spO1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtMC41NHJlbSwgMC4yNHJlbSkgcm90YXRlKDJkZWcpO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWZsb2F0aW5nLWNhcmQtc2hlbGwge1xuICAgICAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgICAgIHRvcDogY2FsYyg1MCUgKyAxLjNyZW0pO1xuICAgICAgICBsZWZ0OiA1MCU7XG4gICAgICAgIHotaW5kZXg6IDEzMjtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiBtaW5tYXgoMCwgYXV0bykgYXV0bztcbiAgICAgICAgZ2FwOiAwLjU1cmVtO1xuICAgICAgICB3aWR0aDogbWluKDE3LjVyZW0sIGNhbGMoNTJkdmggLSAzcmVtKSwgY2FsYygxMDB2dyAtIDEuMjVyZW0pKTtcbiAgICAgICAgbWF4LWhlaWdodDogY2FsYygxMDBkdmggLSA0LjI1cmVtKTtcbiAgICAgICAgcGFkZGluZy10b3A6IDIuNXJlbTtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktZmxvYXRpbmctY2FyZCB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgei1pbmRleDogMTtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICBtaW4taGVpZ2h0OiAwO1xuICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICBib3JkZXI6IDA7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDAuNzVyZW07XG4gICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgICAgICBib3gtc2hhZG93OiAwIDAgMi4ycmVtIHZhcigtLWNocmlzdGlhbml0eS10aGVtZS1nbG93KTtcbiAgICAgICAgdG91Y2gtYWN0aW9uOiBub25lO1xuICAgICAgICB0cmFuc2Zvcm06XG4gICAgICAgICAgdHJhbnNsYXRlKHZhcigtLXByZXZpZXctc2hpZnQteCwgMHB4KSwgdmFyKC0tcHJldmlldy1zaGlmdC15LCAwcHgpKVxuICAgICAgICAgIHBlcnNwZWN0aXZlKDQ4cmVtKVxuICAgICAgICAgIHJvdGF0ZVgodmFyKC0tcHJldmlldy1yb3RhdGUteCwgNWRlZykpXG4gICAgICAgICAgcm90YXRlWSh2YXIoLS1wcmV2aWV3LXJvdGF0ZS15LCAtNWRlZykpO1xuICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gOTBtcyBlYXNlLW91dDtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1mbG9hdGluZy1jYXJkIHZhbC1jaHJpc3RpYW5pdHktY2FyZCB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgbWluLWhlaWdodDogMDtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1mdWxsLWNhcmQtaGVhZGVyIHtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBhdXRvIG1pbm1heCgwLCAxZnIpIGF1dG87XG4gICAgICAgIGdhcDogMC40MnJlbTtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1mdWxsLWNhcmQtaGVhZGVyIHN0cm9uZyB7XG4gICAgICAgIG1pbi13aWR0aDogMDtcbiAgICAgICAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gICAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICAgIG92ZXJmbG93LXdyYXA6IGFueXdoZXJlO1xuICAgICAgICB0ZXh0LW92ZXJmbG93OiBjbGlwO1xuICAgICAgICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xuICAgICAgICAtd2Via2l0LWxpbmUtY2xhbXA6IDI7XG4gICAgICAgIGZvbnQtc2l6ZTogY2xhbXAoMS4yNXJlbSwgNXZ3LCAxLjg1cmVtKTtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMDQ7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktZnVsbC1jYXJkLXR5cGUtaWNvbixcbiAgICAgIC5jaHJpc3RpYW5pdHktZnVsbC1jYXJkLWNvc3Qge1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBwbGFjZS1pdGVtczogY2VudGVyO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA5OTlweDtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1mdWxsLWNhcmQtdHlwZS1pY29uIHtcbiAgICAgICAgd2lkdGg6IDEuNnJlbTtcbiAgICAgICAgaGVpZ2h0OiAxLjZyZW07XG4gICAgICAgIGJhY2tncm91bmQ6XG4gICAgICAgICAgcmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCA1MCUgNTAlLCByZ2JhKDk1LCAxMTEsIDQyLCAwLjcyKSAwIDAuMjJyZW0sIHRyYW5zcGFyZW50IDAuMjRyZW0pLFxuICAgICAgICAgIHJnYmEoMzYsIDQ4LCA2OCwgMC4xKTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1mdWxsLWNhcmQtdHlwZS1pY29uIGltZyB7XG4gICAgICAgIHdpZHRoOiAxcmVtO1xuICAgICAgICBoZWlnaHQ6IDFyZW07XG4gICAgICAgIG9iamVjdC1maXQ6IGNvbnRhaW47XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktZnVsbC1jYXJkLWNvc3Qge1xuICAgICAgICBtaW4td2lkdGg6IDIuMXJlbTtcbiAgICAgICAgaGVpZ2h0OiAyLjFyZW07XG4gICAgICAgIHBhZGRpbmc6IDAgMC4zNnJlbTtcbiAgICAgICAgYmFja2dyb3VuZDogI2ZmZDkxYTtcbiAgICAgICAgY29sb3I6ICMyNDMwNDQ7XG4gICAgICAgIGZvbnQtc2l6ZTogMS4xcmVtO1xuICAgICAgICBmb250LXdlaWdodDogOTAwO1xuICAgICAgICBib3gtc2hhZG93OiBpbnNldCAwIC0wLjEycmVtIDAgcmdiYSg4MiwgNjQsIDI4LCAwLjE4KTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1mdWxsLWNhcmQtYXJ0IHtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBwbGFjZS1pdGVtczogY2VudGVyO1xuICAgICAgICBtaW4taGVpZ2h0OiA5cmVtO1xuICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAwLjQ4cmVtO1xuICAgICAgICBiYWNrZ3JvdW5kOlxuICAgICAgICAgIGxpbmVhci1ncmFkaWVudCgxMzVkZWcsIHJnYmEoOTUsIDExMSwgNDIsIDAuMiksIHJnYmEoMjE0LCAxNjIsIDI5LCAwLjE2KSksXG4gICAgICAgICAgcmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCA1MCUgMjUlLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNzYpLCB0cmFuc3BhcmVudCA0MiUpLFxuICAgICAgICAgICNkYmU3ZWY7XG4gICAgICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMCAwIDFweCByZ2JhKDM2LCA0OCwgNjgsIDAuMDgpO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWZ1bGwtY2FyZC1hcnQgaW1nIHtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgb2JqZWN0LWZpdDogY292ZXI7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktZnVsbC1jYXJkLWFydCA+IHNwYW4ge1xuICAgICAgICBtYXgtd2lkdGg6IDgwJTtcbiAgICAgICAgY29sb3I6IHJnYmEoMzYsIDQ4LCA2OCwgMC41OCk7XG4gICAgICAgIGZvbnQtc2l6ZTogY2xhbXAoMS4xcmVtLCA1dncsIDEuOHJlbSk7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA5MDA7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjA1O1xuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktZnVsbC1jYXJkLWFydCBzbWFsbCB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgcmlnaHQ6IDA7XG4gICAgICAgIGJvdHRvbTogMC41NXJlbTtcbiAgICAgICAgbWluLXdpZHRoOiA1cmVtO1xuICAgICAgICBwYWRkaW5nOiAwLjE2cmVtIDAuNDhyZW07XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4IDAgMCA5OTlweDtcbiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkpO1xuICAgICAgICBib3gtc2hhZG93OiAwIDAuM3JlbSAwLjhyZW0gcmdiYSgxNiwgNDIsIDY3LCAwLjEyKTtcbiAgICAgICAgY29sb3I6IHJnYmEoMzEsIDQxLCA1MSwgMC43NCk7XG4gICAgICAgIGZvbnQtc2l6ZTogMC42OHJlbTtcbiAgICAgICAgZm9udC1zdHlsZTogaXRhbGljO1xuICAgICAgICBmb250LXdlaWdodDogOTAwO1xuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktZnVsbC1jYXJkLXZlcnNlLFxuICAgICAgLmNocmlzdGlhbml0eS1mdWxsLWNhcmQtZWZmZWN0IHtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgZ2FwOiAwLjMycmVtO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWZ1bGwtY2FyZC12ZXJzZSBwLFxuICAgICAgLmNocmlzdGlhbml0eS1mdWxsLWNhcmQtZWZmZWN0IHAge1xuICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjI1O1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWZ1bGwtY2FyZC12ZXJzZSB7XG4gICAgICAgIGNvbG9yOiAjMTcxOTIzO1xuICAgICAgICBmb250LWZhbWlseTogR2VvcmdpYSwgJ1RpbWVzIE5ldyBSb21hbicsIHNlcmlmO1xuICAgICAgICBmb250LXNpemU6IGNsYW1wKDAuNzJyZW0sIDIuN3Z3LCAwLjg2cmVtKTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1mdWxsLWNhcmQtdmVyc2Ugc3Ryb25nIHtcbiAgICAgICAgZm9udC1mYW1pbHk6IGluaGVyaXQ7XG4gICAgICAgIGZvbnQtc2l6ZTogMC43OHJlbTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDkwMDtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1mdWxsLWNhcmQtZWZmZWN0IHtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgICAgICBhbGlnbi1jb250ZW50OiBzdGFydDtcbiAgICAgICAgbWluLWhlaWdodDogN3JlbTtcbiAgICAgICAgcGFkZGluZzogMC42cmVtIDAuN3JlbTtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMC40NXJlbTtcbiAgICAgICAgYmFja2dyb3VuZDpcbiAgICAgICAgICByYWRpYWwtZ3JhZGllbnQoY2lyY2xlIGF0IDUwJSA3MiUsIHJnYmEoMzYsIDQ4LCA2OCwgMC4wNyksIHRyYW5zcGFyZW50IDM0JSksXG4gICAgICAgICAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjg2KTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1mdWxsLWNhcmQtc3RhdHMge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBnYXA6IDFyZW07XG4gICAgICAgIG1pbi1oZWlnaHQ6IDEuMzVyZW07XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktZnVsbC1jYXJkLXN0YXRzIHN0cm9uZyB7XG4gICAgICAgIGZvbnQtc2l6ZTogMXJlbTtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDE7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktZnVsbC1jYXJkLXN0YXRzIC5jaHJpc3RpYW5pdHktZnVsbC1jYXJkLXBpcHMge1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZ3JpZDtcbiAgICAgICAgZ3JpZC1hdXRvLWZsb3c6IGNvbHVtbjtcbiAgICAgICAgZ2FwOiAwLjJyZW07XG4gICAgICAgIGp1c3RpZnktc2VsZjogc3RhcnQ7XG4gICAgICAgIHBhZGRpbmc6IDA7XG4gICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWZ1bGwtY2FyZC1lZmZlY3QgPiBkaXY6bGFzdC1vZi10eXBlIHtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgZ2FwOiAwLjEycmVtO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWZ1bGwtY2FyZC1lZmZlY3QgPiBkaXY6bGFzdC1vZi10eXBlIHN0cm9uZyB7XG4gICAgICAgIGZvbnQtc2l6ZTogMC44MnJlbTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1mdWxsLWNhcmQtZWZmZWN0IHAge1xuICAgICAgICBmb250LXNpemU6IGNsYW1wKDAuNzhyZW0sIDIuOXZ3LCAwLjkycmVtKTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1mdWxsLWNhcmQtcmFyaXR5IHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB0b3A6IDAuNjJyZW07XG4gICAgICAgIHJpZ2h0OiAwLjYycmVtO1xuICAgICAgICB3aWR0aDogMC40NnJlbTtcbiAgICAgICAgaGVpZ2h0OiAwLjQ2cmVtO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAwLjEycmVtO1xuICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZyk7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktZnVsbC1jYXJkLXJhcml0eS5pcy1ub3JtYWwge1xuICAgICAgICBiYWNrZ3JvdW5kOiAjZDFkNWRiO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWZ1bGwtY2FyZC1yYXJpdHkuaXMtdW5jb21tb24ge1xuICAgICAgICBiYWNrZ3JvdW5kOiAjMjJjNTVlO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWZ1bGwtY2FyZC1yYXJpdHkuaXMtcmFyZSB7XG4gICAgICAgIGJhY2tncm91bmQ6ICMzYjgyZjY7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktZnVsbC1jYXJkLXJhcml0eS5pcy1sZWdlbmRhcnkge1xuICAgICAgICBiYWNrZ3JvdW5kOiAjZWFiMzA4O1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWZ1bGwtY2FyZC1mb290ZXIge1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IGF1dG8gYXV0byBtaW5tYXgoMCwgMWZyKSBhdXRvO1xuICAgICAgICBnYXA6IDAuMzRyZW07XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGNvbG9yOiByZ2JhKDMxLCA0MSwgNTEsIDAuNjgpO1xuICAgICAgICBmb250LXNpemU6IDAuNThyZW07XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxO1xuICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWZ1bGwtY2FyZC1mb290ZXIgc3BhbiB7XG4gICAgICAgIG1pbi13aWR0aDogMDtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktZmxvYXRpbmctY2FyZC1jbG9zZSB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgdG9wOiAwO1xuICAgICAgICByaWdodDogMC4xNXJlbTtcbiAgICAgICAgei1pbmRleDogNjtcbiAgICAgICAgbWluLWhlaWdodDogMnJlbTtcbiAgICAgICAgcGFkZGluZzogMCAwLjZyZW07XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMzYsIDQ4LCA2OCwgMC4xNCk7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4O1xuICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOSk7XG4gICAgICAgIGNvbG9yOiByZ2JhKDMxLCA0MSwgNTEsIDAuNzgpO1xuICAgICAgICBmb250OiBpbmhlcml0O1xuICAgICAgICBmb250LXNpemU6IDAuNzZyZW07XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA4MDA7XG4gICAgICAgIGJveC1zaGFkb3c6IDAgMC40NXJlbSAxcmVtIHJnYmEoMTYsIDQyLCA2NywgMC4xKTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1wcmV2aWV3LW5hdiB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgdG9wOiA1MCU7XG4gICAgICAgIHotaW5kZXg6IDY7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIHBsYWNlLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIHdpZHRoOiAyLjM1cmVtO1xuICAgICAgICBoZWlnaHQ6IDIuMzVyZW07XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMzcsIDk5LCAyMzUsIDAuMjYpO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA5OTlweDtcbiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkyKTtcbiAgICAgICAgY29sb3I6IHZhcigtLWNocmlzdGlhbml0eS10aGVtZS1mb2N1cyk7XG4gICAgICAgIGZvbnQ6IGluaGVyaXQ7XG4gICAgICAgIGZvbnQtc2l6ZTogMS4xcmVtO1xuICAgICAgICBmb250LXdlaWdodDogMTAwMDtcbiAgICAgICAgYm94LXNoYWRvdzpcbiAgICAgICAgICAwIDAuNzVyZW0gMS40cmVtIHJnYmEoMTYsIDQyLCA2NywgMC4xNCksXG4gICAgICAgICAgaW5zZXQgMCAwIDAgMXB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC40NCk7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1wcmV2aWV3LW5hdi0tcHJldmlvdXMge1xuICAgICAgICBsZWZ0OiAtMC42NXJlbTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1wcmV2aWV3LW5hdi0tbmV4dCB7XG4gICAgICAgIHJpZ2h0OiAtMC42NXJlbTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1wcmV2aWV3LWJhY2tkcm9wLFxuICAgICAgLmNocmlzdGlhbml0eS1oaXN0b3J5LWJhY2tkcm9wLFxuICAgICAgLmNocmlzdGlhbml0eS1pbmZvLWJhY2tkcm9wIHtcbiAgICAgICAgcG9zaXRpb246IGZpeGVkO1xuICAgICAgICBpbnNldDogMDtcbiAgICAgICAgYm9yZGVyOiAwO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAwO1xuICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDE1LCAyMywgNDIsIDAuNDYpO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXByZXZpZXctYmFja2Ryb3Age1xuICAgICAgICB6LWluZGV4OiAxMzE7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktaW5mby1iYWNrZHJvcCB7XG4gICAgICAgIHotaW5kZXg6IDUwO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWluZm8tcGFuZWwge1xuICAgICAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgICAgIHRvcDogNTAlO1xuICAgICAgICBsZWZ0OiA1MCU7XG4gICAgICAgIHotaW5kZXg6IDUxO1xuICAgICAgICB3aWR0aDogbWluKDMxcmVtLCBjYWxjKDEwMHZ3IC0gMS4yNXJlbSkpO1xuICAgICAgICBtYXgtaGVpZ2h0OiBtaW4oMzRyZW0sIGNhbGMoMTAwdmggLSAycmVtKSk7XG4gICAgICAgIHBhZGRpbmctdG9wOiAyLjM1cmVtO1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1pbmZvLWNsb3NlIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICB0b3A6IDA7XG4gICAgICAgIHJpZ2h0OiAwLjE1cmVtO1xuICAgICAgICB6LWluZGV4OiAyO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXJ1bGUtbm90ZSB7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogYXV0byBtaW5tYXgoMCwgMWZyKTtcbiAgICAgICAgZ2FwOiAwLjg1cmVtO1xuICAgICAgICBtYXgtaGVpZ2h0OiBpbmhlcml0O1xuICAgICAgICBwYWRkaW5nOiAxcmVtO1xuICAgICAgICBvdmVyZmxvdy15OiBhdXRvO1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDM2LCA0OCwgNjgsIDAuMTQpO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAwLjlyZW07XG4gICAgICAgIGJhY2tncm91bmQ6XG4gICAgICAgICAgbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjk3KSwgcmdiYSgyNDgsIDI1MCwgMjUyLCAwLjk3KSksXG4gICAgICAgICAgcmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCA4JSAwJSwgcmdiYSgzNywgOTksIDIzNSwgMC4xKSwgdHJhbnNwYXJlbnQgMzglKTtcbiAgICAgICAgYm94LXNoYWRvdzpcbiAgICAgICAgICAwIDEuMnJlbSAyLjZyZW0gcmdiYSgxNiwgNDIsIDY3LCAwLjI0KSxcbiAgICAgICAgICBpbnNldCAwIDAgMCAwLjI1cmVtIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41Mik7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktcnVsZS1ub3RlLWljb24ge1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBwbGFjZS1pdGVtczogY2VudGVyO1xuICAgICAgICB3aWR0aDogMi4xcmVtO1xuICAgICAgICBoZWlnaHQ6IDIuMXJlbTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogOTk5cHg7XG4gICAgICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jaHJpc3RpYW5pdHktdGhlbWUtZm9jdXMpIDEyJSwgI2ZmZmZmZik7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1jaHJpc3RpYW5pdHktdGhlbWUtZm9jdXMpO1xuICAgICAgICBmb250LXNpemU6IDFyZW07XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA5MDA7XG4gICAgICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMCAwIDFweCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tY2hyaXN0aWFuaXR5LXRoZW1lLWZvY3VzKSAyNCUsIHRyYW5zcGFyZW50KTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1ydWxlLW5vdGUgc21hbGwsXG4gICAgICAuY2hyaXN0aWFuaXR5LXJ1bGUtbm90ZSBzdHJvbmcsXG4gICAgICAuY2hyaXN0aWFuaXR5LXJ1bGUtbm90ZSBwLFxuICAgICAgLmNocmlzdGlhbml0eS1ydWxlLW5vdGUgaDIge1xuICAgICAgICBtYXJnaW46IDA7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktcnVsZS1ub3RlIHNtYWxsIHtcbiAgICAgICAgY29sb3I6IHJnYmEoMzEsIDQxLCA1MSwgMC42Mik7XG4gICAgICAgIGZvbnQtc2l6ZTogMC43OHJlbTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDgwMDtcbiAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1ydWxlLW5vdGUgaDIge1xuICAgICAgICBtYXJnaW4tdG9wOiAwLjE4cmVtO1xuICAgICAgICBmb250LXNpemU6IGNsYW1wKDEuNXJlbSwgN3Z3LCAyLjJyZW0pO1xuICAgICAgICBsaW5lLWhlaWdodDogMS4wNTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1ydWxlLW5vdGUgc3Ryb25nIHtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgICAgIHdpZHRoOiBmaXQtY29udGVudDtcbiAgICAgICAgbWFyZ2luLXRvcDogMC41NXJlbTtcbiAgICAgICAgcGFkZGluZzogMC4yMnJlbSAwLjU1cmVtO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA5OTlweDtcbiAgICAgICAgYmFja2dyb3VuZDogI2VkZjJmNztcbiAgICAgICAgZm9udC1zaXplOiAwLjkycmVtO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXJ1bGUtbm90ZSBwIHtcbiAgICAgICAgbWFyZ2luLXRvcDogMC43NXJlbTtcbiAgICAgICAgY29sb3I6IHJnYmEoMzEsIDQxLCA1MSwgMC43OCk7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjQ1O1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LXJ1bGUtbm90ZSB1bCB7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIGdhcDogMC40NXJlbTtcbiAgICAgICAgbWFyZ2luOiAwLjhyZW0gMCAwO1xuICAgICAgICBwYWRkaW5nLWxlZnQ6IDEuMDVyZW07XG4gICAgICAgIGNvbG9yOiByZ2JhKDMxLCA0MSwgNTEsIDAuNzgpO1xuICAgICAgICBsaW5lLWhlaWdodDogMS4zNTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1mbG9hdGluZy1jYXJkID4gc21hbGwsXG4gICAgICAuY2hyaXN0aWFuaXR5LWZsb2F0aW5nLWNhcmQgPiBzcGFuIHtcbiAgICAgICAgY29sb3I6IHJnYmEoMzEsIDQxLCA1MSwgMC42NCk7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktZmxvYXRpbmctY2FyZCA+IHN0cm9uZyB7XG4gICAgICAgIGZvbnQtc2l6ZTogY2xhbXAoMS41NXJlbSwgOHZ3LCAyLjM1cmVtKTtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMDU7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktZmxvYXRpbmctY2FyZCA+IHAge1xuICAgICAgICBtYXJnaW46IDA7XG4gICAgICAgIGFsaWduLXNlbGY6IGVuZDtcbiAgICAgICAgZm9udC1zaXplOiAwLjk1cmVtO1xuICAgICAgICBsaW5lLWhlaWdodDogMS4zNTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1wcmV2aWV3LXJ1bGUtbm90ZSB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgei1pbmRleDogNDtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBhdXRvIG1pbm1heCgwLCAxZnIpO1xuICAgICAgICBnYXA6IDAuNjVyZW07XG4gICAgICAgIGFsaWduLWl0ZW1zOiBzdGFydDtcbiAgICAgICAgcGFkZGluZzogMC43NXJlbSAwLjg1cmVtO1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDM2LCA0OCwgNjgsIDAuMTQpO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAwLjc1cmVtO1xuICAgICAgICBiYWNrZ3JvdW5kOlxuICAgICAgICAgIGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45NiksIHJnYmEoMjQ4LCAyNTAsIDI1MiwgMC45NikpLFxuICAgICAgICAgIHJhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQgOCUgMCUsIHJnYmEoMzcsIDk5LCAyMzUsIDAuMDgpLCB0cmFuc3BhcmVudCA0NCUpO1xuICAgICAgICBib3gtc2hhZG93OiAwIDAuNzVyZW0gMS42cmVtIHJnYmEoMTYsIDQyLCA2NywgMC4xMik7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktcHJldmlldy1ydWxlLW5vdGUgc21hbGwsXG4gICAgICAuY2hyaXN0aWFuaXR5LXByZXZpZXctcnVsZS1ub3RlIHN0cm9uZyxcbiAgICAgIC5jaHJpc3RpYW5pdHktcHJldmlldy1ydWxlLW5vdGUgcCB7XG4gICAgICAgIG1hcmdpbjogMDtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1wcmV2aWV3LXJ1bGUtbm90ZSBzbWFsbCB7XG4gICAgICAgIGNvbG9yOiByZ2JhKDMxLCA0MSwgNTEsIDAuNTgpO1xuICAgICAgICBmb250LXNpemU6IDAuNjhyZW07XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA4MDA7XG4gICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktcHJldmlldy1ydWxlLW5vdGUgc3Ryb25nIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIG1hcmdpbi10b3A6IDAuMDhyZW07XG4gICAgICAgIGZvbnQtc2l6ZTogMC45MnJlbTtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1wcmV2aWV3LXJ1bGUtbm90ZSBwIHtcbiAgICAgICAgbWFyZ2luLXRvcDogMC4yMnJlbTtcbiAgICAgICAgY29sb3I6IHJnYmEoMzEsIDQxLCA1MSwgMC43NCk7XG4gICAgICAgIGZvbnQtc2l6ZTogMC44MnJlbTtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMzI7XG4gICAgICB9XG5cbiAgICAgIEBtZWRpYSAobWluLXdpZHRoOiA1MnJlbSkge1xuICAgICAgICAuY2hyaXN0aWFuaXR5LWZsb2F0aW5nLWNhcmQtc2hlbGwge1xuICAgICAgICAgIHdpZHRoOiBtaW4oMjJyZW0sIGNhbGMoNjdkdmggLSA1Ljg1cmVtKSwgY2FsYygxMDB2dyAtIDNyZW0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5jaHJpc3RpYW5pdHktZmxvYXRpbmctY2FyZCB7XG4gICAgICAgICAgbWluLWhlaWdodDogMDtcbiAgICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA1MS45OXJlbSkge1xuICAgICAgICAuY2hyaXN0aWFuaXR5LWZsb2F0aW5nLWNhcmQtc2hlbGwge1xuICAgICAgICAgIHRvcDogY2FsYyg1MCUgKyAwLjdyZW0pO1xuICAgICAgICAgIGdhcDogMC40NXJlbTtcbiAgICAgICAgICBtYXgtaGVpZ2h0OiBjYWxjKDEwMGR2aCAtIDMuMjVyZW0pO1xuICAgICAgICAgIHBhZGRpbmctdG9wOiAyLjE1cmVtO1xuICAgICAgICB9XG5cbiAgICAgICAgLmNocmlzdGlhbml0eS1mbG9hdGluZy1jYXJkLWNsb3NlIHtcbiAgICAgICAgICBtaW4taGVpZ2h0OiAxLjlyZW07XG4gICAgICAgICAgcGFkZGluZzogMCAwLjU4cmVtO1xuICAgICAgICAgIGZvbnQtc2l6ZTogMC43MnJlbTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5jaHJpc3RpYW5pdHktcHJldmlldy1uYXYge1xuICAgICAgICAgIHRvcDogY2FsYyg1MCUgLSAwLjg1cmVtKTtcbiAgICAgICAgICB3aWR0aDogMnJlbTtcbiAgICAgICAgICBoZWlnaHQ6IDJyZW07XG4gICAgICAgIH1cblxuICAgICAgICAuY2hyaXN0aWFuaXR5LXByZXZpZXctbmF2LS1wcmV2aW91cyB7XG4gICAgICAgICAgbGVmdDogLTAuMzVyZW07XG4gICAgICAgIH1cblxuICAgICAgICAuY2hyaXN0aWFuaXR5LXByZXZpZXctbmF2LS1uZXh0IHtcbiAgICAgICAgICByaWdodDogLTAuMzVyZW07XG4gICAgICAgIH1cblxuICAgICAgICAuY2hyaXN0aWFuaXR5LXByZXZpZXctcnVsZS1ub3RlIHtcbiAgICAgICAgICBtYXgtaGVpZ2h0OiBtaW4oOC4yNXJlbSwgMjRkdmgpO1xuICAgICAgICAgIHBhZGRpbmc6IDAuNjJyZW0gMC42OHJlbTtcbiAgICAgICAgICBvdmVyZmxvdy15OiBhdXRvO1xuICAgICAgICAgIHNjcm9sbGJhci1jb2xvcjogcmdiYSgzNiwgNDgsIDY4LCAwLjI4KSB0cmFuc3BhcmVudDtcbiAgICAgICAgICBzY3JvbGxiYXItZ3V0dGVyOiBzdGFibGU7XG4gICAgICAgIH1cblxuICAgICAgICAuY2hyaXN0aWFuaXR5LXByZXZpZXctcnVsZS1ub3RlIC5jaHJpc3RpYW5pdHktcnVsZS1ub3RlLWljb24ge1xuICAgICAgICAgIHdpZHRoOiAxLjhyZW07XG4gICAgICAgICAgaGVpZ2h0OiAxLjhyZW07XG4gICAgICAgICAgZm9udC1zaXplOiAwLjlyZW07XG4gICAgICAgIH1cblxuICAgICAgICAuY2hyaXN0aWFuaXR5LXByZXZpZXctcnVsZS1ub3RlIHN0cm9uZyB7XG4gICAgICAgICAgZm9udC1zaXplOiAwLjg2cmVtO1xuICAgICAgICB9XG5cbiAgICAgICAgLmNocmlzdGlhbml0eS1wcmV2aWV3LXJ1bGUtbm90ZSBwIHtcbiAgICAgICAgICBmb250LXNpemU6IDAuNzhyZW07XG4gICAgICAgICAgbGluZS1oZWlnaHQ6IDEuMjg7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1oaXN0b3J5LWJhY2tkcm9wIHtcbiAgICAgICAgei1pbmRleDogNDA7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktaGlzdG9yeS1kcmF3ZXIge1xuICAgICAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgICAgIHJpZ2h0OiBhdXRvO1xuICAgICAgICBib3R0b206IG1heCgwLjVyZW0sIGVudihzYWZlLWFyZWEtaW5zZXQtYm90dG9tKSk7XG4gICAgICAgIGxlZnQ6IDUwJTtcbiAgICAgICAgei1pbmRleDogNDE7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIGdyaWQtdGVtcGxhdGUtcm93czogYXV0byBtaW5tYXgoMCwgMWZyKTtcbiAgICAgICAgZ2FwOiAwLjc1cmVtO1xuICAgICAgICB3aWR0aDogbWluKGNhbGMoMTAwdncgLSAxcmVtKSwgNDRyZW0pO1xuICAgICAgICBtaW4taGVpZ2h0OiBtaW4oMThyZW0sIGNhbGMoMTAwZHZoIC0gMXJlbSkpO1xuICAgICAgICBtYXgtaGVpZ2h0OiBtaW4oMzJyZW0sIGNhbGMoMTAwZHZoIC0gMnJlbSkpO1xuICAgICAgICBwYWRkaW5nOiAwLjhyZW07XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMzYsIDQ4LCA2OCwgMC4xNik7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDAuNzVyZW07XG4gICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45OCk7XG4gICAgICAgIGJveC1zaGFkb3c6IDAgMS41cmVtIDRyZW0gcmdiYSgxNiwgNDIsIDY3LCAwLjI4KTtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWhpc3RvcnktZHJhd2VyIGhlYWRlciB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICAgICAgZ2FwOiAwLjc1cmVtO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWhpc3RvcnktZHJhd2VyIGgyLFxuICAgICAgLmNocmlzdGlhbml0eS1oaXN0b3J5LWRyYXdlciBwIHtcbiAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWhpc3RvcnktZHJhd2VyIGhlYWRlciBzcGFuIHtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgcGxhY2UtaXRlbXM6IGNlbnRlcjtcbiAgICAgICAgbWluLXdpZHRoOiAxLjg1cmVtO1xuICAgICAgICBoZWlnaHQ6IDEuODVyZW07XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4O1xuICAgICAgICBiYWNrZ3JvdW5kOiAjZWRmMmY3O1xuICAgICAgICBmb250LXdlaWdodDogODAwO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWRpYWxvZy1hY3Rpb25zIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgZ2FwOiAwLjQ1cmVtO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWRpYWxvZy1jbG9zZSB7XG4gICAgICAgIG1pbi1oZWlnaHQ6IDEuODVyZW07XG4gICAgICAgIHBhZGRpbmc6IDAgMC42MnJlbTtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgzNiwgNDgsIDY4LCAwLjE0KTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogOTk5cHg7XG4gICAgICAgIGJhY2tncm91bmQ6ICNmZmZmZmY7XG4gICAgICAgIGNvbG9yOiByZ2JhKDMxLCA0MSwgNTEsIDAuNzgpO1xuICAgICAgICBmb250OiBpbmhlcml0O1xuICAgICAgICBmb250LXNpemU6IDAuNzZyZW07XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA4MDA7XG4gICAgICAgIGJveC1zaGFkb3c6IDAgMC4zNXJlbSAwLjhyZW0gcmdiYSgxNiwgNDIsIDY3LCAwLjA4KTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1oaXN0b3J5LWdyaWQge1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdChhdXRvLWZpbGwsIG1pbm1heCg1LjRyZW0sIDFmcikpO1xuICAgICAgICBnYXA6IDAuNTVyZW07XG4gICAgICAgIG1pbi1oZWlnaHQ6IDA7XG4gICAgICAgIG92ZXJmbG93LXk6IHNjcm9sbDtcbiAgICAgICAgc2Nyb2xsYmFyLWNvbG9yOiByZ2JhKDM2LCA0OCwgNjgsIDAuMzIpIHJnYmEoMjI2LCAyMzIsIDI0MCwgMC43Mik7XG4gICAgICAgIHNjcm9sbGJhci1ndXR0ZXI6IHN0YWJsZTtcbiAgICAgICAgcGFkZGluZzogMC4xcmVtIDAuMXJlbSAwLjI1cmVtO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWhpc3RvcnktZ3JpZDo6LXdlYmtpdC1zY3JvbGxiYXIsXG4gICAgICAuY2hyaXN0aWFuaXR5LW9mZmVyaW5nLWxpc3Q6Oi13ZWJraXQtc2Nyb2xsYmFyIHtcbiAgICAgICAgd2lkdGg6IDAuNjVyZW07XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktaGlzdG9yeS1ncmlkOjotd2Via2l0LXNjcm9sbGJhci10cmFjayxcbiAgICAgIC5jaHJpc3RpYW5pdHktb2ZmZXJpbmctbGlzdDo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sge1xuICAgICAgICBib3JkZXItcmFkaXVzOiA5OTlweDtcbiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyMjYsIDIzMiwgMjQwLCAwLjcyKTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1oaXN0b3J5LWdyaWQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iLFxuICAgICAgLmNocmlzdGlhbml0eS1vZmZlcmluZy1saXN0Ojotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7XG4gICAgICAgIGJvcmRlcjogMC4xNHJlbSBzb2xpZCByZ2JhKDIyNiwgMjMyLCAyNDAsIDAuNzIpO1xuICAgICAgICBib3JkZXItcmFkaXVzOiA5OTlweDtcbiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgzNiwgNDgsIDY4LCAwLjMyKTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1vZmZlcmluZ3MtZHJhd2VyIHtcbiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiBhdXRvIGF1dG8gbWlubWF4KDAsIDFmcik7XG4gICAgICAgIHdpZHRoOiBtaW4oY2FsYygxMDB2dyAtIDFyZW0pLCA0OHJlbSk7XG4gICAgICAgIG1pbi1oZWlnaHQ6IG1pbigyMHJlbSwgY2FsYygxMDBkdmggLSAxcmVtKSk7XG4gICAgICAgIG1heC1oZWlnaHQ6IG1pbigzNHJlbSwgY2FsYygxMDBkdmggLSAycmVtKSk7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktb2ZmZXJpbmdzLW5vdGUge1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IGF1dG8gbWlubWF4KDAsIDFmcik7XG4gICAgICAgIGdhcDogMC42NXJlbTtcbiAgICAgICAgYWxpZ24taXRlbXM6IHN0YXJ0O1xuICAgICAgICBwYWRkaW5nOiAwLjcycmVtIDAuOHJlbTtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgzNiwgNDgsIDY4LCAwLjEyKTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMC43cmVtO1xuICAgICAgICBiYWNrZ3JvdW5kOlxuICAgICAgICAgIGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45NiksIHJnYmEoMjQ4LCAyNTAsIDI1MiwgMC45NikpLFxuICAgICAgICAgIHJhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQgOCUgMCUsIHJnYmEoMjE0LCAxNjIsIDI5LCAwLjEyKSwgdHJhbnNwYXJlbnQgNDIlKTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1vZmZlcmluZ3Mtbm90ZSBwIHtcbiAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgICBjb2xvcjogcmdiYSgzMSwgNDEsIDUxLCAwLjc2KTtcbiAgICAgICAgZm9udC1zaXplOiAwLjg2cmVtO1xuICAgICAgICBsaW5lLWhlaWdodDogMS4zNTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1vZmZlcmluZy1saXN0IHtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgZ2FwOiAwLjZyZW07XG4gICAgICAgIG1pbi1oZWlnaHQ6IDA7XG4gICAgICAgIG92ZXJmbG93LXk6IHNjcm9sbDtcbiAgICAgICAgc2Nyb2xsYmFyLWNvbG9yOiByZ2JhKDM2LCA0OCwgNjgsIDAuMzIpIHJnYmEoMjI2LCAyMzIsIDI0MCwgMC43Mik7XG4gICAgICAgIHNjcm9sbGJhci1ndXR0ZXI6IHN0YWJsZTtcbiAgICAgICAgcGFkZGluZzogMC4xcmVtO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LW9mZmVyaW5nLXJvdyB7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogbWlubWF4KDUuNHJlbSwgNi41cmVtKSBtaW5tYXgoMCwgMWZyKTtcbiAgICAgICAgZ2FwOiAwLjY1cmVtO1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBwYWRkaW5nOiAwLjQ1cmVtO1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDM2LCA0OCwgNjgsIDAuMTIpO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAwLjY1cmVtO1xuICAgICAgICBiYWNrZ3JvdW5kOiAjZmZmZmZmO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LW9mZmVyaW5nLXJvdy5pcy1leGhhdXN0ZWQge1xuICAgICAgICBvcGFjaXR5OiAwLjY4O1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWdhbGxlcnktZHJhd2VyIHtcbiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiBhdXRvIGF1dG8gYXV0byBtaW5tYXgoMCwgMWZyKTtcbiAgICAgICAgd2lkdGg6IG1pbihjYWxjKDEwMHZ3IC0gMXJlbSksIDUwcmVtKTtcbiAgICAgICAgbWluLWhlaWdodDogbWluKDIycmVtLCBjYWxjKDEwMGR2aCAtIDFyZW0pKTtcbiAgICAgICAgbWF4LWhlaWdodDogbWluKDM2cmVtLCBjYWxjKDEwMGR2aCAtIDJyZW0pKTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1nYWxsZXJ5LWRyYXdlciBoZWFkZXIgPiBkaXY6Zmlyc3QtY2hpbGQge1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBnYXA6IDAuMTVyZW07XG4gICAgICAgIG1pbi13aWR0aDogMDtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1nYWxsZXJ5LWRyYXdlciBoZWFkZXIgcCB7XG4gICAgICAgIGNvbG9yOiByZ2JhKDMxLCA0MSwgNTEsIDAuNTgpO1xuICAgICAgICBmb250LXNpemU6IDAuODJyZW07XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktZ2FsbGVyeS1jb250cm9scyB7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogbWlubWF4KDAsIDFmcikgbWlubWF4KDguNXJlbSwgMTNyZW0pO1xuICAgICAgICBnYXA6IDAuNjVyZW07XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktZ2FsbGVyeS1jb250cm9scyBsYWJlbCB7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIGdhcDogMC4yNXJlbTtcbiAgICAgICAgbWluLXdpZHRoOiAwO1xuICAgICAgICBjb2xvcjogcmdiYSgzMSwgNDEsIDUxLCAwLjYyKTtcbiAgICAgICAgZm9udC1zaXplOiAwLjc0cmVtO1xuICAgICAgICBmb250LXdlaWdodDogODAwO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWdhbGxlcnktY29udHJvbHMgaW5wdXQsXG4gICAgICAuY2hyaXN0aWFuaXR5LWdhbGxlcnktY29udHJvbHMgc2VsZWN0IHtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIG1pbi13aWR0aDogMDtcbiAgICAgICAgbWluLWhlaWdodDogMi4zNXJlbTtcbiAgICAgICAgcGFkZGluZzogMCAwLjc1cmVtO1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDM2LCA0OCwgNjgsIDAuMTYpO1xuICAgICAgICBib3JkZXItcmFkaXVzOiAwLjY1cmVtO1xuICAgICAgICBiYWNrZ3JvdW5kOiAjZmZmZmZmO1xuICAgICAgICBjb2xvcjogdmFyKC0tY2hyaXN0aWFuaXR5LXRoZW1lLWluayk7XG4gICAgICAgIGZvbnQ6IGluaGVyaXQ7XG4gICAgICAgIGZvbnQtc2l6ZTogMC45cmVtO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWdhbGxlcnktZWRpdGlvbi1zdHJpcCB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGdhcDogMC40NXJlbTtcbiAgICAgICAgb3ZlcmZsb3cteDogYXV0bztcbiAgICAgICAgcGFkZGluZy1ib3R0b206IDAuMXJlbTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1nYWxsZXJ5LWVkaXRpb24tc3RyaXAgYnV0dG9uIHtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGdhcDogMC40NXJlbTtcbiAgICAgICAgbWluLWhlaWdodDogMi4zNXJlbTtcbiAgICAgICAgcGFkZGluZzogMCAwLjc1cmVtO1xuICAgICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDIxNCwgMTYyLCAyOSwgMC4zOCk7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4O1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jaHJpc3RpYW5pdHktdGhlbWUtcGFyY2htZW50KTtcbiAgICAgICAgY29sb3I6IHZhcigtLWNocmlzdGlhbml0eS10aGVtZS1pbmspO1xuICAgICAgICBmb250OiBpbmhlcml0O1xuICAgICAgICBmb250LXNpemU6IDAuODJyZW07XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA4MDA7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktZ2FsbGVyeS1lZGl0aW9uLXN0cmlwIGltZyB7XG4gICAgICAgIHdpZHRoOiAxLjJyZW07XG4gICAgICAgIGhlaWdodDogMS4ycmVtO1xuICAgICAgICBvYmplY3QtZml0OiBjb250YWluO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWdhbGxlcnktZ3JpZCB7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZmlsbCwgbWlubWF4KDUuOHJlbSwgNi44cmVtKSk7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgICBhbGlnbi1jb250ZW50OiBzdGFydDtcbiAgICAgICAgZ2FwOiAwLjY1cmVtO1xuICAgICAgICBtaW4taGVpZ2h0OiAwO1xuICAgICAgICBvdmVyZmxvdy15OiBzY3JvbGw7XG4gICAgICAgIHNjcm9sbGJhci1jb2xvcjogcmdiYSgzNiwgNDgsIDY4LCAwLjMyKSByZ2JhKDIyNiwgMjMyLCAyNDAsIDAuNzIpO1xuICAgICAgICBzY3JvbGxiYXItZ3V0dGVyOiBzdGFibGU7XG4gICAgICAgIHBhZGRpbmc6IDAuMXJlbSAwLjFyZW0gMC4zNXJlbTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1nYWxsZXJ5LWdyaWQ6Oi13ZWJraXQtc2Nyb2xsYmFyIHtcbiAgICAgICAgd2lkdGg6IDAuNjVyZW07XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktZ2FsbGVyeS1ncmlkOjotd2Via2l0LXNjcm9sbGJhci10cmFjayB7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4O1xuICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDIyNiwgMjMyLCAyNDAsIDAuNzIpO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LWdhbGxlcnktZ3JpZDo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIge1xuICAgICAgICBib3JkZXI6IDAuMTRyZW0gc29saWQgcmdiYSgyMjYsIDIzMiwgMjQwLCAwLjcyKTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogOTk5cHg7XG4gICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMzYsIDQ4LCA2OCwgMC4zMik7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktb2ZmZXJpbmctY2FyZCB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiBhdXRvIG1pbm1heCgwLCAxZnIpIGF1dG87XG4gICAgICAgIGFsaWduLWNvbnRlbnQ6IHN0cmV0Y2g7XG4gICAgICAgIGdhcDogMC4yNnJlbTtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIG1pbi1oZWlnaHQ6IDcuN3JlbTtcbiAgICAgICAgcGFkZGluZzogMC41OHJlbTtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICAgICAgYmFja2dyb3VuZDpcbiAgICAgICAgICBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOTYpLCByZ2JhKDI0OCwgMjUwLCAyNTIsIDAuOTYpKSxcbiAgICAgICAgICByYWRpYWwtZ3JhZGllbnQoY2lyY2xlIGF0IDc4JSAxNCUsIHJnYmEoMjUwLCAyMDQsIDIxLCAwLjc4KSAwIDAuNDJyZW0sIHRyYW5zcGFyZW50IDAuNDRyZW0pO1xuICAgICAgICBib3gtc2hhZG93OiAwIDAuNDVyZW0gMXJlbSByZ2JhKDE2LCA0MiwgNjcsIDAuMSk7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktb2ZmZXJpbmctY2FyZCBzbWFsbCB7XG4gICAgICAgIG1pbi13aWR0aDogMDtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgY29sb3I6IHJnYmEoMzEsIDQxLCA1MSwgMC41OCk7XG4gICAgICAgIGZvbnQtc2l6ZTogMC42MnJlbTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDgwMDtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDE7XG4gICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LW9mZmVyaW5nLWNhcmQgc3Ryb25nIHtcbiAgICAgICAgZGlzcGxheTogLXdlYmtpdC1ib3g7XG4gICAgICAgIGFsaWduLXNlbGY6IHN0YXJ0O1xuICAgICAgICBtaW4td2lkdGg6IDA7XG4gICAgICAgIG1hcmdpbi10b3A6IDAuMXJlbTtcbiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgICAgb3ZlcmZsb3ctd3JhcDogYW55d2hlcmU7XG4gICAgICAgIGZvbnQtc2l6ZTogMC44OHJlbTtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMDU7XG4gICAgICAgIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7XG4gICAgICAgIC13ZWJraXQtbGluZS1jbGFtcDogMztcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1vZmZlcmluZy1jYXJkIHNwYW4ge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHJpZ2h0OiAwLjQycmVtO1xuICAgICAgICBib3R0b206IDAuNDJyZW07XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgICAgIHBsYWNlLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIG1pbi13aWR0aDogMS41NXJlbTtcbiAgICAgICAgaGVpZ2h0OiAxLjU1cmVtO1xuICAgICAgICBwYWRkaW5nOiAwIDAuMjhyZW07XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4O1xuICAgICAgICBiYWNrZ3JvdW5kOiAjZWRmMmY3O1xuICAgICAgICBmb250LXNpemU6IDAuODJyZW07XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA5MDA7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktb2ZmZXJpbmctY2FyZCBlbSB7XG4gICAgICAgIGFsaWduLXNlbGY6IGVuZDtcbiAgICAgICAgbWF4LXdpZHRoOiBjYWxjKDEwMCUgLSAxLjlyZW0pO1xuICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgICBjb2xvcjogcmdiYSgzMSwgNDEsIDUxLCAwLjYyKTtcbiAgICAgICAgZm9udC1zaXplOiAwLjY0cmVtO1xuICAgICAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA4MDA7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjA1O1xuICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1vZmZlcmluZy1jYXJkIHAsXG4gICAgICAuY2hyaXN0aWFuaXR5LW9mZmVyaW5nLXJvdyBwIHtcbiAgICAgICAgbWFyZ2luOiAwO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LW9mZmVyaW5nLWNhcmQgcCB7XG4gICAgICAgIGFsaWduLXNlbGY6IGVuZDtcbiAgICAgICAgY29sb3I6IHJnYmEoMzEsIDQxLCA1MSwgMC42NCk7XG4gICAgICAgIGZvbnQtc2l6ZTogMC43MnJlbTtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMjtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1vZmZlcmluZy1yb3cgPiBkaXYge1xuICAgICAgICBkaXNwbGF5OiBncmlkO1xuICAgICAgICBnYXA6IDAuMzVyZW07XG4gICAgICAgIGFsaWduLWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgICAgbWluLXdpZHRoOiAwO1xuICAgICAgfVxuXG4gICAgICAuY2hyaXN0aWFuaXR5LW9mZmVyaW5nLXJvdyA+IGRpdiBwIHtcbiAgICAgICAgY29sb3I6IHJnYmEoMzEsIDQxLCA1MSwgMC43Mik7XG4gICAgICAgIGZvbnQtc2l6ZTogMC44NXJlbTtcbiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMztcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1vZmZlcmluZy1yb3cgPiBkaXYgYnV0dG9uIHtcbiAgICAgICAganVzdGlmeS1zZWxmOiBzdGFydDtcbiAgICAgICAgbWluLWhlaWdodDogMi4ycmVtO1xuICAgICAgICBwYWRkaW5nOiAwIDAuN3JlbTtcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgxNiwgNDIsIDY3LCAwLjE2KTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMC41cmVtO1xuICAgICAgICBiYWNrZ3JvdW5kOiAjMTAyYTQzO1xuICAgICAgICBjb2xvcjogI2ZmZmZmZjtcbiAgICAgICAgZm9udDogaW5oZXJpdDtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDgwMDtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1vZmZlcmluZy1yb3cgPiBkaXYgYnV0dG9uOmRpc2FibGVkIHtcbiAgICAgICAgYmFja2dyb3VuZDogI2UyZThmMDtcbiAgICAgICAgY29sb3I6IHJnYmEoMzEsIDQxLCA1MSwgMC41OCk7XG4gICAgICB9XG5cbiAgICAgIC5jaHJpc3RpYW5pdHktaGlzdG9yeS1ncmlkIC5jaHJpc3RpYW5pdHktcmVuZGVyLWNhcmQtYnV0dG9uIHtcbiAgICAgICAganVzdGlmeS1zZWxmOiBjZW50ZXI7XG4gICAgICAgIHdpZHRoOiBtaW4oMTAwJSwgNi40cmVtKTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1nYWxsZXJ5LWdyaWQgLmNocmlzdGlhbml0eS1yZW5kZXItY2FyZC1idXR0b24ge1xuICAgICAgICBqdXN0aWZ5LXNlbGY6IGNlbnRlcjtcbiAgICAgICAgd2lkdGg6IG1pbigxMDAlLCA3cmVtKTtcbiAgICAgIH1cblxuICAgICAgLmNocmlzdGlhbml0eS1vZmZlcmluZy1jYXJkLmNocmlzdGlhbml0eS1yZW5kZXItY2FyZC1idXR0b24ge1xuICAgICAgICB3aWR0aDogbWluKDEwMCUsIDUuOHJlbSk7XG4gICAgICAgIG1pbi1oZWlnaHQ6IDA7XG4gICAgICAgIHBhZGRpbmc6IDA7XG4gICAgICAgIGJvcmRlcjogMDtcbiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgICAgIGJveC1zaGFkb3c6IG5vbmU7XG4gICAgICB9XG5cbiAgICAgIGJ1dHRvbiB7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIH1cblxuICAgICAgYnV0dG9uOmRpc2FibGVkIHtcbiAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbiAgICAgICAgb3BhY2l0eTogMC41NTtcbiAgICAgIH1cblxuICAgICAgYnV0dG9uOmZvY3VzLXZpc2libGUge1xuICAgICAgICBvdXRsaW5lOiAwLjE4NzVyZW0gc29saWQgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWNocmlzdGlhbml0eS10aGVtZS1mb2N1cykgMjQlLCB0cmFuc3BhcmVudCk7XG4gICAgICAgIG91dGxpbmUtb2Zmc2V0OiAwLjEyNXJlbTtcbiAgICAgIH1cblxuICAgICAgOmhvc3QtY29udGV4dCguZGFyayksXG4gICAgICA6aG9zdC1jb250ZXh0KC5pb24tcGFsZXR0ZS1kYXJrKSxcbiAgICAgIDpob3N0LWNvbnRleHQoaHRtbC5pb24tcGFsZXR0ZS1kYXJrKSxcbiAgICAgIDpob3N0LWNvbnRleHQoYm9keS5kYXJrKSxcbiAgICAgIDpob3N0LWNvbnRleHQoW2RhdGEtdGhlbWU9J2RhcmsnXSkge1xuICAgICAgICAtLWNocmlzdGlhbml0eS10aGVtZS1pbms6IHZhcigtLWlvbi10ZXh0LWNvbG9yLCAjZTVlZGY4KTtcbiAgICAgICAgLS1jaHJpc3RpYW5pdHktdGhlbWUtc3VyZmFjZTogIzExMTgyNztcbiAgICAgICAgLS1jaHJpc3RpYW5pdHktdGhlbWUtcGFyY2htZW50OiAjMTMyMjNhO1xuICAgICAgICAtLWNocmlzdGlhbml0eS10aGVtZS1vbGl2ZTogIzkzYzVmZDtcbiAgICAgICAgLS1jaHJpc3RpYW5pdHktdGhlbWUtZ29sZDogIzYwYTVmYTtcbiAgICAgICAgLS1jaHJpc3RpYW5pdHktdGhlbWUtZ29sZC1zb2Z0OiByZ2JhKDk2LCAxNjUsIDI1MCwgMC4xOCk7XG4gICAgICAgIC0tY2hyaXN0aWFuaXR5LXRoZW1lLWdvbGQtcmluZzogcmdiYSgxNDcsIDE5NywgMjUzLCAwLjQyKTtcbiAgICAgICAgLS1jaHJpc3RpYW5pdHktdGhlbWUtZ2xvdzogcmdiYSg5NiwgMTY1LCAyNTAsIDAuMjQpO1xuICAgICAgICAtLWNocmlzdGlhbml0eS10aGVtZS1mb2N1czogIzkzYzVmZDtcbiAgICAgICAgLS1jaHJpc3RpYW5pdHktdGhlbWUtc2hhZG93OiByZ2JhKDAsIDAsIDAsIDAuMzQpO1xuICAgICAgICAtLWNocmlzdGlhbml0eS10aGVtZS1zaGFkb3ctc3Ryb25nOiByZ2JhKDAsIDAsIDAsIDAuNDgpO1xuICAgICAgICAtLWNocmlzdGlhbml0eS1jYXJkLWJhY2s6XG4gICAgICAgICAgbGluZWFyLWdyYWRpZW50KDEzNWRlZywgcmdiYSgxNDcsIDE5NywgMjUzLCAwLjIpLCByZ2JhKDE1LCAyMywgNDIsIDAuMDgpKSxcbiAgICAgICAgICByZXBlYXRpbmctbGluZWFyLWdyYWRpZW50KDQ1ZGVnLCAjMWUzYTVmIDAgMC4zM3JlbSwgIzBmMTcyYSAwLjMzcmVtIDAuNjZyZW0pO1xuICAgICAgICAtLWNocmlzdGlhbml0eS1jYXJkLWJhY2stc29mdDpcbiAgICAgICAgICBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCByZ2JhKDE0NywgMTk3LCAyNTMsIDAuMTUpLCByZ2JhKDE1LCAyMywgNDIsIDAuMDYpKSxcbiAgICAgICAgICByZXBlYXRpbmctbGluZWFyLWdyYWRpZW50KDQ1ZGVnLCAjMWUzYTVmIDAgMC4zM3JlbSwgIzBmMTcyYSAwLjMzcmVtIDAuNjZyZW0pO1xuICAgICAgICBjb2xvci1zY2hlbWU6IGRhcms7XG4gICAgICB9XG5cbiAgICAgIDpob3N0LWNvbnRleHQoLmRhcmspIC5jaHJpc3RpYW5pdHktc2hlbGwsXG4gICAgICA6aG9zdC1jb250ZXh0KC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LXNoZWxsLFxuICAgICAgOmhvc3QtY29udGV4dChodG1sLmlvbi1wYWxldHRlLWRhcmspIC5jaHJpc3RpYW5pdHktc2hlbGwsXG4gICAgICA6aG9zdC1jb250ZXh0KGJvZHkuZGFyaykgLmNocmlzdGlhbml0eS1zaGVsbCxcbiAgICAgIDpob3N0LWNvbnRleHQoW2RhdGEtdGhlbWU9J2RhcmsnXSkgLmNocmlzdGlhbml0eS1zaGVsbCB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogcmdiYSgxNDgsIDE2MywgMTg0LCAwLjE4KTtcbiAgICAgICAgYmFja2dyb3VuZDogIzA3MTExZjtcbiAgICAgIH1cblxuICAgICAgOmhvc3QtY29udGV4dCguZGFyaykgLmNocmlzdGlhbml0eS1nYWxsZXJ5LW9wZW4sXG4gICAgICA6aG9zdC1jb250ZXh0KC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LWdhbGxlcnktb3BlbixcbiAgICAgIDpob3N0LWNvbnRleHQoaHRtbC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LWdhbGxlcnktb3BlbixcbiAgICAgIDpob3N0LWNvbnRleHQoYm9keS5kYXJrKSAuY2hyaXN0aWFuaXR5LWdhbGxlcnktb3BlbixcbiAgICAgIDpob3N0LWNvbnRleHQoW2RhdGEtdGhlbWU9J2RhcmsnXSkgLmNocmlzdGlhbml0eS1nYWxsZXJ5LW9wZW4sXG4gICAgICA6aG9zdC1jb250ZXh0KC5kYXJrKSAuY2hyaXN0aWFuaXR5LXNlY29uZGFyeS1hY3Rpb24sXG4gICAgICA6aG9zdC1jb250ZXh0KC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LXNlY29uZGFyeS1hY3Rpb24sXG4gICAgICA6aG9zdC1jb250ZXh0KGh0bWwuaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS1zZWNvbmRhcnktYWN0aW9uLFxuICAgICAgOmhvc3QtY29udGV4dChib2R5LmRhcmspIC5jaHJpc3RpYW5pdHktc2Vjb25kYXJ5LWFjdGlvbixcbiAgICAgIDpob3N0LWNvbnRleHQoW2RhdGEtdGhlbWU9J2RhcmsnXSkgLmNocmlzdGlhbml0eS1zZWNvbmRhcnktYWN0aW9uLFxuICAgICAgOmhvc3QtY29udGV4dCguZGFyaykgLmNocmlzdGlhbml0eS1nYWxsZXJ5LWVkaXRpb24tc3RyaXAgYnV0dG9uLFxuICAgICAgOmhvc3QtY29udGV4dCguaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS1nYWxsZXJ5LWVkaXRpb24tc3RyaXAgYnV0dG9uLFxuICAgICAgOmhvc3QtY29udGV4dChodG1sLmlvbi1wYWxldHRlLWRhcmspIC5jaHJpc3RpYW5pdHktZ2FsbGVyeS1lZGl0aW9uLXN0cmlwIGJ1dHRvbixcbiAgICAgIDpob3N0LWNvbnRleHQoYm9keS5kYXJrKSAuY2hyaXN0aWFuaXR5LWdhbGxlcnktZWRpdGlvbi1zdHJpcCBidXR0b24sXG4gICAgICA6aG9zdC1jb250ZXh0KFtkYXRhLXRoZW1lPSdkYXJrJ10pIC5jaHJpc3RpYW5pdHktZ2FsbGVyeS1lZGl0aW9uLXN0cmlwIGJ1dHRvbiB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogcmdiYSgxNDcsIDE5NywgMjUzLCAwLjM2KTtcbiAgICAgICAgYmFja2dyb3VuZDpcbiAgICAgICAgICBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDMwLCA1OCwgOTUsIDAuODIpLCByZ2JhKDE1LCAyMywgNDIsIDAuODgpKSxcbiAgICAgICAgICByYWRpYWwtZ3JhZGllbnQoY2lyY2xlIGF0IDIwJSAwJSwgcmdiYSg5NiwgMTY1LCAyNTAsIDAuMTYpLCB0cmFuc3BhcmVudCA0MiUpO1xuICAgICAgICBjb2xvcjogdmFyKC0tY2hyaXN0aWFuaXR5LXRoZW1lLWluayk7XG4gICAgICAgIGJveC1zaGFkb3c6IDAgMC41NXJlbSAxLjJyZW0gcmdiYSgwLCAwLCAwLCAwLjI0KTtcbiAgICAgIH1cblxuICAgICAgOmhvc3QtY29udGV4dCguZGFyaykgLmNocmlzdGlhbml0eS1zcGxhc2gsXG4gICAgICA6aG9zdC1jb250ZXh0KC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LXNwbGFzaCxcbiAgICAgIDpob3N0LWNvbnRleHQoaHRtbC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LXNwbGFzaCxcbiAgICAgIDpob3N0LWNvbnRleHQoYm9keS5kYXJrKSAuY2hyaXN0aWFuaXR5LXNwbGFzaCxcbiAgICAgIDpob3N0LWNvbnRleHQoW2RhdGEtdGhlbWU9J2RhcmsnXSkgLmNocmlzdGlhbml0eS1zcGxhc2gsXG4gICAgICA6aG9zdC1jb250ZXh0KC5kYXJrKSAuY2hyaXN0aWFuaXR5LXN0YXJ0LFxuICAgICAgOmhvc3QtY29udGV4dCguaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS1zdGFydCxcbiAgICAgIDpob3N0LWNvbnRleHQoaHRtbC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LXN0YXJ0LFxuICAgICAgOmhvc3QtY29udGV4dChib2R5LmRhcmspIC5jaHJpc3RpYW5pdHktc3RhcnQsXG4gICAgICA6aG9zdC1jb250ZXh0KFtkYXRhLXRoZW1lPSdkYXJrJ10pIC5jaHJpc3RpYW5pdHktc3RhcnQge1xuICAgICAgICBib3JkZXItY29sb3I6IHJnYmEoMTQ3LCAxOTcsIDI1MywgMC4yMik7XG4gICAgICAgIGJhY2tncm91bmQ6XG4gICAgICAgICAgcmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCA1MCUgMTglLCByZ2JhKDk2LCAxNjUsIDI1MCwgMC4xNiksIHRyYW5zcGFyZW50IDIycmVtKSxcbiAgICAgICAgICBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDE1LCAyMywgNDIsIDAuODgpLCByZ2JhKDcsIDE3LCAzMSwgMC45NykpLFxuICAgICAgICAgIHZhcigtLWNocmlzdGlhbml0eS1jYXJkLWJhY2stc29mdCk7XG4gICAgICAgIGJveC1zaGFkb3c6IDAgMS4ycmVtIDMuMnJlbSByZ2JhKDAsIDAsIDAsIDAuMjgpO1xuICAgICAgfVxuXG4gICAgICA6aG9zdC1jb250ZXh0KC5kYXJrKSAuY2hyaXN0aWFuaXR5LXN0YXJ0X19jYXJkcyBhcnRpY2xlLFxuICAgICAgOmhvc3QtY29udGV4dCguaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS1zdGFydF9fY2FyZHMgYXJ0aWNsZSxcbiAgICAgIDpob3N0LWNvbnRleHQoaHRtbC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LXN0YXJ0X19jYXJkcyBhcnRpY2xlLFxuICAgICAgOmhvc3QtY29udGV4dChib2R5LmRhcmspIC5jaHJpc3RpYW5pdHktc3RhcnRfX2NhcmRzIGFydGljbGUsXG4gICAgICA6aG9zdC1jb250ZXh0KFtkYXRhLXRoZW1lPSdkYXJrJ10pIC5jaHJpc3RpYW5pdHktc3RhcnRfX2NhcmRzIGFydGljbGUsXG4gICAgICA6aG9zdC1jb250ZXh0KC5kYXJrKSAuY2hyaXN0aWFuaXR5LXN0YXJ0X19tb2RlcyBhcnRpY2xlLFxuICAgICAgOmhvc3QtY29udGV4dCguaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS1zdGFydF9fbW9kZXMgYXJ0aWNsZSxcbiAgICAgIDpob3N0LWNvbnRleHQoaHRtbC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LXN0YXJ0X19tb2RlcyBhcnRpY2xlLFxuICAgICAgOmhvc3QtY29udGV4dChib2R5LmRhcmspIC5jaHJpc3RpYW5pdHktc3RhcnRfX21vZGVzIGFydGljbGUsXG4gICAgICA6aG9zdC1jb250ZXh0KFtkYXRhLXRoZW1lPSdkYXJrJ10pIC5jaHJpc3RpYW5pdHktc3RhcnRfX21vZGVzIGFydGljbGUsXG4gICAgICA6aG9zdC1jb250ZXh0KC5kYXJrKSAuY2hyaXN0aWFuaXR5LXN0YXJ0X19zdGF0dXMgc3BhbixcbiAgICAgIDpob3N0LWNvbnRleHQoLmlvbi1wYWxldHRlLWRhcmspIC5jaHJpc3RpYW5pdHktc3RhcnRfX3N0YXR1cyBzcGFuLFxuICAgICAgOmhvc3QtY29udGV4dChodG1sLmlvbi1wYWxldHRlLWRhcmspIC5jaHJpc3RpYW5pdHktc3RhcnRfX3N0YXR1cyBzcGFuLFxuICAgICAgOmhvc3QtY29udGV4dChib2R5LmRhcmspIC5jaHJpc3RpYW5pdHktc3RhcnRfX3N0YXR1cyBzcGFuLFxuICAgICAgOmhvc3QtY29udGV4dChbZGF0YS10aGVtZT0nZGFyayddKSAuY2hyaXN0aWFuaXR5LXN0YXJ0X19zdGF0dXMgc3BhbixcbiAgICAgIDpob3N0LWNvbnRleHQoLmRhcmspIC5jaHJpc3RpYW5pdHktc3RhcnRfX21vZGVzIGFydGljbGUgPiBzcGFuLFxuICAgICAgOmhvc3QtY29udGV4dCguaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS1zdGFydF9fbW9kZXMgYXJ0aWNsZSA+IHNwYW4sXG4gICAgICA6aG9zdC1jb250ZXh0KGh0bWwuaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS1zdGFydF9fbW9kZXMgYXJ0aWNsZSA+IHNwYW4sXG4gICAgICA6aG9zdC1jb250ZXh0KGJvZHkuZGFyaykgLmNocmlzdGlhbml0eS1zdGFydF9fbW9kZXMgYXJ0aWNsZSA+IHNwYW4sXG4gICAgICA6aG9zdC1jb250ZXh0KFtkYXRhLXRoZW1lPSdkYXJrJ10pIC5jaHJpc3RpYW5pdHktc3RhcnRfX21vZGVzIGFydGljbGUgPiBzcGFuIHtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiByZ2JhKDE0OCwgMTYzLCAxODQsIDAuMik7XG4gICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMTUsIDIzLCA0MiwgMC42OCk7XG4gICAgICAgIGJveC1zaGFkb3c6IDAgMC43NXJlbSAxLjdyZW0gcmdiYSgwLCAwLCAwLCAwLjIyKTtcbiAgICAgIH1cblxuICAgICAgOmhvc3QtY29udGV4dCguZGFyaykgLmNocmlzdGlhbml0eS1zcGxhc2ggcCxcbiAgICAgIDpob3N0LWNvbnRleHQoLmlvbi1wYWxldHRlLWRhcmspIC5jaHJpc3RpYW5pdHktc3BsYXNoIHAsXG4gICAgICA6aG9zdC1jb250ZXh0KGh0bWwuaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS1zcGxhc2ggcCxcbiAgICAgIDpob3N0LWNvbnRleHQoYm9keS5kYXJrKSAuY2hyaXN0aWFuaXR5LXNwbGFzaCBwLFxuICAgICAgOmhvc3QtY29udGV4dChbZGF0YS10aGVtZT0nZGFyayddKSAuY2hyaXN0aWFuaXR5LXNwbGFzaCBwLFxuICAgICAgOmhvc3QtY29udGV4dCguZGFyaykgLmNocmlzdGlhbml0eS1zdGFydF9fY29weSBwLFxuICAgICAgOmhvc3QtY29udGV4dCguaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS1zdGFydF9fY29weSBwLFxuICAgICAgOmhvc3QtY29udGV4dChodG1sLmlvbi1wYWxldHRlLWRhcmspIC5jaHJpc3RpYW5pdHktc3RhcnRfX2NvcHkgcCxcbiAgICAgIDpob3N0LWNvbnRleHQoYm9keS5kYXJrKSAuY2hyaXN0aWFuaXR5LXN0YXJ0X19jb3B5IHAsXG4gICAgICA6aG9zdC1jb250ZXh0KFtkYXRhLXRoZW1lPSdkYXJrJ10pIC5jaHJpc3RpYW5pdHktc3RhcnRfX2NvcHkgcCxcbiAgICAgIDpob3N0LWNvbnRleHQoLmRhcmspIC5jaHJpc3RpYW5pdHktc3RhcnRfX2NhcmRzIHAsXG4gICAgICA6aG9zdC1jb250ZXh0KC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LXN0YXJ0X19jYXJkcyBwLFxuICAgICAgOmhvc3QtY29udGV4dChodG1sLmlvbi1wYWxldHRlLWRhcmspIC5jaHJpc3RpYW5pdHktc3RhcnRfX2NhcmRzIHAsXG4gICAgICA6aG9zdC1jb250ZXh0KGJvZHkuZGFyaykgLmNocmlzdGlhbml0eS1zdGFydF9fY2FyZHMgcCxcbiAgICAgIDpob3N0LWNvbnRleHQoW2RhdGEtdGhlbWU9J2RhcmsnXSkgLmNocmlzdGlhbml0eS1zdGFydF9fY2FyZHMgcCxcbiAgICAgIDpob3N0LWNvbnRleHQoLmRhcmspIC5jaHJpc3RpYW5pdHktc3RhcnRfX21vZGVzIHAsXG4gICAgICA6aG9zdC1jb250ZXh0KC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LXN0YXJ0X19tb2RlcyBwLFxuICAgICAgOmhvc3QtY29udGV4dChodG1sLmlvbi1wYWxldHRlLWRhcmspIC5jaHJpc3RpYW5pdHktc3RhcnRfX21vZGVzIHAsXG4gICAgICA6aG9zdC1jb250ZXh0KGJvZHkuZGFyaykgLmNocmlzdGlhbml0eS1zdGFydF9fbW9kZXMgcCxcbiAgICAgIDpob3N0LWNvbnRleHQoW2RhdGEtdGhlbWU9J2RhcmsnXSkgLmNocmlzdGlhbml0eS1zdGFydF9fbW9kZXMgcCxcbiAgICAgIDpob3N0LWNvbnRleHQoLmRhcmspIC5jaHJpc3RpYW5pdHktaGVhZGVyIHAsXG4gICAgICA6aG9zdC1jb250ZXh0KC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LWhlYWRlciBwLFxuICAgICAgOmhvc3QtY29udGV4dChodG1sLmlvbi1wYWxldHRlLWRhcmspIC5jaHJpc3RpYW5pdHktaGVhZGVyIHAsXG4gICAgICA6aG9zdC1jb250ZXh0KGJvZHkuZGFyaykgLmNocmlzdGlhbml0eS1oZWFkZXIgcCxcbiAgICAgIDpob3N0LWNvbnRleHQoW2RhdGEtdGhlbWU9J2RhcmsnXSkgLmNocmlzdGlhbml0eS1oZWFkZXIgcCxcbiAgICAgIDpob3N0LWNvbnRleHQoLmRhcmspIC5jaHJpc3RpYW5pdHktbWF0Y2gtcGxheWVyIHNtYWxsLFxuICAgICAgOmhvc3QtY29udGV4dCguaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS1tYXRjaC1wbGF5ZXIgc21hbGwsXG4gICAgICA6aG9zdC1jb250ZXh0KGh0bWwuaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS1tYXRjaC1wbGF5ZXIgc21hbGwsXG4gICAgICA6aG9zdC1jb250ZXh0KGJvZHkuZGFyaykgLmNocmlzdGlhbml0eS1tYXRjaC1wbGF5ZXIgc21hbGwsXG4gICAgICA6aG9zdC1jb250ZXh0KFtkYXRhLXRoZW1lPSdkYXJrJ10pIC5jaHJpc3RpYW5pdHktbWF0Y2gtcGxheWVyIHNtYWxsLFxuICAgICAgOmhvc3QtY29udGV4dCguZGFyaykgLmNocmlzdGlhbml0eS1zY29yZWJvYXJkIHNwYW4sXG4gICAgICA6aG9zdC1jb250ZXh0KC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LXNjb3JlYm9hcmQgc3BhbixcbiAgICAgIDpob3N0LWNvbnRleHQoaHRtbC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LXNjb3JlYm9hcmQgc3BhbixcbiAgICAgIDpob3N0LWNvbnRleHQoYm9keS5kYXJrKSAuY2hyaXN0aWFuaXR5LXNjb3JlYm9hcmQgc3BhbixcbiAgICAgIDpob3N0LWNvbnRleHQoW2RhdGEtdGhlbWU9J2RhcmsnXSkgLmNocmlzdGlhbml0eS1zY29yZWJvYXJkIHNwYW4ge1xuICAgICAgICBjb2xvcjogcmdiYSgyMjYsIDIzMiwgMjQwLCAwLjc0KTtcbiAgICAgIH1cblxuICAgICAgOmhvc3QtY29udGV4dCguZGFyaykgLmNocmlzdGlhbml0eS10dXJuLFxuICAgICAgOmhvc3QtY29udGV4dCguaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS10dXJuLFxuICAgICAgOmhvc3QtY29udGV4dChodG1sLmlvbi1wYWxldHRlLWRhcmspIC5jaHJpc3RpYW5pdHktdHVybixcbiAgICAgIDpob3N0LWNvbnRleHQoYm9keS5kYXJrKSAuY2hyaXN0aWFuaXR5LXR1cm4sXG4gICAgICA6aG9zdC1jb250ZXh0KFtkYXRhLXRoZW1lPSdkYXJrJ10pIC5jaHJpc3RpYW5pdHktdHVybixcbiAgICAgIDpob3N0LWNvbnRleHQoLmRhcmspIC5jaHJpc3RpYW5pdHktbGVhZGVyLFxuICAgICAgOmhvc3QtY29udGV4dCguaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS1sZWFkZXIsXG4gICAgICA6aG9zdC1jb250ZXh0KGh0bWwuaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS1sZWFkZXIsXG4gICAgICA6aG9zdC1jb250ZXh0KGJvZHkuZGFyaykgLmNocmlzdGlhbml0eS1sZWFkZXIsXG4gICAgICA6aG9zdC1jb250ZXh0KFtkYXRhLXRoZW1lPSdkYXJrJ10pIC5jaHJpc3RpYW5pdHktbGVhZGVyLFxuICAgICAgOmhvc3QtY29udGV4dCguZGFyaykgLmNocmlzdGlhbml0eS1vZmZlcmluZ3MsXG4gICAgICA6aG9zdC1jb250ZXh0KC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LW9mZmVyaW5ncyxcbiAgICAgIDpob3N0LWNvbnRleHQoaHRtbC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LW9mZmVyaW5ncyxcbiAgICAgIDpob3N0LWNvbnRleHQoYm9keS5kYXJrKSAuY2hyaXN0aWFuaXR5LW9mZmVyaW5ncyxcbiAgICAgIDpob3N0LWNvbnRleHQoW2RhdGEtdGhlbWU9J2RhcmsnXSkgLmNocmlzdGlhbml0eS1vZmZlcmluZ3MsXG4gICAgICA6aG9zdC1jb250ZXh0KC5kYXJrKSAuY2hyaXN0aWFuaXR5LWhpZGRlbi1oYW5kLFxuICAgICAgOmhvc3QtY29udGV4dCguaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS1oaWRkZW4taGFuZCxcbiAgICAgIDpob3N0LWNvbnRleHQoaHRtbC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LWhpZGRlbi1oYW5kLFxuICAgICAgOmhvc3QtY29udGV4dChib2R5LmRhcmspIC5jaHJpc3RpYW5pdHktaGlkZGVuLWhhbmQsXG4gICAgICA6aG9zdC1jb250ZXh0KFtkYXRhLXRoZW1lPSdkYXJrJ10pIC5jaHJpc3RpYW5pdHktaGlkZGVuLWhhbmQsXG4gICAgICA6aG9zdC1jb250ZXh0KC5kYXJrKSAuY2hyaXN0aWFuaXR5LXBpbGUsXG4gICAgICA6aG9zdC1jb250ZXh0KC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LXBpbGUsXG4gICAgICA6aG9zdC1jb250ZXh0KGh0bWwuaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS1waWxlLFxuICAgICAgOmhvc3QtY29udGV4dChib2R5LmRhcmspIC5jaHJpc3RpYW5pdHktcGlsZSxcbiAgICAgIDpob3N0LWNvbnRleHQoW2RhdGEtdGhlbWU9J2RhcmsnXSkgLmNocmlzdGlhbml0eS1waWxlLFxuICAgICAgOmhvc3QtY29udGV4dCguZGFyaykgLmNocmlzdGlhbml0eS1kZWNrLFxuICAgICAgOmhvc3QtY29udGV4dCguaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS1kZWNrLFxuICAgICAgOmhvc3QtY29udGV4dChodG1sLmlvbi1wYWxldHRlLWRhcmspIC5jaHJpc3RpYW5pdHktZGVjayxcbiAgICAgIDpob3N0LWNvbnRleHQoYm9keS5kYXJrKSAuY2hyaXN0aWFuaXR5LWRlY2ssXG4gICAgICA6aG9zdC1jb250ZXh0KFtkYXRhLXRoZW1lPSdkYXJrJ10pIC5jaHJpc3RpYW5pdHktZGVjayxcbiAgICAgIDpob3N0LWNvbnRleHQoLmRhcmspIC5jaHJpc3RpYW5pdHktcGxhY2UsXG4gICAgICA6aG9zdC1jb250ZXh0KC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LXBsYWNlLFxuICAgICAgOmhvc3QtY29udGV4dChodG1sLmlvbi1wYWxldHRlLWRhcmspIC5jaHJpc3RpYW5pdHktcGxhY2UsXG4gICAgICA6aG9zdC1jb250ZXh0KGJvZHkuZGFyaykgLmNocmlzdGlhbml0eS1wbGFjZSxcbiAgICAgIDpob3N0LWNvbnRleHQoW2RhdGEtdGhlbWU9J2RhcmsnXSkgLmNocmlzdGlhbml0eS1wbGFjZSxcbiAgICAgIDpob3N0LWNvbnRleHQoLmRhcmspIC5jaHJpc3RpYW5pdHktbWF0Y2gtc3RyaXAsXG4gICAgICA6aG9zdC1jb250ZXh0KC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LW1hdGNoLXN0cmlwLFxuICAgICAgOmhvc3QtY29udGV4dChodG1sLmlvbi1wYWxldHRlLWRhcmspIC5jaHJpc3RpYW5pdHktbWF0Y2gtc3RyaXAsXG4gICAgICA6aG9zdC1jb250ZXh0KGJvZHkuZGFyaykgLmNocmlzdGlhbml0eS1tYXRjaC1zdHJpcCxcbiAgICAgIDpob3N0LWNvbnRleHQoW2RhdGEtdGhlbWU9J2RhcmsnXSkgLmNocmlzdGlhbml0eS1tYXRjaC1zdHJpcCxcbiAgICAgIDpob3N0LWNvbnRleHQoLmRhcmspIC5jaHJpc3RpYW5pdHktYWN0aW9ucyxcbiAgICAgIDpob3N0LWNvbnRleHQoLmlvbi1wYWxldHRlLWRhcmspIC5jaHJpc3RpYW5pdHktYWN0aW9ucyxcbiAgICAgIDpob3N0LWNvbnRleHQoaHRtbC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LWFjdGlvbnMsXG4gICAgICA6aG9zdC1jb250ZXh0KGJvZHkuZGFyaykgLmNocmlzdGlhbml0eS1hY3Rpb25zLFxuICAgICAgOmhvc3QtY29udGV4dChbZGF0YS10aGVtZT0nZGFyayddKSAuY2hyaXN0aWFuaXR5LWFjdGlvbnMsXG4gICAgICA6aG9zdC1jb250ZXh0KC5kYXJrKSAuY2hyaXN0aWFuaXR5LWhpc3RvcnksXG4gICAgICA6aG9zdC1jb250ZXh0KC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LWhpc3RvcnksXG4gICAgICA6aG9zdC1jb250ZXh0KGh0bWwuaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS1oaXN0b3J5LFxuICAgICAgOmhvc3QtY29udGV4dChib2R5LmRhcmspIC5jaHJpc3RpYW5pdHktaGlzdG9yeSxcbiAgICAgIDpob3N0LWNvbnRleHQoW2RhdGEtdGhlbWU9J2RhcmsnXSkgLmNocmlzdGlhbml0eS1oaXN0b3J5IHtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiByZ2JhKDE0OCwgMTYzLCAxODQsIDAuMTgpO1xuICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDE1LCAyMywgNDIsIDAuODIpO1xuICAgICAgfVxuXG4gICAgICA6aG9zdC1jb250ZXh0KC5kYXJrKSAuY2hyaXN0aWFuaXR5LXR1cm4uaXMtb3duLXR1cm4sXG4gICAgICA6aG9zdC1jb250ZXh0KC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LXR1cm4uaXMtb3duLXR1cm4sXG4gICAgICA6aG9zdC1jb250ZXh0KGh0bWwuaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS10dXJuLmlzLW93bi10dXJuLFxuICAgICAgOmhvc3QtY29udGV4dChib2R5LmRhcmspIC5jaHJpc3RpYW5pdHktdHVybi5pcy1vd24tdHVybixcbiAgICAgIDpob3N0LWNvbnRleHQoW2RhdGEtdGhlbWU9J2RhcmsnXSkgLmNocmlzdGlhbml0eS10dXJuLmlzLW93bi10dXJuIHtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiByZ2JhKDQ1LCAyMTIsIDE5MSwgMC4zNik7XG4gICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjAsIDgzLCA3NiwgMC4zNik7XG4gICAgICB9XG5cbiAgICAgIDpob3N0LWNvbnRleHQoLmRhcmspIC5jaHJpc3RpYW5pdHktdGFibGUsXG4gICAgICA6aG9zdC1jb250ZXh0KC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LXRhYmxlLFxuICAgICAgOmhvc3QtY29udGV4dChodG1sLmlvbi1wYWxldHRlLWRhcmspIC5jaHJpc3RpYW5pdHktdGFibGUsXG4gICAgICA6aG9zdC1jb250ZXh0KGJvZHkuZGFyaykgLmNocmlzdGlhbml0eS10YWJsZSxcbiAgICAgIDpob3N0LWNvbnRleHQoW2RhdGEtdGhlbWU9J2RhcmsnXSkgLmNocmlzdGlhbml0eS10YWJsZSB7XG4gICAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxODBkZWcsICMxMDIzM2QsICMwYjE3MjgpO1xuICAgICAgfVxuXG4gICAgICA6aG9zdC1jb250ZXh0KC5kYXJrKSAuY2hyaXN0aWFuaXR5LXBsYXllci1zaWRlLFxuICAgICAgOmhvc3QtY29udGV4dCguaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS1wbGF5ZXItc2lkZSxcbiAgICAgIDpob3N0LWNvbnRleHQoaHRtbC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LXBsYXllci1zaWRlLFxuICAgICAgOmhvc3QtY29udGV4dChib2R5LmRhcmspIC5jaHJpc3RpYW5pdHktcGxheWVyLXNpZGUsXG4gICAgICA6aG9zdC1jb250ZXh0KFtkYXRhLXRoZW1lPSdkYXJrJ10pIC5jaHJpc3RpYW5pdHktcGxheWVyLXNpZGUge1xuICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDE1LCAyMywgNDIsIDAuMzQpO1xuICAgICAgfVxuXG4gICAgICA6aG9zdC1jb250ZXh0KC5kYXJrKSAuY2hyaXN0aWFuaXR5LWJhdHRsZS16b25lLFxuICAgICAgOmhvc3QtY29udGV4dCguaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS1iYXR0bGUtem9uZSxcbiAgICAgIDpob3N0LWNvbnRleHQoaHRtbC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LWJhdHRsZS16b25lLFxuICAgICAgOmhvc3QtY29udGV4dChib2R5LmRhcmspIC5jaHJpc3RpYW5pdHktYmF0dGxlLXpvbmUsXG4gICAgICA6aG9zdC1jb250ZXh0KFtkYXRhLXRoZW1lPSdkYXJrJ10pIC5jaHJpc3RpYW5pdHktYmF0dGxlLXpvbmUsXG4gICAgICA6aG9zdC1jb250ZXh0KC5kYXJrKSAuY2hyaXN0aWFuaXR5LXNoYXJlZC16b25lLFxuICAgICAgOmhvc3QtY29udGV4dCguaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS1zaGFyZWQtem9uZSxcbiAgICAgIDpob3N0LWNvbnRleHQoaHRtbC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LXNoYXJlZC16b25lLFxuICAgICAgOmhvc3QtY29udGV4dChib2R5LmRhcmspIC5jaHJpc3RpYW5pdHktc2hhcmVkLXpvbmUsXG4gICAgICA6aG9zdC1jb250ZXh0KFtkYXRhLXRoZW1lPSdkYXJrJ10pIC5jaHJpc3RpYW5pdHktc2hhcmVkLXpvbmUge1xuICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDE1LCAyMywgNDIsIDAuNTgpO1xuICAgICAgfVxuXG4gICAgICA6aG9zdC1jb250ZXh0KC5kYXJrKSAuY2hyaXN0aWFuaXR5LWJhdHRsZS16b25lLmlzLXBsYWNpbmctY2FyZCxcbiAgICAgIDpob3N0LWNvbnRleHQoLmlvbi1wYWxldHRlLWRhcmspIC5jaHJpc3RpYW5pdHktYmF0dGxlLXpvbmUuaXMtcGxhY2luZy1jYXJkLFxuICAgICAgOmhvc3QtY29udGV4dChodG1sLmlvbi1wYWxldHRlLWRhcmspIC5jaHJpc3RpYW5pdHktYmF0dGxlLXpvbmUuaXMtcGxhY2luZy1jYXJkLFxuICAgICAgOmhvc3QtY29udGV4dChib2R5LmRhcmspIC5jaHJpc3RpYW5pdHktYmF0dGxlLXpvbmUuaXMtcGxhY2luZy1jYXJkLFxuICAgICAgOmhvc3QtY29udGV4dChbZGF0YS10aGVtZT0nZGFyayddKSAuY2hyaXN0aWFuaXR5LWJhdHRsZS16b25lLmlzLXBsYWNpbmctY2FyZCB7XG4gICAgICAgIGJhY2tncm91bmQ6XG4gICAgICAgICAgbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSgzMCwgNTgsIDk1LCAwLjgyKSwgcmdiYSgxNSwgMjMsIDQyLCAwLjcyKSksXG4gICAgICAgICAgcmdiYSgxNSwgMjMsIDQyLCAwLjU4KTtcbiAgICAgIH1cblxuICAgICAgOmhvc3QtY29udGV4dCguZGFyaykgLmNocmlzdGlhbml0eS1jYXJkLFxuICAgICAgOmhvc3QtY29udGV4dCguaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS1jYXJkLFxuICAgICAgOmhvc3QtY29udGV4dChodG1sLmlvbi1wYWxldHRlLWRhcmspIC5jaHJpc3RpYW5pdHktY2FyZCxcbiAgICAgIDpob3N0LWNvbnRleHQoYm9keS5kYXJrKSAuY2hyaXN0aWFuaXR5LWNhcmQsXG4gICAgICA6aG9zdC1jb250ZXh0KFtkYXRhLXRoZW1lPSdkYXJrJ10pIC5jaHJpc3RpYW5pdHktY2FyZCxcbiAgICAgIDpob3N0LWNvbnRleHQoLmRhcmspIC5jaHJpc3RpYW5pdHktc2xvdCxcbiAgICAgIDpob3N0LWNvbnRleHQoLmlvbi1wYWxldHRlLWRhcmspIC5jaHJpc3RpYW5pdHktc2xvdCxcbiAgICAgIDpob3N0LWNvbnRleHQoaHRtbC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LXNsb3QsXG4gICAgICA6aG9zdC1jb250ZXh0KGJvZHkuZGFyaykgLmNocmlzdGlhbml0eS1zbG90LFxuICAgICAgOmhvc3QtY29udGV4dChbZGF0YS10aGVtZT0nZGFyayddKSAuY2hyaXN0aWFuaXR5LXNsb3Qge1xuICAgICAgICBib3JkZXItY29sb3I6IHJnYmEoMTQ4LCAxNjMsIDE4NCwgMC4yNCk7XG4gICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMTUsIDIzLCA0MiwgMC41NCk7XG4gICAgICB9XG5cbiAgICAgIDpob3N0LWNvbnRleHQoLmRhcmspIC5jaHJpc3RpYW5pdHktc2xvdC0tcGxheS10YXJnZXQsXG4gICAgICA6aG9zdC1jb250ZXh0KC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LXNsb3QtLXBsYXktdGFyZ2V0LFxuICAgICAgOmhvc3QtY29udGV4dChodG1sLmlvbi1wYWxldHRlLWRhcmspIC5jaHJpc3RpYW5pdHktc2xvdC0tcGxheS10YXJnZXQsXG4gICAgICA6aG9zdC1jb250ZXh0KGJvZHkuZGFyaykgLmNocmlzdGlhbml0eS1zbG90LS1wbGF5LXRhcmdldCxcbiAgICAgIDpob3N0LWNvbnRleHQoW2RhdGEtdGhlbWU9J2RhcmsnXSkgLmNocmlzdGlhbml0eS1zbG90LS1wbGF5LXRhcmdldCB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1jaHJpc3RpYW5pdHktdGhlbWUtaW5rKTtcbiAgICAgICAgYmFja2dyb3VuZDpcbiAgICAgICAgICBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDM3LCA5OSwgMjM1LCAwLjI0KSwgcmdiYSgxNSwgMjMsIDQyLCAwLjc4KSksXG4gICAgICAgICAgcmdiYSgxNSwgMjMsIDQyLCAwLjc0KTtcbiAgICAgIH1cblxuICAgICAgOmhvc3QtY29udGV4dCguZGFyaykgLmNocmlzdGlhbml0eS1zbG90LS1wbGF5LXRhcmdldCBzcGFuLFxuICAgICAgOmhvc3QtY29udGV4dCguaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS1zbG90LS1wbGF5LXRhcmdldCBzcGFuLFxuICAgICAgOmhvc3QtY29udGV4dChodG1sLmlvbi1wYWxldHRlLWRhcmspIC5jaHJpc3RpYW5pdHktc2xvdC0tcGxheS10YXJnZXQgc3BhbixcbiAgICAgIDpob3N0LWNvbnRleHQoYm9keS5kYXJrKSAuY2hyaXN0aWFuaXR5LXNsb3QtLXBsYXktdGFyZ2V0IHNwYW4sXG4gICAgICA6aG9zdC1jb250ZXh0KFtkYXRhLXRoZW1lPSdkYXJrJ10pIC5jaHJpc3RpYW5pdHktc2xvdC0tcGxheS10YXJnZXQgc3BhbixcbiAgICAgIDpob3N0LWNvbnRleHQoLmRhcmspIC5jaHJpc3RpYW5pdHktY2FyZCBzdHJvbmcsXG4gICAgICA6aG9zdC1jb250ZXh0KC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LWNhcmQgc3Ryb25nLFxuICAgICAgOmhvc3QtY29udGV4dChodG1sLmlvbi1wYWxldHRlLWRhcmspIC5jaHJpc3RpYW5pdHktY2FyZCBzdHJvbmcsXG4gICAgICA6aG9zdC1jb250ZXh0KGJvZHkuZGFyaykgLmNocmlzdGlhbml0eS1jYXJkIHN0cm9uZyxcbiAgICAgIDpob3N0LWNvbnRleHQoW2RhdGEtdGhlbWU9J2RhcmsnXSkgLmNocmlzdGlhbml0eS1jYXJkIHN0cm9uZyB7XG4gICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMzAsIDQxLCA1OSwgMC45Mik7XG4gICAgICB9XG5cbiAgICAgIDpob3N0LWNvbnRleHQoLmRhcmspIC5jaHJpc3RpYW5pdHktb2ZmZXJpbmctcGlsZSxcbiAgICAgIDpob3N0LWNvbnRleHQoLmlvbi1wYWxldHRlLWRhcmspIC5jaHJpc3RpYW5pdHktb2ZmZXJpbmctcGlsZSxcbiAgICAgIDpob3N0LWNvbnRleHQoaHRtbC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LW9mZmVyaW5nLXBpbGUsXG4gICAgICA6aG9zdC1jb250ZXh0KGJvZHkuZGFyaykgLmNocmlzdGlhbml0eS1vZmZlcmluZy1waWxlLFxuICAgICAgOmhvc3QtY29udGV4dChbZGF0YS10aGVtZT0nZGFyayddKSAuY2hyaXN0aWFuaXR5LW9mZmVyaW5nLXBpbGUsXG4gICAgICA6aG9zdC1jb250ZXh0KC5kYXJrKSAuY2hyaXN0aWFuaXR5LXpvbmUtY2FyZCxcbiAgICAgIDpob3N0LWNvbnRleHQoLmlvbi1wYWxldHRlLWRhcmspIC5jaHJpc3RpYW5pdHktem9uZS1jYXJkLFxuICAgICAgOmhvc3QtY29udGV4dChodG1sLmlvbi1wYWxldHRlLWRhcmspIC5jaHJpc3RpYW5pdHktem9uZS1jYXJkLFxuICAgICAgOmhvc3QtY29udGV4dChib2R5LmRhcmspIC5jaHJpc3RpYW5pdHktem9uZS1jYXJkLFxuICAgICAgOmhvc3QtY29udGV4dChbZGF0YS10aGVtZT0nZGFyayddKSAuY2hyaXN0aWFuaXR5LXpvbmUtY2FyZCxcbiAgICAgIDpob3N0LWNvbnRleHQoLmRhcmspIC5jaHJpc3RpYW5pdHktem9uZS1waWxlLFxuICAgICAgOmhvc3QtY29udGV4dCguaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS16b25lLXBpbGUsXG4gICAgICA6aG9zdC1jb250ZXh0KGh0bWwuaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS16b25lLXBpbGUsXG4gICAgICA6aG9zdC1jb250ZXh0KGJvZHkuZGFyaykgLmNocmlzdGlhbml0eS16b25lLXBpbGUsXG4gICAgICA6aG9zdC1jb250ZXh0KFtkYXRhLXRoZW1lPSdkYXJrJ10pIC5jaHJpc3RpYW5pdHktem9uZS1waWxlIHtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiByZ2JhKDE0OCwgMTYzLCAxODQsIDAuMjQpO1xuICAgICAgICBiYWNrZ3JvdW5kOlxuICAgICAgICAgIGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHJnYmEoMTcsIDI0LCAzOSwgMC45NiksIHJnYmEoMTUsIDIzLCA0MiwgMC45NCkpLFxuICAgICAgICAgIHJhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQgMTQlIDAlLCByZ2JhKDk2LCAxNjUsIDI1MCwgMC4xMiksIHRyYW5zcGFyZW50IDQyJSk7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1jaHJpc3RpYW5pdHktdGhlbWUtaW5rKTtcbiAgICAgICAgYm94LXNoYWRvdzpcbiAgICAgICAgICAwIDAuNTVyZW0gMS4yNXJlbSByZ2JhKDAsIDAsIDAsIDAuMjgpLFxuICAgICAgICAgIGluc2V0IDAgMCAwIDAuMTJyZW0gcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjAzKTtcbiAgICAgIH1cblxuICAgICAgOmhvc3QtY29udGV4dCguZGFyaykgLmNocmlzdGlhbml0eS1vZmZlcmluZy1waWxlID4gc3BhbixcbiAgICAgIDpob3N0LWNvbnRleHQoLmlvbi1wYWxldHRlLWRhcmspIC5jaHJpc3RpYW5pdHktb2ZmZXJpbmctcGlsZSA+IHNwYW4sXG4gICAgICA6aG9zdC1jb250ZXh0KGh0bWwuaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS1vZmZlcmluZy1waWxlID4gc3BhbixcbiAgICAgIDpob3N0LWNvbnRleHQoYm9keS5kYXJrKSAuY2hyaXN0aWFuaXR5LW9mZmVyaW5nLXBpbGUgPiBzcGFuLFxuICAgICAgOmhvc3QtY29udGV4dChbZGF0YS10aGVtZT0nZGFyayddKSAuY2hyaXN0aWFuaXR5LW9mZmVyaW5nLXBpbGUgPiBzcGFuLFxuICAgICAgOmhvc3QtY29udGV4dCguZGFyaykgLmNocmlzdGlhbml0eS16b25lLWNhcmQgPiBzcGFuLFxuICAgICAgOmhvc3QtY29udGV4dCguaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS16b25lLWNhcmQgPiBzcGFuLFxuICAgICAgOmhvc3QtY29udGV4dChodG1sLmlvbi1wYWxldHRlLWRhcmspIC5jaHJpc3RpYW5pdHktem9uZS1jYXJkID4gc3BhbixcbiAgICAgIDpob3N0LWNvbnRleHQoYm9keS5kYXJrKSAuY2hyaXN0aWFuaXR5LXpvbmUtY2FyZCA+IHNwYW4sXG4gICAgICA6aG9zdC1jb250ZXh0KFtkYXRhLXRoZW1lPSdkYXJrJ10pIC5jaHJpc3RpYW5pdHktem9uZS1jYXJkID4gc3BhbixcbiAgICAgIDpob3N0LWNvbnRleHQoLmRhcmspIC5jaHJpc3RpYW5pdHktem9uZS1waWxlID4gc3BhbixcbiAgICAgIDpob3N0LWNvbnRleHQoLmlvbi1wYWxldHRlLWRhcmspIC5jaHJpc3RpYW5pdHktem9uZS1waWxlID4gc3BhbixcbiAgICAgIDpob3N0LWNvbnRleHQoaHRtbC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LXpvbmUtcGlsZSA+IHNwYW4sXG4gICAgICA6aG9zdC1jb250ZXh0KGJvZHkuZGFyaykgLmNocmlzdGlhbml0eS16b25lLXBpbGUgPiBzcGFuLFxuICAgICAgOmhvc3QtY29udGV4dChbZGF0YS10aGVtZT0nZGFyayddKSAuY2hyaXN0aWFuaXR5LXpvbmUtcGlsZSA+IHNwYW4sXG4gICAgICA6aG9zdC1jb250ZXh0KC5kYXJrKSAuY2hyaXN0aWFuaXR5LXBsYXllci1iYWRnZSxcbiAgICAgIDpob3N0LWNvbnRleHQoLmlvbi1wYWxldHRlLWRhcmspIC5jaHJpc3RpYW5pdHktcGxheWVyLWJhZGdlLFxuICAgICAgOmhvc3QtY29udGV4dChodG1sLmlvbi1wYWxldHRlLWRhcmspIC5jaHJpc3RpYW5pdHktcGxheWVyLWJhZGdlLFxuICAgICAgOmhvc3QtY29udGV4dChib2R5LmRhcmspIC5jaHJpc3RpYW5pdHktcGxheWVyLWJhZGdlLFxuICAgICAgOmhvc3QtY29udGV4dChbZGF0YS10aGVtZT0nZGFyayddKSAuY2hyaXN0aWFuaXR5LXBsYXllci1iYWRnZSB7XG4gICAgICAgIGNvbG9yOiByZ2JhKDIyNiwgMjMyLCAyNDAsIDAuNzgpO1xuICAgICAgfVxuXG4gICAgICA6aG9zdC1jb250ZXh0KC5kYXJrKSAuY2hyaXN0aWFuaXR5LW9mZmVyaW5nLXBpbGUgPiBzdHJvbmcsXG4gICAgICA6aG9zdC1jb250ZXh0KC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LW9mZmVyaW5nLXBpbGUgPiBzdHJvbmcsXG4gICAgICA6aG9zdC1jb250ZXh0KGh0bWwuaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS1vZmZlcmluZy1waWxlID4gc3Ryb25nLFxuICAgICAgOmhvc3QtY29udGV4dChib2R5LmRhcmspIC5jaHJpc3RpYW5pdHktb2ZmZXJpbmctcGlsZSA+IHN0cm9uZyxcbiAgICAgIDpob3N0LWNvbnRleHQoW2RhdGEtdGhlbWU9J2RhcmsnXSkgLmNocmlzdGlhbml0eS1vZmZlcmluZy1waWxlID4gc3Ryb25nLFxuICAgICAgOmhvc3QtY29udGV4dCguZGFyaykgLmNocmlzdGlhbml0eS16b25lLWNhcmQgPiBzdHJvbmcsXG4gICAgICA6aG9zdC1jb250ZXh0KC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LXpvbmUtY2FyZCA+IHN0cm9uZyxcbiAgICAgIDpob3N0LWNvbnRleHQoaHRtbC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LXpvbmUtY2FyZCA+IHN0cm9uZyxcbiAgICAgIDpob3N0LWNvbnRleHQoYm9keS5kYXJrKSAuY2hyaXN0aWFuaXR5LXpvbmUtY2FyZCA+IHN0cm9uZyxcbiAgICAgIDpob3N0LWNvbnRleHQoW2RhdGEtdGhlbWU9J2RhcmsnXSkgLmNocmlzdGlhbml0eS16b25lLWNhcmQgPiBzdHJvbmcsXG4gICAgICA6aG9zdC1jb250ZXh0KC5kYXJrKSAuY2hyaXN0aWFuaXR5LXpvbmUtcGlsZSA+IHN0cm9uZyxcbiAgICAgIDpob3N0LWNvbnRleHQoLmlvbi1wYWxldHRlLWRhcmspIC5jaHJpc3RpYW5pdHktem9uZS1waWxlID4gc3Ryb25nLFxuICAgICAgOmhvc3QtY29udGV4dChodG1sLmlvbi1wYWxldHRlLWRhcmspIC5jaHJpc3RpYW5pdHktem9uZS1waWxlID4gc3Ryb25nLFxuICAgICAgOmhvc3QtY29udGV4dChib2R5LmRhcmspIC5jaHJpc3RpYW5pdHktem9uZS1waWxlID4gc3Ryb25nLFxuICAgICAgOmhvc3QtY29udGV4dChbZGF0YS10aGVtZT0nZGFyayddKSAuY2hyaXN0aWFuaXR5LXpvbmUtcGlsZSA+IHN0cm9uZyxcbiAgICAgIDpob3N0LWNvbnRleHQoLmRhcmspIC5jaHJpc3RpYW5pdHktaGFuZC1tZXRlcixcbiAgICAgIDpob3N0LWNvbnRleHQoLmlvbi1wYWxldHRlLWRhcmspIC5jaHJpc3RpYW5pdHktaGFuZC1tZXRlcixcbiAgICAgIDpob3N0LWNvbnRleHQoaHRtbC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LWhhbmQtbWV0ZXIsXG4gICAgICA6aG9zdC1jb250ZXh0KGJvZHkuZGFyaykgLmNocmlzdGlhbml0eS1oYW5kLW1ldGVyLFxuICAgICAgOmhvc3QtY29udGV4dChbZGF0YS10aGVtZT0nZGFyayddKSAuY2hyaXN0aWFuaXR5LWhhbmQtbWV0ZXIge1xuICAgICAgICBib3JkZXItY29sb3I6IHJnYmEoMTQ4LCAxNjMsIDE4NCwgMC4yKTtcbiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgxNSwgMjMsIDQyLCAwLjg4KTtcbiAgICAgICAgY29sb3I6IHZhcigtLWNocmlzdGlhbml0eS10aGVtZS1pbmspO1xuICAgICAgICBib3gtc2hhZG93OiAwIDAuMzVyZW0gMC44cmVtIHJnYmEoMCwgMCwgMCwgMC4yOCk7XG4gICAgICB9XG5cbiAgICAgIDpob3N0LWNvbnRleHQoLmRhcmspIC5jaHJpc3RpYW5pdHktaGFuZC1tZXRlciBzcGFuLFxuICAgICAgOmhvc3QtY29udGV4dCguaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS1oYW5kLW1ldGVyIHNwYW4sXG4gICAgICA6aG9zdC1jb250ZXh0KGh0bWwuaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS1oYW5kLW1ldGVyIHNwYW4sXG4gICAgICA6aG9zdC1jb250ZXh0KGJvZHkuZGFyaykgLmNocmlzdGlhbml0eS1oYW5kLW1ldGVyIHNwYW4sXG4gICAgICA6aG9zdC1jb250ZXh0KFtkYXRhLXRoZW1lPSdkYXJrJ10pIC5jaHJpc3RpYW5pdHktaGFuZC1tZXRlciBzcGFuIHtcbiAgICAgICAgY29sb3I6IHJnYmEoMjI2LCAyMzIsIDI0MCwgMC43KTtcbiAgICAgIH1cblxuICAgICAgOmhvc3QtY29udGV4dCguZGFyaykgLmNocmlzdGlhbml0eS1vZmZlcmluZy1waWxlIGksXG4gICAgICA6aG9zdC1jb250ZXh0KC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LW9mZmVyaW5nLXBpbGUgaSxcbiAgICAgIDpob3N0LWNvbnRleHQoaHRtbC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LW9mZmVyaW5nLXBpbGUgaSxcbiAgICAgIDpob3N0LWNvbnRleHQoYm9keS5kYXJrKSAuY2hyaXN0aWFuaXR5LW9mZmVyaW5nLXBpbGUgaSxcbiAgICAgIDpob3N0LWNvbnRleHQoW2RhdGEtdGhlbWU9J2RhcmsnXSkgLmNocmlzdGlhbml0eS1vZmZlcmluZy1waWxlIGkge1xuICAgICAgICBib3JkZXItY29sb3I6IHJnYmEoMTQ4LCAxNjMsIDE4NCwgMC4yKTtcbiAgICAgICAgYmFja2dyb3VuZDpcbiAgICAgICAgICBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDIyNiwgMjMyLCAyNDAsIDAuOTQpLCByZ2JhKDIwMywgMjEzLCAyMjUsIDAuOSkpLFxuICAgICAgICAgIHJhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQgNzglIDE4JSwgI2ZhY2MxNSAwIDAuMzhyZW0sIHRyYW5zcGFyZW50IDAuNHJlbSk7XG4gICAgICB9XG5cbiAgICAgIDpob3N0LWNvbnRleHQoLmRhcmspIC5jaHJpc3RpYW5pdHktem9uZS1waWxlIGksXG4gICAgICA6aG9zdC1jb250ZXh0KC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LXpvbmUtcGlsZSBpLFxuICAgICAgOmhvc3QtY29udGV4dChodG1sLmlvbi1wYWxldHRlLWRhcmspIC5jaHJpc3RpYW5pdHktem9uZS1waWxlIGksXG4gICAgICA6aG9zdC1jb250ZXh0KGJvZHkuZGFyaykgLmNocmlzdGlhbml0eS16b25lLXBpbGUgaSxcbiAgICAgIDpob3N0LWNvbnRleHQoW2RhdGEtdGhlbWU9J2RhcmsnXSkgLmNocmlzdGlhbml0eS16b25lLXBpbGUgaSB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogcmdiYSgxNDgsIDE2MywgMTg0LCAwLjIyKTtcbiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyMjYsIDIzMiwgMjQwLCAwLjkyKTtcbiAgICAgICAgYm94LXNoYWRvdzogMCAwLjM1cmVtIDAuODVyZW0gcmdiYSgwLCAwLCAwLCAwLjI2KTtcbiAgICAgIH1cblxuICAgICAgOmhvc3QtY29udGV4dCguZGFyaykgLmNocmlzdGlhbml0eS16b25lLXBpbGUgaTpudGgtY2hpbGQoMyksXG4gICAgICA6aG9zdC1jb250ZXh0KC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LXpvbmUtcGlsZSBpOm50aC1jaGlsZCgzKSxcbiAgICAgIDpob3N0LWNvbnRleHQoaHRtbC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LXpvbmUtcGlsZSBpOm50aC1jaGlsZCgzKSxcbiAgICAgIDpob3N0LWNvbnRleHQoYm9keS5kYXJrKSAuY2hyaXN0aWFuaXR5LXpvbmUtcGlsZSBpOm50aC1jaGlsZCgzKSxcbiAgICAgIDpob3N0LWNvbnRleHQoW2RhdGEtdGhlbWU9J2RhcmsnXSkgLmNocmlzdGlhbml0eS16b25lLXBpbGUgaTpudGgtY2hpbGQoMykge1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jaHJpc3RpYW5pdHktY2FyZC1iYWNrKTtcbiAgICAgIH1cblxuICAgICAgOmhvc3QtY29udGV4dCguZGFyaykgLmNocmlzdGlhbml0eS1lbmQtdHVybjpkaXNhYmxlZCxcbiAgICAgIDpob3N0LWNvbnRleHQoLmlvbi1wYWxldHRlLWRhcmspIC5jaHJpc3RpYW5pdHktZW5kLXR1cm46ZGlzYWJsZWQsXG4gICAgICA6aG9zdC1jb250ZXh0KGh0bWwuaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS1lbmQtdHVybjpkaXNhYmxlZCxcbiAgICAgIDpob3N0LWNvbnRleHQoYm9keS5kYXJrKSAuY2hyaXN0aWFuaXR5LWVuZC10dXJuOmRpc2FibGVkLFxuICAgICAgOmhvc3QtY29udGV4dChbZGF0YS10aGVtZT0nZGFyayddKSAuY2hyaXN0aWFuaXR5LWVuZC10dXJuOmRpc2FibGVkIHtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiByZ2JhKDE0OCwgMTYzLCAxODQsIDAuMTYpO1xuICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDE1LCAyMywgNDIsIDAuNDYpO1xuICAgICAgICBjb2xvcjogcmdiYSgyMjYsIDIzMiwgMjQwLCAwLjQyKTtcbiAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgIH1cblxuICAgICAgOmhvc3QtY29udGV4dCguZGFyaykgLmNocmlzdGlhbml0eS1oaXN0b3J5LWRyYXdlcixcbiAgICAgIDpob3N0LWNvbnRleHQoLmlvbi1wYWxldHRlLWRhcmspIC5jaHJpc3RpYW5pdHktaGlzdG9yeS1kcmF3ZXIsXG4gICAgICA6aG9zdC1jb250ZXh0KGh0bWwuaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS1oaXN0b3J5LWRyYXdlcixcbiAgICAgIDpob3N0LWNvbnRleHQoYm9keS5kYXJrKSAuY2hyaXN0aWFuaXR5LWhpc3RvcnktZHJhd2VyLFxuICAgICAgOmhvc3QtY29udGV4dChbZGF0YS10aGVtZT0nZGFyayddKSAuY2hyaXN0aWFuaXR5LWhpc3RvcnktZHJhd2VyLFxuICAgICAgOmhvc3QtY29udGV4dCguZGFyaykgLmNocmlzdGlhbml0eS1ydWxlLW5vdGUsXG4gICAgICA6aG9zdC1jb250ZXh0KC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LXJ1bGUtbm90ZSxcbiAgICAgIDpob3N0LWNvbnRleHQoaHRtbC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LXJ1bGUtbm90ZSxcbiAgICAgIDpob3N0LWNvbnRleHQoYm9keS5kYXJrKSAuY2hyaXN0aWFuaXR5LXJ1bGUtbm90ZSxcbiAgICAgIDpob3N0LWNvbnRleHQoW2RhdGEtdGhlbWU9J2RhcmsnXSkgLmNocmlzdGlhbml0eS1ydWxlLW5vdGUsXG4gICAgICA6aG9zdC1jb250ZXh0KC5kYXJrKSAuY2hyaXN0aWFuaXR5LXByZXZpZXctcnVsZS1ub3RlLFxuICAgICAgOmhvc3QtY29udGV4dCguaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS1wcmV2aWV3LXJ1bGUtbm90ZSxcbiAgICAgIDpob3N0LWNvbnRleHQoaHRtbC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LXByZXZpZXctcnVsZS1ub3RlLFxuICAgICAgOmhvc3QtY29udGV4dChib2R5LmRhcmspIC5jaHJpc3RpYW5pdHktcHJldmlldy1ydWxlLW5vdGUsXG4gICAgICA6aG9zdC1jb250ZXh0KFtkYXRhLXRoZW1lPSdkYXJrJ10pIC5jaHJpc3RpYW5pdHktcHJldmlldy1ydWxlLW5vdGUge1xuICAgICAgICBib3JkZXItY29sb3I6IHJnYmEoMTQ4LCAxNjMsIDE4NCwgMC4xOCk7XG4gICAgICAgIGJhY2tncm91bmQ6XG4gICAgICAgICAgbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSgxNSwgMjMsIDQyLCAwLjk2KSwgcmdiYSgxNywgMjQsIDM5LCAwLjk2KSksXG4gICAgICAgICAgcmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCA4JSAwJSwgcmdiYSg5NiwgMTY1LCAyNTAsIDAuMTIpLCB0cmFuc3BhcmVudCA0MCUpO1xuICAgICAgICBib3gtc2hhZG93OiAwIDEuNXJlbSA0cmVtIHJnYmEoMCwgMCwgMCwgMC40Mik7XG4gICAgICB9XG5cbiAgICAgIDpob3N0LWNvbnRleHQoLmRhcmspIC5jaHJpc3RpYW5pdHktZGlhbG9nLWNsb3NlLFxuICAgICAgOmhvc3QtY29udGV4dCguaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS1kaWFsb2ctY2xvc2UsXG4gICAgICA6aG9zdC1jb250ZXh0KGh0bWwuaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS1kaWFsb2ctY2xvc2UsXG4gICAgICA6aG9zdC1jb250ZXh0KGJvZHkuZGFyaykgLmNocmlzdGlhbml0eS1kaWFsb2ctY2xvc2UsXG4gICAgICA6aG9zdC1jb250ZXh0KFtkYXRhLXRoZW1lPSdkYXJrJ10pIC5jaHJpc3RpYW5pdHktZGlhbG9nLWNsb3NlLFxuICAgICAgOmhvc3QtY29udGV4dCguZGFyaykgLmNocmlzdGlhbml0eS1mbG9hdGluZy1jYXJkLWNsb3NlLFxuICAgICAgOmhvc3QtY29udGV4dCguaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS1mbG9hdGluZy1jYXJkLWNsb3NlLFxuICAgICAgOmhvc3QtY29udGV4dChodG1sLmlvbi1wYWxldHRlLWRhcmspIC5jaHJpc3RpYW5pdHktZmxvYXRpbmctY2FyZC1jbG9zZSxcbiAgICAgIDpob3N0LWNvbnRleHQoYm9keS5kYXJrKSAuY2hyaXN0aWFuaXR5LWZsb2F0aW5nLWNhcmQtY2xvc2UsXG4gICAgICA6aG9zdC1jb250ZXh0KFtkYXRhLXRoZW1lPSdkYXJrJ10pIC5jaHJpc3RpYW5pdHktZmxvYXRpbmctY2FyZC1jbG9zZSxcbiAgICAgIDpob3N0LWNvbnRleHQoLmRhcmspIC5jaHJpc3RpYW5pdHktcHJldmlldy1uYXYsXG4gICAgICA6aG9zdC1jb250ZXh0KC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LXByZXZpZXctbmF2LFxuICAgICAgOmhvc3QtY29udGV4dChodG1sLmlvbi1wYWxldHRlLWRhcmspIC5jaHJpc3RpYW5pdHktcHJldmlldy1uYXYsXG4gICAgICA6aG9zdC1jb250ZXh0KGJvZHkuZGFyaykgLmNocmlzdGlhbml0eS1wcmV2aWV3LW5hdixcbiAgICAgIDpob3N0LWNvbnRleHQoW2RhdGEtdGhlbWU9J2RhcmsnXSkgLmNocmlzdGlhbml0eS1wcmV2aWV3LW5hdiB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogcmdiYSgxNDgsIDE2MywgMTg0LCAwLjIyKTtcbiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgxNSwgMjMsIDQyLCAwLjk0KTtcbiAgICAgICAgY29sb3I6IHZhcigtLWNocmlzdGlhbml0eS10aGVtZS1pbmspO1xuICAgICAgICBib3gtc2hhZG93OiAwIDAuMzVyZW0gMC44cmVtIHJnYmEoMCwgMCwgMCwgMC4zKTtcbiAgICAgIH1cblxuICAgICAgOmhvc3QtY29udGV4dCguZGFyaykgLmNocmlzdGlhbml0eS1oaXN0b3J5LWRyYXdlciBoZWFkZXIgc3BhbixcbiAgICAgIDpob3N0LWNvbnRleHQoLmlvbi1wYWxldHRlLWRhcmspIC5jaHJpc3RpYW5pdHktaGlzdG9yeS1kcmF3ZXIgaGVhZGVyIHNwYW4sXG4gICAgICA6aG9zdC1jb250ZXh0KGh0bWwuaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS1oaXN0b3J5LWRyYXdlciBoZWFkZXIgc3BhbixcbiAgICAgIDpob3N0LWNvbnRleHQoYm9keS5kYXJrKSAuY2hyaXN0aWFuaXR5LWhpc3RvcnktZHJhd2VyIGhlYWRlciBzcGFuLFxuICAgICAgOmhvc3QtY29udGV4dChbZGF0YS10aGVtZT0nZGFyayddKSAuY2hyaXN0aWFuaXR5LWhpc3RvcnktZHJhd2VyIGhlYWRlciBzcGFuLFxuICAgICAgOmhvc3QtY29udGV4dCguZGFyaykgLmNocmlzdGlhbml0eS1ydWxlLW5vdGUgc3Ryb25nLFxuICAgICAgOmhvc3QtY29udGV4dCguaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS1ydWxlLW5vdGUgc3Ryb25nLFxuICAgICAgOmhvc3QtY29udGV4dChodG1sLmlvbi1wYWxldHRlLWRhcmspIC5jaHJpc3RpYW5pdHktcnVsZS1ub3RlIHN0cm9uZyxcbiAgICAgIDpob3N0LWNvbnRleHQoYm9keS5kYXJrKSAuY2hyaXN0aWFuaXR5LXJ1bGUtbm90ZSBzdHJvbmcsXG4gICAgICA6aG9zdC1jb250ZXh0KFtkYXRhLXRoZW1lPSdkYXJrJ10pIC5jaHJpc3RpYW5pdHktcnVsZS1ub3RlIHN0cm9uZyB7XG4gICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMzAsIDQxLCA1OSwgMC45Mik7XG4gICAgICB9XG5cbiAgICAgIDpob3N0LWNvbnRleHQoLmRhcmspIC5jaHJpc3RpYW5pdHktcnVsZS1ub3RlIHNtYWxsLFxuICAgICAgOmhvc3QtY29udGV4dCguaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS1ydWxlLW5vdGUgc21hbGwsXG4gICAgICA6aG9zdC1jb250ZXh0KGh0bWwuaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS1ydWxlLW5vdGUgc21hbGwsXG4gICAgICA6aG9zdC1jb250ZXh0KGJvZHkuZGFyaykgLmNocmlzdGlhbml0eS1ydWxlLW5vdGUgc21hbGwsXG4gICAgICA6aG9zdC1jb250ZXh0KFtkYXRhLXRoZW1lPSdkYXJrJ10pIC5jaHJpc3RpYW5pdHktcnVsZS1ub3RlIHNtYWxsLFxuICAgICAgOmhvc3QtY29udGV4dCguZGFyaykgLmNocmlzdGlhbml0eS1wcmV2aWV3LXJ1bGUtbm90ZSBzbWFsbCxcbiAgICAgIDpob3N0LWNvbnRleHQoLmlvbi1wYWxldHRlLWRhcmspIC5jaHJpc3RpYW5pdHktcHJldmlldy1ydWxlLW5vdGUgc21hbGwsXG4gICAgICA6aG9zdC1jb250ZXh0KGh0bWwuaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS1wcmV2aWV3LXJ1bGUtbm90ZSBzbWFsbCxcbiAgICAgIDpob3N0LWNvbnRleHQoYm9keS5kYXJrKSAuY2hyaXN0aWFuaXR5LXByZXZpZXctcnVsZS1ub3RlIHNtYWxsLFxuICAgICAgOmhvc3QtY29udGV4dChbZGF0YS10aGVtZT0nZGFyayddKSAuY2hyaXN0aWFuaXR5LXByZXZpZXctcnVsZS1ub3RlIHNtYWxsLFxuICAgICAgOmhvc3QtY29udGV4dCguZGFyaykgLmNocmlzdGlhbml0eS1nYWxsZXJ5LWRyYXdlciBoZWFkZXIgcCxcbiAgICAgIDpob3N0LWNvbnRleHQoLmlvbi1wYWxldHRlLWRhcmspIC5jaHJpc3RpYW5pdHktZ2FsbGVyeS1kcmF3ZXIgaGVhZGVyIHAsXG4gICAgICA6aG9zdC1jb250ZXh0KGh0bWwuaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS1nYWxsZXJ5LWRyYXdlciBoZWFkZXIgcCxcbiAgICAgIDpob3N0LWNvbnRleHQoYm9keS5kYXJrKSAuY2hyaXN0aWFuaXR5LWdhbGxlcnktZHJhd2VyIGhlYWRlciBwLFxuICAgICAgOmhvc3QtY29udGV4dChbZGF0YS10aGVtZT0nZGFyayddKSAuY2hyaXN0aWFuaXR5LWdhbGxlcnktZHJhd2VyIGhlYWRlciBwLFxuICAgICAgOmhvc3QtY29udGV4dCguZGFyaykgLmNocmlzdGlhbml0eS1nYWxsZXJ5LWNvbnRyb2xzIGxhYmVsLFxuICAgICAgOmhvc3QtY29udGV4dCguaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS1nYWxsZXJ5LWNvbnRyb2xzIGxhYmVsLFxuICAgICAgOmhvc3QtY29udGV4dChodG1sLmlvbi1wYWxldHRlLWRhcmspIC5jaHJpc3RpYW5pdHktZ2FsbGVyeS1jb250cm9scyBsYWJlbCxcbiAgICAgIDpob3N0LWNvbnRleHQoYm9keS5kYXJrKSAuY2hyaXN0aWFuaXR5LWdhbGxlcnktY29udHJvbHMgbGFiZWwsXG4gICAgICA6aG9zdC1jb250ZXh0KFtkYXRhLXRoZW1lPSdkYXJrJ10pIC5jaHJpc3RpYW5pdHktZ2FsbGVyeS1jb250cm9scyBsYWJlbCB7XG4gICAgICAgIGNvbG9yOiByZ2JhKDIyNiwgMjMyLCAyNDAsIDAuNjgpO1xuICAgICAgfVxuXG4gICAgICA6aG9zdC1jb250ZXh0KC5kYXJrKSAuY2hyaXN0aWFuaXR5LXJ1bGUtbm90ZSBwLFxuICAgICAgOmhvc3QtY29udGV4dCguaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS1ydWxlLW5vdGUgcCxcbiAgICAgIDpob3N0LWNvbnRleHQoaHRtbC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LXJ1bGUtbm90ZSBwLFxuICAgICAgOmhvc3QtY29udGV4dChib2R5LmRhcmspIC5jaHJpc3RpYW5pdHktcnVsZS1ub3RlIHAsXG4gICAgICA6aG9zdC1jb250ZXh0KFtkYXRhLXRoZW1lPSdkYXJrJ10pIC5jaHJpc3RpYW5pdHktcnVsZS1ub3RlIHAsXG4gICAgICA6aG9zdC1jb250ZXh0KC5kYXJrKSAuY2hyaXN0aWFuaXR5LXJ1bGUtbm90ZSB1bCxcbiAgICAgIDpob3N0LWNvbnRleHQoLmlvbi1wYWxldHRlLWRhcmspIC5jaHJpc3RpYW5pdHktcnVsZS1ub3RlIHVsLFxuICAgICAgOmhvc3QtY29udGV4dChodG1sLmlvbi1wYWxldHRlLWRhcmspIC5jaHJpc3RpYW5pdHktcnVsZS1ub3RlIHVsLFxuICAgICAgOmhvc3QtY29udGV4dChib2R5LmRhcmspIC5jaHJpc3RpYW5pdHktcnVsZS1ub3RlIHVsLFxuICAgICAgOmhvc3QtY29udGV4dChbZGF0YS10aGVtZT0nZGFyayddKSAuY2hyaXN0aWFuaXR5LXJ1bGUtbm90ZSB1bCxcbiAgICAgIDpob3N0LWNvbnRleHQoLmRhcmspIC5jaHJpc3RpYW5pdHktcHJldmlldy1ydWxlLW5vdGUgcCxcbiAgICAgIDpob3N0LWNvbnRleHQoLmlvbi1wYWxldHRlLWRhcmspIC5jaHJpc3RpYW5pdHktcHJldmlldy1ydWxlLW5vdGUgcCxcbiAgICAgIDpob3N0LWNvbnRleHQoaHRtbC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LXByZXZpZXctcnVsZS1ub3RlIHAsXG4gICAgICA6aG9zdC1jb250ZXh0KGJvZHkuZGFyaykgLmNocmlzdGlhbml0eS1wcmV2aWV3LXJ1bGUtbm90ZSBwLFxuICAgICAgOmhvc3QtY29udGV4dChbZGF0YS10aGVtZT0nZGFyayddKSAuY2hyaXN0aWFuaXR5LXByZXZpZXctcnVsZS1ub3RlIHAsXG4gICAgICA6aG9zdC1jb250ZXh0KC5kYXJrKSAuY2hyaXN0aWFuaXR5LW9mZmVyaW5ncy1ub3RlIHAsXG4gICAgICA6aG9zdC1jb250ZXh0KC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LW9mZmVyaW5ncy1ub3RlIHAsXG4gICAgICA6aG9zdC1jb250ZXh0KGh0bWwuaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS1vZmZlcmluZ3Mtbm90ZSBwLFxuICAgICAgOmhvc3QtY29udGV4dChib2R5LmRhcmspIC5jaHJpc3RpYW5pdHktb2ZmZXJpbmdzLW5vdGUgcCxcbiAgICAgIDpob3N0LWNvbnRleHQoW2RhdGEtdGhlbWU9J2RhcmsnXSkgLmNocmlzdGlhbml0eS1vZmZlcmluZ3Mtbm90ZSBwIHtcbiAgICAgICAgY29sb3I6IHJnYmEoMjI2LCAyMzIsIDI0MCwgMC44KTtcbiAgICAgIH1cblxuICAgICAgOmhvc3QtY29udGV4dCguZGFyaykgLmNocmlzdGlhbml0eS1nYWxsZXJ5LWNvbnRyb2xzIGlucHV0LFxuICAgICAgOmhvc3QtY29udGV4dCguaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS1nYWxsZXJ5LWNvbnRyb2xzIGlucHV0LFxuICAgICAgOmhvc3QtY29udGV4dChodG1sLmlvbi1wYWxldHRlLWRhcmspIC5jaHJpc3RpYW5pdHktZ2FsbGVyeS1jb250cm9scyBpbnB1dCxcbiAgICAgIDpob3N0LWNvbnRleHQoYm9keS5kYXJrKSAuY2hyaXN0aWFuaXR5LWdhbGxlcnktY29udHJvbHMgaW5wdXQsXG4gICAgICA6aG9zdC1jb250ZXh0KFtkYXRhLXRoZW1lPSdkYXJrJ10pIC5jaHJpc3RpYW5pdHktZ2FsbGVyeS1jb250cm9scyBpbnB1dCxcbiAgICAgIDpob3N0LWNvbnRleHQoLmRhcmspIC5jaHJpc3RpYW5pdHktZ2FsbGVyeS1jb250cm9scyBzZWxlY3QsXG4gICAgICA6aG9zdC1jb250ZXh0KC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LWdhbGxlcnktY29udHJvbHMgc2VsZWN0LFxuICAgICAgOmhvc3QtY29udGV4dChodG1sLmlvbi1wYWxldHRlLWRhcmspIC5jaHJpc3RpYW5pdHktZ2FsbGVyeS1jb250cm9scyBzZWxlY3QsXG4gICAgICA6aG9zdC1jb250ZXh0KGJvZHkuZGFyaykgLmNocmlzdGlhbml0eS1nYWxsZXJ5LWNvbnRyb2xzIHNlbGVjdCxcbiAgICAgIDpob3N0LWNvbnRleHQoW2RhdGEtdGhlbWU9J2RhcmsnXSkgLmNocmlzdGlhbml0eS1nYWxsZXJ5LWNvbnRyb2xzIHNlbGVjdCxcbiAgICAgIDpob3N0LWNvbnRleHQoLmRhcmspIC5jaHJpc3RpYW5pdHktb2ZmZXJpbmctcm93LFxuICAgICAgOmhvc3QtY29udGV4dCguaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS1vZmZlcmluZy1yb3csXG4gICAgICA6aG9zdC1jb250ZXh0KGh0bWwuaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS1vZmZlcmluZy1yb3csXG4gICAgICA6aG9zdC1jb250ZXh0KGJvZHkuZGFyaykgLmNocmlzdGlhbml0eS1vZmZlcmluZy1yb3csXG4gICAgICA6aG9zdC1jb250ZXh0KFtkYXRhLXRoZW1lPSdkYXJrJ10pIC5jaHJpc3RpYW5pdHktb2ZmZXJpbmctcm93LFxuICAgICAgOmhvc3QtY29udGV4dCguZGFyaykgLmNocmlzdGlhbml0eS1vZmZlcmluZ3Mtbm90ZSxcbiAgICAgIDpob3N0LWNvbnRleHQoLmlvbi1wYWxldHRlLWRhcmspIC5jaHJpc3RpYW5pdHktb2ZmZXJpbmdzLW5vdGUsXG4gICAgICA6aG9zdC1jb250ZXh0KGh0bWwuaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS1vZmZlcmluZ3Mtbm90ZSxcbiAgICAgIDpob3N0LWNvbnRleHQoYm9keS5kYXJrKSAuY2hyaXN0aWFuaXR5LW9mZmVyaW5ncy1ub3RlLFxuICAgICAgOmhvc3QtY29udGV4dChbZGF0YS10aGVtZT0nZGFyayddKSAuY2hyaXN0aWFuaXR5LW9mZmVyaW5ncy1ub3RlIHtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiByZ2JhKDE0OCwgMTYzLCAxODQsIDAuMik7XG4gICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMTUsIDIzLCA0MiwgMC43OCk7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1jaHJpc3RpYW5pdHktdGhlbWUtaW5rKTtcbiAgICAgIH1cblxuICAgICAgOmhvc3QtY29udGV4dCguZGFyaykgLmNocmlzdGlhbml0eS1oaXN0b3J5LWdyaWQsXG4gICAgICA6aG9zdC1jb250ZXh0KC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LWhpc3RvcnktZ3JpZCxcbiAgICAgIDpob3N0LWNvbnRleHQoaHRtbC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LWhpc3RvcnktZ3JpZCxcbiAgICAgIDpob3N0LWNvbnRleHQoYm9keS5kYXJrKSAuY2hyaXN0aWFuaXR5LWhpc3RvcnktZ3JpZCxcbiAgICAgIDpob3N0LWNvbnRleHQoW2RhdGEtdGhlbWU9J2RhcmsnXSkgLmNocmlzdGlhbml0eS1oaXN0b3J5LWdyaWQsXG4gICAgICA6aG9zdC1jb250ZXh0KC5kYXJrKSAuY2hyaXN0aWFuaXR5LW9mZmVyaW5nLWxpc3QsXG4gICAgICA6aG9zdC1jb250ZXh0KC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LW9mZmVyaW5nLWxpc3QsXG4gICAgICA6aG9zdC1jb250ZXh0KGh0bWwuaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS1vZmZlcmluZy1saXN0LFxuICAgICAgOmhvc3QtY29udGV4dChib2R5LmRhcmspIC5jaHJpc3RpYW5pdHktb2ZmZXJpbmctbGlzdCxcbiAgICAgIDpob3N0LWNvbnRleHQoW2RhdGEtdGhlbWU9J2RhcmsnXSkgLmNocmlzdGlhbml0eS1vZmZlcmluZy1saXN0LFxuICAgICAgOmhvc3QtY29udGV4dCguZGFyaykgLmNocmlzdGlhbml0eS1nYWxsZXJ5LWdyaWQsXG4gICAgICA6aG9zdC1jb250ZXh0KC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LWdhbGxlcnktZ3JpZCxcbiAgICAgIDpob3N0LWNvbnRleHQoaHRtbC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LWdhbGxlcnktZ3JpZCxcbiAgICAgIDpob3N0LWNvbnRleHQoYm9keS5kYXJrKSAuY2hyaXN0aWFuaXR5LWdhbGxlcnktZ3JpZCxcbiAgICAgIDpob3N0LWNvbnRleHQoW2RhdGEtdGhlbWU9J2RhcmsnXSkgLmNocmlzdGlhbml0eS1nYWxsZXJ5LWdyaWQsXG4gICAgICA6aG9zdC1jb250ZXh0KC5kYXJrKSAuY2hyaXN0aWFuaXR5LXByZXZpZXctcnVsZS1ub3RlLFxuICAgICAgOmhvc3QtY29udGV4dCguaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS1wcmV2aWV3LXJ1bGUtbm90ZSxcbiAgICAgIDpob3N0LWNvbnRleHQoaHRtbC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LXByZXZpZXctcnVsZS1ub3RlLFxuICAgICAgOmhvc3QtY29udGV4dChib2R5LmRhcmspIC5jaHJpc3RpYW5pdHktcHJldmlldy1ydWxlLW5vdGUsXG4gICAgICA6aG9zdC1jb250ZXh0KFtkYXRhLXRoZW1lPSdkYXJrJ10pIC5jaHJpc3RpYW5pdHktcHJldmlldy1ydWxlLW5vdGUge1xuICAgICAgICBzY3JvbGxiYXItY29sb3I6IHJnYmEoMTQ4LCAxNjMsIDE4NCwgMC41NCkgcmdiYSgxNSwgMjMsIDQyLCAwLjg2KTtcbiAgICAgIH1cblxuICAgICAgOmhvc3QtY29udGV4dCguZGFyaykgLmNocmlzdGlhbml0eS1ydWxlLW5vdGUtaWNvbixcbiAgICAgIDpob3N0LWNvbnRleHQoLmlvbi1wYWxldHRlLWRhcmspIC5jaHJpc3RpYW5pdHktcnVsZS1ub3RlLWljb24sXG4gICAgICA6aG9zdC1jb250ZXh0KGh0bWwuaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS1ydWxlLW5vdGUtaWNvbixcbiAgICAgIDpob3N0LWNvbnRleHQoYm9keS5kYXJrKSAuY2hyaXN0aWFuaXR5LXJ1bGUtbm90ZS1pY29uLFxuICAgICAgOmhvc3QtY29udGV4dChbZGF0YS10aGVtZT0nZGFyayddKSAuY2hyaXN0aWFuaXR5LXJ1bGUtbm90ZS1pY29uIHtcbiAgICAgICAgYmFja2dyb3VuZDogcmdiYSg5NiwgMTY1LCAyNTAsIDAuMTYpO1xuICAgICAgICBjb2xvcjogI2JmZGJmZTtcbiAgICAgICAgYm94LXNoYWRvdzogaW5zZXQgMCAwIDAgMXB4IHJnYmEoMTQ3LCAxOTcsIDI1MywgMC4yMik7XG4gICAgICB9XG5cbiAgICAgIDpob3N0LWNvbnRleHQoLmRhcmspIC5jaHJpc3RpYW5pdHktaGlzdG9yeS1ncmlkOjotd2Via2l0LXNjcm9sbGJhci10cmFjayxcbiAgICAgIDpob3N0LWNvbnRleHQoLmlvbi1wYWxldHRlLWRhcmspIC5jaHJpc3RpYW5pdHktaGlzdG9yeS1ncmlkOjotd2Via2l0LXNjcm9sbGJhci10cmFjayxcbiAgICAgIDpob3N0LWNvbnRleHQoaHRtbC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LWhpc3RvcnktZ3JpZDo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2ssXG4gICAgICA6aG9zdC1jb250ZXh0KGJvZHkuZGFyaykgLmNocmlzdGlhbml0eS1oaXN0b3J5LWdyaWQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrLFxuICAgICAgOmhvc3QtY29udGV4dChbZGF0YS10aGVtZT0nZGFyayddKSAuY2hyaXN0aWFuaXR5LWhpc3RvcnktZ3JpZDo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2ssXG4gICAgICA6aG9zdC1jb250ZXh0KC5kYXJrKSAuY2hyaXN0aWFuaXR5LW9mZmVyaW5nLWxpc3Q6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrLFxuICAgICAgOmhvc3QtY29udGV4dCguaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS1vZmZlcmluZy1saXN0Ojotd2Via2l0LXNjcm9sbGJhci10cmFjayxcbiAgICAgIDpob3N0LWNvbnRleHQoaHRtbC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LW9mZmVyaW5nLWxpc3Q6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrLFxuICAgICAgOmhvc3QtY29udGV4dChib2R5LmRhcmspIC5jaHJpc3RpYW5pdHktb2ZmZXJpbmctbGlzdDo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2ssXG4gICAgICA6aG9zdC1jb250ZXh0KFtkYXRhLXRoZW1lPSdkYXJrJ10pIC5jaHJpc3RpYW5pdHktb2ZmZXJpbmctbGlzdDo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2ssXG4gICAgICA6aG9zdC1jb250ZXh0KC5kYXJrKSAuY2hyaXN0aWFuaXR5LWdhbGxlcnktZ3JpZDo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2ssXG4gICAgICA6aG9zdC1jb250ZXh0KC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LWdhbGxlcnktZ3JpZDo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2ssXG4gICAgICA6aG9zdC1jb250ZXh0KGh0bWwuaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS1nYWxsZXJ5LWdyaWQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrLFxuICAgICAgOmhvc3QtY29udGV4dChib2R5LmRhcmspIC5jaHJpc3RpYW5pdHktZ2FsbGVyeS1ncmlkOjotd2Via2l0LXNjcm9sbGJhci10cmFjayxcbiAgICAgIDpob3N0LWNvbnRleHQoW2RhdGEtdGhlbWU9J2RhcmsnXSkgLmNocmlzdGlhbml0eS1nYWxsZXJ5LWdyaWQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHtcbiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgxNSwgMjMsIDQyLCAwLjg2KTtcbiAgICAgIH1cblxuICAgICAgOmhvc3QtY29udGV4dCguZGFyaykgLmNocmlzdGlhbml0eS1oaXN0b3J5LWdyaWQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iLFxuICAgICAgOmhvc3QtY29udGV4dCguaW9uLXBhbGV0dGUtZGFyaykgLmNocmlzdGlhbml0eS1oaXN0b3J5LWdyaWQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iLFxuICAgICAgOmhvc3QtY29udGV4dChodG1sLmlvbi1wYWxldHRlLWRhcmspIC5jaHJpc3RpYW5pdHktaGlzdG9yeS1ncmlkOjotd2Via2l0LXNjcm9sbGJhci10aHVtYixcbiAgICAgIDpob3N0LWNvbnRleHQoYm9keS5kYXJrKSAuY2hyaXN0aWFuaXR5LWhpc3RvcnktZ3JpZDo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIsXG4gICAgICA6aG9zdC1jb250ZXh0KFtkYXRhLXRoZW1lPSdkYXJrJ10pIC5jaHJpc3RpYW5pdHktaGlzdG9yeS1ncmlkOjotd2Via2l0LXNjcm9sbGJhci10aHVtYixcbiAgICAgIDpob3N0LWNvbnRleHQoLmRhcmspIC5jaHJpc3RpYW5pdHktb2ZmZXJpbmctbGlzdDo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIsXG4gICAgICA6aG9zdC1jb250ZXh0KC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LW9mZmVyaW5nLWxpc3Q6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iLFxuICAgICAgOmhvc3QtY29udGV4dChodG1sLmlvbi1wYWxldHRlLWRhcmspIC5jaHJpc3RpYW5pdHktb2ZmZXJpbmctbGlzdDo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIsXG4gICAgICA6aG9zdC1jb250ZXh0KGJvZHkuZGFyaykgLmNocmlzdGlhbml0eS1vZmZlcmluZy1saXN0Ojotd2Via2l0LXNjcm9sbGJhci10aHVtYixcbiAgICAgIDpob3N0LWNvbnRleHQoW2RhdGEtdGhlbWU9J2RhcmsnXSkgLmNocmlzdGlhbml0eS1vZmZlcmluZy1saXN0Ojotd2Via2l0LXNjcm9sbGJhci10aHVtYixcbiAgICAgIDpob3N0LWNvbnRleHQoLmRhcmspIC5jaHJpc3RpYW5pdHktZ2FsbGVyeS1ncmlkOjotd2Via2l0LXNjcm9sbGJhci10aHVtYixcbiAgICAgIDpob3N0LWNvbnRleHQoLmlvbi1wYWxldHRlLWRhcmspIC5jaHJpc3RpYW5pdHktZ2FsbGVyeS1ncmlkOjotd2Via2l0LXNjcm9sbGJhci10aHVtYixcbiAgICAgIDpob3N0LWNvbnRleHQoaHRtbC5pb24tcGFsZXR0ZS1kYXJrKSAuY2hyaXN0aWFuaXR5LWdhbGxlcnktZ3JpZDo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIsXG4gICAgICA6aG9zdC1jb250ZXh0KGJvZHkuZGFyaykgLmNocmlzdGlhbml0eS1nYWxsZXJ5LWdyaWQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iLFxuICAgICAgOmhvc3QtY29udGV4dChbZGF0YS10aGVtZT0nZGFyayddKSAuY2hyaXN0aWFuaXR5LWdhbGxlcnktZ3JpZDo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIge1xuICAgICAgICBib3JkZXItY29sb3I6IHJnYmEoMTUsIDIzLCA0MiwgMC44Nik7XG4gICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMTQ4LCAxNjMsIDE4NCwgMC41NCk7XG4gICAgICB9XG5cbiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3MjBweCkge1xuICAgICAgICA6aG9zdCB7XG4gICAgICAgICAgb3ZlcmZsb3cteDogaGlkZGVuO1xuICAgICAgICB9XG5cbiAgICAgICAgLmNocmlzdGlhbml0eS1zaGVsbCB7XG4gICAgICAgICAgcGFkZGluZzogMC41NXJlbSAwIDAuNjVyZW07XG4gICAgICAgICAgYm9yZGVyLXJpZ2h0OiAwO1xuICAgICAgICAgIGJvcmRlci1sZWZ0OiAwO1xuICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDA7XG4gICAgICAgIH1cblxuICAgICAgICAuY2hyaXN0aWFuaXR5LWhlYWRlcixcbiAgICAgICAgLmNocmlzdGlhbml0eS1tYXRjaC1zdHJpcCxcbiAgICAgICAgLmNocmlzdGlhbml0eS1hY3Rpb25zIHtcbiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IG1heCgwLjVyZW0sIGVudihzYWZlLWFyZWEtaW5zZXQtcmlnaHQpKTtcbiAgICAgICAgICBwYWRkaW5nLWxlZnQ6IG1heCgwLjVyZW0sIGVudihzYWZlLWFyZWEtaW5zZXQtbGVmdCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgLmNocmlzdGlhbml0eS1oZWFkZXIsXG4gICAgICAgIC5jaHJpc3RpYW5pdHktcGxheWVyX19zdW1tYXJ5LFxuICAgICAgICAuY2hyaXN0aWFuaXR5LXNoYXJlZC16b25lLFxuICAgICAgICAuY2hyaXN0aWFuaXR5LWFjdGlvbnMge1xuICAgICAgICAgIGFsaWduLWl0ZW1zOiBzdHJldGNoO1xuICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIH1cblxuICAgICAgICAuY2hyaXN0aWFuaXR5LW1hdGNoLXN0cmlwIHtcbiAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IG1pbm1heCgwLCAxZnIpIGF1dG8gbWlubWF4KDAsIDFmcik7XG4gICAgICAgICAgZ2FwOiAwLjM1cmVtO1xuICAgICAgICAgIHBhZGRpbmc6IDAuMzVyZW07XG4gICAgICAgIH1cblxuICAgICAgICAuY2hyaXN0aWFuaXR5LW1hdGNoLXBsYXllciB7XG4gICAgICAgICAgZ2FwOiAwLjM1cmVtO1xuICAgICAgICB9XG5cbiAgICAgICAgLmNocmlzdGlhbml0eS1tYXRjaC1wbGF5ZXIgc21hbGwge1xuICAgICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICAgIH1cblxuICAgICAgICAuY2hyaXN0aWFuaXR5LWhlYWRlci1hY3Rpb25zIHtcbiAgICAgICAgICBhbGlnbi1pdGVtczogZmxleC1lbmQ7XG4gICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgfVxuXG4gICAgICAgIC5jaHJpc3RpYW5pdHktc3RhcnRfX2NhcmRzIHtcbiAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IG1pbm1heCgwLCAxZnIpO1xuICAgICAgICB9XG5cbiAgICAgICAgLmNocmlzdGlhbml0eS1zdGFydF9faGVybyB7XG4gICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBtaW5tYXgoMCwgMWZyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5jaHJpc3RpYW5pdHktc3RhcnRfX2ZhbiB7XG4gICAgICAgICAgbWluLWhlaWdodDogMTAuNXJlbTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5jaHJpc3RpYW5pdHktc3RhcnRfX2ZhbiB2YWwtY2hyaXN0aWFuaXR5LWNhcmQge1xuICAgICAgICAgIHdpZHRoOiBjbGFtcCg1LjJyZW0sIDIydncsIDYuNHJlbSk7XG4gICAgICAgIH1cblxuICAgICAgICAuY2hyaXN0aWFuaXR5LXN0YXJ0X19tb2RlcyB7XG4gICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoMiwgbWlubWF4KDAsIDFmcikpO1xuICAgICAgICB9XG5cbiAgICAgICAgLmNocmlzdGlhbml0eS1zcGxhc2gsXG4gICAgICAgIC5jaHJpc3RpYW5pdHktc3RhcnQge1xuICAgICAgICAgIG1pbi1oZWlnaHQ6IG1pbigzMHJlbSwgY2FsYygxMDBkdmggLSA3cmVtKSk7XG4gICAgICAgICAgcGFkZGluZy1yaWdodDogbWF4KDAuNjVyZW0sIGVudihzYWZlLWFyZWEtaW5zZXQtcmlnaHQpKTtcbiAgICAgICAgICBwYWRkaW5nLWxlZnQ6IG1heCgwLjY1cmVtLCBlbnYoc2FmZS1hcmVhLWluc2V0LWxlZnQpKTtcbiAgICAgICAgICBib3JkZXItcmlnaHQ6IDA7XG4gICAgICAgICAgYm9yZGVyLWxlZnQ6IDA7XG4gICAgICAgICAgYm9yZGVyLXJhZGl1czogMDtcbiAgICAgICAgfVxuXG4gICAgICAgIC5jaHJpc3RpYW5pdHktc2NvcmVib2FyZCB7XG4gICAgICAgICAgbWluLXdpZHRoOiAzLjY1cmVtO1xuICAgICAgICAgIHBhZGRpbmc6IDAgMC4zNXJlbTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5jaHJpc3RpYW5pdHktc2NvcmVib2FyZCBzdHJvbmcge1xuICAgICAgICAgIGZvbnQtc2l6ZTogMS4wNXJlbTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5jaHJpc3RpYW5pdHktdGFibGUge1xuICAgICAgICAgIGdhcDogMC4zNXJlbTtcbiAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiAwLjI1cmVtO1xuICAgICAgICAgIHBhZGRpbmctbGVmdDogMC4yNXJlbTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5jaHJpc3RpYW5pdHktcGxheWVyLXNpZGUge1xuICAgICAgICAgIHBhZGRpbmc6IDAuM3JlbSAwLjI1cmVtO1xuICAgICAgICB9XG5cbiAgICAgICAgLmNocmlzdGlhbml0eS1iYXR0bGUtem9uZSB7XG4gICAgICAgICAgLS1jaHJpc3RpYW5pdHktYmF0dGxlLWNhcmQtd2lkdGg6IG1pbig1LjJyZW0sIGNhbGMoKDEwMHZ3IC0gNC4yNXJlbSkgLyA0KSk7XG4gICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoNCwgdmFyKC0tY2hyaXN0aWFuaXR5LWJhdHRsZS1jYXJkLXdpZHRoKSk7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgICAgbWluLWhlaWdodDogOC43NXJlbTtcbiAgICAgICAgICBvdmVyZmxvdy14OiBjbGlwO1xuICAgICAgICB9XG5cbiAgICAgICAgLmNocmlzdGlhbml0eS1oYW5kLWZhbiB7XG4gICAgICAgICAgbWluLWhlaWdodDogMTEuNDVyZW07XG4gICAgICAgICAgcGFkZGluZy1ib3R0b206IDJyZW07XG4gICAgICAgICAgb3ZlcmZsb3c6IHZpc2libGU7XG4gICAgICAgIH1cblxuICAgICAgICAuY2hyaXN0aWFuaXR5LWhhbmQtc2hlbGYge1xuICAgICAgICAgIG1pbi1oZWlnaHQ6IDEyLjY1cmVtO1xuICAgICAgICAgIG1hcmdpbi10b3A6IC0xcmVtO1xuICAgICAgICAgIHBhZGRpbmctdG9wOiAxLjM1cmVtO1xuICAgICAgICAgIHBhZGRpbmctYm90dG9tOiAwLjlyZW07XG4gICAgICAgIH1cblxuICAgICAgICAuY2hyaXN0aWFuaXR5LWhhbmQtc2hlbGYtLW9wcG9uZW50IHtcbiAgICAgICAgICBtaW4taGVpZ2h0OiA2LjY1cmVtO1xuICAgICAgICAgIG1hcmdpbi10b3A6IDA7XG4gICAgICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICAgICAgICBwYWRkaW5nLXRvcDogMC40cmVtO1xuICAgICAgICAgIHBhZGRpbmctYm90dG9tOiAwLjg1cmVtO1xuICAgICAgICB9XG5cbiAgICAgICAgLmNocmlzdGlhbml0eS1wbGF5ZXItcmFjayB7XG4gICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBtaW5tYXgoNC41cmVtLCA1LjdyZW0pIG1pbm1heCg0LjRyZW0sIDFmcikgbWlubWF4KDMuNXJlbSwgNC44cmVtKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5jaHJpc3RpYW5pdHktc2hhcmVkLXpvbmUge1xuICAgICAgICAgIGdhcDogMC40NXJlbTtcbiAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCgzLCBtaW5tYXgoMCwgMWZyKSk7XG4gICAgICAgIH1cblxuICAgICAgICAuY2hyaXN0aWFuaXR5LXpvbmUtY2FyZCxcbiAgICAgICAgLmNocmlzdGlhbml0eS16b25lLXBpbGUge1xuICAgICAgICAgIG1pbi1oZWlnaHQ6IDYuMTVyZW07XG4gICAgICAgICAgcGFkZGluZzogMC41OHJlbSAwLjQ2cmVtIDAuNXJlbTtcbiAgICAgICAgICBnYXA6IDAuMjRyZW07XG4gICAgICAgIH1cblxuICAgICAgICAuY2hyaXN0aWFuaXR5LXpvbmUtcGlsZSBpIHtcbiAgICAgICAgICB0b3A6IDJyZW07XG4gICAgICAgICAgcmlnaHQ6IDAuNTJyZW07XG4gICAgICAgICAgd2lkdGg6IDIuMzVyZW07XG4gICAgICAgICAgaGVpZ2h0OiAzLjI1cmVtO1xuICAgICAgICB9XG5cbiAgICAgICAgLmNocmlzdGlhbml0eS1vZmZlcmluZy1waWxlIHtcbiAgICAgICAgICBoZWlnaHQ6IDYuODVyZW07XG4gICAgICAgICAgbWF4LWhlaWdodDogNi44NXJlbTtcbiAgICAgICAgICBwYWRkaW5nOiAwLjcycmVtIDAuNDZyZW0gMC41cmVtO1xuICAgICAgICAgIGdhcDogMC4yNHJlbTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5jaHJpc3RpYW5pdHktb2ZmZXJpbmctZHJvcC10YXJnZXQge1xuICAgICAgICAgIGhlaWdodDogNi44NXJlbTtcbiAgICAgICAgICBtaW4taGVpZ2h0OiAwO1xuICAgICAgICAgIG1heC1oZWlnaHQ6IDYuODVyZW07XG4gICAgICAgIH1cblxuICAgICAgICAuY2hyaXN0aWFuaXR5LW9mZmVyaW5nLXBpbGUgaSB7XG4gICAgICAgICAgdG9wOiAyLjE4cmVtO1xuICAgICAgICAgIGxlZnQ6IDUwJTtcbiAgICAgICAgICB3aWR0aDogMi4zNXJlbTtcbiAgICAgICAgICBoZWlnaHQ6IDMuMjVyZW07XG4gICAgICAgIH1cblxuICAgICAgICAuY2hyaXN0aWFuaXR5LWNhcmQtcHJldmlldy1jYXJkIHtcbiAgICAgICAgICB3aWR0aDogY2xhbXAoNC4ycmVtLCAyMHZ3LCA1LjdyZW0pO1xuICAgICAgICAgIGhlaWdodDogYXV0bztcbiAgICAgICAgICBtaW4taGVpZ2h0OiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgLmNocmlzdGlhbml0eS1sZWFkZXItY2FyZCB7XG4gICAgICAgICAgd2lkdGg6IGNsYW1wKDQuNTVyZW0sIDIwdncsIDUuN3JlbSk7XG4gICAgICAgICAgbWluLWhlaWdodDogMDtcbiAgICAgICAgfVxuXG4gICAgICAgIC5jaHJpc3RpYW5pdHktb2ZmZXJpbmctcm93IHtcbiAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IG1pbm1heCg1cmVtLCA1LjhyZW0pIG1pbm1heCgwLCAxZnIpO1xuICAgICAgICAgIGdhcDogMC41cmVtO1xuICAgICAgICB9XG5cbiAgICAgICAgLmNocmlzdGlhbml0eS1nYWxsZXJ5LWNvbnRyb2xzIHtcbiAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IG1pbm1heCgwLCAxZnIpO1xuICAgICAgICB9XG5cbiAgICAgICAgLmNocmlzdGlhbml0eS1nYWxsZXJ5LWdyaWQge1xuICAgICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZmlsbCwgbWlubWF4KDUuMzVyZW0sIDYuMXJlbSkpO1xuICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgLmNocmlzdGlhbml0eS1vZmZlcmluZy1jYXJkIHtcbiAgICAgICAgICBtaW4taGVpZ2h0OiA3LjI1cmVtO1xuICAgICAgICAgIHBhZGRpbmc6IDAuNXJlbTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5jaHJpc3RpYW5pdHktaGFuZC1mYW4tLW9wcG9uZW50IHtcbiAgICAgICAgICBtaW4taGVpZ2h0OiA1Ljc1cmVtO1xuICAgICAgICAgIHBhZGRpbmctYm90dG9tOiAwLjdyZW07XG4gICAgICAgIH1cblxuICAgICAgICAuY2hyaXN0aWFuaXR5LWhhbmQtZmFuLS1vcHBvbmVudCAuY2hyaXN0aWFuaXR5LWhpZGRlbi1jYXJkLWJ1dHRvbiB7XG4gICAgICAgICAgd2lkdGg6IGNsYW1wKDMuMzVyZW0sIDE1dncsIDQuMjVyZW0pO1xuICAgICAgICAgIG1hcmdpbi1pbmxpbmU6IC0wLjcycmVtO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgYCxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgQ2hyaXN0aWFuaXR5R2FtZUNvbXBvbmVudCB7XG4gIHByaXZhdGUgaTE4biA9IGluamVjdChJMThuU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZG9jdW1lbnQgPSBpbmplY3QoRE9DVU1FTlQpO1xuICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG4gIHByaXZhdGUgcmVhZG9ubHkgYm9vdFN0YXJ0ZWRBdCA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICBwcml2YXRlIGJvdFR1cm5UaW1lcjogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIGltcGFjdEV2ZW50U2VxdWVuY2UgPSAwO1xuICBwcml2YXRlIHJlYWRvbmx5IGltcGFjdFRpbWVycyA9IG5ldyBTZXQ8bnVtYmVyPigpO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBnYW1lID0gc2lnbmFsPENocmlzdGlhbml0eUdhbWVTdGF0ZT4oc3RydWN0dXJlZENsb25lKFNUQVJUSU5HX0dBTUUpKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHNjcmVlbiA9IHNpZ25hbDxDaHJpc3RpYW5pdHlTY3JlZW4+KCdzcGxhc2gnKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGNhdGFsb2dMb2FkU3RhdGUgPSBzaWduYWw8Q2hyaXN0aWFuaXR5Q2F0YWxvZ0xvYWRTdGF0ZT4oJ2xvYWRpbmcnKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHNlbGVjdGVkSGFuZENhcmQgPSBzaWduYWw8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gIHByb3RlY3RlZCByZWFkb25seSBzZWxlY3RlZEF0dGFja2VyID0gc2lnbmFsPENocmlzdGlhbml0eUNoYXJhY3Rlckluc3RhbmNlIHwgbnVsbD4obnVsbCk7XG4gIHByb3RlY3RlZCByZWFkb25seSBzZWxlY3RlZFByZXZpZXcgPSBzaWduYWw8Q2hyaXN0aWFuaXR5Q2FyZFByZXZpZXcgfCBudWxsPihudWxsKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHNlbGVjdGVkSW5mbyA9IHNpZ25hbDxDaHJpc3RpYW5pdHlJbmZvUGFuZWwgfCBudWxsPihudWxsKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHByZXZpZXdUaWx0ID0gc2lnbmFsPENocmlzdGlhbml0eVByZXZpZXdUaWx0Pih7IHJvdGF0ZVg6IDUsIHJvdGF0ZVk6IC01LCBzaGlmdFg6IDAsIHNoaWZ0WTogMCB9KTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGhvdmVyZWRIYW5kSW5kZXggPSBzaWduYWw8bnVtYmVyIHwgbnVsbD4obnVsbCk7XG4gIHByb3RlY3RlZCByZWFkb25seSBkcmFnZ2luZ0NhcmRJZCA9IHNpZ25hbDxzdHJpbmcgfCBudWxsPihudWxsKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHNob3dIaXN0b3J5ID0gc2lnbmFsKGZhbHNlKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHNob3dHYWxsZXJ5ID0gc2lnbmFsKGZhbHNlKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IG9mZmVyaW5nc1NlYXQgPSBzaWduYWw8Q2hyaXN0aWFuaXR5U2VhdCB8IG51bGw+KG51bGwpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgaW1wYWN0RXZlbnRzID0gc2lnbmFsPENocmlzdGlhbml0eUltcGFjdEV2ZW50W10+KFtdKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGNhcmRDYXRhbG9nID0gc2lnbmFsPFJlY29yZDxzdHJpbmcsIENocmlzdGlhbml0eUNhcmREZWZpbml0aW9uPj4oU1RBUlRFUl9DQVJEUyk7XG4gIHByb3RlY3RlZCByZWFkb25seSBhbGxDYXRhbG9nQ2FyZHMgPSBzaWduYWw8Q2hyaXN0aWFuaXR5Q2FyZERlZmluaXRpb25bXT4oT2JqZWN0LnZhbHVlcyhTVEFSVEVSX0NBUkRTKSk7XG4gIHByb3RlY3RlZCByZWFkb25seSBjYXRhbG9nTG9hZGVkID0gc2lnbmFsKGZhbHNlKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGdhbGxlcnlTZWFyY2ggPSBzaWduYWwoJycpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZ2FsbGVyeVR5cGUgPSBzaWduYWw8Q2hyaXN0aWFuaXR5R2FsbGVyeVR5cGVGaWx0ZXI+KCdhbGwnKTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgY2FuRHJvcE9uQmF0dGxlU2xvdCA9IChkcmFnOiBDZGtEcmFnPHN0cmluZz4pOiBib29sZWFuID0+IHtcbiAgICBjb25zdCBjYXJkID0gdGhpcy5jYXJkRGVmaW5pdGlvbihkcmFnLmRhdGEpO1xuICAgIHJldHVybiBjYXJkLnR5cGUgPT09ICdjaGFyYWN0ZXInICYmIHRoaXMuY2FuUGxheShjYXJkKTtcbiAgfTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgY2FuRHJvcE9uT2ZmZXJpbmdzID0gKGRyYWc6IENka0RyYWc8c3RyaW5nPik6IGJvb2xlYW4gPT4ge1xuICAgIGNvbnN0IGNhcmQgPSB0aGlzLmNhcmREZWZpbml0aW9uKGRyYWcuZGF0YSk7XG4gICAgcmV0dXJuIGNhcmQudHlwZSA9PT0gJ29mZmVyaW5nJyAmJiB0aGlzLmNhblBsYXkoY2FyZCk7XG4gIH07XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHBsYXllciA9IGNvbXB1dGVkKCgpID0+IHRoaXMuZ2FtZSgpLnBsYXllcnMuUDEpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgb3Bwb25lbnQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmdhbWUoKS5wbGF5ZXJzLlAyKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGN1cnJlbnRQbGF5ZXIgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmdhbWUoKS5wbGF5ZXJzW3RoaXMuZ2FtZSgpLnR1cm5Pd25lcl0pO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgaXNPd25UdXJuID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5nYW1lKCkuc3RhdHVzID09PSAnaW5fcHJvZ3Jlc3MnICYmIHRoaXMuZ2FtZSgpLnR1cm5Pd25lciA9PT0gJ1AxJyk7XG4gIHByb3RlY3RlZCByZWFkb25seSB3aW5uZXJTZWF0ID0gY29tcHV0ZWQ8Q2hyaXN0aWFuaXR5U2VhdCB8IG51bGw+KCgpID0+IHtcbiAgICBjb25zdCBnYW1lID0gdGhpcy5nYW1lKCk7XG4gICAgaWYgKGdhbWUuc3RhdHVzICE9PSAnZmluaXNoZWQnKSByZXR1cm4gbnVsbDtcbiAgICBpZiAoZ2FtZS5wbGF5ZXJzLlAxLmxlYWRlckhwIDw9IDApIHJldHVybiAnUDInO1xuICAgIGlmIChnYW1lLnBsYXllcnMuUDIubGVhZGVySHAgPD0gMCkgcmV0dXJuICdQMSc7XG4gICAgcmV0dXJuIGdhbWUucGxheWVycy5QMS5sZWFkZXJIcCA+PSBnYW1lLnBsYXllcnMuUDIubGVhZGVySHAgPyAnUDEnIDogJ1AyJztcbiAgfSk7XG4gIHByb3RlY3RlZCByZWFkb25seSBoYXNPcHBvbmVudEd1YXJkcyA9IGNvbXB1dGVkKCgpID0+IHRoaXMub3Bwb25lbnQoKS5iYXR0bGVab25lLmxlbmd0aCA+IDApO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgb3Bwb25lbnRIYW5kQ291bnQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLm9wcG9uZW50KCkuaGFuZENvdW50ID8/IHRoaXMub3Bwb25lbnQoKS5oYW5kPy5sZW5ndGggPz8gMCk7XG4gIHByb3RlY3RlZCByZWFkb25seSBnYWxsZXJ5Q2FyZHMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgcXVlcnkgPSB0aGlzLmdhbGxlcnlTZWFyY2goKS50cmltKCkudG9Mb3dlckNhc2UoKS5ub3JtYWxpemUoJ05GRCcpLnJlcGxhY2UoL1tcXHUwMzAwLVxcdTAzNmZdL2csICcnKTtcbiAgICBjb25zdCB0eXBlID0gdGhpcy5nYWxsZXJ5VHlwZSgpO1xuICAgIHJldHVybiB0aGlzLmFsbENhdGFsb2dDYXJkcygpXG4gICAgICAuZmlsdGVyKGNhcmQgPT4gdHlwZSA9PT0gJ2FsbCcgfHwgY2FyZC50eXBlID09PSB0eXBlKVxuICAgICAgLmZpbHRlcihjYXJkID0+IHtcbiAgICAgICAgaWYgKCFxdWVyeSkgcmV0dXJuIHRydWU7XG4gICAgICAgIGNvbnN0IHRleHQgPSB0aGlzLnRyYW5zbGF0ZWRDYXJkVGV4dChjYXJkKTtcbiAgICAgICAgY29uc3QgaGF5c3RhY2sgPSBbdGV4dC5uYW1lLCBjYXJkLnR5cGUsIHRleHQuc2NyaXB0dXJlLCB0ZXh0LmFiaWxpdHlOYW1lLCB0ZXh0LmFiaWxpdHlUZXh0LCB0ZXh0LnZlcnNlVGV4dF1cbiAgICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAgICAgLmpvaW4oJyAnKVxuICAgICAgICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgLm5vcm1hbGl6ZSgnTkZEJylcbiAgICAgICAgICAucmVwbGFjZSgvW1xcdTAzMDAtXFx1MDM2Zl0vZywgJycpO1xuICAgICAgICByZXR1cm4gaGF5c3RhY2suaW5jbHVkZXMocXVlcnkpO1xuICAgICAgfSlcbiAgICAgIC5zb3J0KChsZWZ0LCByaWdodCkgPT4gdGhpcy5jYXJkU29ydEtleShsZWZ0KS5sb2NhbGVDb21wYXJlKHRoaXMuY2FyZFNvcnRLZXkocmlnaHQpLCAnZXMnKSk7XG4gIH0pO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZ2FsbGVyeUVkaXRpb25MYWJlbCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBjb3VudCA9IHRoaXMuYWxsQ2F0YWxvZ0NhcmRzKCkubGVuZ3RoO1xuICAgIHJldHVybiBgJHt0aGlzLnQoJ2NocmlzdGlhbml0eUdlbmVzaXNFZGl0aW9uJyl9IMK3ICR7Y291bnR9ICR7dGhpcy50KCdjaHJpc3RpYW5pdHlDYXJkcycpfWA7XG4gIH0pO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZ2FsbGVyeUVkaXRpb25JY29uID0gY29tcHV0ZWQoKCkgPT4gR0VORVNJU19JQ09OX1VSTCk7XG4gIHByb3RlY3RlZCByZWFkb25seSBnYWxsZXJ5VHlwZU9wdGlvbnMgPSBjb21wdXRlZDxBcnJheTx7IHZhbHVlOiBDaHJpc3RpYW5pdHlHYWxsZXJ5VHlwZUZpbHRlcjsgbGFiZWw6IHN0cmluZyB9Pj4oKCkgPT4gW1xuICAgIHsgdmFsdWU6ICdhbGwnLCBsYWJlbDogdGhpcy50KCdjaHJpc3RpYW5pdHlBbGxDYXJkcycpIH0sXG4gICAgeyB2YWx1ZTogJ2xlYWRlcicsIGxhYmVsOiB0aGlzLnQoJ2NocmlzdGlhbml0eUxlYWRlckNhcmQnKSB9LFxuICAgIHsgdmFsdWU6ICdvZmZlcmluZycsIGxhYmVsOiB0aGlzLnQoJ2NocmlzdGlhbml0eU9mZmVyaW5nQ2FyZCcpIH0sXG4gICAgeyB2YWx1ZTogJ2NoYXJhY3RlcicsIGxhYmVsOiB0aGlzLnQoJ2NocmlzdGlhbml0eUNoYXJhY3RlckNhcmQnKSB9LFxuICAgIHsgdmFsdWU6ICd3aXNkb20nLCBsYWJlbDogdGhpcy50KCdjaHJpc3RpYW5pdHlXaXNkb21DYXJkJykgfSxcbiAgICB7IHZhbHVlOiAnYWN0aW9uJywgbGFiZWw6IHRoaXMudCgnY2hyaXN0aWFuaXR5QWN0aW9uQ2FyZCcpIH0sXG4gICAgeyB2YWx1ZTogJ3Rvb2wnLCBsYWJlbDogdGhpcy50KCdjaHJpc3RpYW5pdHlUb29sQ2FyZCcpIH0sXG4gICAgeyB2YWx1ZTogJ3BsYWNlJywgbGFiZWw6IHRoaXMudCgnY2hyaXN0aWFuaXR5UGxhY2VDYXJkJykgfSxcbiAgICB7IHZhbHVlOiAnZXZlbnQnLCBsYWJlbDogdGhpcy50KCdjaHJpc3RpYW5pdHlFdmVudENhcmQnKSB9LFxuICBdKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGhhc01vZGFsT3ZlcmxheSA9IGNvbXB1dGVkKCgpID0+XG4gICAgISF0aGlzLnNlbGVjdGVkUHJldmlldygpXG4gICAgfHwgISF0aGlzLnNlbGVjdGVkSW5mbygpXG4gICAgfHwgdGhpcy5zaG93SGlzdG9yeSgpXG4gICAgfHwgdGhpcy5zaG93R2FsbGVyeSgpXG4gICAgfHwgISF0aGlzLm9mZmVyaW5nc1NlYXQoKVxuICApO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgY2FuTmF2aWdhdGVIaXN0b3J5UHJldmlldyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBwcmV2aWV3ID0gdGhpcy5zZWxlY3RlZFByZXZpZXcoKTtcbiAgICBpZiAoIXByZXZpZXc/LmNhcmRJZCB8fCBwcmV2aWV3LnNvdXJjZSAhPT0gJ2hpc3RvcnknKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRoaXMuc2hvd0hpc3RvcnkoKSAmJiB0aGlzLmdhbWUoKS5oaXN0b3J5Wm9uZS5sZW5ndGggPiAxO1xuICB9KTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHNwbGFzaFN0YXR1c1RleHQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLmNhdGFsb2dMb2FkU3RhdGUoKTtcbiAgICBpZiAoc3RhdGUgPT09ICdyZWFkeScpIHJldHVybiB0aGlzLnQoJ2NocmlzdGlhbml0eVNwbGFzaFJlYWR5Jyk7XG4gICAgaWYgKHN0YXRlID09PSAnZmFsbGJhY2snKSByZXR1cm4gdGhpcy50KCdjaHJpc3RpYW5pdHlTcGxhc2hGYWxsYmFjaycpO1xuICAgIHJldHVybiB0aGlzLnQoJ2NocmlzdGlhbml0eVNwbGFzaExvYWRpbmcnKTtcbiAgfSk7XG4gIHByb3RlY3RlZCByZWFkb25seSBzdGFydEZlYXR1cmVkQ2FyZHMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgY2FyZHMgPSB0aGlzLmFsbENhdGFsb2dDYXJkcygpO1xuICAgIGNvbnN0IHByZWZlcnJlZCA9IFsnR0VOLTAwOScsICdHRU4tMDEzJywgJ0dFTi0wMzInXVxuICAgICAgLm1hcChpZCA9PiB0aGlzLmNhcmRDYXRhbG9nKClbaWRdKVxuICAgICAgLmZpbHRlcigoY2FyZCk6IGNhcmQgaXMgQ2hyaXN0aWFuaXR5Q2FyZERlZmluaXRpb24gPT4gISFjYXJkKTtcbiAgICByZXR1cm4gKHByZWZlcnJlZC5sZW5ndGggPyBwcmVmZXJyZWQgOiBjYXJkcy5zbGljZSgwLCAzKSkuc2xpY2UoMCwgMyk7XG4gIH0pO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZnV0dXJlTW9kZXMgPSBjb21wdXRlZCgoKSA9PiBbXG4gICAgeyB0aXRsZTogdGhpcy50KCdjaHJpc3RpYW5pdHlTb2xvQm90TW9kZScpLCBib2R5OiB0aGlzLnQoJ2NocmlzdGlhbml0eVNvbG9Cb3RNb2RlQm9keScpIH0sXG4gICAgeyB0aXRsZTogdGhpcy50KCdjaHJpc3RpYW5pdHlUd29QbGF5ZXJNb2RlJyksIGJvZHk6IHRoaXMudCgnY2hyaXN0aWFuaXR5VHdvUGxheWVyTW9kZUJvZHknKSB9LFxuICAgIHsgdGl0bGU6IHRoaXMudCgnY2hyaXN0aWFuaXR5T25lRGV2aWNlTW9kZScpLCBib2R5OiB0aGlzLnQoJ2NocmlzdGlhbml0eU9uZURldmljZU1vZGVCb2R5JykgfSxcbiAgICB7IHRpdGxlOiB0aGlzLnQoJ2NocmlzdGlhbml0eVNwZWN0YXRvck1vZGUnKSwgYm9keTogdGhpcy50KCdjaHJpc3RpYW5pdHlTcGVjdGF0b3JNb2RlQm9keScpIH0sXG4gIF0pO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2VsZWN0ZWRDYXJkRGVmaW5pdGlvbiA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWRIYW5kQ2FyZCgpO1xuICAgIHJldHVybiBzZWxlY3RlZCA/IHRoaXMuY2FyZERlZmluaXRpb24oc2VsZWN0ZWQpIDogbnVsbDtcbiAgfSk7XG4gIHByb3RlY3RlZCByZWFkb25seSBzZWxlY3RlZFByZXZpZXdDYXJkID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGNhcmRJZCA9IHRoaXMuc2VsZWN0ZWRQcmV2aWV3KCk/LmNhcmRJZDtcbiAgICByZXR1cm4gY2FyZElkID8gdGhpcy5jYXJkRGVmaW5pdGlvbihjYXJkSWQpIDogbnVsbDtcbiAgfSk7XG4gIHByb3RlY3RlZCByZWFkb25seSBzZWxlY3RlZFByZXZpZXdSZW5kZXJDYXJkID0gY29tcHV0ZWQ8Q2hyaXN0aWFuaXR5Q2FyZFJlbmRlck1vZGVsIHwgbnVsbD4oKCkgPT4ge1xuICAgIGNvbnN0IHByZXZpZXcgPSB0aGlzLnNlbGVjdGVkUHJldmlldygpO1xuICAgIGlmICghcHJldmlldykgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgY2FyZCA9IHRoaXMuc2VsZWN0ZWRQcmV2aWV3Q2FyZCgpO1xuICAgIGlmIChjYXJkKSB7XG4gICAgICByZXR1cm4gdGhpcy5kZWZpbml0aW9uVG9SZW5kZXJDYXJkKGNhcmQsIHtcbiAgICAgICAgc3RhdHVzVGV4dDogcHJldmlldy5ib2R5LFxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChwcmV2aWV3LmV5ZWJyb3cgPT09IHRoaXMudCgnY2hyaXN0aWFuaXR5TGVhZGVyQ2FyZCcpKSB7XG4gICAgICBjb25zdCBbY3VycmVudEhwLCBtYXhIcF0gPSBwcmV2aWV3Lm1ldGEuc3BsaXQoJy8nKS5tYXAodmFsdWUgPT4gTnVtYmVyKHZhbHVlKSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpZDogYGxlYWRlci0ke3ByZXZpZXcudGl0bGUudG9Mb3dlckNhc2UoKX1gLFxuICAgICAgICBuYW1lOiBwcmV2aWV3LnRpdGxlLFxuICAgICAgICB0eXBlOiAnbGVhZGVyJyxcbiAgICAgICAgdHlwZUxhYmVsOiB0aGlzLnQoJ2NocmlzdGlhbml0eUxlYWRlckNhcmQnKSxcbiAgICAgICAgY3VycmVudEhwOiBOdW1iZXIuaXNGaW5pdGUoY3VycmVudEhwKSA/IGN1cnJlbnRIcCA6IHVuZGVmaW5lZCxcbiAgICAgICAgbWF4SHA6IE51bWJlci5pc0Zpbml0ZShtYXhIcCkgPyBtYXhIcCA6IHVuZGVmaW5lZCxcbiAgICAgICAgbGlmZTogTnVtYmVyLmlzRmluaXRlKGN1cnJlbnRIcCkgPyBjdXJyZW50SHAgOiB1bmRlZmluZWQsXG4gICAgICAgIGFiaWxpdHlOYW1lOiB0aGlzLnQoJ2NocmlzdGlhbml0eUxlYWRlckNhcmQnKSxcbiAgICAgICAgYWJpbGl0eVRleHQ6IHByZXZpZXcuYm9keSxcbiAgICAgICAgdmVyc2VUZXh0OiBwcmV2aWV3LmJvZHksXG4gICAgICAgIGVkaXRpb246ICdNVlAnLFxuICAgICAgICBjb2xsZWN0b3JOdW1iZXI6ICdMSURFUicsXG4gICAgICAgIHllYXI6ICcyMDI2JyxcbiAgICAgICAgYXV0aG9yOiAnTVZQJyxcbiAgICAgICAgcmFyaXR5OiAnbGVnZW5kYXJ5JyxcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBpZDogYHByZXZpZXctJHtwcmV2aWV3LnRpdGxlLnRvTG93ZXJDYXNlKCl9YCxcbiAgICAgIG5hbWU6IHByZXZpZXcudGl0bGUsXG4gICAgICB0eXBlOiB0aGlzLnByZXZpZXdSZW5kZXJUeXBlKHByZXZpZXcuZXllYnJvdyksXG4gICAgICB0eXBlTGFiZWw6IHByZXZpZXcuZXllYnJvdyxcbiAgICAgIGFiaWxpdHlOYW1lOiBwcmV2aWV3LmV5ZWJyb3csXG4gICAgICBhYmlsaXR5VGV4dDogcHJldmlldy5ib2R5LFxuICAgICAgdmVyc2VUZXh0OiBwcmV2aWV3LmJvZHksXG4gICAgICBlZGl0aW9uOiAnTVZQJyxcbiAgICAgIGNvbGxlY3Rvck51bWJlcjogcHJldmlldy5leWVicm93LFxuICAgICAgeWVhcjogJzIwMjYnLFxuICAgICAgYXV0aG9yOiAnTVZQJyxcbiAgICAgIHJhcml0eTogJ25vcm1hbCcsXG4gICAgICBzdGF0dXNUZXh0OiBwcmV2aWV3Lm1ldGEsXG4gICAgfTtcbiAgfSk7XG4gIHByb3RlY3RlZCByZWFkb25seSBwcmV2aWV3UnVsZSA9IGNvbXB1dGVkPENocmlzdGlhbml0eVByZXZpZXdSdWxlIHwgbnVsbD4oKCkgPT4ge1xuICAgIGNvbnN0IHByZXZpZXcgPSB0aGlzLnNlbGVjdGVkUHJldmlldygpO1xuICAgIGlmICghcHJldmlldykgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgY2FyZCA9IHRoaXMuc2VsZWN0ZWRQcmV2aWV3Q2FyZCgpO1xuICAgIGlmIChjYXJkPy50eXBlID09PSAnb2ZmZXJpbmcnKSB7XG4gICAgICByZXR1cm4geyB0aXRsZTogdGhpcy50KCdjaHJpc3RpYW5pdHlPZmZlcmluZ0NhcmQnKSwgYm9keTogdGhpcy50KCdjaHJpc3RpYW5pdHlPZmZlcmluZ1J1bGVCb2R5JykgfTtcbiAgICB9XG4gICAgaWYgKGNhcmQ/LnR5cGUgPT09ICdjaGFyYWN0ZXInKSB7XG4gICAgICByZXR1cm4geyB0aXRsZTogdGhpcy50KCdjaHJpc3RpYW5pdHlDaGFyYWN0ZXJDYXJkJyksIGJvZHk6IHRoaXMudCgnY2hyaXN0aWFuaXR5Q2hhcmFjdGVyUnVsZUJvZHknKSB9O1xuICAgIH1cbiAgICBpZiAoY2FyZD8udHlwZSA9PT0gJ3dpc2RvbScpIHtcbiAgICAgIHJldHVybiB7IHRpdGxlOiB0aGlzLnQoJ2NocmlzdGlhbml0eVdpc2RvbUNhcmQnKSwgYm9keTogdGhpcy50KCdjaHJpc3RpYW5pdHlXaXNkb21SdWxlQm9keScpIH07XG4gICAgfVxuICAgIGlmIChjYXJkPy50eXBlID09PSAnYWN0aW9uJykge1xuICAgICAgcmV0dXJuIHsgdGl0bGU6IHRoaXMudCgnY2hyaXN0aWFuaXR5QWN0aW9uQ2FyZCcpLCBib2R5OiB0aGlzLnQoJ2NocmlzdGlhbml0eUFjdGlvblJ1bGVCb2R5JykgfTtcbiAgICB9XG4gICAgaWYgKGNhcmQ/LnR5cGUgPT09ICd0b29sJykge1xuICAgICAgcmV0dXJuIHsgdGl0bGU6IHRoaXMudCgnY2hyaXN0aWFuaXR5VG9vbENhcmQnKSwgYm9keTogdGhpcy50KCdjaHJpc3RpYW5pdHlUb29sUnVsZUJvZHknKSB9O1xuICAgIH1cbiAgICBpZiAoY2FyZD8udHlwZSA9PT0gJ3BsYWNlJykge1xuICAgICAgcmV0dXJuIHsgdGl0bGU6IHRoaXMudCgnY2hyaXN0aWFuaXR5UGxhY2VDYXJkJyksIGJvZHk6IHRoaXMudCgnY2hyaXN0aWFuaXR5UGxhY2VSdWxlQm9keScpIH07XG4gICAgfVxuICAgIGlmIChjYXJkPy50eXBlID09PSAnZXZlbnQnKSB7XG4gICAgICByZXR1cm4geyB0aXRsZTogdGhpcy50KCdjaHJpc3RpYW5pdHlFdmVudENhcmQnKSwgYm9keTogdGhpcy50KCdjaHJpc3RpYW5pdHlFdmVudFJ1bGVCb2R5JykgfTtcbiAgICB9XG4gICAgaWYgKGNhcmQ/LnR5cGUgPT09ICdsZWFkZXInKSB7XG4gICAgICByZXR1cm4geyB0aXRsZTogdGhpcy50KCdjaHJpc3RpYW5pdHlMZWFkZXJDYXJkJyksIGJvZHk6IHRoaXMudCgnY2hyaXN0aWFuaXR5TGVhZGVyUnVsZUJvZHknKSB9O1xuICAgIH1cbiAgICBpZiAocHJldmlldy5leWVicm93ID09PSB0aGlzLnQoJ2NocmlzdGlhbml0eUxlYWRlckNhcmQnKSkge1xuICAgICAgcmV0dXJuIHsgdGl0bGU6IHRoaXMudCgnY2hyaXN0aWFuaXR5TGVhZGVyQ2FyZCcpLCBib2R5OiB0aGlzLnQoJ2NocmlzdGlhbml0eUxlYWRlclJ1bGVCb2R5JykgfTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH0pO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgc3RhdHVzVGV4dCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCB3aW5uZXIgPSB0aGlzLndpbm5lclNlYXQoKTtcbiAgICBpZiAod2lubmVyKSB7XG4gICAgICByZXR1cm4gd2lubmVyID09PSAnUDEnID8gdGhpcy50KCdjaHJpc3RpYW5pdHlZb3VXaW4nKSA6IHRoaXMudCgnY2hyaXN0aWFuaXR5T3Bwb25lbnRXaW5zJyk7XG4gICAgfVxuICAgIGNvbnN0IGF0dGFja2VyID0gdGhpcy5zZWxlY3RlZEF0dGFja2VyKCk7XG4gICAgY29uc3QgaGFuZENhcmQgPSB0aGlzLnNlbGVjdGVkQ2FyZERlZmluaXRpb24oKTtcbiAgICBpZiAoIXRoaXMuaXNPd25UdXJuKCkpIHtcbiAgICAgIHJldHVybiB0aGlzLnQoJ2NocmlzdGlhbml0eVdhaXRUdXJuJyk7XG4gICAgfVxuICAgIGlmIChhdHRhY2tlcikge1xuICAgICAgcmV0dXJuIHRoaXMuaGFzT3Bwb25lbnRHdWFyZHMoKSA/IHRoaXMudCgnY2hyaXN0aWFuaXR5Q2hvb3NlQ2hhcmFjdGVyVGFyZ2V0JykgOiB0aGlzLnQoJ2NocmlzdGlhbml0eUNob29zZVRhcmdldCcpO1xuICAgIH1cbiAgICBpZiAoaGFuZENhcmQpIHtcbiAgICAgIGlmICghdGhpcy5jYW5QbGF5KGhhbmRDYXJkKSkge1xuICAgICAgICByZXR1cm4gdGhpcy50KCdjaHJpc3RpYW5pdHlOZWVkT2ZmZXJpbmdzJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gaGFuZENhcmQudHlwZSA9PT0gJ29mZmVyaW5nJyA/IHRoaXMudCgnY2hyaXN0aWFuaXR5UGxhY2VPZmZlcmluZycpIDogdGhpcy50KCdjaHJpc3RpYW5pdHlDaG9vc2VTbG90Jyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnQoJ2NocmlzdGlhbml0eUNob29zZUNhcmQnKTtcbiAgfSk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5pMThuLnJlZ2lzdGVyRGVmYXVsdHMoJ01pbmlHYW1lcycsIE1JTklfR0FNRVNfSTE4Tik7XG4gICAgZWZmZWN0KChvbkNsZWFudXApID0+IHtcbiAgICAgIGlmICghdGhpcy5oYXNNb2RhbE92ZXJsYXkoKSkgcmV0dXJuO1xuICAgICAgY29uc3QgcHJldmlvdXNPdmVyZmxvdyA9IHRoaXMuZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdztcbiAgICAgIGNvbnN0IHByZXZpb3VzT3ZlcnNjcm9sbCA9IHRoaXMuZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyc2Nyb2xsQmVoYXZpb3I7XG4gICAgICB0aGlzLmRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJztcbiAgICAgIHRoaXMuZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyc2Nyb2xsQmVoYXZpb3IgPSAnY29udGFpbic7XG4gICAgICBvbkNsZWFudXAoKCkgPT4ge1xuICAgICAgICB0aGlzLmRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3cgPSBwcmV2aW91c092ZXJmbG93O1xuICAgICAgICB0aGlzLmRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcnNjcm9sbEJlaGF2aW9yID0gcHJldmlvdXNPdmVyc2Nyb2xsO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgdGhpcy5kZXN0cm95UmVmLm9uRGVzdHJveSgoKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IHRpbWVyIG9mIHRoaXMuaW1wYWN0VGltZXJzKSB7XG4gICAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgfVxuICAgICAgdGhpcy5pbXBhY3RUaW1lcnMuY2xlYXIoKTtcbiAgICB9KTtcbiAgICB2b2lkIHRoaXMubG9hZEdlbmVzaXNDYXRhbG9nKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgdChrZXk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgdGhpcy5pMThuLmxhbmcoKTtcbiAgICByZXR1cm4gdGhpcy5pMThuLnQoa2V5LCAnTWluaUdhbWVzJyk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGxvYWRHZW5lc2lzQ2F0YWxvZygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBsZXQgbG9hZGVkID0gZmFsc2U7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goR0VORVNJU19DQVRBTE9HX1VSTCk7XG4gICAgICBpZiAocmVzcG9uc2Uub2spIHtcbiAgICAgICAgY29uc3QgY2F0YWxvZyA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyBDaHJpc3RpYW5pdHlFZGl0aW9uQ2F0YWxvZztcbiAgICAgICAgY29uc3QgY2FyZHMgPSAoY2F0YWxvZy5jYXJkcyA/PyBbXSkubWFwKGNhcmQgPT4gdGhpcy5ub3JtYWxpemVDYXRhbG9nQ2FyZChjYXJkLCBjYXRhbG9nKSk7XG4gICAgICAgIGlmIChjYXJkcy5sZW5ndGgpIHtcbiAgICAgICAgICB0aGlzLmNhcmRDYXRhbG9nLnNldChPYmplY3QuZnJvbUVudHJpZXMoY2FyZHMubWFwKGNhcmQgPT4gW2NhcmQuaWQsIGNhcmRdKSkpO1xuICAgICAgICAgIHRoaXMuYWxsQ2F0YWxvZ0NhcmRzLnNldChjYXJkcyk7XG4gICAgICAgICAgdGhpcy5jYXRhbG9nTG9hZGVkLnNldCh0cnVlKTtcbiAgICAgICAgICB0aGlzLmdhbWUuc2V0KHRoaXMuY3JlYXRlVHV0b3JpYWxHYW1lKGNhcmRzKSk7XG4gICAgICAgICAgbG9hZGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ0NocmlzdGlhbml0eSBjYXRhbG9nIGNvdWxkIG5vdCBiZSBsb2FkZWQuIEZhbGxpbmcgYmFjayB0byBzdGFydGVyIGNhcmRzLicsIGVycm9yKTtcbiAgICB9XG4gICAgdGhpcy5jYXRhbG9nTG9hZFN0YXRlLnNldChsb2FkZWQgPyAncmVhZHknIDogJ2ZhbGxiYWNrJyk7XG4gICAgdGhpcy5maW5pc2hTcGxhc2goKTtcbiAgfVxuXG4gIHByaXZhdGUgZmluaXNoU3BsYXNoKCk6IHZvaWQge1xuICAgIGNvbnN0IGVsYXBzZWQgPSBwZXJmb3JtYW5jZS5ub3coKSAtIHRoaXMuYm9vdFN0YXJ0ZWRBdDtcbiAgICBjb25zdCByZW1haW5pbmcgPSBNYXRoLm1heCgwLCBTUExBU0hfTUlOX0RVUkFUSU9OX01TIC0gZWxhcHNlZCk7XG4gICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuc2NyZWVuKCkgPT09ICdzcGxhc2gnKSB7XG4gICAgICAgIHRoaXMuc2NyZWVuLnNldCgnaG9tZScpO1xuICAgICAgfVxuICAgIH0sIHJlbWFpbmluZyk7XG4gIH1cblxuICBwcml2YXRlIG5vcm1hbGl6ZUNhdGFsb2dDYXJkKGNhcmQ6IENocmlzdGlhbml0eUNhcmREZWZpbml0aW9uLCBjYXRhbG9nOiBDaHJpc3RpYW5pdHlFZGl0aW9uQ2F0YWxvZyk6IENocmlzdGlhbml0eUNhcmREZWZpbml0aW9uIHtcbiAgICBjb25zdCBlZGl0aW9uSWNvbiA9IGNhcmQuZWRpdGlvbkljb24gPz8gY2F0YWxvZy5lZGl0aW9uPy5pY29uID8/IEdFTkVTSVNfSUNPTl9VUkw7XG4gICAgY29uc3QgdmVyc2VUZXh0ID0gY2FyZC52ZXJzZVRleHQgPz8gY2FyZC5iaWJsZT8udGV4dDtcbiAgICBjb25zdCBzY3JpcHR1cmUgPSBjYXJkLnNjcmlwdHVyZSA/PyB0aGlzLmZvcm1hdFNjcmlwdHVyZShjYXJkLmJpYmxlKTtcbiAgICBjb25zdCBvZmZlcmluZ1ZhbHVlID0gY2FyZC50eXBlID09PSAnb2ZmZXJpbmcnID8gY2FyZC5vZmZlcmluZ1ZhbHVlID8/IGNhcmQubGlmZSA/PyBjYXJkLmNvc3QgPz8gMSA6IGNhcmQub2ZmZXJpbmdWYWx1ZTtcbiAgICBjb25zdCBsaWZlID0gY2FyZC50eXBlID09PSAnbGVhZGVyJ1xuICAgICAgPyBjYXJkLmxlYWRlckxpZmUgPz8gY2FyZC5saWZlID8/IDEwXG4gICAgICA6IGNhcmQudHlwZSA9PT0gJ29mZmVyaW5nJ1xuICAgICAgICA/IG9mZmVyaW5nVmFsdWVcbiAgICAgICAgOiBjYXJkLmxpZmUgPz8gMDtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uY2FyZCxcbiAgICAgIGNvc3Q6IGNhcmQudHlwZSA9PT0gJ29mZmVyaW5nJyA/IDAgOiBjYXJkLmNvc3QgPz8gMCxcbiAgICAgIG9mZmVyaW5nVmFsdWUsXG4gICAgICBsaWZlLFxuICAgICAgbGVhZGVyTGlmZTogY2FyZC50eXBlID09PSAnbGVhZGVyJyA/IGNhcmQubGVhZGVyTGlmZSA/PyBsaWZlIDogY2FyZC5sZWFkZXJMaWZlLFxuICAgICAgYXR0YWNrOiBjYXJkLnR5cGUgPT09ICdjaGFyYWN0ZXInID8gY2FyZC5hdHRhY2sgPz8gMCA6IGNhcmQuYXR0YWNrLFxuICAgICAgYWJpbGl0eU5hbWU6IGNhcmQuYWJpbGl0eU5hbWUgPz8gY2FyZC5hYmlsaXRpZXM/LlswXT8ubmFtZSxcbiAgICAgIGFiaWxpdHlUZXh0OiBjYXJkLmFiaWxpdHlUZXh0ID8/IGNhcmQuYWJpbGl0aWVzPy5bMF0/LnRleHQsXG4gICAgICB2ZXJzZVRleHQsXG4gICAgICBzY3JpcHR1cmUsXG4gICAgICBlZGl0aW9uOiBjYXJkLmVkaXRpb24gPz8gY2F0YWxvZy5lZGl0aW9uPy5pZCA/PyAnR0VOJyxcbiAgICAgIGVkaXRpb25OdW1iZXI6IGNhcmQuZWRpdGlvbk51bWJlciA/PyBjYXRhbG9nLmVkaXRpb24/Lm51bWJlcixcbiAgICAgIGVkaXRpb25JY29uLFxuICAgICAgaW1hZ2VVcmw6IGNhcmQuaW1hZ2VVcmwgPz8gY2FyZC5hcnQ/LmltYWdlVXJsLFxuICAgICAgYXV0aG9yOiBjYXJkLmF1dGhvciA/PyBjYXJkLmFydD8uYXJ0aXN0Q3JlZGl0LFxuICAgICAgeWVhcjogY2FyZC55ZWFyID8/ICcyMDI2JyxcbiAgICAgIGZyb250VGVtcGxhdGU6IGNhcmQuZnJvbnRUZW1wbGF0ZSA/PyAnZ2VuZXNpcy1jbGFzc2ljJyxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXRTY3JpcHR1cmUoYmlibGU/OiBDaHJpc3RpYW5pdHlDYXJkQmlibGVSZWZlcmVuY2UpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGlmICghYmlibGU/LmJvb2sgfHwgIWJpYmxlLnJlZmVyZW5jZSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICByZXR1cm4gYCR7YmlibGUuYm9va30gJHtiaWJsZS5yZWZlcmVuY2V9JHtiaWJsZS52ZXJzaW9uID8gYCAke2JpYmxlLnZlcnNpb259YCA6ICcnfWA7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVR1dG9yaWFsR2FtZShjYXJkczogQ2hyaXN0aWFuaXR5Q2FyZERlZmluaXRpb25bXSk6IENocmlzdGlhbml0eUdhbWVTdGF0ZSB7XG4gICAgY29uc3QgbGVhZGVycyA9IGNhcmRzLmZpbHRlcihjYXJkID0+IGNhcmQudHlwZSA9PT0gJ2xlYWRlcicpO1xuICAgIGNvbnN0IHBsYXllckxlYWRlciA9IHRoaXMuZmluZENhcmQobGVhZGVycywgJ0Fkw6FuJykgPz8gbGVhZGVyc1swXTtcbiAgICBjb25zdCBvcHBvbmVudExlYWRlciA9IHRoaXMuZmluZENhcmQobGVhZGVycywgJ05vw6knKSA/PyBsZWFkZXJzWzFdID8/IGxlYWRlcnNbMF07XG4gICAgY29uc3Qgb2ZmZXJpbmdzID0gY2FyZHMuZmlsdGVyKGNhcmQgPT4gY2FyZC50eXBlID09PSAnb2ZmZXJpbmcnKS5zbGljZSgwLCBUVVRPUklBTF9PRkZFUklOR19MSU1JVCk7XG4gICAgY29uc3QgY2hhcmFjdGVycyA9IGNhcmRzXG4gICAgICAuZmlsdGVyKGNhcmQgPT4gY2FyZC50eXBlID09PSAnY2hhcmFjdGVyJyAmJiAoY2FyZC5jb3N0ID8/IDApIDw9IDQgJiYgKGNhcmQuYXR0YWNrID8/IDApID49IDAgJiYgKGNhcmQubGlmZSA/PyAwKSA+IDApXG4gICAgICAuc2xpY2UoMCwgVFVUT1JJQUxfQ0hBUkFDVEVSX0xJTUlUKTtcbiAgICBjb25zdCBzdGFydGluZ09mZmVyaW5nID0gb2ZmZXJpbmdzWzBdID8/IFNUQVJURVJfQ0FSRFNbJ29fc2ltcGxlJ107XG4gICAgY29uc3QgdHV0b3JpYWxEZWNrID0gW1xuICAgICAgLi4ub2ZmZXJpbmdzLnNsaWNlKDEpLFxuICAgICAgLi4uY2hhcmFjdGVycyxcbiAgICAgIC4uLm9mZmVyaW5ncy5zbGljZSgwLCAxKSxcbiAgICBdLnNsaWNlKDAsIDIwKTtcbiAgICBjb25zdCBwbGF5ZXJIYW5kID0gdHV0b3JpYWxEZWNrLnNsaWNlKDAsIDQpLm1hcChjYXJkID0+IGNhcmQuaWQpO1xuICAgIGNvbnN0IG9wcG9uZW50QmF0dGxlQ2FyZCA9IGNoYXJhY3RlcnNbMF07XG4gICAgY29uc3Qgc2hhcmVkRGVjayA9IHR1dG9yaWFsRGVjay5zbGljZSg0KS5tYXAoY2FyZCA9PiBjYXJkLmlkKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5zdHJ1Y3R1cmVkQ2xvbmUoU1RBUlRJTkdfR0FNRSksXG4gICAgICBzdGF0dXM6ICdpbl9wcm9ncmVzcycsXG4gICAgICB0dXJuT3duZXI6ICdQMScsXG4gICAgICB0dXJuQ291bnQ6IDEsXG4gICAgICBtYXRjaFNjb3JlOiB7IFAxOiAwLCBQMjogMCB9LFxuICAgICAgc2hhcmVkRGVjayxcbiAgICAgIGhpc3Rvcnlab25lOiBbXSxcbiAgICAgIHBsYXllcnM6IHtcbiAgICAgICAgUDE6IHRoaXMuY3JlYXRlVHV0b3JpYWxQbGF5ZXIoJ1AxJywgcGxheWVyTGVhZGVyLCBzdGFydGluZ09mZmVyaW5nLCBwbGF5ZXJIYW5kLCBbXSksXG4gICAgICAgIFAyOiB0aGlzLmNyZWF0ZVR1dG9yaWFsUGxheWVyKFxuICAgICAgICAgICdQMicsXG4gICAgICAgICAgb3Bwb25lbnRMZWFkZXIsXG4gICAgICAgICAgc3RhcnRpbmdPZmZlcmluZyxcbiAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgb3Bwb25lbnRCYXR0bGVDYXJkID8gW3RoaXMuY3JlYXRlQ2hhcmFjdGVySW5zdGFuY2Uob3Bwb25lbnRCYXR0bGVDYXJkLCAnUDInLCAwLCAnb3BwXzAwMScpXSA6IFtdLFxuICAgICAgICApLFxuICAgICAgfSxcbiAgICAgIGxvZzogW3RoaXMudCgnY2hyaXN0aWFuaXR5VHV0b3JpYWxMb2FkZWQnKV0sXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlVHV0b3JpYWxQbGF5ZXIoXG4gICAgc2VhdDogQ2hyaXN0aWFuaXR5U2VhdCxcbiAgICBsZWFkZXI6IENocmlzdGlhbml0eUNhcmREZWZpbml0aW9uIHwgdW5kZWZpbmVkLFxuICAgIHN0YXJ0aW5nT2ZmZXJpbmc6IENocmlzdGlhbml0eUNhcmREZWZpbml0aW9uLFxuICAgIGhhbmQ6IHN0cmluZ1tdIHwgdW5kZWZpbmVkLFxuICAgIGJhdHRsZVpvbmU6IENocmlzdGlhbml0eUNoYXJhY3Rlckluc3RhbmNlW10sXG4gICk6IENocmlzdGlhbml0eVBsYXllclN0YXRlIHtcbiAgICBjb25zdCBiYXNlID0gU1RBUlRJTkdfR0FNRS5wbGF5ZXJzW3NlYXRdO1xuICAgIGNvbnN0IGxlYWRlckxpZmUgPSBsZWFkZXI/LmxlYWRlckxpZmUgPz8gbGVhZGVyPy5saWZlID8/IGJhc2UubGVhZGVyTWF4SHA7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0cnVjdHVyZWRDbG9uZShiYXNlKSxcbiAgICAgIGxlYWRlckNhcmRJZDogbGVhZGVyPy5pZCxcbiAgICAgIGxlYWRlck5hbWU6IGxlYWRlciA/IHRoaXMudHJhbnNsYXRlZENhcmRUZXh0KGxlYWRlcikubmFtZSA6IGJhc2UubGVhZGVyTmFtZSxcbiAgICAgIGxlYWRlckhwOiBsZWFkZXJMaWZlLFxuICAgICAgbGVhZGVyTWF4SHA6IGxlYWRlckxpZmUsXG4gICAgICBvZmZlcmluZ3M6IFt0aGlzLmNyZWF0ZU9mZmVyaW5nSW5zdGFuY2Uoc3RhcnRpbmdPZmZlcmluZywgc2VhdCwgYCR7c2VhdC50b0xvd2VyQ2FzZSgpfV9vZmZlcmluZ18wMDFgKV0sXG4gICAgICBvZmZlcmluZ1BsYXllZFRoaXNUdXJuOiBmYWxzZSxcbiAgICAgIGhhbmQsXG4gICAgICBoYW5kQ291bnQ6IGhhbmQgPyB1bmRlZmluZWQgOiA0LFxuICAgICAgYmF0dGxlWm9uZSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVPZmZlcmluZ0luc3RhbmNlKGNhcmQ6IENocmlzdGlhbml0eUNhcmREZWZpbml0aW9uLCBzZWF0OiBDaHJpc3RpYW5pdHlTZWF0LCBpbnN0YW5jZUlkOiBzdHJpbmcpOiBDaHJpc3RpYW5pdHlPZmZlcmluZ0luc3RhbmNlIHtcbiAgICBjb25zdCB2YWx1ZSA9IGNhcmQub2ZmZXJpbmdWYWx1ZSA/PyBjYXJkLmxpZmUgPz8gMTtcbiAgICByZXR1cm4ge1xuICAgICAgaW5zdGFuY2VJZCxcbiAgICAgIGNhcmRJZDogY2FyZC5pZCxcbiAgICAgIG5hbWU6IHRoaXMudHJhbnNsYXRlZENhcmRUZXh0KGNhcmQpLm5hbWUsXG4gICAgICBvd25lcjogc2VhdCxcbiAgICAgIHJlYWR5OiB0cnVlLFxuICAgICAgdmFsdWUsXG4gICAgICBhYmlsaXR5TmFtZTogY2FyZC5hYmlsaXR5TmFtZSxcbiAgICAgIGFiaWxpdHlUZXh0OiBjYXJkLmFiaWxpdHlUZXh0LFxuICAgICAgYWJpbGl0eUNvc3Q6IGNhcmQuYWJpbGl0eUNvc3QsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlQ2hhcmFjdGVySW5zdGFuY2UoY2FyZDogQ2hyaXN0aWFuaXR5Q2FyZERlZmluaXRpb24sIHNlYXQ6IENocmlzdGlhbml0eVNlYXQsIHNsb3Q6IG51bWJlciwgaW5zdGFuY2VJZDogc3RyaW5nKTogQ2hyaXN0aWFuaXR5Q2hhcmFjdGVySW5zdGFuY2Uge1xuICAgIGNvbnN0IGxpZmUgPSBjYXJkLmxpZmUgPz8gMTtcbiAgICByZXR1cm4ge1xuICAgICAgaW5zdGFuY2VJZCxcbiAgICAgIGNhcmRJZDogY2FyZC5pZCxcbiAgICAgIG5hbWU6IHRoaXMudHJhbnNsYXRlZENhcmRUZXh0KGNhcmQpLm5hbWUsXG4gICAgICBvd25lcjogc2VhdCxcbiAgICAgIGNvbnRyb2xsZXI6IHNlYXQsXG4gICAgICBzbG90LFxuICAgICAgYXR0YWNrOiBjYXJkLmF0dGFjayA/PyAwLFxuICAgICAgY3VycmVudEhwOiBsaWZlLFxuICAgICAgbWF4SHA6IGxpZmUsXG4gICAgICBjYW5BdHRhY2s6IGZhbHNlLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGZpbmRDYXJkKGNhcmRzOiBDaHJpc3RpYW5pdHlDYXJkRGVmaW5pdGlvbltdLCBuYW1lUGFydDogc3RyaW5nKTogQ2hyaXN0aWFuaXR5Q2FyZERlZmluaXRpb24gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiBjYXJkcy5maW5kKGNhcmQgPT4gdGhpcy50cmFuc2xhdGVkQ2FyZFRleHQoY2FyZCkubmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKG5hbWVQYXJ0LnRvTG93ZXJDYXNlKCkpKTtcbiAgfVxuXG4gIHByaXZhdGUgY2FyZFNvcnRLZXkoY2FyZDogQ2hyaXN0aWFuaXR5Q2FyZERlZmluaXRpb24pOiBzdHJpbmcge1xuICAgIGNvbnN0IGNvbGxlY3RvciA9IGNhcmQuY29sbGVjdG9yTnVtYmVyID8/IGNhcmQuaWQ7XG4gICAgcmV0dXJuIGAke2NhcmQuZWRpdGlvbiA/PyAnJ30tJHtjb2xsZWN0b3IucGFkU3RhcnQoOCwgJzAnKX0tJHt0aGlzLnRyYW5zbGF0ZWRDYXJkVGV4dChjYXJkKS5uYW1lfWA7XG4gIH1cblxuICBwcm90ZWN0ZWQgY2FyZERlZmluaXRpb24oY2FyZElkOiBzdHJpbmcpOiBDaHJpc3RpYW5pdHlDYXJkRGVmaW5pdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuY2FyZENhdGFsb2coKVtjYXJkSWRdID8/IFNUQVJURVJfQ0FSRFNbY2FyZElkXSA/PyBTVEFSVEVSX0NBUkRTWydwX3Njb3V0J107XG4gIH1cblxuICBwcml2YXRlIHRyYW5zbGF0ZWRDYXJkVGV4dChjYXJkOiBDaHJpc3RpYW5pdHlDYXJkRGVmaW5pdGlvbik6IENocmlzdGlhbml0eVJlc29sdmVkQ2FyZFRleHQge1xuICAgIGNvbnN0IGxhbmcgPSB0aGlzLmkxOG4ubGFuZygpO1xuICAgIGNvbnN0IHRyYW5zbGF0aW9uID0gY2FyZC5pMThuPy5bbGFuZ10gPz8gY2FyZC5pMThuPy5bJ2VzJ107XG4gICAgY29uc3QgcHJpbWFyeUFiaWxpdHkgPSB0cmFuc2xhdGlvbj8uYWJpbGl0aWVzPy5bMF0gPz8gY2FyZC5hYmlsaXRpZXM/LlswXTtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogdHJhbnNsYXRpb24/Lm5hbWUgPz8gY2FyZC5uYW1lLFxuICAgICAgZnVsbE5hbWU6IHRyYW5zbGF0aW9uPy5mdWxsTmFtZSA/PyBjYXJkLmZ1bGxOYW1lLFxuICAgICAgdmVyc2VUZXh0OiB0cmFuc2xhdGlvbj8udmVyc2VUZXh0ID8/IGNhcmQudmVyc2VUZXh0LFxuICAgICAgc2NyaXB0dXJlOiB0cmFuc2xhdGlvbj8uc2NyaXB0dXJlID8/IGNhcmQuc2NyaXB0dXJlLFxuICAgICAgYWJpbGl0eU5hbWU6IHRyYW5zbGF0aW9uPy5hYmlsaXR5TmFtZSA/PyBwcmltYXJ5QWJpbGl0eT8ubmFtZSA/PyBjYXJkLmFiaWxpdHlOYW1lLFxuICAgICAgYWJpbGl0eVRleHQ6IHRyYW5zbGF0aW9uPy5hYmlsaXR5VGV4dCA/PyBwcmltYXJ5QWJpbGl0eT8udGV4dCA/PyBjYXJkLmFiaWxpdHlUZXh0LFxuICAgICAgYWJpbGl0aWVzOiB0cmFuc2xhdGlvbj8uYWJpbGl0aWVzID8/IGNhcmQuYWJpbGl0aWVzLFxuICAgIH07XG4gIH1cblxuICBwcm90ZWN0ZWQgY2FyZERpc3BsYXlOYW1lKGNhcmRJZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy50cmFuc2xhdGVkQ2FyZFRleHQodGhpcy5jYXJkRGVmaW5pdGlvbihjYXJkSWQpKS5uYW1lO1xuICB9XG5cbiAgcHJvdGVjdGVkIHBsYXllckxlYWRlckRpc3BsYXlOYW1lKHBsYXllcjogQ2hyaXN0aWFuaXR5UGxheWVyU3RhdGUpOiBzdHJpbmcge1xuICAgIHJldHVybiBwbGF5ZXIubGVhZGVyQ2FyZElkID8gdGhpcy5jYXJkRGlzcGxheU5hbWUocGxheWVyLmxlYWRlckNhcmRJZCkgOiBwbGF5ZXIubGVhZGVyTmFtZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjYXRhbG9nU3RhdHVzTGFiZWwoKTogc3RyaW5nIHtcbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuY2F0YWxvZ0xvYWRTdGF0ZSgpO1xuICAgIGlmIChzdGF0ZSA9PT0gJ3JlYWR5JykgcmV0dXJuIHRoaXMudCgnY2hyaXN0aWFuaXR5Q2F0YWxvZ1JlYWR5Jyk7XG4gICAgaWYgKHN0YXRlID09PSAnZmFsbGJhY2snKSByZXR1cm4gdGhpcy50KCdjaHJpc3RpYW5pdHlDYXRhbG9nRmFsbGJhY2snKTtcbiAgICByZXR1cm4gdGhpcy50KCdjaHJpc3RpYW5pdHlDYXRhbG9nTG9hZGluZycpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHN0YXJ0RmVhdHVyZWRDYXJkVHJhbnNmb3JtKGluZGV4OiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGNvbnN0IHRyYW5zZm9ybXMgPSBbXG4gICAgICAndHJhbnNsYXRlWCgtMS40cmVtKSByb3RhdGUoLTlkZWcpJyxcbiAgICAgICd0cmFuc2xhdGVZKC0wLjU1cmVtKSByb3RhdGUoMmRlZyknLFxuICAgICAgJ3RyYW5zbGF0ZVgoMS40cmVtKSByb3RhdGUoMTBkZWcpJyxcbiAgICBdO1xuICAgIHJldHVybiB0cmFuc2Zvcm1zW2luZGV4XSA/PyAnbm9uZSc7XG4gIH1cblxuICBwcm90ZWN0ZWQgY2FyZFR5cGVMYWJlbChjYXJkOiBDaHJpc3RpYW5pdHlDYXJkRGVmaW5pdGlvbik6IHN0cmluZyB7XG4gICAgY29uc3QgbGFiZWxzOiBSZWNvcmQ8Q2hyaXN0aWFuaXR5Q2FyZFR5cGUsIHN0cmluZz4gPSB7XG4gICAgICBhY3Rpb246IHRoaXMudCgnY2hyaXN0aWFuaXR5QWN0aW9uQ2FyZCcpLFxuICAgICAgY2hhcmFjdGVyOiB0aGlzLnQoJ2NocmlzdGlhbml0eUNoYXJhY3RlckNhcmQnKSxcbiAgICAgIGV2ZW50OiB0aGlzLnQoJ2NocmlzdGlhbml0eUV2ZW50Q2FyZCcpLFxuICAgICAgbGVhZGVyOiB0aGlzLnQoJ2NocmlzdGlhbml0eUxlYWRlckNhcmQnKSxcbiAgICAgIG9mZmVyaW5nOiB0aGlzLnQoJ2NocmlzdGlhbml0eU9mZmVyaW5nQ2FyZCcpLFxuICAgICAgcGxhY2U6IHRoaXMudCgnY2hyaXN0aWFuaXR5UGxhY2VDYXJkJyksXG4gICAgICB0b29sOiB0aGlzLnQoJ2NocmlzdGlhbml0eVRvb2xDYXJkJyksXG4gICAgICB3aXNkb206IHRoaXMudCgnY2hyaXN0aWFuaXR5V2lzZG9tQ2FyZCcpLFxuICAgIH07XG4gICAgcmV0dXJuIGxhYmVsc1tjYXJkLnR5cGVdO1xuICB9XG5cbiAgcHJvdGVjdGVkIGRlZmluaXRpb25Ub1JlbmRlckNhcmQoXG4gICAgY2FyZDogQ2hyaXN0aWFuaXR5Q2FyZERlZmluaXRpb24sXG4gICAgb3ZlcnJpZGVzOiBQYXJ0aWFsPENocmlzdGlhbml0eUNhcmRSZW5kZXJNb2RlbD4gPSB7fSxcbiAgKTogQ2hyaXN0aWFuaXR5Q2FyZFJlbmRlck1vZGVsIHtcbiAgICBjb25zdCB0ZXh0ID0gdGhpcy50cmFuc2xhdGVkQ2FyZFRleHQoY2FyZCk7XG4gICAgY29uc3QgYmFzZTogQ2hyaXN0aWFuaXR5Q2FyZFJlbmRlck1vZGVsID0ge1xuICAgICAgaWQ6IGNhcmQuaWQsXG4gICAgICBuYW1lOiB0ZXh0Lm5hbWUsXG4gICAgICB0eXBlOiBjYXJkLnR5cGUsXG4gICAgICB0eXBlTGFiZWw6IHRoaXMuY2FyZFR5cGVMYWJlbChjYXJkKSxcbiAgICAgIGNvc3Q6IGNhcmQuY29zdCxcbiAgICAgIG9mZmVyaW5nVmFsdWU6IGNhcmQudHlwZSA9PT0gJ29mZmVyaW5nJyA/IGNhcmQub2ZmZXJpbmdWYWx1ZSA/PyBjYXJkLmxpZmUgOiB1bmRlZmluZWQsXG4gICAgICBhdHRhY2s6IGNhcmQudHlwZSA9PT0gJ2NoYXJhY3RlcicgPyBjYXJkLmF0dGFjayA6IHVuZGVmaW5lZCxcbiAgICAgIGxpZmU6IGNhcmQubGlmZSxcbiAgICAgIGN1cnJlbnRIcDogY2FyZC5saWZlLFxuICAgICAgbWF4SHA6IGNhcmQubGlmZSxcbiAgICAgIGFiaWxpdHlOYW1lOiB0ZXh0LmFiaWxpdHlOYW1lLFxuICAgICAgYWJpbGl0eVRleHQ6IHRleHQuYWJpbGl0eVRleHQgfHwgdGhpcy5kZWZhdWx0Q2FyZEJvZHkoY2FyZC50eXBlKSxcbiAgICAgIHZlcnNlVGV4dDogdGV4dC52ZXJzZVRleHQsXG4gICAgICBzY3JpcHR1cmU6IHRleHQuc2NyaXB0dXJlLFxuICAgICAgZWRpdGlvbjogY2FyZC5lZGl0aW9uLFxuICAgICAgY29sbGVjdG9yTnVtYmVyOiBjYXJkLmNvbGxlY3Rvck51bWJlcixcbiAgICAgIGVkaXRpb25JY29uOiBjYXJkLmVkaXRpb25JY29uID8/IChjYXJkLmVkaXRpb24gPT09ICdHRU4nID8gR0VORVNJU19JQ09OX1VSTCA6IHVuZGVmaW5lZCksXG4gICAgICB5ZWFyOiBjYXJkLnllYXIsXG4gICAgICBhdXRob3I6IGNhcmQuYXV0aG9yLFxuICAgICAgcmFyaXR5OiBjYXJkLnJhcml0eSxcbiAgICAgIGltYWdlVXJsOiBjYXJkLmltYWdlVXJsLFxuICAgICAgZnJvbnRUZW1wbGF0ZTogY2FyZC5mcm9udFRlbXBsYXRlID8/IChjYXJkLmVkaXRpb24gPT09ICdHRU4nID8gJ2dlbmVzaXMtY2xhc3NpYycgOiB1bmRlZmluZWQpLFxuICAgIH07XG4gICAgcmV0dXJuIHsgLi4uYmFzZSwgLi4ub3ZlcnJpZGVzIH07XG4gIH1cblxuICBwcm90ZWN0ZWQgaGlkZGVuQ2FyZFJlbmRlckNhcmQoKTogQ2hyaXN0aWFuaXR5Q2FyZFJlbmRlck1vZGVsIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6ICdjaHJpc3RpYW5pdHktaGlkZGVuLWNhcmQnLFxuICAgICAgbmFtZTogdGhpcy50KCdjaHJpc3RpYW5pdHlIaWRkZW5DYXJkJyksXG4gICAgICB0eXBlOiAnZXZlbnQnLFxuICAgICAgdHlwZUxhYmVsOiB0aGlzLnQoJ2NocmlzdGlhbml0eUhpZGRlbkNhcmQnKSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBkZWZhdWx0Q2FyZEJvZHkodHlwZTogQ2hyaXN0aWFuaXR5Q2FyZFR5cGUpOiBzdHJpbmcge1xuICAgIGNvbnN0IGJvZGllczogUmVjb3JkPENocmlzdGlhbml0eUNhcmRUeXBlLCBzdHJpbmc+ID0ge1xuICAgICAgYWN0aW9uOiB0aGlzLnQoJ2NocmlzdGlhbml0eUFjdGlvblJ1bGVCb2R5JyksXG4gICAgICBjaGFyYWN0ZXI6IHRoaXMudCgnY2hyaXN0aWFuaXR5Q2hhcmFjdGVyQm9keScpLFxuICAgICAgZXZlbnQ6IHRoaXMudCgnY2hyaXN0aWFuaXR5RXZlbnRSdWxlQm9keScpLFxuICAgICAgbGVhZGVyOiB0aGlzLnQoJ2NocmlzdGlhbml0eUxlYWRlckJvZHknKSxcbiAgICAgIG9mZmVyaW5nOiB0aGlzLnQoJ2NocmlzdGlhbml0eU9mZmVyaW5nQm9keScpLFxuICAgICAgcGxhY2U6IHRoaXMudCgnY2hyaXN0aWFuaXR5UGxhY2VSdWxlQm9keScpLFxuICAgICAgdG9vbDogdGhpcy50KCdjaHJpc3RpYW5pdHlUb29sUnVsZUJvZHknKSxcbiAgICAgIHdpc2RvbTogdGhpcy50KCdjaHJpc3RpYW5pdHlXaXNkb21SdWxlQm9keScpLFxuICAgIH07XG4gICAgcmV0dXJuIGJvZGllc1t0eXBlXTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjaGFyYWN0ZXJSZW5kZXJDYXJkKGNhcmQ6IENocmlzdGlhbml0eUNoYXJhY3Rlckluc3RhbmNlKTogQ2hyaXN0aWFuaXR5Q2FyZFJlbmRlck1vZGVsIHtcbiAgICBjb25zdCBkZWZpbml0aW9uID0gdGhpcy5jYXJkRGVmaW5pdGlvbihjYXJkLmNhcmRJZCk7XG4gICAgcmV0dXJuIHRoaXMuZGVmaW5pdGlvblRvUmVuZGVyQ2FyZChkZWZpbml0aW9uLCB7XG4gICAgICBpZDogY2FyZC5pbnN0YW5jZUlkLFxuICAgICAgYXR0YWNrOiBjYXJkLmF0dGFjayxcbiAgICAgIGxpZmU6IGNhcmQubWF4SHAsXG4gICAgICBjdXJyZW50SHA6IGNhcmQuY3VycmVudEhwLFxuICAgICAgbWF4SHA6IGNhcmQubWF4SHAsXG4gICAgICBzdGF0dXNUZXh0OiBjYXJkLmNhbkF0dGFjayA/IHRoaXMudCgnY2hyaXN0aWFuaXR5Q2hhcmFjdGVyUmVhZHknKSA6IHRoaXMudCgnY2hyaXN0aWFuaXR5Q2hhcmFjdGVyRXhoYXVzdGVkJyksXG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgbGVhZGVyUmVuZGVyQ2FyZChwbGF5ZXI6IENocmlzdGlhbml0eVBsYXllclN0YXRlKTogQ2hyaXN0aWFuaXR5Q2FyZFJlbmRlck1vZGVsIHtcbiAgICBpZiAocGxheWVyLmxlYWRlckNhcmRJZCkge1xuICAgICAgY29uc3QgZGVmaW5pdGlvbiA9IHRoaXMuY2FyZERlZmluaXRpb24ocGxheWVyLmxlYWRlckNhcmRJZCk7XG4gICAgICByZXR1cm4gdGhpcy5kZWZpbml0aW9uVG9SZW5kZXJDYXJkKGRlZmluaXRpb24sIHtcbiAgICAgICAgaWQ6IGAke3BsYXllci5zZWF0fS1sZWFkZXJgLFxuICAgICAgICBuYW1lOiB0aGlzLnRyYW5zbGF0ZWRDYXJkVGV4dChkZWZpbml0aW9uKS5uYW1lLFxuICAgICAgICB0eXBlOiAnbGVhZGVyJyxcbiAgICAgICAgdHlwZUxhYmVsOiB0aGlzLnQoJ2NocmlzdGlhbml0eUxlYWRlckNhcmQnKSxcbiAgICAgICAgbGlmZTogcGxheWVyLmxlYWRlckhwLFxuICAgICAgICBjdXJyZW50SHA6IHBsYXllci5sZWFkZXJIcCxcbiAgICAgICAgbWF4SHA6IHBsYXllci5sZWFkZXJNYXhIcCxcbiAgICAgICAgc3RhdHVzVGV4dDogdGhpcy50KCdjaHJpc3RpYW5pdHlMZWFkZXJCb2R5JyksXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBgJHtwbGF5ZXIuc2VhdH0tbGVhZGVyYCxcbiAgICAgIG5hbWU6IHBsYXllci5sZWFkZXJOYW1lLFxuICAgICAgdHlwZTogJ2xlYWRlcicsXG4gICAgICB0eXBlTGFiZWw6IHRoaXMudCgnY2hyaXN0aWFuaXR5TGVhZGVyQ2FyZCcpLFxuICAgICAgbGlmZTogcGxheWVyLmxlYWRlckhwLFxuICAgICAgY3VycmVudEhwOiBwbGF5ZXIubGVhZGVySHAsXG4gICAgICBtYXhIcDogcGxheWVyLmxlYWRlck1heEhwLFxuICAgICAgYWJpbGl0eU5hbWU6IHRoaXMudCgnY2hyaXN0aWFuaXR5TGVhZGVyQ2FyZCcpLFxuICAgICAgYWJpbGl0eVRleHQ6IHRoaXMudCgnY2hyaXN0aWFuaXR5TGVhZGVyQm9keScpLFxuICAgICAgdmVyc2VUZXh0OiB0aGlzLnQoJ2NocmlzdGlhbml0eUxlYWRlckJvZHknKSxcbiAgICAgIGVkaXRpb246ICdNVlAnLFxuICAgICAgY29sbGVjdG9yTnVtYmVyOiAnTElERVInLFxuICAgICAgZWRpdGlvbkljb246IEdFTkVTSVNfSUNPTl9VUkwsXG4gICAgICB5ZWFyOiAnMjAyNicsXG4gICAgICBhdXRob3I6ICdNVlAnLFxuICAgICAgcmFyaXR5OiAnbGVnZW5kYXJ5JyxcbiAgICAgIGZyb250VGVtcGxhdGU6ICdnZW5lc2lzLWNsYXNzaWMnLFxuICAgIH07XG4gIH1cblxuICBwcm90ZWN0ZWQgb2ZmZXJpbmdSZW5kZXJDYXJkKG9mZmVyaW5nOiBDaHJpc3RpYW5pdHlPZmZlcmluZ0luc3RhbmNlKTogQ2hyaXN0aWFuaXR5Q2FyZFJlbmRlck1vZGVsIHtcbiAgICBjb25zdCBkZWZpbml0aW9uID0gdGhpcy5jYXJkRGVmaW5pdGlvbihvZmZlcmluZy5jYXJkSWQpO1xuICAgIGNvbnN0IHRleHQgPSB0aGlzLnRyYW5zbGF0ZWRDYXJkVGV4dChkZWZpbml0aW9uKTtcbiAgICByZXR1cm4gdGhpcy5kZWZpbml0aW9uVG9SZW5kZXJDYXJkKGRlZmluaXRpb24sIHtcbiAgICAgIGlkOiBvZmZlcmluZy5pbnN0YW5jZUlkLFxuICAgICAgbmFtZTogdGV4dC5uYW1lLFxuICAgICAgdHlwZTogJ29mZmVyaW5nJyxcbiAgICAgIHR5cGVMYWJlbDogdGhpcy50KCdjaHJpc3RpYW5pdHlPZmZlcmluZ0NhcmQnKSxcbiAgICAgIG9mZmVyaW5nVmFsdWU6IG9mZmVyaW5nLnZhbHVlLFxuICAgICAgbGlmZTogb2ZmZXJpbmcudmFsdWUsXG4gICAgICBjdXJyZW50SHA6IG9mZmVyaW5nLnZhbHVlLFxuICAgICAgbWF4SHA6IG9mZmVyaW5nLnZhbHVlLFxuICAgICAgYWJpbGl0eU5hbWU6IHRleHQuYWJpbGl0eU5hbWUgPz8gb2ZmZXJpbmcuYWJpbGl0eU5hbWUsXG4gICAgICBhYmlsaXR5VGV4dDogdGV4dC5hYmlsaXR5VGV4dCA/PyBvZmZlcmluZy5hYmlsaXR5VGV4dCA/PyB0aGlzLnQoJ2NocmlzdGlhbml0eU9mZmVyaW5nTm9BYmlsaXR5JyksXG4gICAgICBzdGF0dXNUZXh0OiBvZmZlcmluZy5yZWFkeSA/IHRoaXMudCgnY2hyaXN0aWFuaXR5T2ZmZXJpbmdSZWFkeScpIDogdGhpcy50KCdjaHJpc3RpYW5pdHlPZmZlcmluZ0V4aGF1c3RlZCcpLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBwcmV2aWV3UmVuZGVyVHlwZSh0eXBlTGFiZWw6IHN0cmluZyk6IENocmlzdGlhbml0eUNhcmRSZW5kZXJUeXBlIHtcbiAgICBpZiAodHlwZUxhYmVsID09PSB0aGlzLnQoJ2NocmlzdGlhbml0eUxlYWRlckNhcmQnKSkgcmV0dXJuICdsZWFkZXInO1xuICAgIGlmICh0eXBlTGFiZWwgPT09IHRoaXMudCgnY2hyaXN0aWFuaXR5T2ZmZXJpbmdDYXJkJykpIHJldHVybiAnb2ZmZXJpbmcnO1xuICAgIHJldHVybiAnY2hhcmFjdGVyJztcbiAgfVxuXG4gIHByb3RlY3RlZCBjYXJkVHlwZUljb25VcmwoY2FyZDogQ2hyaXN0aWFuaXR5Q2FyZERlZmluaXRpb24pOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmNhcmRUeXBlSWNvblVybEZvclR5cGUoY2FyZC50eXBlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBwcmV2aWV3VHlwZUljb25VcmwoKTogc3RyaW5nIHtcbiAgICBjb25zdCBwcmV2aWV3ID0gdGhpcy5zZWxlY3RlZFByZXZpZXcoKTtcbiAgICBpZiAocHJldmlldz8uZXllYnJvdyA9PT0gdGhpcy50KCdjaHJpc3RpYW5pdHlMZWFkZXJDYXJkJykpIHJldHVybiB0aGlzLmNhcmRUeXBlSWNvblVybEZvclR5cGUoJ2xlYWRlcicpO1xuICAgIGlmIChwcmV2aWV3Py5leWVicm93ID09PSB0aGlzLnQoJ2NocmlzdGlhbml0eU9mZmVyaW5nQ2FyZCcpKSByZXR1cm4gdGhpcy5jYXJkVHlwZUljb25VcmxGb3JUeXBlKCdvZmZlcmluZycpO1xuICAgIHJldHVybiB0aGlzLmNhcmRUeXBlSWNvblVybEZvclR5cGUoJ2NoYXJhY3RlcicpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNhcmRUeXBlSWNvblVybEZvclR5cGUodHlwZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBub3JtYWxpemVkID0gdHlwZS50b0xvd2VyQ2FzZSgpLm5vcm1hbGl6ZSgnTkZEJykucmVwbGFjZSgvW1xcdTAzMDAtXFx1MDM2Zl0vZywgJycpO1xuICAgIGNvbnN0IGljb24gPSBub3JtYWxpemVkID09PSAnbGlkZXInID8gJ2xlYWRlcicgOiBub3JtYWxpemVkID09PSAncGVyc29uYWplJyA/ICdjaGFyYWN0ZXInIDogbm9ybWFsaXplZCA9PT0gJ29mcmVuZGEnID8gJ29mZmVyaW5nJyA6IG5vcm1hbGl6ZWQ7XG4gICAgcmV0dXJuIGBhc3NldHMvZ2FtZXMvY2hyaXN0aWFuaXR5L2ljb25zLyR7aWNvbn0ucG5nYDtcbiAgfVxuXG4gIHByb3RlY3RlZCBvZmZlcmluZ1BpcHModmFsdWU6IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZCk6IHVua25vd25bXSB7XG4gICAgY29uc3QgY291bnQgPSBOdW1iZXIodmFsdWUpO1xuICAgIGlmICghTnVtYmVyLmlzRmluaXRlKGNvdW50KSB8fCBjb3VudCA8PSAwKSByZXR1cm4gW107XG4gICAgcmV0dXJuIEFycmF5LmZyb20oeyBsZW5ndGg6IE1hdGgubWluKE1hdGguZmxvb3IoY291bnQpLCA1KSB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBiYXR0bGVTbG90cyhzZWF0OiBDaHJpc3RpYW5pdHlTZWF0KTogQXJyYXk8eyB0cmFja0lkOiBzdHJpbmc7IGNhcmQ/OiBDaHJpc3RpYW5pdHlDaGFyYWN0ZXJJbnN0YW5jZSB9PiB7XG4gICAgY29uc3QgY2FyZHMgPSB0aGlzLmdhbWUoKS5wbGF5ZXJzW3NlYXRdLmJhdHRsZVpvbmU7XG4gICAgY29uc3QgcG9zaXRpb25lZENhcmRzID0gbmV3IE1hcDxudW1iZXIsIENocmlzdGlhbml0eUNoYXJhY3Rlckluc3RhbmNlPigpO1xuICAgIGNhcmRzLmZvckVhY2goKGNhcmQsIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBzbG90ID0gTnVtYmVyLmlzSW50ZWdlcihjYXJkLnNsb3QpID8gY2FyZC5zbG90ID8/IGluZGV4IDogaW5kZXg7XG4gICAgICBpZiAoc2xvdCA+PSAwICYmIHNsb3QgPCA0ICYmICFwb3NpdGlvbmVkQ2FyZHMuaGFzKHNsb3QpKSB7XG4gICAgICAgIHBvc2l0aW9uZWRDYXJkcy5zZXQoc2xvdCwgY2FyZCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIEFycmF5LmZyb20oeyBsZW5ndGg6IDQgfSwgKF8sIGluZGV4KSA9PiAoe1xuICAgICAgdHJhY2tJZDogcG9zaXRpb25lZENhcmRzLmdldChpbmRleCk/Lmluc3RhbmNlSWQgPz8gYCR7c2VhdH0tZW1wdHktJHtpbmRleH1gLFxuICAgICAgY2FyZDogcG9zaXRpb25lZENhcmRzLmdldChpbmRleCksXG4gICAgfSkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGJhdHRsZVNsb3REcm9wSWQoaW5kZXg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBjaHJpc3RpYW5pdHktYmF0dGxlLXNsb3QtJHtpbmRleH1gO1xuICB9XG5cbiAgcHJvdGVjdGVkIGRyb3BUYXJnZXRJZHMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbJ2NocmlzdGlhbml0eS1vZmZlcmluZ3MtZHJvcCcsIC4uLnRoaXMuYmF0dGxlU2xvdHMoJ1AxJykubWFwKChfLCBpbmRleCkgPT4gdGhpcy5iYXR0bGVTbG90RHJvcElkKGluZGV4KSldO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhpZGRlbkhhbmRDYXJkcyhjb3VudDogbnVtYmVyKTogdW5rbm93bltdIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh7IGxlbmd0aDogY291bnQgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZmFuVHJhbnNmb3JtKGluZGV4OiBudW1iZXIsIHRvdGFsOiBudW1iZXIsIG9wcG9uZW50OiBib29sZWFuKTogc3RyaW5nIHtcbiAgICBpZiAodG90YWwgPD0gMSkgcmV0dXJuICdub25lJztcbiAgICBjb25zdCBjZW50ZXIgPSAodG90YWwgLSAxKSAvIDI7XG4gICAgY29uc3Qgb2Zmc2V0ID0gaW5kZXggLSBjZW50ZXI7XG4gICAgY29uc3Qgcm90YXRlID0gb2Zmc2V0ICogKG9wcG9uZW50ID8gNiA6IDUpO1xuICAgIGNvbnN0IGxpZnQgPSBNYXRoLmFicyhvZmZzZXQpICogMC4yNTtcbiAgICBjb25zdCBob3ZlckxpZnQgPSBvcHBvbmVudCA/IDAgOiB0aGlzLmhhbmRXYXZlTGlmdChpbmRleCk7XG4gICAgY29uc3Qgc2NhbGUgPSBvcHBvbmVudCA/IDEgOiB0aGlzLmhhbmRXYXZlU2NhbGUoaW5kZXgpO1xuICAgIGNvbnN0IGZhbkxpZnQgPSBvcHBvbmVudCA/IE1hdGguYWJzKG9mZnNldCkgKiAwLjIyIDogbGlmdCArIGhvdmVyTGlmdDtcbiAgICBjb25zdCBmYW5TcHJlYWQgPSBvcHBvbmVudCA/IG9mZnNldCAqIDAuMDIgOiAwO1xuICAgIHJldHVybiBgdHJhbnNsYXRlKCR7ZmFuU3ByZWFkfXJlbSwgJHtmYW5MaWZ0fXJlbSkgcm90YXRlKCR7cm90YXRlfWRlZykgc2NhbGUoJHtzY2FsZX0pYDtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kQ2FyZFpJbmRleChpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBjb25zdCBob3ZlcmVkID0gdGhpcy5ob3ZlcmVkSGFuZEluZGV4KCk7XG4gICAgaWYgKGhvdmVyZWQgPT09IG51bGwpIHJldHVybiAyO1xuICAgIGNvbnN0IGRpc3RhbmNlID0gTWF0aC5hYnMoaW5kZXggLSBob3ZlcmVkKTtcbiAgICByZXR1cm4gTWF0aC5tYXgoMiwgOCAtIGRpc3RhbmNlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzZXRIb3ZlcmVkSGFuZEluZGV4KGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLmhvdmVyZWRIYW5kSW5kZXguc2V0KGluZGV4KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjbGVhckhvdmVyZWRIYW5kSW5kZXgoKTogdm9pZCB7XG4gICAgdGhpcy5ob3ZlcmVkSGFuZEluZGV4LnNldChudWxsKTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZWxlYXNlSG92ZXJlZEhhbmQoZXZlbnQ6IFBvaW50ZXJFdmVudCk6IHZvaWQge1xuICAgIGlmIChldmVudC5wb2ludGVyVHlwZSAhPT0gJ21vdXNlJykge1xuICAgICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4gdGhpcy5jbGVhckhvdmVyZWRIYW5kSW5kZXgoKSwgMTgwKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhbmRXYXZlTGlmdChpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBjb25zdCBob3ZlcmVkID0gdGhpcy5ob3ZlcmVkSGFuZEluZGV4KCk7XG4gICAgaWYgKGhvdmVyZWQgPT09IG51bGwpIHJldHVybiAwO1xuICAgIGNvbnN0IGRpc3RhbmNlID0gTWF0aC5hYnMoaW5kZXggLSBob3ZlcmVkKTtcbiAgICBpZiAoZGlzdGFuY2UgPT09IDApIHJldHVybiAtMS4xNTtcbiAgICBpZiAoZGlzdGFuY2UgPT09IDEpIHJldHVybiAtMC41ODtcbiAgICBpZiAoZGlzdGFuY2UgPT09IDIpIHJldHVybiAtMC4yMjtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZFdhdmVTY2FsZShpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBjb25zdCBob3ZlcmVkID0gdGhpcy5ob3ZlcmVkSGFuZEluZGV4KCk7XG4gICAgaWYgKGhvdmVyZWQgPT09IG51bGwpIHJldHVybiAxO1xuICAgIGNvbnN0IGRpc3RhbmNlID0gTWF0aC5hYnMoaW5kZXggLSBob3ZlcmVkKTtcbiAgICBpZiAoZGlzdGFuY2UgPT09IDApIHJldHVybiAxLjA2O1xuICAgIGlmIChkaXN0YW5jZSA9PT0gMSkgcmV0dXJuIDEuMDM7XG4gICAgcmV0dXJuIDE7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVhZHlPZmZlcmluZ3MocGxheWVyOiBDaHJpc3RpYW5pdHlQbGF5ZXJTdGF0ZSk6IG51bWJlciB7XG4gICAgcmV0dXJuIHBsYXllci5vZmZlcmluZ3MucmVkdWNlKCh0b3RhbCwgb2ZmZXJpbmcpID0+IHRvdGFsICsgKG9mZmVyaW5nLnJlYWR5ID8gb2ZmZXJpbmcudmFsdWUgOiAwKSwgMCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgdG90YWxPZmZlcmluZ3MocGxheWVyOiBDaHJpc3RpYW5pdHlQbGF5ZXJTdGF0ZSk6IG51bWJlciB7XG4gICAgcmV0dXJuIHBsYXllci5vZmZlcmluZ3MucmVkdWNlKCh0b3RhbCwgb2ZmZXJpbmcpID0+IHRvdGFsICsgb2ZmZXJpbmcudmFsdWUsIDApO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNhblBsYXkoY2FyZDogQ2hyaXN0aWFuaXR5Q2FyZERlZmluaXRpb24pOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5nYW1lKCkuc3RhdHVzICE9PSAnaW5fcHJvZ3Jlc3MnKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKCF0aGlzLmlzT3duVHVybigpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKGNhcmQudHlwZSA9PT0gJ29mZmVyaW5nJykgcmV0dXJuICF0aGlzLnBsYXllcigpLm9mZmVyaW5nUGxheWVkVGhpc1R1cm47XG4gICAgaWYgKGNhcmQudHlwZSA9PT0gJ2NoYXJhY3RlcicpIHJldHVybiB0aGlzLnJlYWR5T2ZmZXJpbmdzKHRoaXMucGxheWVyKCkpID49IChjYXJkLmNvc3QgPz8gMCkgJiYgdGhpcy5wbGF5ZXIoKS5iYXR0bGVab25lLmxlbmd0aCA8IDQ7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNhblBsYXlTZWxlY3RlZCgpOiBib29sZWFuIHtcbiAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWRIYW5kQ2FyZCgpO1xuICAgIHJldHVybiAhIXNlbGVjdGVkICYmIHRoaXMuY2FuUGxheSh0aGlzLmNhcmREZWZpbml0aW9uKHNlbGVjdGVkKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2VsZWN0ZWRBY3Rpb25MYWJlbCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5zZWxlY3RlZENhcmREZWZpbml0aW9uKCk7XG4gICAgaWYgKCFzZWxlY3RlZCkgcmV0dXJuIHRoaXMudCgnY2hyaXN0aWFuaXR5UGxheUNhcmQnKTtcbiAgICByZXR1cm4gc2VsZWN0ZWQudHlwZSA9PT0gJ29mZmVyaW5nJyA/IHRoaXMudCgnY2hyaXN0aWFuaXR5UGxheU9mZmVyaW5nJykgOiB0aGlzLnQoJ2NocmlzdGlhbml0eVBsYXlDYXJkJyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2VsZWN0ZWRBY3Rpb25EaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWRDYXJkRGVmaW5pdGlvbigpO1xuICAgIGlmICghc2VsZWN0ZWQgfHwgIXRoaXMuY2FuUGxheShzZWxlY3RlZCkpIHJldHVybiB0cnVlO1xuICAgIHJldHVybiBzZWxlY3RlZC50eXBlID09PSAnY2hhcmFjdGVyJztcbiAgfVxuXG4gIHByb3RlY3RlZCBjYW5QbGFjZVNlbGVjdGVkQ2hhcmFjdGVyKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5zZWxlY3RlZENhcmREZWZpbml0aW9uKCk7XG4gICAgcmV0dXJuICEhc2VsZWN0ZWQgJiYgc2VsZWN0ZWQudHlwZSA9PT0gJ2NoYXJhY3RlcicgJiYgdGhpcy5jYW5QbGF5KHNlbGVjdGVkKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjYW5QbGFjZVNlbGVjdGVkT2ZmZXJpbmcoKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGVkQ2FyZERlZmluaXRpb24oKTtcbiAgICByZXR1cm4gISFzZWxlY3RlZCAmJiBzZWxlY3RlZC50eXBlID09PSAnb2ZmZXJpbmcnICYmIHRoaXMuY2FuUGxheShzZWxlY3RlZCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaXNEcmFnZ2luZ0NoYXJhY3RlcigpOiBib29sZWFuIHtcbiAgICBjb25zdCBjYXJkSWQgPSB0aGlzLmRyYWdnaW5nQ2FyZElkKCk7XG4gICAgaWYgKCFjYXJkSWQpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBjYXJkID0gdGhpcy5jYXJkRGVmaW5pdGlvbihjYXJkSWQpO1xuICAgIHJldHVybiBjYXJkLnR5cGUgPT09ICdjaGFyYWN0ZXInICYmIHRoaXMuY2FuUGxheShjYXJkKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBpc0RyYWdnaW5nT2ZmZXJpbmcoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgY2FyZElkID0gdGhpcy5kcmFnZ2luZ0NhcmRJZCgpO1xuICAgIGlmICghY2FyZElkKSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgY2FyZCA9IHRoaXMuY2FyZERlZmluaXRpb24oY2FyZElkKTtcbiAgICByZXR1cm4gY2FyZC50eXBlID09PSAnb2ZmZXJpbmcnICYmIHRoaXMuY2FuUGxheShjYXJkKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzdGFydERyYWdnaW5nQ2FyZChjYXJkSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0ZWRBdHRhY2tlci5zZXQobnVsbCk7XG4gICAgdGhpcy5zZWxlY3RlZEhhbmRDYXJkLnNldChjYXJkSWQpO1xuICAgIHRoaXMuZHJhZ2dpbmdDYXJkSWQuc2V0KGNhcmRJZCk7XG4gICAgdGhpcy5jbG9zZVByZXZpZXcoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBlbmREcmFnZ2luZ0NhcmQoKTogdm9pZCB7XG4gICAgdGhpcy5kcmFnZ2luZ0NhcmRJZC5zZXQobnVsbCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZHJvcE9uQmF0dGxlU2xvdChldmVudDogQ2RrRHJhZ0Ryb3A8bnVtYmVyLCB1bmtub3duLCBzdHJpbmc+LCBzbG90SW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IGNhcmQgPSB0aGlzLmNhcmREZWZpbml0aW9uKGV2ZW50Lml0ZW0uZGF0YSk7XG4gICAgaWYgKGNhcmQudHlwZSAhPT0gJ2NoYXJhY3RlcicpIHJldHVybjtcbiAgICB0aGlzLnBsYXlDYXJkRnJvbUhhbmQoZXZlbnQuaXRlbS5kYXRhLCBzbG90SW5kZXgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGRyb3BPbk9mZmVyaW5ncyhldmVudDogQ2RrRHJhZ0Ryb3A8dW5rbm93biwgdW5rbm93biwgc3RyaW5nPik6IHZvaWQge1xuICAgIGNvbnN0IGNhcmQgPSB0aGlzLmNhcmREZWZpbml0aW9uKGV2ZW50Lml0ZW0uZGF0YSk7XG4gICAgaWYgKGNhcmQudHlwZSAhPT0gJ29mZmVyaW5nJykgcmV0dXJuO1xuICAgIHRoaXMucGxheUNhcmRGcm9tSGFuZChldmVudC5pdGVtLmRhdGEpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNlbGVjdEhhbmRDYXJkKGNhcmRJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3Qgd2FzU2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGVkSGFuZENhcmQoKSA9PT0gY2FyZElkO1xuICAgIHRoaXMuc2VsZWN0ZWRBdHRhY2tlci5zZXQobnVsbCk7XG4gICAgdGhpcy5zZWxlY3RlZEhhbmRDYXJkLnNldCh3YXNTZWxlY3RlZCA/IG51bGwgOiBjYXJkSWQpO1xuICAgIHRoaXMuY2xvc2VQcmV2aWV3KCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcGxheVNlbGVjdGVkQ2FyZChzbG90SW5kZXg/OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBjYXJkSWQgPSB0aGlzLnNlbGVjdGVkSGFuZENhcmQoKTtcbiAgICBpZiAoIWNhcmRJZCkgcmV0dXJuO1xuICAgIHRoaXMucGxheUNhcmRGcm9tSGFuZChjYXJkSWQsIHNsb3RJbmRleCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcGxheUNhcmRGcm9tSGFuZChjYXJkSWQ6IHN0cmluZywgc2xvdEluZGV4PzogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgY2FyZCA9IHRoaXMuY2FyZERlZmluaXRpb24oY2FyZElkKTtcbiAgICBpZiAoIXRoaXMuY2FuUGxheShjYXJkKSkgcmV0dXJuO1xuICAgIGxldCBwbGF5ZWRPZmZlcmluZ1ZhbHVlID0gMDtcbiAgICBsZXQgc3BlbnRPZmZlcmluZ3MgPSAwO1xuXG4gICAgdGhpcy5nYW1lLnVwZGF0ZShnYW1lID0+IHtcbiAgICAgIGNvbnN0IG5leHQgPSBzdHJ1Y3R1cmVkQ2xvbmUoZ2FtZSk7XG4gICAgICBjb25zdCBwbGF5ZXIgPSBuZXh0LnBsYXllcnMuUDE7XG4gICAgICBjb25zdCBoYW5kSW5kZXggPSBwbGF5ZXIuaGFuZD8uaW5kZXhPZihjYXJkSWQpID8/IC0xO1xuICAgICAgaWYgKGhhbmRJbmRleCA8IDAgfHwgIXBsYXllci5oYW5kKSByZXR1cm4gZ2FtZTtcbiAgICAgIHBsYXllci5oYW5kLnNwbGljZShoYW5kSW5kZXgsIDEpO1xuICAgICAgaWYgKGNhcmQudHlwZSA9PT0gJ29mZmVyaW5nJykge1xuICAgICAgICBwbGF5ZXIub2ZmZXJpbmdzLnB1c2goe1xuICAgICAgICAgIGluc3RhbmNlSWQ6IGBwMV9vZmZlcmluZ18ke25leHQucmV2aXNpb24gKyAxfWAsXG4gICAgICAgICAgY2FyZElkOiBjYXJkLmlkLFxuICAgICAgICAgIG5hbWU6IGNhcmQubmFtZSxcbiAgICAgICAgICBvd25lcjogJ1AxJyxcbiAgICAgICAgICByZWFkeTogdHJ1ZSxcbiAgICAgICAgICB2YWx1ZTogY2FyZC5vZmZlcmluZ1ZhbHVlID8/IGNhcmQubGlmZSA/PyAxLFxuICAgICAgICAgIGFiaWxpdHlOYW1lOiBjYXJkLmFiaWxpdHlOYW1lLFxuICAgICAgICAgIGFiaWxpdHlUZXh0OiBjYXJkLmFiaWxpdHlUZXh0LFxuICAgICAgICAgIGFiaWxpdHlDb3N0OiBjYXJkLmFiaWxpdHlDb3N0LFxuICAgICAgICB9KTtcbiAgICAgICAgcGxheWVyLm9mZmVyaW5nUGxheWVkVGhpc1R1cm4gPSB0cnVlO1xuICAgICAgICBwbGF5ZWRPZmZlcmluZ1ZhbHVlID0gY2FyZC5vZmZlcmluZ1ZhbHVlID8/IGNhcmQubGlmZSA/PyAxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3BlbnRPZmZlcmluZ3MgPSBjYXJkLmNvc3QgPz8gMDtcbiAgICAgICAgdGhpcy5zcGVuZE9mZmVyaW5ncyhwbGF5ZXIsIHNwZW50T2ZmZXJpbmdzKTtcbiAgICAgICAgY29uc3Qgb2NjdXBpZWRTbG90cyA9IG5ldyBTZXQocGxheWVyLmJhdHRsZVpvbmUubWFwKChjaGFyYWN0ZXIsIGluZGV4KSA9PiBOdW1iZXIuaXNJbnRlZ2VyKGNoYXJhY3Rlci5zbG90KSA/IGNoYXJhY3Rlci5zbG90ID8/IGluZGV4IDogaW5kZXgpKTtcbiAgICAgICAgY29uc3QgdGFyZ2V0U2xvdCA9IHNsb3RJbmRleCA/PyBbMCwgMSwgMiwgM10uZmluZChpbmRleCA9PiAhb2NjdXBpZWRTbG90cy5oYXMoaW5kZXgpKTtcbiAgICAgICAgaWYgKHRhcmdldFNsb3QgPT09IHVuZGVmaW5lZCB8fCBvY2N1cGllZFNsb3RzLmhhcyh0YXJnZXRTbG90KSkgcmV0dXJuIGdhbWU7XG4gICAgICAgIHBsYXllci5iYXR0bGVab25lLnB1c2goe1xuICAgICAgICAgIGluc3RhbmNlSWQ6IGBwMV8ke25leHQucmV2aXNpb24gKyAxfV8ke3BsYXllci5iYXR0bGVab25lLmxlbmd0aH1gLFxuICAgICAgICAgIGNhcmRJZDogY2FyZC5pZCxcbiAgICAgICAgICBuYW1lOiBjYXJkLm5hbWUsXG4gICAgICAgICAgb3duZXI6ICdQMScsXG4gICAgICAgICAgY29udHJvbGxlcjogJ1AxJyxcbiAgICAgICAgICBzbG90OiB0YXJnZXRTbG90LFxuICAgICAgICAgIGF0dGFjazogY2FyZC5hdHRhY2sgPz8gMCxcbiAgICAgICAgICBjdXJyZW50SHA6IGNhcmQubGlmZSA/PyAxLFxuICAgICAgICAgIG1heEhwOiBjYXJkLmxpZmUgPz8gMSxcbiAgICAgICAgICBjYW5BdHRhY2s6IGZhbHNlLFxuICAgICAgICB9KTtcbiAgICAgICAgcGxheWVyLmJhdHRsZVpvbmUuc29ydCgobGVmdCwgcmlnaHQpID0+IChsZWZ0LnNsb3QgPz8gMCkgLSAocmlnaHQuc2xvdCA/PyAwKSk7XG4gICAgICB9XG4gICAgICBuZXh0LnJldmlzaW9uKys7XG4gICAgICBuZXh0LmxvZyA9IFtcbiAgICAgICAgY2FyZC50eXBlID09PSAnb2ZmZXJpbmcnID8gYCR7Y2FyZC5uYW1lfSBxdWVkYSBsaXN0YSBjb21vIG9mcmVuZGEuYCA6IGAke2NhcmQubmFtZX0gZW50cmEgZW4gYmF0YWxsYS5gLFxuICAgICAgICAuLi5uZXh0LmxvZyxcbiAgICAgIF0uc2xpY2UoMCwgNCk7XG4gICAgICByZXR1cm4gbmV4dDtcbiAgICB9KTtcbiAgICB0aGlzLnNlbGVjdGVkSGFuZENhcmQuc2V0KG51bGwpO1xuICAgIHRoaXMuZHJhZ2dpbmdDYXJkSWQuc2V0KG51bGwpO1xuICAgIHRoaXMuY2xvc2VQcmV2aWV3KCk7XG4gICAgaWYgKHBsYXllZE9mZmVyaW5nVmFsdWUgPiAwKSB7XG4gICAgICB0aGlzLnB1c2hJbXBhY3RFdmVudCh7IHRleHQ6IGArJHtwbGF5ZWRPZmZlcmluZ1ZhbHVlfWAsIHRvbmU6ICdyZXNvdXJjZScsIHNlYXQ6ICdQMScsIHRhcmdldDogJ29mZmVyaW5ncycgfSk7XG4gICAgfSBlbHNlIGlmIChzcGVudE9mZmVyaW5ncyA+IDApIHtcbiAgICAgIHRoaXMucHVzaEltcGFjdEV2ZW50KHsgdGV4dDogYC0ke3NwZW50T2ZmZXJpbmdzfWAsIHRvbmU6ICdyZXNvdXJjZScsIHNlYXQ6ICdQMScsIHRhcmdldDogJ29mZmVyaW5ncycgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZU9mZmVyaW5nUGlsZShzZWF0OiBDaHJpc3RpYW5pdHlTZWF0KTogdm9pZCB7XG4gICAgdGhpcy5vcGVuT2ZmZXJpbmdzKHNlYXQpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNlbGVjdEF0dGFja2VyKGNhcmQ6IENocmlzdGlhbml0eUNoYXJhY3Rlckluc3RhbmNlKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZEhhbmRDYXJkLnNldChudWxsKTtcbiAgICBpZiAodGhpcy5nYW1lKCkuc3RhdHVzICE9PSAnaW5fcHJvZ3Jlc3MnIHx8ICF0aGlzLmlzT3duVHVybigpIHx8ICFjYXJkLmNhbkF0dGFjaykge1xuICAgICAgdGhpcy5pbnNwZWN0Q2hhcmFjdGVyKGNhcmQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmNsb3NlUHJldmlldygpO1xuICAgIHRoaXMuc2VsZWN0ZWRBdHRhY2tlci5zZXQodGhpcy5zZWxlY3RlZEF0dGFja2VyKCk/Lmluc3RhbmNlSWQgPT09IGNhcmQuaW5zdGFuY2VJZCA/IG51bGwgOiBjYXJkKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVPcHBvbmVudENoYXJhY3RlcihjYXJkOiBDaHJpc3RpYW5pdHlDaGFyYWN0ZXJJbnN0YW5jZSk6IHZvaWQge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkQXR0YWNrZXIoKSkge1xuICAgICAgdGhpcy5hdHRhY2tDaGFyYWN0ZXIoY2FyZCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuaW5zcGVjdENoYXJhY3RlcihjYXJkKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVPcHBvbmVudExlYWRlcigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZEF0dGFja2VyKCkgJiYgIXRoaXMuaGFzT3Bwb25lbnRHdWFyZHMoKSkge1xuICAgICAgdGhpcy5hdHRhY2tMZWFkZXIoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5pbnNwZWN0TGVhZGVyKCdQMicpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGF0dGFja0xlYWRlcigpOiB2b2lkIHtcbiAgICBjb25zdCBhdHRhY2tlciA9IHRoaXMuc2VsZWN0ZWRBdHRhY2tlcigpO1xuICAgIGlmICghYXR0YWNrZXIpIHJldHVybjtcbiAgICBpZiAodGhpcy5nYW1lKCkuc3RhdHVzICE9PSAnaW5fcHJvZ3Jlc3MnKSByZXR1cm47XG4gICAgaWYgKHRoaXMuaGFzT3Bwb25lbnRHdWFyZHMoKSkge1xuICAgICAgdGhpcy5zZWxlY3RlZFByZXZpZXcuc2V0KHtcbiAgICAgICAgdGl0bGU6IHRoaXMub3Bwb25lbnQoKS5sZWFkZXJOYW1lLFxuICAgICAgICBleWVicm93OiB0aGlzLnQoJ2NocmlzdGlhbml0eUxlYWRlckNhcmQnKSxcbiAgICAgICAgbWV0YTogYCR7dGhpcy5vcHBvbmVudCgpLmxlYWRlckhwfS8ke3RoaXMub3Bwb25lbnQoKS5sZWFkZXJNYXhIcH1gLFxuICAgICAgICBib2R5OiB0aGlzLnQoJ2NocmlzdGlhbml0eUxlYWRlclByb3RlY3RlZCcpLFxuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCBkYW1hZ2UgPSAwO1xuICAgIHRoaXMuZ2FtZS51cGRhdGUoZ2FtZSA9PiB7XG4gICAgICBjb25zdCBuZXh0ID0gc3RydWN0dXJlZENsb25lKGdhbWUpO1xuICAgICAgY29uc3QgbGl2ZUF0dGFja2VyID0gbmV4dC5wbGF5ZXJzLlAxLmJhdHRsZVpvbmUuZmluZChjYXJkID0+IGNhcmQuaW5zdGFuY2VJZCA9PT0gYXR0YWNrZXIuaW5zdGFuY2VJZCk7XG4gICAgICBpZiAoIWxpdmVBdHRhY2tlciB8fCAhbGl2ZUF0dGFja2VyLmNhbkF0dGFjaykgcmV0dXJuIGdhbWU7XG4gICAgICBkYW1hZ2UgPSBsaXZlQXR0YWNrZXIuYXR0YWNrO1xuICAgICAgbmV4dC5wbGF5ZXJzLlAyLmxlYWRlckhwID0gTWF0aC5tYXgoMCwgbmV4dC5wbGF5ZXJzLlAyLmxlYWRlckhwIC0gbGl2ZUF0dGFja2VyLmF0dGFjayk7XG4gICAgICBsaXZlQXR0YWNrZXIuY2FuQXR0YWNrID0gZmFsc2U7XG4gICAgICBjb25zdCBsb2cgPSBbYCR7bGl2ZUF0dGFja2VyLm5hbWV9ICR7dGhpcy50KCdjaHJpc3RpYW5pdHlBdHRhY2tzT3Bwb25lbnRMZWFkZXInKX1gXTtcbiAgICAgIHRoaXMuZXZhbHVhdGVWaWN0b3J5KG5leHQsIGxvZyk7XG4gICAgICBuZXh0LnJldmlzaW9uKys7XG4gICAgICBuZXh0LmxvZyA9IFsuLi5sb2csIC4uLm5leHQubG9nXS5zbGljZSgwLCA0KTtcbiAgICAgIHJldHVybiBuZXh0O1xuICAgIH0pO1xuICAgIHRoaXMuc2VsZWN0ZWRBdHRhY2tlci5zZXQobnVsbCk7XG4gICAgaWYgKGRhbWFnZSA+IDApIHtcbiAgICAgIHRoaXMucHVzaEltcGFjdEV2ZW50KHsgdGV4dDogYC0ke2RhbWFnZX1gLCB0b25lOiAnZGFtYWdlJywgc2VhdDogJ1AyJywgdGFyZ2V0OiAnbGVhZGVyJyB9KTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgYXR0YWNrQ2hhcmFjdGVyKHRhcmdldDogQ2hyaXN0aWFuaXR5Q2hhcmFjdGVySW5zdGFuY2UpOiB2b2lkIHtcbiAgICBjb25zdCBhdHRhY2tlciA9IHRoaXMuc2VsZWN0ZWRBdHRhY2tlcigpO1xuICAgIGlmICghYXR0YWNrZXIpIHJldHVybjtcbiAgICBpZiAodGhpcy5nYW1lKCkuc3RhdHVzICE9PSAnaW5fcHJvZ3Jlc3MnKSByZXR1cm47XG4gICAgbGV0IGF0dGFja2VyRGFtYWdlID0gMDtcbiAgICBsZXQgdGFyZ2V0RGFtYWdlID0gMDtcbiAgICB0aGlzLmdhbWUudXBkYXRlKGdhbWUgPT4ge1xuICAgICAgY29uc3QgbmV4dCA9IHN0cnVjdHVyZWRDbG9uZShnYW1lKTtcbiAgICAgIGNvbnN0IGxpdmVBdHRhY2tlciA9IG5leHQucGxheWVycy5QMS5iYXR0bGVab25lLmZpbmQoY2FyZCA9PiBjYXJkLmluc3RhbmNlSWQgPT09IGF0dGFja2VyLmluc3RhbmNlSWQpO1xuICAgICAgY29uc3QgbGl2ZVRhcmdldCA9IG5leHQucGxheWVycy5QMi5iYXR0bGVab25lLmZpbmQoY2FyZCA9PiBjYXJkLmluc3RhbmNlSWQgPT09IHRhcmdldC5pbnN0YW5jZUlkKTtcbiAgICAgIGlmICghbGl2ZUF0dGFja2VyIHx8ICFsaXZlVGFyZ2V0IHx8ICFsaXZlQXR0YWNrZXIuY2FuQXR0YWNrKSByZXR1cm4gZ2FtZTtcbiAgICAgIHRhcmdldERhbWFnZSA9IGxpdmVBdHRhY2tlci5hdHRhY2s7XG4gICAgICBhdHRhY2tlckRhbWFnZSA9IGxpdmVUYXJnZXQuYXR0YWNrO1xuICAgICAgbGl2ZVRhcmdldC5jdXJyZW50SHAgLT0gbGl2ZUF0dGFja2VyLmF0dGFjaztcbiAgICAgIGxpdmVBdHRhY2tlci5jdXJyZW50SHAgLT0gbGl2ZVRhcmdldC5hdHRhY2s7XG4gICAgICBsaXZlQXR0YWNrZXIuY2FuQXR0YWNrID0gZmFsc2U7XG4gICAgICB0aGlzLmNsZWFudXBEZXN0cm95ZWQobmV4dC5wbGF5ZXJzLlAxLCBuZXh0KTtcbiAgICAgIHRoaXMuY2xlYW51cERlc3Ryb3llZChuZXh0LnBsYXllcnMuUDIsIG5leHQpO1xuICAgICAgY29uc3QgbG9nID0gW2Ake2xpdmVBdHRhY2tlci5uYW1lfSAke3RoaXMudCgnY2hyaXN0aWFuaXR5Q29tYmF0c0FnYWluc3QnKX0gJHtsaXZlVGFyZ2V0Lm5hbWV9LmBdO1xuICAgICAgdGhpcy5ldmFsdWF0ZVZpY3RvcnkobmV4dCwgbG9nKTtcbiAgICAgIG5leHQucmV2aXNpb24rKztcbiAgICAgIG5leHQubG9nID0gWy4uLmxvZywgLi4ubmV4dC5sb2ddLnNsaWNlKDAsIDQpO1xuICAgICAgcmV0dXJuIG5leHQ7XG4gICAgfSk7XG4gICAgdGhpcy5zZWxlY3RlZEF0dGFja2VyLnNldChudWxsKTtcbiAgICBjb25zdCBpbXBhY3RzOiBBcnJheTxPbWl0PENocmlzdGlhbml0eUltcGFjdEV2ZW50LCAnaWQnPj4gPSBbXTtcbiAgICBpZiAodGFyZ2V0RGFtYWdlID4gMCkgaW1wYWN0cy5wdXNoKHsgdGV4dDogYC0ke3RhcmdldERhbWFnZX1gLCB0b25lOiAnZGFtYWdlJywgc2VhdDogJ1AyJywgdGFyZ2V0OiAnYmF0dGxlJyB9KTtcbiAgICBpZiAoYXR0YWNrZXJEYW1hZ2UgPiAwKSBpbXBhY3RzLnB1c2goeyB0ZXh0OiBgLSR7YXR0YWNrZXJEYW1hZ2V9YCwgdG9uZTogJ2RhbWFnZScsIHNlYXQ6ICdQMScsIHRhcmdldDogJ2JhdHRsZScgfSk7XG4gICAgdGhpcy5wdXNoSW1wYWN0RXZlbnRzKGltcGFjdHMpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGVuZFR1cm4oKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZ2FtZSgpLnN0YXR1cyAhPT0gJ2luX3Byb2dyZXNzJykgcmV0dXJuO1xuICAgIHRoaXMuc2VsZWN0ZWRIYW5kQ2FyZC5zZXQobnVsbCk7XG4gICAgdGhpcy5zZWxlY3RlZEF0dGFja2VyLnNldChudWxsKTtcbiAgICB0aGlzLnNlbGVjdGVkUHJldmlldy5zZXQobnVsbCk7XG4gICAgdGhpcy5zZWxlY3RlZEluZm8uc2V0KG51bGwpO1xuICAgIHRoaXMuZ2FtZS51cGRhdGUoZ2FtZSA9PiB7XG4gICAgICBjb25zdCBuZXh0ID0gc3RydWN0dXJlZENsb25lKGdhbWUpO1xuICAgICAgY29uc3QgbG9nOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgdGhpcy5hZHZhbmNlVHVybihuZXh0LCBsb2cpO1xuICAgICAgbmV4dC5yZXZpc2lvbisrO1xuICAgICAgbmV4dC5sb2cgPSBbLi4ubG9nLCAuLi5uZXh0LmxvZ10uc2xpY2UoMCwgNCk7XG4gICAgICByZXR1cm4gbmV4dDtcbiAgICB9KTtcbiAgICB0aGlzLnNjaGVkdWxlQm90VHVybklmTmVlZGVkKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVzZXRNb2NrKCk6IHZvaWQge1xuICAgIHRoaXMuY2xlYXJCb3RUdXJuKCk7XG4gICAgdGhpcy5nYW1lLnNldCh0aGlzLmNhdGFsb2dMb2FkZWQoKSA/IHRoaXMuY3JlYXRlVHV0b3JpYWxHYW1lKHRoaXMuYWxsQ2F0YWxvZ0NhcmRzKCkpIDogc3RydWN0dXJlZENsb25lKFNUQVJUSU5HX0dBTUUpKTtcbiAgICB0aGlzLnNlbGVjdGVkSGFuZENhcmQuc2V0KG51bGwpO1xuICAgIHRoaXMuc2VsZWN0ZWRBdHRhY2tlci5zZXQobnVsbCk7XG4gICAgdGhpcy5zZWxlY3RlZFByZXZpZXcuc2V0KG51bGwpO1xuICAgIHRoaXMuc2VsZWN0ZWRJbmZvLnNldChudWxsKTtcbiAgICB0aGlzLnNob3dIaXN0b3J5LnNldChmYWxzZSk7XG4gICAgdGhpcy5zaG93R2FsbGVyeS5zZXQoZmFsc2UpO1xuICAgIHRoaXMub2ZmZXJpbmdzU2VhdC5zZXQobnVsbCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc3RhcnRUdXRvcmlhbCgpOiB2b2lkIHtcbiAgICB0aGlzLnJlc2V0TW9jaygpO1xuICAgIHRoaXMuc2NyZWVuLnNldCgndGFibGUnKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjbG9zZVByZXZpZXcoKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZFByZXZpZXcuc2V0KG51bGwpO1xuICAgIHRoaXMucmVzZXRQcmV2aWV3VGlsdCgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNsb3NlSW5mbygpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkSW5mby5zZXQobnVsbCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3Blbk9mZmVyaW5ncyhzZWF0OiBDaHJpc3RpYW5pdHlTZWF0KTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZFByZXZpZXcuc2V0KG51bGwpO1xuICAgIHRoaXMuc2VsZWN0ZWRJbmZvLnNldChudWxsKTtcbiAgICB0aGlzLnNob3dIaXN0b3J5LnNldChmYWxzZSk7XG4gICAgdGhpcy5zaG93R2FsbGVyeS5zZXQoZmFsc2UpO1xuICAgIHRoaXMub2ZmZXJpbmdzU2VhdC5zZXQoc2VhdCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3Blbkhpc3RvcnkoKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZFByZXZpZXcuc2V0KG51bGwpO1xuICAgIHRoaXMuc2VsZWN0ZWRJbmZvLnNldChudWxsKTtcbiAgICB0aGlzLm9mZmVyaW5nc1NlYXQuc2V0KG51bGwpO1xuICAgIHRoaXMuc2hvd0dhbGxlcnkuc2V0KGZhbHNlKTtcbiAgICB0aGlzLnNob3dIaXN0b3J5LnNldCh0cnVlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjbG9zZUhpc3RvcnkoKTogdm9pZCB7XG4gICAgdGhpcy5zaG93SGlzdG9yeS5zZXQoZmFsc2UpO1xuICAgIGlmICh0aGlzLnNlbGVjdGVkUHJldmlldygpPy5zb3VyY2UgPT09ICdoaXN0b3J5Jykge1xuICAgICAgdGhpcy5jbG9zZVByZXZpZXcoKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgY2xvc2VPZmZlcmluZ3MoKTogdm9pZCB7XG4gICAgdGhpcy5vZmZlcmluZ3NTZWF0LnNldChudWxsKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvcGVuR2FsbGVyeSgpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkUHJldmlldy5zZXQobnVsbCk7XG4gICAgdGhpcy5zZWxlY3RlZEluZm8uc2V0KG51bGwpO1xuICAgIHRoaXMub2ZmZXJpbmdzU2VhdC5zZXQobnVsbCk7XG4gICAgdGhpcy5zaG93SGlzdG9yeS5zZXQoZmFsc2UpO1xuICAgIHRoaXMuc2hvd0dhbGxlcnkuc2V0KHRydWUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNsb3NlR2FsbGVyeSgpOiB2b2lkIHtcbiAgICB0aGlzLnNob3dHYWxsZXJ5LnNldChmYWxzZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgbmF2aWdhdGVIaXN0b3J5UHJldmlldyhkaXJlY3Rpb246IC0xIHwgMSk6IHZvaWQge1xuICAgIGNvbnN0IGNhcmRJZCA9IHRoaXMuc2VsZWN0ZWRQcmV2aWV3KCk/LmNhcmRJZDtcbiAgICBjb25zdCBoaXN0b3J5ID0gdGhpcy5nYW1lKCkuaGlzdG9yeVpvbmU7XG4gICAgaWYgKCFjYXJkSWQgfHwgaGlzdG9yeS5sZW5ndGggPCAyKSByZXR1cm47XG4gICAgY29uc3QgY3VycmVudEluZGV4ID0gaGlzdG9yeS5maW5kSW5kZXgoaWQgPT4gaWQgPT09IGNhcmRJZCk7XG4gICAgaWYgKGN1cnJlbnRJbmRleCA8IDApIHJldHVybjtcbiAgICBjb25zdCBuZXh0SW5kZXggPSAoY3VycmVudEluZGV4ICsgZGlyZWN0aW9uICsgaGlzdG9yeS5sZW5ndGgpICUgaGlzdG9yeS5sZW5ndGg7XG4gICAgdGhpcy5pbnNwZWN0SGlzdG9yeUNhcmQoaGlzdG9yeVtuZXh0SW5kZXhdKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzZXRHYWxsZXJ5U2VhcmNoKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIHRoaXMuZ2FsbGVyeVNlYXJjaC5zZXQoKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2V0R2FsbGVyeVR5cGUoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5nYWxsZXJ5VHlwZS5zZXQoKGV2ZW50LnRhcmdldCBhcyBIVE1MU2VsZWN0RWxlbWVudCkudmFsdWUgYXMgQ2hyaXN0aWFuaXR5R2FsbGVyeVR5cGVGaWx0ZXIpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHRpbHRQcmV2aWV3KGV2ZW50OiBQb2ludGVyRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBib3VuZHMgPSAoZXZlbnQuY3VycmVudFRhcmdldCBhcyBIVE1MRWxlbWVudCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3QgeCA9IChldmVudC5jbGllbnRYIC0gYm91bmRzLmxlZnQpIC8gYm91bmRzLndpZHRoIC0gMC41O1xuICAgIGNvbnN0IHkgPSAoZXZlbnQuY2xpZW50WSAtIGJvdW5kcy50b3ApIC8gYm91bmRzLmhlaWdodCAtIDAuNTtcbiAgICB0aGlzLnByZXZpZXdUaWx0LnNldCh7XG4gICAgICByb3RhdGVYOiA1IC0geSAqIDE4LFxuICAgICAgcm90YXRlWTogLTUgKyB4ICogMTgsXG4gICAgICBzaGlmdFg6IHggKiAxMCxcbiAgICAgIHNoaWZ0WTogeSAqIDEwLFxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlc2V0UHJldmlld1RpbHQoKTogdm9pZCB7XG4gICAgdGhpcy5wcmV2aWV3VGlsdC5zZXQoeyByb3RhdGVYOiA1LCByb3RhdGVZOiAtNSwgc2hpZnRYOiAwLCBzaGlmdFk6IDAgfSk7XG4gIH1cblxuICBwcml2YXRlIHB1c2hJbXBhY3RFdmVudChldmVudDogT21pdDxDaHJpc3RpYW5pdHlJbXBhY3RFdmVudCwgJ2lkJz4pOiB2b2lkIHtcbiAgICBjb25zdCBpZCA9ICsrdGhpcy5pbXBhY3RFdmVudFNlcXVlbmNlO1xuICAgIHRoaXMuaW1wYWN0RXZlbnRzLnVwZGF0ZShldmVudHMgPT4gWy4uLmV2ZW50cywgeyAuLi5ldmVudCwgaWQgfV0uc2xpY2UoLTYpKTtcbiAgICBjb25zdCB0aW1lciA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuaW1wYWN0VGltZXJzLmRlbGV0ZSh0aW1lcik7XG4gICAgICB0aGlzLmltcGFjdEV2ZW50cy51cGRhdGUoZXZlbnRzID0+IGV2ZW50cy5maWx0ZXIoaW1wYWN0ID0+IGltcGFjdC5pZCAhPT0gaWQpKTtcbiAgICB9LCAxMTIwKTtcbiAgICB0aGlzLmltcGFjdFRpbWVycy5hZGQodGltZXIpO1xuICB9XG5cbiAgcHJpdmF0ZSBwdXNoSW1wYWN0RXZlbnRzKGV2ZW50czogQXJyYXk8T21pdDxDaHJpc3RpYW5pdHlJbXBhY3RFdmVudCwgJ2lkJz4+KTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBldmVudCBvZiBldmVudHMpIHtcbiAgICAgIHRoaXMucHVzaEltcGFjdEV2ZW50KGV2ZW50KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNsZWFyQm90VHVybigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5ib3RUdXJuVGltZXIgPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xuICAgIHdpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5ib3RUdXJuVGltZXIpO1xuICAgIHRoaXMuYm90VHVyblRpbWVyID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJpdmF0ZSBzY2hlZHVsZUJvdFR1cm5JZk5lZWRlZCgpOiB2b2lkIHtcbiAgICB0aGlzLmNsZWFyQm90VHVybigpO1xuICAgIGNvbnN0IGdhbWUgPSB0aGlzLmdhbWUoKTtcbiAgICBpZiAodGhpcy5zY3JlZW4oKSAhPT0gJ3RhYmxlJyB8fCBnYW1lLnN0YXR1cyAhPT0gJ2luX3Byb2dyZXNzJyB8fCBnYW1lLnR1cm5Pd25lciAhPT0gJ1AyJykgcmV0dXJuO1xuICAgIHRoaXMuYm90VHVyblRpbWVyID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5ib3RUdXJuVGltZXIgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLnJ1blR1dG9yaWFsQm90VHVybigpO1xuICAgIH0sIDUyMCk7XG4gIH1cblxuICBwcml2YXRlIHJ1blR1dG9yaWFsQm90VHVybigpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkSGFuZENhcmQuc2V0KG51bGwpO1xuICAgIHRoaXMuc2VsZWN0ZWRBdHRhY2tlci5zZXQobnVsbCk7XG4gICAgdGhpcy5zZWxlY3RlZFByZXZpZXcuc2V0KG51bGwpO1xuICAgIHRoaXMuc2VsZWN0ZWRJbmZvLnNldChudWxsKTtcbiAgICBjb25zdCBpbXBhY3RzOiBBcnJheTxPbWl0PENocmlzdGlhbml0eUltcGFjdEV2ZW50LCAnaWQnPj4gPSBbXTtcbiAgICB0aGlzLmdhbWUudXBkYXRlKGdhbWUgPT4ge1xuICAgICAgaWYgKGdhbWUuc3RhdHVzICE9PSAnaW5fcHJvZ3Jlc3MnIHx8IGdhbWUudHVybk93bmVyICE9PSAnUDInKSByZXR1cm4gZ2FtZTtcbiAgICAgIGNvbnN0IG5leHQgPSBzdHJ1Y3R1cmVkQ2xvbmUoZ2FtZSk7XG4gICAgICBjb25zdCBsb2c6IHN0cmluZ1tdID0gW107XG4gICAgICB0aGlzLnJlc29sdmVCb3RBdHRhY2sobmV4dCwgbG9nLCBpbXBhY3RzKTtcbiAgICAgIHRoaXMuZXZhbHVhdGVWaWN0b3J5KG5leHQsIGxvZyk7XG4gICAgICBpZiAobmV4dC5zdGF0dXMgPT09ICdpbl9wcm9ncmVzcycpIHtcbiAgICAgICAgdGhpcy5hZHZhbmNlVHVybihuZXh0LCBsb2cpO1xuICAgICAgfVxuICAgICAgbmV4dC5yZXZpc2lvbisrO1xuICAgICAgbmV4dC5sb2cgPSBbLi4ubG9nLCAuLi5uZXh0LmxvZ10uc2xpY2UoMCwgNCk7XG4gICAgICByZXR1cm4gbmV4dDtcbiAgICB9KTtcbiAgICB0aGlzLnB1c2hJbXBhY3RFdmVudHMoaW1wYWN0cyk7XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVCb3RBdHRhY2soXG4gICAgZ2FtZTogQ2hyaXN0aWFuaXR5R2FtZVN0YXRlLFxuICAgIGxvZzogc3RyaW5nW10sXG4gICAgaW1wYWN0czogQXJyYXk8T21pdDxDaHJpc3RpYW5pdHlJbXBhY3RFdmVudCwgJ2lkJz4+XG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGJvdCA9IGdhbWUucGxheWVycy5QMjtcbiAgICBjb25zdCBwbGF5ZXIgPSBnYW1lLnBsYXllcnMuUDE7XG4gICAgY29uc3QgYXR0YWNrZXIgPSBib3QuYmF0dGxlWm9uZVxuICAgICAgLmZpbHRlcihjYXJkID0+IGNhcmQuY2FuQXR0YWNrICYmIGNhcmQuYXR0YWNrID4gMClcbiAgICAgIC5zb3J0KChsZWZ0LCByaWdodCkgPT4gKGxlZnQuc2xvdCA/PyAwKSAtIChyaWdodC5zbG90ID8/IDApKVswXTtcblxuICAgIGlmICghYXR0YWNrZXIpIHtcbiAgICAgIGxvZy5wdXNoKHRoaXMudCgnY2hyaXN0aWFuaXR5Qm90Tm9BdHRhY2tlcnMnKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdGFyZ2V0ID0gcGxheWVyLmJhdHRsZVpvbmVcbiAgICAgIC5maWx0ZXIoY2FyZCA9PiBjYXJkLmN1cnJlbnRIcCA+IDApXG4gICAgICAuc29ydCgobGVmdCwgcmlnaHQpID0+IGxlZnQuY3VycmVudEhwIC0gcmlnaHQuY3VycmVudEhwIHx8IChsZWZ0LnNsb3QgPz8gMCkgLSAocmlnaHQuc2xvdCA/PyAwKSlbMF07XG5cbiAgICBpZiAodGFyZ2V0KSB7XG4gICAgICBpbXBhY3RzLnB1c2goeyB0ZXh0OiBgLSR7YXR0YWNrZXIuYXR0YWNrfWAsIHRvbmU6ICdkYW1hZ2UnLCBzZWF0OiAnUDEnLCB0YXJnZXQ6ICdiYXR0bGUnIH0pO1xuICAgICAgaW1wYWN0cy5wdXNoKHsgdGV4dDogYC0ke3RhcmdldC5hdHRhY2t9YCwgdG9uZTogJ2RhbWFnZScsIHNlYXQ6ICdQMicsIHRhcmdldDogJ2JhdHRsZScgfSk7XG4gICAgICB0YXJnZXQuY3VycmVudEhwIC09IGF0dGFja2VyLmF0dGFjaztcbiAgICAgIGF0dGFja2VyLmN1cnJlbnRIcCAtPSB0YXJnZXQuYXR0YWNrO1xuICAgICAgYXR0YWNrZXIuY2FuQXR0YWNrID0gZmFsc2U7XG4gICAgICBsb2cucHVzaChgJHthdHRhY2tlci5uYW1lfSAke3RoaXMudCgnY2hyaXN0aWFuaXR5Q29tYmF0c0FnYWluc3QnKX0gJHt0YXJnZXQubmFtZX0uYCk7XG4gICAgICB0aGlzLmNsZWFudXBEZXN0cm95ZWQocGxheWVyLCBnYW1lKTtcbiAgICAgIHRoaXMuY2xlYW51cERlc3Ryb3llZChib3QsIGdhbWUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGltcGFjdHMucHVzaCh7IHRleHQ6IGAtJHthdHRhY2tlci5hdHRhY2t9YCwgdG9uZTogJ2RhbWFnZScsIHNlYXQ6ICdQMScsIHRhcmdldDogJ2xlYWRlcicgfSk7XG4gICAgcGxheWVyLmxlYWRlckhwID0gTWF0aC5tYXgoMCwgcGxheWVyLmxlYWRlckhwIC0gYXR0YWNrZXIuYXR0YWNrKTtcbiAgICBhdHRhY2tlci5jYW5BdHRhY2sgPSBmYWxzZTtcbiAgICBsb2cucHVzaChgJHthdHRhY2tlci5uYW1lfSAke3RoaXMudCgnY2hyaXN0aWFuaXR5QXR0YWNrc1lvdXJMZWFkZXInKX1gKTtcbiAgfVxuXG4gIHByaXZhdGUgYWR2YW5jZVR1cm4oZ2FtZTogQ2hyaXN0aWFuaXR5R2FtZVN0YXRlLCBsb2c6IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgZ2FtZS50dXJuT3duZXIgPSBnYW1lLnR1cm5Pd25lciA9PT0gJ1AxJyA/ICdQMicgOiAnUDEnO1xuICAgIGdhbWUudHVybkNvdW50Kys7XG4gICAgY29uc3QgY3VycmVudCA9IGdhbWUucGxheWVyc1tnYW1lLnR1cm5Pd25lcl07XG4gICAgY3VycmVudC5vZmZlcmluZ1BsYXllZFRoaXNUdXJuID0gZmFsc2U7XG4gICAgY3VycmVudC5vZmZlcmluZ3MgPSBjdXJyZW50Lm9mZmVyaW5ncy5tYXAob2ZmZXJpbmcgPT4gKHsgLi4ub2ZmZXJpbmcsIHJlYWR5OiB0cnVlIH0pKTtcbiAgICBjdXJyZW50LmJhdHRsZVpvbmUgPSBjdXJyZW50LmJhdHRsZVpvbmUubWFwKGNhcmQgPT4gKHsgLi4uY2FyZCwgY2FuQXR0YWNrOiB0cnVlIH0pKTtcbiAgICBjb25zdCBkcmF3bkNhcmQgPSBnYW1lLnNoYXJlZERlY2suc2hpZnQoKTtcbiAgICBpZiAoZHJhd25DYXJkKSB7XG4gICAgICBpZiAoY3VycmVudC5oYW5kKSB7XG4gICAgICAgIGN1cnJlbnQuaGFuZC5wdXNoKGRyYXduQ2FyZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjdXJyZW50LmhhbmRDb3VudCA9IChjdXJyZW50LmhhbmRDb3VudCA/PyAwKSArIDE7XG4gICAgICB9XG4gICAgfVxuICAgIGxvZy5wdXNoKGRyYXduQ2FyZCA/IGAke2N1cnJlbnQuZGlzcGxheU5hbWV9ICR7dGhpcy50KCdjaHJpc3RpYW5pdHlEcmF3c0NhcmQnKX1gIDogdGhpcy50KCdjaHJpc3RpYW5pdHlEZWNrSXNFbXB0eScpKTtcbiAgICBsb2cucHVzaChgJHt0aGlzLnQoJ2NocmlzdGlhbml0eVR1cm5PZicpfSAke2N1cnJlbnQuZGlzcGxheU5hbWV9LmApO1xuICB9XG5cbiAgcHJpdmF0ZSBldmFsdWF0ZVZpY3RvcnkoZ2FtZTogQ2hyaXN0aWFuaXR5R2FtZVN0YXRlLCBsb2c6IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgaWYgKGdhbWUucGxheWVycy5QMS5sZWFkZXJIcCA+IDAgJiYgZ2FtZS5wbGF5ZXJzLlAyLmxlYWRlckhwID4gMCkgcmV0dXJuO1xuICAgIGdhbWUuc3RhdHVzID0gJ2ZpbmlzaGVkJztcbiAgICBjb25zdCB3aW5uZXI6IENocmlzdGlhbml0eVNlYXQgPSBnYW1lLnBsYXllcnMuUDEubGVhZGVySHAgPD0gMCA/ICdQMicgOiAnUDEnO1xuICAgIGdhbWUubWF0Y2hTY29yZVt3aW5uZXJdICs9IDE7XG4gICAgbG9nLnB1c2god2lubmVyID09PSAnUDEnID8gdGhpcy50KCdjaHJpc3RpYW5pdHlZb3VXaW4nKSA6IHRoaXMudCgnY2hyaXN0aWFuaXR5T3Bwb25lbnRXaW5zJykpO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhbnVwRGVzdHJveWVkKHBsYXllcjogQ2hyaXN0aWFuaXR5UGxheWVyU3RhdGUsIGdhbWU6IENocmlzdGlhbml0eUdhbWVTdGF0ZSk6IHZvaWQge1xuICAgIGNvbnN0IGRlc3Ryb3llZCA9IHBsYXllci5iYXR0bGVab25lLmZpbHRlcihjYXJkID0+IGNhcmQuY3VycmVudEhwIDw9IDApO1xuICAgIGlmICghZGVzdHJveWVkLmxlbmd0aCkgcmV0dXJuO1xuICAgIGdhbWUuaGlzdG9yeVpvbmUucHVzaCguLi5kZXN0cm95ZWQubWFwKGNhcmQgPT4gY2FyZC5jYXJkSWQpKTtcbiAgICBwbGF5ZXIuYmF0dGxlWm9uZSA9IHBsYXllci5iYXR0bGVab25lLmZpbHRlcihjYXJkID0+IGNhcmQuY3VycmVudEhwID4gMCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaW5zcGVjdExlYWRlcihzZWF0OiBDaHJpc3RpYW5pdHlTZWF0KTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZEluZm8uc2V0KG51bGwpO1xuICAgIGNvbnN0IHBsYXllciA9IHRoaXMuZ2FtZSgpLnBsYXllcnNbc2VhdF07XG4gICAgY29uc3QgbGVhZGVyID0gcGxheWVyLmxlYWRlckNhcmRJZCA/IHRoaXMuY2FyZERlZmluaXRpb24ocGxheWVyLmxlYWRlckNhcmRJZCkgOiB1bmRlZmluZWQ7XG4gICAgdGhpcy5zZWxlY3RlZFByZXZpZXcuc2V0KHtcbiAgICAgIHRpdGxlOiBsZWFkZXIgPyB0aGlzLnRyYW5zbGF0ZWRDYXJkVGV4dChsZWFkZXIpLm5hbWUgOiBwbGF5ZXIubGVhZGVyTmFtZSxcbiAgICAgIGV5ZWJyb3c6IHRoaXMudCgnY2hyaXN0aWFuaXR5TGVhZGVyQ2FyZCcpLFxuICAgICAgbWV0YTogYCR7cGxheWVyLmxlYWRlckhwfS8ke3BsYXllci5sZWFkZXJNYXhIcH1gLFxuICAgICAgYm9keTogc2VhdCA9PT0gJ1AyJyAmJiB0aGlzLmhhc09wcG9uZW50R3VhcmRzKCkgPyB0aGlzLnQoJ2NocmlzdGlhbml0eUxlYWRlclByb3RlY3RlZCcpIDogdGhpcy50KCdjaHJpc3RpYW5pdHlMZWFkZXJCb2R5JyksXG4gICAgICBjYXJkSWQ6IHBsYXllci5sZWFkZXJDYXJkSWQsXG4gICAgICBzb3VyY2U6ICdib2FyZCcsXG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaW5zcGVjdE9mZmVyaW5nKG9mZmVyaW5nOiBDaHJpc3RpYW5pdHlPZmZlcmluZ0luc3RhbmNlKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZEluZm8uc2V0KG51bGwpO1xuICAgIGNvbnN0IGRlZmluaXRpb24gPSB0aGlzLmNhcmREZWZpbml0aW9uKG9mZmVyaW5nLmNhcmRJZCk7XG4gICAgY29uc3QgdGV4dCA9IHRoaXMudHJhbnNsYXRlZENhcmRUZXh0KGRlZmluaXRpb24pO1xuICAgIHRoaXMuc2VsZWN0ZWRQcmV2aWV3LnNldCh7XG4gICAgICB0aXRsZTogdGV4dC5uYW1lLFxuICAgICAgZXllYnJvdzogdGhpcy50KCdjaHJpc3RpYW5pdHlPZmZlcmluZ0NhcmQnKSxcbiAgICAgIG1ldGE6IG9mZmVyaW5nLnJlYWR5ID8gdGhpcy50KCdjaHJpc3RpYW5pdHlPZmZlcmluZ1JlYWR5JykgOiB0aGlzLnQoJ2NocmlzdGlhbml0eU9mZmVyaW5nRXhoYXVzdGVkJyksXG4gICAgICBib2R5OiB0ZXh0LmFiaWxpdHlUZXh0ID8/IG9mZmVyaW5nLmFiaWxpdHlUZXh0ID8/IHRoaXMudCgnY2hyaXN0aWFuaXR5T2ZmZXJpbmdCb2R5JyksXG4gICAgICBjYXJkSWQ6IG9mZmVyaW5nLmNhcmRJZCxcbiAgICAgIHNvdXJjZTogJ3BpbGUnLFxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIG9mZmVyaW5nQWJpbGl0eVRleHQob2ZmZXJpbmc6IENocmlzdGlhbml0eU9mZmVyaW5nSW5zdGFuY2UpOiBzdHJpbmcge1xuICAgIGNvbnN0IHRleHQgPSB0aGlzLnRyYW5zbGF0ZWRDYXJkVGV4dCh0aGlzLmNhcmREZWZpbml0aW9uKG9mZmVyaW5nLmNhcmRJZCkpO1xuICAgIHJldHVybiB0ZXh0LmFiaWxpdHlUZXh0ID8/IG9mZmVyaW5nLmFiaWxpdHlUZXh0ID8/IHRoaXMudCgnY2hyaXN0aWFuaXR5T2ZmZXJpbmdOb0FiaWxpdHknKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjYW5Vc2VPZmZlcmluZ0FiaWxpdHkob2ZmZXJpbmc6IENocmlzdGlhbml0eU9mZmVyaW5nSW5zdGFuY2UsIHNlYXQ6IENocmlzdGlhbml0eVNlYXQpOiBib29sZWFuIHtcbiAgICBpZiAoc2VhdCAhPT0gJ1AxJyB8fCAhdGhpcy5pc093blR1cm4oKSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmICghb2ZmZXJpbmcucmVhZHkgfHwgIW9mZmVyaW5nLmFiaWxpdHlOYW1lKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRoaXMucmVhZHlPZmZlcmluZ3ModGhpcy5nYW1lKCkucGxheWVyc1tzZWF0XSkgPj0gKG9mZmVyaW5nLmFiaWxpdHlDb3N0ID8/IDApO1xuICB9XG5cbiAgcHJvdGVjdGVkIHVzZU9mZmVyaW5nQWJpbGl0eShvZmZlcmluZzogQ2hyaXN0aWFuaXR5T2ZmZXJpbmdJbnN0YW5jZSwgc2VhdDogQ2hyaXN0aWFuaXR5U2VhdCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5jYW5Vc2VPZmZlcmluZ0FiaWxpdHkob2ZmZXJpbmcsIHNlYXQpKSByZXR1cm47XG4gICAgbGV0IGRpZFJlc29sdmUgPSBmYWxzZTtcbiAgICB0aGlzLmdhbWUudXBkYXRlKGdhbWUgPT4ge1xuICAgICAgY29uc3QgbmV4dCA9IHN0cnVjdHVyZWRDbG9uZShnYW1lKTtcbiAgICAgIGNvbnN0IHBsYXllciA9IG5leHQucGxheWVyc1tzZWF0XTtcbiAgICAgIGNvbnN0IGxpdmVPZmZlcmluZyA9IHBsYXllci5vZmZlcmluZ3MuZmluZChjYXJkID0+IGNhcmQuaW5zdGFuY2VJZCA9PT0gb2ZmZXJpbmcuaW5zdGFuY2VJZCk7XG4gICAgICBpZiAoIWxpdmVPZmZlcmluZyB8fCAhbGl2ZU9mZmVyaW5nLnJlYWR5KSByZXR1cm4gZ2FtZTtcbiAgICAgIGNvbnN0IG9mZmVyaW5nSWQgPSBsaXZlT2ZmZXJpbmcuaW5zdGFuY2VJZDtcbiAgICAgIHRoaXMuc3BlbmRPZmZlcmluZ3MocGxheWVyLCBsaXZlT2ZmZXJpbmcuYWJpbGl0eUNvc3QgPz8gMCk7XG4gICAgICBwbGF5ZXIub2ZmZXJpbmdzID0gcGxheWVyLm9mZmVyaW5ncy5tYXAoY2FyZCA9PiAoY2FyZC5pbnN0YW5jZUlkID09PSBvZmZlcmluZ0lkID8geyAuLi5jYXJkLCByZWFkeTogZmFsc2UgfSA6IGNhcmQpKTtcbiAgICAgIHBsYXllci5sZWFkZXJIcCA9IE1hdGgubWF4KDAsIHBsYXllci5sZWFkZXJIcCAtIDEpO1xuICAgICAgZGlkUmVzb2x2ZSA9IHRydWU7XG4gICAgICBuZXh0LnJldmlzaW9uKys7XG4gICAgICBuZXh0LmxvZyA9IFtgJHtsaXZlT2ZmZXJpbmcubmFtZX06ICR7bGl2ZU9mZmVyaW5nLmFiaWxpdHlOYW1lfS5gLCAuLi5uZXh0LmxvZ10uc2xpY2UoMCwgNCk7XG4gICAgICByZXR1cm4gbmV4dDtcbiAgICB9KTtcbiAgICBpZiAoZGlkUmVzb2x2ZSkge1xuICAgICAgdGhpcy5wdXNoSW1wYWN0RXZlbnQoeyB0ZXh0OiAnLTEnLCB0b25lOiAnZGFtYWdlJywgc2VhdCwgdGFyZ2V0OiAnbGVhZGVyJyB9KTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgaW5zcGVjdERlY2soKTogdm9pZCB7XG4gICAgY29uc3QgcmVtYWluaW5nQ2FyZHMgPSB0aGlzLmdhbWUoKS5zaGFyZWREZWNrLmxlbmd0aDtcbiAgICB0aGlzLnNlbGVjdGVkUHJldmlldy5zZXQobnVsbCk7XG4gICAgdGhpcy5zZWxlY3RlZEluZm8uc2V0KHtcbiAgICAgIHRpdGxlOiB0aGlzLnQoJ2NocmlzdGlhbml0eURlY2snKSxcbiAgICAgIGV5ZWJyb3c6IHRoaXMudCgnY2hyaXN0aWFuaXR5U2hhcmVkWm9uZScpLFxuICAgICAgbWV0YTogYCR7cmVtYWluaW5nQ2FyZHN9ICR7cmVtYWluaW5nQ2FyZHMgPT09IDEgPyB0aGlzLnQoJ2NocmlzdGlhbml0eUNhcmRSZW1haW5pbmcnKSA6IHRoaXMudCgnY2hyaXN0aWFuaXR5Q2FyZHNSZW1haW5pbmcnKX1gLFxuICAgICAgYm9keTogdGhpcy50KCdjaHJpc3RpYW5pdHlEZWNrQm9keScpLFxuICAgICAgZmFjdHM6IFtcbiAgICAgICAgdGhpcy50KCdjaHJpc3RpYW5pdHlEZWNrUnVsZVNoYXJlZCcpLFxuICAgICAgICB0aGlzLnQoJ2NocmlzdGlhbml0eURlY2tSdWxlRHJhdycpLFxuICAgICAgICB0aGlzLnQoJ2NocmlzdGlhbml0eURlY2tSdWxlRW1wdHknKSxcbiAgICAgIF0sXG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaW5zcGVjdEhvd1RvUGxheSgpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkUHJldmlldy5zZXQobnVsbCk7XG4gICAgdGhpcy5zZWxlY3RlZEluZm8uc2V0KHtcbiAgICAgIHRpdGxlOiB0aGlzLnQoJ2NocmlzdGlhbml0eUhvd1RvUGxheScpLFxuICAgICAgZXllYnJvdzogdGhpcy50KCdjaHJpc3RpYW5pdHlHZW5lc2lzRWRpdGlvbicpLFxuICAgICAgbWV0YTogdGhpcy50KCdjaHJpc3RpYW5pdHlUdXRvcmlhbE1vZGUnKSxcbiAgICAgIGJvZHk6IHRoaXMudCgnY2hyaXN0aWFuaXR5SG93VG9QbGF5SW50cm8nKSxcbiAgICAgIGZhY3RzOiBbXG4gICAgICAgIHRoaXMudCgnY2hyaXN0aWFuaXR5SG93VG9QbGF5R29hbCcpLFxuICAgICAgICB0aGlzLnQoJ2NocmlzdGlhbml0eUhvd1RvUGxheVR1cm4nKSxcbiAgICAgICAgdGhpcy50KCdjaHJpc3RpYW5pdHlIb3dUb1BsYXlPZmZlcmluZ3MnKSxcbiAgICAgICAgdGhpcy50KCdjaHJpc3RpYW5pdHlIb3dUb1BsYXlCYXR0bGUnKSxcbiAgICAgIF0sXG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaW5zcGVjdEhhbmRDYXJkKGNhcmRJZDogc3RyaW5nLCBmcm9tSGFuZCA9IGZhbHNlKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZEluZm8uc2V0KG51bGwpO1xuICAgIGNvbnN0IGNhcmQgPSB0aGlzLmNhcmREZWZpbml0aW9uKGNhcmRJZCk7XG4gICAgY29uc3QgdGV4dCA9IHRoaXMudHJhbnNsYXRlZENhcmRUZXh0KGNhcmQpO1xuICAgIGlmIChmcm9tSGFuZCkge1xuICAgICAgdGhpcy5zZWxlY3RlZEF0dGFja2VyLnNldChudWxsKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRIYW5kQ2FyZC5zZXQoY2FyZElkKTtcbiAgICB9XG4gICAgdGhpcy5zZWxlY3RlZFByZXZpZXcuc2V0KHtcbiAgICAgIHRpdGxlOiB0ZXh0Lm5hbWUsXG4gICAgICBleWVicm93OiB0aGlzLmNhcmRUeXBlTGFiZWwoY2FyZCksXG4gICAgICBtZXRhOiB0aGlzLmNhcmRQcmV2aWV3TWV0YShjYXJkKSxcbiAgICAgIGJvZHk6IHRoaXMuZGVmYXVsdENhcmRCb2R5KGNhcmQudHlwZSksXG4gICAgICBjYXJkSWQsXG4gICAgICBzb3VyY2U6IGZyb21IYW5kID8gJ2hhbmQnIDogJ3BpbGUnLFxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGluc3BlY3RHYWxsZXJ5Q2FyZChjYXJkSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuaW5zcGVjdEhhbmRDYXJkKGNhcmRJZCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaW5zcGVjdEhpc3RvcnlDYXJkKGNhcmRJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5pbnNwZWN0SGFuZENhcmQoY2FyZElkKTtcbiAgICB0aGlzLnNlbGVjdGVkUHJldmlldy51cGRhdGUocHJldmlldyA9PiBwcmV2aWV3ID8geyAuLi5wcmV2aWV3LCBzb3VyY2U6ICdoaXN0b3J5JyB9IDogcHJldmlldyk7XG4gIH1cblxuICBwcml2YXRlIGluc3BlY3RDaGFyYWN0ZXIoY2FyZDogQ2hyaXN0aWFuaXR5Q2hhcmFjdGVySW5zdGFuY2UpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkSW5mby5zZXQobnVsbCk7XG4gICAgY29uc3QgZGVmaW5pdGlvbiA9IHRoaXMuY2FyZERlZmluaXRpb24oY2FyZC5jYXJkSWQpO1xuICAgIHRoaXMuc2VsZWN0ZWRQcmV2aWV3LnNldCh7XG4gICAgICB0aXRsZTogdGhpcy50cmFuc2xhdGVkQ2FyZFRleHQoZGVmaW5pdGlvbikubmFtZSxcbiAgICAgIGV5ZWJyb3c6IHRoaXMudCgnY2hyaXN0aWFuaXR5Q2hhcmFjdGVyQ2FyZCcpLFxuICAgICAgbWV0YTogYCR7Y2FyZC5hdHRhY2t9LyR7Y2FyZC5jdXJyZW50SHB9YCxcbiAgICAgIGJvZHk6IGNhcmQuY2FuQXR0YWNrID8gdGhpcy50KCdjaHJpc3RpYW5pdHlDaGFyYWN0ZXJSZWFkeScpIDogdGhpcy50KCdjaHJpc3RpYW5pdHlDaGFyYWN0ZXJFeGhhdXN0ZWQnKSxcbiAgICAgIGNhcmRJZDogY2FyZC5jYXJkSWQsXG4gICAgICBzb3VyY2U6ICdib2FyZCcsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNhcmRQcmV2aWV3TWV0YShjYXJkOiBDaHJpc3RpYW5pdHlDYXJkRGVmaW5pdGlvbik6IHN0cmluZyB7XG4gICAgaWYgKGNhcmQudHlwZSA9PT0gJ29mZmVyaW5nJykgcmV0dXJuIGAke2NhcmQub2ZmZXJpbmdWYWx1ZSA/PyBjYXJkLmxpZmUgPz8gMX1gO1xuICAgIGlmIChjYXJkLnR5cGUgPT09ICdsZWFkZXInKSByZXR1cm4gYCR7Y2FyZC5sZWFkZXJMaWZlID8/IGNhcmQubGlmZSA/PyAwfWA7XG4gICAgaWYgKGNhcmQudHlwZSA9PT0gJ2NoYXJhY3RlcicpIHJldHVybiBgJHt0aGlzLnQoJ2NocmlzdGlhbml0eUNvc3QnKX0gJHtjYXJkLmNvc3QgPz8gMH0gwrcgJHtjYXJkLmF0dGFjayA/PyAwfS8ke2NhcmQubGlmZSA/PyAwfWA7XG4gICAgaWYgKGNhcmQuY29zdCAhPT0gdW5kZWZpbmVkKSByZXR1cm4gYCR7dGhpcy50KCdjaHJpc3RpYW5pdHlDb3N0Jyl9ICR7Y2FyZC5jb3N0fWA7XG4gICAgcmV0dXJuIGNhcmQuY29sbGVjdG9yTnVtYmVyID8/IGNhcmQuaWQ7XG4gIH1cblxuICBwcml2YXRlIHNwZW5kT2ZmZXJpbmdzKHBsYXllcjogQ2hyaXN0aWFuaXR5UGxheWVyU3RhdGUsIGNvc3Q6IG51bWJlcik6IHZvaWQge1xuICAgIGxldCByZW1haW5pbmcgPSBjb3N0O1xuICAgIHBsYXllci5vZmZlcmluZ3MgPSBwbGF5ZXIub2ZmZXJpbmdzLm1hcChvZmZlcmluZyA9PiB7XG4gICAgICBpZiAocmVtYWluaW5nIDw9IDAgfHwgIW9mZmVyaW5nLnJlYWR5KSByZXR1cm4gb2ZmZXJpbmc7XG4gICAgICByZW1haW5pbmcgLT0gb2ZmZXJpbmcudmFsdWU7XG4gICAgICByZXR1cm4geyAuLi5vZmZlcmluZywgcmVhZHk6IGZhbHNlIH07XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==