@dcl/asset-packs 2.14.3 → 2.15.1

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 (63) hide show
  1. package/bin/index.js +2169 -616
  2. package/catalog.json +4 -4
  3. package/dist/actions.js +8 -8
  4. package/dist/admin-toolkit-ui/Button.d.ts +1 -1
  5. package/dist/admin-toolkit-ui/Button.js +2 -2
  6. package/dist/admin-toolkit-ui/Error.d.ts +2 -2
  7. package/dist/admin-toolkit-ui/Error.js +4 -4
  8. package/dist/admin-toolkit-ui/Header.js +1 -1
  9. package/dist/admin-toolkit-ui/Modal.d.ts +19 -0
  10. package/dist/admin-toolkit-ui/Modal.js +37 -0
  11. package/dist/admin-toolkit-ui/ModerationControl/UsersList.d.ts +3 -3
  12. package/dist/admin-toolkit-ui/ModerationControl/UsersList.js +14 -8
  13. package/dist/admin-toolkit-ui/ModerationControl/index.d.ts +4 -5
  14. package/dist/admin-toolkit-ui/ModerationControl/index.js +19 -11
  15. package/dist/admin-toolkit-ui/ModerationControl/styles/AddUserInputStyles.js +4 -4
  16. package/dist/admin-toolkit-ui/ModerationControl/styles/UsersListStyles.d.ts +2 -0
  17. package/dist/admin-toolkit-ui/ModerationControl/styles/UsersListStyles.js +13 -5
  18. package/dist/admin-toolkit-ui/RewardsControl.d.ts +2 -2
  19. package/dist/admin-toolkit-ui/RewardsControl.js +9 -5
  20. package/dist/admin-toolkit-ui/SmartItemsControl.d.ts +2 -2
  21. package/dist/admin-toolkit-ui/SmartItemsControl.js +6 -4
  22. package/dist/admin-toolkit-ui/TextAnnouncements.d.ts +2 -2
  23. package/dist/admin-toolkit-ui/TextAnnouncements.js +9 -5
  24. package/dist/admin-toolkit-ui/TextAnnouncementsControl.d.ts +3 -3
  25. package/dist/admin-toolkit-ui/TextAnnouncementsControl.js +15 -7
  26. package/dist/admin-toolkit-ui/VideoControl/DclCast/CompactDclCast.d.ts +11 -0
  27. package/dist/admin-toolkit-ui/VideoControl/DclCast/CompactDclCast.js +90 -0
  28. package/dist/admin-toolkit-ui/VideoControl/DclCast/DclCastInfo.d.ts +6 -4
  29. package/dist/admin-toolkit-ui/VideoControl/DclCast/DclCastInfo.js +71 -57
  30. package/dist/admin-toolkit-ui/VideoControl/DclCast/PresentationPanel.d.ts +10 -0
  31. package/dist/admin-toolkit-ui/VideoControl/DclCast/PresentationPanel.js +67 -0
  32. package/dist/admin-toolkit-ui/VideoControl/DclCast/SharePresentationModal.d.ts +6 -0
  33. package/dist/admin-toolkit-ui/VideoControl/DclCast/SharePresentationModal.js +74 -0
  34. package/dist/admin-toolkit-ui/VideoControl/DclCast/SpeakerShowcase.d.ts +11 -0
  35. package/dist/admin-toolkit-ui/VideoControl/DclCast/SpeakerShowcase.js +110 -0
  36. package/dist/admin-toolkit-ui/VideoControl/DclCast/index.d.ts +17 -3
  37. package/dist/admin-toolkit-ui/VideoControl/DclCast/index.js +208 -35
  38. package/dist/admin-toolkit-ui/VideoControl/DclCast/styles.d.ts +73 -1
  39. package/dist/admin-toolkit-ui/VideoControl/DclCast/styles.js +193 -3
  40. package/dist/admin-toolkit-ui/VideoControl/LiveStream/ShowStreamKey.js +17 -13
  41. package/dist/admin-toolkit-ui/VideoControl/LiveStream/index.d.ts +1 -1
  42. package/dist/admin-toolkit-ui/VideoControl/LiveStream/index.js +8 -8
  43. package/dist/admin-toolkit-ui/VideoControl/VideoUrl.d.ts +2 -2
  44. package/dist/admin-toolkit-ui/VideoControl/VideoUrl.js +9 -9
  45. package/dist/admin-toolkit-ui/VideoControl/VolumeControl.d.ts +3 -2
  46. package/dist/admin-toolkit-ui/VideoControl/VolumeControl.js +8 -10
  47. package/dist/admin-toolkit-ui/VideoControl/api.d.ts +49 -0
  48. package/dist/admin-toolkit-ui/VideoControl/api.js +185 -1
  49. package/dist/admin-toolkit-ui/VideoControl/index.d.ts +16 -15
  50. package/dist/admin-toolkit-ui/VideoControl/index.js +57 -21
  51. package/dist/admin-toolkit-ui/VideoControl/utils.d.ts +2 -2
  52. package/dist/admin-toolkit-ui/VideoControl/utils.js +3 -3
  53. package/dist/admin-toolkit-ui/constants.d.ts +2 -3
  54. package/dist/admin-toolkit-ui/constants.js +4 -4
  55. package/dist/admin-toolkit-ui/fetch-utils.js +2 -2
  56. package/dist/admin-toolkit-ui/index.d.ts +4 -4
  57. package/dist/admin-toolkit-ui/index.js +40 -18
  58. package/dist/admin-toolkit-ui/types.d.ts +19 -0
  59. package/dist/admin-toolkit-ui/types.js +1 -1
  60. package/dist/admin.js +2 -2
  61. package/dist/bin/index.js +2169 -616
  62. package/dist/ui.js +4 -4
  63. package/package.json +5 -5
@@ -0,0 +1,110 @@
1
+ import ReactEcs, { Dropdown, UiEntity, Label } from '@dcl/react-ecs';
2
+ import { getContentUrl } from '../../constants';
3
+ import { Button } from '../../Button';
4
+ import { Modal } from '../../Modal';
5
+ import { getSourceLabel, isPresentationBot } from '../api';
6
+ import { getSpeakerShowcaseStyles, getShowcaseColors, getShowcaseBackgrounds, getShowcaseIconBackgrounds, getPaginationColor, SHOWCASE_DROPDOWN_COLORS, SHOWCASE_PAGE_INDICATOR_COLOR, } from './styles';
7
+ const SPEAKERS_PER_PAGE = 10;
8
+ const ICONS = {
9
+ get BACK() {
10
+ return `${getContentUrl()}/admin_toolkit/assets/icons/chevron-back.png`;
11
+ },
12
+ get NEXT() {
13
+ return `${getContentUrl()}/admin_toolkit/assets/icons/chevron-forward.png`;
14
+ },
15
+ get STAR() {
16
+ return `${getContentUrl()}/admin_toolkit/assets/icons/star.png`;
17
+ },
18
+ };
19
+ function getDropdownOptions(participant) {
20
+ return participant.tracks.map(track => `${getSourceLabel(track.sourceType)}`);
21
+ }
22
+ function getActiveIndex(participant, activeTrackSid) {
23
+ if (!activeTrackSid)
24
+ return -1;
25
+ return participant.tracks.findIndex(t => t.sid === activeTrackSid);
26
+ }
27
+ function ParticipantRow({ participant, activeTrackSid, isHovered, onSelectTrack, onHoverEnter, onHoverLeave, }) {
28
+ const styles = getSpeakerShowcaseStyles();
29
+ const backgrounds = getShowcaseBackgrounds();
30
+ const colors = getShowcaseColors();
31
+ const iconBgs = getShowcaseIconBackgrounds();
32
+ const isBot = isPresentationBot(participant.name);
33
+ const displayName = isBot ? 'Presentation' : participant.name;
34
+ const activeIndex = getActiveIndex(participant, activeTrackSid);
35
+ const isActive = activeIndex !== -1;
36
+ const options = getDropdownOptions(participant);
37
+ const displayLabel = isActive
38
+ ? getSourceLabel(participant.tracks[activeIndex].sourceType)
39
+ : 'Showcase';
40
+ const dropdownTextColor = isHovered
41
+ ? SHOWCASE_DROPDOWN_COLORS.hover
42
+ : isActive
43
+ ? SHOWCASE_DROPDOWN_COLORS.active
44
+ : SHOWCASE_DROPDOWN_COLORS.idle;
45
+ const dropdownBgColor = isHovered
46
+ ? SHOWCASE_DROPDOWN_COLORS.hoverBg
47
+ : SHOWCASE_DROPDOWN_COLORS.transparentBg;
48
+ return (ReactEcs.createElement(UiEntity, { uiTransform: styles.userItem },
49
+ ReactEcs.createElement(UiEntity, { uiTransform: styles.userRow },
50
+ ReactEcs.createElement(UiEntity, { uiTransform: styles.userInfo },
51
+ ReactEcs.createElement(UiEntity, { uiTransform: styles.personIconContainer },
52
+ ReactEcs.createElement(UiEntity, { uiTransform: styles.personIcon, uiBackground: backgrounds.personIcon })),
53
+ ReactEcs.createElement(UiEntity, { uiTransform: styles.userDetails },
54
+ ReactEcs.createElement(Label, { value: `<b>${displayName}</b>`, fontSize: 14, color: colors.white }))),
55
+ ReactEcs.createElement(UiEntity, { uiTransform: styles.rowCenter }, isBot ? (ReactEcs.createElement(Button, { id: `showcase-activate-${participant.identity}`, value: isActive ? '<b>Active</b>' : '<b>Activate</b>', variant: isActive ? 'primary' : 'secondary', disabled: isActive, fontSize: 14, color: colors.white, uiTransform: styles.dropdownTransform, onMouseDown: () => {
56
+ const track = participant.tracks[0];
57
+ if (track) {
58
+ onSelectTrack(track);
59
+ }
60
+ } })) : (ReactEcs.createElement(UiEntity, { uiTransform: styles.rowCenter },
61
+ ReactEcs.createElement(UiEntity, { uiTransform: { ...styles.starIcon, display: isActive ? 'flex' : 'none' }, uiBackground: iconBgs.star }),
62
+ ReactEcs.createElement(UiEntity, { uiTransform: styles.dropdownWrapper, onMouseEnter: onHoverEnter, onMouseLeave: onHoverLeave },
63
+ ReactEcs.createElement(Dropdown, { key: `showcase-dropdown-${participant.identity}-${activeTrackSid ?? 'none'}`, acceptEmpty: true, emptyLabel: displayLabel, options: options, selectedIndex: -1, onChange: (optionIndex) => {
64
+ const track = participant.tracks[optionIndex];
65
+ if (track) {
66
+ onSelectTrack(track);
67
+ }
68
+ }, textAlign: "middle-left", fontSize: 14, uiTransform: styles.dropdownTransform, uiBackground: { color: dropdownBgColor }, color: dropdownTextColor })))))),
69
+ ReactEcs.createElement(UiEntity, { uiTransform: styles.divider, uiBackground: backgrounds.divider })));
70
+ }
71
+ export function SpeakerShowcase({ participants, activeTrackSid, onSelectTrack, onSetDefault, onClose, }) {
72
+ const [page, setPage] = ReactEcs.useState(1);
73
+ const [hoveredDropdown, setHoveredDropdown] = ReactEcs.useState(undefined);
74
+ const isDefaultActive = !activeTrackSid;
75
+ const styles = getSpeakerShowcaseStyles();
76
+ const colors = getShowcaseColors();
77
+ const iconBgs = getShowcaseIconBackgrounds();
78
+ const totalPages = Math.ceil(participants.length / SPEAKERS_PER_PAGE);
79
+ const startIndex = (page - 1) * SPEAKERS_PER_PAGE;
80
+ const endIndex = Math.min(startIndex + SPEAKERS_PER_PAGE, participants.length);
81
+ const currentPageParticipants = participants.slice(startIndex, endIndex);
82
+ const paginationFooter = participants.length > SPEAKERS_PER_PAGE && (ReactEcs.createElement(UiEntity, { uiTransform: styles.pagination },
83
+ ReactEcs.createElement(Button, { id: "showcase-prev", value: "Prev", variant: "secondary", disabled: page <= 1, fontSize: 18, icon: ICONS.BACK, iconTransform: styles.prevIcon, iconBackground: { color: getPaginationColor(page <= 1) }, color: getPaginationColor(page <= 1), labelTransform: styles.prevLabel, uiTransform: styles.paginationButton, onMouseDown: () => setPage(page - 1) }),
84
+ ReactEcs.createElement(Label, { value: `Page ${page}/${totalPages}`, fontSize: 14, color: SHOWCASE_PAGE_INDICATOR_COLOR }),
85
+ ReactEcs.createElement(Button, { id: "showcase-next", value: "<b>Next</b>", variant: "secondary", fontSize: 18, iconRight: ICONS.NEXT, iconRightTransform: styles.nextIcon, labelTransform: styles.nextLabel, iconRightBackground: {
86
+ color: getPaginationColor(page >= totalPages),
87
+ }, color: getPaginationColor(page >= totalPages), disabled: page >= totalPages, uiTransform: styles.paginationButton, onMouseDown: () => setPage(page + 1) })));
88
+ return (ReactEcs.createElement(Modal, { id: "showcase", title: "SPEAKER SHOWCASE", titleFontSize: 20, headerIcon: iconBgs.showcase, headerIconSize: 24, headerMarginBottom: 16, counterText: `(${participants.length} Speakers)`, counterFontSize: 14, width: 650, height: 650, padding: 16, onClose: onClose, footer: paginationFooter || undefined },
89
+ ReactEcs.createElement(UiEntity, { uiTransform: { flexDirection: 'column', width: '100%' } },
90
+ ReactEcs.createElement(UiEntity, { uiTransform: styles.toggleRow, uiBackground: { color: colors.softBlack } },
91
+ ReactEcs.createElement(UiEntity, { uiTransform: { flexDirection: 'column' } },
92
+ ReactEcs.createElement(Label, { value: "Automatic Showcase", fontSize: 14, color: colors.white }),
93
+ ReactEcs.createElement(Label, { value: "Speakers will be automatically featured when they speak", fontSize: 10, color: colors.gray })),
94
+ ReactEcs.createElement(Button, { id: "showcase-default-speaker", value: isDefaultActive ? 'Active' : 'Turn On', variant: "secondary", disabled: isDefaultActive, fontSize: 14, color: colors.white, icon: ICONS.STAR, iconTransform: {
95
+ ...styles.starIcon,
96
+ display: isDefaultActive ? 'flex' : 'none',
97
+ }, iconBackground: { color: colors.white }, uiTransform: {
98
+ ...styles.toggleButton,
99
+ ...(isDefaultActive ? { borderColor: colors.transparent } : {}),
100
+ }, onMouseDown: () => {
101
+ if (!isDefaultActive) {
102
+ onSetDefault();
103
+ }
104
+ } })),
105
+ ReactEcs.createElement(UiEntity, { uiTransform: styles.listContainer },
106
+ participants.length === 0 && (ReactEcs.createElement(UiEntity, { uiTransform: styles.messageContainer },
107
+ ReactEcs.createElement(Label, { value: "No current active participants in the Cast", fontSize: 16, color: colors.gray }))),
108
+ currentPageParticipants.map(participant => (ReactEcs.createElement(ParticipantRow, { key: participant.identity, participant: participant, activeTrackSid: activeTrackSid, isHovered: hoveredDropdown === participant.identity, onSelectTrack: onSelectTrack, onHoverEnter: () => setHoveredDropdown(participant.identity), onHoverLeave: () => setHoveredDropdown(undefined) })))))));
109
+ }
110
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3BlYWtlclNob3djYXNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2FkbWluLXRvb2xraXQtdWkvVmlkZW9Db250cm9sL0RjbENhc3QvU3BlYWtlclNob3djYXNlLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLFFBQVEsRUFBRSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDdEMsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNwQyxPQUFPLEVBQUUsY0FBYyxFQUFFLGlCQUFpQixFQUF5QyxNQUFNLFFBQVEsQ0FBQztBQUNsRyxPQUFPLEVBQ0wsd0JBQXdCLEVBQ3hCLGlCQUFpQixFQUNqQixzQkFBc0IsRUFDdEIsMEJBQTBCLEVBQzFCLGtCQUFrQixFQUNsQix3QkFBd0IsRUFDeEIsNkJBQTZCLEdBQzlCLE1BQU0sVUFBVSxDQUFDO0FBRWxCLE1BQU0saUJBQWlCLEdBQUcsRUFBRSxDQUFDO0FBRTdCLE1BQU0sS0FBSyxHQUFHO0lBQ1osSUFBSSxJQUFJO1FBQ04sT0FBTyxHQUFHLGFBQWEsRUFBRSw4Q0FBOEMsQ0FBQztJQUMxRSxDQUFDO0lBQ0QsSUFBSSxJQUFJO1FBQ04sT0FBTyxHQUFHLGFBQWEsRUFBRSxpREFBaUQsQ0FBQztJQUM3RSxDQUFDO0lBQ0QsSUFBSSxJQUFJO1FBQ04sT0FBTyxHQUFHLGFBQWEsRUFBRSxzQ0FBc0MsQ0FBQztJQUNsRSxDQUFDO0NBQ0YsQ0FBQztBQVVGLFNBQVMsa0JBQWtCLENBQUMsV0FBd0I7SUFDbEQsT0FBTyxXQUFXLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsY0FBYyxDQUFDLEtB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TUFBTSxLQUFLLENBQUMsSUFBSSxDQUM1Qix1QkFBQyxRQUFRLElBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxnQkFBZ0I7b0JBQzVDLHVCQUFDLEtBQUssSUFDSixLQUFLLEVBQUMsNENBQTRDLEVBQ2xELFFBQVEsRUFBRSxFQUFFLEVBQ1osS0FBSyxFQUFFLE1BQU0sQ0FBQyxJQUFJLEdBQ2xCLENBQ08sQ0FDWjtnQkFDQSx1QkFBdUIsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUMxQyx1QkFBQyxjQUFjLElBQ2IsR0FBRyxFQUFFLFdBQVcsQ0FBQyxRQUFRLEVBQ3pCLFdBQVcsRUFBRSxXQUFXLEVBQ3hCLGNBQWMsRUFBRSxjQUFjLEVBQzlCLFNBQVMsRUFBRSxlQUFlLEtBQUssV0FBVyxDQUFDLFFBQVEsRUFDbkQsYUFBYSxFQUFFLGFBQWEsRUFDNUIsWUFBWSxFQUFFLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsRUFDNUQsWUFBWSxFQUFFLEdBQUcsRUFBRSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxHQUNqRCxDQUNILENBQUMsQ0FDTyxDQUNGLENBQ0wsQ0FDVCxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdEVjcywgeyBEcm9wZG93biwgVWlFbnRpdHksIExhYmVsIH0gZnJvbSAnQGRjbC9yZWFjdC1lY3MnO1xuaW1wb3J0IHsgZ2V0Q29udGVudFVybCB9IGZyb20gJy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICcuLi8uLi9CdXR0b24nO1xuaW1wb3J0IHsgTW9kYWwgfSBmcm9tICcuLi8uLi9Nb2RhbCc7XG5pbXBvcnQgeyBnZXRTb3VyY2VMYWJlbCwgaXNQcmVzZW50YXRpb25Cb3QsIHR5cGUgRmxhdHRlbmVkVHJhY2ssIHR5cGUgUGFydGljaXBhbnQgfSBmcm9tICcuLi9hcGknO1xuaW1wb3J0IHtcbiAgZ2V0U3BlYWtlclNob3djYXNlU3R5bGVzLFxuICBnZXRTaG93Y2FzZUNvbG9ycyxcbiAgZ2V0U2hvd2Nhc2VCYWNrZ3JvdW5kcyxcbiAgZ2V0U2hvd2Nhc2VJY29uQmFja2dyb3VuZHMsXG4gIGdldFBhZ2luYXRpb25Db2xvcixcbiAgU0hPV0NBU0VfRFJPUERPV05fQ09MT1JTLFxuICBTSE9XQ0FTRV9QQUdFX0lORElDQVRPUl9DT0xPUixcbn0gZnJvbSAnLi9zdHlsZXMnO1xuXG5jb25zdCBTUEVBS0VSU19QRVJfUEFHRSA9IDEwO1xuXG5jb25zdCBJQ09OUyA9IHtcbiAgZ2V0IEJBQ0soKSB7XG4gICAgcmV0dXJuIGAke2dldENvbnRlbnRVcmwoKX0vYWRtaW5fdG9vbGtpdC9hc3NldHMvaWNvbnMvY2hldnJvbi1iYWNrLnBuZ2A7XG4gIH0sXG4gIGdldCBORVhUKCkge1xuICAgIHJldHVybiBgJHtnZXRDb250ZW50VXJsKCl9L2FkbWluX3Rvb2xraXQvYXNzZXRzL2ljb25zL2NoZXZyb24tZm9yd2FyZC5wbmdgO1xuICB9LFxuICBnZXQgU1RBUigpIHtcbiAgICByZXR1cm4gYCR7Z2V0Q29udGVudFVybCgpfS9hZG1pbl90b29sa2l0L2Fzc2V0cy9pY29ucy9zdGFyLnBuZ2A7XG4gIH0sXG59O1xuXG50eXBlIFNwZWFrZXJTaG93Y2FzZVByb3BzID0ge1xuICBwYXJ0aWNpcGFudHM6IFBhcnRpY2lwYW50W107XG4gIGFjdGl2ZVRyYWNrU2lkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIG9uU2VsZWN0VHJhY2s6ICh0cmFjazogRmxhdHRlbmVkVHJhY2spID0+IHZvaWQ7XG4gIG9uU2V0RGVmYXVsdDogKCkgPT4gdm9pZDtcbiAgb25DbG9zZTogKCkgPT4gdm9pZDtcbn07XG5cbmZ1bmN0aW9uIGdldERyb3Bkb3duT3B0aW9ucyhwYXJ0aWNpcGFudDogUGFydGljaXBhbnQpOiBzdHJpbmdbXSB7XG4gIHJldHVybiBwYXJ0aWNpcGFudC50cmFja3MubWFwKHRyYWNrID0+IGAke2dldFNvdXJjZUxhYmVsKHRyYWNrLnNvdXJjZVR5cGUpfWApO1xufVxuXG5mdW5jdGlvbiBnZXRBY3RpdmVJbmRleChwYXJ0aWNpcGFudDogUGFydGljaXBhbnQsIGFjdGl2ZVRyYWNrU2lkOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBudW1iZXIge1xuICBpZiAoIWFjdGl2ZVRyYWNrU2lkKSByZXR1cm4gLTE7XG4gIHJldHVybiBwYXJ0aWNpcGFudC50cmFja3MuZmluZEluZGV4KHQgPT4gdC5zaWQgPT09IGFjdGl2ZVRyYWNrU2lkKTtcbn1cblxuZnVuY3Rpb24gUGFydGljaXBhbnRSb3coe1xuICBwYXJ0aWNpcGFudCxcbiAgYWN0aXZlVHJhY2tTaWQsXG4gIGlzSG92ZXJlZCxcbiAgb25TZWxlY3RUcmFjayxcbiAgb25Ib3ZlckVudGVyLFxuICBvbkhvdmVyTGVhdmUsXG59OiB7XG4gIGtleT86IHN0cmluZztcbiAgcGFydGljaXBhbnQ6IFBhcnRpY2lwYW50O1xuICBhY3RpdmVUcmFja1NpZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBpc0hvdmVyZWQ6IGJvb2xlYW47XG4gIG9uU2VsZWN0VHJhY2s6ICh0cmFjazogRmxhdHRlbmVkVHJhY2spID0+IHZvaWQ7XG4gIG9uSG92ZXJFbnRlcjogKCkgPT4gdm9pZDtcbiAgb25Ib3ZlckxlYXZlOiAoKSA9PiB2b2lkO1xufSkge1xuICBjb25zdCBzdHlsZXMgPSBnZXRTcGVha2VyU2hvd2Nhc2VTdHlsZXMoKTtcbiAgY29uc3QgYmFja2dyb3VuZHMgPSBnZXRTaG93Y2FzZUJhY2tncm91bmRzKCk7XG4gIGNvbnN0IGNvbG9ycyA9IGdldFNob3djYXNlQ29sb3JzKCk7XG4gIGNvbnN0IGljb25CZ3MgPSBnZXRTaG93Y2FzZUljb25CYWNrZ3JvdW5kcygpO1xuXG4gIGNvbnN0IGlzQm90ID0gaXNQcmVzZW50YXRpb25Cb3QocGFydGljaXBhbnQubmFtZSk7XG4gIGNvbnN0IGRpc3BsYXlOYW1lID0gaXNCb3QgPyAnUHJlc2VudGF0aW9uJyA6IHBhcnRpY2lwYW50Lm5hbWU7XG4gIGNvbnN0IGFjdGl2ZUluZGV4ID0gZ2V0QWN0aXZlSW5kZXgocGFydGljaXBhbnQsIGFjdGl2ZVRyYWNrU2lkKTtcbiAgY29uc3QgaXNBY3RpdmUgPSBhY3RpdmVJbmRleCAhPT0gLTE7XG4gIGNvbnN0IG9wdGlvbnMgPSBnZXREcm9wZG93bk9wdGlvbnMocGFydGljaXBhbnQpO1xuICBjb25zdCBkaXNwbGF5TGFiZWwgPSBpc0FjdGl2ZVxuICAgID8gZ2V0U291cmNlTGFiZWwocGFydGljaXBhbnQudHJhY2tzW2FjdGl2ZUluZGV4XS5zb3VyY2VUeXBlKVxuICAgIDogJ1Nob3djYXNlJztcblxuICBjb25zdCBkcm9wZG93blRleHRDb2xvciA9IGlzSG92ZXJlZFxuICAgID8gU0hPV0NBU0VfRFJPUERPV05fQ09MT1JTLmhvdmVyXG4gICAgOiBpc0FjdGl2ZVxuICAgICAgPyBTSE9XQ0FTRV9EUk9QRE9XTl9DT0xPUlMuYWN0aXZlXG4gICAgICA6IFNIT1dDQVNFX0RST1BET1dOX0NPTE9SUy5pZGxlO1xuXG4gIGNvbnN0IGRyb3Bkb3duQmdDb2xvciA9IGlzSG92ZXJlZFxuICAgID8gU0hPV0NBU0VfRFJPUERPV05fQ09MT1JTLmhvdmVyQmdcbiAgICA6IFNIT1dDQVNFX0RST1BET1dOX0NPTE9SUy50cmFuc3BhcmVudEJnO1xuXG4gIHJldHVybiAoXG4gICAgPFVpRW50aXR5IHVpVHJhbnNmb3JtPXtzdHlsZXMudXNlckl0ZW19PlxuICAgICAgPFVpRW50aXR5IHVpVHJhbnNmb3JtPXtzdHlsZXMudXNlclJvd30+XG4gICAgICAgIDxVaUVudGl0eSB1aVRyYW5zZm9ybT17c3R5bGVzLnVzZXJJbmZvfT5cbiAgICAgICAgICA8VWlFbnRpdHkgdWlUcmFuc2Zvcm09e3N0eWxlcy5wZXJzb25JY29uQ29udGFpbmVyfT5cbiAgICAgICAgICAgIDxVaUVudGl0eVxuICAgICAgICAgICAgICB1aVRyYW5zZm9ybT17c3R5bGVzLnBlcnNvbkljb259XG4gICAgICAgICAgICAgIHVpQmFja2dyb3VuZD17YmFja2dyb3VuZHMucGVyc29uSWNvbn1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9VaUVudGl0eT5cbiAgICAgICAgICA8VWlFbnRpdHkgdWlUcmFuc2Zvcm09e3N0eWxlcy51c2VyRGV0YWlsc30+XG4gICAgICAgICAgICA8TGFiZWxcbiAgICAgICAgICAgICAgdmFsdWU9e2A8Yj4ke2Rpc3BsYXlOYW1lfTwvYj5gfVxuICAgICAgICAgICAgICBmb250U2l6ZT17MTR9XG4gICAgICAgICAgICAgIGNvbG9yPXtjb2xvcnMud2hpdGV9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvVWlFbnRpdHk+XG4gICAgICAgIDwvVWlFbnRpdHk+XG4gICAgICAgIDxVaUVudGl0eSB1aVRyYW5zZm9ybT17c3R5bGVzLnJvd0NlbnRlcn0+XG4gICAgICAgICAge2lzQm90ID8gKFxuICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICBpZD17YHNob3djYXNlLWFjdGl2YXRlLSR7cGFydGljaXBhbnQuaWRlbnRpdHl9YH1cbiAgICAgICAgICAgICAgdmFsdWU9e2lzQWN0aXZlID8gJzxiPkFjdGl2ZTwvYj4nIDogJzxiPkFjdGl2YXRlPC9iPid9XG4gICAgICAgICAgICAgIHZhcmlhbnQ9e2lzQWN0aXZlID8gJ3ByaW1hcnknIDogJ3NlY29uZGFyeSd9XG4gICAgICAgICAgICAgIGRpc2FibGVkPXtpc0FjdGl2ZX1cbiAgICAgICAgICAgICAgZm9udFNpemU9ezE0fVxuICAgICAgICAgICAgICBjb2xvcj17Y29sb3JzLndoaXRlfVxuICAgICAgICAgICAgICB1aVRyYW5zZm9ybT17c3R5bGVzLmRyb3Bkb3duVHJhbnNmb3JtfVxuICAgICAgICAgICAgICBvbk1vdXNlRG93bj17KCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRyYWNrID0gcGFydGljaXBhbnQudHJhY2tzWzBdO1xuICAgICAgICAgICAgICAgIGlmICh0cmFjaykge1xuICAgICAgICAgICAgICAgICAgb25TZWxlY3RUcmFjayh0cmFjayk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPFVpRW50aXR5IHVpVHJhbnNmb3JtPXtzdHlsZXMucm93Q2VudGVyfT5cbiAgICAgICAgICAgICAgPFVpRW50aXR5XG4gICAgICAgICAgICAgICAgdWlUcmFuc2Zvcm09e3sgLi4uc3R5bGVzLnN0YXJJY29uLCBkaXNwbGF5OiBpc0FjdGl2ZSA/ICdmbGV4JyA6ICdub25lJyB9fVxuICAgICAgICAgICAgICAgIHVpQmFja2dyb3VuZD17aWNvbkJncy5zdGFyfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8VWlFbnRpdHlcbiAgICAgICAgICAgICAgICB1aVRyYW5zZm9ybT17c3R5bGVzLmRyb3Bkb3duV3JhcHBlcn1cbiAgICAgICAgICAgICAgICBvbk1vdXNlRW50ZXI9e29uSG92ZXJFbnRlcn1cbiAgICAgICAgICAgICAgICBvbk1vdXNlTGVhdmU9e29uSG92ZXJMZWF2ZX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxEcm9wZG93blxuICAgICAgICAgICAgICAgICAga2V5PXtgc2hvd2Nhc2UtZHJvcGRvd24tJHtwYXJ0aWNpcGFudC5pZGVudGl0eX0tJHthY3RpdmVUcmFja1NpZCA/PyAnbm9uZSd9YH1cbiAgICAgICAgICAgICAgICAgIGFjY2VwdEVtcHR5XG4gICAgICAgICAgICAgICAgICBlbXB0eUxhYmVsPXtkaXNwbGF5TGFiZWx9XG4gICAgICAgICAgICAgICAgICBvcHRpb25zPXtvcHRpb25zfVxuICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRJbmRleD17LTF9XG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17KG9wdGlvbkluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdHJhY2sgPSBwYXJ0aWNpcGFudC50cmFja3Nbb3B0aW9uSW5kZXhdO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHJhY2spIHtcbiAgICAgICAgICAgICAgICAgICAgICBvblNlbGVjdFRyYWNrKHRyYWNrKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgIHRleHRBbGlnbj1cIm1pZGRsZS1sZWZ0XCJcbiAgICAgICAgICAgICAgICAgIGZvbnRTaXplPXsxNH1cbiAgICAgICAgICAgICAgICAgIHVpVHJhbnNmb3JtPXtzdHlsZXMuZHJvcGRvd25UcmFuc2Zvcm19XG4gICAgICAgICAgICAgICAgICB1aUJhY2tncm91bmQ9e3sgY29sb3I6IGRyb3Bkb3duQmdDb2xvciB9fVxuICAgICAgICAgICAgICAgICAgY29sb3I9e2Ryb3Bkb3duVGV4dENvbG9yfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvVWlFbnRpdHk+XG4gICAgICAgICAgICA8L1VpRW50aXR5PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvVWlFbnRpdHk+XG4gICAgICA8L1VpRW50aXR5PlxuICAgICAgPFVpRW50aXR5XG4gICAgICAgIHVpVHJhbnNmb3JtPXtzdHlsZXMuZGl2aWRlcn1cbiAgICAgICAgdWlCYWNrZ3JvdW5kPXtiYWNrZ3JvdW5kcy5kaXZpZGVyfVxuICAgICAgLz5cbiAgICA8L1VpRW50aXR5PlxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gU3BlYWtlclNob3djYXNlKHtcbiAgcGFydGljaXBhbnRzLFxuICBhY3RpdmVUcmFja1NpZCxcbiAgb25TZWxlY3RUcmFjayxcbiAgb25TZXREZWZhdWx0LFxuICBvbkNsb3NlLFxufTogU3BlYWtlclNob3djYXNlUHJvcHMpIHtcbiAgY29uc3QgW3BhZ2UsIHNldFBhZ2VdID0gUmVhY3RFY3MudXNlU3RhdGUoMSk7XG4gIGNvbnN0IFtob3ZlcmVkRHJvcGRvd24sIHNldEhvdmVyZWREcm9wZG93bl0gPSBSZWFjdEVjcy51c2VTdGF0ZTxzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIGNvbnN0IGlzRGVmYXVsdEFjdGl2ZSA9ICFhY3RpdmVUcmFja1NpZDtcblxuICBjb25zdCBzdHlsZXMgPSBnZXRTcGVha2VyU2hvd2Nhc2VTdHlsZXMoKTtcbiAgY29uc3QgY29sb3JzID0gZ2V0U2hvd2Nhc2VDb2xvcnMoKTtcbiAgY29uc3QgaWNvbkJncyA9IGdldFNob3djYXNlSWNvbkJhY2tncm91bmRzKCk7XG5cbiAgY29uc3QgdG90YWxQYWdlcyA9IE1hdGguY2VpbChwYXJ0aWNpcGFudHMubGVuZ3RoIC8gU1BFQUtFUlNfUEVSX1BBR0UpO1xuICBjb25zdCBzdGFydEluZGV4ID0gKHBhZ2UgLSAxKSAqIFNQRUFLRVJTX1BFUl9QQUdFO1xuICBjb25zdCBlbmRJbmRleCA9IE1hdGgubWluKHN0YXJ0SW5kZXggKyBTUEVBS0VSU19QRVJfUEFHRSwgcGFydGljaXBhbnRzLmxlbmd0aCk7XG4gIGNvbnN0IGN1cnJlbnRQYWdlUGFydGljaXBhbnRzID0gcGFydGljaXBhbnRzLnNsaWNlKHN0YXJ0SW5kZXgsIGVuZEluZGV4KTtcblxuICBjb25zdCBwYWdpbmF0aW9uRm9vdGVyID0gcGFydGljaXBhbnRzLmxlbmd0aCA+IFNQRUFLRVJTX1BFUl9QQUdFICYmIChcbiAgICA8VWlFbnRpdHkgdWlUcmFuc2Zvcm09e3N0eWxlcy5wYWdpbmF0aW9ufT5cbiAgICAgIDxCdXR0b25cbiAgICAgICAgaWQ9XCJzaG93Y2FzZS1wcmV2XCJcbiAgICAgICAgdmFsdWU9XCJQcmV2XCJcbiAgICAgICAgdmFyaWFudD1cInNlY29uZGFyeVwiXG4gICAgICAgIGRpc2FibGVkPXtwYWdlIDw9IDF9XG4gICAgICAgIGZvbnRTaXplPXsxOH1cbiAgICAgICAgaWNvbj17SUNPTlMuQkFDS31cbiAgICAgICAgaWNvblRyYW5zZm9ybT17c3R5bGVzLnByZXZJY29ufVxuICAgICAgICBpY29uQmFja2dyb3VuZD17eyBjb2xvcjogZ2V0UGFnaW5hdGlvbkNvbG9yKHBhZ2UgPD0gMSkgfX1cbiAgICAgICAgY29sb3I9e2dldFBhZ2luYXRpb25Db2xvcihwYWdlIDw9IDEpfVxuICAgICAgICBsYWJlbFRyYW5zZm9ybT17c3R5bGVzLnByZXZMYWJlbH1cbiAgICAgICAgdWlUcmFuc2Zvcm09e3N0eWxlcy5wYWdpbmF0aW9uQnV0dG9ufVxuICAgICAgICBvbk1vdXNlRG93bj17KCkgPT4gc2V0UGFnZShwYWdlIC0gMSl9XG4gICAgICAvPlxuICAgICAgPExhYmVsXG4gICAgICAgIHZhbHVlPXtgUGFnZSAke3BhZ2V9LyR7dG90YWxQYWdlc31gfVxuICAgICAgICBmb250U2l6ZT17MTR9XG4gICAgICAgIGNvbG9yPXtTSE9XQ0FTRV9QQUdFX0lORElDQVRPUl9DT0xPUn1cbiAgICAgIC8+XG4gICAgICA8QnV0dG9uXG4gICAgICAgIGlkPVwic2hvd2Nhc2UtbmV4dFwiXG4gICAgICAgIHZhbHVlPVwiPGI+TmV4dDwvYj5cIlxuICAgICAgICB2YXJpYW50PVwic2Vjb25kYXJ5XCJcbiAgICAgICAgZm9udFNpemU9ezE4fVxuICAgICAgICBpY29uUmlnaHQ9e0lDT05TLk5FWFR9XG4gICAgICAgIGljb25SaWdodFRyYW5zZm9ybT17c3R5bGVzLm5leHRJY29ufVxuICAgICAgICBsYWJlbFRyYW5zZm9ybT17c3R5bGVzLm5leHRMYWJlbH1cbiAgICAgICAgaWNvblJpZ2h0QmFja2dyb3VuZD17e1xuICAgICAgICAgIGNvbG9yOiBnZXRQYWdpbmF0aW9uQ29sb3IocGFnZSA+PSB0b3RhbFBhZ2VzKSxcbiAgICAgICAgfX1cbiAgICAgICAgY29sb3I9e2dldFBhZ2luYXRpb25Db2xvcihwYWdlID49IHRvdGFsUGFnZXMpfVxuICAgICAgICBkaXNhYmxlZD17cGFnZSA+PSB0b3RhbFBhZ2VzfVxuICAgICAgICB1aVRyYW5zZm9ybT17c3R5bGVzLnBhZ2luYXRpb25CdXR0b259XG4gICAgICAgIG9uTW91c2VEb3duPXsoKSA9PiBzZXRQYWdlKHBhZ2UgKyAxKX1cbiAgICAgIC8+XG4gICAgPC9VaUVudGl0eT5cbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDxNb2RhbFxuICAgICAgaWQ9XCJzaG93Y2FzZVwiXG4gICAgICB0aXRsZT1cIlNQRUFLRVIgU0hPV0NBU0VcIlxuICAgICAgdGl0bGVGb250U2l6ZT17MjB9XG4gICAgICBoZWFkZXJJY29uPXtpY29uQmdzLnNob3djYXNlfVxuICAgICAgaGVhZGVySWNvblNpemU9ezI0fVxuICAgICAgaGVhZGVyTWFyZ2luQm90dG9tPXsxNn1cbiAgICAgIGNvdW50ZXJUZXh0PXtgKCR7cGFydGljaXBhbnRzLmxlbmd0aH0gU3BlYWtlcnMpYH1cbiAgICAgIGNvdW50ZXJGb250U2l6ZT17MTR9XG4gICAgICB3aWR0aD17NjUwfVxuICAgICAgaGVpZ2h0PXs2NTB9XG4gICAgICBwYWRkaW5nPXsxNn1cbiAgICAgIG9uQ2xvc2U9e29uQ2xvc2V9XG4gICAgICBmb290ZXI9e3BhZ2luYXRpb25Gb290ZXIgfHwgdW5kZWZpbmVkfVxuICAgID5cbiAgICAgIDxVaUVudGl0eSB1aVRyYW5zZm9ybT17eyBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgd2lkdGg6ICcxMDAlJyB9fT5cbiAgICAgICAgPFVpRW50aXR5XG4gICAgICAgICAgdWlUcmFuc2Zvcm09e3N0eWxlcy50b2dnbGVSb3d9XG4gICAgICAgICAgdWlCYWNrZ3JvdW5kPXt7IGNvbG9yOiBjb2xvcnMuc29mdEJsYWNrIH19XG4gICAgICAgID5cbiAgICAgICAgICA8VWlFbnRpdHkgdWlUcmFuc2Zvcm09e3sgZmxleERpcmVjdGlvbjogJ2NvbHVtbicgfX0+XG4gICAgICAgICAgICA8TGFiZWxcbiAgICAgICAgICAgICAgdmFsdWU9XCJBdXRvbWF0aWMgU2hvd2Nhc2VcIlxuICAgICAgICAgICAgICBmb250U2l6ZT17MTR9XG4gICAgICAgICAgICAgIGNvbG9yPXtjb2xvcnMud2hpdGV9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPExhYmVsXG4gICAgICAgICAgICAgIHZhbHVlPVwiU3BlYWtlcnMgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGZlYXR1cmVkIHdoZW4gdGhleSBzcGVha1wiXG4gICAgICAgICAgICAgIGZvbnRTaXplPXsxMH1cbiAgICAgICAgICAgICAgY29sb3I9e2NvbG9ycy5ncmF5fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L1VpRW50aXR5PlxuICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgIGlkPVwic2hvd2Nhc2UtZGVmYXVsdC1zcGVha2VyXCJcbiAgICAgICAgICAgIHZhbHVlPXtpc0RlZmF1bHRBY3RpdmUgPyAnQWN0aXZlJyA6ICdUdXJuIE9uJ31cbiAgICAgICAgICAgIHZhcmlhbnQ9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgICAgZGlzYWJsZWQ9e2lzRGVmYXVsdEFjdGl2ZX1cbiAgICAgICAgICAgIGZvbnRTaXplPXsxNH1cbiAgICAgICAgICAgIGNvbG9yPXtjb2xvcnMud2hpdGV9XG4gICAgICAgICAgICBpY29uPXtJQ09OUy5TVEFSfVxuICAgICAgICAgICAgaWNvblRyYW5zZm9ybT17e1xuICAgICAgICAgICAgICAuLi5zdHlsZXMuc3Rhckljb24sXG4gICAgICAgICAgICAgIGRpc3BsYXk6IGlzRGVmYXVsdEFjdGl2ZSA/ICdmbGV4JyA6ICdub25lJyxcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBpY29uQmFja2dyb3VuZD17eyBjb2xvcjogY29sb3JzLndoaXRlIH19XG4gICAgICAgICAgICB1aVRyYW5zZm9ybT17e1xuICAgICAgICAgICAgICAuLi5zdHlsZXMudG9nZ2xlQnV0dG9uLFxuICAgICAgICAgICAgICAuLi4oaXNEZWZhdWx0QWN0aXZlID8geyBib3JkZXJDb2xvcjogY29sb3JzLnRyYW5zcGFyZW50IH0gOiB7fSksXG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgb25Nb3VzZURvd249eygpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFpc0RlZmF1bHRBY3RpdmUpIHtcbiAgICAgICAgICAgICAgICBvblNldERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L1VpRW50aXR5PlxuXG4gICAgICAgIDxVaUVudGl0eSB1aVRyYW5zZm9ybT17c3R5bGVzLmxpc3RDb250YWluZXJ9PlxuICAgICAgICAgIHtwYXJ0aWNpcGFudHMubGVuZ3RoID09PSAwICYmIChcbiAgICAgICAgICAgIDxVaUVudGl0eSB1aVRyYW5zZm9ybT17c3R5bGVzLm1lc3NhZ2VDb250YWluZXJ9PlxuICAgICAgICAgICAgICA8TGFiZWxcbiAgICAgICAgICAgICAgICB2YWx1ZT1cIk5vIGN1cnJlbnQgYWN0aXZlIHBhcnRpY2lwYW50cyBpbiB0aGUgQ2FzdFwiXG4gICAgICAgICAgICAgICAgZm9udFNpemU9ezE2fVxuICAgICAgICAgICAgICAgIGNvbG9yPXtjb2xvcnMuZ3JheX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvVWlFbnRpdHk+XG4gICAgICAgICAgKX1cbiAgICAgICAgICB7Y3VycmVudFBhZ2VQYXJ0aWNpcGFudHMubWFwKHBhcnRpY2lwYW50ID0+IChcbiAgICAgICAgICAgIDxQYXJ0aWNpcGFudFJvd1xuICAgICAgICAgICAgICBrZXk9e3BhcnRpY2lwYW50LmlkZW50aXR5fVxuICAgICAgICAgICAgICBwYXJ0aWNpcGFudD17cGFydGljaXBhbnR9XG4gICAgICAgICAgICAgIGFjdGl2ZVRyYWNrU2lkPXthY3RpdmVUcmFja1NpZH1cbiAgICAgICAgICAgICAgaXNIb3ZlcmVkPXtob3ZlcmVkRHJvcGRvd24gPT09IHBhcnRpY2lwYW50LmlkZW50aXR5fVxuICAgICAgICAgICAgICBvblNlbGVjdFRyYWNrPXtvblNlbGVjdFRyYWNrfVxuICAgICAgICAgICAgICBvbkhvdmVyRW50ZXI9eygpID0+IHNldEhvdmVyZWREcm9wZG93bihwYXJ0aWNpcGFudC5pZGVudGl0eSl9XG4gICAgICAgICAgICAgIG9uSG92ZXJMZWF2ZT17KCkgPT4gc2V0SG92ZXJlZERyb3Bkb3duKHVuZGVmaW5lZCl9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICkpfVxuICAgICAgICA8L1VpRW50aXR5PlxuICAgICAgPC9VaUVudGl0eT5cbiAgICA8L01vZGFsPlxuICApO1xufVxuIl19
@@ -1,11 +1,25 @@
1
1
  import ReactEcs from '@dcl/react-ecs';
2
- import { DeepReadonlyObject, Entity, IEngine, PBVideoPlayer } from '@dcl/ecs';
3
- import { State } from '../../types';
2
+ import type { DeepReadonlyObject, Entity, IEngine, PBVideoPlayer } from '@dcl/ecs';
3
+ import type { State } from '../../types';
4
+ import { type FlattenedTrack, type Participant } from '../api';
5
+ export declare const showcaseState: {
6
+ show: boolean;
7
+ participants: Participant[];
8
+ activeTrackSid: string | undefined;
9
+ onSelectTrack: ((track: FlattenedTrack) => void) | undefined;
10
+ onSetDefault: (() => void) | undefined;
11
+ onClose: (() => void) | undefined;
12
+ };
13
+ export declare const sharePresentationState: {
14
+ show: boolean;
15
+ onClose: (() => void) | undefined;
16
+ };
4
17
  export declare function handleGetDclCastInfo(state: State): Promise<import("../api").DclCastResponse | null | undefined>;
5
- declare const DclCast: ({ engine, state, entity, video, }: {
18
+ declare const DclCast: ({ engine, state, entity, video, playerAddress, }: {
6
19
  engine: IEngine;
7
20
  state: State;
8
21
  entity: Entity;
9
22
  video: DeepReadonlyObject<PBVideoPlayer> | undefined;
23
+ playerAddress: string | undefined;
10
24
  }) => ReactEcs.JSX.Element;
11
25
  export default DclCast;
@@ -1,16 +1,41 @@
1
1
  import ReactEcs, { UiEntity } from '@dcl/react-ecs';
2
2
  import { Color4 } from '@dcl/sdk/math';
3
- import { getDclCastInfo, resetStreamKey } from '../api';
4
- import { CONTENT_URL } from '../../constants';
5
- import { Header } from '../../Header';
6
- import DclCastInfo from './DclCastInfo';
7
- import { LoadingDots } from '../../Loading';
3
+ import { getComponents } from '../../../definitions';
4
+ import { getContentUrl } from '../../constants';
5
+ import { setInterval, clearInterval } from '../../utils';
8
6
  import { Button } from '../../Button';
7
+ import { LoadingDots } from '../../Loading';
8
+ import { nextTickFunctions } from '../..';
9
+ import { LIVEKIT_STREAM_SRC } from '../LiveStream';
10
+ import { getDclCastInfo, getActiveStreams, groupTracksByParticipant, resetStreamKey, hasPresentationTrack, subscribeToPresentationTopic, consumePresentationMessages, ensurePresenterRole, } from '../api';
11
+ import { createVideoPlayerControls, isDclCast } from '../utils';
12
+ import DclCastInfo from './DclCastInfo';
13
+ import CompactDclCast from './CompactDclCast';
9
14
  import { getDclCastStyles, getDclCastColors } from './styles';
10
- import { getComponents } from '../../../definitions';
11
15
  const ICONS = {
12
- DCL_CAST_ICON: `${CONTENT_URL}/admin_toolkit/assets/icons/video-control-dcl-cast.png`,
16
+ get DCL_CAST_ICON() {
17
+ return `${getContentUrl()}/admin_toolkit/assets/icons/video-control-dcl-cast.png`;
18
+ },
19
+ get CHEVRON_UP() {
20
+ return `${getContentUrl()}/admin_toolkit/assets/icons/chevron-up.png`;
21
+ },
22
+ };
23
+ export const showcaseState = {
24
+ show: false,
25
+ participants: [],
26
+ activeTrackSid: undefined,
27
+ onSelectTrack: undefined,
28
+ onSetDefault: undefined,
29
+ onClose: undefined,
30
+ };
31
+ export const sharePresentationState = {
32
+ show: false,
33
+ onClose: undefined,
13
34
  };
35
+ let presentationSubscribed = false;
36
+ let consuming = false;
37
+ let presentationSystem = null;
38
+ let participantPollingSystem = null;
14
39
  export async function handleGetDclCastInfo(state) {
15
40
  const [error, data] = await getDclCastInfo();
16
41
  if (error) {
@@ -24,22 +49,119 @@ export async function handleGetDclCastInfo(state) {
24
49
  }
25
50
  }
26
51
  }
27
- const DclCast = ({ engine, state, entity, video, }) => {
52
+ function startPresentationSystem(engine, state) {
53
+ if (presentationSystem)
54
+ return;
55
+ presentationSubscribed = true;
56
+ subscribeToPresentationTopic();
57
+ const system = () => {
58
+ if (consuming)
59
+ return;
60
+ consuming = true;
61
+ consumePresentationMessages()
62
+ .then(latestState => {
63
+ if (latestState === 'stopped') {
64
+ state.videoControl.presentationState = undefined;
65
+ }
66
+ else if (latestState) {
67
+ state.videoControl.presentationState = latestState;
68
+ }
69
+ })
70
+ .catch(() => {
71
+ console.log('[DclCast] Failed to consume presentation messages');
72
+ })
73
+ .finally(() => {
74
+ consuming = false;
75
+ });
76
+ };
77
+ engine.addSystem(system);
78
+ presentationSystem = system;
79
+ }
80
+ function stopPresentationSystem(engine, state) {
81
+ if (presentationSystem) {
82
+ engine.removeSystem(presentationSystem);
83
+ presentationSystem = null;
84
+ }
85
+ state.videoControl.presentationState = undefined;
86
+ presentationSubscribed = false;
87
+ }
88
+ function startParticipantPolling(engine, state) {
89
+ if (participantPollingSystem)
90
+ return;
91
+ const poll = async () => {
92
+ const tracks = await getActiveStreams();
93
+ if (!tracks)
94
+ return;
95
+ showcaseState.participants = groupTracksByParticipant(tracks);
96
+ const hasPresentation = hasPresentationTrack(tracks);
97
+ if (hasPresentation && !presentationSubscribed) {
98
+ startPresentationSystem(engine, state);
99
+ }
100
+ else if (!hasPresentation && presentationSubscribed) {
101
+ stopPresentationSystem(engine, state);
102
+ }
103
+ };
104
+ poll();
105
+ participantPollingSystem = setInterval(engine, poll, 5000);
106
+ }
107
+ function stopParticipantPolling(engine, state) {
108
+ if (participantPollingSystem) {
109
+ clearInterval(engine, participantPollingSystem);
110
+ participantPollingSystem = null;
111
+ }
112
+ stopPresentationSystem(engine, state);
113
+ }
114
+ const DclCast = ({ engine, state, entity, video, playerAddress, }) => {
28
115
  const { VideoControlState } = getComponents(engine);
116
+ const controls = createVideoPlayerControls(entity, engine);
29
117
  const styles = getDclCastStyles();
30
118
  const colors = getDclCastColors();
31
119
  const [isLoading, setIsLoading] = ReactEcs.useState(false);
32
120
  const [error, setError] = ReactEcs.useState(false);
121
+ const onShowShowcaseModal = async () => {
122
+ const latestTracks = await getActiveStreams();
123
+ if (!latestTracks)
124
+ return;
125
+ console.log('[DclCast] Active tracks:', JSON.stringify(latestTracks, null, 2));
126
+ const closeModal = () => {
127
+ showcaseState.show = false;
128
+ };
129
+ showcaseState.participants = groupTracksByParticipant(latestTracks);
130
+ showcaseState.onSelectTrack = (track) => {
131
+ controls.setSource(track.sid);
132
+ showcaseState.activeTrackSid = track.sid;
133
+ state.videoControl.selectedStream = 'dcl-cast';
134
+ };
135
+ showcaseState.onSetDefault = () => {
136
+ controls.setSource(LIVEKIT_STREAM_SRC);
137
+ showcaseState.activeTrackSid = undefined;
138
+ state.videoControl.selectedStream = 'dcl-cast';
139
+ };
140
+ showcaseState.onClose = closeModal;
141
+ nextTickFunctions.push(() => {
142
+ showcaseState.show = true;
143
+ });
144
+ };
33
145
  const fetchDclCastInfo = async () => {
34
- console.log('fetching DCL cast info...');
35
146
  setIsLoading(true);
36
147
  setError(false);
37
148
  const result = await handleGetDclCastInfo(state);
38
149
  if (!result) {
39
150
  setError(true);
40
151
  }
152
+ else if (video?.src?.startsWith('livekit-video://') && !state.videoControl.selectedStream) {
153
+ state.videoControl.selectedStream = 'dcl-cast';
154
+ }
41
155
  setIsLoading(false);
42
156
  };
157
+ const onSharePresentation = () => {
158
+ sharePresentationState.onClose = () => {
159
+ sharePresentationState.show = false;
160
+ };
161
+ nextTickFunctions.push(() => {
162
+ sharePresentationState.show = true;
163
+ });
164
+ };
43
165
  const handleResetRoomId = async () => {
44
166
  setIsLoading(true);
45
167
  const [error, data] = await resetStreamKey();
@@ -55,33 +177,84 @@ const DclCast = ({ engine, state, entity, video, }) => {
55
177
  };
56
178
  ReactEcs.useEffect(() => {
57
179
  fetchDclCastInfo();
180
+ if (playerAddress) {
181
+ ensurePresenterRole(playerAddress);
182
+ }
58
183
  }, []);
184
+ const videoSrc = video?.src;
185
+ ReactEcs.useEffect(() => {
186
+ if (videoSrc?.startsWith('livekit-video://') && !state.videoControl.selectedStream) {
187
+ state.videoControl.selectedStream = 'dcl-cast';
188
+ }
189
+ }, [videoSrc]);
190
+ const isCastActive = !!(video?.src && isDclCast(video.src));
191
+ ReactEcs.useEffect(() => {
192
+ if (isCastActive) {
193
+ startParticipantPolling(engine, state);
194
+ }
195
+ else {
196
+ stopParticipantPolling(engine, state);
197
+ }
198
+ }, [isCastActive]);
199
+ ReactEcs.useEffect(() => {
200
+ if (state.videoControl.presentationState) {
201
+ state.videoControl.isMinimized = true;
202
+ }
203
+ }, [!!state.videoControl.presentationState]);
204
+ const isMinimized = state.videoControl.isMinimized;
59
205
  return (ReactEcs.createElement(UiEntity, { uiTransform: styles.fullContainer },
60
- ReactEcs.createElement(Header, { iconSrc: ICONS.DCL_CAST_ICON, title: "DCL Cast" }),
61
- ReactEcs.createElement(UiEntity, { uiTransform: styles.fullWidthWithBottomMargin },
62
- ReactEcs.createElement(UiEntity, { uiText: {
63
- value: 'Use a browser-based DCL Cast room to easily stream camera and screen feed to a screen in your scene.',
64
- fontSize: 16,
65
- color: Color4.fromHexString('#A09BA8'),
66
- textAlign: 'top-left',
67
- textWrap: 'wrap',
68
- }, uiTransform: styles.marginBottomSmall })),
69
- isLoading && (ReactEcs.createElement(LoadingDots, { uiTransform: { minHeight: 400 }, engine: engine })),
70
- error && (ReactEcs.createElement(UiEntity, { uiTransform: styles.columnCentered },
71
- ReactEcs.createElement(UiEntity, { uiText: {
72
- value: '<b>Failed to fetch DCL Cast info</b>',
73
- fontSize: 16,
74
- color: Color4.White(),
75
- }, uiTransform: { margin: { bottom: 8 } } }),
76
- ReactEcs.createElement(UiEntity, { uiText: {
77
- value: 'Please retry.',
78
- fontSize: 16,
79
- color: Color4.Gray(),
80
- } }),
81
- ReactEcs.createElement(Button, { id: "dcl_cast_retry", value: "<b>Retry</b>", variant: "secondary", fontSize: 16, color: colors.white, onMouseDown: () => {
82
- handleGetDclCastInfo(state);
83
- }, uiTransform: styles.retryButton }))),
84
- !isLoading && !error && (ReactEcs.createElement(DclCastInfo, { state: state, entity: entity, engine: engine, video: video, onResetRoomId: handleResetRoomId }))));
206
+ ReactEcs.createElement(UiEntity, { uiTransform: { display: isMinimized ? 'flex' : 'none', width: '100%' } },
207
+ ReactEcs.createElement(CompactDclCast, { engine: engine, state: state, entity: entity, video: video, onShowShowcaseModal: onShowShowcaseModal })),
208
+ ReactEcs.createElement(UiEntity, { uiTransform: {
209
+ display: isMinimized ? 'none' : 'flex',
210
+ flexDirection: 'column',
211
+ width: '100%',
212
+ } },
213
+ ReactEcs.createElement(UiEntity, { uiTransform: styles.rowCenterSpaceBetween },
214
+ ReactEcs.createElement(UiEntity, { uiTransform: styles.rowCenter },
215
+ ReactEcs.createElement(UiEntity, { uiTransform: styles.headerIcon, uiBackground: {
216
+ textureMode: 'stretch',
217
+ texture: { src: ICONS.DCL_CAST_ICON },
218
+ } }),
219
+ ReactEcs.createElement(UiEntity, { uiText: {
220
+ value: '<b>DCL Cast</b>',
221
+ fontSize: 24,
222
+ color: Color4.White(),
223
+ textAlign: 'middle-left',
224
+ }, uiTransform: { margin: { left: 10 } } })),
225
+ ReactEcs.createElement(UiEntity, { onMouseDown: () => {
226
+ state.videoControl.isMinimized = true;
227
+ }, uiTransform: styles.chevronButton, uiBackground: {
228
+ textureMode: 'stretch',
229
+ color: Color4.White(),
230
+ texture: {
231
+ src: ICONS.CHEVRON_UP,
232
+ },
233
+ } })),
234
+ ReactEcs.createElement(UiEntity, { uiTransform: styles.fullWidthWithBottomMargin },
235
+ ReactEcs.createElement(UiEntity, { uiText: {
236
+ value: 'Use a browser-based DCL Cast room to easily stream camera and screen feed to a screen in your scene.',
237
+ fontSize: 16,
238
+ color: Color4.fromHexString('#A09BA8'),
239
+ textAlign: 'top-left',
240
+ textWrap: 'wrap',
241
+ }, uiTransform: styles.marginBottomSmall })),
242
+ isLoading && (ReactEcs.createElement(LoadingDots, { uiTransform: styles.loadingContainer, engine: engine })),
243
+ error && (ReactEcs.createElement(UiEntity, { uiTransform: styles.columnCentered },
244
+ ReactEcs.createElement(UiEntity, { uiText: {
245
+ value: '<b>Failed to fetch DCL Cast info</b>',
246
+ fontSize: 16,
247
+ color: Color4.White(),
248
+ }, uiTransform: styles.marginBottomSmall }),
249
+ ReactEcs.createElement(UiEntity, { uiText: {
250
+ value: 'Please retry.',
251
+ fontSize: 16,
252
+ color: Color4.Gray(),
253
+ } }),
254
+ ReactEcs.createElement(Button, { id: "dcl_cast_retry", value: "<b>Retry</b>", variant: "secondary", fontSize: 16, color: colors.white, onMouseDown: () => {
255
+ handleGetDclCastInfo(state);
256
+ }, uiTransform: styles.retryButton }))),
257
+ !isLoading && !error && (ReactEcs.createElement(DclCastInfo, { state: state, entity: entity, engine: engine, video: video, onResetRoomId: handleResetRoomId, onShowShowcaseModal: onShowShowcaseModal, onSharePresentation: onSharePresentation })))));
85
258
  };
86
259
  export default DclCast;
87
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYWRtaW4tdG9vbGtpdC11aS9WaWRlb0NvbnRyb2wvRGNsQ2FzdC9pbmRleC50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxRQUFRLEVBQUUsRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVwRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXZDLE9BQU8sRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ3hELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUc5QyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3RDLE9BQU8sV0FBVyxNQUFNLGVBQWUsQ0FBQztBQUN4QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDdEMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQzlELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVyRCxNQUFNLEtBQUssR0FBRztJQUNaLGFBQWEsRUFBRSxHQUFHLFdBQVcsd0RBQXdEO0NBQ3RGLENBQUM7QUFFRixNQUFNLENBQUMsS0FBSyxVQUFVLG9CQUFvQixDQUFDLEtBQVk7SUFDckQsTUFBTSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxNQUFNLGNBQWMsRUFBRSxDQUFDO0lBQzdDLElBQUksS0FBSyxFQUFFLENBQUM7UUFDVixPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztTQUFNLENBQUM7UUFDTixJQUFJLElBQUksRUFBRSxDQUFDO1lBQ1QsS0FBSyxDQUFD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QUFDLGNBQWM7WUFDMUMsdUJBQUMsUUFBUSxJQUNQLE1BQU0sRUFBRTtvQkFDTixLQUFLLEVBQUUsc0NBQXNDO29CQUM3QyxRQUFRLEVBQUUsRUFBRTtvQkFDWixLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUssRUFBRTtpQkFDdEIsRUFDRCxXQUFXLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FDdEM7WUFDRix1QkFBQyxRQUFRLElBQ1AsTUFBTSxFQUFFO29CQUNOLEtBQUssRUFBRSxlQUFlO29CQUN0QixRQUFRLEVBQUUsRUFBRTtvQkFDWixLQUFLLEVBQUUsTUFBTSxDQUFDLElBQUksRUFBRTtpQkFDckIsR0FDRDtZQUNGLHVCQUFDLE1BQU0sSUFDTCxFQUFFLEVBQUMsZ0JBQWdCLEVBQ25CLEtBQUssRUFBQyxjQUFjLEVBQ3BCLE9BQU8sRUFBQyxXQUFXLEVBQ25CLFFBQVEsRUFBRSxFQUFFLEVBQ1osS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLEVBQ25CLFdBQVcsRUFBRSxHQUFHLEVBQUU7b0JBQ2hCLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUM5QixDQUFDLEVBQ0QsV0FBVyxFQUFFLE1BQU0sQ0FBQyxXQUFXLEdBQy9CLENBQ08sQ0FDWjtRQUVBLENBQUMsU0FBUyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQ3ZCLHVCQUFDLFdBQVcsSUFDVixLQUFLLEVBQUUsS0FBSyxFQUNaLE1BQU0sRUFBRSxNQUFNLEVBQ2QsTUFBTSxFQUFFLE1BQU0sRUFDZCxLQUFLLEVBQUUsS0FBSyxFQUNaLGFBQWEsRUFBRSxpQkFBaUIsR0FDaEMsQ0FDSCxDQUNRLENBQ1osQ0FBQztBQUNKLENBQUMsQ0FBQztBQUVGLGVBQWUsT0FBTyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0RWNzLCB7IFVpRW50aXR5IH0gZnJvbSAnQGRjbC9yZWFjdC1lY3MnO1xuaW1wb3J0IHsgRGVlcFJlYWRvbmx5T2JqZWN0LCBFbnRpdHksIElFbmdpbmUsIFBCVmlkZW9QbGF5ZXIgfSBmcm9tICdAZGNsL2Vjcyc7XG5pbXBvcnQgeyBDb2xvcjQgfSBmcm9tICdAZGNsL3Nkay9tYXRoJztcblxuaW1wb3J0IHsgZ2V0RGNsQ2FzdEluZm8sIHJlc2V0U3RyZWFtS2V5IH0gZnJvbSAnLi4vYXBpJztcbmltcG9ydCB7IENPTlRFTlRfVVJMIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IFN0YXRlIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuXG5pbXBvcnQgeyBIZWFkZXIgfSBmcm9tICcuLi8uLi9IZWFkZXInO1xuaW1wb3J0IERjbENhc3RJbmZvIGZyb20gJy4vRGNsQ2FzdEluZm8nO1xuaW1wb3J0IHsgTG9hZGluZ0RvdHMgfSBmcm9tICcuLi8uLi9Mb2FkaW5nJztcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gJy4uLy4uL0J1dHRvbic7XG5pbXBvcnQgeyBnZXREY2xDYXN0U3R5bGVzLCBnZXREY2xDYXN0Q29sb3JzIH0gZnJvbSAnLi9zdHlsZXMnO1xuaW1wb3J0IHsgZ2V0Q29tcG9uZW50cyB9IGZyb20gJy4uLy4uLy4uL2RlZmluaXRpb25zJztcblxuY29uc3QgSUNPTlMgPSB7XG4gIERDTF9DQVNUX0lDT046IGAke0NPTlRFTlRfVVJMfS9hZG1pbl90b29sa2l0L2Fzc2V0cy9pY29ucy92aWRlby1jb250cm9sLWRjbC1jYXN0LnBuZ2AsXG59O1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaGFuZGxlR2V0RGNsQ2FzdEluZm8oc3RhdGU6IFN0YXRlKSB7XG4gIGNvbnN0IFtlcnJvciwgZGF0YV0gPSBhd2FpdCBnZXREY2xDYXN0SW5mbygpO1xuICBpZiAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfSBlbHNlIHtcbiAgICBpZiAoZGF0YSkge1xuICAgICAgc3RhdGUudmlkZW9Db250cm9sLmRjbENhc3QgPSBkYXRhO1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICB9XG59XG5cbmNvbnN0IERjbENhc3QgPSAoe1xuICBlbmdpbmUsXG4gIHN0YXRlLFxuICBlbnRpdHksXG4gIHZpZGVvLFxufToge1xuICBlbmdpbmU6IElFbmdpbmU7XG4gIHN0YXRlOiBTdGF0ZTtcbiAgZW50aXR5OiBFbnRpdHk7XG4gIHZpZGVvOiBEZWVwUmVhZG9ubHlPYmplY3Q8UEJWaWRlb1BsYXllcj4gfCB1bmRlZmluZWQ7XG59KSA9PiB7XG4gIGNvbnN0IHsgVmlkZW9Db250cm9sU3RhdGUgfSA9IGdldENvbXBvbmVudHMoZW5naW5lKTtcbiAgY29uc3Qgc3R5bGVzID0gZ2V0RGNsQ2FzdFN0eWxlcygpO1xuICBjb25zdCBjb2xvcnMgPSBnZXREY2xDYXN0Q29sb3JzKCk7XG4gIGNvbnN0IFtpc0xvYWRpbmcsIHNldElzTG9hZGluZ10gPSBSZWFjdEVjcy51c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtlcnJvciwgc2V0RXJyb3JdID0gUmVhY3RFY3MudXNlU3RhdGUoZmFsc2UpO1xuXG4gIGNvbnN0IGZldGNoRGNsQ2FzdEluZm8gPSBhc3luYyAoKSA9PiB7XG4gICAgY29uc29sZS5sb2coJ2ZldGNoaW5nIERDTCBjYXN0IGluZm8uLi4nKTtcbiAgICBzZXRJc0xvYWRpbmcodHJ1ZSk7XG4gICAgc2V0RXJyb3IoZmFsc2UpO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaGFuZGxlR2V0RGNsQ2FzdEluZm8oc3RhdGUpO1xuXG4gICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgIHNldEVycm9yKHRydWUpO1xuICAgIH1cblxuICAgIHNldElzTG9hZGluZyhmYWxzZSk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlUmVzZXRSb29tSWQgPSBhc3luYyAoKSA9PiB7XG4gICAgc2V0SXNMb2FkaW5nKHRydWUpO1xuICAgIGNvbnN0IFtlcnJvciwgZGF0YV0gPSBhd2FpdCByZXNldFN0cmVhbUtleSgpO1xuICAgIGlmIChlcnJvcikge1xuICAgICAgc2V0SXNMb2FkaW5nKGZhbHNlKTtcbiAgICAgIHNldEVycm9yKHRydWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB2aWRlb0NvbnRyb2wgPSBWaWRlb0NvbnRyb2xTdGF0ZS5nZXRNdXRhYmxlKHN0YXRlLmFkbWluVG9vbGtpdFVpRW50aXR5KTtcbiAgICAgIHZpZGVvQ29udHJvbC5lbmRzQXQgPSBkYXRhPy5lbmRzQXQ7XG4gICAgICBmZXRjaERjbENhc3RJbmZvKCk7XG4gICAgfVxuICB9O1xuXG4gIFJlYWN0RWNzLnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgZmV0Y2hEY2xDYXN0SW5mbygpO1xuICB9LCBbXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8VWlFbnRpdHkgdWlUcmFuc2Zvcm09e3N0eWxlcy5mdWxsQ29udGFpbmVyfT5cbiAgICAgIDxIZWFkZXJcbiAgICAgICAgaWNvblNyYz17SUNPTlMuRENMX0NBU1RfSUNPTn1cbiAgICAgICAgdGl0bGU9XCJEQ0wgQ2FzdFwiXG4gICAgICAvPlxuICAgICAgPFVpRW50aXR5IHVpVHJhbnNmb3JtPXtzdHlsZXMuZnVsbFdpZHRoV2l0aEJvdHRvbU1hcmdpbn0+XG4gICAgICAgIDxVaUVudGl0eVxuICAgICAgICAgIHVpVGV4dD17e1xuICAgICAgICAgICAgdmFsdWU6XG4gICAgICAgICAgICAgICdVc2UgYSBicm93c2VyLWJhc2VkIERDTCBDYXN0IHJvb20gdG8gZWFzaWx5IHN0cmVhbSBjYW1lcmEgYW5kIHNjcmVlbiBmZWVkIHRvIGEgc2NyZWVuIGluIHlvdXIgc2NlbmUuJyxcbiAgICAgICAgICAgIGZvbnRTaXplOiAxNixcbiAgICAgICAgICAgIGNvbG9yOiBDb2xvcjQuZnJvbUhleFN0cmluZygnI0EwOUJBOCcpLFxuXG4gICAgICAgICAgICB0ZXh0QWxpZ246ICd0b3AtbGVmdCcsXG4gICAgICAgICAgICB0ZXh0V3JhcDogJ3dyYXAnLFxuICAgICAgICAgIH19XG4gICAgICAgICAgdWlUcmFuc2Zvcm09e3N0eWxlcy5tYXJnaW5Cb3R0b21TbWFsbH1cbiAgICAgICAgLz5cbiAgICAgIDwvVWlFbnRpdHk+XG4gICAgICB7aXNMb2FkaW5nICYmIChcbiAgICAgICAgPExvYWRpbmdEb3RzXG4gICAgICAgICAgdWlUcmFuc2Zvcm09e3sgbWluSGVpZ2h0OiA0MDAgfX1cbiAgICAgICAgICBlbmdpbmU9e2VuZ2luZX1cbiAgICAgICAgLz5cbiAgICAgICl9XG4gICAgICB7ZXJyb3IgJiYgKFxuICAgICAgICA8VWlFbnRpdHkgdWlUcmFuc2Zvcm09e3N0eWxlcy5jb2x1bW5DZW50ZXJlZH0+XG4gICAgICAgICAgPFVpRW50aXR5XG4gICAgICAgICAgICB1aVRleHQ9e3tcbiAgICAgICAgICAgICAgdmFsdWU6ICc8Yj5GYWlsZWQgdG8gZmV0Y2ggRENMIENhc3QgaW5mbzwvYj4nLFxuICAgICAgICAgICAgICBmb250U2l6ZTogMTYsXG4gICAgICAgICAgICAgIGNvbG9yOiBDb2xvcjQuV2hpdGUoKSxcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICB1aVRyYW5zZm9ybT17eyBtYXJnaW46IHsgYm90dG9tOiA4IH0gfX1cbiAgICAgICAgICAvPlxuICAgICAgICAgIDxVaUVudGl0eVxuICAgICAgICAgICAgdWlUZXh0PXt7XG4gICAgICAgICAgICAgIHZhbHVlOiAnUGxlYXNlIHJldHJ5LicsXG4gICAgICAgICAgICAgIGZvbnRTaXplOiAxNixcbiAgICAgICAgICAgICAgY29sb3I6IENvbG9yNC5HcmF5KCksXG4gICAgICAgICAgICB9fVxuICAgICAgICAgIC8+XG4gICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgaWQ9XCJkY2xfY2FzdF9yZXRyeVwiXG4gICAgICAgICAgICB2YWx1ZT1cIjxiPlJldHJ5PC9iPlwiXG4gICAgICAgICAgICB2YXJpYW50PVwic2Vjb25kYXJ5XCJcbiAgICAgICAgICAgIGZvbnRTaXplPXsxNn1cbiAgICAgICAgICAgIGNvbG9yPXtjb2xvcnMud2hpdGV9XG4gICAgICAgICAgICBvbk1vdXNlRG93bj17KCkgPT4ge1xuICAgICAgICAgICAgICBoYW5kbGVHZXREY2xDYXN0SW5mbyhzdGF0ZSk7XG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgdWlUcmFuc2Zvcm09e3N0eWxlcy5yZXRyeUJ1dHRvbn1cbiAgICAgICAgICAvPlxuICAgICAgICA8L1VpRW50aXR5PlxuICAgICAgKX1cblxuICAgICAgeyFpc0xvYWRpbmcgJiYgIWVycm9yICYmIChcbiAgICAgICAgPERjbENhc3RJbmZvXG4gICAgICAgICAgc3RhdGU9e3N0YXRlfVxuICAgICAgICAgIGVudGl0eT17ZW50aXR5fVxuICAgICAgICAgIGVuZ2luZT17ZW5naW5lfVxuICAgICAgICAgIHZpZGVvPXt2aWRlb31cbiAgICAgICAgICBvblJlc2V0Um9vbUlkPXtoYW5kbGVSZXNldFJvb21JZH1cbiAgICAgICAgLz5cbiAgICAgICl9XG4gICAgPC9VaUVudGl0eT5cbiAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IERjbENhc3Q7XG4iXX0=
260
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYWRtaW4tdG9vbGtpdC11aS9WaWRlb0NvbnRyb2wvRGNsQ2FzdC9pbmRleC50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxRQUFRLEVBQUUsRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVwRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFaEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDekQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN0QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUMxQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUNMLGNBQWMsRUFDZCxnQkFBZ0IsRUFDaEIsd0JBQXdCLEVBQ3hCLGNBQWMsRUFDZCxvQkFBb0IsRUFDcEIsNEJBQTRCLEVBQzVCLDJCQUEyQixFQUMzQixtQkFBbUIsR0FHcEIsTUFBTSxRQUFRLENBQUM7QUFDaEIsT0FBTyxFQUFFLHlCQUF5QixFQUFFLFNBQVMsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNoRSxPQUFPLFdBQVcsTUFBTSxlQUFlLENBQUM7QUFDeEMsT0FBTyxjQUFjLE1BQU0sa0JBQWtCLENBQUM7QUFDOUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRTlELE1BQU0sS0FBSyxHQUFHO0lBQ1osSUFBSSxhQUFhO1FBQ2YsT0FBTyxHQUFHLGFB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QUUsTUFBTSxFQUNkLE1BQU0sRUFBRSxNQUFNLEVBQ2QsS0FBSyxFQUFFLEtBQUssRUFDWixhQUFhLEVBQUUsaUJBQWlCLEVBQ2hDLG1CQUFtQixFQUFFLG1CQUFtQixFQUN4QyxtQkFBbUIsRUFBRSxtQkFBbUIsR0FDeEMsQ0FDSCxDQUNRLENBQ0YsQ0FDWixDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUYsZUFBZSxPQUFPLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3RFY3MsIHsgVWlFbnRpdHkgfSBmcm9tICdAZGNsL3JlYWN0LWVjcyc7XG5pbXBvcnQgdHlwZSB7IERlZXBSZWFkb25seU9iamVjdCwgRW50aXR5LCBJRW5naW5lLCBQQlZpZGVvUGxheWVyIH0gZnJvbSAnQGRjbC9lY3MnO1xuaW1wb3J0IHsgQ29sb3I0IH0gZnJvbSAnQGRjbC9zZGsvbWF0aCc7XG5pbXBvcnQgeyBnZXRDb21wb25lbnRzIH0gZnJvbSAnLi4vLi4vLi4vZGVmaW5pdGlvbnMnO1xuaW1wb3J0IHsgZ2V0Q29udGVudFVybCB9IGZyb20gJy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgdHlwZSB7IFN0YXRlIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgc2V0SW50ZXJ2YWwsIGNsZWFySW50ZXJ2YWwgfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tICcuLi8uLi9CdXR0b24nO1xuaW1wb3J0IHsgTG9hZGluZ0RvdHMgfSBmcm9tICcuLi8uLi9Mb2FkaW5nJztcbmltcG9ydCB7IG5leHRUaWNrRnVuY3Rpb25zIH0gZnJvbSAnLi4vLi4nO1xuaW1wb3J0IHsgTElWRUtJVF9TVFJFQU1fU1JDIH0gZnJvbSAnLi4vTGl2ZVN0cmVhbSc7XG5pbXBvcnQge1xuICBnZXREY2xDYXN0SW5mbyxcbiAgZ2V0QWN0aXZlU3RyZWFtcyxcbiAgZ3JvdXBUcmFja3NCeVBhcnRpY2lwYW50LFxuICByZXNldFN0cmVhbUtleSxcbiAgaGFzUHJlc2VudGF0aW9uVHJhY2ssXG4gIHN1YnNjcmliZVRvUHJlc2VudGF0aW9uVG9waWMsXG4gIGNvbnN1bWVQcmVzZW50YXRpb25NZXNzYWdlcyxcbiAgZW5zdXJlUHJlc2VudGVyUm9sZSxcbiAgdHlwZSBGbGF0dGVuZWRUcmFjayxcbiAgdHlwZSBQYXJ0aWNpcGFudCxcbn0gZnJvbSAnLi4vYXBpJztcbmltcG9ydCB7IGNyZWF0ZVZpZGVvUGxheWVyQ29udHJvbHMsIGlzRGNsQ2FzdCB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCBEY2xDYXN0SW5mbyBmcm9tICcuL0RjbENhc3RJbmZvJztcbmltcG9ydCBDb21wYWN0RGNsQ2FzdCBmcm9tICcuL0NvbXBhY3REY2xDYXN0JztcbmltcG9ydCB7IGdldERjbENhc3RTdHlsZXMsIGdldERjbENhc3RDb2xvcnMgfSBmcm9tICcuL3N0eWxlcyc7XG5cbmNvbnN0IElDT05TID0ge1xuICBnZXQgRENMX0NBU1RfSUNPTigpIHtcbiAgICByZXR1cm4gYCR7Z2V0Q29udGVudFVybCgpfS9hZG1pbl90b29sa2l0L2Fzc2V0cy9pY29ucy92aWRlby1jb250cm9sLWRjbC1jYXN0LnBuZ2A7XG4gIH0sXG4gIGdldCBDSEVWUk9OX1VQKCkge1xuICAgIHJldHVybiBgJHtnZXRDb250ZW50VXJsKCl9L2FkbWluX3Rvb2xraXQvYXNzZXRzL2ljb25zL2NoZXZyb24tdXAucG5nYDtcbiAgfSxcbn07XG5cbmV4cG9ydCBjb25zdCBzaG93Y2FzZVN0YXRlOiB7XG4gIHNob3c6IGJvb2xlYW47XG4gIHBhcnRpY2lwYW50czogUGFydGljaXBhbnRbXTtcbiAgYWN0aXZlVHJhY2tTaWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgb25TZWxlY3RUcmFjazogKCh0cmFjazogRmxhdHRlbmVkVHJhY2spID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xuICBvblNldERlZmF1bHQ6ICgoKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDtcbiAgb25DbG9zZTogKCgpID0+IHZvaWQpIHwgdW5kZWZpbmVkO1xufSA9IHtcbiAgc2hvdzogZmFsc2UsXG4gIHBhcnRpY2lwYW50czogW10sXG4gIGFjdGl2ZVRyYWNrU2lkOiB1bmRlZmluZWQsXG4gIG9uU2VsZWN0VHJhY2s6IHVuZGVmaW5lZCxcbiAgb25TZXREZWZhdWx0OiB1bmRlZmluZWQsXG4gIG9uQ2xvc2U6IHVuZGVmaW5lZCxcbn07XG5cbmV4cG9ydCBjb25zdCBzaGFyZVByZXNlbnRhdGlvblN0YXRlOiB7XG4gIHNob3c6IGJvb2xlYW47XG4gIG9uQ2xvc2U6ICgoKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDtcbn0gPSB7XG4gIHNob3c6IGZhbHNlLFxuICBvbkNsb3NlOiB1bmRlZmluZWQsXG59O1xuXG5sZXQgcHJlc2VudGF0aW9uU3Vic2NyaWJlZCA9IGZhbHNlO1xubGV0IGNvbnN1bWluZyA9IGZhbHNlO1xubGV0IHByZXNlbnRhdGlvblN5c3RlbTogKCgpID0+IHZvaWQpIHwgbnVsbCA9IG51bGw7XG5sZXQgcGFydGljaXBhbnRQb2xsaW5nU3lzdGVtOiAoKGR0OiBudW1iZXIpID0+IHZvaWQpIHwgbnVsbCA9IG51bGw7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBoYW5kbGVHZXREY2xDYXN0SW5mbyhzdGF0ZTogU3RhdGUpIHtcbiAgY29uc3QgW2Vycm9yLCBkYXRhXSA9IGF3YWl0IGdldERjbENhc3RJbmZvKCk7XG4gIGlmIChlcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgIHJldHVybiBudWxsO1xuICB9IGVsc2Uge1xuICAgIGlmIChkYXRhKSB7XG4gICAgICBzdGF0ZS52aWRlb0NvbnRyb2wuZGNsQ2FzdCA9IGRhdGE7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gc3RhcnRQcmVzZW50YXRpb25TeXN0ZW0oZW5naW5lOiBJRW5naW5lLCBzdGF0ZTogU3RhdGUpOiB2b2lkIHtcbiAgaWYgKHByZXNlbnRhdGlvblN5c3RlbSkgcmV0dXJuOyAvLyBBbHJlYWR5IHJ1bm5pbmdcbiAgcHJlc2VudGF0aW9uU3Vic2NyaWJlZCA9IHRydWU7XG4gIHN1YnNjcmliZVRvUHJlc2VudGF0aW9uVG9waWMoKTtcblxuICBjb25zdCBzeXN0ZW0gPSAoKSA9PiB7XG4gICAgaWYgKGNvbnN1bWluZykgcmV0dXJuOyAvLyBQcmV2ZW50IGNvbmN1cnJlbnQgcmVxdWVzdHNcbiAgICBjb25zdW1pbmcgPSB0cnVlO1xuICAgIGNvbnN1bWVQcmVzZW50YXRpb25NZXNzYWdlcygpXG4gICAgICAudGhlbihsYXRlc3RTdGF0ZSA9PiB7XG4gICAgICAgIGlmIChsYXRlc3RTdGF0ZSA9PT0gJ3N0b3BwZWQnKSB7XG4gICAgICAgICAgc3RhdGUudmlkZW9Db250cm9sLnByZXNlbnRhdGlvblN0YXRlID0gdW5kZWZpbmVkO1xuICAgICAgICB9IGVsc2UgaWYgKGxhdGVzdFN0YXRlKSB7XG4gICAgICAgICAgc3RhdGUudmlkZW9Db250cm9sLnByZXNlbnRhdGlvblN0YXRlID0gbGF0ZXN0U3RhdGU7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKCkgPT4ge1xuICAgICAgICAvLyBTaWxlbnRseSBpZ25vcmUg4oCUIHdpbGwgcmV0cnkgbmV4dCBmcmFtZVxuICAgICAgICBjb25zb2xlLmxvZygnW0RjbENhc3RdIEZhaWxlZCB0byBjb25zdW1lIHByZXNlbnRhdGlvbiBtZXNzYWdlcycpO1xuICAgICAgfSlcbiAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgY29uc3VtaW5nID0gZmFsc2U7XG4gICAgICB9KTtcbiAgfTtcblxuICBlbmdpbmUuYWRkU3lzdGVtKHN5c3RlbSk7XG4gIHByZXNlbnRhdGlvblN5c3RlbSA9IHN5c3RlbTtcbn1cblxuZnVuY3Rpb24gc3RvcFByZXNlbnRhdGlvblN5c3RlbShlbmdpbmU6IElFbmdpbmUsIHN0YXRlOiBTdGF0ZSk6IHZvaWQge1xuICBpZiAocHJlc2VudGF0aW9uU3lzdGVtKSB7XG4gICAgZW5naW5lLnJlbW92ZVN5c3RlbShwcmVzZW50YXRpb25TeXN0ZW0pO1xuICAgIHByZXNlbnRhdGlvblN5c3RlbSA9IG51bGw7XG4gIH1cbiAgc3RhdGUudmlkZW9Db250cm9sLnByZXNlbnRhdGlvblN0YXRlID0gdW5kZWZpbmVkO1xuICBwcmVzZW50YXRpb25TdWJzY3JpYmVkID0gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHN0YXJ0UGFydGljaXBhbnRQb2xsaW5nKGVuZ2luZTogSUVuZ2luZSwgc3RhdGU6IFN0YXRlKTogdm9pZCB7XG4gIGlmIChwYXJ0aWNpcGFudFBvbGxpbmdTeXN0ZW0pIHJldHVybjsgLy8gQWxyZWFkeSBwb2xsaW5nXG5cbiAgY29uc3QgcG9sbCA9IGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB0cmFja3MgPSBhd2FpdCBnZXRBY3RpdmVTdHJlYW1zKCk7XG4gICAgaWYgKCF0cmFja3MpIHJldHVybjtcblxuICAgIC8vIERlYnVnOiBsb2cgdHJhY2tzIG9uIGVhY2ggcG9sbCB0byByZXZpZXcgcHJlc2VudGF0aW9uIGJvdCBtZXRhZGF0YVxuICAgIC8vIGNvbnNvbGUubG9nKCdbRGNsQ2FzdF0gUG9sbCB0cmFja3M6JywgSlNPTi5zdHJpbmdpZnkodHJhY2tzLCBudWxsLCAyKSk7XG5cbiAgICAvLyBLZWVwIHNob3djYXNlIG1vZGFsIGRhdGEgZnJlc2hcbiAgICBzaG93Y2FzZVN0YXRlLnBhcnRpY2lwYW50cyA9IGdyb3VwVHJhY2tzQnlQYXJ0aWNpcGFudCh0cmFja3MpO1xuXG4gICAgLy8gQ2hlY2sgZm9yIHByZXNlbnRhdGlvbiB0cmFja1xuICAgIGNvbnN0IGhhc1ByZXNlbnRhdGlvbiA9IGhhc1ByZXNlbnRhdGlvblRyYWNrKHRyYWNrcyk7XG5cbiAgICAvLyBjb25zb2xlLmxvZyhgW0RjbENhc3RdIFByZXNlbnRhdGlvbiB0cmFjayAke2hhc1ByZXNlbnRhdGlvbiA/ICdmb3VuZCcgOiAnbm90IGZvdW5kJ30gaW4gcG9sbGApO1xuXG4gICAgaWYgKGhhc1ByZXNlbnRhdGlvbiAmJiAhcHJlc2VudGF0aW9uU3Vic2NyaWJlZCkge1xuICAgICAgc3RhcnRQcmVzZW50YXRpb25TeXN0ZW0oZW5naW5lLCBzdGF0ZSk7XG4gICAgfSBlbHNlIGlmICghaGFzUHJlc2VudGF0aW9uICYmIHByZXNlbnRhdGlvblN1YnNjcmliZWQpIHtcbiAgICAgIHN0b3BQcmVzZW50YXRpb25TeXN0ZW0oZW5naW5lLCBzdGF0ZSk7XG4gICAgfVxuICB9O1xuXG4gIC8vIFBvbGwgaW1tZWRpYXRlbHksIHRoZW4gZXZlcnkgNSBzZWNvbmRzXG4gIHBvbGwoKTtcbiAgcGFydGljaXBhbnRQb2xsaW5nU3lzdGVtID0gc2V0SW50ZXJ2YWwoZW5naW5lLCBwb2xsLCA1MDAwKTtcbn1cblxuZnVuY3Rpb24gc3RvcFBhcnRpY2lwYW50UG9sbGluZyhlbmdpbmU6IElFbmdpbmUsIHN0YXRlOiBTdGF0ZSk6IHZvaWQge1xuICBpZiAocGFydGljaXBhbnRQb2xsaW5nU3lzdGVtKSB7XG4gICAgY2xlYXJJbnRlcnZhbChlbmdpbmUsIHBhcnRpY2lwYW50UG9sbGluZ1N5c3RlbSk7XG4gICAgcGFydGljaXBhbnRQb2xsaW5nU3lzdGVtID0gbnVsbDtcbiAgfVxuICBzdG9wUHJlc2VudGF0aW9uU3lzdGVtKGVuZ2luZSwgc3RhdGUpO1xufVxuXG5jb25zdCBEY2xDYXN0ID0gKHtcbiAgZW5naW5lLFxuICBzdGF0ZSxcbiAgZW50aXR5LFxuICB2aWRlbyxcbiAgcGxheWVyQWRkcmVzcyxcbn06IHtcbiAgZW5naW5lOiBJRW5naW5lO1xuICBzdGF0ZTogU3RhdGU7XG4gIGVudGl0eTogRW50aXR5O1xuICB2aWRlbzogRGVlcFJlYWRvbmx5T2JqZWN0PFBCVmlkZW9QbGF5ZXI+IHwgdW5kZWZpbmVkO1xuICBwbGF5ZXJBZGRyZXNzOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59KSA9PiB7XG4gIGNvbnN0IHsgVmlkZW9Db250cm9sU3RhdGUgfSA9IGdldENvbXBvbmVudHMoZW5naW5lKTtcbiAgY29uc3QgY29udHJvbHMgPSBjcmVhdGVWaWRlb1BsYXllckNvbnRyb2xzKGVudGl0eSwgZW5naW5lKTtcbiAgY29uc3Qgc3R5bGVzID0gZ2V0RGNsQ2FzdFN0eWxlcygpO1xuICBjb25zdCBjb2xvcnMgPSBnZXREY2xDYXN0Q29sb3JzKCk7XG4gIGNvbnN0IFtpc0xvYWRpbmcsIHNldElzTG9hZGluZ10gPSBSZWFjdEVjcy51c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtlcnJvciwgc2V0RXJyb3JdID0gUmVhY3RFY3MudXNlU3RhdGUoZmFsc2UpO1xuXG4gIGNvbnN0IG9uU2hvd1Nob3djYXNlTW9kYWwgPSBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgbGF0ZXN0VHJhY2tzID0gYXdhaXQgZ2V0QWN0aXZlU3RyZWFtcygpO1xuICAgIGlmICghbGF0ZXN0VHJhY2tzKSByZXR1cm47XG5cbiAgICAvLyBEZWJ1ZzogbG9nIGFsbCB0cmFjayBkYXRhIHRvIHJldmlldyBwcmVzZW50YXRpb24gYm90IG1ldGFkYXRhXG4gICAgY29uc29sZS5sb2coJ1tEY2xDYXN0XSBBY3RpdmUgdHJhY2tzOicsIEpTT04uc3RyaW5naWZ5KGxhdGVzdFRyYWNrcywgbnVsbCwgMikpO1xuXG4gICAgY29uc3QgY2xvc2VNb2RhbCA9ICgpID0+IHtcbiAgICAgIHNob3djYXNlU3RhdGUuc2hvdyA9IGZhbHNlO1xuICAgIH07XG5cbiAgICBzaG93Y2FzZVN0YXRlLnBhcnRpY2lwYW50cyA9IGdyb3VwVHJhY2tzQnlQYXJ0aWNpcGFudChsYXRlc3RUcmFja3MpO1xuXG4gICAgc2hvd2Nhc2VTdGF0ZS5vblNlbGVjdFRyYWNrID0gKHRyYWNrOiBGbGF0dGVuZWRUcmFjaykgPT4ge1xuICAgICAgY29udHJvbHMuc2V0U291cmNlKHRyYWNrLnNpZCk7XG4gICAgICBzaG93Y2FzZVN0YXRlLmFjdGl2ZVRyYWNrU2lkID0gdHJhY2suc2lkO1xuICAgICAgc3RhdGUudmlkZW9Db250cm9sLnNlbGVjdGVkU3RyZWFtID0gJ2RjbC1jYXN0JztcbiAgICB9O1xuXG4gICAgc2hvd2Nhc2VTdGF0ZS5vblNldERlZmF1bHQgPSAoKSA9PiB7XG4gICAgICBjb250cm9scy5zZXRTb3VyY2UoTElWRUtJVF9TVFJFQU1fU1JDKTtcbiAgICAgIHNob3djYXNlU3RhdGUuYWN0aXZlVHJhY2tTaWQgPSB1bmRlZmluZWQ7XG4gICAgICBzdGF0ZS52aWRlb0NvbnRyb2wuc2VsZWN0ZWRTdHJlYW0gPSAnZGNsLWNhc3QnO1xuICAgIH07XG5cbiAgICBzaG93Y2FzZVN0YXRlLm9uQ2xvc2UgPSBjbG9zZU1vZGFsO1xuXG4gICAgbmV4dFRpY2tGdW5jdGlvbnMucHVzaCgoKSA9PiB7XG4gICAgICBzaG93Y2FzZVN0YXRlLnNob3cgPSB0cnVlO1xuICAgIH0pO1xuICB9O1xuXG4gIGNvbnN0IGZldGNoRGNsQ2FzdEluZm8gPSBhc3luYyAoKSA9PiB7XG4gICAgc2V0SXNMb2FkaW5nKHRydWUpO1xuICAgIHNldEVycm9yKGZhbHNlKTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGhhbmRsZUdldERjbENhc3RJbmZvKHN0YXRlKTtcblxuICAgIGlmICghcmVzdWx0KSB7XG4gICAgICBzZXRFcnJvcih0cnVlKTtcbiAgICB9IGVsc2UgaWYgKHZpZGVvPy5zcmM/LnN0YXJ0c1dpdGgoJ2xpdmVraXQtdmlkZW86Ly8nKSAmJiAhc3RhdGUudmlkZW9Db250cm9sLnNlbGVjdGVkU3RyZWFtKSB7XG4gICAgICBzdGF0ZS52aWRlb0NvbnRyb2wuc2VsZWN0ZWRTdHJlYW0gPSAnZGNsLWNhc3QnO1xuICAgIH1cblxuICAgIHNldElzTG9hZGluZyhmYWxzZSk7XG4gIH07XG5cbiAgY29uc3Qgb25TaGFyZVByZXNlbnRhdGlvbiA9ICgpID0+IHtcbiAgICBzaGFyZVByZXNlbnRhdGlvblN0YXRlLm9uQ2xvc2UgPSAoKSA9PiB7XG4gICAgICBzaGFyZVByZXNlbnRhdGlvblN0YXRlLnNob3cgPSBmYWxzZTtcbiAgICB9O1xuICAgIG5leHRUaWNrRnVuY3Rpb25zLnB1c2goKCkgPT4ge1xuICAgICAgc2hhcmVQcmVzZW50YXRpb25TdGF0ZS5zaG93ID0gdHJ1ZTtcbiAgICB9KTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVSZXNldFJvb21JZCA9IGFzeW5jICgpID0+IHtcbiAgICBzZXRJc0xvYWRpbmcodHJ1ZSk7XG4gICAgY29uc3QgW2Vycm9yLCBkYXRhXSA9IGF3YWl0IHJlc2V0U3RyZWFtS2V5KCk7XG4gICAgaWYgKGVycm9yKSB7XG4gICAgICBzZXRJc0xvYWRpbmcoZmFsc2UpO1xuICAgICAgc2V0RXJyb3IodHJ1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHZpZGVvQ29udHJvbCA9IFZpZGVvQ29udHJvbFN0YXRlLmdldE11dGFibGUoc3RhdGUuYWRtaW5Ub29sa2l0VWlFbnRpdHkpO1xuICAgICAgdmlkZW9Db250cm9sLmVuZHNBdCA9IGRhdGE/LmVuZHNBdDtcbiAgICAgIGZldGNoRGNsQ2FzdEluZm8oKTtcbiAgICB9XG4gIH07XG5cbiAgUmVhY3RFY3MudXNlRWZmZWN0KCgpID0+IHtcbiAgICBmZXRjaERjbENhc3RJbmZvKCk7XG4gICAgaWYgKHBsYXllckFkZHJlc3MpIHtcbiAgICAgIGVuc3VyZVByZXNlbnRlclJvbGUocGxheWVyQWRkcmVzcyk7XG4gICAgfVxuICB9LCBbXSk7XG5cbiAgLy8gU3luYyBzZWxlY3RlZFN0cmVhbSB3aGVuIHZpZGVvLnNyYyBhcnJpdmVzIGFmdGVyIG1vdW50IChsYXRlLWpvaW5lciBmaXgpXG4gIGNvbnN0IHZpZGVvU3JjID0gdmlkZW8/LnNyYztcbiAgUmVhY3RFY3MudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAodmlkZW9TcmM/LnN0YXJ0c1dpdGgoJ2xpdmVraXQtdmlkZW86Ly8nKSAmJiAhc3RhdGUudmlkZW9Db250cm9sLnNlbGVjdGVkU3RyZWFtKSB7XG4gICAgICBzdGF0ZS52aWRlb0NvbnRyb2wuc2VsZWN0ZWRTdHJlYW0gPSAnZGNsLWNhc3QnO1xuICAgIH1cbiAgfSwgW3ZpZGVvU3JjXSk7XG5cbiAgY29uc3QgaXNDYXN0QWN0aXZlID0gISEodmlkZW8/LnNyYyAmJiBpc0RjbENhc3QodmlkZW8uc3JjKSk7XG5cbiAgUmVhY3RFY3MudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaXNDYXN0QWN0aXZlKSB7XG4gICAgICBzdGFydFBhcnRpY2lwYW50UG9sbGluZyhlbmdpbmUsIHN0YXRlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RvcFBhcnRpY2lwYW50UG9sbGluZyhlbmdpbmUsIHN0YXRlKTtcbiAgICB9XG4gIH0sIFtpc0Nhc3RBY3RpdmVdKTtcblxuICAvLyBBdXRvLW1pbmltaXplIHdoZW4gYSBwcmVzZW50YXRpb24gc3RhcnRzIHNvIHRoZSBjb21wYWN0IHZpZXdcbiAgLy8gKHdpdGggcHJlc2VudGF0aW9uIGNvbnRyb2xzKSBpcyBpbW1lZGlhdGVseSB2aXNpYmxlXG4gIFJlYWN0RWNzLnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHN0YXRlLnZpZGVvQ29udHJvbC5wcmVzZW50YXRpb25TdGF0ZSkge1xuICAgICAgc3RhdGUudmlkZW9Db250cm9sLmlzTWluaW1pemVkID0gdHJ1ZTtcbiAgICB9XG4gIH0sIFshIXN0YXRlLnZpZGVvQ29udHJvbC5wcmVzZW50YXRpb25TdGF0ZV0pO1xuXG4gIGNvbnN0IGlzTWluaW1pemVkID0gc3RhdGUudmlkZW9Db250cm9sLmlzTWluaW1pemVkO1xuXG4gIHJldHVybiAoXG4gICAgPFVpRW50aXR5IHVpVHJhbnNmb3JtPXtzdHlsZXMuZnVsbENvbnRhaW5lcn0+XG4gICAgICB7LyogQ29tcGFjdCBiYXIg4oCUIGFsd2F5cyByZW5kZXJlZCwgdG9nZ2xlZCB2aWEgZGlzcGxheSAqL31cbiAgICAgIDxVaUVudGl0eSB1aVRyYW5zZm9ybT17eyBkaXNwbGF5OiBpc01pbmltaXplZCA/ICdmbGV4JyA6ICdub25lJywgd2lkdGg6ICcxMDAlJyB9fT5cbiAgICAgICAgPENvbXBhY3REY2xDYXN0XG4gICAgICAgICAgZW5naW5lPXtlbmdpbmV9XG4gICAgICAgICAgc3RhdGU9e3N0YXRlfVxuICAgICAgICAgIGVudGl0eT17ZW50aXR5fVxuICAgICAgICAgIHZpZGVvPXt2aWRlb31cbiAgICAgICAgICBvblNob3dTaG93Y2FzZU1vZGFsPXtvblNob3dTaG93Y2FzZU1vZGFsfVxuICAgICAgICAvPlxuICAgICAgPC9VaUVudGl0eT5cblxuICAgICAgey8qIEZ1bGwgcGFuZWwg4oCUIGFsd2F5cyByZW5kZXJlZCwgdG9nZ2xlZCB2aWEgZGlzcGxheSAqL31cbiAgICAgIDxVaUVudGl0eVxuICAgICAgICB1aVRyYW5zZm9ybT17e1xuICAgICAgICAgIGRpc3BsYXk6IGlzTWluaW1pemVkID8gJ25vbmUnIDogJ2ZsZXgnLFxuICAgICAgICAgIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICAgICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIDxVaUVudGl0eSB1aVRyYW5zZm9ybT17c3R5bGVzLnJvd0NlbnRlclNwYWNlQmV0d2Vlbn0+XG4gICAgICAgICAgPFVpRW50aXR5IHVpVHJhbnNmb3JtPXtzdHlsZXMucm93Q2VudGVyfT5cbiAgICAgICAgICAgIDxVaUVudGl0eVxuICAgICAgICAgICAgICB1aVRyYW5zZm9ybT17c3R5bGVzLmhlYWRlckljb259XG4gICAgICAgICAgICAgIHVpQmFja2dyb3VuZD17e1xuICAgICAgICAgICAgICAgIHRleHR1cmVNb2RlOiAnc3RyZXRjaCcsXG4gICAgICAgICAgICAgICAgdGV4dHVyZTogeyBzcmM6IElDT05TLkRDTF9DQVNUX0lDT04gfSxcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8VWlFbnRpdHlcbiAgICAgICAgICAgICAgdWlUZXh0PXt7XG4gICAgICAgICAgICAgICAgdmFsdWU6ICc8Yj5EQ0wgQ2FzdDwvYj4nLFxuICAgICAgICAgICAgICAgIGZvbnRTaXplOiAyNCxcbiAgICAgICAgICAgICAgICBjb2xvcjogQ29sb3I0LldoaXRlKCksXG4gICAgICAgICAgICAgICAgdGV4dEFsaWduOiAnbWlkZGxlLWxlZnQnLFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICB1aVRyYW5zZm9ybT17eyBtYXJnaW46IHsgbGVmdDogMTAgfSB9fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L1VpRW50aXR5PlxuICAgICAgICAgIDxVaUVudGl0eVxuICAgICAgICAgICAgb25Nb3VzZURvd249eygpID0+IHtcbiAgICAgICAgICAgICAgc3RhdGUudmlkZW9Db250cm9sLmlzTWluaW1pemVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICB1aVRyYW5zZm9ybT17c3R5bGVzLmNoZXZyb25CdXR0b259XG4gICAgICAgICAgICB1aUJhY2tncm91bmQ9e3tcbiAgICAgICAgICAgICAgdGV4dHVyZU1vZGU6ICdzdHJldGNoJyxcbiAgICAgICAgICAgICAgY29sb3I6IENvbG9yNC5XaGl0ZSgpLFxuICAgICAgICAgICAgICB0ZXh0dXJlOiB7XG4gICAgICAgICAgICAgICAgc3JjOiBJQ09OUy5DSEVWUk9OX1VQLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L1VpRW50aXR5PlxuICAgICAgICA8VWlFbnRpdHkgdWlUcmFuc2Zvcm09e3N0eWxlcy5mdWxsV2lkdGhXaXRoQm90dG9tTWFyZ2lufT5cbiAgICAgICAgICA8VWlFbnRpdHlcbiAgICAgICAgICAgIHVpVGV4dD17e1xuICAgICAgICAgICAgICB2YWx1ZTpcbiAgICAgICAgICAgICAgICAnVXNlIGEgYnJvd3Nlci1iYXNlZCBEQ0wgQ2FzdCByb29tIHRvIGVhc2lseSBzdHJlYW0gY2FtZXJhIGFuZCBzY3JlZW4gZmVlZCB0byBhIHNjcmVlbiBpbiB5b3VyIHNjZW5lLicsXG4gICAgICAgICAgICAgIGZvbnRTaXplOiAxNixcbiAgICAgICAgICAgICAgY29sb3I6IENvbG9yNC5mcm9tSGV4U3RyaW5nKCcjQTA5QkE4JyksXG5cbiAgICAgICAgICAgICAgdGV4dEFsaWduOiAndG9wLWxlZnQnLFxuICAgICAgICAgICAgICB0ZXh0V3JhcDogJ3dyYXAnLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIHVpVHJhbnNmb3JtPXtzdHlsZXMubWFyZ2luQm90dG9tU21hbGx9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9VaUVudGl0eT5cbiAgICAgICAge2lzTG9hZGluZyAmJiAoXG4gICAgICAgICAgPExvYWRpbmdEb3RzXG4gICAgICAgICAgICB1aVRyYW5zZm9ybT17c3R5bGVzLmxvYWRpbmdDb250YWluZXJ9XG4gICAgICAgICAgICBlbmdpbmU9e2VuZ2luZX1cbiAgICAgICAgICAvPlxuICAgICAgICApfVxuICAgICAgICB7ZXJyb3IgJiYgKFxuICAgICAgICAgIDxVaUVudGl0eSB1aVRyYW5zZm9ybT17c3R5bGVzLmNvbHVtbkNlbnRlcmVkfT5cbiAgICAgICAgICAgIDxVaUVudGl0eVxuICAgICAgICAgICAgICB1aVRleHQ9e3tcbiAgICAgICAgICAgICAgICB2YWx1ZTogJzxiPkZhaWxlZCB0byBmZXRjaCBEQ0wgQ2FzdCBpbmZvPC9iPicsXG4gICAgICAgICAgICAgICAgZm9udFNpemU6IDE2LFxuICAgICAgICAgICAgICAgIGNvbG9yOiBDb2xvcjQuV2hpdGUoKSxcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgdWlUcmFuc2Zvcm09e3N0eWxlcy5tYXJnaW5Cb3R0b21TbWFsbH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8VWlFbnRpdHlcbiAgICAgICAgICAgICAgdWlUZXh0PXt7XG4gICAgICAgICAgICAgICAgdmFsdWU6ICdQbGVhc2UgcmV0cnkuJyxcbiAgICAgICAgICAgICAgICBmb250U2l6ZTogMTYsXG4gICAgICAgICAgICAgICAgY29sb3I6IENvbG9yNC5HcmF5KCksXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICBpZD1cImRjbF9jYXN0X3JldHJ5XCJcbiAgICAgICAgICAgICAgdmFsdWU9XCI8Yj5SZXRyeTwvYj5cIlxuICAgICAgICAgICAgICB2YXJpYW50PVwic2Vjb25kYXJ5XCJcbiAgICAgICAgICAgICAgZm9udFNpemU9ezE2fVxuICAgICAgICAgICAgICBjb2xvcj17Y29sb3JzLndoaXRlfVxuICAgICAgICAgICAgICBvbk1vdXNlRG93bj17KCkgPT4ge1xuICAgICAgICAgICAgICAgIGhhbmRsZUdldERjbENhc3RJbmZvKHN0YXRlKTtcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgdWlUcmFuc2Zvcm09e3N0eWxlcy5yZXRyeUJ1dHRvbn1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9VaUVudGl0eT5cbiAgICAgICAgKX1cblxuICAgICAgICB7IWlzTG9hZGluZyAmJiAhZXJyb3IgJiYgKFxuICAgICAgICAgIDxEY2xDYXN0SW5mb1xuICAgICAgICAgICAgc3RhdGU9e3N0YXRlfVxuICAgICAgICAgICAgZW50aXR5PXtlbnRpdHl9XG4gICAgICAgICAgICBlbmdpbmU9e2VuZ2luZX1cbiAgICAgICAgICAgIHZpZGVvPXt2aWRlb31cbiAgICAgICAgICAgIG9uUmVzZXRSb29tSWQ9e2hhbmRsZVJlc2V0Um9vbUlkfVxuICAgICAgICAgICAgb25TaG93U2hvd2Nhc2VNb2RhbD17b25TaG93U2hvd2Nhc2VNb2RhbH1cbiAgICAgICAgICAgIG9uU2hhcmVQcmVzZW50YXRpb249e29uU2hhcmVQcmVzZW50YXRpb259XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgIDwvVWlFbnRpdHk+XG4gICAgPC9VaUVudGl0eT5cbiAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IERjbENhc3Q7XG4iXX0=
@@ -1,5 +1,6 @@
1
1
  import { Color4 } from '@dcl/sdk/math';
2
- import { UiTransformProps } from '@dcl/react-ecs';
2
+ import type { UiTransformProps } from '@dcl/react-ecs';
3
+ import { getPaginationColor } from '../../ModerationControl/styles/UsersListStyles';
3
4
  export declare const getDclCastStyles: () => Record<string, UiTransformProps>;
4
5
  export declare const getDclCastColors: () => {
5
6
  white: Color4.MutableColor4;
@@ -18,3 +19,74 @@ export declare const getDclCastBackgrounds: () => {
18
19
  textureMode: "stretch";
19
20
  };
20
21
  };
22
+ export declare const getCompactBarStyles: () => Record<string, UiTransformProps>;
23
+ export declare const SHOWCASE_DROPDOWN_COLORS: {
24
+ idle: Color4.MutableColor4;
25
+ hover: Color4.MutableColor4;
26
+ active: Color4.MutableColor4;
27
+ hoverBg: Color4.MutableColor4;
28
+ transparentBg: Color4.MutableColor4;
29
+ };
30
+ export declare const SHOWCASE_PAGE_INDICATOR_COLOR: Color4.MutableColor4;
31
+ export declare const getSpeakerShowcaseStyles: () => Record<string, UiTransformProps>;
32
+ export declare const getShowcaseColors: () => {
33
+ white: Color4.MutableColor4;
34
+ gray: Color4.MutableColor4;
35
+ addressGray: Color4.MutableColor4;
36
+ removeRed: Color4.MutableColor4;
37
+ disabledGray: Color4.MutableColor4;
38
+ black: Color4.MutableColor4;
39
+ softBlack: Color4.MutableColor4;
40
+ transparent: Color4.MutableColor4;
41
+ };
42
+ export declare function getShowcaseIconBackgrounds(): {
43
+ showcase: {
44
+ textureMode: "stretch";
45
+ texture: {
46
+ src: string;
47
+ };
48
+ };
49
+ star: {
50
+ textureMode: "stretch";
51
+ texture: {
52
+ src: string;
53
+ };
54
+ };
55
+ };
56
+ export declare function getShowcaseBackgrounds(): {
57
+ container: {
58
+ color: Color4.MutableColor4;
59
+ };
60
+ divider: {
61
+ color: Color4.MutableColor4;
62
+ };
63
+ roleBadge: {
64
+ color: Color4.MutableColor4;
65
+ };
66
+ headerIcon: {
67
+ textureMode: "stretch";
68
+ texture: {
69
+ src: string;
70
+ };
71
+ };
72
+ personIcon: {
73
+ textureMode: "stretch";
74
+ texture: {
75
+ src: string;
76
+ };
77
+ };
78
+ banIcon: {
79
+ textureMode: "stretch";
80
+ texture: {
81
+ src: string;
82
+ };
83
+ };
84
+ verifiedIcon: {
85
+ textureMode: "stretch";
86
+ texture: {
87
+ src: string;
88
+ };
89
+ color: Color4.MutableColor4;
90
+ };
91
+ };
92
+ export { getPaginationColor };