@discordeno/bot 22.0.1-next.cf02481 → 22.0.1-next.cf0fec0

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 (209) hide show
  1. package/dist/bot.d.ts +3 -3
  2. package/dist/bot.d.ts.map +1 -1
  3. package/dist/bot.js +3 -2
  4. package/dist/constants.d.ts.map +1 -1
  5. package/dist/constants.js +2 -2
  6. package/dist/desiredProperties.d.ts +5 -2
  7. package/dist/desiredProperties.d.ts.map +1 -1
  8. package/dist/desiredProperties.js +41 -1
  9. package/dist/events.d.ts +22 -7
  10. package/dist/events.d.ts.map +1 -1
  11. package/dist/events.js +1 -1
  12. package/dist/handlers/guilds/automod/AUTO_MODERATION_ACTION_EXECUTION.js +2 -2
  13. package/dist/handlers/guilds/automod/AUTO_MODERATION_RULE_CREATE.js +2 -2
  14. package/dist/handlers/guilds/automod/AUTO_MODERATION_RULE_DELETE.js +2 -2
  15. package/dist/handlers/guilds/automod/AUTO_MODERATION_RULE_UPDATE.js +2 -2
  16. package/dist/handlers/interactions/APPLICATION_COMMAND_PERMISSIONS_UPDATE.js +2 -2
  17. package/dist/handlers/invites/INVITE_CREATE.d.ts.map +1 -1
  18. package/dist/handlers/invites/INVITE_CREATE.js +20 -4
  19. package/dist/handlers/invites/INVITE_DELETE.d.ts.map +1 -1
  20. package/dist/handlers/invites/INVITE_DELETE.js +4 -4
  21. package/dist/handlers/members/GUILD_MEMBER_UPDATE.d.ts.map +1 -1
  22. package/dist/handlers/members/GUILD_MEMBER_UPDATE.js +4 -4
  23. package/dist/handlers/messages/MESSAGE_REACTION_ADD.d.ts.map +1 -1
  24. package/dist/handlers/messages/MESSAGE_REACTION_ADD.js +4 -3
  25. package/dist/handlers/messages/MESSAGE_REACTION_REMOVE.d.ts.map +1 -1
  26. package/dist/handlers/messages/MESSAGE_REACTION_REMOVE.js +4 -3
  27. package/dist/handlers/messages/MESSAGE_REACTION_REMOVE_EMOJI.d.ts.map +1 -1
  28. package/dist/handlers/messages/MESSAGE_REACTION_REMOVE_EMOJI.js +4 -3
  29. package/dist/helpers.d.ts +17 -4
  30. package/dist/helpers.d.ts.map +1 -1
  31. package/dist/helpers.js +63 -23
  32. package/dist/transformers/activity.d.ts +17 -5
  33. package/dist/transformers/activity.d.ts.map +1 -1
  34. package/dist/transformers/activity.js +55 -37
  35. package/dist/transformers/application.d.ts +3 -3
  36. package/dist/transformers/application.d.ts.map +1 -1
  37. package/dist/transformers/application.js +55 -41
  38. package/dist/transformers/applicationCommand.d.ts +3 -2
  39. package/dist/transformers/applicationCommand.d.ts.map +1 -1
  40. package/dist/transformers/applicationCommand.js +19 -17
  41. package/dist/transformers/applicationCommandOption.d.ts +3 -2
  42. package/dist/transformers/applicationCommandOption.d.ts.map +1 -1
  43. package/dist/transformers/applicationCommandOption.js +22 -19
  44. package/dist/transformers/applicationCommandOptionChoice.d.ts +3 -2
  45. package/dist/transformers/applicationCommandOptionChoice.d.ts.map +1 -1
  46. package/dist/transformers/applicationCommandOptionChoice.js +10 -8
  47. package/dist/transformers/applicationCommandPermission.d.ts +7 -3
  48. package/dist/transformers/applicationCommandPermission.d.ts.map +1 -1
  49. package/dist/transformers/applicationCommandPermission.js +20 -13
  50. package/dist/transformers/attachment.d.ts +3 -1
  51. package/dist/transformers/attachment.d.ts.map +1 -1
  52. package/dist/transformers/attachment.js +12 -4
  53. package/dist/transformers/auditLogEntry.d.ts +7 -3
  54. package/dist/transformers/auditLogEntry.d.ts.map +1 -1
  55. package/dist/transformers/auditLogEntry.js +32 -25
  56. package/dist/transformers/automodActionExecution.d.ts +10 -3
  57. package/dist/transformers/automodActionExecution.d.ts.map +1 -1
  58. package/dist/transformers/automodActionExecution.js +35 -23
  59. package/dist/transformers/automodRule.d.ts +7 -3
  60. package/dist/transformers/automodRule.d.ts.map +1 -1
  61. package/dist/transformers/automodRule.js +30 -30
  62. package/dist/transformers/avatarDecorationData.d.ts +3 -2
  63. package/dist/transformers/avatarDecorationData.d.ts.map +1 -1
  64. package/dist/transformers/avatarDecorationData.js +6 -3
  65. package/dist/transformers/channel.d.ts +6 -3
  66. package/dist/transformers/channel.d.ts.map +1 -1
  67. package/dist/transformers/channel.js +14 -9
  68. package/dist/transformers/component.d.ts +9 -4
  69. package/dist/transformers/component.d.ts.map +1 -1
  70. package/dist/transformers/component.js +200 -33
  71. package/dist/transformers/embed.d.ts +16 -3
  72. package/dist/transformers/embed.d.ts.map +1 -1
  73. package/dist/transformers/embed.js +71 -42
  74. package/dist/transformers/emoji.d.ts +7 -3
  75. package/dist/transformers/emoji.d.ts.map +1 -1
  76. package/dist/transformers/emoji.js +10 -5
  77. package/dist/transformers/entitlement.d.ts +3 -2
  78. package/dist/transformers/entitlement.d.ts.map +1 -1
  79. package/dist/transformers/entitlement.js +6 -3
  80. package/dist/transformers/gatewayBot.d.ts +7 -3
  81. package/dist/transformers/gatewayBot.d.ts.map +1 -1
  82. package/dist/transformers/gatewayBot.js +20 -13
  83. package/dist/transformers/guild.d.ts +3 -2
  84. package/dist/transformers/guild.d.ts.map +1 -1
  85. package/dist/transformers/guild.js +26 -34
  86. package/dist/transformers/incidentsData.d.ts +3 -2
  87. package/dist/transformers/incidentsData.d.ts.map +1 -1
  88. package/dist/transformers/incidentsData.js +6 -3
  89. package/dist/transformers/integration.d.ts +10 -3
  90. package/dist/transformers/integration.d.ts.map +1 -1
  91. package/dist/transformers/integration.js +43 -31
  92. package/dist/transformers/interaction.d.ts +20 -12
  93. package/dist/transformers/interaction.d.ts.map +1 -1
  94. package/dist/transformers/interaction.js +47 -32
  95. package/dist/transformers/invite.d.ts +4 -4
  96. package/dist/transformers/invite.d.ts.map +1 -1
  97. package/dist/transformers/invite.js +26 -24
  98. package/dist/transformers/lobby.d.ts +13 -4
  99. package/dist/transformers/lobby.d.ts.map +1 -1
  100. package/dist/transformers/lobby.js +35 -5
  101. package/dist/transformers/member.d.ts +3 -2
  102. package/dist/transformers/member.d.ts.map +1 -1
  103. package/dist/transformers/member.js +6 -3
  104. package/dist/transformers/message.d.ts +20 -10
  105. package/dist/transformers/message.d.ts.map +1 -1
  106. package/dist/transformers/message.js +52 -25
  107. package/dist/transformers/onboarding.d.ts +9 -4
  108. package/dist/transformers/onboarding.d.ts.map +1 -1
  109. package/dist/transformers/onboarding.js +17 -10
  110. package/dist/transformers/poll.d.ts +6 -3
  111. package/dist/transformers/poll.d.ts.map +1 -1
  112. package/dist/transformers/poll.js +14 -7
  113. package/dist/transformers/presence.d.ts +3 -2
  114. package/dist/transformers/presence.d.ts.map +1 -1
  115. package/dist/transformers/presence.js +10 -6
  116. package/dist/transformers/reverse/activity.d.ts +4 -3
  117. package/dist/transformers/reverse/activity.d.ts.map +1 -1
  118. package/dist/transformers/reverse/activity.js +20 -24
  119. package/dist/transformers/reverse/applicationCommand.js +2 -2
  120. package/dist/transformers/reverse/component.d.ts.map +1 -1
  121. package/dist/transformers/reverse/component.js +152 -11
  122. package/dist/transformers/reverse/embed.d.ts.map +1 -1
  123. package/dist/transformers/reverse/embed.js +19 -4
  124. package/dist/transformers/reverse/member.d.ts.map +1 -1
  125. package/dist/transformers/reverse/member.js +4 -2
  126. package/dist/transformers/reverse/presence.d.ts.map +1 -1
  127. package/dist/transformers/reverse/presence.js +3 -2
  128. package/dist/transformers/reverse/user.d.ts +5 -0
  129. package/dist/transformers/reverse/user.d.ts.map +1 -0
  130. package/dist/transformers/reverse/user.js +17 -0
  131. package/dist/transformers/role.d.ts +7 -4
  132. package/dist/transformers/role.d.ts.map +1 -1
  133. package/dist/transformers/role.js +11 -7
  134. package/dist/transformers/scheduledEvent.d.ts +6 -3
  135. package/dist/transformers/scheduledEvent.d.ts.map +1 -1
  136. package/dist/transformers/scheduledEvent.js +10 -5
  137. package/dist/transformers/sku.d.ts +3 -2
  138. package/dist/transformers/sku.d.ts.map +1 -1
  139. package/dist/transformers/sku.js +6 -3
  140. package/dist/transformers/soundboardSound.d.ts +3 -2
  141. package/dist/transformers/soundboardSound.d.ts.map +1 -1
  142. package/dist/transformers/soundboardSound.js +6 -3
  143. package/dist/transformers/stageInstance.d.ts +3 -2
  144. package/dist/transformers/stageInstance.d.ts.map +1 -1
  145. package/dist/transformers/stageInstance.js +6 -3
  146. package/dist/transformers/stageInviteInstance.d.ts +3 -3
  147. package/dist/transformers/stageInviteInstance.d.ts.map +1 -1
  148. package/dist/transformers/stageInviteInstance.js +10 -8
  149. package/dist/transformers/sticker.d.ts +6 -3
  150. package/dist/transformers/sticker.d.ts.map +1 -1
  151. package/dist/transformers/sticker.js +18 -14
  152. package/dist/transformers/subscription.d.ts +3 -2
  153. package/dist/transformers/subscription.d.ts.map +1 -1
  154. package/dist/transformers/subscription.js +6 -3
  155. package/dist/transformers/team.d.ts +7 -3
  156. package/dist/transformers/team.d.ts.map +1 -1
  157. package/dist/transformers/team.js +22 -16
  158. package/dist/transformers/template.d.ts +3 -2
  159. package/dist/transformers/template.d.ts.map +1 -1
  160. package/dist/transformers/template.js +18 -16
  161. package/dist/transformers/threadMember.d.ts +6 -3
  162. package/dist/transformers/threadMember.d.ts.map +1 -1
  163. package/dist/transformers/threadMember.js +20 -16
  164. package/dist/transformers/toggles/channel.d.ts +2 -2
  165. package/dist/transformers/toggles/channel.d.ts.map +1 -1
  166. package/dist/transformers/toggles/channel.js +2 -2
  167. package/dist/transformers/toggles/emoji.d.ts +1 -1
  168. package/dist/transformers/toggles/emoji.d.ts.map +1 -1
  169. package/dist/transformers/toggles/emoji.js +1 -1
  170. package/dist/transformers/toggles/guild.d.ts +19 -16
  171. package/dist/transformers/toggles/guild.d.ts.map +1 -1
  172. package/dist/transformers/toggles/guild.js +29 -23
  173. package/dist/transformers/toggles/role.d.ts +1 -1
  174. package/dist/transformers/toggles/role.d.ts.map +1 -1
  175. package/dist/transformers/toggles/role.js +1 -1
  176. package/dist/transformers/toggles/user.d.ts +1 -1
  177. package/dist/transformers/toggles/user.d.ts.map +1 -1
  178. package/dist/transformers/toggles/user.js +1 -1
  179. package/dist/transformers/toggles/voice.d.ts +1 -1
  180. package/dist/transformers/toggles/voice.d.ts.map +1 -1
  181. package/dist/transformers/toggles/voice.js +1 -1
  182. package/dist/transformers/types.d.ts +216 -54
  183. package/dist/transformers/types.d.ts.map +1 -1
  184. package/dist/transformers/types.js +2 -2
  185. package/dist/transformers/user.d.ts +13 -5
  186. package/dist/transformers/user.d.ts.map +1 -1
  187. package/dist/transformers/user.js +18 -9
  188. package/dist/transformers/voiceRegion.d.ts +3 -2
  189. package/dist/transformers/voiceRegion.d.ts.map +1 -1
  190. package/dist/transformers/voiceRegion.js +12 -10
  191. package/dist/transformers/voiceState.d.ts +3 -3
  192. package/dist/transformers/voiceState.d.ts.map +1 -1
  193. package/dist/transformers/voiceState.js +6 -4
  194. package/dist/transformers/webhook.d.ts +3 -1
  195. package/dist/transformers/webhook.d.ts.map +1 -1
  196. package/dist/transformers/webhook.js +9 -6
  197. package/dist/transformers/welcomeScreen.d.ts +7 -3
  198. package/dist/transformers/welcomeScreen.d.ts.map +1 -1
  199. package/dist/transformers/welcomeScreen.js +19 -12
  200. package/dist/transformers/widget.d.ts +3 -2
  201. package/dist/transformers/widget.d.ts.map +1 -1
  202. package/dist/transformers/widget.js +17 -13
  203. package/dist/transformers/widgetSettings.d.ts +3 -2
  204. package/dist/transformers/widgetSettings.d.ts.map +1 -1
  205. package/dist/transformers/widgetSettings.js +9 -7
  206. package/dist/transformers.d.ts +183 -78
  207. package/dist/transformers.d.ts.map +1 -1
  208. package/dist/transformers.js +90 -28
  209. package/package.json +18 -18
@@ -1,6 +1,12 @@
1
1
  import { MessageComponentTypes } from '@discordeno/types';
2
- export function transformComponent(bot, payload) {
2
+ import { callCustomizer } from '../transformers.js';
3
+ import { ToggleBitfield } from './toggles/ToggleBitfield.js';
4
+ export function transformComponent(bot, payload, extra) {
3
5
  let component;
6
+ // There's nothing to do with a component without a type, as it means an issue on Discord, so we just throw an error
7
+ if (!payload.type) {
8
+ throw new Error(`[Discordeno] Received a component payload without a type in the component transformer.`);
9
+ }
4
10
  // This switch is exhaustive, so we dont need the default case and TS does not error out for the un-initialized component variable
5
11
  switch(payload.type){
6
12
  case MessageComponentTypes.ActionRow:
@@ -16,11 +22,19 @@ export function transformComponent(bot, payload) {
16
22
  component = transformInputTextComponent(bot, payload);
17
23
  break;
18
24
  case MessageComponentTypes.StringSelect:
25
+ component = transformStringSelectMenuComponent(bot, payload);
26
+ break;
19
27
  case MessageComponentTypes.UserSelect:
28
+ component = transformUserSelectMenuComponent(bot, payload);
29
+ break;
20
30
  case MessageComponentTypes.RoleSelect:
31
+ component = transformRoleSelectMenuComponent(bot, payload);
32
+ break;
21
33
  case MessageComponentTypes.MentionableSelect:
34
+ component = transformMentionableSelectMenuComponent(bot, payload);
35
+ break;
22
36
  case MessageComponentTypes.ChannelSelect:
23
- component = transformSelectMenuComponent(bot, payload);
37
+ component = transformChannelSelectMenuComponent(bot, payload);
24
38
  break;
25
39
  case MessageComponentTypes.Section:
26
40
  component = transformSectionComponent(bot, payload);
@@ -46,27 +60,45 @@ export function transformComponent(bot, payload) {
46
60
  case MessageComponentTypes.FileUpload:
47
61
  component = transformFileUploadComponent(bot, payload);
48
62
  break;
63
+ case MessageComponentTypes.RadioGroup:
64
+ component = transformRadioGroupComponent(bot, payload);
65
+ break;
66
+ case MessageComponentTypes.CheckboxGroup:
67
+ component = transformCheckboxGroupComponent(bot, payload);
68
+ break;
69
+ case MessageComponentTypes.Checkbox:
70
+ component = transformCheckboxComponent(bot, payload);
71
+ break;
49
72
  }
50
- return bot.transformers.customizers.component(bot, payload, component);
73
+ return callCustomizer('component', bot, payload, component, {
74
+ partial: extra?.partial ?? false
75
+ });
51
76
  }
52
- export function transformUnfurledMediaItem(bot, payload) {
77
+ export function transformUnfurledMediaItem(bot, payload, extra) {
53
78
  const props = bot.transformers.desiredProperties.unfurledMediaItem;
54
79
  const mediaItem = {};
55
80
  if (props.url && payload.url) mediaItem.url = payload.url;
56
81
  if (props.proxyUrl && payload.proxy_url) mediaItem.proxyUrl = payload.proxy_url;
57
82
  if (props.height && payload.height) mediaItem.height = payload.height;
58
83
  if (props.width && payload.width) mediaItem.width = payload.width;
84
+ if (props.placeholder && payload.placeholder) mediaItem.placeholder = payload.placeholder;
85
+ if (props.placeholderVersion && payload.placeholder_version) mediaItem.placeholderVersion = payload.placeholder_version;
59
86
  if (props.contentType && payload.content_type) mediaItem.contentType = payload.content_type;
87
+ if (props.flags && payload.flags) mediaItem.flags = new ToggleBitfield(payload.flags);
60
88
  if (props.attachmentId && payload.attachment_id) mediaItem.attachmentId = bot.transformers.snowflake(payload.attachment_id);
61
- return bot.transformers.customizers.unfurledMediaItem(bot, payload, mediaItem);
89
+ return callCustomizer('unfurledMediaItem', bot, payload, mediaItem, {
90
+ partial: extra?.partial ?? false
91
+ });
62
92
  }
63
- export function transformMediaGalleryItem(bot, payload) {
93
+ export function transformMediaGalleryItem(bot, payload, extra) {
64
94
  const props = bot.transformers.desiredProperties.mediaGalleryItem;
65
95
  const galleryItem = {};
66
96
  if (props.media && payload.media) galleryItem.media = bot.transformers.unfurledMediaItem(bot, payload.media);
67
97
  if (props.description && payload.description) galleryItem.description = payload.description;
68
98
  if (props.spoiler && payload.spoiler) galleryItem.spoiler = payload.spoiler;
69
- return bot.transformers.customizers.mediaGalleryItem(bot, payload, galleryItem);
99
+ return callCustomizer('mediaGalleryItem', bot, payload, galleryItem, {
100
+ partial: extra?.partial ?? false
101
+ });
70
102
  }
71
103
  function transformActionRow(bot, payload) {
72
104
  const props = bot.transformers.desiredProperties.component;
@@ -94,7 +126,9 @@ function transformButtonComponent(bot, payload) {
94
126
  if (props.label && payload.label) button.label = payload.label;
95
127
  if (props.customId && payload.custom_id) button.customId = payload.custom_id;
96
128
  if (props.style && payload.style) button.style = payload.style;
97
- if (props.emoji && payload.emoji) button.emoji = bot.transformers.emoji(bot, payload.emoji);
129
+ if (props.emoji && payload.emoji) button.emoji = bot.transformers.emoji(bot, payload.emoji, {
130
+ partial: true
131
+ });
98
132
  if (props.url && payload.url) button.url = payload.url;
99
133
  if (props.disabled && payload.disabled) button.disabled = payload.disabled;
100
134
  if (props.skuId && payload.sku_id) button.skuId = bot.transformers.snowflake(payload.sku_id);
@@ -107,7 +141,7 @@ function transformInputTextComponent(bot, payload) {
107
141
  if (props.id && payload.id) input.id = payload.id;
108
142
  if (props.value && payload.value) input.value = payload.value;
109
143
  if (props.customId && payload.custom_id) input.customId = payload.custom_id;
110
- // Check if it is the component or the response
144
+ // We assume that if we find 'values' it is the interaction response
111
145
  if ('style' in payload) {
112
146
  if (props.style && payload.style) input.style = payload.style;
113
147
  if (props.required && payload.required) input.required = payload.required;
@@ -118,36 +152,123 @@ function transformInputTextComponent(bot, payload) {
118
152
  }
119
153
  return input;
120
154
  }
121
- function transformSelectMenuComponent(bot, payload) {
155
+ function transformStringSelectMenuComponent(bot, payload) {
122
156
  const props = bot.transformers.desiredProperties.component;
123
157
  const select = {};
124
158
  if (props.type && payload.type) select.type = payload.type;
125
159
  if (props.id && payload.id) select.id = payload.id;
126
160
  if (props.customId && payload.custom_id) select.customId = payload.custom_id;
127
- // Check if this is the string select response
161
+ // We assume that if we find 'values' it is the interaction response
128
162
  if ('values' in payload) {
129
163
  if (props.values && payload.values) select.values = payload.values;
130
164
  } else {
131
- if (props.placeholder && payload.placeholder) select.placeholder = payload.placeholder;
132
- if (props.minValues && payload.min_values) select.minValues = payload.min_values;
133
- if (props.maxValues && payload.max_values) select.maxValues = payload.max_values;
134
- if (props.defaultValues && payload.default_values) select.defaultValues = payload.default_values.map((defaultValue)=>({
135
- id: bot.transformers.snowflake(defaultValue.id),
136
- type: defaultValue.type
137
- }));
138
- if (props.channelTypes && payload.channel_types) select.channelTypes = payload.channel_types;
139
- if (props.options && payload.options) select.options = payload.options.map((option)=>({
165
+ const _payload = payload;
166
+ if (props.placeholder && _payload.placeholder) select.placeholder = _payload.placeholder;
167
+ if (props.minValues && _payload.min_values) select.minValues = _payload.min_values;
168
+ if (props.maxValues && _payload.max_values) select.maxValues = _payload.max_values;
169
+ if (props.options && _payload.options) select.options = _payload.options.map((option)=>({
140
170
  label: option.label,
141
171
  value: option.value,
142
172
  description: option.description,
143
- emoji: option.emoji ? {
144
- id: option.emoji.id ? bot.transformers.snowflake(option.emoji.id) : undefined,
145
- name: option.emoji.name ?? undefined,
146
- animated: option.emoji.animated
147
- } : undefined,
173
+ emoji: option.emoji ? bot.transformers.emoji(bot, option.emoji, {
174
+ partial: true
175
+ }) : undefined,
148
176
  default: option.default
149
177
  }));
150
- if (props.disabled && payload.disabled) select.disabled = payload.disabled;
178
+ if (props.disabled && _payload.disabled) select.disabled = _payload.disabled;
179
+ }
180
+ return select;
181
+ }
182
+ function transformUserSelectMenuComponent(bot, payload) {
183
+ const props = bot.transformers.desiredProperties.component;
184
+ const select = {};
185
+ if (props.type && payload.type) select.type = payload.type;
186
+ if (props.id && payload.id) select.id = payload.id;
187
+ if (props.customId && payload.custom_id) select.customId = payload.custom_id;
188
+ // We assume that if we find 'values' it is the interaction response
189
+ if ('values' in payload) {
190
+ if (props.values && payload.values) select.values = payload.values;
191
+ if (props.resolved && payload.resolved) select.resolved = bot.transformers.interactionDataResolved(bot, payload.resolved);
192
+ } else {
193
+ const _payload = payload;
194
+ if (props.placeholder && _payload.placeholder) select.placeholder = _payload.placeholder;
195
+ if (props.minValues && _payload.min_values) select.minValues = _payload.min_values;
196
+ if (props.maxValues && _payload.max_values) select.maxValues = _payload.max_values;
197
+ if (props.defaultValues && _payload.default_values) select.defaultValues = _payload.default_values.map((defaultValue)=>({
198
+ id: bot.transformers.snowflake(defaultValue.id),
199
+ type: defaultValue.type
200
+ }));
201
+ if (props.disabled && _payload.disabled) select.disabled = _payload.disabled;
202
+ }
203
+ return select;
204
+ }
205
+ function transformRoleSelectMenuComponent(bot, payload) {
206
+ const props = bot.transformers.desiredProperties.component;
207
+ const select = {};
208
+ if (props.type && payload.type) select.type = payload.type;
209
+ if (props.id && payload.id) select.id = payload.id;
210
+ if (props.customId && payload.custom_id) select.customId = payload.custom_id;
211
+ // We assume that if we find 'values' it is the interaction response
212
+ if ('values' in payload) {
213
+ if (props.values && payload.values) select.values = payload.values;
214
+ if (props.resolved && payload.resolved) select.resolved = bot.transformers.interactionDataResolved(bot, payload.resolved);
215
+ } else {
216
+ const _payload = payload;
217
+ if (props.placeholder && _payload.placeholder) select.placeholder = _payload.placeholder;
218
+ if (props.minValues && _payload.min_values) select.minValues = _payload.min_values;
219
+ if (props.maxValues && _payload.max_values) select.maxValues = _payload.max_values;
220
+ if (props.defaultValues && _payload.default_values) select.defaultValues = _payload.default_values.map((defaultValue)=>({
221
+ id: bot.transformers.snowflake(defaultValue.id),
222
+ type: defaultValue.type
223
+ }));
224
+ if (props.disabled && _payload.disabled) select.disabled = _payload.disabled;
225
+ }
226
+ return select;
227
+ }
228
+ function transformMentionableSelectMenuComponent(bot, payload) {
229
+ const props = bot.transformers.desiredProperties.component;
230
+ const select = {};
231
+ if (props.type && payload.type) select.type = payload.type;
232
+ if (props.id && payload.id) select.id = payload.id;
233
+ if (props.customId && payload.custom_id) select.customId = payload.custom_id;
234
+ // We assume that if we find 'values' it is the interaction response
235
+ if ('values' in payload) {
236
+ if (props.values && payload.values) select.values = payload.values;
237
+ if (props.resolved && payload.resolved) select.resolved = bot.transformers.interactionDataResolved(bot, payload.resolved);
238
+ } else {
239
+ const _payload = payload;
240
+ if (props.placeholder && _payload.placeholder) select.placeholder = _payload.placeholder;
241
+ if (props.minValues && _payload.min_values) select.minValues = _payload.min_values;
242
+ if (props.maxValues && _payload.max_values) select.maxValues = _payload.max_values;
243
+ if (props.defaultValues && _payload.default_values) select.defaultValues = _payload.default_values.map((defaultValue)=>({
244
+ id: bot.transformers.snowflake(defaultValue.id),
245
+ type: defaultValue.type
246
+ }));
247
+ if (props.disabled && _payload.disabled) select.disabled = _payload.disabled;
248
+ }
249
+ return select;
250
+ }
251
+ function transformChannelSelectMenuComponent(bot, payload) {
252
+ const props = bot.transformers.desiredProperties.component;
253
+ const select = {};
254
+ if (props.type && payload.type) select.type = payload.type;
255
+ if (props.id && payload.id) select.id = payload.id;
256
+ if (props.customId && payload.custom_id) select.customId = payload.custom_id;
257
+ // We assume that if we find 'values' it is the interaction response
258
+ if ('values' in payload) {
259
+ if (props.values && payload.values) select.values = payload.values;
260
+ if (props.resolved && payload.resolved) select.resolved = bot.transformers.interactionDataResolved(bot, payload.resolved);
261
+ } else {
262
+ const _payload = payload;
263
+ if (props.placeholder && _payload.placeholder) select.placeholder = _payload.placeholder;
264
+ if (props.minValues && _payload.min_values) select.minValues = _payload.min_values;
265
+ if (props.maxValues && _payload.max_values) select.maxValues = _payload.max_values;
266
+ if (props.defaultValues && _payload.default_values) select.defaultValues = _payload.default_values.map((defaultValue)=>({
267
+ id: bot.transformers.snowflake(defaultValue.id),
268
+ type: defaultValue.type
269
+ }));
270
+ if (props.channelTypes && _payload.channel_types) select.channelTypes = _payload.channel_types;
271
+ if (props.disabled && _payload.disabled) select.disabled = _payload.disabled;
151
272
  }
152
273
  return select;
153
274
  }
@@ -194,7 +315,7 @@ function transformTextDisplayComponent(bot, payload) {
194
315
  const textDisplay = {};
195
316
  if (props.type && payload.type) textDisplay.type = payload.type;
196
317
  if (props.id && payload.id) textDisplay.id = payload.id;
197
- // That that this isn't a response
318
+ // We assume that if we find 'content' it is the component
198
319
  if ('content' in payload) {
199
320
  if (props.content && payload.content) textDisplay.content = payload.content;
200
321
  }
@@ -214,7 +335,7 @@ function transformLabelComponent(bot, payload) {
214
335
  const label = {};
215
336
  if (props.type && payload.type) label.type = payload.type;
216
337
  if (props.id && payload.id) label.id = payload.id;
217
- // Check that this isn't a response
338
+ // We assume that if we find 'label' it is the component
218
339
  if ('label' in payload) {
219
340
  if (props.label && payload.label) label.label = payload.label;
220
341
  if (props.description && payload.description) label.description = payload.description;
@@ -228,15 +349,61 @@ function transformFileUploadComponent(bot, payload) {
228
349
  if (props.type && payload.type) fileUpload.type = payload.type;
229
350
  if (props.id && payload.id) fileUpload.id = payload.id;
230
351
  if (props.customId && payload.custom_id) fileUpload.customId = payload.custom_id;
231
- // Check that this is a response
352
+ // We assume that if we find 'values' it is the interaction response
232
353
  if ('values' in payload) {
233
354
  if (props.values && payload.values) fileUpload.values = payload.values;
234
355
  } else {
235
- if (props.minValues && payload.min_values) fileUpload.minValues = payload.min_values;
236
- if (props.maxValues && payload.max_values) fileUpload.maxValues = payload.max_values;
237
- if (props.required && payload.required) fileUpload.required = payload.required;
356
+ const _payload = payload;
357
+ if (props.minValues && _payload.min_values) fileUpload.minValues = _payload.min_values;
358
+ if (props.maxValues && _payload.max_values) fileUpload.maxValues = _payload.max_values;
359
+ if (props.required && _payload.required) fileUpload.required = _payload.required;
360
+ if (props.fileTypes && _payload.file_types) fileUpload.fileTypes = _payload.file_types;
238
361
  }
239
362
  return fileUpload;
240
363
  }
364
+ function transformRadioGroupComponent(bot, payload) {
365
+ const props = bot.transformers.desiredProperties.component;
366
+ const radioGroup = {};
367
+ if (props.type && payload.type) radioGroup.type = payload.type;
368
+ if (props.id && payload.id) radioGroup.id = payload.id;
369
+ if (props.customId && payload.custom_id) radioGroup.customId = payload.custom_id;
370
+ // We assume that if we find 'options' it is the component
371
+ if ('options' in payload) {
372
+ if (props.options && payload.options) radioGroup.options = payload.options;
373
+ if (props.required && payload.required !== undefined) radioGroup.required = payload.required;
374
+ } else {
375
+ const _payload = payload;
376
+ if (props.value) radioGroup.value = _payload.value ?? undefined;
377
+ }
378
+ return radioGroup;
379
+ }
380
+ function transformCheckboxGroupComponent(bot, payload) {
381
+ const props = bot.transformers.desiredProperties.component;
382
+ const checkboxGroup = {};
383
+ if (props.type && payload.type) checkboxGroup.type = payload.type;
384
+ if (props.id && payload.id) checkboxGroup.id = payload.id;
385
+ if (props.customId && payload.custom_id) checkboxGroup.customId = payload.custom_id;
386
+ // We assume that if we find 'options' it is the component
387
+ if ('options' in payload) {
388
+ if (props.options && payload.options) checkboxGroup.options = payload.options;
389
+ if (props.minValues && payload.min_values !== undefined) checkboxGroup.minValues = payload.min_values;
390
+ if (props.maxValues && payload.max_values !== undefined) checkboxGroup.maxValues = payload.max_values;
391
+ if (props.required && payload.required !== undefined) checkboxGroup.required = payload.required;
392
+ } else {
393
+ const _payload = payload;
394
+ if (props.values && _payload.values) checkboxGroup.values = _payload.values;
395
+ }
396
+ return checkboxGroup;
397
+ }
398
+ function transformCheckboxComponent(bot, payload) {
399
+ const props = bot.transformers.desiredProperties.component;
400
+ const checkbox = {};
401
+ if (props.type && payload.type) checkbox.type = payload.type;
402
+ if (props.id && payload.id) checkbox.id = payload.id;
403
+ if (props.customId && payload.custom_id) checkbox.customId = payload.custom_id;
404
+ if (props.value && 'value' in payload) checkbox.value = payload.value;
405
+ if (props.default && 'default' in payload) checkbox.default = payload.default;
406
+ return checkbox;
407
+ }
241
408
 
242
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90cmFuc2Zvcm1lcnMvY29tcG9uZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIHR5cGUgRGlzY29yZEFjdGlvblJvdyxcbiAgdHlwZSBEaXNjb3JkQnV0dG9uQ29tcG9uZW50LFxuICB0eXBlIERpc2NvcmRDb250YWluZXJDb21wb25lbnQsXG4gIHR5cGUgRGlzY29yZEZpbGVDb21wb25lbnQsXG4gIHR5cGUgRGlzY29yZEZpbGVVcGxvYWRDb21wb25lbnQsXG4gIHR5cGUgRGlzY29yZEZpbGVVcGxvYWRJbnRlcmFjdGlvblJlc3BvbnNlLFxuICB0eXBlIERpc2NvcmRMYWJlbENvbXBvbmVudCxcbiAgdHlwZSBEaXNjb3JkTGFiZWxJbnRlcmFjdGlvblJlc3BvbnNlLFxuICB0eXBlIERpc2NvcmRNZWRpYUdhbGxlcnlDb21wb25lbnQsXG4gIHR5cGUgRGlzY29yZE1lZGlhR2FsbGVyeUl0ZW0sXG4gIHR5cGUgRGlzY29yZE1lc3NhZ2VDb21wb25lbnQsXG4gIHR5cGUgRGlzY29yZE1lc3NhZ2VDb21wb25lbnRGcm9tTW9kYWxJbnRlcmFjdGlvblJlc3BvbnNlLFxuICB0eXBlIERpc2NvcmRTZWN0aW9uQ29tcG9uZW50LFxuICB0eXBlIERpc2NvcmRTZWxlY3RNZW51Q29tcG9uZW50LFxuICB0eXBlIERpc2NvcmRTZXBhcmF0b3JDb21wb25lbnQsXG4gIHR5cGUgRGlzY29yZFN0cmluZ1NlbGVjdEludGVyYWN0aW9uUmVzcG9uc2UsXG4gIHR5cGUgRGlzY29yZFRleHREaXNwbGF5Q29tcG9uZW50LFxuICB0eXBlIERpc2NvcmRUZXh0RGlzcGxheUludGVyYWN0aW9uUmVzcG9uc2UsXG4gIHR5cGUgRGlzY29yZFRleHRJbnB1dENvbXBvbmVudCxcbiAgdHlwZSBEaXNjb3JkVGV4dElucHV0SW50ZXJhY3Rpb25SZXNwb25zZSxcbiAgdHlwZSBEaXNjb3JkVGh1bWJuYWlsQ29tcG9uZW50LFxuICB0eXBlIERpc2NvcmRVbmZ1cmxlZE1lZGlhSXRlbSxcbiAgTWVzc2FnZUNvbXBvbmVudFR5cGVzLFxufSBmcm9tICdAZGlzY29yZGVuby90eXBlcyc7XG5pbXBvcnQgdHlwZSB7IEJvdCB9IGZyb20gJy4uL2JvdC5qcyc7XG5pbXBvcnQgdHlwZSB7IERlc2lyZWRQcm9wZXJ0aWVzQmVoYXZpb3IsIFNldHVwRGVzaXJlZFByb3BzLCBUcmFuc2Zvcm1lcnNEZXNpcmVkUHJvcGVydGllcyB9IGZyb20gJy4uL2Rlc2lyZWRQcm9wZXJ0aWVzLmpzJztcbmltcG9ydCB0eXBlIHsgQ29tcG9uZW50LCBNZWRpYUdhbGxlcnlJdGVtLCBVbmZ1cmxlZE1lZGlhSXRlbSB9IGZyb20gJy4vdHlwZXMuanMnO1xuXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNmb3JtQ29tcG9uZW50KGJvdDogQm90LCBwYXlsb2FkOiBEaXNjb3JkTWVzc2FnZUNvbXBvbmVudCB8IERpc2NvcmRNZXNzYWdlQ29tcG9uZW50RnJvbU1vZGFsSW50ZXJhY3Rpb25SZXNwb25zZSk6IENvbXBvbmVudCB7XG4gIGxldCBjb21wb25lbnQ6IFNldHVwRGVzaXJlZFByb3BzPENvbXBvbmVudCwgVHJhbnNmb3JtZXJzRGVzaXJlZFByb3BlcnRpZXMsIERlc2lyZWRQcm9wZXJ0aWVzQmVoYXZpb3I+O1xuXG4gIC8vIFRoaXMgc3dpdGNoIGlzIGV4aGF1c3RpdmUsIHNvIHdlIGRvbnQgbmVlZCB0aGUgZGVmYXVsdCBjYXNlIGFuZCBUUyBkb2VzIG5vdCBlcnJvciBvdXQgZm9yIHRoZSB1bi1pbml0aWFsaXplZCBjb21wb25lbnQgdmFyaWFibGVcbiAgc3dpdGNoIChwYXlsb2FkLnR5cGUpIHtcbiAgICBjYXNlIE1lc3NhZ2VDb21wb25lbnRUeXBlcy5BY3Rpb25Sb3c6XG4gICAgICBjb21wb25lbnQgPSB0cmFuc2Zvcm1BY3Rpb25Sb3coYm90LCBwYXlsb2FkKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgTWVzc2FnZUNvbXBvbmVudFR5cGVzLkJ1dHRvbjpcbiAgICAgIGNvbXBvbmVudCA9IHRyYW5zZm9ybUJ1dHRvbkNvbXBvbmVudChib3QsIHBheWxvYWQpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBNZXNzYWdlQ29tcG9uZW50VHlwZXMuQ29udGFpbmVyOlxuICAgICAgY29tcG9uZW50ID0gdHJhbnNmb3JtQ29udGFpbmVyQ29tcG9uZW50KGJvdCwgcGF5bG9hZCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIE1lc3NhZ2VDb21wb25lbnRUeXBlcy5UZXh0SW5wdXQ6XG4gICAgICBjb21wb25lbnQgPSB0cmFuc2Zvcm1JbnB1dFRleHRDb21wb25lbnQoYm90LCBwYXlsb2FkKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgTWVzc2FnZUNvbXBvbmVudFR5cGVzLlN0cmluZ1NlbGVjdDpcbiAgICBjYXNlIE1lc3NhZ2VDb21wb25lbnRUeXBlcy5Vc2VyU2VsZWN0OlxuICAgIGNhc2UgTWVzc2FnZUNvbXBvbmVudFR5cGVzLlJvbGVTZWxlY3Q6XG4gICAgY2FzZSBNZXNzYWdlQ29tcG9uZW50VHlwZXMuTWVudGlvbmFibGVTZWxlY3Q6XG4gICAgY2FzZSBNZXNzYWdlQ29tcG9uZW50VHlwZXMuQ2hhbm5lbFNlbGVjdDpcbiAgICAgIGNvbXBvbmVudCA9IHRyYW5zZm9ybVNlbGVjdE1lbnVDb21wb25lbnQoYm90LCBwYXlsb2FkKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgTWVzc2FnZUNvbXBvbmVudFR5cGVzLlNlY3Rpb246XG4gICAgICBjb21wb25lbnQgPSB0cmFuc2Zvcm1TZWN0aW9uQ29tcG9uZW50KGJvdCwgcGF5bG9hZCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIE1lc3NhZ2VDb21wb25lbnRUeXBlcy5UaHVtYm5haWw6XG4gICAgICBjb21wb25lbnQgPSB0cmFuc2Zvcm1UaHVtYm5haWxDb21wb25lbnQoYm90LCBwYXlsb2FkKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgTWVzc2FnZUNvbXBvbmVudFR5cGVzLk1lZGlhR2FsbGVyeTpcbiAgICAgIGNvbXBvbmVudCA9IHRyYW5zZm9ybU1lZGlhR2FsbGVyeUNvbXBvbmVudChib3QsIHBheWxvYWQpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBNZXNzYWdlQ29tcG9uZW50VHlwZXMuRmlsZTpcbiAgICAgIGNvbXBvbmVudCA9IHRyYW5zZm9ybUZpbGVDb21wb25lbnQoYm90LCBwYXlsb2FkKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgTWVzc2FnZUNvbXBvbmVudFR5cGVzLlNlcGFyYXRvcjpcbiAgICAgIGNvbXBvbmVudCA9IHRyYW5zZm9ybVNlcGFyYXRvckNvbXBvbmVudChib3QsIHBheWxvYWQpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBNZXNzYWdlQ29tcG9uZW50VHlwZXMuVGV4dERpc3BsYXk6XG4gICAgICBjb21wb25lbnQgPSB0cmFuc2Zvcm1UZXh0RGlzcGxheUNvbXBvbmVudChib3QsIHBheWxvYWQpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBNZXNzYWdlQ29tcG9uZW50VHlwZXMuTGFiZWw6XG4gICAgICBjb21wb25lbnQgPSB0cmFuc2Zvcm1MYWJlbENvbXBvbmVudChib3QsIHBheWxvYWQpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBNZXNzYWdlQ29tcG9uZW50VHlwZXMuRmlsZVVwbG9hZDpcbiAgICAgIGNvbXBvbmVudCA9IHRyYW5zZm9ybUZpbGVVcGxvYWRDb21wb25lbnQoYm90LCBwYXlsb2FkKTtcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgcmV0dXJuIGJvdC50cmFuc2Zvcm1lcnMuY3VzdG9taXplcnMuY29tcG9uZW50KGJvdCwgcGF5bG9hZCwgY29tcG9uZW50KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zZm9ybVVuZnVybGVkTWVkaWFJdGVtKGJvdDogQm90LCBwYXlsb2FkOiBEaXNjb3JkVW5mdXJsZWRNZWRpYUl0ZW0pOiBVbmZ1cmxlZE1lZGlhSXRlbSB7XG4gIGNvbnN0IHByb3BzID0gYm90LnRyYW5zZm9ybWVycy5kZXNpcmVkUHJvcGVydGllcy51bmZ1cmxlZE1lZGlhSXRlbTtcbiAgY29uc3QgbWVkaWFJdGVtID0ge30gYXMgU2V0dXBEZXNpcmVkUHJvcHM8VW5mdXJsZWRNZWRpYUl0ZW0sIFRyYW5zZm9ybWVyc0Rlc2lyZWRQcm9wZXJ0aWVzLCBEZXNpcmVkUHJvcGVydGllc0JlaGF2aW9yPjtcblxuICBpZiAocHJvcHMudXJsICYmIHBheWxvYWQudXJsKSBtZWRpYUl0ZW0udXJsID0gcGF5bG9hZC51cmw7XG4gIGlmIChwcm9wcy5wcm94eVVybCAmJiBwYXlsb2FkLnByb3h5X3VybCkgbWVkaWFJdGVtLnByb3h5VXJsID0gcGF5bG9hZC5wcm94eV91cmw7XG4gIGlmIChwcm9wcy5oZWlnaHQgJiYgcGF5bG9hZC5oZWlnaHQpIG1lZGlhSXRlbS5oZWlnaHQgPSBwYXlsb2FkLmhlaWdodDtcbiAgaWYgKHByb3BzLndpZHRoICYmIHBheWxvYWQud2lkdGgpIG1lZGlhSXRlbS53aWR0aCA9IHBheWxvYWQud2lkdGg7XG4gIGlmIChwcm9wcy5jb250ZW50VHlwZSAmJiBwYXlsb2FkLmNvbnRlbnRfdHlwZSkgbWVkaWFJdGVtLmNvbnRlbnRUeXBlID0gcGF5bG9hZC5jb250ZW50X3R5cGU7XG4gIGlmIChwcm9wcy5hdHRhY2htZW50SWQgJiYgcGF5bG9hZC5hdHRhY2htZW50X2lkKSBtZWRpYUl0ZW0uYXR0YWNobWVudElkID0gYm90LnRyYW5zZm9ybWVycy5zbm93Zmxha2UocGF5bG9hZC5hdHRhY2htZW50X2lkKTtcblxuICByZXR1cm4gYm90LnRyYW5zZm9ybWVycy5jdXN0b21pemVycy51bmZ1cmxlZE1lZGlhSXRlbShib3QsIHBheWxvYWQsIG1lZGlhSXRlbSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2Zvcm1NZWRpYUdhbGxlcnlJdGVtKGJvdDogQm90LCBwYXlsb2FkOiBEaXNjb3JkTWVkaWFHYWxsZXJ5SXRlbSk6IE1lZGlhR2FsbGVyeUl0ZW0ge1xuICBjb25zdCBwcm9wcyA9IGJvdC50cmFuc2Zvcm1lcnMuZGVzaXJlZFByb3BlcnRpZXMubWVkaWFHYWxsZXJ5SXRlbTtcbiAgY29uc3QgZ2FsbGVyeUl0ZW0gPSB7fSBhcyBTZXR1cERlc2lyZWRQcm9wczxNZWRpYUdhbGxlcnlJdGVtLCBUcmFuc2Zvcm1lcnNEZXNpcmVkUHJvcGVydGllcywgRGVzaXJlZFByb3BlcnRpZXNCZWhhdmlvcj47XG5cbiAgaWYgKHByb3BzLm1lZGlhICYmIHBheWxvYWQubWVkaWEpIGdhbGxlcnlJdGVtLm1lZGlhID0gYm90LnRyYW5zZm9ybWVycy51bmZ1cmxlZE1lZGlhSXRlbShib3QsIHBheWxvYWQubWVkaWEpO1xuICBpZiAocHJvcHMuZGVzY3JpcHRpb24gJiYgcGF5bG9hZC5kZXNjcmlwdGlvbikgZ2FsbGVyeUl0ZW0uZGVzY3JpcHRpb24gPSBwYXlsb2FkLmRlc2NyaXB0aW9uO1xuICBpZiAocHJvcHMuc3BvaWxlciAmJiBwYXlsb2FkLnNwb2lsZXIpIGdhbGxlcnlJdGVtLnNwb2lsZXIgPSBwYXlsb2FkLnNwb2lsZXI7XG5cbiAgcmV0dXJuIGJvdC50cmFuc2Zvcm1lcnMuY3VzdG9taXplcnMubWVkaWFHYWxsZXJ5SXRlbShib3QsIHBheWxvYWQsIGdhbGxlcnlJdGVtKTtcbn1cblxuZnVuY3Rpb24gdHJhbnNmb3JtQWN0aW9uUm93KGJvdDogQm90LCBwYXlsb2FkOiBEaXNjb3JkQWN0aW9uUm93KSB7XG4gIGNvbnN0IHByb3BzID0gYm90LnRyYW5zZm9ybWVycy5kZXNpcmVkUHJvcGVydGllcy5jb21wb25lbnQ7XG4gIGNvbnN0IGFjdGlvblJvdyA9IHt9IGFzIFNldHVwRGVzaXJlZFByb3BzPENvbXBvbmVudCwgVHJhbnNmb3JtZXJzRGVzaXJlZFByb3BlcnRpZXMsIERlc2lyZWRQcm9wZXJ0aWVzQmVoYXZpb3I+O1xuXG4gIGlmIChwcm9wcy50eXBlICYmIHBheWxvYWQudHlwZSkgYWN0aW9uUm93LnR5cGUgPSBwYXlsb2FkLnR5cGU7XG4gIGlmIChwcm9wcy5pZCAmJiBwYXlsb2FkLmlkKSBhY3Rpb25Sb3cuaWQgPSBwYXlsb2FkLmlkO1xuICBpZiAocHJvcHMuY29tcG9uZW50cyAmJiBwYXlsb2FkLmNvbXBvbmVudHMpXG4gICAgYWN0aW9uUm93LmNvbXBvbmVudHMgPSBwYXlsb2FkLmNvbXBvbmVudHMubWFwKChjb21wb25lbnQpID0+IGJvdC50cmFuc2Zvcm1lcnMuY29tcG9uZW50KGJvdCwgY29tcG9uZW50KSk7XG5cbiAgcmV0dXJuIGFjdGlvblJvdztcbn1cblxuZnVuY3Rpb24gdHJhbnNmb3JtQ29udGFpbmVyQ29tcG9uZW50KGJvdDogQm90LCBwYXlsb2FkOiBEaXNjb3JkQ29udGFpbmVyQ29tcG9uZW50KSB7XG4gIGNvbnN0IHByb3BzID0gYm90LnRyYW5zZm9ybWVycy5kZXNpcmVkUHJvcGVydGllcy5jb21wb25lbnQ7XG4gIGNvbnN0IGNvbnRhaW5lciA9IHt9IGFzIFNldHVwRGVzaXJlZFByb3BzPENvbXBvbmVudCwgVHJhbnNmb3JtZXJzRGVzaXJlZFByb3BlcnRpZXMsIERlc2lyZWRQcm9wZXJ0aWVzQmVoYXZpb3I+O1xuXG4gIGlmIChwcm9wcy50eXBlICYmIHBheWxvYWQudHlwZSkgY29udGFpbmVyLnR5cGUgPSBwYXlsb2FkLnR5cGU7XG4gIGlmIChwcm9wcy5pZCAmJiBwYXlsb2FkLmlkKSBjb250YWluZXIuaWQgPSBwYXlsb2FkLmlkO1xuICBpZiAocHJvcHMuYWNjZW50Q29sb3IgJiYgcGF5bG9hZC5hY2NlbnRfY29sb3IpIGNvbnRhaW5lci5hY2NlbnRDb2xvciA9IHBheWxvYWQuYWNjZW50X2NvbG9yO1xuICBpZiAocHJvcHMuc3BvaWxlciAmJiBwYXlsb2FkLnNwb2lsZXIpIGNvbnRhaW5lci5zcG9pbGVyID0gcGF5bG9hZC5zcG9pbGVyO1xuICBpZiAocHJvcHMuY29tcG9uZW50cyAmJiBwYXlsb2FkLmNvbXBvbmVudHMpXG4gICAgY29udGFpbmVyLmNvbXBvbmVudHMgPSBwYXlsb2FkLmNvbXBvbmVudHMubWFwKChjb21wb25lbnQpID0+IGJvdC50cmFuc2Zvcm1lcnMuY29tcG9uZW50KGJvdCwgY29tcG9uZW50KSk7XG5cbiAgcmV0dXJuIGNvbnRhaW5lcjtcbn1cblxuZnVuY3Rpb24gdHJhbnNmb3JtQnV0dG9uQ29tcG9uZW50KGJvdDogQm90LCBwYXlsb2FkOiBEaXNjb3JkQnV0dG9uQ29tcG9uZW50KSB7XG4gIGNvbnN0IHByb3BzID0gYm90LnRyYW5zZm9ybWVycy5kZXNpcmVkUHJvcGVydGllcy5jb21wb25lbnQ7XG4gIGNvbnN0IGJ1dHRvbiA9IHt9IGFzIFNldHVwRGVzaXJlZFByb3BzPENvbXBvbmVudCwgVHJhbnNmb3JtZXJzRGVzaXJlZFByb3BlcnRpZXMsIERlc2lyZWRQcm9wZXJ0aWVzQmVoYXZpb3I+O1xuXG4gIGlmIChwcm9wcy50eXBlICYmIHBheWxvYWQudHlwZSkgYnV0dG9uLnR5cGUgPSBwYXlsb2FkLnR5cGU7XG4gIGlmIChwcm9wcy5pZCAmJiBwYXlsb2FkLmlkKSBidXR0b24uaWQgPSBwYXlsb2FkLmlkO1xuICBpZiAocHJvcHMubGFiZWwgJiYgcGF5bG9hZC5sYWJlbCkgYnV0dG9uLmxhYmVsID0gcGF5bG9hZC5sYWJlbDtcbiAgaWYgKHByb3BzLmN1c3RvbUlkICYmIHBheWxvYWQuY3VzdG9tX2lkKSBidXR0b24uY3VzdG9tSWQgPSBwYXlsb2FkLmN1c3RvbV9pZDtcbiAgaWYgKHByb3BzLnN0eWxlICYmIHBheWxvYWQuc3R5bGUpIGJ1dHRvbi5zdHlsZSA9IHBheWxvYWQuc3R5bGU7XG4gIGlmIChwcm9wcy5lbW9qaSAmJiBwYXlsb2FkLmVtb2ppKSBidXR0b24uZW1vamkgPSBib3QudHJhbnNmb3JtZXJzLmVtb2ppKGJvdCwgcGF5bG9hZC5lbW9qaSk7XG4gIGlmIChwcm9wcy51cmwgJiYgcGF5bG9hZC51cmwpIGJ1dHRvbi51cmwgPSBwYXlsb2FkLnVybDtcbiAgaWYgKHByb3BzLmRpc2FibGVkICYmIHBheWxvYWQuZGlzYWJsZWQpIGJ1dHRvbi5kaXNhYmxlZCA9IHBheWxvYWQuZGlzYWJsZWQ7XG4gIGlmIChwcm9wcy5za3VJZCAmJiBwYXlsb2FkLnNrdV9pZCkgYnV0dG9uLnNrdUlkID0gYm90LnRyYW5zZm9ybWVycy5zbm93Zmxha2UocGF5bG9hZC5za3VfaWQpO1xuXG4gIHJldHVybiBidXR0b247XG59XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybUlucHV0VGV4dENvbXBvbmVudChib3Q6IEJvdCwgcGF5bG9hZDogRGlzY29yZFRleHRJbnB1dENvbXBvbmVudCB8IERpc2NvcmRUZXh0SW5wdXRJbnRlcmFjdGlvblJlc3BvbnNlKSB7XG4gIGNvbnN0IHByb3BzID0gYm90LnRyYW5zZm9ybWVycy5kZXNpcmVkUHJvcGVydGllcy5jb21wb25lbnQ7XG4gIGNvbnN0IGlucHV0ID0ge30gYXMgU2V0dXBEZXNpcmVkUHJvcHM8Q29tcG9uZW50LCBUcmFuc2Zvcm1lcnNEZXNpcmVkUHJvcGVydGllcywgRGVzaXJlZFByb3BlcnRpZXNCZWhhdmlvcj47XG5cbiAgaWYgKHByb3BzLnR5cGUgJiYgcGF5bG9hZC50eXBlKSBpbnB1dC50eXBlID0gcGF5bG9hZC50eXBlO1xuICBpZiAocHJvcHMuaWQgJiYgcGF5bG9hZC5pZCkgaW5wdXQuaWQgPSBwYXlsb2FkLmlkO1xuICBpZiAocHJvcHMudmFsdWUgJiYgcGF5bG9hZC52YWx1ZSkgaW5wdXQudmFsdWUgPSBwYXlsb2FkLnZhbHVlO1xuICBpZiAocHJvcHMuY3VzdG9tSWQgJiYgcGF5bG9hZC5jdXN0b21faWQpIGlucHV0LmN1c3RvbUlkID0gcGF5bG9hZC5jdXN0b21faWQ7XG5cbiAgLy8gQ2hlY2sgaWYgaXQgaXMgdGhlIGNvbXBvbmVudCBvciB0aGUgcmVzcG9uc2VcbiAgaWYgKCdzdHlsZScgaW4gcGF5bG9hZCkge1xuICAgIGlmIChwcm9wcy5zdHlsZSAmJiBwYXlsb2FkLnN0eWxlKSBpbnB1dC5zdHlsZSA9IHBheWxvYWQuc3R5bGU7XG4gICAgaWYgKHByb3BzLnJlcXVpcmVkICYmIHBheWxvYWQucmVxdWlyZWQpIGlucHV0LnJlcXVpcmVkID0gcGF5bG9hZC5yZXF1aXJlZDtcbiAgICBpZiAocHJvcHMubGFiZWwgJiYgcGF5bG9hZC5sYWJlbCkgaW5wdXQubGFiZWwgPSBwYXlsb2FkLmxhYmVsO1xuICAgIGlmIChwcm9wcy5wbGFjZWhvbGRlciAmJiBwYXlsb2FkLnBsYWNlaG9sZGVyKSBpbnB1dC5wbGFjZWhvbGRlciA9IHBheWxvYWQucGxhY2Vob2xkZXI7XG4gICAgaWYgKHByb3BzLm1pbkxlbmd0aCAmJiBwYXlsb2FkLm1pbl9sZW5ndGgpIGlucHV0Lm1pbkxlbmd0aCA9IHBheWxvYWQubWluX2xlbmd0aDtcbiAgICBpZiAocHJvcHMubWF4TGVuZ3RoICYmIHBheWxvYWQubWF4X2xlbmd0aCkgaW5wdXQubWF4TGVuZ3RoID0gcGF5bG9hZC5tYXhfbGVuZ3RoO1xuICB9XG5cbiAgcmV0dXJuIGlucHV0O1xufVxuXG5mdW5jdGlvbiB0cmFuc2Zvcm1TZWxlY3RNZW51Q29tcG9uZW50KGJvdDogQm90LCBwYXlsb2FkOiBEaXNjb3JkU2VsZWN0TWVudUNvbXBvbmVudCB8IERpc2NvcmRTdHJpbmdTZWxlY3RJbnRlcmFjdGlvblJlc3BvbnNlKSB7XG4gIGNvbnN0IHByb3BzID0gYm90LnRyYW5zZm9ybWVycy5kZXNpcmVkUHJvcGVydGllcy5jb21wb25lbnQ7XG4gIGNvbnN0IHNlbGVjdCA9IHt9IGFzIFNldHVwRGVzaXJlZFByb3BzPENvbXBvbmVudCwgVHJhbnNmb3JtZXJzRGVzaXJlZFByb3BlcnRpZXMsIERlc2lyZWRQcm9wZXJ0aWVzQmVoYXZpb3I+O1xuXG4gIGlmIChwcm9wcy50eXBlICYmIHBheWxvYWQudHlwZSkgc2VsZWN0LnR5cGUgPSBwYXlsb2FkLnR5cGU7XG4gIGlmIChwcm9wcy5pZCAmJiBwYXlsb2FkLmlkKSBzZWxlY3QuaWQgPSBwYXlsb2FkLmlkO1xuICBpZiAocHJvcHMuY3VzdG9tSWQgJiYgcGF5bG9hZC5jdXN0b21faWQpIHNlbGVjdC5jdXN0b21JZCA9IHBheWxvYWQuY3VzdG9tX2lkO1xuXG4gIC8vIENoZWNrIGlmIHRoaXMgaXMgdGhlIHN0cmluZyBzZWxlY3QgcmVzcG9uc2VcbiAgaWYgKCd2YWx1ZXMnIGluIHBheWxvYWQpIHtcbiAgICBpZiAocHJvcHMudmFsdWVzICYmIHBheWxvYWQudmFsdWVzKSBzZWxlY3QudmFsdWVzID0gcGF5bG9hZC52YWx1ZXM7XG4gIH0gZWxzZSB7XG4gICAgaWYgKHByb3BzLnBsYWNlaG9sZGVyICYmIHBheWxvYWQucGxhY2Vob2xkZXIpIHNlbGVjdC5wbGFjZWhvbGRlciA9IHBheWxvYWQucGxhY2Vob2xkZXI7XG4gICAgaWYgKHByb3BzLm1pblZhbHVlcyAmJiBwYXlsb2FkLm1pbl92YWx1ZXMpIHNlbGVjdC5taW5WYWx1ZXMgPSBwYXlsb2FkLm1pbl92YWx1ZXM7XG4gICAgaWYgKHByb3BzLm1heFZhbHVlcyAmJiBwYXlsb2FkLm1heF92YWx1ZXMpIHNlbGVjdC5tYXhWYWx1ZXMgPSBwYXlsb2FkLm1heF92YWx1ZXM7XG4gICAgaWYgKHByb3BzLmRlZmF1bHRWYWx1ZXMgJiYgcGF5bG9hZC5kZWZhdWx0X3ZhbHVlcylcbiAgICAgIHNlbGVjdC5kZWZhdWx0VmFsdWVzID0gcGF5bG9hZC5kZWZhdWx0X3ZhbHVlcy5tYXAoKGRlZmF1bHRWYWx1ZSkgPT4gKHtcbiAgICAgICAgaWQ6IGJvdC50cmFuc2Zvcm1lcnMuc25vd2ZsYWtlKGRlZmF1bHRWYWx1ZS5pZCksXG4gICAgICAgIHR5cGU6IGRlZmF1bHRWYWx1ZS50eXBlLFxuICAgICAgfSkpO1xuICAgIGlmIChwcm9wcy5jaGFubmVsVHlwZXMgJiYgcGF5bG9hZC5jaGFubmVsX3R5cGVzKSBzZWxlY3QuY2hhbm5lbFR5cGVzID0gcGF5bG9hZC5jaGFubmVsX3R5cGVzO1xuICAgIGlmIChwcm9wcy5vcHRpb25zICYmIHBheWxvYWQub3B0aW9ucylcbiAgICAgIHNlbGVjdC5vcHRpb25zID0gcGF5bG9hZC5vcHRpb25zLm1hcCgob3B0aW9uKSA9PiAoe1xuICAgICAgICBsYWJlbDogb3B0aW9uLmxhYmVsLFxuICAgICAgICB2YWx1ZTogb3B0aW9uLnZhbHVlLFxuICAgICAgICBkZXNjcmlwdGlvbjogb3B0aW9uLmRlc2NyaXB0aW9uLFxuICAgICAgICBlbW9qaTogb3B0aW9uLmVtb2ppXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIGlkOiBvcHRpb24uZW1vamkuaWQgPyBib3QudHJhbnNmb3JtZXJzLnNub3dmbGFrZShvcHRpb24uZW1vamkuaWQpIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICBuYW1lOiBvcHRpb24uZW1vamkubmFtZSA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgICAgIGFuaW1hdGVkOiBvcHRpb24uZW1vamkuYW5pbWF0ZWQsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgIGRlZmF1bHQ6IG9wdGlvbi5kZWZhdWx0LFxuICAgICAgfSkpO1xuICAgIGlmIChwcm9wcy5kaXNhYmxlZCAmJiBwYXlsb2FkLmRpc2FibGVkKSBzZWxlY3QuZGlzYWJsZWQgPSBwYXlsb2FkLmRpc2FibGVkO1xuICB9XG5cbiAgcmV0dXJuIHNlbGVjdDtcbn1cblxuZnVuY3Rpb24gdHJhbnNmb3JtU2VjdGlvbkNvbXBvbmVudChib3Q6IEJvdCwgcGF5bG9hZDogRGlzY29yZFNlY3Rpb25Db21wb25lbnQpIHtcbiAgY29uc3QgcHJvcHMgPSBib3QudHJhbnNmb3JtZXJzLmRlc2lyZWRQcm9wZXJ0aWVzLmNvbXBvbmVudDtcbiAgY29uc3Qgc2VjdGlvbiA9IHt9IGFzIFNldHVwRGVzaXJlZFByb3BzPENvbXBvbmVudCwgVHJhbnNmb3JtZXJzRGVzaXJlZFByb3BlcnRpZXMsIERlc2lyZWRQcm9wZXJ0aWVzQmVoYXZpb3I+O1xuXG4gIGlmIChwcm9wcy50eXBlICYmIHBheWxvYWQudHlwZSkgc2VjdGlvbi50eXBlID0gcGF5bG9hZC50eXBlO1xuICBpZiAocHJvcHMuaWQgJiYgcGF5bG9hZC5pZCkgc2VjdGlvbi5pZCA9IHBheWxvYWQuaWQ7XG4gIGlmIChwcm9wcy5jb21wb25lbnRzICYmIHBheWxvYWQuY29tcG9uZW50cykgc2VjdGlvbi5jb21wb25lbnRzID0gcGF5bG9hZC5jb21wb25lbnRzLm1hcCgoY29tcG9uZW50KSA9PiBib3QudHJhbnNmb3JtZXJzLmNvbXBvbmVudChib3QsIGNvbXBvbmVudCkpO1xuICBpZiAocHJvcHMuYWNjZXNzb3J5ICYmIHBheWxvYWQuYWNjZXNzb3J5KSBzZWN0aW9uLmFjY2Vzc29yeSA9IGJvdC50cmFuc2Zvcm1lcnMuY29tcG9uZW50KGJvdCwgcGF5bG9hZC5hY2Nlc3NvcnkpO1xuXG4gIHJldHVybiBzZWN0aW9uO1xufVxuXG5mdW5jdGlvbiB0cmFuc2Zvcm1UaHVtYm5haWxDb21wb25lbnQoYm90OiBCb3QsIHBheWxvYWQ6IERpc2NvcmRUaHVtYm5haWxDb21wb25lbnQpIHtcbiAgY29uc3QgcHJvcHMgPSBib3QudHJhbnNmb3JtZXJzLmRlc2lyZWRQcm9wZXJ0aWVzLmNvbXBvbmVudDtcbiAgY29uc3QgdGh1bWJuYWlsID0ge30gYXMgU2V0dXBEZXNpcmVkUHJvcHM8Q29tcG9uZW50LCBUcmFuc2Zvcm1lcnNEZXNpcmVkUHJvcGVydGllcywgRGVzaXJlZFByb3BlcnRpZXNCZWhhdmlvcj47XG5cbiAgaWYgKHByb3BzLnR5cGUgJiYgcGF5bG9hZC50eXBlKSB0aHVtYm5haWwudHlwZSA9IHBheWxvYWQudHlwZTtcbiAgaWYgKHByb3BzLmlkICYmIHBheWxvYWQuaWQpIHRodW1ibmFpbC5pZCA9IHBheWxvYWQuaWQ7XG4gIGlmIChwcm9wcy5tZWRpYSAmJiBwYXlsb2FkLm1lZGlhKSB0aHVtYm5haWwubWVkaWEgPSBib3QudHJhbnNmb3JtZXJzLnVuZnVybGVkTWVkaWFJdGVtKGJvdCwgcGF5bG9hZC5tZWRpYSk7XG4gIGlmIChwcm9wcy5kZXNjcmlwdGlvbiAmJiBwYXlsb2FkLmRlc2NyaXB0aW9uKSB0aHVtYm5haWwuZGVzY3JpcHRpb24gPSBwYXlsb2FkLmRlc2NyaXB0aW9uO1xuICBpZiAocHJvcHMuc3BvaWxlciAmJiBwYXlsb2FkLnNwb2lsZXIpIHRodW1ibmFpbC5zcG9pbGVyID0gcGF5bG9hZC5zcG9pbGVyO1xuXG4gIHJldHVybiB0aHVtYm5haWw7XG59XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybU1lZGlhR2FsbGVyeUNvbXBvbmVudChib3Q6IEJvdCwgcGF5bG9hZDogRGlzY29yZE1lZGlhR2FsbGVyeUNvbXBvbmVudCkge1xuICBjb25zdCBwcm9wcyA9IGJvdC50cmFuc2Zvcm1lcnMuZGVzaXJlZFByb3BlcnRpZXMuY29tcG9uZW50O1xuICBjb25zdCBtZWRpYUdhbGxlcnkgPSB7fSBhcyBTZXR1cERlc2lyZWRQcm9wczxDb21wb25lbnQsIFRyYW5zZm9ybWVyc0Rlc2lyZWRQcm9wZXJ0aWVzLCBEZXNpcmVkUHJvcGVydGllc0JlaGF2aW9yPjtcblxuICBpZiAocHJvcHMudHlwZSAmJiBwYXlsb2FkLnR5cGUpIG1lZGlhR2FsbGVyeS50eXBlID0gcGF5bG9hZC50eXBlO1xuICBpZiAocHJvcHMuaWQgJiYgcGF5bG9hZC5pZCkgbWVkaWFHYWxsZXJ5LmlkID0gcGF5bG9hZC5pZDtcbiAgaWYgKHByb3BzLml0ZW1zICYmIHBheWxvYWQuaXRlbXMpIG1lZGlhR2FsbGVyeS5pdGVtcyA9IHBheWxvYWQuaXRlbXMubWFwKChpdGVtKSA9PiBib3QudHJhbnNmb3JtZXJzLm1lZGlhR2FsbGVyeUl0ZW0oYm90LCBpdGVtKSk7XG5cbiAgcmV0dXJuIG1lZGlhR2FsbGVyeTtcbn1cblxuZnVuY3Rpb24gdHJhbnNmb3JtRmlsZUNvbXBvbmVudChib3Q6IEJvdCwgcGF5bG9hZDogRGlzY29yZEZpbGVDb21wb25lbnQpIHtcbiAgY29uc3QgcHJvcHMgPSBib3QudHJhbnNmb3JtZXJzLmRlc2lyZWRQcm9wZXJ0aWVzLmNvbXBvbmVudDtcbiAgY29uc3QgZmlsZSA9IHt9IGFzIFNldHVwRGVzaXJlZFByb3BzPENvbXBvbmVudCwgVHJhbnNmb3JtZXJzRGVzaXJlZFByb3BlcnRpZXMsIERlc2lyZWRQcm9wZXJ0aWVzQmVoYXZpb3I+O1xuXG4gIGlmIChwcm9wcy50eXBlICYmIHBheWxvYWQudHlwZSkgZmlsZS50eXBlID0gcGF5bG9hZC50eXBlO1xuICBpZiAocHJvcHMuaWQgJiYgcGF5bG9hZC5pZCkgZmlsZS5pZCA9IHBheWxvYWQuaWQ7XG4gIGlmIChwcm9wcy5maWxlICYmIHBheWxvYWQuZmlsZSkgZmlsZS5maWxlID0gYm90LnRyYW5zZm9ybWVycy51bmZ1cmxlZE1lZGlhSXRlbShib3QsIHBheWxvYWQuZmlsZSk7XG4gIGlmIChwcm9wcy5zcG9pbGVyICYmIHBheWxvYWQuc3BvaWxlcikgZmlsZS5zcG9pbGVyID0gcGF5bG9hZC5zcG9pbGVyO1xuICBpZiAocHJvcHMubmFtZSAmJiBwYXlsb2FkLm5hbWUpIGZpbGUubmFtZSA9IHBheWxvYWQubmFtZTtcbiAgaWYgKHByb3BzLnNpemUgJiYgcGF5bG9hZC5zaXplKSBmaWxlLnNpemUgPSBwYXlsb2FkLnNpemU7XG5cbiAgcmV0dXJuIGZpbGU7XG59XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybVRleHREaXNwbGF5Q29tcG9uZW50KGJvdDogQm90LCBwYXlsb2FkOiBEaXNjb3JkVGV4dERpc3BsYXlDb21wb25lbnQgfCBEaXNjb3JkVGV4dERpc3BsYXlJbnRlcmFjdGlvblJlc3BvbnNlKSB7XG4gIGNvbnN0IHByb3BzID0gYm90LnRyYW5zZm9ybWVycy5kZXNpcmVkUHJvcGVydGllcy5jb21wb25lbnQ7XG4gIGNvbnN0IHRleHREaXNwbGF5ID0ge30gYXMgU2V0dXBEZXNpcmVkUHJvcHM8Q29tcG9uZW50LCBUcmFuc2Zvcm1lcnNEZXNpcmVkUHJvcGVydGllcywgRGVzaXJlZFByb3BlcnRpZXNCZWhhdmlvcj47XG5cbiAgaWYgKHByb3BzLnR5cGUgJiYgcGF5bG9hZC50eXBlKSB0ZXh0RGlzcGxheS50eXBlID0gcGF5bG9hZC50eXBlO1xuICBpZiAocHJvcHMuaWQgJiYgcGF5bG9hZC5pZCkgdGV4dERpc3BsYXkuaWQgPSBwYXlsb2FkLmlkO1xuICAvLyBUaGF0IHRoYXQgdGhpcyBpc24ndCBhIHJlc3BvbnNlXG4gIGlmICgnY29udGVudCcgaW4gcGF5bG9hZCkge1xuICAgIGlmIChwcm9wcy5jb250ZW50ICYmIHBheWxvYWQuY29udGVudCkgdGV4dERpc3BsYXkuY29udGVudCA9IHBheWxvYWQuY29udGVudDtcbiAgfVxuXG4gIHJldHVybiB0ZXh0RGlzcGxheTtcbn1cblxuZnVuY3Rpb24gdHJhbnNmb3JtU2VwYXJhdG9yQ29tcG9uZW50KGJvdDogQm90LCBwYXlsb2FkOiBEaXNjb3JkU2VwYXJhdG9yQ29tcG9uZW50KSB7XG4gIGNvbnN0IHByb3BzID0gYm90LnRyYW5zZm9ybWVycy5kZXNpcmVkUHJvcGVydGllcy5jb21wb25lbnQ7XG4gIGNvbnN0IHNlcGFyYXRvciA9IHt9IGFzIFNldHVwRGVzaXJlZFByb3BzPENvbXBvbmVudCwgVHJhbnNmb3JtZXJzRGVzaXJlZFByb3BlcnRpZXMsIERlc2lyZWRQcm9wZXJ0aWVzQmVoYXZpb3I+O1xuXG4gIGlmIChwcm9wcy50eXBlICYmIHBheWxvYWQudHlwZSkgc2VwYXJhdG9yLnR5cGUgPSBwYXlsb2FkLnR5cGU7XG4gIGlmIChwcm9wcy5pZCAmJiBwYXlsb2FkLmlkKSBzZXBhcmF0b3IuaWQgPSBwYXlsb2FkLmlkO1xuICBpZiAocHJvcHMuZGl2aWRlciAmJiBwYXlsb2FkLmRpdmlkZXIpIHNlcGFyYXRvci5kaXZpZGVyID0gcGF5bG9hZC5kaXZpZGVyO1xuICBpZiAocHJvcHMuc3BhY2luZyAmJiBwYXlsb2FkLnNwYWNpbmcpIHNlcGFyYXRvci5zcGFjaW5nID0gcGF5bG9hZC5zcGFjaW5nO1xuXG4gIHJldHVybiBzZXBhcmF0b3I7XG59XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybUxhYmVsQ29tcG9uZW50KGJvdDogQm90LCBwYXlsb2FkOiBEaXNjb3JkTGFiZWxDb21wb25lbnQgfCBEaXNjb3JkTGFiZWxJbnRlcmFjdGlvblJlc3BvbnNlKSB7XG4gIGNvbnN0IHByb3BzID0gYm90LnRyYW5zZm9ybWVycy5kZXNpcmVkUHJvcGVydGllcy5jb21wb25lbnQ7XG4gIGNvbnN0IGxhYmVsID0ge30gYXMgU2V0dXBEZXNpcmVkUHJvcHM8Q29tcG9uZW50LCBUcmFuc2Zvcm1lcnNEZXNpcmVkUHJvcGVydGllcywgRGVzaXJlZFByb3BlcnRpZXNCZWhhdmlvcj47XG5cbiAgaWYgKHByb3BzLnR5cGUgJiYgcGF5bG9hZC50eXBlKSBsYWJlbC50eXBlID0gcGF5bG9hZC50eXBlO1xuICBpZiAocHJvcHMuaWQgJiYgcGF5bG9hZC5pZCkgbGFiZWwuaWQgPSBwYXlsb2FkLmlkO1xuICAvLyBDaGVjayB0aGF0IHRoaXMgaXNuJ3QgYSByZXNwb25zZVxuICBpZiAoJ2xhYmVsJyBpbiBwYXlsb2FkKSB7XG4gICAgaWYgKHByb3BzLmxhYmVsICYmIHBheWxvYWQubGFiZWwpIGxhYmVsLmxhYmVsID0gcGF5bG9hZC5sYWJlbDtcbiAgICBpZiAocHJvcHMuZGVzY3JpcHRpb24gJiYgcGF5bG9hZC5kZXNjcmlwdGlvbikgbGFiZWwuZGVzY3JpcHRpb24gPSBwYXlsb2FkLmRlc2NyaXB0aW9uO1xuICB9XG4gIGlmIChwcm9wcy5jb21wb25lbnQgJiYgcGF5bG9hZC5jb21wb25lbnQpIGxhYmVsLmNvbXBvbmVudCA9IGJvdC50cmFuc2Zvcm1lcnMuY29tcG9uZW50KGJvdCwgcGF5bG9hZC5jb21wb25lbnQpO1xuXG4gIHJldHVybiBsYWJlbDtcbn1cblxuZnVuY3Rpb24gdHJhbnNmb3JtRmlsZVVwbG9hZENvbXBvbmVudChib3Q6IEJvdCwgcGF5bG9hZDogRGlzY29yZEZpbGVVcGxvYWRDb21wb25lbnQgfCBEaXNjb3JkRmlsZVVwbG9hZEludGVyYWN0aW9uUmVzcG9uc2UpOiBDb21wb25lbnQge1xuICBjb25zdCBwcm9wcyA9IGJvdC50cmFuc2Zvcm1lcnMuZGVzaXJlZFByb3BlcnRpZXMuY29tcG9uZW50O1xuICBjb25zdCBmaWxlVXBsb2FkID0ge30gYXMgQ29tcG9uZW50O1xuXG4gIGlmIChwcm9wcy50eXBlICYmIHBheWxvYWQudHlwZSkgZmlsZVVwbG9hZC50eXBlID0gcGF5bG9hZC50eXBlO1xuICBpZiAocHJvcHMuaWQgJiYgcGF5bG9hZC5pZCkgZmlsZVVwbG9hZC5pZCA9IHBheWxvYWQuaWQ7XG4gIGlmIChwcm9wcy5jdXN0b21JZCAmJiBwYXlsb2FkLmN1c3RvbV9pZCkgZmlsZVVwbG9hZC5jdXN0b21JZCA9IHBheWxvYWQuY3VzdG9tX2lkO1xuXG4gIC8vIENoZWNrIHRoYXQgdGhpcyBpcyBhIHJlc3BvbnNlXG4gIGlmICgndmFsdWVzJyBpbiBwYXlsb2FkKSB7XG4gICAgaWYgKHByb3BzLnZhbHVlcyAmJiBwYXlsb2FkLnZhbHVlcykgZmlsZVVwbG9hZC52YWx1ZXMgPSBwYXlsb2FkLnZhbHVlcztcbiAgfSBlbHNlIHtcbiAgICBpZiAocHJvcHMubWluVmFsdWVzICYmIHBheWxvYWQubWluX3ZhbHVlcykgZmlsZVVwbG9hZC5taW5WYWx1ZXMgPSBwYXlsb2FkLm1pbl92YWx1ZXM7XG4gICAgaWYgKHByb3BzLm1heFZhbHVlcyAmJiBwYXlsb2FkLm1heF92YWx1ZXMpIGZpbGVVcGxvYWQubWF4VmFsdWVzID0gcGF5bG9hZC5tYXhfdmFsdWVzO1xuICAgIGlmIChwcm9wcy5yZXF1aXJlZCAmJiBwYXlsb2FkLnJlcXVpcmVkKSBmaWxlVXBsb2FkLnJlcXVpcmVkID0gcGF5bG9hZC5yZXF1aXJlZDtcbiAgfVxuXG4gIHJldHVybiBmaWxlVXBsb2FkO1xufVxuIl0sIm5hbWVzIjpbIk1lc3NhZ2VDb21wb25lbnRUeXBlcyIsInRyYW5zZm9ybUNvbXBvbmVudCIsImJvdCIsInBheWxvYWQiLCJjb21wb25lbnQiLCJ0eXBlIiwiQWN0aW9uUm93IiwidHJhbnNmb3JtQWN0aW9uUm93IiwiQnV0dG9uIiwidHJhbnNmb3JtQnV0dG9uQ29tcG9uZW50IiwiQ29udGFpbmVyIiwidHJhbnNmb3JtQ29udGFpbmVyQ29tcG9uZW50IiwiVGV4dElucHV0IiwidHJhbnNmb3JtSW5wdXRUZXh0Q29tcG9uZW50IiwiU3RyaW5nU2VsZWN0IiwiVXNlclNlbGVjdCIsIlJvbGVTZWxlY3QiLCJNZW50aW9uYWJsZVNlbGVjdCIsIkNoYW5uZWxTZWxlY3QiLCJ0cmFuc2Zvcm1TZWxlY3RNZW51Q29tcG9uZW50IiwiU2VjdGlvbiIsInRyYW5zZm9ybVNlY3Rpb25Db21wb25lbnQiLCJUaHVtYm5haWwiLCJ0cmFuc2Zvcm1UaHVtYm5haWxDb21wb25lbnQiLCJNZWRpYUdhbGxlcnkiLCJ0cmFuc2Zvcm1NZWRpYUdhbGxlcnlDb21wb25lbnQiLCJGaWxlIiwidHJhbnNmb3JtRmlsZUNvbXBvbmVudCIsIlNlcGFyYXRvciIsInRyYW5zZm9ybVNlcGFyYXRvckNvbXBvbmVudCIsIlRleHREaXNwbGF5IiwidHJhbnNmb3JtVGV4dERpc3BsYXlDb21wb25lbnQiLCJMYWJlbCIsInRyYW5zZm9ybUxhYmVsQ29tcG9uZW50IiwiRmlsZVVwbG9hZCIsInRyYW5zZm9ybUZpbGVVcGxvYWRDb21wb25lbnQiLCJ0cmFuc2Zvcm1lcnMiLCJjdXN0b21pemVycyIsInRyYW5zZm9ybVVuZnVybGVkTWVkaWFJdGVtIiwicHJvcHMiLCJkZXNpcmVkUHJvcGVydGllcyIsInVuZnVybGVkTWVkaWFJdGVtIiwibWVkaWFJdGVtIiwidXJsIiwicHJveHlVcmwiLCJwcm94eV91cmwiLCJoZWlnaHQiLCJ3aWR0aCIsImNvbnRlbnRUeXBlIiwiY29udGVudF90eXBlIiwiYXR0YWNobWVudElkIiwiYXR0YWNobWVudF9pZCIsInNub3dmbGFrZSIsInRyYW5zZm9ybU1lZGlhR2FsbGVyeUl0ZW0iLCJtZWRpYUdhbGxlcnlJdGVtIiwiZ2FsbGVyeUl0ZW0iLCJtZWRpYSIsImRlc2NyaXB0aW9uIiwic3BvaWxlciIsImFjdGlvblJvdyIsImlkIiwiY29tcG9uZW50cyIsIm1hcCIsImNvbnRhaW5lciIsImFjY2VudENvbG9yIiwiYWNjZW50X2NvbG9yIiwiYnV0dG9uIiwibGFiZWwiLCJjdXN0b21JZCIsImN1c3RvbV9pZCIsInN0eWxlIiwiZW1vamkiLCJkaXNhYmxlZCIsInNrdUlkIiwic2t1X2lkIiwiaW5wdXQiLCJ2YWx1ZSIsInJlcXVpcmVkIiwicGxhY2Vob2xkZXIiLCJtaW5MZW5ndGgiLCJtaW5fbGVuZ3RoIiwibWF4TGVuZ3RoIiwibWF4X2xlbmd0aCIsInNlbGVjdCIsInZhbHVlcyIsIm1pblZhbHVlcyIsIm1pbl92YWx1ZXMiLCJtYXhWYWx1ZXMiLCJtYXhfdmFsdWVzIiwiZGVmYXVsdFZhbHVlcyIsImRlZmF1bHRfdmFsdWVzIiwiZGVmYXVsdFZhbHVlIiwiY2hhbm5lbFR5cGVzIiwiY2hhbm5lbF90eXBlcyIsIm9wdGlvbnMiLCJvcHRpb24iLCJ1bmRlZmluZWQiLCJuYW1lIiwiYW5pbWF0ZWQiLCJkZWZhdWx0Iiwic2VjdGlvbiIsImFjY2Vzc29yeSIsInRodW1ibmFpbCIsIm1lZGlhR2FsbGVyeSIsIml0ZW1zIiwiaXRlbSIsImZpbGUiLCJzaXplIiwidGV4dERpc3BsYXkiLCJjb250ZW50Iiwic2VwYXJhdG9yIiwiZGl2aWRlciIsInNwYWNpbmciLCJmaWxlVXBsb2FkIl0sIm1hcHBpbmdzIjoiQUFBQSxTQXVCRUEscUJBQXFCLFFBQ2hCLG9CQUFvQjtBQUszQixPQUFPLFNBQVNDLG1CQUFtQkMsR0FBUSxFQUFFQyxPQUFzRjtJQUNqSSxJQUFJQztJQUVKLGtJQUFrSTtJQUNsSSxPQUFRRCxRQUFRRSxJQUFJO1FBQ2xCLEtBQUtMLHNCQUFzQk0sU0FBUztZQUNsQ0YsWUFBWUcsbUJBQW1CTCxLQUFLQztZQUNwQztRQUNGLEtBQUtILHNCQUFzQlEsTUFBTTtZQUMvQkosWUFBWUsseUJBQXlCUCxLQUFLQztZQUMxQztRQUNGLEtBQUtILHNCQUFzQlUsU0FBUztZQUNsQ04sWUFBWU8sNEJBQTRCVCxLQUFLQztZQUM3QztRQUNGLEtBQUtILHNCQUFzQlksU0FBUztZQUNsQ1IsWUFBWVMsNEJBQTRCWCxLQUFLQztZQUM3QztRQUNGLEtBQUtILHNCQUFzQmMsWUFBWTtRQUN2QyxLQUFLZCxzQkFBc0JlLFVBQVU7UUFDckMsS0FBS2Ysc0JBQXNCZ0IsVUFBVTtRQUNyQyxLQUFLaEIsc0JBQXNCaUIsaUJBQWlCO1FBQzVDLEtBQUtqQixzQkFBc0JrQixhQUFhO1lBQ3RDZCxZQUFZZSw2QkFBNkJqQixLQUFL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
409
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90cmFuc2Zvcm1lcnMvY29tcG9uZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIHR5cGUgRGlzY29yZEFjdGlvblJvdyxcbiAgdHlwZSBEaXNjb3JkQnV0dG9uQ29tcG9uZW50LFxuICB0eXBlIERpc2NvcmRDaGFubmVsU2VsZWN0Q29tcG9uZW50LFxuICB0eXBlIERpc2NvcmRDaGFubmVsU2VsZWN0SW50ZXJhY3Rpb25SZXNwb25zZUZyb21Nb2RhbCxcbiAgdHlwZSBEaXNjb3JkQ2hlY2tib3hDb21wb25lbnQsXG4gIHR5cGUgRGlzY29yZENoZWNrYm94R3JvdXBDb21wb25lbnQsXG4gIHR5cGUgRGlzY29yZENoZWNrYm94R3JvdXBJbnRlcmFjdGlvblJlc3BvbnNlLFxuICB0eXBlIERpc2NvcmRDaGVja2JveEludGVyYWN0aW9uUmVzcG9uc2UsXG4gIHR5cGUgRGlzY29yZENvbnRhaW5lckNvbXBvbmVudCxcbiAgdHlwZSBEaXNjb3JkRmlsZUNvbXBvbmVudCxcbiAgdHlwZSBEaXNjb3JkRmlsZVVwbG9hZENvbXBvbmVudCxcbiAgdHlwZSBEaXNjb3JkRmlsZVVwbG9hZEludGVyYWN0aW9uUmVzcG9uc2UsXG4gIHR5cGUgRGlzY29yZExhYmVsQ29tcG9uZW50LFxuICB0eXBlIERpc2NvcmRMYWJlbEludGVyYWN0aW9uUmVzcG9uc2UsXG4gIHR5cGUgRGlzY29yZE1lZGlhR2FsbGVyeUNvbXBvbmVudCxcbiAgdHlwZSBEaXNjb3JkTWVkaWFHYWxsZXJ5SXRlbSxcbiAgdHlwZSBEaXNjb3JkTWVudGlvbmFibGVTZWxlY3RDb21wb25lbnQsXG4gIHR5cGUgRGlzY29yZE1lbnRpb25hYmxlU2VsZWN0SW50ZXJhY3Rpb25SZXNwb25zZUZyb21Nb2RhbCxcbiAgdHlwZSBEaXNjb3JkTWVzc2FnZUNvbXBvbmVudCxcbiAgdHlwZSBEaXNjb3JkTWVzc2FnZUNvbXBvbmVudEZyb21Nb2RhbEludGVyYWN0aW9uUmVzcG9uc2UsXG4gIHR5cGUgRGlzY29yZFJhZGlvR3JvdXBDb21wb25lbnQsXG4gIHR5cGUgRGlzY29yZFJhZGlvR3JvdXBJbnRlcmFjdGlvblJlc3BvbnNlLFxuICB0eXBlIERpc2NvcmRSb2xlU2VsZWN0Q29tcG9uZW50LFxuICB0eXBlIERpc2NvcmRSb2xlU2VsZWN0SW50ZXJhY3Rpb25SZXNwb25zZUZyb21Nb2RhbCxcbiAgdHlwZSBEaXNjb3JkU2VjdGlvbkNvbXBvbmVudCxcbiAgdHlwZSBEaXNjb3JkU2VwYXJhdG9yQ29tcG9uZW50LFxuICB0eXBlIERpc2NvcmRTdHJpbmdTZWxlY3RDb21wb25lbnQsXG4gIHR5cGUgRGlzY29yZFN0cmluZ1NlbGVjdEludGVyYWN0aW9uUmVzcG9uc2VGcm9tTW9kYWwsXG4gIHR5cGUgRGlzY29yZFRleHREaXNwbGF5Q29tcG9uZW50LFxuICB0eXBlIERpc2NvcmRUZXh0RGlzcGxheUludGVyYWN0aW9uUmVzcG9uc2UsXG4gIHR5cGUgRGlzY29yZFRleHRJbnB1dENvbXBvbmVudCxcbiAgdHlwZSBEaXNjb3JkVGV4dElucHV0SW50ZXJhY3Rpb25SZXNwb25zZSxcbiAgdHlwZSBEaXNjb3JkVGh1bWJuYWlsQ29tcG9uZW50LFxuICB0eXBlIERpc2NvcmRVbmZ1cmxlZE1lZGlhSXRlbSxcbiAgdHlwZSBEaXNjb3JkVXNlclNlbGVjdENvbXBvbmVudCxcbiAgdHlwZSBEaXNjb3JkVXNlclNlbGVjdEludGVyYWN0aW9uUmVzcG9uc2VGcm9tTW9kYWwsXG4gIE1lc3NhZ2VDb21wb25lbnRUeXBlcyxcbn0gZnJvbSAnQGRpc2NvcmRlbm8vdHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBCb3QgfSBmcm9tICcuLi9ib3QuanMnO1xuaW1wb3J0IHR5cGUgeyBEZXNpcmVkUHJvcGVydGllc0JlaGF2aW9yLCBTZXR1cERlc2lyZWRQcm9wcywgVHJhbnNmb3JtZXJzRGVzaXJlZFByb3BlcnRpZXMgfSBmcm9tICcuLi9kZXNpcmVkUHJvcGVydGllcy5qcyc7XG5pbXBvcnQgeyBjYWxsQ3VzdG9taXplciB9IGZyb20gJy4uL3RyYW5zZm9ybWVycy5qcyc7XG5pbXBvcnQgeyBUb2dnbGVCaXRmaWVsZCB9IGZyb20gJy4vdG9nZ2xlcy9Ub2dnbGVCaXRmaWVsZC5qcyc7XG5pbXBvcnQgdHlwZSB7IENvbXBvbmVudCwgTWVkaWFHYWxsZXJ5SXRlbSwgVW5mdXJsZWRNZWRpYUl0ZW0gfSBmcm9tICcuL3R5cGVzLmpzJztcblxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zZm9ybUNvbXBvbmVudChcbiAgYm90OiBCb3QsXG4gIHBheWxvYWQ6IFBhcnRpYWw8RGlzY29yZE1lc3NhZ2VDb21wb25lbnQgfCBEaXNjb3JkTWVzc2FnZUNvbXBvbmVudEZyb21Nb2RhbEludGVyYWN0aW9uUmVzcG9uc2U+LFxuICBleHRyYT86IHsgcGFydGlhbD86IGJvb2xlYW4gfSxcbikge1xuICBsZXQgY29tcG9uZW50OiBTZXR1cERlc2lyZWRQcm9wczxDb21wb25lbnQsIFRyYW5zZm9ybWVyc0Rlc2lyZWRQcm9wZXJ0aWVzLCBEZXNpcmVkUHJvcGVydGllc0JlaGF2aW9yPjtcblxuICAvLyBUaGVyZSdzIG5vdGhpbmcgdG8gZG8gd2l0aCBhIGNvbXBvbmVudCB3aXRob3V0IGEgdHlwZSwgYXMgaXQgbWVhbnMgYW4gaXNzdWUgb24gRGlzY29yZCwgc28gd2UganVzdCB0aHJvdyBhbiBlcnJvclxuICBpZiAoIXBheWxvYWQudHlwZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgW0Rpc2NvcmRlbm9dIFJlY2VpdmVkIGEgY29tcG9uZW50IHBheWxvYWQgd2l0aG91dCBhIHR5cGUgaW4gdGhlIGNvbXBvbmVudCB0cmFuc2Zvcm1lci5gKTtcbiAgfVxuXG4gIC8vIFRoaXMgc3dpdGNoIGlzIGV4aGF1c3RpdmUsIHNvIHdlIGRvbnQgbmVlZCB0aGUgZGVmYXVsdCBjYXNlIGFuZCBUUyBkb2VzIG5vdCBlcnJvciBvdXQgZm9yIHRoZSB1bi1pbml0aWFsaXplZCBjb21wb25lbnQgdmFyaWFibGVcbiAgc3dpdGNoIChwYXlsb2FkLnR5cGUpIHtcbiAgICBjYXNlIE1lc3NhZ2VDb21wb25lbnRUeXBlcy5BY3Rpb25Sb3c6XG4gICAgICBjb21wb25lbnQgPSB0cmFuc2Zvcm1BY3Rpb25Sb3coYm90LCBwYXlsb2FkKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgTWVzc2FnZUNvbXBvbmVudFR5cGVzLkJ1dHRvbjpcbiAgICAgIGNvbXBvbmVudCA9IHRyYW5zZm9ybUJ1dHRvbkNvbXBvbmVudChib3QsIHBheWxvYWQpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBNZXNzYWdlQ29tcG9uZW50VHlwZXMuQ29udGFpbmVyOlxuICAgICAgY29tcG9uZW50ID0gdHJhbnNmb3JtQ29udGFpbmVyQ29tcG9uZW50KGJvdCwgcGF5bG9hZCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIE1lc3NhZ2VDb21wb25lbnRUeXBlcy5UZXh0SW5wdXQ6XG4gICAgICBjb21wb25lbnQgPSB0cmFuc2Zvcm1JbnB1dFRleHRDb21wb25lbnQoYm90LCBwYXlsb2FkKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgTWVzc2FnZUNvbXBvbmVudFR5cGVzLlN0cmluZ1NlbGVjdDpcbiAgICAgIGNvbXBvbmVudCA9IHRyYW5zZm9ybVN0cmluZ1NlbGVjdE1lbnVDb21wb25lbnQoYm90LCBwYXlsb2FkKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgTWVzc2FnZUNvbXBvbmVudFR5cGVzLlVzZXJTZWxlY3Q6XG4gICAgICBjb21wb25lbnQgPSB0cmFuc2Zvcm1Vc2VyU2VsZWN0TWVudUNvbXBvbmVudChib3QsIHBheWxvYWQpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBNZXNzYWdlQ29tcG9uZW50VHlwZXMuUm9sZVNlbGVjdDpcbiAgICAgIGNvbXBvbmVudCA9IHRyYW5zZm9ybVJvbGVTZWxlY3RNZW51Q29tcG9uZW50KGJvdCwgcGF5bG9hZCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIE1lc3NhZ2VDb21wb25lbnRUeXBlcy5NZW50aW9uYWJsZVNlbGVjdDpcbiAgICAgIGNvbXBvbmVudCA9IHRyYW5zZm9ybU1lbnRpb25hYmxlU2VsZWN0TWVudUNvbXBvbmVudChib3QsIHBheWxvYWQpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBNZXNzYWdlQ29tcG9uZW50VHlwZXMuQ2hhbm5lbFNlbGVjdDpcbiAgICAgIGNvbXBvbmVudCA9IHRyYW5zZm9ybUNoYW5uZWxTZWxlY3RNZW51Q29tcG9uZW50KGJvdCwgcGF5bG9hZCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIE1lc3NhZ2VDb21wb25lbnRUeXBlcy5TZWN0aW9uOlxuICAgICAgY29tcG9uZW50ID0gdHJhbnNmb3JtU2VjdGlvbkNvbXBvbmVudChib3QsIHBheWxvYWQpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBNZXNzYWdlQ29tcG9uZW50VHlwZXMuVGh1bWJuYWlsOlxuICAgICAgY29tcG9uZW50ID0gdHJhbnNmb3JtVGh1bWJuYWlsQ29tcG9uZW50KGJvdCwgcGF5bG9hZCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIE1lc3NhZ2VDb21wb25lbnRUeXBlcy5NZWRpYUdhbGxlcnk6XG4gICAgICBjb21wb25lbnQgPSB0cmFuc2Zvcm1NZWRpYUdhbGxlcnlDb21wb25lbnQoYm90LCBwYXlsb2FkKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgTWVzc2FnZUNvbXBvbmVudFR5cGVzLkZpbGU6XG4gICAgICBjb21wb25lbnQgPSB0cmFuc2Zvcm1GaWxlQ29tcG9uZW50KGJvdCwgcGF5bG9hZCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIE1lc3NhZ2VDb21wb25lbnRUeXBlcy5TZXBhcmF0b3I6XG4gICAgICBjb21wb25lbnQgPSB0cmFuc2Zvcm1TZXBhcmF0b3JDb21wb25lbnQoYm90LCBwYXlsb2FkKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgTWVzc2FnZUNvbXBvbmVudFR5cGVzLlRleHREaXNwbGF5OlxuICAgICAgY29tcG9uZW50ID0gdHJhbnNmb3JtVGV4dERpc3BsYXlDb21wb25lbnQoYm90LCBwYXlsb2FkKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgTWVzc2FnZUNvbXBvbmVudFR5cGVzLkxhYmVsOlxuICAgICAgY29tcG9uZW50ID0gdHJhbnNmb3JtTGFiZWxDb21wb25lbnQoYm90LCBwYXlsb2FkKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgTWVzc2FnZUNvbXBvbmVudFR5cGVzLkZpbGVVcGxvYWQ6XG4gICAgICBjb21wb25lbnQgPSB0cmFuc2Zvcm1GaWxlVXBsb2FkQ29tcG9uZW50KGJvdCwgcGF5bG9hZCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlIE1lc3NhZ2VDb21wb25lbnRUeXBlcy5SYWRpb0dyb3VwOlxuICAgICAgY29tcG9uZW50ID0gdHJhbnNmb3JtUmFkaW9Hcm91cENvbXBvbmVudChib3QsIHBheWxvYWQpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBNZXNzYWdlQ29tcG9uZW50VHlwZXMuQ2hlY2tib3hHcm91cDpcbiAgICAgIGNvbXBvbmVudCA9IHRyYW5zZm9ybUNoZWNrYm94R3JvdXBDb21wb25lbnQoYm90LCBwYXlsb2FkKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgTWVzc2FnZUNvbXBvbmVudFR5cGVzLkNoZWNrYm94OlxuICAgICAgY29tcG9uZW50ID0gdHJhbnNmb3JtQ2hlY2tib3hDb21wb25lbnQoYm90LCBwYXlsb2FkKTtcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgcmV0dXJuIGNhbGxDdXN0b21pemVyKCdjb21wb25lbnQnLCBib3QsIHBheWxvYWQsIGNvbXBvbmVudCwge1xuICAgIHBhcnRpYWw6IGV4dHJhPy5wYXJ0aWFsID8/IGZhbHNlLFxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zZm9ybVVuZnVybGVkTWVkaWFJdGVtKGJvdDogQm90LCBwYXlsb2FkOiBQYXJ0aWFsPERpc2NvcmRVbmZ1cmxlZE1lZGlhSXRlbT4sIGV4dHJhPzogeyBwYXJ0aWFsPzogYm9vbGVhbiB9KSB7XG4gIGNvbnN0IHByb3BzID0gYm90LnRyYW5zZm9ybWVycy5kZXNpcmVkUHJvcGVydGllcy51bmZ1cmxlZE1lZGlhSXRlbTtcbiAgY29uc3QgbWVkaWFJdGVtID0ge30gYXMgU2V0dXBEZXNpcmVkUHJvcHM8VW5mdXJsZWRNZWRpYUl0ZW0sIFRyYW5zZm9ybWVyc0Rlc2lyZWRQcm9wZXJ0aWVzLCBEZXNpcmVkUHJvcGVydGllc0JlaGF2aW9yPjtcblxuICBpZiAocHJvcHMudXJsICYmIHBheWxvYWQudXJsKSBtZWRpYUl0ZW0udXJsID0gcGF5bG9hZC51cmw7XG4gIGlmIChwcm9wcy5wcm94eVVybCAmJiBwYXlsb2FkLnByb3h5X3VybCkgbWVkaWFJdGVtLnByb3h5VXJsID0gcGF5bG9hZC5wcm94eV91cmw7XG4gIGlmIChwcm9wcy5oZWlnaHQgJiYgcGF5bG9hZC5oZWlnaHQpIG1lZGlhSXRlbS5oZWlnaHQgPSBwYXlsb2FkLmhlaWdodDtcbiAgaWYgKHByb3BzLndpZHRoICYmIHBheWxvYWQud2lkdGgpIG1lZGlhSXRlbS53aWR0aCA9IHBheWxvYWQud2lkdGg7XG4gIGlmIChwcm9wcy5wbGFjZWhvbGRlciAmJiBwYXlsb2FkLnBsYWNlaG9sZGVyKSBtZWRpYUl0ZW0ucGxhY2Vob2xkZXIgPSBwYXlsb2FkLnBsYWNlaG9sZGVyO1xuICBpZiAocHJvcHMucGxhY2Vob2xkZXJWZXJzaW9uICYmIHBheWxvYWQucGxhY2Vob2xkZXJfdmVyc2lvbikgbWVkaWFJdGVtLnBsYWNlaG9sZGVyVmVyc2lvbiA9IHBheWxvYWQucGxhY2Vob2xkZXJfdmVyc2lvbjtcbiAgaWYgKHByb3BzLmNvbnRlbnRUeXBlICYmIHBheWxvYWQuY29udGVudF90eXBlKSBtZWRpYUl0ZW0uY29udGVudFR5cGUgPSBwYXlsb2FkLmNvbnRlbnRfdHlwZTtcbiAgaWYgKHByb3BzLmZsYWdzICYmIHBheWxvYWQuZmxhZ3MpIG1lZGlhSXRlbS5mbGFncyA9IG5ldyBUb2dnbGVCaXRmaWVsZChwYXlsb2FkLmZsYWdzKTtcbiAgaWYgKHByb3BzLmF0dGFjaG1lbnRJZCAmJiBwYXlsb2FkLmF0dGFjaG1lbnRfaWQpIG1lZGlhSXRlbS5hdHRhY2htZW50SWQgPSBib3QudHJhbnNmb3JtZXJzLnNub3dmbGFrZShwYXlsb2FkLmF0dGFjaG1lbnRfaWQpO1xuXG4gIHJldHVybiBjYWxsQ3VzdG9taXplcigndW5mdXJsZWRNZWRpYUl0ZW0nLCBib3QsIHBheWxvYWQsIG1lZGlhSXRlbSwge1xuICAgIHBhcnRpYWw6IGV4dHJhPy5wYXJ0aWFsID8/IGZhbHNlLFxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zZm9ybU1lZGlhR2FsbGVyeUl0ZW0oYm90OiBCb3QsIHBheWxvYWQ6IFBhcnRpYWw8RGlzY29yZE1lZGlhR2FsbGVyeUl0ZW0+LCBleHRyYT86IHsgcGFydGlhbD86IGJvb2xlYW4gfSkge1xuICBjb25zdCBwcm9wcyA9IGJvdC50cmFuc2Zvcm1lcnMuZGVzaXJlZFByb3BlcnRpZXMubWVkaWFHYWxsZXJ5SXRlbTtcbiAgY29uc3QgZ2FsbGVyeUl0ZW0gPSB7fSBhcyBTZXR1cERlc2lyZWRQcm9wczxNZWRpYUdhbGxlcnlJdGVtLCBUcmFuc2Zvcm1lcnNEZXNpcmVkUHJvcGVydGllcywgRGVzaXJlZFByb3BlcnRpZXNCZWhhdmlvcj47XG5cbiAgaWYgKHByb3BzLm1lZGlhICYmIHBheWxvYWQubWVkaWEpIGdhbGxlcnlJdGVtLm1lZGlhID0gYm90LnRyYW5zZm9ybWVycy51bmZ1cmxlZE1lZGlhSXRlbShib3QsIHBheWxvYWQubWVkaWEpO1xuICBpZiAocHJvcHMuZGVzY3JpcHRpb24gJiYgcGF5bG9hZC5kZXNjcmlwdGlvbikgZ2FsbGVyeUl0ZW0uZGVzY3JpcHRpb24gPSBwYXlsb2FkLmRlc2NyaXB0aW9uO1xuICBpZiAocHJvcHMuc3BvaWxlciAmJiBwYXlsb2FkLnNwb2lsZXIpIGdhbGxlcnlJdGVtLnNwb2lsZXIgPSBwYXlsb2FkLnNwb2lsZXI7XG5cbiAgcmV0dXJuIGNhbGxDdXN0b21pemVyKCdtZWRpYUdhbGxlcnlJdGVtJywgYm90LCBwYXlsb2FkLCBnYWxsZXJ5SXRlbSwge1xuICAgIHBhcnRpYWw6IGV4dHJhPy5wYXJ0aWFsID8/IGZhbHNlLFxuICB9KTtcbn1cblxuZnVuY3Rpb24gdHJhbnNmb3JtQWN0aW9uUm93KGJvdDogQm90LCBwYXlsb2FkOiBQYXJ0aWFsPERpc2NvcmRBY3Rpb25Sb3c+KSB7XG4gIGNvbnN0IHByb3BzID0gYm90LnRyYW5zZm9ybWVycy5kZXNpcmVkUHJvcGVydGllcy5jb21wb25lbnQ7XG4gIGNvbnN0IGFjdGlvblJvdyA9IHt9IGFzIFNldHVwRGVzaXJlZFByb3BzPENvbXBvbmVudCwgVHJhbnNmb3JtZXJzRGVzaXJlZFByb3BlcnRpZXMsIERlc2lyZWRQcm9wZXJ0aWVzQmVoYXZpb3I+O1xuXG4gIGlmIChwcm9wcy50eXBlICYmIHBheWxvYWQudHlwZSkgYWN0aW9uUm93LnR5cGUgPSBwYXlsb2FkLnR5cGU7XG4gIGlmIChwcm9wcy5pZCAmJiBwYXlsb2FkLmlkKSBhY3Rpb25Sb3cuaWQgPSBwYXlsb2FkLmlkO1xuICBpZiAocHJvcHMuY29tcG9uZW50cyAmJiBwYXlsb2FkLmNvbXBvbmVudHMpXG4gICAgYWN0aW9uUm93LmNvbXBvbmVudHMgPSBwYXlsb2FkLmNvbXBvbmVudHMubWFwKChjb21wb25lbnQpID0+IGJvdC50cmFuc2Zvcm1lcnMuY29tcG9uZW50KGJvdCwgY29tcG9uZW50KSk7XG5cbiAgcmV0dXJuIGFjdGlvblJvdztcbn1cblxuZnVuY3Rpb24gdHJhbnNmb3JtQ29udGFpbmVyQ29tcG9uZW50KGJvdDogQm90LCBwYXlsb2FkOiBQYXJ0aWFsPERpc2NvcmRDb250YWluZXJDb21wb25lbnQ+KSB7XG4gIGNvbnN0IHByb3BzID0gYm90LnRyYW5zZm9ybWVycy5kZXNpcmVkUHJvcGVydGllcy5jb21wb25lbnQ7XG4gIGNvbnN0IGNvbnRhaW5lciA9IHt9IGFzIFNldHVwRGVzaXJlZFByb3BzPENvbXBvbmVudCwgVHJhbnNmb3JtZXJzRGVzaXJlZFByb3BlcnRpZXMsIERlc2lyZWRQcm9wZXJ0aWVzQmVoYXZpb3I+O1xuXG4gIGlmIChwcm9wcy50eXBlICYmIHBheWxvYWQudHlwZSkgY29udGFpbmVyLnR5cGUgPSBwYXlsb2FkLnR5cGU7XG4gIGlmIChwcm9wcy5pZCAmJiBwYXlsb2FkLmlkKSBjb250YWluZXIuaWQgPSBwYXlsb2FkLmlkO1xuICBpZiAocHJvcHMuYWNjZW50Q29sb3IgJiYgcGF5bG9hZC5hY2NlbnRfY29sb3IpIGNvbnRhaW5lci5hY2NlbnRDb2xvciA9IHBheWxvYWQuYWNjZW50X2NvbG9yO1xuICBpZiAocHJvcHMuc3BvaWxlciAmJiBwYXlsb2FkLnNwb2lsZXIpIGNvbnRhaW5lci5zcG9pbGVyID0gcGF5bG9hZC5zcG9pbGVyO1xuICBpZiAocHJvcHMuY29tcG9uZW50cyAmJiBwYXlsb2FkLmNvbXBvbmVudHMpXG4gICAgY29udGFpbmVyLmNvbXBvbmVudHMgPSBwYXlsb2FkLmNvbXBvbmVudHMubWFwKChjb21wb25lbnQpID0+IGJvdC50cmFuc2Zvcm1lcnMuY29tcG9uZW50KGJvdCwgY29tcG9uZW50KSk7XG5cbiAgcmV0dXJuIGNvbnRhaW5lcjtcbn1cblxuZnVuY3Rpb24gdHJhbnNmb3JtQnV0dG9uQ29tcG9uZW50KGJvdDogQm90LCBwYXlsb2FkOiBQYXJ0aWFsPERpc2NvcmRCdXR0b25Db21wb25lbnQ+KSB7XG4gIGNvbnN0IHByb3BzID0gYm90LnRyYW5zZm9ybWVycy5kZXNpcmVkUHJvcGVydGllcy5jb21wb25lbnQ7XG4gIGNvbnN0IGJ1dHRvbiA9IHt9IGFzIFNldHVwRGVzaXJlZFByb3BzPENvbXBvbmVudCwgVHJhbnNmb3JtZXJzRGVzaXJlZFByb3BlcnRpZXMsIERlc2lyZWRQcm9wZXJ0aWVzQmVoYXZpb3I+O1xuXG4gIGlmIChwcm9wcy50eXBlICYmIHBheWxvYWQudHlwZSkgYnV0dG9uLnR5cGUgPSBwYXlsb2FkLnR5cGU7XG4gIGlmIChwcm9wcy5pZCAmJiBwYXlsb2FkLmlkKSBidXR0b24uaWQgPSBwYXlsb2FkLmlkO1xuICBpZiAocHJvcHMubGFiZWwgJiYgcGF5bG9hZC5sYWJlbCkgYnV0dG9uLmxhYmVsID0gcGF5bG9hZC5sYWJlbDtcbiAgaWYgKHByb3BzLmN1c3RvbUlkICYmIHBheWxvYWQuY3VzdG9tX2lkKSBidXR0b24uY3VzdG9tSWQgPSBwYXlsb2FkLmN1c3RvbV9pZDtcbiAgaWYgKHByb3BzLnN0eWxlICYmIHBheWxvYWQuc3R5bGUpIGJ1dHRvbi5zdHlsZSA9IHBheWxvYWQuc3R5bGU7XG4gIGlmIChwcm9wcy5lbW9qaSAmJiBwYXlsb2FkLmVtb2ppKSBidXR0b24uZW1vamkgPSBib3QudHJhbnNmb3JtZXJzLmVtb2ppKGJvdCwgcGF5bG9hZC5lbW9qaSwgeyBwYXJ0aWFsOiB0cnVlIH0pO1xuICBpZiAocHJvcHMudXJsICYmIHBheWxvYWQudXJsKSBidXR0b24udXJsID0gcGF5bG9hZC51cmw7XG4gIGlmIChwcm9wcy5kaXNhYmxlZCAmJiBwYXlsb2FkLmRpc2FibGVkKSBidXR0b24uZGlzYWJsZWQgPSBwYXlsb2FkLmRpc2FibGVkO1xuICBpZiAocHJvcHMuc2t1SWQgJiYgcGF5bG9hZC5za3VfaWQpIGJ1dHRvbi5za3VJZCA9IGJvdC50cmFuc2Zvcm1lcnMuc25vd2ZsYWtlKHBheWxvYWQuc2t1X2lkKTtcblxuICByZXR1cm4gYnV0dG9uO1xufVxuXG5mdW5jdGlvbiB0cmFuc2Zvcm1JbnB1dFRleHRDb21wb25lbnQoYm90OiBCb3QsIHBheWxvYWQ6IFBhcnRpYWw8RGlzY29yZFRleHRJbnB1dENvbXBvbmVudCB8IERpc2NvcmRUZXh0SW5wdXRJbnRlcmFjdGlvblJlc3BvbnNlPikge1xuICBjb25zdCBwcm9wcyA9IGJvdC50cmFuc2Zvcm1lcnMuZGVzaXJlZFByb3BlcnRpZXMuY29tcG9uZW50O1xuICBjb25zdCBpbnB1dCA9IHt9IGFzIFNldHVwRGVzaXJlZFByb3BzPENvbXBvbmVudCwgVHJhbnNmb3JtZXJzRGVzaXJlZFByb3BlcnRpZXMsIERlc2lyZWRQcm9wZXJ0aWVzQmVoYXZpb3I+O1xuXG4gIGlmIChwcm9wcy50eXBlICYmIHBheWxvYWQudHlwZSkgaW5wdXQudHlwZSA9IHBheWxvYWQudHlwZTtcbiAgaWYgKHByb3BzLmlkICYmIHBheWxvYWQuaWQpIGlucHV0LmlkID0gcGF5bG9hZC5pZDtcbiAgaWYgKHByb3BzLnZhbHVlICYmIHBheWxvYWQudmFsdWUpIGlucHV0LnZhbHVlID0gcGF5bG9hZC52YWx1ZTtcbiAgaWYgKHByb3BzLmN1c3RvbUlkICYmIHBheWxvYWQuY3VzdG9tX2lkKSBpbnB1dC5jdXN0b21JZCA9IHBheWxvYWQuY3VzdG9tX2lkO1xuXG4gIC8vIFdlIGFzc3VtZSB0aGF0IGlmIHdlIGZpbmQgJ3ZhbHVlcycgaXQgaXMgdGhlIGludGVyYWN0aW9uIHJlc3BvbnNlXG4gIGlmICgnc3R5bGUnIGluIHBheWxvYWQpIHtcbiAgICBpZiAocHJvcHMuc3R5bGUgJiYgcGF5bG9hZC5zdHlsZSkgaW5wdXQuc3R5bGUgPSBwYXlsb2FkLnN0eWxlO1xuICAgIGlmIChwcm9wcy5yZXF1aXJlZCAmJiBwYXlsb2FkLnJlcXVpcmVkKSBpbnB1dC5yZXF1aXJlZCA9IHBheWxvYWQucmVxdWlyZWQ7XG4gICAgaWYgKHByb3BzLmxhYmVsICYmIHBheWxvYWQubGFiZWwpIGlucHV0LmxhYmVsID0gcGF5bG9hZC5sYWJlbDtcbiAgICBpZiAocHJvcHMucGxhY2Vob2xkZXIgJiYgcGF5bG9hZC5wbGFjZWhvbGRlcikgaW5wdXQucGxhY2Vob2xkZXIgPSBwYXlsb2FkLnBsYWNlaG9sZGVyO1xuICAgIGlmIChwcm9wcy5taW5MZW5ndGggJiYgcGF5bG9hZC5taW5fbGVuZ3RoKSBpbnB1dC5taW5MZW5ndGggPSBwYXlsb2FkLm1pbl9sZW5ndGg7XG4gICAgaWYgKHByb3BzLm1heExlbmd0aCAmJiBwYXlsb2FkLm1heF9sZW5ndGgpIGlucHV0Lm1heExlbmd0aCA9IHBheWxvYWQubWF4X2xlbmd0aDtcbiAgfVxuXG4gIHJldHVybiBpbnB1dDtcbn1cblxuZnVuY3Rpb24gdHJhbnNmb3JtU3RyaW5nU2VsZWN0TWVudUNvbXBvbmVudChcbiAgYm90OiBCb3QsXG4gIHBheWxvYWQ6IFBhcnRpYWw8RGlzY29yZFN0cmluZ1NlbGVjdENvbXBvbmVudCB8IERpc2NvcmRTdHJpbmdTZWxlY3RJbnRlcmFjdGlvblJlc3BvbnNlRnJvbU1vZGFsPixcbikge1xuICBjb25zdCBwcm9wcyA9IGJvdC50cmFuc2Zvcm1lcnMuZGVzaXJlZFByb3BlcnRpZXMuY29tcG9uZW50O1xuICBjb25zdCBzZWxlY3QgPSB7fSBhcyBTZXR1cERlc2lyZWRQcm9wczxDb21wb25lbnQsIFRyYW5zZm9ybWVyc0Rlc2lyZWRQcm9wZXJ0aWVzLCBEZXNpcmVkUHJvcGVydGllc0JlaGF2aW9yPjtcblxuICBpZiAocHJvcHMudHlwZSAmJiBwYXlsb2FkLnR5cGUpIHNlbGVjdC50eXBlID0gcGF5bG9hZC50eXBlO1xuICBpZiAocHJvcHMuaWQgJiYgcGF5bG9hZC5pZCkgc2VsZWN0LmlkID0gcGF5bG9hZC5pZDtcbiAgaWYgKHByb3BzLmN1c3RvbUlkICYmIHBheWxvYWQuY3VzdG9tX2lkKSBzZWxlY3QuY3VzdG9tSWQgPSBwYXlsb2FkLmN1c3RvbV9pZDtcblxuICAvLyBXZSBhc3N1bWUgdGhhdCBpZiB3ZSBmaW5kICd2YWx1ZXMnIGl0IGlzIHRoZSBpbnRlcmFjdGlvbiByZXNwb25zZVxuICBpZiAoJ3ZhbHVlcycgaW4gcGF5bG9hZCkge1xuICAgIGlmIChwcm9wcy52YWx1ZXMgJiYgcGF5bG9hZC52YWx1ZXMpIHNlbGVjdC52YWx1ZXMgPSBwYXlsb2FkLnZhbHVlcztcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBfcGF5bG9hZCA9IHBheWxvYWQgYXMgUGFydGlhbDxEaXNjb3JkU3RyaW5nU2VsZWN0Q29tcG9uZW50PjtcblxuICAgIGlmIChwcm9wcy5wbGFjZWhvbGRlciAmJiBfcGF5bG9hZC5wbGFjZWhvbGRlcikgc2VsZWN0LnBsYWNlaG9sZGVyID0gX3BheWxvYWQucGxhY2Vob2xkZXI7XG4gICAgaWYgKHByb3BzLm1pblZhbHVlcyAmJiBfcGF5bG9hZC5taW5fdmFsdWVzKSBzZWxlY3QubWluVmFsdWVzID0gX3BheWxvYWQubWluX3ZhbHVlcztcbiAgICBpZiAocHJvcHMubWF4VmFsdWVzICYmIF9wYXlsb2FkLm1heF92YWx1ZXMpIHNlbGVjdC5tYXhWYWx1ZXMgPSBfcGF5bG9hZC5tYXhfdmFsdWVzO1xuICAgIGlmIChwcm9wcy5vcHRpb25zICYmIF9wYXlsb2FkLm9wdGlvbnMpXG4gICAgICBzZWxlY3Qub3B0aW9ucyA9IF9wYXlsb2FkLm9wdGlvbnMubWFwKChvcHRpb24pID0+ICh7XG4gICAgICAgIGxhYmVsOiBvcHRpb24ubGFiZWwsXG4gICAgICAgIHZhbHVlOiBvcHRpb24udmFsdWUsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBvcHRpb24uZGVzY3JpcHRpb24sXG4gICAgICAgIGVtb2ppOiBvcHRpb24uZW1vamkgPyBib3QudHJhbnNmb3JtZXJzLmVtb2ppKGJvdCwgb3B0aW9uLmVtb2ppLCB7IHBhcnRpYWw6IHRydWUgfSkgOiB1bmRlZmluZWQsXG4gICAgICAgIGRlZmF1bHQ6IG9wdGlvbi5kZWZhdWx0LFxuICAgICAgfSkpO1xuICAgIGlmIChwcm9wcy5kaXNhYmxlZCAmJiBfcGF5bG9hZC5kaXNhYmxlZCkgc2VsZWN0LmRpc2FibGVkID0gX3BheWxvYWQuZGlzYWJsZWQ7XG4gIH1cblxuICByZXR1cm4gc2VsZWN0O1xufVxuXG5mdW5jdGlvbiB0cmFuc2Zvcm1Vc2VyU2VsZWN0TWVudUNvbXBvbmVudChib3Q6IEJvdCwgcGF5bG9hZDogUGFydGlhbDxEaXNjb3JkVXNlclNlbGVjdENvbXBvbmVudCB8IERpc2NvcmRVc2VyU2VsZWN0SW50ZXJhY3Rpb25SZXNwb25zZUZyb21Nb2RhbD4pIHtcbiAgY29uc3QgcHJvcHMgPSBib3QudHJhbnNmb3JtZXJzLmRlc2lyZWRQcm9wZXJ0aWVzLmNvbXBvbmVudDtcbiAgY29uc3Qgc2VsZWN0ID0ge30gYXMgU2V0dXBEZXNpcmVkUHJvcHM8Q29tcG9uZW50LCBUcmFuc2Zvcm1lcnNEZXNpcmVkUHJvcGVydGllcywgRGVzaXJlZFByb3BlcnRpZXNCZWhhdmlvcj47XG5cbiAgaWYgKHByb3BzLnR5cGUgJiYgcGF5bG9hZC50eXBlKSBzZWxlY3QudHlwZSA9IHBheWxvYWQudHlwZTtcbiAgaWYgKHByb3BzLmlkICYmIHBheWxvYWQuaWQpIHNlbGVjdC5pZCA9IHBheWxvYWQuaWQ7XG4gIGlmIChwcm9wcy5jdXN0b21JZCAmJiBwYXlsb2FkLmN1c3RvbV9pZCkgc2VsZWN0LmN1c3RvbUlkID0gcGF5bG9hZC5jdXN0b21faWQ7XG5cbiAgLy8gV2UgYXNzdW1lIHRoYXQgaWYgd2UgZmluZCAndmFsdWVzJyBpdCBpcyB0aGUgaW50ZXJhY3Rpb24gcmVzcG9uc2VcbiAgaWYgKCd2YWx1ZXMnIGluIHBheWxvYWQpIHtcbiAgICBpZiAocHJvcHMudmFsdWVzICYmIHBheWxvYWQudmFsdWVzKSBzZWxlY3QudmFsdWVzID0gcGF5bG9hZC52YWx1ZXM7XG4gICAgaWYgKHByb3BzLnJlc29sdmVkICYmIHBheWxvYWQucmVzb2x2ZWQpIHNlbGVjdC5yZXNvbHZlZCA9IGJvdC50cmFuc2Zvcm1lcnMuaW50ZXJhY3Rpb25EYXRhUmVzb2x2ZWQoYm90LCBwYXlsb2FkLnJlc29sdmVkKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBfcGF5bG9hZCA9IHBheWxvYWQgYXMgUGFydGlhbDxEaXNjb3JkVXNlclNlbGVjdENvbXBvbmVudD47XG5cbiAgICBpZiAocHJvcHMucGxhY2Vob2xkZXIgJiYgX3BheWxvYWQucGxhY2Vob2xkZXIpIHNlbGVjdC5wbGFjZWhvbGRlciA9IF9wYXlsb2FkLnBsYWNlaG9sZGVyO1xuICAgIGlmIChwcm9wcy5taW5WYWx1ZXMgJiYgX3BheWxvYWQubWluX3ZhbHVlcykgc2VsZWN0Lm1pblZhbHVlcyA9IF9wYXlsb2FkLm1pbl92YWx1ZXM7XG4gICAgaWYgKHByb3BzLm1heFZhbHVlcyAmJiBfcGF5bG9hZC5tYXhfdmFsdWVzKSBzZWxlY3QubWF4VmFsdWVzID0gX3BheWxvYWQubWF4X3ZhbHVlcztcbiAgICBpZiAocHJvcHMuZGVmYXVsdFZhbHVlcyAmJiBfcGF5bG9hZC5kZWZhdWx0X3ZhbHVlcylcbiAgICAgIHNlbGVjdC5kZWZhdWx0VmFsdWVzID0gX3BheWxvYWQuZGVmYXVsdF92YWx1ZXMubWFwKChkZWZhdWx0VmFsdWUpID0+ICh7XG4gICAgICAgIGlkOiBib3QudHJhbnNmb3JtZXJzLnNub3dmbGFrZShkZWZhdWx0VmFsdWUuaWQpLFxuICAgICAgICB0eXBlOiBkZWZhdWx0VmFsdWUudHlwZSxcbiAgICAgIH0pKTtcbiAgICBpZiAocHJvcHMuZGlzYWJsZWQgJiYgX3BheWxvYWQuZGlzYWJsZWQpIHNlbGVjdC5kaXNhYmxlZCA9IF9wYXlsb2FkLmRpc2FibGVkO1xuICB9XG5cbiAgcmV0dXJuIHNlbGVjdDtcbn1cblxuZnVuY3Rpb24gdHJhbnNmb3JtUm9sZVNlbGVjdE1lbnVDb21wb25lbnQoYm90OiBCb3QsIHBheWxvYWQ6IFBhcnRpYWw8RGlzY29yZFJvbGVTZWxlY3RDb21wb25lbnQgfCBEaXNjb3JkUm9sZVNlbGVjdEludGVyYWN0aW9uUmVzcG9uc2VGcm9tTW9kYWw+KSB7XG4gIGNvbnN0IHByb3BzID0gYm90LnRyYW5zZm9ybWVycy5kZXNpcmVkUHJvcGVydGllcy5jb21wb25lbnQ7XG4gIGNvbnN0IHNlbGVjdCA9IHt9IGFzIFNldHVwRGVzaXJlZFByb3BzPENvbXBvbmVudCwgVHJhbnNmb3JtZXJzRGVzaXJlZFByb3BlcnRpZXMsIERlc2lyZWRQcm9wZXJ0aWVzQmVoYXZpb3I+O1xuXG4gIGlmIChwcm9wcy50eXBlICYmIHBheWxvYWQudHlwZSkgc2VsZWN0LnR5cGUgPSBwYXlsb2FkLnR5cGU7XG4gIGlmIChwcm9wcy5pZCAmJiBwYXlsb2FkLmlkKSBzZWxlY3QuaWQgPSBwYXlsb2FkLmlkO1xuICBpZiAocHJvcHMuY3VzdG9tSWQgJiYgcGF5bG9hZC5jdXN0b21faWQpIHNlbGVjdC5jdXN0b21JZCA9IHBheWxvYWQuY3VzdG9tX2lkO1xuXG4gIC8vIFdlIGFzc3VtZSB0aGF0IGlmIHdlIGZpbmQgJ3ZhbHVlcycgaXQgaXMgdGhlIGludGVyYWN0aW9uIHJlc3BvbnNlXG4gIGlmICgndmFsdWVzJyBpbiBwYXlsb2FkKSB7XG4gICAgaWYgKHByb3BzLnZhbHVlcyAmJiBwYXlsb2FkLnZhbHVlcykgc2VsZWN0LnZhbHVlcyA9IHBheWxvYWQudmFsdWVzO1xuICAgIGlmIChwcm9wcy5yZXNvbHZlZCAmJiBwYXlsb2FkLnJlc29sdmVkKSBzZWxlY3QucmVzb2x2ZWQgPSBib3QudHJhbnNmb3JtZXJzLmludGVyYWN0aW9uRGF0YVJlc29sdmVkKGJvdCwgcGF5bG9hZC5yZXNvbHZlZCk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgX3BheWxvYWQgPSBwYXlsb2FkIGFzIFBhcnRpYWw8RGlzY29yZFJvbGVTZWxlY3RDb21wb25lbnQ+O1xuXG4gICAgaWYgKHByb3BzLnBsYWNlaG9sZGVyICYmIF9wYXlsb2FkLnBsYWNlaG9sZGVyKSBzZWxlY3QucGxhY2Vob2xkZXIgPSBfcGF5bG9hZC5wbGFjZWhvbGRlcjtcbiAgICBpZiAocHJvcHMubWluVmFsdWVzICYmIF9wYXlsb2FkLm1pbl92YWx1ZXMpIHNlbGVjdC5taW5WYWx1ZXMgPSBfcGF5bG9hZC5taW5fdmFsdWVzO1xuICAgIGlmIChwcm9wcy5tYXhWYWx1ZXMgJiYgX3BheWxvYWQubWF4X3ZhbHVlcykgc2VsZWN0Lm1heFZhbHVlcyA9IF9wYXlsb2FkLm1heF92YWx1ZXM7XG4gICAgaWYgKHByb3BzLmRlZmF1bHRWYWx1ZXMgJiYgX3BheWxvYWQuZGVmYXVsdF92YWx1ZXMpXG4gICAgICBzZWxlY3QuZGVmYXVsdFZhbHVlcyA9IF9wYXlsb2FkLmRlZmF1bHRfdmFsdWVzLm1hcCgoZGVmYXVsdFZhbHVlKSA9PiAoe1xuICAgICAgICBpZDogYm90LnRyYW5zZm9ybWVycy5zbm93Zmxha2UoZGVmYXVsdFZhbHVlLmlkKSxcbiAgICAgICAgdHlwZTogZGVmYXVsdFZhbHVlLnR5cGUsXG4gICAgICB9KSk7XG4gICAgaWYgKHByb3BzLmRpc2FibGVkICYmIF9wYXlsb2FkLmRpc2FibGVkKSBzZWxlY3QuZGlzYWJsZWQgPSBfcGF5bG9hZC5kaXNhYmxlZDtcbiAgfVxuXG4gIHJldHVybiBzZWxlY3Q7XG59XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybU1lbnRpb25hYmxlU2VsZWN0TWVudUNvbXBvbmVudChcbiAgYm90OiBCb3QsXG4gIHBheWxvYWQ6IFBhcnRpYWw8RGlzY29yZE1lbnRpb25hYmxlU2VsZWN0Q29tcG9uZW50IHwgRGlzY29yZE1lbnRpb25hYmxlU2VsZWN0SW50ZXJhY3Rpb25SZXNwb25zZUZyb21Nb2RhbD4sXG4pIHtcbiAgY29uc3QgcHJvcHMgPSBib3QudHJhbnNmb3JtZXJzLmRlc2lyZWRQcm9wZXJ0aWVzLmNvbXBvbmVudDtcbiAgY29uc3Qgc2VsZWN0ID0ge30gYXMgU2V0dXBEZXNpcmVkUHJvcHM8Q29tcG9uZW50LCBUcmFuc2Zvcm1lcnNEZXNpcmVkUHJvcGVydGllcywgRGVzaXJlZFByb3BlcnRpZXNCZWhhdmlvcj47XG5cbiAgaWYgKHByb3BzLnR5cGUgJiYgcGF5bG9hZC50eXBlKSBzZWxlY3QudHlwZSA9IHBheWxvYWQudHlwZTtcbiAgaWYgKHByb3BzLmlkICYmIHBheWxvYWQuaWQpIHNlbGVjdC5pZCA9IHBheWxvYWQuaWQ7XG4gIGlmIChwcm9wcy5jdXN0b21JZCAmJiBwYXlsb2FkLmN1c3RvbV9pZCkgc2VsZWN0LmN1c3RvbUlkID0gcGF5bG9hZC5jdXN0b21faWQ7XG5cbiAgLy8gV2UgYXNzdW1lIHRoYXQgaWYgd2UgZmluZCAndmFsdWVzJyBpdCBpcyB0aGUgaW50ZXJhY3Rpb24gcmVzcG9uc2VcbiAgaWYgKCd2YWx1ZXMnIGluIHBheWxvYWQpIHtcbiAgICBpZiAocHJvcHMudmFsdWVzICYmIHBheWxvYWQudmFsdWVzKSBzZWxlY3QudmFsdWVzID0gcGF5bG9hZC52YWx1ZXM7XG4gICAgaWYgKHByb3BzLnJlc29sdmVkICYmIHBheWxvYWQucmVzb2x2ZWQpIHNlbGVjdC5yZXNvbHZlZCA9IGJvdC50cmFuc2Zvcm1lcnMuaW50ZXJhY3Rpb25EYXRhUmVzb2x2ZWQoYm90LCBwYXlsb2FkLnJlc29sdmVkKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBfcGF5bG9hZCA9IHBheWxvYWQgYXMgUGFydGlhbDxEaXNjb3JkTWVudGlvbmFibGVTZWxlY3RDb21wb25lbnQ+O1xuXG4gICAgaWYgKHByb3BzLnBsYWNlaG9sZGVyICYmIF9wYXlsb2FkLnBsYWNlaG9sZGVyKSBzZWxlY3QucGxhY2Vob2xkZXIgPSBfcGF5bG9hZC5wbGFjZWhvbGRlcjtcbiAgICBpZiAocHJvcHMubWluVmFsdWVzICYmIF9wYXlsb2FkLm1pbl92YWx1ZXMpIHNlbGVjdC5taW5WYWx1ZXMgPSBfcGF5bG9hZC5taW5fdmFsdWVzO1xuICAgIGlmIChwcm9wcy5tYXhWYWx1ZXMgJiYgX3BheWxvYWQubWF4X3ZhbHVlcykgc2VsZWN0Lm1heFZhbHVlcyA9IF9wYXlsb2FkLm1heF92YWx1ZXM7XG4gICAgaWYgKHByb3BzLmRlZmF1bHRWYWx1ZXMgJiYgX3BheWxvYWQuZGVmYXVsdF92YWx1ZXMpXG4gICAgICBzZWxlY3QuZGVmYXVsdFZhbHVlcyA9IF9wYXlsb2FkLmRlZmF1bHRfdmFsdWVzLm1hcCgoZGVmYXVsdFZhbHVlKSA9PiAoe1xuICAgICAgICBpZDogYm90LnRyYW5zZm9ybWVycy5zbm93Zmxha2UoZGVmYXVsdFZhbHVlLmlkKSxcbiAgICAgICAgdHlwZTogZGVmYXVsdFZhbHVlLnR5cGUsXG4gICAgICB9KSk7XG4gICAgaWYgKHByb3BzLmRpc2FibGVkICYmIF9wYXlsb2FkLmRpc2FibGVkKSBzZWxlY3QuZGlzYWJsZWQgPSBfcGF5bG9hZC5kaXNhYmxlZDtcbiAgfVxuXG4gIHJldHVybiBzZWxlY3Q7XG59XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybUNoYW5uZWxTZWxlY3RNZW51Q29tcG9uZW50KFxuICBib3Q6IEJvdCxcbiAgcGF5bG9hZDogUGFydGlhbDxEaXNjb3JkQ2hhbm5lbFNlbGVjdENvbXBvbmVudCB8IERpc2NvcmRDaGFubmVsU2VsZWN0SW50ZXJhY3Rpb25SZXNwb25zZUZyb21Nb2RhbD4sXG4pIHtcbiAgY29uc3QgcHJvcHMgPSBib3QudHJhbnNmb3JtZXJzLmRlc2lyZWRQcm9wZXJ0aWVzLmNvbXBvbmVudDtcbiAgY29uc3Qgc2VsZWN0ID0ge30gYXMgU2V0dXBEZXNpcmVkUHJvcHM8Q29tcG9uZW50LCBUcmFuc2Zvcm1lcnNEZXNpcmVkUHJvcGVydGllcywgRGVzaXJlZFByb3BlcnRpZXNCZWhhdmlvcj47XG5cbiAgaWYgKHByb3BzLnR5cGUgJiYgcGF5bG9hZC50eXBlKSBzZWxlY3QudHlwZSA9IHBheWxvYWQudHlwZTtcbiAgaWYgKHByb3BzLmlkICYmIHBheWxvYWQuaWQpIHNlbGVjdC5pZCA9IHBheWxvYWQuaWQ7XG4gIGlmIChwcm9wcy5jdXN0b21JZCAmJiBwYXlsb2FkLmN1c3RvbV9pZCkgc2VsZWN0LmN1c3RvbUlkID0gcGF5bG9hZC5jdXN0b21faWQ7XG5cbiAgLy8gV2UgYXNzdW1lIHRoYXQgaWYgd2UgZmluZCAndmFsdWVzJyBpdCBpcyB0aGUgaW50ZXJhY3Rpb24gcmVzcG9uc2VcbiAgaWYgKCd2YWx1ZXMnIGluIHBheWxvYWQpIHtcbiAgICBpZiAocHJvcHMudmFsdWVzICYmIHBheWxvYWQudmFsdWVzKSBzZWxlY3QudmFsdWVzID0gcGF5bG9hZC52YWx1ZXM7XG4gICAgaWYgKHByb3BzLnJlc29sdmVkICYmIHBheWxvYWQucmVzb2x2ZWQpIHNlbGVjdC5yZXNvbHZlZCA9IGJvdC50cmFuc2Zvcm1lcnMuaW50ZXJhY3Rpb25EYXRhUmVzb2x2ZWQoYm90LCBwYXlsb2FkLnJlc29sdmVkKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBfcGF5bG9hZCA9IHBheWxvYWQgYXMgUGFydGlhbDxEaXNjb3JkQ2hhbm5lbFNlbGVjdENvbXBvbmVudD47XG5cbiAgICBpZiAocHJvcHMucGxhY2Vob2xkZXIgJiYgX3BheWxvYWQucGxhY2Vob2xkZXIpIHNlbGVjdC5wbGFjZWhvbGRlciA9IF9wYXlsb2FkLnBsYWNlaG9sZGVyO1xuICAgIGlmIChwcm9wcy5taW5WYWx1ZXMgJiYgX3BheWxvYWQubWluX3ZhbHVlcykgc2VsZWN0Lm1pblZhbHVlcyA9IF9wYXlsb2FkLm1pbl92YWx1ZXM7XG4gICAgaWYgKHByb3BzLm1heFZhbHVlcyAmJiBfcGF5bG9hZC5tYXhfdmFsdWVzKSBzZWxlY3QubWF4VmFsdWVzID0gX3BheWxvYWQubWF4X3ZhbHVlcztcbiAgICBpZiAocHJvcHMuZGVmYXVsdFZhbHVlcyAmJiBfcGF5bG9hZC5kZWZhdWx0X3ZhbHVlcylcbiAgICAgIHNlbGVjdC5kZWZhdWx0VmFsdWVzID0gX3BheWxvYWQuZGVmYXVsdF92YWx1ZXMubWFwKChkZWZhdWx0VmFsdWUpID0+ICh7XG4gICAgICAgIGlkOiBib3QudHJhbnNmb3JtZXJzLnNub3dmbGFrZShkZWZhdWx0VmFsdWUuaWQpLFxuICAgICAgICB0eXBlOiBkZWZhdWx0VmFsdWUudHlwZSxcbiAgICAgIH0pKTtcbiAgICBpZiAocHJvcHMuY2hhbm5lbFR5cGVzICYmIF9wYXlsb2FkLmNoYW5uZWxfdHlwZXMpIHNlbGVjdC5jaGFubmVsVHlwZXMgPSBfcGF5bG9hZC5jaGFubmVsX3R5cGVzO1xuICAgIGlmIChwcm9wcy5kaXNhYmxlZCAmJiBfcGF5bG9hZC5kaXNhYmxlZCkgc2VsZWN0LmRpc2FibGVkID0gX3BheWxvYWQuZGlzYWJsZWQ7XG4gIH1cblxuICByZXR1cm4gc2VsZWN0O1xufVxuXG5mdW5jdGlvbiB0cmFuc2Zvcm1TZWN0aW9uQ29tcG9uZW50KGJvdDogQm90LCBwYXlsb2FkOiBQYXJ0aWFsPERpc2NvcmRTZWN0aW9uQ29tcG9uZW50Pikge1xuICBjb25zdCBwcm9wcyA9IGJvdC50cmFuc2Zvcm1lcnMuZGVzaXJlZFByb3BlcnRpZXMuY29tcG9uZW50O1xuICBjb25zdCBzZWN0aW9uID0ge30gYXMgU2V0dXBEZXNpcmVkUHJvcHM8Q29tcG9uZW50LCBUcmFuc2Zvcm1lcnNEZXNpcmVkUHJvcGVydGllcywgRGVzaXJlZFByb3BlcnRpZXNCZWhhdmlvcj47XG5cbiAgaWYgKHByb3BzLnR5cGUgJiYgcGF5bG9hZC50eXBlKSBzZWN0aW9uLnR5cGUgPSBwYXlsb2FkLnR5cGU7XG4gIGlmIChwcm9wcy5pZCAmJiBwYXlsb2FkLmlkKSBzZWN0aW9uLmlkID0gcGF5bG9hZC5pZDtcbiAgaWYgKHByb3BzLmNvbXBvbmVudHMgJiYgcGF5bG9hZC5jb21wb25lbnRzKSBzZWN0aW9uLmNvbXBvbmVudHMgPSBwYXlsb2FkLmNvbXBvbmVudHMubWFwKChjb21wb25lbnQpID0+IGJvdC50cmFuc2Zvcm1lcnMuY29tcG9uZW50KGJvdCwgY29tcG9uZW50KSk7XG4gIGlmIChwcm9wcy5hY2Nlc3NvcnkgJiYgcGF5bG9hZC5hY2Nlc3NvcnkpIHNlY3Rpb24uYWNjZXNzb3J5ID0gYm90LnRyYW5zZm9ybWVycy5jb21wb25lbnQoYm90LCBwYXlsb2FkLmFjY2Vzc29yeSk7XG5cbiAgcmV0dXJuIHNlY3Rpb247XG59XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybVRodW1ibmFpbENvbXBvbmVudChib3Q6IEJvdCwgcGF5bG9hZDogUGFydGlhbDxEaXNjb3JkVGh1bWJuYWlsQ29tcG9uZW50Pikge1xuICBjb25zdCBwcm9wcyA9IGJvdC50cmFuc2Zvcm1lcnMuZGVzaXJlZFByb3BlcnRpZXMuY29tcG9uZW50O1xuICBjb25zdCB0aHVtYm5haWwgPSB7fSBhcyBTZXR1cERlc2lyZWRQcm9wczxDb21wb25lbnQsIFRyYW5zZm9ybWVyc0Rlc2lyZWRQcm9wZXJ0aWVzLCBEZXNpcmVkUHJvcGVydGllc0JlaGF2aW9yPjtcblxuICBpZiAocHJvcHMudHlwZSAmJiBwYXlsb2FkLnR5cGUpIHRodW1ibmFpbC50eXBlID0gcGF5bG9hZC50eXBlO1xuICBpZiAocHJvcHMuaWQgJiYgcGF5bG9hZC5pZCkgdGh1bWJuYWlsLmlkID0gcGF5bG9hZC5pZDtcbiAgaWYgKHByb3BzLm1lZGlhICYmIHBheWxvYWQubWVkaWEpIHRodW1ibmFpbC5tZWRpYSA9IGJvdC50cmFuc2Zvcm1lcnMudW5mdXJsZWRNZWRpYUl0ZW0oYm90LCBwYXlsb2FkLm1lZGlhKTtcbiAgaWYgKHByb3BzLmRlc2NyaXB0aW9uICYmIHBheWxvYWQuZGVzY3JpcHRpb24pIHRodW1ibmFpbC5kZXNjcmlwdGlvbiA9IHBheWxvYWQuZGVzY3JpcHRpb247XG4gIGlmIChwcm9wcy5zcG9pbGVyICYmIHBheWxvYWQuc3BvaWxlcikgdGh1bWJuYWlsLnNwb2lsZXIgPSBwYXlsb2FkLnNwb2lsZXI7XG5cbiAgcmV0dXJuIHRodW1ibmFpbDtcbn1cblxuZnVuY3Rpb24gdHJhbnNmb3JtTWVkaWFHYWxsZXJ5Q29tcG9uZW50KGJvdDogQm90LCBwYXlsb2FkOiBQYXJ0aWFsPERpc2NvcmRNZWRpYUdhbGxlcnlDb21wb25lbnQ+KSB7XG4gIGNvbnN0IHByb3BzID0gYm90LnRyYW5zZm9ybWVycy5kZXNpcmVkUHJvcGVydGllcy5jb21wb25lbnQ7XG4gIGNvbnN0IG1lZGlhR2FsbGVyeSA9IHt9IGFzIFNldHVwRGVzaXJlZFByb3BzPENvbXBvbmVudCwgVHJhbnNmb3JtZXJzRGVzaXJlZFByb3BlcnRpZXMsIERlc2lyZWRQcm9wZXJ0aWVzQmVoYXZpb3I+O1xuXG4gIGlmIChwcm9wcy50eXBlICYmIHBheWxvYWQudHlwZSkgbWVkaWFHYWxsZXJ5LnR5cGUgPSBwYXlsb2FkLnR5cGU7XG4gIGlmIChwcm9wcy5pZCAmJiBwYXlsb2FkLmlkKSBtZWRpYUdhbGxlcnkuaWQgPSBwYXlsb2FkLmlkO1xuICBpZiAocHJvcHMuaXRlbXMgJiYgcGF5bG9hZC5pdGVtcykgbWVkaWFHYWxsZXJ5Lml0ZW1zID0gcGF5bG9hZC5pdGVtcy5tYXAoKGl0ZW0pID0+IGJvdC50cmFuc2Zvcm1lcnMubWVkaWFHYWxsZXJ5SXRlbShib3QsIGl0ZW0pKTtcblxuICByZXR1cm4gbWVkaWFHYWxsZXJ5O1xufVxuXG5mdW5jdGlvbiB0cmFuc2Zvcm1GaWxlQ29tcG9uZW50KGJvdDogQm90LCBwYXlsb2FkOiBQYXJ0aWFsPERpc2NvcmRGaWxlQ29tcG9uZW50Pikge1xuICBjb25zdCBwcm9wcyA9IGJvdC50cmFuc2Zvcm1lcnMuZGVzaXJlZFByb3BlcnRpZXMuY29tcG9uZW50O1xuICBjb25zdCBmaWxlID0ge30gYXMgU2V0dXBEZXNpcmVkUHJvcHM8Q29tcG9uZW50LCBUcmFuc2Zvcm1lcnNEZXNpcmVkUHJvcGVydGllcywgRGVzaXJlZFByb3BlcnRpZXNCZWhhdmlvcj47XG5cbiAgaWYgKHByb3BzLnR5cGUgJiYgcGF5bG9hZC50eXBlKSBmaWxlLnR5cGUgPSBwYXlsb2FkLnR5cGU7XG4gIGlmIChwcm9wcy5pZCAmJiBwYXlsb2FkLmlkKSBmaWxlLmlkID0gcGF5bG9hZC5pZDtcbiAgaWYgKHByb3BzLmZpbGUgJiYgcGF5bG9hZC5maWxlKSBmaWxlLmZpbGUgPSBib3QudHJhbnNmb3JtZXJzLnVuZnVybGVkTWVkaWFJdGVtKGJvdCwgcGF5bG9hZC5maWxlKTtcbiAgaWYgKHByb3BzLnNwb2lsZXIgJiYgcGF5bG9hZC5zcG9pbGVyKSBmaWxlLnNwb2lsZXIgPSBwYXlsb2FkLnNwb2lsZXI7XG4gIGlmIChwcm9wcy5uYW1lICYmIHBheWxvYWQubmFtZSkgZmlsZS5uYW1lID0gcGF5bG9hZC5uYW1lO1xuICBpZiAocHJvcHMuc2l6ZSAmJiBwYXlsb2FkLnNpemUpIGZpbGUuc2l6ZSA9IHBheWxvYWQuc2l6ZTtcblxuICByZXR1cm4gZmlsZTtcbn1cblxuZnVuY3Rpb24gdHJhbnNmb3JtVGV4dERpc3BsYXlDb21wb25lbnQoYm90OiBCb3QsIHBheWxvYWQ6IFBhcnRpYWw8RGlzY29yZFRleHREaXNwbGF5Q29tcG9uZW50IHwgRGlzY29yZFRleHREaXNwbGF5SW50ZXJhY3Rpb25SZXNwb25zZT4pIHtcbiAgY29uc3QgcHJvcHMgPSBib3QudHJhbnNmb3JtZXJzLmRlc2lyZWRQcm9wZXJ0aWVzLmNvbXBvbmVudDtcbiAgY29uc3QgdGV4dERpc3BsYXkgPSB7fSBhcyBTZXR1cERlc2lyZWRQcm9wczxDb21wb25lbnQsIFRyYW5zZm9ybWVyc0Rlc2lyZWRQcm9wZXJ0aWVzLCBEZXNpcmVkUHJvcGVydGllc0JlaGF2aW9yPjtcblxuICBpZiAocHJvcHMudHlwZSAmJiBwYXlsb2FkLnR5cGUpIHRleHREaXNwbGF5LnR5cGUgPSBwYXlsb2FkLnR5cGU7XG4gIGlmIChwcm9wcy5pZCAmJiBwYXlsb2FkLmlkKSB0ZXh0RGlzcGxheS5pZCA9IHBheWxvYWQuaWQ7XG4gIC8vIFdlIGFzc3VtZSB0aGF0IGlmIHdlIGZpbmQgJ2NvbnRlbnQnIGl0IGlzIHRoZSBjb21wb25lbnRcbiAgaWYgKCdjb250ZW50JyBpbiBwYXlsb2FkKSB7XG4gICAgaWYgKHByb3BzLmNvbnRlbnQgJiYgcGF5bG9hZC5jb250ZW50KSB0ZXh0RGlzcGxheS5jb250ZW50ID0gcGF5bG9hZC5jb250ZW50O1xuICB9XG5cbiAgcmV0dXJuIHRleHREaXNwbGF5O1xufVxuXG5mdW5jdGlvbiB0cmFuc2Zvcm1TZXBhcmF0b3JDb21wb25lbnQoYm90OiBCb3QsIHBheWxvYWQ6IFBhcnRpYWw8RGlzY29yZFNlcGFyYXRvckNvbXBvbmVudD4pIHtcbiAgY29uc3QgcHJvcHMgPSBib3QudHJhbnNmb3JtZXJzLmRlc2lyZWRQcm9wZXJ0aWVzLmNvbXBvbmVudDtcbiAgY29uc3Qgc2VwYXJhdG9yID0ge30gYXMgU2V0dXBEZXNpcmVkUHJvcHM8Q29tcG9uZW50LCBUcmFuc2Zvcm1lcnNEZXNpcmVkUHJvcGVydGllcywgRGVzaXJlZFByb3BlcnRpZXNCZWhhdmlvcj47XG5cbiAgaWYgKHByb3BzLnR5cGUgJiYgcGF5bG9hZC50eXBlKSBzZXBhcmF0b3IudHlwZSA9IHBheWxvYWQudHlwZTtcbiAgaWYgKHByb3BzLmlkICYmIHBheWxvYWQuaWQpIHNlcGFyYXRvci5pZCA9IHBheWxvYWQuaWQ7XG4gIGlmIChwcm9wcy5kaXZpZGVyICYmIHBheWxvYWQuZGl2aWRlcikgc2VwYXJhdG9yLmRpdmlkZXIgPSBwYXlsb2FkLmRpdmlkZXI7XG4gIGlmIChwcm9wcy5zcGFjaW5nICYmIHBheWxvYWQuc3BhY2luZykgc2VwYXJhdG9yLnNwYWNpbmcgPSBwYXlsb2FkLnNwYWNpbmc7XG5cbiAgcmV0dXJuIHNlcGFyYXRvcjtcbn1cblxuZnVuY3Rpb24gdHJhbnNmb3JtTGFiZWxDb21wb25lbnQoYm90OiBCb3QsIHBheWxvYWQ6IFBhcnRpYWw8RGlzY29yZExhYmVsQ29tcG9uZW50IHwgRGlzY29yZExhYmVsSW50ZXJhY3Rpb25SZXNwb25zZT4pIHtcbiAgY29uc3QgcHJvcHMgPSBib3QudHJhbnNmb3JtZXJzLmRlc2lyZWRQcm9wZXJ0aWVzLmNvbXBvbmVudDtcbiAgY29uc3QgbGFiZWwgPSB7fSBhcyBTZXR1cERlc2lyZWRQcm9wczxDb21wb25lbnQsIFRyYW5zZm9ybWVyc0Rlc2lyZWRQcm9wZXJ0aWVzLCBEZXNpcmVkUHJvcGVydGllc0JlaGF2aW9yPjtcblxuICBpZiAocHJvcHMudHlwZSAmJiBwYXlsb2FkLnR5cGUpIGxhYmVsLnR5cGUgPSBwYXlsb2FkLnR5cGU7XG4gIGlmIChwcm9wcy5pZCAmJiBwYXlsb2FkLmlkKSBsYWJlbC5pZCA9IHBheWxvYWQuaWQ7XG4gIC8vIFdlIGFzc3VtZSB0aGF0IGlmIHdlIGZpbmQgJ2xhYmVsJyBpdCBpcyB0aGUgY29tcG9uZW50XG4gIGlmICgnbGFiZWwnIGluIHBheWxvYWQpIHtcbiAgICBpZiAocHJvcHMubGFiZWwgJiYgcGF5bG9hZC5sYWJlbCkgbGFiZWwubGFiZWwgPSBwYXlsb2FkLmxhYmVsO1xuICAgIGlmIChwcm9wcy5kZXNjcmlwdGlvbiAmJiBwYXlsb2FkLmRlc2NyaXB0aW9uKSBsYWJlbC5kZXNjcmlwdGlvbiA9IHBheWxvYWQuZGVzY3JpcHRpb247XG4gIH1cbiAgaWYgKHByb3BzLmNvbXBvbmVudCAmJiBwYXlsb2FkLmNvbXBvbmVudCkgbGFiZWwuY29tcG9uZW50ID0gYm90LnRyYW5zZm9ybWVycy5jb21wb25lbnQoYm90LCBwYXlsb2FkLmNvbXBvbmVudCk7XG5cbiAgcmV0dXJuIGxhYmVsO1xufVxuXG5mdW5jdGlvbiB0cmFuc2Zvcm1GaWxlVXBsb2FkQ29tcG9uZW50KGJvdDogQm90LCBwYXlsb2FkOiBQYXJ0aWFsPERpc2NvcmRGaWxlVXBsb2FkQ29tcG9uZW50IHwgRGlzY29yZEZpbGVVcGxvYWRJbnRlcmFjdGlvblJlc3BvbnNlPikge1xuICBjb25zdCBwcm9wcyA9IGJvdC50cmFuc2Zvcm1lcnMuZGVzaXJlZFByb3BlcnRpZXMuY29tcG9uZW50O1xuICBjb25zdCBmaWxlVXBsb2FkID0ge30gYXMgU2V0dXBEZXNpcmVkUHJvcHM8Q29tcG9uZW50LCBUcmFuc2Zvcm1lcnNEZXNpcmVkUHJvcGVydGllcywgRGVzaXJlZFByb3BlcnRpZXNCZWhhdmlvcj47XG5cbiAgaWYgKHByb3BzLnR5cGUgJiYgcGF5bG9hZC50eXBlKSBmaWxlVXBsb2FkLnR5cGUgPSBwYXlsb2FkLnR5cGU7XG4gIGlmIChwcm9wcy5pZCAmJiBwYXlsb2FkLmlkKSBmaWxlVXBsb2FkLmlkID0gcGF5bG9hZC5pZDtcbiAgaWYgKHByb3BzLmN1c3RvbUlkICYmIHBheWxvYWQuY3VzdG9tX2lkKSBmaWxlVXBsb2FkLmN1c3RvbUlkID0gcGF5bG9hZC5jdXN0b21faWQ7XG5cbiAgLy8gV2UgYXNzdW1lIHRoYXQgaWYgd2UgZmluZCAndmFsdWVzJyBpdCBpcyB0aGUgaW50ZXJhY3Rpb24gcmVzcG9uc2VcbiAgaWYgKCd2YWx1ZXMnIGluIHBheWxvYWQpIHtcbiAgICBpZiAocHJvcHMudmFsdWVzICYmIHBheWxvYWQudmFsdWVzKSBmaWxlVXBsb2FkLnZhbHVlcyA9IHBheWxvYWQudmFsdWVzO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IF9wYXlsb2FkID0gcGF5bG9hZCBhcyBQYXJ0aWFsPERpc2NvcmRGaWxlVXBsb2FkQ29tcG9uZW50PjtcblxuICAgIGlmIChwcm9wcy5taW5WYWx1ZXMgJiYgX3BheWxvYWQubWluX3ZhbHVlcykgZmlsZVVwbG9hZC5taW5WYWx1ZXMgPSBfcGF5bG9hZC5taW5fdmFsdWVzO1xuICAgIGlmIChwcm9wcy5tYXhWYWx1ZXMgJiYgX3BheWxvYWQubWF4X3ZhbHVlcykgZmlsZVVwbG9hZC5tYXhWYWx1ZXMgPSBfcGF5bG9hZC5tYXhfdmFsdWVzO1xuICAgIGlmIChwcm9wcy5yZXF1aXJlZCAmJiBfcGF5bG9hZC5yZXF1aXJlZCkgZmlsZVVwbG9hZC5yZXF1aXJlZCA9IF9wYXlsb2FkLnJlcXVpcmVkO1xuICAgIGlmIChwcm9wcy5maWxlVHlwZXMgJiYgX3BheWxvYWQuZmlsZV90eXBlcykgZmlsZVVwbG9hZC5maWxlVHlwZXMgPSBfcGF5bG9hZC5maWxlX3R5cGVzO1xuICB9XG5cbiAgcmV0dXJuIGZpbGVVcGxvYWQ7XG59XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybVJhZGlvR3JvdXBDb21wb25lbnQoYm90OiBCb3QsIHBheWxvYWQ6IFBhcnRpYWw8RGlzY29yZFJhZGlvR3JvdXBDb21wb25lbnQgfCBEaXNjb3JkUmFkaW9Hcm91cEludGVyYWN0aW9uUmVzcG9uc2U+KSB7XG4gIGNvbnN0IHByb3BzID0gYm90LnRyYW5zZm9ybWVycy5kZXNpcmVkUHJvcGVydGllcy5jb21wb25lbnQ7XG4gIGNvbnN0IHJhZGlvR3JvdXAgPSB7fSBhcyBTZXR1cERlc2lyZWRQcm9wczxDb21wb25lbnQsIFRyYW5zZm9ybWVyc0Rlc2lyZWRQcm9wZXJ0aWVzLCBEZXNpcmVkUHJvcGVydGllc0JlaGF2aW9yPjtcblxuICBpZiAocHJvcHMudHlwZSAmJiBwYXlsb2FkLnR5cGUpIHJhZGlvR3JvdXAudHlwZSA9IHBheWxvYWQudHlwZTtcbiAgaWYgKHByb3BzLmlkICYmIHBheWxvYWQuaWQpIHJhZGlvR3JvdXAuaWQgPSBwYXlsb2FkLmlkO1xuICBpZiAocHJvcHMuY3VzdG9tSWQgJiYgcGF5bG9hZC5jdXN0b21faWQpIHJhZGlvR3JvdXAuY3VzdG9tSWQgPSBwYXlsb2FkLmN1c3RvbV9pZDtcblxuICAvLyBXZSBhc3N1bWUgdGhhdCBpZiB3ZSBmaW5kICdvcHRpb25zJyBpdCBpcyB0aGUgY29tcG9uZW50XG4gIGlmICgnb3B0aW9ucycgaW4gcGF5bG9hZCkge1xuICAgIGlmIChwcm9wcy5vcHRpb25zICYmIHBheWxvYWQub3B0aW9ucykgcmFkaW9Hcm91cC5vcHRpb25zID0gcGF5bG9hZC5vcHRpb25zO1xuICAgIGlmIChwcm9wcy5yZXF1aXJlZCAmJiBwYXlsb2FkLnJlcXVpcmVkICE9PSB1bmRlZmluZWQpIHJhZGlvR3JvdXAucmVxdWlyZWQgPSBwYXlsb2FkLnJlcXVpcmVkO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IF9wYXlsb2FkID0gcGF5bG9hZCBhcyBQYXJ0aWFsPERpc2NvcmRSYWRpb0dyb3VwSW50ZXJhY3Rpb25SZXNwb25zZT47XG5cbiAgICBpZiAocHJvcHMudmFsdWUpIHJhZGlvR3JvdXAudmFsdWUgPSBfcGF5bG9hZC52YWx1ZSA/PyB1bmRlZmluZWQ7XG4gIH1cblxuICByZXR1cm4gcmFkaW9Hcm91cDtcbn1cblxuZnVuY3Rpb24gdHJhbnNmb3JtQ2hlY2tib3hHcm91cENvbXBvbmVudChib3Q6IEJvdCwgcGF5bG9hZDogUGFydGlhbDxEaXNjb3JkQ2hlY2tib3hHcm91cENvbXBvbmVudCB8IERpc2NvcmRDaGVja2JveEdyb3VwSW50ZXJhY3Rpb25SZXNwb25zZT4pIHtcbiAgY29uc3QgcHJvcHMgPSBib3QudHJhbnNmb3JtZXJzLmRlc2lyZWRQcm9wZXJ0aWVzLmNvbXBvbmVudDtcbiAgY29uc3QgY2hlY2tib3hHcm91cCA9IHt9IGFzIFNldHVwRGVzaXJlZFByb3BzPENvbXBvbmVudCwgVHJhbnNmb3JtZXJzRGVzaXJlZFByb3BlcnRpZXMsIERlc2lyZWRQcm9wZXJ0aWVzQmVoYXZpb3I+O1xuXG4gIGlmIChwcm9wcy50eXBlICYmIHBheWxvYWQudHlwZSkgY2hlY2tib3hHcm91cC50eXBlID0gcGF5bG9hZC50eXBlO1xuICBpZiAocHJvcHMuaWQgJiYgcGF5bG9hZC5pZCkgY2hlY2tib3hHcm91cC5pZCA9IHBheWxvYWQuaWQ7XG4gIGlmIChwcm9wcy5jdXN0b21JZCAmJiBwYXlsb2FkLmN1c3RvbV9pZCkgY2hlY2tib3hHcm91cC5jdXN0b21JZCA9IHBheWxvYWQuY3VzdG9tX2lkO1xuXG4gIC8vIFdlIGFzc3VtZSB0aGF0IGlmIHdlIGZpbmQgJ29wdGlvbnMnIGl0IGlzIHRoZSBjb21wb25lbnRcbiAgaWYgKCdvcHRpb25zJyBpbiBwYXlsb2FkKSB7XG4gICAgaWYgKHByb3BzLm9wdGlvbnMgJiYgcGF5bG9hZC5vcHRpb25zKSBjaGVja2JveEdyb3VwLm9wdGlvbnMgPSBwYXlsb2FkLm9wdGlvbnM7XG4gICAgaWYgKHByb3BzLm1pblZhbHVlcyAmJiBwYXlsb2FkLm1pbl92YWx1ZXMgIT09IHVuZGVmaW5lZCkgY2hlY2tib3hHcm91cC5taW5WYWx1ZXMgPSBwYXlsb2FkLm1pbl92YWx1ZXM7XG4gICAgaWYgKHByb3BzLm1heFZhbHVlcyAmJiBwYXlsb2FkLm1heF92YWx1ZXMgIT09IHVuZGVmaW5lZCkgY2hlY2tib3hHcm91cC5tYXhWYWx1ZXMgPSBwYXlsb2FkLm1heF92YWx1ZXM7XG4gICAgaWYgKHByb3BzLnJlcXVpcmVkICYmIHBheWxvYWQucmVxdWlyZWQgIT09IHVuZGVmaW5lZCkgY2hlY2tib3hHcm91cC5yZXF1aXJlZCA9IHBheWxvYWQucmVxdWlyZWQ7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgX3BheWxvYWQgPSBwYXlsb2FkIGFzIFBhcnRpYWw8RGlzY29yZENoZWNrYm94R3JvdXBJbnRlcmFjdGlvblJlc3BvbnNlPjtcblxuICAgIGlmIChwcm9wcy52YWx1ZXMgJiYgX3BheWxvYWQudmFsdWVzKSBjaGVja2JveEdyb3VwLnZhbHVlcyA9IF9wYXlsb2FkLnZhbHVlcztcbiAgfVxuXG4gIHJldHVybiBjaGVja2JveEdyb3VwO1xufVxuXG5mdW5jdGlvbiB0cmFuc2Zvcm1DaGVja2JveENvbXBvbmVudChib3Q6IEJvdCwgcGF5bG9hZDogUGFydGlhbDxEaXNjb3JkQ2hlY2tib3hDb21wb25lbnQgfCBEaXNjb3JkQ2hlY2tib3hJbnRlcmFjdGlvblJlc3BvbnNlPikge1xuICBjb25zdCBwcm9wcyA9IGJvdC50cmFuc2Zvcm1lcnMuZGVzaXJlZFByb3BlcnRpZXMuY29tcG9uZW50O1xuICBjb25zdCBjaGVja2JveCA9IHt9IGFzIFNldHVwRGVzaXJlZFByb3BzPENvbXBvbmVudCwgVHJhbnNmb3JtZXJzRGVzaXJlZFByb3BlcnRpZXMsIERlc2lyZWRQcm9wZXJ0aWVzQmVoYXZpb3I+O1xuXG4gIGlmIChwcm9wcy50eXBlICYmIHBheWxvYWQudHlwZSkgY2hlY2tib3gudHlwZSA9IHBheWxvYWQudHlwZTtcbiAgaWYgKHByb3BzLmlkICYmIHBheWxvYWQuaWQpIGNoZWNrYm94LmlkID0gcGF5bG9hZC5pZDtcbiAgaWYgKHByb3BzLmN1c3RvbUlkICYmIHBheWxvYWQuY3VzdG9tX2lkKSBjaGVja2JveC5jdXN0b21JZCA9IHBheWxvYWQuY3VzdG9tX2lkO1xuXG4gIGlmIChwcm9wcy52YWx1ZSAmJiAndmFsdWUnIGluIHBheWxvYWQpIGNoZWNrYm94LnZhbHVlID0gcGF5bG9hZC52YWx1ZTtcbiAgaWYgKHByb3BzLmRlZmF1bHQgJiYgJ2RlZmF1bHQnIGluIHBheWxvYWQpIGNoZWNrYm94LmRlZmF1bHQgPSBwYXlsb2FkLmRlZmF1bHQ7XG5cbiAgcmV0dXJuIGNoZWNrYm94O1xufVxuIl0sIm5hbWVzIjpbIk1lc3NhZ2VDb21wb25lbnRUeXBlcyIsImNhbGxDdXN0b21pemVyIiwiVG9nZ2xlQml0ZmllbGQiLCJ0cmFuc2Zvcm1Db21wb25lbnQiLCJib3QiLCJwYXlsb2FkIiwiZXh0cmEiLCJjb21wb25lbnQiLCJ0eXBlIiwiRXJyb3IiLCJBY3Rpb25Sb3ciLCJ0cmFuc2Zvcm1BY3Rpb25Sb3ciLCJCdXR0b24iLCJ0cmFuc2Zvcm1CdXR0b25Db21wb25lbnQiLCJDb250YWluZXIiLCJ0cmFuc2Zvcm1Db250YWluZXJDb21wb25lbnQiLCJUZXh0SW5wdXQiLCJ0cmFuc2Zvcm1JbnB1dFRleHRDb21wb25lbnQiLCJTdHJpbmdTZWxlY3QiLCJ0cmFuc2Zvcm1TdHJpbmdTZWxlY3RNZW51Q29tcG9uZW50IiwiVXNlclNlbGVjdCIsInRyYW5zZm9ybVVzZXJTZWxlY3RNZW51Q29tcG9uZW50IiwiUm9sZVNlbGVjdCIsInRyYW5zZm9ybVJvbGVTZWxlY3RNZW51Q29tcG9uZW50IiwiTWVudGlvbmFibGVTZWxlY3QiLCJ0cmFuc2Zvcm1NZW50aW9uYWJsZVNlbGVjdE1lbnVDb21wb25lbnQiLCJDaGFubmVsU2VsZWN0IiwidHJhbnNmb3JtQ2hhbm5lbFNlbGVjdE1lbnVDb21wb25lbnQiLCJTZWN0aW9uIiwidHJhbnNmb3JtU2VjdGlvbkNvbXBvbmVudCIsIlRodW1ibmFpbCIsInRyYW5zZm9ybVRodW1ibmFpbENvbXBvbmVudCIsIk1lZGlhR2FsbGVyeSIsInRyYW5zZm9ybU1lZGlhR2FsbGVyeUNvbXBvbmVudCIsIkZpbGUiLCJ0cmFuc2Zvcm1GaWxlQ29tcG9uZW50IiwiU2VwYXJhdG9yIiwidHJhbnNmb3JtU2VwYXJhdG9yQ29tcG9uZW50IiwiVGV4dERpc3BsYXkiLCJ0cmFuc2Zvcm1UZXh0RGlzcGxheUNvbXBvbmVudCIsIkxhYmVsIiwidHJhbnNmb3JtTGFiZWxDb21wb25lbnQiLCJGaWxlVXBsb2FkIiwidHJhbnNmb3JtRmlsZVVwbG9hZENvbXBvbmVudCIsIlJhZGlvR3JvdXAiLCJ0cmFuc2Zvcm1SYWRpb0dyb3VwQ29tcG9uZW50IiwiQ2hlY2tib3hHcm91cCIsInRyYW5zZm9ybUNoZWNrYm94R3JvdXBDb21wb25lbnQiLCJDaGVja2JveCIsInRyYW5zZm9ybUNoZWNrYm94Q29tcG9uZW50IiwicGFydGlhbCIsInRyYW5zZm9ybVVuZnVybGVkTWVkaWFJdGVtIiwicHJvcHMiLCJ0cmFuc2Zvcm1lcnMiLCJkZXNpcmVkUHJvcGVydGllcyIsInVuZnVybGVkTWVkaWFJdGVtIiwibWVkaWFJdGVtIiwidXJsIiwicHJveHlVcmwiLCJwcm94eV91cmwiLCJoZWlnaHQiLCJ3aWR0aCIsInBsYWNlaG9sZGVyIiwicGxhY2Vob2xkZXJWZXJzaW9uIiwicGxhY2Vob2xkZXJfdmVyc2lvbiIsImNvbnRlbnRUeXBlIiwiY29udGVudF90eXBlIiwiZmxhZ3MiLCJhdHRhY2htZW50SWQiLCJhdHRhY2htZW50X2lkIiwic25vd2ZsYWtlIiwidHJhbnNmb3JtTWVkaWFHYWxsZXJ5SXRlbSIsIm1lZGlhR2FsbGVyeUl0ZW0iLCJnYWxsZXJ5SXRlbSIsIm1lZGlhIiwiZGVzY3JpcHRpb24iLCJzcG9pbGVyIiwiYWN0aW9uUm93IiwiaWQiLCJjb21wb25lbnRzIiwibWFwIiwiY29udGFpbmVyIiwiYWNjZW50Q29sb3IiLCJhY2NlbnRfY29sb3IiLCJidXR0b24iLCJsYWJlbCIsImN1c3RvbUlkIiwiY3VzdG9tX2lkIiwic3R5bGUiLCJlbW9qaSIsImRpc2FibGVkIiwic2t1SWQiLCJza3VfaWQiLCJpbnB1dCIsInZhbHVlIiwicmVxdWlyZWQiLCJtaW5MZW5ndGgiLCJtaW5fbGVuZ3RoIiwibWF4TGVuZ3RoIiwibWF4X2xlbmd0aCIsInNlbGVjdCIsInZhbHVlcyIsIl9wYXlsb2FkIiwibWluVmFsdWVzIiwibWluX3ZhbHVlcyIsIm1heFZhbHVlcyIsIm1heF92YWx1ZXMiLCJvcHRpb25zIiwib3B0aW9uIiwidW5kZWZpbmVkIiwiZGVmYXVsdCIsInJlc29sdmVkIiwiaW50ZXJhY3Rpb25EYXRhUmVzb2x2ZWQiLCJkZWZhdWx0VmFsdWVzIiwiZGVmYXVsdF92YWx1ZXMiLCJkZWZhdWx0VmFsdWUiLCJjaGFubmVsVHlwZXMiLCJjaGFubmVsX3R5cGVzIiwic2VjdGlvbiIsImFjY2Vzc29yeSIsInRodW1ibmFpbCIsIm1lZGlhR2FsbGVyeSIsIml0ZW1zIiwiaXRlbSIsImZpbGUiLCJuYW1lIiwic2l6ZSIsInRleHREaXNwbGF5IiwiY29udGVudCIsInNlcGFyYXRvciIsImRpdmlkZXIiLCJzcGFjaW5nIiwiZmlsZVVwbG9hZCIsImZpbGVUeXBlcyIsImZpbGVfdHlwZXMiLCJyYWRpb0dyb3VwIiwiY2hlY2tib3hHcm91cCIsImNoZWNrYm94Il0sIm1hcHBpbmdzIjoiQUFBQSxTQXFDRUEscUJBQXFCLFFBQ2hCLG9CQUFvQjtBQUczQixTQUFTQyxjQUFjLFFBQVEscUJBQXFCO0FBQ3BELFNBQVNDLGNBQWMsUUFBUSw4QkFBOEI7QUFHN0QsT0FBTyxTQUFTQyxt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
@@ -1,5 +1,18 @@
1
- import type { DiscordEmbed } from '@discordeno/types';
1
+ import type { DiscordEmbed, DiscordEmbedAuthor, DiscordEmbedFooter, DiscordEmbedImage, DiscordEmbedVideo } from '@discordeno/types';
2
2
  import type { Bot } from '../bot.js';
3
- import type { Embed } from './types.js';
4
- export declare function transformEmbed(bot: Bot, payload: DiscordEmbed): Embed;
3
+ export declare function transformEmbed(bot: Bot, payload: Partial<DiscordEmbed>, extra?: {
4
+ partial?: boolean;
5
+ }): any;
6
+ export declare function transformEmbedFooter(bot: Bot, payload: Partial<DiscordEmbedFooter>, extra?: {
7
+ partial?: boolean;
8
+ }): any;
9
+ export declare function transformEmbedImage(bot: Bot, payload: Partial<DiscordEmbedImage>, extra?: {
10
+ partial?: boolean;
11
+ }): any;
12
+ export declare function transformEmbedVideo(bot: Bot, payload: Partial<DiscordEmbedVideo>, extra?: {
13
+ partial?: boolean;
14
+ }): any;
15
+ export declare function transformEmbedAuthor(bot: Bot, payload: Partial<DiscordEmbedAuthor>, extra?: {
16
+ partial?: boolean;
17
+ }): any;
5
18
  //# sourceMappingURL=embed.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"embed.d.ts","sourceRoot":"","sources":["../../src/transformers/embed.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAExC,wBAAgB,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,YAAY,GAAG,KAAK,CAoDrE"}
1
+ {"version":3,"file":"embed.d.ts","sourceRoot":"","sources":["../../src/transformers/embed.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACpI,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAMrC,wBAAgB,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,YAAY,CAAC,EAAE,KAAK,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,OAqBrG;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,kBAAkB,CAAC,EAAE,KAAK,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,OAUjH;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,iBAAiB,CAAC,EAAE,KAAK,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,OAgB/G;AACD,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,iBAAiB,CAAC,EAAE,KAAK,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,OAgB/G;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,kBAAkB,CAAC,EAAE,KAAK,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,OAWjH"}