@colijnit/transaction 12.1.2 → 12.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (27) hide show
  1. package/app/component/core/base/transaction-base.component.d.ts +10 -0
  2. package/app/component/{shopping-cart → core}/characteristic-answer/characteristic-answer.component.d.ts +0 -0
  3. package/app/component/core/warehouse/warehouse.component.d.ts +35 -0
  4. package/app/component/service-order/service-order.component.d.ts +9 -4
  5. package/app/component/service-order/transaction-manager/transaction-manager.component.d.ts +63 -0
  6. package/app/component/shopping-cart/shopping-cart-manager/shopping-cart-manager.component.d.ts +1 -1
  7. package/app/service/transaction.service.d.ts +14 -8
  8. package/bundles/colijnit-transaction.umd.js +850 -115
  9. package/bundles/colijnit-transaction.umd.js.map +1 -1
  10. package/colijnit-transaction.d.ts +20 -18
  11. package/colijnit-transaction.metadata.json +1 -1
  12. package/esm2015/app/component/core/base/transaction-base.component.js +35 -12
  13. package/esm2015/app/component/core/characteristic-answer/characteristic-answer.component.js +100 -0
  14. package/esm2015/app/component/core/warehouse/warehouse.component.js +133 -0
  15. package/esm2015/app/component/service-order/ione-service-order-module.js +7 -2
  16. package/esm2015/app/component/service-order/service-order.component.js +35 -6
  17. package/esm2015/app/component/service-order/transaction-article-text/transaction-article-text.component.js +16 -5
  18. package/esm2015/app/component/service-order/transaction-manager/transaction-manager.component.js +305 -0
  19. package/esm2015/app/component/shopping-cart/ione-shopping-cart.module.js +3 -3
  20. package/esm2015/app/component/shopping-cart/shopping-cart-manager/shopping-cart-manager.component.js +1 -1
  21. package/esm2015/app/service/transaction.service.js +72 -23
  22. package/esm2015/assets/dictionary/text.properties.js +5 -1
  23. package/esm2015/colijnit-transaction.js +21 -19
  24. package/fesm2015/colijnit-transaction.js +584 -45
  25. package/fesm2015/colijnit-transaction.js.map +1 -1
  26. package/package.json +1 -1
  27. package/esm2015/app/component/shopping-cart/characteristic-answer/characteristic-answer.component.js +0 -99
@@ -12,9 +12,11 @@ import { TransactionLineType } from "@colijnit/transactionapi/build/enum/transac
12
12
  import { LineOperationStatus } from "@colijnit/transactionapi/build/model/line-operation-status.bo";
13
13
  import { TransactionInfo } from "@colijnit/transactionapi/build/model/transaction-info.bo";
14
14
  import { PendingReasonType } from "@colijnit/transactionapi/build/enum/pending-reason-type.enum";
15
+ import { PromptService } from "@colijnit/corecomponents_v12";
15
16
  export class TransactionService {
16
- constructor(_connector) {
17
+ constructor(_connector, _prompt) {
17
18
  this._connector = _connector;
19
+ this._prompt = _prompt;
18
20
  this.transactionUpdated = new EventEmitter();
19
21
  this.transactionLoaded = new EventEmitter();
20
22
  this.applicationUser = false;
@@ -60,6 +62,11 @@ export class TransactionService {
60
62
  && line.pendingReasonType !== PendingReasonType.NON_CRITICAL_DISCONTINUATION);
61
63
  return status;
62
64
  }
65
+ pendingLineOperationStatus(lineOperationStatuses) {
66
+ const status = lineOperationStatuses.find(line => line.pendingReasonType !== PendingReasonType.NONE
67
+ && line.pendingReasonType !== PendingReasonType.NON_CRITICAL_DISCONTINUATION);
68
+ return status;
69
+ }
63
70
  getArticleFullObject(goodId) {
64
71
  return __awaiter(this, void 0, void 0, function* () {
65
72
  return yield this._connector.getArticleFullObject(goodId);
@@ -140,11 +147,10 @@ export class TransactionService {
140
147
  });
141
148
  });
142
149
  }
143
- resolvePendingLineReason(pendingLineValues) {
150
+ resolvePendingLineReason(pendingLineValues, remember = true) {
144
151
  return new Promise((resolve) => {
145
152
  this._connector.resolvePendingLineReason(pendingLineValues).then((response) => __awaiter(this, void 0, void 0, function* () {
146
- this._rememberCurrentTransaction(response);
147
- this._rememberCurrentTransactionLineStatus(response);
153
+ this._rememberResponse(remember, response);
148
154
  resolve(response);
149
155
  })).catch((reason) => {
150
156
  resolve();
@@ -198,6 +204,28 @@ export class TransactionService {
198
204
  }
199
205
  });
200
206
  }
207
+ saveTransactionByUuid(transactionUuid) {
208
+ return __awaiter(this, void 0, void 0, function* () {
209
+ return new Promise((resolve, reject) => {
210
+ this._connector.saveTransaction(transactionUuid)
211
+ .then((response) => __awaiter(this, void 0, void 0, function* () {
212
+ if (response.isSuccess) {
213
+ this.transactionLoaded.emit(response);
214
+ resolve(true);
215
+ }
216
+ else {
217
+ reject(false);
218
+ }
219
+ }))
220
+ .catch((reason) => {
221
+ if (reason) {
222
+ this._prompt.showError(reason.getFullErrorString());
223
+ }
224
+ reject(false);
225
+ });
226
+ });
227
+ });
228
+ }
201
229
  addRelationToTransaction(relationId) {
202
230
  return __awaiter(this, void 0, void 0, function* () {
203
231
  const success = yield this._connector.addRelationToTransaction(this._currentTransaction.uuid, relationId);
@@ -311,13 +339,29 @@ export class TransactionService {
311
339
  });
312
340
  });
313
341
  }
314
- addTransactionLine(lineType, articleNo, amount, warehouseNo, commissionCode, isReturn, aboveLineNr, belowLineNr) {
342
+ addArticleToTransaction(transactionUuid, articleNo, amount = 1, warehouseNo = 1, commissionCode = "2", isReturn = false, aboveLineNr = 0, belowLineNr = 0) {
343
+ return __awaiter(this, void 0, void 0, function* () {
344
+ return new Promise((resolve, reject) => {
345
+ this._connector.addTransactionLine(transactionUuid, TransactionLineType.ArticleLine, articleNo, amount, warehouseNo, commissionCode, isReturn, aboveLineNr, belowLineNr)
346
+ .then((response) => __awaiter(this, void 0, void 0, function* () {
347
+ resolve(response);
348
+ }), (error) => {
349
+ this._prompt.showError(error);
350
+ reject(error);
351
+ })
352
+ .catch((reason) => {
353
+ this._prompt.showError(reason.getFullErrorString());
354
+ resolve(null);
355
+ });
356
+ });
357
+ });
358
+ }
359
+ addTransactionLine(lineType, articleNo, amount, warehouseNo, commissionCode, isReturn, aboveLineNr, belowLineNr, remember = true) {
315
360
  return __awaiter(this, void 0, void 0, function* () {
316
361
  return new Promise((resolve, reject) => {
317
362
  this._connector.addTransactionLine(this.currentTransaction.uuid, lineType, articleNo, amount, warehouseNo, commissionCode, isReturn, aboveLineNr, belowLineNr)
318
363
  .then((response) => __awaiter(this, void 0, void 0, function* () {
319
- this._rememberCurrentTransaction(response);
320
- this._rememberCurrentTransactionLineStatus(response);
364
+ this._rememberResponse(remember, response);
321
365
  resolve(response);
322
366
  }), (error) => {
323
367
  reject(error);
@@ -328,13 +372,12 @@ export class TransactionService {
328
372
  });
329
373
  });
330
374
  }
331
- addTextLineToTransaction(showOnDocuments, text, amount, articleBound, refArticleLineNr, aboveLineNr, belowLineNr) {
375
+ addTextLineToTransaction(showOnDocuments, text, amount, articleBound, refArticleLineNr, aboveLineNr, belowLineNr, remember = true) {
332
376
  return __awaiter(this, void 0, void 0, function* () {
333
377
  return new Promise((resolve, reject) => {
334
378
  this._connector.addTextLineToTransaction(this.currentTransaction.uuid, showOnDocuments, text, amount, articleBound, refArticleLineNr, aboveLineNr, belowLineNr)
335
379
  .then((response) => __awaiter(this, void 0, void 0, function* () {
336
- this._rememberCurrentTransaction(response);
337
- this._rememberCurrentTransactionLineStatus(response);
380
+ this._rememberResponse(remember, response);
338
381
  resolve(response);
339
382
  }), (error) => {
340
383
  reject(error);
@@ -345,12 +388,11 @@ export class TransactionService {
345
388
  });
346
389
  });
347
390
  }
348
- changeLineSequence(lineUuid, aboveLineNr, belowLineNr) {
391
+ changeLineSequence(lineUuid, aboveLineNr, belowLineNr, remember = true) {
349
392
  return new Promise((resolve, reject) => {
350
393
  this._connector.changeLineSequence(this.currentTransaction.uuid, lineUuid, aboveLineNr, belowLineNr)
351
394
  .then((response) => __awaiter(this, void 0, void 0, function* () {
352
- this._rememberCurrentTransaction(response);
353
- this._rememberCurrentTransactionLineStatus(response);
395
+ this._rememberResponse(remember, response);
354
396
  resolve(response);
355
397
  }), (error) => {
356
398
  reject(error);
@@ -360,12 +402,14 @@ export class TransactionService {
360
402
  });
361
403
  });
362
404
  }
363
- cancelAddTransactionLine(lineUuid) {
405
+ cancelAddTransactionLine(lineUuid, remember = true) {
364
406
  return __awaiter(this, void 0, void 0, function* () {
365
407
  return new Promise((resolve, reject) => {
366
408
  this._connector.cancelAddTransactionLine(lineUuid)
367
409
  .then((response) => __awaiter(this, void 0, void 0, function* () {
368
- this._rememberCurrentTransaction(response);
410
+ if (remember) {
411
+ this._rememberCurrentTransaction(response);
412
+ }
369
413
  if (response.isSuccess) {
370
414
  resolve(response);
371
415
  }
@@ -379,13 +423,12 @@ export class TransactionService {
379
423
  });
380
424
  });
381
425
  }
382
- deleteTransactionLine(transactionUuid, TransactionLineUuid) {
426
+ deleteTransactionLine(transactionUuid, TransactionLineUuid, remember = true) {
383
427
  return __awaiter(this, void 0, void 0, function* () {
384
428
  return new Promise((resolve, reject) => {
385
429
  this._connector.deleteTransactionLine(transactionUuid, TransactionLineUuid)
386
430
  .then((response) => __awaiter(this, void 0, void 0, function* () {
387
- this._rememberCurrentTransaction(response);
388
- this._rememberCurrentTransactionLineStatus(response);
431
+ this._rememberResponse(remember, response);
389
432
  if (response.isSuccess) {
390
433
  resolve(response);
391
434
  }
@@ -399,14 +442,13 @@ export class TransactionService {
399
442
  });
400
443
  });
401
444
  }
402
- changeTransactionLineQuantity(lineUuid, newQuantity) {
445
+ changeTransactionLineQuantity(lineUuid, newQuantity, remember = true) {
403
446
  return __awaiter(this, void 0, void 0, function* () {
404
447
  return new Promise((resolve) => {
405
448
  this._connector.changeTransactionLineQuantity(this.currentTransaction.uuid, lineUuid, newQuantity)
406
449
  .then((response) => __awaiter(this, void 0, void 0, function* () {
407
450
  if (response.isSuccess) {
408
- this._rememberCurrentTransaction(response);
409
- this._rememberCurrentTransactionLineStatus(response);
451
+ this._rememberResponse(remember, response);
410
452
  }
411
453
  resolve(response);
412
454
  })).catch((reason) => {
@@ -487,11 +529,18 @@ export class TransactionService {
487
529
  transactionDeliveryOptionsRequest.invoiceAddress = this._currentTransaction.invoiceAddress.nawNr;
488
530
  return transactionDeliveryOptionsRequest;
489
531
  }
532
+ _rememberResponse(remember, response) {
533
+ if (remember) {
534
+ this._rememberCurrentTransaction(response);
535
+ this._rememberCurrentTransactionLineStatus(response);
536
+ }
537
+ }
490
538
  }
491
539
  TransactionService.decorators = [
492
540
  { type: Injectable }
493
541
  ];
494
542
  TransactionService.ctorParameters = () => [
495
- { type: IOneConnectorAdapterService }
543
+ { type: IOneConnectorAdapterService },
544
+ { type: PromptService }
496
545
  ];
497
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hcHAvc2VydmljZS90cmFuc2FjdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsWUFBWSxFQUFrQixVQUFVLEVBQVcsTUFBTSxlQUFlLENBQUM7QUFDakYsT0FBTyxFQUFDLDJCQUEyQixFQUFDLE1BQU0sa0NBQWtDLENBQUM7QUFHN0UsT0FBTyxFQUNMLHlCQUF5QixFQUN6QixvQkFBb0IsRUFDckIsTUFBTSwwREFBMEQsQ0FBQztBQUVsRSxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sMkRBQTJELENBQUM7QUFHMUYsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLHdEQUF3RCxDQUFDO0FBSXBGLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxnRUFBZ0UsQ0FBQztBQUN0RixPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sa0RBQWtELENBQUM7QUFDNUUsT0FBTyxFQUFDLG9DQUFvQyxFQUFDLE1BQU0sa0ZBQWtGLENBQUM7QUFJdEksT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sMkRBQTJELENBQUM7QUFFM0YsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sZ0VBQWdFLENBQUM7QUFLbkcsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sK0RBQStELENBQUM7QUFHbEcsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLDBEQUEwRCxDQUFDO0FBRXpGLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLDhEQUE4RCxDQUFDO0FBRy9GLE1BQU0sT0FBTyxrQkFBa0I7SUEyRDdCLFlBQ1MsVUFBdUM7UUFBdkMsZUFBVSxHQUFWLFVBQVUsQ0FBNkI7UUEzRHpDLHVCQUFrQixHQUF1QixJQUFJLFlBQVksRUFBUSxDQUFDO1FBQ2xFLHNCQUFpQixHQUEwQyxJQUFJLFlBQVksRUFBMkIsQ0FBQztRQUd2Ryxv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WUFBWSxDQUFDO1FBQ3ZGLGlDQUFpQyxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxxQkFBcUIsQ0FBQztRQUN6RyxpQ0FBaUMsQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsc0JBQXNCLENBQUM7UUFDM0csaUNBQWlDLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGlCQUFpQixDQUFDO1FBQ2pHLGlDQUFpQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDO1FBQzNFLGlDQUFpQyxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDO1FBQ2xGLGlDQUFpQyxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUM7UUFDekcsaUNBQWlDLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDO1FBQ2pHLE9BQU8saUNBQWlDLENBQUM7SUFDM0MsQ0FBQzs7O1lBL2RGLFVBQVU7OztZQW5DSCwyQkFBMkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0V2ZW50RW1pdHRlciwgSW5qZWN0LCBpbmplY3QsIEluamVjdGFibGUsIE9wdGlvbmFsfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHtJT25lQ29ubmVjdG9yQWRhcHRlclNlcnZpY2V9IGZyb20gXCIuL2lvbmUtY29ubmVjdG9yLWFkYXB0ZXIuc2VydmljZVwiO1xuaW1wb3J0IHtDdXN0b21lckZ1bGxPYmplY3R9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvY3VzdG9tZXItZnVsbC1vYmplY3QuYm9cIjtcbmltcG9ydCB7UmVsYXRpb25BbnlUeXBlfSBmcm9tIFwiQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3JlbGF0aW9uLWFueS10eXBlXCI7XG5pbXBvcnQge1xuICBOVUxMX0NVU1RPTUVSX0ZVTExfT0JKRUNULFxuICBOVUxMX1JFTEFUSU9OX09CSkVDVFxufSBmcm9tIFwiQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL251bC1yZWxhdGlvbi1vYmplY3RcIjtcbmltcG9ydCB7VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2V9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvdHJhbnNhY3Rpb24taW5mby1yZXNwb25zZS5ib1wiO1xuaW1wb3J0IHtUcmFuc2FjdGlvbktpbmR9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvZW51bS90cmFuc2FjdGlvbi1raW5kLmVudW1cIjtcbmltcG9ydCB7TWFya2V0aW5nfSBmcm9tIFwiQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL21hcmtldGluZy5ib1wiO1xuaW1wb3J0IHtSZWxhdGlvblByaXZhY3lTZXR0aW5nfSBmcm9tIFwiQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3JlbGF0aW9uLXByaXZhY3ktc2V0dGluZy5ib1wiO1xuaW1wb3J0IHtTZXF1ZW5jZU5hbWV9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvZW51bS9zZXF1ZW5jZS1uYW1lLmVudW1cIjtcbmltcG9ydCB7RGVsaXZlcnlNZXRob2R9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvZGVsaXZlcnktbWV0aG9kLmJvXCI7XG5pbXBvcnQge0RlbGl2ZXJ5T3B0aW9ufSBmcm9tIFwiQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2RlbGl2ZXJ5LW9wdGlvbi5ib1wiO1xuaW1wb3J0IHtDb250YWN0T3B0aW9ufSBmcm9tIFwiQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2NvbnRhY3Qtb3B0aW9uLmJvXCI7XG5pbXBvcnQge2lzTmlsbH0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC91dGlscy9mdW5jdGlvbi9pcy1uaWxsLmZ1bmN0aW9uXCI7XG5pbXBvcnQge0FycmF5VXRpbHN9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvdXRpbHMvYXJyYXktdXRpbHNcIjtcbmltcG9ydCB7U2V0VHJhbnNhY3Rpb25EZWxpdmVyeU9wdGlvbnNSZXF1ZXN0fSBmcm9tIFwiQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3NldC10cmFuc2FjdGlvbi1kZWxpdmVyeS1vcHRpb25zLXJlcXVlc3QuYm9cIjtcbmltcG9ydCB7UmVsYXRpb25MaXN0T2JqZWN0fSBmcm9tIFwiQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3JlbGF0aW9uLWxpc3Qtb2JqZWN0LmJvXCI7XG5pbXBvcnQge1JlbGF0aW9uUmVxdWVzdH0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9yZWxhdGlvbi1yZXF1ZXN0XCI7XG5pbXBvcnQge0NvdW50cnl9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvY291bnRyeS5ib1wiO1xuaW1wb3J0IHtUcmFuc2FjdGlvblRvdGFsfSBmcm9tIFwiQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3RyYW5zYWN0aW9uLXRvdGFsLmJvXCI7XG5pbXBvcnQge1ZhbGlkYXRpb25SZXN1bHR9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvdmFsaWRhdGlvbi1yZXN1bHRcIjtcbmltcG9ydCB7VHJhbnNhY3Rpb25MaW5lVHlwZX0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9lbnVtL3RyYW5zYWN0aW9uLWxpbmUtdHlwZS5lbnVtXCI7XG5pbXBvcnQge1Jlc29sdmVQZW5kaW5nTGluZVJlYXNvblJlcXVlc3R9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvcmVzb2x2ZS1wZW5kaW5nLXJlYXNvbi1yZXF1ZXN0LmJvXCI7XG5pbXBvcnQge0NvRG9tYWluVmFsdWV9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvY28tZG9tYWluLXZhbHVlLmJvXCI7XG5pbXBvcnQge1RyYW5zYWN0aW9uQXJ0aWNsZVdhcmVob3VzZX0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC90cmFuc2FjdGlvbi1hcnRpY2xlLXdhcmVob3VzZS5ib1wiO1xuaW1wb3J0IHtBcnRpY2xlRnVsbE9iamVjdH0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9hcnRpY2xlLWZ1bGwtb2JqZWN0XCI7XG5pbXBvcnQge0xpbmVPcGVyYXRpb25TdGF0dXN9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvbGluZS1vcGVyYXRpb24tc3RhdHVzLmJvXCI7XG5pbXBvcnQge0xpbmVPcGVyYXRpb25SZXNwb25zZX0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9saW5lLW9wZXJhdGlvbi1yZXNwb25zZS5ib1wiO1xuaW1wb3J0IHtUcmFuc2FjdGlvbkxpbmVJbmZvfSBmcm9tIFwiQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3RyYW5zYWN0aW9uLWxpbmUtaW5mby5ib1wiO1xuaW1wb3J0IHtUcmFuc2FjdGlvbkluZm99IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvdHJhbnNhY3Rpb24taW5mby5ib1wiO1xuaW1wb3J0IHtUcmFuc2FjdGlvblJlc3BvbnNlQmFzZX0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC90cmFuc2FjdGlvbi1yZXNwb25zZS1iYXNlLmJvXCI7XG5pbXBvcnQge1BlbmRpbmdSZWFzb25UeXBlfSBmcm9tIFwiQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL2VudW0vcGVuZGluZy1yZWFzb24tdHlwZS5lbnVtXCI7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBUcmFuc2FjdGlvblNlcnZpY2Uge1xuICBwdWJsaWMgdHJhbnNhY3Rpb25VcGRhdGVkOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIHB1YmxpYyB0cmFuc2FjdGlvbkxvYWRlZDogRXZlbnRFbWl0dGVyPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPiA9IG5ldyBFdmVudEVtaXR0ZXI8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+KCk7XG5cbiAgcHVibGljIGVtYWlsQWRkcmVzczogc3RyaW5nO1xuICBwdWJsaWMgYXBwbGljYXRpb25Vc2VyOiBib29sZWFuID0gZmFsc2U7XG5cbiAgcHVibGljIGdldCBjdXJyZW50TGluZXMoKTogVHJhbnNhY3Rpb25MaW5lSW5mb1tdIHtcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudExpbmVzO1xuICB9XG5cbiAgcHVibGljIHNldCBjdXJyZW50TGluZXModmFsdWU6IFRyYW5zYWN0aW9uTGluZUluZm9bXSkge1xuICAgIHRoaXMuX2N1cnJlbnRMaW5lcyA9IHZhbHVlO1xuICAgIHRoaXMuYXJ0aWNsZUFtb3VudCA9IEFycmF5VXRpbHMuRmluZEFsbCh0aGlzLl9jdXJyZW50TGluZXMsIGxpbmUgPT4gbGluZS5pc0FydGljbGUpLmxlbmd0aDtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgY3VycmVudFRvdGFscyh2YWx1ZTogVHJhbnNhY3Rpb25Ub3RhbCkge1xuICAgIHRoaXMuX2N1cnJlbnRUb3RhbHMgPSB2YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY3VycmVudFRvdGFscygpOiBUcmFuc2FjdGlvblRvdGFsIHtcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudFRvdGFscztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY3VycmVudFJlbGF0aW9uKCk6IFJlbGF0aW9uQW55VHlwZSB7XG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRSZWxhdGlvbjtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY3VycmVudFRyYW5zYWN0aW9uKCk6IFRyYW5zYWN0aW9uSW5mbyB7XG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRUcmFuc2FjdGlvbjtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgY3VycmVudExpbmVPcGVyYXRpb25TdGF0dXNlcyh2YWx1ZXM6IExpbmVPcGVyYXRpb25TdGF0dXNbXSkge1xuICAgIHRoaXMuX2N1cnJlbnRMaW5lT3BlcmF0aW9uU3RhdHVzZXMgPSB2YWx1ZXM7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGN1cnJlbnRMaW5lT3BlcmF0aW9uU3RhdHVzZXMoKTogTGluZU9wZXJhdGlvblN0YXR1c1tdIHtcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudExpbmVPcGVyYXRpb25TdGF0dXNlcztcbiAgfVxuXG4gIHB1YmxpYyBzZXQgY3VycmVudExpbmVPcGVyYXRpb25TdGF0dXModmFsdWU6IExpbmVPcGVyYXRpb25TdGF0dXMpIHtcbiAgICB0aGlzLl9jdXJyZW50TGluZU9wZXJhdGlvblN0YXR1cyA9IHZhbHVlO1xuICB9XG5cbiAgcHVibGljIGdldCBjdXJyZW50TGluZU9wZXJhdGlvblN0YXR1cygpOiBMaW5lT3BlcmF0aW9uU3RhdHVzIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBzdGF0dXM6IExpbmVPcGVyYXRpb25TdGF0dXMgPSB0aGlzLmN1cnJlbnRMaW5lT3BlcmF0aW9uU3RhdHVzZXMuZmluZChsaW5lID0+IGxpbmUucGVuZGluZ1JlYXNvblR5cGUgIT09IFBlbmRpbmdSZWFzb25UeXBlLk5PTkVcbiAgICAgICAgJiYgbGluZS5wZW5kaW5nUmVhc29uVHlwZSAhPT0gUGVuZGluZ1JlYXNvblR5cGUuTk9OX0NSSVRJQ0FMX0RJU0NPTlRJTlVBVElPTik7XG4gICAgcmV0dXJuIHN0YXR1cztcbiAgfVxuXG4gIHB1YmxpYyBhcnRpY2xlQW1vdW50OiBudW1iZXIgPSAwO1xuXG4gIHByaXZhdGUgX2N1cnJlbnRMaW5lczogVHJhbnNhY3Rpb25MaW5lSW5mb1tdID0gW107XG4gIHByaXZhdGUgX2N1cnJlbnRUb3RhbHM6IFRyYW5zYWN0aW9uVG90YWwgPSBuZXcgVHJhbnNhY3Rpb25Ub3RhbCgpO1xuICBwcml2YXRlIF9jdXJyZW50UmVsYXRpb246IFJlbGF0aW9uQW55VHlwZSA9IE5VTExfUkVMQVRJT05fT0JKRUNUO1xuICBwcml2YXRlIF9jdXJyZW50VHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uSW5mbyA9IG5ldyBUcmFuc2FjdGlvbkluZm8oKTtcbiAgcHJpdmF0ZSBfY3VycmVudExpbmVPcGVyYXRpb25TdGF0dXM6IExpbmVPcGVyYXRpb25TdGF0dXMgPSBuZXcgTGluZU9wZXJhdGlvblN0YXR1cygpO1xuICBwcml2YXRlIF9jdXJyZW50TGluZU9wZXJhdGlvblN0YXR1c2VzOiBMaW5lT3BlcmF0aW9uU3RhdHVzW10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgX2Nvbm5lY3RvcjogSU9uZUNvbm5lY3RvckFkYXB0ZXJTZXJ2aWNlLFxuICApIHtcbiAgICB0aGlzLl9pbml0aWFsaXplVHJhbnNhY3Rpb24oKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRBcnRpY2xlRnVsbE9iamVjdChnb29kSWQ6IG51bWJlcik6IFByb21pc2U8QXJ0aWNsZUZ1bGxPYmplY3Q+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5fY29ubmVjdG9yLmdldEFydGljbGVGdWxsT2JqZWN0KGdvb2RJZCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0R29vZElkRnJvbUFydGljbGVOcihza3U6IHN0cmluZyk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuX2Nvbm5lY3Rvci5nZXRHb29kSWRGcm9tQXJ0aWNsZU5yKHNrdSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0UmVsYXRpb24oKTogUHJvbWlzZTxSZWxhdGlvbkFueVR5cGU+IHtcbiAgICBjb25zdCByZWxhdGlvbk5vOiBzdHJpbmcgPSBhd2FpdCB0aGlzLl9jb25uZWN0b3IuZ2V0UmVsYXRpb25OdW1iZXIodGhpcy5fY3VycmVudFRyYW5zYWN0aW9uLnJlbGF0aW9uLnJlbGF0aW9uSWQpO1xuXG4gICAgaWYgKHJlbGF0aW9uTm8pIHtcbiAgICAgIHRoaXMuX2N1cnJlbnRSZWxhdGlvbiA9IGF3YWl0IHRoaXMuX2Nvbm5lY3Rvci5nZXRDdXN0b21lckZ1bGxPYmplY3QoTnVtYmVyKHJlbGF0aW9uTm8pKTtcbiAgICAgIGF3YWl0IHRoaXMubG9hZENvdW50cmllc09mUmVsYXRpb25BZGRyZXNzZXMoKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRSZWxhdGlvbjtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBsb2FkQ291bnRyaWVzT2ZSZWxhdGlvbkFkZHJlc3NlcygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBmb3IgKGNvbnN0IGFkZHJlc3Mgb2YgdGhpcy5jdXJyZW50UmVsYXRpb24uYWRkcmVzc2VzKSB7XG4gICAgICBjb25zdCBjb3VudHJ5OiBDb3VudHJ5ID0gYXdhaXQgdGhpcy5nZXRDb3VudHJ5KGFkZHJlc3MuY291bnRyeUlkKTtcbiAgICAgIGFkZHJlc3MuY291bnRyeU5hbWUgPSBjb3VudHJ5LmRlc2NyaXB0aW9uO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRDb3VudHJ5KGNvdW50cnlDb2RlOiBzdHJpbmcpOiBQcm9taXNlPENvdW50cnk+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5fY29ubmVjdG9yLmdldENvdW50cnkoY291bnRyeUNvZGUpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldFJlbGF0aW9uTnVtYmVyKHJlbGF0aW9uSWQ6IG51bWJlcik6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuX2Nvbm5lY3Rvci5nZXRSZWxhdGlvbk51bWJlcihyZWxhdGlvbklkKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBzYXZlTmV3UmVsYXRpb24oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5jbGVhblJlbGF0aW9uQmVmb3JlU2F2ZSgpO1xuICAgIHRoaXMuX2N1cnJlbnRSZWxhdGlvbiA9IGF3YWl0IHRoaXMuX2Nvbm5lY3Rvci5pbnNlcnRDdXN0b21lcih0aGlzLl9jdXJyZW50UmVsYXRpb24pO1xuICAgIGF3YWl0IHRoaXMuYWRkUmVsYXRpb25Ub1RyYW5zYWN0aW9uKHRoaXMuX2N1cnJlbnRSZWxhdGlvbi5yZWxhdGlvbklkKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBzYXZlUmVsYXRpb24oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5jbGVhblJlbGF0aW9uQmVmb3JlU2F2ZSgpO1xuICAgIHRoaXMuX2N1cnJlbnRSZWxhdGlvbiA9IGF3YWl0IHRoaXMuX2Nvbm5lY3Rvci51cGRhdGVDdXN0b21lcih0aGlzLl9jdXJyZW50UmVsYXRpb24pO1xuICB9XG5cbiAgcHVibGljIGNsZWFuUmVsYXRpb25CZWZvcmVTYXZlKCk6IHZvaWQge1xuICAgIEFycmF5VXRpbHMuUmVtb3ZlRWxlbWVudHNCeUZpbHRlcih0aGlzLl9jdXJyZW50UmVsYXRpb24uY29udGFjdE9wdGlvbnMsICgoaXRlbTogQ29udGFjdE9wdGlvbikgPT4ge1xuICAgICAgcmV0dXJuIGlzTmlsbChpdGVtLnZhbHVlKTtcbiAgICB9KSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0U2VxdWVuY2VWYWx1ZSgpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLl9jb25uZWN0b3IuZ2V0U2VxdWVuY2VWYWx1ZShTZXF1ZW5jZU5hbWUuUmVsYXRpb25JZCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0UmVsYXRpb25Qcml2YWN5U2V0dGluZ3MoKTogUHJvbWlzZTxSZWxhdGlvblByaXZhY3lTZXR0aW5nW10+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5fY29ubmVjdG9yLmdldFJlbGF0aW9uUHJpdmFjeVNldHRpbmdzKCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgY3JlYXRlVHJhbnNhY3Rpb24oKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPGJvb2xlYW4+KChyZXNvbHZlOiBGdW5jdGlvbiwgcmVqZWN0OiBGdW5jdGlvbikgPT4ge1xuICAgICAgdGhpcy5fY29ubmVjdG9yLmNyZWF0ZVRyYW5zYWN0aW9uKFRyYW5zYWN0aW9uS2luZC5TYWxlc09yZGVyLCBcIjFcIikudGhlbigocmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlKSA9PiB7XG4gICAgICAgIHRoaXMuX3JlbWVtYmVyQ3VycmVudFRyYW5zYWN0aW9uKHJlc3BvbnNlKTtcbiAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgIH0sIChlcnJvcikgPT4ge1xuICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICB9KS5jYXRjaCgocmVhc29uOiBWYWxpZGF0aW9uUmVzdWx0KSA9PiB7XG4gICAgICAgIHJlamVjdChmYWxzZSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyByZXNvbHZlUGVuZGluZ0xpbmVSZWFzb24ocGVuZGluZ0xpbmVWYWx1ZXM6IFJlc29sdmVQZW5kaW5nTGluZVJlYXNvblJlcXVlc3QpOiBQcm9taXNlPExpbmVPcGVyYXRpb25SZXNwb25zZT4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxMaW5lT3BlcmF0aW9uUmVzcG9uc2U+KChyZXNvbHZlOiBGdW5jdGlvbikgPT4ge1xuICAgICAgdGhpcy5fY29ubmVjdG9yLnJlc29sdmVQZW5kaW5nTGluZVJlYXNvbihwZW5kaW5nTGluZVZhbHVlcykudGhlbihhc3luYyAocmVzcG9uc2U6IExpbmVPcGVyYXRpb25SZXNwb25zZSkgPT4ge1xuICAgICAgICB0aGlzLl9yZW1lbWJlckN1cnJlbnRUcmFuc2FjdGlvbihyZXNwb25zZSk7XG4gICAgICAgIHRoaXMuX3JlbWVtYmVyQ3VycmVudFRyYW5zYWN0aW9uTGluZVN0YXR1cyhyZXNwb25zZSk7XG4gICAgICAgIHJlc29sdmUocmVzcG9uc2UpO1xuICAgICAgfSkuY2F0Y2goKHJlYXNvbjogVmFsaWRhdGlvblJlc3VsdCkgPT4ge1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRUcmFuc2FjdGlvbih0cmFuc2FjdGlvbk5vOiBudW1iZXIpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5vcGVuRXhpc3RpbmdUcmFuc2FjdGlvbihUcmFuc2FjdGlvbktpbmQuU2FsZXNPcmRlciwgdHJhbnNhY3Rpb25Obyk7XG4gIH1cblxuICBwdWJsaWMgb3BlbkV4aXN0aW5nVHJhbnNhY3Rpb24oa2luZDogVHJhbnNhY3Rpb25LaW5kLCB0cmFuc2FjdGlvbk5yOiBudW1iZXIpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8Ym9vbGVhbj4oKHJlc29sdmU6IEZ1bmN0aW9uLCByZWplY3Q6IEZ1bmN0aW9uKSA9PiB7XG4gICAgICB0aGlzLl9jb25uZWN0b3IuZ2V0VHJhbnNhY3Rpb25CeU5yQW5kS2luZChraW5kLCB0cmFuc2FjdGlvbk5yKVxuICAgICAgICAudGhlbihhc3luYyAocmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgaWYgKHJlc3BvbnNlLmlzU3VjY2Vzcykge1xuICAgICAgICAgICAgdGhpcy50cmFuc2FjdGlvbkxvYWRlZC5lbWl0KHJlc3BvbnNlKTtcbiAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlamVjdChmYWxzZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKHJlYXNvbjogVmFsaWRhdGlvblJlc3VsdCkgPT4ge1xuICAgICAgICAgIHJlamVjdChmYWxzZSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cblxuICBwdWJsaWMgZ2V0VHJhbnNhY3Rpb25CeUlkKHRyYW5zYWN0aW9uSWQ6IG51bWJlcik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxib29sZWFuPigocmVzb2x2ZTogRnVuY3Rpb24sIHJlamVjdDogRnVuY3Rpb24pID0+IHtcbiAgICAgIHRoaXMuX2Nvbm5lY3Rvci5nZXRUcmFuc2FjdGlvbkJ5SWQodHJhbnNhY3Rpb25JZClcbiAgICAgICAgLnRoZW4oYXN5bmMgKHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSkgPT4ge1xuICAgICAgICAgIGlmIChyZXNwb25zZS5pc1N1Y2Nlc3MpIHtcbiAgICAgICAgICAgIHRoaXMudHJhbnNhY3Rpb25Mb2FkZWQuZW1pdChyZXNwb25zZSk7XG4gICAgICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZWplY3QoZmFsc2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKChyZWFzb246IFZhbGlkYXRpb25SZXN1bHQpID0+IHtcbiAgICAgICAgICByZWplY3QoZmFsc2UpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBzYXZlVHJhbnNhY3Rpb24oY2xvc2U6IGJvb2xlYW4gPSBmYWxzZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSA9IGF3YWl0IHRoaXMuX2Nvbm5lY3Rvci5zYXZlVHJhbnNhY3Rpb24odGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udXVpZCk7XG4gICAgaWYgKHJlc3BvbnNlLmlzU3VjY2Vzcykge1xuICAgICAgdGhpcy5fcmVtZW1iZXJDdXJyZW50VHJhbnNhY3Rpb24ocmVzcG9uc2UpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBhZGRSZWxhdGlvblRvVHJhbnNhY3Rpb24ocmVsYXRpb25JZDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgc3VjY2VzczogYm9vbGVhbiA9ICBhd2FpdCB0aGlzLl9jb25uZWN0b3IuYWRkUmVsYXRpb25Ub1RyYW5zYWN0aW9uKHRoaXMuX2N1cnJlbnRUcmFuc2FjdGlvbi51dWlkLCByZWxhdGlvbklkKTtcbiAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgYXdhaXQgdGhpcy5zYXZlVHJhbnNhY3Rpb24oKTtcbiAgICAgIGF3YWl0IHRoaXMuZ2V0VHJhbnNhY3Rpb24odGhpcy5fY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uTnIpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRDb21taXNzaW9uQ29kZXMobGFuZ3VhZ2VDb2RlOiBzdHJpbmcpOiBQcm9taXNlPENvRG9tYWluVmFsdWVbXT4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLl9jb25uZWN0b3IuZ2V0Q29tbWlzc2lvbkNvZGVzKGxhbmd1YWdlQ29kZSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0SW5PdXRDb2xsZWN0aW9uKGxhbmd1YWdlQ29kZTogc3RyaW5nKTogUHJvbWlzZTxDb0RvbWFpblZhbHVlW10+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5fY29ubmVjdG9yLmdldEluT3V0Q29sbGVjdGlvbihsYW5ndWFnZUNvZGUpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldFRyYW5zYWN0aW9uQXJ0aWNsZVdhcmVob3VzZXMoZ29vZElkOiBudW1iZXIpOiBQcm9taXNlPFRyYW5zYWN0aW9uQXJ0aWNsZVdhcmVob3VzZVtdPiB7XG4gICAgcmV0dXJuIHRoaXMuX2Nvbm5lY3Rvci5nZXRUcmFuc2FjdGlvbkFydGljbGVXYXJlaG91c2VzKGdvb2RJZCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0TWFya2V0aW5nQ29kZXMoKTogUHJvbWlzZTxNYXJrZXRpbmdbXT4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLl9jb25uZWN0b3IuZ2V0TWFya2V0aW5nQ29kZXMoKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBpbnNlcnRDdXN0b21lcihyZWxhdGlvbjogQ3VzdG9tZXJGdWxsT2JqZWN0KTogUHJvbWlzZTxDdXN0b21lckZ1bGxPYmplY3Q+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5fY29ubmVjdG9yLmluc2VydEN1c3RvbWVyKHJlbGF0aW9uKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB1cGRhdGVDdXN0b21lcihyZWxhdGlvbjogQ3VzdG9tZXJGdWxsT2JqZWN0KTogUHJvbWlzZTxDdXN0b21lckZ1bGxPYmplY3Q+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8Q3VzdG9tZXJGdWxsT2JqZWN0PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLl9jb25uZWN0b3IudXBkYXRlQ3VzdG9tZXIocmVsYXRpb24pLnRoZW4oYXN5bmMoIHJlc3BvbnNlOiBDdXN0b21lckZ1bGxPYmplY3QpID0+IHtcbiAgICAgICAgdGhpcy5fY3VycmVudFJlbGF0aW9uID0gcmVsYXRpb247XG4gICAgICAgIHJlc29sdmUocmVzcG9uc2UpO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgocmVzcG9uc2U6IEN1c3RvbWVyRnVsbE9iamVjdCkgPT4ge1xuICAgICAgICByZXNvbHZlKHJlc3BvbnNlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldERlbGl2ZXJ5TWV0aG9kcygpOiBQcm9taXNlPERlbGl2ZXJ5TWV0aG9kW10+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5fY29ubmVjdG9yLmdldERlbGl2ZXJ5TWV0aG9kcygpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldERlbGl2ZXJ5T3B0aW9ucygpOiBQcm9taXNlPERlbGl2ZXJ5T3B0aW9uW10+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5fY29ubmVjdG9yLmdldERlbGl2ZXJ5T3B0aW9ucygpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHNldFRyYW5zYWN0aW9uRGVsaXZlcnlPcHRpb25zKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHRyYW5zYWN0aW9uRGVsaXZlcnlPcHRpb25zUmVxdWVzdDogU2V0VHJhbnNhY3Rpb25EZWxpdmVyeU9wdGlvbnNSZXF1ZXN0ID0gdGhpcy5fZ2V0VHJhbnNhY3Rpb25EZWxpdmVyeU9wdGlvbnMoKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8Ym9vbGVhbj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5fY29ubmVjdG9yLnNldFRyYW5zYWN0aW9uRGVsaXZlcnlPcHRpb25zKHRyYW5zYWN0aW9uRGVsaXZlcnlPcHRpb25zUmVxdWVzdCkudGhlbihhc3luYyggcmVzcG9uc2U6IFRyYW5zYWN0aW9uUmVzcG9uc2VCYXNlKSA9PiB7XG4gICAgICAgIHJlc29sdmUocmVzcG9uc2UuaXNTdWNjZXNzKTtcbiAgICAgIH0sIChlcnJvcikgPT4ge1xuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgocmVzcG9uc2U6IFRyYW5zYWN0aW9uUmVzcG9uc2VCYXNlKSA9PiB7XG4gICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0UmVsYXRpb25MaXN0T2JqZWN0cyhyZWxhdGlvblJlcXVlc3Q6IFJlbGF0aW9uUmVxdWVzdCk6IFByb21pc2U8UmVsYXRpb25MaXN0T2JqZWN0W10+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5fY29ubmVjdG9yLmdldFJlbGF0aW9uTGlzdE9iamVjdHMocmVsYXRpb25SZXF1ZXN0KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyByZXRyaWV2ZUxpbmVJbWFnZShsaW5lOiBUcmFuc2FjdGlvbkxpbmVJbmZvKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5nZXRBcnRpY2xlSW1hZ2VCeUFydGljbGVOdW1iZXIobGluZS5hcnRpY2xlTnVtYmVyKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRBcnRpY2xlSW1hZ2VCeUFydGljbGVOdW1iZXIoYXJ0aWNsZU51bWJlcjogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCBnb29kSWQ6IG51bWJlciA9IGF3YWl0IHRoaXMuX2Nvbm5lY3Rvci5nZXRHb29kSWRGcm9tQXJ0aWNsZU5yKGFydGljbGVOdW1iZXIpO1xuICAgIHJldHVybiB0aGlzLmdldEFydGljbGVJbWFnZUJ5R29vZElkKGdvb2RJZCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0QXJ0aWNsZUltYWdlQnlHb29kSWQoZ29vZElkOiBudW1iZXIpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGlmICghaXNOYU4oZ29vZElkKSkge1xuICAgICAgcmV0dXJuIHRoaXMuX2Nvbm5lY3Rvci5nZXRTaW5nbGVJbWFnZShnb29kSWQsIDEsIHRydWUsIHRydWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgYWRkQXJ0aWNsZShhcnRpY2xlTm86IHN0cmluZywgYW1vdW50OiBudW1iZXIgPSAxLCB3YXJlaG91c2VObzogbnVtYmVyID0gMSwgY29tbWlzc2lvbkNvZGU6IHN0cmluZyA9IFwiMlwiLCBpc1JldHVybjogYm9vbGVhbiA9IGZhbHNlLCBhYm92ZUxpbmVOcjogbnVtYmVyID0gMCwgYmVsb3dMaW5lTnI6IG51bWJlciA9IDApOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8Ym9vbGVhbj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5fY29ubmVjdG9yLmFkZFRyYW5zYWN0aW9uTGluZSh0aGlzLl9jdXJyZW50VHJhbnNhY3Rpb24udXVpZCwgVHJhbnNhY3Rpb25MaW5lVHlwZS5BcnRpY2xlTGluZSwgYXJ0aWNsZU5vLCBhbW91bnQsIHdhcmVob3VzZU5vLCBjb21taXNzaW9uQ29kZSwgaXNSZXR1cm4sIGFib3ZlTGluZU5yLCBiZWxvd0xpbmVOcilcbiAgICAgICAgLnRoZW4oYXN5bmMoIHJlc3BvbnNlOiBMaW5lT3BlcmF0aW9uUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgICB9LCAoZXJyb3IpID0+IHtcbiAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgocmVhc29uOiBWYWxpZGF0aW9uUmVzdWx0KSA9PiB7XG4gICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgYWRkVHJhbnNhY3Rpb25MaW5lKGxpbmVUeXBlOiBUcmFuc2FjdGlvbkxpbmVUeXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFydGljbGVObzogc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFtb3VudDogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcmVob3VzZU5vPzogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1pc3Npb25Db2RlPzogc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzUmV0dXJuPzogYm9vbGVhbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYm92ZUxpbmVOcj86IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWxvd0xpbmVOcj86IG51bWJlcik6IFByb21pc2U8TGluZU9wZXJhdGlvblJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPExpbmVPcGVyYXRpb25SZXNwb25zZT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5fY29ubmVjdG9yLmFkZFRyYW5zYWN0aW9uTGluZSh0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi51dWlkLCBsaW5lVHlwZSwgYXJ0aWNsZU5vLCBhbW91bnQsIHdhcmVob3VzZU5vLCBjb21taXNzaW9uQ29kZSwgaXNSZXR1cm4sIGFib3ZlTGluZU5yLCBiZWxvd0xpbmVOcilcbiAgICAgICAgLnRoZW4oYXN5bmMgKHJlc3BvbnNlOiBMaW5lT3BlcmF0aW9uUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICB0aGlzLl9yZW1lbWJlckN1cnJlbnRUcmFuc2FjdGlvbihyZXNwb25zZSk7XG4gICAgICAgICAgdGhpcy5fcmVtZW1iZXJDdXJyZW50VHJhbnNhY3Rpb25MaW5lU3RhdHVzKHJlc3BvbnNlKTtcbiAgICAgICAgICByZXNvbHZlKHJlc3BvbnNlKTtcbiAgICAgICAgfSwgKGVycm9yKSA9PiB7XG4gICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKHJlYXNvbjogVmFsaWRhdGlvblJlc3VsdCkgPT4ge1xuICAgICAgICAgIHJlc29sdmUobnVsbCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBhZGRUZXh0TGluZVRvVHJhbnNhY3Rpb24oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd09uRG9jdW1lbnRzOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFtb3VudDogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFydGljbGVCb3VuZDogYm9vbGVhbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZBcnRpY2xlTGluZU5yOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJvdmVMaW5lTnI/OiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVsb3dMaW5lTnI/OiBudW1iZXIpOiBQcm9taXNlPExpbmVPcGVyYXRpb25SZXNwb25zZT4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxMaW5lT3BlcmF0aW9uUmVzcG9uc2U+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMuX2Nvbm5lY3Rvci5hZGRUZXh0TGluZVRvVHJhbnNhY3Rpb24odGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udXVpZCwgc2hvd09uRG9jdW1lbnRzLCB0ZXh0LCBhbW91bnQsIGFydGljbGVCb3VuZCwgcmVmQXJ0aWNsZUxpbmVOciwgYWJvdmVMaW5lTnIsIGJlbG93TGluZU5yKVxuICAgICAgICAudGhlbihhc3luYyAocmVzcG9uc2U6IExpbmVPcGVyYXRpb25SZXNwb25zZSkgPT4ge1xuICAgICAgICAgIHRoaXMuX3JlbWVtYmVyQ3VycmVudFRyYW5zYWN0aW9uKHJlc3BvbnNlKTtcbiAgICAgICAgICB0aGlzLl9yZW1lbWJlckN1cnJlbnRUcmFuc2FjdGlvbkxpbmVTdGF0dXMocmVzcG9uc2UpO1xuICAgICAgICAgIHJlc29sdmUocmVzcG9uc2UpO1xuICAgICAgICB9LCAoZXJyb3IpID0+IHtcbiAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKHJlYXNvbjogVmFsaWRhdGlvblJlc3VsdCkgPT4ge1xuICAgICAgICAgIHJlc29sdmUobnVsbCk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGNoYW5nZUxpbmVTZXF1ZW5jZShcbiAgICBsaW5lVXVpZDogc3RyaW5nLFxuICAgIGFib3ZlTGluZU5yPzogbnVtYmVyLFxuICAgIGJlbG93TGluZU5yPzogbnVtYmVyKTogUHJvbWlzZTxMaW5lT3BlcmF0aW9uUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8TGluZU9wZXJhdGlvblJlc3BvbnNlPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLl9jb25uZWN0b3IuY2hhbmdlTGluZVNlcXVlbmNlKHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnV1aWQsIGxpbmVVdWlkLCBhYm92ZUxpbmVOciwgYmVsb3dMaW5lTnIpXG4gICAgICAgIC50aGVuKGFzeW5jIChyZXNwb25zZTogTGluZU9wZXJhdGlvblJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgdGhpcy5fcmVtZW1iZXJDdXJyZW50VHJhbnNhY3Rpb24ocmVzcG9uc2UpO1xuICAgICAgICAgIHRoaXMuX3JlbWVtYmVyQ3VycmVudFRyYW5zYWN0aW9uTGluZVN0YXR1cyhyZXNwb25zZSk7XG4gICAgICAgICAgcmVzb2x2ZShyZXNwb25zZSk7XG4gICAgICAgIH0sIChlcnJvcikgPT4ge1xuICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaCgocmVhc29uOiBWYWxpZGF0aW9uUmVzdWx0KSA9PiB7XG4gICAgICAgICAgcmVzb2x2ZShudWxsKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgY2FuY2VsQWRkVHJhbnNhY3Rpb25MaW5lKGxpbmVVdWlkOiBzdHJpbmcpOiBQcm9taXNlPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLl9jb25uZWN0b3IuY2FuY2VsQWRkVHJhbnNhY3Rpb25MaW5lKGxpbmVVdWlkKVxuICAgICAgICAudGhlbihhc3luYyAocmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgdGhpcy5fcmVtZW1iZXJDdXJyZW50VHJhbnNhY3Rpb24ocmVzcG9uc2UpO1xuICAgICAgICAgIGlmIChyZXNwb25zZS5pc1N1Y2Nlc3MpIHtcbiAgICAgICAgICAgIHJlc29sdmUocmVzcG9uc2UpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZWplY3QocmVzcG9uc2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKChyZWFzb246IFZhbGlkYXRpb25SZXN1bHQpID0+IHtcbiAgICAgICAgICByZXNvbHZlKG51bGwpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBkZWxldGVUcmFuc2FjdGlvbkxpbmUodHJhbnNhY3Rpb25VdWlkOiBzdHJpbmcsIFRyYW5zYWN0aW9uTGluZVV1aWQ6IHN0cmluZyk6IFByb21pc2U8TGluZU9wZXJhdGlvblJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPExpbmVPcGVyYXRpb25SZXNwb25zZT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5fY29ubmVjdG9yLmRlbGV0ZVRyYW5zYWN0aW9uTGluZSh0cmFuc2FjdGlvblV1aWQsIFRyYW5zYWN0aW9uTGluZVV1aWQpXG4gICAgICAgIC50aGVuKGFzeW5jIChyZXNwb25zZTogTGluZU9wZXJhdGlvblJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgdGhpcy5fcmVtZW1iZXJDdXJyZW50VHJhbnNhY3Rpb24ocmVzcG9uc2UpO1xuICAgICAgICAgIHRoaXMuX3JlbWVtYmVyQ3VycmVudFRyYW5zYWN0aW9uTGluZVN0YXR1cyhyZXNwb25zZSk7XG4gICAgICAgICAgaWYgKHJlc3BvbnNlLmlzU3VjY2Vzcykge1xuICAgICAgICAgICAgcmVzb2x2ZShyZXNwb25zZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlamVjdChyZXNwb25zZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKHJlYXNvbjogVmFsaWRhdGlvblJlc3VsdCkgPT4ge1xuICAgICAgICAgIHJlc29sdmUobnVsbCk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGNoYW5nZVRyYW5zYWN0aW9uTGluZVF1YW50aXR5KGxpbmVVdWlkOiBzdHJpbmcsIG5ld1F1YW50aXR5OiBudW1iZXIpOiBQcm9taXNlPExpbmVPcGVyYXRpb25SZXNwb25zZT4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxMaW5lT3BlcmF0aW9uUmVzcG9uc2U+KChyZXNvbHZlOiBGdW5jdGlvbikgPT4ge1xuICAgICAgdGhpcy5fY29ubmVjdG9yLmNoYW5nZVRyYW5zYWN0aW9uTGluZVF1YW50aXR5KHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnV1aWQsIGxpbmVVdWlkLCBuZXdRdWFudGl0eSlcbiAgICAgICAgLnRoZW4oYXN5bmMgKHJlc3BvbnNlOiBMaW5lT3BlcmF0aW9uUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICBpZiAocmVzcG9uc2UuaXNTdWNjZXNzKSB7XG4gICAgICAgICAgICB0aGlzLl9yZW1lbWJlckN1cnJlbnRUcmFuc2FjdGlvbihyZXNwb25zZSk7XG4gICAgICAgICAgICB0aGlzLl9yZW1lbWJlckN1cnJlbnRUcmFuc2FjdGlvbkxpbmVTdGF0dXMocmVzcG9uc2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXNvbHZlKHJlc3BvbnNlKTtcbiAgICAgICAgfSkuY2F0Y2goKHJlYXNvbjogVmFsaWRhdGlvblJlc3VsdCkgPT4ge1xuICAgICAgICAgIHJlc29sdmUobnVsbCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBzZXRSZWxhdGlvbkJ5VXNlcih1c2VybmFtZTogc3RyaW5nLCBwYXNzd29yZDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPGJvb2xlYW4+KChyZXNvbHZlOiBGdW5jdGlvbikgPT4ge1xuICAgICAgdGhpcy5fY29ubmVjdG9yLnNldFJlbGF0aW9uQnlVc2VyKHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnV1aWQsIHVzZXJuYW1lLCBwYXNzd29yZClcbiAgICAgICAgLnRoZW4oYXN5bmMgKGlzU3VjY2VzczogYm9vbGVhbikgPT4ge1xuICAgICAgICAgIHJlc29sdmUoaXNTdWNjZXNzKTtcbiAgICAgICAgfSkuY2F0Y2goKHJlYXNvbjogVmFsaWRhdGlvblJlc3VsdCkgPT4ge1xuICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldEN1c3RvbWVyRnVsT2JqZWN0QnlSZWxhdGlvbklkKHJlbGF0aW9uSWQ6IG51bWJlcik6IFByb21pc2U8Q3VzdG9tZXJGdWxsT2JqZWN0PiB7XG4gICAgY29uc3QgcmVsYXRpb25Ocjogc3RyaW5nID0gYXdhaXQgdGhpcy5fY29ubmVjdG9yLmdldFJlbGF0aW9uTnVtYmVyKHJlbGF0aW9uSWQpO1xuICAgIGlmIChyZWxhdGlvbk5yKSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5fY29ubmVjdG9yLmdldEN1c3RvbWVyRnVsbE9iamVjdChOdW1iZXIocmVsYXRpb25OcikpO1xuICAgIH1cbiAgICByZXR1cm4gTlVMTF9DVVNUT01FUl9GVUxMX09CSkVDVDtcbiAgfVxuXG4gIC8vIHB1YmxpYyBhc3luYyBzZXRSZWxhdGlvbkJ5VXNlcih1c2VybmFtZTogc3RyaW5nLCBwYXNzd29yZDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIC8vICAgY29uc3QgcmVzcG9uc2U6IGJvb2xlYW4gPSBhd2FpdCB0aGlzLl9jb25uZWN0b3Iuc2V0UmVsYXRpb25CeVVzZXIodGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udXVpZCwgdXNlcm5hbWUsIHBhc3N3b3JkKTtcbiAgLy8gICByZXR1cm4gcmVzcG9uc2U7XG4gIC8vIH1cblxuICBwcml2YXRlIF9pbml0aWFsaXplVHJhbnNhY3Rpb24oKTogdm9pZCB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudFRyYW5zYWN0aW9uLnByZWZlcnJlZERlbGl2ZXJ5RGF0ZTIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLl9jdXJyZW50VHJhbnNhY3Rpb24ucHJlZmVycmVkRGVsaXZlcnlEYXRlMiA9IFwiPVwiO1xuICAgICAgfVxuICB9XG4gIHByaXZhdGUgYXN5bmMgX3JlbWVtYmVyQ3VycmVudFRyYW5zYWN0aW9uKHZhbHVlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuX2N1cnJlbnRUcmFuc2FjdGlvbiA9IHZhbHVlLnRyYW5zYWN0aW9uSW5mbztcbiAgICB0aGlzLl9pbml0aWFsaXplVHJhbnNhY3Rpb24oKTtcblxuICAgIHRoaXMuY3VycmVudExpbmVzID0gdmFsdWUudHJhbnNhY3Rpb25MaW5lcztcbiAgICB0aGlzLmN1cnJlbnRUb3RhbHMgPSB2YWx1ZS50cmFuc2FjdGlvblRvdGFsO1xuXG4gICAgdGhpcy5jdXJyZW50TGluZU9wZXJhdGlvblN0YXR1c2VzID0gdmFsdWUubGluZU9wZXJhdGlvblN0YXR1c2VzO1xuXG4gICAgYXdhaXQgdGhpcy5fdXBkYXRlUmVsYXRpb24oKTtcbiAgICB0aGlzLnRyYW5zYWN0aW9uVXBkYXRlZC5lbWl0KCk7XG4gIH1cblxuICBwcml2YXRlIF9yZW1lbWJlckN1cnJlbnRUcmFuc2FjdGlvbkxpbmVTdGF0dXModmFsdWU6IExpbmVPcGVyYXRpb25SZXNwb25zZSk6IHZvaWQge1xuICAgIC8vIHRoaXMuX2N1cnJlbnRMaW5lT3BlcmF0aW9uU3RhdHVzLnV1aWQgPSB2YWx1ZS5saW5lVXVpZDtcbiAgICAvLyB0aGlzLl9jdXJyZW50TGluZU9wZXJhdGlvblN0YXR1cy5wZW5kaW5nUmVhc29uID0gdmFsdWUucGVuZGluZ1JlYXNvbjtcbiAgICAvLyB0aGlzLl9jdXJyZW50TGluZU9wZXJhdGlvblN0YXR1cy5wZW5kaW5nUmVhc29uVHlwZSA9IHZhbHVlLnBlbmRpbmdSZWFzb25UeXBlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBfdXBkYXRlUmVsYXRpb24oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuY3VycmVudFRyYW5zYWN0aW9uICYmIHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnJlbGF0aW9uICYmIHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnJlbGF0aW9uLnJlbGF0aW9uSWQpIHtcbiAgICAgIGlmICghdGhpcy5fY3VycmVudFJlbGF0aW9uIHx8IHRoaXMuX2N1cnJlbnRSZWxhdGlvbi5yZWxhdGlvbklkICE9PSB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi5yZWxhdGlvbi5yZWxhdGlvbklkKSB7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRSZWxhdGlvbiA9IGF3YWl0IHRoaXMuZ2V0Q3VzdG9tZXJGdWxPYmplY3RCeVJlbGF0aW9uSWQodGhpcy5jdXJyZW50VHJhbnNhY3Rpb24ucmVsYXRpb24ucmVsYXRpb25JZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0VHJhbnNhY3Rpb25EZWxpdmVyeU9wdGlvbnMoKTogU2V0VHJhbnNhY3Rpb25EZWxpdmVyeU9wdGlvbnNSZXF1ZXN0IHtcbiAgICBjb25zdCB0cmFuc2FjdGlvbkRlbGl2ZXJ5T3B0aW9uc1JlcXVlc3Q6IFNldFRyYW5zYWN0aW9uRGVsaXZlcnlPcHRpb25zUmVxdWVzdCA9IG5ldyBTZXRUcmFuc2FjdGlvbkRlbGl2ZXJ5T3B0aW9uc1JlcXVlc3QgKCk7XG4gICAgdHJhbnNhY3Rpb25EZWxpdmVyeU9wdGlvbnNSZXF1ZXN0LmFsbG93UGFydGlhbERlbGl2ZXJ5ID0gdGhpcy5fY3VycmVudFRyYW5zYWN0aW9uLmFsbG93UGFydGlhbERlbGl2ZXJ5O1xuICAgIHRyYW5zYWN0aW9uRGVsaXZlcnlPcHRpb25zUmVxdWVzdC5kZWxpdmVyeURhdGUgPSB0aGlzLl9jdXJyZW50VHJhbnNhY3Rpb24uZGVsaXZlcnlEYXRlO1xuICAgIHRyYW5zYWN0aW9uRGVsaXZlcnlPcHRpb25zUmVxdWVzdC5kZWxpdmVyeU1ldGhvZCA9IHRoaXMuX2N1cnJlbnRUcmFuc2FjdGlvbi5kZWxpdmVyeU1ldGhvZDtcbiAgICB0cmFuc2FjdGlvbkRlbGl2ZXJ5T3B0aW9uc1JlcXVlc3QuZGVsaXZlcnlPcHRpb25zID0gdGhpcy5fY3VycmVudFRyYW5zYWN0aW9uLmRlbGl2ZXJ5T3B0aW9ucztcbiAgICB0cmFuc2FjdGlvbkRlbGl2ZXJ5T3B0aW9uc1JlcXVlc3QubWFya2V0aW5nQ29kZSA9IHRoaXMuX2N1cnJlbnRUcmFuc2FjdGlvbi5tYXJrZXRpbmdDb2RlO1xuICAgIHRyYW5zYWN0aW9uRGVsaXZlcnlPcHRpb25zUmVxdWVzdC5vd25SZWZlcmVuY2UgPSB0aGlzLl9jdXJyZW50VHJhbnNhY3Rpb24ub3duUmVmZXJlbmNlO1xuICAgIHRyYW5zYWN0aW9uRGVsaXZlcnlPcHRpb25zUmVxdWVzdC5wcmVmZXJyZWREZWxpdmVyeURhdGUgPSB0aGlzLl9jdXJyZW50VHJhbnNhY3Rpb24ucHJlZmVycmVkRGVsaXZlcnlEYXRlO1xuICAgIHRyYW5zYWN0aW9uRGVsaXZlcnlPcHRpb25zUmVxdWVzdC5wcmVmZXJyZWREZWxpdmVyeURhdGUyID0gdGhpcy5fY3VycmVudFRyYW5zYWN0aW9uLnByZWZlcnJlZERlbGl2ZXJ5RGF0ZTI7XG4gICAgdHJhbnNhY3Rpb25EZWxpdmVyeU9wdGlvbnNSZXF1ZXN0LnJlbGF0aW9uUmVmZXJlbmNlID0gdGhpcy5fY3VycmVudFRyYW5zYWN0aW9uLnJlbGF0aW9uUmVmZXJlbmNlO1xuICAgIHRyYW5zYWN0aW9uRGVsaXZlcnlPcHRpb25zUmVxdWVzdC5yZW1hcmsgPSB0aGlzLl9jdXJyZW50VHJhbnNhY3Rpb24ucmVtYXJrO1xuICAgIHRyYW5zYWN0aW9uRGVsaXZlcnlPcHRpb25zUmVxdWVzdC50cmFuc2FjdGlvblV1aWQgPSB0aGlzLl9jdXJyZW50VHJhbnNhY3Rpb24udXVpZDtcbiAgICB0cmFuc2FjdGlvbkRlbGl2ZXJ5T3B0aW9uc1JlcXVlc3QudHJhbnNhY3Rpb25BZGRyZXNzID0gdGhpcy5fY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uQWRkcmVzcy5uYXdOcjtcbiAgICB0cmFuc2FjdGlvbkRlbGl2ZXJ5T3B0aW9uc1JlcXVlc3QuaW52b2ljZUFkZHJlc3MgPSB0aGlzLl9jdXJyZW50VHJhbnNhY3Rpb24uaW52b2ljZUFkZHJlc3MubmF3TnI7XG4gICAgcmV0dXJuIHRyYW5zYWN0aW9uRGVsaXZlcnlPcHRpb25zUmVxdWVzdDtcbiAgfVxufVxuIl19
546
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNhY3Rpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9hcHAvc2VydmljZS90cmFuc2FjdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsWUFBWSxFQUFrQixVQUFVLEVBQVcsTUFBTSxlQUFlLENBQUM7QUFDakYsT0FBTyxFQUFDLDJCQUEyQixFQUFDLE1BQU0sa0NBQWtDLENBQUM7QUFHN0UsT0FBTyxFQUNMLHlCQUF5QixFQUN6QixvQkFBb0IsRUFDckIsTUFBTSwwREFBMEQsQ0FBQztBQUVsRSxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sMkRBQTJELENBQUM7QUFHMUYsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLHdEQUF3RCxDQUFDO0FBSXBGLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxnRUFBZ0UsQ0FBQztBQUN0RixPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sa0RBQWtELENBQUM7QUFDNUUsT0FBTyxFQUFDLG9DQUFvQyxFQUFDLE1BQU0sa0ZBQWtGLENBQUM7QUFJdEksT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sMkRBQTJELENBQUM7QUFFM0YsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sZ0VBQWdFLENBQUM7QUFLbkcsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sK0RBQStELENBQUM7QUFHbEcsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLDBEQUEwRCxDQUFDO0FBRXpGLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLDhEQUE4RCxDQUFDO0FBQy9GLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQztBQUczRCxNQUFNLE9BQU8sa0JBQWtCO0lBMkQ3QixZQUNTLFVBQXVDLEVBQ3ZDLE9BQXNCO1FBRHRCLGVBQVUsR0FBVixVQUFVLENBQTZCO1FBQ3ZDLFlBQU8sR0FBUCxPQUFPLENBQWU7UUE1RHhC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LE1BQU0sQ0FBQztRQUMzRSxpQ0FBaUMsQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQztRQUNsRixpQ0FBaUMsQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDO1FBQ3pHLGlDQUFpQyxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQztRQUNqRyxPQUFPLGlDQUFpQyxDQUFDO0lBQzNDLENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxRQUFpQixFQUFFLFFBQStCO1FBQzFFLElBQUksUUFBUSxFQUFFO1lBQ1osSUFBSSxDQUFDLDJCQUEyQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzNDLElBQUksQ0FBQyxxQ0FBcUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUN0RDtJQUNILENBQUM7OztZQWhoQkYsVUFBVTs7O1lBcENILDJCQUEyQjtZQWtDM0IsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RXZlbnRFbWl0dGVyLCBJbmplY3QsIGluamVjdCwgSW5qZWN0YWJsZSwgT3B0aW9uYWx9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQge0lPbmVDb25uZWN0b3JBZGFwdGVyU2VydmljZX0gZnJvbSBcIi4vaW9uZS1jb25uZWN0b3ItYWRhcHRlci5zZXJ2aWNlXCI7XG5pbXBvcnQge0N1c3RvbWVyRnVsbE9iamVjdH0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9jdXN0b21lci1mdWxsLW9iamVjdC5ib1wiO1xuaW1wb3J0IHtSZWxhdGlvbkFueVR5cGV9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvcmVsYXRpb24tYW55LXR5cGVcIjtcbmltcG9ydCB7XG4gIE5VTExfQ1VTVE9NRVJfRlVMTF9PQkpFQ1QsXG4gIE5VTExfUkVMQVRJT05fT0JKRUNUXG59IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvbnVsLXJlbGF0aW9uLW9iamVjdFwiO1xuaW1wb3J0IHtUcmFuc2FjdGlvbkluZm9SZXNwb25zZX0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC90cmFuc2FjdGlvbi1pbmZvLXJlc3BvbnNlLmJvXCI7XG5pbXBvcnQge1RyYW5zYWN0aW9uS2luZH0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9lbnVtL3RyYW5zYWN0aW9uLWtpbmQuZW51bVwiO1xuaW1wb3J0IHtNYXJrZXRpbmd9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvbWFya2V0aW5nLmJvXCI7XG5pbXBvcnQge1JlbGF0aW9uUHJpdmFjeVNldHRpbmd9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvcmVsYXRpb24tcHJpdmFjeS1zZXR0aW5nLmJvXCI7XG5pbXBvcnQge1NlcXVlbmNlTmFtZX0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9lbnVtL3NlcXVlbmNlLW5hbWUuZW51bVwiO1xuaW1wb3J0IHtEZWxpdmVyeU1ldGhvZH0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9kZWxpdmVyeS1tZXRob2QuYm9cIjtcbmltcG9ydCB7RGVsaXZlcnlPcHRpb259IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvZGVsaXZlcnktb3B0aW9uLmJvXCI7XG5pbXBvcnQge0NvbnRhY3RPcHRpb259IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvY29udGFjdC1vcHRpb24uYm9cIjtcbmltcG9ydCB7aXNOaWxsfSBmcm9tIFwiQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL3V0aWxzL2Z1bmN0aW9uL2lzLW5pbGwuZnVuY3Rpb25cIjtcbmltcG9ydCB7QXJyYXlVdGlsc30gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC91dGlscy9hcnJheS11dGlsc1wiO1xuaW1wb3J0IHtTZXRUcmFuc2FjdGlvbkRlbGl2ZXJ5T3B0aW9uc1JlcXVlc3R9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvc2V0LXRyYW5zYWN0aW9uLWRlbGl2ZXJ5LW9wdGlvbnMtcmVxdWVzdC5ib1wiO1xuaW1wb3J0IHtSZWxhdGlvbkxpc3RPYmplY3R9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvcmVsYXRpb24tbGlzdC1vYmplY3QuYm9cIjtcbmltcG9ydCB7UmVsYXRpb25SZXF1ZXN0fSBmcm9tIFwiQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3JlbGF0aW9uLXJlcXVlc3RcIjtcbmltcG9ydCB7Q291bnRyeX0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9jb3VudHJ5LmJvXCI7XG5pbXBvcnQge1RyYW5zYWN0aW9uVG90YWx9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvdHJhbnNhY3Rpb24tdG90YWwuYm9cIjtcbmltcG9ydCB7VmFsaWRhdGlvblJlc3VsdH0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC92YWxpZGF0aW9uLXJlc3VsdFwiO1xuaW1wb3J0IHtUcmFuc2FjdGlvbkxpbmVUeXBlfSBmcm9tIFwiQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL2VudW0vdHJhbnNhY3Rpb24tbGluZS10eXBlLmVudW1cIjtcbmltcG9ydCB7UmVzb2x2ZVBlbmRpbmdMaW5lUmVhc29uUmVxdWVzdH0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9yZXNvbHZlLXBlbmRpbmctcmVhc29uLXJlcXVlc3QuYm9cIjtcbmltcG9ydCB7Q29Eb21haW5WYWx1ZX0gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9jby1kb21haW4tdmFsdWUuYm9cIjtcbmltcG9ydCB7VHJhbnNhY3Rpb25BcnRpY2xlV2FyZWhvdXNlfSBmcm9tIFwiQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3RyYW5zYWN0aW9uLWFydGljbGUtd2FyZWhvdXNlLmJvXCI7XG5pbXBvcnQge0FydGljbGVGdWxsT2JqZWN0fSBmcm9tIFwiQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2FydGljbGUtZnVsbC1vYmplY3RcIjtcbmltcG9ydCB7TGluZU9wZXJhdGlvblN0YXR1c30gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC9saW5lLW9wZXJhdGlvbi1zdGF0dXMuYm9cIjtcbmltcG9ydCB7TGluZU9wZXJhdGlvblJlc3BvbnNlfSBmcm9tIFwiQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL2xpbmUtb3BlcmF0aW9uLXJlc3BvbnNlLmJvXCI7XG5pbXBvcnQge1RyYW5zYWN0aW9uTGluZUluZm99IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvbW9kZWwvdHJhbnNhY3Rpb24tbGluZS1pbmZvLmJvXCI7XG5pbXBvcnQge1RyYW5zYWN0aW9uSW5mb30gZnJvbSBcIkBjb2xpam5pdC90cmFuc2FjdGlvbmFwaS9idWlsZC9tb2RlbC90cmFuc2FjdGlvbi1pbmZvLmJvXCI7XG5pbXBvcnQge1RyYW5zYWN0aW9uUmVzcG9uc2VCYXNlfSBmcm9tIFwiQGNvbGlqbml0L3RyYW5zYWN0aW9uYXBpL2J1aWxkL21vZGVsL3RyYW5zYWN0aW9uLXJlc3BvbnNlLWJhc2UuYm9cIjtcbmltcG9ydCB7UGVuZGluZ1JlYXNvblR5cGV9IGZyb20gXCJAY29saWpuaXQvdHJhbnNhY3Rpb25hcGkvYnVpbGQvZW51bS9wZW5kaW5nLXJlYXNvbi10eXBlLmVudW1cIjtcbmltcG9ydCB7UHJvbXB0U2VydmljZX0gZnJvbSBcIkBjb2xpam5pdC9jb3JlY29tcG9uZW50c192MTJcIjtcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFRyYW5zYWN0aW9uU2VydmljZSB7XG4gIHB1YmxpYyB0cmFuc2FjdGlvblVwZGF0ZWQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgcHVibGljIHRyYW5zYWN0aW9uTG9hZGVkOiBFdmVudEVtaXR0ZXI8VHJhbnNhY3Rpb25JbmZvUmVzcG9uc2U+ID0gbmV3IEV2ZW50RW1pdHRlcjxUcmFuc2FjdGlvbkluZm9SZXNwb25zZT4oKTtcblxuICBwdWJsaWMgZW1haWxBZGRyZXNzOiBzdHJpbmc7XG4gIHB1YmxpYyBhcHBsaWNhdGlvblVzZXI6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBwdWJsaWMgZ2V0IGN1cnJlbnRMaW5lcygpOiBUcmFuc2FjdGlvbkxpbmVJbmZvW10ge1xuICAgIHJldHVybiB0aGlzLl9jdXJyZW50TGluZXM7XG4gIH1cblxuICBwdWJsaWMgc2V0IGN1cnJlbnRMaW5lcyh2YWx1ZTogVHJhbnNhY3Rpb25MaW5lSW5mb1tdKSB7XG4gICAgdGhpcy5fY3VycmVudExpbmVzID0gdmFsdWU7XG4gICAgdGhpcy5hcnRpY2xlQW1vdW50ID0gQXJyYXlVdGlscy5GaW5kQWxsKHRoaXMuX2N1cnJlbnRMaW5lcywgbGluZSA9PiBsaW5lLmlzQXJ0aWNsZSkubGVuZ3RoO1xuICB9XG5cbiAgcHVibGljIHNldCBjdXJyZW50VG90YWxzKHZhbHVlOiBUcmFuc2FjdGlvblRvdGFsKSB7XG4gICAgdGhpcy5fY3VycmVudFRvdGFscyA9IHZhbHVlO1xuICB9XG5cbiAgcHVibGljIGdldCBjdXJyZW50VG90YWxzKCk6IFRyYW5zYWN0aW9uVG90YWwge1xuICAgIHJldHVybiB0aGlzLl9jdXJyZW50VG90YWxzO1xuICB9XG5cbiAgcHVibGljIGdldCBjdXJyZW50UmVsYXRpb24oKTogUmVsYXRpb25BbnlUeXBlIHtcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudFJlbGF0aW9uO1xuICB9XG5cbiAgcHVibGljIGdldCBjdXJyZW50VHJhbnNhY3Rpb24oKTogVHJhbnNhY3Rpb25JbmZvIHtcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudFRyYW5zYWN0aW9uO1xuICB9XG5cbiAgcHVibGljIHNldCBjdXJyZW50TGluZU9wZXJhdGlvblN0YXR1c2VzKHZhbHVlczogTGluZU9wZXJhdGlvblN0YXR1c1tdKSB7XG4gICAgdGhpcy5fY3VycmVudExpbmVPcGVyYXRpb25TdGF0dXNlcyA9IHZhbHVlcztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY3VycmVudExpbmVPcGVyYXRpb25TdGF0dXNlcygpOiBMaW5lT3BlcmF0aW9uU3RhdHVzW10ge1xuICAgIHJldHVybiB0aGlzLl9jdXJyZW50TGluZU9wZXJhdGlvblN0YXR1c2VzO1xuICB9XG5cbiAgcHVibGljIHNldCBjdXJyZW50TGluZU9wZXJhdGlvblN0YXR1cyh2YWx1ZTogTGluZU9wZXJhdGlvblN0YXR1cykge1xuICAgIHRoaXMuX2N1cnJlbnRMaW5lT3BlcmF0aW9uU3RhdHVzID0gdmFsdWU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGN1cnJlbnRMaW5lT3BlcmF0aW9uU3RhdHVzKCk6IExpbmVPcGVyYXRpb25TdGF0dXMgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHN0YXR1czogTGluZU9wZXJhdGlvblN0YXR1cyA9IHRoaXMuY3VycmVudExpbmVPcGVyYXRpb25TdGF0dXNlcy5maW5kKGxpbmUgPT4gbGluZS5wZW5kaW5nUmVhc29uVHlwZSAhPT0gUGVuZGluZ1JlYXNvblR5cGUuTk9ORVxuICAgICAgICAmJiBsaW5lLnBlbmRpbmdSZWFzb25UeXBlICE9PSBQZW5kaW5nUmVhc29uVHlwZS5OT05fQ1JJVElDQUxfRElTQ09OVElOVUFUSU9OKTtcbiAgICByZXR1cm4gc3RhdHVzO1xuICB9XG5cbiAgcHVibGljIGFydGljbGVBbW91bnQ6IG51bWJlciA9IDA7XG5cbiAgcHJpdmF0ZSBfY3VycmVudExpbmVzOiBUcmFuc2FjdGlvbkxpbmVJbmZvW10gPSBbXTtcbiAgcHJpdmF0ZSBfY3VycmVudFRvdGFsczogVHJhbnNhY3Rpb25Ub3RhbCA9IG5ldyBUcmFuc2FjdGlvblRvdGFsKCk7XG4gIHByaXZhdGUgX2N1cnJlbnRSZWxhdGlvbjogUmVsYXRpb25BbnlUeXBlID0gTlVMTF9SRUxBVElPTl9PQkpFQ1Q7XG4gIHByaXZhdGUgX2N1cnJlbnRUcmFuc2FjdGlvbjogVHJhbnNhY3Rpb25JbmZvID0gbmV3IFRyYW5zYWN0aW9uSW5mbygpO1xuICBwcml2YXRlIF9jdXJyZW50TGluZU9wZXJhdGlvblN0YXR1czogTGluZU9wZXJhdGlvblN0YXR1cyA9IG5ldyBMaW5lT3BlcmF0aW9uU3RhdHVzKCk7XG4gIHByaXZhdGUgX2N1cnJlbnRMaW5lT3BlcmF0aW9uU3RhdHVzZXM6IExpbmVPcGVyYXRpb25TdGF0dXNbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBfY29ubmVjdG9yOiBJT25lQ29ubmVjdG9yQWRhcHRlclNlcnZpY2UsXG4gICAgcHVibGljIF9wcm9tcHQ6IFByb21wdFNlcnZpY2UsXG4gICkge1xuICAgIHRoaXMuX2luaXRpYWxpemVUcmFuc2FjdGlvbigpO1xuICB9XG5cbiAgcHVibGljIHBlbmRpbmdMaW5lT3BlcmF0aW9uU3RhdHVzKGxpbmVPcGVyYXRpb25TdGF0dXNlczogTGluZU9wZXJhdGlvblN0YXR1c1tdKTogTGluZU9wZXJhdGlvblN0YXR1cyB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3Qgc3RhdHVzOiBMaW5lT3BlcmF0aW9uU3RhdHVzID0gbGluZU9wZXJhdGlvblN0YXR1c2VzLmZpbmQobGluZSA9PiBsaW5lLnBlbmRpbmdSZWFzb25UeXBlICE9PSBQZW5kaW5nUmVhc29uVHlwZS5OT05FXG4gICAgICAmJiBsaW5lLnBlbmRpbmdSZWFzb25UeXBlICE9PSBQZW5kaW5nUmVhc29uVHlwZS5OT05fQ1JJVElDQUxfRElTQ09OVElOVUFUSU9OKTtcbiAgICByZXR1cm4gc3RhdHVzO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldEFydGljbGVGdWxsT2JqZWN0KGdvb2RJZDogbnVtYmVyKTogUHJvbWlzZTxBcnRpY2xlRnVsbE9iamVjdD4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLl9jb25uZWN0b3IuZ2V0QXJ0aWNsZUZ1bGxPYmplY3QoZ29vZElkKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRHb29kSWRGcm9tQXJ0aWNsZU5yKHNrdTogc3RyaW5nKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5fY29ubmVjdG9yLmdldEdvb2RJZEZyb21BcnRpY2xlTnIoc2t1KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRSZWxhdGlvbigpOiBQcm9taXNlPFJlbGF0aW9uQW55VHlwZT4ge1xuICAgIGNvbnN0IHJlbGF0aW9uTm86IHN0cmluZyA9IGF3YWl0IHRoaXMuX2Nvbm5lY3Rvci5nZXRSZWxhdGlvbk51bWJlcih0aGlzLl9jdXJyZW50VHJhbnNhY3Rpb24ucmVsYXRpb24ucmVsYXRpb25JZCk7XG5cbiAgICBpZiAocmVsYXRpb25Obykge1xuICAgICAgdGhpcy5fY3VycmVudFJlbGF0aW9uID0gYXdhaXQgdGhpcy5fY29ubmVjdG9yLmdldEN1c3RvbWVyRnVsbE9iamVjdChOdW1iZXIocmVsYXRpb25ObykpO1xuICAgICAgYXdhaXQgdGhpcy5sb2FkQ291bnRyaWVzT2ZSZWxhdGlvbkFkZHJlc3NlcygpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fY3VycmVudFJlbGF0aW9uO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGxvYWRDb3VudHJpZXNPZlJlbGF0aW9uQWRkcmVzc2VzKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGZvciAoY29uc3QgYWRkcmVzcyBvZiB0aGlzLmN1cnJlbnRSZWxhdGlvbi5hZGRyZXNzZXMpIHtcbiAgICAgIGNvbnN0IGNvdW50cnk6IENvdW50cnkgPSBhd2FpdCB0aGlzLmdldENvdW50cnkoYWRkcmVzcy5jb3VudHJ5SWQpO1xuICAgICAgYWRkcmVzcy5jb3VudHJ5TmFtZSA9IGNvdW50cnkuZGVzY3JpcHRpb247XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldENvdW50cnkoY291bnRyeUNvZGU6IHN0cmluZyk6IFByb21pc2U8Q291bnRyeT4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLl9jb25uZWN0b3IuZ2V0Q291bnRyeShjb3VudHJ5Q29kZSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0UmVsYXRpb25OdW1iZXIocmVsYXRpb25JZDogbnVtYmVyKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5fY29ubmVjdG9yLmdldFJlbGF0aW9uTnVtYmVyKHJlbGF0aW9uSWQpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHNhdmVOZXdSZWxhdGlvbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmNsZWFuUmVsYXRpb25CZWZvcmVTYXZlKCk7XG4gICAgdGhpcy5fY3VycmVudFJlbGF0aW9uID0gYXdhaXQgdGhpcy5fY29ubmVjdG9yLmluc2VydEN1c3RvbWVyKHRoaXMuX2N1cnJlbnRSZWxhdGlvbik7XG4gICAgYXdhaXQgdGhpcy5hZGRSZWxhdGlvblRvVHJhbnNhY3Rpb24odGhpcy5fY3VycmVudFJlbGF0aW9uLnJlbGF0aW9uSWQpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHNhdmVSZWxhdGlvbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmNsZWFuUmVsYXRpb25CZWZvcmVTYXZlKCk7XG4gICAgdGhpcy5fY3VycmVudFJlbGF0aW9uID0gYXdhaXQgdGhpcy5fY29ubmVjdG9yLnVwZGF0ZUN1c3RvbWVyKHRoaXMuX2N1cnJlbnRSZWxhdGlvbik7XG4gIH1cblxuICBwdWJsaWMgY2xlYW5SZWxhdGlvbkJlZm9yZVNhdmUoKTogdm9pZCB7XG4gICAgQXJyYXlVdGlscy5SZW1vdmVFbGVtZW50c0J5RmlsdGVyKHRoaXMuX2N1cnJlbnRSZWxhdGlvbi5jb250YWN0T3B0aW9ucywgKChpdGVtOiBDb250YWN0T3B0aW9uKSA9PiB7XG4gICAgICByZXR1cm4gaXNOaWxsKGl0ZW0udmFsdWUpO1xuICAgIH0pKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRTZXF1ZW5jZVZhbHVlKCk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuX2Nvbm5lY3Rvci5nZXRTZXF1ZW5jZVZhbHVlKFNlcXVlbmNlTmFtZS5SZWxhdGlvbklkKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRSZWxhdGlvblByaXZhY3lTZXR0aW5ncygpOiBQcm9taXNlPFJlbGF0aW9uUHJpdmFjeVNldHRpbmdbXT4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLl9jb25uZWN0b3IuZ2V0UmVsYXRpb25Qcml2YWN5U2V0dGluZ3MoKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBjcmVhdGVUcmFuc2FjdGlvbigpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8Ym9vbGVhbj4oKHJlc29sdmU6IEZ1bmN0aW9uLCByZWplY3Q6IEZ1bmN0aW9uKSA9PiB7XG4gICAgICB0aGlzLl9jb25uZWN0b3IuY3JlYXRlVHJhbnNhY3Rpb24oVHJhbnNhY3Rpb25LaW5kLlNhbGVzT3JkZXIsIFwiMVwiKS50aGVuKChyZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UpID0+IHtcbiAgICAgICAgdGhpcy5fcmVtZW1iZXJDdXJyZW50VHJhbnNhY3Rpb24ocmVzcG9uc2UpO1xuICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgfSwgKGVycm9yKSA9PiB7XG4gICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH0pLmNhdGNoKChyZWFzb246IFZhbGlkYXRpb25SZXN1bHQpID0+IHtcbiAgICAgICAgcmVqZWN0KGZhbHNlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHJlc29sdmVQZW5kaW5nTGluZVJlYXNvbihwZW5kaW5nTGluZVZhbHVlczogUmVzb2x2ZVBlbmRpbmdMaW5lUmVhc29uUmVxdWVzdCwgcmVtZW1iZXI6IGJvb2xlYW4gPSB0cnVlKTogUHJvbWlzZTxMaW5lT3BlcmF0aW9uUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8TGluZU9wZXJhdGlvblJlc3BvbnNlPigocmVzb2x2ZTogRnVuY3Rpb24pID0+IHtcbiAgICAgIHRoaXMuX2Nvbm5lY3Rvci5yZXNvbHZlUGVuZGluZ0xpbmVSZWFzb24ocGVuZGluZ0xpbmVWYWx1ZXMpLnRoZW4oYXN5bmMgKHJlc3BvbnNlOiBMaW5lT3BlcmF0aW9uUmVzcG9uc2UpID0+IHtcbiAgICAgICAgdGhpcy5fcmVtZW1iZXJSZXNwb25zZShyZW1lbWJlciwgcmVzcG9uc2UpO1xuICAgICAgICByZXNvbHZlKHJlc3BvbnNlKTtcbiAgICAgIH0pLmNhdGNoKChyZWFzb246IFZhbGlkYXRpb25SZXN1bHQpID0+IHtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0VHJhbnNhY3Rpb24odHJhbnNhY3Rpb25ObzogbnVtYmVyKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMub3BlbkV4aXN0aW5nVHJhbnNhY3Rpb24oVHJhbnNhY3Rpb25LaW5kLlNhbGVzT3JkZXIsIHRyYW5zYWN0aW9uTm8pO1xuICB9XG5cbiAgcHVibGljIG9wZW5FeGlzdGluZ1RyYW5zYWN0aW9uKGtpbmQ6IFRyYW5zYWN0aW9uS2luZCwgdHJhbnNhY3Rpb25OcjogbnVtYmVyKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPGJvb2xlYW4+KChyZXNvbHZlOiBGdW5jdGlvbiwgcmVqZWN0OiBGdW5jdGlvbikgPT4ge1xuICAgICAgdGhpcy5fY29ubmVjdG9yLmdldFRyYW5zYWN0aW9uQnlOckFuZEtpbmQoa2luZCwgdHJhbnNhY3Rpb25OcilcbiAgICAgICAgLnRoZW4oYXN5bmMgKHJlc3BvbnNlOiBUcmFuc2FjdGlvbkluZm9SZXNwb25zZSkgPT4ge1xuICAgICAgICAgIGlmIChyZXNwb25zZS5pc1N1Y2Nlc3MpIHtcbiAgICAgICAgICAgIHRoaXMudHJhbnNhY3Rpb25Mb2FkZWQuZW1pdChyZXNwb25zZSk7XG4gICAgICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZWplY3QoZmFsc2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKChyZWFzb246IFZhbGlkYXRpb25SZXN1bHQpID0+IHtcbiAgICAgICAgICByZWplY3QoZmFsc2UpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG5cbiAgcHVibGljIGdldFRyYW5zYWN0aW9uQnlJZCh0cmFuc2FjdGlvbklkOiBudW1iZXIpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8Ym9vbGVhbj4oKHJlc29sdmU6IEZ1bmN0aW9uLCByZWplY3Q6IEZ1bmN0aW9uKSA9PiB7XG4gICAgICB0aGlzLl9jb25uZWN0b3IuZ2V0VHJhbnNhY3Rpb25CeUlkKHRyYW5zYWN0aW9uSWQpXG4gICAgICAgIC50aGVuKGFzeW5jIChyZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICBpZiAocmVzcG9uc2UuaXNTdWNjZXNzKSB7XG4gICAgICAgICAgICB0aGlzLnRyYW5zYWN0aW9uTG9hZGVkLmVtaXQocmVzcG9uc2UpO1xuICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVqZWN0KGZhbHNlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaCgocmVhc29uOiBWYWxpZGF0aW9uUmVzdWx0KSA9PiB7XG4gICAgICAgICAgcmVqZWN0KGZhbHNlKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgc2F2ZVRyYW5zYWN0aW9uKGNsb3NlOiBib29sZWFuID0gZmFsc2UpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCByZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UgPSBhd2FpdCB0aGlzLl9jb25uZWN0b3Iuc2F2ZVRyYW5zYWN0aW9uKHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnV1aWQpO1xuICAgIGlmIChyZXNwb25zZS5pc1N1Y2Nlc3MpIHtcbiAgICAgIHRoaXMuX3JlbWVtYmVyQ3VycmVudFRyYW5zYWN0aW9uKHJlc3BvbnNlKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgc2F2ZVRyYW5zYWN0aW9uQnlVdWlkKHRyYW5zYWN0aW9uVXVpZDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPGJvb2xlYW4+KChyZXNvbHZlOiBGdW5jdGlvbiwgcmVqZWN0OiBGdW5jdGlvbikgPT4ge1xuICAgICAgdGhpcy5fY29ubmVjdG9yLnNhdmVUcmFuc2FjdGlvbih0cmFuc2FjdGlvblV1aWQpXG4gICAgICAgIC50aGVuKGFzeW5jIChyZXNwb25zZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICBpZiAocmVzcG9uc2UuaXNTdWNjZXNzKSB7XG4gICAgICAgICAgICB0aGlzLnRyYW5zYWN0aW9uTG9hZGVkLmVtaXQocmVzcG9uc2UpO1xuICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVqZWN0KGZhbHNlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaCgocmVhc29uOiBWYWxpZGF0aW9uUmVzdWx0KSA9PiB7XG4gICAgICAgICAgaWYgKHJlYXNvbikge1xuICAgICAgICAgICAgdGhpcy5fcHJvbXB0LnNob3dFcnJvcihyZWFzb24uZ2V0RnVsbEVycm9yU3RyaW5nKCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZWplY3QoZmFsc2UpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBhZGRSZWxhdGlvblRvVHJhbnNhY3Rpb24ocmVsYXRpb25JZDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgc3VjY2VzczogYm9vbGVhbiA9ICBhd2FpdCB0aGlzLl9jb25uZWN0b3IuYWRkUmVsYXRpb25Ub1RyYW5zYWN0aW9uKHRoaXMuX2N1cnJlbnRUcmFuc2FjdGlvbi51dWlkLCByZWxhdGlvbklkKTtcbiAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgYXdhaXQgdGhpcy5zYXZlVHJhbnNhY3Rpb24oKTtcbiAgICAgIGF3YWl0IHRoaXMuZ2V0VHJhbnNhY3Rpb24odGhpcy5fY3VycmVudFRyYW5zYWN0aW9uLnRyYW5zYWN0aW9uTnIpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRDb21taXNzaW9uQ29kZXMobGFuZ3VhZ2VDb2RlOiBzdHJpbmcpOiBQcm9taXNlPENvRG9tYWluVmFsdWVbXT4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLl9jb25uZWN0b3IuZ2V0Q29tbWlzc2lvbkNvZGVzKGxhbmd1YWdlQ29kZSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0SW5PdXRDb2xsZWN0aW9uKGxhbmd1YWdlQ29kZTogc3RyaW5nKTogUHJvbWlzZTxDb0RvbWFpblZhbHVlW10+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5fY29ubmVjdG9yLmdldEluT3V0Q29sbGVjdGlvbihsYW5ndWFnZUNvZGUpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldFRyYW5zYWN0aW9uQXJ0aWNsZVdhcmVob3VzZXMoZ29vZElkOiBudW1iZXIpOiBQcm9taXNlPFRyYW5zYWN0aW9uQXJ0aWNsZVdhcmVob3VzZVtdPiB7XG4gICAgcmV0dXJuIHRoaXMuX2Nvbm5lY3Rvci5nZXRUcmFuc2FjdGlvbkFydGljbGVXYXJlaG91c2VzKGdvb2RJZCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0TWFya2V0aW5nQ29kZXMoKTogUHJvbWlzZTxNYXJrZXRpbmdbXT4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLl9jb25uZWN0b3IuZ2V0TWFya2V0aW5nQ29kZXMoKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBpbnNlcnRDdXN0b21lcihyZWxhdGlvbjogQ3VzdG9tZXJGdWxsT2JqZWN0KTogUHJvbWlzZTxDdXN0b21lckZ1bGxPYmplY3Q+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5fY29ubmVjdG9yLmluc2VydEN1c3RvbWVyKHJlbGF0aW9uKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyB1cGRhdGVDdXN0b21lcihyZWxhdGlvbjogQ3VzdG9tZXJGdWxsT2JqZWN0KTogUHJvbWlzZTxDdXN0b21lckZ1bGxPYmplY3Q+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8Q3VzdG9tZXJGdWxsT2JqZWN0PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLl9jb25uZWN0b3IudXBkYXRlQ3VzdG9tZXIocmVsYXRpb24pLnRoZW4oYXN5bmMoIHJlc3BvbnNlOiBDdXN0b21lckZ1bGxPYmplY3QpID0+IHtcbiAgICAgICAgdGhpcy5fY3VycmVudFJlbGF0aW9uID0gcmVsYXRpb247XG4gICAgICAgIHJlc29sdmUocmVzcG9uc2UpO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgocmVzcG9uc2U6IEN1c3RvbWVyRnVsbE9iamVjdCkgPT4ge1xuICAgICAgICByZXNvbHZlKHJlc3BvbnNlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldERlbGl2ZXJ5TWV0aG9kcygpOiBQcm9taXNlPERlbGl2ZXJ5TWV0aG9kW10+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5fY29ubmVjdG9yLmdldERlbGl2ZXJ5TWV0aG9kcygpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldERlbGl2ZXJ5T3B0aW9ucygpOiBQcm9taXNlPERlbGl2ZXJ5T3B0aW9uW10+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5fY29ubmVjdG9yLmdldERlbGl2ZXJ5T3B0aW9ucygpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHNldFRyYW5zYWN0aW9uRGVsaXZlcnlPcHRpb25zKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHRyYW5zYWN0aW9uRGVsaXZlcnlPcHRpb25zUmVxdWVzdDogU2V0VHJhbnNhY3Rpb25EZWxpdmVyeU9wdGlvbnNSZXF1ZXN0ID0gdGhpcy5fZ2V0VHJhbnNhY3Rpb25EZWxpdmVyeU9wdGlvbnMoKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8Ym9vbGVhbj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5fY29ubmVjdG9yLnNldFRyYW5zYWN0aW9uRGVsaXZlcnlPcHRpb25zKHRyYW5zYWN0aW9uRGVsaXZlcnlPcHRpb25zUmVxdWVzdCkudGhlbihhc3luYyggcmVzcG9uc2U6IFRyYW5zYWN0aW9uUmVzcG9uc2VCYXNlKSA9PiB7XG4gICAgICAgIHJlc29sdmUocmVzcG9uc2UuaXNTdWNjZXNzKTtcbiAgICAgIH0sIChlcnJvcikgPT4ge1xuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgocmVzcG9uc2U6IFRyYW5zYWN0aW9uUmVzcG9uc2VCYXNlKSA9PiB7XG4gICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0UmVsYXRpb25MaXN0T2JqZWN0cyhyZWxhdGlvblJlcXVlc3Q6IFJlbGF0aW9uUmVxdWVzdCk6IFByb21pc2U8UmVsYXRpb25MaXN0T2JqZWN0W10+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5fY29ubmVjdG9yLmdldFJlbGF0aW9uTGlzdE9iamVjdHMocmVsYXRpb25SZXF1ZXN0KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyByZXRyaWV2ZUxpbmVJbWFnZShsaW5lOiBUcmFuc2FjdGlvbkxpbmVJbmZvKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5nZXRBcnRpY2xlSW1hZ2VCeUFydGljbGVOdW1iZXIobGluZS5hcnRpY2xlTnVtYmVyKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRBcnRpY2xlSW1hZ2VCeUFydGljbGVOdW1iZXIoYXJ0aWNsZU51bWJlcjogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCBnb29kSWQ6IG51bWJlciA9IGF3YWl0IHRoaXMuX2Nvbm5lY3Rvci5nZXRHb29kSWRGcm9tQXJ0aWNsZU5yKGFydGljbGVOdW1iZXIpO1xuICAgIHJldHVybiB0aGlzLmdldEFydGljbGVJbWFnZUJ5R29vZElkKGdvb2RJZCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0QXJ0aWNsZUltYWdlQnlHb29kSWQoZ29vZElkOiBudW1iZXIpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGlmICghaXNOYU4oZ29vZElkKSkge1xuICAgICAgcmV0dXJuIHRoaXMuX2Nvbm5lY3Rvci5nZXRTaW5nbGVJbWFnZShnb29kSWQsIDEsIHRydWUsIHRydWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgYWRkQXJ0aWNsZShhcnRpY2xlTm86IHN0cmluZywgYW1vdW50OiBudW1iZXIgPSAxLCB3YXJlaG91c2VObzogbnVtYmVyID0gMSwgY29tbWlzc2lvbkNvZGU6IHN0cmluZyA9IFwiMlwiLCBpc1JldHVybjogYm9vbGVhbiA9IGZhbHNlLCBhYm92ZUxpbmVOcjogbnVtYmVyID0gMCwgYmVsb3dMaW5lTnI6IG51bWJlciA9IDApOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8Ym9vbGVhbj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5fY29ubmVjdG9yLmFkZFRyYW5zYWN0aW9uTGluZSh0aGlzLl9jdXJyZW50VHJhbnNhY3Rpb24udXVpZCwgVHJhbnNhY3Rpb25MaW5lVHlwZS5BcnRpY2xlTGluZSwgYXJ0aWNsZU5vLCBhbW91bnQsIHdhcmVob3VzZU5vLCBjb21taXNzaW9uQ29kZSwgaXNSZXR1cm4sIGFib3ZlTGluZU5yLCBiZWxvd0xpbmVOcilcbiAgICAgICAgLnRoZW4oYXN5bmMoIHJlc3BvbnNlOiBMaW5lT3BlcmF0aW9uUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgICB9LCAoZXJyb3IpID0+IHtcbiAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgocmVhc29uOiBWYWxpZGF0aW9uUmVzdWx0KSA9PiB7XG4gICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgYWRkQXJ0aWNsZVRvVHJhbnNhY3Rpb24odHJhbnNhY3Rpb25VdWlkOiBzdHJpbmcsIGFydGljbGVObzogc3RyaW5nLCBhbW91bnQ6IG51bWJlciA9IDEsIHdhcmVob3VzZU5vOiBudW1iZXIgPSAxLCBjb21taXNzaW9uQ29kZTogc3RyaW5nID0gXCIyXCIsIGlzUmV0dXJuOiBib29sZWFuID0gZmFsc2UsIGFib3ZlTGluZU5yOiBudW1iZXIgPSAwLCBiZWxvd0xpbmVOcjogbnVtYmVyID0gMCk6IFByb21pc2U8TGluZU9wZXJhdGlvblJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPExpbmVPcGVyYXRpb25SZXNwb25zZT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5fY29ubmVjdG9yLmFkZFRyYW5zYWN0aW9uTGluZSh0cmFuc2FjdGlvblV1aWQsIFRyYW5zYWN0aW9uTGluZVR5cGUuQXJ0aWNsZUxpbmUsIGFydGljbGVObywgYW1vdW50LCB3YXJlaG91c2VObywgY29tbWlzc2lvbkNvZGUsIGlzUmV0dXJuLCBhYm92ZUxpbmVOciwgYmVsb3dMaW5lTnIpXG4gICAgICAgIC50aGVuKGFzeW5jKCByZXNwb25zZTogTGluZU9wZXJhdGlvblJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgcmVzb2x2ZShyZXNwb25zZSk7XG4gICAgICAgIH0sIChlcnJvcikgPT4ge1xuICAgICAgICAgIHRoaXMuX3Byb21wdC5zaG93RXJyb3IoZXJyb3IpO1xuICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaCgocmVhc29uOiBWYWxpZGF0aW9uUmVzdWx0KSA9PiB7XG4gICAgICAgICAgdGhpcy5fcHJvbXB0LnNob3dFcnJvcihyZWFzb24uZ2V0RnVsbEVycm9yU3RyaW5nKCkpO1xuICAgICAgICAgIHJlc29sdmUobnVsbCk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGFkZFRyYW5zYWN0aW9uTGluZShsaW5lVHlwZTogVHJhbnNhY3Rpb25MaW5lVHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnRpY2xlTm86IHN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbW91bnQ6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJlaG91c2VObz86IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21taXNzaW9uQ29kZT86IHN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1JldHVybj86IGJvb2xlYW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJvdmVMaW5lTnI/OiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVsb3dMaW5lTnI/OiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtZW1iZXI6IGJvb2xlYW4gPSB0cnVlKTogUHJvbWlzZTxMaW5lT3BlcmF0aW9uUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8TGluZU9wZXJhdGlvblJlc3BvbnNlPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLl9jb25uZWN0b3IuYWRkVHJhbnNhY3Rpb25MaW5lKHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnV1aWQsIGxpbmVUeXBlLCBhcnRpY2xlTm8sIGFtb3VudCwgd2FyZWhvdXNlTm8sIGNvbW1pc3Npb25Db2RlLCBpc1JldHVybiwgYWJvdmVMaW5lTnIsIGJlbG93TGluZU5yKVxuICAgICAgICAudGhlbihhc3luYyAocmVzcG9uc2U6IExpbmVPcGVyYXRpb25SZXNwb25zZSkgPT4ge1xuICAgICAgICAgIHRoaXMuX3JlbWVtYmVyUmVzcG9uc2UocmVtZW1iZXIsIHJlc3BvbnNlKTtcbiAgICAgICAgICByZXNvbHZlKHJlc3BvbnNlKTtcbiAgICAgICAgfSwgKGVycm9yKSA9PiB7XG4gICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKHJlYXNvbjogVmFsaWRhdGlvblJlc3VsdCkgPT4ge1xuICAgICAgICAgIHJlc29sdmUobnVsbCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBhZGRUZXh0TGluZVRvVHJhbnNhY3Rpb24oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd09uRG9jdW1lbnRzOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFtb3VudDogbnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFydGljbGVCb3VuZDogYm9vbGVhbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZBcnRpY2xlTGluZU5yOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJvdmVMaW5lTnI/OiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVsb3dMaW5lTnI/OiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtZW1iZXI6IGJvb2xlYW4gPSB0cnVlKTogUHJvbWlzZTxMaW5lT3BlcmF0aW9uUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8TGluZU9wZXJhdGlvblJlc3BvbnNlPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLl9jb25uZWN0b3IuYWRkVGV4dExpbmVUb1RyYW5zYWN0aW9uKHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnV1aWQsIHNob3dPbkRvY3VtZW50cywgdGV4dCwgYW1vdW50LCBhcnRpY2xlQm91bmQsIHJlZkFydGljbGVMaW5lTnIsIGFib3ZlTGluZU5yLCBiZWxvd0xpbmVOcilcbiAgICAgICAgLnRoZW4oYXN5bmMgKHJlc3BvbnNlOiBMaW5lT3BlcmF0aW9uUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICB0aGlzLl9yZW1lbWJlclJlc3BvbnNlKHJlbWVtYmVyLCByZXNwb25zZSk7XG4gICAgICAgICAgcmVzb2x2ZShyZXNwb25zZSk7XG4gICAgICAgIH0sIChlcnJvcikgPT4ge1xuICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaCgocmVhc29uOiBWYWxpZGF0aW9uUmVzdWx0KSA9PiB7XG4gICAgICAgICAgcmVzb2x2ZShudWxsKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgY2hhbmdlTGluZVNlcXVlbmNlKFxuICAgIGxpbmVVdWlkOiBzdHJpbmcsXG4gICAgYWJvdmVMaW5lTnI/OiBudW1iZXIsXG4gICAgYmVsb3dMaW5lTnI/OiBudW1iZXIsXG4gICAgcmVtZW1iZXI6IGJvb2xlYW4gPSB0cnVlKTogUHJvbWlzZTxMaW5lT3BlcmF0aW9uUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8TGluZU9wZXJhdGlvblJlc3BvbnNlPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLl9jb25uZWN0b3IuY2hhbmdlTGluZVNlcXVlbmNlKHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnV1aWQsIGxpbmVVdWlkLCBhYm92ZUxpbmVOciwgYmVsb3dMaW5lTnIpXG4gICAgICAgIC50aGVuKGFzeW5jIChyZXNwb25zZTogTGluZU9wZXJhdGlvblJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgdGhpcy5fcmVtZW1iZXJSZXNwb25zZShyZW1lbWJlciwgcmVzcG9uc2UpO1xuICAgICAgICAgIHJlc29sdmUocmVzcG9uc2UpO1xuICAgICAgICB9LCAoZXJyb3IpID0+IHtcbiAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKHJlYXNvbjogVmFsaWRhdGlvblJlc3VsdCkgPT4ge1xuICAgICAgICAgIHJlc29sdmUobnVsbCk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGNhbmNlbEFkZFRyYW5zYWN0aW9uTGluZShsaW5lVXVpZDogc3RyaW5nLCByZW1lbWJlcjogYm9vbGVhbiA9IHRydWUpOiBQcm9taXNlPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLl9jb25uZWN0b3IuY2FuY2VsQWRkVHJhbnNhY3Rpb25MaW5lKGxpbmVVdWlkKVxuICAgICAgICAudGhlbihhc3luYyAocmVzcG9uc2U6IFRyYW5zYWN0aW9uSW5mb1Jlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgaWYgKHJlbWVtYmVyKSB7XG4gICAgICAgICAgICB0aGlzLl9yZW1lbWJlckN1cnJlbnRUcmFuc2FjdGlvbihyZXNwb25zZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChyZXNwb25zZS5pc1N1Y2Nlc3MpIHtcbiAgICAgICAgICAgIHJlc29sdmUocmVzcG9uc2UpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZWplY3QocmVzcG9uc2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKChyZWFzb246IFZhbGlkYXRpb25SZXN1bHQpID0+IHtcbiAgICAgICAgICByZXNvbHZlKG51bGwpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBkZWxldGVUcmFuc2FjdGlvbkxpbmUodHJhbnNhY3Rpb25VdWlkOiBzdHJpbmcsIFRyYW5zYWN0aW9uTGluZVV1aWQ6IHN0cmluZywgcmVtZW1iZXI6IGJvb2xlYW4gPSB0cnVlKTogUHJvbWlzZTxMaW5lT3BlcmF0aW9uUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8TGluZU9wZXJhdGlvblJlc3BvbnNlPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0aGlzLl9jb25uZWN0b3IuZGVsZXRlVHJhbnNhY3Rpb25MaW5lKHRyYW5zYWN0aW9uVXVpZCwgVHJhbnNhY3Rpb25MaW5lVXVpZClcbiAgICAgICAgLnRoZW4oYXN5bmMgKHJlc3BvbnNlOiBMaW5lT3BlcmF0aW9uUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICB0aGlzLl9yZW1lbWJlclJlc3BvbnNlKHJlbWVtYmVyLCByZXNwb25zZSk7XG4gICAgICAgICAgaWYgKHJlc3BvbnNlLmlzU3VjY2Vzcykge1xuICAgICAgICAgICAgcmVzb2x2ZShyZXNwb25zZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlamVjdChyZXNwb25zZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKHJlYXNvbjogVmFsaWRhdGlvblJlc3VsdCkgPT4ge1xuICAgICAgICAgIHJlc29sdmUobnVsbCk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGNoYW5nZVRyYW5zYWN0aW9uTGluZVF1YW50aXR5KGxpbmVVdWlkOiBzdHJpbmcsIG5ld1F1YW50aXR5OiBudW1iZXIsIHJlbWVtYmVyOiBib29sZWFuID0gdHJ1ZSk6IFByb21pc2U8TGluZU9wZXJhdGlvblJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPExpbmVPcGVyYXRpb25SZXNwb25zZT4oKHJlc29sdmU6IEZ1bmN0aW9uKSA9PiB7XG4gICAgICB0aGlzLl9jb25uZWN0b3IuY2hhbmdlVHJhbnNhY3Rpb25MaW5lUXVhbnRpdHkodGhpcy5jdXJyZW50VHJhbnNhY3Rpb24udXVpZCwgbGluZVV1aWQsIG5ld1F1YW50aXR5KVxuICAgICAgICAudGhlbihhc3luYyAocmVzcG9uc2U6IExpbmVPcGVyYXRpb25SZXNwb25zZSkgPT4ge1xuICAgICAgICAgIGlmIChyZXNwb25zZS5pc1N1Y2Nlc3MpIHtcbiAgICAgICAgICAgIHRoaXMuX3JlbWVtYmVyUmVzcG9uc2UocmVtZW1iZXIsIHJlc3BvbnNlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVzb2x2ZShyZXNwb25zZSk7XG4gICAgICAgIH0pLmNhdGNoKChyZWFzb246IFZhbGlkYXRpb25SZXN1bHQpID0+IHtcbiAgICAgICAgICByZXNvbHZlKG51bGwpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgc2V0UmVsYXRpb25CeVVzZXIodXNlcm5hbWU6IHN0cmluZywgcGFzc3dvcmQ6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxib29sZWFuPigocmVzb2x2ZTogRnVuY3Rpb24pID0+IHtcbiAgICAgIHRoaXMuX2Nvbm5lY3Rvci5zZXRSZWxhdGlvbkJ5VXNlcih0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi51dWlkLCB1c2VybmFtZSwgcGFzc3dvcmQpXG4gICAgICAgIC50aGVuKGFzeW5jIChpc1N1Y2Nlc3M6IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICByZXNvbHZlKGlzU3VjY2Vzcyk7XG4gICAgICAgIH0pLmNhdGNoKChyZWFzb246IFZhbGlkYXRpb25SZXN1bHQpID0+IHtcbiAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRDdXN0b21lckZ1bE9iamVjdEJ5UmVsYXRpb25JZChyZWxhdGlvbklkOiBudW1iZXIpOiBQcm9taXNlPEN1c3RvbWVyRnVsbE9iamVjdD4ge1xuICAgIGNvbnN0IHJlbGF0aW9uTnI6IHN0cmluZyA9IGF3YWl0IHRoaXMuX2Nvbm5lY3Rvci5nZXRSZWxhdGlvbk51bWJlcihyZWxhdGlvbklkKTtcbiAgICBpZiAocmVsYXRpb25Ocikge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX2Nvbm5lY3Rvci5nZXRDdXN0b21lckZ1bGxPYmplY3QoTnVtYmVyKHJlbGF0aW9uTnIpKTtcbiAgICB9XG4gICAgcmV0dXJuIE5VTExfQ1VTVE9NRVJfRlVMTF9PQkpFQ1Q7XG4gIH1cblxuICAvLyBwdWJsaWMgYXN5bmMgc2V0UmVsYXRpb25CeVVzZXIodXNlcm5hbWU6IHN0cmluZywgcGFzc3dvcmQ6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAvLyAgIGNvbnN0IHJlc3BvbnNlOiBib29sZWFuID0gYXdhaXQgdGhpcy5fY29ubmVjdG9yLnNldFJlbGF0aW9uQnlVc2VyKHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnV1aWQsIHVzZXJuYW1lLCBwYXNzd29yZCk7XG4gIC8vICAgcmV0dXJuIHJlc3BvbnNlO1xuICAvLyB9XG5cbiAgcHJpdmF0ZSBfaW5pdGlhbGl6ZVRyYW5zYWN0aW9uKCk6IHZvaWQge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnRUcmFuc2FjdGlvbi5wcmVmZXJyZWREZWxpdmVyeURhdGUyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5fY3VycmVudFRyYW5zYWN0aW9uLnByZWZlcnJlZERlbGl2ZXJ5RGF0ZTIgPSBcIj1cIjtcbiAgICAgIH1cbiAgfVxuICBwcml2YXRlIGFzeW5jIF9yZW1lbWJlckN1cnJlbnRUcmFuc2FjdGlvbih2YWx1ZTogVHJhbnNhY3Rpb25JbmZvUmVzcG9uc2UpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLl9jdXJyZW50VHJhbnNhY3Rpb24gPSB2YWx1ZS50cmFuc2FjdGlvbkluZm87XG4gICAgdGhpcy5faW5pdGlhbGl6ZVRyYW5zYWN0aW9uKCk7XG5cbiAgICB0aGlzLmN1cnJlbnRMaW5lcyA9IHZhbHVlLnRyYW5zYWN0aW9uTGluZXM7XG4gICAgdGhpcy5jdXJyZW50VG90YWxzID0gdmFsdWUudHJhbnNhY3Rpb25Ub3RhbDtcblxuICAgIHRoaXMuY3VycmVudExpbmVPcGVyYXRpb25TdGF0dXNlcyA9IHZhbHVlLmxpbmVPcGVyYXRpb25TdGF0dXNlcztcblxuICAgIGF3YWl0IHRoaXMuX3VwZGF0ZVJlbGF0aW9uKCk7XG4gICAgdGhpcy50cmFuc2FjdGlvblVwZGF0ZWQuZW1pdCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVtZW1iZXJDdXJyZW50VHJhbnNhY3Rpb25MaW5lU3RhdHVzKHZhbHVlOiBMaW5lT3BlcmF0aW9uUmVzcG9uc2UpOiB2b2lkIHtcbiAgICAvLyB0aGlzLl9jdXJyZW50TGluZU9wZXJhdGlvblN0YXR1cy51dWlkID0gdmFsdWUubGluZVV1aWQ7XG4gICAgLy8gdGhpcy5fY3VycmVudExpbmVPcGVyYXRpb25TdGF0dXMucGVuZGluZ1JlYXNvbiA9IHZhbHVlLnBlbmRpbmdSZWFzb247XG4gICAgLy8gdGhpcy5fY3VycmVudExpbmVPcGVyYXRpb25TdGF0dXMucGVuZGluZ1JlYXNvblR5cGUgPSB2YWx1ZS5wZW5kaW5nUmVhc29uVHlwZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgX3VwZGF0ZVJlbGF0aW9uKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbiAmJiB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi5yZWxhdGlvbiAmJiB0aGlzLmN1cnJlbnRUcmFuc2FjdGlvbi5yZWxhdGlvbi5yZWxhdGlvbklkKSB7XG4gICAgICBpZiAoIXRoaXMuX2N1cnJlbnRSZWxhdGlvbiB8fCB0aGlzLl9jdXJyZW50UmVsYXRpb24ucmVsYXRpb25JZCAhPT0gdGhpcy5jdXJyZW50VHJhbnNhY3Rpb24ucmVsYXRpb24ucmVsYXRpb25JZCkge1xuICAgICAgICB0aGlzLl9jdXJyZW50UmVsYXRpb24gPSBhd2FpdCB0aGlzLmdldEN1c3RvbWVyRnVsT2JqZWN0QnlSZWxhdGlvbklkKHRoaXMuY3VycmVudFRyYW5zYWN0aW9uLnJlbGF0aW9uLnJlbGF0aW9uSWQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2dldFRyYW5zYWN0aW9uRGVsaXZlcnlPcHRpb25zKCk6IFNldFRyYW5zYWN0aW9uRGVsaXZlcnlPcHRpb25zUmVxdWVzdCB7XG4gICAgY29uc3QgdHJhbnNhY3Rpb25EZWxpdmVyeU9wdGlvbnNSZXF1ZXN0OiBTZXRUcmFuc2FjdGlvbkRlbGl2ZXJ5T3B0aW9uc1JlcXVlc3QgPSBuZXcgU2V0VHJhbnNhY3Rpb25EZWxpdmVyeU9wdGlvbnNSZXF1ZXN0ICgpO1xuICAgIHRyYW5zYWN0aW9uRGVsaXZlcnlPcHRpb25zUmVxdWVzdC5hbGxvd1BhcnRpYWxEZWxpdmVyeSA9IHRoaXMuX2N1cnJlbnRUcmFuc2FjdGlvbi5hbGxvd1BhcnRpYWxEZWxpdmVyeTtcbiAgICB0cmFuc2FjdGlvbkRlbGl2ZXJ5T3B0aW9uc1JlcXVlc3QuZGVsaXZlcnlEYXRlID0gdGhpcy5fY3VycmVudFRyYW5zYWN0aW9uLmRlbGl2ZXJ5RGF0ZTtcbiAgICB0cmFuc2FjdGlvbkRlbGl2ZXJ5T3B0aW9uc1JlcXVlc3QuZGVsaXZlcnlNZXRob2QgPSB0aGlzLl9jdXJyZW50VHJhbnNhY3Rpb24uZGVsaXZlcnlNZXRob2Q7XG4gICAgdHJhbnNhY3Rpb25EZWxpdmVyeU9wdGlvbnNSZXF1ZXN0LmRlbGl2ZXJ5T3B0aW9ucyA9IHRoaXMuX2N1cnJlbnRUcmFuc2FjdGlvbi5kZWxpdmVyeU9wdGlvbnM7XG4gICAgdHJhbnNhY3Rpb25EZWxpdmVyeU9wdGlvbnNSZXF1ZXN0Lm1hcmtldGluZ0NvZGUgPSB0aGlzLl9jdXJyZW50VHJhbnNhY3Rpb24ubWFya2V0aW5nQ29kZTtcbiAgICB0cmFuc2FjdGlvbkRlbGl2ZXJ5T3B0aW9uc1JlcXVlc3Qub3duUmVmZXJlbmNlID0gdGhpcy5fY3VycmVudFRyYW5zYWN0aW9uLm93blJlZmVyZW5jZTtcbiAgICB0cmFuc2FjdGlvbkRlbGl2ZXJ5T3B0aW9uc1JlcXVlc3QucHJlZmVycmVkRGVsaXZlcnlEYXRlID0gdGhpcy5fY3VycmVudFRyYW5zYWN0aW9uLnByZWZlcnJlZERlbGl2ZXJ5RGF0ZTtcbiAgICB0cmFuc2FjdGlvbkRlbGl2ZXJ5T3B0aW9uc1JlcXVlc3QucHJlZmVycmVkRGVsaXZlcnlEYXRlMiA9IHRoaXMuX2N1cnJlbnRUcmFuc2FjdGlvbi5wcmVmZXJyZWREZWxpdmVyeURhdGUyO1xuICAgIHRyYW5zYWN0aW9uRGVsaXZlcnlPcHRpb25zUmVxdWVzdC5yZWxhdGlvblJlZmVyZW5jZSA9IHRoaXMuX2N1cnJlbnRUcmFuc2FjdGlvbi5yZWxhdGlvblJlZmVyZW5jZTtcbiAgICB0cmFuc2FjdGlvbkRlbGl2ZXJ5T3B0aW9uc1JlcXVlc3QucmVtYXJrID0gdGhpcy5fY3VycmVudFRyYW5zYWN0aW9uLnJlbWFyaztcbiAgICB0cmFuc2FjdGlvbkRlbGl2ZXJ5T3B0aW9uc1JlcXVlc3QudHJhbnNhY3Rpb25VdWlkID0gdGhpcy5fY3VycmVudFRyYW5zYWN0aW9uLnV1aWQ7XG4gICAgdHJhbnNhY3Rpb25EZWxpdmVyeU9wdGlvbnNSZXF1ZXN0LnRyYW5zYWN0aW9uQWRkcmVzcyA9IHRoaXMuX2N1cnJlbnRUcmFuc2FjdGlvbi50cmFuc2FjdGlvbkFkZHJlc3MubmF3TnI7XG4gICAgdHJhbnNhY3Rpb25EZWxpdmVyeU9wdGlvbnNSZXF1ZXN0Lmludm9pY2VBZGRyZXNzID0gdGhpcy5fY3VycmVudFRyYW5zYWN0aW9uLmludm9pY2VBZGRyZXNzLm5hd05yO1xuICAgIHJldHVybiB0cmFuc2FjdGlvbkRlbGl2ZXJ5T3B0aW9uc1JlcXVlc3Q7XG4gIH1cblxuICBwcml2YXRlIF9yZW1lbWJlclJlc3BvbnNlKHJlbWVtYmVyOiBib29sZWFuLCByZXNwb25zZTogTGluZU9wZXJhdGlvblJlc3BvbnNlKTogdm9pZCB7XG4gICAgaWYgKHJlbWVtYmVyKSB7XG4gICAgICB0aGlzLl9yZW1lbWJlckN1cnJlbnRUcmFuc2FjdGlvbihyZXNwb25zZSk7XG4gICAgICB0aGlzLl9yZW1lbWJlckN1cnJlbnRUcmFuc2FjdGlvbkxpbmVTdGF0dXMocmVzcG9uc2UpO1xuICAgIH1cbiAgfVxufVxuIl19