library-portal 1.0.205 → 1.0.207
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.
- package/bundles/library-portal.umd.js +142 -62
- package/bundles/library-portal.umd.js.map +1 -1
- package/bundles/library-portal.umd.min.js +1 -1
- package/bundles/library-portal.umd.min.js.map +1 -1
- package/esm2015/lib/account/settings/settings.component.js +11 -3
- package/esm2015/lib/auth/principal.service.js +48 -4
- package/esm2015/lib/auth/user-route-access-service.js +5 -1
- package/esm2015/lib/components/modal-dialog/modal-dialog.component.js +9 -3
- package/esm2015/lib/components/modal-dialog/modal-dialog.module.js +3 -1
- package/esm2015/lib/interceptor/auth.interceptor.js +12 -2
- package/esm2015/lib/model/account.model.js +18 -2
- package/esm5/lib/account/settings/settings.component.js +11 -3
- package/esm5/lib/auth/principal.service.js +58 -4
- package/esm5/lib/auth/user-route-access-service.js +5 -1
- package/esm5/lib/components/modal-dialog/modal-dialog.component.js +12 -3
- package/esm5/lib/components/modal-dialog/modal-dialog.module.js +3 -1
- package/esm5/lib/interceptor/auth.interceptor.js +16 -2
- package/esm5/lib/model/account.model.js +14 -2
- package/fesm2015/library-portal.js +80 -12
- package/fesm2015/library-portal.js.map +1 -1
- package/fesm5/library-portal.js +93 -12
- package/fesm5/library-portal.js.map +1 -1
- package/lib/account/settings/settings.component.d.ts +2 -0
- package/lib/auth/principal.service.d.ts +7 -1
- package/lib/components/modal-dialog/modal-dialog.component.d.ts +1 -0
- package/lib/interceptor/auth.interceptor.d.ts +1 -0
- package/lib/model/account.model.d.ts +5 -1
- package/library-portal.metadata.json +1 -1
- package/package.json +1 -1
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
(function (global, factory) {
|
|
2
|
-
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('crypto-js'), require('@angular/core'), require('@angular/forms'), require('@angular/common/http'), require('@ng-bootstrap/ng-bootstrap'), require('moment'), require('ng2-pdfjs-viewer'), require('@fortawesome/angular-fontawesome'), require('@fortawesome/fontawesome-svg-core'), require('@fortawesome/free-solid-svg-icons'), require('@angular/common'), require('@fortawesome/free-solid-svg-icons/faTimes'), require('@fortawesome/free-solid-svg-icons/faBan'), require('ng-jhipster'), require('@ngx-translate/core'), require('ng-jhipster/src/config.service'), require('sweetalert2'), require('@angular/animations'), require('ngx-joyride'), require('ng2-fittext'), require('@angular/platform-browser/animations'), require('ngx-webstorage'), require('rxjs'), require('ng-jhipster/src/language/language.service'), require('ngx-webstorage/dist/services/sessionStorage'), require('@angular/platform-browser'), require('rxjs/operators'), require('ngx-webstorage/dist/services/localStorage'), require('ng-recaptcha'), require('ng-recaptcha/recaptcha/recaptcha-common.module'), require('ngx-cookie'), require('ngx-cookie/src/cookie.service'), require('
|
|
3
|
-
typeof define === 'function' && define.amd ? define('library-portal', ['exports', 'crypto-js', '@angular/core', '@angular/forms', '@angular/common/http', '@ng-bootstrap/ng-bootstrap', 'moment', 'ng2-pdfjs-viewer', '@fortawesome/angular-fontawesome', '@fortawesome/fontawesome-svg-core', '@fortawesome/free-solid-svg-icons', '@angular/common', '@fortawesome/free-solid-svg-icons/faTimes', '@fortawesome/free-solid-svg-icons/faBan', 'ng-jhipster', '@ngx-translate/core', 'ng-jhipster/src/config.service', 'sweetalert2', '@angular/animations', 'ngx-joyride', 'ng2-fittext', '@angular/platform-browser/animations', 'ngx-webstorage', 'rxjs', 'ng-jhipster/src/language/language.service', 'ngx-webstorage/dist/services/sessionStorage', '@angular/platform-browser', 'rxjs/operators', 'ngx-webstorage/dist/services/localStorage', 'ng-recaptcha', 'ng-recaptcha/recaptcha/recaptcha-common.module', 'ngx-cookie', 'ngx-cookie/src/cookie.service', '
|
|
4
|
-
(factory((global['library-portal'] = {}),global['crypto-js'],global.ng.core,global.ng.forms,global.ng.common.http,global['@ng-bootstrap/ng-bootstrap'],global.moment,global['ng2-pdfjs-viewer'],global['@fortawesome/angular-fontawesome'],global['@fortawesome/fontawesome-svg-core'],global['@fortawesome/free-solid-svg-icons'],global.ng.common,global['@fortawesome/free-solid-svg-icons/faTimes'],global['@fortawesome/free-solid-svg-icons/faBan'],global['ng-jhipster'],global['@ngx-translate/core'],global['ng-jhipster/src/config'].service,global.sweetalert2,global.ng.animations,global['ngx-joyride'],global['ng2-fittext'],global.ng.platformBrowser.animations,global['ngx-webstorage'],global.rxjs,global['ng-jhipster/src/language/language'].service,global['ngx-webstorage'],global.ng.platformBrowser,global.rxjs.operators,global['ngx-webstorage'],global.ngRecaptcha,global.recaptchaCommon_module,global['ngx-cookie'],global['ngx-cookie/src/cookie'].service,global.
|
|
5
|
-
}(this, (function (exports,CryptoJS,i0,forms,i1,i1$1,moment,ng2PdfjsViewer,angularFontawesome,fontawesomeSvgCore,freeSolidSvgIcons,common,faTimes,faBan,ngJhipster,i1$2,i1$3,Swal,animations,i4,ng2Fittext,animations$1,ngxWebstorage,rxjs,i1$4,i1$5,i2,operators,i2$1,ngRecaptcha,recaptchaCommon_module,ngxCookie,i1$
|
|
2
|
+
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('crypto-js'), require('@angular/core'), require('@angular/forms'), require('@angular/common/http'), require('@ng-bootstrap/ng-bootstrap'), require('moment'), require('ng2-pdfjs-viewer'), require('@fortawesome/angular-fontawesome'), require('@fortawesome/fontawesome-svg-core'), require('@fortawesome/free-solid-svg-icons'), require('@angular/common'), require('@fortawesome/free-solid-svg-icons/faTimes'), require('@fortawesome/free-solid-svg-icons/faBan'), require('@fortawesome/free-solid-svg-icons/faBell'), require('ng-jhipster'), require('@ngx-translate/core'), require('ng-jhipster/src/config.service'), require('sweetalert2'), require('@angular/animations'), require('ngx-joyride'), require('ng2-fittext'), require('@angular/platform-browser/animations'), require('ngx-webstorage'), require('rxjs'), require('@angular/router'), require('ng-jhipster/src/language/language.service'), require('ngx-webstorage/dist/services/sessionStorage'), require('@angular/platform-browser'), require('rxjs/operators'), require('ngx-webstorage/dist/services/localStorage'), require('ng-recaptcha'), require('ng-recaptcha/recaptcha/recaptcha-common.module'), require('ngx-cookie'), require('ngx-cookie/src/cookie.service'), require('rxjs/internal/Subject'), require('ngx-mask'), require('@fortawesome/free-solid-svg-icons/faUserPlus'), require('@fortawesome/free-solid-svg-icons/faUser'), require('rxjs/internal/observable/throwError'), require('@ngx-loading-bar/http-client'), require('@fortawesome/free-solid-svg-icons/faSave'), require('@fortawesome/free-solid-svg-icons/faCheck')) :
|
|
3
|
+
typeof define === 'function' && define.amd ? define('library-portal', ['exports', 'crypto-js', '@angular/core', '@angular/forms', '@angular/common/http', '@ng-bootstrap/ng-bootstrap', 'moment', 'ng2-pdfjs-viewer', '@fortawesome/angular-fontawesome', '@fortawesome/fontawesome-svg-core', '@fortawesome/free-solid-svg-icons', '@angular/common', '@fortawesome/free-solid-svg-icons/faTimes', '@fortawesome/free-solid-svg-icons/faBan', '@fortawesome/free-solid-svg-icons/faBell', 'ng-jhipster', '@ngx-translate/core', 'ng-jhipster/src/config.service', 'sweetalert2', '@angular/animations', 'ngx-joyride', 'ng2-fittext', '@angular/platform-browser/animations', 'ngx-webstorage', 'rxjs', '@angular/router', 'ng-jhipster/src/language/language.service', 'ngx-webstorage/dist/services/sessionStorage', '@angular/platform-browser', 'rxjs/operators', 'ngx-webstorage/dist/services/localStorage', 'ng-recaptcha', 'ng-recaptcha/recaptcha/recaptcha-common.module', 'ngx-cookie', 'ngx-cookie/src/cookie.service', 'rxjs/internal/Subject', 'ngx-mask', '@fortawesome/free-solid-svg-icons/faUserPlus', '@fortawesome/free-solid-svg-icons/faUser', 'rxjs/internal/observable/throwError', '@ngx-loading-bar/http-client', '@fortawesome/free-solid-svg-icons/faSave', '@fortawesome/free-solid-svg-icons/faCheck'], factory) :
|
|
4
|
+
(factory((global['library-portal'] = {}),global['crypto-js'],global.ng.core,global.ng.forms,global.ng.common.http,global['@ng-bootstrap/ng-bootstrap'],global.moment,global['ng2-pdfjs-viewer'],global['@fortawesome/angular-fontawesome'],global['@fortawesome/fontawesome-svg-core'],global['@fortawesome/free-solid-svg-icons'],global.ng.common,global['@fortawesome/free-solid-svg-icons/faTimes'],global['@fortawesome/free-solid-svg-icons/faBan'],global.faBell,global['ng-jhipster'],global['@ngx-translate/core'],global['ng-jhipster/src/config'].service,global.sweetalert2,global.ng.animations,global['ngx-joyride'],global['ng2-fittext'],global.ng.platformBrowser.animations,global['ngx-webstorage'],global.rxjs,global.ng.router,global['ng-jhipster/src/language/language'].service,global['ngx-webstorage'],global.ng.platformBrowser,global.rxjs.operators,global['ngx-webstorage'],global.ngRecaptcha,global.recaptchaCommon_module,global['ngx-cookie'],global['ngx-cookie/src/cookie'].service,global.rxjs['internal/Subject'],global['ngx-mask'],global['@fortawesome/free-solid-svg-icons/faUserPlus'],global['@fortawesome/free-solid-svg-icons/faUser'],global.rxjs['internal/observable/throwError'],global['@ngx-loading-bar/http-client'],global['@fortawesome/free-solid-svg-icons/faSave'],global['@fortawesome/free-solid-svg-icons/faCheck']));
|
|
5
|
+
}(this, (function (exports,CryptoJS,i0,forms,i1,i1$1,moment,ng2PdfjsViewer,angularFontawesome,fontawesomeSvgCore,freeSolidSvgIcons,common,faTimes,faBan,faBell,ngJhipster,i1$2,i1$3,Swal,animations,i4,ng2Fittext,animations$1,ngxWebstorage,rxjs,i1$4,i1$5,i1$6,i2,operators,i2$1,ngRecaptcha,recaptchaCommon_module,ngxCookie,i1$7,Subject,ngxMask,faUserPlus,faUser,throwError,httpClient,faSave,faCheck) { 'use strict';
|
|
6
6
|
|
|
7
7
|
moment = moment && moment.hasOwnProperty('default') ? moment['default'] : moment;
|
|
8
8
|
Swal = Swal && Swal.hasOwnProperty('default') ? Swal['default'] : Swal;
|
|
@@ -2353,6 +2353,15 @@
|
|
|
2353
2353
|
/**
|
|
2354
2354
|
* @return {?}
|
|
2355
2355
|
*/
|
|
2356
|
+
ModalDialogComponent.prototype.getHeaderIcon = /**
|
|
2357
|
+
* @return {?}
|
|
2358
|
+
*/
|
|
2359
|
+
function () {
|
|
2360
|
+
return this.type === DialogType.INFO ? 'bell' : 'times';
|
|
2361
|
+
};
|
|
2362
|
+
/**
|
|
2363
|
+
* @return {?}
|
|
2364
|
+
*/
|
|
2356
2365
|
ModalDialogComponent.prototype.stop = /**
|
|
2357
2366
|
* @return {?}
|
|
2358
2367
|
*/
|
|
@@ -2378,8 +2387,8 @@
|
|
|
2378
2387
|
ModalDialogComponent.decorators = [
|
|
2379
2388
|
{ type: i0.Component, args: [{
|
|
2380
2389
|
selector: 'jhi-modal-dialog',
|
|
2381
|
-
template: "<div #main name=\"main\" [hidden]=\"type === dialogType.WAIT\">\r\n <div class=\"modal-header\" [ngClass]=\"cssClass\">\r\n <div class=\"w-100 text-center\">\r\n <div class=\"btn-group pl-2 pr-2\">\
|
|
2382
|
-
styles: [".loader{border:16px solid #f3f3f3;border-top:16px solid #3498db;border-radius:50%;width:120px;height:120px;animation:2s linear infinite spin;margin:auto}@keyframes spin{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}"]
|
|
2390
|
+
template: "<div #main name=\"main\" [hidden]=\"type === dialogType.WAIT\">\r\n <div class=\"modal-header\" [ngClass]=\"cssClass\">\r\n <div class=\"w-100 text-center\">\r\n <div class=\"btn-group pl-2 pr-2\">\n <div class=\"modal-header-circle\" style=\"background-color: #3498db\">\n <fa-icon class=\"icon-menu\" [icon]=\"getHeaderIcon()\"></fa-icon>\n </div>\n </div>\n <button aria-label=\"Close\" data-dismiss=\"modal\" class=\"close\" type=\"button\" (click)=\"setResult(dialogResult.CANCEL)\"><span aria-hidden=\"true\">\u00D7</span></button>\r\n <h4 class=\"modal-title\">{{title}}</h4>\r\n </div>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div class=\"modal-dialog-message\">{{message}}</div>\n <div align=\"center\" class=\"mt-3\" [hidden]=\"type !== dialogType.INFO\">\r\n <button type=\"button\" class=\"btn btn-secondary\" (click)=\"setResult(dialogResult.OK)\">OK</button>\r\n </div>\r\n </div>\r\n <div class=\"modal-footer\" [hidden]=\"type !== dialogType.QUESTION\">\r\n <button type=\"button\" class=\"btn btn-secondary\" data-dismiss=\"modal\" (click)=\"setResult(dialogResult.NO)\">\r\n <fa-icon [icon]=\"'ban'\"></fa-icon> <span jhiTranslate=\"entity.action.cancel\">Cancel</span>\r\n </button>\r\n <button type=\"submit\" class=\"btn btn-danger\" (click)=\"setResult(dialogResult.YES)\">\r\n <fa-icon [icon]=\"'times'\"></fa-icon> <span jhiTranslate=\"entity.action.delete\">Delete</span>\r\n </button>\r\n </div>\r\n <div class=\"modal-footer\" [hidden]=\"type !== dialogType.QUESTION_YES_NO\">\r\n <button type=\"button\" class=\"btn btn-secondary\" data-dismiss=\"modal\" (click)=\"setResult(dialogResult.NO)\">\r\n <fa-icon [icon]=\"'ban'\"></fa-icon> <span jhiTranslate=\"entity.action.no\">No</span>\r\n </button>\r\n <button type=\"submit\" class=\"btn btn-primary\" (click)=\"setResult(dialogResult.YES)\">\r\n <fa-icon [icon]=\"'check'\"></fa-icon> <span jhiTranslate=\"entity.action.yes\">Yes</span>\r\n </button>\r\n </div>\r\n</div>\r\n<div #loader name=\"loader\" [hidden]=\"type !== dialogType.WAIT\" class=\"bg-transparent text-center\">\r\n <div class=\"loader bg-transparent centered\"></div>\r\n <p class=\"bg-transparent text-center text-white\" style=\"margin-top: 10px\">{{message}}</p>\r\n</div>\r\n",
|
|
2391
|
+
styles: [".loader{border:16px solid #f3f3f3;border-top:16px solid #3498db;border-radius:50%;width:120px;height:120px;animation:2s linear infinite spin;margin:auto}@keyframes spin{0%{transform:rotate(0)}100%{transform:rotate(360deg)}}.modal-dialog-message{overflow-wrap:anywhere;white-space:pre-line}"]
|
|
2383
2392
|
}] }
|
|
2384
2393
|
];
|
|
2385
2394
|
/** @nocollapse */
|
|
@@ -2448,6 +2457,7 @@
|
|
|
2448
2457
|
*/
|
|
2449
2458
|
fontawesomeSvgCore.library.add(faTimes.faTimes);
|
|
2450
2459
|
fontawesomeSvgCore.library.add(faBan.faBan);
|
|
2460
|
+
fontawesomeSvgCore.library.add(faBell.faBell);
|
|
2451
2461
|
var ModalDialogModule = /** @class */ (function () {
|
|
2452
2462
|
function ModalDialogModule() {
|
|
2453
2463
|
}
|
|
@@ -4741,12 +4751,14 @@
|
|
|
4741
4751
|
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
|
|
4742
4752
|
*/
|
|
4743
4753
|
var Principal = /** @class */ (function () {
|
|
4744
|
-
function Principal(languageService, sessionStorage, account) {
|
|
4754
|
+
function Principal(languageService, sessionStorage, account, router) {
|
|
4745
4755
|
this.languageService = languageService;
|
|
4746
4756
|
this.sessionStorage = sessionStorage;
|
|
4747
4757
|
this.account = account;
|
|
4758
|
+
this.router = router;
|
|
4748
4759
|
this.authenticated = false;
|
|
4749
4760
|
this.authenticationState = new rxjs.Subject();
|
|
4761
|
+
this.rotaAtualizacaoCadastral = '/settings';
|
|
4750
4762
|
}
|
|
4751
4763
|
/**
|
|
4752
4764
|
* @param {?} identity
|
|
@@ -4856,6 +4868,7 @@
|
|
|
4856
4868
|
_this.authenticated = false;
|
|
4857
4869
|
}
|
|
4858
4870
|
_this.authenticationState.next(_this.userIdentity);
|
|
4871
|
+
_this.redirecionarParaAtualizacaoCadastralSeNecessario();
|
|
4859
4872
|
return _this.userIdentity;
|
|
4860
4873
|
}))
|
|
4861
4874
|
.catch(( /**
|
|
@@ -4913,6 +4926,44 @@
|
|
|
4913
4926
|
function () {
|
|
4914
4927
|
return this.userIdentity;
|
|
4915
4928
|
};
|
|
4929
|
+
/**
|
|
4930
|
+
* @param {?=} identity
|
|
4931
|
+
* @return {?}
|
|
4932
|
+
*/
|
|
4933
|
+
Principal.prototype.precisaAtualizacaoCadastral = /**
|
|
4934
|
+
* @param {?=} identity
|
|
4935
|
+
* @return {?}
|
|
4936
|
+
*/
|
|
4937
|
+
function (identity) {
|
|
4938
|
+
/** @type {?} */
|
|
4939
|
+
var conta = identity || this.userIdentity;
|
|
4940
|
+
return !!(conta && conta.atualizacaoCadastralObrigatoria);
|
|
4941
|
+
};
|
|
4942
|
+
/**
|
|
4943
|
+
* @return {?}
|
|
4944
|
+
*/
|
|
4945
|
+
Principal.prototype.getRotaAtualizacaoCadastral = /**
|
|
4946
|
+
* @return {?}
|
|
4947
|
+
*/
|
|
4948
|
+
function () {
|
|
4949
|
+
return this.rotaAtualizacaoCadastral;
|
|
4950
|
+
};
|
|
4951
|
+
/**
|
|
4952
|
+
* @private
|
|
4953
|
+
* @return {?}
|
|
4954
|
+
*/
|
|
4955
|
+
Principal.prototype.redirecionarParaAtualizacaoCadastralSeNecessario = /**
|
|
4956
|
+
* @private
|
|
4957
|
+
* @return {?}
|
|
4958
|
+
*/
|
|
4959
|
+
function () {
|
|
4960
|
+
if (!this.precisaAtualizacaoCadastral() || !this.router || !this.router.url) {
|
|
4961
|
+
return;
|
|
4962
|
+
}
|
|
4963
|
+
if (this.router.url !== this.rotaAtualizacaoCadastral) {
|
|
4964
|
+
this.router.navigateByUrl(this.rotaAtualizacaoCadastral);
|
|
4965
|
+
}
|
|
4966
|
+
};
|
|
4916
4967
|
Principal.decorators = [
|
|
4917
4968
|
{ type: i0.Injectable, args: [{ providedIn: 'root' },] }
|
|
4918
4969
|
];
|
|
@@ -4921,10 +4972,11 @@
|
|
|
4921
4972
|
return [
|
|
4922
4973
|
{ type: ngJhipster.JhiLanguageService },
|
|
4923
4974
|
{ type: ngxWebstorage.SessionStorageService },
|
|
4924
|
-
{ type: AccountService }
|
|
4975
|
+
{ type: AccountService },
|
|
4976
|
+
{ type: i1$4.Router }
|
|
4925
4977
|
];
|
|
4926
4978
|
};
|
|
4927
|
-
/** @nocollapse */ Principal.ngInjectableDef = i0.defineInjectable({ factory: function Principal_Factory() { return new Principal(i0.inject(i1$
|
|
4979
|
+
/** @nocollapse */ Principal.ngInjectableDef = i0.defineInjectable({ factory: function Principal_Factory() { return new Principal(i0.inject(i1$5.JhiLanguageService), i0.inject(i1$6.SessionStorageService), i0.inject(AccountService), i0.inject(i1$4.Router)); }, token: Principal, providedIn: "root" });
|
|
4928
4980
|
return Principal;
|
|
4929
4981
|
}());
|
|
4930
4982
|
|
|
@@ -5318,7 +5370,7 @@
|
|
|
5318
5370
|
{ type: ngxWebstorage.SessionStorageService }
|
|
5319
5371
|
];
|
|
5320
5372
|
};
|
|
5321
|
-
/** @nocollapse */ StateStorageService.ngInjectableDef = i0.defineInjectable({ factory: function StateStorageService_Factory() { return new StateStorageService(i0.inject(i1$
|
|
5373
|
+
/** @nocollapse */ StateStorageService.ngInjectableDef = i0.defineInjectable({ factory: function StateStorageService_Factory() { return new StateStorageService(i0.inject(i1$6.SessionStorageService)); }, token: StateStorageService, providedIn: "root" });
|
|
5322
5374
|
return StateStorageService;
|
|
5323
5375
|
}());
|
|
5324
5376
|
|
|
@@ -5434,7 +5486,7 @@
|
|
|
5434
5486
|
{ type: ngxWebstorage.SessionStorageService }
|
|
5435
5487
|
];
|
|
5436
5488
|
};
|
|
5437
|
-
/** @nocollapse */ AuthServerProvider.ngInjectableDef = i0.defineInjectable({ factory: function AuthServerProvider_Factory() { return new AuthServerProvider(i0.inject(i1.HttpClient), i0.inject(i2$1.LocalStorageService), i0.inject(i1$
|
|
5489
|
+
/** @nocollapse */ AuthServerProvider.ngInjectableDef = i0.defineInjectable({ factory: function AuthServerProvider_Factory() { return new AuthServerProvider(i0.inject(i1.HttpClient), i0.inject(i2$1.LocalStorageService), i0.inject(i1$6.SessionStorageService)); }, token: AuthServerProvider, providedIn: "root" });
|
|
5438
5490
|
return AuthServerProvider;
|
|
5439
5491
|
}());
|
|
5440
5492
|
|
|
@@ -6657,7 +6709,7 @@
|
|
|
6657
6709
|
{ type: ngxCookie.CookieService }
|
|
6658
6710
|
];
|
|
6659
6711
|
};
|
|
6660
|
-
/** @nocollapse */ CSRFService.ngInjectableDef = i0.defineInjectable({ factory: function CSRFService_Factory() { return new CSRFService(i0.inject(i1$
|
|
6712
|
+
/** @nocollapse */ CSRFService.ngInjectableDef = i0.defineInjectable({ factory: function CSRFService_Factory() { return new CSRFService(i0.inject(i1$7.CookieService)); }, token: CSRFService, providedIn: "root" });
|
|
6661
6713
|
return CSRFService;
|
|
6662
6714
|
}());
|
|
6663
6715
|
|
|
@@ -7456,7 +7508,7 @@
|
|
|
7456
7508
|
{ type: StateStorageService },
|
|
7457
7509
|
{ type: i0.ElementRef },
|
|
7458
7510
|
{ type: i0.Renderer },
|
|
7459
|
-
{ type: i1$
|
|
7511
|
+
{ type: i1$4.Router },
|
|
7460
7512
|
{ type: RegisterModalService },
|
|
7461
7513
|
{ type: i1$2.TranslateService },
|
|
7462
7514
|
{ type: UserService },
|
|
@@ -7566,6 +7618,10 @@
|
|
|
7566
7618
|
return true;
|
|
7567
7619
|
}
|
|
7568
7620
|
if (account) {
|
|
7621
|
+
if (principal.precisaAtualizacaoCadastral(account) && url !== principal.getRotaAtualizacaoCadastral()) {
|
|
7622
|
+
_this.router.navigateByUrl(principal.getRotaAtualizacaoCadastral());
|
|
7623
|
+
return false;
|
|
7624
|
+
}
|
|
7569
7625
|
return principal.hasAnyAuthority(authorities).then(( /**
|
|
7570
7626
|
* @param {?} response
|
|
7571
7627
|
* @return {?}
|
|
@@ -7596,13 +7652,13 @@
|
|
|
7596
7652
|
/** @nocollapse */
|
|
7597
7653
|
UserRouteAccessService.ctorParameters = function () {
|
|
7598
7654
|
return [
|
|
7599
|
-
{ type: i1$
|
|
7655
|
+
{ type: i1$4.Router },
|
|
7600
7656
|
{ type: LoginModalService },
|
|
7601
7657
|
{ type: Principal },
|
|
7602
7658
|
{ type: StateStorageService }
|
|
7603
7659
|
];
|
|
7604
7660
|
};
|
|
7605
|
-
/** @nocollapse */ UserRouteAccessService.ngInjectableDef = i0.defineInjectable({ factory: function UserRouteAccessService_Factory() { return new UserRouteAccessService(i0.inject(i1$
|
|
7661
|
+
/** @nocollapse */ UserRouteAccessService.ngInjectableDef = i0.defineInjectable({ factory: function UserRouteAccessService_Factory() { return new UserRouteAccessService(i0.inject(i1$4.Router), i0.inject(LoginModalService), i0.inject(Principal), i0.inject(StateStorageService)); }, token: UserRouteAccessService, providedIn: "root" });
|
|
7606
7662
|
return UserRouteAccessService;
|
|
7607
7663
|
}());
|
|
7608
7664
|
|
|
@@ -7616,7 +7672,7 @@
|
|
|
7616
7672
|
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
|
|
7617
7673
|
*/
|
|
7618
7674
|
var Account = /** @class */ (function () {
|
|
7619
|
-
function Account(activated, authorities, email, firstName, langKey, lastName, login, imageUrl) {
|
|
7675
|
+
function Account(activated, authorities, email, firstName, langKey, lastName, login, imageUrl, telefone, dataUltimaAtualizacaoCadastral, atualizacaoCadastralObrigatoria, mensagemAtualizacaoCadastral) {
|
|
7620
7676
|
this.activated = activated;
|
|
7621
7677
|
this.authorities = authorities;
|
|
7622
7678
|
this.email = email;
|
|
@@ -7625,6 +7681,10 @@
|
|
|
7625
7681
|
this.lastName = lastName;
|
|
7626
7682
|
this.login = login;
|
|
7627
7683
|
this.imageUrl = imageUrl;
|
|
7684
|
+
this.telefone = telefone;
|
|
7685
|
+
this.dataUltimaAtualizacaoCadastral = dataUltimaAtualizacaoCadastral;
|
|
7686
|
+
this.atualizacaoCadastralObrigatoria = atualizacaoCadastralObrigatoria;
|
|
7687
|
+
this.mensagemAtualizacaoCadastral = mensagemAtualizacaoCadastral;
|
|
7628
7688
|
}
|
|
7629
7689
|
return Account;
|
|
7630
7690
|
}());
|
|
@@ -8508,10 +8568,10 @@
|
|
|
8508
8568
|
{ type: i1$2.TranslateService },
|
|
8509
8569
|
{ type: i0.RendererFactory2 },
|
|
8510
8570
|
{ type: i2.Title },
|
|
8511
|
-
{ type: i1$
|
|
8571
|
+
{ type: i1$4.Router }
|
|
8512
8572
|
];
|
|
8513
8573
|
};
|
|
8514
|
-
/** @nocollapse */ JhiLanguageHelper.ngInjectableDef = i0.defineInjectable({ factory: function JhiLanguageHelper_Factory() { return new JhiLanguageHelper(i0.inject(i1$2.TranslateService), i0.inject(i0.RendererFactory2), i0.inject(i2.Title), i0.inject(i1$
|
|
8574
|
+
/** @nocollapse */ JhiLanguageHelper.ngInjectableDef = i0.defineInjectable({ factory: function JhiLanguageHelper_Factory() { return new JhiLanguageHelper(i0.inject(i1$2.TranslateService), i0.inject(i0.RendererFactory2), i0.inject(i2.Title), i0.inject(i1$4.Router)); }, token: JhiLanguageHelper, providedIn: "root" });
|
|
8515
8575
|
return JhiLanguageHelper;
|
|
8516
8576
|
}());
|
|
8517
8577
|
|
|
@@ -8633,7 +8693,7 @@
|
|
|
8633
8693
|
common.CommonModule,
|
|
8634
8694
|
forms.FormsModule,
|
|
8635
8695
|
ngJhipster.NgJhipsterModule,
|
|
8636
|
-
i1$
|
|
8696
|
+
i1$4.RouterModule.forChild(ENTITY_STATES)
|
|
8637
8697
|
],
|
|
8638
8698
|
exports: [
|
|
8639
8699
|
JhiGatewayComponent
|
|
@@ -8886,9 +8946,9 @@
|
|
|
8886
8946
|
{ type: AuditsService },
|
|
8887
8947
|
{ type: PortalAlertService },
|
|
8888
8948
|
{ type: ngJhipster.JhiParseLinks },
|
|
8889
|
-
{ type: i1$
|
|
8949
|
+
{ type: i1$4.ActivatedRoute },
|
|
8890
8950
|
{ type: common.DatePipe },
|
|
8891
|
-
{ type: i1$
|
|
8951
|
+
{ type: i1$4.Router }
|
|
8892
8952
|
];
|
|
8893
8953
|
};
|
|
8894
8954
|
return AuditsComponent;
|
|
@@ -8930,7 +8990,7 @@
|
|
|
8930
8990
|
common.CommonModule,
|
|
8931
8991
|
forms.FormsModule,
|
|
8932
8992
|
ngJhipster.NgJhipsterModule,
|
|
8933
|
-
i1$
|
|
8993
|
+
i1$4.RouterModule.forChild(ENTITY_STATES$1)
|
|
8934
8994
|
],
|
|
8935
8995
|
exports: [
|
|
8936
8996
|
AuditsComponent
|
|
@@ -9189,7 +9249,7 @@
|
|
|
9189
9249
|
common.CommonModule,
|
|
9190
9250
|
forms.FormsModule,
|
|
9191
9251
|
ngJhipster.NgJhipsterModule,
|
|
9192
|
-
i1$
|
|
9252
|
+
i1$4.RouterModule.forChild(ENTITY_STATES$2)
|
|
9193
9253
|
],
|
|
9194
9254
|
exports: [
|
|
9195
9255
|
JhiConfigurationComponent
|
|
@@ -9485,7 +9545,7 @@
|
|
|
9485
9545
|
common.CommonModule,
|
|
9486
9546
|
forms.FormsModule,
|
|
9487
9547
|
ngJhipster.NgJhipsterModule,
|
|
9488
|
-
i1$
|
|
9548
|
+
i1$4.RouterModule.forChild(ENTITY_STATES$3)
|
|
9489
9549
|
],
|
|
9490
9550
|
exports: [
|
|
9491
9551
|
JhiMetricsMonitoringModalComponent,
|
|
@@ -9556,7 +9616,7 @@
|
|
|
9556
9616
|
imports: [
|
|
9557
9617
|
common.CommonModule,
|
|
9558
9618
|
forms.FormsModule,
|
|
9559
|
-
i1$
|
|
9619
|
+
i1$4.RouterModule.forChild(ENTITY_STATES$4)
|
|
9560
9620
|
],
|
|
9561
9621
|
exports: [
|
|
9562
9622
|
JhiDocsComponent
|
|
@@ -10041,7 +10101,7 @@
|
|
|
10041
10101
|
common.CommonModule,
|
|
10042
10102
|
forms.FormsModule,
|
|
10043
10103
|
ngJhipster.NgJhipsterModule,
|
|
10044
|
-
i1$
|
|
10104
|
+
i1$4.RouterModule.forChild(ENTITY_STATES$5)
|
|
10045
10105
|
],
|
|
10046
10106
|
exports: [
|
|
10047
10107
|
JhiHealthCheckComponent,
|
|
@@ -10198,7 +10258,7 @@
|
|
|
10198
10258
|
common.CommonModule,
|
|
10199
10259
|
forms.FormsModule,
|
|
10200
10260
|
ngJhipster.NgJhipsterModule,
|
|
10201
|
-
i1$
|
|
10261
|
+
i1$4.RouterModule.forChild(ENTITY_STATES$6)
|
|
10202
10262
|
],
|
|
10203
10263
|
exports: [
|
|
10204
10264
|
LogsComponent
|
|
@@ -10341,8 +10401,22 @@
|
|
|
10341
10401
|
var alert_1 = event.headers.get('alertMessage');
|
|
10342
10402
|
/** @type {?} */
|
|
10343
10403
|
var contentComponentInstance = this.modalService.open(ModalDialogComponent, { backdrop: 'static' }).componentInstance;
|
|
10344
|
-
contentComponentInstance.init(undefined, 'Alerta', alert_1, '', DialogType.INFO);
|
|
10404
|
+
contentComponentInstance.init(undefined, 'Alerta', this.formatAlertMessage(alert_1), '', DialogType.INFO);
|
|
10405
|
+
}
|
|
10406
|
+
};
|
|
10407
|
+
/**
|
|
10408
|
+
* @param {?} alert
|
|
10409
|
+
* @return {?}
|
|
10410
|
+
*/
|
|
10411
|
+
AuthInterceptor.prototype.formatAlertMessage = /**
|
|
10412
|
+
* @param {?} alert
|
|
10413
|
+
* @return {?}
|
|
10414
|
+
*/
|
|
10415
|
+
function (alert) {
|
|
10416
|
+
if (!alert) {
|
|
10417
|
+
return alert;
|
|
10345
10418
|
}
|
|
10419
|
+
return alert.replace(/\\n/g, '\n');
|
|
10346
10420
|
};
|
|
10347
10421
|
AuthInterceptor.decorators = [
|
|
10348
10422
|
{ type: i0.Injectable }
|
|
@@ -10916,7 +10990,7 @@
|
|
|
10916
10990
|
{ type: MenuService },
|
|
10917
10991
|
{ type: EmpresaService },
|
|
10918
10992
|
{ type: ParametrosService },
|
|
10919
|
-
{ type: i1$
|
|
10993
|
+
{ type: i1$4.ActivatedRoute },
|
|
10920
10994
|
{ type: LoginModalService }
|
|
10921
10995
|
];
|
|
10922
10996
|
};
|
|
@@ -10967,7 +11041,7 @@
|
|
|
10967
11041
|
common.CommonModule,
|
|
10968
11042
|
angularFontawesome.FontAwesomeModule,
|
|
10969
11043
|
i1$1.NgbModule.forRoot(),
|
|
10970
|
-
i1$
|
|
11044
|
+
i1$4.RouterModule.forChild(__spread(HOME_ROUTE))
|
|
10971
11045
|
],
|
|
10972
11046
|
declarations: [
|
|
10973
11047
|
HomeComponent
|
|
@@ -11126,7 +11200,7 @@
|
|
|
11126
11200
|
MenuUpdateComponent.ctorParameters = function () {
|
|
11127
11201
|
return [
|
|
11128
11202
|
{ type: MenuService },
|
|
11129
|
-
{ type: i1$
|
|
11203
|
+
{ type: i1$4.ActivatedRoute },
|
|
11130
11204
|
{ type: GatewayRoutesService }
|
|
11131
11205
|
];
|
|
11132
11206
|
};
|
|
@@ -11247,8 +11321,8 @@
|
|
|
11247
11321
|
/** @nocollapse */
|
|
11248
11322
|
MenuDeletePopupComponent.ctorParameters = function () {
|
|
11249
11323
|
return [
|
|
11250
|
-
{ type: i1$
|
|
11251
|
-
{ type: i1$
|
|
11324
|
+
{ type: i1$4.ActivatedRoute },
|
|
11325
|
+
{ type: i1$4.Router },
|
|
11252
11326
|
{ type: i1$1.NgbModal }
|
|
11253
11327
|
];
|
|
11254
11328
|
};
|
|
@@ -11297,7 +11371,7 @@
|
|
|
11297
11371
|
/** @nocollapse */
|
|
11298
11372
|
MenuDetailComponent.ctorParameters = function () {
|
|
11299
11373
|
return [
|
|
11300
|
-
{ type: i1$
|
|
11374
|
+
{ type: i1$4.ActivatedRoute }
|
|
11301
11375
|
];
|
|
11302
11376
|
};
|
|
11303
11377
|
return MenuDetailComponent;
|
|
@@ -11644,8 +11718,8 @@
|
|
|
11644
11718
|
{ type: ngJhipster.JhiParseLinks },
|
|
11645
11719
|
{ type: PortalAlertService },
|
|
11646
11720
|
{ type: Principal },
|
|
11647
|
-
{ type: i1$
|
|
11648
|
-
{ type: i1$
|
|
11721
|
+
{ type: i1$4.ActivatedRoute },
|
|
11722
|
+
{ type: i1$4.Router },
|
|
11649
11723
|
{ type: ngJhipster.JhiEventManager }
|
|
11650
11724
|
];
|
|
11651
11725
|
};
|
|
@@ -11800,7 +11874,7 @@
|
|
|
11800
11874
|
i1$1.NgbModule.forRoot(),
|
|
11801
11875
|
angularFontawesome.FontAwesomeModule,
|
|
11802
11876
|
PortalAlertModule,
|
|
11803
|
-
i1$
|
|
11877
|
+
i1$4.RouterModule.forChild(ENTITY_STATES$7)
|
|
11804
11878
|
],
|
|
11805
11879
|
declarations: [
|
|
11806
11880
|
MenuComponent,
|
|
@@ -11993,7 +12067,7 @@
|
|
|
11993
12067
|
{ type: ngJhipster.JhiDataUtils },
|
|
11994
12068
|
{ type: EmpresaService },
|
|
11995
12069
|
{ type: i0.ElementRef },
|
|
11996
|
-
{ type: i1$
|
|
12070
|
+
{ type: i1$4.ActivatedRoute }
|
|
11997
12071
|
];
|
|
11998
12072
|
};
|
|
11999
12073
|
return EmpresaUpdateComponent;
|
|
@@ -12113,8 +12187,8 @@
|
|
|
12113
12187
|
/** @nocollapse */
|
|
12114
12188
|
EmpresaDeletePopupComponent.ctorParameters = function () {
|
|
12115
12189
|
return [
|
|
12116
|
-
{ type: i1$
|
|
12117
|
-
{ type: i1$
|
|
12190
|
+
{ type: i1$4.ActivatedRoute },
|
|
12191
|
+
{ type: i1$4.Router },
|
|
12118
12192
|
{ type: i1$1.NgbModal }
|
|
12119
12193
|
];
|
|
12120
12194
|
};
|
|
@@ -12189,7 +12263,7 @@
|
|
|
12189
12263
|
EmpresaDetailComponent.ctorParameters = function () {
|
|
12190
12264
|
return [
|
|
12191
12265
|
{ type: ngJhipster.JhiDataUtils },
|
|
12192
|
-
{ type: i1$
|
|
12266
|
+
{ type: i1$4.ActivatedRoute }
|
|
12193
12267
|
];
|
|
12194
12268
|
};
|
|
12195
12269
|
return EmpresaDetailComponent;
|
|
@@ -12424,9 +12498,9 @@
|
|
|
12424
12498
|
{ type: ngJhipster.JhiParseLinks },
|
|
12425
12499
|
{ type: PortalAlertService },
|
|
12426
12500
|
{ type: Principal },
|
|
12427
|
-
{ type: i1$
|
|
12501
|
+
{ type: i1$4.ActivatedRoute },
|
|
12428
12502
|
{ type: ngJhipster.JhiDataUtils },
|
|
12429
|
-
{ type: i1$
|
|
12503
|
+
{ type: i1$4.Router },
|
|
12430
12504
|
{ type: ngJhipster.JhiEventManager }
|
|
12431
12505
|
];
|
|
12432
12506
|
};
|
|
@@ -12563,7 +12637,7 @@
|
|
|
12563
12637
|
ngJhipster.NgJhipsterModule,
|
|
12564
12638
|
angularFontawesome.FontAwesomeModule,
|
|
12565
12639
|
PortalAlertModule,
|
|
12566
|
-
i1$
|
|
12640
|
+
i1$4.RouterModule.forChild(ENTITY_STATES$8)
|
|
12567
12641
|
],
|
|
12568
12642
|
declarations: [
|
|
12569
12643
|
EmpresaComponent,
|
|
@@ -12735,7 +12809,7 @@
|
|
|
12735
12809
|
/** @nocollapse */
|
|
12736
12810
|
UserMgmtDetailComponent.ctorParameters = function () {
|
|
12737
12811
|
return [
|
|
12738
|
-
{ type: i1$
|
|
12812
|
+
{ type: i1$4.ActivatedRoute }
|
|
12739
12813
|
];
|
|
12740
12814
|
};
|
|
12741
12815
|
return UserMgmtDetailComponent;
|
|
@@ -12864,8 +12938,8 @@
|
|
|
12864
12938
|
return [
|
|
12865
12939
|
{ type: JhiLanguageHelper },
|
|
12866
12940
|
{ type: UserService },
|
|
12867
|
-
{ type: i1$
|
|
12868
|
-
{ type: i1$
|
|
12941
|
+
{ type: i1$4.ActivatedRoute },
|
|
12942
|
+
{ type: i1$4.Router }
|
|
12869
12943
|
];
|
|
12870
12944
|
};
|
|
12871
12945
|
return UserMgmtUpdateComponent;
|
|
@@ -13143,8 +13217,8 @@
|
|
|
13143
13217
|
{ type: PortalAlertService },
|
|
13144
13218
|
{ type: Principal },
|
|
13145
13219
|
{ type: ngJhipster.JhiParseLinks },
|
|
13146
|
-
{ type: i1$
|
|
13147
|
-
{ type: i1$
|
|
13220
|
+
{ type: i1$4.ActivatedRoute },
|
|
13221
|
+
{ type: i1$4.Router },
|
|
13148
13222
|
{ type: GlobalService },
|
|
13149
13223
|
{ type: ngJhipster.JhiEventManager },
|
|
13150
13224
|
{ type: i1$1.NgbModal }
|
|
@@ -13694,7 +13768,7 @@
|
|
|
13694
13768
|
angularFontawesome.FontAwesomeModule,
|
|
13695
13769
|
PortalAlertModule,
|
|
13696
13770
|
FindLanguageModulo,
|
|
13697
|
-
i1$
|
|
13771
|
+
i1$4.RouterModule.forChild(ENTITY_STATES$9),
|
|
13698
13772
|
PipeModulo
|
|
13699
13773
|
],
|
|
13700
13774
|
declarations: [
|
|
@@ -13759,7 +13833,7 @@
|
|
|
13759
13833
|
/** @nocollapse */
|
|
13760
13834
|
ErrorComponent.ctorParameters = function () {
|
|
13761
13835
|
return [
|
|
13762
|
-
{ type: i1$
|
|
13836
|
+
{ type: i1$4.ActivatedRoute },
|
|
13763
13837
|
{ type: common.PlatformLocation }
|
|
13764
13838
|
];
|
|
13765
13839
|
};
|
|
@@ -14327,7 +14401,7 @@
|
|
|
14327
14401
|
{ type: ProfileService },
|
|
14328
14402
|
{ type: ParametrosService },
|
|
14329
14403
|
{ type: GlobalService },
|
|
14330
|
-
{ type: i1$
|
|
14404
|
+
{ type: i1$4.Router },
|
|
14331
14405
|
{ type: UtilMensagem },
|
|
14332
14406
|
{ type: Principal },
|
|
14333
14407
|
{ type: ngJhipster.JhiEventManager },
|
|
@@ -14390,7 +14464,7 @@
|
|
|
14390
14464
|
* @param {?} event
|
|
14391
14465
|
* @return {?}
|
|
14392
14466
|
*/function (event) {
|
|
14393
|
-
if (event instanceof i1$
|
|
14467
|
+
if (event instanceof i1$4.NavigationEnd) {
|
|
14394
14468
|
if (event.url.indexOf('/accessdenied') < 0 && event.url !== '/') {
|
|
14395
14469
|
/** @type {?} */
|
|
14396
14470
|
var lockedPage = LockPage$$1.retrieveFromStorage(_this.sessionStorage);
|
|
@@ -14421,7 +14495,7 @@
|
|
|
14421
14495
|
JhiMainComponent.ctorParameters = function () {
|
|
14422
14496
|
return [
|
|
14423
14497
|
{ type: JhiLanguageHelper },
|
|
14424
|
-
{ type: i1$
|
|
14498
|
+
{ type: i1$4.Router },
|
|
14425
14499
|
{ type: ngxWebstorage.SessionStorageService },
|
|
14426
14500
|
{ type: OptionsProvider }
|
|
14427
14501
|
];
|
|
@@ -14644,7 +14718,7 @@
|
|
|
14644
14718
|
CookieConsentModule,
|
|
14645
14719
|
NotificacoesModule,
|
|
14646
14720
|
i1$1.NgbModule.forRoot(),
|
|
14647
|
-
i1$
|
|
14721
|
+
i1$4.RouterModule.forRoot(__spread(LAYOUT_ROUTES), { useHash: true, enableTracing: true }),
|
|
14648
14722
|
i4.JoyrideModule.forRoot()
|
|
14649
14723
|
],
|
|
14650
14724
|
declarations: [
|
|
@@ -14656,7 +14730,7 @@
|
|
|
14656
14730
|
PageRibbonComponent
|
|
14657
14731
|
],
|
|
14658
14732
|
exports: [
|
|
14659
|
-
i1$
|
|
14733
|
+
i1$4.RouterModule,
|
|
14660
14734
|
ErrorComponent,
|
|
14661
14735
|
JhiMainComponent,
|
|
14662
14736
|
NavbarComponent,
|
|
@@ -14770,7 +14844,7 @@
|
|
|
14770
14844
|
return [
|
|
14771
14845
|
{ type: ActivateService },
|
|
14772
14846
|
{ type: LoginModalService },
|
|
14773
|
-
{ type: i1$
|
|
14847
|
+
{ type: i1$4.ActivatedRoute }
|
|
14774
14848
|
];
|
|
14775
14849
|
};
|
|
14776
14850
|
return ActivateComponent;
|
|
@@ -15029,7 +15103,7 @@
|
|
|
15029
15103
|
return [
|
|
15030
15104
|
{ type: PasswordResetFinishService },
|
|
15031
15105
|
{ type: LoginModalService },
|
|
15032
|
-
{ type: i1$
|
|
15106
|
+
{ type: i1$4.ActivatedRoute },
|
|
15033
15107
|
{ type: i0.ElementRef },
|
|
15034
15108
|
{ type: i0.Renderer }
|
|
15035
15109
|
];
|
|
@@ -15222,6 +15296,7 @@
|
|
|
15222
15296
|
* @return {?}
|
|
15223
15297
|
*/function (account) {
|
|
15224
15298
|
_this.settingsAccount = _this.copyAccount(account);
|
|
15299
|
+
_this.mensagemAtualizacaoCadastral = account && account.mensagemAtualizacaoCadastral;
|
|
15225
15300
|
}));
|
|
15226
15301
|
this.languageHelper.getAll().then(( /**
|
|
15227
15302
|
* @param {?} languages
|
|
@@ -15238,6 +15313,9 @@
|
|
|
15238
15313
|
*/
|
|
15239
15314
|
function () {
|
|
15240
15315
|
var _this = this;
|
|
15316
|
+
if (this.settingsAccount && this.settingsAccount.telefone) {
|
|
15317
|
+
this.settingsAccount.telefone = this.settingsAccount.telefone.replace(/\D/g, '');
|
|
15318
|
+
}
|
|
15241
15319
|
this.account.save(this.settingsAccount).subscribe(( /**
|
|
15242
15320
|
* @return {?}
|
|
15243
15321
|
*/function () {
|
|
@@ -15248,6 +15326,7 @@
|
|
|
15248
15326
|
* @return {?}
|
|
15249
15327
|
*/function (account) {
|
|
15250
15328
|
_this.settingsAccount = _this.copyAccount(account);
|
|
15329
|
+
_this.mensagemAtualizacaoCadastral = account && account.mensagemAtualizacaoCadastral;
|
|
15251
15330
|
}));
|
|
15252
15331
|
_this.languageService.getCurrent().then(( /**
|
|
15253
15332
|
* @param {?} current
|
|
@@ -15280,13 +15359,14 @@
|
|
|
15280
15359
|
langKey: account.langKey,
|
|
15281
15360
|
lastName: account.lastName,
|
|
15282
15361
|
login: account.login,
|
|
15283
|
-
imageUrl: account.imageUrl
|
|
15362
|
+
imageUrl: account.imageUrl,
|
|
15363
|
+
telefone: account.telefone
|
|
15284
15364
|
};
|
|
15285
15365
|
};
|
|
15286
15366
|
SettingsComponent.decorators = [
|
|
15287
15367
|
{ type: i0.Component, args: [{
|
|
15288
15368
|
selector: 'jhi-settings',
|
|
15289
|
-
template: "<div>\r\n <div class=\"row justify-content-center\">\r\n <div class=\"card-container col-12\">\r\n <h2 jhiTranslate=\"settings.title\" translateValues=\"{username: '{{settingsAccount.login}}'}\"\r\n *ngIf=\"settingsAccount\">User settings for [<b>{{settingsAccount.login}}</b>]</h2>\r\n <div class=\"alert alert-success\" *ngIf=\"success\" jhiTranslate=\"settings.messages.success\">\
|
|
15369
|
+
template: "<div>\r\n <div class=\"row justify-content-center\">\r\n <div class=\"card-container col-12\">\r\n <h2 jhiTranslate=\"settings.title\" translateValues=\"{username: '{{settingsAccount.login}}'}\"\r\n *ngIf=\"settingsAccount\">User settings for [<b>{{settingsAccount.login}}</b>]</h2>\r\n <div class=\"alert alert-success\" *ngIf=\"success\" jhiTranslate=\"settings.messages.success\">\n <strong>Settings saved!</strong>\n </div>\n <div class=\"alert alert-warning\" *ngIf=\"mensagemAtualizacaoCadastral\">\n {{ mensagemAtualizacaoCadastral }}\n </div>\n <jhi-alert-error></jhi-alert-error>\n <form name=\"form\" role=\"form\" (ngSubmit)=\"save()\" #settingsForm=\"ngForm\" *ngIf=\"settingsAccount\" novalidate>\r\n <div class=\"row mt-2\">\r\n <div class=\"form-group col-12\">\r\n <label class=\"form-control-label\" for=\"firstName\">Nome/Raz\u00E3o Social</label>\r\n <input type=\"text\" class=\"form-control\" id=\"firstName\" name=\"firstName\"\r\n placeholder=\"Nome/Raz\u00E3o Social\"\r\n [(ngModel)]=\"settingsAccount.firstName\" minlength=1 maxlength=50 #firstNameInput=\"ngModel\"\r\n required>\r\n <div *ngIf=\"firstNameInput.dirty && firstNameInput.invalid\">\r\n <small class=\"form-text text-danger\"\r\n *ngIf=\"firstNameInput.errors.required\">\r\n Campo Nome/Raz\u00E3o Social \u00E9 obrigat\u00F3rio\r\n </small>\r\n <small class=\"form-text text-danger\"\r\n *ngIf=\"firstNameInput.errors.minlength\">\r\n Campo Nome/Raz\u00E3o Social \u00E9 obrigat\u00F3rio e deve ter, pelo menos, 1 caractere.\r\n </small>\r\n <small class=\"form-text text-danger\"\r\n *ngIf=\"firstNameInput.errors.maxlength\">\r\n Campo Nome/Raz\u00E3o Social deve ter, no m\u00E1ximo, 50 caracteres.\r\n </small>\r\n </div>\r\n </div>\r\n <!--\r\n <div class=\"form-group col-6\">\r\n <label class=\"form-control-label\" for=\"lastName\" jhiTranslate=\"settings.form.lastname\">Last\r\n Name</label>\r\n <input type=\"text\" class=\"form-control\" id=\"lastName\" name=\"lastName\"\r\n placeholder=\"{{'settings.form.lastname.placeholder' | translate}}\"\r\n [(ngModel)]=\"settingsAccount.lastName\" minlength=1 maxlength=50 #lastNameInput=\"ngModel\"\r\n required>\r\n <div *ngIf=\"lastNameInput.dirty && lastNameInput.invalid\">\r\n <small class=\"form-text text-danger\"\r\n *ngIf=\"lastNameInput.errors.required\"\r\n jhiTranslate=\"settings.messages.validate.lastname.required\">\r\n Your last name is required.\r\n </small>\r\n <small class=\"form-text text-danger\"\r\n *ngIf=\"lastNameInput.errors.minlength\"\r\n jhiTranslate=\"settings.messages.validate.lastname.minlength\">\r\n Your last name is required to be at least 1 character.\r\n </small>\r\n <small class=\"form-text text-danger\"\r\n *ngIf=\"lastNameInput.errors.maxlength\"\r\n jhiTranslate=\"settings.messages.validate.lastname.maxlength\">\r\n Your last name cannot be longer than 50 characters.\r\n </small>\r\n </div>\r\n </div>\r\n -->\r\n </div>\r\n <div class=\"row\">\n <div class=\"form-group col-6\">\n <label class=\"form-control-label\" for=\"telefone\">Telefone</label>\n <input type=\"text\" class=\"form-control\" id=\"telefone\" name=\"telefone\"\n placeholder=\"(99) 99999-9999\"\n [(ngModel)]=\"settingsAccount.telefone\" maxlength=\"14\">\n </div>\n <div class=\"form-group col-6\">\n <label class=\"form-control-label\" for=\"email\" jhiTranslate=\"global.form.email\">Email</label>\n <input type=\"email\" class=\"form-control\" id=\"email\" name=\"email\"\r\n placeholder=\"{{'global.form.email.placeholder' | translate}}\"\r\n [(ngModel)]=\"settingsAccount.email\" minlength=\"5\" maxlength=\"254\" #emailInput=\"ngModel\" email\r\n required>\r\n <div *ngIf=\"emailInput.dirty && emailInput.invalid\">\r\n <small class=\"form-text text-danger\"\r\n *ngIf=\"emailInput.errors.required\"\r\n jhiTranslate=\"global.messages.validate.email.required\">\r\n Your email is required.\r\n </small>\r\n <small class=\"form-text text-danger\"\r\n *ngIf=\"emailInput.errors.email\" jhiTranslate=\"global.messages.validate.email.invalid\">\r\n Your email is invalid.\r\n </small>\r\n <small class=\"form-text text-danger\"\r\n *ngIf=\"emailInput.errors.minlength\"\r\n jhiTranslate=\"global.messages.validate.email.minlength\">\r\n Your email is required to be at least 5 characters.\r\n </small>\r\n <small class=\"form-text text-danger\"\r\n *ngIf=\"emailInput.errors.maxlength\"\r\n jhiTranslate=\"global.messages.validate.email.maxlength\">\r\n Your email cannot be longer than 100 characters.\r\n </small>\r\n </div>\r\n </div>\r\n <div class=\"form-group col-6\" *ngIf=\"languages && languages.length > 0\">\r\n <label for=\"langKey\" jhiTranslate=\"settings.form.language\">Language</label>\r\n <select class=\"form-control\" id=\"langKey\" name=\"langKey\" [(ngModel)]=\"settingsAccount.langKey\">\r\n <option *ngFor=\"let language of languages\"\r\n [value]=\"language\">{{language | findLanguageFromKey}}</option>\r\n </select>\r\n </div>\r\n </div>\r\n <div class=\"text-center p-3\">\r\n <button type=\"submit\" [disabled]=\"settingsForm.form.invalid\" class=\"btn btn-primary\">\r\n <fa-icon [icon]=\"'save'\"></fa-icon> <span jhiTranslate=\"entity.action.save\">Save</span>\r\n </button>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n\r\n</div>\r\n"
|
|
15290
15370
|
}] }
|
|
15291
15371
|
];
|
|
15292
15372
|
/** @nocollapse */
|
|
@@ -15349,7 +15429,7 @@
|
|
|
15349
15429
|
i1$1.NgbModule.forRoot(),
|
|
15350
15430
|
angularFontawesome.FontAwesomeModule,
|
|
15351
15431
|
PasswordStrengthModule,
|
|
15352
|
-
i1$
|
|
15432
|
+
i1$4.RouterModule.forChild(accountState)
|
|
15353
15433
|
],
|
|
15354
15434
|
declarations: [
|
|
15355
15435
|
ActivateComponent,
|
|
@@ -16023,4 +16103,4 @@
|
|
|
16023
16103
|
|
|
16024
16104
|
})));
|
|
16025
16105
|
|
|
16026
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlicmFyeS1wb3J0YWwudW1kLmpzLm1hcCIsInNvdXJjZXMiOlsibm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL21vZGVsL2NwZi1jbnBqLm1vZGVsLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvY29tcG9uZW50cy9jcGYtY25wai9jcGYtY25wai52YWxpZGF0b3IudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi91dGlsL3V0aWwtZnVuY3Rpb25zLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvY29tcG9uZW50cy9jcGYtY25wai9jcGYtY25wai52YWxpZGF0b3IuZGlyZWN0aXZlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvY29tcG9uZW50cy9jcGYtY25wai9jcGYtY25wai5tb2R1bGUudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9jb21wb25lbnRzL2ludGVnZXItZmllbGQvaW50ZWdlci1maWVsZC5kaXJlY3RpdmUudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9jb21wb25lbnRzL2ludGVnZXItZmllbGQvaW50ZWdlci1maWVsZC5tb2R1bGUudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi91dGlsL2VuY29kZS1kZWNvZGUtYmFzZTY0LnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvdXRpbC9yZXF1ZXN0LXV0aWwudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi91dGlsL2RhdGVwaWNrZXItYWRhcHRlci50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL3V0aWwvZXJyb3IuY29uc3RhbnRzLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvdXRpbC9wYWdpbmF0aW9uLmNvbnN0YW50cy50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL3V0aWwvb3B0aW9ucy1wcm92aWRlci50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL3V0aWwvdXRpbC1hcnF1aXZvLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvdXRpbC9sb2NrLXBhZ2VzLW1vZGVsLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvY29tcG9uZW50cy9wZGYvcGRmLmNvbXBvbmVudC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2NvbXBvbmVudHMvcGRmL3BkZi5zZXJ2aWNlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvY29tcG9uZW50cy9wZGYvcGRmLm1vZHVsZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2NvbXBvbmVudHMvbW9kYWwtZGlhbG9nL21vZGFsLWRpYWxvZy5tb2RlbC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2NvbXBvbmVudHMvbW9kYWwtZGlhbG9nL21vZGFsLWRpYWxvZy5jb21wb25lbnQudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9sYW5ndWFnZS9maW5kLWxhbmd1YWdlLWZyb20ta2V5LnBpcGUudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9sYW5ndWFnZS9maW5kLWxhbmd1YWdlLm1vZHVsby50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2NvbXBvbmVudHMvbW9kYWwtZGlhbG9nL21vZGFsLWRpYWxvZy5tb2R1bGUudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9tb2RlbC9wYXJhbWV0cm8ubW9kZWwudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9jb21wb25lbnRzL3BhcmFtZXRyb3MvcGFyYW1ldHJvcy5zZXJ2aWNlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvY29tcG9uZW50cy9wYXJhbWV0cm9zL3BhcmFtZXRyby5yZXN1bHQudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9hbGVydC9wb3J0YWwtYWxlcnQuc2VydmljZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2FsZXJ0L3V0aWwtbWVuc2FnZW0udHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9jb21wb25lbnRzL3BhcmFtZXRyb3MvcGFyYW1ldHJvcy5lZGl0LmNvbXBvbmVudC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2NvbXBvbmVudHMvcGFyYW1ldHJvcy9wYXJhbWV0cm9zLmNvbXBvbmVudC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2FsZXJ0L2FsZXJ0LmNvbXBvbmVudC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2FsZXJ0L2FsZXJ0LWVycm9yLmNvbXBvbmVudC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2FsZXJ0L3BvcnRhbC1hbGVydC5tb2R1bGUudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9tb2RlbC9jYW1wb3MtcHJlZW5jaGltZW50by5tb2RlbC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL21vZGVsL2NvbnRyaWJ1aW50ZS5tb2RlbC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2NvbXBvbmVudHMvYWp1ZGEvYWp1ZGEuY29tcG9uZW50LnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvY29tcG9uZW50cy9wYXJhbWV0cm9zL2dsb2JhbC5zZXJ2aWNlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvY29tcG9uZW50cy9hanVkYS9hanVkYS5tb2R1bGUudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9jb21wb25lbnRzL3BhcmFtZXRyb3MvcGFyYW1ldHJvcy5tb2R1bGUudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9jb21wb25lbnRzL3Rlcm1vLWxncGQvdGVybW8tbGdwZC5zZXJ2aWNlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvbW9kZWwvdGVybW8tbGdwZC5tb2RlbC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2NvbXBvbmVudHMvdGVybW8tbGdwZC90ZXJtby1sZ3BkLmNvbXBvbmVudC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2NvbXBvbmVudHMvdGVybW8tbGdwZC90ZXJtby1sZ3BkLm1vZHVsZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2NvbXBvbmVudHMvY29va2llLWNvbnNlbnQvY29va2llLWNvbnNlbnQuY29tcG9uZW50LnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvY29tcG9uZW50cy9jb29raWUtY29uc2VudC9jb29raWUtY29uc2VudC5tb2R1bGUudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9hdXRoL2FjY291bnQuc2VydmljZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2F1dGgvcHJpbmNpcGFsLnNlcnZpY2UudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9jb21wb25lbnRzL3BhZ2luYS1wYXJhbWV0cml6YWRhL3BhZ2luYS1wYXJhbWV0cml6YWRhLmNvbXBvbmVudC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2F1dGgvaGFzLWFueS1hdXRob3JpdHkuZGlyZWN0aXZlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvYXV0aC9zdGF0ZS1zdG9yYWdlLnNlcnZpY2UudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9hdXRoL2F1dGgtand0LnNlcnZpY2UudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9hdXRoL2F1dGgubW9kdWxlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvY29tcG9uZW50cy9wYWdpbmEtcGFyYW1ldHJpemFkYS9wYWdpbmEtcGFyYW1ldHJpemFkYS5tb2R1bGUudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9jb21wb25lbnRzL211bHRpcGxlLWNhcHRjaGEvbXVsdGlwbGUtY2FwdGNoYS5tb2RlbC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2NvbXBvbmVudHMvbXVsdGlwbGUtY2FwdGNoYS9tdWx0aXBsZS1jYXB0Y2hhLnNlcnZpY2UudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9jb21wb25lbnRzL211bHRpcGxlLWNhcHRjaGEvaTE4bi9wdC1ici50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2NvbXBvbmVudHMvbXVsdGlwbGUtY2FwdGNoYS9tdWx0aXBsZS1jYXB0Y2hhLmNvbXBvbmVudC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2NvbXBvbmVudHMvbXVsdGlwbGUtY2FwdGNoYS9tdWx0aXBsZS1jYXB0Y2hhLm1vZHVsZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2NvbXBvbmVudHMvbm90aWZpY2Fjb2VzL25vdGlmaWNhY29lcy5zZXJ2aWNlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvY29tcG9uZW50cy9ub3RpZmljYWNvZXMvbm90aWZpY2Fjb2VzLWRldGFsaGUuY29tcG9uZW50LnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvY29tcG9uZW50cy9ub3RpZmljYWNvZXMvbm90aWZpY2Fjb2VzLXBvcHVwLmNvbXBvbmVudC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2NvbXBvbmVudHMvbm90aWZpY2Fjb2VzL25vdGlmaWNhY29lcy5tb2R1bGUudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9hdXRoL2NzcmYuc2VydmljZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2xvZ2luL2xvZ2luLnNlcnZpY2UudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9yZWdpc3Rlci9yZWdpc3Rlci5zZXJ2aWNlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvcmVnaXN0ZXIvcmVnaXN0ZXIuY29tcG9uZW50LnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvcmVnaXN0ZXIvcmVnaXN0ZXItbW9kYWwuc2VydmljZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL3VzZXIvdXNlci5zZXJ2aWNlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvbG9naW4vbG9naW4uY29tcG9uZW50LnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvbG9naW4vbG9naW4tbW9kYWwuc2VydmljZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2F1dGgvdXNlci1yb3V0ZS1hY2Nlc3Mtc2VydmljZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL21vZGVsL2FjY291bnQubW9kZWwudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9tb2RlbC91c2VyLm1vZGVsLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvbW9kZWwvZW1wcmVzYS5tb2RlbC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL21vZGVsL21lbnUubW9kZWwudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9tb2RlbC9nYXRld2F5LXJvdXRlLm1vZGVsLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvbW9kZWwvYXVkaXQubW9kZWwudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9tb2RlbC9hdWRpdC1kYXRhLm1vZGVsLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvbW9kZWwvbG9nLm1vZGVsLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvbW9kZWwvcHJvZmlsZS1pbmZvLm1vZGVsLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvbW9kZWwvbXVuaWNpcGlvLm1vZGVsLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvbW9kZWwvZW5kZXJlY28ubW9kZWwudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9tb2RlbC9wYWlzLm1vZGVsLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvbW9kZWwvdGlwby1sb2dyYWRvdXJvLm1vZGVsLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvbW9kZWwvdGl0dWxvLWxvZ3JhZG91cm8ubW9kZWwudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9tb2RlbC9wZXNzb2EtZmlzaWNhLm1vZGVsLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvbW9kZWwvcGVzc29hLWp1cmlkaWNhLm1vZGVsLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvbW9kZWwvcmVzcG9uc2F2ZWwubW9kZWwudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9tb2RlbC92aWEtY2VwLm1vZGVsLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvbW9kZWwvY2VydGlkYW8ubW9kZWwudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9tb2RlbC9jb25maWd1cmFjYW8tcGFyY2VsYW1lbnRvLm1vZGVsLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvbW9kZWwvaW1vdmVsLm1vZGVsLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvbW9kZWwvZGFkb3MtZGViaXRvLm1vZGVsLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvbW9kZWwvZGViaXRvLm1vZGVsLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvbW9kZWwvZW51bXMubW9kZWwudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9tb2RlbC9nZXJhY2FvLWJvbGV0by5tb2RlbC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL21vZGVsL3BhcmNlbGEubW9kZWwudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9tb2RlbC9wYXJjZWxhbWVudG8ubW9kZWwudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9tb2RlbC9jb25zdGFudHMtZW51bS5tb2RlbC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2NvbXBvbmVudHMvcGFzc3dvcmQtc3RyZW5ndGgvcGFzc3dvcmQtc3RyZW5ndGgtYmFyLmNvbXBvbmVudC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2NvbXBvbmVudHMvcGFzc3dvcmQtc3RyZW5ndGgvcGFzc3dvcmQtc3RyZW5ndGgubW9kdWxlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvcmVnaXN0ZXIvcmVnaXN0ZXIubW9kdWxlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvbG9naW4vbG9naW4ubW9kdWxlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvbGFuZ3VhZ2UvbGFuZ3VhZ2UuY29uc3RhbnRzLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvbGFuZ3VhZ2UvbGFuZ3VhZ2UuaGVscGVyLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvYWRtaW4vZ2F0ZXdheS9nYXRld2F5LXJvdXRlcy5zZXJ2aWNlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvYWRtaW4vZ2F0ZXdheS9nYXRld2F5LmNvbXBvbmVudC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2FkbWluL2dhdGV3YXkvZ2F0ZXdheS5yb3V0ZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2FkbWluL2dhdGV3YXkvZ2F0ZXdheS5tb2R1bGUudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9hZG1pbi9hdWRpdHMvYXVkaXRzLnNlcnZpY2UudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9hZG1pbi9hdWRpdHMvYXVkaXRzLmNvbXBvbmVudC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2FkbWluL2F1ZGl0cy9hdWRpdHMucm91dGUudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9hZG1pbi9hdWRpdHMvYXVkaXRzLm1vZHVsZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2FkbWluL2NvbmZpZ3VyYXRpb24vY29uZmlndXJhdGlvbi5zZXJ2aWNlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvYWRtaW4vY29uZmlndXJhdGlvbi9jb25maWd1cmF0aW9uLmNvbXBvbmVudC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2FkbWluL2NvbmZpZ3VyYXRpb24vY29uZmlndXJhdGlvbi5yb3V0ZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2FkbWluL2NvbmZpZ3VyYXRpb24vY29uZmlndXJhdGlvbi5tb2R1bGUudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9hZG1pbi9tZXRyaWNzL21ldHJpY3MtbW9kYWwuY29tcG9uZW50LnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvYWRtaW4vbWV0cmljcy9tZXRyaWNzLnNlcnZpY2UudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9hZG1pbi9tZXRyaWNzL21ldHJpY3MuY29tcG9uZW50LnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvYWRtaW4vbWV0cmljcy9tZXRyaWNzLnJvdXRlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvYWRtaW4vbWV0cmljcy9tZXRyaWNzLm1vZHVsZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2FkbWluL2RvY3MvZG9jcy5jb21wb25lbnQudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9hZG1pbi9kb2NzL2RvY3Mucm91dGUudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9hZG1pbi9kb2NzL2RvY3MubW9kdWxlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvYWRtaW4vaGVhbHRoL2hlYWx0aC5zZXJ2aWNlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvYWRtaW4vaGVhbHRoL2hlYWx0aC1tb2RhbC5jb21wb25lbnQudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9hZG1pbi9oZWFsdGgvaGVhbHRoLmNvbXBvbmVudC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2FkbWluL2hlYWx0aC9oZWFsdGgucm91dGUudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9hZG1pbi9oZWFsdGgvaGVhbHRoLm1vZHVsZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2FkbWluL2xvZ3MvbG9ncy5zZXJ2aWNlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvYWRtaW4vbG9ncy9sb2dzLmNvbXBvbmVudC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2FkbWluL2xvZ3MvbG9ncy5yb3V0ZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2FkbWluL2xvZ3MvbG9ncy5tb2R1bGUudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9pbnRlcmNlcHRvci9hdXRoLmludGVyY2VwdG9yLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvaW50ZXJjZXB0b3IvYXV0aC1leHBpcmVkLmludGVyY2VwdG9yLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvaW50ZXJjZXB0b3IvZXJyb3JoYW5kbGVyLmludGVyY2VwdG9yLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvaW50ZXJjZXB0b3Ivbm90aWZpY2F0aW9uLmludGVyY2VwdG9yLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvbWVudS9tZW51LnNlcnZpY2UudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9lbXByZXNhL2VtcHJlc2Euc2VydmljZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2hvbWUvaG9tZS5jb21wb25lbnQudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9ob21lL2hvbWUucm91dGUudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9ob21lL2hvbWUubW9kdWxlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvbWVudS9tZW51LXVwZGF0ZS5jb21wb25lbnQudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9tZW51L21lbnUtZGVsZXRlLWRpYWxvZy5jb21wb25lbnQudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9tZW51L21lbnUtZGV0YWlsLmNvbXBvbmVudC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL21lbnUvbWVudS5jb21wb25lbnQudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9tZW51L21lbnUucm91dGUudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9tZW51L21lbnUubW9kdWxlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvZW1wcmVzYS9lbXByZXNhLXVwZGF0ZS5jb21wb25lbnQudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9lbXByZXNhL2VtcHJlc2EtZGVsZXRlLWRpYWxvZy5jb21wb25lbnQudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9lbXByZXNhL2VtcHJlc2EtZGV0YWlsLmNvbXBvbmVudC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2VtcHJlc2EvZW1wcmVzYS5jb21wb25lbnQudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9lbXByZXNhL2VtcHJlc2Eucm91dGUudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9lbXByZXNhL2VtcHJlc2EubW9kdWxlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvYmxvY2tzL3VpYi1wYWdpbmF0aW9uLmNvbmZpZy50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2Jsb2Nrcy9wcm9kLmNvbmZpZy50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL3VzZXIvdXNlci1tYW5hZ2VtZW50LWRlbGV0ZS1kaWFsb2cuY29tcG9uZW50LnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvdXNlci91c2VyLW1hbmFnZW1lbnQtZGV0YWlsLmNvbXBvbmVudC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL3VzZXIvdXNlci1tYW5hZ2VtZW50LXVwZGF0ZS5jb21wb25lbnQudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi91c2VyL3VzZXItbWFuYWdlbWVudC5jb21wb25lbnQudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi91c2VyL3VzZXItbWFuYWdlbWVudC5yb3V0ZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL3BpcGUvZW5kZXJlY28tcHJpbmNpcGFsLWZvcm1hdGFkby5waXBlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvcGlwZS9lbnVtLXN0cmluZy5waXBlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvcGlwZS9maWx0ZXIucGlwZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL3BpcGUvcGlwZS5tb2R1bG8udHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi91c2VyL3VzZXItbWFuYWdlbWVudC5tb2R1bGUudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9sYXlvdXRzL2Vycm9yL2Vycm9yLmNvbXBvbmVudC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2xheW91dHMvZXJyb3IvZXJyb3Iucm91dGUudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9sYXlvdXRzL3Byb2ZpbGVzL3Byb2ZpbGUuc2VydmljZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2xheW91dHMvbmF2YmFyL25hdmJhci5jb21wb25lbnQudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9sYXlvdXRzL25hdmJhci9uYXZiYXIucm91dGUudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9sYXlvdXRzL21haW4vbWFpbi5jb21wb25lbnQudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9sYXlvdXRzL25hdmJhci9hY3RpdmUtbWVudS5kaXJlY3RpdmUudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9sYXlvdXRzL3Byb2ZpbGVzL3BhZ2UtcmliYm9uLmNvbXBvbmVudC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2xheW91dHMvZm9vdGVyL2Zvb3Rlci5jb21wb25lbnQudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9sYXlvdXRzL2xheW91dHMubW9kdWxlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvYWNjb3VudC9hY3RpdmF0ZS9hY3RpdmF0ZS5zZXJ2aWNlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvYWNjb3VudC9hY3RpdmF0ZS9hY3RpdmF0ZS5jb21wb25lbnQudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9hY2NvdW50L2FjdGl2YXRlL2FjdGl2YXRlLnJvdXRlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvYWNjb3VudC9wYXNzd29yZC9wYXNzd29yZC5zZXJ2aWNlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvYWNjb3VudC9wYXNzd29yZC9wYXNzd29yZC5jb21wb25lbnQudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9hY2NvdW50L3Bhc3N3b3JkL3Bhc3N3b3JkLnJvdXRlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvYWNjb3VudC9wYXNzd29yZC1yZXNldC9maW5pc2gvcGFzc3dvcmQtcmVzZXQtZmluaXNoLnNlcnZpY2UudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9hY2NvdW50L3Bhc3N3b3JkLXJlc2V0L2ZpbmlzaC9wYXNzd29yZC1yZXNldC1maW5pc2guY29tcG9uZW50LnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvYWNjb3VudC9wYXNzd29yZC1yZXNldC9maW5pc2gvcGFzc3dvcmQtcmVzZXQtZmluaXNoLnJvdXRlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvYWNjb3VudC9wYXNzd29yZC1yZXNldC9pbml0L3Bhc3N3b3JkLXJlc2V0LWluaXQuc2VydmljZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2FjY291bnQvcGFzc3dvcmQtcmVzZXQvaW5pdC9wYXNzd29yZC1yZXNldC1pbml0LmNvbXBvbmVudC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2FjY291bnQvcGFzc3dvcmQtcmVzZXQvaW5pdC9wYXNzd29yZC1yZXNldC1pbml0LnJvdXRlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvYWNjb3VudC9zZXR0aW5ncy9zZXR0aW5ncy5jb21wb25lbnQudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9hY2NvdW50L3NldHRpbmdzL3NldHRpbmdzLnJvdXRlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvYWNjb3VudC9hY2NvdW50LnJvdXRlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvYWNjb3VudC9hY2NvdW50Lm1vZHVsZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2NvbXBvbmVudHMvZ3JpZC9ncmlkLmNvbXBvbmVudC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2NvbXBvbmVudHMvZ3JpZC9ncmlkLm1vZHVsZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2NvbXBvbmVudHMvZ3JpZC9ncmlkLm1hc2sudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG5MaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2VcclxudGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGVcclxuTGljZW5zZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcclxuXHJcblRISVMgQ09ERSBJUyBQUk9WSURFRCBPTiBBTiAqQVMgSVMqIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTllcclxuS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBBTlkgSU1QTElFRFxyXG5XQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLFxyXG5NRVJDSEFOVEFCTElUWSBPUiBOT04tSU5GUklOR0VNRU5ULlxyXG5cclxuU2VlIHRoZSBBcGFjaGUgVmVyc2lvbiAyLjAgTGljZW5zZSBmb3Igc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zXHJcbmFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cclxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cclxuLyogZ2xvYmFsIFJlZmxlY3QsIFByb21pc2UgKi9cclxuXHJcbnZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24oZCwgYikge1xyXG4gICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxyXG4gICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcclxuICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTsgfTtcclxuICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZXh0ZW5kcyhkLCBiKSB7XHJcbiAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xyXG4gICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XHJcbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgX19hc3NpZ24gPSBmdW5jdGlvbigpIHtcclxuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiBfX2Fzc2lnbih0KSB7XHJcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XHJcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSkgdFtwXSA9IHNbcF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3Jlc3QocywgZSkge1xyXG4gICAgdmFyIHQgPSB7fTtcclxuICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxyXG4gICAgICAgIHRbcF0gPSBzW3BdO1xyXG4gICAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKVxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIGlmIChlLmluZGV4T2YocFtpXSkgPCAwKVxyXG4gICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcclxuICAgIHJldHVybiB0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xyXG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XHJcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xyXG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcGFyYW0ocGFyYW1JbmRleCwgZGVjb3JhdG9yKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7IGRlY29yYXRvcih0YXJnZXQsIGtleSwgcGFyYW1JbmRleCk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fbWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpIHtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gUmVmbGVjdC5tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0ZXIodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XHJcbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHJlc3VsdC52YWx1ZSk7IH0pLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cclxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZ2VuZXJhdG9yKHRoaXNBcmcsIGJvZHkpIHtcclxuICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XHJcbiAgICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gc3RlcChvcCkge1xyXG4gICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcclxuICAgICAgICB3aGlsZSAoXykgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xyXG4gICAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XHJcbiAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxyXG4gICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19leHBvcnRTdGFyKG0sIGV4cG9ydHMpIHtcclxuICAgIGZvciAodmFyIHAgaW4gbSkgaWYgKCFleHBvcnRzLmhhc093blByb3BlcnR5KHApKSBleHBvcnRzW3BdID0gbVtwXTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fdmFsdWVzKG8pIHtcclxuICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXSwgaSA9IDA7XHJcbiAgICBpZiAobSkgcmV0dXJuIG0uY2FsbChvKTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAobyAmJiBpID49IG8ubGVuZ3RoKSBvID0gdm9pZCAwO1xyXG4gICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbyAmJiBvW2krK10sIGRvbmU6ICFvIH07XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVhZChvLCBuKSB7XHJcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XHJcbiAgICBpZiAoIW0pIHJldHVybiBvO1xyXG4gICAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XHJcbiAgICBmaW5hbGx5IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYXI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZCgpIHtcclxuICAgIGZvciAodmFyIGFyID0gW10sIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIGFyID0gYXIuY29uY2F0KF9fcmVhZChhcmd1bWVudHNbaV0pKTtcclxuICAgIHJldHVybiBhcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXdhaXQodikge1xyXG4gICAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBfX2F3YWl0ID8gKHRoaXMudiA9IHYsIHRoaXMpIDogbmV3IF9fYXdhaXQodik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jR2VuZXJhdG9yKHRoaXNBcmcsIF9hcmd1bWVudHMsIGdlbmVyYXRvcikge1xyXG4gICAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxuICAgIHZhciBnID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pLCBpLCBxID0gW107XHJcbiAgICByZXR1cm4gaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgaWYgKGdbbl0pIGlbbl0gPSBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKGEsIGIpIHsgcS5wdXNoKFtuLCB2LCBhLCBiXSkgPiAxIHx8IHJlc3VtZShuLCB2KTsgfSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHJlc3VtZShuLCB2KSB7IHRyeSB7IHN0ZXAoZ1tuXSh2KSk7IH0gY2F0Y2ggKGUpIHsgc2V0dGxlKHFbMF1bM10sIGUpOyB9IH1cclxuICAgIGZ1bmN0aW9uIHN0ZXAocikgeyByLnZhbHVlIGluc3RhbmNlb2YgX19hd2FpdCA/IFByb21pc2UucmVzb2x2ZShyLnZhbHVlLnYpLnRoZW4oZnVsZmlsbCwgcmVqZWN0KSA6IHNldHRsZShxWzBdWzJdLCByKTsgfVxyXG4gICAgZnVuY3Rpb24gZnVsZmlsbCh2YWx1ZSkgeyByZXN1bWUoXCJuZXh0XCIsIHZhbHVlKTsgfVxyXG4gICAgZnVuY3Rpb24gcmVqZWN0KHZhbHVlKSB7IHJlc3VtZShcInRocm93XCIsIHZhbHVlKTsgfVxyXG4gICAgZnVuY3Rpb24gc2V0dGxlKGYsIHYpIHsgaWYgKGYodiksIHEuc2hpZnQoKSwgcS5sZW5ndGgpIHJlc3VtZShxWzBdWzBdLCBxWzBdWzFdKTsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0RlbGVnYXRvcihvKSB7XHJcbiAgICB2YXIgaSwgcDtcclxuICAgIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiwgZnVuY3Rpb24gKGUpIHsgdGhyb3cgZTsgfSksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4sIGYpIHsgaVtuXSA9IG9bbl0gPyBmdW5jdGlvbiAodikgeyByZXR1cm4gKHAgPSAhcCkgPyB7IHZhbHVlOiBfX2F3YWl0KG9bbl0odikpLCBkb25lOiBuID09PSBcInJldHVyblwiIH0gOiBmID8gZih2KSA6IHY7IH0gOiBmOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jVmFsdWVzKG8pIHtcclxuICAgIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICB2YXIgbSA9IG9bU3ltYm9sLmFzeW5jSXRlcmF0b3JdLCBpO1xyXG4gICAgcmV0dXJuIG0gPyBtLmNhbGwobykgOiAobyA9IHR5cGVvZiBfX3ZhbHVlcyA9PT0gXCJmdW5jdGlvblwiID8gX192YWx1ZXMobykgOiBvW1N5bWJvbC5pdGVyYXRvcl0oKSwgaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGkpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IGlbbl0gPSBvW25dICYmIGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7IHYgPSBvW25dKHYpLCBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCB2LmRvbmUsIHYudmFsdWUpOyB9KTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgZCwgdikgeyBQcm9taXNlLnJlc29sdmUodikudGhlbihmdW5jdGlvbih2KSB7IHJlc29sdmUoeyB2YWx1ZTogdiwgZG9uZTogZCB9KTsgfSwgcmVqZWN0KTsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19tYWtlVGVtcGxhdGVPYmplY3QoY29va2VkLCByYXcpIHtcclxuICAgIGlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvb2tlZCwgXCJyYXdcIiwgeyB2YWx1ZTogcmF3IH0pOyB9IGVsc2UgeyBjb29rZWQucmF3ID0gcmF3OyB9XHJcbiAgICByZXR1cm4gY29va2VkO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9faW1wb3J0U3Rhcihtb2QpIHtcclxuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XHJcbiAgICB2YXIgcmVzdWx0ID0ge307XHJcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgcmVzdWx0W2tdID0gbW9kW2tdO1xyXG4gICAgcmVzdWx0LmRlZmF1bHQgPSBtb2Q7XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnREZWZhdWx0KG1vZCkge1xyXG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBkZWZhdWx0OiBtb2QgfTtcclxufVxyXG4iLCJleHBvcnQgZW51bSBSZWFsVGltZU1hc2tUeXBlIHtcclxuICAgIE5PTkUsXHJcbiAgICBQTEFDRUhPTERFUixcclxuICAgIENMQVNTSUNcclxufVxyXG5cclxuZXhwb3J0IGVudW0gRG9jVHlwZSB7XHJcbiAgQ1BGLFxyXG4gIENOUEosXHJcbiAgQk9USFxyXG59XHJcbiIsImltcG9ydCB7QWJzdHJhY3RDb250cm9sLCBWYWxpZGF0aW9uRXJyb3JzLCBWYWxpZGF0b3J9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHtEb2NUeXBlfSBmcm9tICcuLi8uLi9tb2RlbC9jcGYtY25wai5tb2RlbCc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ3BmQ25walZhbGlkYXRvciBpbXBsZW1lbnRzIFZhbGlkYXRvciB7XHJcbiAgc3RhdGljIGNwZkxlbmd0aCA9IDExO1xyXG4gIHN0YXRpYyBjcGZMZW5ndGhGaXJzdFBhcnQgPSAzO1xyXG4gIHN0YXRpYyBjbnBqTGVuZ3RoRmlyc3RQYXJ0ID0gMjtcclxuICBzdGF0aWMgY3BmTGVuZ3RoU2Vjb25kUGFydCA9IDY7XHJcbiAgc3RhdGljIGNucGpMZW5ndGhTZWNvbmRQYXJ0ID0gNTtcclxuICBzdGF0aWMgY3BmTGVuZ3RoVGhpcmRQYXJ0ID0gOTtcclxuICBzdGF0aWMgY25wakxlbmd0aFRoaXJkUGFydCA9IDg7XHJcbiAgc3RhdGljIGNucGpDcGZMZW5ndGhCb3VuZGFyaWVzID0gMTI7XHJcbiAgc3RhdGljIGNucGpMZW5ndGggPSAxNDtcclxuXHJcbiAgcHVibGljIGRvY1R5cGU6IERvY1R5cGUgPSBEb2NUeXBlLkJPVEg7XHJcbiAgLyoqXHJcbiAgICogQ2FsY3VsYSBvIGTDg8KtZ2l0byB2ZXJpZmljYWRvciBkbyBDUEYgb3UgQ05QSi5cclxuICAgKi9cclxuICBidWlsZERpZ2l0KGFycjogbnVtYmVyW10pOiBudW1iZXIge1xyXG4gICAgbGV0IGlzQ3BmID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKHRoaXMuZG9jVHlwZSA9PT0gRG9jVHlwZS5CT1RIKSB7XHJcbiAgICAgIGlzQ3BmID0gYXJyLmxlbmd0aCA8IENwZkNucGpWYWxpZGF0b3IuY3BmTGVuZ3RoO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmRvY1R5cGUgPT09IERvY1R5cGUuQ1BGKSB7XHJcbiAgICAgIGlzQ3BmID0gdHJ1ZTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5kb2NUeXBlID09PSBEb2NUeXBlLkNOUEopIHtcclxuICAgICAgaXNDcGYgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBkaWdpdCA9XHJcbiAgICAgIGFyci5tYXAoKHZhbCwgaWR4KSA9PiB2YWwgKiAoKCFpc0NwZiA/IGlkeCAlIDggOiBpZHgpICsgMikpLnJlZHVjZSgodG90YWwsIGN1cnJlbnQpID0+IHRvdGFsICsgY3VycmVudCkgJVxyXG4gICAgICBDcGZDbnBqVmFsaWRhdG9yLmNwZkxlbmd0aDtcclxuXHJcbiAgICBpZiAoZGlnaXQgPCAyICYmIGlzQ3BmKSB7XHJcbiAgICAgIHJldHVybiAwO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBkaWdpdCA8IDIgPyAwIDogQ3BmQ25walZhbGlkYXRvci5jcGZMZW5ndGggLSBkaWdpdDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFZhbGlkYSB1bSBDUEYgb3UgQ05QSiBkZSBhY29yZG8gY29tIHNldSBkw4PCrWdpdG8gdmVyaWZpY2Fkb3IuXHJcbiAgICovXHJcbiAgdmFsaWRhRG9jdW1lbnRvKGM6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcclxuICAgIGlmIChjLnZhbHVlID09PSB1bmRlZmluZWQgfHwgYy52YWx1ZSA9PT0gbnVsbCB8fCBjLnZhbHVlLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGNvbnN0IGNwZkNucGogPSBjLnZhbHVlLnJlcGxhY2UoL1xcRC9nLCAnJyk7XHJcblxyXG4gICAgLy8gVmVyaWZpY2Egc2UgdG9kb3Mgb3MgZMODwq1naXRvcyBzw4PCo28gaWd1YWlzLlxyXG4gICAgaWYgKC9eKFswLTldKVxcMSokLy50ZXN0KGNwZkNucGopKSB7XHJcbiAgICAgIHJldHVybiB7ZXF1YWxEaWdpdHM6IHRydWV9O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFZlcmlmaWNhIG8gdGFtYW5obyBkYSBzdHJpbmcuXHJcbiAgICBpZiAodGhpcy5kb2NUeXBlID09PSBEb2NUeXBlLkJPVEgpIHtcclxuICAgICAgaWYgKFtDcGZDbnBqVmFsaWRhdG9yLmNwZkxlbmd0aCwgQ3BmQ25walZhbGlkYXRvci5jbnBqTGVuZ3RoXS5pbmRleE9mKGNwZkNucGoubGVuZ3RoKSA8IDApIHtcclxuICAgICAgICByZXR1cm4ge2xlbmd0aDogdHJ1ZX07XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAodGhpcy5kb2NUeXBlID09PSBEb2NUeXBlLkNQRikge1xyXG4gICAgICBpZiAoQ3BmQ25walZhbGlkYXRvci5jcGZMZW5ndGggIT09IGNwZkNucGoubGVuZ3RoKSB7XHJcbiAgICAgICAgcmV0dXJuIHtsZW5ndGg6IHRydWV9O1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuZG9jVHlwZSA9PT0gRG9jVHlwZS5DTlBKKSB7XHJcbiAgICAgIGlmIChDcGZDbnBqVmFsaWRhdG9yLmNucGpMZW5ndGggIT09IGNwZkNucGoubGVuZ3RoKSB7XHJcbiAgICAgICAgcmV0dXJuIHtsZW5ndGg6IHRydWV9O1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQSBzZWd1aXIgw4PCqSByZWFsaXphZG8gbyBjw4PCoWxjdWxvIHZlcmlmaWNhZG9yLlxyXG4gICAgY29uc3QgY3BmQ25wakFycjogbnVtYmVyW10gPSBjcGZDbnBqXHJcbiAgICAgIC5zcGxpdCgnJylcclxuICAgICAgLnJldmVyc2UoKVxyXG4gICAgICAuc2xpY2UoMik7XHJcblxyXG4gICAgY3BmQ25wakFyci51bnNoaWZ0KHRoaXMuYnVpbGREaWdpdChjcGZDbnBqQXJyKSk7XHJcbiAgICBjcGZDbnBqQXJyLnVuc2hpZnQodGhpcy5idWlsZERpZ2l0KGNwZkNucGpBcnIpKTtcclxuXHJcbiAgICBpZiAoY3BmQ25waiAhPT0gY3BmQ25wakFyci5yZXZlcnNlKCkuam9pbignJykpIHtcclxuICAgICAgLy8gRMODwq1naXRvIHZlcmlmaWNhZG9yIG7Dg8KjbyDDg8KpIHbDg8KhbGlkbywgcmVzdWx0YW5kbyBlbSBmYWxoYS5cclxuICAgICAgcmV0dXJuIHtkaWdpdDogdHJ1ZX07XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbXBsZW1lbnRhIGEgaW50ZXJmYWNlIGRlIHVtIHZhbGlkYXRvci5cclxuICAgKi9cclxuICB2YWxpZGF0ZShjOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XHJcbiAgICByZXR1cm4gdGhpcy52YWxpZGFEb2N1bWVudG8oYyk7XHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCAqIGFzIENyeXB0b0pTIGZyb20gJ2NyeXB0by1qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgVXRpbEZ1bmN0aW9ucyB7XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgdmFsaWRhckNQRihzdHJDUEY6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IHNvbWEgPSAwO1xyXG5cclxuICAgIHN0ckNQRiA9IFV0aWxGdW5jdGlvbnMucmVtb3ZlTm9uTnVtYmVycyhzdHJDUEYpO1xyXG5cclxuICAgIGlmIChzdHJDUEYubGVuZ3RoICE9PSAxMSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKC9eKC4pXFwxKiQvLnRlc3Qoc3RyQ1BGKSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgc29tYSA9IHRoaXMuc29tYShzb21hLCBzdHJDUEYsIDExLCA5KTtcclxuXHJcbiAgICBsZXQgcmVzdG8gPSAoc29tYSAqIDEwKSAlIDExO1xyXG5cclxuICAgIGlmIChyZXN0byA9PT0gMTAgfHwgcmVzdG8gPT09IDExKSB7XHJcbiAgICAgIHJlc3RvID0gMDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAocmVzdG8gIT09IHBhcnNlSW50KHN0ckNQRi5zdWJzdHJpbmcoOSwgMTApLCAxMCkpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHNvbWEgPSAwO1xyXG4gICAgc29tYSA9IHRoaXMuc29tYShzb21hLCBzdHJDUEYsIDEyLCAxMCk7XHJcblxyXG4gICAgcmVzdG8gPSAoc29tYSAqIDEwKSAlIDExO1xyXG5cclxuICAgIGlmIChyZXN0byA9PT0gMTAgfHwgcmVzdG8gPT09IDExKSB7XHJcbiAgICAgIHJlc3RvID0gMDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmVzdG8gPT09IHBhcnNlSW50KHN0ckNQRi5zdWJzdHJpbmcoMTAsIDExKSwgMTApO1xyXG5cclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgdmFsaWRhckNOUEooY25wajogc3RyaW5nKSA6IGJvb2xlYW4ge1xyXG5cclxuICAgIGNucGogPSBVdGlsRnVuY3Rpb25zLnJlbW92ZU5vbk51bWJlcnMoY25waik7XHJcblxyXG4gICAgaWYgKGNucGoubGVuZ3RoICE9PSAxNCkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAoL14oWzAtOV0pXFwxKiQvLnRlc3QoY25waikpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFZhbGlkYSBEVnNcclxuICAgIGxldCB0YW1hbmhvID0gY25wai5sZW5ndGggLSAyO1xyXG4gICAgbGV0IG51bWVyb3MgPSBjbnBqLnN1YnN0cmluZygwLCB0YW1hbmhvKTtcclxuICAgIGNvbnN0IGRpZ2l0b3MgPSBjbnBqLnN1YnN0cmluZyh0YW1hbmhvKTtcclxuICAgIGxldCBzb21hID0gMDtcclxuICAgIGxldCBwb3MgPSB0YW1hbmhvIC0gNztcclxuICAgIGZvciAobGV0IGkgPSB0YW1hbmhvOyBpID49IDE7IGktLSkge1xyXG4gICAgICBzb21hICs9IHBhcnNlSW50KG51bWVyb3MuY2hhckF0KHRhbWFuaG8gLSBpKSwgMTApICogcG9zLS07XHJcbiAgICAgIGlmIChwb3MgPCAyKSB7XHJcbiAgICAgICAgcG9zID0gOTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgbGV0IHJlc3VsdGFkbyA9IHNvbWEgJSAxMSA8IDIgPyAwIDogMTEgLSBzb21hICUgMTE7XHJcbiAgICBpZiAocmVzdWx0YWRvLnRvU3RyaW5nKCkgIT09IGRpZ2l0b3MuY2hhckF0KDApKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICB0YW1hbmhvID0gdGFtYW5obyArIDE7XHJcbiAgICBudW1lcm9zID0gY25wai5zdWJzdHJpbmcoMCwgdGFtYW5obyk7XHJcbiAgICBzb21hID0gMDtcclxuICAgIHBvcyA9IHRhbWFuaG8gLSA3O1xyXG4gICAgZm9yIChsZXQgaSA9IHRhbWFuaG87IGkgPj0gMTsgaS0tKSB7XHJcbiAgICAgIHNvbWEgKz0gcGFyc2VJbnQobnVtZXJvcy5jaGFyQXQodGFtYW5obyAtIGkpLCAxMCkgKiBwb3MtLTtcclxuICAgICAgaWYgKHBvcyA8IDIpIHtcclxuICAgICAgICBwb3MgPSA5O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXN1bHRhZG8gPSBzb21hICUgMTEgPCAyID8gMCA6IDExIC0gc29tYSAlIDExO1xyXG4gICAgaWYgKHJlc3VsdGFkby50b1N0cmluZygpICE9PSBkaWdpdG9zLmNoYXJBdCgxKSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcblxyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyB2YWxpZGFyRG9jdW1lbnRvKGRvY3VtZW50bzogc3RyaW5nKSA6IGJvb2xlYW4ge1xyXG4gICAgZG9jdW1lbnRvID0gVXRpbEZ1bmN0aW9ucy5yZW1vdmVOb25OdW1iZXJzKGRvY3VtZW50byk7XHJcbiAgICBpZiAoZG9jdW1lbnRvLmxlbmd0aCA9PT0gMTQpIHtcclxuICAgICAgcmV0dXJuIFV0aWxGdW5jdGlvbnMudmFsaWRhckNOUEooZG9jdW1lbnRvKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBVdGlsRnVuY3Rpb25zLnZhbGlkYXJDUEYoZG9jdW1lbnRvKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIHNvbWEoc29tYTogbnVtYmVyLCBjcGY6IHN0cmluZywgZGlnaXRvOiBudW1iZXIsIGxlbmd0aDogbnVtYmVyKSB7XHJcbiAgICBmb3IgKGxldCBpbmRleCA9IDE7IGluZGV4IDw9IGxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICBzb21hID0gc29tYSArIHBhcnNlSW50KGNwZi5zdWJzdHJpbmcoaW5kZXggLSAxLCBpbmRleCksIDEwKSAqIChkaWdpdG8gLSBpbmRleCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc29tYTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgcmVtb3ZlTm9uQWxwaGFOdW1lcmljKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgaWYgKCFVdGlsRnVuY3Rpb25zLmlzVmFsaWRTdHJpbmdPckFycmF5KHZhbHVlKSkge1xyXG4gICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcbiAgICBjb25zdCByZWdFeHAgPSAvW15BLVphLXowLTldL2c7XHJcbiAgICByZXR1cm4gdmFsdWUucmVwbGFjZShyZWdFeHAsICcnKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgc2FuaXRpemVSZWNhcHRjaGFBY3Rpb24odmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBpZiAoIVV0aWxGdW5jdGlvbnMuaXNWYWxpZFN0cmluZ09yQXJyYXkodmFsdWUpKSB7XHJcbiAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdmFsdWVcclxuICAgIC50cmltKClcclxuICAgIC5yZXBsYWNlKC8tL2csICdfJykgICAgICAgICAgLy8gw6LCnMKFIGjDg8KtZmVuIMOiwobCkiB1bmRlcmxpbmVcclxuICAgIC5yZXBsYWNlKC9bXkEtWmEtel8vXS9nLCAnJyk7IC8vIMOiwpzChSBtYW50w4PCqW0gc8ODwrMgQcOiwoDCk1ogYcOiwoDCk3ogXyAvXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIHJlbW92ZU5vbk51bWJlcnModmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBpZiAoIVV0aWxGdW5jdGlvbnMuaXNWYWxpZFN0cmluZ09yQXJyYXkodmFsdWUpKSB7XHJcbiAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuICAgIGNvbnN0IHJlZ0V4cCA9IC9bXjAtOV0vZztcclxuICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKHJlZ0V4cCwgJycpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyByZW1vdmVBY2NlbnRzKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgaWYgKCFVdGlsRnVuY3Rpb25zLmlzVmFsaWRTdHJpbmdPckFycmF5KHZhbHVlKSkge1xyXG4gICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmFsdWUubm9ybWFsaXplKCdORkQnKS5yZXBsYWNlKC9bXFx1MDMwMC1cXHUwMzZmXS9nLCAnJyk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIGZvcm1hdERhdGVEYXRhYmFzZShkOiBEYXRlLCBpbmNsdWRlVGltZTogYm9vbGVhbikge1xyXG4gICAgY29uc3QgeWVhciA9ICcnICsgZC5nZXRGdWxsWWVhcigpO1xyXG4gICAgbGV0IG1vbnRoID0gJycgKyAoZC5nZXRNb250aCgpICsgMSksXHJcbiAgICAgIGRheSA9ICcnICsgZC5nZXREYXRlKCksXHJcbiAgICAgIGhvdXIgPSAnJyArIGQuZ2V0SG91cnMoKSxcclxuICAgICAgbWludXRlID0gJycgKyBkLmdldE1pbnV0ZXMoKSxcclxuICAgICAgc2Vjb25kcyA9ICcnICsgZC5nZXRTZWNvbmRzKCk7XHJcblxyXG4gICAgaWYgKG1vbnRoLmxlbmd0aCA8IDIpIHtcclxuICAgICAgbW9udGggPSAnMCcgKyBtb250aDtcclxuICAgIH1cclxuICAgIGlmIChkYXkubGVuZ3RoIDwgMikge1xyXG4gICAgICBkYXkgPSAnMCcgKyBkYXk7XHJcbiAgICB9XHJcbiAgICBpZiAoaG91ci5sZW5ndGggPCAyKSB7XHJcbiAgICAgIGhvdXIgPSAnMCcgKyBob3VyO1xyXG4gICAgfVxyXG4gICAgaWYgKG1pbnV0ZS5sZW5ndGggPCAyKSB7XHJcbiAgICAgIG1pbnV0ZSA9ICcwJyArIG1pbnV0ZTtcclxuICAgIH1cclxuICAgIGlmIChzZWNvbmRzLmxlbmd0aCA8IDIpIHtcclxuICAgICAgc2Vjb25kcyA9ICcwJyArIHNlY29uZHM7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGZvcm1hdGVkRGF0ZTogc3RyaW5nID0geWVhciArICctJyArIG1vbnRoICsgJy0nICsgZGF5O1xyXG4gICAgaWYgKGluY2x1ZGVUaW1lKSB7XHJcbiAgICAgIGZvcm1hdGVkRGF0ZSArPSAnICcgKyBob3VyICsgJzonICsgbWludXRlICsgJzonICsgc2Vjb25kcztcclxuICAgIH1cclxuICAgIHJldHVybiBmb3JtYXRlZERhdGU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIGZvcm1hdERhdGVCcmF6aWwoZGF0ZTogRGF0ZSwgaW5jbHVkZVRpbWU6IGJvb2xlYW4pIHtcclxuICAgIGlmICghVXRpbEZ1bmN0aW9ucy5pc1ZhbGlkT2JqZWN0KGRhdGUpKSB7XHJcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgICBjb25zdCB5ZWFyID0gJycgKyBkYXRlLmdldEZ1bGxZZWFyKCk7XHJcbiAgICBsZXQgbW9udGggPSAnJyArIChkYXRlLmdldE1vbnRoKCkgKyAxKSxcclxuICAgICAgZGF5ID0gJycgKyBkYXRlLmdldERhdGUoKSxcclxuICAgICAgaG91ciA9ICcnICsgZGF0ZS5nZXRIb3VycygpLFxyXG4gICAgICBtaW51dGUgPSAnJyArIGRhdGUuZ2V0TWludXRlcygpLFxyXG4gICAgICBzZWNvbmRzID0gJycgKyBkYXRlLmdldFNlY29uZHMoKTtcclxuXHJcbiAgICBpZiAobW9udGgubGVuZ3RoIDwgMikge1xyXG4gICAgICBtb250aCA9ICcwJyArIG1vbnRoO1xyXG4gICAgfVxyXG4gICAgaWYgKGRheS5sZW5ndGggPCAyKSB7XHJcbiAgICAgIGRheSA9ICcwJyArIGRheTtcclxuICAgIH1cclxuICAgIGlmIChob3VyLmxlbmd0aCA8IDIpIHtcclxuICAgICAgaG91ciA9ICcwJyArIGhvdXI7XHJcbiAgICB9XHJcbiAgICBpZiAobWludXRlLmxlbmd0aCA8IDIpIHtcclxuICAgICAgbWludXRlID0gJzAnICsgbWludXRlO1xyXG4gICAgfVxyXG4gICAgaWYgKHNlY29uZHMubGVuZ3RoIDwgMikge1xyXG4gICAgICBzZWNvbmRzID0gJzAnICsgc2Vjb25kcztcclxuICAgIH1cclxuXHJcbiAgICBsZXQgZm9ybWF0ZWREYXRlOiBzdHJpbmcgPSBkYXkgKyAnLycgKyBtb250aCArICcvJyArIHllYXI7XHJcbiAgICBpZiAoaW5jbHVkZVRpbWUpIHtcclxuICAgICAgZm9ybWF0ZWREYXRlICs9ICcgJyArIGhvdXIgKyAnOicgKyBtaW51dGUgKyAnOicgKyBzZWNvbmRzO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZvcm1hdGVkRGF0ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgcGFyc2VEYXRlRGF0YUJhc2VGb3JtYXQoZGF0ZVN0cmluZzogc3RyaW5nKTogRGF0ZSB7XHJcbiAgICBjb25zdCBzZWFyY2hWYWx1ZSA9IC8tL2c7XHJcbiAgICByZXR1cm4gbmV3IERhdGUoZGF0ZVN0cmluZy5yZXBsYWNlKHNlYXJjaFZhbHVlLCAnLycpKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgcm91bmROdW1iZXIodmFsdWU6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICBpZiAoaXNOYU4odmFsdWUpKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgdmFsdWUgPSBNYXRoLnJvdW5kKHZhbHVlICogMTAwKSAvIDEwMDtcclxuICAgIHJldHVybiB2YWx1ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgaXNWYWxpZFN0cmluZ09yQXJyYXkodmFsdWU6IHN0cmluZyB8IGFueVtdKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZS5sZW5ndGggPiAwO1xyXG5cclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgaXNWYWxpZE9iamVjdCh2YWx1ZTogYW55KTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gISEodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSk7XHJcblxyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBhcnJheUJ1ZmZlclRvQmFzZTY0KGJ1ZmZlcikge1xyXG4gICAgbGV0IGJpbmFyeSA9ICcnO1xyXG4gICAgY29uc3QgYnl0ZXMgPSBuZXcgVWludDhBcnJheShidWZmZXIpO1xyXG4gICAgY29uc3QgbGVuID0gYnl0ZXMuYnl0ZUxlbmd0aDtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgYmluYXJ5ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnl0ZXNbaV0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGJ0b2EoYmluYXJ5KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgY29udmVydEJhc2U2NFRvQmxvYkRhdGEoYmFzZTY0RGF0YTogc3RyaW5nLCBjb250ZW50VHlwZTogc3RyaW5nLCBzbGljZVNpemUgPSA1MTIpIHtcclxuICAgIGJhc2U2NERhdGEgPSBiYXNlNjREYXRhLnJlcGxhY2UoL1xccy9nLCAnJyk7XHJcbiAgICBjb25zdCBieXRlQ2hhcmFjdGVycyA9IGF0b2IoYmFzZTY0RGF0YSk7XHJcbiAgICBjb25zdCBieXRlQXJyYXlzID0gW107XHJcblxyXG4gICAgZm9yIChsZXQgb2Zmc2V0ID0gMDsgb2Zmc2V0IDwgYnl0ZUNoYXJhY3RlcnMubGVuZ3RoOyBvZmZzZXQgKz0gc2xpY2VTaXplKSB7XHJcbiAgICAgIGNvbnN0IHNsaWNlID0gYnl0ZUNoYXJhY3RlcnMuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyBzbGljZVNpemUpO1xyXG5cclxuICAgICAgY29uc3QgYnl0ZU51bWJlcnMgPSBuZXcgQXJyYXkoc2xpY2UubGVuZ3RoKTtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzbGljZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGJ5dGVOdW1iZXJzW2ldID0gc2xpY2UuY2hhckNvZGVBdChpKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgYnl0ZUFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYnl0ZU51bWJlcnMpO1xyXG5cclxuICAgICAgYnl0ZUFycmF5cy5wdXNoKGJ5dGVBcnJheSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKGJ5dGVBcnJheXMsIHsgdHlwZTogY29udGVudFR5cGUgfSk7XHJcbiAgICByZXR1cm4gYmxvYjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgZ2V0QnJvd3Nlck5hbWUoKSB7XHJcbiAgICBjb25zdCBhZ2VudCA9IHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCk7XHJcbiAgICBzd2l0Y2ggKHRydWUpIHtcclxuICAgICAgY2FzZSBhZ2VudC5pbmRleE9mKCdlZGdlJykgPiAtMTpcclxuICAgICAgICByZXR1cm4gJ2VkZ2UnO1xyXG4gICAgICBjYXNlIGFnZW50LmluZGV4T2YoJ29wcicpID4gLTEgJiYgISEoPGFueT53aW5kb3cpLm9wcjpcclxuICAgICAgICByZXR1cm4gJ29wZXJhJztcclxuICAgICAgY2FzZSBhZ2VudC5pbmRleE9mKCdjaHJvbWUnKSA+IC0xICYmICEhKDxhbnk+d2luZG93KS5jaHJvbWU6XHJcbiAgICAgICAgcmV0dXJuICdjaHJvbWUnO1xyXG4gICAgICBjYXNlIGFnZW50LmluZGV4T2YoJ3RyaWRlbnQnKSA+IC0xOlxyXG4gICAgICAgIHJldHVybiAnaWUnO1xyXG4gICAgICBjYXNlIGFnZW50LmluZGV4T2YoJ2ZpcmVmb3gnKSA+IC0xOlxyXG4gICAgICAgIHJldHVybiAnZmlyZWZveCc7XHJcbiAgICAgIGNhc2UgYWdlbnQuaW5kZXhPZignc2FmYXJpJykgPiAtMTpcclxuICAgICAgICByZXR1cm4gJ3NhZmFyaSc7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuICdvdGhlcic7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIGdlcmFyVG9rZW5Bbmd1bGFyKCkge1xyXG4gICAgICBjb25zdCBjaGF2ZWVuY3JpcHRhY2FvID0gQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2UoJ3FtTnVZYXR6VGVNbjJzU1QnKTtcclxuICAgICAgY29uc3QgdmV0b3IgICA9IENyeXB0b0pTLmVuYy5VdGY4LnBhcnNlKCdcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwJyk7XHJcbiAgICAgIGxldCBwbGFpblRleHQgPSAnYW5ndWxhcjsnICsgVXRpbEZ1bmN0aW9ucy5mb3JtYXREYXRlQnJhemlsKG5ldyBEYXRlKCksIHRydWUpO1xyXG5cclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwbGFpblRleHQubGVuZ3RoICUgMTY7ICsraSkge1xyXG4gICAgICAgIHBsYWluVGV4dCA9IHBsYWluVGV4dCArICdcXHUwMDAwJztcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgY3J5cCA9IENyeXB0b0pTLkFFUy5lbmNyeXB0KENyeXB0b0pTLmVuYy5VdGY4LnBhcnNlKHBsYWluVGV4dCksIGNoYXZlZW5jcmlwdGFjYW8sIHtcclxuICAgICAgICBpdjogdmV0b3IsXHJcbiAgICAgICAga2V5U2l6ZTogMTI4LFxyXG4gICAgICAgIHBhZGRpbmc6IENyeXB0b0pTLnBhZC5Ob1BhZGRpbmcsXHJcbiAgICAgICAgbW9kZTogQ3J5cHRvSlMubW9kZS5DQkN9KTtcclxuXHJcbiAgICAgIGxldCBoZXggPSAnJztcclxuXHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY3J5cC5jaXBoZXJ0ZXh0LndvcmRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgbGV0IG51bWJlciA9IGNyeXAuY2lwaGVydGV4dC53b3Jkc1tpXTtcclxuICAgICAgICBpZiAobnVtYmVyIDwgMCkge1xyXG4gICAgICAgICAgbnVtYmVyID0gMHhGRkZGRkZGRiArIG51bWJlciArIDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCB0ZW1wSGV4ID0gbnVtYmVyLnRvU3RyaW5nKDE2KTtcclxuICAgICAgICB3aGlsZSAodGVtcEhleC5sZW5ndGggPCA4KSB7XHJcbiAgICAgICAgICB0ZW1wSGV4ID0gJzAnICsgdGVtcEhleDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaGV4ID0gaGV4ICsgdGVtcEhleDtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gaGV4O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBnZXJhclRva2VuKG1vZHVsbzogc3RyaW5nLCBrZXk6IHN0cmluZywgZGF0YUhvcmE6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBjaGF2ZWVuY3JpcHRhY2FvID0gQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2Uoa2V5KTtcclxuICAgIGNvbnN0IHZldG9yICAgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZSgnXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMCcpO1xyXG4gICAgbGV0IHBsYWluVGV4dCA9IG1vZHVsbyArICc7JyArIGRhdGFIb3JhO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGxhaW5UZXh0Lmxlbmd0aCAlIDE2OyArK2kpIHtcclxuICAgICAgcGxhaW5UZXh0ID0gcGxhaW5UZXh0ICsgJ1xcdTAwMDAnO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGNyeXAgPSBDcnlwdG9KUy5BRVMuZW5jcnlwdChDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZShwbGFpblRleHQpLCBjaGF2ZWVuY3JpcHRhY2FvLCB7XHJcbiAgICAgIGl2OiB2ZXRvcixcclxuICAgICAga2V5U2l6ZTogMTI4LFxyXG4gICAgICBwYWRkaW5nOiBDcnlwdG9KUy5wYWQuTm9QYWRkaW5nLFxyXG4gICAgICBtb2RlOiBDcnlwdG9KUy5tb2RlLkNCQ30pO1xyXG5cclxuICAgIGxldCBoZXggPSAnJztcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNyeXAuY2lwaGVydGV4dC53b3Jkcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgbnVtYmVyID0gY3J5cC5jaXBoZXJ0ZXh0LndvcmRzW2ldO1xyXG4gICAgICBpZiAobnVtYmVyIDwgMCkge1xyXG4gICAgICAgIG51bWJlciA9IDB4RkZGRkZGRkYgKyBudW1iZXIgKyAxO1xyXG4gICAgICB9XHJcbiAgICAgIGxldCB0ZW1wSGV4ID0gbnVtYmVyLnRvU3RyaW5nKDE2KTtcclxuICAgICAgd2hpbGUgKHRlbXBIZXgubGVuZ3RoIDwgOCkge1xyXG4gICAgICAgIHRlbXBIZXggPSAnMCcgKyB0ZW1wSGV4O1xyXG4gICAgICB9XHJcbiAgICAgIGhleCA9IGhleCArIHRlbXBIZXg7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaGV4O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBmb3JtYXRhckRvY3VtZW50byhkb2N1bWVudG86IHN0cmluZykge1xyXG4gICAgICBpZiAoIVV0aWxGdW5jdGlvbnMuaXNWYWxpZFN0cmluZ09yQXJyYXkoZG9jdW1lbnRvKSkge1xyXG4gICAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgICB9XHJcbiAgICAgIGRvY3VtZW50byA9IFV0aWxGdW5jdGlvbnMucmVtb3ZlTm9uTnVtYmVycyhkb2N1bWVudG8pO1xyXG4gICAgICBpZiAoZG9jdW1lbnRvLmxlbmd0aCA9PSAxMSkge1xyXG4gICAgICAgICAgcmV0dXJuIGRvY3VtZW50by5yZXBsYWNlKC8oXFxkezN9KShcXGR7M30pKFxcZHszfSkoXFxkezJ9KS9nLFwiXFwkMS5cXCQyLlxcJDNcXC1cXCQ0XCIpO1xyXG4gICAgICB9IGVsc2UgaWYgKGRvY3VtZW50by5sZW5ndGggPT0gMTQpIHtcclxuICAgICAgICAgIHJldHVybiBkb2N1bWVudG8ucmVwbGFjZSgvKFxcZHsyfSkoXFxkezN9KShcXGR7M30pKFxcZHs0fSkoXFxkezJ9KS9nLFwiXFwkMS5cXCQyLlxcJDNcXC9cXCQ0XFwtXFwkNVwiKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gJyc7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIGdldE5vbWVNZXMobWVzOiBudW1iZXIpIHtcclxuICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgIGRhdGUuc2V0TW9udGgobWVzKTtcclxuICAgICAgY29uc3QgbW9udGggPSBkYXRlLnRvTG9jYWxlU3RyaW5nKCdkZWZhdWx0JywgeyBtb250aDogJ2xvbmcnIH0pO1xyXG4gICAgICByZXR1cm4gbW9udGg7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIHRvVGl0bGVDYXNlKHN0cik6IHN0cmluZyB7XHJcbiAgICAgIHN0ciA9IHN0ci50b0xvd2VyQ2FzZSgpLnNwbGl0KCcgJyk7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgc3RyW2ldID0gc3RyW2ldLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgc3RyW2ldLnNsaWNlKDEpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBzdHIuam9pbignICcpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBnZXRFbnVtS2V5QnlFbnVtVmFsdWUobXlFbnVtLCBlbnVtVmFsdWUpIHtcclxuICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMobXlFbnVtKSkge1xyXG4gICAgICAgIGNvbnN0IHZhbHVlOiBzdHJpbmcgPSBteUVudW1ba2V5XTtcclxuICAgICAgICBpZiAodmFsdWUgPT09IGVudW1WYWx1ZS50b1N0cmluZygpKSB7XHJcbiAgICAgICAgICByZXR1cm4ga2V5O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgZ2V0SHR0cEVycm9yTWVzc2FnZSh2YWx1ZSkge1xyXG4gICAgbGV0IGVycm9yTWVzc2FnZTtcclxuICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICBpZiAodmFsdWUuZXJyb3IpIHtcclxuICAgICAgICBpZiAoVXRpbEZ1bmN0aW9ucy5pc1ZhbGlkU3RyaW5nT3JBcnJheSh2YWx1ZS5lcnJvci5kZXRhaWwpID09PSB0cnVlKSB7XHJcbiAgICAgICAgICBlcnJvck1lc3NhZ2UgPSB2YWx1ZS5lcnJvci5kZXRhaWw7XHJcbiAgICAgICAgfSBlbHNlIGlmIChVdGlsRnVuY3Rpb25zLmlzVmFsaWRTdHJpbmdPckFycmF5KHZhbHVlLmVycm9yLmVycm9yKSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgZXJyb3JNZXNzYWdlID0gdmFsdWUuZXJyb3IuZXJyb3I7XHJcbiAgICAgICAgfSBlbHNlIGlmIChVdGlsRnVuY3Rpb25zLmlzVmFsaWRTdHJpbmdPckFycmF5KHZhbHVlLmVycm9yLm1lc3NhZ2UpID09PSB0cnVlKSB7XHJcbiAgICAgICAgICBlcnJvck1lc3NhZ2UgPSB2YWx1ZS5lcnJvci5tZXNzYWdlO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoVXRpbEZ1bmN0aW9ucy5pc1ZhbGlkU3RyaW5nT3JBcnJheSh2YWx1ZS5lcnJvci5maWVsZEVycm9ycykgPT09IHRydWUgJiZcclxuICAgICAgICAgIFV0aWxGdW5jdGlvbnMuaXNWYWxpZFN0cmluZ09yQXJyYXkodmFsdWUuZXJyb3IuZmllbGRFcnJvcnNbMF0ubWVzc2FnZSkgPT09IHRydWUpIHtcclxuICAgICAgICAgIGVycm9yTWVzc2FnZSA9IHZhbHVlLmVycm9yLmZpZWxkRXJyb3JzWzBdLm1lc3NhZ2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGVycm9yTWVzc2FnZSA9IHZhbHVlLmVycm9yO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmIChVdGlsRnVuY3Rpb25zLmlzVmFsaWRTdHJpbmdPckFycmF5KHZhbHVlLm1lc3NhZ2UpID09PSB0cnVlKSB7XHJcbiAgICAgICAgZXJyb3JNZXNzYWdlID0gdmFsdWUubWVzc2FnZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBlcnJvck1lc3NhZ2UgPSB2YWx1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKFV0aWxGdW5jdGlvbnMuaXNWYWxpZFN0cmluZ09yQXJyYXkoZXJyb3JNZXNzYWdlKSA9PT0gZmFsc2UpIHtcclxuICAgICAgZXJyb3JNZXNzYWdlID0gJ0Vycm8gZGVzY29uaGVjaWRvJztcclxuICAgIH1cclxuICAgIHJldHVybiBlcnJvck1lc3NhZ2U7XHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCB7XHJcbiAgQWZ0ZXJWaWV3SW5pdCxcclxuICBEaXJlY3RpdmUsXHJcbiAgRWxlbWVudFJlZixcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSG9zdExpc3RlbmVyLFxyXG4gIElucHV0LFxyXG4gIE9uQ2hhbmdlcyxcclxuICBPdXRwdXQsXHJcbiAgU2ltcGxlQ2hhbmdlc1xyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge05HX1ZBTElEQVRPUlMsIFZhbGlkYXRvcn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQge0NwZkNucGpWYWxpZGF0b3J9IGZyb20gJy4vY3BmLWNucGoudmFsaWRhdG9yJztcclxuaW1wb3J0IHtEb2NUeXBlLCBSZWFsVGltZU1hc2tUeXBlfSBmcm9tICcuLi8uLi9tb2RlbC9jcGYtY25wai5tb2RlbCc7XHJcbmltcG9ydCB7VXRpbEZ1bmN0aW9uc30gZnJvbSAnLi4vLi4vdXRpbC91dGlsLWZ1bmN0aW9ucyc7XHJcblxyXG5ARGlyZWN0aXZlKHtcclxuICBzZWxlY3RvcjogJ1tqaGktdmFsaWRhdGUtZG9jdW1lbnRvXVtuZ01vZGVsXScsXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXHJcbiAgICAgIHVzZUV4aXN0aW5nOiBDcGZDbnBqVmFsaWRhdG9yRGlyZWN0aXZlLFxyXG4gICAgICBtdWx0aTogdHJ1ZVxyXG4gICAgfVxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIENwZkNucGpWYWxpZGF0b3JEaXJlY3RpdmUgZXh0ZW5kcyBDcGZDbnBqVmFsaWRhdG9yIGltcGxlbWVudHMgVmFsaWRhdG9yLCBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMge1xyXG4gIEBJbnB1dCgpXHJcbiAgcmVhbFRpbWVNYXNrOiBSZWFsVGltZU1hc2tUeXBlID0gUmVhbFRpbWVNYXNrVHlwZS5OT05FO1xyXG4gIGluaXQgPSBmYWxzZTtcclxuICBnZXQgZG9jdW1lbnRUeXBlKCkgOiBEb2NUeXBlIHtcclxuICAgIHJldHVybiB0aGlzLmRvY1R5cGU7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBkb2N1bWVudFR5cGUodmFsOiBEb2NUeXBlKSB7XHJcbiAgICBpZiAodmFsICE9PSB0aGlzLmRvY1R5cGUpIHtcclxuICAgICAgdGhpcy5kb2NUeXBlID0gdmFsO1xyXG4gICAgICBpZiAodGhpcy5pbml0KSB7XHJcbiAgICAgICAgdGhpcy5kb2N1bWVudE1hc2tlZChldmVudCwgZmFsc2UpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIG5nTW9kZWw7XHJcbiAgQE91dHB1dCgpIG5nTW9kZWxDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICBwcml2YXRlIHNwZWNpYWxLZXlzOiBBcnJheTxzdHJpbmc+ID0gW1xyXG4gICAgLyo4LCAqLyAnVGFiJyxcclxuICAgIC8qOSwgKi8gJ0JhY2tzcGFjZScsXHJcbiAgICAvKjEyLCovICdFc2NhcGUnLFxyXG4gICAgLyozNSwqLyAnRW5kJyxcclxuICAgIC8qMzYsKi8gJ0hvbWUnLFxyXG4gICAgLyozNywqLyAnQXJyb3dMZWZ0JyxcclxuICAgIC8qMzgsKi8gJ0Fycm93VXAnLFxyXG4gICAgLyozOSwqLyAnQXJyb3dSaWdodCcsXHJcbiAgICAvKjQwLCovICdBcnJvd0Rvd24nLFxyXG4gICAgLyo0NiwqLyAnRGVsZXRlJ1xyXG4gIF07XHJcbiAgcHJpdmF0ZSB3YXNEZWxldGVBY3Rpb246IGJvb2xlYW47XHJcblxyXG4gIHN0YXRpYyBtYXNjYXJhQ3BmRmlyc3RQYXJ0KHZhbG9yKSB7XHJcbiAgICBjb25zdCByZWdFeHAgPSAvKFswLTldezN9KShbMC05XXswLDN9KS87XHJcbiAgICByZXR1cm4gdmFsb3IucmVwbGFjZShyZWdFeHAsICckMS4kMicpO1xyXG4gIH1cclxuICBzdGF0aWMgbWFzY2FyYUNucGpGaXJzdFBhcnQodmFsb3IpIHtcclxuICAgIGNvbnN0IHJlZ0V4cCA9IC8oWzAtOV17Mn0pKFswLTldezAsM30pLztcclxuICAgIHJldHVybiB2YWxvci5yZXBsYWNlKHJlZ0V4cCwgJyQxLiQyJyk7XHJcbiAgfVxyXG4gIHN0YXRpYyBtYXNjYXJhQ3BmU2Vjb25kUGFydCh2YWxvcikge1xyXG4gICAgY29uc3QgcmVnRXhwID0gLyhbMC05XXszfSkoWzAtOV17M30pKFswLTldezAsM30pLztcclxuICAgIHJldHVybiB2YWxvci5yZXBsYWNlKHJlZ0V4cCwgJyQxLiQyLiQzJyk7XHJcbiAgfVxyXG4gIHN0YXRpYyBtYXNjYXJhQ25walNlY29uZFBhcnQodmFsb3IpIHtcclxuICAgIGNvbnN0IHJlZ0V4cCA9IC8oWzAtOV17Mn0pKFswLTldezN9KShbMC05XXswLDN9KS87XHJcbiAgICByZXR1cm4gdmFsb3IucmVwbGFjZShyZWdFeHAsICckMS4kMi4kMycpO1xyXG4gIH1cclxuICBzdGF0aWMgbWFzY2FyYUNucGpUaGlyZFBhcnQodmFsb3IpIHtcclxuICAgIGNvbnN0IHJlZ0V4cCA9IC8oWzAtOV17Mn0pKFswLTldezN9KShbMC05XXszfSkoWzAtOV17MCw0fSkvO1xyXG4gICAgcmV0dXJuIHZhbG9yLnJlcGxhY2UocmVnRXhwLCAnJDEuJDIuJDMvJDQnKTtcclxuICB9XHJcbiAgc3RhdGljIG1hc2NhcmFDcGYodmFsb3IpIHtcclxuICAgIGNvbnN0IHJlZ0V4cCA9IC8oWzAtOSBfXXswLDN9KShbMC05IF9dezAsM30pKFswLTkgX117MCwzfSkoWzAtOSBfXXswLDJ9KS87XHJcbiAgICByZXR1cm4gdmFsb3IucmVwbGFjZShyZWdFeHAsICckMS4kMi4kMy0kNCcpO1xyXG4gIH1cclxuICBzdGF0aWMgbWFzY2FyYUJvbmRhcmllcyh2YWxvcikge1xyXG4gICAgY29uc3QgcmVnRXhwID0gLyhbMC05XXsyfSkoWzAtOV17M30pKFswLTldezN9KShbMC05XXs0fSkvO1xyXG4gICAgcmV0dXJuIHZhbG9yLnJlcGxhY2UocmVnRXhwLCAnJDEuJDIuJDMvJDQnKTtcclxuICB9XHJcbiAgc3RhdGljIG1hc2NhcmFDbnBqKHZhbG9yKSB7XHJcbiAgICBjb25zdCByZWdFeHAgPSAvKFswLTkgX117MCwyfSkoWzAtOSBfXXswLDN9KShbMC05IF9dezAsM30pKFswLTkgX117MCw0fSkoWzAtOSBfXXswLDJ9KS87XHJcbiAgICByZXR1cm4gdmFsb3IucmVwbGFjZShyZWdFeHAsICckMS4kMi4kMy8kNC0kNScpO1xyXG4gIH1cclxuICBzdGF0aWMgaXNOdW1iZXIodmFsdWU6IHN0cmluZyB8IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IG51bGwpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuICFpc05hTihOdW1iZXIodmFsdWUudG9TdHJpbmcoKSkpO1xyXG4gIH1cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsZW1lbnQ6IEVsZW1lbnRSZWYpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuaW5pdCA9IHRydWU7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSB0aGlzLm5nTW9kZWw7XHJcbiAgICAgIHRoaXMuZG9jdW1lbnRNYXNrZWQoZXZlbnQsIGZhbHNlKTtcclxuICAgIH0pO1xyXG4gIH1cclxuICBASG9zdExpc3RlbmVyKCdrZXlkb3duJywgWyckZXZlbnQnXSlcclxuICBrZXlEb3duKGV2ZW50KSB7XHJcbiAgICBjb25zdCBlOiBLZXlib2FyZEV2ZW50ID0gZXZlbnQgYXMgS2V5Ym9hcmRFdmVudDtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5zcGVjaWFsS2V5cy5pbmRleE9mKGUua2V5KSAhPT0gLTEgfHxcclxuICAgICAgLy8gQ3RybCtBXHJcbiAgICAgIChlLmtleSA9PT0gJ2EnICYmIChlLmN0cmxLZXkgfHwgZS5tZXRhS2V5KSkgfHxcclxuICAgICAgLy8gQ3RybCtDXHJcbiAgICAgIChlLmtleSA9PT0gJ2MnICYmIChlLmN0cmxLZXkgfHwgZS5tZXRhS2V5KSkgfHxcclxuICAgICAgLy8gQ3RybCtWXHJcbiAgICAgIChlLmtleSA9PT0gJ3YnICYmIChlLmN0cmxLZXkgfHwgZS5tZXRhS2V5KSkgfHxcclxuICAgICAgLy8gQ3RybCtYXHJcbiAgICAgIChlLmtleSA9PT0gJ3gnICYmIChlLmN0cmxLZXkgfHwgZS5tZXRhS2V5KSlcclxuICAgICkge1xyXG4gICAgICBpZiAoZS5rZXkgPT09ICdEZWxldGUnKSB7XHJcbiAgICAgICAgLy8gRGVsZXRlXHJcbiAgICAgICAgdGhpcy53YXNEZWxldGVBY3Rpb24gPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmIChlLnNoaWZ0S2V5IHx8ICFDcGZDbnBqVmFsaWRhdG9yRGlyZWN0aXZlLmlzTnVtYmVyKGUua2V5KSkge1xyXG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnJlYWxUaW1lTWFzayA9PT0gUmVhbFRpbWVNYXNrVHlwZS5OT05FKSB7XHJcbiAgICAgIGlmICh0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC52YWx1ZS5sZW5ndGggPT09IENwZkNucGpWYWxpZGF0b3IuY25wakxlbmd0aCkge1xyXG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGNvbnN0IGFmdGVyTWFzayA9IHRoaXMud2FzRGVsZXRlQWN0aW9uO1xyXG4gICAgdGhpcy53YXNEZWxldGVBY3Rpb24gPSBmYWxzZTtcclxuICAgIGlmICh0aGlzLnJlYWxUaW1lTWFzayAhPT0gUmVhbFRpbWVNYXNrVHlwZS5OT05FKSB7XHJcbiAgICAgIHRoaXMuZG9jdW1lbnRNYXNrZWQoZXZlbnQsIGFmdGVyTWFzayk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZWdpc3Rlck9uVmFsaWRhdG9yQ2hhbmdlKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCdmb2N1cycsIFsnJGV2ZW50J10pXHJcbiAgZm9jdXMoZXZlbnQpIHtcclxuICAgIGlmICh0aGlzLnJlYWxUaW1lTWFzayA9PT0gUmVhbFRpbWVNYXNrVHlwZS5OT05FKSB7XHJcbiAgICAgIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LnZhbHVlID0gdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWUucmVwbGFjZSgvXFxEL2csICcnKTtcclxuICAgIH1cclxuICB9XHJcbiAgQEhvc3RMaXN0ZW5lcignYmx1cicsIFsnJGV2ZW50J10pXHJcbiAgYmx1cihldmVudCkge1xyXG4gICAgaWYgKHRoaXMucmVhbFRpbWVNYXNrID09PSBSZWFsVGltZU1hc2tUeXBlLk5PTkUpIHtcclxuICAgICAgbGV0IGNwZkNucGogPSB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC52YWx1ZS5yZXBsYWNlKC9cXEQvZywgJycpO1xyXG4gICAgICBpZiAoY3BmQ25wai5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZG9jVHlwZSA9PT0gRG9jVHlwZS5CT1RIKSB7XHJcbiAgICAgICAgICBpZiAoY3BmQ25wai5sZW5ndGggPD0gQ3BmQ25walZhbGlkYXRvci5jcGZMZW5ndGhGaXJzdFBhcnQpIHtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoY3BmQ25wai5sZW5ndGggPiBDcGZDbnBqVmFsaWRhdG9yLmNwZkxlbmd0aEZpcnN0UGFydCAmJiBjcGZDbnBqLmxlbmd0aCA8PSBDcGZDbnBqVmFsaWRhdG9yLmNwZkxlbmd0aFNlY29uZFBhcnQpIHtcclxuICAgICAgICAgICAgY3BmQ25waiA9IENwZkNucGpWYWxpZGF0b3JEaXJlY3RpdmUubWFzY2FyYUNwZkZpcnN0UGFydChjcGZDbnBqKTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoY3BmQ25wai5sZW5ndGggPiBDcGZDbnBqVmFsaWRhdG9yLmNwZkxlbmd0aFNlY29uZFBhcnQgJiYgY3BmQ25wai5sZW5ndGggPD0gQ3BmQ25walZhbGlkYXRvci5jcGZMZW5ndGhUaGlyZFBhcnQpIHtcclxuICAgICAgICAgICAgY3BmQ25waiA9IENwZkNucGpWYWxpZGF0b3JEaXJlY3RpdmUubWFzY2FyYUNwZlNlY29uZFBhcnQoY3BmQ25waik7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGNwZkNucGoubGVuZ3RoID4gQ3BmQ25walZhbGlkYXRvci5jcGZMZW5ndGhUaGlyZFBhcnQgJiYgY3BmQ25wai5sZW5ndGggPD0gQ3BmQ25walZhbGlkYXRvci5jcGZMZW5ndGgpIHtcclxuICAgICAgICAgICAgY3BmQ25waiA9IENwZkNucGpWYWxpZGF0b3JEaXJlY3RpdmUubWFzY2FyYUNwZihjcGZDbnBqKTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoY3BmQ25wai5sZW5ndGggPT09IENwZkNucGpWYWxpZGF0b3IuY25wakNwZkxlbmd0aEJvdW5kYXJpZXMpIHtcclxuICAgICAgICAgICAgY3BmQ25waiA9IENwZkNucGpWYWxpZGF0b3JEaXJlY3RpdmUubWFzY2FyYUJvbmRhcmllcyhjcGZDbnBqKTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoY3BmQ25wai5sZW5ndGggPiBDcGZDbnBqVmFsaWRhdG9yLmNucGpDcGZMZW5ndGhCb3VuZGFyaWVzICYmIGNwZkNucGoubGVuZ3RoIDw9IENwZkNucGpWYWxpZGF0b3IuY25wakxlbmd0aCkge1xyXG4gICAgICAgICAgICBjcGZDbnBqID0gQ3BmQ25walZhbGlkYXRvckRpcmVjdGl2ZS5tYXNjYXJhQ25waihjcGZDbnBqKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNwZkNucGogPSBDcGZDbnBqVmFsaWRhdG9yRGlyZWN0aXZlLm1hc2NhcmFDbnBqKGNwZkNucGouc3Vic3RyaW5nKDAsIENwZkNucGpWYWxpZGF0b3IuY25wakxlbmd0aCkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5kb2NUeXBlID09PSBEb2NUeXBlLkNQRikge1xyXG4gICAgICAgICAgaWYgKGNwZkNucGoubGVuZ3RoIDw9IENwZkNucGpWYWxpZGF0b3IuY3BmTGVuZ3RoRmlyc3RQYXJ0KSB7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGNwZkNucGoubGVuZ3RoID4gQ3BmQ25walZhbGlkYXRvci5jcGZMZW5ndGhGaXJzdFBhcnQgJiYgY3BmQ25wai5sZW5ndGggPD0gQ3BmQ25walZhbGlkYXRvci5jcGZMZW5ndGhTZWNvbmRQYXJ0KSB7XHJcbiAgICAgICAgICAgIGNwZkNucGogPSBDcGZDbnBqVmFsaWRhdG9yRGlyZWN0aXZlLm1hc2NhcmFDcGZGaXJzdFBhcnQoY3BmQ25waik7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGNwZkNucGoubGVuZ3RoID4gQ3BmQ25walZhbGlkYXRvci5jcGZMZW5ndGhTZWNvbmRQYXJ0ICYmIGNwZkNucGoubGVuZ3RoIDw9IENwZkNucGpWYWxpZGF0b3IuY3BmTGVuZ3RoVGhpcmRQYXJ0KSB7XHJcbiAgICAgICAgICAgIGNwZkNucGogPSBDcGZDbnBqVmFsaWRhdG9yRGlyZWN0aXZlLm1hc2NhcmFDcGZTZWNvbmRQYXJ0KGNwZkNucGopO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChjcGZDbnBqLmxlbmd0aCA+IENwZkNucGpWYWxpZGF0b3IuY3BmTGVuZ3RoVGhpcmRQYXJ0ICYmIGNwZkNucGoubGVuZ3RoIDw9IENwZkNucGpWYWxpZGF0b3IuY3BmTGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGNwZkNucGogPSBDcGZDbnBqVmFsaWRhdG9yRGlyZWN0aXZlLm1hc2NhcmFDcGYoY3BmQ25waik7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjcGZDbnBqID0gQ3BmQ25walZhbGlkYXRvckRpcmVjdGl2ZS5tYXNjYXJhQ3BmKGNwZkNucGouc3Vic3RyaW5nKDAsIENwZkNucGpWYWxpZGF0b3IuY3BmTGVuZ3RoKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRvY1R5cGUgPT09IERvY1R5cGUuQ05QSikge1xyXG4gICAgICAgICAgaWYgKGNwZkNucGoubGVuZ3RoIDw9IENwZkNucGpWYWxpZGF0b3IuY25wakxlbmd0aEZpcnN0UGFydCkge1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChjcGZDbnBqLmxlbmd0aCA+IENwZkNucGpWYWxpZGF0b3IuY25wakxlbmd0aEZpcnN0UGFydCAmJiBjcGZDbnBqLmxlbmd0aCA8PSBDcGZDbnBqVmFsaWRhdG9yLmNucGpMZW5ndGhTZWNvbmRQYXJ0KSB7XHJcbiAgICAgICAgICAgIGNwZkNucGogPSBDcGZDbnBqVmFsaWRhdG9yRGlyZWN0aXZlLm1hc2NhcmFDbnBqRmlyc3RQYXJ0KGNwZkNucGopO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChjcGZDbnBqLmxlbmd0aCA+IENwZkNucGpWYWxpZGF0b3IuY25wakxlbmd0aFNlY29uZFBhcnQgJiYgY3BmQ25wai5sZW5ndGggPD0gQ3BmQ25walZhbGlkYXRvci5jbnBqTGVuZ3RoVGhpcmRQYXJ0KSB7XHJcbiAgICAgICAgICAgIGNwZkNucGogPSBDcGZDbnBqVmFsaWRhdG9yRGlyZWN0aXZlLm1hc2NhcmFDbnBqU2Vjb25kUGFydChjcGZDbnBqKTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoY3BmQ25wai5sZW5ndGggPiBDcGZDbnBqVmFsaWRhdG9yLmNucGpMZW5ndGhUaGlyZFBhcnQgJiYgY3BmQ25wai5sZW5ndGggPD0gQ3BmQ25walZhbGlkYXRvci5jbnBqQ3BmTGVuZ3RoQm91bmRhcmllcykge1xyXG4gICAgICAgICAgICBjcGZDbnBqID0gQ3BmQ25walZhbGlkYXRvckRpcmVjdGl2ZS5tYXNjYXJhQ25walRoaXJkUGFydChjcGZDbnBqKTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoY3BmQ25wai5sZW5ndGggPiBDcGZDbnBqVmFsaWRhdG9yLmNucGpDcGZMZW5ndGhCb3VuZGFyaWVzICYmIGNwZkNucGoubGVuZ3RoIDw9IENwZkNucGpWYWxpZGF0b3IuY25wakxlbmd0aCkge1xyXG4gICAgICAgICAgICBjcGZDbnBqID0gQ3BmQ25walZhbGlkYXRvckRpcmVjdGl2ZS5tYXNjYXJhQ25waihjcGZDbnBqKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNwZkNucGogPSBDcGZDbnBqVmFsaWRhdG9yRGlyZWN0aXZlLm1hc2NhcmFDbnBqKGNwZkNucGouc3Vic3RyaW5nKDAsIENwZkNucGpWYWxpZGF0b3IuY25wakxlbmd0aCkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSBjcGZDbnBqO1xyXG4gICAgICB0aGlzLmZvcmNlVXBkYXRlKGNwZkNucGopO1xyXG4gICAgfVxyXG4gIH1cclxuICBkb2N1bWVudE1hc2tlZChldmVudCwgYWZ0ZXJNYXNrOiBib29sZWFuKSB7XHJcblxyXG4gICAgY29uc3QgZWwgPSB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudDtcclxuICAgIGxldCBzdGFydCA9IGVsLnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgbGV0IHZhbHVlID0gVXRpbEZ1bmN0aW9ucy5pc1ZhbGlkU3RyaW5nT3JBcnJheSh0aGlzLm5nTW9kZWwpID8gdGhpcy5uZ01vZGVsLnRvU3RyaW5nKCkgOiAnJztcclxuICAgIGxldCBjdXJzb3IgPSAwO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdGFydDsgaSsrKSB7XHJcbiAgICAgIGlmICghQ3BmQ25walZhbGlkYXRvckRpcmVjdGl2ZS5pc051bWJlcih2YWx1ZVtpXSkpIHtcclxuICAgICAgICBjb250aW51ZTtcclxuICAgICAgfVxyXG4gICAgICBjdXJzb3IrKztcclxuICAgIH1cclxuICAgIGxldCBjcGZDbnBqID0gdmFsdWUucmVwbGFjZSgvXFxEL2csICcnKTtcclxuICAgIHRyeSB7XHJcbiAgICAgIGlmICh0aGlzLnJlYWxUaW1lTWFzayA9PT0gUmVhbFRpbWVNYXNrVHlwZS5DTEFTU0lDKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZG9jVHlwZSA9PT0gRG9jVHlwZS5CT1RIKSB7XHJcbiAgICAgICAgICBpZiAoY3BmQ25wai5sZW5ndGggPD0gQ3BmQ25walZhbGlkYXRvci5jcGZMZW5ndGhGaXJzdFBhcnQpIHtcclxuICAgICAgICAgICAgdmFsdWUgPSBjcGZDbnBqO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChjcGZDbnBqLmxlbmd0aCA+IENwZkNucGpWYWxpZGF0b3IuY3BmTGVuZ3RoRmlyc3RQYXJ0ICYmIGNwZkNucGoubGVuZ3RoIDw9IENwZkNucGpWYWxpZGF0b3IuY3BmTGVuZ3RoU2Vjb25kUGFydCkge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IENwZkNucGpWYWxpZGF0b3JEaXJlY3RpdmUubWFzY2FyYUNwZkZpcnN0UGFydChjcGZDbnBqKTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoY3BmQ25wai5sZW5ndGggPiBDcGZDbnBqVmFsaWRhdG9yLmNwZkxlbmd0aFNlY29uZFBhcnQgJiYgY3BmQ25wai5sZW5ndGggPD0gQ3BmQ25walZhbGlkYXRvci5jcGZMZW5ndGhUaGlyZFBhcnQpIHtcclxuICAgICAgICAgICAgdmFsdWUgPSBDcGZDbnBqVmFsaWRhdG9yRGlyZWN0aXZlLm1hc2NhcmFDcGZTZWNvbmRQYXJ0KGNwZkNucGopO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChjcGZDbnBqLmxlbmd0aCA+IENwZkNucGpWYWxpZGF0b3IuY3BmTGVuZ3RoVGhpcmRQYXJ0ICYmIGNwZkNucGoubGVuZ3RoIDw9IENwZkNucGpWYWxpZGF0b3IuY3BmTGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gQ3BmQ25walZhbGlkYXRvckRpcmVjdGl2ZS5tYXNjYXJhQ3BmKGNwZkNucGopO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChjcGZDbnBqLmxlbmd0aCA9PT0gQ3BmQ25walZhbGlkYXRvci5jbnBqQ3BmTGVuZ3RoQm91bmRhcmllcykge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IENwZkNucGpWYWxpZGF0b3JEaXJlY3RpdmUubWFzY2FyYUJvbmRhcmllcyhjcGZDbnBqKTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoY3BmQ25wai5sZW5ndGggPiBDcGZDbnBqVmFsaWRhdG9yLmNucGpDcGZMZW5ndGhCb3VuZGFyaWVzICYmIGNwZkNucGoubGVuZ3RoIDw9IENwZkNucGpWYWxpZGF0b3IuY25wakxlbmd0aCkge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IENwZkNucGpWYWxpZGF0b3JEaXJlY3RpdmUubWFzY2FyYUNucGooY3BmQ25waik7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IENwZkNucGpWYWxpZGF0b3JEaXJlY3RpdmUubWFzY2FyYUNucGooY3BmQ25wai5zdWJzdHJpbmcoMCwgQ3BmQ25walZhbGlkYXRvci5jbnBqTGVuZ3RoKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRvY1R5cGUgPT09IERvY1R5cGUuQ1BGKSB7XHJcbiAgICAgICAgICBpZiAoY3BmQ25wai5sZW5ndGggPD0gQ3BmQ25walZhbGlkYXRvci5jcGZMZW5ndGhGaXJzdFBhcnQpIHtcclxuICAgICAgICAgICAgdmFsdWUgPSBjcGZDbnBqO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChjcGZDbnBqLmxlbmd0aCA+IENwZkNucGpWYWxpZGF0b3IuY3BmTGVuZ3RoRmlyc3RQYXJ0ICYmIGNwZkNucGoubGVuZ3RoIDw9IENwZkNucGpWYWxpZGF0b3IuY3BmTGVuZ3RoU2Vjb25kUGFydCkge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IENwZkNucGpWYWxpZGF0b3JEaXJlY3RpdmUubWFzY2FyYUNwZkZpcnN0UGFydChjcGZDbnBqKTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoY3BmQ25wai5sZW5ndGggPiBDcGZDbnBqVmFsaWRhdG9yLmNwZkxlbmd0aFNlY29uZFBhcnQgJiYgY3BmQ25wai5sZW5ndGggPD0gQ3BmQ25walZhbGlkYXRvci5jcGZMZW5ndGhUaGlyZFBhcnQpIHtcclxuICAgICAgICAgICAgdmFsdWUgPSBDcGZDbnBqVmFsaWRhdG9yRGlyZWN0aXZlLm1hc2NhcmFDcGZTZWNvbmRQYXJ0KGNwZkNucGopO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChjcGZDbnBqLmxlbmd0aCA+IENwZkNucGpWYWxpZGF0b3IuY3BmTGVuZ3RoVGhpcmRQYXJ0ICYmIGNwZkNucGoubGVuZ3RoIDw9IENwZkNucGpWYWxpZGF0b3IuY3BmTGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gQ3BmQ25walZhbGlkYXRvckRpcmVjdGl2ZS5tYXNjYXJhQ3BmKGNwZkNucGopO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdmFsdWUgPSBDcGZDbnBqVmFsaWRhdG9yRGlyZWN0aXZlLm1hc2NhcmFDcGYoY3BmQ25wai5zdWJzdHJpbmcoMCwgQ3BmQ25walZhbGlkYXRvci5jcGZMZW5ndGgpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZG9jVHlwZSA9PT0gRG9jVHlwZS5DTlBKKSB7XHJcbiAgICAgICAgICBpZiAoY3BmQ25wai5sZW5ndGggPD0gQ3BmQ25walZhbGlkYXRvci5jbnBqTGVuZ3RoRmlyc3RQYXJ0KSB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gY3BmQ25wajtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoY3BmQ25wai5sZW5ndGggPiBDcGZDbnBqVmFsaWRhdG9yLmNucGpMZW5ndGhGaXJzdFBhcnQgJiYgY3BmQ25wai5sZW5ndGggPD0gQ3BmQ25walZhbGlkYXRvci5jbnBqTGVuZ3RoU2Vjb25kUGFydCkge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IENwZkNucGpWYWxpZGF0b3JEaXJlY3RpdmUubWFzY2FyYUNucGpGaXJzdFBhcnQoY3BmQ25waik7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGNwZkNucGoubGVuZ3RoID4gQ3BmQ25walZhbGlkYXRvci5jbnBqTGVuZ3RoU2Vjb25kUGFydCAmJiBjcGZDbnBqLmxlbmd0aCA8PSBDcGZDbnBqVmFsaWRhdG9yLmNucGpMZW5ndGhUaGlyZFBhcnQpIHtcclxuICAgICAgICAgICAgdmFsdWUgPSBDcGZDbnBqVmFsaWRhdG9yRGlyZWN0aXZlLm1hc2NhcmFDbnBqU2Vjb25kUGFydChjcGZDbnBqKTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoY3BmQ25wai5sZW5ndGggPiBDcGZDbnBqVmFsaWRhdG9yLmNucGpMZW5ndGhUaGlyZFBhcnQgJiYgY3BmQ25wai5sZW5ndGggPD0gQ3BmQ25walZhbGlkYXRvci5jbnBqQ3BmTGVuZ3RoQm91bmRhcmllcykge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IENwZkNucGpWYWxpZGF0b3JEaXJlY3RpdmUubWFzY2FyYUNucGpUaGlyZFBhcnQoY3BmQ25waik7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGNwZkNucGoubGVuZ3RoID4gQ3BmQ25walZhbGlkYXRvci5jbnBqQ3BmTGVuZ3RoQm91bmRhcmllcyAmJiBjcGZDbnBqLmxlbmd0aCA8PSBDcGZDbnBqVmFsaWRhdG9yLmNucGpMZW5ndGgpIHtcclxuICAgICAgICAgICAgdmFsdWUgPSBDcGZDbnBqVmFsaWRhdG9yRGlyZWN0aXZlLm1hc2NhcmFDbnBqKGNwZkNucGopO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdmFsdWUgPSBDcGZDbnBqVmFsaWRhdG9yRGlyZWN0aXZlLm1hc2NhcmFDbnBqKGNwZkNucGouc3Vic3RyaW5nKDAsIENwZkNucGpWYWxpZGF0b3IuY25wakxlbmd0aCkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmICh0aGlzLnJlYWxUaW1lTWFzayA9PT0gUmVhbFRpbWVNYXNrVHlwZS5QTEFDRUhPTERFUikge1xyXG4gICAgICAgIGlmICh0aGlzLmRvY1R5cGUgPT09IERvY1R5cGUuQk9USCkge1xyXG4gICAgICAgICAgaWYgKGNwZkNucGoubGVuZ3RoIDw9IENwZkNucGpWYWxpZGF0b3IuY3BmTGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGNwZkNucGogPSBjcGZDbnBqICsgJ18nLnJlcGVhdChDcGZDbnBqVmFsaWRhdG9yLmNwZkxlbmd0aCAtIGNwZkNucGoubGVuZ3RoKTtcclxuICAgICAgICAgICAgdmFsdWUgPSBDcGZDbnBqVmFsaWRhdG9yRGlyZWN0aXZlLm1hc2NhcmFDcGYoY3BmQ25waik7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGNwZkNucGoubGVuZ3RoIDw9IENwZkNucGpWYWxpZGF0b3IuY25wakxlbmd0aCkge1xyXG4gICAgICAgICAgICBjcGZDbnBqID0gY3BmQ25waiArICdfJy5yZXBlYXQoQ3BmQ25walZhbGlkYXRvci5jbnBqTGVuZ3RoIC0gY3BmQ25wai5sZW5ndGgpO1xyXG4gICAgICAgICAgICB2YWx1ZSA9IENwZkNucGpWYWxpZGF0b3JEaXJlY3RpdmUubWFzY2FyYUNucGooY3BmQ25waik7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IENwZkNucGpWYWxpZGF0b3JEaXJlY3RpdmUubWFzY2FyYUNucGooY3BmQ25wai5zdWJzdHJpbmcoMCwgQ3BmQ25walZhbGlkYXRvci5jbnBqTGVuZ3RoKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRvY1R5cGUgPT09IERvY1R5cGUuQ1BGKSB7XHJcbiAgICAgICAgICBpZiAoY3BmQ25wai5sZW5ndGggPD0gQ3BmQ25walZhbGlkYXRvci5jcGZMZW5ndGgpIHtcclxuICAgICAgICAgICAgY3BmQ25waiA9IGNwZkNucGogKyAnXycucmVwZWF0KENwZkNucGpWYWxpZGF0b3IuY3BmTGVuZ3RoIC0gY3BmQ25wai5sZW5ndGgpO1xyXG4gICAgICAgICAgICB2YWx1ZSA9IENwZkNucGpWYWxpZGF0b3JEaXJlY3RpdmUubWFzY2FyYUNwZihjcGZDbnBqKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gQ3BmQ25walZhbGlkYXRvckRpcmVjdGl2ZS5tYXNjYXJhQ3BmKGNwZkNucGouc3Vic3RyaW5nKDAsIENwZkNucGpWYWxpZGF0b3IuY3BmTGVuZ3RoKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRvY1R5cGUgPT09IERvY1R5cGUuQ05QSikge1xyXG4gICAgICAgICAgaWYgKGNwZkNucGoubGVuZ3RoIDw9IENwZkNucGpWYWxpZGF0b3IuY25wakxlbmd0aCkge1xyXG4gICAgICAgICAgICBjcGZDbnBqID0gY3BmQ25waiArICdfJy5yZXBlYXQoQ3BmQ25walZhbGlkYXRvci5jbnBqTGVuZ3RoIC0gY3BmQ25wai5sZW5ndGgpO1xyXG4gICAgICAgICAgICB2YWx1ZSA9IENwZkNucGpWYWxpZGF0b3JEaXJlY3RpdmUubWFzY2FyYUNucGooY3BmQ25waik7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IENwZkNucGpWYWxpZGF0b3JEaXJlY3RpdmUubWFzY2FyYUNucGooY3BmQ25wai5zdWJzdHJpbmcoMCwgQ3BmQ25walZhbGlkYXRvci5jbnBqTGVuZ3RoKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBsZXQgbmV3Q3Vyc29yID0gMDtcclxuICAgICAgZm9yIChzdGFydCA9IDA7IHN0YXJ0IDwgdmFsdWUubGVuZ3RoOyBzdGFydCsrKSB7XHJcbiAgICAgICAgaWYgKG5ld0N1cnNvciA9PT0gY3Vyc29yKSB7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFDcGZDbnBqVmFsaWRhdG9yRGlyZWN0aXZlLmlzTnVtYmVyKHZhbHVlW3N0YXJ0XSkpIHtcclxuICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBuZXdDdXJzb3IrKztcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5yZWFsVGltZU1hc2sgPT09IFJlYWxUaW1lTWFza1R5cGUuQ0xBU1NJQykge1xyXG4gICAgICAgIGlmIChhZnRlck1hc2sgJiYgIUNwZkNucGpWYWxpZGF0b3JEaXJlY3RpdmUuaXNOdW1iZXIodmFsdWVbc3RhcnRdKSkge1xyXG4gICAgICAgICAgc3RhcnQrKztcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5yZWFsVGltZU1hc2sgPT09IFJlYWxUaW1lTWFza1R5cGUuUExBQ0VIT0xERVIpIHtcclxuICAgICAgICBpZiAoYWZ0ZXJNYXNrICYmIHZhbHVlW3N0YXJ0XSAhPT0gJ18nICYmICFDcGZDbnBqVmFsaWRhdG9yRGlyZWN0aXZlLmlzTnVtYmVyKHZhbHVlW3N0YXJ0XSkpIHtcclxuICAgICAgICAgIHN0YXJ0Kys7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsLnZhbHVlID0gdmFsdWU7XHJcbiAgICAgIGVsLmZvY3VzKCk7XHJcbiAgICAgIGVsLnNldFNlbGVjdGlvblJhbmdlKHN0YXJ0LCBzdGFydCk7XHJcbiAgICAgIGVsLnNldEF0dHJpYnV0ZSgnZGF0YS1vbGQtdmFsdWUnLCB2YWx1ZSk7XHJcbiAgICAgIGlmICh0aGlzLm5nTW9kZWwgIT09IHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5mb3JjZVVwZGF0ZSh2YWx1ZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8qXHJcbiAgICAgIGlmIChuZWVkVXBkYXRlKSB7XHJcblxyXG4gICAgICB9XHJcbiAgICAgICovXHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZm9yY2VVcGRhdGUodmFsdWU6IHN0cmluZykge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMubmdNb2RlbENoYW5nZS5lbWl0KHZhbHVlKTtcclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQge05nTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtDcGZDbnBqVmFsaWRhdG9yRGlyZWN0aXZlfSBmcm9tICcuL2NwZi1jbnBqLnZhbGlkYXRvci5kaXJlY3RpdmUnO1xyXG5cclxuQE5nTW9kdWxlKHtcclxuICAgIGRlY2xhcmF0aW9uczogW1xyXG4gICAgICAgIENwZkNucGpWYWxpZGF0b3JEaXJlY3RpdmVcclxuICAgIF0sXHJcbiAgICBpbXBvcnRzOiBbXHJcbiAgICBdLFxyXG4gICAgZXhwb3J0czogW1xyXG4gICAgICAgIENwZkNucGpWYWxpZGF0b3JEaXJlY3RpdmVcclxuICAgIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIENwZkNucGpNb2R1bGUgeyB9XHJcbiIsImltcG9ydCB7QWJzdHJhY3RDb250cm9sLCBOR19WQUxJREFUT1JTLCBWYWxpZGF0b3J9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHtEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIElucHV0fSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgc2VsZWN0b3I6ICdbamhpLWludGVnZXItZmllbGRdW25nTW9kZWxdJyxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogTkdfVkFMSURBVE9SUyxcclxuICAgICAgdXNlRXhpc3Rpbmc6IEludGVnZXJGaWVsZERpcmVjdGl2ZSxcclxuICAgICAgbXVsdGk6IHRydWVcclxuICAgIH1cclxuICBdXHJcbn0pXHJcblxyXG5leHBvcnQgY2xhc3MgSW50ZWdlckZpZWxkRGlyZWN0aXZlIGltcGxlbWVudHMgVmFsaWRhdG9yIHtcclxuICBASW5wdXQoKVxyXG4gIHByaXZhdGUgbWluVmFsdWU6IG51bWJlcjtcclxuXHJcbiAgQElucHV0KClcclxuICBwcml2YXRlIG1heFZhbHVlOiBudW1iZXI7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHJpdmF0ZSBvbmx5UG9zaXRpdmU6IGJvb2xlYW47XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZWxlbWVudDogRWxlbWVudFJlZikge1xyXG4gICAgdGhpcy5vbmx5UG9zaXRpdmUgPSBmYWxzZTtcclxuICAgIHRoaXMubWF4VmFsdWUgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLm1pblZhbHVlID0gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHZhbGlkYXRlKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IHsgW2tleTogc3RyaW5nXTogYW55IH0ge1xyXG4gICAgaWYgKGNvbnRyb2wudmFsdWUgPT09IG51bGwgfHwgY29udHJvbC52YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IGNvbnRyb2wudmFsdWUubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHJldHVybiB7IGVtcHR5OiB0cnVlIH07XHJcbiAgICB9XHJcbiAgICBsZXQgbmV3VmFsdWU6IHN0cmluZyA9IGNvbnRyb2wudmFsdWUudG9TdHJpbmcoKTtcclxuICAgIGxldCBvbmx5TnVtYmVycztcclxuICAgIGlmICh0aGlzLm9ubHlQb3NpdGl2ZSkge1xyXG4gICAgICBvbmx5TnVtYmVycyA9IG5ld1ZhbHVlLnJlcGxhY2UoL1xcRC9nLCAnJyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsZXQgbmVnYXRpdmUgPSAnJztcclxuICAgICAgaWYgKG5ld1ZhbHVlWzBdID09PSAnLScpIHtcclxuICAgICAgICBuZWdhdGl2ZSA9ICctJztcclxuICAgICAgfVxyXG4gICAgICBvbmx5TnVtYmVycyA9IG5lZ2F0aXZlICsgbmV3VmFsdWUucmVwbGFjZSgvXFxEL2csICcnKTtcclxuICAgICAgaWYgKHBhcnNlSW50KG9ubHlOdW1iZXJzLCAxMCkgPT09IDAgJiYgbmVnYXRpdmUgPT09ICctJykge1xyXG4gICAgICAgIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LnZhbHVlID0gJzAnO1xyXG4gICAgICAgIG5ld1ZhbHVlID0gJzAnO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAob25seU51bWJlcnMgIT09IGNvbnRyb2wudmFsdWUudG9TdHJpbmcoKSkge1xyXG4gICAgICB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC52YWx1ZSA9IG9ubHlOdW1iZXJzO1xyXG4gICAgICB0aGlzLmZvcmNlVXBkYXRlKCk7XHJcbiAgICAgIHJldHVybiB7IGludmFsaWREaWdpdDogdHJ1ZSB9O1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLmlzTnVtYmVyKG5ld1ZhbHVlKSkge1xyXG4gICAgICByZXR1cm4geyBub25OdW1iZXI6IHRydWUgfTtcclxuICAgIH1cclxuICAgIGNvbnN0IHZhbHVlID0gcGFyc2VJbnQobmV3VmFsdWUsIDEwKTtcclxuICAgIGlmICh0aGlzLmlzTnVtYmVyKHRoaXMubWluVmFsdWUpKSB7XHJcbiAgICAgIGlmICh2YWx1ZSA8IHRoaXMubWluVmFsdWUpIHtcclxuICAgICAgICByZXR1cm4geyByYW5nZVZhbHVlOiB0cnVlIH07XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh0aGlzLmlzTnVtYmVyKHRoaXMubWF4VmFsdWUpKSB7XHJcbiAgICAgIGlmICh2YWx1ZSA+IHRoaXMubWF4VmFsdWUpIHtcclxuICAgICAgICByZXR1cm4geyByYW5nZVZhbHVlOiB0cnVlIH07XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgaXNOdW1iZXIodmFsdWU6IHN0cmluZyB8IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IG51bGwpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuICFpc05hTihOdW1iZXIodmFsdWUudG9TdHJpbmcoKSkpO1xyXG4gIH1cclxuXHJcbiAgZm9yY2VVcGRhdGUoKSB7XHJcbiAgICBjb25zdCBldmVudCA9IG5ldyBFdmVudCgnaW5wdXQnLCB7XHJcbiAgICAgIGJ1YmJsZXM6IHRydWUsXHJcbiAgICAgIGNhbmNlbGFibGU6IGZhbHNlXHJcbiAgICB9KTtcclxuICAgIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQge05nTW9kdWxlfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQge0ludGVnZXJGaWVsZERpcmVjdGl2ZX0gZnJvbSBcIi4vaW50ZWdlci1maWVsZC5kaXJlY3RpdmVcIjtcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgZGVjbGFyYXRpb25zOiBbXHJcbiAgICBJbnRlZ2VyRmllbGREaXJlY3RpdmVcclxuICBdLFxyXG4gIGltcG9ydHM6IFtcclxuICBdLFxyXG4gIGV4cG9ydHM6IFtcclxuICAgIEludGVnZXJGaWVsZERpcmVjdGl2ZVxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIEludGVnZXJGaWVsZE1vZHVsZSB7IH1cclxuIiwiZXhwb3J0IGNsYXNzIEVuY29kZURlY29kZUJhc2U2NCB7XHJcbiAgICBzdGF0aWMgZW5jb2RlKHN0cjogYW55KSB7XHJcbiAgICAgIGNvbnN0IHJlZ0V4cCA9IC8lKFswLTlBLUZdezJ9KS9nO1xyXG4gICAgICByZXR1cm4gYnRvYShcclxuICAgICAgICAgICAgZW5jb2RlVVJJQ29tcG9uZW50KHN0cikucmVwbGFjZShyZWdFeHAsIChtYXRjaCwgcDEpID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKCgnMHgnICsgcDEpIGFzIGFueSk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZGVjb2RlKHN0cikge1xyXG4gICAgICBjb25zdCBzZXBhcmF0b3IgPSAnJztcclxuICAgICAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChcclxuICAgICAgICAgICAgYXRvYihzdHIpXHJcbiAgICAgICAgICAgICAgICAuc3BsaXQoc2VwYXJhdG9yKVxyXG4gICAgICAgICAgICAgICAgLm1hcChmdW5jdGlvbihjKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICclJyArICgnMDAnICsgYy5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTIpO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIC5qb2luKHNlcGFyYXRvcilcclxuICAgICAgICApO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7IEh0dHBQYXJhbXMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcblxyXG5leHBvcnQgY29uc3QgY3JlYXRlUmVxdWVzdE9wdGlvbiA9IChyZXE/OiBhbnkpOiBIdHRwUGFyYW1zID0+IHtcclxuICAgIGxldCBvcHRpb25zOiBIdHRwUGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcclxuICAgIGlmIChyZXEpIHtcclxuICAgICAgICBPYmplY3Qua2V5cyhyZXEpLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICAgICAgaWYgKGtleSAhPT0gJ3NvcnQnKSB7XHJcbiAgICAgICAgICAgICAgICBvcHRpb25zID0gb3B0aW9ucy5zZXQoa2V5LCByZXFba2V5XSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAocmVxLnNvcnQpIHtcclxuICAgICAgICAgICAgcmVxLnNvcnQuZm9yRWFjaCh2YWwgPT4ge1xyXG4gICAgICAgICAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMuYXBwZW5kKCdzb3J0JywgdmFsKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG9wdGlvbnM7XHJcbn07XHJcbiIsIi8qKlxyXG4gKiBBbmd1bGFyIGJvb3RzdHJhcCBEYXRlIGFkYXB0ZXJcclxuICovXHJcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTmdiRGF0ZUFkYXB0ZXIsIE5nYkRhdGVTdHJ1Y3QsIE5nYkRhdGVQYXJzZXJGb3JtYXR0ZXIgfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcbmltcG9ydCB7IE1vbWVudCB9IGZyb20gJ21vbWVudCc7XHJcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIE5nYkRhdGVNb21lbnRBZGFwdGVyIGV4dGVuZHMgTmdiRGF0ZUFkYXB0ZXI8TW9tZW50PiB7XHJcbiAgZnJvbU1vZGVsKGRhdGU6IE1vbWVudCk6IE5nYkRhdGVTdHJ1Y3Qge1xyXG4gICAgaWYgKGRhdGUgIT0gbnVsbCAmJiBtb21lbnQuaXNNb21lbnQoZGF0ZSkgJiYgZGF0ZS5pc1ZhbGlkKCkpIHtcclxuICAgICAgcmV0dXJuIHsgeWVhcjogZGF0ZS55ZWFyKCksIG1vbnRoOiBkYXRlLm1vbnRoKCkgKyAxLCBkYXk6IGRhdGUuZGF0ZSgpIH07XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGRhdGUgIT09IG51bGwgJiYgZGF0ZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGNvbnN0IGRhdGVOZXcgPSBuZXcgRGF0ZShkYXRlLnRvU3RyaW5nKCkpO1xyXG4gICAgICByZXR1cm4geyB5ZWFyOiBkYXRlTmV3LmdldEZ1bGxZZWFyKCksIG1vbnRoOiBkYXRlTmV3LmdldE1vbnRoKCkgKyAxLCBkYXk6IGRhdGVOZXcuZ2V0VVRDRGF0ZSgpIH07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIHRvTW9kZWwoZGF0ZTogTmdiRGF0ZVN0cnVjdCk6IE1vbWVudCB7XHJcbiAgICByZXR1cm4gZGF0ZSA/IG1vbWVudChkYXRlLnllYXIgKyAnLScgKyBkYXRlLm1vbnRoICsgJy0nICsgZGF0ZS5kYXksICdZWVlZL01NL0REJykgOiBudWxsO1xyXG4gIH1cclxufVxyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgTmdiRGF0ZU1vbWVudERhdGVGb3JtYXR0ZXIgZXh0ZW5kcyBOZ2JEYXRlUGFyc2VyRm9ybWF0dGVyIHtcclxuICByZWFkb25seSBEVF9GT1JNQVQgPSAnREQvTU0vWVlZWSc7XHJcblxyXG4gIHBhcnNlKHZhbHVlOiBzdHJpbmcpOiBOZ2JEYXRlU3RydWN0IHtcclxuICAgIGlmICghdmFsdWUpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBjb25zdCBkYXRlID0gbW9tZW50KHZhbHVlLCB0aGlzLkRUX0ZPUk1BVCk7XHJcbiAgICByZXR1cm4gZGF0ZS5pc1ZhbGlkKCkgPyB7IHllYXI6IGRhdGUueWVhcigpLCBtb250aDogZGF0ZS5tb250aCgpICsgMSwgZGF5OiBkYXRlLmRhdGUoKSB9IDogbnVsbDtcclxuICB9XHJcblxyXG4gIGZvcm1hdChkYXRlOiBOZ2JEYXRlU3RydWN0KTogc3RyaW5nIHtcclxuICAgIGlmICghZGF0ZSkge1xyXG4gICAgICByZXR1cm4gJyc7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBtZHQgPSBtb21lbnQoW2RhdGUueWVhciwgZGF0ZS5tb250aCAtIDEsIGRhdGUuZGF5XSk7XHJcbiAgICAgIGlmICghbWR0LmlzVmFsaWQoKSkge1xyXG4gICAgICAgIHJldHVybiAnJztcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gbWR0LmZvcm1hdCh0aGlzLkRUX0ZPUk1BVCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsImV4cG9ydCBjb25zdCBQUk9CTEVNX0JBU0VfVVJMID0gJ2h0dHBzOi8vd3d3LmpoaXBzdGVyLnRlY2gvcHJvYmxlbSc7XHJcbmV4cG9ydCBjb25zdCBFTUFJTF9BTFJFQURZX1VTRURfVFlQRSA9IFBST0JMRU1fQkFTRV9VUkwgKyAnL2VtYWlsLWFscmVhZHktdXNlZCc7XHJcbmV4cG9ydCBjb25zdCBMT0dJTl9BTFJFQURZX1VTRURfVFlQRSA9IFBST0JMRU1fQkFTRV9VUkwgKyAnL2xvZ2luLWFscmVhZHktdXNlZCc7XHJcbmV4cG9ydCBjb25zdCBFTUFJTF9OT1RfRk9VTkRfVFlQRSA9IFBST0JMRU1fQkFTRV9VUkwgKyAnL2VtYWlsLW5vdC1mb3VuZCc7XHJcbmV4cG9ydCBjb25zdCBJTlZBTElEX1BBU1NXT1JEX1RZUEUgPSBQUk9CTEVNX0JBU0VfVVJMICsgJy9pbnZhbGlkLXBhc3N3b3JkJztcclxuZXhwb3J0IGNvbnN0IEVSUl9VTkFVVEhPUklaRURfRURJVF9ERUxFVElPTiA9IFBST0JMRU1fQkFTRV9VUkwgKyBcIi91bmF1dGhvcml6ZWQtZWRpdC1kZWxldGlvblwiO1xyXG4iLCJleHBvcnQgY29uc3QgSVRFTVNfUEVSX1BBR0UgPSAyMDtcclxuIiwiaW1wb3J0IHtJbmplY3QsIEluamVjdGFibGUsIEluamVjdGlvblRva2VufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmV4cG9ydCBjb25zdCBNT0RVTE9fT1BUSU9OUyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxzdHJpbmc+KCdNT0RVTE9fT1BUSU9OUycpO1xyXG5leHBvcnQgY29uc3QgTUVOVV9NT0RVTE9fT1BUSU9OUyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxzdHJpbmc+KCdNRU5VX01PRFVMT19PUFRJT05TJyk7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBPcHRpb25zUHJvdmlkZXIge1xyXG4gIHByaXZhdGUgX3ZlcnNpb246IHN0cmluZztcclxuICBwcml2YXRlIF90d29GYWN0b3I6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIF9yZXNldEJ5TG9naW5PckVtYWlsID0gZmFsc2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgQEluamVjdChNT0RVTE9fT1BUSU9OUykgcHJpdmF0ZSBfbW9kdWxvOiBzdHJpbmcsXHJcbiAgICBASW5qZWN0KE1FTlVfTU9EVUxPX09QVElPTlMpIHByaXZhdGUgX21lbnVNb2R1bG86IHN0cmluZ1xyXG4gICkge31cclxuXHJcbiAgZ2V0IHZlcnNpb24oKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl92ZXJzaW9uID8gdGhpcy5fdmVyc2lvbiA6ICcnO1xyXG4gIH1cclxuXHJcbiAgc2V0IHZlcnNpb24odmVyc2lvbjogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl92ZXJzaW9uID0gdmVyc2lvbjtcclxuICB9XHJcblxyXG4gIHNldCB0d29GYWN0b3IodHdvTG9naW46IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX3R3b0ZhY3RvciA9IHR3b0xvZ2luO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHR3b0ZhY3RvcigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl90d29GYWN0b3I7XHJcbiAgfVxyXG5cclxuICBzZXQgcmVzZXRCeUxvZ2luT3JFbWFpbChyZXNldEJ5TG9naW5PckVtYWlsOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9yZXNldEJ5TG9naW5PckVtYWlsID0gcmVzZXRCeUxvZ2luT3JFbWFpbDtcclxuICB9XHJcblxyXG4gIGdldCByZXNldEJ5TG9naW5PckVtYWlsKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3Jlc2V0QnlMb2dpbk9yRW1haWw7XHJcbiAgfVxyXG5cclxuICBnZXQgbW9kdWxvKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fbW9kdWxvO1xyXG4gIH1cclxuXHJcbiAgZ2V0IG1lbnVNb2R1bG8oKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9tZW51TW9kdWxvO1xyXG4gIH1cclxufVxyXG4iLCJleHBvcnQgY2xhc3MgVXRpbEFycXVpdm8ge1xyXG4gICAgcHVibGljIHN0YXRpYyBmb3JtYXRhclRhbWFuaG9BcnF1aXZvKGJ5dGVzID0gMCwgcHJlY2lzYW8gPSAyKTogc3RyaW5nIHtcclxuICAgICAgICBjb25zdCB1bmlkYWRlcyA9IFsnYnl0ZXMnLCAnS0InLCAnTUInLCAnR0InLCAnVEInLCAnUEInXTtcclxuXHJcbiAgICAgICAgaWYgKGlzTmFOKHBhcnNlRmxvYXQoU3RyaW5nKGJ5dGVzKSkpIHx8ICFpc0Zpbml0ZShieXRlcykpIHtcclxuICAgICAgICAgICAgcmV0dXJuICc/JztcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IHVuaWRhZGUgPSAwO1xyXG4gICAgICAgIHdoaWxlIChieXRlcyA+PSAxMDI0KSB7XHJcbiAgICAgICAgICAgIGJ5dGVzIC89IDEwMjQ7XHJcbiAgICAgICAgICAgIHVuaWRhZGUrKztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGJ5dGVzLnRvRml4ZWQoK3ByZWNpc2FvKSArICcgJyArIHVuaWRhZGVzW3VuaWRhZGVdO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7U2Vzc2lvblN0b3JhZ2VTZXJ2aWNlfSBmcm9tIFwibmd4LXdlYnN0b3JhZ2VcIjtcclxuaW1wb3J0IHtVdGlsRnVuY3Rpb25zfSBmcm9tICcuJztcclxuXHJcbmV4cG9ydCBjbGFzcyBMb2NrUGFnZSB7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgc3RvcmFnZUxhYmVsID0gJ2xvY2tQYWdlTmF2aWdhdGlvbic7XHJcbiAgcHVibGljIG1vZHVsZTogc3RyaW5nO1xyXG4gIHB1YmxpYyBwYXRoOiBzdHJpbmc7XHJcbiAgXHJcbiAgY29uc3RydWN0b3IobW9kdWxlOiBzdHJpbmcsIHBhdGg6IHN0cmluZykge1xyXG4gICAgdGhpcy5tb2R1bGUgPSBtb2R1bGU7XHJcbiAgICB0aGlzLnBhdGggPSBwYXRoO1xyXG4gIH1cclxuICBcclxuICBnZXRSZWRpcmVjdFBhZ2UobG9jYXRpb246IExvY2F0aW9uLCBzZW5kZXI6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBpZiAoc2VuZGVyID09PSB0aGlzLm1vZHVsZSkge1xyXG4gICAgICBpZiAobG9jYXRpb24ucGF0aG5hbWUuaW5kZXhPZih0aGlzLm1vZHVsZSkgPCAwKSB7XHJcbiAgICAgICAgcmV0dXJuIGxvY2F0aW9uLm9yaWdpbi5jb25jYXQoJy8jLycsIHRoaXMucGF0aCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBsb2NhdGlvbi5vcmlnaW4uY29uY2F0KCcvJywgdGhpcy5tb2R1bGUsICcvIy8nLCB0aGlzLnBhdGgpO1xyXG4gIH1cclxuXHJcbiAgaXNMb2NrZWRQYWdlKGxvY2F0aW9uOiBMb2NhdGlvbiwgc2VuZGVyOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICBcclxuICAgIGlmIChsb2NhdGlvbi5ocmVmLmluZGV4T2YodGhpcy5nZXRSZWRpcmVjdFBhZ2UobG9jYXRpb24sIHNlbmRlcikpID4gMCkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgcmV0cmlldmVGcm9tU3RvcmFnZShzZXNzaW9uU3RvcmFnZTogU2Vzc2lvblN0b3JhZ2VTZXJ2aWNlKTogTG9ja1BhZ2Uge1xyXG4gICAgY29uc3Qgc3RvcmVkT2JqZWN0OiBMb2NrUGFnZSA9IHNlc3Npb25TdG9yYWdlLnJldHJpZXZlKExvY2tQYWdlLnN0b3JhZ2VMYWJlbCk7XHJcbiAgICBpZiAoIVV0aWxGdW5jdGlvbnMuaXNWYWxpZE9iamVjdChzdG9yZWRPYmplY3QpKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgY29uc3QgbmV3T2JqZWN0OiBMb2NrUGFnZSA9IG5ldyBMb2NrUGFnZShzdG9yZWRPYmplY3QubW9kdWxlLCBzdG9yZWRPYmplY3QucGF0aCk7XHJcbiAgICByZXR1cm4gbmV3T2JqZWN0O1xyXG4gIH1cclxuICBcclxuICBwdWJsaWMgc3RhdGljIHNhdmVUb1N0b3JhZ2Uoc2Vzc2lvblN0b3JhZ2U6IFNlc3Npb25TdG9yYWdlU2VydmljZSwgc3RvcmVPYmplY3Q6IExvY2tQYWdlKSB7XHJcbiAgICBzZXNzaW9uU3RvcmFnZS5zdG9yZShMb2NrUGFnZS5zdG9yYWdlTGFiZWwsIHN0b3JlT2JqZWN0KTtcclxuICB9XHJcbiAgXHJcbiAgcHVibGljIHN0YXRpYyByZW1vdmVGcm9tU3RvcmFnZShzZXNzaW9uU3RvcmFnZTogU2Vzc2lvblN0b3JhZ2VTZXJ2aWNlKSB7XHJcbiAgICBzZXNzaW9uU3RvcmFnZS5jbGVhcihMb2NrUGFnZS5zdG9yYWdlTGFiZWwpO1xyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQge0FmdGVyVmlld0luaXQsIENvbXBvbmVudCwgVmlld0NoaWxkfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtOZ2JBY3RpdmVNb2RhbH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQge1V0aWxGdW5jdGlvbnN9IGZyb20gXCIuLi8uLi91dGlsXCI7XHJcbmltcG9ydCB7UGRmSnNWaWV3ZXJDb21wb25lbnR9IGZyb20gXCJuZzItcGRmanMtdmlld2VyXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2poaS1wZGYtdmlld2VyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcGRmLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsncGRmLXZpZXdlci5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFBkZkNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xyXG4gIEBWaWV3Q2hpbGQoJ3BkZlZpZXdlcicpIHBkZlZpZXdlcjogUGRmSnNWaWV3ZXJDb21wb25lbnQ7XHJcblxyXG4gIHB1YmxpYyB0aXR1bG86IHN0cmluZztcclxuICBwdWJsaWMgbm9tZUFycXVpdm86IHN0cmluZztcclxuICBwdWJsaWMgcGRmOiBzdHJpbmc7XHJcbiAgcHVibGljIGlzTG9hZGVkOiBib29sZWFuO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGFjdGl2ZU1vZGFsOiBOZ2JBY3RpdmVNb2RhbCkge1xyXG4gICAgdGhpcy5pc0xvYWRlZCA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0b3AoKSB7XHJcbiAgICB0aGlzLmFjdGl2ZU1vZGFsLmRpc21pc3MoJ2Nsb3NlJyk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgLy8gVXNhZG8gcGFyYSBjb250b3JuYXIgbyBwcm9ibGVtYSBkZSBjaGFuZ2UgZG8gc2VsZWN0IGRlIHpvb21cclxuICAgICAgaWYgKCFVdGlsRnVuY3Rpb25zLmlzVmFsaWRPYmplY3QoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NlbGVjdEhpZGRlblBkZicpKSkge1xyXG4gICAgICAgIHZhciBzZWxlY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzZWxlY3QnKTtcclxuICAgICAgICBzZWxlY3QuaGlkZGVuID0gdHJ1ZTtcclxuICAgICAgICBzZWxlY3QuaWQgPSAnc2VsZWN0SGlkZGVuUGRmJztcclxuICAgICAgICBkb2N1bWVudC5ib2R5Lmluc2VydEFkamFjZW50RWxlbWVudChcImFmdGVyYmVnaW5cIiwgc2VsZWN0KTtcclxuICAgICAgICBjb25zb2xlLmxvZygnaW5zZXJ0IHNlbGVjdCBoaWRkZW4nKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnBkZlZpZXdlci5kb3dubG9hZEZpbGVOYW1lID0gdGhpcy5ub21lQXJxdWl2bztcclxuICAgICAgY29uc3QgYmxvYiA9IFV0aWxGdW5jdGlvbnMuY29udmVydEJhc2U2NFRvQmxvYkRhdGEodGhpcy5wZGYsICdhcHBsaWNhdGlvbi9wZGYnKTtcclxuICAgICAgY29uc3QgdXJsID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XHJcbiAgICAgIHRoaXMucGRmVmlld2VyLnBkZlNyYyA9IHVybDtcclxuICAgICAgdGhpcy5wZGZWaWV3ZXIuem9vbSA9ICdwYWdlLWZpdCc7XHJcbiAgICAgIHRoaXMucGRmVmlld2VyLnJlZnJlc2goKTtcclxuICAgIH0sIDEwMCk7XHJcblxyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge05nYk1vZGFsfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcbmltcG9ydCB7UGRmQ29tcG9uZW50fSBmcm9tICcuL3BkZi5jb21wb25lbnQnO1xyXG5cclxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcclxuZXhwb3J0IGNsYXNzIFBkZlNlcnZpY2Uge1xyXG4gICAgcHJpdmF0ZSBwZGZWaWV3ZXJDb21wb25lbnQ6IFBkZkNvbXBvbmVudDtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIG1vZGFsU2VydmljZTogTmdiTW9kYWwpIHt9XHJcblxyXG4gICAgcHVibGljIHN0b3AoKSB7XHJcbiAgICAgICAgdGhpcy5wZGZWaWV3ZXJDb21wb25lbnQuc3RvcCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGFydCh0aXR1bG86IHN0cmluZywgbm9tZUFycXVpdm86IHN0cmluZywgcGRmOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLnBkZlZpZXdlckNvbXBvbmVudCA9IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oUGRmQ29tcG9uZW50LCB7XHJcbiAgICAgICAgICAgIHNpemU6ICdsZycsXHJcbiAgICAgICAgICAgIGJhY2tkcm9wOiAnc3RhdGljJyxcclxuICAgICAgICAgICAgd2luZG93Q2xhc3M6ICdtb2RhbC14bCBwZGYtdmlld2VyJ1xyXG4gICAgICAgIH0pLmNvbXBvbmVudEluc3RhbmNlO1xyXG4gICAgICAgIHRoaXMucGRmVmlld2VyQ29tcG9uZW50Lm5vbWVBcnF1aXZvID0gbm9tZUFycXVpdm87XHJcbiAgICAgICAgdGhpcy5wZGZWaWV3ZXJDb21wb25lbnQudGl0dWxvID0gdGl0dWxvO1xyXG4gICAgICAgIHRoaXMucGRmVmlld2VyQ29tcG9uZW50LnBkZiA9IHBkZjtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge0NVU1RPTV9FTEVNRU5UU19TQ0hFTUEsIE5nTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtQZGZDb21wb25lbnR9IGZyb20gJy4vcGRmLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7UGRmSnNWaWV3ZXJNb2R1bGV9IGZyb20gJ25nMi1wZGZqcy12aWV3ZXInO1xyXG5pbXBvcnQge05nYk1vZHVsZX0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQge1BkZlNlcnZpY2V9IGZyb20gJy4vcGRmLnNlcnZpY2UnO1xyXG5pbXBvcnQge0ZvbnRBd2Vzb21lTW9kdWxlfSBmcm9tICdAZm9ydGF3ZXNvbWUvYW5ndWxhci1mb250YXdlc29tZSc7XHJcbmltcG9ydCB7bGlicmFyeX0gZnJvbSAnQGZvcnRhd2Vzb21lL2ZvbnRhd2Vzb21lLXN2Zy1jb3JlJztcclxuaW1wb3J0IHtmYXN9IGZyb20gJ0Bmb3J0YXdlc29tZS9mcmVlLXNvbGlkLXN2Zy1pY29ucyc7XHJcblxyXG5saWJyYXJ5LmFkZChmYXMpO1xyXG5cclxuQE5nTW9kdWxlKHtcclxuICBkZWNsYXJhdGlvbnM6IFtcclxuICAgIFBkZkNvbXBvbmVudFxyXG4gIF0sXHJcbiAgaW1wb3J0czogW1xyXG4gICAgUGRmSnNWaWV3ZXJNb2R1bGUsXHJcbiAgICBOZ2JNb2R1bGUuZm9yUm9vdCgpLFxyXG4gICAgRm9udEF3ZXNvbWVNb2R1bGVcclxuICBdLFxyXG4gIGVudHJ5Q29tcG9uZW50czogW1xyXG4gICAgUGRmQ29tcG9uZW50XHJcbiAgXSxcclxuICBleHBvcnRzOiBbXHJcbiAgICBQZGZDb21wb25lbnRcclxuICBdLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAgUGRmU2VydmljZVxyXG4gIF0sXHJcbiAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQZGZNb2R1bGUge31cclxuIiwiZXhwb3J0IGVudW0gRGlhbG9nVHlwZSB7XHJcbiAgICBJTkZPLFxyXG4gICAgUVVFU1RJT04sXHJcbiAgICBRVUVTVElPTl9ZRVNfTk8sXHJcbiAgICBXQUlUXHJcbn1cclxuXHJcbmV4cG9ydCBlbnVtIERpYWxvZ1Jlc3VsdCB7XHJcbiAgICBPSyxcclxuICAgIFlFUyxcclxuICAgIE5PLFxyXG4gICAgQ0FOQ0VMXHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRGlhbG9nTGlzdGVuZXIge1xyXG4gICAgZGlhbG9nUmV0dXJuZWQocmVzdWx0OiBEaWFsb2dSZXN1bHQsIHBhcmFtOiBhbnkpO1xyXG59XHJcbiIsImltcG9ydCB7IEFmdGVyQ29udGVudEluaXQsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE5nYkFjdGl2ZU1vZGFsIH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQgeyBEaWFsb2dMaXN0ZW5lciwgRGlhbG9nUmVzdWx0LCBEaWFsb2dUeXBlIH0gZnJvbSAnLi9tb2RhbC1kaWFsb2cubW9kZWwnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2poaS1tb2RhbC1kaWFsb2cnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL21vZGFsLWRpYWxvZy5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9tb2RhbC1kaWFsb2cuc3R5bGUuY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIE1vZGFsRGlhbG9nQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCB7XHJcbiAgICBAVmlld0NoaWxkKCdsb2FkZXInKVxyXG4gICAgbG9hZGVyOiBFbGVtZW50UmVmO1xyXG4gICAgZGlhbG9nUmVzdWx0ID0gRGlhbG9nUmVzdWx0O1xyXG4gICAgZGlhbG9nVHlwZSA9IERpYWxvZ1R5cGU7XHJcbiAgICBsaXN0ZW5lcjogRGlhbG9nTGlzdGVuZXI7XHJcbiAgICB0aXRsZTogc3RyaW5nO1xyXG4gICAgbWVzc2FnZTogc3RyaW5nO1xyXG4gICAgY3NzQ2xhc3M6IHN0cmluZztcclxuICAgIHR5cGU6IERpYWxvZ1R5cGU7XHJcbiAgICBwYXJhbTogYW55O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgYWN0aXZlTW9kYWw6IE5nYkFjdGl2ZU1vZGFsKSB7XHJcbiAgICAgICAgdGhpcy5saXN0ZW5lciA9IHVuZGVmaW5lZDtcclxuICAgICAgICB0aGlzLnR5cGUgPSBEaWFsb2dUeXBlLklORk87XHJcbiAgICAgICAgdGhpcy5jc3NDbGFzcyA9ICcnO1xyXG4gICAgICAgIHRoaXMubWVzc2FnZSA9ICcnO1xyXG4gICAgICAgIHRoaXMudGl0bGUgPSAnJztcclxuICAgIH1cclxuXHJcbiAgICBzZXRSZXN1bHQocmVzdWx0OiBEaWFsb2dSZXN1bHQpIHtcclxuICAgICAgICBpZiAodGhpcy5saXN0ZW5lciAhPT0gdW5kZWZpbmVkICYmIHRoaXMubGlzdGVuZXIgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy5saXN0ZW5lci5kaWFsb2dSZXR1cm5lZChyZXN1bHQsIHRoaXMucGFyYW0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5hY3RpdmVNb2RhbC5kaXNtaXNzKCdyZXN1bHQnKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0TGlzdGVuZXIocGFyZW50OiBEaWFsb2dMaXN0ZW5lcikge1xyXG4gICAgICAgIHRoaXMubGlzdGVuZXIgPSBwYXJlbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGluaXQocGFyYW06IGFueSwgdGl0bGU6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nLCBjc3NDbGFzczogc3RyaW5nLCB0eXBlOiBEaWFsb2dUeXBlKSB7XHJcbiAgICAgICAgdGhpcy50aXRsZSA9IHRpdGxlO1xyXG4gICAgICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XHJcbiAgICAgICAgdGhpcy5jc3NDbGFzcyA9IGNzc0NsYXNzO1xyXG4gICAgICAgIHRoaXMudHlwZSA9IHR5cGU7XHJcbiAgICAgICAgdGhpcy5wYXJhbSA9IHBhcmFtO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdG9wKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmxpc3RlbmVyICE9PSB1bmRlZmluZWQgJiYgdGhpcy5saXN0ZW5lciAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLmxpc3RlbmVyLmRpYWxvZ1JldHVybmVkKERpYWxvZ1Jlc3VsdC5DQU5DRUwsIHRoaXMucGFyYW0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmFjdGl2ZU1vZGFsLmRpc21pc3MoJ2Nsb3NlJyk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xyXG4gICAgICAgIGNvbnN0IG1vZGFsQ29udGVudCA9IHRoaXMubG9hZGVyLm5hdGl2ZUVsZW1lbnQucGFyZW50Tm9kZS5wYXJlbnROb2RlO1xyXG4gICAgICAgIGlmICh0aGlzLnR5cGUgPT09IERpYWxvZ1R5cGUuV0FJVCkge1xyXG4gICAgICAgICAgICBtb2RhbENvbnRlbnQuY2xhc3NOYW1lID0gJyc7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7IFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbkBQaXBlKHsgbmFtZTogJ2ZpbmRMYW5ndWFnZUZyb21LZXknIH0pXHJcbmV4cG9ydCBjbGFzcyBGaW5kTGFuZ3VhZ2VGcm9tS2V5UGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xyXG4gICAgcHJpdmF0ZSBsYW5ndWFnZXM6IGFueSA9IHtcclxuICAgICAgICAncHQtYnInOiB7IG5hbWU6ICdQb3J0dWd1w4PCqnMgKEJyYXNpbCknIH1cclxuICAgIH07XHJcbiAgICB0cmFuc2Zvcm0obGFuZzogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5sYW5ndWFnZXNbbGFuZ10ubmFtZTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge0NVU1RPTV9FTEVNRU5UU19TQ0hFTUEsIE5nTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtGaW5kTGFuZ3VhZ2VGcm9tS2V5UGlwZX0gZnJvbSAnLi9maW5kLWxhbmd1YWdlLWZyb20ta2V5LnBpcGUnXHJcblxyXG5ATmdNb2R1bGUoe1xyXG4gIGRlY2xhcmF0aW9uczogW1xyXG4gICAgRmluZExhbmd1YWdlRnJvbUtleVBpcGVcclxuICBdLFxyXG4gIGV4cG9ydHM6IFtcclxuICAgIEZpbmRMYW5ndWFnZUZyb21LZXlQaXBlXHJcbiAgXSxcclxuICBzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV1cclxufSlcclxuZXhwb3J0IGNsYXNzIEZpbmRMYW5ndWFnZU1vZHVsbyB7fVxyXG4iLCJpbXBvcnQge0NVU1RPTV9FTEVNRU5UU19TQ0hFTUEsIE5nTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtOZ2JNb2R1bGV9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHtNb2RhbERpYWxvZ0NvbXBvbmVudH0gZnJvbSAnLi9tb2RhbC1kaWFsb2cuY29tcG9uZW50JztcclxuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7Rm9udEF3ZXNvbWVNb2R1bGV9IGZyb20gJ0Bmb3J0YXdlc29tZS9hbmd1bGFyLWZvbnRhd2Vzb21lJztcclxuaW1wb3J0IHtsaWJyYXJ5fSBmcm9tICdAZm9ydGF3ZXNvbWUvZm9udGF3ZXNvbWUtc3ZnLWNvcmUnO1xyXG5pbXBvcnQge2ZhVGltZXN9IGZyb20gJ0Bmb3J0YXdlc29tZS9mcmVlLXNvbGlkLXN2Zy1pY29ucy9mYVRpbWVzJztcclxuaW1wb3J0IHtmYUJhbn0gZnJvbSAnQGZvcnRhd2Vzb21lL2ZyZWUtc29saWQtc3ZnLWljb25zL2ZhQmFuJztcclxuaW1wb3J0IHtGaW5kTGFuZ3VhZ2VNb2R1bG99IGZyb20gJy4uLy4uL2xhbmd1YWdlL2ZpbmQtbGFuZ3VhZ2UubW9kdWxvJztcclxuaW1wb3J0IHtOZ0poaXBzdGVyTW9kdWxlfSBmcm9tICduZy1qaGlwc3Rlcic7XHJcblxyXG5saWJyYXJ5LmFkZChmYVRpbWVzKTtcclxubGlicmFyeS5hZGQoZmFCYW4pO1xyXG5cclxuQE5nTW9kdWxlKHtcclxuICAgIGltcG9ydHM6IFtcclxuICAgICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgICBGb250QXdlc29tZU1vZHVsZSxcclxuICAgICAgRmluZExhbmd1YWdlTW9kdWxvLFxyXG4gICAgICBOZ0poaXBzdGVyTW9kdWxlLFxyXG4gICAgICBOZ2JNb2R1bGUuZm9yUm9vdCgpLFxyXG4gICAgXSxcclxuICAgIGRlY2xhcmF0aW9uczogW1xyXG4gICAgICBNb2RhbERpYWxvZ0NvbXBvbmVudFxyXG4gICAgXSxcclxuICAgIGVudHJ5Q29tcG9uZW50czogW1xyXG4gICAgICBNb2RhbERpYWxvZ0NvbXBvbmVudFxyXG4gICAgXSxcclxuICAgIGV4cG9ydHM6IFtcclxuICAgICAgTW9kYWxEaWFsb2dDb21wb25lbnRcclxuICAgIF0sXHJcbiAgICBzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV1cclxufSlcclxuZXhwb3J0IGNsYXNzIE1vZGFsRGlhbG9nTW9kdWxlIHt9XHJcbiIsImV4cG9ydCBjbGFzcyBQYXJhbWV0cm8ge1xyXG4gICAgcHVibGljIGlkOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgdGlwbzogbnVtYmVyO1xyXG4gICAgcHVibGljIG5vbWU6IHN0cmluZztcclxuICAgIHB1YmxpYyBkZXNjcmljYW86IHN0cmluZztcclxuICAgIHB1YmxpYyB2YWxvcjogYW55O1xyXG4gICAgcHVibGljIHRlbGE6IHN0cmluZztcclxuICAgIHB1YmxpYyBsb2NhbDogYm9vbGVhbjtcclxuICAgIHB1YmxpYyBtb2R1bG86IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGVudW0gUGFyYW1ldHJvVGlwbyB7XHJcbiAgICBDT01CTyA9IDEsXHJcbiAgICBTVFJJTkcgPSAyLFxyXG4gICAgQk9PTEVBTiA9IDNcclxufVxyXG4iLCJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0h0dHBDbGllbnR9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHtQYXJhbWV0cm8sIFBhcmFtZXRyb1RpcG99IGZyb20gJy4uLy4uL21vZGVsL3BhcmFtZXRyby5tb2RlbCc7XHJcbmltcG9ydCB7T3B0aW9uc1Byb3ZpZGVyfSBmcm9tICcuLi8uLi91dGlsL29wdGlvbnMtcHJvdmlkZXInO1xyXG5cclxuY29uc3QgU0VSVkVSX0FQSV9VUkwgPSAnLi8nO1xyXG5cclxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcclxuZXhwb3J0IGNsYXNzIFBhcmFtZXRyb3NTZXJ2aWNlIHtcclxuICAgIHB1YmxpYyByZXNvdXJjZVVybCA9IFNFUlZFUl9BUElfVVJMICsgJ2FwaS9wYXJhbWV0cm9zJztcclxuICAgIHB1YmxpYyByZXNvdXJjZVVybFRyaWJ1dG9zID0gU0VSVkVSX0FQSV9VUkwgKyAnYXBpL3BhcmFtZXRyb3MtdHJpYnV0b3MnO1xyXG4gICAgcHVibGljIHJlc291cmNlVXJsUGFyYW1ldHJvc0NoYXZlVmFsb3IgPSBTRVJWRVJfQVBJX1VSTCArICdhcGkvcHVibGljL3BhcmFtZXRyb3MtY2hhdmUtdmFsb3InO1xyXG4gICAgcHJpdmF0ZSBtb2R1bG86IHN0cmluZztcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LCBvcHRpb25zUHJvdmlkZXI6IE9wdGlvbnNQcm92aWRlclxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMubW9kdWxvID0gb3B0aW9uc1Byb3ZpZGVyLm1vZHVsbztcclxuICAgIH1cclxuXHJcbiAgICBnZXRQYXJhbWV0cm9zKHBhZ2luYTogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICBjb25zdCB1cmwgPSB0aGlzLnJlc291cmNlVXJsICsgJy8nICsgcGFnaW5hICsgJy8nICsgdGhpcy5tb2R1bG87XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cFxyXG4gICAgICAgICAgICAuZ2V0KHVybCwgeyBvYnNlcnZlOiAncmVzcG9uc2UnIH0pXHJcbiAgICAgICAgICAgIC50b1Byb21pc2UoKVxyXG4gICAgICAgICAgICAudGhlbih2YWx1ZSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBib2R5ID0gdmFsdWUuYm9keTtcclxuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIGJvZHkpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYm9keVtrZXldLnRpcG8gPT09IFBhcmFtZXRyb1RpcG8uQ09NQk8pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYm9keVtrZXldLnZhbG9yID0gSlNPTi5wYXJzZShib2R5W2tleV0udmFsb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYm9keVtrZXldLnRpcG8gPT09IFBhcmFtZXRyb1RpcG8uQk9PTEVBTikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBib2R5W2tleV0udmFsb3IgPSBib2R5W2tleV0udmFsb3IgPT09ICd0cnVlJztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYm9keTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0UGFyYW1ldHJvc1RvRWRpdChwYWdpbmE6IHN0cmluZyk6IFByb21pc2U8YW55PiB7XHJcbiAgICAgIGNvbnN0IHVybCA9IHRoaXMucmVzb3VyY2VVcmwgKyAnLycgKyBwYWdpbmEgKyAnLycgKyB0aGlzLm1vZHVsbyArIFwiP2VkaXQ9dHJ1ZVwiO1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwXHJcbiAgICAgICAgLmdldCh1cmwsIHsgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyB9KVxyXG4gICAgICAgIC50b1Byb21pc2UoKVxyXG4gICAgICAgIC50aGVuKHZhbHVlID0+IHtcclxuICAgICAgICAgIGNvbnN0IGJvZHkgPSB2YWx1ZS5ib2R5O1xyXG4gICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gYm9keSkge1xyXG4gICAgICAgICAgICBpZiAoYm9keVtrZXldLnRpcG8gPT09IFBhcmFtZXRyb1RpcG8uQ09NQk8pIHtcclxuICAgICAgICAgICAgICBib2R5W2tleV0udmFsb3IgPSBKU09OLnBhcnNlKGJvZHlba2V5XS52YWxvcik7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYm9keVtrZXldLnRpcG8gPT09IFBhcmFtZXRyb1RpcG8uQk9PTEVBTikge1xyXG4gICAgICAgICAgICAgIGJvZHlba2V5XS52YWxvciA9IGJvZHlba2V5XS52YWxvciA9PT0gJ3RydWUnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gYm9keTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRQYXJhbWV0cm9zQnlOYW1lKG5hbWU6IHN0cmluZyk6IFByb21pc2U8UGFyYW1ldHJvPiB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gU0VSVkVSX0FQSV9VUkwgKyAnYXBpL3B1YmxpYy9wYXJhbWV0cm9zJyArICcvJyArIG5hbWUgKyAnLycgKyB0aGlzLm1vZHVsbztcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldCh1cmwsIHsgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyB9KS50b1Byb21pc2UoKVxyXG4gICAgICAgICAgICAudGhlbih2YWx1ZSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJhbWV0cm86IFBhcmFtZXRybyA9IHZhbHVlLmJvZHkgYXMgUGFyYW1ldHJvO1xyXG4gICAgICAgICAgICAgICAgaWYgKHBhcmFtZXRyby50aXBvID09PSBQYXJhbWV0cm9UaXBvLkNPTUJPKSB7XHJcbiAgICAgICAgICAgICAgICAgIHBhcmFtZXRyby52YWxvciA9IEpTT04ucGFyc2UocGFyYW1ldHJvLnZhbG9yKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGFyYW1ldHJvLnRpcG8gPT09IFBhcmFtZXRyb1RpcG8uQk9PTEVBTikge1xyXG4gICAgICAgICAgICAgICAgICBwYXJhbWV0cm8udmFsb3IgPSBwYXJhbWV0cm8udmFsb3IgPT09ICd0cnVlJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBwYXJhbWV0cm87XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFBhcmFtZXRyb3NDaGF2ZVZhbG9yKHBhZ2luYTogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICBjb25zdCB1cmwgPSB0aGlzLnJlc291cmNlVXJsUGFyYW1ldHJvc0NoYXZlVmFsb3IgKyAnLycgKyBwYWdpbmEgKyAnLycgKyB0aGlzLm1vZHVsbztcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwXHJcbiAgICAgICAgICAgIC5nZXQodXJsLCB7IG9ic2VydmU6ICdyZXNwb25zZScgfSlcclxuICAgICAgICAgICAgLnRvUHJvbWlzZSgpXHJcbiAgICAgICAgICAgIC50aGVuKHZhbHVlID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGJvZHkgPSB2YWx1ZS5ib2R5O1xyXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gYm9keSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChib2R5W2tleV0udGlwbyA9PT0gUGFyYW1ldHJvVGlwby5DT01CTykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBib2R5W2tleV0udmFsb3IgPSBKU09OLnBhcnNlKGJvZHlba2V5XS52YWxvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChib2R5W2tleV0udGlwbyA9PT0gUGFyYW1ldHJvVGlwby5CT09MRUFOKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvZHlba2V5XS52YWxvciA9IGJvZHlba2V5XS52YWxvciA9PT0gJ3RydWUnO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBib2R5O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzYXZlUGFyYW1ldHJvKHBhcmFtZXRybzogUGFyYW1ldHJvKTogUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICBjb25zdCBwYXJhbWV0cm9Db3B5OiBQYXJhbWV0cm8gPSB7IC4uLnBhcmFtZXRybyB9O1xyXG4gICAgICAgIHBhcmFtZXRyb0NvcHkubW9kdWxvID0gdGhpcy5tb2R1bG87XHJcbiAgICAgICAgaWYgKHBhcmFtZXRyb0NvcHkudGlwbyA9PT0gUGFyYW1ldHJvVGlwby5DT01CTykge1xyXG4gICAgICAgICAgICBwYXJhbWV0cm9Db3B5LnZhbG9yID0gSlNPTi5zdHJpbmdpZnkocGFyYW1ldHJvQ29weS52YWxvcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdCh0aGlzLnJlc291cmNlVXJsLCBwYXJhbWV0cm9Db3B5LCB7IG9ic2VydmU6ICdyZXNwb25zZScgfSkudG9Qcm9taXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlUGFyYW1ldHJvKHBhcmFtZXRybzogUGFyYW1ldHJvKTogUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICBjb25zdCBwYXJhbWV0cm9Db3B5OiBQYXJhbWV0cm8gPSB7IC4uLnBhcmFtZXRybyB9O1xyXG4gICAgICAgIHBhcmFtZXRyb0NvcHkubW9kdWxvID0gdGhpcy5tb2R1bG87XHJcbiAgICAgICAgaWYgKHBhcmFtZXRyb0NvcHkudGlwbyA9PT0gUGFyYW1ldHJvVGlwby5DT01CTykge1xyXG4gICAgICAgICAgICBwYXJhbWV0cm9Db3B5LnZhbG9yID0gSlNPTi5zdHJpbmdpZnkocGFyYW1ldHJvQ29weS52YWxvcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucHV0KHRoaXMucmVzb3VyY2VVcmwsIHBhcmFtZXRyb0NvcHksIHsgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyB9KS50b1Byb21pc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBkZWxldGVQYXJhbWV0cm8oaWQ6IG51bWJlcik6IFByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5kZWxldGUodGhpcy5yZXNvdXJjZVVybCArICcvJyArIGlkLCB7IG9ic2VydmU6ICdyZXNwb25zZScgfSkudG9Qcm9taXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0UGFyYW1ldHJvVHJpYnV0b3Mobm9tZTogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldCh0aGlzLnJlc291cmNlVXJsVHJpYnV0b3MgKyAnLycgKyBub21lLCB7IG9ic2VydmU6ICdyZXNwb25zZScgfSkudG9Qcm9taXNlKCk7XHJcbiAgICB9XHJcbn1cclxuIiwiZXhwb3J0IGNsYXNzIFBhcmFtZXRyb1Jlc3VsdCB7XHJcbiAgICBwdWJsaWMgc3VjZXNzbzogYm9vbGVhbjtcclxuICAgIHB1YmxpYyByZXRvcm5vOiBhbnk7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUGFyYW1ldHJvUmVzdWx0TGlzdGVuZXIge1xyXG4gICAgcmV0b3JubyhyZXN1bHQ6IFBhcmFtZXRyb1Jlc3VsdCk7XHJcbn1cclxuIiwiaW1wb3J0IHsgSW5qZWN0YWJsZSwgU2FuaXRpemVyLCBTZWN1cml0eUNvbnRleHQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG5pbXBvcnQgeyBKaGlDb25maWdTZXJ2aWNlIH0gZnJvbSAnbmctamhpcHN0ZXInO1xyXG5cclxuZXhwb3J0IHR5cGUgSmhpQWxlcnRUeXBlID0gJ3N1Y2Nlc3MnIHwgJ2RhbmdlcicgfCAnd2FybmluZycgfCAnaW5mbyc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFBvcmFsQWxlcnQge1xyXG4gICAgaWQ/OiBudW1iZXI7XHJcbiAgICB0eXBlOiBKaGlBbGVydFR5cGU7XHJcbiAgICBtc2c6IHN0cmluZztcclxuICAgIHBhcmFtcz86IGFueTtcclxuICAgIHRpbWVvdXQ/OiBudW1iZXI7XHJcbiAgICB0b2FzdD86IGJvb2xlYW47XHJcbiAgICBwb3NpdGlvbj86IHN0cmluZztcclxuICAgIHNjb3BlZD86IGJvb2xlYW47XHJcbiAgICBkaXNhYmxlVHJhbnNsYXRlPzogYm9vbGVhbjtcclxuICAgIGNsb3NlPzogKGFsZXJ0czogUG9yYWxBbGVydFtdKSA9PiB2b2lkO1xyXG59XHJcblxyXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxyXG5leHBvcnQgY2xhc3MgUG9ydGFsQWxlcnRTZXJ2aWNlIHtcclxuICAgIHByaXZhdGUgYWxlcnRJZDogbnVtYmVyO1xyXG4gICAgcHJpdmF0ZSBhbGVydHM6IFBvcmFsQWxlcnRbXTtcclxuICAgIHByaXZhdGUgdGltZW91dDogbnVtYmVyO1xyXG4gICAgcHJpdmF0ZSB0b2FzdDogYm9vbGVhbjtcclxuICAgIHByaXZhdGUgaTE4bkVuYWJsZWQ6IGJvb2xlYW47XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBzYW5pdGl6ZXI6IFNhbml0aXplciwgcHJpdmF0ZSBjb25maWdTZXJ2aWNlOiBKaGlDb25maWdTZXJ2aWNlLCBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UpIHtcclxuICAgICAgICBjb25zdCBjb25maWcgPSB0aGlzLmNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCk7XHJcbiAgICAgICAgdGhpcy50b2FzdCA9IGNvbmZpZy5hbGVydEFzVG9hc3Q7XHJcbiAgICAgICAgdGhpcy5pMThuRW5hYmxlZCA9IGNvbmZpZy5pMThuRW5hYmxlZDtcclxuICAgICAgICB0aGlzLmFsZXJ0SWQgPSAwO1xyXG4gICAgICAgIHRoaXMuYWxlcnRzID0gW107XHJcbiAgICAgICAgdGhpcy50aW1lb3V0ID0gY29uZmlnLmFsZXJ0VGltZW91dDtcclxuICAgIH1cclxuXHJcbiAgICBjbGVhcigpIHtcclxuICAgICAgICB0aGlzLmFsZXJ0cy5zcGxpY2UoMCwgdGhpcy5hbGVydHMubGVuZ3RoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQoKTogUG9yYWxBbGVydFtdIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5hbGVydHM7XHJcbiAgICB9XHJcblxyXG4gICAgc3VjY2Vzcyhtc2c6IHN0cmluZywgcGFyYW1zPzogYW55LCBwb3NpdGlvbj86IHN0cmluZywgZGlzYWJsZVRyYW5zbGF0ZT86IGJvb2xlYW4pOiBQb3JhbEFsZXJ0IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5hZGRBbGVydChcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogJ3N1Y2Nlc3MnLFxyXG4gICAgICAgICAgICAgICAgbXNnLFxyXG4gICAgICAgICAgICAgICAgcGFyYW1zLFxyXG4gICAgICAgICAgICAgICAgdGltZW91dDogdGhpcy50aW1lb3V0LFxyXG4gICAgICAgICAgICAgICAgdG9hc3Q6IHRoaXMuaXNUb2FzdCgpLFxyXG4gICAgICAgICAgICAgICAgcG9zaXRpb24sXHJcbiAgICAgICAgICAgICAgICBkaXNhYmxlVHJhbnNsYXRlXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIFtdXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBlcnJvcihtc2c6IHN0cmluZywgcGFyYW1zPzogYW55LCBwb3NpdGlvbj86IHN0cmluZywgZGlzYWJsZVRyYW5zbGF0ZT86IGJvb2xlYW4pOiBQb3JhbEFsZXJ0IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5hZGRBbGVydChcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogJ2RhbmdlcicsXHJcbiAgICAgICAgICAgICAgICBtc2csXHJcbiAgICAgICAgICAgICAgICBwYXJhbXMsXHJcbiAgICAgICAgICAgICAgICB0aW1lb3V0OiB0aGlzLnRpbWVvdXQsXHJcbiAgICAgICAgICAgICAgICB0b2FzdDogdGhpcy5pc1RvYXN0KCksXHJcbiAgICAgICAgICAgICAgICBwb3NpdGlvbixcclxuICAgICAgICAgICAgICAgIGRpc2FibGVUcmFuc2xhdGVcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgW11cclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHdhcm5pbmcobXNnOiBzdHJpbmcsIHBhcmFtcz86IGFueSwgcG9zaXRpb24/OiBzdHJpbmcsIGRpc2FibGVUcmFuc2xhdGU/OiBib29sZWFuKTogUG9yYWxBbGVydCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkQWxlcnQoXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJyxcclxuICAgICAgICAgICAgICAgIG1zZyxcclxuICAgICAgICAgICAgICAgIHBhcmFtcyxcclxuICAgICAgICAgICAgICAgIHRpbWVvdXQ6IHRoaXMudGltZW91dCxcclxuICAgICAgICAgICAgICAgIHRvYXN0OiB0aGlzLmlzVG9hc3QoKSxcclxuICAgICAgICAgICAgICAgIHBvc2l0aW9uLFxyXG4gICAgICAgICAgICAgICAgZGlzYWJsZVRyYW5zbGF0ZVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBbXVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaW5mbyhtc2c6IHN0cmluZywgcGFyYW1zPzogYW55LCBwb3NpdGlvbj86IHN0cmluZywgZGlzYWJsZVRyYW5zbGF0ZT86IGJvb2xlYW4pOiBQb3JhbEFsZXJ0IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5hZGRBbGVydChcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogJ2luZm8nLFxyXG4gICAgICAgICAgICAgICAgbXNnLFxyXG4gICAgICAgICAgICAgICAgcGFyYW1zLFxyXG4gICAgICAgICAgICAgICAgdGltZW91dDogdGhpcy50aW1lb3V0LFxyXG4gICAgICAgICAgICAgICAgdG9hc3Q6IHRoaXMuaXNUb2FzdCgpLFxyXG4gICAgICAgICAgICAgICAgcG9zaXRpb24sXHJcbiAgICAgICAgICAgICAgICBkaXNhYmxlVHJhbnNsYXRlXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIFtdXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRBbGVydChhbGVydE9wdGlvbnM6IFBvcmFsQWxlcnQsIGV4dEFsZXJ0czogUG9yYWxBbGVydFtdKTogUG9yYWxBbGVydCB7XHJcbiAgICAgICAgYWxlcnRPcHRpb25zLmlkID0gdGhpcy5hbGVydElkKys7XHJcblxyXG4gICAgICAgIGlmICghYWxlcnRPcHRpb25zLmRpc2FibGVUcmFuc2xhdGUgJiYgdGhpcy5pMThuRW5hYmxlZCAmJiBhbGVydE9wdGlvbnMubXNnKSB7XHJcbiAgICAgICAgICAgIGFsZXJ0T3B0aW9ucy5tc2cgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChhbGVydE9wdGlvbnMubXNnLCBhbGVydE9wdGlvbnMucGFyYW1zKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGFsZXJ0ID0gdGhpcy5mYWN0b3J5KGFsZXJ0T3B0aW9ucyk7XHJcbiAgICAgICAgaWYgKGFsZXJ0T3B0aW9ucy50aW1lb3V0ICYmIGFsZXJ0T3B0aW9ucy50aW1lb3V0ID4gMCkge1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2xvc2VBbGVydChhbGVydE9wdGlvbnMuaWQsIGV4dEFsZXJ0cyk7XHJcbiAgICAgICAgICAgIH0sIGFsZXJ0T3B0aW9ucy50aW1lb3V0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGFsZXJ0O1xyXG4gICAgfVxyXG5cclxuICAgIGNsb3NlQWxlcnQoaWQ6IG51bWJlciwgZXh0QWxlcnRzPzogUG9yYWxBbGVydFtdKTogYW55IHtcclxuICAgICAgICBjb25zdCB0aGlzQWxlcnRzOiBQb3JhbEFsZXJ0W10gPSBleHRBbGVydHMgJiYgZXh0QWxlcnRzLmxlbmd0aCA+IDAgPyBleHRBbGVydHMgOiB0aGlzLmFsZXJ0cztcclxuICAgICAgICByZXR1cm4gdGhpcy5jbG9zZUFsZXJ0QnlJbmRleCh0aGlzQWxlcnRzLm1hcChlID0+IGUuaWQpLmluZGV4T2YoaWQpLCB0aGlzQWxlcnRzKTtcclxuICAgIH1cclxuXHJcbiAgICBjbG9zZUFsZXJ0QnlJbmRleChpbmRleDogbnVtYmVyLCB0aGlzQWxlcnRzOiBQb3JhbEFsZXJ0W10pOiBQb3JhbEFsZXJ0W10ge1xyXG4gICAgICAgIHJldHVybiB0aGlzQWxlcnRzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICB9XHJcblxyXG4gICAgaXNUb2FzdCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy50b2FzdDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGZhY3RvcnkoYWxlcnRPcHRpb25zOiBQb3JhbEFsZXJ0KTogUG9yYWxBbGVydCB7XHJcbiAgICAgICAgY29uc3QgYWxlcnQ6IFBvcmFsQWxlcnQgPSB7XHJcbiAgICAgICAgICAgIHR5cGU6IGFsZXJ0T3B0aW9ucy50eXBlLFxyXG4gICAgICAgICAgICBtc2c6IHRoaXMuc2FuaXRpemVyLnNhbml0aXplKFNlY3VyaXR5Q29udGV4dC5IVE1MLCBhbGVydE9wdGlvbnMubXNnKSxcclxuICAgICAgICAgICAgaWQ6IGFsZXJ0T3B0aW9ucy5pZCxcclxuICAgICAgICAgICAgdGltZW91dDogYWxlcnRPcHRpb25zLnRpbWVvdXQsXHJcbiAgICAgICAgICAgIHRvYXN0OiBhbGVydE9wdGlvbnMudG9hc3QsXHJcbiAgICAgICAgICAgIHBvc2l0aW9uOiBhbGVydE9wdGlvbnMucG9zaXRpb24gPyBhbGVydE9wdGlvbnMucG9zaXRpb24gOiAndG9wIHJpZ2h0JyxcclxuICAgICAgICAgICAgc2NvcGVkOiBhbGVydE9wdGlvbnMuc2NvcGVkLFxyXG4gICAgICAgICAgICBjbG9zZTogKGFsZXJ0czogUG9yYWxBbGVydFtdKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jbG9zZUFsZXJ0KGFsZXJ0T3B0aW9ucy5pZCwgYWxlcnRzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgaWYgKCFhbGVydC5zY29wZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5hbGVydHMucHVzaChhbGVydCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhbGVydDtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgU3dhbCBmcm9tICdzd2VldGFsZXJ0Mic7XHJcbmltcG9ydCB7UG9ydGFsQWxlcnRTZXJ2aWNlfSBmcm9tICcuLi9hbGVydC9wb3J0YWwtYWxlcnQuc2VydmljZSc7XHJcbmltcG9ydCB7VXRpbEZ1bmN0aW9uc30gZnJvbSAnLi4vdXRpbC91dGlsLWZ1bmN0aW9ucyc7XHJcblxyXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxyXG5leHBvcnQgY2xhc3MgVXRpbE1lbnNhZ2VtIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgcHJpdmF0ZSBhbGVydFNlcnZpY2U6IFBvcnRhbEFsZXJ0U2VydmljZVxyXG4gICAgKSB7fVxyXG5cclxuICAgIHNob3dFcnJvcih2YWx1ZSkge1xyXG4gICAgICAgIGxldCBlcnJvck1lc3NhZ2U7XHJcbiAgICAgICAgaWYgKHZhbHVlLmVycm9yICYmIHZhbHVlLmVycm9yLmZpZWxkRXJyb3JzKSB7XHJcbiAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IHZhbHVlLmVycm9yLmZpZWxkRXJyb3JzWzBdLm1lc3NhZ2U7XHJcbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS5tZXNzYWdlICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gdmFsdWUubWVzc2FnZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGVycm9yTWVzc2FnZSA9PT0gbnVsbCB8fCBlcnJvck1lc3NhZ2UgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSAnRXJybyBkZXNjb25oZWNpZG8nO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNob3dNZW5zYWdlbUVycm9yKGVycm9yTWVzc2FnZSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2hvd0Vycm9yRGV0YWlsZWQodmFsdWUpIHtcclxuICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBVdGlsRnVuY3Rpb25zLmdldEh0dHBFcnJvck1lc3NhZ2UodmFsdWUpO1xyXG4gICAgICAgIHRoaXMuc2hvd01lbnNhZ2VtRXJyb3IoZXJyb3JNZXNzYWdlKTtcclxuICAgIH1cclxuXHJcbiAgICBzaG93QWxlcnREZXRhaWxlZCh2YWx1ZSkge1xyXG4gICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IFV0aWxGdW5jdGlvbnMuZ2V0SHR0cEVycm9yTWVzc2FnZSh2YWx1ZSk7XHJcbiAgICAgICAgU3dhbC5maXJlKHtcclxuICAgICAgICAgICAgdGl0bGU6ICcnLFxyXG4gICAgICAgICAgICB0eXBlOiAnd2FybmluZycsXHJcbiAgICAgICAgICAgIHNob3dDbG9zZUJ1dHRvbjogdHJ1ZSxcclxuICAgICAgICAgICAgdGV4dDogZXJyb3JNZXNzYWdlXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2hvd0Vycm9yU3dhbChtZW5zc2FnZSkge1xyXG4gICAgICBTd2FsLmZpcmUoe1xyXG4gICAgICAgIHRpdGxlOiAnJyxcclxuICAgICAgICB0eXBlOiAnZXJyb3InLFxyXG4gICAgICAgIHNob3dDbG9zZUJ1dHRvbjogdHJ1ZSxcclxuICAgICAgICB0ZXh0OiBtZW5zc2FnZVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzaG93TWVuc2FnZW1FcnJvcihlcnJvck1lc3NhZ2U6IGFueSkge1xyXG4gICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmNsZWFyKCk7XHJcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoZXJyb3JNZXNzYWdlLCBudWxsLCBudWxsLCB0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICBzaG93V2FybmluZyh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmNsZWFyKCk7XHJcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2Uud2FybmluZyh2YWx1ZSwgbnVsbCwgbnVsbCwgdHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2hvd1N1Y2Nlc3ModmFsdWUpIHtcclxuICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5jbGVhcigpO1xyXG4gICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnN1Y2Nlc3ModmFsdWUsIG51bGwsIG51bGwsIHRydWUpO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7Q29tcG9uZW50LCBFbGVtZW50UmVmLCBWaWV3Q2hpbGR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge05nYkFjdGl2ZU1vZGFsfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcbmltcG9ydCB7UGFyYW1ldHJvLCBQYXJhbWV0cm9UaXBvfSBmcm9tICcuLi8uLi9tb2RlbC9wYXJhbWV0cm8ubW9kZWwnO1xyXG5pbXBvcnQge1BhcmFtZXRyb3NTZXJ2aWNlfSBmcm9tICcuL3BhcmFtZXRyb3Muc2VydmljZSc7XHJcbmltcG9ydCB7UGFyYW1ldHJvUmVzdWx0LCBQYXJhbWV0cm9SZXN1bHRMaXN0ZW5lcn0gZnJvbSAnLi9wYXJhbWV0cm8ucmVzdWx0JztcclxuaW1wb3J0IHtVdGlsTWVuc2FnZW19IGZyb20gJy4uLy4uL2FsZXJ0L3V0aWwtbWVuc2FnZW0nO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2poaS1wYXJhbWV0cm9zLWVkaXQtbW9kYWwnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL3BhcmFtZXRyb3MuZWRpdC5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFBhcmFtZXRyb3NFZGl0Q29tcG9uZW50IHtcclxuXHJcbiAgICBAVmlld0NoaWxkKCdub21lJylcclxuICAgIG5vbWU6IEVsZW1lbnRSZWY7XHJcblxyXG4gICAgdGl0bGU6IHN0cmluZztcclxuICAgIHBhcmFtZXRybzogUGFyYW1ldHJvO1xyXG4gICAgcGFyYW1ldHJvQmFja3VwOiBQYXJhbWV0cm87XHJcbiAgICBwYXJhbWV0cm9FbXVtID0gUGFyYW1ldHJvVGlwbztcclxuICAgIHJldDogUGFyYW1ldHJvUmVzdWx0O1xyXG4gICAgbGlzdGVuZXI6IFBhcmFtZXRyb1Jlc3VsdExpc3RlbmVyO1xyXG4gICAgYnVzeTogYm9vbGVhbjtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwdWJsaWMgYWN0aXZlTW9kYWw6IE5nYkFjdGl2ZU1vZGFsLFxyXG4gICAgICAgIHByaXZhdGUgc2VydmljZTogUGFyYW1ldHJvc1NlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSB1dGlsTWVuc2FnZW06IFV0aWxNZW5zYWdlbVxyXG4gICAgKSB7XHJcbiAgICAgICAgdGhpcy5wYXJhbWV0cm8gPSBuZXcgUGFyYW1ldHJvKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGluaXQodGl0bGU6IHN0cmluZywgcGFyYW06IFBhcmFtZXRybykge1xyXG4gICAgICAgIHRoaXMudGl0bGUgPSB0aXRsZTtcclxuICAgICAgICB0aGlzLnBhcmFtZXRyb0JhY2t1cCA9IHBhcmFtO1xyXG4gICAgICAgIHRoaXMucGFyYW1ldHJvID0geyAuLi50aGlzLnBhcmFtZXRyb0JhY2t1cCB9O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXRMaXN0ZW5lcihwYXJlbnQ6IFBhcmFtZXRyb1Jlc3VsdExpc3RlbmVyKSB7XHJcbiAgICAgICAgdGhpcy5saXN0ZW5lciA9IHBhcmVudDtcclxuICAgIH1cclxuXHJcbiAgICBpc1ZhbG9yQXJyYXlWYWxpZG8oKSB7XHJcbiAgICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodGhpcy5wYXJhbWV0cm8udmFsb3IpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbW92ZUl0ZW0oaXRlbTogYW55KSB7XHJcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLnBhcmFtZXRyby52YWxvci5pbmRleE9mKGl0ZW0pO1xyXG4gICAgICAgIHRoaXMucGFyYW1ldHJvLnZhbG9yLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICB9XHJcblxyXG4gICAgYWRpY2lvbmFJdGVtKCkge1xyXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh0aGlzLnBhcmFtZXRyby52YWxvcikpIHtcclxuICAgICAgICAgICAgdGhpcy5wYXJhbWV0cm8udmFsb3IgPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5wYXJhbWV0cm8udmFsb3IucHVzaCh7IHZhbG9yOiAnJywgdGV4dG86ICcnIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNoYW5nZVRpcG8oKSB7XHJcbiAgICAgICAgaWYgKHRoaXMucGFyYW1ldHJvLnRpcG8gPT09IHRoaXMucGFyYW1ldHJvRW11bS5DT01CTykge1xyXG4gICAgICAgICAgICB0aGlzLnBhcmFtZXRyby52YWxvciA9IHVuZGVmaW5lZDtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMucGFyYW1ldHJvLnRpcG8gPT09IHRoaXMucGFyYW1ldHJvRW11bS5TVFJJTkcpIHtcclxuICAgICAgICAgICAgdGhpcy5wYXJhbWV0cm8udmFsb3IgPSAnJztcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMucGFyYW1ldHJvLnRpcG8gPT09IHRoaXMucGFyYW1ldHJvRW11bS5CT09MRUFOKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGFyYW1ldHJvLnZhbG9yID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY2hhbmdlTG9jYWwoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMucGFyYW1ldHJvLmxvY2FsID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICB0aGlzLnBhcmFtZXRyby50aXBvID0gUGFyYW1ldHJvVGlwby5TVFJJTkc7XHJcbiAgICAgICAgICAgIHRoaXMucGFyYW1ldHJvLnZhbG9yID0gJyc7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHNhdmUoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMubGlzdGVuZXIgIT09IHVuZGVmaW5lZCAmJiB0aGlzLmxpc3RlbmVyICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmV0ID0gbmV3IFBhcmFtZXRyb1Jlc3VsdCgpO1xyXG4gICAgICAgICAgICB0aGlzLnJldC5zdWNlc3NvID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5wYXJhbWV0cm9CYWNrdXAudGlwbyA9IHRoaXMucGFyYW1ldHJvLnRpcG87XHJcbiAgICAgICAgICAgIHRoaXMucGFyYW1ldHJvQmFja3VwLmxvY2FsID0gdGhpcy5wYXJhbWV0cm8ubG9jYWw7XHJcbiAgICAgICAgICAgIHRoaXMucGFyYW1ldHJvQmFja3VwLm5vbWUgPSB0aGlzLnBhcmFtZXRyby5ub21lO1xyXG4gICAgICAgICAgICB0aGlzLnBhcmFtZXRyb0JhY2t1cC5kZXNjcmljYW8gPSB0aGlzLnBhcmFtZXRyby5kZXNjcmljYW87XHJcbiAgICAgICAgICAgIHRoaXMucGFyYW1ldHJvQmFja3VwLnZhbG9yID0gdGhpcy5wYXJhbWV0cm8udmFsb3I7XHJcbiAgICAgICAgICAgIHRoaXMucmV0LnJldG9ybm8gPSB0aGlzLnBhcmFtZXRyb0JhY2t1cDtcclxuICAgICAgICAgICAgdGhpcy5saXN0ZW5lci5yZXRvcm5vKHRoaXMucmV0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5hY3RpdmVNb2RhbC5kaXNtaXNzKCdzYXZlJyk7XHJcbiAgICB9XHJcblxyXG4gICAgYWRpY2lvbmFQYXJhbWV0cm9UcmlidXRvcygpIHtcclxuICAgICAgICB0aGlzLnNldEJ1c3kodHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5zZXJ2aWNlXHJcbiAgICAgICAgICAgIC5nZXRQYXJhbWV0cm9UcmlidXRvcyh0aGlzLnBhcmFtZXRyby5ub21lKVxyXG4gICAgICAgICAgICAudGhlbih2YWx1ZSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldEJ1c3koZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlLmJvZHkuc3VjZXNzbykge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnBhcmFtZXRyby52YWxvciA9IHZhbHVlLmJvZHkudmFsb3I7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnV0aWxNZW5zYWdlbS5zaG93TWVuc2FnZW1FcnJvcih2YWx1ZS5ib2R5LmVycm8pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuY2F0Y2godmFsdWUgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRCdXN5KGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2hvd0Vycm9yKHZhbHVlKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0QnVzeShidXN5OiBib29sZWFuKSB7XHJcbiAgICAgICAgdGhpcy5idXN5ID0gYnVzeTtcclxuICAgIH1cclxuXHJcbiAgICBzaG93RXJyb3IodmFsdWU6IGFueSkge1xyXG4gICAgICAgIHRoaXMudXRpbE1lbnNhZ2VtLnNob3dFcnJvckRldGFpbGVkKHZhbHVlKTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge0NvbXBvbmVudH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7TmdiQWN0aXZlTW9kYWwsIE5nYk1vZGFsfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcbmltcG9ydCB7UGFyYW1ldHJvLCBQYXJhbWV0cm9UaXBvfSBmcm9tICcuLi8uLi9tb2RlbC9wYXJhbWV0cm8ubW9kZWwnO1xyXG5pbXBvcnQge0RpYWxvZ0xpc3RlbmVyLCBEaWFsb2dSZXN1bHR9IGZyb20gJy4uL21vZGFsLWRpYWxvZyc7XHJcbmltcG9ydCB7UGFyYW1ldHJvc1NlcnZpY2V9IGZyb20gJy4vcGFyYW1ldHJvcy5zZXJ2aWNlJztcclxuaW1wb3J0IHtQYXJhbWV0cm9zRWRpdENvbXBvbmVudH0gZnJvbSAnLi9wYXJhbWV0cm9zLmVkaXQuY29tcG9uZW50JztcclxuaW1wb3J0IHtQYXJhbWV0cm9SZXN1bHQsIFBhcmFtZXRyb1Jlc3VsdExpc3RlbmVyfSBmcm9tICcuL3BhcmFtZXRyby5yZXN1bHQnO1xyXG5pbXBvcnQge1V0aWxNZW5zYWdlbX0gZnJvbSAnLi4vLi4vYWxlcnQvdXRpbC1tZW5zYWdlbSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnamhpLXBhcmFtZXRyb3MtbW9kYWwnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL3BhcmFtZXRyb3MuY29tcG9uZW50Lmh0bWwnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQYXJhbWV0cm9zQ29tcG9uZW50IGltcGxlbWVudHMgUGFyYW1ldHJvUmVzdWx0TGlzdGVuZXIsIERpYWxvZ0xpc3RlbmVyIHtcclxuICAgIHB1YmxpYyBwYXJhbWV0cm9FbXVtID0gUGFyYW1ldHJvVGlwbztcclxuICAgIHB1YmxpYyBwYWdpbmE6IHN0cmluZztcclxuICAgIHB1YmxpYyB0aXRsZTogc3RyaW5nO1xyXG4gICAgcHVibGljIHBhcmFtZXRyb3M6IEFycmF5PFBhcmFtZXRybz47XHJcbiAgICBwdWJsaWMgcmV0OiBQYXJhbWV0cm9SZXN1bHQ7XHJcbiAgICBwdWJsaWMgbGlzdGVuZXI6IFBhcmFtZXRyb1Jlc3VsdExpc3RlbmVyO1xyXG4gICAgcHVibGljIGJ1c3k6IGJvb2xlYW47XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBhY3RpdmVNb2RhbDogTmdiQWN0aXZlTW9kYWwsXHJcbiAgICAgICAgcHJpdmF0ZSBzZXJ2aWNlOiBQYXJhbWV0cm9zU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIG1vZGFsU2VydmljZTogTmdiTW9kYWwsXHJcbiAgICAgICAgcHJpdmF0ZSB1dGlsTWVuc2FnZW06IFV0aWxNZW5zYWdlbVxyXG4gICAgKSB7XHJcbiAgICAgICAgdGhpcy5wYXJhbWV0cm9zID0gW107XHJcbiAgICAgICAgdGhpcy5saXN0ZW5lciA9IHVuZGVmaW5lZDtcclxuICAgICAgICB0aGlzLnNldEJ1c3koZmFsc2UpO1xyXG4gICAgfVxyXG5cclxuICAgIGZpbmlzaCgpIHtcclxuICAgICAgICBpZiAodGhpcy5saXN0ZW5lciAhPT0gdW5kZWZpbmVkICYmIHRoaXMubGlzdGVuZXIgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy5yZXQgPSBuZXcgUGFyYW1ldHJvUmVzdWx0KCk7XHJcbiAgICAgICAgICAgIHRoaXMucmV0LnN1Y2Vzc28gPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLnJldC5yZXRvcm5vID0gdGhpcy5wYXJhbWV0cm9zO1xyXG4gICAgICAgICAgICB0aGlzLmxpc3RlbmVyLnJldG9ybm8odGhpcy5yZXQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmFjdGl2ZU1vZGFsLmRpc21pc3MoJ2ZpbmlzaCcpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXRMaXN0ZW5lcihwYXJlbnQ6IFBhcmFtZXRyb1Jlc3VsdExpc3RlbmVyKSB7XHJcbiAgICAgICAgdGhpcy5saXN0ZW5lciA9IHBhcmVudDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaW5pdCh0aXRsZTogc3RyaW5nLCBwYWdpbmE6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMudGl0bGUgPSB0aXRsZTtcclxuICAgICAgICB0aGlzLnBhZ2luYSA9IHBhZ2luYTtcclxuICAgICAgICB0aGlzLmdldFBhcmFtZXRlcnMoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRQYXJhbWV0ZXJzKCkge1xyXG4gICAgICAgIHRoaXMuc2V0QnVzeSh0cnVlKTtcclxuICAgICAgICB0aGlzLnNlcnZpY2VcclxuICAgICAgICAgICAgLmdldFBhcmFtZXRyb3NUb0VkaXQodGhpcy5wYWdpbmEpXHJcbiAgICAgICAgICAgIC50aGVuKHZhbHVlID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0QnVzeShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBhcmFtZXRyb3MgPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMucGFyYW1ldHJvcy5zb3J0KChhLCBiKSA9PiBhLm5vbWUubG9jYWxlQ29tcGFyZShiLm5vbWUpKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmNhdGNoKHZhbHVlID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0QnVzeShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dFcnJvcih2YWx1ZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGVkaXRQYXJhbWV0ZXIocGFyYW1ldHJvOiBQYXJhbWV0cm8pIHtcclxuICAgICAgICBjb25zdCBjb250ZW50Q29tcG9uZW50SW5zdGFuY2U6IFBhcmFtZXRyb3NFZGl0Q29tcG9uZW50ID0gdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihQYXJhbWV0cm9zRWRpdENvbXBvbmVudCwge1xyXG4gICAgICAgICAgICBzaXplOiAnbGcnLFxyXG4gICAgICAgICAgICBiYWNrZHJvcDogJ3N0YXRpYydcclxuICAgICAgICB9KS5jb21wb25lbnRJbnN0YW5jZTtcclxuICAgICAgICBjb250ZW50Q29tcG9uZW50SW5zdGFuY2UuaW5pdCgnRWRpw4PCp8ODwqNvIGRlIFBhcsODwqJtZXRybycsIHBhcmFtZXRybyk7XHJcbiAgICAgICAgY29udGVudENvbXBvbmVudEluc3RhbmNlLnNldExpc3RlbmVyKHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZFBhcmFtZXRlcigpIHtcclxuICAgICAgICBjb25zdCBjb250ZW50Q29tcG9uZW50SW5zdGFuY2U6IFBhcmFtZXRyb3NFZGl0Q29tcG9uZW50ID0gdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihQYXJhbWV0cm9zRWRpdENvbXBvbmVudCwge1xyXG4gICAgICAgICAgICBzaXplOiAnbGcnLFxyXG4gICAgICAgICAgICBiYWNrZHJvcDogJ3N0YXRpYydcclxuICAgICAgICB9KS5jb21wb25lbnRJbnN0YW5jZTtcclxuICAgICAgICBjb25zdCBwYXJhbSA9IG5ldyBQYXJhbWV0cm8oKTtcclxuICAgICAgICBwYXJhbS5sb2NhbCA9IHRydWU7XHJcbiAgICAgICAgcGFyYW0udGVsYSA9IHRoaXMucGFnaW5hO1xyXG4gICAgICAgIHBhcmFtLnRpcG8gPSBQYXJhbWV0cm9UaXBvLlNUUklORztcclxuICAgICAgICBwYXJhbS52YWxvciA9ICcnO1xyXG4gICAgICAgIHBhcmFtLm5vbWUgPSAnJztcclxuICAgICAgICBwYXJhbS5kZXNjcmljYW8gPSAnJztcclxuICAgICAgICBjb250ZW50Q29tcG9uZW50SW5zdGFuY2UuaW5pdCgnQWRpw4PCp8ODwqNvIGRlIFBhcsODwqJtZXRybycsIHBhcmFtKTtcclxuICAgICAgICBjb250ZW50Q29tcG9uZW50SW5zdGFuY2Uuc2V0TGlzdGVuZXIodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgc2F2ZVBhcmFtZXRlcihwYXJhbWV0cm86IFBhcmFtZXRybykge1xyXG4gICAgICAgIHRoaXMuc2V0QnVzeSh0cnVlKTtcclxuICAgICAgICB0aGlzLnNlcnZpY2VcclxuICAgICAgICAgICAgLnNhdmVQYXJhbWV0cm8ocGFyYW1ldHJvKVxyXG4gICAgICAgICAgICAudGhlbih2YWx1ZSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldEJ1c3koZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gdmFsdWUuYm9keTtcclxuICAgICAgICAgICAgICAgIHBhcmFtZXRyby5pZCA9IHJlc3VsdC5pZDtcclxuICAgICAgICAgICAgICAgIHRoaXMucGFyYW1ldHJvcy5wdXNoKHBhcmFtZXRybyk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5jYXRjaCh2YWx1ZSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldEJ1c3koZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zaG93RXJyb3IodmFsdWUpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKmRlbGV0ZVBhcmFtZXRlcihwYXJhbWV0cm86IFBhcmFtZXRybykge1xyXG4gICAgICAgIGxldCBjb250ZW50Q29tcG9uZW50SW5zdGFuY2U6IE1vZGFsRGlhbG9nQ29tcG9uZW50O1xyXG4gICAgICAgIGNvbnRlbnRDb21wb25lbnRJbnN0YW5jZSA9IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oTW9kYWxEaWFsb2dDb21wb25lbnQsIHsgYmFja2Ryb3A6ICdzdGF0aWMnIH0pLmNvbXBvbmVudEluc3RhbmNlO1xyXG4gICAgICAgIGNvbnRlbnRDb21wb25lbnRJbnN0YW5jZS5zZXRMaXN0ZW5lcih0aGlzKTtcclxuICAgICAgICBjb250ZW50Q29tcG9uZW50SW5zdGFuY2UuaW5pdChwYXJhbWV0cm8sICdDb25maXJtYcODwqfDg8KjbycsICdEZXNlamEgcmVhbG1lbnRlIGFwYWdhciBlc3NlIHBhcsODwqJtZXRybz8nLCAnJywgRGlhbG9nVHlwZS5RVUVTVElPTik7XHJcbiAgICB9Ki9cclxuXHJcbiAgICB1cGRhdGVQYXJhbWV0ZXIocGFyYW1ldHJvOiBQYXJhbWV0cm8pIHtcclxuICAgICAgICB0aGlzLnNldEJ1c3kodHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5zZXJ2aWNlXHJcbiAgICAgICAgICAgIC51cGRhdGVQYXJhbWV0cm8ocGFyYW1ldHJvKVxyXG4gICAgICAgICAgICAudGhlbih2YWx1ZSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldEJ1c3koZmFsc2UpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuY2F0Y2godmFsdWUgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRCdXN5KGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2hvd0Vycm9yKHZhbHVlKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZGlhbG9nUmV0dXJuZWQocmVzdWx0OiBEaWFsb2dSZXN1bHQsIHBhcmFtOiBhbnkpIHtcclxuICAgICAgICBpZiAocmVzdWx0ID09PSBEaWFsb2dSZXN1bHQuWUVTKSB7XHJcbiAgICAgICAgICAgIGxldCBwYXJhbWV0cm86IFBhcmFtZXRybztcclxuICAgICAgICAgICAgcGFyYW1ldHJvID0gcGFyYW07XHJcbiAgICAgICAgICAgIGlmIChwYXJhbWV0cm8uaWQgPT09IHVuZGVmaW5lZCB8fCBwYXJhbWV0cm8uaWQgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5wYXJhbWV0cm9zLmluZGV4T2YocGFyYW1ldHJvKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucGFyYW1ldHJvcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuc2V0QnVzeSh0cnVlKTtcclxuICAgICAgICAgICAgdGhpcy5zZXJ2aWNlXHJcbiAgICAgICAgICAgICAgICAuZGVsZXRlUGFyYW1ldHJvKHBhcmFtZXRyby5pZClcclxuICAgICAgICAgICAgICAgIC50aGVuKHZhbHVlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEJ1c3koZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5wYXJhbWV0cm9zLmluZGV4T2YocGFyYW1ldHJvKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcmFtZXRyb3Muc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAuY2F0Y2godmFsdWUgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QnVzeShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93RXJyb3IodmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHNldEJ1c3koYnVzeTogYm9vbGVhbikge1xyXG4gICAgICAgIHRoaXMuYnVzeSA9IGJ1c3k7XHJcbiAgICB9XHJcblxyXG4gICAgc2hvd0Vycm9yKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLnV0aWxNZW5zYWdlbS5zaG93RXJyb3JEZXRhaWxlZCh2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0b3JubyhyZXN1bHQ6IFBhcmFtZXRyb1Jlc3VsdCkge1xyXG4gICAgICAgIGlmIChyZXN1bHQuc3VjZXNzbyA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICBpZiAocmVzdWx0LnJldG9ybm8uaWQgIT09IHVuZGVmaW5lZCAmJiByZXN1bHQucmV0b3Juby5pZCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVBhcmFtZXRlcihyZXN1bHQucmV0b3Jubyk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNhdmVQYXJhbWV0ZXIocmVzdWx0LnJldG9ybm8pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7IENvbXBvbmVudCwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUG9ydGFsQWxlcnRTZXJ2aWNlIH0gZnJvbSAnLi9wb3J0YWwtYWxlcnQuc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnamhpLWFsZXJ0JyxcclxuICAgIHRlbXBsYXRlOiBgXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImFsZXJ0c1wiIHJvbGU9XCJhbGVydFwiPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBhbGVydCBvZiBhbGVydHNcIiBbbmdDbGFzc109XCJzZXRDbGFzc2VzKGFsZXJ0KVwiPlxyXG4gICAgICAgICAgICAgICAgPG5nYi1hbGVydCAqbmdJZj1cImFsZXJ0ICYmIGFsZXJ0LnR5cGUgJiYgYWxlcnQubXNnXCIgW3R5cGVdPVwiYWxlcnQudHlwZVwiIChjbG9zZSk9XCJhbGVydC5jbG9zZShhbGVydHMpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gW2lubmVySFRNTF09XCJhbGVydC5tc2dcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L25nYi1hbGVydD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+YFxyXG59KVxyXG5leHBvcnQgY2xhc3MgSmhpQWxlcnRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgICBhbGVydHM6IGFueVtdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgYWxlcnRTZXJ2aWNlOiBQb3J0YWxBbGVydFNlcnZpY2UpIHt9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5hbGVydHMgPSB0aGlzLmFsZXJ0U2VydmljZS5nZXQoKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRDbGFzc2VzKGFsZXJ0KSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdG9hc3Q6ICEhYWxlcnQudG9hc3QsXHJcbiAgICAgICAgICAgIFthbGVydC5wb3NpdGlvbl06IHRydWVcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25EZXN0cm95KCkge1xyXG4gICAgICAgIHRoaXMuYWxlcnRzID0gW107XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG5pbXBvcnQgeyBKaGlFdmVudE1hbmFnZXIgfSBmcm9tICduZy1qaGlwc3Rlcic7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBQb3J0YWxBbGVydFNlcnZpY2UgfSBmcm9tICcuL3BvcnRhbC1hbGVydC5zZXJ2aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdqaGktYWxlcnQtZXJyb3InLFxyXG4gICAgdGVtcGxhdGU6IGBcclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYWxlcnRzXCIgcm9sZT1cImFsZXJ0XCI+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGFsZXJ0IG9mIGFsZXJ0c1wiIFtuZ0NsYXNzXT1cInNldENsYXNzZXMoYWxlcnQpXCI+XHJcbiAgICAgICAgICAgICAgICA8bmdiLWFsZXJ0ICpuZ0lmPVwiYWxlcnQgJiYgYWxlcnQudHlwZSAmJiBhbGVydC5tc2dcIiBbdHlwZV09XCJhbGVydC50eXBlXCIgKGNsb3NlKT1cImFsZXJ0LmNsb3NlKGFsZXJ0cylcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cHJlIFtpbm5lckhUTUxdPVwiYWxlcnQubXNnXCI+PC9wcmU+XHJcbiAgICAgICAgICAgICAgICA8L25nYi1hbGVydD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+YFxyXG59KVxyXG5leHBvcnQgY2xhc3MgSmhpQWxlcnRFcnJvckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XHJcbiAgICBhbGVydHM6IGFueVtdO1xyXG4gICAgY2xlYW5IdHRwRXJyb3JMaXN0ZW5lcjogU3Vic2NyaXB0aW9uO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgYWxlcnRTZXJ2aWNlOiBQb3J0YWxBbGVydFNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBldmVudE1hbmFnZXI6IEpoaUV2ZW50TWFuYWdlcixcclxuICAgICAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2VcclxuICAgICkge1xyXG5cclxuICAgICAgICB0aGlzLmFsZXJ0cyA9IFtdO1xyXG5cclxuICAgICAgICB0aGlzLmNsZWFuSHR0cEVycm9yTGlzdGVuZXIgPSBldmVudE1hbmFnZXIuc3Vic2NyaWJlKCdwb3J0YWxHYXRld2F5QXBwLmh0dHBFcnJvcicsIHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgbGV0IGk7XHJcbiAgICAgICAgICAgIGNvbnN0IGh0dHBFcnJvclJlc3BvbnNlID0gcmVzcG9uc2UuY29udGVudDtcclxuICAgICAgICAgICAgc3dpdGNoIChodHRwRXJyb3JSZXNwb25zZS5zdGF0dXMpIHtcclxuICAgICAgICAgICAgICAgIC8vIGNvbm5lY3Rpb24gcmVmdXNlZCwgc2VydmVyIG5vdCByZWFjaGFibGVcclxuICAgICAgICAgICAgICAgIGNhc2UgMDpcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZEVycm9yQWxlcnQoJ1NlcnZlciBub3QgcmVhY2hhYmxlJywgJ2Vycm9yLnNlcnZlci5ub3QucmVhY2hhYmxlJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSA0MDA6XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYXJyID0gaHR0cEVycm9yUmVzcG9uc2UuaGVhZGVycy5rZXlzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGVycm9ySGVhZGVyID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZW50aXR5S2V5ID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICBhcnIuZm9yRWFjaChlbnRyeSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbnRyeS50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKCdhcHAtZXJyb3InKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JIZWFkZXIgPSBodHRwRXJyb3JSZXNwb25zZS5oZWFkZXJzLmdldChlbnRyeSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZW50cnkudG9Mb3dlckNhc2UoKS5lbmRzV2l0aCgnYXBwLXBhcmFtcycpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHlLZXkgPSBodHRwRXJyb3JSZXNwb25zZS5oZWFkZXJzLmdldChlbnRyeSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3JIZWFkZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW50aXR5TmFtZSA9IHRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnZ2xvYmFsLm1lbnUuZW50aXRpZXMuJyArIGVudGl0eUtleSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkRXJyb3JBbGVydChlcnJvckhlYWRlciwgZXJyb3JIZWFkZXIsIHsgZW50aXR5TmFtZSB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGh0dHBFcnJvclJlc3BvbnNlLmVycm9yICE9PSAnJyAmJiBodHRwRXJyb3JSZXNwb25zZS5lcnJvci5maWVsZEVycm9ycykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmaWVsZEVycm9ycyA9IGh0dHBFcnJvclJlc3BvbnNlLmVycm9yLmZpZWxkRXJyb3JzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZmllbGRFcnJvcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkRXJyb3IgPSBmaWVsZEVycm9yc1tpXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsaXN0OiBBcnJheTxzdHJpbmc+ID0gWydNaW4nLCAnTWF4JywgJ0RlY2ltYWxNaW4nLCAnRGVjaW1hbE1heCddO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsaXN0LmluY2x1ZGVzKGZpZWxkRXJyb3IubWVzc2FnZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZEVycm9yLm1lc3NhZ2UgPSAnU2l6ZSc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb252ZXJ0ICdzb21ldGhpbmdbMTRdLm90aGVyWzRdLmlkJyB0byAnc29tZXRoaW5nW10ub3RoZXJbXS5pZCcgc28gdHJhbnNsYXRpb25zIGNhbiBiZSB3cml0dGVuIHRvIGl0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb252ZXJ0ZWRGaWVsZCA9IGZpZWxkRXJyb3IuZmllbGQucmVwbGFjZSgvXFxbXFxkKlxcXS9nLCAnW10nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkTmFtZSA9IHRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgncG9ydGFsR2F0ZXdheUFwcC4nICsgZmllbGRFcnJvci5vYmplY3ROYW1lICsgJy4nICsgY29udmVydGVkRmllbGQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRFcnJvckFsZXJ0KCdFcnJvciBvbiBmaWVsZCBcIicgKyBmaWVsZE5hbWUgKyAnXCInLCAnZXJyb3IuJyArIGZpZWxkRXJyb3IubWVzc2FnZSwgeyBmaWVsZE5hbWUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGh0dHBFcnJvclJlc3BvbnNlLmVycm9yICE9PSAnJyAmJiBodHRwRXJyb3JSZXNwb25zZS5lcnJvci5tZXNzYWdlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkRXJyb3JBbGVydChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0dHBFcnJvclJlc3BvbnNlLmVycm9yLm1lc3NhZ2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwRXJyb3JSZXNwb25zZS5lcnJvci5tZXNzYWdlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaHR0cEVycm9yUmVzcG9uc2UuZXJyb3IucGFyYW1zXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRFcnJvckFsZXJ0KGh0dHBFcnJvclJlc3BvbnNlLmVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICAgICAgY2FzZSA0MDQ6XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRFcnJvckFsZXJ0KCdOb3QgZm91bmQnLCAnZXJyb3IudXJsLm5vdC5mb3VuZCcpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGh0dHBFcnJvclJlc3BvbnNlLmVycm9yICE9PSAnJyAmJiBodHRwRXJyb3JSZXNwb25zZS5lcnJvci5tZXNzYWdlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkRXJyb3JBbGVydChodHRwRXJyb3JSZXNwb25zZS5lcnJvci5tZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZEVycm9yQWxlcnQoaHR0cEVycm9yUmVzcG9uc2UuZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHNldENsYXNzZXMoYWxlcnQpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB0b2FzdDogISFhbGVydC50b2FzdCxcclxuICAgICAgICAgICAgW2FsZXJ0LnBvc2l0aW9uXTogdHJ1ZVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY2xlYW5IdHRwRXJyb3JMaXN0ZW5lciAhPT0gdW5kZWZpbmVkICYmIHRoaXMuY2xlYW5IdHRwRXJyb3JMaXN0ZW5lciAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLmV2ZW50TWFuYWdlci5kZXN0cm95KHRoaXMuY2xlYW5IdHRwRXJyb3JMaXN0ZW5lcik7XHJcbiAgICAgICAgICAgIHRoaXMuYWxlcnRzID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFkZEVycm9yQWxlcnQobWVzc2FnZSwga2V5PywgZGF0YT8pIHtcclxuICAgICAgICBrZXkgPSBrZXkgJiYga2V5ICE9PSBudWxsID8ga2V5IDogbWVzc2FnZTtcclxuICAgICAgICB0aGlzLmFsZXJ0cy5wdXNoKFxyXG4gICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5hZGRBbGVydChcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnZGFuZ2VyJyxcclxuICAgICAgICAgICAgICAgICAgICBtc2c6IGtleSxcclxuICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IGRhdGEsXHJcbiAgICAgICAgICAgICAgICAgICAgdGltZW91dDogNTAwMCxcclxuICAgICAgICAgICAgICAgICAgICB0b2FzdDogdGhpcy5hbGVydFNlcnZpY2UuaXNUb2FzdCgpLFxyXG4gICAgICAgICAgICAgICAgICAgIHNjb3BlZDogdHJ1ZVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHRoaXMuYWxlcnRzXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICApO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7Q1VTVE9NX0VMRU1FTlRTX1NDSEVNQSwgTmdNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1V0aWxNZW5zYWdlbX0gZnJvbSAnLi91dGlsLW1lbnNhZ2VtJztcclxuaW1wb3J0IHtQb3J0YWxBbGVydFNlcnZpY2V9IGZyb20gJy4vcG9ydGFsLWFsZXJ0LnNlcnZpY2UnO1xyXG5pbXBvcnQge0poaUFsZXJ0Q29tcG9uZW50fSBmcm9tICcuL2FsZXJ0LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7SmhpQWxlcnRFcnJvckNvbXBvbmVudH0gZnJvbSAnLi9hbGVydC1lcnJvci5jb21wb25lbnQnO1xyXG5pbXBvcnQge0NvbW1vbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHtGb3Jtc01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQge05nYk1vZHVsZX0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQge05nSmhpcHN0ZXJNb2R1bGV9IGZyb20gJ25nLWpoaXBzdGVyJztcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgRm9ybXNNb2R1bGUsXHJcbiAgICBOZ2JNb2R1bGUuZm9yUm9vdCgpLFxyXG4gICAgTmdKaGlwc3Rlck1vZHVsZVxyXG4gIF0sXHJcbiAgZGVjbGFyYXRpb25zOiBbXHJcbiAgICBKaGlBbGVydENvbXBvbmVudCxcclxuICAgIEpoaUFsZXJ0RXJyb3JDb21wb25lbnRcclxuICBdLFxyXG4gIGV4cG9ydHM6IFtcclxuICAgIEpoaUFsZXJ0Q29tcG9uZW50LFxyXG4gICAgSmhpQWxlcnRFcnJvckNvbXBvbmVudFxyXG4gIF0sXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICBVdGlsTWVuc2FnZW0sIFBvcnRhbEFsZXJ0U2VydmljZVxyXG4gIF0sXHJcbiAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQb3J0YWxBbGVydE1vZHVsZSB7fVxyXG4iLCJpbXBvcnQge1RpcG9Mb2dyYWRvdXJvfSBmcm9tICcuL3RpcG8tbG9ncmFkb3Vyby5tb2RlbCc7XHJcbmltcG9ydCB7VGl0dWxvTG9ncmFkb3Vyb30gZnJvbSAnLi90aXR1bG8tbG9ncmFkb3Vyby5tb2RlbCc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ2FtcG9zUHJlZW5jaGltZW50byB7XHJcbiAgICBwdWJsaWMgdGlwb3NMb2dyYWRvdXJvPzogQXJyYXk8VGlwb0xvZ3JhZG91cm8+ID0gW107XHJcbiAgICBwdWJsaWMgdGl0dWxvc0xvZ3JhZG91cm8/OiBBcnJheTxUaXR1bG9Mb2dyYWRvdXJvPiA9IFtdO1xyXG59XHJcbiIsImltcG9ydCB7UmVzcG9uc2F2ZWx9IGZyb20gJy4vcmVzcG9uc2F2ZWwubW9kZWwnO1xyXG5pbXBvcnQge1Blc3NvYUp1cmlkaWNhfSBmcm9tICcuL3Blc3NvYS1qdXJpZGljYS5tb2RlbCc7XHJcbmltcG9ydCB7UGVzc29hRmlzaWNhfSBmcm9tICcuL3Blc3NvYS1maXNpY2EubW9kZWwnO1xyXG5pbXBvcnQge0VuZGVyZWNvfSBmcm9tICcuL2VuZGVyZWNvLm1vZGVsJztcclxuaW1wb3J0IHtTaXR1YWNhb0NvbnRyaWJ1aW50ZSwgVGlwb1Blc3NvYX0gZnJvbSAnLi9lbnVtcy5tb2RlbCc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29udHJpYnVpbnRlIHtcclxuICAgIHB1YmxpYyBpZD86IG51bWJlcjtcclxuICAgIHB1YmxpYyB0aXBvUGVzc29hPzogVGlwb1Blc3NvYTtcclxuICAgIHB1YmxpYyBkb2N1bWVudG8/OiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgbm9tZT86IHN0cmluZztcclxuICAgIHB1YmxpYyBzaXR1YWNhbz86IFNpdHVhY2FvQ29udHJpYnVpbnRlO1xyXG4gICAgcHVibGljIHRlbGVmb25lQ2VsdWxhcj86IHN0cmluZztcclxuICAgIHB1YmxpYyB0ZWxlZm9uZVJlc2lkZW5jaWFsPzogc3RyaW5nO1xyXG4gICAgcHVibGljIHRlbGVmb25lQ29tZXJjaWFsPzogc3RyaW5nO1xyXG4gICAgcHVibGljIGVtYWlsPzogc3RyaW5nO1xyXG4gICAgcHVibGljIGRhdGFBbHRlcmFjYW8/OiBEYXRlO1xyXG4gICAgcHVibGljIHVzdWFyaW9BbHRlcmFjYW8/OiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgdXRpbGl6YXJFbmRlcmVjb1ByaW5jaXBhbFBhcmFDb3JyZXNwb25kZW5jaWE/OiBib29sZWFuO1xyXG4gICAgcHVibGljIHBlc3NvYUZpc2ljYT86IFBlc3NvYUZpc2ljYTtcclxuICAgIHB1YmxpYyBwZXNzb2FKdXJpZGljYT86IFBlc3NvYUp1cmlkaWNhO1xyXG4gICAgcHVibGljIGVuZGVyZWNvcz86IEVuZGVyZWNvW107XHJcbiAgICBwdWJsaWMgZW5kZXJlY28/OiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgaW5zY3JpY2FvPzogc3RyaW5nO1xyXG4gICAgcHVibGljIGFyZWFPY3VwYWRhPzogbnVtYmVyO1xyXG4gICAgcHVibGljIGRkZD86IHN0cmluZztcclxuICAgIHB1YmxpYyBhdHVhY2FvPzogc3RyaW5nO1xyXG4gICAgcHVibGljIHJlc3BvbnNhdmVpcz86IEFycmF5PFJlc3BvbnNhdmVsPiA9IFtdO1xyXG59XHJcblxyXG4iLCJpbXBvcnQge0NvbXBvbmVudCwgVmlld0NoaWxkfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtOZ2JBY3RpdmVNb2RhbH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQge1BhcmFtZXRyb30gZnJvbSAnLi4vLi4vbW9kZWwnO1xyXG5pbXBvcnQge1BhZ2luYUFqdWRhfSBmcm9tICcuLi8uLi9tb2RlbC9wYWdpbmFBanVkYS5tb2RlbCc7XHJcbmltcG9ydCB7YW5pbWF0ZSwgc3RhdGUsIHN0eWxlLCB0cmFuc2l0aW9uLCB0cmlnZ2VyfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnamhpLWFqdWRhLW1vZGFsJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vYWp1ZGEuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWydhanVkYS5jb21wb25lbnQuc2NzcyddLFxyXG4gIGFuaW1hdGlvbnM6IFtcclxuICAgIHRyaWdnZXIoJ2FuaW1hY2FvJywgW1xyXG4gICAgICBzdGF0ZSgnc2hvd24nLCBzdHlsZSh7XHJcbiAgICAgICAgb3BhY2l0eTogMVxyXG4gICAgICB9KSksXHJcbiAgICAgIHN0YXRlKCdoaWRkZW4nLCBzdHlsZSh7XHJcbiAgICAgICAgb3BhY2l0eTogMFxyXG4gICAgICB9KSksXHJcbiAgICAgIHRyYW5zaXRpb24oJyogPT4gKicsIGFuaW1hdGUoJy4zcycpKVxyXG4gICAgXSlcclxuICBdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQWp1ZGFDb21wb25lbnQge1xyXG4gIHB1YmxpYyB0aXRsZTogc3RyaW5nO1xyXG4gIHB1YmxpYyBidXN5OiBib29sZWFuO1xyXG4gIHB1YmxpYyBwYXJhbWV0cm9zOiBBcnJheTxQYXJhbWV0cm8+O1xyXG4gIHB1YmxpYyBwYWdpbmFzQWp1ZGE6IEFycmF5PFBhZ2luYUFqdWRhPiA9IFtdO1xyXG4gIHB1YmxpYyBwYWdpbmFBdHVhbDogbnVtYmVyO1xyXG4gIHB1YmxpYyBmYWRlID0gJ3Nob3duJztcclxuXHJcbiAgQFZpZXdDaGlsZCgnYm90YW9OYXZlZ2FjYW8nKVxyXG4gIGJvdGFvTmF2ZWdhY2FvOiBhbnk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBhY3RpdmVNb2RhbDogTmdiQWN0aXZlTW9kYWxcclxuICApIHtcclxuICAgIHRoaXMucGFyYW1ldHJvcyA9IFtdO1xyXG4gICAgdGhpcy5zZXRCdXN5KGZhbHNlKTtcclxuICB9XHJcblxyXG4gIGZpbmlzaCgpIHtcclxuICAgIHRoaXMuYWN0aXZlTW9kYWwuZGlzbWlzcygnZmluaXNoJyk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaW5pdCh0aXRsZTogc3RyaW5nLCBwYWdpbmFzQWp1ZGE6IEFycmF5PFBhZ2luYUFqdWRhPikge1xyXG4gICAgdGhpcy50aXRsZSA9IHRpdGxlO1xyXG4gICAgdGhpcy5wYWdpbmFzQWp1ZGEgPSBwYWdpbmFzQWp1ZGE7XHJcbiAgICB0aGlzLnBhZ2luYUF0dWFsID0gMDtcclxuXHJcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgndXN1YXJpb1ZpdUFqdWRhJywgJ3RydWUnKTtcclxuXHJcbiAgICB0aGlzLmJvdGFvTmF2ZWdhY2FvLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuICB9XHJcblxyXG4gIHNldEJ1c3koYnVzeTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5idXN5ID0gYnVzeTtcclxuICB9XHJcblxyXG4gIHByb3hpbW8oKSB7XHJcbiAgICB0aGlzLmFsdGVybmFyVmlzaWJpbGlkYWRlKCk7XHJcblxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLnBhZ2luYUF0dWFsID09IHRoaXMucGFnaW5hc0FqdWRhLmxlbmd0aCAtIDEpIHtcclxuICAgICAgICB0aGlzLmZpbmlzaCgpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMucGFnaW5hQXR1YWwrKztcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmFsdGVybmFyVmlzaWJpbGlkYWRlKCk7XHJcbiAgICB9LCAzMDApO1xyXG4gIH1cclxuXHJcbiAgYW50ZXJpb3IoKSB7XHJcbiAgICB0aGlzLmFsdGVybmFyVmlzaWJpbGlkYWRlKCk7XHJcblxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMucGFnaW5hQXR1YWwtLTtcclxuICAgICAgdGhpcy5hbHRlcm5hclZpc2liaWxpZGFkZSgpO1xyXG4gICAgfSwgMzAwKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYWx0ZXJuYXJWaXNpYmlsaWRhZGUoKSB7XHJcbiAgICB0aGlzLmZhZGUgPSB0aGlzLmZhZGUgPT0gJ3Nob3duJyA/ICdoaWRkZW4nIDogJ3Nob3duJztcclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtOZ2JNb2RhbH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQge0h0dHBDbGllbnR9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHtQYXJhbWV0cm9SZXN1bHQsIFBhcmFtZXRyb1Jlc3VsdExpc3RlbmVyfSBmcm9tICcuL3BhcmFtZXRyby5yZXN1bHQnO1xyXG5pbXBvcnQge1BhcmFtZXRyb30gZnJvbSAnLi4vLi4vbW9kZWwvcGFyYW1ldHJvLm1vZGVsJztcclxuaW1wb3J0IHtQYXJhbWV0cm9zU2VydmljZX0gZnJvbSAnLi9wYXJhbWV0cm9zLnNlcnZpY2UnO1xyXG5pbXBvcnQge1BhcmFtZXRyb3NDb21wb25lbnR9IGZyb20gJy4vcGFyYW1ldHJvcy5jb21wb25lbnQnO1xyXG5pbXBvcnQge0NhbXBvc1ByZWVuY2hpbWVudG99IGZyb20gJy4uLy4uL21vZGVsL2NhbXBvcy1wcmVlbmNoaW1lbnRvLm1vZGVsJztcclxuaW1wb3J0IHtDb250cmlidWludGV9IGZyb20gJy4uLy4uL21vZGVsL2NvbnRyaWJ1aW50ZS5tb2RlbCc7XHJcbmltcG9ydCB7VXRpbEZ1bmN0aW9uc30gZnJvbSAnLi4vLi4vdXRpbC91dGlsLWZ1bmN0aW9ucyc7XHJcbmltcG9ydCB7QWp1ZGFDb21wb25lbnR9IGZyb20gJy4uL2FqdWRhL2FqdWRhLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7UGFnaW5hQWp1ZGF9IGZyb20gJy4uLy4uL21vZGVsL3BhZ2luYUFqdWRhLm1vZGVsJztcclxuaW1wb3J0IHtKb3lyaWRlU2VydmljZX0gZnJvbSAnbmd4LWpveXJpZGUnO1xyXG5cclxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcclxuZXhwb3J0IGNsYXNzIEdsb2JhbFNlcnZpY2UgaW1wbGVtZW50cyBQYXJhbWV0cm9SZXN1bHRMaXN0ZW5lciB7XHJcblxyXG4gICAgcHJpdmF0ZSByZXNvdXJjZVVybEdlcmFsOiBzdHJpbmcgPSAnLi9hcGkvcHVibGljL2dlcmFsJyA7XHJcblxyXG4gICAgcHVibGljIHBhcmFtZXRyb3M6IHsgW2tleTogc3RyaW5nXTogUGFyYW1ldHJvIH07XHJcbiAgICBwcml2YXRlIHVzdWFyaW9Mb2dhZG86IENvbnRyaWJ1aW50ZTtcclxuICAgIHByaXZhdGUgY2FtcG9zUHJlZW5jaGltZW50bzogQ2FtcG9zUHJlZW5jaGltZW50bztcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIG1vZGFsU2VydmljZTogTmdiTW9kYWwsXHJcbiAgICAgICAgcHJpdmF0ZSBwYXJhbWV0cm9TZXJ2aWNlOiBQYXJhbWV0cm9zU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXHJcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBqb3lyaWRlU2VydmljZTogSm95cmlkZVNlcnZpY2UpIHtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaW5pdCgpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnBhcmFtZXRyb1NlcnZpY2UuZ2V0UGFyYW1ldHJvc0NoYXZlVmFsb3IoJyonKS50aGVuKHZhbHVlID0+IHtcclxuICAgICAgICAgICAgdGhpcy5wYXJhbWV0cm9zID0gdmFsdWU7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHBhcmFtZXRyaXphcigpIHtcclxuICAgICAgICBjb25zdCBjb250ZW50Q29tcG9uZW50SW5zdGFuY2U6IFBhcmFtZXRyb3NDb21wb25lbnQgPSB0aGlzLm1vZGFsU2VydmljZS5vcGVuKFBhcmFtZXRyb3NDb21wb25lbnQsIHtcclxuICAgICAgICAgICAgc2l6ZTogJ2xnJyxcclxuICAgICAgICAgICAgYmFja2Ryb3A6ICdzdGF0aWMnXHJcbiAgICAgICAgfSkuY29tcG9uZW50SW5zdGFuY2U7XHJcbiAgICAgICAgY29udGVudENvbXBvbmVudEluc3RhbmNlLnNldExpc3RlbmVyKHRoaXMpO1xyXG4gICAgICAgIGNvbnRlbnRDb21wb25lbnRJbnN0YW5jZS5pbml0KCdQYXLDg8KibWV0cm9zIEdsb2JhaXMnLCAnKicpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldG9ybm8ocmVzdWx0OiBQYXJhbWV0cm9SZXN1bHQpIHtcclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY29uc3VsdGFyQ2VwKGNlcDogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQodGhpcy5yZXNvdXJjZVVybEdlcmFsICsgJy92aWFjZXAvJyArIGNlcCwgeyBvYnNlcnZlOiAncmVzcG9uc2UnIH0pLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG5cclxuICBwcml2YXRlIGNvbnN1bHRhckNhbXBvc1ByZWVuY2hpbWVudG8oKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMucmVzb3VyY2VVcmxHZXJhbCArICcvY2FtcG9zLXByZWVuY2hpbWVudG8nLCB7IG9ic2VydmU6ICdyZXNwb25zZScgfSkudG9Qcm9taXNlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvbnN1bHRhclVzdWFyaW9Mb2dhZG8oKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMucmVzb3VyY2VVcmxHZXJhbCArICcvdXN1YXJpby1sb2dhZG8nLCB7IG9ic2VydmU6ICdyZXNwb25zZScgfSkudG9Qcm9taXNlKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0Q2FtcG9zUHJlZW5jaGltZW50bygpOiBQcm9taXNlPENhbXBvc1ByZWVuY2hpbWVudG8+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIGlmICghVXRpbEZ1bmN0aW9ucy5pc1ZhbGlkT2JqZWN0KHRoaXMuY2FtcG9zUHJlZW5jaGltZW50bykpIHtcclxuICAgICAgICB0aGlzLmNhbXBvc1ByZWVuY2hpbWVudG8gPSBuZXcgQ2FtcG9zUHJlZW5jaGltZW50bygpO1xyXG4gICAgICAgIHRoaXMuY29uc3VsdGFyQ2FtcG9zUHJlZW5jaGltZW50bygpXHJcbiAgICAgICAgICAudGhlbih2YWx1ZSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuY2FtcG9zUHJlZW5jaGltZW50byA9IHZhbHVlLmJvZHk7XHJcbiAgICAgICAgICAgIHJlc29sdmUodGhpcy5jYW1wb3NQcmVlbmNoaW1lbnRvKTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICAuY2F0Y2godmFsdWUgPT4ge1xyXG4gICAgICAgICAgICByZWplY3QodmFsdWUpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmVzb2x2ZSh0aGlzLmNhbXBvc1ByZWVuY2hpbWVudG8pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRVc3VhcmlvTG9nYWRvKCk6IFByb21pc2U8Q29udHJpYnVpbnRlPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICBpZiAoIVV0aWxGdW5jdGlvbnMuaXNWYWxpZE9iamVjdCh0aGlzLnVzdWFyaW9Mb2dhZG8pKSB7XHJcbiAgICAgICAgdGhpcy51c3VhcmlvTG9nYWRvID0gbmV3IENvbnRyaWJ1aW50ZSgpO1xyXG4gICAgICAgIHRoaXMuY29uc3VsdGFyVXN1YXJpb0xvZ2FkbygpXHJcbiAgICAgICAgICAudGhlbih2YWx1ZSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHZhbHVlLmJvZHk7XHJcblxyXG4gICAgICAgICAgICBpZiAocmVzdWx0LnN1Y2Vzc28pIHtcclxuICAgICAgICAgICAgICB0aGlzLnVzdWFyaW9Mb2dhZG8gPSByZXN1bHQuY29udHJpYnVpbnRlO1xyXG4gICAgICAgICAgICAgIHJlc29sdmUodGhpcy51c3VhcmlvTG9nYWRvKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICByZWplY3QocmVzdWx0LmVycm8pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgLmNhdGNoKHZhbHVlID0+IHtcclxuICAgICAgICAgICAgcmVqZWN0KHZhbHVlKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJlc29sdmUodGhpcy51c3VhcmlvTG9nYWRvKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbG9nb3V0KCkge1xyXG4gICAgICB0aGlzLnVzdWFyaW9Mb2dhZG8gPSBudWxsO1xyXG4gICAgICB0aGlzLmNhbXBvc1ByZWVuY2hpbWVudG8gPSBudWxsO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFicmlyQWp1ZGEocGFnaW5hc0FqdWRhOiBBcnJheTxQYWdpbmFBanVkYT4pIHtcclxuICAgICAgY29uc3QgbW9kYWxSZWYgPSB0aGlzLm1vZGFsU2VydmljZS5vcGVuKEFqdWRhQ29tcG9uZW50LCB7XHJcbiAgICAgICAgICBzaXplOiAnbGcnLFxyXG4gICAgICAgICAgYmFja2Ryb3A6ICdzdGF0aWMnLFxyXG4gICAgICAgICAgd2luZG93Q2xhc3M6ICdhanVkYSdcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBjb25zdCBjb250ZW50Q29tcG9uZW50SW5zdGFuY2U6IEFqdWRhQ29tcG9uZW50ID0gbW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2U7XHJcbiAgICAgIGNvbnRlbnRDb21wb25lbnRJbnN0YW5jZS5pbml0KCdBanVkYScsIHBhZ2luYXNBanVkYSk7XHJcblxyXG4gICAgICBtb2RhbFJlZi5yZXN1bHQudGhlbigoKSA9PiB7XHJcbiAgICAgIH0sICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuam95cmlkZVNlcnZpY2Uuc3RhcnRUb3VyKHtcclxuICAgICAgICAgICAgICBzdGVwczogWydmaXJzdFN0ZXAnXSxcclxuICAgICAgICAgICAgICBzaG93Q291bnRlcjogZmFsc2UsXHJcbiAgICAgICAgICAgICAgdGhlbWVDb2xvcjogJyNmZmYnXHJcbiAgICAgICAgICB9KS5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICgpID0+IHtcclxuICAgICAgICAgICAgICBsZXQgYm90YW9FbnRlbmRpID0gPEhUTUxFbGVtZW50PiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmpveXJpZGUtc3RlcF9fZG9uZS1jb250YWluZXIgLmpveXJpZGUtYnV0dG9uXCIpO1xyXG4gICAgICAgICAgICAgIGJvdGFvRW50ZW5kaS5pbm5lclRleHQgPSAnRW50ZW5kaSc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQge0NVU1RPTV9FTEVNRU5UU19TQ0hFTUEsIE5nTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtOZ2JNb2R1bGV9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7Rm9udEF3ZXNvbWVNb2R1bGV9IGZyb20gJ0Bmb3J0YXdlc29tZS9hbmd1bGFyLWZvbnRhd2Vzb21lJztcclxuaW1wb3J0IHtsaWJyYXJ5fSBmcm9tICdAZm9ydGF3ZXNvbWUvZm9udGF3ZXNvbWUtc3ZnLWNvcmUnO1xyXG5pbXBvcnQge2ZhVGltZXN9IGZyb20gJ0Bmb3J0YXdlc29tZS9mcmVlLXNvbGlkLXN2Zy1pY29ucy9mYVRpbWVzJztcclxuaW1wb3J0IHtmYUJhbn0gZnJvbSAnQGZvcnRhd2Vzb21lL2ZyZWUtc29saWQtc3ZnLWljb25zL2ZhQmFuJztcclxuaW1wb3J0IHtBanVkYUNvbXBvbmVudH0gZnJvbSAnLi9hanVkYS5jb21wb25lbnQnO1xyXG5pbXBvcnQge05nMkZpdHRleHRNb2R1bGV9IGZyb20gJ25nMi1maXR0ZXh0JztcclxuaW1wb3J0IHtCcm93c2VyQW5pbWF0aW9uc01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlci9hbmltYXRpb25zJztcclxubGlicmFyeS5hZGQoZmFUaW1lcyk7XHJcbmxpYnJhcnkuYWRkKGZhQmFuKTtcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgRm9udEF3ZXNvbWVNb2R1bGUsXHJcbiAgICBOZ2JNb2R1bGUuZm9yUm9vdCgpLFxyXG4gICAgTmcyRml0dGV4dE1vZHVsZSxcclxuICAgIEJyb3dzZXJBbmltYXRpb25zTW9kdWxlXHJcbiAgXSxcclxuICBkZWNsYXJhdGlvbnM6IFtcclxuICAgIEFqdWRhQ29tcG9uZW50XHJcbiAgXSxcclxuICBlbnRyeUNvbXBvbmVudHM6IFtcclxuICAgIEFqdWRhQ29tcG9uZW50XHJcbiAgXSxcclxuICBleHBvcnRzOiBbXHJcbiAgICBBanVkYUNvbXBvbmVudFxyXG4gIF0sXHJcbiAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBanVkYU1vZHVsZSB7fVxyXG4iLCJpbXBvcnQge0NVU1RPTV9FTEVNRU5UU19TQ0hFTUEsIE5nTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtQYXJhbWV0cm9zQ29tcG9uZW50fSBmcm9tICcuL3BhcmFtZXRyb3MuY29tcG9uZW50JztcclxuaW1wb3J0IHtQYXJhbWV0cm9zRWRpdENvbXBvbmVudH0gZnJvbSAnLi9wYXJhbWV0cm9zLmVkaXQuY29tcG9uZW50JztcclxuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7Rm9ybXNNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHtQYXJhbWV0cm9zU2VydmljZX0gZnJvbSAnLi9wYXJhbWV0cm9zLnNlcnZpY2UnO1xyXG5pbXBvcnQge0ZvbnRBd2Vzb21lTW9kdWxlfSBmcm9tICdAZm9ydGF3ZXNvbWUvYW5ndWxhci1mb250YXdlc29tZSc7XHJcbmltcG9ydCB7bGlicmFyeX0gZnJvbSAnQGZvcnRhd2Vzb21lL2ZvbnRhd2Vzb21lLXN2Zy1jb3JlJztcclxuaW1wb3J0IHtmYXN9IGZyb20gJ0Bmb3J0YXdlc29tZS9mcmVlLXNvbGlkLXN2Zy1pY29ucyc7XHJcbmltcG9ydCB7TW9kYWxEaWFsb2dNb2R1bGV9IGZyb20gJy4uL21vZGFsLWRpYWxvZy9tb2RhbC1kaWFsb2cubW9kdWxlJztcclxuaW1wb3J0IHtQb3J0YWxBbGVydE1vZHVsZX0gZnJvbSAnLi4vLi4vYWxlcnQvcG9ydGFsLWFsZXJ0Lm1vZHVsZSc7XHJcbmltcG9ydCB7R2xvYmFsU2VydmljZX0gZnJvbSAnLi9nbG9iYWwuc2VydmljZSc7XHJcbmltcG9ydCB7TU9EVUxPX09QVElPTlMsIE9wdGlvbnNQcm92aWRlcn0gZnJvbSAnLi4vLi4vdXRpbC9vcHRpb25zLXByb3ZpZGVyJztcclxuaW1wb3J0IHtBanVkYU1vZHVsZX0gZnJvbSAnLi4vYWp1ZGEvYWp1ZGEubW9kdWxlJztcclxuXHJcbmxpYnJhcnkuYWRkKGZhcyk7XHJcblxyXG5ATmdNb2R1bGUoe1xyXG4gIGltcG9ydHM6IFtcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgTW9kYWxEaWFsb2dNb2R1bGUsXHJcbiAgICBGb250QXdlc29tZU1vZHVsZSxcclxuICAgIFBvcnRhbEFsZXJ0TW9kdWxlLFxyXG4gICAgQWp1ZGFNb2R1bGVcclxuICBdLFxyXG4gIGRlY2xhcmF0aW9uczogW1xyXG4gICAgUGFyYW1ldHJvc0NvbXBvbmVudCxcclxuICAgIFBhcmFtZXRyb3NFZGl0Q29tcG9uZW50XHJcbiAgXSxcclxuICBlbnRyeUNvbXBvbmVudHM6IFtcclxuICAgIFBhcmFtZXRyb3NDb21wb25lbnQsXHJcbiAgICBQYXJhbWV0cm9zRWRpdENvbXBvbmVudFxyXG4gIF0sXHJcbiAgZXhwb3J0czogW1xyXG4gICAgUGFyYW1ldHJvc0NvbXBvbmVudCxcclxuICAgIFBhcmFtZXRyb3NFZGl0Q29tcG9uZW50XHJcbiAgXSxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIFBhcmFtZXRyb3NTZXJ2aWNlLFxyXG4gICAgR2xvYmFsU2VydmljZSxcclxuICAgIE9wdGlvbnNQcm92aWRlclxyXG4gIF0sXHJcbiAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQYXJhbWV0cm9zTW9kdWxlIHtcclxuICBzdGF0aWMgZm9yUm9vdChtb2R1bG8/OiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIG5nTW9kdWxlOiBQYXJhbWV0cm9zTW9kdWxlLFxyXG4gICAgICBwcm92aWRlcnM6IFtcclxuICAgICAgICB7cHJvdmlkZTogTU9EVUxPX09QVElPTlMsIHVzZVZhbHVlOiBtb2R1bG99XHJcbiAgICAgIF1cclxuICAgIH07XHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7SHR0cENsaWVudH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQge1Rlcm1vTGdwZH0gZnJvbSAnLi4vLi4vbW9kZWwvdGVybW8tbGdwZC5tb2RlbCc7XHJcblxyXG5jb25zdCBTRVJWRVJfQVBJX1VSTCA9ICcuLyc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUZXJtb0xncGRTZXJ2aWNlIHtcclxuICBwdWJsaWMgcmVzb3VyY2VVcmwgPSBTRVJWRVJfQVBJX1VSTCArICdhcGknO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQpIHtcclxuICB9XHJcblxyXG4gIGdldFRlcm1vTGdwZCgpOiBhbnkge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8VGVybW9MZ3BkPih0aGlzLnJlc291cmNlVXJsICsgJy9wdWJsaWMvbGdwZC90ZXJtb0xncGQnLCB7b2JzZXJ2ZTogJ3Jlc3BvbnNlJ30pO1xyXG4gIH1cclxufVxyXG4iLCJleHBvcnQgY2xhc3MgVGVybW9MZ3BkIHtcclxuICAgIHB1YmxpYyBpZD86IG51bWJlcjtcclxuICAgIHB1YmxpYyBub21lPzogc3RyaW5nO1xyXG4gICAgcHVibGljIGRlc2NyaWNhbz86IHN0cmluZztcclxuICAgIHB1YmxpYyBhbmV4bz86IHN0cmluZztcclxuICAgIHB1YmxpYyBvYnNlcnZhY2FvPzogc3RyaW5nO1xyXG4gICAgcHVibGljIHNpdHVhY2FvPzogc3RyaW5nO1xyXG4gICAgcHVibGljIGRvY3VtZW50b19pbmM/OiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgZGF0YV9pbmM/OiBEYXRlO1xyXG4gICAgcHVibGljIHVzdWFyaW9faXBfaW5jPzogc3RyaW5nO1xyXG4gICAgcHVibGljIGVycm9zPzoge1xyXG4gICAgICBjb19yZXRvcm5vPzogc3RyaW5nXHJcbiAgICAgIGRzX3JldG9ybm8/OiBzdHJpbmdcclxuICAgICAgZHNfdmFsb3I/OiBzdHJpbmdcclxuICAgIH1cclxuICAgIHB1YmxpYyBoYWJpbGl0YWRvPzogYm9vbGVhbjtcclxuICAgIHB1YmxpYyBhY2VpdG8/OiBib29sZWFuO1xyXG59XHJcbiIsImltcG9ydCB7Q29tcG9uZW50LCBmb3J3YXJkUmVmLCBJbnB1dCwgT25Jbml0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtUZXJtb0xncGRTZXJ2aWNlfSBmcm9tICcuL3Rlcm1vLWxncGQuc2VydmljZSc7XHJcbmltcG9ydCB7VXRpbE1lbnNhZ2VtfSBmcm9tICcuLi8uLi9hbGVydC91dGlsLW1lbnNhZ2VtJztcclxuaW1wb3J0IHtDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1J9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHtQYXJhbWV0cm9zU2VydmljZX0gZnJvbSAnLi4vcGFyYW1ldHJvcy9wYXJhbWV0cm9zLnNlcnZpY2UnO1xyXG5pbXBvcnQge1Rlcm1vTGdwZH0gZnJvbSAnLi4vLi4vbW9kZWwvdGVybW8tbGdwZC5tb2RlbCc7XHJcblxyXG5leHBvcnQgY29uc3QgQ1VTVE9NX0lOUFVUX0NPTlRST0xfVkFMVUVfQUNDRVNTT1I6IGFueSA9IHtcclxuICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcclxuICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBUZXJtb0xncGRDb21wb25lbnQpLFxyXG4gIG11bHRpOiB0cnVlXHJcbn07XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2poaS10ZXJtby1sZ3BkJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdGVybW8tbGdwZC5jb21wb25lbnQuaHRtbCcsXHJcbiAgcHJvdmlkZXJzOiBbQ1VTVE9NX0lOUFVUX0NPTlRST0xfVkFMVUVfQUNDRVNTT1JdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUZXJtb0xncGRDb21wb25lbnQgIGltcGxlbWVudHMgT25Jbml0LCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XHJcbiAgdGVybW9MZ3BkPzogVGVybW9MZ3BkO1xyXG5cclxuICBASW5wdXQoKSBleGliaXJUZXJtbzogYm9vbGVhbjtcclxuXHJcbiAgb25DaGFuZ2U6IGFueSA9ICgpID0+IHtcclxuICB9O1xyXG4gIG9uVG91Y2g6IGFueSA9ICgpID0+IHtcclxuICB9O1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgdGVybW9MZ3BkU2VydmljZTogVGVybW9MZ3BkU2VydmljZSxcclxuICAgIHByaXZhdGUgcGFyYW1ldHJvU2VydmljZTogUGFyYW1ldHJvc1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIHV0aWxNZW5zYWdlbTogVXRpbE1lbnNhZ2VtXHJcbiAgKSB7XHJcbiAgICB0aGlzLnRlcm1vTGdwZCA9IG5ldyBUZXJtb0xncGQoKTtcclxuICB9XHJcblxyXG4gIHNldCB2YWx1ZSh2YWwpIHtcclxuICAgIHRoaXMudGVybW9MZ3BkID0gdmFsO1xyXG4gICAgdGhpcy5vbkNoYW5nZSh2YWwpO1xyXG4gICAgdGhpcy5vblRvdWNoKHZhbCk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuZ2V0VGVybW9MZ3BkKCk7XHJcbiAgfVxyXG5cclxuICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpIHtcclxuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSkge1xyXG4gICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSkge1xyXG4gICAgdGhpcy5vblRvdWNoID0gZm47XHJcbiAgfVxyXG5cclxuICBvbkNoYW5nZWQoJGV2ZW50KSB7XHJcbiAgICB0aGlzLnRlcm1vTGdwZC5hY2VpdG8gPSAkZXZlbnQgJiYgJGV2ZW50LnRhcmdldCAmJiAkZXZlbnQudGFyZ2V0LmNoZWNrZWQ7XHJcbiAgICB0aGlzLm9uQ2hhbmdlKHRoaXMudGVybW9MZ3BkKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0VGVybW9MZ3BkKCkge1xyXG4gICAgdGhpcy5wYXJhbWV0cm9TZXJ2aWNlLmdldFBhcmFtZXRyb3NCeU5hbWUoJ0hBQklMSVRBUl9MR1BEJylcclxuICAgICAgLnRoZW4ocmVzcCA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3AudmFsb3IgPT09IHRydWUpIHtcclxuICAgICAgICAgIHRoaXMudGVybW9MZ3BkU2VydmljZVxyXG4gICAgICAgICAgICAuZ2V0VGVybW9MZ3BkKClcclxuICAgICAgICAgICAgLnRvUHJvbWlzZSgpXHJcbiAgICAgICAgICAgIC50aGVuKHJlc3AgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMudGVybW9MZ3BkID0gcmVzcC5ib2R5O1xyXG4gICAgICAgICAgICAgIHRoaXMudGVybW9MZ3BkLmhhYmlsaXRhZG8gPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMudGVybW9MZ3BkKTtcclxuICAgICAgICAgICAgICBpZiAodGhpcy50ZXJtb0xncGQuZXJyb3MpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudXRpbE1lbnNhZ2VtLnNob3dNZW5zYWdlbUVycm9yKHRoaXMudGVybW9MZ3BkLmVycm9zLmRzX3JldG9ybm8pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmNhdGNoKGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy51dGlsTWVuc2FnZW0uc2hvd0Vycm9yRGV0YWlsZWQoZXJyKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgICAuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICB0aGlzLnV0aWxNZW5zYWdlbS5zaG93RXJyb3JEZXRhaWxlZChlcnIpO1xyXG4gICAgICB9KVxyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQge0NVU1RPTV9FTEVNRU5UU19TQ0hFTUEsIE5nTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmltcG9ydCB7Rm9udEF3ZXNvbWVNb2R1bGV9IGZyb20gJ0Bmb3J0YXdlc29tZS9hbmd1bGFyLWZvbnRhd2Vzb21lJztcclxuaW1wb3J0IHtOZ0poaXBzdGVyTW9kdWxlfSBmcm9tICduZy1qaGlwc3Rlcic7XHJcbmltcG9ydCB7Rm9ybXNNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7TmdiTW9kdWxlfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcbmltcG9ydCB7UG9ydGFsQWxlcnRNb2R1bGV9IGZyb20gJy4uLy4uL2FsZXJ0L3BvcnRhbC1hbGVydC5tb2R1bGUnO1xyXG5pbXBvcnQge1Rlcm1vTGdwZENvbXBvbmVudH0gZnJvbSAnLi90ZXJtby1sZ3BkLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7VGVybW9MZ3BkU2VydmljZX0gZnJvbSAnLi90ZXJtby1sZ3BkLnNlcnZpY2UnO1xyXG5pbXBvcnQge1BhcmFtZXRyb3NTZXJ2aWNlfSBmcm9tICcuLi9wYXJhbWV0cm9zL3BhcmFtZXRyb3Muc2VydmljZSc7XHJcblxyXG5ATmdNb2R1bGUoe1xyXG4gIGltcG9ydHM6IFtcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgRm9udEF3ZXNvbWVNb2R1bGUsXHJcbiAgICBOZ0poaXBzdGVyTW9kdWxlLFxyXG4gICAgUG9ydGFsQWxlcnRNb2R1bGUsXHJcbiAgICBOZ2JNb2R1bGUuZm9yUm9vdCgpXHJcbiAgXSxcclxuICBkZWNsYXJhdGlvbnM6IFtcclxuICAgIFRlcm1vTGdwZENvbXBvbmVudFxyXG4gIF0sXHJcbiAgZXhwb3J0czogW1xyXG4gICAgVGVybW9MZ3BkQ29tcG9uZW50XHJcbiAgXSxcclxuICBlbnRyeUNvbXBvbmVudHM6IFtcclxuICAgIFRlcm1vTGdwZENvbXBvbmVudFxyXG4gIF0sXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICBUZXJtb0xncGRTZXJ2aWNlLFxyXG4gICAgUGFyYW1ldHJvc1NlcnZpY2VcclxuICBdLFxyXG4gIHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgVGVybW9MZ3BkTW9kdWxlIHtcclxufVxyXG4iLCJpbXBvcnQge0NvbXBvbmVudCwgT25Jbml0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHthbmltYXRlLCBzdGF0ZSwgc3R5bGUsIHRyYW5zaXRpb24sIHRyaWdnZXJ9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xyXG5pbXBvcnQge1BhcmFtZXRyb3NTZXJ2aWNlfSBmcm9tICcuLi9wYXJhbWV0cm9zL3BhcmFtZXRyb3Muc2VydmljZSc7XHJcbmltcG9ydCB7VGVybW9MZ3BkU2VydmljZX0gZnJvbSAnLi4vdGVybW8tbGdwZC90ZXJtby1sZ3BkLnNlcnZpY2UnO1xyXG5pbXBvcnQge1Rlcm1vTGdwZH0gZnJvbSAnLi4vLi4vbW9kZWwvdGVybW8tbGdwZC5tb2RlbCc7XHJcbmltcG9ydCB7VXRpbEZ1bmN0aW9uc30gZnJvbSAnLi4vLi4vdXRpbCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2poaS1jb29raWUtY29uc2VudCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2Nvb2tpZS1jb25zZW50LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnY29va2llLWNvbnNlbnQuc2NzcyddLFxyXG4gIGFuaW1hdGlvbnM6IFtcclxuICAgIHRyaWdnZXIoJ3NpbXBsZUZhZGVBbmltYXRpb24nLCBbXHJcbiAgICAgIHN0YXRlKCdpbicsIHN0eWxlKHtvcGFjaXR5OiAxfSkpLFxyXG4gICAgICB0cmFuc2l0aW9uKCc6ZW50ZXInLCBbXHJcbiAgICAgICAgc3R5bGUoe29wYWNpdHk6IDB9KSxcclxuICAgICAgICBhbmltYXRlKDQwMClcclxuICAgICAgXSksXHJcbiAgICAgIHRyYW5zaXRpb24oJzpsZWF2ZScsXHJcbiAgICAgICAgYW5pbWF0ZSg0MDAsIHN0eWxlKHtvcGFjaXR5OiAwfSkpKVxyXG4gICAgXSlcclxuICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDb29raWVDb25zZW50Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICB0ZXJtb0xncGQ/OiBUZXJtb0xncGQ7XHJcbiAgZXJyb3JzPzogc3RyaW5nO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcGFyYW1ldHJvU2VydmljZTogUGFyYW1ldHJvc1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIHRlcm1vTGdwZFNlcnZpY2U6IFRlcm1vTGdwZFNlcnZpY2VcclxuICApIHtcclxuICAgIHRoaXMudGVybW9MZ3BkID0gbmV3IFRlcm1vTGdwZCgpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBpZiAoIWxvY2FsU3RvcmFnZS5oYXNPd25Qcm9wZXJ0eSgnY29va2llU2VlbicpKSB7XHJcbiAgICAgIHRoaXMuZ2V0VGVybW9MZ3BkKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmZWNoYXIoKSB7XHJcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnY29va2llU2VlbicsICd0cnVlJyk7XHJcbiAgICB0aGlzLnRlcm1vTGdwZCA9IG51bGw7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFRlcm1vTGdwZCgpIHtcclxuICAgIHRoaXMucGFyYW1ldHJvU2VydmljZS5nZXRQYXJhbWV0cm9zQnlOYW1lKCdIQUJJTElUQVJfTEdQRCcpXHJcbiAgICAgIC50aGVuKHJlc3AgPT4ge1xyXG4gICAgICAgIGlmIChyZXNwLnZhbG9yID09PSB0cnVlKSB7XHJcbiAgICAgICAgICB0aGlzLnRlcm1vTGdwZFNlcnZpY2VcclxuICAgICAgICAgICAgLmdldFRlcm1vTGdwZCgpXHJcbiAgICAgICAgICAgIC50b1Byb21pc2UoKVxyXG4gICAgICAgICAgICAudGhlbihyZXNwID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLnRlcm1vTGdwZCA9IHJlc3AuYm9keTtcclxuICAgICAgICAgICAgICBpZih0aGlzLnRlcm1vTGdwZC5lcnJvcykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lcnJvcnMgPSB0aGlzLnRlcm1vTGdwZC5lcnJvcy5kc19yZXRvcm5vO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmICh0aGlzLnRlcm1vTGdwZC5pZCkge1xyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICB9LmJpbmQodGhpcyksIDEwMDApO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmNhdGNoKGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5lcnJvcnMgPSBVdGlsRnVuY3Rpb25zLmdldEh0dHBFcnJvck1lc3NhZ2UoZXJyKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHtQYXJhbWV0cm9zU2VydmljZX0gZnJvbSAnLi4vcGFyYW1ldHJvcy9wYXJhbWV0cm9zLnNlcnZpY2UnO1xyXG5pbXBvcnQge0NVU1RPTV9FTEVNRU5UU19TQ0hFTUEsIE5nTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtUZXJtb0xncGRTZXJ2aWNlfSBmcm9tICcuLi90ZXJtby1sZ3BkL3Rlcm1vLWxncGQuc2VydmljZSc7XHJcbmltcG9ydCB7TmdiTW9kdWxlfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcbmltcG9ydCB7Q29va2llQ29uc2VudENvbXBvbmVudH0gZnJvbSAnLi9jb29raWUtY29uc2VudC5jb21wb25lbnQnO1xyXG5pbXBvcnQge0NvbW1vbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHtOZ0poaXBzdGVyTW9kdWxlfSBmcm9tICduZy1qaGlwc3Rlcic7XHJcblxyXG5ATmdNb2R1bGUoe1xyXG4gIGltcG9ydHM6IFtcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIE5nSmhpcHN0ZXJNb2R1bGUsXHJcbiAgICBOZ2JNb2R1bGUuZm9yUm9vdCgpLFxyXG4gIF0sXHJcbiAgZGVjbGFyYXRpb25zOiBbXHJcbiAgICBDb29raWVDb25zZW50Q29tcG9uZW50XHJcbiAgXSxcclxuICBleHBvcnRzOiBbXHJcbiAgICBDb29raWVDb25zZW50Q29tcG9uZW50XHJcbiAgXSxcclxuICBlbnRyeUNvbXBvbmVudHM6IFtcclxuICAgIENvb2tpZUNvbnNlbnRDb21wb25lbnRcclxuICBdLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAgVGVybW9MZ3BkU2VydmljZSxcclxuICAgIFBhcmFtZXRyb3NTZXJ2aWNlXHJcbiAgXSxcclxuICBzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV1cclxufSlcclxuZXhwb3J0IGNsYXNzIENvb2tpZUNvbnNlbnRNb2R1bGUge1xyXG59XHJcbiIsImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7SHR0cENsaWVudCwgSHR0cFJlc3BvbnNlfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7T2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7QWNjb3VudH0gZnJvbSAnLi4vbW9kZWwvYWNjb3VudC5tb2RlbCc7XHJcblxyXG5jb25zdCBTRVJWRVJfQVBJX1VSTCA9ICcuLyc7XHJcblxyXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxyXG5leHBvcnQgY2xhc3MgQWNjb3VudFNlcnZpY2Uge1xyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50KSB7fVxyXG5cclxuICAgIGdldCgpOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxBY2NvdW50Pj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEFjY291bnQ+KFNFUlZFUl9BUElfVVJMICsgJ2FwaS9hY2NvdW50JywgeyBvYnNlcnZlOiAncmVzcG9uc2UnIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHNhdmUoYWNjb3VudDogYW55KTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8YW55Pj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChTRVJWRVJfQVBJX1VSTCArICdhcGkvYWNjb3VudCcsIGFjY291bnQsIHsgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyB9KTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0poaUxhbmd1YWdlU2VydmljZX0gZnJvbSAnbmctamhpcHN0ZXInO1xyXG5pbXBvcnQge1Nlc3Npb25TdG9yYWdlU2VydmljZX0gZnJvbSAnbmd4LXdlYnN0b3JhZ2UnO1xyXG5pbXBvcnQge09ic2VydmFibGUsIFN1YmplY3R9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge0FjY291bnRTZXJ2aWNlfSBmcm9tICcuL2FjY291bnQuc2VydmljZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxyXG5leHBvcnQgY2xhc3MgUHJpbmNpcGFsIHtcclxuICAgIHByaXZhdGUgdXNlcklkZW50aXR5OiBhbnk7XHJcbiAgICBwcml2YXRlIGF1dGhlbnRpY2F0ZWQgPSBmYWxzZTtcclxuICAgIHByaXZhdGUgYXV0aGVudGljYXRpb25TdGF0ZSA9IG5ldyBTdWJqZWN0PGFueT4oKTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIGxhbmd1YWdlU2VydmljZTogSmhpTGFuZ3VhZ2VTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgc2Vzc2lvblN0b3JhZ2U6IFNlc3Npb25TdG9yYWdlU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIGFjY291bnQ6IEFjY291bnRTZXJ2aWNlXHJcbiAgICApIHt9XHJcblxyXG4gICAgYXV0aGVudGljYXRlKGlkZW50aXR5KSB7XHJcbiAgICAgICAgdGhpcy51c2VySWRlbnRpdHkgPSBpZGVudGl0eTtcclxuICAgICAgICB0aGlzLmF1dGhlbnRpY2F0ZWQgPSBpZGVudGl0eSAhPT0gbnVsbDtcclxuICAgICAgICB0aGlzLmF1dGhlbnRpY2F0aW9uU3RhdGUubmV4dCh0aGlzLnVzZXJJZGVudGl0eSk7XHJcbiAgICB9XHJcblxyXG4gICAgaGFzQW55QXV0aG9yaXR5KGF1dGhvcml0aWVzOiBzdHJpbmdbXSk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5oYXNBbnlBdXRob3JpdHlEaXJlY3QoYXV0aG9yaXRpZXMpKTtcclxuICAgIH1cclxuXHJcbiAgICBoYXNBbnlBdXRob3JpdHlEaXJlY3QoYXV0aG9yaXRpZXM6IHN0cmluZ1tdKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmF1dGhlbnRpY2F0ZWQgfHwgIXRoaXMudXNlcklkZW50aXR5IHx8ICF0aGlzLnVzZXJJZGVudGl0eS5hdXRob3JpdGllcykge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGF1dGhvcml0aWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnVzZXJJZGVudGl0eS5hdXRob3JpdGllcy5pbmNsdWRlcyhhdXRob3JpdGllc1tpXSkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaGFzQXV0aG9yaXR5KGF1dGhvcml0eTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmF1dGhlbnRpY2F0ZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5pZGVudGl0eSgpLnRoZW4oXHJcbiAgICAgICAgICAgIGlkID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoaWQuYXV0aG9yaXRpZXMgJiYgaWQuYXV0aG9yaXRpZXMuaW5jbHVkZXMoYXV0aG9yaXR5KSk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBpZGVudGl0eShmb3JjZT86IGJvb2xlYW4pOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIGlmIChmb3JjZSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLnVzZXJJZGVudGl0eSA9IHVuZGVmaW5lZDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGNoZWNrIGFuZCBzZWUgaWYgd2UgaGF2ZSByZXRyaWV2ZWQgdGhlIHVzZXJJZGVudGl0eSBkYXRhIGZyb20gdGhlIHNlcnZlci5cclxuICAgICAgICAvLyBpZiB3ZSBoYXZlLCByZXVzZSBpdCBieSBpbW1lZGlhdGVseSByZXNvbHZpbmdcclxuICAgICAgICBpZiAodGhpcy51c2VySWRlbnRpdHkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLnVzZXJJZGVudGl0eSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyByZXRyaWV2ZSB0aGUgdXNlcklkZW50aXR5IGRhdGEgZnJvbSB0aGUgc2VydmVyLCB1cGRhdGUgdGhlIGlkZW50aXR5IG9iamVjdCwgYW5kIHRoZW4gcmVzb2x2ZS5cclxuICAgICAgICByZXR1cm4gdGhpcy5hY2NvdW50XHJcbiAgICAgICAgICAgIC5nZXQoKVxyXG4gICAgICAgICAgICAudG9Qcm9taXNlKClcclxuICAgICAgICAgICAgLnRoZW4ocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYWNjb3VudCA9IHJlc3BvbnNlLmJvZHk7XHJcbiAgICAgICAgICAgICAgICBpZiAoYWNjb3VudCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXNlcklkZW50aXR5ID0gYWNjb3VudDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmF1dGhlbnRpY2F0ZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBBZnRlciByZXRyaWV2ZSB0aGUgYWNjb3VudCBpbmZvLCB0aGUgbGFuZ3VhZ2Ugd2lsbCBiZSBjaGFuZ2VkIHRvXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhlIHVzZXIncyBwcmVmZXJyZWQgbGFuZ3VhZ2UgY29uZmlndXJlZCBpbiB0aGUgYWNjb3VudCBzZXR0aW5nXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbGFuZ0tleSA9IHRoaXMuc2Vzc2lvblN0b3JhZ2UucmV0cmlldmUoJ2xvY2FsZScpIHx8IHRoaXMudXNlcklkZW50aXR5LmxhbmdLZXk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sYW5ndWFnZVNlcnZpY2UuY2hhbmdlTGFuZ3VhZ2UobGFuZ0tleSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXNlcklkZW50aXR5ID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmF1dGhlbnRpY2F0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuYXV0aGVudGljYXRpb25TdGF0ZS5uZXh0KHRoaXMudXNlcklkZW50aXR5KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnVzZXJJZGVudGl0eTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmNhdGNoKGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVzZXJJZGVudGl0eSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmF1dGhlbnRpY2F0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYXV0aGVudGljYXRpb25TdGF0ZS5uZXh0KHRoaXMudXNlcklkZW50aXR5KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBpc0F1dGhlbnRpY2F0ZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYXV0aGVudGljYXRlZDtcclxuICAgIH1cclxuXHJcbiAgICBpc0lkZW50aXR5UmVzb2x2ZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudXNlcklkZW50aXR5ICE9PSB1bmRlZmluZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0QXV0aGVudGljYXRpb25TdGF0ZSgpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmF1dGhlbnRpY2F0aW9uU3RhdGUuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0SW1hZ2VVcmwoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5pc0lkZW50aXR5UmVzb2x2ZWQoKSA/IHRoaXMudXNlcklkZW50aXR5LmltYWdlVXJsIDogbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRVc2VySWRlbnRpdHkoKTogYW55IHtcclxuICAgICAgICByZXR1cm4gdGhpcy51c2VySWRlbnRpdHk7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0fSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQge05nYk1vZGFsfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcbmltcG9ydCB7TG9jYXRpb259IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7UGFyYW1ldHJvUmVzdWx0LCBQYXJhbWV0cm9SZXN1bHRMaXN0ZW5lcn0gZnJvbSAnLi4vcGFyYW1ldHJvcy9wYXJhbWV0cm8ucmVzdWx0JztcclxuaW1wb3J0IHtQYXJhbWV0cm99IGZyb20gJy4uLy4uL21vZGVsL3BhcmFtZXRyby5tb2RlbCc7XHJcbmltcG9ydCB7UGFyYW1ldHJvc1NlcnZpY2V9IGZyb20gJy4uL3BhcmFtZXRyb3MvcGFyYW1ldHJvcy5zZXJ2aWNlJztcclxuaW1wb3J0IHtVdGlsTWVuc2FnZW19IGZyb20gJy4uLy4uL2FsZXJ0L3V0aWwtbWVuc2FnZW0nO1xyXG5pbXBvcnQge1ByaW5jaXBhbH0gZnJvbSAnLi4vLi4vYXV0aC9wcmluY2lwYWwuc2VydmljZSc7XHJcbmltcG9ydCB7UGFyYW1ldHJvc0NvbXBvbmVudH0gZnJvbSAnLi4vcGFyYW1ldHJvcy9wYXJhbWV0cm9zLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7VXRpbEZ1bmN0aW9uc30gZnJvbSAnLi4vLi4vdXRpbC91dGlsLWZ1bmN0aW9ucyc7XHJcbmltcG9ydCB7RG9tU2FuaXRpemVyfSBmcm9tIFwiQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3NlclwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdqaGktcGFnaW5hLXBhcmFtZXRyaXphZGEnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9wYWdpbmEtcGFyYW1ldHJpemFkYS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vcGFnaW5hLXBhcmFtZXRyaXphZGEuc3R5bGUuY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFBhZ2luYVBhcmFtZXRyaXphZGFDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIFBhcmFtZXRyb1Jlc3VsdExpc3RlbmVyIHtcclxuICBwYXJhbWV0cm9zOiB7IFtrZXk6IHN0cmluZ106IFBhcmFtZXRybyB9ID0ge307XHJcbiAgaXNCdXN5OiBib29sZWFuO1xyXG4gIGRlc2FiaWxpdGFkbyA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKSBwYWdpbmEgPSAnJztcclxuICBASW5wdXQoKSBjbGFzc01haW5Db250YWluZXIgPSAnJztcclxuICBASW5wdXQoKSBjbGFzc0NhcmRDb250YWluZXIgPSAnJztcclxuICBASW5wdXQoKSBoaWRlTWFpbkNvbnRlbnQgPSBmYWxzZTtcclxuICBASW5wdXQoKSBoaWRlQmFja0J1dHRvbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGhpZGVQYWdlVGl0bGUgPSBmYWxzZTtcclxuICBASW5wdXQoKSBoaWRlUGFnZVN1YlRpdGxlID0gZmFsc2U7XHJcbiAgQElucHV0KCkgdGl0dWxvRGVmYXVsdCA9ICcnO1xyXG4gIEBJbnB1dCgpIHN1YlRpdHVsb0RlZmF1bHQgPSAnJztcclxuICBAT3V0cHV0KCkgcGFyYW1ldGVyc0NoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgcGFyYW1ldGVyc1JlYWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyBwYXJhbWV0cm9zU2VydmljZTogUGFyYW1ldHJvc1NlcnZpY2UsXHJcbiAgICBwdWJsaWMgbW9kYWxTZXJ2aWNlOiBOZ2JNb2RhbCxcclxuICAgIHB1YmxpYyB1dGlsTWVuc2FnZW06IFV0aWxNZW5zYWdlbSxcclxuICAgIHB1YmxpYyBoaXN0b3J5OiBMb2NhdGlvbixcclxuICAgIHByaXZhdGUgcHJpbmNpcGFsOiBQcmluY2lwYWwsXHJcbiAgICBwdWJsaWMgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXJcclxuICApIHtcclxuXHJcbiAgfVxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5jYXJyZWdhclBhcmFtZXRyb3MoZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgcmV0b3JubyhyZXN1bHQ6IFBhcmFtZXRyb1Jlc3VsdCk6IGFueSB7XHJcbiAgICB0aGlzLmNhcnJlZ2FyUGFyYW1ldHJvcyh0cnVlKTtcclxuICB9XHJcblxyXG4gIHBhcmFtZXRyaXphcigpIHtcclxuICAgIGNvbnN0IGNvbnRlbnRDb21wb25lbnRJbnN0YW5jZTogUGFyYW1ldHJvc0NvbXBvbmVudCA9IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oUGFyYW1ldHJvc0NvbXBvbmVudCwge1xyXG4gICAgICBzaXplOiAnbGcnLFxyXG4gICAgICBiYWNrZHJvcDogJ3N0YXRpYydcclxuICAgIH0pLmNvbXBvbmVudEluc3RhbmNlO1xyXG4gICAgY29udGVudENvbXBvbmVudEluc3RhbmNlLnNldExpc3RlbmVyKHRoaXMpO1xyXG4gICAgY29udGVudENvbXBvbmVudEluc3RhbmNlLmluaXQoXCJQYXLDg8KibWV0cm9zIGRhIFDDg8KhZ2luYVwiLCB0aGlzLnBhZ2luYSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNhcnJlZ2FyUGFyYW1ldHJvcyhjaGFuZ2VkOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLmlzQnVzeSA9IHRydWU7XHJcbiAgICB0aGlzLnBhcmFtZXRyb3NTZXJ2aWNlXHJcbiAgICAgIC5nZXRQYXJhbWV0cm9zQ2hhdmVWYWxvcih0aGlzLnBhZ2luYSlcclxuICAgICAgLnRoZW4odmFsdWUgPT4ge1xyXG4gICAgICAgIHRoaXMucGFyYW1ldHJvcyA9IHZhbHVlO1xyXG4gICAgICAgIHRoaXMuZGVzYWJpbGl0YWRvID0gVXRpbEZ1bmN0aW9ucy5pc1ZhbGlkT2JqZWN0KHRoaXMucGFyYW1ldHJvc1snSEFCSUxJVEFETyddKSA9PT0gdHJ1ZSAmJiB0aGlzLnBhcmFtZXRyb3NbJ0hBQklMSVRBRE8nXS52YWxvciA9PT0gZmFsc2UgO1xyXG4gICAgICAgIGlmIChjaGFuZ2VkID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgdGhpcy5wYXJhbWV0ZXJzUmVhZC5lbWl0KHRoaXMucGFyYW1ldHJvcyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMucGFyYW1ldGVyc0NoYW5nZWQuZW1pdCh0aGlzLnBhcmFtZXRyb3MpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmlzQnVzeSA9IGZhbHNlO1xyXG4gICAgICB9KVxyXG4gICAgICAuY2F0Y2godmFsdWUgPT4ge1xyXG4gICAgICAgIHRoaXMuaXNCdXN5ID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy51dGlsTWVuc2FnZW0uc2hvd0Vycm9yKHZhbHVlKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRQYWdlVGl0bGUoKSB7XHJcbiAgICBpZiAoVXRpbEZ1bmN0aW9ucy5pc1ZhbGlkT2JqZWN0KHRoaXMucGFyYW1ldHJvc1snREVTQ1JJQ0FPX1RJVFVMT19URUxBJ10pID09PSB0cnVlKSB7XHJcbiAgICAgIGlmIChVdGlsRnVuY3Rpb25zLmlzVmFsaWRTdHJpbmdPckFycmF5KHRoaXMucGFyYW1ldHJvc1snREVTQ1JJQ0FPX1RJVFVMT19URUxBJ10udmFsb3IpID09PSB0cnVlKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyYW1ldHJvc1snREVTQ1JJQ0FPX1RJVFVMT19URUxBJ10udmFsb3I7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLnRpdHVsb0RlZmF1bHQ7XHJcbiAgfVxyXG5cclxuICBpc1ZhbGlkU3ViVGl0bGUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5oaWRlUGFnZVN1YlRpdGxlID09PSBmYWxzZSAmJiBVdGlsRnVuY3Rpb25zLmlzVmFsaWRPYmplY3QodGhpcy5wYXJhbWV0cm9zWydERVNDUklDQU9fQ0FCRUNBTEhPX1RFTEEnXSkgPT09IHRydWUgJiZcclxuICAgICAgVXRpbEZ1bmN0aW9ucy5pc1ZhbGlkU3RyaW5nT3JBcnJheSh0aGlzLnBhcmFtZXRyb3NbJ0RFU0NSSUNBT19DQUJFQ0FMSE9fVEVMQSddLnZhbG9yKSA9PT0gdHJ1ZSB8fFxyXG4gICAgICBVdGlsRnVuY3Rpb25zLmlzVmFsaWRTdHJpbmdPckFycmF5KHRoaXMuc3ViVGl0dWxvRGVmYXVsdCk7XHJcbiAgfVxyXG5cclxuICBnZXRQYWdlU3ViVGl0bGUoKSB7XHJcbiAgICBpZiAoVXRpbEZ1bmN0aW9ucy5pc1ZhbGlkT2JqZWN0KHRoaXMucGFyYW1ldHJvc1snREVTQ1JJQ0FPX0NBQkVDQUxIT19URUxBJ10pID09PSB0cnVlKSB7XHJcbiAgICAgIGlmIChVdGlsRnVuY3Rpb25zLmlzVmFsaWRTdHJpbmdPckFycmF5KHRoaXMucGFyYW1ldHJvc1snREVTQ1JJQ0FPX0NBQkVDQUxIT19URUxBJ10udmFsb3IpID09PSB0cnVlKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyYW1ldHJvc1snREVTQ1JJQ0FPX0NBQkVDQUxIT19URUxBJ10udmFsb3I7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLnN1YlRpdHVsb0RlZmF1bHQ7XHJcbiAgfVxyXG5cclxuICBnZXRQYWdlRGVzY3JpcHRpb24oKSB7XHJcbiAgICBpZiAoVXRpbEZ1bmN0aW9ucy5pc1ZhbGlkT2JqZWN0KHRoaXMucGFyYW1ldHJvc1snTUVOU0FHRU1fSFRNTF9ERVNDUklDQU8nXSkgPT09IHRydWUpIHtcclxuICAgICAgaWYgKFV0aWxGdW5jdGlvbnMuaXNWYWxpZFN0cmluZ09yQXJyYXkodGhpcy5wYXJhbWV0cm9zWydNRU5TQUdFTV9IVE1MX0RFU0NSSUNBTyddLnZhbG9yKSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnBhcmFtZXRyb3NbJ01FTlNBR0VNX0hUTUxfREVTQ1JJQ0FPJ10udmFsb3I7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgZ2V0UGFnZUluZm9ybWF0aW9uKCkge1xyXG4gICAgaWYgKFV0aWxGdW5jdGlvbnMuaXNWYWxpZE9iamVjdCh0aGlzLnBhcmFtZXRyb3NbJ01FTlNBR0VNX0hUTUxfSU5GT1JNQUNBTyddKSA9PT0gdHJ1ZSkge1xyXG4gICAgICBpZiAoVXRpbEZ1bmN0aW9ucy5pc1ZhbGlkU3RyaW5nT3JBcnJheSh0aGlzLnBhcmFtZXRyb3NbJ01FTlNBR0VNX0hUTUxfSU5GT1JNQUNBTyddLnZhbG9yKSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnBhcmFtZXRyb3NbJ01FTlNBR0VNX0hUTUxfSU5GT1JNQUNBTyddLnZhbG9yO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIGhpZGVUb29sQmFyKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaGlkZVBhZ2VUaXRsZSA9PT0gdHJ1ZSAmJiB0aGlzLmhpZGVCYWNrQnV0dG9uICYmIHRoaXMucHJpbmNpcGFsLmhhc0FueUF1dGhvcml0eURpcmVjdChbXCJST0xFX0FETUlOXCJdKSA9PT0gZmFsc2U7XHJcbiAgfVxyXG5cclxufVxyXG4iLCJpbXBvcnQge0RpcmVjdGl2ZSwgSW5wdXQsIFRlbXBsYXRlUmVmLCBWaWV3Q29udGFpbmVyUmVmfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtQcmluY2lwYWx9IGZyb20gJy4vcHJpbmNpcGFsLnNlcnZpY2UnO1xyXG5cclxuLyoqXHJcbiAqIEB3aGF0SXREb2VzIENvbmRpdGlvbmFsbHkgaW5jbHVkZXMgYW4gSFRNTCBlbGVtZW50IGlmIGN1cnJlbnQgdXNlciBoYXMgYW55XHJcbiAqIG9mIHRoZSBhdXRob3JpdGllcyBwYXNzZWQgYXMgdGhlIGBleHByZXNzaW9uYC5cclxuICpcclxuICogQGhvd1RvVXNlXHJcbiAqIGBgYFxyXG4gKiAgICAgPHNvbWUtZWxlbWVudCAqamhpSGFzQW55QXV0aG9yaXR5PVwiJ1JPTEVfQURNSU4nXCI+Li4uPC9zb21lLWVsZW1lbnQ+XHJcbiAqXHJcbiAqICAgICA8c29tZS1lbGVtZW50ICpqaGlIYXNBbnlBdXRob3JpdHk9XCJbJ1JPTEVfQURNSU4nLCAnUk9MRV9QT1JUQUwnXVwiPi4uLjwvc29tZS1lbGVtZW50PlxyXG4gKiBgYGBcclxuICovXHJcbkBEaXJlY3RpdmUoe1xyXG4gICAgc2VsZWN0b3I6ICdbamhpSGFzQW55QXV0aG9yaXR5XSdcclxufSlcclxuZXhwb3J0IGNsYXNzIEhhc0FueUF1dGhvcml0eURpcmVjdGl2ZSB7XHJcbiAgICBwcml2YXRlIGF1dGhvcml0aWVzOiBzdHJpbmdbXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHByaW5jaXBhbDogUHJpbmNpcGFsLCBwcml2YXRlIHRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxhbnk+LCBwcml2YXRlIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYpIHt9XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHNldCBqaGlIYXNBbnlBdXRob3JpdHkodmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdKSB7XHJcbiAgICAgICAgdGhpcy5hdXRob3JpdGllcyA9IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgPyBbdmFsdWVdIDogdmFsdWU7XHJcbiAgICAgICAgdGhpcy51cGRhdGVWaWV3KCk7XHJcbiAgICAgICAgLy8gR2V0IG5vdGlmaWVkIGVhY2ggdGltZSBhdXRoZW50aWNhdGlvbiBzdGF0ZSBjaGFuZ2VzLlxyXG4gICAgICAgIHRoaXMucHJpbmNpcGFsLmdldEF1dGhlbnRpY2F0aW9uU3RhdGUoKS5zdWJzY3JpYmUoaWRlbnRpdHkgPT4gdGhpcy51cGRhdGVWaWV3KCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdXBkYXRlVmlldygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnByaW5jaXBhbC5oYXNBbnlBdXRob3JpdHkodGhpcy5hdXRob3JpdGllcykudGhlbihyZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnZpZXdDb250YWluZXJSZWYuY2xlYXIoKTtcclxuICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy52aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLnRlbXBsYXRlUmVmKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgU2Vzc2lvblN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnbmd4LXdlYnN0b3JhZ2UnO1xyXG5cclxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcclxuZXhwb3J0IGNsYXNzIFN0YXRlU3RvcmFnZVNlcnZpY2Uge1xyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSAkc2Vzc2lvblN0b3JhZ2U6IFNlc3Npb25TdG9yYWdlU2VydmljZSkge31cclxuXHJcbiAgICBnZXRQcmV2aW91c1N0YXRlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRzZXNzaW9uU3RvcmFnZS5yZXRyaWV2ZSgncHJldmlvdXNTdGF0ZScpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0UHJldmlvdXNTdGF0ZSgpIHtcclxuICAgICAgICB0aGlzLiRzZXNzaW9uU3RvcmFnZS5jbGVhcigncHJldmlvdXNTdGF0ZScpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0b3JlUHJldmlvdXNTdGF0ZShwcmV2aW91c1N0YXRlTmFtZSwgcHJldmlvdXNTdGF0ZVBhcmFtcykge1xyXG4gICAgICAgIGNvbnN0IHByZXZpb3VzU3RhdGUgPSB7IG5hbWU6IHByZXZpb3VzU3RhdGVOYW1lLCBwYXJhbXM6IHByZXZpb3VzU3RhdGVQYXJhbXMgfTtcclxuICAgICAgICB0aGlzLiRzZXNzaW9uU3RvcmFnZS5zdG9yZSgncHJldmlvdXNTdGF0ZScsIHByZXZpb3VzU3RhdGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldERlc3RpbmF0aW9uU3RhdGUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJHNlc3Npb25TdG9yYWdlLnJldHJpZXZlKCdkZXN0aW5hdGlvblN0YXRlJyk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RvcmVVcmwodXJsOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLiRzZXNzaW9uU3RvcmFnZS5zdG9yZSgncHJldmlvdXNVcmwnLCB1cmwpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFVybCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kc2Vzc2lvblN0b3JhZ2UucmV0cmlldmUoJ3ByZXZpb3VzVXJsJyk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RvcmVEZXN0aW5hdGlvblN0YXRlKGRlc3RpbmF0aW9uU3RhdGUsIGRlc3RpbmF0aW9uU3RhdGVQYXJhbXMsIGZyb21TdGF0ZSkge1xyXG4gICAgICAgIGNvbnN0IGRlc3RpbmF0aW9uSW5mbyA9IHtcclxuICAgICAgICAgICAgZGVzdGluYXRpb246IHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IGRlc3RpbmF0aW9uU3RhdGUubmFtZSxcclxuICAgICAgICAgICAgICAgIGRhdGE6IGRlc3RpbmF0aW9uU3RhdGUuZGF0YVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBwYXJhbXM6IGRlc3RpbmF0aW9uU3RhdGVQYXJhbXMsXHJcbiAgICAgICAgICAgIGZyb206IHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IGZyb21TdGF0ZS5uYW1lXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuJHNlc3Npb25TdG9yYWdlLnN0b3JlKCdkZXN0aW5hdGlvblN0YXRlJywgZGVzdGluYXRpb25JbmZvKTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0h0dHBDbGllbnR9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHttYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHtMb2NhbFN0b3JhZ2VTZXJ2aWNlLCBTZXNzaW9uU3RvcmFnZVNlcnZpY2V9IGZyb20gJ25neC13ZWJzdG9yYWdlJztcclxuXHJcbmNvbnN0IFNFUlZFUl9BUElfVVJMID0gJy4vJztcclxuXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXHJcbmV4cG9ydCBjbGFzcyBBdXRoU2VydmVyUHJvdmlkZXIge1xyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LCBwcml2YXRlICRsb2NhbFN0b3JhZ2U6IExvY2FsU3RvcmFnZVNlcnZpY2UsIHByaXZhdGUgJHNlc3Npb25TdG9yYWdlOiBTZXNzaW9uU3RvcmFnZVNlcnZpY2UpIHt9XHJcblxyXG4gICAgZ2V0VG9rZW4oKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJGxvY2FsU3RvcmFnZS5yZXRyaWV2ZSgnYXV0aGVudGljYXRpb25Ub2tlbicpIHx8IHRoaXMuJHNlc3Npb25TdG9yYWdlLnJldHJpZXZlKCdhdXRoZW50aWNhdGlvblRva2VuJyk7XHJcbiAgICB9XHJcblxyXG4gICAgbG9naW4oY3JlZGVudGlhbHMpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChTRVJWRVJfQVBJX1VSTCArICdhcGkvYXV0aGVudGljYXRlJywgY3JlZGVudGlhbHMsIHsgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyB9KS5waXBlKG1hcChhdXRoZW50aWNhdGVTdWNjZXNzLmJpbmQodGhpcykpKTtcclxuXHJcbiAgICAgICAgZnVuY3Rpb24gYXV0aGVudGljYXRlU3VjY2VzcyhyZXNwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGJlYXJlclRva2VuID0gcmVzcC5oZWFkZXJzLmdldCgnQXV0aG9yaXphdGlvbicpO1xyXG4gICAgICAgICAgICBpZiAoYmVhcmVyVG9rZW4gJiYgYmVhcmVyVG9rZW4uc2xpY2UoMCwgNykgPT09ICdCZWFyZXIgJykge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgand0ID0gYmVhcmVyVG9rZW4uc2xpY2UoNywgYmVhcmVyVG9rZW4ubGVuZ3RoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RvcmVBdXRoZW50aWNhdGlvblRva2VuKGp3dCwgY3JlZGVudGlhbHMucmVtZW1iZXJNZSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gand0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxvZ2luV2l0aFRva2VuKGp3dCwgcmVtZW1iZXJNZSkge1xyXG4gICAgICAgIGlmIChqd3QpIHtcclxuICAgICAgICAgICAgdGhpcy5zdG9yZUF1dGhlbnRpY2F0aW9uVG9rZW4oand0LCByZW1lbWJlck1lKTtcclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShqd3QpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCgnYXV0aC1qd3Qtc2VydmljZSBQcm9taXNlIHJlamVjdCcpOyAvLyBQdXQgYXBwcm9wcmlhdGUgZXJyb3IgbWVzc2FnZSBoZXJlXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHN0b3JlQXV0aGVudGljYXRpb25Ub2tlbihqd3QsIHJlbWVtYmVyTWUpIHtcclxuICAgICAgICBpZiAocmVtZW1iZXJNZSkge1xyXG4gICAgICAgICAgICB0aGlzLiRsb2NhbFN0b3JhZ2Uuc3RvcmUoJ2F1dGhlbnRpY2F0aW9uVG9rZW4nLCBqd3QpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuJHNlc3Npb25TdG9yYWdlLnN0b3JlKCdhdXRoZW50aWNhdGlvblRva2VuJywgand0KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbG9nb3V0KCk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKG9ic2VydmVyID0+IHtcclxuICAgICAgICAgICAgdGhpcy4kbG9jYWxTdG9yYWdlLmNsZWFyKCdhdXRoZW50aWNhdGlvblRva2VuJyk7XHJcbiAgICAgICAgICAgIHRoaXMuJHNlc3Npb25TdG9yYWdlLmNsZWFyKCdhdXRoZW50aWNhdGlvblRva2VuJyk7XHJcbiAgICAgICAgICAgIHRoaXMuJHNlc3Npb25TdG9yYWdlLmNsZWFyKCdsb2NrUGFnZXNOYXZpZ2F0aW9uJyk7XHJcbiAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtOZ01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7SGFzQW55QXV0aG9yaXR5RGlyZWN0aXZlfSBmcm9tICcuL2hhcy1hbnktYXV0aG9yaXR5LmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7QWNjb3VudFNlcnZpY2V9IGZyb20gJy4vYWNjb3VudC5zZXJ2aWNlJztcclxuaW1wb3J0IHtQcmluY2lwYWx9IGZyb20gJy4vcHJpbmNpcGFsLnNlcnZpY2UnO1xyXG5pbXBvcnQge1N0YXRlU3RvcmFnZVNlcnZpY2V9IGZyb20gJy4vc3RhdGUtc3RvcmFnZS5zZXJ2aWNlJztcclxuaW1wb3J0IHtBdXRoU2VydmVyUHJvdmlkZXJ9IGZyb20gJy4vYXV0aC1qd3Quc2VydmljZSc7XHJcblxyXG5ATmdNb2R1bGUoe1xyXG4gICAgZGVjbGFyYXRpb25zOiBbXHJcbiAgICAgIEhhc0FueUF1dGhvcml0eURpcmVjdGl2ZVxyXG4gICAgXSxcclxuICAgIGltcG9ydHM6IFtcclxuICAgIF0sXHJcbiAgICBleHBvcnRzOiBbXHJcbiAgICAgIEhhc0FueUF1dGhvcml0eURpcmVjdGl2ZVxyXG4gICAgXSxcclxuICAgIHByb3ZpZGVyczogW1xyXG4gICAgICBBY2NvdW50U2VydmljZSxcclxuICAgICAgUHJpbmNpcGFsLFxyXG4gICAgICBTdGF0ZVN0b3JhZ2VTZXJ2aWNlLFxyXG4gICAgICBBdXRoU2VydmVyUHJvdmlkZXJcclxuICAgIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIEF1dGhNb2R1bGUge31cclxuIiwiaW1wb3J0IHtDVVNUT01fRUxFTUVOVFNfU0NIRU1BLCBOZ01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7UGFnaW5hUGFyYW1ldHJpemFkYUNvbXBvbmVudH0gZnJvbSAnLi9wYWdpbmEtcGFyYW1ldHJpemFkYS5jb21wb25lbnQnO1xyXG5pbXBvcnQge05nSmhpcHN0ZXJNb2R1bGV9IGZyb20gJ25nLWpoaXBzdGVyJztcclxuaW1wb3J0IHtBdXRoTW9kdWxlfSBmcm9tICcuLi8uLi9hdXRoL2F1dGgubW9kdWxlJztcclxuaW1wb3J0IHtGb250QXdlc29tZU1vZHVsZX0gZnJvbSAnQGZvcnRhd2Vzb21lL2FuZ3VsYXItZm9udGF3ZXNvbWUnO1xyXG5cclxuQE5nTW9kdWxlKHtcclxuICAgIGltcG9ydHM6IFtcclxuICAgICAgQXV0aE1vZHVsZSxcclxuICAgICAgTmdKaGlwc3Rlck1vZHVsZSxcclxuICAgICAgRm9udEF3ZXNvbWVNb2R1bGVcclxuICAgIF0sXHJcbiAgICBkZWNsYXJhdGlvbnM6IFtQYWdpbmFQYXJhbWV0cml6YWRhQ29tcG9uZW50XSxcclxuICAgIGV4cG9ydHM6IFtQYWdpbmFQYXJhbWV0cml6YWRhQ29tcG9uZW50XSxcclxuICAgIHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgUGFnaW5hUGFyYW1ldHJpemFkYU1vZHVsZSB7IH1cclxuIiwiZXhwb3J0IGVudW0gQ2FwdGNoYVByb3ZpZGVyRW51bSB7XHJcbiAgICBSRUNBUFRDSEFfVjIgPSAnUkVDQVBUQ0hBX1YyJyxcclxuICAgIFJFQ0FQVENIQV9WMyA9ICdSRUNBUFRDSEFfVjMnLFxyXG4gICAgVFVSTlNUSUxFID0gJ1RVUk5TVElMRSdcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDYXB0Y2hhQ29uZmlnTW9kZWwge1xyXG4gICAgcHJvdmlkZXI6IENhcHRjaGFQcm92aWRlckVudW0gfCBzdHJpbmc7XHJcbiAgICBzaXRlS2V5OiBzdHJpbmc7XHJcbn1cclxuIiwiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtIdHRwQ2xpZW50fSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7Zm9ya0pvaW59IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge0NhcHRjaGFDb25maWdNb2RlbCwgQ2FwdGNoYVByb3ZpZGVyRW51bX0gZnJvbSAnLi9tdWx0aXBsZS1jYXB0Y2hhLm1vZGVsJztcclxuaW1wb3J0IHtQYXJhbWV0cm99IGZyb20gJy4uLy4uL21vZGVsJztcclxuaW1wb3J0IHtVdGlsRnVuY3Rpb25zfSBmcm9tICcuLi8uLi91dGlsJztcclxuXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXHJcbmV4cG9ydCBjbGFzcyBNdWx0aXBsZUNhcHRjaGFTZXJ2aWNlIHtcclxuXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IERFRkFVTFRfU0lURV9LRVkgPSAnNkxkWFhYMFVBQUFBQUFrUTJrNnV3RExLLVNMNVN6X1VueDVhYzhXeCc7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQpIHt9XHJcblxyXG4gICAgZ2V0Q29uZmlnKCk6IFByb21pc2U8Q2FwdGNoYUNvbmZpZ01vZGVsPiB7XHJcblxyXG4gICAgICAgIHJldHVybiBmb3JrSm9pbihbXHJcbiAgICAgICAgICAgIHRoaXMuaHR0cC5nZXQ8UGFyYW1ldHJvPignL2FwaS9wdWJsaWMvcGFyYW1ldHJvcy9DQVBUQ0hBX1BST1ZJREVSLyonKSxcclxuICAgICAgICAgICAgdGhpcy5odHRwLmdldDxQYXJhbWV0cm8+KCcvYXBpL3B1YmxpYy9wYXJhbWV0cm9zL0NBUFRDSEFfU0lURV9LRVkvKicpXHJcbiAgICAgICAgXSlcclxuICAgICAgICAgICAgLnRvUHJvbWlzZSgpXHJcbiAgICAgICAgICAgIC50aGVuKChbcHJvdmlkZXJQYXJhbSwgc2l0ZUtleVBhcmFtXSkgPT4ge1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbmZpZzogQ2FwdGNoYUNvbmZpZ01vZGVsID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIHByb3ZpZGVyOiBwcm92aWRlclBhcmFtLnZhbG9yIGFzIENhcHRjaGFQcm92aWRlckVudW0sXHJcbiAgICAgICAgICAgICAgICAgICAgc2l0ZUtleTogc2l0ZUtleVBhcmFtLnZhbG9yXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgaWYgKFV0aWxGdW5jdGlvbnMuaXNWYWxpZFN0cmluZ09yQXJyYXkoY29uZmlnLnByb3ZpZGVyKSA9PT0gZmFsc2UgfHwgIVV0aWxGdW5jdGlvbnMuaXNWYWxpZFN0cmluZ09yQXJyYXkoY29uZmlnLnNpdGVLZXkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uZmlnLnByb3ZpZGVyID0gJ1JFQ0FQVENIQV9WMic7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uZmlnLnNpdGVLZXkgPSB0aGlzLkRFRkFVTFRfU0lURV9LRVk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbmZpZztcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmNhdGNoKGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvIGFvIGNhcnJlZ2FyIGNvbmZpZ3VyYcODwqfDg8KjbyBkZSBjYXB0Y2hhJywgZXJyKTtcclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHByb3ZpZGVyOiAnUkVDQVBUQ0hBX1YyJyxcclxuICAgICAgICAgICAgICAgICAgICBzaXRlS2V5OiB0aGlzLkRFRkFVTFRfU0lURV9LRVlcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbiIsImV4cG9ydCBjb25zdCBNVUxUSVBMRV9DQVBUQ0hBX1BUX0JSID0ge1xyXG4gIFwibXVsdGlwbGVDYXB0Y2hhXCI6IHtcclxuICAgIFwidHVybnNUaWxlXCIgOiB7XHJcbiAgICAgIFwibG9hZEVycm9yXCI6IFwiRXJybyBhbyBjYXJyZWdhciBUdXJuc3RpbGVcIlxyXG4gICAgfSxcclxuICAgIFwicmVDYXB0Y2hhVjNcIiA6IHtcclxuICAgICAgXCJsb2FkRXJyb3JcIjogXCJOw4PCo28gZm9pIHBvc3PDg8KtdmVsIGNhcnJlZ2FyIG8gcmVDQVBUQ0hBIHYzXCIsXHJcbiAgICAgIFwiaW52YWxpZEtleVwiOiBcIkNoYXZlIGRvIHJlQ0FQVENIQSBpbnbDg8KhbGlkYSBvdSBkb23Dg8KtbmlvIG7Dg8KjbyBhdXRvcml6YWRvXCIsXHJcbiAgICAgIFwidmFsaWRhdGlvbkVycm9yXCI6IFwiRmFsaGEgbmEgdmFsaWRhw4PCp8ODwqNvIGRvIGNhcHRjaGFcIixcclxuICAgICAgXCJodW1hblZlcmlmaWNhdGlvbnNcIjogXCJWZXJpZmljYW5kbyBzZSB2b2PDg8KqIMODwqkgaHVtYW5vw6LCgMKmXCIsXHJcbiAgICAgIFwic3VjY2Vzc1ZlcmlmaWNhdGlvblwiOiBcIkNhcHRjaGEgdmVyaWZpY2FkbyBjb20gc3VjZXNzb1wiXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCB7XHJcbiAgQWZ0ZXJWaWV3SW5pdCxcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBDb21wb25lbnQsXHJcbiAgRWxlbWVudFJlZixcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSW5wdXQsXHJcbiAgTmdab25lLFxyXG4gIE9uSW5pdCxcclxuICBPdXRwdXQsXHJcbiAgVmlld0NoaWxkXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7Q2FwdGNoYUNvbmZpZ01vZGVsLCBDYXB0Y2hhUHJvdmlkZXJFbnVtfSBmcm9tICcuL211bHRpcGxlLWNhcHRjaGEubW9kZWwnO1xyXG5pbXBvcnQge011bHRpcGxlQ2FwdGNoYVNlcnZpY2V9IGZyb20gJy4vbXVsdGlwbGUtY2FwdGNoYS5zZXJ2aWNlJztcclxuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuaW1wb3J0IHtVdGlsRnVuY3Rpb25zfSBmcm9tICcuLi8uLi91dGlsJztcclxuaW1wb3J0IHtNVUxUSVBMRV9DQVBUQ0hBX1BUX0JSfSBmcm9tICcuL2kxOG4vcHQtYnInO1xyXG5cclxuZGVjbGFyZSBnbG9iYWwge1xyXG4gIGludGVyZmFjZSBXaW5kb3cge1xyXG4gICAgdHVybnN0aWxlOiBhbnk7XHJcbiAgfVxyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2poaS1tdWx0aXBsZS1jYXB0Y2hhJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vbXVsdGlwbGUtY2FwdGNoYS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vbXVsdGlwbGUtY2FwdGNoYS5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNdWx0aXBsZUNhcHRjaGFDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xyXG4gIEBWaWV3Q2hpbGQoJ3R1cm5zdGlsZUNvbnRhaW5lcicpIHR1cm5zdGlsZUNvbnRhaW5lcjogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdyZWNhcHRjaGFWMicpIHJlY2FwdGNoYVYyOiBhbnk7XHJcbiAgcHJpdmF0ZSBfYWN0aW9uID0gJ2luaXQnO1xyXG4gIEBJbnB1dCgpIHZhbGlkYXRlZCA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX2N1c3RvbUVycm9yOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuICBAT3V0cHV0KCkgdmFsaWRhdGVkQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xyXG4gIEBPdXRwdXQoKSByZXNvbHZlZCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG4gIHByaXZhdGUgdHVybnN0aWxlV2lkZ2V0SWQ6IGFueTtcclxuICBwcml2YXRlIGNhcHRjaGFUcmFuc2xhdGlvbnNMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBnZXQgYWN0aW9uKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fYWN0aW9uO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgYWN0aW9uKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHZhbHVlID0gVXRpbEZ1bmN0aW9ucy5zYW5pdGl6ZVJlY2FwdGNoYUFjdGlvbih2YWx1ZSk7XHJcbiAgICB0aGlzLl9hY3Rpb24gPSB2YWx1ZTtcclxuICB9XHJcbiAgZ2V0IGN1c3RvbUVycm9yKCk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMuX2N1c3RvbUVycm9yO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgY3VzdG9tRXJyb3IodmFsdWU6IHN0cmluZyB8IG51bGwpIHtcclxuICAgIHRoaXMuX2N1c3RvbUVycm9yID0gdmFsdWU7XHJcbiAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgY29uZmlnOiBDYXB0Y2hhQ29uZmlnTW9kZWw7XHJcbiAgZXJyb3I6IHN0cmluZyB8IG51bGwgPSBudWxsOyAvLyBub3ZvIGNhbXBvIG5vIGNvbXBvbmVudGVcclxuICBwcml2YXRlIHR1cm5zdGlsZVJlbmRlcmVkID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSB0dXJuc3RpbGVMb2FkaW5nPzogUHJvbWlzZTx2b2lkPjtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIF9jYXB0Y2hhU2VydmljZTogTXVsdGlwbGVDYXB0Y2hhU2VydmljZSxcclxuICAgIHByaXZhdGUgX25nWm9uZTogTmdab25lLFxyXG4gICAgcHJpdmF0ZSBfY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHB1YmxpYyB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICB9XHJcblxyXG4gIGFzeW5jIG5nQWZ0ZXJWaWV3SW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMudmFsaWRhdGVkID0gZmFsc2U7XHJcbiAgICByZXR1cm4gdGhpcy5fY2FwdGNoYVNlcnZpY2UuZ2V0Q29uZmlnKCkudGhlbihhc3luYyBjb25maWcgPT4ge1xyXG4gICAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcclxuICAgICAgaWYgKHRoaXMuY29uZmlnLnByb3ZpZGVyID09PSBDYXB0Y2hhUHJvdmlkZXJFbnVtLlRVUk5TVElMRSkge1xyXG4gICAgICAgIGF3YWl0IHRoaXMubG9hZFR1cm5zdGlsZVNjcmlwdCgpO1xyXG4gICAgICAgIHRoaXMucmVuZGVyVHVybnN0aWxlKCk7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jb25maWcucHJvdmlkZXIgPT09IENhcHRjaGFQcm92aWRlckVudW0uUkVDQVBUQ0hBX1YzKSB7XHJcbiAgICAgICAgdGhpcy5leGVjdXRlVjMoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09XHJcbiAgLy8gVFVSTlNUSUxFXHJcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5cclxuICBwcml2YXRlIGxvYWRUdXJuc3RpbGVTY3JpcHQoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAod2luZG93LnR1cm5zdGlsZSkge1xyXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMudHVybnN0aWxlTG9hZGluZykge1xyXG4gICAgICByZXR1cm4gdGhpcy50dXJuc3RpbGVMb2FkaW5nO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudHVybnN0aWxlTG9hZGluZyA9IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgY29uc3Qgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XHJcbiAgICAgIHNjcmlwdC5zcmMgPSAnaHR0cHM6Ly9jaGFsbGVuZ2VzLmNsb3VkZmxhcmUuY29tL3R1cm5zdGlsZS92MC9hcGkuanMnO1xyXG4gICAgICBzY3JpcHQuYXN5bmMgPSB0cnVlO1xyXG4gICAgICBzY3JpcHQuZGVmZXIgPSB0cnVlO1xyXG5cclxuICAgICAgc2NyaXB0Lm9ubG9hZCA9ICgpID0+IHJlc29sdmUoKTtcclxuICAgICAgc2NyaXB0Lm9uZXJyb3IgPSAoKSA9PiByZWplY3QodGhpcy5nZXRUcmFuc2xhdGlvbignbXVsdGlwbGVDYXB0Y2hhLnR1cm5zVGlsZS5sb2FkRXJyb3InKSk7XHJcblxyXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHNjcmlwdCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy50dXJuc3RpbGVMb2FkaW5nO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZW5kZXJUdXJuc3RpbGUoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy50dXJuc3RpbGVSZW5kZXJlZCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLnR1cm5zdGlsZUNvbnRhaW5lcikge1xyXG4gICAgICAvLyB0ZW50YSBub3ZhbWVudGUgbmEgcHLDg8KzeGltYSBpdGVyYcODwqfDg8KjbyBkbyBBbmd1bGFyXHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5yZW5kZXJUdXJuc3RpbGUoKSwgMTApO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy50dXJuc3RpbGVSZW5kZXJlZCA9IHRydWU7XHJcblxyXG4gICAgdGhpcy50dXJuc3RpbGVXaWRnZXRJZCA9IHdpbmRvdy50dXJuc3RpbGUucmVuZGVyKHRoaXMudHVybnN0aWxlQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQsIHtcclxuICAgICAgc2l0ZWtleTogdGhpcy5jb25maWcuc2l0ZUtleSxcclxuICAgICAgY2FsbGJhY2s6ICh0b2tlbjogc3RyaW5nKSA9PiB0aGlzLnJlc29sdmUodG9rZW4pLFxyXG4gICAgICAnZXJyb3ItY2FsbGJhY2snOiAoKSA9PiB0aGlzLnZhbGlkYXRlZCA9IGZhbHNlLFxyXG4gICAgICAnZXhwaXJlZC1jYWxsYmFjayc6ICgpID0+IHRoaXMudmFsaWRhdGVkID0gZmFsc2VcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PVxyXG4gIC8vIFJFQ0FQVENIQSAodjIgLyB2MylcclxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09XHJcblxyXG4gIG9uVG9rZW4odG9rZW46IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5yZXNvbHZlKHRva2VuKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgbG9hZFJlY2FwdGNoYVYzKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKCh3aW5kb3cgYXMgYW55KS5ncmVjYXB0Y2hhKSB7IHJldHVybjsgfVxyXG5cclxuICAgIGF3YWl0IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgY29uc3Qgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XHJcbiAgICAgIHNjcmlwdC5zcmMgPSBgaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9yZWNhcHRjaGEvYXBpLmpzP3JlbmRlcj0ke3RoaXMuY29uZmlnLnNpdGVLZXl9YDtcclxuICAgICAgc2NyaXB0LmFzeW5jID0gdHJ1ZTtcclxuICAgICAgc2NyaXB0LmRlZmVyID0gdHJ1ZTtcclxuICAgICAgc2NyaXB0Lm9ubG9hZCA9ICgpID0+IHJlc29sdmUoKTtcclxuICAgICAgc2NyaXB0Lm9uZXJyb3IgPSAoKSA9PiByZWplY3QoKTtcclxuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChzY3JpcHQpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBleGVjdXRlVjMoKSB7XHJcbiAgICB0aGlzLmxvYWRSZWNhcHRjaGFWMygpXHJcbiAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICh3aW5kb3cgYXMgYW55KS5ncmVjYXB0Y2hhLnJlYWR5KCgpID0+IHtcclxuXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIGNvbnN0IGV4ZWNQcm9taXNlID0gKHdpbmRvdyBhcyBhbnkpLmdyZWNhcHRjaGEuZXhlY3V0ZShcclxuICAgICAgICAgICAgdGhpcy5jb25maWcuc2l0ZUtleSxcclxuICAgICAgICAgICAgeyBhY3Rpb246IHRoaXMuX2FjdGlvbiB9XHJcbiAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgIFByb21pc2UucmVzb2x2ZShleGVjUHJvbWlzZSlcclxuICAgICAgICAgIC50aGVuKCh0b2tlbjogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuX25nWm9uZS5ydW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBudWxsO1xyXG4gICAgICAgICAgICAgIHRoaXMudmFsaWRhdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB0aGlzLnJlc29sdmUodG9rZW4pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICAuY2F0Y2goKGVycjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlQ2FwdGNoYUVycm9yKGVycik7XHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAvLyDDsMKfwpTCpSBFUlJPIFPDg8KNTkNST05PIChlc3NlIMODwqkgbyBzZXUgY2FzbylcclxuICAgICAgICAgIHRoaXMuaGFuZGxlQ2FwdGNoYUVycm9yKGVycik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgfSk7XHJcbiAgICB9KVxyXG4gICAgLmNhdGNoKGVyciA9PiB7XHJcbiAgICAgIHRoaXMuaGFuZGxlQ2FwdGNoYUVycm9yKGVyciwgdHJ1ZSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlQ2FwdGNoYUVycm9yKGVycjogYW55LCBzY3JpcHRFcnJvciA9IGZhbHNlKSB7XHJcbiAgICB0aGlzLl9uZ1pvbmUucnVuKCgpID0+IHtcclxuICAgICAgY29uc29sZS5lcnJvcignRXJybyByZUNBUFRDSEEgdjM6JywgZXJyKTtcclxuICAgICAgdGhpcy52YWxpZGF0ZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgIGlmIChzY3JpcHRFcnJvcikge1xyXG4gICAgICAgIHRoaXMuZXJyb3IgPSB0aGlzLmdldFRyYW5zbGF0aW9uKCdtdWx0aXBsZUNhcHRjaGEucmVDYXB0Y2hhVjMubG9hZEVycm9yJyk7XHJcbiAgICAgIH0gZWxzZSBpZiAoU3RyaW5nKGVycikuaW5jbHVkZXMoJ0ludmFsaWQgc2l0ZSBrZXknKSkge1xyXG4gICAgICAgIHRoaXMuZXJyb3IgPSB0aGlzLmdldFRyYW5zbGF0aW9uKCdtdWx0aXBsZUNhcHRjaGEucmVDYXB0Y2hhVjMuaW52YWxpZEtleScpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZXJyb3IgPSB0aGlzLmdldFRyYW5zbGF0aW9uKCdtdWx0aXBsZUNhcHRjaGEucmVDYXB0Y2hhVjMudmFsaWRhdGlvbkVycm9yJyk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5lcnJvciArPSAnOiAnICsgZXJyO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlc29sdmUodG9rZW46IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy52YWxpZGF0ZWQgPSB0cnVlO1xyXG4gICAgdGhpcy52YWxpZGF0ZWRDaGFuZ2UuZW1pdCh0aGlzLnZhbGlkYXRlZCk7XHJcbiAgICB0aGlzLnJlc29sdmVkLmVtaXQodG9rZW4pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldFRyYW5zbGF0aW9uKGtleTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGxhbmcgPVxyXG4gICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuY3VycmVudExhbmcgfHxcclxuICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmdldERlZmF1bHRMYW5nKCkgfHxcclxuICAgICAgJ3B0LWJyJztcclxuXHJcbiAgICBsZXQgdmFsdWUgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChrZXkpO1xyXG4gICAgY29uc3Qgbm90Rm91bmQgPVxyXG4gICAgICB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmXHJcbiAgICAgIHZhbHVlLnN0YXJ0c1dpdGgoJ3RyYW5zbGF0aW9uLW5vdC1mb3VuZFsnKTtcclxuXHJcbiAgICAvLyBuZ3gtdHJhbnNsYXRlIHJldG9ybmEgYSBwcsODwrNwcmlhIGtleSBxdWFuZG8gbsODwqNvIGVuY29udHJhXHJcbiAgICBpZiAobm90Rm91bmQgJiYgIXRoaXMuY2FwdGNoYVRyYW5zbGF0aW9uc0xvYWRlZCkge1xyXG4gICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2Uuc2V0VHJhbnNsYXRpb24obGFuZywgTVVMVElQTEVfQ0FQVENIQV9QVF9CUiwgdHJ1ZSk7XHJcbiAgICAgIHRoaXMuY2FwdGNoYVRyYW5zbGF0aW9uc0xvYWRlZCA9IHRydWU7XHJcblxyXG4gICAgICAvLyB0ZW50YSBub3ZhbWVudGUgYXDDg8KzcyByZWdpc3RyYXJcclxuICAgICAgdmFsdWUgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChrZXkpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB2YWx1ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZXNldCgpOiB2b2lkIHtcclxuICAgIHRoaXMuX25nWm9uZS5ydW4oKCkgPT4ge1xyXG4gICAgICB0aGlzLnZhbGlkYXRlZCA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmVycm9yID0gbnVsbDtcclxuICAgICAgdGhpcy5fY3VzdG9tRXJyb3IgPSBudWxsO1xyXG5cclxuICAgICAgdGhpcy52YWxpZGF0ZWRDaGFuZ2UuZW1pdChmYWxzZSk7XHJcblxyXG4gICAgICBpZiAoIXRoaXMuY29uZmlnKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBzd2l0Y2ggKHRoaXMuY29uZmlnLnByb3ZpZGVyKSB7XHJcblxyXG4gICAgICAgIGNhc2UgQ2FwdGNoYVByb3ZpZGVyRW51bS5SRUNBUFRDSEFfVjI6XHJcbiAgICAgICAgICB0aGlzLnJlc2V0UmVjYXB0Y2hhVjIoKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIENhcHRjaGFQcm92aWRlckVudW0uUkVDQVBUQ0hBX1YzOlxyXG4gICAgICAgICAgdGhpcy5yZXNldFJlY2FwdGNoYVYzKCk7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSBDYXB0Y2hhUHJvdmlkZXJFbnVtLlRVUk5TVElMRTpcclxuICAgICAgICAgIHRoaXMucmVzZXRUdXJuc3RpbGUoKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbiAgcHJpdmF0ZSByZXNldFJlY2FwdGNoYVYyKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMucmVjYXB0Y2hhVjIpIHtcclxuICAgICAgdGhpcy5yZWNhcHRjaGFWMi5yZXNldCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZXNldFJlY2FwdGNoYVYzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5leGVjdXRlVjMoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVzZXRUdXJuc3RpbGUoKTogdm9pZCB7XHJcbiAgICBpZiAod2luZG93LnR1cm5zdGlsZSAmJiB0aGlzLnR1cm5zdGlsZVdpZGdldElkKSB7XHJcbiAgICAgIHdpbmRvdy50dXJuc3RpbGUucmVzZXQodGhpcy50dXJuc3RpbGVXaWRnZXRJZCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCB7TmdNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0Zvcm1zTW9kdWxlfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7Q29tbW9uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQge011bHRpcGxlQ2FwdGNoYUNvbXBvbmVudH0gZnJvbSAnLi9tdWx0aXBsZS1jYXB0Y2hhLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7UmVjYXB0Y2hhTW9kdWxlfSBmcm9tICduZy1yZWNhcHRjaGEnO1xyXG5pbXBvcnQge1JlY2FwdGNoYUNvbW1vbk1vZHVsZX0gZnJvbSAnbmctcmVjYXB0Y2hhL3JlY2FwdGNoYS9yZWNhcHRjaGEtY29tbW9uLm1vZHVsZSc7XHJcblxyXG5ATmdNb2R1bGUoe1xyXG4gICAgaW1wb3J0czogW0Zvcm1zTW9kdWxlLCBDb21tb25Nb2R1bGUsIFJlY2FwdGNoYUNvbW1vbk1vZHVsZSwgUmVjYXB0Y2hhTW9kdWxlXSxcclxuICAgIGRlY2xhcmF0aW9uczogW011bHRpcGxlQ2FwdGNoYUNvbXBvbmVudF0sXHJcbiAgICBleHBvcnRzOiBbTXVsdGlwbGVDYXB0Y2hhQ29tcG9uZW50XVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTXVsdGlwbGVDYXB0Y2hhTW9kdWxlIHt9XHJcbiIsImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7SHR0cENsaWVudCwgSHR0cFJlc3BvbnNlfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtOb3RpZmljYWNhb30gZnJvbSAnLi4vLi4vbW9kZWwvbm90aWZpY2FjYW8ubW9kZWwnO1xyXG5pbXBvcnQge0xpc3RhQ29kaWdvc30gZnJvbSAnLi4vLi4vbW9kZWwvbGlzdGEtY29kaWdvcyc7XHJcbmltcG9ydCB7QmFzaWNSZXNwb3N0YX0gZnJvbSAnLi4vLi4vbW9kZWwvYmFzaWMtcmVzcG9zdGEubW9kZWwnO1xyXG5cclxuY29uc3QgU0VSVkVSX0FQSV9VUkwgPSAnLi8nO1xyXG5cclxuQEluamVjdGFibGUoe3Byb3ZpZGVkSW46ICdyb290J30pXHJcbmV4cG9ydCBjbGFzcyBOb3RpZmljYWNvZXNTZXJ2aWNlIHtcclxuICAgIHB1YmxpYyByZXNvdXJjZVVybCA9IFNFUlZFUl9BUElfVVJMICsgJ2FwaS9ub3RpZmljYWNvZXMnO1xyXG4gICAgcHJpdmF0ZSBub3RpZmljYWNvZXNFbUNhY2hlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxOb3RpZmljYWNhb1tdPihbXSk7XHJcbiAgICBwcml2YXRlIHVsdGltb0NhcnJlZ2FtZW50b0VtTXM6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSB0ZW1wb1ZpZGFDYWNoZU1zID0gNjAwMDA7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50KSB7XHJcbiAgICB9XHJcblxyXG4gICAgYnVzY2FyTm90aWZpY2Fjb2VzKGZvcmNhckF0dWFsaXphY2FvOiBib29sZWFuID0gZmFsc2UpOiBQcm9taXNlPE5vdGlmaWNhY2FvW10+IHtcclxuICAgICAgICBjb25zdCBjYWNoZUF0dWFsID0gdGhpcy5ub3RpZmljYWNvZXNFbUNhY2hlLmdldFZhbHVlKCk7XHJcbiAgICAgICAgY29uc3QgZGF0YUF0dWFsID0gRGF0ZS5ub3coKTtcclxuICAgICAgICBpZiAoIWZvcmNhckF0dWFsaXphY2FvICYmIGNhY2hlQXR1YWwgJiYgdGhpcy51bHRpbW9DYXJyZWdhbWVudG9FbU1zICYmIChkYXRhQXR1YWwgLSB0aGlzLnVsdGltb0NhcnJlZ2FtZW50b0VtTXMpIDwgdGhpcy50ZW1wb1ZpZGFDYWNoZU1zKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoY2FjaGVBdHVhbCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwXHJcbiAgICAgICAgICAgIC5nZXQ8Tm90aWZpY2FjYW9bXT4odGhpcy5yZXNvdXJjZVVybCwge29ic2VydmU6ICdyZXNwb25zZSd9KVxyXG4gICAgICAgICAgICAudG9Qcm9taXNlKClcclxuICAgICAgICAgICAgLnRoZW4oKHJlc3A6IEh0dHBSZXNwb25zZTxOb3RpZmljYWNhb1tdPikgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbGlzdGEgPSByZXNwLmJvZHkgPyByZXNwLmJvZHkgOiBbXTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZW1pdGlyTGlzdGFBdHVhbGl6YWRhKGxpc3RhKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBsaXN0YTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgb2J0ZXJOb3RpZmljYWNvZXNFbUNhY2hlKCk6IE5vdGlmaWNhY2FvW10ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm5vdGlmaWNhY29lc0VtQ2FjaGUuZ2V0VmFsdWUoKTtcclxuICAgIH1cclxuXHJcbiAgICBlbWl0aXJMaXN0YUF0dWFsaXphZGEobGlzdGE6IE5vdGlmaWNhY2FvW10pIHtcclxuICAgICAgICB0aGlzLm5vdGlmaWNhY29lc0VtQ2FjaGUubmV4dChsaXN0YSA/IGxpc3RhIDogW10pO1xyXG4gICAgICAgIHRoaXMudWx0aW1vQ2FycmVnYW1lbnRvRW1NcyA9IERhdGUubm93KCk7XHJcbiAgICB9XHJcblxyXG4gICAgbGltcGFyQ2FjaGUoKSB7XHJcbiAgICAgICAgdGhpcy5ub3RpZmljYWNvZXNFbUNhY2hlLm5leHQoW10pO1xyXG4gICAgICAgIHRoaXMudWx0aW1vQ2FycmVnYW1lbnRvRW1NcyA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgYXBsaWNhck5hb0V4aWJpckxvY2FsKGNvZGlnb3M6IG51bWJlcltdKTogTm90aWZpY2FjYW9bXSB7XHJcbiAgICAgICAgaWYgKCFjb2RpZ29zIHx8IGNvZGlnb3MubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm9idGVyTm90aWZpY2Fjb2VzRW1DYWNoZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBhZ29yYSA9IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKTtcclxuICAgICAgICBjb25zdCBjb25qdW50b0NvZGlnb3MgPSBuZXcgU2V0KGNvZGlnb3MpO1xyXG4gICAgICAgIGNvbnN0IGF0dWFsaXphZGEgPSAodGhpcy5vYnRlck5vdGlmaWNhY29lc0VtQ2FjaGUoKSB8fCBbXSkubWFwKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICBjb25zdCB2YWxvcjogYW55ID0gaXRlbSBhcyBhbnk7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvZGlnbyA9IHZhbG9yID8gdmFsb3IuY29kaWdvIDogbnVsbDtcclxuICAgICAgICAgICAgaWYgKGNvZGlnbyAhPT0gbnVsbCAmJiBjb2RpZ28gIT09IHVuZGVmaW5lZCAmJiBjb25qdW50b0NvZGlnb3MuaGFzKGNvZGlnbykpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB7Li4uaXRlbSwgZGF0YU5hb0V4aWJpcjogYWdvcmF9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBpdGVtO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuZW1pdGlyTGlzdGFBdHVhbGl6YWRhKGF0dWFsaXphZGEpO1xyXG4gICAgICAgIHJldHVybiBhdHVhbGl6YWRhO1xyXG4gICAgfVxyXG5cclxuICAgIG1hcmNhck5hb0V4aWJpcihkYWRvczogTGlzdGFDb2RpZ29zKTogUHJvbWlzZTxCYXNpY1Jlc3Bvc3RhPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cFxyXG4gICAgICAgICAgICAucG9zdDxCYXNpY1Jlc3Bvc3RhPih0aGlzLnJlc291cmNlVXJsICsgJy9tYXJjYXItbmFvLWV4aWJpcicsIGRhZG9zLCB7b2JzZXJ2ZTogJ3Jlc3BvbnNlJ30pXHJcbiAgICAgICAgICAgIC50b1Byb21pc2UoKVxyXG4gICAgICAgICAgICAudGhlbigocmVzcDogSHR0cFJlc3BvbnNlPEJhc2ljUmVzcG9zdGE+KSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzcC5ib2R5IGFzIEJhc2ljUmVzcG9zdGE7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG9ic2VydmFyTm90aWZpY2Fjb2VzKCk6IE9ic2VydmFibGU8Tm90aWZpY2FjYW9bXT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm5vdGlmaWNhY29lc0VtQ2FjaGUuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtDb21wb25lbnR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge05nYkFjdGl2ZU1vZGFsfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcbmltcG9ydCB7Tm90aWZpY2FjYW99IGZyb20gJy4uLy4uL21vZGVsL25vdGlmaWNhY2FvLm1vZGVsJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdqaGktbm90aWZpY2Fjb2VzLWRldGFsaGUnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL25vdGlmaWNhY29lcy1kZXRhbGhlLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL25vdGlmaWNhY29lcy1kZXRhbGhlLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIE5vdGlmaWNhY29lc0RldGFsaGVDb21wb25lbnQge1xyXG4gICAgbm90aWZpY2FjYW86IE5vdGlmaWNhY2FvO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBhY3RpdmVNb2RhbDogTmdiQWN0aXZlTW9kYWwpIHtcclxuICAgIH1cclxuXHJcbiAgICBpbmljaWFyKG5vdGlmaWNhY2FvOiBOb3RpZmljYWNhbykge1xyXG4gICAgICAgIHRoaXMubm90aWZpY2FjYW8gPSBub3RpZmljYWNhbztcclxuICAgIH1cclxuXHJcbiAgICBmZWNoYXIoKSB7XHJcbiAgICAgICAgdGhpcy5hY3RpdmVNb2RhbC5kaXNtaXNzKCdjbG9zZScpO1xyXG4gICAgfVxyXG5cclxuICAgIG9idGVyVGl0dWxvKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuICdOb3RpZmljYcODwqfDg8Kjbyc7XHJcbiAgICB9XHJcblxyXG4gICAgb2J0ZXJNZW5zYWdlbSgpOiBzdHJpbmcge1xyXG4gICAgICAgIGNvbnN0IHZhbG9yOiBhbnkgPSB0aGlzLm5vdGlmaWNhY2FvIGFzIGFueTtcclxuICAgICAgICByZXR1cm4gdmFsb3IgPyB2YWxvci5tZW5zYWdlbSA6ICcnO1xyXG4gICAgfVxyXG5cclxuICAgIG9idGVyRGF0YUNhZGFzdHJvKCk6IGFueSB7XHJcbiAgICAgICAgY29uc3QgdmFsb3I6IGFueSA9IHRoaXMubm90aWZpY2FjYW8gYXMgYW55O1xyXG4gICAgICAgIHJldHVybiB2YWxvciA/IHZhbG9yLmRhdGFDYWRhc3RybyA6IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgb2J0ZXJEYXRhTmFvRXhpYmlyKCk6IGFueSB7XHJcbiAgICAgICAgY29uc3QgdmFsb3I6IGFueSA9IHRoaXMubm90aWZpY2FjYW8gYXMgYW55O1xyXG4gICAgICAgIHJldHVybiB2YWxvciA/IHZhbG9yLmRhdGFOYW9FeGliaXIgOiBudWxsO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7Q29tcG9uZW50fSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtOZ2JBY3RpdmVNb2RhbCwgTmdiTW9kYWx9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHtmYUV5ZX0gZnJvbSAnQGZvcnRhd2Vzb21lL2ZyZWUtc29saWQtc3ZnLWljb25zJztcclxuaW1wb3J0IHtOb3RpZmljYWNhb30gZnJvbSAnLi4vLi4vbW9kZWwvbm90aWZpY2FjYW8ubW9kZWwnO1xyXG5pbXBvcnQge05vdGlmaWNhY29lc1NlcnZpY2V9IGZyb20gJy4vbm90aWZpY2Fjb2VzLnNlcnZpY2UnO1xyXG5pbXBvcnQge1V0aWxNZW5zYWdlbX0gZnJvbSAnLi4vLi4vYWxlcnQvdXRpbC1tZW5zYWdlbSc7XHJcbmltcG9ydCB7Tm90aWZpY2Fjb2VzRGV0YWxoZUNvbXBvbmVudH0gZnJvbSAnLi9ub3RpZmljYWNvZXMtZGV0YWxoZS5jb21wb25lbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2poaS1ub3RpZmljYWNvZXMtcG9wdXAnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL25vdGlmaWNhY29lcy1wb3B1cC5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9ub3RpZmljYWNvZXMtcG9wdXAuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTm90aWZpY2Fjb2VzUG9wdXBDb21wb25lbnQge1xyXG4gICAgbm90aWZpY2Fjb2VzOiBOb3RpZmljYWNhb1tdID0gW107XHJcbiAgICBub3RpZmljYWNvZXNOb3ZhczogTm90aWZpY2FjYW9bXSA9IFtdO1xyXG4gICAgbm90aWZpY2Fjb2VzQW50aWdhczogTm90aWZpY2FjYW9bXSA9IFtdO1xyXG4gICAgc2VsZWNpb25hZG9zOiB7IFtrZXk6IG51bWJlcl06IGJvb2xlYW4gfSA9IHt9O1xyXG5cclxuICAgIGNvZGlnb3NWaXN1YWxpemFkb3MgPSBuZXcgU2V0PG51bWJlcj4oKTtcclxuICAgIGNhcnJlZ2FuZG8gPSBmYWxzZTtcclxuICAgIGZhRXllID0gZmFFeWU7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHVibGljIGFjdGl2ZU1vZGFsOiBOZ2JBY3RpdmVNb2RhbCxcclxuICAgICAgICBwcml2YXRlIG1vZGFsU2VydmljZTogTmdiTW9kYWwsXHJcbiAgICAgICAgcHJpdmF0ZSBub3RpZmljYWNvZXNTZXJ2aWNlOiBOb3RpZmljYWNvZXNTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgdXRpbE1lbnNhZ2VtOiBVdGlsTWVuc2FnZW1cclxuICAgICkge1xyXG4gICAgfVxyXG5cclxuICAgIGluaWNpYXIobm90aWZpY2Fjb2VzOiBOb3RpZmljYWNhb1tdKSB7XHJcbiAgICAgICAgdGhpcy5hdHVhbGl6YXJMaXN0YXMobm90aWZpY2Fjb2VzID8gbm90aWZpY2Fjb2VzIDogW10pO1xyXG4gICAgfVxyXG5cclxuICAgIGZlY2hhcigpIHtcclxuICAgICAgICB0aGlzLmFjdGl2ZU1vZGFsLmRpc21pc3MoJ2Nsb3NlJyk7XHJcbiAgICB9XHJcblxyXG4gICAgdmlzdWFsaXphcihub3RpZmljYWNhbzogTm90aWZpY2FjYW8pIHtcclxuICAgICAgICBjb25zdCBjb2RpZ28gPSB0aGlzLm9idGVyQ29kaWdvTm90aWZpY2FjYW8obm90aWZpY2FjYW8pO1xyXG4gICAgICAgIGlmIChjb2RpZ28gIT09IG51bGwgJiYgY29kaWdvICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5jb2RpZ29zVmlzdWFsaXphZG9zLmFkZChjb2RpZ28pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBtb2RhbFJlZiA9IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oTm90aWZpY2Fjb2VzRGV0YWxoZUNvbXBvbmVudCwge1xyXG4gICAgICAgICAgICBzaXplOiAnbGcnLFxyXG4gICAgICAgICAgICBiYWNrZHJvcDogJ3N0YXRpYydcclxuICAgICAgICB9KTtcclxuICAgICAgICBjb25zdCBjb21wb25lbnRJbnN0YW5jZTogTm90aWZpY2Fjb2VzRGV0YWxoZUNvbXBvbmVudCA9IG1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlO1xyXG4gICAgICAgIGNvbXBvbmVudEluc3RhbmNlLmluaWNpYXIobm90aWZpY2FjYW8pO1xyXG4gICAgfVxyXG5cclxuICAgIGFsdGVybmFyU2VsZWNpb25hZG8obm90aWZpY2FjYW86IE5vdGlmaWNhY2FvLCBldmVudDogYW55KSB7XHJcbiAgICAgICAgY29uc3QgY29kaWdvID0gdGhpcy5vYnRlckNvZGlnb05vdGlmaWNhY2FvKG5vdGlmaWNhY2FvKTtcclxuICAgICAgICBpZiAoY29kaWdvID09PSBudWxsIHx8IGNvZGlnbyA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZWxlY2lvbmFkb3NbY29kaWdvXSA9IGV2ZW50LnRhcmdldC5jaGVja2VkID09PSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlzU2VsZWNpb25hZG8obm90aWZpY2FjYW86IE5vdGlmaWNhY2FvKTogYm9vbGVhbiB7XHJcbiAgICAgICAgY29uc3QgY29kaWdvID0gdGhpcy5vYnRlckNvZGlnb05vdGlmaWNhY2FvKG5vdGlmaWNhY2FvKTtcclxuICAgICAgICByZXR1cm4gY29kaWdvICE9PSBudWxsICYmIGNvZGlnbyAhPT0gdW5kZWZpbmVkICYmIHRoaXMuc2VsZWNpb25hZG9zW2NvZGlnb10gPT09IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcG9kZVNlbGVjaW9uYXIobm90aWZpY2FjYW86IE5vdGlmaWNhY2FvKTogYm9vbGVhbiB7XHJcbiAgICAgICAgY29uc3QgY29kaWdvID0gdGhpcy5vYnRlckNvZGlnb05vdGlmaWNhY2FvKG5vdGlmaWNhY2FvKTtcclxuICAgICAgICByZXR1cm4gY29kaWdvICE9PSBudWxsICYmIGNvZGlnbyAhPT0gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbmZpcm1hcigpIHtcclxuICAgICAgICBjb25zdCBjb2RpZ29zID0gdGhpcy5vYnRlckNvZGlnb3NTZWxlY2lvbmFkb3MoKTtcclxuICAgICAgICBpZiAoY29kaWdvcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgdGhpcy5hY3RpdmVNb2RhbC5jbG9zZSh7YXR1YWxpemFyOiBmYWxzZX0pO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY2FycmVnYW5kbyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5ub3RpZmljYWNvZXNTZXJ2aWNlLm1hcmNhck5hb0V4aWJpcih7bGlzdGE6IGNvZGlnb3N9KVxyXG4gICAgICAgICAgICAudGhlbihyZXNwb3N0YSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzcG9zdGEgJiYgcmVzcG9zdGEuc3VjZXNzbyA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnV0aWxNZW5zYWdlbS5zaG93RXJyb3IocmVzcG9zdGEuZXJybyk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jYXJyZWdhbmRvID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29uc3QgbGlzdGFBdHVhbGl6YWRhID0gdGhpcy5ub3RpZmljYWNvZXNTZXJ2aWNlLmFwbGljYXJOYW9FeGliaXJMb2NhbChjb2RpZ29zKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYXR1YWxpemFyTGlzdGFzKGxpc3RhQXR1YWxpemFkYSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjaW9uYWRvcyA9IHt9O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYXJyZWdhbmRvID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZU1vZGFsLmNsb3NlKHthdHVhbGl6YXI6IGZhbHNlfSk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy51dGlsTWVuc2FnZW0uc2hvd0Vycm9yRGV0YWlsZWQoZXJyKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FycmVnYW5kbyA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBvYnRlck1lbnNhZ2VtKG5vdGlmaWNhY2FvOiBOb3RpZmljYWNhbyk6IHN0cmluZyB7XHJcbiAgICAgICAgY29uc3QgdmFsb3I6IGFueSA9IG5vdGlmaWNhY2FvIGFzIGFueTtcclxuICAgICAgICByZXR1cm4gdmFsb3IgPyB2YWxvci5tZW5zYWdlbSA6ICcnO1xyXG4gICAgfVxyXG5cclxuICAgIG9idGVyRGF0YUNhZGFzdHJvKG5vdGlmaWNhY2FvOiBOb3RpZmljYWNhbyk6IGFueSB7XHJcbiAgICAgICAgY29uc3QgdmFsb3I6IGFueSA9IG5vdGlmaWNhY2FvIGFzIGFueTtcclxuICAgICAgICByZXR1cm4gdmFsb3IgPyB2YWxvci5kYXRhQ2FkYXN0cm8gOiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGlzTm90aWZpY2FjYW9Ob3ZhKG5vdGlmaWNhY2FvOiBOb3RpZmljYWNhbyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGNvbnN0IHZhbG9yOiBhbnkgPSBub3RpZmljYWNhbyBhcyBhbnk7XHJcbiAgICAgICAgcmV0dXJuICF2YWxvciB8fCB2YWxvci5kYXRhTmFvRXhpYmlyID09PSBudWxsIHx8IHZhbG9yLmRhdGFOYW9FeGliaXIgPT09IHVuZGVmaW5lZCB8fCB2YWxvci5kYXRhTmFvRXhpYmlyID09PSAnJztcclxuICAgIH1cclxuXHJcbiAgICBpc05vdGlmaWNhY2FvVmlzdWFsaXphZGEobm90aWZpY2FjYW86IE5vdGlmaWNhY2FvKTogYm9vbGVhbiB7XHJcbiAgICAgICAgY29uc3QgY29kaWdvID0gdGhpcy5vYnRlckNvZGlnb05vdGlmaWNhY2FvKG5vdGlmaWNhY2FvKTtcclxuICAgICAgICByZXR1cm4gY29kaWdvICE9PSBudWxsICYmIGNvZGlnbyAhPT0gdW5kZWZpbmVkICYmIHRoaXMuY29kaWdvc1Zpc3VhbGl6YWRvcy5oYXMoY29kaWdvKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGF0dWFsaXphckxpc3Rhcyhub3RpZmljYWNvZXM6IE5vdGlmaWNhY2FvW10pIHtcclxuICAgICAgICB0aGlzLm5vdGlmaWNhY29lcyA9IG5vdGlmaWNhY29lcyA/IG5vdGlmaWNhY29lcyA6IFtdO1xyXG4gICAgICAgIHRoaXMubm90aWZpY2Fjb2VzTm92YXMgPSB0aGlzLm5vdGlmaWNhY29lcy5maWx0ZXIoaXRlbSA9PiB0aGlzLmlzTm90aWZpY2FjYW9Ob3ZhKGl0ZW0pKTtcclxuICAgICAgICB0aGlzLm5vdGlmaWNhY29lc0FudGlnYXMgPSB0aGlzLm5vdGlmaWNhY29lcy5maWx0ZXIoaXRlbSA9PiAhdGhpcy5pc05vdGlmaWNhY2FvTm92YShpdGVtKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBvYnRlckNvZGlnb3NTZWxlY2lvbmFkb3MoKTogbnVtYmVyW10ge1xyXG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLnNlbGVjaW9uYWRvcylcclxuICAgICAgICAgICAgLmZpbHRlcihrZXkgPT4gdGhpcy5zZWxlY2lvbmFkb3NbK2tleV0gPT09IHRydWUpXHJcbiAgICAgICAgICAgIC5tYXAoa2V5ID0+ICtrZXkpO1xyXG4gICAgfVxyXG5cclxuICAgIG9idGVyQ29kaWdvTm90aWZpY2FjYW8obm90aWZpY2FjYW86IE5vdGlmaWNhY2FvKTogbnVtYmVyIHtcclxuICAgICAgICBjb25zdCB2YWxvcjogYW55ID0gbm90aWZpY2FjYW8gYXMgYW55O1xyXG4gICAgICAgIHJldHVybiB2YWxvciA/IHZhbG9yLmNvZGlnbyA6IG51bGw7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtDVVNUT01fRUxFTUVOVFNfU0NIRU1BLCBOZ01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7Q29tbW9uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQge0Zvcm1zTW9kdWxlfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7TmdiTW9kdWxlfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcbmltcG9ydCB7Tm90aWZpY2Fjb2VzUG9wdXBDb21wb25lbnR9IGZyb20gJy4vbm90aWZpY2Fjb2VzLXBvcHVwLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7Tm90aWZpY2Fjb2VzRGV0YWxoZUNvbXBvbmVudH0gZnJvbSAnLi9ub3RpZmljYWNvZXMtZGV0YWxoZS5jb21wb25lbnQnO1xyXG5pbXBvcnQge0ZvbnRBd2Vzb21lTW9kdWxlfSBmcm9tIFwiQGZvcnRhd2Vzb21lL2FuZ3VsYXItZm9udGF3ZXNvbWVcIjtcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgICBpbXBvcnRzOiBbXHJcbiAgICAgICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgICAgIE5nYk1vZHVsZS5mb3JSb290KCksXHJcbiAgICAgICAgRm9udEF3ZXNvbWVNb2R1bGVcclxuICAgIF0sXHJcbiAgICBkZWNsYXJhdGlvbnM6IFtcclxuICAgICAgICBOb3RpZmljYWNvZXNQb3B1cENvbXBvbmVudCxcclxuICAgICAgICBOb3RpZmljYWNvZXNEZXRhbGhlQ29tcG9uZW50XHJcbiAgICBdLFxyXG4gICAgZW50cnlDb21wb25lbnRzOiBbXHJcbiAgICAgICAgTm90aWZpY2Fjb2VzUG9wdXBDb21wb25lbnQsXHJcbiAgICAgICAgTm90aWZpY2Fjb2VzRGV0YWxoZUNvbXBvbmVudFxyXG4gICAgXSxcclxuICAgIGV4cG9ydHM6IFtcclxuICAgICAgICBOb3RpZmljYWNvZXNQb3B1cENvbXBvbmVudCxcclxuICAgICAgICBOb3RpZmljYWNvZXNEZXRhbGhlQ29tcG9uZW50XHJcbiAgICBdLFxyXG4gICAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOb3RpZmljYWNvZXNNb2R1bGUge1xyXG59XHJcbiIsImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29va2llU2VydmljZSB9IGZyb20gJ25neC1jb29raWUnO1xyXG5cclxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcclxuZXhwb3J0IGNsYXNzIENTUkZTZXJ2aWNlIHtcclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgY29va2llU2VydmljZTogQ29va2llU2VydmljZSkge31cclxuXHJcbiAgICBnZXRDU1JGKG5hbWUgPSAnWFNSRi1UT0tFTicpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jb29raWVTZXJ2aWNlLmdldChuYW1lKTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IHtBdXRoU2VydmVyUHJvdmlkZXJ9IGZyb20gJy4uL2F1dGgvYXV0aC1qd3Quc2VydmljZSc7XHJcbmltcG9ydCB7UHJpbmNpcGFsfSBmcm9tICcuLi9hdXRoL3ByaW5jaXBhbC5zZXJ2aWNlJztcclxuXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXHJcbmV4cG9ydCBjbGFzcyBMb2dpblNlcnZpY2Uge1xyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBwcmluY2lwYWw6IFByaW5jaXBhbCwgcHJpdmF0ZSBhdXRoU2VydmVyUHJvdmlkZXI6IEF1dGhTZXJ2ZXJQcm92aWRlcikge31cclxuXHJcbiAgICBsb2dpbihjcmVkZW50aWFscywgY2FsbGJhY2s/KSB7XHJcbiAgICAgICAgY29uc3QgY2IgPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpIHt9O1xyXG5cclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmF1dGhTZXJ2ZXJQcm92aWRlci5sb2dpbihjcmVkZW50aWFscykuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgICAgZGF0YSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcmluY2lwYWwuaWRlbnRpdHkodHJ1ZSkudGhlbihhY2NvdW50ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShkYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2IoKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9nb3V0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNiKGVycik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgbG9naW5XaXRoVG9rZW4oand0LCByZW1lbWJlck1lKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYXV0aFNlcnZlclByb3ZpZGVyLmxvZ2luV2l0aFRva2VuKGp3dCwgcmVtZW1iZXJNZSk7XHJcbiAgICB9XHJcblxyXG4gICAgbG9nb3V0KCkge1xyXG4gICAgICAgIHRoaXMuYXV0aFNlcnZlclByb3ZpZGVyLmxvZ291dCgpLnN1YnNjcmliZSgpO1xyXG4gICAgICAgIHRoaXMucHJpbmNpcGFsLmF1dGhlbnRpY2F0ZShudWxsKTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuXHJcbmNvbnN0IFNFUlZFUl9BUElfVVJMID0gJy4vJztcclxuXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXHJcbmV4cG9ydCBjbGFzcyBSZWdpc3RlciB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQpIHt9XHJcblxyXG4gICAgc2F2ZShhY2NvdW50OiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChTRVJWRVJfQVBJX1VSTCArICdhcGkvcmVnaXN0ZXInLCBhY2NvdW50KTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge0FmdGVyVmlld0luaXQsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgT25Jbml0LCBSZW5kZXJlciwgVmlld0NoaWxkfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtOZ2JBY3RpdmVNb2RhbCwgTmdiTW9kYWxSZWZ9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHtKaGlMYW5ndWFnZVNlcnZpY2V9IGZyb20gJ25nLWpoaXBzdGVyJztcclxuaW1wb3J0IHtSZWdpc3Rlcn0gZnJvbSAnLi9yZWdpc3Rlci5zZXJ2aWNlJztcclxuaW1wb3J0IHtSZWFsVGltZU1hc2tUeXBlfSBmcm9tICcuLi9tb2RlbC9jcGYtY25wai5tb2RlbCc7XHJcbmltcG9ydCB7UG9ydGFsQWxlcnRTZXJ2aWNlfSBmcm9tICcuLi9hbGVydC9wb3J0YWwtYWxlcnQuc2VydmljZSc7XHJcbmltcG9ydCB7VXRpbE1lbnNhZ2VtfSBmcm9tIFwiLi4vYWxlcnQvdXRpbC1tZW5zYWdlbVwiO1xyXG5pbXBvcnQge1Rlcm1vTGdwZH0gZnJvbSAnLi4vbW9kZWwvdGVybW8tbGdwZC5tb2RlbCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2poaS1yZWdpc3RlcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3JlZ2lzdGVyLmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgUmVnaXN0ZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xyXG4gIGNvbmZpcm1QYXNzd29yZDogc3RyaW5nO1xyXG4gIGNvbmZpcm1FbWFpbDogc3RyaW5nO1xyXG4gIHJlZ2lzdGVyQWNjb3VudDogYW55O1xyXG4gIHN1Y2Nlc3M6IGJvb2xlYW47XHJcbiAgbW9kYWxSZWY6IE5nYk1vZGFsUmVmO1xyXG4gIHJlYWxUaW1lTWFza1R5cGUgPSBSZWFsVGltZU1hc2tUeXBlLkNMQVNTSUM7XHJcbiAgdGVybW9MZ3BkOiBUZXJtb0xncGQ7XHJcbiAgQFZpZXdDaGlsZCgnY29uZmlybUVtYWlsZElucHV0JylcclxuICBjb25maXJtRW1haWxkSW5wdXQ6IEVsZW1lbnRSZWY7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBsYW5ndWFnZVNlcnZpY2U6IEpoaUxhbmd1YWdlU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVnaXN0ZXJTZXJ2aWNlOiBSZWdpc3RlcixcclxuICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZixcclxuICAgIHByaXZhdGUgYWxlcnRTZXJ2aWNlOiBQb3J0YWxBbGVydFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcixcclxuICAgIHByaXZhdGUgdXRpbE1lbnNhZ2VtOiBVdGlsTWVuc2FnZW0sXHJcbiAgICBwdWJsaWMgYWN0aXZlTW9kYWw6IE5nYkFjdGl2ZU1vZGFsXHJcbiAgKSB7XHJcbiAgICB0aGlzLnRlcm1vTGdwZCA9IG5ldyBUZXJtb0xncGQoKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5zdWNjZXNzID0gZmFsc2U7XHJcbiAgICB0aGlzLnJlZ2lzdGVyQWNjb3VudCA9IHt9O1xyXG4gICAgdGhpcy5hbGVydFNlcnZpY2UuY2xlYXIoKTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIHRoaXMucmVuZGVyZXIuaW52b2tlRWxlbWVudE1ldGhvZCh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcjZG9jdW1lbnRvJyksICdmb2N1cycsIFtdKTtcclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyKCkge1xyXG4gICAgaWYgKHRoaXMucmVnaXN0ZXJBY2NvdW50LnBhc3N3b3JkID09PSB0aGlzLmNvbmZpcm1QYXNzd29yZCAmJiB0aGlzLnJlZ2lzdGVyQWNjb3VudC5lbWFpbCA9PT0gdGhpcy5jb25maXJtRW1haWwpIHtcclxuICAgICAgdGhpcy5sYW5ndWFnZVNlcnZpY2UuZ2V0Q3VycmVudCgpLnRoZW4oa2V5ID0+IHtcclxuICAgICAgICB0aGlzLnJlZ2lzdGVyQWNjb3VudC5sYW5nS2V5ID0ga2V5O1xyXG4gICAgICAgIGlmICh0aGlzLnRlcm1vTGdwZC5oYWJpbGl0YWRvKSB7XHJcbiAgICAgICAgICB0aGlzLnJlZ2lzdGVyQWNjb3VudC50ZXJtb0xncGRBY2VpdG8gPSB0aGlzLnRlcm1vTGdwZC5pZDtcclxuICAgICAgICAgIHRoaXMucmVnaXN0ZXJBY2NvdW50LmRvY3VtZW50b0xncGQgPSB0aGlzLnRlcm1vTGdwZC5kb2N1bWVudG9faW5jO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnJlZ2lzdGVyU2VydmljZS5zYXZlKHRoaXMucmVnaXN0ZXJBY2NvdW50KS5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc3VjY2VzcyA9IHRydWU7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgcmVzcG9uc2UgPT4gdGhpcy51dGlsTWVuc2FnZW0uc2hvd0Vycm9yRGV0YWlsZWQocmVzcG9uc2UpXHJcbiAgICAgICAgKTtcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMucmVnaXN0ZXJBY2NvdW50LnBhc3N3b3JkICE9PSB0aGlzLmNvbmZpcm1QYXNzd29yZCkge1xyXG4gICAgICB0aGlzLnV0aWxNZW5zYWdlbS5zaG93RXJyb3JTd2FsKCdBcyBzZW5oYXMgbsODwqNvIGNvbmZlcmVtIScpO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnJlZ2lzdGVyQWNjb3VudC5lbWFpbCAhPT0gdGhpcy5jb25maXJtRW1haWwpIHtcclxuICAgICAgdGhpcy51dGlsTWVuc2FnZW0uc2hvd0Vycm9yU3dhbCgnT3MgZW1haWxzIG7Dg8KjbyBjb25mZXJlbSEnKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uUGFzdGVDb25maXJtRW1haWwoZXZlbnQ6IENsaXBib2FyZEV2ZW50KSB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgdGVybW9BY2VpdG9PdURlc2FiaWxpdGFkbygpIHtcclxuICAgIGlmICghdGhpcy50ZXJtb0xncGQuaGFiaWxpdGFkbykge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiAhIXRoaXMudGVybW9MZ3BkLmFjZWl0bztcclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBOZ2JNb2RhbCwgTmdiTW9kYWxSZWYgfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcbmltcG9ydCB7UmVnaXN0ZXJDb21wb25lbnR9IGZyb20gJy4vcmVnaXN0ZXIuY29tcG9uZW50JztcclxuXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXHJcbmV4cG9ydCBjbGFzcyBSZWdpc3Rlck1vZGFsU2VydmljZSB7XHJcbiAgICBwcml2YXRlIGlzT3BlbiA9IGZhbHNlO1xyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE5nYk1vZGFsKSB7fVxyXG5cclxuICAgIG9wZW4oKTogTmdiTW9kYWxSZWYge1xyXG4gICAgICAgIGlmICh0aGlzLmlzT3Blbikge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaXNPcGVuID0gdHJ1ZTtcclxuICAgICAgICBjb25zdCBtb2RhbFJlZiA9IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oUmVnaXN0ZXJDb21wb25lbnQsIHsgYmFja2Ryb3A6ICdzdGF0aWMnIH0pO1xyXG4gICAgICAgIG1vZGFsUmVmLnJlc3VsdC50aGVuKFxyXG4gICAgICAgICAgICByZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc09wZW4gPSBmYWxzZTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgcmVhc29uID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgICAgIHJldHVybiBtb2RhbFJlZjtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0h0dHBDbGllbnQsIEh0dHBSZXNwb25zZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge0lVc2VyfSBmcm9tICcuLi9tb2RlbC91c2VyLm1vZGVsJztcclxuaW1wb3J0IHtjcmVhdGVSZXF1ZXN0T3B0aW9ufSBmcm9tICcuLi91dGlsL3JlcXVlc3QtdXRpbCc7XHJcbmltcG9ydCB7VXRpbEZ1bmN0aW9uc30gZnJvbSAnLi4vdXRpbCc7XHJcblxyXG5jb25zdCBTRVJWRVJfQVBJX1VSTCA9ICcuLyc7XHJcblxyXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxyXG5leHBvcnQgY2xhc3MgVXNlclNlcnZpY2Uge1xyXG4gIHB1YmxpYyByZXNvdXJjZVVybCA9IFNFUlZFUl9BUElfVVJMICsgJ2FwaS91c2Vycyc7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCkge31cclxuXHJcbiAgY3JlYXRlKHVzZXI6IElVc2VyKTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8SVVzZXI+PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8SVVzZXI+KHRoaXMucmVzb3VyY2VVcmwsIHVzZXIsIHsgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyB9KTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZSh1c2VyOiBJVXNlcik6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPElVc2VyPj4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQ8SVVzZXI+KHRoaXMucmVzb3VyY2VVcmwsIHVzZXIsIHsgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyB9KTtcclxuICB9XHJcblxyXG4gIGZpbmQobG9naW46IHN0cmluZyk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPElVc2VyPj4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVVzZXI+KGAke3RoaXMucmVzb3VyY2VVcmx9LyR7bG9naW59YCwgeyBvYnNlcnZlOiAncmVzcG9uc2UnIH0pO1xyXG4gIH1cclxuXHJcbiAgcXVlcnkocmVxPzogYW55LCBmaWx0ZXI/OiBzdHJpbmcpOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxJVXNlcltdPj4ge1xyXG4gICAgY29uc3Qgb3B0aW9ucyA9IGNyZWF0ZVJlcXVlc3RPcHRpb24ocmVxKTtcclxuICAgIGxldCB1cmwgPSB0aGlzLnJlc291cmNlVXJsO1xyXG4gICAgaWYgKFV0aWxGdW5jdGlvbnMuaXNWYWxpZFN0cmluZ09yQXJyYXkoZmlsdGVyKSkge1xyXG4gICAgICB1cmwgKz0gJy8nICsgZW5jb2RlVVJJQ29tcG9uZW50KGZpbHRlcik7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJVXNlcltdPih1cmwsIHsgcGFyYW1zOiBvcHRpb25zLCBvYnNlcnZlOiAncmVzcG9uc2UnIH0pO1xyXG4gIH1cclxuXHJcbiAgZGVsZXRlKGxvZ2luOiBzdHJpbmcpOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxhbnk+PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmRlbGV0ZShgJHt0aGlzLnJlc291cmNlVXJsfS8ke2xvZ2lufWAsIHsgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyB9KTtcclxuICB9XHJcblxyXG4gIGF1dGhvcml0aWVzKCk6IE9ic2VydmFibGU8c3RyaW5nW10+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PHN0cmluZ1tdPihTRVJWRVJfQVBJX1VSTCArICdhcGkvdXNlcnMvYXV0aG9yaXRpZXMnKTtcclxuICB9XHJcblxyXG4gIGdldEFjZWl0ZUxncGQobG9naW46IHN0cmluZywgdGVybW9JZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8YW55Pj4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8YW55PignYXBpL3B1YmxpYy91c2Vycy9hY2VpdGUtbGdwZC8nICsgbG9naW4gKyAnLycgKyB0ZXJtb0lkLCB7b2JzZXJ2ZTogJ3Jlc3BvbnNlJ30pO1xyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQge0FmdGVyVmlld0luaXQsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgT25EZXN0cm95LCBPbkluaXQsIFJlbmRlcmVyLCBWaWV3Q2hpbGR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge05nYkFjdGl2ZU1vZGFsLCBOZ2JNb2RhbFJlZn0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQge1JvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHtKaGlFdmVudE1hbmFnZXJ9IGZyb20gJ25nLWpoaXBzdGVyJztcclxuaW1wb3J0IHtMb2dpblNlcnZpY2V9IGZyb20gJy4vbG9naW4uc2VydmljZSc7XHJcbmltcG9ydCB7U3RhdGVTdG9yYWdlU2VydmljZX0gZnJvbSAnLi4vYXV0aC9zdGF0ZS1zdG9yYWdlLnNlcnZpY2UnO1xyXG5pbXBvcnQge1JlZ2lzdGVyTW9kYWxTZXJ2aWNlfSBmcm9tICcuLi9yZWdpc3Rlci9yZWdpc3Rlci1tb2RhbC5zZXJ2aWNlJztcclxuaW1wb3J0IHtVdGlsRnVuY3Rpb25zfSBmcm9tICcuLi91dGlsL3V0aWwtZnVuY3Rpb25zJztcclxuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuaW1wb3J0IHtTdWJqZWN0fSBmcm9tICdyeGpzL2ludGVybmFsL1N1YmplY3QnO1xyXG5pbXBvcnQge1N1YnNjcmlwdGlvbn0gZnJvbSAncnhqcy9pbnRlcm5hbC9TdWJzY3JpcHRpb24nO1xyXG5pbXBvcnQge2RlYm91bmNlVGltZX0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQge1VzZXJTZXJ2aWNlfSBmcm9tICcuLi91c2VyL3VzZXIuc2VydmljZSc7XHJcbmltcG9ydCB7VXRpbE1lbnNhZ2VtfSBmcm9tICcuLi9hbGVydC91dGlsLW1lbnNhZ2VtJztcclxuaW1wb3J0IHtQb3J0YWxBbGVydFNlcnZpY2V9IGZyb20gJy4uL2FsZXJ0L3BvcnRhbC1hbGVydC5zZXJ2aWNlJztcclxuaW1wb3J0IHtUZXJtb0xncGR9IGZyb20gJy4uL21vZGVsL3Rlcm1vLWxncGQubW9kZWwnO1xyXG5pbXBvcnQge1BhcmFtZXRyb3NTZXJ2aWNlfSBmcm9tICcuLi9jb21wb25lbnRzL3BhcmFtZXRyb3MvcGFyYW1ldHJvcy5zZXJ2aWNlJztcclxuaW1wb3J0IHtFTUFJTF9OT1RfRk9VTkRfVFlQRSwgSU5WQUxJRF9QQVNTV09SRF9UWVBFfSBmcm9tIFwiLi4vdXRpbFwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdqaGktbG9naW4tbW9kYWwnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9sb2dpbi5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJ2xvZ2luLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIEpoaUxvZ2luTW9kYWxDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgYXV0aGVudGljYXRpb25FcnJvcjogYm9vbGVhbjtcclxuICBhdXRoZW50aWNhdGlvbkVycm9yTWVzc2FnZTogc3RyaW5nO1xyXG4gIHBhc3N3b3JkOiBzdHJpbmc7XHJcbiAgcmVtZW1iZXJNZTogYm9vbGVhbjtcclxuICB1c2VybmFtZTogc3RyaW5nO1xyXG4gIGNyZWRlbnRpYWxzOiBhbnk7XHJcbiAgbW9kYWxSZWY6IE5nYk1vZGFsUmVmO1xyXG4gIGhpbnQ6IHN0cmluZztcclxuICB0ZXJtb0xncGRKYUFjZWl0bzogbnVtYmVyO1xyXG4gIGxncGRIYWJpbGl0YWRhOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZXhpYmlyVGVybW86IGJvb2xlYW4gPSBmYWxzZTtcclxuICB0ZXJtb0xncGQ6IFRlcm1vTGdwZDtcclxuICBkZWJvdW5jZVRpbWUgPSA1MDA7XHJcbiAgbW9kZWxDaGFuZ2VkOiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XHJcbiAgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcbiAgbG9hZGluZyA9IGZhbHNlO1xyXG4gIHBsYWNlaG9sZGVyVXNlcm5hbWVDdXN0b21pemFkbyA9ICcnO1xyXG4gIGlzT2N1bHRhckNyaWFyTm92YUNvbnRhID0gZmFsc2U7XHJcbiAgbWVuc2FnZW1UZWxhTG9naW4gPSAnJztcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGV2ZW50TWFuYWdlcjogSmhpRXZlbnRNYW5hZ2VyLFxyXG4gICAgcHJpdmF0ZSBsb2dpblNlcnZpY2U6IExvZ2luU2VydmljZSxcclxuICAgIHByaXZhdGUgc3RhdGVTdG9yYWdlU2VydmljZTogU3RhdGVTdG9yYWdlU2VydmljZSxcclxuICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZixcclxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyLFxyXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgIHByaXZhdGUgcmVnaXN0ZXJNb2RhbFNlcnZpY2U6IFJlZ2lzdGVyTW9kYWxTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB1c2VyU2VydmljZTogVXNlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogUG9ydGFsQWxlcnRTZXJ2aWNlLFxyXG4gICAgcHVibGljIGFjdGl2ZU1vZGFsOiBOZ2JBY3RpdmVNb2RhbCxcclxuICAgIHByaXZhdGUgcGFyYW1ldHJvU2VydmljZTogUGFyYW1ldHJvc1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIHV0aWxNZW5zYWdlbTogVXRpbE1lbnNhZ2VtXHJcbiAgKSB7XHJcbiAgICB0aGlzLmNyZWRlbnRpYWxzID0ge307XHJcbiAgICB0aGlzLnRlcm1vTGdwZCA9IG5ldyBUZXJtb0xncGQoKTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5yZW5kZXJlci5pbnZva2VFbGVtZW50TWV0aG9kKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJyN1c2VybmFtZScpLCAnZm9jdXMnLCBbXSksIDApO1xyXG4gICAgdGhpcy5leGliaXJUZXJtb0xncGQoKTtcclxuICB9XHJcblxyXG4gIGNhbmNlbCgpIHtcclxuICAgIHRoaXMuY3JlZGVudGlhbHMgPSB7XHJcbiAgICAgIHVzZXJuYW1lOiBudWxsLFxyXG4gICAgICBwYXNzd29yZDogbnVsbCxcclxuICAgICAgcmVtZW1iZXJNZTogdHJ1ZSxcclxuICAgICAgdGVybW9MZ3BkQWNlaXRvOiBudWxsLFxyXG4gICAgICBkb2N1bWVudG9MZ3BkOiBudWxsXHJcbiAgICB9O1xyXG4gICAgdGhpcy5hdXRoZW50aWNhdGlvbkVycm9yID0gZmFsc2U7XHJcbiAgICB0aGlzLmFjdGl2ZU1vZGFsLmRpc21pc3MoJ2NhbmNlbCcpO1xyXG4gIH1cclxuXHJcbiAgbG9naW4oKSB7XHJcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgbGV0IGxvZ2luID0gdGhpcy51c2VybmFtZTtcclxuICAgIGlmICghbG9naW4uaW5jbHVkZXMoJ0AnKSkge1xyXG4gICAgICAvL2xvZ2luID0gVXRpbEZ1bmN0aW9ucy5yZW1vdmVOb25BbHBoYU51bWVyaWMobG9naW4pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jcmVkZW50aWFscyA9IHtcclxuICAgICAgdXNlcm5hbWU6IGxvZ2luLFxyXG4gICAgICBwYXNzd29yZDogdGhpcy5wYXNzd29yZCxcclxuICAgICAgcmVtZW1iZXJNZTogdGhpcy5yZW1lbWJlck1lLFxyXG4gICAgICB0ZXJtb0xncGRBY2VpdG86IHRoaXMudGVybW9MZ3BkLmlkICYmIHRoaXMudGVybW9MZ3BkLmFjZWl0byA/IHRoaXMudGVybW9MZ3BkLmlkIDogdGhpcy50ZXJtb0xncGRKYUFjZWl0byAhPT0gbnVsbCA/IHRoaXMudGVybW9MZ3BkSmFBY2VpdG8gOiBudWxsLFxyXG4gICAgICBkb2N1bWVudG9MZ3BkOiB0aGlzLnRlcm1vTGdwZC5kb2N1bWVudG9faW5jXHJcbiAgICB9O1xyXG4gICAgdGhpcy5sb2dpblNlcnZpY2UubG9naW4odGhpcy5jcmVkZW50aWFscylcclxuICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuYXV0aGVudGljYXRpb25FcnJvciA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuYWN0aXZlTW9kYWwuZGlzbWlzcygnbG9naW4gc3VjY2VzcycpO1xyXG4gICAgICAgIGlmICh0aGlzLnJvdXRlci51cmwgPT09ICcvcmVnaXN0ZXInIHx8IHRoaXMucm91dGVyLnVybC5pbmNsdWRlcygnYWN0aXZhdGUnKSB8fCB0aGlzLnJvdXRlci51cmwuaW5jbHVkZXMoJ3Jlc2V0JykpIHtcclxuICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnJ10pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuaXNBdFJvb3QoKSkge1xyXG4gICAgICAgICAgdGhpcy5yZWZyZXNoUGFnZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5ldmVudE1hbmFnZXIuYnJvYWRjYXN0KHtcclxuICAgICAgICAgIG5hbWU6ICdhdXRoZW50aWNhdGlvblN1Y2Nlc3MnLFxyXG4gICAgICAgICAgY29udGVudDogJ1NlbmRpbmcgQXV0aGVudGljYXRpb24gU3VjY2VzcydcclxuICAgICAgICB9KTtcclxuICAgICAgICAvLyBwcmV2aW91c1N0YXRlIHdhcyBzZXQgaW4gdGhlIGF1dGhFeHBpcmVkSW50ZXJjZXB0b3IgYmVmb3JlIGJlaW5nIHJlZGlyZWN0ZWQgdG8gbG9naW4gbW9kYWwuXHJcbiAgICAgICAgLy8gc2luY2UgbG9naW4gaXMgc3VjY2VzZnVsLCBnbyB0byBzdG9yZWQgcHJldmlvdXNTdGF0ZSBhbmQgY2xlYXIgcHJldmlvdXNTdGF0ZVxyXG4gICAgICAgIGNvbnN0IHJlZGlyZWN0ID0gdGhpcy5zdGF0ZVN0b3JhZ2VTZXJ2aWNlLmdldFVybCgpO1xyXG4gICAgICAgIGlmIChyZWRpcmVjdCkge1xyXG4gICAgICAgICAgdGhpcy5zdGF0ZVN0b3JhZ2VTZXJ2aWNlLnN0b3JlVXJsKG51bGwpO1xyXG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3JlZGlyZWN0XSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgICAuY2F0Y2gocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDQwMSAmJiByZXNwb25zZS5lcnJvci50eXBlID09PSBFTUFJTF9OT1RfRk9VTkRfVFlQRSkge1xyXG4gICAgICAgICAgdGhpcy5hdXRoZW50aWNhdGlvbkVycm9yTWVzc2FnZSA9ICdsb2dpbi5tZXNzYWdlcy5lcnJvci5pbnZhbGlkLWxvZ2luJztcclxuICAgICAgICB9IGVsc2UgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDAxICYmIHJlc3BvbnNlLmVycm9yLnR5cGUgPT09IElOVkFMSURfUEFTU1dPUkRfVFlQRSkge1xyXG4gICAgICAgICAgdGhpcy5hdXRoZW50aWNhdGlvbkVycm9yTWVzc2FnZSA9ICdsb2dpbi5tZXNzYWdlcy5lcnJvci5pbnZhbGlkLXBhc3N3b3JkJztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5hdXRoZW50aWNhdGlvbkVycm9yTWVzc2FnZSA9ICdsb2dpbi5tZXNzYWdlcy5lcnJvci5hdXRoZW50aWNhdGlvbic7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuYXV0aGVudGljYXRpb25FcnJvciA9IHRydWU7XHJcbiAgICAgIH0pXHJcbiAgICAgIC5maW5hbGx5KCgpID0+IHtcclxuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBpc0F0Um9vdCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnJvdXRlci51cmwgPT09ICcvJyB8fCB0aGlzLnJvdXRlci51cmwgPT09ICcnO1xyXG4gIH1cclxuXHJcbiAgcmVmcmVzaFBhZ2UoKSB7XHJcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCcvJywgeyBza2lwTG9jYXRpb25DaGFuZ2U6IHRydWUgfSkudGhlbigoKSA9PiB7XHJcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt0aGlzLnJvdXRlci51cmxdKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXIoKSB7XHJcbiAgICB0aGlzLmFjdGl2ZU1vZGFsLmRpc21pc3MoJ3RvIHN0YXRlIHJlZ2lzdGVyJyk7XHJcbiAgICB0aGlzLm1vZGFsUmVmID0gdGhpcy5yZWdpc3Rlck1vZGFsU2VydmljZS5vcGVuKCk7XHJcbiAgfVxyXG5cclxuICByZXF1ZXN0UmVzZXRQYXNzd29yZCgpIHtcclxuICAgIHRoaXMuYWN0aXZlTW9kYWwuZGlzbWlzcygndG8gc3RhdGUgcmVxdWVzdFJlc2V0Jyk7XHJcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9yZXNldCcsICdyZXF1ZXN0J10pO1xyXG4gIH1cclxuXHJcbiAgZ2V0VHJhbnNsYXRpb24oa2V5OiBzdHJpbmcsIGRlZmF1bHRWYWx1ZTogc3RyaW5nKSB7XHJcbiAgICBpZiAoVXRpbEZ1bmN0aW9ucy5pc1ZhbGlkU3RyaW5nT3JBcnJheSh0aGlzLmhpbnQpKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmhpbnQ7XHJcbiAgICB9XHJcbiAgICBjb25zdCB0cmFuc2xhdGVkID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoa2V5KTtcclxuICAgIGlmICh0cmFuc2xhdGVkLnN0YXJ0c1dpdGgoJ3RyYW5zbGF0aW9uLW5vdC1mb3VuZCcpKSB7XHJcbiAgICAgIHRoaXMuaGludCA9IGRlZmF1bHRWYWx1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuaGludCA9IHRyYW5zbGF0ZWQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5oaW50O1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmFsZXJ0U2VydmljZS5jbGVhcigpO1xyXG4gICAgdGhpcy5nZXRVc2VybmFtZVBsYWNlaG9sZGVyKCk7XHJcbiAgICB0aGlzLm9jdWx0YXJDcmlhck5vdmFDb250YSgpO1xyXG4gICAgdGhpcy5jYXJyZWdhck1lbnNhZ2VtVGVsYUxvZ2luKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbikge1xyXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaW5wdXRDaGFuZ2VkKCkge1xyXG4gICAgdGhpcy5tb2RlbENoYW5nZWQubmV4dCgpO1xyXG4gIH1cclxuXHJcbiAgaGFiaWxpdGFyQm90YW9FbnRyYXIoKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBoYWJpbGl0YXIgPSBVdGlsRnVuY3Rpb25zLmlzVmFsaWRTdHJpbmdPckFycmF5KHRoaXMudXNlcm5hbWUpID09PSB0cnVlICYmIFV0aWxGdW5jdGlvbnMuaXNWYWxpZFN0cmluZ09yQXJyYXkodGhpcy5wYXNzd29yZCkgPT09IHRydWUgJiZcclxuICAgICAgKChVdGlsRnVuY3Rpb25zLmlzVmFsaWRPYmplY3QodGhpcy50ZXJtb0xncGQuaGFiaWxpdGFkbykgPT09IGZhbHNlIHx8IHRoaXMudGVybW9MZ3BkLmhhYmlsaXRhZG8gPT09IGZhbHNlKSA/IHRydWUgOlxyXG4gICAgICAgIChVdGlsRnVuY3Rpb25zLmlzVmFsaWRPYmplY3QodGhpcy50ZXJtb0xncGRKYUFjZWl0bykgPT09IHRydWUgfHwgdGhpcy50ZXJtb0xncGQuYWNlaXRvID09PSB0cnVlKSk7XHJcbiAgICByZXR1cm4gaGFiaWxpdGFyO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBleGliaXJUZXJtb0xncGQoKSB7XHJcbiAgICB0aGlzLnBhcmFtZXRyb1NlcnZpY2UuZ2V0UGFyYW1ldHJvc0J5TmFtZSgnSEFCSUxJVEFSX0xHUEQnKVxyXG4gICAgICAudGhlbihyZXNwID0+IHtcclxuICAgICAgICBpZiAocmVzcC52YWxvciA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgdGhpcy5sZ3BkSGFiaWxpdGFkYSA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IHRoaXMubW9kZWxDaGFuZ2VkXHJcbiAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgIGRlYm91bmNlVGltZSh0aGlzLmRlYm91bmNlVGltZSksXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5jaGVja1Rlcm1vQWNlaXRvKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICAgLmNhdGNoKGVyciA9PiB7XHJcbiAgICAgICAgdGhpcy51dGlsTWVuc2FnZW0uc2hvd0Vycm9yRGV0YWlsZWQoZXJyKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNoZWNrVGVybW9BY2VpdG8oKSB7XHJcbiAgICBpZiAodGhpcy50ZXJtb0xncGQuaWQgJiYgIXRoaXMudGVybW9MZ3BkLmVycm9zKSB7XHJcbiAgICAgIHRoaXMudGVybW9MZ3BkLmFjZWl0byA9IHRoaXMuZXhpYmlyVGVybW8gPSBmYWxzZTtcclxuICAgICAgbGV0IGxvZ2luID0gdGhpcy51c2VybmFtZTtcclxuICAgICAgaWYgKCFsb2dpbi5pbmNsdWRlcygnQCcpKSB7XHJcbiAgICAgICAgbG9naW4gPSBVdGlsRnVuY3Rpb25zLnJlbW92ZU5vbkFscGhhTnVtZXJpYyhsb2dpbik7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGxvZ2luICYmIGxvZ2luLmxlbmd0aCA+IDApIHtcclxuICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlLmdldEFjZWl0ZUxncGQobG9naW4sIHRoaXMudGVybW9MZ3BkLmlkKS5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgdGhpcy50ZXJtb0xncGRKYUFjZWl0byA9IHJlc3BvbnNlLmJvZHk7XHJcbiAgICAgICAgICBpZiAodGhpcy50ZXJtb0xncGRKYUFjZWl0byA9PT0gbnVsbCB8fCAodGhpcy50ZXJtb0xncGRKYUFjZWl0byAhPT0gK3RoaXMudGVybW9MZ3BkLmlkKSkge1xyXG4gICAgICAgICAgICB0aGlzLmV4aWJpclRlcm1vID0gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jaGVja1Rlcm1vQWNlaXRvKCk7XHJcbiAgICAgIH0sIDEwMDApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0VXNlcm5hbWVQbGFjZWhvbGRlcigpIHtcclxuICAgIGNvbnN0IHBsYWNlaG9sZGVyUGFkcmFvID0gdGhpcy5nZXRUcmFuc2xhdGlvbignZ2xvYmFsLmxvZ2luLnBsYWNlaG9sZGVyJywgJ0NQRi9DTlBKIG91IGVtYWlsJyk7XHJcblxyXG4gICAgdGhpcy5wYXJhbWV0cm9TZXJ2aWNlXHJcbiAgICAgIC5nZXRQYXJhbWV0cm9zQnlOYW1lKCdERVNDUklDQU9fQ0FNUE9fTE9HSU4nKVxyXG4gICAgICAudGhlbih2YWxvciA9PiB7XHJcbiAgICAgICAgY29uc3QgcmVzcCA9IHZhbG9yLnZhbG9yO1xyXG5cclxuICAgICAgICBpZiAoIXJlc3AgfHwgcmVzcC50cmltKCkubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICB0aGlzLnBsYWNlaG9sZGVyVXNlcm5hbWVDdXN0b21pemFkbyA9IHBsYWNlaG9sZGVyUGFkcmFvO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnBsYWNlaG9sZGVyVXNlcm5hbWVDdXN0b21pemFkbyA9IHJlc3AudHJpbSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH0pLmNhdGNoKCgpID0+IHtcclxuICAgICAgICB0aGlzLnBsYWNlaG9sZGVyVXNlcm5hbWVDdXN0b21pemFkbyA9IHBsYWNlaG9sZGVyUGFkcmFvO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBvY3VsdGFyQ3JpYXJOb3ZhQ29udGEoKSB7XHJcbiAgICB0aGlzLnBhcmFtZXRyb1NlcnZpY2VcclxuICAgICAgLmdldFBhcmFtZXRyb3NCeU5hbWUoJ09DVUxUQVJfTElOS19DUklBQ0FPX0NPTlRBJylcclxuICAgICAgLnRoZW4ocmVzcCA9PiB7XHJcbiAgICAgICAgdGhpcy5pc09jdWx0YXJDcmlhck5vdmFDb250YSA9IHJlc3AudmFsb3IgJiYgcmVzcC52YWxvciA9PT0gdHJ1ZTtcclxuICAgICAgfSlcclxuICAgICAgLmNhdGNoKGVyciA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ2Vycm8nLCBlcnIpO1xyXG4gICAgICAgIHRoaXMuaXNPY3VsdGFyQ3JpYXJOb3ZhQ29udGEgPSBmYWxzZTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBjYXJyZWdhck1lbnNhZ2VtVGVsYUxvZ2luKCkge1xyXG4gICAgdGhpcy5wYXJhbWV0cm9TZXJ2aWNlXHJcbiAgICAgIC5nZXRQYXJhbWV0cm9zQnlOYW1lKCdNRU5TQUdFTV9URUxBX0xPR0lOJylcclxuICAgICAgLnRoZW4ocmVzcCA9PiB7XHJcbiAgICAgICAgaWYgKFV0aWxGdW5jdGlvbnMuaXNWYWxpZE9iamVjdChyZXNwKSA9PT0gdHJ1ZSAmJiB0eXBlb2YgcmVzcC52YWxvciA9PT0gJ3N0cmluZycgJiYgcmVzcC52YWxvci50cmltKCkubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgdGhpcy5tZW5zYWdlbVRlbGFMb2dpbiA9IHJlc3AudmFsb3IudHJpbSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7TmdiTW9kYWwsIE5nYk1vZGFsUmVmfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcbmltcG9ydCB7SmhpTG9naW5Nb2RhbENvbXBvbmVudH0gZnJvbSAnLi9sb2dpbi5jb21wb25lbnQnO1xyXG5cclxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcclxuZXhwb3J0IGNsYXNzIExvZ2luTW9kYWxTZXJ2aWNlIHtcclxuICAgIHByaXZhdGUgaXNPcGVuID0gZmFsc2U7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIG1vZGFsU2VydmljZTogTmdiTW9kYWwpIHt9XHJcblxyXG4gICAgb3BlbigpOiBOZ2JNb2RhbFJlZiB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNPcGVuKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pc09wZW4gPSB0cnVlO1xyXG4gICAgICAgIGNvbnN0IG1vZGFsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihKaGlMb2dpbk1vZGFsQ29tcG9uZW50LCB7IGJhY2tkcm9wOiAnc3RhdGljJyB9KTtcclxuICAgICAgICBtb2RhbFJlZi5yZXN1bHQudGhlbihcclxuICAgICAgICAgICAgcmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHJlYXNvbiA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgICAgICByZXR1cm4gbW9kYWxSZWY7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtJbmplY3RhYmxlLCBpc0Rldk1vZGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlU25hcHNob3QsIENhbkFjdGl2YXRlLCBSb3V0ZXIsIFJvdXRlclN0YXRlU25hcHNob3R9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7TG9naW5Nb2RhbFNlcnZpY2V9IGZyb20gJy4uL2xvZ2luL2xvZ2luLW1vZGFsLnNlcnZpY2UnO1xyXG5pbXBvcnQge1ByaW5jaXBhbH0gZnJvbSAnLi9wcmluY2lwYWwuc2VydmljZSc7XHJcbmltcG9ydCB7U3RhdGVTdG9yYWdlU2VydmljZX0gZnJvbSAnLi9zdGF0ZS1zdG9yYWdlLnNlcnZpY2UnO1xyXG5cclxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcclxuZXhwb3J0IGNsYXNzIFVzZXJSb3V0ZUFjY2Vzc1NlcnZpY2UgaW1wbGVtZW50cyBDYW5BY3RpdmF0ZSB7XHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICAgICAgIHByaXZhdGUgbG9naW5Nb2RhbFNlcnZpY2U6IExvZ2luTW9kYWxTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgcHJpbmNpcGFsOiBQcmluY2lwYWwsXHJcbiAgICAgICAgcHJpdmF0ZSBzdGF0ZVN0b3JhZ2VTZXJ2aWNlOiBTdGF0ZVN0b3JhZ2VTZXJ2aWNlXHJcbiAgICApIHt9XHJcblxyXG4gICAgY2FuQWN0aXZhdGUocm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsIHN0YXRlOiBSb3V0ZXJTdGF0ZVNuYXBzaG90KTogYm9vbGVhbiB8IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgICAgIGNvbnN0IGF1dGhvcml0aWVzID0gcm91dGUuZGF0YVsnYXV0aG9yaXRpZXMnXTtcclxuICAgICAgICByZXR1cm4gdGhpcy5jaGVja0xvZ2luKGF1dGhvcml0aWVzLCBzdGF0ZS51cmwpO1xyXG4gICAgfVxyXG5cclxuICAgIGNoZWNrTG9naW4oYXV0aG9yaXRpZXM6IHN0cmluZ1tdLCB1cmw6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgICAgIGNvbnN0IHByaW5jaXBhbCA9IHRoaXMucHJpbmNpcGFsO1xyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoXHJcbiAgICAgICAgICAgIHByaW5jaXBhbC5pZGVudGl0eSgpLnRoZW4oYWNjb3VudCA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWF1dGhvcml0aWVzIHx8IGF1dGhvcml0aWVzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChhY2NvdW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByaW5jaXBhbC5oYXNBbnlBdXRob3JpdHkoYXV0aG9yaXRpZXMpLnRoZW4ocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignVXNlciBoYXMgbm90IGFueSBvZiByZXF1aXJlZCBhdXRob3JpdGllczogJywgYXV0aG9yaXRpZXMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlU3RvcmFnZVNlcnZpY2Uuc3RvcmVVcmwodXJsKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnYWNjZXNzZGVuaWVkJ10pLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghYWNjb3VudCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2luTW9kYWxTZXJ2aWNlLm9wZW4oKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG59XHJcbiIsImV4cG9ydCBjbGFzcyBBY2NvdW50IHtcclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHB1YmxpYyBhY3RpdmF0ZWQ6IGJvb2xlYW4sXHJcbiAgICAgICAgcHVibGljIGF1dGhvcml0aWVzOiBzdHJpbmdbXSxcclxuICAgICAgICBwdWJsaWMgZW1haWw6IHN0cmluZyxcclxuICAgICAgICBwdWJsaWMgZmlyc3ROYW1lOiBzdHJpbmcsXHJcbiAgICAgICAgcHVibGljIGxhbmdLZXk6IHN0cmluZyxcclxuICAgICAgICBwdWJsaWMgbGFzdE5hbWU6IHN0cmluZyxcclxuICAgICAgICBwdWJsaWMgbG9naW46IHN0cmluZyxcclxuICAgICAgICBwdWJsaWMgaW1hZ2VVcmw6IHN0cmluZ1xyXG4gICAgKSB7fVxyXG59XHJcbiIsImV4cG9ydCBpbnRlcmZhY2UgSVVzZXIge1xyXG4gICAgaWQ/OiBhbnk7XHJcbiAgICBsb2dpbj86IHN0cmluZztcclxuICAgIGZpcnN0TmFtZT86IHN0cmluZztcclxuICAgIGxhc3ROYW1lPzogc3RyaW5nO1xyXG4gICAgZW1haWw/OiBzdHJpbmc7XHJcbiAgICBhY3RpdmF0ZWQ/OiBib29sZWFuO1xyXG4gICAgbGFuZ0tleT86IHN0cmluZztcclxuICAgIGF1dGhvcml0aWVzPzogYW55W107XHJcbiAgICBjcmVhdGVkQnk/OiBzdHJpbmc7XHJcbiAgICBjcmVhdGVkRGF0ZT86IERhdGU7XHJcbiAgICBsYXN0TW9kaWZpZWRCeT86IHN0cmluZztcclxuICAgIGxhc3RNb2RpZmllZERhdGU/OiBEYXRlO1xyXG4gICAgcGFzc3dvcmQ/OiBzdHJpbmc7XHJcbiAgICBhY2VpdGVMZ3BkPzogYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFVzZXIgaW1wbGVtZW50cyBJVXNlciB7XHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwdWJsaWMgaWQ/OiBhbnksXHJcbiAgICAgICAgcHVibGljIGxvZ2luPzogc3RyaW5nLFxyXG4gICAgICAgIHB1YmxpYyBmaXJzdE5hbWU/OiBzdHJpbmcsXHJcbiAgICAgICAgcHVibGljIGxhc3ROYW1lPzogc3RyaW5nLFxyXG4gICAgICAgIHB1YmxpYyBlbWFpbD86IHN0cmluZyxcclxuICAgICAgICBwdWJsaWMgYWN0aXZhdGVkPzogYm9vbGVhbixcclxuICAgICAgICBwdWJsaWMgbGFuZ0tleT86IHN0cmluZyxcclxuICAgICAgICBwdWJsaWMgYXV0aG9yaXRpZXM/OiBhbnlbXSxcclxuICAgICAgICBwdWJsaWMgY3JlYXRlZEJ5Pzogc3RyaW5nLFxyXG4gICAgICAgIHB1YmxpYyBjcmVhdGVkRGF0ZT86IERhdGUsXHJcbiAgICAgICAgcHVibGljIGxhc3RNb2RpZmllZEJ5Pzogc3RyaW5nLFxyXG4gICAgICAgIHB1YmxpYyBsYXN0TW9kaWZpZWREYXRlPzogRGF0ZSxcclxuICAgICAgICBwdWJsaWMgcGFzc3dvcmQ/OiBzdHJpbmcsXHJcbiAgICAgICAgcHVibGljIGFjZWl0ZUxncGQ/OiBib29sZWFuXHJcbiAgICApIHtcclxuICAgICAgICB0aGlzLmlkID0gaWQgPyBpZCA6IG51bGw7XHJcbiAgICAgICAgdGhpcy5sb2dpbiA9IGxvZ2luID8gbG9naW4gOiBudWxsO1xyXG4gICAgICAgIHRoaXMuZmlyc3ROYW1lID0gZmlyc3ROYW1lID8gZmlyc3ROYW1lIDogbnVsbDtcclxuICAgICAgICB0aGlzLmxhc3ROYW1lID0gbGFzdE5hbWUgPyBsYXN0TmFtZSA6IG51bGw7XHJcbiAgICAgICAgdGhpcy5lbWFpbCA9IGVtYWlsID8gZW1haWwgOiBudWxsO1xyXG4gICAgICAgIHRoaXMuYWN0aXZhdGVkID0gYWN0aXZhdGVkID8gYWN0aXZhdGVkIDogZmFsc2U7XHJcbiAgICAgICAgdGhpcy5sYW5nS2V5ID0gbGFuZ0tleSA/IGxhbmdLZXkgOiBudWxsO1xyXG4gICAgICAgIHRoaXMuYXV0aG9yaXRpZXMgPSBhdXRob3JpdGllcyA/IGF1dGhvcml0aWVzIDogbnVsbDtcclxuICAgICAgICB0aGlzLmNyZWF0ZWRCeSA9IGNyZWF0ZWRCeSA/IGNyZWF0ZWRCeSA6IG51bGw7XHJcbiAgICAgICAgdGhpcy5jcmVhdGVkRGF0ZSA9IGNyZWF0ZWREYXRlID8gY3JlYXRlZERhdGUgOiBudWxsO1xyXG4gICAgICAgIHRoaXMubGFzdE1vZGlmaWVkQnkgPSBsYXN0TW9kaWZpZWRCeSA/IGxhc3RNb2RpZmllZEJ5IDogbnVsbDtcclxuICAgICAgICB0aGlzLmxhc3RNb2RpZmllZERhdGUgPSBsYXN0TW9kaWZpZWREYXRlID8gbGFzdE1vZGlmaWVkRGF0ZSA6IG51bGw7XHJcbiAgICAgICAgdGhpcy5wYXNzd29yZCA9IHBhc3N3b3JkID8gcGFzc3dvcmQgOiBudWxsO1xyXG4gICAgICAgIHRoaXMuYWNlaXRlTGdwZCA9IGFjZWl0ZUxncGQgPyBhY2VpdGVMZ3BkIDogZmFsc2U7XHJcbiAgICB9XHJcbn1cclxuIiwiZXhwb3J0IGludGVyZmFjZSBJRW1wcmVzYSB7XHJcbiAgICBpZD86IG51bWJlcjtcclxuICAgIHJhemFvU29jaWFsPzogc3RyaW5nO1xyXG4gICAgbm9tZUZhbnRhc2lhPzogc3RyaW5nO1xyXG4gICAgdGVsZWZvbmU/OiBzdHJpbmc7XHJcbiAgICBsb2dvQ29udGVudFR5cGU/OiBzdHJpbmc7XHJcbiAgICBsb2dvPzogYW55O1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgRW1wcmVzYSBpbXBsZW1lbnRzIElFbXByZXNhIHtcclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHB1YmxpYyBpZD86IG51bWJlcixcclxuICAgICAgICBwdWJsaWMgcmF6YW9Tb2NpYWw/OiBzdHJpbmcsXHJcbiAgICAgICAgcHVibGljIG5vbWVGYW50YXNpYT86IHN0cmluZyxcclxuICAgICAgICBwdWJsaWMgdGVsZWZvbmU/OiBzdHJpbmcsXHJcbiAgICAgICAgcHVibGljIGxvZ29Db250ZW50VHlwZT86IHN0cmluZyxcclxuICAgICAgICBwdWJsaWMgbG9nbz86IGFueVxyXG4gICAgKSB7fVxyXG59XHJcbiIsImV4cG9ydCBpbnRlcmZhY2UgSU1lbnUge1xyXG4gICAgaWQ/OiBudW1iZXI7XHJcbiAgICBub21lPzogc3RyaW5nO1xyXG4gICAgcm90YT86IHN0cmluZztcclxuICAgIGljb25lPzogc3RyaW5nO1xyXG4gICAgY29yPzogc3RyaW5nO1xyXG4gICAgbW9kdWxvPzogc3RyaW5nO1xyXG4gICAgc2Vydmljbz86IHN0cmluZztcclxuICAgIGF0aXZvPzogYm9vbGVhbjtcclxuICAgIGV4aWJpcj86IGJvb2xlYW47XHJcbiAgICBwZXJpb2RvSW5pY2lhbD86IERhdGU7XHJcbiAgICBwZXJpb2RvRmluYWw/OiBEYXRlO1xyXG4gICAgcGFpPzogSU1lbnU7XHJcbiAgICBzdWJNZW51cz86IElNZW51W107XHJcbiAgICBsb2dpblBlbG9BcHA/OiBib29sZWFuO1xyXG4gICAgc2VtcHJlVmlzaXZlbD86IGJvb2xlYW47XHJcbiAgICB2aXNpdmVsU29tZW50ZVBhcmFHZXN0b3I/OiBib29sZWFuO1xyXG4gICAgc2VxdWVuY2lhPzogbnVtYmVyO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgTWVudSBpbXBsZW1lbnRzIElNZW51IHtcclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHB1YmxpYyBpZD86IG51bWJlcixcclxuICAgICAgICBwdWJsaWMgbm9tZT86IHN0cmluZyxcclxuICAgICAgICBwdWJsaWMgcm90YT86IHN0cmluZyxcclxuICAgICAgICBwdWJsaWMgaWNvbmU/OiBzdHJpbmcsXHJcbiAgICAgICAgcHVibGljIGNvcj86IHN0cmluZyxcclxuICAgICAgICBwdWJsaWMgbW9kdWxvPzogc3RyaW5nLFxyXG4gICAgICAgIHB1YmxpYyBzZXJ2aWNvPzogc3RyaW5nLFxyXG4gICAgICAgIHB1YmxpYyBhdGl2bz86IGJvb2xlYW4sXHJcbiAgICAgICAgcHVibGljIGV4aWJpcj86IGJvb2xlYW4sXHJcbiAgICAgICAgcHVibGljIHBlcmlvZG9JbmljaWFsPzogRGF0ZSxcclxuICAgICAgICBwdWJsaWMgcGVyaW9kb0ZpbmFsPzogRGF0ZSxcclxuICAgICAgICBwdWJsaWMgcGFpPzogTWVudSxcclxuICAgICAgICBwdWJsaWMgc3ViTWVudXM/OiBJTWVudVtdLFxyXG4gICAgICAgIHB1YmxpYyBsb2dpblBlbG9BcHA/OiBib29sZWFuLFxyXG4gICAgICAgIHB1YmxpYyBzZW1wcmVWaXNpdmVsPzogYm9vbGVhbixcclxuICAgICAgICBwdWJsaWMgdmlzaXZlbFNvbWVudGVQYXJhR2VzdG9yPzogYm9vbGVhbixcclxuICAgICAgICBwdWJsaWMgc2VxdWVuY2lhPzogbnVtYmVyXHJcbiAgICApIHtcclxuICAgICAgICB0aGlzLmF0aXZvID0gdGhpcy5hdGl2byB8fCBmYWxzZTtcclxuICAgIH1cclxufVxyXG4iLCJleHBvcnQgY2xhc3MgR2F0ZXdheVJvdXRlIHtcclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBwYXRoOiBzdHJpbmcsIHB1YmxpYyBzZXJ2aWNlSWQ6IHN0cmluZywgcHVibGljIHNlcnZpY2VJbnN0YW5jZXM6IGFueVtdKSB7fVxyXG59XHJcbiIsImltcG9ydCB7IEF1ZGl0RGF0YSB9IGZyb20gJy4vYXVkaXQtZGF0YS5tb2RlbCc7XHJcblxyXG5leHBvcnQgY2xhc3MgQXVkaXQge1xyXG4gICAgY29uc3RydWN0b3IocHVibGljIGRhdGE6IEF1ZGl0RGF0YSwgcHVibGljIHByaW5jaXBhbDogc3RyaW5nLCBwdWJsaWMgdGltZXN0YW1wOiBzdHJpbmcsIHB1YmxpYyB0eXBlOiBzdHJpbmcpIHt9XHJcbn1cclxuIiwiZXhwb3J0IGNsYXNzIEF1ZGl0RGF0YSB7XHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVtb3RlQWRkcmVzczogc3RyaW5nLCBwdWJsaWMgc2Vzc2lvbklkOiBzdHJpbmcsIHB1YmxpYyBsb2c6IHN0cmluZykge31cclxufVxyXG4iLCJleHBvcnQgY2xhc3MgTG9nIHtcclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBuYW1lOiBzdHJpbmcsIHB1YmxpYyBsZXZlbDogc3RyaW5nKSB7fVxyXG59XHJcbiIsImV4cG9ydCBjbGFzcyBQcm9maWxlSW5mbyB7XHJcbiAgICBhY3RpdmVQcm9maWxlczogc3RyaW5nW107XHJcbiAgICByaWJib25FbnY6IHN0cmluZztcclxuICAgIGluUHJvZHVjdGlvbjogYm9vbGVhbjtcclxuICAgIHN3YWdnZXJFbmFibGVkOiBib29sZWFuO1xyXG59XHJcbiIsIlxyXG5pbXBvcnQge1BhaXN9IGZyb20gJy4vcGFpcy5tb2RlbCc7XHJcblxyXG5leHBvcnQgY2xhc3MgTXVuaWNpcGlvIHtcclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICBwdWJsaWMgaWQ/OiBzdHJpbmcsXHJcbiAgICAgIHB1YmxpYyBkZXNjcmljYW8/OiBzdHJpbmcsXHJcbiAgICAgIHB1YmxpYyBlc3RhZG8/OiBzdHJpbmcsXHJcbiAgICAgIHB1YmxpYyBwYWlzPzogUGFpc1xyXG4gICAgKSB7fVxyXG59XHJcbiIsImltcG9ydCB7VGlwb0xvZ3JhZG91cm99IGZyb20gJy4vdGlwby1sb2dyYWRvdXJvLm1vZGVsJztcclxuaW1wb3J0IHtUaXR1bG9Mb2dyYWRvdXJvfSBmcm9tICcuL3RpdHVsby1sb2dyYWRvdXJvLm1vZGVsJztcclxuaW1wb3J0IHtNdW5pY2lwaW99IGZyb20gJy4vbXVuaWNpcGlvLm1vZGVsJztcclxuaW1wb3J0IHtQYWlzfSBmcm9tICcuL3BhaXMubW9kZWwnO1xyXG5pbXBvcnQge1RpcG9FbmRlcmVjb30gZnJvbSAnLi9lbnVtcy5tb2RlbCc7XHJcblxyXG5leHBvcnQgY2xhc3MgRW5kZXJlY28ge1xyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHVibGljIGlkPzogbnVtYmVyLFxyXG4gICAgICAgIHB1YmxpYyBkYXRhPzogRGF0ZSxcclxuICAgICAgICBwdWJsaWMgdGlwbz86IFRpcG9FbmRlcmVjbyxcclxuICAgICAgICBwdWJsaWMgdGlwb0xvZ3JhZG91cm8/OiBUaXBvTG9ncmFkb3VybyxcclxuICAgICAgICBwdWJsaWMgdGl0dWxvTG9ncmFkb3Vybz86IFRpdHVsb0xvZ3JhZG91cm8sXHJcbiAgICAgICAgcHVibGljIGxvZ3JhZG91cm8/OiBzdHJpbmcsXHJcbiAgICAgICAgcHVibGljIG51bWVybz86IHN0cmluZyxcclxuICAgICAgICBwdWJsaWMgYmFpcnJvPzogc3RyaW5nLFxyXG4gICAgICAgIHB1YmxpYyBjaWRhZGU/OiBzdHJpbmcsXHJcbiAgICAgICAgcHVibGljIHVmPzogc3RyaW5nLFxyXG4gICAgICAgIHB1YmxpYyBjaWRhZGVSZWdpYW8/OiBzdHJpbmcsXHJcbiAgICAgICAgcHVibGljIGNvbXBsZW1lbnRvPzogc3RyaW5nLFxyXG4gICAgICAgIHB1YmxpYyBjZXA/OiBzdHJpbmcsXHJcbiAgICAgICAgcHVibGljIG11bmljaXBpbz86IE11bmljaXBpbyxcclxuICAgICAgICBwdWJsaWMgcGFpcz86IFBhaXMsXHJcbiAgICAgICAgcHVibGljIHF1YWRyYT86IHN0cmluZyxcclxuICAgICAgICBwdWJsaWMgbG90ZT86IHN0cmluZyxcclxuICAgICAgICBwdWJsaWMgbG90ZWFtZW50bz86IHN0cmluZyxcclxuICAgICAgICBwdWJsaWMgY29uanVudG9IYWJpdGFjaW9uYWw/OiBzdHJpbmcsXHJcbiAgICAgICAgcHVibGljIGJsb2NvPzogc3RyaW5nLFxyXG4gICAgICAgIHB1YmxpYyBhcGFydGFtZW50bz86IHN0cmluZyxcclxuICAgICAgICBwdWJsaWMgb2JzZXJ2YWNvZXM/OiBzdHJpbmcsXHJcbiAgICAgICAgcHVibGljIGliZ2U/OiBzdHJpbmdcclxuICAgICkge1xyXG4gICAgICAgIHRoaXMubXVuaWNpcGlvID0gbmV3IE11bmljaXBpbygpO1xyXG4gICAgfVxyXG59XHJcbiIsImV4cG9ydCBjbGFzcyBQYWlzIHtcclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICBwdWJsaWMgaWQ/OiBudW1iZXIsXHJcbiAgICAgIHB1YmxpYyBkZXNjcmljYW8/OiBzdHJpbmdcclxuICAgICkge31cclxufVxyXG4iLCJleHBvcnQgY2xhc3MgVGlwb0xvZ3JhZG91cm8ge1xyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgIHB1YmxpYyBpZD86IG51bWJlcixcclxuICAgICAgcHVibGljIHNpZ2xhPzogc3RyaW5nLFxyXG4gICAgICBwdWJsaWMgZGVzY3JpY2FvPzogc3RyaW5nXHJcbiAgICApIHt9XHJcbn1cclxuIiwiZXhwb3J0IGNsYXNzIFRpdHVsb0xvZ3JhZG91cm8ge1xyXG4gICAgY29uc3RydWN0b3IocHVibGljIGlkPzogbnVtYmVyLCBwdWJsaWMgc2lnbGE/OiBzdHJpbmcsIHB1YmxpYyBkZXNjcmljYW8/OiBzdHJpbmcpIHt9XHJcbn1cclxuIiwiaW1wb3J0IHtNdW5pY2lwaW99IGZyb20gJy4vbXVuaWNpcGlvLm1vZGVsJztcclxuaW1wb3J0IHtTZXhvfSBmcm9tICcuL2VudW1zLm1vZGVsJztcclxuXHJcbmV4cG9ydCBjbGFzcyBQZXNzb2FGaXNpY2Ege1xyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHVibGljIGlkPzogbnVtYmVyLFxyXG4gICAgICAgIHB1YmxpYyByZXNpZGVudGVFeHRlcmlvcj86IGJvb2xlYW4sXHJcbiAgICAgICAgcHVibGljIG5vbWVNYWU/OiBzdHJpbmcsXHJcbiAgICAgICAgcHVibGljIG5vbWVQYWk/OiBzdHJpbmcsXHJcbiAgICAgICAgcHVibGljIGRhdGFOYXNjaW1lbnRvPzogRGF0ZSxcclxuICAgICAgICBwdWJsaWMgc2V4bz86IFNleG8sXHJcbiAgICAgICAgcHVibGljIGFub09iaXRvPzogbnVtYmVyLFxyXG4gICAgICAgIHB1YmxpYyBlc3RyYW5nZWlybz86IGJvb2xlYW4sXHJcbiAgICAgICAgcHVibGljIHJnPzogc3RyaW5nLFxyXG4gICAgICAgIHB1YmxpYyBjbmg/OiBzdHJpbmcsXHJcbiAgICAgICAgcHVibGljIG11bmljaXBpb05hdHVyYWxpZGFkZT86IE11bmljaXBpb1xyXG4gICAgKSB7fVxyXG59XHJcbiIsImV4cG9ydCBjbGFzcyBQZXNzb2FKdXJpZGljYSB7XHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwdWJsaWMgaWQ/OiBudW1iZXIsXHJcbiAgICAgICAgcHVibGljIGluc2NyaWNhb0VzdGFkdWFsPzogc3RyaW5nLFxyXG4gICAgICAgIHB1YmxpYyBub21lRmFudGFzaWE/OiBzdHJpbmcsXHJcbiAgICAgICAgcHVibGljIGRhdGFBYmVydHVyYT86IERhdGUsXHJcbiAgICAgICAgcHVibGljIGNhcGl0YWxTb2NpYWw/OiBudW1iZXIsXHJcbiAgICAgICAgcHVibGljIGNwZlJlc3BvbnNhdmVsPzogc3RyaW5nLFxyXG4gICAgICAgIHB1YmxpYyBub21lUmVzcG9uc2F2ZWw/OiBzdHJpbmcsXHJcbiAgICAgICAgcHVibGljIHV0aWxpemFyRW5kUHJpUGFyYUNvcnJlc3A/OiBib29sZWFuXHJcbiAgICApIHt9XHJcbn1cclxuIiwiaW1wb3J0IHtDb250cmlidWludGV9IGZyb20gJy4vY29udHJpYnVpbnRlLm1vZGVsJztcclxuaW1wb3J0IHtUaXBvUmVzcG9uc2F2ZWx9IGZyb20gJy4vZW51bXMubW9kZWwnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFJlc3BvbnNhdmVsIHtcclxuICAgIHB1YmxpYyBjb250cmlidWludGU6IENvbnRyaWJ1aW50ZSA9IG5ldyBDb250cmlidWludGUoKTtcclxuICAgIHB1YmxpYyB0aXBvOiBUaXBvUmVzcG9uc2F2ZWw7XHJcbn1cclxuIiwiZXhwb3J0IGNsYXNzIFZpYUNlcCB7XHJcbiAgICBjZXA6IHN0cmluZztcclxuICAgIGxvZ3JhZG91cm86IHN0cmluZztcclxuICAgIGNvbXBsZW1lbnRvOiBzdHJpbmc7XHJcbiAgICBiYWlycm86IHN0cmluZztcclxuICAgIGxvY2FsaWRhZGU6IHN0cmluZztcclxuICAgIHVmOiBzdHJpbmc7XHJcbiAgICB1bmlkYWRlOiBzdHJpbmc7XHJcbiAgICBpYmdlOiBzdHJpbmc7XHJcbiAgICBnaWE6IHN0cmluZztcclxufVxyXG4iLCJleHBvcnQgY2xhc3MgQ2VydGlkYW8ge1xyXG4gICAgcHVibGljIHRpcG86IHN0cmluZztcclxuICAgIHB1YmxpYyB2YWxvckJ1c2NhOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgbm9tZVNvbGljaXRhbnRlOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgZG9jdW1lbnRvU29saWNpdGFudGU6IHN0cmluZztcclxuICAgIHB1YmxpYyBhbm86IG51bWJlcjtcclxufVxyXG4iLCJleHBvcnQgY2xhc3MgQ29uZmlndXJhY2FvUGFyY2VsYW1lbnRvIHtcclxuICAgIHB1YmxpYyBjb2RpZ286IG51bWJlcjtcclxuICAgIHB1YmxpYyBxdWFudGlkYWRlTWF4aW1hUGFyY2VsYXM6IG51bWJlcjtcclxuICAgIHB1YmxpYyBwcmF6b1ByaW1laXJhUGFyY2VsYTogbnVtYmVyO1xyXG4gICAgcHVibGljIGRhdGFNaW5pbWFQcmltZWlyYVBhcmNlbGE6IERhdGU7XHJcbn1cclxuIiwiaW1wb3J0IHtFbmRlcmVjb30gZnJvbSAnLi9lbmRlcmVjby5tb2RlbCc7XHJcbmltcG9ydCB7UmVzcG9uc2F2ZWx9IGZyb20gJy4vcmVzcG9uc2F2ZWwubW9kZWwnO1xyXG5pbXBvcnQge1RpcG9JbW92ZWx9IGZyb20gJy4vZW51bXMubW9kZWwnO1xyXG5cclxuZXhwb3J0IGNsYXNzIEltb3ZlbCB7XHJcbiAgICBwdWJsaWMgY29kaWdvPzogbnVtYmVyO1xyXG4gICAgcHVibGljIGluc2NyaWNhbz86IHN0cmluZztcclxuICAgIHB1YmxpYyBlbmRlcmVjbz86IHN0cmluZztcclxuICAgIHB1YmxpYyBub21lUHJvcHJpZXRhcmlvPzogc3RyaW5nO1xyXG4gICAgcHVibGljIGRvY3VtZW50b1Byb3ByaWV0YXJpbzogc3RyaW5nO1xyXG4gICAgcHVibGljIHRpcG8/OiBUaXBvSW1vdmVsO1xyXG4gICAgcHVibGljIG1hdHJpY3VsYT86IHN0cmluZztcclxuICAgIHB1YmxpYyBlbmRlcmVjb1ByaW5jaXBhbD86IEVuZGVyZWNvID0gbmV3IEVuZGVyZWNvKCk7XHJcbiAgICBwdWJsaWMgZW5kZXJlY29Db2JyYW5jYT86IEVuZGVyZWNvID0gbmV3IEVuZGVyZWNvKCk7XHJcbiAgICBwdWJsaWMgcmVzcG9uc2F2ZWlzPzogQXJyYXk8UmVzcG9uc2F2ZWw+ID0gW107XHJcbn1cclxuIiwiaW1wb3J0IHtJbW92ZWx9IGZyb20gJy4vaW1vdmVsLm1vZGVsJztcclxuaW1wb3J0IHtDb250cmlidWludGV9IGZyb20gJy4vY29udHJpYnVpbnRlLm1vZGVsJztcclxuaW1wb3J0IHtEZWJpdG99IGZyb20gJy4vZGViaXRvLm1vZGVsJztcclxuXHJcbmV4cG9ydCBjbGFzcyBEYWRvc0RlYml0byB7XHJcbiAgICBwdWJsaWMgZGViaXRvczogQXJyYXk8RGViaXRvPiA9IFtdO1xyXG4gICAgcHVibGljIGltb3ZlbDogSW1vdmVsID0gbmV3IEltb3ZlbCgpO1xyXG4gICAgcHVibGljIGNvbnRyaWJ1aW50ZTogQ29udHJpYnVpbnRlID0gbmV3IENvbnRyaWJ1aW50ZSgpO1xyXG4gICAgcHVibGljIHBvc3N1aURlYml0b3NBanVpemFkb3M6IGJvb2xlYW47XHJcbiAgICBwdWJsaWMgcG9zc3VpRGViaXRvc1ZlbmNpZG9zOiBib29sZWFuO1xyXG4gICAgcHVibGljIGV4aXN0ZW1NYWlzRGViaXRvczogYm9vbGVhbjtcclxuICAgIHB1YmxpYyBleGlzdGVtRGViaXRvc0ltb2JpbGlhcmlvczogYm9vbGVhbjtcclxuICAgIHB1YmxpYyBleGlzdGVtRGViaXRvc0VtQ0RBOiBib29sZWFuO1xyXG4gICAgcHVibGljIGV4aXN0ZW1EZWJpdG9zTmFvTW9zdHJhZG9zRGl2aWRhQ29ycmVudGU6IGJvb2xlYW47XHJcbiAgICBwdWJsaWMgcG9zc3VpUGVuZGVuY2lhc0p1cmlkaWNhczogYm9vbGVhbjtcclxuICAgIHB1YmxpYyBwb3NzdWlQYXJjZWxhbWVudG9BdGl2bzogYm9vbGVhbjtcclxufVxyXG4iLCJpbXBvcnQge1NpdHVhY2FvRGl2aWRhRGViaXRvLCBTaXR1YWNhb1BhZ2FtZW50b0RlYml0bywgVGlwb1Blc3NvYX0gZnJvbSAnLi9lbnVtcy5tb2RlbCc7XHJcbmltcG9ydCB7UGFyY2VsYX0gZnJvbSAnLi9wYXJjZWxhLm1vZGVsJztcclxuaW1wb3J0IHtCYXNpY1Jlc3Bvc3RhfSBmcm9tICcuL2Jhc2ljLXJlc3Bvc3RhLm1vZGVsJztcclxuaW1wb3J0IHtPYnJhfSBmcm9tICcuL29icmEubW9kZWwnO1xyXG5cclxuZXhwb3J0IGNsYXNzIERlYml0byB7XHJcbiAgICBwdWJsaWMgY29kaWdvQ29udHJpYnVpbnRlOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgbm9tZUNvbnRyaWJ1aW50ZTogc3RyaW5nO1xyXG4gICAgcHVibGljIGluc2NyaWNhb011bmljaXBhbDogc3RyaW5nO1xyXG4gICAgcHVibGljIGRvY3VtZW50b0NvbnRyaWJ1aW50ZTogc3RyaW5nO1xyXG4gICAgcHVibGljIHRpcG9QZXNzb2E6IFRpcG9QZXNzb2E7XHJcbiAgICBwdWJsaWMgY29kaWdvRGViaXRvOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgZXhlcmNpY2lvRGViaXRvOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgc2l0dWFjYW9EZWJpdG86IFNpdHVhY2FvUGFnYW1lbnRvRGViaXRvO1xyXG4gICAgcHVibGljIHNpdHVhY2FvRGl2aWRhOiBTaXR1YWNhb0RpdmlkYURlYml0bztcclxuICAgIHB1YmxpYyBjb2RpZ29UcmlidXRvOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgZGVzY3JpY2FvVHJpYnV0bzogc3RyaW5nO1xyXG4gICAgcHVibGljIG9icmE6IE9icmE7XHJcbiAgICBwdWJsaWMgdmFsb3I6IG51bWJlcjtcclxuICAgIHB1YmxpYyB2YWxvckFiZXJ0bzogbnVtYmVyO1xyXG4gICAgcHVibGljIHZhbG9yQXR1YWxpemFkbzogbnVtYmVyO1xyXG4gICAgcHVibGljIHBhcmNlbGFzOiBBcnJheTxQYXJjZWxhPiA9IFtdO1xyXG4gICAgcHVibGljIGluc2NyaWNhb0ltb3ZlbDogc3RyaW5nO1xyXG4gICAgcHVibGljIGNvZGlnb0ltb3ZlbDogbnVtYmVyO1xyXG4gICAgcHVibGljIHBvZGVTZXJTZWxlY2lvbmFkbzogQmFzaWNSZXNwb3N0YTtcclxuICAgIHB1YmxpYyB0ZW1DREE6IGJvb2xlYW47XHJcbiAgICBwdWJsaWMgbnVtZXJvUHJvY2Vzc286IHN0cmluZztcclxuICAgIHB1YmxpYyBwZXJtaXRpclNlbGVjYW9QYXJjZWxhc0dlcmFjYW9HdWlhOiBib29sZWFuO1xyXG5cclxuICAgIC8vQ2FtcG9zIEZvcmEgZG8gRFRPXHJcbiAgICBwdWJsaWMgcG9zc3VpUGFyY2VsYXNWZW5jaWRhczogYm9vbGVhbjtcclxuICAgIHB1YmxpYyBwb3NzdWlDb3RhVW5pY2E6IGJvb2xlYW47XHJcbiAgICBwdWJsaWMgcG9zc3VpQ290YVVuaWNhQWJlcnRhOiBib29sZWFuO1xyXG4gICAgcHVibGljIHBvc3N1aVBhcmNlbGFzQWJlcnRhczogYm9vbGVhbjtcclxuICAgIHB1YmxpYyBwZXJtaXRlUmVmaXM6IGJvb2xlYW47XHJcbn1cclxuIiwiZXhwb3J0IGVudW0gVGlwb1Blc3NvYSB7XHJcbiAgRklTSUNBID0gJ0ZJU0lDQScsXHJcbiAgSlVSSURJQ0EgPSAnSlVSSURJQ0EnXHJcbn1cclxuXHJcbmV4cG9ydCBlbnVtIFNpdHVhY2FvQ29udHJpYnVpbnRlIHtcclxuICBBVElWTyA9ICdBVElWTycsXHJcbiAgSU5BVElWTyA9ICdJTkFUSVZPJ1xyXG59XHJcblxyXG5leHBvcnQgZW51bSBTaXR1YWNhb0RpdmlkYURlYml0byB7XHJcbiAgRElWSURBX0NPUlJFTlRFID0gJ0RJVklEQV9DT1JSRU5URScsXHJcbiAgRElWSURBX0FUSVZBID0gJ0RJVklEQV9BVElWQScsXHJcbiAgRElWSURBX0FKVUlaQURBID0gJ0RJVklEQV9BSlVJWkFEQSdcclxufVxyXG5cclxuZXhwb3J0IGVudW0gU2l0dWFjYW9QYWdhbWVudG9EZWJpdG8ge1xyXG4gIEFCRVJUTyA9ICdBQkVSVE8nLFxyXG4gIFBBR08gPSAnUEFHTycsXHJcbiAgUFJPVEVTVEFETyA9ICdQUk9URVNUQURPJ1xyXG59XHJcblxyXG5leHBvcnQgZW51bSBTaXR1YWNhb1BhZ2FtZW50b1BhcmNlbGEge1xyXG4gIEFCRVJUTyA9ICdBQkVSVE8nLFxyXG4gIFBBR08gPSAnUEFHTycsXHJcbiAgRU1fRElWSURBX0FUSVZBID0gJ0VNX0RJVklEQV9BVElWQScsXHJcbiAgRU1fRVhFQ1VDQU9fRklTQ0FMID0gJ0VNX0VYRUNVQ0FPX0ZJU0NBTCcsXHJcbiAgQ0FOQ0VMQURPID0gJ0NBTkNFTEFETycsXHJcbiAgQUdSVVBBRE9fRU1fUEFSQ0VMQU1FTlRPID0gJ0FHUlVQQURPX0VNX1BBUkNFTEFNRU5UTycsXHJcbiAgUFJPVEVTVEFETyA9ICdQUk9URVNUQURPJyxcclxuICBFWENMVUlETyA9ICdFWENMVUlETycsXHJcbiAgSU1VTkVfSVNFTlRPID0gJ0lNVU5FX0lTRU5UTycsXHJcbiAgRElGRVJFTkNBX0RFX1ZBTE9SX0NBTkNFTEFET19QQVJDSUFMTUVOVEUgPSAnRElGRVJFTkNBX0RFX1ZBTE9SX0NBTkNFTEFET19QQVJDSUFMTUVOVEUnLFxyXG4gIEJMT1FVRUFETyA9ICdCTE9RVUVBRE8nLFxyXG4gIEFHUlVQQURPX0VNX09VVFJBX1BBUkNFTEEgPSAnQUdSVVBBRE9fRU1fT1VUUkFfUEFSQ0VMQScsXHJcbiAgUFJFU0NSSVRPID0gJ1BSRVNDUklUTycsXHJcbiAgRU1fRklTQ0FMSVpBQ0FPID0gJ0VNX0ZJU0NBTElaQUNBTycsXHJcbiAgQkFJWEFfU0VNX01PVklNRU5UTyA9ICdCQUlYQV9TRU1fTU9WSU1FTlRPJyxcclxuICBFTV9SRUNVUlNPX0FETUlOSVNUUkFUSVZPID0gJ0VNX1JFQ1VSU09fQURNSU5JU1RSQVRJVk8nLFxyXG4gIFNVU1BFTlNPID0gJ1NVU1BFTlNPJ1xyXG59XHJcblxyXG5leHBvcnQgZW51bSBTZXhvIHtcclxuICBGRU1JTklOTyA9ICdGRU1JTklOTycsXHJcbiAgTUFTQ1VMSU5PID0gJ01BU0NVTElOTydcclxufVxyXG5cclxuZXhwb3J0IGVudW0gVGlwb0VuZGVyZWNvIHtcclxuICBQUklOQ0lQQUwgPSAnUFJJTkNJUEFMJyxcclxuICBDT1JSRVNQT05ERU5DSUEgPSAnQ09SUkVTUE9OREVOQ0lBJ1xyXG59XHJcblxyXG5leHBvcnQgZW51bSBUaXBvUmVzcG9uc2F2ZWwge1xyXG4gIFBSSU5DSVBBTCA9ICdQUklOQ0lQQUwnLFxyXG4gIFNPQ0lPID0gJ1NPQ0lPJyxcclxuICBQUk9DVVJBRE9SID0gJyBQUk9DVVJBRE9SJyxcclxuICBSRVNQT05TQVZFTF9JTU9CSUxJQVJJTyA9ICdSRVNQT05TQVZFTF9JTU9CSUxJQVJJTydcclxufVxyXG5cclxuZXhwb3J0IGVudW0gVGlwb0ltb3ZlbCB7XHJcbiAgVVJCQU5PID0gJ1VSQkFOTycsXHJcbiAgUlVSQUwgPSAnUlVSQUwnXHJcbn1cclxuXHJcbmV4cG9ydCBlbnVtIEVudW1QaXBlVHlwZSB7XHJcbiAgU0lUVUFDQU9fRElWSURBX0RFQklUTyxcclxuICBTSVRVQUNBT19QQUdBTUVOVE9fREVCSVRPLFxyXG4gIFNJVFVBQ0FPX1BBR0FNRU5UT19QQVJDRUxBLFxyXG4gIFRJUE9fUEVTU09BLFxyXG4gIFNJVFVBQ0FPX0NPTlRSSUJVSU5URSxcclxuICBTRVhPLFxyXG4gIFRJUE9fRU5ERVJFQ08sXHJcbiAgVElQT19SRVNQT05TQVZFTCxcclxuICBUSVBPX0lNT1ZFTFxyXG59XHJcblxyXG5leHBvcnQgZW51bSBDdXN0b21IVFRQU3RhdHVzIHtcclxuICBMT0NLX1BBR0UgPSAyOTYsXHJcbiAgUkVMRUFTRV9QQUdFID0gMjk3LFxyXG4gIFJFRElSRUNUX1BBR0UgPSAyOTgsXHJcbiAgQ0hFQ0tfQUxFUlQgPSAyOTlcclxufVxyXG5cclxuIiwiaW1wb3J0IHtQYXJjZWxhfSBmcm9tICcuL3BhcmNlbGEubW9kZWwnO1xyXG5pbXBvcnQge0RlYml0b30gZnJvbSBcIi4vZGViaXRvLm1vZGVsXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgRW1pc3Nhb0d1aWEge1xyXG4gIGRlYml0bzogRGViaXRvO1xyXG4gIHBhcmNlbGFzOiBBcnJheTxQYXJjZWxhPjtcclxuICBkYXRhVmVuY2ltZW50bzogRGF0ZTtcclxuICByZWZpczogYm9vbGVhbjtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICB0aGlzLnBhcmNlbGFzID0gW107XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgRW1pc3Nhb0d1aWFEZWJpdG9zQWdydXBhZG9zIHtcclxuICBkZWJpdG9zOiBBcnJheTxEZWJpdG8+O1xyXG5cclxuICBkYXRhVmVuY2ltZW50bzogRGF0ZTtcclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHRoaXMuZGViaXRvcyA9IFtdO1xyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQge1NpdHVhY2FvUGFnYW1lbnRvUGFyY2VsYX0gZnJvbSAnLi9lbnVtcy5tb2RlbCc7XHJcbmltcG9ydCB7QmFzaWNSZXNwb3N0YX0gZnJvbSAnLi9iYXNpYy1yZXNwb3N0YS5tb2RlbCc7XHJcblxyXG5leHBvcnQgY2xhc3MgUGFyY2VsYSB7XHJcbiAgICBwdWJsaWMgY29kaWdvOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgcGFyY2VsYTogc3RyaW5nO1xyXG4gICAgcHVibGljIHZlbmNpbWVudG86IERhdGU7XHJcbiAgICBwdWJsaWMgdmFsb3I6IG51bWJlcjtcclxuICAgIHB1YmxpYyBzaXR1YWNhb1BhZ2FtZW50bzogU2l0dWFjYW9QYWdhbWVudG9QYXJjZWxhO1xyXG4gICAgcHVibGljIGVzdGFWZW5jaWRhOiBib29sZWFuO1xyXG4gICAgcHVibGljIGVoVW5pY2E6IGJvb2xlYW47XHJcbiAgICBwdWJsaWMgZGFtOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgdmFsb3JBdHVhbGl6YWRvOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgdmFsb3JEZXNjb250bzogbnVtYmVyO1xyXG4gICAgcHVibGljIHBvZGVTZXJTZWxlY2lvbmFkbzogQmFzaWNSZXNwb3N0YTtcclxufVxyXG4iLCJpbXBvcnQge0NvbnRyaWJ1aW50ZX0gZnJvbSAnLi9jb250cmlidWludGUubW9kZWwnO1xyXG5pbXBvcnQge0ltb3ZlbH0gZnJvbSAnLi9pbW92ZWwubW9kZWwnO1xyXG5pbXBvcnQge0RlYml0b30gZnJvbSAnLi9kZWJpdG8ubW9kZWwnO1xyXG5pbXBvcnQge0NvbmZpZ3VyYWNhb1BhcmNlbGFtZW50b30gZnJvbSAnLi9jb25maWd1cmFjYW8tcGFyY2VsYW1lbnRvLm1vZGVsJztcclxuXHJcbmV4cG9ydCBjbGFzcyBQYXJjZWxhbWVudG8ge1xyXG4gICAgcHVibGljIGNvZGlnbzogbnVtYmVyO1xyXG4gICAgcHVibGljIHByb3ByaWV0YXJpbzogQ29udHJpYnVpbnRlO1xyXG4gICAgcHVibGljIGNwZlJlcXVlcmVudGU6IHN0cmluZztcclxuICAgIHB1YmxpYyByZXNwb25zYXZlbDogQ29udHJpYnVpbnRlID0gbmV3IENvbnRyaWJ1aW50ZSgpO1xyXG4gICAgcHVibGljIHJlcXVlcmVudGU6IENvbnRyaWJ1aW50ZSA9IG5ldyBDb250cmlidWludGUoKTtcclxuICAgIHB1YmxpYyBjb250cmliUG9ydGFsOiBDb250cmlidWludGUgPSBuZXcgQ29udHJpYnVpbnRlKCk7XHJcbiAgICBwdWJsaWMgaW1vdmVsOiBJbW92ZWw7XHJcbiAgICBwdWJsaWMgY29udHJpYnVpbnRlOiBDb250cmlidWludGUgPSBuZXcgQ29udHJpYnVpbnRlKCk7XHJcbiAgICBwdWJsaWMgZGViaXRvczogQXJyYXk8RGViaXRvPiA9IFtdO1xyXG4gICAgcHVibGljIG51bWVyb1BhcmNlbGFzOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgdmVuY2ltZW50b1ByaW1laXJhUGFyY2VsYTogRGF0ZTtcclxuICAgIHB1YmxpYyB2YWxvclRvdGFsOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgdmFsb3JUb3RhbE9yaWdpbmFsOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgdmFsb3JUb3RhbEFiZXJ0bzogbnVtYmVyO1xyXG4gICAgcHVibGljIHZhbG9yUHJpbWVpcmFQYXJjZWxhOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgdmFsb3JEZW1haXNQYXJjZWxhczogbnVtYmVyO1xyXG4gICAgcHVibGljIGNhZGFzdHJvVmFsaWRvOiBib29sZWFuO1xyXG4gICAgcHVibGljIHRlcm1vQWNlaXRvOiBib29sZWFuO1xyXG4gICAgcHVibGljIHZhbG9yUGFyY2lhbFRvdGFsOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgdmFsb3JQYXJjaWFsVG90YWxPcmlnaW5hbDogbnVtYmVyO1xyXG4gICAgcHVibGljIHZhbG9yUGFyY2lhbFRvdGFsQWJlcnRvOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgcHJvdG9jb2xvOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgY29uZmlndXJhY2FvUGFyY2VsYW1lbnRvOiBDb25maWd1cmFjYW9QYXJjZWxhbWVudG87XHJcbiAgICBwdWJsaWMgdmFsb3JEZXNjb250bzogbnVtYmVyO1xyXG4gICAgcHVibGljIGRlYml0b0dlcmFkb3I6IERlYml0bztcclxufVxyXG4iLCJpbXBvcnQge1xyXG4gIEVudW1QaXBlVHlwZSxcclxuICBTZXhvLFxyXG4gIFNpdHVhY2FvQ29udHJpYnVpbnRlLFxyXG4gIFNpdHVhY2FvRGl2aWRhRGViaXRvLFxyXG4gIFNpdHVhY2FvUGFnYW1lbnRvRGViaXRvLFxyXG4gIFNpdHVhY2FvUGFnYW1lbnRvUGFyY2VsYSwgVGlwb0VuZGVyZWNvLCBUaXBvSW1vdmVsLFxyXG4gIFRpcG9QZXNzb2EsIFRpcG9SZXNwb25zYXZlbFxyXG59IGZyb20gJy4vZW51bXMubW9kZWwnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbnN0YW50c0VudW0ge1xyXG4gIHB1YmxpYyBlbnVtUGlwZVR5cGUgPSBFbnVtUGlwZVR5cGU7XHJcbiAgcHVibGljIHRpcG9QZXNzb2EgPSBUaXBvUGVzc29hO1xyXG4gIHB1YmxpYyBzaXR1YWNhb0NvbnRyaWJ1aW50ZSA9IFNpdHVhY2FvQ29udHJpYnVpbnRlO1xyXG4gIHB1YmxpYyBzaXR1YWNhb0RpdmlkYURlYml0byA9IFNpdHVhY2FvRGl2aWRhRGViaXRvO1xyXG4gIHB1YmxpYyBzaXR1YWNhb1BhZ2FtZW50b0RlYml0byA9IFNpdHVhY2FvUGFnYW1lbnRvRGViaXRvO1xyXG4gIHB1YmxpYyBzaXR1YWNhb1BhZ2FtZW50b1BhcmNlbGEgPSBTaXR1YWNhb1BhZ2FtZW50b1BhcmNlbGE7XHJcbiAgcHVibGljIHNleG8gPSBTZXhvO1xyXG4gIHB1YmxpYyB0aXBvRW5kZXJlY28gPSBUaXBvRW5kZXJlY287XHJcbiAgcHVibGljIHRpcG9SZXNwb25zYXZlbCA9IFRpcG9SZXNwb25zYXZlbDtcclxuICBwdWJsaWMgdGlwb0ltb3ZlbCA9IFRpcG9JbW92ZWw7XHJcbn1cclxuIiwiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbnB1dCwgUmVuZGVyZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdqaGktcGFzc3dvcmQtc3RyZW5ndGgtYmFyJyxcclxuICAgIHRlbXBsYXRlOiBgXHJcbiAgICAgICAgPGRpdiBpZD1cInN0cmVuZ3RoXCI+XHJcbiAgICAgICAgICAgIDxzbWFsbD5Gb3LDg8KnYSBkYSBTZW5oYTo8L3NtYWxsPlxyXG4gICAgICAgICAgICA8dWwgaWQ9XCJzdHJlbmd0aEJhclwiPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwicG9pbnRcIj48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwicG9pbnRcIj48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwicG9pbnRcIj48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwicG9pbnRcIj48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwicG9pbnRcIj48L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvZGl2PmAsXHJcbiAgICBzdHlsZVVybHM6IFsncGFzc3dvcmQtc3RyZW5ndGgtYmFyLnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgUGFzc3dvcmRTdHJlbmd0aEJhckNvbXBvbmVudCB7XHJcbiAgICBjb2xvcnMgPSBbJyNGMDAnLCAnI0Y5MCcsICcjRkYwJywgJyM5RjAnLCAnIzBGMCddO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyLCBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYpIHt9XHJcblxyXG4gICAgbWVhc3VyZVN0cmVuZ3RoKHA6IHN0cmluZyk6IG51bWJlciB7XHJcbiAgICAgICAgbGV0IGZvcmNlID0gMDtcclxuICAgICAgICBjb25zdCByZWdleCA9IC9bJC0vOi0/ey1+IVwiXl9gXFxbXFxdXS9nOyAvLyBcIlxyXG4gICAgICAgIGNvbnN0IGxvd2VyTGV0dGVycyA9IC9bYS16XSsvLnRlc3QocCk7XHJcbiAgICAgICAgY29uc3QgdXBwZXJMZXR0ZXJzID0gL1tBLVpdKy8udGVzdChwKTtcclxuICAgICAgICBjb25zdCBudW1iZXJzID0gL1swLTldKy8udGVzdChwKTtcclxuICAgICAgICBjb25zdCBzeW1ib2xzID0gcmVnZXgudGVzdChwKTtcclxuXHJcbiAgICAgICAgY29uc3QgZmxhZ3MgPSBbbG93ZXJMZXR0ZXJzLCB1cHBlckxldHRlcnMsIG51bWJlcnMsIHN5bWJvbHNdO1xyXG4gICAgICAgIGNvbnN0IHBhc3NlZE1hdGNoZXMgPSBmbGFncy5maWx0ZXIoKGlzTWF0Y2hlZEZsYWc6IGJvb2xlYW4pID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIGlzTWF0Y2hlZEZsYWcgPT09IHRydWU7XHJcbiAgICAgICAgfSkubGVuZ3RoO1xyXG5cclxuICAgICAgICBmb3JjZSArPSAyICogcC5sZW5ndGggKyAocC5sZW5ndGggPj0gMTAgPyAxIDogMCk7XHJcbiAgICAgICAgZm9yY2UgKz0gcGFzc2VkTWF0Y2hlcyAqIDEwO1xyXG5cclxuICAgICAgICAvLyBwZW5hbHR5IChzaG9ydCBwYXNzd29yZClcclxuICAgICAgICBmb3JjZSA9IHAubGVuZ3RoIDw9IDYgPyBNYXRoLm1pbihmb3JjZSwgMTApIDogZm9yY2U7XHJcblxyXG4gICAgICAgIC8vIHBlbmFsdHkgKHBvb3IgdmFyaWV0eSBvZiBjaGFyYWN0ZXJzKVxyXG4gICAgICAgIGZvcmNlID0gcGFzc2VkTWF0Y2hlcyA9PT0gMSA/IE1hdGgubWluKGZvcmNlLCAxMCkgOiBmb3JjZTtcclxuICAgICAgICBmb3JjZSA9IHBhc3NlZE1hdGNoZXMgPT09IDIgPyBNYXRoLm1pbihmb3JjZSwgMjApIDogZm9yY2U7XHJcbiAgICAgICAgZm9yY2UgPSBwYXNzZWRNYXRjaGVzID09PSAzID8gTWF0aC5taW4oZm9yY2UsIDQwKSA6IGZvcmNlO1xyXG5cclxuICAgICAgICByZXR1cm4gZm9yY2U7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q29sb3IoczogbnVtYmVyKTogYW55IHtcclxuICAgICAgICBsZXQgaWR4ID0gMDtcclxuICAgICAgICBpZiAocyA8PSAxMCkge1xyXG4gICAgICAgICAgICBpZHggPSAwO1xyXG4gICAgICAgIH0gZWxzZSBpZiAocyA8PSAyMCkge1xyXG4gICAgICAgICAgICBpZHggPSAxO1xyXG4gICAgICAgIH0gZWxzZSBpZiAocyA8PSAzMCkge1xyXG4gICAgICAgICAgICBpZHggPSAyO1xyXG4gICAgICAgIH0gZWxzZSBpZiAocyA8PSA0MCkge1xyXG4gICAgICAgICAgICBpZHggPSAzO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlkeCA9IDQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7IGlkeDogaWR4ICsgMSwgY29sOiB0aGlzLmNvbG9yc1tpZHhdIH07XHJcbiAgICB9XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHNldCBwYXNzd29yZFRvQ2hlY2socGFzc3dvcmQ6IHN0cmluZykge1xyXG4gICAgICAgIGlmIChwYXNzd29yZCkge1xyXG4gICAgICAgICAgICBjb25zdCBjID0gdGhpcy5nZXRDb2xvcih0aGlzLm1lYXN1cmVTdHJlbmd0aChwYXNzd29yZCkpO1xyXG4gICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50LmNsYXNzTmFtZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRFbGVtZW50Q2xhc3MoZWxlbWVudCwgZWxlbWVudC5jbGFzc05hbWUsIGZhbHNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBsaXMgPSBlbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdsaScpO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGkgPCBjLmlkeCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0RWxlbWVudFN0eWxlKGxpc1tpXSwgJ2JhY2tncm91bmRDb2xvcicsIGMuY29sKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRFbGVtZW50U3R5bGUobGlzW2ldLCAnYmFja2dyb3VuZENvbG9yJywgJyNEREQnKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge05nTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtQYXNzd29yZFN0cmVuZ3RoQmFyQ29tcG9uZW50fSBmcm9tICcuL3Bhc3N3b3JkLXN0cmVuZ3RoLWJhci5jb21wb25lbnQnO1xyXG5cclxuQE5nTW9kdWxlKHtcclxuICAgIGRlY2xhcmF0aW9uczogW1Bhc3N3b3JkU3RyZW5ndGhCYXJDb21wb25lbnRdLFxyXG4gICAgaW1wb3J0czogW10sXHJcbiAgICBleHBvcnRzOiBbUGFzc3dvcmRTdHJlbmd0aEJhckNvbXBvbmVudF1cclxufSlcclxuZXhwb3J0IGNsYXNzIFBhc3N3b3JkU3RyZW5ndGhNb2R1bGUgeyB9XHJcbiIsImltcG9ydCB7Q1VTVE9NX0VMRU1FTlRTX1NDSEVNQSwgTmdNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge05nYk1vZHVsZX0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQge0ZvbnRBd2Vzb21lTW9kdWxlfSBmcm9tICdAZm9ydGF3ZXNvbWUvYW5ndWxhci1mb250YXdlc29tZSc7XHJcbmltcG9ydCB7bGlicmFyeX0gZnJvbSAnQGZvcnRhd2Vzb21lL2ZvbnRhd2Vzb21lLXN2Zy1jb3JlJztcclxuaW1wb3J0IHtSZWdpc3RlckNvbXBvbmVudH0gZnJvbSAnLi9yZWdpc3Rlci5jb21wb25lbnQnO1xyXG5pbXBvcnQge1JlZ2lzdGVyTW9kYWxTZXJ2aWNlfSBmcm9tICcuL3JlZ2lzdGVyLW1vZGFsLnNlcnZpY2UnO1xyXG5pbXBvcnQge1JlZ2lzdGVyfSBmcm9tICcuL3JlZ2lzdGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQge0NvbW1vbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHtGb3Jtc01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQge0NwZkNucGpNb2R1bGV9IGZyb20gJy4uL2NvbXBvbmVudHMvY3BmLWNucGovY3BmLWNucGoubW9kdWxlJztcclxuaW1wb3J0IHtOZ3hNYXNrTW9kdWxlfSBmcm9tICduZ3gtbWFzayc7XHJcbmltcG9ydCB7ZmFVc2VyUGx1c30gZnJvbSAnQGZvcnRhd2Vzb21lL2ZyZWUtc29saWQtc3ZnLWljb25zL2ZhVXNlclBsdXMnO1xyXG5pbXBvcnQge1BvcnRhbEFsZXJ0TW9kdWxlfSBmcm9tICcuLi9hbGVydC9wb3J0YWwtYWxlcnQubW9kdWxlJztcclxuaW1wb3J0IHtQYXNzd29yZFN0cmVuZ3RoTW9kdWxlfSBmcm9tICcuLi9jb21wb25lbnRzL3Bhc3N3b3JkLXN0cmVuZ3RoL3Bhc3N3b3JkLXN0cmVuZ3RoLm1vZHVsZSc7XHJcbmltcG9ydCB7VGVybW9MZ3BkTW9kdWxlfSBmcm9tICcuLi9jb21wb25lbnRzL3Rlcm1vLWxncGQvdGVybW8tbGdwZC5tb2R1bGUnO1xyXG5cclxubGlicmFyeS5hZGQoZmFVc2VyUGx1cyk7XHJcblxyXG5ATmdNb2R1bGUoe1xyXG4gICAgaW1wb3J0czogW1xyXG4gICAgICBDb21tb25Nb2R1bGUsXHJcbiAgICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgICBGb250QXdlc29tZU1vZHVsZSxcclxuICAgICAgQ3BmQ25wak1vZHVsZSxcclxuICAgICAgTmdiTW9kdWxlLmZvclJvb3QoKSxcclxuICAgICAgTmd4TWFza01vZHVsZSxcclxuICAgICAgUGFzc3dvcmRTdHJlbmd0aE1vZHVsZSxcclxuICAgICAgUG9ydGFsQWxlcnRNb2R1bGUsXHJcbiAgICAgIFRlcm1vTGdwZE1vZHVsZVxyXG4gICAgXSxcclxuICAgIGRlY2xhcmF0aW9uczogW1xyXG4gICAgICBSZWdpc3RlckNvbXBvbmVudFxyXG4gICAgXSxcclxuICAgIGVudHJ5Q29tcG9uZW50czogW1xyXG4gICAgICBSZWdpc3RlckNvbXBvbmVudFxyXG4gICAgXSxcclxuICAgIGV4cG9ydHM6IFtcclxuICAgICAgUmVnaXN0ZXJDb21wb25lbnRcclxuICAgIF0sXHJcbiAgICBwcm92aWRlcnM6IFtcclxuICAgICAgUmVnaXN0ZXIsXHJcbiAgICAgIFJlZ2lzdGVyTW9kYWxTZXJ2aWNlXHJcbiAgICBdLFxyXG4gICAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSZWdpc3Rlck1vZHVsZSB7fVxyXG4iLCJpbXBvcnQge0NVU1RPTV9FTEVNRU5UU19TQ0hFTUEsIE5nTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtsaWJyYXJ5fSBmcm9tICdAZm9ydGF3ZXNvbWUvZm9udGF3ZXNvbWUtc3ZnLWNvcmUnO1xyXG5pbXBvcnQge2ZhVXNlcn0gZnJvbSAnQGZvcnRhd2Vzb21lL2ZyZWUtc29saWQtc3ZnLWljb25zL2ZhVXNlcic7XHJcbmltcG9ydCB7Q29tbW9uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQge0Zvcm1zTW9kdWxlfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7SmhpTG9naW5Nb2RhbENvbXBvbmVudH0gZnJvbSAnLi9sb2dpbi5jb21wb25lbnQnO1xyXG5pbXBvcnQge05nYk1vZHVsZX0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQge0ZvbnRBd2Vzb21lTW9kdWxlfSBmcm9tICdAZm9ydGF3ZXNvbWUvYW5ndWxhci1mb250YXdlc29tZSc7XHJcbmltcG9ydCB7UmVnaXN0ZXJNb2R1bGV9IGZyb20gJy4uL3JlZ2lzdGVyL3JlZ2lzdGVyLm1vZHVsZSc7XHJcbmltcG9ydCB7VGVybW9MZ3BkTW9kdWxlfSBmcm9tICcuLi9jb21wb25lbnRzL3Rlcm1vLWxncGQvdGVybW8tbGdwZC5tb2R1bGUnO1xyXG5pbXBvcnQge05neE1hc2tNb2R1bGV9IGZyb20gJ25neC1tYXNrJztcclxuaW1wb3J0IHtQb3J0YWxBbGVydE1vZHVsZX0gZnJvbSAnLi4vYWxlcnQvcG9ydGFsLWFsZXJ0Lm1vZHVsZSc7XHJcbmltcG9ydCB7TmdKaGlwc3Rlck1vZHVsZX0gZnJvbSBcIm5nLWpoaXBzdGVyXCI7XHJcblxyXG5saWJyYXJ5LmFkZChmYVVzZXIpO1xyXG5cclxuQE5nTW9kdWxlKHtcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBGb3Jtc01vZHVsZSxcclxuICAgIE5nYk1vZHVsZS5mb3JSb290KCksXHJcbiAgICBGb250QXdlc29tZU1vZHVsZSxcclxuICAgIFJlZ2lzdGVyTW9kdWxlLFxyXG4gICAgRm9udEF3ZXNvbWVNb2R1bGUsXHJcbiAgICBOZ3hNYXNrTW9kdWxlLFxyXG4gICAgUG9ydGFsQWxlcnRNb2R1bGUsXHJcbiAgICBUZXJtb0xncGRNb2R1bGUsXHJcbiAgICBOZ0poaXBzdGVyTW9kdWxlXHJcbiAgXSxcclxuICBlbnRyeUNvbXBvbmVudHM6IFtcclxuICAgIEpoaUxvZ2luTW9kYWxDb21wb25lbnRcclxuICBdLFxyXG4gIGRlY2xhcmF0aW9uczogW1xyXG4gICAgSmhpTG9naW5Nb2RhbENvbXBvbmVudFxyXG4gIF0sXHJcbiAgZXhwb3J0czogW1xyXG4gICAgSmhpTG9naW5Nb2RhbENvbXBvbmVudFxyXG4gIF0sXHJcbiAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBMb2dpbk1vZHVsZSB7XHJcbn1cclxuIiwiLypcclxuICAgIExhbmd1YWdlcyBjb2RlcyBhcmUgSVNPXzYzOS0xIGNvZGVzLCBzZWUgaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9MaXN0X29mX0lTT182MzktMV9jb2Rlc1xyXG4gICAgVGhleSBhcmUgd3JpdHRlbiBpbiBFbmdsaXNoIHRvIGF2b2lkIGNoYXJhY3RlciBlbmNvZGluZyBpc3N1ZXMgKG5vdCBhIHBlcmZlY3Qgc29sdXRpb24pXHJcbiovXHJcbmV4cG9ydCBjb25zdCBMQU5HVUFHRVM6IHN0cmluZ1tdID0gW1xyXG4gICAgJ3B0LWJyJ1xyXG4gICAgLy8gamhpcHN0ZXItbmVlZGxlLWkxOG4tbGFuZ3VhZ2UtY29uc3RhbnQgLSBKSGlwc3RlciB3aWxsIGFkZC9yZW1vdmUgbGFuZ3VhZ2VzIGluIHRoaXMgYXJyYXlcclxuXTtcclxuIiwiaW1wb3J0IHtJbmplY3RhYmxlLCBSZW5kZXJlcjIsIFJlbmRlcmVyRmFjdG9yeTJ9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1RpdGxlfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcclxuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7TGFuZ0NoYW5nZUV2ZW50LCBUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGV9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge0xBTkdVQUdFU30gZnJvbSAnLi9sYW5ndWFnZS5jb25zdGFudHMnO1xyXG5cclxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcclxuZXhwb3J0IGNsYXNzIEpoaUxhbmd1YWdlSGVscGVyIHtcclxuICAgIHJlbmRlcmVyOiBSZW5kZXJlcjIgPSBudWxsO1xyXG4gICAgcHJpdmF0ZSBfbGFuZ3VhZ2U6IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcclxuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLXVudXNlZC12YXJpYWJsZVxyXG4gICAgICAgIHByaXZhdGUgcm9vdFJlbmRlcmVyOiBSZW5kZXJlckZhY3RvcnkyLFxyXG4gICAgICAgIHByaXZhdGUgdGl0bGVTZXJ2aWNlOiBUaXRsZSxcclxuICAgICAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyXHJcbiAgICApIHtcclxuICAgICAgICB0aGlzLl9sYW5ndWFnZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPih0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuY3VycmVudExhbmcpO1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIgPSByb290UmVuZGVyZXIuY3JlYXRlUmVuZGVyZXIoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaHRtbCcpLCBudWxsKTtcclxuICAgICAgICB0aGlzLmluaXQoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRBbGwoKTogUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKExBTkdVQUdFUyk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGxhbmd1YWdlKCk6IE9ic2VydmFibGU8c3RyaW5nPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xhbmd1YWdlLmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVXBkYXRlIHRoZSB3aW5kb3cgdGl0bGUgdXNpbmcgcGFyYW1zIGluIHRoZSBmb2xsb3dpbmdcclxuICAgICAqIG9yZGVyOlxyXG4gICAgICogMS4gdGl0bGVLZXkgcGFyYW1ldGVyXHJcbiAgICAgKiAyLiAkc3RhdGUuJGN1cnJlbnQuZGF0YS5wYWdlVGl0bGUgKGN1cnJlbnQgc3RhdGUgcGFnZSB0aXRsZSlcclxuICAgICAqIDMuICdnbG9iYWwudGl0bGUnXHJcbiAgICAgKi9cclxuICAgIHVwZGF0ZVRpdGxlKHRpdGxlS2V5Pzogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKCF0aXRsZUtleSkge1xyXG4gICAgICAgICAgICB0aXRsZUtleSA9IHRoaXMuZ2V0UGFnZVRpdGxlKHRoaXMucm91dGVyLnJvdXRlclN0YXRlLnNuYXBzaG90LnJvb3QpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmdldCh0aXRsZUtleSkuc3Vic2NyaWJlKHRpdGxlID0+IHtcclxuICAgICAgICAgICAgaWYgKHRpdGxlLmluY2x1ZGVzKCd0cmFuc2xhdGlvbi1ub3QtZm91bmQnKSkge1xyXG4gICAgICAgICAgICAgIHRpdGxlID0gdGl0bGVLZXk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy50aXRsZVNlcnZpY2Uuc2V0VGl0bGUodGl0bGUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaW5pdCgpIHtcclxuICAgICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2Uub25MYW5nQ2hhbmdlLnN1YnNjcmliZSgoZXZlbnQ6IExhbmdDaGFuZ2VFdmVudCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLl9sYW5ndWFnZS5uZXh0KHRoaXMudHJhbnNsYXRlU2VydmljZS5jdXJyZW50TGFuZyk7XHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2h0bWwnKSwgJ2xhbmcnLCB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuY3VycmVudExhbmcpO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVRpdGxlKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRQYWdlVGl0bGUocm91dGVTbmFwc2hvdDogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCkge1xyXG4gICAgICAgIGxldCB0aXRsZTogc3RyaW5nID0gcm91dGVTbmFwc2hvdC5kYXRhICYmIHJvdXRlU25hcHNob3QuZGF0YVsncGFnZVRpdGxlJ10gPyByb3V0ZVNuYXBzaG90LmRhdGFbJ3BhZ2VUaXRsZSddIDogJ3BvcnRhbEdhdGV3YXlBcHAnO1xyXG4gICAgICAgIGlmIChyb3V0ZVNuYXBzaG90LmZpcnN0Q2hpbGQpIHtcclxuICAgICAgICAgICAgdGl0bGUgPSB0aGlzLmdldFBhZ2VUaXRsZShyb3V0ZVNuYXBzaG90LmZpcnN0Q2hpbGQpIHx8IHRpdGxlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGl0bGU7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEdhdGV3YXlSb3V0ZSB9IGZyb20gJy4uLy4uL21vZGVsL2dhdGV3YXktcm91dGUubW9kZWwnO1xyXG5cclxuY29uc3QgU0VSVkVSX0FQSV9VUkwgPSAnLi8nO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgR2F0ZXdheVJvdXRlc1NlcnZpY2Uge1xyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50KSB7fVxyXG5cclxuICAgIGZpbmRBbGwoKTogT2JzZXJ2YWJsZTxHYXRld2F5Um91dGVbXT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEdhdGV3YXlSb3V0ZVtdPihTRVJWRVJfQVBJX1VSTCArICdhcGkvZ2F0ZXdheS9yb3V0ZXMvJyk7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmltcG9ydCB7IEdhdGV3YXlSb3V0ZXNTZXJ2aWNlIH0gZnJvbSAnLi9nYXRld2F5LXJvdXRlcy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgR2F0ZXdheVJvdXRlIH0gZnJvbSAnLi4vLi4vbW9kZWwvZ2F0ZXdheS1yb3V0ZS5tb2RlbCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnamhpLWdhdGV3YXknLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2dhdGV3YXkuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgcHJvdmlkZXJzOiBbR2F0ZXdheVJvdXRlc1NlcnZpY2VdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBKaGlHYXRld2F5Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICAgIGdhdGV3YXlSb3V0ZXM6IEdhdGV3YXlSb3V0ZVtdO1xyXG4gICAgdXBkYXRpbmdSb3V0ZXM6IEJvb2xlYW47XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBnYXRld2F5Um91dGVzU2VydmljZTogR2F0ZXdheVJvdXRlc1NlcnZpY2UpIHt9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5yZWZyZXNoKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVmcmVzaCgpIHtcclxuICAgICAgICB0aGlzLnVwZGF0aW5nUm91dGVzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmdhdGV3YXlSb3V0ZXNTZXJ2aWNlLmZpbmRBbGwoKS5zdWJzY3JpYmUoZ2F0ZXdheVJvdXRlcyA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2F0ZXdheVJvdXRlcyA9IGdhdGV3YXlSb3V0ZXM7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRpbmdSb3V0ZXMgPSBmYWxzZTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQgeyBSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcblxyXG5pbXBvcnQgeyBKaGlHYXRld2F5Q29tcG9uZW50IH0gZnJvbSAnLi9nYXRld2F5LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7VXNlclJvdXRlQWNjZXNzU2VydmljZX0gZnJvbSAnLi4vLi4vYXV0aC91c2VyLXJvdXRlLWFjY2Vzcy1zZXJ2aWNlJztcclxuXHJcbmV4cG9ydCBjb25zdCBnYXRld2F5Um91dGU6IFJvdXRlW10gPSBbXHJcbiAge1xyXG4gICAgcGF0aDogJ2dhdGV3YXknLFxyXG4gICAgY29tcG9uZW50OiBKaGlHYXRld2F5Q29tcG9uZW50LFxyXG4gICAgZGF0YToge1xyXG4gICAgICAgIHBhZ2VUaXRsZTogJ0dhdGV3YXknLFxyXG4gICAgICAgIGF1dGhvcml0aWVzOiBbJ1JPTEVfQURNSU4nXVxyXG4gICAgfSxcclxuICAgIGNhbkFjdGl2YXRlOiBbVXNlclJvdXRlQWNjZXNzU2VydmljZV1cclxuICB9XHJcbl07XHJcbiIsImltcG9ydCB7Q1VTVE9NX0VMRU1FTlRTX1NDSEVNQSwgTmdNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1JvdXRlck1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7Rm9ybXNNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHtKaGlHYXRld2F5Q29tcG9uZW50fSBmcm9tICcuL2dhdGV3YXkuY29tcG9uZW50JztcclxuaW1wb3J0IHtnYXRld2F5Um91dGV9IGZyb20gJy4vZ2F0ZXdheS5yb3V0ZSdcclxuaW1wb3J0IHtOZ0poaXBzdGVyTW9kdWxlfSBmcm9tICduZy1qaGlwc3Rlcic7XHJcbmltcG9ydCB7R2F0ZXdheVJvdXRlc1NlcnZpY2V9IGZyb20gJy4vZ2F0ZXdheS1yb3V0ZXMuc2VydmljZSc7XHJcblxyXG5jb25zdCBFTlRJVFlfU1RBVEVTID0gWy4uLmdhdGV3YXlSb3V0ZV07XHJcblxyXG5ATmdNb2R1bGUoe1xyXG4gICAgaW1wb3J0czogW1xyXG4gICAgICBDb21tb25Nb2R1bGUsXHJcbiAgICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgICBOZ0poaXBzdGVyTW9kdWxlLFxyXG4gICAgICBSb3V0ZXJNb2R1bGUuZm9yQ2hpbGQoRU5USVRZX1NUQVRFUylcclxuICAgIF0sXHJcbiAgICBleHBvcnRzOiBbXHJcbiAgICAgIEpoaUdhdGV3YXlDb21wb25lbnRcclxuICAgIF0sXHJcbiAgICBkZWNsYXJhdGlvbnM6IFtcclxuICAgICAgSmhpR2F0ZXdheUNvbXBvbmVudFxyXG4gICAgXSxcclxuICAgIHByb3ZpZGVyczogW1xyXG4gICAgICBHYXRld2F5Um91dGVzU2VydmljZVxyXG4gICAgXSxcclxuICAgIHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgR2F0ZXdheU1vZHVsZSB7fVxyXG4iLCJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0h0dHBDbGllbnQsIEh0dHBQYXJhbXMsIEh0dHBSZXNwb25zZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge2NyZWF0ZVJlcXVlc3RPcHRpb259IGZyb20gJy4uLy4uL3V0aWwvcmVxdWVzdC11dGlsJztcclxuaW1wb3J0IHtBdWRpdH0gZnJvbSAnLi4vLi4vbW9kZWwvYXVkaXQubW9kZWwnO1xyXG5cclxuY29uc3QgU0VSVkVSX0FQSV9VUkwgPSAgJy4vJztcclxuXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXHJcbmV4cG9ydCBjbGFzcyBBdWRpdHNTZXJ2aWNlIHtcclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCkge31cclxuXHJcbiAgICBxdWVyeShyZXE6IGFueSk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPEF1ZGl0W10+PiB7XHJcbiAgICAgICAgY29uc3QgcGFyYW1zOiBIdHRwUGFyYW1zID0gY3JlYXRlUmVxdWVzdE9wdGlvbihyZXEpO1xyXG4gICAgICAgIHBhcmFtcy5zZXQoJ2Zyb21EYXRlJywgcmVxLmZyb21EYXRlKTtcclxuICAgICAgICBwYXJhbXMuc2V0KCd0b0RhdGUnLCByZXEudG9EYXRlKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxBdWRpdFtdPihTRVJWRVJfQVBJX1VSTCArICdtYW5hZ2VtZW50L2F1ZGl0cycsIHtcclxuICAgICAgICAgICAgcGFyYW1zLFxyXG4gICAgICAgICAgICBvYnNlcnZlOiAncmVzcG9uc2UnXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtDb21wb25lbnQsIE9uRGVzdHJveSwgT25Jbml0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtIdHRwUmVzcG9uc2V9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHtEYXRlUGlwZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQge0poaVBhcnNlTGlua3N9IGZyb20gJ25nLWpoaXBzdGVyJztcclxuaW1wb3J0IHtBdWRpdHNTZXJ2aWNlfSBmcm9tICcuL2F1ZGl0cy5zZXJ2aWNlJztcclxuaW1wb3J0IHtQb3J0YWxBbGVydFNlcnZpY2V9IGZyb20gJy4uLy4uL2FsZXJ0L3BvcnRhbC1hbGVydC5zZXJ2aWNlJztcclxuaW1wb3J0IHtJVEVNU19QRVJfUEFHRX0gZnJvbSAnLi4vLi4vdXRpbC9wYWdpbmF0aW9uLmNvbnN0YW50cyc7XHJcbmltcG9ydCB7QXVkaXR9IGZyb20gJy4uLy4uL21vZGVsL2F1ZGl0Lm1vZGVsJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdqaGktYXVkaXQnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2F1ZGl0cy5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEF1ZGl0c0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICAgIGF1ZGl0czogQXVkaXRbXTtcclxuICAgIGZyb21EYXRlOiBzdHJpbmc7XHJcbiAgICBpdGVtc1BlclBhZ2U6IGFueTtcclxuICAgIGxpbmtzOiBhbnk7XHJcbiAgICBxdWVyeUNvdW50OiBudW1iZXI7XHJcbiAgICBwYWdlOiBudW1iZXI7XHJcbiAgICByb3V0ZURhdGE6IGFueTtcclxuICAgIHByZWRpY2F0ZTogYW55O1xyXG4gICAgcHJldmlvdXNQYWdlOiBhbnk7XHJcbiAgICByZXZlcnNlOiBib29sZWFuO1xyXG4gICAgdG9EYXRlOiBzdHJpbmc7XHJcbiAgICB0b3RhbEl0ZW1zOiBudW1iZXI7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBhdWRpdHNTZXJ2aWNlOiBBdWRpdHNTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgYWxlcnRTZXJ2aWNlOiBQb3J0YWxBbGVydFNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBwYXJzZUxpbmtzOiBKaGlQYXJzZUxpbmtzLFxyXG4gICAgICAgIHByaXZhdGUgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgICAgIHByaXZhdGUgZGF0ZVBpcGU6IERhdGVQaXBlLFxyXG4gICAgICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXJcclxuICAgICkge1xyXG4gICAgICAgIHRoaXMuaXRlbXNQZXJQYWdlID0gSVRFTVNfUEVSX1BBR0U7XHJcbiAgICAgICAgdGhpcy5yb3V0ZURhdGEgPSB0aGlzLmFjdGl2YXRlZFJvdXRlLmRhdGEuc3Vic2NyaWJlKGRhdGEgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnBhZ2UgPSBkYXRhWydwYWdpbmdQYXJhbXMnXS5wYWdlO1xyXG4gICAgICAgICAgICB0aGlzLnByZXZpb3VzUGFnZSA9IGRhdGFbJ3BhZ2luZ1BhcmFtcyddLnBhZ2U7XHJcbiAgICAgICAgICAgIHRoaXMucmV2ZXJzZSA9IGRhdGFbJ3BhZ2luZ1BhcmFtcyddLmFzY2VuZGluZztcclxuICAgICAgICAgICAgdGhpcy5wcmVkaWNhdGUgPSBkYXRhWydwYWdpbmdQYXJhbXMnXS5wcmVkaWNhdGU7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy50b2RheSgpO1xyXG4gICAgICAgIHRoaXMucHJldmlvdXNNb250aCgpO1xyXG4gICAgICAgIHRoaXMubG9hZEFsbCgpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25EZXN0cm95KCkge1xyXG4gICAgICAgIHRoaXMucm91dGVEYXRhLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJldmlvdXNNb250aCgpIHtcclxuICAgICAgICBjb25zdCBkYXRlRm9ybWF0ID0gJ3l5eXktTU0tZGQnO1xyXG4gICAgICAgIGxldCBmcm9tRGF0ZTogRGF0ZSA9IG5ldyBEYXRlKCk7XHJcblxyXG4gICAgICAgIGlmIChmcm9tRGF0ZS5nZXRNb250aCgpID09PSAwKSB7XHJcbiAgICAgICAgICAgIGZyb21EYXRlID0gbmV3IERhdGUoZnJvbURhdGUuZ2V0RnVsbFllYXIoKSAtIDEsIDExLCBmcm9tRGF0ZS5nZXREYXRlKCkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGZyb21EYXRlID0gbmV3IERhdGUoZnJvbURhdGUuZ2V0RnVsbFllYXIoKSwgZnJvbURhdGUuZ2V0TW9udGgoKSAtIDEsIGZyb21EYXRlLmdldERhdGUoKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmZyb21EYXRlID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oZnJvbURhdGUsIGRhdGVGb3JtYXQpO1xyXG4gICAgfVxyXG5cclxuICAgIHRvZGF5KCkge1xyXG4gICAgICAgIGNvbnN0IGRhdGVGb3JtYXQgPSAneXl5eS1NTS1kZCc7XHJcbiAgICAgICAgLy8gVG9kYXkgKyAxIGRheSAtIG5lZWRlZCBpZiB0aGUgY3VycmVudCBkYXkgbXVzdCBiZSBpbmNsdWRlZFxyXG4gICAgICAgIGNvbnN0IHRvZGF5OiBEYXRlID0gbmV3IERhdGUoKTtcclxuICAgICAgICB0b2RheS5zZXREYXRlKHRvZGF5LmdldERhdGUoKSArIDEpO1xyXG4gICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh0b2RheS5nZXRGdWxsWWVhcigpLCB0b2RheS5nZXRNb250aCgpLCB0b2RheS5nZXREYXRlKCkpO1xyXG4gICAgICAgIHRoaXMudG9EYXRlID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oZGF0ZSwgZGF0ZUZvcm1hdCk7XHJcbiAgICB9XHJcblxyXG4gICAgbG9hZEFsbCgpIHtcclxuICAgICAgICB0aGlzLmF1ZGl0c1NlcnZpY2VcclxuICAgICAgICAgICAgLnF1ZXJ5KHtcclxuICAgICAgICAgICAgICAgIHBhZ2U6IHRoaXMucGFnZSAtIDEsXHJcbiAgICAgICAgICAgICAgICBzaXplOiB0aGlzLml0ZW1zUGVyUGFnZSxcclxuICAgICAgICAgICAgICAgIHNvcnQ6IHRoaXMuc29ydCgpLFxyXG4gICAgICAgICAgICAgICAgZnJvbURhdGU6IHRoaXMuZnJvbURhdGUsXHJcbiAgICAgICAgICAgICAgICB0b0RhdGU6IHRoaXMudG9EYXRlXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAgICAocmVzOiBIdHRwUmVzcG9uc2U8QXVkaXRbXT4pID0+IHRoaXMub25TdWNjZXNzKHJlcy5ib2R5LCByZXMuaGVhZGVycyksXHJcbiAgICAgICAgICAgICAgICAocmVzOiBIdHRwUmVzcG9uc2U8YW55PikgPT4gdGhpcy5vbkVycm9yKHJlcy5ib2R5KVxyXG4gICAgICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHNvcnQoKSB7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gW3RoaXMucHJlZGljYXRlICsgJywnICsgKHRoaXMucmV2ZXJzZSA/ICdhc2MnIDogJ2Rlc2MnKV07XHJcbiAgICAgICAgaWYgKHRoaXMucHJlZGljYXRlICE9PSAnaWQnKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKCdpZCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIGxvYWRQYWdlKHBhZ2U6IG51bWJlcikge1xyXG4gICAgICAgIGlmIChwYWdlICE9PSB0aGlzLnByZXZpb3VzUGFnZSkge1xyXG4gICAgICAgICAgICB0aGlzLnByZXZpb3VzUGFnZSA9IHBhZ2U7XHJcbiAgICAgICAgICAgIHRoaXMudHJhbnNpdGlvbigpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0cmFuc2l0aW9uKCkge1xyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL2FkbWluL2F1ZGl0cyddLCB7XHJcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zOiB7XHJcbiAgICAgICAgICAgICAgICBwYWdlOiB0aGlzLnBhZ2UsXHJcbiAgICAgICAgICAgICAgICBzb3J0OiB0aGlzLnByZWRpY2F0ZSArICcsJyArICh0aGlzLnJldmVyc2UgPyAnYXNjJyA6ICdkZXNjJylcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMubG9hZEFsbCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgb25TdWNjZXNzKGRhdGEsIGhlYWRlcnMpIHtcclxuICAgICAgICB0aGlzLmxpbmtzID0gdGhpcy5wYXJzZUxpbmtzLnBhcnNlKGhlYWRlcnMuZ2V0KCdsaW5rJykpO1xyXG4gICAgICAgIHRoaXMudG90YWxJdGVtcyA9IGhlYWRlcnMuZ2V0KCdYLVRvdGFsLUNvdW50Jyk7XHJcbiAgICAgICAgdGhpcy5xdWVyeUNvdW50ID0gdGhpcy50b3RhbEl0ZW1zO1xyXG4gICAgICAgIHRoaXMuYXVkaXRzID0gZGF0YTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG9uRXJyb3IoZXJyb3IpIHtcclxuICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihlcnJvci5lcnJvciwgZXJyb3IubWVzc2FnZSwgbnVsbCk7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtSb3V0ZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHtKaGlSZXNvbHZlUGFnaW5nUGFyYW1zfSBmcm9tICduZy1qaGlwc3Rlcic7XHJcbmltcG9ydCB7QXVkaXRzQ29tcG9uZW50fSBmcm9tICcuL2F1ZGl0cy5jb21wb25lbnQnO1xyXG5pbXBvcnQge1VzZXJSb3V0ZUFjY2Vzc1NlcnZpY2V9IGZyb20gJy4uLy4uL2F1dGgvdXNlci1yb3V0ZS1hY2Nlc3Mtc2VydmljZSc7XHJcblxyXG5leHBvcnQgY29uc3QgYXVkaXRzUm91dGU6IFJvdXRlW10gPSBbXHJcbiAge1xyXG4gICAgcGF0aDogJ2F1ZGl0cycsXHJcbiAgICBjb21wb25lbnQ6IEF1ZGl0c0NvbXBvbmVudCxcclxuICAgIHJlc29sdmU6IHtcclxuICAgICAgICBwYWdpbmdQYXJhbXM6IEpoaVJlc29sdmVQYWdpbmdQYXJhbXNcclxuICAgIH0sXHJcbiAgICBkYXRhOiB7XHJcbiAgICAgICAgcGFnZVRpdGxlOiAnQXVkaXRvcmlhcycsXHJcbiAgICAgICAgZGVmYXVsdFNvcnQ6ICdhdWRpdEV2ZW50RGF0ZSxkZXNjJyxcclxuICAgICAgICBhdXRob3JpdGllczogWydST0xFX0FETUlOJ11cclxuICAgIH0sXHJcbiAgICBjYW5BY3RpdmF0ZTogW1VzZXJSb3V0ZUFjY2Vzc1NlcnZpY2VdXHJcbiAgfVxyXG5dO1xyXG4iLCJpbXBvcnQge0NVU1RPTV9FTEVNRU5UU19TQ0hFTUEsIE5nTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtSb3V0ZXJNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7Q29tbW9uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQge0Zvcm1zTW9kdWxlfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7YXVkaXRzUm91dGV9IGZyb20gJy4vYXVkaXRzLnJvdXRlJ1xyXG5pbXBvcnQge05nSmhpcHN0ZXJNb2R1bGV9IGZyb20gJ25nLWpoaXBzdGVyJztcclxuaW1wb3J0IHtBdWRpdHNDb21wb25lbnR9IGZyb20gJy4vYXVkaXRzLmNvbXBvbmVudCc7XHJcblxyXG5jb25zdCBFTlRJVFlfU1RBVEVTID0gWy4uLmF1ZGl0c1JvdXRlXTtcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgICBpbXBvcnRzOiBbXHJcbiAgICAgIENvbW1vbk1vZHVsZSxcclxuICAgICAgRm9ybXNNb2R1bGUsXHJcbiAgICAgIE5nSmhpcHN0ZXJNb2R1bGUsXHJcbiAgICAgIFJvdXRlck1vZHVsZS5mb3JDaGlsZChFTlRJVFlfU1RBVEVTKVxyXG4gICAgXSxcclxuICAgIGV4cG9ydHM6IFtcclxuICAgICAgQXVkaXRzQ29tcG9uZW50XHJcbiAgICBdLFxyXG4gICAgZGVjbGFyYXRpb25zOiBbXHJcbiAgICAgIEF1ZGl0c0NvbXBvbmVudFxyXG4gICAgXSxcclxuICAgIHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQXVkaXRzTW9kdWxlIHt9XHJcbiIsImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cFJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbmNvbnN0IFNFUlZFUl9BUElfVVJMID0gICcuLyc7XHJcblxyXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxyXG5leHBvcnQgY2xhc3MgSmhpQ29uZmlndXJhdGlvblNlcnZpY2Uge1xyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50KSB7fVxyXG5cclxuICAgIGdldCgpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFNFUlZFUl9BUElfVVJMICsgJ21hbmFnZW1lbnQvY29uZmlncHJvcHMnLCB7IG9ic2VydmU6ICdyZXNwb25zZScgfSkucGlwZShcclxuICAgICAgICAgICAgbWFwKChyZXM6IEh0dHBSZXNwb25zZTxhbnk+KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwcm9wZXJ0aWVzOiBhbnlbXSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcHJvcGVydGllc09iamVjdCA9IHRoaXMuZ2V0Q29uZmlnUHJvcGVydGllc09iamVjdHMocmVzLmJvZHkpO1xyXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gcHJvcGVydGllc09iamVjdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzT2JqZWN0Lmhhc093blByb3BlcnR5KGtleSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllcy5wdXNoKHByb3BlcnRpZXNPYmplY3Rba2V5XSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiBwcm9wZXJ0aWVzLnNvcnQoKHByb3BlcnR5QSwgcHJvcGVydHlCKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByb3BlcnR5QS5wcmVmaXggPT09IHByb3BlcnR5Qi5wcmVmaXggPyAwIDogcHJvcGVydHlBLnByZWZpeCA8IHByb3BlcnR5Qi5wcmVmaXggPyAtMSA6IDE7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGdldENvbmZpZ1Byb3BlcnRpZXNPYmplY3RzKHJlczogT2JqZWN0KSB7XHJcbiAgICAgICAgLy8gVGhpcyBjb2RlIGlzIGZvciBTcHJpbmcgQm9vdCAyXHJcbiAgICAgICAgaWYgKHJlc1snY29udGV4dHMnXSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIHJlc1snY29udGV4dHMnXSkge1xyXG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlIGtleSBpcyBub3QgYm9vdHN0cmFwLCBpdCB3aWxsIGJlIHRoZSBBcHBsaWNhdGlvbkNvbnRleHQgSWRcclxuICAgICAgICAgICAgICAgIC8vIEZvciBkZWZhdWx0IGFwcCwgaXQgaXMgYmFzZU5hbWVcclxuICAgICAgICAgICAgICAgIC8vIEZvciBtaWNyb3NlcnZpY2UsIGl0IGlzIGJhc2VOYW1lLTFcclxuICAgICAgICAgICAgICAgIGlmICgha2V5LnN0YXJ0c1dpdGgoJ2Jvb3RzdHJhcCcpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc1snY29udGV4dHMnXVtrZXldWydiZWFucyddO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGJ5IGRlZmF1bHQsIHVzZSB0aGUgZGVmYXVsdCBBcHBsaWNhdGlvbkNvbnRleHQgSWRcclxuICAgICAgICByZXR1cm4gcmVzWydjb250ZXh0cyddWydwb3J0YWxHYXRld2F5J11bJ2JlYW5zJ107XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RW52KCk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoU0VSVkVSX0FQSV9VUkwgKyAnbWFuYWdlbWVudC9lbnYnLCB7IG9ic2VydmU6ICdyZXNwb25zZScgfSkucGlwZShcclxuICAgICAgICAgICAgbWFwKChyZXM6IEh0dHBSZXNwb25zZTxhbnk+KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwcm9wZXJ0aWVzOiBhbnkgPSB7fTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHByb3BlcnR5U291cmNlcyA9IHJlcy5ib2R5Wydwcm9wZXJ0eVNvdXJjZXMnXTtcclxuXHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHByb3BlcnR5T2JqZWN0IG9mIHByb3BlcnR5U291cmNlcykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5hbWUgPSBwcm9wZXJ0eU9iamVjdFsnbmFtZSddO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRldGFpbFByb3BlcnRpZXMgPSBwcm9wZXJ0eU9iamVjdFsncHJvcGVydGllcyddO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHM6IGFueVtdID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBrZXlEZXRhaWwgaW4gZGV0YWlsUHJvcGVydGllcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGV0YWlsUHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShrZXlEZXRhaWwpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxzLnB1c2goeyBrZXk6IGtleURldGFpbCwgdmFsOiBkZXRhaWxQcm9wZXJ0aWVzW2tleURldGFpbF1bJ3ZhbHVlJ10gfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllc1tuYW1lXSA9IHZhbHM7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJvcGVydGllcztcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEpoaUNvbmZpZ3VyYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi9jb25maWd1cmF0aW9uLnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2poaS1jb25maWd1cmF0aW9uJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9jb25maWd1cmF0aW9uLmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgSmhpQ29uZmlndXJhdGlvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgICBhbGxDb25maWd1cmF0aW9uOiBhbnkgPSBudWxsO1xyXG4gICAgY29uZmlndXJhdGlvbjogYW55ID0gbnVsbDtcclxuICAgIGNvbmZpZ0tleXM6IGFueVtdO1xyXG4gICAgZmlsdGVyOiBzdHJpbmc7XHJcbiAgICBvcmRlclByb3A6IHN0cmluZztcclxuICAgIHJldmVyc2U6IGJvb2xlYW47XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBjb25maWd1cmF0aW9uU2VydmljZTogSmhpQ29uZmlndXJhdGlvblNlcnZpY2UpIHtcclxuICAgICAgICB0aGlzLmNvbmZpZ0tleXMgPSBbXTtcclxuICAgICAgICB0aGlzLmZpbHRlciA9ICcnO1xyXG4gICAgICAgIHRoaXMub3JkZXJQcm9wID0gJ3ByZWZpeCc7XHJcbiAgICAgICAgdGhpcy5yZXZlcnNlID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAga2V5cyhkaWN0KTogQXJyYXk8c3RyaW5nPiB7XHJcbiAgICAgICAgcmV0dXJuIGRpY3QgPT09IHVuZGVmaW5lZCA/IFtdIDogT2JqZWN0LmtleXMoZGljdCk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uU2VydmljZS5nZXQoKS5zdWJzY3JpYmUoY29uZmlndXJhdGlvbiA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuY29uZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb247XHJcblxyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNvbmZpZyBvZiBjb25maWd1cmF0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY29uZmlnLnByb3BlcnRpZXMgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnS2V5cy5wdXNoKE9iamVjdC5rZXlzKGNvbmZpZy5wcm9wZXJ0aWVzKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uU2VydmljZS5nZXRFbnYoKS5zdWJzY3JpYmUoY29uZmlndXJhdGlvbiA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuYWxsQ29uZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb247XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtSb3V0ZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuXHJcbmltcG9ydCB7SmhpQ29uZmlndXJhdGlvbkNvbXBvbmVudH0gZnJvbSAnLi9jb25maWd1cmF0aW9uLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7VXNlclJvdXRlQWNjZXNzU2VydmljZX0gZnJvbSAnLi4vLi4vYXV0aC91c2VyLXJvdXRlLWFjY2Vzcy1zZXJ2aWNlJztcclxuXHJcbmV4cG9ydCBjb25zdCBjb25maWd1cmF0aW9uUm91dGU6IFJvdXRlW10gPSBbXHJcbiAge1xyXG4gICAgcGF0aDogJ2poaS1jb25maWd1cmF0aW9uJyxcclxuICAgIGNvbXBvbmVudDogSmhpQ29uZmlndXJhdGlvbkNvbXBvbmVudCxcclxuICAgIGRhdGE6IHtcclxuICAgICAgICBwYWdlVGl0bGU6ICdDb25maWd1cmHDg8Knw4PCo28nLFxyXG4gICAgICAgIGF1dGhvcml0aWVzOiBbJ1JPTEVfQURNSU4nXVxyXG4gICAgfSxcclxuICAgIGNhbkFjdGl2YXRlOiBbVXNlclJvdXRlQWNjZXNzU2VydmljZV1cclxuICB9XHJcbl07XHJcbiIsImltcG9ydCB7Q1VTVE9NX0VMRU1FTlRTX1NDSEVNQSwgTmdNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1JvdXRlck1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7Rm9ybXNNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHtOZ0poaXBzdGVyTW9kdWxlfSBmcm9tICduZy1qaGlwc3Rlcic7XHJcbmltcG9ydCB7SmhpQ29uZmlndXJhdGlvbkNvbXBvbmVudH0gZnJvbSAnLi9jb25maWd1cmF0aW9uLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7Y29uZmlndXJhdGlvblJvdXRlfSBmcm9tICcuL2NvbmZpZ3VyYXRpb24ucm91dGUnXHJcblxyXG5jb25zdCBFTlRJVFlfU1RBVEVTID0gWy4uLmNvbmZpZ3VyYXRpb25Sb3V0ZV07XHJcblxyXG5ATmdNb2R1bGUoe1xyXG4gICAgaW1wb3J0czogW1xyXG4gICAgICBDb21tb25Nb2R1bGUsXHJcbiAgICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgICBOZ0poaXBzdGVyTW9kdWxlLFxyXG4gICAgICBSb3V0ZXJNb2R1bGUuZm9yQ2hpbGQoRU5USVRZX1NUQVRFUylcclxuICAgIF0sXHJcbiAgICBleHBvcnRzOiBbXHJcbiAgICAgIEpoaUNvbmZpZ3VyYXRpb25Db21wb25lbnRcclxuICAgIF0sXHJcbiAgICBkZWNsYXJhdGlvbnM6IFtcclxuICAgICAgSmhpQ29uZmlndXJhdGlvbkNvbXBvbmVudFxyXG4gICAgXSxcclxuICAgIHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29uZmlndXJhdGlvbk1vZHVsZSB7fVxyXG4iLCJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBOZ2JBY3RpdmVNb2RhbCB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdqaGktbWV0cmljcy1tb2RhbCcsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vbWV0cmljcy1tb2RhbC5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEpoaU1ldHJpY3NNb25pdG9yaW5nTW9kYWxDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gICAgdGhyZWFkRHVtcEZpbHRlcjogYW55O1xyXG4gICAgdGhyZWFkRHVtcDogYW55O1xyXG4gICAgdGhyZWFkRHVtcEFsbCA9IDA7XHJcbiAgICB0aHJlYWREdW1wQmxvY2tlZCA9IDA7XHJcbiAgICB0aHJlYWREdW1wUnVubmFibGUgPSAwO1xyXG4gICAgdGhyZWFkRHVtcFRpbWVkV2FpdGluZyA9IDA7XHJcbiAgICB0aHJlYWREdW1wV2FpdGluZyA9IDA7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHVibGljIGFjdGl2ZU1vZGFsOiBOZ2JBY3RpdmVNb2RhbCkge31cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLnRocmVhZER1bXAuZm9yRWFjaCh2YWx1ZSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh2YWx1ZS50aHJlYWRTdGF0ZSA9PT0gJ1JVTk5BQkxFJykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50aHJlYWREdW1wUnVubmFibGUgKz0gMTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS50aHJlYWRTdGF0ZSA9PT0gJ1dBSVRJTkcnKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRocmVhZER1bXBXYWl0aW5nICs9IDE7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUudGhyZWFkU3RhdGUgPT09ICdUSU1FRF9XQUlUSU5HJykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50aHJlYWREdW1wVGltZWRXYWl0aW5nICs9IDE7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUudGhyZWFkU3RhdGUgPT09ICdCTE9DS0VEJykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50aHJlYWREdW1wQmxvY2tlZCArPSAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMudGhyZWFkRHVtcEFsbCA9IHRoaXMudGhyZWFkRHVtcFJ1bm5hYmxlICsgdGhpcy50aHJlYWREdW1wV2FpdGluZyArIHRoaXMudGhyZWFkRHVtcFRpbWVkV2FpdGluZyArIHRoaXMudGhyZWFkRHVtcEJsb2NrZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0QmFkZ2VDbGFzcyh0aHJlYWRTdGF0ZSkge1xyXG4gICAgICAgIGlmICh0aHJlYWRTdGF0ZSA9PT0gJ1JVTk5BQkxFJykge1xyXG4gICAgICAgICAgICByZXR1cm4gJ2JhZGdlLXN1Y2Nlc3MnO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhyZWFkU3RhdGUgPT09ICdXQUlUSU5HJykge1xyXG4gICAgICAgICAgICByZXR1cm4gJ2JhZGdlLWluZm8nO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhyZWFkU3RhdGUgPT09ICdUSU1FRF9XQUlUSU5HJykge1xyXG4gICAgICAgICAgICByZXR1cm4gJ2JhZGdlLXdhcm5pbmcnO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhyZWFkU3RhdGUgPT09ICdCTE9DS0VEJykge1xyXG4gICAgICAgICAgICByZXR1cm4gJ2JhZGdlLWRhbmdlcic7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5cclxuY29uc3QgU0VSVkVSX0FQSV9VUkwgPSAnLi8nO1xyXG5cclxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcclxuZXhwb3J0IGNsYXNzIEpoaU1ldHJpY3NTZXJ2aWNlIHtcclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCkge31cclxuXHJcbiAgICBnZXRNZXRyaWNzKCk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoU0VSVkVSX0FQSV9VUkwgKyAnbWFuYWdlbWVudC9tZXRyaWNzJyk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhyZWFkRHVtcCgpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFNFUlZFUl9BUElfVVJMICsgJ21hbmFnZW1lbnQvdGhyZWFkZHVtcCcpO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE5nYk1vZGFsIH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5cclxuaW1wb3J0IHsgSmhpTWV0cmljc01vbml0b3JpbmdNb2RhbENvbXBvbmVudCB9IGZyb20gJy4vbWV0cmljcy1tb2RhbC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBKaGlNZXRyaWNzU2VydmljZSB9IGZyb20gJy4vbWV0cmljcy5zZXJ2aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdqaGktbWV0cmljcycsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vbWV0cmljcy5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEpoaU1ldHJpY3NNb25pdG9yaW5nQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICAgIG1ldHJpY3M6IGFueSA9IHt9O1xyXG4gICAgY2FjaGVzU3RhdHM6IGFueSA9IHt9O1xyXG4gICAgc2VydmljZXNTdGF0czogYW55ID0ge307XHJcbiAgICB1cGRhdGluZ01ldHJpY3MgPSB0cnVlO1xyXG4gICAgSkNBQ0hFX0tFWTogc3RyaW5nO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICBwcml2YXRlIG1vZGFsU2VydmljZTogTmdiTW9kYWwsXHJcbiAgICAgIHByaXZhdGUgbWV0cmljc1NlcnZpY2U6IEpoaU1ldHJpY3NTZXJ2aWNlKSB7XHJcbiAgICAgICAgdGhpcy5KQ0FDSEVfS0VZID0gJ2pjYWNoZS5zdGF0aXN0aWNzJztcclxuICAgIH1cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLnJlZnJlc2goKTtcclxuICAgIH1cclxuXHJcbiAgICByZWZyZXNoKCkge1xyXG4gICAgICAgIHRoaXMudXBkYXRpbmdNZXRyaWNzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLm1ldHJpY3NTZXJ2aWNlLmdldE1ldHJpY3MoKS5zdWJzY3JpYmUobWV0cmljcyA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubWV0cmljcyA9IG1ldHJpY3M7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRpbmdNZXRyaWNzID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuc2VydmljZXNTdGF0cyA9IHt9O1xyXG4gICAgICAgICAgICB0aGlzLmNhY2hlc1N0YXRzID0ge307XHJcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKG1ldHJpY3MudGltZXJzKS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IG1ldHJpY3MudGltZXJzW2tleV07XHJcbiAgICAgICAgICAgICAgICBpZiAoa2V5LmluY2x1ZGVzKCd3ZWIucmVzdCcpIHx8IGtleS5pbmNsdWRlcygnc2VydmljZScpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXJ2aWNlc1N0YXRzW2tleV0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKG1ldHJpY3MuZ2F1Z2VzKS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoa2V5LmluY2x1ZGVzKCdqY2FjaGUuc3RhdGlzdGljcycpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBtZXRyaWNzLmdhdWdlc1trZXldLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIHJlbW92ZSBnZXRzIG9yIHB1dHNcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IGtleS5sYXN0SW5kZXhPZignLicpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld0tleSA9IGtleS5zdWJzdHIoMCwgaW5kZXgpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBLZWVwIHRoZSBuYW1lIG9mIHRoZSBkb21haW5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNhY2hlc1N0YXRzW25ld0tleV0gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHRoaXMuSkNBQ0hFX0tFWS5sZW5ndGgsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVmcmVzaFRocmVhZER1bXBEYXRhKCkge1xyXG4gICAgICAgIHRoaXMubWV0cmljc1NlcnZpY2UudGhyZWFkRHVtcCgpLnN1YnNjcmliZShkYXRhID0+IHtcclxuICAgICAgICAgICAgY29uc3QgbW9kYWxSZWYgPSB0aGlzLm1vZGFsU2VydmljZS5vcGVuKEpoaU1ldHJpY3NNb25pdG9yaW5nTW9kYWxDb21wb25lbnQsIHsgc2l6ZTogJ2xnJyB9KTtcclxuICAgICAgICAgICAgbW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2UudGhyZWFkRHVtcCA9IGRhdGEudGhyZWFkcztcclxuICAgICAgICAgICAgbW9kYWxSZWYucmVzdWx0LnRoZW4oXHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIExlZnQgYmxhbmsgaW50ZW50aW9uYWxseSwgbm90aGluZyB0byBkbyBoZXJlXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgcmVhc29uID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBMZWZ0IGJsYW5rIGludGVudGlvbmFsbHksIG5vdGhpbmcgdG8gZG8gaGVyZVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGZpbHRlck5hTihpbnB1dCkge1xyXG4gICAgICAgIGlmIChpc05hTihpbnB1dCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBpbnB1dDtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge1JvdXRlfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5cclxuaW1wb3J0IHtKaGlNZXRyaWNzTW9uaXRvcmluZ0NvbXBvbmVudH0gZnJvbSAnLi9tZXRyaWNzLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7VXNlclJvdXRlQWNjZXNzU2VydmljZX0gZnJvbSAnLi4vLi4vYXV0aC91c2VyLXJvdXRlLWFjY2Vzcy1zZXJ2aWNlJztcclxuXHJcbmV4cG9ydCBjb25zdCBtZXRyaWNzUm91dGU6IFJvdXRlW10gPSBbe1xyXG4gICAgcGF0aDogJ2poaS1tZXRyaWNzJyxcclxuICAgIGNvbXBvbmVudDogSmhpTWV0cmljc01vbml0b3JpbmdDb21wb25lbnQsXHJcbiAgICBkYXRhOiB7XHJcbiAgICAgICAgcGFnZVRpdGxlOiAnTcODwql0cmljYXMnLFxyXG4gICAgICAgIGF1dGhvcml0aWVzOiBbJ1JPTEVfQURNSU4nXVxyXG4gICAgfSxcclxuICAgIGNhbkFjdGl2YXRlOiBbVXNlclJvdXRlQWNjZXNzU2VydmljZV1cclxufV07XHJcbiIsImltcG9ydCB7Q1VTVE9NX0VMRU1FTlRTX1NDSEVNQSwgTmdNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1JvdXRlck1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7Rm9ybXNNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHtOZ0poaXBzdGVyTW9kdWxlfSBmcm9tICduZy1qaGlwc3Rlcic7XHJcbmltcG9ydCB7SmhpTWV0cmljc01vbml0b3JpbmdNb2RhbENvbXBvbmVudH0gZnJvbSAnLi9tZXRyaWNzLW1vZGFsLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7SmhpTWV0cmljc01vbml0b3JpbmdDb21wb25lbnR9IGZyb20gJy4vbWV0cmljcy5jb21wb25lbnQnO1xyXG5pbXBvcnQge21ldHJpY3NSb3V0ZX0gZnJvbSAnLi9tZXRyaWNzLnJvdXRlJ1xyXG5cclxuY29uc3QgRU5USVRZX1NUQVRFUyA9IFsuLi5tZXRyaWNzUm91dGVdO1xyXG5cclxuQE5nTW9kdWxlKHtcclxuICAgIGltcG9ydHM6IFtcclxuICAgICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgICBGb3Jtc01vZHVsZSxcclxuICAgICAgTmdKaGlwc3Rlck1vZHVsZSxcclxuICAgICAgUm91dGVyTW9kdWxlLmZvckNoaWxkKEVOVElUWV9TVEFURVMpXHJcbiAgICBdLFxyXG4gICAgZXhwb3J0czogW1xyXG4gICAgICBKaGlNZXRyaWNzTW9uaXRvcmluZ01vZGFsQ29tcG9uZW50LFxyXG4gICAgICBKaGlNZXRyaWNzTW9uaXRvcmluZ0NvbXBvbmVudFxyXG4gICAgXSxcclxuICAgIGRlY2xhcmF0aW9uczogW1xyXG4gICAgICBKaGlNZXRyaWNzTW9uaXRvcmluZ01vZGFsQ29tcG9uZW50LFxyXG4gICAgICBKaGlNZXRyaWNzTW9uaXRvcmluZ0NvbXBvbmVudFxyXG4gICAgXSxcclxuICAgIGVudHJ5Q29tcG9uZW50czogW1xyXG4gICAgICBKaGlNZXRyaWNzTW9uaXRvcmluZ01vZGFsQ29tcG9uZW50XHJcbiAgICBdLFxyXG4gICAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNZXRyaWNzTW9kdWxlIHt9XHJcbiIsImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2poaS1kb2NzJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9kb2NzLmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgSmhpRG9jc0NvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3RvcigpIHt9XHJcbn1cclxuIiwiaW1wb3J0IHtSb3V0ZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuXHJcbmltcG9ydCB7SmhpRG9jc0NvbXBvbmVudH0gZnJvbSAnLi9kb2NzLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7VXNlclJvdXRlQWNjZXNzU2VydmljZX0gZnJvbSAnLi4vLi4vYXV0aC91c2VyLXJvdXRlLWFjY2Vzcy1zZXJ2aWNlJztcclxuXHJcbmV4cG9ydCBjb25zdCBkb2NzUm91dGU6IFJvdXRlW10gPSBbe1xyXG4gICAgcGF0aDogJ2RvY3MnLFxyXG4gICAgY29tcG9uZW50OiBKaGlEb2NzQ29tcG9uZW50LFxyXG4gICAgZGF0YToge1xyXG4gICAgICAgIHBhZ2VUaXRsZTogJ2dsb2JhbC5tZW51LmFkbWluLmFwaWRvY3MnLFxyXG4gICAgICAgIGF1dGhvcml0aWVzOiBbJ1JPTEVfQURNSU4nXVxyXG4gICAgfSxcclxuICAgIGNhbkFjdGl2YXRlOiBbVXNlclJvdXRlQWNjZXNzU2VydmljZV1cclxufV07XHJcbiIsImltcG9ydCB7Q1VTVE9NX0VMRU1FTlRTX1NDSEVNQSwgTmdNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1JvdXRlck1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7Rm9ybXNNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHtKaGlEb2NzQ29tcG9uZW50fSBmcm9tICcuL2RvY3MuY29tcG9uZW50JztcclxuaW1wb3J0IHtkb2NzUm91dGV9IGZyb20gJy4vZG9jcy5yb3V0ZSdcclxuXHJcbmNvbnN0IEVOVElUWV9TVEFURVMgPSBbLi4uZG9jc1JvdXRlXTtcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgICBpbXBvcnRzOiBbXHJcbiAgICAgIENvbW1vbk1vZHVsZSxcclxuICAgICAgRm9ybXNNb2R1bGUsXHJcbiAgICAgIFJvdXRlck1vZHVsZS5mb3JDaGlsZChFTlRJVFlfU1RBVEVTKVxyXG4gICAgXSxcclxuICAgIGV4cG9ydHM6IFtcclxuICAgICAgSmhpRG9jc0NvbXBvbmVudFxyXG4gICAgXSxcclxuICAgIGRlY2xhcmF0aW9uczogW1xyXG4gICAgICBKaGlEb2NzQ29tcG9uZW50XHJcbiAgICBdLFxyXG4gICAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEb2NzTW9kdWxlIHt9XHJcbiIsImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5cclxuY29uc3QgU0VSVkVSX0FQSV9VUkwgPSAnLi8nO1xyXG5cclxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcclxuZXhwb3J0IGNsYXNzIEpoaUhlYWx0aFNlcnZpY2Uge1xyXG4gICAgc2VwYXJhdG9yOiBzdHJpbmc7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50KSB7XHJcbiAgICAgICAgdGhpcy5zZXBhcmF0b3IgPSAnLic7XHJcbiAgICB9XHJcblxyXG4gICAgY2hlY2tIZWFsdGgoKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldChTRVJWRVJfQVBJX1VSTCArICdtYW5hZ2VtZW50L2hlYWx0aCcpO1xyXG4gICAgfVxyXG5cclxuICAgIHRyYW5zZm9ybUhlYWx0aERhdGEoZGF0YSk6IGFueSB7XHJcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBbXTtcclxuICAgICAgICB0aGlzLmZsYXR0ZW5IZWFsdGhEYXRhKHJlc3BvbnNlLCBudWxsLCBkYXRhLmRldGFpbHMpO1xyXG4gICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRCYXNlTmFtZShuYW1lKTogc3RyaW5nIHtcclxuICAgICAgICBpZiAobmFtZSkge1xyXG4gICAgICAgICAgICBjb25zdCBzcGxpdCA9IG5hbWUuc3BsaXQoJy4nKTtcclxuICAgICAgICAgICAgcmV0dXJuIHNwbGl0WzBdO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXRTdWJTeXN0ZW1OYW1lKG5hbWUpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmIChuYW1lKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNwbGl0ID0gbmFtZS5zcGxpdCgnLicpO1xyXG4gICAgICAgICAgICBzcGxpdC5zcGxpY2UoMCwgMSk7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlbWFpbmRlciA9IHNwbGl0LmpvaW4oJy4nKTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlbWFpbmRlciA/ICcgLSAnICsgcmVtYWluZGVyIDogJyc7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qIHByaXZhdGUgbWV0aG9kcyAqL1xyXG4gICAgcHJpdmF0ZSBhZGRIZWFsdGhPYmplY3QocmVzdWx0LCBpc0xlYWYsIGhlYWx0aE9iamVjdCwgbmFtZSk6IGFueSB7XHJcbiAgICAgICAgY29uc3QgaGVhbHRoRGF0YTogYW55ID0ge1xyXG4gICAgICAgICAgICBuYW1lXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgY29uc3QgZGV0YWlscyA9IHt9O1xyXG4gICAgICAgIGxldCBoYXNEZXRhaWxzID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIGhlYWx0aE9iamVjdCkge1xyXG4gICAgICAgICAgICBpZiAoaGVhbHRoT2JqZWN0Lmhhc093blByb3BlcnR5KGtleSkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gaGVhbHRoT2JqZWN0W2tleV07XHJcbiAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSAnc3RhdHVzJyB8fCBrZXkgPT09ICdlcnJvcicpIHtcclxuICAgICAgICAgICAgICAgICAgICBoZWFsdGhEYXRhW2tleV0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzSGVhbHRoT2JqZWN0KHZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWxzW2tleV0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGFzRGV0YWlscyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBBZGQgdGhlIGRldGFpbHNcclxuICAgICAgICBpZiAoaGFzRGV0YWlscykge1xyXG4gICAgICAgICAgICBoZWFsdGhEYXRhLmRldGFpbHMgPSBkZXRhaWxzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gT25seSBhZGQgbm9kZXMgaWYgdGhleSBwcm92aWRlIGFkZGl0aW9uYWwgaW5mb3JtYXRpb25cclxuICAgICAgICBpZiAoaXNMZWFmIHx8IGhhc0RldGFpbHMgfHwgaGVhbHRoRGF0YS5lcnJvcikge1xyXG4gICAgICAgICAgICByZXN1bHQucHVzaChoZWFsdGhEYXRhKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGhlYWx0aERhdGE7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBmbGF0dGVuSGVhbHRoRGF0YShyZXN1bHQsIHBhdGgsIGRhdGEpOiBhbnkge1xyXG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIGRhdGEpIHtcclxuICAgICAgICAgICAgaWYgKGRhdGEuaGFzT3duUHJvcGVydHkoa2V5KSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBkYXRhW2tleV07XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0hlYWx0aE9iamVjdCh2YWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5oYXNTdWJTeXN0ZW0odmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkSGVhbHRoT2JqZWN0KHJlc3VsdCwgZmFsc2UsIHZhbHVlLCB0aGlzLmdldE1vZHVsZU5hbWUocGF0aCwga2V5KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmxhdHRlbkhlYWx0aERhdGEocmVzdWx0LCB0aGlzLmdldE1vZHVsZU5hbWUocGF0aCwga2V5KSwgdmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkSGVhbHRoT2JqZWN0KHJlc3VsdCwgdHJ1ZSwgdmFsdWUsIHRoaXMuZ2V0TW9kdWxlTmFtZShwYXRoLCBrZXkpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldE1vZHVsZU5hbWUocGF0aCwgbmFtZSk6IHN0cmluZyB7XHJcbiAgICAgICAgbGV0IHJlc3VsdDtcclxuICAgICAgICBpZiAocGF0aCAmJiBuYW1lKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IHBhdGggKyB0aGlzLnNlcGFyYXRvciArIG5hbWU7XHJcbiAgICAgICAgfSBlbHNlIGlmIChwYXRoKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IHBhdGg7XHJcbiAgICAgICAgfSBlbHNlIGlmIChuYW1lKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IG5hbWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmVzdWx0ID0gJyc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBoYXNTdWJTeXN0ZW0oaGVhbHRoT2JqZWN0KTogYm9vbGVhbiB7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IGZhbHNlO1xyXG5cclxuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBoZWFsdGhPYmplY3QpIHtcclxuICAgICAgICAgICAgaWYgKGhlYWx0aE9iamVjdC5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGhlYWx0aE9iamVjdFtrZXldO1xyXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlICYmIHZhbHVlLnN0YXR1cykge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGlzSGVhbHRoT2JqZWN0KGhlYWx0aE9iamVjdCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGxldCByZXN1bHQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gaGVhbHRoT2JqZWN0KSB7XHJcbiAgICAgICAgICAgIGlmIChoZWFsdGhPYmplY3QuaGFzT3duUHJvcGVydHkoa2V5KSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGtleSA9PT0gJ3N0YXR1cycpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE5nYkFjdGl2ZU1vZGFsIH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQgeyBKaGlIZWFsdGhTZXJ2aWNlIH0gZnJvbSAnLi9oZWFsdGguc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnamhpLWhlYWx0aC1tb2RhbCcsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vaGVhbHRoLW1vZGFsLmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgSmhpSGVhbHRoTW9kYWxDb21wb25lbnQge1xyXG4gICAgY3VycmVudEhlYWx0aDogYW55O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICBwcml2YXRlIGhlYWx0aFNlcnZpY2U6IEpoaUhlYWx0aFNlcnZpY2UsXHJcbiAgICAgIHB1YmxpYyBhY3RpdmVNb2RhbDogTmdiQWN0aXZlTW9kYWxcclxuICAgICkge31cclxuXHJcbiAgICBiYXNlTmFtZShuYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaGVhbHRoU2VydmljZS5nZXRCYXNlTmFtZShuYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBzdWJTeXN0ZW1OYW1lKG5hbWUpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5oZWFsdGhTZXJ2aWNlLmdldFN1YlN5c3RlbU5hbWUobmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVhZGFibGVWYWx1ZSh2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudEhlYWx0aC5uYW1lID09PSAnZGlza1NwYWNlJykge1xyXG4gICAgICAgICAgICAvLyBTaG91bGQgZGlzcGxheSBzdG9yYWdlIHNwYWNlIGluIGFuIGh1bWFuIHJlYWRhYmxlIHVuaXRcclxuICAgICAgICAgICAgY29uc3QgdmFsID0gdmFsdWUgLyAxMDczNzQxODI0O1xyXG4gICAgICAgICAgICBpZiAodmFsID4gMSkge1xyXG4gICAgICAgICAgICAgICAgLy8gVmFsdWVcclxuICAgICAgICAgICAgICAgIHJldHVybiB2YWwudG9GaXhlZCgyKSArICcgR0InO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICh2YWx1ZSAvIDEwNDg1NzYpLnRvRml4ZWQoMikgKyAnIE1CJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTmdiTW9kYWwgfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcblxyXG5pbXBvcnQgeyBKaGlIZWFsdGhTZXJ2aWNlIH0gZnJvbSAnLi9oZWFsdGguc2VydmljZSc7XHJcbmltcG9ydCB7IEpoaUhlYWx0aE1vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi9oZWFsdGgtbW9kYWwuY29tcG9uZW50JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdqaGktaGVhbHRoJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9oZWFsdGguY29tcG9uZW50Lmh0bWwnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBKaGlIZWFsdGhDaGVja0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgICBoZWFsdGhEYXRhOiBhbnk7XHJcbiAgICB1cGRhdGluZ0hlYWx0aDogYm9vbGVhbjtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIG1vZGFsU2VydmljZTogTmdiTW9kYWwsIHByaXZhdGUgaGVhbHRoU2VydmljZTogSmhpSGVhbHRoU2VydmljZSkge31cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLnJlZnJlc2goKTtcclxuICAgIH1cclxuXHJcbiAgICBiYXNlTmFtZShuYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5oZWFsdGhTZXJ2aWNlLmdldEJhc2VOYW1lKG5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEJhZGdlQ2xhc3Moc3RhdHVzU3RhdGUpIHtcclxuICAgICAgICBpZiAoc3RhdHVzU3RhdGUgPT09ICdVUCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuICdiYWRnZS1zdWNjZXNzJztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gJ2JhZGdlLWRhbmdlcic7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJlZnJlc2goKSB7XHJcbiAgICAgICAgdGhpcy51cGRhdGluZ0hlYWx0aCA9IHRydWU7XHJcblxyXG4gICAgICAgIHRoaXMuaGVhbHRoU2VydmljZS5jaGVja0hlYWx0aCgpLnN1YnNjcmliZShcclxuICAgICAgICAgICAgaGVhbHRoID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGVhbHRoRGF0YSA9IHRoaXMuaGVhbHRoU2VydmljZS50cmFuc2Zvcm1IZWFsdGhEYXRhKGhlYWx0aCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0aW5nSGVhbHRoID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVycm9yID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChlcnJvci5zdGF0dXMgPT09IDUwMykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGVhbHRoRGF0YSA9IHRoaXMuaGVhbHRoU2VydmljZS50cmFuc2Zvcm1IZWFsdGhEYXRhKGVycm9yLmVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0aW5nSGVhbHRoID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHNob3dIZWFsdGgoaGVhbHRoOiBhbnkpIHtcclxuICAgICAgICBjb25zdCBtb2RhbFJlZiA9IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oSmhpSGVhbHRoTW9kYWxDb21wb25lbnQpO1xyXG4gICAgICAgIG1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLmN1cnJlbnRIZWFsdGggPSBoZWFsdGg7XHJcbiAgICAgICAgbW9kYWxSZWYucmVzdWx0LnRoZW4oXHJcbiAgICAgICAgICAgIHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICAvLyBMZWZ0IGJsYW5rIGludGVudGlvbmFsbHksIG5vdGhpbmcgdG8gZG8gaGVyZVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICByZWFzb24gPT4ge1xyXG4gICAgICAgICAgICAgICAgLy8gTGVmdCBibGFuayBpbnRlbnRpb25hbGx5LCBub3RoaW5nIHRvIGRvIGhlcmVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgc3ViU3lzdGVtTmFtZShuYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5oZWFsdGhTZXJ2aWNlLmdldFN1YlN5c3RlbU5hbWUobmFtZSk7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5cclxuaW1wb3J0IHsgSmhpSGVhbHRoQ2hlY2tDb21wb25lbnQgfSBmcm9tICcuL2hlYWx0aC5jb21wb25lbnQnO1xyXG5pbXBvcnQge1VzZXJSb3V0ZUFjY2Vzc1NlcnZpY2V9IGZyb20gJy4uLy4uL2F1dGgvdXNlci1yb3V0ZS1hY2Nlc3Mtc2VydmljZSc7XHJcblxyXG5leHBvcnQgY29uc3QgaGVhbHRoUm91dGU6IFJvdXRlW10gPSBbe1xyXG4gICAgcGF0aDogJ2poaS1oZWFsdGgnLFxyXG4gICAgY29tcG9uZW50OiBKaGlIZWFsdGhDaGVja0NvbXBvbmVudCxcclxuICAgIGRhdGE6IHtcclxuICAgICAgICBwYWdlVGl0bGU6ICdFc3RhZG8gZG8gU2lzdGVtYScsXHJcbiAgICAgICAgYXV0aG9yaXRpZXM6IFsnUk9MRV9BRE1JTiddXHJcbiAgICB9LFxyXG4gICAgY2FuQWN0aXZhdGU6IFtVc2VyUm91dGVBY2Nlc3NTZXJ2aWNlXVxyXG59XTtcclxuIiwiaW1wb3J0IHtDVVNUT01fRUxFTUVOVFNfU0NIRU1BLCBOZ01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7Um91dGVyTW9kdWxlfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQge0NvbW1vbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHtGb3Jtc01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQge0poaUhlYWx0aENoZWNrQ29tcG9uZW50fSBmcm9tICcuL2hlYWx0aC5jb21wb25lbnQnO1xyXG5pbXBvcnQge0poaUhlYWx0aE1vZGFsQ29tcG9uZW50fSBmcm9tICcuL2hlYWx0aC1tb2RhbC5jb21wb25lbnQnO1xyXG5pbXBvcnQge2hlYWx0aFJvdXRlfSBmcm9tICcuL2hlYWx0aC5yb3V0ZSdcclxuaW1wb3J0IHtOZ0poaXBzdGVyTW9kdWxlfSBmcm9tICduZy1qaGlwc3Rlcic7XHJcblxyXG5jb25zdCBFTlRJVFlfU1RBVEVTID0gWy4uLmhlYWx0aFJvdXRlXTtcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgICBpbXBvcnRzOiBbXHJcbiAgICAgIENvbW1vbk1vZHVsZSxcclxuICAgICAgRm9ybXNNb2R1bGUsXHJcbiAgICAgIE5nSmhpcHN0ZXJNb2R1bGUsXHJcbiAgICAgIFJvdXRlck1vZHVsZS5mb3JDaGlsZChFTlRJVFlfU1RBVEVTKVxyXG4gICAgXSxcclxuICAgIGV4cG9ydHM6IFtcclxuICAgICAgSmhpSGVhbHRoQ2hlY2tDb21wb25lbnQsXHJcbiAgICAgIEpoaUhlYWx0aE1vZGFsQ29tcG9uZW50XHJcbiAgICBdLFxyXG4gICAgZGVjbGFyYXRpb25zOiBbXHJcbiAgICAgIEpoaUhlYWx0aENoZWNrQ29tcG9uZW50LFxyXG4gICAgICBKaGlIZWFsdGhNb2RhbENvbXBvbmVudFxyXG4gICAgXSxcclxuICAgIGVudHJ5Q29tcG9uZW50czogW0poaUhlYWx0aE1vZGFsQ29tcG9uZW50XSxcclxuICAgIHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgSGVhbHRoTW9kdWxlIHt9XHJcbiIsImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7SHR0cENsaWVudCwgSHR0cFJlc3BvbnNlfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7T2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7TG9nfSBmcm9tICcuLi8uLi9tb2RlbC9sb2cubW9kZWwnO1xyXG5cclxuY29uc3QgU0VSVkVSX0FQSV9VUkwgPSAnLi8nO1xyXG5cclxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcclxuZXhwb3J0IGNsYXNzIExvZ3NTZXJ2aWNlIHtcclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCkge31cclxuXHJcbiAgICBjaGFuZ2VMZXZlbChsb2c6IExvZyk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPGFueT4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnB1dChTRVJWRVJfQVBJX1VSTCArICdtYW5hZ2VtZW50L2xvZ3MnLCBsb2csIHsgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyB9KTtcclxuICAgIH1cclxuXHJcbiAgICBmaW5kQWxsKCk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPExvZ1tdPj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PExvZ1tdPihTRVJWRVJfQVBJX1VSTCArICdtYW5hZ2VtZW50L2xvZ3MnLCB7IG9ic2VydmU6ICdyZXNwb25zZScgfSk7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtDb21wb25lbnQsIE9uSW5pdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5pbXBvcnQge0xvZ3NTZXJ2aWNlfSBmcm9tICcuL2xvZ3Muc2VydmljZSc7XHJcbmltcG9ydCB7TG9nfSBmcm9tICcuLi8uLi9tb2RlbC9sb2cubW9kZWwnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2poaS1sb2dzJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9sb2dzLmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgTG9nc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgICBsb2dnZXJzOiBMb2dbXTtcclxuICAgIGZpbHRlcjogc3RyaW5nO1xyXG4gICAgb3JkZXJQcm9wOiBzdHJpbmc7XHJcbiAgICByZXZlcnNlOiBib29sZWFuO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgbG9nc1NlcnZpY2U6IExvZ3NTZXJ2aWNlKSB7XHJcbiAgICAgICAgdGhpcy5maWx0ZXIgPSAnJztcclxuICAgICAgICB0aGlzLm9yZGVyUHJvcCA9ICduYW1lJztcclxuICAgICAgICB0aGlzLnJldmVyc2UgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLmxvZ3NTZXJ2aWNlLmZpbmRBbGwoKS5zdWJzY3JpYmUocmVzcG9uc2UgPT4gKHRoaXMubG9nZ2VycyA9IHJlc3BvbnNlLmJvZHkpKTtcclxuICAgIH1cclxuXHJcbiAgICBjaGFuZ2VMZXZlbChuYW1lOiBzdHJpbmcsIGxldmVsOiBzdHJpbmcpIHtcclxuICAgICAgICBjb25zdCBsb2cgPSBuZXcgTG9nKG5hbWUsIGxldmVsKTtcclxuICAgICAgICB0aGlzLmxvZ3NTZXJ2aWNlLmNoYW5nZUxldmVsKGxvZykuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sb2dzU2VydmljZS5maW5kQWxsKCkuc3Vic2NyaWJlKHJlc3BvbnNlID0+ICh0aGlzLmxvZ2dlcnMgPSByZXNwb25zZS5ib2R5KSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtSb3V0ZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuXHJcbmltcG9ydCB7TG9nc0NvbXBvbmVudH0gZnJvbSAnLi9sb2dzLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7VXNlclJvdXRlQWNjZXNzU2VydmljZX0gZnJvbSAnLi4vLi4vYXV0aC91c2VyLXJvdXRlLWFjY2Vzcy1zZXJ2aWNlJztcclxuXHJcbmV4cG9ydCBjb25zdCBsb2dzUm91dGU6IFJvdXRlW10gPSBbe1xyXG4gICAgcGF0aDogJ2xvZ3MnLFxyXG4gICAgY29tcG9uZW50OiBMb2dzQ29tcG9uZW50LFxyXG4gICAgZGF0YToge1xyXG4gICAgICAgIHBhZ2VUaXRsZTogJ0xvZ3MnLFxyXG4gICAgICAgIGF1dGhvcml0aWVzOiBbJ1JPTEVfQURNSU4nXVxyXG4gICAgfSxcclxuICAgIGNhbkFjdGl2YXRlOiBbVXNlclJvdXRlQWNjZXNzU2VydmljZV1cclxufV07XHJcbiIsImltcG9ydCB7Q1VTVE9NX0VMRU1FTlRTX1NDSEVNQSwgTmdNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1JvdXRlck1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7Rm9ybXNNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHtOZ0poaXBzdGVyTW9kdWxlfSBmcm9tICduZy1qaGlwc3Rlcic7XHJcbmltcG9ydCB7bG9nc1JvdXRlfSBmcm9tICcuL2xvZ3Mucm91dGUnXHJcbmltcG9ydCB7TG9nc0NvbXBvbmVudH0gZnJvbSAnLi9sb2dzLmNvbXBvbmVudCc7XHJcblxyXG5jb25zdCBFTlRJVFlfU1RBVEVTID0gWy4uLmxvZ3NSb3V0ZV07XHJcblxyXG5ATmdNb2R1bGUoe1xyXG4gICAgaW1wb3J0czogW1xyXG4gICAgICBDb21tb25Nb2R1bGUsXHJcbiAgICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgICBOZ0poaXBzdGVyTW9kdWxlLFxyXG4gICAgICBSb3V0ZXJNb2R1bGUuZm9yQ2hpbGQoRU5USVRZX1NUQVRFUylcclxuICAgIF0sXHJcbiAgICBleHBvcnRzOiBbXHJcbiAgICAgIExvZ3NDb21wb25lbnRcclxuICAgIF0sXHJcbiAgICBkZWNsYXJhdGlvbnM6IFtcclxuICAgICAgTG9nc0NvbXBvbmVudFxyXG4gICAgXSxcclxuICAgIHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTG9nc01vZHVsZSB7fVxyXG4iLCJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge0xvY2FsU3RvcmFnZVNlcnZpY2UsIFNlc3Npb25TdG9yYWdlU2VydmljZX0gZnJvbSAnbmd4LXdlYnN0b3JhZ2UnO1xyXG5pbXBvcnQge0h0dHBFdmVudCwgSHR0cEhhbmRsZXIsIEh0dHBJbnRlcmNlcHRvciwgSHR0cFJlcXVlc3QsIEh0dHBSZXNwb25zZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQge1V0aWxGdW5jdGlvbnN9IGZyb20gJy4uL3V0aWwvdXRpbC1mdW5jdGlvbnMnO1xyXG5pbXBvcnQge2NhdGNoRXJyb3IsIG1hcH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XHJcbmltcG9ydCB7Q3VzdG9tSFRUUFN0YXR1c30gZnJvbSAnLi4vbW9kZWwvZW51bXMubW9kZWwnO1xyXG5pbXBvcnQge0xvY2tQYWdlfSBmcm9tICcuLi91dGlsJztcclxuaW1wb3J0IHt0aHJvd0Vycm9yfSBmcm9tIFwicnhqcy9pbnRlcm5hbC9vYnNlcnZhYmxlL3Rocm93RXJyb3JcIjtcclxuaW1wb3J0IHtOZ2JNb2RhbH0gZnJvbSBcIkBuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwXCI7XHJcbmltcG9ydCB7RGlhbG9nVHlwZSwgTW9kYWxEaWFsb2dDb21wb25lbnR9IGZyb20gJy4uL2NvbXBvbmVudHMvbW9kYWwtZGlhbG9nJztcclxuaW1wb3J0IHtPcHRpb25zUHJvdmlkZXJ9IGZyb20gJy4uL3V0aWwvb3B0aW9ucy1wcm92aWRlcic7XHJcblxyXG5jb25zdCBTRVJWRVJfQVBJX1VSTCA9ICcuLyc7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBBdXRoSW50ZXJjZXB0b3IgaW1wbGVtZW50cyBIdHRwSW50ZXJjZXB0b3Ige1xyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgbG9jYWxTdG9yYWdlOiBMb2NhbFN0b3JhZ2VTZXJ2aWNlLCBwcml2YXRlIHNlc3Npb25TdG9yYWdlOiBTZXNzaW9uU3RvcmFnZVNlcnZpY2UsIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBOZ2JNb2RhbCwgcHJpdmF0ZSBwcm92aWRlcjogT3B0aW9uc1Byb3ZpZGVyKSB7fVxyXG4gIFxyXG4gIGludGVyY2VwdChyZXF1ZXN0OiBIdHRwUmVxdWVzdDxhbnk+LCBuZXh0OiBIdHRwSGFuZGxlcik6IE9ic2VydmFibGU8SHR0cEV2ZW50PGFueT4+IHtcclxuICAgIFxyXG4gICAgaWYgKHJlcXVlc3QudXJsLmluZGV4T2YoXCIvYXBpL3B1YmxpY1wiKT49MCkge1xyXG4gICAgICByZXF1ZXN0ID0gcmVxdWVzdC5jbG9uZSh7XHJcbiAgICAgICAgc2V0SGVhZGVyczoge1xyXG4gICAgICAgICAgdG9rZW46IFV0aWxGdW5jdGlvbnMuZ2VyYXJUb2tlbkFuZ3VsYXIoKVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBpZiAoIXJlcXVlc3QgfHwgIXJlcXVlc3QudXJsIHx8ICgvXmh0dHAvLnRlc3QocmVxdWVzdC51cmwpICYmICEoU0VSVkVSX0FQSV9VUkwgJiYgcmVxdWVzdC51cmwuc3RhcnRzV2l0aChTRVJWRVJfQVBJX1VSTCkpKSkge1xyXG4gICAgICByZXR1cm4gbmV4dC5oYW5kbGUocmVxdWVzdCkucGlwZShcclxuICAgICAgICBtYXAoKGV2ZW50OiBIdHRwRXZlbnQ8YW55PikgPT4ge1xyXG4gICAgICAgICAgaWYgKGV2ZW50IGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYW5hbHlzZUh0dHBTdGF0dXMoZXZlbnQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIGV2ZW50O1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcXVlc3QudXJsLmluZGV4T2YoXCIvYXBpL2FjY291bnRcIik+PTApIHtcclxuICAgICAgICAgICAgTG9ja1BhZ2UucmVtb3ZlRnJvbVN0b3JhZ2UodGhpcy5zZXNzaW9uU3RvcmFnZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihlcnJvcik7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgY29uc3QgdG9rZW4gPSB0aGlzLmxvY2FsU3RvcmFnZS5yZXRyaWV2ZSgnYXV0aGVudGljYXRpb25Ub2tlbicpIHx8IHRoaXMuc2Vzc2lvblN0b3JhZ2UucmV0cmlldmUoJ2F1dGhlbnRpY2F0aW9uVG9rZW4nKTtcclxuICAgIFxyXG4gICAgaWYgKCEhdG9rZW4pIHtcclxuICAgICAgcmVxdWVzdCA9IHJlcXVlc3QuY2xvbmUoe1xyXG4gICAgICAgIHNldEhlYWRlcnM6IHtcclxuICAgICAgICAgIEF1dGhvcml6YXRpb246ICdCZWFyZXIgJyArIHRva2VuXHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHJldHVybiBuZXh0LmhhbmRsZShyZXF1ZXN0KS5waXBlKFxyXG4gICAgICBtYXAoKGV2ZW50OiBIdHRwRXZlbnQ8YW55PikgPT4ge1xyXG4gICAgICAgIGlmIChldmVudCBpbnN0YW5jZW9mIEh0dHBSZXNwb25zZSkge1xyXG4gICAgICAgICAgdGhpcy5hbmFseXNlSHR0cFN0YXR1cyhldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBldmVudDtcclxuICAgICAgfSksXHJcbiAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4ge1xyXG4gICAgICAgIGlmIChyZXF1ZXN0LnVybC5pbmRleE9mKFwiL2FwaS9hY2NvdW50XCIpPj0wKSB7XHJcbiAgICAgICAgICBMb2NrUGFnZS5yZW1vdmVGcm9tU3RvcmFnZSh0aGlzLnNlc3Npb25TdG9yYWdlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXJyb3IpO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcbiAgXHJcbiAgYW5hbHlzZUh0dHBTdGF0dXMoZXZlbnQ6IEh0dHBSZXNwb25zZTxhbnk+KSB7XHJcbiAgICBpZiAoZXZlbnQuc3RhdHVzID09PSBDdXN0b21IVFRQU3RhdHVzLkxPQ0tfUEFHRSkge1xyXG4gICAgICBjb25zdCBwYWdlID0gZXZlbnQuaGVhZGVycy5nZXQoJ3JlZGlyZWN0UGFnZScpO1xyXG4gICAgICBjb25zdCBtb2R1bGUgPSBldmVudC5oZWFkZXJzLmdldCgnbW9kdWxlJyk7XHJcbiAgICAgIGxldCBsb2NrZWRQYWdlOiBMb2NrUGFnZSA9IExvY2tQYWdlLnJldHJpZXZlRnJvbVN0b3JhZ2UodGhpcy5zZXNzaW9uU3RvcmFnZSk7XHJcbiAgICAgIGlmICghVXRpbEZ1bmN0aW9ucy5pc1ZhbGlkT2JqZWN0KGxvY2tlZFBhZ2UpKSB7XHJcbiAgICAgICAgbG9ja2VkUGFnZSA9IG5ldyBMb2NrUGFnZShtb2R1bGUsIHBhZ2UpO1xyXG4gICAgICB9XHJcbiAgICAgIExvY2tQYWdlLnNhdmVUb1N0b3JhZ2UodGhpcy5zZXNzaW9uU3RvcmFnZSwgbG9ja2VkUGFnZSk7XHJcbiAgICAgIGNvbnN0IHJlZGlyZWN0UGFnZSA9IGxvY2tlZFBhZ2UuZ2V0UmVkaXJlY3RQYWdlKHdpbmRvdy5sb2NhdGlvbiwgdGhpcy5wcm92aWRlci5tb2R1bG8pO1xyXG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHJlZGlyZWN0UGFnZTtcclxuICAgICAgfSwgMjAwKTtcclxuICAgICAgXHJcbiAgICB9IGVsc2UgaWYgKGV2ZW50LnN0YXR1cyA9PT0gQ3VzdG9tSFRUUFN0YXR1cy5SRUxFQVNFX1BBR0UpIHtcclxuICAgICAgTG9ja1BhZ2UucmVtb3ZlRnJvbVN0b3JhZ2UodGhpcy5zZXNzaW9uU3RvcmFnZSk7XHJcbiAgICB9IGVsc2UgaWYgKGV2ZW50LnN0YXR1cyA9PT0gQ3VzdG9tSFRUUFN0YXR1cy5SRURJUkVDVF9QQUdFKSB7XHJcbiAgICAgIGNvbnN0IHBhZ2UgPSB3aW5kb3cubG9jYXRpb24ub3JpZ2luICsgJy8nICsgZXZlbnQuaGVhZGVycy5nZXQoJ3JlZGlyZWN0UGFnZScpO1xyXG4gICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHBhZ2U7XHJcbiAgICB9IGVsc2UgaWYgKGV2ZW50LnN0YXR1cyA9PT0gQ3VzdG9tSFRUUFN0YXR1cy5DSEVDS19BTEVSVCkge1xyXG4gICAgICBjb25zdCBhbGVydCA9IGV2ZW50LmhlYWRlcnMuZ2V0KCdhbGVydE1lc3NhZ2UnKTtcclxuICAgICAgY29uc3QgY29udGVudENvbXBvbmVudEluc3RhbmNlID0gdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihNb2RhbERpYWxvZ0NvbXBvbmVudCwgeyBiYWNrZHJvcDogJ3N0YXRpYycgfSkuY29tcG9uZW50SW5zdGFuY2U7XHJcbiAgICAgIGNvbnRlbnRDb21wb25lbnRJbnN0YW5jZS5pbml0KHVuZGVmaW5lZCwgJ0FsZXJ0YScsIGFsZXJ0LCAnJywgRGlhbG9nVHlwZS5JTkZPKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtIdHRwRXJyb3JSZXNwb25zZSwgSHR0cEV2ZW50LCBIdHRwSGFuZGxlciwgSHR0cEludGVyY2VwdG9yLCBIdHRwUmVxdWVzdH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge3RhcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQge0xvZ2luU2VydmljZX0gZnJvbSAnLi4vbG9naW4vbG9naW4uc2VydmljZSc7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBBdXRoRXhwaXJlZEludGVyY2VwdG9yIGltcGxlbWVudHMgSHR0cEludGVyY2VwdG9yIHtcclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgbG9naW5TZXJ2aWNlOiBMb2dpblNlcnZpY2UpIHt9XHJcblxyXG4gICAgaW50ZXJjZXB0KHJlcXVlc3Q6IEh0dHBSZXF1ZXN0PGFueT4sIG5leHQ6IEh0dHBIYW5kbGVyKTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8YW55Pj4ge1xyXG4gICAgICAgIHJldHVybiBuZXh0LmhhbmRsZShyZXF1ZXN0KS5waXBlKFxyXG4gICAgICAgICAgICB0YXAoXHJcbiAgICAgICAgICAgICAgICAoZXZlbnQ6IEh0dHBFdmVudDxhbnk+KSA9PiB7fSxcclxuICAgICAgICAgICAgICAgIChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBIdHRwRXJyb3JSZXNwb25zZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyLnN0YXR1cyA9PT0gNDAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2luU2VydmljZS5sb2dvdXQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBKaGlFdmVudE1hbmFnZXIgfSBmcm9tICduZy1qaGlwc3Rlcic7XHJcbmltcG9ydCB7IEh0dHBJbnRlcmNlcHRvciwgSHR0cFJlcXVlc3QsIEh0dHBFcnJvclJlc3BvbnNlLCBIdHRwSGFuZGxlciwgSHR0cEV2ZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIEVycm9ySGFuZGxlckludGVyY2VwdG9yIGltcGxlbWVudHMgSHR0cEludGVyY2VwdG9yIHtcclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgZXZlbnRNYW5hZ2VyOiBKaGlFdmVudE1hbmFnZXIpIHt9XHJcblxyXG4gICAgaW50ZXJjZXB0KHJlcXVlc3Q6IEh0dHBSZXF1ZXN0PGFueT4sIG5leHQ6IEh0dHBIYW5kbGVyKTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8YW55Pj4ge1xyXG4gICAgICAgIHJldHVybiBuZXh0LmhhbmRsZShyZXF1ZXN0KS5waXBlKFxyXG4gICAgICAgICAgICB0YXAoXHJcbiAgICAgICAgICAgICAgICAoZXZlbnQ6IEh0dHBFdmVudDxhbnk+KSA9PiB7fSxcclxuICAgICAgICAgICAgICAgIChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBIdHRwRXJyb3JSZXNwb25zZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShlcnIuc3RhdHVzID09PSA0MDEgJiYgKGVyci5tZXNzYWdlID09PSAnJyB8fCAoZXJyLnVybCAmJiBlcnIudXJsLmluY2x1ZGVzKCcvYXBpL2FjY291bnQnKSkpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ldmVudE1hbmFnZXIuYnJvYWRjYXN0KHsgbmFtZTogJ3BvcnRhbEdhdGV3YXlBcHAuaHR0cEVycm9yJywgY29udGVudDogZXJyIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQgeyBIdHRwRXZlbnQsIEh0dHBIYW5kbGVyLCBIdHRwSW50ZXJjZXB0b3IsIEh0dHBSZXF1ZXN0LCBIdHRwUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7UG9ydGFsQWxlcnRTZXJ2aWNlfSBmcm9tICcuLi9hbGVydC9wb3J0YWwtYWxlcnQuc2VydmljZSc7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBOb3RpZmljYXRpb25JbnRlcmNlcHRvciBpbXBsZW1lbnRzIEh0dHBJbnRlcmNlcHRvciB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgIHByaXZhdGUgYWxlcnRTZXJ2aWNlOiBQb3J0YWxBbGVydFNlcnZpY2VcclxuICAgICkge31cclxuXHJcbiAgICBpbnRlcmNlcHQocmVxdWVzdDogSHR0cFJlcXVlc3Q8YW55PiwgbmV4dDogSHR0cEhhbmRsZXIpOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxhbnk+PiB7XHJcbiAgICAgICAgcmV0dXJuIG5leHQuaGFuZGxlKHJlcXVlc3QpLnBpcGUoXHJcbiAgICAgICAgICAgIHRhcChcclxuICAgICAgICAgICAgICAgIChldmVudDogSHR0cEV2ZW50PGFueT4pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZXZlbnQgaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYXJyID0gZXZlbnQuaGVhZGVycy5rZXlzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhbGVydCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhbGVydFBhcmFtcyA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyci5mb3JFYWNoKGVudHJ5ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbnRyeS50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKCdhcHAtYWxlcnQnKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0ID0gZXZlbnQuaGVhZGVycy5nZXQoZW50cnkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChlbnRyeS50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKCdhcHAtcGFyYW1zJykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGVydFBhcmFtcyA9IGV2ZW50LmhlYWRlcnMuZ2V0KGVudHJ5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhbGVydCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBhbGVydCA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5zdWNjZXNzKGFsZXJ0LCB7IHBhcmFtOiBhbGVydFBhcmFtcyB9LCBudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAoZXJyOiBhbnkpID0+IHt9XHJcbiAgICAgICAgICAgIClcclxuICAgICAgICApO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7SHR0cENsaWVudCwgSHR0cFJlc3BvbnNlfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7T2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XHJcblxyXG5pbXBvcnQge2NyZWF0ZVJlcXVlc3RPcHRpb259IGZyb20gJy4uL3V0aWwvcmVxdWVzdC11dGlsJztcclxuaW1wb3J0IHtJTWVudX0gZnJvbSAnLi4vbW9kZWwvbWVudS5tb2RlbCc7XHJcbmltcG9ydCB7T3B0aW9uc1Byb3ZpZGVyfSBmcm9tICcuLi91dGlsL29wdGlvbnMtcHJvdmlkZXInO1xyXG5cclxuY29uc3QgU0VSVkVSX0FQSV9VUkwgPSAnLi8nO1xyXG5cclxudHlwZSBFbnRpdHlSZXNwb25zZVR5cGUgPSBIdHRwUmVzcG9uc2U8SU1lbnU+O1xyXG50eXBlIEVudGl0eUFycmF5UmVzcG9uc2VUeXBlID0gSHR0cFJlc3BvbnNlPElNZW51W10+O1xyXG5cclxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcclxuZXhwb3J0IGNsYXNzIE1lbnVTZXJ2aWNlIHtcclxuICAgIHB1YmxpYyBtb2R1bG87XHJcbiAgICBwdWJsaWMgcmVzb3VyY2VVcmxQdWJsaWM7XHJcbiAgICBwdWJsaWMgcmVzb3VyY2VVcmwgPSBTRVJWRVJfQVBJX1VSTCArICdhcGkvbWVudXMnO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgb3B0aW9uc1Byb3ZpZGVyOiBPcHRpb25zUHJvdmlkZXJcclxuICAgICkge1xyXG4gICAgICB0aGlzLm1vZHVsbyA9IG9wdGlvbnNQcm92aWRlci5tZW51TW9kdWxvO1xyXG4gICAgICB0aGlzLnJlc291cmNlVXJsUHVibGljID0gU0VSVkVSX0FQSV9VUkwgKyAnYXBpL3B1YmxpYy9tZW51cy8nICsgdGhpcy5tb2R1bG87XHJcbiAgICB9XHJcblxyXG4gICAgY3JlYXRlKG1lbnU6IElNZW51KTogT2JzZXJ2YWJsZTxFbnRpdHlSZXNwb25zZVR5cGU+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8SU1lbnU+KHRoaXMucmVzb3VyY2VVcmwsIG1lbnUsIHsgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyB9KTtcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUobWVudTogSU1lbnUpOiBPYnNlcnZhYmxlPEVudGl0eVJlc3BvbnNlVHlwZT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucHV0PElNZW51Pih0aGlzLnJlc291cmNlVXJsLCBtZW51LCB7IG9ic2VydmU6ICdyZXNwb25zZScgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZmluZChpZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxFbnRpdHlSZXNwb25zZVR5cGU+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJTWVudT4oYCR7dGhpcy5yZXNvdXJjZVVybH0vZmluZC8ke2lkfWAsIHsgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyB9KTtcclxuICAgIH1cclxuXHJcbiAgICBxdWVyeShyZXE/OiBhbnkpOiBPYnNlcnZhYmxlPEVudGl0eUFycmF5UmVzcG9uc2VUeXBlPiB7XHJcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IGNyZWF0ZVJlcXVlc3RPcHRpb24ocmVxKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJTWVudVtdPih0aGlzLnJlc291cmNlVXJsICsgJy8nICsgdGhpcy5tb2R1bG8sIHsgcGFyYW1zOiBvcHRpb25zLCBvYnNlcnZlOiAncmVzcG9uc2UnIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEFsbE1lbnVzKGxpbWl0ZUV4aWJpY2FvKTogT2JzZXJ2YWJsZTxFbnRpdHlBcnJheVJlc3BvbnNlVHlwZT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElNZW51W10+KHRoaXMucmVzb3VyY2VVcmxQdWJsaWMuY29uY2F0KCcvJywgbGltaXRlRXhpYmljYW8pLCB7IG9ic2VydmU6ICdyZXNwb25zZScgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0QWxsTWVudXNQYWlzKCk6IE9ic2VydmFibGU8RW50aXR5QXJyYXlSZXNwb25zZVR5cGU+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJTWVudVtdPihTRVJWRVJfQVBJX1VSTCArICdhcGkvbWVudXMtcGFpcy8nICsgdGhpcy5tb2R1bG8sIHsgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyB9KTtcclxuICAgIH1cclxuXHJcbiAgICBkZWxldGUoaWQ6IG51bWJlcik6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPGFueT4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmRlbGV0ZTxhbnk+KGAke3RoaXMucmVzb3VyY2VVcmx9LyR7aWR9YCwgeyBvYnNlcnZlOiAncmVzcG9uc2UnIH0pO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7SHR0cENsaWVudCwgSHR0cFJlc3BvbnNlfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7T2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7SUVtcHJlc2F9IGZyb20gJy4uL21vZGVsL2VtcHJlc2EubW9kZWwnO1xyXG5pbXBvcnQge2NyZWF0ZVJlcXVlc3RPcHRpb259IGZyb20gJy4uL3V0aWwvcmVxdWVzdC11dGlsJztcclxuXHJcbmNvbnN0IFNFUlZFUl9BUElfVVJMID0gJy4vJztcclxuXHJcbnR5cGUgRW50aXR5UmVzcG9uc2VUeXBlID0gSHR0cFJlc3BvbnNlPElFbXByZXNhPjtcclxudHlwZSBFbnRpdHlBcnJheVJlc3BvbnNlVHlwZSA9IEh0dHBSZXNwb25zZTxJRW1wcmVzYVtdPjtcclxuXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXHJcbmV4cG9ydCBjbGFzcyBFbXByZXNhU2VydmljZSB7XHJcbiAgICBwdWJsaWMgcmVzb3VyY2VVcmwgPSBTRVJWRVJfQVBJX1VSTCArICdhcGkvZW1wcmVzYXMnO1xyXG4gICAgcHVibGljIHJlc291cmNlVXJsUHVibGljID0gU0VSVkVSX0FQSV9VUkwgKyAnYXBpL3B1YmxpYy9lbXByZXNhJztcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQpIHt9XHJcblxyXG4gICAgY3JlYXRlKGVtcHJlc2E6IElFbXByZXNhKTogT2JzZXJ2YWJsZTxFbnRpdHlSZXNwb25zZVR5cGU+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8SUVtcHJlc2E+KHRoaXMucmVzb3VyY2VVcmwsIGVtcHJlc2EsIHsgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyB9KTtcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUoZW1wcmVzYTogSUVtcHJlc2EpOiBPYnNlcnZhYmxlPEVudGl0eVJlc3BvbnNlVHlwZT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucHV0PElFbXByZXNhPih0aGlzLnJlc291cmNlVXJsLCBlbXByZXNhLCB7IG9ic2VydmU6ICdyZXNwb25zZScgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZmluZChpZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxFbnRpdHlSZXNwb25zZVR5cGU+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJRW1wcmVzYT4oYCR7dGhpcy5yZXNvdXJjZVVybH0vJHtpZH1gLCB7IG9ic2VydmU6ICdyZXNwb25zZScgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcXVlcnkocmVxPzogYW55KTogT2JzZXJ2YWJsZTxFbnRpdHlBcnJheVJlc3BvbnNlVHlwZT4ge1xyXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBjcmVhdGVSZXF1ZXN0T3B0aW9uKHJlcSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SUVtcHJlc2FbXT4odGhpcy5yZXNvdXJjZVVybCwgeyBwYXJhbXM6IG9wdGlvbnMsIG9ic2VydmU6ICdyZXNwb25zZScgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZGVsZXRlKGlkOiBudW1iZXIpOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxhbnk+PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5kZWxldGU8YW55PihgJHt0aGlzLnJlc291cmNlVXJsfS8ke2lkfWAsIHsgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyB9KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRFbXByZXNhKCk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPElFbXByZXNhPj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElFbXByZXNhPih0aGlzLnJlc291cmNlVXJsUHVibGljLCB7IG9ic2VydmU6ICdyZXNwb25zZScgfSk7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtDb21wb25lbnQsIE9uSW5pdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7SmhpRXZlbnRNYW5hZ2VyfSBmcm9tICduZy1qaGlwc3Rlcic7XHJcblxyXG5pbXBvcnQge0lNZW51fSBmcm9tICcuLi9tb2RlbC9tZW51Lm1vZGVsJztcclxuaW1wb3J0IHtBY2NvdW50fSBmcm9tICcuLi9tb2RlbC9hY2NvdW50Lm1vZGVsJztcclxuaW1wb3J0IHtJRW1wcmVzYX0gZnJvbSAnLi4vbW9kZWwvZW1wcmVzYS5tb2RlbCc7XHJcbmltcG9ydCB7UHJpbmNpcGFsfSBmcm9tICcuLi9hdXRoL3ByaW5jaXBhbC5zZXJ2aWNlJztcclxuaW1wb3J0IHtNZW51U2VydmljZX0gZnJvbSAnLi4vbWVudS9tZW51LnNlcnZpY2UnO1xyXG5pbXBvcnQge0VtcHJlc2FTZXJ2aWNlfSBmcm9tICcuLi9lbXByZXNhL2VtcHJlc2Euc2VydmljZSc7XHJcbmltcG9ydCB7UGFyYW1ldHJvc1NlcnZpY2V9IGZyb20gJy4uL2NvbXBvbmVudHMvcGFyYW1ldHJvcy9wYXJhbWV0cm9zLnNlcnZpY2UnO1xyXG5pbXBvcnQge1V0aWxGdW5jdGlvbnN9IGZyb20gJy4uL3V0aWwnO1xyXG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQge05nYk1vZGFsUmVmfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcbmltcG9ydCB7TG9naW5Nb2RhbFNlcnZpY2V9IGZyb20gJy4uL2xvZ2luL2xvZ2luLW1vZGFsLnNlcnZpY2UnO1xyXG5cclxuY29uc3QgUVVBTlRJREFERV9NQVhfU1VCX01FTlVTID0gMztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdqaGktaG9tZScsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vaG9tZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnaG9tZS5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIEhvbWVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gICAgYWNjb3VudDogQWNjb3VudDtcclxuICAgIG1lbnVzOiBJTWVudVtdO1xyXG4gICAgZW1wcmVzYTogSUVtcHJlc2E7XHJcbiAgICBtb3N0cmFySW1hZ2VtRnVuZG86IGJvb2xlYW4gPSB0cnVlO1xyXG4gICAgbWVuc2FnZW1Cb2FzVmluZGFzOiBzdHJpbmcgPSAnQmVtIHZpbmRvLCBQb3J0YWwgZGUgU2VydmnDg8Knb3MhJztcclxuICAgIG1vZGFsUmVmOiBOZ2JNb2RhbFJlZjtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIHByaW5jaXBhbDogUHJpbmNpcGFsLFxyXG4gICAgICAgIHByaXZhdGUgZXZlbnRNYW5hZ2VyOiBKaGlFdmVudE1hbmFnZXIsXHJcbiAgICAgICAgcHJpdmF0ZSBtZW51U2VydmljZTogTWVudVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBlbXByZXNhU2VydmljZTogRW1wcmVzYVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBwYXJhbWV0cm9TZXJ2aWNlOiBQYXJhbWV0cm9zU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgICAgICBwcml2YXRlIGxvZ2luTW9kYWxTZXJ2aWNlOiBMb2dpbk1vZGFsU2VydmljZVxyXG4gICAgKSB7fVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIHRoaXMucm91dGUucXVlcnlQYXJhbXMuc3Vic2NyaWJlKHBhcmFtcyA9PiB7XHJcbiAgICAgICAgICAgIGlmIChwYXJhbXNbJ2FkbWluLWxvZ29uJ10gIT09IHVuZGVmaW5lZCAmJiAhdGhpcy5wcmluY2lwYWwuaXNBdXRoZW50aWNhdGVkKCkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9naW4oKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLnByaW5jaXBhbC5pZGVudGl0eSgpLnRoZW4oYWNjb3VudCA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuYWNjb3VudCA9IGFjY291bnQ7XHJcbiAgICAgICAgICAgIHRoaXMuc29saWNpdGFyTm90aWZpY2Fjb2VzU2VUaXZlck5vdmFzKCk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMucmVnaXN0ZXJBdXRoZW50aWNhdGlvblN1Y2Nlc3MoKTtcclxuICAgICAgICB0aGlzLnJlY2FycmVnYXJNZW51cygpO1xyXG5cclxuICAgICAgICB0aGlzLmVtcHJlc2FTZXJ2aWNlXHJcbiAgICAgICAgICAgIC5nZXRFbXByZXNhKClcclxuICAgICAgICAgICAgLnRvUHJvbWlzZSgpXHJcbiAgICAgICAgICAgIC50aGVuKGVtcHJlc2EgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lbXByZXNhID0gZW1wcmVzYS5ib2R5O1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgIHRoaXMucGFyYW1ldHJvU2VydmljZS5nZXRQYXJhbWV0cm9zQnlOYW1lKFwiTU9TVFJBUl9JTUFHRU1fRlVORE9cIilcclxuICAgICAgICAudGhlbih2YWx1ZSA9PiB7XHJcbiAgICAgICAgICBpZiAoVXRpbEZ1bmN0aW9ucy5pc1ZhbGlkT2JqZWN0KHZhbHVlKSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLm1vc3RyYXJJbWFnZW1GdW5kbyA9IHZhbHVlLnZhbG9yO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pLmNhdGNoKHZhbHVlID0+IHtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLnBhcmFtZXRyb1NlcnZpY2UuZ2V0UGFyYW1ldHJvc0J5TmFtZShcIk1FTlNBR0VNX0JPQVNfVklOREFTXCIpXHJcbiAgICAgICAgLnRoZW4odmFsdWUgPT4ge1xyXG4gICAgICAgICAgaWYgKFV0aWxGdW5jdGlvbnMuaXNWYWxpZE9iamVjdCh2YWx1ZSkgPT09IHRydWUgJiYgVXRpbEZ1bmN0aW9ucy5pc1ZhbGlkU3RyaW5nT3JBcnJheSh2YWx1ZS52YWxvcikgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgdGhpcy5tZW5zYWdlbUJvYXNWaW5kYXMgPSB2YWx1ZS52YWxvcjtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KS5jYXRjaCh2YWx1ZSA9PiB7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGxvZ2luKCkge1xyXG4gICAgICAgIHRoaXMubW9kYWxSZWYgPSB0aGlzLmxvZ2luTW9kYWxTZXJ2aWNlLm9wZW4oKTtcclxuICAgIH1cclxuXHJcbiAgICByZWdpc3RlckF1dGhlbnRpY2F0aW9uU3VjY2VzcygpIHtcclxuICAgICAgICB0aGlzLmV2ZW50TWFuYWdlci5zdWJzY3JpYmUoJ2F1dGhlbnRpY2F0aW9uU3VjY2VzcycsIG1lc3NhZ2UgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnByaW5jaXBhbC5pZGVudGl0eSgpLnRoZW4oYWNjb3VudCA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFjY291bnQgPSBhY2NvdW50O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZWNhcnJlZ2FyTWVudXMoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc29saWNpdGFyTm90aWZpY2Fjb2VzU2VUaXZlck5vdmFzKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcmVjYXJyZWdhck1lbnVzKCkge1xyXG4gICAgICB0aGlzLm1lbnVTZXJ2aWNlXHJcbiAgICAgICAgLmdldEFsbE1lbnVzKFFVQU5USURBREVfTUFYX1NVQl9NRU5VUylcclxuICAgICAgICAudG9Qcm9taXNlKClcclxuICAgICAgICAudGhlbihtZW51cyA9PiB7XHJcbiAgICAgICAgICB0aGlzLm1lbnVzID0gbWVudXMuYm9keTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBvYnRlclVybChtZW51KSB7XHJcbiAgICAgICAgcmV0dXJuIG1vbnRhclVybChtZW51KTtcclxuICAgIH1cclxuXHJcbiAgICBpc1F1YW50aWRhZGVNYXhTdWJNZW51cyhtZW51KTogYm9vbGVhbiB7XHJcbiAgICAgICAgY29uc3Qgc3ViTWVudXMgPSBtZW51LnN1Yk1lbnVzLmZpbHRlcihzdWIgPT4gc3ViLmF0aXZvKTtcclxuICAgICAgICByZXR1cm4gc3ViTWVudXMubGVuZ3RoID4gUVVBTlRJREFERV9NQVhfU1VCX01FTlVTO1xyXG4gICAgfVxyXG5cclxuICAgIGlkZW50aWZ5KGluZGV4LCBpdGVtKSB7XHJcbiAgICAgICAgcmV0dXJuIGl0ZW0ubm9tZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNvbGljaXRhck5vdGlmaWNhY29lc1NlVGl2ZXJOb3ZhcygpIHtcclxuICAgICAgICBpZiAoIXRoaXMucHJpbmNpcGFsLmlzQXV0aGVudGljYXRlZCgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5ldmVudE1hbmFnZXIuYnJvYWRjYXN0KHtuYW1lOiAnYWJyaXJOb3RpZmljYWNvZXNTZVRpdmVyTm92YXMnfSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBtb250YXJVcmwgPSAobWVudTogSU1lbnUpOiBzdHJpbmcgPT4ge1xyXG4gICAgaWYgKG1lbnUuc2VydmljbyAmJiBtZW51LnNlcnZpY28uaW5jbHVkZXMoJ2h0dHAnKSkge1xyXG4gICAgICAgIHJldHVybiBtZW51LnNlcnZpY287XHJcbiAgICB9XHJcbiAgICBjb25zdCBzZXJ2aWNvID0gbWVudS5zZXJ2aWNvID8gbWVudS5zZXJ2aWNvIDogJyc7XHJcbiAgICBjb25zdCByb3RhID0gbWVudS5yb3RhID8gbWVudS5yb3RhICsgJy8jLycgOiAnIy8nO1xyXG4gICAgcmV0dXJuIHJvdGEgKyBzZXJ2aWNvO1xyXG59O1xyXG4iLCJpbXBvcnQgeyBSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcblxyXG5pbXBvcnQgeyBIb21lQ29tcG9uZW50IH0gZnJvbSAnLi9ob21lLmNvbXBvbmVudCc7XHJcblxyXG5leHBvcnQgY29uc3QgSE9NRV9ST1VURTogUm91dGVbXSA9IFtcclxuICB7XHJcbiAgICBwYXRoOiAnJyxcclxuICAgIGNvbXBvbmVudDogSG9tZUNvbXBvbmVudCxcclxuICAgIGRhdGE6IHtcclxuICAgICAgICBhdXRob3JpdGllczogW10sXHJcbiAgICAgICAgcGFnZVRpdGxlOiAnQmVtIHZpbmRvLCBQb3J0YWwgZGUgU2VydmnDg8Knb3MhJ1xyXG4gICAgfVxyXG4gIH1cclxuXTtcclxuIiwiaW1wb3J0IHtDVVNUT01fRUxFTUVOVFNfU0NIRU1BLCBOZ01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7Um91dGVyTW9kdWxlfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQge0hvbWVDb21wb25lbnR9IGZyb20gJy4vaG9tZS5jb21wb25lbnQnO1xyXG5pbXBvcnQge0NvbW1vbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHtIT01FX1JPVVRFfSBmcm9tICcuL2hvbWUucm91dGUnO1xyXG5pbXBvcnQge0ZvbnRBd2Vzb21lTW9kdWxlfSBmcm9tICdAZm9ydGF3ZXNvbWUvYW5ndWxhci1mb250YXdlc29tZSc7XHJcbmltcG9ydCB7bGlicmFyeX0gZnJvbSAnQGZvcnRhd2Vzb21lL2ZvbnRhd2Vzb21lLXN2Zy1jb3JlJztcclxuaW1wb3J0IHtmYXN9IGZyb20gJ0Bmb3J0YXdlc29tZS9mcmVlLXNvbGlkLXN2Zy1pY29ucyc7XHJcbmltcG9ydCB7TmdiTW9kdWxlfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcblxyXG5saWJyYXJ5LmFkZChmYXMpO1xyXG5cclxuQE5nTW9kdWxlKHtcclxuICAgIGltcG9ydHM6IFtcclxuICAgICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgICBGb250QXdlc29tZU1vZHVsZSxcclxuICAgICAgTmdiTW9kdWxlLmZvclJvb3QoKSxcclxuICAgICAgUm91dGVyTW9kdWxlLmZvckNoaWxkKFsuLi5IT01FX1JPVVRFXSlcclxuICAgIF0sXHJcbiAgICBkZWNsYXJhdGlvbnM6IFtcclxuICAgICAgSG9tZUNvbXBvbmVudFxyXG4gICAgXSxcclxuICAgIGV4cG9ydHM6IFtcclxuICAgICAgSG9tZUNvbXBvbmVudFxyXG4gICAgXSxcclxuICAgIHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgSG9tZU1vZHVsZSB7fVxyXG4iLCJpbXBvcnQge0NvbXBvbmVudCwgT25Jbml0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtIdHRwRXJyb3JSZXNwb25zZSwgSHR0cFJlc3BvbnNlfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcblxyXG5pbXBvcnQge01lbnVTZXJ2aWNlfSBmcm9tICcuL21lbnUuc2VydmljZSc7XHJcbmltcG9ydCB7SU1lbnV9IGZyb20gJy4uL21vZGVsL21lbnUubW9kZWwnO1xyXG5pbXBvcnQge0dhdGV3YXlSb3V0ZX0gZnJvbSAnLi4vbW9kZWwvZ2F0ZXdheS1yb3V0ZS5tb2RlbCc7XHJcbmltcG9ydCB7R2F0ZXdheVJvdXRlc1NlcnZpY2V9IGZyb20gJy4uL2FkbWluL2dhdGV3YXkvZ2F0ZXdheS1yb3V0ZXMuc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnamhpLW1lbnUtdXBkYXRlJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9tZW51LXVwZGF0ZS5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIE1lbnVVcGRhdGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gICAgbWVudTogSU1lbnU7XHJcbiAgICBpc1NhdmluZzogYm9vbGVhbjtcclxuICAgIHBhaXM6IElNZW51W107XHJcbiAgICByb3V0ZXM6IEdhdGV3YXlSb3V0ZVtdO1xyXG5cclxuICAgIHByaXZhdGUgcGFpc0Rpc3Bvbml2ZWlzKHBhaXM6IElNZW51W10pOiBJTWVudVtdIHtcclxuICAgICAgICBpZiAoIXBhaXMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcGFpcy5maWx0ZXIocCA9PiBwLmlkICE9PSB0aGlzLm1lbnUuaWQpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgbWVudVNlcnZpY2U6IE1lbnVTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgICAgIHByaXZhdGUgZ2F0ZXdheVJvdXRlc1NlcnZpY2U6IEdhdGV3YXlSb3V0ZXNTZXJ2aWNlXHJcbiAgICApIHt9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5pc1NhdmluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubWVudVNlcnZpY2VcclxuICAgICAgICAgICAgLmdldEFsbE1lbnVzUGFpcygpXHJcbiAgICAgICAgICAgIC50b1Byb21pc2UoKVxyXG4gICAgICAgICAgICAudGhlbihtZW51cyA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBhaXMgPSB0aGlzLnBhaXNEaXNwb25pdmVpcyhtZW51cy5ib2R5KTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuYWN0aXZhdGVkUm91dGUuZGF0YS5zdWJzY3JpYmUoKHsgbWVudSB9KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubWVudSA9IG1lbnU7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuZ2F0ZXdheVJvdXRlc1NlcnZpY2UuZmluZEFsbCgpLnN1YnNjcmliZShnYXRld2F5Um91dGVzID0+IHtcclxuICAgICAgICAgICAgdGhpcy5yb3V0ZXMgPSBnYXRld2F5Um91dGVzO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByZXZpb3VzU3RhdGUoKSB7XHJcbiAgICAgICAgd2luZG93Lmhpc3RvcnkuYmFjaygpO1xyXG4gICAgfVxyXG5cclxuICAgIHNhdmUoKSB7XHJcbiAgICAgICAgdGhpcy5pc1NhdmluZyA9IHRydWU7XHJcbiAgICAgICAgaWYgKHRoaXMubWVudS5pZCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaWJlVG9TYXZlUmVzcG9uc2UodGhpcy5tZW51U2VydmljZS51cGRhdGUodGhpcy5tZW51KSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5tZW51LmF0aXZvID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5zdWJzY3JpYmVUb1NhdmVSZXNwb25zZSh0aGlzLm1lbnVTZXJ2aWNlLmNyZWF0ZSh0aGlzLm1lbnUpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzdWJzY3JpYmVUb1NhdmVSZXNwb25zZShyZXN1bHQ6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPElNZW51Pj4pIHtcclxuICAgICAgICByZXN1bHQuc3Vic2NyaWJlKChyZXM6IEh0dHBSZXNwb25zZTxJTWVudT4pID0+IHRoaXMub25TYXZlU3VjY2VzcygpLCAocmVzOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gdGhpcy5vblNhdmVFcnJvcigpKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG9uU2F2ZVN1Y2Nlc3MoKSB7XHJcbiAgICAgICAgdGhpcy5pc1NhdmluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMucHJldmlvdXNTdGF0ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgb25TYXZlRXJyb3IoKSB7XHJcbiAgICAgICAgdGhpcy5pc1NhdmluZyA9IGZhbHNlO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7Q29tcG9uZW50LCBPbkRlc3Ryb3ksIE9uSW5pdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7QWN0aXZhdGVkUm91dGUsIFJvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuXHJcbmltcG9ydCB7TmdiQWN0aXZlTW9kYWwsIE5nYk1vZGFsLCBOZ2JNb2RhbFJlZn0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQge0poaUV2ZW50TWFuYWdlcn0gZnJvbSAnbmctamhpcHN0ZXInO1xyXG5cclxuaW1wb3J0IHtNZW51U2VydmljZX0gZnJvbSAnLi9tZW51LnNlcnZpY2UnO1xyXG5pbXBvcnQge0lNZW51fSBmcm9tICcuLi9tb2RlbC9tZW51Lm1vZGVsJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdqaGktbWVudS1kZWxldGUtZGlhbG9nJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9tZW51LWRlbGV0ZS1kaWFsb2cuY29tcG9uZW50Lmh0bWwnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNZW51RGVsZXRlRGlhbG9nQ29tcG9uZW50IHtcclxuICAgIG1lbnU6IElNZW51O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICBwcml2YXRlIG1lbnVTZXJ2aWNlOiBNZW51U2VydmljZSxcclxuICAgICAgcHVibGljIGFjdGl2ZU1vZGFsOiBOZ2JBY3RpdmVNb2RhbCxcclxuICAgICAgcHJpdmF0ZSBldmVudE1hbmFnZXI6IEpoaUV2ZW50TWFuYWdlclxyXG4gICAgKSB7fVxyXG5cclxuICAgIGNsZWFyKCkge1xyXG4gICAgICAgIHRoaXMuYWN0aXZlTW9kYWwuZGlzbWlzcygnY2FuY2VsJyk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uZmlybURlbGV0ZShpZDogbnVtYmVyKSB7XHJcbiAgICAgICAgdGhpcy5tZW51U2VydmljZS5kZWxldGUoaWQpLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZXZlbnRNYW5hZ2VyLmJyb2FkY2FzdCh7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiAnbWVudUxpc3RNb2RpZmljYXRpb24nLFxyXG4gICAgICAgICAgICAgICAgY29udGVudDogJ0RlbGV0ZWQgYW4gbWVudSdcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlTW9kYWwuZGlzbWlzcyh0cnVlKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2poaS1tZW51LWRlbGV0ZS1wb3B1cCcsXHJcbiAgICB0ZW1wbGF0ZTogJydcclxufSlcclxuZXhwb3J0IGNsYXNzIE1lbnVEZWxldGVQb3B1cENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICAgIHByaXZhdGUgbmdiTW9kYWxSZWY6IE5nYk1vZGFsUmVmO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICBwcml2YXRlIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgICAgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE5nYk1vZGFsXHJcbiAgICApIHt9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5hY3RpdmF0ZWRSb3V0ZS5kYXRhLnN1YnNjcmliZSgoeyBtZW51IH0pID0+IHtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5nYk1vZGFsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihNZW51RGVsZXRlRGlhbG9nQ29tcG9uZW50IGFzIENvbXBvbmVudCwgeyBzaXplOiAnbGcnLCBiYWNrZHJvcDogJ3N0YXRpYycgfSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5nYk1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLm1lbnUgPSBtZW51O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5uZ2JNb2RhbFJlZi5yZXN1bHQudGhlbihcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbeyBvdXRsZXRzOiB7IHBvcHVwOiBudWxsIH0gfV0sIHsgcmVwbGFjZVVybDogdHJ1ZSwgcXVlcnlQYXJhbXNIYW5kbGluZzogJ21lcmdlJyB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZ2JNb2RhbFJlZiA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICByZWFzb24gPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbeyBvdXRsZXRzOiB7IHBvcHVwOiBudWxsIH0gfV0sIHsgcmVwbGFjZVVybDogdHJ1ZSwgcXVlcnlQYXJhbXNIYW5kbGluZzogJ21lcmdlJyB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZ2JNb2RhbFJlZiA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfSwgMCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICAgICAgdGhpcy5uZ2JNb2RhbFJlZiA9IG51bGw7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtDb21wb25lbnQsIE9uSW5pdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7QWN0aXZhdGVkUm91dGV9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7SU1lbnV9IGZyb20gJy4uL21vZGVsL21lbnUubW9kZWwnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2poaS1tZW51LWRldGFpbCcsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vbWVudS1kZXRhaWwuY29tcG9uZW50Lmh0bWwnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNZW51RGV0YWlsQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICAgIG1lbnU6IElNZW51O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlKSB7fVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIHRoaXMuYWN0aXZhdGVkUm91dGUuZGF0YS5zdWJzY3JpYmUoKHsgbWVudSB9KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubWVudSA9IG1lbnU7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJldmlvdXNTdGF0ZSgpIHtcclxuICAgICAgICB3aW5kb3cuaGlzdG9yeS5iYWNrKCk7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtDb21wb25lbnQsIE9uRGVzdHJveSwgT25Jbml0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtIdHRwRXJyb3JSZXNwb25zZSwgSHR0cEhlYWRlcnMsIEh0dHBSZXNwb25zZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlLCBSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7U3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtKaGlFdmVudE1hbmFnZXIsIEpoaVBhcnNlTGlua3N9IGZyb20gJ25nLWpoaXBzdGVyJztcclxuaW1wb3J0IHtNZW51U2VydmljZX0gZnJvbSAnLi9tZW51LnNlcnZpY2UnO1xyXG5pbXBvcnQge1BvcnRhbEFsZXJ0U2VydmljZX0gZnJvbSAnLi4vYWxlcnQvcG9ydGFsLWFsZXJ0LnNlcnZpY2UnO1xyXG5pbXBvcnQge1ByaW5jaXBhbH0gZnJvbSAnLi4vYXV0aC9wcmluY2lwYWwuc2VydmljZSc7XHJcbmltcG9ydCB7SVRFTVNfUEVSX1BBR0V9IGZyb20gJy4uL3V0aWwvcGFnaW5hdGlvbi5jb25zdGFudHMnO1xyXG5pbXBvcnQge0lNZW51fSBmcm9tICcuLi9tb2RlbC9tZW51Lm1vZGVsJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdqaGktbWVudScsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vbWVudS5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIE1lbnVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgICBjdXJyZW50QWNjb3VudDogYW55O1xyXG4gICAgbWVudXM6IElNZW51W107XHJcbiAgICBlcnJvcjogYW55O1xyXG4gICAgc3VjY2VzczogYW55O1xyXG4gICAgZXZlbnRTdWJzY3JpYmVyOiBTdWJzY3JpcHRpb247XHJcbiAgICByb3V0ZURhdGE6IGFueTtcclxuICAgIGxpbmtzOiBhbnk7XHJcbiAgICB0b3RhbEl0ZW1zOiBhbnk7XHJcbiAgICBxdWVyeUNvdW50OiBhbnk7XHJcbiAgICBpdGVtc1BlclBhZ2U6IGFueTtcclxuICAgIHBhZ2U6IGFueTtcclxuICAgIHByZWRpY2F0ZTogYW55O1xyXG4gICAgcHJldmlvdXNQYWdlOiBhbnk7XHJcbiAgICByZXZlcnNlOiBhbnk7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBtZW51U2VydmljZTogTWVudVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBwYXJzZUxpbmtzOiBKaGlQYXJzZUxpbmtzLFxyXG4gICAgICAgIHByaXZhdGUgYWxlcnRTZXJ2aWNlOiBQb3J0YWxBbGVydFNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBwcmluY2lwYWw6IFByaW5jaXBhbCxcclxuICAgICAgICBwcml2YXRlIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgICAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICAgICAgIHByaXZhdGUgZXZlbnRNYW5hZ2VyOiBKaGlFdmVudE1hbmFnZXJcclxuICAgICkge1xyXG4gICAgICAgIHRoaXMuaXRlbXNQZXJQYWdlID0gSVRFTVNfUEVSX1BBR0U7XHJcbiAgICAgICAgdGhpcy5yb3V0ZURhdGEgPSB0aGlzLmFjdGl2YXRlZFJvdXRlLmRhdGEuc3Vic2NyaWJlKGRhdGEgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnBhZ2UgPSBkYXRhLnBhZ2luZ1BhcmFtcy5wYWdlO1xyXG4gICAgICAgICAgICB0aGlzLnByZXZpb3VzUGFnZSA9IGRhdGEucGFnaW5nUGFyYW1zLnBhZ2U7XHJcbiAgICAgICAgICAgIHRoaXMucmV2ZXJzZSA9IGRhdGEucGFnaW5nUGFyYW1zLmFzY2VuZGluZztcclxuICAgICAgICAgICAgdGhpcy5wcmVkaWNhdGUgPSBkYXRhLnBhZ2luZ1BhcmFtcy5wcmVkaWNhdGU7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5wcmVkaWNhdGUgPT09ICdpZCcpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucHJlZGljYXRlID0gJ3NlcXVlbmNpYSc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLmxvYWRBbGwoKTtcclxuICAgICAgICB0aGlzLnByaW5jaXBhbC5pZGVudGl0eSgpLnRoZW4oYWNjb3VudCA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudEFjY291bnQgPSBhY2NvdW50O1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMucmVnaXN0ZXJDaGFuZ2VJbk1lbnVzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgbG9hZEFsbCgpIHtcclxuICAgICAgICB0aGlzLm1lbnVTZXJ2aWNlXHJcbiAgICAgICAgICAgIC5xdWVyeSh7XHJcbiAgICAgICAgICAgICAgICBwYWdlOiB0aGlzLnBhZ2UgLSAxLFxyXG4gICAgICAgICAgICAgICAgc2l6ZTogdGhpcy5pdGVtc1BlclBhZ2UsXHJcbiAgICAgICAgICAgICAgICBzb3J0OiB0aGlzLnNvcnQoKVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgICAgKHJlczogSHR0cFJlc3BvbnNlPElNZW51W10+KSA9PiB0aGlzLnBhZ2luYXRlTWVudXMocmVzLmJvZHksIHJlcy5oZWFkZXJzKSxcclxuICAgICAgICAgICAgICAgIChyZXM6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB0aGlzLm9uRXJyb3IocmVzLm1lc3NhZ2UpXHJcbiAgICAgICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0QWN0aXZlKG1lbnUsIGlzQWN0aXZhdGVkKSB7XHJcbiAgICAgICAgbWVudS5hdGl2byA9IGlzQWN0aXZhdGVkO1xyXG5cclxuICAgICAgICB0aGlzLm1lbnVTZXJ2aWNlLnVwZGF0ZShtZW51KS5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSAyMDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdWNjZXNzID0gJ09LJztcclxuICAgICAgICAgICAgICAgIHRoaXMubG9hZEFsbCgpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdWNjZXNzID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSAnRVJST1InO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0TG9naW5QZWxvQXBwKG1lbnUsIGlzTG9naW5QZWxvQXBwKSB7XHJcbiAgICAgICAgbWVudS5sb2dpblBlbG9BcHAgPSBpc0xvZ2luUGVsb0FwcDtcclxuXHJcbiAgICAgICAgdGhpcy5tZW51U2VydmljZS51cGRhdGUobWVudSkuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3VjY2VzcyA9ICdPSyc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRBbGwoKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3VjY2VzcyA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gJ0VSUk9SJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICBzZXRWaXNpdmVsU29tZW50ZVBhcmFHZXN0b3IobWVudSwgaXNWaXNpdmVsU29tZW50ZVBhcmFHZXN0b3IpIHtcclxuICAgICAgbWVudS52aXNpdmVsU29tZW50ZVBhcmFHZXN0b3IgPSBpc1Zpc2l2ZWxTb21lbnRlUGFyYUdlc3RvcjtcclxuXHJcbiAgICAgIHRoaXMubWVudVNlcnZpY2UudXBkYXRlKG1lbnUpLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSAyMDApIHtcclxuICAgICAgICAgICAgICB0aGlzLmVycm9yID0gbnVsbDtcclxuICAgICAgICAgICAgICB0aGlzLnN1Y2Nlc3MgPSAnT0snO1xyXG4gICAgICAgICAgICAgIHRoaXMubG9hZEFsbCgpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLnN1Y2Nlc3MgPSBudWxsO1xyXG4gICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSAnRVJST1InO1xyXG4gICAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHNldFNlbXByZVZpc2l2ZWwobWVudSwgaXNTZW1wcmVWaXNpdmVsKSB7XHJcbiAgICAgIG1lbnUuc2VtcHJlVmlzaXZlbCA9IGlzU2VtcHJlVmlzaXZlbDtcclxuXHJcbiAgICAgIHRoaXMubWVudVNlcnZpY2UudXBkYXRlKG1lbnUpLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSAyMDApIHtcclxuICAgICAgICAgICAgICB0aGlzLmVycm9yID0gbnVsbDtcclxuICAgICAgICAgICAgICB0aGlzLnN1Y2Nlc3MgPSAnT0snO1xyXG4gICAgICAgICAgICAgIHRoaXMubG9hZEFsbCgpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLnN1Y2Nlc3MgPSBudWxsO1xyXG4gICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSAnRVJST1InO1xyXG4gICAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gICAgbG9hZFBhZ2UocGFnZTogbnVtYmVyKSB7XHJcbiAgICAgICAgaWYgKHBhZ2UgIT09IHRoaXMucHJldmlvdXNQYWdlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJldmlvdXNQYWdlID0gcGFnZTtcclxuICAgICAgICAgICAgdGhpcy50cmFuc2l0aW9uKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRyYW5zaXRpb24oKSB7XHJcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvbWVudSddLCB7XHJcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zOiB7XHJcbiAgICAgICAgICAgICAgICBwYWdlOiB0aGlzLnBhZ2UsXHJcbiAgICAgICAgICAgICAgICBzaXplOiB0aGlzLml0ZW1zUGVyUGFnZSxcclxuICAgICAgICAgICAgICAgIHNvcnQ6IHRoaXMucHJlZGljYXRlICsgJywnICsgKHRoaXMucmV2ZXJzZSA/ICdhc2MnIDogJ2Rlc2MnKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5sb2FkQWxsKCk7XHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXIoKSB7XHJcbiAgICAgICAgdGhpcy5wYWdlID0gMDtcclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXHJcbiAgICAgICAgICAgICcvbWVudScsXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHBhZ2U6IHRoaXMucGFnZSxcclxuICAgICAgICAgICAgICAgIHNvcnQ6IHRoaXMucHJlZGljYXRlICsgJywnICsgKHRoaXMucmV2ZXJzZSA/ICdhc2MnIDogJ2Rlc2MnKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgXSk7XHJcbiAgICAgICAgdGhpcy5sb2FkQWxsKCk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICAgICAgdGhpcy5ldmVudE1hbmFnZXIuZGVzdHJveSh0aGlzLmV2ZW50U3Vic2NyaWJlcik7XHJcbiAgICB9XHJcblxyXG4gICAgdHJhY2tJZChpbmRleDogbnVtYmVyLCBpdGVtOiBJTWVudSkge1xyXG4gICAgICAgIHJldHVybiBpdGVtLmlkO1xyXG4gICAgfVxyXG5cclxuICAgIHJlZ2lzdGVyQ2hhbmdlSW5NZW51cygpIHtcclxuICAgICAgICB0aGlzLmV2ZW50U3Vic2NyaWJlciA9IHRoaXMuZXZlbnRNYW5hZ2VyLnN1YnNjcmliZSgnbWVudUxpc3RNb2RpZmljYXRpb24nLCAoKSA9PiB0aGlzLmxvYWRBbGwoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgc29ydCgpIHtcclxuICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMucHJlZGljYXRlKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHRoaXMucHJlZGljYXRlICsgJywnICsgKHRoaXMucmV2ZXJzZSA/ICdhc2MnIDogJ2Rlc2MnKSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmVzdWx0LnB1c2goJ3NlcXVlbmNpYSxhc2MnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnByZWRpY2F0ZSAhPT0gJ2lkJykge1xyXG4gICAgICAgICAgICByZXN1bHQucHVzaCgnaWQnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBwYWdpbmF0ZU1lbnVzKGRhdGE6IElNZW51W10sIGhlYWRlcnM6IEh0dHBIZWFkZXJzKSB7XHJcbiAgICAgICAgdGhpcy5saW5rcyA9IHRoaXMucGFyc2VMaW5rcy5wYXJzZShoZWFkZXJzLmdldCgnbGluaycpKTtcclxuICAgICAgICB0aGlzLnRvdGFsSXRlbXMgPSBwYXJzZUludChoZWFkZXJzLmdldCgnWC1Ub3RhbC1Db3VudCcpLCAxMCk7XHJcbiAgICAgICAgdGhpcy5xdWVyeUNvdW50ID0gdGhpcy50b3RhbEl0ZW1zO1xyXG4gICAgICAgIHRoaXMubWVudXMgPSBkYXRhO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgb25FcnJvcihlcnJvck1lc3NhZ2U6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKGVycm9yTWVzc2FnZSwgbnVsbCwgbnVsbCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U29ydEljb24ocHJvcGVydHk6IHN0cmluZykge1xyXG4gICAgICAgIGlmICghdGhpcy5wcmVkaWNhdGUgfHwgdGhpcy5yZXZlcnNlID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuICdzb3J0JztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnByZWRpY2F0ZSA9PT0gcHJvcGVydHkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmV2ZXJzZSA/ICdzb3J0LXVwJyA6ICdzb3J0LWRvd24nO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gJ3NvcnQnO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7SHR0cFJlc3BvbnNlfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7QWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgUmVzb2x2ZSwgUm91dGVyU3RhdGVTbmFwc2hvdCwgUm91dGVzfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQge0poaVJlc29sdmVQYWdpbmdQYXJhbXN9IGZyb20gJ25nLWpoaXBzdGVyJztcclxuaW1wb3J0IHtPYnNlcnZhYmxlLCBvZn0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7ZmlsdGVyLCBtYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHtNZW51U2VydmljZX0gZnJvbSAnLi9tZW51LnNlcnZpY2UnO1xyXG5pbXBvcnQge01lbnVDb21wb25lbnR9IGZyb20gJy4vbWVudS5jb21wb25lbnQnO1xyXG5pbXBvcnQge01lbnVEZXRhaWxDb21wb25lbnR9IGZyb20gJy4vbWVudS1kZXRhaWwuY29tcG9uZW50JztcclxuaW1wb3J0IHtNZW51VXBkYXRlQ29tcG9uZW50fSBmcm9tICcuL21lbnUtdXBkYXRlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7TWVudURlbGV0ZVBvcHVwQ29tcG9uZW50fSBmcm9tICcuL21lbnUtZGVsZXRlLWRpYWxvZy5jb21wb25lbnQnO1xyXG5pbXBvcnQge0lNZW51LCBNZW51fSBmcm9tICcuLi9tb2RlbC9tZW51Lm1vZGVsJztcclxuaW1wb3J0IHtVc2VyUm91dGVBY2Nlc3NTZXJ2aWNlfSBmcm9tICcuLi9hdXRoL3VzZXItcm91dGUtYWNjZXNzLXNlcnZpY2UnO1xyXG5cclxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcclxuZXhwb3J0IGNsYXNzIE1lbnVSZXNvbHZlIGltcGxlbWVudHMgUmVzb2x2ZTxJTWVudT4ge1xyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBzZXJ2aWNlOiBNZW51U2VydmljZSkge31cclxuXHJcbiAgICByZXNvbHZlKHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBzdGF0ZTogUm91dGVyU3RhdGVTbmFwc2hvdCk6IE9ic2VydmFibGU8TWVudT4ge1xyXG4gICAgICAgIGNvbnN0IGlkID0gcm91dGUucGFyYW1zWydpZCddID8gcm91dGUucGFyYW1zWydpZCddIDogbnVsbDtcclxuICAgICAgICBpZiAoaWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2VydmljZS5maW5kKGlkKS5waXBlKFxyXG4gICAgICAgICAgICAgICAgZmlsdGVyKChyZXNwb25zZTogSHR0cFJlc3BvbnNlPE1lbnU+KSA9PiByZXNwb25zZS5vayksXHJcbiAgICAgICAgICAgICAgICBtYXAoKG1lbnU6IEh0dHBSZXNwb25zZTxNZW51PikgPT4gbWVudS5ib2R5KVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gb2YobmV3IE1lbnUoKSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBtZW51Um91dGU6IFJvdXRlcyA9IFtcclxuICAgIHtcclxuICAgICAgICBwYXRoOiAnbWVudScsXHJcbiAgICAgICAgY29tcG9uZW50OiBNZW51Q29tcG9uZW50LFxyXG4gICAgICAgIHJlc29sdmU6IHtcclxuICAgICAgICAgICAgcGFnaW5nUGFyYW1zOiBKaGlSZXNvbHZlUGFnaW5nUGFyYW1zXHJcbiAgICAgICAgfSxcclxuICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgIGF1dGhvcml0aWVzOiBbJ1JPTEVfUE9SVEFMJ10sXHJcbiAgICAgICAgICAgIGRlZmF1bHRTb3J0OiAnaWQsYXNjJyxcclxuICAgICAgICAgICAgcGFnZVRpdGxlOiAnTWVudSdcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNhbkFjdGl2YXRlOiBbVXNlclJvdXRlQWNjZXNzU2VydmljZV1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgcGF0aDogJ21lbnUvOmlkL3ZpZXcnLFxyXG4gICAgICAgIGNvbXBvbmVudDogTWVudURldGFpbENvbXBvbmVudCxcclxuICAgICAgICByZXNvbHZlOiB7XHJcbiAgICAgICAgICAgIG1lbnU6IE1lbnVSZXNvbHZlXHJcbiAgICAgICAgfSxcclxuICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgIGF1dGhvcml0aWVzOiBbJ1JPTEVfUE9SVEFMJ10sXHJcbiAgICAgICAgICAgIHBhZ2VUaXRsZTogJ01lbnUnXHJcbiAgICAgICAgfSxcclxuICAgICAgICBjYW5BY3RpdmF0ZTogW1VzZXJSb3V0ZUFjY2Vzc1NlcnZpY2VdXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIHBhdGg6ICdtZW51L25ldycsXHJcbiAgICAgICAgY29tcG9uZW50OiBNZW51VXBkYXRlQ29tcG9uZW50LFxyXG4gICAgICAgIHJlc29sdmU6IHtcclxuICAgICAgICAgICAgbWVudTogTWVudVJlc29sdmVcclxuICAgICAgICB9LFxyXG4gICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgYXV0aG9yaXRpZXM6IFsnUk9MRV9QT1JUQUwnXSxcclxuICAgICAgICAgICAgcGFnZVRpdGxlOiAnTWVudSdcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNhbkFjdGl2YXRlOiBbVXNlclJvdXRlQWNjZXNzU2VydmljZV1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgcGF0aDogJ21lbnUvOmlkL2VkaXQnLFxyXG4gICAgICAgIGNvbXBvbmVudDogTWVudVVwZGF0ZUNvbXBvbmVudCxcclxuICAgICAgICByZXNvbHZlOiB7XHJcbiAgICAgICAgICAgIG1lbnU6IE1lbnVSZXNvbHZlXHJcbiAgICAgICAgfSxcclxuICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgIGF1dGhvcml0aWVzOiBbJ1JPTEVfUE9SVEFMJ10sXHJcbiAgICAgICAgICAgIHBhZ2VUaXRsZTogJ01lbnUnXHJcbiAgICAgICAgfSxcclxuICAgICAgICBjYW5BY3RpdmF0ZTogW1VzZXJSb3V0ZUFjY2Vzc1NlcnZpY2VdXHJcbiAgICB9XHJcbl07XHJcblxyXG5leHBvcnQgY29uc3QgbWVudVBvcHVwUm91dGU6IFJvdXRlcyA9IFtcclxuICAgIHtcclxuICAgICAgICBwYXRoOiAnbWVudS86aWQvZGVsZXRlJyxcclxuICAgICAgICBjb21wb25lbnQ6IE1lbnVEZWxldGVQb3B1cENvbXBvbmVudCxcclxuICAgICAgICByZXNvbHZlOiB7XHJcbiAgICAgICAgICAgIG1lbnU6IE1lbnVSZXNvbHZlXHJcbiAgICAgICAgfSxcclxuICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgIGF1dGhvcml0aWVzOiBbJ1JPTEVfUE9SVEFMJ10sXHJcbiAgICAgICAgICAgIHBhZ2VUaXRsZTogJ01lbnUnXHJcbiAgICAgICAgfSxcclxuICAgICAgICBjYW5BY3RpdmF0ZTogW1VzZXJSb3V0ZUFjY2Vzc1NlcnZpY2VdLFxyXG4gICAgICAgIG91dGxldDogJ3BvcHVwJ1xyXG4gICAgfVxyXG5dO1xyXG4iLCJpbXBvcnQge0NVU1RPTV9FTEVNRU5UU19TQ0hFTUEsIE5nTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtSb3V0ZXJNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcblxyXG5pbXBvcnQge01lbnVDb21wb25lbnR9IGZyb20gJy4vbWVudS5jb21wb25lbnQnO1xyXG5pbXBvcnQge01lbnVEZXRhaWxDb21wb25lbnR9IGZyb20gJy4vbWVudS1kZXRhaWwuY29tcG9uZW50JztcclxuaW1wb3J0IHtNZW51VXBkYXRlQ29tcG9uZW50fSBmcm9tICcuL21lbnUtdXBkYXRlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7TWVudURlbGV0ZURpYWxvZ0NvbXBvbmVudCwgTWVudURlbGV0ZVBvcHVwQ29tcG9uZW50fSBmcm9tICcuL21lbnUtZGVsZXRlLWRpYWxvZy5jb21wb25lbnQnO1xyXG5pbXBvcnQge21lbnVQb3B1cFJvdXRlLCBtZW51Um91dGV9IGZyb20gJy4vbWVudS5yb3V0ZSc7XHJcbmltcG9ydCB7Rm9udEF3ZXNvbWVNb2R1bGV9IGZyb20gJ0Bmb3J0YXdlc29tZS9hbmd1bGFyLWZvbnRhd2Vzb21lJztcclxuaW1wb3J0IHtsaWJyYXJ5fSBmcm9tICdAZm9ydGF3ZXNvbWUvZm9udGF3ZXNvbWUtc3ZnLWNvcmUnO1xyXG5pbXBvcnQge2Zhc30gZnJvbSAnQGZvcnRhd2Vzb21lL2ZyZWUtc29saWQtc3ZnLWljb25zJztcclxuaW1wb3J0IHtGb3Jtc01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQge05nSmhpcHN0ZXJNb2R1bGV9IGZyb20gJ25nLWpoaXBzdGVyJztcclxuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7UG9ydGFsQWxlcnRNb2R1bGV9IGZyb20gJy4uL2FsZXJ0L3BvcnRhbC1hbGVydC5tb2R1bGUnO1xyXG5pbXBvcnQge01FTlVfTU9EVUxPX09QVElPTlMsIE9wdGlvbnNQcm92aWRlcn0gZnJvbSAnLi4vdXRpbC9vcHRpb25zLXByb3ZpZGVyJztcclxuaW1wb3J0IHtHYXRld2F5Um91dGVzU2VydmljZX0gZnJvbSAnLi4vYWRtaW4vZ2F0ZXdheS9nYXRld2F5LXJvdXRlcy5zZXJ2aWNlJztcclxuaW1wb3J0IHtOZ2JNb2R1bGV9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuXHJcbmxpYnJhcnkuYWRkKGZhcyk7XHJcblxyXG5jb25zdCBFTlRJVFlfU1RBVEVTID0gWy4uLm1lbnVSb3V0ZSwgLi4ubWVudVBvcHVwUm91dGVdO1xyXG5cclxuQE5nTW9kdWxlKHtcclxuICAgIGltcG9ydHM6IFtcclxuICAgICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgICBGb3Jtc01vZHVsZSxcclxuICAgICAgTmdKaGlwc3Rlck1vZHVsZSxcclxuICAgICAgTmdiTW9kdWxlLmZvclJvb3QoKSxcclxuICAgICAgRm9udEF3ZXNvbWVNb2R1bGUsXHJcbiAgICAgIFBvcnRhbEFsZXJ0TW9kdWxlLFxyXG4gICAgICBSb3V0ZXJNb2R1bGUuZm9yQ2hpbGQoRU5USVRZX1NUQVRFUylcclxuICAgIF0sXHJcbiAgICBkZWNsYXJhdGlvbnM6IFtcclxuICAgICAgTWVudUNvbXBvbmVudCxcclxuICAgICAgTWVudURldGFpbENvbXBvbmVudCxcclxuICAgICAgTWVudVVwZGF0ZUNvbXBvbmVudCxcclxuICAgICAgTWVudURlbGV0ZURpYWxvZ0NvbXBvbmVudCxcclxuICAgICAgTWVudURlbGV0ZVBvcHVwQ29tcG9uZW50XSxcclxuICAgIGVudHJ5Q29tcG9uZW50czogW1xyXG4gICAgICBNZW51Q29tcG9uZW50LFxyXG4gICAgICBNZW51VXBkYXRlQ29tcG9uZW50LFxyXG4gICAgICBNZW51RGVsZXRlRGlhbG9nQ29tcG9uZW50LFxyXG4gICAgICBNZW51RGVsZXRlUG9wdXBDb21wb25lbnRcclxuICAgIF0sXHJcbiAgICBwcm92aWRlcnM6IFtcclxuICAgICAgT3B0aW9uc1Byb3ZpZGVyLFxyXG4gICAgICBHYXRld2F5Um91dGVzU2VydmljZVxyXG4gICAgXSxcclxuICAgIHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTWVudU1vZHVsZSB7XHJcbiAgc3RhdGljIGZvclJvb3QobW9kdWxvPzpzdHJpbmcpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIG5nTW9kdWxlOiBNZW51TW9kdWxlLFxyXG4gICAgICBwcm92aWRlcnM6IFtcclxuICAgICAgICB7cHJvdmlkZTogTUVOVV9NT0RVTE9fT1BUSU9OUywgdXNlVmFsdWU6IG1vZHVsb31cclxuICAgICAgXVxyXG4gICAgfTtcclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIEVsZW1lbnRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBIdHRwUmVzcG9uc2UsIEh0dHBFcnJvclJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEpoaURhdGFVdGlscyB9IGZyb20gJ25nLWpoaXBzdGVyJztcclxuXHJcbmltcG9ydCB7IEVtcHJlc2FTZXJ2aWNlIH0gZnJvbSAnLi9lbXByZXNhLnNlcnZpY2UnO1xyXG5pbXBvcnQge0lFbXByZXNhfSBmcm9tICcuLi9tb2RlbC9lbXByZXNhLm1vZGVsJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdqaGktZW1wcmVzYS11cGRhdGUnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2VtcHJlc2EtdXBkYXRlLmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgRW1wcmVzYVVwZGF0ZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgICBlbXByZXNhOiBJRW1wcmVzYTtcclxuICAgIGlzU2F2aW5nOiBib29sZWFuO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgZGF0YVV0aWxzOiBKaGlEYXRhVXRpbHMsXHJcbiAgICAgICAgcHJpdmF0ZSBlbXByZXNhU2VydmljZTogRW1wcmVzYVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxyXG4gICAgICAgIHByaXZhdGUgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlXHJcbiAgICApIHt9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5pc1NhdmluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuYWN0aXZhdGVkUm91dGUuZGF0YS5zdWJzY3JpYmUoKHsgZW1wcmVzYSB9KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZW1wcmVzYSA9IGVtcHJlc2E7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYnl0ZVNpemUoZmllbGQpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kYXRhVXRpbHMuYnl0ZVNpemUoZmllbGQpO1xyXG4gICAgfVxyXG5cclxuICAgIG9wZW5GaWxlKGNvbnRlbnRUeXBlLCBmaWVsZCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGFVdGlscy5vcGVuRmlsZShjb250ZW50VHlwZSwgZmllbGQpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldEZpbGVEYXRhKGV2ZW50LCBlbnRpdHksIGZpZWxkLCBpc0ltYWdlKSB7XHJcbiAgICAgICAgdGhpcy5kYXRhVXRpbHMuc2V0RmlsZURhdGEoZXZlbnQsIGVudGl0eSwgZmllbGQsIGlzSW1hZ2UpO1xyXG4gICAgfVxyXG5cclxuICAgIGNsZWFySW5wdXRJbWFnZShmaWVsZDogc3RyaW5nLCBmaWVsZENvbnRlbnRUeXBlOiBzdHJpbmcsIGlkSW5wdXQ6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuZGF0YVV0aWxzLmNsZWFySW5wdXRJbWFnZSh0aGlzLmVtcHJlc2EsIHRoaXMuZWxlbWVudFJlZiwgZmllbGQsIGZpZWxkQ29udGVudFR5cGUsIGlkSW5wdXQpO1xyXG4gICAgfVxyXG5cclxuICAgIHByZXZpb3VzU3RhdGUoKSB7XHJcbiAgICAgICAgd2luZG93Lmhpc3RvcnkuYmFjaygpO1xyXG4gICAgfVxyXG5cclxuICAgIHNhdmUoKSB7XHJcbiAgICAgICAgdGhpcy5pc1NhdmluZyA9IHRydWU7XHJcbiAgICAgICAgaWYgKHRoaXMuZW1wcmVzYS5pZCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaWJlVG9TYXZlUmVzcG9uc2UodGhpcy5lbXByZXNhU2VydmljZS51cGRhdGUodGhpcy5lbXByZXNhKSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zdWJzY3JpYmVUb1NhdmVSZXNwb25zZSh0aGlzLmVtcHJlc2FTZXJ2aWNlLmNyZWF0ZSh0aGlzLmVtcHJlc2EpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzdWJzY3JpYmVUb1NhdmVSZXNwb25zZShyZXN1bHQ6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPElFbXByZXNhPj4pIHtcclxuICAgICAgICByZXN1bHQuc3Vic2NyaWJlKChyZXM6IEh0dHBSZXNwb25zZTxJRW1wcmVzYT4pID0+IHRoaXMub25TYXZlU3VjY2VzcygpLCAocmVzOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gdGhpcy5vblNhdmVFcnJvcigpKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG9uU2F2ZVN1Y2Nlc3MoKSB7XHJcbiAgICAgICAgdGhpcy5pc1NhdmluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMucHJldmlvdXNTdGF0ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgb25TYXZlRXJyb3IoKSB7XHJcbiAgICAgICAgdGhpcy5pc1NhdmluZyA9IGZhbHNlO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcblxyXG5pbXBvcnQgeyBOZ2JBY3RpdmVNb2RhbCwgTmdiTW9kYWwsIE5nYk1vZGFsUmVmIH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQgeyBKaGlFdmVudE1hbmFnZXIgfSBmcm9tICduZy1qaGlwc3Rlcic7XHJcblxyXG5pbXBvcnQgeyBFbXByZXNhU2VydmljZSB9IGZyb20gJy4vZW1wcmVzYS5zZXJ2aWNlJztcclxuaW1wb3J0IHtJRW1wcmVzYX0gZnJvbSAnLi4vbW9kZWwvZW1wcmVzYS5tb2RlbCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnamhpLWVtcHJlc2EtZGVsZXRlLWRpYWxvZycsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vZW1wcmVzYS1kZWxldGUtZGlhbG9nLmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgRW1wcmVzYURlbGV0ZURpYWxvZ0NvbXBvbmVudCB7XHJcbiAgICBlbXByZXNhOiBJRW1wcmVzYTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgcHJpdmF0ZSBlbXByZXNhU2VydmljZTogRW1wcmVzYVNlcnZpY2UsXHJcbiAgICAgIHB1YmxpYyBhY3RpdmVNb2RhbDogTmdiQWN0aXZlTW9kYWwsXHJcbiAgICAgIHByaXZhdGUgZXZlbnRNYW5hZ2VyOiBKaGlFdmVudE1hbmFnZXJcclxuICAgICkge31cclxuXHJcbiAgICBjbGVhcigpIHtcclxuICAgICAgICB0aGlzLmFjdGl2ZU1vZGFsLmRpc21pc3MoJ2NhbmNlbCcpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbmZpcm1EZWxldGUoaWQ6IG51bWJlcikge1xyXG4gICAgICAgIHRoaXMuZW1wcmVzYVNlcnZpY2UuZGVsZXRlKGlkKS5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmV2ZW50TWFuYWdlci5icm9hZGNhc3Qoe1xyXG4gICAgICAgICAgICAgICAgbmFtZTogJ2VtcHJlc2FMaXN0TW9kaWZpY2F0aW9uJyxcclxuICAgICAgICAgICAgICAgIGNvbnRlbnQ6ICdEZWxldGVkIGFuIGVtcHJlc2EnXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLmFjdGl2ZU1vZGFsLmRpc21pc3ModHJ1ZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdqaGktZW1wcmVzYS1kZWxldGUtcG9wdXAnLFxyXG4gICAgdGVtcGxhdGU6ICcnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBFbXByZXNhRGVsZXRlUG9wdXBDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgICBwcml2YXRlIG5nYk1vZGFsUmVmOiBOZ2JNb2RhbFJlZjtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgcHJpdmF0ZSBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBOZ2JNb2RhbFxyXG4gICAgKSB7fVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIHRoaXMuYWN0aXZhdGVkUm91dGUuZGF0YS5zdWJzY3JpYmUoKHsgZW1wcmVzYSB9KSA9PiB7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5uZ2JNb2RhbFJlZiA9IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oRW1wcmVzYURlbGV0ZURpYWxvZ0NvbXBvbmVudCBhcyBDb21wb25lbnQsIHsgc2l6ZTogJ2xnJywgYmFja2Ryb3A6ICdzdGF0aWMnIH0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5uZ2JNb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS5lbXByZXNhID0gZW1wcmVzYTtcclxuICAgICAgICAgICAgICAgIHRoaXMubmdiTW9kYWxSZWYucmVzdWx0LnRoZW4oXHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3sgb3V0bGV0czogeyBwb3B1cDogbnVsbCB9IH1dLCB7IHJlcGxhY2VVcmw6IHRydWUsIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6ICdtZXJnZScgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmdiTW9kYWxSZWYgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgcmVhc29uID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3sgb3V0bGV0czogeyBwb3B1cDogbnVsbCB9IH1dLCB7IHJlcGxhY2VVcmw6IHRydWUsIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6ICdtZXJnZScgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmdiTW9kYWxSZWYgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH0sIDApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25EZXN0cm95KCkge1xyXG4gICAgICAgIHRoaXMubmdiTW9kYWxSZWYgPSBudWxsO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7Q29tcG9uZW50LCBPbkluaXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQge0poaURhdGFVdGlsc30gZnJvbSAnbmctamhpcHN0ZXInO1xyXG5pbXBvcnQge0lFbXByZXNhfSBmcm9tICcuLi9tb2RlbC9lbXByZXNhLm1vZGVsJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdqaGktZW1wcmVzYS1kZXRhaWwnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2VtcHJlc2EtZGV0YWlsLmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgRW1wcmVzYURldGFpbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgICBlbXByZXNhOiBJRW1wcmVzYTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGRhdGFVdGlsczogSmhpRGF0YVV0aWxzLCBwcml2YXRlIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSkge31cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLmFjdGl2YXRlZFJvdXRlLmRhdGEuc3Vic2NyaWJlKCh7IGVtcHJlc2EgfSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmVtcHJlc2EgPSBlbXByZXNhO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGJ5dGVTaXplKGZpZWxkKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVV0aWxzLmJ5dGVTaXplKGZpZWxkKTtcclxuICAgIH1cclxuXHJcbiAgICBvcGVuRmlsZShjb250ZW50VHlwZSwgZmllbGQpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kYXRhVXRpbHMub3BlbkZpbGUoY29udGVudFR5cGUsIGZpZWxkKTtcclxuICAgIH1cclxuICAgIHByZXZpb3VzU3RhdGUoKSB7XHJcbiAgICAgICAgd2luZG93Lmhpc3RvcnkuYmFjaygpO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7Q29tcG9uZW50LCBPbkRlc3Ryb3ksIE9uSW5pdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7SHR0cEVycm9yUmVzcG9uc2UsIEh0dHBIZWFkZXJzLCBIdHRwUmVzcG9uc2V9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQge1N1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7SmhpRGF0YVV0aWxzLCBKaGlFdmVudE1hbmFnZXIsIEpoaVBhcnNlTGlua3N9IGZyb20gJ25nLWpoaXBzdGVyJztcclxuXHJcbmltcG9ydCB7RW1wcmVzYVNlcnZpY2V9IGZyb20gJy4vZW1wcmVzYS5zZXJ2aWNlJztcclxuaW1wb3J0IHtJRW1wcmVzYX0gZnJvbSAnLi4vbW9kZWwvZW1wcmVzYS5tb2RlbCc7XHJcbmltcG9ydCB7UG9ydGFsQWxlcnRTZXJ2aWNlfSBmcm9tICcuLi9hbGVydC9wb3J0YWwtYWxlcnQuc2VydmljZSc7XHJcbmltcG9ydCB7UHJpbmNpcGFsfSBmcm9tICcuLi9hdXRoL3ByaW5jaXBhbC5zZXJ2aWNlJztcclxuaW1wb3J0IHtJVEVNU19QRVJfUEFHRX0gZnJvbSAnLi4vdXRpbC9wYWdpbmF0aW9uLmNvbnN0YW50cyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnamhpLWVtcHJlc2EnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2VtcHJlc2EuY29tcG9uZW50Lmh0bWwnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBFbXByZXNhQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gICAgY3VycmVudEFjY291bnQ6IGFueTtcclxuICAgIGVtcHJlc2FzOiBJRW1wcmVzYVtdO1xyXG4gICAgZXJyb3I6IGFueTtcclxuICAgIHN1Y2Nlc3M6IGFueTtcclxuICAgIGV2ZW50U3Vic2NyaWJlcjogU3Vic2NyaXB0aW9uO1xyXG4gICAgcm91dGVEYXRhOiBhbnk7XHJcbiAgICBsaW5rczogYW55O1xyXG4gICAgdG90YWxJdGVtczogYW55O1xyXG4gICAgcXVlcnlDb3VudDogYW55O1xyXG4gICAgaXRlbXNQZXJQYWdlOiBhbnk7XHJcbiAgICBwYWdlOiBhbnk7XHJcbiAgICBwcmVkaWNhdGU6IGFueTtcclxuICAgIHByZXZpb3VzUGFnZTogYW55O1xyXG4gICAgcmV2ZXJzZTogYW55O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgZW1wcmVzYVNlcnZpY2U6IEVtcHJlc2FTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgcGFyc2VMaW5rczogSmhpUGFyc2VMaW5rcyxcclxuICAgICAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogUG9ydGFsQWxlcnRTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgcHJpbmNpcGFsOiBQcmluY2lwYWwsXHJcbiAgICAgICAgcHJpdmF0ZSBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICAgICAgcHJpdmF0ZSBkYXRhVXRpbHM6IEpoaURhdGFVdGlscyxcclxuICAgICAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICAgICAgIHByaXZhdGUgZXZlbnRNYW5hZ2VyOiBKaGlFdmVudE1hbmFnZXJcclxuICAgICkge1xyXG4gICAgICAgIHRoaXMuaXRlbXNQZXJQYWdlID0gSVRFTVNfUEVSX1BBR0U7XHJcbiAgICAgICAgdGhpcy5yb3V0ZURhdGEgPSB0aGlzLmFjdGl2YXRlZFJvdXRlLmRhdGEuc3Vic2NyaWJlKGRhdGEgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnBhZ2UgPSBkYXRhLnBhZ2luZ1BhcmFtcy5wYWdlO1xyXG4gICAgICAgICAgICB0aGlzLnByZXZpb3VzUGFnZSA9IGRhdGEucGFnaW5nUGFyYW1zLnBhZ2U7XHJcbiAgICAgICAgICAgIHRoaXMucmV2ZXJzZSA9IGRhdGEucGFnaW5nUGFyYW1zLmFzY2VuZGluZztcclxuICAgICAgICAgICAgdGhpcy5wcmVkaWNhdGUgPSBkYXRhLnBhZ2luZ1BhcmFtcy5wcmVkaWNhdGU7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgbG9hZEFsbCgpIHtcclxuICAgICAgICB0aGlzLmVtcHJlc2FTZXJ2aWNlXHJcbiAgICAgICAgICAgIC5xdWVyeSh7XHJcbiAgICAgICAgICAgICAgICBwYWdlOiB0aGlzLnBhZ2UgLSAxLFxyXG4gICAgICAgICAgICAgICAgc2l6ZTogdGhpcy5pdGVtc1BlclBhZ2UsXHJcbiAgICAgICAgICAgICAgICBzb3J0OiB0aGlzLnNvcnQoKVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgICAgKHJlczogSHR0cFJlc3BvbnNlPElFbXByZXNhW10+KSA9PiB0aGlzLnBhZ2luYXRlRW1wcmVzYXMocmVzLmJvZHksIHJlcy5oZWFkZXJzKSxcclxuICAgICAgICAgICAgICAgIChyZXM6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB0aGlzLm9uRXJyb3IocmVzLm1lc3NhZ2UpXHJcbiAgICAgICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgbG9hZFBhZ2UocGFnZTogbnVtYmVyKSB7XHJcbiAgICAgICAgaWYgKHBhZ2UgIT09IHRoaXMucHJldmlvdXNQYWdlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJldmlvdXNQYWdlID0gcGFnZTtcclxuICAgICAgICAgICAgdGhpcy50cmFuc2l0aW9uKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRyYW5zaXRpb24oKSB7XHJcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvZW1wcmVzYSddLCB7XHJcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zOiB7XHJcbiAgICAgICAgICAgICAgICBwYWdlOiB0aGlzLnBhZ2UsXHJcbiAgICAgICAgICAgICAgICBzaXplOiB0aGlzLml0ZW1zUGVyUGFnZSxcclxuICAgICAgICAgICAgICAgIHNvcnQ6IHRoaXMucHJlZGljYXRlICsgJywnICsgKHRoaXMucmV2ZXJzZSA/ICdhc2MnIDogJ2Rlc2MnKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5sb2FkQWxsKCk7XHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXIoKSB7XHJcbiAgICAgICAgdGhpcy5wYWdlID0gMDtcclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXHJcbiAgICAgICAgICAgICcvZW1wcmVzYScsXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHBhZ2U6IHRoaXMucGFnZSxcclxuICAgICAgICAgICAgICAgIHNvcnQ6IHRoaXMucHJlZGljYXRlICsgJywnICsgKHRoaXMucmV2ZXJzZSA/ICdhc2MnIDogJ2Rlc2MnKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgXSk7XHJcbiAgICAgICAgdGhpcy5sb2FkQWxsKCk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5sb2FkQWxsKCk7XHJcbiAgICAgICAgdGhpcy5wcmluY2lwYWwuaWRlbnRpdHkoKS50aGVuKGFjY291bnQgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRBY2NvdW50ID0gYWNjb3VudDtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLnJlZ2lzdGVyQ2hhbmdlSW5FbXByZXNhcygpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25EZXN0cm95KCkge1xyXG4gICAgICAgIHRoaXMuZXZlbnRNYW5hZ2VyLmRlc3Ryb3kodGhpcy5ldmVudFN1YnNjcmliZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIHRyYWNrSWQoaW5kZXg6IG51bWJlciwgaXRlbTogSUVtcHJlc2EpIHtcclxuICAgICAgICByZXR1cm4gaXRlbS5pZDtcclxuICAgIH1cclxuXHJcbiAgICBieXRlU2l6ZShmaWVsZCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGFVdGlscy5ieXRlU2l6ZShmaWVsZCk7XHJcbiAgICB9XHJcblxyXG4gICAgb3BlbkZpbGUoY29udGVudFR5cGUsIGZpZWxkKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVV0aWxzLm9wZW5GaWxlKGNvbnRlbnRUeXBlLCBmaWVsZCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVnaXN0ZXJDaGFuZ2VJbkVtcHJlc2FzKCkge1xyXG4gICAgICAgIHRoaXMuZXZlbnRTdWJzY3JpYmVyID0gdGhpcy5ldmVudE1hbmFnZXIuc3Vic2NyaWJlKCdlbXByZXNhTGlzdE1vZGlmaWNhdGlvbicsIHJlc3BvbnNlID0+IHRoaXMubG9hZEFsbCgpKTtcclxuICAgIH1cclxuXHJcbiAgICBzb3J0KCkge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFt0aGlzLnByZWRpY2F0ZSArICcsJyArICh0aGlzLnJldmVyc2UgPyAnYXNjJyA6ICdkZXNjJyldO1xyXG4gICAgICAgIGlmICh0aGlzLnByZWRpY2F0ZSAhPT0gJ2lkJykge1xyXG4gICAgICAgICAgICByZXN1bHQucHVzaCgnaWQnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHBhZ2luYXRlRW1wcmVzYXMoZGF0YTogSUVtcHJlc2FbXSwgaGVhZGVyczogSHR0cEhlYWRlcnMpIHtcclxuICAgICAgICB0aGlzLmxpbmtzID0gdGhpcy5wYXJzZUxpbmtzLnBhcnNlKGhlYWRlcnMuZ2V0KCdsaW5rJykpO1xyXG4gICAgICAgIHRoaXMudG90YWxJdGVtcyA9IHBhcnNlSW50KGhlYWRlcnMuZ2V0KCdYLVRvdGFsLUNvdW50JyksIDEwKTtcclxuICAgICAgICB0aGlzLnF1ZXJ5Q291bnQgPSB0aGlzLnRvdGFsSXRlbXM7XHJcbiAgICAgICAgdGhpcy5lbXByZXNhcyA9IGRhdGE7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBvbkVycm9yKGVycm9yTWVzc2FnZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoZXJyb3JNZXNzYWdlLCBudWxsLCBudWxsKTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0h0dHBSZXNwb25zZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlU25hcHNob3QsIFJlc29sdmUsIFJvdXRlclN0YXRlU25hcHNob3QsIFJvdXRlc30gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHtKaGlSZXNvbHZlUGFnaW5nUGFyYW1zfSBmcm9tICduZy1qaGlwc3Rlcic7XHJcbmltcG9ydCB7T2JzZXJ2YWJsZSwgb2Z9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge2ZpbHRlciwgbWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7RW1wcmVzYVNlcnZpY2V9IGZyb20gJy4vZW1wcmVzYS5zZXJ2aWNlJztcclxuaW1wb3J0IHtFbXByZXNhQ29tcG9uZW50fSBmcm9tICcuL2VtcHJlc2EuY29tcG9uZW50JztcclxuaW1wb3J0IHtFbXByZXNhRGV0YWlsQ29tcG9uZW50fSBmcm9tICcuL2VtcHJlc2EtZGV0YWlsLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7RW1wcmVzYVVwZGF0ZUNvbXBvbmVudH0gZnJvbSAnLi9lbXByZXNhLXVwZGF0ZS5jb21wb25lbnQnO1xyXG5pbXBvcnQge0VtcHJlc2FEZWxldGVQb3B1cENvbXBvbmVudH0gZnJvbSAnLi9lbXByZXNhLWRlbGV0ZS1kaWFsb2cuY29tcG9uZW50JztcclxuaW1wb3J0IHtFbXByZXNhLCBJRW1wcmVzYX0gZnJvbSAnLi4vbW9kZWwvZW1wcmVzYS5tb2RlbCc7XHJcbmltcG9ydCB7VXNlclJvdXRlQWNjZXNzU2VydmljZX0gZnJvbSAnLi4vYXV0aC91c2VyLXJvdXRlLWFjY2Vzcy1zZXJ2aWNlJztcclxuXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXHJcbmV4cG9ydCBjbGFzcyBFbXByZXNhUmVzb2x2ZSBpbXBsZW1lbnRzIFJlc29sdmU8SUVtcHJlc2E+IHtcclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgc2VydmljZTogRW1wcmVzYVNlcnZpY2UpIHt9XHJcblxyXG4gICAgcmVzb2x2ZShyb3V0ZTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgc3RhdGU6IFJvdXRlclN0YXRlU25hcHNob3QpOiBPYnNlcnZhYmxlPEVtcHJlc2E+IHtcclxuICAgICAgICBjb25zdCBpZCA9IHJvdXRlLnBhcmFtc1snaWQnXSA/IHJvdXRlLnBhcmFtc1snaWQnXSA6IG51bGw7XHJcbiAgICAgICAgaWYgKGlkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2UuZmluZChpZCkucGlwZShcclxuICAgICAgICAgICAgICAgIGZpbHRlcigocmVzcG9uc2U6IEh0dHBSZXNwb25zZTxFbXByZXNhPikgPT4gcmVzcG9uc2Uub2spLFxyXG4gICAgICAgICAgICAgICAgbWFwKChlbXByZXNhOiBIdHRwUmVzcG9uc2U8RW1wcmVzYT4pID0+IGVtcHJlc2EuYm9keSlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG9mKG5ldyBFbXByZXNhKCkpO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgZW1wcmVzYVJvdXRlOiBSb3V0ZXMgPSBbXHJcbiAgICB7XHJcbiAgICAgICAgcGF0aDogJ2VtcHJlc2EnLFxyXG4gICAgICAgIGNvbXBvbmVudDogRW1wcmVzYUNvbXBvbmVudCxcclxuICAgICAgICByZXNvbHZlOiB7XHJcbiAgICAgICAgICAgIHBhZ2luZ1BhcmFtczogSmhpUmVzb2x2ZVBhZ2luZ1BhcmFtc1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICBhdXRob3JpdGllczogWydST0xFX1BPUlRBTCddLFxyXG4gICAgICAgICAgICBkZWZhdWx0U29ydDogJ2lkLGFzYycsXHJcbiAgICAgICAgICAgIHBhZ2VUaXRsZTogJ0VtcHJlc2EnXHJcbiAgICAgICAgfSxcclxuICAgICAgICBjYW5BY3RpdmF0ZTogW1VzZXJSb3V0ZUFjY2Vzc1NlcnZpY2VdXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIHBhdGg6ICdlbXByZXNhLzppZC92aWV3JyxcclxuICAgICAgICBjb21wb25lbnQ6IEVtcHJlc2FEZXRhaWxDb21wb25lbnQsXHJcbiAgICAgICAgcmVzb2x2ZToge1xyXG4gICAgICAgICAgICBlbXByZXNhOiBFbXByZXNhUmVzb2x2ZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICBhdXRob3JpdGllczogWydST0xFX1BPUlRBTCddLFxyXG4gICAgICAgICAgICBwYWdlVGl0bGU6ICdFbXByZXNhJ1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY2FuQWN0aXZhdGU6IFtVc2VyUm91dGVBY2Nlc3NTZXJ2aWNlXVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBwYXRoOiAnZW1wcmVzYS9uZXcnLFxyXG4gICAgICAgIGNvbXBvbmVudDogRW1wcmVzYVVwZGF0ZUNvbXBvbmVudCxcclxuICAgICAgICByZXNvbHZlOiB7XHJcbiAgICAgICAgICAgIGVtcHJlc2E6IEVtcHJlc2FSZXNvbHZlXHJcbiAgICAgICAgfSxcclxuICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgIGF1dGhvcml0aWVzOiBbJ1JPTEVfUE9SVEFMJ10sXHJcbiAgICAgICAgICAgIHBhZ2VUaXRsZTogJ0VtcHJlc2EnXHJcbiAgICAgICAgfSxcclxuICAgICAgICBjYW5BY3RpdmF0ZTogW1VzZXJSb3V0ZUFjY2Vzc1NlcnZpY2VdXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIHBhdGg6ICdlbXByZXNhLzppZC9lZGl0JyxcclxuICAgICAgICBjb21wb25lbnQ6IEVtcHJlc2FVcGRhdGVDb21wb25lbnQsXHJcbiAgICAgICAgcmVzb2x2ZToge1xyXG4gICAgICAgICAgICBlbXByZXNhOiBFbXByZXNhUmVzb2x2ZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICBhdXRob3JpdGllczogWydST0xFX1BPUlRBTCddLFxyXG4gICAgICAgICAgICBwYWdlVGl0bGU6ICdFbXByZXNhJ1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY2FuQWN0aXZhdGU6IFtVc2VyUm91dGVBY2Nlc3NTZXJ2aWNlXVxyXG4gICAgfVxyXG5dO1xyXG5cclxuZXhwb3J0IGNvbnN0IGVtcHJlc2FQb3B1cFJvdXRlOiBSb3V0ZXMgPSBbXHJcbiAgICB7XHJcbiAgICAgICAgcGF0aDogJ2VtcHJlc2EvOmlkL2RlbGV0ZScsXHJcbiAgICAgICAgY29tcG9uZW50OiBFbXByZXNhRGVsZXRlUG9wdXBDb21wb25lbnQsXHJcbiAgICAgICAgcmVzb2x2ZToge1xyXG4gICAgICAgICAgICBlbXByZXNhOiBFbXByZXNhUmVzb2x2ZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICBhdXRob3JpdGllczogWydST0xFX1BPUlRBTCddLFxyXG4gICAgICAgICAgICBwYWdlVGl0bGU6ICdFbXByZXNhJ1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY2FuQWN0aXZhdGU6IFtVc2VyUm91dGVBY2Nlc3NTZXJ2aWNlXSxcclxuICAgICAgICBvdXRsZXQ6ICdwb3B1cCdcclxuICAgIH1cclxuXTtcclxuIiwiaW1wb3J0IHtDVVNUT01fRUxFTUVOVFNfU0NIRU1BLCBOZ01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7Um91dGVyTW9kdWxlfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5cclxuaW1wb3J0IHtQb3J0YWxBbGVydE1vZHVsZX0gZnJvbSAnLi4vYWxlcnQvcG9ydGFsLWFsZXJ0Lm1vZHVsZSc7XHJcbmltcG9ydCB7Rm9udEF3ZXNvbWVNb2R1bGV9IGZyb20gJ0Bmb3J0YXdlc29tZS9hbmd1bGFyLWZvbnRhd2Vzb21lJztcclxuaW1wb3J0IHtOZ0poaXBzdGVyTW9kdWxlfSBmcm9tICduZy1qaGlwc3Rlcic7XHJcbmltcG9ydCB7Rm9ybXNNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7ZW1wcmVzYVBvcHVwUm91dGUsIGVtcHJlc2FSb3V0ZX0gZnJvbSAnLi9lbXByZXNhLnJvdXRlJztcclxuaW1wb3J0IHtFbXByZXNhQ29tcG9uZW50fSBmcm9tICcuL2VtcHJlc2EuY29tcG9uZW50JztcclxuaW1wb3J0IHtFbXByZXNhRGV0YWlsQ29tcG9uZW50fSBmcm9tICcuL2VtcHJlc2EtZGV0YWlsLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7RW1wcmVzYVVwZGF0ZUNvbXBvbmVudH0gZnJvbSAnLi9lbXByZXNhLXVwZGF0ZS5jb21wb25lbnQnO1xyXG5pbXBvcnQge0VtcHJlc2FEZWxldGVEaWFsb2dDb21wb25lbnQsIEVtcHJlc2FEZWxldGVQb3B1cENvbXBvbmVudH0gZnJvbSAnLi9lbXByZXNhLWRlbGV0ZS1kaWFsb2cuY29tcG9uZW50JztcclxuXHJcbmNvbnN0IEVOVElUWV9TVEFURVMgPSBbLi4uZW1wcmVzYVJvdXRlLCAuLi5lbXByZXNhUG9wdXBSb3V0ZV07XHJcblxyXG5ATmdNb2R1bGUoe1xyXG4gICAgaW1wb3J0czogW1xyXG4gICAgICBDb21tb25Nb2R1bGUsXHJcbiAgICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgICBOZ0poaXBzdGVyTW9kdWxlLFxyXG4gICAgICBGb250QXdlc29tZU1vZHVsZSxcclxuICAgICAgUG9ydGFsQWxlcnRNb2R1bGUsXHJcbiAgICAgIFJvdXRlck1vZHVsZS5mb3JDaGlsZChFTlRJVFlfU1RBVEVTKVxyXG4gICAgXSxcclxuICAgIGRlY2xhcmF0aW9uczogW1xyXG4gICAgICAgIEVtcHJlc2FDb21wb25lbnQsXHJcbiAgICAgICAgRW1wcmVzYURldGFpbENvbXBvbmVudCxcclxuICAgICAgICBFbXByZXNhVXBkYXRlQ29tcG9uZW50LFxyXG4gICAgICAgIEVtcHJlc2FEZWxldGVEaWFsb2dDb21wb25lbnQsXHJcbiAgICAgICAgRW1wcmVzYURlbGV0ZVBvcHVwQ29tcG9uZW50XHJcbiAgICBdLFxyXG4gICAgZW50cnlDb21wb25lbnRzOiBbXHJcbiAgICAgIEVtcHJlc2FDb21wb25lbnQsXHJcbiAgICAgIEVtcHJlc2FVcGRhdGVDb21wb25lbnQsXHJcbiAgICAgIEVtcHJlc2FEZWxldGVEaWFsb2dDb21wb25lbnQsXHJcbiAgICAgIEVtcHJlc2FEZWxldGVQb3B1cENvbXBvbmVudFxyXG4gICAgXSxcclxuICAgIHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRW1wcmVzYU1vZHVsZSB7fVxyXG4iLCJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge05nYlBhZ2luYXRpb25Db25maWd9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHtJVEVNU19QRVJfUEFHRX0gZnJvbSAnLi4vdXRpbC9wYWdpbmF0aW9uLmNvbnN0YW50cyc7XHJcblxyXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxyXG5leHBvcnQgY2xhc3MgUGFnaW5hdGlvbkNvbmZpZyB7XHJcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLXVudXNlZC12YXJpYWJsZVxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBjb25maWc6IE5nYlBhZ2luYXRpb25Db25maWcpIHtcclxuICAgICAgICBjb25maWcuYm91bmRhcnlMaW5rcyA9IHRydWU7XHJcbiAgICAgICAgY29uZmlnLm1heFNpemUgPSA1O1xyXG4gICAgICAgIGNvbmZpZy5wYWdlU2l6ZSA9IElURU1TX1BFUl9QQUdFO1xyXG4gICAgICAgIGNvbmZpZy5zaXplID0gJ3NtJztcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge2VuYWJsZVByb2RNb2RlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBQcm9kQ29uZmlnKGRlYnVnOiBib29sZWFuKSB7XHJcbiAgICBpZiAoIWRlYnVnKSB7XHJcbiAgICAgICAgZW5hYmxlUHJvZE1vZGUoKTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge0NvbXBvbmVudH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7TmdiQWN0aXZlTW9kYWx9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHtKaGlFdmVudE1hbmFnZXJ9IGZyb20gJ25nLWpoaXBzdGVyJztcclxuaW1wb3J0IHtVc2VyfSBmcm9tICcuLi9tb2RlbC91c2VyLm1vZGVsJztcclxuaW1wb3J0IHtVc2VyU2VydmljZX0gZnJvbSAnLi91c2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQge0VSUl9VTkFVVEhPUklaRURfRURJVF9ERUxFVElPTn0gZnJvbSBcIi4uL3V0aWxcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdqaGktdXNlci1tZ210LWRlbGV0ZS1kaWFsb2cnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL3VzZXItbWFuYWdlbWVudC1kZWxldGUtZGlhbG9nLmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgVXNlck1nbXREZWxldGVEaWFsb2dDb21wb25lbnQge1xyXG4gICAgdXNlcjogVXNlcjtcclxuICAgIGVycm9yOiBzdHJpbmc7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgIHByaXZhdGUgdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlLFxyXG4gICAgICBwdWJsaWMgYWN0aXZlTW9kYWw6IE5nYkFjdGl2ZU1vZGFsLFxyXG4gICAgICBwcml2YXRlIGV2ZW50TWFuYWdlcjogSmhpRXZlbnRNYW5hZ2VyXHJcbiAgICApIHt9XHJcblxyXG4gICAgY2xlYXIoKSB7XHJcbiAgICAgICAgdGhpcy5hY3RpdmVNb2RhbC5kaXNtaXNzKCdjYW5jZWwnKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25maXJtRGVsZXRlKGxvZ2luKSB7XHJcbiAgICAgICAgdGhpcy51c2VyU2VydmljZS5kZWxldGUobG9naW4pLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5ldmVudE1hbmFnZXIuYnJvYWRjYXN0KHtcclxuICAgICAgICAgICAgICAgICAgbmFtZTogJ3VzZXJMaXN0TW9kaWZpY2F0aW9uJyxcclxuICAgICAgICAgICAgICAgICAgY29udGVudDogJ0RlbGV0ZWQgYSB1c2VyJ1xyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIHRoaXMuYWN0aXZlTW9kYWwuZGlzbWlzcyh0cnVlKTtcclxuICAgICAgICAgICAgICB0aGlzLmVycm9yID0gbnVsbDtcclxuICAgICAgICB9LHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MDAgJiYgcmVzcG9uc2UuZXJyb3IudHlwZSA9PT0gRVJSX1VOQVVUSE9SSVpFRF9FRElUX0RFTEVUSU9OKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSAnRVJST1InO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge0NvbXBvbmVudCwgT25Jbml0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHtVc2VyfSBmcm9tICcuLi9tb2RlbC91c2VyLm1vZGVsJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdqaGktdXNlci1tZ210LWRldGFpbCcsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vdXNlci1tYW5hZ2VtZW50LWRldGFpbC5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFVzZXJNZ210RGV0YWlsQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICAgIHVzZXI6IFVzZXI7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUpIHt9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5yb3V0ZS5kYXRhLnN1YnNjcmliZSgoeyB1c2VyIH0pID0+IHtcclxuICAgICAgICAgICAgdGhpcy51c2VyID0gdXNlci5ib2R5ID8gdXNlci5ib2R5IDogdXNlcjtcclxuXHJcbiAgICAgICAgICAgIGlmKEFycmF5LmlzQXJyYXkodGhpcy51c2VyKSkge1xyXG4gICAgICAgICAgICAgIHRoaXMudXNlciA9IHRoaXMudXNlclswXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7Q29tcG9uZW50LCBPbkluaXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlLCBSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7VXNlcn0gZnJvbSAnLi4vbW9kZWwvdXNlci5tb2RlbCc7XHJcbmltcG9ydCB7VXNlclNlcnZpY2V9IGZyb20gJy4vdXNlci5zZXJ2aWNlJztcclxuaW1wb3J0IHtKaGlMYW5ndWFnZUhlbHBlcn0gZnJvbSAnLi4vbGFuZ3VhZ2UvbGFuZ3VhZ2UuaGVscGVyJztcclxuaW1wb3J0IHtFUlJfVU5BVVRIT1JJWkVEX0VESVRfREVMRVRJT059IGZyb20gXCIuLi91dGlsXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnamhpLXVzZXItbWdtdC11cGRhdGUnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL3VzZXItbWFuYWdlbWVudC11cGRhdGUuY29tcG9uZW50Lmh0bWwnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBVc2VyTWdtdFVwZGF0ZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgICB1c2VyOiBVc2VyO1xyXG4gICAgbGFuZ3VhZ2VzOiBhbnlbXTtcclxuICAgIGF1dGhvcml0aWVzOiBhbnlbXTtcclxuICAgIGlzU2F2aW5nOiBib29sZWFuO1xyXG4gICAgZXJyb3I6IHN0cmluZztcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIGxhbmd1YWdlSGVscGVyOiBKaGlMYW5ndWFnZUhlbHBlcixcclxuICAgICAgICBwcml2YXRlIHVzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgICAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyXHJcbiAgICApIHt9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5pc1NhdmluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMucm91dGUuZGF0YS5zdWJzY3JpYmUoKHsgdXNlciB9KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMudXNlciA9IHVzZXIuYm9keSA/IHVzZXIuYm9keSA6IHVzZXI7XHJcblxyXG4gICAgICAgICAgICBpZihBcnJheS5pc0FycmF5KHRoaXMudXNlcikpIHtcclxuICAgICAgICAgICAgICB0aGlzLnVzZXIgPSB0aGlzLnVzZXJbMF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmF1dGhvcml0aWVzID0gW107XHJcbiAgICAgICAgdGhpcy51c2VyU2VydmljZS5hdXRob3JpdGllcygpLnN1YnNjcmliZShhdXRob3JpdGllcyA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuYXV0aG9yaXRpZXMgPSBhdXRob3JpdGllcztcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmxhbmd1YWdlSGVscGVyLmdldEFsbCgpLnRoZW4obGFuZ3VhZ2VzID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sYW5ndWFnZXMgPSBsYW5ndWFnZXM7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJldmlvdXNTdGF0ZSgpIHtcclxuICAgICAgICB3aW5kb3cuaGlzdG9yeS5iYWNrKCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2F2ZSgpIHtcclxuICAgICAgICB0aGlzLmlzU2F2aW5nID0gdHJ1ZTtcclxuICAgICAgICBpZiAodGhpcy51c2VyLmlkICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMudXNlclNlcnZpY2UudXBkYXRlKHRoaXMudXNlcikuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHRoaXMub25TYXZlU3VjY2VzcyhyZXNwb25zZSksIHJlc3BvbnNlID0+IHRoaXMub25TYXZlRXJyb3IocmVzcG9uc2UpKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlLmNyZWF0ZSh0aGlzLnVzZXIpLnN1YnNjcmliZShyZXNwb25zZSA9PiB0aGlzLm9uU2F2ZVN1Y2Nlc3MocmVzcG9uc2UpLCByZXNwb25zZSA9PiB0aGlzLm9uU2F2ZUVycm9yKHJlc3BvbnNlKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgb25TYXZlU3VjY2VzcyhyZXN1bHQpIHtcclxuICAgICAgICB0aGlzLmlzU2F2aW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5wcmV2aW91c1N0YXRlKCk7XHJcbiAgICAgICAgdGhpcy5lcnJvciA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBvblNhdmVFcnJvcihyZXNwb25zZSkge1xyXG4gICAgICAgIHRoaXMuaXNTYXZpbmcgPSBmYWxzZTtcclxuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MDAgJiYgcmVzcG9uc2UuZXJyb3IudHlwZSA9PT0gRVJSX1VOQVVUSE9SSVpFRF9FRElUX0RFTEVUSU9OKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3IgPSAnRVJST1InO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge0NvbXBvbmVudCwgT25EZXN0cm95LCBPbkluaXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0h0dHBSZXNwb25zZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQge05nYk1vZGFsfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcblxyXG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlLCBSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7SmhpRXZlbnRNYW5hZ2VyLCBKaGlQYXJzZUxpbmtzfSBmcm9tICduZy1qaGlwc3Rlcic7XHJcblxyXG5pbXBvcnQge1VzZXJNZ210RGVsZXRlRGlhbG9nQ29tcG9uZW50fSBmcm9tICcuL3VzZXItbWFuYWdlbWVudC1kZWxldGUtZGlhbG9nLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7VXNlcn0gZnJvbSAnLi4vbW9kZWwvdXNlci5tb2RlbCc7XHJcbmltcG9ydCB7UG9ydGFsQWxlcnRTZXJ2aWNlfSBmcm9tICcuLi9hbGVydC9wb3J0YWwtYWxlcnQuc2VydmljZSc7XHJcbmltcG9ydCB7UHJpbmNpcGFsfSBmcm9tICcuLi9hdXRoL3ByaW5jaXBhbC5zZXJ2aWNlJztcclxuaW1wb3J0IHtVc2VyU2VydmljZX0gZnJvbSAnLi91c2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQge0lURU1TX1BFUl9QQUdFfSBmcm9tICcuLi91dGlsL3BhZ2luYXRpb24uY29uc3RhbnRzJztcclxuaW1wb3J0IHtVdGlsRnVuY3Rpb25zfSBmcm9tICcuLi91dGlsJztcclxuaW1wb3J0IHtHbG9iYWxTZXJ2aWNlfSBmcm9tICcuLi9jb21wb25lbnRzL3BhcmFtZXRyb3MvZ2xvYmFsLnNlcnZpY2UnO1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnamhpLXVzZXItbWdtdCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3VzZXItbWFuYWdlbWVudC5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFVzZXJNZ210Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIGN1cnJlbnRBY2NvdW50OiBhbnk7XHJcbiAgdXNlcnM6IFVzZXJbXTtcclxuICBlcnJvcjogYW55O1xyXG4gIHN1Y2Nlc3M6IGFueTtcclxuICByb3V0ZURhdGE6IGFueTtcclxuICBsaW5rczogYW55O1xyXG4gIHRvdGFsSXRlbXM6IGFueTtcclxuICBxdWVyeUNvdW50OiBhbnk7XHJcbiAgaXRlbXNQZXJQYWdlOiBhbnk7XHJcbiAgcGFnZTogYW55O1xyXG4gIHByZWRpY2F0ZTogYW55O1xyXG4gIHByZXZpb3VzUGFnZTogYW55O1xyXG4gIHJldmVyc2U6IGFueTtcclxuICBmaWx0ZXJVc2Vyczogc3RyaW5nO1xyXG4gIHNob3dGaWx0ZXJVc2VyID0gZmFsc2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSB1c2VyU2VydmljZTogVXNlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogUG9ydGFsQWxlcnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBwcmluY2lwYWw6IFByaW5jaXBhbCxcclxuICAgIHByaXZhdGUgcGFyc2VMaW5rczogSmhpUGFyc2VMaW5rcyxcclxuICAgIHByaXZhdGUgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgIHByaXZhdGUgZ2xvYmFsOiBHbG9iYWxTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBldmVudE1hbmFnZXI6IEpoaUV2ZW50TWFuYWdlcixcclxuICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBOZ2JNb2RhbFxyXG4gICkge1xyXG4gICAgdGhpcy5pdGVtc1BlclBhZ2UgPSBJVEVNU19QRVJfUEFHRTtcclxuICAgIHRoaXMucm91dGVEYXRhID0gdGhpcy5hY3RpdmF0ZWRSb3V0ZS5kYXRhLnN1YnNjcmliZShkYXRhID0+IHtcclxuICAgICAgdGhpcy5wYWdlID0gZGF0YVsncGFnaW5nUGFyYW1zJ10ucGFnZTtcclxuICAgICAgdGhpcy5wcmV2aW91c1BhZ2UgPSBkYXRhWydwYWdpbmdQYXJhbXMnXS5wYWdlO1xyXG4gICAgICB0aGlzLnJldmVyc2UgPSBkYXRhWydwYWdpbmdQYXJhbXMnXS5hc2NlbmRpbmc7XHJcbiAgICAgIHRoaXMucHJlZGljYXRlID0gZGF0YVsncGFnaW5nUGFyYW1zJ10ucHJlZGljYXRlO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMucHJpbmNpcGFsLmlkZW50aXR5KCkudGhlbihhY2NvdW50ID0+IHtcclxuICAgICAgdGhpcy5jdXJyZW50QWNjb3VudCA9IGFjY291bnQ7XHJcbiAgICAgIHRoaXMubG9hZEFsbCgpO1xyXG4gICAgICB0aGlzLnJlZ2lzdGVyQ2hhbmdlSW5Vc2VycygpO1xyXG4gICAgICBpZiAodGhpcy5nbG9iYWwucGFyYW1ldHJvcyA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgdGhpcy5nbG9iYWxcclxuICAgICAgICAgIC5pbml0KClcclxuICAgICAgICAgIC50aGVuKHZhbHVlID0+IHtcclxuICAgICAgICAgICAgaWYgKFV0aWxGdW5jdGlvbnMuaXNWYWxpZE9iamVjdCh0aGlzLmdsb2JhbC5wYXJhbWV0cm9zWydNT1NUUkFSX0ZJTFRST19VU1VBUklPUyddKSA9PSB0cnVlKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zaG93RmlsdGVyVXNlciA9IHRoaXMuZ2xvYmFsLnBhcmFtZXRyb3NbJ01PU1RSQVJfRklMVFJPX1VTVUFSSU9TJ10udmFsb3I7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICAuY2F0Y2godmFsdWUgPT4ge1xyXG5cclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmIChVdGlsRnVuY3Rpb25zLmlzVmFsaWRPYmplY3QodGhpcy5nbG9iYWwucGFyYW1ldHJvc1snTU9TVFJBUl9GSUxUUk9fVVNVQVJJT1MnXSkgPT0gdHJ1ZSkge1xyXG4gICAgICAgICAgdGhpcy5zaG93RmlsdGVyVXNlciA9IHRoaXMuZ2xvYmFsLnBhcmFtZXRyb3NbJ01PU1RSQVJfRklMVFJPX1VTVUFSSU9TJ10udmFsb3I7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMucm91dGVEYXRhLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICByZWdpc3RlckNoYW5nZUluVXNlcnMoKSB7XHJcbiAgICB0aGlzLmV2ZW50TWFuYWdlci5zdWJzY3JpYmUoJ3VzZXJMaXN0TW9kaWZpY2F0aW9uJywgcmVzcG9uc2UgPT4gdGhpcy5sb2FkQWxsKCkpO1xyXG4gIH1cclxuXHJcbiAgc2V0QWN0aXZlKHVzZXIsIGlzQWN0aXZhdGVkKSB7XHJcbiAgICB1c2VyLmFjdGl2YXRlZCA9IGlzQWN0aXZhdGVkO1xyXG5cclxuICAgIHRoaXMudXNlclNlcnZpY2UudXBkYXRlKHVzZXIpLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XHJcbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDIwMCkge1xyXG4gICAgICAgIHRoaXMuZXJyb3IgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuc3VjY2VzcyA9ICdPSyc7XHJcbiAgICAgICAgdGhpcy5sb2FkQWxsKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zdWNjZXNzID0gbnVsbDtcclxuICAgICAgICB0aGlzLmVycm9yID0gJ0VSUk9SJztcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBsb2FkQWxsKHBhZ2U/OiBudW1iZXIpIHtcclxuICAgIGlmIChVdGlsRnVuY3Rpb25zLmlzVmFsaWRPYmplY3QocGFnZSkgPT09IHRydWUgJiYgcGFnZSA+IDApIHtcclxuICAgICAgdGhpcy5wYWdlID0gcGFnZTtcclxuICAgICAgdGhpcy5wcmV2aW91c1BhZ2UgPSBwYWdlO1xyXG4gICAgfVxyXG4gICAgdGhpcy51c2VyU2VydmljZVxyXG4gICAgICAucXVlcnkoe1xyXG4gICAgICAgIHBhZ2U6IHRoaXMucGFnZSAtIDEsXHJcbiAgICAgICAgc2l6ZTogdGhpcy5pdGVtc1BlclBhZ2UsXHJcbiAgICAgICAgc29ydDogdGhpcy5zb3J0KClcclxuICAgICAgfSwgdGhpcy5maWx0ZXJVc2VycylcclxuICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAocmVzOiBIdHRwUmVzcG9uc2U8VXNlcltdPikgPT4gdGhpcy5vblN1Y2Nlc3MocmVzLmJvZHksIHJlcy5oZWFkZXJzKSxcclxuICAgICAgICAocmVzOiBIdHRwUmVzcG9uc2U8YW55PikgPT4gdGhpcy5vbkVycm9yKHJlcy5ib2R5KVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgdHJhY2tJZGVudGl0eShpbmRleCwgaXRlbTogVXNlcikge1xyXG4gICAgcmV0dXJuIGl0ZW0uaWQ7XHJcbiAgfVxyXG5cclxuICBzb3J0KCkge1xyXG4gICAgY29uc3QgcmVzdWx0ID0gW3RoaXMucHJlZGljYXRlICsgJywnICsgKHRoaXMucmV2ZXJzZSA/ICdhc2MnIDogJ2Rlc2MnKV07XHJcbiAgICBpZiAodGhpcy5wcmVkaWNhdGUgIT09ICdpZCcpIHtcclxuICAgICAgcmVzdWx0LnB1c2goJ2lkJyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgbG9hZFBhZ2UocGFnZTogbnVtYmVyKSB7XHJcbiAgICBpZiAocGFnZSAhPT0gdGhpcy5wcmV2aW91c1BhZ2UpIHtcclxuICAgICAgdGhpcy5wcmV2aW91c1BhZ2UgPSBwYWdlO1xyXG4gICAgICB0aGlzLnRyYW5zaXRpb24oKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHRyYW5zaXRpb24oKSB7XHJcbiAgICAvKlxyXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvYWRtaW4vdXNlci1tYW5hZ2VtZW50J10sIHtcclxuICAgICAgcXVlcnlQYXJhbXM6IHtcclxuICAgICAgICBwYWdlOiB0aGlzLnBhZ2UsXHJcbiAgICAgICAgc2l6ZTogdGhpcy5pdGVtc1BlclBhZ2UsXHJcbiAgICAgICAgc29ydDogdGhpcy5wcmVkaWNhdGUgKyAnLCcgKyAodGhpcy5yZXZlcnNlID8gJ2FzYycgOiAnZGVzYycpXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgKi9cclxuICAgIHRoaXMubG9hZEFsbCgpO1xyXG4gIH1cclxuXHJcbiAgZGVsZXRlVXNlcih1c2VyOiBVc2VyKSB7XHJcbiAgICBjb25zdCBtb2RhbFJlZiA9IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oVXNlck1nbXREZWxldGVEaWFsb2dDb21wb25lbnQsIHtzaXplOiAnbGcnLCBiYWNrZHJvcDogJ3N0YXRpYyd9KTtcclxuICAgIG1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLnVzZXIgPSB1c2VyO1xyXG4gICAgbW9kYWxSZWYucmVzdWx0LnRoZW4oXHJcbiAgICAgIHJlc3VsdCA9PiB7XHJcbiAgICAgICAgLy8gTGVmdCBibGFuayBpbnRlbnRpb25hbGx5LCBub3RoaW5nIHRvIGRvIGhlcmVcclxuICAgICAgfSxcclxuICAgICAgcmVhc29uID0+IHtcclxuICAgICAgICAvLyBMZWZ0IGJsYW5rIGludGVudGlvbmFsbHksIG5vdGhpbmcgdG8gZG8gaGVyZVxyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvblN1Y2Nlc3MoZGF0YSwgaGVhZGVycykge1xyXG4gICAgdGhpcy5saW5rcyA9IHRoaXMucGFyc2VMaW5rcy5wYXJzZShoZWFkZXJzLmdldCgnbGluaycpKTtcclxuICAgIHRoaXMudG90YWxJdGVtcyA9IHBhcnNlSW50KGhlYWRlcnMuZ2V0KCdYLVRvdGFsLUNvdW50JyksIDEwKTtcclxuICAgIHRoaXMucXVlcnlDb3VudCA9IHRoaXMudG90YWxJdGVtcztcclxuICAgIHRoaXMudXNlcnMgPSBkYXRhO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvbkVycm9yKGVycm9yKSB7XHJcbiAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihlcnJvci5lcnJvciwgZXJyb3IubWVzc2FnZSwgbnVsbCk7XHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7QWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgUmVzb2x2ZSwgUm91dGVyU3RhdGVTbmFwc2hvdCwgUm91dGVzfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQge0poaVJlc29sdmVQYWdpbmdQYXJhbXN9IGZyb20gJ25nLWpoaXBzdGVyJztcclxuaW1wb3J0IHtVc2VyTWdtdENvbXBvbmVudH0gZnJvbSAnLi91c2VyLW1hbmFnZW1lbnQuY29tcG9uZW50JztcclxuaW1wb3J0IHtVc2VyTWdtdERldGFpbENvbXBvbmVudH0gZnJvbSAnLi91c2VyLW1hbmFnZW1lbnQtZGV0YWlsLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7VXNlck1nbXRVcGRhdGVDb21wb25lbnR9IGZyb20gJy4vdXNlci1tYW5hZ2VtZW50LXVwZGF0ZS5jb21wb25lbnQnO1xyXG5pbXBvcnQge1VzZXJSb3V0ZUFjY2Vzc1NlcnZpY2V9IGZyb20gJy4uL2F1dGgvdXNlci1yb3V0ZS1hY2Nlc3Mtc2VydmljZSc7XHJcbmltcG9ydCB7VXNlclNlcnZpY2V9IGZyb20gJy4vdXNlci5zZXJ2aWNlJztcclxuaW1wb3J0IHtVc2VyfSBmcm9tICcuLi9tb2RlbC91c2VyLm1vZGVsJztcclxuXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXHJcbmV4cG9ydCBjbGFzcyBVc2VyTWdtdFJlc29sdmUgaW1wbGVtZW50cyBSZXNvbHZlPGFueT4ge1xyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBzZXJ2aWNlOiBVc2VyU2VydmljZSkge31cclxuXHJcbiAgICByZXNvbHZlKHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBzdGF0ZTogUm91dGVyU3RhdGVTbmFwc2hvdCkge1xyXG4gICAgICAgIGNvbnN0IGlkID0gcm91dGUucGFyYW1zWydsb2dpbiddID8gcm91dGUucGFyYW1zWydsb2dpbiddIDogbnVsbDtcclxuICAgICAgICBpZiAoaWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2VydmljZS5maW5kKGlkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5ldyBVc2VyKCk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCB1c2VyTWdtdFJvdXRlOiBSb3V0ZXMgPSBbXHJcbiAgICB7XHJcbiAgICAgICAgcGF0aDogJ3VzZXItbWFuYWdlbWVudCcsXHJcbiAgICAgICAgY29tcG9uZW50OiBVc2VyTWdtdENvbXBvbmVudCxcclxuICAgICAgICByZXNvbHZlOiB7XHJcbiAgICAgICAgICAgIHBhZ2luZ1BhcmFtczogSmhpUmVzb2x2ZVBhZ2luZ1BhcmFtc1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICBwYWdlVGl0bGU6ICdVc3XDg8KhcmlvcycsXHJcbiAgICAgICAgICAgIGF1dGhvcml0aWVzOiBbJ1JPTEVfQURNSU4nLCAnUk9MRV9BRE1JTl9DTElFTlRFJ10sXHJcbiAgICAgICAgICAgIGRlZmF1bHRTb3J0OiAnaWQsYXNjJ1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY2FuQWN0aXZhdGU6IFtVc2VyUm91dGVBY2Nlc3NTZXJ2aWNlXVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBwYXRoOiAndXNlci1tYW5hZ2VtZW50Lzpsb2dpbi92aWV3JyxcclxuICAgICAgICBjb21wb25lbnQ6IFVzZXJNZ210RGV0YWlsQ29tcG9uZW50LFxyXG4gICAgICAgIHJlc29sdmU6IHtcclxuICAgICAgICAgICAgdXNlcjogVXNlck1nbXRSZXNvbHZlXHJcbiAgICAgICAgfSxcclxuICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgIGF1dGhvcml0aWVzOiBbJ1JPTEVfQURNSU4nLCAnUk9MRV9BRE1JTl9DTElFTlRFJ10sXHJcbiAgICAgICAgICAgIHBhZ2VUaXRsZTogJ1VzdcODwqFyaW9zJ1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY2FuQWN0aXZhdGU6IFtVc2VyUm91dGVBY2Nlc3NTZXJ2aWNlXVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBwYXRoOiAndXNlci1tYW5hZ2VtZW50L25ldycsXHJcbiAgICAgICAgY29tcG9uZW50OiBVc2VyTWdtdFVwZGF0ZUNvbXBvbmVudCxcclxuICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgIGF1dGhvcml0aWVzOiBbJ1JPTEVfQURNSU4nLCAnUk9MRV9BRE1JTl9DTElFTlRFJ11cclxuICAgICAgICB9LFxyXG4gICAgICAgIHJlc29sdmU6IHtcclxuICAgICAgICAgICAgdXNlcjogVXNlck1nbXRSZXNvbHZlXHJcbiAgICAgICAgfSxcclxuICAgICAgICBjYW5BY3RpdmF0ZTogW1VzZXJSb3V0ZUFjY2Vzc1NlcnZpY2VdXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIHBhdGg6ICd1c2VyLW1hbmFnZW1lbnQvOmxvZ2luL2VkaXQnLFxyXG4gICAgICAgIGNvbXBvbmVudDogVXNlck1nbXRVcGRhdGVDb21wb25lbnQsXHJcbiAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICBhdXRob3JpdGllczogWydST0xFX0FETUlOJywgJ1JPTEVfQURNSU5fQ0xJRU5URSddXHJcbiAgICAgICAgfSxcclxuICAgICAgICByZXNvbHZlOiB7XHJcbiAgICAgICAgICAgIHVzZXI6IFVzZXJNZ210UmVzb2x2ZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY2FuQWN0aXZhdGU6IFtVc2VyUm91dGVBY2Nlc3NTZXJ2aWNlXVxyXG4gICAgfVxyXG5dO1xyXG4iLCJpbXBvcnQge1BpcGUsIFBpcGVUcmFuc2Zvcm19IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0VuZGVyZWNvfSBmcm9tICcuLi9tb2RlbC9lbmRlcmVjby5tb2RlbCc7XHJcbmltcG9ydCB7VGlwb0VuZGVyZWNvfSBmcm9tICcuLi9tb2RlbCc7XHJcblxyXG5AUGlwZSh7IG5hbWU6ICdlbmRlcmVjb1ByaW5jaXBhbEZvcm1hdGFkbycgfSlcclxuZXhwb3J0IGNsYXNzIEVuZGVyZWNvUHJpbmNpcGFsRm9ybWF0YWRvUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xyXG5cclxuICAgIHRyYW5zZm9ybShlbmRlcmVjb3M6IEVuZGVyZWNvW10pOiBzdHJpbmcge1xyXG4gICAgICAgIGlmICghZW5kZXJlY29zKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnJztcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcHJpbmNpcGFsID0gZW5kZXJlY29zXHJcbiAgICAgICAgICAgIC5maWx0ZXIoZSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZS50aXBvID09PSBUaXBvRW5kZXJlY28uUFJJTkNJUEFMO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAucG9wKCk7XHJcblxyXG4gICAgICAgIGlmICghcHJpbmNpcGFsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnJztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHRpcG9Mb2dyYWRvdXJvID0gcHJpbmNpcGFsLnRpcG9Mb2dyYWRvdXJvICYmIHByaW5jaXBhbC50aXBvTG9ncmFkb3Vyby5kZXNjcmljYW8gPyBwcmluY2lwYWwudGlwb0xvZ3JhZG91cm8uZGVzY3JpY2FvICsgJyAnIDogJyc7XHJcbiAgICAgICAgY29uc3QgdGl0dWxvTG9ncmFkb3VybyA9IHByaW5jaXBhbC50aXR1bG9Mb2dyYWRvdXJvICYmIHByaW5jaXBhbC50aXR1bG9Mb2dyYWRvdXJvLnNpZ2xhID8gcHJpbmNpcGFsLnRpdHVsb0xvZ3JhZG91cm8uc2lnbGEgKyAnICcgOiAnJztcclxuICAgICAgICBjb25zdCBsb2dyYWRvdXJvID0gcHJpbmNpcGFsLmxvZ3JhZG91cm8gPyBwcmluY2lwYWwubG9ncmFkb3VybyArICcsICcgOiAnJztcclxuICAgICAgICBjb25zdCBudW1lcm8gPSBwcmluY2lwYWwubnVtZXJvID8gcHJpbmNpcGFsLm51bWVybyArICcsICcgOiAnJztcclxuICAgICAgICBjb25zdCBjb21wbGVtZW50byA9IHByaW5jaXBhbC5jb21wbGVtZW50byA/IHByaW5jaXBhbC5jb21wbGVtZW50byArICcsICcgOiAnJztcclxuICAgICAgICBjb25zdCBiYWlycm8gPSBwcmluY2lwYWwuYmFpcnJvID8gcHJpbmNpcGFsLmJhaXJybyArICcsICcgOiAnJztcclxuICAgICAgICBjb25zdCBtdW5pY2lwaW8gPSBwcmluY2lwYWwubXVuaWNpcGlvICYmIHByaW5jaXBhbC5tdW5pY2lwaW8uZGVzY3JpY2FvID8gcHJpbmNpcGFsLm11bmljaXBpby5kZXNjcmljYW8gKyAnLScgOiAnJztcclxuICAgICAgICBjb25zdCBlc3RhZG8gPSBwcmluY2lwYWwubXVuaWNpcGlvICYmIHByaW5jaXBhbC5tdW5pY2lwaW8uZXN0YWRvID8gcHJpbmNpcGFsLm11bmljaXBpby5lc3RhZG8gOiAnJztcclxuICAgICAgICBjb25zdCBlbmRlcmVjbyA9IHRpcG9Mb2dyYWRvdXJvICsgdGl0dWxvTG9ncmFkb3VybyArIGxvZ3JhZG91cm8gKyBudW1lcm8gKyBjb21wbGVtZW50byArIGJhaXJybyArIG11bmljaXBpbyArIGVzdGFkbztcclxuXHJcbiAgICAgICAgcmV0dXJuIGVuZGVyZWNvXHJcbiAgICAgICAgICAgIC50cmltKClcclxuICAgICAgICAgICAgLnJlcGxhY2UoLygsJCkvZywgJycpXHJcbiAgICAgICAgICAgIC5yZXBsYWNlKC8oLSQpL2csICcnKTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge1xyXG4gIEVudW1QaXBlVHlwZSxcclxuICBTZXhvLFxyXG4gIFNpdHVhY2FvQ29udHJpYnVpbnRlLFxyXG4gIFNpdHVhY2FvRGl2aWRhRGViaXRvLFxyXG4gIFNpdHVhY2FvUGFnYW1lbnRvRGViaXRvLFxyXG4gIFNpdHVhY2FvUGFnYW1lbnRvUGFyY2VsYSxcclxuICBUaXBvRW5kZXJlY28sXHJcbiAgVGlwb0ltb3ZlbCxcclxuICBUaXBvUGVzc29hLFxyXG4gIFRpcG9SZXNwb25zYXZlbFxyXG59IGZyb20gJy4uL21vZGVsJztcclxuaW1wb3J0IHtQaXBlLCBQaXBlVHJhbnNmb3JtfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbkBQaXBlKHtuYW1lOiAnZW51bVRvU3RyaW5nJ30pXHJcbmV4cG9ydCBjbGFzcyBFbnVtVG9TdHJpbmdQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XHJcbiAgdHJhbnNmb3JtKHZhbHVlOiBhbnksIHR5cGU6IEVudW1QaXBlVHlwZSk6IHN0cmluZyB7XHJcblxyXG4gICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgIGNhc2UgRW51bVBpcGVUeXBlLlNJVFVBQ0FPX0RJVklEQV9ERUJJVE86XHJcbiAgICAgICAgcmV0dXJuIFNpdHVhY2FvRGl2aWRhRGViaXRvTmFtZXNwYWNlLnRvU3RyaW5nKHZhbHVlKTtcclxuICAgICBjYXNlIEVudW1QaXBlVHlwZS5TSVRVQUNBT19QQUdBTUVOVE9fREVCSVRPOlxyXG4gICAgICAgIHJldHVybiBTaXR1YWNhb1BhZ2FtZW50b0RlYml0b05hbWVzcGFjZS50b1N0cmluZyh2YWx1ZSk7XHJcbiAgICAgIGNhc2UgRW51bVBpcGVUeXBlLlNJVFVBQ0FPX1BBR0FNRU5UT19QQVJDRUxBOlxyXG4gICAgICAgIHJldHVybiBTaXR1YWNhb1BhZ2FtZW50b1BhcmNlbGFOYW1lc3BhY2UudG9TdHJpbmcodmFsdWUpO1xyXG4gICAgICBjYXNlIEVudW1QaXBlVHlwZS5USVBPX1BFU1NPQTpcclxuICAgICAgICByZXR1cm4gVGlwb1Blc3NvYU5hbWVzcGFjZS50b1N0cmluZyh2YWx1ZSk7XHJcbiAgICAgIGNhc2UgRW51bVBpcGVUeXBlLlNJVFVBQ0FPX0NPTlRSSUJVSU5URTpcclxuICAgICAgICByZXR1cm4gU2l0dWFjYW9Db250cmlidWludGVOYW1lc3BhY2UudG9TdHJpbmcodmFsdWUpO1xyXG4gICAgICBjYXNlIEVudW1QaXBlVHlwZS5TRVhPOlxyXG4gICAgICAgIHJldHVybiBTZXhvTmFtZXNwYWNlLnRvU3RyaW5nKHZhbHVlKTtcclxuICAgICAgY2FzZSBFbnVtUGlwZVR5cGUuVElQT19FTkRFUkVDTzpcclxuICAgICAgICByZXR1cm4gVGlwb0VuZGVyZWNvTmFtZXNwYWNlLnRvU3RyaW5nKHZhbHVlKTtcclxuICAgICAgY2FzZSBFbnVtUGlwZVR5cGUuVElQT19SRVNQT05TQVZFTDpcclxuICAgICAgICByZXR1cm4gVGlwb1Jlc3BvbnNhdmVsTmFtZXNwYWNlLnRvU3RyaW5nKHZhbHVlKTtcclxuICAgICAgY2FzZSBFbnVtUGlwZVR5cGUuVElQT19JTU9WRUw6XHJcbiAgICAgICAgcmV0dXJuIFRpcG9JbW92ZWxOYW1lc3BhY2UudG9TdHJpbmcodmFsdWUpO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbm5hbWVzcGFjZSBTaXR1YWNhb0RpdmlkYURlYml0b05hbWVzcGFjZSB7XHJcbiAgZXhwb3J0IGZ1bmN0aW9uIHRvU3RyaW5nKHZhbHVlOiBTaXR1YWNhb0RpdmlkYURlYml0byk6IHN0cmluZyB7XHJcbiAgICBpZiAodmFsdWUgPT09IFNpdHVhY2FvRGl2aWRhRGViaXRvLkRJVklEQV9DT1JSRU5URSkge1xyXG4gICAgICByZXR1cm4gJ0TDg8KtdmlkYSBDb3JyZW50ZSc7XHJcbiAgICB9IGVsc2UgaWYgKHZhbHVlID09PSBTaXR1YWNhb0RpdmlkYURlYml0by5ESVZJREFfQUpVSVpBREEpIHtcclxuICAgICAgcmV0dXJuICdEw4PCrXZpZGEgQWp1aXphZGEnO1xyXG4gICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gU2l0dWFjYW9EaXZpZGFEZWJpdG8uRElWSURBX0FUSVZBKSB7XHJcbiAgICAgIHJldHVybiAnRMODwq12aWRhIEF0aXZhJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbm5hbWVzcGFjZSBTaXR1YWNhb1BhZ2FtZW50b0RlYml0b05hbWVzcGFjZSB7XHJcbiAgZXhwb3J0IGZ1bmN0aW9uIHRvU3RyaW5nKHZhbHVlOiBTaXR1YWNhb1BhZ2FtZW50b0RlYml0byk6IHN0cmluZyB7XHJcbiAgICBpZiAodmFsdWUgPT09IFNpdHVhY2FvUGFnYW1lbnRvRGViaXRvLkFCRVJUTykge1xyXG4gICAgICByZXR1cm4gJ0FiZXJ0byc7XHJcbiAgICB9IGVsc2UgaWYgKHZhbHVlID09PSBTaXR1YWNhb1BhZ2FtZW50b0RlYml0by5QQUdPKSB7XHJcbiAgICAgIHJldHVybiAnUGFnbyc7XHJcbiAgICB9IGVsc2UgaWYgKHZhbHVlID09PSBTaXR1YWNhb1BhZ2FtZW50b0RlYml0by5QUk9URVNUQURPKSB7XHJcbiAgICAgIHJldHVybiAnUHJvdGVzdGFkbyc7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5uYW1lc3BhY2UgU2l0dWFjYW9QYWdhbWVudG9QYXJjZWxhTmFtZXNwYWNlIHtcclxuICBleHBvcnQgZnVuY3Rpb24gdG9TdHJpbmcodmFsdWU6IFNpdHVhY2FvUGFnYW1lbnRvUGFyY2VsYSk6IHN0cmluZyB7XHJcbiAgICBpZiAodmFsdWUgPT09IFNpdHVhY2FvUGFnYW1lbnRvUGFyY2VsYS5BQkVSVE8pIHtcclxuICAgICAgcmV0dXJuICdBYmVydG8nO1xyXG4gICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gU2l0dWFjYW9QYWdhbWVudG9QYXJjZWxhLlBBR08pIHtcclxuICAgICAgcmV0dXJuICdQYWdvJztcclxuICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IFNpdHVhY2FvUGFnYW1lbnRvUGFyY2VsYS5FTV9ESVZJREFfQVRJVkEpIHtcclxuICAgICAgcmV0dXJuICdFbSBEw4PCrXZpZGEgQXRpdmEnO1xyXG4gICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gU2l0dWFjYW9QYWdhbWVudG9QYXJjZWxhLkVNX0VYRUNVQ0FPX0ZJU0NBTCkge1xyXG4gICAgICByZXR1cm4gJ0VtIEV4ZWN1w4PCp8ODwqNvIEZpc2NhbCc7XHJcbiAgICB9IGVsc2UgaWYgKHZhbHVlID09PSBTaXR1YWNhb1BhZ2FtZW50b1BhcmNlbGEuQ0FOQ0VMQURPKSB7XHJcbiAgICAgIHJldHVybiAnQ2FuY2VsYWRvJztcclxuICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IFNpdHVhY2FvUGFnYW1lbnRvUGFyY2VsYS5BR1JVUEFET19FTV9QQVJDRUxBTUVOVE8pIHtcclxuICAgICAgcmV0dXJuICdFbSBQYXJjZWxhbWVudG8nO1xyXG4gICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gU2l0dWFjYW9QYWdhbWVudG9QYXJjZWxhLlBST1RFU1RBRE8pIHtcclxuICAgICAgcmV0dXJuICdQcm90ZXN0YWRvJztcclxuICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IFNpdHVhY2FvUGFnYW1lbnRvUGFyY2VsYS5FWENMVUlETykge1xyXG4gICAgICByZXR1cm4gJ0V4Y2x1w4PCrWRvJztcclxuICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IFNpdHVhY2FvUGFnYW1lbnRvUGFyY2VsYS5JTVVORV9JU0VOVE8pIHtcclxuICAgICAgcmV0dXJuICdJbXVuZS9Jc2VudG8nO1xyXG4gICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gU2l0dWFjYW9QYWdhbWVudG9QYXJjZWxhLkRJRkVSRU5DQV9ERV9WQUxPUl9DQU5DRUxBRE9fUEFSQ0lBTE1FTlRFKSB7XHJcbiAgICAgIHJldHVybiAnRGlmZXJlbsODwqdhIGRlIFZhbG9yIENhbmNlbGFkbyBQYXJjaWFsbWVudGUnO1xyXG4gICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gU2l0dWFjYW9QYWdhbWVudG9QYXJjZWxhLkJMT1FVRUFETykge1xyXG4gICAgICByZXR1cm4gJ0Jsb3F1ZWFkbyc7XHJcbiAgICB9IGVsc2UgaWYgKHZhbHVlID09PSBTaXR1YWNhb1BhZ2FtZW50b1BhcmNlbGEuQUdSVVBBRE9fRU1fT1VUUkFfUEFSQ0VMQSkge1xyXG4gICAgICByZXR1cm4gJ0FncnVwYWRvIGVtIE91dHJhIFBhcmNlbGEnO1xyXG4gICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gU2l0dWFjYW9QYWdhbWVudG9QYXJjZWxhLlBSRVNDUklUTykge1xyXG4gICAgICByZXR1cm4gJ1ByZXNjcml0byc7XHJcbiAgICB9IGVsc2UgaWYgKHZhbHVlID09PSBTaXR1YWNhb1BhZ2FtZW50b1BhcmNlbGEuRU1fRklTQ0FMSVpBQ0FPKSB7XHJcbiAgICAgIHJldHVybiAnRW0gRmlzY2FsaXphw4PCp8ODwqNvJztcclxuICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IFNpdHVhY2FvUGFnYW1lbnRvUGFyY2VsYS5CQUlYQV9TRU1fTU9WSU1FTlRPKSB7XHJcbiAgICAgIHJldHVybiAnQmFpeGEgc2VtIE1vdmltZW50byc7XHJcbiAgICB9IGVsc2UgaWYgKHZhbHVlID09PSBTaXR1YWNhb1BhZ2FtZW50b1BhcmNlbGEuRU1fUkVDVVJTT19BRE1JTklTVFJBVElWTykge1xyXG4gICAgICByZXR1cm4gJ0VtIFJlY3Vyc28gQWRtaW5pc3RyYXRpdm8nO1xyXG4gICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gU2l0dWFjYW9QYWdhbWVudG9QYXJjZWxhLlNVU1BFTlNPKSB7XHJcbiAgICAgIHJldHVybiAnU3VzcGVuc28nO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IG5hbWVzcGFjZSBUaXBvUGVzc29hTmFtZXNwYWNlIHtcclxuICBleHBvcnQgZnVuY3Rpb24gdG9TdHJpbmcodmFsdWU6IFRpcG9QZXNzb2EpOiBzdHJpbmcge1xyXG4gICAgaWYgKHZhbHVlID09PSBUaXBvUGVzc29hLkZJU0lDQSkge1xyXG4gICAgICByZXR1cm4gJ0bDg8Ktc2ljYSc7XHJcbiAgICB9IGVsc2UgaWYgKHZhbHVlID09PSBUaXBvUGVzc29hLkpVUklESUNBKSB7XHJcbiAgICAgIHJldHVybiAnSnVyw4PCrWRpY2EnO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IG5hbWVzcGFjZSBTaXR1YWNhb0NvbnRyaWJ1aW50ZU5hbWVzcGFjZSAge1xyXG4gIGV4cG9ydCBmdW5jdGlvbiB0b1N0cmluZyh2YWx1ZTogU2l0dWFjYW9Db250cmlidWludGUpOiBzdHJpbmcge1xyXG4gICAgaWYgKHZhbHVlID09PSBTaXR1YWNhb0NvbnRyaWJ1aW50ZS5BVElWTykge1xyXG4gICAgICByZXR1cm4gJ0F0aXZvJztcclxuICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IFNpdHVhY2FvQ29udHJpYnVpbnRlLklOQVRJVk8pIHtcclxuICAgICAgcmV0dXJuICdJbmF0aXZvJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbm5hbWVzcGFjZSBTZXhvTmFtZXNwYWNlIHtcclxuICBleHBvcnQgZnVuY3Rpb24gdG9TdHJpbmcodmFsdWU6IFNleG8pOiBzdHJpbmcge1xyXG4gICAgaWYgKHZhbHVlID09PSBTZXhvLkZFTUlOSU5PKSB7XHJcbiAgICAgIHJldHVybiAnRmVtaW5pbm8nO1xyXG4gICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gU2V4by5NQVNDVUxJTk8pIHtcclxuICAgICAgcmV0dXJuICdNYXNjdWxpbm8nO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxubmFtZXNwYWNlIFRpcG9FbmRlcmVjb05hbWVzcGFjZSB7XHJcbiAgZXhwb3J0IGZ1bmN0aW9uIHRvU3RyaW5nKHZhbHVlOiBUaXBvRW5kZXJlY28pOiBzdHJpbmcge1xyXG4gICAgaWYgKHZhbHVlID09PSBUaXBvRW5kZXJlY28uUFJJTkNJUEFMKSB7XHJcbiAgICAgIHJldHVybiAnUHJpbmNpcGFsJztcclxuICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IFRpcG9FbmRlcmVjby5DT1JSRVNQT05ERU5DSUEpIHtcclxuICAgICAgcmV0dXJuICdDb3JyZXNwb25kw4PCqm5jaWEnO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IG5hbWVzcGFjZSBUaXBvUmVzcG9uc2F2ZWxOYW1lc3BhY2Uge1xyXG4gIGV4cG9ydCBmdW5jdGlvbiB0b1N0cmluZyh2YWx1ZTogVGlwb1Jlc3BvbnNhdmVsKTogc3RyaW5nIHtcclxuICAgIGlmICh2YWx1ZSA9PT0gVGlwb1Jlc3BvbnNhdmVsLlBSSU5DSVBBTCkge1xyXG4gICAgICByZXR1cm4gJ1ByaW5jaXBhbCc7XHJcbiAgICB9IGVsc2UgaWYgKHZhbHVlID09PSBUaXBvUmVzcG9uc2F2ZWwuU09DSU8pIHtcclxuICAgICAgcmV0dXJuICdTw4PCs2Npbyc7XHJcbiAgICB9IGVsc2UgaWYgKHZhbHVlID09PSBUaXBvUmVzcG9uc2F2ZWwuUFJPQ1VSQURPUikge1xyXG4gICAgICByZXR1cm4gJ1Byb2N1cmFkb3InO1xyXG4gICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gVGlwb1Jlc3BvbnNhdmVsLlJFU1BPTlNBVkVMX0lNT0JJTElBUklPKSB7XHJcbiAgICAgIHJldHVybiAnUmVzcG9uc8ODwqF2ZWwgSW1vYmlsacODwqFyaW8nO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IG5hbWVzcGFjZSBUaXBvSW1vdmVsTmFtZXNwYWNlIHtcclxuICBleHBvcnQgZnVuY3Rpb24gdG9TdHJpbmcodmFsdWU6IFRpcG9JbW92ZWwpOiBzdHJpbmcge1xyXG4gICAgaWYgKHZhbHVlID09PSBUaXBvSW1vdmVsLlVSQkFOTykge1xyXG4gICAgICByZXR1cm4gJ1VyYmFubyc7XHJcbiAgICB9IGVsc2UgaWYgKHZhbHVlID09PSBUaXBvSW1vdmVsLlJVUkFMKSB7XHJcbiAgICAgIHJldHVybiAnUnVyYWwnO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQge1BpcGUsIFBpcGVUcmFuc2Zvcm19IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1V0aWxGdW5jdGlvbnN9IGZyb20gJy4uL3V0aWwvdXRpbC1mdW5jdGlvbnMnO1xyXG5cclxuQFBpcGUoe1xyXG4gIG5hbWU6ICdmaWx0ZXInXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGaWx0ZXJQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XHJcblxyXG4gIHRyYW5zZm9ybShpdGVtczogYW55W10sIGZpbHRlcnM6e1trZXk6IHN0cmluZ106IHN0cmluZ30pOiBhbnlbXSB7XHJcbiAgICBpZighaXRlbXMpIHJldHVybiBbXTtcclxuICAgIGlmKCFmaWx0ZXJzKSByZXR1cm4gaXRlbXM7XHJcbiAgICBpZiAoIUZpbHRlclBpcGUudmFsaWRhdGUoZmlsdGVycykpIHJldHVybiBpdGVtcztcclxuXHJcbiAgICByZXR1cm4gaXRlbXMuZmlsdGVyKCh2YWx1ZSkgPT4ge1xyXG4gICAgICBmb3IobGV0IGZpZWxkIGluIGZpbHRlcnMpIHtcclxuICAgICAgICBpZihGaWx0ZXJQaXBlLmlzRXF1YWxzKGZpbHRlcnNbZmllbGRdLCB2YWx1ZVtmaWVsZF0pKSB7XHJcbiAgICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIHZhbGlkYXRlKGZpbHRlcnM6e1trZXk6IHN0cmluZ106IHN0cmluZ30pIHtcclxuICAgIGxldCBpc1ZhbHVlID0gZmFsc2U7XHJcbiAgICBmb3IgKGxldCBmaWVsZCBpbiBmaWx0ZXJzKSB7XHJcbiAgICAgIGlmIChmaWx0ZXJzW2ZpZWxkXSAhPT0gdW5kZWZpbmVkICYmIGZpbHRlcnNbZmllbGRdICE9PSAnJykge1xyXG4gICAgICAgIGlzVmFsdWUgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaXNWYWx1ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIGlzRXF1YWxzKGZpbHRlciwgdmFsdWUpIHtcclxuICAgIHZhbHVlID0gVXRpbEZ1bmN0aW9ucy5yZW1vdmVBY2NlbnRzKHZhbHVlLnRvU3RyaW5nKCkpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICBmaWx0ZXIgPSBVdGlsRnVuY3Rpb25zLnJlbW92ZUFjY2VudHMoZmlsdGVyLnRvU3RyaW5nKCkpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICByZXR1cm4gdmFsdWUuaW5jbHVkZXMoZmlsdGVyKTtcclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHtDVVNUT01fRUxFTUVOVFNfU0NIRU1BLCBOZ01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7RW5kZXJlY29QcmluY2lwYWxGb3JtYXRhZG9QaXBlfSBmcm9tICcuL2VuZGVyZWNvLXByaW5jaXBhbC1mb3JtYXRhZG8ucGlwZSc7XHJcbmltcG9ydCB7RW51bVRvU3RyaW5nUGlwZX0gZnJvbSAnLi9lbnVtLXN0cmluZy5waXBlJztcclxuaW1wb3J0IHtGaWx0ZXJQaXBlfSBmcm9tICcuL2ZpbHRlci5waXBlJztcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgZGVjbGFyYXRpb25zOiBbXHJcbiAgICBFbmRlcmVjb1ByaW5jaXBhbEZvcm1hdGFkb1BpcGUsIEVudW1Ub1N0cmluZ1BpcGUsIEZpbHRlclBpcGVcclxuICBdLFxyXG4gIGV4cG9ydHM6IFtcclxuICAgIEVuZGVyZWNvUHJpbmNpcGFsRm9ybWF0YWRvUGlwZSwgRW51bVRvU3RyaW5nUGlwZSwgRmlsdGVyUGlwZVxyXG4gIF0sXHJcbiAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQaXBlTW9kdWxvIHt9XHJcbiIsImltcG9ydCB7Q1VTVE9NX0VMRU1FTlRTX1NDSEVNQSwgTmdNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1JvdXRlck1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHt1c2VyTWdtdFJvdXRlfSBmcm9tICcuL3VzZXItbWFuYWdlbWVudC5yb3V0ZSc7XHJcbmltcG9ydCB7VXNlck1nbXRDb21wb25lbnR9IGZyb20gJy4vdXNlci1tYW5hZ2VtZW50LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7VXNlck1nbXREZXRhaWxDb21wb25lbnR9IGZyb20gJy4vdXNlci1tYW5hZ2VtZW50LWRldGFpbC5jb21wb25lbnQnO1xyXG5pbXBvcnQge1VzZXJNZ210VXBkYXRlQ29tcG9uZW50fSBmcm9tICcuL3VzZXItbWFuYWdlbWVudC11cGRhdGUuY29tcG9uZW50JztcclxuaW1wb3J0IHtVc2VyTWdtdERlbGV0ZURpYWxvZ0NvbXBvbmVudH0gZnJvbSAnLi91c2VyLW1hbmFnZW1lbnQtZGVsZXRlLWRpYWxvZy5jb21wb25lbnQnO1xyXG5pbXBvcnQge1BvcnRhbEFsZXJ0TW9kdWxlfSBmcm9tICcuLi9hbGVydC9wb3J0YWwtYWxlcnQubW9kdWxlJztcclxuaW1wb3J0IHtGb250QXdlc29tZU1vZHVsZX0gZnJvbSAnQGZvcnRhd2Vzb21lL2FuZ3VsYXItZm9udGF3ZXNvbWUnO1xyXG5pbXBvcnQge05nSmhpcHN0ZXJNb2R1bGV9IGZyb20gJ25nLWpoaXBzdGVyJztcclxuaW1wb3J0IHtGb3Jtc01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQge0NvbW1vbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHtsaWJyYXJ5fSBmcm9tICdAZm9ydGF3ZXNvbWUvZm9udGF3ZXNvbWUtc3ZnLWNvcmUnO1xyXG5pbXBvcnQge2Zhc30gZnJvbSAnQGZvcnRhd2Vzb21lL2ZyZWUtc29saWQtc3ZnLWljb25zJztcclxuaW1wb3J0IHtGaW5kTGFuZ3VhZ2VNb2R1bG99IGZyb20gJy4uL2xhbmd1YWdlL2ZpbmQtbGFuZ3VhZ2UubW9kdWxvJztcclxuaW1wb3J0IHtOZ2JNb2R1bGV9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHtQaXBlTW9kdWxvfSBmcm9tICcuLi9waXBlL3BpcGUubW9kdWxvJztcclxuXHJcbmxpYnJhcnkuYWRkKGZhcyk7XHJcblxyXG5jb25zdCBFTlRJVFlfU1RBVEVTID0gWy4uLnVzZXJNZ210Um91dGVdO1xyXG5cclxuQE5nTW9kdWxlKHtcclxuICAgIGltcG9ydHM6IFtcclxuICAgICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgICBGb3Jtc01vZHVsZSxcclxuICAgICAgTmdKaGlwc3Rlck1vZHVsZSxcclxuICAgICAgTmdiTW9kdWxlLmZvclJvb3QoKSxcclxuICAgICAgRm9udEF3ZXNvbWVNb2R1bGUsXHJcbiAgICAgIFBvcnRhbEFsZXJ0TW9kdWxlLFxyXG4gICAgICBGaW5kTGFuZ3VhZ2VNb2R1bG8sXHJcbiAgICAgIFJvdXRlck1vZHVsZS5mb3JDaGlsZChFTlRJVFlfU1RBVEVTKSxcclxuICAgICAgUGlwZU1vZHVsb1xyXG4gICAgXSxcclxuICAgIGRlY2xhcmF0aW9uczogW1xyXG4gICAgICBVc2VyTWdtdENvbXBvbmVudCxcclxuICAgICAgVXNlck1nbXREZXRhaWxDb21wb25lbnQsXHJcbiAgICAgIFVzZXJNZ210VXBkYXRlQ29tcG9uZW50LFxyXG4gICAgICBVc2VyTWdtdERlbGV0ZURpYWxvZ0NvbXBvbmVudFxyXG4gICAgXSxcclxuICAgIGVudHJ5Q29tcG9uZW50czogW1xyXG4gICAgICBVc2VyTWdtdERlbGV0ZURpYWxvZ0NvbXBvbmVudFxyXG4gICAgXSxcclxuICAgIHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgVXNlck1hbmFnZW1lbnRNb2R1bGUge31cclxuIiwiaW1wb3J0IHtDb21wb25lbnQsIE9uSW5pdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7QWN0aXZhdGVkUm91dGV9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7UGxhdGZvcm1Mb2NhdGlvbn0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2poaS1lcnJvcicsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vZXJyb3IuY29tcG9uZW50Lmh0bWwnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBFcnJvckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgICBlcnJvck1lc3NhZ2U6IHN0cmluZztcclxuICAgIGVycm9yNDAzOiBib29sZWFuO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLCBsb2NhdGlvbjogUGxhdGZvcm1Mb2NhdGlvbikge1xyXG4gICAgICAgIGxvY2F0aW9uLm9uUG9wU3RhdGUoKCkgPT4ge1xyXG4gICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSAnLi4vJztcclxuICAgICAgICB9KTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5yb3V0ZS5kYXRhLnN1YnNjcmliZShyb3V0ZURhdGEgPT4ge1xyXG4gICAgICAgICAgICBpZiAocm91dGVEYXRhLmVycm9yNDAzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yNDAzID0gcm91dGVEYXRhLmVycm9yNDAzO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChyb3V0ZURhdGEuZXJyb3JNZXNzYWdlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IHJvdXRlRGF0YS5lcnJvck1lc3NhZ2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgUm91dGVzIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuXHJcbmltcG9ydCB7IEVycm9yQ29tcG9uZW50IH0gZnJvbSAnLi9lcnJvci5jb21wb25lbnQnO1xyXG5cclxuZXhwb3J0IGNvbnN0IGVycm9yUm91dGU6IFJvdXRlcyA9IFtcclxuICAgIHtcclxuICAgICAgICBwYXRoOiAnZXJyb3InLFxyXG4gICAgICAgIGNvbXBvbmVudDogRXJyb3JDb21wb25lbnQsXHJcbiAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICBhdXRob3JpdGllczogW10sXHJcbiAgICAgICAgICAgIHBhZ2VUaXRsZTogJ09jb3JyZXUgdW0gZXJybydcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIHBhdGg6ICdhY2Nlc3NkZW5pZWQnLFxyXG4gICAgICAgIGNvbXBvbmVudDogRXJyb3JDb21wb25lbnQsXHJcbiAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICBhdXRob3JpdGllczogW10sXHJcbiAgICAgICAgICAgIHBhZ2VUaXRsZTogJ0Zhw4PCp2EgbG9naW4gbm92YW1lbnRlJyxcclxuICAgICAgICAgICAgZXJyb3I0MDM6IHRydWVcclxuICAgICAgICB9XHJcbiAgICB9XHJcbl07XHJcbiIsImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7SHR0cENsaWVudCwgSHR0cFJlc3BvbnNlfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7bWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7UHJvZmlsZUluZm99IGZyb20gJy4uLy4uL21vZGVsL3Byb2ZpbGUtaW5mby5tb2RlbCc7XHJcblxyXG5jb25zdCAgU0VSVkVSX0FQSV9VUkwgPSAnLi8nO1xyXG5cclxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcclxuZXhwb3J0IGNsYXNzIFByb2ZpbGVTZXJ2aWNlIHtcclxuICAgIHByaXZhdGUgaW5mb1VybCA9IFNFUlZFUl9BUElfVVJMICsgJ21hbmFnZW1lbnQvaW5mbyc7XHJcbiAgICBwcml2YXRlIHByb2ZpbGVJbmZvOiBQcm9taXNlPFByb2ZpbGVJbmZvPjtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQpIHt9XHJcblxyXG4gICAgZ2V0UHJvZmlsZUluZm8oKTogUHJvbWlzZTxQcm9maWxlSW5mbz4ge1xyXG4gICAgICAgIGlmICghdGhpcy5wcm9maWxlSW5mbykge1xyXG4gICAgICAgICAgICB0aGlzLnByb2ZpbGVJbmZvID0gdGhpcy5odHRwXHJcbiAgICAgICAgICAgICAgICAuZ2V0PFByb2ZpbGVJbmZvPih0aGlzLmluZm9VcmwsIHsgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyB9KVxyXG4gICAgICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICAgICAgbWFwKChyZXM6IEh0dHBSZXNwb25zZTxQcm9maWxlSW5mbz4pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IHJlcy5ib2R5O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwaSA9IG5ldyBQcm9maWxlSW5mbygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwaS5hY3RpdmVQcm9maWxlcyA9IGRhdGFbJ2FjdGl2ZVByb2ZpbGVzJ107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRpc3BsYXlSaWJib25PblByb2ZpbGVzID0gZGF0YVsnZGlzcGxheS1yaWJib24tb24tcHJvZmlsZXMnXS5zcGxpdCgnLCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGkuYWN0aXZlUHJvZmlsZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJpYmJvblByb2ZpbGVzID0gZGlzcGxheVJpYmJvbk9uUHJvZmlsZXMuZmlsdGVyKHByb2ZpbGUgPT4gcGkuYWN0aXZlUHJvZmlsZXMuaW5jbHVkZXMocHJvZmlsZSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJpYmJvblByb2ZpbGVzLmxlbmd0aCAhPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpLnJpYmJvbkVudiA9IHJpYmJvblByb2ZpbGVzWzBdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGkuaW5Qcm9kdWN0aW9uID0gcGkuYWN0aXZlUHJvZmlsZXMuaW5jbHVkZXMoJ3Byb2QnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpLnN3YWdnZXJFbmFibGVkID0gcGkuYWN0aXZlUHJvZmlsZXMuaW5jbHVkZXMoJ3N3YWdnZXInKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIC50b1Byb21pc2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvZmlsZUluZm87XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtDb21wb25lbnQsIE9uSW5pdCwgT25EZXN0cm95fSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge1JvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHtOZ2JNb2RhbCwgTmdiTW9kYWxSZWZ9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHtQcm9maWxlU2VydmljZX0gZnJvbSAnLi4vcHJvZmlsZXMvcHJvZmlsZS5zZXJ2aWNlJztcclxuaW1wb3J0IHtJRW1wcmVzYX0gZnJvbSAnLi4vLi4vbW9kZWwvZW1wcmVzYS5tb2RlbCc7XHJcbmltcG9ydCB7TG9naW5TZXJ2aWNlfSBmcm9tICcuLi8uLi9sb2dpbi9sb2dpbi5zZXJ2aWNlJztcclxuaW1wb3J0IHtFbXByZXNhU2VydmljZX0gZnJvbSAnLi4vLi4vZW1wcmVzYS9lbXByZXNhLnNlcnZpY2UnO1xyXG5pbXBvcnQge0xvZ2luTW9kYWxTZXJ2aWNlfSBmcm9tICcuLi8uLi9sb2dpbi9sb2dpbi1tb2RhbC5zZXJ2aWNlJztcclxuaW1wb3J0IHtSZWdpc3Rlck1vZGFsU2VydmljZX0gZnJvbSAnLi4vLi4vcmVnaXN0ZXIvcmVnaXN0ZXItbW9kYWwuc2VydmljZSc7XHJcbmltcG9ydCB7R2xvYmFsU2VydmljZX0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9wYXJhbWV0cm9zL2dsb2JhbC5zZXJ2aWNlJztcclxuaW1wb3J0IHtQcmluY2lwYWx9IGZyb20gJy4uLy4uL2F1dGgvcHJpbmNpcGFsLnNlcnZpY2UnO1xyXG5pbXBvcnQge1BhcmFtZXRyb3NTZXJ2aWNlfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL3BhcmFtZXRyb3MvcGFyYW1ldHJvcy5zZXJ2aWNlJztcclxuaW1wb3J0IHtVdGlsTWVuc2FnZW19IGZyb20gJy4uLy4uL2FsZXJ0L3V0aWwtbWVuc2FnZW0nO1xyXG5pbXBvcnQge1BhZ2luYUFqdWRhfSBmcm9tICcuLi8uLi9tb2RlbC9wYWdpbmFBanVkYS5tb2RlbCc7XHJcbmltcG9ydCB7VXRpbEZ1bmN0aW9uc30gZnJvbSAnLi4vLi4vdXRpbCc7XHJcbmltcG9ydCB7SmhpRXZlbnRNYW5hZ2VyfSBmcm9tICduZy1qaGlwc3Rlcic7XHJcbmltcG9ydCB7Tm90aWZpY2FjYW99IGZyb20gJy4uLy4uL21vZGVsL25vdGlmaWNhY2FvLm1vZGVsJztcclxuaW1wb3J0IHtOb3RpZmljYWNvZXNTZXJ2aWNlfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL25vdGlmaWNhY29lcy9ub3RpZmljYWNvZXMuc2VydmljZSc7XHJcbmltcG9ydCB7Tm90aWZpY2Fjb2VzUG9wdXBDb21wb25lbnR9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvbm90aWZpY2Fjb2VzL25vdGlmaWNhY29lcy1wb3B1cC5jb21wb25lbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2poaS1uYXZiYXInLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL25hdmJhci5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnbmF2YmFyLnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTmF2YmFyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gICAgaW5Qcm9kdWN0aW9uOiBib29sZWFuO1xyXG4gICAgaXNOYXZiYXJDb2xsYXBzZWQ6IGJvb2xlYW47XHJcbiAgICBwYWdpbmFzQWp1ZGE6IEFycmF5PFBhZ2luYUFqdWRhPiA9IFtdO1xyXG4gICAgaXNSZW1vdmVBY2FvOiBib29sZWFuO1xyXG4gICAgZW1wcmVzYTogSUVtcHJlc2E7XHJcbiAgICBzd2FnZ2VyRW5hYmxlZDogYm9vbGVhbjtcclxuICAgIG1vZGFsUmVmOiBOZ2JNb2RhbFJlZjtcclxuICAgIGhhYmlsaXRhck5vdGlmaWNhY29lcyA9IGZhbHNlO1xyXG4gICAgbm90aWZpY2Fjb2VzOiBOb3RpZmljYWNhb1tdID0gW107XHJcbiAgICBxdWFudGlkYWRlTm90aWZpY2Fjb2VzTm92YXMgPSAwO1xyXG4gICAgcHJpdmF0ZSBub3RpZmljYWNvZXNMaXN0ZW5lcnNSZWdpc3RyYWRvcyA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBjYXJyZWdhbmRvTm90aWZpY2Fjb2VzID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIGNhcnJlZ2FuZG9IYWJpbGl0YWNhbyA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBvcGVuZWRPblRoaXNMb2dpbiA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBhYnJpclBvcHVwUXVhbmRvQ2FycmVnYXIgPSBmYWxzZTtcclxuICAgIHByaXZhdGUgYWJyaXJQb3B1cFNlVGl2ZXJOb3Zhc1F1YW5kb0NhcnJlZ2FyID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIG5vdGlmaWNhY29lc1N1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIGxvZ2luU2VydmljZTogTG9naW5TZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgZW1wcmVzYVNlcnZpY2U6IEVtcHJlc2FTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgbG9naW5Nb2RhbFNlcnZpY2U6IExvZ2luTW9kYWxTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgcmVnaXN0ZXJNb2RhbFNlcnZpY2U6IFJlZ2lzdGVyTW9kYWxTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgcHJvZmlsZVNlcnZpY2U6IFByb2ZpbGVTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgcGFyYW1ldHJvU2VydmljZTogUGFyYW1ldHJvc1NlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBnbG9iYWw6IEdsb2JhbFNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgICAgICBwcml2YXRlIHV0aWxNZW5zYWdlbTogVXRpbE1lbnNhZ2VtLFxyXG4gICAgICAgIHB1YmxpYyBwcmluY2lwYWw6IFByaW5jaXBhbCxcclxuICAgICAgICBwcml2YXRlIGV2ZW50TWFuYWdlcjogSmhpRXZlbnRNYW5hZ2VyLFxyXG4gICAgICAgIHByaXZhdGUgbm90aWZpY2Fjb2VzU2VydmljZTogTm90aWZpY2Fjb2VzU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIG1vZGFsU2VydmljZTogTmdiTW9kYWxcclxuICAgICkge1xyXG4gICAgICAgIHRoaXMuaXNOYXZiYXJDb2xsYXBzZWQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuaXNSZW1vdmVBY2FvID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5ub3RpZmljYWNvZXNTdWJzY3JpcHRpb24gPSB0aGlzLm5vdGlmaWNhY29lc1NlcnZpY2Uub2JzZXJ2YXJOb3RpZmljYWNvZXMoKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKGxpc3RhID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2Fjb2VzID0gbGlzdGEgPyBsaXN0YSA6IFtdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5xdWFudGlkYWRlTm90aWZpY2Fjb2VzTm92YXMgPSB0aGlzLmNvbnRhck5vdmFzTm90aWZpY2Fjb2VzKHRoaXMubm90aWZpY2Fjb2VzKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMucHJvZmlsZVNlcnZpY2UuZ2V0UHJvZmlsZUluZm8oKS50aGVuKHByb2ZpbGVJbmZvID0+IHtcclxuICAgICAgICAgICAgdGhpcy5pblByb2R1Y3Rpb24gPSBwcm9maWxlSW5mby5pblByb2R1Y3Rpb247XHJcbiAgICAgICAgICAgIHRoaXMuc3dhZ2dlckVuYWJsZWQgPSBwcm9maWxlSW5mby5zd2FnZ2VyRW5hYmxlZDtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5lbXByZXNhU2VydmljZVxyXG4gICAgICAgICAgICAuZ2V0RW1wcmVzYSgpXHJcbiAgICAgICAgICAgIC50b1Byb21pc2UoKVxyXG4gICAgICAgICAgICAudGhlbihlbXByZXNhID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZW1wcmVzYSA9IGVtcHJlc2EuYm9keTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMucGFyYW1ldHJvU2VydmljZS5nZXRQYXJhbWV0cm9zQnlOYW1lKFwiUkVNT1ZFUl9BQ0FPX05BVkJBUlwiKVxyXG4gICAgICAgICAgICAudGhlbih2YWx1ZSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzUmVtb3ZlQWNhbyA9IHZhbHVlLnZhbG9yO1xyXG4gICAgICAgICAgICB9KS5jYXRjaCh2YWx1ZSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMudXRpbE1lbnNhZ2VtLnNob3dFcnJvcih2YWx1ZSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMucGFyYW1ldHJvU2VydmljZS5nZXRQYXJhbWV0cm9zQnlOYW1lKFwiSlNPTl9BSlVEQVwiKVxyXG4gICAgICAgICAgICAudGhlbih2YWx1ZSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoVXRpbEZ1bmN0aW9ucy5pc1ZhbGlkU3RyaW5nT3JBcnJheSh2YWx1ZS52YWxvcikgPT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGFnaW5hc0FqdWRhID0gSlNPTi5wYXJzZSh2YWx1ZS52YWxvcik7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy51c3VhcmlvVml1QWp1ZGEoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFicmlyQWp1ZGEoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB9KS5jYXRjaCgoKSA9PiB7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMucmVnaXN0cmFyTGlzdGVuZXJzTm90aWZpY2Fjb2VzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICAgICAgdGhpcy5ub3RpZmljYWNvZXNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuXHJcbiAgICBjb2xsYXBzZU5hdmJhcigpIHtcclxuICAgICAgICB0aGlzLmlzTmF2YmFyQ29sbGFwc2VkID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpc0F1dGhlbnRpY2F0ZWQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucHJpbmNpcGFsLmlzQXV0aGVudGljYXRlZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlzQWRtaW4oKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucHJpbmNpcGFsLmhhc0FueUF1dGhvcml0eURpcmVjdChbXCJST0xFX0FETUlOXCJdKTtcclxuICAgIH1cclxuXHJcbiAgICBsb2dpbigpIHtcclxuICAgICAgICB0aGlzLm1vZGFsUmVmID0gdGhpcy5sb2dpbk1vZGFsU2VydmljZS5vcGVuKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVnaXN0ZXIoKSB7XHJcbiAgICAgICAgdGhpcy5tb2RhbFJlZiA9IHRoaXMucmVnaXN0ZXJNb2RhbFNlcnZpY2Uub3BlbigpO1xyXG4gICAgfVxyXG5cclxuICAgIGxvZ291dCgpIHtcclxuICAgICAgICB0aGlzLmNvbGxhcHNlTmF2YmFyKCk7XHJcbiAgICAgICAgdGhpcy5sb2dpblNlcnZpY2UubG9nb3V0KCk7XHJcbiAgICAgICAgdGhpcy5nbG9iYWwubG9nb3V0KCk7XHJcbiAgICAgICAgdGhpcy5yZXNldGFyTm90aWZpY2Fjb2VzKCk7XHJcbiAgICAgICAgdGhpcy5ub3RpZmljYWNvZXNTZXJ2aWNlLmxpbXBhckNhY2hlKCk7XHJcbiAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSAnLi4vJztcclxuICAgIH1cclxuXHJcbiAgICB0b2dnbGVOYXZiYXIoKSB7XHJcbiAgICAgICAgdGhpcy5pc05hdmJhckNvbGxhcHNlZCA9ICF0aGlzLmlzTmF2YmFyQ29sbGFwc2VkO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEltYWdlVXJsKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmlzQXV0aGVudGljYXRlZCgpID8gdGhpcy5wcmluY2lwYWwuZ2V0SW1hZ2VVcmwoKSA6IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgcGFyYW1ldHJpemFyKCkge1xyXG4gICAgICAgIHRoaXMuZ2xvYmFsLnBhcmFtZXRyaXphcigpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdXN1YXJpb1ZpdUFqdWRhKCkge1xyXG4gICAgICAgIHJldHVybiBsb2NhbFN0b3JhZ2UuaGFzT3duUHJvcGVydHkoJ3VzdWFyaW9WaXVBanVkYScpO1xyXG4gICAgfVxyXG5cclxuICAgIGFicmlyQWp1ZGEoKSB7XHJcbiAgICAgICAgdGhpcy5nbG9iYWwuYWJyaXJBanVkYSh0aGlzLnBhZ2luYXNBanVkYSk7XHJcbiAgICB9XHJcblxyXG4gICAgYWJyaXJOb3RpZmljYWNvZXMoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmhhYmlsaXRhck5vdGlmaWNhY29lcyB8fCAhdGhpcy5wcmluY2lwYWwuaXNBdXRoZW50aWNhdGVkKCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmJ1c2Nhck5vdGlmaWNhY29lcyhmYWxzZSwgdHJ1ZSwgZmFsc2UpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFRleHRvUXVhbnRpZGFkZU5vdGlmaWNhY29lcygpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmICh0aGlzLnF1YW50aWRhZGVOb3RpZmljYWNvZXNOb3ZhcyA+IDk5KSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnKzk5JztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucXVhbnRpZGFkZU5vdGlmaWNhY29lc05vdmFzLnRvU3RyaW5nKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSByZWdpc3RyYXJMaXN0ZW5lcnNOb3RpZmljYWNvZXMoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMubm90aWZpY2Fjb2VzTGlzdGVuZXJzUmVnaXN0cmFkb3MpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm5vdGlmaWNhY29lc0xpc3RlbmVyc1JlZ2lzdHJhZG9zID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgdGhpcy5ldmVudE1hbmFnZXIuc3Vic2NyaWJlKCdhdXRoZW50aWNhdGlvblN1Y2Nlc3MnLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMub3BlbmVkT25UaGlzTG9naW4gPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy52ZXJpZmljYXJIYWJpbGl0YWNhb0VDYXJyZWdhcih0cnVlKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5ldmVudE1hbmFnZXIuc3Vic2NyaWJlKCdhYnJpck5vdGlmaWNhY29lc1NlVGl2ZXJOb3ZhcycsICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy52ZXJpZmljYXJIYWJpbGl0YWNhb0VDYXJyZWdhcih0cnVlKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5wcmluY2lwYWwuZ2V0QXV0aGVudGljYXRpb25TdGF0ZSgpLnN1YnNjcmliZShhY2NvdW50ID0+IHtcclxuICAgICAgICAgICAgaWYgKFV0aWxGdW5jdGlvbnMuaXNWYWxpZE9iamVjdChhY2NvdW50KSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy52ZXJpZmljYXJIYWJpbGl0YWNhb0VDYXJyZWdhcihmYWxzZSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlc2V0YXJOb3RpZmljYWNvZXMoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2Fjb2VzU2VydmljZS5saW1wYXJDYWNoZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnByaW5jaXBhbC5pc0F1dGhlbnRpY2F0ZWQoKSkge1xyXG4gICAgICAgICAgICB0aGlzLnZlcmlmaWNhckhhYmlsaXRhY2FvRUNhcnJlZ2FyKGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB2ZXJpZmljYXJIYWJpbGl0YWNhb0VDYXJyZWdhcihhYnJpclBvcHVwU2VUaXZlck5vdmFzOiBib29sZWFuKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY2FycmVnYW5kb0hhYmlsaXRhY2FvKSB7XHJcbiAgICAgICAgICAgIGlmIChhYnJpclBvcHVwU2VUaXZlck5vdmFzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFicmlyUG9wdXBTZVRpdmVyTm92YXNRdWFuZG9DYXJyZWdhciA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNhcnJlZ2FuZG9IYWJpbGl0YWNhbyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5wYXJhbWV0cm9TZXJ2aWNlLmdldFBhcmFtZXRyb3NCeU5hbWUoXCJIQUJJTElUQVJfTk9USUZJQ0FDT0VTXCIpXHJcbiAgICAgICAgICAgIC50aGVuKHZhbHVlID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGFiaWxpdGFyTm90aWZpY2Fjb2VzID0gVXRpbEZ1bmN0aW9ucy5pc1ZhbGlkT2JqZWN0KHZhbHVlKSA9PT0gdHJ1ZSAmJiB2YWx1ZS52YWxvciA9PT0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmhhYmlsaXRhck5vdGlmaWNhY29lcykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnVzY2FyTm90aWZpY2Fjb2VzKGFicmlyUG9wdXBTZVRpdmVyTm92YXMsIGZhbHNlLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzZXRhck5vdGlmaWNhY29lcygpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jYXJyZWdhbmRvSGFiaWxpdGFjYW8gPSBmYWxzZTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmNhdGNoKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGFiaWxpdGFyTm90aWZpY2Fjb2VzID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhcnJlZ2FuZG9IYWJpbGl0YWNhbyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZXNldGFyTm90aWZpY2Fjb2VzKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYnVzY2FyTm90aWZpY2Fjb2VzKGFicmlyUG9wdXBTZVRpdmVyTm92YXM6IGJvb2xlYW4sIGFicmlyUG9wdXBTZW1wcmU6IGJvb2xlYW4sIGZvcmNlUmVmcmVzaDogYm9vbGVhbikge1xyXG4gICAgICAgIGlmICghdGhpcy5oYWJpbGl0YXJOb3RpZmljYWNvZXMgfHwgIXRoaXMucHJpbmNpcGFsLmlzQXV0aGVudGljYXRlZCgpIHx8IHRoaXMuY2FycmVnYW5kb05vdGlmaWNhY29lcykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5jYXJyZWdhbmRvTm90aWZpY2Fjb2VzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYWJyaXJQb3B1cFNlbXByZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWJyaXJQb3B1cFF1YW5kb0NhcnJlZ2FyID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChhYnJpclBvcHVwU2VUaXZlck5vdmFzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hYnJpclBvcHVwU2VUaXZlck5vdmFzUXVhbmRvQ2FycmVnYXIgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jYXJyZWdhbmRvTm90aWZpY2Fjb2VzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLm5vdGlmaWNhY29lc1NlcnZpY2UuYnVzY2FyTm90aWZpY2Fjb2VzKGZvcmNlUmVmcmVzaClcclxuICAgICAgICAgICAgLnRoZW4obGlzdGEgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYWNvZXMgPSBsaXN0YSA/IGxpc3RhIDogW107XHJcbiAgICAgICAgICAgICAgICB0aGlzLnF1YW50aWRhZGVOb3RpZmljYWNvZXNOb3ZhcyA9IHRoaXMuY29udGFyTm92YXNOb3RpZmljYWNvZXModGhpcy5ub3RpZmljYWNvZXMpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcG9zc3VpTm92YXMgPSB0aGlzLnF1YW50aWRhZGVOb3RpZmljYWNvZXNOb3ZhcyA+IDA7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkZXZlQWJyaXJTZVRpdmVyTm92YXMgPSAoYWJyaXJQb3B1cFNlVGl2ZXJOb3ZhcyB8fCB0aGlzLmFicmlyUG9wdXBTZVRpdmVyTm92YXNRdWFuZG9DYXJyZWdhcilcclxuICAgICAgICAgICAgICAgICAgICAmJiBwb3NzdWlOb3Zhc1xyXG4gICAgICAgICAgICAgICAgICAgICYmICF0aGlzLm9wZW5lZE9uVGhpc0xvZ2luO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZGV2ZUFicmlyID0gZGV2ZUFicmlyU2VUaXZlck5vdmFzXHJcbiAgICAgICAgICAgICAgICAgICAgfHwgYWJyaXJQb3B1cFNlbXByZVxyXG4gICAgICAgICAgICAgICAgICAgIHx8IHRoaXMuYWJyaXJQb3B1cFF1YW5kb0NhcnJlZ2FyO1xyXG4gICAgICAgICAgICAgICAgaWYgKGRldmVBYnJpcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChkZXZlQWJyaXJTZVRpdmVyTm92YXMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcGVuZWRPblRoaXNMb2dpbiA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWJyaXJQb3B1cFF1YW5kb0NhcnJlZ2FyID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hYnJpclBvcHVwU2VUaXZlck5vdmFzUXVhbmRvQ2FycmVnYXIgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFicmlyUG9wdXBOb3RpZmljYWNvZXModGhpcy5ub3RpZmljYWNvZXMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jYXJyZWdhbmRvTm90aWZpY2Fjb2VzID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYXJyZWdhbmRvTm90aWZpY2Fjb2VzID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnV0aWxNZW5zYWdlbS5zaG93RXJyb3JEZXRhaWxlZChlcnIpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFicmlyUG9wdXBOb3RpZmljYWNvZXMobm90aWZpY2Fjb2VzOiBOb3RpZmljYWNhb1tdKSB7XHJcbiAgICAgICAgY29uc3QgbW9kYWxSZWYgPSB0aGlzLm1vZGFsU2VydmljZS5vcGVuKE5vdGlmaWNhY29lc1BvcHVwQ29tcG9uZW50LCB7XHJcbiAgICAgICAgICAgIHNpemU6ICdsZycsXHJcbiAgICAgICAgICAgIGJhY2tkcm9wOiAnc3RhdGljJ1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNvbnN0IHRlbGFOb3RpZmljYWNvZXNQb3B1cDogTm90aWZpY2Fjb2VzUG9wdXBDb21wb25lbnQgPSBtb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZTtcclxuICAgICAgICB0ZWxhTm90aWZpY2Fjb2VzUG9wdXAuaW5pY2lhcihub3RpZmljYWNvZXMpO1xyXG4gICAgICAgIG1vZGFsUmVmLnJlc3VsdC50aGVuKChyZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQuYXR1YWxpemFyKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJ1c2Nhck5vdGlmaWNhY29lcyhmYWxzZSwgZmFsc2UsIHRydWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjb250YXJOb3Zhc05vdGlmaWNhY29lcyhub3RpZmljYWNvZXM6IE5vdGlmaWNhY2FvW10pOiBudW1iZXIge1xyXG4gICAgICAgIGlmICghbm90aWZpY2Fjb2VzKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbm90aWZpY2Fjb2VzLmZpbHRlcihpdGVtID0+IHRoaXMuaXNOb3ZhTm90aWZpY2FjYW8oaXRlbSkpLmxlbmd0aDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGlzTm92YU5vdGlmaWNhY2FvKG5vdGlmaWNhY2FvOiBOb3RpZmljYWNhbyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGNvbnN0IHZhbHVlOiBhbnkgPSBub3RpZmljYWNhbyBhcyBhbnk7XHJcbiAgICAgICAgcmV0dXJuICF2YWx1ZSB8fCB2YWx1ZS5kYXRhTmFvRXhpYmlyID09PSBudWxsIHx8IHZhbHVlLmRhdGFOYW9FeGliaXIgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZS5kYXRhTmFvRXhpYmlyID09PSAnJztcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHJlc2V0YXJOb3RpZmljYWNvZXMoKSB7XHJcbiAgICAgICAgdGhpcy5ub3RpZmljYWNvZXMgPSBbXTtcclxuICAgICAgICB0aGlzLnF1YW50aWRhZGVOb3RpZmljYWNvZXNOb3ZhcyA9IDA7XHJcbiAgICAgICAgdGhpcy5vcGVuZWRPblRoaXNMb2dpbiA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuYWJyaXJQb3B1cFF1YW5kb0NhcnJlZ2FyID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5hYnJpclBvcHVwU2VUaXZlck5vdmFzUXVhbmRvQ2FycmVnYXIgPSBmYWxzZTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQgeyBSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcblxyXG5pbXBvcnQgeyBOYXZiYXJDb21wb25lbnQgfSBmcm9tICcuL25hdmJhci5jb21wb25lbnQnO1xyXG5cclxuZXhwb3J0IGNvbnN0IG5hdmJhclJvdXRlOiBSb3V0ZSA9IHtcclxuICAgIHBhdGg6ICcnLFxyXG4gICAgY29tcG9uZW50OiBOYXZiYXJDb21wb25lbnQsXHJcbiAgICBvdXRsZXQ6ICduYXZiYXInXHJcbn07XHJcbiIsImltcG9ydCB7Q29tcG9uZW50LCBPbkluaXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlU25hcHNob3QsIE5hdmlnYXRpb25FbmQsIFJvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHtKaGlMYW5ndWFnZUhlbHBlcn0gZnJvbSAnLi4vLi4vbGFuZ3VhZ2UvbGFuZ3VhZ2UuaGVscGVyJztcclxuaW1wb3J0IHtTZXNzaW9uU3RvcmFnZVNlcnZpY2V9IGZyb20gXCJuZ3gtd2Vic3RvcmFnZVwiO1xyXG5pbXBvcnQge0xvY2tQYWdlLCBVdGlsRnVuY3Rpb25zfSBmcm9tICcuLi8uLi91dGlsJztcclxuaW1wb3J0IHtPcHRpb25zUHJvdmlkZXJ9IGZyb20gJy4uLy4uL3V0aWwvb3B0aW9ucy1wcm92aWRlcic7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnamhpLW1haW4nLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL21haW4uY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJ21haW4uc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBKaGlNYWluQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgamhpTGFuZ3VhZ2VIZWxwZXI6IEpoaUxhbmd1YWdlSGVscGVyLCBwcml2YXRlIHJvdXRlcjogUm91dGVyLCBwcml2YXRlIHNlc3Npb25TdG9yYWdlOiBTZXNzaW9uU3RvcmFnZVNlcnZpY2UsIHByaXZhdGUgcHJvdmlkZXI6IE9wdGlvbnNQcm92aWRlcikge31cclxuXHJcbiAgICBwcml2YXRlIGdldFBhZ2VUaXRsZShyb3V0ZVNuYXBzaG90OiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90KSB7XHJcbiAgICAgICAgbGV0IHRpdGxlOiBzdHJpbmcgPSByb3V0ZVNuYXBzaG90LmRhdGEgJiYgcm91dGVTbmFwc2hvdC5kYXRhWydwYWdlVGl0bGUnXSA/IHJvdXRlU25hcHNob3QuZGF0YVsncGFnZVRpdGxlJ10gOiAncG9ydGFsR2F0ZXdheUFwcCc7XHJcbiAgICAgICAgaWYgKHJvdXRlU25hcHNob3QuZmlyc3RDaGlsZCkge1xyXG4gICAgICAgICAgICB0aXRsZSA9IHRoaXMuZ2V0UGFnZVRpdGxlKHJvdXRlU25hcHNob3QuZmlyc3RDaGlsZCkgfHwgdGl0bGU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aXRsZTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLnJvdXRlci5ldmVudHMuc3Vic2NyaWJlKGV2ZW50ID0+IHtcclxuICAgICAgICAgICAgaWYgKGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50LnVybC5pbmRleE9mKCcvYWNjZXNzZGVuaWVkJykgPCAwICYmIGV2ZW50LnVybCAhPT0gJy8nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbG9ja2VkUGFnZTogTG9ja1BhZ2UgPSBMb2NrUGFnZS5yZXRyaWV2ZUZyb21TdG9yYWdlKHRoaXMuc2Vzc2lvblN0b3JhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChVdGlsRnVuY3Rpb25zLmlzVmFsaWRPYmplY3QobG9ja2VkUGFnZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxvY2tlZFBhZ2UuaXNMb2NrZWRQYWdlKHdpbmRvdy5sb2NhdGlvbiwgdGhpcy5wcm92aWRlci5tb2R1bG8pID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVkaXJlY3RQYWdlID0gbG9ja2VkUGFnZS5nZXRSZWRpcmVjdFBhZ2Uod2luZG93LmxvY2F0aW9uLCB0aGlzLnByb3ZpZGVyLm1vZHVsbyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSByZWRpcmVjdFBhZ2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCAyMDApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuamhpTGFuZ3VhZ2VIZWxwZXIudXBkYXRlVGl0bGUodGhpcy5nZXRQYWdlVGl0bGUodGhpcy5yb3V0ZXIucm91dGVyU3RhdGUuc25hcHNob3Qucm9vdCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgRGlyZWN0aXZlLCBPbkluaXQsIEVsZW1lbnRSZWYsIFJlbmRlcmVyLCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlLCBMYW5nQ2hhbmdlRXZlbnQgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuXHJcbkBEaXJlY3RpdmUoe1xyXG4gICAgc2VsZWN0b3I6ICdbamhpQWN0aXZlTWVudV0nXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBY3RpdmVNZW51RGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0IHtcclxuICAgIEBJbnB1dCgpXHJcbiAgICBqaGlBY3RpdmVNZW51OiBzdHJpbmc7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBlbDogRWxlbWVudFJlZiwgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIsIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSkge31cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2Uub25MYW5nQ2hhbmdlLnN1YnNjcmliZSgoZXZlbnQ6IExhbmdDaGFuZ2VFdmVudCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUFjdGl2ZUZsYWcoZXZlbnQubGFuZyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVBY3RpdmVGbGFnKHRoaXMudHJhbnNsYXRlU2VydmljZS5jdXJyZW50TGFuZyk7XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlQWN0aXZlRmxhZyhzZWxlY3RlZExhbmd1YWdlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuamhpQWN0aXZlTWVudSA9PT0gc2VsZWN0ZWRMYW5ndWFnZSkge1xyXG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldEVsZW1lbnRDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsICdhY3RpdmUnLCB0cnVlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldEVsZW1lbnRDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsICdhY3RpdmUnLCBmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFByb2ZpbGVTZXJ2aWNlIH0gZnJvbSAnLi9wcm9maWxlLnNlcnZpY2UnO1xyXG5pbXBvcnQge1Byb2ZpbGVJbmZvfSBmcm9tICcuLi8uLi9tb2RlbC9wcm9maWxlLWluZm8ubW9kZWwnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2poaS1wYWdlLXJpYmJvbicsXHJcbiAgICB0ZW1wbGF0ZTogYDxkaXYgY2xhc3M9XCJyaWJib25cIiAqbmdJZj1cInJpYmJvbkVudlwiPjxhIGhyZWY9XCJcIiBqaGlUcmFuc2xhdGU9XCJnbG9iYWwucmliYm9uLnt7cmliYm9uRW52fX1cIj57e3JpYmJvbkVudn19PC9hPjwvZGl2PmAsXHJcbiAgICBzdHlsZVVybHM6IFsncGFnZS1yaWJib24uc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQYWdlUmliYm9uQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICAgIHByb2ZpbGVJbmZvOiBQcm9maWxlSW5mbztcclxuICAgIHJpYmJvbkVudjogc3RyaW5nO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcHJvZmlsZVNlcnZpY2U6IFByb2ZpbGVTZXJ2aWNlKSB7fVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIHRoaXMucHJvZmlsZVNlcnZpY2UuZ2V0UHJvZmlsZUluZm8oKS50aGVuKHByb2ZpbGVJbmZvID0+IHtcclxuICAgICAgICAgICAgdGhpcy5wcm9maWxlSW5mbyA9IHByb2ZpbGVJbmZvO1xyXG4gICAgICAgICAgICB0aGlzLnJpYmJvbkVudiA9IHByb2ZpbGVJbmZvLnJpYmJvbkVudjtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge0FmdGVyQ29udGVudEluaXQsIENvbXBvbmVudH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7T3B0aW9uc1Byb3ZpZGVyfSBmcm9tICcuLi8uLi91dGlsL29wdGlvbnMtcHJvdmlkZXInO1xyXG5pbXBvcnQge1V0aWxGdW5jdGlvbnN9IGZyb20gXCIuLi8uLi91dGlsXCI7XHJcbmltcG9ydCB7RG9tU2FuaXRpemVyfSBmcm9tIFwiQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3NlclwiO1xyXG5pbXBvcnQge0h0dHBDbGllbnR9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2poaS1mb290ZXInLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2Zvb3Rlci5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnZm9vdGVyLnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRm9vdGVyQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCB7XHJcbiAgICB2ZXJzaW9uOiBzdHJpbmc7XHJcbiAgICBhbm86IG51bWJlcjtcclxuICAgIGV4dHJhSFRNTDogc3RyaW5nO1xyXG4gICAgY2hlY2tlZEhUTUwgPSBmYWxzZTtcclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgb3B0aW9uc1Byb3ZpZGVyOk9wdGlvbnNQcm92aWRlcixcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcclxuICAgICAgICAgICAgICAgIHB1YmxpYyBzYW5pdGl6ZXI6IERvbVNhbml0aXplcikge1xyXG4gICAgICAgIHRoaXMudmVyc2lvbiA9IG9wdGlvbnNQcm92aWRlci52ZXJzaW9uO1xyXG4gICAgICAgIHRoaXMuYW5vID0gbmV3IERhdGUoKS5nZXRGdWxsWWVhcigpO1xyXG4gICAgfVxyXG5cclxuICBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5jaGVja2VkSFRNTCA9PT0gZmFsc2UpIHtcclxuICAgICAgdGhpcy5nZXRIdG1sRm9vdGVyKCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGNoYW5nZUNvbnRlbnRIZWlnaHQoKSB7XHJcbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpe1xyXG4gICAgICBjb25zdCBmb290ZXJIZWlnaHQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnamhpLWZvb3RlcicpLml0ZW0oMCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0O1xyXG4gICAgICBjb25zdCBoZWlndGhTdHlsZSA9ICdjYWxjKDEwMHZoIC0gODBweCAtICcgKyBmb290ZXJIZWlnaHQgKyAncHgpJztcclxuICAgICAgY29uc3QgY29udGVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5jb250YWluZXItZmx1aWQnKSBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgY29udGVudC5zdHlsZS5oZWlnaHQgPSBoZWlndGhTdHlsZTtcclxuICAgICAgY29udGVudC5zdHlsZS5taW5IZWlnaHQgPSBoZWlndGhTdHlsZTtcclxuICAgIH0sIDEwMCk7XHJcbiAgfVxyXG5cclxuICBnZXRIdG1sRm9vdGVyKCk6IFByb21pc2U8YW55PiB7XHJcbiAgICBjb25zdCB1cmwgPSAnL2FwaS9wdWJsaWMvcGFyYW1ldHJvcy1jaGF2ZS12YWxvci8qLyonO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFxyXG4gICAgICAuZ2V0KHVybCwgeyBvYnNlcnZlOiAncmVzcG9uc2UnIH0pXHJcbiAgICAgIC50b1Byb21pc2UoKVxyXG4gICAgICAudGhlbih2YWx1ZSA9PiB7XHJcbiAgICAgICAgdGhpcy5jaGVja2VkSFRNTCA9IHRydWU7XHJcbiAgICAgICAgaWYgKFV0aWxGdW5jdGlvbnMuaXNWYWxpZE9iamVjdCh2YWx1ZS5ib2R5WydNRU5TQUdFTV9IVE1MX0ZPT1RFUiddKSA9PT0gdHJ1ZSAmJlxyXG4gICAgICAgICAgVXRpbEZ1bmN0aW9ucy5pc1ZhbGlkU3RyaW5nT3JBcnJheSh2YWx1ZS5ib2R5WydNRU5TQUdFTV9IVE1MX0ZPT1RFUiddLnZhbG9yKSA9PT0gdHJ1ZVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdGhpcy5leHRyYUhUTUwgPSB2YWx1ZS5ib2R5WydNRU5TQUdFTV9IVE1MX0ZPT1RFUiddLnZhbG9yLnJlcGxhY2UoJ3t7eWVhcn19JywgdGhpcy5hbm8pLnJlcGxhY2UoJ3t7dmVyc2lvbn19JywgdGhpcy52ZXJzaW9uKTtcclxuICAgICAgICAgIC8vdGhpcy5jaGFuZ2VDb250ZW50SGVpZ2h0KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgfSkuY2F0Y2goKCkgPT57XHJcbiAgICAgICAgdGhpcy5jaGVja2VkSFRNTCA9IHRydWU7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcblxyXG59XHJcbiIsImltcG9ydCB7Q1VTVE9NX0VMRU1FTlRTX1NDSEVNQSwgTmdNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1JvdXRlck1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHtlcnJvclJvdXRlfSBmcm9tICcuL2Vycm9yL2Vycm9yLnJvdXRlJztcclxuaW1wb3J0IHtuYXZiYXJSb3V0ZX0gZnJvbSAnLi9uYXZiYXIvbmF2YmFyLnJvdXRlJztcclxuaW1wb3J0IHtFcnJvckNvbXBvbmVudH0gZnJvbSAnLi9lcnJvci9lcnJvci5jb21wb25lbnQnO1xyXG5pbXBvcnQge0NvbW1vbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHtGb3Jtc01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQge05nSmhpcHN0ZXJNb2R1bGV9IGZyb20gJ25nLWpoaXBzdGVyJztcclxuaW1wb3J0IHtQb3J0YWxBbGVydE1vZHVsZX0gZnJvbSAnLi4vYWxlcnQvcG9ydGFsLWFsZXJ0Lm1vZHVsZSc7XHJcbmltcG9ydCB7SmhpTWFpbkNvbXBvbmVudH0gZnJvbSAnLi9tYWluL21haW4uY29tcG9uZW50JztcclxuaW1wb3J0IHtOYXZiYXJDb21wb25lbnR9IGZyb20gJy4vbmF2YmFyL25hdmJhci5jb21wb25lbnQnO1xyXG5pbXBvcnQge0FjdGl2ZU1lbnVEaXJlY3RpdmV9IGZyb20gJy4vbmF2YmFyL2FjdGl2ZS1tZW51LmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7UGFnZVJpYmJvbkNvbXBvbmVudH0gZnJvbSAnLi9wcm9maWxlcy9wYWdlLXJpYmJvbi5jb21wb25lbnQnO1xyXG5pbXBvcnQge05nYk1vZHVsZX0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQge0F1dGhNb2R1bGV9IGZyb20gJy4uL2F1dGgvYXV0aC5tb2R1bGUnO1xyXG5pbXBvcnQge0Zvb3RlckNvbXBvbmVudH0gZnJvbSAnLi9mb290ZXIvZm9vdGVyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7Rm9udEF3ZXNvbWVNb2R1bGV9IGZyb20gJ0Bmb3J0YXdlc29tZS9hbmd1bGFyLWZvbnRhd2Vzb21lJztcclxuaW1wb3J0IHtsaWJyYXJ5fSBmcm9tICdAZm9ydGF3ZXNvbWUvZm9udGF3ZXNvbWUtc3ZnLWNvcmUnO1xyXG5pbXBvcnQge2Zhc30gZnJvbSAnQGZvcnRhd2Vzb21lL2ZyZWUtc29saWQtc3ZnLWljb25zJztcclxuaW1wb3J0IHtPcHRpb25zUHJvdmlkZXJ9IGZyb20gJy4uL3V0aWwvb3B0aW9ucy1wcm92aWRlcic7XHJcbmltcG9ydCB7TG9hZGluZ0Jhckh0dHBDbGllbnRNb2R1bGV9IGZyb20gJ0BuZ3gtbG9hZGluZy1iYXIvaHR0cC1jbGllbnQnO1xuaW1wb3J0IHtKb3lyaWRlTW9kdWxlLCBKb3lyaWRlU3RlcENvbXBvbmVudH0gZnJvbSAnbmd4LWpveXJpZGUnO1xuaW1wb3J0IHtDb29raWVDb25zZW50TW9kdWxlfSBmcm9tICcuLi9jb21wb25lbnRzL2Nvb2tpZS1jb25zZW50L2Nvb2tpZS1jb25zZW50Lm1vZHVsZSc7XG5pbXBvcnQge05vdGlmaWNhY29lc01vZHVsZX0gZnJvbSAnLi4vY29tcG9uZW50cy9ub3RpZmljYWNvZXMvbm90aWZpY2Fjb2VzLm1vZHVsZSc7XG5cclxubGlicmFyeS5hZGQoZmFzKTtcclxuXHJcbmNvbnN0IExBWU9VVF9ST1VURVMgPSBbbmF2YmFyUm91dGUsIC4uLmVycm9yUm91dGVdO1xyXG5cclxuQE5nTW9kdWxlKHtcclxuICAgIGltcG9ydHM6IFtcclxuICAgICAgQXV0aE1vZHVsZSxcclxuICAgICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgICBGb3Jtc01vZHVsZSxcclxuICAgICAgTmdKaGlwc3Rlck1vZHVsZSxcclxuICAgICAgUG9ydGFsQWxlcnRNb2R1bGUsXHJcbiAgICAgIEZvbnRBd2Vzb21lTW9kdWxlLFxyXG4gICAgICBMb2FkaW5nQmFySHR0cENsaWVudE1vZHVsZSxcbiAgICAgIENvb2tpZUNvbnNlbnRNb2R1bGUsXG4gICAgICBOb3RpZmljYWNvZXNNb2R1bGUsXG4gICAgICBOZ2JNb2R1bGUuZm9yUm9vdCgpLFxuICAgICAgUm91dGVyTW9kdWxlLmZvclJvb3QoWy4uLkxBWU9VVF9ST1VURVNdLCB7IHVzZUhhc2g6IHRydWUsIGVuYWJsZVRyYWNpbmc6IHRydWUgfSksXHJcbiAgICAgIEpveXJpZGVNb2R1bGUuZm9yUm9vdCgpXHJcbiAgICBdLFxyXG4gICAgZGVjbGFyYXRpb25zOiBbXHJcbiAgICAgIEVycm9yQ29tcG9uZW50LFxyXG4gICAgICBKaGlNYWluQ29tcG9uZW50LFxyXG4gICAgICBOYXZiYXJDb21wb25lbnQsXHJcbiAgICAgIEZvb3RlckNvbXBvbmVudCxcclxuICAgICAgQWN0aXZlTWVudURpcmVjdGl2ZSxcclxuICAgICAgUGFnZVJpYmJvbkNvbXBvbmVudFxyXG4gICAgXSxcclxuICAgIGV4cG9ydHM6IFtcclxuICAgICAgUm91dGVyTW9kdWxlLFxyXG4gICAgICBFcnJvckNvbXBvbmVudCxcclxuICAgICAgSmhpTWFpbkNvbXBvbmVudCxcclxuICAgICAgTmF2YmFyQ29tcG9uZW50LFxyXG4gICAgICBGb290ZXJDb21wb25lbnQsXHJcbiAgICAgIEFjdGl2ZU1lbnVEaXJlY3RpdmUsXHJcbiAgICAgIFBhZ2VSaWJib25Db21wb25lbnRcclxuICAgIF0sXHJcbiAgICBwcm92aWRlcnM6IFtcclxuICAgICAgT3B0aW9uc1Byb3ZpZGVyXHJcbiAgICBdLFxyXG4gICAgZW50cnlDb21wb25lbnRzOiBbSm95cmlkZVN0ZXBDb21wb25lbnRdLFxyXG4gICAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBMYXlvdXRzTW9kdWxlIHtcclxufVxyXG4iLCJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0h0dHBDbGllbnQsIEh0dHBQYXJhbXN9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcclxuXHJcbmNvbnN0IFNFUlZFUl9BUElfVVJMID0gJy4vJztcclxuXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXHJcbmV4cG9ydCBjbGFzcyBBY3RpdmF0ZVNlcnZpY2Uge1xyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50KSB7fVxyXG5cclxuICAgIGdldChrZXk6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoU0VSVkVSX0FQSV9VUkwgKyAnYXBpL2FjdGl2YXRlJywge1xyXG4gICAgICAgICAgICBwYXJhbXM6IG5ldyBIdHRwUGFyYW1zKCkuc2V0KCdrZXknLCBrZXkpXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTmdiTW9kYWxSZWYgfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuXHJcbmltcG9ydCB7IEFjdGl2YXRlU2VydmljZSB9IGZyb20gJy4vYWN0aXZhdGUuc2VydmljZSc7XHJcbmltcG9ydCB7TG9naW5Nb2RhbFNlcnZpY2V9IGZyb20gJy4uLy4uL2xvZ2luL2xvZ2luLW1vZGFsLnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2poaS1hY3RpdmF0ZScsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vYWN0aXZhdGUuY29tcG9uZW50Lmh0bWwnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBY3RpdmF0ZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgICBlcnJvcjogc3RyaW5nO1xyXG4gICAgc3VjY2Vzczogc3RyaW5nO1xyXG4gICAgbW9kYWxSZWY6IE5nYk1vZGFsUmVmO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICBwcml2YXRlIGFjdGl2YXRlU2VydmljZTogQWN0aXZhdGVTZXJ2aWNlLFxyXG4gICAgICBwcml2YXRlIGxvZ2luTW9kYWxTZXJ2aWNlOiBMb2dpbk1vZGFsU2VydmljZSxcclxuICAgICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGVcclxuICAgICkge31cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLnJvdXRlLnF1ZXJ5UGFyYW1zLnN1YnNjcmliZShwYXJhbXMgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmFjdGl2YXRlU2VydmljZS5nZXQocGFyYW1zWydrZXknXSkuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgICAgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3VjY2VzcyA9ICdPSyc7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3VjY2VzcyA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9ICdFUlJPUic7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgbG9naW4oKSB7XHJcbiAgICAgICAgdGhpcy5tb2RhbFJlZiA9IHRoaXMubG9naW5Nb2RhbFNlcnZpY2Uub3BlbigpO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7IFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuXHJcbmltcG9ydCB7IEFjdGl2YXRlQ29tcG9uZW50IH0gZnJvbSAnLi9hY3RpdmF0ZS5jb21wb25lbnQnO1xyXG5cclxuZXhwb3J0IGNvbnN0IGFjdGl2YXRlUm91dGU6IFJvdXRlID0ge1xyXG4gICAgcGF0aDogJ2FjdGl2YXRlJyxcclxuICAgIGNvbXBvbmVudDogQWN0aXZhdGVDb21wb25lbnQsXHJcbiAgICBkYXRhOiB7XHJcbiAgICAgICAgYXV0aG9yaXRpZXM6IFtdLFxyXG4gICAgICAgIHBhZ2VUaXRsZTogJ0F0aXZhw4PCp8ODwqNvJ1xyXG4gICAgfVxyXG59O1xyXG4iLCJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0h0dHBDbGllbnR9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcclxuXHJcbmNvbnN0IFNFUlZFUl9BUElfVVJMID0gJy4vJztcclxuXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXHJcbmV4cG9ydCBjbGFzcyBQYXNzd29yZFNlcnZpY2Uge1xyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50KSB7fVxyXG5cclxuICAgIHNhdmUobmV3UGFzc3dvcmQ6IHN0cmluZywgY3VycmVudFBhc3N3b3JkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChTRVJWRVJfQVBJX1VSTCArICdhcGkvYWNjb3VudC9jaGFuZ2UtcGFzc3dvcmQnLCB7IGN1cnJlbnRQYXNzd29yZCwgbmV3UGFzc3dvcmQgfSk7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUGFzc3dvcmRTZXJ2aWNlIH0gZnJvbSAnLi9wYXNzd29yZC5zZXJ2aWNlJztcclxuaW1wb3J0IHtQcmluY2lwYWx9IGZyb20gJy4uLy4uL2F1dGgvcHJpbmNpcGFsLnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2poaS1wYXNzd29yZCcsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vcGFzc3dvcmQuY29tcG9uZW50Lmh0bWwnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQYXNzd29yZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgICBkb05vdE1hdGNoOiBzdHJpbmc7XHJcbiAgICBlcnJvcjogc3RyaW5nO1xyXG4gICAgc3VjY2Vzczogc3RyaW5nO1xyXG4gICAgYWNjb3VudDogYW55O1xyXG4gICAgY3VycmVudFBhc3N3b3JkOiBzdHJpbmc7XHJcbiAgICBuZXdQYXNzd29yZDogc3RyaW5nO1xyXG4gICAgY29uZmlybVBhc3N3b3JkOiBzdHJpbmc7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgIHByaXZhdGUgcGFzc3dvcmRTZXJ2aWNlOiBQYXNzd29yZFNlcnZpY2UsXHJcbiAgICAgIHByaXZhdGUgcHJpbmNpcGFsOiBQcmluY2lwYWxcclxuICAgICkge31cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLnByaW5jaXBhbC5pZGVudGl0eSgpLnRoZW4oYWNjb3VudCA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuYWNjb3VudCA9IGFjY291bnQ7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY2hhbmdlUGFzc3dvcmQoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMubmV3UGFzc3dvcmQgIT09IHRoaXMuY29uZmlybVBhc3N3b3JkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLnN1Y2Nlc3MgPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLmRvTm90TWF0Y2ggPSAnRVJST1InO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZG9Ob3RNYXRjaCA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMucGFzc3dvcmRTZXJ2aWNlLnNhdmUodGhpcy5uZXdQYXNzd29yZCwgdGhpcy5jdXJyZW50UGFzc3dvcmQpLnN1YnNjcmliZShcclxuICAgICAgICAgICAgICAgICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN1Y2Nlc3MgPSAnT0snO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN1Y2Nlc3MgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSAnRVJST1InO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge1JvdXRlfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5cclxuaW1wb3J0IHtQYXNzd29yZENvbXBvbmVudH0gZnJvbSAnLi9wYXNzd29yZC5jb21wb25lbnQnO1xyXG5pbXBvcnQge1VzZXJSb3V0ZUFjY2Vzc1NlcnZpY2V9IGZyb20gJy4uLy4uL2F1dGgvdXNlci1yb3V0ZS1hY2Nlc3Mtc2VydmljZSc7XHJcblxyXG5leHBvcnQgY29uc3QgcGFzc3dvcmRSb3V0ZTogUm91dGUgPSB7XHJcbiAgICBwYXRoOiAncGFzc3dvcmQnLFxyXG4gICAgY29tcG9uZW50OiBQYXNzd29yZENvbXBvbmVudCxcclxuICAgIGRhdGE6IHtcclxuICAgICAgICBhdXRob3JpdGllczogWydST0xFX1BPUlRBTCcsJ1JPTEVfQURNSU4nXSxcclxuICAgICAgICBwYWdlVGl0bGU6ICdTZW5oYSdcclxuICAgIH0sXHJcbiAgICBjYW5BY3RpdmF0ZTogW1VzZXJSb3V0ZUFjY2Vzc1NlcnZpY2VdXHJcbn07XHJcbiIsImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7SHR0cENsaWVudH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gJ3J4anMnO1xyXG5cclxuY29uc3QgU0VSVkVSX0FQSV9VUkwgPSAnLi8nO1xyXG5cclxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcclxuZXhwb3J0IGNsYXNzIFBhc3N3b3JkUmVzZXRGaW5pc2hTZXJ2aWNlIHtcclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCkge31cclxuXHJcbiAgICBzYXZlKGtleUFuZFBhc3N3b3JkOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChTRVJWRVJfQVBJX1VSTCArICdhcGkvYWNjb3VudC9yZXNldC1wYXNzd29yZC9maW5pc2gnLCBrZXlBbmRQYXNzd29yZCk7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIE9uSW5pdCwgUmVuZGVyZXJ9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge05nYk1vZGFsUmVmfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcbmltcG9ydCB7QWN0aXZhdGVkUm91dGV9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7UGFzc3dvcmRSZXNldEZpbmlzaFNlcnZpY2V9IGZyb20gJy4vcGFzc3dvcmQtcmVzZXQtZmluaXNoLnNlcnZpY2UnO1xyXG5pbXBvcnQge0xvZ2luTW9kYWxTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9sb2dpbi9sb2dpbi1tb2RhbC5zZXJ2aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdqaGktcGFzc3dvcmQtcmVzZXQtZmluaXNoJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9wYXNzd29yZC1yZXNldC1maW5pc2guY29tcG9uZW50Lmh0bWwnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQYXNzd29yZFJlc2V0RmluaXNoQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0IHtcclxuICAgIGNvbmZpcm1QYXNzd29yZDogc3RyaW5nO1xyXG4gICAgZG9Ob3RNYXRjaDogc3RyaW5nO1xyXG4gICAgZXJyb3I6IHN0cmluZztcclxuICAgIGtleU1pc3Npbmc6IGJvb2xlYW47XHJcbiAgICByZXNldEFjY291bnQ6IGFueTtcclxuICAgIHN1Y2Nlc3M6IHN0cmluZztcclxuICAgIG1vZGFsUmVmOiBOZ2JNb2RhbFJlZjtcclxuICAgIGtleTogc3RyaW5nO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgcGFzc3dvcmRSZXNldEZpbmlzaFNlcnZpY2U6IFBhc3N3b3JkUmVzZXRGaW5pc2hTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgbG9naW5Nb2RhbFNlcnZpY2U6IExvZ2luTW9kYWxTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZixcclxuICAgICAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlclxyXG4gICAgKSB7fVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIHRoaXMucm91dGUucXVlcnlQYXJhbXMuc3Vic2NyaWJlKHBhcmFtcyA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMua2V5ID0gcGFyYW1zWydrZXknXTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLnJlc2V0QWNjb3VudCA9IHt9O1xyXG4gICAgICAgIHRoaXMua2V5TWlzc2luZyA9ICF0aGlzLmtleTtcclxuICAgIH1cclxuXHJcbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJyNwYXNzd29yZCcpICE9IG51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5pbnZva2VFbGVtZW50TWV0aG9kKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJyNwYXNzd29yZCcpLCAnZm9jdXMnLCBbXSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZpbmlzaFJlc2V0KCkge1xyXG4gICAgICAgIHRoaXMuZG9Ob3RNYXRjaCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5lcnJvciA9IG51bGw7XHJcbiAgICAgICAgaWYgKHRoaXMucmVzZXRBY2NvdW50LnBhc3N3b3JkICE9PSB0aGlzLmNvbmZpcm1QYXNzd29yZCkge1xyXG4gICAgICAgICAgICB0aGlzLmRvTm90TWF0Y2ggPSAnRVJST1InO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucGFzc3dvcmRSZXNldEZpbmlzaFNlcnZpY2Uuc2F2ZSh7IGtleTogdGhpcy5rZXksIG5ld1Bhc3N3b3JkOiB0aGlzLnJlc2V0QWNjb3VudC5wYXNzd29yZCB9KS5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAgICAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWNjZXNzID0gJ09LJztcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWNjZXNzID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gJ0VSUk9SJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbG9naW4oKSB7XHJcbiAgICAgICAgdGhpcy5tb2RhbFJlZiA9IHRoaXMubG9naW5Nb2RhbFNlcnZpY2Uub3BlbigpO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7IFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuXHJcbmltcG9ydCB7IFBhc3N3b3JkUmVzZXRGaW5pc2hDb21wb25lbnQgfSBmcm9tICcuL3Bhc3N3b3JkLXJlc2V0LWZpbmlzaC5jb21wb25lbnQnO1xyXG5cclxuZXhwb3J0IGNvbnN0IHBhc3N3b3JkUmVzZXRGaW5pc2hSb3V0ZTogUm91dGUgPSB7XHJcbiAgICBwYXRoOiAncmVzZXQvZmluaXNoJyxcclxuICAgIGNvbXBvbmVudDogUGFzc3dvcmRSZXNldEZpbmlzaENvbXBvbmVudCxcclxuICAgIGRhdGE6IHtcclxuICAgICAgICBhdXRob3JpdGllczogW10sXHJcbiAgICAgICAgcGFnZVRpdGxlOiAnU2VuaGEnXHJcbiAgICB9XHJcbn07XHJcbiIsImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7SHR0cENsaWVudH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gJ3J4anMnO1xyXG5cclxuY29uc3QgU0VSVkVSX0FQSV9VUkwgPSAnLi8nO1xyXG5cclxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcclxuZXhwb3J0IGNsYXNzIFBhc3N3b3JkUmVzZXRJbml0U2VydmljZSB7XHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50KSB7fVxyXG5cclxuICBzYXZlVHdvRmFjdG9yKHJlc2V0QWNjb3VudDogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChTRVJWRVJfQVBJX1VSTCArICdhcGkvYWNjb3VudC9yZXNldC1wYXNzd29yZC10d29mYWN0b3IvaW5pdCcsIHJlc2V0QWNjb3VudCk7XHJcbiAgfVxyXG5cclxuICBzYXZlKG1haWw6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoU0VSVkVSX0FQSV9VUkwgKyAnYXBpL2FjY291bnQvcmVzZXQtcGFzc3dvcmQvaW5pdCcsIG1haWwsIHsgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyB9KTtcclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHtBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIE9uSW5pdCwgUmVuZGVyZXJ9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1Bhc3N3b3JkUmVzZXRJbml0U2VydmljZX0gZnJvbSAnLi9wYXNzd29yZC1yZXNldC1pbml0LnNlcnZpY2UnO1xyXG5pbXBvcnQge0VNQUlMX05PVF9GT1VORF9UWVBFfSBmcm9tICcuLi8uLi8uLi91dGlsL2Vycm9yLmNvbnN0YW50cyc7XHJcbmltcG9ydCB7T3B0aW9uc1Byb3ZpZGVyfSBmcm9tICcuLi8uLi8uLi91dGlsL29wdGlvbnMtcHJvdmlkZXInO1xyXG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7VXRpbEZ1bmN0aW9uc30gZnJvbSBcIi4uLy4uLy4uL3V0aWxcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnamhpLXBhc3N3b3JkLXJlc2V0LWluaXQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9wYXNzd29yZC1yZXNldC1pbml0LmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgUGFzc3dvcmRSZXNldEluaXRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xyXG4gIGVycm9yOiBzdHJpbmc7XHJcbiAgZXJyb3JFbWFpbE5vdEV4aXN0czogc3RyaW5nO1xyXG4gIHJlc2V0QWNjb3VudDogYW55O1xyXG4gIHR3b0ZhY3RvcjogYm9vbGVhbjtcclxuICByZXNldEJ5TG9naW5PckVtYWlsOiBib29sZWFuO1xyXG4gIHN1Y2Nlc3M6IHN0cmluZztcclxuICBlbWFpbFN1Y2Vzczogc3RyaW5nO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcGFzc3dvcmRSZXNldEluaXRTZXJ2aWNlOiBQYXNzd29yZFJlc2V0SW5pdFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG9wdGlvbnNQcm92aWRlcjogT3B0aW9uc1Byb3ZpZGVyLFxyXG4gICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxyXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXJcclxuICApIHtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5yZXNldEFjY291bnQgPSB7fTtcclxuICAgIHRoaXMudHdvRmFjdG9yID0gdGhpcy5vcHRpb25zUHJvdmlkZXIudHdvRmFjdG9yO1xyXG4gICAgdGhpcy5yZXNldEJ5TG9naW5PckVtYWlsID0gdGhpcy5vcHRpb25zUHJvdmlkZXIucmVzZXRCeUxvZ2luT3JFbWFpbDtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIHRoaXMucmVuZGVyZXIuaW52b2tlRWxlbWVudE1ldGhvZCh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcjZW1haWxJbnB1dCcpLCAnZm9jdXMnLCBbXSk7XHJcbiAgfVxyXG5cclxuICByZXF1ZXN0UmVzZXQoKSB7XHJcbiAgICB0aGlzLmVycm9yID0gbnVsbDtcclxuICAgIHRoaXMuZXJyb3JFbWFpbE5vdEV4aXN0cyA9IG51bGw7XHJcblxyXG4gICAgbGV0IHJlc3VsdDogT2JzZXJ2YWJsZTxhbnk+O1xyXG5cclxuICAgIGlmICh0aGlzLnR3b0ZhY3Rvcikge1xyXG4gICAgICByZXN1bHQgPSB0aGlzLnBhc3N3b3JkUmVzZXRJbml0U2VydmljZS5zYXZlVHdvRmFjdG9yKHRoaXMucmVzZXRBY2NvdW50KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJlc3VsdCA9IHRoaXMucGFzc3dvcmRSZXNldEluaXRTZXJ2aWNlLnNhdmUodGhpcy5yZXNldEFjY291bnQuZW1haWwpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlc3VsdC5zdWJzY3JpYmUoXHJcbiAgICAgIHJlc3BvbnNlID0+IHtcclxuICAgICAgICBpZiAoVXRpbEZ1bmN0aW9ucy5pc1ZhbGlkT2JqZWN0KHJlc3BvbnNlLmJvZHkpID09PSB0cnVlICYmIFV0aWxGdW5jdGlvbnMuaXNWYWxpZFN0cmluZ09yQXJyYXkocmVzcG9uc2UuYm9keS5lbWFpbCkpe1xyXG4gICAgICAgICAgdGhpcy5lbWFpbFN1Y2VzcyA9ICcgKCcgKyByZXNwb25zZS5ib2R5LmVtYWlsICsgJyknO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnN1Y2Nlc3MgPSAnT0snO1xyXG4gICAgICB9LFxyXG4gICAgICByZXNwb25zZSA9PiB7XHJcbiAgICAgICAgdGhpcy5zdWNjZXNzID0gbnVsbDtcclxuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MDAgJiYgcmVzcG9uc2UuZXJyb3IudHlwZSA9PT0gRU1BSUxfTk9UX0ZPVU5EX1RZUEUpIHtcclxuICAgICAgICAgIHRoaXMuZXJyb3JFbWFpbE5vdEV4aXN0cyA9ICdFUlJPUic7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuZXJyb3IgPSAnRVJST1InO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5cclxuaW1wb3J0IHsgUGFzc3dvcmRSZXNldEluaXRDb21wb25lbnQgfSBmcm9tICcuL3Bhc3N3b3JkLXJlc2V0LWluaXQuY29tcG9uZW50JztcclxuXHJcbmV4cG9ydCBjb25zdCBwYXNzd29yZFJlc2V0SW5pdFJvdXRlOiBSb3V0ZSA9IHtcclxuICAgIHBhdGg6ICdyZXNldC9yZXF1ZXN0JyxcclxuICAgIGNvbXBvbmVudDogUGFzc3dvcmRSZXNldEluaXRDb21wb25lbnQsXHJcbiAgICBkYXRhOiB7XHJcbiAgICAgICAgYXV0aG9yaXRpZXM6IFtdLFxyXG4gICAgICAgIHBhZ2VUaXRsZTogJ1NlbmhhJ1xyXG4gICAgfVxyXG59O1xyXG4iLCJpbXBvcnQge0NvbXBvbmVudCwgT25Jbml0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtKaGlMYW5ndWFnZVNlcnZpY2V9IGZyb20gJ25nLWpoaXBzdGVyJztcclxuaW1wb3J0IHtBY2NvdW50U2VydmljZX0gZnJvbSAnLi4vLi4vYXV0aC9hY2NvdW50LnNlcnZpY2UnO1xyXG5pbXBvcnQge1ByaW5jaXBhbH0gZnJvbSAnLi4vLi4vYXV0aC9wcmluY2lwYWwuc2VydmljZSc7XHJcbmltcG9ydCB7SmhpTGFuZ3VhZ2VIZWxwZXJ9IGZyb20gJy4uLy4uL2xhbmd1YWdlL2xhbmd1YWdlLmhlbHBlcic7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnamhpLXNldHRpbmdzJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9zZXR0aW5ncy5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFNldHRpbmdzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICAgIGVycm9yOiBzdHJpbmc7XHJcbiAgICBzdWNjZXNzOiBzdHJpbmc7XHJcbiAgICBzZXR0aW5nc0FjY291bnQ6IGFueTtcclxuICAgIGxhbmd1YWdlczogYW55W107XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBhY2NvdW50OiBBY2NvdW50U2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHByaW5jaXBhbDogUHJpbmNpcGFsLFxyXG4gICAgICAgIHByaXZhdGUgbGFuZ3VhZ2VTZXJ2aWNlOiBKaGlMYW5ndWFnZVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBsYW5ndWFnZUhlbHBlcjogSmhpTGFuZ3VhZ2VIZWxwZXJcclxuICAgICkge31cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLnByaW5jaXBhbC5pZGVudGl0eSgpLnRoZW4oYWNjb3VudCA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZ3NBY2NvdW50ID0gdGhpcy5jb3B5QWNjb3VudChhY2NvdW50KTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmxhbmd1YWdlSGVscGVyLmdldEFsbCgpLnRoZW4obGFuZ3VhZ2VzID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sYW5ndWFnZXMgPSBsYW5ndWFnZXM7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2F2ZSgpIHtcclxuICAgICAgICB0aGlzLmFjY291bnQuc2F2ZSh0aGlzLnNldHRpbmdzQWNjb3VudCkuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3VjY2VzcyA9ICdPSyc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnByaW5jaXBhbC5pZGVudGl0eSh0cnVlKS50aGVuKGFjY291bnQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZ3NBY2NvdW50ID0gdGhpcy5jb3B5QWNjb3VudChhY2NvdW50KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sYW5ndWFnZVNlcnZpY2UuZ2V0Q3VycmVudCgpLnRoZW4oY3VycmVudCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3NBY2NvdW50LmxhbmdLZXkgIT09IGN1cnJlbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sYW5ndWFnZVNlcnZpY2UuY2hhbmdlTGFuZ3VhZ2UodGhpcy5zZXR0aW5nc0FjY291bnQubGFuZ0tleSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3VjY2VzcyA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gJ0VSUk9SJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgY29weUFjY291bnQoYWNjb3VudCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGFjdGl2YXRlZDogYWNjb3VudC5hY3RpdmF0ZWQsXHJcbiAgICAgICAgICAgIGVtYWlsOiBhY2NvdW50LmVtYWlsLFxyXG4gICAgICAgICAgICBmaXJzdE5hbWU6IGFjY291bnQuZmlyc3ROYW1lLFxyXG4gICAgICAgICAgICBsYW5nS2V5OiBhY2NvdW50LmxhbmdLZXksXHJcbiAgICAgICAgICAgIGxhc3ROYW1lOiBhY2NvdW50Lmxhc3ROYW1lLFxyXG4gICAgICAgICAgICBsb2dpbjogYWNjb3VudC5sb2dpbixcclxuICAgICAgICAgICAgaW1hZ2VVcmw6IGFjY291bnQuaW1hZ2VVcmxcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7Um91dGV9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcblxyXG5pbXBvcnQge1NldHRpbmdzQ29tcG9uZW50fSBmcm9tICcuL3NldHRpbmdzLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7VXNlclJvdXRlQWNjZXNzU2VydmljZX0gZnJvbSAnLi4vLi4vYXV0aC91c2VyLXJvdXRlLWFjY2Vzcy1zZXJ2aWNlJztcclxuXHJcbmV4cG9ydCBjb25zdCBzZXR0aW5nc1JvdXRlOiBSb3V0ZSA9IHtcclxuICAgIHBhdGg6ICdzZXR0aW5ncycsXHJcbiAgICBjb21wb25lbnQ6IFNldHRpbmdzQ29tcG9uZW50LFxyXG4gICAgZGF0YToge1xyXG4gICAgICAgIGF1dGhvcml0aWVzOiBbJ1JPTEVfUE9SVEFMJywgJ1JPTEVfQURNSU4nXSxcclxuICAgICAgICBwYWdlVGl0bGU6ICdDb25maWd1cmHDg8Knw4PCo28nXHJcbiAgICB9LFxyXG4gICAgY2FuQWN0aXZhdGU6IFtVc2VyUm91dGVBY2Nlc3NTZXJ2aWNlXVxyXG59O1xyXG4iLCJpbXBvcnQge1JvdXRlc30gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHthY3RpdmF0ZVJvdXRlfSBmcm9tICcuL2FjdGl2YXRlL2FjdGl2YXRlLnJvdXRlJztcclxuaW1wb3J0IHtwYXNzd29yZFJvdXRlfSBmcm9tICcuL3Bhc3N3b3JkL3Bhc3N3b3JkLnJvdXRlJztcclxuaW1wb3J0IHtwYXNzd29yZFJlc2V0RmluaXNoUm91dGV9IGZyb20gJy4vcGFzc3dvcmQtcmVzZXQvZmluaXNoL3Bhc3N3b3JkLXJlc2V0LWZpbmlzaC5yb3V0ZSc7XHJcbmltcG9ydCB7cGFzc3dvcmRSZXNldEluaXRSb3V0ZX0gZnJvbSAnLi9wYXNzd29yZC1yZXNldC9pbml0L3Bhc3N3b3JkLXJlc2V0LWluaXQucm91dGUnO1xyXG5pbXBvcnQge3NldHRpbmdzUm91dGV9IGZyb20gJy4vc2V0dGluZ3Mvc2V0dGluZ3Mucm91dGUnO1xyXG5cclxuY29uc3QgQUNDT1VOVF9ST1VURVMgPSBbYWN0aXZhdGVSb3V0ZSwgcGFzc3dvcmRSb3V0ZSwgcGFzc3dvcmRSZXNldEZpbmlzaFJvdXRlLCBwYXNzd29yZFJlc2V0SW5pdFJvdXRlLCBzZXR0aW5nc1JvdXRlXTtcclxuXHJcbmV4cG9ydCBjb25zdCBhY2NvdW50U3RhdGU6IFJvdXRlcyA9IFtcclxuICAgIHtcclxuICAgICAgICBwYXRoOiAnJyxcclxuICAgICAgICBjaGlsZHJlbjogQUNDT1VOVF9ST1VURVNcclxuICAgIH1cclxuXTtcclxuIiwiaW1wb3J0IHtDVVNUT01fRUxFTUVOVFNfU0NIRU1BLCBOZ01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7Um91dGVyTW9kdWxlfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQge05nSmhpcHN0ZXJNb2R1bGV9IGZyb20gJ25nLWpoaXBzdGVyJztcclxuaW1wb3J0IHtGb3Jtc01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQge0NvbW1vbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHthY2NvdW50U3RhdGV9IGZyb20gJy4vYWNjb3VudC5yb3V0ZSc7XHJcbmltcG9ydCB7QWN0aXZhdGVDb21wb25lbnR9IGZyb20gJy4vYWN0aXZhdGUvYWN0aXZhdGUuY29tcG9uZW50JztcclxuaW1wb3J0IHtQYXNzd29yZENvbXBvbmVudH0gZnJvbSAnLi9wYXNzd29yZC9wYXNzd29yZC5jb21wb25lbnQnO1xyXG5pbXBvcnQge1Bhc3N3b3JkUmVzZXRJbml0Q29tcG9uZW50fSBmcm9tICcuL3Bhc3N3b3JkLXJlc2V0L2luaXQvcGFzc3dvcmQtcmVzZXQtaW5pdC5jb21wb25lbnQnO1xyXG5pbXBvcnQge1Bhc3N3b3JkUmVzZXRGaW5pc2hDb21wb25lbnR9IGZyb20gJy4vcGFzc3dvcmQtcmVzZXQvZmluaXNoL3Bhc3N3b3JkLXJlc2V0LWZpbmlzaC5jb21wb25lbnQnO1xyXG5pbXBvcnQge1NldHRpbmdzQ29tcG9uZW50fSBmcm9tICcuL3NldHRpbmdzL3NldHRpbmdzLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7RmluZExhbmd1YWdlTW9kdWxvfSBmcm9tICcuLi9sYW5ndWFnZS9maW5kLWxhbmd1YWdlLm1vZHVsbyc7XHJcbmltcG9ydCB7TmdiTW9kdWxlfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcbmltcG9ydCB7Rm9udEF3ZXNvbWVNb2R1bGV9IGZyb20gJ0Bmb3J0YXdlc29tZS9hbmd1bGFyLWZvbnRhd2Vzb21lJztcclxuaW1wb3J0IHtsaWJyYXJ5fSBmcm9tICdAZm9ydGF3ZXNvbWUvZm9udGF3ZXNvbWUtc3ZnLWNvcmUnO1xyXG5pbXBvcnQge2ZhU2F2ZX0gZnJvbSAnQGZvcnRhd2Vzb21lL2ZyZWUtc29saWQtc3ZnLWljb25zL2ZhU2F2ZSc7XHJcbmltcG9ydCB7ZmFDaGVja30gZnJvbSAnQGZvcnRhd2Vzb21lL2ZyZWUtc29saWQtc3ZnLWljb25zL2ZhQ2hlY2snO1xyXG5pbXBvcnQge1Bhc3N3b3JkU3RyZW5ndGhNb2R1bGV9IGZyb20gJy4uL2NvbXBvbmVudHMvcGFzc3dvcmQtc3RyZW5ndGgvcGFzc3dvcmQtc3RyZW5ndGgubW9kdWxlJztcclxuaW1wb3J0IHtPcHRpb25zUHJvdmlkZXJ9IGZyb20gXCIuLi91dGlsL29wdGlvbnMtcHJvdmlkZXJcIjtcclxuXHJcbmxpYnJhcnkuYWRkKGZhU2F2ZSk7XHJcbmxpYnJhcnkuYWRkKGZhQ2hlY2spO1xyXG5cclxuQE5nTW9kdWxlKHtcclxuICAgIGltcG9ydHM6IFtcclxuICAgICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgICBGb3Jtc01vZHVsZSxcclxuICAgICAgTmdKaGlwc3Rlck1vZHVsZSxcclxuICAgICAgRmluZExhbmd1YWdlTW9kdWxvLFxyXG4gICAgICBOZ2JNb2R1bGUuZm9yUm9vdCgpLFxyXG4gICAgICBGb250QXdlc29tZU1vZHVsZSxcclxuICAgICAgUGFzc3dvcmRTdHJlbmd0aE1vZHVsZSxcclxuICAgICAgUm91dGVyTW9kdWxlLmZvckNoaWxkKGFjY291bnRTdGF0ZSlcclxuICAgIF0sXHJcbiAgICBkZWNsYXJhdGlvbnM6IFtcclxuICAgICAgQWN0aXZhdGVDb21wb25lbnQsXHJcbiAgICAgIFBhc3N3b3JkQ29tcG9uZW50LFxyXG4gICAgICBQYXNzd29yZFJlc2V0SW5pdENvbXBvbmVudCxcclxuICAgICAgUGFzc3dvcmRSZXNldEZpbmlzaENvbXBvbmVudCxcclxuICAgICAgU2V0dGluZ3NDb21wb25lbnRcclxuICAgIF0sXHJcbiAgICBwcm92aWRlcnM6IFtcclxuICAgICAgT3B0aW9uc1Byb3ZpZGVyXHJcbiAgICBdLFxyXG4gICAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBY2NvdW50TW9kdWxlIHt9XHJcbiIsImltcG9ydCB7Q29tcG9uZW50LCBJbnB1dH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7RmlsdGVyUGlwZX0gZnJvbSAnLi4vLi4vcGlwZS9maWx0ZXIucGlwZSc7XHJcbmltcG9ydCB7R3JpZEFjdGlvbnN9IGZyb20gJy4vZ3JpZC5hY3Rpb25zJztcclxuaW1wb3J0IHtHcmlkUHJpbnR9IGZyb20gJy4vZ3JpZC5wcmludCc7XHJcbmltcG9ydCB7R3JpZE1hc2t9IGZyb20gJy4vZ3JpZC5tYXNrJztcclxuaW1wb3J0IHtNYXNrUGlwZX0gZnJvbSAnbmd4LW1hc2snO1xyXG5pbXBvcnQgU3dhbCBmcm9tICdzd2VldGFsZXJ0Mic7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnamhpLWdyaWQnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2dyaWQuY29tcG9uZW50Lmh0bWwnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgR3JpZENvbXBvbmVudCB7XHJcbiAgcHVibGljIHNlYXJjaDogc3RyaW5nO1xyXG4gIHB1YmxpYyBwYWdlU2l6ZSA9IDU7XHJcbiAgcHVibGljIHBhZ2UgPSAxO1xyXG4gIHB1YmxpYyBpc1ZpZXcgPSBmYWxzZTtcclxuICBwdWJsaWMgaXNFZGl0ID0gZmFsc2U7XHJcbiAgcHVibGljIGlzRGVsZXRlID0gZmFsc2U7XHJcbiAgcHVibGljIGlzU2F2ZSA9IGZhbHNlO1xyXG4gIHB1YmxpYyBpc1NlYXJjaCA9IHRydWU7XHJcbiAgcHVibGljIGlzUHJpbnQgPSBmYWxzZTtcclxuICBwdWJsaWMgaXRlbnM6IEFycmF5PGFueT4gPSBbXTtcclxuICBwdWJsaWMgY29sdW1uczpBcnJheTxzdHJpbmc+ID0gW107XHJcbiAgcHVibGljIGhlYWRlcnM6IEFycmF5PHN0cmluZz4gPSBbXTtcclxuICBwdWJsaWMgZ3JpZEFjdGlvbnM6IEdyaWRBY3Rpb25zO1xyXG4gIHB1YmxpYyBncmlkUHJpbnQ6IEdyaWRQcmludDtcclxuICBwdWJsaWMgZ3JpZE1hc2s6IEdyaWRNYXNrO1xyXG4gIHB1YmxpYyBwbGFjZWhvbGRlcjogc3RyaW5nID0gJ1Blc3F1aXNhciBwb3IgcXVhbHF1ZXIgY2FtcG8uLi4nO1xyXG4gIHB1YmxpYyBpdGVuc1NpbmdsZXRvbjogQXJyYXk8YW55PiA9IFtdO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgZmlsdGVyUGlwZTogRmlsdGVyUGlwZSxcclxuICAgIHByaXZhdGUgbWFza1BpcGU6IE1hc2tQaXBlKSB7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBpc1RvVmlldyhpc1RvVmlldzogYm9vbGVhbikge1xyXG4gICAgICB0aGlzLmlzVmlldyA9IGlzVG9WaWV3O1xyXG4gIH1cclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgaXNUb0VkaXQoaXNFZGl0OiBib29sZWFuKSB7XHJcbiAgICB0aGlzLmlzRWRpdCA9IGlzRWRpdDtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGlzVG9EZWxldGUoaXNEZWxldGU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuaXNEZWxldGUgPSBpc0RlbGV0ZTtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGlzVG9TYXZlKGlzU2F2ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5pc1NhdmUgPSBpc1NhdmU7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBpc1RvU2VhcmNoKGlzU2VhcmNoOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLmlzU2VhcmNoID0gaXNTZWFyY2g7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBpc1RvUHJpbnQoaXNQcmludDogYm9vbGVhbikge1xyXG4gICAgdGhpcy5pc1ByaW50ID0gaXNQcmludDtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHNldFBsYWNlaG9sZGVyKHBsYWNlaG9sZGVyOiBzdHJpbmcpIHtcclxuICAgICAgdGhpcy5wbGFjZWhvbGRlciA9IHBsYWNlaG9sZGVyO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgc2V0SXRlbnMoaXRlbnMpIHtcclxuICAgIHRoaXMuaXRlbnMgPSBpdGVucztcclxuICAgIHRoaXMuaXRlbnNTaW5nbGV0b24gPSBpdGVucztcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHNldENvbHVtbnMoY29sdW1uczogW10pIHtcclxuICAgIHRoaXMuY29sdW1ucyA9IGNvbHVtbnM7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBzZXRIZWFkZXJzKGhlYWRlcnM6IFtdKSB7XHJcbiAgICB0aGlzLmhlYWRlcnMgPSBoZWFkZXJzO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgc2V0TWFzayhncmlkTWFzazogR3JpZE1hc2spIHtcclxuICAgIHRoaXMuZ3JpZE1hc2sgPSBncmlkTWFzaztcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGFkZExpc3RlbmVyKGNvbXBvbmVudDogR3JpZEFjdGlvbnMgfCBHcmlkUHJpbnQpIHtcclxuICAgIGlmICgoY29tcG9uZW50IGFzIEdyaWRBY3Rpb25zKS50b1ZpZXcpIHtcclxuICAgICAgdGhpcy5ncmlkQWN0aW9ucyA9IGNvbXBvbmVudCBhcyBHcmlkQWN0aW9ucztcclxuICAgIH1cclxuICAgIGlmICgoY29tcG9uZW50IGFzIEdyaWRQcmludCkudG9QcmludCkge1xyXG4gICAgICB0aGlzLmdyaWRQcmludCA9IGNvbXBvbmVudCBhcyBHcmlkUHJpbnQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZmlsdGVyKCkge1xyXG4gICAgaWYgKHRoaXMuc2VhcmNoICE9PSAnJyAmJiB0aGlzLnNlYXJjaCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgdGhpcy5pdGVucyA9IHRoaXMuZ2V0SXRlbnMoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5jbGVhcigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldFZhbHVlSXRlbShpdGVtOiBhbnksIGNvbHVtbjogc3RyaW5nKTogYW55IHtcclxuICAgIGNvbnN0IG1hc2sgPSB0aGlzLmdldE1hc2soY29sdW1uKTtcclxuICAgIGNvbnN0IHZhbHVlID0gaXRlbVtjb2x1bW5dO1xyXG4gICAgaWYgKG1hc2sgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5tYXNrUGlwZS50cmFuc2Zvcm0odmFsdWUsIG1hc2spXHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmFsdWVcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0SXRlbnMoKTogQXJyYXk8YW55PiB7XHJcbiAgICB0aGlzLml0ZW5zID0gdGhpcy5pdGVuc1NpbmdsZXRvbjtcclxuICAgIGxldCBmaWx0ZXJzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge307XHJcblxyXG4gICAgZm9yIChsZXQgY29sdW1uIG9mIHRoaXMuY29sdW1ucykge1xyXG4gICAgICBmaWx0ZXJzW2NvbHVtbl0gPSB0aGlzLnNlYXJjaDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5zZWFyY2gubGVuZ3RoID4gMikge1xyXG4gICAgICByZXR1cm4gdGhpcy5maWx0ZXJQaXBlLnRyYW5zZm9ybSh0aGlzLml0ZW5zLCBmaWx0ZXJzKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5pdGVucztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0TWFzayhjb2x1bW4pOiBzdHJpbmcge1xyXG4gICAgY29uc3QgZ3JpZE1hc2sgPSB0aGlzLmdyaWRNYXNrO1xyXG4gICAgaWYgKGdyaWRNYXNrICE9IG51bGwgJiYgY29sdW1uID09PSBncmlkTWFzay5jb2x1bW4pIHtcclxuICAgICAgcmV0dXJuIGdyaWRNYXNrLm1hc2s7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHRvVmlldyhpdGVtKSB7XHJcbiAgICAgIGlmICh0aGlzLmdyaWRBY3Rpb25zKSB7XHJcbiAgICAgICAgdGhpcy5ncmlkQWN0aW9ucy50b1ZpZXcoaXRlbSlcclxuICAgICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHRvRWRpdChpdGVtKSB7XHJcbiAgICBpZiAodGhpcy5ncmlkQWN0aW9ucykge1xyXG4gICAgICB0aGlzLmdyaWRBY3Rpb25zLnRvRWRpdChpdGVtKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHRvRGVsZXRlKGl0ZW0pIHtcclxuICAgIGlmICh0aGlzLmdyaWRBY3Rpb25zKSB7XHJcbiAgICAgIFN3YWwuZmlyZSh7XHJcbiAgICAgICAgdGl0bGU6ICdEZXNlamEgZXhjbHVpcj8nLFxyXG4gICAgICAgIHRleHQ6IFwiT3BlcmHDg8Knw4PCo28gbsODwqNvIHBvZGUgc2VyIGRlc2ZlaXRhIVwiLFxyXG4gICAgICAgIHR5cGU6ICd3YXJuaW5nJyxcclxuICAgICAgICBzaG93Q2FuY2VsQnV0dG9uOiB0cnVlLFxyXG4gICAgICAgIGNvbmZpcm1CdXR0b25Db2xvcjogJyMzMDg1ZDYnLFxyXG4gICAgICAgIGNhbmNlbEJ1dHRvbkNvbG9yOiAnI2QzMycsXHJcbiAgICAgICAgY29uZmlybUJ1dHRvblRleHQ6ICdTaW0hJyxcclxuICAgICAgICBjYW5jZWxCdXR0b25UZXh0OiAnTsODwqNvJ1xyXG4gICAgICB9KS50aGVuKChyZXN1bHQpID0+IHtcclxuICAgICAgICBpZiAocmVzdWx0LnZhbHVlKSB7XHJcbiAgICAgICAgICB0aGlzLmdyaWRBY3Rpb25zLnRvRGVsZXRlKGl0ZW0pXHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyB0b1NhdmUoKSB7XHJcbiAgICBpZiAodGhpcy5ncmlkQWN0aW9ucykge1xyXG4gICAgICB0aGlzLmdyaWRBY3Rpb25zLnRvU2F2ZSgpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdG9QcmludChpdGVtKSB7XHJcbiAgICBpZiAodGhpcy5ncmlkUHJpbnQpIHtcclxuICAgICAgdGhpcy5ncmlkUHJpbnQudG9QcmludChpdGVtKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGNsZWFyKCkge1xyXG4gICAgdGhpcy5zZWFyY2ggPSAnJztcclxuICAgIHRoaXMuaXRlbnMgPSB0aGlzLml0ZW5zU2luZ2xldG9uO1xyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQge0NVU1RPTV9FTEVNRU5UU19TQ0hFTUEsIE5nTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7Rm9udEF3ZXNvbWVNb2R1bGV9IGZyb20gJ0Bmb3J0YXdlc29tZS9hbmd1bGFyLWZvbnRhd2Vzb21lJztcclxuaW1wb3J0IHtsaWJyYXJ5fSBmcm9tICdAZm9ydGF3ZXNvbWUvZm9udGF3ZXNvbWUtc3ZnLWNvcmUnO1xyXG5pbXBvcnQge2ZhVGltZXN9IGZyb20gJ0Bmb3J0YXdlc29tZS9mcmVlLXNvbGlkLXN2Zy1pY29ucy9mYVRpbWVzJztcclxuaW1wb3J0IHtGb3Jtc01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQge0ZpbHRlclBpcGV9IGZyb20gJy4uLy4uL3BpcGUvZmlsdGVyLnBpcGUnO1xyXG5pbXBvcnQge0dyaWRDb21wb25lbnR9IGZyb20gJy4vZ3JpZC5jb21wb25lbnQnO1xyXG5pbXBvcnQge05nYk1vZHVsZX0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQge05nSmhpcHN0ZXJNb2R1bGV9IGZyb20gJ25nLWpoaXBzdGVyJztcclxuaW1wb3J0IHtNYXNrUGlwZSwgTmd4TWFza01vZHVsZX0gZnJvbSAnbmd4LW1hc2snO1xyXG5cclxubGlicmFyeS5hZGQoZmFUaW1lcyk7XHJcblxyXG5ATmdNb2R1bGUoe1xyXG4gICAgaW1wb3J0czogW1xyXG4gICAgICBDb21tb25Nb2R1bGUsXHJcbiAgICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgICBGb250QXdlc29tZU1vZHVsZSxcclxuICAgICAgTmd4TWFza01vZHVsZSxcclxuICAgICAgTmdKaGlwc3Rlck1vZHVsZSxcclxuICAgICAgTmdiTW9kdWxlLmZvclJvb3QoKVxyXG4gICAgXSxcclxuICAgIGRlY2xhcmF0aW9uczogW0dyaWRDb21wb25lbnRdLFxyXG4gICAgZXhwb3J0czogW0dyaWRDb21wb25lbnRdLFxyXG4gICAgcHJvdmlkZXJzOiBbRmlsdGVyUGlwZSwgTWFza1BpcGVdLFxyXG4gICAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBHcmlkTW9kdWxlIHsgfVxyXG4iLCJleHBvcnQgaW50ZXJmYWNlIElHcmlkTWFzayB7XHJcbiAgY29sdW1uPzogc3RyaW5nO1xyXG4gIG1hc2s/OiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBHcmlkTWFzayBpbXBsZW1lbnRzIElHcmlkTWFzayB7XHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgcHVibGljIGNvbHVtbj86IHN0cmluZyxcclxuICAgICAgcHVibGljIG1hc2s/OiBzdHJpbmdcclxuICAgICkge1xyXG4gICAgfVxyXG59XHJcbiJdLCJuYW1lcyI6WyJDcnlwdG9KUy5lbmMiLCJDcnlwdG9KUy5BRVMiLCJDcnlwdG9KUy5wYWQiLCJDcnlwdG9KUy5tb2RlIiwidHNsaWJfMS5fX3ZhbHVlcyIsInRzbGliXzEuX19leHRlbmRzIiwiRXZlbnRFbWl0dGVyIiwiRGlyZWN0aXZlIiwiTkdfVkFMSURBVE9SUyIsIkVsZW1lbnRSZWYiLCJJbnB1dCIsIk91dHB1dCIsIkhvc3RMaXN0ZW5lciIsIk5nTW9kdWxlIiwiSHR0cFBhcmFtcyIsIkluamVjdGFibGUiLCJOZ2JEYXRlQWRhcHRlciIsIk5nYkRhdGVQYXJzZXJGb3JtYXR0ZXIiLCJJbmplY3Rpb25Ub2tlbiIsIkluamVjdCIsIkxvY2tQYWdlIiwiQ29tcG9uZW50IiwiTmdiQWN0aXZlTW9kYWwiLCJWaWV3Q2hpbGQiLCJOZ2JNb2RhbCIsImxpYnJhcnkiLCJmYXMiLCJQZGZKc1ZpZXdlck1vZHVsZSIsIk5nYk1vZHVsZSIsIkZvbnRBd2Vzb21lTW9kdWxlIiwiQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQSIsIlBpcGUiLCJmYVRpbWVzIiwiZmFCYW4iLCJDb21tb25Nb2R1bGUiLCJOZ0poaXBzdGVyTW9kdWxlIiwiSHR0cENsaWVudCIsIlNlY3VyaXR5Q29udGV4dCIsIlNhbml0aXplciIsIkpoaUNvbmZpZ1NlcnZpY2UiLCJUcmFuc2xhdGVTZXJ2aWNlIiwiSmhpRXZlbnRNYW5hZ2VyIiwiRm9ybXNNb2R1bGUiLCJ0cmlnZ2VyIiwic3RhdGUiLCJzdHlsZSIsInRyYW5zaXRpb24iLCJhbmltYXRlIiwiSm95cmlkZVNlcnZpY2UiLCJOZzJGaXR0ZXh0TW9kdWxlIiwiQnJvd3NlckFuaW1hdGlvbnNNb2R1bGUiLCJTRVJWRVJfQVBJX1VSTCIsIk5HX1ZBTFVFX0FDQ0VTU09SIiwiZm9yd2FyZFJlZiIsIlN1YmplY3QiLCJKaGlMYW5ndWFnZVNlcnZpY2UiLCJTZXNzaW9uU3RvcmFnZVNlcnZpY2UiLCJMb2NhdGlvbiIsIkRvbVNhbml0aXplciIsIlRlbXBsYXRlUmVmIiwiVmlld0NvbnRhaW5lclJlZiIsIm1hcCIsIk9ic2VydmFibGUiLCJMb2NhbFN0b3JhZ2VTZXJ2aWNlIiwiZm9ya0pvaW4iLCJOZ1pvbmUiLCJDaGFuZ2VEZXRlY3RvclJlZiIsIlJlY2FwdGNoYUNvbW1vbk1vZHVsZSIsIlJlY2FwdGNoYU1vZHVsZSIsIkJlaGF2aW9yU3ViamVjdCIsImZhRXllIiwiQ29va2llU2VydmljZSIsIlJlbmRlcmVyIiwiZGVib3VuY2VUaW1lIiwiUm91dGVyIiwiaXNEZXZNb2RlIiwiZmFVc2VyUGx1cyIsIk5neE1hc2tNb2R1bGUiLCJmYVVzZXIiLCJSZW5kZXJlckZhY3RvcnkyIiwiVGl0bGUiLCJSb3V0ZXJNb2R1bGUiLCJKaGlQYXJzZUxpbmtzIiwiQWN0aXZhdGVkUm91dGUiLCJEYXRlUGlwZSIsIkpoaVJlc29sdmVQYWdpbmdQYXJhbXMiLCJFTlRJVFlfU1RBVEVTIiwiSHR0cFJlc3BvbnNlIiwiY2F0Y2hFcnJvciIsInRocm93RXJyb3IiLCJ0YXAiLCJIdHRwRXJyb3JSZXNwb25zZSIsImZpbHRlciIsIm9mIiwiSmhpRGF0YVV0aWxzIiwiTmdiUGFnaW5hdGlvbkNvbmZpZyIsImVuYWJsZVByb2RNb2RlIiwiVGlwb1Blc3NvYU5hbWVzcGFjZSIsIlNpdHVhY2FvQ29udHJpYnVpbnRlTmFtZXNwYWNlIiwiVGlwb1Jlc3BvbnNhdmVsTmFtZXNwYWNlIiwiVGlwb0ltb3ZlbE5hbWVzcGFjZSIsIlBsYXRmb3JtTG9jYXRpb24iLCJOYXZpZ2F0aW9uRW5kIiwiTG9hZGluZ0Jhckh0dHBDbGllbnRNb2R1bGUiLCJKb3lyaWRlTW9kdWxlIiwiSm95cmlkZVN0ZXBDb21wb25lbnQiLCJmYVNhdmUiLCJmYUNoZWNrIiwiTWFza1BpcGUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztJQUFBOzs7Ozs7Ozs7Ozs7OztJQWNBO0lBRUEsSUFBSSxhQUFhLEdBQUcsVUFBUyxDQUFDLEVBQUUsQ0FBQztRQUM3QixhQUFhLEdBQUcsTUFBTSxD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QUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJO3dCQUFFLE9BQU8sQ0FBQyxDQUFDO29CQUM3SixJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQzt3QkFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDeEMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDO3dCQUNULEtBQUssQ0FBQyxDQUFDO3dCQUFDLEtBQUssQ0FBQzs0QkFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDOzRCQUFDLE1BQU07d0JBQzlCLEtBQUssQ0FBQzs0QkFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7NEJBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDO3dCQUN4RCxLQUFLLENBQUM7NEJBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDOzRCQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7NEJBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7NEJBQUMsU0FBUzt3QkFDakQsS0FBSyxDQUFDOzRCQUFFLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDOzRCQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7NEJBQUMsU0FBUzt3QkFDakQ7NEJBQ0ksSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO2dDQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7Z0NBQUMsU0FBUzs2QkFBRTs0QkFDNUcsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0NBQUUsQ0FBQyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0NBQUMsTUFBTTs2QkFBRTs0QkFDdEYsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dDQUFFLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7Z0NBQUMsTUFBTTs2QkFBRTs0QkFDckUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0NBQUUsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0NBQUMsQ0FBQyxDQUFDLEdBQUcs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
|
|
16106
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlicmFyeS1wb3J0YWwudW1kLmpzLm1hcCIsInNvdXJjZXMiOlsibm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL21vZGVsL2NwZi1jbnBqLm1vZGVsLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvY29tcG9uZW50cy9jcGYtY25wai9jcGYtY25wai52YWxpZGF0b3IudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi91dGlsL3V0aWwtZnVuY3Rpb25zLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvY29tcG9uZW50cy9jcGYtY25wai9jcGYtY25wai52YWxpZGF0b3IuZGlyZWN0aXZlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvY29tcG9uZW50cy9jcGYtY25wai9jcGYtY25wai5tb2R1bGUudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9jb21wb25lbnRzL2ludGVnZXItZmllbGQvaW50ZWdlci1maWVsZC5kaXJlY3RpdmUudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9jb21wb25lbnRzL2ludGVnZXItZmllbGQvaW50ZWdlci1maWVsZC5tb2R1bGUudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi91dGlsL2VuY29kZS1kZWNvZGUtYmFzZTY0LnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvdXRpbC9yZXF1ZXN0LXV0aWwudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi91dGlsL2RhdGVwaWNrZXItYWRhcHRlci50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL3V0aWwvZXJyb3IuY29uc3RhbnRzLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvdXRpbC9wYWdpbmF0aW9uLmNvbnN0YW50cy50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL3V0aWwvb3B0aW9ucy1wcm92aWRlci50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL3V0aWwvdXRpbC1hcnF1aXZvLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvdXRpbC9sb2NrLXBhZ2VzLW1vZGVsLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvY29tcG9uZW50cy9wZGYvcGRmLmNvbXBvbmVudC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2NvbXBvbmVudHMvcGRmL3BkZi5zZXJ2aWNlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvY29tcG9uZW50cy9wZGYvcGRmLm1vZHVsZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2NvbXBvbmVudHMvbW9kYWwtZGlhbG9nL21vZGFsLWRpYWxvZy5tb2RlbC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2NvbXBvbmVudHMvbW9kYWwtZGlhbG9nL21vZGFsLWRpYWxvZy5jb21wb25lbnQudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9sYW5ndWFnZS9maW5kLWxhbmd1YWdlLWZyb20ta2V5LnBpcGUudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9sYW5ndWFnZS9maW5kLWxhbmd1YWdlLm1vZHVsby50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2NvbXBvbmVudHMvbW9kYWwtZGlhbG9nL21vZGFsLWRpYWxvZy5tb2R1bGUudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9tb2RlbC9wYXJhbWV0cm8ubW9kZWwudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9jb21wb25lbnRzL3BhcmFtZXRyb3MvcGFyYW1ldHJvcy5zZXJ2aWNlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvY29tcG9uZW50cy9wYXJhbWV0cm9zL3BhcmFtZXRyby5yZXN1bHQudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9hbGVydC9wb3J0YWwtYWxlcnQuc2VydmljZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2FsZXJ0L3V0aWwtbWVuc2FnZW0udHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9jb21wb25lbnRzL3BhcmFtZXRyb3MvcGFyYW1ldHJvcy5lZGl0LmNvbXBvbmVudC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2NvbXBvbmVudHMvcGFyYW1ldHJvcy9wYXJhbWV0cm9zLmNvbXBvbmVudC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2FsZXJ0L2FsZXJ0LmNvbXBvbmVudC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2FsZXJ0L2FsZXJ0LWVycm9yLmNvbXBvbmVudC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2FsZXJ0L3BvcnRhbC1hbGVydC5tb2R1bGUudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9tb2RlbC9jYW1wb3MtcHJlZW5jaGltZW50by5tb2RlbC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL21vZGVsL2NvbnRyaWJ1aW50ZS5tb2RlbC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2NvbXBvbmVudHMvYWp1ZGEvYWp1ZGEuY29tcG9uZW50LnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvY29tcG9uZW50cy9wYXJhbWV0cm9zL2dsb2JhbC5zZXJ2aWNlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvY29tcG9uZW50cy9hanVkYS9hanVkYS5tb2R1bGUudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9jb21wb25lbnRzL3BhcmFtZXRyb3MvcGFyYW1ldHJvcy5tb2R1bGUudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9jb21wb25lbnRzL3Rlcm1vLWxncGQvdGVybW8tbGdwZC5zZXJ2aWNlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvbW9kZWwvdGVybW8tbGdwZC5tb2RlbC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2NvbXBvbmVudHMvdGVybW8tbGdwZC90ZXJtby1sZ3BkLmNvbXBvbmVudC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2NvbXBvbmVudHMvdGVybW8tbGdwZC90ZXJtby1sZ3BkLm1vZHVsZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2NvbXBvbmVudHMvY29va2llLWNvbnNlbnQvY29va2llLWNvbnNlbnQuY29tcG9uZW50LnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvY29tcG9uZW50cy9jb29raWUtY29uc2VudC9jb29raWUtY29uc2VudC5tb2R1bGUudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9hdXRoL2FjY291bnQuc2VydmljZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2F1dGgvcHJpbmNpcGFsLnNlcnZpY2UudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9jb21wb25lbnRzL3BhZ2luYS1wYXJhbWV0cml6YWRhL3BhZ2luYS1wYXJhbWV0cml6YWRhLmNvbXBvbmVudC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2F1dGgvaGFzLWFueS1hdXRob3JpdHkuZGlyZWN0aXZlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvYXV0aC9zdGF0ZS1zdG9yYWdlLnNlcnZpY2UudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9hdXRoL2F1dGgtand0LnNlcnZpY2UudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9hdXRoL2F1dGgubW9kdWxlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvY29tcG9uZW50cy9wYWdpbmEtcGFyYW1ldHJpemFkYS9wYWdpbmEtcGFyYW1ldHJpemFkYS5tb2R1bGUudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9jb21wb25lbnRzL211bHRpcGxlLWNhcHRjaGEvbXVsdGlwbGUtY2FwdGNoYS5tb2RlbC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2NvbXBvbmVudHMvbXVsdGlwbGUtY2FwdGNoYS9tdWx0aXBsZS1jYXB0Y2hhLnNlcnZpY2UudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9jb21wb25lbnRzL211bHRpcGxlLWNhcHRjaGEvaTE4bi9wdC1ici50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2NvbXBvbmVudHMvbXVsdGlwbGUtY2FwdGNoYS9tdWx0aXBsZS1jYXB0Y2hhLmNvbXBvbmVudC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2NvbXBvbmVudHMvbXVsdGlwbGUtY2FwdGNoYS9tdWx0aXBsZS1jYXB0Y2hhLm1vZHVsZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2NvbXBvbmVudHMvbm90aWZpY2Fjb2VzL25vdGlmaWNhY29lcy5zZXJ2aWNlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvY29tcG9uZW50cy9ub3RpZmljYWNvZXMvbm90aWZpY2Fjb2VzLWRldGFsaGUuY29tcG9uZW50LnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvY29tcG9uZW50cy9ub3RpZmljYWNvZXMvbm90aWZpY2Fjb2VzLXBvcHVwLmNvbXBvbmVudC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2NvbXBvbmVudHMvbm90aWZpY2Fjb2VzL25vdGlmaWNhY29lcy5tb2R1bGUudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9hdXRoL2NzcmYuc2VydmljZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2xvZ2luL2xvZ2luLnNlcnZpY2UudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9yZWdpc3Rlci9yZWdpc3Rlci5zZXJ2aWNlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvcmVnaXN0ZXIvcmVnaXN0ZXIuY29tcG9uZW50LnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvcmVnaXN0ZXIvcmVnaXN0ZXItbW9kYWwuc2VydmljZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL3VzZXIvdXNlci5zZXJ2aWNlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvbG9naW4vbG9naW4uY29tcG9uZW50LnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvbG9naW4vbG9naW4tbW9kYWwuc2VydmljZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2F1dGgvdXNlci1yb3V0ZS1hY2Nlc3Mtc2VydmljZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL21vZGVsL2FjY291bnQubW9kZWwudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9tb2RlbC91c2VyLm1vZGVsLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvbW9kZWwvZW1wcmVzYS5tb2RlbC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL21vZGVsL21lbnUubW9kZWwudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9tb2RlbC9nYXRld2F5LXJvdXRlLm1vZGVsLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvbW9kZWwvYXVkaXQubW9kZWwudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9tb2RlbC9hdWRpdC1kYXRhLm1vZGVsLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvbW9kZWwvbG9nLm1vZGVsLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvbW9kZWwvcHJvZmlsZS1pbmZvLm1vZGVsLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvbW9kZWwvbXVuaWNpcGlvLm1vZGVsLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvbW9kZWwvZW5kZXJlY28ubW9kZWwudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9tb2RlbC9wYWlzLm1vZGVsLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvbW9kZWwvdGlwby1sb2dyYWRvdXJvLm1vZGVsLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvbW9kZWwvdGl0dWxvLWxvZ3JhZG91cm8ubW9kZWwudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9tb2RlbC9wZXNzb2EtZmlzaWNhLm1vZGVsLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvbW9kZWwvcGVzc29hLWp1cmlkaWNhLm1vZGVsLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvbW9kZWwvcmVzcG9uc2F2ZWwubW9kZWwudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9tb2RlbC92aWEtY2VwLm1vZGVsLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvbW9kZWwvY2VydGlkYW8ubW9kZWwudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9tb2RlbC9jb25maWd1cmFjYW8tcGFyY2VsYW1lbnRvLm1vZGVsLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvbW9kZWwvaW1vdmVsLm1vZGVsLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvbW9kZWwvZGFkb3MtZGViaXRvLm1vZGVsLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvbW9kZWwvZGViaXRvLm1vZGVsLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvbW9kZWwvZW51bXMubW9kZWwudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9tb2RlbC9nZXJhY2FvLWJvbGV0by5tb2RlbC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL21vZGVsL3BhcmNlbGEubW9kZWwudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9tb2RlbC9wYXJjZWxhbWVudG8ubW9kZWwudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9tb2RlbC9jb25zdGFudHMtZW51bS5tb2RlbC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2NvbXBvbmVudHMvcGFzc3dvcmQtc3RyZW5ndGgvcGFzc3dvcmQtc3RyZW5ndGgtYmFyLmNvbXBvbmVudC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2NvbXBvbmVudHMvcGFzc3dvcmQtc3RyZW5ndGgvcGFzc3dvcmQtc3RyZW5ndGgubW9kdWxlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvcmVnaXN0ZXIvcmVnaXN0ZXIubW9kdWxlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvbG9naW4vbG9naW4ubW9kdWxlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvbGFuZ3VhZ2UvbGFuZ3VhZ2UuY29uc3RhbnRzLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvbGFuZ3VhZ2UvbGFuZ3VhZ2UuaGVscGVyLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvYWRtaW4vZ2F0ZXdheS9nYXRld2F5LXJvdXRlcy5zZXJ2aWNlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvYWRtaW4vZ2F0ZXdheS9nYXRld2F5LmNvbXBvbmVudC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2FkbWluL2dhdGV3YXkvZ2F0ZXdheS5yb3V0ZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2FkbWluL2dhdGV3YXkvZ2F0ZXdheS5tb2R1bGUudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9hZG1pbi9hdWRpdHMvYXVkaXRzLnNlcnZpY2UudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9hZG1pbi9hdWRpdHMvYXVkaXRzLmNvbXBvbmVudC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2FkbWluL2F1ZGl0cy9hdWRpdHMucm91dGUudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9hZG1pbi9hdWRpdHMvYXVkaXRzLm1vZHVsZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2FkbWluL2NvbmZpZ3VyYXRpb24vY29uZmlndXJhdGlvbi5zZXJ2aWNlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvYWRtaW4vY29uZmlndXJhdGlvbi9jb25maWd1cmF0aW9uLmNvbXBvbmVudC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2FkbWluL2NvbmZpZ3VyYXRpb24vY29uZmlndXJhdGlvbi5yb3V0ZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2FkbWluL2NvbmZpZ3VyYXRpb24vY29uZmlndXJhdGlvbi5tb2R1bGUudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9hZG1pbi9tZXRyaWNzL21ldHJpY3MtbW9kYWwuY29tcG9uZW50LnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvYWRtaW4vbWV0cmljcy9tZXRyaWNzLnNlcnZpY2UudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9hZG1pbi9tZXRyaWNzL21ldHJpY3MuY29tcG9uZW50LnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvYWRtaW4vbWV0cmljcy9tZXRyaWNzLnJvdXRlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvYWRtaW4vbWV0cmljcy9tZXRyaWNzLm1vZHVsZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2FkbWluL2RvY3MvZG9jcy5jb21wb25lbnQudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9hZG1pbi9kb2NzL2RvY3Mucm91dGUudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9hZG1pbi9kb2NzL2RvY3MubW9kdWxlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvYWRtaW4vaGVhbHRoL2hlYWx0aC5zZXJ2aWNlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvYWRtaW4vaGVhbHRoL2hlYWx0aC1tb2RhbC5jb21wb25lbnQudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9hZG1pbi9oZWFsdGgvaGVhbHRoLmNvbXBvbmVudC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2FkbWluL2hlYWx0aC9oZWFsdGgucm91dGUudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9hZG1pbi9oZWFsdGgvaGVhbHRoLm1vZHVsZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2FkbWluL2xvZ3MvbG9ncy5zZXJ2aWNlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvYWRtaW4vbG9ncy9sb2dzLmNvbXBvbmVudC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2FkbWluL2xvZ3MvbG9ncy5yb3V0ZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2FkbWluL2xvZ3MvbG9ncy5tb2R1bGUudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9pbnRlcmNlcHRvci9hdXRoLmludGVyY2VwdG9yLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvaW50ZXJjZXB0b3IvYXV0aC1leHBpcmVkLmludGVyY2VwdG9yLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvaW50ZXJjZXB0b3IvZXJyb3JoYW5kbGVyLmludGVyY2VwdG9yLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvaW50ZXJjZXB0b3Ivbm90aWZpY2F0aW9uLmludGVyY2VwdG9yLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvbWVudS9tZW51LnNlcnZpY2UudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9lbXByZXNhL2VtcHJlc2Euc2VydmljZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2hvbWUvaG9tZS5jb21wb25lbnQudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9ob21lL2hvbWUucm91dGUudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9ob21lL2hvbWUubW9kdWxlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvbWVudS9tZW51LXVwZGF0ZS5jb21wb25lbnQudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9tZW51L21lbnUtZGVsZXRlLWRpYWxvZy5jb21wb25lbnQudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9tZW51L21lbnUtZGV0YWlsLmNvbXBvbmVudC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL21lbnUvbWVudS5jb21wb25lbnQudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9tZW51L21lbnUucm91dGUudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9tZW51L21lbnUubW9kdWxlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvZW1wcmVzYS9lbXByZXNhLXVwZGF0ZS5jb21wb25lbnQudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9lbXByZXNhL2VtcHJlc2EtZGVsZXRlLWRpYWxvZy5jb21wb25lbnQudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9lbXByZXNhL2VtcHJlc2EtZGV0YWlsLmNvbXBvbmVudC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2VtcHJlc2EvZW1wcmVzYS5jb21wb25lbnQudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9lbXByZXNhL2VtcHJlc2Eucm91dGUudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9lbXByZXNhL2VtcHJlc2EubW9kdWxlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvYmxvY2tzL3VpYi1wYWdpbmF0aW9uLmNvbmZpZy50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2Jsb2Nrcy9wcm9kLmNvbmZpZy50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL3VzZXIvdXNlci1tYW5hZ2VtZW50LWRlbGV0ZS1kaWFsb2cuY29tcG9uZW50LnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvdXNlci91c2VyLW1hbmFnZW1lbnQtZGV0YWlsLmNvbXBvbmVudC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL3VzZXIvdXNlci1tYW5hZ2VtZW50LXVwZGF0ZS5jb21wb25lbnQudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi91c2VyL3VzZXItbWFuYWdlbWVudC5jb21wb25lbnQudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi91c2VyL3VzZXItbWFuYWdlbWVudC5yb3V0ZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL3BpcGUvZW5kZXJlY28tcHJpbmNpcGFsLWZvcm1hdGFkby5waXBlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvcGlwZS9lbnVtLXN0cmluZy5waXBlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvcGlwZS9maWx0ZXIucGlwZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL3BpcGUvcGlwZS5tb2R1bG8udHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi91c2VyL3VzZXItbWFuYWdlbWVudC5tb2R1bGUudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9sYXlvdXRzL2Vycm9yL2Vycm9yLmNvbXBvbmVudC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2xheW91dHMvZXJyb3IvZXJyb3Iucm91dGUudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9sYXlvdXRzL3Byb2ZpbGVzL3Byb2ZpbGUuc2VydmljZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2xheW91dHMvbmF2YmFyL25hdmJhci5jb21wb25lbnQudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9sYXlvdXRzL25hdmJhci9uYXZiYXIucm91dGUudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9sYXlvdXRzL21haW4vbWFpbi5jb21wb25lbnQudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9sYXlvdXRzL25hdmJhci9hY3RpdmUtbWVudS5kaXJlY3RpdmUudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9sYXlvdXRzL3Byb2ZpbGVzL3BhZ2UtcmliYm9uLmNvbXBvbmVudC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2xheW91dHMvZm9vdGVyL2Zvb3Rlci5jb21wb25lbnQudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9sYXlvdXRzL2xheW91dHMubW9kdWxlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvYWNjb3VudC9hY3RpdmF0ZS9hY3RpdmF0ZS5zZXJ2aWNlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvYWNjb3VudC9hY3RpdmF0ZS9hY3RpdmF0ZS5jb21wb25lbnQudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9hY2NvdW50L2FjdGl2YXRlL2FjdGl2YXRlLnJvdXRlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvYWNjb3VudC9wYXNzd29yZC9wYXNzd29yZC5zZXJ2aWNlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvYWNjb3VudC9wYXNzd29yZC9wYXNzd29yZC5jb21wb25lbnQudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9hY2NvdW50L3Bhc3N3b3JkL3Bhc3N3b3JkLnJvdXRlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvYWNjb3VudC9wYXNzd29yZC1yZXNldC9maW5pc2gvcGFzc3dvcmQtcmVzZXQtZmluaXNoLnNlcnZpY2UudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9hY2NvdW50L3Bhc3N3b3JkLXJlc2V0L2ZpbmlzaC9wYXNzd29yZC1yZXNldC1maW5pc2guY29tcG9uZW50LnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvYWNjb3VudC9wYXNzd29yZC1yZXNldC9maW5pc2gvcGFzc3dvcmQtcmVzZXQtZmluaXNoLnJvdXRlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvYWNjb3VudC9wYXNzd29yZC1yZXNldC9pbml0L3Bhc3N3b3JkLXJlc2V0LWluaXQuc2VydmljZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2FjY291bnQvcGFzc3dvcmQtcmVzZXQvaW5pdC9wYXNzd29yZC1yZXNldC1pbml0LmNvbXBvbmVudC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2FjY291bnQvcGFzc3dvcmQtcmVzZXQvaW5pdC9wYXNzd29yZC1yZXNldC1pbml0LnJvdXRlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvYWNjb3VudC9zZXR0aW5ncy9zZXR0aW5ncy5jb21wb25lbnQudHMiLCJuZzovL2xpYnJhcnktcG9ydGFsL2xpYi9hY2NvdW50L3NldHRpbmdzL3NldHRpbmdzLnJvdXRlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvYWNjb3VudC9hY2NvdW50LnJvdXRlLnRzIiwibmc6Ly9saWJyYXJ5LXBvcnRhbC9saWIvYWNjb3VudC9hY2NvdW50Lm1vZHVsZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2NvbXBvbmVudHMvZ3JpZC9ncmlkLmNvbXBvbmVudC50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2NvbXBvbmVudHMvZ3JpZC9ncmlkLm1vZHVsZS50cyIsIm5nOi8vbGlicmFyeS1wb3J0YWwvbGliL2NvbXBvbmVudHMvZ3JpZC9ncmlkLm1hc2sudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxyXG5MaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2VcclxudGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGVcclxuTGljZW5zZSBhdCBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcclxuXHJcblRISVMgQ09ERSBJUyBQUk9WSURFRCBPTiBBTiAqQVMgSVMqIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTllcclxuS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBBTlkgSU1QTElFRFxyXG5XQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLFxyXG5NRVJDSEFOVEFCTElUWSBPUiBOT04tSU5GUklOR0VNRU5ULlxyXG5cclxuU2VlIHRoZSBBcGFjaGUgVmVyc2lvbiAyLjAgTGljZW5zZSBmb3Igc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zXHJcbmFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cclxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cclxuLyogZ2xvYmFsIFJlZmxlY3QsIFByb21pc2UgKi9cclxuXHJcbnZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24oZCwgYikge1xyXG4gICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxyXG4gICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcclxuICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTsgfTtcclxuICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZXh0ZW5kcyhkLCBiKSB7XHJcbiAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xyXG4gICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XHJcbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgX19hc3NpZ24gPSBmdW5jdGlvbigpIHtcclxuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiBfX2Fzc2lnbih0KSB7XHJcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XHJcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSkgdFtwXSA9IHNbcF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3Jlc3QocywgZSkge1xyXG4gICAgdmFyIHQgPSB7fTtcclxuICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxyXG4gICAgICAgIHRbcF0gPSBzW3BdO1xyXG4gICAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKVxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIGlmIChlLmluZGV4T2YocFtpXSkgPCAwKVxyXG4gICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcclxuICAgIHJldHVybiB0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xyXG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XHJcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xyXG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcGFyYW0ocGFyYW1JbmRleCwgZGVjb3JhdG9yKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7IGRlY29yYXRvcih0YXJnZXQsIGtleSwgcGFyYW1JbmRleCk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fbWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpIHtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gUmVmbGVjdC5tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0ZXIodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XHJcbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHJlc3VsdC52YWx1ZSk7IH0pLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cclxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZ2VuZXJhdG9yKHRoaXNBcmcsIGJvZHkpIHtcclxuICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XHJcbiAgICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gc3RlcChvcCkge1xyXG4gICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcclxuICAgICAgICB3aGlsZSAoXykgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xyXG4gICAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XHJcbiAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxyXG4gICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19leHBvcnRTdGFyKG0sIGV4cG9ydHMpIHtcclxuICAgIGZvciAodmFyIHAgaW4gbSkgaWYgKCFleHBvcnRzLmhhc093blByb3BlcnR5KHApKSBleHBvcnRzW3BdID0gbVtwXTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fdmFsdWVzKG8pIHtcclxuICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXSwgaSA9IDA7XHJcbiAgICBpZiAobSkgcmV0dXJuIG0uY2FsbChvKTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAobyAmJiBpID49IG8ubGVuZ3RoKSBvID0gdm9pZCAwO1xyXG4gICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbyAmJiBvW2krK10sIGRvbmU6ICFvIH07XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVhZChvLCBuKSB7XHJcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XHJcbiAgICBpZiAoIW0pIHJldHVybiBvO1xyXG4gICAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XHJcbiAgICBmaW5hbGx5IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYXI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZCgpIHtcclxuICAgIGZvciAodmFyIGFyID0gW10sIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIGFyID0gYXIuY29uY2F0KF9fcmVhZChhcmd1bWVudHNbaV0pKTtcclxuICAgIHJldHVybiBhcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXdhaXQodikge1xyXG4gICAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBfX2F3YWl0ID8gKHRoaXMudiA9IHYsIHRoaXMpIDogbmV3IF9fYXdhaXQodik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jR2VuZXJhdG9yKHRoaXNBcmcsIF9hcmd1bWVudHMsIGdlbmVyYXRvcikge1xyXG4gICAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxuICAgIHZhciBnID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pLCBpLCBxID0gW107XHJcbiAgICByZXR1cm4gaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgaWYgKGdbbl0pIGlbbl0gPSBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKGEsIGIpIHsgcS5wdXNoKFtuLCB2LCBhLCBiXSkgPiAxIHx8IHJlc3VtZShuLCB2KTsgfSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHJlc3VtZShuLCB2KSB7IHRyeSB7IHN0ZXAoZ1tuXSh2KSk7IH0gY2F0Y2ggKGUpIHsgc2V0dGxlKHFbMF1bM10sIGUpOyB9IH1cclxuICAgIGZ1bmN0aW9uIHN0ZXAocikgeyByLnZhbHVlIGluc3RhbmNlb2YgX19hd2FpdCA/IFByb21pc2UucmVzb2x2ZShyLnZhbHVlLnYpLnRoZW4oZnVsZmlsbCwgcmVqZWN0KSA6IHNldHRsZShxWzBdWzJdLCByKTsgfVxyXG4gICAgZnVuY3Rpb24gZnVsZmlsbCh2YWx1ZSkgeyByZXN1bWUoXCJuZXh0XCIsIHZhbHVlKTsgfVxyXG4gICAgZnVuY3Rpb24gcmVqZWN0KHZhbHVlKSB7IHJlc3VtZShcInRocm93XCIsIHZhbHVlKTsgfVxyXG4gICAgZnVuY3Rpb24gc2V0dGxlKGYsIHYpIHsgaWYgKGYodiksIHEuc2hpZnQoKSwgcS5sZW5ndGgpIHJlc3VtZShxWzBdWzBdLCBxWzBdWzFdKTsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0RlbGVnYXRvcihvKSB7XHJcbiAgICB2YXIgaSwgcDtcclxuICAgIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiwgZnVuY3Rpb24gKGUpIHsgdGhyb3cgZTsgfSksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4sIGYpIHsgaVtuXSA9IG9bbl0gPyBmdW5jdGlvbiAodikgeyByZXR1cm4gKHAgPSAhcCkgPyB7IHZhbHVlOiBfX2F3YWl0KG9bbl0odikpLCBkb25lOiBuID09PSBcInJldHVyblwiIH0gOiBmID8gZih2KSA6IHY7IH0gOiBmOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jVmFsdWVzKG8pIHtcclxuICAgIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICB2YXIgbSA9IG9bU3ltYm9sLmFzeW5jSXRlcmF0b3JdLCBpO1xyXG4gICAgcmV0dXJuIG0gPyBtLmNhbGwobykgOiAobyA9IHR5cGVvZiBfX3ZhbHVlcyA9PT0gXCJmdW5jdGlvblwiID8gX192YWx1ZXMobykgOiBvW1N5bWJvbC5pdGVyYXRvcl0oKSwgaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGkpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IGlbbl0gPSBvW25dICYmIGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7IHYgPSBvW25dKHYpLCBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCB2LmRvbmUsIHYudmFsdWUpOyB9KTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgZCwgdikgeyBQcm9taXNlLnJlc29sdmUodikudGhlbihmdW5jdGlvbih2KSB7IHJlc29sdmUoeyB2YWx1ZTogdiwgZG9uZTogZCB9KTsgfSwgcmVqZWN0KTsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19tYWtlVGVtcGxhdGVPYmplY3QoY29va2VkLCByYXcpIHtcclxuICAgIGlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvb2tlZCwgXCJyYXdcIiwgeyB2YWx1ZTogcmF3IH0pOyB9IGVsc2UgeyBjb29rZWQucmF3ID0gcmF3OyB9XHJcbiAgICByZXR1cm4gY29va2VkO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9faW1wb3J0U3Rhcihtb2QpIHtcclxuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XHJcbiAgICB2YXIgcmVzdWx0ID0ge307XHJcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgcmVzdWx0W2tdID0gbW9kW2tdO1xyXG4gICAgcmVzdWx0LmRlZmF1bHQgPSBtb2Q7XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnREZWZhdWx0KG1vZCkge1xyXG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBkZWZhdWx0OiBtb2QgfTtcclxufVxyXG4iLCJleHBvcnQgZW51bSBSZWFsVGltZU1hc2tUeXBlIHtcclxuICAgIE5PTkUsXHJcbiAgICBQTEFDRUhPTERFUixcclxuICAgIENMQVNTSUNcclxufVxyXG5cclxuZXhwb3J0IGVudW0gRG9jVHlwZSB7XHJcbiAgQ1BGLFxyXG4gIENOUEosXHJcbiAgQk9USFxyXG59XHJcbiIsImltcG9ydCB7QWJzdHJhY3RDb250cm9sLCBWYWxpZGF0aW9uRXJyb3JzLCBWYWxpZGF0b3J9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHtEb2NUeXBlfSBmcm9tICcuLi8uLi9tb2RlbC9jcGYtY25wai5tb2RlbCc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ3BmQ25walZhbGlkYXRvciBpbXBsZW1lbnRzIFZhbGlkYXRvciB7XHJcbiAgc3RhdGljIGNwZkxlbmd0aCA9IDExO1xyXG4gIHN0YXRpYyBjcGZMZW5ndGhGaXJzdFBhcnQgPSAzO1xyXG4gIHN0YXRpYyBjbnBqTGVuZ3RoRmlyc3RQYXJ0ID0gMjtcclxuICBzdGF0aWMgY3BmTGVuZ3RoU2Vjb25kUGFydCA9IDY7XHJcbiAgc3RhdGljIGNucGpMZW5ndGhTZWNvbmRQYXJ0ID0gNTtcclxuICBzdGF0aWMgY3BmTGVuZ3RoVGhpcmRQYXJ0ID0gOTtcclxuICBzdGF0aWMgY25wakxlbmd0aFRoaXJkUGFydCA9IDg7XHJcbiAgc3RhdGljIGNucGpDcGZMZW5ndGhCb3VuZGFyaWVzID0gMTI7XHJcbiAgc3RhdGljIGNucGpMZW5ndGggPSAxNDtcclxuXHJcbiAgcHVibGljIGRvY1R5cGU6IERvY1R5cGUgPSBEb2NUeXBlLkJPVEg7XHJcbiAgLyoqXHJcbiAgICogQ2FsY3VsYSBvIGTDg8KtZ2l0byB2ZXJpZmljYWRvciBkbyBDUEYgb3UgQ05QSi5cclxuICAgKi9cclxuICBidWlsZERpZ2l0KGFycjogbnVtYmVyW10pOiBudW1iZXIge1xyXG4gICAgbGV0IGlzQ3BmID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKHRoaXMuZG9jVHlwZSA9PT0gRG9jVHlwZS5CT1RIKSB7XHJcbiAgICAgIGlzQ3BmID0gYXJyLmxlbmd0aCA8IENwZkNucGpWYWxpZGF0b3IuY3BmTGVuZ3RoO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmRvY1R5cGUgPT09IERvY1R5cGUuQ1BGKSB7XHJcbiAgICAgIGlzQ3BmID0gdHJ1ZTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5kb2NUeXBlID09PSBEb2NUeXBlLkNOUEopIHtcclxuICAgICAgaXNDcGYgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBkaWdpdCA9XHJcbiAgICAgIGFyci5tYXAoKHZhbCwgaWR4KSA9PiB2YWwgKiAoKCFpc0NwZiA/IGlkeCAlIDggOiBpZHgpICsgMikpLnJlZHVjZSgodG90YWwsIGN1cnJlbnQpID0+IHRvdGFsICsgY3VycmVudCkgJVxyXG4gICAgICBDcGZDbnBqVmFsaWRhdG9yLmNwZkxlbmd0aDtcclxuXHJcbiAgICBpZiAoZGlnaXQgPCAyICYmIGlzQ3BmKSB7XHJcbiAgICAgIHJldHVybiAwO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBkaWdpdCA8IDIgPyAwIDogQ3BmQ25walZhbGlkYXRvci5jcGZMZW5ndGggLSBkaWdpdDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFZhbGlkYSB1bSBDUEYgb3UgQ05QSiBkZSBhY29yZG8gY29tIHNldSBkw4PCrWdpdG8gdmVyaWZpY2Fkb3IuXHJcbiAgICovXHJcbiAgdmFsaWRhRG9jdW1lbnRvKGM6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcclxuICAgIGlmIChjLnZhbHVlID09PSB1bmRlZmluZWQgfHwgYy52YWx1ZSA9PT0gbnVsbCB8fCBjLnZhbHVlLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGNvbnN0IGNwZkNucGogPSBjLnZhbHVlLnJlcGxhY2UoL1xcRC9nLCAnJyk7XHJcblxyXG4gICAgLy8gVmVyaWZpY2Egc2UgdG9kb3Mgb3MgZMODwq1naXRvcyBzw4PCo28gaWd1YWlzLlxyXG4gICAgaWYgKC9eKFswLTldKVxcMSokLy50ZXN0KGNwZkNucGopKSB7XHJcbiAgICAgIHJldHVybiB7ZXF1YWxEaWdpdHM6IHRydWV9O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFZlcmlmaWNhIG8gdGFtYW5obyBkYSBzdHJpbmcuXHJcbiAgICBpZiAodGhpcy5kb2NUeXBlID09PSBEb2NUeXBlLkJPVEgpIHtcclxuICAgICAgaWYgKFtDcGZDbnBqVmFsaWRhdG9yLmNwZkxlbmd0aCwgQ3BmQ25walZhbGlkYXRvci5jbnBqTGVuZ3RoXS5pbmRleE9mKGNwZkNucGoubGVuZ3RoKSA8IDApIHtcclxuICAgICAgICByZXR1cm4ge2xlbmd0aDogdHJ1ZX07XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAodGhpcy5kb2NUeXBlID09PSBEb2NUeXBlLkNQRikge1xyXG4gICAgICBpZiAoQ3BmQ25walZhbGlkYXRvci5jcGZMZW5ndGggIT09IGNwZkNucGoubGVuZ3RoKSB7XHJcbiAgICAgICAgcmV0dXJuIHtsZW5ndGg6IHRydWV9O1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuZG9jVHlwZSA9PT0gRG9jVHlwZS5DTlBKKSB7XHJcbiAgICAgIGlmIChDcGZDbnBqVmFsaWRhdG9yLmNucGpMZW5ndGggIT09IGNwZkNucGoubGVuZ3RoKSB7XHJcbiAgICAgICAgcmV0dXJuIHtsZW5ndGg6IHRydWV9O1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQSBzZWd1aXIgw4PCqSByZWFsaXphZG8gbyBjw4PCoWxjdWxvIHZlcmlmaWNhZG9yLlxyXG4gICAgY29uc3QgY3BmQ25wakFycjogbnVtYmVyW10gPSBjcGZDbnBqXHJcbiAgICAgIC5zcGxpdCgnJylcclxuICAgICAgLnJldmVyc2UoKVxyXG4gICAgICAuc2xpY2UoMik7XHJcblxyXG4gICAgY3BmQ25wakFyci51bnNoaWZ0KHRoaXMuYnVpbGREaWdpdChjcGZDbnBqQXJyKSk7XHJcbiAgICBjcGZDbnBqQXJyLnVuc2hpZnQodGhpcy5idWlsZERpZ2l0KGNwZkNucGpBcnIpKTtcclxuXHJcbiAgICBpZiAoY3BmQ25waiAhPT0gY3BmQ25wakFyci5yZXZlcnNlKCkuam9pbignJykpIHtcclxuICAgICAgLy8gRMODwq1naXRvIHZlcmlmaWNhZG9yIG7Dg8KjbyDDg8KpIHbDg8KhbGlkbywgcmVzdWx0YW5kbyBlbSBmYWxoYS5cclxuICAgICAgcmV0dXJuIHtkaWdpdDogdHJ1ZX07XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbXBsZW1lbnRhIGEgaW50ZXJmYWNlIGRlIHVtIHZhbGlkYXRvci5cclxuICAgKi9cclxuICB2YWxpZGF0ZShjOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XHJcbiAgICByZXR1cm4gdGhpcy52YWxpZGFEb2N1bWVudG8oYyk7XHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCAqIGFzIENyeXB0b0pTIGZyb20gJ2NyeXB0by1qcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgVXRpbEZ1bmN0aW9ucyB7XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgdmFsaWRhckNQRihzdHJDUEY6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IHNvbWEgPSAwO1xyXG5cclxuICAgIHN0ckNQRiA9IFV0aWxGdW5jdGlvbnMucmVtb3ZlTm9uTnVtYmVycyhzdHJDUEYpO1xyXG5cclxuICAgIGlmIChzdHJDUEYubGVuZ3RoICE9PSAxMSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKC9eKC4pXFwxKiQvLnRlc3Qoc3RyQ1BGKSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgc29tYSA9IHRoaXMuc29tYShzb21hLCBzdHJDUEYsIDExLCA5KTtcclxuXHJcbiAgICBsZXQgcmVzdG8gPSAoc29tYSAqIDEwKSAlIDExO1xyXG5cclxuICAgIGlmIChyZXN0byA9PT0gMTAgfHwgcmVzdG8gPT09IDExKSB7XHJcbiAgICAgIHJlc3RvID0gMDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAocmVzdG8gIT09IHBhcnNlSW50KHN0ckNQRi5zdWJzdHJpbmcoOSwgMTApLCAxMCkpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHNvbWEgPSAwO1xyXG4gICAgc29tYSA9IHRoaXMuc29tYShzb21hLCBzdHJDUEYsIDEyLCAxMCk7XHJcblxyXG4gICAgcmVzdG8gPSAoc29tYSAqIDEwKSAlIDExO1xyXG5cclxuICAgIGlmIChyZXN0byA9PT0gMTAgfHwgcmVzdG8gPT09IDExKSB7XHJcbiAgICAgIHJlc3RvID0gMDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmVzdG8gPT09IHBhcnNlSW50KHN0ckNQRi5zdWJzdHJpbmcoMTAsIDExKSwgMTApO1xyXG5cclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgdmFsaWRhckNOUEooY25wajogc3RyaW5nKSA6IGJvb2xlYW4ge1xyXG5cclxuICAgIGNucGogPSBVdGlsRnVuY3Rpb25zLnJlbW92ZU5vbk51bWJlcnMoY25waik7XHJcblxyXG4gICAgaWYgKGNucGoubGVuZ3RoICE9PSAxNCkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAoL14oWzAtOV0pXFwxKiQvLnRlc3QoY25waikpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFZhbGlkYSBEVnNcclxuICAgIGxldCB0YW1hbmhvID0gY25wai5sZW5ndGggLSAyO1xyXG4gICAgbGV0IG51bWVyb3MgPSBjbnBqLnN1YnN0cmluZygwLCB0YW1hbmhvKTtcclxuICAgIGNvbnN0IGRpZ2l0b3MgPSBjbnBqLnN1YnN0cmluZyh0YW1hbmhvKTtcclxuICAgIGxldCBzb21hID0gMDtcclxuICAgIGxldCBwb3MgPSB0YW1hbmhvIC0gNztcclxuICAgIGZvciAobGV0IGkgPSB0YW1hbmhvOyBpID49IDE7IGktLSkge1xyXG4gICAgICBzb21hICs9IHBhcnNlSW50KG51bWVyb3MuY2hhckF0KHRhbWFuaG8gLSBpKSwgMTApICogcG9zLS07XHJcbiAgICAgIGlmIChwb3MgPCAyKSB7XHJcbiAgICAgICAgcG9zID0gOTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgbGV0IHJlc3VsdGFkbyA9IHNvbWEgJSAxMSA8IDIgPyAwIDogMTEgLSBzb21hICUgMTE7XHJcbiAgICBpZiAocmVzdWx0YWRvLnRvU3RyaW5nKCkgIT09IGRpZ2l0b3MuY2hhckF0KDApKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICB0YW1hbmhvID0gdGFtYW5obyArIDE7XHJcbiAgICBudW1lcm9zID0gY25wai5zdWJzdHJpbmcoMCwgdGFtYW5obyk7XHJcbiAgICBzb21hID0gMDtcclxuICAgIHBvcyA9IHRhbWFuaG8gLSA3O1xyXG4gICAgZm9yIChsZXQgaSA9IHRhbWFuaG87IGkgPj0gMTsgaS0tKSB7XHJcbiAgICAgIHNvbWEgKz0gcGFyc2VJbnQobnVtZXJvcy5jaGFyQXQodGFtYW5obyAtIGkpLCAxMCkgKiBwb3MtLTtcclxuICAgICAgaWYgKHBvcyA8IDIpIHtcclxuICAgICAgICBwb3MgPSA5O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXN1bHRhZG8gPSBzb21hICUgMTEgPCAyID8gMCA6IDExIC0gc29tYSAlIDExO1xyXG4gICAgaWYgKHJlc3VsdGFkby50b1N0cmluZygpICE9PSBkaWdpdG9zLmNoYXJBdCgxKSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcblxyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyB2YWxpZGFyRG9jdW1lbnRvKGRvY3VtZW50bzogc3RyaW5nKSA6IGJvb2xlYW4ge1xyXG4gICAgZG9jdW1lbnRvID0gVXRpbEZ1bmN0aW9ucy5yZW1vdmVOb25OdW1iZXJzKGRvY3VtZW50byk7XHJcbiAgICBpZiAoZG9jdW1lbnRvLmxlbmd0aCA9PT0gMTQpIHtcclxuICAgICAgcmV0dXJuIFV0aWxGdW5jdGlvbnMudmFsaWRhckNOUEooZG9jdW1lbnRvKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBVdGlsRnVuY3Rpb25zLnZhbGlkYXJDUEYoZG9jdW1lbnRvKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIHNvbWEoc29tYTogbnVtYmVyLCBjcGY6IHN0cmluZywgZGlnaXRvOiBudW1iZXIsIGxlbmd0aDogbnVtYmVyKSB7XHJcbiAgICBmb3IgKGxldCBpbmRleCA9IDE7IGluZGV4IDw9IGxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICBzb21hID0gc29tYSArIHBhcnNlSW50KGNwZi5zdWJzdHJpbmcoaW5kZXggLSAxLCBpbmRleCksIDEwKSAqIChkaWdpdG8gLSBpbmRleCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc29tYTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgcmVtb3ZlTm9uQWxwaGFOdW1lcmljKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgaWYgKCFVdGlsRnVuY3Rpb25zLmlzVmFsaWRTdHJpbmdPckFycmF5KHZhbHVlKSkge1xyXG4gICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcbiAgICBjb25zdCByZWdFeHAgPSAvW15BLVphLXowLTldL2c7XHJcbiAgICByZXR1cm4gdmFsdWUucmVwbGFjZShyZWdFeHAsICcnKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgc2FuaXRpemVSZWNhcHRjaGFBY3Rpb24odmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBpZiAoIVV0aWxGdW5jdGlvbnMuaXNWYWxpZFN0cmluZ09yQXJyYXkodmFsdWUpKSB7XHJcbiAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdmFsdWVcclxuICAgIC50cmltKClcclxuICAgIC5yZXBsYWNlKC8tL2csICdfJykgICAgICAgICAgLy8gw6LCnMKFIGjDg8KtZmVuIMOiwobCkiB1bmRlcmxpbmVcclxuICAgIC5yZXBsYWNlKC9bXkEtWmEtel8vXS9nLCAnJyk7IC8vIMOiwpzChSBtYW50w4PCqW0gc8ODwrMgQcOiwoDCk1ogYcOiwoDCk3ogXyAvXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIHJlbW92ZU5vbk51bWJlcnModmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBpZiAoIVV0aWxGdW5jdGlvbnMuaXNWYWxpZFN0cmluZ09yQXJyYXkodmFsdWUpKSB7XHJcbiAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuICAgIGNvbnN0IHJlZ0V4cCA9IC9bXjAtOV0vZztcclxuICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKHJlZ0V4cCwgJycpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyByZW1vdmVBY2NlbnRzKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgaWYgKCFVdGlsRnVuY3Rpb25zLmlzVmFsaWRTdHJpbmdPckFycmF5KHZhbHVlKSkge1xyXG4gICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmFsdWUubm9ybWFsaXplKCdORkQnKS5yZXBsYWNlKC9bXFx1MDMwMC1cXHUwMzZmXS9nLCAnJyk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIGZvcm1hdERhdGVEYXRhYmFzZShkOiBEYXRlLCBpbmNsdWRlVGltZTogYm9vbGVhbikge1xyXG4gICAgY29uc3QgeWVhciA9ICcnICsgZC5nZXRGdWxsWWVhcigpO1xyXG4gICAgbGV0IG1vbnRoID0gJycgKyAoZC5nZXRNb250aCgpICsgMSksXHJcbiAgICAgIGRheSA9ICcnICsgZC5nZXREYXRlKCksXHJcbiAgICAgIGhvdXIgPSAnJyArIGQuZ2V0SG91cnMoKSxcclxuICAgICAgbWludXRlID0gJycgKyBkLmdldE1pbnV0ZXMoKSxcclxuICAgICAgc2Vjb25kcyA9ICcnICsgZC5nZXRTZWNvbmRzKCk7XHJcblxyXG4gICAgaWYgKG1vbnRoLmxlbmd0aCA8IDIpIHtcclxuICAgICAgbW9udGggPSAnMCcgKyBtb250aDtcclxuICAgIH1cclxuICAgIGlmIChkYXkubGVuZ3RoIDwgMikge1xyXG4gICAgICBkYXkgPSAnMCcgKyBkYXk7XHJcbiAgICB9XHJcbiAgICBpZiAoaG91ci5sZW5ndGggPCAyKSB7XHJcbiAgICAgIGhvdXIgPSAnMCcgKyBob3VyO1xyXG4gICAgfVxyXG4gICAgaWYgKG1pbnV0ZS5sZW5ndGggPCAyKSB7XHJcbiAgICAgIG1pbnV0ZSA9ICcwJyArIG1pbnV0ZTtcclxuICAgIH1cclxuICAgIGlmIChzZWNvbmRzLmxlbmd0aCA8IDIpIHtcclxuICAgICAgc2Vjb25kcyA9ICcwJyArIHNlY29uZHM7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGZvcm1hdGVkRGF0ZTogc3RyaW5nID0geWVhciArICctJyArIG1vbnRoICsgJy0nICsgZGF5O1xyXG4gICAgaWYgKGluY2x1ZGVUaW1lKSB7XHJcbiAgICAgIGZvcm1hdGVkRGF0ZSArPSAnICcgKyBob3VyICsgJzonICsgbWludXRlICsgJzonICsgc2Vjb25kcztcclxuICAgIH1cclxuICAgIHJldHVybiBmb3JtYXRlZERhdGU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIGZvcm1hdERhdGVCcmF6aWwoZGF0ZTogRGF0ZSwgaW5jbHVkZVRpbWU6IGJvb2xlYW4pIHtcclxuICAgIGlmICghVXRpbEZ1bmN0aW9ucy5pc1ZhbGlkT2JqZWN0KGRhdGUpKSB7XHJcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgICBjb25zdCB5ZWFyID0gJycgKyBkYXRlLmdldEZ1bGxZZWFyKCk7XHJcbiAgICBsZXQgbW9udGggPSAnJyArIChkYXRlLmdldE1vbnRoKCkgKyAxKSxcclxuICAgICAgZGF5ID0gJycgKyBkYXRlLmdldERhdGUoKSxcclxuICAgICAgaG91ciA9ICcnICsgZGF0ZS5nZXRIb3VycygpLFxyXG4gICAgICBtaW51dGUgPSAnJyArIGRhdGUuZ2V0TWludXRlcygpLFxyXG4gICAgICBzZWNvbmRzID0gJycgKyBkYXRlLmdldFNlY29uZHMoKTtcclxuXHJcbiAgICBpZiAobW9udGgubGVuZ3RoIDwgMikge1xyXG4gICAgICBtb250aCA9ICcwJyArIG1vbnRoO1xyXG4gICAgfVxyXG4gICAgaWYgKGRheS5sZW5ndGggPCAyKSB7XHJcbiAgICAgIGRheSA9ICcwJyArIGRheTtcclxuICAgIH1cclxuICAgIGlmIChob3VyLmxlbmd0aCA8IDIpIHtcclxuICAgICAgaG91ciA9ICcwJyArIGhvdXI7XHJcbiAgICB9XHJcbiAgICBpZiAobWludXRlLmxlbmd0aCA8IDIpIHtcclxuICAgICAgbWludXRlID0gJzAnICsgbWludXRlO1xyXG4gICAgfVxyXG4gICAgaWYgKHNlY29uZHMubGVuZ3RoIDwgMikge1xyXG4gICAgICBzZWNvbmRzID0gJzAnICsgc2Vjb25kcztcclxuICAgIH1cclxuXHJcbiAgICBsZXQgZm9ybWF0ZWREYXRlOiBzdHJpbmcgPSBkYXkgKyAnLycgKyBtb250aCArICcvJyArIHllYXI7XHJcbiAgICBpZiAoaW5jbHVkZVRpbWUpIHtcclxuICAgICAgZm9ybWF0ZWREYXRlICs9ICcgJyArIGhvdXIgKyAnOicgKyBtaW51dGUgKyAnOicgKyBzZWNvbmRzO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZvcm1hdGVkRGF0ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgcGFyc2VEYXRlRGF0YUJhc2VGb3JtYXQoZGF0ZVN0cmluZzogc3RyaW5nKTogRGF0ZSB7XHJcbiAgICBjb25zdCBzZWFyY2hWYWx1ZSA9IC8tL2c7XHJcbiAgICByZXR1cm4gbmV3IERhdGUoZGF0ZVN0cmluZy5yZXBsYWNlKHNlYXJjaFZhbHVlLCAnLycpKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgcm91bmROdW1iZXIodmFsdWU6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICBpZiAoaXNOYU4odmFsdWUpKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgdmFsdWUgPSBNYXRoLnJvdW5kKHZhbHVlICogMTAwKSAvIDEwMDtcclxuICAgIHJldHVybiB2YWx1ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgaXNWYWxpZFN0cmluZ09yQXJyYXkodmFsdWU6IHN0cmluZyB8IGFueVtdKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZS5sZW5ndGggPiAwO1xyXG5cclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgaXNWYWxpZE9iamVjdCh2YWx1ZTogYW55KTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gISEodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSk7XHJcblxyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBhcnJheUJ1ZmZlclRvQmFzZTY0KGJ1ZmZlcikge1xyXG4gICAgbGV0IGJpbmFyeSA9ICcnO1xyXG4gICAgY29uc3QgYnl0ZXMgPSBuZXcgVWludDhBcnJheShidWZmZXIpO1xyXG4gICAgY29uc3QgbGVuID0gYnl0ZXMuYnl0ZUxlbmd0aDtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgYmluYXJ5ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnl0ZXNbaV0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGJ0b2EoYmluYXJ5KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgY29udmVydEJhc2U2NFRvQmxvYkRhdGEoYmFzZTY0RGF0YTogc3RyaW5nLCBjb250ZW50VHlwZTogc3RyaW5nLCBzbGljZVNpemUgPSA1MTIpIHtcclxuICAgIGJhc2U2NERhdGEgPSBiYXNlNjREYXRhLnJlcGxhY2UoL1xccy9nLCAnJyk7XHJcbiAgICBjb25zdCBieXRlQ2hhcmFjdGVycyA9IGF0b2IoYmFzZTY0RGF0YSk7XHJcbiAgICBjb25zdCBieXRlQXJyYXlzID0gW107XHJcblxyXG4gICAgZm9yIChsZXQgb2Zmc2V0ID0gMDsgb2Zmc2V0IDwgYnl0ZUNoYXJhY3RlcnMubGVuZ3RoOyBvZmZzZXQgKz0gc2xpY2VTaXplKSB7XHJcbiAgICAgIGNvbnN0IHNsaWNlID0gYnl0ZUNoYXJhY3RlcnMuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyBzbGljZVNpemUpO1xyXG5cclxuICAgICAgY29uc3QgYnl0ZU51bWJlcnMgPSBuZXcgQXJyYXkoc2xpY2UubGVuZ3RoKTtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzbGljZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGJ5dGVOdW1iZXJzW2ldID0gc2xpY2UuY2hhckNvZGVBdChpKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgYnl0ZUFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYnl0ZU51bWJlcnMpO1xyXG5cclxuICAgICAgYnl0ZUFycmF5cy5wdXNoKGJ5dGVBcnJheSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKGJ5dGVBcnJheXMsIHsgdHlwZTogY29udGVudFR5cGUgfSk7XHJcbiAgICByZXR1cm4gYmxvYjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgZ2V0QnJvd3Nlck5hbWUoKSB7XHJcbiAgICBjb25zdCBhZ2VudCA9IHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCk7XHJcbiAgICBzd2l0Y2ggKHRydWUpIHtcclxuICAgICAgY2FzZSBhZ2VudC5pbmRleE9mKCdlZGdlJykgPiAtMTpcclxuICAgICAgICByZXR1cm4gJ2VkZ2UnO1xyXG4gICAgICBjYXNlIGFnZW50LmluZGV4T2YoJ29wcicpID4gLTEgJiYgISEoPGFueT53aW5kb3cpLm9wcjpcclxuICAgICAgICByZXR1cm4gJ29wZXJhJztcclxuICAgICAgY2FzZSBhZ2VudC5pbmRleE9mKCdjaHJvbWUnKSA+IC0xICYmICEhKDxhbnk+d2luZG93KS5jaHJvbWU6XHJcbiAgICAgICAgcmV0dXJuICdjaHJvbWUnO1xyXG4gICAgICBjYXNlIGFnZW50LmluZGV4T2YoJ3RyaWRlbnQnKSA+IC0xOlxyXG4gICAgICAgIHJldHVybiAnaWUnO1xyXG4gICAgICBjYXNlIGFnZW50LmluZGV4T2YoJ2ZpcmVmb3gnKSA+IC0xOlxyXG4gICAgICAgIHJldHVybiAnZmlyZWZveCc7XHJcbiAgICAgIGNhc2UgYWdlbnQuaW5kZXhPZignc2FmYXJpJykgPiAtMTpcclxuICAgICAgICByZXR1cm4gJ3NhZmFyaSc7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuICdvdGhlcic7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIGdlcmFyVG9rZW5Bbmd1bGFyKCkge1xyXG4gICAgICBjb25zdCBjaGF2ZWVuY3JpcHRhY2FvID0gQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2UoJ3FtTnVZYXR6VGVNbjJzU1QnKTtcclxuICAgICAgY29uc3QgdmV0b3IgICA9IENyeXB0b0pTLmVuYy5VdGY4LnBhcnNlKCdcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwJyk7XHJcbiAgICAgIGxldCBwbGFpblRleHQgPSAnYW5ndWxhcjsnICsgVXRpbEZ1bmN0aW9ucy5mb3JtYXREYXRlQnJhemlsKG5ldyBEYXRlKCksIHRydWUpO1xyXG5cclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwbGFpblRleHQubGVuZ3RoICUgMTY7ICsraSkge1xyXG4gICAgICAgIHBsYWluVGV4dCA9IHBsYWluVGV4dCArICdcXHUwMDAwJztcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgY3J5cCA9IENyeXB0b0pTLkFFUy5lbmNyeXB0KENyeXB0b0pTLmVuYy5VdGY4LnBhcnNlKHBsYWluVGV4dCksIGNoYXZlZW5jcmlwdGFjYW8sIHtcclxuICAgICAgICBpdjogdmV0b3IsXHJcbiAgICAgICAga2V5U2l6ZTogMTI4LFxyXG4gICAgICAgIHBhZGRpbmc6IENyeXB0b0pTLnBhZC5Ob1BhZGRpbmcsXHJcbiAgICAgICAgbW9kZTogQ3J5cHRvSlMubW9kZS5DQkN9KTtcclxuXHJcbiAgICAgIGxldCBoZXggPSAnJztcclxuXHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY3J5cC5jaXBoZXJ0ZXh0LndvcmRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgbGV0IG51bWJlciA9IGNyeXAuY2lwaGVydGV4dC53b3Jkc1tpXTtcclxuICAgICAgICBpZiAobnVtYmVyIDwgMCkge1xyXG4gICAgICAgICAgbnVtYmVyID0gMHhGRkZGRkZGRiArIG51bWJlciArIDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCB0ZW1wSGV4ID0gbnVtYmVyLnRvU3RyaW5nKDE2KTtcclxuICAgICAgICB3aGlsZSAodGVtcEhleC5sZW5ndGggPCA4KSB7XHJcbiAgICAgICAgICB0ZW1wSGV4ID0gJzAnICsgdGVtcEhleDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaGV4ID0gaGV4ICsgdGVtcEhleDtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gaGV4O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBnZXJhclRva2VuKG1vZHVsbzogc3RyaW5nLCBrZXk6IHN0cmluZywgZGF0YUhvcmE6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBjaGF2ZWVuY3JpcHRhY2FvID0gQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2Uoa2V5KTtcclxuICAgIGNvbnN0IHZldG9yICAgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZSgnXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMFxcdTAwMDBcXHUwMDAwXFx1MDAwMCcpO1xyXG4gICAgbGV0IHBsYWluVGV4dCA9IG1vZHVsbyArICc7JyArIGRhdGFIb3JhO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGxhaW5UZXh0Lmxlbmd0aCAlIDE2OyArK2kpIHtcclxuICAgICAgcGxhaW5UZXh0ID0gcGxhaW5UZXh0ICsgJ1xcdTAwMDAnO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGNyeXAgPSBDcnlwdG9KUy5BRVMuZW5jcnlwdChDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZShwbGFpblRleHQpLCBjaGF2ZWVuY3JpcHRhY2FvLCB7XHJcbiAgICAgIGl2OiB2ZXRvcixcclxuICAgICAga2V5U2l6ZTogMTI4LFxyXG4gICAgICBwYWRkaW5nOiBDcnlwdG9KUy5wYWQuTm9QYWRkaW5nLFxyXG4gICAgICBtb2RlOiBDcnlwdG9KUy5tb2RlLkNCQ30pO1xyXG5cclxuICAgIGxldCBoZXggPSAnJztcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNyeXAuY2lwaGVydGV4dC53b3Jkcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgbnVtYmVyID0gY3J5cC5jaXBoZXJ0ZXh0LndvcmRzW2ldO1xyXG4gICAgICBpZiAobnVtYmVyIDwgMCkge1xyXG4gICAgICAgIG51bWJlciA9IDB4RkZGRkZGRkYgKyBudW1iZXIgKyAxO1xyXG4gICAgICB9XHJcbiAgICAgIGxldCB0ZW1wSGV4ID0gbnVtYmVyLnRvU3RyaW5nKDE2KTtcclxuICAgICAgd2hpbGUgKHRlbXBIZXgubGVuZ3RoIDwgOCkge1xyXG4gICAgICAgIHRlbXBIZXggPSAnMCcgKyB0ZW1wSGV4O1xyXG4gICAgICB9XHJcbiAgICAgIGhleCA9IGhleCArIHRlbXBIZXg7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaGV4O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBmb3JtYXRhckRvY3VtZW50byhkb2N1bWVudG86IHN0cmluZykge1xyXG4gICAgICBpZiAoIVV0aWxGdW5jdGlvbnMuaXNWYWxpZFN0cmluZ09yQXJyYXkoZG9jdW1lbnRvKSkge1xyXG4gICAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgICB9XHJcbiAgICAgIGRvY3VtZW50byA9IFV0aWxGdW5jdGlvbnMucmVtb3ZlTm9uTnVtYmVycyhkb2N1bWVudG8pO1xyXG4gICAgICBpZiAoZG9jdW1lbnRvLmxlbmd0aCA9PSAxMSkge1xyXG4gICAgICAgICAgcmV0dXJuIGRvY3VtZW50by5yZXBsYWNlKC8oXFxkezN9KShcXGR7M30pKFxcZHszfSkoXFxkezJ9KS9nLFwiXFwkMS5cXCQyLlxcJDNcXC1cXCQ0XCIpO1xyXG4gICAgICB9IGVsc2UgaWYgKGRvY3VtZW50by5sZW5ndGggPT0gMTQpIHtcclxuICAgICAgICAgIHJldHVybiBkb2N1bWVudG8ucmVwbGFjZSgvKFxcZHsyfSkoXFxkezN9KShcXGR7M30pKFxcZHs0fSkoXFxkezJ9KS9nLFwiXFwkMS5cXCQyLlxcJDNcXC9cXCQ0XFwtXFwkNVwiKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gJyc7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIGdldE5vbWVNZXMobWVzOiBudW1iZXIpIHtcclxuICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgIGRhdGUuc2V0TW9udGgobWVzKTtcclxuICAgICAgY29uc3QgbW9udGggPSBkYXRlLnRvTG9jYWxlU3RyaW5nKCdkZWZhdWx0JywgeyBtb250aDogJ2xvbmcnIH0pO1xyXG4gICAgICByZXR1cm4gbW9udGg7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIHRvVGl0bGVDYXNlKHN0cik6IHN0cmluZyB7XHJcbiAgICAgIHN0ciA9IHN0ci50b0xvd2VyQ2FzZSgpLnNwbGl0KCcgJyk7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgc3RyW2ldID0gc3RyW2ldLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgc3RyW2ldLnNsaWNlKDEpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBzdHIuam9pbignICcpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBnZXRFbnVtS2V5QnlFbnVtVmFsdWUobXlFbnVtLCBlbnVtVmFsdWUpIHtcclxuICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMobXlFbnVtKSkge1xyXG4gICAgICAgIGNvbnN0IHZhbHVlOiBzdHJpbmcgPSBteUVudW1ba2V5XTtcclxuICAgICAgICBpZiAodmFsdWUgPT09IGVudW1WYWx1ZS50b1N0cmluZygpKSB7XHJcbiAgICAgICAgICByZXR1cm4ga2V5O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgZ2V0SHR0cEVycm9yTWVzc2FnZSh2YWx1ZSkge1xyXG4gICAgbGV0IGVycm9yTWVzc2FnZTtcclxuICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICBpZiAodmFsdWUuZXJyb3IpIHtcclxuICAgICAgICBpZiAoVXRpbEZ1bmN0aW9ucy5pc1ZhbGlkU3RyaW5nT3JBcnJheSh2YWx1ZS5lcnJvci5kZXRhaWwpID09PSB0cnVlKSB7XHJcbiAgICAgICAgICBlcnJvck1lc3NhZ2UgPSB2YWx1ZS5lcnJvci5kZXRhaWw7XHJcbiAgICAgICAgfSBlbHNlIGlmIChVdGlsRnVuY3Rpb25zLmlzVmFsaWRTdHJpbmdPckFycmF5KHZhbHVlLmVycm9yLmVycm9yKSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgZXJyb3JNZXNzYWdlID0gdmFsdWUuZXJyb3IuZXJyb3I7XHJcbiAgICAgICAgfSBlbHNlIGlmIChVdGlsRnVuY3Rpb25zLmlzVmFsaWRTdHJpbmdPckFycmF5KHZhbHVlLmVycm9yLm1lc3NhZ2UpID09PSB0cnVlKSB7XHJcbiAgICAgICAgICBlcnJvck1lc3NhZ2UgPSB2YWx1ZS5lcnJvci5tZXNzYWdlO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoVXRpbEZ1bmN0aW9ucy5pc1ZhbGlkU3RyaW5nT3JBcnJheSh2YWx1ZS5lcnJvci5maWVsZEVycm9ycykgPT09IHRydWUgJiZcclxuICAgICAgICAgIFV0aWxGdW5jdGlvbnMuaXNWYWxpZFN0cmluZ09yQXJyYXkodmFsdWUuZXJyb3IuZmllbGRFcnJvcnNbMF0ubWVzc2FnZSkgPT09IHRydWUpIHtcclxuICAgICAgICAgIGVycm9yTWVzc2FnZSA9IHZhbHVlLmVycm9yLmZpZWxkRXJyb3JzWzBdLm1lc3NhZ2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGVycm9yTWVzc2FnZSA9IHZhbHVlLmVycm9yO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmIChVdGlsRnVuY3Rpb25zLmlzVmFsaWRTdHJpbmdPckFycmF5KHZhbHVlLm1lc3NhZ2UpID09PSB0cnVlKSB7XHJcbiAgICAgICAgZXJyb3JNZXNzYWdlID0gdmFsdWUubWVzc2FnZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBlcnJvck1lc3NhZ2UgPSB2YWx1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKFV0aWxGdW5jdGlvbnMuaXNWYWxpZFN0cmluZ09yQXJyYXkoZXJyb3JNZXNzYWdlKSA9PT0gZmFsc2UpIHtcclxuICAgICAgZXJyb3JNZXNzYWdlID0gJ0Vycm8gZGVzY29uaGVjaWRvJztcclxuICAgIH1cclxuICAgIHJldHVybiBlcnJvck1lc3NhZ2U7XHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCB7XHJcbiAgQWZ0ZXJWaWV3SW5pdCxcclxuICBEaXJlY3RpdmUsXHJcbiAgRWxlbWVudFJlZixcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSG9zdExpc3RlbmVyLFxyXG4gIElucHV0LFxyXG4gIE9uQ2hhbmdlcyxcclxuICBPdXRwdXQsXHJcbiAgU2ltcGxlQ2hhbmdlc1xyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge05HX1ZBTElEQVRPUlMsIFZhbGlkYXRvcn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQge0NwZkNucGpWYWxpZGF0b3J9IGZyb20gJy4vY3BmLWNucGoudmFsaWRhdG9yJztcclxuaW1wb3J0IHtEb2NUeXBlLCBSZWFsVGltZU1hc2tUeXBlfSBmcm9tICcuLi8uLi9tb2RlbC9jcGYtY25wai5tb2RlbCc7XHJcbmltcG9ydCB7VXRpbEZ1bmN0aW9uc30gZnJvbSAnLi4vLi4vdXRpbC91dGlsLWZ1bmN0aW9ucyc7XHJcblxyXG5ARGlyZWN0aXZlKHtcclxuICBzZWxlY3RvcjogJ1tqaGktdmFsaWRhdGUtZG9jdW1lbnRvXVtuZ01vZGVsXScsXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXHJcbiAgICAgIHVzZUV4aXN0aW5nOiBDcGZDbnBqVmFsaWRhdG9yRGlyZWN0aXZlLFxyXG4gICAgICBtdWx0aTogdHJ1ZVxyXG4gICAgfVxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIENwZkNucGpWYWxpZGF0b3JEaXJlY3RpdmUgZXh0ZW5kcyBDcGZDbnBqVmFsaWRhdG9yIGltcGxlbWVudHMgVmFsaWRhdG9yLCBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMge1xyXG4gIEBJbnB1dCgpXHJcbiAgcmVhbFRpbWVNYXNrOiBSZWFsVGltZU1hc2tUeXBlID0gUmVhbFRpbWVNYXNrVHlwZS5OT05FO1xyXG4gIGluaXQgPSBmYWxzZTtcclxuICBnZXQgZG9jdW1lbnRUeXBlKCkgOiBEb2NUeXBlIHtcclxuICAgIHJldHVybiB0aGlzLmRvY1R5cGU7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBkb2N1bWVudFR5cGUodmFsOiBEb2NUeXBlKSB7XHJcbiAgICBpZiAodmFsICE9PSB0aGlzLmRvY1R5cGUpIHtcclxuICAgICAgdGhpcy5kb2NUeXBlID0gdmFsO1xyXG4gICAgICBpZiAodGhpcy5pbml0KSB7XHJcbiAgICAgICAgdGhpcy5kb2N1bWVudE1hc2tlZChldmVudCwgZmFsc2UpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIG5nTW9kZWw7XHJcbiAgQE91dHB1dCgpIG5nTW9kZWxDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICBwcml2YXRlIHNwZWNpYWxLZXlzOiBBcnJheTxzdHJpbmc+ID0gW1xyXG4gICAgLyo4LCAqLyAnVGFiJyxcclxuICAgIC8qOSwgKi8gJ0JhY2tzcGFjZScsXHJcbiAgICAvKjEyLCovICdFc2NhcGUnLFxyXG4gICAgLyozNSwqLyAnRW5kJyxcclxuICAgIC8qMzYsKi8gJ0hvbWUnLFxyXG4gICAgLyozNywqLyAnQXJyb3dMZWZ0JyxcclxuICAgIC8qMzgsKi8gJ0Fycm93VXAnLFxyXG4gICAgLyozOSwqLyAnQXJyb3dSaWdodCcsXHJcbiAgICAvKjQwLCovICdBcnJvd0Rvd24nLFxyXG4gICAgLyo0NiwqLyAnRGVsZXRlJ1xyXG4gIF07XHJcbiAgcHJpdmF0ZSB3YXNEZWxldGVBY3Rpb246IGJvb2xlYW47XHJcblxyXG4gIHN0YXRpYyBtYXNjYXJhQ3BmRmlyc3RQYXJ0KHZhbG9yKSB7XHJcbiAgICBjb25zdCByZWdFeHAgPSAvKFswLTldezN9KShbMC05XXswLDN9KS87XHJcbiAgICByZXR1cm4gdmFsb3IucmVwbGFjZShyZWdFeHAsICckMS4kMicpO1xyXG4gIH1cclxuICBzdGF0aWMgbWFzY2FyYUNucGpGaXJzdFBhcnQodmFsb3IpIHtcclxuICAgIGNvbnN0IHJlZ0V4cCA9IC8oWzAtOV17Mn0pKFswLTldezAsM30pLztcclxuICAgIHJldHVybiB2YWxvci5yZXBsYWNlKHJlZ0V4cCwgJyQxLiQyJyk7XHJcbiAgfVxyXG4gIHN0YXRpYyBtYXNjYXJhQ3BmU2Vjb25kUGFydCh2YWxvcikge1xyXG4gICAgY29uc3QgcmVnRXhwID0gLyhbMC05XXszfSkoWzAtOV17M30pKFswLTldezAsM30pLztcclxuICAgIHJldHVybiB2YWxvci5yZXBsYWNlKHJlZ0V4cCwgJyQxLiQyLiQzJyk7XHJcbiAgfVxyXG4gIHN0YXRpYyBtYXNjYXJhQ25walNlY29uZFBhcnQodmFsb3IpIHtcclxuICAgIGNvbnN0IHJlZ0V4cCA9IC8oWzAtOV17Mn0pKFswLTldezN9KShbMC05XXswLDN9KS87XHJcbiAgICByZXR1cm4gdmFsb3IucmVwbGFjZShyZWdFeHAsICckMS4kMi4kMycpO1xyXG4gIH1cclxuICBzdGF0aWMgbWFzY2FyYUNucGpUaGlyZFBhcnQodmFsb3IpIHtcclxuICAgIGNvbnN0IHJlZ0V4cCA9IC8oWzAtOV17Mn0pKFswLTldezN9KShbMC05XXszfSkoWzAtOV17MCw0fSkvO1xyXG4gICAgcmV0dXJuIHZhbG9yLnJlcGxhY2UocmVnRXhwLCAnJDEuJDIuJDMvJDQnKTtcclxuICB9XHJcbiAgc3RhdGljIG1hc2NhcmFDcGYodmFsb3IpIHtcclxuICAgIGNvbnN0IHJlZ0V4cCA9IC8oWzAtOSBfXXswLDN9KShbMC05IF9dezAsM30pKFswLTkgX117MCwzfSkoWzAtOSBfXXswLDJ9KS87XHJcbiAgICByZXR1cm4gdmFsb3IucmVwbGFjZShyZWdFeHAsICckMS4kMi4kMy0kNCcpO1xyXG4gIH1cclxuICBzdGF0aWMgbWFzY2FyYUJvbmRhcmllcyh2YWxvcikge1xyXG4gICAgY29uc3QgcmVnRXhwID0gLyhbMC05XXsyfSkoWzAtOV17M30pKFswLTldezN9KShbMC05XXs0fSkvO1xyXG4gICAgcmV0dXJuIHZhbG9yLnJlcGxhY2UocmVnRXhwLCAnJDEuJDIuJDMvJDQnKTtcclxuICB9XHJcbiAgc3RhdGljIG1hc2NhcmFDbnBqKHZhbG9yKSB7XHJcbiAgICBjb25zdCByZWdFeHAgPSAvKFswLTkgX117MCwyfSkoWzAtOSBfXXswLDN9KShbMC05IF9dezAsM30pKFswLTkgX117MCw0fSkoWzAtOSBfXXswLDJ9KS87XHJcbiAgICByZXR1cm4gdmFsb3IucmVwbGFjZShyZWdFeHAsICckMS4kMi4kMy8kNC0kNScpO1xyXG4gIH1cclxuICBzdGF0aWMgaXNOdW1iZXIodmFsdWU6IHN0cmluZyB8IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IG51bGwpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuICFpc05hTihOdW1iZXIodmFsdWUudG9TdHJpbmcoKSkpO1xyXG4gIH1cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsZW1lbnQ6IEVsZW1lbnRSZWYpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuaW5pdCA9IHRydWU7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSB0aGlzLm5nTW9kZWw7XHJcbiAgICAgIHRoaXMuZG9jdW1lbnRNYXNrZWQoZXZlbnQsIGZhbHNlKTtcclxuICAgIH0pO1xyXG4gIH1cclxuICBASG9zdExpc3RlbmVyKCdrZXlkb3duJywgWyckZXZlbnQnXSlcclxuICBrZXlEb3duKGV2ZW50KSB7XHJcbiAgICBjb25zdCBlOiBLZXlib2FyZEV2ZW50ID0gZXZlbnQgYXMgS2V5Ym9hcmRFdmVudDtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5zcGVjaWFsS2V5cy5pbmRleE9mKGUua2V5KSAhPT0gLTEgfHxcclxuICAgICAgLy8gQ3RybCtBXHJcbiAgICAgIChlLmtleSA9PT0gJ2EnICYmIChlLmN0cmxLZXkgfHwgZS5tZXRhS2V5KSkgfHxcclxuICAgICAgLy8gQ3RybCtDXHJcbiAgICAgIChlLmtleSA9PT0gJ2MnICYmIChlLmN0cmxLZXkgfHwgZS5tZXRhS2V5KSkgfHxcclxuICAgICAgLy8gQ3RybCtWXHJcbiAgICAgIChlLmtleSA9PT0gJ3YnICYmIChlLmN0cmxLZXkgfHwgZS5tZXRhS2V5KSkgfHxcclxuICAgICAgLy8gQ3RybCtYXHJcbiAgICAgIChlLmtleSA9PT0gJ3gnICYmIChlLmN0cmxLZXkgfHwgZS5tZXRhS2V5KSlcclxuICAgICkge1xyXG4gICAgICBpZiAoZS5rZXkgPT09ICdEZWxldGUnKSB7XHJcbiAgICAgICAgLy8gRGVsZXRlXHJcbiAgICAgICAgdGhpcy53YXNEZWxldGVBY3Rpb24gPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmIChlLnNoaWZ0S2V5IHx8ICFDcGZDbnBqVmFsaWRhdG9yRGlyZWN0aXZlLmlzTnVtYmVyKGUua2V5KSkge1xyXG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnJlYWxUaW1lTWFzayA9PT0gUmVhbFRpbWVNYXNrVHlwZS5OT05FKSB7XHJcbiAgICAgIGlmICh0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC52YWx1ZS5sZW5ndGggPT09IENwZkNucGpWYWxpZGF0b3IuY25wakxlbmd0aCkge1xyXG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGNvbnN0IGFmdGVyTWFzayA9IHRoaXMud2FzRGVsZXRlQWN0aW9uO1xyXG4gICAgdGhpcy53YXNEZWxldGVBY3Rpb24gPSBmYWxzZTtcclxuICAgIGlmICh0aGlzLnJlYWxUaW1lTWFzayAhPT0gUmVhbFRpbWVNYXNrVHlwZS5OT05FKSB7XHJcbiAgICAgIHRoaXMuZG9jdW1lbnRNYXNrZWQoZXZlbnQsIGFmdGVyTWFzayk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZWdpc3Rlck9uVmFsaWRhdG9yQ2hhbmdlKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCdmb2N1cycsIFsnJGV2ZW50J10pXHJcbiAgZm9jdXMoZXZlbnQpIHtcclxuICAgIGlmICh0aGlzLnJlYWxUaW1lTWFzayA9PT0gUmVhbFRpbWVNYXNrVHlwZS5OT05FKSB7XHJcbiAgICAgIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LnZhbHVlID0gdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWUucmVwbGFjZSgvXFxEL2csICcnKTtcclxuICAgIH1cclxuICB9XHJcbiAgQEhvc3RMaXN0ZW5lcignYmx1cicsIFsnJGV2ZW50J10pXHJcbiAgYmx1cihldmVudCkge1xyXG4gICAgaWYgKHRoaXMucmVhbFRpbWVNYXNrID09PSBSZWFsVGltZU1hc2tUeXBlLk5PTkUpIHtcclxuICAgICAgbGV0IGNwZkNucGogPSB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC52YWx1ZS5yZXBsYWNlKC9cXEQvZywgJycpO1xyXG4gICAgICBpZiAoY3BmQ25wai5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZG9jVHlwZSA9PT0gRG9jVHlwZS5CT1RIKSB7XHJcbiAgICAgICAgICBpZiAoY3BmQ25wai5sZW5ndGggPD0gQ3BmQ25walZhbGlkYXRvci5jcGZMZW5ndGhGaXJzdFBhcnQpIHtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoY3BmQ25wai5sZW5ndGggPiBDcGZDbnBqVmFsaWRhdG9yLmNwZkxlbmd0aEZpcnN0UGFydCAmJiBjcGZDbnBqLmxlbmd0aCA8PSBDcGZDbnBqVmFsaWRhdG9yLmNwZkxlbmd0aFNlY29uZFBhcnQpIHtcclxuICAgICAgICAgICAgY3BmQ25waiA9IENwZkNucGpWYWxpZGF0b3JEaXJlY3RpdmUubWFzY2FyYUNwZkZpcnN0UGFydChjcGZDbnBqKTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoY3BmQ25wai5sZW5ndGggPiBDcGZDbnBqVmFsaWRhdG9yLmNwZkxlbmd0aFNlY29uZFBhcnQgJiYgY3BmQ25wai5sZW5ndGggPD0gQ3BmQ25walZhbGlkYXRvci5jcGZMZW5ndGhUaGlyZFBhcnQpIHtcclxuICAgICAgICAgICAgY3BmQ25waiA9IENwZkNucGpWYWxpZGF0b3JEaXJlY3RpdmUubWFzY2FyYUNwZlNlY29uZFBhcnQoY3BmQ25waik7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGNwZkNucGoubGVuZ3RoID4gQ3BmQ25walZhbGlkYXRvci5jcGZMZW5ndGhUaGlyZFBhcnQgJiYgY3BmQ25wai5sZW5ndGggPD0gQ3BmQ25walZhbGlkYXRvci5jcGZMZW5ndGgpIHtcclxuICAgICAgICAgICAgY3BmQ25waiA9IENwZkNucGpWYWxpZGF0b3JEaXJlY3RpdmUubWFzY2FyYUNwZihjcGZDbnBqKTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoY3BmQ25wai5sZW5ndGggPT09IENwZkNucGpWYWxpZGF0b3IuY25wakNwZkxlbmd0aEJvdW5kYXJpZXMpIHtcclxuICAgICAgICAgICAgY3BmQ25waiA9IENwZkNucGpWYWxpZGF0b3JEaXJlY3RpdmUubWFzY2FyYUJvbmRhcmllcyhjcGZDbnBqKTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoY3BmQ25wai5sZW5ndGggPiBDcGZDbnBqVmFsaWRhdG9yLmNucGpDcGZMZW5ndGhCb3VuZGFyaWVzICYmIGNwZkNucGoubGVuZ3RoIDw9IENwZkNucGpWYWxpZGF0b3IuY25wakxlbmd0aCkge1xyXG4gICAgICAgICAgICBjcGZDbnBqID0gQ3BmQ25walZhbGlkYXRvckRpcmVjdGl2ZS5tYXNjYXJhQ25waihjcGZDbnBqKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNwZkNucGogPSBDcGZDbnBqVmFsaWRhdG9yRGlyZWN0aXZlLm1hc2NhcmFDbnBqKGNwZkNucGouc3Vic3RyaW5nKDAsIENwZkNucGpWYWxpZGF0b3IuY25wakxlbmd0aCkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5kb2NUeXBlID09PSBEb2NUeXBlLkNQRikge1xyXG4gICAgICAgICAgaWYgKGNwZkNucGoubGVuZ3RoIDw9IENwZkNucGpWYWxpZGF0b3IuY3BmTGVuZ3RoRmlyc3RQYXJ0KSB7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGNwZkNucGoubGVuZ3RoID4gQ3BmQ25walZhbGlkYXRvci5jcGZMZW5ndGhGaXJzdFBhcnQgJiYgY3BmQ25wai5sZW5ndGggPD0gQ3BmQ25walZhbGlkYXRvci5jcGZMZW5ndGhTZWNvbmRQYXJ0KSB7XHJcbiAgICAgICAgICAgIGNwZkNucGogPSBDcGZDbnBqVmFsaWRhdG9yRGlyZWN0aXZlLm1hc2NhcmFDcGZGaXJzdFBhcnQoY3BmQ25waik7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGNwZkNucGoubGVuZ3RoID4gQ3BmQ25walZhbGlkYXRvci5jcGZMZW5ndGhTZWNvbmRQYXJ0ICYmIGNwZkNucGoubGVuZ3RoIDw9IENwZkNucGpWYWxpZGF0b3IuY3BmTGVuZ3RoVGhpcmRQYXJ0KSB7XHJcbiAgICAgICAgICAgIGNwZkNucGogPSBDcGZDbnBqVmFsaWRhdG9yRGlyZWN0aXZlLm1hc2NhcmFDcGZTZWNvbmRQYXJ0KGNwZkNucGopO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChjcGZDbnBqLmxlbmd0aCA+IENwZkNucGpWYWxpZGF0b3IuY3BmTGVuZ3RoVGhpcmRQYXJ0ICYmIGNwZkNucGoubGVuZ3RoIDw9IENwZkNucGpWYWxpZGF0b3IuY3BmTGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGNwZkNucGogPSBDcGZDbnBqVmFsaWRhdG9yRGlyZWN0aXZlLm1hc2NhcmFDcGYoY3BmQ25waik7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjcGZDbnBqID0gQ3BmQ25walZhbGlkYXRvckRpcmVjdGl2ZS5tYXNjYXJhQ3BmKGNwZkNucGouc3Vic3RyaW5nKDAsIENwZkNucGpWYWxpZGF0b3IuY3BmTGVuZ3RoKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRvY1R5cGUgPT09IERvY1R5cGUuQ05QSikge1xyXG4gICAgICAgICAgaWYgKGNwZkNucGoubGVuZ3RoIDw9IENwZkNucGpWYWxpZGF0b3IuY25wakxlbmd0aEZpcnN0UGFydCkge1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChjcGZDbnBqLmxlbmd0aCA+IENwZkNucGpWYWxpZGF0b3IuY25wakxlbmd0aEZpcnN0UGFydCAmJiBjcGZDbnBqLmxlbmd0aCA8PSBDcGZDbnBqVmFsaWRhdG9yLmNucGpMZW5ndGhTZWNvbmRQYXJ0KSB7XHJcbiAgICAgICAgICAgIGNwZkNucGogPSBDcGZDbnBqVmFsaWRhdG9yRGlyZWN0aXZlLm1hc2NhcmFDbnBqRmlyc3RQYXJ0KGNwZkNucGopO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChjcGZDbnBqLmxlbmd0aCA+IENwZkNucGpWYWxpZGF0b3IuY25wakxlbmd0aFNlY29uZFBhcnQgJiYgY3BmQ25wai5sZW5ndGggPD0gQ3BmQ25walZhbGlkYXRvci5jbnBqTGVuZ3RoVGhpcmRQYXJ0KSB7XHJcbiAgICAgICAgICAgIGNwZkNucGogPSBDcGZDbnBqVmFsaWRhdG9yRGlyZWN0aXZlLm1hc2NhcmFDbnBqU2Vjb25kUGFydChjcGZDbnBqKTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoY3BmQ25wai5sZW5ndGggPiBDcGZDbnBqVmFsaWRhdG9yLmNucGpMZW5ndGhUaGlyZFBhcnQgJiYgY3BmQ25wai5sZW5ndGggPD0gQ3BmQ25walZhbGlkYXRvci5jbnBqQ3BmTGVuZ3RoQm91bmRhcmllcykge1xyXG4gICAgICAgICAgICBjcGZDbnBqID0gQ3BmQ25walZhbGlkYXRvckRpcmVjdGl2ZS5tYXNjYXJhQ25walRoaXJkUGFydChjcGZDbnBqKTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoY3BmQ25wai5sZW5ndGggPiBDcGZDbnBqVmFsaWRhdG9yLmNucGpDcGZMZW5ndGhCb3VuZGFyaWVzICYmIGNwZkNucGoubGVuZ3RoIDw9IENwZkNucGpWYWxpZGF0b3IuY25wakxlbmd0aCkge1xyXG4gICAgICAgICAgICBjcGZDbnBqID0gQ3BmQ25walZhbGlkYXRvckRpcmVjdGl2ZS5tYXNjYXJhQ25waihjcGZDbnBqKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNwZkNucGogPSBDcGZDbnBqVmFsaWRhdG9yRGlyZWN0aXZlLm1hc2NhcmFDbnBqKGNwZkNucGouc3Vic3RyaW5nKDAsIENwZkNucGpWYWxpZGF0b3IuY25wakxlbmd0aCkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSBjcGZDbnBqO1xyXG4gICAgICB0aGlzLmZvcmNlVXBkYXRlKGNwZkNucGopO1xyXG4gICAgfVxyXG4gIH1cclxuICBkb2N1bWVudE1hc2tlZChldmVudCwgYWZ0ZXJNYXNrOiBib29sZWFuKSB7XHJcblxyXG4gICAgY29uc3QgZWwgPSB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudDtcclxuICAgIGxldCBzdGFydCA9IGVsLnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgbGV0IHZhbHVlID0gVXRpbEZ1bmN0aW9ucy5pc1ZhbGlkU3RyaW5nT3JBcnJheSh0aGlzLm5nTW9kZWwpID8gdGhpcy5uZ01vZGVsLnRvU3RyaW5nKCkgOiAnJztcclxuICAgIGxldCBjdXJzb3IgPSAwO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdGFydDsgaSsrKSB7XHJcbiAgICAgIGlmICghQ3BmQ25walZhbGlkYXRvckRpcmVjdGl2ZS5pc051bWJlcih2YWx1ZVtpXSkpIHtcclxuICAgICAgICBjb250aW51ZTtcclxuICAgICAgfVxyXG4gICAgICBjdXJzb3IrKztcclxuICAgIH1cclxuICAgIGxldCBjcGZDbnBqID0gdmFsdWUucmVwbGFjZSgvXFxEL2csICcnKTtcclxuICAgIHRyeSB7XHJcbiAgICAgIGlmICh0aGlzLnJlYWxUaW1lTWFzayA9PT0gUmVhbFRpbWVNYXNrVHlwZS5DTEFTU0lDKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZG9jVHlwZSA9PT0gRG9jVHlwZS5CT1RIKSB7XHJcbiAgICAgICAgICBpZiAoY3BmQ25wai5sZW5ndGggPD0gQ3BmQ25walZhbGlkYXRvci5jcGZMZW5ndGhGaXJzdFBhcnQpIHtcclxuICAgICAgICAgICAgdmFsdWUgPSBjcGZDbnBqO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChjcGZDbnBqLmxlbmd0aCA+IENwZkNucGpWYWxpZGF0b3IuY3BmTGVuZ3RoRmlyc3RQYXJ0ICYmIGNwZkNucGoubGVuZ3RoIDw9IENwZkNucGpWYWxpZGF0b3IuY3BmTGVuZ3RoU2Vjb25kUGFydCkge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IENwZkNucGpWYWxpZGF0b3JEaXJlY3RpdmUubWFzY2FyYUNwZkZpcnN0UGFydChjcGZDbnBqKTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoY3BmQ25wai5sZW5ndGggPiBDcGZDbnBqVmFsaWRhdG9yLmNwZkxlbmd0aFNlY29uZFBhcnQgJiYgY3BmQ25wai5sZW5ndGggPD0gQ3BmQ25walZhbGlkYXRvci5jcGZMZW5ndGhUaGlyZFBhcnQpIHtcclxuICAgICAgICAgICAgdmFsdWUgPSBDcGZDbnBqVmFsaWRhdG9yRGlyZWN0aXZlLm1hc2NhcmFDcGZTZWNvbmRQYXJ0KGNwZkNucGopO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChjcGZDbnBqLmxlbmd0aCA+IENwZkNucGpWYWxpZGF0b3IuY3BmTGVuZ3RoVGhpcmRQYXJ0ICYmIGNwZkNucGoubGVuZ3RoIDw9IENwZkNucGpWYWxpZGF0b3IuY3BmTGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gQ3BmQ25walZhbGlkYXRvckRpcmVjdGl2ZS5tYXNjYXJhQ3BmKGNwZkNucGopO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChjcGZDbnBqLmxlbmd0aCA9PT0gQ3BmQ25walZhbGlkYXRvci5jbnBqQ3BmTGVuZ3RoQm91bmRhcmllcykge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IENwZkNucGpWYWxpZGF0b3JEaXJlY3RpdmUubWFzY2FyYUJvbmRhcmllcyhjcGZDbnBqKTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoY3BmQ25wai5sZW5ndGggPiBDcGZDbnBqVmFsaWRhdG9yLmNucGpDcGZMZW5ndGhCb3VuZGFyaWVzICYmIGNwZkNucGoubGVuZ3RoIDw9IENwZkNucGpWYWxpZGF0b3IuY25wakxlbmd0aCkge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IENwZkNucGpWYWxpZGF0b3JEaXJlY3RpdmUubWFzY2FyYUNucGooY3BmQ25waik7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IENwZkNucGpWYWxpZGF0b3JEaXJlY3RpdmUubWFzY2FyYUNucGooY3BmQ25wai5zdWJzdHJpbmcoMCwgQ3BmQ25walZhbGlkYXRvci5jbnBqTGVuZ3RoKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRvY1R5cGUgPT09IERvY1R5cGUuQ1BGKSB7XHJcbiAgICAgICAgICBpZiAoY3BmQ25wai5sZW5ndGggPD0gQ3BmQ25walZhbGlkYXRvci5jcGZMZW5ndGhGaXJzdFBhcnQpIHtcclxuICAgICAgICAgICAgdmFsdWUgPSBjcGZDbnBqO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChjcGZDbnBqLmxlbmd0aCA+IENwZkNucGpWYWxpZGF0b3IuY3BmTGVuZ3RoRmlyc3RQYXJ0ICYmIGNwZkNucGoubGVuZ3RoIDw9IENwZkNucGpWYWxpZGF0b3IuY3BmTGVuZ3RoU2Vjb25kUGFydCkge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IENwZkNucGpWYWxpZGF0b3JEaXJlY3RpdmUubWFzY2FyYUNwZkZpcnN0UGFydChjcGZDbnBqKTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoY3BmQ25wai5sZW5ndGggPiBDcGZDbnBqVmFsaWRhdG9yLmNwZkxlbmd0aFNlY29uZFBhcnQgJiYgY3BmQ25wai5sZW5ndGggPD0gQ3BmQ25walZhbGlkYXRvci5jcGZMZW5ndGhUaGlyZFBhcnQpIHtcclxuICAgICAgICAgICAgdmFsdWUgPSBDcGZDbnBqVmFsaWRhdG9yRGlyZWN0aXZlLm1hc2NhcmFDcGZTZWNvbmRQYXJ0KGNwZkNucGopO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChjcGZDbnBqLmxlbmd0aCA+IENwZkNucGpWYWxpZGF0b3IuY3BmTGVuZ3RoVGhpcmRQYXJ0ICYmIGNwZkNucGoubGVuZ3RoIDw9IENwZkNucGpWYWxpZGF0b3IuY3BmTGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gQ3BmQ25walZhbGlkYXRvckRpcmVjdGl2ZS5tYXNjYXJhQ3BmKGNwZkNucGopO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdmFsdWUgPSBDcGZDbnBqVmFsaWRhdG9yRGlyZWN0aXZlLm1hc2NhcmFDcGYoY3BmQ25wai5zdWJzdHJpbmcoMCwgQ3BmQ25walZhbGlkYXRvci5jcGZMZW5ndGgpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZG9jVHlwZSA9PT0gRG9jVHlwZS5DTlBKKSB7XHJcbiAgICAgICAgICBpZiAoY3BmQ25wai5sZW5ndGggPD0gQ3BmQ25walZhbGlkYXRvci5jbnBqTGVuZ3RoRmlyc3RQYXJ0KSB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gY3BmQ25wajtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoY3BmQ25wai5sZW5ndGggPiBDcGZDbnBqVmFsaWRhdG9yLmNucGpMZW5ndGhGaXJzdFBhcnQgJiYgY3BmQ25wai5sZW5ndGggPD0gQ3BmQ25walZhbGlkYXRvci5jbnBqTGVuZ3RoU2Vjb25kUGFydCkge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IENwZkNucGpWYWxpZGF0b3JEaXJlY3RpdmUubWFzY2FyYUNucGpGaXJzdFBhcnQoY3BmQ25waik7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGNwZkNucGoubGVuZ3RoID4gQ3BmQ25walZhbGlkYXRvci5jbnBqTGVuZ3RoU2Vjb25kUGFydCAmJiBjcGZDbnBqLmxlbmd0aCA8PSBDcGZDbnBqVmFsaWRhdG9yLmNucGpMZW5ndGhUaGlyZFBhcnQpIHtcclxuICAgICAgICAgICAgdmFsdWUgPSBDcGZDbnBqVmFsaWRhdG9yRGlyZWN0aXZlLm1hc2NhcmFDbnBqU2Vjb25kUGFydChjcGZDbnBqKTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoY3BmQ25wai5sZW5ndGggPiBDcGZDbnBqVmFsaWRhdG9yLmNucGpMZW5ndGhUaGlyZFBhcnQgJiYgY3BmQ25wai5sZW5ndGggPD0gQ3BmQ25walZhbGlkYXRvci5jbnBqQ3BmTGVuZ3RoQm91bmRhcmllcykge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IENwZkNucGpWYWxpZGF0b3JEaXJlY3RpdmUubWFzY2FyYUNucGpUaGlyZFBhcnQoY3BmQ25waik7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGNwZkNucGoubGVuZ3RoID4gQ3BmQ25walZhbGlkYXRvci5jbnBqQ3BmTGVuZ3RoQm91bmRhcmllcyAmJiBjcGZDbnBqLmxlbmd0aCA8PSBDcGZDbnBqVmFsaWRhdG9yLmNucGpMZW5ndGgpIHtcclxuICAgICAgICAgICAgdmFsdWUgPSBDcGZDbnBqVmFsaWRhdG9yRGlyZWN0aXZlLm1hc2NhcmFDbnBqKGNwZkNucGopO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdmFsdWUgPSBDcGZDbnBqVmFsaWRhdG9yRGlyZWN0aXZlLm1hc2NhcmFDbnBqKGNwZkNucGouc3Vic3RyaW5nKDAsIENwZkNucGpWYWxpZGF0b3IuY25wakxlbmd0aCkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmICh0aGlzLnJlYWxUaW1lTWFzayA9PT0gUmVhbFRpbWVNYXNrVHlwZS5QTEFDRUhPTERFUikge1xyXG4gICAgICAgIGlmICh0aGlzLmRvY1R5cGUgPT09IERvY1R5cGUuQk9USCkge1xyXG4gICAgICAgICAgaWYgKGNwZkNucGoubGVuZ3RoIDw9IENwZkNucGpWYWxpZGF0b3IuY3BmTGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGNwZkNucGogPSBjcGZDbnBqICsgJ18nLnJlcGVhdChDcGZDbnBqVmFsaWRhdG9yLmNwZkxlbmd0aCAtIGNwZkNucGoubGVuZ3RoKTtcclxuICAgICAgICAgICAgdmFsdWUgPSBDcGZDbnBqVmFsaWRhdG9yRGlyZWN0aXZlLm1hc2NhcmFDcGYoY3BmQ25waik7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGNwZkNucGoubGVuZ3RoIDw9IENwZkNucGpWYWxpZGF0b3IuY25wakxlbmd0aCkge1xyXG4gICAgICAgICAgICBjcGZDbnBqID0gY3BmQ25waiArICdfJy5yZXBlYXQoQ3BmQ25walZhbGlkYXRvci5jbnBqTGVuZ3RoIC0gY3BmQ25wai5sZW5ndGgpO1xyXG4gICAgICAgICAgICB2YWx1ZSA9IENwZkNucGpWYWxpZGF0b3JEaXJlY3RpdmUubWFzY2FyYUNucGooY3BmQ25waik7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IENwZkNucGpWYWxpZGF0b3JEaXJlY3RpdmUubWFzY2FyYUNucGooY3BmQ25wai5zdWJzdHJpbmcoMCwgQ3BmQ25walZhbGlkYXRvci5jbnBqTGVuZ3RoKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRvY1R5cGUgPT09IERvY1R5cGUuQ1BGKSB7XHJcbiAgICAgICAgICBpZiAoY3BmQ25wai5sZW5ndGggPD0gQ3BmQ25walZhbGlkYXRvci5jcGZMZW5ndGgpIHtcclxuICAgICAgICAgICAgY3BmQ25waiA9IGNwZkNucGogKyAnXycucmVwZWF0KENwZkNucGpWYWxpZGF0b3IuY3BmTGVuZ3RoIC0gY3BmQ25wai5sZW5ndGgpO1xyXG4gICAgICAgICAgICB2YWx1ZSA9IENwZkNucGpWYWxpZGF0b3JEaXJlY3RpdmUubWFzY2FyYUNwZihjcGZDbnBqKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gQ3BmQ25walZhbGlkYXRvckRpcmVjdGl2ZS5tYXNjYXJhQ3BmKGNwZkNucGouc3Vic3RyaW5nKDAsIENwZkNucGpWYWxpZGF0b3IuY3BmTGVuZ3RoKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRvY1R5cGUgPT09IERvY1R5cGUuQ05QSikge1xyXG4gICAgICAgICAgaWYgKGNwZkNucGoubGVuZ3RoIDw9IENwZkNucGpWYWxpZGF0b3IuY25wakxlbmd0aCkge1xyXG4gICAgICAgICAgICBjcGZDbnBqID0gY3BmQ25waiArICdfJy5yZXBlYXQoQ3BmQ25walZhbGlkYXRvci5jbnBqTGVuZ3RoIC0gY3BmQ25wai5sZW5ndGgpO1xyXG4gICAgICAgICAgICB2YWx1ZSA9IENwZkNucGpWYWxpZGF0b3JEaXJlY3RpdmUubWFzY2FyYUNucGooY3BmQ25waik7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IENwZkNucGpWYWxpZGF0b3JEaXJlY3RpdmUubWFzY2FyYUNucGooY3BmQ25wai5zdWJzdHJpbmcoMCwgQ3BmQ25walZhbGlkYXRvci5jbnBqTGVuZ3RoKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBsZXQgbmV3Q3Vyc29yID0gMDtcclxuICAgICAgZm9yIChzdGFydCA9IDA7IHN0YXJ0IDwgdmFsdWUubGVuZ3RoOyBzdGFydCsrKSB7XHJcbiAgICAgICAgaWYgKG5ld0N1cnNvciA9PT0gY3Vyc29yKSB7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFDcGZDbnBqVmFsaWRhdG9yRGlyZWN0aXZlLmlzTnVtYmVyKHZhbHVlW3N0YXJ0XSkpIHtcclxuICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBuZXdDdXJzb3IrKztcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5yZWFsVGltZU1hc2sgPT09IFJlYWxUaW1lTWFza1R5cGUuQ0xBU1NJQykge1xyXG4gICAgICAgIGlmIChhZnRlck1hc2sgJiYgIUNwZkNucGpWYWxpZGF0b3JEaXJlY3RpdmUuaXNOdW1iZXIodmFsdWVbc3RhcnRdKSkge1xyXG4gICAgICAgICAgc3RhcnQrKztcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5yZWFsVGltZU1hc2sgPT09IFJlYWxUaW1lTWFza1R5cGUuUExBQ0VIT0xERVIpIHtcclxuICAgICAgICBpZiAoYWZ0ZXJNYXNrICYmIHZhbHVlW3N0YXJ0XSAhPT0gJ18nICYmICFDcGZDbnBqVmFsaWRhdG9yRGlyZWN0aXZlLmlzTnVtYmVyKHZhbHVlW3N0YXJ0XSkpIHtcclxuICAgICAgICAgIHN0YXJ0Kys7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGVsLnZhbHVlID0gdmFsdWU7XHJcbiAgICAgIGVsLmZvY3VzKCk7XHJcbiAgICAgIGVsLnNldFNlbGVjdGlvblJhbmdlKHN0YXJ0LCBzdGFydCk7XHJcbiAgICAgIGVsLnNldEF0dHJpYnV0ZSgnZGF0YS1vbGQtdmFsdWUnLCB2YWx1ZSk7XHJcbiAgICAgIGlmICh0aGlzLm5nTW9kZWwgIT09IHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5mb3JjZVVwZGF0ZSh2YWx1ZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8qXHJcbiAgICAgIGlmIChuZWVkVXBkYXRlKSB7XHJcblxyXG4gICAgICB9XHJcbiAgICAgICovXHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZm9yY2VVcGRhdGUodmFsdWU6IHN0cmluZykge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMubmdNb2RlbENoYW5nZS5lbWl0KHZhbHVlKTtcclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQge05nTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtDcGZDbnBqVmFsaWRhdG9yRGlyZWN0aXZlfSBmcm9tICcuL2NwZi1jbnBqLnZhbGlkYXRvci5kaXJlY3RpdmUnO1xyXG5cclxuQE5nTW9kdWxlKHtcclxuICAgIGRlY2xhcmF0aW9uczogW1xyXG4gICAgICAgIENwZkNucGpWYWxpZGF0b3JEaXJlY3RpdmVcclxuICAgIF0sXHJcbiAgICBpbXBvcnRzOiBbXHJcbiAgICBdLFxyXG4gICAgZXhwb3J0czogW1xyXG4gICAgICAgIENwZkNucGpWYWxpZGF0b3JEaXJlY3RpdmVcclxuICAgIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIENwZkNucGpNb2R1bGUgeyB9XHJcbiIsImltcG9ydCB7QWJzdHJhY3RDb250cm9sLCBOR19WQUxJREFUT1JTLCBWYWxpZGF0b3J9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHtEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIElucHV0fSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgc2VsZWN0b3I6ICdbamhpLWludGVnZXItZmllbGRdW25nTW9kZWxdJyxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogTkdfVkFMSURBVE9SUyxcclxuICAgICAgdXNlRXhpc3Rpbmc6IEludGVnZXJGaWVsZERpcmVjdGl2ZSxcclxuICAgICAgbXVsdGk6IHRydWVcclxuICAgIH1cclxuICBdXHJcbn0pXHJcblxyXG5leHBvcnQgY2xhc3MgSW50ZWdlckZpZWxkRGlyZWN0aXZlIGltcGxlbWVudHMgVmFsaWRhdG9yIHtcclxuICBASW5wdXQoKVxyXG4gIHByaXZhdGUgbWluVmFsdWU6IG51bWJlcjtcclxuXHJcbiAgQElucHV0KClcclxuICBwcml2YXRlIG1heFZhbHVlOiBudW1iZXI7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHJpdmF0ZSBvbmx5UG9zaXRpdmU6IGJvb2xlYW47XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZWxlbWVudDogRWxlbWVudFJlZikge1xyXG4gICAgdGhpcy5vbmx5UG9zaXRpdmUgPSBmYWxzZTtcclxuICAgIHRoaXMubWF4VmFsdWUgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLm1pblZhbHVlID0gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHZhbGlkYXRlKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IHsgW2tleTogc3RyaW5nXTogYW55IH0ge1xyXG4gICAgaWYgKGNvbnRyb2wudmFsdWUgPT09IG51bGwgfHwgY29udHJvbC52YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IGNvbnRyb2wudmFsdWUubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHJldHVybiB7IGVtcHR5OiB0cnVlIH07XHJcbiAgICB9XHJcbiAgICBsZXQgbmV3VmFsdWU6IHN0cmluZyA9IGNvbnRyb2wudmFsdWUudG9TdHJpbmcoKTtcclxuICAgIGxldCBvbmx5TnVtYmVycztcclxuICAgIGlmICh0aGlzLm9ubHlQb3NpdGl2ZSkge1xyXG4gICAgICBvbmx5TnVtYmVycyA9IG5ld1ZhbHVlLnJlcGxhY2UoL1xcRC9nLCAnJyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsZXQgbmVnYXRpdmUgPSAnJztcclxuICAgICAgaWYgKG5ld1ZhbHVlWzBdID09PSAnLScpIHtcclxuICAgICAgICBuZWdhdGl2ZSA9ICctJztcclxuICAgICAgfVxyXG4gICAgICBvbmx5TnVtYmVycyA9IG5lZ2F0aXZlICsgbmV3VmFsdWUucmVwbGFjZSgvXFxEL2csICcnKTtcclxuICAgICAgaWYgKHBhcnNlSW50KG9ubHlOdW1iZXJzLCAxMCkgPT09IDAgJiYgbmVnYXRpdmUgPT09ICctJykge1xyXG4gICAgICAgIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LnZhbHVlID0gJzAnO1xyXG4gICAgICAgIG5ld1ZhbHVlID0gJzAnO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAob25seU51bWJlcnMgIT09IGNvbnRyb2wudmFsdWUudG9TdHJpbmcoKSkge1xyXG4gICAgICB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC52YWx1ZSA9IG9ubHlOdW1iZXJzO1xyXG4gICAgICB0aGlzLmZvcmNlVXBkYXRlKCk7XHJcbiAgICAgIHJldHVybiB7IGludmFsaWREaWdpdDogdHJ1ZSB9O1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLmlzTnVtYmVyKG5ld1ZhbHVlKSkge1xyXG4gICAgICByZXR1cm4geyBub25OdW1iZXI6IHRydWUgfTtcclxuICAgIH1cclxuICAgIGNvbnN0IHZhbHVlID0gcGFyc2VJbnQobmV3VmFsdWUsIDEwKTtcclxuICAgIGlmICh0aGlzLmlzTnVtYmVyKHRoaXMubWluVmFsdWUpKSB7XHJcbiAgICAgIGlmICh2YWx1ZSA8IHRoaXMubWluVmFsdWUpIHtcclxuICAgICAgICByZXR1cm4geyByYW5nZVZhbHVlOiB0cnVlIH07XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh0aGlzLmlzTnVtYmVyKHRoaXMubWF4VmFsdWUpKSB7XHJcbiAgICAgIGlmICh2YWx1ZSA+IHRoaXMubWF4VmFsdWUpIHtcclxuICAgICAgICByZXR1cm4geyByYW5nZVZhbHVlOiB0cnVlIH07XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgaXNOdW1iZXIodmFsdWU6IHN0cmluZyB8IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IG51bGwpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuICFpc05hTihOdW1iZXIodmFsdWUudG9TdHJpbmcoKSkpO1xyXG4gIH1cclxuXHJcbiAgZm9yY2VVcGRhdGUoKSB7XHJcbiAgICBjb25zdCBldmVudCA9IG5ldyBFdmVudCgnaW5wdXQnLCB7XHJcbiAgICAgIGJ1YmJsZXM6IHRydWUsXHJcbiAgICAgIGNhbmNlbGFibGU6IGZhbHNlXHJcbiAgICB9KTtcclxuICAgIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQge05nTW9kdWxlfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQge0ludGVnZXJGaWVsZERpcmVjdGl2ZX0gZnJvbSBcIi4vaW50ZWdlci1maWVsZC5kaXJlY3RpdmVcIjtcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgZGVjbGFyYXRpb25zOiBbXHJcbiAgICBJbnRlZ2VyRmllbGREaXJlY3RpdmVcclxuICBdLFxyXG4gIGltcG9ydHM6IFtcclxuICBdLFxyXG4gIGV4cG9ydHM6IFtcclxuICAgIEludGVnZXJGaWVsZERpcmVjdGl2ZVxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIEludGVnZXJGaWVsZE1vZHVsZSB7IH1cclxuIiwiZXhwb3J0IGNsYXNzIEVuY29kZURlY29kZUJhc2U2NCB7XHJcbiAgICBzdGF0aWMgZW5jb2RlKHN0cjogYW55KSB7XHJcbiAgICAgIGNvbnN0IHJlZ0V4cCA9IC8lKFswLTlBLUZdezJ9KS9nO1xyXG4gICAgICByZXR1cm4gYnRvYShcclxuICAgICAgICAgICAgZW5jb2RlVVJJQ29tcG9uZW50KHN0cikucmVwbGFjZShyZWdFeHAsIChtYXRjaCwgcDEpID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKCgnMHgnICsgcDEpIGFzIGFueSk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZGVjb2RlKHN0cikge1xyXG4gICAgICBjb25zdCBzZXBhcmF0b3IgPSAnJztcclxuICAgICAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChcclxuICAgICAgICAgICAgYXRvYihzdHIpXHJcbiAgICAgICAgICAgICAgICAuc3BsaXQoc2VwYXJhdG9yKVxyXG4gICAgICAgICAgICAgICAgLm1hcChmdW5jdGlvbihjKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICclJyArICgnMDAnICsgYy5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTIpO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIC5qb2luKHNlcGFyYXRvcilcclxuICAgICAgICApO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7IEh0dHBQYXJhbXMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcblxyXG5leHBvcnQgY29uc3QgY3JlYXRlUmVxdWVzdE9wdGlvbiA9IChyZXE/OiBhbnkpOiBIdHRwUGFyYW1zID0+IHtcclxuICAgIGxldCBvcHRpb25zOiBIdHRwUGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcclxuICAgIGlmIChyZXEpIHtcclxuICAgICAgICBPYmplY3Qua2V5cyhyZXEpLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICAgICAgaWYgKGtleSAhPT0gJ3NvcnQnKSB7XHJcbiAgICAgICAgICAgICAgICBvcHRpb25zID0gb3B0aW9ucy5zZXQoa2V5LCByZXFba2V5XSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAocmVxLnNvcnQpIHtcclxuICAgICAgICAgICAgcmVxLnNvcnQuZm9yRWFjaCh2YWwgPT4ge1xyXG4gICAgICAgICAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMuYXBwZW5kKCdzb3J0JywgdmFsKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG9wdGlvbnM7XHJcbn07XHJcbiIsIi8qKlxyXG4gKiBBbmd1bGFyIGJvb3RzdHJhcCBEYXRlIGFkYXB0ZXJcclxuICovXHJcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTmdiRGF0ZUFkYXB0ZXIsIE5nYkRhdGVTdHJ1Y3QsIE5nYkRhdGVQYXJzZXJGb3JtYXR0ZXIgfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcbmltcG9ydCB7IE1vbWVudCB9IGZyb20gJ21vbWVudCc7XHJcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIE5nYkRhdGVNb21lbnRBZGFwdGVyIGV4dGVuZHMgTmdiRGF0ZUFkYXB0ZXI8TW9tZW50PiB7XHJcbiAgZnJvbU1vZGVsKGRhdGU6IE1vbWVudCk6IE5nYkRhdGVTdHJ1Y3Qge1xyXG4gICAgaWYgKGRhdGUgIT0gbnVsbCAmJiBtb21lbnQuaXNNb21lbnQoZGF0ZSkgJiYgZGF0ZS5pc1ZhbGlkKCkpIHtcclxuICAgICAgcmV0dXJuIHsgeWVhcjogZGF0ZS55ZWFyKCksIG1vbnRoOiBkYXRlLm1vbnRoKCkgKyAxLCBkYXk6IGRhdGUuZGF0ZSgpIH07XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGRhdGUgIT09IG51bGwgJiYgZGF0ZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGNvbnN0IGRhdGVOZXcgPSBuZXcgRGF0ZShkYXRlLnRvU3RyaW5nKCkpO1xyXG4gICAgICByZXR1cm4geyB5ZWFyOiBkYXRlTmV3LmdldEZ1bGxZZWFyKCksIG1vbnRoOiBkYXRlTmV3LmdldE1vbnRoKCkgKyAxLCBkYXk6IGRhdGVOZXcuZ2V0VVRDRGF0ZSgpIH07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIHRvTW9kZWwoZGF0ZTogTmdiRGF0ZVN0cnVjdCk6IE1vbWVudCB7XHJcbiAgICByZXR1cm4gZGF0ZSA/IG1vbWVudChkYXRlLnllYXIgKyAnLScgKyBkYXRlLm1vbnRoICsgJy0nICsgZGF0ZS5kYXksICdZWVlZL01NL0REJykgOiBudWxsO1xyXG4gIH1cclxufVxyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgTmdiRGF0ZU1vbWVudERhdGVGb3JtYXR0ZXIgZXh0ZW5kcyBOZ2JEYXRlUGFyc2VyRm9ybWF0dGVyIHtcclxuICByZWFkb25seSBEVF9GT1JNQVQgPSAnREQvTU0vWVlZWSc7XHJcblxyXG4gIHBhcnNlKHZhbHVlOiBzdHJpbmcpOiBOZ2JEYXRlU3RydWN0IHtcclxuICAgIGlmICghdmFsdWUpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBjb25zdCBkYXRlID0gbW9tZW50KHZhbHVlLCB0aGlzLkRUX0ZPUk1BVCk7XHJcbiAgICByZXR1cm4gZGF0ZS5pc1ZhbGlkKCkgPyB7IHllYXI6IGRhdGUueWVhcigpLCBtb250aDogZGF0ZS5tb250aCgpICsgMSwgZGF5OiBkYXRlLmRhdGUoKSB9IDogbnVsbDtcclxuICB9XHJcblxyXG4gIGZvcm1hdChkYXRlOiBOZ2JEYXRlU3RydWN0KTogc3RyaW5nIHtcclxuICAgIGlmICghZGF0ZSkge1xyXG4gICAgICByZXR1cm4gJyc7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBtZHQgPSBtb21lbnQoW2RhdGUueWVhciwgZGF0ZS5tb250aCAtIDEsIGRhdGUuZGF5XSk7XHJcbiAgICAgIGlmICghbWR0LmlzVmFsaWQoKSkge1xyXG4gICAgICAgIHJldHVybiAnJztcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gbWR0LmZvcm1hdCh0aGlzLkRUX0ZPUk1BVCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsImV4cG9ydCBjb25zdCBQUk9CTEVNX0JBU0VfVVJMID0gJ2h0dHBzOi8vd3d3LmpoaXBzdGVyLnRlY2gvcHJvYmxlbSc7XHJcbmV4cG9ydCBjb25zdCBFTUFJTF9BTFJFQURZX1VTRURfVFlQRSA9IFBST0JMRU1fQkFTRV9VUkwgKyAnL2VtYWlsLWFscmVhZHktdXNlZCc7XHJcbmV4cG9ydCBjb25zdCBMT0dJTl9BTFJFQURZX1VTRURfVFlQRSA9IFBST0JMRU1fQkFTRV9VUkwgKyAnL2xvZ2luLWFscmVhZHktdXNlZCc7XHJcbmV4cG9ydCBjb25zdCBFTUFJTF9OT1RfRk9VTkRfVFlQRSA9IFBST0JMRU1fQkFTRV9VUkwgKyAnL2VtYWlsLW5vdC1mb3VuZCc7XHJcbmV4cG9ydCBjb25zdCBJTlZBTElEX1BBU1NXT1JEX1RZUEUgPSBQUk9CTEVNX0JBU0VfVVJMICsgJy9pbnZhbGlkLXBhc3N3b3JkJztcclxuZXhwb3J0IGNvbnN0IEVSUl9VTkFVVEhPUklaRURfRURJVF9ERUxFVElPTiA9IFBST0JMRU1fQkFTRV9VUkwgKyBcIi91bmF1dGhvcml6ZWQtZWRpdC1kZWxldGlvblwiO1xyXG4iLCJleHBvcnQgY29uc3QgSVRFTVNfUEVSX1BBR0UgPSAyMDtcclxuIiwiaW1wb3J0IHtJbmplY3QsIEluamVjdGFibGUsIEluamVjdGlvblRva2VufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmV4cG9ydCBjb25zdCBNT0RVTE9fT1BUSU9OUyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxzdHJpbmc+KCdNT0RVTE9fT1BUSU9OUycpO1xyXG5leHBvcnQgY29uc3QgTUVOVV9NT0RVTE9fT1BUSU9OUyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxzdHJpbmc+KCdNRU5VX01PRFVMT19PUFRJT05TJyk7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBPcHRpb25zUHJvdmlkZXIge1xyXG4gIHByaXZhdGUgX3ZlcnNpb246IHN0cmluZztcclxuICBwcml2YXRlIF90d29GYWN0b3I6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIF9yZXNldEJ5TG9naW5PckVtYWlsID0gZmFsc2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgQEluamVjdChNT0RVTE9fT1BUSU9OUykgcHJpdmF0ZSBfbW9kdWxvOiBzdHJpbmcsXHJcbiAgICBASW5qZWN0KE1FTlVfTU9EVUxPX09QVElPTlMpIHByaXZhdGUgX21lbnVNb2R1bG86IHN0cmluZ1xyXG4gICkge31cclxuXHJcbiAgZ2V0IHZlcnNpb24oKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl92ZXJzaW9uID8gdGhpcy5fdmVyc2lvbiA6ICcnO1xyXG4gIH1cclxuXHJcbiAgc2V0IHZlcnNpb24odmVyc2lvbjogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl92ZXJzaW9uID0gdmVyc2lvbjtcclxuICB9XHJcblxyXG4gIHNldCB0d29GYWN0b3IodHdvTG9naW46IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX3R3b0ZhY3RvciA9IHR3b0xvZ2luO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHR3b0ZhY3RvcigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl90d29GYWN0b3I7XHJcbiAgfVxyXG5cclxuICBzZXQgcmVzZXRCeUxvZ2luT3JFbWFpbChyZXNldEJ5TG9naW5PckVtYWlsOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9yZXNldEJ5TG9naW5PckVtYWlsID0gcmVzZXRCeUxvZ2luT3JFbWFpbDtcclxuICB9XHJcblxyXG4gIGdldCByZXNldEJ5TG9naW5PckVtYWlsKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3Jlc2V0QnlMb2dpbk9yRW1haWw7XHJcbiAgfVxyXG5cclxuICBnZXQgbW9kdWxvKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fbW9kdWxvO1xyXG4gIH1cclxuXHJcbiAgZ2V0IG1lbnVNb2R1bG8oKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9tZW51TW9kdWxvO1xyXG4gIH1cclxufVxyXG4iLCJleHBvcnQgY2xhc3MgVXRpbEFycXVpdm8ge1xyXG4gICAgcHVibGljIHN0YXRpYyBmb3JtYXRhclRhbWFuaG9BcnF1aXZvKGJ5dGVzID0gMCwgcHJlY2lzYW8gPSAyKTogc3RyaW5nIHtcclxuICAgICAgICBjb25zdCB1bmlkYWRlcyA9IFsnYnl0ZXMnLCAnS0InLCAnTUInLCAnR0InLCAnVEInLCAnUEInXTtcclxuXHJcbiAgICAgICAgaWYgKGlzTmFOKHBhcnNlRmxvYXQoU3RyaW5nKGJ5dGVzKSkpIHx8ICFpc0Zpbml0ZShieXRlcykpIHtcclxuICAgICAgICAgICAgcmV0dXJuICc/JztcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IHVuaWRhZGUgPSAwO1xyXG4gICAgICAgIHdoaWxlIChieXRlcyA+PSAxMDI0KSB7XHJcbiAgICAgICAgICAgIGJ5dGVzIC89IDEwMjQ7XHJcbiAgICAgICAgICAgIHVuaWRhZGUrKztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGJ5dGVzLnRvRml4ZWQoK3ByZWNpc2FvKSArICcgJyArIHVuaWRhZGVzW3VuaWRhZGVdO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7U2Vzc2lvblN0b3JhZ2VTZXJ2aWNlfSBmcm9tIFwibmd4LXdlYnN0b3JhZ2VcIjtcclxuaW1wb3J0IHtVdGlsRnVuY3Rpb25zfSBmcm9tICcuJztcclxuXHJcbmV4cG9ydCBjbGFzcyBMb2NrUGFnZSB7XHJcbiAgcHJpdmF0ZSBzdGF0aWMgc3RvcmFnZUxhYmVsID0gJ2xvY2tQYWdlTmF2aWdhdGlvbic7XHJcbiAgcHVibGljIG1vZHVsZTogc3RyaW5nO1xyXG4gIHB1YmxpYyBwYXRoOiBzdHJpbmc7XHJcbiAgXHJcbiAgY29uc3RydWN0b3IobW9kdWxlOiBzdHJpbmcsIHBhdGg6IHN0cmluZykge1xyXG4gICAgdGhpcy5tb2R1bGUgPSBtb2R1bGU7XHJcbiAgICB0aGlzLnBhdGggPSBwYXRoO1xyXG4gIH1cclxuICBcclxuICBnZXRSZWRpcmVjdFBhZ2UobG9jYXRpb246IExvY2F0aW9uLCBzZW5kZXI6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBpZiAoc2VuZGVyID09PSB0aGlzLm1vZHVsZSkge1xyXG4gICAgICBpZiAobG9jYXRpb24ucGF0aG5hbWUuaW5kZXhPZih0aGlzLm1vZHVsZSkgPCAwKSB7XHJcbiAgICAgICAgcmV0dXJuIGxvY2F0aW9uLm9yaWdpbi5jb25jYXQoJy8jLycsIHRoaXMucGF0aCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBsb2NhdGlvbi5vcmlnaW4uY29uY2F0KCcvJywgdGhpcy5tb2R1bGUsICcvIy8nLCB0aGlzLnBhdGgpO1xyXG4gIH1cclxuXHJcbiAgaXNMb2NrZWRQYWdlKGxvY2F0aW9uOiBMb2NhdGlvbiwgc2VuZGVyOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICBcclxuICAgIGlmIChsb2NhdGlvbi5ocmVmLmluZGV4T2YodGhpcy5nZXRSZWRpcmVjdFBhZ2UobG9jYXRpb24sIHNlbmRlcikpID4gMCkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgcmV0cmlldmVGcm9tU3RvcmFnZShzZXNzaW9uU3RvcmFnZTogU2Vzc2lvblN0b3JhZ2VTZXJ2aWNlKTogTG9ja1BhZ2Uge1xyXG4gICAgY29uc3Qgc3RvcmVkT2JqZWN0OiBMb2NrUGFnZSA9IHNlc3Npb25TdG9yYWdlLnJldHJpZXZlKExvY2tQYWdlLnN0b3JhZ2VMYWJlbCk7XHJcbiAgICBpZiAoIVV0aWxGdW5jdGlvbnMuaXNWYWxpZE9iamVjdChzdG9yZWRPYmplY3QpKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgY29uc3QgbmV3T2JqZWN0OiBMb2NrUGFnZSA9IG5ldyBMb2NrUGFnZShzdG9yZWRPYmplY3QubW9kdWxlLCBzdG9yZWRPYmplY3QucGF0aCk7XHJcbiAgICByZXR1cm4gbmV3T2JqZWN0O1xyXG4gIH1cclxuICBcclxuICBwdWJsaWMgc3RhdGljIHNhdmVUb1N0b3JhZ2Uoc2Vzc2lvblN0b3JhZ2U6IFNlc3Npb25TdG9yYWdlU2VydmljZSwgc3RvcmVPYmplY3Q6IExvY2tQYWdlKSB7XHJcbiAgICBzZXNzaW9uU3RvcmFnZS5zdG9yZShMb2NrUGFnZS5zdG9yYWdlTGFiZWwsIHN0b3JlT2JqZWN0KTtcclxuICB9XHJcbiAgXHJcbiAgcHVibGljIHN0YXRpYyByZW1vdmVGcm9tU3RvcmFnZShzZXNzaW9uU3RvcmFnZTogU2Vzc2lvblN0b3JhZ2VTZXJ2aWNlKSB7XHJcbiAgICBzZXNzaW9uU3RvcmFnZS5jbGVhcihMb2NrUGFnZS5zdG9yYWdlTGFiZWwpO1xyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQge0FmdGVyVmlld0luaXQsIENvbXBvbmVudCwgVmlld0NoaWxkfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtOZ2JBY3RpdmVNb2RhbH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQge1V0aWxGdW5jdGlvbnN9IGZyb20gXCIuLi8uLi91dGlsXCI7XHJcbmltcG9ydCB7UGRmSnNWaWV3ZXJDb21wb25lbnR9IGZyb20gXCJuZzItcGRmanMtdmlld2VyXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2poaS1wZGYtdmlld2VyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcGRmLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsncGRmLXZpZXdlci5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFBkZkNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xyXG4gIEBWaWV3Q2hpbGQoJ3BkZlZpZXdlcicpIHBkZlZpZXdlcjogUGRmSnNWaWV3ZXJDb21wb25lbnQ7XHJcblxyXG4gIHB1YmxpYyB0aXR1bG86IHN0cmluZztcclxuICBwdWJsaWMgbm9tZUFycXVpdm86IHN0cmluZztcclxuICBwdWJsaWMgcGRmOiBzdHJpbmc7XHJcbiAgcHVibGljIGlzTG9hZGVkOiBib29sZWFuO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGFjdGl2ZU1vZGFsOiBOZ2JBY3RpdmVNb2RhbCkge1xyXG4gICAgdGhpcy5pc0xvYWRlZCA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0b3AoKSB7XHJcbiAgICB0aGlzLmFjdGl2ZU1vZGFsLmRpc21pc3MoJ2Nsb3NlJyk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgLy8gVXNhZG8gcGFyYSBjb250b3JuYXIgbyBwcm9ibGVtYSBkZSBjaGFuZ2UgZG8gc2VsZWN0IGRlIHpvb21cclxuICAgICAgaWYgKCFVdGlsRnVuY3Rpb25zLmlzVmFsaWRPYmplY3QoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NlbGVjdEhpZGRlblBkZicpKSkge1xyXG4gICAgICAgIHZhciBzZWxlY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzZWxlY3QnKTtcclxuICAgICAgICBzZWxlY3QuaGlkZGVuID0gdHJ1ZTtcclxuICAgICAgICBzZWxlY3QuaWQgPSAnc2VsZWN0SGlkZGVuUGRmJztcclxuICAgICAgICBkb2N1bWVudC5ib2R5Lmluc2VydEFkamFjZW50RWxlbWVudChcImFmdGVyYmVnaW5cIiwgc2VsZWN0KTtcclxuICAgICAgICBjb25zb2xlLmxvZygnaW5zZXJ0IHNlbGVjdCBoaWRkZW4nKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnBkZlZpZXdlci5kb3dubG9hZEZpbGVOYW1lID0gdGhpcy5ub21lQXJxdWl2bztcclxuICAgICAgY29uc3QgYmxvYiA9IFV0aWxGdW5jdGlvbnMuY29udmVydEJhc2U2NFRvQmxvYkRhdGEodGhpcy5wZGYsICdhcHBsaWNhdGlvbi9wZGYnKTtcclxuICAgICAgY29uc3QgdXJsID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XHJcbiAgICAgIHRoaXMucGRmVmlld2VyLnBkZlNyYyA9IHVybDtcclxuICAgICAgdGhpcy5wZGZWaWV3ZXIuem9vbSA9ICdwYWdlLWZpdCc7XHJcbiAgICAgIHRoaXMucGRmVmlld2VyLnJlZnJlc2goKTtcclxuICAgIH0sIDEwMCk7XHJcblxyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge05nYk1vZGFsfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcbmltcG9ydCB7UGRmQ29tcG9uZW50fSBmcm9tICcuL3BkZi5jb21wb25lbnQnO1xyXG5cclxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcclxuZXhwb3J0IGNsYXNzIFBkZlNlcnZpY2Uge1xyXG4gICAgcHJpdmF0ZSBwZGZWaWV3ZXJDb21wb25lbnQ6IFBkZkNvbXBvbmVudDtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIG1vZGFsU2VydmljZTogTmdiTW9kYWwpIHt9XHJcblxyXG4gICAgcHVibGljIHN0b3AoKSB7XHJcbiAgICAgICAgdGhpcy5wZGZWaWV3ZXJDb21wb25lbnQuc3RvcCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdGFydCh0aXR1bG86IHN0cmluZywgbm9tZUFycXVpdm86IHN0cmluZywgcGRmOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLnBkZlZpZXdlckNvbXBvbmVudCA9IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oUGRmQ29tcG9uZW50LCB7XHJcbiAgICAgICAgICAgIHNpemU6ICdsZycsXHJcbiAgICAgICAgICAgIGJhY2tkcm9wOiAnc3RhdGljJyxcclxuICAgICAgICAgICAgd2luZG93Q2xhc3M6ICdtb2RhbC14bCBwZGYtdmlld2VyJ1xyXG4gICAgICAgIH0pLmNvbXBvbmVudEluc3RhbmNlO1xyXG4gICAgICAgIHRoaXMucGRmVmlld2VyQ29tcG9uZW50Lm5vbWVBcnF1aXZvID0gbm9tZUFycXVpdm87XHJcbiAgICAgICAgdGhpcy5wZGZWaWV3ZXJDb21wb25lbnQudGl0dWxvID0gdGl0dWxvO1xyXG4gICAgICAgIHRoaXMucGRmVmlld2VyQ29tcG9uZW50LnBkZiA9IHBkZjtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge0NVU1RPTV9FTEVNRU5UU19TQ0hFTUEsIE5nTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtQZGZDb21wb25lbnR9IGZyb20gJy4vcGRmLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7UGRmSnNWaWV3ZXJNb2R1bGV9IGZyb20gJ25nMi1wZGZqcy12aWV3ZXInO1xyXG5pbXBvcnQge05nYk1vZHVsZX0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQge1BkZlNlcnZpY2V9IGZyb20gJy4vcGRmLnNlcnZpY2UnO1xyXG5pbXBvcnQge0ZvbnRBd2Vzb21lTW9kdWxlfSBmcm9tICdAZm9ydGF3ZXNvbWUvYW5ndWxhci1mb250YXdlc29tZSc7XHJcbmltcG9ydCB7bGlicmFyeX0gZnJvbSAnQGZvcnRhd2Vzb21lL2ZvbnRhd2Vzb21lLXN2Zy1jb3JlJztcclxuaW1wb3J0IHtmYXN9IGZyb20gJ0Bmb3J0YXdlc29tZS9mcmVlLXNvbGlkLXN2Zy1pY29ucyc7XHJcblxyXG5saWJyYXJ5LmFkZChmYXMpO1xyXG5cclxuQE5nTW9kdWxlKHtcclxuICBkZWNsYXJhdGlvbnM6IFtcclxuICAgIFBkZkNvbXBvbmVudFxyXG4gIF0sXHJcbiAgaW1wb3J0czogW1xyXG4gICAgUGRmSnNWaWV3ZXJNb2R1bGUsXHJcbiAgICBOZ2JNb2R1bGUuZm9yUm9vdCgpLFxyXG4gICAgRm9udEF3ZXNvbWVNb2R1bGVcclxuICBdLFxyXG4gIGVudHJ5Q29tcG9uZW50czogW1xyXG4gICAgUGRmQ29tcG9uZW50XHJcbiAgXSxcclxuICBleHBvcnRzOiBbXHJcbiAgICBQZGZDb21wb25lbnRcclxuICBdLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAgUGRmU2VydmljZVxyXG4gIF0sXHJcbiAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQZGZNb2R1bGUge31cclxuIiwiZXhwb3J0IGVudW0gRGlhbG9nVHlwZSB7XHJcbiAgICBJTkZPLFxyXG4gICAgUVVFU1RJT04sXHJcbiAgICBRVUVTVElPTl9ZRVNfTk8sXHJcbiAgICBXQUlUXHJcbn1cclxuXHJcbmV4cG9ydCBlbnVtIERpYWxvZ1Jlc3VsdCB7XHJcbiAgICBPSyxcclxuICAgIFlFUyxcclxuICAgIE5PLFxyXG4gICAgQ0FOQ0VMXHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRGlhbG9nTGlzdGVuZXIge1xyXG4gICAgZGlhbG9nUmV0dXJuZWQocmVzdWx0OiBEaWFsb2dSZXN1bHQsIHBhcmFtOiBhbnkpO1xyXG59XHJcbiIsImltcG9ydCB7IEFmdGVyQ29udGVudEluaXQsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE5nYkFjdGl2ZU1vZGFsIH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQgeyBEaWFsb2dMaXN0ZW5lciwgRGlhbG9nUmVzdWx0LCBEaWFsb2dUeXBlIH0gZnJvbSAnLi9tb2RhbC1kaWFsb2cubW9kZWwnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2poaS1tb2RhbC1kaWFsb2cnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL21vZGFsLWRpYWxvZy5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9tb2RhbC1kaWFsb2cuc3R5bGUuY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIE1vZGFsRGlhbG9nQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCB7XHJcbiAgICBAVmlld0NoaWxkKCdsb2FkZXInKVxyXG4gICAgbG9hZGVyOiBFbGVtZW50UmVmO1xyXG4gICAgZGlhbG9nUmVzdWx0ID0gRGlhbG9nUmVzdWx0O1xyXG4gICAgZGlhbG9nVHlwZSA9IERpYWxvZ1R5cGU7XHJcbiAgICBsaXN0ZW5lcjogRGlhbG9nTGlzdGVuZXI7XHJcbiAgICB0aXRsZTogc3RyaW5nO1xyXG4gICAgbWVzc2FnZTogc3RyaW5nO1xyXG4gICAgY3NzQ2xhc3M6IHN0cmluZztcclxuICAgIHR5cGU6IERpYWxvZ1R5cGU7XHJcbiAgICBwYXJhbTogYW55O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgYWN0aXZlTW9kYWw6IE5nYkFjdGl2ZU1vZGFsKSB7XHJcbiAgICAgICAgdGhpcy5saXN0ZW5lciA9IHVuZGVmaW5lZDtcclxuICAgICAgICB0aGlzLnR5cGUgPSBEaWFsb2dUeXBlLklORk87XHJcbiAgICAgICAgdGhpcy5jc3NDbGFzcyA9ICcnO1xyXG4gICAgICAgIHRoaXMubWVzc2FnZSA9ICcnO1xyXG4gICAgICAgIHRoaXMudGl0bGUgPSAnJztcclxuICAgIH1cclxuXHJcbiAgICBzZXRSZXN1bHQocmVzdWx0OiBEaWFsb2dSZXN1bHQpIHtcclxuICAgICAgICBpZiAodGhpcy5saXN0ZW5lciAhPT0gdW5kZWZpbmVkICYmIHRoaXMubGlzdGVuZXIgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy5saXN0ZW5lci5kaWFsb2dSZXR1cm5lZChyZXN1bHQsIHRoaXMucGFyYW0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5hY3RpdmVNb2RhbC5kaXNtaXNzKCdyZXN1bHQnKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0TGlzdGVuZXIocGFyZW50OiBEaWFsb2dMaXN0ZW5lcikge1xyXG4gICAgICAgIHRoaXMubGlzdGVuZXIgPSBwYXJlbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGluaXQocGFyYW06IGFueSwgdGl0bGU6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nLCBjc3NDbGFzczogc3RyaW5nLCB0eXBlOiBEaWFsb2dUeXBlKSB7XG4gICAgICAgIHRoaXMudGl0bGUgPSB0aXRsZTtcbiAgICAgICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcbiAgICAgICAgdGhpcy5jc3NDbGFzcyA9IGNzc0NsYXNzO1xyXG4gICAgICAgIHRoaXMudHlwZSA9IHR5cGU7XHJcbiAgICAgICAgdGhpcy5wYXJhbSA9IHBhcmFtO1xuICAgIH1cblxuICAgIGdldEhlYWRlckljb24oKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHlwZSA9PT0gRGlhbG9nVHlwZS5JTkZPID8gJ2JlbGwnIDogJ3RpbWVzJztcbiAgICB9XG5cclxuICAgIHB1YmxpYyBzdG9wKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmxpc3RlbmVyICE9PSB1bmRlZmluZWQgJiYgdGhpcy5saXN0ZW5lciAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLmxpc3RlbmVyLmRpYWxvZ1JldHVybmVkKERpYWxvZ1Jlc3VsdC5DQU5DRUwsIHRoaXMucGFyYW0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmFjdGl2ZU1vZGFsLmRpc21pc3MoJ2Nsb3NlJyk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xyXG4gICAgICAgIGNvbnN0IG1vZGFsQ29udGVudCA9IHRoaXMubG9hZGVyLm5hdGl2ZUVsZW1lbnQucGFyZW50Tm9kZS5wYXJlbnROb2RlO1xyXG4gICAgICAgIGlmICh0aGlzLnR5cGUgPT09IERpYWxvZ1R5cGUuV0FJVCkge1xyXG4gICAgICAgICAgICBtb2RhbENvbnRlbnQuY2xhc3NOYW1lID0gJyc7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7IFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbkBQaXBlKHsgbmFtZTogJ2ZpbmRMYW5ndWFnZUZyb21LZXknIH0pXHJcbmV4cG9ydCBjbGFzcyBGaW5kTGFuZ3VhZ2VGcm9tS2V5UGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xyXG4gICAgcHJpdmF0ZSBsYW5ndWFnZXM6IGFueSA9IHtcclxuICAgICAgICAncHQtYnInOiB7IG5hbWU6ICdQb3J0dWd1w4PCqnMgKEJyYXNpbCknIH1cclxuICAgIH07XHJcbiAgICB0cmFuc2Zvcm0obGFuZzogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5sYW5ndWFnZXNbbGFuZ10ubmFtZTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge0NVU1RPTV9FTEVNRU5UU19TQ0hFTUEsIE5nTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtGaW5kTGFuZ3VhZ2VGcm9tS2V5UGlwZX0gZnJvbSAnLi9maW5kLWxhbmd1YWdlLWZyb20ta2V5LnBpcGUnXHJcblxyXG5ATmdNb2R1bGUoe1xyXG4gIGRlY2xhcmF0aW9uczogW1xyXG4gICAgRmluZExhbmd1YWdlRnJvbUtleVBpcGVcclxuICBdLFxyXG4gIGV4cG9ydHM6IFtcclxuICAgIEZpbmRMYW5ndWFnZUZyb21LZXlQaXBlXHJcbiAgXSxcclxuICBzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV1cclxufSlcclxuZXhwb3J0IGNsYXNzIEZpbmRMYW5ndWFnZU1vZHVsbyB7fVxyXG4iLCJpbXBvcnQge0NVU1RPTV9FTEVNRU5UU19TQ0hFTUEsIE5nTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtOZ2JNb2R1bGV9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHtNb2RhbERpYWxvZ0NvbXBvbmVudH0gZnJvbSAnLi9tb2RhbC1kaWFsb2cuY29tcG9uZW50JztcclxuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7Rm9udEF3ZXNvbWVNb2R1bGV9IGZyb20gJ0Bmb3J0YXdlc29tZS9hbmd1bGFyLWZvbnRhd2Vzb21lJztcbmltcG9ydCB7bGlicmFyeX0gZnJvbSAnQGZvcnRhd2Vzb21lL2ZvbnRhd2Vzb21lLXN2Zy1jb3JlJztcbmltcG9ydCB7ZmFUaW1lc30gZnJvbSAnQGZvcnRhd2Vzb21lL2ZyZWUtc29saWQtc3ZnLWljb25zL2ZhVGltZXMnO1xuaW1wb3J0IHtmYUJhbn0gZnJvbSAnQGZvcnRhd2Vzb21lL2ZyZWUtc29saWQtc3ZnLWljb25zL2ZhQmFuJztcbmltcG9ydCB7ZmFCZWxsfSBmcm9tICdAZm9ydGF3ZXNvbWUvZnJlZS1zb2xpZC1zdmctaWNvbnMvZmFCZWxsJztcbmltcG9ydCB7RmluZExhbmd1YWdlTW9kdWxvfSBmcm9tICcuLi8uLi9sYW5ndWFnZS9maW5kLWxhbmd1YWdlLm1vZHVsbyc7XG5pbXBvcnQge05nSmhpcHN0ZXJNb2R1bGV9IGZyb20gJ25nLWpoaXBzdGVyJztcblxubGlicmFyeS5hZGQoZmFUaW1lcyk7XG5saWJyYXJ5LmFkZChmYUJhbik7XG5saWJyYXJ5LmFkZChmYUJlbGwpO1xuXHJcbkBOZ01vZHVsZSh7XHJcbiAgICBpbXBvcnRzOiBbXHJcbiAgICAgIENvbW1vbk1vZHVsZSxcclxuICAgICAgRm9udEF3ZXNvbWVNb2R1bGUsXHJcbiAgICAgIEZpbmRMYW5ndWFnZU1vZHVsbyxcclxuICAgICAgTmdKaGlwc3Rlck1vZHVsZSxcclxuICAgICAgTmdiTW9kdWxlLmZvclJvb3QoKSxcclxuICAgIF0sXHJcbiAgICBkZWNsYXJhdGlvbnM6IFtcclxuICAgICAgTW9kYWxEaWFsb2dDb21wb25lbnRcclxuICAgIF0sXHJcbiAgICBlbnRyeUNvbXBvbmVudHM6IFtcclxuICAgICAgTW9kYWxEaWFsb2dDb21wb25lbnRcclxuICAgIF0sXHJcbiAgICBleHBvcnRzOiBbXHJcbiAgICAgIE1vZGFsRGlhbG9nQ29tcG9uZW50XHJcbiAgICBdLFxyXG4gICAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNb2RhbERpYWxvZ01vZHVsZSB7fVxyXG4iLCJleHBvcnQgY2xhc3MgUGFyYW1ldHJvIHtcclxuICAgIHB1YmxpYyBpZDogbnVtYmVyO1xyXG4gICAgcHVibGljIHRpcG86IG51bWJlcjtcclxuICAgIHB1YmxpYyBub21lOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgZGVzY3JpY2FvOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgdmFsb3I6IGFueTtcclxuICAgIHB1YmxpYyB0ZWxhOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgbG9jYWw6IGJvb2xlYW47XHJcbiAgICBwdWJsaWMgbW9kdWxvOiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBlbnVtIFBhcmFtZXRyb1RpcG8ge1xyXG4gICAgQ09NQk8gPSAxLFxyXG4gICAgU1RSSU5HID0gMixcclxuICAgIEJPT0xFQU4gPSAzXHJcbn1cclxuIiwiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtIdHRwQ2xpZW50fSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7UGFyYW1ldHJvLCBQYXJhbWV0cm9UaXBvfSBmcm9tICcuLi8uLi9tb2RlbC9wYXJhbWV0cm8ubW9kZWwnO1xyXG5pbXBvcnQge09wdGlvbnNQcm92aWRlcn0gZnJvbSAnLi4vLi4vdXRpbC9vcHRpb25zLXByb3ZpZGVyJztcclxuXHJcbmNvbnN0IFNFUlZFUl9BUElfVVJMID0gJy4vJztcclxuXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXHJcbmV4cG9ydCBjbGFzcyBQYXJhbWV0cm9zU2VydmljZSB7XHJcbiAgICBwdWJsaWMgcmVzb3VyY2VVcmwgPSBTRVJWRVJfQVBJX1VSTCArICdhcGkvcGFyYW1ldHJvcyc7XHJcbiAgICBwdWJsaWMgcmVzb3VyY2VVcmxUcmlidXRvcyA9IFNFUlZFUl9BUElfVVJMICsgJ2FwaS9wYXJhbWV0cm9zLXRyaWJ1dG9zJztcclxuICAgIHB1YmxpYyByZXNvdXJjZVVybFBhcmFtZXRyb3NDaGF2ZVZhbG9yID0gU0VSVkVSX0FQSV9VUkwgKyAnYXBpL3B1YmxpYy9wYXJhbWV0cm9zLWNoYXZlLXZhbG9yJztcclxuICAgIHByaXZhdGUgbW9kdWxvOiBzdHJpbmc7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCwgb3B0aW9uc1Byb3ZpZGVyOiBPcHRpb25zUHJvdmlkZXJcclxuICAgICkge1xyXG4gICAgICB0aGlzLm1vZHVsbyA9IG9wdGlvbnNQcm92aWRlci5tb2R1bG87XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0UGFyYW1ldHJvcyhwYWdpbmE6IHN0cmluZyk6IFByb21pc2U8YW55PiB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gdGhpcy5yZXNvdXJjZVVybCArICcvJyArIHBhZ2luYSArICcvJyArIHRoaXMubW9kdWxvO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBcclxuICAgICAgICAgICAgLmdldCh1cmwsIHsgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyB9KVxyXG4gICAgICAgICAgICAudG9Qcm9taXNlKClcclxuICAgICAgICAgICAgLnRoZW4odmFsdWUgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYm9keSA9IHZhbHVlLmJvZHk7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBib2R5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGJvZHlba2V5XS50aXBvID09PSBQYXJhbWV0cm9UaXBvLkNPTUJPKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvZHlba2V5XS52YWxvciA9IEpTT04ucGFyc2UoYm9keVtrZXldLnZhbG9yKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGJvZHlba2V5XS50aXBvID09PSBQYXJhbWV0cm9UaXBvLkJPT0xFQU4pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYm9keVtrZXldLnZhbG9yID0gYm9keVtrZXldLnZhbG9yID09PSAndHJ1ZSc7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGJvZHk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFBhcmFtZXRyb3NUb0VkaXQocGFnaW5hOiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICBjb25zdCB1cmwgPSB0aGlzLnJlc291cmNlVXJsICsgJy8nICsgcGFnaW5hICsgJy8nICsgdGhpcy5tb2R1bG8gKyBcIj9lZGl0PXRydWVcIjtcclxuICAgICAgcmV0dXJuIHRoaXMuaHR0cFxyXG4gICAgICAgIC5nZXQodXJsLCB7IG9ic2VydmU6ICdyZXNwb25zZScgfSlcclxuICAgICAgICAudG9Qcm9taXNlKClcclxuICAgICAgICAudGhlbih2YWx1ZSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBib2R5ID0gdmFsdWUuYm9keTtcclxuICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIGJvZHkpIHtcclxuICAgICAgICAgICAgaWYgKGJvZHlba2V5XS50aXBvID09PSBQYXJhbWV0cm9UaXBvLkNPTUJPKSB7XHJcbiAgICAgICAgICAgICAgYm9keVtrZXldLnZhbG9yID0gSlNPTi5wYXJzZShib2R5W2tleV0udmFsb3IpO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGJvZHlba2V5XS50aXBvID09PSBQYXJhbWV0cm9UaXBvLkJPT0xFQU4pIHtcclxuICAgICAgICAgICAgICBib2R5W2tleV0udmFsb3IgPSBib2R5W2tleV0udmFsb3IgPT09ICd0cnVlJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIGJvZHk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0UGFyYW1ldHJvc0J5TmFtZShuYW1lOiBzdHJpbmcpOiBQcm9taXNlPFBhcmFtZXRybz4ge1xyXG4gICAgICAgIGNvbnN0IHVybCA9IFNFUlZFUl9BUElfVVJMICsgJ2FwaS9wdWJsaWMvcGFyYW1ldHJvcycgKyAnLycgKyBuYW1lICsgJy8nICsgdGhpcy5tb2R1bG87XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQodXJsLCB7IG9ic2VydmU6ICdyZXNwb25zZScgfSkudG9Qcm9taXNlKClcclxuICAgICAgICAgICAgLnRoZW4odmFsdWUgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcGFyYW1ldHJvOiBQYXJhbWV0cm8gPSB2YWx1ZS5ib2R5IGFzIFBhcmFtZXRybztcclxuICAgICAgICAgICAgICAgIGlmIChwYXJhbWV0cm8udGlwbyA9PT0gUGFyYW1ldHJvVGlwby5DT01CTykge1xyXG4gICAgICAgICAgICAgICAgICBwYXJhbWV0cm8udmFsb3IgPSBKU09OLnBhcnNlKHBhcmFtZXRyby52YWxvcik7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBhcmFtZXRyby50aXBvID09PSBQYXJhbWV0cm9UaXBvLkJPT0xFQU4pIHtcclxuICAgICAgICAgICAgICAgICAgcGFyYW1ldHJvLnZhbG9yID0gcGFyYW1ldHJvLnZhbG9yID09PSAndHJ1ZSc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyYW1ldHJvO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRQYXJhbWV0cm9zQ2hhdmVWYWxvcihwYWdpbmE6IHN0cmluZyk6IFByb21pc2U8YW55PiB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gdGhpcy5yZXNvdXJjZVVybFBhcmFtZXRyb3NDaGF2ZVZhbG9yICsgJy8nICsgcGFnaW5hICsgJy8nICsgdGhpcy5tb2R1bG87XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cFxyXG4gICAgICAgICAgICAuZ2V0KHVybCwgeyBvYnNlcnZlOiAncmVzcG9uc2UnIH0pXHJcbiAgICAgICAgICAgIC50b1Byb21pc2UoKVxyXG4gICAgICAgICAgICAudGhlbih2YWx1ZSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBib2R5ID0gdmFsdWUuYm9keTtcclxuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIGJvZHkpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYm9keVtrZXldLnRpcG8gPT09IFBhcmFtZXRyb1RpcG8uQ09NQk8pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYm9keVtrZXldLnZhbG9yID0gSlNPTi5wYXJzZShib2R5W2tleV0udmFsb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYm9keVtrZXldLnRpcG8gPT09IFBhcmFtZXRyb1RpcG8uQk9PTEVBTikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBib2R5W2tleV0udmFsb3IgPSBib2R5W2tleV0udmFsb3IgPT09ICd0cnVlJztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYm9keTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2F2ZVBhcmFtZXRybyhwYXJhbWV0cm86IFBhcmFtZXRybyk6IFByb21pc2U8YW55PiB7XHJcbiAgICAgICAgY29uc3QgcGFyYW1ldHJvQ29weTogUGFyYW1ldHJvID0geyAuLi5wYXJhbWV0cm8gfTtcclxuICAgICAgICBwYXJhbWV0cm9Db3B5Lm1vZHVsbyA9IHRoaXMubW9kdWxvO1xyXG4gICAgICAgIGlmIChwYXJhbWV0cm9Db3B5LnRpcG8gPT09IFBhcmFtZXRyb1RpcG8uQ09NQk8pIHtcclxuICAgICAgICAgICAgcGFyYW1ldHJvQ29weS52YWxvciA9IEpTT04uc3RyaW5naWZ5KHBhcmFtZXRyb0NvcHkudmFsb3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QodGhpcy5yZXNvdXJjZVVybCwgcGFyYW1ldHJvQ29weSwgeyBvYnNlcnZlOiAncmVzcG9uc2UnIH0pLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVBhcmFtZXRybyhwYXJhbWV0cm86IFBhcmFtZXRybyk6IFByb21pc2U8YW55PiB7XHJcbiAgICAgICAgY29uc3QgcGFyYW1ldHJvQ29weTogUGFyYW1ldHJvID0geyAuLi5wYXJhbWV0cm8gfTtcclxuICAgICAgICBwYXJhbWV0cm9Db3B5Lm1vZHVsbyA9IHRoaXMubW9kdWxvO1xyXG4gICAgICAgIGlmIChwYXJhbWV0cm9Db3B5LnRpcG8gPT09IFBhcmFtZXRyb1RpcG8uQ09NQk8pIHtcclxuICAgICAgICAgICAgcGFyYW1ldHJvQ29weS52YWxvciA9IEpTT04uc3RyaW5naWZ5KHBhcmFtZXRyb0NvcHkudmFsb3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnB1dCh0aGlzLnJlc291cmNlVXJsLCBwYXJhbWV0cm9Db3B5LCB7IG9ic2VydmU6ICdyZXNwb25zZScgfSkudG9Qcm9taXNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZGVsZXRlUGFyYW1ldHJvKGlkOiBudW1iZXIpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlKHRoaXMucmVzb3VyY2VVcmwgKyAnLycgKyBpZCwgeyBvYnNlcnZlOiAncmVzcG9uc2UnIH0pLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFBhcmFtZXRyb1RyaWJ1dG9zKG5vbWU6IHN0cmluZyk6IFByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQodGhpcy5yZXNvdXJjZVVybFRyaWJ1dG9zICsgJy8nICsgbm9tZSwgeyBvYnNlcnZlOiAncmVzcG9uc2UnIH0pLnRvUHJvbWlzZSgpO1xyXG4gICAgfVxyXG59XHJcbiIsImV4cG9ydCBjbGFzcyBQYXJhbWV0cm9SZXN1bHQge1xyXG4gICAgcHVibGljIHN1Y2Vzc286IGJvb2xlYW47XHJcbiAgICBwdWJsaWMgcmV0b3JubzogYW55O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFBhcmFtZXRyb1Jlc3VsdExpc3RlbmVyIHtcclxuICAgIHJldG9ybm8ocmVzdWx0OiBQYXJhbWV0cm9SZXN1bHQpO1xyXG59XHJcbiIsImltcG9ydCB7IEluamVjdGFibGUsIFNhbml0aXplciwgU2VjdXJpdHlDb250ZXh0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuaW1wb3J0IHsgSmhpQ29uZmlnU2VydmljZSB9IGZyb20gJ25nLWpoaXBzdGVyJztcclxuXHJcbmV4cG9ydCB0eXBlIEpoaUFsZXJ0VHlwZSA9ICdzdWNjZXNzJyB8ICdkYW5nZXInIHwgJ3dhcm5pbmcnIHwgJ2luZm8nO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBQb3JhbEFsZXJ0IHtcclxuICAgIGlkPzogbnVtYmVyO1xyXG4gICAgdHlwZTogSmhpQWxlcnRUeXBlO1xyXG4gICAgbXNnOiBzdHJpbmc7XHJcbiAgICBwYXJhbXM/OiBhbnk7XHJcbiAgICB0aW1lb3V0PzogbnVtYmVyO1xyXG4gICAgdG9hc3Q/OiBib29sZWFuO1xyXG4gICAgcG9zaXRpb24/OiBzdHJpbmc7XHJcbiAgICBzY29wZWQ/OiBib29sZWFuO1xyXG4gICAgZGlzYWJsZVRyYW5zbGF0ZT86IGJvb2xlYW47XHJcbiAgICBjbG9zZT86IChhbGVydHM6IFBvcmFsQWxlcnRbXSkgPT4gdm9pZDtcclxufVxyXG5cclxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcclxuZXhwb3J0IGNsYXNzIFBvcnRhbEFsZXJ0U2VydmljZSB7XHJcbiAgICBwcml2YXRlIGFsZXJ0SWQ6IG51bWJlcjtcclxuICAgIHByaXZhdGUgYWxlcnRzOiBQb3JhbEFsZXJ0W107XHJcbiAgICBwcml2YXRlIHRpbWVvdXQ6IG51bWJlcjtcclxuICAgIHByaXZhdGUgdG9hc3Q6IGJvb2xlYW47XHJcbiAgICBwcml2YXRlIGkxOG5FbmFibGVkOiBib29sZWFuO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgc2FuaXRpemVyOiBTYW5pdGl6ZXIsIHByaXZhdGUgY29uZmlnU2VydmljZTogSmhpQ29uZmlnU2VydmljZSwgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlKSB7XHJcbiAgICAgICAgY29uc3QgY29uZmlnID0gdGhpcy5jb25maWdTZXJ2aWNlLmdldENvbmZpZygpO1xyXG4gICAgICAgIHRoaXMudG9hc3QgPSBjb25maWcuYWxlcnRBc1RvYXN0O1xyXG4gICAgICAgIHRoaXMuaTE4bkVuYWJsZWQgPSBjb25maWcuaTE4bkVuYWJsZWQ7XHJcbiAgICAgICAgdGhpcy5hbGVydElkID0gMDtcclxuICAgICAgICB0aGlzLmFsZXJ0cyA9IFtdO1xyXG4gICAgICAgIHRoaXMudGltZW91dCA9IGNvbmZpZy5hbGVydFRpbWVvdXQ7XHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXIoKSB7XHJcbiAgICAgICAgdGhpcy5hbGVydHMuc3BsaWNlKDAsIHRoaXMuYWxlcnRzLmxlbmd0aCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0KCk6IFBvcmFsQWxlcnRbXSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYWxlcnRzO1xyXG4gICAgfVxyXG5cclxuICAgIHN1Y2Nlc3MobXNnOiBzdHJpbmcsIHBhcmFtcz86IGFueSwgcG9zaXRpb24/OiBzdHJpbmcsIGRpc2FibGVUcmFuc2xhdGU/OiBib29sZWFuKTogUG9yYWxBbGVydCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkQWxlcnQoXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHR5cGU6ICdzdWNjZXNzJyxcclxuICAgICAgICAgICAgICAgIG1zZyxcclxuICAgICAgICAgICAgICAgIHBhcmFtcyxcclxuICAgICAgICAgICAgICAgIHRpbWVvdXQ6IHRoaXMudGltZW91dCxcclxuICAgICAgICAgICAgICAgIHRvYXN0OiB0aGlzLmlzVG9hc3QoKSxcclxuICAgICAgICAgICAgICAgIHBvc2l0aW9uLFxyXG4gICAgICAgICAgICAgICAgZGlzYWJsZVRyYW5zbGF0ZVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBbXVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgZXJyb3IobXNnOiBzdHJpbmcsIHBhcmFtcz86IGFueSwgcG9zaXRpb24/OiBzdHJpbmcsIGRpc2FibGVUcmFuc2xhdGU/OiBib29sZWFuKTogUG9yYWxBbGVydCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkQWxlcnQoXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHR5cGU6ICdkYW5nZXInLFxyXG4gICAgICAgICAgICAgICAgbXNnLFxyXG4gICAgICAgICAgICAgICAgcGFyYW1zLFxyXG4gICAgICAgICAgICAgICAgdGltZW91dDogdGhpcy50aW1lb3V0LFxyXG4gICAgICAgICAgICAgICAgdG9hc3Q6IHRoaXMuaXNUb2FzdCgpLFxyXG4gICAgICAgICAgICAgICAgcG9zaXRpb24sXHJcbiAgICAgICAgICAgICAgICBkaXNhYmxlVHJhbnNsYXRlXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIFtdXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICB3YXJuaW5nKG1zZzogc3RyaW5nLCBwYXJhbXM/OiBhbnksIHBvc2l0aW9uPzogc3RyaW5nLCBkaXNhYmxlVHJhbnNsYXRlPzogYm9vbGVhbik6IFBvcmFsQWxlcnQge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmFkZEFsZXJ0KFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiAnd2FybmluZycsXHJcbiAgICAgICAgICAgICAgICBtc2csXHJcbiAgICAgICAgICAgICAgICBwYXJhbXMsXHJcbiAgICAgICAgICAgICAgICB0aW1lb3V0OiB0aGlzLnRpbWVvdXQsXHJcbiAgICAgICAgICAgICAgICB0b2FzdDogdGhpcy5pc1RvYXN0KCksXHJcbiAgICAgICAgICAgICAgICBwb3NpdGlvbixcclxuICAgICAgICAgICAgICAgIGRpc2FibGVUcmFuc2xhdGVcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgW11cclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGluZm8obXNnOiBzdHJpbmcsIHBhcmFtcz86IGFueSwgcG9zaXRpb24/OiBzdHJpbmcsIGRpc2FibGVUcmFuc2xhdGU/OiBib29sZWFuKTogUG9yYWxBbGVydCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkQWxlcnQoXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHR5cGU6ICdpbmZvJyxcclxuICAgICAgICAgICAgICAgIG1zZyxcclxuICAgICAgICAgICAgICAgIHBhcmFtcyxcclxuICAgICAgICAgICAgICAgIHRpbWVvdXQ6IHRoaXMudGltZW91dCxcclxuICAgICAgICAgICAgICAgIHRvYXN0OiB0aGlzLmlzVG9hc3QoKSxcclxuICAgICAgICAgICAgICAgIHBvc2l0aW9uLFxyXG4gICAgICAgICAgICAgICAgZGlzYWJsZVRyYW5zbGF0ZVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBbXVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkQWxlcnQoYWxlcnRPcHRpb25zOiBQb3JhbEFsZXJ0LCBleHRBbGVydHM6IFBvcmFsQWxlcnRbXSk6IFBvcmFsQWxlcnQge1xyXG4gICAgICAgIGFsZXJ0T3B0aW9ucy5pZCA9IHRoaXMuYWxlcnRJZCsrO1xyXG5cclxuICAgICAgICBpZiAoIWFsZXJ0T3B0aW9ucy5kaXNhYmxlVHJhbnNsYXRlICYmIHRoaXMuaTE4bkVuYWJsZWQgJiYgYWxlcnRPcHRpb25zLm1zZykge1xyXG4gICAgICAgICAgICBhbGVydE9wdGlvbnMubXNnID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoYWxlcnRPcHRpb25zLm1zZywgYWxlcnRPcHRpb25zLnBhcmFtcyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBhbGVydCA9IHRoaXMuZmFjdG9yeShhbGVydE9wdGlvbnMpO1xyXG4gICAgICAgIGlmIChhbGVydE9wdGlvbnMudGltZW91dCAmJiBhbGVydE9wdGlvbnMudGltZW91dCA+IDApIHtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlQWxlcnQoYWxlcnRPcHRpb25zLmlkLCBleHRBbGVydHMpO1xyXG4gICAgICAgICAgICB9LCBhbGVydE9wdGlvbnMudGltZW91dCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhbGVydDtcclxuICAgIH1cclxuXHJcbiAgICBjbG9zZUFsZXJ0KGlkOiBudW1iZXIsIGV4dEFsZXJ0cz86IFBvcmFsQWxlcnRbXSk6IGFueSB7XHJcbiAgICAgICAgY29uc3QgdGhpc0FsZXJ0czogUG9yYWxBbGVydFtdID0gZXh0QWxlcnRzICYmIGV4dEFsZXJ0cy5sZW5ndGggPiAwID8gZXh0QWxlcnRzIDogdGhpcy5hbGVydHM7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xvc2VBbGVydEJ5SW5kZXgodGhpc0FsZXJ0cy5tYXAoZSA9PiBlLmlkKS5pbmRleE9mKGlkKSwgdGhpc0FsZXJ0cyk7XHJcbiAgICB9XHJcblxyXG4gICAgY2xvc2VBbGVydEJ5SW5kZXgoaW5kZXg6IG51bWJlciwgdGhpc0FsZXJ0czogUG9yYWxBbGVydFtdKTogUG9yYWxBbGVydFtdIHtcclxuICAgICAgICByZXR1cm4gdGhpc0FsZXJ0cy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgfVxyXG5cclxuICAgIGlzVG9hc3QoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudG9hc3Q7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBmYWN0b3J5KGFsZXJ0T3B0aW9uczogUG9yYWxBbGVydCk6IFBvcmFsQWxlcnQge1xyXG4gICAgICAgIGNvbnN0IGFsZXJ0OiBQb3JhbEFsZXJ0ID0ge1xyXG4gICAgICAgICAgICB0eXBlOiBhbGVydE9wdGlvbnMudHlwZSxcclxuICAgICAgICAgICAgbXNnOiB0aGlzLnNhbml0aXplci5zYW5pdGl6ZShTZWN1cml0eUNvbnRleHQuSFRNTCwgYWxlcnRPcHRpb25zLm1zZyksXHJcbiAgICAgICAgICAgIGlkOiBhbGVydE9wdGlvbnMuaWQsXHJcbiAgICAgICAgICAgIHRpbWVvdXQ6IGFsZXJ0T3B0aW9ucy50aW1lb3V0LFxyXG4gICAgICAgICAgICB0b2FzdDogYWxlcnRPcHRpb25zLnRvYXN0LFxyXG4gICAgICAgICAgICBwb3NpdGlvbjogYWxlcnRPcHRpb25zLnBvc2l0aW9uID8gYWxlcnRPcHRpb25zLnBvc2l0aW9uIDogJ3RvcCByaWdodCcsXHJcbiAgICAgICAgICAgIHNjb3BlZDogYWxlcnRPcHRpb25zLnNjb3BlZCxcclxuICAgICAgICAgICAgY2xvc2U6IChhbGVydHM6IFBvcmFsQWxlcnRbXSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xvc2VBbGVydChhbGVydE9wdGlvbnMuaWQsIGFsZXJ0cyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIGlmICghYWxlcnQuc2NvcGVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWxlcnRzLnB1c2goYWxlcnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYWxlcnQ7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IFN3YWwgZnJvbSAnc3dlZXRhbGVydDInO1xyXG5pbXBvcnQge1BvcnRhbEFsZXJ0U2VydmljZX0gZnJvbSAnLi4vYWxlcnQvcG9ydGFsLWFsZXJ0LnNlcnZpY2UnO1xyXG5pbXBvcnQge1V0aWxGdW5jdGlvbnN9IGZyb20gJy4uL3V0aWwvdXRpbC1mdW5jdGlvbnMnO1xyXG5cclxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcclxuZXhwb3J0IGNsYXNzIFV0aWxNZW5zYWdlbSB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgIHByaXZhdGUgYWxlcnRTZXJ2aWNlOiBQb3J0YWxBbGVydFNlcnZpY2VcclxuICAgICkge31cclxuXHJcbiAgICBzaG93RXJyb3IodmFsdWUpIHtcclxuICAgICAgICBsZXQgZXJyb3JNZXNzYWdlO1xyXG4gICAgICAgIGlmICh2YWx1ZS5lcnJvciAmJiB2YWx1ZS5lcnJvci5maWVsZEVycm9ycykge1xyXG4gICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSB2YWx1ZS5lcnJvci5maWVsZEVycm9yc1swXS5tZXNzYWdlO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodmFsdWUubWVzc2FnZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IHZhbHVlLm1lc3NhZ2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChlcnJvck1lc3NhZ2UgPT09IG51bGwgfHwgZXJyb3JNZXNzYWdlID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gJ0Vycm8gZGVzY29uaGVjaWRvJztcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zaG93TWVuc2FnZW1FcnJvcihlcnJvck1lc3NhZ2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHNob3dFcnJvckRldGFpbGVkKHZhbHVlKSB7XHJcbiAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gVXRpbEZ1bmN0aW9ucy5nZXRIdHRwRXJyb3JNZXNzYWdlKHZhbHVlKTtcclxuICAgICAgICB0aGlzLnNob3dNZW5zYWdlbUVycm9yKGVycm9yTWVzc2FnZSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2hvd0FsZXJ0RGV0YWlsZWQodmFsdWUpIHtcclxuICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBVdGlsRnVuY3Rpb25zLmdldEh0dHBFcnJvck1lc3NhZ2UodmFsdWUpO1xyXG4gICAgICAgIFN3YWwuZmlyZSh7XHJcbiAgICAgICAgICAgIHRpdGxlOiAnJyxcclxuICAgICAgICAgICAgdHlwZTogJ3dhcm5pbmcnLFxyXG4gICAgICAgICAgICBzaG93Q2xvc2VCdXR0b246IHRydWUsXHJcbiAgICAgICAgICAgIHRleHQ6IGVycm9yTWVzc2FnZVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHNob3dFcnJvclN3YWwobWVuc3NhZ2UpIHtcclxuICAgICAgU3dhbC5maXJlKHtcclxuICAgICAgICB0aXRsZTogJycsXHJcbiAgICAgICAgdHlwZTogJ2Vycm9yJyxcclxuICAgICAgICBzaG93Q2xvc2VCdXR0b246IHRydWUsXHJcbiAgICAgICAgdGV4dDogbWVuc3NhZ2VcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2hvd01lbnNhZ2VtRXJyb3IoZXJyb3JNZXNzYWdlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5jbGVhcigpO1xyXG4gICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKGVycm9yTWVzc2FnZSwgbnVsbCwgbnVsbCwgdHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2hvd1dhcm5pbmcodmFsdWUpIHtcclxuICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5jbGVhcigpO1xyXG4gICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLndhcm5pbmcodmFsdWUsIG51bGwsIG51bGwsIHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHNob3dTdWNjZXNzKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuY2xlYXIoKTtcclxuICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5zdWNjZXNzKHZhbHVlLCBudWxsLCBudWxsLCB0cnVlKTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge0NvbXBvbmVudCwgRWxlbWVudFJlZiwgVmlld0NoaWxkfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtOZ2JBY3RpdmVNb2RhbH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQge1BhcmFtZXRybywgUGFyYW1ldHJvVGlwb30gZnJvbSAnLi4vLi4vbW9kZWwvcGFyYW1ldHJvLm1vZGVsJztcclxuaW1wb3J0IHtQYXJhbWV0cm9zU2VydmljZX0gZnJvbSAnLi9wYXJhbWV0cm9zLnNlcnZpY2UnO1xyXG5pbXBvcnQge1BhcmFtZXRyb1Jlc3VsdCwgUGFyYW1ldHJvUmVzdWx0TGlzdGVuZXJ9IGZyb20gJy4vcGFyYW1ldHJvLnJlc3VsdCc7XHJcbmltcG9ydCB7VXRpbE1lbnNhZ2VtfSBmcm9tICcuLi8uLi9hbGVydC91dGlsLW1lbnNhZ2VtJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdqaGktcGFyYW1ldHJvcy1lZGl0LW1vZGFsJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9wYXJhbWV0cm9zLmVkaXQuY29tcG9uZW50Lmh0bWwnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQYXJhbWV0cm9zRWRpdENvbXBvbmVudCB7XHJcblxyXG4gICAgQFZpZXdDaGlsZCgnbm9tZScpXHJcbiAgICBub21lOiBFbGVtZW50UmVmO1xyXG5cclxuICAgIHRpdGxlOiBzdHJpbmc7XHJcbiAgICBwYXJhbWV0cm86IFBhcmFtZXRybztcclxuICAgIHBhcmFtZXRyb0JhY2t1cDogUGFyYW1ldHJvO1xyXG4gICAgcGFyYW1ldHJvRW11bSA9IFBhcmFtZXRyb1RpcG87XHJcbiAgICByZXQ6IFBhcmFtZXRyb1Jlc3VsdDtcclxuICAgIGxpc3RlbmVyOiBQYXJhbWV0cm9SZXN1bHRMaXN0ZW5lcjtcclxuICAgIGJ1c3k6IGJvb2xlYW47XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHVibGljIGFjdGl2ZU1vZGFsOiBOZ2JBY3RpdmVNb2RhbCxcclxuICAgICAgICBwcml2YXRlIHNlcnZpY2U6IFBhcmFtZXRyb3NTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgdXRpbE1lbnNhZ2VtOiBVdGlsTWVuc2FnZW1cclxuICAgICkge1xyXG4gICAgICAgIHRoaXMucGFyYW1ldHJvID0gbmV3IFBhcmFtZXRybygpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpbml0KHRpdGxlOiBzdHJpbmcsIHBhcmFtOiBQYXJhbWV0cm8pIHtcclxuICAgICAgICB0aGlzLnRpdGxlID0gdGl0bGU7XHJcbiAgICAgICAgdGhpcy5wYXJhbWV0cm9CYWNrdXAgPSBwYXJhbTtcclxuICAgICAgICB0aGlzLnBhcmFtZXRybyA9IHsgLi4udGhpcy5wYXJhbWV0cm9CYWNrdXAgfTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0TGlzdGVuZXIocGFyZW50OiBQYXJhbWV0cm9SZXN1bHRMaXN0ZW5lcikge1xyXG4gICAgICAgIHRoaXMubGlzdGVuZXIgPSBwYXJlbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgaXNWYWxvckFycmF5VmFsaWRvKCkge1xyXG4gICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KHRoaXMucGFyYW1ldHJvLnZhbG9yKTtcclxuICAgIH1cclxuXHJcbiAgICByZW1vdmVJdGVtKGl0ZW06IGFueSkge1xyXG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5wYXJhbWV0cm8udmFsb3IuaW5kZXhPZihpdGVtKTtcclxuICAgICAgICB0aGlzLnBhcmFtZXRyby52YWxvci5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgfVxyXG5cclxuICAgIGFkaWNpb25hSXRlbSgpIHtcclxuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodGhpcy5wYXJhbWV0cm8udmFsb3IpKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGFyYW1ldHJvLnZhbG9yID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucGFyYW1ldHJvLnZhbG9yLnB1c2goeyB2YWxvcjogJycsIHRleHRvOiAnJyB9KTtcclxuICAgIH1cclxuXHJcbiAgICBjaGFuZ2VUaXBvKCkge1xyXG4gICAgICAgIGlmICh0aGlzLnBhcmFtZXRyby50aXBvID09PSB0aGlzLnBhcmFtZXRyb0VtdW0uQ09NQk8pIHtcclxuICAgICAgICAgICAgdGhpcy5wYXJhbWV0cm8udmFsb3IgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnBhcmFtZXRyby50aXBvID09PSB0aGlzLnBhcmFtZXRyb0VtdW0uU1RSSU5HKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGFyYW1ldHJvLnZhbG9yID0gJyc7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnBhcmFtZXRyby50aXBvID09PSB0aGlzLnBhcmFtZXRyb0VtdW0uQk9PTEVBTikge1xyXG4gICAgICAgICAgICB0aGlzLnBhcmFtZXRyby52YWxvciA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNoYW5nZUxvY2FsKCkge1xyXG4gICAgICAgIGlmICh0aGlzLnBhcmFtZXRyby5sb2NhbCA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgdGhpcy5wYXJhbWV0cm8udGlwbyA9IFBhcmFtZXRyb1RpcG8uU1RSSU5HO1xyXG4gICAgICAgICAgICB0aGlzLnBhcmFtZXRyby52YWxvciA9ICcnO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzYXZlKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmxpc3RlbmVyICE9PSB1bmRlZmluZWQgJiYgdGhpcy5saXN0ZW5lciAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLnJldCA9IG5ldyBQYXJhbWV0cm9SZXN1bHQoKTtcclxuICAgICAgICAgICAgdGhpcy5yZXQuc3VjZXNzbyA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMucGFyYW1ldHJvQmFja3VwLnRpcG8gPSB0aGlzLnBhcmFtZXRyby50aXBvO1xyXG4gICAgICAgICAgICB0aGlzLnBhcmFtZXRyb0JhY2t1cC5sb2NhbCA9IHRoaXMucGFyYW1ldHJvLmxvY2FsO1xyXG4gICAgICAgICAgICB0aGlzLnBhcmFtZXRyb0JhY2t1cC5ub21lID0gdGhpcy5wYXJhbWV0cm8ubm9tZTtcclxuICAgICAgICAgICAgdGhpcy5wYXJhbWV0cm9CYWNrdXAuZGVzY3JpY2FvID0gdGhpcy5wYXJhbWV0cm8uZGVzY3JpY2FvO1xyXG4gICAgICAgICAgICB0aGlzLnBhcmFtZXRyb0JhY2t1cC52YWxvciA9IHRoaXMucGFyYW1ldHJvLnZhbG9yO1xyXG4gICAgICAgICAgICB0aGlzLnJldC5yZXRvcm5vID0gdGhpcy5wYXJhbWV0cm9CYWNrdXA7XHJcbiAgICAgICAgICAgIHRoaXMubGlzdGVuZXIucmV0b3Jubyh0aGlzLnJldCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuYWN0aXZlTW9kYWwuZGlzbWlzcygnc2F2ZScpO1xyXG4gICAgfVxyXG5cclxuICAgIGFkaWNpb25hUGFyYW1ldHJvVHJpYnV0b3MoKSB7XHJcbiAgICAgICAgdGhpcy5zZXRCdXN5KHRydWUpO1xyXG4gICAgICAgIHRoaXMuc2VydmljZVxyXG4gICAgICAgICAgICAuZ2V0UGFyYW1ldHJvVHJpYnV0b3ModGhpcy5wYXJhbWV0cm8ubm9tZSlcclxuICAgICAgICAgICAgLnRoZW4odmFsdWUgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRCdXN5KGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5ib2R5LnN1Y2Vzc28pIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5wYXJhbWV0cm8udmFsb3IgPSB2YWx1ZS5ib2R5LnZhbG9yO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy51dGlsTWVuc2FnZW0uc2hvd01lbnNhZ2VtRXJyb3IodmFsdWUuYm9keS5lcnJvKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmNhdGNoKHZhbHVlID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0QnVzeShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dFcnJvcih2YWx1ZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHNldEJ1c3koYnVzeTogYm9vbGVhbikge1xyXG4gICAgICAgIHRoaXMuYnVzeSA9IGJ1c3k7XHJcbiAgICB9XHJcblxyXG4gICAgc2hvd0Vycm9yKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLnV0aWxNZW5zYWdlbS5zaG93RXJyb3JEZXRhaWxlZCh2YWx1ZSk7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtDb21wb25lbnR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge05nYkFjdGl2ZU1vZGFsLCBOZ2JNb2RhbH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQge1BhcmFtZXRybywgUGFyYW1ldHJvVGlwb30gZnJvbSAnLi4vLi4vbW9kZWwvcGFyYW1ldHJvLm1vZGVsJztcclxuaW1wb3J0IHtEaWFsb2dMaXN0ZW5lciwgRGlhbG9nUmVzdWx0fSBmcm9tICcuLi9tb2RhbC1kaWFsb2cnO1xyXG5pbXBvcnQge1BhcmFtZXRyb3NTZXJ2aWNlfSBmcm9tICcuL3BhcmFtZXRyb3Muc2VydmljZSc7XHJcbmltcG9ydCB7UGFyYW1ldHJvc0VkaXRDb21wb25lbnR9IGZyb20gJy4vcGFyYW1ldHJvcy5lZGl0LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7UGFyYW1ldHJvUmVzdWx0LCBQYXJhbWV0cm9SZXN1bHRMaXN0ZW5lcn0gZnJvbSAnLi9wYXJhbWV0cm8ucmVzdWx0JztcclxuaW1wb3J0IHtVdGlsTWVuc2FnZW19IGZyb20gJy4uLy4uL2FsZXJ0L3V0aWwtbWVuc2FnZW0nO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2poaS1wYXJhbWV0cm9zLW1vZGFsJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9wYXJhbWV0cm9zLmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgUGFyYW1ldHJvc0NvbXBvbmVudCBpbXBsZW1lbnRzIFBhcmFtZXRyb1Jlc3VsdExpc3RlbmVyLCBEaWFsb2dMaXN0ZW5lciB7XHJcbiAgICBwdWJsaWMgcGFyYW1ldHJvRW11bSA9IFBhcmFtZXRyb1RpcG87XHJcbiAgICBwdWJsaWMgcGFnaW5hOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgdGl0bGU6IHN0cmluZztcclxuICAgIHB1YmxpYyBwYXJhbWV0cm9zOiBBcnJheTxQYXJhbWV0cm8+O1xyXG4gICAgcHVibGljIHJldDogUGFyYW1ldHJvUmVzdWx0O1xyXG4gICAgcHVibGljIGxpc3RlbmVyOiBQYXJhbWV0cm9SZXN1bHRMaXN0ZW5lcjtcclxuICAgIHB1YmxpYyBidXN5OiBib29sZWFuO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgYWN0aXZlTW9kYWw6IE5nYkFjdGl2ZU1vZGFsLFxyXG4gICAgICAgIHByaXZhdGUgc2VydmljZTogUGFyYW1ldHJvc1NlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE5nYk1vZGFsLFxyXG4gICAgICAgIHByaXZhdGUgdXRpbE1lbnNhZ2VtOiBVdGlsTWVuc2FnZW1cclxuICAgICkge1xyXG4gICAgICAgIHRoaXMucGFyYW1ldHJvcyA9IFtdO1xyXG4gICAgICAgIHRoaXMubGlzdGVuZXIgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgdGhpcy5zZXRCdXN5KGZhbHNlKTtcclxuICAgIH1cclxuXHJcbiAgICBmaW5pc2goKSB7XHJcbiAgICAgICAgaWYgKHRoaXMubGlzdGVuZXIgIT09IHVuZGVmaW5lZCAmJiB0aGlzLmxpc3RlbmVyICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMucmV0ID0gbmV3IFBhcmFtZXRyb1Jlc3VsdCgpO1xyXG4gICAgICAgICAgICB0aGlzLnJldC5zdWNlc3NvID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5yZXQucmV0b3JubyA9IHRoaXMucGFyYW1ldHJvcztcclxuICAgICAgICAgICAgdGhpcy5saXN0ZW5lci5yZXRvcm5vKHRoaXMucmV0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5hY3RpdmVNb2RhbC5kaXNtaXNzKCdmaW5pc2gnKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0TGlzdGVuZXIocGFyZW50OiBQYXJhbWV0cm9SZXN1bHRMaXN0ZW5lcikge1xyXG4gICAgICAgIHRoaXMubGlzdGVuZXIgPSBwYXJlbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGluaXQodGl0bGU6IHN0cmluZywgcGFnaW5hOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLnRpdGxlID0gdGl0bGU7XHJcbiAgICAgICAgdGhpcy5wYWdpbmEgPSBwYWdpbmE7XHJcbiAgICAgICAgdGhpcy5nZXRQYXJhbWV0ZXJzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0UGFyYW1ldGVycygpIHtcclxuICAgICAgICB0aGlzLnNldEJ1c3kodHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5zZXJ2aWNlXHJcbiAgICAgICAgICAgIC5nZXRQYXJhbWV0cm9zVG9FZGl0KHRoaXMucGFnaW5hKVxyXG4gICAgICAgICAgICAudGhlbih2YWx1ZSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldEJ1c3koZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wYXJhbWV0cm9zID0gdmFsdWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBhcmFtZXRyb3Muc29ydCgoYSwgYikgPT4gYS5ub21lLmxvY2FsZUNvbXBhcmUoYi5ub21lKSk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5jYXRjaCh2YWx1ZSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldEJ1c3koZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zaG93RXJyb3IodmFsdWUpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBlZGl0UGFyYW1ldGVyKHBhcmFtZXRybzogUGFyYW1ldHJvKSB7XHJcbiAgICAgICAgY29uc3QgY29udGVudENvbXBvbmVudEluc3RhbmNlOiBQYXJhbWV0cm9zRWRpdENvbXBvbmVudCA9IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oUGFyYW1ldHJvc0VkaXRDb21wb25lbnQsIHtcclxuICAgICAgICAgICAgc2l6ZTogJ2xnJyxcclxuICAgICAgICAgICAgYmFja2Ryb3A6ICdzdGF0aWMnXHJcbiAgICAgICAgfSkuY29tcG9uZW50SW5zdGFuY2U7XHJcbiAgICAgICAgY29udGVudENvbXBvbmVudEluc3RhbmNlLmluaXQoJ0VkacODwqfDg8KjbyBkZSBQYXLDg8KibWV0cm8nLCBwYXJhbWV0cm8pO1xyXG4gICAgICAgIGNvbnRlbnRDb21wb25lbnRJbnN0YW5jZS5zZXRMaXN0ZW5lcih0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRQYXJhbWV0ZXIoKSB7XHJcbiAgICAgICAgY29uc3QgY29udGVudENvbXBvbmVudEluc3RhbmNlOiBQYXJhbWV0cm9zRWRpdENvbXBvbmVudCA9IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oUGFyYW1ldHJvc0VkaXRDb21wb25lbnQsIHtcclxuICAgICAgICAgICAgc2l6ZTogJ2xnJyxcclxuICAgICAgICAgICAgYmFja2Ryb3A6ICdzdGF0aWMnXHJcbiAgICAgICAgfSkuY29tcG9uZW50SW5zdGFuY2U7XHJcbiAgICAgICAgY29uc3QgcGFyYW0gPSBuZXcgUGFyYW1ldHJvKCk7XHJcbiAgICAgICAgcGFyYW0ubG9jYWwgPSB0cnVlO1xyXG4gICAgICAgIHBhcmFtLnRlbGEgPSB0aGlzLnBhZ2luYTtcclxuICAgICAgICBwYXJhbS50aXBvID0gUGFyYW1ldHJvVGlwby5TVFJJTkc7XHJcbiAgICAgICAgcGFyYW0udmFsb3IgPSAnJztcclxuICAgICAgICBwYXJhbS5ub21lID0gJyc7XHJcbiAgICAgICAgcGFyYW0uZGVzY3JpY2FvID0gJyc7XHJcbiAgICAgICAgY29udGVudENvbXBvbmVudEluc3RhbmNlLmluaXQoJ0FkacODwqfDg8KjbyBkZSBQYXLDg8KibWV0cm8nLCBwYXJhbSk7XHJcbiAgICAgICAgY29udGVudENvbXBvbmVudEluc3RhbmNlLnNldExpc3RlbmVyKHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIHNhdmVQYXJhbWV0ZXIocGFyYW1ldHJvOiBQYXJhbWV0cm8pIHtcclxuICAgICAgICB0aGlzLnNldEJ1c3kodHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5zZXJ2aWNlXHJcbiAgICAgICAgICAgIC5zYXZlUGFyYW1ldHJvKHBhcmFtZXRybylcclxuICAgICAgICAgICAgLnRoZW4odmFsdWUgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRCdXN5KGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHZhbHVlLmJvZHk7XHJcbiAgICAgICAgICAgICAgICBwYXJhbWV0cm8uaWQgPSByZXN1bHQuaWQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBhcmFtZXRyb3MucHVzaChwYXJhbWV0cm8pO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuY2F0Y2godmFsdWUgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRCdXN5KGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2hvd0Vycm9yKHZhbHVlKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLypkZWxldGVQYXJhbWV0ZXIocGFyYW1ldHJvOiBQYXJhbWV0cm8pIHtcclxuICAgICAgICBsZXQgY29udGVudENvbXBvbmVudEluc3RhbmNlOiBNb2RhbERpYWxvZ0NvbXBvbmVudDtcclxuICAgICAgICBjb250ZW50Q29tcG9uZW50SW5zdGFuY2UgPSB0aGlzLm1vZGFsU2VydmljZS5vcGVuKE1vZGFsRGlhbG9nQ29tcG9uZW50LCB7IGJhY2tkcm9wOiAnc3RhdGljJyB9KS5jb21wb25lbnRJbnN0YW5jZTtcclxuICAgICAgICBjb250ZW50Q29tcG9uZW50SW5zdGFuY2Uuc2V0TGlzdGVuZXIodGhpcyk7XHJcbiAgICAgICAgY29udGVudENvbXBvbmVudEluc3RhbmNlLmluaXQocGFyYW1ldHJvLCAnQ29uZmlybWHDg8Knw4PCo28nLCAnRGVzZWphIHJlYWxtZW50ZSBhcGFnYXIgZXNzZSBwYXLDg8KibWV0cm8/JywgJycsIERpYWxvZ1R5cGUuUVVFU1RJT04pO1xyXG4gICAgfSovXHJcblxyXG4gICAgdXBkYXRlUGFyYW1ldGVyKHBhcmFtZXRybzogUGFyYW1ldHJvKSB7XHJcbiAgICAgICAgdGhpcy5zZXRCdXN5KHRydWUpO1xyXG4gICAgICAgIHRoaXMuc2VydmljZVxyXG4gICAgICAgICAgICAudXBkYXRlUGFyYW1ldHJvKHBhcmFtZXRybylcclxuICAgICAgICAgICAgLnRoZW4odmFsdWUgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRCdXN5KGZhbHNlKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmNhdGNoKHZhbHVlID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0QnVzeShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dFcnJvcih2YWx1ZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGRpYWxvZ1JldHVybmVkKHJlc3VsdDogRGlhbG9nUmVzdWx0LCBwYXJhbTogYW55KSB7XHJcbiAgICAgICAgaWYgKHJlc3VsdCA9PT0gRGlhbG9nUmVzdWx0LllFUykge1xyXG4gICAgICAgICAgICBsZXQgcGFyYW1ldHJvOiBQYXJhbWV0cm87XHJcbiAgICAgICAgICAgIHBhcmFtZXRybyA9IHBhcmFtO1xyXG4gICAgICAgICAgICBpZiAocGFyYW1ldHJvLmlkID09PSB1bmRlZmluZWQgfHwgcGFyYW1ldHJvLmlkID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMucGFyYW1ldHJvcy5pbmRleE9mKHBhcmFtZXRybyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBhcmFtZXRyb3Muc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnNldEJ1c3kodHJ1ZSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2VydmljZVxyXG4gICAgICAgICAgICAgICAgLmRlbGV0ZVBhcmFtZXRybyhwYXJhbWV0cm8uaWQpXHJcbiAgICAgICAgICAgICAgICAudGhlbih2YWx1ZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRCdXN5KGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMucGFyYW1ldHJvcy5pbmRleE9mKHBhcmFtZXRybyk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXJhbWV0cm9zLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgLmNhdGNoKHZhbHVlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEJ1c3koZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0Vycm9yKHZhbHVlKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzZXRCdXN5KGJ1c3k6IGJvb2xlYW4pIHtcclxuICAgICAgICB0aGlzLmJ1c3kgPSBidXN5O1xyXG4gICAgfVxyXG5cclxuICAgIHNob3dFcnJvcih2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy51dGlsTWVuc2FnZW0uc2hvd0Vycm9yRGV0YWlsZWQodmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldG9ybm8ocmVzdWx0OiBQYXJhbWV0cm9SZXN1bHQpIHtcclxuICAgICAgICBpZiAocmVzdWx0LnN1Y2Vzc28gPT09IHRydWUpIHtcclxuICAgICAgICAgICAgaWYgKHJlc3VsdC5yZXRvcm5vLmlkICE9PSB1bmRlZmluZWQgJiYgcmVzdWx0LnJldG9ybm8uaWQgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVQYXJhbWV0ZXIocmVzdWx0LnJldG9ybm8pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zYXZlUGFyYW1ldGVyKHJlc3VsdC5yZXRvcm5vKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQgeyBDb21wb25lbnQsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFBvcnRhbEFsZXJ0U2VydmljZSB9IGZyb20gJy4vcG9ydGFsLWFsZXJ0LnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2poaS1hbGVydCcsXHJcbiAgICB0ZW1wbGF0ZTogYFxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJhbGVydHNcIiByb2xlPVwiYWxlcnRcIj5cclxuICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgYWxlcnQgb2YgYWxlcnRzXCIgW25nQ2xhc3NdPVwic2V0Q2xhc3NlcyhhbGVydClcIj5cclxuICAgICAgICAgICAgICAgIDxuZ2ItYWxlcnQgKm5nSWY9XCJhbGVydCAmJiBhbGVydC50eXBlICYmIGFsZXJ0Lm1zZ1wiIFt0eXBlXT1cImFsZXJ0LnR5cGVcIiAoY2xvc2UpPVwiYWxlcnQuY2xvc2UoYWxlcnRzKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIFtpbm5lckhUTUxdPVwiYWxlcnQubXNnXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9uZ2ItYWxlcnQ+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PmBcclxufSlcclxuZXhwb3J0IGNsYXNzIEpoaUFsZXJ0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gICAgYWxlcnRzOiBhbnlbXTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGFsZXJ0U2VydmljZTogUG9ydGFsQWxlcnRTZXJ2aWNlKSB7fVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIHRoaXMuYWxlcnRzID0gdGhpcy5hbGVydFNlcnZpY2UuZ2V0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0Q2xhc3NlcyhhbGVydCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHRvYXN0OiAhIWFsZXJ0LnRvYXN0LFxyXG4gICAgICAgICAgICBbYWxlcnQucG9zaXRpb25dOiB0cnVlXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uRGVzdHJveSgpIHtcclxuICAgICAgICB0aGlzLmFsZXJ0cyA9IFtdO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7IENvbXBvbmVudCwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuaW1wb3J0IHsgSmhpRXZlbnRNYW5hZ2VyIH0gZnJvbSAnbmctamhpcHN0ZXInO1xyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgUG9ydGFsQWxlcnRTZXJ2aWNlIH0gZnJvbSAnLi9wb3J0YWwtYWxlcnQuc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnamhpLWFsZXJ0LWVycm9yJyxcclxuICAgIHRlbXBsYXRlOiBgXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImFsZXJ0c1wiIHJvbGU9XCJhbGVydFwiPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBhbGVydCBvZiBhbGVydHNcIiBbbmdDbGFzc109XCJzZXRDbGFzc2VzKGFsZXJ0KVwiPlxyXG4gICAgICAgICAgICAgICAgPG5nYi1hbGVydCAqbmdJZj1cImFsZXJ0ICYmIGFsZXJ0LnR5cGUgJiYgYWxlcnQubXNnXCIgW3R5cGVdPVwiYWxlcnQudHlwZVwiIChjbG9zZSk9XCJhbGVydC5jbG9zZShhbGVydHMpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHByZSBbaW5uZXJIVE1MXT1cImFsZXJ0Lm1zZ1wiPjwvcHJlPlxyXG4gICAgICAgICAgICAgICAgPC9uZ2ItYWxlcnQ+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PmBcclxufSlcclxuZXhwb3J0IGNsYXNzIEpoaUFsZXJ0RXJyb3JDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xyXG4gICAgYWxlcnRzOiBhbnlbXTtcclxuICAgIGNsZWFuSHR0cEVycm9yTGlzdGVuZXI6IFN1YnNjcmlwdGlvbjtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogUG9ydGFsQWxlcnRTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgZXZlbnRNYW5hZ2VyOiBKaGlFdmVudE1hbmFnZXIsXHJcbiAgICAgICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlXHJcbiAgICApIHtcclxuXHJcbiAgICAgICAgdGhpcy5hbGVydHMgPSBbXTtcclxuXHJcbiAgICAgICAgdGhpcy5jbGVhbkh0dHBFcnJvckxpc3RlbmVyID0gZXZlbnRNYW5hZ2VyLnN1YnNjcmliZSgncG9ydGFsR2F0ZXdheUFwcC5odHRwRXJyb3InLCByZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBpO1xyXG4gICAgICAgICAgICBjb25zdCBodHRwRXJyb3JSZXNwb25zZSA9IHJlc3BvbnNlLmNvbnRlbnQ7XHJcbiAgICAgICAgICAgIHN3aXRjaCAoaHR0cEVycm9yUmVzcG9uc2Uuc3RhdHVzKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBjb25uZWN0aW9uIHJlZnVzZWQsIHNlcnZlciBub3QgcmVhY2hhYmxlXHJcbiAgICAgICAgICAgICAgICBjYXNlIDA6XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRFcnJvckFsZXJ0KCdTZXJ2ZXIgbm90IHJlYWNoYWJsZScsICdlcnJvci5zZXJ2ZXIubm90LnJlYWNoYWJsZScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgIGNhc2UgNDAwOlxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFyciA9IGh0dHBFcnJvclJlc3BvbnNlLmhlYWRlcnMua2V5cygpO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBlcnJvckhlYWRlciA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGVudGl0eUtleSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgYXJyLmZvckVhY2goZW50cnkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZW50cnkudG9Mb3dlckNhc2UoKS5lbmRzV2l0aCgnYXBwLWVycm9yJykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ySGVhZGVyID0gaHR0cEVycm9yUmVzcG9uc2UuaGVhZGVycy5nZXQoZW50cnkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVudHJ5LnRvTG93ZXJDYXNlKCkuZW5kc1dpdGgoJ2FwcC1wYXJhbXMnKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5S2V5ID0gaHR0cEVycm9yUmVzcG9uc2UuaGVhZGVycy5nZXQoZW50cnkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9ySGVhZGVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVudGl0eU5hbWUgPSB0cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ2dsb2JhbC5tZW51LmVudGl0aWVzLicgKyBlbnRpdHlLZXkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZEVycm9yQWxlcnQoZXJyb3JIZWFkZXIsIGVycm9ySGVhZGVyLCB7IGVudGl0eU5hbWUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChodHRwRXJyb3JSZXNwb25zZS5lcnJvciAhPT0gJycgJiYgaHR0cEVycm9yUmVzcG9uc2UuZXJyb3IuZmllbGRFcnJvcnMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmllbGRFcnJvcnMgPSBodHRwRXJyb3JSZXNwb25zZS5lcnJvci5maWVsZEVycm9ycztcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGZpZWxkRXJyb3JzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmaWVsZEVycm9yID0gZmllbGRFcnJvcnNbaV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGlzdDogQXJyYXk8c3RyaW5nPiA9IFsnTWluJywgJ01heCcsICdEZWNpbWFsTWluJywgJ0RlY2ltYWxNYXgnXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGlzdC5pbmNsdWRlcyhmaWVsZEVycm9yLm1lc3NhZ2UpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRFcnJvci5tZXNzYWdlID0gJ1NpemUnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29udmVydCAnc29tZXRoaW5nWzE0XS5vdGhlcls0XS5pZCcgdG8gJ3NvbWV0aGluZ1tdLm90aGVyW10uaWQnIHNvIHRyYW5zbGF0aW9ucyBjYW4gYmUgd3JpdHRlbiB0byBpdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udmVydGVkRmllbGQgPSBmaWVsZEVycm9yLmZpZWxkLnJlcGxhY2UoL1xcW1xcZCpcXF0vZywgJ1tdJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmaWVsZE5hbWUgPSB0cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ3BvcnRhbEdhdGV3YXlBcHAuJyArIGZpZWxkRXJyb3Iub2JqZWN0TmFtZSArICcuJyArIGNvbnZlcnRlZEZpZWxkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkRXJyb3JBbGVydCgnRXJyb3Igb24gZmllbGQgXCInICsgZmllbGROYW1lICsgJ1wiJywgJ2Vycm9yLicgKyBmaWVsZEVycm9yLm1lc3NhZ2UsIHsgZmllbGROYW1lIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChodHRwRXJyb3JSZXNwb25zZS5lcnJvciAhPT0gJycgJiYgaHR0cEVycm9yUmVzcG9uc2UuZXJyb3IubWVzc2FnZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZEVycm9yQWxlcnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwRXJyb3JSZXNwb25zZS5lcnJvci5tZXNzYWdlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaHR0cEVycm9yUmVzcG9uc2UuZXJyb3IubWVzc2FnZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0dHBFcnJvclJlc3BvbnNlLmVycm9yLnBhcmFtc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkRXJyb3JBbGVydChodHRwRXJyb3JSZXNwb25zZS5lcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgICAgIGNhc2UgNDA0OlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkRXJyb3JBbGVydCgnTm90IGZvdW5kJywgJ2Vycm9yLnVybC5ub3QuZm91bmQnKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChodHRwRXJyb3JSZXNwb25zZS5lcnJvciAhPT0gJycgJiYgaHR0cEVycm9yUmVzcG9uc2UuZXJyb3IubWVzc2FnZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZEVycm9yQWxlcnQoaHR0cEVycm9yUmVzcG9uc2UuZXJyb3IubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRFcnJvckFsZXJ0KGh0dHBFcnJvclJlc3BvbnNlLmVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRDbGFzc2VzKGFsZXJ0KSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgdG9hc3Q6ICEhYWxlcnQudG9hc3QsXHJcbiAgICAgICAgICAgIFthbGVydC5wb3NpdGlvbl06IHRydWVcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25EZXN0cm95KCkge1xyXG4gICAgICAgIGlmICh0aGlzLmNsZWFuSHR0cEVycm9yTGlzdGVuZXIgIT09IHVuZGVmaW5lZCAmJiB0aGlzLmNsZWFuSHR0cEVycm9yTGlzdGVuZXIgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy5ldmVudE1hbmFnZXIuZGVzdHJveSh0aGlzLmNsZWFuSHR0cEVycm9yTGlzdGVuZXIpO1xyXG4gICAgICAgICAgICB0aGlzLmFsZXJ0cyA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhZGRFcnJvckFsZXJ0KG1lc3NhZ2UsIGtleT8sIGRhdGE/KSB7XHJcbiAgICAgICAga2V5ID0ga2V5ICYmIGtleSAhPT0gbnVsbCA/IGtleSA6IG1lc3NhZ2U7XHJcbiAgICAgICAgdGhpcy5hbGVydHMucHVzaChcclxuICAgICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuYWRkQWxlcnQoXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2RhbmdlcicsXHJcbiAgICAgICAgICAgICAgICAgICAgbXNnOiBrZXksXHJcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiBkYXRhLFxyXG4gICAgICAgICAgICAgICAgICAgIHRpbWVvdXQ6IDUwMDAsXHJcbiAgICAgICAgICAgICAgICAgICAgdG9hc3Q6IHRoaXMuYWxlcnRTZXJ2aWNlLmlzVG9hc3QoKSxcclxuICAgICAgICAgICAgICAgICAgICBzY29wZWQ6IHRydWVcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB0aGlzLmFsZXJ0c1xyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge0NVU1RPTV9FTEVNRU5UU19TQ0hFTUEsIE5nTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtVdGlsTWVuc2FnZW19IGZyb20gJy4vdXRpbC1tZW5zYWdlbSc7XHJcbmltcG9ydCB7UG9ydGFsQWxlcnRTZXJ2aWNlfSBmcm9tICcuL3BvcnRhbC1hbGVydC5zZXJ2aWNlJztcclxuaW1wb3J0IHtKaGlBbGVydENvbXBvbmVudH0gZnJvbSAnLi9hbGVydC5jb21wb25lbnQnO1xyXG5pbXBvcnQge0poaUFsZXJ0RXJyb3JDb21wb25lbnR9IGZyb20gJy4vYWxlcnQtZXJyb3IuY29tcG9uZW50JztcclxuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7Rm9ybXNNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHtOZ2JNb2R1bGV9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHtOZ0poaXBzdGVyTW9kdWxlfSBmcm9tICduZy1qaGlwc3Rlcic7XHJcblxyXG5ATmdNb2R1bGUoe1xyXG4gIGltcG9ydHM6IFtcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgTmdiTW9kdWxlLmZvclJvb3QoKSxcclxuICAgIE5nSmhpcHN0ZXJNb2R1bGVcclxuICBdLFxyXG4gIGRlY2xhcmF0aW9uczogW1xyXG4gICAgSmhpQWxlcnRDb21wb25lbnQsXHJcbiAgICBKaGlBbGVydEVycm9yQ29tcG9uZW50XHJcbiAgXSxcclxuICBleHBvcnRzOiBbXHJcbiAgICBKaGlBbGVydENvbXBvbmVudCxcclxuICAgIEpoaUFsZXJ0RXJyb3JDb21wb25lbnRcclxuICBdLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAgVXRpbE1lbnNhZ2VtLCBQb3J0YWxBbGVydFNlcnZpY2VcclxuICBdLFxyXG4gIHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgUG9ydGFsQWxlcnRNb2R1bGUge31cclxuIiwiaW1wb3J0IHtUaXBvTG9ncmFkb3Vyb30gZnJvbSAnLi90aXBvLWxvZ3JhZG91cm8ubW9kZWwnO1xyXG5pbXBvcnQge1RpdHVsb0xvZ3JhZG91cm99IGZyb20gJy4vdGl0dWxvLWxvZ3JhZG91cm8ubW9kZWwnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENhbXBvc1ByZWVuY2hpbWVudG8ge1xyXG4gICAgcHVibGljIHRpcG9zTG9ncmFkb3Vybz86IEFycmF5PFRpcG9Mb2dyYWRvdXJvPiA9IFtdO1xyXG4gICAgcHVibGljIHRpdHVsb3NMb2dyYWRvdXJvPzogQXJyYXk8VGl0dWxvTG9ncmFkb3Vybz4gPSBbXTtcclxufVxyXG4iLCJpbXBvcnQge1Jlc3BvbnNhdmVsfSBmcm9tICcuL3Jlc3BvbnNhdmVsLm1vZGVsJztcclxuaW1wb3J0IHtQZXNzb2FKdXJpZGljYX0gZnJvbSAnLi9wZXNzb2EtanVyaWRpY2EubW9kZWwnO1xyXG5pbXBvcnQge1Blc3NvYUZpc2ljYX0gZnJvbSAnLi9wZXNzb2EtZmlzaWNhLm1vZGVsJztcclxuaW1wb3J0IHtFbmRlcmVjb30gZnJvbSAnLi9lbmRlcmVjby5tb2RlbCc7XHJcbmltcG9ydCB7U2l0dWFjYW9Db250cmlidWludGUsIFRpcG9QZXNzb2F9IGZyb20gJy4vZW51bXMubW9kZWwnO1xyXG5cclxuZXhwb3J0IGNsYXNzIENvbnRyaWJ1aW50ZSB7XHJcbiAgICBwdWJsaWMgaWQ/OiBudW1iZXI7XHJcbiAgICBwdWJsaWMgdGlwb1Blc3NvYT86IFRpcG9QZXNzb2E7XHJcbiAgICBwdWJsaWMgZG9jdW1lbnRvPzogc3RyaW5nO1xyXG4gICAgcHVibGljIG5vbWU/OiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgc2l0dWFjYW8/OiBTaXR1YWNhb0NvbnRyaWJ1aW50ZTtcclxuICAgIHB1YmxpYyB0ZWxlZm9uZUNlbHVsYXI/OiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgdGVsZWZvbmVSZXNpZGVuY2lhbD86IHN0cmluZztcclxuICAgIHB1YmxpYyB0ZWxlZm9uZUNvbWVyY2lhbD86IHN0cmluZztcclxuICAgIHB1YmxpYyBlbWFpbD86IHN0cmluZztcclxuICAgIHB1YmxpYyBkYXRhQWx0ZXJhY2FvPzogRGF0ZTtcclxuICAgIHB1YmxpYyB1c3VhcmlvQWx0ZXJhY2FvPzogc3RyaW5nO1xyXG4gICAgcHVibGljIHV0aWxpemFyRW5kZXJlY29QcmluY2lwYWxQYXJhQ29ycmVzcG9uZGVuY2lhPzogYm9vbGVhbjtcclxuICAgIHB1YmxpYyBwZXNzb2FGaXNpY2E/OiBQZXNzb2FGaXNpY2E7XHJcbiAgICBwdWJsaWMgcGVzc29hSnVyaWRpY2E/OiBQZXNzb2FKdXJpZGljYTtcclxuICAgIHB1YmxpYyBlbmRlcmVjb3M/OiBFbmRlcmVjb1tdO1xyXG4gICAgcHVibGljIGVuZGVyZWNvPzogc3RyaW5nO1xyXG4gICAgcHVibGljIGluc2NyaWNhbz86IHN0cmluZztcclxuICAgIHB1YmxpYyBhcmVhT2N1cGFkYT86IG51bWJlcjtcclxuICAgIHB1YmxpYyBkZGQ/OiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgYXR1YWNhbz86IHN0cmluZztcclxuICAgIHB1YmxpYyByZXNwb25zYXZlaXM/OiBBcnJheTxSZXNwb25zYXZlbD4gPSBbXTtcclxufVxyXG5cclxuIiwiaW1wb3J0IHtDb21wb25lbnQsIFZpZXdDaGlsZH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7TmdiQWN0aXZlTW9kYWx9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHtQYXJhbWV0cm99IGZyb20gJy4uLy4uL21vZGVsJztcclxuaW1wb3J0IHtQYWdpbmFBanVkYX0gZnJvbSAnLi4vLi4vbW9kZWwvcGFnaW5hQWp1ZGEubW9kZWwnO1xyXG5pbXBvcnQge2FuaW1hdGUsIHN0YXRlLCBzdHlsZSwgdHJhbnNpdGlvbiwgdHJpZ2dlcn0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2poaS1hanVkYS1tb2RhbCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2FqdWRhLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnYWp1ZGEuY29tcG9uZW50LnNjc3MnXSxcclxuICBhbmltYXRpb25zOiBbXHJcbiAgICB0cmlnZ2VyKCdhbmltYWNhbycsIFtcclxuICAgICAgc3RhdGUoJ3Nob3duJywgc3R5bGUoe1xyXG4gICAgICAgIG9wYWNpdHk6IDFcclxuICAgICAgfSkpLFxyXG4gICAgICBzdGF0ZSgnaGlkZGVuJywgc3R5bGUoe1xyXG4gICAgICAgIG9wYWNpdHk6IDBcclxuICAgICAgfSkpLFxyXG4gICAgICB0cmFuc2l0aW9uKCcqID0+IConLCBhbmltYXRlKCcuM3MnKSlcclxuICAgIF0pXHJcbiAgXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEFqdWRhQ29tcG9uZW50IHtcclxuICBwdWJsaWMgdGl0bGU6IHN0cmluZztcclxuICBwdWJsaWMgYnVzeTogYm9vbGVhbjtcclxuICBwdWJsaWMgcGFyYW1ldHJvczogQXJyYXk8UGFyYW1ldHJvPjtcclxuICBwdWJsaWMgcGFnaW5hc0FqdWRhOiBBcnJheTxQYWdpbmFBanVkYT4gPSBbXTtcclxuICBwdWJsaWMgcGFnaW5hQXR1YWw6IG51bWJlcjtcclxuICBwdWJsaWMgZmFkZSA9ICdzaG93bic7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ2JvdGFvTmF2ZWdhY2FvJylcclxuICBib3Rhb05hdmVnYWNhbzogYW55O1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgYWN0aXZlTW9kYWw6IE5nYkFjdGl2ZU1vZGFsXHJcbiAgKSB7XHJcbiAgICB0aGlzLnBhcmFtZXRyb3MgPSBbXTtcclxuICAgIHRoaXMuc2V0QnVzeShmYWxzZSk7XHJcbiAgfVxyXG5cclxuICBmaW5pc2goKSB7XHJcbiAgICB0aGlzLmFjdGl2ZU1vZGFsLmRpc21pc3MoJ2ZpbmlzaCcpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGluaXQodGl0bGU6IHN0cmluZywgcGFnaW5hc0FqdWRhOiBBcnJheTxQYWdpbmFBanVkYT4pIHtcclxuICAgIHRoaXMudGl0bGUgPSB0aXRsZTtcclxuICAgIHRoaXMucGFnaW5hc0FqdWRhID0gcGFnaW5hc0FqdWRhO1xyXG4gICAgdGhpcy5wYWdpbmFBdHVhbCA9IDA7XHJcblxyXG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3VzdWFyaW9WaXVBanVkYScsICd0cnVlJyk7XHJcblxyXG4gICAgdGhpcy5ib3Rhb05hdmVnYWNhby5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XHJcbiAgfVxyXG5cclxuICBzZXRCdXN5KGJ1c3k6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuYnVzeSA9IGJ1c3k7XHJcbiAgfVxyXG5cclxuICBwcm94aW1vKCkge1xyXG4gICAgdGhpcy5hbHRlcm5hclZpc2liaWxpZGFkZSgpO1xyXG5cclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5wYWdpbmFBdHVhbCA9PSB0aGlzLnBhZ2luYXNBanVkYS5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgdGhpcy5maW5pc2goKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnBhZ2luYUF0dWFsKys7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5hbHRlcm5hclZpc2liaWxpZGFkZSgpO1xyXG4gICAgfSwgMzAwKTtcclxuICB9XHJcblxyXG4gIGFudGVyaW9yKCkge1xyXG4gICAgdGhpcy5hbHRlcm5hclZpc2liaWxpZGFkZSgpO1xyXG5cclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLnBhZ2luYUF0dWFsLS07XHJcbiAgICAgIHRoaXMuYWx0ZXJuYXJWaXNpYmlsaWRhZGUoKTtcclxuICAgIH0sIDMwMCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFsdGVybmFyVmlzaWJpbGlkYWRlKCkge1xyXG4gICAgdGhpcy5mYWRlID0gdGhpcy5mYWRlID09ICdzaG93bicgPyAnaGlkZGVuJyA6ICdzaG93bic7XHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7TmdiTW9kYWx9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHtIdHRwQ2xpZW50fSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7UGFyYW1ldHJvUmVzdWx0LCBQYXJhbWV0cm9SZXN1bHRMaXN0ZW5lcn0gZnJvbSAnLi9wYXJhbWV0cm8ucmVzdWx0JztcclxuaW1wb3J0IHtQYXJhbWV0cm99IGZyb20gJy4uLy4uL21vZGVsL3BhcmFtZXRyby5tb2RlbCc7XHJcbmltcG9ydCB7UGFyYW1ldHJvc1NlcnZpY2V9IGZyb20gJy4vcGFyYW1ldHJvcy5zZXJ2aWNlJztcclxuaW1wb3J0IHtQYXJhbWV0cm9zQ29tcG9uZW50fSBmcm9tICcuL3BhcmFtZXRyb3MuY29tcG9uZW50JztcclxuaW1wb3J0IHtDYW1wb3NQcmVlbmNoaW1lbnRvfSBmcm9tICcuLi8uLi9tb2RlbC9jYW1wb3MtcHJlZW5jaGltZW50by5tb2RlbCc7XHJcbmltcG9ydCB7Q29udHJpYnVpbnRlfSBmcm9tICcuLi8uLi9tb2RlbC9jb250cmlidWludGUubW9kZWwnO1xyXG5pbXBvcnQge1V0aWxGdW5jdGlvbnN9IGZyb20gJy4uLy4uL3V0aWwvdXRpbC1mdW5jdGlvbnMnO1xyXG5pbXBvcnQge0FqdWRhQ29tcG9uZW50fSBmcm9tICcuLi9hanVkYS9hanVkYS5jb21wb25lbnQnO1xyXG5pbXBvcnQge1BhZ2luYUFqdWRhfSBmcm9tICcuLi8uLi9tb2RlbC9wYWdpbmFBanVkYS5tb2RlbCc7XHJcbmltcG9ydCB7Sm95cmlkZVNlcnZpY2V9IGZyb20gJ25neC1qb3lyaWRlJztcclxuXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXHJcbmV4cG9ydCBjbGFzcyBHbG9iYWxTZXJ2aWNlIGltcGxlbWVudHMgUGFyYW1ldHJvUmVzdWx0TGlzdGVuZXIge1xyXG5cclxuICAgIHByaXZhdGUgcmVzb3VyY2VVcmxHZXJhbDogc3RyaW5nID0gJy4vYXBpL3B1YmxpYy9nZXJhbCcgO1xyXG5cclxuICAgIHB1YmxpYyBwYXJhbWV0cm9zOiB7IFtrZXk6IHN0cmluZ106IFBhcmFtZXRybyB9O1xyXG4gICAgcHJpdmF0ZSB1c3VhcmlvTG9nYWRvOiBDb250cmlidWludGU7XHJcbiAgICBwcml2YXRlIGNhbXBvc1ByZWVuY2hpbWVudG86IENhbXBvc1ByZWVuY2hpbWVudG87XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE5nYk1vZGFsLFxyXG4gICAgICAgIHByaXZhdGUgcGFyYW1ldHJvU2VydmljZTogUGFyYW1ldHJvc1NlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxyXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgam95cmlkZVNlcnZpY2U6IEpveXJpZGVTZXJ2aWNlKSB7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGluaXQoKTogUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wYXJhbWV0cm9TZXJ2aWNlLmdldFBhcmFtZXRyb3NDaGF2ZVZhbG9yKCcqJykudGhlbih2YWx1ZSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucGFyYW1ldHJvcyA9IHZhbHVlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBwYXJhbWV0cml6YXIoKSB7XHJcbiAgICAgICAgY29uc3QgY29udGVudENvbXBvbmVudEluc3RhbmNlOiBQYXJhbWV0cm9zQ29tcG9uZW50ID0gdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihQYXJhbWV0cm9zQ29tcG9uZW50LCB7XHJcbiAgICAgICAgICAgIHNpemU6ICdsZycsXHJcbiAgICAgICAgICAgIGJhY2tkcm9wOiAnc3RhdGljJ1xyXG4gICAgICAgIH0pLmNvbXBvbmVudEluc3RhbmNlO1xyXG4gICAgICAgIGNvbnRlbnRDb21wb25lbnRJbnN0YW5jZS5zZXRMaXN0ZW5lcih0aGlzKTtcclxuICAgICAgICBjb250ZW50Q29tcG9uZW50SW5zdGFuY2UuaW5pdCgnUGFyw4PCom1ldHJvcyBHbG9iYWlzJywgJyonKTtcclxuICAgIH1cclxuXHJcbiAgICByZXRvcm5vKHJlc3VsdDogUGFyYW1ldHJvUmVzdWx0KSB7XHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNvbnN1bHRhckNlcChjZXA6IHN0cmluZyk6IFByb21pc2U8YW55PiB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMucmVzb3VyY2VVcmxHZXJhbCArICcvdmlhY2VwLycgKyBjZXAsIHsgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyB9KS50b1Byb21pc2UoKTtcclxuICAgIH1cclxuXHJcbiAgcHJpdmF0ZSBjb25zdWx0YXJDYW1wb3NQcmVlbmNoaW1lbnRvKCk6IFByb21pc2U8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldCh0aGlzLnJlc291cmNlVXJsR2VyYWwgKyAnL2NhbXBvcy1wcmVlbmNoaW1lbnRvJywgeyBvYnNlcnZlOiAncmVzcG9uc2UnIH0pLnRvUHJvbWlzZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjb25zdWx0YXJVc3VhcmlvTG9nYWRvKCk6IFByb21pc2U8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldCh0aGlzLnJlc291cmNlVXJsR2VyYWwgKyAnL3VzdWFyaW8tbG9nYWRvJywgeyBvYnNlcnZlOiAncmVzcG9uc2UnIH0pLnRvUHJvbWlzZSgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldENhbXBvc1ByZWVuY2hpbWVudG8oKTogUHJvbWlzZTxDYW1wb3NQcmVlbmNoaW1lbnRvPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICBpZiAoIVV0aWxGdW5jdGlvbnMuaXNWYWxpZE9iamVjdCh0aGlzLmNhbXBvc1ByZWVuY2hpbWVudG8pKSB7XHJcbiAgICAgICAgdGhpcy5jYW1wb3NQcmVlbmNoaW1lbnRvID0gbmV3IENhbXBvc1ByZWVuY2hpbWVudG8oKTtcclxuICAgICAgICB0aGlzLmNvbnN1bHRhckNhbXBvc1ByZWVuY2hpbWVudG8oKVxyXG4gICAgICAgICAgLnRoZW4odmFsdWUgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmNhbXBvc1ByZWVuY2hpbWVudG8gPSB2YWx1ZS5ib2R5O1xyXG4gICAgICAgICAgICByZXNvbHZlKHRoaXMuY2FtcG9zUHJlZW5jaGltZW50byk7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgLmNhdGNoKHZhbHVlID0+IHtcclxuICAgICAgICAgICAgcmVqZWN0KHZhbHVlKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJlc29sdmUodGhpcy5jYW1wb3NQcmVlbmNoaW1lbnRvKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0VXN1YXJpb0xvZ2FkbygpOiBQcm9taXNlPENvbnRyaWJ1aW50ZT4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgaWYgKCFVdGlsRnVuY3Rpb25zLmlzVmFsaWRPYmplY3QodGhpcy51c3VhcmlvTG9nYWRvKSkge1xyXG4gICAgICAgIHRoaXMudXN1YXJpb0xvZ2FkbyA9IG5ldyBDb250cmlidWludGUoKTtcclxuICAgICAgICB0aGlzLmNvbnN1bHRhclVzdWFyaW9Mb2dhZG8oKVxyXG4gICAgICAgICAgLnRoZW4odmFsdWUgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSB2YWx1ZS5ib2R5O1xyXG5cclxuICAgICAgICAgICAgaWYgKHJlc3VsdC5zdWNlc3NvKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy51c3VhcmlvTG9nYWRvID0gcmVzdWx0LmNvbnRyaWJ1aW50ZTtcclxuICAgICAgICAgICAgICByZXNvbHZlKHRoaXMudXN1YXJpb0xvZ2Fkbyk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgcmVqZWN0KHJlc3VsdC5lcnJvKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIC5jYXRjaCh2YWx1ZSA9PiB7XHJcbiAgICAgICAgICAgIHJlamVjdCh2YWx1ZSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXNvbHZlKHRoaXMudXN1YXJpb0xvZ2Fkbyk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGxvZ291dCgpIHtcclxuICAgICAgdGhpcy51c3VhcmlvTG9nYWRvID0gbnVsbDtcclxuICAgICAgdGhpcy5jYW1wb3NQcmVlbmNoaW1lbnRvID0gbnVsbDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhYnJpckFqdWRhKHBhZ2luYXNBanVkYTogQXJyYXk8UGFnaW5hQWp1ZGE+KSB7XHJcbiAgICAgIGNvbnN0IG1vZGFsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihBanVkYUNvbXBvbmVudCwge1xyXG4gICAgICAgICAgc2l6ZTogJ2xnJyxcclxuICAgICAgICAgIGJhY2tkcm9wOiAnc3RhdGljJyxcclxuICAgICAgICAgIHdpbmRvd0NsYXNzOiAnYWp1ZGEnXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgY29uc3QgY29udGVudENvbXBvbmVudEluc3RhbmNlOiBBanVkYUNvbXBvbmVudCA9IG1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlO1xyXG4gICAgICBjb250ZW50Q29tcG9uZW50SW5zdGFuY2UuaW5pdCgnQWp1ZGEnLCBwYWdpbmFzQWp1ZGEpO1xyXG5cclxuICAgICAgbW9kYWxSZWYucmVzdWx0LnRoZW4oKCkgPT4ge1xyXG4gICAgICB9LCAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmpveXJpZGVTZXJ2aWNlLnN0YXJ0VG91cih7XHJcbiAgICAgICAgICAgICAgc3RlcHM6IFsnZmlyc3RTdGVwJ10sXHJcbiAgICAgICAgICAgICAgc2hvd0NvdW50ZXI6IGZhbHNlLFxyXG4gICAgICAgICAgICAgIHRoZW1lQ29sb3I6ICcjZmZmJ1xyXG4gICAgICAgICAgfSkuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgbGV0IGJvdGFvRW50ZW5kaSA9IDxIVE1MRWxlbWVudD4gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5qb3lyaWRlLXN0ZXBfX2RvbmUtY29udGFpbmVyIC5qb3lyaWRlLWJ1dHRvblwiKTtcclxuICAgICAgICAgICAgICBib3Rhb0VudGVuZGkuaW5uZXJUZXh0ID0gJ0VudGVuZGknO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICApO1xyXG4gICAgICB9KTtcclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHtDVVNUT01fRUxFTUVOVFNfU0NIRU1BLCBOZ01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7TmdiTW9kdWxlfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcbmltcG9ydCB7Q29tbW9uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQge0ZvbnRBd2Vzb21lTW9kdWxlfSBmcm9tICdAZm9ydGF3ZXNvbWUvYW5ndWxhci1mb250YXdlc29tZSc7XHJcbmltcG9ydCB7bGlicmFyeX0gZnJvbSAnQGZvcnRhd2Vzb21lL2ZvbnRhd2Vzb21lLXN2Zy1jb3JlJztcclxuaW1wb3J0IHtmYVRpbWVzfSBmcm9tICdAZm9ydGF3ZXNvbWUvZnJlZS1zb2xpZC1zdmctaWNvbnMvZmFUaW1lcyc7XHJcbmltcG9ydCB7ZmFCYW59IGZyb20gJ0Bmb3J0YXdlc29tZS9mcmVlLXNvbGlkLXN2Zy1pY29ucy9mYUJhbic7XHJcbmltcG9ydCB7QWp1ZGFDb21wb25lbnR9IGZyb20gJy4vYWp1ZGEuY29tcG9uZW50JztcclxuaW1wb3J0IHtOZzJGaXR0ZXh0TW9kdWxlfSBmcm9tICduZzItZml0dGV4dCc7XHJcbmltcG9ydCB7QnJvd3NlckFuaW1hdGlvbnNNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXIvYW5pbWF0aW9ucyc7XHJcbmxpYnJhcnkuYWRkKGZhVGltZXMpO1xyXG5saWJyYXJ5LmFkZChmYUJhbik7XHJcblxyXG5ATmdNb2R1bGUoe1xyXG4gIGltcG9ydHM6IFtcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIEZvbnRBd2Vzb21lTW9kdWxlLFxyXG4gICAgTmdiTW9kdWxlLmZvclJvb3QoKSxcclxuICAgIE5nMkZpdHRleHRNb2R1bGUsXHJcbiAgICBCcm93c2VyQW5pbWF0aW9uc01vZHVsZVxyXG4gIF0sXHJcbiAgZGVjbGFyYXRpb25zOiBbXHJcbiAgICBBanVkYUNvbXBvbmVudFxyXG4gIF0sXHJcbiAgZW50cnlDb21wb25lbnRzOiBbXHJcbiAgICBBanVkYUNvbXBvbmVudFxyXG4gIF0sXHJcbiAgZXhwb3J0czogW1xyXG4gICAgQWp1ZGFDb21wb25lbnRcclxuICBdLFxyXG4gIHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQWp1ZGFNb2R1bGUge31cclxuIiwiaW1wb3J0IHtDVVNUT01fRUxFTUVOVFNfU0NIRU1BLCBOZ01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7UGFyYW1ldHJvc0NvbXBvbmVudH0gZnJvbSAnLi9wYXJhbWV0cm9zLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7UGFyYW1ldHJvc0VkaXRDb21wb25lbnR9IGZyb20gJy4vcGFyYW1ldHJvcy5lZGl0LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7Q29tbW9uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQge0Zvcm1zTW9kdWxlfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7UGFyYW1ldHJvc1NlcnZpY2V9IGZyb20gJy4vcGFyYW1ldHJvcy5zZXJ2aWNlJztcclxuaW1wb3J0IHtGb250QXdlc29tZU1vZHVsZX0gZnJvbSAnQGZvcnRhd2Vzb21lL2FuZ3VsYXItZm9udGF3ZXNvbWUnO1xyXG5pbXBvcnQge2xpYnJhcnl9IGZyb20gJ0Bmb3J0YXdlc29tZS9mb250YXdlc29tZS1zdmctY29yZSc7XHJcbmltcG9ydCB7ZmFzfSBmcm9tICdAZm9ydGF3ZXNvbWUvZnJlZS1zb2xpZC1zdmctaWNvbnMnO1xyXG5pbXBvcnQge01vZGFsRGlhbG9nTW9kdWxlfSBmcm9tICcuLi9tb2RhbC1kaWFsb2cvbW9kYWwtZGlhbG9nLm1vZHVsZSc7XHJcbmltcG9ydCB7UG9ydGFsQWxlcnRNb2R1bGV9IGZyb20gJy4uLy4uL2FsZXJ0L3BvcnRhbC1hbGVydC5tb2R1bGUnO1xyXG5pbXBvcnQge0dsb2JhbFNlcnZpY2V9IGZyb20gJy4vZ2xvYmFsLnNlcnZpY2UnO1xyXG5pbXBvcnQge01PRFVMT19PUFRJT05TLCBPcHRpb25zUHJvdmlkZXJ9IGZyb20gJy4uLy4uL3V0aWwvb3B0aW9ucy1wcm92aWRlcic7XHJcbmltcG9ydCB7QWp1ZGFNb2R1bGV9IGZyb20gJy4uL2FqdWRhL2FqdWRhLm1vZHVsZSc7XHJcblxyXG5saWJyYXJ5LmFkZChmYXMpO1xyXG5cclxuQE5nTW9kdWxlKHtcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBGb3Jtc01vZHVsZSxcclxuICAgIE1vZGFsRGlhbG9nTW9kdWxlLFxyXG4gICAgRm9udEF3ZXNvbWVNb2R1bGUsXHJcbiAgICBQb3J0YWxBbGVydE1vZHVsZSxcclxuICAgIEFqdWRhTW9kdWxlXHJcbiAgXSxcclxuICBkZWNsYXJhdGlvbnM6IFtcclxuICAgIFBhcmFtZXRyb3NDb21wb25lbnQsXHJcbiAgICBQYXJhbWV0cm9zRWRpdENvbXBvbmVudFxyXG4gIF0sXHJcbiAgZW50cnlDb21wb25lbnRzOiBbXHJcbiAgICBQYXJhbWV0cm9zQ29tcG9uZW50LFxyXG4gICAgUGFyYW1ldHJvc0VkaXRDb21wb25lbnRcclxuICBdLFxyXG4gIGV4cG9ydHM6IFtcclxuICAgIFBhcmFtZXRyb3NDb21wb25lbnQsXHJcbiAgICBQYXJhbWV0cm9zRWRpdENvbXBvbmVudFxyXG4gIF0sXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICBQYXJhbWV0cm9zU2VydmljZSxcclxuICAgIEdsb2JhbFNlcnZpY2UsXHJcbiAgICBPcHRpb25zUHJvdmlkZXJcclxuICBdLFxyXG4gIHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgUGFyYW1ldHJvc01vZHVsZSB7XHJcbiAgc3RhdGljIGZvclJvb3QobW9kdWxvPzogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBuZ01vZHVsZTogUGFyYW1ldHJvc01vZHVsZSxcclxuICAgICAgcHJvdmlkZXJzOiBbXHJcbiAgICAgICAge3Byb3ZpZGU6IE1PRFVMT19PUFRJT05TLCB1c2VWYWx1ZTogbW9kdWxvfVxyXG4gICAgICBdXHJcbiAgICB9O1xyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0h0dHBDbGllbnR9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHtUZXJtb0xncGR9IGZyb20gJy4uLy4uL21vZGVsL3Rlcm1vLWxncGQubW9kZWwnO1xyXG5cclxuY29uc3QgU0VSVkVSX0FQSV9VUkwgPSAnLi8nO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgVGVybW9MZ3BkU2VydmljZSB7XHJcbiAgcHVibGljIHJlc291cmNlVXJsID0gU0VSVkVSX0FQSV9VUkwgKyAnYXBpJztcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50KSB7XHJcbiAgfVxyXG5cclxuICBnZXRUZXJtb0xncGQoKTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PFRlcm1vTGdwZD4odGhpcy5yZXNvdXJjZVVybCArICcvcHVibGljL2xncGQvdGVybW9MZ3BkJywge29ic2VydmU6ICdyZXNwb25zZSd9KTtcclxuICB9XHJcbn1cclxuIiwiZXhwb3J0IGNsYXNzIFRlcm1vTGdwZCB7XHJcbiAgICBwdWJsaWMgaWQ/OiBudW1iZXI7XHJcbiAgICBwdWJsaWMgbm9tZT86IHN0cmluZztcclxuICAgIHB1YmxpYyBkZXNjcmljYW8/OiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgYW5leG8/OiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgb2JzZXJ2YWNhbz86IHN0cmluZztcclxuICAgIHB1YmxpYyBzaXR1YWNhbz86IHN0cmluZztcclxuICAgIHB1YmxpYyBkb2N1bWVudG9faW5jPzogc3RyaW5nO1xyXG4gICAgcHVibGljIGRhdGFfaW5jPzogRGF0ZTtcclxuICAgIHB1YmxpYyB1c3VhcmlvX2lwX2luYz86IHN0cmluZztcclxuICAgIHB1YmxpYyBlcnJvcz86IHtcclxuICAgICAgY29fcmV0b3Jubz86IHN0cmluZ1xyXG4gICAgICBkc19yZXRvcm5vPzogc3RyaW5nXHJcbiAgICAgIGRzX3ZhbG9yPzogc3RyaW5nXHJcbiAgICB9XHJcbiAgICBwdWJsaWMgaGFiaWxpdGFkbz86IGJvb2xlYW47XHJcbiAgICBwdWJsaWMgYWNlaXRvPzogYm9vbGVhbjtcclxufVxyXG4iLCJpbXBvcnQge0NvbXBvbmVudCwgZm9yd2FyZFJlZiwgSW5wdXQsIE9uSW5pdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7VGVybW9MZ3BkU2VydmljZX0gZnJvbSAnLi90ZXJtby1sZ3BkLnNlcnZpY2UnO1xyXG5pbXBvcnQge1V0aWxNZW5zYWdlbX0gZnJvbSAnLi4vLi4vYWxlcnQvdXRpbC1tZW5zYWdlbSc7XHJcbmltcG9ydCB7Q29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7UGFyYW1ldHJvc1NlcnZpY2V9IGZyb20gJy4uL3BhcmFtZXRyb3MvcGFyYW1ldHJvcy5zZXJ2aWNlJztcclxuaW1wb3J0IHtUZXJtb0xncGR9IGZyb20gJy4uLy4uL21vZGVsL3Rlcm1vLWxncGQubW9kZWwnO1xyXG5cclxuZXhwb3J0IGNvbnN0IENVU1RPTV9JTlBVVF9DT05UUk9MX1ZBTFVFX0FDQ0VTU09SOiBhbnkgPSB7XHJcbiAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gVGVybW9MZ3BkQ29tcG9uZW50KSxcclxuICBtdWx0aTogdHJ1ZVxyXG59O1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdqaGktdGVybW8tbGdwZCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3Rlcm1vLWxncGQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHByb3ZpZGVyczogW0NVU1RPTV9JTlBVVF9DT05UUk9MX1ZBTFVFX0FDQ0VTU09SXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgVGVybW9MZ3BkQ29tcG9uZW50ICBpbXBsZW1lbnRzIE9uSW5pdCwgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xyXG4gIHRlcm1vTGdwZD86IFRlcm1vTGdwZDtcclxuXHJcbiAgQElucHV0KCkgZXhpYmlyVGVybW86IGJvb2xlYW47XHJcblxyXG4gIG9uQ2hhbmdlOiBhbnkgPSAoKSA9PiB7XHJcbiAgfTtcclxuICBvblRvdWNoOiBhbnkgPSAoKSA9PiB7XHJcbiAgfTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHRlcm1vTGdwZFNlcnZpY2U6IFRlcm1vTGdwZFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHBhcmFtZXRyb1NlcnZpY2U6IFBhcmFtZXRyb3NTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB1dGlsTWVuc2FnZW06IFV0aWxNZW5zYWdlbVxyXG4gICkge1xyXG4gICAgdGhpcy50ZXJtb0xncGQgPSBuZXcgVGVybW9MZ3BkKCk7XHJcbiAgfVxyXG5cclxuICBzZXQgdmFsdWUodmFsKSB7XHJcbiAgICB0aGlzLnRlcm1vTGdwZCA9IHZhbDtcclxuICAgIHRoaXMub25DaGFuZ2UodmFsKTtcclxuICAgIHRoaXMub25Ub3VjaCh2YWwpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmdldFRlcm1vTGdwZCgpO1xyXG4gIH1cclxuXHJcbiAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KSB7XHJcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpIHtcclxuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpIHtcclxuICAgIHRoaXMub25Ub3VjaCA9IGZuO1xyXG4gIH1cclxuXHJcbiAgb25DaGFuZ2VkKCRldmVudCkge1xyXG4gICAgdGhpcy50ZXJtb0xncGQuYWNlaXRvID0gJGV2ZW50ICYmICRldmVudC50YXJnZXQgJiYgJGV2ZW50LnRhcmdldC5jaGVja2VkO1xyXG4gICAgdGhpcy5vbkNoYW5nZSh0aGlzLnRlcm1vTGdwZCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFRlcm1vTGdwZCgpIHtcclxuICAgIHRoaXMucGFyYW1ldHJvU2VydmljZS5nZXRQYXJhbWV0cm9zQnlOYW1lKCdIQUJJTElUQVJfTEdQRCcpXHJcbiAgICAgIC50aGVuKHJlc3AgPT4ge1xyXG4gICAgICAgIGlmIChyZXNwLnZhbG9yID09PSB0cnVlKSB7XHJcbiAgICAgICAgICB0aGlzLnRlcm1vTGdwZFNlcnZpY2VcclxuICAgICAgICAgICAgLmdldFRlcm1vTGdwZCgpXHJcbiAgICAgICAgICAgIC50b1Byb21pc2UoKVxyXG4gICAgICAgICAgICAudGhlbihyZXNwID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLnRlcm1vTGdwZCA9IHJlc3AuYm9keTtcclxuICAgICAgICAgICAgICB0aGlzLnRlcm1vTGdwZC5oYWJpbGl0YWRvID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLnRlcm1vTGdwZCk7XHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMudGVybW9MZ3BkLmVycm9zKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnV0aWxNZW5zYWdlbS5zaG93TWVuc2FnZW1FcnJvcih0aGlzLnRlcm1vTGdwZC5lcnJvcy5kc19yZXRvcm5vKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMudXRpbE1lbnNhZ2VtLnNob3dFcnJvckRldGFpbGVkKGVycik7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICAgLmNhdGNoKGVyciA9PiB7XHJcbiAgICAgICAgdGhpcy51dGlsTWVuc2FnZW0uc2hvd0Vycm9yRGV0YWlsZWQoZXJyKTtcclxuICAgICAgfSlcclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHtDVVNUT01fRUxFTUVOVFNfU0NIRU1BLCBOZ01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5pbXBvcnQge0ZvbnRBd2Vzb21lTW9kdWxlfSBmcm9tICdAZm9ydGF3ZXNvbWUvYW5ndWxhci1mb250YXdlc29tZSc7XHJcbmltcG9ydCB7TmdKaGlwc3Rlck1vZHVsZX0gZnJvbSAnbmctamhpcHN0ZXInO1xyXG5pbXBvcnQge0Zvcm1zTW9kdWxlfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7Q29tbW9uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQge05nYk1vZHVsZX0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQge1BvcnRhbEFsZXJ0TW9kdWxlfSBmcm9tICcuLi8uLi9hbGVydC9wb3J0YWwtYWxlcnQubW9kdWxlJztcclxuaW1wb3J0IHtUZXJtb0xncGRDb21wb25lbnR9IGZyb20gJy4vdGVybW8tbGdwZC5jb21wb25lbnQnO1xyXG5pbXBvcnQge1Rlcm1vTGdwZFNlcnZpY2V9IGZyb20gJy4vdGVybW8tbGdwZC5zZXJ2aWNlJztcclxuaW1wb3J0IHtQYXJhbWV0cm9zU2VydmljZX0gZnJvbSAnLi4vcGFyYW1ldHJvcy9wYXJhbWV0cm9zLnNlcnZpY2UnO1xyXG5cclxuQE5nTW9kdWxlKHtcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBGb3Jtc01vZHVsZSxcclxuICAgIEZvbnRBd2Vzb21lTW9kdWxlLFxyXG4gICAgTmdKaGlwc3Rlck1vZHVsZSxcclxuICAgIFBvcnRhbEFsZXJ0TW9kdWxlLFxyXG4gICAgTmdiTW9kdWxlLmZvclJvb3QoKVxyXG4gIF0sXHJcbiAgZGVjbGFyYXRpb25zOiBbXHJcbiAgICBUZXJtb0xncGRDb21wb25lbnRcclxuICBdLFxyXG4gIGV4cG9ydHM6IFtcclxuICAgIFRlcm1vTGdwZENvbXBvbmVudFxyXG4gIF0sXHJcbiAgZW50cnlDb21wb25lbnRzOiBbXHJcbiAgICBUZXJtb0xncGRDb21wb25lbnRcclxuICBdLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAgVGVybW9MZ3BkU2VydmljZSxcclxuICAgIFBhcmFtZXRyb3NTZXJ2aWNlXHJcbiAgXSxcclxuICBzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV1cclxufSlcclxuZXhwb3J0IGNsYXNzIFRlcm1vTGdwZE1vZHVsZSB7XHJcbn1cclxuIiwiaW1wb3J0IHtDb21wb25lbnQsIE9uSW5pdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7YW5pbWF0ZSwgc3RhdGUsIHN0eWxlLCB0cmFuc2l0aW9uLCB0cmlnZ2VyfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcclxuaW1wb3J0IHtQYXJhbWV0cm9zU2VydmljZX0gZnJvbSAnLi4vcGFyYW1ldHJvcy9wYXJhbWV0cm9zLnNlcnZpY2UnO1xyXG5pbXBvcnQge1Rlcm1vTGdwZFNlcnZpY2V9IGZyb20gJy4uL3Rlcm1vLWxncGQvdGVybW8tbGdwZC5zZXJ2aWNlJztcclxuaW1wb3J0IHtUZXJtb0xncGR9IGZyb20gJy4uLy4uL21vZGVsL3Rlcm1vLWxncGQubW9kZWwnO1xyXG5pbXBvcnQge1V0aWxGdW5jdGlvbnN9IGZyb20gJy4uLy4uL3V0aWwnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdqaGktY29va2llLWNvbnNlbnQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9jb29raWUtY29uc2VudC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJ2Nvb2tpZS1jb25zZW50LnNjc3MnXSxcclxuICBhbmltYXRpb25zOiBbXHJcbiAgICB0cmlnZ2VyKCdzaW1wbGVGYWRlQW5pbWF0aW9uJywgW1xyXG4gICAgICBzdGF0ZSgnaW4nLCBzdHlsZSh7b3BhY2l0eTogMX0pKSxcclxuICAgICAgdHJhbnNpdGlvbignOmVudGVyJywgW1xyXG4gICAgICAgIHN0eWxlKHtvcGFjaXR5OiAwfSksXHJcbiAgICAgICAgYW5pbWF0ZSg0MDApXHJcbiAgICAgIF0pLFxyXG4gICAgICB0cmFuc2l0aW9uKCc6bGVhdmUnLFxyXG4gICAgICAgIGFuaW1hdGUoNDAwLCBzdHlsZSh7b3BhY2l0eTogMH0pKSlcclxuICAgIF0pXHJcbiAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29va2llQ29uc2VudENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgdGVybW9MZ3BkPzogVGVybW9MZ3BkO1xyXG4gIGVycm9ycz86IHN0cmluZztcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHBhcmFtZXRyb1NlcnZpY2U6IFBhcmFtZXRyb3NTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB0ZXJtb0xncGRTZXJ2aWNlOiBUZXJtb0xncGRTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICB0aGlzLnRlcm1vTGdwZCA9IG5ldyBUZXJtb0xncGQoKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgaWYgKCFsb2NhbFN0b3JhZ2UuaGFzT3duUHJvcGVydHkoJ2Nvb2tpZVNlZW4nKSkge1xyXG4gICAgICB0aGlzLmdldFRlcm1vTGdwZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZmVjaGFyKCkge1xyXG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2Nvb2tpZVNlZW4nLCAndHJ1ZScpO1xyXG4gICAgdGhpcy50ZXJtb0xncGQgPSBudWxsO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRUZXJtb0xncGQoKSB7XHJcbiAgICB0aGlzLnBhcmFtZXRyb1NlcnZpY2UuZ2V0UGFyYW1ldHJvc0J5TmFtZSgnSEFCSUxJVEFSX0xHUEQnKVxyXG4gICAgICAudGhlbihyZXNwID0+IHtcclxuICAgICAgICBpZiAocmVzcC52YWxvciA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgdGhpcy50ZXJtb0xncGRTZXJ2aWNlXHJcbiAgICAgICAgICAgIC5nZXRUZXJtb0xncGQoKVxyXG4gICAgICAgICAgICAudG9Qcm9taXNlKClcclxuICAgICAgICAgICAgLnRoZW4ocmVzcCA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy50ZXJtb0xncGQgPSByZXNwLmJvZHk7XHJcbiAgICAgICAgICAgICAgaWYodGhpcy50ZXJtb0xncGQuZXJyb3MpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZXJyb3JzID0gdGhpcy50ZXJtb0xncGQuZXJyb3MuZHNfcmV0b3JubztcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICBpZiAodGhpcy50ZXJtb0xncGQuaWQpIHtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpLCAxMDAwKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuZXJyb3JzID0gVXRpbEZ1bmN0aW9ucy5nZXRIdHRwRXJyb3JNZXNzYWdlKGVycik7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCB7UGFyYW1ldHJvc1NlcnZpY2V9IGZyb20gJy4uL3BhcmFtZXRyb3MvcGFyYW1ldHJvcy5zZXJ2aWNlJztcclxuaW1wb3J0IHtDVVNUT01fRUxFTUVOVFNfU0NIRU1BLCBOZ01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7VGVybW9MZ3BkU2VydmljZX0gZnJvbSAnLi4vdGVybW8tbGdwZC90ZXJtby1sZ3BkLnNlcnZpY2UnO1xyXG5pbXBvcnQge05nYk1vZHVsZX0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQge0Nvb2tpZUNvbnNlbnRDb21wb25lbnR9IGZyb20gJy4vY29va2llLWNvbnNlbnQuY29tcG9uZW50JztcclxuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7TmdKaGlwc3Rlck1vZHVsZX0gZnJvbSAnbmctamhpcHN0ZXInO1xyXG5cclxuQE5nTW9kdWxlKHtcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBOZ0poaXBzdGVyTW9kdWxlLFxyXG4gICAgTmdiTW9kdWxlLmZvclJvb3QoKSxcclxuICBdLFxyXG4gIGRlY2xhcmF0aW9uczogW1xyXG4gICAgQ29va2llQ29uc2VudENvbXBvbmVudFxyXG4gIF0sXHJcbiAgZXhwb3J0czogW1xyXG4gICAgQ29va2llQ29uc2VudENvbXBvbmVudFxyXG4gIF0sXHJcbiAgZW50cnlDb21wb25lbnRzOiBbXHJcbiAgICBDb29raWVDb25zZW50Q29tcG9uZW50XHJcbiAgXSxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIFRlcm1vTGdwZFNlcnZpY2UsXHJcbiAgICBQYXJhbWV0cm9zU2VydmljZVxyXG4gIF0sXHJcbiAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDb29raWVDb25zZW50TW9kdWxlIHtcclxufVxyXG4iLCJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0h0dHBDbGllbnQsIEh0dHBSZXNwb25zZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge0FjY291bnR9IGZyb20gJy4uL21vZGVsL2FjY291bnQubW9kZWwnO1xyXG5cclxuY29uc3QgU0VSVkVSX0FQSV9VUkwgPSAnLi8nO1xyXG5cclxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcclxuZXhwb3J0IGNsYXNzIEFjY291bnRTZXJ2aWNlIHtcclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCkge31cclxuXHJcbiAgICBnZXQoKTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8QWNjb3VudD4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxBY2NvdW50PihTRVJWRVJfQVBJX1VSTCArICdhcGkvYWNjb3VudCcsIHsgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzYXZlKGFjY291bnQ6IGFueSk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPGFueT4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoU0VSVkVSX0FQSV9VUkwgKyAnYXBpL2FjY291bnQnLCBhY2NvdW50LCB7IG9ic2VydmU6ICdyZXNwb25zZScgfSk7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7SmhpTGFuZ3VhZ2VTZXJ2aWNlfSBmcm9tICduZy1qaGlwc3Rlcic7XG5pbXBvcnQge1Nlc3Npb25TdG9yYWdlU2VydmljZX0gZnJvbSAnbmd4LXdlYnN0b3JhZ2UnO1xuaW1wb3J0IHtPYnNlcnZhYmxlLCBTdWJqZWN0fSBmcm9tICdyeGpzJztcbmltcG9ydCB7QWNjb3VudFNlcnZpY2V9IGZyb20gJy4vYWNjb3VudC5zZXJ2aWNlJztcbmltcG9ydCB7Um91dGVyfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXHJcbmV4cG9ydCBjbGFzcyBQcmluY2lwYWwge1xyXG4gICAgcHJpdmF0ZSB1c2VySWRlbnRpdHk6IGFueTtcbiAgICBwcml2YXRlIGF1dGhlbnRpY2F0ZWQgPSBmYWxzZTtcbiAgICBwcml2YXRlIGF1dGhlbnRpY2F0aW9uU3RhdGUgPSBuZXcgU3ViamVjdDxhbnk+KCk7XG4gICAgcHJpdmF0ZSByZWFkb25seSByb3RhQXR1YWxpemFjYW9DYWRhc3RyYWwgPSAnL3NldHRpbmdzJztcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBsYW5ndWFnZVNlcnZpY2U6IEpoaUxhbmd1YWdlU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBzZXNzaW9uU3RvcmFnZTogU2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGFjY291bnQ6IEFjY291bnRTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyXG4gICAgKSB7fVxuXHJcbiAgICBhdXRoZW50aWNhdGUoaWRlbnRpdHkpIHtcclxuICAgICAgICB0aGlzLnVzZXJJZGVudGl0eSA9IGlkZW50aXR5O1xyXG4gICAgICAgIHRoaXMuYXV0aGVudGljYXRlZCA9IGlkZW50aXR5ICE9PSBudWxsO1xyXG4gICAgICAgIHRoaXMuYXV0aGVudGljYXRpb25TdGF0ZS5uZXh0KHRoaXMudXNlcklkZW50aXR5KTtcclxuICAgIH1cclxuXHJcbiAgICBoYXNBbnlBdXRob3JpdHkoYXV0aG9yaXRpZXM6IHN0cmluZ1tdKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLmhhc0FueUF1dGhvcml0eURpcmVjdChhdXRob3JpdGllcykpO1xyXG4gICAgfVxyXG5cclxuICAgIGhhc0FueUF1dGhvcml0eURpcmVjdChhdXRob3JpdGllczogc3RyaW5nW10pOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoIXRoaXMuYXV0aGVudGljYXRlZCB8fCAhdGhpcy51c2VySWRlbnRpdHkgfHwgIXRoaXMudXNlcklkZW50aXR5LmF1dGhvcml0aWVzKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXV0aG9yaXRpZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMudXNlcklkZW50aXR5LmF1dGhvcml0aWVzLmluY2x1ZGVzKGF1dGhvcml0aWVzW2ldKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBoYXNBdXRob3JpdHkoYXV0aG9yaXR5OiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgICAgICBpZiAoIXRoaXMuYXV0aGVudGljYXRlZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLmlkZW50aXR5KCkudGhlbihcclxuICAgICAgICAgICAgaWQgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShpZC5hdXRob3JpdGllcyAmJiBpZC5hdXRob3JpdGllcy5pbmNsdWRlcyhhdXRob3JpdHkpKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGlkZW50aXR5KGZvcmNlPzogYm9vbGVhbik6IFByb21pc2U8YW55PiB7XHJcbiAgICAgICAgaWYgKGZvcmNlID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMudXNlcklkZW50aXR5ID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gY2hlY2sgYW5kIHNlZSBpZiB3ZSBoYXZlIHJldHJpZXZlZCB0aGUgdXNlcklkZW50aXR5IGRhdGEgZnJvbSB0aGUgc2VydmVyLlxyXG4gICAgICAgIC8vIGlmIHdlIGhhdmUsIHJldXNlIGl0IGJ5IGltbWVkaWF0ZWx5IHJlc29sdmluZ1xyXG4gICAgICAgIGlmICh0aGlzLnVzZXJJZGVudGl0eSkge1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMudXNlcklkZW50aXR5KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHJldHJpZXZlIHRoZSB1c2VySWRlbnRpdHkgZGF0YSBmcm9tIHRoZSBzZXJ2ZXIsIHVwZGF0ZSB0aGUgaWRlbnRpdHkgb2JqZWN0LCBhbmQgdGhlbiByZXNvbHZlLlxyXG4gICAgICAgIHJldHVybiB0aGlzLmFjY291bnRcclxuICAgICAgICAgICAgLmdldCgpXHJcbiAgICAgICAgICAgIC50b1Byb21pc2UoKVxyXG4gICAgICAgICAgICAudGhlbihyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBhY2NvdW50ID0gcmVzcG9uc2UuYm9keTtcclxuICAgICAgICAgICAgICAgIGlmIChhY2NvdW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51c2VySWRlbnRpdHkgPSBhY2NvdW50O1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXV0aGVudGljYXRlZCA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIEFmdGVyIHJldHJpZXZlIHRoZSBhY2NvdW50IGluZm8sIHRoZSBsYW5ndWFnZSB3aWxsIGJlIGNoYW5nZWQgdG9cclxuICAgICAgICAgICAgICAgICAgICAvLyB0aGUgdXNlcidzIHByZWZlcnJlZCBsYW5ndWFnZSBjb25maWd1cmVkIGluIHRoZSBhY2NvdW50IHNldHRpbmdcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBsYW5nS2V5ID0gdGhpcy5zZXNzaW9uU3RvcmFnZS5yZXRyaWV2ZSgnbG9jYWxlJykgfHwgdGhpcy51c2VySWRlbnRpdHkubGFuZ0tleTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxhbmd1YWdlU2VydmljZS5jaGFuZ2VMYW5ndWFnZShsYW5nS2V5KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51c2VySWRlbnRpdHkgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXV0aGVudGljYXRlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuYXV0aGVudGljYXRpb25TdGF0ZS5uZXh0KHRoaXMudXNlcklkZW50aXR5KTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlZGlyZWNpb25hclBhcmFBdHVhbGl6YWNhb0NhZGFzdHJhbFNlTmVjZXNzYXJpbygpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnVzZXJJZGVudGl0eTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMudXNlcklkZW50aXR5ID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIHRoaXMuYXV0aGVudGljYXRlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hdXRoZW50aWNhdGlvblN0YXRlLm5leHQodGhpcy51c2VySWRlbnRpdHkpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlzQXV0aGVudGljYXRlZCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5hdXRoZW50aWNhdGVkO1xyXG4gICAgfVxyXG5cclxuICAgIGlzSWRlbnRpdHlSZXNvbHZlZCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy51c2VySWRlbnRpdHkgIT09IHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRBdXRoZW50aWNhdGlvblN0YXRlKCk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYXV0aGVudGljYXRpb25TdGF0ZS5hc09ic2VydmFibGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRJbWFnZVVybCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmlzSWRlbnRpdHlSZXNvbHZlZCgpID8gdGhpcy51c2VySWRlbnRpdHkuaW1hZ2VVcmwgOiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFVzZXJJZGVudGl0eSgpOiBhbnkge1xuICAgICAgICByZXR1cm4gdGhpcy51c2VySWRlbnRpdHk7XG4gICAgfVxuXG4gICAgcHJlY2lzYUF0dWFsaXphY2FvQ2FkYXN0cmFsKGlkZW50aXR5PzogYW55KTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGNvbnRhID0gaWRlbnRpdHkgfHwgdGhpcy51c2VySWRlbnRpdHk7XG4gICAgICAgIHJldHVybiAhIShjb250YSAmJiBjb250YS5hdHVhbGl6YWNhb0NhZGFzdHJhbE9icmlnYXRvcmlhKTtcbiAgICB9XG5cbiAgICBnZXRSb3RhQXR1YWxpemFjYW9DYWRhc3RyYWwoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucm90YUF0dWFsaXphY2FvQ2FkYXN0cmFsO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVkaXJlY2lvbmFyUGFyYUF0dWFsaXphY2FvQ2FkYXN0cmFsU2VOZWNlc3NhcmlvKCkge1xuICAgICAgICBpZiAoIXRoaXMucHJlY2lzYUF0dWFsaXphY2FvQ2FkYXN0cmFsKCkgfHwgIXRoaXMucm91dGVyIHx8ICF0aGlzLnJvdXRlci51cmwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnJvdXRlci51cmwgIT09IHRoaXMucm90YUF0dWFsaXphY2FvQ2FkYXN0cmFsKSB7XG4gICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHRoaXMucm90YUF0dWFsaXphY2FvQ2FkYXN0cmFsKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsImltcG9ydCB7Q29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHtOZ2JNb2RhbH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQge0xvY2F0aW9ufSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQge1BhcmFtZXRyb1Jlc3VsdCwgUGFyYW1ldHJvUmVzdWx0TGlzdGVuZXJ9IGZyb20gJy4uL3BhcmFtZXRyb3MvcGFyYW1ldHJvLnJlc3VsdCc7XHJcbmltcG9ydCB7UGFyYW1ldHJvfSBmcm9tICcuLi8uLi9tb2RlbC9wYXJhbWV0cm8ubW9kZWwnO1xyXG5pbXBvcnQge1BhcmFtZXRyb3NTZXJ2aWNlfSBmcm9tICcuLi9wYXJhbWV0cm9zL3BhcmFtZXRyb3Muc2VydmljZSc7XHJcbmltcG9ydCB7VXRpbE1lbnNhZ2VtfSBmcm9tICcuLi8uLi9hbGVydC91dGlsLW1lbnNhZ2VtJztcclxuaW1wb3J0IHtQcmluY2lwYWx9IGZyb20gJy4uLy4uL2F1dGgvcHJpbmNpcGFsLnNlcnZpY2UnO1xyXG5pbXBvcnQge1BhcmFtZXRyb3NDb21wb25lbnR9IGZyb20gJy4uL3BhcmFtZXRyb3MvcGFyYW1ldHJvcy5jb21wb25lbnQnO1xyXG5pbXBvcnQge1V0aWxGdW5jdGlvbnN9IGZyb20gJy4uLy4uL3V0aWwvdXRpbC1mdW5jdGlvbnMnO1xyXG5pbXBvcnQge0RvbVNhbml0aXplcn0gZnJvbSBcIkBhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXJcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnamhpLXBhZ2luYS1wYXJhbWV0cml6YWRhJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcGFnaW5hLXBhcmFtZXRyaXphZGEuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3BhZ2luYS1wYXJhbWV0cml6YWRhLnN0eWxlLmNzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQYWdpbmFQYXJhbWV0cml6YWRhQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBQYXJhbWV0cm9SZXN1bHRMaXN0ZW5lciB7XHJcbiAgcGFyYW1ldHJvczogeyBba2V5OiBzdHJpbmddOiBQYXJhbWV0cm8gfSA9IHt9O1xyXG4gIGlzQnVzeTogYm9vbGVhbjtcclxuICBkZXNhYmlsaXRhZG8gPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KCkgcGFnaW5hID0gJyc7XHJcbiAgQElucHV0KCkgY2xhc3NNYWluQ29udGFpbmVyID0gJyc7XHJcbiAgQElucHV0KCkgY2xhc3NDYXJkQ29udGFpbmVyID0gJyc7XHJcbiAgQElucHV0KCkgaGlkZU1haW5Db250ZW50ID0gZmFsc2U7XHJcbiAgQElucHV0KCkgaGlkZUJhY2tCdXR0b24gPSBmYWxzZTtcclxuICBASW5wdXQoKSBoaWRlUGFnZVRpdGxlID0gZmFsc2U7XHJcbiAgQElucHV0KCkgaGlkZVBhZ2VTdWJUaXRsZSA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHRpdHVsb0RlZmF1bHQgPSAnJztcclxuICBASW5wdXQoKSBzdWJUaXR1bG9EZWZhdWx0ID0gJyc7XHJcbiAgQE91dHB1dCgpIHBhcmFtZXRlcnNDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIHBhcmFtZXRlcnNSZWFkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgcGFyYW1ldHJvc1NlcnZpY2U6IFBhcmFtZXRyb3NTZXJ2aWNlLFxyXG4gICAgcHVibGljIG1vZGFsU2VydmljZTogTmdiTW9kYWwsXHJcbiAgICBwdWJsaWMgdXRpbE1lbnNhZ2VtOiBVdGlsTWVuc2FnZW0sXHJcbiAgICBwdWJsaWMgaGlzdG9yeTogTG9jYXRpb24sXHJcbiAgICBwcml2YXRlIHByaW5jaXBhbDogUHJpbmNpcGFsLFxyXG4gICAgcHVibGljIHNhbml0aXplcjogRG9tU2FuaXRpemVyXHJcbiAgKSB7XHJcblxyXG4gIH1cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuY2FycmVnYXJQYXJhbWV0cm9zKGZhbHNlKTtcclxuICB9XHJcblxyXG4gIHJldG9ybm8ocmVzdWx0OiBQYXJhbWV0cm9SZXN1bHQpOiBhbnkge1xyXG4gICAgdGhpcy5jYXJyZWdhclBhcmFtZXRyb3ModHJ1ZSk7XHJcbiAgfVxyXG5cclxuICBwYXJhbWV0cml6YXIoKSB7XHJcbiAgICBjb25zdCBjb250ZW50Q29tcG9uZW50SW5zdGFuY2U6IFBhcmFtZXRyb3NDb21wb25lbnQgPSB0aGlzLm1vZGFsU2VydmljZS5vcGVuKFBhcmFtZXRyb3NDb21wb25lbnQsIHtcclxuICAgICAgc2l6ZTogJ2xnJyxcclxuICAgICAgYmFja2Ryb3A6ICdzdGF0aWMnXHJcbiAgICB9KS5jb21wb25lbnRJbnN0YW5jZTtcclxuICAgIGNvbnRlbnRDb21wb25lbnRJbnN0YW5jZS5zZXRMaXN0ZW5lcih0aGlzKTtcclxuICAgIGNvbnRlbnRDb21wb25lbnRJbnN0YW5jZS5pbml0KFwiUGFyw4PCom1ldHJvcyBkYSBQw4PCoWdpbmFcIiwgdGhpcy5wYWdpbmEpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjYXJyZWdhclBhcmFtZXRyb3MoY2hhbmdlZDogYm9vbGVhbikge1xyXG4gICAgdGhpcy5pc0J1c3kgPSB0cnVlO1xyXG4gICAgdGhpcy5wYXJhbWV0cm9zU2VydmljZVxyXG4gICAgICAuZ2V0UGFyYW1ldHJvc0NoYXZlVmFsb3IodGhpcy5wYWdpbmEpXHJcbiAgICAgIC50aGVuKHZhbHVlID0+IHtcclxuICAgICAgICB0aGlzLnBhcmFtZXRyb3MgPSB2YWx1ZTtcclxuICAgICAgICB0aGlzLmRlc2FiaWxpdGFkbyA9IFV0aWxGdW5jdGlvbnMuaXNWYWxpZE9iamVjdCh0aGlzLnBhcmFtZXRyb3NbJ0hBQklMSVRBRE8nXSkgPT09IHRydWUgJiYgdGhpcy5wYXJhbWV0cm9zWydIQUJJTElUQURPJ10udmFsb3IgPT09IGZhbHNlIDtcclxuICAgICAgICBpZiAoY2hhbmdlZCA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgIHRoaXMucGFyYW1ldGVyc1JlYWQuZW1pdCh0aGlzLnBhcmFtZXRyb3MpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnBhcmFtZXRlcnNDaGFuZ2VkLmVtaXQodGhpcy5wYXJhbWV0cm9zKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pc0J1c3kgPSBmYWxzZTtcclxuICAgICAgfSlcclxuICAgICAgLmNhdGNoKHZhbHVlID0+IHtcclxuICAgICAgICB0aGlzLmlzQnVzeSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMudXRpbE1lbnNhZ2VtLnNob3dFcnJvcih2YWx1ZSk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0UGFnZVRpdGxlKCkge1xyXG4gICAgaWYgKFV0aWxGdW5jdGlvbnMuaXNWYWxpZE9iamVjdCh0aGlzLnBhcmFtZXRyb3NbJ0RFU0NSSUNBT19USVRVTE9fVEVMQSddKSA9PT0gdHJ1ZSkge1xyXG4gICAgICBpZiAoVXRpbEZ1bmN0aW9ucy5pc1ZhbGlkU3RyaW5nT3JBcnJheSh0aGlzLnBhcmFtZXRyb3NbJ0RFU0NSSUNBT19USVRVTE9fVEVMQSddLnZhbG9yKSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnBhcmFtZXRyb3NbJ0RFU0NSSUNBT19USVRVTE9fVEVMQSddLnZhbG9yO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy50aXR1bG9EZWZhdWx0O1xyXG4gIH1cclxuXHJcbiAgaXNWYWxpZFN1YlRpdGxlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaGlkZVBhZ2VTdWJUaXRsZSA9PT0gZmFsc2UgJiYgVXRpbEZ1bmN0aW9ucy5pc1ZhbGlkT2JqZWN0KHRoaXMucGFyYW1ldHJvc1snREVTQ1JJQ0FPX0NBQkVDQUxIT19URUxBJ10pID09PSB0cnVlICYmXHJcbiAgICAgIFV0aWxGdW5jdGlvbnMuaXNWYWxpZFN0cmluZ09yQXJyYXkodGhpcy5wYXJhbWV0cm9zWydERVNDUklDQU9fQ0FCRUNBTEhPX1RFTEEnXS52YWxvcikgPT09IHRydWUgfHxcclxuICAgICAgVXRpbEZ1bmN0aW9ucy5pc1ZhbGlkU3RyaW5nT3JBcnJheSh0aGlzLnN1YlRpdHVsb0RlZmF1bHQpO1xyXG4gIH1cclxuXHJcbiAgZ2V0UGFnZVN1YlRpdGxlKCkge1xyXG4gICAgaWYgKFV0aWxGdW5jdGlvbnMuaXNWYWxpZE9iamVjdCh0aGlzLnBhcmFtZXRyb3NbJ0RFU0NSSUNBT19DQUJFQ0FMSE9fVEVMQSddKSA9PT0gdHJ1ZSkge1xyXG4gICAgICBpZiAoVXRpbEZ1bmN0aW9ucy5pc1ZhbGlkU3RyaW5nT3JBcnJheSh0aGlzLnBhcmFtZXRyb3NbJ0RFU0NSSUNBT19DQUJFQ0FMSE9fVEVMQSddLnZhbG9yKSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnBhcmFtZXRyb3NbJ0RFU0NSSUNBT19DQUJFQ0FMSE9fVEVMQSddLnZhbG9yO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5zdWJUaXR1bG9EZWZhdWx0O1xyXG4gIH1cclxuXHJcbiAgZ2V0UGFnZURlc2NyaXB0aW9uKCkge1xyXG4gICAgaWYgKFV0aWxGdW5jdGlvbnMuaXNWYWxpZE9iamVjdCh0aGlzLnBhcmFtZXRyb3NbJ01FTlNBR0VNX0hUTUxfREVTQ1JJQ0FPJ10pID09PSB0cnVlKSB7XHJcbiAgICAgIGlmIChVdGlsRnVuY3Rpb25zLmlzVmFsaWRTdHJpbmdPckFycmF5KHRoaXMucGFyYW1ldHJvc1snTUVOU0FHRU1fSFRNTF9ERVNDUklDQU8nXS52YWxvcikgPT09IHRydWUpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wYXJhbWV0cm9zWydNRU5TQUdFTV9IVE1MX0RFU0NSSUNBTyddLnZhbG9yO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIGdldFBhZ2VJbmZvcm1hdGlvbigpIHtcclxuICAgIGlmIChVdGlsRnVuY3Rpb25zLmlzVmFsaWRPYmplY3QodGhpcy5wYXJhbWV0cm9zWydNRU5TQUdFTV9IVE1MX0lORk9STUFDQU8nXSkgPT09IHRydWUpIHtcclxuICAgICAgaWYgKFV0aWxGdW5jdGlvbnMuaXNWYWxpZFN0cmluZ09yQXJyYXkodGhpcy5wYXJhbWV0cm9zWydNRU5TQUdFTV9IVE1MX0lORk9STUFDQU8nXS52YWxvcikgPT09IHRydWUpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wYXJhbWV0cm9zWydNRU5TQUdFTV9IVE1MX0lORk9STUFDQU8nXS52YWxvcjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBoaWRlVG9vbEJhcigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmhpZGVQYWdlVGl0bGUgPT09IHRydWUgJiYgdGhpcy5oaWRlQmFja0J1dHRvbiAmJiB0aGlzLnByaW5jaXBhbC5oYXNBbnlBdXRob3JpdHlEaXJlY3QoW1wiUk9MRV9BRE1JTlwiXSkgPT09IGZhbHNlO1xyXG4gIH1cclxuXHJcbn1cclxuIiwiaW1wb3J0IHtEaXJlY3RpdmUsIElucHV0LCBUZW1wbGF0ZVJlZiwgVmlld0NvbnRhaW5lclJlZn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7UHJpbmNpcGFsfSBmcm9tICcuL3ByaW5jaXBhbC5zZXJ2aWNlJztcclxuXHJcbi8qKlxyXG4gKiBAd2hhdEl0RG9lcyBDb25kaXRpb25hbGx5IGluY2x1ZGVzIGFuIEhUTUwgZWxlbWVudCBpZiBjdXJyZW50IHVzZXIgaGFzIGFueVxyXG4gKiBvZiB0aGUgYXV0aG9yaXRpZXMgcGFzc2VkIGFzIHRoZSBgZXhwcmVzc2lvbmAuXHJcbiAqXHJcbiAqIEBob3dUb1VzZVxyXG4gKiBgYGBcclxuICogICAgIDxzb21lLWVsZW1lbnQgKmpoaUhhc0FueUF1dGhvcml0eT1cIidST0xFX0FETUlOJ1wiPi4uLjwvc29tZS1lbGVtZW50PlxyXG4gKlxyXG4gKiAgICAgPHNvbWUtZWxlbWVudCAqamhpSGFzQW55QXV0aG9yaXR5PVwiWydST0xFX0FETUlOJywgJ1JPTEVfUE9SVEFMJ11cIj4uLi48L3NvbWUtZWxlbWVudD5cclxuICogYGBgXHJcbiAqL1xyXG5ARGlyZWN0aXZlKHtcclxuICAgIHNlbGVjdG9yOiAnW2poaUhhc0FueUF1dGhvcml0eV0nXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBIYXNBbnlBdXRob3JpdHlEaXJlY3RpdmUge1xyXG4gICAgcHJpdmF0ZSBhdXRob3JpdGllczogc3RyaW5nW107XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBwcmluY2lwYWw6IFByaW5jaXBhbCwgcHJpdmF0ZSB0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PiwgcHJpdmF0ZSB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmKSB7fVxyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBzZXQgamhpSGFzQW55QXV0aG9yaXR5KHZhbHVlOiBzdHJpbmcgfCBzdHJpbmdbXSkge1xyXG4gICAgICAgIHRoaXMuYXV0aG9yaXRpZXMgPSB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gW3ZhbHVlXSA6IHZhbHVlO1xyXG4gICAgICAgIHRoaXMudXBkYXRlVmlldygpO1xyXG4gICAgICAgIC8vIEdldCBub3RpZmllZCBlYWNoIHRpbWUgYXV0aGVudGljYXRpb24gc3RhdGUgY2hhbmdlcy5cclxuICAgICAgICB0aGlzLnByaW5jaXBhbC5nZXRBdXRoZW50aWNhdGlvblN0YXRlKCkuc3Vic2NyaWJlKGlkZW50aXR5ID0+IHRoaXMudXBkYXRlVmlldygpKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHVwZGF0ZVZpZXcoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5wcmluY2lwYWwuaGFzQW55QXV0aG9yaXR5KHRoaXMuYXV0aG9yaXRpZXMpLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgdGhpcy52aWV3Q29udGFpbmVyUmVmLmNsZWFyKCk7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudmlld0NvbnRhaW5lclJlZi5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy50ZW1wbGF0ZVJlZik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFNlc3Npb25TdG9yYWdlU2VydmljZSB9IGZyb20gJ25neC13ZWJzdG9yYWdlJztcclxuXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXHJcbmV4cG9ydCBjbGFzcyBTdGF0ZVN0b3JhZ2VTZXJ2aWNlIHtcclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgJHNlc3Npb25TdG9yYWdlOiBTZXNzaW9uU3RvcmFnZVNlcnZpY2UpIHt9XHJcblxyXG4gICAgZ2V0UHJldmlvdXNTdGF0ZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy4kc2Vzc2lvblN0b3JhZ2UucmV0cmlldmUoJ3ByZXZpb3VzU3RhdGUnKTtcclxuICAgIH1cclxuXHJcbiAgICByZXNldFByZXZpb3VzU3RhdGUoKSB7XHJcbiAgICAgICAgdGhpcy4kc2Vzc2lvblN0b3JhZ2UuY2xlYXIoJ3ByZXZpb3VzU3RhdGUnKTtcclxuICAgIH1cclxuXHJcbiAgICBzdG9yZVByZXZpb3VzU3RhdGUocHJldmlvdXNTdGF0ZU5hbWUsIHByZXZpb3VzU3RhdGVQYXJhbXMpIHtcclxuICAgICAgICBjb25zdCBwcmV2aW91c1N0YXRlID0geyBuYW1lOiBwcmV2aW91c1N0YXRlTmFtZSwgcGFyYW1zOiBwcmV2aW91c1N0YXRlUGFyYW1zIH07XHJcbiAgICAgICAgdGhpcy4kc2Vzc2lvblN0b3JhZ2Uuc3RvcmUoJ3ByZXZpb3VzU3RhdGUnLCBwcmV2aW91c1N0YXRlKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXREZXN0aW5hdGlvblN0YXRlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRzZXNzaW9uU3RvcmFnZS5yZXRyaWV2ZSgnZGVzdGluYXRpb25TdGF0ZScpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0b3JlVXJsKHVybDogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy4kc2Vzc2lvblN0b3JhZ2Uuc3RvcmUoJ3ByZXZpb3VzVXJsJywgdXJsKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRVcmwoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuJHNlc3Npb25TdG9yYWdlLnJldHJpZXZlKCdwcmV2aW91c1VybCcpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0b3JlRGVzdGluYXRpb25TdGF0ZShkZXN0aW5hdGlvblN0YXRlLCBkZXN0aW5hdGlvblN0YXRlUGFyYW1zLCBmcm9tU3RhdGUpIHtcclxuICAgICAgICBjb25zdCBkZXN0aW5hdGlvbkluZm8gPSB7XHJcbiAgICAgICAgICAgIGRlc3RpbmF0aW9uOiB7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiBkZXN0aW5hdGlvblN0YXRlLm5hbWUsXHJcbiAgICAgICAgICAgICAgICBkYXRhOiBkZXN0aW5hdGlvblN0YXRlLmRhdGFcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgcGFyYW1zOiBkZXN0aW5hdGlvblN0YXRlUGFyYW1zLFxyXG4gICAgICAgICAgICBmcm9tOiB7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiBmcm9tU3RhdGUubmFtZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLiRzZXNzaW9uU3RvcmFnZS5zdG9yZSgnZGVzdGluYXRpb25TdGF0ZScsIGRlc3RpbmF0aW9uSW5mbyk7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtIdHRwQ2xpZW50fSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7T2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7bWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7TG9jYWxTdG9yYWdlU2VydmljZSwgU2Vzc2lvblN0b3JhZ2VTZXJ2aWNlfSBmcm9tICduZ3gtd2Vic3RvcmFnZSc7XHJcblxyXG5jb25zdCBTRVJWRVJfQVBJX1VSTCA9ICcuLyc7XHJcblxyXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxyXG5leHBvcnQgY2xhc3MgQXV0aFNlcnZlclByb3ZpZGVyIHtcclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCwgcHJpdmF0ZSAkbG9jYWxTdG9yYWdlOiBMb2NhbFN0b3JhZ2VTZXJ2aWNlLCBwcml2YXRlICRzZXNzaW9uU3RvcmFnZTogU2Vzc2lvblN0b3JhZ2VTZXJ2aWNlKSB7fVxyXG5cclxuICAgIGdldFRva2VuKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLiRsb2NhbFN0b3JhZ2UucmV0cmlldmUoJ2F1dGhlbnRpY2F0aW9uVG9rZW4nKSB8fCB0aGlzLiRzZXNzaW9uU3RvcmFnZS5yZXRyaWV2ZSgnYXV0aGVudGljYXRpb25Ub2tlbicpO1xyXG4gICAgfVxyXG5cclxuICAgIGxvZ2luKGNyZWRlbnRpYWxzKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoU0VSVkVSX0FQSV9VUkwgKyAnYXBpL2F1dGhlbnRpY2F0ZScsIGNyZWRlbnRpYWxzLCB7IG9ic2VydmU6ICdyZXNwb25zZScgfSkucGlwZShtYXAoYXV0aGVudGljYXRlU3VjY2Vzcy5iaW5kKHRoaXMpKSk7XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIGF1dGhlbnRpY2F0ZVN1Y2Nlc3MocmVzcCkge1xyXG4gICAgICAgICAgICBjb25zdCBiZWFyZXJUb2tlbiA9IHJlc3AuaGVhZGVycy5nZXQoJ0F1dGhvcml6YXRpb24nKTtcclxuICAgICAgICAgICAgaWYgKGJlYXJlclRva2VuICYmIGJlYXJlclRva2VuLnNsaWNlKDAsIDcpID09PSAnQmVhcmVyICcpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGp3dCA9IGJlYXJlclRva2VuLnNsaWNlKDcsIGJlYXJlclRva2VuLmxlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0b3JlQXV0aGVudGljYXRpb25Ub2tlbihqd3QsIGNyZWRlbnRpYWxzLnJlbWVtYmVyTWUpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGp3dDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBsb2dpbldpdGhUb2tlbihqd3QsIHJlbWVtYmVyTWUpIHtcclxuICAgICAgICBpZiAoand0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcmVBdXRoZW50aWNhdGlvblRva2VuKGp3dCwgcmVtZW1iZXJNZSk7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoand0KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoJ2F1dGgtand0LXNlcnZpY2UgUHJvbWlzZSByZWplY3QnKTsgLy8gUHV0IGFwcHJvcHJpYXRlIGVycm9yIG1lc3NhZ2UgaGVyZVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzdG9yZUF1dGhlbnRpY2F0aW9uVG9rZW4oand0LCByZW1lbWJlck1lKSB7XHJcbiAgICAgICAgaWYgKHJlbWVtYmVyTWUpIHtcclxuICAgICAgICAgICAgdGhpcy4kbG9jYWxTdG9yYWdlLnN0b3JlKCdhdXRoZW50aWNhdGlvblRva2VuJywgand0KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLiRzZXNzaW9uU3RvcmFnZS5zdG9yZSgnYXV0aGVudGljYXRpb25Ub2tlbicsIGp3dCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxvZ291dCgpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShvYnNlcnZlciA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuJGxvY2FsU3RvcmFnZS5jbGVhcignYXV0aGVudGljYXRpb25Ub2tlbicpO1xyXG4gICAgICAgICAgICB0aGlzLiRzZXNzaW9uU3RvcmFnZS5jbGVhcignYXV0aGVudGljYXRpb25Ub2tlbicpO1xyXG4gICAgICAgICAgICB0aGlzLiRzZXNzaW9uU3RvcmFnZS5jbGVhcignbG9ja1BhZ2VzTmF2aWdhdGlvbicpO1xyXG4gICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7TmdNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0hhc0FueUF1dGhvcml0eURpcmVjdGl2ZX0gZnJvbSAnLi9oYXMtYW55LWF1dGhvcml0eS5kaXJlY3RpdmUnO1xyXG5pbXBvcnQge0FjY291bnRTZXJ2aWNlfSBmcm9tICcuL2FjY291bnQuc2VydmljZSc7XHJcbmltcG9ydCB7UHJpbmNpcGFsfSBmcm9tICcuL3ByaW5jaXBhbC5zZXJ2aWNlJztcclxuaW1wb3J0IHtTdGF0ZVN0b3JhZ2VTZXJ2aWNlfSBmcm9tICcuL3N0YXRlLXN0b3JhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7QXV0aFNlcnZlclByb3ZpZGVyfSBmcm9tICcuL2F1dGgtand0LnNlcnZpY2UnO1xyXG5cclxuQE5nTW9kdWxlKHtcclxuICAgIGRlY2xhcmF0aW9uczogW1xyXG4gICAgICBIYXNBbnlBdXRob3JpdHlEaXJlY3RpdmVcclxuICAgIF0sXHJcbiAgICBpbXBvcnRzOiBbXHJcbiAgICBdLFxyXG4gICAgZXhwb3J0czogW1xyXG4gICAgICBIYXNBbnlBdXRob3JpdHlEaXJlY3RpdmVcclxuICAgIF0sXHJcbiAgICBwcm92aWRlcnM6IFtcclxuICAgICAgQWNjb3VudFNlcnZpY2UsXHJcbiAgICAgIFByaW5jaXBhbCxcclxuICAgICAgU3RhdGVTdG9yYWdlU2VydmljZSxcclxuICAgICAgQXV0aFNlcnZlclByb3ZpZGVyXHJcbiAgICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBdXRoTW9kdWxlIHt9XHJcbiIsImltcG9ydCB7Q1VTVE9NX0VMRU1FTlRTX1NDSEVNQSwgTmdNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1BhZ2luYVBhcmFtZXRyaXphZGFDb21wb25lbnR9IGZyb20gJy4vcGFnaW5hLXBhcmFtZXRyaXphZGEuY29tcG9uZW50JztcclxuaW1wb3J0IHtOZ0poaXBzdGVyTW9kdWxlfSBmcm9tICduZy1qaGlwc3Rlcic7XHJcbmltcG9ydCB7QXV0aE1vZHVsZX0gZnJvbSAnLi4vLi4vYXV0aC9hdXRoLm1vZHVsZSc7XHJcbmltcG9ydCB7Rm9udEF3ZXNvbWVNb2R1bGV9IGZyb20gJ0Bmb3J0YXdlc29tZS9hbmd1bGFyLWZvbnRhd2Vzb21lJztcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgICBpbXBvcnRzOiBbXHJcbiAgICAgIEF1dGhNb2R1bGUsXHJcbiAgICAgIE5nSmhpcHN0ZXJNb2R1bGUsXHJcbiAgICAgIEZvbnRBd2Vzb21lTW9kdWxlXHJcbiAgICBdLFxyXG4gICAgZGVjbGFyYXRpb25zOiBbUGFnaW5hUGFyYW1ldHJpemFkYUNvbXBvbmVudF0sXHJcbiAgICBleHBvcnRzOiBbUGFnaW5hUGFyYW1ldHJpemFkYUNvbXBvbmVudF0sXHJcbiAgICBzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV1cclxufSlcclxuZXhwb3J0IGNsYXNzIFBhZ2luYVBhcmFtZXRyaXphZGFNb2R1bGUgeyB9XHJcbiIsImV4cG9ydCBlbnVtIENhcHRjaGFQcm92aWRlckVudW0ge1xyXG4gICAgUkVDQVBUQ0hBX1YyID0gJ1JFQ0FQVENIQV9WMicsXHJcbiAgICBSRUNBUFRDSEFfVjMgPSAnUkVDQVBUQ0hBX1YzJyxcclxuICAgIFRVUk5TVElMRSA9ICdUVVJOU1RJTEUnXHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ2FwdGNoYUNvbmZpZ01vZGVsIHtcclxuICAgIHByb3ZpZGVyOiBDYXB0Y2hhUHJvdmlkZXJFbnVtIHwgc3RyaW5nO1xyXG4gICAgc2l0ZUtleTogc3RyaW5nO1xyXG59XHJcbiIsImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7SHR0cENsaWVudH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQge2ZvcmtKb2lufSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtDYXB0Y2hhQ29uZmlnTW9kZWwsIENhcHRjaGFQcm92aWRlckVudW19IGZyb20gJy4vbXVsdGlwbGUtY2FwdGNoYS5tb2RlbCc7XHJcbmltcG9ydCB7UGFyYW1ldHJvfSBmcm9tICcuLi8uLi9tb2RlbCc7XHJcbmltcG9ydCB7VXRpbEZ1bmN0aW9uc30gZnJvbSAnLi4vLi4vdXRpbCc7XHJcblxyXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxyXG5leHBvcnQgY2xhc3MgTXVsdGlwbGVDYXB0Y2hhU2VydmljZSB7XHJcblxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBERUZBVUxUX1NJVEVfS0VZID0gJzZMZFhYWDBVQUFBQUFBa1EyazZ1d0RMSy1TTDVTel9Vbng1YWM4V3gnO1xyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50KSB7fVxyXG5cclxuICAgIGdldENvbmZpZygpOiBQcm9taXNlPENhcHRjaGFDb25maWdNb2RlbD4ge1xyXG5cclxuICAgICAgICByZXR1cm4gZm9ya0pvaW4oW1xyXG4gICAgICAgICAgICB0aGlzLmh0dHAuZ2V0PFBhcmFtZXRybz4oJy9hcGkvcHVibGljL3BhcmFtZXRyb3MvQ0FQVENIQV9QUk9WSURFUi8qJyksXHJcbiAgICAgICAgICAgIHRoaXMuaHR0cC5nZXQ8UGFyYW1ldHJvPignL2FwaS9wdWJsaWMvcGFyYW1ldHJvcy9DQVBUQ0hBX1NJVEVfS0VZLyonKVxyXG4gICAgICAgIF0pXHJcbiAgICAgICAgICAgIC50b1Byb21pc2UoKVxyXG4gICAgICAgICAgICAudGhlbigoW3Byb3ZpZGVyUGFyYW0sIHNpdGVLZXlQYXJhbV0pID0+IHtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBjb25maWc6IENhcHRjaGFDb25maWdNb2RlbCA9IHtcclxuICAgICAgICAgICAgICAgICAgICBwcm92aWRlcjogcHJvdmlkZXJQYXJhbS52YWxvciBhcyBDYXB0Y2hhUHJvdmlkZXJFbnVtLFxyXG4gICAgICAgICAgICAgICAgICAgIHNpdGVLZXk6IHNpdGVLZXlQYXJhbS52YWxvclxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIGlmIChVdGlsRnVuY3Rpb25zLmlzVmFsaWRTdHJpbmdPckFycmF5KGNvbmZpZy5wcm92aWRlcikgPT09IGZhbHNlIHx8ICFVdGlsRnVuY3Rpb25zLmlzVmFsaWRTdHJpbmdPckFycmF5KGNvbmZpZy5zaXRlS2V5KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZy5wcm92aWRlciA9ICdSRUNBUFRDSEFfVjInO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZy5zaXRlS2V5ID0gdGhpcy5ERUZBVUxUX1NJVEVfS0VZO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiBjb25maWc7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJybyBhbyBjYXJyZWdhciBjb25maWd1cmHDg8Knw4PCo28gZGUgY2FwdGNoYScsIGVycik7XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICBwcm92aWRlcjogJ1JFQ0FQVENIQV9WMicsXHJcbiAgICAgICAgICAgICAgICAgICAgc2l0ZUtleTogdGhpcy5ERUZBVUxUX1NJVEVfS0VZXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG4iLCJleHBvcnQgY29uc3QgTVVMVElQTEVfQ0FQVENIQV9QVF9CUiA9IHtcclxuICBcIm11bHRpcGxlQ2FwdGNoYVwiOiB7XHJcbiAgICBcInR1cm5zVGlsZVwiIDoge1xyXG4gICAgICBcImxvYWRFcnJvclwiOiBcIkVycm8gYW8gY2FycmVnYXIgVHVybnN0aWxlXCJcclxuICAgIH0sXHJcbiAgICBcInJlQ2FwdGNoYVYzXCIgOiB7XHJcbiAgICAgIFwibG9hZEVycm9yXCI6IFwiTsODwqNvIGZvaSBwb3Nzw4PCrXZlbCBjYXJyZWdhciBvIHJlQ0FQVENIQSB2M1wiLFxyXG4gICAgICBcImludmFsaWRLZXlcIjogXCJDaGF2ZSBkbyByZUNBUFRDSEEgaW52w4PCoWxpZGEgb3UgZG9tw4PCrW5pbyBuw4PCo28gYXV0b3JpemFkb1wiLFxyXG4gICAgICBcInZhbGlkYXRpb25FcnJvclwiOiBcIkZhbGhhIG5hIHZhbGlkYcODwqfDg8KjbyBkbyBjYXB0Y2hhXCIsXHJcbiAgICAgIFwiaHVtYW5WZXJpZmljYXRpb25zXCI6IFwiVmVyaWZpY2FuZG8gc2Ugdm9jw4PCqiDDg8KpIGh1bWFub8OiwoDCplwiLFxyXG4gICAgICBcInN1Y2Nlc3NWZXJpZmljYXRpb25cIjogXCJDYXB0Y2hhIHZlcmlmaWNhZG8gY29tIHN1Y2Vzc29cIlxyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQge1xyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIElucHV0LFxyXG4gIE5nWm9uZSxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0LFxyXG4gIFZpZXdDaGlsZFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0NhcHRjaGFDb25maWdNb2RlbCwgQ2FwdGNoYVByb3ZpZGVyRW51bX0gZnJvbSAnLi9tdWx0aXBsZS1jYXB0Y2hhLm1vZGVsJztcclxuaW1wb3J0IHtNdWx0aXBsZUNhcHRjaGFTZXJ2aWNlfSBmcm9tICcuL211bHRpcGxlLWNhcHRjaGEuc2VydmljZSc7XHJcbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcbmltcG9ydCB7VXRpbEZ1bmN0aW9uc30gZnJvbSAnLi4vLi4vdXRpbCc7XHJcbmltcG9ydCB7TVVMVElQTEVfQ0FQVENIQV9QVF9CUn0gZnJvbSAnLi9pMThuL3B0LWJyJztcclxuXHJcbmRlY2xhcmUgZ2xvYmFsIHtcclxuICBpbnRlcmZhY2UgV2luZG93IHtcclxuICAgIHR1cm5zdGlsZTogYW55O1xyXG4gIH1cclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdqaGktbXVsdGlwbGUtY2FwdGNoYScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL211bHRpcGxlLWNhcHRjaGEuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL211bHRpcGxlLWNhcHRjaGEuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTXVsdGlwbGVDYXB0Y2hhQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0IHtcclxuICBAVmlld0NoaWxkKCd0dXJuc3RpbGVDb250YWluZXInKSB0dXJuc3RpbGVDb250YWluZXI6IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZCgncmVjYXB0Y2hhVjInKSByZWNhcHRjaGFWMjogYW55O1xyXG4gIHByaXZhdGUgX2FjdGlvbiA9ICdpbml0JztcclxuICBASW5wdXQoKSB2YWxpZGF0ZWQgPSBmYWxzZTtcclxuICBwcml2YXRlIF9jdXN0b21FcnJvcjogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcbiAgQE91dHB1dCgpIHZhbGlkYXRlZENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcclxuICBAT3V0cHV0KCkgcmVzb2x2ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuICBwcml2YXRlIHR1cm5zdGlsZVdpZGdldElkOiBhbnk7XHJcbiAgcHJpdmF0ZSBjYXB0Y2hhVHJhbnNsYXRpb25zTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZ2V0IGFjdGlvbigpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX2FjdGlvbjtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGFjdGlvbih2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB2YWx1ZSA9IFV0aWxGdW5jdGlvbnMuc2FuaXRpemVSZWNhcHRjaGFBY3Rpb24odmFsdWUpO1xyXG4gICAgdGhpcy5fYWN0aW9uID0gdmFsdWU7XHJcbiAgfVxyXG4gIGdldCBjdXN0b21FcnJvcigpOiBzdHJpbmcgfCBudWxsIHtcclxuICAgIHJldHVybiB0aGlzLl9jdXN0b21FcnJvcjtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGN1c3RvbUVycm9yKHZhbHVlOiBzdHJpbmcgfCBudWxsKSB7XHJcbiAgICB0aGlzLl9jdXN0b21FcnJvciA9IHZhbHVlO1xyXG4gICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIGNvbmZpZzogQ2FwdGNoYUNvbmZpZ01vZGVsO1xyXG4gIGVycm9yOiBzdHJpbmcgfCBudWxsID0gbnVsbDsgLy8gbm92byBjYW1wbyBubyBjb21wb25lbnRlXHJcbiAgcHJpdmF0ZSB0dXJuc3RpbGVSZW5kZXJlZCA9IGZhbHNlO1xyXG4gIHByaXZhdGUgdHVybnN0aWxlTG9hZGluZz86IFByb21pc2U8dm9pZD47XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBfY2FwdGNoYVNlcnZpY2U6IE11bHRpcGxlQ2FwdGNoYVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9uZ1pvbmU6IE5nWm9uZSxcclxuICAgIHByaXZhdGUgX2NkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICBwdWJsaWMgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZVxyXG4gICkge1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgfVxyXG5cclxuICBhc3luYyBuZ0FmdGVyVmlld0luaXQoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLnZhbGlkYXRlZCA9IGZhbHNlO1xyXG4gICAgcmV0dXJuIHRoaXMuX2NhcHRjaGFTZXJ2aWNlLmdldENvbmZpZygpLnRoZW4oYXN5bmMgY29uZmlnID0+IHtcclxuICAgICAgdGhpcy5jb25maWcgPSBjb25maWc7XHJcbiAgICAgIGlmICh0aGlzLmNvbmZpZy5wcm92aWRlciA9PT0gQ2FwdGNoYVByb3ZpZGVyRW51bS5UVVJOU1RJTEUpIHtcclxuICAgICAgICBhd2FpdCB0aGlzLmxvYWRUdXJuc3RpbGVTY3JpcHQoKTtcclxuICAgICAgICB0aGlzLnJlbmRlclR1cm5zdGlsZSgpO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY29uZmlnLnByb3ZpZGVyID09PSBDYXB0Y2hhUHJvdmlkZXJFbnVtLlJFQ0FQVENIQV9WMykge1xyXG4gICAgICAgIHRoaXMuZXhlY3V0ZVYzKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PVxyXG4gIC8vIFRVUk5TVElMRVxyXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT1cclxuXHJcbiAgcHJpdmF0ZSBsb2FkVHVybnN0aWxlU2NyaXB0KCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKHdpbmRvdy50dXJuc3RpbGUpIHtcclxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnR1cm5zdGlsZUxvYWRpbmcpIHtcclxuICAgICAgcmV0dXJuIHRoaXMudHVybnN0aWxlTG9hZGluZztcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnR1cm5zdGlsZUxvYWRpbmcgPSBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIGNvbnN0IHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xyXG4gICAgICBzY3JpcHQuc3JjID0gJ2h0dHBzOi8vY2hhbGxlbmdlcy5jbG91ZGZsYXJlLmNvbS90dXJuc3RpbGUvdjAvYXBpLmpzJztcclxuICAgICAgc2NyaXB0LmFzeW5jID0gdHJ1ZTtcclxuICAgICAgc2NyaXB0LmRlZmVyID0gdHJ1ZTtcclxuXHJcbiAgICAgIHNjcmlwdC5vbmxvYWQgPSAoKSA9PiByZXNvbHZlKCk7XHJcbiAgICAgIHNjcmlwdC5vbmVycm9yID0gKCkgPT4gcmVqZWN0KHRoaXMuZ2V0VHJhbnNsYXRpb24oJ211bHRpcGxlQ2FwdGNoYS50dXJuc1RpbGUubG9hZEVycm9yJykpO1xyXG5cclxuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChzY3JpcHQpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMudHVybnN0aWxlTG9hZGluZztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVuZGVyVHVybnN0aWxlKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMudHVybnN0aWxlUmVuZGVyZWQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy50dXJuc3RpbGVDb250YWluZXIpIHtcclxuICAgICAgLy8gdGVudGEgbm92YW1lbnRlIG5hIHByw4PCs3hpbWEgaXRlcmHDg8Knw4PCo28gZG8gQW5ndWxhclxyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMucmVuZGVyVHVybnN0aWxlKCksIDEwKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudHVybnN0aWxlUmVuZGVyZWQgPSB0cnVlO1xyXG5cclxuICAgIHRoaXMudHVybnN0aWxlV2lkZ2V0SWQgPSB3aW5kb3cudHVybnN0aWxlLnJlbmRlcih0aGlzLnR1cm5zdGlsZUNvbnRhaW5lci5uYXRpdmVFbGVtZW50LCB7XHJcbiAgICAgIHNpdGVrZXk6IHRoaXMuY29uZmlnLnNpdGVLZXksXHJcbiAgICAgIGNhbGxiYWNrOiAodG9rZW46IHN0cmluZykgPT4gdGhpcy5yZXNvbHZlKHRva2VuKSxcclxuICAgICAgJ2Vycm9yLWNhbGxiYWNrJzogKCkgPT4gdGhpcy52YWxpZGF0ZWQgPSBmYWxzZSxcclxuICAgICAgJ2V4cGlyZWQtY2FsbGJhY2snOiAoKSA9PiB0aGlzLnZhbGlkYXRlZCA9IGZhbHNlXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT1cclxuICAvLyBSRUNBUFRDSEEgKHYyIC8gdjMpXHJcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5cclxuICBvblRva2VuKHRva2VuOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMucmVzb2x2ZSh0b2tlbik7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGxvYWRSZWNhcHRjaGFWMygpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICgod2luZG93IGFzIGFueSkuZ3JlY2FwdGNoYSkgeyByZXR1cm47IH1cclxuXHJcbiAgICBhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIGNvbnN0IHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xyXG4gICAgICBzY3JpcHQuc3JjID0gYGh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vcmVjYXB0Y2hhL2FwaS5qcz9yZW5kZXI9JHt0aGlzLmNvbmZpZy5zaXRlS2V5fWA7XHJcbiAgICAgIHNjcmlwdC5hc3luYyA9IHRydWU7XHJcbiAgICAgIHNjcmlwdC5kZWZlciA9IHRydWU7XHJcbiAgICAgIHNjcmlwdC5vbmxvYWQgPSAoKSA9PiByZXNvbHZlKCk7XHJcbiAgICAgIHNjcmlwdC5vbmVycm9yID0gKCkgPT4gcmVqZWN0KCk7XHJcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoc2NyaXB0KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZXhlY3V0ZVYzKCkge1xyXG4gICAgdGhpcy5sb2FkUmVjYXB0Y2hhVjMoKVxyXG4gICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAod2luZG93IGFzIGFueSkuZ3JlY2FwdGNoYS5yZWFkeSgoKSA9PiB7XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBjb25zdCBleGVjUHJvbWlzZSA9ICh3aW5kb3cgYXMgYW55KS5ncmVjYXB0Y2hhLmV4ZWN1dGUoXHJcbiAgICAgICAgICAgIHRoaXMuY29uZmlnLnNpdGVLZXksXHJcbiAgICAgICAgICAgIHsgYWN0aW9uOiB0aGlzLl9hY3Rpb24gfVxyXG4gICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICBQcm9taXNlLnJlc29sdmUoZXhlY1Byb21pc2UpXHJcbiAgICAgICAgICAudGhlbigodG9rZW46IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLl9uZ1pvbmUucnVuKCgpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLmVycm9yID0gbnVsbDtcclxuICAgICAgICAgICAgICB0aGlzLnZhbGlkYXRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgdGhpcy5yZXNvbHZlKHRva2VuKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgLmNhdGNoKChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmhhbmRsZUNhcHRjaGFFcnJvcihlcnIpO1xyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgLy8gw7DCn8KUwqUgRVJSTyBTw4PCjU5DUk9OTyAoZXNzZSDDg8KpIG8gc2V1IGNhc28pXHJcbiAgICAgICAgICB0aGlzLmhhbmRsZUNhcHRjaGFFcnJvcihlcnIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH0pO1xyXG4gICAgfSlcclxuICAgIC5jYXRjaChlcnIgPT4ge1xyXG4gICAgICB0aGlzLmhhbmRsZUNhcHRjaGFFcnJvcihlcnIsIHRydWUpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZUNhcHRjaGFFcnJvcihlcnI6IGFueSwgc2NyaXB0RXJyb3IgPSBmYWxzZSkge1xyXG4gICAgdGhpcy5fbmdab25lLnJ1bigoKSA9PiB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm8gcmVDQVBUQ0hBIHYzOicsIGVycik7XHJcbiAgICAgIHRoaXMudmFsaWRhdGVkID0gZmFsc2U7XHJcblxyXG4gICAgICBpZiAoc2NyaXB0RXJyb3IpIHtcclxuICAgICAgICB0aGlzLmVycm9yID0gdGhpcy5nZXRUcmFuc2xhdGlvbignbXVsdGlwbGVDYXB0Y2hhLnJlQ2FwdGNoYVYzLmxvYWRFcnJvcicpO1xyXG4gICAgICB9IGVsc2UgaWYgKFN0cmluZyhlcnIpLmluY2x1ZGVzKCdJbnZhbGlkIHNpdGUga2V5JykpIHtcclxuICAgICAgICB0aGlzLmVycm9yID0gdGhpcy5nZXRUcmFuc2xhdGlvbignbXVsdGlwbGVDYXB0Y2hhLnJlQ2FwdGNoYVYzLmludmFsaWRLZXknKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmVycm9yID0gdGhpcy5nZXRUcmFuc2xhdGlvbignbXVsdGlwbGVDYXB0Y2hhLnJlQ2FwdGNoYVYzLnZhbGlkYXRpb25FcnJvcicpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZXJyb3IgKz0gJzogJyArIGVycjtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZXNvbHZlKHRva2VuOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMudmFsaWRhdGVkID0gdHJ1ZTtcclxuICAgIHRoaXMudmFsaWRhdGVkQ2hhbmdlLmVtaXQodGhpcy52YWxpZGF0ZWQpO1xyXG4gICAgdGhpcy5yZXNvbHZlZC5lbWl0KHRva2VuKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRUcmFuc2xhdGlvbihrZXk6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBsYW5nID1cclxuICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmN1cnJlbnRMYW5nIHx8XHJcbiAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5nZXREZWZhdWx0TGFuZygpIHx8XHJcbiAgICAgICdwdC1icic7XHJcblxyXG4gICAgbGV0IHZhbHVlID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoa2V5KTtcclxuICAgIGNvbnN0IG5vdEZvdW5kID1cclxuICAgICAgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJlxyXG4gICAgICB2YWx1ZS5zdGFydHNXaXRoKCd0cmFuc2xhdGlvbi1ub3QtZm91bmRbJyk7XHJcblxyXG4gICAgLy8gbmd4LXRyYW5zbGF0ZSByZXRvcm5hIGEgcHLDg8KzcHJpYSBrZXkgcXVhbmRvIG7Dg8KjbyBlbmNvbnRyYVxyXG4gICAgaWYgKG5vdEZvdW5kICYmICF0aGlzLmNhcHRjaGFUcmFuc2xhdGlvbnNMb2FkZWQpIHtcclxuICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnNldFRyYW5zbGF0aW9uKGxhbmcsIE1VTFRJUExFX0NBUFRDSEFfUFRfQlIsIHRydWUpO1xyXG4gICAgICB0aGlzLmNhcHRjaGFUcmFuc2xhdGlvbnNMb2FkZWQgPSB0cnVlO1xyXG5cclxuICAgICAgLy8gdGVudGEgbm92YW1lbnRlIGFww4PCs3MgcmVnaXN0cmFyXHJcbiAgICAgIHZhbHVlID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoa2V5KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVzZXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9uZ1pvbmUucnVuKCgpID0+IHtcclxuICAgICAgdGhpcy52YWxpZGF0ZWQgPSBmYWxzZTtcclxuICAgICAgdGhpcy5lcnJvciA9IG51bGw7XHJcbiAgICAgIHRoaXMuX2N1c3RvbUVycm9yID0gbnVsbDtcclxuXHJcbiAgICAgIHRoaXMudmFsaWRhdGVkQ2hhbmdlLmVtaXQoZmFsc2UpO1xyXG5cclxuICAgICAgaWYgKCF0aGlzLmNvbmZpZykge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgc3dpdGNoICh0aGlzLmNvbmZpZy5wcm92aWRlcikge1xyXG5cclxuICAgICAgICBjYXNlIENhcHRjaGFQcm92aWRlckVudW0uUkVDQVBUQ0hBX1YyOlxyXG4gICAgICAgICAgdGhpcy5yZXNldFJlY2FwdGNoYVYyKCk7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSBDYXB0Y2hhUHJvdmlkZXJFbnVtLlJFQ0FQVENIQV9WMzpcclxuICAgICAgICAgIHRoaXMucmVzZXRSZWNhcHRjaGFWMygpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgQ2FwdGNoYVByb3ZpZGVyRW51bS5UVVJOU1RJTEU6XHJcbiAgICAgICAgICB0aGlzLnJlc2V0VHVybnN0aWxlKCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIHByaXZhdGUgcmVzZXRSZWNhcHRjaGFWMigpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnJlY2FwdGNoYVYyKSB7XHJcbiAgICAgIHRoaXMucmVjYXB0Y2hhVjIucmVzZXQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVzZXRSZWNhcHRjaGFWMygpOiB2b2lkIHtcclxuICAgIHRoaXMuZXhlY3V0ZVYzKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlc2V0VHVybnN0aWxlKCk6IHZvaWQge1xyXG4gICAgaWYgKHdpbmRvdy50dXJuc3RpbGUgJiYgdGhpcy50dXJuc3RpbGVXaWRnZXRJZCkge1xyXG4gICAgICB3aW5kb3cudHVybnN0aWxlLnJlc2V0KHRoaXMudHVybnN0aWxlV2lkZ2V0SWQpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQge05nTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtGb3Jtc01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQge0NvbW1vbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHtNdWx0aXBsZUNhcHRjaGFDb21wb25lbnR9IGZyb20gJy4vbXVsdGlwbGUtY2FwdGNoYS5jb21wb25lbnQnO1xyXG5pbXBvcnQge1JlY2FwdGNoYU1vZHVsZX0gZnJvbSAnbmctcmVjYXB0Y2hhJztcclxuaW1wb3J0IHtSZWNhcHRjaGFDb21tb25Nb2R1bGV9IGZyb20gJ25nLXJlY2FwdGNoYS9yZWNhcHRjaGEvcmVjYXB0Y2hhLWNvbW1vbi5tb2R1bGUnO1xyXG5cclxuQE5nTW9kdWxlKHtcclxuICAgIGltcG9ydHM6IFtGb3Jtc01vZHVsZSwgQ29tbW9uTW9kdWxlLCBSZWNhcHRjaGFDb21tb25Nb2R1bGUsIFJlY2FwdGNoYU1vZHVsZV0sXHJcbiAgICBkZWNsYXJhdGlvbnM6IFtNdWx0aXBsZUNhcHRjaGFDb21wb25lbnRdLFxyXG4gICAgZXhwb3J0czogW011bHRpcGxlQ2FwdGNoYUNvbXBvbmVudF1cclxufSlcclxuZXhwb3J0IGNsYXNzIE11bHRpcGxlQ2FwdGNoYU1vZHVsZSB7fVxyXG4iLCJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0h0dHBDbGllbnQsIEh0dHBSZXNwb25zZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7Tm90aWZpY2FjYW99IGZyb20gJy4uLy4uL21vZGVsL25vdGlmaWNhY2FvLm1vZGVsJztcclxuaW1wb3J0IHtMaXN0YUNvZGlnb3N9IGZyb20gJy4uLy4uL21vZGVsL2xpc3RhLWNvZGlnb3MnO1xyXG5pbXBvcnQge0Jhc2ljUmVzcG9zdGF9IGZyb20gJy4uLy4uL21vZGVsL2Jhc2ljLXJlc3Bvc3RhLm1vZGVsJztcclxuXHJcbmNvbnN0IFNFUlZFUl9BUElfVVJMID0gJy4vJztcclxuXHJcbkBJbmplY3RhYmxlKHtwcm92aWRlZEluOiAncm9vdCd9KVxyXG5leHBvcnQgY2xhc3MgTm90aWZpY2Fjb2VzU2VydmljZSB7XHJcbiAgICBwdWJsaWMgcmVzb3VyY2VVcmwgPSBTRVJWRVJfQVBJX1VSTCArICdhcGkvbm90aWZpY2Fjb2VzJztcclxuICAgIHByaXZhdGUgbm90aWZpY2Fjb2VzRW1DYWNoZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Tm90aWZpY2FjYW9bXT4oW10pO1xyXG4gICAgcHJpdmF0ZSB1bHRpbW9DYXJyZWdhbWVudG9FbU1zOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgdGVtcG9WaWRhQ2FjaGVNcyA9IDYwMDAwO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCkge1xyXG4gICAgfVxyXG5cclxuICAgIGJ1c2Nhck5vdGlmaWNhY29lcyhmb3JjYXJBdHVhbGl6YWNhbzogYm9vbGVhbiA9IGZhbHNlKTogUHJvbWlzZTxOb3RpZmljYWNhb1tdPiB7XHJcbiAgICAgICAgY29uc3QgY2FjaGVBdHVhbCA9IHRoaXMubm90aWZpY2Fjb2VzRW1DYWNoZS5nZXRWYWx1ZSgpO1xyXG4gICAgICAgIGNvbnN0IGRhdGFBdHVhbCA9IERhdGUubm93KCk7XHJcbiAgICAgICAgaWYgKCFmb3JjYXJBdHVhbGl6YWNhbyAmJiBjYWNoZUF0dWFsICYmIHRoaXMudWx0aW1vQ2FycmVnYW1lbnRvRW1NcyAmJiAoZGF0YUF0dWFsIC0gdGhpcy51bHRpbW9DYXJyZWdhbWVudG9FbU1zKSA8IHRoaXMudGVtcG9WaWRhQ2FjaGVNcykge1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGNhY2hlQXR1YWwpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cFxyXG4gICAgICAgICAgICAuZ2V0PE5vdGlmaWNhY2FvW10+KHRoaXMucmVzb3VyY2VVcmwsIHtvYnNlcnZlOiAncmVzcG9uc2UnfSlcclxuICAgICAgICAgICAgLnRvUHJvbWlzZSgpXHJcbiAgICAgICAgICAgIC50aGVuKChyZXNwOiBIdHRwUmVzcG9uc2U8Tm90aWZpY2FjYW9bXT4pID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGxpc3RhID0gcmVzcC5ib2R5ID8gcmVzcC5ib2R5IDogW107XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXRpckxpc3RhQXR1YWxpemFkYShsaXN0YSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbGlzdGE7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG9idGVyTm90aWZpY2Fjb2VzRW1DYWNoZSgpOiBOb3RpZmljYWNhb1tdIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5ub3RpZmljYWNvZXNFbUNhY2hlLmdldFZhbHVlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZW1pdGlyTGlzdGFBdHVhbGl6YWRhKGxpc3RhOiBOb3RpZmljYWNhb1tdKSB7XHJcbiAgICAgICAgdGhpcy5ub3RpZmljYWNvZXNFbUNhY2hlLm5leHQobGlzdGEgPyBsaXN0YSA6IFtdKTtcclxuICAgICAgICB0aGlzLnVsdGltb0NhcnJlZ2FtZW50b0VtTXMgPSBEYXRlLm5vdygpO1xyXG4gICAgfVxyXG5cclxuICAgIGxpbXBhckNhY2hlKCkge1xyXG4gICAgICAgIHRoaXMubm90aWZpY2Fjb2VzRW1DYWNoZS5uZXh0KFtdKTtcclxuICAgICAgICB0aGlzLnVsdGltb0NhcnJlZ2FtZW50b0VtTXMgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGFwbGljYXJOYW9FeGliaXJMb2NhbChjb2RpZ29zOiBudW1iZXJbXSk6IE5vdGlmaWNhY2FvW10ge1xyXG4gICAgICAgIGlmICghY29kaWdvcyB8fCBjb2RpZ29zLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5vYnRlck5vdGlmaWNhY29lc0VtQ2FjaGUoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgYWdvcmEgPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk7XHJcbiAgICAgICAgY29uc3QgY29uanVudG9Db2RpZ29zID0gbmV3IFNldChjb2RpZ29zKTtcclxuICAgICAgICBjb25zdCBhdHVhbGl6YWRhID0gKHRoaXMub2J0ZXJOb3RpZmljYWNvZXNFbUNhY2hlKCkgfHwgW10pLm1hcChpdGVtID0+IHtcclxuICAgICAgICAgICAgY29uc3QgdmFsb3I6IGFueSA9IGl0ZW0gYXMgYW55O1xyXG4gICAgICAgICAgICBjb25zdCBjb2RpZ28gPSB2YWxvciA/IHZhbG9yLmNvZGlnbyA6IG51bGw7XHJcbiAgICAgICAgICAgIGlmIChjb2RpZ28gIT09IG51bGwgJiYgY29kaWdvICE9PSB1bmRlZmluZWQgJiYgY29uanVudG9Db2RpZ29zLmhhcyhjb2RpZ28pKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gey4uLml0ZW0sIGRhdGFOYW9FeGliaXI6IGFnb3JhfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gaXRlbTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmVtaXRpckxpc3RhQXR1YWxpemFkYShhdHVhbGl6YWRhKTtcclxuICAgICAgICByZXR1cm4gYXR1YWxpemFkYTtcclxuICAgIH1cclxuXHJcbiAgICBtYXJjYXJOYW9FeGliaXIoZGFkb3M6IExpc3RhQ29kaWdvcyk6IFByb21pc2U8QmFzaWNSZXNwb3N0YT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBcclxuICAgICAgICAgICAgLnBvc3Q8QmFzaWNSZXNwb3N0YT4odGhpcy5yZXNvdXJjZVVybCArICcvbWFyY2FyLW5hby1leGliaXInLCBkYWRvcywge29ic2VydmU6ICdyZXNwb25zZSd9KVxyXG4gICAgICAgICAgICAudG9Qcm9taXNlKClcclxuICAgICAgICAgICAgLnRoZW4oKHJlc3A6IEh0dHBSZXNwb25zZTxCYXNpY1Jlc3Bvc3RhPikgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3AuYm9keSBhcyBCYXNpY1Jlc3Bvc3RhO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBvYnNlcnZhck5vdGlmaWNhY29lcygpOiBPYnNlcnZhYmxlPE5vdGlmaWNhY2FvW10+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5ub3RpZmljYWNvZXNFbUNhY2hlLmFzT2JzZXJ2YWJsZSgpO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7Q29tcG9uZW50fSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtOZ2JBY3RpdmVNb2RhbH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQge05vdGlmaWNhY2FvfSBmcm9tICcuLi8uLi9tb2RlbC9ub3RpZmljYWNhby5tb2RlbCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnamhpLW5vdGlmaWNhY29lcy1kZXRhbGhlJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9ub3RpZmljYWNvZXMtZGV0YWxoZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9ub3RpZmljYWNvZXMtZGV0YWxoZS5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBOb3RpZmljYWNvZXNEZXRhbGhlQ29tcG9uZW50IHtcclxuICAgIG5vdGlmaWNhY2FvOiBOb3RpZmljYWNhbztcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgYWN0aXZlTW9kYWw6IE5nYkFjdGl2ZU1vZGFsKSB7XHJcbiAgICB9XHJcblxyXG4gICAgaW5pY2lhcihub3RpZmljYWNhbzogTm90aWZpY2FjYW8pIHtcclxuICAgICAgICB0aGlzLm5vdGlmaWNhY2FvID0gbm90aWZpY2FjYW87XHJcbiAgICB9XHJcblxyXG4gICAgZmVjaGFyKCkge1xyXG4gICAgICAgIHRoaXMuYWN0aXZlTW9kYWwuZGlzbWlzcygnY2xvc2UnKTtcclxuICAgIH1cclxuXHJcbiAgICBvYnRlclRpdHVsbygpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiAnTm90aWZpY2HDg8Knw4PCo28nO1xyXG4gICAgfVxyXG5cclxuICAgIG9idGVyTWVuc2FnZW0oKTogc3RyaW5nIHtcclxuICAgICAgICBjb25zdCB2YWxvcjogYW55ID0gdGhpcy5ub3RpZmljYWNhbyBhcyBhbnk7XHJcbiAgICAgICAgcmV0dXJuIHZhbG9yID8gdmFsb3IubWVuc2FnZW0gOiAnJztcclxuICAgIH1cclxuXHJcbiAgICBvYnRlckRhdGFDYWRhc3RybygpOiBhbnkge1xyXG4gICAgICAgIGNvbnN0IHZhbG9yOiBhbnkgPSB0aGlzLm5vdGlmaWNhY2FvIGFzIGFueTtcclxuICAgICAgICByZXR1cm4gdmFsb3IgPyB2YWxvci5kYXRhQ2FkYXN0cm8gOiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIG9idGVyRGF0YU5hb0V4aWJpcigpOiBhbnkge1xyXG4gICAgICAgIGNvbnN0IHZhbG9yOiBhbnkgPSB0aGlzLm5vdGlmaWNhY2FvIGFzIGFueTtcclxuICAgICAgICByZXR1cm4gdmFsb3IgPyB2YWxvci5kYXRhTmFvRXhpYmlyIDogbnVsbDtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge0NvbXBvbmVudH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7TmdiQWN0aXZlTW9kYWwsIE5nYk1vZGFsfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcbmltcG9ydCB7ZmFFeWV9IGZyb20gJ0Bmb3J0YXdlc29tZS9mcmVlLXNvbGlkLXN2Zy1pY29ucyc7XHJcbmltcG9ydCB7Tm90aWZpY2FjYW99IGZyb20gJy4uLy4uL21vZGVsL25vdGlmaWNhY2FvLm1vZGVsJztcclxuaW1wb3J0IHtOb3RpZmljYWNvZXNTZXJ2aWNlfSBmcm9tICcuL25vdGlmaWNhY29lcy5zZXJ2aWNlJztcclxuaW1wb3J0IHtVdGlsTWVuc2FnZW19IGZyb20gJy4uLy4uL2FsZXJ0L3V0aWwtbWVuc2FnZW0nO1xyXG5pbXBvcnQge05vdGlmaWNhY29lc0RldGFsaGVDb21wb25lbnR9IGZyb20gJy4vbm90aWZpY2Fjb2VzLWRldGFsaGUuY29tcG9uZW50JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdqaGktbm90aWZpY2Fjb2VzLXBvcHVwJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9ub3RpZmljYWNvZXMtcG9wdXAuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vbm90aWZpY2Fjb2VzLXBvcHVwLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIE5vdGlmaWNhY29lc1BvcHVwQ29tcG9uZW50IHtcclxuICAgIG5vdGlmaWNhY29lczogTm90aWZpY2FjYW9bXSA9IFtdO1xyXG4gICAgbm90aWZpY2Fjb2VzTm92YXM6IE5vdGlmaWNhY2FvW10gPSBbXTtcclxuICAgIG5vdGlmaWNhY29lc0FudGlnYXM6IE5vdGlmaWNhY2FvW10gPSBbXTtcclxuICAgIHNlbGVjaW9uYWRvczogeyBba2V5OiBudW1iZXJdOiBib29sZWFuIH0gPSB7fTtcclxuXHJcbiAgICBjb2RpZ29zVmlzdWFsaXphZG9zID0gbmV3IFNldDxudW1iZXI+KCk7XHJcbiAgICBjYXJyZWdhbmRvID0gZmFsc2U7XHJcbiAgICBmYUV5ZSA9IGZhRXllO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHB1YmxpYyBhY3RpdmVNb2RhbDogTmdiQWN0aXZlTW9kYWwsXHJcbiAgICAgICAgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE5nYk1vZGFsLFxyXG4gICAgICAgIHByaXZhdGUgbm90aWZpY2Fjb2VzU2VydmljZTogTm90aWZpY2Fjb2VzU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHV0aWxNZW5zYWdlbTogVXRpbE1lbnNhZ2VtXHJcbiAgICApIHtcclxuICAgIH1cclxuXHJcbiAgICBpbmljaWFyKG5vdGlmaWNhY29lczogTm90aWZpY2FjYW9bXSkge1xyXG4gICAgICAgIHRoaXMuYXR1YWxpemFyTGlzdGFzKG5vdGlmaWNhY29lcyA/IG5vdGlmaWNhY29lcyA6IFtdKTtcclxuICAgIH1cclxuXHJcbiAgICBmZWNoYXIoKSB7XHJcbiAgICAgICAgdGhpcy5hY3RpdmVNb2RhbC5kaXNtaXNzKCdjbG9zZScpO1xyXG4gICAgfVxyXG5cclxuICAgIHZpc3VhbGl6YXIobm90aWZpY2FjYW86IE5vdGlmaWNhY2FvKSB7XHJcbiAgICAgICAgY29uc3QgY29kaWdvID0gdGhpcy5vYnRlckNvZGlnb05vdGlmaWNhY2FvKG5vdGlmaWNhY2FvKTtcclxuICAgICAgICBpZiAoY29kaWdvICE9PSBudWxsICYmIGNvZGlnbyAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY29kaWdvc1Zpc3VhbGl6YWRvcy5hZGQoY29kaWdvKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgbW9kYWxSZWYgPSB0aGlzLm1vZGFsU2VydmljZS5vcGVuKE5vdGlmaWNhY29lc0RldGFsaGVDb21wb25lbnQsIHtcclxuICAgICAgICAgICAgc2l6ZTogJ2xnJyxcclxuICAgICAgICAgICAgYmFja2Ryb3A6ICdzdGF0aWMnXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY29uc3QgY29tcG9uZW50SW5zdGFuY2U6IE5vdGlmaWNhY29lc0RldGFsaGVDb21wb25lbnQgPSBtb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZTtcclxuICAgICAgICBjb21wb25lbnRJbnN0YW5jZS5pbmljaWFyKG5vdGlmaWNhY2FvKTtcclxuICAgIH1cclxuXHJcbiAgICBhbHRlcm5hclNlbGVjaW9uYWRvKG5vdGlmaWNhY2FvOiBOb3RpZmljYWNhbywgZXZlbnQ6IGFueSkge1xyXG4gICAgICAgIGNvbnN0IGNvZGlnbyA9IHRoaXMub2J0ZXJDb2RpZ29Ob3RpZmljYWNhbyhub3RpZmljYWNhbyk7XHJcbiAgICAgICAgaWYgKGNvZGlnbyA9PT0gbnVsbCB8fCBjb2RpZ28gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2VsZWNpb25hZG9zW2NvZGlnb10gPSBldmVudC50YXJnZXQuY2hlY2tlZCA9PT0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpc1NlbGVjaW9uYWRvKG5vdGlmaWNhY2FvOiBOb3RpZmljYWNhbyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGNvbnN0IGNvZGlnbyA9IHRoaXMub2J0ZXJDb2RpZ29Ob3RpZmljYWNhbyhub3RpZmljYWNhbyk7XHJcbiAgICAgICAgcmV0dXJuIGNvZGlnbyAhPT0gbnVsbCAmJiBjb2RpZ28gIT09IHVuZGVmaW5lZCAmJiB0aGlzLnNlbGVjaW9uYWRvc1tjb2RpZ29dID09PSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHBvZGVTZWxlY2lvbmFyKG5vdGlmaWNhY2FvOiBOb3RpZmljYWNhbyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGNvbnN0IGNvZGlnbyA9IHRoaXMub2J0ZXJDb2RpZ29Ob3RpZmljYWNhbyhub3RpZmljYWNhbyk7XHJcbiAgICAgICAgcmV0dXJuIGNvZGlnbyAhPT0gbnVsbCAmJiBjb2RpZ28gIT09IHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICBjb25maXJtYXIoKSB7XHJcbiAgICAgICAgY29uc3QgY29kaWdvcyA9IHRoaXMub2J0ZXJDb2RpZ29zU2VsZWNpb25hZG9zKCk7XHJcbiAgICAgICAgaWYgKGNvZGlnb3MubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlTW9kYWwuY2xvc2Uoe2F0dWFsaXphcjogZmFsc2V9KTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNhcnJlZ2FuZG8gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMubm90aWZpY2Fjb2VzU2VydmljZS5tYXJjYXJOYW9FeGliaXIoe2xpc3RhOiBjb2RpZ29zfSlcclxuICAgICAgICAgICAgLnRoZW4ocmVzcG9zdGEgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3Bvc3RhICYmIHJlc3Bvc3RhLnN1Y2Vzc28gPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51dGlsTWVuc2FnZW0uc2hvd0Vycm9yKHJlc3Bvc3RhLmVycm8pO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2FycmVnYW5kbyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnN0IGxpc3RhQXR1YWxpemFkYSA9IHRoaXMubm90aWZpY2Fjb2VzU2VydmljZS5hcGxpY2FyTmFvRXhpYmlyTG9jYWwoY29kaWdvcyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmF0dWFsaXphckxpc3RhcyhsaXN0YUF0dWFsaXphZGEpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY2lvbmFkb3MgPSB7fTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FycmVnYW5kbyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVNb2RhbC5jbG9zZSh7YXR1YWxpemFyOiBmYWxzZX0pO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMudXRpbE1lbnNhZ2VtLnNob3dFcnJvckRldGFpbGVkKGVycik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhcnJlZ2FuZG8gPSBmYWxzZTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgb2J0ZXJNZW5zYWdlbShub3RpZmljYWNhbzogTm90aWZpY2FjYW8pOiBzdHJpbmcge1xyXG4gICAgICAgIGNvbnN0IHZhbG9yOiBhbnkgPSBub3RpZmljYWNhbyBhcyBhbnk7XHJcbiAgICAgICAgcmV0dXJuIHZhbG9yID8gdmFsb3IubWVuc2FnZW0gOiAnJztcclxuICAgIH1cclxuXHJcbiAgICBvYnRlckRhdGFDYWRhc3Rybyhub3RpZmljYWNhbzogTm90aWZpY2FjYW8pOiBhbnkge1xyXG4gICAgICAgIGNvbnN0IHZhbG9yOiBhbnkgPSBub3RpZmljYWNhbyBhcyBhbnk7XHJcbiAgICAgICAgcmV0dXJuIHZhbG9yID8gdmFsb3IuZGF0YUNhZGFzdHJvIDogbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBpc05vdGlmaWNhY2FvTm92YShub3RpZmljYWNhbzogTm90aWZpY2FjYW8pOiBib29sZWFuIHtcclxuICAgICAgICBjb25zdCB2YWxvcjogYW55ID0gbm90aWZpY2FjYW8gYXMgYW55O1xyXG4gICAgICAgIHJldHVybiAhdmFsb3IgfHwgdmFsb3IuZGF0YU5hb0V4aWJpciA9PT0gbnVsbCB8fCB2YWxvci5kYXRhTmFvRXhpYmlyID09PSB1bmRlZmluZWQgfHwgdmFsb3IuZGF0YU5hb0V4aWJpciA9PT0gJyc7XHJcbiAgICB9XHJcblxyXG4gICAgaXNOb3RpZmljYWNhb1Zpc3VhbGl6YWRhKG5vdGlmaWNhY2FvOiBOb3RpZmljYWNhbyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGNvbnN0IGNvZGlnbyA9IHRoaXMub2J0ZXJDb2RpZ29Ob3RpZmljYWNhbyhub3RpZmljYWNhbyk7XHJcbiAgICAgICAgcmV0dXJuIGNvZGlnbyAhPT0gbnVsbCAmJiBjb2RpZ28gIT09IHVuZGVmaW5lZCAmJiB0aGlzLmNvZGlnb3NWaXN1YWxpemFkb3MuaGFzKGNvZGlnbyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhdHVhbGl6YXJMaXN0YXMobm90aWZpY2Fjb2VzOiBOb3RpZmljYWNhb1tdKSB7XHJcbiAgICAgICAgdGhpcy5ub3RpZmljYWNvZXMgPSBub3RpZmljYWNvZXMgPyBub3RpZmljYWNvZXMgOiBbXTtcclxuICAgICAgICB0aGlzLm5vdGlmaWNhY29lc05vdmFzID0gdGhpcy5ub3RpZmljYWNvZXMuZmlsdGVyKGl0ZW0gPT4gdGhpcy5pc05vdGlmaWNhY2FvTm92YShpdGVtKSk7XHJcbiAgICAgICAgdGhpcy5ub3RpZmljYWNvZXNBbnRpZ2FzID0gdGhpcy5ub3RpZmljYWNvZXMuZmlsdGVyKGl0ZW0gPT4gIXRoaXMuaXNOb3RpZmljYWNhb05vdmEoaXRlbSkpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgb2J0ZXJDb2RpZ29zU2VsZWNpb25hZG9zKCk6IG51bWJlcltdIHtcclxuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5zZWxlY2lvbmFkb3MpXHJcbiAgICAgICAgICAgIC5maWx0ZXIoa2V5ID0+IHRoaXMuc2VsZWNpb25hZG9zWytrZXldID09PSB0cnVlKVxyXG4gICAgICAgICAgICAubWFwKGtleSA9PiAra2V5KTtcclxuICAgIH1cclxuXHJcbiAgICBvYnRlckNvZGlnb05vdGlmaWNhY2FvKG5vdGlmaWNhY2FvOiBOb3RpZmljYWNhbyk6IG51bWJlciB7XHJcbiAgICAgICAgY29uc3QgdmFsb3I6IGFueSA9IG5vdGlmaWNhY2FvIGFzIGFueTtcclxuICAgICAgICByZXR1cm4gdmFsb3IgPyB2YWxvci5jb2RpZ28gOiBudWxsO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7Q1VTVE9NX0VMRU1FTlRTX1NDSEVNQSwgTmdNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0NvbW1vbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHtGb3Jtc01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQge05nYk1vZHVsZX0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQge05vdGlmaWNhY29lc1BvcHVwQ29tcG9uZW50fSBmcm9tICcuL25vdGlmaWNhY29lcy1wb3B1cC5jb21wb25lbnQnO1xyXG5pbXBvcnQge05vdGlmaWNhY29lc0RldGFsaGVDb21wb25lbnR9IGZyb20gJy4vbm90aWZpY2Fjb2VzLWRldGFsaGUuY29tcG9uZW50JztcclxuaW1wb3J0IHtGb250QXdlc29tZU1vZHVsZX0gZnJvbSBcIkBmb3J0YXdlc29tZS9hbmd1bGFyLWZvbnRhd2Vzb21lXCI7XHJcblxyXG5ATmdNb2R1bGUoe1xyXG4gICAgaW1wb3J0czogW1xyXG4gICAgICAgIENvbW1vbk1vZHVsZSxcclxuICAgICAgICBGb3Jtc01vZHVsZSxcclxuICAgICAgICBOZ2JNb2R1bGUuZm9yUm9vdCgpLFxyXG4gICAgICAgIEZvbnRBd2Vzb21lTW9kdWxlXHJcbiAgICBdLFxyXG4gICAgZGVjbGFyYXRpb25zOiBbXHJcbiAgICAgICAgTm90aWZpY2Fjb2VzUG9wdXBDb21wb25lbnQsXHJcbiAgICAgICAgTm90aWZpY2Fjb2VzRGV0YWxoZUNvbXBvbmVudFxyXG4gICAgXSxcclxuICAgIGVudHJ5Q29tcG9uZW50czogW1xyXG4gICAgICAgIE5vdGlmaWNhY29lc1BvcHVwQ29tcG9uZW50LFxyXG4gICAgICAgIE5vdGlmaWNhY29lc0RldGFsaGVDb21wb25lbnRcclxuICAgIF0sXHJcbiAgICBleHBvcnRzOiBbXHJcbiAgICAgICAgTm90aWZpY2Fjb2VzUG9wdXBDb21wb25lbnQsXHJcbiAgICAgICAgTm90aWZpY2Fjb2VzRGV0YWxoZUNvbXBvbmVudFxyXG4gICAgXSxcclxuICAgIHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTm90aWZpY2Fjb2VzTW9kdWxlIHtcclxufVxyXG4iLCJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvb2tpZVNlcnZpY2UgfSBmcm9tICduZ3gtY29va2llJztcclxuXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXHJcbmV4cG9ydCBjbGFzcyBDU1JGU2VydmljZSB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNvb2tpZVNlcnZpY2U6IENvb2tpZVNlcnZpY2UpIHt9XHJcblxyXG4gICAgZ2V0Q1NSRihuYW1lID0gJ1hTUkYtVE9LRU4nKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY29va2llU2VydmljZS5nZXQobmFtZSk7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmltcG9ydCB7QXV0aFNlcnZlclByb3ZpZGVyfSBmcm9tICcuLi9hdXRoL2F1dGgtand0LnNlcnZpY2UnO1xyXG5pbXBvcnQge1ByaW5jaXBhbH0gZnJvbSAnLi4vYXV0aC9wcmluY2lwYWwuc2VydmljZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxyXG5leHBvcnQgY2xhc3MgTG9naW5TZXJ2aWNlIHtcclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcHJpbmNpcGFsOiBQcmluY2lwYWwsIHByaXZhdGUgYXV0aFNlcnZlclByb3ZpZGVyOiBBdXRoU2VydmVyUHJvdmlkZXIpIHt9XHJcblxyXG4gICAgbG9naW4oY3JlZGVudGlhbHMsIGNhbGxiYWNrPykge1xyXG4gICAgICAgIGNvbnN0IGNiID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24oKSB7fTtcclxuXHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5hdXRoU2VydmVyUHJvdmlkZXIubG9naW4oY3JlZGVudGlhbHMpLnN1YnNjcmliZShcclxuICAgICAgICAgICAgICAgIGRhdGEgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJpbmNpcGFsLmlkZW50aXR5KHRydWUpLnRoZW4oYWNjb3VudCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNiKCk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZXJyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ291dCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYihlcnIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGxvZ2luV2l0aFRva2VuKGp3dCwgcmVtZW1iZXJNZSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmF1dGhTZXJ2ZXJQcm92aWRlci5sb2dpbldpdGhUb2tlbihqd3QsIHJlbWVtYmVyTWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGxvZ291dCgpIHtcclxuICAgICAgICB0aGlzLmF1dGhTZXJ2ZXJQcm92aWRlci5sb2dvdXQoKS5zdWJzY3JpYmUoKTtcclxuICAgICAgICB0aGlzLnByaW5jaXBhbC5hdXRoZW50aWNhdGUobnVsbCk7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcblxyXG5jb25zdCBTRVJWRVJfQVBJX1VSTCA9ICcuLyc7XHJcblxyXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxyXG5leHBvcnQgY2xhc3MgUmVnaXN0ZXIge1xyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50KSB7fVxyXG5cclxuICAgIHNhdmUoYWNjb3VudDogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoU0VSVkVSX0FQSV9VUkwgKyAnYXBpL3JlZ2lzdGVyJywgYWNjb3VudCk7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIE9uSW5pdCwgUmVuZGVyZXIsIFZpZXdDaGlsZH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7TmdiQWN0aXZlTW9kYWwsIE5nYk1vZGFsUmVmfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcbmltcG9ydCB7SmhpTGFuZ3VhZ2VTZXJ2aWNlfSBmcm9tICduZy1qaGlwc3Rlcic7XHJcbmltcG9ydCB7UmVnaXN0ZXJ9IGZyb20gJy4vcmVnaXN0ZXIuc2VydmljZSc7XHJcbmltcG9ydCB7UmVhbFRpbWVNYXNrVHlwZX0gZnJvbSAnLi4vbW9kZWwvY3BmLWNucGoubW9kZWwnO1xyXG5pbXBvcnQge1BvcnRhbEFsZXJ0U2VydmljZX0gZnJvbSAnLi4vYWxlcnQvcG9ydGFsLWFsZXJ0LnNlcnZpY2UnO1xyXG5pbXBvcnQge1V0aWxNZW5zYWdlbX0gZnJvbSBcIi4uL2FsZXJ0L3V0aWwtbWVuc2FnZW1cIjtcclxuaW1wb3J0IHtUZXJtb0xncGR9IGZyb20gJy4uL21vZGVsL3Rlcm1vLWxncGQubW9kZWwnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdqaGktcmVnaXN0ZXInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9yZWdpc3Rlci5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFJlZ2lzdGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0IHtcclxuICBjb25maXJtUGFzc3dvcmQ6IHN0cmluZztcclxuICBjb25maXJtRW1haWw6IHN0cmluZztcclxuICByZWdpc3RlckFjY291bnQ6IGFueTtcclxuICBzdWNjZXNzOiBib29sZWFuO1xyXG4gIG1vZGFsUmVmOiBOZ2JNb2RhbFJlZjtcclxuICByZWFsVGltZU1hc2tUeXBlID0gUmVhbFRpbWVNYXNrVHlwZS5DTEFTU0lDO1xyXG4gIHRlcm1vTGdwZDogVGVybW9MZ3BkO1xyXG4gIEBWaWV3Q2hpbGQoJ2NvbmZpcm1FbWFpbGRJbnB1dCcpXHJcbiAgY29uZmlybUVtYWlsZElucHV0OiBFbGVtZW50UmVmO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgbGFuZ3VhZ2VTZXJ2aWNlOiBKaGlMYW5ndWFnZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlZ2lzdGVyU2VydmljZTogUmVnaXN0ZXIsXHJcbiAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXHJcbiAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogUG9ydGFsQWxlcnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIsXHJcbiAgICBwcml2YXRlIHV0aWxNZW5zYWdlbTogVXRpbE1lbnNhZ2VtLFxyXG4gICAgcHVibGljIGFjdGl2ZU1vZGFsOiBOZ2JBY3RpdmVNb2RhbFxyXG4gICkge1xyXG4gICAgdGhpcy50ZXJtb0xncGQgPSBuZXcgVGVybW9MZ3BkKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuc3VjY2VzcyA9IGZhbHNlO1xyXG4gICAgdGhpcy5yZWdpc3RlckFjY291bnQgPSB7fTtcclxuICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmNsZWFyKCk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICB0aGlzLnJlbmRlcmVyLmludm9rZUVsZW1lbnRNZXRob2QodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignI2RvY3VtZW50bycpLCAnZm9jdXMnLCBbXSk7XHJcbiAgfVxyXG5cclxuICByZWdpc3RlcigpIHtcclxuICAgIGlmICh0aGlzLnJlZ2lzdGVyQWNjb3VudC5wYXNzd29yZCA9PT0gdGhpcy5jb25maXJtUGFzc3dvcmQgJiYgdGhpcy5yZWdpc3RlckFjY291bnQuZW1haWwgPT09IHRoaXMuY29uZmlybUVtYWlsKSB7XHJcbiAgICAgIHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLmdldEN1cnJlbnQoKS50aGVuKGtleSA9PiB7XHJcbiAgICAgICAgdGhpcy5yZWdpc3RlckFjY291bnQubGFuZ0tleSA9IGtleTtcclxuICAgICAgICBpZiAodGhpcy50ZXJtb0xncGQuaGFiaWxpdGFkbykge1xyXG4gICAgICAgICAgdGhpcy5yZWdpc3RlckFjY291bnQudGVybW9MZ3BkQWNlaXRvID0gdGhpcy50ZXJtb0xncGQuaWQ7XHJcbiAgICAgICAgICB0aGlzLnJlZ2lzdGVyQWNjb3VudC5kb2N1bWVudG9MZ3BkID0gdGhpcy50ZXJtb0xncGQuZG9jdW1lbnRvX2luYztcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5yZWdpc3RlclNlcnZpY2Uuc2F2ZSh0aGlzLnJlZ2lzdGVyQWNjb3VudCkuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnN1Y2Nlc3MgPSB0cnVlO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHJlc3BvbnNlID0+IHRoaXMudXRpbE1lbnNhZ2VtLnNob3dFcnJvckRldGFpbGVkKHJlc3BvbnNlKVxyXG4gICAgICAgICk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnJlZ2lzdGVyQWNjb3VudC5wYXNzd29yZCAhPT0gdGhpcy5jb25maXJtUGFzc3dvcmQpIHtcclxuICAgICAgdGhpcy51dGlsTWVuc2FnZW0uc2hvd0Vycm9yU3dhbCgnQXMgc2VuaGFzIG7Dg8KjbyBjb25mZXJlbSEnKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5yZWdpc3RlckFjY291bnQuZW1haWwgIT09IHRoaXMuY29uZmlybUVtYWlsKSB7XHJcbiAgICAgIHRoaXMudXRpbE1lbnNhZ2VtLnNob3dFcnJvclN3YWwoJ09zIGVtYWlscyBuw4PCo28gY29uZmVyZW0hJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvblBhc3RlQ29uZmlybUVtYWlsKGV2ZW50OiBDbGlwYm9hcmRFdmVudCkge1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHRlcm1vQWNlaXRvT3VEZXNhYmlsaXRhZG8oKSB7XHJcbiAgICBpZiAoIXRoaXMudGVybW9MZ3BkLmhhYmlsaXRhZG8pIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gISF0aGlzLnRlcm1vTGdwZC5hY2VpdG87XHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTmdiTW9kYWwsIE5nYk1vZGFsUmVmIH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQge1JlZ2lzdGVyQ29tcG9uZW50fSBmcm9tICcuL3JlZ2lzdGVyLmNvbXBvbmVudCc7XHJcblxyXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxyXG5leHBvcnQgY2xhc3MgUmVnaXN0ZXJNb2RhbFNlcnZpY2Uge1xyXG4gICAgcHJpdmF0ZSBpc09wZW4gPSBmYWxzZTtcclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBOZ2JNb2RhbCkge31cclxuXHJcbiAgICBvcGVuKCk6IE5nYk1vZGFsUmVmIHtcclxuICAgICAgICBpZiAodGhpcy5pc09wZW4pIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmlzT3BlbiA9IHRydWU7XHJcbiAgICAgICAgY29uc3QgbW9kYWxSZWYgPSB0aGlzLm1vZGFsU2VydmljZS5vcGVuKFJlZ2lzdGVyQ29tcG9uZW50LCB7IGJhY2tkcm9wOiAnc3RhdGljJyB9KTtcclxuICAgICAgICBtb2RhbFJlZi5yZXN1bHQudGhlbihcclxuICAgICAgICAgICAgcmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHJlYXNvbiA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgICAgICByZXR1cm4gbW9kYWxSZWY7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtIdHRwQ2xpZW50LCBIdHRwUmVzcG9uc2V9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtJVXNlcn0gZnJvbSAnLi4vbW9kZWwvdXNlci5tb2RlbCc7XHJcbmltcG9ydCB7Y3JlYXRlUmVxdWVzdE9wdGlvbn0gZnJvbSAnLi4vdXRpbC9yZXF1ZXN0LXV0aWwnO1xyXG5pbXBvcnQge1V0aWxGdW5jdGlvbnN9IGZyb20gJy4uL3V0aWwnO1xyXG5cclxuY29uc3QgU0VSVkVSX0FQSV9VUkwgPSAnLi8nO1xyXG5cclxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcclxuZXhwb3J0IGNsYXNzIFVzZXJTZXJ2aWNlIHtcclxuICBwdWJsaWMgcmVzb3VyY2VVcmwgPSBTRVJWRVJfQVBJX1VSTCArICdhcGkvdXNlcnMnO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQpIHt9XHJcblxyXG4gIGNyZWF0ZSh1c2VyOiBJVXNlcik6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPElVc2VyPj4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PElVc2VyPih0aGlzLnJlc291cmNlVXJsLCB1c2VyLCB7IG9ic2VydmU6ICdyZXNwb25zZScgfSk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGUodXNlcjogSVVzZXIpOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxJVXNlcj4+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucHV0PElVc2VyPih0aGlzLnJlc291cmNlVXJsLCB1c2VyLCB7IG9ic2VydmU6ICdyZXNwb25zZScgfSk7XHJcbiAgfVxyXG5cclxuICBmaW5kKGxvZ2luOiBzdHJpbmcpOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxJVXNlcj4+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElVc2VyPihgJHt0aGlzLnJlc291cmNlVXJsfS8ke2xvZ2lufWAsIHsgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyB9KTtcclxuICB9XHJcblxyXG4gIHF1ZXJ5KHJlcT86IGFueSwgZmlsdGVyPzogc3RyaW5nKTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8SVVzZXJbXT4+IHtcclxuICAgIGNvbnN0IG9wdGlvbnMgPSBjcmVhdGVSZXF1ZXN0T3B0aW9uKHJlcSk7XHJcbiAgICBsZXQgdXJsID0gdGhpcy5yZXNvdXJjZVVybDtcclxuICAgIGlmIChVdGlsRnVuY3Rpb25zLmlzVmFsaWRTdHJpbmdPckFycmF5KGZpbHRlcikpIHtcclxuICAgICAgdXJsICs9ICcvJyArIGVuY29kZVVSSUNvbXBvbmVudChmaWx0ZXIpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SVVzZXJbXT4odXJsLCB7IHBhcmFtczogb3B0aW9ucywgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyB9KTtcclxuICB9XHJcblxyXG4gIGRlbGV0ZShsb2dpbjogc3RyaW5nKTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8YW55Pj4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5kZWxldGUoYCR7dGhpcy5yZXNvdXJjZVVybH0vJHtsb2dpbn1gLCB7IG9ic2VydmU6ICdyZXNwb25zZScgfSk7XHJcbiAgfVxyXG5cclxuICBhdXRob3JpdGllcygpOiBPYnNlcnZhYmxlPHN0cmluZ1tdPiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxzdHJpbmdbXT4oU0VSVkVSX0FQSV9VUkwgKyAnYXBpL3VzZXJzL2F1dGhvcml0aWVzJyk7XHJcbiAgfVxyXG5cclxuICBnZXRBY2VpdGVMZ3BkKGxvZ2luOiBzdHJpbmcsIHRlcm1vSWQ6IG51bWJlcik6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPGFueT4+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PGFueT4oJ2FwaS9wdWJsaWMvdXNlcnMvYWNlaXRlLWxncGQvJyArIGxvZ2luICsgJy8nICsgdGVybW9JZCwge29ic2VydmU6ICdyZXNwb25zZSd9KTtcclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHtBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIE9uRGVzdHJveSwgT25Jbml0LCBSZW5kZXJlciwgVmlld0NoaWxkfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtOZ2JBY3RpdmVNb2RhbCwgTmdiTW9kYWxSZWZ9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHtSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7SmhpRXZlbnRNYW5hZ2VyfSBmcm9tICduZy1qaGlwc3Rlcic7XHJcbmltcG9ydCB7TG9naW5TZXJ2aWNlfSBmcm9tICcuL2xvZ2luLnNlcnZpY2UnO1xyXG5pbXBvcnQge1N0YXRlU3RvcmFnZVNlcnZpY2V9IGZyb20gJy4uL2F1dGgvc3RhdGUtc3RvcmFnZS5zZXJ2aWNlJztcclxuaW1wb3J0IHtSZWdpc3Rlck1vZGFsU2VydmljZX0gZnJvbSAnLi4vcmVnaXN0ZXIvcmVnaXN0ZXItbW9kYWwuc2VydmljZSc7XHJcbmltcG9ydCB7VXRpbEZ1bmN0aW9uc30gZnJvbSAnLi4vdXRpbC91dGlsLWZ1bmN0aW9ucyc7XHJcbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcbmltcG9ydCB7U3ViamVjdH0gZnJvbSAncnhqcy9pbnRlcm5hbC9TdWJqZWN0JztcclxuaW1wb3J0IHtTdWJzY3JpcHRpb259IGZyb20gJ3J4anMvaW50ZXJuYWwvU3Vic2NyaXB0aW9uJztcclxuaW1wb3J0IHtkZWJvdW5jZVRpbWV9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHtVc2VyU2VydmljZX0gZnJvbSAnLi4vdXNlci91c2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQge1V0aWxNZW5zYWdlbX0gZnJvbSAnLi4vYWxlcnQvdXRpbC1tZW5zYWdlbSc7XHJcbmltcG9ydCB7UG9ydGFsQWxlcnRTZXJ2aWNlfSBmcm9tICcuLi9hbGVydC9wb3J0YWwtYWxlcnQuc2VydmljZSc7XHJcbmltcG9ydCB7VGVybW9MZ3BkfSBmcm9tICcuLi9tb2RlbC90ZXJtby1sZ3BkLm1vZGVsJztcclxuaW1wb3J0IHtQYXJhbWV0cm9zU2VydmljZX0gZnJvbSAnLi4vY29tcG9uZW50cy9wYXJhbWV0cm9zL3BhcmFtZXRyb3Muc2VydmljZSc7XHJcbmltcG9ydCB7RU1BSUxfTk9UX0ZPVU5EX1RZUEUsIElOVkFMSURfUEFTU1dPUkRfVFlQRX0gZnJvbSBcIi4uL3V0aWxcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnamhpLWxvZ2luLW1vZGFsJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vbG9naW4uY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWydsb2dpbi5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBKaGlMb2dpbk1vZGFsQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIGF1dGhlbnRpY2F0aW9uRXJyb3I6IGJvb2xlYW47XHJcbiAgYXV0aGVudGljYXRpb25FcnJvck1lc3NhZ2U6IHN0cmluZztcclxuICBwYXNzd29yZDogc3RyaW5nO1xyXG4gIHJlbWVtYmVyTWU6IGJvb2xlYW47XHJcbiAgdXNlcm5hbWU6IHN0cmluZztcclxuICBjcmVkZW50aWFsczogYW55O1xyXG4gIG1vZGFsUmVmOiBOZ2JNb2RhbFJlZjtcclxuICBoaW50OiBzdHJpbmc7XHJcbiAgdGVybW9MZ3BkSmFBY2VpdG86IG51bWJlcjtcclxuICBsZ3BkSGFiaWxpdGFkYTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGV4aWJpclRlcm1vOiBib29sZWFuID0gZmFsc2U7XHJcbiAgdGVybW9MZ3BkOiBUZXJtb0xncGQ7XHJcbiAgZGVib3VuY2VUaW1lID0gNTAwO1xyXG4gIG1vZGVsQ2hhbmdlZDogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xyXG4gIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG4gIGxvYWRpbmcgPSBmYWxzZTtcclxuICBwbGFjZWhvbGRlclVzZXJuYW1lQ3VzdG9taXphZG8gPSAnJztcclxuICBpc09jdWx0YXJDcmlhck5vdmFDb250YSA9IGZhbHNlO1xyXG4gIG1lbnNhZ2VtVGVsYUxvZ2luID0gJyc7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBldmVudE1hbmFnZXI6IEpoaUV2ZW50TWFuYWdlcixcclxuICAgIHByaXZhdGUgbG9naW5TZXJ2aWNlOiBMb2dpblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHN0YXRlU3RvcmFnZVNlcnZpY2U6IFN0YXRlU3RvcmFnZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXHJcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcixcclxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwcml2YXRlIHJlZ2lzdGVyTW9kYWxTZXJ2aWNlOiBSZWdpc3Rlck1vZGFsU2VydmljZSxcclxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcclxuICAgIHByaXZhdGUgdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBhbGVydFNlcnZpY2U6IFBvcnRhbEFsZXJ0U2VydmljZSxcclxuICAgIHB1YmxpYyBhY3RpdmVNb2RhbDogTmdiQWN0aXZlTW9kYWwsXHJcbiAgICBwcml2YXRlIHBhcmFtZXRyb1NlcnZpY2U6IFBhcmFtZXRyb3NTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB1dGlsTWVuc2FnZW06IFV0aWxNZW5zYWdlbVxyXG4gICkge1xyXG4gICAgdGhpcy5jcmVkZW50aWFscyA9IHt9O1xyXG4gICAgdGhpcy50ZXJtb0xncGQgPSBuZXcgVGVybW9MZ3BkKCk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMucmVuZGVyZXIuaW52b2tlRWxlbWVudE1ldGhvZCh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcjdXNlcm5hbWUnKSwgJ2ZvY3VzJywgW10pLCAwKTtcclxuICAgIHRoaXMuZXhpYmlyVGVybW9MZ3BkKCk7XHJcbiAgfVxyXG5cclxuICBjYW5jZWwoKSB7XHJcbiAgICB0aGlzLmNyZWRlbnRpYWxzID0ge1xyXG4gICAgICB1c2VybmFtZTogbnVsbCxcclxuICAgICAgcGFzc3dvcmQ6IG51bGwsXHJcbiAgICAgIHJlbWVtYmVyTWU6IHRydWUsXHJcbiAgICAgIHRlcm1vTGdwZEFjZWl0bzogbnVsbCxcclxuICAgICAgZG9jdW1lbnRvTGdwZDogbnVsbFxyXG4gICAgfTtcclxuICAgIHRoaXMuYXV0aGVudGljYXRpb25FcnJvciA9IGZhbHNlO1xyXG4gICAgdGhpcy5hY3RpdmVNb2RhbC5kaXNtaXNzKCdjYW5jZWwnKTtcclxuICB9XHJcblxyXG4gIGxvZ2luKCkge1xyXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuICAgIGxldCBsb2dpbiA9IHRoaXMudXNlcm5hbWU7XHJcbiAgICBpZiAoIWxvZ2luLmluY2x1ZGVzKCdAJykpIHtcclxuICAgICAgLy9sb2dpbiA9IFV0aWxGdW5jdGlvbnMucmVtb3ZlTm9uQWxwaGFOdW1lcmljKGxvZ2luKTtcclxuICAgIH1cclxuICAgIHRoaXMuY3JlZGVudGlhbHMgPSB7XHJcbiAgICAgIHVzZXJuYW1lOiBsb2dpbixcclxuICAgICAgcGFzc3dvcmQ6IHRoaXMucGFzc3dvcmQsXHJcbiAgICAgIHJlbWVtYmVyTWU6IHRoaXMucmVtZW1iZXJNZSxcclxuICAgICAgdGVybW9MZ3BkQWNlaXRvOiB0aGlzLnRlcm1vTGdwZC5pZCAmJiB0aGlzLnRlcm1vTGdwZC5hY2VpdG8gPyB0aGlzLnRlcm1vTGdwZC5pZCA6IHRoaXMudGVybW9MZ3BkSmFBY2VpdG8gIT09IG51bGwgPyB0aGlzLnRlcm1vTGdwZEphQWNlaXRvIDogbnVsbCxcclxuICAgICAgZG9jdW1lbnRvTGdwZDogdGhpcy50ZXJtb0xncGQuZG9jdW1lbnRvX2luY1xyXG4gICAgfTtcclxuICAgIHRoaXMubG9naW5TZXJ2aWNlLmxvZ2luKHRoaXMuY3JlZGVudGlhbHMpXHJcbiAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICB0aGlzLmF1dGhlbnRpY2F0aW9uRXJyb3IgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmFjdGl2ZU1vZGFsLmRpc21pc3MoJ2xvZ2luIHN1Y2Nlc3MnKTtcclxuICAgICAgICBpZiAodGhpcy5yb3V0ZXIudXJsID09PSAnL3JlZ2lzdGVyJyB8fCB0aGlzLnJvdXRlci51cmwuaW5jbHVkZXMoJ2FjdGl2YXRlJykgfHwgdGhpcy5yb3V0ZXIudXJsLmluY2x1ZGVzKCdyZXNldCcpKSB7XHJcbiAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJyddKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmlzQXRSb290KCkpIHtcclxuICAgICAgICAgIHRoaXMucmVmcmVzaFBhZ2UoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZXZlbnRNYW5hZ2VyLmJyb2FkY2FzdCh7XHJcbiAgICAgICAgICBuYW1lOiAnYXV0aGVudGljYXRpb25TdWNjZXNzJyxcclxuICAgICAgICAgIGNvbnRlbnQ6ICdTZW5kaW5nIEF1dGhlbnRpY2F0aW9uIFN1Y2Nlc3MnXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgLy8gcHJldmlvdXNTdGF0ZSB3YXMgc2V0IGluIHRoZSBhdXRoRXhwaXJlZEludGVyY2VwdG9yIGJlZm9yZSBiZWluZyByZWRpcmVjdGVkIHRvIGxvZ2luIG1vZGFsLlxyXG4gICAgICAgIC8vIHNpbmNlIGxvZ2luIGlzIHN1Y2Nlc2Z1bCwgZ28gdG8gc3RvcmVkIHByZXZpb3VzU3RhdGUgYW5kIGNsZWFyIHByZXZpb3VzU3RhdGVcclxuICAgICAgICBjb25zdCByZWRpcmVjdCA9IHRoaXMuc3RhdGVTdG9yYWdlU2VydmljZS5nZXRVcmwoKTtcclxuICAgICAgICBpZiAocmVkaXJlY3QpIHtcclxuICAgICAgICAgIHRoaXMuc3RhdGVTdG9yYWdlU2VydmljZS5zdG9yZVVybChudWxsKTtcclxuICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtyZWRpcmVjdF0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICAgLmNhdGNoKHJlc3BvbnNlID0+IHtcclxuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MDEgJiYgcmVzcG9uc2UuZXJyb3IudHlwZSA9PT0gRU1BSUxfTk9UX0ZPVU5EX1RZUEUpIHtcclxuICAgICAgICAgIHRoaXMuYXV0aGVudGljYXRpb25FcnJvck1lc3NhZ2UgPSAnbG9naW4ubWVzc2FnZXMuZXJyb3IuaW52YWxpZC1sb2dpbic7XHJcbiAgICAgICAgfSBlbHNlIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDQwMSAmJiByZXNwb25zZS5lcnJvci50eXBlID09PSBJTlZBTElEX1BBU1NXT1JEX1RZUEUpIHtcclxuICAgICAgICAgIHRoaXMuYXV0aGVudGljYXRpb25FcnJvck1lc3NhZ2UgPSAnbG9naW4ubWVzc2FnZXMuZXJyb3IuaW52YWxpZC1wYXNzd29yZCc7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuYXV0aGVudGljYXRpb25FcnJvck1lc3NhZ2UgPSAnbG9naW4ubWVzc2FnZXMuZXJyb3IuYXV0aGVudGljYXRpb24nO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmF1dGhlbnRpY2F0aW9uRXJyb3IgPSB0cnVlO1xyXG4gICAgICB9KVxyXG4gICAgICAuZmluYWxseSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgaXNBdFJvb3QoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5yb3V0ZXIudXJsID09PSAnLycgfHwgdGhpcy5yb3V0ZXIudXJsID09PSAnJztcclxuICB9XHJcblxyXG4gIHJlZnJlc2hQYWdlKCkge1xyXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgnLycsIHsgc2tpcExvY2F0aW9uQ2hhbmdlOiB0cnVlIH0pLnRoZW4oKCkgPT4ge1xyXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbdGhpcy5yb3V0ZXIudXJsXSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyKCkge1xyXG4gICAgdGhpcy5hY3RpdmVNb2RhbC5kaXNtaXNzKCd0byBzdGF0ZSByZWdpc3RlcicpO1xyXG4gICAgdGhpcy5tb2RhbFJlZiA9IHRoaXMucmVnaXN0ZXJNb2RhbFNlcnZpY2Uub3BlbigpO1xyXG4gIH1cclxuXHJcbiAgcmVxdWVzdFJlc2V0UGFzc3dvcmQoKSB7XHJcbiAgICB0aGlzLmFjdGl2ZU1vZGFsLmRpc21pc3MoJ3RvIHN0YXRlIHJlcXVlc3RSZXNldCcpO1xyXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvcmVzZXQnLCAncmVxdWVzdCddKTtcclxuICB9XHJcblxyXG4gIGdldFRyYW5zbGF0aW9uKGtleTogc3RyaW5nLCBkZWZhdWx0VmFsdWU6IHN0cmluZykge1xyXG4gICAgaWYgKFV0aWxGdW5jdGlvbnMuaXNWYWxpZFN0cmluZ09yQXJyYXkodGhpcy5oaW50KSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5oaW50O1xyXG4gICAgfVxyXG4gICAgY29uc3QgdHJhbnNsYXRlZCA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGtleSk7XHJcbiAgICBpZiAodHJhbnNsYXRlZC5zdGFydHNXaXRoKCd0cmFuc2xhdGlvbi1ub3QtZm91bmQnKSkge1xyXG4gICAgICB0aGlzLmhpbnQgPSBkZWZhdWx0VmFsdWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmhpbnQgPSB0cmFuc2xhdGVkO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuaGludDtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5hbGVydFNlcnZpY2UuY2xlYXIoKTtcclxuICAgIHRoaXMuZ2V0VXNlcm5hbWVQbGFjZWhvbGRlcigpO1xyXG4gICAgdGhpcy5vY3VsdGFyQ3JpYXJOb3ZhQ29udGEoKTtcclxuICAgIHRoaXMuY2FycmVnYXJNZW5zYWdlbVRlbGFMb2dpbigpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5zdWJzY3JpcHRpb24pIHtcclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlucHV0Q2hhbmdlZCgpIHtcclxuICAgIHRoaXMubW9kZWxDaGFuZ2VkLm5leHQoKTtcclxuICB9XHJcblxyXG4gIGhhYmlsaXRhckJvdGFvRW50cmFyKCk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgaGFiaWxpdGFyID0gVXRpbEZ1bmN0aW9ucy5pc1ZhbGlkU3RyaW5nT3JBcnJheSh0aGlzLnVzZXJuYW1lKSA9PT0gdHJ1ZSAmJiBVdGlsRnVuY3Rpb25zLmlzVmFsaWRTdHJpbmdPckFycmF5KHRoaXMucGFzc3dvcmQpID09PSB0cnVlICYmXHJcbiAgICAgICgoVXRpbEZ1bmN0aW9ucy5pc1ZhbGlkT2JqZWN0KHRoaXMudGVybW9MZ3BkLmhhYmlsaXRhZG8pID09PSBmYWxzZSB8fCB0aGlzLnRlcm1vTGdwZC5oYWJpbGl0YWRvID09PSBmYWxzZSkgPyB0cnVlIDpcclxuICAgICAgICAoVXRpbEZ1bmN0aW9ucy5pc1ZhbGlkT2JqZWN0KHRoaXMudGVybW9MZ3BkSmFBY2VpdG8pID09PSB0cnVlIHx8IHRoaXMudGVybW9MZ3BkLmFjZWl0byA9PT0gdHJ1ZSkpO1xyXG4gICAgcmV0dXJuIGhhYmlsaXRhcjtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZXhpYmlyVGVybW9MZ3BkKCkge1xyXG4gICAgdGhpcy5wYXJhbWV0cm9TZXJ2aWNlLmdldFBhcmFtZXRyb3NCeU5hbWUoJ0hBQklMSVRBUl9MR1BEJylcclxuICAgICAgLnRoZW4ocmVzcCA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3AudmFsb3IgPT09IHRydWUpIHtcclxuICAgICAgICAgIHRoaXMubGdwZEhhYmlsaXRhZGEgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLm1vZGVsQ2hhbmdlZFxyXG4gICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICBkZWJvdW5jZVRpbWUodGhpcy5kZWJvdW5jZVRpbWUpLFxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuY2hlY2tUZXJtb0FjZWl0bygpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIC5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgIHRoaXMudXRpbE1lbnNhZ2VtLnNob3dFcnJvckRldGFpbGVkKGVycik7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjaGVja1Rlcm1vQWNlaXRvKCkge1xyXG4gICAgaWYgKHRoaXMudGVybW9MZ3BkLmlkICYmICF0aGlzLnRlcm1vTGdwZC5lcnJvcykge1xyXG4gICAgICB0aGlzLnRlcm1vTGdwZC5hY2VpdG8gPSB0aGlzLmV4aWJpclRlcm1vID0gZmFsc2U7XHJcbiAgICAgIGxldCBsb2dpbiA9IHRoaXMudXNlcm5hbWU7XHJcbiAgICAgIGlmICghbG9naW4uaW5jbHVkZXMoJ0AnKSkge1xyXG4gICAgICAgIGxvZ2luID0gVXRpbEZ1bmN0aW9ucy5yZW1vdmVOb25BbHBoYU51bWVyaWMobG9naW4pO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChsb2dpbiAmJiBsb2dpbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgdGhpcy51c2VyU2VydmljZS5nZXRBY2VpdGVMZ3BkKGxvZ2luLCB0aGlzLnRlcm1vTGdwZC5pZCkuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgIHRoaXMudGVybW9MZ3BkSmFBY2VpdG8gPSByZXNwb25zZS5ib2R5O1xyXG4gICAgICAgICAgaWYgKHRoaXMudGVybW9MZ3BkSmFBY2VpdG8gPT09IG51bGwgfHwgKHRoaXMudGVybW9MZ3BkSmFBY2VpdG8gIT09ICt0aGlzLnRlcm1vTGdwZC5pZCkpIHtcclxuICAgICAgICAgICAgdGhpcy5leGliaXJUZXJtbyA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuY2hlY2tUZXJtb0FjZWl0bygpO1xyXG4gICAgICB9LCAxMDAwKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFVzZXJuYW1lUGxhY2Vob2xkZXIoKSB7XHJcbiAgICBjb25zdCBwbGFjZWhvbGRlclBhZHJhbyA9IHRoaXMuZ2V0VHJhbnNsYXRpb24oJ2dsb2JhbC5sb2dpbi5wbGFjZWhvbGRlcicsICdDUEYvQ05QSiBvdSBlbWFpbCcpO1xyXG5cclxuICAgIHRoaXMucGFyYW1ldHJvU2VydmljZVxyXG4gICAgICAuZ2V0UGFyYW1ldHJvc0J5TmFtZSgnREVTQ1JJQ0FPX0NBTVBPX0xPR0lOJylcclxuICAgICAgLnRoZW4odmFsb3IgPT4ge1xyXG4gICAgICAgIGNvbnN0IHJlc3AgPSB2YWxvci52YWxvcjtcclxuXHJcbiAgICAgICAgaWYgKCFyZXNwIHx8IHJlc3AudHJpbSgpLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgdGhpcy5wbGFjZWhvbGRlclVzZXJuYW1lQ3VzdG9taXphZG8gPSBwbGFjZWhvbGRlclBhZHJhbztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5wbGFjZWhvbGRlclVzZXJuYW1lQ3VzdG9taXphZG8gPSByZXNwLnRyaW0oKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICB9KS5jYXRjaCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5wbGFjZWhvbGRlclVzZXJuYW1lQ3VzdG9taXphZG8gPSBwbGFjZWhvbGRlclBhZHJhbztcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb2N1bHRhckNyaWFyTm92YUNvbnRhKCkge1xyXG4gICAgdGhpcy5wYXJhbWV0cm9TZXJ2aWNlXHJcbiAgICAgIC5nZXRQYXJhbWV0cm9zQnlOYW1lKCdPQ1VMVEFSX0xJTktfQ1JJQUNBT19DT05UQScpXHJcbiAgICAgIC50aGVuKHJlc3AgPT4ge1xyXG4gICAgICAgIHRoaXMuaXNPY3VsdGFyQ3JpYXJOb3ZhQ29udGEgPSByZXNwLnZhbG9yICYmIHJlc3AudmFsb3IgPT09IHRydWU7XHJcbiAgICAgIH0pXHJcbiAgICAgIC5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdlcnJvJywgZXJyKTtcclxuICAgICAgICB0aGlzLmlzT2N1bHRhckNyaWFyTm92YUNvbnRhID0gZmFsc2U7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgY2FycmVnYXJNZW5zYWdlbVRlbGFMb2dpbigpIHtcclxuICAgIHRoaXMucGFyYW1ldHJvU2VydmljZVxyXG4gICAgICAuZ2V0UGFyYW1ldHJvc0J5TmFtZSgnTUVOU0FHRU1fVEVMQV9MT0dJTicpXHJcbiAgICAgIC50aGVuKHJlc3AgPT4ge1xyXG4gICAgICAgIGlmIChVdGlsRnVuY3Rpb25zLmlzVmFsaWRPYmplY3QocmVzcCkgPT09IHRydWUgJiYgdHlwZW9mIHJlc3AudmFsb3IgPT09ICdzdHJpbmcnICYmIHJlc3AudmFsb3IudHJpbSgpLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIHRoaXMubWVuc2FnZW1UZWxhTG9naW4gPSByZXNwLnZhbG9yLnRyaW0oKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge05nYk1vZGFsLCBOZ2JNb2RhbFJlZn0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQge0poaUxvZ2luTW9kYWxDb21wb25lbnR9IGZyb20gJy4vbG9naW4uY29tcG9uZW50JztcclxuXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXHJcbmV4cG9ydCBjbGFzcyBMb2dpbk1vZGFsU2VydmljZSB7XHJcbiAgICBwcml2YXRlIGlzT3BlbiA9IGZhbHNlO1xyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE5nYk1vZGFsKSB7fVxyXG5cclxuICAgIG9wZW4oKTogTmdiTW9kYWxSZWYge1xyXG4gICAgICAgIGlmICh0aGlzLmlzT3Blbikge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaXNPcGVuID0gdHJ1ZTtcclxuICAgICAgICBjb25zdCBtb2RhbFJlZiA9IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oSmhpTG9naW5Nb2RhbENvbXBvbmVudCwgeyBiYWNrZHJvcDogJ3N0YXRpYycgfSk7XHJcbiAgICAgICAgbW9kYWxSZWYucmVzdWx0LnRoZW4oXHJcbiAgICAgICAgICAgIHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICByZWFzb24gPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc09wZW4gPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuIG1vZGFsUmVmO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7SW5qZWN0YWJsZSwgaXNEZXZNb2RlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBDYW5BY3RpdmF0ZSwgUm91dGVyLCBSb3V0ZXJTdGF0ZVNuYXBzaG90fSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQge0xvZ2luTW9kYWxTZXJ2aWNlfSBmcm9tICcuLi9sb2dpbi9sb2dpbi1tb2RhbC5zZXJ2aWNlJztcclxuaW1wb3J0IHtQcmluY2lwYWx9IGZyb20gJy4vcHJpbmNpcGFsLnNlcnZpY2UnO1xyXG5pbXBvcnQge1N0YXRlU3RvcmFnZVNlcnZpY2V9IGZyb20gJy4vc3RhdGUtc3RvcmFnZS5zZXJ2aWNlJztcclxuXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXHJcbmV4cG9ydCBjbGFzcyBVc2VyUm91dGVBY2Nlc3NTZXJ2aWNlIGltcGxlbWVudHMgQ2FuQWN0aXZhdGUge1xyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgICAgICBwcml2YXRlIGxvZ2luTW9kYWxTZXJ2aWNlOiBMb2dpbk1vZGFsU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHByaW5jaXBhbDogUHJpbmNpcGFsLFxyXG4gICAgICAgIHByaXZhdGUgc3RhdGVTdG9yYWdlU2VydmljZTogU3RhdGVTdG9yYWdlU2VydmljZVxyXG4gICAgKSB7fVxyXG5cclxuICAgIGNhbkFjdGl2YXRlKHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBzdGF0ZTogUm91dGVyU3RhdGVTbmFwc2hvdCk6IGJvb2xlYW4gfCBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgICAgICBjb25zdCBhdXRob3JpdGllcyA9IHJvdXRlLmRhdGFbJ2F1dGhvcml0aWVzJ107XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2tMb2dpbihhdXRob3JpdGllcywgc3RhdGUudXJsKTtcclxuICAgIH1cclxuXHJcbiAgICBjaGVja0xvZ2luKGF1dGhvcml0aWVzOiBzdHJpbmdbXSwgdXJsOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgICAgICBjb25zdCBwcmluY2lwYWwgPSB0aGlzLnByaW5jaXBhbDtcclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFxyXG4gICAgICAgICAgICBwcmluY2lwYWwuaWRlbnRpdHkoKS50aGVuKGFjY291bnQgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFhdXRob3JpdGllcyB8fCBhdXRob3JpdGllcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoYWNjb3VudCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAocHJpbmNpcGFsLnByZWNpc2FBdHVhbGl6YWNhb0NhZGFzdHJhbChhY2NvdW50KSAmJiB1cmwgIT09IHByaW5jaXBhbC5nZXRSb3RhQXR1YWxpemFjYW9DYWRhc3RyYWwoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChwcmluY2lwYWwuZ2V0Um90YUF0dWFsaXphY2FvQ2FkYXN0cmFsKCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByaW5jaXBhbC5oYXNBbnlBdXRob3JpdHkoYXV0aG9yaXRpZXMpLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignVXNlciBoYXMgbm90IGFueSBvZiByZXF1aXJlZCBhdXRob3JpdGllczogJywgYXV0aG9yaXRpZXMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlU3RvcmFnZVNlcnZpY2Uuc3RvcmVVcmwodXJsKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnYWNjZXNzZGVuaWVkJ10pLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghYWNjb3VudCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2luTW9kYWxTZXJ2aWNlLm9wZW4oKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG59XHJcbiIsImV4cG9ydCBjbGFzcyBBY2NvdW50IHtcbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIGFjdGl2YXRlZDogYm9vbGVhbixcbiAgICAgICAgcHVibGljIGF1dGhvcml0aWVzOiBzdHJpbmdbXSxcbiAgICAgICAgcHVibGljIGVtYWlsOiBzdHJpbmcsXG4gICAgICAgIHB1YmxpYyBmaXJzdE5hbWU6IHN0cmluZyxcbiAgICAgICAgcHVibGljIGxhbmdLZXk6IHN0cmluZyxcbiAgICAgICAgcHVibGljIGxhc3ROYW1lOiBzdHJpbmcsXG4gICAgICAgIHB1YmxpYyBsb2dpbjogc3RyaW5nLFxuICAgICAgICBwdWJsaWMgaW1hZ2VVcmw6IHN0cmluZyxcbiAgICAgICAgcHVibGljIHRlbGVmb25lPzogc3RyaW5nLFxuICAgICAgICBwdWJsaWMgZGF0YVVsdGltYUF0dWFsaXphY2FvQ2FkYXN0cmFsPzogc3RyaW5nLFxuICAgICAgICBwdWJsaWMgYXR1YWxpemFjYW9DYWRhc3RyYWxPYnJpZ2F0b3JpYT86IGJvb2xlYW4sXG4gICAgICAgIHB1YmxpYyBtZW5zYWdlbUF0dWFsaXphY2FvQ2FkYXN0cmFsPzogc3RyaW5nXG4gICAgKSB7fVxufVxuIiwiZXhwb3J0IGludGVyZmFjZSBJVXNlciB7XHJcbiAgICBpZD86IGFueTtcclxuICAgIGxvZ2luPzogc3RyaW5nO1xyXG4gICAgZmlyc3ROYW1lPzogc3RyaW5nO1xyXG4gICAgbGFzdE5hbWU/OiBzdHJpbmc7XHJcbiAgICBlbWFpbD86IHN0cmluZztcclxuICAgIGFjdGl2YXRlZD86IGJvb2xlYW47XHJcbiAgICBsYW5nS2V5Pzogc3RyaW5nO1xyXG4gICAgYXV0aG9yaXRpZXM/OiBhbnlbXTtcclxuICAgIGNyZWF0ZWRCeT86IHN0cmluZztcclxuICAgIGNyZWF0ZWREYXRlPzogRGF0ZTtcclxuICAgIGxhc3RNb2RpZmllZEJ5Pzogc3RyaW5nO1xyXG4gICAgbGFzdE1vZGlmaWVkRGF0ZT86IERhdGU7XHJcbiAgICBwYXNzd29yZD86IHN0cmluZztcclxuICAgIGFjZWl0ZUxncGQ/OiBib29sZWFuO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgVXNlciBpbXBsZW1lbnRzIElVc2VyIHtcclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHB1YmxpYyBpZD86IGFueSxcclxuICAgICAgICBwdWJsaWMgbG9naW4/OiBzdHJpbmcsXHJcbiAgICAgICAgcHVibGljIGZpcnN0TmFtZT86IHN0cmluZyxcclxuICAgICAgICBwdWJsaWMgbGFzdE5hbWU/OiBzdHJpbmcsXHJcbiAgICAgICAgcHVibGljIGVtYWlsPzogc3RyaW5nLFxyXG4gICAgICAgIHB1YmxpYyBhY3RpdmF0ZWQ/OiBib29sZWFuLFxyXG4gICAgICAgIHB1YmxpYyBsYW5nS2V5Pzogc3RyaW5nLFxyXG4gICAgICAgIHB1YmxpYyBhdXRob3JpdGllcz86IGFueVtdLFxyXG4gICAgICAgIHB1YmxpYyBjcmVhdGVkQnk/OiBzdHJpbmcsXHJcbiAgICAgICAgcHVibGljIGNyZWF0ZWREYXRlPzogRGF0ZSxcclxuICAgICAgICBwdWJsaWMgbGFzdE1vZGlmaWVkQnk/OiBzdHJpbmcsXHJcbiAgICAgICAgcHVibGljIGxhc3RNb2RpZmllZERhdGU/OiBEYXRlLFxyXG4gICAgICAgIHB1YmxpYyBwYXNzd29yZD86IHN0cmluZyxcclxuICAgICAgICBwdWJsaWMgYWNlaXRlTGdwZD86IGJvb2xlYW5cclxuICAgICkge1xyXG4gICAgICAgIHRoaXMuaWQgPSBpZCA/IGlkIDogbnVsbDtcclxuICAgICAgICB0aGlzLmxvZ2luID0gbG9naW4gPyBsb2dpbiA6IG51bGw7XHJcbiAgICAgICAgdGhpcy5maXJzdE5hbWUgPSBmaXJzdE5hbWUgPyBmaXJzdE5hbWUgOiBudWxsO1xyXG4gICAgICAgIHRoaXMubGFzdE5hbWUgPSBsYXN0TmFtZSA/IGxhc3ROYW1lIDogbnVsbDtcclxuICAgICAgICB0aGlzLmVtYWlsID0gZW1haWwgPyBlbWFpbCA6IG51bGw7XHJcbiAgICAgICAgdGhpcy5hY3RpdmF0ZWQgPSBhY3RpdmF0ZWQgPyBhY3RpdmF0ZWQgOiBmYWxzZTtcclxuICAgICAgICB0aGlzLmxhbmdLZXkgPSBsYW5nS2V5ID8gbGFuZ0tleSA6IG51bGw7XHJcbiAgICAgICAgdGhpcy5hdXRob3JpdGllcyA9IGF1dGhvcml0aWVzID8gYXV0aG9yaXRpZXMgOiBudWxsO1xyXG4gICAgICAgIHRoaXMuY3JlYXRlZEJ5ID0gY3JlYXRlZEJ5ID8gY3JlYXRlZEJ5IDogbnVsbDtcclxuICAgICAgICB0aGlzLmNyZWF0ZWREYXRlID0gY3JlYXRlZERhdGUgPyBjcmVhdGVkRGF0ZSA6IG51bGw7XHJcbiAgICAgICAgdGhpcy5sYXN0TW9kaWZpZWRCeSA9IGxhc3RNb2RpZmllZEJ5ID8gbGFzdE1vZGlmaWVkQnkgOiBudWxsO1xyXG4gICAgICAgIHRoaXMubGFzdE1vZGlmaWVkRGF0ZSA9IGxhc3RNb2RpZmllZERhdGUgPyBsYXN0TW9kaWZpZWREYXRlIDogbnVsbDtcclxuICAgICAgICB0aGlzLnBhc3N3b3JkID0gcGFzc3dvcmQgPyBwYXNzd29yZCA6IG51bGw7XHJcbiAgICAgICAgdGhpcy5hY2VpdGVMZ3BkID0gYWNlaXRlTGdwZCA/IGFjZWl0ZUxncGQgOiBmYWxzZTtcclxuICAgIH1cclxufVxyXG4iLCJleHBvcnQgaW50ZXJmYWNlIElFbXByZXNhIHtcclxuICAgIGlkPzogbnVtYmVyO1xyXG4gICAgcmF6YW9Tb2NpYWw/OiBzdHJpbmc7XHJcbiAgICBub21lRmFudGFzaWE/OiBzdHJpbmc7XHJcbiAgICB0ZWxlZm9uZT86IHN0cmluZztcclxuICAgIGxvZ29Db250ZW50VHlwZT86IHN0cmluZztcclxuICAgIGxvZ28/OiBhbnk7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBFbXByZXNhIGltcGxlbWVudHMgSUVtcHJlc2Ege1xyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHVibGljIGlkPzogbnVtYmVyLFxyXG4gICAgICAgIHB1YmxpYyByYXphb1NvY2lhbD86IHN0cmluZyxcclxuICAgICAgICBwdWJsaWMgbm9tZUZhbnRhc2lhPzogc3RyaW5nLFxyXG4gICAgICAgIHB1YmxpYyB0ZWxlZm9uZT86IHN0cmluZyxcclxuICAgICAgICBwdWJsaWMgbG9nb0NvbnRlbnRUeXBlPzogc3RyaW5nLFxyXG4gICAgICAgIHB1YmxpYyBsb2dvPzogYW55XHJcbiAgICApIHt9XHJcbn1cclxuIiwiZXhwb3J0IGludGVyZmFjZSBJTWVudSB7XHJcbiAgICBpZD86IG51bWJlcjtcclxuICAgIG5vbWU/OiBzdHJpbmc7XHJcbiAgICByb3RhPzogc3RyaW5nO1xyXG4gICAgaWNvbmU/OiBzdHJpbmc7XHJcbiAgICBjb3I/OiBzdHJpbmc7XHJcbiAgICBtb2R1bG8/OiBzdHJpbmc7XHJcbiAgICBzZXJ2aWNvPzogc3RyaW5nO1xyXG4gICAgYXRpdm8/OiBib29sZWFuO1xyXG4gICAgZXhpYmlyPzogYm9vbGVhbjtcclxuICAgIHBlcmlvZG9JbmljaWFsPzogRGF0ZTtcclxuICAgIHBlcmlvZG9GaW5hbD86IERhdGU7XHJcbiAgICBwYWk/OiBJTWVudTtcclxuICAgIHN1Yk1lbnVzPzogSU1lbnVbXTtcclxuICAgIGxvZ2luUGVsb0FwcD86IGJvb2xlYW47XHJcbiAgICBzZW1wcmVWaXNpdmVsPzogYm9vbGVhbjtcclxuICAgIHZpc2l2ZWxTb21lbnRlUGFyYUdlc3Rvcj86IGJvb2xlYW47XHJcbiAgICBzZXF1ZW5jaWE/OiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBNZW51IGltcGxlbWVudHMgSU1lbnUge1xyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHVibGljIGlkPzogbnVtYmVyLFxyXG4gICAgICAgIHB1YmxpYyBub21lPzogc3RyaW5nLFxyXG4gICAgICAgIHB1YmxpYyByb3RhPzogc3RyaW5nLFxyXG4gICAgICAgIHB1YmxpYyBpY29uZT86IHN0cmluZyxcclxuICAgICAgICBwdWJsaWMgY29yPzogc3RyaW5nLFxyXG4gICAgICAgIHB1YmxpYyBtb2R1bG8/OiBzdHJpbmcsXHJcbiAgICAgICAgcHVibGljIHNlcnZpY28/OiBzdHJpbmcsXHJcbiAgICAgICAgcHVibGljIGF0aXZvPzogYm9vbGVhbixcclxuICAgICAgICBwdWJsaWMgZXhpYmlyPzogYm9vbGVhbixcclxuICAgICAgICBwdWJsaWMgcGVyaW9kb0luaWNpYWw/OiBEYXRlLFxyXG4gICAgICAgIHB1YmxpYyBwZXJpb2RvRmluYWw/OiBEYXRlLFxyXG4gICAgICAgIHB1YmxpYyBwYWk/OiBNZW51LFxyXG4gICAgICAgIHB1YmxpYyBzdWJNZW51cz86IElNZW51W10sXHJcbiAgICAgICAgcHVibGljIGxvZ2luUGVsb0FwcD86IGJvb2xlYW4sXHJcbiAgICAgICAgcHVibGljIHNlbXByZVZpc2l2ZWw/OiBib29sZWFuLFxyXG4gICAgICAgIHB1YmxpYyB2aXNpdmVsU29tZW50ZVBhcmFHZXN0b3I/OiBib29sZWFuLFxyXG4gICAgICAgIHB1YmxpYyBzZXF1ZW5jaWE/OiBudW1iZXJcclxuICAgICkge1xyXG4gICAgICAgIHRoaXMuYXRpdm8gPSB0aGlzLmF0aXZvIHx8IGZhbHNlO1xyXG4gICAgfVxyXG59XHJcbiIsImV4cG9ydCBjbGFzcyBHYXRld2F5Um91dGUge1xyXG4gICAgY29uc3RydWN0b3IocHVibGljIHBhdGg6IHN0cmluZywgcHVibGljIHNlcnZpY2VJZDogc3RyaW5nLCBwdWJsaWMgc2VydmljZUluc3RhbmNlczogYW55W10pIHt9XHJcbn1cclxuIiwiaW1wb3J0IHsgQXVkaXREYXRhIH0gZnJvbSAnLi9hdWRpdC1kYXRhLm1vZGVsJztcclxuXHJcbmV4cG9ydCBjbGFzcyBBdWRpdCB7XHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgZGF0YTogQXVkaXREYXRhLCBwdWJsaWMgcHJpbmNpcGFsOiBzdHJpbmcsIHB1YmxpYyB0aW1lc3RhbXA6IHN0cmluZywgcHVibGljIHR5cGU6IHN0cmluZykge31cclxufVxyXG4iLCJleHBvcnQgY2xhc3MgQXVkaXREYXRhIHtcclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyByZW1vdGVBZGRyZXNzOiBzdHJpbmcsIHB1YmxpYyBzZXNzaW9uSWQ6IHN0cmluZywgcHVibGljIGxvZzogc3RyaW5nKSB7fVxyXG59XHJcbiIsImV4cG9ydCBjbGFzcyBMb2cge1xyXG4gICAgY29uc3RydWN0b3IocHVibGljIG5hbWU6IHN0cmluZywgcHVibGljIGxldmVsOiBzdHJpbmcpIHt9XHJcbn1cclxuIiwiZXhwb3J0IGNsYXNzIFByb2ZpbGVJbmZvIHtcclxuICAgIGFjdGl2ZVByb2ZpbGVzOiBzdHJpbmdbXTtcclxuICAgIHJpYmJvbkVudjogc3RyaW5nO1xyXG4gICAgaW5Qcm9kdWN0aW9uOiBib29sZWFuO1xyXG4gICAgc3dhZ2dlckVuYWJsZWQ6IGJvb2xlYW47XHJcbn1cclxuIiwiXHJcbmltcG9ydCB7UGFpc30gZnJvbSAnLi9wYWlzLm1vZGVsJztcclxuXHJcbmV4cG9ydCBjbGFzcyBNdW5pY2lwaW8ge1xyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgIHB1YmxpYyBpZD86IHN0cmluZyxcclxuICAgICAgcHVibGljIGRlc2NyaWNhbz86IHN0cmluZyxcclxuICAgICAgcHVibGljIGVzdGFkbz86IHN0cmluZyxcclxuICAgICAgcHVibGljIHBhaXM/OiBQYWlzXHJcbiAgICApIHt9XHJcbn1cclxuIiwiaW1wb3J0IHtUaXBvTG9ncmFkb3Vyb30gZnJvbSAnLi90aXBvLWxvZ3JhZG91cm8ubW9kZWwnO1xyXG5pbXBvcnQge1RpdHVsb0xvZ3JhZG91cm99IGZyb20gJy4vdGl0dWxvLWxvZ3JhZG91cm8ubW9kZWwnO1xyXG5pbXBvcnQge011bmljaXBpb30gZnJvbSAnLi9tdW5pY2lwaW8ubW9kZWwnO1xyXG5pbXBvcnQge1BhaXN9IGZyb20gJy4vcGFpcy5tb2RlbCc7XHJcbmltcG9ydCB7VGlwb0VuZGVyZWNvfSBmcm9tICcuL2VudW1zLm1vZGVsJztcclxuXHJcbmV4cG9ydCBjbGFzcyBFbmRlcmVjbyB7XHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwdWJsaWMgaWQ/OiBudW1iZXIsXHJcbiAgICAgICAgcHVibGljIGRhdGE/OiBEYXRlLFxyXG4gICAgICAgIHB1YmxpYyB0aXBvPzogVGlwb0VuZGVyZWNvLFxyXG4gICAgICAgIHB1YmxpYyB0aXBvTG9ncmFkb3Vybz86IFRpcG9Mb2dyYWRvdXJvLFxyXG4gICAgICAgIHB1YmxpYyB0aXR1bG9Mb2dyYWRvdXJvPzogVGl0dWxvTG9ncmFkb3VybyxcclxuICAgICAgICBwdWJsaWMgbG9ncmFkb3Vybz86IHN0cmluZyxcclxuICAgICAgICBwdWJsaWMgbnVtZXJvPzogc3RyaW5nLFxyXG4gICAgICAgIHB1YmxpYyBiYWlycm8/OiBzdHJpbmcsXHJcbiAgICAgICAgcHVibGljIGNpZGFkZT86IHN0cmluZyxcclxuICAgICAgICBwdWJsaWMgdWY/OiBzdHJpbmcsXHJcbiAgICAgICAgcHVibGljIGNpZGFkZVJlZ2lhbz86IHN0cmluZyxcclxuICAgICAgICBwdWJsaWMgY29tcGxlbWVudG8/OiBzdHJpbmcsXHJcbiAgICAgICAgcHVibGljIGNlcD86IHN0cmluZyxcclxuICAgICAgICBwdWJsaWMgbXVuaWNpcGlvPzogTXVuaWNpcGlvLFxyXG4gICAgICAgIHB1YmxpYyBwYWlzPzogUGFpcyxcclxuICAgICAgICBwdWJsaWMgcXVhZHJhPzogc3RyaW5nLFxyXG4gICAgICAgIHB1YmxpYyBsb3RlPzogc3RyaW5nLFxyXG4gICAgICAgIHB1YmxpYyBsb3RlYW1lbnRvPzogc3RyaW5nLFxyXG4gICAgICAgIHB1YmxpYyBjb25qdW50b0hhYml0YWNpb25hbD86IHN0cmluZyxcclxuICAgICAgICBwdWJsaWMgYmxvY28/OiBzdHJpbmcsXHJcbiAgICAgICAgcHVibGljIGFwYXJ0YW1lbnRvPzogc3RyaW5nLFxyXG4gICAgICAgIHB1YmxpYyBvYnNlcnZhY29lcz86IHN0cmluZyxcclxuICAgICAgICBwdWJsaWMgaWJnZT86IHN0cmluZ1xyXG4gICAgKSB7XHJcbiAgICAgICAgdGhpcy5tdW5pY2lwaW8gPSBuZXcgTXVuaWNpcGlvKCk7XHJcbiAgICB9XHJcbn1cclxuIiwiZXhwb3J0IGNsYXNzIFBhaXMge1xyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgIHB1YmxpYyBpZD86IG51bWJlcixcclxuICAgICAgcHVibGljIGRlc2NyaWNhbz86IHN0cmluZ1xyXG4gICAgKSB7fVxyXG59XHJcbiIsImV4cG9ydCBjbGFzcyBUaXBvTG9ncmFkb3VybyB7XHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgcHVibGljIGlkPzogbnVtYmVyLFxyXG4gICAgICBwdWJsaWMgc2lnbGE/OiBzdHJpbmcsXHJcbiAgICAgIHB1YmxpYyBkZXNjcmljYW8/OiBzdHJpbmdcclxuICAgICkge31cclxufVxyXG4iLCJleHBvcnQgY2xhc3MgVGl0dWxvTG9ncmFkb3VybyB7XHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgaWQ/OiBudW1iZXIsIHB1YmxpYyBzaWdsYT86IHN0cmluZywgcHVibGljIGRlc2NyaWNhbz86IHN0cmluZykge31cclxufVxyXG4iLCJpbXBvcnQge011bmljaXBpb30gZnJvbSAnLi9tdW5pY2lwaW8ubW9kZWwnO1xyXG5pbXBvcnQge1NleG99IGZyb20gJy4vZW51bXMubW9kZWwnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFBlc3NvYUZpc2ljYSB7XHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwdWJsaWMgaWQ/OiBudW1iZXIsXHJcbiAgICAgICAgcHVibGljIHJlc2lkZW50ZUV4dGVyaW9yPzogYm9vbGVhbixcclxuICAgICAgICBwdWJsaWMgbm9tZU1hZT86IHN0cmluZyxcclxuICAgICAgICBwdWJsaWMgbm9tZVBhaT86IHN0cmluZyxcclxuICAgICAgICBwdWJsaWMgZGF0YU5hc2NpbWVudG8/OiBEYXRlLFxyXG4gICAgICAgIHB1YmxpYyBzZXhvPzogU2V4byxcclxuICAgICAgICBwdWJsaWMgYW5vT2JpdG8/OiBudW1iZXIsXHJcbiAgICAgICAgcHVibGljIGVzdHJhbmdlaXJvPzogYm9vbGVhbixcclxuICAgICAgICBwdWJsaWMgcmc/OiBzdHJpbmcsXHJcbiAgICAgICAgcHVibGljIGNuaD86IHN0cmluZyxcclxuICAgICAgICBwdWJsaWMgbXVuaWNpcGlvTmF0dXJhbGlkYWRlPzogTXVuaWNpcGlvXHJcbiAgICApIHt9XHJcbn1cclxuIiwiZXhwb3J0IGNsYXNzIFBlc3NvYUp1cmlkaWNhIHtcclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHB1YmxpYyBpZD86IG51bWJlcixcclxuICAgICAgICBwdWJsaWMgaW5zY3JpY2FvRXN0YWR1YWw/OiBzdHJpbmcsXHJcbiAgICAgICAgcHVibGljIG5vbWVGYW50YXNpYT86IHN0cmluZyxcclxuICAgICAgICBwdWJsaWMgZGF0YUFiZXJ0dXJhPzogRGF0ZSxcclxuICAgICAgICBwdWJsaWMgY2FwaXRhbFNvY2lhbD86IG51bWJlcixcclxuICAgICAgICBwdWJsaWMgY3BmUmVzcG9uc2F2ZWw/OiBzdHJpbmcsXHJcbiAgICAgICAgcHVibGljIG5vbWVSZXNwb25zYXZlbD86IHN0cmluZyxcclxuICAgICAgICBwdWJsaWMgdXRpbGl6YXJFbmRQcmlQYXJhQ29ycmVzcD86IGJvb2xlYW5cclxuICAgICkge31cclxufVxyXG4iLCJpbXBvcnQge0NvbnRyaWJ1aW50ZX0gZnJvbSAnLi9jb250cmlidWludGUubW9kZWwnO1xyXG5pbXBvcnQge1RpcG9SZXNwb25zYXZlbH0gZnJvbSAnLi9lbnVtcy5tb2RlbCc7XHJcblxyXG5leHBvcnQgY2xhc3MgUmVzcG9uc2F2ZWwge1xyXG4gICAgcHVibGljIGNvbnRyaWJ1aW50ZTogQ29udHJpYnVpbnRlID0gbmV3IENvbnRyaWJ1aW50ZSgpO1xyXG4gICAgcHVibGljIHRpcG86IFRpcG9SZXNwb25zYXZlbDtcclxufVxyXG4iLCJleHBvcnQgY2xhc3MgVmlhQ2VwIHtcclxuICAgIGNlcDogc3RyaW5nO1xyXG4gICAgbG9ncmFkb3Vybzogc3RyaW5nO1xyXG4gICAgY29tcGxlbWVudG86IHN0cmluZztcclxuICAgIGJhaXJybzogc3RyaW5nO1xyXG4gICAgbG9jYWxpZGFkZTogc3RyaW5nO1xyXG4gICAgdWY6IHN0cmluZztcclxuICAgIHVuaWRhZGU6IHN0cmluZztcclxuICAgIGliZ2U6IHN0cmluZztcclxuICAgIGdpYTogc3RyaW5nO1xyXG59XHJcbiIsImV4cG9ydCBjbGFzcyBDZXJ0aWRhbyB7XHJcbiAgICBwdWJsaWMgdGlwbzogc3RyaW5nO1xyXG4gICAgcHVibGljIHZhbG9yQnVzY2E6IHN0cmluZztcclxuICAgIHB1YmxpYyBub21lU29saWNpdGFudGU6IHN0cmluZztcclxuICAgIHB1YmxpYyBkb2N1bWVudG9Tb2xpY2l0YW50ZTogc3RyaW5nO1xyXG4gICAgcHVibGljIGFubzogbnVtYmVyO1xyXG59XHJcbiIsImV4cG9ydCBjbGFzcyBDb25maWd1cmFjYW9QYXJjZWxhbWVudG8ge1xyXG4gICAgcHVibGljIGNvZGlnbzogbnVtYmVyO1xyXG4gICAgcHVibGljIHF1YW50aWRhZGVNYXhpbWFQYXJjZWxhczogbnVtYmVyO1xyXG4gICAgcHVibGljIHByYXpvUHJpbWVpcmFQYXJjZWxhOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgZGF0YU1pbmltYVByaW1laXJhUGFyY2VsYTogRGF0ZTtcclxufVxyXG4iLCJpbXBvcnQge0VuZGVyZWNvfSBmcm9tICcuL2VuZGVyZWNvLm1vZGVsJztcclxuaW1wb3J0IHtSZXNwb25zYXZlbH0gZnJvbSAnLi9yZXNwb25zYXZlbC5tb2RlbCc7XHJcbmltcG9ydCB7VGlwb0ltb3ZlbH0gZnJvbSAnLi9lbnVtcy5tb2RlbCc7XHJcblxyXG5leHBvcnQgY2xhc3MgSW1vdmVsIHtcclxuICAgIHB1YmxpYyBjb2RpZ28/OiBudW1iZXI7XHJcbiAgICBwdWJsaWMgaW5zY3JpY2FvPzogc3RyaW5nO1xyXG4gICAgcHVibGljIGVuZGVyZWNvPzogc3RyaW5nO1xyXG4gICAgcHVibGljIG5vbWVQcm9wcmlldGFyaW8/OiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgZG9jdW1lbnRvUHJvcHJpZXRhcmlvOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgdGlwbz86IFRpcG9JbW92ZWw7XHJcbiAgICBwdWJsaWMgbWF0cmljdWxhPzogc3RyaW5nO1xyXG4gICAgcHVibGljIGVuZGVyZWNvUHJpbmNpcGFsPzogRW5kZXJlY28gPSBuZXcgRW5kZXJlY28oKTtcclxuICAgIHB1YmxpYyBlbmRlcmVjb0NvYnJhbmNhPzogRW5kZXJlY28gPSBuZXcgRW5kZXJlY28oKTtcclxuICAgIHB1YmxpYyByZXNwb25zYXZlaXM/OiBBcnJheTxSZXNwb25zYXZlbD4gPSBbXTtcclxufVxyXG4iLCJpbXBvcnQge0ltb3ZlbH0gZnJvbSAnLi9pbW92ZWwubW9kZWwnO1xyXG5pbXBvcnQge0NvbnRyaWJ1aW50ZX0gZnJvbSAnLi9jb250cmlidWludGUubW9kZWwnO1xyXG5pbXBvcnQge0RlYml0b30gZnJvbSAnLi9kZWJpdG8ubW9kZWwnO1xyXG5cclxuZXhwb3J0IGNsYXNzIERhZG9zRGViaXRvIHtcclxuICAgIHB1YmxpYyBkZWJpdG9zOiBBcnJheTxEZWJpdG8+ID0gW107XHJcbiAgICBwdWJsaWMgaW1vdmVsOiBJbW92ZWwgPSBuZXcgSW1vdmVsKCk7XHJcbiAgICBwdWJsaWMgY29udHJpYnVpbnRlOiBDb250cmlidWludGUgPSBuZXcgQ29udHJpYnVpbnRlKCk7XHJcbiAgICBwdWJsaWMgcG9zc3VpRGViaXRvc0FqdWl6YWRvczogYm9vbGVhbjtcclxuICAgIHB1YmxpYyBwb3NzdWlEZWJpdG9zVmVuY2lkb3M6IGJvb2xlYW47XHJcbiAgICBwdWJsaWMgZXhpc3RlbU1haXNEZWJpdG9zOiBib29sZWFuO1xyXG4gICAgcHVibGljIGV4aXN0ZW1EZWJpdG9zSW1vYmlsaWFyaW9zOiBib29sZWFuO1xyXG4gICAgcHVibGljIGV4aXN0ZW1EZWJpdG9zRW1DREE6IGJvb2xlYW47XHJcbiAgICBwdWJsaWMgZXhpc3RlbURlYml0b3NOYW9Nb3N0cmFkb3NEaXZpZGFDb3JyZW50ZTogYm9vbGVhbjtcclxuICAgIHB1YmxpYyBwb3NzdWlQZW5kZW5jaWFzSnVyaWRpY2FzOiBib29sZWFuO1xyXG4gICAgcHVibGljIHBvc3N1aVBhcmNlbGFtZW50b0F0aXZvOiBib29sZWFuO1xyXG59XHJcbiIsImltcG9ydCB7U2l0dWFjYW9EaXZpZGFEZWJpdG8sIFNpdHVhY2FvUGFnYW1lbnRvRGViaXRvLCBUaXBvUGVzc29hfSBmcm9tICcuL2VudW1zLm1vZGVsJztcclxuaW1wb3J0IHtQYXJjZWxhfSBmcm9tICcuL3BhcmNlbGEubW9kZWwnO1xyXG5pbXBvcnQge0Jhc2ljUmVzcG9zdGF9IGZyb20gJy4vYmFzaWMtcmVzcG9zdGEubW9kZWwnO1xyXG5pbXBvcnQge09icmF9IGZyb20gJy4vb2JyYS5tb2RlbCc7XHJcblxyXG5leHBvcnQgY2xhc3MgRGViaXRvIHtcclxuICAgIHB1YmxpYyBjb2RpZ29Db250cmlidWludGU6IG51bWJlcjtcclxuICAgIHB1YmxpYyBub21lQ29udHJpYnVpbnRlOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgaW5zY3JpY2FvTXVuaWNpcGFsOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgZG9jdW1lbnRvQ29udHJpYnVpbnRlOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgdGlwb1Blc3NvYTogVGlwb1Blc3NvYTtcclxuICAgIHB1YmxpYyBjb2RpZ29EZWJpdG86IG51bWJlcjtcclxuICAgIHB1YmxpYyBleGVyY2ljaW9EZWJpdG86IG51bWJlcjtcclxuICAgIHB1YmxpYyBzaXR1YWNhb0RlYml0bzogU2l0dWFjYW9QYWdhbWVudG9EZWJpdG87XHJcbiAgICBwdWJsaWMgc2l0dWFjYW9EaXZpZGE6IFNpdHVhY2FvRGl2aWRhRGViaXRvO1xyXG4gICAgcHVibGljIGNvZGlnb1RyaWJ1dG86IG51bWJlcjtcclxuICAgIHB1YmxpYyBkZXNjcmljYW9UcmlidXRvOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgb2JyYTogT2JyYTtcclxuICAgIHB1YmxpYyB2YWxvcjogbnVtYmVyO1xyXG4gICAgcHVibGljIHZhbG9yQWJlcnRvOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgdmFsb3JBdHVhbGl6YWRvOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgcGFyY2VsYXM6IEFycmF5PFBhcmNlbGE+ID0gW107XHJcbiAgICBwdWJsaWMgaW5zY3JpY2FvSW1vdmVsOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgY29kaWdvSW1vdmVsOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgcG9kZVNlclNlbGVjaW9uYWRvOiBCYXNpY1Jlc3Bvc3RhO1xyXG4gICAgcHVibGljIHRlbUNEQTogYm9vbGVhbjtcclxuICAgIHB1YmxpYyBudW1lcm9Qcm9jZXNzbzogc3RyaW5nO1xyXG4gICAgcHVibGljIHBlcm1pdGlyU2VsZWNhb1BhcmNlbGFzR2VyYWNhb0d1aWE6IGJvb2xlYW47XHJcblxyXG4gICAgLy9DYW1wb3MgRm9yYSBkbyBEVE9cclxuICAgIHB1YmxpYyBwb3NzdWlQYXJjZWxhc1ZlbmNpZGFzOiBib29sZWFuO1xyXG4gICAgcHVibGljIHBvc3N1aUNvdGFVbmljYTogYm9vbGVhbjtcclxuICAgIHB1YmxpYyBwb3NzdWlDb3RhVW5pY2FBYmVydGE6IGJvb2xlYW47XHJcbiAgICBwdWJsaWMgcG9zc3VpUGFyY2VsYXNBYmVydGFzOiBib29sZWFuO1xyXG4gICAgcHVibGljIHBlcm1pdGVSZWZpczogYm9vbGVhbjtcclxufVxyXG4iLCJleHBvcnQgZW51bSBUaXBvUGVzc29hIHtcclxuICBGSVNJQ0EgPSAnRklTSUNBJyxcclxuICBKVVJJRElDQSA9ICdKVVJJRElDQSdcclxufVxyXG5cclxuZXhwb3J0IGVudW0gU2l0dWFjYW9Db250cmlidWludGUge1xyXG4gIEFUSVZPID0gJ0FUSVZPJyxcclxuICBJTkFUSVZPID0gJ0lOQVRJVk8nXHJcbn1cclxuXHJcbmV4cG9ydCBlbnVtIFNpdHVhY2FvRGl2aWRhRGViaXRvIHtcclxuICBESVZJREFfQ09SUkVOVEUgPSAnRElWSURBX0NPUlJFTlRFJyxcclxuICBESVZJREFfQVRJVkEgPSAnRElWSURBX0FUSVZBJyxcclxuICBESVZJREFfQUpVSVpBREEgPSAnRElWSURBX0FKVUlaQURBJ1xyXG59XHJcblxyXG5leHBvcnQgZW51bSBTaXR1YWNhb1BhZ2FtZW50b0RlYml0byB7XHJcbiAgQUJFUlRPID0gJ0FCRVJUTycsXHJcbiAgUEFHTyA9ICdQQUdPJyxcclxuICBQUk9URVNUQURPID0gJ1BST1RFU1RBRE8nXHJcbn1cclxuXHJcbmV4cG9ydCBlbnVtIFNpdHVhY2FvUGFnYW1lbnRvUGFyY2VsYSB7XHJcbiAgQUJFUlRPID0gJ0FCRVJUTycsXHJcbiAgUEFHTyA9ICdQQUdPJyxcclxuICBFTV9ESVZJREFfQVRJVkEgPSAnRU1fRElWSURBX0FUSVZBJyxcclxuICBFTV9FWEVDVUNBT19GSVNDQUwgPSAnRU1fRVhFQ1VDQU9fRklTQ0FMJyxcclxuICBDQU5DRUxBRE8gPSAnQ0FOQ0VMQURPJyxcclxuICBBR1JVUEFET19FTV9QQVJDRUxBTUVOVE8gPSAnQUdSVVBBRE9fRU1fUEFSQ0VMQU1FTlRPJyxcclxuICBQUk9URVNUQURPID0gJ1BST1RFU1RBRE8nLFxyXG4gIEVYQ0xVSURPID0gJ0VYQ0xVSURPJyxcclxuICBJTVVORV9JU0VOVE8gPSAnSU1VTkVfSVNFTlRPJyxcclxuICBESUZFUkVOQ0FfREVfVkFMT1JfQ0FOQ0VMQURPX1BBUkNJQUxNRU5URSA9ICdESUZFUkVOQ0FfREVfVkFMT1JfQ0FOQ0VMQURPX1BBUkNJQUxNRU5URScsXHJcbiAgQkxPUVVFQURPID0gJ0JMT1FVRUFETycsXHJcbiAgQUdSVVBBRE9fRU1fT1VUUkFfUEFSQ0VMQSA9ICdBR1JVUEFET19FTV9PVVRSQV9QQVJDRUxBJyxcclxuICBQUkVTQ1JJVE8gPSAnUFJFU0NSSVRPJyxcclxuICBFTV9GSVNDQUxJWkFDQU8gPSAnRU1fRklTQ0FMSVpBQ0FPJyxcclxuICBCQUlYQV9TRU1fTU9WSU1FTlRPID0gJ0JBSVhBX1NFTV9NT1ZJTUVOVE8nLFxyXG4gIEVNX1JFQ1VSU09fQURNSU5JU1RSQVRJVk8gPSAnRU1fUkVDVVJTT19BRE1JTklTVFJBVElWTycsXHJcbiAgU1VTUEVOU08gPSAnU1VTUEVOU08nXHJcbn1cclxuXHJcbmV4cG9ydCBlbnVtIFNleG8ge1xyXG4gIEZFTUlOSU5PID0gJ0ZFTUlOSU5PJyxcclxuICBNQVNDVUxJTk8gPSAnTUFTQ1VMSU5PJ1xyXG59XHJcblxyXG5leHBvcnQgZW51bSBUaXBvRW5kZXJlY28ge1xyXG4gIFBSSU5DSVBBTCA9ICdQUklOQ0lQQUwnLFxyXG4gIENPUlJFU1BPTkRFTkNJQSA9ICdDT1JSRVNQT05ERU5DSUEnXHJcbn1cclxuXHJcbmV4cG9ydCBlbnVtIFRpcG9SZXNwb25zYXZlbCB7XHJcbiAgUFJJTkNJUEFMID0gJ1BSSU5DSVBBTCcsXHJcbiAgU09DSU8gPSAnU09DSU8nLFxyXG4gIFBST0NVUkFET1IgPSAnIFBST0NVUkFET1InLFxyXG4gIFJFU1BPTlNBVkVMX0lNT0JJTElBUklPID0gJ1JFU1BPTlNBVkVMX0lNT0JJTElBUklPJ1xyXG59XHJcblxyXG5leHBvcnQgZW51bSBUaXBvSW1vdmVsIHtcclxuICBVUkJBTk8gPSAnVVJCQU5PJyxcclxuICBSVVJBTCA9ICdSVVJBTCdcclxufVxyXG5cclxuZXhwb3J0IGVudW0gRW51bVBpcGVUeXBlIHtcclxuICBTSVRVQUNBT19ESVZJREFfREVCSVRPLFxyXG4gIFNJVFVBQ0FPX1BBR0FNRU5UT19ERUJJVE8sXHJcbiAgU0lUVUFDQU9fUEFHQU1FTlRPX1BBUkNFTEEsXHJcbiAgVElQT19QRVNTT0EsXHJcbiAgU0lUVUFDQU9fQ09OVFJJQlVJTlRFLFxyXG4gIFNFWE8sXHJcbiAgVElQT19FTkRFUkVDTyxcclxuICBUSVBPX1JFU1BPTlNBVkVMLFxyXG4gIFRJUE9fSU1PVkVMXHJcbn1cclxuXHJcbmV4cG9ydCBlbnVtIEN1c3RvbUhUVFBTdGF0dXMge1xyXG4gIExPQ0tfUEFHRSA9IDI5NixcclxuICBSRUxFQVNFX1BBR0UgPSAyOTcsXHJcbiAgUkVESVJFQ1RfUEFHRSA9IDI5OCxcclxuICBDSEVDS19BTEVSVCA9IDI5OVxyXG59XHJcblxyXG4iLCJpbXBvcnQge1BhcmNlbGF9IGZyb20gJy4vcGFyY2VsYS5tb2RlbCc7XHJcbmltcG9ydCB7RGViaXRvfSBmcm9tIFwiLi9kZWJpdG8ubW9kZWxcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBFbWlzc2FvR3VpYSB7XHJcbiAgZGViaXRvOiBEZWJpdG87XHJcbiAgcGFyY2VsYXM6IEFycmF5PFBhcmNlbGE+O1xyXG4gIGRhdGFWZW5jaW1lbnRvOiBEYXRlO1xyXG4gIHJlZmlzOiBib29sZWFuO1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHRoaXMucGFyY2VsYXMgPSBbXTtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBFbWlzc2FvR3VpYURlYml0b3NBZ3J1cGFkb3Mge1xyXG4gIGRlYml0b3M6IEFycmF5PERlYml0bz47XHJcblxyXG4gIGRhdGFWZW5jaW1lbnRvOiBEYXRlO1xyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgdGhpcy5kZWJpdG9zID0gW107XHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCB7U2l0dWFjYW9QYWdhbWVudG9QYXJjZWxhfSBmcm9tICcuL2VudW1zLm1vZGVsJztcclxuaW1wb3J0IHtCYXNpY1Jlc3Bvc3RhfSBmcm9tICcuL2Jhc2ljLXJlc3Bvc3RhLm1vZGVsJztcclxuXHJcbmV4cG9ydCBjbGFzcyBQYXJjZWxhIHtcclxuICAgIHB1YmxpYyBjb2RpZ286IG51bWJlcjtcclxuICAgIHB1YmxpYyBwYXJjZWxhOiBzdHJpbmc7XHJcbiAgICBwdWJsaWMgdmVuY2ltZW50bzogRGF0ZTtcclxuICAgIHB1YmxpYyB2YWxvcjogbnVtYmVyO1xyXG4gICAgcHVibGljIHNpdHVhY2FvUGFnYW1lbnRvOiBTaXR1YWNhb1BhZ2FtZW50b1BhcmNlbGE7XHJcbiAgICBwdWJsaWMgZXN0YVZlbmNpZGE6IGJvb2xlYW47XHJcbiAgICBwdWJsaWMgZWhVbmljYTogYm9vbGVhbjtcclxuICAgIHB1YmxpYyBkYW06IG51bWJlcjtcclxuICAgIHB1YmxpYyB2YWxvckF0dWFsaXphZG86IG51bWJlcjtcclxuICAgIHB1YmxpYyB2YWxvckRlc2NvbnRvOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgcG9kZVNlclNlbGVjaW9uYWRvOiBCYXNpY1Jlc3Bvc3RhO1xyXG59XHJcbiIsImltcG9ydCB7Q29udHJpYnVpbnRlfSBmcm9tICcuL2NvbnRyaWJ1aW50ZS5tb2RlbCc7XHJcbmltcG9ydCB7SW1vdmVsfSBmcm9tICcuL2ltb3ZlbC5tb2RlbCc7XHJcbmltcG9ydCB7RGViaXRvfSBmcm9tICcuL2RlYml0by5tb2RlbCc7XHJcbmltcG9ydCB7Q29uZmlndXJhY2FvUGFyY2VsYW1lbnRvfSBmcm9tICcuL2NvbmZpZ3VyYWNhby1wYXJjZWxhbWVudG8ubW9kZWwnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFBhcmNlbGFtZW50byB7XHJcbiAgICBwdWJsaWMgY29kaWdvOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgcHJvcHJpZXRhcmlvOiBDb250cmlidWludGU7XHJcbiAgICBwdWJsaWMgY3BmUmVxdWVyZW50ZTogc3RyaW5nO1xyXG4gICAgcHVibGljIHJlc3BvbnNhdmVsOiBDb250cmlidWludGUgPSBuZXcgQ29udHJpYnVpbnRlKCk7XHJcbiAgICBwdWJsaWMgcmVxdWVyZW50ZTogQ29udHJpYnVpbnRlID0gbmV3IENvbnRyaWJ1aW50ZSgpO1xyXG4gICAgcHVibGljIGNvbnRyaWJQb3J0YWw6IENvbnRyaWJ1aW50ZSA9IG5ldyBDb250cmlidWludGUoKTtcclxuICAgIHB1YmxpYyBpbW92ZWw6IEltb3ZlbDtcclxuICAgIHB1YmxpYyBjb250cmlidWludGU6IENvbnRyaWJ1aW50ZSA9IG5ldyBDb250cmlidWludGUoKTtcclxuICAgIHB1YmxpYyBkZWJpdG9zOiBBcnJheTxEZWJpdG8+ID0gW107XHJcbiAgICBwdWJsaWMgbnVtZXJvUGFyY2VsYXM6IG51bWJlcjtcclxuICAgIHB1YmxpYyB2ZW5jaW1lbnRvUHJpbWVpcmFQYXJjZWxhOiBEYXRlO1xyXG4gICAgcHVibGljIHZhbG9yVG90YWw6IG51bWJlcjtcclxuICAgIHB1YmxpYyB2YWxvclRvdGFsT3JpZ2luYWw6IG51bWJlcjtcclxuICAgIHB1YmxpYyB2YWxvclRvdGFsQWJlcnRvOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgdmFsb3JQcmltZWlyYVBhcmNlbGE6IG51bWJlcjtcclxuICAgIHB1YmxpYyB2YWxvckRlbWFpc1BhcmNlbGFzOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgY2FkYXN0cm9WYWxpZG86IGJvb2xlYW47XHJcbiAgICBwdWJsaWMgdGVybW9BY2VpdG86IGJvb2xlYW47XHJcbiAgICBwdWJsaWMgdmFsb3JQYXJjaWFsVG90YWw6IG51bWJlcjtcclxuICAgIHB1YmxpYyB2YWxvclBhcmNpYWxUb3RhbE9yaWdpbmFsOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgdmFsb3JQYXJjaWFsVG90YWxBYmVydG86IG51bWJlcjtcclxuICAgIHB1YmxpYyBwcm90b2NvbG86IHN0cmluZztcclxuICAgIHB1YmxpYyBjb25maWd1cmFjYW9QYXJjZWxhbWVudG86IENvbmZpZ3VyYWNhb1BhcmNlbGFtZW50bztcclxuICAgIHB1YmxpYyB2YWxvckRlc2NvbnRvOiBudW1iZXI7XHJcbiAgICBwdWJsaWMgZGViaXRvR2VyYWRvcjogRGViaXRvO1xyXG59XHJcbiIsImltcG9ydCB7XHJcbiAgRW51bVBpcGVUeXBlLFxyXG4gIFNleG8sXHJcbiAgU2l0dWFjYW9Db250cmlidWludGUsXHJcbiAgU2l0dWFjYW9EaXZpZGFEZWJpdG8sXHJcbiAgU2l0dWFjYW9QYWdhbWVudG9EZWJpdG8sXHJcbiAgU2l0dWFjYW9QYWdhbWVudG9QYXJjZWxhLCBUaXBvRW5kZXJlY28sIFRpcG9JbW92ZWwsXHJcbiAgVGlwb1Blc3NvYSwgVGlwb1Jlc3BvbnNhdmVsXHJcbn0gZnJvbSAnLi9lbnVtcy5tb2RlbCc7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29uc3RhbnRzRW51bSB7XHJcbiAgcHVibGljIGVudW1QaXBlVHlwZSA9IEVudW1QaXBlVHlwZTtcclxuICBwdWJsaWMgdGlwb1Blc3NvYSA9IFRpcG9QZXNzb2E7XHJcbiAgcHVibGljIHNpdHVhY2FvQ29udHJpYnVpbnRlID0gU2l0dWFjYW9Db250cmlidWludGU7XHJcbiAgcHVibGljIHNpdHVhY2FvRGl2aWRhRGViaXRvID0gU2l0dWFjYW9EaXZpZGFEZWJpdG87XHJcbiAgcHVibGljIHNpdHVhY2FvUGFnYW1lbnRvRGViaXRvID0gU2l0dWFjYW9QYWdhbWVudG9EZWJpdG87XHJcbiAgcHVibGljIHNpdHVhY2FvUGFnYW1lbnRvUGFyY2VsYSA9IFNpdHVhY2FvUGFnYW1lbnRvUGFyY2VsYTtcclxuICBwdWJsaWMgc2V4byA9IFNleG87XHJcbiAgcHVibGljIHRpcG9FbmRlcmVjbyA9IFRpcG9FbmRlcmVjbztcclxuICBwdWJsaWMgdGlwb1Jlc3BvbnNhdmVsID0gVGlwb1Jlc3BvbnNhdmVsO1xyXG4gIHB1YmxpYyB0aXBvSW1vdmVsID0gVGlwb0ltb3ZlbDtcclxufVxyXG4iLCJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIElucHV0LCBSZW5kZXJlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2poaS1wYXNzd29yZC1zdHJlbmd0aC1iYXInLFxyXG4gICAgdGVtcGxhdGU6IGBcclxuICAgICAgICA8ZGl2IGlkPVwic3RyZW5ndGhcIj5cclxuICAgICAgICAgICAgPHNtYWxsPkZvcsODwqdhIGRhIFNlbmhhOjwvc21hbGw+XHJcbiAgICAgICAgICAgIDx1bCBpZD1cInN0cmVuZ3RoQmFyXCI+XHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJwb2ludFwiPjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJwb2ludFwiPjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJwb2ludFwiPjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJwb2ludFwiPjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJwb2ludFwiPjwvbGk+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9kaXY+YCxcclxuICAgIHN0eWxlVXJsczogWydwYXNzd29yZC1zdHJlbmd0aC1iYXIuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQYXNzd29yZFN0cmVuZ3RoQmFyQ29tcG9uZW50IHtcclxuICAgIGNvbG9ycyA9IFsnI0YwMCcsICcjRjkwJywgJyNGRjAnLCAnIzlGMCcsICcjMEYwJ107XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIsIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZikge31cclxuXHJcbiAgICBtZWFzdXJlU3RyZW5ndGgocDogc3RyaW5nKTogbnVtYmVyIHtcclxuICAgICAgICBsZXQgZm9yY2UgPSAwO1xyXG4gICAgICAgIGNvbnN0IHJlZ2V4ID0gL1skLS86LT97LX4hXCJeX2BcXFtcXF1dL2c7IC8vIFwiXHJcbiAgICAgICAgY29uc3QgbG93ZXJMZXR0ZXJzID0gL1thLXpdKy8udGVzdChwKTtcclxuICAgICAgICBjb25zdCB1cHBlckxldHRlcnMgPSAvW0EtWl0rLy50ZXN0KHApO1xyXG4gICAgICAgIGNvbnN0IG51bWJlcnMgPSAvWzAtOV0rLy50ZXN0KHApO1xyXG4gICAgICAgIGNvbnN0IHN5bWJvbHMgPSByZWdleC50ZXN0KHApO1xyXG5cclxuICAgICAgICBjb25zdCBmbGFncyA9IFtsb3dlckxldHRlcnMsIHVwcGVyTGV0dGVycywgbnVtYmVycywgc3ltYm9sc107XHJcbiAgICAgICAgY29uc3QgcGFzc2VkTWF0Y2hlcyA9IGZsYWdzLmZpbHRlcigoaXNNYXRjaGVkRmxhZzogYm9vbGVhbikgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gaXNNYXRjaGVkRmxhZyA9PT0gdHJ1ZTtcclxuICAgICAgICB9KS5sZW5ndGg7XHJcblxyXG4gICAgICAgIGZvcmNlICs9IDIgKiBwLmxlbmd0aCArIChwLmxlbmd0aCA+PSAxMCA/IDEgOiAwKTtcclxuICAgICAgICBmb3JjZSArPSBwYXNzZWRNYXRjaGVzICogMTA7XHJcblxyXG4gICAgICAgIC8vIHBlbmFsdHkgKHNob3J0IHBhc3N3b3JkKVxyXG4gICAgICAgIGZvcmNlID0gcC5sZW5ndGggPD0gNiA/IE1hdGgubWluKGZvcmNlLCAxMCkgOiBmb3JjZTtcclxuXHJcbiAgICAgICAgLy8gcGVuYWx0eSAocG9vciB2YXJpZXR5IG9mIGNoYXJhY3RlcnMpXHJcbiAgICAgICAgZm9yY2UgPSBwYXNzZWRNYXRjaGVzID09PSAxID8gTWF0aC5taW4oZm9yY2UsIDEwKSA6IGZvcmNlO1xyXG4gICAgICAgIGZvcmNlID0gcGFzc2VkTWF0Y2hlcyA9PT0gMiA/IE1hdGgubWluKGZvcmNlLCAyMCkgOiBmb3JjZTtcclxuICAgICAgICBmb3JjZSA9IHBhc3NlZE1hdGNoZXMgPT09IDMgPyBNYXRoLm1pbihmb3JjZSwgNDApIDogZm9yY2U7XHJcblxyXG4gICAgICAgIHJldHVybiBmb3JjZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRDb2xvcihzOiBudW1iZXIpOiBhbnkge1xyXG4gICAgICAgIGxldCBpZHggPSAwO1xyXG4gICAgICAgIGlmIChzIDw9IDEwKSB7XHJcbiAgICAgICAgICAgIGlkeCA9IDA7XHJcbiAgICAgICAgfSBlbHNlIGlmIChzIDw9IDIwKSB7XHJcbiAgICAgICAgICAgIGlkeCA9IDE7XHJcbiAgICAgICAgfSBlbHNlIGlmIChzIDw9IDMwKSB7XHJcbiAgICAgICAgICAgIGlkeCA9IDI7XHJcbiAgICAgICAgfSBlbHNlIGlmIChzIDw9IDQwKSB7XHJcbiAgICAgICAgICAgIGlkeCA9IDM7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWR4ID0gNDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHsgaWR4OiBpZHggKyAxLCBjb2w6IHRoaXMuY29sb3JzW2lkeF0gfTtcclxuICAgIH1cclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgc2V0IHBhc3N3b3JkVG9DaGVjayhwYXNzd29yZDogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKHBhc3N3b3JkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGMgPSB0aGlzLmdldENvbG9yKHRoaXMubWVhc3VyZVN0cmVuZ3RoKHBhc3N3b3JkKSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcclxuICAgICAgICAgICAgaWYgKGVsZW1lbnQuY2xhc3NOYW1lKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldEVsZW1lbnRDbGFzcyhlbGVtZW50LCBlbGVtZW50LmNsYXNzTmFtZSwgZmFsc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGxpcyA9IGVsZW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2xpJyk7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGlzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaSA8IGMuaWR4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRFbGVtZW50U3R5bGUobGlzW2ldLCAnYmFja2dyb3VuZENvbG9yJywgYy5jb2wpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldEVsZW1lbnRTdHlsZShsaXNbaV0sICdiYWNrZ3JvdW5kQ29sb3InLCAnI0RERCcpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7TmdNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1Bhc3N3b3JkU3RyZW5ndGhCYXJDb21wb25lbnR9IGZyb20gJy4vcGFzc3dvcmQtc3RyZW5ndGgtYmFyLmNvbXBvbmVudCc7XHJcblxyXG5ATmdNb2R1bGUoe1xyXG4gICAgZGVjbGFyYXRpb25zOiBbUGFzc3dvcmRTdHJlbmd0aEJhckNvbXBvbmVudF0sXHJcbiAgICBpbXBvcnRzOiBbXSxcclxuICAgIGV4cG9ydHM6IFtQYXNzd29yZFN0cmVuZ3RoQmFyQ29tcG9uZW50XVxyXG59KVxyXG5leHBvcnQgY2xhc3MgUGFzc3dvcmRTdHJlbmd0aE1vZHVsZSB7IH1cclxuIiwiaW1wb3J0IHtDVVNUT01fRUxFTUVOVFNfU0NIRU1BLCBOZ01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7TmdiTW9kdWxlfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcbmltcG9ydCB7Rm9udEF3ZXNvbWVNb2R1bGV9IGZyb20gJ0Bmb3J0YXdlc29tZS9hbmd1bGFyLWZvbnRhd2Vzb21lJztcclxuaW1wb3J0IHtsaWJyYXJ5fSBmcm9tICdAZm9ydGF3ZXNvbWUvZm9udGF3ZXNvbWUtc3ZnLWNvcmUnO1xyXG5pbXBvcnQge1JlZ2lzdGVyQ29tcG9uZW50fSBmcm9tICcuL3JlZ2lzdGVyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7UmVnaXN0ZXJNb2RhbFNlcnZpY2V9IGZyb20gJy4vcmVnaXN0ZXItbW9kYWwuc2VydmljZSc7XHJcbmltcG9ydCB7UmVnaXN0ZXJ9IGZyb20gJy4vcmVnaXN0ZXIuc2VydmljZSc7XHJcbmltcG9ydCB7Q29tbW9uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQge0Zvcm1zTW9kdWxlfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7Q3BmQ25wak1vZHVsZX0gZnJvbSAnLi4vY29tcG9uZW50cy9jcGYtY25wai9jcGYtY25wai5tb2R1bGUnO1xyXG5pbXBvcnQge05neE1hc2tNb2R1bGV9IGZyb20gJ25neC1tYXNrJztcclxuaW1wb3J0IHtmYVVzZXJQbHVzfSBmcm9tICdAZm9ydGF3ZXNvbWUvZnJlZS1zb2xpZC1zdmctaWNvbnMvZmFVc2VyUGx1cyc7XHJcbmltcG9ydCB7UG9ydGFsQWxlcnRNb2R1bGV9IGZyb20gJy4uL2FsZXJ0L3BvcnRhbC1hbGVydC5tb2R1bGUnO1xyXG5pbXBvcnQge1Bhc3N3b3JkU3RyZW5ndGhNb2R1bGV9IGZyb20gJy4uL2NvbXBvbmVudHMvcGFzc3dvcmQtc3RyZW5ndGgvcGFzc3dvcmQtc3RyZW5ndGgubW9kdWxlJztcclxuaW1wb3J0IHtUZXJtb0xncGRNb2R1bGV9IGZyb20gJy4uL2NvbXBvbmVudHMvdGVybW8tbGdwZC90ZXJtby1sZ3BkLm1vZHVsZSc7XHJcblxyXG5saWJyYXJ5LmFkZChmYVVzZXJQbHVzKTtcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgICBpbXBvcnRzOiBbXHJcbiAgICAgIENvbW1vbk1vZHVsZSxcclxuICAgICAgRm9ybXNNb2R1bGUsXHJcbiAgICAgIEZvbnRBd2Vzb21lTW9kdWxlLFxyXG4gICAgICBDcGZDbnBqTW9kdWxlLFxyXG4gICAgICBOZ2JNb2R1bGUuZm9yUm9vdCgpLFxyXG4gICAgICBOZ3hNYXNrTW9kdWxlLFxyXG4gICAgICBQYXNzd29yZFN0cmVuZ3RoTW9kdWxlLFxyXG4gICAgICBQb3J0YWxBbGVydE1vZHVsZSxcclxuICAgICAgVGVybW9MZ3BkTW9kdWxlXHJcbiAgICBdLFxyXG4gICAgZGVjbGFyYXRpb25zOiBbXHJcbiAgICAgIFJlZ2lzdGVyQ29tcG9uZW50XHJcbiAgICBdLFxyXG4gICAgZW50cnlDb21wb25lbnRzOiBbXHJcbiAgICAgIFJlZ2lzdGVyQ29tcG9uZW50XHJcbiAgICBdLFxyXG4gICAgZXhwb3J0czogW1xyXG4gICAgICBSZWdpc3RlckNvbXBvbmVudFxyXG4gICAgXSxcclxuICAgIHByb3ZpZGVyczogW1xyXG4gICAgICBSZWdpc3RlcixcclxuICAgICAgUmVnaXN0ZXJNb2RhbFNlcnZpY2VcclxuICAgIF0sXHJcbiAgICBzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV1cclxufSlcclxuZXhwb3J0IGNsYXNzIFJlZ2lzdGVyTW9kdWxlIHt9XHJcbiIsImltcG9ydCB7Q1VTVE9NX0VMRU1FTlRTX1NDSEVNQSwgTmdNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge2xpYnJhcnl9IGZyb20gJ0Bmb3J0YXdlc29tZS9mb250YXdlc29tZS1zdmctY29yZSc7XHJcbmltcG9ydCB7ZmFVc2VyfSBmcm9tICdAZm9ydGF3ZXNvbWUvZnJlZS1zb2xpZC1zdmctaWNvbnMvZmFVc2VyJztcclxuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7Rm9ybXNNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHtKaGlMb2dpbk1vZGFsQ29tcG9uZW50fSBmcm9tICcuL2xvZ2luLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7TmdiTW9kdWxlfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcbmltcG9ydCB7Rm9udEF3ZXNvbWVNb2R1bGV9IGZyb20gJ0Bmb3J0YXdlc29tZS9hbmd1bGFyLWZvbnRhd2Vzb21lJztcclxuaW1wb3J0IHtSZWdpc3Rlck1vZHVsZX0gZnJvbSAnLi4vcmVnaXN0ZXIvcmVnaXN0ZXIubW9kdWxlJztcclxuaW1wb3J0IHtUZXJtb0xncGRNb2R1bGV9IGZyb20gJy4uL2NvbXBvbmVudHMvdGVybW8tbGdwZC90ZXJtby1sZ3BkLm1vZHVsZSc7XHJcbmltcG9ydCB7Tmd4TWFza01vZHVsZX0gZnJvbSAnbmd4LW1hc2snO1xyXG5pbXBvcnQge1BvcnRhbEFsZXJ0TW9kdWxlfSBmcm9tICcuLi9hbGVydC9wb3J0YWwtYWxlcnQubW9kdWxlJztcclxuaW1wb3J0IHtOZ0poaXBzdGVyTW9kdWxlfSBmcm9tIFwibmctamhpcHN0ZXJcIjtcclxuXHJcbmxpYnJhcnkuYWRkKGZhVXNlcik7XHJcblxyXG5ATmdNb2R1bGUoe1xyXG4gIGltcG9ydHM6IFtcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgTmdiTW9kdWxlLmZvclJvb3QoKSxcclxuICAgIEZvbnRBd2Vzb21lTW9kdWxlLFxyXG4gICAgUmVnaXN0ZXJNb2R1bGUsXHJcbiAgICBGb250QXdlc29tZU1vZHVsZSxcclxuICAgIE5neE1hc2tNb2R1bGUsXHJcbiAgICBQb3J0YWxBbGVydE1vZHVsZSxcclxuICAgIFRlcm1vTGdwZE1vZHVsZSxcclxuICAgIE5nSmhpcHN0ZXJNb2R1bGVcclxuICBdLFxyXG4gIGVudHJ5Q29tcG9uZW50czogW1xyXG4gICAgSmhpTG9naW5Nb2RhbENvbXBvbmVudFxyXG4gIF0sXHJcbiAgZGVjbGFyYXRpb25zOiBbXHJcbiAgICBKaGlMb2dpbk1vZGFsQ29tcG9uZW50XHJcbiAgXSxcclxuICBleHBvcnRzOiBbXHJcbiAgICBKaGlMb2dpbk1vZGFsQ29tcG9uZW50XHJcbiAgXSxcclxuICBzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV1cclxufSlcclxuZXhwb3J0IGNsYXNzIExvZ2luTW9kdWxlIHtcclxufVxyXG4iLCIvKlxyXG4gICAgTGFuZ3VhZ2VzIGNvZGVzIGFyZSBJU09fNjM5LTEgY29kZXMsIHNlZSBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0xpc3Rfb2ZfSVNPXzYzOS0xX2NvZGVzXHJcbiAgICBUaGV5IGFyZSB3cml0dGVuIGluIEVuZ2xpc2ggdG8gYXZvaWQgY2hhcmFjdGVyIGVuY29kaW5nIGlzc3VlcyAobm90IGEgcGVyZmVjdCBzb2x1dGlvbilcclxuKi9cclxuZXhwb3J0IGNvbnN0IExBTkdVQUdFUzogc3RyaW5nW10gPSBbXHJcbiAgICAncHQtYnInXHJcbiAgICAvLyBqaGlwc3Rlci1uZWVkbGUtaTE4bi1sYW5ndWFnZS1jb25zdGFudCAtIEpIaXBzdGVyIHdpbGwgYWRkL3JlbW92ZSBsYW5ndWFnZXMgaW4gdGhpcyBhcnJheVxyXG5dO1xyXG4iLCJpbXBvcnQge0luamVjdGFibGUsIFJlbmRlcmVyMiwgUmVuZGVyZXJGYWN0b3J5Mn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7VGl0bGV9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xyXG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlU25hcHNob3QsIFJvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHtMYW5nQ2hhbmdlRXZlbnQsIFRyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7TEFOR1VBR0VTfSBmcm9tICcuL2xhbmd1YWdlLmNvbnN0YW50cyc7XHJcblxyXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxyXG5leHBvcnQgY2xhc3MgSmhpTGFuZ3VhZ2VIZWxwZXIge1xyXG4gICAgcmVuZGVyZXI6IFJlbmRlcmVyMiA9IG51bGw7XHJcbiAgICBwcml2YXRlIF9sYW5ndWFnZTogQmVoYXZpb3JTdWJqZWN0PHN0cmluZz47XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxyXG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogbm8tdW51c2VkLXZhcmlhYmxlXHJcbiAgICAgICAgcHJpdmF0ZSByb290UmVuZGVyZXI6IFJlbmRlcmVyRmFjdG9yeTIsXHJcbiAgICAgICAgcHJpdmF0ZSB0aXRsZVNlcnZpY2U6IFRpdGxlLFxyXG4gICAgICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXJcclxuICAgICkge1xyXG4gICAgICAgIHRoaXMuX2xhbmd1YWdlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KHRoaXMudHJhbnNsYXRlU2VydmljZS5jdXJyZW50TGFuZyk7XHJcbiAgICAgICAgdGhpcy5yZW5kZXJlciA9IHJvb3RSZW5kZXJlci5jcmVhdGVSZW5kZXJlcihkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdodG1sJyksIG51bGwpO1xyXG4gICAgICAgIHRoaXMuaW5pdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEFsbCgpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoTEFOR1VBR0VTKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgbGFuZ3VhZ2UoKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbGFuZ3VhZ2UuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVcGRhdGUgdGhlIHdpbmRvdyB0aXRsZSB1c2luZyBwYXJhbXMgaW4gdGhlIGZvbGxvd2luZ1xyXG4gICAgICogb3JkZXI6XHJcbiAgICAgKiAxLiB0aXRsZUtleSBwYXJhbWV0ZXJcclxuICAgICAqIDIuICRzdGF0ZS4kY3VycmVudC5kYXRhLnBhZ2VUaXRsZSAoY3VycmVudCBzdGF0ZSBwYWdlIHRpdGxlKVxyXG4gICAgICogMy4gJ2dsb2JhbC50aXRsZSdcclxuICAgICAqL1xyXG4gICAgdXBkYXRlVGl0bGUodGl0bGVLZXk/OiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAoIXRpdGxlS2V5KSB7XHJcbiAgICAgICAgICAgIHRpdGxlS2V5ID0gdGhpcy5nZXRQYWdlVGl0bGUodGhpcy5yb3V0ZXIucm91dGVyU3RhdGUuc25hcHNob3Qucm9vdCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuZ2V0KHRpdGxlS2V5KS5zdWJzY3JpYmUodGl0bGUgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGl0bGUuaW5jbHVkZXMoJ3RyYW5zbGF0aW9uLW5vdC1mb3VuZCcpKSB7XHJcbiAgICAgICAgICAgICAgdGl0bGUgPSB0aXRsZUtleTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnRpdGxlU2VydmljZS5zZXRUaXRsZSh0aXRsZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpbml0KCkge1xyXG4gICAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5vbkxhbmdDaGFuZ2Uuc3Vic2NyaWJlKChldmVudDogTGFuZ0NoYW5nZUV2ZW50KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuX2xhbmd1YWdlLm5leHQodGhpcy50cmFuc2xhdGVTZXJ2aWNlLmN1cnJlbnRMYW5nKTtcclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaHRtbCcpLCAnbGFuZycsIHRoaXMudHJhbnNsYXRlU2VydmljZS5jdXJyZW50TGFuZyk7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlVGl0bGUoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldFBhZ2VUaXRsZShyb3V0ZVNuYXBzaG90OiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90KSB7XHJcbiAgICAgICAgbGV0IHRpdGxlOiBzdHJpbmcgPSByb3V0ZVNuYXBzaG90LmRhdGEgJiYgcm91dGVTbmFwc2hvdC5kYXRhWydwYWdlVGl0bGUnXSA/IHJvdXRlU25hcHNob3QuZGF0YVsncGFnZVRpdGxlJ10gOiAncG9ydGFsR2F0ZXdheUFwcCc7XHJcbiAgICAgICAgaWYgKHJvdXRlU25hcHNob3QuZmlyc3RDaGlsZCkge1xyXG4gICAgICAgICAgICB0aXRsZSA9IHRoaXMuZ2V0UGFnZVRpdGxlKHJvdXRlU25hcHNob3QuZmlyc3RDaGlsZCkgfHwgdGl0bGU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aXRsZTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgR2F0ZXdheVJvdXRlIH0gZnJvbSAnLi4vLi4vbW9kZWwvZ2F0ZXdheS1yb3V0ZS5tb2RlbCc7XHJcblxyXG5jb25zdCBTRVJWRVJfQVBJX1VSTCA9ICcuLyc7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBHYXRld2F5Um91dGVzU2VydmljZSB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQpIHt9XHJcblxyXG4gICAgZmluZEFsbCgpOiBPYnNlcnZhYmxlPEdhdGV3YXlSb3V0ZVtdPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8R2F0ZXdheVJvdXRlW10+KFNFUlZFUl9BUElfVVJMICsgJ2FwaS9nYXRld2F5L3JvdXRlcy8nKTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IHsgR2F0ZXdheVJvdXRlc1NlcnZpY2UgfSBmcm9tICcuL2dhdGV3YXktcm91dGVzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBHYXRld2F5Um91dGUgfSBmcm9tICcuLi8uLi9tb2RlbC9nYXRld2F5LXJvdXRlLm1vZGVsJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdqaGktZ2F0ZXdheScsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vZ2F0ZXdheS5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBwcm92aWRlcnM6IFtHYXRld2F5Um91dGVzU2VydmljZV1cclxufSlcclxuZXhwb3J0IGNsYXNzIEpoaUdhdGV3YXlDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gICAgZ2F0ZXdheVJvdXRlczogR2F0ZXdheVJvdXRlW107XHJcbiAgICB1cGRhdGluZ1JvdXRlczogQm9vbGVhbjtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGdhdGV3YXlSb3V0ZXNTZXJ2aWNlOiBHYXRld2F5Um91dGVzU2VydmljZSkge31cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLnJlZnJlc2goKTtcclxuICAgIH1cclxuXHJcbiAgICByZWZyZXNoKCkge1xyXG4gICAgICAgIHRoaXMudXBkYXRpbmdSb3V0ZXMgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuZ2F0ZXdheVJvdXRlc1NlcnZpY2UuZmluZEFsbCgpLnN1YnNjcmliZShnYXRld2F5Um91dGVzID0+IHtcclxuICAgICAgICAgICAgdGhpcy5nYXRld2F5Um91dGVzID0gZ2F0ZXdheVJvdXRlcztcclxuICAgICAgICAgICAgdGhpcy51cGRhdGluZ1JvdXRlcyA9IGZhbHNlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7IFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuXHJcbmltcG9ydCB7IEpoaUdhdGV3YXlDb21wb25lbnQgfSBmcm9tICcuL2dhdGV3YXkuY29tcG9uZW50JztcclxuaW1wb3J0IHtVc2VyUm91dGVBY2Nlc3NTZXJ2aWNlfSBmcm9tICcuLi8uLi9hdXRoL3VzZXItcm91dGUtYWNjZXNzLXNlcnZpY2UnO1xyXG5cclxuZXhwb3J0IGNvbnN0IGdhdGV3YXlSb3V0ZTogUm91dGVbXSA9IFtcclxuICB7XHJcbiAgICBwYXRoOiAnZ2F0ZXdheScsXHJcbiAgICBjb21wb25lbnQ6IEpoaUdhdGV3YXlDb21wb25lbnQsXHJcbiAgICBkYXRhOiB7XHJcbiAgICAgICAgcGFnZVRpdGxlOiAnR2F0ZXdheScsXHJcbiAgICAgICAgYXV0aG9yaXRpZXM6IFsnUk9MRV9BRE1JTiddXHJcbiAgICB9LFxyXG4gICAgY2FuQWN0aXZhdGU6IFtVc2VyUm91dGVBY2Nlc3NTZXJ2aWNlXVxyXG4gIH1cclxuXTtcclxuIiwiaW1wb3J0IHtDVVNUT01fRUxFTUVOVFNfU0NIRU1BLCBOZ01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7Um91dGVyTW9kdWxlfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQge0NvbW1vbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHtGb3Jtc01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQge0poaUdhdGV3YXlDb21wb25lbnR9IGZyb20gJy4vZ2F0ZXdheS5jb21wb25lbnQnO1xyXG5pbXBvcnQge2dhdGV3YXlSb3V0ZX0gZnJvbSAnLi9nYXRld2F5LnJvdXRlJ1xyXG5pbXBvcnQge05nSmhpcHN0ZXJNb2R1bGV9IGZyb20gJ25nLWpoaXBzdGVyJztcclxuaW1wb3J0IHtHYXRld2F5Um91dGVzU2VydmljZX0gZnJvbSAnLi9nYXRld2F5LXJvdXRlcy5zZXJ2aWNlJztcclxuXHJcbmNvbnN0IEVOVElUWV9TVEFURVMgPSBbLi4uZ2F0ZXdheVJvdXRlXTtcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgICBpbXBvcnRzOiBbXHJcbiAgICAgIENvbW1vbk1vZHVsZSxcclxuICAgICAgRm9ybXNNb2R1bGUsXHJcbiAgICAgIE5nSmhpcHN0ZXJNb2R1bGUsXHJcbiAgICAgIFJvdXRlck1vZHVsZS5mb3JDaGlsZChFTlRJVFlfU1RBVEVTKVxyXG4gICAgXSxcclxuICAgIGV4cG9ydHM6IFtcclxuICAgICAgSmhpR2F0ZXdheUNvbXBvbmVudFxyXG4gICAgXSxcclxuICAgIGRlY2xhcmF0aW9uczogW1xyXG4gICAgICBKaGlHYXRld2F5Q29tcG9uZW50XHJcbiAgICBdLFxyXG4gICAgcHJvdmlkZXJzOiBbXHJcbiAgICAgIEdhdGV3YXlSb3V0ZXNTZXJ2aWNlXHJcbiAgICBdLFxyXG4gICAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBHYXRld2F5TW9kdWxlIHt9XHJcbiIsImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7SHR0cENsaWVudCwgSHR0cFBhcmFtcywgSHR0cFJlc3BvbnNlfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7T2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7Y3JlYXRlUmVxdWVzdE9wdGlvbn0gZnJvbSAnLi4vLi4vdXRpbC9yZXF1ZXN0LXV0aWwnO1xyXG5pbXBvcnQge0F1ZGl0fSBmcm9tICcuLi8uLi9tb2RlbC9hdWRpdC5tb2RlbCc7XHJcblxyXG5jb25zdCBTRVJWRVJfQVBJX1VSTCA9ICAnLi8nO1xyXG5cclxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcclxuZXhwb3J0IGNsYXNzIEF1ZGl0c1NlcnZpY2Uge1xyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50KSB7fVxyXG5cclxuICAgIHF1ZXJ5KHJlcTogYW55KTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8QXVkaXRbXT4+IHtcclxuICAgICAgICBjb25zdCBwYXJhbXM6IEh0dHBQYXJhbXMgPSBjcmVhdGVSZXF1ZXN0T3B0aW9uKHJlcSk7XHJcbiAgICAgICAgcGFyYW1zLnNldCgnZnJvbURhdGUnLCByZXEuZnJvbURhdGUpO1xyXG4gICAgICAgIHBhcmFtcy5zZXQoJ3RvRGF0ZScsIHJlcS50b0RhdGUpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEF1ZGl0W10+KFNFUlZFUl9BUElfVVJMICsgJ21hbmFnZW1lbnQvYXVkaXRzJywge1xyXG4gICAgICAgICAgICBwYXJhbXMsXHJcbiAgICAgICAgICAgIG9ic2VydmU6ICdyZXNwb25zZSdcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge0NvbXBvbmVudCwgT25EZXN0cm95LCBPbkluaXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0h0dHBSZXNwb25zZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQge0RhdGVQaXBlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlLCBSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7SmhpUGFyc2VMaW5rc30gZnJvbSAnbmctamhpcHN0ZXInO1xyXG5pbXBvcnQge0F1ZGl0c1NlcnZpY2V9IGZyb20gJy4vYXVkaXRzLnNlcnZpY2UnO1xyXG5pbXBvcnQge1BvcnRhbEFsZXJ0U2VydmljZX0gZnJvbSAnLi4vLi4vYWxlcnQvcG9ydGFsLWFsZXJ0LnNlcnZpY2UnO1xyXG5pbXBvcnQge0lURU1TX1BFUl9QQUdFfSBmcm9tICcuLi8uLi91dGlsL3BhZ2luYXRpb24uY29uc3RhbnRzJztcclxuaW1wb3J0IHtBdWRpdH0gZnJvbSAnLi4vLi4vbW9kZWwvYXVkaXQubW9kZWwnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2poaS1hdWRpdCcsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vYXVkaXRzLmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQXVkaXRzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gICAgYXVkaXRzOiBBdWRpdFtdO1xyXG4gICAgZnJvbURhdGU6IHN0cmluZztcclxuICAgIGl0ZW1zUGVyUGFnZTogYW55O1xyXG4gICAgbGlua3M6IGFueTtcclxuICAgIHF1ZXJ5Q291bnQ6IG51bWJlcjtcclxuICAgIHBhZ2U6IG51bWJlcjtcclxuICAgIHJvdXRlRGF0YTogYW55O1xyXG4gICAgcHJlZGljYXRlOiBhbnk7XHJcbiAgICBwcmV2aW91c1BhZ2U6IGFueTtcclxuICAgIHJldmVyc2U6IGJvb2xlYW47XHJcbiAgICB0b0RhdGU6IHN0cmluZztcclxuICAgIHRvdGFsSXRlbXM6IG51bWJlcjtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIGF1ZGl0c1NlcnZpY2U6IEF1ZGl0c1NlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBhbGVydFNlcnZpY2U6IFBvcnRhbEFsZXJ0U2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHBhcnNlTGlua3M6IEpoaVBhcnNlTGlua3MsXHJcbiAgICAgICAgcHJpdmF0ZSBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICAgICAgcHJpdmF0ZSBkYXRlUGlwZTogRGF0ZVBpcGUsXHJcbiAgICAgICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlclxyXG4gICAgKSB7XHJcbiAgICAgICAgdGhpcy5pdGVtc1BlclBhZ2UgPSBJVEVNU19QRVJfUEFHRTtcclxuICAgICAgICB0aGlzLnJvdXRlRGF0YSA9IHRoaXMuYWN0aXZhdGVkUm91dGUuZGF0YS5zdWJzY3JpYmUoZGF0YSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucGFnZSA9IGRhdGFbJ3BhZ2luZ1BhcmFtcyddLnBhZ2U7XHJcbiAgICAgICAgICAgIHRoaXMucHJldmlvdXNQYWdlID0gZGF0YVsncGFnaW5nUGFyYW1zJ10ucGFnZTtcclxuICAgICAgICAgICAgdGhpcy5yZXZlcnNlID0gZGF0YVsncGFnaW5nUGFyYW1zJ10uYXNjZW5kaW5nO1xyXG4gICAgICAgICAgICB0aGlzLnByZWRpY2F0ZSA9IGRhdGFbJ3BhZ2luZ1BhcmFtcyddLnByZWRpY2F0ZTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLnRvZGF5KCk7XHJcbiAgICAgICAgdGhpcy5wcmV2aW91c01vbnRoKCk7XHJcbiAgICAgICAgdGhpcy5sb2FkQWxsKCk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICAgICAgdGhpcy5yb3V0ZURhdGEudW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcmV2aW91c01vbnRoKCkge1xyXG4gICAgICAgIGNvbnN0IGRhdGVGb3JtYXQgPSAneXl5eS1NTS1kZCc7XHJcbiAgICAgICAgbGV0IGZyb21EYXRlOiBEYXRlID0gbmV3IERhdGUoKTtcclxuXHJcbiAgICAgICAgaWYgKGZyb21EYXRlLmdldE1vbnRoKCkgPT09IDApIHtcclxuICAgICAgICAgICAgZnJvbURhdGUgPSBuZXcgRGF0ZShmcm9tRGF0ZS5nZXRGdWxsWWVhcigpIC0gMSwgMTEsIGZyb21EYXRlLmdldERhdGUoKSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZnJvbURhdGUgPSBuZXcgRGF0ZShmcm9tRGF0ZS5nZXRGdWxsWWVhcigpLCBmcm9tRGF0ZS5nZXRNb250aCgpIC0gMSwgZnJvbURhdGUuZ2V0RGF0ZSgpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZnJvbURhdGUgPSB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShmcm9tRGF0ZSwgZGF0ZUZvcm1hdCk7XHJcbiAgICB9XHJcblxyXG4gICAgdG9kYXkoKSB7XHJcbiAgICAgICAgY29uc3QgZGF0ZUZvcm1hdCA9ICd5eXl5LU1NLWRkJztcclxuICAgICAgICAvLyBUb2RheSArIDEgZGF5IC0gbmVlZGVkIGlmIHRoZSBjdXJyZW50IGRheSBtdXN0IGJlIGluY2x1ZGVkXHJcbiAgICAgICAgY29uc3QgdG9kYXk6IERhdGUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgIHRvZGF5LnNldERhdGUodG9kYXkuZ2V0RGF0ZSgpICsgMSk7XHJcbiAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHRvZGF5LmdldEZ1bGxZZWFyKCksIHRvZGF5LmdldE1vbnRoKCksIHRvZGF5LmdldERhdGUoKSk7XHJcbiAgICAgICAgdGhpcy50b0RhdGUgPSB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShkYXRlLCBkYXRlRm9ybWF0KTtcclxuICAgIH1cclxuXHJcbiAgICBsb2FkQWxsKCkge1xyXG4gICAgICAgIHRoaXMuYXVkaXRzU2VydmljZVxyXG4gICAgICAgICAgICAucXVlcnkoe1xyXG4gICAgICAgICAgICAgICAgcGFnZTogdGhpcy5wYWdlIC0gMSxcclxuICAgICAgICAgICAgICAgIHNpemU6IHRoaXMuaXRlbXNQZXJQYWdlLFxyXG4gICAgICAgICAgICAgICAgc29ydDogdGhpcy5zb3J0KCksXHJcbiAgICAgICAgICAgICAgICBmcm9tRGF0ZTogdGhpcy5mcm9tRGF0ZSxcclxuICAgICAgICAgICAgICAgIHRvRGF0ZTogdGhpcy50b0RhdGVcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAgICAgICAgIChyZXM6IEh0dHBSZXNwb25zZTxBdWRpdFtdPikgPT4gdGhpcy5vblN1Y2Nlc3MocmVzLmJvZHksIHJlcy5oZWFkZXJzKSxcclxuICAgICAgICAgICAgICAgIChyZXM6IEh0dHBSZXNwb25zZTxhbnk+KSA9PiB0aGlzLm9uRXJyb3IocmVzLmJvZHkpXHJcbiAgICAgICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgc29ydCgpIHtcclxuICAgICAgICBjb25zdCByZXN1bHQgPSBbdGhpcy5wcmVkaWNhdGUgKyAnLCcgKyAodGhpcy5yZXZlcnNlID8gJ2FzYycgOiAnZGVzYycpXTtcclxuICAgICAgICBpZiAodGhpcy5wcmVkaWNhdGUgIT09ICdpZCcpIHtcclxuICAgICAgICAgICAgcmVzdWx0LnB1c2goJ2lkJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgbG9hZFBhZ2UocGFnZTogbnVtYmVyKSB7XHJcbiAgICAgICAgaWYgKHBhZ2UgIT09IHRoaXMucHJldmlvdXNQYWdlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJldmlvdXNQYWdlID0gcGFnZTtcclxuICAgICAgICAgICAgdGhpcy50cmFuc2l0aW9uKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRyYW5zaXRpb24oKSB7XHJcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvYWRtaW4vYXVkaXRzJ10sIHtcclxuICAgICAgICAgICAgcXVlcnlQYXJhbXM6IHtcclxuICAgICAgICAgICAgICAgIHBhZ2U6IHRoaXMucGFnZSxcclxuICAgICAgICAgICAgICAgIHNvcnQ6IHRoaXMucHJlZGljYXRlICsgJywnICsgKHRoaXMucmV2ZXJzZSA/ICdhc2MnIDogJ2Rlc2MnKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5sb2FkQWxsKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBvblN1Y2Nlc3MoZGF0YSwgaGVhZGVycykge1xyXG4gICAgICAgIHRoaXMubGlua3MgPSB0aGlzLnBhcnNlTGlua3MucGFyc2UoaGVhZGVycy5nZXQoJ2xpbmsnKSk7XHJcbiAgICAgICAgdGhpcy50b3RhbEl0ZW1zID0gaGVhZGVycy5nZXQoJ1gtVG90YWwtQ291bnQnKTtcclxuICAgICAgICB0aGlzLnF1ZXJ5Q291bnQgPSB0aGlzLnRvdGFsSXRlbXM7XHJcbiAgICAgICAgdGhpcy5hdWRpdHMgPSBkYXRhO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgb25FcnJvcihlcnJvcikge1xyXG4gICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKGVycm9yLmVycm9yLCBlcnJvci5tZXNzYWdlLCBudWxsKTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge1JvdXRlfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQge0poaVJlc29sdmVQYWdpbmdQYXJhbXN9IGZyb20gJ25nLWpoaXBzdGVyJztcclxuaW1wb3J0IHtBdWRpdHNDb21wb25lbnR9IGZyb20gJy4vYXVkaXRzLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7VXNlclJvdXRlQWNjZXNzU2VydmljZX0gZnJvbSAnLi4vLi4vYXV0aC91c2VyLXJvdXRlLWFjY2Vzcy1zZXJ2aWNlJztcclxuXHJcbmV4cG9ydCBjb25zdCBhdWRpdHNSb3V0ZTogUm91dGVbXSA9IFtcclxuICB7XHJcbiAgICBwYXRoOiAnYXVkaXRzJyxcclxuICAgIGNvbXBvbmVudDogQXVkaXRzQ29tcG9uZW50LFxyXG4gICAgcmVzb2x2ZToge1xyXG4gICAgICAgIHBhZ2luZ1BhcmFtczogSmhpUmVzb2x2ZVBhZ2luZ1BhcmFtc1xyXG4gICAgfSxcclxuICAgIGRhdGE6IHtcclxuICAgICAgICBwYWdlVGl0bGU6ICdBdWRpdG9yaWFzJyxcclxuICAgICAgICBkZWZhdWx0U29ydDogJ2F1ZGl0RXZlbnREYXRlLGRlc2MnLFxyXG4gICAgICAgIGF1dGhvcml0aWVzOiBbJ1JPTEVfQURNSU4nXVxyXG4gICAgfSxcclxuICAgIGNhbkFjdGl2YXRlOiBbVXNlclJvdXRlQWNjZXNzU2VydmljZV1cclxuICB9XHJcbl07XHJcbiIsImltcG9ydCB7Q1VTVE9NX0VMRU1FTlRTX1NDSEVNQSwgTmdNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1JvdXRlck1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7Rm9ybXNNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHthdWRpdHNSb3V0ZX0gZnJvbSAnLi9hdWRpdHMucm91dGUnXHJcbmltcG9ydCB7TmdKaGlwc3Rlck1vZHVsZX0gZnJvbSAnbmctamhpcHN0ZXInO1xyXG5pbXBvcnQge0F1ZGl0c0NvbXBvbmVudH0gZnJvbSAnLi9hdWRpdHMuY29tcG9uZW50JztcclxuXHJcbmNvbnN0IEVOVElUWV9TVEFURVMgPSBbLi4uYXVkaXRzUm91dGVdO1xyXG5cclxuQE5nTW9kdWxlKHtcclxuICAgIGltcG9ydHM6IFtcclxuICAgICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgICBGb3Jtc01vZHVsZSxcclxuICAgICAgTmdKaGlwc3Rlck1vZHVsZSxcclxuICAgICAgUm91dGVyTW9kdWxlLmZvckNoaWxkKEVOVElUWV9TVEFURVMpXHJcbiAgICBdLFxyXG4gICAgZXhwb3J0czogW1xyXG4gICAgICBBdWRpdHNDb21wb25lbnRcclxuICAgIF0sXHJcbiAgICBkZWNsYXJhdGlvbnM6IFtcclxuICAgICAgQXVkaXRzQ29tcG9uZW50XHJcbiAgICBdLFxyXG4gICAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBdWRpdHNNb2R1bGUge31cclxuIiwiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuY29uc3QgU0VSVkVSX0FQSV9VUkwgPSAgJy4vJztcclxuXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXHJcbmV4cG9ydCBjbGFzcyBKaGlDb25maWd1cmF0aW9uU2VydmljZSB7XHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQpIHt9XHJcblxyXG4gICAgZ2V0KCk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoU0VSVkVSX0FQSV9VUkwgKyAnbWFuYWdlbWVudC9jb25maWdwcm9wcycsIHsgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyB9KS5waXBlKFxyXG4gICAgICAgICAgICBtYXAoKHJlczogSHR0cFJlc3BvbnNlPGFueT4pID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHByb3BlcnRpZXM6IGFueVtdID0gW107XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwcm9wZXJ0aWVzT2JqZWN0ID0gdGhpcy5nZXRDb25maWdQcm9wZXJ0aWVzT2JqZWN0cyhyZXMuYm9keSk7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBwcm9wZXJ0aWVzT2JqZWN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnRpZXNPYmplY3QuaGFzT3duUHJvcGVydHkoa2V5KSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzLnB1c2gocHJvcGVydGllc09iamVjdFtrZXldKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHByb3BlcnRpZXMuc29ydCgocHJvcGVydHlBLCBwcm9wZXJ0eUIpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJvcGVydHlBLnByZWZpeCA9PT0gcHJvcGVydHlCLnByZWZpeCA/IDAgOiBwcm9wZXJ0eUEucHJlZml4IDwgcHJvcGVydHlCLnByZWZpeCA/IC0xIDogMTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q29uZmlnUHJvcGVydGllc09iamVjdHMocmVzOiBPYmplY3QpIHtcclxuICAgICAgICAvLyBUaGlzIGNvZGUgaXMgZm9yIFNwcmluZyBCb290IDJcclxuICAgICAgICBpZiAocmVzWydjb250ZXh0cyddICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gcmVzWydjb250ZXh0cyddKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBJZiB0aGUga2V5IGlzIG5vdCBib290c3RyYXAsIGl0IHdpbGwgYmUgdGhlIEFwcGxpY2F0aW9uQ29udGV4dCBJZFxyXG4gICAgICAgICAgICAgICAgLy8gRm9yIGRlZmF1bHQgYXBwLCBpdCBpcyBiYXNlTmFtZVxyXG4gICAgICAgICAgICAgICAgLy8gRm9yIG1pY3Jvc2VydmljZSwgaXQgaXMgYmFzZU5hbWUtMVxyXG4gICAgICAgICAgICAgICAgaWYgKCFrZXkuc3RhcnRzV2l0aCgnYm9vdHN0cmFwJykpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzWydjb250ZXh0cyddW2tleV1bJ2JlYW5zJ107XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gYnkgZGVmYXVsdCwgdXNlIHRoZSBkZWZhdWx0IEFwcGxpY2F0aW9uQ29udGV4dCBJZFxyXG4gICAgICAgIHJldHVybiByZXNbJ2NvbnRleHRzJ11bJ3BvcnRhbEdhdGV3YXknXVsnYmVhbnMnXTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRFbnYoKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldChTRVJWRVJfQVBJX1VSTCArICdtYW5hZ2VtZW50L2VudicsIHsgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyB9KS5waXBlKFxyXG4gICAgICAgICAgICBtYXAoKHJlczogSHR0cFJlc3BvbnNlPGFueT4pID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHByb3BlcnRpZXM6IGFueSA9IHt9O1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcHJvcGVydHlTb3VyY2VzID0gcmVzLmJvZHlbJ3Byb3BlcnR5U291cmNlcyddO1xyXG5cclxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcHJvcGVydHlPYmplY3Qgb2YgcHJvcGVydHlTb3VyY2VzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmFtZSA9IHByb3BlcnR5T2JqZWN0WyduYW1lJ107XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGV0YWlsUHJvcGVydGllcyA9IHByb3BlcnR5T2JqZWN0Wydwcm9wZXJ0aWVzJ107XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsczogYW55W10gPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGtleURldGFpbCBpbiBkZXRhaWxQcm9wZXJ0aWVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZXRhaWxQcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KGtleURldGFpbCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHMucHVzaCh7IGtleToga2V5RGV0YWlsLCB2YWw6IGRldGFpbFByb3BlcnRpZXNba2V5RGV0YWlsXVsndmFsdWUnXSB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzW25hbWVdID0gdmFscztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBwcm9wZXJ0aWVzO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgSmhpQ29uZmlndXJhdGlvblNlcnZpY2UgfSBmcm9tICcuL2NvbmZpZ3VyYXRpb24uc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnamhpLWNvbmZpZ3VyYXRpb24nLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2NvbmZpZ3VyYXRpb24uY29tcG9uZW50Lmh0bWwnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBKaGlDb25maWd1cmF0aW9uQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICAgIGFsbENvbmZpZ3VyYXRpb246IGFueSA9IG51bGw7XHJcbiAgICBjb25maWd1cmF0aW9uOiBhbnkgPSBudWxsO1xyXG4gICAgY29uZmlnS2V5czogYW55W107XHJcbiAgICBmaWx0ZXI6IHN0cmluZztcclxuICAgIG9yZGVyUHJvcDogc3RyaW5nO1xyXG4gICAgcmV2ZXJzZTogYm9vbGVhbjtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNvbmZpZ3VyYXRpb25TZXJ2aWNlOiBKaGlDb25maWd1cmF0aW9uU2VydmljZSkge1xyXG4gICAgICAgIHRoaXMuY29uZmlnS2V5cyA9IFtdO1xyXG4gICAgICAgIHRoaXMuZmlsdGVyID0gJyc7XHJcbiAgICAgICAgdGhpcy5vcmRlclByb3AgPSAncHJlZml4JztcclxuICAgICAgICB0aGlzLnJldmVyc2UgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBrZXlzKGRpY3QpOiBBcnJheTxzdHJpbmc+IHtcclxuICAgICAgICByZXR1cm4gZGljdCA9PT0gdW5kZWZpbmVkID8gW10gOiBPYmplY3Qua2V5cyhkaWN0KTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb25TZXJ2aWNlLmdldCgpLnN1YnNjcmliZShjb25maWd1cmF0aW9uID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvbjtcclxuXHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgY29uZmlnIG9mIGNvbmZpZ3VyYXRpb24pIHtcclxuICAgICAgICAgICAgICAgIGlmIChjb25maWcucHJvcGVydGllcyAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25maWdLZXlzLnB1c2goT2JqZWN0LmtleXMoY29uZmlnLnByb3BlcnRpZXMpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb25TZXJ2aWNlLmdldEVudigpLnN1YnNjcmliZShjb25maWd1cmF0aW9uID0+IHtcclxuICAgICAgICAgICAgdGhpcy5hbGxDb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvbjtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge1JvdXRlfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5cclxuaW1wb3J0IHtKaGlDb25maWd1cmF0aW9uQ29tcG9uZW50fSBmcm9tICcuL2NvbmZpZ3VyYXRpb24uY29tcG9uZW50JztcclxuaW1wb3J0IHtVc2VyUm91dGVBY2Nlc3NTZXJ2aWNlfSBmcm9tICcuLi8uLi9hdXRoL3VzZXItcm91dGUtYWNjZXNzLXNlcnZpY2UnO1xyXG5cclxuZXhwb3J0IGNvbnN0IGNvbmZpZ3VyYXRpb25Sb3V0ZTogUm91dGVbXSA9IFtcclxuICB7XHJcbiAgICBwYXRoOiAnamhpLWNvbmZpZ3VyYXRpb24nLFxyXG4gICAgY29tcG9uZW50OiBKaGlDb25maWd1cmF0aW9uQ29tcG9uZW50LFxyXG4gICAgZGF0YToge1xyXG4gICAgICAgIHBhZ2VUaXRsZTogJ0NvbmZpZ3VyYcODwqfDg8KjbycsXHJcbiAgICAgICAgYXV0aG9yaXRpZXM6IFsnUk9MRV9BRE1JTiddXHJcbiAgICB9LFxyXG4gICAgY2FuQWN0aXZhdGU6IFtVc2VyUm91dGVBY2Nlc3NTZXJ2aWNlXVxyXG4gIH1cclxuXTtcclxuIiwiaW1wb3J0IHtDVVNUT01fRUxFTUVOVFNfU0NIRU1BLCBOZ01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7Um91dGVyTW9kdWxlfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQge0NvbW1vbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHtGb3Jtc01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQge05nSmhpcHN0ZXJNb2R1bGV9IGZyb20gJ25nLWpoaXBzdGVyJztcclxuaW1wb3J0IHtKaGlDb25maWd1cmF0aW9uQ29tcG9uZW50fSBmcm9tICcuL2NvbmZpZ3VyYXRpb24uY29tcG9uZW50JztcclxuaW1wb3J0IHtjb25maWd1cmF0aW9uUm91dGV9IGZyb20gJy4vY29uZmlndXJhdGlvbi5yb3V0ZSdcclxuXHJcbmNvbnN0IEVOVElUWV9TVEFURVMgPSBbLi4uY29uZmlndXJhdGlvblJvdXRlXTtcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgICBpbXBvcnRzOiBbXHJcbiAgICAgIENvbW1vbk1vZHVsZSxcclxuICAgICAgRm9ybXNNb2R1bGUsXHJcbiAgICAgIE5nSmhpcHN0ZXJNb2R1bGUsXHJcbiAgICAgIFJvdXRlck1vZHVsZS5mb3JDaGlsZChFTlRJVFlfU1RBVEVTKVxyXG4gICAgXSxcclxuICAgIGV4cG9ydHM6IFtcclxuICAgICAgSmhpQ29uZmlndXJhdGlvbkNvbXBvbmVudFxyXG4gICAgXSxcclxuICAgIGRlY2xhcmF0aW9uczogW1xyXG4gICAgICBKaGlDb25maWd1cmF0aW9uQ29tcG9uZW50XHJcbiAgICBdLFxyXG4gICAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDb25maWd1cmF0aW9uTW9kdWxlIHt9XHJcbiIsImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE5nYkFjdGl2ZU1vZGFsIH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2poaS1tZXRyaWNzLW1vZGFsJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9tZXRyaWNzLW1vZGFsLmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgSmhpTWV0cmljc01vbml0b3JpbmdNb2RhbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgICB0aHJlYWREdW1wRmlsdGVyOiBhbnk7XHJcbiAgICB0aHJlYWREdW1wOiBhbnk7XHJcbiAgICB0aHJlYWREdW1wQWxsID0gMDtcclxuICAgIHRocmVhZER1bXBCbG9ja2VkID0gMDtcclxuICAgIHRocmVhZER1bXBSdW5uYWJsZSA9IDA7XHJcbiAgICB0aHJlYWREdW1wVGltZWRXYWl0aW5nID0gMDtcclxuICAgIHRocmVhZER1bXBXYWl0aW5nID0gMDtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgYWN0aXZlTW9kYWw6IE5nYkFjdGl2ZU1vZGFsKSB7fVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIHRoaXMudGhyZWFkRHVtcC5mb3JFYWNoKHZhbHVlID0+IHtcclxuICAgICAgICAgICAgaWYgKHZhbHVlLnRocmVhZFN0YXRlID09PSAnUlVOTkFCTEUnKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRocmVhZER1bXBSdW5uYWJsZSArPSAxO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLnRocmVhZFN0YXRlID09PSAnV0FJVElORycpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudGhyZWFkRHVtcFdhaXRpbmcgKz0gMTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS50aHJlYWRTdGF0ZSA9PT0gJ1RJTUVEX1dBSVRJTkcnKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRocmVhZER1bXBUaW1lZFdhaXRpbmcgKz0gMTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS50aHJlYWRTdGF0ZSA9PT0gJ0JMT0NLRUQnKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRocmVhZER1bXBCbG9ja2VkICs9IDE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy50aHJlYWREdW1wQWxsID0gdGhpcy50aHJlYWREdW1wUnVubmFibGUgKyB0aGlzLnRocmVhZER1bXBXYWl0aW5nICsgdGhpcy50aHJlYWREdW1wVGltZWRXYWl0aW5nICsgdGhpcy50aHJlYWREdW1wQmxvY2tlZDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRCYWRnZUNsYXNzKHRocmVhZFN0YXRlKSB7XHJcbiAgICAgICAgaWYgKHRocmVhZFN0YXRlID09PSAnUlVOTkFCTEUnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnYmFkZ2Utc3VjY2Vzcyc7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aHJlYWRTdGF0ZSA9PT0gJ1dBSVRJTkcnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnYmFkZ2UtaW5mbyc7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aHJlYWRTdGF0ZSA9PT0gJ1RJTUVEX1dBSVRJTkcnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnYmFkZ2Utd2FybmluZyc7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aHJlYWRTdGF0ZSA9PT0gJ0JMT0NLRUQnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnYmFkZ2UtZGFuZ2VyJztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcblxyXG5jb25zdCBTRVJWRVJfQVBJX1VSTCA9ICcuLyc7XHJcblxyXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxyXG5leHBvcnQgY2xhc3MgSmhpTWV0cmljc1NlcnZpY2Uge1xyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50KSB7fVxyXG5cclxuICAgIGdldE1ldHJpY3MoKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldChTRVJWRVJfQVBJX1VSTCArICdtYW5hZ2VtZW50L21ldHJpY3MnKTtcclxuICAgIH1cclxuXHJcbiAgICB0aHJlYWREdW1wKCk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoU0VSVkVSX0FQSV9VUkwgKyAnbWFuYWdlbWVudC90aHJlYWRkdW1wJyk7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTmdiTW9kYWwgfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcblxyXG5pbXBvcnQgeyBKaGlNZXRyaWNzTW9uaXRvcmluZ01vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi9tZXRyaWNzLW1vZGFsLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEpoaU1ldHJpY3NTZXJ2aWNlIH0gZnJvbSAnLi9tZXRyaWNzLnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2poaS1tZXRyaWNzJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9tZXRyaWNzLmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgSmhpTWV0cmljc01vbml0b3JpbmdDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gICAgbWV0cmljczogYW55ID0ge307XHJcbiAgICBjYWNoZXNTdGF0czogYW55ID0ge307XHJcbiAgICBzZXJ2aWNlc1N0YXRzOiBhbnkgPSB7fTtcclxuICAgIHVwZGF0aW5nTWV0cmljcyA9IHRydWU7XHJcbiAgICBKQ0FDSEVfS0VZOiBzdHJpbmc7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBOZ2JNb2RhbCxcclxuICAgICAgcHJpdmF0ZSBtZXRyaWNzU2VydmljZTogSmhpTWV0cmljc1NlcnZpY2UpIHtcclxuICAgICAgICB0aGlzLkpDQUNIRV9LRVkgPSAnamNhY2hlLnN0YXRpc3RpY3MnO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIHRoaXMucmVmcmVzaCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlZnJlc2goKSB7XHJcbiAgICAgICAgdGhpcy51cGRhdGluZ01ldHJpY3MgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMubWV0cmljc1NlcnZpY2UuZ2V0TWV0cmljcygpLnN1YnNjcmliZShtZXRyaWNzID0+IHtcclxuICAgICAgICAgICAgdGhpcy5tZXRyaWNzID0gbWV0cmljcztcclxuICAgICAgICAgICAgdGhpcy51cGRhdGluZ01ldHJpY3MgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5zZXJ2aWNlc1N0YXRzID0ge307XHJcbiAgICAgICAgICAgIHRoaXMuY2FjaGVzU3RhdHMgPSB7fTtcclxuICAgICAgICAgICAgT2JqZWN0LmtleXMobWV0cmljcy50aW1lcnMpLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gbWV0cmljcy50aW1lcnNba2V5XTtcclxuICAgICAgICAgICAgICAgIGlmIChrZXkuaW5jbHVkZXMoJ3dlYi5yZXN0JykgfHwga2V5LmluY2x1ZGVzKCdzZXJ2aWNlJykpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlcnZpY2VzU3RhdHNba2V5XSA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgT2JqZWN0LmtleXMobWV0cmljcy5nYXVnZXMpLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChrZXkuaW5jbHVkZXMoJ2pjYWNoZS5zdGF0aXN0aWNzJykpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IG1ldHJpY3MuZ2F1Z2VzW2tleV0udmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gcmVtb3ZlIGdldHMgb3IgcHV0c1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0ga2V5Lmxhc3RJbmRleE9mKCcuJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3S2V5ID0ga2V5LnN1YnN0cigwLCBpbmRleCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIEtlZXAgdGhlIG5hbWUgb2YgdGhlIGRvbWFpblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2FjaGVzU3RhdHNbbmV3S2V5XSA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogdGhpcy5KQ0FDSEVfS0VZLmxlbmd0aCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZWZyZXNoVGhyZWFkRHVtcERhdGEoKSB7XHJcbiAgICAgICAgdGhpcy5tZXRyaWNzU2VydmljZS50aHJlYWREdW1wKCkuc3Vic2NyaWJlKGRhdGEgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBtb2RhbFJlZiA9IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oSmhpTWV0cmljc01vbml0b3JpbmdNb2RhbENvbXBvbmVudCwgeyBzaXplOiAnbGcnIH0pO1xyXG4gICAgICAgICAgICBtb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS50aHJlYWREdW1wID0gZGF0YS50aHJlYWRzO1xyXG4gICAgICAgICAgICBtb2RhbFJlZi5yZXN1bHQudGhlbihcclxuICAgICAgICAgICAgICAgIHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gTGVmdCBibGFuayBpbnRlbnRpb25hbGx5LCBub3RoaW5nIHRvIGRvIGhlcmVcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICByZWFzb24gPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIExlZnQgYmxhbmsgaW50ZW50aW9uYWxseSwgbm90aGluZyB0byBkbyBoZXJlXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZmlsdGVyTmFOKGlucHV0KSB7XHJcbiAgICAgICAgaWYgKGlzTmFOKGlucHV0KSkge1xyXG4gICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGlucHV0O1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7Um91dGV9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcblxyXG5pbXBvcnQge0poaU1ldHJpY3NNb25pdG9yaW5nQ29tcG9uZW50fSBmcm9tICcuL21ldHJpY3MuY29tcG9uZW50JztcclxuaW1wb3J0IHtVc2VyUm91dGVBY2Nlc3NTZXJ2aWNlfSBmcm9tICcuLi8uLi9hdXRoL3VzZXItcm91dGUtYWNjZXNzLXNlcnZpY2UnO1xyXG5cclxuZXhwb3J0IGNvbnN0IG1ldHJpY3NSb3V0ZTogUm91dGVbXSA9IFt7XHJcbiAgICBwYXRoOiAnamhpLW1ldHJpY3MnLFxyXG4gICAgY29tcG9uZW50OiBKaGlNZXRyaWNzTW9uaXRvcmluZ0NvbXBvbmVudCxcclxuICAgIGRhdGE6IHtcclxuICAgICAgICBwYWdlVGl0bGU6ICdNw4PCqXRyaWNhcycsXHJcbiAgICAgICAgYXV0aG9yaXRpZXM6IFsnUk9MRV9BRE1JTiddXHJcbiAgICB9LFxyXG4gICAgY2FuQWN0aXZhdGU6IFtVc2VyUm91dGVBY2Nlc3NTZXJ2aWNlXVxyXG59XTtcclxuIiwiaW1wb3J0IHtDVVNUT01fRUxFTUVOVFNfU0NIRU1BLCBOZ01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7Um91dGVyTW9kdWxlfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQge0NvbW1vbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHtGb3Jtc01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQge05nSmhpcHN0ZXJNb2R1bGV9IGZyb20gJ25nLWpoaXBzdGVyJztcclxuaW1wb3J0IHtKaGlNZXRyaWNzTW9uaXRvcmluZ01vZGFsQ29tcG9uZW50fSBmcm9tICcuL21ldHJpY3MtbW9kYWwuY29tcG9uZW50JztcclxuaW1wb3J0IHtKaGlNZXRyaWNzTW9uaXRvcmluZ0NvbXBvbmVudH0gZnJvbSAnLi9tZXRyaWNzLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7bWV0cmljc1JvdXRlfSBmcm9tICcuL21ldHJpY3Mucm91dGUnXHJcblxyXG5jb25zdCBFTlRJVFlfU1RBVEVTID0gWy4uLm1ldHJpY3NSb3V0ZV07XHJcblxyXG5ATmdNb2R1bGUoe1xyXG4gICAgaW1wb3J0czogW1xyXG4gICAgICBDb21tb25Nb2R1bGUsXHJcbiAgICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgICBOZ0poaXBzdGVyTW9kdWxlLFxyXG4gICAgICBSb3V0ZXJNb2R1bGUuZm9yQ2hpbGQoRU5USVRZX1NUQVRFUylcclxuICAgIF0sXHJcbiAgICBleHBvcnRzOiBbXHJcbiAgICAgIEpoaU1ldHJpY3NNb25pdG9yaW5nTW9kYWxDb21wb25lbnQsXHJcbiAgICAgIEpoaU1ldHJpY3NNb25pdG9yaW5nQ29tcG9uZW50XHJcbiAgICBdLFxyXG4gICAgZGVjbGFyYXRpb25zOiBbXHJcbiAgICAgIEpoaU1ldHJpY3NNb25pdG9yaW5nTW9kYWxDb21wb25lbnQsXHJcbiAgICAgIEpoaU1ldHJpY3NNb25pdG9yaW5nQ29tcG9uZW50XHJcbiAgICBdLFxyXG4gICAgZW50cnlDb21wb25lbnRzOiBbXHJcbiAgICAgIEpoaU1ldHJpY3NNb25pdG9yaW5nTW9kYWxDb21wb25lbnRcclxuICAgIF0sXHJcbiAgICBzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV1cclxufSlcclxuZXhwb3J0IGNsYXNzIE1ldHJpY3NNb2R1bGUge31cclxuIiwiaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnamhpLWRvY3MnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2RvY3MuY29tcG9uZW50Lmh0bWwnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBKaGlEb2NzQ29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKCkge31cclxufVxyXG4iLCJpbXBvcnQge1JvdXRlfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5cclxuaW1wb3J0IHtKaGlEb2NzQ29tcG9uZW50fSBmcm9tICcuL2RvY3MuY29tcG9uZW50JztcclxuaW1wb3J0IHtVc2VyUm91dGVBY2Nlc3NTZXJ2aWNlfSBmcm9tICcuLi8uLi9hdXRoL3VzZXItcm91dGUtYWNjZXNzLXNlcnZpY2UnO1xyXG5cclxuZXhwb3J0IGNvbnN0IGRvY3NSb3V0ZTogUm91dGVbXSA9IFt7XHJcbiAgICBwYXRoOiAnZG9jcycsXHJcbiAgICBjb21wb25lbnQ6IEpoaURvY3NDb21wb25lbnQsXHJcbiAgICBkYXRhOiB7XHJcbiAgICAgICAgcGFnZVRpdGxlOiAnZ2xvYmFsLm1lbnUuYWRtaW4uYXBpZG9jcycsXHJcbiAgICAgICAgYXV0aG9yaXRpZXM6IFsnUk9MRV9BRE1JTiddXHJcbiAgICB9LFxyXG4gICAgY2FuQWN0aXZhdGU6IFtVc2VyUm91dGVBY2Nlc3NTZXJ2aWNlXVxyXG59XTtcclxuIiwiaW1wb3J0IHtDVVNUT01fRUxFTUVOVFNfU0NIRU1BLCBOZ01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7Um91dGVyTW9kdWxlfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQge0NvbW1vbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHtGb3Jtc01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQge0poaURvY3NDb21wb25lbnR9IGZyb20gJy4vZG9jcy5jb21wb25lbnQnO1xyXG5pbXBvcnQge2RvY3NSb3V0ZX0gZnJvbSAnLi9kb2NzLnJvdXRlJ1xyXG5cclxuY29uc3QgRU5USVRZX1NUQVRFUyA9IFsuLi5kb2NzUm91dGVdO1xyXG5cclxuQE5nTW9kdWxlKHtcclxuICAgIGltcG9ydHM6IFtcclxuICAgICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgICBGb3Jtc01vZHVsZSxcclxuICAgICAgUm91dGVyTW9kdWxlLmZvckNoaWxkKEVOVElUWV9TVEFURVMpXHJcbiAgICBdLFxyXG4gICAgZXhwb3J0czogW1xyXG4gICAgICBKaGlEb2NzQ29tcG9uZW50XHJcbiAgICBdLFxyXG4gICAgZGVjbGFyYXRpb25zOiBbXHJcbiAgICAgIEpoaURvY3NDb21wb25lbnRcclxuICAgIF0sXHJcbiAgICBzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV1cclxufSlcclxuZXhwb3J0IGNsYXNzIERvY3NNb2R1bGUge31cclxuIiwiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcblxyXG5jb25zdCBTRVJWRVJfQVBJX1VSTCA9ICcuLyc7XHJcblxyXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxyXG5leHBvcnQgY2xhc3MgSmhpSGVhbHRoU2VydmljZSB7XHJcbiAgICBzZXBhcmF0b3I6IHN0cmluZztcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQpIHtcclxuICAgICAgICB0aGlzLnNlcGFyYXRvciA9ICcuJztcclxuICAgIH1cclxuXHJcbiAgICBjaGVja0hlYWx0aCgpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFNFUlZFUl9BUElfVVJMICsgJ21hbmFnZW1lbnQvaGVhbHRoJyk7XHJcbiAgICB9XHJcblxyXG4gICAgdHJhbnNmb3JtSGVhbHRoRGF0YShkYXRhKTogYW55IHtcclxuICAgICAgICBjb25zdCByZXNwb25zZSA9IFtdO1xyXG4gICAgICAgIHRoaXMuZmxhdHRlbkhlYWx0aERhdGEocmVzcG9uc2UsIG51bGwsIGRhdGEuZGV0YWlscyk7XHJcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEJhc2VOYW1lKG5hbWUpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmIChuYW1lKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNwbGl0ID0gbmFtZS5zcGxpdCgnLicpO1xyXG4gICAgICAgICAgICByZXR1cm4gc3BsaXRbMF07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldFN1YlN5c3RlbU5hbWUobmFtZSk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKG5hbWUpIHtcclxuICAgICAgICAgICAgY29uc3Qgc3BsaXQgPSBuYW1lLnNwbGl0KCcuJyk7XHJcbiAgICAgICAgICAgIHNwbGl0LnNwbGljZSgwLCAxKTtcclxuICAgICAgICAgICAgY29uc3QgcmVtYWluZGVyID0gc3BsaXQuam9pbignLicpO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVtYWluZGVyID8gJyAtICcgKyByZW1haW5kZXIgOiAnJztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyogcHJpdmF0ZSBtZXRob2RzICovXHJcbiAgICBwcml2YXRlIGFkZEhlYWx0aE9iamVjdChyZXN1bHQsIGlzTGVhZiwgaGVhbHRoT2JqZWN0LCBuYW1lKTogYW55IHtcclxuICAgICAgICBjb25zdCBoZWFsdGhEYXRhOiBhbnkgPSB7XHJcbiAgICAgICAgICAgIG5hbWVcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBjb25zdCBkZXRhaWxzID0ge307XHJcbiAgICAgICAgbGV0IGhhc0RldGFpbHMgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gaGVhbHRoT2JqZWN0KSB7XHJcbiAgICAgICAgICAgIGlmIChoZWFsdGhPYmplY3QuaGFzT3duUHJvcGVydHkoa2V5KSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBoZWFsdGhPYmplY3Rba2V5XTtcclxuICAgICAgICAgICAgICAgIGlmIChrZXkgPT09ICdzdGF0dXMnIHx8IGtleSA9PT0gJ2Vycm9yJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGhlYWx0aERhdGFba2V5XSA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNIZWFsdGhPYmplY3QodmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbHNba2V5XSA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBoYXNEZXRhaWxzID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIEFkZCB0aGUgZGV0YWlsc1xyXG4gICAgICAgIGlmIChoYXNEZXRhaWxzKSB7XHJcbiAgICAgICAgICAgIGhlYWx0aERhdGEuZGV0YWlscyA9IGRldGFpbHM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBPbmx5IGFkZCBub2RlcyBpZiB0aGV5IHByb3ZpZGUgYWRkaXRpb25hbCBpbmZvcm1hdGlvblxyXG4gICAgICAgIGlmIChpc0xlYWYgfHwgaGFzRGV0YWlscyB8fCBoZWFsdGhEYXRhLmVycm9yKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKGhlYWx0aERhdGEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gaGVhbHRoRGF0YTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGZsYXR0ZW5IZWFsdGhEYXRhKHJlc3VsdCwgcGF0aCwgZGF0YSk6IGFueSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZGF0YSkge1xyXG4gICAgICAgICAgICBpZiAoZGF0YS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGRhdGFba2V5XTtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzSGVhbHRoT2JqZWN0KHZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmhhc1N1YlN5c3RlbSh2YWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRIZWFsdGhPYmplY3QocmVzdWx0LCBmYWxzZSwgdmFsdWUsIHRoaXMuZ2V0TW9kdWxlTmFtZShwYXRoLCBrZXkpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mbGF0dGVuSGVhbHRoRGF0YShyZXN1bHQsIHRoaXMuZ2V0TW9kdWxlTmFtZShwYXRoLCBrZXkpLCB2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRIZWFsdGhPYmplY3QocmVzdWx0LCB0cnVlLCB2YWx1ZSwgdGhpcy5nZXRNb2R1bGVOYW1lKHBhdGgsIGtleSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0TW9kdWxlTmFtZShwYXRoLCBuYW1lKTogc3RyaW5nIHtcclxuICAgICAgICBsZXQgcmVzdWx0O1xyXG4gICAgICAgIGlmIChwYXRoICYmIG5hbWUpIHtcclxuICAgICAgICAgICAgcmVzdWx0ID0gcGF0aCArIHRoaXMuc2VwYXJhdG9yICsgbmFtZTtcclxuICAgICAgICB9IGVsc2UgaWYgKHBhdGgpIHtcclxuICAgICAgICAgICAgcmVzdWx0ID0gcGF0aDtcclxuICAgICAgICB9IGVsc2UgaWYgKG5hbWUpIHtcclxuICAgICAgICAgICAgcmVzdWx0ID0gbmFtZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXN1bHQgPSAnJztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGhhc1N1YlN5c3RlbShoZWFsdGhPYmplY3QpOiBib29sZWFuIHtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIGhlYWx0aE9iamVjdCkge1xyXG4gICAgICAgICAgICBpZiAoaGVhbHRoT2JqZWN0Lmhhc093blByb3BlcnR5KGtleSkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gaGVhbHRoT2JqZWN0W2tleV07XHJcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgJiYgdmFsdWUuc3RhdHVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaXNIZWFsdGhPYmplY3QoaGVhbHRoT2JqZWN0KTogYm9vbGVhbiB7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IGZhbHNlO1xyXG5cclxuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBoZWFsdGhPYmplY3QpIHtcclxuICAgICAgICAgICAgaWYgKGhlYWx0aE9iamVjdC5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSAnc3RhdHVzJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTmdiQWN0aXZlTW9kYWwgfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcbmltcG9ydCB7IEpoaUhlYWx0aFNlcnZpY2UgfSBmcm9tICcuL2hlYWx0aC5zZXJ2aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdqaGktaGVhbHRoLW1vZGFsJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9oZWFsdGgtbW9kYWwuY29tcG9uZW50Lmh0bWwnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBKaGlIZWFsdGhNb2RhbENvbXBvbmVudCB7XHJcbiAgICBjdXJyZW50SGVhbHRoOiBhbnk7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgIHByaXZhdGUgaGVhbHRoU2VydmljZTogSmhpSGVhbHRoU2VydmljZSxcclxuICAgICAgcHVibGljIGFjdGl2ZU1vZGFsOiBOZ2JBY3RpdmVNb2RhbFxyXG4gICAgKSB7fVxyXG5cclxuICAgIGJhc2VOYW1lKG5hbWUpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5oZWFsdGhTZXJ2aWNlLmdldEJhc2VOYW1lKG5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHN1YlN5c3RlbU5hbWUobmFtZSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmhlYWx0aFNlcnZpY2UuZ2V0U3ViU3lzdGVtTmFtZShuYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICByZWFkYWJsZVZhbHVlKHZhbHVlOiBudW1iZXIpIHtcclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50SGVhbHRoLm5hbWUgPT09ICdkaXNrU3BhY2UnKSB7XHJcbiAgICAgICAgICAgIC8vIFNob3VsZCBkaXNwbGF5IHN0b3JhZ2Ugc3BhY2UgaW4gYW4gaHVtYW4gcmVhZGFibGUgdW5pdFxyXG4gICAgICAgICAgICBjb25zdCB2YWwgPSB2YWx1ZSAvIDEwNzM3NDE4MjQ7XHJcbiAgICAgICAgICAgIGlmICh2YWwgPiAxKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBWYWx1ZVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbC50b0ZpeGVkKDIpICsgJyBHQic7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKHZhbHVlIC8gMTA0ODU3NikudG9GaXhlZCgyKSArICcgTUInO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBOZ2JNb2RhbCB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuXHJcbmltcG9ydCB7IEpoaUhlYWx0aFNlcnZpY2UgfSBmcm9tICcuL2hlYWx0aC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSmhpSGVhbHRoTW9kYWxDb21wb25lbnQgfSBmcm9tICcuL2hlYWx0aC1tb2RhbC5jb21wb25lbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2poaS1oZWFsdGgnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2hlYWx0aC5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEpoaUhlYWx0aENoZWNrQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICAgIGhlYWx0aERhdGE6IGFueTtcclxuICAgIHVwZGF0aW5nSGVhbHRoOiBib29sZWFuO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBOZ2JNb2RhbCwgcHJpdmF0ZSBoZWFsdGhTZXJ2aWNlOiBKaGlIZWFsdGhTZXJ2aWNlKSB7fVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIHRoaXMucmVmcmVzaCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGJhc2VOYW1lKG5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmhlYWx0aFNlcnZpY2UuZ2V0QmFzZU5hbWUobmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0QmFkZ2VDbGFzcyhzdGF0dXNTdGF0ZSkge1xyXG4gICAgICAgIGlmIChzdGF0dXNTdGF0ZSA9PT0gJ1VQJykge1xyXG4gICAgICAgICAgICByZXR1cm4gJ2JhZGdlLXN1Y2Nlc3MnO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnYmFkZ2UtZGFuZ2VyJztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmVmcmVzaCgpIHtcclxuICAgICAgICB0aGlzLnVwZGF0aW5nSGVhbHRoID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgdGhpcy5oZWFsdGhTZXJ2aWNlLmNoZWNrSGVhbHRoKCkuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICBoZWFsdGggPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oZWFsdGhEYXRhID0gdGhpcy5oZWFsdGhTZXJ2aWNlLnRyYW5zZm9ybUhlYWx0aERhdGEoaGVhbHRoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRpbmdIZWFsdGggPSBmYWxzZTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyb3IgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGVycm9yLnN0YXR1cyA9PT0gNTAzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oZWFsdGhEYXRhID0gdGhpcy5oZWFsdGhTZXJ2aWNlLnRyYW5zZm9ybUhlYWx0aERhdGEoZXJyb3IuZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRpbmdIZWFsdGggPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgc2hvd0hlYWx0aChoZWFsdGg6IGFueSkge1xyXG4gICAgICAgIGNvbnN0IG1vZGFsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihKaGlIZWFsdGhNb2RhbENvbXBvbmVudCk7XHJcbiAgICAgICAgbW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2UuY3VycmVudEhlYWx0aCA9IGhlYWx0aDtcclxuICAgICAgICBtb2RhbFJlZi5yZXN1bHQudGhlbihcclxuICAgICAgICAgICAgcmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgIC8vIExlZnQgYmxhbmsgaW50ZW50aW9uYWxseSwgbm90aGluZyB0byBkbyBoZXJlXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHJlYXNvbiA9PiB7XHJcbiAgICAgICAgICAgICAgICAvLyBMZWZ0IGJsYW5rIGludGVudGlvbmFsbHksIG5vdGhpbmcgdG8gZG8gaGVyZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBzdWJTeXN0ZW1OYW1lKG5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmhlYWx0aFNlcnZpY2UuZ2V0U3ViU3lzdGVtTmFtZShuYW1lKTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQgeyBSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcblxyXG5pbXBvcnQgeyBKaGlIZWFsdGhDaGVja0NvbXBvbmVudCB9IGZyb20gJy4vaGVhbHRoLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7VXNlclJvdXRlQWNjZXNzU2VydmljZX0gZnJvbSAnLi4vLi4vYXV0aC91c2VyLXJvdXRlLWFjY2Vzcy1zZXJ2aWNlJztcclxuXHJcbmV4cG9ydCBjb25zdCBoZWFsdGhSb3V0ZTogUm91dGVbXSA9IFt7XHJcbiAgICBwYXRoOiAnamhpLWhlYWx0aCcsXHJcbiAgICBjb21wb25lbnQ6IEpoaUhlYWx0aENoZWNrQ29tcG9uZW50LFxyXG4gICAgZGF0YToge1xyXG4gICAgICAgIHBhZ2VUaXRsZTogJ0VzdGFkbyBkbyBTaXN0ZW1hJyxcclxuICAgICAgICBhdXRob3JpdGllczogWydST0xFX0FETUlOJ11cclxuICAgIH0sXHJcbiAgICBjYW5BY3RpdmF0ZTogW1VzZXJSb3V0ZUFjY2Vzc1NlcnZpY2VdXHJcbn1dO1xyXG4iLCJpbXBvcnQge0NVU1RPTV9FTEVNRU5UU19TQ0hFTUEsIE5nTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtSb3V0ZXJNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7Q29tbW9uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQge0Zvcm1zTW9kdWxlfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7SmhpSGVhbHRoQ2hlY2tDb21wb25lbnR9IGZyb20gJy4vaGVhbHRoLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7SmhpSGVhbHRoTW9kYWxDb21wb25lbnR9IGZyb20gJy4vaGVhbHRoLW1vZGFsLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7aGVhbHRoUm91dGV9IGZyb20gJy4vaGVhbHRoLnJvdXRlJ1xyXG5pbXBvcnQge05nSmhpcHN0ZXJNb2R1bGV9IGZyb20gJ25nLWpoaXBzdGVyJztcclxuXHJcbmNvbnN0IEVOVElUWV9TVEFURVMgPSBbLi4uaGVhbHRoUm91dGVdO1xyXG5cclxuQE5nTW9kdWxlKHtcclxuICAgIGltcG9ydHM6IFtcclxuICAgICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgICBGb3Jtc01vZHVsZSxcclxuICAgICAgTmdKaGlwc3Rlck1vZHVsZSxcclxuICAgICAgUm91dGVyTW9kdWxlLmZvckNoaWxkKEVOVElUWV9TVEFURVMpXHJcbiAgICBdLFxyXG4gICAgZXhwb3J0czogW1xyXG4gICAgICBKaGlIZWFsdGhDaGVja0NvbXBvbmVudCxcclxuICAgICAgSmhpSGVhbHRoTW9kYWxDb21wb25lbnRcclxuICAgIF0sXHJcbiAgICBkZWNsYXJhdGlvbnM6IFtcclxuICAgICAgSmhpSGVhbHRoQ2hlY2tDb21wb25lbnQsXHJcbiAgICAgIEpoaUhlYWx0aE1vZGFsQ29tcG9uZW50XHJcbiAgICBdLFxyXG4gICAgZW50cnlDb21wb25lbnRzOiBbSmhpSGVhbHRoTW9kYWxDb21wb25lbnRdLFxyXG4gICAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBIZWFsdGhNb2R1bGUge31cclxuIiwiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtIdHRwQ2xpZW50LCBIdHRwUmVzcG9uc2V9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtMb2d9IGZyb20gJy4uLy4uL21vZGVsL2xvZy5tb2RlbCc7XHJcblxyXG5jb25zdCBTRVJWRVJfQVBJX1VSTCA9ICcuLyc7XHJcblxyXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxyXG5leHBvcnQgY2xhc3MgTG9nc1NlcnZpY2Uge1xyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50KSB7fVxyXG5cclxuICAgIGNoYW5nZUxldmVsKGxvZzogTG9nKTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8YW55Pj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucHV0KFNFUlZFUl9BUElfVVJMICsgJ21hbmFnZW1lbnQvbG9ncycsIGxvZywgeyBvYnNlcnZlOiAncmVzcG9uc2UnIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGZpbmRBbGwoKTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8TG9nW10+PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8TG9nW10+KFNFUlZFUl9BUElfVVJMICsgJ21hbmFnZW1lbnQvbG9ncycsIHsgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyB9KTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge0NvbXBvbmVudCwgT25Jbml0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmltcG9ydCB7TG9nc1NlcnZpY2V9IGZyb20gJy4vbG9ncy5zZXJ2aWNlJztcclxuaW1wb3J0IHtMb2d9IGZyb20gJy4uLy4uL21vZGVsL2xvZy5tb2RlbCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnamhpLWxvZ3MnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2xvZ3MuY29tcG9uZW50Lmh0bWwnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBMb2dzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICAgIGxvZ2dlcnM6IExvZ1tdO1xyXG4gICAgZmlsdGVyOiBzdHJpbmc7XHJcbiAgICBvcmRlclByb3A6IHN0cmluZztcclxuICAgIHJldmVyc2U6IGJvb2xlYW47XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBsb2dzU2VydmljZTogTG9nc1NlcnZpY2UpIHtcclxuICAgICAgICB0aGlzLmZpbHRlciA9ICcnO1xyXG4gICAgICAgIHRoaXMub3JkZXJQcm9wID0gJ25hbWUnO1xyXG4gICAgICAgIHRoaXMucmV2ZXJzZSA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIHRoaXMubG9nc1NlcnZpY2UuZmluZEFsbCgpLnN1YnNjcmliZShyZXNwb25zZSA9PiAodGhpcy5sb2dnZXJzID0gcmVzcG9uc2UuYm9keSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGNoYW5nZUxldmVsKG5hbWU6IHN0cmluZywgbGV2ZWw6IHN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IGxvZyA9IG5ldyBMb2cobmFtZSwgbGV2ZWwpO1xyXG4gICAgICAgIHRoaXMubG9nc1NlcnZpY2UuY2hhbmdlTGV2ZWwobG9nKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxvZ3NTZXJ2aWNlLmZpbmRBbGwoKS5zdWJzY3JpYmUocmVzcG9uc2UgPT4gKHRoaXMubG9nZ2VycyA9IHJlc3BvbnNlLmJvZHkpKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge1JvdXRlfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5cclxuaW1wb3J0IHtMb2dzQ29tcG9uZW50fSBmcm9tICcuL2xvZ3MuY29tcG9uZW50JztcclxuaW1wb3J0IHtVc2VyUm91dGVBY2Nlc3NTZXJ2aWNlfSBmcm9tICcuLi8uLi9hdXRoL3VzZXItcm91dGUtYWNjZXNzLXNlcnZpY2UnO1xyXG5cclxuZXhwb3J0IGNvbnN0IGxvZ3NSb3V0ZTogUm91dGVbXSA9IFt7XHJcbiAgICBwYXRoOiAnbG9ncycsXHJcbiAgICBjb21wb25lbnQ6IExvZ3NDb21wb25lbnQsXHJcbiAgICBkYXRhOiB7XHJcbiAgICAgICAgcGFnZVRpdGxlOiAnTG9ncycsXHJcbiAgICAgICAgYXV0aG9yaXRpZXM6IFsnUk9MRV9BRE1JTiddXHJcbiAgICB9LFxyXG4gICAgY2FuQWN0aXZhdGU6IFtVc2VyUm91dGVBY2Nlc3NTZXJ2aWNlXVxyXG59XTtcclxuIiwiaW1wb3J0IHtDVVNUT01fRUxFTUVOVFNfU0NIRU1BLCBOZ01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7Um91dGVyTW9kdWxlfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQge0NvbW1vbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHtGb3Jtc01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQge05nSmhpcHN0ZXJNb2R1bGV9IGZyb20gJ25nLWpoaXBzdGVyJztcclxuaW1wb3J0IHtsb2dzUm91dGV9IGZyb20gJy4vbG9ncy5yb3V0ZSdcclxuaW1wb3J0IHtMb2dzQ29tcG9uZW50fSBmcm9tICcuL2xvZ3MuY29tcG9uZW50JztcclxuXHJcbmNvbnN0IEVOVElUWV9TVEFURVMgPSBbLi4ubG9nc1JvdXRlXTtcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgICBpbXBvcnRzOiBbXHJcbiAgICAgIENvbW1vbk1vZHVsZSxcclxuICAgICAgRm9ybXNNb2R1bGUsXHJcbiAgICAgIE5nSmhpcHN0ZXJNb2R1bGUsXHJcbiAgICAgIFJvdXRlck1vZHVsZS5mb3JDaGlsZChFTlRJVFlfU1RBVEVTKVxyXG4gICAgXSxcclxuICAgIGV4cG9ydHM6IFtcclxuICAgICAgTG9nc0NvbXBvbmVudFxyXG4gICAgXSxcclxuICAgIGRlY2xhcmF0aW9uczogW1xyXG4gICAgICBMb2dzQ29tcG9uZW50XHJcbiAgICBdLFxyXG4gICAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBMb2dzTW9kdWxlIHt9XHJcbiIsImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7T2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7TG9jYWxTdG9yYWdlU2VydmljZSwgU2Vzc2lvblN0b3JhZ2VTZXJ2aWNlfSBmcm9tICduZ3gtd2Vic3RvcmFnZSc7XHJcbmltcG9ydCB7SHR0cEV2ZW50LCBIdHRwSGFuZGxlciwgSHR0cEludGVyY2VwdG9yLCBIdHRwUmVxdWVzdCwgSHR0cFJlc3BvbnNlfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7VXRpbEZ1bmN0aW9uc30gZnJvbSAnLi4vdXRpbC91dGlsLWZ1bmN0aW9ucyc7XHJcbmltcG9ydCB7Y2F0Y2hFcnJvciwgbWFwfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcclxuaW1wb3J0IHtDdXN0b21IVFRQU3RhdHVzfSBmcm9tICcuLi9tb2RlbC9lbnVtcy5tb2RlbCc7XHJcbmltcG9ydCB7TG9ja1BhZ2V9IGZyb20gJy4uL3V0aWwnO1xyXG5pbXBvcnQge3Rocm93RXJyb3J9IGZyb20gXCJyeGpzL2ludGVybmFsL29ic2VydmFibGUvdGhyb3dFcnJvclwiO1xyXG5pbXBvcnQge05nYk1vZGFsfSBmcm9tIFwiQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXBcIjtcclxuaW1wb3J0IHtEaWFsb2dUeXBlLCBNb2RhbERpYWxvZ0NvbXBvbmVudH0gZnJvbSAnLi4vY29tcG9uZW50cy9tb2RhbC1kaWFsb2cnO1xyXG5pbXBvcnQge09wdGlvbnNQcm92aWRlcn0gZnJvbSAnLi4vdXRpbC9vcHRpb25zLXByb3ZpZGVyJztcclxuXHJcbmNvbnN0IFNFUlZFUl9BUElfVVJMID0gJy4vJztcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIEF1dGhJbnRlcmNlcHRvciBpbXBsZW1lbnRzIEh0dHBJbnRlcmNlcHRvciB7XHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBsb2NhbFN0b3JhZ2U6IExvY2FsU3RvcmFnZVNlcnZpY2UsIHByaXZhdGUgc2Vzc2lvblN0b3JhZ2U6IFNlc3Npb25TdG9yYWdlU2VydmljZSwgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE5nYk1vZGFsLCBwcml2YXRlIHByb3ZpZGVyOiBPcHRpb25zUHJvdmlkZXIpIHt9XHJcbiAgXHJcbiAgaW50ZXJjZXB0KHJlcXVlc3Q6IEh0dHBSZXF1ZXN0PGFueT4sIG5leHQ6IEh0dHBIYW5kbGVyKTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8YW55Pj4ge1xyXG4gICAgXHJcbiAgICBpZiAocmVxdWVzdC51cmwuaW5kZXhPZihcIi9hcGkvcHVibGljXCIpPj0wKSB7XHJcbiAgICAgIHJlcXVlc3QgPSByZXF1ZXN0LmNsb25lKHtcclxuICAgICAgICBzZXRIZWFkZXJzOiB7XHJcbiAgICAgICAgICB0b2tlbjogVXRpbEZ1bmN0aW9ucy5nZXJhclRva2VuQW5ndWxhcigpXHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGlmICghcmVxdWVzdCB8fCAhcmVxdWVzdC51cmwgfHwgKC9eaHR0cC8udGVzdChyZXF1ZXN0LnVybCkgJiYgIShTRVJWRVJfQVBJX1VSTCAmJiByZXF1ZXN0LnVybC5zdGFydHNXaXRoKFNFUlZFUl9BUElfVVJMKSkpKSB7XHJcbiAgICAgIHJldHVybiBuZXh0LmhhbmRsZShyZXF1ZXN0KS5waXBlKFxyXG4gICAgICAgIG1hcCgoZXZlbnQ6IEh0dHBFdmVudDxhbnk+KSA9PiB7XHJcbiAgICAgICAgICBpZiAoZXZlbnQgaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgdGhpcy5hbmFseXNlSHR0cFN0YXR1cyhldmVudCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gZXZlbnQ7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiB7XHJcbiAgICAgICAgICBpZiAocmVxdWVzdC51cmwuaW5kZXhPZihcIi9hcGkvYWNjb3VudFwiKT49MCkge1xyXG4gICAgICAgICAgICBMb2NrUGFnZS5yZW1vdmVGcm9tU3RvcmFnZSh0aGlzLnNlc3Npb25TdG9yYWdlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGVycm9yKTtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBjb25zdCB0b2tlbiA9IHRoaXMubG9jYWxTdG9yYWdlLnJldHJpZXZlKCdhdXRoZW50aWNhdGlvblRva2VuJykgfHwgdGhpcy5zZXNzaW9uU3RvcmFnZS5yZXRyaWV2ZSgnYXV0aGVudGljYXRpb25Ub2tlbicpO1xyXG4gICAgXHJcbiAgICBpZiAoISF0b2tlbikge1xyXG4gICAgICByZXF1ZXN0ID0gcmVxdWVzdC5jbG9uZSh7XHJcbiAgICAgICAgc2V0SGVhZGVyczoge1xyXG4gICAgICAgICAgQXV0aG9yaXphdGlvbjogJ0JlYXJlciAnICsgdG9rZW5cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG5leHQuaGFuZGxlKHJlcXVlc3QpLnBpcGUoXHJcbiAgICAgIG1hcCgoZXZlbnQ6IEh0dHBFdmVudDxhbnk+KSA9PiB7XHJcbiAgICAgICAgaWYgKGV2ZW50IGluc3RhbmNlb2YgSHR0cFJlc3BvbnNlKSB7XHJcbiAgICAgICAgICB0aGlzLmFuYWx5c2VIdHRwU3RhdHVzKGV2ZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGV2ZW50O1xyXG4gICAgICB9KSxcclxuICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiB7XHJcbiAgICAgICAgaWYgKHJlcXVlc3QudXJsLmluZGV4T2YoXCIvYXBpL2FjY291bnRcIik+PTApIHtcclxuICAgICAgICAgIExvY2tQYWdlLnJlbW92ZUZyb21TdG9yYWdlKHRoaXMuc2Vzc2lvblN0b3JhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihlcnJvcik7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuICBcclxuICBhbmFseXNlSHR0cFN0YXR1cyhldmVudDogSHR0cFJlc3BvbnNlPGFueT4pIHtcbiAgICBpZiAoZXZlbnQuc3RhdHVzID09PSBDdXN0b21IVFRQU3RhdHVzLkxPQ0tfUEFHRSkge1xyXG4gICAgICBjb25zdCBwYWdlID0gZXZlbnQuaGVhZGVycy5nZXQoJ3JlZGlyZWN0UGFnZScpO1xyXG4gICAgICBjb25zdCBtb2R1bGUgPSBldmVudC5oZWFkZXJzLmdldCgnbW9kdWxlJyk7XHJcbiAgICAgIGxldCBsb2NrZWRQYWdlOiBMb2NrUGFnZSA9IExvY2tQYWdlLnJldHJpZXZlRnJvbVN0b3JhZ2UodGhpcy5zZXNzaW9uU3RvcmFnZSk7XHJcbiAgICAgIGlmICghVXRpbEZ1bmN0aW9ucy5pc1ZhbGlkT2JqZWN0KGxvY2tlZFBhZ2UpKSB7XHJcbiAgICAgICAgbG9ja2VkUGFnZSA9IG5ldyBMb2NrUGFnZShtb2R1bGUsIHBhZ2UpO1xyXG4gICAgICB9XHJcbiAgICAgIExvY2tQYWdlLnNhdmVUb1N0b3JhZ2UodGhpcy5zZXNzaW9uU3RvcmFnZSwgbG9ja2VkUGFnZSk7XHJcbiAgICAgIGNvbnN0IHJlZGlyZWN0UGFnZSA9IGxvY2tlZFBhZ2UuZ2V0UmVkaXJlY3RQYWdlKHdpbmRvdy5sb2NhdGlvbiwgdGhpcy5wcm92aWRlci5tb2R1bG8pO1xyXG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHJlZGlyZWN0UGFnZTtcclxuICAgICAgfSwgMjAwKTtcclxuICAgICAgXHJcbiAgICB9IGVsc2UgaWYgKGV2ZW50LnN0YXR1cyA9PT0gQ3VzdG9tSFRUUFN0YXR1cy5SRUxFQVNFX1BBR0UpIHtcclxuICAgICAgTG9ja1BhZ2UucmVtb3ZlRnJvbVN0b3JhZ2UodGhpcy5zZXNzaW9uU3RvcmFnZSk7XHJcbiAgICB9IGVsc2UgaWYgKGV2ZW50LnN0YXR1cyA9PT0gQ3VzdG9tSFRUUFN0YXR1cy5SRURJUkVDVF9QQUdFKSB7XHJcbiAgICAgIGNvbnN0IHBhZ2UgPSB3aW5kb3cubG9jYXRpb24ub3JpZ2luICsgJy8nICsgZXZlbnQuaGVhZGVycy5nZXQoJ3JlZGlyZWN0UGFnZScpO1xyXG4gICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHBhZ2U7XHJcbiAgICB9IGVsc2UgaWYgKGV2ZW50LnN0YXR1cyA9PT0gQ3VzdG9tSFRUUFN0YXR1cy5DSEVDS19BTEVSVCkge1xuICAgICAgY29uc3QgYWxlcnQgPSBldmVudC5oZWFkZXJzLmdldCgnYWxlcnRNZXNzYWdlJyk7XG4gICAgICBjb25zdCBjb250ZW50Q29tcG9uZW50SW5zdGFuY2UgPSB0aGlzLm1vZGFsU2VydmljZS5vcGVuKE1vZGFsRGlhbG9nQ29tcG9uZW50LCB7IGJhY2tkcm9wOiAnc3RhdGljJyB9KS5jb21wb25lbnRJbnN0YW5jZTtcbiAgICAgIGNvbnRlbnRDb21wb25lbnRJbnN0YW5jZS5pbml0KHVuZGVmaW5lZCwgJ0FsZXJ0YScsIHRoaXMuZm9ybWF0QWxlcnRNZXNzYWdlKGFsZXJ0KSwgJycsIERpYWxvZ1R5cGUuSU5GTyk7XG4gICAgfVxuICB9XG5cbiAgZm9ybWF0QWxlcnRNZXNzYWdlKGFsZXJ0OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICghYWxlcnQpIHtcbiAgICAgIHJldHVybiBhbGVydDtcbiAgICB9XG4gICAgcmV0dXJuIGFsZXJ0LnJlcGxhY2UoL1xcXFxuL2csICdcXG4nKTtcbiAgfVxufVxuIiwiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtIdHRwRXJyb3JSZXNwb25zZSwgSHR0cEV2ZW50LCBIdHRwSGFuZGxlciwgSHR0cEludGVyY2VwdG9yLCBIdHRwUmVxdWVzdH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge3RhcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQge0xvZ2luU2VydmljZX0gZnJvbSAnLi4vbG9naW4vbG9naW4uc2VydmljZSc7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBBdXRoRXhwaXJlZEludGVyY2VwdG9yIGltcGxlbWVudHMgSHR0cEludGVyY2VwdG9yIHtcclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgbG9naW5TZXJ2aWNlOiBMb2dpblNlcnZpY2UpIHt9XHJcblxyXG4gICAgaW50ZXJjZXB0KHJlcXVlc3Q6IEh0dHBSZXF1ZXN0PGFueT4sIG5leHQ6IEh0dHBIYW5kbGVyKTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8YW55Pj4ge1xyXG4gICAgICAgIHJldHVybiBuZXh0LmhhbmRsZShyZXF1ZXN0KS5waXBlKFxyXG4gICAgICAgICAgICB0YXAoXHJcbiAgICAgICAgICAgICAgICAoZXZlbnQ6IEh0dHBFdmVudDxhbnk+KSA9PiB7fSxcclxuICAgICAgICAgICAgICAgIChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBIdHRwRXJyb3JSZXNwb25zZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyLnN0YXR1cyA9PT0gNDAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2luU2VydmljZS5sb2dvdXQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBKaGlFdmVudE1hbmFnZXIgfSBmcm9tICduZy1qaGlwc3Rlcic7XHJcbmltcG9ydCB7IEh0dHBJbnRlcmNlcHRvciwgSHR0cFJlcXVlc3QsIEh0dHBFcnJvclJlc3BvbnNlLCBIdHRwSGFuZGxlciwgSHR0cEV2ZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIEVycm9ySGFuZGxlckludGVyY2VwdG9yIGltcGxlbWVudHMgSHR0cEludGVyY2VwdG9yIHtcclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgZXZlbnRNYW5hZ2VyOiBKaGlFdmVudE1hbmFnZXIpIHt9XHJcblxyXG4gICAgaW50ZXJjZXB0KHJlcXVlc3Q6IEh0dHBSZXF1ZXN0PGFueT4sIG5leHQ6IEh0dHBIYW5kbGVyKTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8YW55Pj4ge1xyXG4gICAgICAgIHJldHVybiBuZXh0LmhhbmRsZShyZXF1ZXN0KS5waXBlKFxyXG4gICAgICAgICAgICB0YXAoXHJcbiAgICAgICAgICAgICAgICAoZXZlbnQ6IEh0dHBFdmVudDxhbnk+KSA9PiB7fSxcclxuICAgICAgICAgICAgICAgIChlcnI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBIdHRwRXJyb3JSZXNwb25zZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShlcnIuc3RhdHVzID09PSA0MDEgJiYgKGVyci5tZXNzYWdlID09PSAnJyB8fCAoZXJyLnVybCAmJiBlcnIudXJsLmluY2x1ZGVzKCcvYXBpL2FjY291bnQnKSkpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ldmVudE1hbmFnZXIuYnJvYWRjYXN0KHsgbmFtZTogJ3BvcnRhbEdhdGV3YXlBcHAuaHR0cEVycm9yJywgY29udGVudDogZXJyIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQgeyBIdHRwRXZlbnQsIEh0dHBIYW5kbGVyLCBIdHRwSW50ZXJjZXB0b3IsIEh0dHBSZXF1ZXN0LCBIdHRwUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7UG9ydGFsQWxlcnRTZXJ2aWNlfSBmcm9tICcuLi9hbGVydC9wb3J0YWwtYWxlcnQuc2VydmljZSc7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBOb3RpZmljYXRpb25JbnRlcmNlcHRvciBpbXBsZW1lbnRzIEh0dHBJbnRlcmNlcHRvciB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgIHByaXZhdGUgYWxlcnRTZXJ2aWNlOiBQb3J0YWxBbGVydFNlcnZpY2VcclxuICAgICkge31cclxuXHJcbiAgICBpbnRlcmNlcHQocmVxdWVzdDogSHR0cFJlcXVlc3Q8YW55PiwgbmV4dDogSHR0cEhhbmRsZXIpOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxhbnk+PiB7XHJcbiAgICAgICAgcmV0dXJuIG5leHQuaGFuZGxlKHJlcXVlc3QpLnBpcGUoXHJcbiAgICAgICAgICAgIHRhcChcclxuICAgICAgICAgICAgICAgIChldmVudDogSHR0cEV2ZW50PGFueT4pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZXZlbnQgaW5zdGFuY2VvZiBIdHRwUmVzcG9uc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYXJyID0gZXZlbnQuaGVhZGVycy5rZXlzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhbGVydCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhbGVydFBhcmFtcyA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyci5mb3JFYWNoKGVudHJ5ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbnRyeS50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKCdhcHAtYWxlcnQnKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0ID0gZXZlbnQuaGVhZGVycy5nZXQoZW50cnkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChlbnRyeS50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKCdhcHAtcGFyYW1zJykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGVydFBhcmFtcyA9IGV2ZW50LmhlYWRlcnMuZ2V0KGVudHJ5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhbGVydCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBhbGVydCA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5zdWNjZXNzKGFsZXJ0LCB7IHBhcmFtOiBhbGVydFBhcmFtcyB9LCBudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAoZXJyOiBhbnkpID0+IHt9XHJcbiAgICAgICAgICAgIClcclxuICAgICAgICApO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7SHR0cENsaWVudCwgSHR0cFJlc3BvbnNlfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7T2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XHJcblxyXG5pbXBvcnQge2NyZWF0ZVJlcXVlc3RPcHRpb259IGZyb20gJy4uL3V0aWwvcmVxdWVzdC11dGlsJztcclxuaW1wb3J0IHtJTWVudX0gZnJvbSAnLi4vbW9kZWwvbWVudS5tb2RlbCc7XHJcbmltcG9ydCB7T3B0aW9uc1Byb3ZpZGVyfSBmcm9tICcuLi91dGlsL29wdGlvbnMtcHJvdmlkZXInO1xyXG5cclxuY29uc3QgU0VSVkVSX0FQSV9VUkwgPSAnLi8nO1xyXG5cclxudHlwZSBFbnRpdHlSZXNwb25zZVR5cGUgPSBIdHRwUmVzcG9uc2U8SU1lbnU+O1xyXG50eXBlIEVudGl0eUFycmF5UmVzcG9uc2VUeXBlID0gSHR0cFJlc3BvbnNlPElNZW51W10+O1xyXG5cclxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcclxuZXhwb3J0IGNsYXNzIE1lbnVTZXJ2aWNlIHtcclxuICAgIHB1YmxpYyBtb2R1bG87XHJcbiAgICBwdWJsaWMgcmVzb3VyY2VVcmxQdWJsaWM7XHJcbiAgICBwdWJsaWMgcmVzb3VyY2VVcmwgPSBTRVJWRVJfQVBJX1VSTCArICdhcGkvbWVudXMnO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgb3B0aW9uc1Byb3ZpZGVyOiBPcHRpb25zUHJvdmlkZXJcclxuICAgICkge1xyXG4gICAgICB0aGlzLm1vZHVsbyA9IG9wdGlvbnNQcm92aWRlci5tZW51TW9kdWxvO1xyXG4gICAgICB0aGlzLnJlc291cmNlVXJsUHVibGljID0gU0VSVkVSX0FQSV9VUkwgKyAnYXBpL3B1YmxpYy9tZW51cy8nICsgdGhpcy5tb2R1bG87XHJcbiAgICB9XHJcblxyXG4gICAgY3JlYXRlKG1lbnU6IElNZW51KTogT2JzZXJ2YWJsZTxFbnRpdHlSZXNwb25zZVR5cGU+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8SU1lbnU+KHRoaXMucmVzb3VyY2VVcmwsIG1lbnUsIHsgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyB9KTtcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUobWVudTogSU1lbnUpOiBPYnNlcnZhYmxlPEVudGl0eVJlc3BvbnNlVHlwZT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucHV0PElNZW51Pih0aGlzLnJlc291cmNlVXJsLCBtZW51LCB7IG9ic2VydmU6ICdyZXNwb25zZScgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZmluZChpZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxFbnRpdHlSZXNwb25zZVR5cGU+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJTWVudT4oYCR7dGhpcy5yZXNvdXJjZVVybH0vZmluZC8ke2lkfWAsIHsgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyB9KTtcclxuICAgIH1cclxuXHJcbiAgICBxdWVyeShyZXE/OiBhbnkpOiBPYnNlcnZhYmxlPEVudGl0eUFycmF5UmVzcG9uc2VUeXBlPiB7XHJcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IGNyZWF0ZVJlcXVlc3RPcHRpb24ocmVxKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJTWVudVtdPih0aGlzLnJlc291cmNlVXJsICsgJy8nICsgdGhpcy5tb2R1bG8sIHsgcGFyYW1zOiBvcHRpb25zLCBvYnNlcnZlOiAncmVzcG9uc2UnIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEFsbE1lbnVzKGxpbWl0ZUV4aWJpY2FvKTogT2JzZXJ2YWJsZTxFbnRpdHlBcnJheVJlc3BvbnNlVHlwZT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElNZW51W10+KHRoaXMucmVzb3VyY2VVcmxQdWJsaWMuY29uY2F0KCcvJywgbGltaXRlRXhpYmljYW8pLCB7IG9ic2VydmU6ICdyZXNwb25zZScgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0QWxsTWVudXNQYWlzKCk6IE9ic2VydmFibGU8RW50aXR5QXJyYXlSZXNwb25zZVR5cGU+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJTWVudVtdPihTRVJWRVJfQVBJX1VSTCArICdhcGkvbWVudXMtcGFpcy8nICsgdGhpcy5tb2R1bG8sIHsgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyB9KTtcclxuICAgIH1cclxuXHJcbiAgICBkZWxldGUoaWQ6IG51bWJlcik6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPGFueT4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmRlbGV0ZTxhbnk+KGAke3RoaXMucmVzb3VyY2VVcmx9LyR7aWR9YCwgeyBvYnNlcnZlOiAncmVzcG9uc2UnIH0pO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7SHR0cENsaWVudCwgSHR0cFJlc3BvbnNlfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7T2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7SUVtcHJlc2F9IGZyb20gJy4uL21vZGVsL2VtcHJlc2EubW9kZWwnO1xyXG5pbXBvcnQge2NyZWF0ZVJlcXVlc3RPcHRpb259IGZyb20gJy4uL3V0aWwvcmVxdWVzdC11dGlsJztcclxuXHJcbmNvbnN0IFNFUlZFUl9BUElfVVJMID0gJy4vJztcclxuXHJcbnR5cGUgRW50aXR5UmVzcG9uc2VUeXBlID0gSHR0cFJlc3BvbnNlPElFbXByZXNhPjtcclxudHlwZSBFbnRpdHlBcnJheVJlc3BvbnNlVHlwZSA9IEh0dHBSZXNwb25zZTxJRW1wcmVzYVtdPjtcclxuXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXHJcbmV4cG9ydCBjbGFzcyBFbXByZXNhU2VydmljZSB7XHJcbiAgICBwdWJsaWMgcmVzb3VyY2VVcmwgPSBTRVJWRVJfQVBJX1VSTCArICdhcGkvZW1wcmVzYXMnO1xyXG4gICAgcHVibGljIHJlc291cmNlVXJsUHVibGljID0gU0VSVkVSX0FQSV9VUkwgKyAnYXBpL3B1YmxpYy9lbXByZXNhJztcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQpIHt9XHJcblxyXG4gICAgY3JlYXRlKGVtcHJlc2E6IElFbXByZXNhKTogT2JzZXJ2YWJsZTxFbnRpdHlSZXNwb25zZVR5cGU+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8SUVtcHJlc2E+KHRoaXMucmVzb3VyY2VVcmwsIGVtcHJlc2EsIHsgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyB9KTtcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGUoZW1wcmVzYTogSUVtcHJlc2EpOiBPYnNlcnZhYmxlPEVudGl0eVJlc3BvbnNlVHlwZT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucHV0PElFbXByZXNhPih0aGlzLnJlc291cmNlVXJsLCBlbXByZXNhLCB7IG9ic2VydmU6ICdyZXNwb25zZScgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZmluZChpZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxFbnRpdHlSZXNwb25zZVR5cGU+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxJRW1wcmVzYT4oYCR7dGhpcy5yZXNvdXJjZVVybH0vJHtpZH1gLCB7IG9ic2VydmU6ICdyZXNwb25zZScgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcXVlcnkocmVxPzogYW55KTogT2JzZXJ2YWJsZTxFbnRpdHlBcnJheVJlc3BvbnNlVHlwZT4ge1xyXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBjcmVhdGVSZXF1ZXN0T3B0aW9uKHJlcSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8SUVtcHJlc2FbXT4odGhpcy5yZXNvdXJjZVVybCwgeyBwYXJhbXM6IG9wdGlvbnMsIG9ic2VydmU6ICdyZXNwb25zZScgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZGVsZXRlKGlkOiBudW1iZXIpOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxhbnk+PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5kZWxldGU8YW55PihgJHt0aGlzLnJlc291cmNlVXJsfS8ke2lkfWAsIHsgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyB9KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRFbXByZXNhKCk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPElFbXByZXNhPj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PElFbXByZXNhPih0aGlzLnJlc291cmNlVXJsUHVibGljLCB7IG9ic2VydmU6ICdyZXNwb25zZScgfSk7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtDb21wb25lbnQsIE9uSW5pdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7SmhpRXZlbnRNYW5hZ2VyfSBmcm9tICduZy1qaGlwc3Rlcic7XHJcblxyXG5pbXBvcnQge0lNZW51fSBmcm9tICcuLi9tb2RlbC9tZW51Lm1vZGVsJztcclxuaW1wb3J0IHtBY2NvdW50fSBmcm9tICcuLi9tb2RlbC9hY2NvdW50Lm1vZGVsJztcclxuaW1wb3J0IHtJRW1wcmVzYX0gZnJvbSAnLi4vbW9kZWwvZW1wcmVzYS5tb2RlbCc7XHJcbmltcG9ydCB7UHJpbmNpcGFsfSBmcm9tICcuLi9hdXRoL3ByaW5jaXBhbC5zZXJ2aWNlJztcclxuaW1wb3J0IHtNZW51U2VydmljZX0gZnJvbSAnLi4vbWVudS9tZW51LnNlcnZpY2UnO1xyXG5pbXBvcnQge0VtcHJlc2FTZXJ2aWNlfSBmcm9tICcuLi9lbXByZXNhL2VtcHJlc2Euc2VydmljZSc7XHJcbmltcG9ydCB7UGFyYW1ldHJvc1NlcnZpY2V9IGZyb20gJy4uL2NvbXBvbmVudHMvcGFyYW1ldHJvcy9wYXJhbWV0cm9zLnNlcnZpY2UnO1xyXG5pbXBvcnQge1V0aWxGdW5jdGlvbnN9IGZyb20gJy4uL3V0aWwnO1xyXG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQge05nYk1vZGFsUmVmfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcbmltcG9ydCB7TG9naW5Nb2RhbFNlcnZpY2V9IGZyb20gJy4uL2xvZ2luL2xvZ2luLW1vZGFsLnNlcnZpY2UnO1xyXG5cclxuY29uc3QgUVVBTlRJREFERV9NQVhfU1VCX01FTlVTID0gMztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdqaGktaG9tZScsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vaG9tZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnaG9tZS5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIEhvbWVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gICAgYWNjb3VudDogQWNjb3VudDtcclxuICAgIG1lbnVzOiBJTWVudVtdO1xyXG4gICAgZW1wcmVzYTogSUVtcHJlc2E7XHJcbiAgICBtb3N0cmFySW1hZ2VtRnVuZG86IGJvb2xlYW4gPSB0cnVlO1xyXG4gICAgbWVuc2FnZW1Cb2FzVmluZGFzOiBzdHJpbmcgPSAnQmVtIHZpbmRvLCBQb3J0YWwgZGUgU2VydmnDg8Knb3MhJztcclxuICAgIG1vZGFsUmVmOiBOZ2JNb2RhbFJlZjtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIHByaW5jaXBhbDogUHJpbmNpcGFsLFxyXG4gICAgICAgIHByaXZhdGUgZXZlbnRNYW5hZ2VyOiBKaGlFdmVudE1hbmFnZXIsXHJcbiAgICAgICAgcHJpdmF0ZSBtZW51U2VydmljZTogTWVudVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBlbXByZXNhU2VydmljZTogRW1wcmVzYVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBwYXJhbWV0cm9TZXJ2aWNlOiBQYXJhbWV0cm9zU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgICAgICBwcml2YXRlIGxvZ2luTW9kYWxTZXJ2aWNlOiBMb2dpbk1vZGFsU2VydmljZVxyXG4gICAgKSB7fVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIHRoaXMucm91dGUucXVlcnlQYXJhbXMuc3Vic2NyaWJlKHBhcmFtcyA9PiB7XHJcbiAgICAgICAgICAgIGlmIChwYXJhbXNbJ2FkbWluLWxvZ29uJ10gIT09IHVuZGVmaW5lZCAmJiAhdGhpcy5wcmluY2lwYWwuaXNBdXRoZW50aWNhdGVkKCkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9naW4oKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLnByaW5jaXBhbC5pZGVudGl0eSgpLnRoZW4oYWNjb3VudCA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuYWNjb3VudCA9IGFjY291bnQ7XHJcbiAgICAgICAgICAgIHRoaXMuc29saWNpdGFyTm90aWZpY2Fjb2VzU2VUaXZlck5vdmFzKCk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMucmVnaXN0ZXJBdXRoZW50aWNhdGlvblN1Y2Nlc3MoKTtcclxuICAgICAgICB0aGlzLnJlY2FycmVnYXJNZW51cygpO1xyXG5cclxuICAgICAgICB0aGlzLmVtcHJlc2FTZXJ2aWNlXHJcbiAgICAgICAgICAgIC5nZXRFbXByZXNhKClcclxuICAgICAgICAgICAgLnRvUHJvbWlzZSgpXHJcbiAgICAgICAgICAgIC50aGVuKGVtcHJlc2EgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lbXByZXNhID0gZW1wcmVzYS5ib2R5O1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgIHRoaXMucGFyYW1ldHJvU2VydmljZS5nZXRQYXJhbWV0cm9zQnlOYW1lKFwiTU9TVFJBUl9JTUFHRU1fRlVORE9cIilcclxuICAgICAgICAudGhlbih2YWx1ZSA9PiB7XHJcbiAgICAgICAgICBpZiAoVXRpbEZ1bmN0aW9ucy5pc1ZhbGlkT2JqZWN0KHZhbHVlKSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLm1vc3RyYXJJbWFnZW1GdW5kbyA9IHZhbHVlLnZhbG9yO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pLmNhdGNoKHZhbHVlID0+IHtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLnBhcmFtZXRyb1NlcnZpY2UuZ2V0UGFyYW1ldHJvc0J5TmFtZShcIk1FTlNBR0VNX0JPQVNfVklOREFTXCIpXHJcbiAgICAgICAgLnRoZW4odmFsdWUgPT4ge1xyXG4gICAgICAgICAgaWYgKFV0aWxGdW5jdGlvbnMuaXNWYWxpZE9iamVjdCh2YWx1ZSkgPT09IHRydWUgJiYgVXRpbEZ1bmN0aW9ucy5pc1ZhbGlkU3RyaW5nT3JBcnJheSh2YWx1ZS52YWxvcikgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgdGhpcy5tZW5zYWdlbUJvYXNWaW5kYXMgPSB2YWx1ZS52YWxvcjtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KS5jYXRjaCh2YWx1ZSA9PiB7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGxvZ2luKCkge1xyXG4gICAgICAgIHRoaXMubW9kYWxSZWYgPSB0aGlzLmxvZ2luTW9kYWxTZXJ2aWNlLm9wZW4oKTtcclxuICAgIH1cclxuXHJcbiAgICByZWdpc3RlckF1dGhlbnRpY2F0aW9uU3VjY2VzcygpIHtcclxuICAgICAgICB0aGlzLmV2ZW50TWFuYWdlci5zdWJzY3JpYmUoJ2F1dGhlbnRpY2F0aW9uU3VjY2VzcycsIG1lc3NhZ2UgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnByaW5jaXBhbC5pZGVudGl0eSgpLnRoZW4oYWNjb3VudCA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFjY291bnQgPSBhY2NvdW50O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZWNhcnJlZ2FyTWVudXMoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc29saWNpdGFyTm90aWZpY2Fjb2VzU2VUaXZlck5vdmFzKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcmVjYXJyZWdhck1lbnVzKCkge1xyXG4gICAgICB0aGlzLm1lbnVTZXJ2aWNlXHJcbiAgICAgICAgLmdldEFsbE1lbnVzKFFVQU5USURBREVfTUFYX1NVQl9NRU5VUylcclxuICAgICAgICAudG9Qcm9taXNlKClcclxuICAgICAgICAudGhlbihtZW51cyA9PiB7XHJcbiAgICAgICAgICB0aGlzLm1lbnVzID0gbWVudXMuYm9keTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBvYnRlclVybChtZW51KSB7XHJcbiAgICAgICAgcmV0dXJuIG1vbnRhclVybChtZW51KTtcclxuICAgIH1cclxuXHJcbiAgICBpc1F1YW50aWRhZGVNYXhTdWJNZW51cyhtZW51KTogYm9vbGVhbiB7XHJcbiAgICAgICAgY29uc3Qgc3ViTWVudXMgPSBtZW51LnN1Yk1lbnVzLmZpbHRlcihzdWIgPT4gc3ViLmF0aXZvKTtcclxuICAgICAgICByZXR1cm4gc3ViTWVudXMubGVuZ3RoID4gUVVBTlRJREFERV9NQVhfU1VCX01FTlVTO1xyXG4gICAgfVxyXG5cclxuICAgIGlkZW50aWZ5KGluZGV4LCBpdGVtKSB7XHJcbiAgICAgICAgcmV0dXJuIGl0ZW0ubm9tZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNvbGljaXRhck5vdGlmaWNhY29lc1NlVGl2ZXJOb3ZhcygpIHtcclxuICAgICAgICBpZiAoIXRoaXMucHJpbmNpcGFsLmlzQXV0aGVudGljYXRlZCgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5ldmVudE1hbmFnZXIuYnJvYWRjYXN0KHtuYW1lOiAnYWJyaXJOb3RpZmljYWNvZXNTZVRpdmVyTm92YXMnfSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBtb250YXJVcmwgPSAobWVudTogSU1lbnUpOiBzdHJpbmcgPT4ge1xyXG4gICAgaWYgKG1lbnUuc2VydmljbyAmJiBtZW51LnNlcnZpY28uaW5jbHVkZXMoJ2h0dHAnKSkge1xyXG4gICAgICAgIHJldHVybiBtZW51LnNlcnZpY287XHJcbiAgICB9XHJcbiAgICBjb25zdCBzZXJ2aWNvID0gbWVudS5zZXJ2aWNvID8gbWVudS5zZXJ2aWNvIDogJyc7XHJcbiAgICBjb25zdCByb3RhID0gbWVudS5yb3RhID8gbWVudS5yb3RhICsgJy8jLycgOiAnIy8nO1xyXG4gICAgcmV0dXJuIHJvdGEgKyBzZXJ2aWNvO1xyXG59O1xyXG4iLCJpbXBvcnQgeyBSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcblxyXG5pbXBvcnQgeyBIb21lQ29tcG9uZW50IH0gZnJvbSAnLi9ob21lLmNvbXBvbmVudCc7XHJcblxyXG5leHBvcnQgY29uc3QgSE9NRV9ST1VURTogUm91dGVbXSA9IFtcclxuICB7XHJcbiAgICBwYXRoOiAnJyxcclxuICAgIGNvbXBvbmVudDogSG9tZUNvbXBvbmVudCxcclxuICAgIGRhdGE6IHtcclxuICAgICAgICBhdXRob3JpdGllczogW10sXHJcbiAgICAgICAgcGFnZVRpdGxlOiAnQmVtIHZpbmRvLCBQb3J0YWwgZGUgU2VydmnDg8Knb3MhJ1xyXG4gICAgfVxyXG4gIH1cclxuXTtcclxuIiwiaW1wb3J0IHtDVVNUT01fRUxFTUVOVFNfU0NIRU1BLCBOZ01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7Um91dGVyTW9kdWxlfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQge0hvbWVDb21wb25lbnR9IGZyb20gJy4vaG9tZS5jb21wb25lbnQnO1xyXG5pbXBvcnQge0NvbW1vbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHtIT01FX1JPVVRFfSBmcm9tICcuL2hvbWUucm91dGUnO1xyXG5pbXBvcnQge0ZvbnRBd2Vzb21lTW9kdWxlfSBmcm9tICdAZm9ydGF3ZXNvbWUvYW5ndWxhci1mb250YXdlc29tZSc7XHJcbmltcG9ydCB7bGlicmFyeX0gZnJvbSAnQGZvcnRhd2Vzb21lL2ZvbnRhd2Vzb21lLXN2Zy1jb3JlJztcclxuaW1wb3J0IHtmYXN9IGZyb20gJ0Bmb3J0YXdlc29tZS9mcmVlLXNvbGlkLXN2Zy1pY29ucyc7XHJcbmltcG9ydCB7TmdiTW9kdWxlfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcblxyXG5saWJyYXJ5LmFkZChmYXMpO1xyXG5cclxuQE5nTW9kdWxlKHtcclxuICAgIGltcG9ydHM6IFtcclxuICAgICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgICBGb250QXdlc29tZU1vZHVsZSxcclxuICAgICAgTmdiTW9kdWxlLmZvclJvb3QoKSxcclxuICAgICAgUm91dGVyTW9kdWxlLmZvckNoaWxkKFsuLi5IT01FX1JPVVRFXSlcclxuICAgIF0sXHJcbiAgICBkZWNsYXJhdGlvbnM6IFtcclxuICAgICAgSG9tZUNvbXBvbmVudFxyXG4gICAgXSxcclxuICAgIGV4cG9ydHM6IFtcclxuICAgICAgSG9tZUNvbXBvbmVudFxyXG4gICAgXSxcclxuICAgIHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgSG9tZU1vZHVsZSB7fVxyXG4iLCJpbXBvcnQge0NvbXBvbmVudCwgT25Jbml0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtIdHRwRXJyb3JSZXNwb25zZSwgSHR0cFJlc3BvbnNlfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcblxyXG5pbXBvcnQge01lbnVTZXJ2aWNlfSBmcm9tICcuL21lbnUuc2VydmljZSc7XHJcbmltcG9ydCB7SU1lbnV9IGZyb20gJy4uL21vZGVsL21lbnUubW9kZWwnO1xyXG5pbXBvcnQge0dhdGV3YXlSb3V0ZX0gZnJvbSAnLi4vbW9kZWwvZ2F0ZXdheS1yb3V0ZS5tb2RlbCc7XHJcbmltcG9ydCB7R2F0ZXdheVJvdXRlc1NlcnZpY2V9IGZyb20gJy4uL2FkbWluL2dhdGV3YXkvZ2F0ZXdheS1yb3V0ZXMuc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnamhpLW1lbnUtdXBkYXRlJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9tZW51LXVwZGF0ZS5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIE1lbnVVcGRhdGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gICAgbWVudTogSU1lbnU7XHJcbiAgICBpc1NhdmluZzogYm9vbGVhbjtcclxuICAgIHBhaXM6IElNZW51W107XHJcbiAgICByb3V0ZXM6IEdhdGV3YXlSb3V0ZVtdO1xyXG5cclxuICAgIHByaXZhdGUgcGFpc0Rpc3Bvbml2ZWlzKHBhaXM6IElNZW51W10pOiBJTWVudVtdIHtcclxuICAgICAgICBpZiAoIXBhaXMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcGFpcy5maWx0ZXIocCA9PiBwLmlkICE9PSB0aGlzLm1lbnUuaWQpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgbWVudVNlcnZpY2U6IE1lbnVTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgICAgIHByaXZhdGUgZ2F0ZXdheVJvdXRlc1NlcnZpY2U6IEdhdGV3YXlSb3V0ZXNTZXJ2aWNlXHJcbiAgICApIHt9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5pc1NhdmluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMubWVudVNlcnZpY2VcclxuICAgICAgICAgICAgLmdldEFsbE1lbnVzUGFpcygpXHJcbiAgICAgICAgICAgIC50b1Byb21pc2UoKVxyXG4gICAgICAgICAgICAudGhlbihtZW51cyA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBhaXMgPSB0aGlzLnBhaXNEaXNwb25pdmVpcyhtZW51cy5ib2R5KTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuYWN0aXZhdGVkUm91dGUuZGF0YS5zdWJzY3JpYmUoKHsgbWVudSB9KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubWVudSA9IG1lbnU7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuZ2F0ZXdheVJvdXRlc1NlcnZpY2UuZmluZEFsbCgpLnN1YnNjcmliZShnYXRld2F5Um91dGVzID0+IHtcclxuICAgICAgICAgICAgdGhpcy5yb3V0ZXMgPSBnYXRld2F5Um91dGVzO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByZXZpb3VzU3RhdGUoKSB7XHJcbiAgICAgICAgd2luZG93Lmhpc3RvcnkuYmFjaygpO1xyXG4gICAgfVxyXG5cclxuICAgIHNhdmUoKSB7XHJcbiAgICAgICAgdGhpcy5pc1NhdmluZyA9IHRydWU7XHJcbiAgICAgICAgaWYgKHRoaXMubWVudS5pZCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaWJlVG9TYXZlUmVzcG9uc2UodGhpcy5tZW51U2VydmljZS51cGRhdGUodGhpcy5tZW51KSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5tZW51LmF0aXZvID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5zdWJzY3JpYmVUb1NhdmVSZXNwb25zZSh0aGlzLm1lbnVTZXJ2aWNlLmNyZWF0ZSh0aGlzLm1lbnUpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzdWJzY3JpYmVUb1NhdmVSZXNwb25zZShyZXN1bHQ6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPElNZW51Pj4pIHtcclxuICAgICAgICByZXN1bHQuc3Vic2NyaWJlKChyZXM6IEh0dHBSZXNwb25zZTxJTWVudT4pID0+IHRoaXMub25TYXZlU3VjY2VzcygpLCAocmVzOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gdGhpcy5vblNhdmVFcnJvcigpKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG9uU2F2ZVN1Y2Nlc3MoKSB7XHJcbiAgICAgICAgdGhpcy5pc1NhdmluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMucHJldmlvdXNTdGF0ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgb25TYXZlRXJyb3IoKSB7XHJcbiAgICAgICAgdGhpcy5pc1NhdmluZyA9IGZhbHNlO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7Q29tcG9uZW50LCBPbkRlc3Ryb3ksIE9uSW5pdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7QWN0aXZhdGVkUm91dGUsIFJvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuXHJcbmltcG9ydCB7TmdiQWN0aXZlTW9kYWwsIE5nYk1vZGFsLCBOZ2JNb2RhbFJlZn0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQge0poaUV2ZW50TWFuYWdlcn0gZnJvbSAnbmctamhpcHN0ZXInO1xyXG5cclxuaW1wb3J0IHtNZW51U2VydmljZX0gZnJvbSAnLi9tZW51LnNlcnZpY2UnO1xyXG5pbXBvcnQge0lNZW51fSBmcm9tICcuLi9tb2RlbC9tZW51Lm1vZGVsJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdqaGktbWVudS1kZWxldGUtZGlhbG9nJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9tZW51LWRlbGV0ZS1kaWFsb2cuY29tcG9uZW50Lmh0bWwnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNZW51RGVsZXRlRGlhbG9nQ29tcG9uZW50IHtcclxuICAgIG1lbnU6IElNZW51O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICBwcml2YXRlIG1lbnVTZXJ2aWNlOiBNZW51U2VydmljZSxcclxuICAgICAgcHVibGljIGFjdGl2ZU1vZGFsOiBOZ2JBY3RpdmVNb2RhbCxcclxuICAgICAgcHJpdmF0ZSBldmVudE1hbmFnZXI6IEpoaUV2ZW50TWFuYWdlclxyXG4gICAgKSB7fVxyXG5cclxuICAgIGNsZWFyKCkge1xyXG4gICAgICAgIHRoaXMuYWN0aXZlTW9kYWwuZGlzbWlzcygnY2FuY2VsJyk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uZmlybURlbGV0ZShpZDogbnVtYmVyKSB7XHJcbiAgICAgICAgdGhpcy5tZW51U2VydmljZS5kZWxldGUoaWQpLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZXZlbnRNYW5hZ2VyLmJyb2FkY2FzdCh7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiAnbWVudUxpc3RNb2RpZmljYXRpb24nLFxyXG4gICAgICAgICAgICAgICAgY29udGVudDogJ0RlbGV0ZWQgYW4gbWVudSdcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlTW9kYWwuZGlzbWlzcyh0cnVlKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2poaS1tZW51LWRlbGV0ZS1wb3B1cCcsXHJcbiAgICB0ZW1wbGF0ZTogJydcclxufSlcclxuZXhwb3J0IGNsYXNzIE1lbnVEZWxldGVQb3B1cENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICAgIHByaXZhdGUgbmdiTW9kYWxSZWY6IE5nYk1vZGFsUmVmO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICBwcml2YXRlIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgICAgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE5nYk1vZGFsXHJcbiAgICApIHt9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5hY3RpdmF0ZWRSb3V0ZS5kYXRhLnN1YnNjcmliZSgoeyBtZW51IH0pID0+IHtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5nYk1vZGFsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihNZW51RGVsZXRlRGlhbG9nQ29tcG9uZW50IGFzIENvbXBvbmVudCwgeyBzaXplOiAnbGcnLCBiYWNrZHJvcDogJ3N0YXRpYycgfSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5nYk1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLm1lbnUgPSBtZW51O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5uZ2JNb2RhbFJlZi5yZXN1bHQudGhlbihcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbeyBvdXRsZXRzOiB7IHBvcHVwOiBudWxsIH0gfV0sIHsgcmVwbGFjZVVybDogdHJ1ZSwgcXVlcnlQYXJhbXNIYW5kbGluZzogJ21lcmdlJyB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZ2JNb2RhbFJlZiA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICByZWFzb24gPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbeyBvdXRsZXRzOiB7IHBvcHVwOiBudWxsIH0gfV0sIHsgcmVwbGFjZVVybDogdHJ1ZSwgcXVlcnlQYXJhbXNIYW5kbGluZzogJ21lcmdlJyB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZ2JNb2RhbFJlZiA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfSwgMCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICAgICAgdGhpcy5uZ2JNb2RhbFJlZiA9IG51bGw7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtDb21wb25lbnQsIE9uSW5pdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7QWN0aXZhdGVkUm91dGV9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7SU1lbnV9IGZyb20gJy4uL21vZGVsL21lbnUubW9kZWwnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2poaS1tZW51LWRldGFpbCcsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vbWVudS1kZXRhaWwuY29tcG9uZW50Lmh0bWwnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNZW51RGV0YWlsQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICAgIG1lbnU6IElNZW51O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlKSB7fVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIHRoaXMuYWN0aXZhdGVkUm91dGUuZGF0YS5zdWJzY3JpYmUoKHsgbWVudSB9KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubWVudSA9IG1lbnU7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJldmlvdXNTdGF0ZSgpIHtcclxuICAgICAgICB3aW5kb3cuaGlzdG9yeS5iYWNrKCk7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtDb21wb25lbnQsIE9uRGVzdHJveSwgT25Jbml0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtIdHRwRXJyb3JSZXNwb25zZSwgSHR0cEhlYWRlcnMsIEh0dHBSZXNwb25zZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlLCBSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7U3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtKaGlFdmVudE1hbmFnZXIsIEpoaVBhcnNlTGlua3N9IGZyb20gJ25nLWpoaXBzdGVyJztcclxuaW1wb3J0IHtNZW51U2VydmljZX0gZnJvbSAnLi9tZW51LnNlcnZpY2UnO1xyXG5pbXBvcnQge1BvcnRhbEFsZXJ0U2VydmljZX0gZnJvbSAnLi4vYWxlcnQvcG9ydGFsLWFsZXJ0LnNlcnZpY2UnO1xyXG5pbXBvcnQge1ByaW5jaXBhbH0gZnJvbSAnLi4vYXV0aC9wcmluY2lwYWwuc2VydmljZSc7XHJcbmltcG9ydCB7SVRFTVNfUEVSX1BBR0V9IGZyb20gJy4uL3V0aWwvcGFnaW5hdGlvbi5jb25zdGFudHMnO1xyXG5pbXBvcnQge0lNZW51fSBmcm9tICcuLi9tb2RlbC9tZW51Lm1vZGVsJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdqaGktbWVudScsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vbWVudS5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIE1lbnVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgICBjdXJyZW50QWNjb3VudDogYW55O1xyXG4gICAgbWVudXM6IElNZW51W107XHJcbiAgICBlcnJvcjogYW55O1xyXG4gICAgc3VjY2VzczogYW55O1xyXG4gICAgZXZlbnRTdWJzY3JpYmVyOiBTdWJzY3JpcHRpb247XHJcbiAgICByb3V0ZURhdGE6IGFueTtcclxuICAgIGxpbmtzOiBhbnk7XHJcbiAgICB0b3RhbEl0ZW1zOiBhbnk7XHJcbiAgICBxdWVyeUNvdW50OiBhbnk7XHJcbiAgICBpdGVtc1BlclBhZ2U6IGFueTtcclxuICAgIHBhZ2U6IGFueTtcclxuICAgIHByZWRpY2F0ZTogYW55O1xyXG4gICAgcHJldmlvdXNQYWdlOiBhbnk7XHJcbiAgICByZXZlcnNlOiBhbnk7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBtZW51U2VydmljZTogTWVudVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBwYXJzZUxpbmtzOiBKaGlQYXJzZUxpbmtzLFxyXG4gICAgICAgIHByaXZhdGUgYWxlcnRTZXJ2aWNlOiBQb3J0YWxBbGVydFNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBwcmluY2lwYWw6IFByaW5jaXBhbCxcclxuICAgICAgICBwcml2YXRlIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgICAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICAgICAgIHByaXZhdGUgZXZlbnRNYW5hZ2VyOiBKaGlFdmVudE1hbmFnZXJcclxuICAgICkge1xyXG4gICAgICAgIHRoaXMuaXRlbXNQZXJQYWdlID0gSVRFTVNfUEVSX1BBR0U7XHJcbiAgICAgICAgdGhpcy5yb3V0ZURhdGEgPSB0aGlzLmFjdGl2YXRlZFJvdXRlLmRhdGEuc3Vic2NyaWJlKGRhdGEgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnBhZ2UgPSBkYXRhLnBhZ2luZ1BhcmFtcy5wYWdlO1xyXG4gICAgICAgICAgICB0aGlzLnByZXZpb3VzUGFnZSA9IGRhdGEucGFnaW5nUGFyYW1zLnBhZ2U7XHJcbiAgICAgICAgICAgIHRoaXMucmV2ZXJzZSA9IGRhdGEucGFnaW5nUGFyYW1zLmFzY2VuZGluZztcclxuICAgICAgICAgICAgdGhpcy5wcmVkaWNhdGUgPSBkYXRhLnBhZ2luZ1BhcmFtcy5wcmVkaWNhdGU7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5wcmVkaWNhdGUgPT09ICdpZCcpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucHJlZGljYXRlID0gJ3NlcXVlbmNpYSc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLmxvYWRBbGwoKTtcclxuICAgICAgICB0aGlzLnByaW5jaXBhbC5pZGVudGl0eSgpLnRoZW4oYWNjb3VudCA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudEFjY291bnQgPSBhY2NvdW50O1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMucmVnaXN0ZXJDaGFuZ2VJbk1lbnVzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgbG9hZEFsbCgpIHtcclxuICAgICAgICB0aGlzLm1lbnVTZXJ2aWNlXHJcbiAgICAgICAgICAgIC5xdWVyeSh7XHJcbiAgICAgICAgICAgICAgICBwYWdlOiB0aGlzLnBhZ2UgLSAxLFxyXG4gICAgICAgICAgICAgICAgc2l6ZTogdGhpcy5pdGVtc1BlclBhZ2UsXHJcbiAgICAgICAgICAgICAgICBzb3J0OiB0aGlzLnNvcnQoKVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgICAgKHJlczogSHR0cFJlc3BvbnNlPElNZW51W10+KSA9PiB0aGlzLnBhZ2luYXRlTWVudXMocmVzLmJvZHksIHJlcy5oZWFkZXJzKSxcclxuICAgICAgICAgICAgICAgIChyZXM6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB0aGlzLm9uRXJyb3IocmVzLm1lc3NhZ2UpXHJcbiAgICAgICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0QWN0aXZlKG1lbnUsIGlzQWN0aXZhdGVkKSB7XHJcbiAgICAgICAgbWVudS5hdGl2byA9IGlzQWN0aXZhdGVkO1xyXG5cclxuICAgICAgICB0aGlzLm1lbnVTZXJ2aWNlLnVwZGF0ZShtZW51KS5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSAyMDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdWNjZXNzID0gJ09LJztcclxuICAgICAgICAgICAgICAgIHRoaXMubG9hZEFsbCgpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdWNjZXNzID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSAnRVJST1InO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0TG9naW5QZWxvQXBwKG1lbnUsIGlzTG9naW5QZWxvQXBwKSB7XHJcbiAgICAgICAgbWVudS5sb2dpblBlbG9BcHAgPSBpc0xvZ2luUGVsb0FwcDtcclxuXHJcbiAgICAgICAgdGhpcy5tZW51U2VydmljZS51cGRhdGUobWVudSkuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3VjY2VzcyA9ICdPSyc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRBbGwoKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3VjY2VzcyA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gJ0VSUk9SJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICBzZXRWaXNpdmVsU29tZW50ZVBhcmFHZXN0b3IobWVudSwgaXNWaXNpdmVsU29tZW50ZVBhcmFHZXN0b3IpIHtcclxuICAgICAgbWVudS52aXNpdmVsU29tZW50ZVBhcmFHZXN0b3IgPSBpc1Zpc2l2ZWxTb21lbnRlUGFyYUdlc3RvcjtcclxuXHJcbiAgICAgIHRoaXMubWVudVNlcnZpY2UudXBkYXRlKG1lbnUpLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSAyMDApIHtcclxuICAgICAgICAgICAgICB0aGlzLmVycm9yID0gbnVsbDtcclxuICAgICAgICAgICAgICB0aGlzLnN1Y2Nlc3MgPSAnT0snO1xyXG4gICAgICAgICAgICAgIHRoaXMubG9hZEFsbCgpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLnN1Y2Nlc3MgPSBudWxsO1xyXG4gICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSAnRVJST1InO1xyXG4gICAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHNldFNlbXByZVZpc2l2ZWwobWVudSwgaXNTZW1wcmVWaXNpdmVsKSB7XHJcbiAgICAgIG1lbnUuc2VtcHJlVmlzaXZlbCA9IGlzU2VtcHJlVmlzaXZlbDtcclxuXHJcbiAgICAgIHRoaXMubWVudVNlcnZpY2UudXBkYXRlKG1lbnUpLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSAyMDApIHtcclxuICAgICAgICAgICAgICB0aGlzLmVycm9yID0gbnVsbDtcclxuICAgICAgICAgICAgICB0aGlzLnN1Y2Nlc3MgPSAnT0snO1xyXG4gICAgICAgICAgICAgIHRoaXMubG9hZEFsbCgpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLnN1Y2Nlc3MgPSBudWxsO1xyXG4gICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSAnRVJST1InO1xyXG4gICAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gICAgbG9hZFBhZ2UocGFnZTogbnVtYmVyKSB7XHJcbiAgICAgICAgaWYgKHBhZ2UgIT09IHRoaXMucHJldmlvdXNQYWdlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJldmlvdXNQYWdlID0gcGFnZTtcclxuICAgICAgICAgICAgdGhpcy50cmFuc2l0aW9uKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRyYW5zaXRpb24oKSB7XHJcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvbWVudSddLCB7XHJcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zOiB7XHJcbiAgICAgICAgICAgICAgICBwYWdlOiB0aGlzLnBhZ2UsXHJcbiAgICAgICAgICAgICAgICBzaXplOiB0aGlzLml0ZW1zUGVyUGFnZSxcclxuICAgICAgICAgICAgICAgIHNvcnQ6IHRoaXMucHJlZGljYXRlICsgJywnICsgKHRoaXMucmV2ZXJzZSA/ICdhc2MnIDogJ2Rlc2MnKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5sb2FkQWxsKCk7XHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXIoKSB7XHJcbiAgICAgICAgdGhpcy5wYWdlID0gMDtcclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXHJcbiAgICAgICAgICAgICcvbWVudScsXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHBhZ2U6IHRoaXMucGFnZSxcclxuICAgICAgICAgICAgICAgIHNvcnQ6IHRoaXMucHJlZGljYXRlICsgJywnICsgKHRoaXMucmV2ZXJzZSA/ICdhc2MnIDogJ2Rlc2MnKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgXSk7XHJcbiAgICAgICAgdGhpcy5sb2FkQWxsKCk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICAgICAgdGhpcy5ldmVudE1hbmFnZXIuZGVzdHJveSh0aGlzLmV2ZW50U3Vic2NyaWJlcik7XHJcbiAgICB9XHJcblxyXG4gICAgdHJhY2tJZChpbmRleDogbnVtYmVyLCBpdGVtOiBJTWVudSkge1xyXG4gICAgICAgIHJldHVybiBpdGVtLmlkO1xyXG4gICAgfVxyXG5cclxuICAgIHJlZ2lzdGVyQ2hhbmdlSW5NZW51cygpIHtcclxuICAgICAgICB0aGlzLmV2ZW50U3Vic2NyaWJlciA9IHRoaXMuZXZlbnRNYW5hZ2VyLnN1YnNjcmliZSgnbWVudUxpc3RNb2RpZmljYXRpb24nLCAoKSA9PiB0aGlzLmxvYWRBbGwoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgc29ydCgpIHtcclxuICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMucHJlZGljYXRlKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHRoaXMucHJlZGljYXRlICsgJywnICsgKHRoaXMucmV2ZXJzZSA/ICdhc2MnIDogJ2Rlc2MnKSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmVzdWx0LnB1c2goJ3NlcXVlbmNpYSxhc2MnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnByZWRpY2F0ZSAhPT0gJ2lkJykge1xyXG4gICAgICAgICAgICByZXN1bHQucHVzaCgnaWQnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBwYWdpbmF0ZU1lbnVzKGRhdGE6IElNZW51W10sIGhlYWRlcnM6IEh0dHBIZWFkZXJzKSB7XHJcbiAgICAgICAgdGhpcy5saW5rcyA9IHRoaXMucGFyc2VMaW5rcy5wYXJzZShoZWFkZXJzLmdldCgnbGluaycpKTtcclxuICAgICAgICB0aGlzLnRvdGFsSXRlbXMgPSBwYXJzZUludChoZWFkZXJzLmdldCgnWC1Ub3RhbC1Db3VudCcpLCAxMCk7XHJcbiAgICAgICAgdGhpcy5xdWVyeUNvdW50ID0gdGhpcy50b3RhbEl0ZW1zO1xyXG4gICAgICAgIHRoaXMubWVudXMgPSBkYXRhO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgb25FcnJvcihlcnJvck1lc3NhZ2U6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKGVycm9yTWVzc2FnZSwgbnVsbCwgbnVsbCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U29ydEljb24ocHJvcGVydHk6IHN0cmluZykge1xyXG4gICAgICAgIGlmICghdGhpcy5wcmVkaWNhdGUgfHwgdGhpcy5yZXZlcnNlID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuICdzb3J0JztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnByZWRpY2F0ZSA9PT0gcHJvcGVydHkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmV2ZXJzZSA/ICdzb3J0LXVwJyA6ICdzb3J0LWRvd24nO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gJ3NvcnQnO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7SHR0cFJlc3BvbnNlfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7QWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgUmVzb2x2ZSwgUm91dGVyU3RhdGVTbmFwc2hvdCwgUm91dGVzfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQge0poaVJlc29sdmVQYWdpbmdQYXJhbXN9IGZyb20gJ25nLWpoaXBzdGVyJztcclxuaW1wb3J0IHtPYnNlcnZhYmxlLCBvZn0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7ZmlsdGVyLCBtYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHtNZW51U2VydmljZX0gZnJvbSAnLi9tZW51LnNlcnZpY2UnO1xyXG5pbXBvcnQge01lbnVDb21wb25lbnR9IGZyb20gJy4vbWVudS5jb21wb25lbnQnO1xyXG5pbXBvcnQge01lbnVEZXRhaWxDb21wb25lbnR9IGZyb20gJy4vbWVudS1kZXRhaWwuY29tcG9uZW50JztcclxuaW1wb3J0IHtNZW51VXBkYXRlQ29tcG9uZW50fSBmcm9tICcuL21lbnUtdXBkYXRlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7TWVudURlbGV0ZVBvcHVwQ29tcG9uZW50fSBmcm9tICcuL21lbnUtZGVsZXRlLWRpYWxvZy5jb21wb25lbnQnO1xyXG5pbXBvcnQge0lNZW51LCBNZW51fSBmcm9tICcuLi9tb2RlbC9tZW51Lm1vZGVsJztcclxuaW1wb3J0IHtVc2VyUm91dGVBY2Nlc3NTZXJ2aWNlfSBmcm9tICcuLi9hdXRoL3VzZXItcm91dGUtYWNjZXNzLXNlcnZpY2UnO1xyXG5cclxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcclxuZXhwb3J0IGNsYXNzIE1lbnVSZXNvbHZlIGltcGxlbWVudHMgUmVzb2x2ZTxJTWVudT4ge1xyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBzZXJ2aWNlOiBNZW51U2VydmljZSkge31cclxuXHJcbiAgICByZXNvbHZlKHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBzdGF0ZTogUm91dGVyU3RhdGVTbmFwc2hvdCk6IE9ic2VydmFibGU8TWVudT4ge1xyXG4gICAgICAgIGNvbnN0IGlkID0gcm91dGUucGFyYW1zWydpZCddID8gcm91dGUucGFyYW1zWydpZCddIDogbnVsbDtcclxuICAgICAgICBpZiAoaWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2VydmljZS5maW5kKGlkKS5waXBlKFxyXG4gICAgICAgICAgICAgICAgZmlsdGVyKChyZXNwb25zZTogSHR0cFJlc3BvbnNlPE1lbnU+KSA9PiByZXNwb25zZS5vayksXHJcbiAgICAgICAgICAgICAgICBtYXAoKG1lbnU6IEh0dHBSZXNwb25zZTxNZW51PikgPT4gbWVudS5ib2R5KVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gb2YobmV3IE1lbnUoKSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBtZW51Um91dGU6IFJvdXRlcyA9IFtcclxuICAgIHtcclxuICAgICAgICBwYXRoOiAnbWVudScsXHJcbiAgICAgICAgY29tcG9uZW50OiBNZW51Q29tcG9uZW50LFxyXG4gICAgICAgIHJlc29sdmU6IHtcclxuICAgICAgICAgICAgcGFnaW5nUGFyYW1zOiBKaGlSZXNvbHZlUGFnaW5nUGFyYW1zXHJcbiAgICAgICAgfSxcclxuICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgIGF1dGhvcml0aWVzOiBbJ1JPTEVfUE9SVEFMJ10sXHJcbiAgICAgICAgICAgIGRlZmF1bHRTb3J0OiAnaWQsYXNjJyxcclxuICAgICAgICAgICAgcGFnZVRpdGxlOiAnTWVudSdcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNhbkFjdGl2YXRlOiBbVXNlclJvdXRlQWNjZXNzU2VydmljZV1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgcGF0aDogJ21lbnUvOmlkL3ZpZXcnLFxyXG4gICAgICAgIGNvbXBvbmVudDogTWVudURldGFpbENvbXBvbmVudCxcclxuICAgICAgICByZXNvbHZlOiB7XHJcbiAgICAgICAgICAgIG1lbnU6IE1lbnVSZXNvbHZlXHJcbiAgICAgICAgfSxcclxuICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgIGF1dGhvcml0aWVzOiBbJ1JPTEVfUE9SVEFMJ10sXHJcbiAgICAgICAgICAgIHBhZ2VUaXRsZTogJ01lbnUnXHJcbiAgICAgICAgfSxcclxuICAgICAgICBjYW5BY3RpdmF0ZTogW1VzZXJSb3V0ZUFjY2Vzc1NlcnZpY2VdXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIHBhdGg6ICdtZW51L25ldycsXHJcbiAgICAgICAgY29tcG9uZW50OiBNZW51VXBkYXRlQ29tcG9uZW50LFxyXG4gICAgICAgIHJlc29sdmU6IHtcclxuICAgICAgICAgICAgbWVudTogTWVudVJlc29sdmVcclxuICAgICAgICB9LFxyXG4gICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgYXV0aG9yaXRpZXM6IFsnUk9MRV9QT1JUQUwnXSxcclxuICAgICAgICAgICAgcGFnZVRpdGxlOiAnTWVudSdcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNhbkFjdGl2YXRlOiBbVXNlclJvdXRlQWNjZXNzU2VydmljZV1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgcGF0aDogJ21lbnUvOmlkL2VkaXQnLFxyXG4gICAgICAgIGNvbXBvbmVudDogTWVudVVwZGF0ZUNvbXBvbmVudCxcclxuICAgICAgICByZXNvbHZlOiB7XHJcbiAgICAgICAgICAgIG1lbnU6IE1lbnVSZXNvbHZlXHJcbiAgICAgICAgfSxcclxuICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgIGF1dGhvcml0aWVzOiBbJ1JPTEVfUE9SVEFMJ10sXHJcbiAgICAgICAgICAgIHBhZ2VUaXRsZTogJ01lbnUnXHJcbiAgICAgICAgfSxcclxuICAgICAgICBjYW5BY3RpdmF0ZTogW1VzZXJSb3V0ZUFjY2Vzc1NlcnZpY2VdXHJcbiAgICB9XHJcbl07XHJcblxyXG5leHBvcnQgY29uc3QgbWVudVBvcHVwUm91dGU6IFJvdXRlcyA9IFtcclxuICAgIHtcclxuICAgICAgICBwYXRoOiAnbWVudS86aWQvZGVsZXRlJyxcclxuICAgICAgICBjb21wb25lbnQ6IE1lbnVEZWxldGVQb3B1cENvbXBvbmVudCxcclxuICAgICAgICByZXNvbHZlOiB7XHJcbiAgICAgICAgICAgIG1lbnU6IE1lbnVSZXNvbHZlXHJcbiAgICAgICAgfSxcclxuICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgIGF1dGhvcml0aWVzOiBbJ1JPTEVfUE9SVEFMJ10sXHJcbiAgICAgICAgICAgIHBhZ2VUaXRsZTogJ01lbnUnXHJcbiAgICAgICAgfSxcclxuICAgICAgICBjYW5BY3RpdmF0ZTogW1VzZXJSb3V0ZUFjY2Vzc1NlcnZpY2VdLFxyXG4gICAgICAgIG91dGxldDogJ3BvcHVwJ1xyXG4gICAgfVxyXG5dO1xyXG4iLCJpbXBvcnQge0NVU1RPTV9FTEVNRU5UU19TQ0hFTUEsIE5nTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtSb3V0ZXJNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcblxyXG5pbXBvcnQge01lbnVDb21wb25lbnR9IGZyb20gJy4vbWVudS5jb21wb25lbnQnO1xyXG5pbXBvcnQge01lbnVEZXRhaWxDb21wb25lbnR9IGZyb20gJy4vbWVudS1kZXRhaWwuY29tcG9uZW50JztcclxuaW1wb3J0IHtNZW51VXBkYXRlQ29tcG9uZW50fSBmcm9tICcuL21lbnUtdXBkYXRlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7TWVudURlbGV0ZURpYWxvZ0NvbXBvbmVudCwgTWVudURlbGV0ZVBvcHVwQ29tcG9uZW50fSBmcm9tICcuL21lbnUtZGVsZXRlLWRpYWxvZy5jb21wb25lbnQnO1xyXG5pbXBvcnQge21lbnVQb3B1cFJvdXRlLCBtZW51Um91dGV9IGZyb20gJy4vbWVudS5yb3V0ZSc7XHJcbmltcG9ydCB7Rm9udEF3ZXNvbWVNb2R1bGV9IGZyb20gJ0Bmb3J0YXdlc29tZS9hbmd1bGFyLWZvbnRhd2Vzb21lJztcclxuaW1wb3J0IHtsaWJyYXJ5fSBmcm9tICdAZm9ydGF3ZXNvbWUvZm9udGF3ZXNvbWUtc3ZnLWNvcmUnO1xyXG5pbXBvcnQge2Zhc30gZnJvbSAnQGZvcnRhd2Vzb21lL2ZyZWUtc29saWQtc3ZnLWljb25zJztcclxuaW1wb3J0IHtGb3Jtc01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQge05nSmhpcHN0ZXJNb2R1bGV9IGZyb20gJ25nLWpoaXBzdGVyJztcclxuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7UG9ydGFsQWxlcnRNb2R1bGV9IGZyb20gJy4uL2FsZXJ0L3BvcnRhbC1hbGVydC5tb2R1bGUnO1xyXG5pbXBvcnQge01FTlVfTU9EVUxPX09QVElPTlMsIE9wdGlvbnNQcm92aWRlcn0gZnJvbSAnLi4vdXRpbC9vcHRpb25zLXByb3ZpZGVyJztcclxuaW1wb3J0IHtHYXRld2F5Um91dGVzU2VydmljZX0gZnJvbSAnLi4vYWRtaW4vZ2F0ZXdheS9nYXRld2F5LXJvdXRlcy5zZXJ2aWNlJztcclxuaW1wb3J0IHtOZ2JNb2R1bGV9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuXHJcbmxpYnJhcnkuYWRkKGZhcyk7XHJcblxyXG5jb25zdCBFTlRJVFlfU1RBVEVTID0gWy4uLm1lbnVSb3V0ZSwgLi4ubWVudVBvcHVwUm91dGVdO1xyXG5cclxuQE5nTW9kdWxlKHtcclxuICAgIGltcG9ydHM6IFtcclxuICAgICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgICBGb3Jtc01vZHVsZSxcclxuICAgICAgTmdKaGlwc3Rlck1vZHVsZSxcclxuICAgICAgTmdiTW9kdWxlLmZvclJvb3QoKSxcclxuICAgICAgRm9udEF3ZXNvbWVNb2R1bGUsXHJcbiAgICAgIFBvcnRhbEFsZXJ0TW9kdWxlLFxyXG4gICAgICBSb3V0ZXJNb2R1bGUuZm9yQ2hpbGQoRU5USVRZX1NUQVRFUylcclxuICAgIF0sXHJcbiAgICBkZWNsYXJhdGlvbnM6IFtcclxuICAgICAgTWVudUNvbXBvbmVudCxcclxuICAgICAgTWVudURldGFpbENvbXBvbmVudCxcclxuICAgICAgTWVudVVwZGF0ZUNvbXBvbmVudCxcclxuICAgICAgTWVudURlbGV0ZURpYWxvZ0NvbXBvbmVudCxcclxuICAgICAgTWVudURlbGV0ZVBvcHVwQ29tcG9uZW50XSxcclxuICAgIGVudHJ5Q29tcG9uZW50czogW1xyXG4gICAgICBNZW51Q29tcG9uZW50LFxyXG4gICAgICBNZW51VXBkYXRlQ29tcG9uZW50LFxyXG4gICAgICBNZW51RGVsZXRlRGlhbG9nQ29tcG9uZW50LFxyXG4gICAgICBNZW51RGVsZXRlUG9wdXBDb21wb25lbnRcclxuICAgIF0sXHJcbiAgICBwcm92aWRlcnM6IFtcclxuICAgICAgT3B0aW9uc1Byb3ZpZGVyLFxyXG4gICAgICBHYXRld2F5Um91dGVzU2VydmljZVxyXG4gICAgXSxcclxuICAgIHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTWVudU1vZHVsZSB7XHJcbiAgc3RhdGljIGZvclJvb3QobW9kdWxvPzpzdHJpbmcpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIG5nTW9kdWxlOiBNZW51TW9kdWxlLFxyXG4gICAgICBwcm92aWRlcnM6IFtcclxuICAgICAgICB7cHJvdmlkZTogTUVOVV9NT0RVTE9fT1BUSU9OUywgdXNlVmFsdWU6IG1vZHVsb31cclxuICAgICAgXVxyXG4gICAgfTtcclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIEVsZW1lbnRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBIdHRwUmVzcG9uc2UsIEh0dHBFcnJvclJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEpoaURhdGFVdGlscyB9IGZyb20gJ25nLWpoaXBzdGVyJztcclxuXHJcbmltcG9ydCB7IEVtcHJlc2FTZXJ2aWNlIH0gZnJvbSAnLi9lbXByZXNhLnNlcnZpY2UnO1xyXG5pbXBvcnQge0lFbXByZXNhfSBmcm9tICcuLi9tb2RlbC9lbXByZXNhLm1vZGVsJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdqaGktZW1wcmVzYS11cGRhdGUnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2VtcHJlc2EtdXBkYXRlLmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgRW1wcmVzYVVwZGF0ZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgICBlbXByZXNhOiBJRW1wcmVzYTtcclxuICAgIGlzU2F2aW5nOiBib29sZWFuO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgZGF0YVV0aWxzOiBKaGlEYXRhVXRpbHMsXHJcbiAgICAgICAgcHJpdmF0ZSBlbXByZXNhU2VydmljZTogRW1wcmVzYVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxyXG4gICAgICAgIHByaXZhdGUgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlXHJcbiAgICApIHt9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5pc1NhdmluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuYWN0aXZhdGVkUm91dGUuZGF0YS5zdWJzY3JpYmUoKHsgZW1wcmVzYSB9KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZW1wcmVzYSA9IGVtcHJlc2E7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYnl0ZVNpemUoZmllbGQpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kYXRhVXRpbHMuYnl0ZVNpemUoZmllbGQpO1xyXG4gICAgfVxyXG5cclxuICAgIG9wZW5GaWxlKGNvbnRlbnRUeXBlLCBmaWVsZCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGFVdGlscy5vcGVuRmlsZShjb250ZW50VHlwZSwgZmllbGQpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldEZpbGVEYXRhKGV2ZW50LCBlbnRpdHksIGZpZWxkLCBpc0ltYWdlKSB7XHJcbiAgICAgICAgdGhpcy5kYXRhVXRpbHMuc2V0RmlsZURhdGEoZXZlbnQsIGVudGl0eSwgZmllbGQsIGlzSW1hZ2UpO1xyXG4gICAgfVxyXG5cclxuICAgIGNsZWFySW5wdXRJbWFnZShmaWVsZDogc3RyaW5nLCBmaWVsZENvbnRlbnRUeXBlOiBzdHJpbmcsIGlkSW5wdXQ6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuZGF0YVV0aWxzLmNsZWFySW5wdXRJbWFnZSh0aGlzLmVtcHJlc2EsIHRoaXMuZWxlbWVudFJlZiwgZmllbGQsIGZpZWxkQ29udGVudFR5cGUsIGlkSW5wdXQpO1xyXG4gICAgfVxyXG5cclxuICAgIHByZXZpb3VzU3RhdGUoKSB7XHJcbiAgICAgICAgd2luZG93Lmhpc3RvcnkuYmFjaygpO1xyXG4gICAgfVxyXG5cclxuICAgIHNhdmUoKSB7XHJcbiAgICAgICAgdGhpcy5pc1NhdmluZyA9IHRydWU7XHJcbiAgICAgICAgaWYgKHRoaXMuZW1wcmVzYS5pZCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaWJlVG9TYXZlUmVzcG9uc2UodGhpcy5lbXByZXNhU2VydmljZS51cGRhdGUodGhpcy5lbXByZXNhKSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zdWJzY3JpYmVUb1NhdmVSZXNwb25zZSh0aGlzLmVtcHJlc2FTZXJ2aWNlLmNyZWF0ZSh0aGlzLmVtcHJlc2EpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzdWJzY3JpYmVUb1NhdmVSZXNwb25zZShyZXN1bHQ6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPElFbXByZXNhPj4pIHtcclxuICAgICAgICByZXN1bHQuc3Vic2NyaWJlKChyZXM6IEh0dHBSZXNwb25zZTxJRW1wcmVzYT4pID0+IHRoaXMub25TYXZlU3VjY2VzcygpLCAocmVzOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gdGhpcy5vblNhdmVFcnJvcigpKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG9uU2F2ZVN1Y2Nlc3MoKSB7XHJcbiAgICAgICAgdGhpcy5pc1NhdmluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMucHJldmlvdXNTdGF0ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgb25TYXZlRXJyb3IoKSB7XHJcbiAgICAgICAgdGhpcy5pc1NhdmluZyA9IGZhbHNlO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcblxyXG5pbXBvcnQgeyBOZ2JBY3RpdmVNb2RhbCwgTmdiTW9kYWwsIE5nYk1vZGFsUmVmIH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQgeyBKaGlFdmVudE1hbmFnZXIgfSBmcm9tICduZy1qaGlwc3Rlcic7XHJcblxyXG5pbXBvcnQgeyBFbXByZXNhU2VydmljZSB9IGZyb20gJy4vZW1wcmVzYS5zZXJ2aWNlJztcclxuaW1wb3J0IHtJRW1wcmVzYX0gZnJvbSAnLi4vbW9kZWwvZW1wcmVzYS5tb2RlbCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnamhpLWVtcHJlc2EtZGVsZXRlLWRpYWxvZycsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vZW1wcmVzYS1kZWxldGUtZGlhbG9nLmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgRW1wcmVzYURlbGV0ZURpYWxvZ0NvbXBvbmVudCB7XHJcbiAgICBlbXByZXNhOiBJRW1wcmVzYTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgcHJpdmF0ZSBlbXByZXNhU2VydmljZTogRW1wcmVzYVNlcnZpY2UsXHJcbiAgICAgIHB1YmxpYyBhY3RpdmVNb2RhbDogTmdiQWN0aXZlTW9kYWwsXHJcbiAgICAgIHByaXZhdGUgZXZlbnRNYW5hZ2VyOiBKaGlFdmVudE1hbmFnZXJcclxuICAgICkge31cclxuXHJcbiAgICBjbGVhcigpIHtcclxuICAgICAgICB0aGlzLmFjdGl2ZU1vZGFsLmRpc21pc3MoJ2NhbmNlbCcpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbmZpcm1EZWxldGUoaWQ6IG51bWJlcikge1xyXG4gICAgICAgIHRoaXMuZW1wcmVzYVNlcnZpY2UuZGVsZXRlKGlkKS5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmV2ZW50TWFuYWdlci5icm9hZGNhc3Qoe1xyXG4gICAgICAgICAgICAgICAgbmFtZTogJ2VtcHJlc2FMaXN0TW9kaWZpY2F0aW9uJyxcclxuICAgICAgICAgICAgICAgIGNvbnRlbnQ6ICdEZWxldGVkIGFuIGVtcHJlc2EnXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLmFjdGl2ZU1vZGFsLmRpc21pc3ModHJ1ZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdqaGktZW1wcmVzYS1kZWxldGUtcG9wdXAnLFxyXG4gICAgdGVtcGxhdGU6ICcnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBFbXByZXNhRGVsZXRlUG9wdXBDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgICBwcml2YXRlIG5nYk1vZGFsUmVmOiBOZ2JNb2RhbFJlZjtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgcHJpdmF0ZSBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBOZ2JNb2RhbFxyXG4gICAgKSB7fVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIHRoaXMuYWN0aXZhdGVkUm91dGUuZGF0YS5zdWJzY3JpYmUoKHsgZW1wcmVzYSB9KSA9PiB7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5uZ2JNb2RhbFJlZiA9IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oRW1wcmVzYURlbGV0ZURpYWxvZ0NvbXBvbmVudCBhcyBDb21wb25lbnQsIHsgc2l6ZTogJ2xnJywgYmFja2Ryb3A6ICdzdGF0aWMnIH0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5uZ2JNb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS5lbXByZXNhID0gZW1wcmVzYTtcclxuICAgICAgICAgICAgICAgIHRoaXMubmdiTW9kYWxSZWYucmVzdWx0LnRoZW4oXHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3sgb3V0bGV0czogeyBwb3B1cDogbnVsbCB9IH1dLCB7IHJlcGxhY2VVcmw6IHRydWUsIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6ICdtZXJnZScgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmdiTW9kYWxSZWYgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgcmVhc29uID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3sgb3V0bGV0czogeyBwb3B1cDogbnVsbCB9IH1dLCB7IHJlcGxhY2VVcmw6IHRydWUsIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6ICdtZXJnZScgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmdiTW9kYWxSZWYgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH0sIDApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25EZXN0cm95KCkge1xyXG4gICAgICAgIHRoaXMubmdiTW9kYWxSZWYgPSBudWxsO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7Q29tcG9uZW50LCBPbkluaXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQge0poaURhdGFVdGlsc30gZnJvbSAnbmctamhpcHN0ZXInO1xyXG5pbXBvcnQge0lFbXByZXNhfSBmcm9tICcuLi9tb2RlbC9lbXByZXNhLm1vZGVsJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdqaGktZW1wcmVzYS1kZXRhaWwnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2VtcHJlc2EtZGV0YWlsLmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgRW1wcmVzYURldGFpbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgICBlbXByZXNhOiBJRW1wcmVzYTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGRhdGFVdGlsczogSmhpRGF0YVV0aWxzLCBwcml2YXRlIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSkge31cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLmFjdGl2YXRlZFJvdXRlLmRhdGEuc3Vic2NyaWJlKCh7IGVtcHJlc2EgfSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmVtcHJlc2EgPSBlbXByZXNhO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGJ5dGVTaXplKGZpZWxkKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVV0aWxzLmJ5dGVTaXplKGZpZWxkKTtcclxuICAgIH1cclxuXHJcbiAgICBvcGVuRmlsZShjb250ZW50VHlwZSwgZmllbGQpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kYXRhVXRpbHMub3BlbkZpbGUoY29udGVudFR5cGUsIGZpZWxkKTtcclxuICAgIH1cclxuICAgIHByZXZpb3VzU3RhdGUoKSB7XHJcbiAgICAgICAgd2luZG93Lmhpc3RvcnkuYmFjaygpO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7Q29tcG9uZW50LCBPbkRlc3Ryb3ksIE9uSW5pdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7SHR0cEVycm9yUmVzcG9uc2UsIEh0dHBIZWFkZXJzLCBIdHRwUmVzcG9uc2V9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQge1N1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7SmhpRGF0YVV0aWxzLCBKaGlFdmVudE1hbmFnZXIsIEpoaVBhcnNlTGlua3N9IGZyb20gJ25nLWpoaXBzdGVyJztcclxuXHJcbmltcG9ydCB7RW1wcmVzYVNlcnZpY2V9IGZyb20gJy4vZW1wcmVzYS5zZXJ2aWNlJztcclxuaW1wb3J0IHtJRW1wcmVzYX0gZnJvbSAnLi4vbW9kZWwvZW1wcmVzYS5tb2RlbCc7XHJcbmltcG9ydCB7UG9ydGFsQWxlcnRTZXJ2aWNlfSBmcm9tICcuLi9hbGVydC9wb3J0YWwtYWxlcnQuc2VydmljZSc7XHJcbmltcG9ydCB7UHJpbmNpcGFsfSBmcm9tICcuLi9hdXRoL3ByaW5jaXBhbC5zZXJ2aWNlJztcclxuaW1wb3J0IHtJVEVNU19QRVJfUEFHRX0gZnJvbSAnLi4vdXRpbC9wYWdpbmF0aW9uLmNvbnN0YW50cyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnamhpLWVtcHJlc2EnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2VtcHJlc2EuY29tcG9uZW50Lmh0bWwnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBFbXByZXNhQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gICAgY3VycmVudEFjY291bnQ6IGFueTtcclxuICAgIGVtcHJlc2FzOiBJRW1wcmVzYVtdO1xyXG4gICAgZXJyb3I6IGFueTtcclxuICAgIHN1Y2Nlc3M6IGFueTtcclxuICAgIGV2ZW50U3Vic2NyaWJlcjogU3Vic2NyaXB0aW9uO1xyXG4gICAgcm91dGVEYXRhOiBhbnk7XHJcbiAgICBsaW5rczogYW55O1xyXG4gICAgdG90YWxJdGVtczogYW55O1xyXG4gICAgcXVlcnlDb3VudDogYW55O1xyXG4gICAgaXRlbXNQZXJQYWdlOiBhbnk7XHJcbiAgICBwYWdlOiBhbnk7XHJcbiAgICBwcmVkaWNhdGU6IGFueTtcclxuICAgIHByZXZpb3VzUGFnZTogYW55O1xyXG4gICAgcmV2ZXJzZTogYW55O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgZW1wcmVzYVNlcnZpY2U6IEVtcHJlc2FTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgcGFyc2VMaW5rczogSmhpUGFyc2VMaW5rcyxcclxuICAgICAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogUG9ydGFsQWxlcnRTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgcHJpbmNpcGFsOiBQcmluY2lwYWwsXHJcbiAgICAgICAgcHJpdmF0ZSBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICAgICAgcHJpdmF0ZSBkYXRhVXRpbHM6IEpoaURhdGFVdGlscyxcclxuICAgICAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICAgICAgIHByaXZhdGUgZXZlbnRNYW5hZ2VyOiBKaGlFdmVudE1hbmFnZXJcclxuICAgICkge1xyXG4gICAgICAgIHRoaXMuaXRlbXNQZXJQYWdlID0gSVRFTVNfUEVSX1BBR0U7XHJcbiAgICAgICAgdGhpcy5yb3V0ZURhdGEgPSB0aGlzLmFjdGl2YXRlZFJvdXRlLmRhdGEuc3Vic2NyaWJlKGRhdGEgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnBhZ2UgPSBkYXRhLnBhZ2luZ1BhcmFtcy5wYWdlO1xyXG4gICAgICAgICAgICB0aGlzLnByZXZpb3VzUGFnZSA9IGRhdGEucGFnaW5nUGFyYW1zLnBhZ2U7XHJcbiAgICAgICAgICAgIHRoaXMucmV2ZXJzZSA9IGRhdGEucGFnaW5nUGFyYW1zLmFzY2VuZGluZztcclxuICAgICAgICAgICAgdGhpcy5wcmVkaWNhdGUgPSBkYXRhLnBhZ2luZ1BhcmFtcy5wcmVkaWNhdGU7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgbG9hZEFsbCgpIHtcclxuICAgICAgICB0aGlzLmVtcHJlc2FTZXJ2aWNlXHJcbiAgICAgICAgICAgIC5xdWVyeSh7XHJcbiAgICAgICAgICAgICAgICBwYWdlOiB0aGlzLnBhZ2UgLSAxLFxyXG4gICAgICAgICAgICAgICAgc2l6ZTogdGhpcy5pdGVtc1BlclBhZ2UsXHJcbiAgICAgICAgICAgICAgICBzb3J0OiB0aGlzLnNvcnQoKVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgICAgKHJlczogSHR0cFJlc3BvbnNlPElFbXByZXNhW10+KSA9PiB0aGlzLnBhZ2luYXRlRW1wcmVzYXMocmVzLmJvZHksIHJlcy5oZWFkZXJzKSxcclxuICAgICAgICAgICAgICAgIChyZXM6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB0aGlzLm9uRXJyb3IocmVzLm1lc3NhZ2UpXHJcbiAgICAgICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgbG9hZFBhZ2UocGFnZTogbnVtYmVyKSB7XHJcbiAgICAgICAgaWYgKHBhZ2UgIT09IHRoaXMucHJldmlvdXNQYWdlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJldmlvdXNQYWdlID0gcGFnZTtcclxuICAgICAgICAgICAgdGhpcy50cmFuc2l0aW9uKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRyYW5zaXRpb24oKSB7XHJcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvZW1wcmVzYSddLCB7XHJcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zOiB7XHJcbiAgICAgICAgICAgICAgICBwYWdlOiB0aGlzLnBhZ2UsXHJcbiAgICAgICAgICAgICAgICBzaXplOiB0aGlzLml0ZW1zUGVyUGFnZSxcclxuICAgICAgICAgICAgICAgIHNvcnQ6IHRoaXMucHJlZGljYXRlICsgJywnICsgKHRoaXMucmV2ZXJzZSA/ICdhc2MnIDogJ2Rlc2MnKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5sb2FkQWxsKCk7XHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXIoKSB7XHJcbiAgICAgICAgdGhpcy5wYWdlID0gMDtcclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXHJcbiAgICAgICAgICAgICcvZW1wcmVzYScsXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHBhZ2U6IHRoaXMucGFnZSxcclxuICAgICAgICAgICAgICAgIHNvcnQ6IHRoaXMucHJlZGljYXRlICsgJywnICsgKHRoaXMucmV2ZXJzZSA/ICdhc2MnIDogJ2Rlc2MnKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgXSk7XHJcbiAgICAgICAgdGhpcy5sb2FkQWxsKCk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5sb2FkQWxsKCk7XHJcbiAgICAgICAgdGhpcy5wcmluY2lwYWwuaWRlbnRpdHkoKS50aGVuKGFjY291bnQgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRBY2NvdW50ID0gYWNjb3VudDtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLnJlZ2lzdGVyQ2hhbmdlSW5FbXByZXNhcygpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25EZXN0cm95KCkge1xyXG4gICAgICAgIHRoaXMuZXZlbnRNYW5hZ2VyLmRlc3Ryb3kodGhpcy5ldmVudFN1YnNjcmliZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIHRyYWNrSWQoaW5kZXg6IG51bWJlciwgaXRlbTogSUVtcHJlc2EpIHtcclxuICAgICAgICByZXR1cm4gaXRlbS5pZDtcclxuICAgIH1cclxuXHJcbiAgICBieXRlU2l6ZShmaWVsZCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGFVdGlscy5ieXRlU2l6ZShmaWVsZCk7XHJcbiAgICB9XHJcblxyXG4gICAgb3BlbkZpbGUoY29udGVudFR5cGUsIGZpZWxkKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVV0aWxzLm9wZW5GaWxlKGNvbnRlbnRUeXBlLCBmaWVsZCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVnaXN0ZXJDaGFuZ2VJbkVtcHJlc2FzKCkge1xyXG4gICAgICAgIHRoaXMuZXZlbnRTdWJzY3JpYmVyID0gdGhpcy5ldmVudE1hbmFnZXIuc3Vic2NyaWJlKCdlbXByZXNhTGlzdE1vZGlmaWNhdGlvbicsIHJlc3BvbnNlID0+IHRoaXMubG9hZEFsbCgpKTtcclxuICAgIH1cclxuXHJcbiAgICBzb3J0KCkge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFt0aGlzLnByZWRpY2F0ZSArICcsJyArICh0aGlzLnJldmVyc2UgPyAnYXNjJyA6ICdkZXNjJyldO1xyXG4gICAgICAgIGlmICh0aGlzLnByZWRpY2F0ZSAhPT0gJ2lkJykge1xyXG4gICAgICAgICAgICByZXN1bHQucHVzaCgnaWQnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHBhZ2luYXRlRW1wcmVzYXMoZGF0YTogSUVtcHJlc2FbXSwgaGVhZGVyczogSHR0cEhlYWRlcnMpIHtcclxuICAgICAgICB0aGlzLmxpbmtzID0gdGhpcy5wYXJzZUxpbmtzLnBhcnNlKGhlYWRlcnMuZ2V0KCdsaW5rJykpO1xyXG4gICAgICAgIHRoaXMudG90YWxJdGVtcyA9IHBhcnNlSW50KGhlYWRlcnMuZ2V0KCdYLVRvdGFsLUNvdW50JyksIDEwKTtcclxuICAgICAgICB0aGlzLnF1ZXJ5Q291bnQgPSB0aGlzLnRvdGFsSXRlbXM7XHJcbiAgICAgICAgdGhpcy5lbXByZXNhcyA9IGRhdGE7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBvbkVycm9yKGVycm9yTWVzc2FnZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoZXJyb3JNZXNzYWdlLCBudWxsLCBudWxsKTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0h0dHBSZXNwb25zZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlU25hcHNob3QsIFJlc29sdmUsIFJvdXRlclN0YXRlU25hcHNob3QsIFJvdXRlc30gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHtKaGlSZXNvbHZlUGFnaW5nUGFyYW1zfSBmcm9tICduZy1qaGlwc3Rlcic7XHJcbmltcG9ydCB7T2JzZXJ2YWJsZSwgb2Z9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge2ZpbHRlciwgbWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7RW1wcmVzYVNlcnZpY2V9IGZyb20gJy4vZW1wcmVzYS5zZXJ2aWNlJztcclxuaW1wb3J0IHtFbXByZXNhQ29tcG9uZW50fSBmcm9tICcuL2VtcHJlc2EuY29tcG9uZW50JztcclxuaW1wb3J0IHtFbXByZXNhRGV0YWlsQ29tcG9uZW50fSBmcm9tICcuL2VtcHJlc2EtZGV0YWlsLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7RW1wcmVzYVVwZGF0ZUNvbXBvbmVudH0gZnJvbSAnLi9lbXByZXNhLXVwZGF0ZS5jb21wb25lbnQnO1xyXG5pbXBvcnQge0VtcHJlc2FEZWxldGVQb3B1cENvbXBvbmVudH0gZnJvbSAnLi9lbXByZXNhLWRlbGV0ZS1kaWFsb2cuY29tcG9uZW50JztcclxuaW1wb3J0IHtFbXByZXNhLCBJRW1wcmVzYX0gZnJvbSAnLi4vbW9kZWwvZW1wcmVzYS5tb2RlbCc7XHJcbmltcG9ydCB7VXNlclJvdXRlQWNjZXNzU2VydmljZX0gZnJvbSAnLi4vYXV0aC91c2VyLXJvdXRlLWFjY2Vzcy1zZXJ2aWNlJztcclxuXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXHJcbmV4cG9ydCBjbGFzcyBFbXByZXNhUmVzb2x2ZSBpbXBsZW1lbnRzIFJlc29sdmU8SUVtcHJlc2E+IHtcclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgc2VydmljZTogRW1wcmVzYVNlcnZpY2UpIHt9XHJcblxyXG4gICAgcmVzb2x2ZShyb3V0ZTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgc3RhdGU6IFJvdXRlclN0YXRlU25hcHNob3QpOiBPYnNlcnZhYmxlPEVtcHJlc2E+IHtcclxuICAgICAgICBjb25zdCBpZCA9IHJvdXRlLnBhcmFtc1snaWQnXSA/IHJvdXRlLnBhcmFtc1snaWQnXSA6IG51bGw7XHJcbiAgICAgICAgaWYgKGlkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNlcnZpY2UuZmluZChpZCkucGlwZShcclxuICAgICAgICAgICAgICAgIGZpbHRlcigocmVzcG9uc2U6IEh0dHBSZXNwb25zZTxFbXByZXNhPikgPT4gcmVzcG9uc2Uub2spLFxyXG4gICAgICAgICAgICAgICAgbWFwKChlbXByZXNhOiBIdHRwUmVzcG9uc2U8RW1wcmVzYT4pID0+IGVtcHJlc2EuYm9keSlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG9mKG5ldyBFbXByZXNhKCkpO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgZW1wcmVzYVJvdXRlOiBSb3V0ZXMgPSBbXHJcbiAgICB7XHJcbiAgICAgICAgcGF0aDogJ2VtcHJlc2EnLFxyXG4gICAgICAgIGNvbXBvbmVudDogRW1wcmVzYUNvbXBvbmVudCxcclxuICAgICAgICByZXNvbHZlOiB7XHJcbiAgICAgICAgICAgIHBhZ2luZ1BhcmFtczogSmhpUmVzb2x2ZVBhZ2luZ1BhcmFtc1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICBhdXRob3JpdGllczogWydST0xFX1BPUlRBTCddLFxyXG4gICAgICAgICAgICBkZWZhdWx0U29ydDogJ2lkLGFzYycsXHJcbiAgICAgICAgICAgIHBhZ2VUaXRsZTogJ0VtcHJlc2EnXHJcbiAgICAgICAgfSxcclxuICAgICAgICBjYW5BY3RpdmF0ZTogW1VzZXJSb3V0ZUFjY2Vzc1NlcnZpY2VdXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIHBhdGg6ICdlbXByZXNhLzppZC92aWV3JyxcclxuICAgICAgICBjb21wb25lbnQ6IEVtcHJlc2FEZXRhaWxDb21wb25lbnQsXHJcbiAgICAgICAgcmVzb2x2ZToge1xyXG4gICAgICAgICAgICBlbXByZXNhOiBFbXByZXNhUmVzb2x2ZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICBhdXRob3JpdGllczogWydST0xFX1BPUlRBTCddLFxyXG4gICAgICAgICAgICBwYWdlVGl0bGU6ICdFbXByZXNhJ1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY2FuQWN0aXZhdGU6IFtVc2VyUm91dGVBY2Nlc3NTZXJ2aWNlXVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBwYXRoOiAnZW1wcmVzYS9uZXcnLFxyXG4gICAgICAgIGNvbXBvbmVudDogRW1wcmVzYVVwZGF0ZUNvbXBvbmVudCxcclxuICAgICAgICByZXNvbHZlOiB7XHJcbiAgICAgICAgICAgIGVtcHJlc2E6IEVtcHJlc2FSZXNvbHZlXHJcbiAgICAgICAgfSxcclxuICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgIGF1dGhvcml0aWVzOiBbJ1JPTEVfUE9SVEFMJ10sXHJcbiAgICAgICAgICAgIHBhZ2VUaXRsZTogJ0VtcHJlc2EnXHJcbiAgICAgICAgfSxcclxuICAgICAgICBjYW5BY3RpdmF0ZTogW1VzZXJSb3V0ZUFjY2Vzc1NlcnZpY2VdXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIHBhdGg6ICdlbXByZXNhLzppZC9lZGl0JyxcclxuICAgICAgICBjb21wb25lbnQ6IEVtcHJlc2FVcGRhdGVDb21wb25lbnQsXHJcbiAgICAgICAgcmVzb2x2ZToge1xyXG4gICAgICAgICAgICBlbXByZXNhOiBFbXByZXNhUmVzb2x2ZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICBhdXRob3JpdGllczogWydST0xFX1BPUlRBTCddLFxyXG4gICAgICAgICAgICBwYWdlVGl0bGU6ICdFbXByZXNhJ1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY2FuQWN0aXZhdGU6IFtVc2VyUm91dGVBY2Nlc3NTZXJ2aWNlXVxyXG4gICAgfVxyXG5dO1xyXG5cclxuZXhwb3J0IGNvbnN0IGVtcHJlc2FQb3B1cFJvdXRlOiBSb3V0ZXMgPSBbXHJcbiAgICB7XHJcbiAgICAgICAgcGF0aDogJ2VtcHJlc2EvOmlkL2RlbGV0ZScsXHJcbiAgICAgICAgY29tcG9uZW50OiBFbXByZXNhRGVsZXRlUG9wdXBDb21wb25lbnQsXHJcbiAgICAgICAgcmVzb2x2ZToge1xyXG4gICAgICAgICAgICBlbXByZXNhOiBFbXByZXNhUmVzb2x2ZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICBhdXRob3JpdGllczogWydST0xFX1BPUlRBTCddLFxyXG4gICAgICAgICAgICBwYWdlVGl0bGU6ICdFbXByZXNhJ1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY2FuQWN0aXZhdGU6IFtVc2VyUm91dGVBY2Nlc3NTZXJ2aWNlXSxcclxuICAgICAgICBvdXRsZXQ6ICdwb3B1cCdcclxuICAgIH1cclxuXTtcclxuIiwiaW1wb3J0IHtDVVNUT01fRUxFTUVOVFNfU0NIRU1BLCBOZ01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7Um91dGVyTW9kdWxlfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5cclxuaW1wb3J0IHtQb3J0YWxBbGVydE1vZHVsZX0gZnJvbSAnLi4vYWxlcnQvcG9ydGFsLWFsZXJ0Lm1vZHVsZSc7XHJcbmltcG9ydCB7Rm9udEF3ZXNvbWVNb2R1bGV9IGZyb20gJ0Bmb3J0YXdlc29tZS9hbmd1bGFyLWZvbnRhd2Vzb21lJztcclxuaW1wb3J0IHtOZ0poaXBzdGVyTW9kdWxlfSBmcm9tICduZy1qaGlwc3Rlcic7XHJcbmltcG9ydCB7Rm9ybXNNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7ZW1wcmVzYVBvcHVwUm91dGUsIGVtcHJlc2FSb3V0ZX0gZnJvbSAnLi9lbXByZXNhLnJvdXRlJztcclxuaW1wb3J0IHtFbXByZXNhQ29tcG9uZW50fSBmcm9tICcuL2VtcHJlc2EuY29tcG9uZW50JztcclxuaW1wb3J0IHtFbXByZXNhRGV0YWlsQ29tcG9uZW50fSBmcm9tICcuL2VtcHJlc2EtZGV0YWlsLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7RW1wcmVzYVVwZGF0ZUNvbXBvbmVudH0gZnJvbSAnLi9lbXByZXNhLXVwZGF0ZS5jb21wb25lbnQnO1xyXG5pbXBvcnQge0VtcHJlc2FEZWxldGVEaWFsb2dDb21wb25lbnQsIEVtcHJlc2FEZWxldGVQb3B1cENvbXBvbmVudH0gZnJvbSAnLi9lbXByZXNhLWRlbGV0ZS1kaWFsb2cuY29tcG9uZW50JztcclxuXHJcbmNvbnN0IEVOVElUWV9TVEFURVMgPSBbLi4uZW1wcmVzYVJvdXRlLCAuLi5lbXByZXNhUG9wdXBSb3V0ZV07XHJcblxyXG5ATmdNb2R1bGUoe1xyXG4gICAgaW1wb3J0czogW1xyXG4gICAgICBDb21tb25Nb2R1bGUsXHJcbiAgICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgICBOZ0poaXBzdGVyTW9kdWxlLFxyXG4gICAgICBGb250QXdlc29tZU1vZHVsZSxcclxuICAgICAgUG9ydGFsQWxlcnRNb2R1bGUsXHJcbiAgICAgIFJvdXRlck1vZHVsZS5mb3JDaGlsZChFTlRJVFlfU1RBVEVTKVxyXG4gICAgXSxcclxuICAgIGRlY2xhcmF0aW9uczogW1xyXG4gICAgICAgIEVtcHJlc2FDb21wb25lbnQsXHJcbiAgICAgICAgRW1wcmVzYURldGFpbENvbXBvbmVudCxcclxuICAgICAgICBFbXByZXNhVXBkYXRlQ29tcG9uZW50LFxyXG4gICAgICAgIEVtcHJlc2FEZWxldGVEaWFsb2dDb21wb25lbnQsXHJcbiAgICAgICAgRW1wcmVzYURlbGV0ZVBvcHVwQ29tcG9uZW50XHJcbiAgICBdLFxyXG4gICAgZW50cnlDb21wb25lbnRzOiBbXHJcbiAgICAgIEVtcHJlc2FDb21wb25lbnQsXHJcbiAgICAgIEVtcHJlc2FVcGRhdGVDb21wb25lbnQsXHJcbiAgICAgIEVtcHJlc2FEZWxldGVEaWFsb2dDb21wb25lbnQsXHJcbiAgICAgIEVtcHJlc2FEZWxldGVQb3B1cENvbXBvbmVudFxyXG4gICAgXSxcclxuICAgIHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRW1wcmVzYU1vZHVsZSB7fVxyXG4iLCJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge05nYlBhZ2luYXRpb25Db25maWd9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHtJVEVNU19QRVJfUEFHRX0gZnJvbSAnLi4vdXRpbC9wYWdpbmF0aW9uLmNvbnN0YW50cyc7XHJcblxyXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxyXG5leHBvcnQgY2xhc3MgUGFnaW5hdGlvbkNvbmZpZyB7XHJcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLXVudXNlZC12YXJpYWJsZVxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBjb25maWc6IE5nYlBhZ2luYXRpb25Db25maWcpIHtcclxuICAgICAgICBjb25maWcuYm91bmRhcnlMaW5rcyA9IHRydWU7XHJcbiAgICAgICAgY29uZmlnLm1heFNpemUgPSA1O1xyXG4gICAgICAgIGNvbmZpZy5wYWdlU2l6ZSA9IElURU1TX1BFUl9QQUdFO1xyXG4gICAgICAgIGNvbmZpZy5zaXplID0gJ3NtJztcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge2VuYWJsZVByb2RNb2RlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBQcm9kQ29uZmlnKGRlYnVnOiBib29sZWFuKSB7XHJcbiAgICBpZiAoIWRlYnVnKSB7XHJcbiAgICAgICAgZW5hYmxlUHJvZE1vZGUoKTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge0NvbXBvbmVudH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7TmdiQWN0aXZlTW9kYWx9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHtKaGlFdmVudE1hbmFnZXJ9IGZyb20gJ25nLWpoaXBzdGVyJztcclxuaW1wb3J0IHtVc2VyfSBmcm9tICcuLi9tb2RlbC91c2VyLm1vZGVsJztcclxuaW1wb3J0IHtVc2VyU2VydmljZX0gZnJvbSAnLi91c2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQge0VSUl9VTkFVVEhPUklaRURfRURJVF9ERUxFVElPTn0gZnJvbSBcIi4uL3V0aWxcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdqaGktdXNlci1tZ210LWRlbGV0ZS1kaWFsb2cnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL3VzZXItbWFuYWdlbWVudC1kZWxldGUtZGlhbG9nLmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgVXNlck1nbXREZWxldGVEaWFsb2dDb21wb25lbnQge1xyXG4gICAgdXNlcjogVXNlcjtcclxuICAgIGVycm9yOiBzdHJpbmc7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgIHByaXZhdGUgdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlLFxyXG4gICAgICBwdWJsaWMgYWN0aXZlTW9kYWw6IE5nYkFjdGl2ZU1vZGFsLFxyXG4gICAgICBwcml2YXRlIGV2ZW50TWFuYWdlcjogSmhpRXZlbnRNYW5hZ2VyXHJcbiAgICApIHt9XHJcblxyXG4gICAgY2xlYXIoKSB7XHJcbiAgICAgICAgdGhpcy5hY3RpdmVNb2RhbC5kaXNtaXNzKCdjYW5jZWwnKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25maXJtRGVsZXRlKGxvZ2luKSB7XHJcbiAgICAgICAgdGhpcy51c2VyU2VydmljZS5kZWxldGUobG9naW4pLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5ldmVudE1hbmFnZXIuYnJvYWRjYXN0KHtcclxuICAgICAgICAgICAgICAgICAgbmFtZTogJ3VzZXJMaXN0TW9kaWZpY2F0aW9uJyxcclxuICAgICAgICAgICAgICAgICAgY29udGVudDogJ0RlbGV0ZWQgYSB1c2VyJ1xyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIHRoaXMuYWN0aXZlTW9kYWwuZGlzbWlzcyh0cnVlKTtcclxuICAgICAgICAgICAgICB0aGlzLmVycm9yID0gbnVsbDtcclxuICAgICAgICB9LHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MDAgJiYgcmVzcG9uc2UuZXJyb3IudHlwZSA9PT0gRVJSX1VOQVVUSE9SSVpFRF9FRElUX0RFTEVUSU9OKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSAnRVJST1InO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge0NvbXBvbmVudCwgT25Jbml0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHtVc2VyfSBmcm9tICcuLi9tb2RlbC91c2VyLm1vZGVsJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdqaGktdXNlci1tZ210LWRldGFpbCcsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vdXNlci1tYW5hZ2VtZW50LWRldGFpbC5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFVzZXJNZ210RGV0YWlsQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICAgIHVzZXI6IFVzZXI7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUpIHt9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5yb3V0ZS5kYXRhLnN1YnNjcmliZSgoeyB1c2VyIH0pID0+IHtcclxuICAgICAgICAgICAgdGhpcy51c2VyID0gdXNlci5ib2R5ID8gdXNlci5ib2R5IDogdXNlcjtcclxuXHJcbiAgICAgICAgICAgIGlmKEFycmF5LmlzQXJyYXkodGhpcy51c2VyKSkge1xyXG4gICAgICAgICAgICAgIHRoaXMudXNlciA9IHRoaXMudXNlclswXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7Q29tcG9uZW50LCBPbkluaXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlLCBSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7VXNlcn0gZnJvbSAnLi4vbW9kZWwvdXNlci5tb2RlbCc7XHJcbmltcG9ydCB7VXNlclNlcnZpY2V9IGZyb20gJy4vdXNlci5zZXJ2aWNlJztcclxuaW1wb3J0IHtKaGlMYW5ndWFnZUhlbHBlcn0gZnJvbSAnLi4vbGFuZ3VhZ2UvbGFuZ3VhZ2UuaGVscGVyJztcclxuaW1wb3J0IHtFUlJfVU5BVVRIT1JJWkVEX0VESVRfREVMRVRJT059IGZyb20gXCIuLi91dGlsXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnamhpLXVzZXItbWdtdC11cGRhdGUnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL3VzZXItbWFuYWdlbWVudC11cGRhdGUuY29tcG9uZW50Lmh0bWwnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBVc2VyTWdtdFVwZGF0ZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgICB1c2VyOiBVc2VyO1xyXG4gICAgbGFuZ3VhZ2VzOiBhbnlbXTtcclxuICAgIGF1dGhvcml0aWVzOiBhbnlbXTtcclxuICAgIGlzU2F2aW5nOiBib29sZWFuO1xyXG4gICAgZXJyb3I6IHN0cmluZztcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIGxhbmd1YWdlSGVscGVyOiBKaGlMYW5ndWFnZUhlbHBlcixcclxuICAgICAgICBwcml2YXRlIHVzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgICAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyXHJcbiAgICApIHt9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5pc1NhdmluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMucm91dGUuZGF0YS5zdWJzY3JpYmUoKHsgdXNlciB9KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMudXNlciA9IHVzZXIuYm9keSA/IHVzZXIuYm9keSA6IHVzZXI7XHJcblxyXG4gICAgICAgICAgICBpZihBcnJheS5pc0FycmF5KHRoaXMudXNlcikpIHtcclxuICAgICAgICAgICAgICB0aGlzLnVzZXIgPSB0aGlzLnVzZXJbMF07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmF1dGhvcml0aWVzID0gW107XHJcbiAgICAgICAgdGhpcy51c2VyU2VydmljZS5hdXRob3JpdGllcygpLnN1YnNjcmliZShhdXRob3JpdGllcyA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuYXV0aG9yaXRpZXMgPSBhdXRob3JpdGllcztcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmxhbmd1YWdlSGVscGVyLmdldEFsbCgpLnRoZW4obGFuZ3VhZ2VzID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sYW5ndWFnZXMgPSBsYW5ndWFnZXM7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJldmlvdXNTdGF0ZSgpIHtcclxuICAgICAgICB3aW5kb3cuaGlzdG9yeS5iYWNrKCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2F2ZSgpIHtcclxuICAgICAgICB0aGlzLmlzU2F2aW5nID0gdHJ1ZTtcclxuICAgICAgICBpZiAodGhpcy51c2VyLmlkICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMudXNlclNlcnZpY2UudXBkYXRlKHRoaXMudXNlcikuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHRoaXMub25TYXZlU3VjY2VzcyhyZXNwb25zZSksIHJlc3BvbnNlID0+IHRoaXMub25TYXZlRXJyb3IocmVzcG9uc2UpKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlLmNyZWF0ZSh0aGlzLnVzZXIpLnN1YnNjcmliZShyZXNwb25zZSA9PiB0aGlzLm9uU2F2ZVN1Y2Nlc3MocmVzcG9uc2UpLCByZXNwb25zZSA9PiB0aGlzLm9uU2F2ZUVycm9yKHJlc3BvbnNlKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgb25TYXZlU3VjY2VzcyhyZXN1bHQpIHtcclxuICAgICAgICB0aGlzLmlzU2F2aW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5wcmV2aW91c1N0YXRlKCk7XHJcbiAgICAgICAgdGhpcy5lcnJvciA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBvblNhdmVFcnJvcihyZXNwb25zZSkge1xyXG4gICAgICAgIHRoaXMuaXNTYXZpbmcgPSBmYWxzZTtcclxuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MDAgJiYgcmVzcG9uc2UuZXJyb3IudHlwZSA9PT0gRVJSX1VOQVVUSE9SSVpFRF9FRElUX0RFTEVUSU9OKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3IgPSAnRVJST1InO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge0NvbXBvbmVudCwgT25EZXN0cm95LCBPbkluaXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0h0dHBSZXNwb25zZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQge05nYk1vZGFsfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcblxyXG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlLCBSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7SmhpRXZlbnRNYW5hZ2VyLCBKaGlQYXJzZUxpbmtzfSBmcm9tICduZy1qaGlwc3Rlcic7XHJcblxyXG5pbXBvcnQge1VzZXJNZ210RGVsZXRlRGlhbG9nQ29tcG9uZW50fSBmcm9tICcuL3VzZXItbWFuYWdlbWVudC1kZWxldGUtZGlhbG9nLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7VXNlcn0gZnJvbSAnLi4vbW9kZWwvdXNlci5tb2RlbCc7XHJcbmltcG9ydCB7UG9ydGFsQWxlcnRTZXJ2aWNlfSBmcm9tICcuLi9hbGVydC9wb3J0YWwtYWxlcnQuc2VydmljZSc7XHJcbmltcG9ydCB7UHJpbmNpcGFsfSBmcm9tICcuLi9hdXRoL3ByaW5jaXBhbC5zZXJ2aWNlJztcclxuaW1wb3J0IHtVc2VyU2VydmljZX0gZnJvbSAnLi91c2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQge0lURU1TX1BFUl9QQUdFfSBmcm9tICcuLi91dGlsL3BhZ2luYXRpb24uY29uc3RhbnRzJztcclxuaW1wb3J0IHtVdGlsRnVuY3Rpb25zfSBmcm9tICcuLi91dGlsJztcclxuaW1wb3J0IHtHbG9iYWxTZXJ2aWNlfSBmcm9tICcuLi9jb21wb25lbnRzL3BhcmFtZXRyb3MvZ2xvYmFsLnNlcnZpY2UnO1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnamhpLXVzZXItbWdtdCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3VzZXItbWFuYWdlbWVudC5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFVzZXJNZ210Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIGN1cnJlbnRBY2NvdW50OiBhbnk7XHJcbiAgdXNlcnM6IFVzZXJbXTtcclxuICBlcnJvcjogYW55O1xyXG4gIHN1Y2Nlc3M6IGFueTtcclxuICByb3V0ZURhdGE6IGFueTtcclxuICBsaW5rczogYW55O1xyXG4gIHRvdGFsSXRlbXM6IGFueTtcclxuICBxdWVyeUNvdW50OiBhbnk7XHJcbiAgaXRlbXNQZXJQYWdlOiBhbnk7XHJcbiAgcGFnZTogYW55O1xyXG4gIHByZWRpY2F0ZTogYW55O1xyXG4gIHByZXZpb3VzUGFnZTogYW55O1xyXG4gIHJldmVyc2U6IGFueTtcclxuICBmaWx0ZXJVc2Vyczogc3RyaW5nO1xyXG4gIHNob3dGaWx0ZXJVc2VyID0gZmFsc2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSB1c2VyU2VydmljZTogVXNlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogUG9ydGFsQWxlcnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBwcmluY2lwYWw6IFByaW5jaXBhbCxcclxuICAgIHByaXZhdGUgcGFyc2VMaW5rczogSmhpUGFyc2VMaW5rcyxcclxuICAgIHByaXZhdGUgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgIHByaXZhdGUgZ2xvYmFsOiBHbG9iYWxTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBldmVudE1hbmFnZXI6IEpoaUV2ZW50TWFuYWdlcixcclxuICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBOZ2JNb2RhbFxyXG4gICkge1xyXG4gICAgdGhpcy5pdGVtc1BlclBhZ2UgPSBJVEVNU19QRVJfUEFHRTtcclxuICAgIHRoaXMucm91dGVEYXRhID0gdGhpcy5hY3RpdmF0ZWRSb3V0ZS5kYXRhLnN1YnNjcmliZShkYXRhID0+IHtcclxuICAgICAgdGhpcy5wYWdlID0gZGF0YVsncGFnaW5nUGFyYW1zJ10ucGFnZTtcclxuICAgICAgdGhpcy5wcmV2aW91c1BhZ2UgPSBkYXRhWydwYWdpbmdQYXJhbXMnXS5wYWdlO1xyXG4gICAgICB0aGlzLnJldmVyc2UgPSBkYXRhWydwYWdpbmdQYXJhbXMnXS5hc2NlbmRpbmc7XHJcbiAgICAgIHRoaXMucHJlZGljYXRlID0gZGF0YVsncGFnaW5nUGFyYW1zJ10ucHJlZGljYXRlO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMucHJpbmNpcGFsLmlkZW50aXR5KCkudGhlbihhY2NvdW50ID0+IHtcclxuICAgICAgdGhpcy5jdXJyZW50QWNjb3VudCA9IGFjY291bnQ7XHJcbiAgICAgIHRoaXMubG9hZEFsbCgpO1xyXG4gICAgICB0aGlzLnJlZ2lzdGVyQ2hhbmdlSW5Vc2VycygpO1xyXG4gICAgICBpZiAodGhpcy5nbG9iYWwucGFyYW1ldHJvcyA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgdGhpcy5nbG9iYWxcclxuICAgICAgICAgIC5pbml0KClcclxuICAgICAgICAgIC50aGVuKHZhbHVlID0+IHtcclxuICAgICAgICAgICAgaWYgKFV0aWxGdW5jdGlvbnMuaXNWYWxpZE9iamVjdCh0aGlzLmdsb2JhbC5wYXJhbWV0cm9zWydNT1NUUkFSX0ZJTFRST19VU1VBUklPUyddKSA9PSB0cnVlKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zaG93RmlsdGVyVXNlciA9IHRoaXMuZ2xvYmFsLnBhcmFtZXRyb3NbJ01PU1RSQVJfRklMVFJPX1VTVUFSSU9TJ10udmFsb3I7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICAuY2F0Y2godmFsdWUgPT4ge1xyXG5cclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmIChVdGlsRnVuY3Rpb25zLmlzVmFsaWRPYmplY3QodGhpcy5nbG9iYWwucGFyYW1ldHJvc1snTU9TVFJBUl9GSUxUUk9fVVNVQVJJT1MnXSkgPT0gdHJ1ZSkge1xyXG4gICAgICAgICAgdGhpcy5zaG93RmlsdGVyVXNlciA9IHRoaXMuZ2xvYmFsLnBhcmFtZXRyb3NbJ01PU1RSQVJfRklMVFJPX1VTVUFSSU9TJ10udmFsb3I7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMucm91dGVEYXRhLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICByZWdpc3RlckNoYW5nZUluVXNlcnMoKSB7XHJcbiAgICB0aGlzLmV2ZW50TWFuYWdlci5zdWJzY3JpYmUoJ3VzZXJMaXN0TW9kaWZpY2F0aW9uJywgcmVzcG9uc2UgPT4gdGhpcy5sb2FkQWxsKCkpO1xyXG4gIH1cclxuXHJcbiAgc2V0QWN0aXZlKHVzZXIsIGlzQWN0aXZhdGVkKSB7XHJcbiAgICB1c2VyLmFjdGl2YXRlZCA9IGlzQWN0aXZhdGVkO1xyXG5cclxuICAgIHRoaXMudXNlclNlcnZpY2UudXBkYXRlKHVzZXIpLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XHJcbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDIwMCkge1xyXG4gICAgICAgIHRoaXMuZXJyb3IgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuc3VjY2VzcyA9ICdPSyc7XHJcbiAgICAgICAgdGhpcy5sb2FkQWxsKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zdWNjZXNzID0gbnVsbDtcclxuICAgICAgICB0aGlzLmVycm9yID0gJ0VSUk9SJztcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBsb2FkQWxsKHBhZ2U/OiBudW1iZXIpIHtcclxuICAgIGlmIChVdGlsRnVuY3Rpb25zLmlzVmFsaWRPYmplY3QocGFnZSkgPT09IHRydWUgJiYgcGFnZSA+IDApIHtcclxuICAgICAgdGhpcy5wYWdlID0gcGFnZTtcclxuICAgICAgdGhpcy5wcmV2aW91c1BhZ2UgPSBwYWdlO1xyXG4gICAgfVxyXG4gICAgdGhpcy51c2VyU2VydmljZVxyXG4gICAgICAucXVlcnkoe1xyXG4gICAgICAgIHBhZ2U6IHRoaXMucGFnZSAtIDEsXHJcbiAgICAgICAgc2l6ZTogdGhpcy5pdGVtc1BlclBhZ2UsXHJcbiAgICAgICAgc29ydDogdGhpcy5zb3J0KClcclxuICAgICAgfSwgdGhpcy5maWx0ZXJVc2VycylcclxuICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAocmVzOiBIdHRwUmVzcG9uc2U8VXNlcltdPikgPT4gdGhpcy5vblN1Y2Nlc3MocmVzLmJvZHksIHJlcy5oZWFkZXJzKSxcclxuICAgICAgICAocmVzOiBIdHRwUmVzcG9uc2U8YW55PikgPT4gdGhpcy5vbkVycm9yKHJlcy5ib2R5KVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgdHJhY2tJZGVudGl0eShpbmRleCwgaXRlbTogVXNlcikge1xyXG4gICAgcmV0dXJuIGl0ZW0uaWQ7XHJcbiAgfVxyXG5cclxuICBzb3J0KCkge1xyXG4gICAgY29uc3QgcmVzdWx0ID0gW3RoaXMucHJlZGljYXRlICsgJywnICsgKHRoaXMucmV2ZXJzZSA/ICdhc2MnIDogJ2Rlc2MnKV07XHJcbiAgICBpZiAodGhpcy5wcmVkaWNhdGUgIT09ICdpZCcpIHtcclxuICAgICAgcmVzdWx0LnB1c2goJ2lkJyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgbG9hZFBhZ2UocGFnZTogbnVtYmVyKSB7XHJcbiAgICBpZiAocGFnZSAhPT0gdGhpcy5wcmV2aW91c1BhZ2UpIHtcclxuICAgICAgdGhpcy5wcmV2aW91c1BhZ2UgPSBwYWdlO1xyXG4gICAgICB0aGlzLnRyYW5zaXRpb24oKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHRyYW5zaXRpb24oKSB7XHJcbiAgICAvKlxyXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvYWRtaW4vdXNlci1tYW5hZ2VtZW50J10sIHtcclxuICAgICAgcXVlcnlQYXJhbXM6IHtcclxuICAgICAgICBwYWdlOiB0aGlzLnBhZ2UsXHJcbiAgICAgICAgc2l6ZTogdGhpcy5pdGVtc1BlclBhZ2UsXHJcbiAgICAgICAgc29ydDogdGhpcy5wcmVkaWNhdGUgKyAnLCcgKyAodGhpcy5yZXZlcnNlID8gJ2FzYycgOiAnZGVzYycpXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgKi9cclxuICAgIHRoaXMubG9hZEFsbCgpO1xyXG4gIH1cclxuXHJcbiAgZGVsZXRlVXNlcih1c2VyOiBVc2VyKSB7XHJcbiAgICBjb25zdCBtb2RhbFJlZiA9IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oVXNlck1nbXREZWxldGVEaWFsb2dDb21wb25lbnQsIHtzaXplOiAnbGcnLCBiYWNrZHJvcDogJ3N0YXRpYyd9KTtcclxuICAgIG1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLnVzZXIgPSB1c2VyO1xyXG4gICAgbW9kYWxSZWYucmVzdWx0LnRoZW4oXHJcbiAgICAgIHJlc3VsdCA9PiB7XHJcbiAgICAgICAgLy8gTGVmdCBibGFuayBpbnRlbnRpb25hbGx5LCBub3RoaW5nIHRvIGRvIGhlcmVcclxuICAgICAgfSxcclxuICAgICAgcmVhc29uID0+IHtcclxuICAgICAgICAvLyBMZWZ0IGJsYW5rIGludGVudGlvbmFsbHksIG5vdGhpbmcgdG8gZG8gaGVyZVxyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvblN1Y2Nlc3MoZGF0YSwgaGVhZGVycykge1xyXG4gICAgdGhpcy5saW5rcyA9IHRoaXMucGFyc2VMaW5rcy5wYXJzZShoZWFkZXJzLmdldCgnbGluaycpKTtcclxuICAgIHRoaXMudG90YWxJdGVtcyA9IHBhcnNlSW50KGhlYWRlcnMuZ2V0KCdYLVRvdGFsLUNvdW50JyksIDEwKTtcclxuICAgIHRoaXMucXVlcnlDb3VudCA9IHRoaXMudG90YWxJdGVtcztcclxuICAgIHRoaXMudXNlcnMgPSBkYXRhO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvbkVycm9yKGVycm9yKSB7XHJcbiAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihlcnJvci5lcnJvciwgZXJyb3IubWVzc2FnZSwgbnVsbCk7XHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7QWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgUmVzb2x2ZSwgUm91dGVyU3RhdGVTbmFwc2hvdCwgUm91dGVzfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQge0poaVJlc29sdmVQYWdpbmdQYXJhbXN9IGZyb20gJ25nLWpoaXBzdGVyJztcclxuaW1wb3J0IHtVc2VyTWdtdENvbXBvbmVudH0gZnJvbSAnLi91c2VyLW1hbmFnZW1lbnQuY29tcG9uZW50JztcclxuaW1wb3J0IHtVc2VyTWdtdERldGFpbENvbXBvbmVudH0gZnJvbSAnLi91c2VyLW1hbmFnZW1lbnQtZGV0YWlsLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7VXNlck1nbXRVcGRhdGVDb21wb25lbnR9IGZyb20gJy4vdXNlci1tYW5hZ2VtZW50LXVwZGF0ZS5jb21wb25lbnQnO1xyXG5pbXBvcnQge1VzZXJSb3V0ZUFjY2Vzc1NlcnZpY2V9IGZyb20gJy4uL2F1dGgvdXNlci1yb3V0ZS1hY2Nlc3Mtc2VydmljZSc7XHJcbmltcG9ydCB7VXNlclNlcnZpY2V9IGZyb20gJy4vdXNlci5zZXJ2aWNlJztcclxuaW1wb3J0IHtVc2VyfSBmcm9tICcuLi9tb2RlbC91c2VyLm1vZGVsJztcclxuXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXHJcbmV4cG9ydCBjbGFzcyBVc2VyTWdtdFJlc29sdmUgaW1wbGVtZW50cyBSZXNvbHZlPGFueT4ge1xyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBzZXJ2aWNlOiBVc2VyU2VydmljZSkge31cclxuXHJcbiAgICByZXNvbHZlKHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBzdGF0ZTogUm91dGVyU3RhdGVTbmFwc2hvdCkge1xyXG4gICAgICAgIGNvbnN0IGlkID0gcm91dGUucGFyYW1zWydsb2dpbiddID8gcm91dGUucGFyYW1zWydsb2dpbiddIDogbnVsbDtcclxuICAgICAgICBpZiAoaWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2VydmljZS5maW5kKGlkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG5ldyBVc2VyKCk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCB1c2VyTWdtdFJvdXRlOiBSb3V0ZXMgPSBbXHJcbiAgICB7XHJcbiAgICAgICAgcGF0aDogJ3VzZXItbWFuYWdlbWVudCcsXHJcbiAgICAgICAgY29tcG9uZW50OiBVc2VyTWdtdENvbXBvbmVudCxcclxuICAgICAgICByZXNvbHZlOiB7XHJcbiAgICAgICAgICAgIHBhZ2luZ1BhcmFtczogSmhpUmVzb2x2ZVBhZ2luZ1BhcmFtc1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICBwYWdlVGl0bGU6ICdVc3XDg8KhcmlvcycsXHJcbiAgICAgICAgICAgIGF1dGhvcml0aWVzOiBbJ1JPTEVfQURNSU4nLCAnUk9MRV9BRE1JTl9DTElFTlRFJ10sXHJcbiAgICAgICAgICAgIGRlZmF1bHRTb3J0OiAnaWQsYXNjJ1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY2FuQWN0aXZhdGU6IFtVc2VyUm91dGVBY2Nlc3NTZXJ2aWNlXVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBwYXRoOiAndXNlci1tYW5hZ2VtZW50Lzpsb2dpbi92aWV3JyxcclxuICAgICAgICBjb21wb25lbnQ6IFVzZXJNZ210RGV0YWlsQ29tcG9uZW50LFxyXG4gICAgICAgIHJlc29sdmU6IHtcclxuICAgICAgICAgICAgdXNlcjogVXNlck1nbXRSZXNvbHZlXHJcbiAgICAgICAgfSxcclxuICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgIGF1dGhvcml0aWVzOiBbJ1JPTEVfQURNSU4nLCAnUk9MRV9BRE1JTl9DTElFTlRFJ10sXHJcbiAgICAgICAgICAgIHBhZ2VUaXRsZTogJ1VzdcODwqFyaW9zJ1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY2FuQWN0aXZhdGU6IFtVc2VyUm91dGVBY2Nlc3NTZXJ2aWNlXVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICBwYXRoOiAndXNlci1tYW5hZ2VtZW50L25ldycsXHJcbiAgICAgICAgY29tcG9uZW50OiBVc2VyTWdtdFVwZGF0ZUNvbXBvbmVudCxcclxuICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgIGF1dGhvcml0aWVzOiBbJ1JPTEVfQURNSU4nLCAnUk9MRV9BRE1JTl9DTElFTlRFJ11cclxuICAgICAgICB9LFxyXG4gICAgICAgIHJlc29sdmU6IHtcclxuICAgICAgICAgICAgdXNlcjogVXNlck1nbXRSZXNvbHZlXHJcbiAgICAgICAgfSxcclxuICAgICAgICBjYW5BY3RpdmF0ZTogW1VzZXJSb3V0ZUFjY2Vzc1NlcnZpY2VdXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIHBhdGg6ICd1c2VyLW1hbmFnZW1lbnQvOmxvZ2luL2VkaXQnLFxyXG4gICAgICAgIGNvbXBvbmVudDogVXNlck1nbXRVcGRhdGVDb21wb25lbnQsXHJcbiAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICBhdXRob3JpdGllczogWydST0xFX0FETUlOJywgJ1JPTEVfQURNSU5fQ0xJRU5URSddXHJcbiAgICAgICAgfSxcclxuICAgICAgICByZXNvbHZlOiB7XHJcbiAgICAgICAgICAgIHVzZXI6IFVzZXJNZ210UmVzb2x2ZVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY2FuQWN0aXZhdGU6IFtVc2VyUm91dGVBY2Nlc3NTZXJ2aWNlXVxyXG4gICAgfVxyXG5dO1xyXG4iLCJpbXBvcnQge1BpcGUsIFBpcGVUcmFuc2Zvcm19IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0VuZGVyZWNvfSBmcm9tICcuLi9tb2RlbC9lbmRlcmVjby5tb2RlbCc7XHJcbmltcG9ydCB7VGlwb0VuZGVyZWNvfSBmcm9tICcuLi9tb2RlbCc7XHJcblxyXG5AUGlwZSh7IG5hbWU6ICdlbmRlcmVjb1ByaW5jaXBhbEZvcm1hdGFkbycgfSlcclxuZXhwb3J0IGNsYXNzIEVuZGVyZWNvUHJpbmNpcGFsRm9ybWF0YWRvUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xyXG5cclxuICAgIHRyYW5zZm9ybShlbmRlcmVjb3M6IEVuZGVyZWNvW10pOiBzdHJpbmcge1xyXG4gICAgICAgIGlmICghZW5kZXJlY29zKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnJztcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcHJpbmNpcGFsID0gZW5kZXJlY29zXHJcbiAgICAgICAgICAgIC5maWx0ZXIoZSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZS50aXBvID09PSBUaXBvRW5kZXJlY28uUFJJTkNJUEFMO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAucG9wKCk7XHJcblxyXG4gICAgICAgIGlmICghcHJpbmNpcGFsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnJztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHRpcG9Mb2dyYWRvdXJvID0gcHJpbmNpcGFsLnRpcG9Mb2dyYWRvdXJvICYmIHByaW5jaXBhbC50aXBvTG9ncmFkb3Vyby5kZXNjcmljYW8gPyBwcmluY2lwYWwudGlwb0xvZ3JhZG91cm8uZGVzY3JpY2FvICsgJyAnIDogJyc7XHJcbiAgICAgICAgY29uc3QgdGl0dWxvTG9ncmFkb3VybyA9IHByaW5jaXBhbC50aXR1bG9Mb2dyYWRvdXJvICYmIHByaW5jaXBhbC50aXR1bG9Mb2dyYWRvdXJvLnNpZ2xhID8gcHJpbmNpcGFsLnRpdHVsb0xvZ3JhZG91cm8uc2lnbGEgKyAnICcgOiAnJztcclxuICAgICAgICBjb25zdCBsb2dyYWRvdXJvID0gcHJpbmNpcGFsLmxvZ3JhZG91cm8gPyBwcmluY2lwYWwubG9ncmFkb3VybyArICcsICcgOiAnJztcclxuICAgICAgICBjb25zdCBudW1lcm8gPSBwcmluY2lwYWwubnVtZXJvID8gcHJpbmNpcGFsLm51bWVybyArICcsICcgOiAnJztcclxuICAgICAgICBjb25zdCBjb21wbGVtZW50byA9IHByaW5jaXBhbC5jb21wbGVtZW50byA/IHByaW5jaXBhbC5jb21wbGVtZW50byArICcsICcgOiAnJztcclxuICAgICAgICBjb25zdCBiYWlycm8gPSBwcmluY2lwYWwuYmFpcnJvID8gcHJpbmNpcGFsLmJhaXJybyArICcsICcgOiAnJztcclxuICAgICAgICBjb25zdCBtdW5pY2lwaW8gPSBwcmluY2lwYWwubXVuaWNpcGlvICYmIHByaW5jaXBhbC5tdW5pY2lwaW8uZGVzY3JpY2FvID8gcHJpbmNpcGFsLm11bmljaXBpby5kZXNjcmljYW8gKyAnLScgOiAnJztcclxuICAgICAgICBjb25zdCBlc3RhZG8gPSBwcmluY2lwYWwubXVuaWNpcGlvICYmIHByaW5jaXBhbC5tdW5pY2lwaW8uZXN0YWRvID8gcHJpbmNpcGFsLm11bmljaXBpby5lc3RhZG8gOiAnJztcclxuICAgICAgICBjb25zdCBlbmRlcmVjbyA9IHRpcG9Mb2dyYWRvdXJvICsgdGl0dWxvTG9ncmFkb3VybyArIGxvZ3JhZG91cm8gKyBudW1lcm8gKyBjb21wbGVtZW50byArIGJhaXJybyArIG11bmljaXBpbyArIGVzdGFkbztcclxuXHJcbiAgICAgICAgcmV0dXJuIGVuZGVyZWNvXHJcbiAgICAgICAgICAgIC50cmltKClcclxuICAgICAgICAgICAgLnJlcGxhY2UoLygsJCkvZywgJycpXHJcbiAgICAgICAgICAgIC5yZXBsYWNlKC8oLSQpL2csICcnKTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge1xyXG4gIEVudW1QaXBlVHlwZSxcclxuICBTZXhvLFxyXG4gIFNpdHVhY2FvQ29udHJpYnVpbnRlLFxyXG4gIFNpdHVhY2FvRGl2aWRhRGViaXRvLFxyXG4gIFNpdHVhY2FvUGFnYW1lbnRvRGViaXRvLFxyXG4gIFNpdHVhY2FvUGFnYW1lbnRvUGFyY2VsYSxcclxuICBUaXBvRW5kZXJlY28sXHJcbiAgVGlwb0ltb3ZlbCxcclxuICBUaXBvUGVzc29hLFxyXG4gIFRpcG9SZXNwb25zYXZlbFxyXG59IGZyb20gJy4uL21vZGVsJztcclxuaW1wb3J0IHtQaXBlLCBQaXBlVHJhbnNmb3JtfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbkBQaXBlKHtuYW1lOiAnZW51bVRvU3RyaW5nJ30pXHJcbmV4cG9ydCBjbGFzcyBFbnVtVG9TdHJpbmdQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XHJcbiAgdHJhbnNmb3JtKHZhbHVlOiBhbnksIHR5cGU6IEVudW1QaXBlVHlwZSk6IHN0cmluZyB7XHJcblxyXG4gICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgIGNhc2UgRW51bVBpcGVUeXBlLlNJVFVBQ0FPX0RJVklEQV9ERUJJVE86XHJcbiAgICAgICAgcmV0dXJuIFNpdHVhY2FvRGl2aWRhRGViaXRvTmFtZXNwYWNlLnRvU3RyaW5nKHZhbHVlKTtcclxuICAgICBjYXNlIEVudW1QaXBlVHlwZS5TSVRVQUNBT19QQUdBTUVOVE9fREVCSVRPOlxyXG4gICAgICAgIHJldHVybiBTaXR1YWNhb1BhZ2FtZW50b0RlYml0b05hbWVzcGFjZS50b1N0cmluZyh2YWx1ZSk7XHJcbiAgICAgIGNhc2UgRW51bVBpcGVUeXBlLlNJVFVBQ0FPX1BBR0FNRU5UT19QQVJDRUxBOlxyXG4gICAgICAgIHJldHVybiBTaXR1YWNhb1BhZ2FtZW50b1BhcmNlbGFOYW1lc3BhY2UudG9TdHJpbmcodmFsdWUpO1xyXG4gICAgICBjYXNlIEVudW1QaXBlVHlwZS5USVBPX1BFU1NPQTpcclxuICAgICAgICByZXR1cm4gVGlwb1Blc3NvYU5hbWVzcGFjZS50b1N0cmluZyh2YWx1ZSk7XHJcbiAgICAgIGNhc2UgRW51bVBpcGVUeXBlLlNJVFVBQ0FPX0NPTlRSSUJVSU5URTpcclxuICAgICAgICByZXR1cm4gU2l0dWFjYW9Db250cmlidWludGVOYW1lc3BhY2UudG9TdHJpbmcodmFsdWUpO1xyXG4gICAgICBjYXNlIEVudW1QaXBlVHlwZS5TRVhPOlxyXG4gICAgICAgIHJldHVybiBTZXhvTmFtZXNwYWNlLnRvU3RyaW5nKHZhbHVlKTtcclxuICAgICAgY2FzZSBFbnVtUGlwZVR5cGUuVElQT19FTkRFUkVDTzpcclxuICAgICAgICByZXR1cm4gVGlwb0VuZGVyZWNvTmFtZXNwYWNlLnRvU3RyaW5nKHZhbHVlKTtcclxuICAgICAgY2FzZSBFbnVtUGlwZVR5cGUuVElQT19SRVNQT05TQVZFTDpcclxuICAgICAgICByZXR1cm4gVGlwb1Jlc3BvbnNhdmVsTmFtZXNwYWNlLnRvU3RyaW5nKHZhbHVlKTtcclxuICAgICAgY2FzZSBFbnVtUGlwZVR5cGUuVElQT19JTU9WRUw6XHJcbiAgICAgICAgcmV0dXJuIFRpcG9JbW92ZWxOYW1lc3BhY2UudG9TdHJpbmcodmFsdWUpO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbm5hbWVzcGFjZSBTaXR1YWNhb0RpdmlkYURlYml0b05hbWVzcGFjZSB7XHJcbiAgZXhwb3J0IGZ1bmN0aW9uIHRvU3RyaW5nKHZhbHVlOiBTaXR1YWNhb0RpdmlkYURlYml0byk6IHN0cmluZyB7XHJcbiAgICBpZiAodmFsdWUgPT09IFNpdHVhY2FvRGl2aWRhRGViaXRvLkRJVklEQV9DT1JSRU5URSkge1xyXG4gICAgICByZXR1cm4gJ0TDg8KtdmlkYSBDb3JyZW50ZSc7XHJcbiAgICB9IGVsc2UgaWYgKHZhbHVlID09PSBTaXR1YWNhb0RpdmlkYURlYml0by5ESVZJREFfQUpVSVpBREEpIHtcclxuICAgICAgcmV0dXJuICdEw4PCrXZpZGEgQWp1aXphZGEnO1xyXG4gICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gU2l0dWFjYW9EaXZpZGFEZWJpdG8uRElWSURBX0FUSVZBKSB7XHJcbiAgICAgIHJldHVybiAnRMODwq12aWRhIEF0aXZhJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbm5hbWVzcGFjZSBTaXR1YWNhb1BhZ2FtZW50b0RlYml0b05hbWVzcGFjZSB7XHJcbiAgZXhwb3J0IGZ1bmN0aW9uIHRvU3RyaW5nKHZhbHVlOiBTaXR1YWNhb1BhZ2FtZW50b0RlYml0byk6IHN0cmluZyB7XHJcbiAgICBpZiAodmFsdWUgPT09IFNpdHVhY2FvUGFnYW1lbnRvRGViaXRvLkFCRVJUTykge1xyXG4gICAgICByZXR1cm4gJ0FiZXJ0byc7XHJcbiAgICB9IGVsc2UgaWYgKHZhbHVlID09PSBTaXR1YWNhb1BhZ2FtZW50b0RlYml0by5QQUdPKSB7XHJcbiAgICAgIHJldHVybiAnUGFnbyc7XHJcbiAgICB9IGVsc2UgaWYgKHZhbHVlID09PSBTaXR1YWNhb1BhZ2FtZW50b0RlYml0by5QUk9URVNUQURPKSB7XHJcbiAgICAgIHJldHVybiAnUHJvdGVzdGFkbyc7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5uYW1lc3BhY2UgU2l0dWFjYW9QYWdhbWVudG9QYXJjZWxhTmFtZXNwYWNlIHtcclxuICBleHBvcnQgZnVuY3Rpb24gdG9TdHJpbmcodmFsdWU6IFNpdHVhY2FvUGFnYW1lbnRvUGFyY2VsYSk6IHN0cmluZyB7XHJcbiAgICBpZiAodmFsdWUgPT09IFNpdHVhY2FvUGFnYW1lbnRvUGFyY2VsYS5BQkVSVE8pIHtcclxuICAgICAgcmV0dXJuICdBYmVydG8nO1xyXG4gICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gU2l0dWFjYW9QYWdhbWVudG9QYXJjZWxhLlBBR08pIHtcclxuICAgICAgcmV0dXJuICdQYWdvJztcclxuICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IFNpdHVhY2FvUGFnYW1lbnRvUGFyY2VsYS5FTV9ESVZJREFfQVRJVkEpIHtcclxuICAgICAgcmV0dXJuICdFbSBEw4PCrXZpZGEgQXRpdmEnO1xyXG4gICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gU2l0dWFjYW9QYWdhbWVudG9QYXJjZWxhLkVNX0VYRUNVQ0FPX0ZJU0NBTCkge1xyXG4gICAgICByZXR1cm4gJ0VtIEV4ZWN1w4PCp8ODwqNvIEZpc2NhbCc7XHJcbiAgICB9IGVsc2UgaWYgKHZhbHVlID09PSBTaXR1YWNhb1BhZ2FtZW50b1BhcmNlbGEuQ0FOQ0VMQURPKSB7XHJcbiAgICAgIHJldHVybiAnQ2FuY2VsYWRvJztcclxuICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IFNpdHVhY2FvUGFnYW1lbnRvUGFyY2VsYS5BR1JVUEFET19FTV9QQVJDRUxBTUVOVE8pIHtcclxuICAgICAgcmV0dXJuICdFbSBQYXJjZWxhbWVudG8nO1xyXG4gICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gU2l0dWFjYW9QYWdhbWVudG9QYXJjZWxhLlBST1RFU1RBRE8pIHtcclxuICAgICAgcmV0dXJuICdQcm90ZXN0YWRvJztcclxuICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IFNpdHVhY2FvUGFnYW1lbnRvUGFyY2VsYS5FWENMVUlETykge1xyXG4gICAgICByZXR1cm4gJ0V4Y2x1w4PCrWRvJztcclxuICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IFNpdHVhY2FvUGFnYW1lbnRvUGFyY2VsYS5JTVVORV9JU0VOVE8pIHtcclxuICAgICAgcmV0dXJuICdJbXVuZS9Jc2VudG8nO1xyXG4gICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gU2l0dWFjYW9QYWdhbWVudG9QYXJjZWxhLkRJRkVSRU5DQV9ERV9WQUxPUl9DQU5DRUxBRE9fUEFSQ0lBTE1FTlRFKSB7XHJcbiAgICAgIHJldHVybiAnRGlmZXJlbsODwqdhIGRlIFZhbG9yIENhbmNlbGFkbyBQYXJjaWFsbWVudGUnO1xyXG4gICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gU2l0dWFjYW9QYWdhbWVudG9QYXJjZWxhLkJMT1FVRUFETykge1xyXG4gICAgICByZXR1cm4gJ0Jsb3F1ZWFkbyc7XHJcbiAgICB9IGVsc2UgaWYgKHZhbHVlID09PSBTaXR1YWNhb1BhZ2FtZW50b1BhcmNlbGEuQUdSVVBBRE9fRU1fT1VUUkFfUEFSQ0VMQSkge1xyXG4gICAgICByZXR1cm4gJ0FncnVwYWRvIGVtIE91dHJhIFBhcmNlbGEnO1xyXG4gICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gU2l0dWFjYW9QYWdhbWVudG9QYXJjZWxhLlBSRVNDUklUTykge1xyXG4gICAgICByZXR1cm4gJ1ByZXNjcml0byc7XHJcbiAgICB9IGVsc2UgaWYgKHZhbHVlID09PSBTaXR1YWNhb1BhZ2FtZW50b1BhcmNlbGEuRU1fRklTQ0FMSVpBQ0FPKSB7XHJcbiAgICAgIHJldHVybiAnRW0gRmlzY2FsaXphw4PCp8ODwqNvJztcclxuICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IFNpdHVhY2FvUGFnYW1lbnRvUGFyY2VsYS5CQUlYQV9TRU1fTU9WSU1FTlRPKSB7XHJcbiAgICAgIHJldHVybiAnQmFpeGEgc2VtIE1vdmltZW50byc7XHJcbiAgICB9IGVsc2UgaWYgKHZhbHVlID09PSBTaXR1YWNhb1BhZ2FtZW50b1BhcmNlbGEuRU1fUkVDVVJTT19BRE1JTklTVFJBVElWTykge1xyXG4gICAgICByZXR1cm4gJ0VtIFJlY3Vyc28gQWRtaW5pc3RyYXRpdm8nO1xyXG4gICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gU2l0dWFjYW9QYWdhbWVudG9QYXJjZWxhLlNVU1BFTlNPKSB7XHJcbiAgICAgIHJldHVybiAnU3VzcGVuc28nO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IG5hbWVzcGFjZSBUaXBvUGVzc29hTmFtZXNwYWNlIHtcclxuICBleHBvcnQgZnVuY3Rpb24gdG9TdHJpbmcodmFsdWU6IFRpcG9QZXNzb2EpOiBzdHJpbmcge1xyXG4gICAgaWYgKHZhbHVlID09PSBUaXBvUGVzc29hLkZJU0lDQSkge1xyXG4gICAgICByZXR1cm4gJ0bDg8Ktc2ljYSc7XHJcbiAgICB9IGVsc2UgaWYgKHZhbHVlID09PSBUaXBvUGVzc29hLkpVUklESUNBKSB7XHJcbiAgICAgIHJldHVybiAnSnVyw4PCrWRpY2EnO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IG5hbWVzcGFjZSBTaXR1YWNhb0NvbnRyaWJ1aW50ZU5hbWVzcGFjZSAge1xyXG4gIGV4cG9ydCBmdW5jdGlvbiB0b1N0cmluZyh2YWx1ZTogU2l0dWFjYW9Db250cmlidWludGUpOiBzdHJpbmcge1xyXG4gICAgaWYgKHZhbHVlID09PSBTaXR1YWNhb0NvbnRyaWJ1aW50ZS5BVElWTykge1xyXG4gICAgICByZXR1cm4gJ0F0aXZvJztcclxuICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IFNpdHVhY2FvQ29udHJpYnVpbnRlLklOQVRJVk8pIHtcclxuICAgICAgcmV0dXJuICdJbmF0aXZvJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbm5hbWVzcGFjZSBTZXhvTmFtZXNwYWNlIHtcclxuICBleHBvcnQgZnVuY3Rpb24gdG9TdHJpbmcodmFsdWU6IFNleG8pOiBzdHJpbmcge1xyXG4gICAgaWYgKHZhbHVlID09PSBTZXhvLkZFTUlOSU5PKSB7XHJcbiAgICAgIHJldHVybiAnRmVtaW5pbm8nO1xyXG4gICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gU2V4by5NQVNDVUxJTk8pIHtcclxuICAgICAgcmV0dXJuICdNYXNjdWxpbm8nO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxubmFtZXNwYWNlIFRpcG9FbmRlcmVjb05hbWVzcGFjZSB7XHJcbiAgZXhwb3J0IGZ1bmN0aW9uIHRvU3RyaW5nKHZhbHVlOiBUaXBvRW5kZXJlY28pOiBzdHJpbmcge1xyXG4gICAgaWYgKHZhbHVlID09PSBUaXBvRW5kZXJlY28uUFJJTkNJUEFMKSB7XHJcbiAgICAgIHJldHVybiAnUHJpbmNpcGFsJztcclxuICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IFRpcG9FbmRlcmVjby5DT1JSRVNQT05ERU5DSUEpIHtcclxuICAgICAgcmV0dXJuICdDb3JyZXNwb25kw4PCqm5jaWEnO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IG5hbWVzcGFjZSBUaXBvUmVzcG9uc2F2ZWxOYW1lc3BhY2Uge1xyXG4gIGV4cG9ydCBmdW5jdGlvbiB0b1N0cmluZyh2YWx1ZTogVGlwb1Jlc3BvbnNhdmVsKTogc3RyaW5nIHtcclxuICAgIGlmICh2YWx1ZSA9PT0gVGlwb1Jlc3BvbnNhdmVsLlBSSU5DSVBBTCkge1xyXG4gICAgICByZXR1cm4gJ1ByaW5jaXBhbCc7XHJcbiAgICB9IGVsc2UgaWYgKHZhbHVlID09PSBUaXBvUmVzcG9uc2F2ZWwuU09DSU8pIHtcclxuICAgICAgcmV0dXJuICdTw4PCs2Npbyc7XHJcbiAgICB9IGVsc2UgaWYgKHZhbHVlID09PSBUaXBvUmVzcG9uc2F2ZWwuUFJPQ1VSQURPUikge1xyXG4gICAgICByZXR1cm4gJ1Byb2N1cmFkb3InO1xyXG4gICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gVGlwb1Jlc3BvbnNhdmVsLlJFU1BPTlNBVkVMX0lNT0JJTElBUklPKSB7XHJcbiAgICAgIHJldHVybiAnUmVzcG9uc8ODwqF2ZWwgSW1vYmlsacODwqFyaW8nO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IG5hbWVzcGFjZSBUaXBvSW1vdmVsTmFtZXNwYWNlIHtcclxuICBleHBvcnQgZnVuY3Rpb24gdG9TdHJpbmcodmFsdWU6IFRpcG9JbW92ZWwpOiBzdHJpbmcge1xyXG4gICAgaWYgKHZhbHVlID09PSBUaXBvSW1vdmVsLlVSQkFOTykge1xyXG4gICAgICByZXR1cm4gJ1VyYmFubyc7XHJcbiAgICB9IGVsc2UgaWYgKHZhbHVlID09PSBUaXBvSW1vdmVsLlJVUkFMKSB7XHJcbiAgICAgIHJldHVybiAnUnVyYWwnO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQge1BpcGUsIFBpcGVUcmFuc2Zvcm19IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1V0aWxGdW5jdGlvbnN9IGZyb20gJy4uL3V0aWwvdXRpbC1mdW5jdGlvbnMnO1xyXG5cclxuQFBpcGUoe1xyXG4gIG5hbWU6ICdmaWx0ZXInXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGaWx0ZXJQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XHJcblxyXG4gIHRyYW5zZm9ybShpdGVtczogYW55W10sIGZpbHRlcnM6e1trZXk6IHN0cmluZ106IHN0cmluZ30pOiBhbnlbXSB7XHJcbiAgICBpZighaXRlbXMpIHJldHVybiBbXTtcclxuICAgIGlmKCFmaWx0ZXJzKSByZXR1cm4gaXRlbXM7XHJcbiAgICBpZiAoIUZpbHRlclBpcGUudmFsaWRhdGUoZmlsdGVycykpIHJldHVybiBpdGVtcztcclxuXHJcbiAgICByZXR1cm4gaXRlbXMuZmlsdGVyKCh2YWx1ZSkgPT4ge1xyXG4gICAgICBmb3IobGV0IGZpZWxkIGluIGZpbHRlcnMpIHtcclxuICAgICAgICBpZihGaWx0ZXJQaXBlLmlzRXF1YWxzKGZpbHRlcnNbZmllbGRdLCB2YWx1ZVtmaWVsZF0pKSB7XHJcbiAgICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIHZhbGlkYXRlKGZpbHRlcnM6e1trZXk6IHN0cmluZ106IHN0cmluZ30pIHtcclxuICAgIGxldCBpc1ZhbHVlID0gZmFsc2U7XHJcbiAgICBmb3IgKGxldCBmaWVsZCBpbiBmaWx0ZXJzKSB7XHJcbiAgICAgIGlmIChmaWx0ZXJzW2ZpZWxkXSAhPT0gdW5kZWZpbmVkICYmIGZpbHRlcnNbZmllbGRdICE9PSAnJykge1xyXG4gICAgICAgIGlzVmFsdWUgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaXNWYWx1ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIGlzRXF1YWxzKGZpbHRlciwgdmFsdWUpIHtcclxuICAgIHZhbHVlID0gVXRpbEZ1bmN0aW9ucy5yZW1vdmVBY2NlbnRzKHZhbHVlLnRvU3RyaW5nKCkpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICBmaWx0ZXIgPSBVdGlsRnVuY3Rpb25zLnJlbW92ZUFjY2VudHMoZmlsdGVyLnRvU3RyaW5nKCkpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICByZXR1cm4gdmFsdWUuaW5jbHVkZXMoZmlsdGVyKTtcclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHtDVVNUT01fRUxFTUVOVFNfU0NIRU1BLCBOZ01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7RW5kZXJlY29QcmluY2lwYWxGb3JtYXRhZG9QaXBlfSBmcm9tICcuL2VuZGVyZWNvLXByaW5jaXBhbC1mb3JtYXRhZG8ucGlwZSc7XHJcbmltcG9ydCB7RW51bVRvU3RyaW5nUGlwZX0gZnJvbSAnLi9lbnVtLXN0cmluZy5waXBlJztcclxuaW1wb3J0IHtGaWx0ZXJQaXBlfSBmcm9tICcuL2ZpbHRlci5waXBlJztcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgZGVjbGFyYXRpb25zOiBbXHJcbiAgICBFbmRlcmVjb1ByaW5jaXBhbEZvcm1hdGFkb1BpcGUsIEVudW1Ub1N0cmluZ1BpcGUsIEZpbHRlclBpcGVcclxuICBdLFxyXG4gIGV4cG9ydHM6IFtcclxuICAgIEVuZGVyZWNvUHJpbmNpcGFsRm9ybWF0YWRvUGlwZSwgRW51bVRvU3RyaW5nUGlwZSwgRmlsdGVyUGlwZVxyXG4gIF0sXHJcbiAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQaXBlTW9kdWxvIHt9XHJcbiIsImltcG9ydCB7Q1VTVE9NX0VMRU1FTlRTX1NDSEVNQSwgTmdNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1JvdXRlck1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHt1c2VyTWdtdFJvdXRlfSBmcm9tICcuL3VzZXItbWFuYWdlbWVudC5yb3V0ZSc7XHJcbmltcG9ydCB7VXNlck1nbXRDb21wb25lbnR9IGZyb20gJy4vdXNlci1tYW5hZ2VtZW50LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7VXNlck1nbXREZXRhaWxDb21wb25lbnR9IGZyb20gJy4vdXNlci1tYW5hZ2VtZW50LWRldGFpbC5jb21wb25lbnQnO1xyXG5pbXBvcnQge1VzZXJNZ210VXBkYXRlQ29tcG9uZW50fSBmcm9tICcuL3VzZXItbWFuYWdlbWVudC11cGRhdGUuY29tcG9uZW50JztcclxuaW1wb3J0IHtVc2VyTWdtdERlbGV0ZURpYWxvZ0NvbXBvbmVudH0gZnJvbSAnLi91c2VyLW1hbmFnZW1lbnQtZGVsZXRlLWRpYWxvZy5jb21wb25lbnQnO1xyXG5pbXBvcnQge1BvcnRhbEFsZXJ0TW9kdWxlfSBmcm9tICcuLi9hbGVydC9wb3J0YWwtYWxlcnQubW9kdWxlJztcclxuaW1wb3J0IHtGb250QXdlc29tZU1vZHVsZX0gZnJvbSAnQGZvcnRhd2Vzb21lL2FuZ3VsYXItZm9udGF3ZXNvbWUnO1xyXG5pbXBvcnQge05nSmhpcHN0ZXJNb2R1bGV9IGZyb20gJ25nLWpoaXBzdGVyJztcclxuaW1wb3J0IHtGb3Jtc01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQge0NvbW1vbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHtsaWJyYXJ5fSBmcm9tICdAZm9ydGF3ZXNvbWUvZm9udGF3ZXNvbWUtc3ZnLWNvcmUnO1xyXG5pbXBvcnQge2Zhc30gZnJvbSAnQGZvcnRhd2Vzb21lL2ZyZWUtc29saWQtc3ZnLWljb25zJztcclxuaW1wb3J0IHtGaW5kTGFuZ3VhZ2VNb2R1bG99IGZyb20gJy4uL2xhbmd1YWdlL2ZpbmQtbGFuZ3VhZ2UubW9kdWxvJztcclxuaW1wb3J0IHtOZ2JNb2R1bGV9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHtQaXBlTW9kdWxvfSBmcm9tICcuLi9waXBlL3BpcGUubW9kdWxvJztcclxuXHJcbmxpYnJhcnkuYWRkKGZhcyk7XHJcblxyXG5jb25zdCBFTlRJVFlfU1RBVEVTID0gWy4uLnVzZXJNZ210Um91dGVdO1xyXG5cclxuQE5nTW9kdWxlKHtcclxuICAgIGltcG9ydHM6IFtcclxuICAgICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgICBGb3Jtc01vZHVsZSxcclxuICAgICAgTmdKaGlwc3Rlck1vZHVsZSxcclxuICAgICAgTmdiTW9kdWxlLmZvclJvb3QoKSxcclxuICAgICAgRm9udEF3ZXNvbWVNb2R1bGUsXHJcbiAgICAgIFBvcnRhbEFsZXJ0TW9kdWxlLFxyXG4gICAgICBGaW5kTGFuZ3VhZ2VNb2R1bG8sXHJcbiAgICAgIFJvdXRlck1vZHVsZS5mb3JDaGlsZChFTlRJVFlfU1RBVEVTKSxcclxuICAgICAgUGlwZU1vZHVsb1xyXG4gICAgXSxcclxuICAgIGRlY2xhcmF0aW9uczogW1xyXG4gICAgICBVc2VyTWdtdENvbXBvbmVudCxcclxuICAgICAgVXNlck1nbXREZXRhaWxDb21wb25lbnQsXHJcbiAgICAgIFVzZXJNZ210VXBkYXRlQ29tcG9uZW50LFxyXG4gICAgICBVc2VyTWdtdERlbGV0ZURpYWxvZ0NvbXBvbmVudFxyXG4gICAgXSxcclxuICAgIGVudHJ5Q29tcG9uZW50czogW1xyXG4gICAgICBVc2VyTWdtdERlbGV0ZURpYWxvZ0NvbXBvbmVudFxyXG4gICAgXSxcclxuICAgIHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgVXNlck1hbmFnZW1lbnRNb2R1bGUge31cclxuIiwiaW1wb3J0IHtDb21wb25lbnQsIE9uSW5pdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7QWN0aXZhdGVkUm91dGV9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7UGxhdGZvcm1Mb2NhdGlvbn0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2poaS1lcnJvcicsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vZXJyb3IuY29tcG9uZW50Lmh0bWwnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBFcnJvckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgICBlcnJvck1lc3NhZ2U6IHN0cmluZztcclxuICAgIGVycm9yNDAzOiBib29sZWFuO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLCBsb2NhdGlvbjogUGxhdGZvcm1Mb2NhdGlvbikge1xyXG4gICAgICAgIGxvY2F0aW9uLm9uUG9wU3RhdGUoKCkgPT4ge1xyXG4gICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSAnLi4vJztcclxuICAgICAgICB9KTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5yb3V0ZS5kYXRhLnN1YnNjcmliZShyb3V0ZURhdGEgPT4ge1xyXG4gICAgICAgICAgICBpZiAocm91dGVEYXRhLmVycm9yNDAzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yNDAzID0gcm91dGVEYXRhLmVycm9yNDAzO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChyb3V0ZURhdGEuZXJyb3JNZXNzYWdlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IHJvdXRlRGF0YS5lcnJvck1lc3NhZ2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgUm91dGVzIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuXHJcbmltcG9ydCB7IEVycm9yQ29tcG9uZW50IH0gZnJvbSAnLi9lcnJvci5jb21wb25lbnQnO1xyXG5cclxuZXhwb3J0IGNvbnN0IGVycm9yUm91dGU6IFJvdXRlcyA9IFtcclxuICAgIHtcclxuICAgICAgICBwYXRoOiAnZXJyb3InLFxyXG4gICAgICAgIGNvbXBvbmVudDogRXJyb3JDb21wb25lbnQsXHJcbiAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICBhdXRob3JpdGllczogW10sXHJcbiAgICAgICAgICAgIHBhZ2VUaXRsZTogJ09jb3JyZXUgdW0gZXJybydcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIHBhdGg6ICdhY2Nlc3NkZW5pZWQnLFxyXG4gICAgICAgIGNvbXBvbmVudDogRXJyb3JDb21wb25lbnQsXHJcbiAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICBhdXRob3JpdGllczogW10sXHJcbiAgICAgICAgICAgIHBhZ2VUaXRsZTogJ0Zhw4PCp2EgbG9naW4gbm92YW1lbnRlJyxcclxuICAgICAgICAgICAgZXJyb3I0MDM6IHRydWVcclxuICAgICAgICB9XHJcbiAgICB9XHJcbl07XHJcbiIsImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7SHR0cENsaWVudCwgSHR0cFJlc3BvbnNlfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7bWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7UHJvZmlsZUluZm99IGZyb20gJy4uLy4uL21vZGVsL3Byb2ZpbGUtaW5mby5tb2RlbCc7XHJcblxyXG5jb25zdCAgU0VSVkVSX0FQSV9VUkwgPSAnLi8nO1xyXG5cclxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcclxuZXhwb3J0IGNsYXNzIFByb2ZpbGVTZXJ2aWNlIHtcclxuICAgIHByaXZhdGUgaW5mb1VybCA9IFNFUlZFUl9BUElfVVJMICsgJ21hbmFnZW1lbnQvaW5mbyc7XHJcbiAgICBwcml2YXRlIHByb2ZpbGVJbmZvOiBQcm9taXNlPFByb2ZpbGVJbmZvPjtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQpIHt9XHJcblxyXG4gICAgZ2V0UHJvZmlsZUluZm8oKTogUHJvbWlzZTxQcm9maWxlSW5mbz4ge1xyXG4gICAgICAgIGlmICghdGhpcy5wcm9maWxlSW5mbykge1xyXG4gICAgICAgICAgICB0aGlzLnByb2ZpbGVJbmZvID0gdGhpcy5odHRwXHJcbiAgICAgICAgICAgICAgICAuZ2V0PFByb2ZpbGVJbmZvPih0aGlzLmluZm9VcmwsIHsgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyB9KVxyXG4gICAgICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICAgICAgbWFwKChyZXM6IEh0dHBSZXNwb25zZTxQcm9maWxlSW5mbz4pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IHJlcy5ib2R5O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwaSA9IG5ldyBQcm9maWxlSW5mbygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwaS5hY3RpdmVQcm9maWxlcyA9IGRhdGFbJ2FjdGl2ZVByb2ZpbGVzJ107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRpc3BsYXlSaWJib25PblByb2ZpbGVzID0gZGF0YVsnZGlzcGxheS1yaWJib24tb24tcHJvZmlsZXMnXS5zcGxpdCgnLCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGkuYWN0aXZlUHJvZmlsZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJpYmJvblByb2ZpbGVzID0gZGlzcGxheVJpYmJvbk9uUHJvZmlsZXMuZmlsdGVyKHByb2ZpbGUgPT4gcGkuYWN0aXZlUHJvZmlsZXMuaW5jbHVkZXMocHJvZmlsZSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJpYmJvblByb2ZpbGVzLmxlbmd0aCAhPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpLnJpYmJvbkVudiA9IHJpYmJvblByb2ZpbGVzWzBdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGkuaW5Qcm9kdWN0aW9uID0gcGkuYWN0aXZlUHJvZmlsZXMuaW5jbHVkZXMoJ3Byb2QnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpLnN3YWdnZXJFbmFibGVkID0gcGkuYWN0aXZlUHJvZmlsZXMuaW5jbHVkZXMoJ3N3YWdnZXInKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIC50b1Byb21pc2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvZmlsZUluZm87XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtDb21wb25lbnQsIE9uSW5pdCwgT25EZXN0cm95fSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge1JvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHtOZ2JNb2RhbCwgTmdiTW9kYWxSZWZ9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHtQcm9maWxlU2VydmljZX0gZnJvbSAnLi4vcHJvZmlsZXMvcHJvZmlsZS5zZXJ2aWNlJztcclxuaW1wb3J0IHtJRW1wcmVzYX0gZnJvbSAnLi4vLi4vbW9kZWwvZW1wcmVzYS5tb2RlbCc7XHJcbmltcG9ydCB7TG9naW5TZXJ2aWNlfSBmcm9tICcuLi8uLi9sb2dpbi9sb2dpbi5zZXJ2aWNlJztcclxuaW1wb3J0IHtFbXByZXNhU2VydmljZX0gZnJvbSAnLi4vLi4vZW1wcmVzYS9lbXByZXNhLnNlcnZpY2UnO1xyXG5pbXBvcnQge0xvZ2luTW9kYWxTZXJ2aWNlfSBmcm9tICcuLi8uLi9sb2dpbi9sb2dpbi1tb2RhbC5zZXJ2aWNlJztcclxuaW1wb3J0IHtSZWdpc3Rlck1vZGFsU2VydmljZX0gZnJvbSAnLi4vLi4vcmVnaXN0ZXIvcmVnaXN0ZXItbW9kYWwuc2VydmljZSc7XHJcbmltcG9ydCB7R2xvYmFsU2VydmljZX0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9wYXJhbWV0cm9zL2dsb2JhbC5zZXJ2aWNlJztcclxuaW1wb3J0IHtQcmluY2lwYWx9IGZyb20gJy4uLy4uL2F1dGgvcHJpbmNpcGFsLnNlcnZpY2UnO1xyXG5pbXBvcnQge1BhcmFtZXRyb3NTZXJ2aWNlfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL3BhcmFtZXRyb3MvcGFyYW1ldHJvcy5zZXJ2aWNlJztcclxuaW1wb3J0IHtVdGlsTWVuc2FnZW19IGZyb20gJy4uLy4uL2FsZXJ0L3V0aWwtbWVuc2FnZW0nO1xyXG5pbXBvcnQge1BhZ2luYUFqdWRhfSBmcm9tICcuLi8uLi9tb2RlbC9wYWdpbmFBanVkYS5tb2RlbCc7XHJcbmltcG9ydCB7VXRpbEZ1bmN0aW9uc30gZnJvbSAnLi4vLi4vdXRpbCc7XHJcbmltcG9ydCB7SmhpRXZlbnRNYW5hZ2VyfSBmcm9tICduZy1qaGlwc3Rlcic7XHJcbmltcG9ydCB7Tm90aWZpY2FjYW99IGZyb20gJy4uLy4uL21vZGVsL25vdGlmaWNhY2FvLm1vZGVsJztcclxuaW1wb3J0IHtOb3RpZmljYWNvZXNTZXJ2aWNlfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL25vdGlmaWNhY29lcy9ub3RpZmljYWNvZXMuc2VydmljZSc7XHJcbmltcG9ydCB7Tm90aWZpY2Fjb2VzUG9wdXBDb21wb25lbnR9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvbm90aWZpY2Fjb2VzL25vdGlmaWNhY29lcy1wb3B1cC5jb21wb25lbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2poaS1uYXZiYXInLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL25hdmJhci5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnbmF2YmFyLnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTmF2YmFyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gICAgaW5Qcm9kdWN0aW9uOiBib29sZWFuO1xyXG4gICAgaXNOYXZiYXJDb2xsYXBzZWQ6IGJvb2xlYW47XHJcbiAgICBwYWdpbmFzQWp1ZGE6IEFycmF5PFBhZ2luYUFqdWRhPiA9IFtdO1xyXG4gICAgaXNSZW1vdmVBY2FvOiBib29sZWFuO1xyXG4gICAgZW1wcmVzYTogSUVtcHJlc2E7XHJcbiAgICBzd2FnZ2VyRW5hYmxlZDogYm9vbGVhbjtcclxuICAgIG1vZGFsUmVmOiBOZ2JNb2RhbFJlZjtcclxuICAgIGhhYmlsaXRhck5vdGlmaWNhY29lcyA9IGZhbHNlO1xyXG4gICAgbm90aWZpY2Fjb2VzOiBOb3RpZmljYWNhb1tdID0gW107XHJcbiAgICBxdWFudGlkYWRlTm90aWZpY2Fjb2VzTm92YXMgPSAwO1xyXG4gICAgcHJpdmF0ZSBub3RpZmljYWNvZXNMaXN0ZW5lcnNSZWdpc3RyYWRvcyA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBjYXJyZWdhbmRvTm90aWZpY2Fjb2VzID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIGNhcnJlZ2FuZG9IYWJpbGl0YWNhbyA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBvcGVuZWRPblRoaXNMb2dpbiA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSBhYnJpclBvcHVwUXVhbmRvQ2FycmVnYXIgPSBmYWxzZTtcclxuICAgIHByaXZhdGUgYWJyaXJQb3B1cFNlVGl2ZXJOb3Zhc1F1YW5kb0NhcnJlZ2FyID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIG5vdGlmaWNhY29lc1N1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIGxvZ2luU2VydmljZTogTG9naW5TZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgZW1wcmVzYVNlcnZpY2U6IEVtcHJlc2FTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgbG9naW5Nb2RhbFNlcnZpY2U6IExvZ2luTW9kYWxTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgcmVnaXN0ZXJNb2RhbFNlcnZpY2U6IFJlZ2lzdGVyTW9kYWxTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgcHJvZmlsZVNlcnZpY2U6IFByb2ZpbGVTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgcGFyYW1ldHJvU2VydmljZTogUGFyYW1ldHJvc1NlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBnbG9iYWw6IEdsb2JhbFNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgICAgICBwcml2YXRlIHV0aWxNZW5zYWdlbTogVXRpbE1lbnNhZ2VtLFxyXG4gICAgICAgIHB1YmxpYyBwcmluY2lwYWw6IFByaW5jaXBhbCxcclxuICAgICAgICBwcml2YXRlIGV2ZW50TWFuYWdlcjogSmhpRXZlbnRNYW5hZ2VyLFxyXG4gICAgICAgIHByaXZhdGUgbm90aWZpY2Fjb2VzU2VydmljZTogTm90aWZpY2Fjb2VzU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIG1vZGFsU2VydmljZTogTmdiTW9kYWxcclxuICAgICkge1xyXG4gICAgICAgIHRoaXMuaXNOYXZiYXJDb2xsYXBzZWQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuaXNSZW1vdmVBY2FvID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5ub3RpZmljYWNvZXNTdWJzY3JpcHRpb24gPSB0aGlzLm5vdGlmaWNhY29lc1NlcnZpY2Uub2JzZXJ2YXJOb3RpZmljYWNvZXMoKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKGxpc3RhID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2Fjb2VzID0gbGlzdGEgPyBsaXN0YSA6IFtdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5xdWFudGlkYWRlTm90aWZpY2Fjb2VzTm92YXMgPSB0aGlzLmNvbnRhck5vdmFzTm90aWZpY2Fjb2VzKHRoaXMubm90aWZpY2Fjb2VzKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMucHJvZmlsZVNlcnZpY2UuZ2V0UHJvZmlsZUluZm8oKS50aGVuKHByb2ZpbGVJbmZvID0+IHtcclxuICAgICAgICAgICAgdGhpcy5pblByb2R1Y3Rpb24gPSBwcm9maWxlSW5mby5pblByb2R1Y3Rpb247XHJcbiAgICAgICAgICAgIHRoaXMuc3dhZ2dlckVuYWJsZWQgPSBwcm9maWxlSW5mby5zd2FnZ2VyRW5hYmxlZDtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5lbXByZXNhU2VydmljZVxyXG4gICAgICAgICAgICAuZ2V0RW1wcmVzYSgpXHJcbiAgICAgICAgICAgIC50b1Byb21pc2UoKVxyXG4gICAgICAgICAgICAudGhlbihlbXByZXNhID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZW1wcmVzYSA9IGVtcHJlc2EuYm9keTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMucGFyYW1ldHJvU2VydmljZS5nZXRQYXJhbWV0cm9zQnlOYW1lKFwiUkVNT1ZFUl9BQ0FPX05BVkJBUlwiKVxyXG4gICAgICAgICAgICAudGhlbih2YWx1ZSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzUmVtb3ZlQWNhbyA9IHZhbHVlLnZhbG9yO1xyXG4gICAgICAgICAgICB9KS5jYXRjaCh2YWx1ZSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMudXRpbE1lbnNhZ2VtLnNob3dFcnJvcih2YWx1ZSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMucGFyYW1ldHJvU2VydmljZS5nZXRQYXJhbWV0cm9zQnlOYW1lKFwiSlNPTl9BSlVEQVwiKVxyXG4gICAgICAgICAgICAudGhlbih2YWx1ZSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoVXRpbEZ1bmN0aW9ucy5pc1ZhbGlkU3RyaW5nT3JBcnJheSh2YWx1ZS52YWxvcikgPT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGFnaW5hc0FqdWRhID0gSlNPTi5wYXJzZSh2YWx1ZS52YWxvcik7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy51c3VhcmlvVml1QWp1ZGEoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFicmlyQWp1ZGEoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB9KS5jYXRjaCgoKSA9PiB7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMucmVnaXN0cmFyTGlzdGVuZXJzTm90aWZpY2Fjb2VzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICAgICAgdGhpcy5ub3RpZmljYWNvZXNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuXHJcbiAgICBjb2xsYXBzZU5hdmJhcigpIHtcclxuICAgICAgICB0aGlzLmlzTmF2YmFyQ29sbGFwc2VkID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpc0F1dGhlbnRpY2F0ZWQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucHJpbmNpcGFsLmlzQXV0aGVudGljYXRlZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlzQWRtaW4oKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucHJpbmNpcGFsLmhhc0FueUF1dGhvcml0eURpcmVjdChbXCJST0xFX0FETUlOXCJdKTtcclxuICAgIH1cclxuXHJcbiAgICBsb2dpbigpIHtcclxuICAgICAgICB0aGlzLm1vZGFsUmVmID0gdGhpcy5sb2dpbk1vZGFsU2VydmljZS5vcGVuKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVnaXN0ZXIoKSB7XHJcbiAgICAgICAgdGhpcy5tb2RhbFJlZiA9IHRoaXMucmVnaXN0ZXJNb2RhbFNlcnZpY2Uub3BlbigpO1xyXG4gICAgfVxyXG5cclxuICAgIGxvZ291dCgpIHtcclxuICAgICAgICB0aGlzLmNvbGxhcHNlTmF2YmFyKCk7XHJcbiAgICAgICAgdGhpcy5sb2dpblNlcnZpY2UubG9nb3V0KCk7XHJcbiAgICAgICAgdGhpcy5nbG9iYWwubG9nb3V0KCk7XHJcbiAgICAgICAgdGhpcy5yZXNldGFyTm90aWZpY2Fjb2VzKCk7XHJcbiAgICAgICAgdGhpcy5ub3RpZmljYWNvZXNTZXJ2aWNlLmxpbXBhckNhY2hlKCk7XHJcbiAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSAnLi4vJztcclxuICAgIH1cclxuXHJcbiAgICB0b2dnbGVOYXZiYXIoKSB7XHJcbiAgICAgICAgdGhpcy5pc05hdmJhckNvbGxhcHNlZCA9ICF0aGlzLmlzTmF2YmFyQ29sbGFwc2VkO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEltYWdlVXJsKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmlzQXV0aGVudGljYXRlZCgpID8gdGhpcy5wcmluY2lwYWwuZ2V0SW1hZ2VVcmwoKSA6IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgcGFyYW1ldHJpemFyKCkge1xyXG4gICAgICAgIHRoaXMuZ2xvYmFsLnBhcmFtZXRyaXphcigpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdXN1YXJpb1ZpdUFqdWRhKCkge1xyXG4gICAgICAgIHJldHVybiBsb2NhbFN0b3JhZ2UuaGFzT3duUHJvcGVydHkoJ3VzdWFyaW9WaXVBanVkYScpO1xyXG4gICAgfVxyXG5cclxuICAgIGFicmlyQWp1ZGEoKSB7XHJcbiAgICAgICAgdGhpcy5nbG9iYWwuYWJyaXJBanVkYSh0aGlzLnBhZ2luYXNBanVkYSk7XHJcbiAgICB9XHJcblxyXG4gICAgYWJyaXJOb3RpZmljYWNvZXMoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmhhYmlsaXRhck5vdGlmaWNhY29lcyB8fCAhdGhpcy5wcmluY2lwYWwuaXNBdXRoZW50aWNhdGVkKCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmJ1c2Nhck5vdGlmaWNhY29lcyhmYWxzZSwgdHJ1ZSwgZmFsc2UpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFRleHRvUXVhbnRpZGFkZU5vdGlmaWNhY29lcygpOiBzdHJpbmcge1xyXG4gICAgICAgIGlmICh0aGlzLnF1YW50aWRhZGVOb3RpZmljYWNvZXNOb3ZhcyA+IDk5KSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnKzk5JztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucXVhbnRpZGFkZU5vdGlmaWNhY29lc05vdmFzLnRvU3RyaW5nKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSByZWdpc3RyYXJMaXN0ZW5lcnNOb3RpZmljYWNvZXMoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMubm90aWZpY2Fjb2VzTGlzdGVuZXJzUmVnaXN0cmFkb3MpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm5vdGlmaWNhY29lc0xpc3RlbmVyc1JlZ2lzdHJhZG9zID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgdGhpcy5ldmVudE1hbmFnZXIuc3Vic2NyaWJlKCdhdXRoZW50aWNhdGlvblN1Y2Nlc3MnLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMub3BlbmVkT25UaGlzTG9naW4gPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy52ZXJpZmljYXJIYWJpbGl0YWNhb0VDYXJyZWdhcih0cnVlKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5ldmVudE1hbmFnZXIuc3Vic2NyaWJlKCdhYnJpck5vdGlmaWNhY29lc1NlVGl2ZXJOb3ZhcycsICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy52ZXJpZmljYXJIYWJpbGl0YWNhb0VDYXJyZWdhcih0cnVlKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5wcmluY2lwYWwuZ2V0QXV0aGVudGljYXRpb25TdGF0ZSgpLnN1YnNjcmliZShhY2NvdW50ID0+IHtcclxuICAgICAgICAgICAgaWYgKFV0aWxGdW5jdGlvbnMuaXNWYWxpZE9iamVjdChhY2NvdW50KSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy52ZXJpZmljYXJIYWJpbGl0YWNhb0VDYXJyZWdhcihmYWxzZSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlc2V0YXJOb3RpZmljYWNvZXMoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2Fjb2VzU2VydmljZS5saW1wYXJDYWNoZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnByaW5jaXBhbC5pc0F1dGhlbnRpY2F0ZWQoKSkge1xyXG4gICAgICAgICAgICB0aGlzLnZlcmlmaWNhckhhYmlsaXRhY2FvRUNhcnJlZ2FyKGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB2ZXJpZmljYXJIYWJpbGl0YWNhb0VDYXJyZWdhcihhYnJpclBvcHVwU2VUaXZlck5vdmFzOiBib29sZWFuKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY2FycmVnYW5kb0hhYmlsaXRhY2FvKSB7XHJcbiAgICAgICAgICAgIGlmIChhYnJpclBvcHVwU2VUaXZlck5vdmFzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFicmlyUG9wdXBTZVRpdmVyTm92YXNRdWFuZG9DYXJyZWdhciA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNhcnJlZ2FuZG9IYWJpbGl0YWNhbyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5wYXJhbWV0cm9TZXJ2aWNlLmdldFBhcmFtZXRyb3NCeU5hbWUoXCJIQUJJTElUQVJfTk9USUZJQ0FDT0VTXCIpXHJcbiAgICAgICAgICAgIC50aGVuKHZhbHVlID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGFiaWxpdGFyTm90aWZpY2Fjb2VzID0gVXRpbEZ1bmN0aW9ucy5pc1ZhbGlkT2JqZWN0KHZhbHVlKSA9PT0gdHJ1ZSAmJiB2YWx1ZS52YWxvciA9PT0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmhhYmlsaXRhck5vdGlmaWNhY29lcykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnVzY2FyTm90aWZpY2Fjb2VzKGFicmlyUG9wdXBTZVRpdmVyTm92YXMsIGZhbHNlLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzZXRhck5vdGlmaWNhY29lcygpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jYXJyZWdhbmRvSGFiaWxpdGFjYW8gPSBmYWxzZTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmNhdGNoKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGFiaWxpdGFyTm90aWZpY2Fjb2VzID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhcnJlZ2FuZG9IYWJpbGl0YWNhbyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZXNldGFyTm90aWZpY2Fjb2VzKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYnVzY2FyTm90aWZpY2Fjb2VzKGFicmlyUG9wdXBTZVRpdmVyTm92YXM6IGJvb2xlYW4sIGFicmlyUG9wdXBTZW1wcmU6IGJvb2xlYW4sIGZvcmNlUmVmcmVzaDogYm9vbGVhbikge1xyXG4gICAgICAgIGlmICghdGhpcy5oYWJpbGl0YXJOb3RpZmljYWNvZXMgfHwgIXRoaXMucHJpbmNpcGFsLmlzQXV0aGVudGljYXRlZCgpIHx8IHRoaXMuY2FycmVnYW5kb05vdGlmaWNhY29lcykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5jYXJyZWdhbmRvTm90aWZpY2Fjb2VzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYWJyaXJQb3B1cFNlbXByZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWJyaXJQb3B1cFF1YW5kb0NhcnJlZ2FyID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChhYnJpclBvcHVwU2VUaXZlck5vdmFzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hYnJpclBvcHVwU2VUaXZlck5vdmFzUXVhbmRvQ2FycmVnYXIgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jYXJyZWdhbmRvTm90aWZpY2Fjb2VzID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLm5vdGlmaWNhY29lc1NlcnZpY2UuYnVzY2FyTm90aWZpY2Fjb2VzKGZvcmNlUmVmcmVzaClcclxuICAgICAgICAgICAgLnRoZW4obGlzdGEgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYWNvZXMgPSBsaXN0YSA/IGxpc3RhIDogW107XHJcbiAgICAgICAgICAgICAgICB0aGlzLnF1YW50aWRhZGVOb3RpZmljYWNvZXNOb3ZhcyA9IHRoaXMuY29udGFyTm92YXNOb3RpZmljYWNvZXModGhpcy5ub3RpZmljYWNvZXMpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcG9zc3VpTm92YXMgPSB0aGlzLnF1YW50aWRhZGVOb3RpZmljYWNvZXNOb3ZhcyA+IDA7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkZXZlQWJyaXJTZVRpdmVyTm92YXMgPSAoYWJyaXJQb3B1cFNlVGl2ZXJOb3ZhcyB8fCB0aGlzLmFicmlyUG9wdXBTZVRpdmVyTm92YXNRdWFuZG9DYXJyZWdhcilcclxuICAgICAgICAgICAgICAgICAgICAmJiBwb3NzdWlOb3Zhc1xyXG4gICAgICAgICAgICAgICAgICAgICYmICF0aGlzLm9wZW5lZE9uVGhpc0xvZ2luO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZGV2ZUFicmlyID0gZGV2ZUFicmlyU2VUaXZlck5vdmFzXHJcbiAgICAgICAgICAgICAgICAgICAgfHwgYWJyaXJQb3B1cFNlbXByZVxyXG4gICAgICAgICAgICAgICAgICAgIHx8IHRoaXMuYWJyaXJQb3B1cFF1YW5kb0NhcnJlZ2FyO1xyXG4gICAgICAgICAgICAgICAgaWYgKGRldmVBYnJpcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChkZXZlQWJyaXJTZVRpdmVyTm92YXMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vcGVuZWRPblRoaXNMb2dpbiA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWJyaXJQb3B1cFF1YW5kb0NhcnJlZ2FyID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hYnJpclBvcHVwU2VUaXZlck5vdmFzUXVhbmRvQ2FycmVnYXIgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFicmlyUG9wdXBOb3RpZmljYWNvZXModGhpcy5ub3RpZmljYWNvZXMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jYXJyZWdhbmRvTm90aWZpY2Fjb2VzID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYXJyZWdhbmRvTm90aWZpY2Fjb2VzID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnV0aWxNZW5zYWdlbS5zaG93RXJyb3JEZXRhaWxlZChlcnIpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFicmlyUG9wdXBOb3RpZmljYWNvZXMobm90aWZpY2Fjb2VzOiBOb3RpZmljYWNhb1tdKSB7XHJcbiAgICAgICAgY29uc3QgbW9kYWxSZWYgPSB0aGlzLm1vZGFsU2VydmljZS5vcGVuKE5vdGlmaWNhY29lc1BvcHVwQ29tcG9uZW50LCB7XHJcbiAgICAgICAgICAgIHNpemU6ICdsZycsXHJcbiAgICAgICAgICAgIGJhY2tkcm9wOiAnc3RhdGljJ1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNvbnN0IHRlbGFOb3RpZmljYWNvZXNQb3B1cDogTm90aWZpY2Fjb2VzUG9wdXBDb21wb25lbnQgPSBtb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZTtcclxuICAgICAgICB0ZWxhTm90aWZpY2Fjb2VzUG9wdXAuaW5pY2lhcihub3RpZmljYWNvZXMpO1xyXG4gICAgICAgIG1vZGFsUmVmLnJlc3VsdC50aGVuKChyZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQuYXR1YWxpemFyKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJ1c2Nhck5vdGlmaWNhY29lcyhmYWxzZSwgZmFsc2UsIHRydWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjb250YXJOb3Zhc05vdGlmaWNhY29lcyhub3RpZmljYWNvZXM6IE5vdGlmaWNhY2FvW10pOiBudW1iZXIge1xyXG4gICAgICAgIGlmICghbm90aWZpY2Fjb2VzKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbm90aWZpY2Fjb2VzLmZpbHRlcihpdGVtID0+IHRoaXMuaXNOb3ZhTm90aWZpY2FjYW8oaXRlbSkpLmxlbmd0aDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGlzTm92YU5vdGlmaWNhY2FvKG5vdGlmaWNhY2FvOiBOb3RpZmljYWNhbyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGNvbnN0IHZhbHVlOiBhbnkgPSBub3RpZmljYWNhbyBhcyBhbnk7XHJcbiAgICAgICAgcmV0dXJuICF2YWx1ZSB8fCB2YWx1ZS5kYXRhTmFvRXhpYmlyID09PSBudWxsIHx8IHZhbHVlLmRhdGFOYW9FeGliaXIgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZS5kYXRhTmFvRXhpYmlyID09PSAnJztcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHJlc2V0YXJOb3RpZmljYWNvZXMoKSB7XHJcbiAgICAgICAgdGhpcy5ub3RpZmljYWNvZXMgPSBbXTtcclxuICAgICAgICB0aGlzLnF1YW50aWRhZGVOb3RpZmljYWNvZXNOb3ZhcyA9IDA7XHJcbiAgICAgICAgdGhpcy5vcGVuZWRPblRoaXNMb2dpbiA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuYWJyaXJQb3B1cFF1YW5kb0NhcnJlZ2FyID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5hYnJpclBvcHVwU2VUaXZlck5vdmFzUXVhbmRvQ2FycmVnYXIgPSBmYWxzZTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQgeyBSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcblxyXG5pbXBvcnQgeyBOYXZiYXJDb21wb25lbnQgfSBmcm9tICcuL25hdmJhci5jb21wb25lbnQnO1xyXG5cclxuZXhwb3J0IGNvbnN0IG5hdmJhclJvdXRlOiBSb3V0ZSA9IHtcclxuICAgIHBhdGg6ICcnLFxyXG4gICAgY29tcG9uZW50OiBOYXZiYXJDb21wb25lbnQsXHJcbiAgICBvdXRsZXQ6ICduYXZiYXInXHJcbn07XHJcbiIsImltcG9ydCB7Q29tcG9uZW50LCBPbkluaXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlU25hcHNob3QsIE5hdmlnYXRpb25FbmQsIFJvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHtKaGlMYW5ndWFnZUhlbHBlcn0gZnJvbSAnLi4vLi4vbGFuZ3VhZ2UvbGFuZ3VhZ2UuaGVscGVyJztcclxuaW1wb3J0IHtTZXNzaW9uU3RvcmFnZVNlcnZpY2V9IGZyb20gXCJuZ3gtd2Vic3RvcmFnZVwiO1xyXG5pbXBvcnQge0xvY2tQYWdlLCBVdGlsRnVuY3Rpb25zfSBmcm9tICcuLi8uLi91dGlsJztcclxuaW1wb3J0IHtPcHRpb25zUHJvdmlkZXJ9IGZyb20gJy4uLy4uL3V0aWwvb3B0aW9ucy1wcm92aWRlcic7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnamhpLW1haW4nLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL21haW4uY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJ21haW4uc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBKaGlNYWluQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgamhpTGFuZ3VhZ2VIZWxwZXI6IEpoaUxhbmd1YWdlSGVscGVyLCBwcml2YXRlIHJvdXRlcjogUm91dGVyLCBwcml2YXRlIHNlc3Npb25TdG9yYWdlOiBTZXNzaW9uU3RvcmFnZVNlcnZpY2UsIHByaXZhdGUgcHJvdmlkZXI6IE9wdGlvbnNQcm92aWRlcikge31cclxuXHJcbiAgICBwcml2YXRlIGdldFBhZ2VUaXRsZShyb3V0ZVNuYXBzaG90OiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90KSB7XHJcbiAgICAgICAgbGV0IHRpdGxlOiBzdHJpbmcgPSByb3V0ZVNuYXBzaG90LmRhdGEgJiYgcm91dGVTbmFwc2hvdC5kYXRhWydwYWdlVGl0bGUnXSA/IHJvdXRlU25hcHNob3QuZGF0YVsncGFnZVRpdGxlJ10gOiAncG9ydGFsR2F0ZXdheUFwcCc7XHJcbiAgICAgICAgaWYgKHJvdXRlU25hcHNob3QuZmlyc3RDaGlsZCkge1xyXG4gICAgICAgICAgICB0aXRsZSA9IHRoaXMuZ2V0UGFnZVRpdGxlKHJvdXRlU25hcHNob3QuZmlyc3RDaGlsZCkgfHwgdGl0bGU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aXRsZTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLnJvdXRlci5ldmVudHMuc3Vic2NyaWJlKGV2ZW50ID0+IHtcclxuICAgICAgICAgICAgaWYgKGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50LnVybC5pbmRleE9mKCcvYWNjZXNzZGVuaWVkJykgPCAwICYmIGV2ZW50LnVybCAhPT0gJy8nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbG9ja2VkUGFnZTogTG9ja1BhZ2UgPSBMb2NrUGFnZS5yZXRyaWV2ZUZyb21TdG9yYWdlKHRoaXMuc2Vzc2lvblN0b3JhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChVdGlsRnVuY3Rpb25zLmlzVmFsaWRPYmplY3QobG9ja2VkUGFnZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxvY2tlZFBhZ2UuaXNMb2NrZWRQYWdlKHdpbmRvdy5sb2NhdGlvbiwgdGhpcy5wcm92aWRlci5tb2R1bG8pID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVkaXJlY3RQYWdlID0gbG9ja2VkUGFnZS5nZXRSZWRpcmVjdFBhZ2Uod2luZG93LmxvY2F0aW9uLCB0aGlzLnByb3ZpZGVyLm1vZHVsbyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSByZWRpcmVjdFBhZ2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCAyMDApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuamhpTGFuZ3VhZ2VIZWxwZXIudXBkYXRlVGl0bGUodGhpcy5nZXRQYWdlVGl0bGUodGhpcy5yb3V0ZXIucm91dGVyU3RhdGUuc25hcHNob3Qucm9vdCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgRGlyZWN0aXZlLCBPbkluaXQsIEVsZW1lbnRSZWYsIFJlbmRlcmVyLCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlLCBMYW5nQ2hhbmdlRXZlbnQgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuXHJcbkBEaXJlY3RpdmUoe1xyXG4gICAgc2VsZWN0b3I6ICdbamhpQWN0aXZlTWVudV0nXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBY3RpdmVNZW51RGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0IHtcclxuICAgIEBJbnB1dCgpXHJcbiAgICBqaGlBY3RpdmVNZW51OiBzdHJpbmc7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBlbDogRWxlbWVudFJlZiwgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIsIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSkge31cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2Uub25MYW5nQ2hhbmdlLnN1YnNjcmliZSgoZXZlbnQ6IExhbmdDaGFuZ2VFdmVudCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUFjdGl2ZUZsYWcoZXZlbnQubGFuZyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVBY3RpdmVGbGFnKHRoaXMudHJhbnNsYXRlU2VydmljZS5jdXJyZW50TGFuZyk7XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlQWN0aXZlRmxhZyhzZWxlY3RlZExhbmd1YWdlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuamhpQWN0aXZlTWVudSA9PT0gc2VsZWN0ZWRMYW5ndWFnZSkge1xyXG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldEVsZW1lbnRDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsICdhY3RpdmUnLCB0cnVlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldEVsZW1lbnRDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsICdhY3RpdmUnLCBmYWxzZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFByb2ZpbGVTZXJ2aWNlIH0gZnJvbSAnLi9wcm9maWxlLnNlcnZpY2UnO1xyXG5pbXBvcnQge1Byb2ZpbGVJbmZvfSBmcm9tICcuLi8uLi9tb2RlbC9wcm9maWxlLWluZm8ubW9kZWwnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2poaS1wYWdlLXJpYmJvbicsXHJcbiAgICB0ZW1wbGF0ZTogYDxkaXYgY2xhc3M9XCJyaWJib25cIiAqbmdJZj1cInJpYmJvbkVudlwiPjxhIGhyZWY9XCJcIiBqaGlUcmFuc2xhdGU9XCJnbG9iYWwucmliYm9uLnt7cmliYm9uRW52fX1cIj57e3JpYmJvbkVudn19PC9hPjwvZGl2PmAsXHJcbiAgICBzdHlsZVVybHM6IFsncGFnZS1yaWJib24uc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQYWdlUmliYm9uQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICAgIHByb2ZpbGVJbmZvOiBQcm9maWxlSW5mbztcclxuICAgIHJpYmJvbkVudjogc3RyaW5nO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcHJvZmlsZVNlcnZpY2U6IFByb2ZpbGVTZXJ2aWNlKSB7fVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIHRoaXMucHJvZmlsZVNlcnZpY2UuZ2V0UHJvZmlsZUluZm8oKS50aGVuKHByb2ZpbGVJbmZvID0+IHtcclxuICAgICAgICAgICAgdGhpcy5wcm9maWxlSW5mbyA9IHByb2ZpbGVJbmZvO1xyXG4gICAgICAgICAgICB0aGlzLnJpYmJvbkVudiA9IHByb2ZpbGVJbmZvLnJpYmJvbkVudjtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge0FmdGVyQ29udGVudEluaXQsIENvbXBvbmVudH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7T3B0aW9uc1Byb3ZpZGVyfSBmcm9tICcuLi8uLi91dGlsL29wdGlvbnMtcHJvdmlkZXInO1xyXG5pbXBvcnQge1V0aWxGdW5jdGlvbnN9IGZyb20gXCIuLi8uLi91dGlsXCI7XHJcbmltcG9ydCB7RG9tU2FuaXRpemVyfSBmcm9tIFwiQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3NlclwiO1xyXG5pbXBvcnQge0h0dHBDbGllbnR9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2poaS1mb290ZXInLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2Zvb3Rlci5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnZm9vdGVyLnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRm9vdGVyQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCB7XHJcbiAgICB2ZXJzaW9uOiBzdHJpbmc7XHJcbiAgICBhbm86IG51bWJlcjtcclxuICAgIGV4dHJhSFRNTDogc3RyaW5nO1xyXG4gICAgY2hlY2tlZEhUTUwgPSBmYWxzZTtcclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgb3B0aW9uc1Byb3ZpZGVyOk9wdGlvbnNQcm92aWRlcixcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcclxuICAgICAgICAgICAgICAgIHB1YmxpYyBzYW5pdGl6ZXI6IERvbVNhbml0aXplcikge1xyXG4gICAgICAgIHRoaXMudmVyc2lvbiA9IG9wdGlvbnNQcm92aWRlci52ZXJzaW9uO1xyXG4gICAgICAgIHRoaXMuYW5vID0gbmV3IERhdGUoKS5nZXRGdWxsWWVhcigpO1xyXG4gICAgfVxyXG5cclxuICBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5jaGVja2VkSFRNTCA9PT0gZmFsc2UpIHtcclxuICAgICAgdGhpcy5nZXRIdG1sRm9vdGVyKCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGNoYW5nZUNvbnRlbnRIZWlnaHQoKSB7XHJcbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpe1xyXG4gICAgICBjb25zdCBmb290ZXJIZWlnaHQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnamhpLWZvb3RlcicpLml0ZW0oMCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0O1xyXG4gICAgICBjb25zdCBoZWlndGhTdHlsZSA9ICdjYWxjKDEwMHZoIC0gODBweCAtICcgKyBmb290ZXJIZWlnaHQgKyAncHgpJztcclxuICAgICAgY29uc3QgY29udGVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5jb250YWluZXItZmx1aWQnKSBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgY29udGVudC5zdHlsZS5oZWlnaHQgPSBoZWlndGhTdHlsZTtcclxuICAgICAgY29udGVudC5zdHlsZS5taW5IZWlnaHQgPSBoZWlndGhTdHlsZTtcclxuICAgIH0sIDEwMCk7XHJcbiAgfVxyXG5cclxuICBnZXRIdG1sRm9vdGVyKCk6IFByb21pc2U8YW55PiB7XHJcbiAgICBjb25zdCB1cmwgPSAnL2FwaS9wdWJsaWMvcGFyYW1ldHJvcy1jaGF2ZS12YWxvci8qLyonO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFxyXG4gICAgICAuZ2V0KHVybCwgeyBvYnNlcnZlOiAncmVzcG9uc2UnIH0pXHJcbiAgICAgIC50b1Byb21pc2UoKVxyXG4gICAgICAudGhlbih2YWx1ZSA9PiB7XHJcbiAgICAgICAgdGhpcy5jaGVja2VkSFRNTCA9IHRydWU7XHJcbiAgICAgICAgaWYgKFV0aWxGdW5jdGlvbnMuaXNWYWxpZE9iamVjdCh2YWx1ZS5ib2R5WydNRU5TQUdFTV9IVE1MX0ZPT1RFUiddKSA9PT0gdHJ1ZSAmJlxyXG4gICAgICAgICAgVXRpbEZ1bmN0aW9ucy5pc1ZhbGlkU3RyaW5nT3JBcnJheSh2YWx1ZS5ib2R5WydNRU5TQUdFTV9IVE1MX0ZPT1RFUiddLnZhbG9yKSA9PT0gdHJ1ZVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdGhpcy5leHRyYUhUTUwgPSB2YWx1ZS5ib2R5WydNRU5TQUdFTV9IVE1MX0ZPT1RFUiddLnZhbG9yLnJlcGxhY2UoJ3t7eWVhcn19JywgdGhpcy5hbm8pLnJlcGxhY2UoJ3t7dmVyc2lvbn19JywgdGhpcy52ZXJzaW9uKTtcclxuICAgICAgICAgIC8vdGhpcy5jaGFuZ2VDb250ZW50SGVpZ2h0KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgfSkuY2F0Y2goKCkgPT57XHJcbiAgICAgICAgdGhpcy5jaGVja2VkSFRNTCA9IHRydWU7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcblxyXG59XHJcbiIsImltcG9ydCB7Q1VTVE9NX0VMRU1FTlRTX1NDSEVNQSwgTmdNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1JvdXRlck1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHtlcnJvclJvdXRlfSBmcm9tICcuL2Vycm9yL2Vycm9yLnJvdXRlJztcclxuaW1wb3J0IHtuYXZiYXJSb3V0ZX0gZnJvbSAnLi9uYXZiYXIvbmF2YmFyLnJvdXRlJztcclxuaW1wb3J0IHtFcnJvckNvbXBvbmVudH0gZnJvbSAnLi9lcnJvci9lcnJvci5jb21wb25lbnQnO1xyXG5pbXBvcnQge0NvbW1vbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHtGb3Jtc01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQge05nSmhpcHN0ZXJNb2R1bGV9IGZyb20gJ25nLWpoaXBzdGVyJztcclxuaW1wb3J0IHtQb3J0YWxBbGVydE1vZHVsZX0gZnJvbSAnLi4vYWxlcnQvcG9ydGFsLWFsZXJ0Lm1vZHVsZSc7XHJcbmltcG9ydCB7SmhpTWFpbkNvbXBvbmVudH0gZnJvbSAnLi9tYWluL21haW4uY29tcG9uZW50JztcclxuaW1wb3J0IHtOYXZiYXJDb21wb25lbnR9IGZyb20gJy4vbmF2YmFyL25hdmJhci5jb21wb25lbnQnO1xyXG5pbXBvcnQge0FjdGl2ZU1lbnVEaXJlY3RpdmV9IGZyb20gJy4vbmF2YmFyL2FjdGl2ZS1tZW51LmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7UGFnZVJpYmJvbkNvbXBvbmVudH0gZnJvbSAnLi9wcm9maWxlcy9wYWdlLXJpYmJvbi5jb21wb25lbnQnO1xyXG5pbXBvcnQge05nYk1vZHVsZX0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQge0F1dGhNb2R1bGV9IGZyb20gJy4uL2F1dGgvYXV0aC5tb2R1bGUnO1xyXG5pbXBvcnQge0Zvb3RlckNvbXBvbmVudH0gZnJvbSAnLi9mb290ZXIvZm9vdGVyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7Rm9udEF3ZXNvbWVNb2R1bGV9IGZyb20gJ0Bmb3J0YXdlc29tZS9hbmd1bGFyLWZvbnRhd2Vzb21lJztcclxuaW1wb3J0IHtsaWJyYXJ5fSBmcm9tICdAZm9ydGF3ZXNvbWUvZm9udGF3ZXNvbWUtc3ZnLWNvcmUnO1xyXG5pbXBvcnQge2Zhc30gZnJvbSAnQGZvcnRhd2Vzb21lL2ZyZWUtc29saWQtc3ZnLWljb25zJztcclxuaW1wb3J0IHtPcHRpb25zUHJvdmlkZXJ9IGZyb20gJy4uL3V0aWwvb3B0aW9ucy1wcm92aWRlcic7XHJcbmltcG9ydCB7TG9hZGluZ0Jhckh0dHBDbGllbnRNb2R1bGV9IGZyb20gJ0BuZ3gtbG9hZGluZy1iYXIvaHR0cC1jbGllbnQnO1xuaW1wb3J0IHtKb3lyaWRlTW9kdWxlLCBKb3lyaWRlU3RlcENvbXBvbmVudH0gZnJvbSAnbmd4LWpveXJpZGUnO1xuaW1wb3J0IHtDb29raWVDb25zZW50TW9kdWxlfSBmcm9tICcuLi9jb21wb25lbnRzL2Nvb2tpZS1jb25zZW50L2Nvb2tpZS1jb25zZW50Lm1vZHVsZSc7XG5pbXBvcnQge05vdGlmaWNhY29lc01vZHVsZX0gZnJvbSAnLi4vY29tcG9uZW50cy9ub3RpZmljYWNvZXMvbm90aWZpY2Fjb2VzLm1vZHVsZSc7XG5cclxubGlicmFyeS5hZGQoZmFzKTtcclxuXHJcbmNvbnN0IExBWU9VVF9ST1VURVMgPSBbbmF2YmFyUm91dGUsIC4uLmVycm9yUm91dGVdO1xyXG5cclxuQE5nTW9kdWxlKHtcclxuICAgIGltcG9ydHM6IFtcclxuICAgICAgQXV0aE1vZHVsZSxcclxuICAgICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgICBGb3Jtc01vZHVsZSxcclxuICAgICAgTmdKaGlwc3Rlck1vZHVsZSxcclxuICAgICAgUG9ydGFsQWxlcnRNb2R1bGUsXHJcbiAgICAgIEZvbnRBd2Vzb21lTW9kdWxlLFxyXG4gICAgICBMb2FkaW5nQmFySHR0cENsaWVudE1vZHVsZSxcbiAgICAgIENvb2tpZUNvbnNlbnRNb2R1bGUsXG4gICAgICBOb3RpZmljYWNvZXNNb2R1bGUsXG4gICAgICBOZ2JNb2R1bGUuZm9yUm9vdCgpLFxuICAgICAgUm91dGVyTW9kdWxlLmZvclJvb3QoWy4uLkxBWU9VVF9ST1VURVNdLCB7IHVzZUhhc2g6IHRydWUsIGVuYWJsZVRyYWNpbmc6IHRydWUgfSksXHJcbiAgICAgIEpveXJpZGVNb2R1bGUuZm9yUm9vdCgpXHJcbiAgICBdLFxyXG4gICAgZGVjbGFyYXRpb25zOiBbXHJcbiAgICAgIEVycm9yQ29tcG9uZW50LFxyXG4gICAgICBKaGlNYWluQ29tcG9uZW50LFxyXG4gICAgICBOYXZiYXJDb21wb25lbnQsXHJcbiAgICAgIEZvb3RlckNvbXBvbmVudCxcclxuICAgICAgQWN0aXZlTWVudURpcmVjdGl2ZSxcclxuICAgICAgUGFnZVJpYmJvbkNvbXBvbmVudFxyXG4gICAgXSxcclxuICAgIGV4cG9ydHM6IFtcclxuICAgICAgUm91dGVyTW9kdWxlLFxyXG4gICAgICBFcnJvckNvbXBvbmVudCxcclxuICAgICAgSmhpTWFpbkNvbXBvbmVudCxcclxuICAgICAgTmF2YmFyQ29tcG9uZW50LFxyXG4gICAgICBGb290ZXJDb21wb25lbnQsXHJcbiAgICAgIEFjdGl2ZU1lbnVEaXJlY3RpdmUsXHJcbiAgICAgIFBhZ2VSaWJib25Db21wb25lbnRcclxuICAgIF0sXHJcbiAgICBwcm92aWRlcnM6IFtcclxuICAgICAgT3B0aW9uc1Byb3ZpZGVyXHJcbiAgICBdLFxyXG4gICAgZW50cnlDb21wb25lbnRzOiBbSm95cmlkZVN0ZXBDb21wb25lbnRdLFxyXG4gICAgc2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBMYXlvdXRzTW9kdWxlIHtcclxufVxyXG4iLCJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0h0dHBDbGllbnQsIEh0dHBQYXJhbXN9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcclxuXHJcbmNvbnN0IFNFUlZFUl9BUElfVVJMID0gJy4vJztcclxuXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXHJcbmV4cG9ydCBjbGFzcyBBY3RpdmF0ZVNlcnZpY2Uge1xyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50KSB7fVxyXG5cclxuICAgIGdldChrZXk6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoU0VSVkVSX0FQSV9VUkwgKyAnYXBpL2FjdGl2YXRlJywge1xyXG4gICAgICAgICAgICBwYXJhbXM6IG5ldyBIdHRwUGFyYW1zKCkuc2V0KCdrZXknLCBrZXkpXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTmdiTW9kYWxSZWYgfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuXHJcbmltcG9ydCB7IEFjdGl2YXRlU2VydmljZSB9IGZyb20gJy4vYWN0aXZhdGUuc2VydmljZSc7XHJcbmltcG9ydCB7TG9naW5Nb2RhbFNlcnZpY2V9IGZyb20gJy4uLy4uL2xvZ2luL2xvZ2luLW1vZGFsLnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2poaS1hY3RpdmF0ZScsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vYWN0aXZhdGUuY29tcG9uZW50Lmh0bWwnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBY3RpdmF0ZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgICBlcnJvcjogc3RyaW5nO1xyXG4gICAgc3VjY2Vzczogc3RyaW5nO1xyXG4gICAgbW9kYWxSZWY6IE5nYk1vZGFsUmVmO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICBwcml2YXRlIGFjdGl2YXRlU2VydmljZTogQWN0aXZhdGVTZXJ2aWNlLFxyXG4gICAgICBwcml2YXRlIGxvZ2luTW9kYWxTZXJ2aWNlOiBMb2dpbk1vZGFsU2VydmljZSxcclxuICAgICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGVcclxuICAgICkge31cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLnJvdXRlLnF1ZXJ5UGFyYW1zLnN1YnNjcmliZShwYXJhbXMgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmFjdGl2YXRlU2VydmljZS5nZXQocGFyYW1zWydrZXknXSkuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgICAgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3VjY2VzcyA9ICdPSyc7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3VjY2VzcyA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvciA9ICdFUlJPUic7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgbG9naW4oKSB7XHJcbiAgICAgICAgdGhpcy5tb2RhbFJlZiA9IHRoaXMubG9naW5Nb2RhbFNlcnZpY2Uub3BlbigpO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7IFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuXHJcbmltcG9ydCB7IEFjdGl2YXRlQ29tcG9uZW50IH0gZnJvbSAnLi9hY3RpdmF0ZS5jb21wb25lbnQnO1xyXG5cclxuZXhwb3J0IGNvbnN0IGFjdGl2YXRlUm91dGU6IFJvdXRlID0ge1xyXG4gICAgcGF0aDogJ2FjdGl2YXRlJyxcclxuICAgIGNvbXBvbmVudDogQWN0aXZhdGVDb21wb25lbnQsXHJcbiAgICBkYXRhOiB7XHJcbiAgICAgICAgYXV0aG9yaXRpZXM6IFtdLFxyXG4gICAgICAgIHBhZ2VUaXRsZTogJ0F0aXZhw4PCp8ODwqNvJ1xyXG4gICAgfVxyXG59O1xyXG4iLCJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0h0dHBDbGllbnR9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcclxuXHJcbmNvbnN0IFNFUlZFUl9BUElfVVJMID0gJy4vJztcclxuXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXHJcbmV4cG9ydCBjbGFzcyBQYXNzd29yZFNlcnZpY2Uge1xyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50KSB7fVxyXG5cclxuICAgIHNhdmUobmV3UGFzc3dvcmQ6IHN0cmluZywgY3VycmVudFBhc3N3b3JkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChTRVJWRVJfQVBJX1VSTCArICdhcGkvYWNjb3VudC9jaGFuZ2UtcGFzc3dvcmQnLCB7IGN1cnJlbnRQYXNzd29yZCwgbmV3UGFzc3dvcmQgfSk7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUGFzc3dvcmRTZXJ2aWNlIH0gZnJvbSAnLi9wYXNzd29yZC5zZXJ2aWNlJztcclxuaW1wb3J0IHtQcmluY2lwYWx9IGZyb20gJy4uLy4uL2F1dGgvcHJpbmNpcGFsLnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2poaS1wYXNzd29yZCcsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vcGFzc3dvcmQuY29tcG9uZW50Lmh0bWwnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQYXNzd29yZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgICBkb05vdE1hdGNoOiBzdHJpbmc7XHJcbiAgICBlcnJvcjogc3RyaW5nO1xyXG4gICAgc3VjY2Vzczogc3RyaW5nO1xyXG4gICAgYWNjb3VudDogYW55O1xyXG4gICAgY3VycmVudFBhc3N3b3JkOiBzdHJpbmc7XHJcbiAgICBuZXdQYXNzd29yZDogc3RyaW5nO1xyXG4gICAgY29uZmlybVBhc3N3b3JkOiBzdHJpbmc7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgIHByaXZhdGUgcGFzc3dvcmRTZXJ2aWNlOiBQYXNzd29yZFNlcnZpY2UsXHJcbiAgICAgIHByaXZhdGUgcHJpbmNpcGFsOiBQcmluY2lwYWxcclxuICAgICkge31cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLnByaW5jaXBhbC5pZGVudGl0eSgpLnRoZW4oYWNjb3VudCA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuYWNjb3VudCA9IGFjY291bnQ7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY2hhbmdlUGFzc3dvcmQoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMubmV3UGFzc3dvcmQgIT09IHRoaXMuY29uZmlybVBhc3N3b3JkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLnN1Y2Nlc3MgPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLmRvTm90TWF0Y2ggPSAnRVJST1InO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZG9Ob3RNYXRjaCA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMucGFzc3dvcmRTZXJ2aWNlLnNhdmUodGhpcy5uZXdQYXNzd29yZCwgdGhpcy5jdXJyZW50UGFzc3dvcmQpLnN1YnNjcmliZShcclxuICAgICAgICAgICAgICAgICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN1Y2Nlc3MgPSAnT0snO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN1Y2Nlc3MgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSAnRVJST1InO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQge1JvdXRlfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5cclxuaW1wb3J0IHtQYXNzd29yZENvbXBvbmVudH0gZnJvbSAnLi9wYXNzd29yZC5jb21wb25lbnQnO1xyXG5pbXBvcnQge1VzZXJSb3V0ZUFjY2Vzc1NlcnZpY2V9IGZyb20gJy4uLy4uL2F1dGgvdXNlci1yb3V0ZS1hY2Nlc3Mtc2VydmljZSc7XHJcblxyXG5leHBvcnQgY29uc3QgcGFzc3dvcmRSb3V0ZTogUm91dGUgPSB7XHJcbiAgICBwYXRoOiAncGFzc3dvcmQnLFxyXG4gICAgY29tcG9uZW50OiBQYXNzd29yZENvbXBvbmVudCxcclxuICAgIGRhdGE6IHtcclxuICAgICAgICBhdXRob3JpdGllczogWydST0xFX1BPUlRBTCcsJ1JPTEVfQURNSU4nXSxcclxuICAgICAgICBwYWdlVGl0bGU6ICdTZW5oYSdcclxuICAgIH0sXHJcbiAgICBjYW5BY3RpdmF0ZTogW1VzZXJSb3V0ZUFjY2Vzc1NlcnZpY2VdXHJcbn07XHJcbiIsImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7SHR0cENsaWVudH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gJ3J4anMnO1xyXG5cclxuY29uc3QgU0VSVkVSX0FQSV9VUkwgPSAnLi8nO1xyXG5cclxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcclxuZXhwb3J0IGNsYXNzIFBhc3N3b3JkUmVzZXRGaW5pc2hTZXJ2aWNlIHtcclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCkge31cclxuXHJcbiAgICBzYXZlKGtleUFuZFBhc3N3b3JkOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChTRVJWRVJfQVBJX1VSTCArICdhcGkvYWNjb3VudC9yZXNldC1wYXNzd29yZC9maW5pc2gnLCBrZXlBbmRQYXNzd29yZCk7XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHtBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIE9uSW5pdCwgUmVuZGVyZXJ9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge05nYk1vZGFsUmVmfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcbmltcG9ydCB7QWN0aXZhdGVkUm91dGV9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7UGFzc3dvcmRSZXNldEZpbmlzaFNlcnZpY2V9IGZyb20gJy4vcGFzc3dvcmQtcmVzZXQtZmluaXNoLnNlcnZpY2UnO1xyXG5pbXBvcnQge0xvZ2luTW9kYWxTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9sb2dpbi9sb2dpbi1tb2RhbC5zZXJ2aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdqaGktcGFzc3dvcmQtcmVzZXQtZmluaXNoJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9wYXNzd29yZC1yZXNldC1maW5pc2guY29tcG9uZW50Lmh0bWwnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQYXNzd29yZFJlc2V0RmluaXNoQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0IHtcclxuICAgIGNvbmZpcm1QYXNzd29yZDogc3RyaW5nO1xyXG4gICAgZG9Ob3RNYXRjaDogc3RyaW5nO1xyXG4gICAgZXJyb3I6IHN0cmluZztcclxuICAgIGtleU1pc3Npbmc6IGJvb2xlYW47XHJcbiAgICByZXNldEFjY291bnQ6IGFueTtcclxuICAgIHN1Y2Nlc3M6IHN0cmluZztcclxuICAgIG1vZGFsUmVmOiBOZ2JNb2RhbFJlZjtcclxuICAgIGtleTogc3RyaW5nO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgcGFzc3dvcmRSZXNldEZpbmlzaFNlcnZpY2U6IFBhc3N3b3JkUmVzZXRGaW5pc2hTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgbG9naW5Nb2RhbFNlcnZpY2U6IExvZ2luTW9kYWxTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZixcclxuICAgICAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlclxyXG4gICAgKSB7fVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIHRoaXMucm91dGUucXVlcnlQYXJhbXMuc3Vic2NyaWJlKHBhcmFtcyA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMua2V5ID0gcGFyYW1zWydrZXknXTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLnJlc2V0QWNjb3VudCA9IHt9O1xyXG4gICAgICAgIHRoaXMua2V5TWlzc2luZyA9ICF0aGlzLmtleTtcclxuICAgIH1cclxuXHJcbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJyNwYXNzd29yZCcpICE9IG51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5pbnZva2VFbGVtZW50TWV0aG9kKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJyNwYXNzd29yZCcpLCAnZm9jdXMnLCBbXSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZpbmlzaFJlc2V0KCkge1xyXG4gICAgICAgIHRoaXMuZG9Ob3RNYXRjaCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5lcnJvciA9IG51bGw7XHJcbiAgICAgICAgaWYgKHRoaXMucmVzZXRBY2NvdW50LnBhc3N3b3JkICE9PSB0aGlzLmNvbmZpcm1QYXNzd29yZCkge1xyXG4gICAgICAgICAgICB0aGlzLmRvTm90TWF0Y2ggPSAnRVJST1InO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucGFzc3dvcmRSZXNldEZpbmlzaFNlcnZpY2Uuc2F2ZSh7IGtleTogdGhpcy5rZXksIG5ld1Bhc3N3b3JkOiB0aGlzLnJlc2V0QWNjb3VudC5wYXNzd29yZCB9KS5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAgICAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWNjZXNzID0gJ09LJztcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdWNjZXNzID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gJ0VSUk9SJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbG9naW4oKSB7XHJcbiAgICAgICAgdGhpcy5tb2RhbFJlZiA9IHRoaXMubG9naW5Nb2RhbFNlcnZpY2Uub3BlbigpO1xyXG4gICAgfVxyXG59XHJcbiIsImltcG9ydCB7IFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuXHJcbmltcG9ydCB7IFBhc3N3b3JkUmVzZXRGaW5pc2hDb21wb25lbnQgfSBmcm9tICcuL3Bhc3N3b3JkLXJlc2V0LWZpbmlzaC5jb21wb25lbnQnO1xyXG5cclxuZXhwb3J0IGNvbnN0IHBhc3N3b3JkUmVzZXRGaW5pc2hSb3V0ZTogUm91dGUgPSB7XHJcbiAgICBwYXRoOiAncmVzZXQvZmluaXNoJyxcclxuICAgIGNvbXBvbmVudDogUGFzc3dvcmRSZXNldEZpbmlzaENvbXBvbmVudCxcclxuICAgIGRhdGE6IHtcclxuICAgICAgICBhdXRob3JpdGllczogW10sXHJcbiAgICAgICAgcGFnZVRpdGxlOiAnU2VuaGEnXHJcbiAgICB9XHJcbn07XHJcbiIsImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7SHR0cENsaWVudH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gJ3J4anMnO1xyXG5cclxuY29uc3QgU0VSVkVSX0FQSV9VUkwgPSAnLi8nO1xyXG5cclxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcclxuZXhwb3J0IGNsYXNzIFBhc3N3b3JkUmVzZXRJbml0U2VydmljZSB7XHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50KSB7fVxyXG5cclxuICBzYXZlVHdvRmFjdG9yKHJlc2V0QWNjb3VudDogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChTRVJWRVJfQVBJX1VSTCArICdhcGkvYWNjb3VudC9yZXNldC1wYXNzd29yZC10d29mYWN0b3IvaW5pdCcsIHJlc2V0QWNjb3VudCk7XHJcbiAgfVxyXG5cclxuICBzYXZlKG1haWw6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoU0VSVkVSX0FQSV9VUkwgKyAnYXBpL2FjY291bnQvcmVzZXQtcGFzc3dvcmQvaW5pdCcsIG1haWwsIHsgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyB9KTtcclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHtBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIE9uSW5pdCwgUmVuZGVyZXJ9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1Bhc3N3b3JkUmVzZXRJbml0U2VydmljZX0gZnJvbSAnLi9wYXNzd29yZC1yZXNldC1pbml0LnNlcnZpY2UnO1xyXG5pbXBvcnQge0VNQUlMX05PVF9GT1VORF9UWVBFfSBmcm9tICcuLi8uLi8uLi91dGlsL2Vycm9yLmNvbnN0YW50cyc7XHJcbmltcG9ydCB7T3B0aW9uc1Byb3ZpZGVyfSBmcm9tICcuLi8uLi8uLi91dGlsL29wdGlvbnMtcHJvdmlkZXInO1xyXG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7VXRpbEZ1bmN0aW9uc30gZnJvbSBcIi4uLy4uLy4uL3V0aWxcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnamhpLXBhc3N3b3JkLXJlc2V0LWluaXQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9wYXNzd29yZC1yZXNldC1pbml0LmNvbXBvbmVudC5odG1sJ1xyXG59KVxyXG5leHBvcnQgY2xhc3MgUGFzc3dvcmRSZXNldEluaXRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xyXG4gIGVycm9yOiBzdHJpbmc7XHJcbiAgZXJyb3JFbWFpbE5vdEV4aXN0czogc3RyaW5nO1xyXG4gIHJlc2V0QWNjb3VudDogYW55O1xyXG4gIHR3b0ZhY3RvcjogYm9vbGVhbjtcclxuICByZXNldEJ5TG9naW5PckVtYWlsOiBib29sZWFuO1xyXG4gIHN1Y2Nlc3M6IHN0cmluZztcclxuICBlbWFpbFN1Y2Vzczogc3RyaW5nO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcGFzc3dvcmRSZXNldEluaXRTZXJ2aWNlOiBQYXNzd29yZFJlc2V0SW5pdFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG9wdGlvbnNQcm92aWRlcjogT3B0aW9uc1Byb3ZpZGVyLFxyXG4gICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxyXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXJcclxuICApIHtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5yZXNldEFjY291bnQgPSB7fTtcclxuICAgIHRoaXMudHdvRmFjdG9yID0gdGhpcy5vcHRpb25zUHJvdmlkZXIudHdvRmFjdG9yO1xyXG4gICAgdGhpcy5yZXNldEJ5TG9naW5PckVtYWlsID0gdGhpcy5vcHRpb25zUHJvdmlkZXIucmVzZXRCeUxvZ2luT3JFbWFpbDtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIHRoaXMucmVuZGVyZXIuaW52b2tlRWxlbWVudE1ldGhvZCh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcjZW1haWxJbnB1dCcpLCAnZm9jdXMnLCBbXSk7XHJcbiAgfVxyXG5cclxuICByZXF1ZXN0UmVzZXQoKSB7XHJcbiAgICB0aGlzLmVycm9yID0gbnVsbDtcclxuICAgIHRoaXMuZXJyb3JFbWFpbE5vdEV4aXN0cyA9IG51bGw7XHJcblxyXG4gICAgbGV0IHJlc3VsdDogT2JzZXJ2YWJsZTxhbnk+O1xyXG5cclxuICAgIGlmICh0aGlzLnR3b0ZhY3Rvcikge1xyXG4gICAgICByZXN1bHQgPSB0aGlzLnBhc3N3b3JkUmVzZXRJbml0U2VydmljZS5zYXZlVHdvRmFjdG9yKHRoaXMucmVzZXRBY2NvdW50KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJlc3VsdCA9IHRoaXMucGFzc3dvcmRSZXNldEluaXRTZXJ2aWNlLnNhdmUodGhpcy5yZXNldEFjY291bnQuZW1haWwpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlc3VsdC5zdWJzY3JpYmUoXHJcbiAgICAgIHJlc3BvbnNlID0+IHtcclxuICAgICAgICBpZiAoVXRpbEZ1bmN0aW9ucy5pc1ZhbGlkT2JqZWN0KHJlc3BvbnNlLmJvZHkpID09PSB0cnVlICYmIFV0aWxGdW5jdGlvbnMuaXNWYWxpZFN0cmluZ09yQXJyYXkocmVzcG9uc2UuYm9keS5lbWFpbCkpe1xyXG4gICAgICAgICAgdGhpcy5lbWFpbFN1Y2VzcyA9ICcgKCcgKyByZXNwb25zZS5ib2R5LmVtYWlsICsgJyknO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnN1Y2Nlc3MgPSAnT0snO1xyXG4gICAgICB9LFxyXG4gICAgICByZXNwb25zZSA9PiB7XHJcbiAgICAgICAgdGhpcy5zdWNjZXNzID0gbnVsbDtcclxuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MDAgJiYgcmVzcG9uc2UuZXJyb3IudHlwZSA9PT0gRU1BSUxfTk9UX0ZPVU5EX1RZUEUpIHtcclxuICAgICAgICAgIHRoaXMuZXJyb3JFbWFpbE5vdEV4aXN0cyA9ICdFUlJPUic7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuZXJyb3IgPSAnRVJST1InO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5cclxuaW1wb3J0IHsgUGFzc3dvcmRSZXNldEluaXRDb21wb25lbnQgfSBmcm9tICcuL3Bhc3N3b3JkLXJlc2V0LWluaXQuY29tcG9uZW50JztcclxuXHJcbmV4cG9ydCBjb25zdCBwYXNzd29yZFJlc2V0SW5pdFJvdXRlOiBSb3V0ZSA9IHtcclxuICAgIHBhdGg6ICdyZXNldC9yZXF1ZXN0JyxcclxuICAgIGNvbXBvbmVudDogUGFzc3dvcmRSZXNldEluaXRDb21wb25lbnQsXHJcbiAgICBkYXRhOiB7XHJcbiAgICAgICAgYXV0aG9yaXRpZXM6IFtdLFxyXG4gICAgICAgIHBhZ2VUaXRsZTogJ1NlbmhhJ1xyXG4gICAgfVxyXG59O1xyXG4iLCJpbXBvcnQge0NvbXBvbmVudCwgT25Jbml0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtKaGlMYW5ndWFnZVNlcnZpY2V9IGZyb20gJ25nLWpoaXBzdGVyJztcclxuaW1wb3J0IHtBY2NvdW50U2VydmljZX0gZnJvbSAnLi4vLi4vYXV0aC9hY2NvdW50LnNlcnZpY2UnO1xyXG5pbXBvcnQge1ByaW5jaXBhbH0gZnJvbSAnLi4vLi4vYXV0aC9wcmluY2lwYWwuc2VydmljZSc7XHJcbmltcG9ydCB7SmhpTGFuZ3VhZ2VIZWxwZXJ9IGZyb20gJy4uLy4uL2xhbmd1YWdlL2xhbmd1YWdlLmhlbHBlcic7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnamhpLXNldHRpbmdzJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9zZXR0aW5ncy5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFNldHRpbmdzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgICBlcnJvcjogc3RyaW5nO1xuICAgIHN1Y2Nlc3M6IHN0cmluZztcbiAgICBzZXR0aW5nc0FjY291bnQ6IGFueTtcbiAgICBsYW5ndWFnZXM6IGFueVtdO1xuICAgIG1lbnNhZ2VtQXR1YWxpemFjYW9DYWRhc3RyYWw6IHN0cmluZztcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBhY2NvdW50OiBBY2NvdW50U2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHByaW5jaXBhbDogUHJpbmNpcGFsLFxyXG4gICAgICAgIHByaXZhdGUgbGFuZ3VhZ2VTZXJ2aWNlOiBKaGlMYW5ndWFnZVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBsYW5ndWFnZUhlbHBlcjogSmhpTGFuZ3VhZ2VIZWxwZXJcclxuICAgICkge31cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLnByaW5jaXBhbC5pZGVudGl0eSgpLnRoZW4oYWNjb3VudCA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldHRpbmdzQWNjb3VudCA9IHRoaXMuY29weUFjY291bnQoYWNjb3VudCk7XG4gICAgICAgICAgICB0aGlzLm1lbnNhZ2VtQXR1YWxpemFjYW9DYWRhc3RyYWwgPSBhY2NvdW50ICYmIGFjY291bnQubWVuc2FnZW1BdHVhbGl6YWNhb0NhZGFzdHJhbDtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubGFuZ3VhZ2VIZWxwZXIuZ2V0QWxsKCkudGhlbihsYW5ndWFnZXMgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxhbmd1YWdlcyA9IGxhbmd1YWdlcztcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzYXZlKCkge1xuICAgICAgICBpZiAodGhpcy5zZXR0aW5nc0FjY291bnQgJiYgdGhpcy5zZXR0aW5nc0FjY291bnQudGVsZWZvbmUpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZ3NBY2NvdW50LnRlbGVmb25lID0gdGhpcy5zZXR0aW5nc0FjY291bnQudGVsZWZvbmUucmVwbGFjZSgvXFxEL2csICcnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFjY291bnQuc2F2ZSh0aGlzLnNldHRpbmdzQWNjb3VudCkuc3Vic2NyaWJlKFxuICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBudWxsO1xuICAgICAgICAgICAgICAgIHRoaXMuc3VjY2VzcyA9ICdPSyc7XG4gICAgICAgICAgICAgICAgdGhpcy5wcmluY2lwYWwuaWRlbnRpdHkodHJ1ZSkudGhlbihhY2NvdW50ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nc0FjY291bnQgPSB0aGlzLmNvcHlBY2NvdW50KGFjY291bnQpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1lbnNhZ2VtQXR1YWxpemFjYW9DYWRhc3RyYWwgPSBhY2NvdW50ICYmIGFjY291bnQubWVuc2FnZW1BdHVhbGl6YWNhb0NhZGFzdHJhbDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLmxhbmd1YWdlU2VydmljZS5nZXRDdXJyZW50KCkudGhlbihjdXJyZW50ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zZXR0aW5nc0FjY291bnQubGFuZ0tleSAhPT0gY3VycmVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxhbmd1YWdlU2VydmljZS5jaGFuZ2VMYW5ndWFnZSh0aGlzLnNldHRpbmdzQWNjb3VudC5sYW5nS2V5KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdWNjZXNzID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IgPSAnRVJST1InO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBjb3B5QWNjb3VudChhY2NvdW50KSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgYWN0aXZhdGVkOiBhY2NvdW50LmFjdGl2YXRlZCxcclxuICAgICAgICAgICAgZW1haWw6IGFjY291bnQuZW1haWwsXHJcbiAgICAgICAgICAgIGZpcnN0TmFtZTogYWNjb3VudC5maXJzdE5hbWUsXHJcbiAgICAgICAgICAgIGxhbmdLZXk6IGFjY291bnQubGFuZ0tleSxcclxuICAgICAgICAgICAgbGFzdE5hbWU6IGFjY291bnQubGFzdE5hbWUsXG4gICAgICAgICAgICBsb2dpbjogYWNjb3VudC5sb2dpbixcbiAgICAgICAgICAgIGltYWdlVXJsOiBhY2NvdW50LmltYWdlVXJsLFxuICAgICAgICAgICAgdGVsZWZvbmU6IGFjY291bnQudGVsZWZvbmVcbiAgICAgICAgfTtcbiAgICB9XG59XG4iLCJpbXBvcnQge1JvdXRlfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5cclxuaW1wb3J0IHtTZXR0aW5nc0NvbXBvbmVudH0gZnJvbSAnLi9zZXR0aW5ncy5jb21wb25lbnQnO1xyXG5pbXBvcnQge1VzZXJSb3V0ZUFjY2Vzc1NlcnZpY2V9IGZyb20gJy4uLy4uL2F1dGgvdXNlci1yb3V0ZS1hY2Nlc3Mtc2VydmljZSc7XHJcblxyXG5leHBvcnQgY29uc3Qgc2V0dGluZ3NSb3V0ZTogUm91dGUgPSB7XHJcbiAgICBwYXRoOiAnc2V0dGluZ3MnLFxyXG4gICAgY29tcG9uZW50OiBTZXR0aW5nc0NvbXBvbmVudCxcclxuICAgIGRhdGE6IHtcclxuICAgICAgICBhdXRob3JpdGllczogWydST0xFX1BPUlRBTCcsICdST0xFX0FETUlOJ10sXHJcbiAgICAgICAgcGFnZVRpdGxlOiAnQ29uZmlndXJhw4PCp8ODwqNvJ1xyXG4gICAgfSxcclxuICAgIGNhbkFjdGl2YXRlOiBbVXNlclJvdXRlQWNjZXNzU2VydmljZV1cclxufTtcclxuIiwiaW1wb3J0IHtSb3V0ZXN9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7YWN0aXZhdGVSb3V0ZX0gZnJvbSAnLi9hY3RpdmF0ZS9hY3RpdmF0ZS5yb3V0ZSc7XHJcbmltcG9ydCB7cGFzc3dvcmRSb3V0ZX0gZnJvbSAnLi9wYXNzd29yZC9wYXNzd29yZC5yb3V0ZSc7XHJcbmltcG9ydCB7cGFzc3dvcmRSZXNldEZpbmlzaFJvdXRlfSBmcm9tICcuL3Bhc3N3b3JkLXJlc2V0L2ZpbmlzaC9wYXNzd29yZC1yZXNldC1maW5pc2gucm91dGUnO1xyXG5pbXBvcnQge3Bhc3N3b3JkUmVzZXRJbml0Um91dGV9IGZyb20gJy4vcGFzc3dvcmQtcmVzZXQvaW5pdC9wYXNzd29yZC1yZXNldC1pbml0LnJvdXRlJztcclxuaW1wb3J0IHtzZXR0aW5nc1JvdXRlfSBmcm9tICcuL3NldHRpbmdzL3NldHRpbmdzLnJvdXRlJztcclxuXHJcbmNvbnN0IEFDQ09VTlRfUk9VVEVTID0gW2FjdGl2YXRlUm91dGUsIHBhc3N3b3JkUm91dGUsIHBhc3N3b3JkUmVzZXRGaW5pc2hSb3V0ZSwgcGFzc3dvcmRSZXNldEluaXRSb3V0ZSwgc2V0dGluZ3NSb3V0ZV07XHJcblxyXG5leHBvcnQgY29uc3QgYWNjb3VudFN0YXRlOiBSb3V0ZXMgPSBbXHJcbiAgICB7XHJcbiAgICAgICAgcGF0aDogJycsXHJcbiAgICAgICAgY2hpbGRyZW46IEFDQ09VTlRfUk9VVEVTXHJcbiAgICB9XHJcbl07XHJcbiIsImltcG9ydCB7Q1VTVE9NX0VMRU1FTlRTX1NDSEVNQSwgTmdNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1JvdXRlck1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHtOZ0poaXBzdGVyTW9kdWxlfSBmcm9tICduZy1qaGlwc3Rlcic7XHJcbmltcG9ydCB7Rm9ybXNNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7YWNjb3VudFN0YXRlfSBmcm9tICcuL2FjY291bnQucm91dGUnO1xyXG5pbXBvcnQge0FjdGl2YXRlQ29tcG9uZW50fSBmcm9tICcuL2FjdGl2YXRlL2FjdGl2YXRlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7UGFzc3dvcmRDb21wb25lbnR9IGZyb20gJy4vcGFzc3dvcmQvcGFzc3dvcmQuY29tcG9uZW50JztcclxuaW1wb3J0IHtQYXNzd29yZFJlc2V0SW5pdENvbXBvbmVudH0gZnJvbSAnLi9wYXNzd29yZC1yZXNldC9pbml0L3Bhc3N3b3JkLXJlc2V0LWluaXQuY29tcG9uZW50JztcclxuaW1wb3J0IHtQYXNzd29yZFJlc2V0RmluaXNoQ29tcG9uZW50fSBmcm9tICcuL3Bhc3N3b3JkLXJlc2V0L2ZpbmlzaC9wYXNzd29yZC1yZXNldC1maW5pc2guY29tcG9uZW50JztcclxuaW1wb3J0IHtTZXR0aW5nc0NvbXBvbmVudH0gZnJvbSAnLi9zZXR0aW5ncy9zZXR0aW5ncy5jb21wb25lbnQnO1xyXG5pbXBvcnQge0ZpbmRMYW5ndWFnZU1vZHVsb30gZnJvbSAnLi4vbGFuZ3VhZ2UvZmluZC1sYW5ndWFnZS5tb2R1bG8nO1xyXG5pbXBvcnQge05nYk1vZHVsZX0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQge0ZvbnRBd2Vzb21lTW9kdWxlfSBmcm9tICdAZm9ydGF3ZXNvbWUvYW5ndWxhci1mb250YXdlc29tZSc7XHJcbmltcG9ydCB7bGlicmFyeX0gZnJvbSAnQGZvcnRhd2Vzb21lL2ZvbnRhd2Vzb21lLXN2Zy1jb3JlJztcclxuaW1wb3J0IHtmYVNhdmV9IGZyb20gJ0Bmb3J0YXdlc29tZS9mcmVlLXNvbGlkLXN2Zy1pY29ucy9mYVNhdmUnO1xyXG5pbXBvcnQge2ZhQ2hlY2t9IGZyb20gJ0Bmb3J0YXdlc29tZS9mcmVlLXNvbGlkLXN2Zy1pY29ucy9mYUNoZWNrJztcclxuaW1wb3J0IHtQYXNzd29yZFN0cmVuZ3RoTW9kdWxlfSBmcm9tICcuLi9jb21wb25lbnRzL3Bhc3N3b3JkLXN0cmVuZ3RoL3Bhc3N3b3JkLXN0cmVuZ3RoLm1vZHVsZSc7XHJcbmltcG9ydCB7T3B0aW9uc1Byb3ZpZGVyfSBmcm9tIFwiLi4vdXRpbC9vcHRpb25zLXByb3ZpZGVyXCI7XHJcblxyXG5saWJyYXJ5LmFkZChmYVNhdmUpO1xyXG5saWJyYXJ5LmFkZChmYUNoZWNrKTtcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgICBpbXBvcnRzOiBbXHJcbiAgICAgIENvbW1vbk1vZHVsZSxcclxuICAgICAgRm9ybXNNb2R1bGUsXHJcbiAgICAgIE5nSmhpcHN0ZXJNb2R1bGUsXHJcbiAgICAgIEZpbmRMYW5ndWFnZU1vZHVsbyxcclxuICAgICAgTmdiTW9kdWxlLmZvclJvb3QoKSxcclxuICAgICAgRm9udEF3ZXNvbWVNb2R1bGUsXHJcbiAgICAgIFBhc3N3b3JkU3RyZW5ndGhNb2R1bGUsXHJcbiAgICAgIFJvdXRlck1vZHVsZS5mb3JDaGlsZChhY2NvdW50U3RhdGUpXHJcbiAgICBdLFxyXG4gICAgZGVjbGFyYXRpb25zOiBbXHJcbiAgICAgIEFjdGl2YXRlQ29tcG9uZW50LFxyXG4gICAgICBQYXNzd29yZENvbXBvbmVudCxcclxuICAgICAgUGFzc3dvcmRSZXNldEluaXRDb21wb25lbnQsXHJcbiAgICAgIFBhc3N3b3JkUmVzZXRGaW5pc2hDb21wb25lbnQsXHJcbiAgICAgIFNldHRpbmdzQ29tcG9uZW50XHJcbiAgICBdLFxyXG4gICAgcHJvdmlkZXJzOiBbXHJcbiAgICAgIE9wdGlvbnNQcm92aWRlclxyXG4gICAgXSxcclxuICAgIHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQWNjb3VudE1vZHVsZSB7fVxyXG4iLCJpbXBvcnQge0NvbXBvbmVudCwgSW5wdXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0ZpbHRlclBpcGV9IGZyb20gJy4uLy4uL3BpcGUvZmlsdGVyLnBpcGUnO1xyXG5pbXBvcnQge0dyaWRBY3Rpb25zfSBmcm9tICcuL2dyaWQuYWN0aW9ucyc7XHJcbmltcG9ydCB7R3JpZFByaW50fSBmcm9tICcuL2dyaWQucHJpbnQnO1xyXG5pbXBvcnQge0dyaWRNYXNrfSBmcm9tICcuL2dyaWQubWFzayc7XHJcbmltcG9ydCB7TWFza1BpcGV9IGZyb20gJ25neC1tYXNrJztcclxuaW1wb3J0IFN3YWwgZnJvbSAnc3dlZXRhbGVydDInO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2poaS1ncmlkJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9ncmlkLmNvbXBvbmVudC5odG1sJyxcclxufSlcclxuZXhwb3J0IGNsYXNzIEdyaWRDb21wb25lbnQge1xyXG4gIHB1YmxpYyBzZWFyY2g6IHN0cmluZztcclxuICBwdWJsaWMgcGFnZVNpemUgPSA1O1xyXG4gIHB1YmxpYyBwYWdlID0gMTtcclxuICBwdWJsaWMgaXNWaWV3ID0gZmFsc2U7XHJcbiAgcHVibGljIGlzRWRpdCA9IGZhbHNlO1xyXG4gIHB1YmxpYyBpc0RlbGV0ZSA9IGZhbHNlO1xyXG4gIHB1YmxpYyBpc1NhdmUgPSBmYWxzZTtcclxuICBwdWJsaWMgaXNTZWFyY2ggPSB0cnVlO1xyXG4gIHB1YmxpYyBpc1ByaW50ID0gZmFsc2U7XHJcbiAgcHVibGljIGl0ZW5zOiBBcnJheTxhbnk+ID0gW107XHJcbiAgcHVibGljIGNvbHVtbnM6QXJyYXk8c3RyaW5nPiA9IFtdO1xyXG4gIHB1YmxpYyBoZWFkZXJzOiBBcnJheTxzdHJpbmc+ID0gW107XHJcbiAgcHVibGljIGdyaWRBY3Rpb25zOiBHcmlkQWN0aW9ucztcclxuICBwdWJsaWMgZ3JpZFByaW50OiBHcmlkUHJpbnQ7XHJcbiAgcHVibGljIGdyaWRNYXNrOiBHcmlkTWFzaztcclxuICBwdWJsaWMgcGxhY2Vob2xkZXI6IHN0cmluZyA9ICdQZXNxdWlzYXIgcG9yIHF1YWxxdWVyIGNhbXBvLi4uJztcclxuICBwdWJsaWMgaXRlbnNTaW5nbGV0b246IEFycmF5PGFueT4gPSBbXTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGZpbHRlclBpcGU6IEZpbHRlclBpcGUsXHJcbiAgICBwcml2YXRlIG1hc2tQaXBlOiBNYXNrUGlwZSkge1xyXG4gIH1cclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgaXNUb1ZpZXcoaXNUb1ZpZXc6IGJvb2xlYW4pIHtcclxuICAgICAgdGhpcy5pc1ZpZXcgPSBpc1RvVmlldztcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGlzVG9FZGl0KGlzRWRpdDogYm9vbGVhbikge1xyXG4gICAgdGhpcy5pc0VkaXQgPSBpc0VkaXQ7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBpc1RvRGVsZXRlKGlzRGVsZXRlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLmlzRGVsZXRlID0gaXNEZWxldGU7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBpc1RvU2F2ZShpc1NhdmU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuaXNTYXZlID0gaXNTYXZlO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgaXNUb1NlYXJjaChpc1NlYXJjaDogYm9vbGVhbikge1xyXG4gICAgdGhpcy5pc1NlYXJjaCA9IGlzU2VhcmNoO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgaXNUb1ByaW50KGlzUHJpbnQ6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuaXNQcmludCA9IGlzUHJpbnQ7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBzZXRQbGFjZWhvbGRlcihwbGFjZWhvbGRlcjogc3RyaW5nKSB7XHJcbiAgICAgIHRoaXMucGxhY2Vob2xkZXIgPSBwbGFjZWhvbGRlcjtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHNldEl0ZW5zKGl0ZW5zKSB7XHJcbiAgICB0aGlzLml0ZW5zID0gaXRlbnM7XHJcbiAgICB0aGlzLml0ZW5zU2luZ2xldG9uID0gaXRlbnM7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBzZXRDb2x1bW5zKGNvbHVtbnM6IFtdKSB7XHJcbiAgICB0aGlzLmNvbHVtbnMgPSBjb2x1bW5zO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgc2V0SGVhZGVycyhoZWFkZXJzOiBbXSkge1xyXG4gICAgdGhpcy5oZWFkZXJzID0gaGVhZGVycztcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IHNldE1hc2soZ3JpZE1hc2s6IEdyaWRNYXNrKSB7XHJcbiAgICB0aGlzLmdyaWRNYXNrID0gZ3JpZE1hc2s7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBhZGRMaXN0ZW5lcihjb21wb25lbnQ6IEdyaWRBY3Rpb25zIHwgR3JpZFByaW50KSB7XHJcbiAgICBpZiAoKGNvbXBvbmVudCBhcyBHcmlkQWN0aW9ucykudG9WaWV3KSB7XHJcbiAgICAgIHRoaXMuZ3JpZEFjdGlvbnMgPSBjb21wb25lbnQgYXMgR3JpZEFjdGlvbnM7XHJcbiAgICB9XHJcbiAgICBpZiAoKGNvbXBvbmVudCBhcyBHcmlkUHJpbnQpLnRvUHJpbnQpIHtcclxuICAgICAgdGhpcy5ncmlkUHJpbnQgPSBjb21wb25lbnQgYXMgR3JpZFByaW50O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGZpbHRlcigpIHtcclxuICAgIGlmICh0aGlzLnNlYXJjaCAhPT0gJycgJiYgdGhpcy5zZWFyY2ggIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHRoaXMuaXRlbnMgPSB0aGlzLmdldEl0ZW5zKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuY2xlYXIoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRWYWx1ZUl0ZW0oaXRlbTogYW55LCBjb2x1bW46IHN0cmluZyk6IGFueSB7XHJcbiAgICBjb25zdCBtYXNrID0gdGhpcy5nZXRNYXNrKGNvbHVtbik7XHJcbiAgICBjb25zdCB2YWx1ZSA9IGl0ZW1bY29sdW1uXTtcclxuICAgIGlmIChtYXNrICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgcmV0dXJuIHRoaXMubWFza1BpcGUudHJhbnNmb3JtKHZhbHVlLCBtYXNrKVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHZhbHVlXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEl0ZW5zKCk6IEFycmF5PGFueT4ge1xyXG4gICAgdGhpcy5pdGVucyA9IHRoaXMuaXRlbnNTaW5nbGV0b247XHJcbiAgICBsZXQgZmlsdGVyczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9O1xyXG5cclxuICAgIGZvciAobGV0IGNvbHVtbiBvZiB0aGlzLmNvbHVtbnMpIHtcclxuICAgICAgZmlsdGVyc1tjb2x1bW5dID0gdGhpcy5zZWFyY2g7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuc2VhcmNoLmxlbmd0aCA+IDIpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZmlsdGVyUGlwZS50cmFuc2Zvcm0odGhpcy5pdGVucywgZmlsdGVycyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuaXRlbnM7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldE1hc2soY29sdW1uKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGdyaWRNYXNrID0gdGhpcy5ncmlkTWFzaztcclxuICAgIGlmIChncmlkTWFzayAhPSBudWxsICYmIGNvbHVtbiA9PT0gZ3JpZE1hc2suY29sdW1uKSB7XHJcbiAgICAgIHJldHVybiBncmlkTWFzay5tYXNrO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyB0b1ZpZXcoaXRlbSkge1xyXG4gICAgICBpZiAodGhpcy5ncmlkQWN0aW9ucykge1xyXG4gICAgICAgIHRoaXMuZ3JpZEFjdGlvbnMudG9WaWV3KGl0ZW0pXHJcbiAgICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyB0b0VkaXQoaXRlbSkge1xyXG4gICAgaWYgKHRoaXMuZ3JpZEFjdGlvbnMpIHtcclxuICAgICAgdGhpcy5ncmlkQWN0aW9ucy50b0VkaXQoaXRlbSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyB0b0RlbGV0ZShpdGVtKSB7XHJcbiAgICBpZiAodGhpcy5ncmlkQWN0aW9ucykge1xyXG4gICAgICBTd2FsLmZpcmUoe1xyXG4gICAgICAgIHRpdGxlOiAnRGVzZWphIGV4Y2x1aXI/JyxcclxuICAgICAgICB0ZXh0OiBcIk9wZXJhw4PCp8ODwqNvIG7Dg8KjbyBwb2RlIHNlciBkZXNmZWl0YSFcIixcclxuICAgICAgICB0eXBlOiAnd2FybmluZycsXHJcbiAgICAgICAgc2hvd0NhbmNlbEJ1dHRvbjogdHJ1ZSxcclxuICAgICAgICBjb25maXJtQnV0dG9uQ29sb3I6ICcjMzA4NWQ2JyxcclxuICAgICAgICBjYW5jZWxCdXR0b25Db2xvcjogJyNkMzMnLFxyXG4gICAgICAgIGNvbmZpcm1CdXR0b25UZXh0OiAnU2ltIScsXHJcbiAgICAgICAgY2FuY2VsQnV0dG9uVGV4dDogJ07Dg8KjbydcclxuICAgICAgfSkudGhlbigocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlc3VsdC52YWx1ZSkge1xyXG4gICAgICAgICAgdGhpcy5ncmlkQWN0aW9ucy50b0RlbGV0ZShpdGVtKVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdG9TYXZlKCkge1xyXG4gICAgaWYgKHRoaXMuZ3JpZEFjdGlvbnMpIHtcclxuICAgICAgdGhpcy5ncmlkQWN0aW9ucy50b1NhdmUoKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHRvUHJpbnQoaXRlbSkge1xyXG4gICAgaWYgKHRoaXMuZ3JpZFByaW50KSB7XHJcbiAgICAgIHRoaXMuZ3JpZFByaW50LnRvUHJpbnQoaXRlbSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBjbGVhcigpIHtcclxuICAgIHRoaXMuc2VhcmNoID0gJyc7XHJcbiAgICB0aGlzLml0ZW5zID0gdGhpcy5pdGVuc1NpbmdsZXRvbjtcclxuICB9XHJcbn1cclxuIiwiaW1wb3J0IHtDVVNUT01fRUxFTUVOVFNfU0NIRU1BLCBOZ01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7Q29tbW9uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQge0ZvbnRBd2Vzb21lTW9kdWxlfSBmcm9tICdAZm9ydGF3ZXNvbWUvYW5ndWxhci1mb250YXdlc29tZSc7XHJcbmltcG9ydCB7bGlicmFyeX0gZnJvbSAnQGZvcnRhd2Vzb21lL2ZvbnRhd2Vzb21lLXN2Zy1jb3JlJztcclxuaW1wb3J0IHtmYVRpbWVzfSBmcm9tICdAZm9ydGF3ZXNvbWUvZnJlZS1zb2xpZC1zdmctaWNvbnMvZmFUaW1lcyc7XHJcbmltcG9ydCB7Rm9ybXNNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHtGaWx0ZXJQaXBlfSBmcm9tICcuLi8uLi9waXBlL2ZpbHRlci5waXBlJztcclxuaW1wb3J0IHtHcmlkQ29tcG9uZW50fSBmcm9tICcuL2dyaWQuY29tcG9uZW50JztcclxuaW1wb3J0IHtOZ2JNb2R1bGV9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHtOZ0poaXBzdGVyTW9kdWxlfSBmcm9tICduZy1qaGlwc3Rlcic7XHJcbmltcG9ydCB7TWFza1BpcGUsIE5neE1hc2tNb2R1bGV9IGZyb20gJ25neC1tYXNrJztcclxuXHJcbmxpYnJhcnkuYWRkKGZhVGltZXMpO1xyXG5cclxuQE5nTW9kdWxlKHtcclxuICAgIGltcG9ydHM6IFtcclxuICAgICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgICBGb3Jtc01vZHVsZSxcclxuICAgICAgRm9udEF3ZXNvbWVNb2R1bGUsXHJcbiAgICAgIE5neE1hc2tNb2R1bGUsXHJcbiAgICAgIE5nSmhpcHN0ZXJNb2R1bGUsXHJcbiAgICAgIE5nYk1vZHVsZS5mb3JSb290KClcclxuICAgIF0sXHJcbiAgICBkZWNsYXJhdGlvbnM6IFtHcmlkQ29tcG9uZW50XSxcclxuICAgIGV4cG9ydHM6IFtHcmlkQ29tcG9uZW50XSxcclxuICAgIHByb3ZpZGVyczogW0ZpbHRlclBpcGUsIE1hc2tQaXBlXSxcclxuICAgIHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgR3JpZE1vZHVsZSB7IH1cclxuIiwiZXhwb3J0IGludGVyZmFjZSBJR3JpZE1hc2sge1xyXG4gIGNvbHVtbj86IHN0cmluZztcclxuICBtYXNrPzogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgR3JpZE1hc2sgaW1wbGVtZW50cyBJR3JpZE1hc2sge1xyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgIHB1YmxpYyBjb2x1bW4/OiBzdHJpbmcsXHJcbiAgICAgIHB1YmxpYyBtYXNrPzogc3RyaW5nXHJcbiAgICApIHtcclxuICAgIH1cclxufVxyXG4iXSwibmFtZXMiOlsiQ3J5cHRvSlMuZW5jIiwiQ3J5cHRvSlMuQUVTIiwiQ3J5cHRvSlMucGFkIiwiQ3J5cHRvSlMubW9kZSIsInRzbGliXzEuX192YWx1ZXMiLCJ0c2xpYl8xLl9fZXh0ZW5kcyIsIkV2ZW50RW1pdHRlciIsIkRpcmVjdGl2ZSIsIk5HX1ZBTElEQVRPUlMiLCJFbGVtZW50UmVmIiwiSW5wdXQiLCJPdXRwdXQiLCJIb3N0TGlzdGVuZXIiLCJOZ01vZHVsZSIsIkh0dHBQYXJhbXMiLCJJbmplY3RhYmxlIiwiTmdiRGF0ZUFkYXB0ZXIiLCJOZ2JEYXRlUGFyc2VyRm9ybWF0dGVyIiwiSW5qZWN0aW9uVG9rZW4iLCJJbmplY3QiLCJMb2NrUGFnZSIsIkNvbXBvbmVudCIsIk5nYkFjdGl2ZU1vZGFsIiwiVmlld0NoaWxkIiwiTmdiTW9kYWwiLCJsaWJyYXJ5IiwiZmFzIiwiUGRmSnNWaWV3ZXJNb2R1bGUiLCJOZ2JNb2R1bGUiLCJGb250QXdlc29tZU1vZHVsZSIsIkNVU1RPTV9FTEVNRU5UU19TQ0hFTUEiLCJQaXBlIiwiZmFUaW1lcyIsImZhQmFuIiwiZmFCZWxsIiwiQ29tbW9uTW9kdWxlIiwiTmdKaGlwc3Rlck1vZHVsZSIsIkh0dHBDbGllbnQiLCJTZWN1cml0eUNvbnRleHQiLCJTYW5pdGl6ZXIiLCJKaGlDb25maWdTZXJ2aWNlIiwiVHJhbnNsYXRlU2VydmljZSIsIkpoaUV2ZW50TWFuYWdlciIsIkZvcm1zTW9kdWxlIiwidHJpZ2dlciIsInN0YXRlIiwic3R5bGUiLCJ0cmFuc2l0aW9uIiwiYW5pbWF0ZSIsIkpveXJpZGVTZXJ2aWNlIiwiTmcyRml0dGV4dE1vZHVsZSIsIkJyb3dzZXJBbmltYXRpb25zTW9kdWxlIiwiU0VSVkVSX0FQSV9VUkwiLCJOR19WQUxVRV9BQ0NFU1NPUiIsImZvcndhcmRSZWYiLCJTdWJqZWN0IiwiSmhpTGFuZ3VhZ2VTZXJ2aWNlIiwiU2Vzc2lvblN0b3JhZ2VTZXJ2aWNlIiwiUm91dGVyIiwiTG9jYXRpb24iLCJEb21TYW5pdGl6ZXIiLCJUZW1wbGF0ZVJlZiIsIlZpZXdDb250YWluZXJSZWYiLCJtYXAiLCJPYnNlcnZhYmxlIiwiTG9jYWxTdG9yYWdlU2VydmljZSIsImZvcmtKb2luIiwiTmdab25lIiwiQ2hhbmdlRGV0ZWN0b3JSZWYiLCJSZWNhcHRjaGFDb21tb25Nb2R1bGUiLCJSZWNhcHRjaGFNb2R1bGUiLCJCZWhhdmlvclN1YmplY3QiLCJmYUV5ZSIsIkNvb2tpZVNlcnZpY2UiLCJSZW5kZXJlciIsImRlYm91bmNlVGltZSIsImlzRGV2TW9kZSIsImZhVXNlclBsdXMiLCJOZ3hNYXNrTW9kdWxlIiwiZmFVc2VyIiwiUmVuZGVyZXJGYWN0b3J5MiIsIlRpdGxlIiwiUm91dGVyTW9kdWxlIiwiSmhpUGFyc2VMaW5rcyIsIkFjdGl2YXRlZFJvdXRlIiwiRGF0ZVBpcGUiLCJKaGlSZXNvbHZlUGFnaW5nUGFyYW1zIiwiRU5USVRZX1NUQVRFUyIsIkh0dHBSZXNwb25zZSIsImNhdGNoRXJyb3IiLCJ0aHJvd0Vycm9yIiwidGFwIiwiSHR0cEVycm9yUmVzcG9uc2UiLCJmaWx0ZXIiLCJvZiIsIkpoaURhdGFVdGlscyIsIk5nYlBhZ2luYXRpb25Db25maWciLCJlbmFibGVQcm9kTW9kZSIsIlRpcG9QZXNzb2FOYW1lc3BhY2UiLCJTaXR1YWNhb0NvbnRyaWJ1aW50ZU5hbWVzcGFjZSIsIlRpcG9SZXNwb25zYXZlbE5hbWVzcGFjZSIsIlRpcG9JbW92ZWxOYW1lc3BhY2UiLCJQbGF0Zm9ybUxvY2F0aW9uIiwiTmF2aWdhdGlvbkVuZCIsIkxvYWRpbmdCYXJIdHRwQ2xpZW50TW9kdWxlIiwiSm95cmlkZU1vZHVsZSIsIkpveXJpZGVTdGVwQ29tcG9uZW50IiwiZmFTYXZlIiwiZmFDaGVjayIsIk1hc2tQaXBlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7SUFBQTs7Ozs7Ozs7Ozs7Ozs7SUFjQTtJQUVBLElBQUksYUFBYSxHQUFHLFVBQVMsQ0FBQyxFQUFFLENBQUM7UUFDN0IsYUFBYSxHQUFHLE1BQU0sQ0FBQyxjQUFjO2FBQ2hDLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxZQUFZLEtBQUssSUFBSSxVQUFVLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQzVFLFVBQVUsQ0FBQyxFQUFFLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUM7Z0JBQUUsSUFBSSxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztvQkFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUMvRSxPQUFPLGFBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDL0IsQ0FBQyxDQUFDO0FBRUYsYUFBZ0IsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzFCLGFBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDcEIsU0FBUyxFQUFFLEtBQUssSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsRUFBRTtRQUN2QyxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsS0FBSyxJQUFJLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3pGLENBQUM7QUFFRCxJQUFPLElBQUksUUFBUSxHQUFHO1FBQ2xCLFFBQVEsR0FBRyxNQUFNLENBQUMsTUFBTSxJQUFJLFNBQVMsUUFBUSxDQUFDLENBQUM7WUFDM0MsS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ2pELENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2pCLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQztvQkFBRSxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO3dCQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDaEY7WUFDRCxPQUFPLENBQUMsQ0FBQztTQUNaLENBQUE7UUFDRCxPQUFPLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQzNDLENBQUMsQ0FBQTtBQUVELGFBeUJnQixTQUFTLENBQUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsU0FBUztRQUN2RCxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxPQUFPLENBQUMsRUFBRSxVQUFVLE9BQU8sRUFBRSxNQUFNO1lBQ3JELFNBQVMsU0FBUyxDQUFDLEtBQUssSUFBSSxJQUFJO2dCQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7YUFBRTtZQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUFFLEVBQUU7WUFDM0YsU0FBUyxRQUFRLENBQUMsS0FBSyxJQUFJLElBQUk7Z0JBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2FBQUU7WUFBQyxPQUFPLENBQUMsRUFBRTtnQkFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFBRSxFQUFFO1lBQzlGLFNBQVMsSUFBSSxDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsVUFBVSxPQUFPLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDLEVBQUU7WUFDL0ksSUFBSSxDQUFDLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLFVBQVUsSUFBSSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1NBQ3pFLENBQUMsQ0FBQztJQUNQLENBQUM7QUFFRCxhQUFnQixXQUFXLENBQUMsT0FBTyxFQUFFLElBQUk7UUFDckMsSUFBSSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxjQUFhLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7Z0JBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2pILE9BQU8sQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxPQUFPLE1BQU0sS0FBSyxVQUFVLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxjQUFhLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN6SixTQUFTLElBQUksQ0FBQyxDQUFDLElBQUksT0FBTyxVQUFVLENBQUMsSUFBSSxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO1FBQ2xFLFNBQVMsSUFBSSxDQUFDLEVBQUU7WUFDWixJQUFJLENBQUM7Z0JBQUUsTUFBTSxJQUFJLFNBQVMsQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO1lBQzlELE9BQU8sQ0FBQztnQkFBRSxJQUFJO29CQUNWLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSTt3QkFBRSxPQUFPLENBQUMsQ0FBQztvQkFDN0osSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7d0JBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQ3hDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQzt3QkFDVCxLQUFLLENBQUMsQ0FBQzt3QkFBQyxLQUFLLENBQUM7NEJBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQzs0QkFBQyxNQUFNO3dCQUM5QixLQUFLLENBQUM7NEJBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDOzRCQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQzt3QkFDeEQsS0FBSyxDQUFDOzRCQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQzs0QkFBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDOzRCQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDOzRCQUFDLFNBQVM7d0JBQ2pELEtBQUssQ0FBQzs0QkFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQzs0QkFBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDOzRCQUFDLFNBQVM7d0JBQ2pEOzRCQUNJLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtnQ0FBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dDQUFDLFNBQVM7NkJBQUU7NEJBQzVHLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dDQUFFLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dDQUFDLE1BQU07NkJBQUU7NEJBQ3RGLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtnQ0FBRSxDQUFDLENBQUMsS0FB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
|