@lowcodeunit/applications-flow-common 1.33.216-lets-get-social-ish → 1.33.219-lets-get-social-ish

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,15 +1,30 @@
1
1
  import { Component, Input } from '@angular/core';
2
2
  import moment from 'moment';
3
+ import { SourceControlDialogComponent } from '../../dialogs/source-control-dialog/source-control-dialog.component';
3
4
  import * as i0 from "@angular/core";
4
5
  import * as i1 from "../../services/eac.service";
5
- import * as i2 from "@angular/material/card";
6
- import * as i3 from "@angular/material/icon";
7
- import * as i4 from "@angular/material/button";
8
- import * as i5 from "@angular/common";
9
- import * as i6 from "@angular/flex-layout/flex";
6
+ import * as i2 from "@angular/material/dialog";
7
+ import * as i3 from "@angular/material/card";
8
+ import * as i4 from "@angular/material/icon";
9
+ import * as i5 from "@angular/material/button";
10
+ import * as i6 from "@angular/common";
11
+ import * as i7 from "@angular/flex-layout/flex";
10
12
  export class MainFeedCardComponent {
11
- constructor(eacSvc) {
13
+ constructor(eacSvc, dialog) {
12
14
  this.eacSvc = eacSvc;
15
+ this.dialog = dialog;
16
+ }
17
+ get ActiveEnvironment() {
18
+ return this.State?.EaC?.Environments[this.ActiveEnvironmentLookup];
19
+ }
20
+ get ActiveEnvironmentLookup() {
21
+ // TODO: Eventually support multiple environments
22
+ const envLookups = Object.keys(this.State?.EaC?.Environments || {});
23
+ return envLookups[0];
24
+ }
25
+ get Environment() {
26
+ // console.log("Ent Environment var: ", this.State?.EaC?.Environments[this.State?.EaC?.Enterprise?.PrimaryEnvironment]);
27
+ return this.State?.EaC?.Environments[this.State?.EaC?.Enterprise?.PrimaryEnvironment];
13
28
  }
14
29
  get Icon() {
15
30
  if (this.FeedItem.Status.Code === 0) {
@@ -39,6 +54,9 @@ export class MainFeedCardComponent {
39
54
  return 'gray';
40
55
  }
41
56
  }
57
+ get State() {
58
+ return this.eacSvc.State;
59
+ }
42
60
  // Life Cycle
43
61
  ngOnInit() {
44
62
  this.handleRefresh();
@@ -58,14 +76,28 @@ export class MainFeedCardComponent {
58
76
  }
59
77
  else if (action.ActionType == 'Modal') {
60
78
  if (action.Action == 'AddSourceControl') {
61
- // TODO: George launch source control modal
62
- alert('AddSourceControl modaled');
79
+ this.OpenSourceControlDialog('');
63
80
  }
64
81
  else {
65
82
  alert('other modaled ' + action.Action);
66
83
  }
67
84
  }
68
85
  }
86
+ OpenSourceControlDialog(scLookup) {
87
+ const dialogRef = this.dialog.open(SourceControlDialogComponent, {
88
+ width: '550px',
89
+ data: {
90
+ environment: this.Environment,
91
+ environmentLookup: this.ActiveEnvironmentLookup,
92
+ scLookup: scLookup,
93
+ },
94
+ });
95
+ dialogRef.afterClosed().subscribe((result) => {
96
+ // console.log('The dialog was closed');
97
+ // console.log("result:", result)
98
+ });
99
+ }
100
+ // Helpers
69
101
  handleRefresh() {
70
102
  if (this.FeedItem?.RefreshLink) {
71
103
  setTimeout(() => {
@@ -84,13 +116,13 @@ export class MainFeedCardComponent {
84
116
  }
85
117
  }
86
118
  }
87
- MainFeedCardComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: MainFeedCardComponent, deps: [{ token: i1.EaCService }], target: i0.ɵɵFactoryTarget.Component });
88
- MainFeedCardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: MainFeedCardComponent, selector: "lcu-main-feed-card", inputs: { FeedItem: ["feed-item", "FeedItem"] }, ngImport: i0, template: "<mat-card class=\"social-card\">\n <mat-card-header>\n <img\n mat-card-avatar\n class=\"example-header-image\"\n [src]=\"FeedItem.Avatar\"\n *ngIf=\"FeedItem.Avatar\"\n />\n\n <mat-card-title *ngIf=\"FeedItem.Title\">{{ FeedItem.Title }}</mat-card-title>\n\n <mat-card-subtitle>\n <div *ngIf=\"FeedItem.Subtitle\">{{ FeedItem.Subtitle }}</div>\n <div *ngIf=\"FeedItem.Status\">\n <mat-icon\n *ngIf=\"Icon\"\n [style.color]=\"IconColor\"\n [class.spin]=\"FeedItem.Status?.Code == 2\"\n >\n {{ Icon }}\n </mat-icon>\n\n <span *ngIf=\"FeedItem.Timestamp\">\n {{ CalculateTimelapse(FeedItem.Timestamp) }}\n </span>\n </div>\n </mat-card-subtitle>\n </mat-card-header>\n\n <div *ngIf=\"!FeedItem.IsShortForm\">\n <!-- <div class=\"feed-card-container\">\n <div class=\"feed-card-main-content\">\n The tab content (only 1 'tab' for now)... So really we don't need to worry about tabs until a future iteration\n\n The tabs property will contain a data structure that will vary by the FeedItem.Type... That structure can be used to render the content\n </div>\n </div> -->\n </div>\n\n <mat-card-actions fxLayout=\"row\" fxLayoutAlign=\"space-around center\">\n <div fxFlex></div>\n\n <ng-container *ngFor=\"let action of FeedItem.Actions\">\n <button mat-button [color]=\"action.Color\" (click)=\"HandleAction(action)\">\n <mat-icon *ngIf=\"action.Icon\">{{ action.Icon }}</mat-icon>\n\n {{ action.Text }}\n </button>\n </ng-container>\n </mat-card-actions>\n</mat-card>\n", styles: [":host :host ::ng-deep .social-card{margin:20px;padding:15px 5px}:host :host ::ng-deep mat-card-actions{margin-bottom:-1px!important;margin-left:0!important;margin-right:-.5px!important}:host :host ::ng-deep .main-slot-container{padding:10px}:host :host ::ng-deep .slot-header{align-items:center}:host :host ::ng-deep .slot-content{width:100%}:host :host ::ng-deep .slot-name{font-size:13px;font-weight:600}:host :host ::ng-deep .slot-description{font-size:12px;margin-right:10px}:host :host ::ng-deep .slot-action-anchor{font-size:10px;text-decoration:none;color:#000}:host :host ::ng-deep .action-icon{height:25px;width:25px;font-size:25px;cursor:pointer}:host .example-header-image{background-size:cover}:host .mat-icon{display:inline-flex;vertical-align:middle}:host .mat-icon.spin{animation:rotate 1s ease-in-out infinite}@keyframes rotate{0%{transform:rotate(0)}to{transform:rotate(360deg)}}\n"], components: [{ type: i2.MatCard, selector: "mat-card", exportAs: ["matCard"] }, { type: i2.MatCardHeader, selector: "mat-card-header" }, { type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i4.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }], directives: [{ type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.MatCardAvatar, selector: "[mat-card-avatar], [matCardAvatar]" }, { type: i2.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { type: i2.MatCardSubtitle, selector: "mat-card-subtitle, [mat-card-subtitle], [matCardSubtitle]" }, { type: i2.MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { type: i6.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { type: i6.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { type: i6.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
119
+ MainFeedCardComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: MainFeedCardComponent, deps: [{ token: i1.EaCService }, { token: i2.MatDialog }], target: i0.ɵɵFactoryTarget.Component });
120
+ MainFeedCardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: MainFeedCardComponent, selector: "lcu-main-feed-card", inputs: { FeedItem: ["feed-item", "FeedItem"] }, ngImport: i0, template: "<mat-card class=\"social-card\">\n <mat-card-header>\n <img\n mat-card-avatar\n class=\"example-header-image\"\n [src]=\"FeedItem.Avatar\"\n *ngIf=\"FeedItem.Avatar\"\n />\n\n <mat-card-title *ngIf=\"FeedItem.Title\">{{ FeedItem.Title }}</mat-card-title>\n\n <mat-card-subtitle>\n <div *ngIf=\"FeedItem.Subtitle\">{{ FeedItem.Subtitle }}</div>\n <div *ngIf=\"FeedItem.Status\">\n <mat-icon\n *ngIf=\"Icon\"\n [style.color]=\"IconColor\"\n [class.spin]=\"FeedItem.Status?.Code == 2\"\n >\n {{ Icon }}\n </mat-icon>\n\n <span *ngIf=\"FeedItem.Timestamp\">\n {{ CalculateTimelapse(FeedItem.Timestamp) }}\n </span>\n </div>\n </mat-card-subtitle>\n </mat-card-header>\n\n <div *ngIf=\"!FeedItem.IsShortForm\">\n <!-- <div class=\"feed-card-container\">\n <div class=\"feed-card-main-content\">\n The tab content (only 1 'tab' for now)... So really we don't need to worry about tabs until a future iteration\n\n The tabs property will contain a data structure that will vary by the FeedItem.Type... That structure can be used to render the content\n </div>\n </div> -->\n </div>\n\n <mat-card-actions fxLayout=\"row\" fxLayoutAlign=\"space-around center\">\n <div fxFlex></div>\n\n <ng-container *ngFor=\"let action of FeedItem.Actions\">\n <button mat-button [color]=\"action.Color\" (click)=\"HandleAction(action)\">\n <mat-icon *ngIf=\"action.Icon\">{{ action.Icon }}</mat-icon>\n\n {{ action.Text }}\n </button>\n </ng-container>\n </mat-card-actions>\n</mat-card>\n", styles: [":host :host ::ng-deep .social-card{margin:20px;padding:15px 5px}:host :host ::ng-deep mat-card-actions{margin-bottom:-1px!important;margin-left:0!important;margin-right:-.5px!important}:host :host ::ng-deep .main-slot-container{padding:10px}:host :host ::ng-deep .slot-header{align-items:center}:host :host ::ng-deep .slot-content{width:100%}:host :host ::ng-deep .slot-name{font-size:13px;font-weight:600}:host :host ::ng-deep .slot-description{font-size:12px;margin-right:10px}:host :host ::ng-deep .slot-action-anchor{font-size:10px;text-decoration:none;color:#000}:host :host ::ng-deep .action-icon{height:25px;width:25px;font-size:25px;cursor:pointer}:host .example-header-image{background-size:cover}:host .mat-icon{display:inline-flex;vertical-align:middle}:host .mat-icon.spin{animation:rotate 1s ease-in-out infinite}@keyframes rotate{0%{transform:rotate(0)}to{transform:rotate(360deg)}}\n"], components: [{ type: i3.MatCard, selector: "mat-card", exportAs: ["matCard"] }, { type: i3.MatCardHeader, selector: "mat-card-header" }, { type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i5.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }], directives: [{ type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.MatCardAvatar, selector: "[mat-card-avatar], [matCardAvatar]" }, { type: i3.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { type: i3.MatCardSubtitle, selector: "mat-card-subtitle, [mat-card-subtitle], [matCardSubtitle]" }, { type: i3.MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { type: i7.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { type: i7.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { type: i7.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
89
121
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: MainFeedCardComponent, decorators: [{
90
122
  type: Component,
91
123
  args: [{ selector: 'lcu-main-feed-card', template: "<mat-card class=\"social-card\">\n <mat-card-header>\n <img\n mat-card-avatar\n class=\"example-header-image\"\n [src]=\"FeedItem.Avatar\"\n *ngIf=\"FeedItem.Avatar\"\n />\n\n <mat-card-title *ngIf=\"FeedItem.Title\">{{ FeedItem.Title }}</mat-card-title>\n\n <mat-card-subtitle>\n <div *ngIf=\"FeedItem.Subtitle\">{{ FeedItem.Subtitle }}</div>\n <div *ngIf=\"FeedItem.Status\">\n <mat-icon\n *ngIf=\"Icon\"\n [style.color]=\"IconColor\"\n [class.spin]=\"FeedItem.Status?.Code == 2\"\n >\n {{ Icon }}\n </mat-icon>\n\n <span *ngIf=\"FeedItem.Timestamp\">\n {{ CalculateTimelapse(FeedItem.Timestamp) }}\n </span>\n </div>\n </mat-card-subtitle>\n </mat-card-header>\n\n <div *ngIf=\"!FeedItem.IsShortForm\">\n <!-- <div class=\"feed-card-container\">\n <div class=\"feed-card-main-content\">\n The tab content (only 1 'tab' for now)... So really we don't need to worry about tabs until a future iteration\n\n The tabs property will contain a data structure that will vary by the FeedItem.Type... That structure can be used to render the content\n </div>\n </div> -->\n </div>\n\n <mat-card-actions fxLayout=\"row\" fxLayoutAlign=\"space-around center\">\n <div fxFlex></div>\n\n <ng-container *ngFor=\"let action of FeedItem.Actions\">\n <button mat-button [color]=\"action.Color\" (click)=\"HandleAction(action)\">\n <mat-icon *ngIf=\"action.Icon\">{{ action.Icon }}</mat-icon>\n\n {{ action.Text }}\n </button>\n </ng-container>\n </mat-card-actions>\n</mat-card>\n", styles: [":host :host ::ng-deep .social-card{margin:20px;padding:15px 5px}:host :host ::ng-deep mat-card-actions{margin-bottom:-1px!important;margin-left:0!important;margin-right:-.5px!important}:host :host ::ng-deep .main-slot-container{padding:10px}:host :host ::ng-deep .slot-header{align-items:center}:host :host ::ng-deep .slot-content{width:100%}:host :host ::ng-deep .slot-name{font-size:13px;font-weight:600}:host :host ::ng-deep .slot-description{font-size:12px;margin-right:10px}:host :host ::ng-deep .slot-action-anchor{font-size:10px;text-decoration:none;color:#000}:host :host ::ng-deep .action-icon{height:25px;width:25px;font-size:25px;cursor:pointer}:host .example-header-image{background-size:cover}:host .mat-icon{display:inline-flex;vertical-align:middle}:host .mat-icon.spin{animation:rotate 1s ease-in-out infinite}@keyframes rotate{0%{transform:rotate(0)}to{transform:rotate(360deg)}}\n"] }]
92
- }], ctorParameters: function () { return [{ type: i1.EaCService }]; }, propDecorators: { FeedItem: [{
124
+ }], ctorParameters: function () { return [{ type: i1.EaCService }, { type: i2.MatDialog }]; }, propDecorators: { FeedItem: [{
93
125
  type: Input,
94
126
  args: ['feed-item']
95
127
  }] } });
96
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi1mZWVkLWNhcmQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tbW9uL3NyYy9saWIvZWxlbWVudHMvbWFpbi1mZWVkLWNhcmQvbWFpbi1mZWVkLWNhcmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tbW9uL3NyYy9saWIvZWxlbWVudHMvbWFpbi1mZWVkLWNhcmQvbWFpbi1mZWVkLWNhcmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFFekQsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDOzs7Ozs7OztBQVU1QixNQUFNLE9BQU8scUJBQXFCO0lBNEJoQyxZQUFzQixNQUFrQjtRQUFsQixXQUFNLEdBQU4sTUFBTSxDQUFZO0lBQUcsQ0FBQztJQXhCNUMsSUFBVyxJQUFJO1FBQ2IsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUFFO1lBQ25DLE9BQU8sY0FBYyxDQUFDO1NBQ3ZCO2FBQU0sSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUFFO1lBQzFDLE9BQU8sUUFBUSxDQUFDO1NBQ2pCO2FBQU0sSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUFFO1lBQzFDLE9BQU8sTUFBTSxDQUFDO1NBQ2Y7YUFBTTtZQUNMLE9BQU8sY0FBYyxDQUFDO1NBQ3ZCO0lBQ0gsQ0FBQztJQUVELElBQVcsU0FBUztRQUNsQixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLEVBQUU7WUFDbkMsT0FBTyxPQUFPLENBQUM7U0FDaEI7YUFBTSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLEVBQUU7WUFDMUMsT0FBTyxLQUFLLENBQUM7U0FDZDthQUFNLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsRUFBRTtZQUMxQyxPQUFPLE1BQU0sQ0FBQztTQUNmO2FBQU07WUFDTCxPQUFPLE1BQU0sQ0FBQztTQUNmO0lBQ0gsQ0FBQztJQUlELGNBQWM7SUFDUCxRQUFRO1FBQ2IsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxlQUFlO0lBQ1Isa0JBQWtCLENBQUMsU0FBZTtRQUN2QyxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNyQyxDQUFDO0lBRU0sWUFBWSxDQUFDLE1BQXNCO1FBQ3hDLElBQUksTUFBTSxDQUFDLFVBQVUsSUFBSSxNQUFNLEVBQUU7WUFDL0IsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRTtnQkFDcEMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO2FBQ3RDO2lCQUFNO2dCQUNMLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7YUFDdEM7U0FDRjthQUFNLElBQUksTUFBTSxDQUFDLFVBQVUsSUFBSSxPQUFPLEVBQUU7WUFDdkMsSUFBSSxNQUFNLENBQUMsTUFBTSxJQUFJLGtCQUFrQixFQUFFO2dCQUN2Qyw2Q0FBNkM7Z0JBQzdDLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO2FBQ25DO2lCQUFNO2dCQUNMLEtBQUssQ0FBQyxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDekM7U0FDRjtJQUNILENBQUM7SUFFTSxhQUFhO1FBQ2xCLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxXQUFXLEVBQUU7WUFDOUIsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDZCxJQUFJLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLENBQ3BELEtBQUssRUFBRSxRQUF1QyxFQUFFLEVBQUU7b0JBQ2hELElBQUksUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUFFO3dCQUM5QixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUM7d0JBRS9CLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztxQkFDdEI7eUJBQU07d0JBQ0wsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztxQkFDdkI7Z0JBQ0gsQ0FBQyxFQUNELENBQUMsR0FBRyxFQUFFLEVBQUU7b0JBQ04sT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDbkIsQ0FBQyxDQUNGLENBQUM7WUFDSixDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDVjtJQUNILENBQUM7O2tIQTVFVSxxQkFBcUI7c0dBQXJCLHFCQUFxQiwyR0NabEMsZ3BEQW1EQTsyRkR2Q2EscUJBQXFCO2tCQUxqQyxTQUFTOytCQUNFLG9CQUFvQjtpR0FNdkIsUUFBUTtzQkFEZCxLQUFLO3VCQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZlZWRJdGVtLCBGZWVkSXRlbUFjdGlvbiB9IGZyb20gJy4uLy4uL21vZGVscy91c2VyLWZlZWQubW9kZWwnO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHsgSnNvbkh1YlByb3RvY29sIH0gZnJvbSAnQGFzcG5ldC9zaWduYWxyJztcbmltcG9ydCB7IEVhQ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9lYWMuc2VydmljZSc7XG5pbXBvcnQgeyBCYXNlTW9kZWxlZFJlc3BvbnNlIH0gZnJvbSAnQGxjdS9jb21tb24nO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsY3UtbWFpbi1mZWVkLWNhcmQnLFxuICB0ZW1wbGF0ZVVybDogJy4vbWFpbi1mZWVkLWNhcmQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9tYWluLWZlZWQtY2FyZC5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBNYWluRmVlZENhcmRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoJ2ZlZWQtaXRlbScpXG4gIHB1YmxpYyBGZWVkSXRlbTogRmVlZEl0ZW07XG5cbiAgcHVibGljIGdldCBJY29uKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuRmVlZEl0ZW0uU3RhdHVzLkNvZGUgPT09IDApIHtcbiAgICAgIHJldHVybiAnY2hlY2tfY2lyY2xlJztcbiAgICB9IGVsc2UgaWYgKHRoaXMuRmVlZEl0ZW0uU3RhdHVzLkNvZGUgPT09IDEpIHtcbiAgICAgIHJldHVybiAnY2FuY2VsJztcbiAgICB9IGVsc2UgaWYgKHRoaXMuRmVlZEl0ZW0uU3RhdHVzLkNvZGUgPT09IDIpIHtcbiAgICAgIHJldHVybiAnc3luYyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAnaGVscF9vdXRsaW5lJztcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0IEljb25Db2xvcigpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLkZlZWRJdGVtLlN0YXR1cy5Db2RlID09PSAwKSB7XG4gICAgICByZXR1cm4gJ2dyZWVuJztcbiAgICB9IGVsc2UgaWYgKHRoaXMuRmVlZEl0ZW0uU3RhdHVzLkNvZGUgPT09IDEpIHtcbiAgICAgIHJldHVybiAncmVkJztcbiAgICB9IGVsc2UgaWYgKHRoaXMuRmVlZEl0ZW0uU3RhdHVzLkNvZGUgPT09IDIpIHtcbiAgICAgIHJldHVybiAnYmx1ZSc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAnZ3JheSc7XG4gICAgfVxuICB9XG5cbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIGVhY1N2YzogRWFDU2VydmljZSkge31cblxuICAvLyAgTGlmZSBDeWNsZVxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5oYW5kbGVSZWZyZXNoKCk7XG4gIH1cblxuICAvLyAgQVBJIE1ldGhvZHNcbiAgcHVibGljIENhbGN1bGF0ZVRpbWVsYXBzZSh0aW1lc3RhbXA6IERhdGUpIHtcbiAgICByZXR1cm4gbW9tZW50KHRpbWVzdGFtcCkuZnJvbU5vdygpO1xuICB9XG5cbiAgcHVibGljIEhhbmRsZUFjdGlvbihhY3Rpb246IEZlZWRJdGVtQWN0aW9uKSB7XG4gICAgaWYgKGFjdGlvbi5BY3Rpb25UeXBlID09ICdMaW5rJykge1xuICAgICAgaWYgKGFjdGlvbi5BY3Rpb24uc3RhcnRzV2l0aCgnaHR0cCcpKSB7XG4gICAgICAgIHdpbmRvdy5vcGVuKGFjdGlvbi5BY3Rpb24sICdfYmxhbmsnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gYWN0aW9uLkFjdGlvbjtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGFjdGlvbi5BY3Rpb25UeXBlID09ICdNb2RhbCcpIHtcbiAgICAgIGlmIChhY3Rpb24uQWN0aW9uID09ICdBZGRTb3VyY2VDb250cm9sJykge1xuICAgICAgICAvLyAgVE9ETzogIEdlb3JnZSBsYXVuY2ggc291cmNlIGNvbnRyb2wgbW9kYWxcbiAgICAgICAgYWxlcnQoJ0FkZFNvdXJjZUNvbnRyb2wgbW9kYWxlZCcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWxlcnQoJ290aGVyIG1vZGFsZWQgJyArIGFjdGlvbi5BY3Rpb24pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBoYW5kbGVSZWZyZXNoKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLkZlZWRJdGVtPy5SZWZyZXNoTGluaykge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuZWFjU3ZjLkNoZWNrVXNlckZlZWRJdGVtKHRoaXMuRmVlZEl0ZW0pLnN1YnNjcmliZShcbiAgICAgICAgICBhc3luYyAocmVzcG9uc2U6IEJhc2VNb2RlbGVkUmVzcG9uc2U8RmVlZEl0ZW0+KSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2UuU3RhdHVzLkNvZGUgPT09IDApIHtcbiAgICAgICAgICAgICAgdGhpcy5GZWVkSXRlbSA9IHJlc3BvbnNlLk1vZGVsO1xuXG4gICAgICAgICAgICAgIHRoaXMuaGFuZGxlUmVmcmVzaCgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY29uc29sZS5sb2cocmVzcG9uc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgKGVycikgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICB9LCA1MDAwKTtcbiAgICB9XG4gIH1cblxuICAvLyAgSGVscGVyc1xufVxuIiwiPG1hdC1jYXJkIGNsYXNzPVwic29jaWFsLWNhcmRcIj5cbiAgPG1hdC1jYXJkLWhlYWRlcj5cbiAgICA8aW1nXG4gICAgICBtYXQtY2FyZC1hdmF0YXJcbiAgICAgIGNsYXNzPVwiZXhhbXBsZS1oZWFkZXItaW1hZ2VcIlxuICAgICAgW3NyY109XCJGZWVkSXRlbS5BdmF0YXJcIlxuICAgICAgKm5nSWY9XCJGZWVkSXRlbS5BdmF0YXJcIlxuICAgIC8+XG5cbiAgICA8bWF0LWNhcmQtdGl0bGUgKm5nSWY9XCJGZWVkSXRlbS5UaXRsZVwiPnt7IEZlZWRJdGVtLlRpdGxlIH19PC9tYXQtY2FyZC10aXRsZT5cblxuICAgIDxtYXQtY2FyZC1zdWJ0aXRsZT5cbiAgICAgIDxkaXYgKm5nSWY9XCJGZWVkSXRlbS5TdWJ0aXRsZVwiPnt7IEZlZWRJdGVtLlN1YnRpdGxlIH19PC9kaXY+XG4gICAgICA8ZGl2ICpuZ0lmPVwiRmVlZEl0ZW0uU3RhdHVzXCI+XG4gICAgICAgIDxtYXQtaWNvblxuICAgICAgICAgICpuZ0lmPVwiSWNvblwiXG4gICAgICAgICAgW3N0eWxlLmNvbG9yXT1cIkljb25Db2xvclwiXG4gICAgICAgICAgW2NsYXNzLnNwaW5dPVwiRmVlZEl0ZW0uU3RhdHVzPy5Db2RlID09IDJcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgSWNvbiB9fVxuICAgICAgICA8L21hdC1pY29uPlxuXG4gICAgICAgIDxzcGFuICpuZ0lmPVwiRmVlZEl0ZW0uVGltZXN0YW1wXCI+XG4gICAgICAgICAge3sgQ2FsY3VsYXRlVGltZWxhcHNlKEZlZWRJdGVtLlRpbWVzdGFtcCkgfX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgPC9tYXQtY2FyZC1zdWJ0aXRsZT5cbiAgPC9tYXQtY2FyZC1oZWFkZXI+XG5cbiAgPGRpdiAqbmdJZj1cIiFGZWVkSXRlbS5Jc1Nob3J0Rm9ybVwiPlxuICAgIDwhLS0gPGRpdiBjbGFzcz1cImZlZWQtY2FyZC1jb250YWluZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZlZWQtY2FyZC1tYWluLWNvbnRlbnRcIj5cbiAgICAgICAgICAgIFRoZSB0YWIgY29udGVudCAob25seSAxICd0YWInIGZvciBub3cpLi4uICBTbyByZWFsbHkgd2UgZG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dCB0YWJzIHVudGlsIGEgZnV0dXJlIGl0ZXJhdGlvblxuXG4gICAgICAgICAgICBUaGUgdGFicyBwcm9wZXJ0eSB3aWxsIGNvbnRhaW4gYSBkYXRhIHN0cnVjdHVyZSB0aGF0IHdpbGwgdmFyeSBieSB0aGUgRmVlZEl0ZW0uVHlwZS4uLiAgVGhhdCBzdHJ1Y3R1cmUgY2FuIGJlIHVzZWQgdG8gcmVuZGVyIHRoZSBjb250ZW50XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PiAtLT5cbiAgPC9kaXY+XG5cbiAgPG1hdC1jYXJkLWFjdGlvbnMgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEFsaWduPVwic3BhY2UtYXJvdW5kIGNlbnRlclwiPlxuICAgIDxkaXYgZnhGbGV4PjwvZGl2PlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIEZlZWRJdGVtLkFjdGlvbnNcIj5cbiAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiBbY29sb3JdPVwiYWN0aW9uLkNvbG9yXCIgKGNsaWNrKT1cIkhhbmRsZUFjdGlvbihhY3Rpb24pXCI+XG4gICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cImFjdGlvbi5JY29uXCI+e3sgYWN0aW9uLkljb24gfX08L21hdC1pY29uPlxuXG4gICAgICAgIHt7IGFjdGlvbi5UZXh0IH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9tYXQtY2FyZC1hY3Rpb25zPlxuPC9tYXQtY2FyZD5cbiJdfQ==
128
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi1mZWVkLWNhcmQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tbW9uL3NyYy9saWIvZWxlbWVudHMvbWFpbi1mZWVkLWNhcmQvbWFpbi1mZWVkLWNhcmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tbW9uL3NyYy9saWIvZWxlbWVudHMvbWFpbi1mZWVkLWNhcmQvbWFpbi1mZWVkLWNhcmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFFekQsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBSTVCLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLHFFQUFxRSxDQUFDOzs7Ozs7Ozs7QUFVbkgsTUFBTSxPQUFPLHFCQUFxQjtJQWtEaEMsWUFBc0IsTUFBa0IsRUFBWSxNQUFpQjtRQUEvQyxXQUFNLEdBQU4sTUFBTSxDQUFZO1FBQVksV0FBTSxHQUFOLE1BQU0sQ0FBVztJQUFHLENBQUM7SUFqRHpFLElBQVcsaUJBQWlCO1FBQzFCLE9BQU8sSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsWUFBWSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7SUFFRCxJQUFXLHVCQUF1QjtRQUNoQyxtREFBbUQ7UUFDbkQsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxZQUFZLElBQUksRUFBRSxDQUFDLENBQUM7UUFFcEUsT0FBTyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkIsQ0FBQztJQUVELElBQVcsV0FBVztRQUNwQix3SEFBd0g7UUFDeEgsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxZQUFZLENB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LEVBQUU7WUFDOUIsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDZCxJQUFJLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLENBQ3BELEtBQUssRUFBRSxRQUF1QyxFQUFFLEVBQUU7b0JBQ2hELElBQUksUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUFFO3dCQUM5QixJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUM7d0JBRS9CLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztxQkFDdEI7eUJBQU07d0JBQ0wsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztxQkFDdkI7Z0JBQ0gsQ0FBQyxFQUNELENBQUMsR0FBRyxFQUFFLEVBQUU7b0JBQ04sT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDbkIsQ0FBQyxDQUNGLENBQUM7WUFDSixDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDVjtJQUNILENBQUM7O2tIQWxIVSxxQkFBcUI7c0dBQXJCLHFCQUFxQiwyR0NoQmxDLGdwREFtREE7MkZEbkNhLHFCQUFxQjtrQkFMakMsU0FBUzsrQkFDRSxvQkFBb0I7eUhBd0J2QixRQUFRO3NCQURkLEtBQUs7dUJBQUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRmVlZEl0ZW0sIEZlZWRJdGVtQWN0aW9uIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3VzZXItZmVlZC5tb2RlbCc7XG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBKc29uSHViUHJvdG9jb2wgfSBmcm9tICdAYXNwbmV0L3NpZ25hbHInO1xuaW1wb3J0IHsgRWFDU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2VhYy5zZXJ2aWNlJztcbmltcG9ydCB7IEJhc2VNb2RlbGVkUmVzcG9uc2UgfSBmcm9tICdAbGN1L2NvbW1vbic7XG5pbXBvcnQgeyBTb3VyY2VDb250cm9sRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vZGlhbG9ncy9zb3VyY2UtY29udHJvbC1kaWFsb2cvc291cmNlLWNvbnRyb2wtZGlhbG9nLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgRWFDRW52aXJvbm1lbnRBc0NvZGUgfSBmcm9tICdAc2VtYW50aWNqcy9jb21tb24nO1xuaW1wb3J0IHsgQXBwbGljYXRpb25zRmxvd1N0YXRlIH0gZnJvbSAnLi4vLi4vc3RhdGUvYXBwbGljYXRpb25zLWZsb3cuc3RhdGUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsY3UtbWFpbi1mZWVkLWNhcmQnLFxuICB0ZW1wbGF0ZVVybDogJy4vbWFpbi1mZWVkLWNhcmQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9tYWluLWZlZWQtY2FyZC5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBNYWluRmVlZENhcmRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBwdWJsaWMgZ2V0IEFjdGl2ZUVudmlyb25tZW50KCk6IEVhQ0Vudmlyb25tZW50QXNDb2RlIHtcbiAgICByZXR1cm4gdGhpcy5TdGF0ZT8uRWFDPy5FbnZpcm9ubWVudHNbdGhpcy5BY3RpdmVFbnZpcm9ubWVudExvb2t1cF07XG4gIH1cblxuICBwdWJsaWMgZ2V0IEFjdGl2ZUVudmlyb25tZW50TG9va3VwKCk6IHN0cmluZyB7XG4gICAgLy8gIFRPRE86ICBFdmVudHVhbGx5IHN1cHBvcnQgbXVsdGlwbGUgZW52aXJvbm1lbnRzXG4gICAgY29uc3QgZW52TG9va3VwcyA9IE9iamVjdC5rZXlzKHRoaXMuU3RhdGU/LkVhQz8uRW52aXJvbm1lbnRzIHx8IHt9KTtcblxuICAgIHJldHVybiBlbnZMb29rdXBzWzBdO1xuICB9XG5cbiAgcHVibGljIGdldCBFbnZpcm9ubWVudCgpOiBFYUNFbnZpcm9ubWVudEFzQ29kZSB7XG4gICAgLy8gY29uc29sZS5sb2coXCJFbnQgRW52aXJvbm1lbnQgdmFyOiBcIiwgdGhpcy5TdGF0ZT8uRWFDPy5FbnZpcm9ubWVudHNbdGhpcy5TdGF0ZT8uRWFDPy5FbnRlcnByaXNlPy5QcmltYXJ5RW52aXJvbm1lbnRdKTtcbiAgICByZXR1cm4gdGhpcy5TdGF0ZT8uRWFDPy5FbnZpcm9ubWVudHNbXG4gICAgICB0aGlzLlN0YXRlPy5FYUM/LkVudGVycHJpc2U/LlByaW1hcnlFbnZpcm9ubWVudFxuICAgIF07XG4gIH1cblxuICBASW5wdXQoJ2ZlZWQtaXRlbScpXG4gIHB1YmxpYyBGZWVkSXRlbTogRmVlZEl0ZW07XG5cbiAgcHVibGljIGdldCBJY29uKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuRmVlZEl0ZW0uU3RhdHVzLkNvZGUgPT09IDApIHtcbiAgICAgIHJldHVybiAnY2hlY2tfY2lyY2xlJztcbiAgICB9IGVsc2UgaWYgKHRoaXMuRmVlZEl0ZW0uU3RhdHVzLkNvZGUgPT09IDEpIHtcbiAgICAgIHJldHVybiAnY2FuY2VsJztcbiAgICB9IGVsc2UgaWYgKHRoaXMuRmVlZEl0ZW0uU3RhdHVzLkNvZGUgPT09IDIpIHtcbiAgICAgIHJldHVybiAnc3luYyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAnaGVscF9vdXRsaW5lJztcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0IEljb25Db2xvcigpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLkZlZWRJdGVtLlN0YXR1cy5Db2RlID09PSAwKSB7XG4gICAgICByZXR1cm4gJ2dyZWVuJztcbiAgICB9IGVsc2UgaWYgKHRoaXMuRmVlZEl0ZW0uU3RhdHVzLkNvZGUgPT09IDEpIHtcbiAgICAgIHJldHVybiAncmVkJztcbiAgICB9IGVsc2UgaWYgKHRoaXMuRmVlZEl0ZW0uU3RhdHVzLkNvZGUgPT09IDIpIHtcbiAgICAgIHJldHVybiAnYmx1ZSc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAnZ3JheSc7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCBTdGF0ZSgpOiBBcHBsaWNhdGlvbnNGbG93U3RhdGUge1xuICAgIHJldHVybiB0aGlzLmVhY1N2Yy5TdGF0ZTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBlYWNTdmM6IEVhQ1NlcnZpY2UsIHByb3RlY3RlZCBkaWFsb2c6IE1hdERpYWxvZykge31cblxuICAvLyAgTGlmZSBDeWNsZVxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5oYW5kbGVSZWZyZXNoKCk7XG4gIH1cblxuICAvLyAgQVBJIE1ldGhvZHNcbiAgcHVibGljIENhbGN1bGF0ZVRpbWVsYXBzZSh0aW1lc3RhbXA6IERhdGUpIHtcbiAgICByZXR1cm4gbW9tZW50KHRpbWVzdGFtcCkuZnJvbU5vdygpO1xuICB9XG5cbiAgcHVibGljIEhhbmRsZUFjdGlvbihhY3Rpb246IEZlZWRJdGVtQWN0aW9uKSB7XG4gICAgaWYgKGFjdGlvbi5BY3Rpb25UeXBlID09ICdMaW5rJykge1xuICAgICAgaWYgKGFjdGlvbi5BY3Rpb24uc3RhcnRzV2l0aCgnaHR0cCcpKSB7XG4gICAgICAgIHdpbmRvdy5vcGVuKGFjdGlvbi5BY3Rpb24sICdfYmxhbmsnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gYWN0aW9uLkFjdGlvbjtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGFjdGlvbi5BY3Rpb25UeXBlID09ICdNb2RhbCcpIHtcbiAgICAgIGlmIChhY3Rpb24uQWN0aW9uID09ICdBZGRTb3VyY2VDb250cm9sJykge1xuICAgICAgICB0aGlzLk9wZW5Tb3VyY2VDb250cm9sRGlhbG9nKCcnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFsZXJ0KCdvdGhlciBtb2RhbGVkICcgKyBhY3Rpb24uQWN0aW9uKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgT3BlblNvdXJjZUNvbnRyb2xEaWFsb2coc2NMb29rdXA6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oU291cmNlQ29udHJvbERpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgd2lkdGg6ICc1NTBweCcsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIGVudmlyb25tZW50OiB0aGlzLkVudmlyb25tZW50LFxuICAgICAgICBlbnZpcm9ubWVudExvb2t1cDogdGhpcy5BY3RpdmVFbnZpcm9ubWVudExvb2t1cCxcbiAgICAgICAgc2NMb29rdXA6IHNjTG9va3VwLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICAvLyBjb25zb2xlLmxvZygnVGhlIGRpYWxvZyB3YXMgY2xvc2VkJyk7XG4gICAgICAvLyBjb25zb2xlLmxvZyhcInJlc3VsdDpcIiwgcmVzdWx0KVxuICAgIH0pO1xuICB9XG5cbiAgLy8gIEhlbHBlcnNcbiAgcHJvdGVjdGVkIGhhbmRsZVJlZnJlc2goKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuRmVlZEl0ZW0/LlJlZnJlc2hMaW5rKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5lYWNTdmMuQ2hlY2tVc2VyRmVlZEl0ZW0odGhpcy5GZWVkSXRlbSkuc3Vic2NyaWJlKFxuICAgICAgICAgIGFzeW5jIChyZXNwb25zZTogQmFzZU1vZGVsZWRSZXNwb25zZTxGZWVkSXRlbT4pID0+IHtcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5TdGF0dXMuQ29kZSA9PT0gMCkge1xuICAgICAgICAgICAgICB0aGlzLkZlZWRJdGVtID0gcmVzcG9uc2UuTW9kZWw7XG5cbiAgICAgICAgICAgICAgdGhpcy5oYW5kbGVSZWZyZXNoKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhyZXNwb25zZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICAoZXJyKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIH0sIDUwMDApO1xuICAgIH1cbiAgfVxufVxuIiwiPG1hdC1jYXJkIGNsYXNzPVwic29jaWFsLWNhcmRcIj5cbiAgPG1hdC1jYXJkLWhlYWRlcj5cbiAgICA8aW1nXG4gICAgICBtYXQtY2FyZC1hdmF0YXJcbiAgICAgIGNsYXNzPVwiZXhhbXBsZS1oZWFkZXItaW1hZ2VcIlxuICAgICAgW3NyY109XCJGZWVkSXRlbS5BdmF0YXJcIlxuICAgICAgKm5nSWY9XCJGZWVkSXRlbS5BdmF0YXJcIlxuICAgIC8+XG5cbiAgICA8bWF0LWNhcmQtdGl0bGUgKm5nSWY9XCJGZWVkSXRlbS5UaXRsZVwiPnt7IEZlZWRJdGVtLlRpdGxlIH19PC9tYXQtY2FyZC10aXRsZT5cblxuICAgIDxtYXQtY2FyZC1zdWJ0aXRsZT5cbiAgICAgIDxkaXYgKm5nSWY9XCJGZWVkSXRlbS5TdWJ0aXRsZVwiPnt7IEZlZWRJdGVtLlN1YnRpdGxlIH19PC9kaXY+XG4gICAgICA8ZGl2ICpuZ0lmPVwiRmVlZEl0ZW0uU3RhdHVzXCI+XG4gICAgICAgIDxtYXQtaWNvblxuICAgICAgICAgICpuZ0lmPVwiSWNvblwiXG4gICAgICAgICAgW3N0eWxlLmNvbG9yXT1cIkljb25Db2xvclwiXG4gICAgICAgICAgW2NsYXNzLnNwaW5dPVwiRmVlZEl0ZW0uU3RhdHVzPy5Db2RlID09IDJcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgSWNvbiB9fVxuICAgICAgICA8L21hdC1pY29uPlxuXG4gICAgICAgIDxzcGFuICpuZ0lmPVwiRmVlZEl0ZW0uVGltZXN0YW1wXCI+XG4gICAgICAgICAge3sgQ2FsY3VsYXRlVGltZWxhcHNlKEZlZWRJdGVtLlRpbWVzdGFtcCkgfX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgPC9tYXQtY2FyZC1zdWJ0aXRsZT5cbiAgPC9tYXQtY2FyZC1oZWFkZXI+XG5cbiAgPGRpdiAqbmdJZj1cIiFGZWVkSXRlbS5Jc1Nob3J0Rm9ybVwiPlxuICAgIDwhLS0gPGRpdiBjbGFzcz1cImZlZWQtY2FyZC1jb250YWluZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZlZWQtY2FyZC1tYWluLWNvbnRlbnRcIj5cbiAgICAgICAgICAgIFRoZSB0YWIgY29udGVudCAob25seSAxICd0YWInIGZvciBub3cpLi4uICBTbyByZWFsbHkgd2UgZG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dCB0YWJzIHVudGlsIGEgZnV0dXJlIGl0ZXJhdGlvblxuXG4gICAgICAgICAgICBUaGUgdGFicyBwcm9wZXJ0eSB3aWxsIGNvbnRhaW4gYSBkYXRhIHN0cnVjdHVyZSB0aGF0IHdpbGwgdmFyeSBieSB0aGUgRmVlZEl0ZW0uVHlwZS4uLiAgVGhhdCBzdHJ1Y3R1cmUgY2FuIGJlIHVzZWQgdG8gcmVuZGVyIHRoZSBjb250ZW50XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PiAtLT5cbiAgPC9kaXY+XG5cbiAgPG1hdC1jYXJkLWFjdGlvbnMgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEFsaWduPVwic3BhY2UtYXJvdW5kIGNlbnRlclwiPlxuICAgIDxkaXYgZnhGbGV4PjwvZGl2PlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIEZlZWRJdGVtLkFjdGlvbnNcIj5cbiAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiBbY29sb3JdPVwiYWN0aW9uLkNvbG9yXCIgKGNsaWNrKT1cIkhhbmRsZUFjdGlvbihhY3Rpb24pXCI+XG4gICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cImFjdGlvbi5JY29uXCI+e3sgYWN0aW9uLkljb24gfX08L21hdC1pY29uPlxuXG4gICAgICAgIHt7IGFjdGlvbi5UZXh0IH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9tYXQtY2FyZC1hY3Rpb25zPlxuPC9tYXQtY2FyZD5cbiJdfQ==