@jubbio/core 1.3.3 → 1.3.5

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 (131) hide show
  1. package/dist/Client.js +50 -10
  2. package/dist/rest/REST.d.ts +1 -0
  3. package/dist/rest/REST.js +1 -1
  4. package/dist/structures/Channel.d.ts +1 -1
  5. package/dist/structures/Channel.js +11 -4
  6. package/dist/structures/Guild.d.ts +1 -1
  7. package/dist/structures/Guild.js +7 -3
  8. package/dist/structures/Interaction.js +11 -3
  9. package/dist/structures/Message.d.ts +2 -0
  10. package/dist/structures/Message.js +13 -33
  11. package/package.json +4 -14
  12. package/dist/cjs/Client.d.ts +0 -157
  13. package/dist/cjs/Client.js +0 -640
  14. package/dist/cjs/builders/ActionRowBuilder.d.ts +0 -53
  15. package/dist/cjs/builders/ActionRowBuilder.js +0 -68
  16. package/dist/cjs/builders/ButtonBuilder.d.ts +0 -77
  17. package/dist/cjs/builders/ButtonBuilder.js +0 -96
  18. package/dist/cjs/builders/EmbedBuilder.d.ts +0 -157
  19. package/dist/cjs/builders/EmbedBuilder.js +0 -208
  20. package/dist/cjs/builders/ModalBuilder.d.ts +0 -122
  21. package/dist/cjs/builders/ModalBuilder.js +0 -162
  22. package/dist/cjs/builders/SelectMenuBuilder.d.ts +0 -123
  23. package/dist/cjs/builders/SelectMenuBuilder.js +0 -165
  24. package/dist/cjs/builders/SlashCommandBuilder.d.ts +0 -197
  25. package/dist/cjs/builders/SlashCommandBuilder.js +0 -324
  26. package/dist/cjs/builders/index.d.ts +0 -9
  27. package/dist/cjs/builders/index.js +0 -26
  28. package/dist/cjs/enums.d.ts +0 -191
  29. package/dist/cjs/enums.js +0 -211
  30. package/dist/cjs/index.d.ts +0 -25
  31. package/dist/cjs/index.js +0 -130
  32. package/dist/cjs/managers/BaseManager.d.ts +0 -69
  33. package/dist/cjs/managers/BaseManager.js +0 -106
  34. package/dist/cjs/managers/ChannelManager.d.ts +0 -95
  35. package/dist/cjs/managers/ChannelManager.js +0 -205
  36. package/dist/cjs/managers/GuildMemberManager.d.ts +0 -74
  37. package/dist/cjs/managers/GuildMemberManager.js +0 -157
  38. package/dist/cjs/managers/RoleManager.d.ts +0 -84
  39. package/dist/cjs/managers/RoleManager.js +0 -207
  40. package/dist/cjs/managers/index.d.ts +0 -7
  41. package/dist/cjs/managers/index.js +0 -24
  42. package/dist/cjs/rest/REST.d.ts +0 -527
  43. package/dist/cjs/rest/REST.js +0 -904
  44. package/dist/cjs/rest/index.d.ts +0 -1
  45. package/dist/cjs/rest/index.js +0 -18
  46. package/dist/cjs/sharding/ShardingManager.d.ts +0 -179
  47. package/dist/cjs/sharding/ShardingManager.js +0 -375
  48. package/dist/cjs/sharding/index.d.ts +0 -4
  49. package/dist/cjs/sharding/index.js +0 -21
  50. package/dist/cjs/structures/Channel.d.ts +0 -122
  51. package/dist/cjs/structures/Channel.js +0 -240
  52. package/dist/cjs/structures/Collection.d.ts +0 -53
  53. package/dist/cjs/structures/Collection.js +0 -115
  54. package/dist/cjs/structures/Guild.d.ts +0 -59
  55. package/dist/cjs/structures/Guild.js +0 -94
  56. package/dist/cjs/structures/GuildMember.d.ts +0 -174
  57. package/dist/cjs/structures/GuildMember.js +0 -311
  58. package/dist/cjs/structures/Interaction.d.ts +0 -245
  59. package/dist/cjs/structures/Interaction.js +0 -450
  60. package/dist/cjs/structures/Message.d.ts +0 -98
  61. package/dist/cjs/structures/Message.js +0 -195
  62. package/dist/cjs/structures/User.d.ts +0 -37
  63. package/dist/cjs/structures/User.js +0 -65
  64. package/dist/cjs/structures/index.d.ts +0 -7
  65. package/dist/cjs/structures/index.js +0 -25
  66. package/dist/cjs/structures.d.ts +0 -1
  67. package/dist/cjs/structures.js +0 -19
  68. package/dist/cjs/types.d.ts +0 -255
  69. package/dist/cjs/types.js +0 -3
  70. package/dist/cjs/utils/BitField.d.ts +0 -66
  71. package/dist/cjs/utils/BitField.js +0 -138
  72. package/dist/cjs/utils/Collection.d.ts +0 -116
  73. package/dist/cjs/utils/Collection.js +0 -265
  74. package/dist/cjs/utils/Collector.d.ts +0 -152
  75. package/dist/cjs/utils/Collector.js +0 -314
  76. package/dist/cjs/utils/DataResolver.d.ts +0 -61
  77. package/dist/cjs/utils/DataResolver.js +0 -146
  78. package/dist/cjs/utils/Formatters.d.ts +0 -145
  79. package/dist/cjs/utils/Formatters.js +0 -213
  80. package/dist/cjs/utils/IntentsBitField.d.ts +0 -85
  81. package/dist/cjs/utils/IntentsBitField.js +0 -99
  82. package/dist/cjs/utils/Partials.d.ts +0 -104
  83. package/dist/cjs/utils/Partials.js +0 -148
  84. package/dist/cjs/utils/PermissionsBitField.d.ts +0 -118
  85. package/dist/cjs/utils/PermissionsBitField.js +0 -145
  86. package/dist/cjs/utils/SnowflakeUtil.d.ts +0 -63
  87. package/dist/cjs/utils/SnowflakeUtil.js +0 -93
  88. package/dist/cjs/utils/Sweepers.d.ts +0 -119
  89. package/dist/cjs/utils/Sweepers.js +0 -249
  90. package/dist/cjs/utils/index.d.ts +0 -13
  91. package/dist/cjs/utils/index.js +0 -30
  92. package/dist/esm/Client.js +0 -634
  93. package/dist/esm/builders/ActionRowBuilder.js +0 -64
  94. package/dist/esm/builders/ButtonBuilder.js +0 -92
  95. package/dist/esm/builders/EmbedBuilder.js +0 -204
  96. package/dist/esm/builders/ModalBuilder.js +0 -157
  97. package/dist/esm/builders/SelectMenuBuilder.js +0 -161
  98. package/dist/esm/builders/SlashCommandBuilder.js +0 -311
  99. package/dist/esm/builders/index.js +0 -10
  100. package/dist/esm/enums.js +0 -208
  101. package/dist/esm/index.js +0 -34
  102. package/dist/esm/managers/BaseManager.js +0 -100
  103. package/dist/esm/managers/ChannelManager.js +0 -200
  104. package/dist/esm/managers/GuildMemberManager.js +0 -153
  105. package/dist/esm/managers/RoleManager.js +0 -203
  106. package/dist/esm/managers/index.js +0 -8
  107. package/dist/esm/rest/REST.js +0 -900
  108. package/dist/esm/rest/index.js +0 -2
  109. package/dist/esm/sharding/ShardingManager.js +0 -366
  110. package/dist/esm/sharding/index.js +0 -5
  111. package/dist/esm/structures/Channel.js +0 -232
  112. package/dist/esm/structures/Collection.js +0 -111
  113. package/dist/esm/structures/Guild.js +0 -90
  114. package/dist/esm/structures/GuildMember.js +0 -306
  115. package/dist/esm/structures/Interaction.js +0 -438
  116. package/dist/esm/structures/Message.js +0 -191
  117. package/dist/esm/structures/User.js +0 -61
  118. package/dist/esm/structures/index.js +0 -9
  119. package/dist/esm/structures.js +0 -3
  120. package/dist/esm/types.js +0 -2
  121. package/dist/esm/utils/BitField.js +0 -134
  122. package/dist/esm/utils/Collection.js +0 -261
  123. package/dist/esm/utils/Collector.js +0 -305
  124. package/dist/esm/utils/DataResolver.js +0 -142
  125. package/dist/esm/utils/Formatters.js +0 -191
  126. package/dist/esm/utils/IntentsBitField.js +0 -93
  127. package/dist/esm/utils/Partials.js +0 -137
  128. package/dist/esm/utils/PermissionsBitField.js +0 -141
  129. package/dist/esm/utils/SnowflakeUtil.js +0 -89
  130. package/dist/esm/utils/Sweepers.js +0 -245
  131. package/dist/esm/utils/index.js +0 -14
@@ -1,152 +0,0 @@
1
- /**
2
- * Collectors for awaiting messages, reactions, and interactions
3
- * API compatible with Discord.js Collectors
4
- */
5
- import { EventEmitter } from 'events';
6
- import { Collection } from './Collection';
7
- export interface CollectorOptions<T> {
8
- /** How long to run the collector for in milliseconds */
9
- time?: number;
10
- /** How long to wait for the next item in milliseconds */
11
- idle?: number;
12
- /** Maximum number of items to collect */
13
- max?: number;
14
- /** Maximum number of items to process */
15
- maxProcessed?: number;
16
- /** Filter function */
17
- filter?: (item: T, collected: Collection<string, T>) => boolean | Promise<boolean>;
18
- /** Whether to dispose of items when the collector ends */
19
- dispose?: boolean;
20
- }
21
- export interface CollectorResetTimerOptions {
22
- time?: number;
23
- idle?: number;
24
- }
25
- /**
26
- * Abstract base class for collectors
27
- */
28
- export declare abstract class Collector<K extends string, V> extends EventEmitter {
29
- /** The client that instantiated this collector */
30
- readonly client: any;
31
- /** The items collected */
32
- readonly collected: Collection<K, V>;
33
- /** Whether the collector has ended */
34
- ended: boolean;
35
- /** The reason the collector ended */
36
- endReason: string | null;
37
- /** Filter function */
38
- filter: (item: V, collected: Collection<K, V>) => boolean | Promise<boolean>;
39
- /** Collector options */
40
- options: CollectorOptions<V>;
41
- /** Number of items processed */
42
- private _processedCount;
43
- /** Timeout for time limit */
44
- private _timeout;
45
- /** Timeout for idle limit */
46
- private _idleTimeout;
47
- constructor(client: any, options?: CollectorOptions<V>);
48
- /**
49
- * Handle an item being collected
50
- */
51
- handleCollect(item: V): Promise<void>;
52
- /**
53
- * Handle an item being disposed
54
- */
55
- handleDispose(item: V): void;
56
- /**
57
- * Get the key for an item
58
- */
59
- abstract collect(item: V): K | null;
60
- /**
61
- * Get the key for disposing an item
62
- */
63
- abstract dispose(item: V): K | null;
64
- /**
65
- * Stop the collector
66
- */
67
- stop(reason?: string): void;
68
- /**
69
- * Reset the collector's timer
70
- */
71
- resetTimer(options?: CollectorResetTimerOptions): void;
72
- /**
73
- * Check the end conditions
74
- */
75
- checkEnd(): boolean;
76
- /**
77
- * Get the next item
78
- */
79
- get next(): Promise<V>;
80
- }
81
- /**
82
- * Message collector options
83
- */
84
- export interface MessageCollectorOptions extends CollectorOptions<any> {
85
- /** Channel to collect messages from */
86
- channelId?: string;
87
- }
88
- /**
89
- * Collector for messages
90
- */
91
- export declare class MessageCollector extends Collector<string, any> {
92
- readonly channelId: string;
93
- private readonly messageHandler;
94
- constructor(client: any, channelId: string, options?: MessageCollectorOptions);
95
- collect(message: any): string | null;
96
- dispose(message: any): string | null;
97
- }
98
- /**
99
- * Interaction collector options
100
- */
101
- export interface InteractionCollectorOptions extends CollectorOptions<any> {
102
- /** Channel to collect interactions from */
103
- channelId?: string;
104
- /** Guild to collect interactions from */
105
- guildId?: string;
106
- /** Message to collect interactions from */
107
- messageId?: string;
108
- /** Interaction types to collect */
109
- interactionType?: number | number[];
110
- /** Component types to collect */
111
- componentType?: number | number[];
112
- }
113
- /**
114
- * Collector for interactions (buttons, select menus, etc.)
115
- */
116
- export declare class InteractionCollector extends Collector<string, any> {
117
- readonly channelId?: string;
118
- readonly guildId?: string;
119
- readonly messageId?: string;
120
- readonly interactionType?: number[];
121
- readonly componentType?: number[];
122
- private readonly interactionHandler;
123
- constructor(client: any, options?: InteractionCollectorOptions);
124
- collect(interaction: any): string | null;
125
- dispose(interaction: any): string | null;
126
- }
127
- /**
128
- * Reaction collector options
129
- */
130
- export interface ReactionCollectorOptions extends CollectorOptions<any> {
131
- /** Message to collect reactions from */
132
- messageId: string;
133
- }
134
- /**
135
- * Collector for reactions
136
- */
137
- export declare class ReactionCollector extends Collector<string, any> {
138
- readonly messageId: string;
139
- private readonly reactionHandler;
140
- constructor(client: any, messageId: string, options: ReactionCollectorOptions);
141
- collect(reaction: any): string | null;
142
- dispose(reaction: any): string | null;
143
- }
144
- /**
145
- * Await messages helper
146
- */
147
- export declare function awaitMessages(client: any, channelId: string, options?: MessageCollectorOptions): Promise<Collection<string, any>>;
148
- /**
149
- * Await reactions helper
150
- */
151
- export declare function awaitReactions(client: any, messageId: string, options: ReactionCollectorOptions): Promise<Collection<string, any>>;
152
- export default Collector;
@@ -1,314 +0,0 @@
1
- "use strict";
2
- /**
3
- * Collectors for awaiting messages, reactions, and interactions
4
- * API compatible with Discord.js Collectors
5
- */
6
- Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.ReactionCollector = exports.InteractionCollector = exports.MessageCollector = exports.Collector = void 0;
8
- exports.awaitMessages = awaitMessages;
9
- exports.awaitReactions = awaitReactions;
10
- const events_1 = require("events");
11
- const Collection_1 = require("./Collection");
12
- /**
13
- * Abstract base class for collectors
14
- */
15
- class Collector extends events_1.EventEmitter {
16
- /** The client that instantiated this collector */
17
- client;
18
- /** The items collected */
19
- collected = new Collection_1.Collection();
20
- /** Whether the collector has ended */
21
- ended = false;
22
- /** The reason the collector ended */
23
- endReason = null;
24
- /** Filter function */
25
- filter;
26
- /** Collector options */
27
- options;
28
- /** Number of items processed */
29
- _processedCount = 0;
30
- /** Timeout for time limit */
31
- _timeout = null;
32
- /** Timeout for idle limit */
33
- _idleTimeout = null;
34
- constructor(client, options = {}) {
35
- super();
36
- this.client = client;
37
- this.options = options;
38
- this.filter = options.filter ?? (() => true);
39
- this.handleCollect = this.handleCollect.bind(this);
40
- this.handleDispose = this.handleDispose.bind(this);
41
- if (options.time) {
42
- this._timeout = setTimeout(() => this.stop('time'), options.time);
43
- }
44
- if (options.idle) {
45
- this._idleTimeout = setTimeout(() => this.stop('idle'), options.idle);
46
- }
47
- }
48
- /**
49
- * Handle an item being collected
50
- */
51
- async handleCollect(item) {
52
- if (this.ended)
53
- return;
54
- this._processedCount++;
55
- const filterResult = await this.filter(item, this.collected);
56
- if (!filterResult)
57
- return;
58
- const key = this.collect(item);
59
- if (key === null)
60
- return;
61
- this.collected.set(key, item);
62
- this.emit('collect', item);
63
- // Reset idle timer
64
- if (this._idleTimeout) {
65
- clearTimeout(this._idleTimeout);
66
- this._idleTimeout = setTimeout(() => this.stop('idle'), this.options.idle);
67
- }
68
- // Check limits
69
- if (this.options.max && this.collected.size >= this.options.max) {
70
- this.stop('limit');
71
- }
72
- if (this.options.maxProcessed && this._processedCount >= this.options.maxProcessed) {
73
- this.stop('processedLimit');
74
- }
75
- }
76
- /**
77
- * Handle an item being disposed
78
- */
79
- handleDispose(item) {
80
- if (!this.options.dispose)
81
- return;
82
- const key = this.dispose(item);
83
- if (key === null)
84
- return;
85
- if (this.collected.has(key)) {
86
- this.collected.delete(key);
87
- this.emit('dispose', item);
88
- }
89
- }
90
- /**
91
- * Stop the collector
92
- */
93
- stop(reason = 'user') {
94
- if (this.ended)
95
- return;
96
- this.ended = true;
97
- this.endReason = reason;
98
- if (this._timeout) {
99
- clearTimeout(this._timeout);
100
- this._timeout = null;
101
- }
102
- if (this._idleTimeout) {
103
- clearTimeout(this._idleTimeout);
104
- this._idleTimeout = null;
105
- }
106
- this.emit('end', this.collected, reason);
107
- }
108
- /**
109
- * Reset the collector's timer
110
- */
111
- resetTimer(options = {}) {
112
- if (this._timeout) {
113
- clearTimeout(this._timeout);
114
- this._timeout = null;
115
- }
116
- if (this._idleTimeout) {
117
- clearTimeout(this._idleTimeout);
118
- this._idleTimeout = null;
119
- }
120
- if (options.time ?? this.options.time) {
121
- this._timeout = setTimeout(() => this.stop('time'), options.time ?? this.options.time);
122
- }
123
- if (options.idle ?? this.options.idle) {
124
- this._idleTimeout = setTimeout(() => this.stop('idle'), options.idle ?? this.options.idle);
125
- }
126
- }
127
- /**
128
- * Check the end conditions
129
- */
130
- checkEnd() {
131
- const reason = this.endReason;
132
- if (reason) {
133
- this.stop(reason);
134
- return true;
135
- }
136
- return false;
137
- }
138
- /**
139
- * Get the next item
140
- */
141
- get next() {
142
- return new Promise((resolve, reject) => {
143
- if (this.ended) {
144
- reject(new Error('Collector has ended'));
145
- return;
146
- }
147
- const cleanup = () => {
148
- this.removeListener('collect', onCollect);
149
- this.removeListener('end', onEnd);
150
- };
151
- const onCollect = (item) => {
152
- cleanup();
153
- resolve(item);
154
- };
155
- const onEnd = () => {
156
- cleanup();
157
- reject(new Error('Collector ended'));
158
- };
159
- this.on('collect', onCollect);
160
- this.on('end', onEnd);
161
- });
162
- }
163
- }
164
- exports.Collector = Collector;
165
- /**
166
- * Collector for messages
167
- */
168
- class MessageCollector extends Collector {
169
- channelId;
170
- messageHandler;
171
- constructor(client, channelId, options = {}) {
172
- super(client, options);
173
- this.channelId = channelId;
174
- // Get bot's user ID to filter out bot's own messages
175
- const botUserId = client.user?.id;
176
- this.messageHandler = (message) => {
177
- if (message.channel_id === this.channelId || message.channelId === this.channelId) {
178
- // Automatically filter out bot's own messages
179
- const authorId = message.author?.id || message.author_id;
180
- if (botUserId && authorId === botUserId)
181
- return;
182
- // Also filter by application_id (bot messages have this)
183
- if (message.application_id || message.applicationId)
184
- return;
185
- this.handleCollect(message);
186
- }
187
- };
188
- client.on('messageCreate', this.messageHandler);
189
- this.once('end', () => {
190
- client.removeListener('messageCreate', this.messageHandler);
191
- });
192
- }
193
- collect(message) {
194
- return message.id ?? null;
195
- }
196
- dispose(message) {
197
- return message.id ?? null;
198
- }
199
- }
200
- exports.MessageCollector = MessageCollector;
201
- /**
202
- * Collector for interactions (buttons, select menus, etc.)
203
- */
204
- class InteractionCollector extends Collector {
205
- channelId;
206
- guildId;
207
- messageId;
208
- interactionType;
209
- componentType;
210
- interactionHandler;
211
- constructor(client, options = {}) {
212
- super(client, options);
213
- this.channelId = options.channelId;
214
- this.guildId = options.guildId;
215
- this.messageId = options.messageId;
216
- this.interactionType = options.interactionType
217
- ? Array.isArray(options.interactionType) ? options.interactionType : [options.interactionType]
218
- : undefined;
219
- this.componentType = options.componentType
220
- ? Array.isArray(options.componentType) ? options.componentType : [options.componentType]
221
- : undefined;
222
- this.interactionHandler = (interaction) => {
223
- // Filter by channel
224
- if (this.channelId && interaction.channelId !== this.channelId)
225
- return;
226
- // Filter by guild
227
- if (this.guildId && interaction.guildId !== this.guildId)
228
- return;
229
- // Filter by message
230
- if (this.messageId && interaction.message?.id !== this.messageId)
231
- return;
232
- // Filter by interaction type
233
- if (this.interactionType && !this.interactionType.includes(interaction.type))
234
- return;
235
- // Filter by component type
236
- if (this.componentType && interaction.componentType && !this.componentType.includes(interaction.componentType))
237
- return;
238
- this.handleCollect(interaction);
239
- };
240
- client.on('interactionCreate', this.interactionHandler);
241
- this.once('end', () => {
242
- client.removeListener('interactionCreate', this.interactionHandler);
243
- });
244
- }
245
- collect(interaction) {
246
- return interaction.id ?? null;
247
- }
248
- dispose(interaction) {
249
- return interaction.id ?? null;
250
- }
251
- }
252
- exports.InteractionCollector = InteractionCollector;
253
- /**
254
- * Collector for reactions
255
- */
256
- class ReactionCollector extends Collector {
257
- messageId;
258
- reactionHandler;
259
- constructor(client, messageId, options) {
260
- super(client, options);
261
- this.messageId = messageId;
262
- this.reactionHandler = (reaction) => {
263
- if (reaction.message_id === this.messageId || reaction.messageId === this.messageId) {
264
- this.handleCollect(reaction);
265
- }
266
- };
267
- client.on('messageReactionAdd', this.reactionHandler);
268
- this.once('end', () => {
269
- client.removeListener('messageReactionAdd', this.reactionHandler);
270
- });
271
- }
272
- collect(reaction) {
273
- // Key is emoji identifier
274
- return reaction.emoji?.id ?? reaction.emoji?.name ?? null;
275
- }
276
- dispose(reaction) {
277
- return reaction.emoji?.id ?? reaction.emoji?.name ?? null;
278
- }
279
- }
280
- exports.ReactionCollector = ReactionCollector;
281
- /**
282
- * Await messages helper
283
- */
284
- function awaitMessages(client, channelId, options = {}) {
285
- return new Promise((resolve, reject) => {
286
- const collector = new MessageCollector(client, channelId, options);
287
- collector.once('end', (collected, reason) => {
288
- if (options.max && collected.size < options.max) {
289
- reject(new Error(`Collector ended with reason: ${reason}`));
290
- }
291
- else {
292
- resolve(collected);
293
- }
294
- });
295
- });
296
- }
297
- /**
298
- * Await reactions helper
299
- */
300
- function awaitReactions(client, messageId, options) {
301
- return new Promise((resolve, reject) => {
302
- const collector = new ReactionCollector(client, messageId, options);
303
- collector.once('end', (collected, reason) => {
304
- if (options.max && collected.size < options.max) {
305
- reject(new Error(`Collector ended with reason: ${reason}`));
306
- }
307
- else {
308
- resolve(collected);
309
- }
310
- });
311
- });
312
- }
313
- exports.default = Collector;
314
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29sbGVjdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3V0aWxzL0NvbGxlY3Rvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztHQUdHOzs7QUE2WEgsc0NBZ0JDO0FBS0Qsd0NBZ0JDO0FBaGFELG1DQUFzQztBQUN0Qyw2Q0FBMEM7QUFzQjFDOztHQUVHO0FBQ0gsTUFBc0IsU0FBK0IsU0FBUSxxQkFBWTtJQUN2RSxrREFBa0Q7SUFDbEMsTUFBTSxDQUFNO0lBRTVCLDBCQUEwQjtJQUNWLFNBQVMsR0FBcUIsSUFBSSx1QkFBVSxFQUFFLENBQUM7SUFFL0Qsc0NBQXNDO0lBQy9CLEtBQUssR0FBRyxLQUFLLENBQUM7SUFFckIscUNBQXFDO0lBQzlCLFNBQVMsR0FBa0IsSUFBSSxDQUFDO0lBRXZDLHNCQUFzQjtJQUNmLE1BQU0sQ0FBdUU7SUFFcEYsd0JBQXdCO0lBQ2pCLE9BQU8sQ0FBc0I7SUFFcEMsZ0NBQWdDO0lBQ3hCLGVBQWUsR0FBRyxDQUFDLENBQUM7SUFFNUIsNkJBQTZCO0lBQ3JCLFFBQVEsR0FBMEIsSUFBSSxDQUFDO0lBRS9DLDZCQUE2QjtJQUNyQixZQUFZLEdBQTBCLElBQUksQ0FBQztJQUVuRCxZQUFZLE1BQVcsRUFBRSxVQUErQixFQUFFO1FBQ3hELEtBQUssRUFBRSxDQUFDO1FBQ1IsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDckIsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdkIsSUFBSSxDQUFDLE1BQU0sR0FBSSxPQUFPLENBQUMsTUFBYyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFdEQsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuRCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRW5ELElBQUksT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BFLENBQUM7UUFDRCxJQUFJLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNqQixJQUFJLENBQUMsWUFBWSxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4RSxDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFPO1FBQ3pCLElBQUksSUFBSSxDQUFDLEtBQUs7WUFBRSxPQUFPO1FBRXZCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUV2QixNQUFNLFlBQVksR0FBRyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM3RCxJQUFJLENBQUMsWUFBWTtZQUFFLE9BQU87UUFFMUIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMvQixJQUFJLEdBQUcsS0FBSyxJQUFJO1lBQUUsT0FBTztRQUV6QixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDOUIsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFM0IsbUJBQW1CO1FBQ25CLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3RCLFlBQVksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDaEMsSUFBSSxDQUFDLFlBQVksR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUssQ0FBQyxDQUFDO1FBQzlFLENBQUM7UUFFRCxlQUFlO1FBQ2YsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ2hFLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDckIsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLGVBQWUsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ25GLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUM5QixDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0gsYUFBYSxDQUFDLElBQU87UUFDbkIsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTztZQUFFLE9BQU87UUFFbEMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMvQixJQUFJLEdBQUcsS0FBSyxJQUFJO1lBQUUsT0FBTztRQUV6QixJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDNUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDM0IsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDN0IsQ0FBQztJQUNILENBQUM7SUFZRDs7T0FFRztJQUNILElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTTtRQUNsQixJQUFJLElBQUksQ0FBQyxLQUFLO1lBQUUsT0FBTztRQUV2QixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztRQUNsQixJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQztRQUV4QixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNsQixZQUFZLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzVCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN0QixZQUFZLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ2hDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBQzNCLENBQUM7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFRDs7T0FFRztJQUNILFVBQVUsQ0FBQyxVQUFzQyxFQUFFO1FBQ2pELElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2xCLFlBQVksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDNUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDdkIsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3RCLFlBQVksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDaEMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7UUFDM0IsQ0FBQztRQUVELElBQUksT0FBTyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3RDLElBQUksQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsT0FBTyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pGLENBQUM7UUFDRCxJQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUN0QyxJQUFJLENBQUMsWUFBWSxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLE9BQU8sQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM3RixDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0gsUUFBUTtRQUNOLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDOUIsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUNYLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDbEIsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFJLElBQUk7UUFDTixPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ3JDLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNmLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUM7Z0JBQ3pDLE9BQU87WUFDVCxDQUFDO1lBRUQsTUFBTSxPQUFPLEdBQUcsR0FBRyxFQUFFO2dCQUNuQixJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztnQkFDMUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDcEMsQ0FBQyxDQUFDO1lBRUYsTUFBTSxTQUFTLEdBQUcsQ0FBQyxJQUFPLEVBQUUsRUFBRTtnQkFDNUIsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2hCLENBQUMsQ0FBQztZQUVGLE1BQU0sS0FBSyxHQUFHLEdBQUcsRUFBRTtnQkFDakIsT0FBTyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQztZQUN2QyxDQUFDLENBQUM7WUFFRixJQUFJLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUM5QixJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN4QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQXpMRCw4QkF5TEM7QUFVRDs7R0FFRztBQUNILE1BQWEsZ0JBQWlCLFNBQVEsU0FBc0I7SUFDMUMsU0FBUyxDQUFTO0lBQ2pCLGNBQWMsQ0FBeUI7SUFFeEQsWUFBWSxNQUFXLEVBQUUsU0FBaUIsRUFBRSxVQUFtQyxFQUFFO1FBQy9FLEtBQUssQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDdkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7UUFFM0IscURBQXFEO1FBQ3JELE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO1FBRWxDLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxPQUFZLEVBQUUsRUFBRTtZQUNyQyxJQUFJLE9BQU8sQ0FBQyxVQUFVLEtBQUssSUFBSSxDQUFDLFNBQVMsSUFBSSxPQUFPLENBQUMsU0FBUyxLQUFLLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDbEYsOENBQThDO2dCQUM5QyxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDO2dCQUN6RCxJQUFJLFNBQVMsSUFBSSxRQUFRLEtBQUssU0FBUztvQkFBRSxPQUFPO2dCQUVoRCx5REFBeUQ7Z0JBQ3pELElBQUksT0FBTyxDQUFDLGNBQWMsSUFBSSxPQUFPLENBQUMsYUFBYTtvQkFBRSxPQUFPO2dCQUU1RCxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzlCLENBQUM7UUFDSCxDQUFDLENBQUM7UUFFRixNQUFNLENBQUMsRUFBRSxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFFaEQsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFO1lBQ3BCLE1BQU0sQ0FBQyxjQUFjLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUM5RCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxPQUFPLENBQUMsT0FBWTtRQUNsQixPQUFPLE9BQU8sQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDO0lBQzVCLENBQUM7SUFFRCxPQUFPLENBQUMsT0FBWTtRQUNsQixPQUFPLE9BQU8sQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDO0lBQzVCLENBQUM7Q0FDRjtBQXRDRCw0Q0FzQ0M7QUFrQkQ7O0dBRUc7QUFDSCxNQUFhLG9CQUFxQixTQUFRLFNBQXNCO0lBQzlDLFNBQVMsQ0FBVTtJQUNuQixPQUFPLENBQVU7SUFDakIsU0FBUyxDQUFVO0lBQ25CLGVBQWUsQ0FBWTtJQUMzQixhQUFhLENBQVk7SUFDeEIsa0JBQWtCLENBQTZCO0lBRWhFLFlBQVksTUFBVyxFQUFFLFVBQXVDLEVBQUU7UUFDaEUsS0FBSyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUN2QixJQUFJLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUM7UUFDbkMsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDO1FBQy9CLElBQUksQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQztRQUNuQyxJQUFJLENBQUMsZUFBZSxHQUFHLE9BQU8sQ0FBQyxlQUFlO1lBQzVDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDO1lBQzlGLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDZCxJQUFJLENBQUMsYUFBYSxHQUFHLE9BQU8sQ0FBQyxhQUFhO1lBQ3hDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDO1lBQ3hGLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFFZCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsQ0FBQyxXQUFnQixFQUFFLEVBQUU7WUFDN0Msb0JBQW9CO1lBQ3BCLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxXQUFXLENBQUMsU0FBUyxLQUFLLElBQUksQ0FBQyxTQUFTO2dCQUFFLE9BQU87WUFDdkUsa0JBQWtCO1lBQ2xCLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxXQUFXLENBQUMsT0FBTyxLQUFLLElBQUksQ0FBQyxPQUFPO2dCQUFFLE9BQU87WUFDakUsb0JBQW9CO1lBQ3BCLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxXQUFXLENBQUMsT0FBTyxFQUFFLEVBQUUsS0FBSyxJQUFJLENBQUMsU0FBUztnQkFBRSxPQUFPO1lBQ3pFLDZCQUE2QjtZQUM3QixJQUFJLElBQUksQ0FBQyxlQUFlLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDO2dCQUFFLE9BQU87WUFDckYsMkJBQTJCO1lBQzNCLElBQUksSUFBSSxDQUFDLGFBQWEsSUFBSSxXQUFXLENBQUMsYUFBYSxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQztnQkFBRSxPQUFPO1lBRXZILElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDbEMsQ0FBQyxDQUFDO1FBRUYsTUFBTSxDQUFDLEVBQUUsQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUV4RCxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUU7WUFDcEIsTUFBTSxDQUFDLGNBQWMsQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUN0RSxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxPQUFPLENBQUMsV0FBZ0I7UUFDdEIsT0FBTyxXQUFXLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQztJQUNoQyxDQUFDO0lBRUQsT0FBTyxDQUFDLFdBQWdCO1FBQ3RCLE9BQU8sV0FBVyxDQUFDLEVBQUUsSUFBSSxJQUFJLENBQUM7SUFDaEMsQ0FBQztDQUNGO0FBakRELG9EQWlEQztBQVVEOztHQUVHO0FBQ0gsTUFBYSxpQkFBa0IsU0FBUSxTQUFzQjtJQUMzQyxTQUFTLENBQVM7SUFDakIsZUFBZSxDQUEwQjtJQUUxRCxZQUFZLE1BQVcsRUFBRSxTQUFpQixFQUFFLE9BQWlDO1FBQzNFLEtBQUssQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDdkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7UUFFM0IsSUFBSSxDQUFDLGVBQWUsR0FBRyxDQUFDLFFBQWEsRUFBRSxFQUFFO1lBQ3ZDLElBQUksUUFBUSxDQUFDLFVBQVUsS0FBSyxJQUFJLENBQUMsU0FBUyxJQUFJLFFBQVEsQ0FBQyxTQUFTLEtBQUssSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUNwRixJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQy9CLENBQUM7UUFDSCxDQUFDLENBQUM7UUFFRixNQUFNLENBQUMsRUFBRSxDQUFDLG9CQUFvQixFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUV0RCxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUU7WUFDcEIsTUFBTSxDQUFDLGNBQWMsQ0FBQyxvQkFBb0IsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDcEUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsT0FBTyxDQUFDLFFBQWE7UUFDbkIsMEJBQTBCO1FBQzFCLE9BQU8sUUFBUSxDQUFDLEtBQUssRUFBRSxFQUFFLElBQUksUUFBUSxDQUFDLEtBQUssRUFBRSxJQUFJLElBQUksSUFBSSxDQUFDO0lBQzVELENBQUM7SUFFRCxPQUFPLENBQUMsUUFBYTtRQUNuQixPQUFPLFFBQVEsQ0FBQyxLQUFLLEVBQUUsRUFBRSxJQUFJLFFBQVEsQ0FBQyxLQUFLLEVBQUUsSUFBSSxJQUFJLElBQUksQ0FBQztJQUM1RCxDQUFDO0NBQ0Y7QUE3QkQsOENBNkJDO0FBRUQ7O0dBRUc7QUFDSCxTQUFnQixhQUFhLENBQzNCLE1BQVcsRUFDWCxTQUFpQixFQUNqQixVQUFtQyxFQUFFO0lBRXJDLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFDckMsTUFBTSxTQUFTLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBRW5FLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQzFDLElBQUksT0FBTyxDQUFDLEdBQUcsSUFBSSxTQUFTLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDaEQsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLGdDQUFnQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDOUQsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNyQixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRDs7R0FFRztBQUNILFNBQWdCLGNBQWMsQ0FDNUIsTUFBVyxFQUNYLFNBQWlCLEVBQ2pCLE9BQWlDO0lBRWpDLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFDckMsTUFBTSxTQUFTLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBRXBFLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQzFDLElBQUksT0FBTyxDQUFDLEdBQUcsSUFBSSxTQUFTLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDaEQsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLGdDQUFnQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDOUQsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNyQixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxrQkFBZSxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvbGxlY3RvcnMgZm9yIGF3YWl0aW5nIG1lc3NhZ2VzLCByZWFjdGlvbnMsIGFuZCBpbnRlcmFjdGlvbnNcbiAqIEFQSSBjb21wYXRpYmxlIHdpdGggRGlzY29yZC5qcyBDb2xsZWN0b3JzXG4gKi9cblxuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnZXZlbnRzJztcbmltcG9ydCB7IENvbGxlY3Rpb24gfSBmcm9tICcuL0NvbGxlY3Rpb24nO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbGxlY3Rvck9wdGlvbnM8VD4ge1xuICAvKiogSG93IGxvbmcgdG8gcnVuIHRoZSBjb2xsZWN0b3IgZm9yIGluIG1pbGxpc2Vjb25kcyAqL1xuICB0aW1lPzogbnVtYmVyO1xuICAvKiogSG93IGxvbmcgdG8gd2FpdCBmb3IgdGhlIG5leHQgaXRlbSBpbiBtaWxsaXNlY29uZHMgKi9cbiAgaWRsZT86IG51bWJlcjtcbiAgLyoqIE1heGltdW0gbnVtYmVyIG9mIGl0ZW1zIHRvIGNvbGxlY3QgKi9cbiAgbWF4PzogbnVtYmVyO1xuICAvKiogTWF4aW11bSBudW1iZXIgb2YgaXRlbXMgdG8gcHJvY2VzcyAqL1xuICBtYXhQcm9jZXNzZWQ/OiBudW1iZXI7XG4gIC8qKiBGaWx0ZXIgZnVuY3Rpb24gKi9cbiAgZmlsdGVyPzogKGl0ZW06IFQsIGNvbGxlY3RlZDogQ29sbGVjdGlvbjxzdHJpbmcsIFQ+KSA9PiBib29sZWFuIHwgUHJvbWlzZTxib29sZWFuPjtcbiAgLyoqIFdoZXRoZXIgdG8gZGlzcG9zZSBvZiBpdGVtcyB3aGVuIHRoZSBjb2xsZWN0b3IgZW5kcyAqL1xuICBkaXNwb3NlPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb2xsZWN0b3JSZXNldFRpbWVyT3B0aW9ucyB7XG4gIHRpbWU/OiBudW1iZXI7XG4gIGlkbGU/OiBudW1iZXI7XG59XG5cbi8qKlxuICogQWJzdHJhY3QgYmFzZSBjbGFzcyBmb3IgY29sbGVjdG9yc1xuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQ29sbGVjdG9yPEsgZXh0ZW5kcyBzdHJpbmcsIFY+IGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcbiAgLyoqIFRoZSBjbGllbnQgdGhhdCBpbnN0YW50aWF0ZWQgdGhpcyBjb2xsZWN0b3IgKi9cbiAgcHVibGljIHJlYWRvbmx5IGNsaWVudDogYW55O1xuICBcbiAgLyoqIFRoZSBpdGVtcyBjb2xsZWN0ZWQgKi9cbiAgcHVibGljIHJlYWRvbmx5IGNvbGxlY3RlZDogQ29sbGVjdGlvbjxLLCBWPiA9IG5ldyBDb2xsZWN0aW9uKCk7XG4gIFxuICAvKiogV2hldGhlciB0aGUgY29sbGVjdG9yIGhhcyBlbmRlZCAqL1xuICBwdWJsaWMgZW5kZWQgPSBmYWxzZTtcbiAgXG4gIC8qKiBUaGUgcmVhc29uIHRoZSBjb2xsZWN0b3IgZW5kZWQgKi9cbiAgcHVibGljIGVuZFJlYXNvbjogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIFxuICAvKiogRmlsdGVyIGZ1bmN0aW9uICovXG4gIHB1YmxpYyBmaWx0ZXI6IChpdGVtOiBWLCBjb2xsZWN0ZWQ6IENvbGxlY3Rpb248SywgVj4pID0+IGJvb2xlYW4gfCBQcm9taXNlPGJvb2xlYW4+O1xuICBcbiAgLyoqIENvbGxlY3RvciBvcHRpb25zICovXG4gIHB1YmxpYyBvcHRpb25zOiBDb2xsZWN0b3JPcHRpb25zPFY+O1xuICBcbiAgLyoqIE51bWJlciBvZiBpdGVtcyBwcm9jZXNzZWQgKi9cbiAgcHJpdmF0ZSBfcHJvY2Vzc2VkQ291bnQgPSAwO1xuICBcbiAgLyoqIFRpbWVvdXQgZm9yIHRpbWUgbGltaXQgKi9cbiAgcHJpdmF0ZSBfdGltZW91dDogTm9kZUpTLlRpbWVvdXQgfCBudWxsID0gbnVsbDtcbiAgXG4gIC8qKiBUaW1lb3V0IGZvciBpZGxlIGxpbWl0ICovXG4gIHByaXZhdGUgX2lkbGVUaW1lb3V0OiBOb2RlSlMuVGltZW91dCB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKGNsaWVudDogYW55LCBvcHRpb25zOiBDb2xsZWN0b3JPcHRpb25zPFY+ID0ge30pIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuY2xpZW50ID0gY2xpZW50O1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgdGhpcy5maWx0ZXIgPSAob3B0aW9ucy5maWx0ZXIgYXMgYW55KSA/PyAoKCkgPT4gdHJ1ZSk7XG4gICAgXG4gICAgdGhpcy5oYW5kbGVDb2xsZWN0ID0gdGhpcy5oYW5kbGVDb2xsZWN0LmJpbmQodGhpcyk7XG4gICAgdGhpcy5oYW5kbGVEaXNwb3NlID0gdGhpcy5oYW5kbGVEaXNwb3NlLmJpbmQodGhpcyk7XG4gICAgXG4gICAgaWYgKG9wdGlvbnMudGltZSkge1xuICAgICAgdGhpcy5fdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gdGhpcy5zdG9wKCd0aW1lJyksIG9wdGlvbnMudGltZSk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLmlkbGUpIHtcbiAgICAgIHRoaXMuX2lkbGVUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB0aGlzLnN0b3AoJ2lkbGUnKSwgb3B0aW9ucy5pZGxlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIGFuIGl0ZW0gYmVpbmcgY29sbGVjdGVkXG4gICAqL1xuICBhc3luYyBoYW5kbGVDb2xsZWN0KGl0ZW06IFYpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5lbmRlZCkgcmV0dXJuO1xuICAgIFxuICAgIHRoaXMuX3Byb2Nlc3NlZENvdW50Kys7XG4gICAgXG4gICAgY29uc3QgZmlsdGVyUmVzdWx0ID0gYXdhaXQgdGhpcy5maWx0ZXIoaXRlbSwgdGhpcy5jb2xsZWN0ZWQpO1xuICAgIGlmICghZmlsdGVyUmVzdWx0KSByZXR1cm47XG4gICAgXG4gICAgY29uc3Qga2V5ID0gdGhpcy5jb2xsZWN0KGl0ZW0pO1xuICAgIGlmIChrZXkgPT09IG51bGwpIHJldHVybjtcbiAgICBcbiAgICB0aGlzLmNvbGxlY3RlZC5zZXQoa2V5LCBpdGVtKTtcbiAgICB0aGlzLmVtaXQoJ2NvbGxlY3QnLCBpdGVtKTtcbiAgICBcbiAgICAvLyBSZXNldCBpZGxlIHRpbWVyXG4gICAgaWYgKHRoaXMuX2lkbGVUaW1lb3V0KSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5faWRsZVRpbWVvdXQpO1xuICAgICAgdGhpcy5faWRsZVRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHRoaXMuc3RvcCgnaWRsZScpLCB0aGlzLm9wdGlvbnMuaWRsZSEpO1xuICAgIH1cbiAgICBcbiAgICAvLyBDaGVjayBsaW1pdHNcbiAgICBpZiAodGhpcy5vcHRpb25zLm1heCAmJiB0aGlzLmNvbGxlY3RlZC5zaXplID49IHRoaXMub3B0aW9ucy5tYXgpIHtcbiAgICAgIHRoaXMuc3RvcCgnbGltaXQnKTtcbiAgICB9XG4gICAgaWYgKHRoaXMub3B0aW9ucy5tYXhQcm9jZXNzZWQgJiYgdGhpcy5fcHJvY2Vzc2VkQ291bnQgPj0gdGhpcy5vcHRpb25zLm1heFByb2Nlc3NlZCkge1xuICAgICAgdGhpcy5zdG9wKCdwcm9jZXNzZWRMaW1pdCcpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgYW4gaXRlbSBiZWluZyBkaXNwb3NlZFxuICAgKi9cbiAgaGFuZGxlRGlzcG9zZShpdGVtOiBWKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLm9wdGlvbnMuZGlzcG9zZSkgcmV0dXJuO1xuICAgIFxuICAgIGNvbnN0IGtleSA9IHRoaXMuZGlzcG9zZShpdGVtKTtcbiAgICBpZiAoa2V5ID09PSBudWxsKSByZXR1cm47XG4gICAgXG4gICAgaWYgKHRoaXMuY29sbGVjdGVkLmhhcyhrZXkpKSB7XG4gICAgICB0aGlzLmNvbGxlY3RlZC5kZWxldGUoa2V5KTtcbiAgICAgIHRoaXMuZW1pdCgnZGlzcG9zZScsIGl0ZW0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGtleSBmb3IgYW4gaXRlbVxuICAgKi9cbiAgYWJzdHJhY3QgY29sbGVjdChpdGVtOiBWKTogSyB8IG51bGw7XG5cbiAgLyoqXG4gICAqIEdldCB0aGUga2V5IGZvciBkaXNwb3NpbmcgYW4gaXRlbVxuICAgKi9cbiAgYWJzdHJhY3QgZGlzcG9zZShpdGVtOiBWKTogSyB8IG51bGw7XG5cbiAgLyoqXG4gICAqIFN0b3AgdGhlIGNvbGxlY3RvclxuICAgKi9cbiAgc3RvcChyZWFzb24gPSAndXNlcicpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5lbmRlZCkgcmV0dXJuO1xuICAgIFxuICAgIHRoaXMuZW5kZWQgPSB0cnVlO1xuICAgIHRoaXMuZW5kUmVhc29uID0gcmVhc29uO1xuICAgIFxuICAgIGlmICh0aGlzLl90aW1lb3V0KSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5fdGltZW91dCk7XG4gICAgICB0aGlzLl90aW1lb3V0ID0gbnVsbDtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2lkbGVUaW1lb3V0KSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5faWRsZVRpbWVvdXQpO1xuICAgICAgdGhpcy5faWRsZVRpbWVvdXQgPSBudWxsO1xuICAgIH1cbiAgICBcbiAgICB0aGlzLmVtaXQoJ2VuZCcsIHRoaXMuY29sbGVjdGVkLCByZWFzb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0IHRoZSBjb2xsZWN0b3IncyB0aW1lclxuICAgKi9cbiAgcmVzZXRUaW1lcihvcHRpb25zOiBDb2xsZWN0b3JSZXNldFRpbWVyT3B0aW9ucyA9IHt9KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3RpbWVvdXQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0KTtcbiAgICAgIHRoaXMuX3RpbWVvdXQgPSBudWxsO1xuICAgIH1cbiAgICBpZiAodGhpcy5faWRsZVRpbWVvdXQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9pZGxlVGltZW91dCk7XG4gICAgICB0aGlzLl9pZGxlVGltZW91dCA9IG51bGw7XG4gICAgfVxuICAgIFxuICAgIGlmIChvcHRpb25zLnRpbWUgPz8gdGhpcy5vcHRpb25zLnRpbWUpIHtcbiAgICAgIHRoaXMuX3RpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHRoaXMuc3RvcCgndGltZScpLCBvcHRpb25zLnRpbWUgPz8gdGhpcy5vcHRpb25zLnRpbWUpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5pZGxlID8/IHRoaXMub3B0aW9ucy5pZGxlKSB7XG4gICAgICB0aGlzLl9pZGxlVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gdGhpcy5zdG9wKCdpZGxlJyksIG9wdGlvbnMuaWRsZSA/PyB0aGlzLm9wdGlvbnMuaWRsZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHRoZSBlbmQgY29uZGl0aW9uc1xuICAgKi9cbiAgY2hlY2tFbmQoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgcmVhc29uID0gdGhpcy5lbmRSZWFzb247XG4gICAgaWYgKHJlYXNvbikge1xuICAgICAgdGhpcy5zdG9wKHJlYXNvbik7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbmV4dCBpdGVtXG4gICAqL1xuICBnZXQgbmV4dCgpOiBQcm9taXNlPFY+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaWYgKHRoaXMuZW5kZWQpIHtcbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignQ29sbGVjdG9yIGhhcyBlbmRlZCcpKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgXG4gICAgICBjb25zdCBjbGVhbnVwID0gKCkgPT4ge1xuICAgICAgICB0aGlzLnJlbW92ZUxpc3RlbmVyKCdjb2xsZWN0Jywgb25Db2xsZWN0KTtcbiAgICAgICAgdGhpcy5yZW1vdmVMaXN0ZW5lcignZW5kJywgb25FbmQpO1xuICAgICAgfTtcbiAgICAgIFxuICAgICAgY29uc3Qgb25Db2xsZWN0ID0gKGl0ZW06IFYpID0+IHtcbiAgICAgICAgY2xlYW51cCgpO1xuICAgICAgICByZXNvbHZlKGl0ZW0pO1xuICAgICAgfTtcbiAgICAgIFxuICAgICAgY29uc3Qgb25FbmQgPSAoKSA9PiB7XG4gICAgICAgIGNsZWFudXAoKTtcbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignQ29sbGVjdG9yIGVuZGVkJykpO1xuICAgICAgfTtcbiAgICAgIFxuICAgICAgdGhpcy5vbignY29sbGVjdCcsIG9uQ29sbGVjdCk7XG4gICAgICB0aGlzLm9uKCdlbmQnLCBvbkVuZCk7XG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBNZXNzYWdlIGNvbGxlY3RvciBvcHRpb25zXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWVzc2FnZUNvbGxlY3Rvck9wdGlvbnMgZXh0ZW5kcyBDb2xsZWN0b3JPcHRpb25zPGFueT4ge1xuICAvKiogQ2hhbm5lbCB0byBjb2xsZWN0IG1lc3NhZ2VzIGZyb20gKi9cbiAgY2hhbm5lbElkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIENvbGxlY3RvciBmb3IgbWVzc2FnZXNcbiAqL1xuZXhwb3J0IGNsYXNzIE1lc3NhZ2VDb2xsZWN0b3IgZXh0ZW5kcyBDb2xsZWN0b3I8c3RyaW5nLCBhbnk+IHtcbiAgcHVibGljIHJlYWRvbmx5IGNoYW5uZWxJZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IG1lc3NhZ2VIYW5kbGVyOiAobWVzc2FnZTogYW55KSA9PiB2b2lkO1xuXG4gIGNvbnN0cnVjdG9yKGNsaWVudDogYW55LCBjaGFubmVsSWQ6IHN0cmluZywgb3B0aW9uczogTWVzc2FnZUNvbGxlY3Rvck9wdGlvbnMgPSB7fSkge1xuICAgIHN1cGVyKGNsaWVudCwgb3B0aW9ucyk7XG4gICAgdGhpcy5jaGFubmVsSWQgPSBjaGFubmVsSWQ7XG4gICAgXG4gICAgLy8gR2V0IGJvdCdzIHVzZXIgSUQgdG8gZmlsdGVyIG91dCBib3QncyBvd24gbWVzc2FnZXNcbiAgICBjb25zdCBib3RVc2VySWQgPSBjbGllbnQudXNlcj8uaWQ7XG4gICAgXG4gICAgdGhpcy5tZXNzYWdlSGFuZGxlciA9IChtZXNzYWdlOiBhbnkpID0+IHtcbiAgICAgIGlmIChtZXNzYWdlLmNoYW5uZWxfaWQgPT09IHRoaXMuY2hhbm5lbElkIHx8IG1lc3NhZ2UuY2hhbm5lbElkID09PSB0aGlzLmNoYW5uZWxJZCkge1xuICAgICAgICAvLyBBdXRvbWF0aWNhbGx5IGZpbHRlciBvdXQgYm90J3Mgb3duIG1lc3NhZ2VzXG4gICAgICAgIGNvbnN0IGF1dGhvcklkID0gbWVzc2FnZS5hdXRob3I/LmlkIHx8IG1lc3NhZ2UuYXV0aG9yX2lkO1xuICAgICAgICBpZiAoYm90VXNlcklkICYmIGF1dGhvcklkID09PSBib3RVc2VySWQpIHJldHVybjtcbiAgICAgICAgXG4gICAgICAgIC8vIEFsc28gZmlsdGVyIGJ5IGFwcGxpY2F0aW9uX2lkIChib3QgbWVzc2FnZXMgaGF2ZSB0aGlzKVxuICAgICAgICBpZiAobWVzc2FnZS5hcHBsaWNhdGlvbl9pZCB8fCBtZXNzYWdlLmFwcGxpY2F0aW9uSWQpIHJldHVybjtcbiAgICAgICAgXG4gICAgICAgIHRoaXMuaGFuZGxlQ29sbGVjdChtZXNzYWdlKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIFxuICAgIGNsaWVudC5vbignbWVzc2FnZUNyZWF0ZScsIHRoaXMubWVzc2FnZUhhbmRsZXIpO1xuICAgIFxuICAgIHRoaXMub25jZSgnZW5kJywgKCkgPT4ge1xuICAgICAgY2xpZW50LnJlbW92ZUxpc3RlbmVyKCdtZXNzYWdlQ3JlYXRlJywgdGhpcy5tZXNzYWdlSGFuZGxlcik7XG4gICAgfSk7XG4gIH1cblxuICBjb2xsZWN0KG1lc3NhZ2U6IGFueSk6IHN0cmluZyB8IG51bGwge1xuICAgIHJldHVybiBtZXNzYWdlLmlkID8/IG51bGw7XG4gIH1cblxuICBkaXNwb3NlKG1lc3NhZ2U6IGFueSk6IHN0cmluZyB8IG51bGwge1xuICAgIHJldHVybiBtZXNzYWdlLmlkID8/IG51bGw7XG4gIH1cbn1cblxuLyoqXG4gKiBJbnRlcmFjdGlvbiBjb2xsZWN0b3Igb3B0aW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEludGVyYWN0aW9uQ29sbGVjdG9yT3B0aW9ucyBleHRlbmRzIENvbGxlY3Rvck9wdGlvbnM8YW55PiB7XG4gIC8qKiBDaGFubmVsIHRvIGNvbGxlY3QgaW50ZXJhY3Rpb25zIGZyb20gKi9cbiAgY2hhbm5lbElkPzogc3RyaW5nO1xuICAvKiogR3VpbGQgdG8gY29sbGVjdCBpbnRlcmFjdGlvbnMgZnJvbSAqL1xuICBndWlsZElkPzogc3RyaW5nO1xuICAvKiogTWVzc2FnZSB0byBjb2xsZWN0IGludGVyYWN0aW9ucyBmcm9tICovXG4gIG1lc3NhZ2VJZD86IHN0cmluZztcbiAgLyoqIEludGVyYWN0aW9uIHR5cGVzIHRvIGNvbGxlY3QgKi9cbiAgaW50ZXJhY3Rpb25UeXBlPzogbnVtYmVyIHwgbnVtYmVyW107XG4gIC8qKiBDb21wb25lbnQgdHlwZXMgdG8gY29sbGVjdCAqL1xuICBjb21wb25lbnRUeXBlPzogbnVtYmVyIHwgbnVtYmVyW107XG59XG5cbi8qKlxuICogQ29sbGVjdG9yIGZvciBpbnRlcmFjdGlvbnMgKGJ1dHRvbnMsIHNlbGVjdCBtZW51cywgZXRjLilcbiAqL1xuZXhwb3J0IGNsYXNzIEludGVyYWN0aW9uQ29sbGVjdG9yIGV4dGVuZHMgQ29sbGVjdG9yPHN0cmluZywgYW55PiB7XG4gIHB1YmxpYyByZWFkb25seSBjaGFubmVsSWQ/OiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBndWlsZElkPzogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgbWVzc2FnZUlkPzogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgaW50ZXJhY3Rpb25UeXBlPzogbnVtYmVyW107XG4gIHB1YmxpYyByZWFkb25seSBjb21wb25lbnRUeXBlPzogbnVtYmVyW107XG4gIHByaXZhdGUgcmVhZG9ubHkgaW50ZXJhY3Rpb25IYW5kbGVyOiAoaW50ZXJhY3Rpb246IGFueSkgPT4gdm9pZDtcblxuICBjb25zdHJ1Y3RvcihjbGllbnQ6IGFueSwgb3B0aW9uczogSW50ZXJhY3Rpb25Db2xsZWN0b3JPcHRpb25zID0ge30pIHtcbiAgICBzdXBlcihjbGllbnQsIG9wdGlvbnMpO1xuICAgIHRoaXMuY2hhbm5lbElkID0gb3B0aW9ucy5jaGFubmVsSWQ7XG4gICAgdGhpcy5ndWlsZElkID0gb3B0aW9ucy5ndWlsZElkO1xuICAgIHRoaXMubWVzc2FnZUlkID0gb3B0aW9ucy5tZXNzYWdlSWQ7XG4gICAgdGhpcy5pbnRlcmFjdGlvblR5cGUgPSBvcHRpb25zLmludGVyYWN0aW9uVHlwZSBcbiAgICAgID8gQXJyYXkuaXNBcnJheShvcHRpb25zLmludGVyYWN0aW9uVHlwZSkgPyBvcHRpb25zLmludGVyYWN0aW9uVHlwZSA6IFtvcHRpb25zLmludGVyYWN0aW9uVHlwZV1cbiAgICAgIDogdW5kZWZpbmVkO1xuICAgIHRoaXMuY29tcG9uZW50VHlwZSA9IG9wdGlvbnMuY29tcG9uZW50VHlwZVxuICAgICAgPyBBcnJheS5pc0FycmF5KG9wdGlvbnMuY29tcG9uZW50VHlwZSkgPyBvcHRpb25zLmNvbXBvbmVudFR5cGUgOiBbb3B0aW9ucy5jb21wb25lbnRUeXBlXVxuICAgICAgOiB1bmRlZmluZWQ7XG4gICAgXG4gICAgdGhpcy5pbnRlcmFjdGlvbkhhbmRsZXIgPSAoaW50ZXJhY3Rpb246IGFueSkgPT4ge1xuICAgICAgLy8gRmlsdGVyIGJ5IGNoYW5uZWxcbiAgICAgIGlmICh0aGlzLmNoYW5uZWxJZCAmJiBpbnRlcmFjdGlvbi5jaGFubmVsSWQgIT09IHRoaXMuY2hhbm5lbElkKSByZXR1cm47XG4gICAgICAvLyBGaWx0ZXIgYnkgZ3VpbGRcbiAgICAgIGlmICh0aGlzLmd1aWxkSWQgJiYgaW50ZXJhY3Rpb24uZ3VpbGRJZCAhPT0gdGhpcy5ndWlsZElkKSByZXR1cm47XG4gICAgICAvLyBGaWx0ZXIgYnkgbWVzc2FnZVxuICAgICAgaWYgKHRoaXMubWVzc2FnZUlkICYmIGludGVyYWN0aW9uLm1lc3NhZ2U/LmlkICE9PSB0aGlzLm1lc3NhZ2VJZCkgcmV0dXJuO1xuICAgICAgLy8gRmlsdGVyIGJ5IGludGVyYWN0aW9uIHR5cGVcbiAgICAgIGlmICh0aGlzLmludGVyYWN0aW9uVHlwZSAmJiAhdGhpcy5pbnRlcmFjdGlvblR5cGUuaW5jbHVkZXMoaW50ZXJhY3Rpb24udHlwZSkpIHJldHVybjtcbiAgICAgIC8vIEZpbHRlciBieSBjb21wb25lbnQgdHlwZVxuICAgICAgaWYgKHRoaXMuY29tcG9uZW50VHlwZSAmJiBpbnRlcmFjdGlvbi5jb21wb25lbnRUeXBlICYmICF0aGlzLmNvbXBvbmVudFR5cGUuaW5jbHVkZXMoaW50ZXJhY3Rpb24uY29tcG9uZW50VHlwZSkpIHJldHVybjtcbiAgICAgIFxuICAgICAgdGhpcy5oYW5kbGVDb2xsZWN0KGludGVyYWN0aW9uKTtcbiAgICB9O1xuICAgIFxuICAgIGNsaWVudC5vbignaW50ZXJhY3Rpb25DcmVhdGUnLCB0aGlzLmludGVyYWN0aW9uSGFuZGxlcik7XG4gICAgXG4gICAgdGhpcy5vbmNlKCdlbmQnLCAoKSA9PiB7XG4gICAgICBjbGllbnQucmVtb3ZlTGlzdGVuZXIoJ2ludGVyYWN0aW9uQ3JlYXRlJywgdGhpcy5pbnRlcmFjdGlvbkhhbmRsZXIpO1xuICAgIH0pO1xuICB9XG5cbiAgY29sbGVjdChpbnRlcmFjdGlvbjogYW55KTogc3RyaW5nIHwgbnVsbCB7XG4gICAgcmV0dXJuIGludGVyYWN0aW9uLmlkID8/IG51bGw7XG4gIH1cblxuICBkaXNwb3NlKGludGVyYWN0aW9uOiBhbnkpOiBzdHJpbmcgfCBudWxsIHtcbiAgICByZXR1cm4gaW50ZXJhY3Rpb24uaWQgPz8gbnVsbDtcbiAgfVxufVxuXG4vKipcbiAqIFJlYWN0aW9uIGNvbGxlY3RvciBvcHRpb25zXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVhY3Rpb25Db2xsZWN0b3JPcHRpb25zIGV4dGVuZHMgQ29sbGVjdG9yT3B0aW9uczxhbnk+IHtcbiAgLyoqIE1lc3NhZ2UgdG8gY29sbGVjdCByZWFjdGlvbnMgZnJvbSAqL1xuICBtZXNzYWdlSWQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBDb2xsZWN0b3IgZm9yIHJlYWN0aW9uc1xuICovXG5leHBvcnQgY2xhc3MgUmVhY3Rpb25Db2xsZWN0b3IgZXh0ZW5kcyBDb2xsZWN0b3I8c3RyaW5nLCBhbnk+IHtcbiAgcHVibGljIHJlYWRvbmx5IG1lc3NhZ2VJZDogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IHJlYWN0aW9uSGFuZGxlcjogKHJlYWN0aW9uOiBhbnkpID0+IHZvaWQ7XG5cbiAgY29uc3RydWN0b3IoY2xpZW50OiBhbnksIG1lc3NhZ2VJZDogc3RyaW5nLCBvcHRpb25zOiBSZWFjdGlvbkNvbGxlY3Rvck9wdGlvbnMpIHtcbiAgICBzdXBlcihjbGllbnQsIG9wdGlvbnMpO1xuICAgIHRoaXMubWVzc2FnZUlkID0gbWVzc2FnZUlkO1xuICAgIFxuICAgIHRoaXMucmVhY3Rpb25IYW5kbGVyID0gKHJlYWN0aW9uOiBhbnkpID0+IHtcbiAgICAgIGlmIChyZWFjdGlvbi5tZXNzYWdlX2lkID09PSB0aGlzLm1lc3NhZ2VJZCB8fCByZWFjdGlvbi5tZXNzYWdlSWQgPT09IHRoaXMubWVzc2FnZUlkKSB7XG4gICAgICAgIHRoaXMuaGFuZGxlQ29sbGVjdChyZWFjdGlvbik7XG4gICAgICB9XG4gICAgfTtcbiAgICBcbiAgICBjbGllbnQub24oJ21lc3NhZ2VSZWFjdGlvbkFkZCcsIHRoaXMucmVhY3Rpb25IYW5kbGVyKTtcbiAgICBcbiAgICB0aGlzLm9uY2UoJ2VuZCcsICgpID0+IHtcbiAgICAgIGNsaWVudC5yZW1vdmVMaXN0ZW5lcignbWVzc2FnZVJlYWN0aW9uQWRkJywgdGhpcy5yZWFjdGlvbkhhbmRsZXIpO1xuICAgIH0pO1xuICB9XG5cbiAgY29sbGVjdChyZWFjdGlvbjogYW55KTogc3RyaW5nIHwgbnVsbCB7XG4gICAgLy8gS2V5IGlzIGVtb2ppIGlkZW50aWZpZXJcbiAgICByZXR1cm4gcmVhY3Rpb24uZW1vamk/LmlkID8/IHJlYWN0aW9uLmVtb2ppPy5uYW1lID8/IG51bGw7XG4gIH1cblxuICBkaXNwb3NlKHJlYWN0aW9uOiBhbnkpOiBzdHJpbmcgfCBudWxsIHtcbiAgICByZXR1cm4gcmVhY3Rpb24uZW1vamk/LmlkID8/IHJlYWN0aW9uLmVtb2ppPy5uYW1lID8/IG51bGw7XG4gIH1cbn1cblxuLyoqXG4gKiBBd2FpdCBtZXNzYWdlcyBoZWxwZXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGF3YWl0TWVzc2FnZXMoXG4gIGNsaWVudDogYW55LFxuICBjaGFubmVsSWQ6IHN0cmluZyxcbiAgb3B0aW9uczogTWVzc2FnZUNvbGxlY3Rvck9wdGlvbnMgPSB7fVxuKTogUHJvbWlzZTxDb2xsZWN0aW9uPHN0cmluZywgYW55Pj4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IGNvbGxlY3RvciA9IG5ldyBNZXNzYWdlQ29sbGVjdG9yKGNsaWVudCwgY2hhbm5lbElkLCBvcHRpb25zKTtcbiAgICBcbiAgICBjb2xsZWN0b3Iub25jZSgnZW5kJywgKGNvbGxlY3RlZCwgcmVhc29uKSA9PiB7XG4gICAgICBpZiAob3B0aW9ucy5tYXggJiYgY29sbGVjdGVkLnNpemUgPCBvcHRpb25zLm1heCkge1xuICAgICAgICByZWplY3QobmV3IEVycm9yKGBDb2xsZWN0b3IgZW5kZWQgd2l0aCByZWFzb246ICR7cmVhc29ufWApKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc29sdmUoY29sbGVjdGVkKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5cbi8qKlxuICogQXdhaXQgcmVhY3Rpb25zIGhlbHBlclxuICovXG5leHBvcnQgZnVuY3Rpb24gYXdhaXRSZWFjdGlvbnMoXG4gIGNsaWVudDogYW55LFxuICBtZXNzYWdlSWQ6IHN0cmluZyxcbiAgb3B0aW9uczogUmVhY3Rpb25Db2xsZWN0b3JPcHRpb25zXG4pOiBQcm9taXNlPENvbGxlY3Rpb248c3RyaW5nLCBhbnk+PiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgY29sbGVjdG9yID0gbmV3IFJlYWN0aW9uQ29sbGVjdG9yKGNsaWVudCwgbWVzc2FnZUlkLCBvcHRpb25zKTtcbiAgICBcbiAgICBjb2xsZWN0b3Iub25jZSgnZW5kJywgKGNvbGxlY3RlZCwgcmVhc29uKSA9PiB7XG4gICAgICBpZiAob3B0aW9ucy5tYXggJiYgY29sbGVjdGVkLnNpemUgPCBvcHRpb25zLm1heCkge1xuICAgICAgICByZWplY3QobmV3IEVycm9yKGBDb2xsZWN0b3IgZW5kZWQgd2l0aCByZWFzb246ICR7cmVhc29ufWApKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc29sdmUoY29sbGVjdGVkKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IENvbGxlY3RvcjtcbiJdfQ==
@@ -1,61 +0,0 @@
1
- /**
2
- * Data resolver utilities for handling various data types
3
- */
4
- export type BufferResolvable = Buffer | string;
5
- export type Base64Resolvable = Buffer | string;
6
- /**
7
- * Resolves various data types to usable formats
8
- */
9
- export declare class DataResolver {
10
- /**
11
- * Resolves a BufferResolvable to a Buffer
12
- * @param resource The resource to resolve
13
- */
14
- static resolveBuffer(resource: BufferResolvable): Promise<Buffer>;
15
- /**
16
- * Resolves a Base64Resolvable to a base64 string
17
- * @param resource The resource to resolve
18
- * @param mimeType The MIME type for the data URI
19
- */
20
- static resolveBase64(resource: Base64Resolvable, mimeType?: string): Promise<string>;
21
- /**
22
- * Resolves a file to a name and buffer
23
- * @param resource The file resource
24
- */
25
- static resolveFile(resource: BufferResolvable | {
26
- name?: string;
27
- attachment: BufferResolvable;
28
- }): Promise<{
29
- name: string;
30
- data: Buffer;
31
- }>;
32
- /**
33
- * Resolves multiple files
34
- * @param resources The file resources
35
- */
36
- static resolveFiles(resources: (BufferResolvable | {
37
- name?: string;
38
- attachment: BufferResolvable;
39
- })[]): Promise<{
40
- name: string;
41
- data: Buffer;
42
- }[]>;
43
- /**
44
- * Resolves a color to a number
45
- * @param color The color to resolve
46
- */
47
- static resolveColor(color: number | string | [number, number, number] | null): number | null;
48
- /**
49
- * Resolves a string to a snowflake ID
50
- * @param value The value to resolve
51
- */
52
- static resolveSnowflake(value: string | number | {
53
- id: string | number;
54
- }): string;
55
- /**
56
- * Resolves an image to a base64 data URI
57
- * @param image The image to resolve
58
- */
59
- static resolveImage(image: BufferResolvable): Promise<string>;
60
- }
61
- export default DataResolver;