ngx-beacon-notify 1.4.2 → 1.4.4

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,5 @@
1
1
  import { Component, Input, ViewChild } from '@angular/core';
2
+ import { trigger, transition, style, animate } from '@angular/animations';
2
3
  import * as i0 from "@angular/core";
3
4
  import * as i1 from "../beacon-notify.service";
4
5
  import * as i2 from "@angular/platform-browser";
@@ -142,15 +143,31 @@ export class BeaconNotifyComponent {
142
143
  }
143
144
  }
144
145
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: BeaconNotifyComponent, deps: [{ token: i1.BeaconNotifyService }, { token: i2.DomSanitizer }], target: i0.ɵɵFactoryTarget.Component });
145
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.2", type: BeaconNotifyComponent, selector: "app-beacon", inputs: { beacon: "beacon" }, viewQueries: [{ propertyName: "currentBeacon", first: true, predicate: ["beaconControl"], descendants: true, static: true }], ngImport: i0, template: "<div #beaconControl \n\t\t[id]=\"'bc_' + beacon.bid\"\n\t\t(mouseenter)=\"autoClose(false, beaconControl)\" \n\t\t(mouseleave)=\"autoClose(true, beaconControl)\"\n\t\t(click)=\"beacon.preventClickClose ? null : closeBeacon(beaconControl, beacon)\"\n\t\t[attr.data-beacon-static]=\"beacon.static\"\n\t\tclass=\"beacon-message-control {{ (beacon.static !== true && beacon.fixed !== true) ? beacon.animationClass : '' }} {{ beacon.replacementClass || beacon.type }} {{ beacon.styleClass }}\"\n\t\t[class.beacon-message-control-no-hover-effect]=\"beacon.noHoverEffect\">\n\t<div class=\"beacon-message-header\">\n\t\t<div>\n\t\t\t<span *ngIf=\"beacon.fontIcon\"><i [class]=\"beacon.icon\"></i></span>\n\t\t\t<span *ngIf=\"!beacon.fontIcon && beaconDefaultIconKeys.includes(beacon.icon)\" class=\"beacon-message-svg-control\">\n\t\t\t\t<app-beacon-icon-alert *ngIf=\"beacon.icon | beaconTypeResolve:'alert'\"></app-beacon-icon-alert>\n\t\t\t\t<app-beacon-icon-error *ngIf=\"beacon.icon | beaconTypeResolve:'error'\"></app-beacon-icon-error>\n\t\t\t\t<app-beacon-icon-info *ngIf=\"beacon.icon | beaconTypeResolve:'info'\"></app-beacon-icon-info>\n\t\t\t\t<app-beacon-icon-success *ngIf=\"beacon.icon | beaconTypeResolve:'success'\"></app-beacon-icon-success>\n\t\t\t\t<app-beacon-icon-warning *ngIf=\"beacon.icon | beaconTypeResolve:'warning'\"></app-beacon-icon-warning>\n\t\t\t</span>\n\t\t\t<span *ngIf=\"!beacon.fontIcon && beacon.icon && !beaconDefaultIconKeys.includes(beacon.icon)\" class=\"beacon-message-svg-control\" [innerHTML]=\"beacon.svgIcon\"></span>\n\t\t\t<span class=\"beacon-message-title\">{{ beacon.title }}</span>\n\t\t</div>\n\t\t<div>\n\t\t\t<div *ngIf=\"!beacon.fixed\" class=\"beacon-message-close\" (click)=\"closeBeacon(beaconControl, beacon)\">\n\t\t\t\t<svg width=\"10\" height=\"10\" viewBox=\"0 0 78 78\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n\t\t\t <rect y=\"7.07104\" width=\"10\" height=\"100\" rx=\"5\" transform=\"rotate(-45 0 7.07104)\" />\n\t\t\t <rect x=\"70.7109\" width=\"10\" height=\"100\" rx=\"5\" transform=\"rotate(45 70.7109 0)\" />\n\t\t\t\t</svg>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\t<div class=\"beacon-message-divider\"></div>\n\t<div class=\"beacon-message-body\" [innerHTML]=\"beacon.bodyHtml\"></div>\n\t<div class=\"beacon-message-divider\" *ngIf=\"beacon.buttons?.one || beacon.buttons?.two\"></div>\n\n\t<div class=\"beacon-message-footer\" *ngIf=\"beacon.buttons && beacon.buttons?.one && beacon.buttons?.two\">\n\t\t<div><button (click)=\"beaconButtonClick($event, 1)\">{{ beacon.buttons?.one?.text }}</button></div>\n\t\t<div><button (click)=\"beaconButtonClick($event, 2)\">{{ beacon.buttons?.two?.text }}</button></div>\n\t</div>\n\n\t<div class=\"beacon-message-footer\" *ngIf=\"beacon.buttons && beacon.buttons?.one && !beacon?.buttons?.two\">\n\t\t<div [class]=\"beacon.buttons?.one?.position ? ('beacon-message-button-container-' + beacon?.buttons?.one?.position) : ''\">\n\t\t\t<button (click)=\"beaconButtonClick($event, 1)\">{{ beacon.buttons?.one?.text }}</button>\n\t\t</div>\n\t</div>\n\n</div>", styles: [".beacon-message-svg-control{position:relative;top:0}.beacon-message-title{display:inline-flex;padding-right:5px}.beacon-message-control{width:270px;height:auto;background:#eee;margin:6px;border-radius:4px;position:relative;z-index:4000;cursor:pointer}.beacon-message-control:hover{box-shadow:0 0 20px #4443}.beacon-message-control-no-hover-effect{box-shadow:none!important}.beacon-message-control-animate{-webkit-animation:beacon-fade-out .5s 7s linear forwards;animation:beacon-fade-out .5s 7s linear forwards}.beacon-message-header,.beacon-message-body,.beacon-message-footer{padding:8px;font-size:15px}.beacon-message-header{display:flex;font-size:15px}.beacon-message-header>div:first-child{flex-grow:1;display:flex;place-items:flex-start;word-break:break-word}.beacon-message-header>div:first-child i{font-size:20px;margin-right:7px;margin-top:2px}.beacon-message-header>div:last-child{flex-grow:0}.beacon-message-divider{border-top:1px solid #44444433}.beacon-message-close{height:22px;width:22px;border:1px solid #444444;display:flex;place-items:center;place-content:center;border-radius:100%;cursor:pointer;opacity:.3}.beacon-message-close svg rect{fill:#444}.beacon-message-close:hover{opacity:.7}.beacon-message-alert{background:#eee;color:#5e5e5e}.beacon-message-alert .beacon-message-footer button{border:1px solid #5E5E5E;color:#5e5e5e}.beacon-message-alert .beacon-message-footer button:hover{background:#5e5e5e;color:#fff}.beacon-message-success{background:#f0fff0;color:#698b69}.beacon-message-success .beacon-message-divider{border-color:#698b6933}.beacon-message-success .beacon-message-footer button{border:1px solid #698B69;color:#698b69}.beacon-message-success .beacon-message-footer button:hover{background:#698b69;color:#fff}.beacon-message-error{background:#ffe4e1;color:#b22222}.beacon-message-error .beacon-message-divider{border-color:#ee3b3b33}.beacon-message-error .beacon-message-footer button{border:1px solid #B22222;color:#b22222}.beacon-message-error .beacon-message-footer button:hover{background:#b22222;color:#fff}.beacon-message-warning{background:#fffacd;color:#b8860b}.beacon-message-warning .beacon-message-divider{border-color:#ffd70088}.beacon-message-warning .beacon-message-footer button{border:1px solid #B8860B;color:#b8860b}.beacon-message-warning .beacon-message-footer button:hover{background:#b8860b;color:#fff}.beacon-message-info{background:#bfefff;color:#4a708b}.beacon-message-info .beacon-message-divider{border-color:#5cacee33}.beacon-message-info .beacon-message-footer button{border:1px solid #4A708B;color:#4a708b}.beacon-message-info .beacon-message-footer button:hover{background:#4a708b;color:#fff}.beacon-message-footer{display:flex}.beacon-message-footer>div:first-child{flex-grow:1}.beacon-message-footer>div:last-child{flex-grow:1;text-align:right}.beacon-message-footer button{padding:4px 7px;border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;background:transparent;cursor:pointer}.beacon-message-footer .beacon-message-button-container-left{text-align:left!important}.beacon-message-footer .beacon-message-button-container-center{text-align:center!important}.beacon-message-footer .beacon-message-button-container-right{text-align:right!important}@keyframes beacon-fade-out{90%{opacity:0;display:none}to{opacity:0;display:none}}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.BeaconIconAlertComponent, selector: "app-beacon-icon-alert" }, { kind: "component", type: i5.BeaconIconErrorComponent, selector: "app-beacon-icon-error" }, { kind: "component", type: i6.BeaconIconInfoComponent, selector: "app-beacon-icon-info" }, { kind: "component", type: i7.BeaconIconSuccessComponent, selector: "app-beacon-icon-success" }, { kind: "component", type: i8.BeaconIconWarningComponent, selector: "app-beacon-icon-warning" }, { kind: "pipe", type: i9.BeaconTypeResolvePipe, name: "beaconTypeResolve" }] });
146
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.1.2", type: BeaconNotifyComponent, selector: "app-beacon", inputs: { beacon: "beacon" }, viewQueries: [{ propertyName: "currentBeacon", first: true, predicate: ["beaconControl"], descendants: true, static: true }], ngImport: i0, template: "<div #beaconControl \n\t\t[id]=\"'bc_' + beacon.bid\"\n\t\t(mouseenter)=\"autoClose(false, beaconControl)\" \n\t\t(mouseleave)=\"autoClose(true, beaconControl)\"\n\t\t(click)=\"beacon.preventClickClose ? null : closeBeacon(beaconControl, beacon)\"\n\t\t[attr.data-beacon-static]=\"beacon.static\"\n\t\tclass=\"beacon-message-control {{ (beacon.static !== true && beacon.fixed !== true) ? beacon.animationClass : '' }} {{ beacon.replacementClass || beacon.type }} {{ beacon.styleClass }}\"\n\t\t[class.beacon-message-control-no-hover-effect]=\"beacon.noHoverEffect\"\n\t\t[@fadeInOut]>\n\t<div class=\"beacon-message-header\">\n\t\t<div>\n\t\t\t<span *ngIf=\"beacon.fontIcon\"><i [class]=\"beacon.icon\"></i></span>\n\t\t\t<span *ngIf=\"!beacon.fontIcon && beaconDefaultIconKeys.includes(beacon.icon)\" class=\"beacon-message-svg-control\">\n\t\t\t\t<app-beacon-icon-alert *ngIf=\"beacon.icon | beaconTypeResolve:'alert'\"></app-beacon-icon-alert>\n\t\t\t\t<app-beacon-icon-error *ngIf=\"beacon.icon | beaconTypeResolve:'error'\"></app-beacon-icon-error>\n\t\t\t\t<app-beacon-icon-info *ngIf=\"beacon.icon | beaconTypeResolve:'info'\"></app-beacon-icon-info>\n\t\t\t\t<app-beacon-icon-success *ngIf=\"beacon.icon | beaconTypeResolve:'success'\"></app-beacon-icon-success>\n\t\t\t\t<app-beacon-icon-warning *ngIf=\"beacon.icon | beaconTypeResolve:'warning'\"></app-beacon-icon-warning>\n\t\t\t</span>\n\t\t\t<span *ngIf=\"!beacon.fontIcon && beacon.icon && !beaconDefaultIconKeys.includes(beacon.icon)\" class=\"beacon-message-svg-control\" [innerHTML]=\"beacon.svgIcon\"></span>\n\t\t\t<span class=\"beacon-message-title\">{{ beacon.title }}</span>\n\t\t</div>\n\t\t<div>\n\t\t\t<div *ngIf=\"!beacon.fixed\" class=\"beacon-message-close\" (click)=\"closeBeacon(beaconControl, beacon)\">\n\t\t\t\t<svg width=\"10\" height=\"10\" viewBox=\"0 0 78 78\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n\t\t\t <rect y=\"7.07104\" width=\"10\" height=\"100\" rx=\"5\" transform=\"rotate(-45 0 7.07104)\" />\n\t\t\t <rect x=\"70.7109\" width=\"10\" height=\"100\" rx=\"5\" transform=\"rotate(45 70.7109 0)\" />\n\t\t\t\t</svg>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\t<div class=\"beacon-message-divider\"></div>\n\t<div class=\"beacon-message-body\" [innerHTML]=\"beacon.bodyHtml\"></div>\n\t<div class=\"beacon-message-divider\" *ngIf=\"beacon.buttons?.one || beacon.buttons?.two\"></div>\n\n\t<div class=\"beacon-message-footer\" *ngIf=\"beacon.buttons && beacon.buttons?.one && beacon.buttons?.two\">\n\t\t<div><button (click)=\"beaconButtonClick($event, 1)\">{{ beacon.buttons?.one?.text }}</button></div>\n\t\t<div><button (click)=\"beaconButtonClick($event, 2)\">{{ beacon.buttons?.two?.text }}</button></div>\n\t</div>\n\n\t<div class=\"beacon-message-footer\" *ngIf=\"beacon.buttons && beacon.buttons?.one && !beacon?.buttons?.two\">\n\t\t<div [class]=\"beacon.buttons?.one?.position ? ('beacon-message-button-container-' + beacon?.buttons?.one?.position) : ''\">\n\t\t\t<button (click)=\"beaconButtonClick($event, 1)\">{{ beacon.buttons?.one?.text }}</button>\n\t\t</div>\n\t</div>\n\n</div>", styles: [".beacon-message-svg-control{position:relative;top:0}.beacon-message-title{display:inline-flex;padding-right:5px}.beacon-message-control{width:270px;height:auto;background:#eee;margin:6px;border-radius:4px;position:relative;z-index:4000;cursor:pointer}.beacon-message-control:hover{box-shadow:0 0 20px #4443}.beacon-message-control-no-hover-effect{box-shadow:none!important}.beacon-message-control-animate{-webkit-animation:beacon-fade-out .5s 7s linear forwards;animation:beacon-fade-out .5s 7s linear forwards}.beacon-message-header,.beacon-message-body,.beacon-message-footer{padding:8px;font-size:15px}.beacon-message-header{display:flex;font-size:15px}.beacon-message-header>div:first-child{flex-grow:1;display:flex;place-items:flex-start;word-break:break-word}.beacon-message-header>div:first-child i{font-size:20px;margin-right:7px;margin-top:2px}.beacon-message-header>div:last-child{flex-grow:0}.beacon-message-divider{border-top:1px solid #44444433}.beacon-message-close{height:22px;width:22px;border:1px solid #444444;display:flex;place-items:center;place-content:center;border-radius:100%;cursor:pointer;opacity:.3}.beacon-message-close svg rect{fill:#444}.beacon-message-close:hover{opacity:.7}.beacon-message-alert{background:#eee;color:#5e5e5e}.beacon-message-alert .beacon-message-footer button{border:1px solid #5E5E5E;color:#5e5e5e}.beacon-message-alert .beacon-message-footer button:hover{background:#5e5e5e;color:#fff}.beacon-message-success{background:#f0fff0;color:#698b69}.beacon-message-success .beacon-message-divider{border-color:#698b6933}.beacon-message-success .beacon-message-footer button{border:1px solid #698B69;color:#698b69}.beacon-message-success .beacon-message-footer button:hover{background:#698b69;color:#fff}.beacon-message-error{background:#ffe4e1;color:#b22222}.beacon-message-error .beacon-message-divider{border-color:#ee3b3b33}.beacon-message-error .beacon-message-footer button{border:1px solid #B22222;color:#b22222}.beacon-message-error .beacon-message-footer button:hover{background:#b22222;color:#fff}.beacon-message-warning{background:#fffacd;color:#b8860b}.beacon-message-warning .beacon-message-divider{border-color:#ffd70088}.beacon-message-warning .beacon-message-footer button{border:1px solid #B8860B;color:#b8860b}.beacon-message-warning .beacon-message-footer button:hover{background:#b8860b;color:#fff}.beacon-message-info{background:#bfefff;color:#4a708b}.beacon-message-info .beacon-message-divider{border-color:#5cacee33}.beacon-message-info .beacon-message-footer button{border:1px solid #4A708B;color:#4a708b}.beacon-message-info .beacon-message-footer button:hover{background:#4a708b;color:#fff}.beacon-message-footer{display:flex}.beacon-message-footer>div:first-child{flex-grow:1}.beacon-message-footer>div:last-child{flex-grow:1;text-align:right}.beacon-message-footer button{padding:4px 7px;border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;background:transparent;cursor:pointer}.beacon-message-footer .beacon-message-button-container-left{text-align:left!important}.beacon-message-footer .beacon-message-button-container-center{text-align:center!important}.beacon-message-footer .beacon-message-button-container-right{text-align:right!important}@keyframes beacon-fade-out{90%{opacity:0;display:none}to{opacity:0;display:none}}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.BeaconIconAlertComponent, selector: "app-beacon-icon-alert" }, { kind: "component", type: i5.BeaconIconErrorComponent, selector: "app-beacon-icon-error" }, { kind: "component", type: i6.BeaconIconInfoComponent, selector: "app-beacon-icon-info" }, { kind: "component", type: i7.BeaconIconSuccessComponent, selector: "app-beacon-icon-success" }, { kind: "component", type: i8.BeaconIconWarningComponent, selector: "app-beacon-icon-warning" }, { kind: "pipe", type: i9.BeaconTypeResolvePipe, name: "beaconTypeResolve" }], animations: [
147
+ trigger('fadeInOut', [
148
+ transition(':enter', [
149
+ style({ opacity: 0 }),
150
+ animate('300ms ease-in', style({ opacity: 1 })),
151
+ ]),
152
+ transition(':leave', [animate('300ms ease-out', style({ opacity: 0 }))]),
153
+ ]),
154
+ ] });
146
155
  }
147
156
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: BeaconNotifyComponent, decorators: [{
148
157
  type: Component,
149
- args: [{ selector: 'app-beacon', template: "<div #beaconControl \n\t\t[id]=\"'bc_' + beacon.bid\"\n\t\t(mouseenter)=\"autoClose(false, beaconControl)\" \n\t\t(mouseleave)=\"autoClose(true, beaconControl)\"\n\t\t(click)=\"beacon.preventClickClose ? null : closeBeacon(beaconControl, beacon)\"\n\t\t[attr.data-beacon-static]=\"beacon.static\"\n\t\tclass=\"beacon-message-control {{ (beacon.static !== true && beacon.fixed !== true) ? beacon.animationClass : '' }} {{ beacon.replacementClass || beacon.type }} {{ beacon.styleClass }}\"\n\t\t[class.beacon-message-control-no-hover-effect]=\"beacon.noHoverEffect\">\n\t<div class=\"beacon-message-header\">\n\t\t<div>\n\t\t\t<span *ngIf=\"beacon.fontIcon\"><i [class]=\"beacon.icon\"></i></span>\n\t\t\t<span *ngIf=\"!beacon.fontIcon && beaconDefaultIconKeys.includes(beacon.icon)\" class=\"beacon-message-svg-control\">\n\t\t\t\t<app-beacon-icon-alert *ngIf=\"beacon.icon | beaconTypeResolve:'alert'\"></app-beacon-icon-alert>\n\t\t\t\t<app-beacon-icon-error *ngIf=\"beacon.icon | beaconTypeResolve:'error'\"></app-beacon-icon-error>\n\t\t\t\t<app-beacon-icon-info *ngIf=\"beacon.icon | beaconTypeResolve:'info'\"></app-beacon-icon-info>\n\t\t\t\t<app-beacon-icon-success *ngIf=\"beacon.icon | beaconTypeResolve:'success'\"></app-beacon-icon-success>\n\t\t\t\t<app-beacon-icon-warning *ngIf=\"beacon.icon | beaconTypeResolve:'warning'\"></app-beacon-icon-warning>\n\t\t\t</span>\n\t\t\t<span *ngIf=\"!beacon.fontIcon && beacon.icon && !beaconDefaultIconKeys.includes(beacon.icon)\" class=\"beacon-message-svg-control\" [innerHTML]=\"beacon.svgIcon\"></span>\n\t\t\t<span class=\"beacon-message-title\">{{ beacon.title }}</span>\n\t\t</div>\n\t\t<div>\n\t\t\t<div *ngIf=\"!beacon.fixed\" class=\"beacon-message-close\" (click)=\"closeBeacon(beaconControl, beacon)\">\n\t\t\t\t<svg width=\"10\" height=\"10\" viewBox=\"0 0 78 78\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n\t\t\t <rect y=\"7.07104\" width=\"10\" height=\"100\" rx=\"5\" transform=\"rotate(-45 0 7.07104)\" />\n\t\t\t <rect x=\"70.7109\" width=\"10\" height=\"100\" rx=\"5\" transform=\"rotate(45 70.7109 0)\" />\n\t\t\t\t</svg>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\t<div class=\"beacon-message-divider\"></div>\n\t<div class=\"beacon-message-body\" [innerHTML]=\"beacon.bodyHtml\"></div>\n\t<div class=\"beacon-message-divider\" *ngIf=\"beacon.buttons?.one || beacon.buttons?.two\"></div>\n\n\t<div class=\"beacon-message-footer\" *ngIf=\"beacon.buttons && beacon.buttons?.one && beacon.buttons?.two\">\n\t\t<div><button (click)=\"beaconButtonClick($event, 1)\">{{ beacon.buttons?.one?.text }}</button></div>\n\t\t<div><button (click)=\"beaconButtonClick($event, 2)\">{{ beacon.buttons?.two?.text }}</button></div>\n\t</div>\n\n\t<div class=\"beacon-message-footer\" *ngIf=\"beacon.buttons && beacon.buttons?.one && !beacon?.buttons?.two\">\n\t\t<div [class]=\"beacon.buttons?.one?.position ? ('beacon-message-button-container-' + beacon?.buttons?.one?.position) : ''\">\n\t\t\t<button (click)=\"beaconButtonClick($event, 1)\">{{ beacon.buttons?.one?.text }}</button>\n\t\t</div>\n\t</div>\n\n</div>", styles: [".beacon-message-svg-control{position:relative;top:0}.beacon-message-title{display:inline-flex;padding-right:5px}.beacon-message-control{width:270px;height:auto;background:#eee;margin:6px;border-radius:4px;position:relative;z-index:4000;cursor:pointer}.beacon-message-control:hover{box-shadow:0 0 20px #4443}.beacon-message-control-no-hover-effect{box-shadow:none!important}.beacon-message-control-animate{-webkit-animation:beacon-fade-out .5s 7s linear forwards;animation:beacon-fade-out .5s 7s linear forwards}.beacon-message-header,.beacon-message-body,.beacon-message-footer{padding:8px;font-size:15px}.beacon-message-header{display:flex;font-size:15px}.beacon-message-header>div:first-child{flex-grow:1;display:flex;place-items:flex-start;word-break:break-word}.beacon-message-header>div:first-child i{font-size:20px;margin-right:7px;margin-top:2px}.beacon-message-header>div:last-child{flex-grow:0}.beacon-message-divider{border-top:1px solid #44444433}.beacon-message-close{height:22px;width:22px;border:1px solid #444444;display:flex;place-items:center;place-content:center;border-radius:100%;cursor:pointer;opacity:.3}.beacon-message-close svg rect{fill:#444}.beacon-message-close:hover{opacity:.7}.beacon-message-alert{background:#eee;color:#5e5e5e}.beacon-message-alert .beacon-message-footer button{border:1px solid #5E5E5E;color:#5e5e5e}.beacon-message-alert .beacon-message-footer button:hover{background:#5e5e5e;color:#fff}.beacon-message-success{background:#f0fff0;color:#698b69}.beacon-message-success .beacon-message-divider{border-color:#698b6933}.beacon-message-success .beacon-message-footer button{border:1px solid #698B69;color:#698b69}.beacon-message-success .beacon-message-footer button:hover{background:#698b69;color:#fff}.beacon-message-error{background:#ffe4e1;color:#b22222}.beacon-message-error .beacon-message-divider{border-color:#ee3b3b33}.beacon-message-error .beacon-message-footer button{border:1px solid #B22222;color:#b22222}.beacon-message-error .beacon-message-footer button:hover{background:#b22222;color:#fff}.beacon-message-warning{background:#fffacd;color:#b8860b}.beacon-message-warning .beacon-message-divider{border-color:#ffd70088}.beacon-message-warning .beacon-message-footer button{border:1px solid #B8860B;color:#b8860b}.beacon-message-warning .beacon-message-footer button:hover{background:#b8860b;color:#fff}.beacon-message-info{background:#bfefff;color:#4a708b}.beacon-message-info .beacon-message-divider{border-color:#5cacee33}.beacon-message-info .beacon-message-footer button{border:1px solid #4A708B;color:#4a708b}.beacon-message-info .beacon-message-footer button:hover{background:#4a708b;color:#fff}.beacon-message-footer{display:flex}.beacon-message-footer>div:first-child{flex-grow:1}.beacon-message-footer>div:last-child{flex-grow:1;text-align:right}.beacon-message-footer button{padding:4px 7px;border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;background:transparent;cursor:pointer}.beacon-message-footer .beacon-message-button-container-left{text-align:left!important}.beacon-message-footer .beacon-message-button-container-center{text-align:center!important}.beacon-message-footer .beacon-message-button-container-right{text-align:right!important}@keyframes beacon-fade-out{90%{opacity:0;display:none}to{opacity:0;display:none}}\n"] }]
158
+ args: [{ selector: 'app-beacon', animations: [
159
+ trigger('fadeInOut', [
160
+ transition(':enter', [
161
+ style({ opacity: 0 }),
162
+ animate('300ms ease-in', style({ opacity: 1 })),
163
+ ]),
164
+ transition(':leave', [animate('300ms ease-out', style({ opacity: 0 }))]),
165
+ ]),
166
+ ], template: "<div #beaconControl \n\t\t[id]=\"'bc_' + beacon.bid\"\n\t\t(mouseenter)=\"autoClose(false, beaconControl)\" \n\t\t(mouseleave)=\"autoClose(true, beaconControl)\"\n\t\t(click)=\"beacon.preventClickClose ? null : closeBeacon(beaconControl, beacon)\"\n\t\t[attr.data-beacon-static]=\"beacon.static\"\n\t\tclass=\"beacon-message-control {{ (beacon.static !== true && beacon.fixed !== true) ? beacon.animationClass : '' }} {{ beacon.replacementClass || beacon.type }} {{ beacon.styleClass }}\"\n\t\t[class.beacon-message-control-no-hover-effect]=\"beacon.noHoverEffect\"\n\t\t[@fadeInOut]>\n\t<div class=\"beacon-message-header\">\n\t\t<div>\n\t\t\t<span *ngIf=\"beacon.fontIcon\"><i [class]=\"beacon.icon\"></i></span>\n\t\t\t<span *ngIf=\"!beacon.fontIcon && beaconDefaultIconKeys.includes(beacon.icon)\" class=\"beacon-message-svg-control\">\n\t\t\t\t<app-beacon-icon-alert *ngIf=\"beacon.icon | beaconTypeResolve:'alert'\"></app-beacon-icon-alert>\n\t\t\t\t<app-beacon-icon-error *ngIf=\"beacon.icon | beaconTypeResolve:'error'\"></app-beacon-icon-error>\n\t\t\t\t<app-beacon-icon-info *ngIf=\"beacon.icon | beaconTypeResolve:'info'\"></app-beacon-icon-info>\n\t\t\t\t<app-beacon-icon-success *ngIf=\"beacon.icon | beaconTypeResolve:'success'\"></app-beacon-icon-success>\n\t\t\t\t<app-beacon-icon-warning *ngIf=\"beacon.icon | beaconTypeResolve:'warning'\"></app-beacon-icon-warning>\n\t\t\t</span>\n\t\t\t<span *ngIf=\"!beacon.fontIcon && beacon.icon && !beaconDefaultIconKeys.includes(beacon.icon)\" class=\"beacon-message-svg-control\" [innerHTML]=\"beacon.svgIcon\"></span>\n\t\t\t<span class=\"beacon-message-title\">{{ beacon.title }}</span>\n\t\t</div>\n\t\t<div>\n\t\t\t<div *ngIf=\"!beacon.fixed\" class=\"beacon-message-close\" (click)=\"closeBeacon(beaconControl, beacon)\">\n\t\t\t\t<svg width=\"10\" height=\"10\" viewBox=\"0 0 78 78\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n\t\t\t <rect y=\"7.07104\" width=\"10\" height=\"100\" rx=\"5\" transform=\"rotate(-45 0 7.07104)\" />\n\t\t\t <rect x=\"70.7109\" width=\"10\" height=\"100\" rx=\"5\" transform=\"rotate(45 70.7109 0)\" />\n\t\t\t\t</svg>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\t<div class=\"beacon-message-divider\"></div>\n\t<div class=\"beacon-message-body\" [innerHTML]=\"beacon.bodyHtml\"></div>\n\t<div class=\"beacon-message-divider\" *ngIf=\"beacon.buttons?.one || beacon.buttons?.two\"></div>\n\n\t<div class=\"beacon-message-footer\" *ngIf=\"beacon.buttons && beacon.buttons?.one && beacon.buttons?.two\">\n\t\t<div><button (click)=\"beaconButtonClick($event, 1)\">{{ beacon.buttons?.one?.text }}</button></div>\n\t\t<div><button (click)=\"beaconButtonClick($event, 2)\">{{ beacon.buttons?.two?.text }}</button></div>\n\t</div>\n\n\t<div class=\"beacon-message-footer\" *ngIf=\"beacon.buttons && beacon.buttons?.one && !beacon?.buttons?.two\">\n\t\t<div [class]=\"beacon.buttons?.one?.position ? ('beacon-message-button-container-' + beacon?.buttons?.one?.position) : ''\">\n\t\t\t<button (click)=\"beaconButtonClick($event, 1)\">{{ beacon.buttons?.one?.text }}</button>\n\t\t</div>\n\t</div>\n\n</div>", styles: [".beacon-message-svg-control{position:relative;top:0}.beacon-message-title{display:inline-flex;padding-right:5px}.beacon-message-control{width:270px;height:auto;background:#eee;margin:6px;border-radius:4px;position:relative;z-index:4000;cursor:pointer}.beacon-message-control:hover{box-shadow:0 0 20px #4443}.beacon-message-control-no-hover-effect{box-shadow:none!important}.beacon-message-control-animate{-webkit-animation:beacon-fade-out .5s 7s linear forwards;animation:beacon-fade-out .5s 7s linear forwards}.beacon-message-header,.beacon-message-body,.beacon-message-footer{padding:8px;font-size:15px}.beacon-message-header{display:flex;font-size:15px}.beacon-message-header>div:first-child{flex-grow:1;display:flex;place-items:flex-start;word-break:break-word}.beacon-message-header>div:first-child i{font-size:20px;margin-right:7px;margin-top:2px}.beacon-message-header>div:last-child{flex-grow:0}.beacon-message-divider{border-top:1px solid #44444433}.beacon-message-close{height:22px;width:22px;border:1px solid #444444;display:flex;place-items:center;place-content:center;border-radius:100%;cursor:pointer;opacity:.3}.beacon-message-close svg rect{fill:#444}.beacon-message-close:hover{opacity:.7}.beacon-message-alert{background:#eee;color:#5e5e5e}.beacon-message-alert .beacon-message-footer button{border:1px solid #5E5E5E;color:#5e5e5e}.beacon-message-alert .beacon-message-footer button:hover{background:#5e5e5e;color:#fff}.beacon-message-success{background:#f0fff0;color:#698b69}.beacon-message-success .beacon-message-divider{border-color:#698b6933}.beacon-message-success .beacon-message-footer button{border:1px solid #698B69;color:#698b69}.beacon-message-success .beacon-message-footer button:hover{background:#698b69;color:#fff}.beacon-message-error{background:#ffe4e1;color:#b22222}.beacon-message-error .beacon-message-divider{border-color:#ee3b3b33}.beacon-message-error .beacon-message-footer button{border:1px solid #B22222;color:#b22222}.beacon-message-error .beacon-message-footer button:hover{background:#b22222;color:#fff}.beacon-message-warning{background:#fffacd;color:#b8860b}.beacon-message-warning .beacon-message-divider{border-color:#ffd70088}.beacon-message-warning .beacon-message-footer button{border:1px solid #B8860B;color:#b8860b}.beacon-message-warning .beacon-message-footer button:hover{background:#b8860b;color:#fff}.beacon-message-info{background:#bfefff;color:#4a708b}.beacon-message-info .beacon-message-divider{border-color:#5cacee33}.beacon-message-info .beacon-message-footer button{border:1px solid #4A708B;color:#4a708b}.beacon-message-info .beacon-message-footer button:hover{background:#4a708b;color:#fff}.beacon-message-footer{display:flex}.beacon-message-footer>div:first-child{flex-grow:1}.beacon-message-footer>div:last-child{flex-grow:1;text-align:right}.beacon-message-footer button{padding:4px 7px;border-radius:5px;-webkit-border-radius:5px;-moz-border-radius:5px;background:transparent;cursor:pointer}.beacon-message-footer .beacon-message-button-container-left{text-align:left!important}.beacon-message-footer .beacon-message-button-container-center{text-align:center!important}.beacon-message-footer .beacon-message-button-container-right{text-align:right!important}@keyframes beacon-fade-out{90%{opacity:0;display:none}to{opacity:0;display:none}}\n"] }]
150
167
  }], ctorParameters: () => [{ type: i1.BeaconNotifyService }, { type: i2.DomSanitizer }], propDecorators: { beacon: [{
151
168
  type: Input
152
169
  }], currentBeacon: [{
153
170
  type: ViewChild,
154
171
  args: ['beaconControl', { static: true }]
155
172
  }] } });
156
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmVhY29uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvYmVhY29uL2JlYWNvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9zcmMvbGliL2JlYWNvbi9iZWFjb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQWlCLFNBQVMsRUFBYyxNQUFNLGVBQWUsQ0FBQzs7Ozs7Ozs7Ozs7QUFVdkYsTUFBTSxPQUFPLHFCQUFxQjtJQU1aO0lBQ1Y7SUFORCxNQUFNLENBQWdCO0lBQ2UsYUFBYSxDQUFZO0lBQy9ELFNBQVMsQ0FBYztJQUN4QixxQkFBcUIsQ0FBVztJQUV2QyxZQUFvQixhQUFrQyxFQUM1QyxTQUF1QjtRQURiLGtCQUFhLEdBQWIsYUFBYSxDQUFxQjtRQUM1QyxjQUFTLEdBQVQsU0FBUyxDQUFjO1FBQy9CLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLHdCQUF3QixDQUFBO0lBQzFFLENBQUM7SUFFRCxRQUFRO1FBQ04sbUJBQW1CO1FBQ25CLElBQUksQ0FBQyxhQUFhLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDO1lBQzVDLEtBQUssRUFBRSxJQUFJO1lBQ1gsRUFBRSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRztTQUNwQixDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQsZUFBZTtRQUNiLGFBQWE7UUFDYixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFBO1FBQ2hFLHlDQUF5QztRQUN6QyxJQUFJLENBQUMsOEJBQThCLENBQUMsTUFBTSxDQUFDLENBQUE7UUFDM0Msb0NBQW9DO1FBQ3BDLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUMxQyxVQUFVLENBQUMsR0FBRyxFQUFF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LGFBQWE7c0JBQTFELFNBQVM7dUJBQUMsZUFBZSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIEFmdGVyVmlld0luaXQsIFZpZXdDaGlsZCwgRWxlbWVudFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVhY29uTm90aWZ5U2VydmljZSB9IGZyb20gJy4uL2JlYWNvbi1ub3RpZnkuc2VydmljZSc7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIsIFNhZmVIdG1sIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBJQmVhY29uQ29uZmlnLCBJQmVhY29uRXZlbnRNZXNzYWdlIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtYmVhY29uJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2JlYWNvbi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2JlYWNvbi5jb21wb25lbnQuY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgQmVhY29uTm90aWZ5Q29tcG9uZW50IHtcbiAgQElucHV0KCkgYmVhY29uITogSUJlYWNvbkNvbmZpZ1xuICBAVmlld0NoaWxkKCdiZWFjb25Db250cm9sJywgeyBzdGF0aWM6IHRydWUgfSkgY3VycmVudEJlYWNvbjogRWxlbWVudFJlZlxuICBwcml2YXRlIGJlYWNvbkRPTSE6IEhUTUxFbGVtZW50XG4gIHB1YmxpYyBiZWFjb25EZWZhdWx0SWNvbktleXMhOiBzdHJpbmdbXVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYmVhY29uU2VydmljZTogQmVhY29uTm90aWZ5U2VydmljZSxcbiAgICBwcml2YXRlIHNhbml0aXplcjogRG9tU2FuaXRpemVyKXtcbiAgICB0aGlzLmJlYWNvbkRlZmF1bHRJY29uS2V5cyA9IHRoaXMuYmVhY29uU2VydmljZS5nZXRCZWFjb25EZWZhdWx0SWNvbktleXNcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIC8vIEZpcmUgbW91bnQgZXZlbnRcbiAgICB0aGlzLmJlYWNvblNlcnZpY2UuYmVhY29uRXZlbnRUYXNrTWFzdGVyLmVtaXQoe1xuICAgICAgbW91bnQ6IHRydWUsXG4gICAgICBpZDogdGhpcy5iZWFjb24uYmlkXG4gICAgfSlcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAvLyBHZXQgYmVhY29uXG4gICAgY29uc3QgYmVhY29uID0gdGhpcy5iZWFjb25ET00gPSB0aGlzLmN1cnJlbnRCZWFjb24ubmF0aXZlRWxlbWVudFxuICAgIC8vIFJlc29sdmUgZm9udCB3ZWlnaHQgZm9yIHRpdGxlIGFuZCBib2R5XG4gICAgdGhpcy5yZXNvbHZlRm9udFdlaWdodEZvckNvbXBvbmVudHMoYmVhY29uKVxuICAgIC8vIFJlc29sdmUgcG9zc2libGUgZm9jdXMgZm9yIGJlYWNvblxuICAgIHRoaXMucmVzb2x2ZVBvc3NpYmxlRm9jdXNGb3JCZWFjb24oYmVhY29uKVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgLy8gUmVzb2x2ZSBkZWxheSBzZXR0aW5nXG4gICAgICB0aGlzLnJlc29sdmVEZWxheUZvckJlYWNvbihiZWFjb24sIHRydWUpXG4gICAgICAvLyBTZXQgYmVhY29uIGxpc3RlbmVyXG4gICAgICB0aGlzLnNldExpc3RlbmVyRm9yQmVhY29uKGJlYWNvbiwgdGhpcy5iZWFjb24pXG5cbiAgICAgIC8vIFNhbml0aXplIHN2ZyBjb250ZW50IGlmIG5vdCBmb250IGljb25cbiAgICAgIGlmICh0aGlzLmJlYWNvbi5zdmdJY29uKSB7XG4gICAgICAgIGNvbnN0IGJlYWNvblN2Z0ljb24gPSBiZWFjb24ucXVlcnlTZWxlY3Rvcignc3Bhbi5iZWFjb24tbWVzc2FnZS1zdmctY29udHJvbCBzdmcnKVxuICAgICAgICBiZWFjb25TdmdJY29uLnN0eWxlLndpZHRoID0gJzIwcHgnXG4gICAgICAgIGJlYWNvblN2Z0ljb24uc3R5bGUuaGVpZ2h0ID0gJzIwcHgnXG4gICAgICAgIGJlYWNvblN2Z0ljb24uc3R5bGUubWFyZ2luUmlnaHQgPSAnN3B4J1xuICAgICAgICBiZWFjb25TdmdJY29uLnN0eWxlLm1hcmdpblRvcCA9ICctMnB4J1xuICAgICAgfVxuICAgIH0sIDApXG5cbiAgICAvLyBMaXN0ZW4gZm9yIGV2ZW50XG4gICAgdGhpcy5iZWFjb25TZXJ2aWNlLmJlYWNvbkV2ZW50VGFza01hc3Rlci5zdWJzY3JpYmUoKG1lc3NhZ2U6IElCZWFjb25FdmVudE1lc3NhZ2UpID0+IHtcbiAgICAgIC8vIENoZWNrIGZvciBuZXh0IGZvciBmb2N1cyBldmVudFxuICAgICAgaWYgKG1lc3NhZ2UuYXV0b0RldGVjdE5leHRGb2N1c0JlYWNvbilcbiAgICAgICAgdGhpcy5yZXNvbHZlUG9zc2libGVGb2N1c0ZvckJlYWNvbih0aGlzLmJlYWNvbkRPTSwgZmFsc2UpXG4gICAgfSlcbiAgfVxuXG4gIC8vIFdoZW4gYmVhY29uIGJ1dHRvbiBpcyBjbGlja2VkXG4gIGJlYWNvbkJ1dHRvbkNsaWNrKGU6IEV2ZW50LCBubzogbnVtYmVyKTogdm9pZCB7XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKVxuICAgIHN3aXRjaCAobm8pIHtcbiAgICAgIGNhc2UgMTpcbiAgICAgICAgLy8gQ2hlY2sgZm9yIGNhbGxiYWNrXG4gICAgICAgIGlmICh0aGlzLmJlYWNvbj8uYnV0dG9ucz8ub25lPy5jYWxsYmFjaylcbiAgICAgICAgICB0aGlzLmJlYWNvbj8uYnV0dG9ucz8ub25lPy5jYWxsYmFjayguLi4odGhpcy5iZWFjb24/LmJ1dHRvbnM/Lm9uZT8uY2FsbGJhY2tBcmdzIHx8IFtdKSlcbiAgICAgICAgXG4gICAgICAgIC8vIENoZWNrIGlmIGNhbiBkaXNtaXNzXG4gICAgICAgIGlmICh0aGlzLmJlYWNvbj8uYnV0dG9ucz8ub25lPy5jYW5EaXNtaXNzKVxuICAgICAgICAgIHRoaXMuY2xvc2VCZWFjb24odGhpcy5iZWFjb25ET00sIHRoaXMuYmVhY29uKVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAyOlxuICAgICAgICAvLyBDaGVjayBmb3IgY2FsbGJhY2tcbiAgICAgICAgaWYgKHRoaXMuYmVhY29uPy5idXR0b25zPy50d28/LmNhbGxiYWNrKVxuICAgICAgICAgIHRoaXMuYmVhY29uPy5idXR0b25zPy50d28/LmNhbGxiYWNrKC4uLih0aGlzLmJlYWNvbj8uYnV0dG9ucz8udHdvPy5jYWxsYmFja0FyZ3MgfHwgW10pKVxuXG4gICAgICAgIC8vIENoZWNrIGlmIGNhbiBkaXNtaXNzXG4gICAgICAgIGlmICh0aGlzLmJlYWNvbj8uYnV0dG9ucz8udHdvPy5jYW5EaXNtaXNzKVxuICAgICAgICAgIHRoaXMuY2xvc2VCZWFjb24odGhpcy5iZWFjb25ET00sIHRoaXMuYmVhY29uKVxuICAgICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIC8vIFNldCBsaXN0ZW5lciBmb3IgYmVhY29uIGNoYW5nZXNcbiAgc2V0TGlzdGVuZXJGb3JCZWFjb24oYmVhY29uOiBFbGVtZW50LCBiZWFjb25EYXRhOiBJQmVhY29uQ29uZmlnKTogdm9pZCB7XG4gICAgKChiLCBkKSA9PiB7XG4gICAgICBiZWFjb24/LmFkZEV2ZW50TGlzdGVuZXIoJ2FuaW1hdGlvbmVuZCcsIChlKSA9PiB0aGlzLmNsb3NlQmVhY29uKGIsIGQpKVxuICAgICAgYmVhY29uPy5hZGRFdmVudExpc3RlbmVyKCd3ZWJraXRBbmltYXRpb25FbmQnLCAoZSkgPT4gdGhpcy5jbG9zZUJlYWNvbihiLCBkKSlcbiAgICAgIGJlYWNvbj8uYWRkRXZlbnRMaXN0ZW5lcignb0FuaW1hdGlvbkVuZCcsIChlKSA9PiB0aGlzLmNsb3NlQmVhY29uKGIsIGQpKVxuICAgIH0pKGJlYWNvbiwgYmVhY29uRGF0YSlcbiAgfVxuXG4gIC8vIFRvZ2dsZSBhdXRvLWNsb3NlXG4gIGF1dG9DbG9zZShzdGF0dXM6IGJvb2xlYW4sIGNvbnRyb2w6IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgc3RhdHVzXG4gICAgICA/IChjb250cm9sLmdldEF0dHJpYnV0ZSgnZGF0YS1iZWFjb24tc3RhdGljJykgIT0gJ3RydWUnICYmIHRoaXMucmVzb2x2ZURlbGF5Rm9yQmVhY29uKGNvbnRyb2wsIGZhbHNlKSlcbiAgICAgIDogY29udHJvbC5jbGFzc0xpc3QucmVtb3ZlKFN0cmluZyh0aGlzLmJlYWNvbi5hbmltYXRpb25DbGFzcykpXG4gIH1cblxuICAvLyBSZXNvbHZlIGRlbGF5IGZvciBiZWFjb25cbiAgcmVzb2x2ZURlbGF5Rm9yQmVhY29uKGJlYWNvbjogSFRNTEVsZW1lbnQsIG9uTG9hZD86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAvLyBDaGVjayBpZiBkZWxheSBzZXRcbiAgICBpZiAodGhpcy5iZWFjb24uc3RhdGljICYmIHR5cGVvZiB0aGlzLmJlYWNvbi5zdGF0aWMgPT0gJ251bWJlcicpIHtcbiAgICAgIGJlYWNvbiAmJiAoYmVhY29uLnN0eWxlLmFuaW1hdGlvbkRlbGF5ID0gdGhpcy5iZWFjb24uc3RhdGljICsgJ3MnKVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAob25Mb2FkID09ICExICYmIHRoaXMuYmVhY29uPy5maXhlZCAhPSB0cnVlKVxuICAgICAgICBiZWFjb24uY2xhc3NMaXN0LmFkZChTdHJpbmcodGhpcy5iZWFjb24uYW5pbWF0aW9uQ2xhc3MpKVxuICAgIH1cbiAgfVxuXG4gIC8vIFJlc29sdmUgZm9udCB3ZWlnaHQgZm9yIHRpdGxlIGFuZCBib2R5XG4gIHJlc29sdmVGb250V2VpZ2h0Rm9yQ29tcG9uZW50cyhiZWFjb246IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgY29uc3QgdGl0bGU6IEhUTUxFbGVtZW50ID0gYmVhY29uLnF1ZXJ5U2VsZWN0b3IoJ2Rpdi5iZWFjb24tbWVzc2FnZS1oZWFkZXInKVxuICAgIGNvbnN0IGJvZHk6IEhUTUxFbGVtZW50ID0gYmVhY29uLnF1ZXJ5U2VsZWN0b3IoJ2Rpdi5iZWFjb24tbWVzc2FnZS1ib2R5JylcbiAgICB0aXRsZSAmJiAodGl0bGUuc3R5bGUuZm9udFdlaWdodCA9IHRoaXMuYmVhY29uLmZvbnRXZWlnaHRUaXRsZSB8fCAnYm9sZCcpXG4gICAgYm9keSAmJiAoYm9keS5zdHlsZS5mb250V2VpZ2h0ID0gdGhpcy5iZWFjb24uZm9udFdlaWdodEJvZHkgfHwgJ2JvbGQnKVxuICB9XG5cbiAgLy8gUmVzb2x2ZSBmb2N1cyBiZWFjb25cbiAgcmVzb2x2ZVBvc3NpYmxlRm9jdXNGb3JCZWFjb24oYmVhY29uOiBIVE1MRWxlbWVudCwgY3JlYXRlT3ZlcmxheTogYm9vbGVhbiA9IHRydWUpOiB2b2lkIHtcbiAgICBjb25zdCBhY3RpdmVGb2N1c0JlYWNvbklkID0gdGhpcy5iZWFjb25TZXJ2aWNlLmdldEFjdGl2ZUZvY3VzQmVhY29uSWRcbiAgICBpZiAoYWN0aXZlRm9jdXNCZWFjb25JZCA9PSB0aGlzLmJlYWNvbi5iaWQpIHtcbiAgICAgIGJlYWNvbi5zdHlsZS56SW5kZXggPSAnOTAwMydcbiAgICAgIFxuICAgICAgLy8gQ2hlY2sgaWYgYmVhY29uIHNob3VsZCBiZSBjZW50ZXJlZFxuICAgICAgaWYgKHRoaXMuYmVhY29uLnNoaW5lKSB7XG4gICAgICAgIGNvbnN0IHNjYWxlID0gdGhpcy5iZWFjb24uc2hpbmVTY2FsZSAmJiBTdHJpbmcodGhpcy5iZWFjb24uc2hpbmVTY2FsZSkubWF0Y2goLyhcXGQrKVxcLihcXGQrKS8pID8gdGhpcy5iZWFjb24uc2hpbmVTY2FsZSA6ICcxLjUnXG4gICAgICAgIGJlYWNvbi5zdHlsZS5wb3NpdGlvbiA9ICdmaXhlZCdcbiAgICAgICAgYmVhY29uLnN0eWxlLnJpZ2h0ID0gJzAnXG4gICAgICAgIGJlYWNvbi5zdHlsZS5sZWZ0ID0gJzAnXG4gICAgICAgIGJlYWNvbi5zdHlsZS5ib3R0b20gPSAnNTAlJ1xuICAgICAgICBiZWFjb24uc3R5bGUubWFyZ2luID0gJ2F1dG8nXG4gICAgICAgIGJlYWNvbi5zdHlsZS50cmFuc2Zvcm0gPSAnc2NhbGUoJyArIHNjYWxlICsgJyknXG4gICAgICB9XG5cbiAgICAgIC8vIENyZWF0ZSBvdmVybGF5XG4gICAgICBpZiAoY3JlYXRlT3ZlcmxheSlcbiAgICAgICAgdGhpcy5iZWFjb25TZXJ2aWNlLmNyZWF0ZUJlYWNvbkZvY3VzT3ZlcmxheSh0aGlzLmJlYWNvbi5vdmVybGF5Q29sb3IpXG4gICAgICBlbHNlIHRoaXMuYmVhY29uU2VydmljZS5yZXBhaW50QmVhY29uRm9jdXNPdmVybGF5KHRoaXMuYmVhY29uLm92ZXJsYXlDb2xvcilcbiAgICB9XG4gIH1cblxuICAvLyBUcmlnZ2VyIGNsb3NlIGJlYWNvblxuICBjbG9zZUJlYWNvbihiZWFjb25Db250cm9sOiBhbnksIGJlYWNvbkRhdGE6IElCZWFjb25Db25maWcpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuYmVhY29uPy5maXhlZCkge1xuICAgICAgdGhpcy5iZWFjb25TZXJ2aWNlLmJlYWNvbkV2ZW50VGFza01hc3Rlci5lbWl0KHtcbiAgICAgICAgZGVsZXRlOiB0cnVlLFxuICAgICAgICBpZDogYmVhY29uQ29udHJvbC5nZXRBdHRyaWJ1dGUoJ2lkJykucmVwbGFjZSgvYmNfLywgJycpXG4gICAgICB9KVxuICAgIH1cbiAgfVxufVxuIiwiPGRpdiAjYmVhY29uQ29udHJvbCBcblx0XHRbaWRdPVwiJ2JjXycgKyBiZWFjb24uYmlkXCJcblx0XHQobW91c2VlbnRlcik9XCJhdXRvQ2xvc2UoZmFsc2UsIGJlYWNvbkNvbnRyb2wpXCIgXG5cdFx0KG1vdXNlbGVhdmUpPVwiYXV0b0Nsb3NlKHRydWUsIGJlYWNvbkNvbnRyb2wpXCJcblx0XHQoY2xpY2spPVwiYmVhY29uLnByZXZlbnRDbGlja0Nsb3NlID8gbnVsbCA6IGNsb3NlQmVhY29uKGJlYWNvbkNvbnRyb2wsIGJlYWNvbilcIlxuXHRcdFthdHRyLmRhdGEtYmVhY29uLXN0YXRpY109XCJiZWFjb24uc3RhdGljXCJcblx0XHRjbGFzcz1cImJlYWNvbi1tZXNzYWdlLWNvbnRyb2wge3sgKGJlYWNvbi5zdGF0aWMgIT09IHRydWUgJiYgYmVhY29uLmZpeGVkICE9PSB0cnVlKSA/IGJlYWNvbi5hbmltYXRpb25DbGFzcyA6ICcnIH19IHt7IGJlYWNvbi5yZXBsYWNlbWVudENsYXNzIHx8IGJlYWNvbi50eXBlIH19IHt7IGJlYWNvbi5zdHlsZUNsYXNzIH19XCJcblx0XHRbY2xhc3MuYmVhY29uLW1lc3NhZ2UtY29udHJvbC1uby1ob3Zlci1lZmZlY3RdPVwiYmVhY29uLm5vSG92ZXJFZmZlY3RcIj5cblx0PGRpdiBjbGFzcz1cImJlYWNvbi1tZXNzYWdlLWhlYWRlclwiPlxuXHRcdDxkaXY+XG5cdFx0XHQ8c3BhbiAqbmdJZj1cImJlYWNvbi5mb250SWNvblwiPjxpIFtjbGFzc109XCJiZWFjb24uaWNvblwiPjwvaT48L3NwYW4+XG5cdFx0XHQ8c3BhbiAqbmdJZj1cIiFiZWFjb24uZm9udEljb24gJiYgYmVhY29uRGVmYXVsdEljb25LZXlzLmluY2x1ZGVzKGJlYWNvbi5pY29uKVwiIGNsYXNzPVwiYmVhY29uLW1lc3NhZ2Utc3ZnLWNvbnRyb2xcIj5cblx0XHRcdFx0PGFwcC1iZWFjb24taWNvbi1hbGVydCAqbmdJZj1cImJlYWNvbi5pY29uIHwgYmVhY29uVHlwZVJlc29sdmU6J2FsZXJ0J1wiPjwvYXBwLWJlYWNvbi1pY29uLWFsZXJ0PlxuXHRcdFx0XHQ8YXBwLWJlYWNvbi1pY29uLWVycm9yICpuZ0lmPVwiYmVhY29uLmljb24gfCBiZWFjb25UeXBlUmVzb2x2ZTonZXJyb3InXCI+PC9hcHAtYmVhY29uLWljb24tZXJyb3I+XG5cdFx0XHRcdDxhcHAtYmVhY29uLWljb24taW5mbyAqbmdJZj1cImJlYWNvbi5pY29uIHwgYmVhY29uVHlwZVJlc29sdmU6J2luZm8nXCI+PC9hcHAtYmVhY29uLWljb24taW5mbz5cblx0XHRcdFx0PGFwcC1iZWFjb24taWNvbi1zdWNjZXNzICpuZ0lmPVwiYmVhY29uLmljb24gfCBiZWFjb25UeXBlUmVzb2x2ZTonc3VjY2VzcydcIj48L2FwcC1iZWFjb24taWNvbi1zdWNjZXNzPlxuXHRcdFx0XHQ8YXBwLWJlYWNvbi1pY29uLXdhcm5pbmcgKm5nSWY9XCJiZWFjb24uaWNvbiB8IGJlYWNvblR5cGVSZXNvbHZlOid3YXJuaW5nJ1wiPjwvYXBwLWJlYWNvbi1pY29uLXdhcm5pbmc+XG5cdFx0XHQ8L3NwYW4+XG5cdFx0XHQ8c3BhbiAqbmdJZj1cIiFiZWFjb24uZm9udEljb24gJiYgYmVhY29uLmljb24gJiYgIWJlYWNvbkRlZmF1bHRJY29uS2V5cy5pbmNsdWRlcyhiZWFjb24uaWNvbilcIiBjbGFzcz1cImJlYWNvbi1tZXNzYWdlLXN2Zy1jb250cm9sXCIgW2lubmVySFRNTF09XCJiZWFjb24uc3ZnSWNvblwiPjwvc3Bhbj5cblx0XHRcdDxzcGFuIGNsYXNzPVwiYmVhY29uLW1lc3NhZ2UtdGl0bGVcIj57eyBiZWFjb24udGl0bGUgfX08L3NwYW4+XG5cdFx0PC9kaXY+XG5cdFx0PGRpdj5cblx0XHRcdDxkaXYgKm5nSWY9XCIhYmVhY29uLmZpeGVkXCIgY2xhc3M9XCJiZWFjb24tbWVzc2FnZS1jbG9zZVwiIChjbGljayk9XCJjbG9zZUJlYWNvbihiZWFjb25Db250cm9sLCBiZWFjb24pXCI+XG5cdFx0XHRcdDxzdmcgd2lkdGg9XCIxMFwiIGhlaWdodD1cIjEwXCIgdmlld0JveD1cIjAgMCA3OCA3OFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuXHRcdFx0ICAgIDxyZWN0IHk9XCI3LjA3MTA0XCIgd2lkdGg9XCIxMFwiIGhlaWdodD1cIjEwMFwiIHJ4PVwiNVwiIHRyYW5zZm9ybT1cInJvdGF0ZSgtNDUgMCA3LjA3MTA0KVwiIC8+XG5cdFx0XHQgICAgPHJlY3QgeD1cIjcwLjcxMDlcIiB3aWR0aD1cIjEwXCIgaGVpZ2h0PVwiMTAwXCIgcng9XCI1XCIgdHJhbnNmb3JtPVwicm90YXRlKDQ1IDcwLjcxMDkgMClcIiAvPlxuXHRcdFx0XHQ8L3N2Zz5cblx0XHRcdDwvZGl2PlxuXHRcdDwvZGl2PlxuXHQ8L2Rpdj5cblx0PGRpdiBjbGFzcz1cImJlYWNvbi1tZXNzYWdlLWRpdmlkZXJcIj48L2Rpdj5cblx0PGRpdiBjbGFzcz1cImJlYWNvbi1tZXNzYWdlLWJvZHlcIiBbaW5uZXJIVE1MXT1cImJlYWNvbi5ib2R5SHRtbFwiPjwvZGl2PlxuXHQ8ZGl2IGNsYXNzPVwiYmVhY29uLW1lc3NhZ2UtZGl2aWRlclwiICpuZ0lmPVwiYmVhY29uLmJ1dHRvbnM/Lm9uZSB8fCBiZWFjb24uYnV0dG9ucz8udHdvXCI+PC9kaXY+XG5cblx0PGRpdiBjbGFzcz1cImJlYWNvbi1tZXNzYWdlLWZvb3RlclwiICpuZ0lmPVwiYmVhY29uLmJ1dHRvbnMgJiYgYmVhY29uLmJ1dHRvbnM/Lm9uZSAmJiBiZWFjb24uYnV0dG9ucz8udHdvXCI+XG5cdFx0PGRpdj48YnV0dG9uIChjbGljayk9XCJiZWFjb25CdXR0b25DbGljaygkZXZlbnQsIDEpXCI+e3sgYmVhY29uLmJ1dHRvbnM/Lm9uZT8udGV4dCB9fTwvYnV0dG9uPjwvZGl2PlxuXHRcdDxkaXY+PGJ1dHRvbiAoY2xpY2spPVwiYmVhY29uQnV0dG9uQ2xpY2soJGV2ZW50LCAyKVwiPnt7IGJlYWNvbi5idXR0b25zPy50d28/LnRleHQgfX08L2J1dHRvbj48L2Rpdj5cblx0PC9kaXY+XG5cblx0PGRpdiBjbGFzcz1cImJlYWNvbi1tZXNzYWdlLWZvb3RlclwiICpuZ0lmPVwiYmVhY29uLmJ1dHRvbnMgJiYgYmVhY29uLmJ1dHRvbnM/Lm9uZSAmJiAhYmVhY29uPy5idXR0b25zPy50d29cIj5cblx0XHQ8ZGl2IFtjbGFzc109XCJiZWFjb24uYnV0dG9ucz8ub25lPy5wb3NpdGlvbiA/ICgnYmVhY29uLW1lc3NhZ2UtYnV0dG9uLWNvbnRhaW5lci0nICsgYmVhY29uPy5idXR0b25zPy5vbmU/LnBvc2l0aW9uKSA6ICcnXCI+XG5cdFx0XHQ8YnV0dG9uIChjbGljayk9XCJiZWFjb25CdXR0b25DbGljaygkZXZlbnQsIDEpXCI+e3sgYmVhY29uLmJ1dHRvbnM/Lm9uZT8udGV4dCB9fTwvYnV0dG9uPlxuXHRcdDwvZGl2PlxuXHQ8L2Rpdj5cblxuPC9kaXY+Il19
173
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmVhY29uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvYmVhY29uL2JlYWNvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9zcmMvbGliL2JlYWNvbi9iZWFjb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQWlCLFNBQVMsRUFBYyxNQUFNLGVBQWUsQ0FBQztBQUl2RixPQUFPLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7Ozs7Ozs7Ozs7O0FBZ0IxRSxNQUFNLE9BQU8scUJBQXFCO0lBTVo7SUFDVjtJQU5ELE1BQU0sQ0FBZ0I7SUFDZSxhQUFhLENBQVk7SUFDL0QsU0FBUyxDQUFjO0lBQ3hCLHFCQUFxQixDQUFXO0lBRXZDLFlBQW9CLGFBQWtDLEVBQzVDLFNBQXVCO1FBRGIsa0JBQWEsR0FBYixhQUFhLENBQXFCO1FBQzVDLGNBQVMsR0FBVCxTQUFTLENBQWM7UUFDL0IsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsd0JBQXdCLENBQUE7SUFDMUUsQ0FBQztJQUVELFFBQVE7UUFDTixtQkFBbUI7UUFDbkIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUM7WUFDNUMsS0FBSyxFQUFFLElBQUk7WUFDWCxFQUFFLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHO1NBQ3BCLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCxlQUFlO1FBQ2IsYUFBYTtRQUNiLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUE7UUFDaEUseUNBQXlDO1FBQ3pDLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUMzQyxv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LGdpR0E4Q00sdzZIRHBDUTtZQUNWLE9BQU8sQ0FBQyxXQUFXLEVBQUU7Z0JBQ25CLFVBQVUsQ0FBQyxRQUFRLEVBQUU7b0JBQ25CLEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQztvQkFDckIsT0FBTyxDQUFDLGVBQWUsRUFBRSxLQUFLLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztpQkFDaEQsQ0FBQztnQkFDRixVQUFVLENBQUMsUUFBUSxFQUFFLENBQUMsT0FBTyxDQUFDLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUN6RSxDQUFDO1NBQ0g7OzJGQUVVLHFCQUFxQjtrQkFkakMsU0FBUzsrQkFDRSxZQUFZLGNBR1Y7d0JBQ1YsT0FBTyxDQUFDLFdBQVcsRUFBRTs0QkFDbkIsVUFBVSxDQUFDLFFBQVEsRUFBRTtnQ0FDbkIsS0FBSyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDO2dDQUNyQixPQUFPLENBQUMsZUFBZSxFQUFFLEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDOzZCQUNoRCxDQUFDOzRCQUNGLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO3lCQUN6RSxDQUFDO3FCQUNIO21IQUdRLE1BQU07c0JBQWQsS0FBSztnQkFDd0MsYUFBYTtzQkFBMUQsU0FBUzt1QkFBQyxlQUFlLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgQWZ0ZXJWaWV3SW5pdCwgVmlld0NoaWxkLCBFbGVtZW50UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWFjb25Ob3RpZnlTZXJ2aWNlIH0gZnJvbSAnLi4vYmVhY29uLW5vdGlmeS5zZXJ2aWNlJztcbmltcG9ydCB7IERvbVNhbml0aXplciwgU2FmZUh0bWwgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IElCZWFjb25Db25maWcsIElCZWFjb25FdmVudE1lc3NhZ2UgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyB0cmlnZ2VyLCB0cmFuc2l0aW9uLCBzdHlsZSwgYW5pbWF0ZSB9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtYmVhY29uJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2JlYWNvbi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2JlYWNvbi5jb21wb25lbnQuY3NzJ10sXG4gIGFuaW1hdGlvbnM6IFtcbiAgICB0cmlnZ2VyKCdmYWRlSW5PdXQnLCBbXG4gICAgICB0cmFuc2l0aW9uKCc6ZW50ZXInLCBbXG4gICAgICAgIHN0eWxlKHsgb3BhY2l0eTogMCB9KSxcbiAgICAgICAgYW5pbWF0ZSgnMzAwbXMgZWFzZS1pbicsIHN0eWxlKHsgb3BhY2l0eTogMSB9KSksXG4gICAgICBdKSxcbiAgICAgIHRyYW5zaXRpb24oJzpsZWF2ZScsIFthbmltYXRlKCczMDBtcyBlYXNlLW91dCcsIHN0eWxlKHsgb3BhY2l0eTogMCB9KSldKSxcbiAgICBdKSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgQmVhY29uTm90aWZ5Q29tcG9uZW50IHtcbiAgQElucHV0KCkgYmVhY29uITogSUJlYWNvbkNvbmZpZ1xuICBAVmlld0NoaWxkKCdiZWFjb25Db250cm9sJywgeyBzdGF0aWM6IHRydWUgfSkgY3VycmVudEJlYWNvbjogRWxlbWVudFJlZlxuICBwcml2YXRlIGJlYWNvbkRPTSE6IEhUTUxFbGVtZW50XG4gIHB1YmxpYyBiZWFjb25EZWZhdWx0SWNvbktleXMhOiBzdHJpbmdbXVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYmVhY29uU2VydmljZTogQmVhY29uTm90aWZ5U2VydmljZSxcbiAgICBwcml2YXRlIHNhbml0aXplcjogRG9tU2FuaXRpemVyKXtcbiAgICB0aGlzLmJlYWNvbkRlZmF1bHRJY29uS2V5cyA9IHRoaXMuYmVhY29uU2VydmljZS5nZXRCZWFjb25EZWZhdWx0SWNvbktleXNcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIC8vIEZpcmUgbW91bnQgZXZlbnRcbiAgICB0aGlzLmJlYWNvblNlcnZpY2UuYmVhY29uRXZlbnRUYXNrTWFzdGVyLmVtaXQoe1xuICAgICAgbW91bnQ6IHRydWUsXG4gICAgICBpZDogdGhpcy5iZWFjb24uYmlkXG4gICAgfSlcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAvLyBHZXQgYmVhY29uXG4gICAgY29uc3QgYmVhY29uID0gdGhpcy5iZWFjb25ET00gPSB0aGlzLmN1cnJlbnRCZWFjb24ubmF0aXZlRWxlbWVudFxuICAgIC8vIFJlc29sdmUgZm9udCB3ZWlnaHQgZm9yIHRpdGxlIGFuZCBib2R5XG4gICAgdGhpcy5yZXNvbHZlRm9udFdlaWdodEZvckNvbXBvbmVudHMoYmVhY29uKVxuICAgIC8vIFJlc29sdmUgcG9zc2libGUgZm9jdXMgZm9yIGJlYWNvblxuICAgIHRoaXMucmVzb2x2ZVBvc3NpYmxlRm9jdXNGb3JCZWFjb24oYmVhY29uKVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgLy8gUmVzb2x2ZSBkZWxheSBzZXR0aW5nXG4gICAgICB0aGlzLnJlc29sdmVEZWxheUZvckJlYWNvbihiZWFjb24sIHRydWUpXG4gICAgICAvLyBTZXQgYmVhY29uIGxpc3RlbmVyXG4gICAgICB0aGlzLnNldExpc3RlbmVyRm9yQmVhY29uKGJlYWNvbiwgdGhpcy5iZWFjb24pXG5cbiAgICAgIC8vIFNhbml0aXplIHN2ZyBjb250ZW50IGlmIG5vdCBmb250IGljb25cbiAgICAgIGlmICh0aGlzLmJlYWNvbi5zdmdJY29uKSB7XG4gICAgICAgIGNvbnN0IGJlYWNvblN2Z0ljb24gPSBiZWFjb24ucXVlcnlTZWxlY3Rvcignc3Bhbi5iZWFjb24tbWVzc2FnZS1zdmctY29udHJvbCBzdmcnKVxuICAgICAgICBiZWFjb25TdmdJY29uLnN0eWxlLndpZHRoID0gJzIwcHgnXG4gICAgICAgIGJlYWNvblN2Z0ljb24uc3R5bGUuaGVpZ2h0ID0gJzIwcHgnXG4gICAgICAgIGJlYWNvblN2Z0ljb24uc3R5bGUubWFyZ2luUmlnaHQgPSAnN3B4J1xuICAgICAgICBiZWFjb25TdmdJY29uLnN0eWxlLm1hcmdpblRvcCA9ICctMnB4J1xuICAgICAgfVxuICAgIH0sIDApXG5cbiAgICAvLyBMaXN0ZW4gZm9yIGV2ZW50XG4gICAgdGhpcy5iZWFjb25TZXJ2aWNlLmJlYWNvbkV2ZW50VGFza01hc3Rlci5zdWJzY3JpYmUoKG1lc3NhZ2U6IElCZWFjb25FdmVudE1lc3NhZ2UpID0+IHtcbiAgICAgIC8vIENoZWNrIGZvciBuZXh0IGZvciBmb2N1cyBldmVudFxuICAgICAgaWYgKG1lc3NhZ2UuYXV0b0RldGVjdE5leHRGb2N1c0JlYWNvbilcbiAgICAgICAgdGhpcy5yZXNvbHZlUG9zc2libGVGb2N1c0ZvckJlYWNvbih0aGlzLmJlYWNvbkRPTSwgZmFsc2UpXG4gICAgfSlcbiAgfVxuXG4gIC8vIFdoZW4gYmVhY29uIGJ1dHRvbiBpcyBjbGlja2VkXG4gIGJlYWNvbkJ1dHRvbkNsaWNrKGU6IEV2ZW50LCBubzogbnVtYmVyKTogdm9pZCB7XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKVxuICAgIHN3aXRjaCAobm8pIHtcbiAgICAgIGNhc2UgMTpcbiAgICAgICAgLy8gQ2hlY2sgZm9yIGNhbGxiYWNrXG4gICAgICAgIGlmICh0aGlzLmJlYWNvbj8uYnV0dG9ucz8ub25lPy5jYWxsYmFjaylcbiAgICAgICAgICB0aGlzLmJlYWNvbj8uYnV0dG9ucz8ub25lPy5jYWxsYmFjayguLi4odGhpcy5iZWFjb24/LmJ1dHRvbnM/Lm9uZT8uY2FsbGJhY2tBcmdzIHx8IFtdKSlcbiAgICAgICAgXG4gICAgICAgIC8vIENoZWNrIGlmIGNhbiBkaXNtaXNzXG4gICAgICAgIGlmICh0aGlzLmJlYWNvbj8uYnV0dG9ucz8ub25lPy5jYW5EaXNtaXNzKVxuICAgICAgICAgIHRoaXMuY2xvc2VCZWFjb24odGhpcy5iZWFjb25ET00sIHRoaXMuYmVhY29uKVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAyOlxuICAgICAgICAvLyBDaGVjayBmb3IgY2FsbGJhY2tcbiAgICAgICAgaWYgKHRoaXMuYmVhY29uPy5idXR0b25zPy50d28/LmNhbGxiYWNrKVxuICAgICAgICAgIHRoaXMuYmVhY29uPy5idXR0b25zPy50d28/LmNhbGxiYWNrKC4uLih0aGlzLmJlYWNvbj8uYnV0dG9ucz8udHdvPy5jYWxsYmFja0FyZ3MgfHwgW10pKVxuXG4gICAgICAgIC8vIENoZWNrIGlmIGNhbiBkaXNtaXNzXG4gICAgICAgIGlmICh0aGlzLmJlYWNvbj8uYnV0dG9ucz8udHdvPy5jYW5EaXNtaXNzKVxuICAgICAgICAgIHRoaXMuY2xvc2VCZWFjb24odGhpcy5iZWFjb25ET00sIHRoaXMuYmVhY29uKVxuICAgICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIC8vIFNldCBsaXN0ZW5lciBmb3IgYmVhY29uIGNoYW5nZXNcbiAgc2V0TGlzdGVuZXJGb3JCZWFjb24oYmVhY29uOiBFbGVtZW50LCBiZWFjb25EYXRhOiBJQmVhY29uQ29uZmlnKTogdm9pZCB7XG4gICAgKChiLCBkKSA9PiB7XG4gICAgICBiZWFjb24/LmFkZEV2ZW50TGlzdGVuZXIoJ2FuaW1hdGlvbmVuZCcsIChlKSA9PiB0aGlzLmNsb3NlQmVhY29uKGIsIGQpKVxuICAgICAgYmVhY29uPy5hZGRFdmVudExpc3RlbmVyKCd3ZWJraXRBbmltYXRpb25FbmQnLCAoZSkgPT4gdGhpcy5jbG9zZUJlYWNvbihiLCBkKSlcbiAgICAgIGJlYWNvbj8uYWRkRXZlbnRMaXN0ZW5lcignb0FuaW1hdGlvbkVuZCcsIChlKSA9PiB0aGlzLmNsb3NlQmVhY29uKGIsIGQpKVxuICAgIH0pKGJlYWNvbiwgYmVhY29uRGF0YSlcbiAgfVxuXG4gIC8vIFRvZ2dsZSBhdXRvLWNsb3NlXG4gIGF1dG9DbG9zZShzdGF0dXM6IGJvb2xlYW4sIGNvbnRyb2w6IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgc3RhdHVzXG4gICAgICA/IChjb250cm9sLmdldEF0dHJpYnV0ZSgnZGF0YS1iZWFjb24tc3RhdGljJykgIT0gJ3RydWUnICYmIHRoaXMucmVzb2x2ZURlbGF5Rm9yQmVhY29uKGNvbnRyb2wsIGZhbHNlKSlcbiAgICAgIDogY29udHJvbC5jbGFzc0xpc3QucmVtb3ZlKFN0cmluZyh0aGlzLmJlYWNvbi5hbmltYXRpb25DbGFzcykpXG4gIH1cblxuICAvLyBSZXNvbHZlIGRlbGF5IGZvciBiZWFjb25cbiAgcmVzb2x2ZURlbGF5Rm9yQmVhY29uKGJlYWNvbjogSFRNTEVsZW1lbnQsIG9uTG9hZD86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAvLyBDaGVjayBpZiBkZWxheSBzZXRcbiAgICBpZiAodGhpcy5iZWFjb24uc3RhdGljICYmIHR5cGVvZiB0aGlzLmJlYWNvbi5zdGF0aWMgPT0gJ251bWJlcicpIHtcbiAgICAgIGJlYWNvbiAmJiAoYmVhY29uLnN0eWxlLmFuaW1hdGlvbkRlbGF5ID0gdGhpcy5iZWFjb24uc3RhdGljICsgJ3MnKVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAob25Mb2FkID09ICExICYmIHRoaXMuYmVhY29uPy5maXhlZCAhPSB0cnVlKVxuICAgICAgICBiZWFjb24uY2xhc3NMaXN0LmFkZChTdHJpbmcodGhpcy5iZWFjb24uYW5pbWF0aW9uQ2xhc3MpKVxuICAgIH1cbiAgfVxuXG4gIC8vIFJlc29sdmUgZm9udCB3ZWlnaHQgZm9yIHRpdGxlIGFuZCBib2R5XG4gIHJlc29sdmVGb250V2VpZ2h0Rm9yQ29tcG9uZW50cyhiZWFjb246IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgY29uc3QgdGl0bGU6IEhUTUxFbGVtZW50ID0gYmVhY29uLnF1ZXJ5U2VsZWN0b3IoJ2Rpdi5iZWFjb24tbWVzc2FnZS1oZWFkZXInKVxuICAgIGNvbnN0IGJvZHk6IEhUTUxFbGVtZW50ID0gYmVhY29uLnF1ZXJ5U2VsZWN0b3IoJ2Rpdi5iZWFjb24tbWVzc2FnZS1ib2R5JylcbiAgICB0aXRsZSAmJiAodGl0bGUuc3R5bGUuZm9udFdlaWdodCA9IHRoaXMuYmVhY29uLmZvbnRXZWlnaHRUaXRsZSB8fCAnYm9sZCcpXG4gICAgYm9keSAmJiAoYm9keS5zdHlsZS5mb250V2VpZ2h0ID0gdGhpcy5iZWFjb24uZm9udFdlaWdodEJvZHkgfHwgJ2JvbGQnKVxuICB9XG5cbiAgLy8gUmVzb2x2ZSBmb2N1cyBiZWFjb25cbiAgcmVzb2x2ZVBvc3NpYmxlRm9jdXNGb3JCZWFjb24oYmVhY29uOiBIVE1MRWxlbWVudCwgY3JlYXRlT3ZlcmxheTogYm9vbGVhbiA9IHRydWUpOiB2b2lkIHtcbiAgICBjb25zdCBhY3RpdmVGb2N1c0JlYWNvbklkID0gdGhpcy5iZWFjb25TZXJ2aWNlLmdldEFjdGl2ZUZvY3VzQmVhY29uSWRcbiAgICBpZiAoYWN0aXZlRm9jdXNCZWFjb25JZCA9PSB0aGlzLmJlYWNvbi5iaWQpIHtcbiAgICAgIGJlYWNvbi5zdHlsZS56SW5kZXggPSAnOTAwMydcbiAgICAgIFxuICAgICAgLy8gQ2hlY2sgaWYgYmVhY29uIHNob3VsZCBiZSBjZW50ZXJlZFxuICAgICAgaWYgKHRoaXMuYmVhY29uLnNoaW5lKSB7XG4gICAgICAgIGNvbnN0IHNjYWxlID0gdGhpcy5iZWFjb24uc2hpbmVTY2FsZSAmJiBTdHJpbmcodGhpcy5iZWFjb24uc2hpbmVTY2FsZSkubWF0Y2goLyhcXGQrKVxcLihcXGQrKS8pID8gdGhpcy5iZWFjb24uc2hpbmVTY2FsZSA6ICcxLjUnXG4gICAgICAgIGJlYWNvbi5zdHlsZS5wb3NpdGlvbiA9ICdmaXhlZCdcbiAgICAgICAgYmVhY29uLnN0eWxlLnJpZ2h0ID0gJzAnXG4gICAgICAgIGJlYWNvbi5zdHlsZS5sZWZ0ID0gJzAnXG4gICAgICAgIGJlYWNvbi5zdHlsZS5ib3R0b20gPSAnNTAlJ1xuICAgICAgICBiZWFjb24uc3R5bGUubWFyZ2luID0gJ2F1dG8nXG4gICAgICAgIGJlYWNvbi5zdHlsZS50cmFuc2Zvcm0gPSAnc2NhbGUoJyArIHNjYWxlICsgJyknXG4gICAgICB9XG5cbiAgICAgIC8vIENyZWF0ZSBvdmVybGF5XG4gICAgICBpZiAoY3JlYXRlT3ZlcmxheSlcbiAgICAgICAgdGhpcy5iZWFjb25TZXJ2aWNlLmNyZWF0ZUJlYWNvbkZvY3VzT3ZlcmxheSh0aGlzLmJlYWNvbi5vdmVybGF5Q29sb3IpXG4gICAgICBlbHNlIHRoaXMuYmVhY29uU2VydmljZS5yZXBhaW50QmVhY29uRm9jdXNPdmVybGF5KHRoaXMuYmVhY29uLm92ZXJsYXlDb2xvcilcbiAgICB9XG4gIH1cblxuICAvLyBUcmlnZ2VyIGNsb3NlIGJlYWNvblxuICBjbG9zZUJlYWNvbihiZWFjb25Db250cm9sOiBhbnksIGJlYWNvbkRhdGE6IElCZWFjb25Db25maWcpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuYmVhY29uPy5maXhlZCkge1xuICAgICAgdGhpcy5iZWFjb25TZXJ2aWNlLmJlYWNvbkV2ZW50VGFza01hc3Rlci5lbWl0KHtcbiAgICAgICAgZGVsZXRlOiB0cnVlLFxuICAgICAgICBpZDogYmVhY29uQ29udHJvbC5nZXRBdHRyaWJ1dGUoJ2lkJykucmVwbGFjZSgvYmNfLywgJycpXG4gICAgICB9KVxuICAgIH1cbiAgfVxufVxuIiwiPGRpdiAjYmVhY29uQ29udHJvbCBcblx0XHRbaWRdPVwiJ2JjXycgKyBiZWFjb24uYmlkXCJcblx0XHQobW91c2VlbnRlcik9XCJhdXRvQ2xvc2UoZmFsc2UsIGJlYWNvbkNvbnRyb2wpXCIgXG5cdFx0KG1vdXNlbGVhdmUpPVwiYXV0b0Nsb3NlKHRydWUsIGJlYWNvbkNvbnRyb2wpXCJcblx0XHQoY2xpY2spPVwiYmVhY29uLnByZXZlbnRDbGlja0Nsb3NlID8gbnVsbCA6IGNsb3NlQmVhY29uKGJlYWNvbkNvbnRyb2wsIGJlYWNvbilcIlxuXHRcdFthdHRyLmRhdGEtYmVhY29uLXN0YXRpY109XCJiZWFjb24uc3RhdGljXCJcblx0XHRjbGFzcz1cImJlYWNvbi1tZXNzYWdlLWNvbnRyb2wge3sgKGJlYWNvbi5zdGF0aWMgIT09IHRydWUgJiYgYmVhY29uLmZpeGVkICE9PSB0cnVlKSA/IGJlYWNvbi5hbmltYXRpb25DbGFzcyA6ICcnIH19IHt7IGJlYWNvbi5yZXBsYWNlbWVudENsYXNzIHx8IGJlYWNvbi50eXBlIH19IHt7IGJlYWNvbi5zdHlsZUNsYXNzIH19XCJcblx0XHRbY2xhc3MuYmVhY29uLW1lc3NhZ2UtY29udHJvbC1uby1ob3Zlci1lZmZlY3RdPVwiYmVhY29uLm5vSG92ZXJFZmZlY3RcIlxuXHRcdFtAZmFkZUluT3V0XT5cblx0PGRpdiBjbGFzcz1cImJlYWNvbi1tZXNzYWdlLWhlYWRlclwiPlxuXHRcdDxkaXY+XG5cdFx0XHQ8c3BhbiAqbmdJZj1cImJlYWNvbi5mb250SWNvblwiPjxpIFtjbGFzc109XCJiZWFjb24uaWNvblwiPjwvaT48L3NwYW4+XG5cdFx0XHQ8c3BhbiAqbmdJZj1cIiFiZWFjb24uZm9udEljb24gJiYgYmVhY29uRGVmYXVsdEljb25LZXlzLmluY2x1ZGVzKGJlYWNvbi5pY29uKVwiIGNsYXNzPVwiYmVhY29uLW1lc3NhZ2Utc3ZnLWNvbnRyb2xcIj5cblx0XHRcdFx0PGFwcC1iZWFjb24taWNvbi1hbGVydCAqbmdJZj1cImJlYWNvbi5pY29uIHwgYmVhY29uVHlwZVJlc29sdmU6J2FsZXJ0J1wiPjwvYXBwLWJlYWNvbi1pY29uLWFsZXJ0PlxuXHRcdFx0XHQ8YXBwLWJlYWNvbi1pY29uLWVycm9yICpuZ0lmPVwiYmVhY29uLmljb24gfCBiZWFjb25UeXBlUmVzb2x2ZTonZXJyb3InXCI+PC9hcHAtYmVhY29uLWljb24tZXJyb3I+XG5cdFx0XHRcdDxhcHAtYmVhY29uLWljb24taW5mbyAqbmdJZj1cImJlYWNvbi5pY29uIHwgYmVhY29uVHlwZVJlc29sdmU6J2luZm8nXCI+PC9hcHAtYmVhY29uLWljb24taW5mbz5cblx0XHRcdFx0PGFwcC1iZWFjb24taWNvbi1zdWNjZXNzICpuZ0lmPVwiYmVhY29uLmljb24gfCBiZWFjb25UeXBlUmVzb2x2ZTonc3VjY2VzcydcIj48L2FwcC1iZWFjb24taWNvbi1zdWNjZXNzPlxuXHRcdFx0XHQ8YXBwLWJlYWNvbi1pY29uLXdhcm5pbmcgKm5nSWY9XCJiZWFjb24uaWNvbiB8IGJlYWNvblR5cGVSZXNvbHZlOid3YXJuaW5nJ1wiPjwvYXBwLWJlYWNvbi1pY29uLXdhcm5pbmc+XG5cdFx0XHQ8L3NwYW4+XG5cdFx0XHQ8c3BhbiAqbmdJZj1cIiFiZWFjb24uZm9udEljb24gJiYgYmVhY29uLmljb24gJiYgIWJlYWNvbkRlZmF1bHRJY29uS2V5cy5pbmNsdWRlcyhiZWFjb24uaWNvbilcIiBjbGFzcz1cImJlYWNvbi1tZXNzYWdlLXN2Zy1jb250cm9sXCIgW2lubmVySFRNTF09XCJiZWFjb24uc3ZnSWNvblwiPjwvc3Bhbj5cblx0XHRcdDxzcGFuIGNsYXNzPVwiYmVhY29uLW1lc3NhZ2UtdGl0bGVcIj57eyBiZWFjb24udGl0bGUgfX08L3NwYW4+XG5cdFx0PC9kaXY+XG5cdFx0PGRpdj5cblx0XHRcdDxkaXYgKm5nSWY9XCIhYmVhY29uLmZpeGVkXCIgY2xhc3M9XCJiZWFjb24tbWVzc2FnZS1jbG9zZVwiIChjbGljayk9XCJjbG9zZUJlYWNvbihiZWFjb25Db250cm9sLCBiZWFjb24pXCI+XG5cdFx0XHRcdDxzdmcgd2lkdGg9XCIxMFwiIGhlaWdodD1cIjEwXCIgdmlld0JveD1cIjAgMCA3OCA3OFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuXHRcdFx0ICAgIDxyZWN0IHk9XCI3LjA3MTA0XCIgd2lkdGg9XCIxMFwiIGhlaWdodD1cIjEwMFwiIHJ4PVwiNVwiIHRyYW5zZm9ybT1cInJvdGF0ZSgtNDUgMCA3LjA3MTA0KVwiIC8+XG5cdFx0XHQgICAgPHJlY3QgeD1cIjcwLjcxMDlcIiB3aWR0aD1cIjEwXCIgaGVpZ2h0PVwiMTAwXCIgcng9XCI1XCIgdHJhbnNmb3JtPVwicm90YXRlKDQ1IDcwLjcxMDkgMClcIiAvPlxuXHRcdFx0XHQ8L3N2Zz5cblx0XHRcdDwvZGl2PlxuXHRcdDwvZGl2PlxuXHQ8L2Rpdj5cblx0PGRpdiBjbGFzcz1cImJlYWNvbi1tZXNzYWdlLWRpdmlkZXJcIj48L2Rpdj5cblx0PGRpdiBjbGFzcz1cImJlYWNvbi1tZXNzYWdlLWJvZHlcIiBbaW5uZXJIVE1MXT1cImJlYWNvbi5ib2R5SHRtbFwiPjwvZGl2PlxuXHQ8ZGl2IGNsYXNzPVwiYmVhY29uLW1lc3NhZ2UtZGl2aWRlclwiICpuZ0lmPVwiYmVhY29uLmJ1dHRvbnM/Lm9uZSB8fCBiZWFjb24uYnV0dG9ucz8udHdvXCI+PC9kaXY+XG5cblx0PGRpdiBjbGFzcz1cImJlYWNvbi1tZXNzYWdlLWZvb3RlclwiICpuZ0lmPVwiYmVhY29uLmJ1dHRvbnMgJiYgYmVhY29uLmJ1dHRvbnM/Lm9uZSAmJiBiZWFjb24uYnV0dG9ucz8udHdvXCI+XG5cdFx0PGRpdj48YnV0dG9uIChjbGljayk9XCJiZWFjb25CdXR0b25DbGljaygkZXZlbnQsIDEpXCI+e3sgYmVhY29uLmJ1dHRvbnM/Lm9uZT8udGV4dCB9fTwvYnV0dG9uPjwvZGl2PlxuXHRcdDxkaXY+PGJ1dHRvbiAoY2xpY2spPVwiYmVhY29uQnV0dG9uQ2xpY2soJGV2ZW50LCAyKVwiPnt7IGJlYWNvbi5idXR0b25zPy50d28/LnRleHQgfX08L2J1dHRvbj48L2Rpdj5cblx0PC9kaXY+XG5cblx0PGRpdiBjbGFzcz1cImJlYWNvbi1tZXNzYWdlLWZvb3RlclwiICpuZ0lmPVwiYmVhY29uLmJ1dHRvbnMgJiYgYmVhY29uLmJ1dHRvbnM/Lm9uZSAmJiAhYmVhY29uPy5idXR0b25zPy50d29cIj5cblx0XHQ8ZGl2IFtjbGFzc109XCJiZWFjb24uYnV0dG9ucz8ub25lPy5wb3NpdGlvbiA/ICgnYmVhY29uLW1lc3NhZ2UtYnV0dG9uLWNvbnRhaW5lci0nICsgYmVhY29uPy5idXR0b25zPy5vbmU/LnBvc2l0aW9uKSA6ICcnXCI+XG5cdFx0XHQ8YnV0dG9uIChjbGljayk9XCJiZWFjb25CdXR0b25DbGljaygkZXZlbnQsIDEpXCI+e3sgYmVhY29uLmJ1dHRvbnM/Lm9uZT8udGV4dCB9fTwvYnV0dG9uPlxuXHRcdDwvZGl2PlxuXHQ8L2Rpdj5cblxuPC9kaXY+Il19
@@ -1,10 +1,13 @@
1
1
  import { Injectable, Inject, EventEmitter } from '@angular/core';
2
2
  import { BEACON_GLOBAL_CONFIG, BEACON_OVERLAY_COLOR, BEACON_OVERLAY_ID, BEACON_TYPE_KEYS } from './types';
3
3
  import { Buffer } from 'buffer';
4
+ import { isPlatformBrowser } from '@angular/common';
5
+ import { PLATFORM_ID } from '@angular/core';
4
6
  import * as i0 from "@angular/core";
5
7
  import * as i1 from "@angular/platform-browser";
6
8
  export class BeaconNotifyService {
7
9
  sanitizer;
10
+ platformId;
8
11
  globalConfig;
9
12
  beaconDefaultIconKeys = BEACON_TYPE_KEYS;
10
13
  beaconConfigMap = {
@@ -63,8 +66,9 @@ export class BeaconNotifyService {
63
66
  beaconEventTaskMaster = new EventEmitter();
64
67
  beaconLibrary = [];
65
68
  beaconLibraryQueue = [];
66
- constructor(sanitizer, globalConfig) {
69
+ constructor(sanitizer, platformId, globalConfig) {
67
70
  this.sanitizer = sanitizer;
71
+ this.platformId = platformId;
68
72
  this.globalConfig = globalConfig;
69
73
  this.globalConfig && this.resolveGlobalConfig(this.globalConfig);
70
74
  // Resolve events
@@ -446,7 +450,8 @@ export class BeaconNotifyService {
446
450
  // Register beacon in event library
447
451
  this.beaconSubscribedEventLibrary[beaconId] = Object.create({});
448
452
  // Check for duplicate if set to prevent or proceed if turned off
449
- if (this.beaconAllowDuplicate || (([undefined, false].includes(this.beaconGlobalDuplicate) && this.isNewBeaconADuplicate(signature) == !1) || this.beaconGlobalDuplicate)) {
453
+ if (isPlatformBrowser(this.platformId) &&
454
+ (this.beaconAllowDuplicate || (([undefined, false].includes(this.beaconGlobalDuplicate) && this.isNewBeaconADuplicate(signature) == !1) || this.beaconGlobalDuplicate))) {
450
455
  const beaconObject = {
451
456
  bid: beaconId,
452
457
  mid: this.beaconManualId,
@@ -606,7 +611,7 @@ export class BeaconNotifyService {
606
611
  const duplicate = this.beaconLibrary.find(x => x.signature == signature);
607
612
  return Boolean(duplicate);
608
613
  }
609
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: BeaconNotifyService, deps: [{ token: i1.DomSanitizer }, { token: BEACON_GLOBAL_CONFIG }], target: i0.ɵɵFactoryTarget.Injectable });
614
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: BeaconNotifyService, deps: [{ token: i1.DomSanitizer }, { token: PLATFORM_ID }, { token: BEACON_GLOBAL_CONFIG }], target: i0.ɵɵFactoryTarget.Injectable });
610
615
  static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: BeaconNotifyService, providedIn: 'root' });
611
616
  }
612
617
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: BeaconNotifyService, decorators: [{
@@ -615,7 +620,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImpor
615
620
  providedIn: 'root'
616
621
  }]
617
622
  }], ctorParameters: () => [{ type: i1.DomSanitizer }, { type: undefined, decorators: [{
623
+ type: Inject,
624
+ args: [PLATFORM_ID]
625
+ }] }, { type: undefined, decorators: [{
618
626
  type: Inject,
619
627
  args: [BEACON_GLOBAL_CONFIG]
620
628
  }] }] });
621
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmVhY29uLW5vdGlmeS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9iZWFjb24tbm90aWZ5LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQWEsWUFBWSxFQUFjLE1BQU0sZUFBZSxDQUFDO0FBR3hGLE9BQU8sRUFXTCxvQkFBb0IsRUFDcEIsb0JBQW9CLEVBQ3BCLGlCQUFpQixFQUNqQixnQkFBZ0IsRUFDakIsTUFBTSxTQUFTLENBQUM7QUFDakIsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFFBQVEsQ0FBQzs7O0FBS2hDLE1BQU0sT0FBTyxtQkFBbUI7SUEyRFY7SUFDb0I7SUEzRGhDLHFCQUFxQixHQUFHLGdCQUFnQixDQUFBO0lBQ3hDLGVBQWUsR0FBaUQ7UUFDdEUsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxzQkFBc0IsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFO1FBQ3pKLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsc0JBQXNCLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRTtRQUN6SixJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLHFCQUFxQixFQUFF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QUFDLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUMzRSxNQUFNLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQzdFLENBQUM7SUFFRCxvQ0FBb0M7SUFDNUIsdUJBQXVCLENBQUMsTUFBdUI7UUFDckQsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLFFBQVEsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDbEssTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLFFBQVEsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDbEssTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUMs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LEVBQUUsQ0FBQyxDQUFDLEdBQUc7YUFDVixDQUFDLENBQUE7WUFFRixPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDakIsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQsK0JBQStCO0lBQ3ZCLHFCQUFxQixDQUFDLFNBQWlCO1FBQzdDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsSUFBSSxTQUFTLENBQUMsQ0FBQTtRQUN4RSxPQUFPLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQTtJQUMzQixDQUFDO3VHQWxwQlUsbUJBQW1CLDhDQTREcEIsb0JBQW9COzJHQTVEbkIsbUJBQW1CLGNBRmxCLE1BQU07OzJGQUVQLG1CQUFtQjtrQkFIL0IsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7OzBCQTZESSxNQUFNOzJCQUFDLG9CQUFvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIEluamVjdCwgVmlld0NoaWxkLCBFdmVudEVtaXR0ZXIsIEVsZW1lbnRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERvbVNhbml0aXplciwgU2FmZUh0bWwgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IEJlYWNvbk5vdGlmeUNvbXBvbmVudCB9IGZyb20gJy4vYmVhY29uL2JlYWNvbi5jb21wb25lbnQnO1xuaW1wb3J0IHtcbiAgSUJlYWNvbkNvbmZpZyxcbiAgSUJlYWNvbklubGluZUNvbmZpZyxcbiAgSUJlYWNvbkdsb2JhbENvbmZpZyxcbiAgSUJlYWNvblR5cGUsXG4gIElCZWFjb25Qb3NpdGlvbkNvbmZpZyxcbiAgSUJlYWNvbkV2ZW50LFxuICBJQmVhY29uV2F0Y2hlZEV2ZW50LFxuICBJQmVhY29uRXZlbnRNZXNzYWdlLFxuICBJQmVhY29uVHlwZUljb24sXG4gIElCZWFjb25CdXR0b25UeXBlLFxuICBCRUFDT05fR0xPQkFMX0NPTkZJRyxcbiAgQkVBQ09OX09WRVJMQVlfQ09MT1IsXG4gIEJFQUNPTl9PVkVSTEFZX0lELFxuICBCRUFDT05fVFlQRV9LRVlTXG59IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgQnVmZmVyIH0gZnJvbSAnYnVmZmVyJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQmVhY29uTm90aWZ5U2VydmljZSB7XG4gIHByaXZhdGUgYmVhY29uRGVmYXVsdEljb25LZXlzID0gQkVBQ09OX1RZUEVfS0VZU1xuICBwcml2YXRlIGJlYWNvbkNvbmZpZ01hcDogeyBba2V5OiBzdHJpbmddOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9IH0gPSB7XG4gICAgYWxlcnQ6IHsgaWNvbjogdGhpcy5iZWFjb25EZWZhdWx0SWNvbktleXNbMF0sIGZvbnRJY29uOiAnZmFsc2UnLCBjbGFzczogJ2JlYWNvbi1tZXNzYWdlLWFsZXJ0JywgdGl0bGU6ICdBbGVydCcsIHN0eWxlOiAnJywgYW5pbWF0aW9uOiAnJywgdHlwZTogJ2FsZXJ0JyB9LFxuICAgIGVycm9yOiB7IGljb246IHRoaXMuYmVhY29uRGVmYXVsdEljb25LZXlzWzFdLCBmb250SWNvbjogJ2ZhbHNlJywgY2xhc3M6ICdiZWFjb24tbWVzc2FnZS1lcnJvcicsIHRpdGxlOiAnRXJyb3InLCBzdHlsZTogJycsIGFuaW1hdGlvbjogJycsIHR5cGU6ICdlcnJvcicgfSxcbiAgICBpbmZvOiB7IGljb246IHRoaXMuYmVhY29uRGVmYXVsdEljb25LZXlzWzJdLCBmb250SWNvbjogJ2ZhbHNlJywgY2xhc3M6ICdiZWFjb24tbWVzc2FnZS1pbmZvJywgdGl0bGU6ICdJbmZvcm1hdGlvbicsIHN0eWxlOiAnJywgYW5pbWF0aW9uOiAnJywgdHlwZTogJ2luZm8nIH0sXG4gICAgc3VjY2VzczogeyBpY29uOiB0aGlzLmJlYWNvbkRlZmF1bHRJY29uS2V5c1szXSwgZm9udEljb246ICdmYWxzZScsIGNsYXNzOiAnYmVhY29uLW1lc3NhZ2Utc3VjY2VzcycsIHRpdGxlOiAnU3VjY2VzcycsIHN0eWxlOiAnJywgYW5pbWF0aW9uOiAnJywgdHlwZTogJ3N1Y2Nlc3MnIH0sXG4gICAgd2FybmluZzogeyBpY29uOiB0aGlzLmJlYWNvbkRlZmF1bHRJY29uS2V5c1s0XSwgZm9udEljb246ICdmYWxzZScsIGNsYXNzOiAnYmVhY29uLW1lc3NhZ2Utd2FybmluZycsIHRpdGxlOiAnV2FybmluZycsIHN0eWxlOiAnJywgYW5pbWF0aW9uOiAnJywgdHlwZTogJ3dhcm5pbmcnIH1cbiAgfVxuICBwcml2YXRlIGJlYWNvblR5cGVNYXA6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7XG4gICAgYTogJ3N1Y2Nlc3MnLCBiOiAnZXJyb3InLCBjOiAnd2FybmluZycsIGQ6ICdpbmZvJywgZTogJ2FsZXJ0J1xuICB9XG4gIHByaXZhdGUgYmVhY29uVGl0bGU/OiBzdHJpbmdcbiAgcHJpdmF0ZSBiZWFjb25NZXNzYWdlPzogc3RyaW5nXG4gIHByaXZhdGUgYmVhY29uSWNvbj86IHN0cmluZ1xuICBwcml2YXRlIGJlYWNvbk1hbnVhbElkPzogc3RyaW5nXG4gIHByaXZhdGUgYmVhY29uU2VsZWN0ZWRNYW51YWxJZD86IHN0cmluZ1xuICBwcml2YXRlIGJlYWNvbkljb25Gcm9tRm9udD86IHRydWVcbiAgcHJpdmF0ZSBiZWFjb25TdGF0aWM/OiB0cnVlIHwgbnVtYmVyXG4gIHByaXZhdGUgYmVhY29uRml4ZWQ/OiB0cnVlXG4gIHByaXZhdGUgYmVhY29uQmxvY2tPdGhlcnM/OiB0cnVlXG4gIHByaXZhdGUgYmVhY29uUHJldmVudENsaWNrQ2xvc2U/OiB0cnVlXG4gIHByaXZhdGUgYmVhY29uQWxsb3dEdXBsaWNhdGU/OiB0cnVlXG4gIHByaXZhdGUgYmVhY29uRm9jdXM/OiB0cnVlXG4gIHByaXZhdGUgYmVhY29uRm9jdXNTaGluZT86IHRydWVcbiAgcHJpdmF0ZSBiZWFjb25Gb2N1c1NoaW5lU2NhbGU/OiBudW1iZXJcbiAgcHJpdmF0ZSBiZWFjb25PdmVybGF5Q29sb3I/OiBzdHJpbmdcbiAgcHJpdmF0ZSBiZWFjb25TdHlsZUNsYXNzPzogc3RyaW5nXG4gIHByaXZhdGUgYmVhY29uUmVwbGFjZW1lbnRDbGFzcz86IHN0cmluZ1xuICBwcml2YXRlIGJlYWNvbkFuaW1hdGlvbkNsYXNzPzogc3RyaW5nXG4gIHByaXZhdGUgYmVhY29uTm9Ib3ZlckVmZmVjdD86IHRydWVcbiAgcHJpdmF0ZSBiZWFjb25Gb250V2VpZ2h0VGl0bGU/OiBzdHJpbmdcbiAgcHJpdmF0ZSBiZWFjb25Gb250V2VpZ2h0Qm9keT86IHN0cmluZ1xuICBwcml2YXRlIGJlYWNvbkdsb2JhbFN0YXRpYz86IHRydWUgfCBudW1iZXJcbiAgcHJpdmF0ZSBiZWFjb25HbG9iYWxGaXhlZD86IHRydWVcbiAgcHJpdmF0ZSBiZWFjb25HbG9iYWxCbG9ja090aGVycz86IHRydWVcbiAgcHJpdmF0ZSBiZWFjb25HbG9iYWxQcmV2ZW50Q2xpY2tDbG9zZT86IHRydWVcbiAgcHJpdmF0ZSBiZWFjb25HbG9iYWxEdXBsaWNhdGU/OiBib29sZWFuXG4gIHByaXZhdGUgYmVhY29uR2xvYmFsTm9Ib3ZlckVmZmVjdD86IHRydWVcbiAgcHJpdmF0ZSBiZWFjb25HbG9iYWxGb2N1c1NoaW5lU2NhbGU/OiBudW1iZXJcbiAgcHJpdmF0ZSBiZWFjb25HbG9iYWxQb3NpdGlvbmluZz86IElCZWFjb25Qb3NpdGlvbkNvbmZpZ1xuICBwcml2YXRlIGJlYWNvbkdsb2JhbEZvY3VzT3ZlcmxheUNvbG9yPzogc3RyaW5nXG4gIHByaXZhdGUgYmVhY29uR2xvYmFsRm9udFdlaWdodFRpdGxlPzogc3RyaW5nXG4gIHByaXZhdGUgYmVhY29uR2xvYmFsRm9udFdlaWdodEJvZHk/OiBzdHJpbmdcbiAgcHJpdmF0ZSBiZWFjb25Db250YWluZXIhOiBFbGVtZW50UmVmXG4gIHByaXZhdGUgYmVhY29uRGVmYXVsdEFuaW1hdGlvbkNsYXNzTmFtZTogc3RyaW5nID0gJ2JlYWNvbi1tZXNzYWdlLWNvbnRyb2wtYW5pbWF0ZSdcbiAgcHJpdmF0ZSBiZWFjb25TdWNjZXNzb3JCbG9ja2VyQXV0b0lkPzogc3RyaW5nXG4gIHByaXZhdGUgYmVhY29uV2l0aEFjdGl2ZUZvY3VzQXV0b0lkPzogc3RyaW5nXG4gIHByaXZhdGUgYmVhY29uQnV0dG9uczogSUJlYWNvbkJ1dHRvblR5cGUgPSB7fVxuICBwcml2YXRlIGJlYWNvbkZvY3VzT3JkZXJMaWJyYXJ5OiBBcnJheTxzdHJpbmc+ID0gW11cbiAgcHJpdmF0ZSBiZWFjb25TdWJzY3JpYmVkRXZlbnRMaWJyYXJ5OiB7IFtrZXk6IHN0cmluZ106IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIHwgRXZlbnRFbWl0dGVyPElCZWFjb25FdmVudD4gfSB9ID0ge31cbiAgcHJpdmF0ZSBiZWFjb25XYXRjaGVkRXZlbnRMaWJyYXJ5OiBNYXA8c3RyaW5nLCBzdHJpbmc+ID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oW10pXG4gIHByaXZhdGUgYmVhY29uV2F0Y2hlZEV2ZW50VGFza01hc3RlcjogRXZlbnRFbWl0dGVyPElCZWFjb25XYXRjaGVkRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxJQmVhY29uV2F0Y2hlZEV2ZW50PigpXG4gIHByaXZhdGUgYmVhY29uQWxsRXZlbnRUYXNrTWFzdGVyOiBFdmVudEVtaXR0ZXI8SUJlYWNvbldhdGNoZWRFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPElCZWFjb25XYXRjaGVkRXZlbnQ+KClcbiAgcHJpdmF0ZSBiZWFjb25Gb2N1c092ZXJsYXlET00/OiBIVE1MRWxlbWVudFxuICBwdWJsaWMgYmVhY29uRXZlbnRUYXNrTWFzdGVyOiBFdmVudEVtaXR0ZXI8eyBba2V5OiBzdHJpbmddOiBib29sZWFufCBzdHJpbmcgfT4gPSBuZXcgRXZlbnRFbWl0dGVyPHsgW2tleTogc3RyaW5nXTogYm9vbGVhbiB8IHN0cmluZyB9PigpXG4gIHB1YmxpYyBiZWFjb25MaWJyYXJ5OiBBcnJheTxJQmVhY29uQ29uZmlnPiA9IFtdXG4gIHB1YmxpYyBiZWFjb25MaWJyYXJ5UXVldWU6IEFycmF5PElCZWFjb25Db25maWc+ID0gW11cbiAgXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsXG4gICAgQEluamVjdChCRUFDT05fR0xPQkFMX0NPTkZJRykgcHJpdmF0ZSBnbG9iYWxDb25maWc/OiBJQmVhY29uR2xvYmFsQ29uZmlnKSB7XG4gICAgdGhpcy5nbG9iYWxDb25maWcgJiYgdGhpcy5yZXNvbHZlR2xvYmFsQ29uZmlnKHRoaXMuZ2xvYmFsQ29uZmlnKVxuICAgIC8vIFJlc29sdmUgZXZlbnRzXG4gICAgdGhpcy5yZXNvbHZlQmVhY29uRXZlbnRzKClcbiAgfVxuXG4gIC8vIFJlc29sdmUgZ2xvYmFsIGNvbmZpZ1xuICBwcml2YXRlIHJlc29sdmVHbG9iYWxDb25maWcoZ2xvYmFsQ29uZmlnOiBJQmVhY29uR2xvYmFsQ29uZmlnKTogdm9pZCB7XG4gICAgaWYgKGdsb2JhbENvbmZpZy5zdGF0aWMpIHtcbiAgICAgIGlmICh0eXBlb2YgZ2xvYmFsQ29uZmlnLnN0YXRpYyA9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgdGhpcy5iZWFjb25HbG9iYWxGaXhlZCA9IHVuZGVmaW5lZFxuICAgICAgICB0aGlzLmJlYWNvbkdsb2JhbFN0YXRpYyA9IHRydWVcbiAgICAgIH0gZWxzZSB0aGlzLmJlYWNvbkdsb2JhbFN0YXRpYyA9IGdsb2JhbENvbmZpZy5zdGF0aWNcbiAgICB9XG5cbiAgICBpZiAoZ2xvYmFsQ29uZmlnLmZpeGVkKSB7XG4gICAgICB0aGlzLmJlYWNvbkdsb2JhbFN0YXRpYyA9IHVuZGVmaW5lZFxuICAgICAgdGhpcy5iZWFjb25HbG9iYWxGaXhlZCA9IHRydWVcbiAgICB9XG5cbiAgICBnbG9iYWxDb25maWcucHJldmVudENsaWNrQ2xvc2UgJiYgKHRoaXMuYmVhY29uR2xvYmFsUHJldmVudENsaWNrQ2xvc2UgPSBnbG9iYWxDb25maWcucHJldmVudENsaWNrQ2xvc2UpXG4gICAgZ2xvYmFsQ29uZmlnLmJsb2NrT3RoZXJzICYmICh0aGlzLmJlYWNvbkdsb2JhbEJsb2NrT3RoZXJzID0gZ2xvYmFsQ29uZmlnLmJsb2NrT3RoZXJzKVxuICAgIGdsb2JhbENvbmZpZy5vdmVybGF5Q29sb3IgJiYgKHRoaXMuYmVhY29uR2xvYmFsRm9jdXNPdmVybGF5Q29sb3IgPSBnbG9iYWxDb25maWcub3ZlcmxheUNvbG9yKVxuICAgIGdsb2JhbENvbmZpZy5kdXBsaWNhdGUgJiYgKHRoaXMuYmVhY29uR2xvYmFsRHVwbGljYXRlID0gZ2xvYmFsQ29uZmlnLmR1cGxpY2F0ZSlcbiAgICBnbG9iYWxDb25maWcuaWNvbiAmJiB0aGlzLnJlc29sdmVHbG9iYWxJY29uQ29uZmlnKGdsb2JhbENvbmZpZy5pY29uKVxuICAgIGdsb2JhbENvbmZpZy5zdHlsZUNsYXNzICYmIHRoaXMucmVzb2x2ZUdsb2JhbFByb3BlcnR5Q29uZmlnKGdsb2JhbENvbmZpZy5zdHlsZUNsYXNzLCAnc3R5bGUnKVxuICAgIGdsb2JhbENvbmZpZy5yZXBsYWNlbWVudENsYXNzICYmIHRoaXMucmVzb2x2ZUdsb2JhbFByb3BlcnR5Q29uZmlnKGdsb2JhbENvbmZpZy5yZXBsYWNlbWVudENsYXNzLCAnY2xhc3MnKVxuICAgIGdsb2JhbENvbmZpZy5hbmltYXRpb25DbGFzcyAmJiB0aGlzLnJlc29sdmVHbG9iYWxQcm9wZXJ0eUNvbmZpZyhnbG9iYWxDb25maWcuYW5pbWF0aW9uQ2xhc3MsICdhbmltYXRpb24nKVxuICAgIGdsb2JhbENvbmZpZy5wb3NpdGlvbiAmJiAodGhpcy5iZWFjb25HbG9iYWxQb3NpdGlvbmluZyA9IGdsb2JhbENvbmZpZy5wb3NpdGlvbilcbiAgICBnbG9iYWxDb25maWcubm9Ib3ZlckVmZmVjdCAmJiAodGhpcy5iZWFjb25HbG9iYWxOb0hvdmVyRWZmZWN0ID0gZ2xvYmFsQ29uZmlnLm5vSG92ZXJFZmZlY3QpXG4gICAgZ2xvYmFsQ29uZmlnLnNoaW5lU2NhbGUgJiYgKHRoaXMuYmVhY29uR2xvYmFsRm9jdXNTaGluZVNjYWxlID0gZ2xvYmFsQ29uZmlnLnNoaW5lU2NhbGUpXG4gICAgZ2xvYmFsQ29uZmlnLmZvbnRXZWlnaHRUaXRsZSAmJiAodGhpcy5iZWFjb25HbG9iYWxGb250V2VpZ2h0VGl0bGUgPSBnbG9iYWxDb25maWcuZm9udFdlaWdodFRpdGxlKVxuICAgIGdsb2JhbENvbmZpZy5mb250V2VpZ2h0Qm9keSAmJiAodGhpcy5iZWFjb25HbG9iYWxGb250V2VpZ2h0Qm9keSA9IGdsb2JhbENvbmZpZy5mb250V2VpZ2h0Qm9keSlcbiAgfVxuXG4gIC8vIFJlc29sdmUgZ2xvYmFsIGNvbmZpZyAvIGZvciBwcm9wZXJ0eVxuICBwcml2YXRlIHJlc29sdmVHbG9iYWxQcm9wZXJ0eUNvbmZpZyhjb25maWc6IElCZWFjb25UeXBlLCBwcm9wZXJ0eTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uZmlnLmFsZXJ0ICYmICh0aGlzLmJlYWNvbkNvbmZpZ01hcC5hbGVydFtwcm9wZXJ0eV0gPSBjb25maWcuYWxlcnQpXG4gICAgY29uZmlnLmVycm9yICYmICh0aGlzLmJlYWNvbkNvbmZpZ01hcC5lcnJvcltwcm9wZXJ0eV0gPSBjb25maWcuZXJyb3IpXG4gICAgY29uZmlnLmluZm8gJiYgKHRoaXMuYmVhY29uQ29uZmlnTWFwLmluZm9bcHJvcGVydHldID0gY29uZmlnLmluZm8pXG4gICAgY29uZmlnLnN1Y2Nlc3MgJiYgKHRoaXMuYmVhY29uQ29uZmlnTWFwLnN1Y2Nlc3NbcHJvcGVydHldID0gY29uZmlnLnN1Y2Nlc3MpXG4gICAgY29uZmlnLndhcm5pbmcgJiYgKHRoaXMuYmVhY29uQ29uZmlnTWFwLndhcm5pbmdbcHJvcGVydHldID0gY29uZmlnLndhcm5pbmcpXG4gIH1cblxuICAvLyBSZXNvbHZlIGdsb2JhbCBjb25maWcgLyBmb3IgaWNvbnNcbiAgcHJpdmF0ZSByZXNvbHZlR2xvYmFsSWNvbkNvbmZpZyhjb25maWc6IElCZWFjb25UeXBlSWNvbik6IHZvaWQge1xuICAgIGNvbmZpZz8uYWxlcnQ/Lmljb24gJiYgKHRoaXMuYmVhY29uQ29uZmlnTWFwLmFsZXJ0Lmljb24gPSBjb25maWcuYWxlcnQuaWNvbikgJiYgKHRoaXMuYmVhY29uQ29uZmlnTWFwLmFsZXJ0LmZvbnRJY29uID0gU3RyaW5nKChjb25maWc/LmFsZXJ0Py5mb250SWNvbiB8fCBmYWxzZSkpKVxuICAgIGNvbmZpZz8uZXJyb3I/Lmljb24gJiYgKHRoaXMuYmVhY29uQ29uZmlnTWFwLmVycm9yLmljb24gPSBjb25maWcuZXJyb3IuaWNvbikgJiYgKHRoaXMuYmVhY29uQ29uZmlnTWFwLmVycm9yLmZvbnRJY29uID0gU3RyaW5nKChjb25maWc/LmVycm9yPy5mb250SWNvbiB8fCBmYWxzZSkpKVxuICAgIGNvbmZpZz8uaW5mbz8uaWNvbiAmJiAodGhpcy5iZWFjb25Db25maWdNYXAuaW5mby5pY29uID0gY29uZmlnLmluZm8uaWNvbikgJiYgKHRoaXMuYmVhY29uQ29uZmlnTWFwLmluZm8uZm9udEljb24gPSBTdHJpbmcoKGNvbmZpZy5pbmZvLmZvbnRJY29uIHx8IGZhbHNlKSkpXG4gICAgY29uZmlnPy5zdWNjZXNzPy5pY29uICYmICh0aGlzLmJlYWNvbkNvbmZpZ01hcC5zdWNjZXNzLmljb24gPSBjb25maWcuc3VjY2Vzcy5pY29uKSAmJiAodGhpcy5iZWFjb25Db25maWdNYXAuc3VjY2Vzcy5mb250SWNvbiA9IFN0cmluZygoY29uZmlnLnN1Y2Nlc3MuZm9udEljb24gfHwgZmFsc2UpKSlcbiAgICBjb25maWc/Lndhcm5pbmc/Lmljb24gJiYgKHRoaXMuYmVhY29uQ29uZmlnTWFwLndhcm5pbmcuaWNvbiA9IGNvbmZpZy53YXJuaW5nLmljb24pICYmICh0aGlzLmJlYWNvbkNvbmZpZ01hcC53YXJuaW5nLmZvbnRJY29uID0gU3RyaW5nKChjb25maWcud2FybmluZy5mb250SWNvbiB8fCBmYWxzZSkpKVxuICB9XG5cbiAgLy8gUmVzb2x2ZSBiZWFjb24gZXZlbnRzXG4gIHByaXZhdGUgcmVzb2x2ZUJlYWNvbkV2ZW50cygpOiB2b2lkIHtcbiAgICB0aGlzLmJlYWNvbkV2ZW50VGFza01hc3Rlci5zdWJzY3JpYmUoKG1lc3NhZ2U6IElCZWFjb25FdmVudE1lc3NhZ2UpID0+IHtcbiAgICAgIGNvbnN0IGlkID0gU3RyaW5nKG1lc3NhZ2UuaWQpXG4gICAgICBpZiAobWVzc2FnZS5kZWxldGUpIHtcbiAgICAgICAgdGhpcy5yZXNvbHZlUG9zc2libGVCbG9ja2VkQmVhY29ucyhpZClcbiAgICAgICAgdGhpcy5yZXNvbHZlUG9zc2libGVRdWV1ZWRGb2N1cyhpZClcbiAgICAgICAgdGhpcy5wZXJmb3JtRXZlbnRUYXNrKGlkLCB7IG9uOiBmYWxzZSwgb2ZmOiB0cnVlIH0pXG4gICAgICAgIGRlbGV0ZSB0aGlzLmJlYWNvblN1YnNjcmliZWRFdmVudExpYnJhcnlbaWRdXG4gICAgICB9IGVsc2UgaWYgKG1lc3NhZ2UubW91bnQpIHtcbiAgICAgICAgdGhpcy5wZXJmb3JtRXZlbnRUYXNrKGlkLCB7IG9uOiB0cnVlLCBvZmY6IGZhbHNlIH0pXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIC8vIFBlcmZvcm0gZXZlbnQgdGFza1xuICBwcml2YXRlIHBlcmZvcm1FdmVudFRhc2soaWQ6IHN0cmluZywgZXZlbnRPYmplY3Q6IElCZWFjb25FdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IHN0YW1wID0gdGhpcy5iZWFjb25TdWJzY3JpYmVkRXZlbnRMaWJyYXJ5W2lkXVxuICAgIGNvbnN0IGV2ZW50ID0gPEV2ZW50RW1pdHRlcjxJQmVhY29uRXZlbnQ+PnN0YW1wLmV2ZW50XG4gICAgY29uc3QgbWFudWFsSWQgPSBzdGFtcD8ubWFudWFsSWQ/LnRvU3RyaW5nKCkucmVwbGFjZSgvdW5kZWZpbmVkLywgJycpXG4gICAgZXZlbnQuZW1pdChldmVudE9iamVjdClcbiAgICB0aGlzLmJlYWNvbkFsbEV2ZW50VGFza01hc3Rlci5lbWl0KHsgaWQ6IG1hbnVhbElkIHx8IG51bGwsIHR5cGU6IFN0cmluZyhzdGFtcC50eXBlKSwgLi4uZXZlbnRPYmplY3QgfSlcblxuICAgIC8vIENoZWNrIGlmIHRoaXMgbWFudWFsIGlkIGlzIHdhdGNoZWRcbiAgICBpZiAobWFudWFsSWQgJiYgdGhpcy5iZWFjb25XYXRjaGVkRXZlbnRMaWJyYXJ5LmhhcyhtYW51YWxJZCkpIHtcbiAgICAgIHRoaXMuYmVhY29uV2F0Y2hlZEV2ZW50VGFza01hc3Rlci5lbWl0KHsgaWQ6IG1hbnVhbElkLCB0eXBlOiBTdHJpbmcoc3RhbXAudHlwZSksIC4uLmV2ZW50T2JqZWN0IH0pXG4gICAgICAvLyBDaGVjayBpZiBiZWFjb24gaXMgb2ZmXG4gICAgICBpZiAoZXZlbnRPYmplY3Qub2ZmKSBcbiAgICAgICAgdGhpcy5iZWFjb25XYXRjaGVkRXZlbnRMaWJyYXJ5LmRlbGV0ZShtYW51YWxJZClcbiAgICB9XG4gIH1cblxuICAvLyBSZXNvbHZlIHBvc3NpYmxlIGJsb2NrZWQgYmVhY29uc1xuICBwcml2YXRlIHJlc29sdmVQb3NzaWJsZUJsb2NrZWRCZWFjb25zKGlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAvLyBDaGVjayBpZiB0aGlzIGlkIGlzIGJsb2NraW5nIG90aGVyc1xuICAgIGlmIChpZCA9PSB0aGlzLmJlYWNvblN1Y2Nlc3NvckJsb2NrZXJBdXRvSWQpIHtcbiAgICAgIGlmICh0aGlzLmJlYWNvbkxpYnJhcnlRdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgcXVldWVMZW5ndGggPSB0aGlzLmJlYWNvbkxpYnJhcnlRdWV1ZS5sZW5ndGhcbiAgICAgICAgLy8gTG9vcCB0aHJvdWdoIHF1ZXVlXG4gICAgICAgIGZvciAobGV0IHggPSAwOyB4IDwgcXVldWVMZW5ndGg7IHgrKykge1xuICAgICAgICAgIGNvbnN0IG5leHRJbkxpbmUgPSA8SUJlYWNvbkNvbmZpZz50aGlzLmJlYWNvbkxpYnJhcnlRdWV1ZS5zaGlmdCgpXG5cbiAgICAgICAgICAvLyBBZGQgbWVzc2FnZSB0byBsaWJyYXJ5XG4gICAgICAgICAgaWYgKHRoaXMuZ2V0QmVhY29uR2xvYmFsUG9zaXRpb25Db25maWc/LnRvcEJvdHRvbSA9PSAndG9wJylcbiAgICAgICAgICAgIHRoaXMuYmVhY29uTGlicmFyeS51bnNoaWZ0KG5leHRJbkxpbmUpXG4gICAgICAgICAgZWxzZSB0aGlzLmJlYWNvbkxpYnJhcnkucHVzaChuZXh0SW5MaW5lKSAgICBcblxuICAgICAgICAgIC8vIENoZWNrIGlmIHNldCB0byBibG9ja1xuICAgICAgICAgIGlmIChuZXh0SW5MaW5lLmJsb2NrT3RoZXJzKSB7XG4gICAgICAgICAgICB0aGlzLmJlYWNvblN1Y2Nlc3NvckJsb2NrZXJBdXRvSWQgPSBuZXh0SW5MaW5lLmJpZFxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDaGVjayBpZiBubyBuZXcgYmVhY29uIGlzIHNldCBhcyBibG9ja2VyIGFuZCB1bnNldCBwcmV2aW91cyB2YWx1ZVxuICAgICAgICBpZiAoaWQgPT0gdGhpcy5iZWFjb25TdWNjZXNzb3JCbG9ja2VyQXV0b0lkKSBcbiAgICAgICAgICB0aGlzLmJlYWNvblN1Y2Nlc3NvckJsb2NrZXJBdXRvSWQgPSB1bmRlZmluZWRcbiAgICAgIH1cbiAgICAgIGVsc2UgdGhpcy5iZWFjb25TdWNjZXNzb3JCbG9ja2VyQXV0b0lkID0gdW5kZWZpbmVkXG4gICAgfVxuICB9XG5cbiAgLy8gUmVzb2x2ZSBxdWV1ZWQgYmVhY29uIGZvY3VzXG4gIHByaXZhdGUgcmVzb2x2ZVBvc3NpYmxlUXVldWVkRm9jdXMoaWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIC8vIENoZWNrIGlmIHRoaXMgaWQgaXMgYWN0aXZlIGZvY3VzIGJlYWNvblxuICAgIGlmIChpZCA9PSB0aGlzLmJlYWNvbldpdGhBY3RpdmVGb2N1c0F1dG9JZCkge1xuICAgICAgaWYgKHRoaXMuYmVhY29uRm9jdXNPcmRlckxpYnJhcnkubGVuZ3RoKSB7XG4gICAgICAgIC8vIFBhc3MgdGhlIG5leHQgZm9jdXNcbiAgICAgICAgdGhpcy5iZWFjb25XaXRoQWN0aXZlRm9jdXNBdXRvSWQgPSB0aGlzLmJlYWNvbkZvY3VzT3JkZXJMaWJyYXJ5LnNoaWZ0KClcbiAgICAgICAgdGhpcy5iZWFjb25FdmVudFRhc2tNYXN0ZXIuZW1pdCh7IGF1dG9EZXRlY3ROZXh0Rm9jdXNCZWFjb246IHRydWUgfSlcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICB0aGlzLmJlYWNvbldpdGhBY3RpdmVGb2N1c0F1dG9JZCA9IHVuZGVmaW5lZFxuICAgICAgICB0aGlzLmRlc3Ryb3lCZWFjb25Gb2N1c092ZXJsYXkoKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIEdlbmVyYXRlIHVuaXF1ZSBpZCBmb3IgaXRlbVxuICBwcml2YXRlIGdldCBnZXRJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKG5ldyBVaW50MzJBcnJheSgyKSkudG9TdHJpbmcoKS5zcGxpdCgnLCcpLmpvaW4oJycpXG4gIH1cblxuICAvLyBTZXQgYmVhY29uIGNvbnRhaW5lclxuICBwdWJsaWMgc2V0QmVhY29uQ29udGFpbmVyKGNvbnRhaW5lcjogRWxlbWVudFJlZik6IHZvaWQge1xuICAgIHRoaXMuYmVhY29uQ29udGFpbmVyID0gY29udGFpbmVyXG4gIH1cblxuICAvLyBHZXQgYmVhY29uIGNvbnRhaW5lclxuICBwdWJsaWMgZ2V0IGdldEJlYWNvbkNvbnRhaW5lcigpOiBFbGVtZW50UmVmIHtcbiAgICByZXR1cm4gdGhpcy5iZWFjb25Db250YWluZXJcbiAgfVxuXG4gIC8vIEdldCBiZWFjb24gZ2xvYmFsIHBvc2l0aW9uIGNvbmZpZ1xuICBwdWJsaWMgZ2V0IGdldEJlYWNvbkdsb2JhbFBvc2l0aW9uQ29uZmlnKCk6IElCZWFjb25Qb3NpdGlvbkNvbmZpZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuYmVhY29uR2xvYmFsUG9zaXRpb25pbmdcbiAgfVxuXG4gIC8vIEdldCBkZWZhdWx0IGljb24ga2V5c1xuICBwdWJsaWMgZ2V0IGdldEJlYWNvbkRlZmF1bHRJY29uS2V5cygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuYmVhY29uRGVmYXVsdEljb25LZXlzXG4gIH1cblxuICAvLyBHZXQgYWN0aXZlIGZvY3VzIGJlYWNvbiBpZFxuICBwdWJsaWMgZ2V0IGdldEFjdGl2ZUZvY3VzQmVhY29uSWQoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5iZWFjb25XaXRoQWN0aXZlRm9jdXNBdXRvSWRcbiAgfVxuXG4gIC8vIENyZWF0ZSBvdmVybGF5IGZvciBmb2N1c2VkIGJlYWNvblxuICBwdWJsaWMgY3JlYXRlQmVhY29uRm9jdXNPdmVybGF5KG92ZXJsYXlDb2xvcj86IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IG92ZXJsYXkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKVxuICAgIG92ZXJsYXkuc2V0QXR0cmlidXRlKCdpZCcsIEJFQUNPTl9PVkVSTEFZX0lEKVxuICAgIG92ZXJsYXkuc3R5bGUucG9zaXRpb24gPSAnZml4ZWQnXG4gICAgb3ZlcmxheS5zdHlsZS50b3AgPSAnMCdcbiAgICBvdmVybGF5LnN0eWxlLmJvdHRvbSA9ICcwJ1xuICAgIG92ZXJsYXkuc3R5bGUucmlnaHQgPSAnMCdcbiAgICBvdmVybGF5LnN0eWxlLmxlZnQgPSAnMCdcbiAgICBvdmVybGF5LnN0eWxlLnpJbmRleCA9ICc5MDAyJ1xuICAgIG92ZXJsYXkuc3R5bGUuYmFja2dyb3VuZCA9IG92ZXJsYXlDb2xvciB8fCB0aGlzLmJlYWNvbkdsb2JhbEZvY3VzT3ZlcmxheUNvbG9yIHx8IEJFQUNPTl9PVkVSTEFZX0NPTE9SXG4gICAgZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdyA9ICdoaWRkZW4nXG5cbiAgICAvLyBQYXNzIG92ZXJsYXkgZWxlbWVudFxuICAgIHRoaXMuYmVhY29uRm9jdXNPdmVybGF5RE9NID0gb3ZlcmxheVxuXG4gICAgdGhpcy5iZWFjb25Db250YWluZXIubmF0aXZlRWxlbWVudC5hcHBlbmRDaGlsZChvdmVybGF5KVxuICB9XG5cbiAgLy8gUmVwYWludCBvdmVybGF5IGZvciBmb2N1c2VkIGJlYWNvblxuICBwdWJsaWMgcmVwYWludEJlYWNvbkZvY3VzT3ZlcmxheShvdmVybGF5Q29sb3I/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5iZWFjb25Gb2N1c092ZXJsYXlET00pXG4gICAgICB0aGlzLmJlYWNvbkZvY3VzT3ZlcmxheURPTS5zdHlsZS5iYWNrZ3JvdW5kID0gb3ZlcmxheUNvbG9yIHx8IHRoaXMuYmVhY29uR2xvYmFsRm9jdXNPdmVybGF5Q29sb3IgfHwgQkVBQ09OX09WRVJMQVlfQ09MT1JcbiAgfVxuXG4gIC8vIERlc3Ryb3kgb3ZlcmxheSBmb3IgZm9jdXNlZCBiZWFjb25cbiAgcHVibGljIGRlc3Ryb3lCZWFjb25Gb2N1c092ZXJsYXkoKTogdm9pZCB7XG4gICAgZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdyA9ICdhdXRvJ1xuICAgIHRoaXMuYmVhY29uQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignZGl2IycgKyBCRUFDT05fT1ZFUkxBWV9JRCkucmVtb3ZlKClcbiAgICB0aGlzLmJlYWNvbkZvY3VzT3ZlcmxheURPTSA9IHVuZGVmaW5lZFxuICB9XG5cbiAgLy8gU2V0IGlkIGZvciBiZWFjb25cbiAgcHVibGljIGlkKGlkOiBzdHJpbmcpOiBCZWFjb25Ob3RpZnlTZXJ2aWNlIHtcbiAgICBpZCAmJiAodGhpcy5iZWFjb25NYW51YWxJZCA9IGlkKVxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvLyBTZXQgbm90aWZpY2F0aW9uIHRpdGxlXG4gIHB1YmxpYyB0aXRsZSh0aXRsZTogc3RyaW5nKTogQmVhY29uTm90aWZ5U2VydmljZSB7XG4gICAgdGl0bGUgJiYgKHRoaXMuYmVhY29uVGl0bGUgPSB0aXRsZSlcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLy8gU2V0IG5vdGlmaWNhdGlvbiBtZXNzYWdlXG4gIHB1YmxpYyBtZXNzYWdlKG1lc3NhZ2U6IHN0cmluZyk6IEJlYWNvbk5vdGlmeVNlcnZpY2Uge1xuICAgIG1lc3NhZ2UgJiYgKHRoaXMuYmVhY29uTWVzc2FnZSA9IG1lc3NhZ2UpXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8vIEhpZ2hsaWdodCBpZCBvZiBiZWFjb24gdG8gdXBkYXRlXG4gIHB1YmxpYyBzZWxlY3QoaWQ6IHN0cmluZyk6IEJlYWNvbk5vdGlmeVNlcnZpY2Uge1xuICAgIGlkICYmICh0aGlzLmJlYWNvblNlbGVjdGVkTWFudWFsSWQgPSBpZClcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLy8gQ2hhbmdlIG5vdGlmaWNhdGlvbiB0aXRsZVxuICBwdWJsaWMgc2V0VGl0bGUodGl0bGU6IHN0cmluZyk6IHZvaWQge1xuICAgIC8vIENoZWNrIGZvciBhY3RpdmUgbWFudWFsIGlkIC8gYW5kIGlmIGEgYmVhY29uIGlzIHRpZWQgdG8gaXRcbiAgICBpZiAodGhpcy5iZWFjb25TZWxlY3RlZE1hbnVhbElkKSB7XG4gICAgICBjb25zdCBiZWFjb25JbmRleCA9IHRoaXMuYmVhY29uTGlicmFyeS5maW5kSW5kZXgoeCA9PiB4Lm1pZCA9PSB0aGlzLmJlYWNvblNlbGVjdGVkTWFudWFsSWQpXG4gICAgICBpZiAoYmVhY29uSW5kZXggPj0gMClcbiAgICAgICAgdGhpcy5iZWFjb25MaWJyYXJ5W2JlYWNvbkluZGV4XS50aXRsZSA9IHRpdGxlXG4gICAgfVxuICB9XG5cbiAgLy8gQ2hhbmdlIG5vdGlmaWNhdGlvbiBtZXNzYWdlXG4gIHB1YmxpYyBzZXRNZXNzYWdlKG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xuICAgIC8vIENoZWNrIGZvciBhY3RpdmUgbWFudWFsIGlkIC8gYW5kIGlmIGEgYmVhY29uIGlzIHRpZWQgdG8gaXRcbiAgICBpZiAodGhpcy5iZWFjb25TZWxlY3RlZE1hbnVhbElkKSB7XG4gICAgICBjb25zdCBiZWFjb25JbmRleCA9IHRoaXMuYmVhY29uTGlicmFyeS5maW5kSW5kZXgoeCA9PiB4Lm1pZCA9PSB0aGlzLmJlYWNvblNlbGVjdGVkTWFudWFsSWQpXG4gICAgICBpZiAoYmVhY29uSW5kZXggPj0gMClcbiAgICAgICAgdGhpcy5iZWFjb25MaWJyYXJ5W2JlYWNvbkluZGV4XS5ib2R5ID0gbWVzc2FnZVxuICAgIH1cbiAgfVxuXG4gIC8vIENoYW5nZSBub3RpZmljYXRpb24gdGl0bGUgJiBtZXNzYWdlXG4gIHB1YmxpYyBzZXRDb250ZW50KHRpdGxlOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xuICAgIC8vIENoZWNrIGZvciBhY3RpdmUgbWFudWFsIGlkIC8gYW5kIGlmIGEgYmVhY29uIGlzIHRpZWQgdG8gaXRcbiAgICBpZiAodGhpcy5iZWFjb25TZWxlY3RlZE1hbnVhbElkKSB7XG4gICAgICBjb25zdCBiZWFjb25JbmRleCA9IHRoaXMuYmVhY29uTGlicmFyeS5maW5kSW5kZXgoeCA9PiB4Lm1pZCA9PSB0aGlzLmJlYWNvblNlbGVjdGVkTWFudWFsSWQpXG4gICAgICBpZiAoYmVhY29uSW5kZXggPj0gMClcbiAgICAgICAgdGhpcy5iZWFjb25MaWJyYXJ5W2JlYWNvbkluZGV4XS50aXRsZSA9IHRpdGxlXG4gICAgICAgIHRoaXMuYmVhY29uTGlicmFyeVtiZWFjb25JbmRleF0uYm9keSA9IG1lc3NhZ2VcbiAgICB9XG4gIH1cblxuICAvLyBVcGRhdGUgYmVhY29uIGJ1dHRvbiAxXG4gIHB1YmxpYyBzZXRCdXR0b25PbmUodGV4dDogc3RyaW5nLCBjYW5EaXNtaXNzPzogYm9vbGVhbiB8IG51bGwsIGNhbGxiYWNrPzogYW55LCBjYWxsYmFja0FyZ3M/OiBhbnlbXSB8IG51bGwsIHBvc2l0aW9uPzogJ2xlZnQnIHwgJ2NlbnRlcicgfCAncmlnaHQnKTogdm9pZCB7XG4gICAgLy8gQ2hlY2sgZm9yIGFjdGl2ZSBtYW51YWwgaWQgLyBhbmQgaWYgYSBiZWFjb24gaXMgdGllZCB0byBpdFxuICAgIGlmICh0aGlzLmJlYWNvblNlbGVjdGVkTWFudWFsSWQpIHtcbiAgICAgIGNvbnN0IGJlYWNvbkluZGV4ID0gdGhpcy5iZWFjb25MaWJyYXJ5LmZpbmRJbmRleCh4ID0+IHgubWlkID09IHRoaXMuYmVhY29uU2VsZWN0ZWRNYW51YWxJZClcbiAgICAgIGlmIChiZWFjb25JbmRleCA+PSAwKSB7XG4gICAgICAgICg8SUJlYWNvbkJ1dHRvblR5cGU+dGhpcy5iZWFjb25MaWJyYXJ5W2JlYWNvbkluZGV4XS5idXR0b25zKS5vbmUgPSB7XG4gICAgICAgICAgdGV4dDogdGV4dC5zdWJzdHJpbmcoMCwgMTUpLFxuICAgICAgICAgIGNhbkRpc21pc3MsXG4gICAgICAgICAgY2FsbGJhY2ssXG4gICAgICAgICAgY2FsbGJhY2tBcmdzLFxuICAgICAgICAgIHBvc2l0aW9uXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBVcGRhdGUgYmVhY29uIGJ1dHRvbiAyXG4gIHB1YmxpYyBzZXRCdXR0b25Ud28odGV4dDogc3RyaW5nLCBjYW5EaXNtaXNzPzogYm9vbGVhbiB8IG51bGwsIGNhbGxiYWNrPzogYW55LCBjYWxsYmFja0FyZ3M/OiBhbnlbXSB8IG51bGwsIHBvc2l0aW9uPzogJ2xlZnQnIHwgJ2NlbnRlcicgfCAncmlnaHQnKTogdm9pZCB7XG4gICAgLy8gQ2hlY2sgZm9yIGFjdGl2ZSBtYW51YWwgaWQgLyBhbmQgaWYgYSBiZWFjb24gaXMgdGllZCB0byBpdFxuICAgIGlmICh0aGlzLmJlYWNvblNlbGVjdGVkTWFudWFsSWQpIHtcbiAgICAgIGNvbnN0IGJlYWNvbkluZGV4ID0gdGhpcy5iZWFjb25MaWJyYXJ5LmZpbmRJbmRleCh4ID0+IHgubWlkID09IHRoaXMuYmVhY29uU2VsZWN0ZWRNYW51YWxJZClcbiAgICAgIGlmIChiZWFjb25JbmRleCA+PSAwKSB7XG4gICAgICAgIGlmICh0aGlzLmJlYWNvbkxpYnJhcnlbYmVhY29uSW5kZXhdLmJ1dHRvbnM/Lm9uZSkge1xuICAgICAgICAgICg8SUJlYWNvbkJ1dHRvblR5cGU+dGhpcy5iZWFjb25MaWJyYXJ5W2JlYWNvbkluZGV4XS5idXR0b25zKS50d28gPSB7XG4gICAgICAgICAgICB0ZXh0OiB0ZXh0LnN1YnN0cmluZygwLCAxNSksXG4gICAgICAgICAgICBjYW5EaXNtaXNzLFxuICAgICAgICAgICAgY2FsbGJhY2ssXG4gICAgICAgICAgICBjYWxsYmFja0FyZ3MsXG4gICAgICAgICAgICBwb3NpdGlvblxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHRoaXMuc2V0QnV0dG9uT25lKHRleHQsIGNhbkRpc21pc3MsIGNhbGxiYWNrLCBjYWxsYmFja0FyZ3MsIHBvc2l0aW9uKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFJlbW92ZSBiZWFjb24gYnV0dG9uIDFcbiAgcHVibGljIHJlbW92ZUJ1dHRvbk9uZSgpOiB2b2lkIHtcbiAgICAvLyBDaGVjayBmb3IgYWN0aXZlIG1hbnVhbCBpZCAvIGFuZCBpZiBhIGJlYWNvbiBpcyB0aWVkIHRvIGl0XG4gICAgaWYgKHRoaXMuYmVhY29uU2VsZWN0ZWRNYW51YWxJZCkge1xuICAgICAgY29uc3QgYmVhY29uSW5kZXggPSB0aGlzLmJlYWNvbkxpYnJhcnkuZmluZEluZGV4KHggPT4geC5taWQgPT0gdGhpcy5iZWFjb25TZWxlY3RlZE1hbnVhbElkKVxuICAgICAgaWYgKGJlYWNvbkluZGV4ID49IDApIHtcbiAgICAgICAgKDxJQmVhY29uQnV0dG9uVHlwZT50aGlzLmJlYWNvbkxpYnJhcnlbYmVhY29uSW5kZXhdLmJ1dHRvbnMpLm9uZSA9IHVuZGVmaW5lZFxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFJlbW92ZSBiZWFjb24gYnV0dG9uIDJcbiAgcHVibGljIHJlbW92ZUJ1dHRvblR3bygpOiB2b2lkIHtcbiAgICAvLyBDaGVjayBmb3IgYWN0aXZlIG1hbnVhbCBpZCAvIGFuZCBpZiBhIGJlYWNvbiBpcyB0aWVkIHRvIGl0XG4gICAgaWYgKHRoaXMuYmVhY29uU2VsZWN0ZWRNYW51YWxJZCkge1xuICAgICAgY29uc3QgYmVhY29uSW5kZXggPSB0aGlzLmJlYWNvbkxpYnJhcnkuZmluZEluZGV4KHggPT4geC5taWQgPT0gdGhpcy5iZWFjb25TZWxlY3RlZE1hbnVhbElkKVxuICAgICAgaWYgKGJlYWNvbkluZGV4ID49IDApIHtcbiAgICAgICAgKDxJQmVhY29uQnV0dG9uVHlwZT50aGlzLmJlYWNvbkxpYnJhcnlbYmVhY29uSW5kZXhdLmJ1dHRvbnMpLnR3byA9IHVuZGVmaW5lZFxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFJlbW92ZSBiZWFjb24gYnV0dG9uc1xuICBwdWJsaWMgcmVtb3ZlQnV0dG9ucygpOiB2b2lkIHtcbiAgICAvLyBDaGVjayBmb3IgYWN0aXZlIG1hbnVhbCBpZCAvIGFuZCBpZiBhIGJlYWNvbiBpcyB0aWVkIHRvIGl0XG4gICAgaWYgKHRoaXMuYmVhY29uU2VsZWN0ZWRNYW51YWxJZCkge1xuICAgICAgY29uc3QgYmVhY29uSW5kZXggPSB0aGlzLmJlYWNvbkxpYnJhcnkuZmluZEluZGV4KHggPT4geC5taWQgPT0gdGhpcy5iZWFjb25TZWxlY3RlZE1hbnVhbElkKVxuICAgICAgaWYgKGJlYWNvbkluZGV4ID49IDApIHtcbiAgICAgICAgKDxJQmVhY29uQnV0dG9uVHlwZT50aGlzLmJlYWNvbkxpYnJhcnlbYmVhY29uSW5kZXhdLmJ1dHRvbnMpLm9uZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgKDxJQmVhY29uQnV0dG9uVHlwZT50aGlzLmJlYWNvbkxpYnJhcnlbYmVhY29uSW5kZXhdLmJ1dHRvbnMpLnR3byA9IHVuZGVmaW5lZFxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFNldCBiZWFjb24gYXMgc3RhdGljIG9yIHdpdGggZGVsYXlcbiAgcHVibGljIHN0YXRpYyhkZWxheT86IG51bWJlcik6IEJlYWNvbk5vdGlmeVNlcnZpY2Uge1xuICAgIHRoaXMuYmVhY29uU3RhdGljID0gZGVsYXkgfHwgdHJ1ZVxuICAgIHRoaXMuYmVhY29uRml4ZWQgPSB1bmRlZmluZWRcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLy8gU2V0IGJlYWNvbiBhcyBmaXhlZCB3aGljaCByZW1vdmVzIHRoZSBjbG9zZSBidXR0b24gYW5kIGRpc2FsbG93cyBjbG9zZSBvbiBjbGlja1xuICBwdWJsaWMgZml4ZWQoKTogQmVhY29uTm90aWZ5U2VydmljZSB7XG4gICAgdGhpcy5iZWFjb25TdGF0aWMgPSB1bmRlZmluZWRcbiAgICB0aGlzLmJlYWNvbkZpeGVkID0gdHJ1ZVxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvLyBBbGxvdyBiZWFjb24gdG8gYmxvY2sgb3RoZXJzXG4gIHB1YmxpYyBibG9jaygpOiBCZWFjb25Ob3RpZnlTZXJ2aWNlIHtcbiAgICB0aGlzLmJlYWNvbkJsb2NrT3RoZXJzID0gdHJ1ZVxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvLyBGb2N1cyBvbiBiZWFjb25cbiAgcHVibGljIGZvY3VzKG92ZXJsYXlDb2xvcj86IHN0cmluZyk6IEJlYWNvbk5vdGlmeVNlcnZpY2Uge1xuICAgIG92ZXJsYXlDb2xvciAmJiAodGhpcy5iZWFjb25PdmVybGF5Q29sb3IgPSBvdmVybGF5Q29sb3IpXG4gICAgdGhpcy5iZWFjb25Gb2N1cyA9IHRydWVcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLy8gRm9jdXMgYmVhY29uIG9uIGNlbnRlciBzY3JlZW5cbiAgcHVibGljIHNoaW5lKHNjYWxlPzogbnVtYmVyLCBvdmVybGF5Q29sb3I/OiBzdHJpbmcpOiBCZWFjb25Ob3RpZnlTZXJ2aWNlIHtcbiAgICBvdmVybGF5Q29sb3IgJiYgKHRoaXMuYmVhY29uT3ZlcmxheUNvbG9yID0gb3ZlcmxheUNvbG9yKVxuICAgIHRoaXMuYmVhY29uRm9jdXNTaGluZSA9IHRoaXMuYmVhY29uRm9jdXMgPSB0cnVlXG4gICAgc2NhbGUgJiYgKHRoaXMuYmVhY29uRm9jdXNTaGluZVNjYWxlID0gc2NhbGUpXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8vIEFkZCBidXR0b24gZm9yIGJlYWNvblxuICBwdWJsaWMgYnV0dG9uKHRleHQ6IHN0cmluZywgY2FuRGlzbWlzcz86IGJvb2xlYW4gfCBudWxsLCBjYWxsYmFjaz86IGFueSwgY2FsbGJhY2tBcmdzPzogYW55W10gfCBudWxsLCBwb3NpdGlvbj86ICdsZWZ0JyB8ICdjZW50ZXInIHwgJ3JpZ2h0Jyk6IEJlYWNvbk5vdGlmeVNlcnZpY2Uge1xuICAgIGlmICghdGhpcy5iZWFjb25CdXR0b25zPy5vbmUpIHtcbiAgICAgIHRoaXMuYmVhY29uQnV0dG9ucy5vbmUgPSB7XG4gICAgICAgIHRleHQ6IHRleHQuc3Vic3RyaW5nKDAsIDE1KSxcbiAgICAgICAgY2FuRGlzbWlzcyxcbiAgICAgICAgY2FsbGJhY2ssXG4gICAgICAgIGNhbGxiYWNrQXJncyxcbiAgICAgICAgcG9zaXRpb25cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMuYmVhY29uQnV0dG9ucy5vbmUgJiYgIXRoaXMuYmVhY29uQnV0dG9ucy50d28pIHtcbiAgICAgIHRoaXMuYmVhY29uQnV0dG9ucy50d28gPSB7XG4gICAgICAgIHRleHQ6IHRleHQuc3Vic3RyaW5nKDAsIDE1KSxcbiAgICAgICAgY2FuRGlzbWlzcyxcbiAgICAgICAgY2FsbGJhY2ssXG4gICAgICAgIGNhbGxiYWNrQXJncyxcbiAgICAgICAgcG9zaXRpb25cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLy8gQWxsb3cgZHVwbGljYXRlIGZvciBiZWFjb25cbiAgcHVibGljIGR1cGxpY2F0ZSgpOiBCZWFjb25Ob3RpZnlTZXJ2aWNlIHtcbiAgICB0aGlzLmJlYWNvbkFsbG93RHVwbGljYXRlID0gdHJ1ZVxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvLyBTZXQgY29uZmlnIHZhbHVlcyBmb3IgYmVhY29uXG4gIHB1YmxpYyBidWlsZChjb25maWc6IElCZWFjb25JbmxpbmVDb25maWcpOiBCZWFjb25Ob3RpZnlTZXJ2aWNlIHtcbiAgICBpZiAoY29uZmlnLnN0YXRpYykge1xuICAgICAgaWYgKHR5cGVvZiBjb25maWcuc3RhdGljID09ICdib29sZWFuJylcbiAgICAgICAgdGhpcy5zdGF0aWMoKVxuICAgICAgZWxzZSB0aGlzLnN0YXRpYyhOdW1iZXIoY29uZmlnLnN0YXRpYykpXG4gICAgfVxuXG4gICAgY29uZmlnLmZpeGVkICYmIHRoaXMuZml4ZWQoKVxuICAgIGNvbmZpZy5kdXBsaWNhdGUgJiYgdGhpcy5kdXBsaWNhdGUoKVxuICAgIGNvbmZpZy5wcmV2ZW50Q2xpY2tDbG9zZSAmJiAodGhpcy5iZWFjb25QcmV2ZW50Q2xpY2tDbG9zZSA9IGNvbmZpZy5wcmV2ZW50Q2xpY2tDbG9zZSlcbiAgICBjb25maWcuYmxvY2tPdGhlcnMgJiYgKHRoaXMuYmVhY29uQmxvY2tPdGhlcnMgPSBjb25maWcuYmxvY2tPdGhlcnMpXG4gICAgY29uZmlnLmZvY3VzICYmICh0aGlzLmJlYWNvbkZvY3VzID0gY29uZmlnLmZvY3VzKVxuICAgIGNvbmZpZy5zaGluZSAmJiAodGhpcy5iZWFjb25Gb2N1c1NoaW5lID0gdGhpcy5iZWFjb25Gb2N1cyA9IGNvbmZpZy5zaGluZSlcbiAgICBjb25maWcuaWNvbiAmJiAodGhpcy5iZWFjb25JY29uID0gY29uZmlnLmljb24pXG4gICAgY29uZmlnLmZvbnRJY29uICYmICh0aGlzLmJlYWNvbkljb25Gcm9tRm9udCA9IGNvbmZpZy5mb250SWNvbilcbiAgICBjb25maWcuc3R5bGVDbGFzcyAmJiAodGhpcy5iZWFjb25TdHlsZUNsYXNzID0gY29uZmlnLnN0eWxlQ2xhc3MpXG4gICAgY29uZmlnLnJlcGxhY2VtZW50Q2xhc3MgJiYgKHRoaXMuYmVhY29uUmVwbGFjZW1lbnRDbGFzcyA9IGNvbmZpZy5yZXBsYWNlbWVudENsYXNzKVxuICAgIGNvbmZpZy5hbmltYXRpb25DbGFzcyAmJiAodGhpcy5iZWFjb25BbmltYXRpb25DbGFzcyA9IGNvbmZpZy5hbmltYXRpb25DbGFzcylcbiAgICBjb25maWcuYW5pbWF0aW9uQ2xhc3MgJiYgKHRoaXMuYmVhY29uQW5pbWF0aW9uQ2xhc3MgPSBjb25maWcuYW5pbWF0aW9uQ2xhc3MpXG4gICAgY29uZmlnLm92ZXJsYXlDb2xvciAmJiAodGhpcy5iZWFjb25PdmVybGF5Q29sb3IgPSBjb25maWcub3ZlcmxheUNvbG9yKVxuICAgIGNvbmZpZy5ub0hvdmVyRWZmZWN0ICYmICh0aGlzLmJlYWNvbk5vSG92ZXJFZmZlY3QgPSBjb25maWcubm9Ib3ZlckVmZmVjdClcbiAgICBjb25maWcuc2hpbmVTY2FsZSAmJiAodGhpcy5iZWFjb25Gb2N1c1NoaW5lU2NhbGUgPSBjb25maWcuc2hpbmVTY2FsZSlcbiAgICBjb25maWcuZm9udFdlaWdodFRpdGxlICYmICh0aGlzLmJlYWNvbkZvbnRXZWlnaHRUaXRsZSA9IGNvbmZpZy5mb250V2VpZ2h0VGl0bGUpXG4gICAgY29uZmlnLmZvbnRXZWlnaHRCb2R5ICYmICh0aGlzLmJlYWNvbkZvbnRXZWlnaHRCb2R5ID0gY29uZmlnLmZvbnRXZWlnaHRCb2R5KVxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvLyBjcmVhdGUgbm90aWZpY2F0aW9uIGJlYWNvblxuICBwcml2YXRlIGJlYWNvbihtZXNzYWdlOiBzdHJpbmcsIHR5cGU6IHN0cmluZyk6IEV2ZW50RW1pdHRlcjxJQmVhY29uRXZlbnQ+IHtcbiAgICAvLyBHZXQgc2lnbmF0dXJlXG4gICAgY29uc3Qgc2lnbmF0dXJlID0gQnVmZmVyLmZyb20oKHRoaXMuYmVhY29uVGl0bGUgfHwgdGhpcy5iZWFjb25Db25maWdNYXBbdHlwZV0udGl0bGUpICsgJy4nICsgbWVzc2FnZSkudG9TdHJpbmcoJ2Jhc2U2NCcpXG4gICAgLy8gR2VuZXJhdGUgYmVhY29uIGlkXG4gICAgY29uc3QgYmVhY29uSWQgPSB0aGlzLmdldElkXG4gICAgLy8gUmVnaXN0ZXIgYmVhY29uIGluIGV2ZW50IGxpYnJhcnlcbiAgICB0aGlzLmJlYWNvblN1YnNjcmliZWRFdmVudExpYnJhcnlbYmVhY29uSWRdID0gT2JqZWN0LmNyZWF0ZSh7fSlcbiAgICAvLyBDaGVjayBmb3IgZHVwbGljYXRlIGlmIHNldCB0byBwcmV2ZW50IG9yIHByb2NlZWQgaWYgdHVybmVkIG9mZlxuICAgIGlmICh0aGlzLmJlYWNvbkFsbG93RHVwbGljYXRlIHx8ICgoW3VuZGVmaW5lZCwgZmFsc2VdLmluY2x1ZGVzKHRoaXMuYmVhY29uR2xvYmFsRHVwbGljYXRlKSAmJiB0aGlzLmlzTmV3QmVhY29uQUR1cGxpY2F0ZShzaWduYXR1cmUpID09ICExKSB8fCB0aGlzLmJlYWNvbkdsb2JhbER1cGxpY2F0ZSkpIHtcbiAgICAgIGNvbnN0IGJlYWNvbk9iamVjdDogSUJlYWNvbkNvbmZpZyA9IHtcbiAgICAgICAgYmlkOiBiZWFjb25JZCxcbiAgICAgICAgbWlkOiB0aGlzLmJlYWNvbk1hbnVhbElkLFxuICAgICAgICB0eXBlOiB0aGlzLmJlYWNvbkNvbmZpZ01hcFt0eXBlXS5jbGFzcyxcbiAgICAgICAgaWNvbjogdGhpcy5iZWFjb25JY29uIHx8IHRoaXMuYmVhY29uQ29uZmlnTWFwW3R5cGVdLmljb24sXG4gICAgICAgIGZvbnRJY29uOiB0aGlzLmJlYWNvbkljb25Gcm9tRm9udCB8fCAodGhpcy5iZWFjb25Db25maWdNYXBbdHlwZV0uZm9udEljb24gPT0gJ3RydWUnID8gdHJ1ZSA6IHVuZGVmaW5lZCksXG4gICAgICAgIHRpdGxlOiB0aGlzLmJlYWNvblRpdGxlIHx8IHRoaXMuYmVhY29uQ29uZmlnTWFwW3R5cGVdLnRpdGxlLFxuICAgICAgICBzdGF0aWM6IHRoaXMuYmVhY29uU3RhdGljIHx8IHRoaXMuYmVhY29uR2xvYmFsU3RhdGljLFxuICAgICAgICBmaXhlZDogdGhpcy5iZWFjb25GaXhlZCB8fCB0aGlzLmJlYWNvbkdsb2JhbEZpeGVkLFxuICAgICAgICBwcmV2ZW50Q2xpY2tDbG9zZTogdGhpcy5iZWFjb25QcmV2ZW50Q2xpY2tDbG9zZSB8fCB0aGlzLmJlYWNvbkdsb2JhbFByZXZlbnRDbGlja0Nsb3NlLFxuICAgICAgICBzdHlsZUNsYXNzOiB0aGlzLmJlYWNvblN0eWxlQ2xhc3MgfHwgdGhpcy5iZWFjb25Db25maWdNYXBbdHlwZV0uc3R5bGUsXG4gICAgICAgIHJlcGxhY2VtZW50Q2xhc3M6IHRoaXMuYmVhY29uUmVwbGFjZW1lbnRDbGFzcyxcbiAgICAgICAgYW5pbWF0aW9uQ2xhc3M6IHRoaXMuYmVhY29uQW5pbWF0aW9uQ2xhc3MgfHwgdGhpcy5iZWFjb25Db25maWdNYXBbdHlwZV0uYW5pbWF0aW9uIHx8IHRoaXMuYmVhY29uRGVmYXVsdEFuaW1hdGlvbkNsYXNzTmFtZSxcbiAgICAgICAgYmxvY2tPdGhlcnM6IHRoaXMuYmVhY29uQmxvY2tPdGhlcnMgfHwgdGhpcy5iZWFjb25HbG9iYWxCbG9ja090aGVycyxcbiAgICAgICAgYnV0dG9uczogdGhpcy5iZWFjb25CdXR0b25zLFxuICAgICAgICBvdmVybGF5Q29sb3I6IHRoaXMuYmVhY29uT3ZlcmxheUNvbG9yLFxuICAgICAgICBib2R5SHRtbDogPFNhZmVIdG1sPnRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sKG1lc3NhZ2UpLFxuICAgICAgICBib2R5OiBtZXNzYWdlLFxuICAgICAgICBmb2N1czogdGhpcy5iZWFjb25Gb2N1cyxcbiAgICAgICAgc2hpbmU6IHRoaXMuYmVhY29uRm9jdXNTaGluZSxcbiAgICAgICAgbm9Ib3ZlckVmZmVjdDogdGhpcy5iZWFjb25Ob0hvdmVyRWZmZWN0IHx8IHRoaXMuYmVhY29uR2xvYmFsTm9Ib3ZlckVmZmVjdCxcbiAgICAgICAgc2hpbmVTY2FsZTogdGhpcy5iZWFjb25Gb2N1c1NoaW5lU2NhbGUgfHwgdGhpcy5iZWFjb25HbG9iYWxGb2N1c1NoaW5lU2NhbGUsXG4gICAgICAgIGZvbnRXZWlnaHRUaXRsZTogdGhpcy5iZWFjb25Gb250V2VpZ2h0VGl0bGUgfHwgdGhpcy5iZWFjb25HbG9iYWxGb250V2VpZ2h0VGl0bGUsXG4gICAgICAgIGZvbnRXZWlnaHRCb2R5OiB0aGlzLmJlYWNvbkZvbnRXZWlnaHRCb2R5IHx8IHRoaXMuYmVhY29uR2xvYmFsRm9udFdlaWdodEJvZHksXG4gICAgICAgIHNpZ25hdHVyZVxuICAgICAgfVxuXG4gICAgICAvLyBTYW5pdGl6ZSBpY29uIGlmIHBhc3NlZFxuICAgICAgaWYgKCFiZWFjb25PYmplY3QuZm9udEljb24gJiYgYmVhY29uT2JqZWN0Lmljb24gJiYgIXRoaXMuYmVhY29uRGVmYXVsdEljb25LZXlzLmluY2x1ZGVzKGJlYWNvbk9iamVjdC5pY29uKSkge1xuICAgICAgICBiZWFjb25PYmplY3Quc3ZnSWNvbiA9IDxTYWZlSHRtbD50aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0SHRtbChiZWFjb25PYmplY3QuaWNvbilcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgaWYgdGhlcmUgaXMgYW4gYWN0aXZlIGJlYWNvbiBibG9ja2luZyBvdGhlcnMgYW5kIGFkZCBidWlsZCBiZWFjb24gdG8gcXVldWVcbiAgICAgIGlmICh0aGlzLmJlYWNvblN1Y2Nlc3NvckJsb2NrZXJBdXRvSWQpIHtcbiAgICAgICAgdGhpcy5iZWFjb25MaWJyYXJ5UXVldWUucHVzaChiZWFjb25PYmplY3QpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBDaGVjayBpZiBiZWFjb24gY2FuIGJsb2NrIGFuZCByZWdpc3RlciBpZFxuICAgICAgICBpZiAoYmVhY29uT2JqZWN0LmJsb2NrT3RoZXJzKVxuICAgICAgICAgIHRoaXMuYmVhY29uU3VjY2Vzc29yQmxvY2tlckF1dG9JZCA9IGJlYWNvbk9iamVjdC5iaWRcblxuICAgICAgICAvLyBBZGQgbWVzc2FnZSB0byBsaWJyYXJ5XG4gICAgICAgIGlmICh0aGlzLmdldEJlYWNvbkdsb2JhbFBvc2l0aW9uQ29uZmlnPy50b3BCb3R0b20gPT0gJ3RvcCcpXG4gICAgICAgICAgdGhpcy5iZWFjb25MaWJyYXJ5LnVuc2hpZnQoYmVhY29uT2JqZWN0KVxuICAgICAgICBlbHNlIHRoaXMuYmVhY29uTGlicmFyeS5wdXNoKGJlYWNvbk9iamVjdClcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgaWYgYmVhY29uIGhhcyBmb2N1c1xuICAgICAgaWYgKHRoaXMuYmVhY29uRm9jdXMpIHtcbiAgICAgICAgaWYgKHRoaXMuYmVhY29uV2l0aEFjdGl2ZUZvY3VzQXV0b0lkKVxuICAgICAgICAgIHRoaXMuYmVhY29uRm9jdXNPcmRlckxpYnJhcnkucHVzaChiZWFjb25PYmplY3QuYmlkKVxuICAgICAgICBlbHNlXG4gICAgICAgICAgdGhpcy5iZWFjb25XaXRoQWN0aXZlRm9jdXNBdXRvSWQgPSBiZWFjb25PYmplY3QuYmlkXG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIGlmIGlkIGlzIHNldCBhbmQgcmVnaXN0ZXIgaXRcbiAgICAgIGlmICh0aGlzLmJlYWNvbk1hbnVhbElkKSB7XG4gICAgICAgIHRoaXMuYmVhY29uU3Vic2NyaWJlZEV2ZW50TGlicmFyeVtiZWFjb25JZF0ubWFudWFsSWQgPSB0aGlzLmJlYWNvbk1hbnVhbElkXG4gICAgICAgIC8vIE1hcCB0aGUgZGVmaW5lZCBpZCB0byB0aGUgYXV0by1nZW4gaWRcbiAgICAgICAgdGhpcy5iZWFjb25XYXRjaGVkRXZlbnRMaWJyYXJ5LnNldCh0aGlzLmJlYWNvbk1hbnVhbElkLCBiZWFjb25JZClcbiAgICAgIH1cblxuICAgICAgLy8gUmVnaXN0ZXIgYmVhY29uIHR5cGUgXG4gICAgICB0aGlzLmJlYWNvblN1YnNjcmliZWRFdmVudExpYnJhcnlbYmVhY29uSWRdLnR5cGUgPSB0aGlzLmJlYWNvbkNvbmZpZ01hcFt0eXBlXS50eXBlXG4gICAgfVxuXG4gICAgLy8gUmVnaXN0ZXIgZXZlbnQgZm9yIGJlYWNvblxuICAgIHRoaXMuYmVhY29uU3Vic2NyaWJlZEV2ZW50TGlicmFyeVtiZWFjb25JZF0uZXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPElCZWFjb25FdmVudD4oKVxuXG4gICAgLy8gUmVzZXRcbiAgICB0aGlzLmJlYWNvblRpdGxlID0gdW5kZWZpbmVkXG4gICAgdGhpcy5iZWFjb25NZXNzYWdlID0gdW5kZWZpbmVkXG4gICAgdGhpcy5iZWFjb25TdGF0aWMgPSB1bmRlZmluZWRcbiAgICB0aGlzLmJlYWNvbkZpeGVkID0gdW5kZWZpbmVkXG4gICAgdGhpcy5iZWFjb25CbG9ja090aGVycyA9IHVuZGVmaW5lZFxuICAgIHRoaXMuYmVhY29uTWFudWFsSWQgPSB1bmRlZmluZWRcbiAgICB0aGlzLmJlYWNvbkZvY3VzID0gdW5kZWZpbmVkXG4gICAgdGhpcy5iZWFjb25Gb2N1c1NoaW5lID0gdW5kZWZpbmVkXG4gICAgdGhpcy5iZWFjb25PdmVybGF5Q29sb3IgPSB1bmRlZmluZWRcbiAgICB0aGlzLmJlYWNvbkFsbG93RHVwbGljYXRlID0gdW5kZWZpbmVkXG4gICAgdGhpcy5iZWFjb25Ob0hvdmVyRWZmZWN0ID0gdW5kZWZpbmVkXG4gICAgdGhpcy5iZWFjb25JY29uID0gdW5kZWZpbmVkXG4gICAgdGhpcy5iZWFjb25JY29uRnJvbUZvbnQgPSB1bmRlZmluZWRcbiAgICB0aGlzLmJlYWNvblN0eWxlQ2xhc3MgPSB1bmRlZmluZWRcbiAgICB0aGlzLmJlYWNvblJlcGxhY2VtZW50Q2xhc3MgPSB1bmRlZmluZWRcbiAgICB0aGlzLmJlYWNvbkFuaW1hdGlvbkNsYXNzID0gdW5kZWZpbmVkXG4gICAgdGhpcy5iZWFjb25CdXR0b25zID0ge31cblxuICAgIHJldHVybiA8RXZlbnRFbWl0dGVyPElCZWFjb25FdmVudD4+dGhpcy5iZWFjb25TdWJzY3JpYmVkRXZlbnRMaWJyYXJ5W2JlYWNvbklkXS5ldmVudFxuICB9XG5cbiAgLy8gU2V0IG5vdGlmaWNhdGlvbiBtZXNzYWdlIC8gc3VjY2Vzc1xuICBwdWJsaWMgc3VjY2VzcyguLi5tZXNzYWdlOiBzdHJpbmdbXSk6IEV2ZW50RW1pdHRlcjxJQmVhY29uRXZlbnQ+IHtcbiAgICAvLyBTZXQgdGl0bGVcbiAgICAobWVzc2FnZS5sZW5ndGggPiAxKSAmJiBtZXNzYWdlWzBdICYmIHRoaXMudGl0bGUobWVzc2FnZVswXSlcbiAgICAvLyBTZXQgYm9keVxuICAgIHJldHVybiB0aGlzLmJlYWNvbihtZXNzYWdlWzFdIHx8IG1lc3NhZ2VbMF0gfHwgdGhpcy5iZWFjb25NZXNzYWdlIHx8IHRoaXMuYmVhY29uQ29uZmlnTWFwLnN1Y2Nlc3MudGl0bGUsIHRoaXMuYmVhY29uVHlwZU1hcC5hKVxuICB9XG5cbiAgLy8gU2V0IG5vdGlmaWNhdGlvbiBtZXNzYWdlIC8gZXJyb3JcbiAgcHVibGljIGVycm9yKC4uLm1lc3NhZ2U6IHN0cmluZ1tdKTogRXZlbnRFbWl0dGVyPElCZWFjb25FdmVudD4ge1xuICAgIC8vIFNldCB0aXRsZVxuICAgIChtZXNzYWdlLmxlbmd0aCA+IDEpICYmIG1lc3NhZ2VbMF0gJiYgdGhpcy50aXRsZShtZXNzYWdlWzBdKVxuICAgIC8vIFNldCBib2R5XG4gICAgcmV0dXJuIHRoaXMuYmVhY29uKG1lc3NhZ2VbMV0gfHwgbWVzc2FnZVswXSB8fCB0aGlzLmJlYWNvbk1lc3NhZ2UgfHwgdGhpcy5iZWFjb25Db25maWdNYXAuZXJyb3IudGl0bGUsIHRoaXMuYmVhY29uVHlwZU1hcC5iKVxuICB9XG5cbiAgLy8gU2V0IG5vdGlmaWNhdGlvbiBtZXNzYWdlIC8gd2FybmluZ1xuICBwdWJsaWMgd2FybmluZyguLi5tZXNzYWdlOiBzdHJpbmdbXSk6IEV2ZW50RW1pdHRlcjxJQmVhY29uRXZlbnQ+IHtcbiAgICAvLyBTZXQgdGl0bGVcbiAgICAobWVzc2FnZS5sZW5ndGggPiAxKSAmJiBtZXNzYWdlWzBdICYmIHRoaXMudGl0bGUobWVzc2FnZVswXSlcbiAgICAvLyBTZXQgYm9keVxuICAgIHJldHVybiB0aGlzLmJlYWNvbihtZXNzYWdlWzFdIHx8IG1lc3NhZ2VbMF0gfHwgdGhpcy5iZWFjb25NZXNzYWdlIHx8IHRoaXMuYmVhY29uQ29uZmlnTWFwLndhcm5pbmcudGl0bGUsIHRoaXMuYmVhY29uVHlwZU1hcC5jKVxuICB9XG5cbiAgLy8gU2V0IG5vdGlmaWNhdGlvbiBtZXNzYWdlIC8gaW5mb1xuICBwdWJsaWMgaW5mbyguLi5tZXNzYWdlOiBzdHJpbmdbXSk6IEV2ZW50RW1pdHRlcjxJQmVhY29uRXZlbnQ+IHtcbiAgICAvLyBTZXQgdGl0bGVcbiAgICAobWVzc2FnZS5sZW5ndGggPiAxKSAmJiBtZXNzYWdlWzBdICYmIHRoaXMudGl0bGUobWVzc2FnZVswXSlcbiAgICAvLyBTZXQgYm9keVxuICAgIHJldHVybiB0aGlzLmJlYWNvbihtZXNzYWdlWzFdIHx8IG1lc3NhZ2VbMF0gfHwgdGhpcy5iZWFjb25NZXNzYWdlIHx8IHRoaXMuYmVhY29uQ29uZmlnTWFwLmluZm8udGl0bGUsIHRoaXMuYmVhY29uVHlwZU1hcC5kKVxuICB9XG5cbiAgLy8gU2V0IG5vdGlmaWNhdGlvbiBtZXNzYWdlIC8gYWxlcnRcbiAgcHVibGljIGFsZXJ0KC4uLm1lc3NhZ2U6IHN0cmluZ1tdKTogRXZlbnRFbWl0dGVyPElCZWFjb25FdmVudD4ge1xuICAgIC8vIFNldCB0aXRsZVxuICAgIChtZXNzYWdlLmxlbmd0aCA+IDEpICYmIG1lc3NhZ2VbMF0gJiYgdGhpcy50aXRsZShtZXNzYWdlWzBdKVxuICAgIC8vIFNldCBib2R5XG4gICAgcmV0dXJuIHRoaXMuYmVhY29uKG1lc3NhZ2VbMV0gfHwgbWVzc2FnZVswXSB8fCB0aGlzLmJlYWNvbk1lc3NhZ2UgfHwgdGhpcy5iZWFjb25Db25maWdNYXAuYWxlcnQudGl0bGUsIHRoaXMuYmVhY29uVHlwZU1hcC5lKVxuICB9XG5cbiAgLy8gV2F0Y2ggZXZlbnRzIGZvciBiZWFjb24gd2l0aCBzcGVjaWZpZWQgaWRcbiAgcHVibGljIHdhdGNoKGlkOiBzdHJpbmcgfCBzdHJpbmdbXSk6IEV2ZW50RW1pdHRlcjxJQmVhY29uV2F0Y2hlZEV2ZW50PiB7XG4gICAgLy8gUmVnaXN0ZXIgd2F0Y2hlZCBpZFxuICAgIGlmIChBcnJheS5pc0FycmF5KGlkKSlcbiAgICAgIGlkLmZvckVhY2goayA9PiB0aGlzLmJlYWNvbldhdGNoZWRFdmVudExpYnJhcnkuc2V0KGssIFN0cmluZygpKSlcbiAgICBlbHNlIHRoaXMuYmVhY29uV2F0Y2hlZEV2ZW50TGlicmFyeS5zZXQoaWQsIFN0cmluZygpKVxuXG4gICAgcmV0dXJuIHRoaXMuYmVhY29uV2F0Y2hlZEV2ZW50VGFza01hc3RlclxuICB9XG5cbiAgLy8gV2F0Y2ggZXZlbnRzIGZvciBhbGwgYmVhY29uc1xuICBwdWJsaWMgZXZlbnRzKCk6IEV2ZW50RW1pdHRlcjxJQmVhY29uV2F0Y2hlZEV2ZW50PiB7XG4gICAgcmV0dXJuIHRoaXMuYmVhY29uQWxsRXZlbnRUYXNrTWFzdGVyXG4gIH1cblxuICAvLyBDbG9zZSBiZWFjb24gd2l0aCBpZFxuICBwdWJsaWMgY2xvc2VPbmUoaWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLmJlYWNvbldhdGNoZWRFdmVudExpYnJhcnkuaGFzKGlkKSkge1xuICAgICAgY29uc3QgYXV0b0lkID0gPHN0cmluZz50aGlzLmJlYWNvbldhdGNoZWRFdmVudExpYnJhcnkuZ2V0KGlkKVxuXG4gICAgICAvLyBSZW1vdmUgdGhlIGJlYWNvblxuICAgICAgdGhpcy5iZWFjb25MaWJyYXJ5ID0gdGhpcy5iZWFjb25MaWJyYXJ5LmZpbHRlcih4ID0+IHtcbiAgICAgICAgcmV0dXJuICh4LmJpZCAhPSBhdXRvSWQpXG4gICAgICB9KVxuXG4gICAgICB0aGlzLmJlYWNvbkV2ZW50VGFza01hc3Rlci5lbWl0KHtcbiAgICAgICAgZGVsZXRlOiB0cnVlLFxuICAgICAgICBpZDogYXV0b0lkXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIC8vIENsb3NlIGFsbCBiZWFjb25zXG4gIHB1YmxpYyBjbG9zZUFsbCgpOiB2b2lkIHtcbiAgICB0aGlzLmJlYWNvbkxpYnJhcnkgPSB0aGlzLmJlYWNvbkxpYnJhcnkuZmlsdGVyKHggPT4ge1xuICAgICAgdGhpcy5iZWFjb25FdmVudFRhc2tNYXN0ZXIuZW1pdCh7XG4gICAgICAgIGRlbGV0ZTogdHJ1ZSxcbiAgICAgICAgaWQ6IHguYmlkXG4gICAgICB9KVxuXG4gICAgICByZXR1cm4gISh4LmJpZClcbiAgICB9KVxuICB9XG5cbiAgLy8gQ2hlY2sgZm9yIHBvc3NpYmxlIGR1cGxpY2F0ZVxuICBwcml2YXRlIGlzTmV3QmVhY29uQUR1cGxpY2F0ZShzaWduYXR1cmU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGR1cGxpY2F0ZSA9IHRoaXMuYmVhY29uTGlicmFyeS5maW5kKHggPT4geC5zaWduYXR1cmUgPT0gc2lnbmF0dXJlKVxuICAgIHJldHVybiBCb29sZWFuKGR1cGxpY2F0ZSlcbiAgfVxufSJdfQ==
629
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmVhY29uLW5vdGlmeS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9iZWFjb24tbm90aWZ5LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQWEsWUFBWSxFQUFjLE1BQU0sZUFBZSxDQUFDO0FBR3hGLE9BQU8sRUFXTCxvQkFBb0IsRUFDcEIsb0JBQW9CLEVBQ3BCLGlCQUFpQixFQUNqQixnQkFBZ0IsRUFDakIsTUFBTSxTQUFTLENBQUM7QUFDakIsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUNoQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsV0FBVyxFQUFVLE1BQU0sZUFBZSxDQUFDOzs7QUFLcEQsTUFBTSxPQUFPLG1CQUFtQjtJQTJEVjtJQUNXO0lBQ1M7SUE1RGhDLHFCQUFxQixHQUFHLGdCQUFnQixDQUFBO0lBQ3hDLGVBQWUsR0FBaUQ7UUFDdEUsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxzQkFBc0IsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFO1FBQ3pKLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsc0JBQXNCLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRTtRQUN6SixJQUFJLEVBQUUsRUFB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ckUsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUNsRSxNQUFNLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBQzNFLE1BQU0sQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDN0UsQ0FBQztJQUVELG9DQUFvQztJQUM1Qix1QkFBdUIsQ0FBQyxNQUF1QjtRQUNyRCxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBUSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUNsSyxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBUSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUNsSyxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMs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O0lBQ0gsQ0FBQztJQUVELG9CQUFvQjtJQUNiLFFBQVE7UUFDYixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ2pELElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUM7Z0JBQzlCLE1BQU0sRUFBRSxJQUFJO2dCQUNaLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRzthQUNWLENBQUMsQ0FBQTtZQUVGLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUNqQixDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCwrQkFBK0I7SUFDdkIscUJBQXFCLENBQUMsU0FBaUI7UUFDN0MsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxJQUFJLFNBQVMsQ0FBQyxDQUFBO1FBQ3hFLE9BQU8sT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFBO0lBQzNCLENBQUM7dUdBcHBCVSxtQkFBbUIsOENBNERwQixXQUFXLGFBQ1gsb0JBQW9COzJHQTdEbkIsbUJBQW1CLGNBRmxCLE1BQU07OzJGQUVQLG1CQUFtQjtrQkFIL0IsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7OzBCQTZESSxNQUFNOzJCQUFDLFdBQVc7OzBCQUNsQixNQUFNOzJCQUFDLG9CQUFvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIEluamVjdCwgVmlld0NoaWxkLCBFdmVudEVtaXR0ZXIsIEVsZW1lbnRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERvbVNhbml0aXplciwgU2FmZUh0bWwgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IEJlYWNvbk5vdGlmeUNvbXBvbmVudCB9IGZyb20gJy4vYmVhY29uL2JlYWNvbi5jb21wb25lbnQnO1xuaW1wb3J0IHtcbiAgSUJlYWNvbkNvbmZpZyxcbiAgSUJlYWNvbklubGluZUNvbmZpZyxcbiAgSUJlYWNvbkdsb2JhbENvbmZpZyxcbiAgSUJlYWNvblR5cGUsXG4gIElCZWFjb25Qb3NpdGlvbkNvbmZpZyxcbiAgSUJlYWNvbkV2ZW50LFxuICBJQmVhY29uV2F0Y2hlZEV2ZW50LFxuICBJQmVhY29uRXZlbnRNZXNzYWdlLFxuICBJQmVhY29uVHlwZUljb24sXG4gIElCZWFjb25CdXR0b25UeXBlLFxuICBCRUFDT05fR0xPQkFMX0NPTkZJRyxcbiAgQkVBQ09OX09WRVJMQVlfQ09MT1IsXG4gIEJFQUNPTl9PVkVSTEFZX0lELFxuICBCRUFDT05fVFlQRV9LRVlTXG59IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgQnVmZmVyIH0gZnJvbSAnYnVmZmVyJztcbmltcG9ydCB7IGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFBMQVRGT1JNX0lELCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQmVhY29uTm90aWZ5U2VydmljZSB7XG4gIHByaXZhdGUgYmVhY29uRGVmYXVsdEljb25LZXlzID0gQkVBQ09OX1RZUEVfS0VZU1xuICBwcml2YXRlIGJlYWNvbkNvbmZpZ01hcDogeyBba2V5OiBzdHJpbmddOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9IH0gPSB7XG4gICAgYWxlcnQ6IHsgaWNvbjogdGhpcy5iZWFjb25EZWZhdWx0SWNvbktleXNbMF0sIGZvbnRJY29uOiAnZmFsc2UnLCBjbGFzczogJ2JlYWNvbi1tZXNzYWdlLWFsZXJ0JywgdGl0bGU6ICdBbGVydCcsIHN0eWxlOiAnJywgYW5pbWF0aW9uOiAnJywgdHlwZTogJ2FsZXJ0JyB9LFxuICAgIGVycm9yOiB7IGljb246IHRoaXMuYmVhY29uRGVmYXVsdEljb25LZXlzWzFdLCBmb250SWNvbjogJ2ZhbHNlJywgY2xhc3M6ICdiZWFjb24tbWVzc2FnZS1lcnJvcicsIHRpdGxlOiAnRXJyb3InLCBzdHlsZTogJycsIGFuaW1hdGlvbjogJycsIHR5cGU6ICdlcnJvcicgfSxcbiAgICBpbmZvOiB7IGljb246IHRoaXMuYmVhY29uRGVmYXVsdEljb25LZXlzWzJdLCBmb250SWNvbjogJ2ZhbHNlJywgY2xhc3M6ICdiZWFjb24tbWVzc2FnZS1pbmZvJywgdGl0bGU6ICdJbmZvcm1hdGlvbicsIHN0eWxlOiAnJywgYW5pbWF0aW9uOiAnJywgdHlwZTogJ2luZm8nIH0sXG4gICAgc3VjY2VzczogeyBpY29uOiB0aGlzLmJlYWNvbkRlZmF1bHRJY29uS2V5c1szXSwgZm9udEljb246ICdmYWxzZScsIGNsYXNzOiAnYmVhY29uLW1lc3NhZ2Utc3VjY2VzcycsIHRpdGxlOiAnU3VjY2VzcycsIHN0eWxlOiAnJywgYW5pbWF0aW9uOiAnJywgdHlwZTogJ3N1Y2Nlc3MnIH0sXG4gICAgd2FybmluZzogeyBpY29uOiB0aGlzLmJlYWNvbkRlZmF1bHRJY29uS2V5c1s0XSwgZm9udEljb246ICdmYWxzZScsIGNsYXNzOiAnYmVhY29uLW1lc3NhZ2Utd2FybmluZycsIHRpdGxlOiAnV2FybmluZycsIHN0eWxlOiAnJywgYW5pbWF0aW9uOiAnJywgdHlwZTogJ3dhcm5pbmcnIH1cbiAgfVxuICBwcml2YXRlIGJlYWNvblR5cGVNYXA6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7XG4gICAgYTogJ3N1Y2Nlc3MnLCBiOiAnZXJyb3InLCBjOiAnd2FybmluZycsIGQ6ICdpbmZvJywgZTogJ2FsZXJ0J1xuICB9XG4gIHByaXZhdGUgYmVhY29uVGl0bGU/OiBzdHJpbmdcbiAgcHJpdmF0ZSBiZWFjb25NZXNzYWdlPzogc3RyaW5nXG4gIHByaXZhdGUgYmVhY29uSWNvbj86IHN0cmluZ1xuICBwcml2YXRlIGJlYWNvbk1hbnVhbElkPzogc3RyaW5nXG4gIHByaXZhdGUgYmVhY29uU2VsZWN0ZWRNYW51YWxJZD86IHN0cmluZ1xuICBwcml2YXRlIGJlYWNvbkljb25Gcm9tRm9udD86IHRydWVcbiAgcHJpdmF0ZSBiZWFjb25TdGF0aWM/OiB0cnVlIHwgbnVtYmVyXG4gIHByaXZhdGUgYmVhY29uRml4ZWQ/OiB0cnVlXG4gIHByaXZhdGUgYmVhY29uQmxvY2tPdGhlcnM/OiB0cnVlXG4gIHByaXZhdGUgYmVhY29uUHJldmVudENsaWNrQ2xvc2U/OiB0cnVlXG4gIHByaXZhdGUgYmVhY29uQWxsb3dEdXBsaWNhdGU/OiB0cnVlXG4gIHByaXZhdGUgYmVhY29uRm9jdXM/OiB0cnVlXG4gIHByaXZhdGUgYmVhY29uRm9jdXNTaGluZT86IHRydWVcbiAgcHJpdmF0ZSBiZWFjb25Gb2N1c1NoaW5lU2NhbGU/OiBudW1iZXJcbiAgcHJpdmF0ZSBiZWFjb25PdmVybGF5Q29sb3I/OiBzdHJpbmdcbiAgcHJpdmF0ZSBiZWFjb25TdHlsZUNsYXNzPzogc3RyaW5nXG4gIHByaXZhdGUgYmVhY29uUmVwbGFjZW1lbnRDbGFzcz86IHN0cmluZ1xuICBwcml2YXRlIGJlYWNvbkFuaW1hdGlvbkNsYXNzPzogc3RyaW5nXG4gIHByaXZhdGUgYmVhY29uTm9Ib3ZlckVmZmVjdD86IHRydWVcbiAgcHJpdmF0ZSBiZWFjb25Gb250V2VpZ2h0VGl0bGU/OiBzdHJpbmdcbiAgcHJpdmF0ZSBiZWFjb25Gb250V2VpZ2h0Qm9keT86IHN0cmluZ1xuICBwcml2YXRlIGJlYWNvbkdsb2JhbFN0YXRpYz86IHRydWUgfCBudW1iZXJcbiAgcHJpdmF0ZSBiZWFjb25HbG9iYWxGaXhlZD86IHRydWVcbiAgcHJpdmF0ZSBiZWFjb25HbG9iYWxCbG9ja090aGVycz86IHRydWVcbiAgcHJpdmF0ZSBiZWFjb25HbG9iYWxQcmV2ZW50Q2xpY2tDbG9zZT86IHRydWVcbiAgcHJpdmF0ZSBiZWFjb25HbG9iYWxEdXBsaWNhdGU/OiBib29sZWFuXG4gIHByaXZhdGUgYmVhY29uR2xvYmFsTm9Ib3ZlckVmZmVjdD86IHRydWVcbiAgcHJpdmF0ZSBiZWFjb25HbG9iYWxGb2N1c1NoaW5lU2NhbGU/OiBudW1iZXJcbiAgcHJpdmF0ZSBiZWFjb25HbG9iYWxQb3NpdGlvbmluZz86IElCZWFjb25Qb3NpdGlvbkNvbmZpZ1xuICBwcml2YXRlIGJlYWNvbkdsb2JhbEZvY3VzT3ZlcmxheUNvbG9yPzogc3RyaW5nXG4gIHByaXZhdGUgYmVhY29uR2xvYmFsRm9udFdlaWdodFRpdGxlPzogc3RyaW5nXG4gIHByaXZhdGUgYmVhY29uR2xvYmFsRm9udFdlaWdodEJvZHk/OiBzdHJpbmdcbiAgcHJpdmF0ZSBiZWFjb25Db250YWluZXIhOiBFbGVtZW50UmVmXG4gIHByaXZhdGUgYmVhY29uRGVmYXVsdEFuaW1hdGlvbkNsYXNzTmFtZTogc3RyaW5nID0gJ2JlYWNvbi1tZXNzYWdlLWNvbnRyb2wtYW5pbWF0ZSdcbiAgcHJpdmF0ZSBiZWFjb25TdWNjZXNzb3JCbG9ja2VyQXV0b0lkPzogc3RyaW5nXG4gIHByaXZhdGUgYmVhY29uV2l0aEFjdGl2ZUZvY3VzQXV0b0lkPzogc3RyaW5nXG4gIHByaXZhdGUgYmVhY29uQnV0dG9uczogSUJlYWNvbkJ1dHRvblR5cGUgPSB7fVxuICBwcml2YXRlIGJlYWNvbkZvY3VzT3JkZXJMaWJyYXJ5OiBBcnJheTxzdHJpbmc+ID0gW11cbiAgcHJpdmF0ZSBiZWFjb25TdWJzY3JpYmVkRXZlbnRMaWJyYXJ5OiB7IFtrZXk6IHN0cmluZ106IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIHwgRXZlbnRFbWl0dGVyPElCZWFjb25FdmVudD4gfSB9ID0ge31cbiAgcHJpdmF0ZSBiZWFjb25XYXRjaGVkRXZlbnRMaWJyYXJ5OiBNYXA8c3RyaW5nLCBzdHJpbmc+ID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oW10pXG4gIHByaXZhdGUgYmVhY29uV2F0Y2hlZEV2ZW50VGFza01hc3RlcjogRXZlbnRFbWl0dGVyPElCZWFjb25XYXRjaGVkRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxJQmVhY29uV2F0Y2hlZEV2ZW50PigpXG4gIHByaXZhdGUgYmVhY29uQWxsRXZlbnRUYXNrTWFzdGVyOiBFdmVudEVtaXR0ZXI8SUJlYWNvbldhdGNoZWRFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPElCZWFjb25XYXRjaGVkRXZlbnQ+KClcbiAgcHJpdmF0ZSBiZWFjb25Gb2N1c092ZXJsYXlET00/OiBIVE1MRWxlbWVudFxuICBwdWJsaWMgYmVhY29uRXZlbnRUYXNrTWFzdGVyOiBFdmVudEVtaXR0ZXI8eyBba2V5OiBzdHJpbmddOiBib29sZWFufCBzdHJpbmcgfT4gPSBuZXcgRXZlbnRFbWl0dGVyPHsgW2tleTogc3RyaW5nXTogYm9vbGVhbiB8IHN0cmluZyB9PigpXG4gIHB1YmxpYyBiZWFjb25MaWJyYXJ5OiBBcnJheTxJQmVhY29uQ29uZmlnPiA9IFtdXG4gIHB1YmxpYyBiZWFjb25MaWJyYXJ5UXVldWU6IEFycmF5PElCZWFjb25Db25maWc+ID0gW11cbiAgXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsXG4gICAgQEluamVjdChQTEFURk9STV9JRCkgcHJpdmF0ZSBwbGF0Zm9ybUlkLFxuICAgIEBJbmplY3QoQkVBQ09OX0dMT0JBTF9DT05GSUcpIHByaXZhdGUgZ2xvYmFsQ29uZmlnPzogSUJlYWNvbkdsb2JhbENvbmZpZykge1xuICAgIHRoaXMuZ2xvYmFsQ29uZmlnICYmIHRoaXMucmVzb2x2ZUdsb2JhbENvbmZpZyh0aGlzLmdsb2JhbENvbmZpZylcbiAgICAvLyBSZXNvbHZlIGV2ZW50c1xuICAgIHRoaXMucmVzb2x2ZUJlYWNvbkV2ZW50cygpXG4gIH1cblxuICAvLyBSZXNvbHZlIGdsb2JhbCBjb25maWdcbiAgcHJpdmF0ZSByZXNvbHZlR2xvYmFsQ29uZmlnKGdsb2JhbENvbmZpZzogSUJlYWNvbkdsb2JhbENvbmZpZyk6IHZvaWQge1xuICAgIGlmIChnbG9iYWxDb25maWcuc3RhdGljKSB7XG4gICAgICBpZiAodHlwZW9mIGdsb2JhbENvbmZpZy5zdGF0aWMgPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIHRoaXMuYmVhY29uR2xvYmFsRml4ZWQgPSB1bmRlZmluZWRcbiAgICAgICAgdGhpcy5iZWFjb25HbG9iYWxTdGF0aWMgPSB0cnVlXG4gICAgICB9IGVsc2UgdGhpcy5iZWFjb25HbG9iYWxTdGF0aWMgPSBnbG9iYWxDb25maWcuc3RhdGljXG4gICAgfVxuXG4gICAgaWYgKGdsb2JhbENvbmZpZy5maXhlZCkge1xuICAgICAgdGhpcy5iZWFjb25HbG9iYWxTdGF0aWMgPSB1bmRlZmluZWRcbiAgICAgIHRoaXMuYmVhY29uR2xvYmFsRml4ZWQgPSB0cnVlXG4gICAgfVxuXG4gICAgZ2xvYmFsQ29uZmlnLnByZXZlbnRDbGlja0Nsb3NlICYmICh0aGlzLmJlYWNvbkdsb2JhbFByZXZlbnRDbGlja0Nsb3NlID0gZ2xvYmFsQ29uZmlnLnByZXZlbnRDbGlja0Nsb3NlKVxuICAgIGdsb2JhbENvbmZpZy5ibG9ja090aGVycyAmJiAodGhpcy5iZWFjb25HbG9iYWxCbG9ja090aGVycyA9IGdsb2JhbENvbmZpZy5ibG9ja090aGVycylcbiAgICBnbG9iYWxDb25maWcub3ZlcmxheUNvbG9yICYmICh0aGlzLmJlYWNvbkdsb2JhbEZvY3VzT3ZlcmxheUNvbG9yID0gZ2xvYmFsQ29uZmlnLm92ZXJsYXlDb2xvcilcbiAgICBnbG9iYWxDb25maWcuZHVwbGljYXRlICYmICh0aGlzLmJlYWNvbkdsb2JhbER1cGxpY2F0ZSA9IGdsb2JhbENvbmZpZy5kdXBsaWNhdGUpXG4gICAgZ2xvYmFsQ29uZmlnLmljb24gJiYgdGhpcy5yZXNvbHZlR2xvYmFsSWNvbkNvbmZpZyhnbG9iYWxDb25maWcuaWNvbilcbiAgICBnbG9iYWxDb25maWcuc3R5bGVDbGFzcyAmJiB0aGlzLnJlc29sdmVHbG9iYWxQcm9wZXJ0eUNvbmZpZyhnbG9iYWxDb25maWcuc3R5bGVDbGFzcywgJ3N0eWxlJylcbiAgICBnbG9iYWxDb25maWcucmVwbGFjZW1lbnRDbGFzcyAmJiB0aGlzLnJlc29sdmVHbG9iYWxQcm9wZXJ0eUNvbmZpZyhnbG9iYWxDb25maWcucmVwbGFjZW1lbnRDbGFzcywgJ2NsYXNzJylcbiAgICBnbG9iYWxDb25maWcuYW5pbWF0aW9uQ2xhc3MgJiYgdGhpcy5yZXNvbHZlR2xvYmFsUHJvcGVydHlDb25maWcoZ2xvYmFsQ29uZmlnLmFuaW1hdGlvbkNsYXNzLCAnYW5pbWF0aW9uJylcbiAgICBnbG9iYWxDb25maWcucG9zaXRpb24gJiYgKHRoaXMuYmVhY29uR2xvYmFsUG9zaXRpb25pbmcgPSBnbG9iYWxDb25maWcucG9zaXRpb24pXG4gICAgZ2xvYmFsQ29uZmlnLm5vSG92ZXJFZmZlY3QgJiYgKHRoaXMuYmVhY29uR2xvYmFsTm9Ib3ZlckVmZmVjdCA9IGdsb2JhbENvbmZpZy5ub0hvdmVyRWZmZWN0KVxuICAgIGdsb2JhbENvbmZpZy5zaGluZVNjYWxlICYmICh0aGlzLmJlYWNvbkdsb2JhbEZvY3VzU2hpbmVTY2FsZSA9IGdsb2JhbENvbmZpZy5zaGluZVNjYWxlKVxuICAgIGdsb2JhbENvbmZpZy5mb250V2VpZ2h0VGl0bGUgJiYgKHRoaXMuYmVhY29uR2xvYmFsRm9udFdlaWdodFRpdGxlID0gZ2xvYmFsQ29uZmlnLmZvbnRXZWlnaHRUaXRsZSlcbiAgICBnbG9iYWxDb25maWcuZm9udFdlaWdodEJvZHkgJiYgKHRoaXMuYmVhY29uR2xvYmFsRm9udFdlaWdodEJvZHkgPSBnbG9iYWxDb25maWcuZm9udFdlaWdodEJvZHkpXG4gIH1cblxuICAvLyBSZXNvbHZlIGdsb2JhbCBjb25maWcgLyBmb3IgcHJvcGVydHlcbiAgcHJpdmF0ZSByZXNvbHZlR2xvYmFsUHJvcGVydHlDb25maWcoY29uZmlnOiBJQmVhY29uVHlwZSwgcHJvcGVydHk6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbmZpZy5hbGVydCAmJiAodGhpcy5iZWFjb25Db25maWdNYXAuYWxlcnRbcHJvcGVydHldID0gY29uZmlnLmFsZXJ0KVxuICAgIGNvbmZpZy5lcnJvciAmJiAodGhpcy5iZWFjb25Db25maWdNYXAuZXJyb3JbcHJvcGVydHldID0gY29uZmlnLmVycm9yKVxuICAgIGNvbmZpZy5pbmZvICYmICh0aGlzLmJlYWNvbkNvbmZpZ01hcC5pbmZvW3Byb3BlcnR5XSA9IGNvbmZpZy5pbmZvKVxuICAgIGNvbmZpZy5zdWNjZXNzICYmICh0aGlzLmJlYWNvbkNvbmZpZ01hcC5zdWNjZXNzW3Byb3BlcnR5XSA9IGNvbmZpZy5zdWNjZXNzKVxuICAgIGNvbmZpZy53YXJuaW5nICYmICh0aGlzLmJlYWNvbkNvbmZpZ01hcC53YXJuaW5nW3Byb3BlcnR5XSA9IGNvbmZpZy53YXJuaW5nKVxuICB9XG5cbiAgLy8gUmVzb2x2ZSBnbG9iYWwgY29uZmlnIC8gZm9yIGljb25zXG4gIHByaXZhdGUgcmVzb2x2ZUdsb2JhbEljb25Db25maWcoY29uZmlnOiBJQmVhY29uVHlwZUljb24pOiB2b2lkIHtcbiAgICBjb25maWc/LmFsZXJ0Py5pY29uICYmICh0aGlzLmJlYWNvbkNvbmZpZ01hcC5hbGVydC5pY29uID0gY29uZmlnLmFsZXJ0Lmljb24pICYmICh0aGlzLmJlYWNvbkNvbmZpZ01hcC5hbGVydC5mb250SWNvbiA9IFN0cmluZygoY29uZmlnPy5hbGVydD8uZm9udEljb24gfHwgZmFsc2UpKSlcbiAgICBjb25maWc/LmVycm9yPy5pY29uICYmICh0aGlzLmJlYWNvbkNvbmZpZ01hcC5lcnJvci5pY29uID0gY29uZmlnLmVycm9yLmljb24pICYmICh0aGlzLmJlYWNvbkNvbmZpZ01hcC5lcnJvci5mb250SWNvbiA9IFN0cmluZygoY29uZmlnPy5lcnJvcj8uZm9udEljb24gfHwgZmFsc2UpKSlcbiAgICBjb25maWc/LmluZm8/Lmljb24gJiYgKHRoaXMuYmVhY29uQ29uZmlnTWFwLmluZm8uaWNvbiA9IGNvbmZpZy5pbmZvLmljb24pICYmICh0aGlzLmJlYWNvbkNvbmZpZ01hcC5pbmZvLmZvbnRJY29uID0gU3RyaW5nKChjb25maWcuaW5mby5mb250SWNvbiB8fCBmYWxzZSkpKVxuICAgIGNvbmZpZz8uc3VjY2Vzcz8uaWNvbiAmJiAodGhpcy5iZWFjb25Db25maWdNYXAuc3VjY2Vzcy5pY29uID0gY29uZmlnLnN1Y2Nlc3MuaWNvbikgJiYgKHRoaXMuYmVhY29uQ29uZmlnTWFwLnN1Y2Nlc3MuZm9udEljb24gPSBTdHJpbmcoKGNvbmZpZy5zdWNjZXNzLmZvbnRJY29uIHx8IGZhbHNlKSkpXG4gICAgY29uZmlnPy53YXJuaW5nPy5pY29uICYmICh0aGlzLmJlYWNvbkNvbmZpZ01hcC53YXJuaW5nLmljb24gPSBjb25maWcud2FybmluZy5pY29uKSAmJiAodGhpcy5iZWFjb25Db25maWdNYXAud2FybmluZy5mb250SWNvbiA9IFN0cmluZygoY29uZmlnLndhcm5pbmcuZm9udEljb24gfHwgZmFsc2UpKSlcbiAgfVxuXG4gIC8vIFJlc29sdmUgYmVhY29uIGV2ZW50c1xuICBwcml2YXRlIHJlc29sdmVCZWFjb25FdmVudHMoKTogdm9pZCB7XG4gICAgdGhpcy5iZWFjb25FdmVudFRhc2tNYXN0ZXIuc3Vic2NyaWJlKChtZXNzYWdlOiBJQmVhY29uRXZlbnRNZXNzYWdlKSA9PiB7XG4gICAgICBjb25zdCBpZCA9IFN0cmluZyhtZXNzYWdlLmlkKVxuICAgICAgaWYgKG1lc3NhZ2UuZGVsZXRlKSB7XG4gICAgICAgIHRoaXMucmVzb2x2ZVBvc3NpYmxlQmxvY2tlZEJlYWNvbnMoaWQpXG4gICAgICAgIHRoaXMucmVzb2x2ZVBvc3NpYmxlUXVldWVkRm9jdXMoaWQpXG4gICAgICAgIHRoaXMucGVyZm9ybUV2ZW50VGFzayhpZCwgeyBvbjogZmFsc2UsIG9mZjogdHJ1ZSB9KVxuICAgICAgICBkZWxldGUgdGhpcy5iZWFjb25TdWJzY3JpYmVkRXZlbnRMaWJyYXJ5W2lkXVxuICAgICAgfSBlbHNlIGlmIChtZXNzYWdlLm1vdW50KSB7XG4gICAgICAgIHRoaXMucGVyZm9ybUV2ZW50VGFzayhpZCwgeyBvbjogdHJ1ZSwgb2ZmOiBmYWxzZSB9KVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICAvLyBQZXJmb3JtIGV2ZW50IHRhc2tcbiAgcHJpdmF0ZSBwZXJmb3JtRXZlbnRUYXNrKGlkOiBzdHJpbmcsIGV2ZW50T2JqZWN0OiBJQmVhY29uRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBzdGFtcCA9IHRoaXMuYmVhY29uU3Vic2NyaWJlZEV2ZW50TGlicmFyeVtpZF1cbiAgICBjb25zdCBldmVudCA9IDxFdmVudEVtaXR0ZXI8SUJlYWNvbkV2ZW50Pj5zdGFtcC5ldmVudFxuICAgIGNvbnN0IG1hbnVhbElkID0gc3RhbXA/Lm1hbnVhbElkPy50b1N0cmluZygpLnJlcGxhY2UoL3VuZGVmaW5lZC8sICcnKVxuICAgIGV2ZW50LmVtaXQoZXZlbnRPYmplY3QpXG4gICAgdGhpcy5iZWFjb25BbGxFdmVudFRhc2tNYXN0ZXIuZW1pdCh7IGlkOiBtYW51YWxJZCB8fCBudWxsLCB0eXBlOiBTdHJpbmcoc3RhbXAudHlwZSksIC4uLmV2ZW50T2JqZWN0IH0pXG5cbiAgICAvLyBDaGVjayBpZiB0aGlzIG1hbnVhbCBpZCBpcyB3YXRjaGVkXG4gICAgaWYgKG1hbnVhbElkICYmIHRoaXMuYmVhY29uV2F0Y2hlZEV2ZW50TGlicmFyeS5oYXMobWFudWFsSWQpKSB7XG4gICAgICB0aGlzLmJlYWNvbldhdGNoZWRFdmVudFRhc2tNYXN0ZXIuZW1pdCh7IGlkOiBtYW51YWxJZCwgdHlwZTogU3RyaW5nKHN0YW1wLnR5cGUpLCAuLi5ldmVudE9iamVjdCB9KVxuICAgICAgLy8gQ2hlY2sgaWYgYmVhY29uIGlzIG9mZlxuICAgICAgaWYgKGV2ZW50T2JqZWN0Lm9mZikgXG4gICAgICAgIHRoaXMuYmVhY29uV2F0Y2hlZEV2ZW50TGlicmFyeS5kZWxldGUobWFudWFsSWQpXG4gICAgfVxuICB9XG5cbiAgLy8gUmVzb2x2ZSBwb3NzaWJsZSBibG9ja2VkIGJlYWNvbnNcbiAgcHJpdmF0ZSByZXNvbHZlUG9zc2libGVCbG9ja2VkQmVhY29ucyhpZDogc3RyaW5nKTogdm9pZCB7XG4gICAgLy8gQ2hlY2sgaWYgdGhpcyBpZCBpcyBibG9ja2luZyBvdGhlcnNcbiAgICBpZiAoaWQgPT0gdGhpcy5iZWFjb25TdWNjZXNzb3JCbG9ja2VyQXV0b0lkKSB7XG4gICAgICBpZiAodGhpcy5iZWFjb25MaWJyYXJ5UXVldWUubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IHF1ZXVlTGVuZ3RoID0gdGhpcy5iZWFjb25MaWJyYXJ5UXVldWUubGVuZ3RoXG4gICAgICAgIC8vIExvb3AgdGhyb3VnaCBxdWV1ZVxuICAgICAgICBmb3IgKGxldCB4ID0gMDsgeCA8IHF1ZXVlTGVuZ3RoOyB4KyspIHtcbiAgICAgICAgICBjb25zdCBuZXh0SW5MaW5lID0gPElCZWFjb25Db25maWc+dGhpcy5iZWFjb25MaWJyYXJ5UXVldWUuc2hpZnQoKVxuXG4gICAgICAgICAgLy8gQWRkIG1lc3NhZ2UgdG8gbGlicmFyeVxuICAgICAgICAgIGlmICh0aGlzLmdldEJlYWNvbkdsb2JhbFBvc2l0aW9uQ29uZmlnPy50b3BCb3R0b20gPT0gJ3RvcCcpXG4gICAgICAgICAgICB0aGlzLmJlYWNvbkxpYnJhcnkudW5zaGlmdChuZXh0SW5MaW5lKVxuICAgICAgICAgIGVsc2UgdGhpcy5iZWFjb25MaWJyYXJ5LnB1c2gobmV4dEluTGluZSkgICAgXG5cbiAgICAgICAgICAvLyBDaGVjayBpZiBzZXQgdG8gYmxvY2tcbiAgICAgICAgICBpZiAobmV4dEluTGluZS5ibG9ja090aGVycykge1xuICAgICAgICAgICAgdGhpcy5iZWFjb25TdWNjZXNzb3JCbG9ja2VyQXV0b0lkID0gbmV4dEluTGluZS5iaWRcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ2hlY2sgaWYgbm8gbmV3IGJlYWNvbiBpcyBzZXQgYXMgYmxvY2tlciBhbmQgdW5zZXQgcHJldmlvdXMgdmFsdWVcbiAgICAgICAgaWYgKGlkID09IHRoaXMuYmVhY29uU3VjY2Vzc29yQmxvY2tlckF1dG9JZCkgXG4gICAgICAgICAgdGhpcy5iZWFjb25TdWNjZXNzb3JCbG9ja2VyQXV0b0lkID0gdW5kZWZpbmVkXG4gICAgICB9XG4gICAgICBlbHNlIHRoaXMuYmVhY29uU3VjY2Vzc29yQmxvY2tlckF1dG9JZCA9IHVuZGVmaW5lZFxuICAgIH1cbiAgfVxuXG4gIC8vIFJlc29sdmUgcXVldWVkIGJlYWNvbiBmb2N1c1xuICBwcml2YXRlIHJlc29sdmVQb3NzaWJsZVF1ZXVlZEZvY3VzKGlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAvLyBDaGVjayBpZiB0aGlzIGlkIGlzIGFjdGl2ZSBmb2N1cyBiZWFjb25cbiAgICBpZiAoaWQgPT0gdGhpcy5iZWFjb25XaXRoQWN0aXZlRm9jdXNBdXRvSWQpIHtcbiAgICAgIGlmICh0aGlzLmJlYWNvbkZvY3VzT3JkZXJMaWJyYXJ5Lmxlbmd0aCkge1xuICAgICAgICAvLyBQYXNzIHRoZSBuZXh0IGZvY3VzXG4gICAgICAgIHRoaXMuYmVhY29uV2l0aEFjdGl2ZUZvY3VzQXV0b0lkID0gdGhpcy5iZWFjb25Gb2N1c09yZGVyTGlicmFyeS5zaGlmdCgpXG4gICAgICAgIHRoaXMuYmVhY29uRXZlbnRUYXNrTWFzdGVyLmVtaXQoeyBhdXRvRGV0ZWN0TmV4dEZvY3VzQmVhY29uOiB0cnVlIH0pXG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgdGhpcy5iZWFjb25XaXRoQWN0aXZlRm9jdXNBdXRvSWQgPSB1bmRlZmluZWRcbiAgICAgICAgdGhpcy5kZXN0cm95QmVhY29uRm9jdXNPdmVybGF5KClcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBHZW5lcmF0ZSB1bmlxdWUgaWQgZm9yIGl0ZW1cbiAgcHJpdmF0ZSBnZXQgZ2V0SWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhuZXcgVWludDMyQXJyYXkoMikpLnRvU3RyaW5nKCkuc3BsaXQoJywnKS5qb2luKCcnKVxuICB9XG5cbiAgLy8gU2V0IGJlYWNvbiBjb250YWluZXJcbiAgcHVibGljIHNldEJlYWNvbkNvbnRhaW5lcihjb250YWluZXI6IEVsZW1lbnRSZWYpOiB2b2lkIHtcbiAgICB0aGlzLmJlYWNvbkNvbnRhaW5lciA9IGNvbnRhaW5lclxuICB9XG5cbiAgLy8gR2V0IGJlYWNvbiBjb250YWluZXJcbiAgcHVibGljIGdldCBnZXRCZWFjb25Db250YWluZXIoKTogRWxlbWVudFJlZiB7XG4gICAgcmV0dXJuIHRoaXMuYmVhY29uQ29udGFpbmVyXG4gIH1cblxuICAvLyBHZXQgYmVhY29uIGdsb2JhbCBwb3NpdGlvbiBjb25maWdcbiAgcHVibGljIGdldCBnZXRCZWFjb25HbG9iYWxQb3NpdGlvbkNvbmZpZygpOiBJQmVhY29uUG9zaXRpb25Db25maWcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmJlYWNvbkdsb2JhbFBvc2l0aW9uaW5nXG4gIH1cblxuICAvLyBHZXQgZGVmYXVsdCBpY29uIGtleXNcbiAgcHVibGljIGdldCBnZXRCZWFjb25EZWZhdWx0SWNvbktleXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLmJlYWNvbkRlZmF1bHRJY29uS2V5c1xuICB9XG5cbiAgLy8gR2V0IGFjdGl2ZSBmb2N1cyBiZWFjb24gaWRcbiAgcHVibGljIGdldCBnZXRBY3RpdmVGb2N1c0JlYWNvbklkKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuYmVhY29uV2l0aEFjdGl2ZUZvY3VzQXV0b0lkXG4gIH1cblxuICAvLyBDcmVhdGUgb3ZlcmxheSBmb3IgZm9jdXNlZCBiZWFjb25cbiAgcHVibGljIGNyZWF0ZUJlYWNvbkZvY3VzT3ZlcmxheShvdmVybGF5Q29sb3I/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBvdmVybGF5ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylcbiAgICBvdmVybGF5LnNldEF0dHJpYnV0ZSgnaWQnLCBCRUFDT05fT1ZFUkxBWV9JRClcbiAgICBvdmVybGF5LnN0eWxlLnBvc2l0aW9uID0gJ2ZpeGVkJ1xuICAgIG92ZXJsYXkuc3R5bGUudG9wID0gJzAnXG4gICAgb3ZlcmxheS5zdHlsZS5ib3R0b20gPSAnMCdcbiAgICBvdmVybGF5LnN0eWxlLnJpZ2h0ID0gJzAnXG4gICAgb3ZlcmxheS5zdHlsZS5sZWZ0ID0gJzAnXG4gICAgb3ZlcmxheS5zdHlsZS56SW5kZXggPSAnOTAwMidcbiAgICBvdmVybGF5LnN0eWxlLmJhY2tncm91bmQgPSBvdmVybGF5Q29sb3IgfHwgdGhpcy5iZWFjb25HbG9iYWxGb2N1c092ZXJsYXlDb2xvciB8fCBCRUFDT05fT1ZFUkxBWV9DT0xPUlxuICAgIGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJ1xuXG4gICAgLy8gUGFzcyBvdmVybGF5IGVsZW1lbnRcbiAgICB0aGlzLmJlYWNvbkZvY3VzT3ZlcmxheURPTSA9IG92ZXJsYXlcblxuICAgIHRoaXMuYmVhY29uQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuYXBwZW5kQ2hpbGQob3ZlcmxheSlcbiAgfVxuXG4gIC8vIFJlcGFpbnQgb3ZlcmxheSBmb3IgZm9jdXNlZCBiZWFjb25cbiAgcHVibGljIHJlcGFpbnRCZWFjb25Gb2N1c092ZXJsYXkob3ZlcmxheUNvbG9yPzogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuYmVhY29uRm9jdXNPdmVybGF5RE9NKVxuICAgICAgdGhpcy5iZWFjb25Gb2N1c092ZXJsYXlET00uc3R5bGUuYmFja2dyb3VuZCA9IG92ZXJsYXlDb2xvciB8fCB0aGlzLmJlYWNvbkdsb2JhbEZvY3VzT3ZlcmxheUNvbG9yIHx8IEJFQUNPTl9PVkVSTEFZX0NPTE9SXG4gIH1cblxuICAvLyBEZXN0cm95IG92ZXJsYXkgZm9yIGZvY3VzZWQgYmVhY29uXG4gIHB1YmxpYyBkZXN0cm95QmVhY29uRm9jdXNPdmVybGF5KCk6IHZvaWQge1xuICAgIGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3cgPSAnYXV0bydcbiAgICB0aGlzLmJlYWNvbkNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ2RpdiMnICsgQkVBQ09OX09WRVJMQVlfSUQpLnJlbW92ZSgpXG4gICAgdGhpcy5iZWFjb25Gb2N1c092ZXJsYXlET00gPSB1bmRlZmluZWRcbiAgfVxuXG4gIC8vIFNldCBpZCBmb3IgYmVhY29uXG4gIHB1YmxpYyBpZChpZDogc3RyaW5nKTogQmVhY29uTm90aWZ5U2VydmljZSB7XG4gICAgaWQgJiYgKHRoaXMuYmVhY29uTWFudWFsSWQgPSBpZClcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLy8gU2V0IG5vdGlmaWNhdGlvbiB0aXRsZVxuICBwdWJsaWMgdGl0bGUodGl0bGU6IHN0cmluZyk6IEJlYWNvbk5vdGlmeVNlcnZpY2Uge1xuICAgIHRpdGxlICYmICh0aGlzLmJlYWNvblRpdGxlID0gdGl0bGUpXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8vIFNldCBub3RpZmljYXRpb24gbWVzc2FnZVxuICBwdWJsaWMgbWVzc2FnZShtZXNzYWdlOiBzdHJpbmcpOiBCZWFjb25Ob3RpZnlTZXJ2aWNlIHtcbiAgICBtZXNzYWdlICYmICh0aGlzLmJlYWNvbk1lc3NhZ2UgPSBtZXNzYWdlKVxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvLyBIaWdobGlnaHQgaWQgb2YgYmVhY29uIHRvIHVwZGF0ZVxuICBwdWJsaWMgc2VsZWN0KGlkOiBzdHJpbmcpOiBCZWFjb25Ob3RpZnlTZXJ2aWNlIHtcbiAgICBpZCAmJiAodGhpcy5iZWFjb25TZWxlY3RlZE1hbnVhbElkID0gaWQpXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8vIENoYW5nZSBub3RpZmljYXRpb24gdGl0bGVcbiAgcHVibGljIHNldFRpdGxlKHRpdGxlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAvLyBDaGVjayBmb3IgYWN0aXZlIG1hbnVhbCBpZCAvIGFuZCBpZiBhIGJlYWNvbiBpcyB0aWVkIHRvIGl0XG4gICAgaWYgKHRoaXMuYmVhY29uU2VsZWN0ZWRNYW51YWxJZCkge1xuICAgICAgY29uc3QgYmVhY29uSW5kZXggPSB0aGlzLmJlYWNvbkxpYnJhcnkuZmluZEluZGV4KHggPT4geC5taWQgPT0gdGhpcy5iZWFjb25TZWxlY3RlZE1hbnVhbElkKVxuICAgICAgaWYgKGJlYWNvbkluZGV4ID49IDApXG4gICAgICAgIHRoaXMuYmVhY29uTGlicmFyeVtiZWFjb25JbmRleF0udGl0bGUgPSB0aXRsZVxuICAgIH1cbiAgfVxuXG4gIC8vIENoYW5nZSBub3RpZmljYXRpb24gbWVzc2FnZVxuICBwdWJsaWMgc2V0TWVzc2FnZShtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAvLyBDaGVjayBmb3IgYWN0aXZlIG1hbnVhbCBpZCAvIGFuZCBpZiBhIGJlYWNvbiBpcyB0aWVkIHRvIGl0XG4gICAgaWYgKHRoaXMuYmVhY29uU2VsZWN0ZWRNYW51YWxJZCkge1xuICAgICAgY29uc3QgYmVhY29uSW5kZXggPSB0aGlzLmJlYWNvbkxpYnJhcnkuZmluZEluZGV4KHggPT4geC5taWQgPT0gdGhpcy5iZWFjb25TZWxlY3RlZE1hbnVhbElkKVxuICAgICAgaWYgKGJlYWNvbkluZGV4ID49IDApXG4gICAgICAgIHRoaXMuYmVhY29uTGlicmFyeVtiZWFjb25JbmRleF0uYm9keSA9IG1lc3NhZ2VcbiAgICB9XG4gIH1cblxuICAvLyBDaGFuZ2Ugbm90aWZpY2F0aW9uIHRpdGxlICYgbWVzc2FnZVxuICBwdWJsaWMgc2V0Q29udGVudCh0aXRsZTogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAvLyBDaGVjayBmb3IgYWN0aXZlIG1hbnVhbCBpZCAvIGFuZCBpZiBhIGJlYWNvbiBpcyB0aWVkIHRvIGl0XG4gICAgaWYgKHRoaXMuYmVhY29uU2VsZWN0ZWRNYW51YWxJZCkge1xuICAgICAgY29uc3QgYmVhY29uSW5kZXggPSB0aGlzLmJlYWNvbkxpYnJhcnkuZmluZEluZGV4KHggPT4geC5taWQgPT0gdGhpcy5iZWFjb25TZWxlY3RlZE1hbnVhbElkKVxuICAgICAgaWYgKGJlYWNvbkluZGV4ID49IDApXG4gICAgICAgIHRoaXMuYmVhY29uTGlicmFyeVtiZWFjb25JbmRleF0udGl0bGUgPSB0aXRsZVxuICAgICAgICB0aGlzLmJlYWNvbkxpYnJhcnlbYmVhY29uSW5kZXhdLmJvZHkgPSBtZXNzYWdlXG4gICAgfVxuICB9XG5cbiAgLy8gVXBkYXRlIGJlYWNvbiBidXR0b24gMVxuICBwdWJsaWMgc2V0QnV0dG9uT25lKHRleHQ6IHN0cmluZywgY2FuRGlzbWlzcz86IGJvb2xlYW4gfCBudWxsLCBjYWxsYmFjaz86IGFueSwgY2FsbGJhY2tBcmdzPzogYW55W10gfCBudWxsLCBwb3NpdGlvbj86ICdsZWZ0JyB8ICdjZW50ZXInIHwgJ3JpZ2h0Jyk6IHZvaWQge1xuICAgIC8vIENoZWNrIGZvciBhY3RpdmUgbWFudWFsIGlkIC8gYW5kIGlmIGEgYmVhY29uIGlzIHRpZWQgdG8gaXRcbiAgICBpZiAodGhpcy5iZWFjb25TZWxlY3RlZE1hbnVhbElkKSB7XG4gICAgICBjb25zdCBiZWFjb25JbmRleCA9IHRoaXMuYmVhY29uTGlicmFyeS5maW5kSW5kZXgoeCA9PiB4Lm1pZCA9PSB0aGlzLmJlYWNvblNlbGVjdGVkTWFudWFsSWQpXG4gICAgICBpZiAoYmVhY29uSW5kZXggPj0gMCkge1xuICAgICAgICAoPElCZWFjb25CdXR0b25UeXBlPnRoaXMuYmVhY29uTGlicmFyeVtiZWFjb25JbmRleF0uYnV0dG9ucykub25lID0ge1xuICAgICAgICAgIHRleHQ6IHRleHQuc3Vic3RyaW5nKDAsIDE1KSxcbiAgICAgICAgICBjYW5EaXNtaXNzLFxuICAgICAgICAgIGNhbGxiYWNrLFxuICAgICAgICAgIGNhbGxiYWNrQXJncyxcbiAgICAgICAgICBwb3NpdGlvblxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gVXBkYXRlIGJlYWNvbiBidXR0b24gMlxuICBwdWJsaWMgc2V0QnV0dG9uVHdvKHRleHQ6IHN0cmluZywgY2FuRGlzbWlzcz86IGJvb2xlYW4gfCBudWxsLCBjYWxsYmFjaz86IGFueSwgY2FsbGJhY2tBcmdzPzogYW55W10gfCBudWxsLCBwb3NpdGlvbj86ICdsZWZ0JyB8ICdjZW50ZXInIHwgJ3JpZ2h0Jyk6IHZvaWQge1xuICAgIC8vIENoZWNrIGZvciBhY3RpdmUgbWFudWFsIGlkIC8gYW5kIGlmIGEgYmVhY29uIGlzIHRpZWQgdG8gaXRcbiAgICBpZiAodGhpcy5iZWFjb25TZWxlY3RlZE1hbnVhbElkKSB7XG4gICAgICBjb25zdCBiZWFjb25JbmRleCA9IHRoaXMuYmVhY29uTGlicmFyeS5maW5kSW5kZXgoeCA9PiB4Lm1pZCA9PSB0aGlzLmJlYWNvblNlbGVjdGVkTWFudWFsSWQpXG4gICAgICBpZiAoYmVhY29uSW5kZXggPj0gMCkge1xuICAgICAgICBpZiAodGhpcy5iZWFjb25MaWJyYXJ5W2JlYWNvbkluZGV4XS5idXR0b25zPy5vbmUpIHtcbiAgICAgICAgICAoPElCZWFjb25CdXR0b25UeXBlPnRoaXMuYmVhY29uTGlicmFyeVtiZWFjb25JbmRleF0uYnV0dG9ucykudHdvID0ge1xuICAgICAgICAgICAgdGV4dDogdGV4dC5zdWJzdHJpbmcoMCwgMTUpLFxuICAgICAgICAgICAgY2FuRGlzbWlzcyxcbiAgICAgICAgICAgIGNhbGxiYWNrLFxuICAgICAgICAgICAgY2FsbGJhY2tBcmdzLFxuICAgICAgICAgICAgcG9zaXRpb25cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB0aGlzLnNldEJ1dHRvbk9uZSh0ZXh0LCBjYW5EaXNtaXNzLCBjYWxsYmFjaywgY2FsbGJhY2tBcmdzLCBwb3NpdGlvbilcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBSZW1vdmUgYmVhY29uIGJ1dHRvbiAxXG4gIHB1YmxpYyByZW1vdmVCdXR0b25PbmUoKTogdm9pZCB7XG4gICAgLy8gQ2hlY2sgZm9yIGFjdGl2ZSBtYW51YWwgaWQgLyBhbmQgaWYgYSBiZWFjb24gaXMgdGllZCB0byBpdFxuICAgIGlmICh0aGlzLmJlYWNvblNlbGVjdGVkTWFudWFsSWQpIHtcbiAgICAgIGNvbnN0IGJlYWNvbkluZGV4ID0gdGhpcy5iZWFjb25MaWJyYXJ5LmZpbmRJbmRleCh4ID0+IHgubWlkID09IHRoaXMuYmVhY29uU2VsZWN0ZWRNYW51YWxJZClcbiAgICAgIGlmIChiZWFjb25JbmRleCA+PSAwKSB7XG4gICAgICAgICg8SUJlYWNvbkJ1dHRvblR5cGU+dGhpcy5iZWFjb25MaWJyYXJ5W2JlYWNvbkluZGV4XS5idXR0b25zKS5vbmUgPSB1bmRlZmluZWRcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBSZW1vdmUgYmVhY29uIGJ1dHRvbiAyXG4gIHB1YmxpYyByZW1vdmVCdXR0b25Ud28oKTogdm9pZCB7XG4gICAgLy8gQ2hlY2sgZm9yIGFjdGl2ZSBtYW51YWwgaWQgLyBhbmQgaWYgYSBiZWFjb24gaXMgdGllZCB0byBpdFxuICAgIGlmICh0aGlzLmJlYWNvblNlbGVjdGVkTWFudWFsSWQpIHtcbiAgICAgIGNvbnN0IGJlYWNvbkluZGV4ID0gdGhpcy5iZWFjb25MaWJyYXJ5LmZpbmRJbmRleCh4ID0+IHgubWlkID09IHRoaXMuYmVhY29uU2VsZWN0ZWRNYW51YWxJZClcbiAgICAgIGlmIChiZWFjb25JbmRleCA+PSAwKSB7XG4gICAgICAgICg8SUJlYWNvbkJ1dHRvblR5cGU+dGhpcy5iZWFjb25MaWJyYXJ5W2JlYWNvbkluZGV4XS5idXR0b25zKS50d28gPSB1bmRlZmluZWRcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBSZW1vdmUgYmVhY29uIGJ1dHRvbnNcbiAgcHVibGljIHJlbW92ZUJ1dHRvbnMoKTogdm9pZCB7XG4gICAgLy8gQ2hlY2sgZm9yIGFjdGl2ZSBtYW51YWwgaWQgLyBhbmQgaWYgYSBiZWFjb24gaXMgdGllZCB0byBpdFxuICAgIGlmICh0aGlzLmJlYWNvblNlbGVjdGVkTWFudWFsSWQpIHtcbiAgICAgIGNvbnN0IGJlYWNvbkluZGV4ID0gdGhpcy5iZWFjb25MaWJyYXJ5LmZpbmRJbmRleCh4ID0+IHgubWlkID09IHRoaXMuYmVhY29uU2VsZWN0ZWRNYW51YWxJZClcbiAgICAgIGlmIChiZWFjb25JbmRleCA+PSAwKSB7XG4gICAgICAgICg8SUJlYWNvbkJ1dHRvblR5cGU+dGhpcy5iZWFjb25MaWJyYXJ5W2JlYWNvbkluZGV4XS5idXR0b25zKS5vbmUgPSB1bmRlZmluZWQ7XG4gICAgICAgICg8SUJlYWNvbkJ1dHRvblR5cGU+dGhpcy5iZWFjb25MaWJyYXJ5W2JlYWNvbkluZGV4XS5idXR0b25zKS50d28gPSB1bmRlZmluZWRcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBTZXQgYmVhY29uIGFzIHN0YXRpYyBvciB3aXRoIGRlbGF5XG4gIHB1YmxpYyBzdGF0aWMoZGVsYXk/OiBudW1iZXIpOiBCZWFjb25Ob3RpZnlTZXJ2aWNlIHtcbiAgICB0aGlzLmJlYWNvblN0YXRpYyA9IGRlbGF5IHx8IHRydWVcbiAgICB0aGlzLmJlYWNvbkZpeGVkID0gdW5kZWZpbmVkXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8vIFNldCBiZWFjb24gYXMgZml4ZWQgd2hpY2ggcmVtb3ZlcyB0aGUgY2xvc2UgYnV0dG9uIGFuZCBkaXNhbGxvd3MgY2xvc2Ugb24gY2xpY2tcbiAgcHVibGljIGZpeGVkKCk6IEJlYWNvbk5vdGlmeVNlcnZpY2Uge1xuICAgIHRoaXMuYmVhY29uU3RhdGljID0gdW5kZWZpbmVkXG4gICAgdGhpcy5iZWFjb25GaXhlZCA9IHRydWVcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLy8gQWxsb3cgYmVhY29uIHRvIGJsb2NrIG90aGVyc1xuICBwdWJsaWMgYmxvY2soKTogQmVhY29uTm90aWZ5U2VydmljZSB7XG4gICAgdGhpcy5iZWFjb25CbG9ja090aGVycyA9IHRydWVcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLy8gRm9jdXMgb24gYmVhY29uXG4gIHB1YmxpYyBmb2N1cyhvdmVybGF5Q29sb3I/OiBzdHJpbmcpOiBCZWFjb25Ob3RpZnlTZXJ2aWNlIHtcbiAgICBvdmVybGF5Q29sb3IgJiYgKHRoaXMuYmVhY29uT3ZlcmxheUNvbG9yID0gb3ZlcmxheUNvbG9yKVxuICAgIHRoaXMuYmVhY29uRm9jdXMgPSB0cnVlXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8vIEZvY3VzIGJlYWNvbiBvbiBjZW50ZXIgc2NyZWVuXG4gIHB1YmxpYyBzaGluZShzY2FsZT86IG51bWJlciwgb3ZlcmxheUNvbG9yPzogc3RyaW5nKTogQmVhY29uTm90aWZ5U2VydmljZSB7XG4gICAgb3ZlcmxheUNvbG9yICYmICh0aGlzLmJlYWNvbk92ZXJsYXlDb2xvciA9IG92ZXJsYXlDb2xvcilcbiAgICB0aGlzLmJlYWNvbkZvY3VzU2hpbmUgPSB0aGlzLmJlYWNvbkZvY3VzID0gdHJ1ZVxuICAgIHNjYWxlICYmICh0aGlzLmJlYWNvbkZvY3VzU2hpbmVTY2FsZSA9IHNjYWxlKVxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvLyBBZGQgYnV0dG9uIGZvciBiZWFjb25cbiAgcHVibGljIGJ1dHRvbih0ZXh0OiBzdHJpbmcsIGNhbkRpc21pc3M/OiBib29sZWFuIHwgbnVsbCwgY2FsbGJhY2s/OiBhbnksIGNhbGxiYWNrQXJncz86IGFueVtdIHwgbnVsbCwgcG9zaXRpb24/OiAnbGVmdCcgfCAnY2VudGVyJyB8ICdyaWdodCcpOiBCZWFjb25Ob3RpZnlTZXJ2aWNlIHtcbiAgICBpZiAoIXRoaXMuYmVhY29uQnV0dG9ucz8ub25lKSB7XG4gICAgICB0aGlzLmJlYWNvbkJ1dHRvbnMub25lID0ge1xuICAgICAgICB0ZXh0OiB0ZXh0LnN1YnN0cmluZygwLCAxNSksXG4gICAgICAgIGNhbkRpc21pc3MsXG4gICAgICAgIGNhbGxiYWNrLFxuICAgICAgICBjYWxsYmFja0FyZ3MsXG4gICAgICAgIHBvc2l0aW9uXG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLmJlYWNvbkJ1dHRvbnMub25lICYmICF0aGlzLmJlYWNvbkJ1dHRvbnMudHdvKSB7XG4gICAgICB0aGlzLmJlYWNvbkJ1dHRvbnMudHdvID0ge1xuICAgICAgICB0ZXh0OiB0ZXh0LnN1YnN0cmluZygwLCAxNSksXG4gICAgICAgIGNhbkRpc21pc3MsXG4gICAgICAgIGNhbGxiYWNrLFxuICAgICAgICBjYWxsYmFja0FyZ3MsXG4gICAgICAgIHBvc2l0aW9uXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8vIEFsbG93IGR1cGxpY2F0ZSBmb3IgYmVhY29uXG4gIHB1YmxpYyBkdXBsaWNhdGUoKTogQmVhY29uTm90aWZ5U2VydmljZSB7XG4gICAgdGhpcy5iZWFjb25BbGxvd0R1cGxpY2F0ZSA9IHRydWVcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLy8gU2V0IGNvbmZpZyB2YWx1ZXMgZm9yIGJlYWNvblxuICBwdWJsaWMgYnVpbGQoY29uZmlnOiBJQmVhY29uSW5saW5lQ29uZmlnKTogQmVhY29uTm90aWZ5U2VydmljZSB7XG4gICAgaWYgKGNvbmZpZy5zdGF0aWMpIHtcbiAgICAgIGlmICh0eXBlb2YgY29uZmlnLnN0YXRpYyA9PSAnYm9vbGVhbicpXG4gICAgICAgIHRoaXMuc3RhdGljKClcbiAgICAgIGVsc2UgdGhpcy5zdGF0aWMoTnVtYmVyKGNvbmZpZy5zdGF0aWMpKVxuICAgIH1cblxuICAgIGNvbmZpZy5maXhlZCAmJiB0aGlzLmZpeGVkKClcbiAgICBjb25maWcuZHVwbGljYXRlICYmIHRoaXMuZHVwbGljYXRlKClcbiAgICBjb25maWcucHJldmVudENsaWNrQ2xvc2UgJiYgKHRoaXMuYmVhY29uUHJldmVudENsaWNrQ2xvc2UgPSBjb25maWcucHJldmVudENsaWNrQ2xvc2UpXG4gICAgY29uZmlnLmJsb2NrT3RoZXJzICYmICh0aGlzLmJlYWNvbkJsb2NrT3RoZXJzID0gY29uZmlnLmJsb2NrT3RoZXJzKVxuICAgIGNvbmZpZy5mb2N1cyAmJiAodGhpcy5iZWFjb25Gb2N1cyA9IGNvbmZpZy5mb2N1cylcbiAgICBjb25maWcuc2hpbmUgJiYgKHRoaXMuYmVhY29uRm9jdXNTaGluZSA9IHRoaXMuYmVhY29uRm9jdXMgPSBjb25maWcuc2hpbmUpXG4gICAgY29uZmlnLmljb24gJiYgKHRoaXMuYmVhY29uSWNvbiA9IGNvbmZpZy5pY29uKVxuICAgIGNvbmZpZy5mb250SWNvbiAmJiAodGhpcy5iZWFjb25JY29uRnJvbUZvbnQgPSBjb25maWcuZm9udEljb24pXG4gICAgY29uZmlnLnN0eWxlQ2xhc3MgJiYgKHRoaXMuYmVhY29uU3R5bGVDbGFzcyA9IGNvbmZpZy5zdHlsZUNsYXNzKVxuICAgIGNvbmZpZy5yZXBsYWNlbWVudENsYXNzICYmICh0aGlzLmJlYWNvblJlcGxhY2VtZW50Q2xhc3MgPSBjb25maWcucmVwbGFjZW1lbnRDbGFzcylcbiAgICBjb25maWcuYW5pbWF0aW9uQ2xhc3MgJiYgKHRoaXMuYmVhY29uQW5pbWF0aW9uQ2xhc3MgPSBjb25maWcuYW5pbWF0aW9uQ2xhc3MpXG4gICAgY29uZmlnLmFuaW1hdGlvbkNsYXNzICYmICh0aGlzLmJlYWNvbkFuaW1hdGlvbkNsYXNzID0gY29uZmlnLmFuaW1hdGlvbkNsYXNzKVxuICAgIGNvbmZpZy5vdmVybGF5Q29sb3IgJiYgKHRoaXMuYmVhY29uT3ZlcmxheUNvbG9yID0gY29uZmlnLm92ZXJsYXlDb2xvcilcbiAgICBjb25maWcubm9Ib3ZlckVmZmVjdCAmJiAodGhpcy5iZWFjb25Ob0hvdmVyRWZmZWN0ID0gY29uZmlnLm5vSG92ZXJFZmZlY3QpXG4gICAgY29uZmlnLnNoaW5lU2NhbGUgJiYgKHRoaXMuYmVhY29uRm9jdXNTaGluZVNjYWxlID0gY29uZmlnLnNoaW5lU2NhbGUpXG4gICAgY29uZmlnLmZvbnRXZWlnaHRUaXRsZSAmJiAodGhpcy5iZWFjb25Gb250V2VpZ2h0VGl0bGUgPSBjb25maWcuZm9udFdlaWdodFRpdGxlKVxuICAgIGNvbmZpZy5mb250V2VpZ2h0Qm9keSAmJiAodGhpcy5iZWFjb25Gb250V2VpZ2h0Qm9keSA9IGNvbmZpZy5mb250V2VpZ2h0Qm9keSlcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLy8gY3JlYXRlIG5vdGlmaWNhdGlvbiBiZWFjb25cbiAgcHJpdmF0ZSBiZWFjb24obWVzc2FnZTogc3RyaW5nLCB0eXBlOiBzdHJpbmcpOiBFdmVudEVtaXR0ZXI8SUJlYWNvbkV2ZW50PiB7XG4gICAgLy8gR2V0IHNpZ25hdHVyZVxuICAgIGNvbnN0IHNpZ25hdHVyZSA9IEJ1ZmZlci5mcm9tKCh0aGlzLmJlYWNvblRpdGxlIHx8IHRoaXMuYmVhY29uQ29uZmlnTWFwW3R5cGVdLnRpdGxlKSArICcuJyArIG1lc3NhZ2UpLnRvU3RyaW5nKCdiYXNlNjQnKVxuICAgIC8vIEdlbmVyYXRlIGJlYWNvbiBpZFxuICAgIGNvbnN0IGJlYWNvbklkID0gdGhpcy5nZXRJZFxuICAgIC8vIFJlZ2lzdGVyIGJlYWNvbiBpbiBldmVudCBsaWJyYXJ5XG4gICAgdGhpcy5iZWFjb25TdWJzY3JpYmVkRXZlbnRMaWJyYXJ5W2JlYWNvbklkXSA9IE9iamVjdC5jcmVhdGUoe30pXG4gICAgLy8gQ2hlY2sgZm9yIGR1cGxpY2F0ZSBpZiBzZXQgdG8gcHJldmVudCBvciBwcm9jZWVkIGlmIHR1cm5lZCBvZmZcbiAgICBpZiAoaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSAmJiBcbiAgICAgICh0aGlzLmJlYWNvbkFsbG93RHVwbGljYXRlIHx8ICgoW3VuZGVmaW5lZCwgZmFsc2VdLmluY2x1ZGVzKHRoaXMuYmVhY29uR2xvYmFsRHVwbGljYXRlKSAmJiB0aGlzLmlzTmV3QmVhY29uQUR1cGxpY2F0ZShzaWduYXR1cmUpID09ICExKSB8fCB0aGlzLmJlYWNvbkdsb2JhbER1cGxpY2F0ZSkpKSB7XG4gICAgICBjb25zdCBiZWFjb25PYmplY3Q6IElCZWFjb25Db25maWcgPSB7XG4gICAgICAgIGJpZDogYmVhY29uSWQsXG4gICAgICAgIG1pZDogdGhpcy5iZWFjb25NYW51YWxJZCxcbiAgICAgICAgdHlwZTogdGhpcy5iZWFjb25Db25maWdNYXBbdHlwZV0uY2xhc3MsXG4gICAgICAgIGljb246IHRoaXMuYmVhY29uSWNvbiB8fCB0aGlzLmJlYWNvbkNvbmZpZ01hcFt0eXBlXS5pY29uLFxuICAgICAgICBmb250SWNvbjogdGhpcy5iZWFjb25JY29uRnJvbUZvbnQgfHwgKHRoaXMuYmVhY29uQ29uZmlnTWFwW3R5cGVdLmZvbnRJY29uID09ICd0cnVlJyA/IHRydWUgOiB1bmRlZmluZWQpLFxuICAgICAgICB0aXRsZTogdGhpcy5iZWFjb25UaXRsZSB8fCB0aGlzLmJlYWNvbkNvbmZpZ01hcFt0eXBlXS50aXRsZSxcbiAgICAgICAgc3RhdGljOiB0aGlzLmJlYWNvblN0YXRpYyB8fCB0aGlzLmJlYWNvbkdsb2JhbFN0YXRpYyxcbiAgICAgICAgZml4ZWQ6IHRoaXMuYmVhY29uRml4ZWQgfHwgdGhpcy5iZWFjb25HbG9iYWxGaXhlZCxcbiAgICAgICAgcHJldmVudENsaWNrQ2xvc2U6IHRoaXMuYmVhY29uUHJldmVudENsaWNrQ2xvc2UgfHwgdGhpcy5iZWFjb25HbG9iYWxQcmV2ZW50Q2xpY2tDbG9zZSxcbiAgICAgICAgc3R5bGVDbGFzczogdGhpcy5iZWFjb25TdHlsZUNsYXNzIHx8IHRoaXMuYmVhY29uQ29uZmlnTWFwW3R5cGVdLnN0eWxlLFxuICAgICAgICByZXBsYWNlbWVudENsYXNzOiB0aGlzLmJlYWNvblJlcGxhY2VtZW50Q2xhc3MsXG4gICAgICAgIGFuaW1hdGlvbkNsYXNzOiB0aGlzLmJlYWNvbkFuaW1hdGlvbkNsYXNzIHx8IHRoaXMuYmVhY29uQ29uZmlnTWFwW3R5cGVdLmFuaW1hdGlvbiB8fCB0aGlzLmJlYWNvbkRlZmF1bHRBbmltYXRpb25DbGFzc05hbWUsXG4gICAgICAgIGJsb2NrT3RoZXJzOiB0aGlzLmJlYWNvbkJsb2NrT3RoZXJzIHx8IHRoaXMuYmVhY29uR2xvYmFsQmxvY2tPdGhlcnMsXG4gICAgICAgIGJ1dHRvbnM6IHRoaXMuYmVhY29uQnV0dG9ucyxcbiAgICAgICAgb3ZlcmxheUNvbG9yOiB0aGlzLmJlYWNvbk92ZXJsYXlDb2xvcixcbiAgICAgICAgYm9keUh0bWw6IDxTYWZlSHRtbD50aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0SHRtbChtZXNzYWdlKSxcbiAgICAgICAgYm9keTogbWVzc2FnZSxcbiAgICAgICAgZm9jdXM6IHRoaXMuYmVhY29uRm9jdXMsXG4gICAgICAgIHNoaW5lOiB0aGlzLmJlYWNvbkZvY3VzU2hpbmUsXG4gICAgICAgIG5vSG92ZXJFZmZlY3Q6IHRoaXMuYmVhY29uTm9Ib3ZlckVmZmVjdCB8fCB0aGlzLmJlYWNvbkdsb2JhbE5vSG92ZXJFZmZlY3QsXG4gICAgICAgIHNoaW5lU2NhbGU6IHRoaXMuYmVhY29uRm9jdXNTaGluZVNjYWxlIHx8IHRoaXMuYmVhY29uR2xvYmFsRm9jdXNTaGluZVNjYWxlLFxuICAgICAgICBmb250V2VpZ2h0VGl0bGU6IHRoaXMuYmVhY29uRm9udFdlaWdodFRpdGxlIHx8IHRoaXMuYmVhY29uR2xvYmFsRm9udFdlaWdodFRpdGxlLFxuICAgICAgICBmb250V2VpZ2h0Qm9keTogdGhpcy5iZWFjb25Gb250V2VpZ2h0Qm9keSB8fCB0aGlzLmJlYWNvbkdsb2JhbEZvbnRXZWlnaHRCb2R5LFxuICAgICAgICBzaWduYXR1cmVcbiAgICAgIH1cblxuICAgICAgLy8gU2FuaXRpemUgaWNvbiBpZiBwYXNzZWRcbiAgICAgIGlmICghYmVhY29uT2JqZWN0LmZvbnRJY29uICYmIGJlYWNvbk9iamVjdC5pY29uICYmICF0aGlzLmJlYWNvbkRlZmF1bHRJY29uS2V5cy5pbmNsdWRlcyhiZWFjb25PYmplY3QuaWNvbikpIHtcbiAgICAgICAgYmVhY29uT2JqZWN0LnN2Z0ljb24gPSA8U2FmZUh0bWw+dGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwoYmVhY29uT2JqZWN0Lmljb24pXG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIGlmIHRoZXJlIGlzIGFuIGFjdGl2ZSBiZWFjb24gYmxvY2tpbmcgb3RoZXJzIGFuZCBhZGQgYnVpbGQgYmVhY29uIHRvIHF1ZXVlXG4gICAgICBpZiAodGhpcy5iZWFjb25TdWNjZXNzb3JCbG9ja2VyQXV0b0lkKSB7XG4gICAgICAgIHRoaXMuYmVhY29uTGlicmFyeVF1ZXVlLnB1c2goYmVhY29uT2JqZWN0KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQ2hlY2sgaWYgYmVhY29uIGNhbiBibG9jayBhbmQgcmVnaXN0ZXIgaWRcbiAgICAgICAgaWYgKGJlYWNvbk9iamVjdC5ibG9ja090aGVycylcbiAgICAgICAgICB0aGlzLmJlYWNvblN1Y2Nlc3NvckJsb2NrZXJBdXRvSWQgPSBiZWFjb25PYmplY3QuYmlkXG5cbiAgICAgICAgLy8gQWRkIG1lc3NhZ2UgdG8gbGlicmFyeVxuICAgICAgICBpZiAodGhpcy5nZXRCZWFjb25HbG9iYWxQb3NpdGlvbkNvbmZpZz8udG9wQm90dG9tID09ICd0b3AnKVxuICAgICAgICAgIHRoaXMuYmVhY29uTGlicmFyeS51bnNoaWZ0KGJlYWNvbk9iamVjdClcbiAgICAgICAgZWxzZSB0aGlzLmJlYWNvbkxpYnJhcnkucHVzaChiZWFjb25PYmplY3QpXG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIGlmIGJlYWNvbiBoYXMgZm9jdXNcbiAgICAgIGlmICh0aGlzLmJlYWNvbkZvY3VzKSB7XG4gICAgICAgIGlmICh0aGlzLmJlYWNvbldpdGhBY3RpdmVGb2N1c0F1dG9JZClcbiAgICAgICAgICB0aGlzLmJlYWNvbkZvY3VzT3JkZXJMaWJyYXJ5LnB1c2goYmVhY29uT2JqZWN0LmJpZClcbiAgICAgICAgZWxzZVxuICAgICAgICAgIHRoaXMuYmVhY29uV2l0aEFjdGl2ZUZvY3VzQXV0b0lkID0gYmVhY29uT2JqZWN0LmJpZFxuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayBpZiBpZCBpcyBzZXQgYW5kIHJlZ2lzdGVyIGl0XG4gICAgICBpZiAodGhpcy5iZWFjb25NYW51YWxJZCkge1xuICAgICAgICB0aGlzLmJlYWNvblN1YnNjcmliZWRFdmVudExpYnJhcnlbYmVhY29uSWRdLm1hbnVhbElkID0gdGhpcy5iZWFjb25NYW51YWxJZFxuICAgICAgICAvLyBNYXAgdGhlIGRlZmluZWQgaWQgdG8gdGhlIGF1dG8tZ2VuIGlkXG4gICAgICAgIHRoaXMuYmVhY29uV2F0Y2hlZEV2ZW50TGlicmFyeS5zZXQodGhpcy5iZWFjb25NYW51YWxJZCwgYmVhY29uSWQpXG4gICAgICB9XG5cbiAgICAgIC8vIFJlZ2lzdGVyIGJlYWNvbiB0eXBlIFxuICAgICAgdGhpcy5iZWFjb25TdWJzY3JpYmVkRXZlbnRMaWJyYXJ5W2JlYWNvbklkXS50eXBlID0gdGhpcy5iZWFjb25Db25maWdNYXBbdHlwZV0udHlwZVxuICAgIH1cblxuICAgIC8vIFJlZ2lzdGVyIGV2ZW50IGZvciBiZWFjb25cbiAgICB0aGlzLmJlYWNvblN1YnNjcmliZWRFdmVudExpYnJhcnlbYmVhY29uSWRdLmV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxJQmVhY29uRXZlbnQ+KClcblxuICAgIC8vIFJlc2V0XG4gICAgdGhpcy5iZWFjb25UaXRsZSA9IHVuZGVmaW5lZFxuICAgIHRoaXMuYmVhY29uTWVzc2FnZSA9IHVuZGVmaW5lZFxuICAgIHRoaXMuYmVhY29uU3RhdGljID0gdW5kZWZpbmVkXG4gICAgdGhpcy5iZWFjb25GaXhlZCA9IHVuZGVmaW5lZFxuICAgIHRoaXMuYmVhY29uQmxvY2tPdGhlcnMgPSB1bmRlZmluZWRcbiAgICB0aGlzLmJlYWNvbk1hbnVhbElkID0gdW5kZWZpbmVkXG4gICAgdGhpcy5iZWFjb25Gb2N1cyA9IHVuZGVmaW5lZFxuICAgIHRoaXMuYmVhY29uRm9jdXNTaGluZSA9IHVuZGVmaW5lZFxuICAgIHRoaXMuYmVhY29uT3ZlcmxheUNvbG9yID0gdW5kZWZpbmVkXG4gICAgdGhpcy5iZWFjb25BbGxvd0R1cGxpY2F0ZSA9IHVuZGVmaW5lZFxuICAgIHRoaXMuYmVhY29uTm9Ib3ZlckVmZmVjdCA9IHVuZGVmaW5lZFxuICAgIHRoaXMuYmVhY29uSWNvbiA9IHVuZGVmaW5lZFxuICAgIHRoaXMuYmVhY29uSWNvbkZyb21Gb250ID0gdW5kZWZpbmVkXG4gICAgdGhpcy5iZWFjb25TdHlsZUNsYXNzID0gdW5kZWZpbmVkXG4gICAgdGhpcy5iZWFjb25SZXBsYWNlbWVudENsYXNzID0gdW5kZWZpbmVkXG4gICAgdGhpcy5iZWFjb25BbmltYXRpb25DbGFzcyA9IHVuZGVmaW5lZFxuICAgIHRoaXMuYmVhY29uQnV0dG9ucyA9IHt9XG5cbiAgICByZXR1cm4gPEV2ZW50RW1pdHRlcjxJQmVhY29uRXZlbnQ+PnRoaXMuYmVhY29uU3Vic2NyaWJlZEV2ZW50TGlicmFyeVtiZWFjb25JZF0uZXZlbnRcbiAgfVxuXG4gIC8vIFNldCBub3RpZmljYXRpb24gbWVzc2FnZSAvIHN1Y2Nlc3NcbiAgcHVibGljIHN1Y2Nlc3MoLi4ubWVzc2FnZTogc3RyaW5nW10pOiBFdmVudEVtaXR0ZXI8SUJlYWNvbkV2ZW50PiB7XG4gICAgLy8gU2V0IHRpdGxlXG4gICAgKG1lc3NhZ2UubGVuZ3RoID4gMSkgJiYgbWVzc2FnZVswXSAmJiB0aGlzLnRpdGxlKG1lc3NhZ2VbMF0pXG4gICAgLy8gU2V0IGJvZHlcbiAgICByZXR1cm4gdGhpcy5iZWFjb24obWVzc2FnZVsxXSB8fCBtZXNzYWdlWzBdIHx8IHRoaXMuYmVhY29uTWVzc2FnZSB8fCB0aGlzLmJlYWNvbkNvbmZpZ01hcC5zdWNjZXNzLnRpdGxlLCB0aGlzLmJlYWNvblR5cGVNYXAuYSlcbiAgfVxuXG4gIC8vIFNldCBub3RpZmljYXRpb24gbWVzc2FnZSAvIGVycm9yXG4gIHB1YmxpYyBlcnJvciguLi5tZXNzYWdlOiBzdHJpbmdbXSk6IEV2ZW50RW1pdHRlcjxJQmVhY29uRXZlbnQ+IHtcbiAgICAvLyBTZXQgdGl0bGVcbiAgICAobWVzc2FnZS5sZW5ndGggPiAxKSAmJiBtZXNzYWdlWzBdICYmIHRoaXMudGl0bGUobWVzc2FnZVswXSlcbiAgICAvLyBTZXQgYm9keVxuICAgIHJldHVybiB0aGlzLmJlYWNvbihtZXNzYWdlWzFdIHx8IG1lc3NhZ2VbMF0gfHwgdGhpcy5iZWFjb25NZXNzYWdlIHx8IHRoaXMuYmVhY29uQ29uZmlnTWFwLmVycm9yLnRpdGxlLCB0aGlzLmJlYWNvblR5cGVNYXAuYilcbiAgfVxuXG4gIC8vIFNldCBub3RpZmljYXRpb24gbWVzc2FnZSAvIHdhcm5pbmdcbiAgcHVibGljIHdhcm5pbmcoLi4ubWVzc2FnZTogc3RyaW5nW10pOiBFdmVudEVtaXR0ZXI8SUJlYWNvbkV2ZW50PiB7XG4gICAgLy8gU2V0IHRpdGxlXG4gICAgKG1lc3NhZ2UubGVuZ3RoID4gMSkgJiYgbWVzc2FnZVswXSAmJiB0aGlzLnRpdGxlKG1lc3NhZ2VbMF0pXG4gICAgLy8gU2V0IGJvZHlcbiAgICByZXR1cm4gdGhpcy5iZWFjb24obWVzc2FnZVsxXSB8fCBtZXNzYWdlWzBdIHx8IHRoaXMuYmVhY29uTWVzc2FnZSB8fCB0aGlzLmJlYWNvbkNvbmZpZ01hcC53YXJuaW5nLnRpdGxlLCB0aGlzLmJlYWNvblR5cGVNYXAuYylcbiAgfVxuXG4gIC8vIFNldCBub3RpZmljYXRpb24gbWVzc2FnZSAvIGluZm9cbiAgcHVibGljIGluZm8oLi4ubWVzc2FnZTogc3RyaW5nW10pOiBFdmVudEVtaXR0ZXI8SUJlYWNvbkV2ZW50PiB7XG4gICAgLy8gU2V0IHRpdGxlXG4gICAgKG1lc3NhZ2UubGVuZ3RoID4gMSkgJiYgbWVzc2FnZVswXSAmJiB0aGlzLnRpdGxlKG1lc3NhZ2VbMF0pXG4gICAgLy8gU2V0IGJvZHlcbiAgICByZXR1cm4gdGhpcy5iZWFjb24obWVzc2FnZVsxXSB8fCBtZXNzYWdlWzBdIHx8IHRoaXMuYmVhY29uTWVzc2FnZSB8fCB0aGlzLmJlYWNvbkNvbmZpZ01hcC5pbmZvLnRpdGxlLCB0aGlzLmJlYWNvblR5cGVNYXAuZClcbiAgfVxuXG4gIC8vIFNldCBub3RpZmljYXRpb24gbWVzc2FnZSAvIGFsZXJ0XG4gIHB1YmxpYyBhbGVydCguLi5tZXNzYWdlOiBzdHJpbmdbXSk6IEV2ZW50RW1pdHRlcjxJQmVhY29uRXZlbnQ+IHtcbiAgICAvLyBTZXQgdGl0bGVcbiAgICAobWVzc2FnZS5sZW5ndGggPiAxKSAmJiBtZXNzYWdlWzBdICYmIHRoaXMudGl0bGUobWVzc2FnZVswXSlcbiAgICAvLyBTZXQgYm9keVxuICAgIHJldHVybiB0aGlzLmJlYWNvbihtZXNzYWdlWzFdIHx8IG1lc3NhZ2VbMF0gfHwgdGhpcy5iZWFjb25NZXNzYWdlIHx8IHRoaXMuYmVhY29uQ29uZmlnTWFwLmFsZXJ0LnRpdGxlLCB0aGlzLmJlYWNvblR5cGVNYXAuZSlcbiAgfVxuXG4gIC8vIFdhdGNoIGV2ZW50cyBmb3IgYmVhY29uIHdpdGggc3BlY2lmaWVkIGlkXG4gIHB1YmxpYyB3YXRjaChpZDogc3RyaW5nIHwgc3RyaW5nW10pOiBFdmVudEVtaXR0ZXI8SUJlYWNvbldhdGNoZWRFdmVudD4ge1xuICAgIC8vIFJlZ2lzdGVyIHdhdGNoZWQgaWRcbiAgICBpZiAoQXJyYXkuaXNBcnJheShpZCkpXG4gICAgICBpZC5mb3JFYWNoKGsgPT4gdGhpcy5iZWFjb25XYXRjaGVkRXZlbnRMaWJyYXJ5LnNldChrLCBTdHJpbmcoKSkpXG4gICAgZWxzZSB0aGlzLmJlYWNvbldhdGNoZWRFdmVudExpYnJhcnkuc2V0KGlkLCBTdHJpbmcoKSlcblxuICAgIHJldHVybiB0aGlzLmJlYWNvbldhdGNoZWRFdmVudFRhc2tNYXN0ZXJcbiAgfVxuXG4gIC8vIFdhdGNoIGV2ZW50cyBmb3IgYWxsIGJlYWNvbnNcbiAgcHVibGljIGV2ZW50cygpOiBFdmVudEVtaXR0ZXI8SUJlYWNvbldhdGNoZWRFdmVudD4ge1xuICAgIHJldHVybiB0aGlzLmJlYWNvbkFsbEV2ZW50VGFza01hc3RlclxuICB9XG5cbiAgLy8gQ2xvc2UgYmVhY29uIHdpdGggaWRcbiAgcHVibGljIGNsb3NlT25lKGlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5iZWFjb25XYXRjaGVkRXZlbnRMaWJyYXJ5LmhhcyhpZCkpIHtcbiAgICAgIGNvbnN0IGF1dG9JZCA9IDxzdHJpbmc+dGhpcy5iZWFjb25XYXRjaGVkRXZlbnRMaWJyYXJ5LmdldChpZClcblxuICAgICAgLy8gUmVtb3ZlIHRoZSBiZWFjb25cbiAgICAgIHRoaXMuYmVhY29uTGlicmFyeSA9IHRoaXMuYmVhY29uTGlicmFyeS5maWx0ZXIoeCA9PiB7XG4gICAgICAgIHJldHVybiAoeC5iaWQgIT0gYXV0b0lkKVxuICAgICAgfSlcblxuICAgICAgdGhpcy5iZWFjb25FdmVudFRhc2tNYXN0ZXIuZW1pdCh7XG4gICAgICAgIGRlbGV0ZTogdHJ1ZSxcbiAgICAgICAgaWQ6IGF1dG9JZFxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICAvLyBDbG9zZSBhbGwgYmVhY29uc1xuICBwdWJsaWMgY2xvc2VBbGwoKTogdm9pZCB7XG4gICAgdGhpcy5iZWFjb25MaWJyYXJ5ID0gdGhpcy5iZWFjb25MaWJyYXJ5LmZpbHRlcih4ID0+IHtcbiAgICAgIHRoaXMuYmVhY29uRXZlbnRUYXNrTWFzdGVyLmVtaXQoe1xuICAgICAgICBkZWxldGU6IHRydWUsXG4gICAgICAgIGlkOiB4LmJpZFxuICAgICAgfSlcblxuICAgICAgcmV0dXJuICEoeC5iaWQpXG4gICAgfSlcbiAgfVxuXG4gIC8vIENoZWNrIGZvciBwb3NzaWJsZSBkdXBsaWNhdGVcbiAgcHJpdmF0ZSBpc05ld0JlYWNvbkFEdXBsaWNhdGUoc2lnbmF0dXJlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBkdXBsaWNhdGUgPSB0aGlzLmJlYWNvbkxpYnJhcnkuZmluZCh4ID0+IHguc2lnbmF0dXJlID09IHNpZ25hdHVyZSlcbiAgICByZXR1cm4gQm9vbGVhbihkdXBsaWNhdGUpXG4gIH1cbn0iXX0=