genassist-chat-react 1.0.21 → 1.0.23

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.
@@ -48,7 +48,8 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
48
48
  import axios from "axios";
49
49
  import { createWebSocket, createWebSocketDiagnostic, } from "../utils/websocket";
50
50
  var ChatService = /** @class */ (function () {
51
- function ChatService(baseUrl, apiKey, metadata, tenant, language) {
51
+ function ChatService(baseUrl, apiKey, metadata, tenant, language, useWs) {
52
+ if (useWs === void 0) { useWs = true; }
52
53
  this.conversationId = null;
53
54
  this.conversationCreateTime = null; // Track conversation start time
54
55
  this.guestToken = null; // Guest token for authorization
@@ -69,6 +70,7 @@ var ChatService = /** @class */ (function () {
69
70
  this.metadata = metadata;
70
71
  this.tenant = tenant;
71
72
  this.language = language;
73
+ this.useWs = useWs;
72
74
  // Try to load a saved conversation for this apiKey from localStorage
73
75
  this.loadSavedConversation();
74
76
  }
@@ -245,6 +247,15 @@ var ChatService = /** @class */ (function () {
245
247
  // ignore
246
248
  }
247
249
  };
250
+ // Check if an error is a token expiration error
251
+ ChatService.prototype.isTokenExpiredError = function (error) {
252
+ return (error.response &&
253
+ error.response.status === 401 &&
254
+ error.response.data &&
255
+ (error.response.data.error === "Token has expired." ||
256
+ error.response.data.message === "Token has expired." ||
257
+ (typeof error.response.data === "string" && error.response.data.includes("Token has expired"))));
258
+ };
248
259
  /**
249
260
  * Reset the current conversation by clearing the ID and websocket
250
261
  */
@@ -370,10 +381,15 @@ var ChatService = /** @class */ (function () {
370
381
  this.welcomeDataHandler(this.welcomeData);
371
382
  }
372
383
  this.saveConversation();
373
- this.connectWebSocket();
384
+ if (this.useWs) {
385
+ this.connectWebSocket();
386
+ }
374
387
  return [2 /*return*/, response.data.conversation_id];
375
388
  case 4:
376
389
  error_1 = _a.sent();
390
+ if (this.isTokenExpiredError(error_1)) {
391
+ this.resetConversation();
392
+ }
377
393
  throw error_1;
378
394
  case 5: return [2 /*return*/];
379
395
  }
@@ -382,7 +398,7 @@ var ChatService = /** @class */ (function () {
382
398
  };
383
399
  ChatService.prototype.sendMessage = function (message, attachments, extraMetadata, reCaptchaToken) {
384
400
  return __awaiter(this, void 0, void 0, function () {
385
- var now, chatMessage, requestBody, mergedMetadata, error_2, errorMessage;
401
+ var now, chatMessage, requestBody, mergedMetadata, response, responseData, i, messageData, agentMessage, error_2, errorMessage;
386
402
  return __generator(this, function (_a) {
387
403
  switch (_a.label) {
388
404
  case 0:
@@ -419,10 +435,52 @@ var ChatService = /** @class */ (function () {
419
435
  headers: this.getHeaders(),
420
436
  })];
421
437
  case 2:
422
- _a.sent();
438
+ response = _a.sent();
439
+ // If not using WebSocket, try to retrieve the response message from the update conversation response
440
+ if (!this.useWs && this.messageHandler) {
441
+ try {
442
+ responseData = response.data;
443
+ if (responseData.messages && Array.isArray(responseData.messages)) {
444
+ // Look for the latest agent message in the response
445
+ for (i = responseData.messages.length - 1; i >= 0; i--) {
446
+ messageData = responseData.messages[i];
447
+ if (messageData.speaker === "agent" &&
448
+ messageData.text &&
449
+ messageData.create_time !== undefined &&
450
+ messageData.start_time !== undefined &&
451
+ messageData.end_time !== undefined) {
452
+ agentMessage = {
453
+ create_time: messageData.create_time,
454
+ start_time: this.conversationCreateTime
455
+ ? messageData.start_time - this.conversationCreateTime
456
+ : messageData.start_time,
457
+ end_time: this.conversationCreateTime
458
+ ? messageData.end_time - this.conversationCreateTime
459
+ : messageData.end_time,
460
+ speaker: "agent",
461
+ text: messageData.text,
462
+ message_id: messageData.message_id || messageData.id,
463
+ };
464
+ // Only process if this is a new message we haven't seen before
465
+ // We can't easily check here, so we'll let the handler manage duplicates
466
+ this.messageHandler(agentMessage);
467
+ break;
468
+ }
469
+ }
470
+ }
471
+ }
472
+ catch (parseError) {
473
+ console.error("Failed to parse update conversation response:", parseError);
474
+ }
475
+ }
423
476
  return [3 /*break*/, 4];
424
477
  case 3:
425
478
  error_2 = _a.sent();
479
+ // Check if this is a token expiration error
480
+ if (this.isTokenExpiredError(error_2)) {
481
+ this.resetConversation();
482
+ throw error_2;
483
+ }
426
484
  // Check if this is the agent inactive error
427
485
  if (error_2.response &&
428
486
  error_2.response.data &&
@@ -470,6 +528,9 @@ var ChatService = /** @class */ (function () {
470
528
  return [2 /*return*/, response.data];
471
529
  case 3:
472
530
  error_3 = _a.sent();
531
+ if (this.isTokenExpiredError(error_3)) {
532
+ this.resetConversation();
533
+ }
473
534
  throw error_3;
474
535
  case 4: return [2 /*return*/];
475
536
  }
@@ -478,6 +539,9 @@ var ChatService = /** @class */ (function () {
478
539
  };
479
540
  ChatService.prototype.connectWebSocket = function () {
480
541
  var _this = this;
542
+ if (!this.useWs) {
543
+ return;
544
+ }
481
545
  if (this.webSocket) {
482
546
  this.webSocket.close();
483
547
  }
@@ -634,6 +698,9 @@ var ChatService = /** @class */ (function () {
634
698
  return [3 /*break*/, 3];
635
699
  case 2:
636
700
  err_1 = _a.sent();
701
+ if (this.isTokenExpiredError(err_1)) {
702
+ this.resetConversation();
703
+ }
637
704
  return [3 /*break*/, 3];
638
705
  case 3: return [2 /*return*/];
639
706
  }
@@ -669,6 +736,9 @@ var ChatService = /** @class */ (function () {
669
736
  return [3 /*break*/, 4];
670
737
  case 3:
671
738
  error_4 = _c.sent();
739
+ if (this.isTokenExpiredError(error_4)) {
740
+ this.resetConversation();
741
+ }
672
742
  console.error('Feedback API call failed:', {
673
743
  message: error_4.message,
674
744
  response: (_a = error_4.response) === null || _a === void 0 ? void 0 : _a.data,
@@ -690,4 +760,4 @@ var ChatService = /** @class */ (function () {
690
760
  return ChatService;
691
761
  }());
692
762
  export { ChatService };
693
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdFNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VydmljZXMvY2hhdFNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFRMUIsT0FBTyxFQUNMLGVBQWUsRUFDZix5QkFBeUIsR0FDMUIsTUFBTSxvQkFBb0IsQ0FBQztBQUU1QjtJQXlCRSxxQkFDRSxPQUFlLEVBQ2YsTUFBYyxFQUNkLFFBQThCLEVBQzlCLE1BQWUsRUFDZixRQUFpQjtRQTFCWCxtQkFBYyxHQUFrQixJQUFJLENBQUM7UUFDckMsMkJBQXNCLEdBQWtCLElBQUksQ0FBQyxDQUFDLGdDQUFnQztRQUM5RSxlQUFVLEdBQWtCLElBQUksQ0FBQyxDQUFDLGdDQUFnQztRQUNsRSxnQkFBVyxHQUFZLEtBQUssQ0FBQztRQUM3QixjQUFTLEdBQXFCLElBQUksQ0FBQztRQUNuQyxtQkFBYyxHQUE0QyxJQUFJLENBQUM7UUFDL0Qsb0JBQWUsR0FBd0IsSUFBSSxDQUFDO1FBQzVDLHFCQUFnQixHQUF3QixJQUFJLENBQUM7UUFDN0MsMkJBQXNCLEdBRW5CLElBQUksQ0FBQztRQUNSLHVCQUFrQixHQUE4QyxJQUFJLENBQUM7UUFDckUsbUJBQWMsR0FBRyx3QkFBd0IsQ0FBQztRQUMxQyxvQkFBZSxHQUFhLEVBQUUsQ0FBQztRQUMvQixnQkFBVyxHQUFxQixFQUFFLENBQUM7UUFDbkMsbUJBQWMsR0FBd0IsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUNyRSxxQkFBZ0IsR0FBa0IsSUFBSSxDQUFDLENBQUMscUJBQXFCO1FBWW5FLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFD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OzRCQUN6QyxPQUFPLEVBQUUsT0FBSyxDQUFDLE9BQU87NEJBQ3RCLFFBQVEsRUFBRSxNQUFBLE9BQUssQ0FBQyxRQUFRLDBDQUFFLElBQUk7NEJBQzlCLE1BQU0sRUFBRSxNQUFBLE9BQUssQ0FBQyxRQUFRLDBDQUFFLE1BQU07eUJBQy9CLENBQUMsQ0FBQzt3QkFDSCxNQUFNLE9BQUssQ0FBQzs7Ozs7S0FFZjtJQUVELDRFQUE0RTtJQUNwRSw2Q0FBdUIsR0FBL0IsVUFBZ0MsT0FBb0I7UUFDbEQsSUFBSSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1lBQ2pDLE9BQU8sT0FBTyxDQUFDO1FBQ2pCLENBQUM7UUFFRCw2QkFDSyxPQUFPLEtBQ1YsVUFBVSxFQUFFLE9BQU8sQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixFQUM1RCxRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsc0JBQXNCLElBQ3hEO0lBQ0osQ0FBQztJQUNILGtCQUFDO0FBQUQsQ0FBQyxBQXJ0QkQsSUFxdEJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGF4aW9zIGZyb20gXCJheGlvc1wiO1xuaW1wb3J0IHtcbiAgQ2hhdE1lc3NhZ2UsXG4gIFN0YXJ0Q29udmVyc2F0aW9uUmVzcG9uc2UsXG4gIEF0dGFjaG1lbnQsXG4gIEFnZW50VGhpbmtpbmdDb25maWcsXG4gIEFnZW50V2VsY29tZURhdGEsXG59IGZyb20gXCIuLi90eXBlc1wiO1xuaW1wb3J0IHtcbiAgY3JlYXRlV2ViU29ja2V0LFxuICBjcmVhdGVXZWJTb2NrZXREaWFnbm9zdGljLFxufSBmcm9tIFwiLi4vdXRpbHMvd2Vic29ja2V0XCI7XG5cbmV4cG9ydCBjbGFzcyBDaGF0U2VydmljZSB7XG4gIHByaXZhdGUgYmFzZVVybDogc3RyaW5nO1xuICBwcml2YXRlIGFwaUtleTogc3RyaW5nO1xuICBwcml2YXRlIG1ldGFkYXRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIGNvbnZlcnNhdGlvbklkOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBjb252ZXJzYXRpb25DcmVhdGVUaW1lOiBudW1iZXIgfCBudWxsID0gbnVsbDsgLy8gVHJhY2sgY29udmVyc2F0aW9uIHN0YXJ0IHRpbWVcbiAgcHJpdmF0ZSBndWVzdFRva2VuOiBzdHJpbmcgfCBudWxsID0gbnVsbDsgLy8gR3Vlc3QgdG9rZW4gZm9yIGF1dGhvcml6YXRpb25cbiAgcHJpdmF0ZSBpc0ZpbmFsaXplZDogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIHdlYlNvY2tldDogV2ViU29ja2V0IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgbWVzc2FnZUhhbmRsZXI6ICgobWVzc2FnZTogQ2hhdE1lc3NhZ2UpID0+IHZvaWQpIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgdGFrZW92ZXJIYW5kbGVyOiAoKCkgPT4gdm9pZCkgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBmaW5hbGl6ZWRIYW5kbGVyOiAoKCkgPT4gdm9pZCkgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBjb25uZWN0aW9uU3RhdGVIYW5kbGVyOlxuICAgIHwgKChzdGF0ZTogXCJjb25uZWN0aW5nXCIgfCBcImNvbm5lY3RlZFwiIHwgXCJkaXNjb25uZWN0ZWRcIikgPT4gdm9pZClcbiAgICB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHdlbGNvbWVEYXRhSGFuZGxlcjogKChkYXRhOiBBZ2VudFdlbGNvbWVEYXRhKSA9PiB2b2lkKSB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHN0b3JhZ2VLZXlCYXNlID0gXCJnZW5hc3Npc3RfY29udmVyc2F0aW9uXCI7XG4gIHByaXZhdGUgcG9zc2libGVRdWVyaWVzOiBzdHJpbmdbXSA9IFtdO1xuICBwcml2YXRlIHdlbGNvbWVEYXRhOiBBZ2VudFdlbGNvbWVEYXRhID0ge307XG4gIHByaXZhdGUgdGhpbmtpbmdDb25maWc6IEFnZW50VGhpbmtpbmdDb25maWcgPSB7IHBocmFzZXM6IFtdLCBkZWxheU1zOiAxMDAwIH07XG4gIHByaXZhdGUgd2VsY29tZU9iamVjdFVybDogc3RyaW5nIHwgbnVsbCA9IG51bGw7IC8vIHRvIHJldm9rZSBvbiByZXNldFxuICBwcml2YXRlIHRlbmFudDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIGFnZW50SWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBsYW5ndWFnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGJhc2VVcmw6IHN0cmluZyxcbiAgICBhcGlLZXk6IHN0cmluZyxcbiAgICBtZXRhZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICAgdGVuYW50Pzogc3RyaW5nLFxuICAgIGxhbmd1YWdlPzogc3RyaW5nXG4gICkge1xuICAgIHRoaXMuYmFzZVVybCA9IGJhc2VVcmwuZW5kc1dpdGgoXCIvXCIpID8gYmFzZVVybC5zbGljZSgwLCAtMSkgOiBiYXNlVXJsO1xuICAgIHRoaXMuYXBpS2V5ID0gYXBpS2V5O1xuICAgIHRoaXMubWV0YWRhdGEgPSBtZXRhZGF0YTtcbiAgICB0aGlzLnRlbmFudCA9IHRlbmFudDtcbiAgICB0aGlzLmxhbmd1YWdlID0gbGFuZ3VhZ2U7XG4gICAgLy8gVHJ5IHRvIGxvYWQgYSBzYXZlZCBjb252ZXJzYXRpb24gZm9yIHRoaXMgYXBpS2V5IGZyb20gbG9jYWxTdG9yYWdlXG4gICAgdGhpcy5sb2FkU2F2ZWRDb252ZXJzYXRpb24oKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U3RvcmFnZUtleSgpOiBzdHJpbmcge1xuICAgIC8vIFBvaW50ZXIgdG8gY3VycmVudCBjb252ZXJzYXRpb24gbWV0YWRhdGEgZm9yIHRoaXMgYXBpS2V5XG4gICAgcmV0dXJuIGAke3RoaXMuc3RvcmFnZUtleUJhc2V9OiR7dGhpcy5hcGlLZXl9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGxhbmd1YWdlIGZvciBBY2NlcHQtTGFuZ3VhZ2UgaGVhZGVyXG4gICAqL1xuICBzZXRMYW5ndWFnZShsYW5ndWFnZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgdGhpcy5sYW5ndWFnZSA9IGxhbmd1YWdlO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBtZXRhZGF0YSAodXNlZnVsIGZvciB1cGRhdGluZyBsYW5ndWFnZSBvciBvdGhlciBkeW5hbWljIG1ldGFkYXRhKVxuICAgKi9cbiAgc2V0TWV0YWRhdGEobWV0YWRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICB0aGlzLm1ldGFkYXRhID0gbWV0YWRhdGE7XG4gIH1cblxuICAvKipcbiAgICogRm9ybWF0IGxhbmd1YWdlIGNvZGUgZm9yIEFjY2VwdC1MYW5ndWFnZSBoZWFkZXJcbiAgICogQ29udmVydHMgc2ltcGxlIGxhbmd1YWdlIGNvZGVzIChlLmcuLCBcImVuXCIsIFwiZXNcIikgdG8gcHJvcGVyIGZvcm1hdCAoZS5nLiwgXCJlbi1VUyxlbjtxPTAuOVwiKVxuICAgKiBGb2xsb3dzIEhUVFAgQWNjZXB0LUxhbmd1YWdlIGhlYWRlciBzdGFuZGFyZHNcbiAgICovXG4gIHByaXZhdGUgZm9ybWF0QWNjZXB0TGFuZ3VhZ2UobGFuZ0NvZGU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCFsYW5nQ29kZSkgcmV0dXJuICcnO1xuICAgIFxuICAgIC8vIE5vcm1hbGl6ZSBsYW5ndWFnZSBjb2RlIChsb3dlcmNhc2UsIGhhbmRsZSBjb21tb24gZm9ybWF0cylcbiAgICBjb25zdCBub3JtYWxpemVkID0gbGFuZ0NvZGUudG9Mb3dlckNhc2UoKS50cmltKCk7XG4gICAgXG4gICAgLy8gTWFwIGNvbW1vbiBsYW5ndWFnZSBjb2RlcyB0byB0aGVpciBmdWxsIGxvY2FsZSBmb3JtYXRcbiAgICBjb25zdCBsYW5ndWFnZU1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAgICdlbic6ICdlbi1VUycsXG4gICAgICAnZXMnOiAnZXMtRVMnLFxuICAgICAgJ2ZyJzogJ2ZyLUZSJyxcbiAgICAgICdkZSc6ICdkZS1ERScsXG4gICAgICAnaXQnOiAnaXQtSVQnLFxuICAgICAgJ3B0JzogJ3B0LVBUJyxcbiAgICAgICdhcic6ICdhci1TQScsXG4gICAgICAnc3EnOiAnc3EtQUwnLFxuICAgIH07XG4gICAgXG4gICAgLy8gQ2hlY2sgaWYgdGhlIGNvZGUgYWxyZWFkeSBoYXMgYSByZWdpb24gKGUuZy4sIFwiZW4tVVNcIiwgXCJlcy1FU1wiKVxuICAgIGNvbnN0IGhhc1JlZ2lvbiA9IG5vcm1hbGl6ZWQuaW5jbHVkZXMoJy0nKTtcbiAgICBcbiAgICAvLyBHZXQgdGhlIGZ1bGwgbG9jYWxlIG9yIHVzZSB0aGUgcHJvdmlkZWQgY29kZSBpZiBpdCBhbHJlYWR5IGhhcyBhIHJlZ2lvblxuICAgIGNvbnN0IGZ1bGxMb2NhbGUgPSBoYXNSZWdpb24gPyBub3JtYWxpemVkIDogKGxhbmd1YWdlTWFwW25vcm1hbGl6ZWRdIHx8IG5vcm1hbGl6ZWQpO1xuICAgIFxuICAgIC8vIEV4dHJhY3QgYmFzZSBsYW5ndWFnZSBmcm9tIHRoZSBmdWxsIGxvY2FsZSAoZS5nLiwgXCJlblwiIGZyb20gXCJlbi1VU1wiKVxuICAgIGNvbnN0IGZ1bGxCYXNlTGFuZyA9IGZ1bGxMb2NhbGUuc3BsaXQoJy0nKVswXS50b0xvd2VyQ2FzZSgpO1xuICAgIFxuICAgIC8vIEJ1aWxkIEFjY2VwdC1MYW5ndWFnZSBoZWFkZXI6IHByaW1hcnkgbG9jYWxlLCBiYXNlIGxhbmd1YWdlIHdpdGggcXVhbGl0eSwgRW5nbGlzaCBmYWxsYmFja1xuICAgIC8vIEZvcm1hdDogXCJsb2NhbGUsYmFzZS1sYW5nO3E9MC45LGVuO3E9MC44XCJcbiAgICBjb25zdCBwYXJ0czogc3RyaW5nW10gPSBbZnVsbExvY2FsZV07XG4gICAgXG4gICAgLy8gZmFsbGJhY2tcbiAgICBwYXJ0cy5wdXNoKGAke2Z1bGxCYXNlTGFuZ307cT0wLjlgKTtcbiAgICBcbiAgICAvLyBBZGQgRW5nbGlzaCBhcyBmYWxsYmFjayBpZiBub3QgYWxyZWFkeSB0aGUgcHJpbWFyeSBsYW5ndWFnZVxuICAgIGlmIChmdWxsQmFzZUxhbmcgIT09ICdlbicpIHtcbiAgICAgIHBhcnRzLnB1c2goJ2VuO3E9MC44Jyk7XG4gICAgfVxuICAgIFxuICAgIHJldHVybiBwYXJ0cy5qb2luKCcsICcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBoZWFkZXJzIGZvciBBUEkgcmVxdWVzdHMsIGluY2x1ZGluZyBhdXRob3JpemF0aW9uIGlmIGd1ZXN0IHRva2VuIGlzIGF2YWlsYWJsZVxuICAgKi9cbiAgcHJpdmF0ZSBnZXRIZWFkZXJzKGNvbnRlbnRUeXBlOiBzdHJpbmcgPSBcImFwcGxpY2F0aW9uL2pzb25cIik6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICAgIGNvbnN0IGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICBcIngtYXBpLWtleVwiOiB0aGlzLmFwaUtleSxcbiAgICAgIFwiQ29udGVudC1UeXBlXCI6IGNvbnRlbnRUeXBlLFxuICAgIH07XG5cbiAgICAvLyBBZGQgdGVuYW50IGhlYWRlciBpZiBwcm92aWRlZFxuICAgIGlmICh0aGlzLnRlbmFudCkge1xuICAgICAgaGVhZGVyc1tcIngtdGVuYW50LWlkXCJdID0gdGhpcy50ZW5hbnQ7XG4gICAgfVxuXG4gICAgLy8gQWRkIGF1dGhvcml6YXRpb24gaGVhZGVyIGlmIGd1ZXN0IHRva2VuIGlzIGF2YWlsYWJsZVxuICAgIGlmICh0aGlzLmd1ZXN0VG9rZW4pIHtcbiAgICAgIGhlYWRlcnNbXCJBdXRob3JpemF0aW9uXCJdID0gYEJlYXJlciAke3RoaXMuZ3Vlc3RUb2tlbn1gO1xuICAgIH1cblxuICAgIC8vIEFkZCBBY2NlcHQtTGFuZ3VhZ2UgaGVhZGVyIGlmIGxhbmd1YWdlIGlzIHNldFxuICAgIGlmICh0aGlzLmxhbmd1YWdlKSB7XG4gICAgICBjb25zdCBhY2NlcHRMYW5ndWFnZSA9IHRoaXMuZm9ybWF0QWNjZXB0TGFuZ3VhZ2UodGhpcy5sYW5ndWFnZSk7XG4gICAgICBpZiAoYWNjZXB0TGFuZ3VhZ2UpIHtcbiAgICAgICAgaGVhZGVyc1tcIkFjY2VwdC1MYW5ndWFnZVwiXSA9IGFjY2VwdExhbmd1YWdlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBoZWFkZXJzO1xuICB9XG5cbiAgc2V0TWVzc2FnZUhhbmRsZXIoaGFuZGxlcjogKG1lc3NhZ2U6IENoYXRNZXNzYWdlKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5tZXNzYWdlSGFuZGxlciA9IGhhbmRsZXI7XG4gIH1cblxuICBzZXRUYWtlb3ZlckhhbmRsZXIoaGFuZGxlcjogKCkgPT4gdm9pZCkge1xuICAgIHRoaXMudGFrZW92ZXJIYW5kbGVyID0gaGFuZGxlcjtcbiAgfVxuXG4gIHNldEZpbmFsaXplZEhhbmRsZXIoaGFuZGxlcjogKCkgPT4gdm9pZCkge1xuICAgIHRoaXMuZmluYWxpemVkSGFuZGxlciA9IGhhbmRsZXI7XG4gIH1cblxuICBzZXRDb25uZWN0aW9uU3RhdGVIYW5kbGVyKFxuICAgIGhhbmRsZXI6IChzdGF0ZTogXCJjb25uZWN0aW5nXCIgfCBcImNvbm5lY3RlZFwiIHwgXCJkaXNjb25uZWN0ZWRcIikgPT4gdm9pZFxuICApIHtcbiAgICB0aGlzLmNvbm5lY3Rpb25TdGF0ZUhhbmRsZXIgPSBoYW5kbGVyO1xuICB9XG5cbiAgc2V0V2VsY29tZURhdGFIYW5kbGVyKGhhbmRsZXI6ICgoZGF0YTogQWdlbnRXZWxjb21lRGF0YSkgPT4gdm9pZCkgfCBudWxsKSB7XG4gICAgdGhpcy53ZWxjb21lRGF0YUhhbmRsZXIgPSBoYW5kbGVyO1xuICB9XG5cbiAgZ2V0UG9zc2libGVRdWVyaWVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5wb3NzaWJsZVF1ZXJpZXM7XG4gIH1cblxuICBnZXRXZWxjb21lRGF0YSgpOiBBZ2VudFdlbGNvbWVEYXRhIHtcbiAgICByZXR1cm4gdGhpcy53ZWxjb21lRGF0YTtcbiAgfVxuXG4gIGdldFRoaW5raW5nQ29uZmlnKCk6IEFnZW50VGhpbmtpbmdDb25maWcge1xuICAgIHJldHVybiB0aGlzLnRoaW5raW5nQ29uZmlnO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWQgYSBzYXZlZCBjb252ZXJzYXRpb24gSUQgZnJvbSBsb2NhbFN0b3JhZ2VcbiAgICovXG4gIHByaXZhdGUgbG9hZFNhdmVkQ29udmVyc2F0aW9uKCk6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICBsZXQgc2F2ZWRDb252ZXJzYXRpb24gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLmdldFN0b3JhZ2VLZXkoKSk7XG4gICAgICAvLyBCYWNrd2FyZC1jb21wYXQ6IGNoZWNrIG9sZCB1bnNjb3BlZCBrZXkgaWYgc2NvcGVkIG9uZSBtaXNzaW5nXG4gICAgICBpZiAoIXNhdmVkQ29udmVyc2F0aW9uKSB7XG4gICAgICAgIHNhdmVkQ29udmVyc2F0aW9uID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5zdG9yYWdlS2V5QmFzZSk7XG4gICAgICB9XG4gICAgICBpZiAoc2F2ZWRDb252ZXJzYXRpb24pIHtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIGNvbnZlcnNhdGlvbklkLFxuICAgICAgICAgIGNyZWF0ZVRpbWUsXG4gICAgICAgICAgaXNGaW5hbGl6ZWQsXG4gICAgICAgICAgcG9zc2libGVRdWVyaWVzLFxuICAgICAgICAgIHdlbGNvbWVEYXRhLFxuICAgICAgICAgIHRoaW5raW5nQ29uZmlnLFxuICAgICAgICAgIGFnZW50SWQsXG4gICAgICAgICAgZ3Vlc3RUb2tlbixcbiAgICAgICAgfSA9IEpTT04ucGFyc2Uoc2F2ZWRDb252ZXJzYXRpb24pO1xuICAgICAgICB0aGlzLmNvbnZlcnNhdGlvbklkID0gY29udmVyc2F0aW9uSWQ7XG4gICAgICAgIHRoaXMuY29udmVyc2F0aW9uQ3JlYXRlVGltZSA9IGNyZWF0ZVRpbWU7XG4gICAgICAgIHRoaXMuaXNGaW5hbGl6ZWQgPSBpc0ZpbmFsaXplZCB8fCBmYWxzZTtcbiAgICAgICAgdGhpcy5ndWVzdFRva2VuID0gZ3Vlc3RUb2tlbiB8fCBudWxsO1xuICAgICAgICB0aGlzLnBvc3NpYmxlUXVlcmllcyA9IEFycmF5LmlzQXJyYXkocG9zc2libGVRdWVyaWVzKVxuICAgICAgICAgID8gcG9zc2libGVRdWVyaWVzXG4gICAgICAgICAgOiBbXTtcbiAgICAgICAgdGhpcy53ZWxjb21lRGF0YSA9IHdlbGNvbWVEYXRhIHx8IHt9O1xuICAgICAgICBpZiAoIXRoaXMud2VsY29tZURhdGEucG9zc2libGVRdWVyaWVzKSB7XG4gICAgICAgICAgdGhpcy53ZWxjb21lRGF0YS5wb3NzaWJsZVF1ZXJpZXMgPSB0aGlzLnBvc3NpYmxlUXVlcmllcztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRoaW5raW5nQ29uZmlnID0ge1xuICAgICAgICAgIHBocmFzZXM6ICh0aGlua2luZ0NvbmZpZyAmJiB0aGlua2luZ0NvbmZpZy5waHJhc2VzKSB8fCBbXSxcbiAgICAgICAgICBkZWxheU1zOlxuICAgICAgICAgICAgdGhpbmtpbmdDb25maWcgJiYgdHlwZW9mIHRoaW5raW5nQ29uZmlnLmRlbGF5TXMgPT09IFwibnVtYmVyXCJcbiAgICAgICAgICAgICAgPyB0aGlua2luZ0NvbmZpZy5kZWxheU1zXG4gICAgICAgICAgICAgIDogMTAwMCxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5hZ2VudElkID0gYWdlbnRJZDtcbiAgICAgICAgaWYgKCF0aGlzLndlbGNvbWVEYXRhLmltYWdlVXJsICYmIHRoaXMuYWdlbnRJZCkge1xuICAgICAgICAgIHRoaXMuZmV0Y2hXZWxjb21lSW1hZ2UodGhpcy5hZ2VudElkKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy53ZWxjb21lRGF0YUhhbmRsZXIpIHtcbiAgICAgICAgICB0aGlzLndlbGNvbWVEYXRhSGFuZGxlcih0aGlzLndlbGNvbWVEYXRhKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBpZ25vcmVcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2F2ZSB0aGUgY3VycmVudCBjb252ZXJzYXRpb24gSUQgdG8gbG9jYWxTdG9yYWdlXG4gICAqL1xuICBwcml2YXRlIHNhdmVDb252ZXJzYXRpb24oKTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICh0aGlzLmNvbnZlcnNhdGlvbklkICYmIHRoaXMuY29udmVyc2F0aW9uQ3JlYXRlVGltZSkge1xuICAgICAgICBjb25zdCBjb252ZXJzYXRpb25EYXRhID0ge1xuICAgICAgICAgIGNvbnZlcnNhdGlvbklkOiB0aGlzLmNvbnZlcnNhdGlvbklkLFxuICAgICAgICAgIGNyZWF0ZVRpbWU6IHRoaXMuY29udmVyc2F0aW9uQ3JlYXRlVGltZSxcbiAgICAgICAgICBpc0ZpbmFsaXplZDogdGhpcy5pc0ZpbmFsaXplZCxcbiAgICAgICAgICBwb3NzaWJsZVF1ZXJpZXM6IHRoaXMucG9zc2libGVRdWVyaWVzLFxuICAgICAgICAgIHdlbGNvbWVEYXRhOiB7XG4gICAgICAgICAgICAuLi50aGlzLndlbGNvbWVEYXRhLFxuICAgICAgICAgICAgaW1hZ2VVcmw6XG4gICAgICAgICAgICAgIHRoaXMud2VsY29tZU9iamVjdFVybCAmJlxuICAgICAgICAgICAgICB0aGlzLndlbGNvbWVEYXRhLmltYWdlVXJsICYmXG4gICAgICAgICAgICAgIHRoaXMud2VsY29tZURhdGEuaW1hZ2VVcmwuc3RhcnRzV2l0aChcImJsb2I6XCIpXG4gICAgICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICAgICAgOiB0aGlzLndlbGNvbWVEYXRhLmltYWdlVXJsIHx8IG51bGwsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB0aGlua2luZ0NvbmZpZzogdGhpcy50aGlua2luZ0NvbmZpZyxcbiAgICAgICAgICBhZ2VudElkOiB0aGlzLmFnZW50SWQsXG4gICAgICAgICAgZ3Vlc3RUb2tlbjogdGhpcy5ndWVzdFRva2VuLFxuICAgICAgICB9O1xuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLmdldFN0b3JhZ2VLZXkoKSwgSlNPTi5zdHJpbmdpZnkoY29udmVyc2F0aW9uRGF0YSkpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBpZ25vcmVcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVzZXQgdGhlIGN1cnJlbnQgY29udmVyc2F0aW9uIGJ5IGNsZWFyaW5nIHRoZSBJRCBhbmQgd2Vic29ja2V0XG4gICAqL1xuICByZXNldENvbnZlcnNhdGlvbigpOiB2b2lkIHtcbiAgICAvLyBDbG9zZSB0aGUgY3VycmVudCB3ZWJzb2NrZXQgY29ubmVjdGlvbiBpZiBpdCBleGlzdHNcbiAgICBpZiAodGhpcy53ZWJTb2NrZXQpIHtcbiAgICAgIHRoaXMud2ViU29ja2V0LmNsb3NlKCk7XG4gICAgICB0aGlzLndlYlNvY2tldCA9IG51bGw7XG4gICAgfVxuXG4gICAgLy8gQ2xlYXIgdGhlIGNvbnZlcnNhdGlvbiBJRFxuICAgIHRoaXMuY29udmVyc2F0aW9uSWQgPSBudWxsO1xuICAgIHRoaXMuY29udmVyc2F0aW9uQ3JlYXRlVGltZSA9IG51bGw7XG4gICAgdGhpcy5ndWVzdFRva2VuID0gbnVsbDtcbiAgICB0aGlzLmlzRmluYWxpemVkID0gZmFsc2U7XG5cbiAgICAvLyBDbGVhciBwb3NzaWJsZSBxdWVyaWVzXG4gICAgdGhpcy5wb3NzaWJsZVF1ZXJpZXMgPSBbXTtcbiAgICB0aGlzLndlbGNvbWVEYXRhID0ge307XG4gICAgdGhpcy50aGlua2luZ0NvbmZpZyA9IHsgcGhyYXNlczogW10sIGRlbGF5TXM6IDEwMDAgfTtcbiAgICBpZiAodGhpcy53ZWxjb21lT2JqZWN0VXJsKSB7XG4gICAgICB0cnkge1xuICAgICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKHRoaXMud2VsY29tZU9iamVjdFVybCk7XG4gICAgICB9IGNhdGNoIHt9XG4gICAgICB0aGlzLndlbGNvbWVPYmplY3RVcmwgPSBudWxsO1xuICAgIH1cbiAgICB0aGlzLmFnZW50SWQgPSB1bmRlZmluZWQ7XG5cbiAgICAvLyBSZW1vdmUgZnJvbSBsb2NhbCBzdG9yYWdlXG4gICAgdHJ5IHtcbiAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuZ2V0U3RvcmFnZUtleSgpKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gaWdub3JlXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHRoZXJlJ3MgYSBjdXJyZW50IGNvbnZlcnNhdGlvblxuICAgKi9cbiAgaGFzQWN0aXZlQ29udmVyc2F0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMuY29udmVyc2F0aW9uSWQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBjdXJyZW50IGNvbnZlcnNhdGlvbiBJRFxuICAgKi9cbiAgZ2V0Q29udmVyc2F0aW9uSWQoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuY29udmVyc2F0aW9uSWQ7XG4gIH1cblxuICBpc0NvbnZlcnNhdGlvbkZpbmFsaXplZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc0ZpbmFsaXplZDtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0Q29udmVyc2F0aW9uKHJlQ2FwdGNoYVRva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXF1ZXN0Qm9keTogYW55ID0ge1xuICAgICAgICBtZXNzYWdlczogW10sXG4gICAgICAgIHJlY29yZGVkX2F0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICAgIGRhdGFfc291cmNlX2lkOiBcIjAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMFwiLFxuICAgICAgICByZWNhcHRjaGFfdG9rZW46IHJlQ2FwdGNoYVRva2VuLFxuICAgICAgfTtcblxuICAgICAgaWYgKHRoaXMubWV0YWRhdGEpIHtcbiAgICAgICAgcmVxdWVzdEJvZHkubWV0YWRhdGEgPSB0aGlzLm1ldGFkYXRhO1xuICAgICAgfVxuXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zLnBvc3Q8U3RhcnRDb252ZXJzYXRpb25SZXNwb25zZT4oXG4gICAgICAgIGAke3RoaXMuYmFzZVVybH0vYXBpL2NvbnZlcnNhdGlvbnMvaW4tcHJvZ3Jlc3Mvc3RhcnRgLFxuICAgICAgICByZXF1ZXN0Qm9keSxcbiAgICAgICAge1xuICAgICAgICAgIGhlYWRlcnM6IHRoaXMuZ2V0SGVhZGVycygpLFxuICAgICAgICB9XG4gICAgICApO1xuXG4gICAgICB0aGlzLmNvbnZlcnNhdGlvbklkID0gcmVzcG9uc2UuZGF0YS5jb252ZXJzYXRpb25faWQ7XG4gICAgICAvLyBTdG9yZSBjb252ZXJzYXRpb24gY3JlYXRlIHRpbWUgKHVzZSBmcm9tIHJlc3BvbnNlIGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIGN1cnJlbnQgdGltZSlcbiAgICAgIHRoaXMuY29udmVyc2F0aW9uQ3JlYXRlVGltZSA9IHJlc3BvbnNlLmRhdGEuY3JlYXRlX3RpbWVcbiAgICAgICAgPyByZXNwb25zZS5kYXRhLmNyZWF0ZV90aW1lIC8gMTAwMFxuICAgICAgICA6IERhdGUubm93KCkgLyAxMDAwO1xuICAgICAgLy8gU3RvcmUgZ3Vlc3QgdG9rZW4gaWYgcHJvdmlkZWRcbiAgICAgIHRoaXMuZ3Vlc3RUb2tlbiA9IHJlc3BvbnNlLmRhdGEuZ3Vlc3RfdG9rZW4gfHwgbnVsbDtcbiAgICAgIHRoaXMuaXNGaW5hbGl6ZWQgPSBmYWxzZTtcblxuICAgICAgLy8gU3RvcmUgcG9zc2libGUgcXVlcmllcyBpZiBhdmFpbGFibGVcbiAgICAgIGlmIChcbiAgICAgICAgcmVzcG9uc2UuZGF0YS5hZ2VudF9wb3NzaWJsZV9xdWVyaWVzICYmXG4gICAgICAgIHJlc3BvbnNlLmRhdGEuYWdlbnRfcG9zc2libGVfcXVlcmllcy5sZW5ndGggPiAwXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5wb3NzaWJsZVF1ZXJpZXMgPSByZXNwb25zZS5kYXRhLmFnZW50X3Bvc3NpYmxlX3F1ZXJpZXMuZmlsdGVyKFxuICAgICAgICAgIChxdWVyeSkgPT4gdHlwZW9mIHF1ZXJ5ID09PSBcInN0cmluZ1wiICYmIHF1ZXJ5LnRyaW0oKS5sZW5ndGggPiAwXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGFueURhdGE6IGFueSA9IHJlc3BvbnNlLmRhdGEgYXMgYW55O1xuICAgICAgY29uc3QgYWdlbnRJZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gYW55RGF0YS5hZ2VudF9pZDtcbiAgICAgIHRoaXMuYWdlbnRJZCA9IGFnZW50SWQ7XG4gICAgICBjb25zdCB3ZWxjb21lVGl0bGU6IHN0cmluZyB8IHVuZGVmaW5lZCA9IGFueURhdGEuYWdlbnRfd2VsY29tZV90aXRsZTtcbiAgICAgIGNvbnN0IHdlbGNvbWVJbWFnZVVybDogc3RyaW5nIHwgdW5kZWZpbmVkID1cbiAgICAgICAgYW55RGF0YS5hZ2VudF93ZWxjb21lX2ltYWdlX3VybDtcbiAgICAgIGNvbnN0IHRoaW5raW5nUGhyYXNlczogc3RyaW5nW10gfCB1bmRlZmluZWQgPVxuICAgICAgICBhbnlEYXRhLmFnZW50X3RoaW5raW5nX3BocmFzZXM7XG4gICAgICBjb25zdCB0aGlua2luZ0RlbGF5U2VjOiBudW1iZXIgfCB1bmRlZmluZWQgPVxuICAgICAgICBhbnlEYXRhLmFnZW50X3RoaW5raW5nX3BocmFzZV9kZWxheTtcblxuICAgICAgdGhpcy53ZWxjb21lRGF0YSA9IHtcbiAgICAgICAgdGl0bGU6IHdlbGNvbWVUaXRsZSB8fCBudWxsLFxuICAgICAgICBtZXNzYWdlOiBudWxsLFxuICAgICAgICBpbWFnZVVybDogd2VsY29tZUltYWdlVXJsIHx8IG51bGwsXG4gICAgICAgIHBvc3NpYmxlUXVlcmllczogdGhpcy5wb3NzaWJsZVF1ZXJpZXMsXG4gICAgICB9O1xuXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlua2luZ1BocmFzZXMpICYmIHRoaW5raW5nUGhyYXNlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMudGhpbmtpbmdDb25maWcucGhyYXNlcyA9IHRoaW5raW5nUGhyYXNlcztcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgdGhpbmtpbmdEZWxheVNlYyA9PT0gXCJudW1iZXJcIiAmJiB0aGlua2luZ0RlbGF5U2VjID49IDApIHtcbiAgICAgICAgdGhpcy50aGlua2luZ0NvbmZpZy5kZWxheU1zID0gTWF0aC5tYXgoXG4gICAgICAgICAgMjUwLFxuICAgICAgICAgIE1hdGgucm91bmQodGhpbmtpbmdEZWxheVNlYyAqIDEwMDApXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGlmICghdGhpcy53ZWxjb21lRGF0YS5pbWFnZVVybCAmJiBhZ2VudElkKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuZmV0Y2hXZWxjb21lSW1hZ2UoYWdlbnRJZCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFByb2Nlc3MgYWdlbnQgd2VsY29tZSBtZXNzYWdlIGlmIGF2YWlsYWJsZVxuICAgICAgaWYgKHJlc3BvbnNlLmRhdGEuYWdlbnRfd2VsY29tZV9tZXNzYWdlICYmIHRoaXMubWVzc2FnZUhhbmRsZXIpIHtcbiAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKSAvIDEwMDA7XG4gICAgICAgIGNvbnN0IHdlbGNvbWVNZXNzYWdlOiBDaGF0TWVzc2FnZSA9IHtcbiAgICAgICAgICBjcmVhdGVfdGltZTogbm93LFxuICAgICAgICAgIHN0YXJ0X3RpbWU6IG5vdyAtIHRoaXMuY29udmVyc2F0aW9uQ3JlYXRlVGltZSwgLy8gUmVsYXRpdmUgdG8gY29udmVyc2F0aW9uIHN0YXJ0XG4gICAgICAgICAgZW5kX3RpbWU6IG5vdyAtIHRoaXMuY29udmVyc2F0aW9uQ3JlYXRlVGltZSArIDAuMDEsIC8vIFJlbGF0aXZlIHRvIGNvbnZlcnNhdGlvbiBzdGFydFxuICAgICAgICAgIHNwZWFrZXI6IFwiYWdlbnRcIixcbiAgICAgICAgICB0ZXh0OiByZXNwb25zZS5kYXRhLmFnZW50X3dlbGNvbWVfbWVzc2FnZSxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy53ZWxjb21lRGF0YS5tZXNzYWdlID0gcmVzcG9uc2UuZGF0YS5hZ2VudF93ZWxjb21lX21lc3NhZ2U7XG4gICAgICAgIHRoaXMubWVzc2FnZUhhbmRsZXIod2VsY29tZU1lc3NhZ2UpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy53ZWxjb21lRGF0YUhhbmRsZXIpIHtcbiAgICAgICAgdGhpcy53ZWxjb21lRGF0YUhhbmRsZXIodGhpcy53ZWxjb21lRGF0YSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc2F2ZUNvbnZlcnNhdGlvbigpO1xuICAgICAgdGhpcy5jb25uZWN0V2ViU29ja2V0KCk7XG4gICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YS5jb252ZXJzYXRpb25faWQ7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNlbmRNZXNzYWdlKFxuICAgIG1lc3NhZ2U6IHN0cmluZyxcbiAgICBhdHRhY2htZW50cz86IEF0dGFjaG1lbnRbXSxcbiAgICBleHRyYU1ldGFkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PixcbiAgICByZUNhcHRjaGFUb2tlbj86IHN0cmluZ1xuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuY29udmVyc2F0aW9uSWQgfHwgIXRoaXMuY29udmVyc2F0aW9uQ3JlYXRlVGltZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ29udmVyc2F0aW9uIG5vdCBzdGFydGVkXCIpO1xuICAgIH1cblxuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCkgLyAxMDAwO1xuICAgIGNvbnN0IGNoYXRNZXNzYWdlOiBDaGF0TWVzc2FnZSA9IHtcbiAgICAgIGNyZWF0ZV90aW1lOiBub3csXG4gICAgICBzdGFydF90aW1lOiBub3cgLSB0aGlzLmNvbnZlcnNhdGlvbkNyZWF0ZVRpbWUsIC8vIFJlbGF0aXZlIHRvIGNvbnZlcnNhdGlvbiBzdGFydFxuICAgICAgZW5kX3RpbWU6IG5vdyAtIHRoaXMuY29udmVyc2F0aW9uQ3JlYXRlVGltZSArIDAuMDEsIC8vIFJlbGF0aXZlIHRvIGNvbnZlcnNhdGlvbiBzdGFydFxuICAgICAgc3BlYWtlcjogXCJjdXN0b21lclwiLFxuICAgICAgdGV4dDogbWVzc2FnZSxcbiAgICAgIGF0dGFjaG1lbnRzOiBhdHRhY2htZW50cyxcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMubWVzc2FnZUhhbmRsZXIpIHtcbiAgICAgIHRoaXMubWVzc2FnZUhhbmRsZXIoY2hhdE1lc3NhZ2UpO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXF1ZXN0Qm9keTogYW55ID0ge1xuICAgICAgICBtZXNzYWdlczogW2NoYXRNZXNzYWdlXSxcbiAgICAgICAgcmVjb3JkZWRfYXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIH07XG5cbiAgICAgIGlmIChyZUNhcHRjaGFUb2tlbikge1xuICAgICAgICByZXF1ZXN0Qm9keS5yZWNhcHRjaGFfdG9rZW4gPSByZUNhcHRjaGFUb2tlbjtcbiAgICAgIH1cblxuICAgICAgLy8gSW5jbHVkZSBtZXRhZGF0YVxuICAgICAgY29uc3QgbWVyZ2VkTWV0YWRhdGEgPSB7XG4gICAgICAgIC4uLih0aGlzLm1ldGFkYXRhIHx8IHt9KSxcbiAgICAgICAgLi4uKGV4dHJhTWV0YWRhdGEgfHwge30pLFxuICAgICAgfTtcbiAgICAgIGlmIChPYmplY3Qua2V5cyhtZXJnZWRNZXRhZGF0YSkubGVuZ3RoID4gMCkge1xuICAgICAgICByZXF1ZXN0Qm9keS5tZXRhZGF0YSA9IG1lcmdlZE1ldGFkYXRhO1xuICAgICAgfVxuXG4gICAgICBhd2FpdCBheGlvcy5wYXRjaChcbiAgICAgICAgYCR7dGhpcy5iYXNlVXJsfS9hcGkvY29udmVyc2F0aW9ucy9pbi1wcm9ncmVzcy91cGRhdGUvJHt0aGlzLmNvbnZlcnNhdGlvbklkfWAsXG4gICAgICAgIHJlcXVlc3RCb2R5LFxuICAgICAgICB7XG4gICAgICAgICAgaGVhZGVyczogdGhpcy5nZXRIZWFkZXJzKCksXG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBpcyB0aGUgYWdlbnQgaW5hY3RpdmUgZXJyb3JcbiAgICAgIGlmIChcbiAgICAgICAgZXJyb3IucmVzcG9uc2UgJiZcbiAgICAgICAgZXJyb3IucmVzcG9uc2UuZGF0YSAmJlxuICAgICAgICBlcnJvci5yZXNwb25zZS5kYXRhLmVycm9yX2tleSA9PT0gXCJBR0VOVF9JTkFDVElWRVwiXG4gICAgICApIHtcbiAgICAgICAgLy8gQ3JlYXRlIGEgY3VzdG9tIG1lc3NhZ2UgZm9yIHRoZSBhZ2VudCBpbmFjdGl2ZSBlcnJvclxuICAgICAgICBpZiAodGhpcy5tZXNzYWdlSGFuZGxlcikge1xuICAgICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZTogQ2hhdE1lc3NhZ2UgPSB7XG4gICAgICAgICAgICBjcmVhdGVfdGltZTogbm93LFxuICAgICAgICAgICAgc3RhcnRfdGltZTogbm93IC0gdGhpcy5jb252ZXJzYXRpb25DcmVhdGVUaW1lLFxuICAgICAgICAgICAgZW5kX3RpbWU6IG5vdyAtIHRoaXMuY29udmVyc2F0aW9uQ3JlYXRlVGltZSArIDAuMDEsXG4gICAgICAgICAgICBzcGVha2VyOiBcInNwZWNpYWxcIixcbiAgICAgICAgICAgIHRleHQ6IFwiVGhlIGFnZW50IGlzIGN1cnJlbnRseSBvZmZsaW5lLCBwbGVhc2UgY2hlY2sgYmFjayBsYXRlci4gVGhhbmsgeW91IVwiLFxuICAgICAgICAgIH07XG4gICAgICAgICAgdGhpcy5tZXNzYWdlSGFuZGxlcihlcnJvck1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICAgIC8vIERvbid0IHRocm93IHRoZSBlcnJvciBzaW5jZSB3ZSBoYW5kbGVkIGl0IHdpdGggYSBtZXNzYWdlXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgdXBsb2FkRmlsZShjaGF0SWQ6IHN0cmluZywgZmlsZTogRmlsZSk6IFByb21pc2U8eyBmaWxlVXJsOiBzdHJpbmcgfT4ge1xuICAgIGlmICghdGhpcy5jb252ZXJzYXRpb25JZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ29udmVyc2F0aW9uIG5vdCBzdGFydGVkXCIpO1xuICAgIH1cblxuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgZm9ybURhdGEuYXBwZW5kKFwiY2hhdF9pZFwiLCBjaGF0SWQpO1xuICAgIGZvcm1EYXRhLmFwcGVuZChcImZpbGVcIiwgZmlsZSk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvcy5wb3N0PHsgZmlsZVVybDogc3RyaW5nIH0+KFxuICAgICAgICBgJHt0aGlzLmJhc2VVcmx9L2FwaS9nZW5hZ2VudC9rbm93bGVkZ2UvdXBsb2FkLWNoYXQtZmlsZWAsXG4gICAgICAgIGZvcm1EYXRhLFxuICAgICAgICB7XG4gICAgICAgICAgaGVhZGVyczogdGhpcy5nZXRIZWFkZXJzKFwibXVsdGlwYXJ0L2Zvcm0tZGF0YVwiKSxcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICBjb25uZWN0V2ViU29ja2V0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLndlYlNvY2tldCkge1xuICAgICAgdGhpcy53ZWJTb2NrZXQuY2xvc2UoKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuY29udmVyc2F0aW9uSWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvbnZlcnNhdGlvbiBJRCBpcyByZXF1aXJlZCBmb3IgV2ViU29ja2V0IGNvbm5lY3Rpb25cIik7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29ubmVjdGlvblN0YXRlSGFuZGxlcikgdGhpcy5jb25uZWN0aW9uU3RhdGVIYW5kbGVyKFwiY29ubmVjdGluZ1wiKTtcbiAgICBcbiAgICAvLyBCdWlsZCBXZWJTb2NrZXQgVVJMIHdpdGggcHJvcGVyIGF1dGhlbnRpY2F0aW9uXG4gICAgY29uc3Qgd3NCYXNlID0gdGhpcy5iYXNlVXJsLnJlcGxhY2UoXCJodHRwXCIsIFwid3NcIik7XG4gICAgY29uc3QgdG9waWNzID0gW1wibWVzc2FnZVwiLCBcInRha2VvdmVyXCIsIFwiZmluYWxpemVcIl07XG4gICAgY29uc3QgdG9waWNzUXVlcnkgPSB0b3BpY3MubWFwKCh0KSA9PiBgdG9waWNzPSR7dH1gKS5qb2luKFwiJlwiKTtcbiAgICBcbiAgICAvLyBVc2UgZ3Vlc3RfdG9rZW4gaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgZmFsbCBiYWNrIHRvIGFwaV9rZXlcbiAgICBjb25zdCBhdXRoUGFyYW0gPSB0aGlzLmd1ZXN0VG9rZW4gXG4gICAgICA/IGBhY2Nlc3NfdG9rZW49JHtlbmNvZGVVUklDb21wb25lbnQodGhpcy5ndWVzdFRva2VuKX1gXG4gICAgICA6IGBhcGlfa2V5PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHRoaXMuYXBpS2V5KX1gO1xuICAgIFxuICAgIGxldCB3c1VybCA9IGAke3dzQmFzZX0vYXBpL2NvbnZlcnNhdGlvbnMvd3MvJHt0aGlzLmNvbnZlcnNhdGlvbklkfT8ke2F1dGhQYXJhbX0mbGFuZz1lbiYke3RvcGljc1F1ZXJ5fWA7XG4gICAgXG4gICAgLy8gQWRkIHRlbmFudCBhcyBxdWVyeSBwYXJhbWV0ZXIgaWYgcHJvdmlkZWRcbiAgICBpZiAodGhpcy50ZW5hbnQpIHtcbiAgICAgIHdzVXJsICs9IGAmeC10ZW5hbnQtaWQ9JHtlbmNvZGVVUklDb21wb25lbnQodGhpcy50ZW5hbnQpfWA7XG4gICAgfVxuICAgIFxuICAgIC8vIFVzZSBuYXRpdmUgYnJvd3NlciBXZWJTb2NrZXQgZmFjdG9yeVxuICAgIHRoaXMud2ViU29ja2V0ID0gY3JlYXRlV2ViU29ja2V0KHdzVXJsKTtcblxuXG4gICAgdGhpcy53ZWJTb2NrZXQub25vcGVuID0gKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuY29ubmVjdGlvblN0YXRlSGFuZGxlcikgdGhpcy5jb25uZWN0aW9uU3RhdGVIYW5kbGVyKFwiY29ubmVjdGVkXCIpO1xuICAgIH07XG5cbiAgICB0aGlzLndlYlNvY2tldC5vbm1lc3NhZ2UgPSAoZXZlbnQ6IE1lc3NhZ2VFdmVudCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UoZXZlbnQuZGF0YSBhcyBzdHJpbmcpO1xuICAgICAgICBpZiAoZGF0YS50eXBlID09PSBcIm1lc3NhZ2VcIiAmJiB0aGlzLm1lc3NhZ2VIYW5kbGVyKSB7XG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YS5wYXlsb2FkKSkge1xuICAgICAgICAgICAgY29uc3QgbWVzc2FnZXMgPSBkYXRhLnBheWxvYWQgYXMgQ2hhdE1lc3NhZ2VbXTtcbiAgICAgICAgICAgIC8vIEFkanVzdCB0aW1lc3RhbXBzIHRvIGJlIHJlbGF0aXZlIHRvIGNvbnZlcnNhdGlvbiBzdGFydFxuICAgICAgICAgICAgLy8gQWxzbyBub3JtYWxpemUgbWVzc2FnZV9pZCBmaWVsZCAoYmFja2VuZCBtaWdodCBzZW5kICdpZCcgaW5zdGVhZCBvZiAnbWVzc2FnZV9pZCcpXG4gICAgICAgICAgICBjb25zdCBhZGp1c3RlZE1lc3NhZ2VzID0gbWVzc2FnZXNcbiAgICAgICAgICAgICAgLm1hcCgobXNnKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYWRqdXN0ZWQgPSB0aGlzLmFkanVzdE1lc3NhZ2VUaW1lc3RhbXBzKG1zZyk7XG4gICAgICAgICAgICAgICAgLy8gTm9ybWFsaXplOiBpZiBiYWNrZW5kIHNlbmRzICdpZCcsIHVzZSBpdCBhcyAnbWVzc2FnZV9pZCdcbiAgICAgICAgICAgICAgICBpZiAoIWFkanVzdGVkLm1lc3NhZ2VfaWQgJiYgKG1zZyBhcyBhbnkpLmlkKSB7XG4gICAgICAgICAgICAgICAgICBhZGp1c3RlZC5tZXNzYWdlX2lkID0gKG1zZyBhcyBhbnkpLmlkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYWRqdXN0ZWQ7XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIC5maWx0ZXIoKG1zZykgPT4gbXNnLnNwZWFrZXIgIT09IFwiY3VzdG9tZXJcIik7XG4gICAgICAgICAgICBhZGp1c3RlZE1lc3NhZ2VzLmZvckVhY2godGhpcy5tZXNzYWdlSGFuZGxlcik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGFkanVzdGVkTWVzc2FnZSA9IHRoaXMuYWRqdXN0TWVzc2FnZVRpbWVzdGFtcHMoXG4gICAgICAgICAgICAgIGRhdGEucGF5bG9hZCBhcyBDaGF0TWVzc2FnZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIC8vIE5vcm1hbGl6ZTogaWYgYmFja2VuZCBzZW5kcyAnaWQnLCB1c2UgaXQgYXMgJ21lc3NhZ2VfaWQnXG4gICAgICAgICAgICBpZiAoIWFkanVzdGVkTWVzc2FnZS5tZXNzYWdlX2lkICYmIChkYXRhLnBheWxvYWQgYXMgYW55KS5pZCkge1xuICAgICAgICAgICAgICBhZGp1c3RlZE1lc3NhZ2UubWVzc2FnZV9pZCA9IChkYXRhLnBheWxvYWQgYXMgYW55KS5pZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhZGp1c3RlZE1lc3NhZ2Uuc3BlYWtlciAhPT0gXCJjdXN0b21lclwiKSB7XG4gICAgICAgICAgICAgIHRoaXMubWVzc2FnZUhhbmRsZXIoYWRqdXN0ZWRNZXNzYWdlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZGF0YS50eXBlID09PSBcInRha2VvdmVyXCIpIHtcbiAgICAgICAgICAvLyBIYW5kbGUgdGFrZW92ZXIgZXZlbnRcbiAgICAgICAgICAvLyBDcmVhdGUgc3BlY2lhbCBtZXNzYWdlIGZvciB0aGUgdGFrZW92ZXIgaW5kaWNhdG9yXG4gICAgICAgICAgaWYgKHRoaXMubWVzc2FnZUhhbmRsZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCkgLyAxMDAwO1xuICAgICAgICAgICAgY29uc3QgdGFrZW92ZXJNZXNzYWdlOiBDaGF0TWVzc2FnZSA9IHtcbiAgICAgICAgICAgICAgY3JlYXRlX3RpbWU6IG5vdyxcbiAgICAgICAgICAgICAgc3RhcnRfdGltZTogdGhpcy5jb252ZXJzYXRpb25DcmVhdGVUaW1lXG4gICAgICAgICAgICAgICAgPyBub3cgLSB0aGlzLmNvbnZlcnNhdGlvbkNyZWF0ZVRpbWVcbiAgICAgICAgICAgICAgICA6IDAsXG4gICAgICAgICAgICAgIGVuZF90aW1lOiB0aGlzLmNvbnZlcnNhdGlvbkNyZWF0ZVRpbWVcbiAgICAgICAgICAgICAgICA/IG5vdyAtIHRoaXMuY29udmVyc2F0aW9uQ3JlYXRlVGltZSArIDAuMDFcbiAgICAgICAgICAgICAgICA6IDAuMDEsXG4gICAgICAgICAgICAgIHNwZWFrZXI6IFwic3BlY2lhbFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBcIlN1cGVydmlzb3IgdG9vayBvdmVyXCIsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy5tZXNzYWdlSGFuZGxlcih0YWtlb3Zlck1lc3NhZ2UpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIENhbGwgdGhlIHRha2VvdmVyIGhhbmRsZXIgaWYgcHJvdmlkZWRcbiAgICAgICAgICBpZiAodGhpcy50YWtlb3ZlckhhbmRsZXIpIHtcbiAgICAgICAgICAgIHRoaXMudGFrZW92ZXJIYW5kbGVyKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGRhdGEudHlwZSA9PT0gXCJmaW5hbGl6ZVwiKSB7XG4gICAgICAgICAgLy8gSGFuZGxlIGZpbmFsaXplZCBldmVudFxuICAgICAgICAgIC8vIENyZWF0ZSBzcGVjaWFsIG1lc3NhZ2UgZm9yIHRoZSBmaW5hbGl6ZWQgaW5kaWNhdG9yXG4gICAgICAgICAgaWYgKHRoaXMubWVzc2FnZUhhbmRsZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCkgLyAxMDAwO1xuICAgICAgICAgICAgY29uc3QgZmluYWxpemVkTWVzc2FnZTogQ2hhdE1lc3NhZ2UgPSB7XG4gICAgICAgICAgICAgIGNyZWF0ZV90aW1lOiBub3csXG4gICAgICAgICAgICAgIHN0YXJ0X3RpbWU6IHRoaXMuY29udmVyc2F0aW9uQ3JlYXRlVGltZVxuICAgICAgICAgICAgICAgID8gbm93IC0gdGhpcy5jb252ZXJzYXRpb25DcmVhdGVUaW1lXG4gICAgICAgICAgICAgICAgOiAwLFxuICAgICAgICAgICAgICBlbmRfdGltZTogdGhpcy5jb252ZXJzYXRpb25DcmVhdGVUaW1lXG4gICAgICAgICAgICAgICAgPyBub3cgLSB0aGlzLmNvbnZlcnNhdGlvbkNyZWF0ZVRpbWUgKyAwLjAxXG4gICAgICAgICAgICAgICAgOiAwLjAxLFxuICAgICAgICAgICAgICBzcGVha2VyOiBcInNwZWNpYWxcIixcbiAgICAgICAgICAgICAgdGV4dDogXCJDb252ZXJzYXRpb24gRmluYWxpemVkXCIsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy5tZXNzYWdlSGFuZGxlcihmaW5hbGl6ZWRNZXNzYWdlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBDYWxsIHRoZSBmaW5hbGl6ZWQgaGFuZGxlciBpZiBwcm92aWRlZFxuICAgICAgICAgIGlmICh0aGlzLmZpbmFsaXplZEhhbmRsZXIpIHtcbiAgICAgICAgICAgIHRoaXMuZmluYWxpemVkSGFuZGxlcigpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmlzRmluYWxpemVkID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLnNhdmVDb252ZXJzYXRpb24oKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgLy8gaWdub3JlXG4gICAgICB9XG4gICAgfTtcblxuICAgIHRoaXMud2ViU29ja2V0Lm9uZXJyb3IgPSAoZXJyb3I6IEV2ZW50KSA9PiB7XG4gICAgICBpZiAodGhpcy5jb25uZWN0aW9uU3RhdGVIYW5kbGVyKVxuICAgICAgICB0aGlzLmNvbm5lY3Rpb25TdGF0ZUhhbmRsZXIoXCJkaXNjb25uZWN0ZWRcIik7XG4gICAgICBcbiAgICAgIC8vIExvZyBkaWFnbm9zdGljXG4gICAgICBjb25zdCBkaWFnbm9zdGljID0gY3JlYXRlV2ViU29ja2V0RGlhZ25vc3RpYyhlcnJvciwgd3NVcmwpO1xuICAgICAgY29uc29sZS5lcnJvcihgW0dlbkFzc2lzdCBDaGF0XSAke2RpYWdub3N0aWN9YCk7XG4gICAgfTtcblxuICAgIHRoaXMud2ViU29ja2V0Lm9uY2xvc2UgPSAoZXZlbnQ6IENsb3NlRXZlbnQpID0+IHtcbiAgICAgIGlmICh0aGlzLmNvbm5lY3Rpb25TdGF0ZUhhbmRsZXIpXG4gICAgICAgIHRoaXMuY29ubmVjdGlvblN0YXRlSGFuZGxlcihcImRpc2Nvbm5lY3RlZFwiKTtcbiAgICAgIFxuICAgICAgLy8gTG9nIGRpYWdub3N0aWNcbiAgICAgIGlmICghZXZlbnQud2FzQ2xlYW4pIHtcbiAgICAgICAgY29uc3QgZGlhZ25vc3RpYyA9IGNyZWF0ZVdlYlNvY2tldERpYWdub3N0aWMoZXZlbnQsIHdzVXJsKTtcbiAgICAgICAgY29uc29sZS53YXJuKGBbR2VuQXNzaXN0IENoYXRdICR7ZGlhZ25vc3RpY31gKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgZGlzY29ubmVjdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy53ZWJTb2NrZXQpIHtcbiAgICAgIHRoaXMud2ViU29ja2V0LmNsb3NlKCk7XG4gICAgICB0aGlzLndlYlNvY2tldCA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBmZXRjaFdlbGNvbWVJbWFnZShhZ2VudElkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgaW1hZ2VSZXNwb25zZSA9IGF3YWl0IGF4aW9zLmdldChcbiAgICAgICAgYCR7dGhpcy5iYXNlVXJsfS9hcGkvZ2VuYWdlbnQvYWdlbnRzL2NvbmZpZ3MvJHthZ2VudElkfS93ZWxjb21lLWltYWdlYCxcbiAgICAgICAge1xuICAgICAgICAgIGhlYWRlcnM6IHRoaXMuZ2V0SGVhZGVycygpLFxuICAgICAgICAgIHJlc3BvbnNlVHlwZTogXCJibG9iXCIsXG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgICBjb25zdCBibG9iVXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChpbWFnZVJlc3BvbnNlLmRhdGEpO1xuICAgICAgdGhpcy53ZWxjb21lT2JqZWN0VXJsID0gYmxvYlVybDtcbiAgICAgIHRoaXMud2VsY29tZURhdGEuaW1hZ2VVcmwgPSBibG9iVXJsO1xuICAgICAgaWYgKHRoaXMud2VsY29tZURhdGFIYW5kbGVyKSB7XG4gICAgICAgIHRoaXMud2VsY29tZURhdGFIYW5kbGVyKHRoaXMud2VsY29tZURhdGEpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLy8gaWdub3JlXG4gICAgfVxuICB9XG5cbiAgLy8gQWRkIGZlZWRiYWNrIHRvIGEgc3BlY2lmaWMgYWdlbnQgbWVzc2FnZSBpbiB0aGUgY29udmVyc2F0aW9uXG4gIGFzeW5jIGFkZEZlZWRiYWNrKFxuICAgIG1lc3NhZ2VJZDogc3RyaW5nLFxuICAgIGZlZWRiYWNrOiBcImdvb2RcIiB8IFwiYmFkXCIsXG4gICAgZmVlZGJhY2tfbWVzc2FnZT86IHN0cmluZ1xuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIW1lc3NhZ2VJZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWVzc2FnZSBJRCBpcyByZXF1aXJlZCBmb3IgZmVlZGJhY2tcIik7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIC8vIFVzZSBtZXNzYWdlIElEIGluIHRoZSBVUkwgcGF0aCwgbm90IGNvbnZlcnNhdGlvbiBJRFxuICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5iYXNlVXJsfS9hcGkvY29udmVyc2F0aW9ucy9tZXNzYWdlL2FkZC1mZWVkYmFjay8ke21lc3NhZ2VJZH1gO1xuICAgICAgLy8gQm9keSBzaG91bGQgb25seSBjb250YWluIGZlZWRiYWNrIGFuZCBmZWVkYmFja19tZXNzYWdlIChubyBtZXNzYWdlX2lkKVxuICAgICAgY29uc3QgcGF5bG9hZDoge1xuICAgICAgICBmZWVkYmFjazogXCJnb29kXCIgfCBcImJhZFwiO1xuICAgICAgICBmZWVkYmFja19tZXNzYWdlPzogc3RyaW5nO1xuICAgICAgfSA9IHtcbiAgICAgICAgZmVlZGJhY2ssXG4gICAgICB9O1xuICAgICAgXG4gICAgICBpZiAoZmVlZGJhY2tfbWVzc2FnZSkge1xuICAgICAgICBwYXlsb2FkLmZlZWRiYWNrX21lc3NhZ2UgPSBmZWVkYmFja19tZXNzYWdlO1xuICAgICAgfVxuICAgICAgXG4gICAgICBhd2FpdCBheGlvcy5wYXRjaCh1cmwsIHBheWxvYWQsIHtcbiAgICAgICAgaGVhZGVyczogdGhpcy5nZXRIZWFkZXJzKCksXG4gICAgICB9KTtcbiAgICAgIFxuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZlZWRiYWNrIEFQSSBjYWxsIGZhaWxlZDonLCB7XG4gICAgICAgIG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2UsXG4gICAgICAgIHJlc3BvbnNlOiBlcnJvci5yZXNwb25zZT8uZGF0YSxcbiAgICAgICAgc3RhdHVzOiBlcnJvci5yZXNwb25zZT8uc3RhdHVzLFxuICAgICAgfSk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICAvLyBIZWxwZXIgbWV0aG9kIHRvIGFkanVzdCBtZXNzYWdlIHRpbWVzdGFtcHMgcmVsYXRpdmUgdG8gY29udmVyc2F0aW9uIHN0YXJ0XG4gIHByaXZhdGUgYWRqdXN0TWVzc2FnZVRpbWVzdGFtcHMobWVzc2FnZTogQ2hhdE1lc3NhZ2UpOiBDaGF0TWVzc2FnZSB7XG4gICAgaWYgKCF0aGlzLmNvbnZlcnNhdGlvbkNyZWF0ZVRpbWUpIHtcbiAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAuLi5tZXNzYWdlLFxuICAgICAgc3RhcnRfdGltZTogbWVzc2FnZS5zdGFydF90aW1lIC0gdGhpcy5jb252ZXJzYXRpb25DcmVhdGVUaW1lLFxuICAgICAgZW5kX3RpbWU6IG1lc3NhZ2UuZW5kX3RpbWUgLSB0aGlzLmNvbnZlcnNhdGlvbkNyZWF0ZVRpbWUsXG4gICAgfTtcbiAgfVxufVxuIl19
763
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdFNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VydmljZXMvY2hhdFNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFTMUIsT0FBTyxFQUNMLGVBQWUsRUFDZix5QkFBeUIsR0FDMUIsTUFBTSxvQkFBb0IsQ0FBQztBQUU1QjtJQTBCRSxxQkFDRSxPQUFlLEVBQ2YsTUFBYyxFQUNkLFFBQThCLEVBQzlCLE1BQWUsRUFDZixRQUFpQixFQUNqQixLQUFxQjtRQUFyQixzQkFBQSxFQUFBLFlBQXFCO1FBNUJmLG1CQUFjLEdBQWtCLElBQUksQ0FBQztRQUNyQywyQkFBc0IsR0FBa0IsSUFBSSxDQUFDLENBQUMsZ0NBQWdDO1FBQzlFLGVBQVUsR0FBa0IsSUFBSSxDQUFDLENBQUMsZ0NBQWdDO1FBQ2xFLGdCQUFXLEdBQVksS0FBSyxDQUFDO1FBQzdCLGNBQVMsR0FBcUIsSUFBSSxDQUFDO1FBQ25DLG1CQUFjLEdBQTRDLElBQUksQ0FBQztRQUMvRCxvQkFBZSxHQUF3QixJQUFJLENBQUM7UUFDNUMscUJBQWdCLEdBQXdCLElBQUksQ0FBQztRQUM3QywyQkFBc0IsR0FFbkIsSUFBSSxDQUFDO1FBQ1IsdUJBQWtCLEdBQThDLElBQUksQ0FBQztRQUNyRSxtQkFBYyxHQUFHLHdCQUF3QixDQUFDO1FBQzFDLG9CQUFlLEdBQWEsRUFBRSxDQUFDO1FBQy9CLGdCQUFXLEdBQXFCLEVBQUUsQ0FBQztRQUNuQyxtQkFBYyxHQUF3QixFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDO1FBQ3JFLHFCQUFnQixHQUFrQixJQUFJLENBQUMsQ0FBQyxxQkFBcUI7UUFjbkUsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFD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LHNCQUFzQixJQUN4RDtJQUNKLENBQUM7SUFDSCxrQkFBQztBQUFELENBQUMsQUF4eUJELElBd3lCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBheGlvcyBmcm9tIFwiYXhpb3NcIjtcbmltcG9ydCB7XG4gIENoYXRNZXNzYWdlLFxuICBTdGFydENvbnZlcnNhdGlvblJlc3BvbnNlLFxuICBBdHRhY2htZW50LFxuICBBZ2VudFRoaW5raW5nQ29uZmlnLFxuICBBZ2VudFdlbGNvbWVEYXRhLFxuICBGaWxlVXBsb2FkUmVzcG9uc2UsXG59IGZyb20gXCIuLi90eXBlc1wiO1xuaW1wb3J0IHtcbiAgY3JlYXRlV2ViU29ja2V0LFxuICBjcmVhdGVXZWJTb2NrZXREaWFnbm9zdGljLFxufSBmcm9tIFwiLi4vdXRpbHMvd2Vic29ja2V0XCI7XG5cbmV4cG9ydCBjbGFzcyBDaGF0U2VydmljZSB7XG4gIHByaXZhdGUgYmFzZVVybDogc3RyaW5nO1xuICBwcml2YXRlIGFwaUtleTogc3RyaW5nO1xuICBwcml2YXRlIG1ldGFkYXRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIGNvbnZlcnNhdGlvbklkOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBjb252ZXJzYXRpb25DcmVhdGVUaW1lOiBudW1iZXIgfCBudWxsID0gbnVsbDsgLy8gVHJhY2sgY29udmVyc2F0aW9uIHN0YXJ0IHRpbWVcbiAgcHJpdmF0ZSBndWVzdFRva2VuOiBzdHJpbmcgfCBudWxsID0gbnVsbDsgLy8gR3Vlc3QgdG9rZW4gZm9yIGF1dGhvcml6YXRpb25cbiAgcHJpdmF0ZSBpc0ZpbmFsaXplZDogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIHdlYlNvY2tldDogV2ViU29ja2V0IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgbWVzc2FnZUhhbmRsZXI6ICgobWVzc2FnZTogQ2hhdE1lc3NhZ2UpID0+IHZvaWQpIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgdGFrZW92ZXJIYW5kbGVyOiAoKCkgPT4gdm9pZCkgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBmaW5hbGl6ZWRIYW5kbGVyOiAoKCkgPT4gdm9pZCkgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBjb25uZWN0aW9uU3RhdGVIYW5kbGVyOlxuICAgIHwgKChzdGF0ZTogXCJjb25uZWN0aW5nXCIgfCBcImNvbm5lY3RlZFwiIHwgXCJkaXNjb25uZWN0ZWRcIikgPT4gdm9pZClcbiAgICB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHdlbGNvbWVEYXRhSGFuZGxlcjogKChkYXRhOiBBZ2VudFdlbGNvbWVEYXRhKSA9PiB2b2lkKSB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHN0b3JhZ2VLZXlCYXNlID0gXCJnZW5hc3Npc3RfY29udmVyc2F0aW9uXCI7XG4gIHByaXZhdGUgcG9zc2libGVRdWVyaWVzOiBzdHJpbmdbXSA9IFtdO1xuICBwcml2YXRlIHdlbGNvbWVEYXRhOiBBZ2VudFdlbGNvbWVEYXRhID0ge307XG4gIHByaXZhdGUgdGhpbmtpbmdDb25maWc6IEFnZW50VGhpbmtpbmdDb25maWcgPSB7IHBocmFzZXM6IFtdLCBkZWxheU1zOiAxMDAwIH07XG4gIHByaXZhdGUgd2VsY29tZU9iamVjdFVybDogc3RyaW5nIHwgbnVsbCA9IG51bGw7IC8vIHRvIHJldm9rZSBvbiByZXNldFxuICBwcml2YXRlIHRlbmFudDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIGFnZW50SWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBsYW5ndWFnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIHVzZVdzOiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGJhc2VVcmw6IHN0cmluZyxcbiAgICBhcGlLZXk6IHN0cmluZyxcbiAgICBtZXRhZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICAgdGVuYW50Pzogc3RyaW5nLFxuICAgIGxhbmd1YWdlPzogc3RyaW5nLFxuICAgIHVzZVdzOiBib29sZWFuID0gdHJ1ZVxuICApIHtcbiAgICB0aGlzLmJhc2VVcmwgPSBiYXNlVXJsLmVuZHNXaXRoKFwiL1wiKSA/IGJhc2VVcmwuc2xpY2UoMCwgLTEpIDogYmFzZVVybDtcbiAgICB0aGlzLmFwaUtleSA9IGFwaUtleTtcbiAgICB0aGlzLm1ldGFkYXRhID0gbWV0YWRhdGE7XG4gICAgdGhpcy50ZW5hbnQgPSB0ZW5hbnQ7XG4gICAgdGhpcy5sYW5ndWFnZSA9IGxhbmd1YWdlO1xuICAgIHRoaXMudXNlV3MgPSB1c2VXcztcbiAgICAvLyBUcnkgdG8gbG9hZCBhIHNhdmVkIGNvbnZlcnNhdGlvbiBmb3IgdGhpcyBhcGlLZXkgZnJvbSBsb2NhbFN0b3JhZ2VcbiAgICB0aGlzLmxvYWRTYXZlZENvbnZlcnNhdGlvbigpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTdG9yYWdlS2V5KCk6IHN0cmluZyB7XG4gICAgLy8gUG9pbnRlciB0byBjdXJyZW50IGNvbnZlcnNhdGlvbiBtZXRhZGF0YSBmb3IgdGhpcyBhcGlLZXlcbiAgICByZXR1cm4gYCR7dGhpcy5zdG9yYWdlS2V5QmFzZX06JHt0aGlzLmFwaUtleX1gO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgbGFuZ3VhZ2UgZm9yIEFjY2VwdC1MYW5ndWFnZSBoZWFkZXJcbiAgICovXG4gIHNldExhbmd1YWdlKGxhbmd1YWdlOiBzdHJpbmcgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICB0aGlzLmxhbmd1YWdlID0gbGFuZ3VhZ2U7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIG1ldGFkYXRhICh1c2VmdWwgZm9yIHVwZGF0aW5nIGxhbmd1YWdlIG9yIG90aGVyIGR5bmFtaWMgbWV0YWRhdGEpXG4gICAqL1xuICBzZXRNZXRhZGF0YShtZXRhZGF0YTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgIHRoaXMubWV0YWRhdGEgPSBtZXRhZGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGb3JtYXQgbGFuZ3VhZ2UgY29kZSBmb3IgQWNjZXB0LUxhbmd1YWdlIGhlYWRlclxuICAgKiBDb252ZXJ0cyBzaW1wbGUgbGFuZ3VhZ2UgY29kZXMgKGUuZy4sIFwiZW5cIiwgXCJlc1wiKSB0byBwcm9wZXIgZm9ybWF0IChlLmcuLCBcImVuLVVTLGVuO3E9MC45XCIpXG4gICAqIEZvbGxvd3MgSFRUUCBBY2NlcHQtTGFuZ3VhZ2UgaGVhZGVyIHN0YW5kYXJkc1xuICAgKi9cbiAgcHJpdmF0ZSBmb3JtYXRBY2NlcHRMYW5ndWFnZShsYW5nQ29kZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIWxhbmdDb2RlKSByZXR1cm4gJyc7XG4gICAgXG4gICAgLy8gTm9ybWFsaXplIGxhbmd1YWdlIGNvZGUgKGxvd2VyY2FzZSwgaGFuZGxlIGNvbW1vbiBmb3JtYXRzKVxuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBsYW5nQ29kZS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgICBcbiAgICAvLyBNYXAgY29tbW9uIGxhbmd1YWdlIGNvZGVzIHRvIHRoZWlyIGZ1bGwgbG9jYWxlIGZvcm1hdFxuICAgIGNvbnN0IGxhbmd1YWdlTWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgJ2VuJzogJ2VuLVVTJyxcbiAgICAgICdlcyc6ICdlcy1FUycsXG4gICAgICAnZnInOiAnZnItRlInLFxuICAgICAgJ2RlJzogJ2RlLURFJyxcbiAgICAgICdpdCc6ICdpdC1JVCcsXG4gICAgICAncHQnOiAncHQtUFQnLFxuICAgICAgJ2FyJzogJ2FyLVNBJyxcbiAgICAgICdzcSc6ICdzcS1BTCcsXG4gICAgfTtcbiAgICBcbiAgICAvLyBDaGVjayBpZiB0aGUgY29kZSBhbHJlYWR5IGhhcyBhIHJlZ2lvbiAoZS5nLiwgXCJlbi1VU1wiLCBcImVzLUVTXCIpXG4gICAgY29uc3QgaGFzUmVnaW9uID0gbm9ybWFsaXplZC5pbmNsdWRlcygnLScpO1xuICAgIFxuICAgIC8vIEdldCB0aGUgZnVsbCBsb2NhbGUgb3IgdXNlIHRoZSBwcm92aWRlZCBjb2RlIGlmIGl0IGFscmVhZHkgaGFzIGEgcmVnaW9uXG4gICAgY29uc3QgZnVsbExvY2FsZSA9IGhhc1JlZ2lvbiA/IG5vcm1hbGl6ZWQgOiAobGFuZ3VhZ2VNYXBbbm9ybWFsaXplZF0gfHwgbm9ybWFsaXplZCk7XG4gICAgXG4gICAgLy8gRXh0cmFjdCBiYXNlIGxhbmd1YWdlIGZyb20gdGhlIGZ1bGwgbG9jYWxlIChlLmcuLCBcImVuXCIgZnJvbSBcImVuLVVTXCIpXG4gICAgY29uc3QgZnVsbEJhc2VMYW5nID0gZnVsbExvY2FsZS5zcGxpdCgnLScpWzBdLnRvTG93ZXJDYXNlKCk7XG4gICAgXG4gICAgLy8gQnVpbGQgQWNjZXB0LUxhbmd1YWdlIGhlYWRlcjogcHJpbWFyeSBsb2NhbGUsIGJhc2UgbGFuZ3VhZ2Ugd2l0aCBxdWFsaXR5LCBFbmdsaXNoIGZhbGxiYWNrXG4gICAgLy8gRm9ybWF0OiBcImxvY2FsZSxiYXNlLWxhbmc7cT0wLjksZW47cT0wLjhcIlxuICAgIGNvbnN0IHBhcnRzOiBzdHJpbmdbXSA9IFtmdWxsTG9jYWxlXTtcbiAgICBcbiAgICAvLyBmYWxsYmFja1xuICAgIHBhcnRzLnB1c2goYCR7ZnVsbEJhc2VMYW5nfTtxPTAuOWApO1xuICAgIFxuICAgIC8vIEFkZCBFbmdsaXNoIGFzIGZhbGxiYWNrIGlmIG5vdCBhbHJlYWR5IHRoZSBwcmltYXJ5IGxhbmd1YWdlXG4gICAgaWYgKGZ1bGxCYXNlTGFuZyAhPT0gJ2VuJykge1xuICAgICAgcGFydHMucHVzaCgnZW47cT0wLjgnKTtcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIHBhcnRzLmpvaW4oJywgJyk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGhlYWRlcnMgZm9yIEFQSSByZXF1ZXN0cywgaW5jbHVkaW5nIGF1dGhvcml6YXRpb24gaWYgZ3Vlc3QgdG9rZW4gaXMgYXZhaWxhYmxlXG4gICAqL1xuICBwcml2YXRlIGdldEhlYWRlcnMoY29udGVudFR5cGU6IHN0cmluZyA9IFwiYXBwbGljYXRpb24vanNvblwiKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gICAgY29uc3QgaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAgIFwieC1hcGkta2V5XCI6IHRoaXMuYXBpS2V5LFxuICAgICAgXCJDb250ZW50LVR5cGVcIjogY29udGVudFR5cGUsXG4gICAgfTtcblxuICAgIC8vIEFkZCB0ZW5hbnQgaGVhZGVyIGlmIHByb3ZpZGVkXG4gICAgaWYgKHRoaXMudGVuYW50KSB7XG4gICAgICBoZWFkZXJzW1wieC10ZW5hbnQtaWRcIl0gPSB0aGlzLnRlbmFudDtcbiAgICB9XG5cbiAgICAvLyBBZGQgYXV0aG9yaXphdGlvbiBoZWFkZXIgaWYgZ3Vlc3QgdG9rZW4gaXMgYXZhaWxhYmxlXG4gICAgaWYgKHRoaXMuZ3Vlc3RUb2tlbikge1xuICAgICAgaGVhZGVyc1tcIkF1dGhvcml6YXRpb25cIl0gPSBgQmVhcmVyICR7dGhpcy5ndWVzdFRva2VufWA7XG4gICAgfVxuXG4gICAgLy8gQWRkIEFjY2VwdC1MYW5ndWFnZSBoZWFkZXIgaWYgbGFuZ3VhZ2UgaXMgc2V0XG4gICAgaWYgKHRoaXMubGFuZ3VhZ2UpIHtcbiAgICAgIGNvbnN0IGFjY2VwdExhbmd1YWdlID0gdGhpcy5mb3JtYXRBY2NlcHRMYW5ndWFnZSh0aGlzLmxhbmd1YWdlKTtcbiAgICAgIGlmIChhY2NlcHRMYW5ndWFnZSkge1xuICAgICAgICBoZWFkZXJzW1wiQWNjZXB0LUxhbmd1YWdlXCJdID0gYWNjZXB0TGFuZ3VhZ2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGhlYWRlcnM7XG4gIH1cblxuICBzZXRNZXNzYWdlSGFuZGxlcihoYW5kbGVyOiAobWVzc2FnZTogQ2hhdE1lc3NhZ2UpID0+IHZvaWQpIHtcbiAgICB0aGlzLm1lc3NhZ2VIYW5kbGVyID0gaGFuZGxlcjtcbiAgfVxuXG4gIHNldFRha2VvdmVySGFuZGxlcihoYW5kbGVyOiAoKSA9PiB2b2lkKSB7XG4gICAgdGhpcy50YWtlb3ZlckhhbmRsZXIgPSBoYW5kbGVyO1xuICB9XG5cbiAgc2V0RmluYWxpemVkSGFuZGxlcihoYW5kbGVyOiAoKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5maW5hbGl6ZWRIYW5kbGVyID0gaGFuZGxlcjtcbiAgfVxuXG4gIHNldENvbm5lY3Rpb25TdGF0ZUhhbmRsZXIoXG4gICAgaGFuZGxlcjogKHN0YXRlOiBcImNvbm5lY3RpbmdcIiB8IFwiY29ubmVjdGVkXCIgfCBcImRpc2Nvbm5lY3RlZFwiKSA9PiB2b2lkXG4gICkge1xuICAgIHRoaXMuY29ubmVjdGlvblN0YXRlSGFuZGxlciA9IGhhbmRsZXI7XG4gIH1cblxuICBzZXRXZWxjb21lRGF0YUhhbmRsZXIoaGFuZGxlcjogKChkYXRhOiBBZ2VudFdlbGNvbWVEYXRhKSA9PiB2b2lkKSB8IG51bGwpIHtcbiAgICB0aGlzLndlbGNvbWVEYXRhSGFuZGxlciA9IGhhbmRsZXI7XG4gIH1cblxuICBnZXRQb3NzaWJsZVF1ZXJpZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLnBvc3NpYmxlUXVlcmllcztcbiAgfVxuXG4gIGdldFdlbGNvbWVEYXRhKCk6IEFnZW50V2VsY29tZURhdGEge1xuICAgIHJldHVybiB0aGlzLndlbGNvbWVEYXRhO1xuICB9XG5cbiAgZ2V0VGhpbmtpbmdDb25maWcoKTogQWdlbnRUaGlua2luZ0NvbmZpZyB7XG4gICAgcmV0dXJuIHRoaXMudGhpbmtpbmdDb25maWc7XG4gIH1cblxuICAvKipcbiAgICogTG9hZCBhIHNhdmVkIGNvbnZlcnNhdGlvbiBJRCBmcm9tIGxvY2FsU3RvcmFnZVxuICAgKi9cbiAgcHJpdmF0ZSBsb2FkU2F2ZWRDb252ZXJzYXRpb24oKTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIGxldCBzYXZlZENvbnZlcnNhdGlvbiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuZ2V0U3RvcmFnZUtleSgpKTtcbiAgICAgIC8vIEJhY2t3YXJkLWNvbXBhdDogY2hlY2sgb2xkIHVuc2NvcGVkIGtleSBpZiBzY29wZWQgb25lIG1pc3NpbmdcbiAgICAgIGlmICghc2F2ZWRDb252ZXJzYXRpb24pIHtcbiAgICAgICAgc2F2ZWRDb252ZXJzYXRpb24gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLnN0b3JhZ2VLZXlCYXNlKTtcbiAgICAgIH1cbiAgICAgIGlmIChzYXZlZENvbnZlcnNhdGlvbikge1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgY29udmVyc2F0aW9uSWQsXG4gICAgICAgICAgY3JlYXRlVGltZSxcbiAgICAgICAgICBpc0ZpbmFsaXplZCxcbiAgICAgICAgICBwb3NzaWJsZVF1ZXJpZXMsXG4gICAgICAgICAgd2VsY29tZURhdGEsXG4gICAgICAgICAgdGhpbmtpbmdDb25maWcsXG4gICAgICAgICAgYWdlbnRJZCxcbiAgICAgICAgICBndWVzdFRva2VuLFxuICAgICAgICB9ID0gSlNPTi5wYXJzZShzYXZlZENvbnZlcnNhdGlvbik7XG4gICAgICAgIHRoaXMuY29udmVyc2F0aW9uSWQgPSBjb252ZXJzYXRpb25JZDtcbiAgICAgICAgdGhpcy5jb252ZXJzYXRpb25DcmVhdGVUaW1lID0gY3JlYXRlVGltZTtcbiAgICAgICAgdGhpcy5pc0ZpbmFsaXplZCA9IGlzRmluYWxpemVkIHx8IGZhbHNlO1xuICAgICAgICB0aGlzLmd1ZXN0VG9rZW4gPSBndWVzdFRva2VuIHx8IG51bGw7XG4gICAgICAgIHRoaXMucG9zc2libGVRdWVyaWVzID0gQXJyYXkuaXNBcnJheShwb3NzaWJsZVF1ZXJpZXMpXG4gICAgICAgICAgPyBwb3NzaWJsZVF1ZXJpZXNcbiAgICAgICAgICA6IFtdO1xuICAgICAgICB0aGlzLndlbGNvbWVEYXRhID0gd2VsY29tZURhdGEgfHwge307XG4gICAgICAgIGlmICghdGhpcy53ZWxjb21lRGF0YS5wb3NzaWJsZVF1ZXJpZXMpIHtcbiAgICAgICAgICB0aGlzLndlbGNvbWVEYXRhLnBvc3NpYmxlUXVlcmllcyA9IHRoaXMucG9zc2libGVRdWVyaWVzO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudGhpbmtpbmdDb25maWcgPSB7XG4gICAgICAgICAgcGhyYXNlczogKHRoaW5raW5nQ29uZmlnICYmIHRoaW5raW5nQ29uZmlnLnBocmFzZXMpIHx8IFtdLFxuICAgICAgICAgIGRlbGF5TXM6XG4gICAgICAgICAgICB0aGlua2luZ0NvbmZpZyAmJiB0eXBlb2YgdGhpbmtpbmdDb25maWcuZGVsYXlNcyA9PT0gXCJudW1iZXJcIlxuICAgICAgICAgICAgICA/IHRoaW5raW5nQ29uZmlnLmRlbGF5TXNcbiAgICAgICAgICAgICAgOiAxMDAwLFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmFnZW50SWQgPSBhZ2VudElkO1xuICAgICAgICBpZiAoIXRoaXMud2VsY29tZURhdGEuaW1hZ2VVcmwgJiYgdGhpcy5hZ2VudElkKSB7XG4gICAgICAgICAgdGhpcy5mZXRjaFdlbGNvbWVJbWFnZSh0aGlzLmFnZW50SWQpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLndlbGNvbWVEYXRhSGFuZGxlcikge1xuICAgICAgICAgIHRoaXMud2VsY29tZURhdGFIYW5kbGVyKHRoaXMud2VsY29tZURhdGEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIGlnbm9yZVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTYXZlIHRoZSBjdXJyZW50IGNvbnZlcnNhdGlvbiBJRCB0byBsb2NhbFN0b3JhZ2VcbiAgICovXG4gIHByaXZhdGUgc2F2ZUNvbnZlcnNhdGlvbigpOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgaWYgKHRoaXMuY29udmVyc2F0aW9uSWQgJiYgdGhpcy5jb252ZXJzYXRpb25DcmVhdGVUaW1lKSB7XG4gICAgICAgIGNvbnN0IGNvbnZlcnNhdGlvbkRhdGEgPSB7XG4gICAgICAgICAgY29udmVyc2F0aW9uSWQ6IHRoaXMuY29udmVyc2F0aW9uSWQsXG4gICAgICAgICAgY3JlYXRlVGltZTogdGhpcy5jb252ZXJzYXRpb25DcmVhdGVUaW1lLFxuICAgICAgICAgIGlzRmluYWxpemVkOiB0aGlzLmlzRmluYWxpemVkLFxuICAgICAgICAgIHBvc3NpYmxlUXVlcmllczogdGhpcy5wb3NzaWJsZVF1ZXJpZXMsXG4gICAgICAgICAgd2VsY29tZURhdGE6IHtcbiAgICAgICAgICAgIC4uLnRoaXMud2VsY29tZURhdGEsXG4gICAgICAgICAgICBpbWFnZVVybDpcbiAgICAgICAgICAgICAgdGhpcy53ZWxjb21lT2JqZWN0VXJsICYmXG4gICAgICAgICAgICAgIHRoaXMud2VsY29tZURhdGEuaW1hZ2VVcmwgJiZcbiAgICAgICAgICAgICAgdGhpcy53ZWxjb21lRGF0YS5pbWFnZVVybC5zdGFydHNXaXRoKFwiYmxvYjpcIilcbiAgICAgICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgICAgICA6IHRoaXMud2VsY29tZURhdGEuaW1hZ2VVcmwgfHwgbnVsbCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHRoaW5raW5nQ29uZmlnOiB0aGlzLnRoaW5raW5nQ29uZmlnLFxuICAgICAgICAgIGFnZW50SWQ6IHRoaXMuYWdlbnRJZCxcbiAgICAgICAgICBndWVzdFRva2VuOiB0aGlzLmd1ZXN0VG9rZW4sXG4gICAgICAgIH07XG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuZ2V0U3RvcmFnZUtleSgpLCBKU09OLnN0cmluZ2lmeShjb252ZXJzYXRpb25EYXRhKSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIGlnbm9yZVxuICAgIH1cbiAgfVxuXG4gIC8vIENoZWNrIGlmIGFuIGVycm9yIGlzIGEgdG9rZW4gZXhwaXJhdGlvbiBlcnJvclxuICBwcml2YXRlIGlzVG9rZW5FeHBpcmVkRXJyb3IoZXJyb3I6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICBlcnJvci5yZXNwb25zZSAmJlxuICAgICAgZXJyb3IucmVzcG9uc2Uuc3RhdHVzID09PSA0MDEgJiZcbiAgICAgIGVycm9yLnJlc3BvbnNlLmRhdGEgJiZcbiAgICAgIChlcnJvci5yZXNwb25zZS5kYXRhLmVycm9yID09PSBcIlRva2VuIGhhcyBleHBpcmVkLlwiIHx8XG4gICAgICAgIGVycm9yLnJlc3BvbnNlLmRhdGEubWVzc2FnZSA9PT0gXCJUb2tlbiBoYXMgZXhwaXJlZC5cIiB8fFxuICAgICAgICAodHlwZW9mIGVycm9yLnJlc3BvbnNlLmRhdGEgPT09IFwic3RyaW5nXCIgJiYgZXJyb3IucmVzcG9uc2UuZGF0YS5pbmNsdWRlcyhcIlRva2VuIGhhcyBleHBpcmVkXCIpKSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0IHRoZSBjdXJyZW50IGNvbnZlcnNhdGlvbiBieSBjbGVhcmluZyB0aGUgSUQgYW5kIHdlYnNvY2tldFxuICAgKi9cbiAgcmVzZXRDb252ZXJzYXRpb24oKTogdm9pZCB7XG4gICAgLy8gQ2xvc2UgdGhlIGN1cnJlbnQgd2Vic29ja2V0IGNvbm5lY3Rpb24gaWYgaXQgZXhpc3RzXG4gICAgaWYgKHRoaXMud2ViU29ja2V0KSB7XG4gICAgICB0aGlzLndlYlNvY2tldC5jbG9zZSgpO1xuICAgICAgdGhpcy53ZWJTb2NrZXQgPSBudWxsO1xuICAgIH1cblxuICAgIC8vIENsZWFyIHRoZSBjb252ZXJzYXRpb24gSURcbiAgICB0aGlzLmNvbnZlcnNhdGlvbklkID0gbnVsbDtcbiAgICB0aGlzLmNvbnZlcnNhdGlvbkNyZWF0ZVRpbWUgPSBudWxsO1xuICAgIHRoaXMuZ3Vlc3RUb2tlbiA9IG51bGw7XG4gICAgdGhpcy5pc0ZpbmFsaXplZCA9IGZhbHNlO1xuXG4gICAgLy8gQ2xlYXIgcG9zc2libGUgcXVlcmllc1xuICAgIHRoaXMucG9zc2libGVRdWVyaWVzID0gW107XG4gICAgdGhpcy53ZWxjb21lRGF0YSA9IHt9O1xuICAgIHRoaXMudGhpbmtpbmdDb25maWcgPSB7IHBocmFzZXM6IFtdLCBkZWxheU1zOiAxMDAwIH07XG4gICAgaWYgKHRoaXMud2VsY29tZU9iamVjdFVybCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgVVJMLnJldm9rZU9iamVjdFVSTCh0aGlzLndlbGNvbWVPYmplY3RVcmwpO1xuICAgICAgfSBjYXRjaCB7fVxuICAgICAgdGhpcy53ZWxjb21lT2JqZWN0VXJsID0gbnVsbDtcbiAgICB9XG4gICAgdGhpcy5hZ2VudElkID0gdW5kZWZpbmVkO1xuXG4gICAgLy8gUmVtb3ZlIGZyb20gbG9jYWwgc3RvcmFnZVxuICAgIHRyeSB7XG4gICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLmdldFN0b3JhZ2VLZXkoKSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIGlnbm9yZVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB0aGVyZSdzIGEgY3VycmVudCBjb252ZXJzYXRpb25cbiAgICovXG4gIGhhc0FjdGl2ZUNvbnZlcnNhdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLmNvbnZlcnNhdGlvbklkO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgY3VycmVudCBjb252ZXJzYXRpb24gSURcbiAgICovXG4gIGdldENvbnZlcnNhdGlvbklkKCk6IHN0cmluZyB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLmNvbnZlcnNhdGlvbklkO1xuICB9XG5cbiAgaXNDb252ZXJzYXRpb25GaW5hbGl6ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNGaW5hbGl6ZWQ7XG4gIH1cblxuICBhc3luYyBzdGFydENvbnZlcnNhdGlvbihyZUNhcHRjaGFUb2tlbjogc3RyaW5nIHwgdW5kZWZpbmVkKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVxdWVzdEJvZHk6IGFueSA9IHtcbiAgICAgICAgbWVzc2FnZXM6IFtdLFxuICAgICAgICByZWNvcmRlZF9hdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgICBkYXRhX3NvdXJjZV9pZDogXCIwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDBcIixcbiAgICAgICAgcmVjYXB0Y2hhX3Rva2VuOiByZUNhcHRjaGFUb2tlbixcbiAgICAgIH07XG5cbiAgICAgIGlmICh0aGlzLm1ldGFkYXRhKSB7XG4gICAgICAgIHJlcXVlc3RCb2R5Lm1ldGFkYXRhID0gdGhpcy5tZXRhZGF0YTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvcy5wb3N0PFN0YXJ0Q29udmVyc2F0aW9uUmVzcG9uc2U+KFxuICAgICAgICBgJHt0aGlzLmJhc2VVcmx9L2FwaS9jb252ZXJzYXRpb25zL2luLXByb2dyZXNzL3N0YXJ0YCxcbiAgICAgICAgcmVxdWVzdEJvZHksXG4gICAgICAgIHtcbiAgICAgICAgICBoZWFkZXJzOiB0aGlzLmdldEhlYWRlcnMoKSxcbiAgICAgICAgfVxuICAgICAgKTtcblxuICAgICAgdGhpcy5jb252ZXJzYXRpb25JZCA9IHJlc3BvbnNlLmRhdGEuY29udmVyc2F0aW9uX2lkO1xuICAgICAgLy8gU3RvcmUgY29udmVyc2F0aW9uIGNyZWF0ZSB0aW1lICh1c2UgZnJvbSByZXNwb25zZSBpZiBhdmFpbGFibGUsIG90aGVyd2lzZSBjdXJyZW50IHRpbWUpXG4gICAgICB0aGlzLmNvbnZlcnNhdGlvbkNyZWF0ZVRpbWUgPSByZXNwb25zZS5kYXRhLmNyZWF0ZV90aW1lXG4gICAgICAgID8gcmVzcG9uc2UuZGF0YS5jcmVhdGVfdGltZSAvIDEwMDBcbiAgICAgICAgOiBEYXRlLm5vdygpIC8gMTAwMDtcbiAgICAgIC8vIFN0b3JlIGd1ZXN0IHRva2VuIGlmIHByb3ZpZGVkXG4gICAgICB0aGlzLmd1ZXN0VG9rZW4gPSByZXNwb25zZS5kYXRhLmd1ZXN0X3Rva2VuIHx8IG51bGw7XG4gICAgICB0aGlzLmlzRmluYWxpemVkID0gZmFsc2U7XG5cbiAgICAgIC8vIFN0b3JlIHBvc3NpYmxlIHF1ZXJpZXMgaWYgYXZhaWxhYmxlXG4gICAgICBpZiAoXG4gICAgICAgIHJlc3BvbnNlLmRhdGEuYWdlbnRfcG9zc2libGVfcXVlcmllcyAmJlxuICAgICAgICByZXNwb25zZS5kYXRhLmFnZW50X3Bvc3NpYmxlX3F1ZXJpZXMubGVuZ3RoID4gMFxuICAgICAgKSB7XG4gICAgICAgIHRoaXMucG9zc2libGVRdWVyaWVzID0gcmVzcG9uc2UuZGF0YS5hZ2VudF9wb3NzaWJsZV9xdWVyaWVzLmZpbHRlcihcbiAgICAgICAgICAocXVlcnkpID0+IHR5cGVvZiBxdWVyeSA9PT0gXCJzdHJpbmdcIiAmJiBxdWVyeS50cmltKCkubGVuZ3RoID4gMFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBhbnlEYXRhOiBhbnkgPSByZXNwb25zZS5kYXRhIGFzIGFueTtcbiAgICAgIGNvbnN0IGFnZW50SWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IGFueURhdGEuYWdlbnRfaWQ7XG4gICAgICB0aGlzLmFnZW50SWQgPSBhZ2VudElkO1xuICAgICAgY29uc3Qgd2VsY29tZVRpdGxlOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBhbnlEYXRhLmFnZW50X3dlbGNvbWVfdGl0bGU7XG4gICAgICBjb25zdCB3ZWxjb21lSW1hZ2VVcmw6IHN0cmluZyB8IHVuZGVmaW5lZCA9XG4gICAgICAgIGFueURhdGEuYWdlbnRfd2VsY29tZV9pbWFnZV91cmw7XG4gICAgICBjb25zdCB0aGlua2luZ1BocmFzZXM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkID1cbiAgICAgICAgYW55RGF0YS5hZ2VudF90aGlua2luZ19waHJhc2VzO1xuICAgICAgY29uc3QgdGhpbmtpbmdEZWxheVNlYzogbnVtYmVyIHwgdW5kZWZpbmVkID1cbiAgICAgICAgYW55RGF0YS5hZ2VudF90aGlua2luZ19waHJhc2VfZGVsYXk7XG5cbiAgICAgIHRoaXMud2VsY29tZURhdGEgPSB7XG4gICAgICAgIHRpdGxlOiB3ZWxjb21lVGl0bGUgfHwgbnVsbCxcbiAgICAgICAgbWVzc2FnZTogbnVsbCxcbiAgICAgICAgaW1hZ2VVcmw6IHdlbGNvbWVJbWFnZVVybCB8fCBudWxsLFxuICAgICAgICBwb3NzaWJsZVF1ZXJpZXM6IHRoaXMucG9zc2libGVRdWVyaWVzLFxuICAgICAgfTtcblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpbmtpbmdQaHJhc2VzKSAmJiB0aGlua2luZ1BocmFzZXMubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLnRoaW5raW5nQ29uZmlnLnBocmFzZXMgPSB0aGlua2luZ1BocmFzZXM7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIHRoaW5raW5nRGVsYXlTZWMgPT09IFwibnVtYmVyXCIgJiYgdGhpbmtpbmdEZWxheVNlYyA+PSAwKSB7XG4gICAgICAgIHRoaXMudGhpbmtpbmdDb25maWcuZGVsYXlNcyA9IE1hdGgubWF4KFxuICAgICAgICAgIDI1MCxcbiAgICAgICAgICBNYXRoLnJvdW5kKHRoaW5raW5nRGVsYXlTZWMgKiAxMDAwKVxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXRoaXMud2VsY29tZURhdGEuaW1hZ2VVcmwgJiYgYWdlbnRJZCkge1xuICAgICAgICBhd2FpdCB0aGlzLmZldGNoV2VsY29tZUltYWdlKGFnZW50SWQpO1xuICAgICAgfVxuXG4gICAgICAvLyBQcm9jZXNzIGFnZW50IHdlbGNvbWUgbWVzc2FnZSBpZiBhdmFpbGFibGVcbiAgICAgIGlmIChyZXNwb25zZS5kYXRhLmFnZW50X3dlbGNvbWVfbWVzc2FnZSAmJiB0aGlzLm1lc3NhZ2VIYW5kbGVyKSB7XG4gICAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCkgLyAxMDAwO1xuICAgICAgICBjb25zdCB3ZWxjb21lTWVzc2FnZTogQ2hhdE1lc3NhZ2UgPSB7XG4gICAgICAgICAgY3JlYXRlX3RpbWU6IG5vdyxcbiAgICAgICAgICBzdGFydF90aW1lOiBub3cgLSB0aGlzLmNvbnZlcnNhdGlvbkNyZWF0ZVRpbWUsIC8vIFJlbGF0aXZlIHRvIGNvbnZlcnNhdGlvbiBzdGFydFxuICAgICAgICAgIGVuZF90aW1lOiBub3cgLSB0aGlzLmNvbnZlcnNhdGlvbkNyZWF0ZVRpbWUgKyAwLjAxLCAvLyBSZWxhdGl2ZSB0byBjb252ZXJzYXRpb24gc3RhcnRcbiAgICAgICAgICBzcGVha2VyOiBcImFnZW50XCIsXG4gICAgICAgICAgdGV4dDogcmVzcG9uc2UuZGF0YS5hZ2VudF93ZWxjb21lX21lc3NhZ2UsXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMud2VsY29tZURhdGEubWVzc2FnZSA9IHJlc3BvbnNlLmRhdGEuYWdlbnRfd2VsY29tZV9tZXNzYWdlO1xuICAgICAgICB0aGlzLm1lc3NhZ2VIYW5kbGVyKHdlbGNvbWVNZXNzYWdlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMud2VsY29tZURhdGFIYW5kbGVyKSB7XG4gICAgICAgIHRoaXMud2VsY29tZURhdGFIYW5kbGVyKHRoaXMud2VsY29tZURhdGEpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnNhdmVDb252ZXJzYXRpb24oKTtcbiAgICAgIGlmICh0aGlzLnVzZVdzKSB7XG4gICAgICAgIHRoaXMuY29ubmVjdFdlYlNvY2tldCgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3BvbnNlLmRhdGEuY29udmVyc2F0aW9uX2lkO1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGlmICh0aGlzLmlzVG9rZW5FeHBpcmVkRXJyb3IoZXJyb3IpKSB7XG4gICAgICAgIHRoaXMucmVzZXRDb252ZXJzYXRpb24oKTtcbiAgICAgIH1cbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNlbmRNZXNzYWdlKFxuICAgIG1lc3NhZ2U6IHN0cmluZyxcbiAgICBhdHRhY2htZW50cz86IEF0dGFjaG1lbnRbXSxcbiAgICBleHRyYU1ldGFkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PixcbiAgICByZUNhcHRjaGFUb2tlbj86IHN0cmluZ1xuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuY29udmVyc2F0aW9uSWQgfHwgIXRoaXMuY29udmVyc2F0aW9uQ3JlYXRlVGltZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ29udmVyc2F0aW9uIG5vdCBzdGFydGVkXCIpO1xuICAgIH1cblxuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCkgLyAxMDAwO1xuICAgIGNvbnN0IGNoYXRNZXNzYWdlOiBDaGF0TWVzc2FnZSA9IHtcbiAgICAgIGNyZWF0ZV90aW1lOiBub3csXG4gICAgICBzdGFydF90aW1lOiBub3cgLSB0aGlzLmNvbnZlcnNhdGlvbkNyZWF0ZVRpbWUsIC8vIFJlbGF0aXZlIHRvIGNvbnZlcnNhdGlvbiBzdGFydFxuICAgICAgZW5kX3RpbWU6IG5vdyAtIHRoaXMuY29udmVyc2F0aW9uQ3JlYXRlVGltZSArIDAuMDEsIC8vIFJlbGF0aXZlIHRvIGNvbnZlcnNhdGlvbiBzdGFydFxuICAgICAgc3BlYWtlcjogXCJjdXN0b21lclwiLFxuICAgICAgdGV4dDogbWVzc2FnZSxcbiAgICAgIGF0dGFjaG1lbnRzOiBhdHRhY2htZW50cyxcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMubWVzc2FnZUhhbmRsZXIpIHtcbiAgICAgIHRoaXMubWVzc2FnZUhhbmRsZXIoY2hhdE1lc3NhZ2UpO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXF1ZXN0Qm9keTogYW55ID0ge1xuICAgICAgICBtZXNzYWdlczogW2NoYXRNZXNzYWdlXSxcbiAgICAgICAgcmVjb3JkZWRfYXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIH07XG5cbiAgICAgIGlmIChyZUNhcHRjaGFUb2tlbikge1xuICAgICAgICByZXF1ZXN0Qm9keS5yZWNhcHRjaGFfdG9rZW4gPSByZUNhcHRjaGFUb2tlbjtcbiAgICAgIH1cblxuICAgICAgLy8gSW5jbHVkZSBtZXRhZGF0YVxuICAgICAgY29uc3QgbWVyZ2VkTWV0YWRhdGEgPSB7XG4gICAgICAgIC4uLih0aGlzLm1ldGFkYXRhIHx8IHt9KSxcbiAgICAgICAgLi4uKGV4dHJhTWV0YWRhdGEgfHwge30pLFxuICAgICAgfTtcbiAgICAgIGlmIChPYmplY3Qua2V5cyhtZXJnZWRNZXRhZGF0YSkubGVuZ3RoID4gMCkge1xuICAgICAgICByZXF1ZXN0Qm9keS5tZXRhZGF0YSA9IG1lcmdlZE1ldGFkYXRhO1xuICAgICAgfVxuXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zLnBhdGNoKFxuICAgICAgICBgJHt0aGlzLmJhc2VVcmx9L2FwaS9jb252ZXJzYXRpb25zL2luLXByb2dyZXNzL3VwZGF0ZS8ke3RoaXMuY29udmVyc2F0aW9uSWR9YCxcbiAgICAgICAgcmVxdWVzdEJvZHksXG4gICAgICAgIHtcbiAgICAgICAgICBoZWFkZXJzOiB0aGlzLmdldEhlYWRlcnMoKSxcbiAgICAgICAgfVxuICAgICAgKTtcblxuICAgICAgLy8gSWYgbm90IHVzaW5nIFdlYlNvY2tldCwgdHJ5IHRvIHJldHJpZXZlIHRoZSByZXNwb25zZSBtZXNzYWdlIGZyb20gdGhlIHVwZGF0ZSBjb252ZXJzYXRpb24gcmVzcG9uc2VcbiAgICAgIGlmICghdGhpcy51c2VXcyAmJiB0aGlzLm1lc3NhZ2VIYW5kbGVyKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcmVzcG9uc2VEYXRhID0gcmVzcG9uc2UuZGF0YSBhcyBhbnk7XG4gICAgICAgICAgXG4gICAgICAgICAgaWYgKHJlc3BvbnNlRGF0YS5tZXNzYWdlcyAmJiBBcnJheS5pc0FycmF5KHJlc3BvbnNlRGF0YS5tZXNzYWdlcykpIHtcbiAgICAgICAgICAgIC8vIExvb2sgZm9yIHRoZSBsYXRlc3QgYWdlbnQgbWVzc2FnZSBpbiB0aGUgcmVzcG9uc2VcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSByZXNwb25zZURhdGEubWVzc2FnZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgICAgY29uc3QgbWVzc2FnZURhdGEgPSByZXNwb25zZURhdGEubWVzc2FnZXNbaV07XG4gICAgICAgICAgICAgIFxuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgbWVzc2FnZURhdGEuc3BlYWtlciA9PT0gXCJhZ2VudFwiICYmXG4gICAgICAgICAgICAgICAgbWVzc2FnZURhdGEudGV4dCAmJlxuICAgICAgICAgICAgICAgIG1lc3NhZ2VEYXRhLmNyZWF0ZV90aW1lICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICBtZXNzYWdlRGF0YS5zdGFydF90aW1lICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICBtZXNzYWdlRGF0YS5lbmRfdGltZSAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFnZW50TWVzc2FnZTogQ2hhdE1lc3NhZ2UgPSB7XG4gICAgICAgICAgICAgICAgICBjcmVhdGVfdGltZTogbWVzc2FnZURhdGEuY3JlYXRlX3RpbWUsXG4gICAgICAgICAgICAgICAgICBzdGFydF90aW1lOiB0aGlzLmNvbnZlcnNhdGlvbkNyZWF0ZVRpbWVcbiAgICAgICAgICAgICAgICAgICAgPyBtZXNzYWdlRGF0YS5zdGFydF90aW1lIC0gdGhpcy5jb252ZXJzYXRpb25DcmVhdGVUaW1lXG4gICAgICAgICAgICAgICAgICAgIDogbWVzc2FnZURhdGEuc3RhcnRfdGltZSxcbiAgICAgICAgICAgICAgICAgIGVuZF90aW1lOiB0aGlzLmNvbnZlcnNhdGlvbkNyZWF0ZVRpbWVcbiAgICAgICAgICAgICAgICAgICAgPyBtZXNzYWdlRGF0YS5lbmRfdGltZSAtIHRoaXMuY29udmVyc2F0aW9uQ3JlYXRlVGltZVxuICAgICAgICAgICAgICAgICAgICA6IG1lc3NhZ2VEYXRhLmVuZF90aW1lLFxuICAgICAgICAgICAgICAgICAgc3BlYWtlcjogXCJhZ2VudFwiLFxuICAgICAgICAgICAgICAgICAgdGV4dDogbWVzc2FnZURhdGEudGV4dCxcbiAgICAgICAgICAgICAgICAgIG1lc3NhZ2VfaWQ6IG1lc3NhZ2VEYXRhLm1lc3NhZ2VfaWQgfHwgbWVzc2FnZURhdGEuaWQsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAvLyBPbmx5IHByb2Nlc3MgaWYgdGhpcyBpcyBhIG5ldyBtZXNzYWdlIHdlIGhhdmVuJ3Qgc2VlbiBiZWZvcmVcbiAgICAgICAgICAgICAgICAvLyBXZSBjYW4ndCBlYXNpbHkgY2hlY2sgaGVyZSwgc28gd2UnbGwgbGV0IHRoZSBoYW5kbGVyIG1hbmFnZSBkdXBsaWNhdGVzXG4gICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlSGFuZGxlcihhZ2VudE1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChwYXJzZUVycm9yKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcIkZhaWxlZCB0byBwYXJzZSB1cGRhdGUgY29udmVyc2F0aW9uIHJlc3BvbnNlOlwiLCBwYXJzZUVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIC8vIENoZWNrIGlmIHRoaXMgaXMgYSB0b2tlbiBleHBpcmF0aW9uIGVycm9yXG4gICAgICBpZiAodGhpcy5pc1Rva2VuRXhwaXJlZEVycm9yKGVycm9yKSkge1xuICAgICAgICB0aGlzLnJlc2V0Q29udmVyc2F0aW9uKCk7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBpZiB0aGlzIGlzIHRoZSBhZ2VudCBpbmFjdGl2ZSBlcnJvclxuICAgICAgaWYgKFxuICAgICAgICBlcnJvci5yZXNwb25zZSAmJlxuICAgICAgICBlcnJvci5yZXNwb25zZS5kYXRhICYmXG4gICAgICAgIGVycm9yLnJlc3BvbnNlLmRhdGEuZXJyb3Jfa2V5ID09PSBcIkFHRU5UX0lOQUNUSVZFXCJcbiAgICAgICkge1xuICAgICAgICAvLyBDcmVhdGUgYSBjdXN0b20gbWVzc2FnZSBmb3IgdGhlIGFnZW50IGluYWN0aXZlIGVycm9yXG4gICAgICAgIGlmICh0aGlzLm1lc3NhZ2VIYW5kbGVyKSB7XG4gICAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlOiBDaGF0TWVzc2FnZSA9IHtcbiAgICAgICAgICAgIGNyZWF0ZV90aW1lOiBub3csXG4gICAgICAgICAgICBzdGFydF90aW1lOiBub3cgLSB0aGlzLmNvbnZlcnNhdGlvbkNyZWF0ZVRpbWUsXG4gICAgICAgICAgICBlbmRfdGltZTogbm93IC0gdGhpcy5jb252ZXJzYXRpb25DcmVhdGVUaW1lICsgMC4wMSxcbiAgICAgICAgICAgIHNwZWFrZXI6IFwic3BlY2lhbFwiLFxuICAgICAgICAgICAgdGV4dDogXCJUaGUgYWdlbnQgaXMgY3VycmVudGx5IG9mZmxpbmUsIHBsZWFzZSBjaGVjayBiYWNrIGxhdGVyLiBUaGFuayB5b3UhXCIsXG4gICAgICAgICAgfTtcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VIYW5kbGVyKGVycm9yTWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gRG9uJ3QgdGhyb3cgdGhlIGVycm9yIHNpbmNlIHdlIGhhbmRsZWQgaXQgd2l0aCBhIG1lc3NhZ2VcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICBhc3luYyB1cGxvYWRGaWxlKGNoYXRJZDogc3RyaW5nLCBmaWxlOiBGaWxlKTogUHJvbWlzZTxGaWxlVXBsb2FkUmVzcG9uc2UgfCBudWxsPiB7XG4gICAgaWYgKCF0aGlzLmNvbnZlcnNhdGlvbklkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb252ZXJzYXRpb24gbm90IHN0YXJ0ZWRcIik7XG4gICAgfVxuXG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICBmb3JtRGF0YS5hcHBlbmQoXCJjaGF0X2lkXCIsIGNoYXRJZCk7XG4gICAgZm9ybURhdGEuYXBwZW5kKFwiZmlsZVwiLCBmaWxlKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zLnBvc3Q8RmlsZVVwbG9hZFJlc3BvbnNlPihcbiAgICAgICAgYCR7dGhpcy5iYXNlVXJsfS9hcGkvZ2VuYWdlbnQva25vd2xlZGdlL3VwbG9hZC1jaGF0LWZpbGVgLFxuICAgICAgICBmb3JtRGF0YSxcbiAgICAgICAge1xuICAgICAgICAgIGhlYWRlcnM6IHRoaXMuZ2V0SGVhZGVycyhcIm11bHRpcGFydC9mb3JtLWRhdGFcIiksXG4gICAgICAgIH1cbiAgICAgICk7XG5cbiAgICAgIHJldHVybiByZXNwb25zZS5kYXRhIGFzIEZpbGVVcGxvYWRSZXNwb25zZTtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBpZiAodGhpcy5pc1Rva2VuRXhwaXJlZEVycm9yKGVycm9yKSkge1xuICAgICAgICB0aGlzLnJlc2V0Q29udmVyc2F0aW9uKCk7XG4gICAgICB9XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICBjb25uZWN0V2ViU29ja2V0KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy51c2VXcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLndlYlNvY2tldCkge1xuICAgICAgdGhpcy53ZWJTb2NrZXQuY2xvc2UoKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuY29udmVyc2F0aW9uSWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvbnZlcnNhdGlvbiBJRCBpcyByZXF1aXJlZCBmb3IgV2ViU29ja2V0IGNvbm5lY3Rpb25cIik7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29ubmVjdGlvblN0YXRlSGFuZGxlcikgdGhpcy5jb25uZWN0aW9uU3RhdGVIYW5kbGVyKFwiY29ubmVjdGluZ1wiKTtcbiAgICBcbiAgICAvLyBCdWlsZCBXZWJTb2NrZXQgVVJMIHdpdGggcHJvcGVyIGF1dGhlbnRpY2F0aW9uXG4gICAgY29uc3Qgd3NCYXNlID0gdGhpcy5iYXNlVXJsLnJlcGxhY2UoXCJodHRwXCIsIFwid3NcIik7XG4gICAgY29uc3QgdG9waWNzID0gW1wibWVzc2FnZVwiLCBcInRha2VvdmVyXCIsIFwiZmluYWxpemVcIl07XG4gICAgY29uc3QgdG9waWNzUXVlcnkgPSB0b3BpY3MubWFwKCh0KSA9PiBgdG9waWNzPSR7dH1gKS5qb2luKFwiJlwiKTtcbiAgICBcbiAgICAvLyBVc2UgZ3Vlc3RfdG9rZW4gaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgZmFsbCBiYWNrIHRvIGFwaV9rZXlcbiAgICBjb25zdCBhdXRoUGFyYW0gPSB0aGlzLmd1ZXN0VG9rZW4gXG4gICAgICA/IGBhY2Nlc3NfdG9rZW49JHtlbmNvZGVVUklDb21wb25lbnQodGhpcy5ndWVzdFRva2VuKX1gXG4gICAgICA6IGBhcGlfa2V5PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHRoaXMuYXBpS2V5KX1gO1xuICAgIFxuICAgIGxldCB3c1VybCA9IGAke3dzQmFzZX0vYXBpL2NvbnZlcnNhdGlvbnMvd3MvJHt0aGlzLmNvbnZlcnNhdGlvbklkfT8ke2F1dGhQYXJhbX0mbGFuZz1lbiYke3RvcGljc1F1ZXJ5fWA7XG4gICAgXG4gICAgLy8gQWRkIHRlbmFudCBhcyBxdWVyeSBwYXJhbWV0ZXIgaWYgcHJvdmlkZWRcbiAgICBpZiAodGhpcy50ZW5hbnQpIHtcbiAgICAgIHdzVXJsICs9IGAmeC10ZW5hbnQtaWQ9JHtlbmNvZGVVUklDb21wb25lbnQodGhpcy50ZW5hbnQpfWA7XG4gICAgfVxuICAgIFxuICAgIC8vIFVzZSBuYXRpdmUgYnJvd3NlciBXZWJTb2NrZXQgZmFjdG9yeVxuICAgIHRoaXMud2ViU29ja2V0ID0gY3JlYXRlV2ViU29ja2V0KHdzVXJsKTtcblxuXG4gICAgdGhpcy53ZWJTb2NrZXQub25vcGVuID0gKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuY29ubmVjdGlvblN0YXRlSGFuZGxlcikgdGhpcy5jb25uZWN0aW9uU3RhdGVIYW5kbGVyKFwiY29ubmVjdGVkXCIpO1xuICAgIH07XG5cbiAgICB0aGlzLndlYlNvY2tldC5vbm1lc3NhZ2UgPSAoZXZlbnQ6IE1lc3NhZ2VFdmVudCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UoZXZlbnQuZGF0YSBhcyBzdHJpbmcpO1xuXG4gICAgICAgIGlmIChkYXRhLnR5cGUgPT09IFwibWVzc2FnZVwiICYmIHRoaXMubWVzc2FnZUhhbmRsZXIpIHtcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhLnBheWxvYWQpKSB7XG4gICAgICAgICAgICBjb25zdCBtZXNzYWdlcyA9IGRhdGEucGF5bG9hZCBhcyBDaGF0TWVzc2FnZVtdO1xuICAgICAgICAgICAgLy8gQWRqdXN0IHRpbWVzdGFtcHMgdG8gYmUgcmVsYXRpdmUgdG8gY29udmVyc2F0aW9uIHN0YXJ0XG4gICAgICAgICAgICAvLyBBbHNvIG5vcm1hbGl6ZSBtZXNzYWdlX2lkIGZpZWxkIChiYWNrZW5kIG1pZ2h0IHNlbmQgJ2lkJyBpbnN0ZWFkIG9mICdtZXNzYWdlX2lkJylcbiAgICAgICAgICAgIGNvbnN0IGFkanVzdGVkTWVzc2FnZXMgPSBtZXNzYWdlc1xuICAgICAgICAgICAgICAubWFwKChtc2cpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBhZGp1c3RlZCA9IHRoaXMuYWRqdXN0TWVzc2FnZVRpbWVzdGFtcHMobXNnKTtcbiAgICAgICAgICAgICAgICAvLyBOb3JtYWxpemU6IGlmIGJhY2tlbmQgc2VuZHMgJ2lkJywgdXNlIGl0IGFzICdtZXNzYWdlX2lkJ1xuICAgICAgICAgICAgICAgIGlmICghYWRqdXN0ZWQubWVzc2FnZV9pZCAmJiAobXNnIGFzIGFueSkuaWQpIHtcbiAgICAgICAgICAgICAgICAgIGFkanVzdGVkLm1lc3NhZ2VfaWQgPSAobXNnIGFzIGFueSkuaWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBhZGp1c3RlZDtcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgLmZpbHRlcigobXNnKSA9PiBtc2cuc3BlYWtlciAhPT0gXCJjdXN0b21lclwiKTtcbiAgICAgICAgICAgIGFkanVzdGVkTWVzc2FnZXMuZm9yRWFjaCh0aGlzLm1lc3NhZ2VIYW5kbGVyKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgYWRqdXN0ZWRNZXNzYWdlID0gdGhpcy5hZGp1c3RNZXNzYWdlVGltZXN0YW1wcyhcbiAgICAgICAgICAgICAgZGF0YS5wYXlsb2FkIGFzIENoYXRNZXNzYWdlXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgLy8gTm9ybWFsaXplOiBpZiBiYWNrZW5kIHNlbmRzICdpZCcsIHVzZSBpdCBhcyAnbWVzc2FnZV9pZCdcbiAgICAgICAgICAgIGlmICghYWRqdXN0ZWRNZXNzYWdlLm1lc3NhZ2VfaWQgJiYgKGRhdGEucGF5bG9hZCBhcyBhbnkpLmlkKSB7XG4gICAgICAgICAgICAgIGFkanVzdGVkTWVzc2FnZS5tZXNzYWdlX2lkID0gKGRhdGEucGF5bG9hZCBhcyBhbnkpLmlkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFkanVzdGVkTWVzc2FnZS5zcGVha2VyICE9PSBcImN1c3RvbWVyXCIpIHtcbiAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlSGFuZGxlcihhZGp1c3RlZE1lc3NhZ2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChkYXRhLnR5cGUgPT09IFwidGFrZW92ZXJcIikge1xuICAgICAgICAgIC8vIEhhbmRsZSB0YWtlb3ZlciBldmVudFxuICAgICAgICAgIC8vIENyZWF0ZSBzcGVjaWFsIG1lc3NhZ2UgZm9yIHRoZSB0YWtlb3ZlciBpbmRpY2F0b3JcbiAgICAgICAgICBpZiAodGhpcy5tZXNzYWdlSGFuZGxlcikge1xuICAgICAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKSAvIDEwMDA7XG4gICAgICAgICAgICBjb25zdCB0YWtlb3Zlck1lc3NhZ2U6IENoYXRNZXNzYWdlID0ge1xuICAgICAgICAgICAgICBjcmVhdGVfdGltZTogbm93LFxuICAgICAgICAgICAgICBzdGFydF90aW1lOiB0aGlzLmNvbnZlcnNhdGlvbkNyZWF0ZVRpbWVcbiAgICAgICAgICAgICAgICA/IG5vdyAtIHRoaXMuY29udmVyc2F0aW9uQ3JlYXRlVGltZVxuICAgICAgICAgICAgICAgIDogMCxcbiAgICAgICAgICAgICAgZW5kX3RpbWU6IHRoaXMuY29udmVyc2F0aW9uQ3JlYXRlVGltZVxuICAgICAgICAgICAgICAgID8gbm93IC0gdGhpcy5jb252ZXJzYXRpb25DcmVhdGVUaW1lICsgMC4wMVxuICAgICAgICAgICAgICAgIDogMC4wMSxcbiAgICAgICAgICAgICAgc3BlYWtlcjogXCJzcGVjaWFsXCIsXG4gICAgICAgICAgICAgIHRleHQ6IFwiU3VwZXJ2aXNvciB0b29rIG92ZXJcIixcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLm1lc3NhZ2VIYW5kbGVyKHRha2VvdmVyTWVzc2FnZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gQ2FsbCB0aGUgdGFrZW92ZXIgaGFuZGxlciBpZiBwcm92aWRlZFxuICAgICAgICAgIGlmICh0aGlzLnRha2VvdmVySGFuZGxlcikge1xuICAgICAgICAgICAgdGhpcy50YWtlb3ZlckhhbmRsZXIoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZGF0YS50eXBlID09PSBcImZpbmFsaXplXCIpIHtcbiAgICAgICAgICAvLyBIYW5kbGUgZmluYWxpemVkIGV2ZW50XG4gICAgICAgICAgLy8gQ3JlYXRlIHNwZWNpYWwgbWVzc2FnZSBmb3IgdGhlIGZpbmFsaXplZCBpbmRpY2F0b3JcbiAgICAgICAgICBpZiAodGhpcy5tZXNzYWdlSGFuZGxlcikge1xuICAgICAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKSAvIDEwMDA7XG4gICAgICAgICAgICBjb25zdCBmaW5hbGl6ZWRNZXNzYWdlOiBDaGF0TWVzc2FnZSA9IHtcbiAgICAgICAgICAgICAgY3JlYXRlX3RpbWU6IG5vdyxcbiAgICAgICAgICAgICAgc3RhcnRfdGltZTogdGhpcy5jb252ZXJzYXRpb25DcmVhdGVUaW1lXG4gICAgICAgICAgICAgICAgPyBub3cgLSB0aGlzLmNvbnZlcnNhdGlvbkNyZWF0ZVRpbWVcbiAgICAgICAgICAgICAgICA6IDAsXG4gICAgICAgICAgICAgIGVuZF90aW1lOiB0aGlzLmNvbnZlcnNhdGlvbkNyZWF0ZVRpbWVcbiAgICAgICAgICAgICAgICA/IG5vdyAtIHRoaXMuY29udmVyc2F0aW9uQ3JlYXRlVGltZSArIDAuMDFcbiAgICAgICAgICAgICAgICA6IDAuMDEsXG4gICAgICAgICAgICAgIHNwZWFrZXI6IFwic3BlY2lhbFwiLFxuICAgICAgICAgICAgICB0ZXh0OiBcIkNvbnZlcnNhdGlvbiBGaW5hbGl6ZWRcIixcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLm1lc3NhZ2VIYW5kbGVyKGZpbmFsaXplZE1lc3NhZ2UpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIENhbGwgdGhlIGZpbmFsaXplZCBoYW5kbGVyIGlmIHByb3ZpZGVkXG4gICAgICAgICAgaWYgKHRoaXMuZmluYWxpemVkSGFuZGxlcikge1xuICAgICAgICAgICAgdGhpcy5maW5hbGl6ZWRIYW5kbGVyKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuaXNGaW5hbGl6ZWQgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuc2F2ZUNvbnZlcnNhdGlvbigpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAvLyBpZ25vcmVcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy53ZWJTb2NrZXQub25lcnJvciA9IChlcnJvcjogRXZlbnQpID0+IHtcbiAgICAgIGlmICh0aGlzLmNvbm5lY3Rpb25TdGF0ZUhhbmRsZXIpXG4gICAgICAgIHRoaXMuY29ubmVjdGlvblN0YXRlSGFuZGxlcihcImRpc2Nvbm5lY3RlZFwiKTtcbiAgICAgIFxuICAgICAgLy8gTG9nIGRpYWdub3N0aWNcbiAgICAgIGNvbnN0IGRpYWdub3N0aWMgPSBjcmVhdGVXZWJTb2NrZXREaWFnbm9zdGljKGVycm9yLCB3c1VybCk7XG4gICAgICBjb25zb2xlLmVycm9yKGBbR2VuQXNzaXN0IENoYXRdICR7ZGlhZ25vc3RpY31gKTtcbiAgICB9O1xuXG4gICAgdGhpcy53ZWJTb2NrZXQub25jbG9zZSA9IChldmVudDogQ2xvc2VFdmVudCkgPT4ge1xuICAgICAgaWYgKHRoaXMuY29ubmVjdGlvblN0YXRlSGFuZGxlcilcbiAgICAgICAgdGhpcy5jb25uZWN0aW9uU3RhdGVIYW5kbGVyKFwiZGlzY29ubmVjdGVkXCIpO1xuICAgICAgXG4gICAgICAvLyBMb2cgZGlhZ25vc3RpY1xuICAgICAgaWYgKCFldmVudC53YXNDbGVhbikge1xuICAgICAgICBjb25zdCBkaWFnbm9zdGljID0gY3JlYXRlV2ViU29ja2V0RGlhZ25vc3RpYyhldmVudCwgd3NVcmwpO1xuICAgICAgICBjb25zb2xlLndhcm4oYFtHZW5Bc3Npc3QgQ2hhdF0gJHtkaWFnbm9zdGljfWApO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBkaXNjb25uZWN0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLndlYlNvY2tldCkge1xuICAgICAgdGhpcy53ZWJTb2NrZXQuY2xvc2UoKTtcbiAgICAgIHRoaXMud2ViU29ja2V0ID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGZldGNoV2VsY29tZUltYWdlKGFnZW50SWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBpbWFnZVJlc3BvbnNlID0gYXdhaXQgYXhpb3MuZ2V0KFxuICAgICAgICBgJHt0aGlzLmJhc2VVcmx9L2FwaS9nZW5hZ2VudC9hZ2VudHMvY29uZmlncy8ke2FnZW50SWR9L3dlbGNvbWUtaW1hZ2VgLFxuICAgICAgICB7XG4gICAgICAgICAgaGVhZGVyczogdGhpcy5nZXRIZWFkZXJzKCksXG4gICAgICAgICAgcmVzcG9uc2VUeXBlOiBcImJsb2JcIixcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICAgIGNvbnN0IGJsb2JVcmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGltYWdlUmVzcG9uc2UuZGF0YSk7XG4gICAgICB0aGlzLndlbGNvbWVPYmplY3RVcmwgPSBibG9iVXJsO1xuICAgICAgdGhpcy53ZWxjb21lRGF0YS5pbWFnZVVybCA9IGJsb2JVcmw7XG4gICAgICBpZiAodGhpcy53ZWxjb21lRGF0YUhhbmRsZXIpIHtcbiAgICAgICAgdGhpcy53ZWxjb21lRGF0YUhhbmRsZXIodGhpcy53ZWxjb21lRGF0YSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgIGlmICh0aGlzLmlzVG9rZW5FeHBpcmVkRXJyb3IoZXJyKSkge1xuICAgICAgICB0aGlzLnJlc2V0Q29udmVyc2F0aW9uKCk7XG4gICAgICB9XG4gICAgICAvLyBpZ25vcmVcbiAgICB9XG4gIH1cblxuICAvLyBBZGQgZmVlZGJhY2sgdG8gYSBzcGVjaWZpYyBhZ2VudCBtZXNzYWdlIGluIHRoZSBjb252ZXJzYXRpb25cbiAgYXN5bmMgYWRkRmVlZGJhY2soXG4gICAgbWVzc2FnZUlkOiBzdHJpbmcsXG4gICAgZmVlZGJhY2s6IFwiZ29vZFwiIHwgXCJiYWRcIixcbiAgICBmZWVkYmFja19tZXNzYWdlPzogc3RyaW5nXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghbWVzc2FnZUlkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXNzYWdlIElEIGlzIHJlcXVpcmVkIGZvciBmZWVkYmFja1wiKTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgLy8gVXNlIG1lc3NhZ2UgSUQgaW4gdGhlIFVSTCBwYXRoLCBub3QgY29udmVyc2F0aW9uIElEXG4gICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLmJhc2VVcmx9L2FwaS9jb252ZXJzYXRpb25zL21lc3NhZ2UvYWRkLWZlZWRiYWNrLyR7bWVzc2FnZUlkfWA7XG4gICAgICAvLyBCb2R5IHNob3VsZCBvbmx5IGNvbnRhaW4gZmVlZGJhY2sgYW5kIGZlZWRiYWNrX21lc3NhZ2UgKG5vIG1lc3NhZ2VfaWQpXG4gICAgICBjb25zdCBwYXlsb2FkOiB7XG4gICAgICAgIGZlZWRiYWNrOiBcImdvb2RcIiB8IFwiYmFkXCI7XG4gICAgICAgIGZlZWRiYWNrX21lc3NhZ2U/OiBzdHJpbmc7XG4gICAgICB9ID0ge1xuICAgICAgICBmZWVkYmFjayxcbiAgICAgIH07XG4gICAgICBcbiAgICAgIGlmIChmZWVkYmFja19tZXNzYWdlKSB7XG4gICAgICAgIHBheWxvYWQuZmVlZGJhY2tfbWVzc2FnZSA9IGZlZWRiYWNrX21lc3NhZ2U7XG4gICAgICB9XG4gICAgICBcbiAgICAgIGF3YWl0IGF4aW9zLnBhdGNoKHVybCwgcGF5bG9hZCwge1xuICAgICAgICBoZWFkZXJzOiB0aGlzLmdldEhlYWRlcnMoKSxcbiAgICAgIH0pO1xuICAgICAgXG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgaWYgKHRoaXMuaXNUb2tlbkV4cGlyZWRFcnJvcihlcnJvcikpIHtcbiAgICAgICAgdGhpcy5yZXNldENvbnZlcnNhdGlvbigpO1xuICAgICAgfVxuICAgICAgY29uc29sZS5lcnJvcignRmVlZGJhY2sgQVBJIGNhbGwgZmFpbGVkOicsIHtcbiAgICAgICAgbWVzc2FnZTogZXJyb3IubWVzc2FnZSxcbiAgICAgICAgcmVzcG9uc2U6IGVycm9yLnJlc3BvbnNlPy5kYXRhLFxuICAgICAgICBzdGF0dXM6IGVycm9yLnJlc3BvbnNlPy5zdGF0dXMsXG4gICAgICB9KTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIC8vIEhlbHBlciBtZXRob2QgdG8gYWRqdXN0IG1lc3NhZ2UgdGltZXN0YW1wcyByZWxhdGl2ZSB0byBjb252ZXJzYXRpb24gc3RhcnRcbiAgcHJpdmF0ZSBhZGp1c3RNZXNzYWdlVGltZXN0YW1wcyhtZXNzYWdlOiBDaGF0TWVzc2FnZSk6IENoYXRNZXNzYWdlIHtcbiAgICBpZiAoIXRoaXMuY29udmVyc2F0aW9uQ3JlYXRlVGltZSkge1xuICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLm1lc3NhZ2UsXG4gICAgICBzdGFydF90aW1lOiBtZXNzYWdlLnN0YXJ0X3RpbWUgLSB0aGlzLmNvbnZlcnNhdGlvbkNyZWF0ZVRpbWUsXG4gICAgICBlbmRfdGltZTogbWVzc2FnZS5lbmRfdGltZSAtIHRoaXMuY29udmVyc2F0aW9uQ3JlYXRlVGltZSxcbiAgICB9O1xuICB9XG59XG4iXX0=
@@ -14,12 +14,18 @@ export interface ChatMessage {
14
14
  attachments?: Attachment[];
15
15
  message_id?: string;
16
16
  feedback?: MessageFeedback[];
17
+ type?: string;
17
18
  }
18
19
  export interface Attachment {
19
20
  name: string;
20
21
  type: string;
21
22
  size: number;
22
23
  url: string;
24
+ file_id?: string;
25
+ }
26
+ export interface AttachmentWithFile {
27
+ file: File;
28
+ attachment: Attachment | null;
23
29
  }
24
30
  export interface StartConversationResponse {
25
31
  message: string;
@@ -60,6 +66,12 @@ export interface ScheduleItem {
60
66
  title?: string | null;
61
67
  restaurants: DynamicChatItem[];
62
68
  }
69
+ export interface FileItem {
70
+ url: string;
71
+ type: string;
72
+ name: string;
73
+ id: string;
74
+ }
63
75
  export type ChatContentBlock = {
64
76
  kind: "text";
65
77
  text: string;
@@ -72,12 +84,16 @@ export type ChatContentBlock = {
72
84
  } | {
73
85
  kind: "options";
74
86
  options: string[];
87
+ } | {
88
+ kind: "file";
89
+ data: FileItem;
75
90
  };
76
91
  export interface GenAgentChatProps {
77
92
  baseUrl: string;
78
93
  apiKey: string;
79
94
  tenant: string | undefined;
80
95
  metadata?: Record<string, any>;
96
+ useWs?: boolean;
81
97
  onError?: (error: Error) => void;
82
98
  onTakeover?: () => void;
83
99
  onFinalize?: () => void;
@@ -90,6 +106,7 @@ export interface GenAgentChatProps {
90
106
  textColor?: string;
91
107
  };
92
108
  headerTitle?: string;
109
+ description?: string;
93
110
  placeholder?: string;
94
111
  agentName?: string;
95
112
  logoUrl?: string;
@@ -107,5 +124,19 @@ export interface GenAgentChatProps {
107
124
  translations?: Partial<Translations>;
108
125
  reCaptchaKey?: string;
109
126
  widget?: boolean;
127
+ useAudio?: boolean;
128
+ useFile?: boolean;
129
+ noColorAnimation?: boolean;
130
+ showWelcomeBeforeStart?: boolean;
131
+ allowedExtensions?: AllowedExtension[];
110
132
  }
133
+ export type AllowedExtension = 'image/*' | 'image/png' | 'image/jpeg' | 'image/jpg' | 'image/gif' | 'application/pdf' | 'application/msword' | 'application/vnd.openxmlformats-officedocument.wordprocessingml.document';
111
134
  export type { Translations } from '../utils/i18n';
135
+ export interface FileUploadResponse {
136
+ filename: string;
137
+ original_filename: string;
138
+ storage_path: string;
139
+ file_path: string;
140
+ file_url: string;
141
+ file_id?: string;
142
+ }
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRyYW5zbGF0aW9ucyB9IGZyb20gJy4uL3V0aWxzL2kxOG4nO1xuXG4vLyBDaGF0IG1lc3NhZ2UgdHlwZXNcbmV4cG9ydCBpbnRlcmZhY2UgTWVzc2FnZUZlZWRiYWNrIHtcbiAgZmVlZGJhY2s6IFwiZ29vZFwiIHwgXCJiYWRcIjtcbiAgZmVlZGJhY2tfdGltZXN0YW1wPzogc3RyaW5nO1xuICBmZWVkYmFja191c2VyX2lkPzogc3RyaW5nO1xuICBmZWVkYmFja19tZXNzYWdlPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENoYXRNZXNzYWdlIHtcbiAgY3JlYXRlX3RpbWU6IG51bWJlcjtcbiAgc3RhcnRfdGltZTogbnVtYmVyO1xuICBlbmRfdGltZTogbnVtYmVyO1xuICBzcGVha2VyOiBcImN1c3RvbWVyXCIgfCBcImFnZW50XCIgfCBcInNwZWNpYWxcIjtcbiAgdGV4dDogc3RyaW5nO1xuICBhdHRhY2htZW50cz86IEF0dGFjaG1lbnRbXTtcbiAgLy8gT3B0aW9uYWwgbWV0YWRhdGFcbiAgbWVzc2FnZV9pZD86IHN0cmluZztcbiAgZmVlZGJhY2s/OiBNZXNzYWdlRmVlZGJhY2tbXTtcbn1cblxuLy8gQXR0YWNobWVudCB0eXBlXG5leHBvcnQgaW50ZXJmYWNlIEF0dGFjaG1lbnQge1xuICBuYW1lOiBzdHJpbmc7XG4gIHR5cGU6IHN0cmluZztcbiAgc2l6ZTogbnVtYmVyO1xuICB1cmw6IHN0cmluZztcbn1cblxuLy8gQVBJIFJlc3BvbnNlIHR5cGVzXG5leHBvcnQgaW50ZXJmYWNlIFN0YXJ0Q29udmVyc2F0aW9uUmVzcG9uc2Uge1xuICBtZXNzYWdlOiBzdHJpbmc7XG4gIGNvbnZlcnNhdGlvbl9pZDogc3RyaW5nO1xuICBhZ2VudF93ZWxjb21lX21lc3NhZ2U/OiBzdHJpbmc7XG4gIGFnZW50X3Bvc3NpYmxlX3F1ZXJpZXM/OiBzdHJpbmdbXTtcbiAgYWdlbnRfd2VsY29tZV90aXRsZT86IHN0cmluZztcbiAgYWdlbnRfd2VsY29tZV9pbWFnZV91cmw/OiBzdHJpbmc7XG4gIGFnZW50X2lkPzogc3RyaW5nO1xuICBhZ2VudF90aGlua2luZ19waHJhc2VzPzogc3RyaW5nW107XG4gIGFnZW50X3RoaW5raW5nX3BocmFzZV9kZWxheT86IG51bWJlcjsgLy8gc2Vjb25kc1xuICBjcmVhdGVfdGltZT86IG51bWJlcjtcbiAgZ3Vlc3RfdG9rZW4/OiBzdHJpbmc7XG59XG5cbi8vIEFnZW50IHdlbGNvbWUvY29uZmlnIGluZm9cbmV4cG9ydCBpbnRlcmZhY2UgQWdlbnRXZWxjb21lRGF0YSB7XG4gIHRpdGxlPzogc3RyaW5nIHwgbnVsbDtcbiAgbWVzc2FnZT86IHN0cmluZyB8IG51bGw7XG4gIGltYWdlVXJsPzogc3RyaW5nIHwgbnVsbDtcbiAgcG9zc2libGVRdWVyaWVzPzogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWdlbnRUaGlua2luZ0NvbmZpZyB7XG4gIHBocmFzZXM6IHN0cmluZ1tdO1xuICBkZWxheU1zOiBudW1iZXI7IC8vIHJvdGF0aW9uIGRlbGF5IGluIG1zXG59XG5cbi8vIEludGVyYWN0aXZlIGNvbnRlbnQgdHlwZXNcbmV4cG9ydCBpbnRlcmZhY2UgRHluYW1pY0NoYXRJdGVtIHtcbiAgaWQ6IHN0cmluZztcbiAgaW1hZ2U/OiBzdHJpbmc7XG4gIHR5cGU/OiBzdHJpbmc7XG4gIGNhdGVnb3J5Pzogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICB2ZW51ZUlkPzogc3RyaW5nO1xuICBzbG90cz86IHN0cmluZ1tdO1xuICBzZWxlY3RlZFNsb3Q/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2NoZWR1bGVJdGVtIHtcbiAgaWQ6IHN0cmluZztcbiAgdGl0bGU/OiBzdHJpbmcgfCBudWxsO1xuICByZXN0YXVyYW50czogRHluYW1pY0NoYXRJdGVtW107XG59XG5cbmV4cG9ydCB0eXBlIENoYXRDb250ZW50QmxvY2sgPVxuICB8IHsga2luZDogXCJ0ZXh0XCI7IHRleHQ6IHN0cmluZyB9XG4gIHwgeyBraW5kOiBcIml0ZW1zXCI7IGl0ZW1zOiBEeW5hbWljQ2hhdEl0ZW1bXSB9XG4gIHwgeyBraW5kOiBcInNjaGVkdWxlXCI7IHNjaGVkdWxlOiBTY2hlZHVsZUl0ZW0gfVxuICB8IHsga2luZDogXCJvcHRpb25zXCI7IG9wdGlvbnM6IHN0cmluZ1tdIH07XG5cbi8vIFByb3BzIGZvciB0aGUgR2VuQWdlbnRDaGF0IGNvbXBvbmVudFxuZXhwb3J0IGludGVyZmFjZSBHZW5BZ2VudENoYXRQcm9wcyB7XG4gIGJhc2VVcmw6IHN0cmluZztcbiAgYXBpS2V5OiBzdHJpbmc7XG4gIHRlbmFudDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBtZXRhZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT47IC8vIEZvciBwYXNzaW5nIHVzZXIgaW5mb3JtYXRpb24gb3Igb3RoZXIgbWV0YWRhdGFcbiAgb25FcnJvcj86IChlcnJvcjogRXJyb3IpID0+IHZvaWQ7XG4gIG9uVGFrZW92ZXI/OiAoKSA9PiB2b2lkO1xuICBvbkZpbmFsaXplPzogKCkgPT4gdm9pZDtcbiAgdGhlbWU/OiB7XG4gICAgcHJpbWFyeUNvbG9yPzogc3RyaW5nO1xuICAgIHNlY29uZGFyeUNvbG9yPzogc3RyaW5nO1xuICAgIGZvbnRGYW1pbHk/OiBzdHJpbmc7XG4gICAgZm9udFNpemU/OiBzdHJpbmc7XG4gICAgYmFja2dyb3VuZENvbG9yPzogc3RyaW5nO1xuICAgIHRleHRDb2xvcj86IHN0cmluZztcbiAgfTtcbiAgaGVhZGVyVGl0bGU/OiBzdHJpbmc7XG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICBhZ2VudE5hbWU/OiBzdHJpbmc7IC8vIEN1c3RvbSBhZ2VudCBuYW1lIHRvIGRpc3BsYXkgaW5zdGVhZCBvZiBcIkFnZW50XCJcbiAgbG9nb1VybD86IHN0cmluZzsgLy8gQ3VzdG9tIGxvZ28gVVJMIHRvIGRpc3BsYXkgaW4gaGVhZGVyIGluc3RlYWQgb2YgZGVmYXVsdCBsb2dvXG4gIG1vZGU/OiBcImVtYmVkZGVkXCIgfCBcImZsb2F0aW5nXCIgfCBcImZ1bGxzY3JlZW5cIjtcbiAgZmxvYXRpbmdDb25maWc/OiB7XG4gICAgcG9zaXRpb24/OiBcImJvdHRvbS1yaWdodFwiIHwgXCJib3R0b20tbGVmdFwiIHwgXCJ0b3AtcmlnaHRcIiB8IFwidG9wLWxlZnRcIjtcbiAgICBvZmZzZXQ/OiB7IHg/OiBudW1iZXI7IHk/OiBudW1iZXIgfTtcbiAgICB0b2dnbGVCdXR0b25JY29uPzogUmVhY3QuUmVhY3RFbGVtZW50O1xuICAgIGNsb3NlQnV0dG9uSWNvbj86IFJlYWN0LlJlYWN0RWxlbWVudDtcbiAgfTtcbiAgbGFuZ3VhZ2U/OiBzdHJpbmc7IC8vIExhbmd1YWdlIGNvZGUgKGUuZy4sICdlbicsICdlcycsICdmcicpLiBJZiBub3QgcHJvdmlkZWQsIHdpbGwgdXNlIGJyb3dzZXIgbGFuZ3VhZ2VcbiAgdHJhbnNsYXRpb25zPzogUGFydGlhbDxUcmFuc2xhdGlvbnM+OyAvLyBDdXN0b20gdHJhbnNsYXRpb25zLiBJZiBub3QgcHJvdmlkZWQsIHdpbGwgdXNlIGRlZmF1bHQgRW5nbGlzaCB0cmFuc2xhdGlvbnNcbiAgcmVDYXB0Y2hhS2V5Pzogc3RyaW5nOyAvLyBSZUNhcHRjaGEga2V5IGZvciB0aGUgY2hhdFxuICB3aWRnZXQ/OiBib29sZWFuOyAvLyBJZiB0cnVlLCBvcGVucyBjaGF0IGluIGZ1bGxzY3JlZW4gbW9kZSBvbiBkZXNrdG9wIChzaW1pbGFyIHRvIG1vYmlsZSBiZWhhdmlvcilcbn1cblxuZXhwb3J0IHR5cGUgeyBUcmFuc2xhdGlvbnMgfSBmcm9tICcuLi91dGlscy9pMThuJztcbiJdfQ==
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRyYW5zbGF0aW9ucyB9IGZyb20gJy4uL3V0aWxzL2kxOG4nO1xuXG4vLyBDaGF0IG1lc3NhZ2UgdHlwZXNcbmV4cG9ydCBpbnRlcmZhY2UgTWVzc2FnZUZlZWRiYWNrIHtcbiAgZmVlZGJhY2s6IFwiZ29vZFwiIHwgXCJiYWRcIjtcbiAgZmVlZGJhY2tfdGltZXN0YW1wPzogc3RyaW5nO1xuICBmZWVkYmFja191c2VyX2lkPzogc3RyaW5nO1xuICBmZWVkYmFja19tZXNzYWdlPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENoYXRNZXNzYWdlIHtcbiAgY3JlYXRlX3RpbWU6IG51bWJlcjtcbiAgc3RhcnRfdGltZTogbnVtYmVyO1xuICBlbmRfdGltZTogbnVtYmVyO1xuICBzcGVha2VyOiBcImN1c3RvbWVyXCIgfCBcImFnZW50XCIgfCBcInNwZWNpYWxcIjtcbiAgdGV4dDogc3RyaW5nO1xuICBhdHRhY2htZW50cz86IEF0dGFjaG1lbnRbXTtcbiAgLy8gT3B0aW9uYWwgbWV0YWRhdGFcbiAgbWVzc2FnZV9pZD86IHN0cmluZztcbiAgZmVlZGJhY2s/OiBNZXNzYWdlRmVlZGJhY2tbXTtcbiAgdHlwZT86IHN0cmluZztcbn1cblxuLy8gQXR0YWNobWVudCB0eXBlXG5leHBvcnQgaW50ZXJmYWNlIEF0dGFjaG1lbnQge1xuICBuYW1lOiBzdHJpbmc7XG4gIHR5cGU6IHN0cmluZztcbiAgc2l6ZTogbnVtYmVyO1xuICB1cmw6IHN0cmluZztcbiAgZmlsZV9pZD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBdHRhY2htZW50V2l0aEZpbGUge1xuICBmaWxlOiBGaWxlO1xuICBhdHRhY2htZW50OiBBdHRhY2htZW50IHwgbnVsbDtcbn1cblxuLy8gQVBJIFJlc3BvbnNlIHR5cGVzXG5leHBvcnQgaW50ZXJmYWNlIFN0YXJ0Q29udmVyc2F0aW9uUmVzcG9uc2Uge1xuICBtZXNzYWdlOiBzdHJpbmc7XG4gIGNvbnZlcnNhdGlvbl9pZDogc3RyaW5nO1xuICBhZ2VudF93ZWxjb21lX21lc3NhZ2U/OiBzdHJpbmc7XG4gIGFnZW50X3Bvc3NpYmxlX3F1ZXJpZXM/OiBzdHJpbmdbXTtcbiAgYWdlbnRfd2VsY29tZV90aXRsZT86IHN0cmluZztcbiAgYWdlbnRfd2VsY29tZV9pbWFnZV91cmw/OiBzdHJpbmc7XG4gIGFnZW50X2lkPzogc3RyaW5nO1xuICBhZ2VudF90aGlua2luZ19waHJhc2VzPzogc3RyaW5nW107XG4gIGFnZW50X3RoaW5raW5nX3BocmFzZV9kZWxheT86IG51bWJlcjsgLy8gc2Vjb25kc1xuICBjcmVhdGVfdGltZT86IG51bWJlcjtcbiAgZ3Vlc3RfdG9rZW4/OiBzdHJpbmc7XG59XG5cbi8vIEFnZW50IHdlbGNvbWUvY29uZmlnIGluZm9cbmV4cG9ydCBpbnRlcmZhY2UgQWdlbnRXZWxjb21lRGF0YSB7XG4gIHRpdGxlPzogc3RyaW5nIHwgbnVsbDtcbiAgbWVzc2FnZT86IHN0cmluZyB8IG51bGw7XG4gIGltYWdlVXJsPzogc3RyaW5nIHwgbnVsbDtcbiAgcG9zc2libGVRdWVyaWVzPzogc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWdlbnRUaGlua2luZ0NvbmZpZyB7XG4gIHBocmFzZXM6IHN0cmluZ1tdO1xuICBkZWxheU1zOiBudW1iZXI7IC8vIHJvdGF0aW9uIGRlbGF5IGluIG1zXG59XG5cbi8vIEludGVyYWN0aXZlIGNvbnRlbnQgdHlwZXNcbmV4cG9ydCBpbnRlcmZhY2UgRHluYW1pY0NoYXRJdGVtIHtcbiAgaWQ6IHN0cmluZztcbiAgaW1hZ2U/OiBzdHJpbmc7XG4gIHR5cGU/OiBzdHJpbmc7XG4gIGNhdGVnb3J5Pzogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICB2ZW51ZUlkPzogc3RyaW5nO1xuICBzbG90cz86IHN0cmluZ1tdO1xuICBzZWxlY3RlZFNsb3Q/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2NoZWR1bGVJdGVtIHtcbiAgaWQ6IHN0cmluZztcbiAgdGl0bGU/OiBzdHJpbmcgfCBudWxsO1xuICByZXN0YXVyYW50czogRHluYW1pY0NoYXRJdGVtW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmlsZUl0ZW0ge1xuICB1cmw6IHN0cmluZztcbiAgdHlwZTogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIGlkOiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIENoYXRDb250ZW50QmxvY2sgPVxuICB8IHsga2luZDogXCJ0ZXh0XCI7IHRleHQ6IHN0cmluZyB9XG4gIHwgeyBraW5kOiBcIml0ZW1zXCI7IGl0ZW1zOiBEeW5hbWljQ2hhdEl0ZW1bXSB9XG4gIHwgeyBraW5kOiBcInNjaGVkdWxlXCI7IHNjaGVkdWxlOiBTY2hlZHVsZUl0ZW0gfVxuICB8IHsga2luZDogXCJvcHRpb25zXCI7IG9wdGlvbnM6IHN0cmluZ1tdIH1cbiAgfCB7IGtpbmQ6IFwiZmlsZVwiOyBkYXRhOiBGaWxlSXRlbSB9O1xuXG4vLyBQcm9wcyBmb3IgdGhlIEdlbkFnZW50Q2hhdCBjb21wb25lbnRcbmV4cG9ydCBpbnRlcmZhY2UgR2VuQWdlbnRDaGF0UHJvcHMge1xuICBiYXNlVXJsOiBzdHJpbmc7XG4gIGFwaUtleTogc3RyaW5nO1xuICB0ZW5hbnQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgbWV0YWRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+OyAvLyBGb3IgcGFzc2luZyB1c2VyIGluZm9ybWF0aW9uIG9yIG90aGVyIG1ldGFkYXRhXG4gIHVzZVdzPzogYm9vbGVhbjtcbiAgb25FcnJvcj86IChlcnJvcjogRXJyb3IpID0+IHZvaWQ7XG4gIG9uVGFrZW92ZXI/OiAoKSA9PiB2b2lkO1xuICBvbkZpbmFsaXplPzogKCkgPT4gdm9pZDtcbiAgdGhlbWU/OiB7XG4gICAgcHJpbWFyeUNvbG9yPzogc3RyaW5nO1xuICAgIHNlY29uZGFyeUNvbG9yPzogc3RyaW5nO1xuICAgIGZvbnRGYW1pbHk/OiBzdHJpbmc7XG4gICAgZm9udFNpemU/OiBzdHJpbmc7XG4gICAgYmFja2dyb3VuZENvbG9yPzogc3RyaW5nO1xuICAgIHRleHRDb2xvcj86IHN0cmluZztcbiAgfTtcbiAgaGVhZGVyVGl0bGU/OiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBwbGFjZWhvbGRlcj86IHN0cmluZztcbiAgYWdlbnROYW1lPzogc3RyaW5nOyAvLyBDdXN0b20gYWdlbnQgbmFtZSB0byBkaXNwbGF5IGluc3RlYWQgb2YgXCJBZ2VudFwiXG4gIGxvZ29Vcmw/OiBzdHJpbmc7IC8vIEN1c3RvbSBsb2dvIFVSTCB0byBkaXNwbGF5IGluIGhlYWRlciBpbnN0ZWFkIG9mIGRlZmF1bHQgbG9nb1xuICBtb2RlPzogXCJlbWJlZGRlZFwiIHwgXCJmbG9hdGluZ1wiIHwgXCJmdWxsc2NyZWVuXCI7XG4gIGZsb2F0aW5nQ29uZmlnPzoge1xuICAgIHBvc2l0aW9uPzogXCJib3R0b20tcmlnaHRcIiB8IFwiYm90dG9tLWxlZnRcIiB8IFwidG9wLXJpZ2h0XCIgfCBcInRvcC1sZWZ0XCI7XG4gICAgb2Zmc2V0PzogeyB4PzogbnVtYmVyOyB5PzogbnVtYmVyIH07XG4gICAgdG9nZ2xlQnV0dG9uSWNvbj86IFJlYWN0LlJlYWN0RWxlbWVudDtcbiAgICBjbG9zZUJ1dHRvbkljb24/OiBSZWFjdC5SZWFjdEVsZW1lbnQ7XG4gIH07XG4gIGxhbmd1YWdlPzogc3RyaW5nOyAvLyBMYW5ndWFnZSBjb2RlIChlLmcuLCAnZW4nLCAnZXMnLCAnZnInKS4gSWYgbm90IHByb3ZpZGVkLCB3aWxsIHVzZSBicm93c2VyIGxhbmd1YWdlXG4gIHRyYW5zbGF0aW9ucz86IFBhcnRpYWw8VHJhbnNsYXRpb25zPjsgLy8gQ3VzdG9tIHRyYW5zbGF0aW9ucy4gSWYgbm90IHByb3ZpZGVkLCB3aWxsIHVzZSBkZWZhdWx0IEVuZ2xpc2ggdHJhbnNsYXRpb25zXG4gIHJlQ2FwdGNoYUtleT86IHN0cmluZzsgLy8gUmVDYXB0Y2hhIGtleSBmb3IgdGhlIGNoYXRcbiAgd2lkZ2V0PzogYm9vbGVhbjsgLy8gSWYgdHJ1ZSwgb3BlbnMgY2hhdCBpbiBmdWxsc2NyZWVuIG1vZGUgb24gZGVza3RvcCAoc2ltaWxhciB0byBtb2JpbGUgYmVoYXZpb3IpXG4gIHVzZUF1ZGlvPzogYm9vbGVhbjsgLy8gSWYgZmFsc2UsIGhpZGVzIHRoZSBtaWMgY29tcG9uZW50IGFuZCB2b2ljZSBpbnB1dC4gRGVmYXVsdHMgdG8gZmFsc2UuXG4gIHVzZUZpbGU/OiBib29sZWFuOyAvLyBJZiBmYWxzZSwgaGlkZXMgdGhlIGZpbGUgYXR0YWNoIGljb24gYW5kIGZpbGUgdXBsb2FkLiBEZWZhdWx0cyB0byBmYWxzZS5cbiAgbm9Db2xvckFuaW1hdGlvbj86IGJvb2xlYW47IC8vIElmIHRydWUsIGhpZGVzIHRoZSBjb2xvciBhbmltYXRpb24gKGJhY2tsaWdodCkgYmVsb3cgdGhlIGNoYXQgaGVhZGVyLiBEZWZhdWx0cyB0byBmYWxzZS5cbiAgc2hvd1dlbGNvbWVCZWZvcmVTdGFydD86IGJvb2xlYW47XG4gIGFsbG93ZWRFeHRlbnNpb25zPzogQWxsb3dlZEV4dGVuc2lvbltdOyAvLyBJZiBwcm92aWRlZCwgb25seSBzaG93IGZpbGUgYXR0YWNobWVudHMgd2l0aCB0aGVzZSBleHRlbnNpb25zLiBEZWZhdWx0cyB0byBhbGwgZXh0ZW5zaW9ucy5cbn1cblxuLy8gTk9URTogVGhlc2UgYXJlIHRoZSBvbmx5IGZpbGUgZXh0ZW5zaW9ucyB0aGF0IGFyZSBzdXBwb3J0ZWQgYnkgdGhlIGNoYXQuXG5leHBvcnQgdHlwZSBBbGxvd2VkRXh0ZW5zaW9uID0gJ2ltYWdlLyonIHwgJ2ltYWdlL3BuZycgfCAnaW1hZ2UvanBlZycgfCAnaW1hZ2UvanBnJyB8ICdpbWFnZS9naWYnIHwgJ2FwcGxpY2F0aW9uL3BkZicgfCAnYXBwbGljYXRpb24vbXN3b3JkJyB8ICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC5kb2N1bWVudCc7XG5cbmV4cG9ydCB0eXBlIHsgVHJhbnNsYXRpb25zIH0gZnJvbSAnLi4vdXRpbHMvaTE4bic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmlsZVVwbG9hZFJlc3BvbnNlIHtcbiAgZmlsZW5hbWU6IHN0cmluZztcbiAgb3JpZ2luYWxfZmlsZW5hbWU6IHN0cmluZztcbiAgc3RvcmFnZV9wYXRoOiBzdHJpbmc7XG4gIGZpbGVfcGF0aDogc3RyaW5nO1xuICBmaWxlX3VybDogc3RyaW5nO1xuICBmaWxlX2lkPzogc3RyaW5nO1xufSJdfQ==
@@ -1,3 +1,3 @@
1
1
  import { ChatContentBlock } from "../types";
2
- export declare const parseInteractiveContentBlocks: (text: string) => ChatContentBlock[];
2
+ export declare const parseInteractiveContentBlocks: (text: string, messageType?: "message" | "file") => ChatContentBlock[];
3
3
  export declare const generateMessageContent: (blocks: ChatContentBlock[]) => string;
@@ -12,6 +12,14 @@ var isScheduleItem = function (value) {
12
12
  typeof value.id === "string" &&
13
13
  Array.isArray(value.restaurants));
14
14
  };
15
+ var isFileItem = function (value) {
16
+ return Boolean(value &&
17
+ typeof value === "object" &&
18
+ typeof value.url === "string" &&
19
+ typeof value.type === "string" &&
20
+ typeof value.name === "string" &&
21
+ typeof value.id === "string");
22
+ };
15
23
  var parseJsonBlock = function (jsonString) {
16
24
  try {
17
25
  var parsed = JSON.parse(jsonString);
@@ -27,8 +35,13 @@ var parseJsonBlock = function (jsonString) {
27
35
  }
28
36
  return null;
29
37
  };
30
- export var parseInteractiveContentBlocks = function (text) {
38
+ export var parseInteractiveContentBlocks = function (text, messageType) {
31
39
  var matches = [];
40
+ // case: file item or message type is file
41
+ if (isFileItem(text) || messageType && messageType === 'file') {
42
+ var cleanJson = text.replace(/\\/g, '');
43
+ return [{ kind: "file", data: JSON.parse(cleanJson) }];
44
+ }
32
45
  jsonBlockRegex.lastIndex = 0;
33
46
  var jsonMatch;
34
47
  while ((jsonMatch = jsonBlockRegex.exec(text)) !== null) {
@@ -118,4 +131,4 @@ export var generateMessageContent = function (blocks) {
118
131
  });
119
132
  return content;
120
133
  };
121
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJhY3RpdmVDb250ZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL2ludGVyYWN0aXZlQ29udGVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFTQSxJQUFNLGNBQWMsR0FBRyw2QkFBNkIsQ0FBQztBQUNyRCxJQUFNLFlBQVksR0FBRyxvQkFBb0IsQ0FBQztBQUUxQyxJQUFNLGlCQUFpQixHQUFHLFVBQUMsS0FBVTtJQUNuQyxPQUFPLE9BQU8sQ0FDWixLQUFLO1FBQ0wsT0FBTyxLQUFLLEtBQUssUUFBUTtRQUN6QixPQUFPLEtBQUssQ0FBQyxFQUFFLEtBQUssUUFBUTtRQUM1QixPQUFPLEtBQUssQ0FBQyxJQUFJLEtBQUssUUFBUSxDQUMvQixDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUYsSUFBTSxjQUFjLEdBQUcsVUFBQyxLQUFVO0lBQ2hDLE9BQU8sT0FBTyxDQUNaLEtBQUs7UUFDTCxPQUFPLEtBQUssS0FBSyxRQUFRO1FBQ3pCLE9BQU8sS0FBSyxDQUFDLEVBQUUsS0FBSyxRQUFRO1FBQzVCLEtBQUssQ0FBQyxPQUFPLENBQUUsS0FBYSxDQUFDLFdBQVcsQ0FBQyxDQUMxQyxDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUYsSUFBTSxjQUFjLEdBQUcsVUFBQyxVQUFrQjtJQUN4QyxJQUFJLENBQUM7UUFDSCxJQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3RDLElBQUksY0FBYyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDM0IsT0FBTyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDO1FBQ2hELENBQUM7UUFDRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUM7WUFDN0QsT0FBTyxFQUFFLElBQUksRUFBRSxP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LE1BQTBCO0lBQy9ELElBQUksT0FBTyxHQUFHLEVBQUUsQ0FBQztJQUVqQixNQUFNLENBQUMsT0FBTyxDQUFDLFVBQUMsS0FBSztRQUNuQixRQUFRLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNuQixLQUFLLE1BQU07Z0JBQ1QsT0FBTyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUM7Z0JBQ3RCLE1BQU07WUFDUixLQUFLLE9BQU87Z0JBQ1YsT0FBTyxJQUFJLG1CQUFlLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUM7Z0JBQ2hFLE1BQU07WUFDUixLQUFLLFVBQVU7Z0JBQ2IsT0FBTyxJQUFJLG1CQUFlLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUM7Z0JBQ25FLE1BQU07WUFDUixLQUFLLFNBQVM7Z0JBQ1osT0FBTyxJQUFJLGFBQU0sS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQUssQ0FBQztnQkFDL0MsTUFBTTtZQUNSO2dCQUNFLE1BQU07UUFDVixDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGF0Q29udGVudEJsb2NrLCBEeW5hbWljQ2hhdEl0ZW0sIFNjaGVkdWxlSXRlbSB9IGZyb20gXCIuLi90eXBlc1wiO1xuXG50eXBlIE1hdGNoUmVjb3JkID0ge1xuICBzdGFydDogbnVtYmVyO1xuICBlbmQ6IG51bWJlcjtcbiAgdHlwZTogXCJqc29uXCIgfCBcIm9wdGlvbnNcIjtcbiAgY29udGVudDogc3RyaW5nO1xufTtcblxuY29uc3QganNvbkJsb2NrUmVnZXggPSAvYGBganNvblxccyooW1xcc1xcU10qPylcXHMqYGBgL2c7XG5jb25zdCBvcHRpb25zUmVnZXggPSAvXFwqXFwqXFwqKC4qPylcXCpcXCpcXCovZztcblxuY29uc3QgaXNEeW5hbWljQ2hhdEl0ZW0gPSAodmFsdWU6IGFueSk6IHZhbHVlIGlzIER5bmFtaWNDaGF0SXRlbSA9PiB7XG4gIHJldHVybiBCb29sZWFuKFxuICAgIHZhbHVlICYmXG4gICAgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmXG4gICAgdHlwZW9mIHZhbHVlLmlkID09PSBcInN0cmluZ1wiICYmXG4gICAgdHlwZW9mIHZhbHVlLm5hbWUgPT09IFwic3RyaW5nXCJcbiAgKTtcbn07XG5cbmNvbnN0IGlzU2NoZWR1bGVJdGVtID0gKHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBTY2hlZHVsZUl0ZW0gPT4ge1xuICByZXR1cm4gQm9vbGVhbihcbiAgICB2YWx1ZSAmJlxuICAgIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJlxuICAgIHR5cGVvZiB2YWx1ZS5pZCA9PT0gXCJzdHJpbmdcIiAmJlxuICAgIEFycmF5LmlzQXJyYXkoKHZhbHVlIGFzIGFueSkucmVzdGF1cmFudHMpXG4gICk7XG59O1xuXG5jb25zdCBwYXJzZUpzb25CbG9jayA9IChqc29uU3RyaW5nOiBzdHJpbmcpOiBDaGF0Q29udGVudEJsb2NrIHwgbnVsbCA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShqc29uU3RyaW5nKTtcbiAgICBpZiAoaXNTY2hlZHVsZUl0ZW0ocGFyc2VkKSkge1xuICAgICAgcmV0dXJuIHsga2luZDogXCJzY2hlZHVsZVwiLCBzY2hlZHVsZTogcGFyc2VkIH07XG4gICAgfVxuICAgIGlmIChBcnJheS5pc0FycmF5KHBhcnNlZCkgJiYgcGFyc2VkLmV2ZXJ5KGlzRHluYW1pY0NoYXRJdGVtKSkge1xuICAgICAgcmV0dXJuIHsga2luZDogXCJpdGVtc1wiLCBpdGVtczogcGFyc2VkIH07XG4gICAgfVxuICB9IGNhdGNoIChfZXJyb3IpIHtcbiAgICAvLyBpZ25vcmUgbWFsZm9ybWVkIEpTT04gYmxvY2tzXG4gIH1cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5leHBvcnQgY29uc3QgcGFyc2VJbnRlcmFjdGl2ZUNvbnRlbnRCbG9ja3MgPSAoXG4gIHRleHQ6IHN0cmluZ1xuKTogQ2hhdENvbnRlbnRCbG9ja1tdID0+IHtcbiAgY29uc3QgbWF0Y2hlczogTWF0Y2hSZWNvcmRbXSA9IFtdO1xuXG4gIGpzb25CbG9ja1JlZ2V4Lmxhc3RJbmRleCA9IDA7XG4gIGxldCBqc29uTWF0Y2g6IFJlZ0V4cEV4ZWNBcnJheSB8IG51bGw7XG4gIHdoaWxlICgoanNvbk1hdGNoID0ganNvbkJsb2NrUmVnZXguZXhlYyh0ZXh0KSkgIT09IG51bGwpIHtcbiAgICBjb25zdCBmdWxsTWF0Y2ggPSBqc29uTWF0Y2hbMF07XG4gICAgY29uc3QgY29udGVudCA9IGpzb25NYXRjaFsxXTtcbiAgICBpZiAodHlwZW9mIGpzb25NYXRjaC5pbmRleCAhPT0gXCJudW1iZXJcIiB8fCAhY29udGVudCkgY29udGludWU7XG4gICAgbWF0Y2hlcy5wdXNoKHtcbiAgICAgIHN0YXJ0OiBqc29uTWF0Y2guaW5kZXgsXG4gICAgICBlbmQ6IGpzb25NYXRjaC5pbmRleCArIGZ1bGxNYXRjaC5sZW5ndGgsXG4gICAgICB0eXBlOiBcImpzb25cIixcbiAgICAgIGNvbnRlbnQsXG4gICAgfSk7XG4gIH1cblxuICBvcHRpb25zUmVnZXgubGFzdEluZGV4ID0gMDtcbiAgbGV0IG9wdGlvbnNNYXRjaDogUmVnRXhwRXhlY0FycmF5IHwgbnVsbDtcbiAgd2hpbGUgKChvcHRpb25zTWF0Y2ggPSBvcHRpb25zUmVnZXguZXhlYyh0ZXh0KSkgIT09IG51bGwpIHtcbiAgICBjb25zdCBmdWxsTWF0Y2ggPSBvcHRpb25zTWF0Y2hbMF07XG4gICAgY29uc3QgY29udGVudCA9IG9wdGlvbnNNYXRjaFsxXTtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnNNYXRjaC5pbmRleCAhPT0gXCJudW1iZXJcIiB8fCAhY29udGVudCkgY29udGludWU7XG4gICAgbWF0Y2hlcy5wdXNoKHtcbiAgICAgIHN0YXJ0OiBvcHRpb25zTWF0Y2guaW5kZXgsXG4gICAgICBlbmQ6IG9wdGlvbnNNYXRjaC5pbmRleCArIGZ1bGxNYXRjaC5sZW5ndGgsXG4gICAgICB0eXBlOiBcIm9wdGlvbnNcIixcbiAgICAgIGNvbnRlbnQsXG4gICAgfSk7XG4gIH1cblxuICBpZiAobWF0Y2hlcy5sZW5ndGggPT09IDApIHtcbiAgICBjb25zdCB0cmltbWVkID0gdGV4dC50cmltKCk7XG4gICAgcmV0dXJuIHRyaW1tZWQgPyBbeyBraW5kOiBcInRleHRcIiwgdGV4dDogdHJpbW1lZCB9XSA6IFtdO1xuICB9XG5cbiAgbWF0Y2hlcy5zb3J0KChhLCBiKSA9PiBhLnN0YXJ0IC0gYi5zdGFydCk7XG5cbiAgY29uc3QgYmxvY2tzOiBDaGF0Q29udGVudEJsb2NrW10gPSBbXTtcbiAgbGV0IGxhc3RJbmRleCA9IDA7XG5cbiAgbWF0Y2hlcy5mb3JFYWNoKChtYXRjaCkgPT4ge1xuICAgIGlmIChsYXN0SW5kZXggPCBtYXRjaC5zdGFydCkge1xuICAgICAgY29uc3QgYmVmb3JlID0gdGV4dC5zbGljZShsYXN0SW5kZXgsIG1hdGNoLnN0YXJ0KS50cmltKCk7XG4gICAgICBpZiAoYmVmb3JlKSB7XG4gICAgICAgIGJsb2Nrcy5wdXNoKHsga2luZDogXCJ0ZXh0XCIsIHRleHQ6IGJlZm9yZSB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobWF0Y2gudHlwZSA9PT0gXCJqc29uXCIpIHtcbiAgICAgIGNvbnN0IGJsb2NrID0gcGFyc2VKc29uQmxvY2sobWF0Y2guY29udGVudCk7XG4gICAgICBpZiAoYmxvY2spIHtcbiAgICAgICAgYmxvY2tzLnB1c2goYmxvY2spO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBvcHRpb25zID0gbWF0Y2guY29udGVudFxuICAgICAgICAuc3BsaXQoXCI7XCIpXG4gICAgICAgIC5tYXAoKG9wdCkgPT4gb3B0LnRyaW0oKSlcbiAgICAgICAgLmZpbHRlcihCb29sZWFuKTtcbiAgICAgIGlmIChvcHRpb25zLmxlbmd0aCkge1xuICAgICAgICBibG9ja3MucHVzaCh7IGtpbmQ6IFwib3B0aW9uc1wiLCBvcHRpb25zIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxhc3RJbmRleCA9IG1hdGNoLmVuZDtcbiAgfSk7XG5cbiAgaWYgKGxhc3RJbmRleCA8IHRleHQubGVuZ3RoKSB7XG4gICAgY29uc3QgYWZ0ZXIgPSB0ZXh0LnNsaWNlKGxhc3RJbmRleCkudHJpbSgpO1xuICAgIGlmIChhZnRlcikge1xuICAgICAgYmxvY2tzLnB1c2goeyBraW5kOiBcInRleHRcIiwgdGV4dDogYWZ0ZXIgfSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGJsb2Nrcztcbn07XG5cbmV4cG9ydCBjb25zdCBnZW5lcmF0ZU1lc3NhZ2VDb250ZW50ID0gKGJsb2NrczogQ2hhdENvbnRlbnRCbG9ja1tdKTogc3RyaW5nID0+IHtcbiAgbGV0IGNvbnRlbnQgPSBcIlwiO1xuXG4gIGJsb2Nrcy5mb3JFYWNoKChibG9jaykgPT4ge1xuICAgIHN3aXRjaCAoYmxvY2sua2luZCkge1xuICAgICAgY2FzZSBcInRleHRcIjpcbiAgICAgICAgY29udGVudCArPSBibG9jay50ZXh0O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJpdGVtc1wiOlxuICAgICAgICBjb250ZW50ICs9IGBcXGBcXGBcXGBqc29uXFxuJHtKU09OLnN0cmluZ2lmeShibG9jay5pdGVtcyl9XFxuXFxgXFxgXFxgYDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwic2NoZWR1bGVcIjpcbiAgICAgICAgY29udGVudCArPSBgXFxgXFxgXFxganNvblxcbiR7SlNPTi5zdHJpbmdpZnkoYmxvY2suc2NoZWR1bGUpfVxcblxcYFxcYFxcYGA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcIm9wdGlvbnNcIjpcbiAgICAgICAgY29udGVudCArPSBgKioqJHtibG9jay5vcHRpb25zLmpvaW4oXCI7IFwiKX0qKipgO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGNvbnRlbnQ7XG59O1xuIl19
134
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJhY3RpdmVDb250ZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL2ludGVyYWN0aXZlQ29udGVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFTQSxJQUFNLGNBQWMsR0FBRyw2QkFBNkIsQ0FBQztBQUNyRCxJQUFNLFlBQVksR0FBRyxvQkFBb0IsQ0FBQztBQUUxQyxJQUFNLGlCQUFpQixHQUFHLFVBQUMsS0FBVTtJQUNuQyxPQUFPLE9BQU8sQ0FDWixLQUFLO1FBQ0wsT0FBTyxLQUFLLEtBQUssUUFBUTtRQUN6QixPQUFPLEtBQUssQ0FBQyxFQUFFLEtBQUssUUFBUTtRQUM1QixPQUFPLEtBQUssQ0FBQyxJQUFJLEtBQUssUUFBUSxDQUMvQixDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUYsSUFBTSxjQUFjLEdBQUcsVUFBQyxLQUFVO0lBQ2hDLE9BQU8sT0FBTyxDQUNaLEtBQUs7UUFDTCxPQUFPLEtBQUssS0FBSyxRQUFRO1FBQ3pCLE9BQU8sS0FBSyxDQUFDLEVBQUUsS0FBSyxRQUFRO1FBQzVCLEtBQUssQ0FBQyxPQUFPLENBQUUsS0FBYSxDQUFDLFdBQVcsQ0FBQyxDQUMxQyxDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUYsSUFBTSxVQUFVLEdBQUcsVUFBQyxLQUFVO0lBQzVCLE9BQU8sT0FBTyxDQUNaLEtBQUs7UUFDTCxPQUFPLEtBQUssS0FBSyxRQUFRO1FBQ3pCLE9BQU8sS0FBSyxDQUFDLEdBQUcsS0FBSyxRQUFRO1FBQzdCLE9BQU8sS0FBSyxDQUFDLElBQUksS0FBSyxRQUFRO1FBQzlCLE9BQU8sS0FBSyxDQUFDLElBQUksS0FBSyxRQUFRO1FBQzlCLE9BQU8sS0FBSyxDQUFDLEVBQUUsS0FBSyxRQUFRLENBQzdCLENBQUM7QUFDSixDQUFDLENBQUM7QUFFRixJQUFNLGNBQWMsR0FBRyxVQUFDLFVBQWtCO0lBQ3hDLElBQUksQ0FBQztRQUNILElBQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxL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LFNBQVM7Z0JBQ1osT0FBTyxJQUFJLGFBQU0sS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQUssQ0FBQztnQkFDL0MsTUFBTTtZQUNSO2dCQUNFLE1BQU07UUFDVixDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGF0Q29udGVudEJsb2NrLCBEeW5hbWljQ2hhdEl0ZW0sIEZpbGVJdGVtLCBTY2hlZHVsZUl0ZW0gfSBmcm9tIFwiLi4vdHlwZXNcIjtcblxudHlwZSBNYXRjaFJlY29yZCA9IHtcbiAgc3RhcnQ6IG51bWJlcjtcbiAgZW5kOiBudW1iZXI7XG4gIHR5cGU6IFwianNvblwiIHwgXCJvcHRpb25zXCIgfCBcImZpbGVcIjtcbiAgY29udGVudDogc3RyaW5nO1xufTtcblxuY29uc3QganNvbkJsb2NrUmVnZXggPSAvYGBganNvblxccyooW1xcc1xcU10qPylcXHMqYGBgL2c7XG5jb25zdCBvcHRpb25zUmVnZXggPSAvXFwqXFwqXFwqKC4qPylcXCpcXCpcXCovZztcblxuY29uc3QgaXNEeW5hbWljQ2hhdEl0ZW0gPSAodmFsdWU6IGFueSk6IHZhbHVlIGlzIER5bmFtaWNDaGF0SXRlbSA9PiB7XG4gIHJldHVybiBCb29sZWFuKFxuICAgIHZhbHVlICYmXG4gICAgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmXG4gICAgdHlwZW9mIHZhbHVlLmlkID09PSBcInN0cmluZ1wiICYmXG4gICAgdHlwZW9mIHZhbHVlLm5hbWUgPT09IFwic3RyaW5nXCJcbiAgKTtcbn07XG5cbmNvbnN0IGlzU2NoZWR1bGVJdGVtID0gKHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBTY2hlZHVsZUl0ZW0gPT4ge1xuICByZXR1cm4gQm9vbGVhbihcbiAgICB2YWx1ZSAmJlxuICAgIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJlxuICAgIHR5cGVvZiB2YWx1ZS5pZCA9PT0gXCJzdHJpbmdcIiAmJlxuICAgIEFycmF5LmlzQXJyYXkoKHZhbHVlIGFzIGFueSkucmVzdGF1cmFudHMpXG4gICk7XG59O1xuXG5jb25zdCBpc0ZpbGVJdGVtID0gKHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBGaWxlSXRlbSA9PiB7XG4gIHJldHVybiBCb29sZWFuKFxuICAgIHZhbHVlICYmXG4gICAgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmXG4gICAgdHlwZW9mIHZhbHVlLnVybCA9PT0gXCJzdHJpbmdcIiAmJlxuICAgIHR5cGVvZiB2YWx1ZS50eXBlID09PSBcInN0cmluZ1wiICYmXG4gICAgdHlwZW9mIHZhbHVlLm5hbWUgPT09IFwic3RyaW5nXCIgJiZcbiAgICB0eXBlb2YgdmFsdWUuaWQgPT09IFwic3RyaW5nXCJcbiAgKTtcbn07XG5cbmNvbnN0IHBhcnNlSnNvbkJsb2NrID0gKGpzb25TdHJpbmc6IHN0cmluZyk6IENoYXRDb250ZW50QmxvY2sgfCBudWxsID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKGpzb25TdHJpbmcpO1xuICAgIGlmIChpc1NjaGVkdWxlSXRlbShwYXJzZWQpKSB7XG4gICAgICByZXR1cm4geyBraW5kOiBcInNjaGVkdWxlXCIsIHNjaGVkdWxlOiBwYXJzZWQgfTtcbiAgICB9XG4gICAgaWYgKEFycmF5LmlzQXJyYXkocGFyc2VkKSAmJiBwYXJzZWQuZXZlcnkoaXNEeW5hbWljQ2hhdEl0ZW0pKSB7XG4gICAgICByZXR1cm4geyBraW5kOiBcIml0ZW1zXCIsIGl0ZW1zOiBwYXJzZWQgfTtcbiAgICB9XG4gIH0gY2F0Y2ggKF9lcnJvcikge1xuICAgIC8vIGlnbm9yZSBtYWxmb3JtZWQgSlNPTiBibG9ja3NcbiAgfVxuICByZXR1cm4gbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCBwYXJzZUludGVyYWN0aXZlQ29udGVudEJsb2NrcyA9IChcbiAgdGV4dDogc3RyaW5nLFxuICBtZXNzYWdlVHlwZT86ICdtZXNzYWdlJyB8ICdmaWxlJ1xuKTogQ2hhdENvbnRlbnRCbG9ja1tdID0+IHtcbiAgY29uc3QgbWF0Y2hlczogTWF0Y2hSZWNvcmRbXSA9IFtdO1xuXG4gIC8vIGNhc2U6IGZpbGUgaXRlbSBvciBtZXNzYWdlIHR5cGUgaXMgZmlsZVxuICBpZiAoaXNGaWxlSXRlbSh0ZXh0KSB8fCBtZXNzYWdlVHlwZSAmJiBtZXNzYWdlVHlwZSA9PT0gJ2ZpbGUnKSB7XG4gICAgY29uc3QgY2xlYW5Kc29uID0gdGV4dC5yZXBsYWNlKC9cXFxcL2csICcnKTtcbiAgICByZXR1cm4gW3sga2luZDogXCJmaWxlXCIsIGRhdGE6IEpTT04ucGFyc2UoY2xlYW5Kc29uKSBhcyBGaWxlSXRlbSB9XTtcbiAgfVxuXG4gIGpzb25CbG9ja1JlZ2V4Lmxhc3RJbmRleCA9IDA7XG4gIGxldCBqc29uTWF0Y2g6IFJlZ0V4cEV4ZWNBcnJheSB8IG51bGw7XG4gIHdoaWxlICgoanNvbk1hdGNoID0ganNvbkJsb2NrUmVnZXguZXhlYyh0ZXh0KSkgIT09IG51bGwpIHtcbiAgICBjb25zdCBmdWxsTWF0Y2ggPSBqc29uTWF0Y2hbMF07XG4gICAgY29uc3QgY29udGVudCA9IGpzb25NYXRjaFsxXTtcbiAgICBpZiAodHlwZW9mIGpzb25NYXRjaC5pbmRleCAhPT0gXCJudW1iZXJcIiB8fCAhY29udGVudCkgY29udGludWU7XG4gICAgbWF0Y2hlcy5wdXNoKHtcbiAgICAgIHN0YXJ0OiBqc29uTWF0Y2guaW5kZXgsXG4gICAgICBlbmQ6IGpzb25NYXRjaC5pbmRleCArIGZ1bGxNYXRjaC5sZW5ndGgsXG4gICAgICB0eXBlOiBcImpzb25cIixcbiAgICAgIGNvbnRlbnQsXG4gICAgfSk7XG4gIH1cblxuICBvcHRpb25zUmVnZXgubGFzdEluZGV4ID0gMDtcbiAgbGV0IG9wdGlvbnNNYXRjaDogUmVnRXhwRXhlY0FycmF5IHwgbnVsbDtcbiAgd2hpbGUgKChvcHRpb25zTWF0Y2ggPSBvcHRpb25zUmVnZXguZXhlYyh0ZXh0KSkgIT09IG51bGwpIHtcbiAgICBjb25zdCBmdWxsTWF0Y2ggPSBvcHRpb25zTWF0Y2hbMF07XG4gICAgY29uc3QgY29udGVudCA9IG9wdGlvbnNNYXRjaFsxXTtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnNNYXRjaC5pbmRleCAhPT0gXCJudW1iZXJcIiB8fCAhY29udGVudCkgY29udGludWU7XG4gICAgbWF0Y2hlcy5wdXNoKHtcbiAgICAgIHN0YXJ0OiBvcHRpb25zTWF0Y2guaW5kZXgsXG4gICAgICBlbmQ6IG9wdGlvbnNNYXRjaC5pbmRleCArIGZ1bGxNYXRjaC5sZW5ndGgsXG4gICAgICB0eXBlOiBcIm9wdGlvbnNcIixcbiAgICAgIGNvbnRlbnQsXG4gICAgfSk7XG4gIH1cblxuICBpZiAobWF0Y2hlcy5sZW5ndGggPT09IDApIHtcbiAgICBjb25zdCB0cmltbWVkID0gdGV4dC50cmltKCk7XG4gICAgcmV0dXJuIHRyaW1tZWQgPyBbeyBraW5kOiBcInRleHRcIiwgdGV4dDogdHJpbW1lZCB9XSA6IFtdO1xuICB9XG5cbiAgbWF0Y2hlcy5zb3J0KChhLCBiKSA9PiBhLnN0YXJ0IC0gYi5zdGFydCk7XG5cbiAgY29uc3QgYmxvY2tzOiBDaGF0Q29udGVudEJsb2NrW10gPSBbXTtcbiAgbGV0IGxhc3RJbmRleCA9IDA7XG5cbiAgbWF0Y2hlcy5mb3JFYWNoKChtYXRjaCkgPT4ge1xuICAgIGlmIChsYXN0SW5kZXggPCBtYXRjaC5zdGFydCkge1xuICAgICAgY29uc3QgYmVmb3JlID0gdGV4dC5zbGljZShsYXN0SW5kZXgsIG1hdGNoLnN0YXJ0KS50cmltKCk7XG4gICAgICBpZiAoYmVmb3JlKSB7XG4gICAgICAgIGJsb2Nrcy5wdXNoKHsga2luZDogXCJ0ZXh0XCIsIHRleHQ6IGJlZm9yZSB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobWF0Y2gudHlwZSA9PT0gXCJqc29uXCIpIHtcbiAgICAgIGNvbnN0IGJsb2NrID0gcGFyc2VKc29uQmxvY2sobWF0Y2guY29udGVudCk7XG4gICAgICBpZiAoYmxvY2spIHtcbiAgICAgICAgYmxvY2tzLnB1c2goYmxvY2spO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBvcHRpb25zID0gbWF0Y2guY29udGVudFxuICAgICAgICAuc3BsaXQoXCI7XCIpXG4gICAgICAgIC5tYXAoKG9wdCkgPT4gb3B0LnRyaW0oKSlcbiAgICAgICAgLmZpbHRlcihCb29sZWFuKTtcbiAgICAgIGlmIChvcHRpb25zLmxlbmd0aCkge1xuICAgICAgICBibG9ja3MucHVzaCh7IGtpbmQ6IFwib3B0aW9uc1wiLCBvcHRpb25zIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxhc3RJbmRleCA9IG1hdGNoLmVuZDtcbiAgfSk7XG5cbiAgaWYgKGxhc3RJbmRleCA8IHRleHQubGVuZ3RoKSB7XG4gICAgY29uc3QgYWZ0ZXIgPSB0ZXh0LnNsaWNlKGxhc3RJbmRleCkudHJpbSgpO1xuICAgIGlmIChhZnRlcikge1xuICAgICAgYmxvY2tzLnB1c2goeyBraW5kOiBcInRleHRcIiwgdGV4dDogYWZ0ZXIgfSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGJsb2Nrcztcbn07XG5cbmV4cG9ydCBjb25zdCBnZW5lcmF0ZU1lc3NhZ2VDb250ZW50ID0gKGJsb2NrczogQ2hhdENvbnRlbnRCbG9ja1tdKTogc3RyaW5nID0+IHtcbiAgbGV0IGNvbnRlbnQgPSBcIlwiO1xuXG4gIGJsb2Nrcy5mb3JFYWNoKChibG9jaykgPT4ge1xuICAgIHN3aXRjaCAoYmxvY2sua2luZCkge1xuICAgICAgY2FzZSBcInRleHRcIjpcbiAgICAgICAgY29udGVudCArPSBibG9jay50ZXh0O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJpdGVtc1wiOlxuICAgICAgICBjb250ZW50ICs9IGBcXGBcXGBcXGBqc29uXFxuJHtKU09OLnN0cmluZ2lmeShibG9jay5pdGVtcyl9XFxuXFxgXFxgXFxgYDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwic2NoZWR1bGVcIjpcbiAgICAgICAgY29udGVudCArPSBgXFxgXFxgXFxganNvblxcbiR7SlNPTi5zdHJpbmdpZnkoYmxvY2suc2NoZWR1bGUpfVxcblxcYFxcYFxcYGA7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBcIm9wdGlvbnNcIjpcbiAgICAgICAgY29udGVudCArPSBgKioqJHtibG9jay5vcHRpb25zLmpvaW4oXCI7IFwiKX0qKipgO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGNvbnRlbnQ7XG59O1xuIl19