@tolle_/tolle-ui 18.2.23 → 18.2.25

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 (183) hide show
  1. package/esm2022/lib/accordion-item.component.mjs +17 -5
  2. package/esm2022/lib/alert-dialog-dynamic.component.mjs +1 -1
  3. package/esm2022/lib/alert-dialog.component.mjs +48 -10
  4. package/esm2022/lib/alert-dialog.service.mjs +13 -2
  5. package/esm2022/lib/alert.component.mjs +5 -5
  6. package/esm2022/lib/avatar.component.mjs +30 -9
  7. package/esm2022/lib/badge.component.mjs +41 -15
  8. package/esm2022/lib/breadcrumb-link.component.mjs +5 -5
  9. package/esm2022/lib/button.component.mjs +14 -3
  10. package/esm2022/lib/calendar.component.mjs +99 -17
  11. package/esm2022/lib/card.component.mjs +29 -9
  12. package/esm2022/lib/carousel/carousel.component.mjs +19 -3
  13. package/esm2022/lib/checkbox.component.mjs +44 -21
  14. package/esm2022/lib/collapsible.component.mjs +12 -4
  15. package/esm2022/lib/country-selector.component.mjs +140 -20
  16. package/esm2022/lib/data-table.component.mjs +27 -16
  17. package/esm2022/lib/date-picker.component.mjs +60 -25
  18. package/esm2022/lib/date-range-picker.component.mjs +64 -26
  19. package/esm2022/lib/dropdown-item.component.mjs +19 -5
  20. package/esm2022/lib/dropdown-label.component.mjs +3 -3
  21. package/esm2022/lib/dropdown-menu.component.mjs +3 -3
  22. package/esm2022/lib/dropdown-separator.component.mjs +3 -3
  23. package/esm2022/lib/dropdown-trigger.directive.mjs +7 -3
  24. package/esm2022/lib/empty-state.component.mjs +3 -3
  25. package/esm2022/lib/hover-card.component.mjs +4 -2
  26. package/esm2022/lib/input.component.mjs +7 -5
  27. package/esm2022/lib/label.component.mjs +2 -2
  28. package/esm2022/lib/masked-input.component.mjs +3 -3
  29. package/esm2022/lib/modal.component.mjs +58 -22
  30. package/esm2022/lib/modal.service.mjs +13 -1
  31. package/esm2022/lib/multi-select.component.mjs +228 -20
  32. package/esm2022/lib/otp.component.mjs +6 -3
  33. package/esm2022/lib/pagination.component.mjs +19 -9
  34. package/esm2022/lib/progress.component.mjs +8 -5
  35. package/esm2022/lib/radio-group.component.mjs +51 -3
  36. package/esm2022/lib/radio-item.component.mjs +46 -8
  37. package/esm2022/lib/radio-service.mjs +60 -1
  38. package/esm2022/lib/range-calendar.component.mjs +317 -98
  39. package/esm2022/lib/resizable-panel.component.mjs +5 -4
  40. package/esm2022/lib/scroll-area.component.mjs +5 -5
  41. package/esm2022/lib/segment.component.mjs +73 -7
  42. package/esm2022/lib/select-item.component.mjs +20 -2
  43. package/esm2022/lib/select-separator.component.mjs +3 -3
  44. package/esm2022/lib/select.component.mjs +221 -14
  45. package/esm2022/lib/separator.component.mjs +12 -6
  46. package/esm2022/lib/sheet-ref.mjs +8 -1
  47. package/esm2022/lib/sheet-wrapper.component.mjs +27 -11
  48. package/esm2022/lib/sheet.component.mjs +57 -16
  49. package/esm2022/lib/sheet.service.mjs +5 -1
  50. package/esm2022/lib/sidebar.component.mjs +73 -15
  51. package/esm2022/lib/skeleton.component.mjs +19 -5
  52. package/esm2022/lib/switch.component.mjs +59 -53
  53. package/esm2022/lib/tabs.component.mjs +75 -13
  54. package/esm2022/lib/tag-input.component.mjs +6 -3
  55. package/esm2022/lib/textarea.component.mjs +9 -7
  56. package/esm2022/lib/theme.service.mjs +114 -138
  57. package/esm2022/lib/toaster.component.mjs +19 -9
  58. package/esm2022/lib/toggle-group.component.mjs +76 -4
  59. package/esm2022/lib/tolle-config.mjs +1 -1
  60. package/esm2022/lib/tooltip.directive.mjs +41 -17
  61. package/esm2022/lib/utils/color.mjs +324 -0
  62. package/esm2022/public-api.mjs +2 -1
  63. package/fesm2022/tolle-ui.mjs +2715 -682
  64. package/fesm2022/tolle-ui.mjs.map +1 -1
  65. package/lib/alert-dialog.component.d.ts +10 -1
  66. package/lib/avatar.component.d.ts +16 -3
  67. package/lib/badge.component.d.ts +17 -5
  68. package/lib/button.component.d.ts +8 -1
  69. package/lib/calendar.component.d.ts +21 -3
  70. package/lib/card.component.d.ts +6 -0
  71. package/lib/carousel/carousel.component.d.ts +1 -0
  72. package/lib/checkbox.component.d.ts +12 -4
  73. package/lib/country-selector.component.d.ts +11 -2
  74. package/lib/date-picker.component.d.ts +2 -1
  75. package/lib/date-range-picker.component.d.ts +5 -2
  76. package/lib/dropdown-item.component.d.ts +4 -2
  77. package/lib/dropdown-trigger.directive.d.ts +1 -1
  78. package/lib/modal.component.d.ts +6 -0
  79. package/lib/multi-select.component.d.ts +20 -0
  80. package/lib/otp.component.d.ts +1 -0
  81. package/lib/progress.component.d.ts +1 -0
  82. package/lib/radio-group.component.d.ts +8 -0
  83. package/lib/radio-item.component.d.ts +10 -4
  84. package/lib/radio-service.d.ts +29 -0
  85. package/lib/range-calendar.component.d.ts +33 -4
  86. package/lib/segment.component.d.ts +13 -0
  87. package/lib/select-item.component.d.ts +4 -1
  88. package/lib/select.component.d.ts +20 -0
  89. package/lib/separator.component.d.ts +2 -0
  90. package/lib/sheet-wrapper.component.d.ts +4 -0
  91. package/lib/sheet.component.d.ts +10 -1
  92. package/lib/sidebar.component.d.ts +2 -0
  93. package/lib/skeleton.component.d.ts +9 -3
  94. package/lib/switch.component.d.ts +13 -20
  95. package/lib/tabs.component.d.ts +11 -1
  96. package/lib/theme.service.d.ts +21 -6
  97. package/lib/toaster.component.d.ts +2 -2
  98. package/lib/toggle-group.component.d.ts +20 -2
  99. package/lib/tolle-config.d.ts +8 -0
  100. package/lib/tooltip.directive.d.ts +3 -0
  101. package/lib/utils/color.d.ts +87 -0
  102. package/package.json +4 -1
  103. package/preset.js +28 -0
  104. package/public-api.d.ts +1 -0
  105. package/registry/docs-content.json +4214 -0
  106. package/registry/llms-full.txt +1599 -0
  107. package/registry/llms.txt +83 -0
  108. package/registry/manifest.json +4925 -0
  109. package/registry/r/accordion-item.json +21 -0
  110. package/registry/r/accordion.json +23 -0
  111. package/registry/r/alert-dialog-dynamic.json +31 -0
  112. package/registry/r/alert-dialog.json +26 -0
  113. package/registry/r/alert.json +23 -0
  114. package/registry/r/aspect-ratio.json +21 -0
  115. package/registry/r/avatar-fallback.json +16 -0
  116. package/registry/r/avatar.json +23 -0
  117. package/registry/r/badge.json +23 -0
  118. package/registry/r/breadcrumb-item.json +16 -0
  119. package/registry/r/breadcrumb-link.json +16 -0
  120. package/registry/r/breadcrumb-separator.json +16 -0
  121. package/registry/r/breadcrumb.json +21 -0
  122. package/registry/r/button-group.json +21 -0
  123. package/registry/r/button.json +23 -0
  124. package/registry/r/calendar.json +23 -0
  125. package/registry/r/card.json +21 -0
  126. package/registry/r/carousel.json +18 -0
  127. package/registry/r/checkbox.json +23 -0
  128. package/registry/r/collapsible.json +21 -0
  129. package/registry/r/context-menu-trigger.json +23 -0
  130. package/registry/r/context-menu.json +28 -0
  131. package/registry/r/country-selector.json +31 -0
  132. package/registry/r/data-table.json +38 -0
  133. package/registry/r/date-picker.json +27 -0
  134. package/registry/r/date-range-picker.json +32 -0
  135. package/registry/r/dropdown-item.json +21 -0
  136. package/registry/r/dropdown-label.json +16 -0
  137. package/registry/r/dropdown-menu.json +16 -0
  138. package/registry/r/dropdown-separator.json +16 -0
  139. package/registry/r/dropdown-trigger.json +20 -0
  140. package/registry/r/empty-state.json +23 -0
  141. package/registry/r/hover-card.json +23 -0
  142. package/registry/r/input.json +21 -0
  143. package/registry/r/label.json +21 -0
  144. package/registry/r/masked-input.json +21 -0
  145. package/registry/r/modal.json +36 -0
  146. package/registry/r/multi-select.json +33 -0
  147. package/registry/r/otp-group.json +16 -0
  148. package/registry/r/otp-slot.json +21 -0
  149. package/registry/r/otp.json +21 -0
  150. package/registry/r/pagination.json +32 -0
  151. package/registry/r/phone-number-input.json +34 -0
  152. package/registry/r/popover-content.json +21 -0
  153. package/registry/r/popover.json +18 -0
  154. package/registry/r/progress.json +21 -0
  155. package/registry/r/radio-group.json +26 -0
  156. package/registry/r/radio-item.json +26 -0
  157. package/registry/r/range-calendar.json +28 -0
  158. package/registry/r/resizable-panel-item.json +23 -0
  159. package/registry/r/resizable-panel.json +23 -0
  160. package/registry/r/resizable.json +21 -0
  161. package/registry/r/scroll-area.json +21 -0
  162. package/registry/r/segment.json +21 -0
  163. package/registry/r/select-group.json +21 -0
  164. package/registry/r/select-item.json +26 -0
  165. package/registry/r/select-separator.json +21 -0
  166. package/registry/r/select.json +31 -0
  167. package/registry/r/separator.json +21 -0
  168. package/registry/r/sheet-wrapper.json +31 -0
  169. package/registry/r/sheet.json +21 -0
  170. package/registry/r/sidebar.json +21 -0
  171. package/registry/r/skeleton.json +23 -0
  172. package/registry/r/slider.json +21 -0
  173. package/registry/r/switch.json +23 -0
  174. package/registry/r/tabs.json +23 -0
  175. package/registry/r/tag-input.json +25 -0
  176. package/registry/r/textarea.json +21 -0
  177. package/registry/r/toaster.json +26 -0
  178. package/registry/r/toggle-group.json +25 -0
  179. package/registry/r/toggle.json +23 -0
  180. package/registry/r/tolle-cell.json +16 -0
  181. package/registry/r/tooltip.json +23 -0
  182. package/registry/registry.json +1540 -0
  183. package/theme.css +60 -5
@@ -147,13 +147,13 @@ export class SidebarComponent {
147
147
  [disabled]="collapsed"
148
148
  [attr.aria-expanded]="isParentExpanded(group, item, gIndex, i)"
149
149
  [class]="cn(
150
- 'group w-full relative flex items-center rounded-md px-3 py-2 text-sm font-medium transition-colors',
150
+ 'group w-full relative flex items-center rounded-md px-3 py-2 text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',
151
151
  'hover:bg-accent hover:text-accent-foreground',
152
152
  isParentExpanded(group, item, gIndex, i) ? 'text-foreground bg-accent/50' : 'text-muted-foreground',
153
153
  collapsed ? 'justify-center' : 'justify-start'
154
154
  )"
155
155
  >
156
- <i [class]="cn(
156
+ <i aria-hidden="true" [class]="cn(
157
157
  item.icon || 'ri-circle-fill',
158
158
  'h-4 w-4 text-lg shrink-0 transition-transform',
159
159
  !collapsed && 'group-hover:scale-110'
@@ -189,8 +189,9 @@ export class SidebarComponent {
189
189
  <button
190
190
  type="button"
191
191
  (click)="toggleChild(group, item, subItem, gIndex, i, j); $event.stopPropagation()"
192
+ [attr.aria-expanded]="isChildExpanded(group, item, subItem, gIndex, i, j)"
192
193
  [class]="cn(
193
- 'group w-full relative flex items-center rounded-md px-3 py-1.5 text-sm font-medium transition-colors',
194
+ 'group w-full relative flex items-center rounded-md px-3 py-1.5 text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',
194
195
  'hover:bg-accent hover:text-accent-foreground text-muted-foreground',
195
196
  isChildExpanded(group, item, subItem, gIndex, i, j) ? 'text-foreground bg-accent/30' : ''
196
197
  )"
@@ -214,7 +215,7 @@ export class SidebarComponent {
214
215
  [routerLink]="grandChild.url"
215
216
  [routerLinkActive]="activeClasses"
216
217
  [routerLinkActiveOptions]="{ exact: true }"
217
- class="flex items-center gap-2 hover:no-underline rounded-md px-3 py-1.5 text-sm transition-colors hover:bg-accent hover:text-accent-foreground text-muted-foreground whitespace-nowrap"
218
+ class="flex items-center gap-2 hover:no-underline rounded-md px-3 py-1.5 text-sm transition-colors hover:bg-accent hover:text-accent-foreground text-muted-foreground whitespace-nowrap focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring"
218
219
  >
219
220
  <span class="w-1.5 h-1.5 rounded-full bg-border/70 shrink-0"></span>
220
221
  <span class="truncate">{{ grandChild.title }}</span>
@@ -231,7 +232,7 @@ export class SidebarComponent {
231
232
  [routerLink]="subItem.url"
232
233
  [routerLinkActive]="activeClasses"
233
234
  [routerLinkActiveOptions]="{ exact: true }"
234
- class="flex items-center gap-2 hover:no-underline rounded-md px-3 py-1.5 text-sm transition-colors hover:bg-accent hover:text-accent-foreground text-muted-foreground whitespace-nowrap"
235
+ class="flex items-center gap-2 hover:no-underline rounded-md px-3 py-1.5 text-sm transition-colors hover:bg-accent hover:text-accent-foreground text-muted-foreground whitespace-nowrap focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring"
235
236
  >
236
237
  <span class="w-1.5 h-1.5 rounded-full bg-border shrink-0"></span>
237
238
  <span class="truncate">{{ subItem.title }}</span>
@@ -243,6 +244,34 @@ export class SidebarComponent {
243
244
  </div>
244
245
  </div>
245
246
  }
247
+ @else if (item.external) {
248
+ <!-- External / static-file Item (opens in a new tab) -->
249
+ <a
250
+ [href]="item.url"
251
+ target="_blank"
252
+ rel="noopener noreferrer"
253
+ [class]="cn(
254
+ 'group relative hover:no-underline flex items-center rounded-md px-3 py-2 text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',
255
+ 'hover:bg-accent hover:text-accent-foreground text-muted-foreground',
256
+ collapsed ? 'justify-center' : 'justify-start'
257
+ )"
258
+ >
259
+ <i aria-hidden="true" [class]="cn(
260
+ item.icon || 'ri-circle-fill',
261
+ 'h-4 w-4 text-lg shrink-0 transition-transform',
262
+ !collapsed && 'group-hover:scale-110'
263
+ )"></i>
264
+ <span [class]="cn(
265
+ 'truncate transition-all duration-300',
266
+ collapsed ? 'opacity-0 w-0 ml-0' : 'opacity-100 w-auto ml-3'
267
+ )">
268
+ {{ item.title }}
269
+ </span>
270
+ @if (!collapsed) {
271
+ <i aria-hidden="true" class="ri-external-link-line ml-auto text-xs opacity-50 transition-opacity group-hover:opacity-100"></i>
272
+ }
273
+ </a>
274
+ }
246
275
  @else {
247
276
  <!-- Standard Top-Level Item -->
248
277
  <a
@@ -250,12 +279,12 @@ export class SidebarComponent {
250
279
  [routerLinkActive]="activeClasses"
251
280
  [routerLinkActiveOptions]="{ exact: true }"
252
281
  [class]="cn(
253
- 'group relative hover:no-underline flex items-center rounded-md px-3 py-2 text-sm font-medium transition-colors',
282
+ 'group relative hover:no-underline flex items-center rounded-md px-3 py-2 text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',
254
283
  'hover:bg-accent hover:text-accent-foreground text-muted-foreground',
255
284
  collapsed ? 'justify-center' : 'justify-start'
256
285
  )"
257
286
  >
258
- <i [class]="cn(
287
+ <i aria-hidden="true" [class]="cn(
259
288
  item.icon || 'ri-circle-fill',
260
289
  'h-4 w-4 text-lg shrink-0 transition-transform',
261
290
  !collapsed && 'group-hover:scale-110'
@@ -316,13 +345,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
316
345
  [disabled]="collapsed"
317
346
  [attr.aria-expanded]="isParentExpanded(group, item, gIndex, i)"
318
347
  [class]="cn(
319
- 'group w-full relative flex items-center rounded-md px-3 py-2 text-sm font-medium transition-colors',
348
+ 'group w-full relative flex items-center rounded-md px-3 py-2 text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',
320
349
  'hover:bg-accent hover:text-accent-foreground',
321
350
  isParentExpanded(group, item, gIndex, i) ? 'text-foreground bg-accent/50' : 'text-muted-foreground',
322
351
  collapsed ? 'justify-center' : 'justify-start'
323
352
  )"
324
353
  >
325
- <i [class]="cn(
354
+ <i aria-hidden="true" [class]="cn(
326
355
  item.icon || 'ri-circle-fill',
327
356
  'h-4 w-4 text-lg shrink-0 transition-transform',
328
357
  !collapsed && 'group-hover:scale-110'
@@ -358,8 +387,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
358
387
  <button
359
388
  type="button"
360
389
  (click)="toggleChild(group, item, subItem, gIndex, i, j); $event.stopPropagation()"
390
+ [attr.aria-expanded]="isChildExpanded(group, item, subItem, gIndex, i, j)"
361
391
  [class]="cn(
362
- 'group w-full relative flex items-center rounded-md px-3 py-1.5 text-sm font-medium transition-colors',
392
+ 'group w-full relative flex items-center rounded-md px-3 py-1.5 text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',
363
393
  'hover:bg-accent hover:text-accent-foreground text-muted-foreground',
364
394
  isChildExpanded(group, item, subItem, gIndex, i, j) ? 'text-foreground bg-accent/30' : ''
365
395
  )"
@@ -383,7 +413,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
383
413
  [routerLink]="grandChild.url"
384
414
  [routerLinkActive]="activeClasses"
385
415
  [routerLinkActiveOptions]="{ exact: true }"
386
- class="flex items-center gap-2 hover:no-underline rounded-md px-3 py-1.5 text-sm transition-colors hover:bg-accent hover:text-accent-foreground text-muted-foreground whitespace-nowrap"
416
+ class="flex items-center gap-2 hover:no-underline rounded-md px-3 py-1.5 text-sm transition-colors hover:bg-accent hover:text-accent-foreground text-muted-foreground whitespace-nowrap focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring"
387
417
  >
388
418
  <span class="w-1.5 h-1.5 rounded-full bg-border/70 shrink-0"></span>
389
419
  <span class="truncate">{{ grandChild.title }}</span>
@@ -400,7 +430,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
400
430
  [routerLink]="subItem.url"
401
431
  [routerLinkActive]="activeClasses"
402
432
  [routerLinkActiveOptions]="{ exact: true }"
403
- class="flex items-center gap-2 hover:no-underline rounded-md px-3 py-1.5 text-sm transition-colors hover:bg-accent hover:text-accent-foreground text-muted-foreground whitespace-nowrap"
433
+ class="flex items-center gap-2 hover:no-underline rounded-md px-3 py-1.5 text-sm transition-colors hover:bg-accent hover:text-accent-foreground text-muted-foreground whitespace-nowrap focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring"
404
434
  >
405
435
  <span class="w-1.5 h-1.5 rounded-full bg-border shrink-0"></span>
406
436
  <span class="truncate">{{ subItem.title }}</span>
@@ -412,6 +442,34 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
412
442
  </div>
413
443
  </div>
414
444
  }
445
+ @else if (item.external) {
446
+ <!-- External / static-file Item (opens in a new tab) -->
447
+ <a
448
+ [href]="item.url"
449
+ target="_blank"
450
+ rel="noopener noreferrer"
451
+ [class]="cn(
452
+ 'group relative hover:no-underline flex items-center rounded-md px-3 py-2 text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',
453
+ 'hover:bg-accent hover:text-accent-foreground text-muted-foreground',
454
+ collapsed ? 'justify-center' : 'justify-start'
455
+ )"
456
+ >
457
+ <i aria-hidden="true" [class]="cn(
458
+ item.icon || 'ri-circle-fill',
459
+ 'h-4 w-4 text-lg shrink-0 transition-transform',
460
+ !collapsed && 'group-hover:scale-110'
461
+ )"></i>
462
+ <span [class]="cn(
463
+ 'truncate transition-all duration-300',
464
+ collapsed ? 'opacity-0 w-0 ml-0' : 'opacity-100 w-auto ml-3'
465
+ )">
466
+ {{ item.title }}
467
+ </span>
468
+ @if (!collapsed) {
469
+ <i aria-hidden="true" class="ri-external-link-line ml-auto text-xs opacity-50 transition-opacity group-hover:opacity-100"></i>
470
+ }
471
+ </a>
472
+ }
415
473
  @else {
416
474
  <!-- Standard Top-Level Item -->
417
475
  <a
@@ -419,12 +477,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
419
477
  [routerLinkActive]="activeClasses"
420
478
  [routerLinkActiveOptions]="{ exact: true }"
421
479
  [class]="cn(
422
- 'group relative hover:no-underline flex items-center rounded-md px-3 py-2 text-sm font-medium transition-colors',
480
+ 'group relative hover:no-underline flex items-center rounded-md px-3 py-2 text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',
423
481
  'hover:bg-accent hover:text-accent-foreground text-muted-foreground',
424
482
  collapsed ? 'justify-center' : 'justify-start'
425
483
  )"
426
484
  >
427
- <i [class]="cn(
485
+ <i aria-hidden="true" [class]="cn(
428
486
  item.icon || 'ri-circle-fill',
429
487
  'h-4 w-4 text-lg shrink-0 transition-transform',
430
488
  !collapsed && 'group-hover:scale-110'
@@ -457,4 +515,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
457
515
  }], variant: [{
458
516
  type: Input
459
517
  }] } });
460
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lkZWJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy90b2xsZS9zcmMvbGliL3NpZGViYXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUE0QixNQUFNLGVBQWUsQ0FBQztBQUMzRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxZQUFZLENBQUM7OztBQW1NaEMsTUFBTSxPQUFPLGdCQUFnQjtJQUNsQixLQUFLLEdBQW1CLEVBQUUsQ0FBQztJQUMzQixTQUFTLEdBQUcsS0FBSyxDQUFDO0lBQ2xCLEtBQUssR0FBRyxFQUFFLENBQUM7SUFFcEI7Ozs7OztPQU1HO0lBQ00sT0FBTyxHQUFrRCxTQUFTLENBQUM7SUFFNUUsZUFBZSxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7SUFDcEMsZ0JBQWdCLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztJQUVsQixFQUFFLEdBQUcsRUFBRSxDQUFDO0lBRTNCLElBQUksYUFBYTtRQUNmLE9BQU8sRUFBRSxDQUNQLG1CQUFtQjtRQUNuQixnRkFBZ0Y7UUFDaEYsSUFBSSxDQUFDLE9BQU8sS0FBSyxTQUFTLElBQUksc0ZBQXNGO1FBRXBILDZCQUE2QjtRQUM3QixJQUFJLENBQUMsT0FBTyxLQUFLLFdBQVcsSUFBSSw4REFBOEQ7UUFFOUYsOENBQThDO1FBQzlDLElBQUksQ0FBQyxPQUFPLEtBQUssT0FBTyxJQUFJLGtDQUFrQztRQUU5RCxvQkFBb0I7UUFDcEIsSUFBSSxDQUFDLE9BQU8sS0FBSyxTQUFTLElBQUksaUdBQWlHLENBQ2hJLENBQUM7SUFDSixDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQUksT0FB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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXFLVDs4QkFRUSxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBU0csT0FBTztzQkFBZixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgUm91dGVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IGNuIH0gZnJvbSAnLi91dGlscy9jbic7XG5cbi8vIC0tLSBJbnRlcmZhY2VzIC0tLVxuZXhwb3J0IHR5cGUgU2lkZWJhckl0ZW0gPSB7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIHVybD86IHN0cmluZztcbiAgaWNvbj86IHN0cmluZztcbiAgaXNBY3RpdmU/OiBib29sZWFuO1xuICBpdGVtcz86IFNpZGViYXJJdGVtW107XG4gIGlkPzogc3RyaW5nO1xuICBleHBhbmRlZD86IGJvb2xlYW47XG59XG5cbmV4cG9ydCB0eXBlIFNpZGViYXJHcm91cCA9IHtcbiAgdGl0bGU6IHN0cmluZztcbiAgaXRlbXM6IFNpZGViYXJJdGVtW107XG4gIGlkPzogc3RyaW5nO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0b2xsZS1zaWRlYmFyJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgUm91dGVyTW9kdWxlXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8YXNpZGUgW2NsYXNzXT1cImNuKFxuICAgICAgJ2ZsZXggZmxleC1jb2wgaC1mdWxsIGJnLWJhY2tncm91bmQgdHJhbnNpdGlvbi1bd2lkdGhdIGR1cmF0aW9uLTMwMCBlYXNlLWluLW91dCBzaHJpbmstMCBvdmVyZmxvdy1oaWRkZW4nLFxuICAgICAgY29sbGFwc2VkID8gJ3ctMTYnIDogJ3ctNjQnLFxuICAgICAgY2xhc3NcbiAgICApXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleCBoLTE0IHNocmluay0wIGl0ZW1zLWNlbnRlciBweC0zIG92ZXJmbG93LWhpZGRlbiB3aGl0ZXNwYWNlLW5vd3JhcFwiPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbaGVhZGVyXVwiPjwvbmctY29udGVudD5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleC0xIG1pbi1oLTAgb3ZlcmZsb3cteS1hdXRvIG92ZXJmbG93LXgtaGlkZGVuIHB5LTQgcHgtM1wiPlxuXG4gICAgICAgIEBmb3IgKGdyb3VwIG9mIGl0ZW1zOyB0cmFjayBncm91cC5pZCB8fCBncm91cC50aXRsZSB8fCAkaW5kZXg7IGxldCBnSW5kZXggPSAkaW5kZXgpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItNlwiPlxuXG4gICAgICAgICAgICA8ZGl2IFtjbGFzc109XCJjbihcbiAgICAgICAgICAgICAgJ21iLTIgcHgtMiB0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdXBwZXJjYXNlIHRyYWNraW5nLXdpZGVyIHRleHQtbXV0ZWQtZm9yZWdyb3VuZC83MCB0cmFuc2l0aW9uLWFsbCBkdXJhdGlvbi0yMDAgb3ZlcmZsb3ctaGlkZGVuJyxcbiAgICAgICAgICAgICAgY29sbGFwc2VkID8gJ29wYWNpdHktMCBoLTAgbWItMCBweC0wJyA6ICdvcGFjaXR5LTEwMCBoLWF1dG8nXG4gICAgICAgICAgICApXCI+XG4gICAgICAgICAgICAgIHt7IGdyb3VwLnRpdGxlIH19XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLTFcIj5cbiAgICAgICAgICAgICAgQGZvciAoaXRlbSBvZiBncm91cC5pdGVtczsgdHJhY2sgaXRlbS5pZCB8fCBpdGVtLnRpdGxlIHx8ICRpbmRleDsgbGV0IGkgPSAkaW5kZXgpIHtcblxuICAgICAgICAgICAgICAgIEBpZiAoaXRlbS5pdGVtcyAmJiBpdGVtLml0ZW1zLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgPCEtLSBQYXJlbnQgSXRlbSAoR3JvdXApIC0tPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlbGF0aXZlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlUGFyZW50KGdyb3VwLCBpdGVtLCBnSW5kZXgsIGkpXCJcbiAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiY29sbGFwc2VkXCJcbiAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cImlzUGFyZW50RXhwYW5kZWQoZ3JvdXAsIGl0ZW0sIGdJbmRleCwgaSlcIlxuICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJjbihcbiAgICAgICAgICAgICAgICAgICAgICAgICdncm91cCB3LWZ1bGwgcmVsYXRpdmUgZmxleCBpdGVtcy1jZW50ZXIgcm91bmRlZC1tZCBweC0zIHB5LTIgdGV4dC1zbSBmb250LW1lZGl1bSB0cmFuc2l0aW9uLWNvbG9ycycsXG4gICAgICAgICAgICAgICAgICAgICAgICAnaG92ZXI6YmctYWNjZW50IGhvdmVyOnRleHQtYWNjZW50LWZvcmVncm91bmQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNQYXJlbnRFeHBhbmRlZChncm91cCwgaXRlbSwgZ0luZGV4LCBpKSA/ICd0ZXh0LWZvcmVncm91bmQgYmctYWNjZW50LzUwJyA6ICd0ZXh0LW11dGVkLWZvcmVncm91bmQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sbGFwc2VkID8gJ2p1c3RpZnktY2VudGVyJyA6ICdqdXN0aWZ5LXN0YXJ0J1xuICAgICAgICAgICAgICAgICAgICAgIClcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPGkgW2NsYXNzXT1cImNuKFxuICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmljb24gfHwgJ3JpLWNpcmNsZS1maWxsJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2gtNCB3LTQgdGV4dC1sZyBzaHJpbmstMCB0cmFuc2l0aW9uLXRyYW5zZm9ybScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICFjb2xsYXBzZWQgJiYgJ2dyb3VwLWhvdmVyOnNjYWxlLTExMCdcbiAgICAgICAgICAgICAgICAgICAgICAgIClcIj48L2k+XG5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBbY2xhc3NdPVwiY24oXG4gICAgICAgICAgICAgICAgICAgICAgICAndHJ1bmNhdGUgdHJhbnNpdGlvbi1hbGwgZHVyYXRpb24tMzAwJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxhcHNlZCA/ICdvcGFjaXR5LTAgdy0wIG1sLTAnIDogJ29wYWNpdHktMTAwIHctYXV0byBtbC0zJ1xuICAgICAgICAgICAgICAgICAgICAgIClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0udGl0bGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICBAaWYgKCFjb2xsYXBzZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIFtjbGFzc109XCJjbihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JpLWFycm93LWRvd24tcy1saW5lIG1sLWF1dG8gdHJhbnNpdGlvbi10cmFuc2Zvcm0gZHVyYXRpb24tMzAwJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaXNQYXJlbnRFeHBhbmRlZChncm91cCwgaXRlbSwgZ0luZGV4LCBpKSA/ICdyb3RhdGUtMTgwJyA6ICcnXG4gICAgICAgICAgICAgICAgICAgICAgICApXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSBTdWJtZW51IEdyaWQgVHJhbnNpdGlvbiAtLT5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBbY2xhc3NdPVwiY24oXG4gICAgICAgICAgICAgICAgICAgICAgJ2dyaWQgdHJhbnNpdGlvbi1bZ3JpZC10ZW1wbGF0ZS1yb3dzXSBkdXJhdGlvbi0zMDAgZWFzZS1pbi1vdXQnLFxuICAgICAgICAgICAgICAgICAgICAgIGlzUGFyZW50RXhwYW5kZWQoZ3JvdXAsIGl0ZW0sIGdJbmRleCwgaSkgJiYgIWNvbGxhcHNlZCA/ICdncmlkLXJvd3MtWzFmcl0gb3BhY2l0eS0xMDAnIDogJ2dyaWQtcm93cy1bMGZyXSBvcGFjaXR5LTAnXG4gICAgICAgICAgICAgICAgICAgIClcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwib3ZlcmZsb3ctaGlkZGVuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBnYXAtMSBtdC0xIG1sLTQgYm9yZGVyLWwgYm9yZGVyLWJvcmRlci81MCBwbC0yXCI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAoc3ViSXRlbSBvZiBpdGVtLml0ZW1zOyB0cmFjayBzdWJJdGVtLmlkIHx8IHN1Ykl0ZW0udGl0bGUgfHwgJGluZGV4OyBsZXQgaiA9ICRpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoc3ViSXRlbS5pdGVtcyAmJiBzdWJJdGVtLml0ZW1zLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBHcmFuZGNoaWxkIEl0ZW0gR3JvdXAgKFJlY3Vyc2l2ZS1pc2ggbG9naWMgZm9yIGRlcHRoIDIpIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlbGF0aXZlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlQ2hpbGQoZ3JvdXAsIGl0ZW0sIHN1Ykl0ZW0sIGdJbmRleCwgaSwgaik7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImNuKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2dyb3VwIHctZnVsbCByZWxhdGl2ZSBmbGV4IGl0ZW1zLWNlbnRlciByb3VuZGVkLW1kIHB4LTMgcHktMS41IHRleHQtc20gZm9udC1tZWRpdW0gdHJhbnNpdGlvbi1jb2xvcnMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2hvdmVyOmJnLWFjY2VudCBob3Zlcjp0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kIHRleHQtbXV0ZWQtZm9yZWdyb3VuZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0NoaWxkRXhwYW5kZWQoZ3JvdXAsIGl0ZW0sIHN1Ykl0ZW0sIGdJbmRleCwgaSwgaikgPyAndGV4dC1mb3JlZ3JvdW5kIGJnLWFjY2VudC8zMCcgOiAnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ3LTEuNSBoLTEuNSByb3VuZGVkLWZ1bGwgYmctYm9yZGVyIHNocmluay0wXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWwtMiB0cnVuY2F0ZVwiPnt7IHN1Ykl0ZW0udGl0bGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgW2NsYXNzXT1cImNuKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JpLWFycm93LXJpZ2h0LXMtbGluZSBtbC1hdXRvIHRyYW5zaXRpb24tdHJhbnNmb3JtIGR1cmF0aW9uLTMwMCB0ZXh0LXhzJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzQ2hpbGRFeHBhbmRlZChncm91cCwgaXRlbSwgc3ViSXRlbSwgZ0luZGV4LCBpLCBqKSA/ICdyb3RhdGUtOTAnIDogJydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtjbGFzc109XCJjbihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZ3JpZCB0cmFuc2l0aW9uLVtncmlkLXRlbXBsYXRlLXJvd3NdIGR1cmF0aW9uLTMwMCBlYXNlLWluLW91dCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNDaGlsZEV4cGFuZGVkKGdyb3VwLCBpdGVtLCBzdWJJdGVtLCBnSW5kZXgsIGksIGopID8gJ2dyaWQtcm93cy1bMWZyXSBvcGFjaXR5LTEwMCcgOiAnZ3JpZC1yb3dzLVswZnJdIG9wYWNpdHktMCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvdmVyZmxvdy1oaWRkZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC0xIG10LTEgbWwtNCBib3JkZXItbCBib3JkZXItYm9yZGVyLzMwIHBsLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAoZ3JhbmRDaGlsZCBvZiBzdWJJdGVtLml0ZW1zOyB0cmFjayBncmFuZENoaWxkLnRpdGxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cImdyYW5kQ2hpbGQudXJsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rQWN0aXZlXT1cImFjdGl2ZUNsYXNzZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JvdXRlckxpbmtBY3RpdmVPcHRpb25zXT1cInsgZXhhY3Q6IHRydWUgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yIGhvdmVyOm5vLXVuZGVybGluZSByb3VuZGVkLW1kIHB4LTMgcHktMS41IHRleHQtc20gdHJhbnNpdGlvbi1jb2xvcnMgaG92ZXI6YmctYWNjZW50IGhvdmVyOnRleHQtYWNjZW50LWZvcmVncm91bmQgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHdoaXRlc3BhY2Utbm93cmFwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInctMS41IGgtMS41IHJvdW5kZWQtZnVsbCBiZy1ib3JkZXIvNzAgc2hyaW5rLTBcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRydW5jYXRlXCI+e3sgZ3JhbmRDaGlsZC50aXRsZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFN0YW5kYXJkIFN1YiBJdGVtIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwic3ViSXRlbS51cmxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcm91dGVyTGlua0FjdGl2ZV09XCJhY3RpdmVDbGFzc2VzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JvdXRlckxpbmtBY3RpdmVPcHRpb25zXT1cInsgZXhhY3Q6IHRydWUgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgaG92ZXI6bm8tdW5kZXJsaW5lIHJvdW5kZWQtbWQgcHgtMyBweS0xLjUgdGV4dC1zbSB0cmFuc2l0aW9uLWNvbG9ycyBob3ZlcjpiZy1hY2NlbnQgaG92ZXI6dGV4dC1hY2NlbnQtZm9yZWdyb3VuZCB0ZXh0LW11dGVkLWZvcmVncm91bmQgd2hpdGVzcGFjZS1ub3dyYXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInctMS41IGgtMS41IHJvdW5kZWQtZnVsbCBiZy1ib3JkZXIgc2hyaW5rLTBcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidHJ1bmNhdGVcIj57eyBzdWJJdGVtLnRpdGxlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIDwhLS0gU3RhbmRhcmQgVG9wLUxldmVsIEl0ZW0gLS0+XG4gICAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgICBbcm91dGVyTGlua109XCJpdGVtLnVybFwiXG4gICAgICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rQWN0aXZlXT1cImFjdGl2ZUNsYXNzZXNcIlxuICAgICAgICAgICAgICAgICAgICBbcm91dGVyTGlua0FjdGl2ZU9wdGlvbnNdPVwieyBleGFjdDogdHJ1ZSB9XCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImNuKFxuICAgICAgICAgICAgICAgICAgICAgICdncm91cCByZWxhdGl2ZSBob3Zlcjpuby11bmRlcmxpbmUgZmxleCBpdGVtcy1jZW50ZXIgcm91bmRlZC1tZCBweC0zIHB5LTIgdGV4dC1zbSBmb250LW1lZGl1bSB0cmFuc2l0aW9uLWNvbG9ycycsXG4gICAgICAgICAgICAgICAgICAgICAgJ2hvdmVyOmJnLWFjY2VudCBob3Zlcjp0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kIHRleHQtbXV0ZWQtZm9yZWdyb3VuZCcsXG4gICAgICAgICAgICAgICAgICAgICAgY29sbGFwc2VkID8gJ2p1c3RpZnktY2VudGVyJyA6ICdqdXN0aWZ5LXN0YXJ0J1xuICAgICAgICAgICAgICAgICAgICApXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGkgW2NsYXNzXT1cImNuKFxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5pY29uIHx8ICdyaS1jaXJjbGUtZmlsbCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAnaC00IHctNCB0ZXh0LWxnIHNocmluay0wIHRyYW5zaXRpb24tdHJhbnNmb3JtJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICFjb2xsYXBzZWQgJiYgJ2dyb3VwLWhvdmVyOnNjYWxlLTExMCdcbiAgICAgICAgICAgICAgICAgICAgICApXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBbY2xhc3NdPVwiY24oXG4gICAgICAgICAgICAgICAgICAgICAgJ3RydW5jYXRlIHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTMwMCcsXG4gICAgICAgICAgICAgICAgICAgICAgY29sbGFwc2VkID8gJ29wYWNpdHktMCB3LTAgbWwtMCcgOiAnb3BhY2l0eS0xMDAgdy1hdXRvIG1sLTMnXG4gICAgICAgICAgICAgICAgICAgIClcIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLnRpdGxlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cInNocmluay0wIHAtMyBvdmVyZmxvdy1oaWRkZW4gd2hpdGVzcGFjZS1ub3dyYXBcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2Zvb3Rlcl1cIj48L25nLWNvbnRlbnQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2FzaWRlPlxuICBgLFxuICBzdHlsZXM6IFtgXG4gICAgOmhvc3QgeyBkaXNwbGF5OiBibG9jazsgaGVpZ2h0OiAxMDAlOyB9XG4gICAgYnV0dG9uOmRpc2FibGVkIHsgY3Vyc29yOiBub3QtYWxsb3dlZDsgb3BhY2l0eTogMC42OyB9XG4gICAgKiB7IHRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpOyB9XG4gIGBdXG59KVxuZXhwb3J0IGNsYXNzIFNpZGViYXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xuICBASW5wdXQoKSBpdGVtczogU2lkZWJhckdyb3VwW10gPSBbXTtcbiAgQElucHV0KCkgY29sbGFwc2VkID0gZmFsc2U7XG4gIEBJbnB1dCgpIGNsYXNzID0gJyc7XG5cbiAgLyoqXG4gICAqIFN0eWxpbmcgdmFyaWFudCBmb3IgYWN0aXZlIGl0ZW1zLlxuICAgKiAtIGRlZmF1bHQ6IFNvbGlkIHByaW1hcnkgYmFja2dyb3VuZCwgbGlnaHQgdGV4dCAoTWF0Y2hlcyBCYWRnZSBEZWZhdWx0KVxuICAgKiAtIHNlY29uZGFyeTogU29saWQgc2Vjb25kYXJ5IGJhY2tncm91bmRcbiAgICogLSBnaG9zdDogVHJhbnNwYXJlbnQgYmFja2dyb3VuZCwgYWNjZW50IHRleHQgKFNoYWRjbiBzdGFuZGFyZClcbiAgICogLSBvdXRsaW5lOiBCb3JkZXJlZFxuICAgKi9cbiAgQElucHV0KCkgdmFyaWFudDogJ2RlZmF1bHQnIHwgJ3NlY29uZGFyeScgfCAnZ2hvc3QnIHwgJ291dGxpbmUnID0gJ2RlZmF1bHQnO1xuXG4gIGV4cGFuZGVkUGFyZW50cyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBleHBhbmRlZENoaWxkcmVuID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGNuID0gY247XG5cbiAgZ2V0IGFjdGl2ZUNsYXNzZXMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gY24oXG4gICAgICAndHJhbnNpdGlvbi1jb2xvcnMnLFxuICAgICAgLy8gRGVmYXVsdDogU29saWQgUHJpbWFyeSAoQmFkZ2UtbGlrZSkgd2l0aCBsaWdodGVyIG9wYWNpdHkgKDgwJSBpbnN0ZWFkIG9mIDkwJSlcbiAgICAgIHRoaXMudmFyaWFudCA9PT0gJ2RlZmF1bHQnICYmICdiZy1wcmltYXJ5LzgwIHRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIGhvdmVyOmJnLXByaW1hcnkgaG92ZXI6dGV4dC1wcmltYXJ5LWZvcmVncm91bmQnLFxuXG4gICAgICAvLyBTZWNvbmRhcnk6IFNvbGlkIFNlY29uZGFyeVxuICAgICAgdGhpcy52YXJpYW50ID09PSAnc2Vjb25kYXJ5JyAmJiAnYmctc2Vjb25kYXJ5IHRleHQtc2Vjb25kYXJ5LWZvcmVncm91bmQgaG92ZXI6Ymctc2Vjb25kYXJ5LzgwJyxcblxuICAgICAgLy8gR2hvc3Q6IFN1YnRsZSBiYWNrZ3JvdW5kIChTaWRlYmFyIHN0YW5kYXJkKVxuICAgICAgdGhpcy52YXJpYW50ID09PSAnZ2hvc3QnICYmICdiZy1hY2NlbnQgdGV4dC1hY2NlbnQtZm9yZWdyb3VuZCcsXG5cbiAgICAgIC8vIE91dGxpbmU6IEJvcmRlcmVkXG4gICAgICB0aGlzLnZhcmlhbnQgPT09ICdvdXRsaW5lJyAmJiAnYm9yZGVyIGJvcmRlci1ib3JkZXIgYmctYmFja2dyb3VuZCB0ZXh0LWZvcmVncm91bmQgaG92ZXI6YmctYWNjZW50IGhvdmVyOnRleHQtYWNjZW50LWZvcmVncm91bmQnXG4gICAgKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoY2hhbmdlc1snY29sbGFwc2VkJ10gJiYgdGhpcy5jb2xsYXBzZWQpIHtcbiAgICAgIHRoaXMuY29sbGFwc2VBbGwoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXNbJ2l0ZW1zJ10pIHtcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZVN0YXRlKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gLS0tIFNUQVRFIElOSVQgLS0tXG4gIHByaXZhdGUgaW5pdGlhbGl6ZVN0YXRlKCkge1xuICAgIHRoaXMuY29sbGFwc2VBbGwoKTtcbiAgICBpZiAoIXRoaXMuaXRlbXMpIHJldHVybjtcblxuICAgIHRoaXMuaXRlbXMuZm9yRWFjaCgoZ3JvdXAsIGdJbmRleCkgPT4ge1xuICAgICAgZ3JvdXAuaXRlbXMuZm9yRWFjaCgoaXRlbSwgaUluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IHBhcmVudElkID0gdGhpcy5nZXRQYXJlbnRJZChncm91cCwgaXRlbSwgZ0luZGV4LCBpSW5kZXgpO1xuXG4gICAgICAgIGlmIChpdGVtLmV4cGFuZGVkKSB7XG4gICAgICAgICAgdGhpcy5leHBhbmRlZFBhcmVudHMuYWRkKHBhcmVudElkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpdGVtLml0ZW1zKSB7XG4gICAgICAgICAgaXRlbS5pdGVtcy5mb3JFYWNoKChzdWJJdGVtLCBzSW5kZXgpID0+IHtcbiAgICAgICAgICAgIGlmIChzdWJJdGVtLmV4cGFuZGVkKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGNoaWxkSWQgPSB0aGlzLmdldENoaWxkSWQoZ3JvdXAsIGl0ZW0sIHN1Ykl0ZW0sIGdJbmRleCwgaUluZGV4LCBzSW5kZXgpO1xuICAgICAgICAgICAgICB0aGlzLmV4cGFuZGVkQ2hpbGRyZW4uYWRkKGNoaWxkSWQpO1xuICAgICAgICAgICAgICB0aGlzLmV4cGFuZGVkUGFyZW50cy5hZGQocGFyZW50SWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIC0tLSBJRCBHRU5FUkFUT1JTIC0tLVxuICBnZXRHcm91cElkKGdyb3VwOiBTaWRlYmFyR3JvdXAsIGluZGV4OiBudW1iZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiBncm91cC5pZCB8fCBncm91cC50aXRsZSB8fCBgZy0ke2luZGV4fWA7XG4gIH1cblxuICBnZXRQYXJlbnRJZChncm91cDogU2lkZWJhckdyb3VwLCBpdGVtOiBTaWRlYmFySXRlbSwgZ0luZGV4OiBudW1iZXIsIGlJbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBjb25zdCBncm91cElkID0gdGhpcy5nZXRHcm91cElkKGdyb3VwLCBnSW5kZXgpO1xuICAgIGNvbnN0IGl0ZW1JZCA9IGl0ZW0uaWQgfHwgaXRlbS50aXRsZSB8fCBgcC0ke2lJbmRleH1gO1xuICAgIHJldHVybiBgJHtncm91cElkfV9fJHtpdGVtSWR9YDtcbiAgfVxuXG4gIGdldENoaWxkSWQoZ3JvdXA6IFNpZGViYXJHcm91cCwgcGFyZW50OiBTaWRlYmFySXRlbSwgc3ViSXRlbTogU2lkZWJhckl0ZW0sIGdJbmRleDogbnVtYmVyLCBpSW5kZXg6IG51bWJlciwgc0luZGV4OiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGNvbnN0IHBhcmVudElkID0gdGhpcy5nZXRQYXJlbnRJZChncm91cCwgcGFyZW50LCBnSW5kZXgsIGlJbmRleCk7XG4gICAgY29uc3Qgc3ViSXRlbUlkID0gc3ViSXRlbS5pZCB8fCBzdWJJdGVtLnRpdGxlIHx8IGBjLSR7c0luZGV4fWA7XG4gICAgcmV0dXJuIGAke3BhcmVudElkfV9fJHtzdWJJdGVtSWR9YDtcbiAgfVxuXG4gIC8vIC0tLSBBQ1RJT05TIC0tLVxuICB0b2dnbGVQYXJlbnQoZ3JvdXA6IFNpZGViYXJHcm91cCwgaXRlbTogU2lkZWJhckl0ZW0sIGdJbmRleDogbnVtYmVyLCBpSW5kZXg6IG51bWJlcikge1xuICAgIGlmICh0aGlzLmNvbGxhcHNlZCkgcmV0dXJuO1xuICAgIGNvbnN0IGlkID0gdGhpcy5nZXRQYXJlbnRJZChncm91cCwgaXRlbSwgZ0luZGV4LCBpSW5kZXgpO1xuXG4gICAgY29uc3QgbmV3U2V0ID0gbmV3IFNldCh0aGlzLmV4cGFuZGVkUGFyZW50cyk7XG4gICAgaWYgKG5ld1NldC5oYXMoaWQpKSB7XG4gICAgICBuZXdTZXQuZGVsZXRlKGlkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3U2V0LmFkZChpZCk7XG4gICAgfVxuICAgIHRoaXMuZXhwYW5kZWRQYXJlbnRzID0gbmV3U2V0O1xuICB9XG5cbiAgdG9nZ2xlQ2hpbGQoZ3JvdXA6IFNpZGViYXJHcm91cCwgcGFyZW50OiBTaWRlYmFySXRlbSwgc3ViSXRlbTogU2lkZWJhckl0ZW0sIGdJbmRleDogbnVtYmVyLCBpSW5kZXg6IG51bWJlciwgc0luZGV4OiBudW1iZXIpIHtcbiAgICBjb25zdCBpZCA9IHRoaXMuZ2V0Q2hpbGRJZChncm91cCwgcGFyZW50LCBzdWJJdGVtLCBnSW5kZXgsIGlJbmRleCwgc0luZGV4KTtcblxuICAgIGNvbnN0IG5ld1NldCA9IG5ldyBTZXQodGhpcy5leHBhbmRlZENoaWxkcmVuKTtcbiAgICBpZiAobmV3U2V0LmhhcyhpZCkpIHtcbiAgICAgIG5ld1NldC5kZWxldGUoaWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXdTZXQuYWRkKGlkKTtcbiAgICB9XG4gICAgdGhpcy5leHBhbmRlZENoaWxkcmVuID0gbmV3U2V0O1xuICB9XG5cbiAgcHJpdmF0ZSBjb2xsYXBzZUFsbCgpIHtcbiAgICB0aGlzLmV4cGFuZGVkUGFyZW50cyA9IG5ldyBTZXQoKTtcbiAgICB0aGlzLmV4cGFuZGVkQ2hpbGRyZW4gPSBuZXcgU2V0KCk7XG4gIH1cblxuICAvLyAtLS0gVEVNUExBVEUgSEVMUEVSUyAtLS1cbiAgaXNQYXJlbnRFeHBhbmRlZChncm91cDogU2lkZWJhckdyb3VwLCBpdGVtOiBTaWRlYmFySXRlbSwgZ0luZGV4OiBudW1iZXIsIGlJbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZXhwYW5kZWRQYXJlbnRzLmhhcyh0aGlzLmdldFBhcmVudElkKGdyb3VwLCBpdGVtLCBnSW5kZXgsIGlJbmRleCkpO1xuICB9XG5cbiAgaXNDaGlsZEV4cGFuZGVkKGdyb3VwOiBTaWRlYmFyR3JvdXAsIHBhcmVudDogU2lkZWJhckl0ZW0sIHN1Ykl0ZW06IFNpZGViYXJJdGVtLCBnSW5kZXg6IG51bWJlciwgaUluZGV4OiBudW1iZXIsIHNJbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZXhwYW5kZWRDaGlsZHJlbi5oYXModGhpcy5nZXRDaGlsZElkKGdyb3VwLCBwYXJlbnQsIHN1Ykl0ZW0sIGdJbmRleCwgaUluZGV4LCBzSW5kZXgpKTtcbiAgfVxufVxuIl19
518
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lkZWJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy90b2xsZS9zcmMvbGliL3NpZGViYXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUE0QixNQUFNLGVBQWUsQ0FBQztBQUMzRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxZQUFZLENBQUM7OztBQWtPaEMsTUFBTSxPQUFPLGdCQUFnQjtJQUNsQixLQUFLLEdBQW1CLEVBQUUsQ0FBQztJQUMzQixTQUFTLEdBQUcsS0FBSyxDQUFDO0lBQ2xCLEtBQUssR0FBRyxFQUFFLENBQUM7SUFFcEI7Ozs7OztPQU1HO0lBQ00sT0FBTyxHQUFrRCxTQUFTLENBQUM7SUFFNUUsZUFBZSxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7SUFDcEMsZ0JBQWdCLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztJQUVsQixFQUFFLEdBQUcsRUFBRSxDQUFDO0lBRTNCLElBQUksYUFBYTtRQUNmLE9BQU8sRUFBRSxDQUNQLG1CQUFtQjtRQUNuQixnRkFBZ0Y7UUFDaEYsSUFBSSxDQUFDLE9BQU8sS0FBSyxTQUFTLElBQUksc0ZBQXNGO1FBRXBILDZCQUE2QjtRQUM3QixJQUFJLENBQUMsT0FBTyxLQUFLLFdBQVcsSUFBSSw4REFBOEQ7UUFFOUYsOENBQThDO1FBQzlDLElBQUksQ0FBQyxPQUFPLEtBQUssT0FBTyxJQUFJLGtDQUFrQztRQUU5RCxvQkFBb0I7UUFDcEIsSUFBSSxDQUFDLE9BQU8sS0FBSyxTQUFTLElBQUksaUdBQWlHLENBQ2hJLENBQUM7SUFDSixDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQUksT0FB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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FrTVQ7OEJBUVEsS0FBSztzQkFBYixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQVNHLE9BQU87c0JBQWYsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFJvdXRlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBjbiB9IGZyb20gJy4vdXRpbHMvY24nO1xuXG4vLyAtLS0gSW50ZXJmYWNlcyAtLS1cbmV4cG9ydCB0eXBlIFNpZGViYXJJdGVtID0ge1xuICB0aXRsZTogc3RyaW5nO1xuICB1cmw/OiBzdHJpbmc7XG4gIGljb24/OiBzdHJpbmc7XG4gIGlzQWN0aXZlPzogYm9vbGVhbjtcbiAgaXRlbXM/OiBTaWRlYmFySXRlbVtdO1xuICBpZD86IHN0cmluZztcbiAgZXhwYW5kZWQ/OiBib29sZWFuO1xuICAvKiogUmVuZGVyIGFzIGEgcGxhaW4gYW5jaG9yIHRvIGFuIGV4dGVybmFsIFVSTCAvIHN0YXRpYyBmaWxlIChvcGVucyBpbiBhIG5ldyB0YWIpIGluc3RlYWQgb2YgYSByb3V0ZXIgbGluay4gKi9cbiAgZXh0ZXJuYWw/OiBib29sZWFuO1xufVxuXG5leHBvcnQgdHlwZSBTaWRlYmFyR3JvdXAgPSB7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIGl0ZW1zOiBTaWRlYmFySXRlbVtdO1xuICBpZD86IHN0cmluZztcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndG9sbGUtc2lkZWJhcicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIFJvdXRlck1vZHVsZV0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGFzaWRlIFtjbGFzc109XCJjbihcbiAgICAgICdmbGV4IGZsZXgtY29sIGgtZnVsbCBiZy1iYWNrZ3JvdW5kIHRyYW5zaXRpb24tW3dpZHRoXSBkdXJhdGlvbi0zMDAgZWFzZS1pbi1vdXQgc2hyaW5rLTAgb3ZlcmZsb3ctaGlkZGVuJyxcbiAgICAgIGNvbGxhcHNlZCA/ICd3LTE2JyA6ICd3LTY0JyxcbiAgICAgIGNsYXNzXG4gICAgKVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImZsZXggaC0xNCBzaHJpbmstMCBpdGVtcy1jZW50ZXIgcHgtMyBvdmVyZmxvdy1oaWRkZW4gd2hpdGVzcGFjZS1ub3dyYXBcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2hlYWRlcl1cIj48L25nLWNvbnRlbnQ+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cImZsZXgtMSBtaW4taC0wIG92ZXJmbG93LXktYXV0byBvdmVyZmxvdy14LWhpZGRlbiBweS00IHB4LTNcIj5cblxuICAgICAgICBAZm9yIChncm91cCBvZiBpdGVtczsgdHJhY2sgZ3JvdXAuaWQgfHwgZ3JvdXAudGl0bGUgfHwgJGluZGV4OyBsZXQgZ0luZGV4ID0gJGluZGV4KSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTZcIj5cblxuICAgICAgICAgICAgPGRpdiBbY2xhc3NdPVwiY24oXG4gICAgICAgICAgICAgICdtYi0yIHB4LTIgdGV4dC14cyBmb250LXNlbWlib2xkIHVwcGVyY2FzZSB0cmFja2luZy13aWRlciB0ZXh0LW11dGVkLWZvcmVncm91bmQvNzAgdHJhbnNpdGlvbi1hbGwgZHVyYXRpb24tMjAwIG92ZXJmbG93LWhpZGRlbicsXG4gICAgICAgICAgICAgIGNvbGxhcHNlZCA/ICdvcGFjaXR5LTAgaC0wIG1iLTAgcHgtMCcgOiAnb3BhY2l0eS0xMDAgaC1hdXRvJ1xuICAgICAgICAgICAgKVwiPlxuICAgICAgICAgICAgICB7eyBncm91cC50aXRsZSB9fVxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC0xXCI+XG4gICAgICAgICAgICAgIEBmb3IgKGl0ZW0gb2YgZ3JvdXAuaXRlbXM7IHRyYWNrIGl0ZW0uaWQgfHwgaXRlbS50aXRsZSB8fCAkaW5kZXg7IGxldCBpID0gJGluZGV4KSB7XG5cbiAgICAgICAgICAgICAgICBAaWYgKGl0ZW0uaXRlbXMgJiYgaXRlbS5pdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgIDwhLS0gUGFyZW50IEl0ZW0gKEdyb3VwKSAtLT5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZWxhdGl2ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVBhcmVudChncm91cCwgaXRlbSwgZ0luZGV4LCBpKVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImNvbGxhcHNlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJpc1BhcmVudEV4cGFuZGVkKGdyb3VwLCBpdGVtLCBnSW5kZXgsIGkpXCJcbiAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiY24oXG4gICAgICAgICAgICAgICAgICAgICAgICAnZ3JvdXAgdy1mdWxsIHJlbGF0aXZlIGZsZXggaXRlbXMtY2VudGVyIHJvdW5kZWQtbWQgcHgtMyBweS0yIHRleHQtc20gZm9udC1tZWRpdW0gdHJhbnNpdGlvbi1jb2xvcnMgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLW5vbmUgZm9jdXMtdmlzaWJsZTpyaW5nLTIgZm9jdXMtdmlzaWJsZTpyaW5nLXJpbmcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2hvdmVyOmJnLWFjY2VudCBob3Zlcjp0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzUGFyZW50RXhwYW5kZWQoZ3JvdXAsIGl0ZW0sIGdJbmRleCwgaSkgPyAndGV4dC1mb3JlZ3JvdW5kIGJnLWFjY2VudC81MCcgOiAndGV4dC1tdXRlZC1mb3JlZ3JvdW5kJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxhcHNlZCA/ICdqdXN0aWZ5LWNlbnRlcicgOiAnanVzdGlmeS1zdGFydCdcbiAgICAgICAgICAgICAgICAgICAgICApXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxpIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIFtjbGFzc109XCJjbihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5pY29uIHx8ICdyaS1jaXJjbGUtZmlsbCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdoLTQgdy00IHRleHQtbGcgc2hyaW5rLTAgdHJhbnNpdGlvbi10cmFuc2Zvcm0nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAhY29sbGFwc2VkICYmICdncm91cC1ob3ZlcjpzY2FsZS0xMTAnXG4gICAgICAgICAgICAgICAgICAgICAgICApXCI+PC9pPlxuXG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW2NsYXNzXT1cImNuKFxuICAgICAgICAgICAgICAgICAgICAgICAgJ3RydW5jYXRlIHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTMwMCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xsYXBzZWQgPyAnb3BhY2l0eS0wIHctMCBtbC0wJyA6ICdvcGFjaXR5LTEwMCB3LWF1dG8gbWwtMydcbiAgICAgICAgICAgICAgICAgICAgICApXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLnRpdGxlIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgICAgQGlmICghY29sbGFwc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBbY2xhc3NdPVwiY24oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdyaS1hcnJvdy1kb3duLXMtbGluZSBtbC1hdXRvIHRyYW5zaXRpb24tdHJhbnNmb3JtIGR1cmF0aW9uLTMwMCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlzUGFyZW50RXhwYW5kZWQoZ3JvdXAsIGl0ZW0sIGdJbmRleCwgaSkgPyAncm90YXRlLTE4MCcgOiAnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgKVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gU3VibWVudSBHcmlkIFRyYW5zaXRpb24gLS0+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgW2NsYXNzXT1cImNuKFxuICAgICAgICAgICAgICAgICAgICAgICdncmlkIHRyYW5zaXRpb24tW2dyaWQtdGVtcGxhdGUtcm93c10gZHVyYXRpb24tMzAwIGVhc2UtaW4tb3V0JyxcbiAgICAgICAgICAgICAgICAgICAgICBpc1BhcmVudEV4cGFuZGVkKGdyb3VwLCBpdGVtLCBnSW5kZXgsIGkpICYmICFjb2xsYXBzZWQgPyAnZ3JpZC1yb3dzLVsxZnJdIG9wYWNpdHktMTAwJyA6ICdncmlkLXJvd3MtWzBmcl0gb3BhY2l0eS0wJ1xuICAgICAgICAgICAgICAgICAgICApXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm92ZXJmbG93LWhpZGRlblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLTEgbXQtMSBtbC00IGJvcmRlci1sIGJvcmRlci1ib3JkZXIvNTAgcGwtMlwiPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKHN1Ykl0ZW0gb2YgaXRlbS5pdGVtczsgdHJhY2sgc3ViSXRlbS5pZCB8fCBzdWJJdGVtLnRpdGxlIHx8ICRpbmRleDsgbGV0IGogPSAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKHN1Ykl0ZW0uaXRlbXMgJiYgc3ViSXRlbS5pdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gR3JhbmRjaGlsZCBJdGVtIEdyb3VwIChSZWN1cnNpdmUtaXNoIGxvZ2ljIGZvciBkZXB0aCAyKSAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZWxhdGl2ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUNoaWxkKGdyb3VwLCBpdGVtLCBzdWJJdGVtLCBnSW5kZXgsIGksIGopOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwiaXNDaGlsZEV4cGFuZGVkKGdyb3VwLCBpdGVtLCBzdWJJdGVtLCBnSW5kZXgsIGksIGopXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiY24oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZ3JvdXAgdy1mdWxsIHJlbGF0aXZlIGZsZXggaXRlbXMtY2VudGVyIHJvdW5kZWQtbWQgcHgtMyBweS0xLjUgdGV4dC1zbSBmb250LW1lZGl1bSB0cmFuc2l0aW9uLWNvbG9ycyBmb2N1cy12aXNpYmxlOm91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOnJpbmctMiBmb2N1cy12aXNpYmxlOnJpbmctcmluZycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaG92ZXI6YmctYWNjZW50IGhvdmVyOnRleHQtYWNjZW50LWZvcmVncm91bmQgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzQ2hpbGRFeHBhbmRlZChncm91cCwgaXRlbSwgc3ViSXRlbSwgZ0luZGV4LCBpLCBqKSA/ICd0ZXh0LWZvcmVncm91bmQgYmctYWNjZW50LzMwJyA6ICcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInctMS41IGgtMS41IHJvdW5kZWQtZnVsbCBiZy1ib3JkZXIgc2hyaW5rLTBcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtbC0yIHRydW5jYXRlXCI+e3sgc3ViSXRlbS50aXRsZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBbY2xhc3NdPVwiY24oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncmktYXJyb3ctcmlnaHQtcy1saW5lIG1sLWF1dG8gdHJhbnNpdGlvbi10cmFuc2Zvcm0gZHVyYXRpb24tMzAwIHRleHQteHMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNDaGlsZEV4cGFuZGVkKGdyb3VwLCBpdGVtLCBzdWJJdGVtLCBnSW5kZXgsIGksIGopID8gJ3JvdGF0ZS05MCcgOiAnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW2NsYXNzXT1cImNuKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdncmlkIHRyYW5zaXRpb24tW2dyaWQtdGVtcGxhdGUtcm93c10gZHVyYXRpb24tMzAwIGVhc2UtaW4tb3V0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0NoaWxkRXhwYW5kZWQoZ3JvdXAsIGl0ZW0sIHN1Ykl0ZW0sIGdJbmRleCwgaSwgaikgPyAnZ3JpZC1yb3dzLVsxZnJdIG9wYWNpdHktMTAwJyA6ICdncmlkLXJvd3MtWzBmcl0gb3BhY2l0eS0wJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm92ZXJmbG93LWhpZGRlblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLTEgbXQtMSBtbC00IGJvcmRlci1sIGJvcmRlci1ib3JkZXIvMzAgcGwtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChncmFuZENoaWxkIG9mIHN1Ykl0ZW0uaXRlbXM7IHRyYWNrIGdyYW5kQ2hpbGQudGl0bGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwiZ3JhbmRDaGlsZC51cmxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JvdXRlckxpbmtBY3RpdmVdPVwiYWN0aXZlQ2xhc3Nlc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcm91dGVyTGlua0FjdGl2ZU9wdGlvbnNdPVwieyBleGFjdDogdHJ1ZSB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgaG92ZXI6bm8tdW5kZXJsaW5lIHJvdW5kZWQtbWQgcHgtMyBweS0xLjUgdGV4dC1zbSB0cmFuc2l0aW9uLWNvbG9ycyBob3ZlcjpiZy1hY2NlbnQgaG92ZXI6dGV4dC1hY2NlbnQtZm9yZWdyb3VuZCB0ZXh0LW11dGVkLWZvcmVncm91bmQgd2hpdGVzcGFjZS1ub3dyYXAgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLW5vbmUgZm9jdXMtdmlzaWJsZTpyaW5nLTIgZm9jdXMtdmlzaWJsZTpyaW5nLXJpbmdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidy0xLjUgaC0xLjUgcm91bmRlZC1mdWxsIGJnLWJvcmRlci83MCBzaHJpbmstMFwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidHJ1bmNhdGVcIj57eyBncmFuZENoaWxkLnRpdGxlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gU3RhbmRhcmQgU3ViIEl0ZW0gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcm91dGVyTGlua109XCJzdWJJdGVtLnVybFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rQWN0aXZlXT1cImFjdGl2ZUNsYXNzZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcm91dGVyTGlua0FjdGl2ZU9wdGlvbnNdPVwieyBleGFjdDogdHJ1ZSB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiBob3Zlcjpuby11bmRlcmxpbmUgcm91bmRlZC1tZCBweC0zIHB5LTEuNSB0ZXh0LXNtIHRyYW5zaXRpb24tY29sb3JzIGhvdmVyOmJnLWFjY2VudCBob3Zlcjp0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kIHRleHQtbXV0ZWQtZm9yZWdyb3VuZCB3aGl0ZXNwYWNlLW5vd3JhcCBmb2N1cy12aXNpYmxlOm91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOnJpbmctMiBmb2N1cy12aXNpYmxlOnJpbmctcmluZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidy0xLjUgaC0xLjUgcm91bmRlZC1mdWxsIGJnLWJvcmRlciBzaHJpbmstMFwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0cnVuY2F0ZVwiPnt7IHN1Ykl0ZW0udGl0bGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgQGVsc2UgaWYgKGl0ZW0uZXh0ZXJuYWwpIHtcbiAgICAgICAgICAgICAgICAgIDwhLS0gRXh0ZXJuYWwgLyBzdGF0aWMtZmlsZSBJdGVtIChvcGVucyBpbiBhIG5ldyB0YWIpIC0tPlxuICAgICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICAgW2hyZWZdPVwiaXRlbS51cmxcIlxuICAgICAgICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgICAgICAgICAgICByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImNuKFxuICAgICAgICAgICAgICAgICAgICAgICdncm91cCByZWxhdGl2ZSBob3Zlcjpuby11bmRlcmxpbmUgZmxleCBpdGVtcy1jZW50ZXIgcm91bmRlZC1tZCBweC0zIHB5LTIgdGV4dC1zbSBmb250LW1lZGl1bSB0cmFuc2l0aW9uLWNvbG9ycyBmb2N1cy12aXNpYmxlOm91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOnJpbmctMiBmb2N1cy12aXNpYmxlOnJpbmctcmluZycsXG4gICAgICAgICAgICAgICAgICAgICAgJ2hvdmVyOmJnLWFjY2VudCBob3Zlcjp0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kIHRleHQtbXV0ZWQtZm9yZWdyb3VuZCcsXG4gICAgICAgICAgICAgICAgICAgICAgY29sbGFwc2VkID8gJ2p1c3RpZnktY2VudGVyJyA6ICdqdXN0aWZ5LXN0YXJ0J1xuICAgICAgICAgICAgICAgICAgICApXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGkgYXJpYS1oaWRkZW49XCJ0cnVlXCIgW2NsYXNzXT1cImNuKFxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5pY29uIHx8ICdyaS1jaXJjbGUtZmlsbCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAnaC00IHctNCB0ZXh0LWxnIHNocmluay0wIHRyYW5zaXRpb24tdHJhbnNmb3JtJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICFjb2xsYXBzZWQgJiYgJ2dyb3VwLWhvdmVyOnNjYWxlLTExMCdcbiAgICAgICAgICAgICAgICAgICAgICApXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBbY2xhc3NdPVwiY24oXG4gICAgICAgICAgICAgICAgICAgICAgJ3RydW5jYXRlIHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTMwMCcsXG4gICAgICAgICAgICAgICAgICAgICAgY29sbGFwc2VkID8gJ29wYWNpdHktMCB3LTAgbWwtMCcgOiAnb3BhY2l0eS0xMDAgdy1hdXRvIG1sLTMnXG4gICAgICAgICAgICAgICAgICAgIClcIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLnRpdGxlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgQGlmICghY29sbGFwc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgPGkgYXJpYS1oaWRkZW49XCJ0cnVlXCIgY2xhc3M9XCJyaS1leHRlcm5hbC1saW5rLWxpbmUgbWwtYXV0byB0ZXh0LXhzIG9wYWNpdHktNTAgdHJhbnNpdGlvbi1vcGFjaXR5IGdyb3VwLWhvdmVyOm9wYWNpdHktMTAwXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIDwhLS0gU3RhbmRhcmQgVG9wLUxldmVsIEl0ZW0gLS0+XG4gICAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgICBbcm91dGVyTGlua109XCJpdGVtLnVybFwiXG4gICAgICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rQWN0aXZlXT1cImFjdGl2ZUNsYXNzZXNcIlxuICAgICAgICAgICAgICAgICAgICBbcm91dGVyTGlua0FjdGl2ZU9wdGlvbnNdPVwieyBleGFjdDogdHJ1ZSB9XCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImNuKFxuICAgICAgICAgICAgICAgICAgICAgICdncm91cCByZWxhdGl2ZSBob3Zlcjpuby11bmRlcmxpbmUgZmxleCBpdGVtcy1jZW50ZXIgcm91bmRlZC1tZCBweC0zIHB5LTIgdGV4dC1zbSBmb250LW1lZGl1bSB0cmFuc2l0aW9uLWNvbG9ycyBmb2N1cy12aXNpYmxlOm91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOnJpbmctMiBmb2N1cy12aXNpYmxlOnJpbmctcmluZycsXG4gICAgICAgICAgICAgICAgICAgICAgJ2hvdmVyOmJnLWFjY2VudCBob3Zlcjp0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kIHRleHQtbXV0ZWQtZm9yZWdyb3VuZCcsXG4gICAgICAgICAgICAgICAgICAgICAgY29sbGFwc2VkID8gJ2p1c3RpZnktY2VudGVyJyA6ICdqdXN0aWZ5LXN0YXJ0J1xuICAgICAgICAgICAgICAgICAgICApXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGkgYXJpYS1oaWRkZW49XCJ0cnVlXCIgW2NsYXNzXT1cImNuKFxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS5pY29uIHx8ICdyaS1jaXJjbGUtZmlsbCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAnaC00IHctNCB0ZXh0LWxnIHNocmluay0wIHRyYW5zaXRpb24tdHJhbnNmb3JtJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICFjb2xsYXBzZWQgJiYgJ2dyb3VwLWhvdmVyOnNjYWxlLTExMCdcbiAgICAgICAgICAgICAgICAgICAgICApXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBbY2xhc3NdPVwiY24oXG4gICAgICAgICAgICAgICAgICAgICAgJ3RydW5jYXRlIHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTMwMCcsXG4gICAgICAgICAgICAgICAgICAgICAgY29sbGFwc2VkID8gJ29wYWNpdHktMCB3LTAgbWwtMCcgOiAnb3BhY2l0eS0xMDAgdy1hdXRvIG1sLTMnXG4gICAgICAgICAgICAgICAgICAgIClcIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLnRpdGxlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cInNocmluay0wIHAtMyBvdmVyZmxvdy1oaWRkZW4gd2hpdGVzcGFjZS1ub3dyYXBcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2Zvb3Rlcl1cIj48L25nLWNvbnRlbnQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2FzaWRlPlxuICBgLFxuICBzdHlsZXM6IFtgXG4gICAgOmhvc3QgeyBkaXNwbGF5OiBibG9jazsgaGVpZ2h0OiAxMDAlOyB9XG4gICAgYnV0dG9uOmRpc2FibGVkIHsgY3Vyc29yOiBub3QtYWxsb3dlZDsgb3BhY2l0eTogMC42OyB9XG4gICAgKiB7IHRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOiBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpOyB9XG4gIGBdXG59KVxuZXhwb3J0IGNsYXNzIFNpZGViYXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xuICBASW5wdXQoKSBpdGVtczogU2lkZWJhckdyb3VwW10gPSBbXTtcbiAgQElucHV0KCkgY29sbGFwc2VkID0gZmFsc2U7XG4gIEBJbnB1dCgpIGNsYXNzID0gJyc7XG5cbiAgLyoqXG4gICAqIFN0eWxpbmcgdmFyaWFudCBmb3IgYWN0aXZlIGl0ZW1zLlxuICAgKiAtIGRlZmF1bHQ6IFNvbGlkIHByaW1hcnkgYmFja2dyb3VuZCwgbGlnaHQgdGV4dCAoTWF0Y2hlcyBCYWRnZSBEZWZhdWx0KVxuICAgKiAtIHNlY29uZGFyeTogU29saWQgc2Vjb25kYXJ5IGJhY2tncm91bmRcbiAgICogLSBnaG9zdDogVHJhbnNwYXJlbnQgYmFja2dyb3VuZCwgYWNjZW50IHRleHQgKFNoYWRjbiBzdGFuZGFyZClcbiAgICogLSBvdXRsaW5lOiBCb3JkZXJlZFxuICAgKi9cbiAgQElucHV0KCkgdmFyaWFudDogJ2RlZmF1bHQnIHwgJ3NlY29uZGFyeScgfCAnZ2hvc3QnIHwgJ291dGxpbmUnID0gJ2RlZmF1bHQnO1xuXG4gIGV4cGFuZGVkUGFyZW50cyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBleHBhbmRlZENoaWxkcmVuID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGNuID0gY247XG5cbiAgZ2V0IGFjdGl2ZUNsYXNzZXMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gY24oXG4gICAgICAndHJhbnNpdGlvbi1jb2xvcnMnLFxuICAgICAgLy8gRGVmYXVsdDogU29saWQgUHJpbWFyeSAoQmFkZ2UtbGlrZSkgd2l0aCBsaWdodGVyIG9wYWNpdHkgKDgwJSBpbnN0ZWFkIG9mIDkwJSlcbiAgICAgIHRoaXMudmFyaWFudCA9PT0gJ2RlZmF1bHQnICYmICdiZy1wcmltYXJ5LzgwIHRleHQtcHJpbWFyeS1mb3JlZ3JvdW5kIGhvdmVyOmJnLXByaW1hcnkgaG92ZXI6dGV4dC1wcmltYXJ5LWZvcmVncm91bmQnLFxuXG4gICAgICAvLyBTZWNvbmRhcnk6IFNvbGlkIFNlY29uZGFyeVxuICAgICAgdGhpcy52YXJpYW50ID09PSAnc2Vjb25kYXJ5JyAmJiAnYmctc2Vjb25kYXJ5IHRleHQtc2Vjb25kYXJ5LWZvcmVncm91bmQgaG92ZXI6Ymctc2Vjb25kYXJ5LzgwJyxcblxuICAgICAgLy8gR2hvc3Q6IFN1YnRsZSBiYWNrZ3JvdW5kIChTaWRlYmFyIHN0YW5kYXJkKVxuICAgICAgdGhpcy52YXJpYW50ID09PSAnZ2hvc3QnICYmICdiZy1hY2NlbnQgdGV4dC1hY2NlbnQtZm9yZWdyb3VuZCcsXG5cbiAgICAgIC8vIE91dGxpbmU6IEJvcmRlcmVkXG4gICAgICB0aGlzLnZhcmlhbnQgPT09ICdvdXRsaW5lJyAmJiAnYm9yZGVyIGJvcmRlci1ib3JkZXIgYmctYmFja2dyb3VuZCB0ZXh0LWZvcmVncm91bmQgaG92ZXI6YmctYWNjZW50IGhvdmVyOnRleHQtYWNjZW50LWZvcmVncm91bmQnXG4gICAgKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoY2hhbmdlc1snY29sbGFwc2VkJ10gJiYgdGhpcy5jb2xsYXBzZWQpIHtcbiAgICAgIHRoaXMuY29sbGFwc2VBbGwoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXNbJ2l0ZW1zJ10pIHtcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZVN0YXRlKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gLS0tIFNUQVRFIElOSVQgLS0tXG4gIHByaXZhdGUgaW5pdGlhbGl6ZVN0YXRlKCkge1xuICAgIHRoaXMuY29sbGFwc2VBbGwoKTtcbiAgICBpZiAoIXRoaXMuaXRlbXMpIHJldHVybjtcblxuICAgIHRoaXMuaXRlbXMuZm9yRWFjaCgoZ3JvdXAsIGdJbmRleCkgPT4ge1xuICAgICAgZ3JvdXAuaXRlbXMuZm9yRWFjaCgoaXRlbSwgaUluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IHBhcmVudElkID0gdGhpcy5nZXRQYXJlbnRJZChncm91cCwgaXRlbSwgZ0luZGV4LCBpSW5kZXgpO1xuXG4gICAgICAgIGlmIChpdGVtLmV4cGFuZGVkKSB7XG4gICAgICAgICAgdGhpcy5leHBhbmRlZFBhcmVudHMuYWRkKHBhcmVudElkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpdGVtLml0ZW1zKSB7XG4gICAgICAgICAgaXRlbS5pdGVtcy5mb3JFYWNoKChzdWJJdGVtLCBzSW5kZXgpID0+IHtcbiAgICAgICAgICAgIGlmIChzdWJJdGVtLmV4cGFuZGVkKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGNoaWxkSWQgPSB0aGlzLmdldENoaWxkSWQoZ3JvdXAsIGl0ZW0sIHN1Ykl0ZW0sIGdJbmRleCwgaUluZGV4LCBzSW5kZXgpO1xuICAgICAgICAgICAgICB0aGlzLmV4cGFuZGVkQ2hpbGRyZW4uYWRkKGNoaWxkSWQpO1xuICAgICAgICAgICAgICB0aGlzLmV4cGFuZGVkUGFyZW50cy5hZGQocGFyZW50SWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIC0tLSBJRCBHRU5FUkFUT1JTIC0tLVxuICBnZXRHcm91cElkKGdyb3VwOiBTaWRlYmFyR3JvdXAsIGluZGV4OiBudW1iZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiBncm91cC5pZCB8fCBncm91cC50aXRsZSB8fCBgZy0ke2luZGV4fWA7XG4gIH1cblxuICBnZXRQYXJlbnRJZChncm91cDogU2lkZWJhckdyb3VwLCBpdGVtOiBTaWRlYmFySXRlbSwgZ0luZGV4OiBudW1iZXIsIGlJbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBjb25zdCBncm91cElkID0gdGhpcy5nZXRHcm91cElkKGdyb3VwLCBnSW5kZXgpO1xuICAgIGNvbnN0IGl0ZW1JZCA9IGl0ZW0uaWQgfHwgaXRlbS50aXRsZSB8fCBgcC0ke2lJbmRleH1gO1xuICAgIHJldHVybiBgJHtncm91cElkfV9fJHtpdGVtSWR9YDtcbiAgfVxuXG4gIGdldENoaWxkSWQoZ3JvdXA6IFNpZGViYXJHcm91cCwgcGFyZW50OiBTaWRlYmFySXRlbSwgc3ViSXRlbTogU2lkZWJhckl0ZW0sIGdJbmRleDogbnVtYmVyLCBpSW5kZXg6IG51bWJlciwgc0luZGV4OiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGNvbnN0IHBhcmVudElkID0gdGhpcy5nZXRQYXJlbnRJZChncm91cCwgcGFyZW50LCBnSW5kZXgsIGlJbmRleCk7XG4gICAgY29uc3Qgc3ViSXRlbUlkID0gc3ViSXRlbS5pZCB8fCBzdWJJdGVtLnRpdGxlIHx8IGBjLSR7c0luZGV4fWA7XG4gICAgcmV0dXJuIGAke3BhcmVudElkfV9fJHtzdWJJdGVtSWR9YDtcbiAgfVxuXG4gIC8vIC0tLSBBQ1RJT05TIC0tLVxuICB0b2dnbGVQYXJlbnQoZ3JvdXA6IFNpZGViYXJHcm91cCwgaXRlbTogU2lkZWJhckl0ZW0sIGdJbmRleDogbnVtYmVyLCBpSW5kZXg6IG51bWJlcikge1xuICAgIGlmICh0aGlzLmNvbGxhcHNlZCkgcmV0dXJuO1xuICAgIGNvbnN0IGlkID0gdGhpcy5nZXRQYXJlbnRJZChncm91cCwgaXRlbSwgZ0luZGV4LCBpSW5kZXgpO1xuXG4gICAgY29uc3QgbmV3U2V0ID0gbmV3IFNldCh0aGlzLmV4cGFuZGVkUGFyZW50cyk7XG4gICAgaWYgKG5ld1NldC5oYXMoaWQpKSB7XG4gICAgICBuZXdTZXQuZGVsZXRlKGlkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3U2V0LmFkZChpZCk7XG4gICAgfVxuICAgIHRoaXMuZXhwYW5kZWRQYXJlbnRzID0gbmV3U2V0O1xuICB9XG5cbiAgdG9nZ2xlQ2hpbGQoZ3JvdXA6IFNpZGViYXJHcm91cCwgcGFyZW50OiBTaWRlYmFySXRlbSwgc3ViSXRlbTogU2lkZWJhckl0ZW0sIGdJbmRleDogbnVtYmVyLCBpSW5kZXg6IG51bWJlciwgc0luZGV4OiBudW1iZXIpIHtcbiAgICBjb25zdCBpZCA9IHRoaXMuZ2V0Q2hpbGRJZChncm91cCwgcGFyZW50LCBzdWJJdGVtLCBnSW5kZXgsIGlJbmRleCwgc0luZGV4KTtcblxuICAgIGNvbnN0IG5ld1NldCA9IG5ldyBTZXQodGhpcy5leHBhbmRlZENoaWxkcmVuKTtcbiAgICBpZiAobmV3U2V0LmhhcyhpZCkpIHtcbiAgICAgIG5ld1NldC5kZWxldGUoaWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXdTZXQuYWRkKGlkKTtcbiAgICB9XG4gICAgdGhpcy5leHBhbmRlZENoaWxkcmVuID0gbmV3U2V0O1xuICB9XG5cbiAgcHJpdmF0ZSBjb2xsYXBzZUFsbCgpIHtcbiAgICB0aGlzLmV4cGFuZGVkUGFyZW50cyA9IG5ldyBTZXQoKTtcbiAgICB0aGlzLmV4cGFuZGVkQ2hpbGRyZW4gPSBuZXcgU2V0KCk7XG4gIH1cblxuICAvLyAtLS0gVEVNUExBVEUgSEVMUEVSUyAtLS1cbiAgaXNQYXJlbnRFeHBhbmRlZChncm91cDogU2lkZWJhckdyb3VwLCBpdGVtOiBTaWRlYmFySXRlbSwgZ0luZGV4OiBudW1iZXIsIGlJbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZXhwYW5kZWRQYXJlbnRzLmhhcyh0aGlzLmdldFBhcmVudElkKGdyb3VwLCBpdGVtLCBnSW5kZXgsIGlJbmRleCkpO1xuICB9XG5cbiAgaXNDaGlsZEV4cGFuZGVkKGdyb3VwOiBTaWRlYmFyR3JvdXAsIHBhcmVudDogU2lkZWJhckl0ZW0sIHN1Ykl0ZW06IFNpZGViYXJJdGVtLCBnSW5kZXg6IG51bWJlciwgaUluZGV4OiBudW1iZXIsIHNJbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZXhwYW5kZWRDaGlsZHJlbi5oYXModGhpcy5nZXRDaGlsZElkKGdyb3VwLCBwYXJlbnQsIHN1Ykl0ZW0sIGdJbmRleCwgaUluZGV4LCBzSW5kZXgpKTtcbiAgfVxufVxuIl19
@@ -1,15 +1,29 @@
1
1
  import { Component, Input } from '@angular/core';
2
2
  import { CommonModule } from '@angular/common';
3
+ import { cva } from 'class-variance-authority';
3
4
  import { cn } from './utils/cn';
4
5
  import * as i0 from "@angular/core";
6
+ const skeletonVariants = cva(
7
+ // The background matches the Google Dark Mode "Muted" color
8
+ 'animate-pulse bg-muted dark:bg-secondary rounded-md', {
9
+ variants: {
10
+ variant: {
11
+ rect: '',
12
+ circle: 'rounded-full',
13
+ pill: 'rounded-full',
14
+ },
15
+ },
16
+ defaultVariants: {
17
+ variant: 'rect',
18
+ },
19
+ });
5
20
  export class SkeletonComponent {
21
+ /** Shape of the skeleton placeholder. @default 'rect' */
6
22
  variant = 'rect';
23
+ /** Extra Tailwind classes merged onto the skeleton via `cn()` (last-wins). */
7
24
  class = '';
8
- cn = cn;
9
25
  get computedClass() {
10
- return cn(
11
- // The background matches the Google Dark Mode "Muted" color
12
- 'animate-pulse bg-muted dark:bg-secondary rounded-md', this.variant === 'circle' && 'rounded-full', this.variant === 'pill' && 'rounded-full', this.class);
26
+ return cn(skeletonVariants({ variant: this.variant }), this.class);
13
27
  }
14
28
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SkeletonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
15
29
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: SkeletonComponent, isStandalone: true, selector: "tolle-skeleton", inputs: { variant: "variant", class: "class" }, ngImport: i0, template: `
@@ -31,4 +45,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
31
45
  }], class: [{
32
46
  type: Input
33
47
  }] } });
34
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2tlbGV0b24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdG9sbGUvc3JjL2xpYi9za2VsZXRvbi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxZQUFZLENBQUM7O0FBVWhDLE1BQU0sT0FBTyxpQkFBaUI7SUFDbkIsT0FBTyxHQUErQixNQUFNLENBQUM7SUFDN0MsS0FBSyxHQUFHLEVBQUUsQ0FBQztJQUVELEVBQUUsR0FBRyxFQUFFLENBQUM7SUFFM0IsSUFBSSxhQUFhO1FBQ2YsT0FBTyxFQUFFO1FBQ1AsNERBQTREO1FBQzVELHFEQUFxRCxFQUVyRCxJQUFJLENBQUMsT0FBTyxLQUFLLFFBQVEsSUFBSSxjQUFjLEVBQzNDLElBQUksQ0FBQyxPQUFPLEtBQUssTUFBTSxJQUFJLGNBQWMsRUFFekMsSUFBSSxDQUFDLEtBQUssQ0FDWCxDQUFDO0lBQ0osQ0FBQzt3R0FoQlUsaUJBQWlCOzRGQUFqQixpQkFBaUIsMEhBSmxCOztHQUVULDJEQUhTLFlBQVk7OzRGQUtYLGlCQUFpQjtrQkFSN0IsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsZ0JBQWdCO29CQUMxQixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDO29CQUN2QixRQUFRLEVBQUU7O0dBRVQ7aUJBQ0Y7OEJBRVUsT0FBTztzQkFBZixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBjbiB9IGZyb20gJy4vdXRpbHMvY24nO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0b2xsZS1za2VsZXRvbicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgW2NsYXNzXT1cImNvbXB1dGVkQ2xhc3NcIj48L2Rpdj5cbiAgYCxcbn0pXG5leHBvcnQgY2xhc3MgU2tlbGV0b25Db21wb25lbnQge1xuICBASW5wdXQoKSB2YXJpYW50OiAncmVjdCcgfCAnY2lyY2xlJyB8ICdwaWxsJyA9ICdyZWN0JztcbiAgQElucHV0KCkgY2xhc3MgPSAnJztcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgY24gPSBjbjtcblxuICBnZXQgY29tcHV0ZWRDbGFzcygpIHtcbiAgICByZXR1cm4gY24oXG4gICAgICAvLyBUaGUgYmFja2dyb3VuZCBtYXRjaGVzIHRoZSBHb29nbGUgRGFyayBNb2RlIFwiTXV0ZWRcIiBjb2xvclxuICAgICAgJ2FuaW1hdGUtcHVsc2UgYmctbXV0ZWQgZGFyazpiZy1zZWNvbmRhcnkgcm91bmRlZC1tZCcsXG5cbiAgICAgIHRoaXMudmFyaWFudCA9PT0gJ2NpcmNsZScgJiYgJ3JvdW5kZWQtZnVsbCcsXG4gICAgICB0aGlzLnZhcmlhbnQgPT09ICdwaWxsJyAmJiAncm91bmRlZC1mdWxsJyxcblxuICAgICAgdGhpcy5jbGFzc1xuICAgICk7XG4gIH1cbn1cbiJdfQ==
48
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2tlbGV0b24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdG9sbGUvc3JjL2xpYi9za2VsZXRvbi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxHQUFHLEVBQXFCLE1BQU0sMEJBQTBCLENBQUM7QUFDbEUsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLFlBQVksQ0FBQzs7QUFFaEMsTUFBTSxnQkFBZ0IsR0FBRyxHQUFHO0FBQzFCLDREQUE0RDtBQUM1RCxxREFBcUQsRUFDckQ7SUFDRSxRQUFRLEVBQUU7UUFDUixPQUFPLEVBQUU7WUFDUCxJQUFJLEVBQUUsRUFBRTtZQUNSLE1BQU0sRUFBRSxjQUFjO1lBQ3RCLElBQUksRUFBRSxjQUFjO1NBQ3JCO0tBQ0Y7SUFDRCxlQUFlLEVBQUU7UUFDZixPQUFPLEVBQUUsTUFBTTtLQUNoQjtDQUNGLENBQ0YsQ0FBQztBQVlGLE1BQU0sT0FBTyxpQkFBaUI7SUFDNUIseURBQXlEO0lBQ2hELE9BQU8sR0FBNkIsTUFBTSxDQUFDO0lBQ3BELDhFQUE4RTtJQUNyRSxLQUFLLEdBQUcsRUFBRSxDQUFDO0lBRXBCLElBQUksYUFBYTtRQUNmLE9BQU8sRUFBRSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNyRSxDQUFDO3dHQVJVLGlCQUFpQjs0RkFBakIsaUJBQWlCLDBIQUpsQjs7R0FFVCwyREFIUyxZQUFZOzs0RkFLWCxpQkFBaUI7a0JBUjdCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGdCQUFnQjtvQkFDMUIsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQztvQkFDdkIsUUFBUSxFQUFFOztHQUVUO2lCQUNGOzhCQUdVLE9BQU87c0JBQWYsS0FBSztnQkFFRyxLQUFLO3NCQUFiLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgY3ZhLCB0eXBlIFZhcmlhbnRQcm9wcyB9IGZyb20gJ2NsYXNzLXZhcmlhbmNlLWF1dGhvcml0eSc7XG5pbXBvcnQgeyBjbiB9IGZyb20gJy4vdXRpbHMvY24nO1xuXG5jb25zdCBza2VsZXRvblZhcmlhbnRzID0gY3ZhKFxuICAvLyBUaGUgYmFja2dyb3VuZCBtYXRjaGVzIHRoZSBHb29nbGUgRGFyayBNb2RlIFwiTXV0ZWRcIiBjb2xvclxuICAnYW5pbWF0ZS1wdWxzZSBiZy1tdXRlZCBkYXJrOmJnLXNlY29uZGFyeSByb3VuZGVkLW1kJyxcbiAge1xuICAgIHZhcmlhbnRzOiB7XG4gICAgICB2YXJpYW50OiB7XG4gICAgICAgIHJlY3Q6ICcnLFxuICAgICAgICBjaXJjbGU6ICdyb3VuZGVkLWZ1bGwnLFxuICAgICAgICBwaWxsOiAncm91bmRlZC1mdWxsJyxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBkZWZhdWx0VmFyaWFudHM6IHtcbiAgICAgIHZhcmlhbnQ6ICdyZWN0JyxcbiAgICB9LFxuICB9XG4pO1xuXG5leHBvcnQgdHlwZSBTa2VsZXRvblByb3BzID0gVmFyaWFudFByb3BzPHR5cGVvZiBza2VsZXRvblZhcmlhbnRzPjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndG9sbGUtc2tlbGV0b24nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IFtjbGFzc109XCJjb21wdXRlZENsYXNzXCI+PC9kaXY+XG4gIGAsXG59KVxuZXhwb3J0IGNsYXNzIFNrZWxldG9uQ29tcG9uZW50IHtcbiAgLyoqIFNoYXBlIG9mIHRoZSBza2VsZXRvbiBwbGFjZWhvbGRlci4gQGRlZmF1bHQgJ3JlY3QnICovXG4gIEBJbnB1dCgpIHZhcmlhbnQ6IFNrZWxldG9uUHJvcHNbJ3ZhcmlhbnQnXSA9ICdyZWN0JztcbiAgLyoqIEV4dHJhIFRhaWx3aW5kIGNsYXNzZXMgbWVyZ2VkIG9udG8gdGhlIHNrZWxldG9uIHZpYSBgY24oKWAgKGxhc3Qtd2lucykuICovXG4gIEBJbnB1dCgpIGNsYXNzID0gJyc7XG5cbiAgZ2V0IGNvbXB1dGVkQ2xhc3MoKSB7XG4gICAgcmV0dXJuIGNuKHNrZWxldG9uVmFyaWFudHMoeyB2YXJpYW50OiB0aGlzLnZhcmlhbnQgfSksIHRoaXMuY2xhc3MpO1xuICB9XG59XG4iXX0=
@@ -1,12 +1,58 @@
1
1
  import { Component, Input, forwardRef } from '@angular/core';
2
2
  import { CommonModule } from '@angular/common';
3
3
  import { NG_VALUE_ACCESSOR } from '@angular/forms';
4
+ import { cva } from 'class-variance-authority';
4
5
  import { cn } from './utils/cn';
5
6
  import * as i0 from "@angular/core";
7
+ const switchTrackVariants = cva('peer inline-flex shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50', {
8
+ variants: {
9
+ size: {
10
+ xs: 'h-4 w-7',
11
+ sm: 'h-5 w-9',
12
+ default: 'h-6 w-11',
13
+ lg: 'h-7 w-[3.25rem]',
14
+ },
15
+ checked: {
16
+ true: 'bg-primary',
17
+ false: 'bg-input',
18
+ },
19
+ },
20
+ defaultVariants: {
21
+ size: 'default',
22
+ checked: false,
23
+ },
24
+ });
25
+ const switchThumbVariants = cva('pointer-events-none block rounded-full bg-background shadow-lg ring-0 transition-transform', {
26
+ variants: {
27
+ size: {
28
+ xs: 'h-3 w-3',
29
+ sm: 'h-4 w-4',
30
+ default: 'h-5 w-5',
31
+ lg: 'h-6 w-6',
32
+ },
33
+ checked: {
34
+ true: '',
35
+ false: 'translate-x-0',
36
+ },
37
+ },
38
+ compoundVariants: [
39
+ { size: 'xs', checked: true, class: 'translate-x-3' },
40
+ { size: 'sm', checked: true, class: 'translate-x-4' },
41
+ { size: 'default', checked: true, class: 'translate-x-5' },
42
+ { size: 'lg', checked: true, class: 'translate-x-6' },
43
+ ],
44
+ defaultVariants: {
45
+ size: 'default',
46
+ checked: false,
47
+ },
48
+ });
6
49
  export class SwitchComponent {
7
50
  cdr;
51
+ /** Extra Tailwind classes merged onto the switch track via `cn()` (last-wins). */
8
52
  class = '';
53
+ /** Disables the switch and blocks toggling. @default false */
9
54
  disabled = false;
55
+ /** Size of the switch. @default 'default' */
10
56
  size = 'default';
11
57
  checked = false;
12
58
  onChange = () => { };
@@ -14,32 +60,12 @@ export class SwitchComponent {
14
60
  constructor(cdr) {
15
61
  this.cdr = cdr;
16
62
  }
17
- get sizeClasses() {
18
- const sizes = {
19
- xs: {
20
- track: 'h-4 w-7',
21
- thumb: 'h-3 w-3',
22
- translate: 'translate-x-3'
23
- },
24
- sm: {
25
- track: 'h-5 w-9',
26
- thumb: 'h-4 w-4',
27
- translate: 'translate-x-4'
28
- },
29
- default: {
30
- track: 'h-6 w-11',
31
- thumb: 'h-5 w-5',
32
- translate: 'translate-x-5'
33
- },
34
- lg: {
35
- track: 'h-7 w-[3.25rem]',
36
- thumb: 'h-6 w-6',
37
- translate: 'translate-x-6'
38
- }
39
- };
40
- return sizes[this.size];
63
+ get trackClass() {
64
+ return cn(switchTrackVariants({ size: this.size, checked: this.checked }), this.class);
65
+ }
66
+ get thumbClass() {
67
+ return cn(switchThumbVariants({ size: this.size, checked: this.checked }));
41
68
  }
42
- cn = cn;
43
69
  toggle() {
44
70
  if (this.disabled)
45
71
  return;
@@ -54,7 +80,7 @@ export class SwitchComponent {
54
80
  }
55
81
  registerOnChange(fn) { this.onChange = fn; }
56
82
  registerOnTouched(fn) { this.onTouched = fn; }
57
- setDisabledState(isDisabled) { this.disabled = isDisabled; }
83
+ setDisabledState(isDisabled) { this.disabled = isDisabled; this.cdr.markForCheck(); }
58
84
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SwitchComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
59
85
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: SwitchComponent, isStandalone: true, selector: "tolle-switch", inputs: { class: "class", disabled: "disabled", size: "size" }, providers: [
60
86
  {
@@ -67,22 +93,12 @@ export class SwitchComponent {
67
93
  type="button"
68
94
  role="switch"
69
95
  [attr.aria-checked]="checked"
96
+ [attr.data-state]="checked ? 'checked' : 'unchecked'"
70
97
  [disabled]="disabled"
71
98
  (click)="toggle()"
72
- [class]="cn(
73
- 'peer inline-flex shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50',
74
- sizeClasses.track,
75
- checked ? 'bg-primary' : 'bg-input',
76
- class
77
- )"
99
+ [class]="trackClass"
78
100
  >
79
- <span
80
- [class]="cn(
81
- 'pointer-events-none block rounded-full bg-background shadow-lg ring-0 transition-transform',
82
- sizeClasses.thumb,
83
- checked ? sizeClasses.translate : 'translate-x-0'
84
- )"
85
- ></span>
101
+ <span [class]="thumbClass"></span>
86
102
  </button>
87
103
  `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }] });
88
104
  }
@@ -104,22 +120,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
104
120
  type="button"
105
121
  role="switch"
106
122
  [attr.aria-checked]="checked"
123
+ [attr.data-state]="checked ? 'checked' : 'unchecked'"
107
124
  [disabled]="disabled"
108
125
  (click)="toggle()"
109
- [class]="cn(
110
- 'peer inline-flex shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50',
111
- sizeClasses.track,
112
- checked ? 'bg-primary' : 'bg-input',
113
- class
114
- )"
126
+ [class]="trackClass"
115
127
  >
116
- <span
117
- [class]="cn(
118
- 'pointer-events-none block rounded-full bg-background shadow-lg ring-0 transition-transform',
119
- sizeClasses.thumb,
120
- checked ? sizeClasses.translate : 'translate-x-0'
121
- )"
122
- ></span>
128
+ <span [class]="thumbClass"></span>
123
129
  </button>
124
130
  `
125
131
  }]
@@ -130,4 +136,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
130
136
  }], size: [{
131
137
  type: Input
132
138
  }] } });
133
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3dpdGNoLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3RvbGxlL3NyYy9saWIvc3dpdGNoLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLFlBQVksQ0FBQzs7QUFxQ2hDLE1BQU0sT0FBTyxlQUFlO0lBVU47SUFUWCxLQUFLLEdBQUcsRUFBRSxDQUFDO0lBQ1gsUUFBUSxHQUFHLEtBQUssQ0FBQztJQUNqQixJQUFJLEdBQW1DLFNBQVMsQ0FBQztJQUUxRCxPQUFPLEdBQUcsS0FBSyxDQUFDO0lBRWhCLFFBQVEsR0FBUSxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUM7SUFDekIsU0FBUyxHQUFRLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQztJQUUxQixZQUFvQixHQUFzQjtRQUF0QixRQUFHLEdBQUgsR0FBRyxDQUFtQjtJQUFHLENBQUM7SUFFOUMsSUFBSSxXQUFXO1FBQ2IsTUFBTSxLQUFLLEdBQUc7WUFDWixFQUFFLEVBQUU7Z0JBQ0YsS0FBSyxFQUFFLFNBQVM7Z0JBQ2hCLEtBQUssRUFBRSxTQUFTO2dCQUNoQixTQUFTLEVBQUUsZUFBZTthQUMzQjtZQUNELEVBQUUsRUFBRTtnQkFDRixLQUFLLEVBQUUsU0FBUztnQkFDaEIsS0FBSyxFQUFFLFNBQVM7Z0JBQ2hCLFNBQVMsRUFBRSxlQUFlO2FBQzNCO1lBQ0QsT0FBTyxFQUFFO2dCQUNQLEtBQUssRUFBRSxVQUFVO2dCQUNqQixLQUFLLEVBQUUsU0FBUztnQkFDaEIsU0FBUyxFQUFFLGVBQWU7YUFDM0I7WUFDRCxFQUFFLEVBQUU7Z0JBQ0YsS0FBSyxFQUFFLGlCQUFpQjtnQkFDeEIsS0FBSyxFQUFFLFNBQVM7Z0JBQ2hCLFNBQVMsRUFBRSxlQUFlO2FBQzNCO1NBQ0YsQ0FBQztRQUNGLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBRVMsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUVsQixNQUFNO1FBQ0osSUFBSSxJQUFJLENBQUMsUUFBUTtZQUFFLE9BQU87UUFDMUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDN0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDNUIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ25CLENBQUM7SUFFRCwrQkFBK0I7SUFDL0IsVUFBVSxDQUFDLEtBQWM7UUFDdkIsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDckIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsRUFBTyxJQUFVLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN2RCxpQkFBaUIsQ0FBQyxFQUFPLElBQVUsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3pELGdCQUFnQixDQUFDLFVBQW1CLElBQVUsSUFBSSxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDO3dHQXZEaEUsZUFBZTs0RkFBZixlQUFlLDJIQS9CZjtZQUNUO2dCQUNFLE9BQU8sRUFBRSxpQkFBaUI7Z0JBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsZUFBZSxDQUFDO2dCQUM5QyxLQUFLLEVBQUUsSUFBSTthQUNaO1NBQ0YsMEJBQ1M7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQlQsMkRBOUJTLFlBQVk7OzRGQWdDWCxlQUFlO2tCQW5DM0IsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsY0FBYztvQkFDeEIsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLE9BQU8sRUFBRSxDQUFDLFlBQVksQ0FBQztvQkFDdkIsU0FBUyxFQUFFO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLGdCQUFnQixDQUFDOzRCQUM5QyxLQUFLLEVBQUUsSUFBSTt5QkFDWjtxQkFDRjtvQkFDRCxRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQlQ7aUJBQ0Y7c0ZBRVUsS0FBSztzQkFBYixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgZm9yd2FyZFJlZiwgQ2hhbmdlRGV0ZWN0b3JSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBjbiB9IGZyb20gJy4vdXRpbHMvY24nO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0b2xsZS1zd2l0Y2gnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBTd2l0Y2hDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9XG4gIF0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGJ1dHRvblxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICByb2xlPVwic3dpdGNoXCJcbiAgICAgIFthdHRyLmFyaWEtY2hlY2tlZF09XCJjaGVja2VkXCJcbiAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAoY2xpY2spPVwidG9nZ2xlKClcIlxuICAgICAgW2NsYXNzXT1cImNuKFxuICAgICdwZWVyIGlubGluZS1mbGV4IHNocmluay0wIGN1cnNvci1wb2ludGVyIGl0ZW1zLWNlbnRlciByb3VuZGVkLWZ1bGwgYm9yZGVyLTIgYm9yZGVyLXRyYW5zcGFyZW50IHRyYW5zaXRpb24tY29sb3JzIGZvY3VzLXZpc2libGU6b3V0bGluZS1ub25lIGZvY3VzLXZpc2libGU6cmluZy0yIGZvY3VzLXZpc2libGU6cmluZy1yaW5nIGZvY3VzLXZpc2libGU6cmluZy1vZmZzZXQtMiBmb2N1cy12aXNpYmxlOnJpbmctb2Zmc2V0LWJhY2tncm91bmQgZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIGRpc2FibGVkOm9wYWNpdHktNTAnLFxuICAgIHNpemVDbGFzc2VzLnRyYWNrLFxuICAgIGNoZWNrZWQgPyAnYmctcHJpbWFyeScgOiAnYmctaW5wdXQnLFxuICAgIGNsYXNzXG4gIClcIlxuICAgID5cbiAgPHNwYW5cbiAgICBbY2xhc3NdPVwiY24oXG4gICAgICAncG9pbnRlci1ldmVudHMtbm9uZSBibG9jayByb3VuZGVkLWZ1bGwgYmctYmFja2dyb3VuZCBzaGFkb3ctbGcgcmluZy0wIHRyYW5zaXRpb24tdHJhbnNmb3JtJyxcbiAgICAgIHNpemVDbGFzc2VzLnRodW1iLFxuICAgICAgY2hlY2tlZCA/IHNpemVDbGFzc2VzLnRyYW5zbGF0ZSA6ICd0cmFuc2xhdGUteC0wJ1xuICAgIClcIlxuICA+PC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuICBgXG59KVxuZXhwb3J0IGNsYXNzIFN3aXRjaENvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgQElucHV0KCkgY2xhc3MgPSAnJztcbiAgQElucHV0KCkgZGlzYWJsZWQgPSBmYWxzZTtcbiAgQElucHV0KCkgc2l6ZTogJ3hzJyB8ICdzbScgfCAnZGVmYXVsdCcgfCAnbGcnID0gJ2RlZmF1bHQnO1xuXG4gIGNoZWNrZWQgPSBmYWxzZTtcblxuICBvbkNoYW5nZTogYW55ID0gKCkgPT4ge307XG4gIG9uVG91Y2hlZDogYW55ID0gKCkgPT4ge307XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmKSB7fVxuXG4gIGdldCBzaXplQ2xhc3NlcygpIHtcbiAgICBjb25zdCBzaXplcyA9IHtcbiAgICAgIHhzOiB7XG4gICAgICAgIHRyYWNrOiAnaC00IHctNycsXG4gICAgICAgIHRodW1iOiAnaC0zIHctMycsXG4gICAgICAgIHRyYW5zbGF0ZTogJ3RyYW5zbGF0ZS14LTMnXG4gICAgICB9LFxuICAgICAgc206IHtcbiAgICAgICAgdHJhY2s6ICdoLTUgdy05JyxcbiAgICAgICAgdGh1bWI6ICdoLTQgdy00JyxcbiAgICAgICAgdHJhbnNsYXRlOiAndHJhbnNsYXRlLXgtNCdcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIHRyYWNrOiAnaC02IHctMTEnLFxuICAgICAgICB0aHVtYjogJ2gtNSB3LTUnLFxuICAgICAgICB0cmFuc2xhdGU6ICd0cmFuc2xhdGUteC01J1xuICAgICAgfSxcbiAgICAgIGxnOiB7XG4gICAgICAgIHRyYWNrOiAnaC03IHctWzMuMjVyZW1dJyxcbiAgICAgICAgdGh1bWI6ICdoLTYgdy02JyxcbiAgICAgICAgdHJhbnNsYXRlOiAndHJhbnNsYXRlLXgtNidcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBzaXplc1t0aGlzLnNpemVdO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNuID0gY247XG5cbiAgdG9nZ2xlKCkge1xuICAgIGlmICh0aGlzLmRpc2FibGVkKSByZXR1cm47XG4gICAgdGhpcy5jaGVja2VkID0gIXRoaXMuY2hlY2tlZDtcbiAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuY2hlY2tlZCk7XG4gICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgfVxuXG4gIC8vIC0tLSBDb250cm9sVmFsdWVBY2Nlc3NvciAtLS1cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuY2hlY2tlZCA9IHZhbHVlO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7IHRoaXMub25DaGFuZ2UgPSBmbjsgfVxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7IHRoaXMub25Ub3VjaGVkID0gZm47IH1cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7IHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkOyB9XG59XG4iXX0=
139
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3dpdGNoLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3RvbGxlL3NyYy9saWIvc3dpdGNoLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLEdBQUcsRUFBcUIsTUFBTSwwQkFBMEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sWUFBWSxDQUFDOztBQUVoQyxNQUFNLG1CQUFtQixHQUFHLEdBQUcsQ0FDN0IsMlNBQTJTLEVBQzNTO0lBQ0UsUUFBUSxFQUFFO1FBQ1IsSUFBSSxFQUFFO1lBQ0osRUFBRSxFQUFFLFNBQVM7WUFDYixFQUFFLEVBQUUsU0FBUztZQUNiLE9BQU8sRUFBRSxVQUFVO1lBQ25CLEVBQUUsRUFBRSxpQkFBaUI7U0FDdEI7UUFDRCxPQUFPLEVBQUU7WUFDUCxJQUFJLEVBQUUsWUFBWTtZQUNsQixLQUFLLEVBQUUsVUFBVTtTQUNsQjtLQUNGO0lBQ0QsZUFBZSxFQUFFO1FBQ2YsSUFBSSxFQUFFLFNBQVM7UUFDZixPQUFPLEVBQUUsS0FBSztLQUNmO0NBQ0YsQ0FDRixDQUFDO0FBRUYsTUFBTSxtQkFBbUIsR0FBRyxHQUFHLENBQzdCLDRGQUE0RixFQUM1RjtJQUNFLFFBQVEsRUFBRTtRQUNSLElBQUksRUFBRTtZQUNKLEVBQUUsRUFBRSxTQUFTO1lBQ2IsRUFBRSxFQUFFLFNBQVM7WUFDYixPQUFPLEVBQUUsU0FBUztZQUNsQixFQUFFLEVBQUUsU0FBUztTQUNkO1FBQ0QsT0FBTyxFQUFFO1lBQ1AsSUFBSSxFQUFFLEVBQUU7WUFDUixLQUFL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QUFVLEVBQUUsSUFBSTtvQkFDaEIsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDO29CQUN2QixTQUFTLEVBQUU7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsZ0JBQWdCLENBQUM7NEJBQzlDLEtBQUssRUFBRSxJQUFJO3lCQUNaO3FCQUNGO29CQUNELFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7O0dBWVQ7aUJBQ0Y7c0ZBR1UsS0FBSztzQkFBYixLQUFLO2dCQUVHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRUcsSUFBSTtzQkFBWixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgZm9yd2FyZFJlZiwgQ2hhbmdlRGV0ZWN0b3JSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBjdmEsIHR5cGUgVmFyaWFudFByb3BzIH0gZnJvbSAnY2xhc3MtdmFyaWFuY2UtYXV0aG9yaXR5JztcbmltcG9ydCB7IGNuIH0gZnJvbSAnLi91dGlscy9jbic7XG5cbmNvbnN0IHN3aXRjaFRyYWNrVmFyaWFudHMgPSBjdmEoXG4gICdwZWVyIGlubGluZS1mbGV4IHNocmluay0wIGN1cnNvci1wb2ludGVyIGl0ZW1zLWNlbnRlciByb3VuZGVkLWZ1bGwgYm9yZGVyLTIgYm9yZGVyLXRyYW5zcGFyZW50IHRyYW5zaXRpb24tY29sb3JzIGZvY3VzLXZpc2libGU6b3V0bGluZS1ub25lIGZvY3VzLXZpc2libGU6cmluZy0yIGZvY3VzLXZpc2libGU6cmluZy1yaW5nIGZvY3VzLXZpc2libGU6cmluZy1vZmZzZXQtMiBmb2N1cy12aXNpYmxlOnJpbmctb2Zmc2V0LWJhY2tncm91bmQgZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIGRpc2FibGVkOm9wYWNpdHktNTAnLFxuICB7XG4gICAgdmFyaWFudHM6IHtcbiAgICAgIHNpemU6IHtcbiAgICAgICAgeHM6ICdoLTQgdy03JyxcbiAgICAgICAgc206ICdoLTUgdy05JyxcbiAgICAgICAgZGVmYXVsdDogJ2gtNiB3LTExJyxcbiAgICAgICAgbGc6ICdoLTcgdy1bMy4yNXJlbV0nLFxuICAgICAgfSxcbiAgICAgIGNoZWNrZWQ6IHtcbiAgICAgICAgdHJ1ZTogJ2JnLXByaW1hcnknLFxuICAgICAgICBmYWxzZTogJ2JnLWlucHV0JyxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBkZWZhdWx0VmFyaWFudHM6IHtcbiAgICAgIHNpemU6ICdkZWZhdWx0JyxcbiAgICAgIGNoZWNrZWQ6IGZhbHNlLFxuICAgIH0sXG4gIH1cbik7XG5cbmNvbnN0IHN3aXRjaFRodW1iVmFyaWFudHMgPSBjdmEoXG4gICdwb2ludGVyLWV2ZW50cy1ub25lIGJsb2NrIHJvdW5kZWQtZnVsbCBiZy1iYWNrZ3JvdW5kIHNoYWRvdy1sZyByaW5nLTAgdHJhbnNpdGlvbi10cmFuc2Zvcm0nLFxuICB7XG4gICAgdmFyaWFudHM6IHtcbiAgICAgIHNpemU6IHtcbiAgICAgICAgeHM6ICdoLTMgdy0zJyxcbiAgICAgICAgc206ICdoLTQgdy00JyxcbiAgICAgICAgZGVmYXVsdDogJ2gtNSB3LTUnLFxuICAgICAgICBsZzogJ2gtNiB3LTYnLFxuICAgICAgfSxcbiAgICAgIGNoZWNrZWQ6IHtcbiAgICAgICAgdHJ1ZTogJycsXG4gICAgICAgIGZhbHNlOiAndHJhbnNsYXRlLXgtMCcsXG4gICAgICB9LFxuICAgIH0sXG4gICAgY29tcG91bmRWYXJpYW50czogW1xuICAgICAgeyBzaXplOiAneHMnLCBjaGVja2VkOiB0cnVlLCBjbGFzczogJ3RyYW5zbGF0ZS14LTMnIH0sXG4gICAgICB7IHNpemU6ICdzbScsIGNoZWNrZWQ6IHRydWUsIGNsYXNzOiAndHJhbnNsYXRlLXgtNCcgfSxcbiAgICAgIHsgc2l6ZTogJ2RlZmF1bHQnLCBjaGVja2VkOiB0cnVlLCBjbGFzczogJ3RyYW5zbGF0ZS14LTUnIH0sXG4gICAgICB7IHNpemU6ICdsZycsIGNoZWNrZWQ6IHRydWUsIGNsYXNzOiAndHJhbnNsYXRlLXgtNicgfSxcbiAgICBdLFxuICAgIGRlZmF1bHRWYXJpYW50czoge1xuICAgICAgc2l6ZTogJ2RlZmF1bHQnLFxuICAgICAgY2hlY2tlZDogZmFsc2UsXG4gICAgfSxcbiAgfVxuKTtcblxuZXhwb3J0IHR5cGUgU3dpdGNoUHJvcHMgPSBWYXJpYW50UHJvcHM8dHlwZW9mIHN3aXRjaFRyYWNrVmFyaWFudHM+O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0b2xsZS1zd2l0Y2gnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBTd2l0Y2hDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9XG4gIF0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGJ1dHRvblxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICByb2xlPVwic3dpdGNoXCJcbiAgICAgIFthdHRyLmFyaWEtY2hlY2tlZF09XCJjaGVja2VkXCJcbiAgICAgIFthdHRyLmRhdGEtc3RhdGVdPVwiY2hlY2tlZCA/ICdjaGVja2VkJyA6ICd1bmNoZWNrZWQnXCJcbiAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAoY2xpY2spPVwidG9nZ2xlKClcIlxuICAgICAgW2NsYXNzXT1cInRyYWNrQ2xhc3NcIlxuICAgID5cbiAgICAgIDxzcGFuIFtjbGFzc109XCJ0aHVtYkNsYXNzXCI+PC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuICBgXG59KVxuZXhwb3J0IGNsYXNzIFN3aXRjaENvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgLyoqIEV4dHJhIFRhaWx3aW5kIGNsYXNzZXMgbWVyZ2VkIG9udG8gdGhlIHN3aXRjaCB0cmFjayB2aWEgYGNuKClgIChsYXN0LXdpbnMpLiAqL1xuICBASW5wdXQoKSBjbGFzcyA9ICcnO1xuICAvKiogRGlzYWJsZXMgdGhlIHN3aXRjaCBhbmQgYmxvY2tzIHRvZ2dsaW5nLiBAZGVmYXVsdCBmYWxzZSAqL1xuICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuICAvKiogU2l6ZSBvZiB0aGUgc3dpdGNoLiBAZGVmYXVsdCAnZGVmYXVsdCcgKi9cbiAgQElucHV0KCkgc2l6ZTogU3dpdGNoUHJvcHNbJ3NpemUnXSA9ICdkZWZhdWx0JztcblxuICBjaGVja2VkID0gZmFsc2U7XG5cbiAgb25DaGFuZ2U6IGFueSA9ICgpID0+IHt9O1xuICBvblRvdWNoZWQ6IGFueSA9ICgpID0+IHt9O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZikge31cblxuICBnZXQgdHJhY2tDbGFzcygpIHtcbiAgICByZXR1cm4gY24oXG4gICAgICBzd2l0Y2hUcmFja1ZhcmlhbnRzKHsgc2l6ZTogdGhpcy5zaXplLCBjaGVja2VkOiB0aGlzLmNoZWNrZWQgfSksXG4gICAgICB0aGlzLmNsYXNzXG4gICAgKTtcbiAgfVxuXG4gIGdldCB0aHVtYkNsYXNzKCkge1xuICAgIHJldHVybiBjbihzd2l0Y2hUaHVtYlZhcmlhbnRzKHsgc2l6ZTogdGhpcy5zaXplLCBjaGVja2VkOiB0aGlzLmNoZWNrZWQgfSkpO1xuICB9XG5cbiAgdG9nZ2xlKCkge1xuICAgIGlmICh0aGlzLmRpc2FibGVkKSByZXR1cm47XG4gICAgdGhpcy5jaGVja2VkID0gIXRoaXMuY2hlY2tlZDtcbiAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuY2hlY2tlZCk7XG4gICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgfVxuXG4gIC8vIC0tLSBDb250cm9sVmFsdWVBY2Nlc3NvciAtLS1cbiAgd3JpdGVWYWx1ZSh2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuY2hlY2tlZCA9IHZhbHVlO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7IHRoaXMub25DaGFuZ2UgPSBmbjsgfVxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7IHRoaXMub25Ub3VjaGVkID0gZm47IH1cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7IHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkOyB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTsgfVxufVxuIl19