@hivegpt/hiveai-angular 0.0.49 → 0.0.51

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.
@@ -1,4 +1,3 @@
1
- import { __awaiter } from "tslib";
2
1
  // import { Platform } from '@angular/cdk/platform';
3
2
  import { HttpClient, HttpHeaders } from '@angular/common/http';
4
3
  import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, Input, Output, Renderer2, ViewChild, } from '@angular/core';
@@ -8,7 +7,6 @@ import { catchError, switchMap } from 'rxjs/operators';
8
7
  import { formatNow, formatTimeStamps } from '../../utils/utils';
9
8
  import { dev_environment, prod_environment } from '../../../environments/environment';
10
9
  import { ConversationService } from '../conversation.service';
11
- import * as marked from 'marked';
12
10
  export class ChatDrawerComponent {
13
11
  constructor(cdr, http, sanitizer, elementRef, renderer, conversation
14
12
  // private platform: Platform
@@ -602,17 +600,6 @@ export class ChatDrawerComponent {
602
600
  removeBodyOverflow() {
603
601
  this.renderer.removeClass(document.body, this.bodyOverflowClass);
604
602
  }
605
- handleMarkdown(markdownContent) {
606
- return __awaiter(this, void 0, void 0, function* () {
607
- if (markdownContent) {
608
- const htmlContent = yield marked.parse(markdownContent);
609
- return this.sanitizer.bypassSecurityTrustHtml(htmlContent);
610
- }
611
- else {
612
- return markdownContent;
613
- }
614
- });
615
- }
616
603
  getSpeakersByStaffIds(ids) {
617
604
  const url = `${this.environment.USERS_API}/events/${this.eventId}/users/get-by-staff-ids`;
618
605
  fetch(url, {
@@ -716,6 +703,40 @@ export class ChatDrawerComponent {
716
703
  return of(null);
717
704
  }));
718
705
  }
706
+ // events/${eventId}/users-connections
707
+ simpleMarkdownParser(markdown) {
708
+ // Convert headings
709
+ markdown = markdown.replace(/^###### (.*$)/gim, '<h6>$1</h6>');
710
+ markdown = markdown.replace(/^##### (.*$)/gim, '<h5>$1</h5>');
711
+ markdown = markdown.replace(/^#### (.*$)/gim, '<h4>$1</h4>');
712
+ markdown = markdown.replace(/^### (.*$)/gim, '<h3>$1</h3>');
713
+ markdown = markdown.replace(/^## (.*$)/gim, '<h2>$1</h2>');
714
+ markdown = markdown.replace(/^# (.*$)/gim, '<h1>$1</h1>');
715
+ // Convert bold and italic
716
+ markdown = markdown.replace(/\*\*\*(.*?)\*\*\*/gim, '<em><strong>$1</strong></em>');
717
+ markdown = markdown.replace(/\*\*(.*?)\*\*/gim, '<strong>$1</strong>');
718
+ markdown = markdown.replace(/\*(.*?)\*/gim, '<em>$1</em>');
719
+ // Convert links
720
+ markdown = markdown.replace(/\[(.*?)\]\((.*?)\)/gim, '<a href="$2">$1</a>');
721
+ // Convert unordered lists
722
+ markdown = markdown.replace(/^\* (.*)/gim, '<ul><li>$1</li></ul>');
723
+ markdown = markdown.replace(/^\- (.*)/gim, '<ul><li>$1</li></ul>');
724
+ markdown = markdown.replace(/^\+ (.*)/gim, '<ul><li>$1</li></ul>');
725
+ // Convert ordered lists
726
+ markdown = markdown.replace(/^\d+\. (.*)/gim, '<ol><li>$1</li></ol>');
727
+ // Convert line breaks
728
+ markdown = markdown.replace(/\n/gim, '<br/>');
729
+ return markdown.trim();
730
+ }
731
+ handleMarkdown(markdownContent) {
732
+ if (markdownContent) {
733
+ const htmlContent = this.simpleMarkdownParser(markdownContent);
734
+ return this.sanitizer.bypassSecurityTrustHtml(htmlContent);
735
+ }
736
+ else {
737
+ return markdownContent;
738
+ }
739
+ }
719
740
  }
720
741
  ChatDrawerComponent.decorators = [
721
742
  { type: Component, args: [{
@@ -784,4 +805,4 @@ ChatDrawerComponent.propDecorators = {
784
805
  connectWithUser: [{ type: Output }],
785
806
  scheduleMeeting: [{ type: Output }]
786
807
  };
787
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC1kcmF3ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IkQ6L2hpdmVHUFQtQUktcGFja2FnZXMvSGl2ZUFJLVBhY2thZ2VzL3Byb2plY3RzL2hpdmVncHQvZXZlbnRzZ3B0LWFuZ3VsYXIvc3JjLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudHMvY2hhdC1kcmF3ZXIvY2hhdC1kcmF3ZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxvREFBb0Q7QUFDcEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMvRCxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUNOLFNBQVMsRUFDVCxTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLFlBQVksRUFBWSxNQUFNLDJCQUEyQixDQUFDO0FBQ25FLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUIsT0FBTyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDaEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRTlELE9BQU8sS0FBSyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBT2pDLE1BQU0sT0FBTyxtQkFBbUI7SUFxRjlCLFlBQ1UsR0FBc0IsRUFDdEIsSUFBZ0IsRUFDaEIsU0FBdUIsRUFDdkIsVUFBc0IsRUFDdEIsUUFBbUIsRUFDbkIsWUFBaUM7SUFDekMsNkJBQTZCOztRQU5yQixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUN0QixT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QUs7NEJBQ0wsTUFBTTsyQkFDTixNQUFNO3VCQUNOLE1BQU07NkJBQ04sTUFBTTt1QkFDTixNQUFNOzhCQUNOLE1BQU07OEJBQ04sTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIi8vIGltcG9ydCB7IFBsYXRmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BsYXRmb3JtJztcclxuaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEhlYWRlcnMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7XHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIElucHV0LFxyXG4gIE9uSW5pdCxcclxuICBPdXRwdXQsXHJcbiAgUmVuZGVyZXIyLFxyXG4gIFZpZXdDaGlsZCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWF0RHJhd2VyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2lkZW5hdic7XHJcbmltcG9ydCB7IERvbVNhbml0aXplciwgU2FmZUh0bWwgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcclxuaW1wb3J0IHsgb2YgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgY2F0Y2hFcnJvciwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBmb3JtYXROb3csIGZvcm1hdFRpbWVTdGFtcHMgfSBmcm9tICcuLi8uLi91dGlscy91dGlscyc7XHJcbmltcG9ydCB7IGRldl9lbnZpcm9ubWVudCwgcHJvZF9lbnZpcm9ubWVudCB9IGZyb20gJy4uLy4uLy4uL2Vudmlyb25tZW50cy9lbnZpcm9ubWVudCc7XHJcbmltcG9ydCB7IENvbnZlcnNhdGlvblNlcnZpY2UgfSBmcm9tICcuLi9jb252ZXJzYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0ICogYXMgbWFya2VkIGZyb20gJ21hcmtlZCc7XHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnaGl2ZWdwdC1jaGF0LWRyYXdlcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2NoYXQtZHJhd2VyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9jaGF0LWRyYXdlci5jb21wb25lbnQuc2NzcyddLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ2hhdERyYXdlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgQFZpZXdDaGlsZCgnY2hhdE1haW4nKSBwcml2YXRlIGNoYXRNYWluOiBFbGVtZW50UmVmO1xyXG5cclxuICBAVmlld0NoaWxkKCdkcmF3ZXInKSBkcmF3ZXIhOiBNYXREcmF3ZXI7XHJcbiAgcHJpdmF0ZSBib2R5T3ZlcmZsb3dDbGFzcyA9ICdib2R5LW92ZXJmbG93LWhpZGRlbic7XHJcbiAgQFZpZXdDaGlsZCgnbXlUZXh0YXJlYScsIHsgc3RhdGljOiBmYWxzZSB9KVxyXG4gIG15VGV4dGFyZWEhOiBFbGVtZW50UmVmPEhUTUxUZXh0QXJlYUVsZW1lbnQ+OyAvLyBSZWZlcmVuY2UgdG8gdGhlIHRleHRhcmVhXHJcblxyXG4gIEBJbnB1dCgpIGNvcGlsb3ROYW1lOiBzdHJpbmcgPSBcIkhpdmVYR1BUXCI7XHJcbiAgQElucHV0KCkgZmlyc3ROYW1lITogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGxhc3ROYW1lITogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGFwaUtleSE6IHN0cmluZztcclxuICBASW5wdXQoKSBiZ0J1YmJsZUFpITogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGJnQnViYmxlVXNlciE6IHN0cmluZztcclxuICBASW5wdXQoKSBiZ0dyYWRpZW50ITogc3RyaW5nW107XHJcbiAgQElucHV0KCkgYm90TmFtZSE6IHN0cmluZztcclxuICBASW5wdXQoKSBib3RTa2lsbHMhOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgYm90SWQhOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgY2xvc2VCdXR0b25Db2xvciE6IHN0cmluZztcclxuICBASW5wdXQoKSBjbG9zZUJ1dHRvbmJnQ29sb3IhOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgY3JlZGVudGlhbHMhOiBbXTtcclxuICBASW5wdXQoKSBkYXRlVGltZUNvbG9yITogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGRhdGVUZXh0Q29sb3IhOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgZXZlbnRJZCE6IHN0cmluZztcclxuICBASW5wdXQoKSBzMjdVc2VyVG9rZW4hOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgZXZlbnROYW1lITogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGJvdEljb24hOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgZm9ybUZpZWxkQmdDb2xvciE6IHN0cmluZztcclxuICBASW5wdXQoKSBmb3JtRmllbGRUZXh0Q29sb3IhOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgZnVsbFZpZXchOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGdyYWRpZW50Q29sb3JzITogc3RyaW5nW107XHJcbiAgQElucHV0KCkgZ3JlZXRpbmchOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgbWVzc2FnZVRleHRDb2xvckFpITogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIG1lc3NhZ2VUZXh0Q29sb3JVc2VyITogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHJ1bGVzITogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHNlbmRCdXR0b25Db2xvciE6IHN0cmluZztcclxuICBASW5wdXQoKSBzZW5kQnV0dG9uVGV4dENvbG9yITogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHNob3dDbG9zZSE6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgdGh1bWJzRG93bk1lc3NhZ2VzITogc3RyaW5nW107XHJcbiAgQElucHV0KCkgdGh1bWJzVXBNZXNzYWdlITogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHRpbWV6b25lITogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHVua25vd25SZXNwb25zZXMhOiBbXTtcclxuICBASW5wdXQoKSB1c2VPcGVuQWkhOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIHVzZXJJZCE6IHN0cmluZztcclxuICBASW5wdXQoKSBpc0RldiE6IGJvb2xlYW47XHJcblxyXG4gIEBJbnB1dCgpIGFnYWluQnV0dG9uQ29sb3IhOiBzdHJpbmdbXTtcclxuICBASW5wdXQoKSBhZ2FpbkJ1dHRvblRleHRDb2xvciE6IHN0cmluZ1tdO1xyXG4gIEBPdXRwdXQoKSBmZWVkYmFja0V2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcbiAgQE91dHB1dCgpIG9uQ2xvc2VFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuICBAT3V0cHV0KCkgb3BlblBhZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgc2Vzc2lvbkFjdGlvbnMgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgY2xvc2VCb3QgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgY29ubmVjdFdpdGhVc2VyID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIHNjaGVkdWxlTWVldGluZyA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG5cclxuICBhdXRvZ2VuS2V5ID0gXCJBdXRvZ2VuX2VESlR0RVUtTkIwUnRJcHpxMXdcIlxyXG4gIGFkZFRvTXlBZ2VuZGFBY3Rpb24gPSBcImFkZF90b19teV9hZ2VuZGFcIjtcclxuICBteVVwY29taW5nU2Vzc2lvbkFjdGlvbiA9IFwibXlfdXBjb21taW5nX3Nlc3Npb25cIjtcclxuICBjb25uZWN0T3JGb2xsb3dBY3Rpb24gPSBcImNvbm5lY3Rfb3JfZm9sbG93XCI7XHJcbiAgYWlSZXNwb25zZTogc3RyaW5nID0gJyc7XHJcbiAgY2hhdExvZzogYW55W10gPSBbXTtcclxuICBkZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKCk7XHJcbiAgZmVlZGJhY2tEb25lOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZ3JlZXRpbmdNc2c6IHN0cmluZyA9ICcnO1xyXG4gIGhhc0JhY2tkcm9wVmFsdWU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpbnB1dDogc3RyaW5nID0gJyc7XHJcbiAgbGlzdGVuZXJBZGRlZCA9IGZhbHNlO1xyXG4gIGxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBtb2RlOiBzdHJpbmcgPSAnb3Zlcic7XHJcbiAgcXVpY2tQcm9tcHRzOiBhbnlbXSA9IFtdO1xyXG4gIHRodW1ic0Rvd25Nc2dJbmRleCA9IDA7XHJcbiAgdXNlck5hbWU6IHN0cmluZyA9ICcnO1xyXG4gIHNob3dTdGFydEFnYWluOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaXNJT1NEZXZpY2U6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzaG93RmVlZEJhY2tJY29uc0luZGV4OiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuICB0ZW1wZXJhdHVyZTogbnVtYmVyID0gMTtcclxuICBzcGVha2VycyA9IFtdO1xyXG4gIGVudmlyb25tZW50OiB7XHJcbiAgICBVU0VSU19BUEksXHJcbiAgICBCQVNFX1VSTFxyXG4gIH07XHJcbiAgcGVuZGluZ1JlcXVlc3RzOiBhbnk7XHJcbiAgbXlDb25uZWN0aW9uczogYW55O1xyXG4gIGNvbnZlcnNhdGlvbktleTogc3RyaW5nO1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxyXG4gICAgcHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplcixcclxuICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZixcclxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcclxuICAgIHByaXZhdGUgY29udmVyc2F0aW9uOiBDb252ZXJzYXRpb25TZXJ2aWNlXHJcbiAgICAvLyBwcml2YXRlIHBsYXRmb3JtOiBQbGF0Zm9ybVxyXG4gICkge1xyXG4gICAgdGhpcy5jaGF0TWFpbiA9IG5ldyBFbGVtZW50UmVmKG51bGwpO1xyXG5cclxuICAgIC8vIGlmICh0aGlzLnBsYXRmb3JtLklPUykge1xyXG4gICAgLy8gICB0aGlzLmlzSU9TRGV2aWNlID0gdHJ1ZTtcclxuICAgIC8vIH1cclxuXHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuZW52aXJvbm1lbnQgPSB0aGlzLmlzRGV2ID8gZGV2X2Vudmlyb25tZW50IDogcHJvZF9lbnZpcm9ubWVudDtcclxuXHJcbiAgICAvLyB0aGlzLmZldGNoTXlDb25uZWN0aW9ucygpLnN1YnNjcmliZSgpO1xyXG4gICAgLy8gdGhpcy5mZXRjaFBlbmRpbmdSZXF1ZXN0cygpLnN1YnNjcmliZSgpO1xyXG5cclxuICAgIHRoaXMuY2hhbmdlVGVtcGVyYXR1cmUodGhpcy50ZW1wZXJhdHVyZSk7XHJcbiAgICB0aGlzLmZldGNoQm90Q29uZmlnKCkuc3Vic2NyaWJlKFxyXG4gICAgICAocmVzKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgdGhpcy5mZXRjaENoYXRIaXN0b3J5KCkuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLm1hcENoYXRIaXN0b3J5KHJlc3BvbnNlKTtcclxuICAgICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgKGVycikgPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyBjaGF0IGhpc3Rvcnk6JywgZXJyKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgICB9LFxyXG4gICAgICAoZXJyKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgY2hhdCBoaXN0b3J5OicsIGVycik7XHJcbiAgICAgIH1cclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG5cclxuICBjaGFuZ2VUZW1wZXJhdHVyZShuZXdUZW1wZXJhdHVyZTogbnVtYmVyKSB7XHJcbiAgICBpZiAodGhpcy5sb2FkaW5nKSByZXR1cm47XHJcbiAgICB0aGlzLnRlbXBlcmF0dXJlID0gbmV3VGVtcGVyYXR1cmU7XHJcbiAgICBjb25zdCB3cmFwcGVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmhpdmVncHQtY2hhdC13cmFwcGVyJylcclxuICAgIC8vIFJlbW92ZSBleGlzdGluZyB0aGVtZSBjbGFzc2VzIGZyb20gYm9keVxyXG4gICAgd3JhcHBlcj8uY2xhc3NMaXN0LnJlbW92ZSgnY3JlYXRpdmUnLCAnYmFsYW5jZWQnLCAncHJlY2lzZScpO1xyXG5cclxuICAgIHN3aXRjaCAobmV3VGVtcGVyYXR1cmUpIHtcclxuICAgICAgY2FzZSAwOlxyXG4gICAgICAgIHdyYXBwZXI/LmNsYXNzTGlzdC5hZGQoJ2NyZWF0aXZlJyk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgMTpcclxuICAgICAgICB3cmFwcGVyPy5jbGFzc0xpc3QuYWRkKCdiYWxhbmNlZCcpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDI6XHJcbiAgICAgICAgd3JhcHBlcj8uY2xhc3NMaXN0LmFkZCgncHJlY2lzZScpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25TdGFydEFnYWluKCkge1xyXG4gICAgaWYgKHRoaXMubG9hZGluZykgcmV0dXJuO1xyXG4gICAgdGhpcy5zaG93U3RhcnRBZ2FpbiA9IGZhbHNlO1xyXG4gICAgdGhpcy5jaGF0TG9nID0gW107XHJcbiAgICB0aGlzLmNoYXRMb2cucHVzaCh7XHJcbiAgICAgIHR5cGU6ICdhaScsXHJcbiAgICAgIG1lc3NhZ2U6XHJcbiAgICAgICAgdGhpcy5ncmVldGluZ01zZyB8fFxyXG4gICAgICAgIHRoaXMucHJvY2Vzc01lc3NhZ2UoXHJcbiAgICAgICAgICBcIkdyZWV0aW5ncyEgSSdtIHlvdXIgQ09QMjggdmlydHVhbCBhc3Npc3RhbnQuIEhhdmUgcXVlc3Rpb25zIGFib3V0IHRoZSBldmVudD8gSSdtIGhlcmUgdG8gaGVscC5cIlxyXG4gICAgICAgICksXHJcbiAgICAgIHRpbWU6IGZvcm1hdE5vdyh0aGlzLnRpbWV6b25lKSxcclxuICAgIH0pO1xyXG4gICAgdGhpcy5hcmNoaWV2ZU1lc3NhZ2VzKCkuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBhcmNoaWV2ZU1lc3NhZ2VzKCkge1xyXG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycyh7XHJcbiAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXHJcbiAgICAgICd4LWFwaS1rZXknOiB0aGlzLmFwaUtleSxcclxuICAgIH0pO1xyXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5lbnZpcm9ubWVudC5CQVNFX1VSTH0vYm90L2NsZWFyLWhpc3RvcnkvJHt0aGlzLmJvdElkfS8ke3RoaXMudXNlcklkfWA7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QodXJsLCB7fSwgeyBoZWFkZXJzIH0pLnBpcGUoXHJcbiAgICAgIHN3aXRjaE1hcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICByZXR1cm4gb2YocmVzKTtcclxuICAgICAgfSksXHJcbiAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGZldGNoQm90Q29uZmlnKCkge1xyXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgIGNvbnN0IHVybCA9IGAke3RoaXMuZW52aXJvbm1lbnQuQkFTRV9VUkx9L2JvdHM/Ym90X2lkPSR7dGhpcy5ib3RJZH1gO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQodXJsKS5waXBlKFxyXG4gICAgICBzd2l0Y2hNYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5ib3ROYW1lID0gcmVzLk5hbWU7XHJcbiAgICAgICAgdGhpcy5ib3RJY29uID0gcmVzLkljb247XHJcbiAgICAgICAgdGhpcy5ib3RTa2lsbHMgPSByZXM/LlNraWxscztcclxuICAgICAgICB0aGlzLmdyZWV0aW5nTXNnID0gcmVzLkdyZWV0aW5nO1xyXG5cclxuICAgICAgICB0aGlzLnRodW1ic0Rvd25NZXNzYWdlcyA9IHJlcz8uTmVnYXRpdmVSZXNwb25zZXM/Lmxlbmd0aFxyXG4gICAgICAgICAgPyByZXMuTmVnYXRpdmVSZXNwb25zZXNcclxuICAgICAgICAgIDogW1xyXG4gICAgICAgICAgICBcIldlIGFyZSBzb3JyeSB3ZSd2ZSBub3QgYmVlbiBhYmxlIHRvIGFuc3dlciB5b3VyIHF1ZXN0aW9uLjxici8+IEhvd2V2ZXIsIG91ciBkZWRpY2F0ZWQgc3VwcG9ydCB0ZWFtIGlzIGhhcHB5IHRvIGhlbHAuIDxzcGFuIGNsYXNzPSdmZWVkYmFjay1saW5rJyBzdHlsZT0nY3Vyc29yOiBwb2ludGVyOyB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsgZm9udC13ZWlnaHQ6IDcwMDsgY29sb3I6ICMxNzIzNUI7Jz5QbGVhc2UgY2xpY2sgaGVyZTwvc3Bhbj4gYW5kIGEgaHVtYW4gYWdlbnQgd2lsbCBhc3Npc3QgeW91IGFzIHNvb24gYXMgcG9zc2libGVcIixcclxuICAgICAgICAgIF07XHJcbiAgICAgICAgdGhpcy5xdWlja1Byb21wdHMgPSByZXMuUXVpY2tQcm9tcHRzO1xyXG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHJldHVybiBvZihyZXMpO1xyXG4gICAgICB9KSxcclxuICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyBjaGF0Ym90IGNvbmZpZzogJywgZXJyb3IpO1xyXG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHJldHVybiBvZihudWxsKTtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBmZXRjaENoYXRIaXN0b3J5KCk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5jb252ZXJzYXRpb25LZXkgPSB0aGlzLmNvbnZlcnNhdGlvbi5nZXRLZXkodGhpcy5ib3RJZCk7XHJcbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLmVudmlyb25tZW50LkJBU0VfVVJMfS9jb252ZXJzYXRpb25zLyR7dGhpcy5jb252ZXJzYXRpb25LZXl9YDtcclxuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoe1xyXG4gICAgICAnYWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24nXHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldCh1cmwsIHsgaGVhZGVycyB9KS5waXBlKFxyXG4gICAgICBjYXRjaEVycm9yKHRoaXMuaGFuZGxlRXJyb3I8YW55PignZmV0Y2hDb252ZXJzYXRpb24nKSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZUVycm9yPFQ+KG9wZXJhdGlvbiA9ICdvcGVyYXRpb24nLCByZXN1bHQ/OiBUKSB7XHJcbiAgICByZXR1cm4gKGVycm9yOiBhbnkpOiBPYnNlcnZhYmxlPFQ+ID0+IHtcclxuICAgICAgY29uc29sZS5lcnJvcihgJHtvcGVyYXRpb259IGZhaWxlZDogJHtlcnJvci5tZXNzYWdlfWApO1xyXG4gICAgICByZXR1cm4gb2YocmVzdWx0IGFzIFQpO1xyXG4gICAgfTtcclxuICB9XHJcbiAgLy8gZmV0Y2hDaGF0SGlzdG9yeSgpIHtcclxuICAvLyAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgLy8gICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKHtcclxuICAvLyAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcclxuICAvLyAgICAgJ3gtYXBpLWtleSc6IHRoaXMuYXBpS2V5LFxyXG4gIC8vICAgfSk7XHJcbiAgLy8gICByZXR1cm4gdGhpcy5odHRwXHJcbiAgLy8gICAgIC5nZXQoYCR7dGhpcy5lbnZpcm9ubWVudC5CQVNFX1VSTH0vY29udmVyc2F0aW9ucy8ke3RoaXMuY29udmVyc2F0aW9uS2V5fWAsIHsgaGVhZGVycyB9KVxyXG4gIC8vICAgICAucGlwZShcclxuICAvLyAgICAgICBzd2l0Y2hNYXAoKHJlczogYW55KSA9PiB7XHJcbiAgLy8gICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAvLyAgICAgICAgIHJldHVybiBvZihyZXMpO1xyXG4gIC8vICAgICAgIH0pLFxyXG4gIC8vICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBhbnkpID0+IHtcclxuICAvLyAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIGNoYXQgaGlzdG9yeTogJywgZXJyb3IpO1xyXG4gIC8vICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgLy8gICAgICAgICByZXR1cm4gb2YobnVsbCk7XHJcbiAgLy8gICAgICAgfSlcclxuICAvLyAgICAgKTtcclxuICAvLyB9XHJcblxyXG4gIG1hcENoYXRIaXN0b3J5KGNoYXRzOiBhbnkpIHtcclxuICAgIHRoaXMuY2hhdExvZy5wdXNoKHtcclxuICAgICAgdHlwZTogJ2FpJyxcclxuICAgICAgbWVzc2FnZTpcclxuICAgICAgICB0aGlzLmdyZWV0aW5nTXNnIHx8XHJcbiAgICAgICAgdGhpcy5wcm9jZXNzTWVzc2FnZShcclxuICAgICAgICAgIFwiR3JlZXRpbmdzISBJJ20geW91ciBDT1AyOCB2aXJ0dWFsIGFzc2lzdGFudC4gSGF2ZSBxdWVzdGlvbnMgYWJvdXQgdGhlIGV2ZW50PyBJJ20gaGVyZSB0byBoZWxwLlwiXHJcbiAgICAgICAgKSxcclxuICAgICAgdGltZTogZm9ybWF0Tm93KHRoaXMudGltZXpvbmUpLFxyXG4gICAgfSk7XHJcbiAgICBpZiAoY2hhdHMgJiYgY2hhdHM/Lk1lc3NhZ2VzPy5sZW5ndGgpIHtcclxuICAgICAgY2hhdHM/Lk1lc3NhZ2VzLmZvckVhY2goKGNoYXQ6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChjaGF0LlR5cGUgPT0gXCJ1c2VyXCIpIHtcclxuICAgICAgICAgIHRoaXMuY2hhdExvZy5wdXNoKHtcclxuICAgICAgICAgICAgdHlwZTogJ3VzZXInLFxyXG4gICAgICAgICAgICBtZXNzYWdlOiB0aGlzLnByb2Nlc3NNZXNzYWdlKGNoYXQuVGV4dCksXHJcbiAgICAgICAgICAgIHRpbWU6IGZvcm1hdFRpbWVTdGFtcHModGhpcy50aW1lem9uZSwgY2hhdC5JbnNlcnRUaW1lc3RhbXApLFxyXG4gICAgICAgICAgICBjb3BpZWQ6IGZhbHNlXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNoYXQuVHlwZSA9PSBcImFpXCIpIHtcclxuICAgICAgICAgIHRoaXMuY2hhdExvZy5wdXNoKHtcclxuICAgICAgICAgICAgdHlwZTogJ2FpJyxcclxuICAgICAgICAgICAgbWVzc2FnZTogdGhpcy5wcm9jZXNzTWVzc2FnZShjaGF0LlRleHQpLFxyXG4gICAgICAgICAgICB0aW1lOiBmb3JtYXRUaW1lU3RhbXBzKHRoaXMudGltZXpvbmUsIGNoYXQuSW5zZXJ0VGltZXN0YW1wKSxcclxuICAgICAgICAgICAgY29waWVkOiBmYWxzZVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICB0aGlzLnNob3dGZWVkQmFja0ljb25zSW5kZXggPSB0aGlzLmNoYXRMb2cubGVuZ3RoIC0gMTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLnNob3dTdGFydEFnYWluID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHRoaXMuc2Nyb2xsVG9Cb3R0b20oKTtcclxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgcHJvY2Vzc01lc3NhZ2UobWVzc2FnZTogc3RyaW5nKTogU2FmZUh0bWwge1xyXG4gICAgaWYgKCFtZXNzYWdlIHx8ICEobWVzc2FnZT8ubGVuZ3RoID4gMCkpIHtcclxuICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnNvbGUubG9nKCdoZXJlIGlzIG15IG1lc3NhZ2UnKVxyXG4gICAgY29uc29sZS5sb2cobWVzc2FnZSk7XHJcblxyXG4gICAgbWVzc2FnZSA9IG1lc3NhZ2UudHJpbSgpO1xyXG5cclxuICAgIGNvbnN0IG1hcmtkb3duTGlua1JlZ2V4ID0gL1xcWyhbXltdKyldXFwoKFteKV0rKVxcKS9nO1xyXG4gICAgY29uc3QgdXJsUmVnZXggPSAvKD88IWhyZWY9XCIpXFxiaHR0cHM/OlxcL1xcL1xcUysoPzwhWy4sXSkvZ2k7XHJcblxyXG4gICAgaWYgKG1hcmtkb3duTGlua1JlZ2V4LnRlc3QobWVzc2FnZSkpIHtcclxuICAgICAgY29uc3QgaHRtbCA9IG1lc3NhZ2UucmVwbGFjZShcclxuICAgICAgICBtYXJrZG93bkxpbmtSZWdleCxcclxuICAgICAgICAnPGEgaHJlZj1cIiQyXCIgdGFyZ2V0PVwiX2JsYW5rXCI+JDE8L2E+J1xyXG4gICAgICApO1xyXG4gICAgICBjb25zb2xlLmxvZygnU2FuaXRpemVkIG1lc3NhZ2U6ICcsIG1lc3NhZ2UpO1xyXG4gICAgICByZXR1cm4gdGhpcy5zYW5pdGl6ZUh0bWwoaHRtbCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHVybFJlZ2V4LnRlc3QobWVzc2FnZSkpIHtcclxuICAgICAgY29uc3QgaHRtbCA9IG1lc3NhZ2UucmVwbGFjZShcclxuICAgICAgICB1cmxSZWdleCxcclxuICAgICAgICAnPGEgaHJlZj1cIiQmXCIgdGFyZ2V0PVwiX2JsYW5rXCI+JCY8L2E+J1xyXG4gICAgICApO1xyXG4gICAgICBjb25zb2xlLmxvZygnU2FuaXRpemVkIG1lc3NhZ2U6ICcsIG1lc3NhZ2UpO1xyXG4gICAgICByZXR1cm4gdGhpcy5zYW5pdGl6ZUh0bWwoaHRtbCk7XHJcbiAgICB9XHJcblxyXG4gICAgbWVzc2FnZSA9IG1lc3NhZ2UucmVwbGFjZSgvKD86XFxyXFxufFxccnxcXG4pL2csICc8YnI+Jyk7XHJcblxyXG4gICAgbWVzc2FnZSA9IG1lc3NhZ2UucmVwbGFjZSgvXFwqXFwqKC4qPylcXCpcXCovZywgJzxzdHJvbmc+JDE8L3N0cm9uZz4nKTtcclxuXHJcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICAgIGNvbnN0IHNhbml0aXplZE1lc3NhZ2UgPSB0aGlzLnNhbml0aXplSHRtbChtZXNzYWdlKTtcclxuICAgIHJldHVybiBzYW5pdGl6ZWRNZXNzYWdlO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdDaGVja2VkKCkge1xyXG4gICAgY29uc3QgZmVlZGJhY2tMaW5rcyA9XHJcbiAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5mZWVkYmFjay1saW5rJyk7XHJcbiAgICBmZWVkYmFja0xpbmtzLmZvckVhY2goKGxpbms6IGFueSkgPT4ge1xyXG4gICAgICBsaW5rLmFkZEV2ZW50TGlzdGVuZXIoXHJcbiAgICAgICAgJ2NsaWNrJyxcclxuICAgICAgICB0aGlzLm9uRmVlZGJhY2tDbGljay5iaW5kKHRoaXMsICd6ZW5kZXNrJylcclxuICAgICAgKTtcclxuICAgIH0pO1xyXG4gICAgLy8gaWYgKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5mZWVkYmFjay1saW5rJykpIHtcclxuICAgIC8vICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnRcclxuICAgIC8vICAgICAucXVlcnlTZWxlY3RvcignLmZlZWRiYWNrLWxpbmsnKVxyXG4gICAgLy8gICAgIC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMub25GZWVkYmFja0NsaWNrLmJpbmQodGhpcywgJ3plbmRlc2snKSk7XHJcbiAgICAvLyB9XHJcbiAgfVxyXG5cclxuICBzYW5pdGl6ZUh0bWwoaHRtbDogc3RyaW5nKTogU2FmZUh0bWwge1xyXG4gICAgcmV0dXJuIHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sKGh0bWwpO1xyXG4gIH1cclxuXHJcbiAgb25GZWVkYmFja0NsaWNrKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuZmVlZGJhY2tFdmVudC5lbWl0KHZhbHVlKTtcclxuICB9XHJcblxyXG4gIG9uQ2xvc2UoKSB7XHJcbiAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKGRvY3VtZW50LmJvZHksIHRoaXMuYm9keU92ZXJmbG93Q2xhc3MpO1xyXG4gICAgdGhpcy5vbkNsb3NlRXZlbnQuZW1pdCgpO1xyXG4gIH1cclxuXHJcbiAgc2VuZE1lc3NhZ2VXaXRoVGlsZShwcm9tcHQ6IHN0cmluZykge1xyXG4gICAgdGhpcy5pbnB1dCA9IHByb21wdDtcclxuICAgIHRoaXMuZmV0Y2hEYXRhKCk7XHJcbiAgICB0aGlzLnNjcm9sbFRvQm90dG9tKCk7XHJcbiAgfVxyXG4gIGlzQ2hhdGluZ1dpdGhBaSA9IGZhbHNlO1xyXG4gIGZldGNoRGF0YSgpIHtcclxuICAgIHRoaXMuaW5wdXQgPSB0aGlzLmlucHV0Py50cmltKCk7XHJcbiAgICBpZiAoIXRoaXMuaW5wdXQgfHwgdGhpcy5sb2FkaW5nKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNoYXRMb2cucHVzaCh7XHJcbiAgICAgIHR5cGU6ICd1c2VyJyxcclxuICAgICAgbWVzc2FnZTogdGhpcy5wcm9jZXNzTWVzc2FnZSh0aGlzLmlucHV0KSxcclxuICAgICAgdGltZTogZm9ybWF0Tm93KHRoaXMudGltZXpvbmUpLFxyXG4gICAgICBjb3BpZWQ6IGZhbHNlXHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuXHJcbiAgICB0aGlzLmFpUmVzcG9uc2UgPSAnJztcclxuICAgIHRoaXMuaXNDaGF0aW5nV2l0aEFpID0gdHJ1ZTtcclxuXHJcbiAgICBjb25zdCB1cmwgPVxyXG4gICAgICBgJHt0aGlzLmVudmlyb25tZW50LkJBU0VfVVJMfS9haS9hc2tgLy8gK1xyXG4gICAgLy8gKHRoaXMudXNlT3BlbkFpID09PSBmYWxzZSA/ICcvbGxtLWhmJyA6ICcnKTtcclxuICAgIGZldGNoKHVybCwge1xyXG4gICAgICBtZXRob2Q6ICdQT1NUJyxcclxuICAgICAgaGVhZGVyczoge1xyXG4gICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXHJcbiAgICAgICAgJ3gtYXBpLWtleSc6IHRoaXMuYXBpS2V5LFxyXG4gICAgICB9LFxyXG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XHJcbiAgICAgICAgdXNlcl9xdWVzdGlvbjogdGhpcy5pbnB1dCxcclxuICAgICAgICB1c2VyX2lkOiB0aGlzLnVzZXJJZCxcclxuICAgICAgICBib3RfaWQ6IHRoaXMuYm90SWQsXHJcbiAgICAgICAgLy8gdGVtcGVyYXR1cmU6IHRoaXMudGVtcGVyYXR1cmUsXHJcbiAgICAgICAgLy8gIGV2ZW50X2lkOiB0aGlzLmV2ZW50SWQsXHJcbiAgICAgICAgLy8gdG9rZW46IHRoaXMuczI3VXNlclRva2VuLFxyXG4gICAgICAgIGNvbnZlcnNhdGlvbl9pZDogdGhpcy5jb252ZXJzYXRpb25LZXlcclxuICAgICAgfSksXHJcbiAgICB9KVxyXG4gICAgICAvLyBSZXRyaWV2ZSBpdHMgYm9keSBhcyBSZWFkYWJsZVN0cmVhbVxyXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5yZWFkQWxsQ2h1bmtzKHJlc3BvbnNlLmJvZHkpO1xyXG4gICAgICB9KVxyXG4gICAgICAuY2F0Y2goKGVycikgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0VycjogJywgZXJyKTtcclxuICAgICAgICB0aGlzLmlzQ2hhdGluZ1dpdGhBaSA9IGZhbHNlO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICB0aGlzLmlucHV0ID0gJyc7XHJcbiAgfVxyXG5cclxuICBmZXRjaFNtYWxsVGFsaygpIHtcclxuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuXHJcbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLmVudmlyb25tZW50LkJBU0VfVVJMfS9ib3Qvc21hbGwtdGFsay8ke3RoaXMuYm90SWR9LyR7dGhpcy51c2VySWR9YDtcclxuXHJcbiAgICB0aGlzLmh0dHBcclxuICAgICAgLmdldDx7IHNtYWxsVGFsazogc3RyaW5nIH0+KHVybCwge1xyXG4gICAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAgICd4LWFwaS1rZXknOiB0aGlzLmFwaUtleSxcclxuICAgICAgICB9LFxyXG4gICAgICB9KVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igd2hpbGUgZmV0Y2hpbmcgc21hbGwgdGFsazonLCBlcnJvcik7XHJcblxyXG4gICAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZSgocmVzcG9uc2UpID0+IHtcclxuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuXHJcbiAgICAgICAgaWYgKCFyZXNwb25zZSkge1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnNtYWxsVGFsaykge1xyXG4gICAgICAgICAgdGhpcy5jaGF0TG9nLnB1c2goe1xyXG4gICAgICAgICAgICB0eXBlOiAnYWknLFxyXG4gICAgICAgICAgICBtZXNzYWdlOiB0aGlzLnByb2Nlc3NNZXNzYWdlKHJlc3BvbnNlLnNtYWxsVGFsayksXHJcbiAgICAgICAgICAgIHRpbWU6IGZvcm1hdE5vdyh0aGlzLnRpbWV6b25lKSxcclxuICAgICAgICAgICAgaXNGZWVkYmFja01zZzogdHJ1ZSxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgdGhpcy5zaG93RmVlZEJhY2tJY29uc0luZGV4ID0gdGhpcy5jaGF0TG9nLmxlbmd0aCAtIDI7XHJcbiAgICAgICAgICAvLyB0aGlzLnNjcm9sbFRvQm90dG9tKCk7XHJcbiAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcmVhZEFsbENodW5rcyA9IChzdHJlYW06IGFueSkgPT4ge1xyXG4gICAgY29uc3QgcmVhZGVyID0gc3RyZWFtLmdldFJlYWRlcigpO1xyXG4gICAgY29uc3QgYWxsU3VnZ2VzdGlvbnM6IHN0cmluZ1tdID0gW107XHJcblxyXG4gICAgcmVhZGVyLmNsb3NlZC5jYXRjaCgoZXJyOiBhbnkpID0+IHtcclxuICAgICAgaWYgKGVycikge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHJlYWRpbmcgc3RyZWFtOiAnLCBlcnIpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmlzQ2hhdGluZ1dpdGhBaSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnNjcm9sbFRvQm90dG9tKCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBuZXcgUmVhZGFibGVTdHJlYW0oe1xyXG4gICAgICBzdGFydDogKGNvbnRyb2xsZXIpID0+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wdW1wKGNvbnRyb2xsZXIsIHJlYWRlciwgYWxsU3VnZ2VzdGlvbnMpO1xyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgfTtcclxuXHJcbiAgcHVtcChjb250cm9sbGVyOiBhbnksIHJlYWRlcjogYW55LCBhbGxTdWdnZXN0aW9uczogc3RyaW5nW10pIHtcclxuICAgIHJlYWRlci5yZWFkKCkudGhlbigoeyBkb25lLCB2YWx1ZSB9OiBhbnkpID0+IHtcclxuICAgICAgY29uc3QgbGFzdEl0ZW0gPSB0aGlzLmNoYXRMb2dbdGhpcy5jaGF0TG9nLmxlbmd0aCAtIDFdO1xyXG5cclxuICAgICAgaWYgKGRvbmUpIHtcclxuICAgICAgICBsYXN0SXRlbS5tZXNzYWdlID0gdGhpcy5wcm9jZXNzTWVzc2FnZShsYXN0SXRlbS5tZXNzYWdlKTtcclxuICAgICAgICB0aGlzLmNoYXRMb2cucG9wKCk7XHJcbiAgICAgICAgdGhpcy5jaGF0TG9nLnB1c2gobGFzdEl0ZW0pO1xyXG4gICAgICAgIGlmIChhbGxTdWdnZXN0aW9ucz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICB0aGlzLmNoYXRMb2cucHVzaCh7XHJcbiAgICAgICAgICAgIHR5cGU6ICdzdWdnZXN0aW9ucycsXHJcbiAgICAgICAgICAgIHN1Z2dlc3Rpb25zOiBhbGxTdWdnZXN0aW9uc1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnRyb2xsZXIuY2xvc2UoKTtcclxuICAgICAgICB0aGlzLmlzQ2hhdGluZ1dpdGhBaSA9IGZhbHNlO1xyXG4gICAgICAgIC8vIHRoaXMuc2Nyb2xsVG9Cb3R0b20oKTtcclxuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgICB0aGlzLnNob3dTdGFydEFnYWluID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgLy8gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgLy8gICB0aGlzLmZldGNoU21hbGxUYWxrKCk7XHJcbiAgICAgICAgLy8gfSwxMDAwKVxyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgbGV0IGRlY29kZWRDaHVuayA9IHRoaXMuZGVjb2Rlci5kZWNvZGUodmFsdWUsIHsgc3RyZWFtOiB0cnVlIH0pO1xyXG4gICAgICB0aGlzLmFpUmVzcG9uc2UgKz0gZGVjb2RlZENodW5rO1xyXG4gICAgICBpZiAobGFzdEl0ZW0udHlwZSA9PT0gJ2FpJykge1xyXG4gICAgICAgIGNvbnN0IHN1Z2dlc3Rpb25zTWF0Y2ggPSB0aGlzLmFpUmVzcG9uc2UubWF0Y2goLzxzdWc+KC4qPyk8XFwvc3VnPi9nKTtcclxuICAgICAgICBpZiAoc3VnZ2VzdGlvbnNNYXRjaCkge1xyXG4gICAgICAgICAgc3VnZ2VzdGlvbnNNYXRjaC5mb3JFYWNoKChtYXRjaCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmFpUmVzcG9uc2UgPSB0aGlzLmFpUmVzcG9uc2UucmVwbGFjZShtYXRjaCwgXCJcIik7XHJcbiAgICAgICAgICAgIGFsbFN1Z2dlc3Rpb25zLnB1c2gobWF0Y2g/LnJlcGxhY2UoLzxcXC8/c3VnPi9nLCBcIlwiKSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxhc3RJdGVtLm1lc3NhZ2UgPSB0aGlzLmFpUmVzcG9uc2U7XHJcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5pc0NoYXRpbmdXaXRoQWkgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgbGV0IGFpRm9ybWF0dGVkRGF0YTogYW55O1xyXG5cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ3BhcnNpbmcganNvbiAnKVxyXG4gICAgICAgICAgYWlGb3JtYXR0ZWREYXRhID0gSlNPTi5wYXJzZShKU09OLnBhcnNlKHRoaXMuYWlSZXNwb25zZSkpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygncGFyc2luZyBqc29uIDInKVxyXG4gICAgICAgICAgICBhaUZvcm1hdHRlZERhdGEgPSBKU09OLnBhcnNlKHRoaXMuYWlSZXNwb25zZSlcclxuICAgICAgICAgIH0gY2F0Y2ggKGUpIHsgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc29sZS5sb2coJ3BhcnNpbmcganNvbiBkb25lJylcclxuXHJcbiAgICAgICAgaWYgKGFpRm9ybWF0dGVkRGF0YSAmJiBhaUZvcm1hdHRlZERhdGE/LnNlY3Rpb25faWQ/Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIGlmIChhaUZvcm1hdHRlZERhdGEuc2VjdGlvbl9pZCA9PSAnY29tcGFueV9zZWFyY2gnIHx8IGFpRm9ybWF0dGVkRGF0YS5zZWN0aW9uX2lkID09ICd1c2VyX3NlYXJjaCcgfHwgYWlGb3JtYXR0ZWREYXRhLnNlY3Rpb25faWQgPT0gJ2luZHVzdHJ5X2NvbXBhbnlfc2VhcmNoJykge1xyXG4gICAgICAgICAgICB0aGlzLmZldGNoTXlDb25uZWN0aW9ucygpLnN1YnNjcmliZSgpO1xyXG4gICAgICAgICAgICB0aGlzLmZldGNoUGVuZGluZ1JlcXVlc3RzKCkuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKGFpRm9ybWF0dGVkRGF0YS5zZWN0aW9uX2lkID09IHRoaXMubXlVcGNvbWluZ1Nlc3Npb25BY3Rpb24pIHtcclxuICAgICAgICAgICAgdmFyIHNwZWFrZXJJZHMgPSBbXTtcclxuICAgICAgICAgICAgYWlGb3JtYXR0ZWREYXRhLmNvbnRlbnQ/LmZvckVhY2goc2Vzc2lvbiA9PiB7XHJcbiAgICAgICAgICAgICAgc3BlYWtlcklkcyA9IFsuLi5zcGVha2VySWRzLCAuLi5zZXNzaW9uLnNwZWFrZXJzXVxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIGlmIChzcGVha2VySWRzPy5sZW5ndGggPiAwKVxyXG4gICAgICAgICAgICAgIHRoaXMuZ2V0U3BlYWtlcnNCeVN0YWZmSWRzKHNwZWFrZXJJZHMpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmIChhaUZvcm1hdHRlZERhdGEuc2VjdGlvbl9pZCA9PSB0aGlzLmFkZFRvTXlBZ2VuZGFBY3Rpb24gJiYgYWlGb3JtYXR0ZWREYXRhLmNvbnRlbnQ/Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5vcGVuUGFnZS5uZXh0KHtcclxuICAgICAgICAgICAgICBzZWN0aW9uSWQ6IGFpRm9ybWF0dGVkRGF0YS5zZWN0aW9uX2lkLFxyXG4gICAgICAgICAgICAgIHNlc3Npb25JZHM6IGFpRm9ybWF0dGVkRGF0YS5jb250ZW50XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKGFpRm9ybWF0dGVkRGF0YS5zZWN0aW9uX2lkID09IHRoaXMuY29ubmVjdE9yRm9sbG93QWN0aW9uKSB7XHJcbiAgICAgICAgICAgIGxldCB1c2Vyc0xlbiA9IGFpRm9ybWF0dGVkRGF0YS5jb250ZW50Py5sZW5ndGg7XHJcbiAgICAgICAgICAgIGlmICh1c2Vyc0xlbiA+IDEpIHtcclxuICAgICAgICAgICAgICB0aGlzLm9wZW5QYWdlLm5leHQoe1xyXG4gICAgICAgICAgICAgICAgc2VjdGlvbklkOiBcIm9wZW5fbmV0d29ya2luZ19kcmF3ZXJcIixcclxuICAgICAgICAgICAgICAgIHNlYXJjaDogYWlGb3JtYXR0ZWREYXRhLmNvbnRlbnRcclxuICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHVzZXJzTGVuID09IDEpIHtcclxuICAgICAgICAgICAgICB0aGlzLm9wZW5QYWdlLm5leHQoe1xyXG4gICAgICAgICAgICAgICAgc2VjdGlvbklkOiBhaUZvcm1hdHRlZERhdGEuc2VjdGlvbl9pZCxcclxuICAgICAgICAgICAgICAgIGNvbm5ldFVzZXJJZHM6IFthaUZvcm1hdHRlZERhdGEuY29udGVudFswXS51c2VySWRdXHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmIChhaUZvcm1hdHRlZERhdGEuaXNfb3Blbl9wYWdlID09IFwidHJ1ZVwiKSB7XHJcbiAgICAgICAgICAgIHRoaXMub3BlblBhZ2UubmV4dCh7XHJcbiAgICAgICAgICAgICAgc2VjdGlvbklkOiBhaUZvcm1hdHRlZERhdGEuc2VjdGlvbl9pZCxcclxuICAgICAgICAgICAgICBzZWFyY2g6IGFpRm9ybWF0dGVkRGF0YS5jb250ZW50XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuaXNNb2JpbGVCcm93c2VyKCkpIHtcclxuICAgICAgICAgICAgICBhaUZvcm1hdHRlZERhdGEubWVzc2FnZSArPSBcIlxcblxcblwiICsgJzxhIGlkPVwiY2xvc2VCb3ROb3dcIj5DbGljayBIZXJlPC9hPiB0byBzZWUgcmVzdWx0cy4nXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcblxyXG5cclxuICAgICAgICAgIHRoaXMuY2hhdExvZy5wdXNoKHtcclxuICAgICAgICAgICAgdHlwZTogJ2FpJyxcclxuICAgICAgICAgICAgbWVzc2FnZTogYWlGb3JtYXR0ZWREYXRhLm1lc3NhZ2UsXHJcbiAgICAgICAgICAgIGFjdGlvbjogYWlGb3JtYXR0ZWREYXRhLFxyXG4gICAgICAgICAgICB0aW1lOiBmb3JtYXROb3codGhpcy50aW1lem9uZSlcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIGlmICh0aGlzLmlzTW9iaWxlQnJvd3NlcigpKSB7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuYWRkQ2xvc2VCb3RDbGlja0V2ZW50KCk7XHJcbiAgICAgICAgICAgIH0sIDUwMCk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgdGhpcy5haVJlc3BvbnNlID0gXCJcIjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5jaGF0TG9nLnB1c2goe1xyXG4gICAgICAgICAgICB0eXBlOiAnYWknLFxyXG4gICAgICAgICAgICBtZXNzYWdlOiB0aGlzLmFpUmVzcG9uc2UsXHJcbiAgICAgICAgICAgIHRpbWU6IGZvcm1hdE5vdyh0aGlzLnRpbWV6b25lKSxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zaG93RmVlZEJhY2tJY29uc0luZGV4ID0gdGhpcy5jaGF0TG9nLmxlbmd0aCAtIDE7XHJcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuc2Nyb2xsVG9Cb3R0b20oKTtcclxuXHJcbiAgICAgIC8vIEVucXVldWUgdGhlIG5leHQgZGF0YSBjaHVuayBpbnRvIG91ciB0YXJnZXQgc3RyZWFtXHJcbiAgICAgIGNvbnRyb2xsZXIuZW5xdWV1ZSh2YWx1ZSk7XHJcbiAgICAgIHRoaXMucHVtcChjb250cm9sbGVyLCByZWFkZXIsIGFsbFN1Z2dlc3Rpb25zKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc3VibWl0RmVlZGJhY2soZmxhZzogYm9vbGVhbikge1xyXG4gICAgdGhpcy5mZWVkYmFja0RvbmUgPSB0cnVlO1xyXG4gICAgdGhpcy5zaG93RmVlZEJhY2tJY29uc0luZGV4ID0gbnVsbDtcclxuICAgIGNvbnN0IHVybCA9IGAke3RoaXMuZW52aXJvbm1lbnQuQkFTRV9VUkx9L2JvdC9mZWVkYmFja2A7XHJcbiAgICBmZXRjaCh1cmwsIHtcclxuICAgICAgbWV0aG9kOiAnUE9TVCcsXHJcbiAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxyXG4gICAgICAgICd4LWFwaS1rZXknOiB0aGlzLmFwaUtleSxcclxuICAgICAgfSxcclxuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoeyBmbGFnLCB1c2VyX2lkOiB0aGlzLnVzZXJJZCwgYm90X2lkOiB0aGlzLmJvdElkIH0pLFxyXG4gICAgfSkudGhlbigoKSA9PiB7XHJcbiAgICAgIGlmIChmbGFnKSB7XHJcbiAgICAgICAgdGhpcy5jaGF0TG9nLnB1c2goe1xyXG4gICAgICAgICAgdHlwZTogJ2FpJyxcclxuICAgICAgICAgIG1lc3NhZ2U6XHJcbiAgICAgICAgICAgIHRoaXMudGh1bWJzVXBNZXNzYWdlIHx8XHJcbiAgICAgICAgICAgIGBHcmVhdC4gTWF5IEkgYXNzaXN0IHlvdSB3aXRoIGFueXRoaW5nIGVsc2U/YCxcclxuICAgICAgICAgIHRpbWU6IGZvcm1hdE5vdyh0aGlzLnRpbWV6b25lKSxcclxuICAgICAgICAgIGlzRmVlZGJhY2tNc2c6IHRydWUsXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuc2Nyb2xsVG9Cb3R0b20oKTtcclxuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgICB0aGlzLmZlZWRiYWNrRG9uZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2hvd0ZlZWRCYWNrSWNvbnNJbmRleCA9IG51bGw7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmNoYXRMb2cucHVzaCh7XHJcbiAgICAgICAgdHlwZTogJ2FpJyxcclxuICAgICAgICBtZXNzYWdlOiB0aGlzLnByb2Nlc3NNZXNzYWdlKFxyXG4gICAgICAgICAgdGhpcy50aHVtYnNEb3duTWVzc2FnZXNbdGhpcy50aHVtYnNEb3duTXNnSW5kZXhdXHJcbiAgICAgICAgKSxcclxuICAgICAgICB0aW1lOiBmb3JtYXROb3codGhpcy50aW1lem9uZSksXHJcbiAgICAgICAgaXNGZWVkYmFja01zZzogdHJ1ZSxcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMudGh1bWJzRG93bk1zZ0luZGV4ID1cclxuICAgICAgICAodGhpcy50aHVtYnNEb3duTXNnSW5kZXggKyAxKSAlIHRoaXMudGh1bWJzRG93bk1lc3NhZ2VzLmxlbmd0aDtcclxuICAgICAgdGhpcy5zY3JvbGxUb0JvdHRvbSgpO1xyXG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgdGhpcy5mZWVkYmFja0RvbmUgPSBmYWxzZTtcclxuICAgICAgdGhpcy5zaG93RmVlZEJhY2tJY29uc0luZGV4ID0gbnVsbDtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlU3VibWl0KCkge1xyXG4gICAgdGhpcy5mZXRjaERhdGEoKTtcclxuICAgIHRoaXMuc2Nyb2xsVG9Cb3R0b20oKTtcclxuICB9XHJcblxyXG4gIGhhbmRsZVVwQ2xpY2soaWR4OiBhbnkpIHtcclxuICAgIGlmICh0aGlzLmZlZWRiYWNrRG9uZSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zdWJtaXRGZWVkYmFjayh0cnVlKTtcclxuICAgIHRoaXMuY2hhdExvZ1tpZHhdLmxpa2VkID0gIXRoaXMuY2hhdExvZ1tpZHhdLmxpa2VkO1xyXG5cclxuICAgIGlmICh0aGlzLmNoYXRMb2dbaWR4XS51bmxpa2VkKSB7XHJcbiAgICAgIHRoaXMuY2hhdExvZ1tpZHhdLnVubGlrZWQgPSAhdGhpcy5jaGF0TG9nW2lkeF0udW5saWtlZDtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcblxyXG4gIGhhbmRsZURvd25DbGljayhpZHg6IGFueSkge1xyXG4gICAgaWYgKHRoaXMuZmVlZGJhY2tEb25lKSByZXR1cm47XHJcbiAgICB0aGlzLnN1Ym1pdEZlZWRiYWNrKGZhbHNlKTtcclxuICAgIHRoaXMuY2hhdExvZ1tpZHhdLnVubGlrZWQgPSAhdGhpcy5jaGF0TG9nW2lkeF0udW5saWtlZDtcclxuICAgIGlmICh0aGlzLmNoYXRMb2dbaWR4XS5saWtlZClcclxuICAgICAgdGhpcy5jaGF0TG9nW2lkeF0ubGlrZWQgPSAhdGhpcy5jaGF0TG9nW2lkeF0ubGlrZWQ7XHJcbiAgfVxyXG4gIGhhbmRsZUNvcHlDbGljayhpbmRleDogYW55KSB7XHJcbiAgICAvLyBDb3B5IHRoZSBtZXNzYWdlIHRvIHRoZSBjbGlwYm9hcmRcclxuICAgIGNvbnN0IGNvbnRlbnRUb0NvcHkgPSB0aGlzLmNoYXRMb2dbaW5kZXhdLm1lc3NhZ2UgPyB0aGlzLmhhbmRsZU1hcmtkb3duKHRoaXMuY2hhdExvZ1tpbmRleF0ubWVzc2FnZSkgOiB0aGlzLmNoYXRMb2dbaW5kZXhdLm1lc3NhZ2U7XHJcbiAgICBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChjb250ZW50VG9Db3B5KS50aGVuKCgpID0+IHtcclxuICAgICAgLy8gSW5kaWNhdGUgdGhhdCB0aGUgbWVzc2FnZSB3YXMgY29waWVkXHJcbiAgICAgIHRoaXMuY2hhdExvZ1tpbmRleF0uY29waWVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAvLyBSZXNldCB0aGUgY29waWVkIHN0YXRlIGFmdGVyIGEgZGVsYXlcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jaGF0TG9nW2luZGV4XS5jb3BpZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIH0sIDIwMDApOyAvLyBSZXNldCBhZnRlciAyIHNlY29uZHNcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2Nyb2xsVG9Cb3R0b20oKSB7XHJcbiAgICBsZXQgY291bnRlciA9IDA7XHJcbiAgICBjb25zdCBpbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcclxuICAgICAgdGhpcy5jaGF0TWFpbi5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCA9XHJcbiAgICAgICAgdGhpcy5jaGF0TWFpbi5uYXRpdmVFbGVtZW50LnNjcm9sbEhlaWdodDtcclxuICAgICAgaWYgKGNvdW50ZXIrKyA+IDUpIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpO1xyXG4gICAgfSwgNSk7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVBY3Rpb24oYWN0aW9uOiBhbnkpIHtcclxuICAgIGNvbnNvbGUuaW5mbyhcImluY29taW5nIGFjdGlvbiBmcm9tIHRoZSBjaGF0Ym90IEFJXCIpXHJcbiAgICBjb25zb2xlLmluZm8oYWN0aW9uKVxyXG5cclxuICAgIGlmIChhY3Rpb24/LmNvbnRlbnQpIHtcclxuXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICAvLyBDaGVjayBpZiB0aGUgZHJhd2VyIGlzIGluaXRpYWxseSBvcGVuIGFuZCBhcHBseSBvdmVyZmxvdyBoaWRkZW4gdG8gYm9keSBpZiBzb1xyXG4gICAgaWYgKHRoaXMuZHJhd2VyLm9wZW5lZCkge1xyXG4gICAgICB0aGlzLnNldEJvZHlPdmVyZmxvdygpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIExpc3RlbiB0byBjaGFuZ2VzIGluIHRoZSBkcmF3ZXIgYmVpbmcgb3BlbmVkIG9yIGNsb3NlZFxyXG4gICAgdGhpcy5kcmF3ZXIub3BlbmVkQ2hhbmdlLnN1YnNjcmliZSgob3BlbmVkOiBib29sZWFuKSA9PiB7XHJcbiAgICAgIGlmIChvcGVuZWQpIHtcclxuICAgICAgICB0aGlzLnNldEJvZHlPdmVyZmxvdygpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMucmVtb3ZlQm9keU92ZXJmbG93KCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuZHJhd2VyLm9wZW5lZENoYW5nZS5zdWJzY3JpYmUoKG9wZW5lZCkgPT4ge1xyXG4gICAgICBpZiAob3BlbmVkKSB7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICBpZiAodGhpcy5teVRleHRhcmVhICYmIHRoaXMubXlUZXh0YXJlYS5uYXRpdmVFbGVtZW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMubXlUZXh0YXJlYS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7IC8vIEZvY3VzIG9uIHRoZSB0ZXh0YXJlYVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0Qm9keU92ZXJmbG93KCkge1xyXG4gICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhkb2N1bWVudC5ib2R5LCB0aGlzLmJvZHlPdmVyZmxvd0NsYXNzKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVtb3ZlQm9keU92ZXJmbG93KCkge1xyXG4gICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyhkb2N1bWVudC5ib2R5LCB0aGlzLmJvZHlPdmVyZmxvd0NsYXNzKTtcclxuICB9XHJcbiAgYXN5bmMgaGFuZGxlTWFya2Rvd24obWFya2Rvd25Db250ZW50OiBzdHJpbmcpIHtcclxuICAgIGlmIChtYXJrZG93bkNvbnRlbnQpIHtcclxuICAgICAgY29uc3QgaHRtbENvbnRlbnQgPSBhd2FpdCBtYXJrZWQucGFyc2UobWFya2Rvd25Db250ZW50KTtcclxuICAgICAgcmV0dXJuIHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sKGh0bWxDb250ZW50KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBtYXJrZG93bkNvbnRlbnQ7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGdldFNwZWFrZXJzQnlTdGFmZklkcyhpZHMpIHtcclxuICAgIGNvbnN0IHVybCA9XHJcbiAgICAgIGAke3RoaXMuZW52aXJvbm1lbnQuVVNFUlNfQVBJfS9ldmVudHMvJHt0aGlzLmV2ZW50SWR9L3VzZXJzL2dldC1ieS1zdGFmZi1pZHNgXHJcbiAgICBmZXRjaCh1cmwsIHtcclxuICAgICAgbWV0aG9kOiAnUE9TVCcsXHJcbiAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxyXG4gICAgICAgICdBdXRob3JpemF0aW9uJzogXCJCZWFyZXIgXCIgKyBcInlvdXJfdG9rZW5faGVyZVwiLFxyXG4gICAgICB9LFxyXG4gICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShpZHMpLFxyXG4gICAgfSlcclxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3BvbnNlLm9rKSB7XHJcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2UuanNvbigpOyAvLyBQYXJzZSB0aGUgSlNPTiBib2R5IG9mIHRoZSByZXNwb25zZVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05ldHdvcmsgcmVzcG9uc2Ugd2FzIG5vdCBvay4nKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIC50aGVuKChkYXRhKSA9PiB7XHJcbiAgICAgICAgaWYgKGRhdGE/Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIGRhdGEuZm9yRWFjaChzcGVha2VyID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zcGVha2Vyc1tzcGVha2VyLmlkXSA9IHNwZWFrZXI7XHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIC5jYXRjaCgoZXJyKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgZGF0YTonLCBlcnIpO1xyXG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHBlcmZvcm1TZXNzaW9uQWN0aW9uKHNlc3Npb25JZCwgYWN0aW9uKSB7XHJcbiAgICB0aGlzLnNlc3Npb25BY3Rpb25zLm5leHQoe1xyXG4gICAgICBzZXNzaW9uSWQsXHJcbiAgICAgIGFjdGlvblxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBhZGRDbG9zZUJvdENsaWNrRXZlbnQoKSB7XHJcbiAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignI2Nsb3NlQm90Tm93Jyk7XHJcbiAgICBpZiAoZWxlbWVudCkge1xyXG4gICAgICB0aGlzLnJlbmRlcmVyLmxpc3RlbihlbGVtZW50LCAnY2xpY2snLCAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jbG9zZUJvdC5uZXh0KCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaXNNb2JpbGVCcm93c2VyKCkge1xyXG4gICAgcmV0dXJuIC9BbmRyb2lkfHdlYk9TfGlQaG9uZXxpUGFkfGlQb2R8QmxhY2tCZXJyeXxJRU1vYmlsZXxPcGVyYSBNaW5pL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcclxuICB9XHJcblxyXG4gIGNvbm5lY3RUb1VzZXIodXNlcklkKSB7XHJcbiAgICB0aGlzLmNvbm5lY3RXaXRoVXNlci5lbWl0KHtcclxuICAgICAgY29ubmVjdDogIXRoaXMuY2FuRGlzY29ubmVjdCh1c2VySWQpLFxyXG4gICAgICB1c2VySWRcclxuICAgIH0pO1xyXG5cclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLmZldGNoTXlDb25uZWN0aW9ucygpLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5mZXRjaFBlbmRpbmdSZXF1ZXN0cygpLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICB9KTtcclxuICAgIH0sIDUwMCk7XHJcbiAgfVxyXG5cclxuICBzY2hlZHVsZU1lZXRpbmdXaXRoVXNlcih1c2VyKSB7XHJcbiAgICB0aGlzLnNjaGVkdWxlTWVldGluZy5lbWl0KHVzZXIpO1xyXG4gIH1cclxuXHJcbiAgY2FuQ29ubmVjdCh1c2VySWQpIHtcclxuICAgIHJldHVybiAhKHRoaXMuY2FuRGlzY29ubmVjdCh1c2VySWQpIHx8IHRoaXMucGVuZGluZ1JlcXVlc3RzLmZpbmQoYSA9PiBhID09IHVzZXJJZCkpXHJcbiAgfVxyXG5cclxuICBjYW5EaXNjb25uZWN0KHVzZXJJZCkge1xyXG4gICAgcmV0dXJuIHRoaXMubXlDb25uZWN0aW9ucy5maW5kKGNvbm4gPT4gY29ubi51c2VySWQgPT0gdXNlcklkKVxyXG4gIH1cclxuXHJcbiAgZmV0Y2hQZW5kaW5nUmVxdWVzdHMoKSB7XHJcbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKHtcclxuICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcclxuICAgICAgJ2FwaUtleSc6IHRoaXMuYXV0b2dlbktleVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwXHJcbiAgICAgIC5nZXQoXHJcbiAgICAgICAgYCR7dGhpcy5lbnZpcm9ubWVudC5VU0VSU19BUEl9L2V2ZW50cy8ke3RoaXMuZXZlbnRJZH0vY29ubmVjdGlvbi1yZXF1ZXN0cy9hdXRvZ2VuL3BlbmRpbmctc2VudC1yZXF1ZXN0cz91c2VySWQ9JHt0aGlzLnVzZXJJZH1gLFxyXG4gICAgICAgIHsgaGVhZGVycyB9XHJcbiAgICAgIClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgc3dpdGNoTWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5wZW5kaW5nUmVxdWVzdHMgPSByZXM7XHJcbiAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgICAgIHJldHVybiBvZihyZXMpO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBhbnkpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIHBlbmRpbmcgcmVxdWVzdHM6ICcsIGVycm9yKTtcclxuICAgICAgICAgIHJldHVybiBvZihudWxsKTtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgZmV0Y2hNeUNvbm5lY3Rpb25zKCkge1xyXG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycyh7XHJcbiAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXHJcbiAgICAgICdhcGlLZXknOiB0aGlzLmF1dG9nZW5LZXlcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFxyXG4gICAgICAuZ2V0KFxyXG4gICAgICAgIGAke3RoaXMuZW52aXJvbm1lbnQuVVNFUlNfQVBJfS9ldmVudHMvJHt0aGlzLmV2ZW50SWR9L3VzZXJzLWNvbm5lY3Rpb25zL2F1dG9nZW4/dXNlcklkPSR7dGhpcy51c2VySWR9YCxcclxuICAgICAgICB7IGhlYWRlcnMgfVxyXG4gICAgICApXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIHN3aXRjaE1hcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMubXlDb25uZWN0aW9ucyA9IHJlcztcclxuICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICAgICAgcmV0dXJuIG9mKHJlcyk7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgcGVuZGluZyByZXF1ZXN0czogJywgZXJyb3IpO1xyXG4gICAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG4gIC8vIGV2ZW50cy8ke2V2ZW50SWR9L3VzZXJzLWNvbm5lY3Rpb25zXHJcbn1cclxuIl19
808
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdC1kcmF3ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IkQ6L2hpdmVHUFQtQUktcGFja2FnZXMvSGl2ZUFJLVBhY2thZ2VzL3Byb2plY3RzL2hpdmVncHQvZXZlbnRzZ3B0LWFuZ3VsYXIvc3JjLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudHMvY2hhdC1kcmF3ZXIvY2hhdC1kcmF3ZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG9EQUFvRDtBQUNwRCxPQUFPLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQy9ELE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEVBQ04sU0FBUyxFQUNULFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsWUFBWSxFQUFZLE1BQU0sMkJBQTJCLENBQUM7QUFDbkUsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQixPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDdEYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFTOUQsTUFBTSxPQUFPLG1CQUFtQjtJQXFGOUIsWUFDVSxHQUFzQixFQUN0QixJQUFnQixFQUNoQixTQUF1QixFQUN2QixVQUFzQixFQUN0QixRQUFtQixFQUNuQixZQUFpQztJQUN6Qyw2QkFBNkI7O1FBTnJCLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQ3RCLFNBQUksR0FBSixJQUFJLENBQVk7UUFDaEIsY0FBUyxHQUFULFNB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QUs7bUNBQ0wsS0FBSztvQkFDTCxLQUFLOzhCQUNMLEtBQUs7a0NBQ0wsS0FBSzt3QkFDTCxLQUFLO2lDQUNMLEtBQUs7OEJBQ0wsS0FBSzt1QkFDTCxLQUFLOytCQUNMLEtBQUs7d0JBQ0wsS0FBSztxQkFDTCxLQUFLO29CQUNMLEtBQUs7K0JBRUwsS0FBSzttQ0FDTCxLQUFLOzRCQUNMLE1BQU07MkJBQ04sTUFBTTt1QkFDTixNQUFNOzZCQUNOLE1BQU07dUJBQ04sTUFBTTs4QkFDTixNQUFNOzhCQUNOLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvLyBpbXBvcnQgeyBQbGF0Zm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wbGF0Zm9ybSc7XHJcbmltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBIZWFkZXJzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQge1xyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIENvbXBvbmVudCxcclxuICBFbGVtZW50UmVmLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBJbnB1dCxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0LFxyXG4gIFJlbmRlcmVyMixcclxuICBWaWV3Q2hpbGQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1hdERyYXdlciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NpZGVuYXYnO1xyXG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIsIFNhZmVIdG1sIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XHJcbmltcG9ydCB7IG9mIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGNhdGNoRXJyb3IsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgZm9ybWF0Tm93LCBmb3JtYXRUaW1lU3RhbXBzIH0gZnJvbSAnLi4vLi4vdXRpbHMvdXRpbHMnO1xyXG5pbXBvcnQgeyBkZXZfZW52aXJvbm1lbnQsIHByb2RfZW52aXJvbm1lbnQgfSBmcm9tICcuLi8uLi8uLi9lbnZpcm9ubWVudHMvZW52aXJvbm1lbnQnO1xyXG5pbXBvcnQgeyBDb252ZXJzYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vY29udmVyc2F0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2hpdmVncHQtY2hhdC1kcmF3ZXInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9jaGF0LWRyYXdlci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vY2hhdC1kcmF3ZXIuY29tcG9uZW50LnNjc3MnXSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxufSlcclxuZXhwb3J0IGNsYXNzIENoYXREcmF3ZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIEBWaWV3Q2hpbGQoJ2NoYXRNYWluJykgcHJpdmF0ZSBjaGF0TWFpbjogRWxlbWVudFJlZjtcclxuXHJcbiAgQFZpZXdDaGlsZCgnZHJhd2VyJykgZHJhd2VyITogTWF0RHJhd2VyO1xyXG4gIHByaXZhdGUgYm9keU92ZXJmbG93Q2xhc3MgPSAnYm9keS1vdmVyZmxvdy1oaWRkZW4nO1xyXG4gIEBWaWV3Q2hpbGQoJ215VGV4dGFyZWEnLCB7IHN0YXRpYzogZmFsc2UgfSlcclxuICBteVRleHRhcmVhITogRWxlbWVudFJlZjxIVE1MVGV4dEFyZWFFbGVtZW50PjsgLy8gUmVmZXJlbmNlIHRvIHRoZSB0ZXh0YXJlYVxyXG5cclxuICBASW5wdXQoKSBjb3BpbG90TmFtZTogc3RyaW5nID0gXCJIaXZlWEdQVFwiO1xyXG4gIEBJbnB1dCgpIGZpcnN0TmFtZSE6IHN0cmluZztcclxuICBASW5wdXQoKSBsYXN0TmFtZSE6IHN0cmluZztcclxuICBASW5wdXQoKSBhcGlLZXkhOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgYmdCdWJibGVBaSE6IHN0cmluZztcclxuICBASW5wdXQoKSBiZ0J1YmJsZVVzZXIhOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgYmdHcmFkaWVudCE6IHN0cmluZ1tdO1xyXG4gIEBJbnB1dCgpIGJvdE5hbWUhOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgYm90U2tpbGxzITogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGJvdElkITogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGNsb3NlQnV0dG9uQ29sb3IhOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgY2xvc2VCdXR0b25iZ0NvbG9yITogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGNyZWRlbnRpYWxzITogW107XHJcbiAgQElucHV0KCkgZGF0ZVRpbWVDb2xvciE6IHN0cmluZztcclxuICBASW5wdXQoKSBkYXRlVGV4dENvbG9yITogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGV2ZW50SWQhOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgczI3VXNlclRva2VuITogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGV2ZW50TmFtZSE6IHN0cmluZztcclxuICBASW5wdXQoKSBib3RJY29uITogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGZvcm1GaWVsZEJnQ29sb3IhOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgZm9ybUZpZWxkVGV4dENvbG9yITogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGZ1bGxWaWV3ITogYm9vbGVhbjtcclxuICBASW5wdXQoKSBncmFkaWVudENvbG9ycyE6IHN0cmluZ1tdO1xyXG4gIEBJbnB1dCgpIGdyZWV0aW5nITogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIG1lc3NhZ2VUZXh0Q29sb3JBaSE6IHN0cmluZztcclxuICBASW5wdXQoKSBtZXNzYWdlVGV4dENvbG9yVXNlciE6IHN0cmluZztcclxuICBASW5wdXQoKSBydWxlcyE6IHN0cmluZztcclxuICBASW5wdXQoKSBzZW5kQnV0dG9uQ29sb3IhOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgc2VuZEJ1dHRvblRleHRDb2xvciE6IHN0cmluZztcclxuICBASW5wdXQoKSBzaG93Q2xvc2UhOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIHRodW1ic0Rvd25NZXNzYWdlcyE6IHN0cmluZ1tdO1xyXG4gIEBJbnB1dCgpIHRodW1ic1VwTWVzc2FnZSE6IHN0cmluZztcclxuICBASW5wdXQoKSB0aW1lem9uZSE6IHN0cmluZztcclxuICBASW5wdXQoKSB1bmtub3duUmVzcG9uc2VzITogW107XHJcbiAgQElucHV0KCkgdXNlT3BlbkFpITogYm9vbGVhbjtcclxuICBASW5wdXQoKSB1c2VySWQhOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgaXNEZXYhOiBib29sZWFuO1xyXG5cclxuICBASW5wdXQoKSBhZ2FpbkJ1dHRvbkNvbG9yITogc3RyaW5nW107XHJcbiAgQElucHV0KCkgYWdhaW5CdXR0b25UZXh0Q29sb3IhOiBzdHJpbmdbXTtcclxuICBAT3V0cHV0KCkgZmVlZGJhY2tFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG4gIEBPdXRwdXQoKSBvbkNsb3NlRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcbiAgQE91dHB1dCgpIG9wZW5QYWdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIHNlc3Npb25BY3Rpb25zID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIGNsb3NlQm90ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIGNvbm5lY3RXaXRoVXNlciA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBzY2hlZHVsZU1lZXRpbmcgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuXHJcbiAgYXV0b2dlbktleSA9IFwiQXV0b2dlbl9lREpUdEVVLU5CMFJ0SXB6cTF3XCJcclxuICBhZGRUb015QWdlbmRhQWN0aW9uID0gXCJhZGRfdG9fbXlfYWdlbmRhXCI7XHJcbiAgbXlVcGNvbWluZ1Nlc3Npb25BY3Rpb24gPSBcIm15X3VwY29tbWluZ19zZXNzaW9uXCI7XHJcbiAgY29ubmVjdE9yRm9sbG93QWN0aW9uID0gXCJjb25uZWN0X29yX2ZvbGxvd1wiO1xyXG4gIGFpUmVzcG9uc2U6IHN0cmluZyA9ICcnO1xyXG4gIGNoYXRMb2c6IGFueVtdID0gW107XHJcbiAgZGVjb2RlciA9IG5ldyBUZXh0RGVjb2RlcigpO1xyXG4gIGZlZWRiYWNrRG9uZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGdyZWV0aW5nTXNnOiBzdHJpbmcgPSAnJztcclxuICBoYXNCYWNrZHJvcFZhbHVlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaW5wdXQ6IHN0cmluZyA9ICcnO1xyXG4gIGxpc3RlbmVyQWRkZWQgPSBmYWxzZTtcclxuICBsb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgbW9kZTogc3RyaW5nID0gJ292ZXInO1xyXG4gIHF1aWNrUHJvbXB0czogYW55W10gPSBbXTtcclxuICB0aHVtYnNEb3duTXNnSW5kZXggPSAwO1xyXG4gIHVzZXJOYW1lOiBzdHJpbmcgPSAnJztcclxuICBzaG93U3RhcnRBZ2FpbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGlzSU9TRGV2aWNlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgc2hvd0ZlZWRCYWNrSWNvbnNJbmRleDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcbiAgdGVtcGVyYXR1cmU6IG51bWJlciA9IDE7XHJcbiAgc3BlYWtlcnMgPSBbXTtcclxuICBlbnZpcm9ubWVudDoge1xyXG4gICAgVVNFUlNfQVBJLFxyXG4gICAgQkFTRV9VUkxcclxuICB9O1xyXG4gIHBlbmRpbmdSZXF1ZXN0czogYW55O1xyXG4gIG15Q29ubmVjdGlvbnM6IGFueTtcclxuICBjb252ZXJzYXRpb25LZXk6IHN0cmluZztcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcclxuICAgIHByaXZhdGUgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsXHJcbiAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXHJcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXHJcbiAgICBwcml2YXRlIGNvbnZlcnNhdGlvbjogQ29udmVyc2F0aW9uU2VydmljZVxyXG4gICAgLy8gcHJpdmF0ZSBwbGF0Zm9ybTogUGxhdGZvcm1cclxuICApIHtcclxuICAgIHRoaXMuY2hhdE1haW4gPSBuZXcgRWxlbWVudFJlZihudWxsKTtcclxuXHJcbiAgICAvLyBpZiAodGhpcy5wbGF0Zm9ybS5JT1MpIHtcclxuICAgIC8vICAgdGhpcy5pc0lPU0RldmljZSA9IHRydWU7XHJcbiAgICAvLyB9XHJcblxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmVudmlyb25tZW50ID0gdGhpcy5pc0RldiA/IGRldl9lbnZpcm9ubWVudCA6IHByb2RfZW52aXJvbm1lbnQ7XHJcblxyXG4gICAgLy8gdGhpcy5mZXRjaE15Q29ubmVjdGlvbnMoKS5zdWJzY3JpYmUoKTtcclxuICAgIC8vIHRoaXMuZmV0Y2hQZW5kaW5nUmVxdWVzdHMoKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICB0aGlzLmNoYW5nZVRlbXBlcmF0dXJlKHRoaXMudGVtcGVyYXR1cmUpO1xyXG4gICAgdGhpcy5mZXRjaEJvdENvbmZpZygpLnN1YnNjcmliZShcclxuICAgICAgKHJlcykgPT4ge1xyXG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICAgIHRoaXMuZmV0Y2hDaGF0SGlzdG9yeSgpLnN1YnNjcmliZShcclxuICAgICAgICAgIChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5tYXBDaGF0SGlzdG9yeShyZXNwb25zZSk7XHJcbiAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIChlcnIpID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgY2hhdCBoaXN0b3J5OicsIGVycik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgICAgfSxcclxuICAgICAgKGVycikgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIGNoYXQgaGlzdG9yeTonLCBlcnIpO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgY2hhbmdlVGVtcGVyYXR1cmUobmV3VGVtcGVyYXR1cmU6IG51bWJlcikge1xyXG4gICAgaWYgKHRoaXMubG9hZGluZykgcmV0dXJuO1xyXG4gICAgdGhpcy50ZW1wZXJhdHVyZSA9IG5ld1RlbXBlcmF0dXJlO1xyXG4gICAgY29uc3Qgd3JhcHBlciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5oaXZlZ3B0LWNoYXQtd3JhcHBlcicpXHJcbiAgICAvLyBSZW1vdmUgZXhpc3RpbmcgdGhlbWUgY2xhc3NlcyBmcm9tIGJvZHlcclxuICAgIHdyYXBwZXI/LmNsYXNzTGlzdC5yZW1vdmUoJ2NyZWF0aXZlJywgJ2JhbGFuY2VkJywgJ3ByZWNpc2UnKTtcclxuXHJcbiAgICBzd2l0Y2ggKG5ld1RlbXBlcmF0dXJlKSB7XHJcbiAgICAgIGNhc2UgMDpcclxuICAgICAgICB3cmFwcGVyPy5jbGFzc0xpc3QuYWRkKCdjcmVhdGl2ZScpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIDE6XHJcbiAgICAgICAgd3JhcHBlcj8uY2xhc3NMaXN0LmFkZCgnYmFsYW5jZWQnKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAyOlxyXG4gICAgICAgIHdyYXBwZXI/LmNsYXNzTGlzdC5hZGQoJ3ByZWNpc2UnKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uU3RhcnRBZ2FpbigpIHtcclxuICAgIGlmICh0aGlzLmxvYWRpbmcpIHJldHVybjtcclxuICAgIHRoaXMuc2hvd1N0YXJ0QWdhaW4gPSBmYWxzZTtcclxuICAgIHRoaXMuY2hhdExvZyA9IFtdO1xyXG4gICAgdGhpcy5jaGF0TG9nLnB1c2goe1xyXG4gICAgICB0eXBlOiAnYWknLFxyXG4gICAgICBtZXNzYWdlOlxyXG4gICAgICAgIHRoaXMuZ3JlZXRpbmdNc2cgfHxcclxuICAgICAgICB0aGlzLnByb2Nlc3NNZXNzYWdlKFxyXG4gICAgICAgICAgXCJHcmVldGluZ3MhIEknbSB5b3VyIENPUDI4IHZpcnR1YWwgYXNzaXN0YW50LiBIYXZlIHF1ZXN0aW9ucyBhYm91dCB0aGUgZXZlbnQ/IEknbSBoZXJlIHRvIGhlbHAuXCJcclxuICAgICAgICApLFxyXG4gICAgICB0aW1lOiBmb3JtYXROb3codGhpcy50aW1lem9uZSksXHJcbiAgICB9KTtcclxuICAgIHRoaXMuYXJjaGlldmVNZXNzYWdlcygpLnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgYXJjaGlldmVNZXNzYWdlcygpIHtcclxuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoe1xyXG4gICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxyXG4gICAgICAneC1hcGkta2V5JzogdGhpcy5hcGlLZXksXHJcbiAgICB9KTtcclxuICAgIGNvbnN0IHVybCA9IGAke3RoaXMuZW52aXJvbm1lbnQuQkFTRV9VUkx9L2JvdC9jbGVhci1oaXN0b3J5LyR7dGhpcy5ib3RJZH0vJHt0aGlzLnVzZXJJZH1gO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KHVybCwge30sIHsgaGVhZGVycyB9KS5waXBlKFxyXG4gICAgICBzd2l0Y2hNYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIG9mKHJlcyk7XHJcbiAgICAgIH0pLFxyXG4gICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xyXG4gICAgICAgIHJldHVybiBvZihudWxsKTtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBmZXRjaEJvdENvbmZpZygpIHtcclxuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLmVudmlyb25tZW50LkJBU0VfVVJMfS9ib3RzP2JvdF9pZD0ke3RoaXMuYm90SWR9YDtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHVybCkucGlwZShcclxuICAgICAgc3dpdGNoTWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuYm90TmFtZSA9IHJlcy5OYW1lO1xyXG4gICAgICAgIHRoaXMuYm90SWNvbiA9IHJlcy5JY29uO1xyXG4gICAgICAgIHRoaXMuYm90U2tpbGxzID0gcmVzPy5Ta2lsbHM7XHJcbiAgICAgICAgdGhpcy5ncmVldGluZ01zZyA9IHJlcy5HcmVldGluZztcclxuXHJcbiAgICAgICAgdGhpcy50aHVtYnNEb3duTWVzc2FnZXMgPSByZXM/Lk5lZ2F0aXZlUmVzcG9uc2VzPy5sZW5ndGhcclxuICAgICAgICAgID8gcmVzLk5lZ2F0aXZlUmVzcG9uc2VzXHJcbiAgICAgICAgICA6IFtcclxuICAgICAgICAgICAgXCJXZSBhcmUgc29ycnkgd2UndmUgbm90IGJlZW4gYWJsZSB0byBhbnN3ZXIgeW91ciBxdWVzdGlvbi48YnIvPiBIb3dldmVyLCBvdXIgZGVkaWNhdGVkIHN1cHBvcnQgdGVhbSBpcyBoYXBweSB0byBoZWxwLiA8c3BhbiBjbGFzcz0nZmVlZGJhY2stbGluaycgc3R5bGU9J2N1cnNvcjogcG9pbnRlcjsgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7IGZvbnQtd2VpZ2h0OiA3MDA7IGNvbG9yOiAjMTcyMzVCOyc+UGxlYXNlIGNsaWNrIGhlcmU8L3NwYW4+IGFuZCBhIGh1bWFuIGFnZW50IHdpbGwgYXNzaXN0IHlvdSBhcyBzb29uIGFzIHBvc3NpYmxlXCIsXHJcbiAgICAgICAgICBdO1xyXG4gICAgICAgIHRoaXMucXVpY2tQcm9tcHRzID0gcmVzLlF1aWNrUHJvbXB0cztcclxuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICByZXR1cm4gb2YocmVzKTtcclxuICAgICAgfSksXHJcbiAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgY2hhdGJvdCBjb25maWc6ICcsIGVycm9yKTtcclxuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICByZXR1cm4gb2YobnVsbCk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZmV0Y2hDaGF0SGlzdG9yeSgpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMuY29udmVyc2F0aW9uS2V5ID0gdGhpcy5jb252ZXJzYXRpb24uZ2V0S2V5KHRoaXMuYm90SWQpO1xyXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5lbnZpcm9ubWVudC5CQVNFX1VSTH0vY29udmVyc2F0aW9ucy8ke3RoaXMuY29udmVyc2F0aW9uS2V5fWA7XHJcbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKHtcclxuICAgICAgJ2FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uJ1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQodXJsLCB7IGhlYWRlcnMgfSkucGlwZShcclxuICAgICAgY2F0Y2hFcnJvcih0aGlzLmhhbmRsZUVycm9yPGFueT4oJ2ZldGNoQ29udmVyc2F0aW9uJykpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVFcnJvcjxUPihvcGVyYXRpb24gPSAnb3BlcmF0aW9uJywgcmVzdWx0PzogVCkge1xyXG4gICAgcmV0dXJuIChlcnJvcjogYW55KTogT2JzZXJ2YWJsZTxUPiA9PiB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoYCR7b3BlcmF0aW9ufSBmYWlsZWQ6ICR7ZXJyb3IubWVzc2FnZX1gKTtcclxuICAgICAgcmV0dXJuIG9mKHJlc3VsdCBhcyBUKTtcclxuICAgIH07XHJcbiAgfVxyXG4gIC8vIGZldGNoQ2hhdEhpc3RvcnkoKSB7XHJcbiAgLy8gICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG4gIC8vICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycyh7XHJcbiAgLy8gICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXHJcbiAgLy8gICAgICd4LWFwaS1rZXknOiB0aGlzLmFwaUtleSxcclxuICAvLyAgIH0pO1xyXG4gIC8vICAgcmV0dXJuIHRoaXMuaHR0cFxyXG4gIC8vICAgICAuZ2V0KGAke3RoaXMuZW52aXJvbm1lbnQuQkFTRV9VUkx9L2NvbnZlcnNhdGlvbnMvJHt0aGlzLmNvbnZlcnNhdGlvbktleX1gLCB7IGhlYWRlcnMgfSlcclxuICAvLyAgICAgLnBpcGUoXHJcbiAgLy8gICAgICAgc3dpdGNoTWFwKChyZXM6IGFueSkgPT4ge1xyXG4gIC8vICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgLy8gICAgICAgICByZXR1cm4gb2YocmVzKTtcclxuICAvLyAgICAgICB9KSxcclxuICAvLyAgICAgICBjYXRjaEVycm9yKChlcnJvcjogYW55KSA9PiB7XHJcbiAgLy8gICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyBjaGF0IGhpc3Rvcnk6ICcsIGVycm9yKTtcclxuICAvLyAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gIC8vICAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xyXG4gIC8vICAgICAgIH0pXHJcbiAgLy8gICAgICk7XHJcbiAgLy8gfVxyXG5cclxuICBtYXBDaGF0SGlzdG9yeShjaGF0czogYW55KSB7XHJcbiAgICB0aGlzLmNoYXRMb2cucHVzaCh7XHJcbiAgICAgIHR5cGU6ICdhaScsXHJcbiAgICAgIG1lc3NhZ2U6XHJcbiAgICAgICAgdGhpcy5ncmVldGluZ01zZyB8fFxyXG4gICAgICAgIHRoaXMucHJvY2Vzc01lc3NhZ2UoXHJcbiAgICAgICAgICBcIkdyZWV0aW5ncyEgSSdtIHlvdXIgQ09QMjggdmlydHVhbCBhc3Npc3RhbnQuIEhhdmUgcXVlc3Rpb25zIGFib3V0IHRoZSBldmVudD8gSSdtIGhlcmUgdG8gaGVscC5cIlxyXG4gICAgICAgICksXHJcbiAgICAgIHRpbWU6IGZvcm1hdE5vdyh0aGlzLnRpbWV6b25lKSxcclxuICAgIH0pO1xyXG4gICAgaWYgKGNoYXRzICYmIGNoYXRzPy5NZXNzYWdlcz8ubGVuZ3RoKSB7XHJcbiAgICAgIGNoYXRzPy5NZXNzYWdlcy5mb3JFYWNoKChjaGF0OiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoY2hhdC5UeXBlID09IFwidXNlclwiKSB7XHJcbiAgICAgICAgICB0aGlzLmNoYXRMb2cucHVzaCh7XHJcbiAgICAgICAgICAgIHR5cGU6ICd1c2VyJyxcclxuICAgICAgICAgICAgbWVzc2FnZTogdGhpcy5wcm9jZXNzTWVzc2FnZShjaGF0LlRleHQpLFxyXG4gICAgICAgICAgICB0aW1lOiBmb3JtYXRUaW1lU3RhbXBzKHRoaXMudGltZXpvbmUsIGNoYXQuSW5zZXJ0VGltZXN0YW1wKSxcclxuICAgICAgICAgICAgY29waWVkOiBmYWxzZVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjaGF0LlR5cGUgPT0gXCJhaVwiKSB7XHJcbiAgICAgICAgICB0aGlzLmNoYXRMb2cucHVzaCh7XHJcbiAgICAgICAgICAgIHR5cGU6ICdhaScsXHJcbiAgICAgICAgICAgIG1lc3NhZ2U6IHRoaXMucHJvY2Vzc01lc3NhZ2UoY2hhdC5UZXh0KSxcclxuICAgICAgICAgICAgdGltZTogZm9ybWF0VGltZVN0YW1wcyh0aGlzLnRpbWV6b25lLCBjaGF0Lkluc2VydFRpbWVzdGFtcCksXHJcbiAgICAgICAgICAgIGNvcGllZDogZmFsc2VcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgdGhpcy5zaG93RmVlZEJhY2tJY29uc0luZGV4ID0gdGhpcy5jaGF0TG9nLmxlbmd0aCAtIDE7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5zaG93U3RhcnRBZ2FpbiA9IHRydWU7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNjcm9sbFRvQm90dG9tKCk7XHJcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICB9XHJcblxyXG4gIHByb2Nlc3NNZXNzYWdlKG1lc3NhZ2U6IHN0cmluZyk6IFNhZmVIdG1sIHtcclxuICAgIGlmICghbWVzc2FnZSB8fCAhKG1lc3NhZ2U/Lmxlbmd0aCA+IDApKSB7XHJcbiAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuXHJcbiAgICBjb25zb2xlLmxvZygnaGVyZSBpcyBteSBtZXNzYWdlJylcclxuICAgIGNvbnNvbGUubG9nKG1lc3NhZ2UpO1xyXG5cclxuICAgIG1lc3NhZ2UgPSBtZXNzYWdlLnRyaW0oKTtcclxuXHJcbiAgICBjb25zdCBtYXJrZG93bkxpbmtSZWdleCA9IC9cXFsoW15bXSspXVxcKChbXildKylcXCkvZztcclxuICAgIGNvbnN0IHVybFJlZ2V4ID0gLyg/PCFocmVmPVwiKVxcYmh0dHBzPzpcXC9cXC9cXFMrKD88IVsuLF0pL2dpO1xyXG5cclxuICAgIGlmIChtYXJrZG93bkxpbmtSZWdleC50ZXN0KG1lc3NhZ2UpKSB7XHJcbiAgICAgIGNvbnN0IGh0bWwgPSBtZXNzYWdlLnJlcGxhY2UoXHJcbiAgICAgICAgbWFya2Rvd25MaW5rUmVnZXgsXHJcbiAgICAgICAgJzxhIGhyZWY9XCIkMlwiIHRhcmdldD1cIl9ibGFua1wiPiQxPC9hPidcclxuICAgICAgKTtcclxuICAgICAgY29uc29sZS5sb2coJ1Nhbml0aXplZCBtZXNzYWdlOiAnLCBtZXNzYWdlKTtcclxuICAgICAgcmV0dXJuIHRoaXMuc2FuaXRpemVIdG1sKGh0bWwpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh1cmxSZWdleC50ZXN0KG1lc3NhZ2UpKSB7XHJcbiAgICAgIGNvbnN0IGh0bWwgPSBtZXNzYWdlLnJlcGxhY2UoXHJcbiAgICAgICAgdXJsUmVnZXgsXHJcbiAgICAgICAgJzxhIGhyZWY9XCIkJlwiIHRhcmdldD1cIl9ibGFua1wiPiQmPC9hPidcclxuICAgICAgKTtcclxuICAgICAgY29uc29sZS5sb2coJ1Nhbml0aXplZCBtZXNzYWdlOiAnLCBtZXNzYWdlKTtcclxuICAgICAgcmV0dXJuIHRoaXMuc2FuaXRpemVIdG1sKGh0bWwpO1xyXG4gICAgfVxyXG5cclxuICAgIG1lc3NhZ2UgPSBtZXNzYWdlLnJlcGxhY2UoLyg/OlxcclxcbnxcXHJ8XFxuKS9nLCAnPGJyPicpO1xyXG5cclxuICAgIG1lc3NhZ2UgPSBtZXNzYWdlLnJlcGxhY2UoL1xcKlxcKiguKj8pXFwqXFwqL2csICc8c3Ryb25nPiQxPC9zdHJvbmc+Jyk7XHJcblxyXG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgICBjb25zdCBzYW5pdGl6ZWRNZXNzYWdlID0gdGhpcy5zYW5pdGl6ZUh0bWwobWVzc2FnZSk7XHJcbiAgICByZXR1cm4gc2FuaXRpemVkTWVzc2FnZTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpIHtcclxuICAgIGNvbnN0IGZlZWRiYWNrTGlua3MgPVxyXG4gICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuZmVlZGJhY2stbGluaycpO1xyXG4gICAgZmVlZGJhY2tMaW5rcy5mb3JFYWNoKChsaW5rOiBhbnkpID0+IHtcclxuICAgICAgbGluay5hZGRFdmVudExpc3RlbmVyKFxyXG4gICAgICAgICdjbGljaycsXHJcbiAgICAgICAgdGhpcy5vbkZlZWRiYWNrQ2xpY2suYmluZCh0aGlzLCAnemVuZGVzaycpXHJcbiAgICAgICk7XHJcbiAgICB9KTtcclxuICAgIC8vIGlmICh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuZmVlZGJhY2stbGluaycpKSB7XHJcbiAgICAvLyAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50XHJcbiAgICAvLyAgICAgLnF1ZXJ5U2VsZWN0b3IoJy5mZWVkYmFjay1saW5rJylcclxuICAgIC8vICAgICAuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLm9uRmVlZGJhY2tDbGljay5iaW5kKHRoaXMsICd6ZW5kZXNrJykpO1xyXG4gICAgLy8gfVxyXG4gIH1cclxuXHJcbiAgc2FuaXRpemVIdG1sKGh0bWw6IHN0cmluZyk6IFNhZmVIdG1sIHtcclxuICAgIHJldHVybiB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0SHRtbChodG1sKTtcclxuICB9XHJcblxyXG4gIG9uRmVlZGJhY2tDbGljayh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLmZlZWRiYWNrRXZlbnQuZW1pdCh2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBvbkNsb3NlKCkge1xyXG4gICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyhkb2N1bWVudC5ib2R5LCB0aGlzLmJvZHlPdmVyZmxvd0NsYXNzKTtcclxuICAgIHRoaXMub25DbG9zZUV2ZW50LmVtaXQoKTtcclxuICB9XHJcblxyXG4gIHNlbmRNZXNzYWdlV2l0aFRpbGUocHJvbXB0OiBzdHJpbmcpIHtcclxuICAgIHRoaXMuaW5wdXQgPSBwcm9tcHQ7XHJcbiAgICB0aGlzLmZldGNoRGF0YSgpO1xyXG4gICAgdGhpcy5zY3JvbGxUb0JvdHRvbSgpO1xyXG4gIH1cclxuICBpc0NoYXRpbmdXaXRoQWkgPSBmYWxzZTtcclxuICBmZXRjaERhdGEoKSB7XHJcbiAgICB0aGlzLmlucHV0ID0gdGhpcy5pbnB1dD8udHJpbSgpO1xyXG4gICAgaWYgKCF0aGlzLmlucHV0IHx8IHRoaXMubG9hZGluZykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jaGF0TG9nLnB1c2goe1xyXG4gICAgICB0eXBlOiAndXNlcicsXHJcbiAgICAgIG1lc3NhZ2U6IHRoaXMucHJvY2Vzc01lc3NhZ2UodGhpcy5pbnB1dCksXHJcbiAgICAgIHRpbWU6IGZvcm1hdE5vdyh0aGlzLnRpbWV6b25lKSxcclxuICAgICAgY29waWVkOiBmYWxzZVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcblxyXG4gICAgdGhpcy5haVJlc3BvbnNlID0gJyc7XHJcbiAgICB0aGlzLmlzQ2hhdGluZ1dpdGhBaSA9IHRydWU7XHJcblxyXG4gICAgY29uc3QgdXJsID1cclxuICAgICAgYCR7dGhpcy5lbnZpcm9ubWVudC5CQVNFX1VSTH0vYWkvYXNrYC8vICtcclxuICAgIC8vICh0aGlzLnVzZU9wZW5BaSA9PT0gZmFsc2UgPyAnL2xsbS1oZicgOiAnJyk7XHJcbiAgICBmZXRjaCh1cmwsIHtcclxuICAgICAgbWV0aG9kOiAnUE9TVCcsXHJcbiAgICAgIGhlYWRlcnM6IHtcclxuICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxyXG4gICAgICAgICd4LWFwaS1rZXknOiB0aGlzLmFwaUtleSxcclxuICAgICAgfSxcclxuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xyXG4gICAgICAgIHVzZXJfcXVlc3Rpb246IHRoaXMuaW5wdXQsXHJcbiAgICAgICAgdXNlcl9pZDogdGhpcy51c2VySWQsXHJcbiAgICAgICAgYm90X2lkOiB0aGlzLmJvdElkLFxyXG4gICAgICAgIC8vIHRlbXBlcmF0dXJlOiB0aGlzLnRlbXBlcmF0dXJlLFxyXG4gICAgICAgIC8vICBldmVudF9pZDogdGhpcy5ldmVudElkLFxyXG4gICAgICAgIC8vIHRva2VuOiB0aGlzLnMyN1VzZXJUb2tlbixcclxuICAgICAgICBjb252ZXJzYXRpb25faWQ6IHRoaXMuY29udmVyc2F0aW9uS2V5XHJcbiAgICAgIH0pLFxyXG4gICAgfSlcclxuICAgICAgLy8gUmV0cmlldmUgaXRzIGJvZHkgYXMgUmVhZGFibGVTdHJlYW1cclxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucmVhZEFsbENodW5rcyhyZXNwb25zZS5ib2R5KTtcclxuICAgICAgfSlcclxuICAgICAgLmNhdGNoKChlcnIpID0+IHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnI6ICcsIGVycik7XHJcbiAgICAgICAgdGhpcy5pc0NoYXRpbmdXaXRoQWkgPSBmYWxzZTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgdGhpcy5pbnB1dCA9ICcnO1xyXG4gIH1cclxuXHJcbiAgZmV0Y2hTbWFsbFRhbGsoKSB7XHJcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcblxyXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5lbnZpcm9ubWVudC5CQVNFX1VSTH0vYm90L3NtYWxsLXRhbGsvJHt0aGlzLmJvdElkfS8ke3RoaXMudXNlcklkfWA7XHJcblxyXG4gICAgdGhpcy5odHRwXHJcbiAgICAgIC5nZXQ8eyBzbWFsbFRhbGs6IHN0cmluZyB9Pih1cmwsIHtcclxuICAgICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgICAneC1hcGkta2V5JzogdGhpcy5hcGlLZXksXHJcbiAgICAgICAgfSxcclxuICAgICAgfSlcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHdoaWxlIGZldGNoaW5nIHNtYWxsIHRhbGs6JywgZXJyb3IpO1xyXG5cclxuICAgICAgICAgIHJldHVybiBvZihudWxsKTtcclxuICAgICAgICB9KVxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcblxyXG4gICAgICAgIGlmICghcmVzcG9uc2UpIHtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS5zbWFsbFRhbGspIHtcclxuICAgICAgICAgIHRoaXMuY2hhdExvZy5wdXNoKHtcclxuICAgICAgICAgICAgdHlwZTogJ2FpJyxcclxuICAgICAgICAgICAgbWVzc2FnZTogdGhpcy5wcm9jZXNzTWVzc2FnZShyZXNwb25zZS5zbWFsbFRhbGspLFxyXG4gICAgICAgICAgICB0aW1lOiBmb3JtYXROb3codGhpcy50aW1lem9uZSksXHJcbiAgICAgICAgICAgIGlzRmVlZGJhY2tNc2c6IHRydWUsXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHRoaXMuc2hvd0ZlZWRCYWNrSWNvbnNJbmRleCA9IHRoaXMuY2hhdExvZy5sZW5ndGggLSAyO1xyXG4gICAgICAgICAgLy8gdGhpcy5zY3JvbGxUb0JvdHRvbSgpO1xyXG4gICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHJlYWRBbGxDaHVua3MgPSAoc3RyZWFtOiBhbnkpID0+IHtcclxuICAgIGNvbnN0IHJlYWRlciA9IHN0cmVhbS5nZXRSZWFkZXIoKTtcclxuICAgIGNvbnN0IGFsbFN1Z2dlc3Rpb25zOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICAgIHJlYWRlci5jbG9zZWQuY2F0Y2goKGVycjogYW55KSA9PiB7XHJcbiAgICAgIGlmIChlcnIpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciByZWFkaW5nIHN0cmVhbTogJywgZXJyKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5pc0NoYXRpbmdXaXRoQWkgPSBmYWxzZTtcclxuICAgICAgdGhpcy5zY3JvbGxUb0JvdHRvbSgpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gbmV3IFJlYWRhYmxlU3RyZWFtKHtcclxuICAgICAgc3RhcnQ6IChjb250cm9sbGVyKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucHVtcChjb250cm9sbGVyLCByZWFkZXIsIGFsbFN1Z2dlc3Rpb25zKTtcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gIH07XHJcblxyXG4gIHB1bXAoY29udHJvbGxlcjogYW55LCByZWFkZXI6IGFueSwgYWxsU3VnZ2VzdGlvbnM6IHN0cmluZ1tdKSB7XHJcbiAgICByZWFkZXIucmVhZCgpLnRoZW4oKHsgZG9uZSwgdmFsdWUgfTogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IGxhc3RJdGVtID0gdGhpcy5jaGF0TG9nW3RoaXMuY2hhdExvZy5sZW5ndGggLSAxXTtcclxuXHJcbiAgICAgIGlmIChkb25lKSB7XHJcbiAgICAgICAgbGFzdEl0ZW0ubWVzc2FnZSA9IHRoaXMucHJvY2Vzc01lc3NhZ2UobGFzdEl0ZW0ubWVzc2FnZSk7XHJcbiAgICAgICAgdGhpcy5jaGF0TG9nLnBvcCgpO1xyXG4gICAgICAgIHRoaXMuY2hhdExvZy5wdXNoKGxhc3RJdGVtKTtcclxuICAgICAgICBpZiAoYWxsU3VnZ2VzdGlvbnM/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgdGhpcy5jaGF0TG9nLnB1c2goe1xyXG4gICAgICAgICAgICB0eXBlOiAnc3VnZ2VzdGlvbnMnLFxyXG4gICAgICAgICAgICBzdWdnZXN0aW9uczogYWxsU3VnZ2VzdGlvbnNcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb250cm9sbGVyLmNsb3NlKCk7XHJcbiAgICAgICAgdGhpcy5pc0NoYXRpbmdXaXRoQWkgPSBmYWxzZTtcclxuICAgICAgICAvLyB0aGlzLnNjcm9sbFRvQm90dG9tKCk7XHJcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgdGhpcy5zaG93U3RhcnRBZ2FpbiA9IHRydWU7XHJcblxyXG4gICAgICAgIC8vIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIC8vICAgdGhpcy5mZXRjaFNtYWxsVGFsaygpO1xyXG4gICAgICAgIC8vIH0sMTAwMClcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGxldCBkZWNvZGVkQ2h1bmsgPSB0aGlzLmRlY29kZXIuZGVjb2RlKHZhbHVlLCB7IHN0cmVhbTogdHJ1ZSB9KTtcclxuICAgICAgdGhpcy5haVJlc3BvbnNlICs9IGRlY29kZWRDaHVuaztcclxuICAgICAgaWYgKGxhc3RJdGVtLnR5cGUgPT09ICdhaScpIHtcclxuICAgICAgICBjb25zdCBzdWdnZXN0aW9uc01hdGNoID0gdGhpcy5haVJlc3BvbnNlLm1hdGNoKC88c3VnPiguKj8pPFxcL3N1Zz4vZyk7XHJcbiAgICAgICAgaWYgKHN1Z2dlc3Rpb25zTWF0Y2gpIHtcclxuICAgICAgICAgIHN1Z2dlc3Rpb25zTWF0Y2guZm9yRWFjaCgobWF0Y2gpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5haVJlc3BvbnNlID0gdGhpcy5haVJlc3BvbnNlLnJlcGxhY2UobWF0Y2gsIFwiXCIpO1xyXG4gICAgICAgICAgICBhbGxTdWdnZXN0aW9ucy5wdXNoKG1hdGNoPy5yZXBsYWNlKC88XFwvP3N1Zz4vZywgXCJcIikpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsYXN0SXRlbS5tZXNzYWdlID0gdGhpcy5haVJlc3BvbnNlO1xyXG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuaXNDaGF0aW5nV2l0aEFpID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGxldCBhaUZvcm1hdHRlZERhdGE6IGFueTtcclxuXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCdwYXJzaW5nIGpzb24gJylcclxuICAgICAgICAgIGFpRm9ybWF0dGVkRGF0YSA9IEpTT04ucGFyc2UoSlNPTi5wYXJzZSh0aGlzLmFpUmVzcG9uc2UpKVxyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ3BhcnNpbmcganNvbiAyJylcclxuICAgICAgICAgICAgYWlGb3JtYXR0ZWREYXRhID0gSlNPTi5wYXJzZSh0aGlzLmFpUmVzcG9uc2UpXHJcbiAgICAgICAgICB9IGNhdGNoIChlKSB7IH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnNvbGUubG9nKCdwYXJzaW5nIGpzb24gZG9uZScpXHJcblxyXG4gICAgICAgIGlmIChhaUZvcm1hdHRlZERhdGEgJiYgYWlGb3JtYXR0ZWREYXRhPy5zZWN0aW9uX2lkPy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBpZiAoYWlGb3JtYXR0ZWREYXRhLnNlY3Rpb25faWQgPT0gJ2NvbXBhbnlfc2VhcmNoJyB8fCBhaUZvcm1hdHRlZERhdGEuc2VjdGlvbl9pZCA9PSAndXNlcl9zZWFyY2gnIHx8IGFpRm9ybWF0dGVkRGF0YS5zZWN0aW9uX2lkID09ICdpbmR1c3RyeV9jb21wYW55X3NlYXJjaCcpIHtcclxuICAgICAgICAgICAgdGhpcy5mZXRjaE15Q29ubmVjdGlvbnMoKS5zdWJzY3JpYmUoKTtcclxuICAgICAgICAgICAgdGhpcy5mZXRjaFBlbmRpbmdSZXF1ZXN0cygpLnN1YnNjcmliZSgpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmIChhaUZvcm1hdHRlZERhdGEuc2VjdGlvbl9pZCA9PSB0aGlzLm15VXBjb21pbmdTZXNzaW9uQWN0aW9uKSB7XHJcbiAgICAgICAgICAgIHZhciBzcGVha2VySWRzID0gW107XHJcbiAgICAgICAgICAgIGFpRm9ybWF0dGVkRGF0YS5jb250ZW50Py5mb3JFYWNoKHNlc3Npb24gPT4ge1xyXG4gICAgICAgICAgICAgIHNwZWFrZXJJZHMgPSBbLi4uc3BlYWtlcklkcywgLi4uc2Vzc2lvbi5zcGVha2Vyc11cclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoc3BlYWtlcklkcz8ubGVuZ3RoID4gMClcclxuICAgICAgICAgICAgICB0aGlzLmdldFNwZWFrZXJzQnlTdGFmZklkcyhzcGVha2VySWRzKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAoYWlGb3JtYXR0ZWREYXRhLnNlY3Rpb25faWQgPT0gdGhpcy5hZGRUb015QWdlbmRhQWN0aW9uICYmIGFpRm9ybWF0dGVkRGF0YS5jb250ZW50Py5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMub3BlblBhZ2UubmV4dCh7XHJcbiAgICAgICAgICAgICAgc2VjdGlvbklkOiBhaUZvcm1hdHRlZERhdGEuc2VjdGlvbl9pZCxcclxuICAgICAgICAgICAgICBzZXNzaW9uSWRzOiBhaUZvcm1hdHRlZERhdGEuY29udGVudFxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmIChhaUZvcm1hdHRlZERhdGEuc2VjdGlvbl9pZCA9PSB0aGlzLmNvbm5lY3RPckZvbGxvd0FjdGlvbikge1xyXG4gICAgICAgICAgICBsZXQgdXNlcnNMZW4gPSBhaUZvcm1hdHRlZERhdGEuY29udGVudD8ubGVuZ3RoO1xyXG4gICAgICAgICAgICBpZiAodXNlcnNMZW4gPiAxKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5vcGVuUGFnZS5uZXh0KHtcclxuICAgICAgICAgICAgICAgIHNlY3Rpb25JZDogXCJvcGVuX25ldHdvcmtpbmdfZHJhd2VyXCIsXHJcbiAgICAgICAgICAgICAgICBzZWFyY2g6IGFpRm9ybWF0dGVkRGF0YS5jb250ZW50XHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICh1c2Vyc0xlbiA9PSAxKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5vcGVuUGFnZS5uZXh0KHtcclxuICAgICAgICAgICAgICAgIHNlY3Rpb25JZDogYWlGb3JtYXR0ZWREYXRhLnNlY3Rpb25faWQsXHJcbiAgICAgICAgICAgICAgICBjb25uZXRVc2VySWRzOiBbYWlGb3JtYXR0ZWREYXRhLmNvbnRlbnRbMF0udXNlcklkXVxyXG4gICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAoYWlGb3JtYXR0ZWREYXRhLmlzX29wZW5fcGFnZSA9PSBcInRydWVcIikge1xyXG4gICAgICAgICAgICB0aGlzLm9wZW5QYWdlLm5leHQoe1xyXG4gICAgICAgICAgICAgIHNlY3Rpb25JZDogYWlGb3JtYXR0ZWREYXRhLnNlY3Rpb25faWQsXHJcbiAgICAgICAgICAgICAgc2VhcmNoOiBhaUZvcm1hdHRlZERhdGEuY29udGVudFxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzTW9iaWxlQnJvd3NlcigpKSB7XHJcbiAgICAgICAgICAgICAgYWlGb3JtYXR0ZWREYXRhLm1lc3NhZ2UgKz0gXCJcXG5cXG5cIiArICc8YSBpZD1cImNsb3NlQm90Tm93XCI+Q2xpY2sgSGVyZTwvYT4gdG8gc2VlIHJlc3VsdHMuJ1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG5cclxuXHJcbiAgICAgICAgICB0aGlzLmNoYXRMb2cucHVzaCh7XHJcbiAgICAgICAgICAgIHR5cGU6ICdhaScsXHJcbiAgICAgICAgICAgIG1lc3NhZ2U6IGFpRm9ybWF0dGVkRGF0YS5tZXNzYWdlLFxyXG4gICAgICAgICAgICBhY3Rpb246IGFpRm9ybWF0dGVkRGF0YSxcclxuICAgICAgICAgICAgdGltZTogZm9ybWF0Tm93KHRoaXMudGltZXpvbmUpXHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5pc01vYmlsZUJyb3dzZXIoKSkge1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLmFkZENsb3NlQm90Q2xpY2tFdmVudCgpO1xyXG4gICAgICAgICAgICB9LCA1MDApO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHRoaXMuYWlSZXNwb25zZSA9IFwiXCI7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuY2hhdExvZy5wdXNoKHtcclxuICAgICAgICAgICAgdHlwZTogJ2FpJyxcclxuICAgICAgICAgICAgbWVzc2FnZTogdGhpcy5haVJlc3BvbnNlLFxyXG4gICAgICAgICAgICB0aW1lOiBmb3JtYXROb3codGhpcy50aW1lem9uZSksXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2hvd0ZlZWRCYWNrSWNvbnNJbmRleCA9IHRoaXMuY2hhdExvZy5sZW5ndGggLSAxO1xyXG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLnNjcm9sbFRvQm90dG9tKCk7XHJcblxyXG4gICAgICAvLyBFbnF1ZXVlIHRoZSBuZXh0IGRhdGEgY2h1bmsgaW50byBvdXIgdGFyZ2V0IHN0cmVhbVxyXG4gICAgICBjb250cm9sbGVyLmVucXVldWUodmFsdWUpO1xyXG4gICAgICB0aGlzLnB1bXAoY29udHJvbGxlciwgcmVhZGVyLCBhbGxTdWdnZXN0aW9ucyk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHN1Ym1pdEZlZWRiYWNrKGZsYWc6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuZmVlZGJhY2tEb25lID0gdHJ1ZTtcclxuICAgIHRoaXMuc2hvd0ZlZWRCYWNrSWNvbnNJbmRleCA9IG51bGw7XHJcbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLmVudmlyb25tZW50LkJBU0VfVVJMfS9ib3QvZmVlZGJhY2tgO1xyXG4gICAgZmV0Y2godXJsLCB7XHJcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxyXG4gICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcclxuICAgICAgICAneC1hcGkta2V5JzogdGhpcy5hcGlLZXksXHJcbiAgICAgIH0sXHJcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHsgZmxhZywgdXNlcl9pZDogdGhpcy51c2VySWQsIGJvdF9pZDogdGhpcy5ib3RJZCB9KSxcclxuICAgIH0pLnRoZW4oKCkgPT4ge1xyXG4gICAgICBpZiAoZmxhZykge1xyXG4gICAgICAgIHRoaXMuY2hhdExvZy5wdXNoKHtcclxuICAgICAgICAgIHR5cGU6ICdhaScsXHJcbiAgICAgICAgICBtZXNzYWdlOlxyXG4gICAgICAgICAgICB0aGlzLnRodW1ic1VwTWVzc2FnZSB8fFxyXG4gICAgICAgICAgICBgR3JlYXQuIE1heSBJIGFzc2lzdCB5b3Ugd2l0aCBhbnl0aGluZyBlbHNlP2AsXHJcbiAgICAgICAgICB0aW1lOiBmb3JtYXROb3codGhpcy50aW1lem9uZSksXHJcbiAgICAgICAgICBpc0ZlZWRiYWNrTXNnOiB0cnVlLFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLnNjcm9sbFRvQm90dG9tKCk7XHJcbiAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgdGhpcy5mZWVkYmFja0RvbmUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNob3dGZWVkQmFja0ljb25zSW5kZXggPSBudWxsO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5jaGF0TG9nLnB1c2goe1xyXG4gICAgICAgIHR5cGU6ICdhaScsXHJcbiAgICAgICAgbWVzc2FnZTogdGhpcy5wcm9jZXNzTWVzc2FnZShcclxuICAgICAgICAgIHRoaXMudGh1bWJzRG93bk1lc3NhZ2VzW3RoaXMudGh1bWJzRG93bk1zZ0luZGV4XVxyXG4gICAgICAgICksXHJcbiAgICAgICAgdGltZTogZm9ybWF0Tm93KHRoaXMudGltZXpvbmUpLFxyXG4gICAgICAgIGlzRmVlZGJhY2tNc2c6IHRydWUsXHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLnRodW1ic0Rvd25Nc2dJbmRleCA9XHJcbiAgICAgICAgKHRoaXMudGh1bWJzRG93bk1zZ0luZGV4ICsgMSkgJSB0aGlzLnRodW1ic0Rvd25NZXNzYWdlcy5sZW5ndGg7XHJcbiAgICAgIHRoaXMuc2Nyb2xsVG9Cb3R0b20oKTtcclxuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgIHRoaXMuZmVlZGJhY2tEb25lID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuc2hvd0ZlZWRCYWNrSWNvbnNJbmRleCA9IG51bGw7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGhhbmRsZVN1Ym1pdCgpIHtcclxuICAgIHRoaXMuZmV0Y2hEYXRhKCk7XHJcbiAgICB0aGlzLnNjcm9sbFRvQm90dG9tKCk7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVVcENsaWNrKGlkeDogYW55KSB7XHJcbiAgICBpZiAodGhpcy5mZWVkYmFja0RvbmUpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc3VibWl0RmVlZGJhY2sodHJ1ZSk7XHJcbiAgICB0aGlzLmNoYXRMb2dbaWR4XS5saWtlZCA9ICF0aGlzLmNoYXRMb2dbaWR4XS5saWtlZDtcclxuXHJcbiAgICBpZiAodGhpcy5jaGF0TG9nW2lkeF0udW5saWtlZCkge1xyXG4gICAgICB0aGlzLmNoYXRMb2dbaWR4XS51bmxpa2VkID0gIXRoaXMuY2hhdExvZ1tpZHhdLnVubGlrZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVEb3duQ2xpY2soaWR4OiBhbnkpIHtcclxuICAgIGlmICh0aGlzLmZlZWRiYWNrRG9uZSkgcmV0dXJuO1xyXG4gICAgdGhpcy5zdWJtaXRGZWVkYmFjayhmYWxzZSk7XHJcbiAgICB0aGlzLmNoYXRMb2dbaWR4XS51bmxpa2VkID0gIXRoaXMuY2hhdExvZ1tpZHhdLnVubGlrZWQ7XHJcbiAgICBpZiAodGhpcy5jaGF0TG9nW2lkeF0ubGlrZWQpXHJcbiAgICAgIHRoaXMuY2hhdExvZ1tpZHhdLmxpa2VkID0gIXRoaXMuY2hhdExvZ1tpZHhdLmxpa2VkO1xyXG4gIH1cclxuICBoYW5kbGVDb3B5Q2xpY2soaW5kZXg6IGFueSkge1xyXG4gICAgLy8gQ29weSB0aGUgbWVzc2FnZSB0byB0aGUgY2xpcGJvYXJkXHJcbiAgICBjb25zdCBjb250ZW50VG9Db3B5ID0gdGhpcy5jaGF0TG9nW2luZGV4XS5tZXNzYWdlID8gdGhpcy5oYW5kbGVNYXJrZG93bih0aGlzLmNoYXRMb2dbaW5kZXhdLm1lc3NhZ2UpIDogdGhpcy5jaGF0TG9nW2luZGV4XS5tZXNzYWdlO1xyXG4gICAgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoY29udGVudFRvQ29weSkudGhlbigoKSA9PiB7XHJcbiAgICAgIC8vIEluZGljYXRlIHRoYXQgdGhlIG1lc3NhZ2Ugd2FzIGNvcGllZFxyXG4gICAgICB0aGlzLmNoYXRMb2dbaW5kZXhdLmNvcGllZCA9IHRydWU7XHJcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgLy8gUmVzZXQgdGhlIGNvcGllZCBzdGF0ZSBhZnRlciBhIGRlbGF5XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuY2hhdExvZ1tpbmRleF0uY29waWVkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICB9LCAyMDAwKTsgLy8gUmVzZXQgYWZ0ZXIgMiBzZWNvbmRzXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNjcm9sbFRvQm90dG9tKCkge1xyXG4gICAgbGV0IGNvdW50ZXIgPSAwO1xyXG4gICAgY29uc3QgaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuY2hhdE1haW4ubmF0aXZlRWxlbWVudC5zY3JvbGxUb3AgPVxyXG4gICAgICAgIHRoaXMuY2hhdE1haW4ubmF0aXZlRWxlbWVudC5zY3JvbGxIZWlnaHQ7XHJcbiAgICAgIGlmIChjb3VudGVyKysgPiA1KSBjbGVhckludGVydmFsKGludGVydmFsKTtcclxuICAgIH0sIDUpO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlQWN0aW9uKGFjdGlvbjogYW55KSB7XHJcbiAgICBjb25zb2xlLmluZm8oXCJpbmNvbWluZyBhY3Rpb24gZnJvbSB0aGUgY2hhdGJvdCBBSVwiKVxyXG4gICAgY29uc29sZS5pbmZvKGFjdGlvbilcclxuXHJcbiAgICBpZiAoYWN0aW9uPy5jb250ZW50KSB7XHJcblxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgLy8gQ2hlY2sgaWYgdGhlIGRyYXdlciBpcyBpbml0aWFsbHkgb3BlbiBhbmQgYXBwbHkgb3ZlcmZsb3cgaGlkZGVuIHRvIGJvZHkgaWYgc29cclxuICAgIGlmICh0aGlzLmRyYXdlci5vcGVuZWQpIHtcclxuICAgICAgdGhpcy5zZXRCb2R5T3ZlcmZsb3coKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBMaXN0ZW4gdG8gY2hhbmdlcyBpbiB0aGUgZHJhd2VyIGJlaW5nIG9wZW5lZCBvciBjbG9zZWRcclxuICAgIHRoaXMuZHJhd2VyLm9wZW5lZENoYW5nZS5zdWJzY3JpYmUoKG9wZW5lZDogYm9vbGVhbikgPT4ge1xyXG4gICAgICBpZiAob3BlbmVkKSB7XHJcbiAgICAgICAgdGhpcy5zZXRCb2R5T3ZlcmZsb3coKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnJlbW92ZUJvZHlPdmVyZmxvdygpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmRyYXdlci5vcGVuZWRDaGFuZ2Uuc3Vic2NyaWJlKChvcGVuZWQpID0+IHtcclxuICAgICAgaWYgKG9wZW5lZCkge1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgaWYgKHRoaXMubXlUZXh0YXJlYSAmJiB0aGlzLm15VGV4dGFyZWEubmF0aXZlRWxlbWVudCkge1xyXG4gICAgICAgICAgICB0aGlzLm15VGV4dGFyZWEubmF0aXZlRWxlbWVudC5mb2N1cygpOyAvLyBGb2N1cyBvbiB0aGUgdGV4dGFyZWFcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldEJvZHlPdmVyZmxvdygpIHtcclxuICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoZG9jdW1lbnQuYm9keSwgdGhpcy5ib2R5T3ZlcmZsb3dDbGFzcyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbW92ZUJvZHlPdmVyZmxvdygpIHtcclxuICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3MoZG9jdW1lbnQuYm9keSwgdGhpcy5ib2R5T3ZlcmZsb3dDbGFzcyk7XHJcbiAgfVxyXG5cclxuICBnZXRTcGVha2Vyc0J5U3RhZmZJZHMoaWRzKSB7XHJcbiAgICBjb25zdCB1cmwgPVxyXG4gICAgICBgJHt0aGlzLmVudmlyb25tZW50LlVTRVJTX0FQSX0vZXZlbnRzLyR7dGhpcy5ldmVudElkfS91c2Vycy9nZXQtYnktc3RhZmYtaWRzYFxyXG4gICAgZmV0Y2godXJsLCB7XHJcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxyXG4gICAgICBoZWFkZXJzOiB7XHJcbiAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcclxuICAgICAgICAnQXV0aG9yaXphdGlvbic6IFwiQmVhcmVyIFwiICsgXCJ5b3VyX3Rva2VuX2hlcmVcIixcclxuICAgICAgfSxcclxuICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoaWRzKSxcclxuICAgIH0pXHJcbiAgICAgIC50aGVuKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXNwb25zZS5vaykge1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmpzb24oKTsgLy8gUGFyc2UgdGhlIEpTT04gYm9keSBvZiB0aGUgcmVzcG9uc2VcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOZXR3b3JrIHJlc3BvbnNlIHdhcyBub3Qgb2suJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgICAudGhlbigoZGF0YSkgPT4ge1xyXG4gICAgICAgIGlmIChkYXRhPy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBkYXRhLmZvckVhY2goc3BlYWtlciA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc3BlYWtlcnNbc3BlYWtlci5pZF0gPSBzcGVha2VyO1xyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgICAuY2F0Y2goKGVycikgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIGRhdGE6JywgZXJyKTtcclxuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBwZXJmb3JtU2Vzc2lvbkFjdGlvbihzZXNzaW9uSWQsIGFjdGlvbikge1xyXG4gICAgdGhpcy5zZXNzaW9uQWN0aW9ucy5uZXh0KHtcclxuICAgICAgc2Vzc2lvbklkLFxyXG4gICAgICBhY3Rpb25cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYWRkQ2xvc2VCb3RDbGlja0V2ZW50KCkge1xyXG4gICAgY29uc3QgZWxlbWVudCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJyNjbG9zZUJvdE5vdycpO1xyXG4gICAgaWYgKGVsZW1lbnQpIHtcclxuICAgICAgdGhpcy5yZW5kZXJlci5saXN0ZW4oZWxlbWVudCwgJ2NsaWNrJywgKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuY2xvc2VCb3QubmV4dCgpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlzTW9iaWxlQnJvd3NlcigpIHtcclxuICAgIHJldHVybiAvQW5kcm9pZHx3ZWJPU3xpUGhvbmV8aVBhZHxpUG9kfEJsYWNrQmVycnl8SUVNb2JpbGV8T3BlcmEgTWluaS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XHJcbiAgfVxyXG5cclxuICBjb25uZWN0VG9Vc2VyKHVzZXJJZCkge1xyXG4gICAgdGhpcy5jb25uZWN0V2l0aFVzZXIuZW1pdCh7XHJcbiAgICAgIGNvbm5lY3Q6ICF0aGlzLmNhbkRpc2Nvbm5lY3QodXNlcklkKSxcclxuICAgICAgdXNlcklkXHJcbiAgICB9KTtcclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5mZXRjaE15Q29ubmVjdGlvbnMoKS5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuZmV0Y2hQZW5kaW5nUmVxdWVzdHMoKS5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgfSk7XHJcbiAgICB9LCA1MDApO1xyXG4gIH1cclxuXHJcbiAgc2NoZWR1bGVNZWV0aW5nV2l0aFVzZXIodXNlcikge1xyXG4gICAgdGhpcy5zY2hlZHVsZU1lZXRpbmcuZW1pdCh1c2VyKTtcclxuICB9XHJcblxyXG4gIGNhbkNvbm5lY3QodXNlcklkKSB7XHJcbiAgICByZXR1cm4gISh0aGlzLmNhbkRpc2Nvbm5lY3QodXNlcklkKSB8fCB0aGlzLnBlbmRpbmdSZXF1ZXN0cy5maW5kKGEgPT4gYSA9PSB1c2VySWQpKVxyXG4gIH1cclxuXHJcbiAgY2FuRGlzY29ubmVjdCh1c2VySWQpIHtcclxuICAgIHJldHVybiB0aGlzLm15Q29ubmVjdGlvbnMuZmluZChjb25uID0+IGNvbm4udXNlcklkID09IHVzZXJJZClcclxuICB9XHJcblxyXG4gIGZldGNoUGVuZGluZ1JlcXVlc3RzKCkge1xyXG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycyh7XHJcbiAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXHJcbiAgICAgICdhcGlLZXknOiB0aGlzLmF1dG9nZW5LZXlcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFxyXG4gICAgICAuZ2V0KFxyXG4gICAgICAgIGAke3RoaXMuZW52aXJvbm1lbnQuVVNFUlNfQVBJfS9ldmVudHMvJHt0aGlzLmV2ZW50SWR9L2Nvbm5lY3Rpb24tcmVxdWVzdHMvYXV0b2dlbi9wZW5kaW5nLXNlbnQtcmVxdWVzdHM/dXNlcklkPSR7dGhpcy51c2VySWR9YCxcclxuICAgICAgICB7IGhlYWRlcnMgfVxyXG4gICAgICApXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIHN3aXRjaE1hcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMucGVuZGluZ1JlcXVlc3RzID0gcmVzO1xyXG4gICAgICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgICByZXR1cm4gb2YocmVzKTtcclxuICAgICAgICB9KSxcclxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyBwZW5kaW5nIHJlcXVlc3RzOiAnLCBlcnJvcik7XHJcbiAgICAgICAgICByZXR1cm4gb2YobnVsbCk7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIGZldGNoTXlDb25uZWN0aW9ucygpIHtcclxuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoe1xyXG4gICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxyXG4gICAgICAnYXBpS2V5JzogdGhpcy5hdXRvZ2VuS2V5XHJcbiAgICB9KTtcclxuICAgIHJldHVybiB0aGlzLmh0dHBcclxuICAgICAgLmdldChcclxuICAgICAgICBgJHt0aGlzLmVudmlyb25tZW50LlVTRVJTX0FQSX0vZXZlbnRzLyR7dGhpcy5ldmVudElkfS91c2Vycy1jb25uZWN0aW9ucy9hdXRvZ2VuP3VzZXJJZD0ke3RoaXMudXNlcklkfWAsXHJcbiAgICAgICAgeyBoZWFkZXJzIH1cclxuICAgICAgKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBzd2l0Y2hNYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLm15Q29ubmVjdGlvbnMgPSByZXM7XHJcbiAgICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgICAgIHJldHVybiBvZihyZXMpO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yOiBhbnkpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIHBlbmRpbmcgcmVxdWVzdHM6ICcsIGVycm9yKTtcclxuICAgICAgICAgIHJldHVybiBvZihudWxsKTtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuICAvLyBldmVudHMvJHtldmVudElkfS91c2Vycy1jb25uZWN0aW9uc1xyXG5cclxuICBzaW1wbGVNYXJrZG93blBhcnNlcihtYXJrZG93bjogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIC8vIENvbnZlcnQgaGVhZGluZ3NcclxuICAgIG1hcmtkb3duID0gbWFya2Rvd24ucmVwbGFjZSgvXiMjIyMjIyAoLiokKS9naW0sICc8aDY+JDE8L2g2PicpO1xyXG4gICAgbWFya2Rvd24gPSBtYXJrZG93bi5yZXBsYWNlKC9eIyMjIyMgKC4qJCkvZ2ltLCAnPGg1PiQxPC9oNT4nKTtcclxuICAgIG1hcmtkb3duID0gbWFya2Rvd24ucmVwbGFjZSgvXiMjIyMgKC4qJCkvZ2ltLCAnPGg0PiQxPC9oND4nKTtcclxuICAgIG1hcmtkb3duID0gbWFya2Rvd24ucmVwbGFjZSgvXiMjIyAoLiokKS9naW0sICc8aDM+JDE8L2gzPicpO1xyXG4gICAgbWFya2Rvd24gPSBtYXJrZG93bi5yZXBsYWNlKC9eIyMgKC4qJCkvZ2ltLCAnPGgyPiQxPC9oMj4nKTtcclxuICAgIG1hcmtkb3duID0gbWFya2Rvd24ucmVwbGFjZSgvXiMgKC4qJCkvZ2ltLCAnPGgxPiQxPC9oMT4nKTtcclxuXHJcbiAgICAvLyBDb252ZXJ0IGJvbGQgYW5kIGl0YWxpY1xyXG4gICAgbWFya2Rvd24gPSBtYXJrZG93bi5yZXBsYWNlKC9cXCpcXCpcXCooLio/KVxcKlxcKlxcKi9naW0sICc8ZW0+PHN0cm9uZz4kMTwvc3Ryb25nPjwvZW0+Jyk7XHJcbiAgICBtYXJrZG93biA9IG1hcmtkb3duLnJlcGxhY2UoL1xcKlxcKiguKj8pXFwqXFwqL2dpbSwgJzxzdHJvbmc+JDE8L3N0cm9uZz4nKTtcclxuICAgIG1hcmtkb3duID0gbWFya2Rvd24ucmVwbGFjZSgvXFwqKC4qPylcXCovZ2ltLCAnPGVtPiQxPC9lbT4nKTtcclxuXHJcbiAgICAvLyBDb252ZXJ0IGxpbmtzXHJcbiAgICBtYXJrZG93biA9IG1hcmtkb3duLnJlcGxhY2UoL1xcWyguKj8pXFxdXFwoKC4qPylcXCkvZ2ltLCAnPGEgaHJlZj1cIiQyXCI+JDE8L2E+Jyk7XHJcblxyXG4gICAgLy8gQ29udmVydCB1bm9yZGVyZWQgbGlzdHNcclxuICAgIG1hcmtkb3duID0gbWFya2Rvd24ucmVwbGFjZSgvXlxcKiAoLiopL2dpbSwgJzx1bD48bGk+JDE8L2xpPjwvdWw+Jyk7XHJcbiAgICBtYXJrZG93biA9IG1hcmtkb3duLnJlcGxhY2UoL15cXC0gKC4qKS9naW0sICc8dWw+PGxpPiQxPC9saT48L3VsPicpO1xyXG4gICAgbWFya2Rvd24gPSBtYXJrZG93bi5yZXBsYWNlKC9eXFwrICguKikvZ2ltLCAnPHVsPjxsaT4kMTwvbGk+PC91bD4nKTtcclxuXHJcbiAgICAvLyBDb252ZXJ0IG9yZGVyZWQgbGlzdHNcclxuICAgIG1hcmtkb3duID0gbWFya2Rvd24ucmVwbGFjZSgvXlxcZCtcXC4gKC4qKS9naW0sICc8b2w+PGxpPiQxPC9saT48L29sPicpO1xyXG5cclxuICAgIC8vIENvbnZlcnQgbGluZSBicmVha3NcclxuICAgIG1hcmtkb3duID0gbWFya2Rvd24ucmVwbGFjZSgvXFxuL2dpbSwgJzxici8+Jyk7XHJcblxyXG4gICAgcmV0dXJuIG1hcmtkb3duLnRyaW0oKTtcclxuICB9XHJcblxyXG4gIGhhbmRsZU1hcmtkb3duKG1hcmtkb3duQ29udGVudDogc3RyaW5nKSB7XHJcbiAgICBpZiAobWFya2Rvd25Db250ZW50KSB7XHJcbiAgICAgIGNvbnN0IGh0bWxDb250ZW50ID0gdGhpcy5zaW1wbGVNYXJrZG93blBhcnNlcihtYXJrZG93bkNvbnRlbnQpO1xyXG4gICAgICByZXR1cm4gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwoaHRtbENvbnRlbnQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIG1hcmtkb3duQ29udGVudDtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19
@@ -1,10 +1,8 @@
1
- import { __awaiter } from 'tslib';
2
1
  import { HttpHeaders, HttpClient } from '@angular/common/http';
3
2
  import { ɵɵdefineInjectable, Injectable, EventEmitter, ElementRef, Component, ChangeDetectionStrategy, ChangeDetectorRef, Renderer2, ViewChild, Input, Output, Pipe, Inject, NgModule } from '@angular/core';
4
3
  import { DomSanitizer } from '@angular/platform-browser';
5
4
  import { of } from 'rxjs';
6
5
  import { switchMap, catchError } from 'rxjs/operators';
7
- import { parse } from 'marked';
8
6
  import { DOCUMENT, CommonModule } from '@angular/common';
9
7
  import { FormsModule } from '@angular/forms';
10
8
  import { MatIconModule } from '@angular/material/icon';
@@ -90,6 +88,7 @@ ConversationService.decorators = [
90
88
  ];
91
89
  ConversationService.ctorParameters = () => [];
92
90
 
91
+ // import { Platform } from '@angular/cdk/platform';
93
92
  class ChatDrawerComponent {
94
93
  constructor(cdr, http, sanitizer, elementRef, renderer, conversation
95
94
  // private platform: Platform
@@ -683,17 +682,6 @@ class ChatDrawerComponent {
683
682
  removeBodyOverflow() {
684
683
  this.renderer.removeClass(document.body, this.bodyOverflowClass);
685
684
  }
686
- handleMarkdown(markdownContent) {
687
- return __awaiter(this, void 0, void 0, function* () {
688
- if (markdownContent) {
689
- const htmlContent = yield parse(markdownContent);
690
- return this.sanitizer.bypassSecurityTrustHtml(htmlContent);
691
- }
692
- else {
693
- return markdownContent;
694
- }
695
- });
696
- }
697
685
  getSpeakersByStaffIds(ids) {
698
686
  const url = `${this.environment.USERS_API}/events/${this.eventId}/users/get-by-staff-ids`;
699
687
  fetch(url, {
@@ -797,6 +785,40 @@ class ChatDrawerComponent {
797
785
  return of(null);
798
786
  }));
799
787
  }
788
+ // events/${eventId}/users-connections
789
+ simpleMarkdownParser(markdown) {
790
+ // Convert headings
791
+ markdown = markdown.replace(/^###### (.*$)/gim, '<h6>$1</h6>');
792
+ markdown = markdown.replace(/^##### (.*$)/gim, '<h5>$1</h5>');
793
+ markdown = markdown.replace(/^#### (.*$)/gim, '<h4>$1</h4>');
794
+ markdown = markdown.replace(/^### (.*$)/gim, '<h3>$1</h3>');
795
+ markdown = markdown.replace(/^## (.*$)/gim, '<h2>$1</h2>');
796
+ markdown = markdown.replace(/^# (.*$)/gim, '<h1>$1</h1>');
797
+ // Convert bold and italic
798
+ markdown = markdown.replace(/\*\*\*(.*?)\*\*\*/gim, '<em><strong>$1</strong></em>');
799
+ markdown = markdown.replace(/\*\*(.*?)\*\*/gim, '<strong>$1</strong>');
800
+ markdown = markdown.replace(/\*(.*?)\*/gim, '<em>$1</em>');
801
+ // Convert links
802
+ markdown = markdown.replace(/\[(.*?)\]\((.*?)\)/gim, '<a href="$2">$1</a>');
803
+ // Convert unordered lists
804
+ markdown = markdown.replace(/^\* (.*)/gim, '<ul><li>$1</li></ul>');
805
+ markdown = markdown.replace(/^\- (.*)/gim, '<ul><li>$1</li></ul>');
806
+ markdown = markdown.replace(/^\+ (.*)/gim, '<ul><li>$1</li></ul>');
807
+ // Convert ordered lists
808
+ markdown = markdown.replace(/^\d+\. (.*)/gim, '<ol><li>$1</li></ol>');
809
+ // Convert line breaks
810
+ markdown = markdown.replace(/\n/gim, '<br/>');
811
+ return markdown.trim();
812
+ }
813
+ handleMarkdown(markdownContent) {
814
+ if (markdownContent) {
815
+ const htmlContent = this.simpleMarkdownParser(markdownContent);
816
+ return this.sanitizer.bypassSecurityTrustHtml(htmlContent);
817
+ }
818
+ else {
819
+ return markdownContent;
820
+ }
821
+ }
800
822
  }
801
823
  ChatDrawerComponent.decorators = [
802
824
  { type: Component, args: [{