@push.rocks/smartmta 9.4.1 → 9.6.0
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.
- package/changelog.md +41 -0
- package/dist_rust/mailer-bin_linux_amd64 +0 -0
- package/dist_rust/mailer-bin_linux_amd64.tsrust-build.json +14 -0
- package/dist_rust/mailer-bin_linux_arm64 +0 -0
- package/dist_rust/mailer-bin_linux_arm64.tsrust-build.json +14 -0
- package/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts/index.d.ts +2 -0
- package/dist_ts/index.js +3 -1
- package/dist_ts/mail/delivery/classes.delivery.queue.d.ts +63 -2
- package/dist_ts/mail/delivery/classes.delivery.queue.js +749 -193
- package/dist_ts/mail/delivery/classes.delivery.system.d.ts +6 -0
- package/dist_ts/mail/delivery/classes.delivery.system.js +146 -62
- package/dist_ts/mail/delivery/functions.raw-email.d.ts +9 -0
- package/dist_ts/mail/delivery/functions.raw-email.js +85 -0
- package/dist_ts/mail/delivery/symbols.delivery.queue.d.ts +6 -0
- package/dist_ts/mail/delivery/symbols.delivery.queue.js +7 -0
- package/dist_ts/mail/index.d.ts +1 -0
- package/dist_ts/mail/index.js +1 -1
- package/dist_ts/mail/routing/classes.unified.email.server.d.ts +180 -4
- package/dist_ts/mail/routing/classes.unified.email.server.js +592 -172
- package/dist_ts/mail/routing/interfaces.d.ts +41 -0
- package/dist_ts/mail/routing/symbols.unified.email.server.d.ts +2 -0
- package/dist_ts/mail/routing/symbols.unified.email.server.js +3 -0
- package/dist_ts/security/classes.rustsecuritybridge.d.ts +11 -0
- package/dist_ts/security/classes.rustsecuritybridge.js +1 -1
- package/package.json +6 -6
- package/readme.md +78 -4
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/index.ts +2 -0
- package/ts/mail/delivery/classes.delivery.queue.ts +923 -226
- package/ts/mail/delivery/classes.delivery.system.ts +192 -80
- package/ts/mail/delivery/functions.raw-email.ts +111 -0
- package/ts/mail/delivery/symbols.delivery.queue.ts +6 -0
- package/ts/mail/index.ts +1 -0
- package/ts/mail/routing/classes.unified.email.server.ts +780 -192
- package/ts/mail/routing/interfaces.ts +43 -0
- package/ts/mail/routing/symbols.unified.email.server.ts +6 -0
- package/ts/security/classes.rustsecuritybridge.ts +6 -0
- package/readme.hints.md +0 -37
- package/readme.plan.md +0 -30
|
@@ -1,14 +1,31 @@
|
|
|
1
1
|
import { EventEmitter } from 'node:events';
|
|
2
2
|
import { createHash } from 'node:crypto';
|
|
3
3
|
import { deserialize, serialize } from 'node:v8';
|
|
4
|
+
import { SMARTMTA_STORAGE_LIST_PAGE_MAX_LIMIT, } from '../interfaces.storage.js';
|
|
4
5
|
import { logger } from '../../logger.js';
|
|
5
6
|
import {} from './interfaces.js';
|
|
6
7
|
import { normalizeSmtpTranscript, SMTP_TRANSCRIPT_MAX_ENTRIES, SMTP_TRANSCRIPT_MAX_ENTRY_CODE_POINTS, SMTP_TRANSCRIPT_MAX_UTF8_BYTES, } from '../../security/classes.rustsecuritybridge.js';
|
|
7
8
|
import { Email } from '../core/classes.email.js';
|
|
8
9
|
import { emitSafely } from './functions.safe-observers.js';
|
|
9
10
|
import { getErrorMessage } from '../../functions.errors.js';
|
|
11
|
+
import { SmtpDeliveryError } from '../../security/classes.rustsecuritybridge.js';
|
|
12
|
+
import { assertCanonicalRawRfc822Message, cloneRawSmtpEnvelope, createRawQueueFingerprint, normalizeRawSmtpEnvelope, } from './functions.raw-email.js';
|
|
13
|
+
import { kQueueCloseAdmission, kQueueCreateItemSnapshot, kQueueEnqueueRaw, kQueueReserveRawAccess, kQueueSetReadyItemsHandler, kQueueWithRawMessage, } from './symbols.delivery.queue.js';
|
|
10
14
|
export const ACCEPTED_ENVELOPE_IDEMPOTENCY_RETENTION_MS = 31 * 24 * 60 * 60 * 1000;
|
|
11
15
|
const QUEUE_IDEMPOTENCY_TOMBSTONE_CLEANUP_LIMIT = 256;
|
|
16
|
+
export const DEFAULT_MAX_RAW_MESSAGE_BYTES = 32 * 1024 * 1024;
|
|
17
|
+
const RAW_ENQUEUE_RESERVATION_MULTIPLIER = 3;
|
|
18
|
+
const RAW_ACCESS_RESERVATION_MULTIPLIER = 6;
|
|
19
|
+
const RAW_BYTE_WAITER_LIMIT = 1_024;
|
|
20
|
+
const RAW_RESERVATION_LIMIT = 1_024;
|
|
21
|
+
export const DEFAULT_RAW_IN_FLIGHT_BYTE_BUDGET = 192 * 1024 * 1024;
|
|
22
|
+
const weightedRawBytes = (bytesArg, multiplierArg) => {
|
|
23
|
+
const weightedBytes = bytesArg * multiplierArg;
|
|
24
|
+
if (!Number.isSafeInteger(weightedBytes) || weightedBytes < 1) {
|
|
25
|
+
throw new Error('Raw payload memory reservation exceeds the safe integer range');
|
|
26
|
+
}
|
|
27
|
+
return weightedBytes;
|
|
28
|
+
};
|
|
12
29
|
/**
|
|
13
30
|
* Queue statistics interface
|
|
14
31
|
*/
|
|
@@ -34,16 +51,28 @@ export class UnifiedDeliveryQueue extends EventEmitter {
|
|
|
34
51
|
queue = new Map();
|
|
35
52
|
checkTimer;
|
|
36
53
|
cleanupTimer;
|
|
54
|
+
cleanupFlight;
|
|
37
55
|
stats;
|
|
38
56
|
processing = false;
|
|
39
57
|
processingScanPromise;
|
|
40
58
|
processingRescanRequested = false;
|
|
41
|
-
processingScanShutdownTimeoutMs = 30_000;
|
|
42
59
|
totalProcessed = 0;
|
|
43
60
|
ownsManagedPrefix = false;
|
|
44
61
|
lifecycleState = 'new';
|
|
45
62
|
idempotentEnqueueFlights = new Map();
|
|
46
63
|
idempotencyTombstoneCleanupCursor;
|
|
64
|
+
itemMutationFlights = new Map();
|
|
65
|
+
rawBytesInFlight = 0;
|
|
66
|
+
rawByteWaiters = [];
|
|
67
|
+
rawReservationCount = 0;
|
|
68
|
+
rawReservationDrainWaiters = [];
|
|
69
|
+
readyItemsHandler;
|
|
70
|
+
acceptingNewItems = true;
|
|
71
|
+
acceptingMutations = true;
|
|
72
|
+
acceptingRawReservations = true;
|
|
73
|
+
enqueueFlights = new Set();
|
|
74
|
+
pendingNewItemCount = 0;
|
|
75
|
+
shutdownFlight;
|
|
47
76
|
/**
|
|
48
77
|
* Create a new unified delivery queue
|
|
49
78
|
* @param options Queue options
|
|
@@ -56,6 +85,17 @@ export class UnifiedDeliveryQueue extends EventEmitter {
|
|
|
56
85
|
if (options.storageMode === 'memory' && options.storageManager) {
|
|
57
86
|
throw new Error('Memory-only queue storage cannot receive an IBlobStorageManager');
|
|
58
87
|
}
|
|
88
|
+
const maxRawMessageBytes = options.maxRawMessageBytes ?? DEFAULT_MAX_RAW_MESSAGE_BYTES;
|
|
89
|
+
const minimumRawInFlightByteBudget = weightedRawBytes(maxRawMessageBytes, RAW_ACCESS_RESERVATION_MULTIPLIER);
|
|
90
|
+
const rawInFlightByteBudget = options.rawInFlightByteBudget
|
|
91
|
+
?? Math.max(DEFAULT_RAW_IN_FLIGHT_BYTE_BUDGET, minimumRawInFlightByteBudget);
|
|
92
|
+
if (!Number.isSafeInteger(maxRawMessageBytes) || maxRawMessageBytes < 1) {
|
|
93
|
+
throw new Error('Queue maxRawMessageBytes must be a positive safe integer');
|
|
94
|
+
}
|
|
95
|
+
if (!Number.isSafeInteger(rawInFlightByteBudget)
|
|
96
|
+
|| rawInFlightByteBudget < minimumRawInFlightByteBudget) {
|
|
97
|
+
throw new Error(`Queue rawInFlightByteBudget must be a safe integer at least ${minimumRawInFlightByteBudget}`);
|
|
98
|
+
}
|
|
59
99
|
this.options = {
|
|
60
100
|
storageMode: options.storageMode,
|
|
61
101
|
storageManager: options.storageManager,
|
|
@@ -65,7 +105,9 @@ export class UnifiedDeliveryQueue extends EventEmitter {
|
|
|
65
105
|
maxPerDestination: options.maxPerDestination || 100,
|
|
66
106
|
maxRetries: options.maxRetries || 5,
|
|
67
107
|
baseRetryDelay: options.baseRetryDelay || 60000, // 1 minute
|
|
68
|
-
maxRetryDelay: options.maxRetryDelay || 3600000 // 1 hour
|
|
108
|
+
maxRetryDelay: options.maxRetryDelay || 3600000, // 1 hour
|
|
109
|
+
maxRawMessageBytes,
|
|
110
|
+
rawInFlightByteBudget,
|
|
69
111
|
};
|
|
70
112
|
// Initialize statistics
|
|
71
113
|
this.stats = {
|
|
@@ -88,10 +130,27 @@ export class UnifiedDeliveryQueue extends EventEmitter {
|
|
|
88
130
|
};
|
|
89
131
|
}
|
|
90
132
|
assertMutable() {
|
|
91
|
-
if (this.
|
|
133
|
+
if (!this.acceptingMutations
|
|
134
|
+
|| this.lifecycleState === 'shutting-down'
|
|
135
|
+
|| this.lifecycleState === 'closed') {
|
|
92
136
|
throw new Error(`Delivery queue is ${this.lifecycleState}; mutations are no longer allowed`);
|
|
93
137
|
}
|
|
94
138
|
}
|
|
139
|
+
assertAcceptingNewItems() {
|
|
140
|
+
if (!this.acceptingNewItems) {
|
|
141
|
+
throw new Error('Delivery queue is not accepting new items');
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
trackEnqueueFlight(operationArg) {
|
|
145
|
+
let flight;
|
|
146
|
+
flight = Promise.resolve()
|
|
147
|
+
.then(operationArg)
|
|
148
|
+
.finally(() => {
|
|
149
|
+
this.enqueueFlights.delete(flight);
|
|
150
|
+
});
|
|
151
|
+
this.enqueueFlights.add(flight);
|
|
152
|
+
return flight;
|
|
153
|
+
}
|
|
95
154
|
/** Whether queue entries are committed through caller-managed blob storage. */
|
|
96
155
|
hasManagedStorage() {
|
|
97
156
|
return !!this.options.storageManager;
|
|
@@ -100,6 +159,82 @@ export class UnifiedDeliveryQueue extends EventEmitter {
|
|
|
100
159
|
hasPaginatedManagedStorage() {
|
|
101
160
|
return typeof this.options.storageManager?.listPage === 'function';
|
|
102
161
|
}
|
|
162
|
+
[kQueueCloseAdmission]() {
|
|
163
|
+
this.acceptingNewItems = false;
|
|
164
|
+
}
|
|
165
|
+
[kQueueSetReadyItemsHandler](handlerArg) {
|
|
166
|
+
this.readyItemsHandler = handlerArg;
|
|
167
|
+
}
|
|
168
|
+
cloneEmail(emailArg) {
|
|
169
|
+
const options = deserialize(serialize(emailArg.toEmailOptions()));
|
|
170
|
+
return new Email(options)
|
|
171
|
+
.setMessageId(emailArg.getMessageId())
|
|
172
|
+
.setEnvelopeFrom(emailArg.getEnvelopeFrom());
|
|
173
|
+
}
|
|
174
|
+
[kQueueCreateItemSnapshot](itemArg) {
|
|
175
|
+
return {
|
|
176
|
+
...itemArg,
|
|
177
|
+
processingResult: this.cloneEmail(itemArg.processingResult),
|
|
178
|
+
...(itemArg.smtpEnvelope
|
|
179
|
+
? { smtpEnvelope: cloneRawSmtpEnvelope(itemArg.smtpEnvelope) }
|
|
180
|
+
: {}),
|
|
181
|
+
...(itemArg.route
|
|
182
|
+
? { route: deserialize(serialize(itemArg.route)) }
|
|
183
|
+
: {}),
|
|
184
|
+
nextAttempt: new Date(itemArg.nextAttempt),
|
|
185
|
+
createdAt: new Date(itemArg.createdAt),
|
|
186
|
+
updatedAt: new Date(itemArg.updatedAt),
|
|
187
|
+
...(itemArg.deliveredAt ? { deliveredAt: new Date(itemArg.deliveredAt) } : {}),
|
|
188
|
+
deliveredRecipients: [...(itemArg.deliveredRecipients || [])],
|
|
189
|
+
terminalRecipients: [...(itemArg.terminalRecipients || [])],
|
|
190
|
+
recipientStates: (itemArg.recipientStates || []).map((state) => ({
|
|
191
|
+
...state,
|
|
192
|
+
updatedAt: new Date(state.updatedAt),
|
|
193
|
+
})),
|
|
194
|
+
bounceOperations: (itemArg.bounceOperations || []).map((operation) => ({
|
|
195
|
+
...operation,
|
|
196
|
+
nextAttempt: new Date(operation.nextAttempt),
|
|
197
|
+
...(operation.completedAt ? { completedAt: new Date(operation.completedAt) } : {}),
|
|
198
|
+
})),
|
|
199
|
+
smtpTransactions: (itemArg.smtpTransactions || []).map((transaction) => ({
|
|
200
|
+
...transaction,
|
|
201
|
+
recipients: [...transaction.recipients],
|
|
202
|
+
recipientResults: transaction.recipientResults?.map((result) => ({ ...result })),
|
|
203
|
+
outboundAuthentication: transaction.outboundAuthentication
|
|
204
|
+
? deserialize(serialize(transaction.outboundAuthentication))
|
|
205
|
+
: undefined,
|
|
206
|
+
transcript: transaction.transcript.map((entry) => ({
|
|
207
|
+
...entry,
|
|
208
|
+
...(entry.transferStats ? { transferStats: { ...entry.transferStats } } : {}),
|
|
209
|
+
})),
|
|
210
|
+
})),
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
async emitItemEventSafely(eventNameArg, itemArg, ...additionalArgsArg) {
|
|
214
|
+
for (const rawListener of this.rawListeners(eventNameArg)) {
|
|
215
|
+
try {
|
|
216
|
+
await Reflect.apply(rawListener, this, [
|
|
217
|
+
this[kQueueCreateItemSnapshot](itemArg),
|
|
218
|
+
...deserialize(serialize(additionalArgsArg)),
|
|
219
|
+
]);
|
|
220
|
+
}
|
|
221
|
+
catch (error) {
|
|
222
|
+
logger.log('error', `Observer for ${eventNameArg} failed: ${getErrorMessage(error)}`);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
async emitReadyItemsSafely(itemsArg) {
|
|
227
|
+
for (const rawListener of this.rawListeners('itemsReady')) {
|
|
228
|
+
try {
|
|
229
|
+
await Reflect.apply(rawListener, this, [
|
|
230
|
+
itemsArg.map((item) => this[kQueueCreateItemSnapshot](item)),
|
|
231
|
+
]);
|
|
232
|
+
}
|
|
233
|
+
catch (error) {
|
|
234
|
+
logger.log('error', `Observer for itemsReady failed: ${getErrorMessage(error)}`);
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
}
|
|
103
238
|
idempotentQueueId(idempotencyKey) {
|
|
104
239
|
return `idempotent-${createHash('sha256')
|
|
105
240
|
.update('smartmta-queue-v1\0')
|
|
@@ -300,9 +435,7 @@ export class UnifiedDeliveryQueue extends EventEmitter {
|
|
|
300
435
|
clearInterval(this.cleanupTimer);
|
|
301
436
|
}
|
|
302
437
|
this.cleanupTimer = setInterval(() => {
|
|
303
|
-
this.
|
|
304
|
-
logger.log('error', `Auto-cleanup failed: ${err.message}`);
|
|
305
|
-
});
|
|
438
|
+
this.runPeriodicCleanup();
|
|
306
439
|
}, 30 * 60 * 1000);
|
|
307
440
|
this.processing = true;
|
|
308
441
|
this.stats.processingActive = true;
|
|
@@ -310,6 +443,22 @@ export class UnifiedDeliveryQueue extends EventEmitter {
|
|
|
310
443
|
logger.log('info', 'Queue processing started');
|
|
311
444
|
this.wake();
|
|
312
445
|
}
|
|
446
|
+
runPeriodicCleanup() {
|
|
447
|
+
if (this.cleanupFlight)
|
|
448
|
+
return;
|
|
449
|
+
let cleanupFlight;
|
|
450
|
+
cleanupFlight = this.cleanupOldItems(24 * 60 * 60 * 1000)
|
|
451
|
+
.then(() => undefined)
|
|
452
|
+
.catch((error) => {
|
|
453
|
+
logger.log('error', `Auto-cleanup failed: ${getErrorMessage(error)}`);
|
|
454
|
+
})
|
|
455
|
+
.finally(() => {
|
|
456
|
+
if (this.cleanupFlight === cleanupFlight) {
|
|
457
|
+
this.cleanupFlight = undefined;
|
|
458
|
+
}
|
|
459
|
+
});
|
|
460
|
+
this.cleanupFlight = cleanupFlight;
|
|
461
|
+
}
|
|
313
462
|
/**
|
|
314
463
|
* Stop queue processing
|
|
315
464
|
*/
|
|
@@ -334,7 +483,7 @@ export class UnifiedDeliveryQueue extends EventEmitter {
|
|
|
334
483
|
async processQueue() {
|
|
335
484
|
try {
|
|
336
485
|
const now = new Date();
|
|
337
|
-
|
|
486
|
+
const readyItems = [];
|
|
338
487
|
// Find items ready for processing
|
|
339
488
|
for (const item of this.queue.values()) {
|
|
340
489
|
if (item.status === 'pending' || (item.status === 'deferred' && item.nextAttempt <= now)) {
|
|
@@ -349,8 +498,11 @@ export class UnifiedDeliveryQueue extends EventEmitter {
|
|
|
349
498
|
if (!this.processing) {
|
|
350
499
|
return;
|
|
351
500
|
}
|
|
352
|
-
|
|
353
|
-
await
|
|
501
|
+
const readyItemIds = readyItems.map((item) => item.id);
|
|
502
|
+
await this.readyItemsHandler?.([...readyItemIds]);
|
|
503
|
+
if (this.listenerCount('itemsReady') > 0) {
|
|
504
|
+
await this.emitReadyItemsSafely(readyItems);
|
|
505
|
+
}
|
|
354
506
|
logger.log('info', `Found ${readyItems.length} items ready for processing`);
|
|
355
507
|
// Update statistics
|
|
356
508
|
this.updateStats();
|
|
@@ -395,8 +547,12 @@ export class UnifiedDeliveryQueue extends EventEmitter {
|
|
|
395
547
|
* @param mode Processing mode
|
|
396
548
|
* @param route Email route
|
|
397
549
|
*/
|
|
398
|
-
|
|
550
|
+
enqueue(processingResult, mode, route, enqueueOptions = {}) {
|
|
399
551
|
this.assertMutable();
|
|
552
|
+
this.assertAcceptingNewItems();
|
|
553
|
+
return this.trackEnqueueFlight(() => this.enqueueAccepted(processingResult, mode, route, enqueueOptions));
|
|
554
|
+
}
|
|
555
|
+
async enqueueAccepted(processingResult, mode, route, enqueueOptions) {
|
|
400
556
|
if (!(processingResult instanceof Email)) {
|
|
401
557
|
throw new Error('Queue processingResult must be an Email instance');
|
|
402
558
|
}
|
|
@@ -408,101 +564,183 @@ export class UnifiedDeliveryQueue extends EventEmitter {
|
|
|
408
564
|
throw new Error('Queue idempotencyKey and idempotencyFingerprint must be provided together');
|
|
409
565
|
}
|
|
410
566
|
if (enqueueOptions.idempotencyKey !== undefined) {
|
|
411
|
-
|
|
412
|
-
|
|
567
|
+
return this.enqueueIdempotent(enqueueOptions.idempotencyKey, enqueueOptions.idempotencyFingerprint, (idempotency) => this.enqueueNew(processingResult, mode, route, idempotency));
|
|
568
|
+
}
|
|
569
|
+
return this.enqueueNew(processingResult, mode, route);
|
|
570
|
+
}
|
|
571
|
+
[kQueueEnqueueRaw](optionsArg) {
|
|
572
|
+
this.assertMutable();
|
|
573
|
+
this.assertAcceptingNewItems();
|
|
574
|
+
if (!this.hasManagedStorage()) {
|
|
575
|
+
throw new Error('Raw outbound queue requires managed queue storage');
|
|
576
|
+
}
|
|
577
|
+
if (!this.hasPaginatedManagedStorage()) {
|
|
578
|
+
throw new Error('Raw outbound queue requires paginated managed queue storage');
|
|
579
|
+
}
|
|
580
|
+
if (!optionsArg.idempotencyKey || optionsArg.idempotencyKey.length > 512) {
|
|
581
|
+
throw new Error('Queue idempotencyKey must contain 1 to 512 characters');
|
|
582
|
+
}
|
|
583
|
+
try {
|
|
584
|
+
assertCanonicalRawRfc822Message(optionsArg.rawMessage);
|
|
585
|
+
}
|
|
586
|
+
catch (error) {
|
|
587
|
+
if (!Buffer.isBuffer(optionsArg.rawMessage)) {
|
|
588
|
+
throw new Error('Raw outbound queue message must be a Buffer');
|
|
589
|
+
}
|
|
590
|
+
throw error;
|
|
591
|
+
}
|
|
592
|
+
if (optionsArg.rawMessage.length > this.options.maxRawMessageBytes) {
|
|
593
|
+
throw new Error(`Raw outbound queue message exceeds ${this.options.maxRawMessageBytes} bytes`);
|
|
594
|
+
}
|
|
595
|
+
const releaseRawReservation = this.reserveRawBytesImmediately(weightedRawBytes(optionsArg.rawMessage.length, RAW_ENQUEUE_RESERVATION_MULTIPLIER));
|
|
596
|
+
let rawMessage;
|
|
597
|
+
let smtpEnvelope;
|
|
598
|
+
let rawMessageSha256;
|
|
599
|
+
let fingerprint;
|
|
600
|
+
let processingResult;
|
|
601
|
+
try {
|
|
602
|
+
rawMessage = Buffer.from(optionsArg.rawMessage);
|
|
603
|
+
assertCanonicalRawRfc822Message(rawMessage);
|
|
604
|
+
smtpEnvelope = normalizeRawSmtpEnvelope(optionsArg.envelope);
|
|
605
|
+
rawMessageSha256 = createHash('sha256').update(rawMessage).digest('hex');
|
|
606
|
+
fingerprint = createRawQueueFingerprint(rawMessage, smtpEnvelope);
|
|
607
|
+
processingResult = new Email({
|
|
608
|
+
from: smtpEnvelope.from,
|
|
609
|
+
to: smtpEnvelope.to,
|
|
610
|
+
subject: '',
|
|
611
|
+
text: '',
|
|
612
|
+
}).setEnvelopeFrom(smtpEnvelope.from);
|
|
613
|
+
}
|
|
614
|
+
catch (error) {
|
|
615
|
+
releaseRawReservation();
|
|
616
|
+
throw error;
|
|
617
|
+
}
|
|
618
|
+
return this.trackEnqueueFlight(async () => {
|
|
619
|
+
try {
|
|
620
|
+
return await this.enqueueRawAccepted({
|
|
621
|
+
rawMessage,
|
|
622
|
+
smtpEnvelope,
|
|
623
|
+
idempotencyKey: optionsArg.idempotencyKey,
|
|
624
|
+
rawMessageSha256,
|
|
625
|
+
fingerprint,
|
|
626
|
+
processingResult,
|
|
627
|
+
});
|
|
413
628
|
}
|
|
414
|
-
|
|
415
|
-
|
|
629
|
+
finally {
|
|
630
|
+
releaseRawReservation();
|
|
416
631
|
}
|
|
417
|
-
|
|
418
|
-
|
|
632
|
+
});
|
|
633
|
+
}
|
|
634
|
+
async enqueueRawAccepted(optionsArg) {
|
|
635
|
+
return this.enqueueIdempotent(optionsArg.idempotencyKey, optionsArg.fingerprint, (idempotency) => this.enqueueNew(optionsArg.processingResult, 'mta', undefined, idempotency, {
|
|
636
|
+
rawMessage: optionsArg.rawMessage,
|
|
637
|
+
rawMessageSha256: optionsArg.rawMessageSha256,
|
|
638
|
+
smtpEnvelope: optionsArg.smtpEnvelope,
|
|
639
|
+
}));
|
|
640
|
+
}
|
|
641
|
+
async enqueueIdempotent(idempotencyKeyArg, fingerprintArg, createArg) {
|
|
642
|
+
if (this.options.storageManager && !this.options.storageManager.listPage) {
|
|
643
|
+
throw new Error('Managed idempotent enqueue requires paginated managed queue storage');
|
|
644
|
+
}
|
|
645
|
+
if (!idempotencyKeyArg || idempotencyKeyArg.length > 512) {
|
|
646
|
+
throw new Error('Queue idempotencyKey must contain 1 to 512 characters');
|
|
647
|
+
}
|
|
648
|
+
if (!/^[a-f0-9]{64}$/.test(fingerprintArg)) {
|
|
649
|
+
throw new Error('Queue idempotencyFingerprint must be a lowercase SHA-256 digest');
|
|
650
|
+
}
|
|
651
|
+
const id = this.idempotentQueueId(idempotencyKeyArg);
|
|
652
|
+
const existing = this.queue.get(id);
|
|
653
|
+
if (existing) {
|
|
654
|
+
if (existing.idempotencyKey !== idempotencyKeyArg
|
|
655
|
+
|| existing.idempotencyFingerprint !== fingerprintArg) {
|
|
656
|
+
throw new Error(`Queue idempotency key collision for ${id}`);
|
|
419
657
|
}
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
}
|
|
427
|
-
return id;
|
|
658
|
+
return id;
|
|
659
|
+
}
|
|
660
|
+
const activeFlight = this.idempotentEnqueueFlights.get(id);
|
|
661
|
+
if (activeFlight) {
|
|
662
|
+
if (activeFlight.fingerprint !== fingerprintArg) {
|
|
663
|
+
throw new Error(`Queue idempotency key collision for ${id}`);
|
|
428
664
|
}
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
665
|
+
return activeFlight.promise;
|
|
666
|
+
}
|
|
667
|
+
const flight = (async () => {
|
|
668
|
+
const tombstone = await this.readIdempotencyTombstone(id);
|
|
669
|
+
if (tombstone) {
|
|
670
|
+
if (tombstone.idempotencyKey !== idempotencyKeyArg
|
|
671
|
+
|| tombstone.idempotencyFingerprint !== fingerprintArg) {
|
|
432
672
|
throw new Error(`Queue idempotency key collision for ${id}`);
|
|
433
673
|
}
|
|
434
|
-
return
|
|
674
|
+
return id;
|
|
435
675
|
}
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|| tombstone.idempotencyFingerprint !== enqueueOptions.idempotencyFingerprint) {
|
|
441
|
-
throw new Error(`Queue idempotency key collision for ${id}`);
|
|
442
|
-
}
|
|
443
|
-
return id;
|
|
444
|
-
}
|
|
445
|
-
return this.enqueueNew(processingResult, mode, route, {
|
|
446
|
-
id,
|
|
447
|
-
idempotencyKey: enqueueOptions.idempotencyKey,
|
|
448
|
-
idempotencyFingerprint: enqueueOptions.idempotencyFingerprint,
|
|
449
|
-
});
|
|
450
|
-
})();
|
|
451
|
-
this.idempotentEnqueueFlights.set(id, {
|
|
452
|
-
fingerprint: enqueueOptions.idempotencyFingerprint,
|
|
453
|
-
promise: flight,
|
|
676
|
+
return createArg({
|
|
677
|
+
id,
|
|
678
|
+
idempotencyKey: idempotencyKeyArg,
|
|
679
|
+
idempotencyFingerprint: fingerprintArg,
|
|
454
680
|
});
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
681
|
+
})();
|
|
682
|
+
this.idempotentEnqueueFlights.set(id, { fingerprint: fingerprintArg, promise: flight });
|
|
683
|
+
try {
|
|
684
|
+
return await flight;
|
|
685
|
+
}
|
|
686
|
+
finally {
|
|
687
|
+
if (this.idempotentEnqueueFlights.get(id)?.promise === flight) {
|
|
688
|
+
this.idempotentEnqueueFlights.delete(id);
|
|
462
689
|
}
|
|
463
690
|
}
|
|
464
|
-
return this.enqueueNew(processingResult, mode, route);
|
|
465
691
|
}
|
|
466
|
-
async enqueueNew(processingResult, mode, route, idempotency) {
|
|
467
|
-
|
|
468
|
-
if (this.queue.size >= this.options.maxQueueSize) {
|
|
692
|
+
async enqueueNew(processingResult, mode, route, idempotency, raw) {
|
|
693
|
+
if (this.queue.size + this.pendingNewItemCount >= this.options.maxQueueSize) {
|
|
469
694
|
throw new Error('Queue is full');
|
|
470
695
|
}
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
id
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
696
|
+
this.pendingNewItemCount++;
|
|
697
|
+
let slotPending = true;
|
|
698
|
+
let id;
|
|
699
|
+
let item;
|
|
700
|
+
try {
|
|
701
|
+
id = idempotency?.id
|
|
702
|
+
|| `${Date.now()}-${Math.random().toString(36).substring(2, 15)}`;
|
|
703
|
+
item = {
|
|
704
|
+
id,
|
|
705
|
+
...(idempotency ? {
|
|
706
|
+
idempotencyKey: idempotency.idempotencyKey,
|
|
707
|
+
idempotencyFingerprint: idempotency.idempotencyFingerprint,
|
|
708
|
+
} : {}),
|
|
709
|
+
processingMode: mode,
|
|
710
|
+
processingResult,
|
|
711
|
+
...(raw ? {
|
|
712
|
+
messageFormat: 'raw-rfc822',
|
|
713
|
+
rawMessageSha256: raw.rawMessageSha256,
|
|
714
|
+
rawMessageLength: raw.rawMessage.length,
|
|
715
|
+
smtpEnvelope: cloneRawSmtpEnvelope(raw.smtpEnvelope),
|
|
716
|
+
} : {}),
|
|
717
|
+
attachmentCount: raw ? 0 : processingResult.attachments.length,
|
|
718
|
+
route,
|
|
719
|
+
status: 'pending',
|
|
720
|
+
attempts: 0,
|
|
721
|
+
nextAttempt: new Date(),
|
|
722
|
+
createdAt: new Date(),
|
|
723
|
+
updatedAt: new Date(),
|
|
724
|
+
deliveredRecipients: [],
|
|
725
|
+
terminalRecipients: [],
|
|
726
|
+
recipientStates: this.createInitialRecipientStates(processingResult),
|
|
727
|
+
bounceOperations: [],
|
|
728
|
+
smtpTransactions: [],
|
|
729
|
+
};
|
|
730
|
+
// Commit durable state before exposing the item in memory or emitting acceptance.
|
|
731
|
+
await this.persistItem(item, raw?.rawMessage);
|
|
732
|
+
this.queue.set(id, item);
|
|
733
|
+
this.pendingNewItemCount--;
|
|
734
|
+
slotPending = false;
|
|
735
|
+
}
|
|
736
|
+
finally {
|
|
737
|
+
if (slotPending)
|
|
738
|
+
this.pendingNewItemCount--;
|
|
500
739
|
}
|
|
501
|
-
this.queue.set(id, item);
|
|
502
740
|
// Update statistics
|
|
503
741
|
this.updateStats();
|
|
504
742
|
// Emit event
|
|
505
|
-
await
|
|
743
|
+
await this.emitItemEventSafely('itemEnqueued', item);
|
|
506
744
|
logger.log('info', `Item enqueued with ID ${id}, mode: ${mode}`);
|
|
507
745
|
this.wake();
|
|
508
746
|
return id;
|
|
@@ -512,22 +750,11 @@ export class UnifiedDeliveryQueue extends EventEmitter {
|
|
|
512
750
|
* @param id Item ID
|
|
513
751
|
*/
|
|
514
752
|
getItem(id) {
|
|
515
|
-
|
|
753
|
+
const item = this.queue.get(id);
|
|
754
|
+
return item ? this[kQueueCreateItemSnapshot](item) : undefined;
|
|
516
755
|
}
|
|
517
756
|
listItems() {
|
|
518
|
-
return Array.from(this.queue.values()).map((item) => (
|
|
519
|
-
...item,
|
|
520
|
-
deliveredRecipients: [...(item.deliveredRecipients || [])],
|
|
521
|
-
terminalRecipients: [...(item.terminalRecipients || [])],
|
|
522
|
-
recipientStates: (item.recipientStates || []).map((state) => ({ ...state })),
|
|
523
|
-
bounceOperations: (item.bounceOperations || []).map((operation) => ({ ...operation })),
|
|
524
|
-
smtpTransactions: (item.smtpTransactions || []).map((transaction) => ({
|
|
525
|
-
...transaction,
|
|
526
|
-
recipients: [...transaction.recipients],
|
|
527
|
-
recipientResults: transaction.recipientResults?.map((result) => ({ ...result })),
|
|
528
|
-
transcript: transaction.transcript.map((entry) => ({ ...entry })),
|
|
529
|
-
})),
|
|
530
|
-
}));
|
|
757
|
+
return Array.from(this.queue.values()).map((item) => this[kQueueCreateItemSnapshot](item));
|
|
531
758
|
}
|
|
532
759
|
/**
|
|
533
760
|
* Mark an item as being processed
|
|
@@ -536,20 +763,21 @@ export class UnifiedDeliveryQueue extends EventEmitter {
|
|
|
536
763
|
async markProcessing(id) {
|
|
537
764
|
this.assertMutable();
|
|
538
765
|
const item = this.queue.get(id);
|
|
539
|
-
if (!item
|
|
540
|
-
|| !(item.status === 'pending'
|
|
541
|
-
|| (item.status === 'deferred' && item.nextAttempt <= new Date()))) {
|
|
766
|
+
if (!item)
|
|
542
767
|
return false;
|
|
543
|
-
|
|
544
|
-
await this.applyPersistedMutation(item, (updatedItem) => {
|
|
768
|
+
const updated = await this.applyPersistedMutation(item, (updatedItem) => {
|
|
545
769
|
updatedItem.status = 'processing';
|
|
546
770
|
updatedItem.attempts++;
|
|
547
771
|
updatedItem.updatedAt = new Date();
|
|
548
|
-
})
|
|
772
|
+
}, (currentItem) => (currentItem.status === 'pending'
|
|
773
|
+
|| (currentItem.status === 'deferred' && currentItem.nextAttempt <= new Date())));
|
|
774
|
+
if (!updated) {
|
|
775
|
+
return false;
|
|
776
|
+
}
|
|
549
777
|
// Update statistics
|
|
550
778
|
this.updateStats();
|
|
551
779
|
// Emit event
|
|
552
|
-
await
|
|
780
|
+
await this.emitItemEventSafely('itemProcessing', item);
|
|
553
781
|
logger.log('info', `Item ${id} marked as processing, attempt ${item.attempts}`);
|
|
554
782
|
return true;
|
|
555
783
|
}
|
|
@@ -563,16 +791,18 @@ export class UnifiedDeliveryQueue extends EventEmitter {
|
|
|
563
791
|
if (!item || item.status === 'delivered' || item.status === 'failed') {
|
|
564
792
|
return false;
|
|
565
793
|
}
|
|
566
|
-
await this.applyPersistedMutation(item, (updatedItem) => {
|
|
794
|
+
const updated = await this.applyPersistedMutation(item, (updatedItem) => {
|
|
567
795
|
updatedItem.status = 'delivered';
|
|
568
796
|
updatedItem.updatedAt = new Date();
|
|
569
797
|
updatedItem.deliveredAt = new Date();
|
|
570
|
-
});
|
|
798
|
+
}, (currentItem) => currentItem.status !== 'delivered' && currentItem.status !== 'failed');
|
|
799
|
+
if (!updated)
|
|
800
|
+
return false;
|
|
571
801
|
// Update statistics
|
|
572
802
|
this.totalProcessed++;
|
|
573
803
|
this.updateStats();
|
|
574
804
|
// Emit event
|
|
575
|
-
await
|
|
805
|
+
await this.emitItemEventSafely('itemDelivered', item);
|
|
576
806
|
logger.log('info', `Item ${id} marked as delivered after ${item.attempts} attempts`);
|
|
577
807
|
return true;
|
|
578
808
|
}
|
|
@@ -603,21 +833,23 @@ export class UnifiedDeliveryQueue extends EventEmitter {
|
|
|
603
833
|
if (retryable && item.attempts < this.options.maxRetries) {
|
|
604
834
|
// Calculate next retry time with exponential backoff
|
|
605
835
|
const delay = Math.min(this.options.baseRetryDelay * Math.pow(2, item.attempts - 1), this.options.maxRetryDelay);
|
|
606
|
-
await this.applyPersistedMutation(item, (updatedItem) => {
|
|
836
|
+
const updated = await this.applyPersistedMutation(item, (updatedItem) => {
|
|
607
837
|
updatedItem.status = 'deferred';
|
|
608
838
|
updatedItem.lastError = error;
|
|
609
839
|
updatedItem.nextAttempt = new Date(Date.now() + delay);
|
|
610
840
|
updatedItem.updatedAt = new Date();
|
|
611
|
-
});
|
|
841
|
+
}, (currentItem) => currentItem.status !== 'delivered' && currentItem.status !== 'failed');
|
|
842
|
+
if (!updated)
|
|
843
|
+
return { updated: false, terminal: true };
|
|
612
844
|
// Emit event
|
|
613
|
-
await
|
|
845
|
+
await this.emitItemEventSafely('itemDeferred', item);
|
|
614
846
|
logger.log('info', `Item ${id} deferred for ${delay}ms, attempt ${item.attempts}, error: ${error}`);
|
|
615
847
|
this.updateStats();
|
|
616
848
|
return { updated: true, status: 'deferred', terminal: false };
|
|
617
849
|
}
|
|
618
850
|
else {
|
|
619
851
|
// Mark as permanently failed
|
|
620
|
-
await this.applyPersistedMutation(item, (updatedItem) => {
|
|
852
|
+
const updated = await this.applyPersistedMutation(item, (updatedItem) => {
|
|
621
853
|
const now = new Date();
|
|
622
854
|
updatedItem.status = 'failed';
|
|
623
855
|
updatedItem.lastError = error;
|
|
@@ -660,11 +892,13 @@ export class UnifiedDeliveryQueue extends EventEmitter {
|
|
|
660
892
|
updatedItem.terminalRecipients = [...terminal];
|
|
661
893
|
updatedItem.bounceOperations = operations;
|
|
662
894
|
}
|
|
663
|
-
});
|
|
895
|
+
}, (currentItem) => currentItem.status !== 'delivered' && currentItem.status !== 'failed');
|
|
896
|
+
if (!updated)
|
|
897
|
+
return { updated: false, terminal: true };
|
|
664
898
|
// Update statistics
|
|
665
899
|
this.totalProcessed++;
|
|
666
900
|
// Emit event
|
|
667
|
-
await
|
|
901
|
+
await this.emitItemEventSafely('itemFailed', item);
|
|
668
902
|
logger.log('warn', `Item ${id} permanently failed after ${item.attempts} attempts, error: ${error}`);
|
|
669
903
|
}
|
|
670
904
|
this.updateStats();
|
|
@@ -695,7 +929,7 @@ export class UnifiedDeliveryQueue extends EventEmitter {
|
|
|
695
929
|
].slice(-20);
|
|
696
930
|
updatedItem.updatedAt = new Date();
|
|
697
931
|
});
|
|
698
|
-
await
|
|
932
|
+
await this.emitItemEventSafely('smtpTransaction', item, normalizedTransaction);
|
|
699
933
|
return true;
|
|
700
934
|
}
|
|
701
935
|
/** Replace one persisted SMTP attempt when its post-delivery diagnostics settle. */
|
|
@@ -704,9 +938,6 @@ export class UnifiedDeliveryQueue extends EventEmitter {
|
|
|
704
938
|
const item = this.queue.get(id);
|
|
705
939
|
if (!item)
|
|
706
940
|
return false;
|
|
707
|
-
const transactionIndex = (item.smtpTransactions || []).findIndex((value) => value.id === transactionId);
|
|
708
|
-
if (transactionIndex < 0)
|
|
709
|
-
return false;
|
|
710
941
|
const normalizedTransaction = {
|
|
711
942
|
...transaction,
|
|
712
943
|
queueItemId: id,
|
|
@@ -717,13 +948,18 @@ export class UnifiedDeliveryQueue extends EventEmitter {
|
|
|
717
948
|
: undefined,
|
|
718
949
|
transcript: normalizeSmtpTranscript(transaction.transcript),
|
|
719
950
|
};
|
|
720
|
-
await this.applyPersistedMutation(item, (updatedItem) => {
|
|
951
|
+
const updated = await this.applyPersistedMutation(item, (updatedItem) => {
|
|
721
952
|
const transactions = [...(updatedItem.smtpTransactions || [])];
|
|
953
|
+
const transactionIndex = transactions.findIndex((value) => value.id === transactionId);
|
|
954
|
+
if (transactionIndex < 0)
|
|
955
|
+
return;
|
|
722
956
|
transactions[transactionIndex] = normalizedTransaction;
|
|
723
957
|
updatedItem.smtpTransactions = transactions.slice(-20);
|
|
724
958
|
updatedItem.updatedAt = new Date();
|
|
725
|
-
});
|
|
726
|
-
|
|
959
|
+
}, (currentItem) => ((currentItem.smtpTransactions || []).some((value) => value.id === transactionId)));
|
|
960
|
+
if (!updated)
|
|
961
|
+
return false;
|
|
962
|
+
await this.emitItemEventSafely('smtpTransactionUpdated', item, normalizedTransaction);
|
|
727
963
|
return true;
|
|
728
964
|
}
|
|
729
965
|
/** Record recipients accepted after the SMTP final-response 250 checkpoint. */
|
|
@@ -866,10 +1102,9 @@ export class UnifiedDeliveryQueue extends EventEmitter {
|
|
|
866
1102
|
async markBounceOperationCompleted(itemId, operationId) {
|
|
867
1103
|
this.assertMutable();
|
|
868
1104
|
const item = this.queue.get(itemId);
|
|
869
|
-
|
|
870
|
-
if (!item || !operation || operation.state === 'completed')
|
|
1105
|
+
if (!item)
|
|
871
1106
|
return false;
|
|
872
|
-
await this.applyPersistedMutation(item, (updatedItem) => {
|
|
1107
|
+
const updated = await this.applyPersistedMutation(item, (updatedItem) => {
|
|
873
1108
|
const updatedOperation = updatedItem.bounceOperations?.find((candidate) => candidate.operationId === operationId);
|
|
874
1109
|
if (!updatedOperation)
|
|
875
1110
|
return;
|
|
@@ -877,16 +1112,15 @@ export class UnifiedDeliveryQueue extends EventEmitter {
|
|
|
877
1112
|
updatedOperation.completedAt = new Date();
|
|
878
1113
|
delete updatedOperation.lastError;
|
|
879
1114
|
updatedItem.updatedAt = new Date();
|
|
880
|
-
});
|
|
881
|
-
return
|
|
1115
|
+
}, (currentItem) => Boolean(currentItem.bounceOperations?.some((operation) => operation.operationId === operationId && operation.state !== 'completed')));
|
|
1116
|
+
return updated;
|
|
882
1117
|
}
|
|
883
1118
|
async markBounceOperationFailed(itemId, operationId, error) {
|
|
884
1119
|
this.assertMutable();
|
|
885
1120
|
const item = this.queue.get(itemId);
|
|
886
|
-
|
|
887
|
-
if (!item || !operation || operation.state === 'completed')
|
|
1121
|
+
if (!item)
|
|
888
1122
|
return false;
|
|
889
|
-
await this.applyPersistedMutation(item, (updatedItem) => {
|
|
1123
|
+
const updated = await this.applyPersistedMutation(item, (updatedItem) => {
|
|
890
1124
|
const updatedOperation = updatedItem.bounceOperations?.find((candidate) => candidate.operationId === operationId);
|
|
891
1125
|
if (!updatedOperation)
|
|
892
1126
|
return;
|
|
@@ -894,8 +1128,8 @@ export class UnifiedDeliveryQueue extends EventEmitter {
|
|
|
894
1128
|
updatedOperation.lastError = error;
|
|
895
1129
|
updatedOperation.nextAttempt = new Date(Date.now() + Math.min(60_000 * (2 ** Math.max(0, updatedOperation.attempts - 1)), 3_600_000));
|
|
896
1130
|
updatedItem.updatedAt = new Date();
|
|
897
|
-
});
|
|
898
|
-
return
|
|
1131
|
+
}, (currentItem) => Boolean(currentItem.bounceOperations?.some((operation) => operation.operationId === operationId && operation.state !== 'completed')));
|
|
1132
|
+
return updated;
|
|
899
1133
|
}
|
|
900
1134
|
/**
|
|
901
1135
|
* Remove an item from the queue
|
|
@@ -903,33 +1137,55 @@ export class UnifiedDeliveryQueue extends EventEmitter {
|
|
|
903
1137
|
*/
|
|
904
1138
|
async removeItem(id) {
|
|
905
1139
|
this.assertMutable();
|
|
906
|
-
|
|
907
|
-
|
|
1140
|
+
let removedItem;
|
|
1141
|
+
const removed = await this.withItemMutex(id, async () => {
|
|
1142
|
+
const item = this.queue.get(id);
|
|
1143
|
+
if (!item)
|
|
1144
|
+
return false;
|
|
1145
|
+
if (item.status === 'processing') {
|
|
1146
|
+
throw new Error(`Cannot remove queue item ${id} while it is processing`);
|
|
1147
|
+
}
|
|
1148
|
+
if (item.idempotencyKey && item.idempotencyFingerprint) {
|
|
1149
|
+
await this.persistIdempotencyTombstone(item.id, item.idempotencyKey, item.idempotencyFingerprint);
|
|
1150
|
+
}
|
|
1151
|
+
// Delete durable state before making the removal visible in memory.
|
|
1152
|
+
await this.removeItemFromStorage(id);
|
|
1153
|
+
removedItem = item;
|
|
1154
|
+
this.queue.delete(id);
|
|
1155
|
+
return true;
|
|
1156
|
+
});
|
|
1157
|
+
if (!removed || !removedItem)
|
|
908
1158
|
return false;
|
|
909
|
-
}
|
|
910
|
-
if (item.idempotencyKey && item.idempotencyFingerprint) {
|
|
911
|
-
await this.persistIdempotencyTombstone(item.id, item.idempotencyKey, item.idempotencyFingerprint);
|
|
912
|
-
}
|
|
913
|
-
// Delete durable state before making the removal visible in memory.
|
|
914
|
-
await this.removeItemFromStorage(id);
|
|
915
|
-
this.queue.delete(id);
|
|
916
1159
|
// Update statistics
|
|
917
1160
|
this.updateStats();
|
|
918
1161
|
// Emit event
|
|
919
|
-
await
|
|
1162
|
+
await this.emitItemEventSafely('itemRemoved', removedItem);
|
|
920
1163
|
logger.log('info', `Item ${id} removed from queue`);
|
|
921
1164
|
return true;
|
|
922
1165
|
}
|
|
923
1166
|
storageKey(id) {
|
|
924
1167
|
return `${this.options.storagePrefix}${id}.json`;
|
|
925
1168
|
}
|
|
926
|
-
async persistItem(item) {
|
|
1169
|
+
async persistItem(item, rawMessageArg) {
|
|
927
1170
|
if (!this.options.storageManager)
|
|
928
1171
|
return;
|
|
929
|
-
|
|
1172
|
+
if (item.messageFormat === 'raw-rfc822' && !rawMessageArg) {
|
|
1173
|
+
throw new Error(`Raw queue item ${item.id} requires its exact payload for persistence`);
|
|
1174
|
+
}
|
|
1175
|
+
await this.options.storageManager.set(this.storageKey(item.id), serialize(this.serializeItem(item, rawMessageArg)));
|
|
930
1176
|
}
|
|
931
|
-
|
|
932
|
-
|
|
1177
|
+
async persistCurrentItem(itemArg) {
|
|
1178
|
+
if (itemArg.messageFormat !== 'raw-rfc822') {
|
|
1179
|
+
await this.persistItem(itemArg);
|
|
1180
|
+
return;
|
|
1181
|
+
}
|
|
1182
|
+
await this.withRawByteReservation(weightedRawBytes(itemArg.rawMessageLength, RAW_ACCESS_RESERVATION_MULTIPLIER), async () => {
|
|
1183
|
+
const rawMessage = await this.readVerifiedRawMessage(itemArg);
|
|
1184
|
+
await this.persistItem(itemArg, rawMessage);
|
|
1185
|
+
}, true);
|
|
1186
|
+
}
|
|
1187
|
+
serializeItem(item, rawMessageArg) {
|
|
1188
|
+
const storedItem = {
|
|
933
1189
|
schemaVersion: 2,
|
|
934
1190
|
id: item.id,
|
|
935
1191
|
...(item.idempotencyKey !== undefined ? {
|
|
@@ -973,20 +1229,201 @@ export class UnifiedDeliveryQueue extends EventEmitter {
|
|
|
973
1229
|
transcript: normalizeSmtpTranscript(transaction.transcript),
|
|
974
1230
|
})),
|
|
975
1231
|
};
|
|
1232
|
+
if (item.messageFormat !== 'raw-rfc822')
|
|
1233
|
+
return storedItem;
|
|
1234
|
+
if (!rawMessageArg) {
|
|
1235
|
+
throw new Error(`Raw queue item ${item.id} cannot be persisted without its exact payload`);
|
|
1236
|
+
}
|
|
1237
|
+
return {
|
|
1238
|
+
...storedItem,
|
|
1239
|
+
schemaVersion: 3,
|
|
1240
|
+
messageFormat: 'raw-rfc822',
|
|
1241
|
+
rawMessageSha256: item.rawMessageSha256,
|
|
1242
|
+
rawMessageLength: item.rawMessageLength,
|
|
1243
|
+
smtpEnvelope: cloneRawSmtpEnvelope(item.smtpEnvelope),
|
|
1244
|
+
rawMessage: rawMessageArg,
|
|
1245
|
+
};
|
|
976
1246
|
}
|
|
977
|
-
async
|
|
1247
|
+
async withItemMutex(itemIdArg, operationArg) {
|
|
1248
|
+
const previous = this.itemMutationFlights.get(itemIdArg) || Promise.resolve();
|
|
1249
|
+
const result = previous.catch(() => undefined).then(operationArg);
|
|
1250
|
+
const settled = result.then(() => undefined, () => undefined);
|
|
1251
|
+
this.itemMutationFlights.set(itemIdArg, settled);
|
|
1252
|
+
try {
|
|
1253
|
+
return await result;
|
|
1254
|
+
}
|
|
1255
|
+
finally {
|
|
1256
|
+
if (this.itemMutationFlights.get(itemIdArg) === settled) {
|
|
1257
|
+
this.itemMutationFlights.delete(itemIdArg);
|
|
1258
|
+
}
|
|
1259
|
+
}
|
|
1260
|
+
}
|
|
1261
|
+
async applyPersistedMutation(item, mutation, shouldMutateArg = () => true) {
|
|
978
1262
|
this.assertMutable();
|
|
979
|
-
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
|
|
1263
|
+
return this.withItemMutex(item.id, async () => {
|
|
1264
|
+
const currentItem = this.queue.get(item.id);
|
|
1265
|
+
if (!currentItem || !shouldMutateArg(currentItem))
|
|
1266
|
+
return false;
|
|
1267
|
+
const updatedItem = this[kQueueCreateItemSnapshot](currentItem);
|
|
1268
|
+
mutation(updatedItem);
|
|
1269
|
+
await this.persistCurrentItem(updatedItem);
|
|
1270
|
+
for (const key of Object.keys(currentItem)) {
|
|
1271
|
+
delete currentItem[key];
|
|
1272
|
+
}
|
|
1273
|
+
Object.assign(currentItem, updatedItem);
|
|
1274
|
+
return true;
|
|
1275
|
+
});
|
|
1276
|
+
}
|
|
1277
|
+
createRawIntegrityError(itemArg, detailArg) {
|
|
1278
|
+
return new SmtpDeliveryError({
|
|
1279
|
+
message: `Raw queue payload integrity failure for item ${itemArg.id}: ${detailArg}`,
|
|
1280
|
+
errorType: 'raw_queue_integrity',
|
|
1281
|
+
retryable: false,
|
|
1282
|
+
phase: 'message_body',
|
|
1283
|
+
transactionLog: [],
|
|
1284
|
+
recipients: itemArg.smtpEnvelope?.to || [],
|
|
1285
|
+
});
|
|
1286
|
+
}
|
|
1287
|
+
async readVerifiedRawMessage(itemArg) {
|
|
1288
|
+
const storageManager = this.options.storageManager;
|
|
1289
|
+
if (!storageManager) {
|
|
1290
|
+
throw this.createRawIntegrityError(itemArg, 'managed storage is unavailable');
|
|
1291
|
+
}
|
|
1292
|
+
const data = await storageManager.get(this.storageKey(itemArg.id));
|
|
1293
|
+
if (!data) {
|
|
1294
|
+
throw this.createRawIntegrityError(itemArg, 'atomic queue blob is missing');
|
|
1295
|
+
}
|
|
1296
|
+
let stored;
|
|
1297
|
+
try {
|
|
1298
|
+
stored = this.deserializeItem(this.storageKey(itemArg.id), data);
|
|
1299
|
+
}
|
|
1300
|
+
catch (error) {
|
|
1301
|
+
throw this.createRawIntegrityError(itemArg, getErrorMessage(error));
|
|
1302
|
+
}
|
|
1303
|
+
if (stored.item.messageFormat !== 'raw-rfc822'
|
|
1304
|
+
|| !stored.rawMessage
|
|
1305
|
+
|| stored.item.rawMessageSha256 !== itemArg.rawMessageSha256
|
|
1306
|
+
|| stored.item.rawMessageLength !== itemArg.rawMessageLength
|
|
1307
|
+
|| stored.item.idempotencyFingerprint !== itemArg.idempotencyFingerprint
|
|
1308
|
+
|| JSON.stringify(stored.item.smtpEnvelope) !== JSON.stringify(itemArg.smtpEnvelope)) {
|
|
1309
|
+
throw this.createRawIntegrityError(itemArg, 'stored metadata does not match memory state');
|
|
1310
|
+
}
|
|
1311
|
+
return stored.rawMessage;
|
|
1312
|
+
}
|
|
1313
|
+
claimRawReservation(allowDuringShutdownArg = false) {
|
|
1314
|
+
if (this.lifecycleState === 'closed'
|
|
1315
|
+
|| (!allowDuringShutdownArg && !this.acceptingRawReservations)) {
|
|
1316
|
+
throw new Error(`Delivery queue is ${this.lifecycleState}; raw payload access is unavailable`);
|
|
1317
|
+
}
|
|
1318
|
+
if (this.rawReservationCount >= RAW_RESERVATION_LIMIT) {
|
|
1319
|
+
throw new Error(`Raw payload reservation limit ${RAW_RESERVATION_LIMIT} reached`);
|
|
1320
|
+
}
|
|
1321
|
+
this.rawReservationCount++;
|
|
1322
|
+
let released = false;
|
|
1323
|
+
return () => {
|
|
1324
|
+
if (released)
|
|
1325
|
+
return;
|
|
1326
|
+
released = true;
|
|
1327
|
+
this.rawReservationCount--;
|
|
1328
|
+
if (this.rawReservationCount === 0) {
|
|
1329
|
+
for (const resolve of this.rawReservationDrainWaiters.splice(0))
|
|
1330
|
+
resolve();
|
|
1331
|
+
}
|
|
1332
|
+
};
|
|
1333
|
+
}
|
|
1334
|
+
createRawByteRelease(bytesArg, releaseReservationArg) {
|
|
1335
|
+
let released = false;
|
|
1336
|
+
return () => {
|
|
1337
|
+
if (released)
|
|
1338
|
+
return;
|
|
1339
|
+
released = true;
|
|
1340
|
+
this.releaseRawBytes(bytesArg);
|
|
1341
|
+
releaseReservationArg();
|
|
986
1342
|
};
|
|
987
|
-
|
|
988
|
-
|
|
989
|
-
|
|
1343
|
+
}
|
|
1344
|
+
async reserveRawBytes(bytesArg, allowDuringShutdownArg = false) {
|
|
1345
|
+
if (!Number.isSafeInteger(bytesArg) || bytesArg < 1) {
|
|
1346
|
+
throw new Error('Raw payload memory reservation must be a positive safe integer');
|
|
1347
|
+
}
|
|
1348
|
+
if (bytesArg > this.options.rawInFlightByteBudget) {
|
|
1349
|
+
throw new Error(`Raw payload memory reservation ${bytesArg} exceeds queue budget ${this.options.rawInFlightByteBudget}`);
|
|
1350
|
+
}
|
|
1351
|
+
const releaseReservation = this.claimRawReservation(allowDuringShutdownArg);
|
|
1352
|
+
if (this.rawByteWaiters.length === 0 && this.rawBytesInFlight + bytesArg <= this.options.rawInFlightByteBudget) {
|
|
1353
|
+
this.rawBytesInFlight += bytesArg;
|
|
1354
|
+
return this.createRawByteRelease(bytesArg, releaseReservation);
|
|
1355
|
+
}
|
|
1356
|
+
if (this.rawByteWaiters.length >= RAW_BYTE_WAITER_LIMIT) {
|
|
1357
|
+
releaseReservation();
|
|
1358
|
+
throw new Error(`Raw payload memory waiter limit ${RAW_BYTE_WAITER_LIMIT} reached`);
|
|
1359
|
+
}
|
|
1360
|
+
return new Promise((resolve, reject) => {
|
|
1361
|
+
this.rawByteWaiters.push({
|
|
1362
|
+
bytes: bytesArg,
|
|
1363
|
+
resolve: () => resolve(this.createRawByteRelease(bytesArg, releaseReservation)),
|
|
1364
|
+
reject: (error) => {
|
|
1365
|
+
releaseReservation();
|
|
1366
|
+
reject(error);
|
|
1367
|
+
},
|
|
1368
|
+
});
|
|
1369
|
+
});
|
|
1370
|
+
}
|
|
1371
|
+
reserveRawBytesImmediately(bytesArg) {
|
|
1372
|
+
if (!Number.isSafeInteger(bytesArg) || bytesArg < 1) {
|
|
1373
|
+
throw new Error('Raw payload memory reservation must be a positive safe integer');
|
|
1374
|
+
}
|
|
1375
|
+
if (bytesArg > this.options.rawInFlightByteBudget) {
|
|
1376
|
+
throw new Error(`Raw payload memory reservation ${bytesArg} exceeds queue budget ${this.options.rawInFlightByteBudget}`);
|
|
1377
|
+
}
|
|
1378
|
+
const releaseReservation = this.claimRawReservation();
|
|
1379
|
+
if (this.rawByteWaiters.length > 0
|
|
1380
|
+
|| this.rawBytesInFlight + bytesArg > this.options.rawInFlightByteBudget) {
|
|
1381
|
+
releaseReservation();
|
|
1382
|
+
throw new Error('Raw payload memory budget is currently exhausted');
|
|
1383
|
+
}
|
|
1384
|
+
this.rawBytesInFlight += bytesArg;
|
|
1385
|
+
return this.createRawByteRelease(bytesArg, releaseReservation);
|
|
1386
|
+
}
|
|
1387
|
+
[kQueueReserveRawAccess](rawMessageLengthArg) {
|
|
1388
|
+
return this.reserveRawBytesImmediately(weightedRawBytes(rawMessageLengthArg, RAW_ACCESS_RESERVATION_MULTIPLIER));
|
|
1389
|
+
}
|
|
1390
|
+
releaseRawBytes(bytesArg) {
|
|
1391
|
+
this.rawBytesInFlight -= bytesArg;
|
|
1392
|
+
while (this.rawByteWaiters.length > 0) {
|
|
1393
|
+
const waiter = this.rawByteWaiters[0];
|
|
1394
|
+
if (this.rawBytesInFlight + waiter.bytes > this.options.rawInFlightByteBudget)
|
|
1395
|
+
break;
|
|
1396
|
+
this.rawByteWaiters.shift();
|
|
1397
|
+
this.rawBytesInFlight += waiter.bytes;
|
|
1398
|
+
waiter.resolve();
|
|
1399
|
+
}
|
|
1400
|
+
}
|
|
1401
|
+
async withRawByteReservation(bytesArg, callbackArg, allowDuringShutdownArg = false) {
|
|
1402
|
+
const releaseReservation = await this.reserveRawBytes(bytesArg, allowDuringShutdownArg);
|
|
1403
|
+
try {
|
|
1404
|
+
return await callbackArg();
|
|
1405
|
+
}
|
|
1406
|
+
finally {
|
|
1407
|
+
releaseReservation();
|
|
1408
|
+
}
|
|
1409
|
+
}
|
|
1410
|
+
async waitForRawReservationsToDrain() {
|
|
1411
|
+
if (this.rawReservationCount === 0)
|
|
1412
|
+
return;
|
|
1413
|
+
await new Promise((resolve) => {
|
|
1414
|
+
this.rawReservationDrainWaiters.push(resolve);
|
|
1415
|
+
});
|
|
1416
|
+
}
|
|
1417
|
+
async [kQueueWithRawMessage](itemIdArg, callbackArg) {
|
|
1418
|
+
const item = this.queue.get(itemIdArg);
|
|
1419
|
+
if (!item || item.messageFormat !== 'raw-rfc822' || !item.rawMessageLength) {
|
|
1420
|
+
throw new Error(`Queue item ${itemIdArg} is not a raw outbound item`);
|
|
1421
|
+
}
|
|
1422
|
+
const reservedBytes = weightedRawBytes(item.rawMessageLength, RAW_ACCESS_RESERVATION_MULTIPLIER);
|
|
1423
|
+
return this.withRawByteReservation(reservedBytes, async () => {
|
|
1424
|
+
const rawMessage = await this.readVerifiedRawMessage(item);
|
|
1425
|
+
return await callbackArg(rawMessage);
|
|
1426
|
+
});
|
|
990
1427
|
}
|
|
991
1428
|
async removeItemFromStorage(id) {
|
|
992
1429
|
await this.options.storageManager?.delete(this.storageKey(id));
|
|
@@ -1019,7 +1456,7 @@ export class UnifiedDeliveryQueue extends EventEmitter {
|
|
|
1019
1456
|
throw new Error(`Invalid managed queue item at ${key}: idempotency id mismatch`);
|
|
1020
1457
|
}
|
|
1021
1458
|
}
|
|
1022
|
-
if (parsed.schemaVersion !== 1 && parsed.schemaVersion !== 2) {
|
|
1459
|
+
if (parsed.schemaVersion !== 1 && parsed.schemaVersion !== 2 && parsed.schemaVersion !== 3) {
|
|
1023
1460
|
throw new Error(`Invalid managed queue item at ${key}: unsupported schema version`);
|
|
1024
1461
|
}
|
|
1025
1462
|
if (this.storageKey(parsed.id) !== key) {
|
|
@@ -1044,7 +1481,7 @@ export class UnifiedDeliveryQueue extends EventEmitter {
|
|
|
1044
1481
|
|| parsed.terminalRecipients.some((value) => typeof value !== 'string'))) {
|
|
1045
1482
|
throw new Error(`Invalid managed queue item at ${key}: invalid terminal recipients`);
|
|
1046
1483
|
}
|
|
1047
|
-
if (parsed.schemaVersion === 2) {
|
|
1484
|
+
if (parsed.schemaVersion === 2 || parsed.schemaVersion === 3) {
|
|
1048
1485
|
if (!Array.isArray(parsed.recipientStates)
|
|
1049
1486
|
|| parsed.recipientStates.some((value) => {
|
|
1050
1487
|
if (!value || typeof value !== 'object')
|
|
@@ -1221,9 +1658,65 @@ export class UnifiedDeliveryQueue extends EventEmitter {
|
|
|
1221
1658
|
catch (error) {
|
|
1222
1659
|
throw new Error(`Invalid managed queue item at ${key}: ${getErrorMessage(error)}`);
|
|
1223
1660
|
}
|
|
1661
|
+
let rawMessage;
|
|
1662
|
+
let smtpEnvelope;
|
|
1663
|
+
if (parsed.schemaVersion === 3) {
|
|
1664
|
+
if (!this.hasPaginatedManagedStorage()) {
|
|
1665
|
+
throw new Error(`Invalid managed queue item at ${key}: raw queue requires paginated storage`);
|
|
1666
|
+
}
|
|
1667
|
+
if (parsed.messageFormat !== 'raw-rfc822'
|
|
1668
|
+
|| parsed.processingMode !== 'mta'
|
|
1669
|
+
|| parsed.route !== undefined
|
|
1670
|
+
|| parsed.attachmentCount !== 0
|
|
1671
|
+
|| typeof parsed.rawMessageSha256 !== 'string'
|
|
1672
|
+
|| !/^[a-f0-9]{64}$/.test(parsed.rawMessageSha256)
|
|
1673
|
+
|| !Number.isSafeInteger(parsed.rawMessageLength)
|
|
1674
|
+
|| parsed.rawMessageLength < 1
|
|
1675
|
+
|| parsed.rawMessageLength > this.options.maxRawMessageBytes
|
|
1676
|
+
|| !Buffer.isBuffer(parsed.rawMessage)
|
|
1677
|
+
|| parsed.rawMessage.length !== parsed.rawMessageLength) {
|
|
1678
|
+
throw new Error(`Invalid managed queue item at ${key}: invalid raw payload metadata`);
|
|
1679
|
+
}
|
|
1680
|
+
try {
|
|
1681
|
+
assertCanonicalRawRfc822Message(parsed.rawMessage);
|
|
1682
|
+
}
|
|
1683
|
+
catch (error) {
|
|
1684
|
+
throw new Error(`Invalid managed queue item at ${key}: ${getErrorMessage(error)}`);
|
|
1685
|
+
}
|
|
1686
|
+
let normalizedEnvelope;
|
|
1687
|
+
try {
|
|
1688
|
+
normalizedEnvelope = normalizeRawSmtpEnvelope(parsed.smtpEnvelope);
|
|
1689
|
+
}
|
|
1690
|
+
catch (error) {
|
|
1691
|
+
throw new Error(`Invalid managed queue item at ${key}: ${getErrorMessage(error)}`);
|
|
1692
|
+
}
|
|
1693
|
+
if (JSON.stringify(normalizedEnvelope) !== JSON.stringify(parsed.smtpEnvelope)) {
|
|
1694
|
+
throw new Error(`Invalid managed queue item at ${key}: SMTP envelope is not canonical`);
|
|
1695
|
+
}
|
|
1696
|
+
const digest = createHash('sha256').update(parsed.rawMessage).digest('hex');
|
|
1697
|
+
if (digest !== parsed.rawMessageSha256) {
|
|
1698
|
+
throw new Error(`Invalid managed queue item at ${key}: raw payload digest mismatch`);
|
|
1699
|
+
}
|
|
1700
|
+
if (parsed.idempotencyFingerprint
|
|
1701
|
+
!== createRawQueueFingerprint(parsed.rawMessage, normalizedEnvelope)) {
|
|
1702
|
+
throw new Error(`Invalid managed queue item at ${key}: raw queue fingerprint mismatch`);
|
|
1703
|
+
}
|
|
1704
|
+
if (storedOptions.from !== normalizedEnvelope.from
|
|
1705
|
+
|| JSON.stringify(Array.isArray(storedOptions.to) ? storedOptions.to : [storedOptions.to])
|
|
1706
|
+
!== JSON.stringify(normalizedEnvelope.to)
|
|
1707
|
+
|| storedOptions.subject !== ''
|
|
1708
|
+
|| storedOptions.text !== ''
|
|
1709
|
+
|| storedOptions.html !== undefined
|
|
1710
|
+
|| storedOptions.attachments !== undefined
|
|
1711
|
+
|| storedOptions.headers !== undefined) {
|
|
1712
|
+
throw new Error(`Invalid managed queue item at ${key}: raw queue Email metadata is not minimal`);
|
|
1713
|
+
}
|
|
1714
|
+
rawMessage = parsed.rawMessage;
|
|
1715
|
+
smtpEnvelope = normalizedEnvelope;
|
|
1716
|
+
}
|
|
1224
1717
|
let recipientStates;
|
|
1225
1718
|
let bounceOperations;
|
|
1226
|
-
if (parsed.schemaVersion === 2) {
|
|
1719
|
+
if (parsed.schemaVersion === 2 || parsed.schemaVersion === 3) {
|
|
1227
1720
|
recipientStates = parsed.recipientStates.map((state) => ({
|
|
1228
1721
|
...state,
|
|
1229
1722
|
updatedAt: parseDate(state.updatedAt, 'recipient state updatedAt'),
|
|
@@ -1250,7 +1743,7 @@ export class UnifiedDeliveryQueue extends EventEmitter {
|
|
|
1250
1743
|
}
|
|
1251
1744
|
bounceOperations = [];
|
|
1252
1745
|
}
|
|
1253
|
-
|
|
1746
|
+
const item = {
|
|
1254
1747
|
id: parsed.id,
|
|
1255
1748
|
...(parsed.idempotencyKey !== undefined ? {
|
|
1256
1749
|
idempotencyKey: parsed.idempotencyKey,
|
|
@@ -1258,6 +1751,12 @@ export class UnifiedDeliveryQueue extends EventEmitter {
|
|
|
1258
1751
|
} : {}),
|
|
1259
1752
|
processingMode: parsed.processingMode,
|
|
1260
1753
|
processingResult,
|
|
1754
|
+
...(parsed.schemaVersion === 3 ? {
|
|
1755
|
+
messageFormat: 'raw-rfc822',
|
|
1756
|
+
rawMessageSha256: parsed.rawMessageSha256,
|
|
1757
|
+
rawMessageLength: parsed.rawMessageLength,
|
|
1758
|
+
smtpEnvelope: cloneRawSmtpEnvelope(smtpEnvelope),
|
|
1759
|
+
} : {}),
|
|
1261
1760
|
attachmentCount: parsed.attachmentCount ?? processingResult.attachments.length,
|
|
1262
1761
|
...(parsed.route ? { route: parsed.route } : {}),
|
|
1263
1762
|
status: parsed.status,
|
|
@@ -1286,24 +1785,27 @@ export class UnifiedDeliveryQueue extends EventEmitter {
|
|
|
1286
1785
|
}))
|
|
1287
1786
|
: [],
|
|
1288
1787
|
};
|
|
1788
|
+
return {
|
|
1789
|
+
item,
|
|
1790
|
+
...(rawMessage ? { rawMessage } : {}),
|
|
1791
|
+
};
|
|
1289
1792
|
}
|
|
1290
1793
|
async loadFromStorage() {
|
|
1291
1794
|
const storageManager = this.options.storageManager;
|
|
1292
1795
|
if (!storageManager)
|
|
1293
1796
|
return;
|
|
1294
|
-
|
|
1295
|
-
const
|
|
1296
|
-
for (const key of keys) {
|
|
1797
|
+
let recoveredItemCount = 0;
|
|
1798
|
+
const loadKey = async (key) => {
|
|
1297
1799
|
if (!key.startsWith(this.options.storagePrefix)) {
|
|
1298
1800
|
throw new Error(`Blob storage returned a queue key outside ${this.options.storagePrefix}: ${key}`);
|
|
1299
1801
|
}
|
|
1300
1802
|
if (!key.endsWith('.json'))
|
|
1301
|
-
|
|
1803
|
+
return;
|
|
1302
1804
|
const data = await storageManager.get(key);
|
|
1303
1805
|
if (!data) {
|
|
1304
1806
|
throw new Error(`Managed queue item disappeared while loading: ${key}`);
|
|
1305
1807
|
}
|
|
1306
|
-
const item = this.deserializeItem(key, data);
|
|
1808
|
+
const { item, rawMessage } = this.deserializeItem(key, data);
|
|
1307
1809
|
if (this.queue.has(item.id)) {
|
|
1308
1810
|
throw new Error(`Duplicate managed queue item id: ${item.id}`);
|
|
1309
1811
|
}
|
|
@@ -1315,13 +1817,47 @@ export class UnifiedDeliveryQueue extends EventEmitter {
|
|
|
1315
1817
|
item.nextAttempt = new Date();
|
|
1316
1818
|
item.updatedAt = new Date();
|
|
1317
1819
|
item.lastError = 'Recovered after process restart during delivery';
|
|
1318
|
-
|
|
1820
|
+
await this.persistItem(item, rawMessage);
|
|
1821
|
+
recoveredItemCount++;
|
|
1319
1822
|
}
|
|
1320
1823
|
this.queue.set(item.id, item);
|
|
1824
|
+
};
|
|
1825
|
+
if (storageManager.listPage) {
|
|
1826
|
+
let continuationToken;
|
|
1827
|
+
const seenTokens = new Set();
|
|
1828
|
+
do {
|
|
1829
|
+
const page = await storageManager.listPage(this.options.storagePrefix, {
|
|
1830
|
+
limit: SMARTMTA_STORAGE_LIST_PAGE_MAX_LIMIT,
|
|
1831
|
+
...(continuationToken ? { continuationToken } : {}),
|
|
1832
|
+
});
|
|
1833
|
+
if (!page
|
|
1834
|
+
|| !Array.isArray(page.keys)
|
|
1835
|
+
|| page.keys.length > SMARTMTA_STORAGE_LIST_PAGE_MAX_LIMIT
|
|
1836
|
+
|| page.keys.some((key) => typeof key !== 'string')
|
|
1837
|
+
|| new Set(page.keys).size !== page.keys.length) {
|
|
1838
|
+
throw new Error('Invalid paginated managed queue listing');
|
|
1839
|
+
}
|
|
1840
|
+
for (const key of [...page.keys].sort())
|
|
1841
|
+
await loadKey(key);
|
|
1842
|
+
if (page.continuationToken !== undefined) {
|
|
1843
|
+
if (typeof page.continuationToken !== 'string'
|
|
1844
|
+
|| !page.continuationToken
|
|
1845
|
+
|| page.keys.length === 0
|
|
1846
|
+
|| seenTokens.has(page.continuationToken)) {
|
|
1847
|
+
throw new Error('Invalid paginated managed queue continuation token');
|
|
1848
|
+
}
|
|
1849
|
+
seenTokens.add(page.continuationToken);
|
|
1850
|
+
}
|
|
1851
|
+
continuationToken = page.continuationToken;
|
|
1852
|
+
} while (continuationToken);
|
|
1853
|
+
}
|
|
1854
|
+
else {
|
|
1855
|
+
for (const key of (await storageManager.list(this.options.storagePrefix)).sort()) {
|
|
1856
|
+
await loadKey(key);
|
|
1857
|
+
}
|
|
1321
1858
|
}
|
|
1322
|
-
await Promise.all(recoveredItems.map((item) => this.persistItem(item)));
|
|
1323
1859
|
this.updateStats();
|
|
1324
|
-
logger.log('info', `Loaded ${this.queue.size} items from managed blob storage; recovered ${
|
|
1860
|
+
logger.log('info', `Loaded ${this.queue.size} items from managed blob storage; recovered ${recoveredItemCount} interrupted item(s)`);
|
|
1325
1861
|
}
|
|
1326
1862
|
/**
|
|
1327
1863
|
* Update queue statistics
|
|
@@ -1371,13 +1907,19 @@ export class UnifiedDeliveryQueue extends EventEmitter {
|
|
|
1371
1907
|
// Set processing active
|
|
1372
1908
|
this.stats.processingActive = this.processing;
|
|
1373
1909
|
// Emit statistics event
|
|
1374
|
-
void emitSafely(this, 'statsUpdated', this.
|
|
1910
|
+
void emitSafely(this, 'statsUpdated', this.getStats());
|
|
1375
1911
|
}
|
|
1376
1912
|
/**
|
|
1377
1913
|
* Get queue statistics
|
|
1378
1914
|
*/
|
|
1379
1915
|
getStats() {
|
|
1380
|
-
return {
|
|
1916
|
+
return {
|
|
1917
|
+
...this.stats,
|
|
1918
|
+
status: { ...this.stats.status },
|
|
1919
|
+
modes: { ...this.stats.modes },
|
|
1920
|
+
...(this.stats.oldestItem ? { oldestItem: new Date(this.stats.oldestItem) } : {}),
|
|
1921
|
+
...(this.stats.newestItem ? { newestItem: new Date(this.stats.newestItem) } : {}),
|
|
1922
|
+
};
|
|
1381
1923
|
}
|
|
1382
1924
|
/**
|
|
1383
1925
|
* Pause queue processing
|
|
@@ -1432,34 +1974,47 @@ export class UnifiedDeliveryQueue extends EventEmitter {
|
|
|
1432
1974
|
/**
|
|
1433
1975
|
* Shutdown the queue
|
|
1434
1976
|
*/
|
|
1435
|
-
|
|
1977
|
+
shutdown() {
|
|
1978
|
+
if (this.shutdownFlight)
|
|
1979
|
+
return this.shutdownFlight;
|
|
1436
1980
|
if (this.lifecycleState === 'closed')
|
|
1437
|
-
return;
|
|
1981
|
+
return Promise.resolve();
|
|
1982
|
+
this.acceptingNewItems = false;
|
|
1983
|
+
this.acceptingMutations = false;
|
|
1984
|
+
this.acceptingRawReservations = false;
|
|
1985
|
+
this.shutdownFlight = this.shutdownOnce();
|
|
1986
|
+
return this.shutdownFlight;
|
|
1987
|
+
}
|
|
1988
|
+
async shutdownOnce() {
|
|
1438
1989
|
logger.log('info', 'Shutting down UnifiedDeliveryQueue');
|
|
1439
|
-
this.lifecycleState = 'shutting-down';
|
|
1440
1990
|
let persistenceError;
|
|
1441
1991
|
try {
|
|
1442
1992
|
// Stop processing (clears both check and cleanup timers).
|
|
1443
1993
|
this.stopProcessing();
|
|
1444
1994
|
const activeScan = this.processingScanPromise;
|
|
1445
1995
|
if (activeScan) {
|
|
1446
|
-
|
|
1447
|
-
|
|
1448
|
-
|
|
1449
|
-
|
|
1450
|
-
|
|
1451
|
-
}),
|
|
1452
|
-
]);
|
|
1453
|
-
if (drainTimer) {
|
|
1454
|
-
clearTimeout(drainTimer);
|
|
1455
|
-
}
|
|
1456
|
-
if (!scanDrained && this.processingScanPromise === activeScan) {
|
|
1457
|
-
this.processingScanPromise = undefined;
|
|
1458
|
-
logger.log('warn', `Delivery queue scan did not drain within ${this.processingScanShutdownTimeoutMs}ms; shutdown will continue`);
|
|
1459
|
-
}
|
|
1996
|
+
await activeScan;
|
|
1997
|
+
}
|
|
1998
|
+
await this.cleanupFlight;
|
|
1999
|
+
while (this.enqueueFlights.size > 0) {
|
|
2000
|
+
await Promise.allSettled([...this.enqueueFlights]);
|
|
1460
2001
|
}
|
|
2002
|
+
while (this.itemMutationFlights.size > 0) {
|
|
2003
|
+
await Promise.allSettled([...this.itemMutationFlights.values()]);
|
|
2004
|
+
}
|
|
2005
|
+
await this.waitForRawReservationsToDrain();
|
|
2006
|
+
this.lifecycleState = 'shutting-down';
|
|
1461
2007
|
if (this.options.storageManager) {
|
|
1462
|
-
|
|
2008
|
+
for (const itemId of [...this.queue.keys()]) {
|
|
2009
|
+
await this.withItemMutex(itemId, async () => {
|
|
2010
|
+
const currentItem = this.queue.get(itemId);
|
|
2011
|
+
// Raw records are immutable single blobs and every transition is
|
|
2012
|
+
// already persisted. Avoid rereading large payloads during shutdown.
|
|
2013
|
+
if (!currentItem || currentItem.messageFormat === 'raw-rfc822')
|
|
2014
|
+
return;
|
|
2015
|
+
await this.persistItem(currentItem);
|
|
2016
|
+
});
|
|
2017
|
+
}
|
|
1463
2018
|
}
|
|
1464
2019
|
}
|
|
1465
2020
|
catch (error) {
|
|
@@ -1473,6 +2028,7 @@ export class UnifiedDeliveryQueue extends EventEmitter {
|
|
|
1473
2028
|
this.updateStats();
|
|
1474
2029
|
await emitSafely(this, 'shutdown');
|
|
1475
2030
|
this.lifecycleState = 'closed';
|
|
2031
|
+
this.readyItemsHandler = undefined;
|
|
1476
2032
|
this.releaseManagedPrefix();
|
|
1477
2033
|
this.removeAllListeners();
|
|
1478
2034
|
}
|
|
@@ -1481,4 +2037,4 @@ export class UnifiedDeliveryQueue extends EventEmitter {
|
|
|
1481
2037
|
logger.log('info', 'UnifiedDeliveryQueue shut down successfully');
|
|
1482
2038
|
}
|
|
1483
2039
|
}
|
|
1484
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5kZWxpdmVyeS5xdWV1ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3RzL21haWwvZGVsaXZlcnkvY2xhc3Nlcy5kZWxpdmVyeS5xdWV1ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDekMsT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFFakQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBNEIsTUFBTSxpQkFBaUIsQ0FBQztBQUUzRCxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLDJCQUEyQixFQUMzQixxQ0FBcUMsRUFDckMsOEJBQThCLEdBQy9CLE1BQU0sOENBQThDLENBQUM7QUFFdEQsT0FBTyxFQUFFLEtBQUssRUFBc0IsTUFBTSwwQkFBMEIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBeUg1RCxNQUFNLENBQUMsTUFBTSwwQ0FBMEMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ25GLE1BQU0seUNBQXlDLEdBQUcsR0FBRyxDQUFDO0FBaUR0RDs7R0FFRztBQUNILFNBQVMsc0JBQXNCLENBQUMsU0FBUyxHQUFHLGVBQWU7SUFDekQsSUFDRSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDO1FBQzFCLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUM7UUFDeEIsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7UUFDeEIsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENB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
|
|
2040
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5kZWxpdmVyeS5xdWV1ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3RzL21haWwvZGVsaXZlcnkvY2xhc3Nlcy5kZWxpdmVyeS5xdWV1ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDekMsT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDakQsT0FBTyxFQUNMLG9DQUFvQyxHQUVyQyxNQUFNLDBCQUEwQixDQUFDO0FBQ2xDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQTRCLE1BQU0saUJBQWlCLENBQUM7QUFFM0QsT0FBTyxFQUNMLHVCQUF1QixFQUN2QiwyQkFBMkIsRUFDM0IscUNBQXFDLEVBQ3JDLDhCQUE4QixHQUMvQixNQUFNLDhDQUE4QyxDQUFDO0FBRXRELE9BQU8sRUFBRSxLQUFLLEVBQXNCLE1BQU0sMEJBQTBCLENBQUM7QUFDckUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzNELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUNqRixPQUFPLEVBQ0wsK0JBQStCLEVBQy9CLG9CQUFvQixFQUNwQix5QkFBeUIsRUFDekIsd0JBQXdCLEdBRXpCLE1BQU0sMEJBQTBCLENBQUM7QUFDbEMsT0FBTyxFQUNMLG9CQUFvQixFQUNwQix3QkFBd0IsRUFDeEIsZ0JBQWdCLEVBQ2hCLHNCQUFzQixFQUN0QiwwQkFBMEIsRUFDMUIsb0JBQW9CLEdBQ3JCLE1BQU0sNkJBQTZCLENBQUM7QUErSXJDLE1BQU0sQ0FBQyxNQUFNLDBDQUEwQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFDbkYsTUFBTSx5Q0FBeUMsR0FBRyxHQUFHLENBQUM7QUFDdEQsTUFBTSxDQUFDLE1BQU0sNkJBQTZCLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7QUFDOUQsTUFBTSxrQ0FBa0MsR0FBRyxDQUFDLENBQUM7QUFDN0MsTUFBTSxpQ0FBaUMsR0FBRyxDQUFDLENBQUM7QUFDNUMsTUFBTSxxQkFBcUIsR0FBRyxLQUFLLENBQUM7QUFDcEMsTUFBTSxxQkFBcUIsR0FBRyxLQUFLLENBQUM7QUFDcEMsTUFBTSxDQUFDLE1BQU0saUNBQWlDLEdBQUcsR0FBRyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7QUFFbkUsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLFFBQWdCLEVBQUUsYUFBcUIsRUFBVSxFQUFFO0lBQzNFLE1BQU0sYUFBYSxHQUFHLFFBQVEsR0FBRyxhQUFhLENBQUM7SUFDL0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLElBQUksYUFBYSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQzlELE1BQU0sSUFBSSxLQUFLLENBQUMsK0RBQStELENBQUMsQ0FBQztJQUNuRixDQUFDO0lBQ0QsT0FBTyxhQUFhLENBQUM7QUFDdkIsQ0FBQyxDQUFDO0FBMkRGOztHQUVHO0FBQ0gsU0FBUyxzQkFBc0IsQ0FBQyxTQUFTLEdBQUcsZUFBZTtJQUN6RCxJQUNFLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUM7UUFDMUIsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQztRQUN4QixTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztRQUN4QixTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUN4QixDQUFDO1FBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQyxnRUFBZ0UsQ0FBQyxDQUFDO0lBQ3BGLENBQUM7SUFDRCxNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNuRCxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsT0FBTyxJQUFJLE9BQU8sS0FBSyxHQUFHLElBQUksT0FBTyxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDaEYsTUFBTSxJQUFJLEtBQUssQ0FBQyxzREFBc0QsQ0FBQyxDQUFDO0lBQzFFLENBQUM7SUFDRCxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDO0FBdUJELE1BQU0sa0JBQWtCLEdBQ3RCLElBQUksT0FBTyxFQUEwRCxDQUFDO0FBRXhFOztHQUVHO0FBQ0gsTUFBTSxPQUFPLG9CQUFxQixTQUFRLFlBQVk7SUFDNUMsT0FBTyxDQVliO0lBQ00sS0FBSyxHQUE0QixJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQzNDLFVBQVUsQ0FBa0I7SUFDNUIsWUFBWSxDQUFrQjtJQUM5QixhQUFhLENBQWlCO0lBQzlCLEtBQUssQ0FBYztJQUNuQixVQUFVLEdBQVksS0FBSyxDQUFDO0lBQzVCLHFCQUFxQixDQUFpQjtJQUN0Qyx5QkFBeUIsR0FBRyxLQUFLLENBQUM7SUFDbEMsY0FBYyxHQUFXLENBQUMsQ0FBQztJQUMzQixpQkFBaUIsR0FBRyxLQUFLLENBQUM7SUFDMUIsY0FBYyxHQUF5QixLQUFLLENBQUM7SUFDcEMsd0JBQXdCLEdBQUcsSUFBSSxHQUFHLEVBRy9DLENBQUM7SUFDRyxpQ0FBaUMsQ0FBVTtJQUNsQyxtQkFBbUIsR0FBRyxJQUFJLEdBQUcsRUFBeUIsQ0FBQztJQUNoRSxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7SUFDckIsY0FBYyxHQUlqQixFQUFFLENBQUM7SUFDQSxtQkFBbUIsR0FBRyxDQUFDLENBQUM7SUFDeEIsMEJBQTBCLEdBQXNCLEVBQUUsQ0FBQztJQUNuRCxpQkFBaUIsQ0FBd0M7SUFDekQsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO0lBQ3pCLGtCQUFrQixHQUFHLElBQUksQ0FBQztJQUMxQix3QkFBd0IsR0FBRyxJQUFJLENBQUM7SUFDdkIsY0FBYyxHQUFHLElBQUksR0FBRyxFQUFtQixDQUFDO0lBQ3JELG1CQUFtQixHQUFHLENBQUMsQ0FBQztJQUN4QixjQUFjLENBQWlCO0lBRXZDOzs7T0FHRztJQUNILFlBQVksT0FBc0I7UUFDaEMsS0FBSyxFQUFFLENBQUM7UUFFUixJQUFJLE9BQU8sQ0FBQyxXQUFXLEtBQUssU0FBUyxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ2pFLE1BQU0sSUFBSSxLQUFLLENBQUMsdURBQXVELENBQUMsQ0FBQztRQUMzRSxDQUFDO1FBQ0QsSUFBSSxPQUFPLENBQUMsV0FBVyxLQUFLLFFBQVEsSUFBSSxPQUFPLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDL0QsTUFBTSxJQUFJLEtBQUssQ0FBQyxpRUFBaUUsQ0FBQyxDQUFDO1FBQ3JGLENBQUM7UUFDRCxNQUFNLGtCQUFrQixHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsSUFBSSw2QkFBNkIsQ0FBQztRQUN2RixNQUFNLDRCQUE0QixHQUFHLGdCQUFnQixDQUNuRCxrQkFBa0IsRUFDbEIsaUNBQWlDLENBQ2xDLENBQUM7UUFDRixNQUFNLHFCQUFxQixHQUFHLE9BQU8sQ0FBQyxxQkFBcUI7ZUFDdEQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxpQ0FBaUMsRUFBRSw0QkFBNEIsQ0FBQyxDQUFDO1FBQy9FLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLGtCQUFrQixDQUFDLElBQUksa0JBQWtCLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDeEUsTUFBTSxJQUFJLEtBQUssQ0FBQywwREFBMEQsQ0FBQyxDQUFDO1FBQzlFLENBQUM7UUFDRCxJQUNFLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxxQkFBcUIsQ0FBQztlQUN6QyxxQkFBcUIsR0FBRyw0QkFBNEIsRUFDdkQsQ0FBQztZQUNELE1BQU0sSUFBSSxLQUFLLENBQ2IsK0RBQStELDRCQUE0QixFQUFFLENBQzlGLENBQUM7UUFDSixDQUFDO1FBRUQsSUFBSSxDQUFDLE9BQU8sR0FBRztZQUNiLFdBQVcsRUFBRSxPQUFPLENBQUMsV0FBVztZQUNoQyxjQUFjLEVBQUUsT0FBTyxDQUFDLGNBQWM7WUFDdEMsYUFBYSxFQUFFLHNCQUFzQixDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUM7WUFDNUQsYUFBYSxFQUFFLE9BQU8sQ0FBQyxhQUFhLElBQUksS0FBSyxFQUFFLGFBQWE7WUFDNUQsWUFBWSxFQUFFLE9BQU8sQ0FBQyxZQUFZLElBQUksS0FBSztZQUMzQyxpQkFBaUIsRUFBRSxPQUFPLENBQUMsaUJBQWlCLElBQUksR0FBRztZQUNuRCxVQUFVLEVBQUUsT0FBTyxDQUFDLFVBQVUsSUFBSSxDQUFDO1lBQ25DLGNBQWMsRUFBRSxPQUFPLENBQUMsY0FBYyxJQUFJLEtBQUssRUFBRSxXQUFXO1lBQzVELGFBQWEsRUFBRSxPQUFPLENBQUMsYUFBYSxJQUFJLE9BQU8sRUFBRSxTQUFTO1lBQzFELGtCQUFrQjtZQUNsQixxQkFBcUI7U0FDdEIsQ0FBQztRQUVGLHdCQUF3QjtRQUN4QixJQUFJLENBQUMsS0FBSyxHQUFHO1lBQ1gsU0FBUyxFQUFFLENBQUM7WUFDWixNQUFNLEVBQUU7Z0JBQ04sT0FBTyxFQUFFLENBQUM7Z0JBQ1YsVUFBVSxFQUFFLENBQUM7Z0JBQ2IsU0FBUyxFQUFFLENBQUM7Z0JBQ1osTUFBTSxFQUFFLENBQUM7Z0JBQ1QsUUFBUSxFQUFFLENBQUM7YUFDWjtZQUNELEtBQUssRUFBRTtnQkFDTCxPQUFPLEVBQUUsQ0FBQztnQkFDVixHQUFHLEVBQUUsQ0FBQztnQkFDTixPQUFPLEVBQUUsQ0FBQzthQUNYO1lBQ0QsZUFBZSxFQUFFLENBQUM7WUFDbEIsY0FBYyxFQUFFLENBQUM7WUFDakIsZ0JBQWdCLEVBQUUsS0FBSztTQUN4QixDQUFDO0lBQ0osQ0FBQztJQUVPLGFBQWE7UUFDbkIsSUFDRSxDQUFDLElBQUksQ0FBQyxrQkFBa0I7ZUFDckIsSUFBSSxDQUFDLGNBQWMsS0FBSyxlQUFlO2VBQ3ZDLElBQUksQ0FBQyxjQUFjLEtBQUssUUFBUSxFQUNuQyxDQUFDO1lBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQyxxQkFBcUIsSUFBSSxDQUFDLGNBQWMsbUNBQW1DLENBQUMsQ0FBQztRQUMvRixDQUFDO0lBQ0gsQ0FBQztJQUVPLHVCQUF1QjtRQUM3QixJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDNUIsTUFBTSxJQUFJLEtBQUssQ0FBQywyQ0FBMkMsQ0FBQyxDQUFDO1FBQy9ELENBQUM7SUFDSCxDQUFDO0lBRU8sa0JBQWtCLENBQUMsWUFBbUM7UUFDNUQsSUFBSSxNQUF1QixDQUFDO1FBQzVCLE1BQU0sR0FBRyxPQUFPLENBQUMsT0FBTyxFQUFFO2FBQ3ZCLElBQUksQ0FBQyxZQUFZLENBQUM7YUFDbEIsT0FBTyxDQUFDLEdBQUcsRUFBRTtZQUNaLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3JDLENBQUMsQ0FBQyxDQUFDO1FBQ0wsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDaEMsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVELCtFQUErRTtJQUN4RSxpQkFBaUI7UUFDdEIsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUM7SUFDdkMsQ0FBQztJQUVELHVFQUF1RTtJQUNoRSwwQkFBMEI7UUFDL0IsT0FBTyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFLFFBQVEsS0FBSyxVQUFVLENBQUM7SUFDckUsQ0FBQztJQUVNLENBQUMsb0JBQW9CLENBQUM7UUFDM0IsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQztJQUNqQyxDQUFDO0lBRU0sQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLFVBQWlEO1FBQ25GLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxVQUFVLENBQUM7SUFDdEMsQ0FBQztJQUVPLFVBQVUsQ0FBQyxRQUFlO1FBQ2hDLE1BQU0sT0FBTyxHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQWtCLENBQUM7UUFDbkYsT0FBTyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUM7YUFDdEIsWUFBWSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsQ0FBQzthQUNyQyxlQUFlLENBQUMsUUFBUSxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVNLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxPQUFtQjtRQUNuRCxPQUFPO1lBQ0wsR0FBRyxPQUFPO1lBQ1YsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUM7WUFDM0QsR0FBRyxDQUFDLE9BQU8sQ0FBQyxZQUFZO2dCQUN0QixDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsb0JBQW9CLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxFQUFFO2dCQUM5RCxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ1AsR0FBRyxDQUFDLE9BQU8sQ0FBQyxLQUFLO2dCQUNmLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxXQUFXLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBZ0IsRUFBRTtnQkFDakUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNQLFdBQVcsRUFBRSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDO1lBQzFDLFNBQVMsRUFBRSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDO1lBQ3RDLFNBQVMsRUFBRSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDO1lBQ3RDLEdBQUcsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQzlFLG1CQUFtQixFQUFFLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUM3RCxrQkFBa0IsRUFBRSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsa0JBQWtCLElBQUksRUFBRSxDQUFDLENBQUM7WUFDM0QsZUFBZSxFQUFFLENBQUMsT0FBTyxDQUFDLGVBQWUsSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQy9ELEdBQUcsS0FBSztnQkFDUixTQUFTLEVBQUUsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQzthQUNyQyxDQUFDLENBQUM7WUFDSCxnQkFBZ0IsRUFBRSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ3JFLEdBQUcsU0FBUztnQkFDWixXQUFXLEVBQUUsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQztnQkFDNUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7YUFDbkYsQ0FBQyxDQUFDO1lBQ0gsZ0JBQWdCLEVBQUUsQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUN2RSxHQUFHLFdBQVc7Z0JBQ2QsVUFBVSxFQUFFLENBQUMsR0FBRyxXQUFXLENBQUMsVUFBVSxDQUFDO2dCQUN2QyxnQkFBZ0IsRUFBRSxXQUFXLENBQUMsZ0JBQWdCLEVBQUUsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxNQUFNLEVBQUUsQ0FBQyxDQUFDO2dCQUNoRixzQkFBc0IsRUFBRSxXQUFXLENBQUMsc0JBQXNCO29CQUN4RCxDQUFDLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsc0JBQXNCLENBQUMsQ0FBQztvQkFDNUQsQ0FBQyxDQUFDLFNBQVM7Z0JBQ2IsVUFBVSxFQUFFLFdBQVcsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO29CQUNqRCxHQUFHLEtBQUs7b0JBQ1IsR0FBRyxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUUsYUFBYSxFQUFFLEVBQUUsR0FBRyxLQUFLLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2lCQUM5RSxDQUFDLENBQUM7YUFDSixDQUFDLENBQUM7U0FDSixDQUFDO0lBQ0osQ0FBQztJQUVPLEtBQUssQ0FBQyxtQkFBbUIsQ0FDL0IsWUFBb0IsRUFDcEIsT0FBbUIsRUFDbkIsR0FBRyxpQkFBNEI7UUFFL0IsS0FBSyxNQUFNLFdBQVcsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUM7WUFDMUQsSUFBSSxDQUFDO2dCQUNILE1BQU0sT0FBTyxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsSUFBSSxFQUFFO29CQUNyQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxPQUFPLENBQUM7b0JBQ3ZDLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO2lCQUM3QyxDQUFDLENBQUM7WUFDTCxDQUFDO1lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztnQkFDZixNQUFNLENBQUMsR0FBRyxDQUNSLE9BQU8sRUFDUCxnQkFBZ0IsWUFBWSxZQUFZLGVBQWUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUNqRSxDQUFDO1lBQ0osQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRU8sS0FBSyxDQUFDLG9CQUFvQixDQUFDLFFBQXNCO1FBQ3ZELEtBQUssTUFBTSxXQUFXLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO1lBQzFELElBQUksQ0FBQztnQkFDSCxNQUFNLE9BQU8sQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLElBQUksRUFBRTtvQkFDckMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7aUJBQzdELENBQUMsQ0FBQztZQUNMLENBQUM7WUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO2dCQUNmLE1BQU0sQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLG1DQUFtQyxlQUFlLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ25GLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVPLGlCQUFpQixDQUFDLGNBQXNCO1FBQzlDLE9BQU8sY0FBYyxVQUFVLENBQUMsUUFBUSxDQUFDO2FBQ3RDLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQzthQUM3QixNQUFNLENBQUMsY0FBYyxDQUFDO2FBQ3RCLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFTywwQkFBMEI7UUFDaEMsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDO0lBQ25FLENBQUM7SUFFTyx1QkFBdUIsQ0FBQyxFQUFVO1FBQ3hDLE9BQU8sR0FBRyxJQUFJLENBQUMsMEJBQTBCLEVBQUUsR0FBRyxFQUFFLE9BQU8sQ0FBQztJQUMxRCxDQUFDO0lBRU8sS0FBSyxDQUFDLHdCQUF3QixDQUNwQyxFQUFVO1FBRVYsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUM7UUFDbkQsSUFBSSxDQUFDLGNBQWM7WUFBRSxPQUFPLElBQUksQ0FBQztRQUNqQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDN0MsTUFBTSxLQUFLLEdBQUcsTUFBTSxjQUFjLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzVDLElBQUksQ0FBQyxLQUFLO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDeEIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDakUsSUFBSSxTQUFTLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO1lBQ3RDLE1BQU0sY0FBYyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNqQyxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFDRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRU8seUJBQXlCLENBQy9CLEtBQWEsRUFDYixHQUFXLEVBQ1gsVUFBa0I7UUFFbEIsSUFBSSxTQUEyQyxDQUFDO1FBQ2hELElBQUksQ0FBQztZQUNILFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQXFDLENBQUM7UUFDckYsQ0FBQztRQUFDLE1BQU0sQ0FBQztZQUNQLE1BQU0sSUFBSSxLQUFLLENBQUMsMENBQTBDLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDbkUsQ0FBQztRQUNELElBQ0UsU0FBUyxFQUFFLGFBQWEsS0FBSyxDQUFDO2VBQzNCLFNBQVMsQ0FBQyxFQUFFLEtBQUssVUFBVTtlQUMzQixPQUFPLFNBQVMsQ0FBQyxjQUFjLEtBQUssUUFBUTtlQUM1QyxDQUFDLFNBQVMsQ0FBQyxjQUFjO2VBQ3pCLFNBQVMsQ0FBQyxjQUFjLENBQUMsTUFBTSxHQUFHLEdBQUc7ZUFDckMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsS0FBSyxVQUFVO2VBQy9ELE9BQU8sU0FBUyxDQUFDLHNCQUFzQixLQUFLLFFBQVE7ZUFDcEQsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLHNCQUFzQixDQUFDO2VBQ3hELENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLEVBQ3hDLENBQUM7WUFDRCxNQUFNLElBQUksS0FBSyxDQUFDLDBDQUEwQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ25FLENBQUM7UUFDRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRU8sS0FBSyxDQUFDLDJCQUEyQixDQUN2QyxFQUFVLEVBQ1YsY0FBc0IsRUFDdEIsc0JBQThCO1FBRTlCLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDO1FBQ25ELElBQUksQ0FBQyxjQUFjO1lBQUUsT0FBTztRQUM1QixNQUFNLFNBQVMsR0FBcUM7WUFDbEQsYUFBYSxFQUFFLENBQUM7WUFDaEIsRUFBRTtZQUNGLGNBQWM7WUFDZCxzQkFBc0I7WUFDdEIsU0FBUyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRywwQ0FBMEM7U0FDbkUsQ0FBQztRQUNGLE1BQU0sY0FBYyxDQUFDLEdBQUcsQ0FDdEIsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEVBQUUsQ0FBQyxFQUNoQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FDdkMsQ0FBQztJQUNKLENBQUM7SUFFTyxLQUFLLENBQUMsbUNBQW1DLENBQy9DLEtBQUssR0FBRyx5Q0FBeUM7UUFFakQsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUM7UUFDbkQsSUFBSSxDQUFDLGNBQWMsRUFBRSxRQUFRLElBQUksS0FBSyxHQUFHLENBQUM7WUFBRSxPQUFPO1FBQ25ELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1FBQ2pELE1BQU0sSUFBSSxHQUFHLE1BQU0sY0FBYyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUU7WUFDakQsS0FBSztZQUNMLEdBQUcsQ0FBQyxJQUFJLENBQUMsaUNBQWlDO2dCQUN4QyxDQUFDLENBQUMsRUFBRSxpQkFBaUIsRUFBRSxJQUFJLENBQUMsaUNBQWlDLEVBQUU7Z0JBQy9ELENBQUMsQ0FBQyxFQUFFLENBQUM7U0FDUixDQUFDLENBQUM7UUFDSCxJQUNFLENBQUMsSUFBSTtlQUNGLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO2VBQ3pCLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUs7ZUFDeEIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLE9BQU8sR0FBRyxLQUFLLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7ZUFDM0UsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU07ZUFDNUMsQ0FDRCxJQUFJLENBQUMsaUJBQWlCLEtBQUssU0FBUzttQkFDakMsQ0FDRCxPQUFPLElBQUksQ0FBQyxpQkFBaUIsS0FBSyxRQUFRO3VCQUN2QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxLQUFLLENBQUM7dUJBQ25DLElBQUksQ0FBQyxpQkFBaUIsS0FBSyxJQUFJLENBQUMsaUNBQWlDLENBQ3JFLENBQ0YsRUFDRCxDQUFDO1lBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQyx1REFBdUQsQ0FBQyxDQUFDO1FBQzNFLENBQUM7UUFDRCxJQUFJLENBQUMsaUNBQWlDLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDO1FBQ2hFLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN2QixLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUM1QixNQUFNLEtBQUssR0FBRyxNQUFNLGNBQWMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDNUMsSUFBSSxDQUFDLEtBQUs7Z0JBQUUsU0FBUztZQUNyQixJQUFJLENBQUM7Z0JBQ0gsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztvQkFDM0IsTUFBTSxJQUFJLEtBQUssQ0FBQyw0Q0FBNEMsR0FBRyxFQUFFLENBQUMsQ0FBQztnQkFDckUsQ0FBQztnQkFDRCxNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3JELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUNqRSxJQUFJLFNBQVMsQ0FBQyxTQUFTLElBQUksR0FBRyxFQUFFLENBQUM7b0JBQy9CLE1BQU0sY0FBYyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDbkMsQ0FBQztZQUNILENBQUM7WUFBQyxNQUFNLENBQUM7Z0JBQ1AsTUFBTSxjQUFjLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ25DLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVPLDRCQUE0QixDQUFDLEtBQVk7UUFDL0MsTUFBTSxXQUFXLEdBQUcsSUFBSSxHQUFHLEVBQW1DLENBQUM7UUFDL0QsTUFBTSxHQUFHLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUN2QixLQUFLLE1BQU0sU0FBUyxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLENBQUM7WUFDakQsTUFBTSxtQkFBbUIsR0FBRyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDM0QsSUFBSSxDQUFDLG1CQUFtQixJQUFJLFdBQVcsQ0FBQyxHQUFHLENBQUMsbUJBQW1CLENBQUM7Z0JBQUUsU0FBUztZQUMzRSxXQUFXLENBQUMsR0FBRyxDQUFDLG1CQUFtQixFQUFFO2dCQUNuQyxTQUFTO2dCQUNULG1CQUFtQjtnQkFDbkIsS0FBSyxFQUFFLFlBQVk7Z0JBQ25CLFNBQVMsRUFBRSxHQUFHO2FBQ2YsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUNELE9BQU8sQ0FBQyxHQUFHLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFTyx1QkFBdUIsQ0FDN0IsTUFBYyxFQUNkLG1CQUEyQixFQUMzQixPQUFpQyxhQUFhO1FBRTlDLE9BQU8sVUFBVSxDQUFDLFFBQVEsQ0FBQzthQUN4QixNQUFNLENBQUMsTUFBTSxDQUFDO2FBQ2QsTUFBTSxDQUFDLElBQUksQ0FBQzthQUNaLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQzthQUMzQixNQUFNLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQzthQUNuQixNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkIsQ0FBQztJQUVEOztPQUVHO0lBQ0ssa0JBQWtCO1FBQ3hCLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDO1FBQ25ELElBQUksQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLGlCQUFpQjtZQUFFLE9BQU87UUFDdEQsSUFBSSxNQUFNLEdBQUcsa0JBQWtCLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNaLE1BQU0sR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ25CLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDakQsQ0FBQztRQUNELE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUM3RCxJQUFJLGFBQWEsSUFBSSxhQUFhLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDNUMsTUFBTSxJQUFJLEtBQUssQ0FDYix3QkFBd0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLHVDQUF1QyxDQUMxRixDQUFDO1FBQ0osQ0FBQztRQUNELE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztJQUNoQyxDQUFDO0lBRU8sb0JBQW9CO1FBQzFCLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDO1FBQ25ELElBQUksQ0FBQyxjQUFjLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCO1lBQUUsT0FBTztRQUN2RCxNQUFNLE1BQU0sR0FBRyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDdEQsSUFBSSxNQUFNLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDckQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQzFDLElBQUksTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDO2dCQUFFLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNuRSxDQUFDO1FBQ0QsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQztJQUNqQyxDQUFDO0lBRU0sS0FBSyxDQUFDLFVBQVUsQ0FBQyxhQUE0QyxFQUFFO1FBQ3BFLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLG1DQUFtQyxDQUFDLENBQUM7UUFFeEQsSUFBSSxJQUFJLENBQUMsY0FBYyxLQUFLLEtBQUssRUFBRSxDQUFDO1lBQ2xDLE1BQU0sSUFBSSxLQUFLLENBQUMseUNBQXlDLElBQUksQ0FBQyxjQUFjLFFBQVEsQ0FBQyxDQUFDO1FBQ3hGLENBQUM7UUFFRCxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUM7WUFDSCxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ2hDLE1BQU0sSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQy9CLENBQUM7WUFDRCxJQUFJLENBQUMsY0FBYyxHQUFHLGFBQWEsQ0FBQztZQUVwQyw4RUFBOEU7WUFDOUUsSUFBSSxVQUFVLENBQUMsZUFBZSxLQUFLLEtBQUssRUFBRSxDQUFDO2dCQUN6QyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDekIsQ0FBQztZQUVELHlCQUF5QjtZQUN6QixNQUFNLFVBQVUsQ0FBQyxJQUFJLEVBQUUsYUFBYSxDQUFDLENBQUM7WUFDdEMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsK0NBQStDLENBQUMsQ0FBQztRQUN0RSxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO1lBQzVCLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1lBQzVCLE1BQU0sQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLCtCQUFnQyxLQUFlLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUMvRSxNQUFNLEtBQUssQ0FBQztRQUNkLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxlQUFlO1FBQ3JCLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3BCLGFBQWEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDakMsQ0FBQztRQUVELElBQUksQ0FBQyxVQUFVLEdBQUcsV0FBVyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRTdFLHNFQUFzRTtRQUN0RSxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN0QixhQUFhLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ25DLENBQUM7UUFDRCxJQUFJLENBQUMsWUFBWSxHQUFHLFdBQVcsQ0FBQyxHQUFHLEVBQUU7WUFDbkMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDNUIsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFFbkIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFDdkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7UUFDbkMsS0FBSyxVQUFVLENBQUMsSUFBSSxFQUFFLG1CQUFtQixDQUFDLENBQUM7UUFDM0MsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsMEJBQTBCLENBQUMsQ0FBQztRQUMvQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDZCxDQUFDO0lBRU8sa0JBQWtCO1FBQ3hCLElBQUksSUFBSSxDQUFDLGFBQWE7WUFBRSxPQUFPO1FBQy9CLElBQUksYUFBNEIsQ0FBQztRQUNqQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7YUFDdEQsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQzthQUNyQixLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNmLE1BQU0sQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLHdCQUF3QixlQUFlLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3hFLENBQUMsQ0FBQzthQUNELE9BQU8sQ0FBQyxHQUFHLEVBQUU7WUFDWixJQUFJLElBQUksQ0FBQyxhQUFhLEtBQUssYUFBYSxFQUFFLENBQUM7Z0JBQ3pDLElBQUksQ0FBQyxhQUFhLEdBQUcsU0FBUyxDQUFDO1lBQ2pDLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNMLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO0lBQ3JDLENBQUM7SUFFRDs7T0FFRztJQUNLLGNBQWM7UUFDcEIsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDcEIsYUFBYSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUMvQixJQUFJLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQztRQUM5QixDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDdEIsYUFBYSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUNqQyxJQUFJLENBQUMsWUFBWSxHQUFHLFNBQVMsQ0FBQztRQUNoQyxDQUFDO1FBRUQsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDeEIsSUFBSSxDQUFDLHlCQUF5QixHQUFHLEtBQUssQ0FBQztRQUN2QyxJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztRQUNwQyxLQUFLLFVBQVUsQ0FBQyxJQUFJLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztRQUMzQyxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSwwQkFBMEIsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFRDs7T0FFRztJQUNLLEtBQUssQ0FBQyxZQUFZO1FBQ3hCLElBQUksQ0FBQztZQUNILE1BQU0sR0FBRyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7WUFDdkIsTUFBTSxVQUFVLEdBQWlCLEVBQUUsQ0FBQztZQUVwQyxrQ0FBa0M7WUFDbEMsS0FBSyxNQUFNLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7Z0JBQ3ZDLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxTQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLFVBQVUsSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQ3pGLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3hCLENBQUM7WUFDSCxDQUFDO1lBRUQsSUFBSSxVQUFVLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUM1QixPQUFPO1lBQ1QsQ0FBQztZQUVELHVCQUF1QjtZQUN2QixVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFFekUsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDckIsT0FBTztZQUNULENBQUM7WUFFRCxNQUFNLFlBQVksR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDdkQsTUFBTSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQztZQUNsRCxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3pDLE1BQU0sSUFBSSxDQUFDLG9CQUFvQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQzlDLENBQUM7WUFDRCxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxTQUFTLFVBQVUsQ0FBQyxNQUFNLDZCQUE2QixDQUFDLENBQUM7WUFFNUUsb0JBQW9CO1lBQ3BCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNyQixDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE1BQU0sQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLDJCQUEyQixlQUFlLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3pFLE1BQU0sVUFBVSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDekMsQ0FBQztJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSSxJQUFJO1FBQ1QsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVO1lBQUUsT0FBTztRQUM3QixJQUFJLENBQUMseUJBQXlCLEdBQUcsSUFBSSxDQUFDO1FBQ3RDLElBQUksSUFBSSxDQUFDLHFCQUFxQjtZQUFFLE9BQU87UUFFdkMsMkVBQTJFO1FBQzNFLHdFQUF3RTtRQUN4RSxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLENBQUM7UUFDNUUsSUFBSSxDQUFDLHFCQUFxQixHQUFHLFdBQVcsQ0FBQztRQUN6QyxLQUFLLFdBQVcsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFO1lBQzVCLElBQUksSUFBSSxDQUFDLHFCQUFxQixLQUFLLFdBQVcsRUFBRSxDQUFDO2dCQUMvQyxJQUFJLENBQUMscUJBQXFCLEdBQUcsU0FBUyxDQUFDO1lBQ3pDLENBQUM7WUFDRCxJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7Z0JBQ3RELElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNkLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxLQUFLLENBQUMsa0JBQWtCO1FBQzlCLE9BQU8sSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQztZQUN6RCxJQUFJLENBQUMseUJBQXlCLEdBQUcsS0FBSyxDQUFDO1lBQ3ZDLE1BQU0sSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzVCLENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxPQUFPLENBQ1osZ0JBQXVCLEVBQ3ZCLElBQXlCLEVBQ3pCLEtBQW1CLEVBQ25CLGlCQUF1QyxFQUFFO1FBRXpDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztRQUMvQixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUN2RCxnQkFBZ0IsRUFDaEIsSUFBSSxFQUNKLEtBQUssRUFDTCxjQUFjLENBQ2YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLEtBQUssQ0FBQyxlQUFlLENBQzNCLGdCQUF1QixFQUN2QixJQUF5QixFQUN6QixLQUE4QixFQUM5QixjQUFvQztRQUVwQyxJQUFJLENBQUMsQ0FBQyxnQkFBZ0IsWUFBWSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3pDLE1BQU0sSUFBSSxLQUFLLENBQUMsa0RBQWtELENBQUMsQ0FBQztRQUN0RSxDQUFDO1FBRUQsSUFBSSxjQUFjLENBQUMsY0FBYyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUNsRSxNQUFNLElBQUksS0FBSyxDQUFDLDJEQUEyRCxDQUFDLENBQUM7UUFDL0UsQ0FBQztRQUNELElBQ0UsQ0FBQyxjQUFjLENBQUMsY0FBYyxLQUFLLFNBQVMsQ0FBQztnQkFDekMsQ0FBQyxjQUFjLENBQUMsc0JBQXNCLEtBQUssU0FBUyxDQUFDLEVBQ3pELENBQUM7WUFDRCxNQUFNLElBQUksS0FBSyxDQUFDLDJFQUEyRSxDQUFDLENBQUM7UUFDL0YsQ0FBQztRQUNELElBQUksY0FBYyxDQUFDLGNBQWMsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNoRCxPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FDM0IsY0FBYyxDQUFDLGNBQWMsRUFDN0IsY0FBYyxDQUFDLHNCQUF1QixFQUN0QyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUM3RSxDQUFDO1FBQ0osQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxVQUFtQztRQUMzRCxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7UUFDL0IsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLENBQUM7WUFDOUIsTUFBTSxJQUFJLEtBQUssQ0FBQyxtREFBbUQsQ0FBQyxDQUFDO1FBQ3ZFLENBQUM7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLDBCQUEwQixFQUFFLEVBQUUsQ0FBQztZQUN2QyxNQUFNLElBQUksS0FBSyxDQUFDLDZEQUE2RCxDQUFDLENBQUM7UUFDakYsQ0FBQztRQUNELElBQUksQ0FBQyxVQUFVLENBQUMsY0FBYyxJQUFJLFVBQVUsQ0FBQyxjQUFjLENBQUMsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDO1lBQ3pFLE1BQU0sSUFBSSxLQUFLLENBQUMsdURBQXVELENBQUMsQ0FBQztRQUMzRSxDQUFDO1FBQ0QsSUFBSSxDQUFDO1lBQ0gsK0JBQStCLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3pELENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7Z0JBQzVDLE1BQU0sSUFBSSxLQUFLLENBQUMsNkNBQTZDLENBQUMsQ0FBQztZQUNqRSxDQUFDO1lBQ0QsTUFBTSxLQUFLLENBQUM7UUFDZCxDQUFDO1FBQ0QsSUFBSSxVQUFVLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDbkUsTUFBTSxJQUFJLEtBQUssQ0FDYixzQ0FBc0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsUUFBUSxDQUM5RSxDQUFDO1FBQ0osQ0FBQztRQUNELE1BQU0scUJBQXFCLEdBQUcsSUFBSSxDQUFDLDBCQUEwQixDQUMzRCxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxrQ0FBa0MsQ0FBQyxDQUNuRixDQUFDO1FBQ0YsSUFBSSxVQUFrQixDQUFDO1FBQ3ZCLElBQUksWUFBOEIsQ0FBQztRQUNuQyxJQUFJLGdCQUF3QixDQUFDO1FBQzdCLElBQUksV0FBbUIsQ0FBQztRQUN4QixJQUFJLGdCQUF1QixDQUFDO1FBQzVCLElBQUksQ0FBQztZQUNILFVBQVUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNoRCwrQkFBK0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUM1QyxZQUFZLEdBQUcsd0JBQXdCLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzdELGdCQUFnQixHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3pFLFdBQVcsR0FBRyx5QkFBeUIsQ0FBQyxVQUFVLEVBQUUsWUFBWSxDQUFDLENBQUM7WUFDbEUsZ0JBQWdCLEdBQUcsSUFBSSxLQUFLLENBQUM7Z0JBQzNCLElBQUksRUFBRSxZQUFZLENBQUMsSUFBSTtnQkFDdkIsRUFBRSxFQUFFLFlBQVksQ0FBQyxFQUFFO2dCQUNuQixPQUFPLEVBQUUsRUFBRTtnQkFDWCxJQUFJLEVBQUUsRUFBRTthQUNULENBQUMsQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hDLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YscUJBQXFCLEVBQUUsQ0FBQztZQUN4QixNQUFNLEtBQUssQ0FBQztRQUNkLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLElBQUksRUFBRTtZQUN4QyxJQUFJLENBQUM7Z0JBQ0gsT0FBTyxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztvQkFDbkMsVUFBVTtvQkFDVixZQUFZO29CQUNaLGNBQWMsRUFBRSxVQUFVLENBQUMsY0FBYztvQkFDekMsZ0JBQWdCO29CQUNoQixXQUFXO29CQUNYLGdCQUFnQjtpQkFDakIsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztvQkFBUyxDQUFDO2dCQUNULHFCQUFxQixFQUFFLENBQUM7WUFDMUIsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxVQU9oQztRQUNDLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUMzQixVQUFVLENBQUMsY0FBYyxFQUN6QixVQUFVLENBQUMsV0FBVyxFQUN0QixDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FDOUIsVUFBVSxDQUFDLGdCQUFnQixFQUMzQixLQUFLLEVBQ0wsU0FBUyxFQUNULFdBQVcsRUFDWDtZQUNFLFVBQVUsRUFBRSxVQUFVLENBQUMsVUFBVTtZQUNqQyxnQkFBZ0IsRUFBRSxVQUFVLENBQUMsZ0JBQWdCO1lBQzdDLFlBQVksRUFBRSxVQUFVLENBQUMsWUFBWTtTQUN0QyxDQUNGLENBQ0YsQ0FBQztJQUNKLENBQUM7SUFFTyxLQUFLLENBQUMsaUJBQWlCLENBQzdCLGlCQUF5QixFQUN6QixjQUFzQixFQUN0QixTQUlxQjtRQUVyQixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDekUsTUFBTSxJQUFJLEtBQUssQ0FBQyxxRUFBcUUsQ0FBQyxDQUFDO1FBQ3pGLENBQUM7UUFDRCxJQUFJLENBQUMsaUJBQWlCLElBQUksaUJBQWlCLENBQUMsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDO1lBQ3pELE1BQU0sSUFBSSxLQUFLLENBQUMsdURBQXVELENBQUMsQ0FBQztRQUMzRSxDQUFDO1FBQ0QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDO1lBQzNDLE1BQU0sSUFBSSxLQUFLLENBQUMsaUVBQWlFLENBQUMsQ0FBQztRQUNyRixDQUFDO1FBRUQsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDckQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDcEMsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUNiLElBQ0UsUUFBUSxDQUFDLGNBQWMsS0FBSyxpQkFBaUI7bUJBQzFDLFFBQVEsQ0FBQyxzQkFBc0IsS0FBSyxjQUFjLEVBQ3JELENBQUM7Z0JBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQyx1Q0FBdUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUMvRCxDQUFDO1lBQ0QsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDO1FBRUQsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMzRCxJQUFJLFlBQVksRUFBRSxDQUFDO1lBQ2pCLElBQUksWUFBWSxDQUFDLFdBQVcsS0FBSyxjQUFjLEVBQUUsQ0FBQztnQkFDaEQsTUFBTSxJQUFJLEtBQUssQ0FBQyx1Q0FBdUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUMvRCxDQUFDO1lBQ0QsT0FBTyxZQUFZLENBQUMsT0FBTyxDQUFDO1FBQzlCLENBQUM7UUFDRCxNQUFNLE1BQU0sR0FBRyxDQUFDLEtBQUssSUFBSSxFQUFFO1lBQ3pCLE1BQU0sU0FBUyxHQUFHLE1BQU0sSUFBSSxDQUFDLHdCQUF3QixDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzFELElBQUksU0FBUyxFQUFFLENBQUM7Z0JBQ2QsSUFDRSxTQUFTLENBQUMsY0FBYyxLQUFLLGlCQUFpQjt1QkFDM0MsU0FBUyxDQUFDLHNCQUFzQixLQUFLLGNBQWMsRUFDdEQsQ0FBQztvQkFDRCxNQUFNLElBQUksS0FBSyxDQUFDLHVDQUF1QyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUMvRCxDQUFDO2dCQUNELE9BQU8sRUFBRSxDQUFDO1lBQ1osQ0FBQztZQUNELE9BQU8sU0FBUyxDQUFDO2dCQUNmLEVBQUU7Z0JBQ0YsY0FBYyxFQUFFLGlCQUFpQjtnQkFDakMsc0JBQXNCLEVBQUUsY0FBYzthQUN2QyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ0wsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ3hGLElBQUksQ0FBQztZQUNILE9BQU8sTUFBTSxNQUFNLENBQUM7UUFDdEIsQ0FBQztnQkFBUyxDQUFDO1lBQ1QsSUFBSSxJQUFJLENBQUMsd0JBQXdCLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLE9BQU8sS0FBSyxNQUFNLEVBQUUsQ0FBQztnQkFDOUQsSUFBSSxDQUFDLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUMzQyxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFTyxLQUFLLENBQUMsVUFBVSxDQUN0QixnQkFBdUIsRUFDdkIsSUFBeUIsRUFDekIsS0FBbUIsRUFDbkIsV0FJQyxFQUNELEdBSUM7UUFFRCxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQzVFLE1BQU0sSUFBSSxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDbkMsQ0FBQztRQUNELElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQzNCLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQztRQUN2QixJQUFJLEVBQVUsQ0FBQztRQUNmLElBQUksSUFBZ0IsQ0FBQztRQUNyQixJQUFJLENBQUM7WUFDSCxFQUFFLEdBQUcsV0FBVyxFQUFFLEVBQUU7bUJBQ2YsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDcEUsSUFBSSxHQUFHO2dCQUNMLEVBQUU7Z0JBQ0YsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7b0JBQ2hCLGNBQWMsRUFBRSxXQUFXLENBQUMsY0FBYztvQkFDMUMsc0JBQXNCLEVBQUUsV0FBVyxDQUFDLHNCQUFzQjtpQkFDM0QsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNQLGNBQWMsRUFBRSxJQUFJO2dCQUNwQixnQkFBZ0I7Z0JBQ2hCLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO29CQUNSLGFBQWEsRUFBRSxZQUFxQjtvQkFDcEMsZ0JBQWdCLEVBQUUsR0FBRyxDQUFDLGdCQUFnQjtvQkFDdEMsZ0JBQWdCLEVBQUUsR0FBRyxDQUFDLFVBQVUsQ0FBQyxNQUFNO29CQUN2QyxZQUFZLEVBQUUsb0JBQW9CLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQztpQkFDckQsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNQLGVBQWUsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLE1BQU07Z0JBQzlELEtBQUs7Z0JBQ0wsTUFBTSxFQUFFLFNBQVM7Z0JBQ2pCLFFBQVEsRUFBRSxDQUFDO2dCQUNYLFdBQVcsRUFBRSxJQUFJLElBQUksRUFBRTtnQkFDdkIsU0FBUyxFQUFFLElBQUksSUFBSSxFQUFFO2dCQUNyQixTQUFTLEVBQUUsSUFBSSxJQUFJLEVBQUU7Z0JBQ3JCLG1CQUFtQixFQUFFLEVBQUU7Z0JBQ3ZCLGtCQUFrQixFQUFFLEVBQUU7Z0JBQ3RCLGVBQWUsRUFBRSxJQUFJLENBQUMsNEJBQTRCLENBQUMsZ0JBQWdCLENBQUM7Z0JBQ3BFLGdCQUFnQixFQUFFLEVBQUU7Z0JBQ3BCLGdCQUFnQixFQUFFLEVBQUU7YUFDckIsQ0FBQztZQUVGLGtGQUFrRjtZQUNsRixNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxVQUFVLENBQUMsQ0FBQztZQUM5QyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDekIsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7WUFDM0IsV0FBVyxHQUFHLEtBQUssQ0FBQztRQUN0QixDQUFDO2dCQUFTLENBQUM7WUFDVCxJQUFJLFdBQVc7Z0JBQUUsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDOUMsQ0FBQztRQUVELG9CQUFvQjtRQUNwQixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFFbkIsYUFBYTtRQUNiLE1BQU0sSUFBSSxDQUFDLG1CQUFtQixDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNyRCxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSx5QkFBeUIsRUFBRSxXQUFXLElBQUksRUFBRSxDQUFDLENBQUM7UUFDakUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBRVosT0FBTyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksT0FBTyxDQUFDLEVBQVU7UUFDdkIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDaEMsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDakUsQ0FBQztJQUVNLFNBQVM7UUFDZCxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUM3RixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksS0FBSyxDQUFDLGNBQWMsQ0FBQyxFQUFVO1FBQ3BDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNyQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNoQyxJQUFJLENBQUMsSUFBSTtZQUFFLE9BQU8sS0FBSyxDQUFDO1FBRXhCLE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxFQUFFO1lBQ3RFLFdBQVcsQ0FBQyxNQUFNLEdBQUcsWUFBWSxDQUFDO1lBQ2xDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN2QixXQUFXLENBQUMsU0FBUyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFDckMsQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUNsQixXQUFXLENBQUMsTUFBTSxLQUFLLFNBQVM7ZUFDN0IsQ0FBQyxXQUFXLENBQUMsTUFBTSxLQUFLLFVBQVUsSUFBSSxXQUFXLENBQUMsV0FBVyxJQUFJLElBQUksSUFBSSxFQUFFLENBQUMsQ0FDaEYsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2IsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBRUQsb0JBQW9CO1FBQ3BCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUVuQixhQUFhO1FBQ2IsTUFBTSxJQUFJLENBQUMsbUJBQW1CLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDdkQsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLGtDQUFrQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUVoRixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7O09BR0c7SUFDSSxLQUFLLENBQUMsYUFBYSxDQUFDLEVBQVU7UUFDbkMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRWhDLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxXQUFXLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUNyRSxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFFRCxNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsRUFBRTtZQUN0RSxXQUFXLENBQUMsTUFBTSxHQUFHLFdBQVcsQ0FBQztZQUNqQyxXQUFXLENBQUMsU0FBUyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7WUFDbkMsV0FBVyxDQUFDLFdBQVcsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3ZDLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDLE1BQU0sS0FBSyxXQUFXLElBQUksV0FBVyxDQUFDLE1BQU0sS0FBSyxRQUFRLENBQUMsQ0FBQztRQUMzRixJQUFJLENBQUMsT0FBTztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBRTNCLG9CQUFvQjtRQUNwQixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBRW5CLGFBQWE7UUFDYixNQUFNLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDdEQsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLDhCQUE4QixJQUFJLENBQUMsUUFBUSxXQUFXLENBQUMsQ0FBQztRQUVyRixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksS0FBSyxDQUFDLFVBQVUsQ0FDckIsRUFBVSxFQUNWLEtBQWEsRUFDYixhQUFtQyxFQUFFO1FBRXJDLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxFQUFFLEVBQUUsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO0lBQzlFLENBQUM7SUFFRCwyRkFBMkY7SUFDcEYsS0FBSyxDQUFDLHdCQUF3QixDQUNuQyxFQUFVLEVBQ1YsS0FBYSxFQUNiLGFBQW1DLEVBQUU7UUFFckMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRWhDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNWLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQztRQUM3QyxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLFdBQVcsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQzVELE9BQU87Z0JBQ0wsT0FBTyxFQUFFLEtBQUs7Z0JBQ2QsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVM7Z0JBQ3ZELFFBQVEsRUFBRSxJQUFJO2FBQ2YsQ0FBQztRQUNKLENBQUM7UUFFRCwrQkFBK0I7UUFDL0IsTUFBTSxTQUFTLEdBQUcsVUFBVSxDQUFDLFNBQVMsS0FBSyxLQUFLLENBQUM7UUFDakQsSUFBSSxTQUFTLElBQUksSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3pELHFEQUFxRDtZQUNyRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUNwQixJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxFQUM1RCxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FDM0IsQ0FBQztZQUVGLE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxFQUFFO2dCQUN0RSxXQUFXLENBQUMsTUFBTSxHQUFHLFVBQVUsQ0FBQztnQkFDaEMsV0FBVyxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7Z0JBQzlCLFdBQVcsQ0FBQyxXQUFXLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDO2dCQUN2RCxXQUFXLENBQUMsU0FBUyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7WUFDckMsQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsTUFBTSxLQUFLLFdBQVcsSUFBSSxXQUFXLENBQUMsTUFBTSxLQUFLLFFBQVEsQ0FBQyxDQUFDO1lBQzNGLElBQUksQ0FBQyxPQUFPO2dCQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQztZQUV4RCxhQUFhO1lBQ2IsTUFBTSxJQUFJLENBQUMsbUJBQW1CLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3JELE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxpQkFBaUIsS0FBSyxlQUFlLElBQUksQ0FBQyxRQUFRLFlBQVksS0FBSyxFQUFFLENBQUMsQ0FBQztZQUNwRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDbkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUM7UUFDaEUsQ0FBQzthQUFNLENBQUM7WUFDTiw2QkFBNkI7WUFDN0IsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLEVBQUU7Z0JBQ3RFLE1BQU0sR0FBRyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7Z0JBQ3ZCLFdBQVcsQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDO2dCQUM5QixXQUFXLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztnQkFDOUIsV0FBVyxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUM7Z0JBRTVCLElBQUksVUFBVSxDQUFDLGVBQWUsRUFBRSxDQUFDO29CQUMvQixNQUFNLE1BQU0sR0FBRyxXQUFXLENBQUMsZUFBZSxJQUFJLElBQUksQ0FBQyw0QkFBNEIsQ0FDN0UsV0FBVyxDQUFDLGdCQUFnQixDQUM3QixDQUFDO29CQUNGLE1BQU0sUUFBUSxHQUFHLElBQUksR0FBRyxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsSUFBSSxFQUFFLENBQUMsQ0FBQztvQkFDL0QsTUFBTSxVQUFVLEdBQUcsV0FBVyxDQUFDLGdCQUFnQixJQUFJLEVBQUUsQ0FBQztvQkFDdEQsTUFBTSxZQUFZLEdBQUcsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7b0JBQ25GLE1BQU0sYUFBYSxHQUFHLFVBQVUsQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDO29CQUMxRCxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxJQUFJLGFBQWMsSUFBSSxHQUFHO3dCQUN2RSxDQUFDLENBQUMsYUFBYzt3QkFDaEIsQ0FBQyxDQUFDLEdBQUcsQ0FBQztvQkFFUixLQUFLLE1BQU0sS0FBSyxJQUFJLE1BQU0sRUFBRSxDQUFDO3dCQUMzQixJQUFJLEtBQUssQ0FBQyxLQUFLLEtBQUssWUFBWTs0QkFBRSxTQUFTO3dCQUMzQyxLQUFLLENBQUMsS0FBSyxHQUFHLGtCQUFrQixDQUFDO3dCQUNqQyxLQUFLLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQzt3QkFDMUIsS0FBSyxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7d0JBQzNCLEtBQUssQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDO3dCQUN0QixRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO3dCQUV4QyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQzlDLFdBQVcsQ0FBQyxFQUFFLEVBQ2QsS0FBSyxDQUFDLG1CQUFtQixFQUN6QixpQkFBaUIsQ0FDbEIsQ0FBQzt3QkFDRixJQUFJLFlBQVksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDOzRCQUFFLFNBQVM7d0JBQzVDLFVBQVUsQ0FBQyxJQUFJLENBQUM7NEJBQ2QsV0FBVzs0QkFDWCxJQUFJLEVBQUUsaUJBQWlCOzRCQUN2QixZQUFZLEVBQUUsVUFBVSxDQUFDLGVBQWUsQ0FBQyxZQUFZOzRCQUNyRCxTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVM7NEJBQzFCLG1CQUFtQixFQUFFLEtBQUssQ0FBQyxtQkFBbUI7NEJBQzlDLFFBQVE7NEJBQ1IsWUFBWSxFQUFFLEtBQUs7NEJBQ25CLEtBQUssRUFBRSxTQUFTOzRCQUNoQixRQUFRLEVBQUUsQ0FBQzs0QkFDWCxXQUFXLEVBQUUsR0FBRzt5QkFDakIsQ0FBQyxDQUFDO3dCQUNILFlBQVksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7b0JBQ2hDLENBQUM7b0JBQ0QsV0FBVyxDQUFDLGVBQWUsR0FBRyxNQUFNLENBQUM7b0JBQ3JDLFdBQVcsQ0FBQyxrQkFBa0IsR0FBRyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUM7b0JBQy9DLFdBQVcsQ0FBQyxnQkFBZ0IsR0FBRyxVQUFVLENBQUM7Z0JBQzVDLENBQUM7WUFDSCxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEtBQUssV0FBVyxJQUFJLFdBQVcsQ0FBQyxNQUFNLEtBQUssUUFBUSxDQUFDLENBQUM7WUFDM0YsSUFBSSxDQUFDLE9BQU87Z0JBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDO1lBRXhELG9CQUFvQjtZQUNwQixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFFdEIsYUFBYTtZQUNiLE1BQU0sSUFBSSxDQUFDLG1CQUFtQixDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNuRCxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsNkJBQTZCLElBQUksQ0FBQyxRQUFRLHFCQUFxQixLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZHLENBQUM7UUFFRCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbkIsT0FBTztZQUNMLE9BQU8sRUFBRSxJQUFJO1lBQ2IsTUFBTSxFQUFFLFFBQVE7WUFDaEIsUUFBUSxFQUFFLElBQUk7WUFDZCxjQUFjLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsV0FBVztTQUM1RCxDQUFDO0lBQ0osQ0FBQztJQUVELGlGQUFpRjtJQUMxRSxLQUFLLENBQUMscUJBQXFCLENBQ2hDLEVBQVUsRUFDVixXQUFvQztRQUVwQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDckIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLElBQUk7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUN4QixNQUFNLHFCQUFxQixHQUE0QjtZQUNyRCxHQUFHLFdBQVc7WUFDZCxXQUFXLEVBQUUsRUFBRTtZQUNmLFVBQVUsRUFBRSxDQUFDLEdBQUcsV0FBVyxDQUFDLFVBQVUsQ0FBQztZQUN2QyxnQkFBZ0IsRUFBRSxXQUFXLENBQUMsZ0JBQWdCLEVBQUUsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1lBQ2hGLFVBQVUsRUFBRSx1QkFBdUIsQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDO1NBQzVELENBQUM7UUFDRixNQUFNLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsRUFBRTtZQUN0RCxXQUFXLENBQUMsZ0JBQWdCLEdBQUc7Z0JBQzdCLEdBQUcsQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLElBQUksRUFBRSxDQUFDO2dCQUN2QyxxQkFBcUI7YUFDdEIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNiLFdBQVcsQ0FBQyxTQUFTLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUNyQyxDQUFDLENBQUMsQ0FBQztRQUNILE1BQU0sSUFBSSxDQUFDLG1CQUFtQixDQUFDLGlCQUFpQixFQUFFLElBQUksRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO1FBQy9FLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELG9GQUFvRjtJQUM3RSxLQUFLLENBQUMscUJBQXFCLENBQ2hDLEVBQVUsRUFDVixhQUFxQixFQUNyQixXQUFvQztRQUVwQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDckIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLElBQUk7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUN4QixNQUFNLHFCQUFxQixHQUE0QjtZQUNyRCxHQUFHLFdBQVc7WUFDZCxXQUFXLEVBQUUsRUFBRTtZQUNmLFVBQVUsRUFBRSxDQUFDLEdBQUcsV0FBVyxDQUFDLFVBQVUsQ0FBQztZQUN2QyxnQkFBZ0IsRUFBRSxXQUFXLENBQUMsZ0JBQWdCLEVBQUUsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1lBQ2hGLHNCQUFzQixFQUFFLFdBQVcsQ0FBQyxzQkFBc0I7Z0JBQ3hELENBQUMsQ0FBQyxFQUFFLEdBQUcsV0FBVyxDQUFDLHNCQUFzQixFQUFFO2dCQUMzQyxDQUFDLENBQUMsU0FBUztZQUNiLFVBQVUsRUFBRSx1QkFBdUIsQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDO1NBQzVELENBQUM7UUFDRixNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsRUFBRTtZQUN0RSxNQUFNLFlBQVksR0FBRyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztZQUMvRCxNQUFNLGdCQUFnQixHQUFHLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssYUFBYSxDQUFDLENBQUM7WUFDdkYsSUFBSSxnQkFBZ0IsR0FBRyxDQUFDO2dCQUFFLE9BQU87WUFDakMsWUFBWSxDQUFDLGdCQUFnQixDQUFDLEdBQUcscUJBQXFCLENBQUM7WUFDdkQsV0FBVyxDQUFDLGdCQUFnQixHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN2RCxXQUFXLENBQUMsU0FBUyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFDckMsQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUNsQixDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssYUFBYSxDQUFDLENBQ2pGLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxPQUFPO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDM0IsTUFBTSxJQUFJLENBQUMsbUJBQW1CLENBQUMsd0JBQXdCLEVBQUUsSUFBSSxFQUFFLHFCQUFxQixDQUFDLENBQUM7UUFDdEYsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsK0VBQStFO0lBQ3hFLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxFQUFVLEVBQUUsVUFBb0I7UUFDbkUsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxJQUFJO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDeEIsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLEdBQUcsQ0FDbEMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUM5RSxDQUFDO1FBQ0YsSUFBSSxvQkFBb0IsQ0FBQyxJQUFJLEtBQUssQ0FBQztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBRWxELE1BQU0sSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxFQUFFO1lBQ3RELE1BQU0sTUFBTSxHQUFHLFdBQVcsQ0FBQyxlQUFlLElBQUksSUFBSSxDQUFDLDRCQUE0QixDQUM3RSxXQUFXLENBQUMsZ0JBQWdCLENBQzdCLENBQUM7WUFDRixNQUFNLFNBQVMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxXQUFXLENBQUMsbUJBQW1CLElBQUksRUFBRSxDQUFDLENBQUM7WUFDakUsTUFBTSxHQUFHLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUN2QixLQUFLLE1BQU0sS0FBSyxJQUFJLE1BQU0sRUFBRSxDQUFDO2dCQUMzQixJQUNFLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsbUJBQW1CLENBQUM7dUJBQ2hELEtBQUssQ0FBQyxLQUFLLEtBQUssWUFBWSxFQUMvQixDQUFDO29CQUNELEtBQUssQ0FBQyxLQUFLLEdBQUcsV0FBVyxDQUFDO29CQUMxQixLQUFLLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztvQkFDdEIsT0FBTyxLQUFLLENBQUMsUUFBUSxDQUFDO29CQUN0QixPQUFPLEtBQUssQ0FBQyxZQUFZLENBQUM7b0JBQzFCLFNBQVMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUM7Z0JBQzNDLENBQUM7WUFDSCxDQUFDO1lBQ0QsV0FBVyxDQUFDLGVBQWUsR0FBRyxNQUFNLENBQUM7WUFDckMsV0FBVyxDQUFDLG1CQUFtQixHQUFHLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQztZQUNqRCxXQUFXLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztRQUM5QixDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOzs7T0FHRztJQUNJLEtBQUssQ0FBQyxzQkFBc0IsQ0FDakMsRUFBVSxFQUNWLFFBQW9EO1FBRXBELElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNyQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNoQyxJQUFJLENBQUMsSUFBSSxJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUFFLE9BQU8sRUFBRSxDQUFDO1FBQzlDLE1BQU0sa0JBQWtCLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FDbkQsT0FBTyxPQUFPLEtBQUssUUFBUTtZQUN6QixDQUFDLENBQUM7Z0JBQ0UsU0FBUyxFQUFFLE9BQU87Z0JBQ2xCLFFBQVEsRUFBRSxHQUFHO2dCQUNiLFlBQVksRUFBRSxxQ0FBcUM7YUFDcEQ7WUFDSCxDQUFDLENBQUMsT0FBTyxDQUNaLENBQUMsQ0FBQztRQUNILE1BQU0sYUFBYSxHQUFhLEVBQUUsQ0FBQztRQUVuQyxNQUFNLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsRUFBRTtZQUN0RCxNQUFNLE1BQU0sR0FBRyxXQUFXLENBQUMsZUFBZSxJQUFJLElBQUksQ0FBQyw0QkFBNEIsQ0FDN0UsV0FBVyxDQUFDLGdCQUFnQixDQUM3QixDQUFDO1lBQ0YsTUFBTSxRQUFRLEdBQUcsSUFBSSxHQUFHLENBQUMsV0FBVyxDQUFDLGtCQUFrQixJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQy9ELE1BQU0sVUFBVSxHQUFHLFdBQVcsQ0FBQyxnQkFBZ0IsSUFBSSxFQUFFLENBQUM7WUFDdEQsTUFBTSxZQUFZLEdBQUcsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7WUFDbkYsTUFBTSxHQUFHLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUV2QixLQUFLLE1BQU0sT0FBTyxJQUFJLGtCQUFrQixFQUFFLENBQUM7Z0JBQ3pDLE1BQU0sbUJBQW1CLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDbkUsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FDdkIsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxtQkFBbUIsS0FBSyxtQkFBbUIsQ0FDckUsQ0FBQztnQkFDRixJQUFJLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxLQUFLLEtBQUssWUFBWTtvQkFBRSxTQUFTO2dCQUVyRCxLQUFLLENBQUMsS0FBSyxHQUFHLGtCQUFrQixDQUFDO2dCQUNqQyxLQUFLLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUM7Z0JBQ2xDLEtBQUssQ0FBQyxZQUFZLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQztnQkFDMUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUM7Z0JBQ3RCLFFBQVEsQ0FBQyxHQUFHLENBQUMsbUJBQW1CLENBQUMsQ0FBQztnQkFDbEMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBRXBDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLG1CQUFtQixDQUFDLENBQUM7Z0JBQ3RGLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7b0JBQ25DLFVBQVUsQ0FBQyxJQUFJLENBQUM7d0JBQ2QsV0FBVzt3QkFDWCxJQUFJLEVBQUUsYUFBYTt3QkFDbkIsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTO3dCQUMxQixtQkFBbUI7d0JBQ25CLFFBQVEsRUFBRSxPQUFPLENBQUMsUUFBUTt3QkFDMUIsWUFBWSxFQUFFLE9BQU8sQ0FBQyxZQUFZO3dCQUNsQyxLQUFLLEVBQUUsU0FBUzt3QkFDaEIsUUFBUSxFQUFFLENBQUM7d0JBQ1gsV0FBVyxFQUFFLEdBQUc7cUJBQ2pCLENBQUMsQ0FBQztvQkFDSCxZQUFZLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUNoQyxDQUFDO1lBQ0gsQ0FBQztZQUVELFdBQVcsQ0FBQyxlQUFlLEdBQUcsTUFBTSxDQUFDO1lBQ3JDLFdBQVcsQ0FBQyxrQkFBa0IsR0FBRyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUM7WUFDL0MsV0FBVyxDQUFDLGdCQUFnQixHQUFHLFVBQVUsQ0FBQztZQUMxQyxXQUFXLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztRQUM5QixDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sYUFBYSxDQUFDO0lBQ3ZCLENBQUM7SUFFTSx1QkFBdUIsQ0FBQyxFQUFVO1FBS3ZDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxJQUFJO1lBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxpQkFBaUIsRUFBRSxFQUFFLEVBQUUsQ0FBQztRQUMzRSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsZUFBZSxJQUFJLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUNoRyxPQUFPO1lBQ0wsVUFBVSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLEtBQUssWUFBWSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDO1lBQ2xHLFNBQVMsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxLQUFLLFdBQVcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQztZQUNoRyxpQkFBaUIsRUFBRSxNQUFNO2lCQUN0QixNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLEtBQUssa0JBQWtCLENBQUM7aUJBQ3JELEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQztTQUNuQyxDQUFDO0lBQ0osQ0FBQztJQUVELGtGQUFrRjtJQUMzRSwyQkFBMkIsQ0FDaEMsTUFBWSxJQUFJLElBQUksRUFBRSxFQUN0QixRQUFRLEdBQUcsR0FBRztRQUVkLE1BQU0sTUFBTSxHQUEyRCxFQUFFLENBQUM7UUFDMUUsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDL0QsSUFBSSxLQUFLLEtBQUssQ0FBQztZQUFFLE9BQU8sTUFBTSxDQUFDO1FBQy9CLEtBQUssTUFBTSxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO1lBQ3ZDLEtBQUssTUFBTSxTQUFTLElBQUksSUFBSSxDQUFDLGdCQUFnQixJQUFJLEVBQUUsRUFBRSxDQUFDO2dCQUNwRCxJQUNFLFNBQVMsQ0FBQyxJQUFJLEtBQUssYUFBYTt1QkFDN0IsU0FBUyxDQUFDLEtBQUssS0FBSyxTQUFTO3VCQUM3QixTQUFTLENBQUMsV0FBVyxJQUFJLEdBQUcsRUFDL0IsQ0FBQztvQkFDRCxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsU0FBUyxFQUFFLEVBQUUsR0FBRyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUM7b0JBQzlELElBQUksTUFBTSxDQUFDLE1BQU0sSUFBSSxLQUFLO3dCQUFFLE9BQU8sTUFBTSxDQUFDO2dCQUM1QyxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQsdUZBQXVGO0lBQ2hGLG9DQUFvQyxDQUN6QyxNQUFZLElBQUksSUFBSSxFQUFFLEVBQ3RCLFFBQVEsR0FBRyxHQUFHO1FBS2QsTUFBTSxNQUFNLEdBQTJELEVBQUUsQ0FBQztRQUMxRSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMvRCxJQUFJLEtBQUssS0FBSyxDQUFDO1lBQUUsT0FBTyxNQUFNLENBQUM7UUFDL0IsS0FBSyxNQUFNLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7WUFDdkMsS0FBSyxNQUFNLFNBQVMsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLElBQUksRUFBRSxFQUFFLENBQUM7Z0JBQ3BELElBQ0UsU0FBUyxDQUFDLElBQUksS0FBSyxpQkFBaUI7dUJBQ2pDLFNBQVMsQ0FBQyxLQUFLLEtBQUssU0FBUzt1QkFDN0IsU0FBUyxDQUFDLFdBQVcsSUFBSSxHQUFHLEVBQy9CLENBQUM7b0JBQ0QsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEdBQUcsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDO29CQUM5RCxJQUFJLE1BQU0sQ0FBQyxNQUFNLElBQUksS0FBSzt3QkFBRSxPQUFPLE1BQU0sQ0FBQztnQkFDNUMsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVNLEtBQUssQ0FBQyw0QkFBNEIsQ0FDdkMsTUFBYyxFQUNkLFdBQW1CO1FBRW5CLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNyQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsSUFBSTtZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQ3hCLE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxFQUFFO1lBQ3RFLE1BQU0sZ0JBQWdCLEdBQUcsV0FBVyxDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FDekQsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEtBQUssV0FBVyxDQUNyRCxDQUFDO1lBQ0YsSUFBSSxDQUFDLGdCQUFnQjtnQkFBRSxPQUFPO1lBQzlCLGdCQUFnQixDQUFDLEtBQUssR0FBRyxXQUFXLENBQUM7WUFDckMsZ0JBQWdCLENBQUMsV0FBVyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7WUFDMUMsT0FBTyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUM7WUFDbEMsV0FBVyxDQUFDLFNBQVMsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3JDLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQzVELENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsV0FBVyxLQUFLLFdBQVcsSUFBSSxTQUFTLENBQUMsS0FBSyxLQUFLLFdBQVcsQ0FDeEYsQ0FBQyxDQUFDLENBQUM7UUFDSixPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRU0sS0FBSyxDQUFDLHlCQUF5QixDQUNwQyxNQUFjLEVBQ2QsV0FBbUIsRUFDbkIsS0FBYTtRQUViLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNyQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsSUFBSTtZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQ3hCLE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxFQUFFO1lBQ3RFLE1BQU0sZ0JBQWdCLEdBQUcsV0FBVyxDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FDekQsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEtBQUssV0FBVyxDQUNyRCxDQUFDO1lBQ0YsSUFBSSxDQUFDLGdCQUFnQjtnQkFBRSxPQUFPO1lBQzlCLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzVCLGdCQUFnQixDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7WUFDbkMsZ0JBQWdCLENBQUMsV0FBVyxHQUFHLElBQUksSUFBSSxDQUNyQyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsZ0JBQWdCLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQzdGLENBQUM7WUFDRixXQUFXLENBQUMsU0FBUyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFDckMsQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FDNUQsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEtBQUssV0FBVyxJQUFJLFNBQVMsQ0FBQyxLQUFLLEtBQUssV0FBVyxDQUN4RixDQUFDLENBQUMsQ0FBQztRQUNKLE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFRDs7O09BR0c7SUFDSSxLQUFLLENBQUMsVUFBVSxDQUFDLEVBQVU7UUFDaEMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JCLElBQUksV0FBbUMsQ0FBQztRQUN4QyxNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ3RELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2hDLElBQUksQ0FBQyxJQUFJO2dCQUFFLE9BQU8sS0FBSyxDQUFDO1lBQ3hCLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxZQUFZLEVBQUUsQ0FBQztnQkFDakMsTUFBTSxJQUFJLEtBQUssQ0FBQyw0QkFBNEIsRUFBRSx5QkFBeUIsQ0FBQyxDQUFDO1lBQzNFLENBQUM7WUFDRCxJQUFJLElBQUksQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7Z0JBQ3ZELE1BQU0sSUFBSSxDQUFDLDJCQUEyQixDQUNwQyxJQUFJLENBQUMsRUFBRSxFQUNQLElBQUksQ0FBQyxjQUFjLEVBQ25CLElBQUksQ0FBQyxzQkFBc0IsQ0FDNUIsQ0FBQztZQUNKLENBQUM7WUFDRCxvRUFBb0U7WUFDcEUsTUFBTSxJQUFJLENBQUMscUJBQXFCLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDckMsV0FBVyxHQUFHLElBQUksQ0FBQztZQUNuQixJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN0QixPQUFPLElBQUksQ0FBQztRQUNkLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLFdBQVc7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUUzQyxvQkFBb0I7UUFDcEIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBRW5CLGFBQWE7UUFDYixNQUFNLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDM0QsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLHFCQUFxQixDQUFDLENBQUM7UUFFcEQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRU8sVUFBVSxDQUFDLEVBQVU7UUFDM0IsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxHQUFHLEVBQUUsT0FBTyxDQUFDO0lBQ25ELENBQUM7SUFFTyxLQUFLLENBQUMsV0FBVyxDQUFDLElBQWdCLEVBQUUsYUFBc0I7UUFDaEUsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYztZQUFFLE9BQU87UUFDekMsSUFBSSxJQUFJLENBQUMsYUFBYSxLQUFLLFlBQVksSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQzFELE1BQU0sSUFBSSxLQUFLLENBQUMsa0JBQWtCLElBQUksQ0FBQyxFQUFFLDZDQUE2QyxDQUFDLENBQUM7UUFDMUYsQ0FBQztRQUNELE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUNuQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFDeEIsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQ25ELENBQUM7SUFDSixDQUFDO0lBRU8sS0FBSyxDQUFDLGtCQUFrQixDQUFDLE9BQW1CO1FBQ2xELElBQUksT0FBTyxDQUFDLGFBQWEsS0FBSyxZQUFZLEVBQUUsQ0FBQztZQUMzQyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDaEMsT0FBTztRQUNULENBQUM7UUFDRCxNQUFNLElBQUksQ0FBQyxzQkFBc0IsQ0FDL0IsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLGdCQUFpQixFQUFFLGlDQUFpQyxDQUFDLEVBQzlFLEtBQUssSUFBSSxFQUFFO1lBQ1QsTUFBTSxVQUFVLEdBQUcsTUFBTSxJQUFJLENBQUMsc0JBQXNCLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDOUQsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQztRQUM5QyxDQUFDLEVBQ0QsSUFBSSxDQUNMLENBQUM7SUFDSixDQUFDO0lBRU8sYUFBYSxDQUFDLElBQWdCLEVBQUUsYUFBc0I7UUFDNUQsTUFBTSxVQUFVLEdBQXVCO1lBQ3JDLGFBQWEsRUFBRSxDQUFDO1lBQ2hCLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRTtZQUNYLEdBQUcsQ0FBQyxJQUFJLENBQUMsY0FBYyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3RDLGNBQWMsRUFBRSxJQUFJLENBQUMsY0FBYztnQkFDbkMsc0JBQXNCLEVBQUUsSUFBSSxDQUFDLHNCQUFzQjthQUNwRCxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDUCxjQUFjLEVBQUUsSUFBSSxDQUFDLGNBQWM7WUFDbkMsZ0JBQWdCLEVBQUU7Z0JBQ2hCLE9BQU8sRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxFQUFFO2dCQUMvQyxTQUFTLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVksRUFBRTtnQkFDL0MsWUFBWSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlLEVBQUU7YUFDdEQ7WUFDRCxlQUFlLEVBQUUsSUFBSSxDQUFDLGVBQWUsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLE1BQU07WUFDakYsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQzVDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtZQUNuQixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7WUFDdkIsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFO1lBQ3ZDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDdEUsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFO1lBQ25DLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRTtZQUNuQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDeEUsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixJQUFJLEVBQUU7WUFDbkQsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixJQUFJLEVBQUU7WUFDakQsZUFBZSxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsSUFBSSxJQUFJLENBQUMsNEJBQTRCLENBQ3pFLElBQUksQ0FBQyxnQkFBZ0IsQ0FDdEIsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDakIsR0FBRyxLQUFLO2dCQUNSLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRTthQUNyQyxDQUFDLENBQUM7WUFDSCxnQkFBZ0IsRUFBRSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRTtnQkFDaEUsTUFBTSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsR0FBRyxlQUFlLEVBQUUsR0FBRyxTQUFTLENBQUM7Z0JBQ25FLE9BQU87b0JBQ0wsR0FBRyxlQUFlO29CQUNsQixXQUFXLEVBQUUsV0FBVyxDQUFDLE9BQU8sRUFBRTtvQkFDbEMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsV0FBVyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztpQkFDL0QsQ0FBQztZQUNKLENBQUMsQ0FBQztZQUNGLGdCQUFnQixFQUFFLENBQUMsSUFBSSxDQUFDLGdCQUFnQixJQUFJLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDL0UsR0FBRyxXQUFXO2dCQUNkLFdBQVcsRUFBRSxJQUFJLENBQUMsRUFBRTtnQkFDcEIsVUFBVSxFQUFFLENBQUMsR0FBRyxXQUFXLENBQUMsVUFBVSxDQUFDO2dCQUN2QyxnQkFBZ0IsRUFBRSxXQUFXLENBQUMsZ0JBQWdCLEVBQUUsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxNQUFNLEVBQUUsQ0FBQyxDQUFDO2dCQUNoRixVQUFVLEVBQUUsdUJBQXVCLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQzthQUM1RCxDQUFDLENBQUM7U0FDSixDQUFDO1FBQ0YsSUFBSSxJQUFJLENBQUMsYUFBYSxLQUFLLFlBQVk7WUFBRSxPQUFPLFVBQVUsQ0FBQztRQUMzRCxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDbkIsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQkFBa0IsSUFBSSxDQUFDLEVBQUUsZ0RBQWdELENBQUMsQ0FBQztRQUM3RixDQUFDO1FBQ0QsT0FBTztZQUNMLEdBQUcsVUFBVTtZQUNiLGFBQWEsRUFBRSxDQUFDO1lBQ2hCLGFBQWEsRUFBRSxZQUFZO1lBQzNCLGdCQUFnQixFQUFFLElBQUksQ0FBQyxnQkFBaUI7WUFDeEMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLGdCQUFpQjtZQUN4QyxZQUFZLEVBQUUsb0JBQW9CLENBQUMsSUFBSSxDQUFDLFlBQWEsQ0FBQztZQUN0RCxVQUFVLEVBQUUsYUFBYTtTQUMxQixDQUFDO0lBQ0osQ0FBQztJQUVPLEtBQUssQ0FBQyxhQUFhLENBQUksU0FBaUIsRUFBRSxZQUE4QjtRQUM5RSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUM5RSxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNsRSxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM5RCxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUM7WUFDSCxPQUFPLE1BQU0sTUFBTSxDQUFDO1FBQ3RCLENBQUM7Z0JBQVMsQ0FBQztZQUNULElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsS0FBSyxPQUFPLEVBQUUsQ0FBQztnQkFDeEQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUM3QyxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFTyxLQUFLLENBQUMsc0JBQXNCLENBQ2xDLElBQWdCLEVBQ2hCLFFBQTJDLEVBQzNDLGtCQUF3RCxHQUFHLEVBQUUsQ0FBQyxJQUFJO1FBRWxFLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNyQixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxLQUFLLElBQUksRUFBRTtZQUM1QyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDNUMsSUFBSSxDQUFDLFdBQVcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUM7Z0JBQUUsT0FBTyxLQUFLLENBQUM7WUFDaEUsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDaEUsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3RCLE1BQU0sSUFBSSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzNDLEtBQUssTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQTRCLEVBQUUsQ0FBQztnQkFDdEUsT0FBTyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDMUIsQ0FBQztZQUNELE1BQU0sQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQ3hDLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sdUJBQXVCLENBQUMsT0FBbUIsRUFBRSxTQUFpQjtRQUNwRSxPQUFPLElBQUksaUJBQWlCLENBQUM7WUFDM0IsT0FBTyxFQUFFLGdEQUFnRCxPQUFPLENBQUMsRUFBRSxLQUFLLFNBQVMsRUFBRTtZQUNuRixTQUFTLEVBQUUscUJBQXFCO1lBQ2hDLFNBQVMsRUFBRSxLQUFLO1lBQ2hCLEtBQUssRUFBRSxjQUFjO1lBQ3JCLGNBQWMsRUFBRSxFQUFFO1lBQ2xCLFVBQVUsRUFBRSxPQUFPLENBQUMsWUFBWSxFQUFFLEVBQUUsSUFBSSxFQUFFO1NBQzNDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxLQUFLLENBQUMsc0JBQXNCLENBQUMsT0FBbUI7UUFDdEQsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUM7UUFDbkQsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3BCLE1BQU0sSUFBSSxDQUFDLHVCQUF1QixDQUFDLE9BQU8sRUFBRSxnQ0FBZ0MsQ0FBQyxDQUFDO1FBQ2hGLENBQUM7UUFDRCxNQUFNLElBQUksR0FBRyxNQUFNLGNBQWMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNuRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDVixNQUFNLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxPQUFPLEVBQUUsOEJBQThCLENBQUMsQ0FBQztRQUM5RSxDQUFDO1FBQ0QsSUFBSSxNQUE4QixDQUFDO1FBQ25DLElBQUksQ0FBQztZQUNILE1BQU0sR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ25FLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsTUFBTSxJQUFJLENBQUMsdUJBQXVCLENBQUMsT0FBTyxFQUFFLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3RFLENBQUM7UUFDRCxJQUNFLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxLQUFLLFlBQVk7ZUFDdkMsQ0FBQyxNQUFNLENBQUMsVUFBVTtlQUNsQixNQUFNLENBQUMsSUFBSSxDQUFDLGdCQUFnQixLQUFLLE9BQU8sQ0FBQyxnQkFBZ0I7ZUFDekQsTUFBTSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsS0FBSyxPQUFPLENBQUMsZ0JBQWdCO2VBQ3pELE1BQU0sQ0FBQyxJQUFJLENBQUMsc0JBQXNCLEtBQUssT0FBTyxDQUFDLHNCQUFzQjtlQUNyRSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLEVBQ3BGLENBQUM7WUFDRCxNQUFNLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxPQUFPLEVBQUUsNkNBQTZDLENBQUMsQ0FBQztRQUM3RixDQUFDO1FBQ0QsT0FBTyxNQUFNLENBQUMsVUFBVSxDQUFDO0lBQzNCLENBQUM7SUFFTyxtQkFBbUIsQ0FBQyxzQkFBc0IsR0FBRyxLQUFLO1FBQ3hELElBQ0UsSUFBSSxDQUFDLGNBQWMsS0FBSyxRQUFRO2VBQzdCLENBQUMsQ0FBQyxzQkFBc0IsSUFBSSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxFQUM5RCxDQUFDO1lBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQyxxQkFBcUIsSUFBSSxDQUFDLGNBQWMscUNBQXFDLENBQUMsQ0FBQztRQUNqRyxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsbUJBQW1CLElBQUkscUJBQXFCLEVBQUUsQ0FBQztZQUN0RCxNQUFNLElBQUksS0FBSyxDQUFDLGlDQUFpQyxxQkFBcUIsVUFBVSxDQUFDLENBQUM7UUFDcEYsQ0FBQztRQUNELElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQzNCLElBQUksUUFBUSxHQUFHLEtBQUssQ0FBQztRQUNyQixPQUFPLEdBQUcsRUFBRTtZQUNWLElBQUksUUFBUTtnQkFBRSxPQUFPO1lBQ3JCLFFBQVEsR0FBRyxJQUFJLENBQUM7WUFDaEIsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7WUFDM0IsSUFBSSxJQUFJLENBQUMsbUJBQW1CLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ25DLEtBQUssTUFBTSxPQUFPLElBQUksSUFBSSxDQUFDLDBCQUEwQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7b0JBQUUsT0FBTyxFQUFFLENBQUM7WUFDN0UsQ0FBQztRQUNILENBQUMsQ0FBQztJQUNKLENBQUM7SUFFTyxvQkFBb0IsQ0FBQyxRQUFnQixFQUFFLHFCQUFpQztRQUM5RSxJQUFJLFFBQVEsR0FBRyxLQUFLLENBQUM7UUFDckIsT0FBTyxHQUFHLEVBQUU7WUFDVixJQUFJLFFBQVE7Z0JBQUUsT0FBTztZQUNyQixRQUFRLEdBQUcsSUFBSSxDQUFDO1lBQ2hCLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDL0IscUJBQXFCLEVBQUUsQ0FBQztRQUMxQixDQUFDLENBQUM7SUFDSixDQUFDO0lBRU8sS0FBSyxDQUFDLGVBQWUsQ0FDM0IsUUFBZ0IsRUFDaEIsc0JBQXNCLEdBQUcsS0FBSztRQUU5QixJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsSUFBSSxRQUFRLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDcEQsTUFBTSxJQUFJLEtBQUssQ0FBQyxnRUFBZ0UsQ0FBQyxDQUFDO1FBQ3BGLENBQUM7UUFDRCxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLHFCQUFxQixFQUFFLENBQUM7WUFDbEQsTUFBTSxJQUFJLEtBQUssQ0FDYixrQ0FBa0MsUUFBUSx5QkFBeUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsRUFBRSxDQUN4RyxDQUFDO1FBQ0osQ0FBQztRQUNELE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFDNUUsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLGdCQUFnQixHQUFHLFFBQVEsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLHFCQUFxQixFQUFFLENBQUM7WUFDL0csSUFBSSxDQUFDLGdCQUFnQixJQUFJLFFBQVEsQ0FBQztZQUNsQyxPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztRQUNqRSxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sSUFBSSxxQkFBcUIsRUFBRSxDQUFDO1lBQ3hELGtCQUFrQixFQUFFLENBQUM7WUFDckIsTUFBTSxJQUFJLEtBQUssQ0FBQyxtQ0FBbUMscUJBQXFCLFVBQVUsQ0FBQyxDQUFDO1FBQ3RGLENBQUM7UUFDRCxPQUFPLElBQUksT0FBTyxDQUFhLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ2pELElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDO2dCQUN2QixLQUFLLEVBQUUsUUFBUTtnQkFDZixPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztnQkFDL0UsTUFBTSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7b0JBQ2hCLGtCQUFrQixFQUFFLENBQUM7b0JBQ3JCLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDaEIsQ0FBQzthQUNGLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLDBCQUEwQixDQUFDLFFBQWdCO1FBQ2pELElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxJQUFJLFFBQVEsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNwRCxNQUFNLElBQUksS0FBSyxDQUFDLGdFQUFnRSxDQUFDLENBQUM7UUFDcEYsQ0FBQztRQUNELElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMscUJBQXFCLEVBQUUsQ0FBQztZQUNsRCxNQUFNLElBQUksS0FBSyxDQUNiLGtDQUFrQyxRQUFRLHlCQUF5QixJQUFJLENBQUMsT0FBTyxDQUFDLHFCQUFxQixFQUFFLENBQ3hHLENBQUM7UUFDSixDQUFDO1FBQ0QsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUN0RCxJQUNFLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxHQUFHLENBQUM7ZUFDM0IsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLHFCQUFxQixFQUN4RSxDQUFDO1lBQ0Qsa0JBQWtCLEVBQUUsQ0FBQztZQUNyQixNQUFNLElBQUksS0FBSyxDQUFDLGtEQUFrRCxDQUFDLENBQUM7UUFDdEUsQ0FBQztRQUNELElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxRQUFRLENBQUM7UUFDbEMsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsUUFBUSxFQUFFLGtCQUFrQixDQUFDLENBQUM7SUFDakUsQ0FBQztJQUVNLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxtQkFBMkI7UUFDekQsT0FBTyxJQUFJLENBQUMsMEJBQTBCLENBQ3BDLGdCQUFnQixDQUFDLG1CQUFtQixFQUFFLGlDQUFpQyxDQUFDLENBQ3pFLENBQUM7SUFDSixDQUFDO0lBRU8sZUFBZSxDQUFDLFFBQWdCO1FBQ3RDLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxRQUFRLENBQUM7UUFDbEMsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN0QyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3RDLElBQUksSUFBSSxDQUFDLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxxQkFBcUI7Z0JBQUUsTUFBTTtZQUNyRixJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDO1lBQ3RDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNuQixDQUFDO0lBQ0gsQ0FBQztJQUVPLEtBQUssQ0FBQyxzQkFBc0IsQ0FDbEMsUUFBZ0IsRUFDaEIsV0FBNkIsRUFDN0Isc0JBQXNCLEdBQUcsS0FBSztRQUU5QixNQUFNLGtCQUFrQixHQUFHLE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztRQUN4RixJQUFJLENBQUM7WUFDSCxPQUFPLE1BQU0sV0FBVyxFQUFFLENBQUM7UUFDN0IsQ0FBQztnQkFBUyxDQUFDO1lBQ1Qsa0JBQWtCLEVBQUUsQ0FBQztRQUN2QixDQUFDO0lBQ0gsQ0FBQztJQUVPLEtBQUssQ0FBQyw2QkFBNkI7UUFDekMsSUFBSSxJQUFJLENBQUMsbUJBQW1CLEtBQUssQ0FBQztZQUFFLE9BQU87UUFDM0MsTUFBTSxJQUFJLE9BQU8sQ0FBTyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ2xDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDaEQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sS0FBSyxDQUFDLENBQUMsb0JBQW9CLENBQUMsQ0FDakMsU0FBaUIsRUFDakIsV0FBK0M7UUFFL0MsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsYUFBYSxLQUFLLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQzNFLE1BQU0sSUFBSSxLQUFLLENBQUMsY0FBYyxTQUFTLDZCQUE2QixDQUFDLENBQUM7UUFDeEUsQ0FBQztRQUNELE1BQU0sYUFBYSxHQUFHLGdCQUFnQixDQUNwQyxJQUFJLENBQUMsZ0JBQWdCLEVBQ3JCLGlDQUFpQyxDQUNsQyxDQUFDO1FBQ0YsT0FBTyxJQUFJLENBQUMsc0JBQXNCLENBQUMsYUFBYSxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQzNELE1BQU0sVUFBVSxHQUFHLE1BQU0sSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzNELE9BQU8sTUFBTSxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDdkMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sS0FBSyxDQUFDLHFCQUFxQixDQUFDLEVBQVU7UUFDNUMsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFFTyxlQUFlLENBQUMsR0FBVyxFQUFFLElBQVk7UUFDL0MsSUFBSSxNQUEyQixDQUFDO1FBQ2hDLElBQUksQ0FBQztZQUNILE1BQU0sR0FBRyxXQUFXLENBQUMsSUFBSSxDQUF3QixDQUFDO1FBQ3BELENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQ0FBaUMsR0FBRyxLQUFLLGVBQWUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDckYsQ0FBQztRQUNELElBQUksQ0FBQyxNQUFNLElBQUksT0FBTyxNQUFNLEtBQUssUUFBUSxJQUFJLE9BQU8sTUFBTSxDQUFDLEVBQUUsS0FBSyxRQUFRLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDekYsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQ0FBaUMsR0FBRyxjQUFjLENBQUMsQ0FBQztRQUN0RSxDQUFDO1FBQ0QsSUFDRSxNQUFNLENBQUMsY0FBYyxLQUFLLFNBQVM7ZUFDaEMsQ0FDRCxPQUFPLE1BQU0sQ0FBQyxjQUFjLEtBQUssUUFBUTttQkFDdEMsQ0FBQyxNQUFNLENBQUMsY0FBYzttQkFDdEIsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEdBQUcsR0FBRzttQkFDbEMsT0FBTyxNQUFNLENBQUMsc0JBQXNCLEtBQUssUUFBUTttQkFDakQsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLHNCQUFzQixDQUFDLENBQ3pELEVBQ0QsQ0FBQztZQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsaUNBQWlDLEdBQUcsZ0NBQWdDLENBQUMsQ0FBQztRQUN4RixDQUFDO1FBQ0QsSUFBSSxNQUFNLENBQUMsY0FBYyxLQUFLLFNBQVMsSUFBSSxNQUFNLENBQUMsc0JBQXNCLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDdkYsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQ0FBaUMsR0FBRyxvQ0FBb0MsQ0FBQyxDQUFDO1FBQzVGLENBQUM7UUFDRCxJQUFJLE1BQU0sQ0FBQyxjQUFjLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDeEMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztZQUNqRSxJQUFJLE1BQU0sQ0FBQyxFQUFFLEtBQUssVUFBVSxFQUFFLENBQUM7Z0JBQzdCLE1BQU0sSUFBSSxLQUFLLENBQUMsaUNBQWlDLEdBQUcsMkJBQTJCLENBQUMsQ0FBQztZQUNuRixDQUFDO1FBQ0gsQ0FBQztRQUNELElBQUksTUFBTSxDQUFDLGFBQWEsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLGFBQWEsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLGFBQWEsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUMzRixNQUFNLElBQUksS0FBSyxDQUFDLGlDQUFpQyxHQUFHLDhCQUE4QixDQUFDLENBQUM7UUFDdEYsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDdkMsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQ0FBaUMsR0FBRyxnQ0FBZ0MsQ0FBQyxDQUFDO1FBQ3hGLENBQUM7UUFDRCxJQUFJLENBQUMsQ0FBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQzFGLE1BQU0sSUFBSSxLQUFLLENBQUMsaUNBQWlDLEdBQUcsc0JBQXNCLENBQUMsQ0FBQztRQUM5RSxDQUFDO1FBQ0QsSUFBSSxDQUFDLENBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUM7WUFDbkUsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQ0FBaUMsR0FBRywrQkFBK0IsQ0FBQyxDQUFDO1FBQ3ZGLENBQUM7UUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksTUFBTSxDQUFDLFFBQVEsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUM5RCxNQUFNLElBQUksS0FBSyxDQUFDLGlDQUFpQyxHQUFHLHlCQUF5QixDQUFDLENBQUM7UUFDakYsQ0FBQztRQUVELElBQ0UsTUFBTSxDQUFDLG1CQUFtQixLQUFLLFNBQVM7ZUFDckMsQ0FDRCxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDO21CQUN2QyxNQUFNLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBYyxFQUFFLEVBQUUsQ0FBQyxPQUFPLEtBQUssS0FBSyxRQUFRLENBQUMsQ0FDbEYsRUFDRCxDQUFDO1lBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQ0FBaUMsR0FBRyxnQ0FBZ0MsQ0FBQyxDQUFDO1FBQ3hGLENBQUM7UUFDRCxJQUNFLE1BQU0sQ0FBQyxrQkFBa0IsS0FBSyxTQUFTO2VBQ3BDLENBQ0QsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQzttQkFDdEMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFDLEtBQWMsRUFBRSxFQUFFLENBQUMsT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQ2pGLEVBQ0QsQ0FBQztZQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsaUNBQWlDLEdBQUcsK0JBQStCLENBQUMsQ0FBQztRQUN2RixDQUFDO1FBRUQsSUFBSSxNQUFNLENBQUMsYUFBYSxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsYUFBYSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzdELElBQ0UsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUM7bUJBQ25DLE1BQU0sQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBYyxFQUFFLEVBQUU7b0JBQ2hELElBQUksQ0FBQyxLQUFLLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUTt3QkFBRSxPQUFPLElBQUksQ0FBQztvQkFDckQsTUFBTSxLQUFLLEdBQUcsS0FBZ0MsQ0FBQztvQkFDL0MsT0FBTyxDQUFDLENBQ04sT0FBTyxLQUFLLENBQUMsU0FBUyxLQUFLLFFBQVE7MkJBQ2hDLE9BQU8sS0FBSyxDQUFDLG1CQUFtQixLQUFLLFFBQVE7MkJBQzdDLEtBQUssQ0FBQyxtQkFBbUIsS0FBSyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRTsyQkFDbEUsQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLGtCQUFrQixDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFlLENBQUM7MkJBQy9FLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQzsyQkFDaEMsQ0FBQyxLQUFLLENBQUMsUUFBUSxLQUFLLFNBQVMsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQzsyQkFDbEUsQ0FBQyxLQUFLLENBQUMsWUFBWSxLQUFLLFNBQVMsSUFBSSxPQUFPLEtBQUssQ0FBQyxZQUFZLEtBQUssUUFBUSxDQUFDLENBQ2hGLENBQUM7Z0JBQ0osQ0FBQyxDQUFDLEVBQ0YsQ0FBQztnQkFDRCxNQUFNLElBQUksS0FBSyxDQUFDLGlDQUFpQyxHQUFHLDRCQUE0QixDQUFDLENBQUM7WUFDcEYsQ0FBQztZQUNELElBQ0UsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQzttQkFDcEMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLEtBQWMsRUFBRSxFQUFFO29CQUNqRCxJQUFJLENBQUMsS0FBSyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVE7d0JBQUUsT0FBTyxJQUFJLENBQUM7b0JBQ3JELE1BQU0sU0FBUyxHQUFHLEtBQWdDLENBQUM7b0JBQ25ELE9BQU8sQ0FBQyxDQUNOLE9BQU8sU0FBUyxDQUFDLFdBQVcsS0FBSyxRQUFROzJCQUN0QyxTQUFTLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDOzJCQUNoQyxDQUFDLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBYyxDQUFDOzJCQUNyRSxDQUNELFNBQVMsQ0FBQyxZQUFZLEtBQUssU0FBUzsrQkFDakMsQ0FBQyxlQUFlLEVBQUUsV0FBVyxDQUFDLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxZQUFzQixDQUFDLENBQzdFOzJCQUNFLE9BQU8sU0FBUyxDQUFDLFNBQVMsS0FBSyxRQUFROzJCQUN2QyxPQUFPLFNBQVMsQ0FBQyxtQkFBbUIsS0FBSyxRQUFROzJCQUNqRCxTQUFTLENBQUMsbUJBQW1CLEtBQUssU0FBUyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUU7MkJBQzFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQzsyQkFDbkMsU0FBUyxDQUFDLFFBQW1CLElBQUksR0FBRzsyQkFDckMsT0FBTyxTQUFTLENBQUMsWUFBWSxLQUFLLFFBQVE7MkJBQzFDLENBQUMsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsS0FBZSxDQUFDOzJCQUM1RCxNQUFNLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUM7MkJBQ25DLFNBQVMsQ0FBQyxRQUFtQixJQUFJLENBQUM7MkJBQ25DLE1BQU0sQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQzsyQkFDdEMsQ0FBQyxTQUFTLENBQUMsU0FBUyxLQUFLLFNBQVMsSUFBSSxPQUFPLFNBQVMsQ0FBQyxTQUFTLEtBQUssUUFBUSxDQUFDOzJCQUM5RSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEtBQUssU0FBUyxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQ25GLENBQUM7Z0JBQ0osQ0FBQyxDQUFDLEVBQ0YsQ0FBQztnQkFDRCxNQUFNLElBQUksS0FBSyxDQUFDLGlDQUFpQyxHQUFHLDZCQUE2QixDQUFDLENBQUM7WUFDckYsQ0FBQztRQUNILENBQUM7UUFFRCxNQUFNLGNBQWMsR0FBRyxJQUFJLEdBQUcsQ0FBQztZQUM3QixTQUFTO1lBQ1QsVUFBVTtZQUNWLE1BQU07WUFDTixVQUFVO1lBQ1YsZUFBZTtZQUNmLGVBQWU7WUFDZixNQUFNO1lBQ04sV0FBVztZQUNYLFNBQVM7WUFDVCxjQUFjO1lBQ2QsY0FBYztZQUNkLGdCQUFnQjtZQUNoQixNQUFNO1lBQ04sTUFBTTtZQUNOLFNBQVM7U0FDVixDQUFDLENBQUM7UUFDSCxNQUFNLGdCQUFnQixHQUFHLENBQUMsS0FBYyxFQUFtQixFQUFFLENBQUMsQ0FDNUQsT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUNoRSxDQUFDO1FBQ0YsTUFBTSxzQkFBc0IsR0FBRyxDQUFDLEtBQWMsRUFBVyxFQUFFO1lBQ3pELElBQUksQ0FBQyxLQUFLLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUTtnQkFBRSxPQUFPLEtBQUssQ0FBQztZQUN0RCxNQUFNLEtBQUssR0FBRyxLQUFnQyxDQUFDO1lBQy9DLE9BQU8sQ0FDTCxPQUFPLEtBQUssQ0FBQyxXQUFXLEtBQUssUUFBUTttQkFDbEMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDO21CQUNsQyxjQUFjLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFlLENBQUM7bUJBQ3pDLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFNBQW1CLENBQUM7bUJBQ2xFLE9BQU8sS0FBSyxDQUFDLElBQUksS0FBSyxRQUFRO21CQUM5QixDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sSUFBSSxxQ0FBcUM7bUJBQy9ELENBQ0QsS0FBSyxDQUFDLFlBQVksS0FBSyxTQUFTO3VCQUM3QixDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFLLEtBQUssQ0FBQyxZQUF1QixJQUFJLEdBQUcsQ0FBQyxDQUNuRjttQkFDRSxDQUNELEtBQUssQ0FBQyxhQUFhLEtBQUssU0FBUzt1QkFDOUIsQ0FDRCxPQUFPLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQzsyQkFDekIsT0FBTyxLQUFLLENBQUMsYUFBYSxLQUFLLFFBQVE7MkJBQ3ZDLE1BQU0sQ0FBQyxhQUFhLENBQUUsS0FBSyxDQUFDLGFBQXlDLENBQUMsS0FBSyxDQUFDOzJCQUM1RSxDQUFFLEtBQUssQ0FBQyxhQUF3QyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUM7MkJBQzVELE1BQU0sQ0FBQyxhQUFhLENBQUUsS0FBSyxDQUFDLGFBQXlDLENBQUMsTUFBTSxDQUFDOzJCQUM3RSxDQUFFLEtBQUssQ0FBQyxhQUF3QyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUM7MkJBQzdELE1BQU0sQ0FBQyxhQUFhLENBQUUsS0FBSyxDQUFDLGFBQXlDLENBQUMsVUFBVSxDQUFDOzJCQUNqRixDQUFFLEtBQUssQ0FBQyxhQUF3QyxDQUFDLFVBQVUsSUFBSSxDQUFDLENBQUMsQ0FDckUsQ0FDRixDQUNGLENBQUM7UUFDSixDQUFDLENBQUM7UUFDRixNQUFNLGtCQUFrQixHQUFHLENBQUMsS0FBYyxFQUFXLEVBQUU7WUFDckQsSUFBSSxDQUFDLEtBQUssSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRO2dCQUFFLE9BQU8sS0FBSyxDQUFDO1lBQ3RELE1BQU0sV0FBVyxHQUFHLEtBQWdDLENBQUM7WUFDckQsT0FBTyxDQUNMLE9BQU8sV0FBVyxDQUFDLEVBQUUsS0FBSyxRQUFRO21CQUMvQixXQUFXLENBQUMsRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDO21CQUN6QixXQUFXLENBQUMsV0FBVyxLQUFLLE1BQU0sQ0FBQyxFQUFFO21CQUNyQyxNQUFNLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUM7bUJBQ3pDLFdBQVcsQ0FBQyxZQUF1QixJQUFJLENBQUM7bUJBQ3pDLE9BQU8sV0FBVyxDQUFDLFVBQVUsS0FBSyxRQUFRO21CQUMxQyxXQUFXLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDO21CQUNqQyxNQUFNLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUM7bUJBQ3ZDLFdBQVcsQ0FBQyxVQUFxQixJQUFJLENBQUM7bUJBQ3RDLFdBQVcsQ0FBQyxVQUFxQixJQUFJLE1BQU07bUJBQzVDLENBQ0QsV0FBVyxDQUFDLGVBQWUsS0FBSyxTQUFTO3VCQUN0QyxPQUFPLFdBQVcsQ0FBQyxlQUFlLEtBQUssUUFBUSxDQUNuRDttQkFDRSxLQUFLLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUM7bUJBQ3JDLFdBQVcsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxPQUFPLFNBQVMsS0FBSyxRQUFRLENBQUM7bUJBQzFFLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUM7bUJBQ3ZDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUM7bUJBQ3pDLE9BQU8sV0FBVyxDQUFDLFVBQVUsS0FBSyxRQUFRO21CQUMxQyxNQUFNLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUM7bUJBQ3ZDLFdBQVcsQ0FBQyxVQUFVLElBQUksQ0FBQzttQkFDM0IsQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxPQUFpQixDQUFDO21CQUMvRCxPQUFPLFdBQVcsQ0FBQyxTQUFTLEtBQUssU0FBUzttQkFDMUMsQ0FBQyxXQUFXLENBQUMsU0FBUyxLQUFLLFNBQVMsSUFBSSxPQUFPLFdBQVcsQ0FBQyxTQUFTLEtBQUssUUFBUSxDQUFDO21CQUNsRixDQUFDLFdBQVcsQ0FBQyxRQUFRLEtBQUssU0FBUyxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO21CQUM5RSxDQUNELFdBQVcsQ0FBQyxnQkFBZ0IsS0FBSyxTQUFTO3VCQUN2QyxDQUNELEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDOzJCQUN4QyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7NEJBQzlDLElBQUksQ0FBQyxLQUFLLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUTtnQ0FBRSxPQUFPLEtBQUssQ0FBQzs0QkFDdEQsTUFBTSxNQUFNLEdBQUcsS0FBZ0MsQ0FBQzs0QkFDaEQsT0FBTyxDQUNMLE9BQU8sTUFBTSxDQUFDLFNBQVMsS0FBSyxRQUFRO21DQUNqQyxPQUFPLE1BQU0sQ0FBQyxRQUFRLEtBQUssU0FBUzttQ0FDcEMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQ3pDLENBQUM7d0JBQ0osQ0FBQyxDQUFDLENBQ0gsQ0FDRjttQkFDRSxDQUNELFdBQVcsQ0FBQyxzQkFBc0IsS0FBSyxTQUFTO3VCQUM3QyxDQUNELE9BQU8sQ0FBQyxXQUFXLENBQUMsc0JBQXNCLENBQUM7MkJBQ3hDLE9BQU8sV0FBVyxDQUFDLHNCQUFzQixLQUFLLFFBQVE7MkJBQ3RELENBQUMsU0FBUyxFQUFFLFdBQVcsRUFBRSxlQUFlLEVBQUUsZUFBZSxDQUFDLENBQUMsUUFBUSxDQUNuRSxXQUFXLENBQUMsc0JBQWtELENBQUMsS0FBZSxDQUNoRjsyQkFDRSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsZUFBZSxDQUFDLENBQUMsUUFBUSxDQUMxQyxXQUFXLENBQUMsc0JBQWtELENBQUMsT0FBaUIsQ0FDbEY7MkJBQ0UsZ0JBQWdCLENBQUUsV0FBVyxDQUFDLHNCQUFrRCxDQUFDLFNBQVMsQ0FBQyxDQUMvRixDQUNGO21CQUNFLENBQUMsV0FBVyxDQUFDLFlBQVksS0FBSyxTQUFTLElBQUksY0FBYyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsWUFBc0IsQ0FBQyxDQUFDO21CQUNsRyxDQUFDLFdBQVcsQ0FBQyxLQUFLLEtBQUssU0FBUyxJQUFJLE9BQU8sV0FBVyxDQUFDLEtBQUssS0FBSyxRQUFRLENBQUM7bUJBQzFFLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQzttQkFDckMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxNQUFNLElBQUksMkJBQTJCO21CQUM1RCxXQUFXLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQzttQkFDcEQsV0FBVyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQzlCLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUUsS0FBMEIsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLEVBQ2pGLENBQUMsQ0FDRixJQUFJLDhCQUE4QixDQUNwQyxDQUFDO1FBQ0osQ0FBQyxDQUFDO1FBQ0YsSUFDRSxNQUFNLENBQUMsZ0JBQWdCLEtBQUssU0FBUztlQUNsQyxDQUNELENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUM7bUJBQ3BDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsRUFBRTttQkFDbkMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLEtBQWMsRUFBRSxFQUFFLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUNoRixFQUNELENBQUM7WUFDRCxNQUFNLElBQUksS0FBSyxDQUFDLGlDQUFpQyxHQUFHLDZCQUE2QixDQUFDLENBQUM7UUFDckYsQ0FBQztRQUVELE1BQU0sU0FBUyxHQUFHLENBQUMsS0FBYyxFQUFFLEtBQWEsRUFBUSxFQUFFO1lBQ3hELElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFLLEtBQWdCLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3JELE1BQU0sSUFBSSxLQUFLLENBQUMsaUNBQWlDLEdBQUcsYUFBYSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQzVFLENBQUM7WUFDRCxPQUFPLElBQUksSUFBSSxDQUFDLEtBQWUsQ0FBQyxDQUFDO1FBQ25DLENBQUMsQ0FBQztRQUVGLElBQ0UsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCO1lBQ3hCLE9BQU8sTUFBTSxDQUFDLGdCQUFnQixLQUFLLFFBQVE7WUFDM0MsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsT0FBTztZQUNoQyxPQUFPLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEtBQUssUUFBUTtZQUNuRCxPQUFPLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEtBQUssUUFBUTtZQUNyRCxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTO1lBQ2xDLE9BQU8sTUFBTSxDQUFDLGdCQUFnQixDQUFDLFlBQVksS0FBSyxRQUFRLEVBQ3hELENBQUM7WUFDRCxNQUFNLElBQUksS0FBSyxDQUFDLGlDQUFpQyxHQUFHLHlCQUF5QixDQUFDLENBQUM7UUFDakYsQ0FBQztRQUVELElBQ0UsTUFBTSxDQUFDLGVBQWUsS0FBSyxTQUFTO2VBQ2pDLENBQUMsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsSUFBSSxNQUFNLENBQUMsZUFBZSxHQUFHLENBQUMsQ0FBQyxFQUNoRixDQUFDO1lBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQ0FBaUMsR0FBRyw0QkFBNEIsQ0FBQyxDQUFDO1FBQ3BGLENBQUM7UUFFRCxNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsT0FBd0IsQ0FBQztRQUN2RSxJQUFJLGFBQWEsQ0FBQyxXQUFXLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDNUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7Z0JBQzlDLE1BQU0sSUFBSSxLQUFLLENBQUMsaUNBQWlDLEdBQUcsdUJBQXVCLENBQUMsQ0FBQztZQUMvRSxDQUFDO1lBQ0QsS0FBSyxNQUFNLFVBQVUsSUFBSSxhQUFhLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ25ELElBQUksQ0FBQyxVQUFVLElBQUksT0FBTyxVQUFVLEtBQUssUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztvQkFDMUYsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQ0FBaUMsR0FBRyw4QkFBOEIsQ0FBQyxDQUFDO2dCQUN0RixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLGdCQUF1QixDQUFDO1FBQzVCLElBQUksQ0FBQztZQUNILGdCQUFnQixHQUFHLElBQUksS0FBSyxDQUFDLGFBQWEsQ0FBQztpQkFDeEMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUM7aUJBQy9DLGVBQWUsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDM0QsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixNQUFNLElBQUksS0FBSyxDQUFDLGlDQUFpQyxHQUFHLEtBQUssZUFBZSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNyRixDQUFDO1FBRUQsSUFBSSxVQUE4QixDQUFDO1FBQ25DLElBQUksWUFBMEMsQ0FBQztRQUMvQyxJQUFJLE1BQU0sQ0FBQyxhQUFhLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDL0IsSUFBSSxDQUFDLElBQUksQ0FBQywwQkFBMEIsRUFBRSxFQUFFLENBQUM7Z0JBQ3ZDLE1BQU0sSUFBSSxLQUFLLENBQUMsaUNBQWlDLEdBQUcsd0NBQXdDLENBQUMsQ0FBQztZQUNoRyxDQUFDO1lBQ0QsSUFDRSxNQUFNLENBQUMsYUFBYSxLQUFLLFlBQVk7bUJBQ2xDLE1BQU0sQ0FBQyxjQUFjLEtBQUssS0FBSzttQkFDL0IsTUFBTSxDQUFDLEtBQUssS0FBSyxTQUFTO21CQUMxQixNQUFNLENBQUMsZUFBZSxLQUFLLENBQUM7bUJBQzVCLE9BQU8sTUFBTSxDQUFDLGdCQUFnQixLQUFLLFFBQVE7bUJBQzNDLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQzttQkFDL0MsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQzttQkFDOUMsTUFBTSxDQUFDLGdCQUFnQixHQUFHLENBQUM7bUJBQzNCLE1BQU0sQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQjttQkFDekQsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUM7bUJBQ25DLE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxLQUFLLE1BQU0sQ0FBQyxnQkFBZ0IsRUFDdkQsQ0FBQztnQkFDRCxNQUFNLElBQUksS0FBSyxDQUFDLGlDQUFpQyxHQUFHLGdDQUFnQyxDQUFDLENBQUM7WUFDeEYsQ0FBQztZQUNELElBQUksQ0FBQztnQkFDSCwrQkFBK0IsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDckQsQ0FBQztZQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7Z0JBQ2YsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQ0FBaUMsR0FBRyxLQUFLLGVBQWUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDckYsQ0FBQztZQUNELElBQUksa0JBQW9DLENBQUM7WUFDekMsSUFBSSxDQUFDO2dCQUNILGtCQUFrQixHQUFHLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUNyRSxDQUFDO1lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztnQkFDZixNQUFNLElBQUksS0FBSyxDQUFDLGlDQUFpQyxHQUFHLEtBQUssZUFBZSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNyRixDQUFDO1lBQ0QsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLGtCQUFrQixDQUFDLEtBQUssSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztnQkFDL0UsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQ0FBaUMsR0FBRyxrQ0FBa0MsQ0FBQyxDQUFDO1lBQzFGLENBQUM7WUFDRCxNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDNUUsSUFBSSxNQUFNLEtBQUssTUFBTSxDQUFDLGdCQUFnQixFQUFFLENBQUM7Z0JBQ3ZDLE1BQU0sSUFBSSxLQUFLLENBQUMsaUNBQWlDLEdBQUcsK0JBQStCLENBQUMsQ0FBQztZQUN2RixDQUFDO1lBQ0QsSUFDRSxNQUFNLENBQUMsc0JBQXNCO29CQUN6Qix5QkFBeUIsQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLGtCQUFrQixDQUFDLEVBQ3BFLENBQUM7Z0JBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQ0FBaUMsR0FBRyxrQ0FBa0MsQ0FBQyxDQUFDO1lBQzFGLENBQUM7WUFDRCxJQUNFLGFBQWEsQ0FBQyxJQUFJLEtBQUssa0JBQWtCLENBQUMsSUFBSTttQkFDM0MsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLENBQUM7d0JBQ3BGLElBQUksQ0FBQyxTQUFTLENBQUMsa0JBQWtCLENBQUMsRUFBRSxDQUFDO21CQUN4QyxhQUFhLENBQUMsT0FBTyxLQUFLLEVBQUU7bUJBQzVCLGFBQWEsQ0FBQyxJQUFJLEtBQUssRUFBRTttQkFDekIsYUFBYSxDQUFDLElBQUksS0FBSyxTQUFTO21CQUNoQyxhQUFhLENBQUMsV0FBVyxLQUFLLFNBQVM7bUJBQ3ZDLGFBQWEsQ0FBQyxPQUFPLEtBQUssU0FBUyxFQUN0QyxDQUFDO2dCQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsaUNBQWlDLEdBQUcsMkNBQTJDLENBQUMsQ0FBQztZQUNuRyxDQUFDO1lBQ0QsVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUM7WUFDL0IsWUFBWSxHQUFHLGtCQUFrQixDQUFDO1FBQ3BDLENBQUM7UUFFRCxJQUFJLGVBQTBDLENBQUM7UUFDL0MsSUFBSSxnQkFBb0MsQ0FBQztRQUN6QyxJQUFJLE1BQU0sQ0FBQyxhQUFhLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxhQUFhLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDN0QsZUFBZSxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBb0MsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDdEYsR0FBRyxLQUFLO2dCQUNSLFNBQVMsRUFBRSxTQUFTLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSwyQkFBMkIsQ0FBQzthQUNuRSxDQUFDLENBQUMsQ0FBQztZQUNKLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFpQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUNyRixHQUFHLFNBQVM7Z0JBQ1osV0FBVyxFQUFFLFNBQVMsQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLDhCQUE4QixDQUFDO2dCQUM3RSxHQUFHLENBQUMsU0FBUyxDQUFDLFdBQVcsS0FBSyxTQUFTO29CQUNyQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsU0FBUyxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsOEJBQThCLENBQUMsRUFBRTtvQkFDbkYsQ0FBQyxDQUFDLEVBQUUsQ0FBQzthQUNSLENBQUMsQ0FBQyxDQUFDO1FBQ04sQ0FBQzthQUFNLENBQUM7WUFDTix3RUFBd0U7WUFDeEUsMEVBQTBFO1lBQzFFLGVBQWUsR0FBRyxJQUFJLENBQUMsNEJBQTRCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUN0RSxNQUFNLFNBQVMsR0FBRyxJQUFJLEdBQUcsQ0FDdkIsQ0FBQyxNQUFNLENBQUMsbUJBQW1CLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBaUIsRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQ3ZGLENBQUM7WUFDRixNQUFNLFFBQVEsR0FBRyxJQUFJLEdBQUcsQ0FDdEIsQ0FBQyxNQUFNLENBQUMsa0JBQWtCLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBaUIsRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQ3RGLENBQUM7WUFDRixLQUFLLE1BQU0sS0FBSyxJQUFJLGVBQWUsRUFBRSxDQUFDO2dCQUNwQyxJQUFJLFNBQVMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDO29CQUFFLEtBQUssQ0FBQyxLQUFLLEdBQUcsV0FBVyxDQUFDO3FCQUNuRSxJQUFJLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDO29CQUFFLEtBQUssQ0FBQyxLQUFLLEdBQUcsa0JBQWtCLENBQUM7WUFDckYsQ0FBQztZQUNELGdCQUFnQixHQUFHLEVBQUUsQ0FBQztRQUN4QixDQUFDO1FBRUQsTUFBTSxJQUFJLEdBQWU7WUFDdkIsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFO1lBQ2IsR0FBRyxDQUFDLE1BQU0sQ0FBQyxjQUFjLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQztnQkFDeEMsY0FBYyxFQUFFLE1BQU0sQ0FBQyxjQUFjO2dCQUNyQyxzQkFBc0IsRUFBRSxNQUFNLENBQUMsc0JBQXNCO2FBQ3RELENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNQLGNBQWMsRUFBRSxNQUFNLENBQUMsY0FBYztZQUNyQyxnQkFBZ0I7WUFDaEIsR0FBRyxDQUFDLE1BQU0sQ0FBQyxhQUFhLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDL0IsYUFBYSxFQUFFLFlBQXFCO2dCQUNwQyxnQkFBZ0IsRUFBRSxNQUFNLENBQUMsZ0JBQWdCO2dCQUN6QyxnQkFBZ0IsRUFBRSxNQUFNLENBQUMsZ0JBQWdCO2dCQUN6QyxZQUFZLEVBQUUsb0JBQW9CLENBQUMsWUFBYSxDQUFDO2FBQ2xELENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNQLGVBQWUsRUFBRSxNQUFNLENBQUMsZUFBZSxJQUFJLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxNQUFNO1lBQzlFLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBb0IsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDL0QsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNO1lBQ3JCLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUTtZQUN6QixHQUFHLENBQUMsT0FBTyxNQUFNLENBQUMsU0FBUyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDaEYsU0FBUyxFQUFFLFNBQVMsQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLFdBQVcsQ0FBQztZQUNuRCxTQUFTLEVBQUUsU0FBUyxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsV0FBVyxDQUFDO1lBQ25ELFdBQVcsRUFBRSxTQUFTLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxhQUFhLENBQUM7WUFDekQsR0FBRyxDQUFDLE1BQU0sQ0FBQyxXQUFXO2dCQUNwQixDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsU0FBUyxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsYUFBYSxDQUFDLEVBQUU7Z0JBQy9ELENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDUCxtQkFBbUIsRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQztnQkFDNUQsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUM7Z0JBQ2pDLENBQUMsQ0FBQyxFQUFFO1lBQ04sa0JBQWtCLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUM7Z0JBQzFELENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLGtCQUFrQixDQUFDO2dCQUNoQyxDQUFDLENBQUMsRUFBRTtZQUNOLGVBQWU7WUFDZixnQkFBZ0I7WUFDaEIsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUM7Z0JBQ3RELENBQUMsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDO29CQUN2RCxHQUFHLFdBQVc7b0JBQ2QsVUFBVSxFQUFFLENBQUMsR0FBRyxXQUFXLENBQUMsVUFBVSxDQUFDO29CQUN2QyxnQkFBZ0IsRUFBRSxXQUFXLENBQUMsZ0JBQWdCLEVBQUUsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxNQUFNLEVBQUUsQ0FBQyxDQUFDO29CQUNoRixVQUFVLEVBQUUsdUJBQXVCLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQztpQkFDNUQsQ0FBQyxDQUFDO2dCQUNMLENBQUMsQ0FBQyxFQUFFO1NBQ08sQ0FBQztRQUNoQixPQUFPO1lBQ0wsSUFBSTtZQUNKLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztTQUN0QyxDQUFDO0lBQ0osQ0FBQztJQUVPLEtBQUssQ0FBQyxlQUFlO1FBQzNCLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDO1FBQ25ELElBQUksQ0FBQyxjQUFjO1lBQUUsT0FBTztRQUM1QixJQUFJLGtCQUFrQixHQUFHLENBQUMsQ0FBQztRQUUzQixNQUFNLE9BQU8sR0FBRyxLQUFLLEVBQUUsR0FBVyxFQUFpQixFQUFFO1lBQ25ELElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQztnQkFDaEQsTUFBTSxJQUFJLEtBQUssQ0FBQyw2Q0FBNkMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEtBQUssR0FBRyxFQUFFLENBQUMsQ0FBQztZQUNyRyxDQUFDO1lBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDO2dCQUFFLE9BQU87WUFDbkMsTUFBTSxJQUFJLEdBQUcsTUFBTSxjQUFjLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzNDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDVixNQUFNLElBQUksS0FBSyxDQUFDLGlEQUFpRCxHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQzFFLENBQUM7WUFDRCxNQUFNLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQzdELElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7Z0JBQzVCLE1BQU0sSUFBSSxLQUFLLENBQUMsb0NBQW9DLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ2pFLENBQUM7WUFDRCxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ2pELE1BQU0sSUFBSSxLQUFLLENBQUMsb0NBQW9DLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxRQUFRLENBQUMsQ0FBQztZQUN6RixDQUFDO1lBQ0QsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLFlBQVksRUFBRSxDQUFDO2dCQUNqQyxJQUFJLENBQUMsTUFBTSxHQUFHLFVBQVUsQ0FBQztnQkFDekIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO2dCQUM5QixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7Z0JBQzVCLElBQUksQ0FBQyxTQUFTLEdBQUcsaURBQWlELENBQUM7Z0JBQ25FLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUM7Z0JBQ3pDLGtCQUFrQixFQUFFLENBQUM7WUFDdkIsQ0FBQztZQUNELElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDaEMsQ0FBQyxDQUFDO1FBRUYsSUFBSSxjQUFjLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDNUIsSUFBSSxpQkFBcUMsQ0FBQztZQUMxQyxNQUFNLFVBQVUsR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO1lBQ3JDLEdBQUcsQ0FBQztnQkFDRixNQUFNLElBQUksR0FBRyxNQUFNLGNBQWMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUU7b0JBQ3JFLEtBQUssRUFBRSxvQ0FBb0M7b0JBQzNDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsRUFBRSxpQkFBaUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7aUJBQ3BELENBQUMsQ0FBQztnQkFDSCxJQUNFLENBQUMsSUFBSTt1QkFDRixDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQzt1QkFDekIsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsb0NBQW9DO3VCQUN2RCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsT0FBTyxHQUFHLEtBQUssUUFBUSxDQUFDO3VCQUNoRCxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUMvQyxDQUFDO29CQUNELE1BQU0sSUFBSSxLQUFLLENBQUMseUNBQXlDLENBQUMsQ0FBQztnQkFDN0QsQ0FBQztnQkFDRCxLQUFLLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFO29CQUFFLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUM1RCxJQUFJLElBQUksQ0FBQyxpQkFBaUIsS0FBSyxTQUFTLEVBQUUsQ0FBQztvQkFDekMsSUFDRSxPQUFPLElBQUksQ0FBQyxpQkFBaUIsS0FBSyxRQUFROzJCQUN2QyxDQUFDLElBQUksQ0FBQyxpQkFBaUI7MkJBQ3ZCLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUM7MkJBQ3RCLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEVBQ3pDLENBQUM7d0JBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQyxvREFBb0QsQ0FBQyxDQUFDO29CQUN4RSxDQUFDO29CQUNELFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7Z0JBQ3pDLENBQUM7Z0JBQ0QsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDO1lBQzdDLENBQUMsUUFBUSxpQkFBaUIsRUFBRTtRQUM5QixDQUFDO2FBQU0sQ0FBQztZQUNOLEtBQUssTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7Z0JBQ2pGLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3JCLENBQUM7UUFDSCxDQUFDO1FBRUQsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ25CLE1BQU0sQ0FBQyxHQUFHLENBQ1IsTUFBTSxFQUNOLFVBQVUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLCtDQUErQyxrQkFBa0Isc0JBQXNCLENBQ2pILENBQUM7SUFDSixDQUFDO0lBRUQ7O09BRUc7SUFDSyxXQUFXO1FBQ2pCLGlCQUFpQjtRQUNqQixJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztRQUN2QyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRztZQUNsQixPQUFPLEVBQUUsQ0FBQztZQUNWLFVBQVUsRUFBRSxDQUFDO1lBQ2IsU0FBUyxFQUFFLENBQUM7WUFDWixNQUFNLEVBQUUsQ0FBQztZQUNULFFBQVEsRUFBRSxDQUFDO1NBQ1osQ0FBQztRQUNGLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHO1lBQ2pCLE9BQU8sRUFBRSxDQUFDO1lBQ1YsR0FBRyxFQUFFLENBQUM7WUFDTixPQUFPLEVBQUUsQ0FBQztTQUNYLENBQUM7UUFFRixJQUFJLGFBQWEsR0FBRyxDQUFDLENBQUM7UUFDdEIsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQzVCLElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQztRQUVuQiwyQkFBMkI7UUFDM0IsS0FBSyxNQUFNLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7WUFDdkMsa0JBQWtCO1lBQ2xCLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBRWpDLGdCQUFnQjtZQUNoQixJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQztZQUV4Qyx1QkFBdUI7WUFDdkIsYUFBYSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUM7WUFFL0IsMEJBQTBCO1lBQzFCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDMUMsSUFBSSxRQUFRLEdBQUcsVUFBVSxFQUFFLENBQUM7Z0JBQzFCLFVBQVUsR0FBRyxRQUFRLENBQUM7WUFDeEIsQ0FBQztZQUNELElBQUksUUFBUSxHQUFHLFVBQVUsRUFBRSxDQUFDO2dCQUMxQixVQUFVLEdBQUcsUUFBUSxDQUFDO1lBQ3hCLENBQUM7UUFDSCxDQUFDO1FBRUQsNkJBQTZCO1FBQzdCLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFdkYsd0JBQXdCO1FBQ3hCLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUMvRSxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFFL0Usc0JBQXNCO1FBQ3RCLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7UUFFaEQsd0JBQXdCO1FBQ3hCLElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUU5Qyx3QkFBd0I7UUFDeEIsS0FBSyxVQUFVLENBQUMsSUFBSSxFQUFFLGNBQWMsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxRQUFRO1FBQ2IsT0FBTztZQUNMLEdBQUcsSUFBSSxDQUFDLEtBQUs7WUFDYixNQUFNLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFO1lBQ2hDLEtBQUssRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUU7WUFDOUIsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNqRixHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1NBQ2xGLENBQUM7SUFDSixDQUFDO0lBRUQ7O09BRUc7SUFDSSxLQUFLO1FBQ1YsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JCLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN0QixNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSx5QkFBeUIsQ0FBQyxDQUFDO1FBQ2hELENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxNQUFNO1FBQ1gsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3ZCLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLDBCQUEwQixDQUFDLENBQUM7UUFDakQsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDZCxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNJLEtBQUssQ0FBQyxlQUFlLENBQUMsU0FBaUIsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUk7UUFDbkUsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JCLE1BQU0sTUFBTSxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQztRQUU3QyxnRUFBZ0U7UUFDaEUsTUFBTSxXQUFXLEdBQWEsRUFBRSxDQUFDO1FBQ2pDLEtBQUssTUFBTSxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO1lBQ3ZDLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUM3RCxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLEtBQUssS0FBSyxXQUFXLENBQy9DLENBQUM7WUFDRixJQUNFLENBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO21CQUMxQyxJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU07bUJBQ3ZCLENBQUMsb0JBQW9CLEVBQ3hCLENBQUM7Z0JBQ0QsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDNUIsQ0FBQztRQUNILENBQUM7UUFFRCx5QkFBeUI7UUFDekIsS0FBSyxNQUFNLEVBQUUsSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUM3QixNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDNUIsQ0FBQztRQUNELE1BQU0sSUFBSSxDQUFDLG1DQUFtQyxFQUFFLENBQUM7UUFFakQsSUFBSSxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzNCLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLGNBQWMsV0FBVyxDQUFDLE1BQU0sZ0NBQWdDLENBQUMsQ0FBQztRQUN2RixDQUFDO1FBQ0QsT0FBTyxXQUFXLENBQUMsTUFBTSxDQUFDO0lBQzVCLENBQUM7SUFFRDs7T0FFRztJQUNJLFFBQVE7UUFDYixJQUFJLElBQUksQ0FBQyxjQUFjO1lBQUUsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDO1FBQ3BELElBQUksSUFBSSxDQUFDLGNBQWMsS0FBSyxRQUFRO1lBQUUsT0FBTyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDL0QsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQztRQUMvQixJQUFJLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDO1FBQ2hDLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxLQUFLLENBQUM7UUFDdEMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDMUMsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDO0lBQzdCLENBQUM7SUFFTyxLQUFLLENBQUMsWUFBWTtRQUN4QixNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxvQ0FBb0MsQ0FBQyxDQUFDO1FBQ3pELElBQUksZ0JBQXlCLENBQUM7UUFFOUIsSUFBSSxDQUFDO1lBQ0gsMERBQTBEO1lBQzFELElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN0QixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUM7WUFDOUMsSUFBSSxVQUFVLEVBQUUsQ0FBQztnQkFDZixNQUFNLFVBQVUsQ0FBQztZQUNuQixDQUFDO1lBQ0QsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDO1lBQ3pCLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3BDLE1BQU0sT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7WUFDckQsQ0FBQztZQUNELE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDekMsTUFBTSxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ25FLENBQUM7WUFDRCxNQUFNLElBQUksQ0FBQyw2QkFBNkIsRUFBRSxDQUFDO1lBQzNDLElBQUksQ0FBQyxjQUFjLEdBQUcsZUFBZSxDQUFDO1lBRXRDLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDaEMsS0FBSyxNQUFNLE1BQU0sSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7b0JBQzVDLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsS0FBSyxJQUFJLEVBQUU7d0JBQzFDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO3dCQUMzQyxpRUFBaUU7d0JBQ2pFLHFFQUFxRTt3QkFDckUsSUFBSSxDQUFDLFdBQVcsSUFBSSxXQUFXLENBQUMsYUFBYSxLQUFLLFlBQVk7NEJBQUUsT0FBTzt3QkFDdkUsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDO29CQUN0QyxDQUFDLENBQUMsQ0FBQztnQkFDTCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2Ysc0VBQXNFO1lBQ3RFLHFDQUFxQztZQUNyQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7WUFDekIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUscURBQXNELEtBQWUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZHLENBQUM7Z0JBQVMsQ0FBQztZQUNULElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ25CLE1BQU0sVUFBVSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQztZQUNuQyxJQUFJLENBQUMsY0FBYyxHQUFHLFFBQVEsQ0FBQztZQUMvQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsU0FBUyxDQUFDO1lBQ25DLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzVCLENBQUM7UUFFRCxJQUFJLGdCQUFnQjtZQUFFLE1BQU0sZ0JBQWdCLENBQUM7UUFDN0MsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsNkNBQTZDLENBQUMsQ0FBQztJQUNwRSxDQUFDO0NBQ0YifQ==
|