@universis/ngx-tables 6.1.2 → 6.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/universis-ngx-tables.umd.js +15 -6
- package/bundles/universis-ngx-tables.umd.js.map +1 -1
- package/bundles/universis-ngx-tables.umd.min.js +1 -1
- package/bundles/universis-ngx-tables.umd.min.js.map +1 -1
- package/esm2015/lib/components/advanced-list/advanced-list.component.js +17 -5
- package/esm5/lib/components/advanced-list/advanced-list.component.js +17 -6
- package/fesm2015/universis-ngx-tables.js +15 -5
- package/fesm2015/universis-ngx-tables.js.map +1 -1
- package/fesm5/universis-ngx-tables.js +15 -6
- package/fesm5/universis-ngx-tables.js.map +1 -1
- package/lib/components/advanced-list/advanced-list.component.d.ts +2 -1
- package/package.json +2 -2
- package/universis-ngx-tables.metadata.json +1 -1
|
@@ -3783,7 +3783,9 @@ var AdvancedListComponent = /** @class */ (function () {
|
|
|
3783
3783
|
this._toastService = _toastService;
|
|
3784
3784
|
this._modalService = _modalService;
|
|
3785
3785
|
this._userActivityService = _userActivityService;
|
|
3786
|
+
this.recordsTotal = NaN;
|
|
3786
3787
|
this.allowSaveOption = true;
|
|
3788
|
+
this.readonly = false;
|
|
3787
3789
|
}
|
|
3788
3790
|
/**
|
|
3789
3791
|
* @return {?}
|
|
@@ -3861,6 +3863,9 @@ var AdvancedListComponent = /** @class */ (function () {
|
|
|
3861
3863
|
if (routeData["category"]) {
|
|
3862
3864
|
_this.category = _this._translateService.instant(routeData["category"]);
|
|
3863
3865
|
}
|
|
3866
|
+
if (Object.prototype.hasOwnProperty.call(routeData, 'readonly')) {
|
|
3867
|
+
_this.readonly = routeData["readonly"];
|
|
3868
|
+
}
|
|
3864
3869
|
/** @type {?} */
|
|
3865
3870
|
var defaultConfiguration = AdvancedTableConfiguration.cast(_this.tableConfiguration, true);
|
|
3866
3871
|
/** @type {?} */
|
|
@@ -3875,11 +3880,14 @@ var AdvancedListComponent = /** @class */ (function () {
|
|
|
3875
3880
|
});
|
|
3876
3881
|
column.formatString = "#/" + url_1.join('/') + "/(modal:${id}/edit)";
|
|
3877
3882
|
}
|
|
3878
|
-
|
|
3879
|
-
|
|
3880
|
-
table_1.config = Object.assign({
|
|
3883
|
+
/** @type {?} */
|
|
3884
|
+
var setConfig = Object.assign({
|
|
3881
3885
|
model: entitySet.Name
|
|
3882
3886
|
}, defaultConfiguration);
|
|
3887
|
+
if (Object.prototype.hasOwnProperty.call(setConfig, 'selectable')) {
|
|
3888
|
+
setConfig.selectable = !_this.readonly;
|
|
3889
|
+
}
|
|
3890
|
+
table_1.config = setConfig;
|
|
3883
3891
|
// fetch data
|
|
3884
3892
|
// fetch data
|
|
3885
3893
|
table_1.fetch(true);
|
|
@@ -3964,7 +3972,7 @@ var AdvancedListComponent = /** @class */ (function () {
|
|
|
3964
3972
|
{ type: Component, args: [{
|
|
3965
3973
|
// tslint:disable-next-line:component-selector
|
|
3966
3974
|
selector: 'app-advanced-list',
|
|
3967
|
-
template: "<div>\n <div class=\"row\" *ngIf=\"description\">\n <div class=\"col-auto\">\n <h2>{{description}}</h2>\n <ng-container *ngIf=\"longDescription\">\n <p [innerHTML]=\"longDescription\"></p>\n </ng-container>\n </div>\n </div>\n <div class=\"row\" *ngIf=\"searchConfiguration\">\n <div class=\"col-12\" [ngVar]=\"{}\" #filter=\"ngVar\">\n <app-advanced-table-search #advancedSearch [(filter)]=\"filter.value\" [collapsed]=\"true\" [table]=\"table\" [allowSave]=\"allowSaveOption\">\n <advanced-search>\n <app-advanced-search-form [form]=\"searchConfiguration\" (filterChange)=\"advancedSearch.asyncAdvancedSearch()\" #search [(filter)]=\"filter.value\"></app-advanced-search-form>\n </advanced-search>\n </app-advanced-table-search>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-auto mt-4\">\n <div class=\"font-xl text-secondary\" *ngIf=\"recordsTotal
|
|
3975
|
+
template: "<div>\n <div class=\"row\" *ngIf=\"description\">\n <div class=\"col-auto\">\n <h2>{{description}}</h2>\n <ng-container *ngIf=\"longDescription\">\n <p [innerHTML]=\"longDescription\"></p>\n </ng-container>\n </div>\n </div>\n <div class=\"row\" *ngIf=\"searchConfiguration\">\n <div class=\"col-12\" [ngVar]=\"{}\" #filter=\"ngVar\">\n <app-advanced-table-search #advancedSearch [(filter)]=\"filter.value\" [collapsed]=\"true\" [table]=\"table\" [allowSave]=\"allowSaveOption\">\n <advanced-search>\n <app-advanced-search-form [form]=\"searchConfiguration\" (filterChange)=\"advancedSearch.asyncAdvancedSearch()\" #search [(filter)]=\"filter.value\"></app-advanced-search-form>\n </advanced-search>\n </app-advanced-table-search>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-auto mt-4\">\n <div class=\"font-xl text-secondary\" *ngIf=\"recordsTotal > 1\">\n <span>{{recordsTotal}}</span><span> </span><span [translate]=\"'Tables.Items'\"></span>\n </div>\n <div class=\"font-xl text-secondary\" *ngIf=\"recordsTotal === 1\">\n <span>{{recordsTotal}}</span><span> </span><span [translate]=\"'Tables.Item'\"></span>\n </div>\n </div>\n <div class=\"pull-right ml-auto mr-3 mt-3\">\n <div class=\"font-lg btn-toolbar mt-3\">\n <a *ngIf=\"readonly === false && table.selected && table.selected.length\"\n class=\"text-danger text-decoration-none mr-2\" href=\"javascript:void(0)\" (click)=\"remove()\">\n <span>-</span><span> </span><span [translate]=\"'Tables.RemoveItem'\"></span>\n </a>\n <a *ngIf=\"readonly === false\" class=\"text-indigo text-decoration-none\" [routerLink]=\"['.', { outlets:{ modal:'add'} }]\">\n <span>+</span><span> </span><span [translate]=\"'Tables.AddItem'\"></span>\n </a>\n </div>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-12 mb-4\">\n <app-advanced-table [selectable]=\"true\" #table\n [showFooter]=\"false\"\n (load)=\"onDataLoad($event)\" [height]=\"600\"></app-advanced-table>\n </div>\n </div>\n <router-modal></router-modal>\n</div>\n"
|
|
3968
3976
|
}] }
|
|
3969
3977
|
];
|
|
3970
3978
|
/** @nocollapse */
|
|
@@ -3985,7 +3993,8 @@ var AdvancedListComponent = /** @class */ (function () {
|
|
|
3985
3993
|
tableConfiguration: [{ type: Input, args: ['tableConfiguration',] }],
|
|
3986
3994
|
searchConfiguration: [{ type: Input, args: ['searchConfiguration',] }],
|
|
3987
3995
|
table: [{ type: ViewChild, args: ['table',] }],
|
|
3988
|
-
allowSaveOption: [{ type: Input, args: ['allowSaveOption',] }]
|
|
3996
|
+
allowSaveOption: [{ type: Input, args: ['allowSaveOption',] }],
|
|
3997
|
+
readonly: [{ type: Input, args: ['readonly',] }]
|
|
3989
3998
|
};
|
|
3990
3999
|
return AdvancedListComponent;
|
|
3991
4000
|
}());
|
|
@@ -7994,4 +8003,4 @@ var TablesModule = /** @class */ (function () {
|
|
|
7994
8003
|
|
|
7995
8004
|
export { AdvancedListComponent, AdvancedRowActionComponent, AdvancedSearchFormComponent, AdvancedSelectComponent, AdvancedSelectService, AdvancedTableConfigurationResolver, AdvancedSearchConfigurationResolver, AdvancedColumnFormatter, NestedPropertyFormatter, ButtonFormatter, LinkFormatter, ActionLinkFormatter, ActionButtonFormatter, ActionSplitButtonFormatter, SelectRowFormatter, TemplateFormatter, TrueFalseFormatter, TranslationFormatter, DateTimeFormatter, NgClassFormatter, LanguageFormatter, COLUMN_FORMATTERS, ExportLimitExceededError, AdvancedTableConfiguration, AdvancedTableComponent, AdvancedTableSettingsComponent, AdvancedTableSearchBaseComponent, AdvancedTableSearchComponent, FORMATTERS, AdvancedFilterValueProvider, AdvancedTableModalBaseTemplate, AdvancedTableModalBaseComponent, SimpleHeaderToolsComponent, TableSimpleHeaderComponent, AdvancedTableNotNullError, AdvancedTableEditorDirective, MAX_EXPORT_ITEMS, BtnExpDirective, AdvancedAggregatorComponent, AdvancedAggregatorListComponent, AddItemsComponent, AdvancedAggregatorPipe, ParseTitlePipe, AdvancedAggregatorService, TablesModule, ActivatedTableService, ColumnSelectorService, ColumnSelectorComponent, tableReducer, initialState, tableInitialState, tableReducers, featureName, getTablesState, selectTable, AdvancedSearchState as ɵa, AdvancedTableState as ɵc, AdvancedSearchRouterState as ɵd };
|
|
7996
8005
|
|
|
7997
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5pdmVyc2lzLW5neC10YWJsZXMuanMubWFwIiwic291cmNlcyI6WyJuZzovL0B1bml2ZXJzaXMvbmd4LXRhYmxlcy9saWIvY29tcG9uZW50cy9hZHZhbmNlZC10YWJsZS9hZHZhbmNlZC10YWJsZS5mb3JtYXR0ZXJzLnRzIiwibmc6Ly9AdW5pdmVyc2lzL25neC10YWJsZXMvbGliL2NvbXBvbmVudHMvYWR2YW5jZWQtdGFibGUvYWR2YW5jZWQtZmlsdGVyLXZhbHVlLXByb3ZpZGVyLnNlcnZpY2UudHMiLCJuZzovL0B1bml2ZXJzaXMvbmd4LXRhYmxlcy9saWIvY29tcG9uZW50cy9jb2x1bW4tc2VsZWN0b3IvY29sdW1uLXNlbGVjdG9yLmNvbXBvbmVudC50cyIsIm5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzL2xpYi9jb21wb25lbnRzL2NvbHVtbi1zZWxlY3Rvci9jb2x1bW4tc2VsZWN0b3Iuc2VydmljZS50cyIsIm5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzL2xpYi90YWJsZXMuYWN0aXZhdGVkLXRhYmxlLnNlcnZpY2UudHMiLCJuZzovL0B1bml2ZXJzaXMvbmd4LXRhYmxlcy9saWIvZGlyZWN0aXZlcy9idG5leHAuZGlyZWN0aXZlLnRzIiwibmc6Ly9AdW5pdmVyc2lzL25neC10YWJsZXMvbGliL2NvbXBvbmVudHMvYWR2YW5jZWQtdGFibGUvYWR2YW5jZWQtdGFibGUuY29tcG9uZW50LnRzIiwibmc6Ly9AdW5pdmVyc2lzL25neC10YWJsZXMvbGliL2NvbXBvbmVudHMvYWR2YW5jZWQtbGlzdC9hZHZhbmNlZC1saXN0LmNvbXBvbmVudC50cyIsIm5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzL2xpYi9jb21wb25lbnRzL2FkdmFuY2VkLXJvdy1hY3Rpb24vYWR2YW5jZWQtcm93LWFjdGlvbi5jb21wb25lbnQudHMiLCJuZzovL0B1bml2ZXJzaXMvbmd4LXRhYmxlcy9saWIvY29tcG9uZW50cy9hZHZhbmNlZC10YWJsZS9hZHZhbmNlZC10YWJsZS1zZWFyY2gtYmFzZS50cyIsIm5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzL2xpYi9jb21wb25lbnRzL2FkdmFuY2VkLXNlYXJjaC1mb3JtL2FkdmFuY2VkLXNlYXJjaC1mb3JtLmNvbXBvbmVudC50cyIsIm5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzL2xpYi9jb21wb25lbnRzL2FkdmFuY2VkLXRhYmxlLW1vZGFsL2FkdmFuY2VkLXRhYmxlLW1vZGFsLWJhc2UuY29tcG9uZW50LnRzIiwibmc6Ly9AdW5pdmVyc2lzL25neC10YWJsZXMvbGliL2NvbXBvbmVudHMvYWR2YW5jZWQtc2VsZWN0L2FkdmFuY2VkLXNlbGVjdC5jb21wb25lbnQudHMiLCJuZzovL0B1bml2ZXJzaXMvbmd4LXRhYmxlcy9saWIvY29tcG9uZW50cy9hZHZhbmNlZC1zZWxlY3QvYWR2YW5jZWQtc2VsZWN0LnNlcnZpY2UudHMiLCJuZzovL0B1bml2ZXJzaXMvbmd4LXRhYmxlcy9saWIvY29tcG9uZW50cy9hZHZhbmNlZC10YWJsZS9hZHZhbmNlZC10YWJsZS1yZXNvbHZlcnMudHMiLCJuZzovL0B1bml2ZXJzaXMvbmd4LXRhYmxlcy9saWIvY29tcG9uZW50cy9hZHZhbmNlZC10YWJsZS9hZHZhbmNlZC10YWJsZS1zZXR0aW5ncy5jb21wb25lbnQudHMiLCJuZzovL0B1bml2ZXJzaXMvbmd4LXRhYmxlcy9saWIvY29tcG9uZW50cy9hZHZhbmNlZC10YWJsZS9hZHZhbmNlZC10YWJsZS1zZWFyY2guY29tcG9uZW50LnRzIiwibmc6Ly9AdW5pdmVyc2lzL25neC10YWJsZXMvbGliL2NvbXBvbmVudHMvYWR2YW5jZWQtdGFibGUvYWR2YW5jZWQtdGFibGUuZm9ybWF0dGVycy5pbnRlcmZhY2UudHMiLCJuZzovL0B1bml2ZXJzaXMvbmd4LXRhYmxlcy9saWIvY29tcG9uZW50cy90YWJsZS1zaW1wbGUtaGVhZGVyL3RhYmxlLXNpbXBsZS1oZWFkZXIuY29tcG9uZW50LnRzIiwibmc6Ly9AdW5pdmVyc2lzL25neC10YWJsZXMvbGliL2RpcmVjdGl2ZXMvYWR2YW5jZWQtdGFibGUtZWRpdG9yLmRpcmVjdGl2ZS50cyIsIm5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzL2xpYi9zZXJ2aWNlcy9hZHZhbmNlZC1hZ2dyZWdhdG9yL2FkdmFuY2VkLWFnZ3JlZ2F0b3Iuc2VydmljZS50cyIsIm5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzL2xpYi9jb21wb25lbnRzL2FkdmFuY2VkLWFnZ3JlZ2F0b3IvYWR2YW5jZWQtYWdncmVnYXRvci5jb21wb25lbnQudHMiLCJuZzovL0B1bml2ZXJzaXMvbmd4LXRhYmxlcy9saWIvY29tcG9uZW50cy9hZHZhbmNlZC1hZ2dyZWdhdG9yLWxpc3QvYWR2YW5jZWQtYWdncmVnYXRvci1saXN0LmNvbXBvbmVudC50cyIsIm5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzL2xpYi9jb21wb25lbnRzL2FkZC1pdGVtcy9hZGQtaXRlbXMuY29tcG9uZW50LnRzIiwibmc6Ly9AdW5pdmVyc2lzL25neC10YWJsZXMvbGliL3BpcGVzL2FkdmFuY2VkLWFnZ3JlZ2F0b3IucGlwZS50cyIsIm5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzL2xpYi9waXBlcy9hZHZhbnNlZC1hZ2dyZWdhdG9yLWxpc3QtdGl0bGUtcGFyc2UucGlwZS50cyIsIm5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzL2xpYi9pMThuL3RhYmxlcy5lbC50cyIsIm5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzL2xpYi9pMThuL3RhYmxlcy5lbi50cyIsIm5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzL2xpYi9hY3Rpb25zL3RhYmxlLmFjdGlvbnMudHMiLCJuZzovL0B1bml2ZXJzaXMvbmd4LXRhYmxlcy9saWIvcmVkdWNlcnMvaW5kZXgudHMiLCJuZzovL0B1bml2ZXJzaXMvbmd4LXRhYmxlcy9saWIvZGlyZWN0aXZlcy9hZHZhbmNlLXRhYmxlLXN0YXRlLmRpcmVjdGl2ZS50cyIsIm5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzL2xpYi9kaXJlY3RpdmVzL2FkdmFuY2Utc2VhcmNoLXN0YXRlLmRpcmVjdGl2ZS50cyIsIm5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzL2xpYi9kaXJlY3RpdmVzL2FkdmFuY2VkLXNlYXJjaC1yb3V0ZXItc3RhdGUuZGlyZWN0aXZlLnRzIiwibmc6Ly9AdW5pdmVyc2lzL25neC10YWJsZXMvbGliL3RhYmxlcy5tb2R1bGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdGVtcGxhdGUsIGF0IH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IFRhYmxlQ29sdW1uQ29uZmlndXJhdGlvbiB9IGZyb20gJy4vYWR2YW5jZWQtdGFibGUuaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgRGF0ZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0ICogYXMgSVNPNjM5MSBmcm9tICdpc28tNjM5LTEvYnVpbGQnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIE5hdmlnYXRpb25FeHRyYXMsIFJvdXRlciwgVXJsVHJlZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5kZWNsYXJlIHZhciBqUXVlcnk6IGFueTtcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBZHZhbmNlZENvbHVtbkZvcm1hdHRlciBpbXBsZW1lbnRzIFRhYmxlQ29sdW1uQ29uZmlndXJhdGlvbiB7XG5cbiAgcHVibGljIHN0YXRpYyB0ZW1wbGF0ZUNhY2hlID0gbmV3IE1hcDxzdHJpbmcsIChkYXRhOiBhbnkpID0+IHN0cmluZz4oKTtcblxuICBwcm90ZWN0ZWQgaW5qZWN0b3I/OiBJbmplY3RvcjtcbiAgcHVibGljIGNsYXNzTmFtZT86IHN0cmluZztcbiAgcHVibGljIGRlZmF1bHRDb250ZW50Pzogc3RyaW5nO1xuICBwdWJsaWMgZm9ybWF0U3RyaW5nPzogc3RyaW5nO1xuICBwdWJsaWMgZm9ybWF0dGVyPzogc3RyaW5nO1xuICBwdWJsaWMgaGlkZGVuPzogYm9vbGVhbjtcbiAgcHVibGljIG5hbWU/OiBzdHJpbmc7XG4gIHB1YmxpYyBvcmRlcj86IHN0cmluZztcbiAgcHVibGljIHByb3BlcnR5Pzogc3RyaW5nO1xuICBwdWJsaWMgc29ydGFibGU/OiBib29sZWFuO1xuICBwdWJsaWMgdGl0bGUgPSAnJztcbiAgcHVibGljIGZvcm1hdE9wdGlvbnM/OiBhbnk7XG4gIHB1YmxpYyBhY3Rpb25zPzogQXJyYXk8YW55PjtcblxuICBwdWJsaWMgc3RhdGljIHRlbXBsYXRlKGV4cHI6IHN0cmluZyk6IChkYXRhOiBhbnkpID0+IHN0cmluZyB7XG4gICAgbGV0IHJlc3VsdCA9IEFkdmFuY2VkQ29sdW1uRm9ybWF0dGVyLnRlbXBsYXRlQ2FjaGUuZ2V0KGV4cHIpO1xuICAgIGlmICh0eXBlb2YgcmVzdWx0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICByZXN1bHQgPSB0ZW1wbGF0ZShleHByKTtcbiAgICBBZHZhbmNlZENvbHVtbkZvcm1hdHRlci50ZW1wbGF0ZUNhY2hlLnNldChleHByLCByZXN1bHQpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwdWJsaWMgYWJzdHJhY3QgcmVuZGVyKGRhdGE6IGFueSwgdHlwZTogc3RyaW5nLCByb3c6IGFueSwgbWV0YTogYW55KTogYW55O1xuXG4gIHByb3RlY3RlZCBjcmVhdGVVcmxUcmVlKGRhdGE6IGFueSwgb3B0aW9uczogeyBjb21tYW5kczogYW55W10sIG5hdmlnYXRpb25FeHRyYXM/OiBOYXZpZ2F0aW9uRXh0cmFzIH0pOiBVcmxUcmVlIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRpb25zLmNvbW1hbmRzKSAmJiB0aGlzLmluamVjdG9yKSB7XG4gICAgICBjb25zdCBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUgPSB0aGlzLmluamVjdG9yLmdldChBY3RpdmF0ZWRSb3V0ZSk7XG4gICAgICBjb25zdCByb3V0ZXI6IFJvdXRlciA9IHRoaXMuaW5qZWN0b3IuZ2V0KFJvdXRlcik7XG4gICAgICBjb25zdCBjb21tYW5kcyA9IG9wdGlvbnMuY29tbWFuZHMubWFwKChjb21tYW5kKSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgY29tbWFuZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICByZXR1cm4gQWR2YW5jZWRDb2x1bW5Gb3JtYXR0ZXIudGVtcGxhdGUoY29tbWFuZCkoZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbW1hbmQub3V0bGV0cykge1xuICAgICAgICAgIGNvbnN0IGNvbW1hbmRPdXRsZXRzID0ge307XG4gICAgICAgICAgT2JqZWN0LmtleXMoY29tbWFuZC5vdXRsZXRzKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY29tbWFuZC5vdXRsZXRzLCBrZXkpKSB7XG4gICAgICAgICAgICAgIGNvbnN0IG91dGxldCA9IGNvbW1hbmQub3V0bGV0c1trZXldO1xuICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvdXRsZXQpKSB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvbW1hbmRPdXRsZXRzLCBrZXksIHtcbiAgICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIHZhbHVlOiBvdXRsZXQubWFwKCh4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBBZHZhbmNlZENvbHVtbkZvcm1hdHRlci50ZW1wbGF0ZSh4KShkYXRhKTtcbiAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb21tYW5kT3V0bGV0cywga2V5LCB7XG4gICAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICB2YWx1ZTogb3V0bGV0LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG91dGxldHM6IGNvbW1hbmRPdXRsZXRzLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbW1hbmQ7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0ge307XG4gICAgICBsZXQgcmVwbGFjZVVybCA9IHRydWU7XG4gICAgICBjb25zdCBxdWVyeVBhcmFtRXh0cmFzID0gb3B0aW9ucy5uYXZpZ2F0aW9uRXh0cmFzICYmIG9wdGlvbnMubmF2aWdhdGlvbkV4dHJhcy5xdWVyeVBhcmFtcztcbiAgICAgIGlmIChxdWVyeVBhcmFtRXh0cmFzKSB7XG4gICAgICAgIE9iamVjdC5rZXlzKHF1ZXJ5UGFyYW1FeHRyYXMpLm1hcCgoa2V5KSA9PiB7XG4gICAgICAgICAgY29uc3QgdGV4dCA9IHF1ZXJ5UGFyYW1FeHRyYXNba2V5XTtcbiAgICAgICAgICBxdWVyeVBhcmFtc1trZXldID0gQWR2YW5jZWRDb2x1bW5Gb3JtYXR0ZXIudGVtcGxhdGUodGV4dCkoZGF0YSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbnMubmF2aWdhdGlvbkV4dHJhcyAmJiB0eXBlb2Ygb3B0aW9ucy5uYXZpZ2F0aW9uRXh0cmFzLnJlcGxhY2VVcmwgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJlcGxhY2VVcmwgPSBvcHRpb25zLm5hdmlnYXRpb25FeHRyYXMucmVwbGFjZVVybDtcbiAgICAgIH1cbiAgICAgIGxldCBza2lwTG9jYXRpb25DaGFuZ2UgPSBmYWxzZTtcbiAgICAgIGlmIChvcHRpb25zLm5hdmlnYXRpb25FeHRyYXMgJiYgdHlwZW9mIG9wdGlvbnMubmF2aWdhdGlvbkV4dHJhcy5za2lwTG9jYXRpb25DaGFuZ2UgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHNraXBMb2NhdGlvbkNoYW5nZSA9IG9wdGlvbnMubmF2aWdhdGlvbkV4dHJhcy5za2lwTG9jYXRpb25DaGFuZ2U7XG4gICAgICB9XG5cbiAgICAgIGxldCBmcmFnbWVudDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgaWYgKG9wdGlvbnMubmF2aWdhdGlvbkV4dHJhcyAmJiB0eXBlb2Ygb3B0aW9ucy5uYXZpZ2F0aW9uRXh0cmFzLmZyYWdtZW50ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBmcmFnbWVudCA9IG9wdGlvbnMubmF2aWdhdGlvbkV4dHJhcy5mcmFnbWVudDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJvdXRlci5jcmVhdGVVcmxUcmVlKGNvbW1hbmRzLFxuICAgICAgICB7XG4gICAgICAgICAgZnJhZ21lbnQsXG4gICAgICAgICAgcmVsYXRpdmVUbzogYWN0aXZhdGVkUm91dGUsXG4gICAgICAgICAgcXVlcnlQYXJhbXMsXG4gICAgICAgICAgcmVwbGFjZVVybCxcbiAgICAgICAgICBza2lwTG9jYXRpb25DaGFuZ2UsXG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT25BZHZhbmNlZENvbHVtbkFmdGVyUmVuZGVyIHtcbiAgYWZ0ZXJSZW5kZXIoY2VsbDogYW55LCBjZWxsRGF0YTogYW55LCByb3dEYXRhOiBhbnksIHJvd0luZGV4OiBudW1iZXIsIGNvbEluZGV4OiBudW1iZXIpOiB2b2lkO1xufVxuXG5leHBvcnQgY2xhc3MgTmVzdGVkUHJvcGVydHlGb3JtYXR0ZXIgZXh0ZW5kcyBBZHZhbmNlZENvbHVtbkZvcm1hdHRlciB7XG4gIHB1YmxpYyByZW5kZXIoZGF0YSwgdHlwZSwgcm93LCBtZXRhKSB7XG4gICAgLy8gZ2V0IGNvbHVtblxuICAgIGNvbnN0IGNvbHVtbiA9IG1ldGEuc2V0dGluZ3MuYW9Db2x1bW5zW21ldGEuY29sXTtcbiAgICBpZiAoY29sdW1uICYmIGNvbHVtbi5kYXRhKSB7XG4gICAgICByZXR1cm4gYXQocm93LCBjb2x1bW4uZGF0YS5yZXBsYWNlKC9cXC8vZywgJy4nKSk7XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEJ1dHRvbkZvcm1hdHRlciBleHRlbmRzIEFkdmFuY2VkQ29sdW1uRm9ybWF0dGVyIHtcbiAgcHVibGljIHJlbmRlcihkYXRhLCB0eXBlLCByb3csIG1ldGEpIHtcbiAgICBpZiAoZGF0YSA9PSBudWxsIHx8IHRoaXMuaW5qZWN0b3IgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICAvLyBnZXQgZm9ybWF0IG9wdGlvbnNcbiAgICBjb25zdCBmb3JtYXRPcHRpb25zID0gT2JqZWN0LmFzc2lnbih7XG4gICAgICBidXR0b25DbGFzczogJ2J0biBidG4tZGVmYXVsdCcsXG4gICAgfSwgdGhpcy5mb3JtYXRPcHRpb25zKTtcbiAgICAvLyBnZXQgdGV4dCBjb250ZW50XG4gICAgbGV0IGJ1dHRvblRleHQ6IHN0cmluZztcbiAgICBsZXQgYnV0dG9uVGl0bGUgPSAnJztcbiAgICBpZiAoZm9ybWF0T3B0aW9ucy5idXR0b25UZXh0KSB7XG4gICAgICBidXR0b25UZXh0ID0gdGhpcy5pbmplY3Rvci5nZXQoVHJhbnNsYXRlU2VydmljZSkuaW5zdGFudChmb3JtYXRPcHRpb25zLmJ1dHRvblRleHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBidXR0b25UZXh0ID0gZm9ybWF0T3B0aW9ucy5idXR0b25Db250ZW50O1xuICAgIH1cbiAgICBpZiAoZm9ybWF0T3B0aW9ucy5idXR0b25UaXRsZSkge1xuICAgICAgYnV0dG9uVGl0bGUgPSB0aGlzLmluamVjdG9yLmdldChUcmFuc2xhdGVTZXJ2aWNlKS5pbnN0YW50KGZvcm1hdE9wdGlvbnMuYnV0dG9uVGl0bGUpO1xuICAgIH1cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmZvcm1hdE9wdGlvbnMuY29tbWFuZHMpKSB7XG4gICAgICBjb25zdCByb3V0ZXJMaW5rID0gdGhpcy5jcmVhdGVVcmxUcmVlKHJvdywgdGhpcy5mb3JtYXRPcHRpb25zKTtcbiAgICAgIHJldHVybiBgPGEgY2xhc3M9XCIke2Zvcm1hdE9wdGlvbnMuYnV0dG9uQ2xhc3N9XCIgdGl0bGU9XCIke2J1dHRvblRpdGxlfVwiIGhyZWY9XCIjJHtyb3V0ZXJMaW5rfVwiPiR7YnV0dG9uVGV4dH08L2E+YDtcbiAgICB9XG4gICAgLy8gYW5kIHJldHVybiBidXR0b25cbiAgICBjb25zdCBocmVmID0gQWR2YW5jZWRDb2x1bW5Gb3JtYXR0ZXIudGVtcGxhdGUodGhpcy5mb3JtYXRTdHJpbmcgYXMgc3RyaW5nKShyb3cpO1xuICAgIHJldHVybiBgPGEgY2xhc3M9XCIke2Zvcm1hdE9wdGlvbnMuYnV0dG9uQ2xhc3N9XCIgdGl0bGU9XCIke2J1dHRvblRpdGxlfVwiIGhyZWY9XCIke2hyZWZ9XCI+JHtidXR0b25UZXh0fTwvYT5gO1xuICB9XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIExpbmtGb3JtYXR0ZXIgZXh0ZW5kcyBBZHZhbmNlZENvbHVtbkZvcm1hdHRlciB7XG4gIHB1YmxpYyByZW5kZXIoZGF0YTogYW55LCB0eXBlOiBzdHJpbmcsIHJvdzogYW55LCBtZXRhOiBhbnkpOiBhbnkge1xuICAgIC8vIGdldCBjb2x1bW5cbiAgICBjb25zdCBjb2x1bW4gPSBtZXRhLnNldHRpbmdzLmFvQ29sdW1uc1ttZXRhLmNvbF07XG4gICAgaWYgKGNvbHVtbiAmJiBjb2x1bW4uZGF0YSkge1xuICAgICAgcmV0dXJuIGA8YSBocmVmPVwiJHsoQWR2YW5jZWRDb2x1bW5Gb3JtYXR0ZXIudGVtcGxhdGUodGhpcy5mb3JtYXRTdHJpbmcgYXMgc3RyaW5nKShyb3cpKX1cIj4ke2RhdGF9PC9hPmA7XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFjdGlvbkxpbmtGb3JtYXR0ZXIgZXh0ZW5kcyBBZHZhbmNlZENvbHVtbkZvcm1hdHRlclxuICBpbXBsZW1lbnRzIE9uQWR2YW5jZWRDb2x1bW5BZnRlclJlbmRlciB7XG4gIHB1YmxpYyByZW5kZXIoZGF0YTogYW55LCB0eXBlOiBzdHJpbmcsIHJvdzogYW55LCBtZXRhOiBhbnkpOiBhbnkge1xuICAgIC8vIGdldCBjb2x1bW5cbiAgICBjb25zdCBjb2x1bW4gPSBtZXRhLnNldHRpbmdzLmFvQ29sdW1uc1ttZXRhLmNvbF07XG5cbiAgICBpZiAoY29sdW1uICYmIGNvbHVtbi5kYXRhKSB7XG4gICAgICBjb25zdCBhY3Rpb25zID0gdGhpcy5hY3Rpb25zIHx8IFtdO1xuICAgICAgbGV0IGluZGV4ID0gMTtcbiAgICAgIGZvciAoY29uc3QgYWN0aW9uIG9mIGFjdGlvbnMpIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihhY3Rpb24sIHtcbiAgICAgICAgICBuYW1lOiBhY3Rpb24ubmFtZSB8fCBgYWN0aW9uJHtpbmRleH1gLFxuICAgICAgICB9KTtcbiAgICAgICAgaW5kZXggKz0gMTtcbiAgICAgIH1cbiAgICAgIC8vIHJldHVybiB0aGUgZHJvcGRvd24gbWVudSB3aXRoIDMgZG90c1xuICAgICAgcmV0dXJuIGA8ZGl2IGNsYXNzPSdkcm9wZG93biBkZXRhaWxzLWNvbnRyb2wnIGRhdGEtaWQ9JyR7ZGF0YX0nIGRhdGEtdHlwZT0nc3R1ZGVudCcgPlxuICAgICAgICAgICAgICAgICAgICA8YSBpZD1cImRyb3Bkb3duTWVudUJ1dHRvbi0ke2RhdGF9XCJcbiAgICAgICAgICAgICAgICAgICAgICBkYXRhLXRvZ2dsZT1cImRyb3Bkb3duXCIgYXJpYS1oYXNwb3B1cD1cInRydWVcIiBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhLTJ4IHRleHQtZG90c1wiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tbWVudVwiIGFyaWEtbGFiZWxsZWRieT1cImRyb3Bkb3duTWVudUJ1dHRvbi0ke2RhdGF9XCI+XG4gICAgICAgICAgICAgICAgICAgICAke2FjdGlvbnMubWFwKCh4KSA9PiB7XG4gICAgICAgIGlmICh4LnR5cGUgPT09ICdkaXZpZGVyJykge1xuICAgICAgICAgIHJldHVybiBgPGRpdiBjbGFzcz1cImRyb3Bkb3duLWRpdmlkZXJcIj48L2Rpdj5gO1xuICAgICAgICB9XG4gICAgICAgIGlmICh4LmZvcm1hdE9wdGlvbnMgJiYgeC5mb3JtYXRPcHRpb25zLmNvbW1hbmRzKSB7XG4gICAgICAgICAgY29uc3QgdXJsVHJlZSA9IHRoaXMuY3JlYXRlVXJsVHJlZShyb3csIHguZm9ybWF0T3B0aW9ucyk7XG4gICAgICAgICAgcmV0dXJuIGA8YSBkYXRhLW5hbWU9JyR7eC5uYW1lfScgY2xhc3M9XCJkcm9wZG93bi1pdGVtJHt0eXBlb2YgeC5jbGFzc05hbWUgPT09ICdzdHJpbmcnICYmIHguY2xhc3NOYW1lLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gIGAgJHt4LmNsYXNzTmFtZS50cmltKCl9YCA6ICcnfVwiIGhyZWY9XCIjJHt1cmxUcmVlICYmIHVybFRyZWUudG9TdHJpbmcoKX1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3RoaXMuaW5qZWN0b3IgJiYgdGhpcy5pbmplY3Rvci5nZXQoVHJhbnNsYXRlU2VydmljZSkuaW5zdGFudCh4LnRpdGxlKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPmA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGA8YSBkYXRhLW5hbWU9JyR7eC5uYW1lfScgY2xhc3M9XCJkcm9wZG93bi1pdGVtJHt0eXBlb2YgeC5jbGFzc05hbWUgPT09ICdzdHJpbmcnICYmIHguY2xhc3NOYW1lLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICA/IGAgJHt4LmNsYXNzTmFtZS50cmltKCl9YCA6ICcnfVwiIGhyZWY9XCIke0FkdmFuY2VkQ29sdW1uRm9ybWF0dGVyLnRlbXBsYXRlKHguaHJlZikocm93KX1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgJHt0aGlzLmluamVjdG9yICYmIHRoaXMuaW5qZWN0b3IuZ2V0KFRyYW5zbGF0ZVNlcnZpY2UpLmluc3RhbnQoeC50aXRsZSl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2E+YDtcbiAgICAgIH0pXG4gICAgICAgICAgLmpvaW4oJycpfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5gO1xuICAgIH1cbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gIH1cbiAgcHVibGljIGFmdGVyUmVuZGVyKGNlbGw6IGFueSwgY2VsbERhdGE6IGFueSwgcm93RGF0YTogYW55LCByb3dJbmRleDogbnVtYmVyLCBjb2xJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgLy8gYXNzaWduIGJvb3RzdHJhcCBkcm9wZG93biAoPylcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQWN0aW9uQnV0dG9uRm9ybWF0dGVyIGV4dGVuZHMgQWR2YW5jZWRDb2x1bW5Gb3JtYXR0ZXJcbiAgaW1wbGVtZW50cyBPbkFkdmFuY2VkQ29sdW1uQWZ0ZXJSZW5kZXIge1xuICBwdWJsaWMgcmVuZGVyKGRhdGE6IGFueSwgdHlwZTogc3RyaW5nLCByb3c6IGFueSwgbWV0YTogYW55KTogYW55IHtcbiAgICAvLyBnZXQgY29sdW1uXG4gICAgY29uc3QgY29sdW1uID0gbWV0YS5zZXR0aW5ncy5hb0NvbHVtbnNbbWV0YS5jb2xdO1xuXG4gICAgaWYgKGNvbHVtbiAmJiBjb2x1bW4uZGF0YSAmJiB0aGlzLmluamVjdG9yKSB7XG4gICAgICBjb25zdCBhY3Rpb25zID0gdGhpcy5hY3Rpb25zIHx8IFtdO1xuICAgICAgbGV0IGluZGV4ID0gMTtcbiAgICAgIGZvciAoY29uc3QgYWN0aW9uIG9mIGFjdGlvbnMpIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihhY3Rpb24sIHtcbiAgICAgICAgICBuYW1lOiBhY3Rpb24ubmFtZSB8fCBgYWN0aW9uJHtpbmRleH1gLFxuICAgICAgICB9KTtcbiAgICAgICAgaW5kZXggKz0gMTtcbiAgICAgIH1cbiAgICAgIGxldCBidXR0b25UZXh0OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICBpZiAodGhpcy5mb3JtYXRPcHRpb25zICYmIHRoaXMuZm9ybWF0T3B0aW9ucy5idXR0b25UZXh0KSB7XG4gICAgICAgIC8vIGlmIGJ1dHRvbiB0ZXh0IGlzIGEgbGl0ZXJhbCBleHByZXNzaW9uXG4gICAgICAgIGlmICh0aGlzLmZvcm1hdE9wdGlvbnMuYnV0dG9uVGV4dC5pbmNsdWRlcygnJHsnKSkge1xuICAgICAgICAgIC8vIHVzZSB0ZW1wbGF0ZVxuICAgICAgICAgIGJ1dHRvblRleHQgPSBBZHZhbmNlZENvbHVtbkZvcm1hdHRlci50ZW1wbGF0ZSh0aGlzLmZvcm1hdE9wdGlvbnMuYnV0dG9uVGV4dCkocm93KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBvdGhlcndpc2UgdHJhbnNsYXRlIGl0XG4gICAgICAgICAgYnV0dG9uVGV4dCA9IHRoaXMuaW5qZWN0b3IuZ2V0KFRyYW5zbGF0ZVNlcnZpY2UpLmluc3RhbnQodGhpcy5mb3JtYXRPcHRpb25zLmJ1dHRvblRleHQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBsZXQgYnV0dG9uVGl0bGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgIGlmICh0aGlzLmZvcm1hdE9wdGlvbnMgJiYgdGhpcy5mb3JtYXRPcHRpb25zLmJ1dHRvblRpdGxlKSB7XG4gICAgICAgIGJ1dHRvblRpdGxlID0gdGhpcy5pbmplY3Rvci5nZXQoVHJhbnNsYXRlU2VydmljZSkuaW5zdGFudCh0aGlzLmZvcm1hdE9wdGlvbnMuYnV0dG9uVGJ1dHRvblRpdGxlZXh0KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGJ1dHRvbkNsYXNzID0gKHRoaXMuZm9ybWF0T3B0aW9ucyAmJiB0aGlzLmZvcm1hdE9wdGlvbnMuYnV0dG9uQ2xhc3MpIHx8ICdidG4gYnRuLWxpZ2h0JztcbiAgICAgIC8vIHJldHVybiB0aGUgZHJvcGRvd24gbWVudSB3aXRoIDMgZG90c1xuICAgICAgcmV0dXJuIGA8ZGl2IGNsYXNzPSdkcm9wZG93biBkZXRhaWxzLWNvbnRyb2wnIGRhdGEtaWQ9JyR7ZGF0YX0nPlxuICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cIiR7YnV0dG9uQ2xhc3N9IGRyb3Bkb3duLXRvZ2dsZVwiIGhyZWY9XCIjXCIgcm9sZT1cImJ1dHRvblwiIHRpdGxlPVwiJHtidXR0b25UaXRsZX1cIlxuICAgICAgICAgICAgICAgICAgICAgIGlkPVwiZHJvcGRvd25NZW51QnV0dG9uLSR7ZGF0YX1cIiBkYXRhLXRvZ2dsZT1cImRyb3Bkb3duXCIgYXJpYS1oYXNwb3B1cD1cInRydWVcIiBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICAke2J1dHRvblRleHR9XG4gICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLW1lbnVcIiBhcmlhLWxhYmVsbGVkYnk9XCJkcm9wZG93bk1lbnVCdXR0b24tJHtkYXRhfVwiPlxuICAgICAgICAgICAgICAgICAgICAgJHthY3Rpb25zLm1hcCgoeCkgPT4ge1xuICAgICAgICBpZiAoeC50eXBlID09PSAnZGl2aWRlcicpIHtcbiAgICAgICAgICByZXR1cm4gYDxkaXYgY2xhc3M9XCJkcm9wZG93bi1kaXZpZGVyXCI+PC9kaXY+YDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoeC5jb21tYW5kcykge1xuICAgICAgICAgIGNvbnN0IHVybFRyZWUgPSB0aGlzLmNyZWF0ZVVybFRyZWUocm93LCB4KTtcbiAgICAgICAgICByZXR1cm4gYDxhIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiIGhyZWY9XCIjJHt1cmxUcmVlICYmIHVybFRyZWUudG9TdHJpbmcoKX1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3RoaXMuaW5qZWN0b3IgJiYgdGhpcy5pbmplY3Rvci5nZXQoVHJhbnNsYXRlU2VydmljZSkuaW5zdGFudCh4LnRpdGxlKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPmA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGA8YSBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIiBocmVmPVwiJHtBZHZhbmNlZENvbHVtbkZvcm1hdHRlci50ZW1wbGF0ZSh4LmhyZWYpKHJvdyl9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICR7dGhpcy5pbmplY3RvciAmJiB0aGlzLmluamVjdG9yLmdldChUcmFuc2xhdGVTZXJ2aWNlKS5pbnN0YW50KHgudGl0bGUpfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9hPmA7XG4gICAgICB9KVxuICAgICAgICAgIC5qb2luKCcnKX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+YDtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICB9XG4gIHB1YmxpYyBhZnRlclJlbmRlcihjZWxsOiBhbnksIGNlbGxEYXRhOiBhbnksIHJvd0RhdGE6IGFueSwgcm93SW5kZXg6IG51bWJlciwgY29sSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIC8vIGFzc2lnbiBib290c3RyYXAgZHJvcGRvd24gKD8pXG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFjdGlvblNwbGl0QnV0dG9uRm9ybWF0dGVyIGV4dGVuZHMgQWR2YW5jZWRDb2x1bW5Gb3JtYXR0ZXJcbiAgaW1wbGVtZW50cyBPbkFkdmFuY2VkQ29sdW1uQWZ0ZXJSZW5kZXIge1xuICBwdWJsaWMgcmVuZGVyKGRhdGE6IGFueSwgdHlwZTogc3RyaW5nLCByb3c6IGFueSwgbWV0YTogYW55KTogYW55IHtcbiAgICAvLyBnZXQgY29sdW1uXG4gICAgY29uc3QgY29sdW1uID0gbWV0YS5zZXR0aW5ncy5hb0NvbHVtbnNbbWV0YS5jb2xdO1xuXG4gICAgaWYgKGNvbHVtbiAmJiBjb2x1bW4uZGF0YSkge1xuICAgICAgY29uc3QgYWN0aW9ucyA9IHRoaXMuYWN0aW9ucyB8fCBbXTtcbiAgICAgIGxldCBpbmRleCA9IDE7XG4gICAgICBmb3IgKGNvbnN0IGFjdGlvbiBvZiBhY3Rpb25zKSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24oYWN0aW9uLCB7XG4gICAgICAgICAgbmFtZTogYWN0aW9uLm5hbWUgfHwgYGFjdGlvbiR7aW5kZXh9YCxcbiAgICAgICAgfSk7XG4gICAgICAgIGluZGV4ICs9IDE7XG4gICAgICB9XG4gICAgICBpZiAoYWN0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgYnV0dG9uQ2xhc3MgPSAodGhpcy5mb3JtYXRPcHRpb25zICYmIHRoaXMuZm9ybWF0T3B0aW9ucy5idXR0b25DbGFzcykgfHwgJ2J0biBidG4tbGlnaHQnO1xuICAgICAgLy8gcmV0dXJuIHRoZSBkcm9wZG93biBtZW51IHdpdGggMyBkb3RzXG4gICAgICBjb25zdCBkZWZhdWx0QWN0aW9uID0gYWN0aW9uc1swXTtcbiAgICAgIGxldCBkZWZhdWx0QWN0aW9uSHJlZjogc3RyaW5nO1xuICAgICAgaWYgKGRlZmF1bHRBY3Rpb24gJiYgZGVmYXVsdEFjdGlvbi5jb21tYW5kcykge1xuICAgICAgICBjb25zdCB1cmxUcmVlID0gdGhpcy5jcmVhdGVVcmxUcmVlKHJvdywgZGVmYXVsdEFjdGlvbik7XG4gICAgICAgIGRlZmF1bHRBY3Rpb25IcmVmID0gJyMnICsgKHVybFRyZWUgJiYgdXJsVHJlZS50b1N0cmluZygpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlZmF1bHRBY3Rpb25IcmVmID0gQWR2YW5jZWRDb2x1bW5Gb3JtYXR0ZXIudGVtcGxhdGUoZGVmYXVsdEFjdGlvbi5ocmVmKShyb3cpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxhIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cIiR7YnV0dG9uQ2xhc3N9XCIgaHJlZj1cIiR7ZGVmYXVsdEFjdGlvbkhyZWZ9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgJHt0aGlzLmluamVjdG9yICYmIHRoaXMuaW5qZWN0b3IuZ2V0KFRyYW5zbGF0ZVNlcnZpY2UpLmluc3RhbnQoZGVmYXVsdEFjdGlvbi50aXRsZSl9XG4gICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCIke2J1dHRvbkNsYXNzfSBkcm9wZG93bi10b2dnbGUgZHJvcGRvd24tdG9nZ2xlLXNwbGl0XCJcbiAgICAgICAgICAgICAgICAgICAgICBkYXRhLXRvZ2dsZT1cImRyb3Bkb3duXCIgYXJpYS1oYXNwb3B1cD1cInRydWVcIiBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj4ke3RoaXMuaW5qZWN0b3IgJiYgdGhpcy5pbmplY3Rvci5nZXQoVHJhbnNsYXRlU2VydmljZSkuaW5zdGFudCgnVG9nZ2xlIERyb3Bkb3duJyl9PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLW1lbnVcIiBhcmlhLWxhYmVsbGVkYnk9XCJkcm9wZG93bk1lbnVCdXR0b24tJHtkYXRhfVwiPlxuICAgICAgICAgICAgICAgICAgICAgJHthY3Rpb25zLm1hcCgoeCkgPT4ge1xuICAgICAgICBpZiAoeC50aXRsZSA9PT0gJy0nKSB7XG4gICAgICAgICAgcmV0dXJuIGA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tZGl2aWRlclwiPjwvZGl2PmA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHguY29tbWFuZHMpIHtcbiAgICAgICAgICBjb25zdCB1cmxUcmVlID0gdGhpcy5jcmVhdGVVcmxUcmVlKHJvdywgeCk7XG4gICAgICAgICAgcmV0dXJuIGA8YSBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIiBocmVmPVwiIyR7dXJsVHJlZSAmJiB1cmxUcmVlLnRvU3RyaW5nKCl9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHt0aGlzLmluamVjdG9yICYmIHRoaXMuaW5qZWN0b3IuZ2V0KFRyYW5zbGF0ZVNlcnZpY2UpLmluc3RhbnQoeC50aXRsZSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5gO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBgPGEgY2xhc3M9XCJkcm9wZG93bi1pdGVtXCIgaHJlZj1cIiR7QWR2YW5jZWRDb2x1bW5Gb3JtYXR0ZXIudGVtcGxhdGUoeC5ocmVmKShyb3cpfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAke3RoaXMuaW5qZWN0b3IgJiYgdGhpcy5pbmplY3Rvci5nZXQoVHJhbnNsYXRlU2VydmljZSkuaW5zdGFudCh4LnRpdGxlKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5gO1xuICAgICAgfSlcbiAgICAgICAgICAuam9pbignJyl9XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PmA7XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuICBwdWJsaWMgYWZ0ZXJSZW5kZXIoY2VsbDogYW55LCBjZWxsRGF0YTogYW55LCByb3dEYXRhOiBhbnksIHJvd0luZGV4OiBudW1iZXIsIGNvbEluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAvLyBhc3NpZ24gYm9vdHN0cmFwIGRyb3Bkb3duICg/KVxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTZWxlY3RSb3dGb3JtYXR0ZXIgZXh0ZW5kcyBBZHZhbmNlZENvbHVtbkZvcm1hdHRlciB7XG4gIHB1YmxpYyByZW5kZXIoZGF0YSwgdHlwZSwgcm93LCBtZXRhKSB7XG4gICAgLy8gZ2V0IGNvbHVtblxuICAgIGNvbnN0IGNvbHVtbiA9IG1ldGEuc2V0dGluZ3MuYW9Db2x1bW5zW21ldGEuY29sXTtcbiAgICBpZiAoY29sdW1uICYmIGNvbHVtbi5kYXRhKSB7XG4gICAgICBjb25zdCBfdHBsID0gYDxpbnB1dCBjbGFzcz1cImNoZWNrYm94IGNoZWNrYm94LXRoZW1lXCIgdHlwZT1cImNoZWNrYm94XCJcbiBpZD1cInMtJHttZXRhLnJvd31cIiAvPjxsYWJlbCBmb3I9XCJzLSR7bWV0YS5yb3d9XCI+Jm5ic3A7PC9sYWJlbD5gO1xuICAgICAgcmV0dXJuIEFkdmFuY2VkQ29sdW1uRm9ybWF0dGVyLnRlbXBsYXRlKF90cGwpKHJvdyk7XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFRlbXBsYXRlRm9ybWF0dGVyIGV4dGVuZHMgQWR2YW5jZWRDb2x1bW5Gb3JtYXR0ZXIge1xuICBwdWJsaWMgcmVuZGVyKGRhdGE6IGFueSwgdHlwZTogc3RyaW5nLCByb3c6IGFueSwgbWV0YTogYW55KTogYW55IHtcbiAgICAvLyBnZXQgY29sdW1uXG4gICAgY29uc3QgY29sdW1uID0gbWV0YS5zZXR0aW5ncy5hb0NvbHVtbnNbbWV0YS5jb2xdO1xuICAgIGlmIChjb2x1bW4gJiYgY29sdW1uLmRhdGEpIHtcbiAgICAgIHJldHVybiBBZHZhbmNlZENvbHVtbkZvcm1hdHRlci50ZW1wbGF0ZSh0aGlzLmZvcm1hdFN0cmluZyBhcyBzdHJpbmcpKHJvdyk7XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFRydWVGYWxzZUZvcm1hdHRlciBleHRlbmRzIEFkdmFuY2VkQ29sdW1uRm9ybWF0dGVyIHtcblxuICBwdWJsaWMgcmVuZGVyKGRhdGEsIHR5cGUsIHJvdywgbWV0YSkge1xuICAgIHJldHVybiBkYXRhID8gKHRoaXMuaW5qZWN0b3IgJiYgdGhpcy5pbmplY3Rvci5nZXQoVHJhbnNsYXRlU2VydmljZSkuaW5zdGFudCgnVHJ1ZUZhbHNlLmxvbmcuWWVzJykpIDpcbiAgICAgICh0aGlzLmluamVjdG9yICYmIHRoaXMuaW5qZWN0b3IuZ2V0KFRyYW5zbGF0ZVNlcnZpY2UpLmluc3RhbnQoJ1RydWVGYWxzZS5sb25nLk5vJykpO1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxufVxuXG5kZWNsYXJlIGludGVyZmFjZSBUcmFuc2xhdGlvbkZvcm1hdHRlclRlbXBsYXRlIHtcbiAgdHJhbnNsYXRlVGVtcGxhdGU/OiAoZGF0YTogYW55KSA9PiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBUcmFuc2xhdGlvbkZvcm1hdHRlciBleHRlbmRzIEFkdmFuY2VkQ29sdW1uRm9ybWF0dGVyIHtcbiAgcHVibGljIHJlbmRlcihkYXRhOiBhbnksIHR5cGU6IHN0cmluZywgcm93OiBhbnksIG1ldGE6IGFueSk6IGFueSB7XG4gICAgLy8gZ2V0IGNvbHVtblxuICAgIGNvbnN0IGNvbHVtbjogVHJhbnNsYXRpb25Gb3JtYXR0ZXJUZW1wbGF0ZSA9IG1ldGEuc2V0dGluZ3MuYW9Db2x1bW5zW21ldGEuY29sXTtcbiAgICBpZiAoY29sdW1uICYmIGRhdGEgIT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHRoaXMuaW5qZWN0b3IgJiYgdGhpcy5pbmplY3Rvci5nZXQoVHJhbnNsYXRlU2VydmljZSkuaW5zdGFudChcbiAgICAgICAgQWR2YW5jZWRDb2x1bW5Gb3JtYXR0ZXIudGVtcGxhdGUodGhpcy5mb3JtYXRTdHJpbmcgYXMgc3RyaW5nKSh7XG4gICAgICAgICAgdmFsdWU6IGRhdGEsXG4gICAgICAgIH0pKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaW5qZWN0b3IgJiYgdGhpcy5pbmplY3Rvci5nZXQoVHJhbnNsYXRlU2VydmljZSkuaW5zdGFudCgnVW5rbm93bicpO1xuICB9XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIERhdGVUaW1lRm9ybWF0dGVyIGV4dGVuZHMgQWR2YW5jZWRDb2x1bW5Gb3JtYXR0ZXIge1xuICBwdWJsaWMgcmVuZGVyKGRhdGE6IGFueSwgdHlwZTogc3RyaW5nLCByb3c6IGFueSwgbWV0YTogYW55KTogYW55IHtcbiAgICAvLyBnZXQgY29sdW1uXG4gICAgY29uc3QgY29sdW1uID0gbWV0YS5zZXR0aW5ncy5hb0NvbHVtbnNbbWV0YS5jb2xdO1xuICAgIGlmIChjb2x1bW4gJiYgY29sdW1uLmRhdGEgJiYgdGhpcy5pbmplY3Rvcikge1xuICAgICAgY29uc3QgZGF0ZVBpcGU6IERhdGVQaXBlID0gbmV3IERhdGVQaXBlKHRoaXMuaW5qZWN0b3IuZ2V0KFRyYW5zbGF0ZVNlcnZpY2UpLmN1cnJlbnRMYW5nKTtcbiAgICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycgJiYgL15cXGR7NH0tXFxkezJ9LVxcZHsyfVRcXGR7Mn06XFxkezJ9OlxcZHsyfVxcK1xcZHsyfSQvLnRlc3QoZGF0YSkpIHtcbiAgICAgICAgcmV0dXJuIGRhdGVQaXBlLnRyYW5zZm9ybShuZXcgRGF0ZShkYXRhICsgJzowMCcpLCB0aGlzLmZvcm1hdFN0cmluZyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZGF0ZVBpcGUudHJhbnNmb3JtKGRhdGEsIHRoaXMuZm9ybWF0U3RyaW5nKTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTmdDbGFzc0Zvcm1hdHRlciBleHRlbmRzIEFkdmFuY2VkQ29sdW1uRm9ybWF0dGVyIHtcbiAgcHVibGljIHJlbmRlcihkYXRhLCB0eXBlLCByb3csIG1ldGEpIHtcbiAgICAvLyBnZXQgY29sdW1uXG4gICAgY29uc3QgY29sdW1uID0gbWV0YS5zZXR0aW5ncy5hb0NvbHVtbnNbbWV0YS5jb2xdO1xuICAgIGlmIChjb2x1bW4gJiYgY29sdW1uLmRhdGEpIHtcbiAgICAgIC8vIGdldCBmb3JtYXRPcHRpb25zXG4gICAgICBpZiAodGhpcy5mb3JtYXRPcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IG5nQ2xhc3MgPSB0aGlzLmZvcm1hdE9wdGlvbnMubmdDbGFzcztcbiAgICAgICAgLy8gY2hlY2sgY29uZGl0aW9uIGZvciBlYWNoIGtleVxuICAgICAgICBjb2x1bW4ubmdDbGFzc1RlbXBsYXRlcyA9IGNvbHVtbi5uZ0NsYXNzVGVtcGxhdGVzIHx8IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhuZ0NsYXNzKSkge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IEFkdmFuY2VkQ29sdW1uRm9ybWF0dGVyLnRlbXBsYXRlKG5nQ2xhc3Nba2V5XSkocm93KTtcbiAgICAgICAgICBjb25zdCBmbiA9IG5ldyBGdW5jdGlvbihgcmV0dXJuICR7cmVzdWx0fTtgKTtcbiAgICAgICAgICAvLyBpZiBjb25kaXRpb24gcmV0dXJucyB0cnVlIGFkZCBjbGFzc1xuICAgICAgICAgIGlmIChmbigpID09PSB0cnVlKSB7XG4gICAgICAgICAgICByZXR1cm4gYDxzcGFuIGNsYXNzPVwiJHtrZXl9XCI+JHtkYXRhfTwvc3Bhbj5gO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBMYW5ndWFnZUZvcm1hdHRlciBleHRlbmRzIEFkdmFuY2VkQ29sdW1uRm9ybWF0dGVyIHtcbiAgcHVibGljIHJlbmRlcihkYXRhLCB0eXBlLCByb3csIG1ldGEpIHtcbiAgICBpZiAoZGF0YSkge1xuICAgICAgcmV0dXJuIElTTzYzOTEuZ2V0TmF0aXZlTmFtZShkYXRhKTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVGVtcGxhdGVQaXBlIH0gZnJvbSAnQHVuaXZlcnNpcy9jb21tb24nO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBBZHZhbmNlZEZpbHRlclZhbHVlUHJvdmlkZXIge1xuXG4gIHB1YmxpYyB2YWx1ZXMgPSB7IH07XG4gIHByaXZhdGUgX3RlbXBsYXRlOiBUZW1wbGF0ZVBpcGU7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5fdGVtcGxhdGUgPSBuZXcgVGVtcGxhdGVQaXBlKCk7XG4gIH1cblxuICBidWlsZEZpbHRlcihmaWx0ZXIpIHtcbiAgICBpZiAoZmlsdGVyKSB7XG4gICAgICByZXR1cm4gdGhpcy5fdGVtcGxhdGUudHJhbnNmb3JtKGZpbHRlciwgdGhpcy52YWx1ZXMpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGFzeW5jQnVpbGRGaWx0ZXIoZmlsdGVyKSB7XG4gICAgaWYgKGZpbHRlcikge1xuICAgICAgcmV0dXJuIHRoaXMuX3RlbXBsYXRlLnRyYW5zZm9ybShmaWx0ZXIsIGF3YWl0IHRoaXMuZ2V0VmFsdWVzKCkpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGdldFZhbHVlcygpIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZXM7XG4gIH1cblxufVxuIiwiLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1saW5lLWxlbmd0aFxuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIE9uRGVzdHJveSwgSW5wdXQsIEV2ZW50RW1pdHRlciwgVmlld0VuY2Fwc3VsYXRpb24sIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcywgVmlld0NoaWxkLCBFbGVtZW50UmVmLCBDaGFuZ2VEZXRlY3RvclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFJvdXRlck1vZGFsT2tDYW5jZWwgfSBmcm9tICdAdW5pdmVyc2lzL2NvbW1vbi9yb3V0aW5nJztcbmltcG9ydCB7IEJzTW9kYWxSZWYgfSBmcm9tICduZ3gtYm9vdHN0cmFwL21vZGFsJztcbkBDb21wb25lbnQoe1xuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6Y29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnYXBwLWNvbHVtbi1zZWxlY3RvcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9jb2x1bW4tc2VsZWN0b3IuY29tcG9uZW50Lmh0bWwnLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5FbXVsYXRlZCxcbiAgc3R5bGVzOiBbXG4gICAgYFxuICAgIC5mb3JtLXNlbGVjdCB7XG4gICAgICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcbiAgICAgICAgLW1vei1hcHBlYXJhbmNlOiBub25lO1xuICAgICAgICBhcHBlYXJhbmNlOiBub25lO1xuICAgICAgICBwYWRkaW5nOiA1cHg7XG4gICAgfVxuICAgIC5mb3JtLXNlbGVjdCAqIHtcbiAgICAgICAgcGFkZGluZzogNXB4IDVweDtcbiAgICB9XG4gICAgLmJ0bi5kaXNhYmxlZCwgLmJ0bjpkaXNhYmxlZCB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQgIWltcG9ydGFudDtcbiAgICB9XG4gICAgYFxuICBdXG59KVxuZXhwb3J0IGNsYXNzIENvbHVtblNlbGVjdG9yQ29tcG9uZW50IGV4dGVuZHMgUm91dGVyTW9kYWxPa0NhbmNlbCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXMge1xuXG4gICAgQElucHV0KCkgY29sdW1ucz86IHsga2V5OiBzdHJpbmcsIHRpdGxlOiBzdHJpbmcsIHZpc2libGU6IGJvb2xlYW4sIGluZGV4OiBudW1iZXIgfVtdO1xuICAgIHB1YmxpYyBkaXNtaXNzOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIEBJbnB1dCgpIHNlbGVjdGVkQ29sdW1ucz86IHsga2V5OiBzdHJpbmcsIHRpdGxlOiBzdHJpbmcgfVtdO1xuXG4gICAgQFZpZXdDaGlsZCgnbW92ZVVwQnV0dG9uJykgbW92ZVVwQnV0dG9uPzogRWxlbWVudFJlZjtcbiAgICBAVmlld0NoaWxkKCdtb3ZlRG93bkJ1dHRvbicpIG1vdmVEb3duQnV0dG9uPzogRWxlbWVudFJlZjtcblxuICAgIGF2YWlsYWJsZUNvbHVtbnNDb250cm9sID0gbmV3IEZvcm1Db250cm9sKCk7XG4gICAgc2VsZWN0ZWRDb2x1bW5zQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgpO1xuXG4gICAgcHVibGljIGNoYW5naW5nID0gZmFsc2U7XG5cbiAgICBvaygpOiBQcm9taXNlPGFueT4ge1xuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2luZyA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9tb2RhbFJlZi5oaWRlKCk7XG4gICAgICAgIH0sIDApO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5hcHBseUNoYW5nZXMoKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICB0aGlzLmNoYW5naW5nID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kaXNtaXNzLmVtaXQoJ29rJyk7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoJ29rJyk7XG4gICAgfVxuICAgIGNhbmNlbCgpOiBQcm9taXNlPGFueT4ge1xuICAgICAgICB0aGlzLl9tb2RhbFJlZi5oaWRlKCk7XG4gICAgICAgIHRoaXMuZGlzbWlzcy5lbWl0KCdjYW5jZWwnKTtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgnY2FuY2VsJyk7XG4gICAgfVxuXG4gIGNvbnN0cnVjdG9yKHJvdXRlcjogUm91dGVyLFxuICAgIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIF9tb2RhbFJlZjogQnNNb2RhbFJlZixcbiAgICBwcml2YXRlIF9jaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcbiAgICAgICAgc3VwZXIocm91dGVyLCBhY3RpdmF0ZWRSb3V0ZSk7XG4gICAgfVxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgLy9cbiAgICB9XG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIC8vXG4gICAgfVxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmNvbHVtbnMpKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucyA9IHRoaXMuY29sdW1ucy5maWx0ZXIoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS52aXNpYmxlO1xuICAgICAgICAgICAgfSkuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChhLmluZGV4IDwgYi5pbmRleCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChhLmluZGV4ID4gYi5pbmRleCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICB9KS5tYXAoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBrZXk6IGl0ZW0ua2V5LFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogaXRlbS50aXRsZVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXBwbHlDaGFuZ2VzKCkge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZENvbHVtbnMgJiYgdGhpcy5jb2x1bW5zKSB7XG4gICAgICAgICAgICBsZXQgbW92ZUluZGV4ID0gdGhpcy5zZWxlY3RlZENvbHVtbnMubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY29sdW1uIG9mIHRoaXMuY29sdW1ucykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbmRJbmRleCA9IHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmZpbmRJbmRleCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5rZXkgPT09IGNvbHVtbi5rZXk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKGZpbmRJbmRleCA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uLnZpc2libGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgbW92ZUluZGV4ICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbi5pbmRleCA9IG1vdmVJbmRleDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb2x1bW4udmlzaWJsZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbi5pbmRleCA9IGZpbmRJbmRleDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZW1vdmVDb2x1bW5zKCkge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZENvbHVtbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5zZWxlY3RlZENvbHVtbnNDb250cm9sLnZhbHVlIGFzIHN0cmluZ1tdO1xuICAgICAgICAgICAgaWYgKHNlbGVjdGVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbmRJbmRleCA9IHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmZpbmRJbmRleCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0ua2V5ID09PSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaW5kSW5kZXggPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMuc3BsaWNlKGZpbmRJbmRleCwgMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gcmVzZXQgY29sdW1uXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnNDb250cm9sLnJlc2V0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhZGRDb2x1bW5zKCkge1xuICAgICAgICBpZiAodGhpcy5jb2x1bW5zICYmIHRoaXMuc2VsZWN0ZWRDb2x1bW5zKSB7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMuYXZhaWxhYmxlQ29sdW1uc0NvbnRyb2wudmFsdWUgYXMgc3RyaW5nW107XG4gICAgICAgICAgICBpZiAoc2VsZWN0ZWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2Ygc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmluZENvbHVtbiA9IHRoaXMuY29sdW1ucy5maW5kKChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5rZXkgPT09IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbmRDb2x1bW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbmRJbmRleCA9IHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmZpbmRJbmRleCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLmtleSA9PT0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaW5kSW5kZXggPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogZmluZENvbHVtbi5rZXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBmaW5kQ29sdW1uLnRpdGxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gZmluZCB0aGUgbGFzdCBpbmRleCBvZiB0aGUgc2VsZWN0ZWQgaXRlbXNcbiAgICAgICAgICAgICAgICBjb25zdCBsYXN0U2VsZWN0ZWRJbmRleCA9IHRoaXMuY29sdW1ucy5maW5kSW5kZXgoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0ua2V5ID09PSBzZWxlY3RlZFtzZWxlY3RlZC5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAvLyByZXNldCBjb250cm9sXG4gICAgICAgICAgICAgICAgdGhpcy5hdmFpbGFibGVDb2x1bW5zQ29udHJvbC5yZXNldCgpO1xuICAgICAgICAgICAgICAgIGlmIChsYXN0U2VsZWN0ZWRJbmRleCA+IC0xICYmIGxhc3RTZWxlY3RlZEluZGV4IDwgdGhpcy5jb2x1bW5zLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hdmFpbGFibGVDb2x1bW5zQ29udHJvbC5wYXRjaFZhbHVlKFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29sdW1uc1tsYXN0U2VsZWN0ZWRJbmRleCArIDFdLmtleVxuICAgICAgICAgICAgICAgICAgICBdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBtb3ZlVXAoKSB7XG4gICAgICAgIGlmICh0aGlzLm1vdmVVcEJ1dHRvbikge1xuICAgICAgICAgICAgdGhpcy5tb3ZlVXBCdXR0b24ubmF0aXZlRWxlbWVudC5kaXNhYmxlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRDb2x1bW5zKSB7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWRDb2x1bW5zQ29udHJvbC52YWx1ZSBhcyBzdHJpbmdbXTtcbiAgICAgICAgICAgIGlmIChzZWxlY3RlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiBzZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaW5kSW5kZXggPSB0aGlzLnNlbGVjdGVkQ29sdW1ucy5maW5kSW5kZXgoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLmtleSA9PT0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmluZEluZGV4ID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29sdW1uID0gdGhpcy5zZWxlY3RlZENvbHVtbnNbZmluZEluZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zLnNwbGljZShmaW5kSW5kZXgsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMuc3BsaWNlKGZpbmRJbmRleCAtIDEgLCAwLCBjb2x1bW4pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm1vdmVVcEJ1dHRvbikge1xuICAgICAgICAgICAgdGhpcy5tb3ZlVXBCdXR0b24ubmF0aXZlRWxlbWVudC5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbW92ZURvd24oKSB7XG4gICAgICAgIGlmICh0aGlzLm1vdmVEb3duQnV0dG9uKSB7XG4gICAgICAgICAgICB0aGlzLm1vdmVEb3duQnV0dG9uLm5hdGl2ZUVsZW1lbnQuZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkQ29sdW1ucyAmJiB0aGlzLmNvbHVtbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5zZWxlY3RlZENvbHVtbnNDb250cm9sLnZhbHVlIGFzIHN0cmluZ1tdO1xuICAgICAgICAgICAgaWYgKHNlbGVjdGVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbmRJbmRleCA9IHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmZpbmRJbmRleCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0ua2V5ID09PSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxlbmd0aCA9IHRoaXMuY29sdW1ucy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaW5kSW5kZXggPj0gMCAmJiBmaW5kSW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuc2VsZWN0ZWRDb2x1bW5zW2ZpbmRJbmRleF07XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucy5zcGxpY2UoZmluZEluZGV4LCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zLnNwbGljZShmaW5kSW5kZXggKyAxICwgMCwgY29sdW1uKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5tb3ZlRG93bkJ1dHRvbikge1xuICAgICAgICAgICAgdGhpcy5tb3ZlRG93bkJ1dHRvbi5uYXRpdmVFbGVtZW50LmRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNb2RhbFNlcnZpY2UgfSBmcm9tICdAdW5pdmVyc2lzL2NvbW1vbic7XG5pbXBvcnQgeyBDb2x1bW5TZWxlY3RvckNvbXBvbmVudCB9IGZyb20gJy4vY29sdW1uLXNlbGVjdG9yLmNvbXBvbmVudCc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBDb2x1bW5TZWxlY3RvclNlcnZpY2Uge1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX21vZGFsOiBNb2RhbFNlcnZpY2UpIHtcbiAgICAvL1xuICB9XG5cbiAgc2VsZWN0Q29sdW1ucyhjb2x1bW5zOiB7IGtleTogc3RyaW5nLCB0aXRsZTogc3RyaW5nLCB2aXNpYmxlOiBib29sZWFuLCBpbmRleDogbnVtYmVyIH0pOlxuICAgIFByb21pc2U8e3Jlc3VsdDogc3RyaW5nLCBjb2x1bW5zPzogeyBrZXk6IHN0cmluZywgdGl0bGU6IHN0cmluZyxcbiAgICAgIHZpc2libGU6IGJvb2xlYW4sIGluZGV4OiBudW1iZXIgfVtdfT4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBtb2RhbFJlZiA9IHRoaXMuX21vZGFsLm9wZW5Nb2RhbENvbXBvbmVudChDb2x1bW5TZWxlY3RvckNvbXBvbmVudCwge1xuICAgICAgICAgIGNsYXNzOiAnbW9kYWwtbGcgbW9kYWwtdGFibGUnLFxuICAgICAgICAgIGlnbm9yZUJhY2tkcm9wQ2xpY2s6IHRydWUsXG4gICAgICAgICAgYW5pbWF0ZWQ6IHRydWUsXG4gICAgICAgICAgaW5pdGlhbFN0YXRlOiB7XG4gICAgICAgICAgICBjb2x1bW5zOiBjb2x1bW5zLFxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudFJlZjogQ29sdW1uU2VsZWN0b3JDb21wb25lbnQgPSBtb2RhbFJlZi5jb250ZW50O1xuICAgICAgICBjb21wb25lbnRSZWYuZGlzbWlzcy5zdWJzY3JpYmUoKHJlc3VsdDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgaWYgKHJlc3VsdCA9PT0gJ29rJykge1xuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoe1xuICAgICAgICAgICAgICByZXN1bHQ6IHJlc3VsdCxcbiAgICAgICAgICAgICAgY29sdW1uczogY29tcG9uZW50UmVmLmNvbHVtbnNcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcmVzb2x2ZSh7XG4gICAgICAgICAgICByZXN1bHQ6IHJlc3VsdFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICByZXR1cm4gcmVqZWN0KGVycik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxufVxuIiwiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgTmF2aWdhdGlvblN0YXJ0LCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBBZHZhbmNlZFRhYmxlQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2FkdmFuY2VkLXRhYmxlL2FkdmFuY2VkLXRhYmxlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBza2lwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQWN0aXZhdGVkVGFibGVTZXJ2aWNlIHtcclxuICBwcml2YXRlIF9hY3RpdmVUYWJsZT86IEFkdmFuY2VkVGFibGVDb21wb25lbnQ7XHJcbiAgLyoqXHJcbiAgICogR2V0IHRoZSBsYXN0IHRhYmxlIHRoYXQgd2FzIHNldCBhcyBhY3RpdmVcclxuICAgKiBOb3RlOiBFbWl0dGVkIHZhbHVlIG1heSBiZSB1bmRlZmluZWQgKGUuZy4gcmVzZXQgb24gcm91dGUgY2hhbmdlcylcclxuICAgKi9cclxuICBwdWJsaWMgcmVhZG9ubHkgbGFzdEFjdGl2ZVRhYmxlOlxyXG4gICAgQmVoYXZpb3JTdWJqZWN0PEFkdmFuY2VkVGFibGVDb21wb25lbnQgfCB1bmRlZmluZWQ+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBZHZhbmNlZFRhYmxlQ29tcG9uZW50IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xyXG4gIC8qKlxyXG4gICAqIE9taXQgdGhlIGxhc3QgZW1pdHRlZCB2YWx1ZSB0byBvYnNlcnZlIG9ubHkgbmV3IGFjdGl2ZSB0YWJsZSBjaGFuZ2VzXHJcbiAgICogTm90ZTogRW1pdHRlZCB2YWx1ZSBtYXkgYmUgdW5kZWZpbmVkIChlLmcuIHJlc2V0IG9uIHJvdXRlIGNoYW5nZXMpXHJcbiAgICovXHJcbiAgcHVibGljIHJlYWRvbmx5IG5leHRBY3RpdmVUYWJsZTpcclxuICAgIE9ic2VydmFibGU8QWR2YW5jZWRUYWJsZUNvbXBvbmVudCB8IHVuZGVmaW5lZD4gPSB0aGlzLmxhc3RBY3RpdmVUYWJsZS5waXBlKHNraXAoMSkpO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9yb3V0ZXI6IFJvdXRlciwgcHJpdmF0ZSBfYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlKSB7XHJcbiAgICBfcm91dGVyLmV2ZW50cy5mb3JFYWNoKChldmVudCkgPT4ge1xyXG4gICAgICBpZiAoZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uU3RhcnQpIHtcclxuICAgICAgICBpZiAodGhpcy5fYWN0aXZlVGFibGUpIHtcclxuICAgICAgICAgIHRoaXMuYWN0aXZlVGFibGUgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldCBhY3RpdmVUYWJsZSgpOiBBZHZhbmNlZFRhYmxlQ29tcG9uZW50IHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLl9hY3RpdmVUYWJsZTtcclxuICB9XHJcblxyXG4gIHNldCBhY3RpdmVUYWJsZSh0YWJsZUNvbXBvbmVudDogQWR2YW5jZWRUYWJsZUNvbXBvbmVudCB8IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy5fYWN0aXZlVGFibGUgPSB0YWJsZUNvbXBvbmVudDtcclxuICAgIC8vIHByb3ZpZGUgY2hhbmdlIHRvIG9ic2VydmVyc1xyXG4gICAgdGhpcy5sYXN0QWN0aXZlVGFibGUubmV4dCh0aGlzLl9hY3RpdmVUYWJsZSk7XHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCB7RGlyZWN0aXZlLCBIb3N0TGlzdGVuZXJ9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtBY3RpdmF0ZWRUYWJsZVNlcnZpY2V9IGZyb20gJy4uL3RhYmxlcy5hY3RpdmF0ZWQtdGFibGUuc2VydmljZSc7XG5pbXBvcnQge0FuZ3VsYXJEYXRhQ29udGV4dH0gZnJvbSAnQHRoZW1vc3QvYW5ndWxhcic7XG5pbXBvcnQge0NvbmZpZ3VyYXRpb25TZXJ2aWNlLCBFcnJvclNlcnZpY2UsIExvYWRpbmdTZXJ2aWNlfSBmcm9tICdAdW5pdmVyc2lzL2NvbW1vbic7XG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtDbGllbnREYXRhUXVlcnlhYmxlLCBSZXNwb25zZUVycm9yfSBmcm9tICdAdGhlbW9zdC9jbGllbnQnO1xuaW1wb3J0IHsgVGFibGVDb25maWd1cmF0aW9uIH0gZnJvbSAnLi4vY29tcG9uZW50cy9hZHZhbmNlZC10YWJsZS9hZHZhbmNlZC10YWJsZS5pbnRlcmZhY2VzJztcblxuZXhwb3J0IGNvbnN0IE1BWF9FWFBPUlRfSVRFTVMgPSA1MDA7XG5cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBFeHBvcnRMaW1pdENvbmZpZ3VyYXRpb24ge1xuICB0YWJsZXM/OiB7XG4gICAgZXhwb3J0TGltaXQ/OiBudW1iZXJcbiAgfTtcbn1cblxuQERpcmVjdGl2ZSh7XG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpkaXJlY3RpdmUtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICcudW5pdmVyc2lzLWJ0bi1leHBvcnQnXG59KVxuZXhwb3J0IGNsYXNzIEJ0bkV4cERpcmVjdGl2ZSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2FjdGl2YXRlZFRhYmxlOiBBY3RpdmF0ZWRUYWJsZVNlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgX2NvbnRleHQ6IEFuZ3VsYXJEYXRhQ29udGV4dCxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfY29uZmlnOiBDb25maWd1cmF0aW9uU2VydmljZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgICAgICAgICAgICBwcml2YXRlIF9sb2FkaW5nU2VydmljZTogTG9hZGluZ1NlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgX2Vycm9yU2VydmljZTogRXJyb3JTZXJ2aWNlKSB7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdjbGljaycsIFsnJGV2ZW50J10pXG4gIGFzeW5jIGNsaWNrRXZlbnQoZXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGlmICh0aGlzLl9hY3RpdmF0ZWRUYWJsZS5hY3RpdmVUYWJsZSkge1xuICAgICAgcmV0dXJuIHRoaXMuX2FjdGl2YXRlZFRhYmxlLmFjdGl2ZVRhYmxlLmV4cG9ydFZpZXcoKTtcbiAgICAgIC8qXG4gICAgICBjb25zdCBsYXN0UXVlcnkgPSB0aGlzLl9hY3RpdmF0ZWRUYWJsZS5hY3RpdmVUYWJsZS5sYXN0UXVlcnk7XG4gICAgICBjb25zdCB0YWJsZUNvbmZpZyA9IHRoaXMuX2FjdGl2YXRlZFRhYmxlLmFjdGl2ZVRhYmxlLmNvbmZpZztcbiAgICAgIGNvbnN0IHNlcnZpY2VIZWFkZXJzID0gdGhpcy5fY29udGV4dC5nZXRTZXJ2aWNlKCkuZ2V0SGVhZGVycygpO1xuICAgICAgY29uc3QgcXVlcnlNb2RlbCA9IGxhc3RRdWVyeS5nZXRNb2RlbCgpO1xuICAgICAgbGV0IHF1ZXJ5ID0gdGhpcy5fY29udGV4dC5tb2RlbChxdWVyeU1vZGVsKS5hc1F1ZXJ5YWJsZSgpO1xuICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSBsYXN0UXVlcnkuZ2V0UGFyYW1zKCk7XG4gICAgICBxdWVyeSA9IHRoaXMuY29uc3RydWN0UXVlcnkocXVlcnksIHF1ZXJ5UGFyYW1zLCB0YWJsZUNvbmZpZywgc2VydmljZUhlYWRlcnMpO1xuICAgICAgLy8gZ2V0IGV4cG9ydCBzZXR0aW5nc1xuICAgICAgY29uc3QgZXhwb3J0U2V0dGluZ3MgPSB0aGlzLl9jb25maWcuc2V0dGluZ3MgYXMgRXhwb3J0TGltaXRDb25maWd1cmF0aW9uO1xuICAgICAgLy8gZ2V0IGV4cG9ydCBsaW1pdFxuICAgICAgY29uc3QgbWF4RXhwb3J0SXRlbXMgPSBleHBvcnRTZXR0aW5ncyAmJiBleHBvcnRTZXR0aW5ncy50YWJsZXMgJiYgZXhwb3J0U2V0dGluZ3MudGFibGVzLmV4cG9ydExpbWl0O1xuICAgICAgaWYgKG1heEV4cG9ydEl0ZW1zICYmIHR5cGVvZiBtYXhFeHBvcnRJdGVtcyA9PT0gJ251bWJlcicgJiYgbWF4RXhwb3J0SXRlbXMgPiAwKSB7XG4gICAgICAgIHF1ZXJ5LnNraXAoMCkudGFrZShtYXhFeHBvcnRJdGVtcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBxdWVyeS5za2lwKDApLnRha2UoTUFYX0VYUE9SVF9JVEVNUyk7XG4gICAgICB9XG4gICAgICAvLyBUaGlzIGNvbnN0cnVjdHMgdGhlIFVSSSBiYXNlZCBvbiB0aGUgd2F5IEB0aGVtb3N0IGRvZXNcbiAgICAgIGNvbnN0IHVybCA9IHRoaXMuY29uc3RydWN0VVJMKHF1ZXJ5KTtcbiAgICAgIHRoaXMuZG93bmxvYWRGaWxlKHVybCwgcXVlcnkuZ2V0U2VydmljZSgpLmdldEhlYWRlcnMoKSwgcXVlcnkuZ2V0TW9kZWwoKSk7ICovXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHBhcmFtZXRlcnMgdG8gdGhlIHF1ZXJ5IGJhc2VkIG9uXG4gICAqIHRoZSBhY3RpdmUgZmlsdGVycyBvZiB0aGUgYWN0aXZhdGVkIHRhYmxlXG4gICAqIEBwYXJhbSBxdWVyeVxuICAgKiBAcGFyYW0gcGFyYW1zOiBUaGUgZmlsdGVycyBvZiB0aGUgbGFzdCBxdWVyeSBvZiB0aGUgYWN0aXZhdGVkIHRhYmxlXG4gICAqIEByZXR1cm4gQ2xpZW50RGF0YVF1ZXJ5YWJsZVxuICAgKi9cbiAgc2V0UGFyYW1zKHF1ZXJ5OiBDbGllbnREYXRhUXVlcnlhYmxlLCBwYXJhbXMpOiBDbGllbnREYXRhUXVlcnlhYmxlIHtcbiAgICBpZiAocGFyYW1zICYmIHR5cGVvZiBwYXJhbXMgPT09ICdvYmplY3QnKSB7XG4gICAgICBPYmplY3Qua2V5cyhwYXJhbXMpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICBxdWVyeS5zZXRQYXJhbShrZXksIHBhcmFtc1trZXldKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcXVlcnk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgaGVhZGVycyB0byB0aGUgcXVlcnkgYmFzZWQgb25cbiAgICogdGhlIGRlZmF1bHQgaGVhZGVycyBvZiB0aGUgRGF0YUNvbnRleHRcbiAgICogYW5kIGFwcGVuZGluZyB0aGUgYWNjZXB0IGhlYWRlciB0byBnZXRcbiAgICogYW4geGxzeCBmaWxlIGZyb20gdGhlIEFQSVxuICAgKiBAcGFyYW0gcXVlcnlcbiAgICogQHBhcmFtIGhlYWRlcnM6IFRoZSBoZWFkZXJzIHRvIGFwcGVuZCB0byB0aGUgcXVlcnlcbiAgICogQHJldHVybiBDbGllbnREYXRhUXVlcnlhYmxlXG4gICAqL1xuICBzZXRIZWFkZXJzKHF1ZXJ5OiBDbGllbnREYXRhUXVlcnlhYmxlLCBoZWFkZXJzOiBIZWFkZXJzKTogQ2xpZW50RGF0YVF1ZXJ5YWJsZSB7XG4gICAgT2JqZWN0LmtleXMoaGVhZGVycykuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICBpZiAoaGVhZGVycy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgIHF1ZXJ5LmdldFNlcnZpY2UoKS5zZXRIZWFkZXIoa2V5LCBoZWFkZXJzW2tleV0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIC8vIHNldHMgYSBoZWFkZXIgdG8gYWNjZXB0IHhsc3ggZmlsZXNcbiAgICBxdWVyeS5nZXRTZXJ2aWNlKCkuc2V0SGVhZGVyKCdBY2NlcHQnLCAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQnKTtcbiAgICByZXR1cm4gcXVlcnk7XG4gIH1cblxuICAvKipcbiAgICogQ29uc3RydWN0cyB0aGUgc2VsZWN0IHBhcmFtZXRlciBvZiB0aGVcbiAgICogQ2xpZW50RGF0YVF1ZXJ5IGJ5IHJlcGxhY2luZyB0aGUgdGFyZ2V0IG5hbWVcbiAgICogb2YgdGhlIGZpZWxkIGJhc2VkIG9uIHRoZSBsb2NhbGl6ZWQgdHJhbnNsYXRpb25cbiAgICogb2YgdGhhdCBwcm9wZXJ0eSBvbiB0aGUgYWR2YW5jZWQgdGFibGVkXG4gICAqIEBwYXJhbSBxdWVyeVxuICAgKiBAcGFyYW0gdGFibGVDb25maWc6IFRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBhY3RpdmF0ZWQgdGFibGVcbiAgICogQHJldHVybiBDbGllbnREYXRhUXVlcnlhYmxlXG4gICAqL1xuICBjb25zdHJ1Y3RRdWVyeVBhcmFtKHF1ZXJ5OiBDbGllbnREYXRhUXVlcnlhYmxlLCB0YWJsZUNvbmZpZzogVGFibGVDb25maWd1cmF0aW9uKTogQ2xpZW50RGF0YVF1ZXJ5YWJsZSB7XG4gICAgbGV0IHNlbGVjdFF1ZXJ5ID0gcXVlcnkuZ2V0UGFyYW1zKCkuJHNlbGVjdDtcbiAgICBsZXQgc2VsZWN0UXVlcnlBcnJheSA9IHNlbGVjdFF1ZXJ5LnNwbGl0KCcsJyk7XG4gICAgc2VsZWN0UXVlcnlBcnJheSA9IHNlbGVjdFF1ZXJ5QXJyYXkubWFwKChzZWxlY3QpID0+IHtcbiAgICAgIGNvbnN0IHdvcmRzID0gc2VsZWN0LnNwbGl0KCcgJyk7XG4gICAgICBpZiAod29yZHMubGVuZ3RoID09PSAzKSB7XG4gICAgICAgIGlmICh0YWJsZUNvbmZpZyAmJiB0YWJsZUNvbmZpZy5jb2x1bW5zKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBjb2x1bW4gb2YgdGFibGVDb25maWcuY29sdW1ucykge1xuICAgICAgICAgICAgaWYgKGNvbHVtbi5wcm9wZXJ0eSA9PT0gd29yZHNbMl0gJiYgY29sdW1uLnRpdGxlKSB7XG4gICAgICAgICAgICAgIHdvcmRzWzJdID0gYFwiJHt0aGlzLl90cmFuc2xhdGUuaW5zdGFudChjb2x1bW4udGl0bGUpfVwiYDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLnByb3BlcnR5ID09PSB3b3Jkc1syXSkge1xuICAgICAgICAgICAgICB3b3Jkc1syXSA9IGBcIiR7dGhpcy5fdHJhbnNsYXRlLmluc3RhbnQod29yZHNbMl0pfVwiYDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh3b3Jkcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgaWYgKHRhYmxlQ29uZmlnICYmIHRhYmxlQ29uZmlnLmNvbHVtbnMpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiB0YWJsZUNvbmZpZy5jb2x1bW5zKSB7XG4gICAgICAgICAgICBpZiAoY29sdW1uLm5hbWUgPT09IHdvcmRzWzBdICYmIGNvbHVtbi50aXRsZSkge1xuICAgICAgICAgICAgICB3b3Jkc1swXSA9IGAke3dvcmRzWzBdfSBhcyBcIiR7dGhpcy5fdHJhbnNsYXRlLmluc3RhbnQoY29sdW1uLnRpdGxlKX1cImA7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4ubmFtZSA9PT0gd29yZHNbMF0gJiYgY29sdW1uLnByb3BlcnR5KSB7XG4gICAgICAgICAgICAgIHdvcmRzWzBdID0gYCR7d29yZHNbMF19IGFzIFwiJHt0aGlzLl90cmFuc2xhdGUuaW5zdGFudChjb2x1bW4ucHJvcGVydHkpfVwiYDtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHdvcmRzWzBdID09PSBjb2x1bW4ubmFtZSAmJiB3b3Jkc1swXSA9PT0gJ2lkJyAmJiBjb2x1bW4uaGlkZGVuKSB7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnRyaXBsZS1lcXVhbHNcbiAgICAgICAgICAgIH0gZWxzZSBpZiAod29yZHNbMF0gPT0gY29sdW1uLm5hbWUgfHwgd29yZHNbMF0gPT09IGNvbHVtbi5wcm9wZXJ0eSkge1xuICAgICAgICAgICAgICB3b3Jkc1swXSA9IGAke3dvcmRzWzBdfSBhcyBcIiR7dGhpcy5fdHJhbnNsYXRlLmluc3RhbnQod29yZHNbMF0pfVwiYDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHdvcmRzWzBdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHdvcmRzLmpvaW4oJyAnKTtcbiAgICB9KTtcbiAgICBzZWxlY3RRdWVyeSA9IHNlbGVjdFF1ZXJ5QXJyYXkuam9pbignLCcpO1xuICAgIHF1ZXJ5LnNldFBhcmFtKCckc2VsZWN0Jywgc2VsZWN0UXVlcnkgKTtcbiAgICByZXR1cm4gcXVlcnk7XG4gIH1cblxuICAvKipcbiAgICogQ29uc3RydWN0cyB0aGUgZmV0Y2ggVVJMIGJhc2VkIHRoZSBxdWVyeSBwYXJhbWV0ZXJzXG4gICAqIEBwYXJhbSBxdWVyeVxuICAgKiBAcmV0dXJuIFN0cmluZ1xuICAgKi9cbiAgY29uc3RydWN0VVJMKHF1ZXJ5KTogU3RyaW5nIHtcbiAgICBjb25zdCBiYXNlVVJMID0gcXVlcnkuZ2V0U2VydmljZSgpLmdldEJhc2UoKTtcbiAgICBsZXQgdXJsID0gYmFzZVVSTC5lbmRzV2l0aCgnLycpID8gKGJhc2VVUkwgKyBxdWVyeS5nZXRNb2RlbCgpICsgJz8nKSA6IChiYXNlVVJMICsgJy8nICsgcXVlcnkuZ2V0TW9kZWwoKSArICc/Jyk7XG4gICAgT2JqZWN0LmtleXMocXVlcnkuZ2V0UGFyYW1zKCkpLmZvckVhY2goKGtleSwgaW5kZXgpID0+IHtcbiAgICAgIGlmIChpbmRleCA9PT0gMCkge1xuICAgICAgICB1cmwgKz0ga2V5ICsgJz0nICsgcXVlcnkuZ2V0UGFyYW1zKClba2V5XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHVybCArPSAnJicgKyBrZXkgKyAnPScgKyBxdWVyeS5nZXRQYXJhbXMoKVtrZXldO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB1cmw7XG4gIH1cblxuICAvKipcbiAgICogQ29uc3RydWN0cyB0aGUgcXVlcnkgYnkgc2V0dGluZyB0aGUgcGFyYW1ldGVycyBvZiB0aGVcbiAgICogYWR2YW5jZWQgdGFibGUncyBhY3RpdmUgZmlsdGVycywgc2V0cyB0aGUgbmVjZXNzYXJ5IGhlYWRlcnNcbiAgICogYW5kIGJ1aWxkIHRoZSBzZWxlY3QgcGFyYW1ldGVyIG9mIHRoZSBxdWVyeVxuICAgKiBAcGFyYW0gcXVlcnlcbiAgICogQHBhcmFtIHBhcmFtczogVGhlIGZpbHRlcnMgb2YgdGhlIGxhc3QgcXVlcnkgb2YgdGhlIGFjdGl2YXRlZCB0YWJsZVxuICAgKiBAcGFyYW0gdGFibGVDb25maWc6IFRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBhY3RpdmF0ZWQgdGFibGVcbiAgICogQHBhcmFtIGhlYWRlcnM6IFRoZSBoZWFkZXJzIHRvIGFwcGVuZCB0byB0aGUgcXVlcnlcbiAgICogQHJldHVybiBDbGllbnREYXRhUXVlcnlhYmxlXG4gICAqL1xuICBjb25zdHJ1Y3RRdWVyeShxdWVyeSwgcGFyYW1zLCB0YWJsZUNvbmZpZywgaGVhZGVyczogSGVhZGVycykge1xuICAgIGxldCBfcXVlcnkgPSB0aGlzLnNldFBhcmFtcyhxdWVyeSwgcGFyYW1zKTtcbiAgICBfcXVlcnkgPSB0aGlzLnNldEhlYWRlcnMoX3F1ZXJ5LCBoZWFkZXJzKTtcbiAgICBfcXVlcnkgPSB0aGlzLmNvbnN0cnVjdFF1ZXJ5UGFyYW0oX3F1ZXJ5LCB0YWJsZUNvbmZpZyk7XG4gICAgcmV0dXJuIF9xdWVyeTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaGVzIGFuZCBzYXZlcyB0aGUgeGxzeCBmaWxlXG4gICAqIEBwYXJhbSB1cmxcbiAgICogQHBhcmFtIHNlcnZpY2VIZWFkZXJzOiBUaGUgaGVhZGVycyB0byBhcHBlbmQgdG8gdGhlIHF1ZXJ5XG4gICAqIEBwYXJhbSBtb2RlbE5hbWU6IFRoZSBtb2RlbCBuYW1lIG9mIHRoZSBhZHZhbmNlZCB0YWJsZVxuICAgKi9cbiAgZG93bmxvYWRGaWxlKHVybCwgc2VydmljZUhlYWRlcnM6IEhlYWRlcnMsIG1vZGVsTmFtZSkge1xuICAgIHRoaXMuX2xvYWRpbmdTZXJ2aWNlLnNob3dMb2FkaW5nKCk7XG4gICAgZmV0Y2goZW5jb2RlVVJJKHVybCksIHtcbiAgICAgIGhlYWRlcnM6IHNlcnZpY2VIZWFkZXJzLFxuICAgICAgY3JlZGVudGlhbHM6ICdpbmNsdWRlJ1xuICAgIH0pLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgaWYgKHJlc3BvbnNlICYmICFyZXNwb25zZS5vaykge1xuICAgICAgICB0aHJvdyBuZXcgUmVzcG9uc2VFcnJvcihyZXNwb25zZS5zdGF0dXNUZXh0LCByZXNwb25zZS5zdGF0dXMpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3BvbnNlLmJsb2IoKTtcbiAgICB9KS50aGVuKGJsb2IgPT4ge1xuICAgICAgY29uc3Qgb2JqZWN0VXJsID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG4gICAgICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhKTtcbiAgICAgIGEuc2V0QXR0cmlidXRlKCdzdHlsZScsICdkaXNwbGF5OiBub25lJyk7XG4gICAgICBhLmhyZWYgPSBvYmplY3RVcmw7XG4gICAgICBjb25zdCBkb3dubG9hZE5hbWUgPSBgJHttb2RlbE5hbWV9Lnhsc3hgO1xuICAgICAgYS5kb3dubG9hZCA9IGRvd25sb2FkTmFtZTtcbiAgICAgIC8vIHRoaXMgYWRkcyBzdXBwb3J0IGZvciBJRSBhbmQgTVMgRWRnZSAodXAgdG8gdmVyc2lvbiA0NC4xOTA0MSlcbiAgICAgIGlmICh3aW5kb3cubmF2aWdhdG9yICYmICh3aW5kb3cubmF2aWdhdG9yIGFzIGFueSkubXNTYXZlT3JPcGVuQmxvYikge1xuICAgICAgICAod2luZG93Lm5hdmlnYXRvciBhcyBhbnkpLm1zU2F2ZU9yT3BlbkJsb2IoYmxvYiwgZG93bmxvYWROYW1lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGZvciBhbGwgb3RoZXIgYnJvd3NlcnNcbiAgICAgICAgYS5jbGljaygpO1xuICAgICAgfVxuICAgICAgd2luZG93LlVSTC5yZXZva2VPYmplY3RVUkwob2JqZWN0VXJsKTtcbiAgICAgIGEucmVtb3ZlKCk7XG4gICAgICB0aGlzLl9sb2FkaW5nU2VydmljZS5oaWRlTG9hZGluZygpO1xuICAgIH0pLmNhdGNoKGVyciA9PiB7XG4gICAgICB0aGlzLl9sb2FkaW5nU2VydmljZS5oaWRlTG9hZGluZygpO1xuICAgICAgdGhpcy5fZXJyb3JTZXJ2aWNlLnNob3dFcnJvcihlcnIsIHtcbiAgICAgICAgY29udGludWVMaW5rOiAnLidcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbn1cbiIsImltcG9ydCB7XG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlcixcbiAgSW5qZWN0LFxuICBJbmplY3Rpb25Ub2tlbixcbiAgSW5qZWN0b3IsXG4gIElucHV0LCBPbkRlc3Ryb3ksXG4gIE9uSW5pdCwgT3V0cHV0LFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBPbkNoYW5nZXMsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIENvbnRlbnRDaGlsZCxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDb250YWluZXJSZWYsXG4gIEFmdGVyVmlld0luaXRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0FuZ3VsYXJEYXRhQ29udGV4dH0gZnJvbSAnQHRoZW1vc3QvYW5ndWxhcic7XG5pbXBvcnQge1RyYW5zbGF0ZVBpcGUsIFRyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7VGFibGVDb25maWd1cmF0aW9ufSBmcm9tICcuL2FkdmFuY2VkLXRhYmxlLmludGVyZmFjZXMnO1xuaW1wb3J0IHtEYXRhU2VydmljZVF1ZXJ5UGFyYW1zfSBmcm9tICdAdGhlbW9zdC9jbGllbnQnO1xuaW1wb3J0IHtBZHZhbmNlZENvbHVtbkZvcm1hdHRlcn0gZnJvbSAnLi9hZHZhbmNlZC10YWJsZS5mb3JtYXR0ZXJzJztcbmltcG9ydCB7Q2xpZW50RGF0YVF1ZXJ5YWJsZX0gZnJvbSAnQHRoZW1vc3QvY2xpZW50JztcbmltcG9ydCB7QWR2YW5jZWRGaWx0ZXJWYWx1ZVByb3ZpZGVyfSBmcm9tICcuL2FkdmFuY2VkLWZpbHRlci12YWx1ZS1wcm92aWRlci5zZXJ2aWNlJztcbmltcG9ydCB7U3Vic2NyaXB0aW9uLCBCZWhhdmlvclN1YmplY3R9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtUZW1wbGF0ZVBpcGUsIExvYWRpbmdTZXJ2aWNlLCBDb25maWd1cmF0aW9uU2VydmljZSxcbiAgTW9kYWxTZXJ2aWNlLCBESUFMT0dfQlVUVE9OUywgRXJyb3JTZXJ2aWNlLCBFeHBvcnRTcHJlYWRzaGVldFNlcnZpY2V9IGZyb20gJ0B1bml2ZXJzaXMvY29tbW9uJztcbmltcG9ydCB7SUFkdmFuY2VkVGFibGVGb3JtYXR0ZXJzfSBmcm9tICcuL2FkdmFuY2VkLXRhYmxlLmZvcm1hdHRlcnMuaW50ZXJmYWNlJztcbi8vIGltcG9ydGFudCBub3RlOiB1c2UgdGhpcyBpbXBvcnQgdG8gYXZvaWQgQ2Fubm90IGNhbGwgYSBuYW1lc3BhY2UgKCdqcXVlcnknKSBlcnJvclxuaW1wb3J0ICogYXMgalF1ZXJ5XyBmcm9tICdqcXVlcnknO1xuaW1wb3J0ICdkYXRhdGFibGVzLm5ldCc7XG5pbXBvcnQge3RlbXBsYXRlfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0ICdkYXRhdGFibGVzLm5ldC1yb3dncm91cCc7IC8vIHRoaXMgcGx1Z2luIGltcG9ydCBsaW5lIG11c3QgY29tZSBiZWZvcmUgdGhlIGZvbGxvd2luZyBkYXRhdGFibGVzIHBsdWdpbiBpbXBvcnRzXG5pbXBvcnQgJ2RhdGF0YWJsZXMubmV0LXNjcm9sbGVyJzsgXG5pbXBvcnQgJ2RhdGF0YWJsZXMubmV0LWNvbHJlb3JkZXInO1xuaW1wb3J0ICdkYXRhdGFibGVzLm5ldC1idXR0b25zJztcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBDb2x1bW5TZWxlY3RvclNlcnZpY2UgfSBmcm9tICcuLi9jb2x1bW4tc2VsZWN0b3IvY29sdW1uLXNlbGVjdG9yLnNlcnZpY2UnO1xuaW1wb3J0IHsgRXhwb3J0TGltaXRDb25maWd1cmF0aW9uLCBNQVhfRVhQT1JUX0lURU1TIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9idG5leHAuZGlyZWN0aXZlJztcblxuLy8gcmVzdG9yZSBqcXVlcnkgaW1wb3J0IHRvIGF2b2lkIENhbm5vdCBjYWxsIGEgbmFtZXNwYWNlICgnanF1ZXJ5JykgZXJyb3JcbmNvbnN0IGpRdWVyeSA9IGpRdWVyeV87XG5leHBvcnQgaW50ZXJmYWNlIEFkdmFuY2VkVGFibGVEYXRhUmVzdWx0IHtcbiAgcmVjb3Jkc1RvdGFsOiBudW1iZXI7XG4gIHJlY29yZHNGaWx0ZXJlZDogbnVtYmVyO1xuICBkYXRhOiBBcnJheTxhbnk+O1xufVxuXG5jb25zdCBEYXRhVGFibGVzQXBpOiBhbnkgPSBqUXVlcnkuZm4uZGF0YVRhYmxlLkFwaTtcbkRhdGFUYWJsZXNBcGkucmVnaXN0ZXIoICdwcm9jZXNzaW5nKCknLCBmdW5jdGlvbiggc2hvdzogYW55ICkge1xuICAgIHJldHVybiB0aGlzLml0ZXJhdG9yKCd0YWJsZScsICggY3R4OiBhbnkgKSA9PiB7XG4gICAgICAgIGN0eC5vQXBpLl9mblByb2Nlc3NpbmdEaXNwbGF5KCBjdHgsIHNob3cgKTtcbiAgICB9ICk7XG59KTtcblxuY29uc3QgRU1QVFlfREFUQVNFVCA9IHtcbiAgcmVjb3Jkc1RvdGFsOiAwLFxuICByZWNvcmRzRmlsdGVyZWQ6IDAsXG4gIGRhdGE6IFtdLFxufTtcblxuY2xhc3MgVGFibGVUcmFuc2xhdGlvbkNoYW5nZURldGVjdG9yIGV4dGVuZHMgQ2hhbmdlRGV0ZWN0b3JSZWYge1xuICBwdWJsaWMgY2hlY2tOb0NoYW5nZXMoKTogdm9pZCB7XG4gIH1cblxuICBwdWJsaWMgZGV0YWNoKCk6IHZvaWQge1xuICB9XG5cbiAgcHVibGljIGRldGVjdENoYW5nZXMoKTogdm9pZCB7XG4gIH1cblxuICBwdWJsaWMgbWFya0ZvckNoZWNrKCk6IHZvaWQge1xuICB9XG5cbiAgcHVibGljIHJlYXR0YWNoKCk6IHZvaWQge1xuICB9XG5cbn1cblxuZXhwb3J0IGxldCBDT0xVTU5fRk9STUFUVEVSUyA9IG5ldyBJbmplY3Rpb25Ub2tlbignY29sdW1uLmZvcm1hdHRlcnMnKTtcblxuZXhwb3J0IGNsYXNzIEV4cG9ydExpbWl0RXhjZWVkZWRFcnJvciBleHRlbmRzIFJhbmdlRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgICB0aGlzLm5hbWUgPSAnRXhwb3J0TGltaXRFeGNlZWRlZEVycm9yJztcbiAgfVxufVxuXG5jbGFzcyBDb2x1bW5Gb3JtYXR0ZXIgZXh0ZW5kcyBBZHZhbmNlZENvbHVtbkZvcm1hdHRlciB7XG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBpbmplY3RvcjogSW5qZWN0b3IpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgcHVibGljIGNsYXNzPzogc3RyaW5nO1xuICBwdWJsaWMgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBwdWJsaWMgZGVmYXVsdENvbnRlbnQ/OiBzdHJpbmc7XG4gIHB1YmxpYyBmb3JtYXRTdHJpbmc/OiBzdHJpbmc7XG4gIHB1YmxpYyBmb3JtYXR0ZXI/OiBzdHJpbmc7XG4gIHB1YmxpYyBoaWRkZW4/OiBib29sZWFuO1xuICBwdWJsaWMgbmFtZT86IHN0cmluZztcbiAgcHVibGljIG9yZGVyPzogc3RyaW5nO1xuICBwdWJsaWMgcHJvcGVydHk/OiBzdHJpbmc7XG4gIHB1YmxpYyBzb3J0YWJsZT86IGJvb2xlYW47XG4gIHB1YmxpYyB0aXRsZSA9ICcnO1xuXG4gIHB1YmxpYyByZW5kZXIoZGF0YTogYW55LCB0eXBlOiBhbnksIHJvdzogYW55LCBtZXRhOiBhbnkpIHtcbiAgICAvL1xuICB9XG59XG5cbmZ1bmN0aW9uIGZvcmNlQ2FzdDxUPihpbnB1dDogYW55KTogVCB7XG4gIHJldHVybiBpbnB1dDtcbn1cblxuZXhwb3J0IGNsYXNzIEFkdmFuY2VkVGFibGVDb25maWd1cmF0aW9uIHtcbiAgcHVibGljIHN0YXRpYyBjYXN0KGlucHV0OiBhbnksIGNsb25lPzogYm9vbGVhbik6IFRhYmxlQ29uZmlndXJhdGlvbiB7XG4gICAgaWYgKGNsb25lKSB7XG4gICAgICByZXR1cm4gZm9yY2VDYXN0PFRhYmxlQ29uZmlndXJhdGlvbj4oSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShpbnB1dCkpKTtcbiAgICB9XG4gICAgcmV0dXJuIGZvcmNlQ2FzdDxUYWJsZUNvbmZpZ3VyYXRpb24+KGlucHV0KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRSYW5kb21JZGVudGlmaWVyKCkge1xuICByZXR1cm4gKFxuICAgIE51bWJlcihTdHJpbmcoTWF0aC5yYW5kb20oKSkuc2xpY2UoMikpXG4gICkudG9TdHJpbmcoMzYpO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBjb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdhcHAtYWR2YW5jZWQtdGFibGUnLFxuICB0ZW1wbGF0ZTogYFxuICAgIDx0YWJsZSAjdGFibGUgY2xhc3M9XCJkYXRhVGFibGVcIj5cbiAgICA8L3RhYmxlPlxuICAgIDxkaXYgI2VtcHR5VGFibGUgY2xhc3M9XCJkLW5vbmVcIj5cbiAgICAgIDxkaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtdC00XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImljb24tY2lyY2xlIGJnLWdyYXktMzAwIGJvcmRlci1ncmF5LTEwMFwiPjwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm10LTRcIj5cbiAgICAgICAgICA8aDQgY2xhc3M9XCJmb250LTN4bCB0ZXh0LWRhcmtcIiBbdHJhbnNsYXRlXT1cIidUYWJsZXMuRW1wdHlUYWJsZVRpdGxlJ1wiPjwvaDQ+XG4gICAgICAgICAgPHAgY2xhc3M9XCJmb250LWxnIHRleHQtZGFya1wiIFt0cmFuc2xhdGVdPVwiJ1RhYmxlcy5FbXB0eVRhYmxlTWVzc2FnZSdcIj48L3A+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAjZXJyb3JUZW1wbGF0ZSBjbGFzcz1cImQtbm9uZSBlcnJvci1tZXNzYWdlXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm10LTRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaWNvbi1jaXJjbGUgYmctZGFuZ2VyIGJvcmRlci1ncmF5LTEwMFwiPjwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm10LTRcIj5cbiAgICAgICAgICA8aDQgY2xhc3M9XCJmb250LTN4bCB0ZXh0LXNlY29uZGFyeVwiIFt0cmFuc2xhdGVdPVwiJ1RhYmxlcy5EYXRhRXJyb3IuVGl0bGUnXCI+PC9oND5cbiAgICAgICAgICA8cCBjbGFzcz1cImZvbnQtbGcgdGV4dC1zZWNvbmRhcnkgbWItMVwiIFt0cmFuc2xhdGVdPVwiJ1RhYmxlcy5EYXRhRXJyb3IuTWVzc2FnZSdcIj48L3A+XG4gICAgICAgICAgPHAgY2xhc3M9XCJmb250LWxnIHRleHQtc2Vjb25kYXJ5IGVycm9yLWlubmVyLW1lc3NhZ2VcIj5cbiAgICAgICAgICAgIDxzbWFsbD48L3NtYWxsPlxuICAgICAgICAgIDwvcD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgYCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgc3R5bGVVcmxzOiBbJy4vYWR2YW5jZWQtdGFibGUuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgQWR2YW5jZWRUYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXQge1xuXG4gIHByaXZhdGUgX3F1ZXJ5PzogQ2xpZW50RGF0YVF1ZXJ5YWJsZTtcbiAgcHJpdmF0ZSBfY29uZmlnPzogVGFibGVDb25maWd1cmF0aW9uO1xuICBwcml2YXRlIF9maXJzdExvYWQgPSB0cnVlO1xuICBwcml2YXRlIF9zaG93Rm9vdGVyID0gZmFsc2U7XG4gIHByaXZhdGUgX3Nob3dIZWFkZXIgPSB0cnVlO1xuICBwcml2YXRlIF9zaG93UGFnaW5nID0gZmFsc2U7XG4gIHByaXZhdGUgX2lkID0gZ2V0UmFuZG9tSWRlbnRpZmllcigpO1xuICBwdWJsaWMgc21hcnRTZWxlY3QgPSBmYWxzZTtcbiAgcHVibGljIGNvbmZpZ0NoYW5nZXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4obnVsbCk7XG5cbiAgQFZpZXdDaGlsZCgndGFibGUnKSBwdWJsaWMgdGFibGU/OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdlbXB0eVRhYmxlJykgcHVibGljIGVtcHR5VGFibGU/OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdlcnJvclRlbXBsYXRlJykgcHVibGljIGVycm9yVGVtcGxhdGU/OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdsb2FkaW5nVGFibGUnKSBwdWJsaWMgbG9hZGluZ1RhYmxlPzogRWxlbWVudFJlZjtcbiAgQElucHV0KCkgcHVibGljIGhlaWdodCA9IDgwMDtcbiAgQElucHV0KCkgcHVibGljIHNob3dBY3Rpb25zID0gdHJ1ZTtcbiAgQElucHV0KCkgcHVibGljIGF1dG9Mb2FkID0gdHJ1ZTtcbiAgQE91dHB1dCgnbG9hZCcpIHB1YmxpYyBsb2FkOiBFdmVudEVtaXR0ZXI8QWR2YW5jZWRUYWJsZURhdGFSZXN1bHQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxBZHZhbmNlZFRhYmxlRGF0YVJlc3VsdD4oKTtcbiAgQE91dHB1dCgnaW5pdCcpIHB1YmxpYyBpbml0OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBASW5wdXQoJ3JlbG9hZCcpIHB1YmxpYyByZWxvYWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoJ3NlbGVjdCcpIHB1YmxpYyBzZWxlY3Q6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoJ2RyYXcnKSBwdWJsaWMgZHJhdzogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgncGFnZScpIHB1YmxpYyBwYWdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCdvcmRlcicpIHB1YmxpYyBvcmRlcjogRXZlbnRFbWl0dGVyPGFueVtdW10+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnlbXVtdPigpO1xuICBAT3V0cHV0KCdzY3JvbGwnKSBwdWJsaWMgc2Nyb2xsOiBFdmVudEVtaXR0ZXI8eyB0b3A6IG51bWJlcjsgbGVmdDogbnVtYmVyIH0+ID0gbmV3IEV2ZW50RW1pdHRlcjx7IHRvcDogbnVtYmVyOyBsZWZ0OiBudW1iZXIgfT4oKTtcbiAgQE91dHB1dCgnc2VsZWN0ZWRJdGVtcycpIHB1YmxpYyBzZWxlY3RlZEl0ZW1zOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCdsb2FkaW5nJykgcHVibGljIGxvYWRpbmc6IEV2ZW50RW1pdHRlcjx7XG4gICAgdGFyZ2V0OiBBZHZhbmNlZFRhYmxlQ29tcG9uZW50XG4gIH0+ID0gbmV3IEV2ZW50RW1pdHRlcjx7XG4gICAgdGFyZ2V0OiBBZHZhbmNlZFRhYmxlQ29tcG9uZW50XG4gIH0+KCk7XG5cbiAgQElucHV0KCkgcHVibGljIHNjcm9sbGFibGUgPSB0cnVlO1xuICBASW5wdXQoKSBwdWJsaWMgc2VydmVyU2lkZSA9IHRydWU7XG4gIEBJbnB1dCgpIHB1YmxpYyBsZW5ndGhNZW51ID0gWzUwLCAxMDAsIDIwMCwgNTAwXTtcbiAgQElucHV0KCkgcHVibGljIHBhZ2luZyA9IHRydWU7XG4gIEBJbnB1dCgpIHB1YmxpYyBwYWdlTGVuZ3RoID0gMjU7XG4gIEBJbnB1dCgpIHB1YmxpYyBjb2x1bW5PcmRlcmluZyA9IGZhbHNlO1xuICBASW5wdXQoKSBwdWJsaWMgc3RhdGVTYXZlID0gZmFsc2U7XG4gIEBJbnB1dCgpIHB1YmxpYyBzdGF0ZUxvYWRDYWxsYmFjaz86IChzZXR0aW5nczogYW55LCBjYWxsYmFjazogKHN0YXRlOiBhbnkpID0+IHZvaWQpID0+IHZvaWQ7XG4gIEBJbnB1dCgpIHB1YmxpYyBzdGF0ZVNhdmVDYWxsYmFjaz86IChzZXR0aW5nczogYW55LCBzdGF0ZTogYW55KSA9PiB2b2lkO1xuXG4gIEBJbnB1dCgpIHB1YmxpYyBzY3JvbGxZID0gODAwO1xuICBASW5wdXQoKSBwdWJsaWMgc2Nyb2xsWCA9IHRydWU7XG4gIC8qKlxuICAgKiBFbmFibGVzIHJvdyBzZWxlY3Rpb24uIFRoZSBkZWZhdWxyIHZhbHVlIGlzIGZhbHNlXG4gICAqL1xuICBASW5wdXQoKSBwdWJsaWMgc2VsZWN0YWJsZTogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGZhbHNlO1xuICAvKipcbiAgICogRW5hYmxlcyBvciBkaXNhYmxlIG11bHRpcGxlIHNlbGVjdGlvbi4gVGhlIGRlZmF1bHQgdmFsdWVzIGlzIHRydWUuXG4gICAqL1xuICBASW5wdXQoKSBwdWJsaWMgbXVsdGlwbGVTZWxlY3Q6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSB0cnVlO1xuICAvKipcbiAgICogRW5hYmxlcyBjdXN0b20gc2VsZWN0aW9uIGFuZCBoaWRlcyBzZWxlY3QgY29sdW1uLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAgZmFsc2VcbiAgICovXG4gIEBJbnB1dCgpIHB1YmxpYyBjdXN0b21TZWxlY3QgPSBmYWxzZTtcbiAgQElucHV0KCkgcHVibGljIHNlbGVjdGVkOiBhbnlbXSA9IFtdO1xuICBwdWJsaWMgdW5zZWxlY3RlZDogYW55W10gPSBbXTtcbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyBhIFVSTCB0byBsb2FkIHRhYmxlIGNvbmZpZ3VyYXRpb24gZnJvbVxuICAgKi9cbiAgQElucHV0KCkgcHVibGljIGNvbmZpZ1NyYz86IHN0cmluZztcbiAgcHVibGljIGxhc3RFcnJvcjogYW55O1xuXG4gIC8qKlxuICAgKiBBY2NlcHRzIGFycmF5IG9mIHByb3BlcnRpZXMgYXMgcm93IGdyb3VwIGZhY3RvcnMgYW5kIGRpc3BsYXlzIGdyb3VwZWQgdGFibGUuIFxuICAgKi9cbiAgQElucHV0KCkgcm93R3JvdXA6ICBzdHJpbmdbXSA9IFtdO1xuICBwcml2YXRlIGxhc3RSb3dHcm91cE9yZGVyPzogeyBjb2x1bW46IG51bWJlcjsgZGlyZWN0aW9uOiBzdHJpbmc7IH0gfCBudWxsO1xuXG4gIEBJbnB1dCgpIGhlYWRlclRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PjtcbiAgQElucHV0KCkgZm9vdGVyVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBAVmlld0NoaWxkKCdoZWFkZXInKSBoZWFkZXI/OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdmb290ZXInKSBmb290ZXI/OiBFbGVtZW50UmVmO1xuXG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgdGFibGUgY29uZmlndXJhdGlvblxuICAgKi9cbiAgQElucHV0KCdjb25maWcnKVxuICBwdWJsaWMgc2V0IGNvbmZpZyh2YWx1ZTogVGFibGVDb25maWd1cmF0aW9uKSB7XG4gICAgdGhpcy5fY29uZmlnID0gdmFsdWU7XG4gICAgLy8gcmFpc2Ugc3Vic2NyaXB0aW9uXG4gICAgdGhpcy5jb25maWdDaGFuZ2VzLm5leHQodGhpcy5fY29uZmlnKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY29uZmlnKCkge1xuICAgIHJldHVybiB0aGlzLl9jb25maWcgYXMgVGFibGVDb25maWd1cmF0aW9uO1xuICB9XG5cbiAgcHVibGljIGdldCBsYXN0UXVlcnlUb3RhbEl0ZW1zKCkge1xuICAgIHJldHVybiB0aGlzLl9sYXN0UXVlcnlUb3RhbEl0ZW1zO1xuICB9XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRhYmxlIGZvb3RlciB3aWxsIGJlIHZpc2libGUgb3Igbm90XG4gICAqL1xuICBASW5wdXQoJ3Nob3dGb290ZXInKVxuICBwdWJsaWMgc2V0IHNob3dGb290ZXIodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9zaG93Rm9vdGVyID0gdmFsdWU7XG4gICAgLy8gc2hvdyBvciBoaWRlIGZvb3RlclxuICAgIGlmICh0aGlzLl9lbGVtZW50ICYmIHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudCkge1xuICAgICAgY29uc3QgZWxlbWVudCA9ICggdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50IGFzIEhUTUxEaXZFbGVtZW50KVxuICAgICAgICAucXVlcnlTZWxlY3RvcignLmRhdGFUYWJsZXNfaW5mbycpO1xuICAgICAgaWYgKGVsZW1lbnQgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdkLW5vbmUnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnZC1ub25lJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCBzaG93Rm9vdGVyKCkge1xuICAgIHJldHVybiB0aGlzLl9zaG93Rm9vdGVyO1xuICB9XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRhYmxlIGZvb3RlciB3aWxsIGJlIHZpc2libGUgb3Igbm90XG4gICAqL1xuICAgQElucHV0KCdzaG93SGVhZGVyJylcbiAgIHB1YmxpYyBzZXQgc2hvd0hlYWRlcih2YWx1ZTogYm9vbGVhbikge1xuICAgICB0aGlzLl9zaG93SGVhZGVyID0gdmFsdWU7XG4gICAgIC8vIHNob3cgb3IgaGlkZSBmb290ZXJcbiAgICAgaWYgKHRoaXMuX2VsZW1lbnQgJiYgdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgY29uc3QgZWxlbWVudCA9ICggdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50IGFzIEhUTUxEaXZFbGVtZW50KVxuICAgICAgICAgLnF1ZXJ5U2VsZWN0b3IoJy5kYXRhVGFibGU+dGhlYWQnKTtcbiAgICAgICBpZiAoZWxlbWVudCA9PSBudWxsKSB7XG4gICAgICAgICByZXR1cm47XG4gICAgICAgfVxuICAgICAgIGNvbnN0IGRhdGFUYWJsZSA9ICggdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50IGFzIEhUTUxEaXZFbGVtZW50KS5xdWVyeVNlbGVjdG9yKCcuZGF0YVRhYmxlJyk7XG4gICAgICAgaWYgKGRhdGFUYWJsZSA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgICB9XG4gICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ2Qtbm9uZScpO1xuICAgICAgICAgLy8gYWRkIHRvcCBtYXJnaW5cbiAgICAgICAgIGRhdGFUYWJsZS5jbGFzc0xpc3QucmVtb3ZlKCdtdC0yJyk7XG4gICAgICAgfSBlbHNlIHtcbiAgICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnZC1ub25lJyk7XG4gICAgICAgICAvLyByZW1vdmUgdG9wIG1hcmdpblxuICAgICAgICAgZGF0YVRhYmxlLmNsYXNzTGlzdC5hZGQoJ210LTInKTtcbiAgICAgICB9XG4gICAgIH1cbiAgIH1cblxuICAgcHVibGljIGdldCBzaG93SGVhZGVyKCkge1xuICAgICByZXR1cm4gdGhpcy5fc2hvd0hlYWRlcjtcbiAgIH1cblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgcGFnaW5nIGluZm9ybWF0aW9uIHdpbGwgYmUgdmlzaWJsZSBvciBub3RcbiAgICovXG4gIEBJbnB1dCgnc2hvd1BhZ2luZycpXG4gIHB1YmxpYyBzZXQgc2hvd1BhZ2luZyh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX3Nob3dQYWdpbmcgPSB2YWx1ZTtcbiAgICAvLyBzaG93IG9yIGhpZGUgZm9vdGVyXG4gICAgaWYgKHRoaXMuX2VsZW1lbnQgJiYgdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICBjb25zdCBlbGVtZW50ID0gKCB0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQgYXMgSFRNTERpdkVsZW1lbnQpXG4gICAgICAgIC5xdWVyeVNlbGVjdG9yKCcuZGF0YVRhYmxlc19wYWdpbmF0ZScpO1xuICAgICAgaWYgKGVsZW1lbnQgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgalF1ZXJ5KGVsZW1lbnQpLnNob3coKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGpRdWVyeShlbGVtZW50KS5oaWRlKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCBzaG93UGFnaW5nKCkge1xuICAgIHJldHVybiB0aGlzLl9zaG93UGFnaW5nO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyBhbiBhY3RpdmUgcXVlcnkgZm9yIHRoaXMgdGFibGVcbiAgICovXG4gIEBJbnB1dCgncXVlcnknKVxuICBwdWJsaWMgc2V0IHF1ZXJ5KHZhbHVlOiBDbGllbnREYXRhUXVlcnlhYmxlIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fcXVlcnkgPSB2YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcXVlcnkoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3F1ZXJ5IGFzIENsaWVudERhdGFRdWVyeWFibGU7XG4gIH1cblxuICBwdWJsaWMgcmVhZG9ubHkgdHJhbnNsYXRvcjogVHJhbnNsYXRlUGlwZTtcbiAgcHVibGljIGRhdGFUYWJsZTogYW55O1xuICBwdWJsaWMgZHRPcHRpb25zOiBhbnk7XG4gIHByaXZhdGUgbGFzdFF1ZXJ5UGFyYW1zPzogRGF0YVNlcnZpY2VRdWVyeVBhcmFtcztcbiAgcHJpdmF0ZSBfbGFzdFF1ZXJ5VG90YWxJdGVtcyA9IDA7XG4gIHByaXZhdGUgcmVsb2FkU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9jb250ZXh0OiBBbmd1bGFyRGF0YUNvbnRleHQsXG4gICAgICAgICAgICAgIEBJbmplY3QoQ09MVU1OX0ZPUk1BVFRFUlMpIHByaXZhdGUgX2NvbHVtbkZvcm1hdHRlcnM6IElBZHZhbmNlZFRhYmxlRm9ybWF0dGVycyxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgICAgICAgICAgICBwcml2YXRlIF90cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgICAgICAgICAgICBwcml2YXRlIF9pbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgICAgICAgIHByaXZhdGUgX2FkdmFuY2VkRmlsdGVyVmFsdWVQcm92aWRlcjogQWR2YW5jZWRGaWx0ZXJWYWx1ZVByb3ZpZGVyLFxuICAgICAgICAgICAgICBwcml2YXRlIF9lbGVtZW50OiBFbGVtZW50UmVmLFxuICAgICAgICAgICAgICBwcml2YXRlIF90ZW1wbGF0ZTogVGVtcGxhdGVQaXBlLFxuICAgICAgICAgICAgICBwcml2YXRlIF9sb2FkaW5nOiBMb2FkaW5nU2VydmljZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfaHR0cDogSHR0cENsaWVudCxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfY29sdW1uU2VsZWN0b3I6IENvbHVtblNlbGVjdG9yU2VydmljZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfY29uZmlndXJhdGlvbjogQ29uZmlndXJhdGlvblNlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgX2V4cG9ydFNwcmVhZHNoZWV0OiBFeHBvcnRTcHJlYWRzaGVldFNlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgX21vZGFsU2VydmljZTogTW9kYWxTZXJ2aWNlLFxuICAgICAgICAgICAgICBwcml2YXRlIF9lcnJvclNlcnZpY2U6IEVycm9yU2VydmljZSwgXG4gICAgICAgICAgICAgIHByaXZhdGUgX3ZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYpIHtcbiAgICAvLyBpbml0aWFsaXplIHRyYW5zbGF0ZSBwaXBlXG4gICAgdGhpcy50cmFuc2xhdG9yID0gbmV3IFRyYW5zbGF0ZVBpcGUodGhpcy5fdHJhbnNsYXRlU2VydmljZSwgbmV3IFRhYmxlVHJhbnNsYXRpb25DaGFuZ2VEZXRlY3RvcigpKTtcbiAgICBqUXVlcnkuZm4uZGF0YVRhYmxlLmV4dC5jbGFzc2VzLnNQYWdlQnV0dG9uID0gJ2J0bic7XG4gICAgalF1ZXJ5LmZuLmRhdGFUYWJsZS5leHQuY2xhc3Nlcy5zUGFnZUJ1dHRvbkFjdGl2ZSA9ICdidG4gYnRuLWxpZ2h0JztcbiAgICB0aGlzLnJlbG9hZFN1YnNjcmlwdGlvbiA9IHRoaXMucmVsb2FkLnN1YnNjcmliZSgoZGF0YSkgPT4ge1xuICAgICAgdGhpcy5mZXRjaCgpO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gc2ltcGxlIHNlYXJjaFxuICBwdWJsaWMgc2VhcmNoKHNlYXJjaFRleHQpIHtcbiAgICB0aGlzLnF1ZXJ5ID0gdGhpcy5xdWVyeSB8fCB0aGlzLl9jb250ZXh0Lm1vZGVsKHRoaXMuY29uZmlnLm1vZGVsKS5hc1F1ZXJ5YWJsZSgpO1xuICAgIGlmICh0aGlzLnNlcnZlclNpZGUpIHtcbiAgICAgIGlmIChzZWFyY2hUZXh0ICYmIHRoaXMuY29uZmlnLnNlYXJjaEV4cHJlc3Npb24pIHtcbiAgICAgICAgLy8gdmFsaWRhdGUgc2VhcmNoIHRleHQgaW4gZG91YmxlIHF1b3Rlc1xuICAgICAgICBpZiAoL15cIiguKj8pXCIkLy50ZXN0KHNlYXJjaFRleHQpKSB7XG4gICAgICAgICAgdGhpcy5xdWVyeS5zZXRQYXJhbSgnJGZpbHRlcicsXG4gICAgICAgICAgICB0aGlzLl90ZW1wbGF0ZS50cmFuc2Zvcm0odGhpcy5jb25maWcuc2VhcmNoRXhwcmVzc2lvbiwge1xuICAgICAgICAgICAgICB0ZXh0OiBzZWFyY2hUZXh0LnJlcGxhY2UoL15cInxcIiQvZywgJycpLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIHRyeSB0byBzcGxpdCB3b3Jkc1xuICAgICAgICAgIGNvbnN0IHdvcmRzID0gc2VhcmNoVGV4dC5zcGxpdCgnICcpO1xuICAgICAgICAgIC8vIGpvaW4gd29yZHMgdG8gYSBzaW5nbGUgZmlsdGVyXG4gICAgICAgICAgY29uc3QgZmlsdGVyID0gd29yZHMubWFwKCh3b3JkKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdGVtcGxhdGUudHJhbnNmb3JtKCh0aGlzLmNvbmZpZyAmJiB0aGlzLmNvbmZpZy5zZWFyY2hFeHByZXNzaW9uKSBhcyBzdHJpbmcsIHtcbiAgICAgICAgICAgICAgdGV4dDogd29yZCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pLmpvaW4oJyBhbmQgJyk7XG4gICAgICAgICAgLy8gc2V0IGZpbHRlclxuICAgICAgICAgIHRoaXMucXVlcnkuc2V0UGFyYW0oJyRmaWx0ZXInLCBmaWx0ZXIpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBjbGVhciBmaWx0ZXJcbiAgICAgICAgdGhpcy5xdWVyeS5zZXRQYXJhbSgnJGZpbHRlcicsIG51bGwpO1xuICAgICAgfVxuICAgICAgdGhpcy5fZmlyc3RMb2FkID0gZmFsc2U7XG4gICAgICB0aGlzLmRhdGFUYWJsZS5kcmF3KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGVuc3VyZSBlbXB0eSB0YWJsZSBsYXlvdXRcbiAgICAgIHRoaXMucmVzZXRFbXB0eVRhYmxlKCk7XG4gICAgICAvLyBzZWFyY2ggbG9jYWxseVxuICAgICAgdGhpcy5kYXRhVGFibGUuc2VhcmNoKHNlYXJjaFRleHQudHJpbSgpKS5kcmF3KCk7XG4gICAgICAvLyBnZXQgaW5kZXhlcyBvZiBmaWx0ZXJlZCByb3dzXG4gICAgICBjb25zdCBpbmRleGVzID0gQXJyYXkuZnJvbSh0aGlzLmRhdGFUYWJsZS5jb250ZXh0WzBdLmFpRGlzcGxheSk7XG4gICAgICAvLyBzZXQgcmVjb3Jkc0ZpbHRlcmVkXG4gICAgICBjb25zdCByZWNvcmRzRmlsdGVyZWQgPSBpbmRleGVzLmxlbmd0aDtcbiAgICAgIC8vIHNldCByZWNvcmRzVG90YWxcbiAgICAgIGNvbnN0IHJlY29yZHNUb3RhbCA9IGluZGV4ZXMubGVuZ3RoO1xuICAgICAgLy8gcmV0cmlldmUgZGF0YSBmcm9tIGluZGV4ZXNcbiAgICAgIGNvbnN0IHJvd3MgPSBBcnJheS5mcm9tKHRoaXMuZGF0YVRhYmxlLnJvd3MoKS5kYXRhKCkpO1xuICAgICAgY29uc3QgZGF0YSA9IGluZGV4ZXMubWFwKGluZGV4ID0+IHJvd3NbPG51bWJlcj5pbmRleF0pO1xuICAgICAgLy8gZW1pdCByZXN1bHRzIHRvIGxvYWQgb3V0cHV0XG4gICAgICB0aGlzLmxvYWQuZW1pdCh7XG4gICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgIHJlY29yZHNGaWx0ZXJlZDogcmVjb3Jkc0ZpbHRlcmVkLFxuICAgICAgICByZWNvcmRzVG90YWw6IHJlY29yZHNUb3RhbFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGZldGNoKGNsZWFyU2VsZWN0ZWQ/OiBib29sZWFuKSB7XG4gICAgLy8gaWYgZGF0YSB0YWJsZSBpcyBudWxsXG4gICAgaWYgKHRoaXMuZGF0YVRhYmxlID09IG51bGwpIHtcbiAgICAgIC8vIGluaXRpYWxpemUgZGF0YSB0YWJsZVxuICAgICAgcmV0dXJuIHRoaXMubmdPbkluaXQoKTtcbiAgICB9XG4gICAgLy8gY2xlYXIgc2VsZWN0aW9uIGlmIHBhcmFtZXRlciBpcyBub3QgZGVjbGFyZWQgb3IgaXQncyB0cnVlXG4gICAgaWYgKGNsZWFyU2VsZWN0ZWQgPT0gbnVsbCB8fCBjbGVhclNlbGVjdGVkID09PSB0cnVlKSB7XG4gICAgICAvLyBzZXQgc21hcnQgc2VsZWN0IHRvIGZhbHNlXG4gICAgICB0aGlzLnNtYXJ0U2VsZWN0ID0gZmFsc2U7XG4gICAgICAvLyBjbGVhciBzZWxlY3RlZCBpdGVtc1xuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWQubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWQuc3BsaWNlKDAsIHRoaXMuc2VsZWN0ZWQubGVuZ3RoKTtcbiAgICAgIH1cbiAgICAgIC8vIGNsZWFyIHVuc2VsZWN0ZWQgaXRlbXNcbiAgICAgIGlmICh0aGlzLnVuc2VsZWN0ZWQubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMudW5zZWxlY3RlZC5zcGxpY2UoMCwgdGhpcy51bnNlbGVjdGVkLmxlbmd0aCk7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIG90aGVyd2lzZSBsb2FkIGRhdGEgb25seVxuICAgIHRoaXMuZGF0YVRhYmxlLmRyYXcoKTtcbiAgfVxuXG4gIHB1YmxpYyBkZXN0cm95KCkge1xuICAgIGlmICh0aGlzLmRhdGFUYWJsZSkge1xuICAgICAgdGhpcy5kYXRhVGFibGUuZGVzdHJveSgpO1xuICAgICAgdGhpcy5fZmlyc3RMb2FkID0gdHJ1ZTtcbiAgICAgIGlmICh0aGlzLnRhYmxlKSB7XG4gICAgICAgIGpRdWVyeSh0aGlzLnRhYmxlLm5hdGl2ZUVsZW1lbnQpLmVtcHR5KCk7XG4gICAgICB9XG4gICAgICB0aGlzLmRhdGFUYWJsZSA9IG51bGw7XG4gICAgICAvLyBjbGVhciBzZWxlY3RlZCBpdGVtc1xuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWQubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWQuc3BsaWNlKDAsIHRoaXMuc2VsZWN0ZWQubGVuZ3RoKTtcbiAgICAgIH1cbiAgICAgIC8vIGNsZWFyIHVuc2VsZWN0ZWQgaXRlbXNcbiAgICAgIGlmICh0aGlzLnVuc2VsZWN0ZWQubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMudW5zZWxlY3RlZC5zcGxpY2UoMCwgdGhpcy51bnNlbGVjdGVkLmxlbmd0aCk7XG4gICAgICB9XG4gICAgICAvLyBzZXQgc21hcnQgc2VsZWN0IHRvIGZhbHNlXG4gICAgICB0aGlzLnNtYXJ0U2VsZWN0ID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNlbGVjdHMgdGhlIHNwZWNpZmllZCBkYXRhIHJvd1xuICAgKi9cbiAgcHVibGljIHNlbGVjdFJvdyhyb3c6IGFueSwgc2lsZW50PzogYm9vbGVhbikge1xuICAgIGlmIChyb3cpIHtcbiAgICAgIC8vIGdldCByb3dcbiAgICAgIGNvbnN0IHJvd05vZGUgPSByb3cubm9kZSgpO1xuICAgICAgLy8gaWYgbXVsdGlwbGUgc2VsZWN0IGlzIGZhbHNlXG4gICAgICBpZiAodGhpcy5tdWx0aXBsZVNlbGVjdCA9PT0gZmFsc2UpIHtcbiAgICAgICAgaWYgKHRoaXMuY3VzdG9tU2VsZWN0ID09PSBmYWxzZSkge1xuICAgICAgICAgIC8vIGVudW1lcmF0ZSByb3dcbiAgICAgICAgICB0aGlzLmRhdGFUYWJsZS5yb3dzKCkubm9kZXMoKS5lYWNoKChub2RlOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChub2RlICE9PSByb3dOb2RlKSB7XG4gICAgICAgICAgICAgIGpRdWVyeShub2RlKS5maW5kKCc6Y2hlY2tib3gnKS5wcm9wKCdjaGVja2VkJywgZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZGF0YVRhYmxlLnJvd3MoJy5zZWxlY3RlZCcpLm5vZGVzKCkuZWFjaCgobm9kZTogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAobm9kZSAhPT0gcm93Tm9kZSkge1xuICAgICAgICAgICAgICBqUXVlcnkobm9kZSkucmVtb3ZlQ2xhc3MoJ3NlbGVjdGVkJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY2xlYXIgc2VsZWN0ZWRcbiAgICAgICAgdGhpcy5zZWxlY3RlZC5zcGxpY2UoMCwgdGhpcy5zZWxlY3RlZC5sZW5ndGgpO1xuICAgICAgfVxuICAgICAgLy8gaWYgY3VzdG9tIHNlbGVjdCBtb2RlIGlzIG9mZlxuICAgICAgaWYgKHRoaXMuY3VzdG9tU2VsZWN0ID09PSBmYWxzZSkge1xuICAgICAgICBqUXVlcnkocm93Tm9kZSkuZmluZCgnOmNoZWNrYm94JykucHJvcCgnY2hlY2tlZCcsIHRydWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gb3RoZXJ3aXNlIGFkZCBjbGFzc1xuICAgICAgICBqUXVlcnkocm93Lm5vZGUoKSkuYWRkQ2xhc3MoJ3NlbGVjdGVkJyk7XG4gICAgICB9XG4gICAgICAvLyBnZXQgcm93IGRhdGFcbiAgICAgIGNvbnN0IGtleSA9IHRoaXMuY29uZmlnLmNvbHVtbnNbMF0ucHJvcGVydHkgfHwgdGhpcy5jb25maWcuY29sdW1uc1swXS5uYW1lIHx8ICcnO1xuICAgICAgY29uc3QgZGF0YSA9IHJvdy5kYXRhKCk7XG4gICAgICAvLyBzZWFyY2ggc2VsZWN0ZWQgaXRlbXNcbiAgICAgIGxldCBmaW5kSW5kZXggPSB0aGlzLnNlbGVjdGVkLmZpbmRJbmRleCgoeCkgPT4ge1xuICAgICAgICByZXR1cm4geFtrZXldID09PSBkYXRhW2tleV07XG4gICAgICB9KTtcbiAgICAgIGlmIChmaW5kSW5kZXggPj0gMCkge1xuICAgICAgICAvLyByZW1vdmUgcHJldmlvdXNseSBzZWxlY3RlZCByb3dcbiAgICAgICAgdGhpcy5zZWxlY3RlZC5zcGxpY2UoZmluZEluZGV4LCAxKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2VsZWN0ZWQucHVzaChkYXRhKTtcbiAgICAgIC8vIHZhbGlkYXRlIHVuc2VsZWN0ZWQgZGF0YVxuICAgICAgZmluZEluZGV4ID0gdGhpcy51bnNlbGVjdGVkLmZpbmRJbmRleCgoeCkgPT4ge1xuICAgICAgICByZXR1cm4geFtrZXldID09PSBkYXRhW2tleV07XG4gICAgICB9KTtcbiAgICAgIGlmIChmaW5kSW5kZXggPj0gMCkge1xuICAgICAgICAvLyByZW1vdmUgcHJldmlvdXNseSBzZWxlY3RlZCByb3dcbiAgICAgICAgdGhpcy51bnNlbGVjdGVkLnNwbGljZShmaW5kSW5kZXgsIDEpO1xuICAgICAgfVxuICAgICAgaWYgKHNpbGVudCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbXMuZW1pdCh0aGlzLnNlbGVjdGVkKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVW5zZWxlY3RzIHRoZSBzcGVjaWZpZWQgZGF0YSByb3cgaWYgaXQncyBzZWxlY3RlZFxuICAgKi9cbiAgcHVibGljIHVuU2VsZWN0Um93KHJvdzogYW55LCBzaWxlbnQ/OiBib29sZWFuKSB7XG4gICAgaWYgKHJvdykge1xuICAgICAgLy8gaWYgY3VzdG9tIHNlbGVjdCBtb2RlIGlzIG9mZlxuICAgICAgaWYgKHRoaXMuY3VzdG9tU2VsZWN0ID09PSBmYWxzZSkge1xuICAgICAgICBqUXVlcnkocm93Lm5vZGUoKSkuZmluZCgnOmNoZWNrYm94JykucHJvcCgnY2hlY2tlZCcsIGZhbHNlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIG90aGVyd2lzZSBhZGQgY2xhc3NcbiAgICAgICAgalF1ZXJ5KHJvdy5ub2RlKCkpLnJlbW92ZUNsYXNzKCdzZWxlY3RlZCcpO1xuICAgICAgfVxuICAgICAgLy8gZ2V0IGZpcnN0IGNvbHVtbiBrZXlcbiAgICAgIGNvbnN0IGtleSA9IHRoaXMuY29uZmlnLmNvbHVtbnNbMF0ucHJvcGVydHkgfHwgdGhpcy5jb25maWcuY29sdW1uc1swXS5uYW1lIHx8ICcnO1xuICAgICAgY29uc3QgZGF0YSA9IHJvdy5kYXRhKCk7XG4gICAgICBjb25zdCBpZCA9IGRhdGFba2V5XTtcbiAgICAgIGxldCBmaW5kSW5kZXggPSB0aGlzLnNlbGVjdGVkLmZpbmRJbmRleCgoeCkgPT4ge1xuICAgICAgICByZXR1cm4geFtrZXldID09PSBpZDtcbiAgICAgIH0pO1xuICAgICAgaWYgKGZpbmRJbmRleCA+PSAwKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWQuc3BsaWNlKGZpbmRJbmRleCwgMSk7XG4gICAgICAgIGlmICh0aGlzLnNtYXJ0U2VsZWN0KSB7XG4gICAgICAgICAgLy8gYWRkIHRoaXMgcm93IHRvIHVuc2VsZWN0ZWQgcm93c1xuICAgICAgICAgIGZpbmRJbmRleCA9IHRoaXMudW5zZWxlY3RlZC5maW5kSW5kZXgoKHgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB4W2tleV0gPT09IGlkO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmIChmaW5kSW5kZXggPCAwKSB7XG4gICAgICAgICAgICB0aGlzLnVuc2VsZWN0ZWQucHVzaChkYXRhKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNpbGVudCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMuZW1pdCh0aGlzLnNlbGVjdGVkKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2VsZWN0QW55KCkge1xuICAgIGlmICh0aGlzLmRhdGFUYWJsZSAmJiB0aGlzLnNlbGVjdGFibGUpIHtcbiAgICAgIC8vIHNldCBzbWFydCBzZWxlY3QgZmxhZ1xuICAgICAgdGhpcy5zbWFydFNlbGVjdCA9IHRydWU7XG4gICAgICAvLyBzZWxlY3QgYW55IHJvd1xuICAgICAgdGhpcy5kYXRhVGFibGUucm93cygpLmV2ZXJ5KChpbmRleDogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IHJvdyA9IHRoaXMuZGF0YVRhYmxlLnJvdyggaW5kZXggKTtcbiAgICAgICAgdGhpcy5zZWxlY3RSb3cocm93LCB0cnVlKTtcbiAgICAgIH0pO1xuICAgICAgLy8gZW1pdCBzZWxlY3Rpb24gZXZlbnRcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5lbWl0KHRoaXMuc2VsZWN0ZWQpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZWxlY3ROb25lKCkge1xuICAgIGlmICh0aGlzLmRhdGFUYWJsZSAmJiB0aGlzLnNlbGVjdGFibGUpIHtcbiAgICAgIC8vIHNldCBzbWFydCBzZWxlY3QgZmxhZ1xuICAgICAgdGhpcy5zbWFydFNlbGVjdCA9IGZhbHNlO1xuICAgICAgdGhpcy51bnNlbGVjdGVkLnNwbGljZSgwLCB0aGlzLnVuc2VsZWN0ZWQubGVuZ3RoKTtcbiAgICAgIC8vIHNlbGVjdCBhbnkgcm93XG4gICAgICB0aGlzLmRhdGFUYWJsZS5yb3dzKCkuZXZlcnkoKGluZGV4OiBhbnkpID0+IHtcbiAgICAgICAgY29uc3Qgcm93ID0gdGhpcy5kYXRhVGFibGUucm93KCBpbmRleCApO1xuICAgICAgICB0aGlzLnVuU2VsZWN0Um93KHJvdywgdHJ1ZSk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuc2VsZWN0ZWQuc3BsaWNlKDAsIHRoaXMuc2VsZWN0ZWQubGVuZ3RoKTtcbiAgICAgIC8vIGVtaXQgc2VsZWN0aW9uIGV2ZW50XG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbXMuZW1pdCh0aGlzLnNlbGVjdGVkKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgdG9nZ2xlU2VsZWN0Um93KHJvdzogYW55KSB7XG4gICAgaWYgKHJvdykge1xuICAgICAgY29uc3QgZGF0YSA9IHJvdy5kYXRhKCk7XG4gICAgICAvLyBnZXQgZmlyc3QgY29sdW1uIGtleVxuICAgICAgY29uc3Qga2V5ID0gdGhpcy5jb25maWcuY29sdW1uc1swXS5wcm9wZXJ0eSB8fCB0aGlzLmNvbmZpZy5jb2x1bW5zWzBdLm5hbWUgfHwgJyc7XG4gICAgICAvLyBnZXQgaWRcbiAgICAgIGNvbnN0IGlkID0gZGF0YVtrZXldO1xuICAgICAgLy8gZmluZCBpZiByb3cgaXMgc2VsZWN0ZWRcbiAgICAgIGNvbnN0IGZpbmRJbmRleCA9IHRoaXMuc2VsZWN0ZWQuZmluZCgoeCkgPT4ge1xuICAgICAgICByZXR1cm4geFtrZXldID09PSBpZDtcbiAgICAgIH0pO1xuICAgICAgLy8gaWYgcm93IGlzIHNlbGVjdGVkXG4gICAgICBpZiAoZmluZEluZGV4ID49IDApIHtcbiAgICAgICAgLy8gdW5zZWxlY3RcbiAgICAgICAgdGhpcy51blNlbGVjdFJvdyhyb3cpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zZWxlY3RSb3cocm93KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBub2luc3BlY3Rpb24gSlNNZXRob2RDYW5CZVN0YXRpY1xuICAvKipcbiAgICogRGF0YXRhYmxlcyBjb2x1bW4gcmVuZGVyZXIgZm9yIHNlbGVjdCBjaGVja2JveFxuICAgKiBAcGFyYW0gZGF0YVxuICAgKiBAcGFyYW0gdHlwZVxuICAgKiBAcGFyYW0gcm93XG4gICAqIEBwYXJhbSBtZXRhXG4gICAqL1xuICBwcml2YXRlIF9yZW5kZXJTZWxlY3QoZGF0YSwgdHlwZSwgcm93LCBtZXRhKSB7XG4gICAgLy8gZ2V0IGNvbHVtblxuICAgIGNvbnN0IGNvbHVtbiA9IG1ldGEuc2V0dGluZ3MuYW9Db2x1bW5zW21ldGEuY29sXTtcbiAgICBpZiAodHlwZW9mIGNvbHVtbi5zZWxlY3RUZW1wbGF0ZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgT2JqZWN0LmFzc2lnbihjb2x1bW4sIHtcbiAgICAgICAgc2VsZWN0VGVtcGxhdGU6IHRlbXBsYXRlKGA8aW5wdXQgY2xhc3M9XCJjaGVja2JveCBjaGVja2JveC10aGVtZSBzLXJvd1wiIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgIGlkPVwicy0ke3RoaXMuX2lkfS1cXCR7bWV0YS5yb3d9XCIgZGF0YS1pZD1cIlxcJHtkYXRhfVwiIC8+PGxhYmVsIGZvcj1cInMtJHt0aGlzLl9pZH0tXFwke21ldGEucm93fVwiPiZuYnNwOzwvbGFiZWw+XG4gICAgICAgIGApLFxuICAgICAgfSk7XG4gICAgfVxuICAgIC8vIHJlbmRlciB0ZW1wbGF0ZVxuICAgIHJldHVybiBjb2x1bW4uc2VsZWN0VGVtcGxhdGUoe1xuICAgICAgbWV0YSxcbiAgICAgIGRhdGEsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgaWYgKHRoaXMuZGF0YVRhYmxlKSB7XG4gICAgICB0aGlzLmRlc3Ryb3koKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuY29uZmlnKSB7XG4gICAgICB0aGlzLmxvYWRpbmcuZW1pdCh7XG4gICAgICAgIHRhcmdldDogdGhpc1xuICAgICAgfSk7XG4gICAgICAvLyBwYXJzZSBwcm9wZXJ0aWVzXG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuY29uZmlnLCAnc2VsZWN0YWJsZScpKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0YWJsZSA9IHRoaXMuY29uZmlnLnNlbGVjdGFibGU7XG4gICAgICB9XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuY29uZmlnLCAnbXVsdGlwbGVTZWxlY3QnKSkge1xuICAgICAgICB0aGlzLm11bHRpcGxlU2VsZWN0ID0gdGhpcy5jb25maWcubXVsdGlwbGVTZWxlY3Q7XG4gICAgICB9XG4gICAgICAvLyBwcmVwYXJlIGNvbmZpZ3VyYXRpb24gZm9yIGNvbHVtbnNcbiAgICAgIGNvbnN0IHRhYmxlQ29sdW1ucyA9IHRoaXMuY29uZmlnLmNvbHVtbnNcbiAgICAgICAgLy8gZmlsdGVyIGFjdGlvbiBsaW5rIGNvbHVtblxuICAgICAgICAuZmlsdGVyKChjb2x1bW4pID0+IHtcbiAgICAgICAgICBpZiAoY29sdW1uLmZvcm1hdHRlciAmJiBjb2x1bW4uZm9ybWF0dGVyID09PSAnQWN0aW9uTGlua0Zvcm1hdHRlcicgJiYgdGhpcy5zaG93QWN0aW9ucyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0pLm1hcCgoY29sdW1uKSA9PiB7XG4gICAgICAgICAgLy8gY29udmVydCBjb2x1bW4gdG8gYWR2YW5jZSB0YWJsZSBjb2x1bW5cbiAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihuZXcgQ29sdW1uRm9ybWF0dGVyKHRoaXMuX2luamVjdG9yKSwgY29sdW1uKTtcbiAgICAgICAgfSkubWFwKChjb2x1bW4pID0+IHtcbiAgICAgICAgICBjb25zdCBjb2x1bW5EZWZpbml0aW9uID0ge1xuICAgICAgICAgICAgZGF0YTogY29sdW1uLnByb3BlcnR5IHx8IGNvbHVtbi5uYW1lLFxuICAgICAgICAgICAgZGVmYXVsdENvbnRlbnQ6IGNvbHVtbi5kZWZhdWx0Q29udGVudCAhPSBudWxsID8gY29sdW1uLmRlZmF1bHRDb250ZW50IDogJycsXG4gICAgICAgICAgICB0aXRsZTogdGhpcy50cmFuc2xhdG9yLnRyYW5zZm9ybShjb2x1bW4udGl0bGUpLFxuICAgICAgICAgICAgc29ydGFibGU6IGNvbHVtbi5oYXNPd25Qcm9wZXJ0eSgnc29ydGFibGUnKSA/IGNvbHVtbi5zb3J0YWJsZSA6IHRydWUsXG4gICAgICAgICAgICB2aXNpYmxlOiBjb2x1bW4uaGFzT3duUHJvcGVydHkoJ2hpZGRlbicpID8gIWNvbHVtbi5oaWRkZW4gOiB0cnVlLFxuICAgICAgICAgICAgbmFtZTogY29sdW1uLm5hbWUsXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGlmIChjb2x1bW4uY2xhc3NOYW1lKSB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKGNvbHVtbkRlZmluaXRpb24sIHtcbiAgICAgICAgICAgICAgY2xhc3NOYW1lOiBjb2x1bW4uY2xhc3NOYW1lLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oY29sdW1uRGVmaW5pdGlvbiwge1xuICAgICAgICAgICAgICBjbGFzc05hbWU6ICcnLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGNvbHVtbi5mb3JtYXR0ZXJzKSB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKGNvbHVtbkRlZmluaXRpb24sIHtcbiAgICAgICAgICAgICAgcmVuZGVyKGRhdGE6IGFueSwgdHlwZTogc3RyaW5nLCByb3c6IGFueSwgbWV0YTogYW55KSB7XG4gICAgICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGRhdGE7XG4gICAgICAgICAgICAgICAgKGNvbHVtbi5mb3JtYXR0ZXJzIGFzIGFueVtdKS5mb3JFYWNoKChjb2x1bW5Gb3JtYXR0ZXIpID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlciA9IHNlbGYuX2NvbHVtbkZvcm1hdHRlcnNbY29sdW1uRm9ybWF0dGVyLmZvcm1hdHRlcl07XG4gICAgICAgICAgICAgICAgICBpZiAoZm9ybWF0dGVyICYmIHR5cGVvZiBmb3JtYXR0ZXIucmVuZGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbi5mb3JtYXRTdHJpbmcgPSBjb2x1bW5Gb3JtYXR0ZXIuZm9ybWF0U3RyaW5nO1xuICAgICAgICAgICAgICAgICAgICBjb2x1bW4uZm9ybWF0T3B0aW9ucyA9IGNvbHVtbkZvcm1hdHRlci5mb3JtYXRPcHRpb25zO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gZm9ybWF0dGVyLnJlbmRlci5iaW5kKGNvbHVtbikocmVzdWx0LCB0eXBlLCByb3csIG1ldGEpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBjb2x1bW4uZm9ybWF0U3RyaW5nO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBjb2x1bW4uZm9ybWF0T3B0aW9ucztcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBjaGVjayBpZiBjb2x1bW4gZm9ybWF0dGVycyBleHBvcnQgY3JlYXRlZENlbGwgZXZlbnRcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1zID0gY29sdW1uLmZvcm1hdHRlcnMuZmlsdGVyKChjb2x1bW5Gb3JtYXR0ZXIpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHlwZW9mIGNvbHVtbkZvcm1hdHRlci5hZnRlclJlbmRlciA9PT0gJ2Z1bmN0aW9uJztcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGl0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihjb2x1bW5EZWZpbml0aW9uLCB7XG4gICAgICAgICAgICAgICAgY3JlYXRlZENlbGwoY2VsbDogYW55LCBjZWxsRGF0YTogYW55LCByb3dEYXRhOiBhbnksIHJvd0luZGV4OiBudW1iZXIsIGNvbEluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgICAgICAgICAgIGl0ZW1zLmZvckVhY2goKGNvbHVtbkZvcm1hdHRlcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmb3JtYXR0ZXIgPSBzZWxmLl9jb2x1bW5Gb3JtYXR0ZXJzW2NvbHVtbkZvcm1hdHRlci5mb3JtYXR0ZXJdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZm9ybWF0dGVyICYmIHR5cGVvZiBmb3JtYXR0ZXIuYWZ0ZXJSZW5kZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtYXR0ZXIuYWZ0ZXJSZW5kZXIuYmluZChjb2x1bW4pKGNlbGwsIGNlbGxEYXRhLCByb3dEYXRhLCByb3dJbmRleCwgY29sSW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoY29sdW1uLmZvcm1hdHRlcikge1xuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVyID0gc2VsZi5fY29sdW1uRm9ybWF0dGVyc1tjb2x1bW4uZm9ybWF0dGVyXTtcbiAgICAgICAgICAgIGlmIChmb3JtYXR0ZXIgJiYgdHlwZW9mIGZvcm1hdHRlci5yZW5kZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihjb2x1bW5EZWZpbml0aW9uLCB7XG4gICAgICAgICAgICAgICAgcmVuZGVyOiBmb3JtYXR0ZXIucmVuZGVyLmJpbmQoY29sdW1uKSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZm9ybWF0dGVyICYmIHR5cGVvZiBmb3JtYXR0ZXIuYWZ0ZXJSZW5kZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihjb2x1bW5EZWZpbml0aW9uLCB7XG4gICAgICAgICAgICAgICAgcmVuZGVyOiBmb3JtYXR0ZXIucmVuZGVyLmJpbmQoY29sdW1uKSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oY29sdW1uRGVmaW5pdGlvbiwge1xuICAgICAgICAgICAgICAgIGNyZWF0ZWRDZWxsOiBmb3JtYXR0ZXIuYWZ0ZXJSZW5kZXIuYmluZChjb2x1bW4pLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGNvbHVtbkRlZmluaXRpb247XG4gICAgICAgIH0pO1xuICAgICAgLy8gZ2V0IHRhYmxlIGVsZW1lbnRcbiAgICAgIGNvbnN0IHRhYmxlRWxlbWVudCA9IGpRdWVyeSh0aGlzLnRhYmxlICYmIHRoaXMudGFibGUubmF0aXZlRWxlbWVudCk7XG4gICAgICBqUXVlcnkod2luZG93KS5vbigncmVzaXplJywgKCkgPT4ge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5kYXRhVGFibGUpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YVRhYmxlLmNvbHVtbnMuYWRqdXN0KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LCAxKTtcbiAgICAgIH0pO1xuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1zaGFkb3dlZC12YXJpYWJsZVxuICAgICAgdGFibGVFbGVtZW50Lm9uKCdwcm9jZXNzaW5nLmR0JywgKGV2ZW50LCBzZXR0aW5ncywgcHJvY2Vzc2luZykgPT4ge1xuICAgICAgICBpZiAocHJvY2Vzc2luZykge1xuICAgICAgICAgIC8vIGNsZWFyIGVtcHR5IHRhYmxlIGVsZW1lbnRcbiAgICAgICAgICB0YWJsZUVsZW1lbnQuZmluZCgnLmRhdGFUYWJsZXNfZW1wdHknKS5odG1sKCcnKTtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRhYmxlRWxlbWVudC5hZGRDbGFzcygncHJvY2Vzc2luZycpO1xuICAgICAgICAgIH0sIDApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGFibGVFbGVtZW50LnJlbW92ZUNsYXNzKCdwcm9jZXNzaW5nJyk7XG4gICAgICAgICAgfSwgMCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgbGV0IGRyYXdJbmRleCA9IDE7XG4gICAgICB0YWJsZUVsZW1lbnQub24oJ29yZGVyLmR0JywgKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuZGF0YVRhYmxlKSB7XG4gICAgICAgICAgY29uc3Qgb3JkZXIgPSB0aGlzLmRhdGFUYWJsZS5vcmRlcigpO1xuICAgICAgICAgIGNvbnN0IGNvbHVtbnMgPSB0YWJsZUNvbHVtbnM7XG4gICAgICAgICAgaWYgKG9yZGVyICYmIG9yZGVyLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5vcmRlci5lbWl0KG9yZGVyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pLm9uKCdkcmF3LmR0JywgKGV2ZW50KSA9PiB7XG4gICAgICAgIHRoaXMuZHJhdy5lbWl0KCk7XG4gICAgICAgIGlmICh0aGlzLmRhdGFUYWJsZSkge1xuICAgICAgICAgIGNvbnN0IGluZm86IHsgcGFnZTogbnVtYmVyOyBwYWdlczogbnVtYmVyIH0gPSB0aGlzLmRhdGFUYWJsZS5wYWdlLmluZm8oKTtcbiAgICAgICAgICB0aGlzLnBhZ2UuZW1pdChpbmZvKTtcbiAgICAgICAgICBpZiAoZHJhd0luZGV4ID4gMSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgZHJhd0luZGV4Kys7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHt0aGlzLmRhdGFUYWJsZS5jb2x1bW5zLmFkanVzdCgpOyB9LCAxKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0VSUk9SJywgJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIGFkanVzdGluZyB0YWJsZSBjb2x1bW5zJyk7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgLy8gYWxsb3cgc2VsZWN0aW9uXG4gICAgICBpZiAodGhpcy5zZWxlY3RhYmxlKSB7XG4gICAgICAgIC8vIGdldCBmaXJzdCBjb2x1bW4gKGFzIHJvdyBwcmltYXJ5IGtleSlcbiAgICAgICAgLy8gdG9kbzo6YWxsb3cgcm93IHByaW1hcnkga2V5IGNvbmZpZ3VyYXRpb25cbiAgICAgICAgY29uc3QgZmlyc3RDb2x1bW4gPSB0aGlzLmNvbmZpZy5jb2x1bW5zWzBdO1xuICAgICAgICAvLyBhZGQgc2VsZWN0IGNvbHVtblxuICAgICAgICBjb25zdCBzZWxlY3RDb2x1bW5EZWZpbml0aW9uID0ge1xuICAgICAgICAgIGNsYXNzTmFtZTogJ3RleHQtY2VudGVyIHBsLTQgcHItMCcsXG4gICAgICAgICAgZGF0YTogZmlyc3RDb2x1bW4ucHJvcGVydHkgfHwgZmlyc3RDb2x1bW4ubmFtZSxcbiAgICAgICAgICBkZWZhdWx0Q29udGVudDogJycsXG4gICAgICAgICAgdGl0bGU6ICcnLFxuICAgICAgICAgIHNvcnRhYmxlOiBmYWxzZSxcbiAgICAgICAgICB2aXNpYmxlOiAhdGhpcy5jdXN0b21TZWxlY3QsXG4gICAgICAgICAgbmFtZTogZmlyc3RDb2x1bW4ubmFtZSxcbiAgICAgICAgfTtcbiAgICAgICAgLy8gYXNzaWduIHJlbmRlcmVyXG4gICAgICAgIE9iamVjdC5hc3NpZ24oc2VsZWN0Q29sdW1uRGVmaW5pdGlvbiwge1xuICAgICAgICAgIHJlbmRlcjogdGhpcy5fcmVuZGVyU2VsZWN0LmJpbmQodGhpcyksXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBhbmQgZmluYWxseSBhZGQgY29sdW1uXG4gICAgICAgIHRhYmxlQ29sdW1ucy51bnNoaWZ0KHNlbGVjdENvbHVtbkRlZmluaXRpb24pO1xuICAgICAgICAvLyB1c2VyIGludGVyZmFjZSBhZGRpdGlvbnNcbiAgICAgICAgLy8gaGFuZGxlIHBhZ2UgY2hhbmdlIGV2ZW50IChhIHRyaWNrIGZvciBmaXJpbmcgZHJhdy5kdCBldmVudHMpXG4gICAgICAgIHRhYmxlRWxlbWVudFxuICAgICAgICAgIC8vIGhhbmRsZSBkcmF3IGV2ZW50c1xuICAgICAgICAgIC5vbignZHJhdy5kdCcsICgpID0+IHtcblxuICAgICAgICAgICAgaWYgKHRoaXMuY3VzdG9tU2VsZWN0KSB7XG4gICAgICAgICAgICAgIC8vIGVuYWJsZSByb3cgc2VsZWN0aW9uIGV2ZW50XG4gICAgICAgICAgICAgIHRhYmxlRWxlbWVudC5maW5kKCd0Ym9keScpLm9uKCdjbGljaycsICd0cicsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIC8vIHNlbGVjdCByb3dcbiAgICAgICAgICAgICAgICBjb25zdCByb3cgPSBzZWxmLmRhdGFUYWJsZS5yb3codGhpcyk7XG4gICAgICAgICAgICAgICAgLy8gYWRkIHJvd1xuICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0LmVtaXQocm93KTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50cyA9IHRhYmxlRWxlbWVudC5maW5kKCdpbnB1dC5zLXJvdycpO1xuICAgICAgICAgICAgZWxlbWVudHMub2ZmKCdjbGljaycpLm9uKCdjbGljaycsIHRoaXMub25TZWxlY3Rpb25DaGFuZ2UuYmluZCh0aGlzKSk7XG4gICAgICAgICAgICAvLyBtYWtlIHNlbGVjdGlvbiBvbiBjdXJyZW50IHBhZ2VcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IHRoaXMuY29uZmlnLmNvbHVtbnNbMF0ucHJvcGVydHkgfHwgJyc7XG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIC8vIGVudW1lcmF0ZSBzZWxlY3RlZCBpdGVtc1xuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICAvLyBmaW5kIHJvdyBpZGVudGlmaWVyXG4gICAgICAgICAgICAgICAgY29uc3QgaWQgPSBpdGVtW2tleV07XG4gICAgICAgICAgICAgICAgLy8gaWYgaWRlbnRpZmllciBpcyBkZWZpbmVkXG4gICAgICAgICAgICAgICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgIC8vIHRyeSB0byBmaW5kIGNoZWNrIGVsZW1lbnQgd2l0aCB0aGlzIGlkZW50aWZpZXIgaW4gYXR0cmlidXRlIGRhdGEtaWRcbiAgICAgICAgICAgICAgICAgIHRhYmxlRWxlbWVudC5maW5kKGBpbnB1dFtkYXRhLWlkPScke2lkfSddYCkucHJvcCgnY2hlY2tlZCcsIHRydWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5zbWFydFNlbGVjdCkge1xuICAgICAgICAgICAgICAvLyBzZWxlY3Qgcm93cyB0aGF0IGFyZSBub3Qgc2VsZWN0ZWRcbiAgICAgICAgICAgICAgLy8gYW5kIGRvIG5vdCBpbmNsdWRlZCBpbiB1bnNlbGVjdGVkIGNvbGxlY3Rpb25cbiAgICAgICAgICAgICAgdGFibGVFbGVtZW50LmZpbmQoJ2lucHV0W2RhdGEtaWRdJykuZWFjaCgoaW5kZXgsIGVsZW1lbnQpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBnZXQgZGF0YSBpZFxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnVuc2VsZWN0ZWQuZmluZEluZGV4KCh4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dHJpcGxlLWVxdWFsc1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHhba2V5XSA9PSBqUXVlcnkoZWxlbWVudCkuYXR0cignZGF0YS1pZCcpO1xuICAgICAgICAgICAgICAgIH0pIDwgMCkge1xuICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RSb3codGhpcy5kYXRhVGFibGUucm93KGluZGV4KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgdGFibGVFbGVtZW50LmZpbmQoJ2lucHV0W2RhdGEtaWRdJykucHJvcCgnY2hlY2tlZCcsIGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIC8vIGluaXRpYWxpemUgZGF0YSB0YWJsZVxuICAgICAgY29uc3Qgc2V0dGluZ3MgPSB7XG4gICAgICAgIC8vIHNldCBsZW5ndGggbWVudVxuICAgICAgICBsZW5ndGhNZW51OiBbNSwgMTAsIDUwLCAxMDAsIDIwMCwgNTAwXSxcbiAgICAgICAgLy8gaGlkZSBsZW5ndGggbWVudVxuICAgICAgICBsZW5ndGhDaGFuZ2U6IGZhbHNlLFxuICAgICAgICAvLyBlbmFibGUgc2VhcmNoIGJ1dCBoaWRlIHNlYXJjaCBib3ggKGNzcylcbiAgICAgICAgc2VhcmNoaW5nOiB0cnVlLFxuICAgICAgICAvLyBlbmFibGUgZGF0YSBwcm9jZXNzaW5nXG4gICAgICAgIHByb2Nlc3Npbmc6IHRydWUsXG4gICAgICAgIC8vIGVuYWJsZSBnZXR0aW5nIHNlcnZlciBzaWRlIGRhdGFcbiAgICAgICAgc2VydmVyU2lkZTogdGhpcy5zZXJ2ZXJTaWRlLFxuICAgICAgICAvLyBlbnVtZXJhdGUgdGFibGUgY29sdW1uc1xuICAgICAgICBjb2x1bW5zOiB0YWJsZUNvbHVtbnMsXG4gICAgICAgIGNvbFJlb3JkZXI6ICB0aGlzLmNvbHVtbk9yZGVyaW5nLFxuICAgICAgICBvcmRlcjogW10sXG4gICAgICAgIC8vIHNldCBzY3JvbGwgeFxuICAgICAgICBzY3JvbGxYOiB0aGlzLnNjcm9sbFgsXG4gICAgICAgIGRvbTogJ0JmcnRpcCcsXG4gICAgICAgIGF1dG9XaWR0aDogZmFsc2UsXG4gICAgICAgIGJ1dHRvbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBleHRlbmQ6ICdleGNlbCcsXG4gICAgICAgICAgICBmaWxlbmFtZTogdGhpcy5jb25maWcudGl0bGUsXG4gICAgICAgICAgICBjbGFzc05hbWU6ICdkLW5vbmUnLFxuICAgICAgICAgICAgZXhwb3J0T3B0aW9uczoge1xuICAgICAgICAgICAgICBjb2x1bW5zOiAndGg6bm90KDpmaXJzdC1jaGlsZCknLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICAvLyBkZWZpbmUgc2VydmVyIGRhdGEgY2FsbGJhY2tcbiAgICAgICAgZm5TZXJ2ZXJEYXRhKHNTb3VyY2U6IGFueSwgYW9EYXRhOiBhbnksIGZuQ2FsbGJhY2s6IGFueSwgb1NldHRpbmdzOiBhbnkpIHtcbiAgICAgICAgICAvLyBpZiBtZXRob2QgaXMgaW52b2tlZCBmb3IgdGhlIGZpcnN0IHRpbWVcbiAgICAgICAgICBpZiAoc2VsZi5fZmlyc3RMb2FkKSB7XG4gICAgICAgICAgICAvLyBkaXNhYmxlZCBmaXJzdCBsb2FkIGZsYWdcbiAgICAgICAgICAgIHNlbGYuX2ZpcnN0TG9hZCA9IGZhbHNlO1xuICAgICAgICAgICAgLy8gaWYgYXV0byBsb2FkIGlzIGRpc2FibGVkXG4gICAgICAgICAgICBpZiAoc2VsZi5hdXRvTG9hZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgY29uc3QgZW1wdHlEYXRhU2V0ID0ge1xuICAgICAgICAgICAgICAgIHJlY29yZHNUb3RhbDogMCxcbiAgICAgICAgICAgICAgICByZWNvcmRzRmlsdGVyZWQ6IDAsXG4gICAgICAgICAgICAgICAgZGF0YTogW10sXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIHNlbGYuX2xhc3RRdWVyeVRvdGFsSXRlbXMgPSAwO1xuICAgICAgICAgICAgICAvLyBlbWl0IGVtcHR5IGRhdGFcbiAgICAgICAgICAgICAgc2VsZi5sb2FkLmVtaXQoZW1wdHlEYXRhU2V0KTtcbiAgICAgICAgICAgICAgLy8gcmV0dXJuIGVtcHR5IGRhdGFcbiAgICAgICAgICAgICAgcmV0dXJuIGZuQ2FsbGJhY2soZW1wdHlEYXRhU2V0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gcmVzZXQgZXJyb3JcbiAgICAgICAgICBzZWxmLnRvZ2dsZUVycm9yKCk7XG4gICAgICAgICAgLy8gZ2V0IGFjdGl2YXRlZCByb3V0ZSBwYXJhbXNcbiAgICAgICAgICBjb25zdCBxdWVyeVBhcmFtcyA9IHNlbGYuX2FjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zO1xuICAgICAgICAgIC8vIGdldCBjb2x1bW5zXG4gICAgICAgICAgY29uc3QgY29sdW1ucyA9IGFvRGF0YVsxXS52YWx1ZTtcbiAgICAgICAgICAvLyBnZXQgb3JkZXIgZXhwcmVzc2lvblxuICAgICAgICAgIGxldCBvcmRlciA9IGFvRGF0YVsyXS52YWx1ZTtcbiAgICAgICAgICAvLyBnZXQgc2tpcCByZWNvcmRzIHBhcmFtXG4gICAgICAgICAgY29uc3Qgc2tpcCA9IGFvRGF0YVszXS52YWx1ZTtcbiAgICAgICAgICAvLyBnZXQgcGFnZSBzaXplIHBhcmFtXG4gICAgICAgICAgY29uc3QgdG9wID0gYW9EYXRhWzRdLnZhbHVlO1xuICAgICAgICAgIC8vIGdldCBzZWFyY2ggdmFsdWVcbiAgICAgICAgICBjb25zdCBzZWFyY2ggPSBhb0RhdGFbNV0udmFsdWU7XG4gICAgICAgICAgLy8gZ2V0IGRhdGEgcXVlcnlhYmxlXG4gICAgICAgICAgY29uc3QgcSA9IHNlbGYuX3F1ZXJ5IGluc3RhbmNlb2YgQ2xpZW50RGF0YVF1ZXJ5YWJsZSA/IHNlbGYuX3F1ZXJ5IDogc2VsZi5fY29udGV4dC5tb2RlbChzZWxmLmNvbmZpZy5tb2RlbCkuYXNRdWVyeWFibGUoKTtcbiAgICAgICAgICAvLyBhcHBseSBwYWdpbmcgcGFyYW1zXG4gICAgICAgICAgaWYgKHRvcCkge1xuICAgICAgICAgICAgcS50YWtlKHRvcCkuc2tpcChza2lwKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gaW5pdGlhbGl6ZSBwYXJhbWV0ZXJzIChyb3dHcm91cCBhbmQgb3JkZXIpIGlmIHRoZXJlIGlzIHJvdyBncm91cCBpbnB1dFxuICAgICAgICAgIGxldCByb3dHcm91cE9yZGVyOiBhbnlbXSA9IFtdO1xuICAgICAgICAgIGlmIChzZWxmLnJvd0dyb3VwICYmIHNlbGYucm93R3JvdXAubGVuZ3RoKSB7XG4gICAgICAgICAgICBsZXQgY29sT3JkZXIgPSBbXTtcbiAgICAgIFxuICAgICAgICAgICAgLy8gZmluZCBpbmRleCBvZiB0aGUgcm93R3JvdXAgY29sdW1uXG4gICAgICAgICAgICBsZXQgY29scyA9IHNlbGYucm93R3JvdXAubWFwKHggPT4gdGFibGVDb2x1bW5zLmZpbmRJbmRleCh0YWJsZUNvbHVtbiA9PiB0YWJsZUNvbHVtbi5kYXRhID09PSB4KSkuZmlsdGVyKGluZGV4ID0+IGluZGV4ID49IDApO1xuICAgICAgICAgICAgLy8gZmluZCBuZXcgaW5kZXggb2YgdGhlIHJvd0dyb3VwIGNvbHVtbiBpbiBjYXNlIG9mIHRhYmxlIG9mZmVycyB0aGUgY29sdW1uIHJlb3JkZXJpbmcgY2FwYWJpbGl0eSBcbiAgICAgICAgICAgIC8vIGkuZS4gc2V0dGluZ3MuY29sUmVvcmRlciA9PT0gZmFsc2UgKGNvbHVtbk9yZGVyaW5nID09PSBmYWxzZSlcbiAgICAgICAgICAgIGlmIChzZWxmLmRhdGFUYWJsZSAmJiBzZWxmLmRhdGFUYWJsZS5jb2xSZW9yZGVyICYmIHRoaXMuY29sdW1uT3JkZXJpbmcgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgY29sT3JkZXIgPSBzZWxmLmRhdGFUYWJsZS5jb2xSZW9yZGVyLm9yZGVyKCk7XG4gICAgICAgICAgICAgIGNvbHMgPSBjb2xzLm1hcCggKGNvbDogYW55KSA9PiBjb2xPcmRlci5pbmRleE9mKGNvbCBhcyBuZXZlcikpLmZpbHRlcihpbmRleCA9PiBpbmRleCA+IC0xKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgbGV0IGNvbHVtbiA9IC0xO1xuICAgICAgICAgICAgbGV0IGRpcmVjdGlvbiA9ICdhc2MnO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBzZXQgY29sdW1uIGFuZCBvcmRlciBkaXJlY3Rpb24gIFxuICAgICAgICAgICAgaWYgKG9yZGVyICYmIG9yZGVyLmxlbmd0aCkge1xuICAgICAgICAgICAgICBjb2x1bW4gPSBvcmRlclswXS5jb2x1bW47XG4gICAgICAgICAgICAgIGRpcmVjdGlvbiA9IG9yZGVyWzBdLmRpcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJvd0dyb3VwT3JkZXIgPSBjb2xzLm1hcCgoeCkgPT4geyBcbiAgICAgICAgICAgICAgLy8gY2hlY2sgaWYgY29sdW1uIG9yZGVyIGhhcyBiZWVuIGNoYW5nZWRcbiAgICAgICAgICAgICAgLy8gYW5kIGZpbmQgdGhlIG5ldyBpbmRleCAoY29sdW1uLWluZGV4KSBvZiB0aGUgcm93IGdyb3VwIGNvbHVtblxuICAgICAgICAgICAgICBpZiAoeCAhPSBjb2x1bW4gJiYgc2VsZi5sYXN0Um93R3JvdXBPcmRlciAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaWYgKHggPT09IHNlbGYubGFzdFJvd0dyb3VwT3JkZXIuY29sdW1uKSB7XG4gICAgICAgICAgICAgICAgICBjb2x1bW4gPSBzZWxmLmxhc3RSb3dHcm91cE9yZGVyLmNvbHVtbjtcbiAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9IHNlbGYubGFzdFJvd0dyb3VwT3JkZXIuZGlyZWN0aW9uO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4geyBcbiAgICAgICAgICAgICAgICBjb2x1bW46IHgsIFxuICAgICAgICAgICAgICAgIGRpcjogeCA9PT0gY29sdW1uID8gZGlyZWN0aW9uIDogJ2FzYydcbiAgICAgICAgICAgICAgfSBcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgb3JkZXIgPSBvcmRlciB8fCBbXTtcbiAgICAgICAgICAgIC8vIHNldCB0aGUgcm93IGdyb3VwIGNvbHVtbiBxdWVyeSBwYXJhbSBhbHdheXMgZmlyc3QgYW5kIGJlZm9yZSB0YWJsZSBvcmRlcmluZyBxdWVyeSBwYXJhbXMgXG4gICAgICAgICAgICBvcmRlci51bnNoaWZ0KC4uLnJvd0dyb3VwT3JkZXIpO1xuICAgICAgICAgIFxuICAgICAgICAgICAgLy8gc2F2ZSBvcmRlcmluZyBjb2x1bW4gYW5kIGRpcmVjdGlvbiAocmVnYXJkbGVzcyByb3dHcm91cGluZylcbiAgICAgICAgICAgIGlmIChjb2x1bW4gPiAtMSkge1xuICAgICAgICAgICAgICBzZWxmLmxhc3RSb3dHcm91cE9yZGVyID0geyBjb2x1bW4sIGRpcmVjdGlvbiB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBhcHBseSBvcmRlciBwYXJhbXNcbiAgICAgICAgICBpZiAob3JkZXIgJiYgb3JkZXIubGVuZ3RoKSB7XG4gICAgICAgICAgICAvLyBnZXQgb3JkZXIgcXVlcnkgZXhwcmVzc2lvblxuICAgICAgICAgICAgY29uc3Qgb3JkZXJCeVN0ciA9IG9yZGVyLm1hcCgoZXhwcjogYW55KSA9PiB7XG4gICAgICAgICAgICAgIGxldCBjb2x1bW5JbmRleDogbnVtYmVyO1xuICAgICAgICAgICAgICBpZiAoc2VsZi5jb2x1bW5PcmRlcmluZyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICBjb2x1bW5JbmRleCA9IGV4cHIuY29sdW1uO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNlbGYuZGF0YVRhYmxlLmNvbFJlb3JkZXIpIHtcbiAgICAgICAgICAgICAgICAvLyBnZXQgdGhlIGN1cnJlbnQgY29sdW1uIG9yZGVyIChmcm9tIGNvbFJlb3JkZXIpXG4gICAgICAgICAgICAgICAgY29uc3QgY29sdW1uT3JkZXI6IG51bWJlcltdID0gc2VsZi5kYXRhVGFibGUuY29sUmVvcmRlci5vcmRlcigpO1xuICAgICAgICAgICAgICAgIC8vIGFuZCBtYXRjaCB0aGUgZGF0YVRhYmxlIGluZGV4IHRvIHRoZSBjb25maWcgY29sdW1ucyBpbmRleFxuICAgICAgICAgICAgICAgIC8vIGV4cHIuY29sdW1uIHNob3VsZCBhbHdheXMgYmUgdmFsaWQgKGUuZy4gaW4gcmFuZ2UpLCBidXQgcGVyZm9ybSBhIG1pbm9yIHZhbGlkYXRpb25cbiAgICAgICAgICAgICAgICBpZiAoZXhwci5jb2x1bW4gPj0gMCAmJiBleHByLmNvbHVtbiA8IGNvbHVtbk9yZGVyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgY29sdW1uSW5kZXggPSBjb2x1bW5PcmRlcltleHByLmNvbHVtbl07XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIC8vIHVzZSB0aGUgZmlyc3QgY29sdW1uIGFzIGEgZmFsbGJhY2sgKHdvbid0IGhhcHBlbiwganVzdCBmb3Igc2FmZXR5KVxuICAgICAgICAgICAgICAgICAgY29sdW1uSW5kZXggPSAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb2x1bW5JbmRleCA9IGV4cHIuY29sdW1uO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiB0YWJsZUNvbHVtbnNbY29sdW1uSW5kZXhdLm5hbWUgKyAnICcgKyBleHByLmRpciB8fCAnYXNjJztcbiAgICAgICAgICAgIH0pLmpvaW4oJywnKTtcbiAgICAgICAgICAgIC8vIHNldCBvcmRlclxuICAgICAgICAgICAgcS5zZXRQYXJhbSgnJG9yZGVyYnknLCBvcmRlckJ5U3RyKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gZW5zdXJlIHNlbGYuc3RhdGVMb2FkQ2FsbGJhY2tcbiAgICAgICAgICBpZiAoc2VsZi5zdGF0ZUxvYWRDYWxsYmFjayA9PSBudWxsKSB7XG4gICAgICAgICAgICBzZWxmLnN0YXRlTG9hZENhbGxiYWNrID0gKChfLCBjYWxsYmFjaykgID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHNlbGYuc3RhdGVMb2FkQ2FsbGJhY2sobnVsbCwgKHN0YXRlKSA9PiB7XG4gICAgICAgICAgICAvLyBjb25maWd1cmUgJHNlbGVjdCBwYXJhbWV0ZXJcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdCA9IHNlbGYuY29uZmlnLmNvbHVtbnMuZmlsdGVyKCAoY29sdW1uKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChjb2x1bW4udmlydHVhbCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoY29sdW1uLm9wdGlvbmFsID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXRlICYmIHN0YXRlLmNvbHVtbnMpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGFibGVDb2x1bW5zLmZpbmRJbmRleCgodGFibGVDb2x1bW4pID0+IHRhYmxlQ29sdW1uLm5hbWUgPT09IGNvbHVtbi5uYW1lKTtcbiAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGF0ZS5jb2x1bW5zW2luZGV4XS52aXNpYmxlO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9KS5tYXAoKGNvbHVtbikgPT4ge1xuICAgICAgICAgICAgICBpZiAoY29sdW1uLnByb3BlcnR5KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbHVtbi5uYW1lICsgJyBhcyAnICsgY29sdW1uLnByb3BlcnR5O1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb2x1bW4ubmFtZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBxLnNlbGVjdC5hcHBseShxLCBzZWxlY3QpO1xuICAgICAgICAgICAgLy8gY29uZmlndXJlICRmaWx0ZXJcbiAgICAgICAgICAgIGlmIChxdWVyeVBhcmFtcy4kZmlsdGVyICYmIHF1ZXJ5UGFyYW1zLiRmaWx0ZXIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIC8vIHNldCByb3V0ZSBmaWx0ZXJcbiAgICAgICAgICAgICAgY29uc3QgcVBhcmFtcyA9IHEuZ2V0UGFyYW1zKCk7XG4gICAgICAgICAgICAgIHEuc2V0UGFyYW0oJyRmaWx0ZXInLCBudWxsKTtcbiAgICAgICAgICAgICAgY29uc3QgZXhwcmVzc2lvbnMgPSBbIHF1ZXJ5UGFyYW1zLiRmaWx0ZXIgXTtcbiAgICAgICAgICAgICAgaWYgKHFQYXJhbXMuJGZpbHRlcikgeyBleHByZXNzaW9ucy5wdXNoKCcoJyArIHFQYXJhbXMuJGZpbHRlciArICcpJyApOyB9XG4gICAgICAgICAgICAgIHEuZmlsdGVyKGV4cHJlc3Npb25zLmpvaW4oJyBhbmQgJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gY2hlY2sgaWYgcXVlcnkgcGFyYW1ldGVycyBjb250YWluIGZpbHRlclxuICAgICAgICAgICAgaWYgKHF1ZXJ5UGFyYW1zLiRleHBhbmQgJiYgcXVlcnlQYXJhbXMuJGV4cGFuZC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgLy8gc2V0IHJvdXRlICRleHBhbmRcbiAgICAgICAgICAgICAgcS5zZXRQYXJhbSgnJGV4cGFuZCcsIHF1ZXJ5UGFyYW1zLiRleHBhbmQpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzZWxmLmNvbmZpZyAmJiBzZWxmLmNvbmZpZy5kZWZhdWx0cyAmJiBzZWxmLmNvbmZpZy5kZWZhdWx0cy5leHBhbmQpIHtcbiAgICAgICAgICAgICAgcS5zZXRQYXJhbSgnJGV4cGFuZCcsIHNlbGYuY29uZmlnLmRlZmF1bHRzLmV4cGFuZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXEuZ2V0UGFyYW1zKClbJyRvcmRlcmJ5J10gJiYgc2VsZi5jb25maWcgJiYgc2VsZi5jb25maWcuZGVmYXVsdHMgJiYgc2VsZi5jb25maWcuZGVmYXVsdHMub3JkZXJCeSkge1xuICAgICAgICAgICAgICBxLnNldFBhcmFtKCckb3JkZXJieScsIHNlbGYuY29uZmlnLmRlZmF1bHRzLm9yZGVyQnkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnICYmIHNlbGYuY29uZmlnLmRlZmF1bHRzICYmIHNlbGYuY29uZmlnLmRlZmF1bHRzLmdyb3VwQnkpIHtcbiAgICAgICAgICAgICAgcS5zZXRQYXJhbSgnJGdyb3VwYnknLCBzZWxmLmNvbmZpZy5kZWZhdWx0cy5ncm91cEJ5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGFwcGVuZCBkZWZhdWx0IGZpbHRlclxuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnICYmIHNlbGYuY29uZmlnLmRlZmF1bHRzICYmIHNlbGYuY29uZmlnLmRlZmF1bHRzLmZpbHRlcikge1xuICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fYWR2YW5jZWRGaWx0ZXJWYWx1ZVByb3ZpZGVyLmFzeW5jQnVpbGRGaWx0ZXIoc2VsZi5jb25maWcuZGVmYXVsdHMuZmlsdGVyKS50aGVuKChkZWZhdWx0RmlsdGVyU3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGRlZmF1bHRGaWx0ZXJTdHJpbmcpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHFQYXJhbXMgPSBxLmdldFBhcmFtcygpO1xuICAgICAgICAgICAgICAgICAgcS5zZXRQYXJhbSgnJGZpbHRlcicsIG51bGwpO1xuICAgICAgICAgICAgICAgICAgY29uc3QgZXhwcmVzc2lvbnMgPSBbIGRlZmF1bHRGaWx0ZXJTdHJpbmcgXTtcbiAgICAgICAgICAgICAgICAgIGlmIChxUGFyYW1zLiRmaWx0ZXIpIHsgZXhwcmVzc2lvbnMucHVzaCgnKCcgKyBxUGFyYW1zLiRmaWx0ZXIgKyAnKScgKTsgfVxuICAgICAgICAgICAgICAgICAgcS5maWx0ZXIoZXhwcmVzc2lvbnMuam9pbignIGFuZCAnKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNlbGYubGFzdFF1ZXJ5UGFyYW1zID0gcS5nZXRQYXJhbXMoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcS5nZXRMaXN0KCkudGhlbigoaXRlbXMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0YVNldCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICByZWNvcmRzVG90YWw6IGl0ZW1zLnRvdGFsLFxuICAgICAgICAgICAgICAgICAgICAgIHJlY29yZHNGaWx0ZXJlZDogaXRlbXMudG90YWwsXG4gICAgICAgICAgICAgICAgICAgICAgZGF0YTogaXRlbXMudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuX2xhc3RRdWVyeVRvdGFsSXRlbXMgPSBpdGVtcy50b3RhbDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW1zLnRvdGFsID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgc2VsZi5yZXNldEVtcHR5VGFibGUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBlbWl0IGxvYWQgZXZlbnRcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2FkLmVtaXQoZGF0YVNldCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIHJldHVybiBkYXRhXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmbkNhbGxiYWNrKGRhdGFTZXQpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9KS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gbG9nIGVycm9yIHRvIGNvbnNvbGVcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdUQUJMRVMnLCBlcnIpO1xuICAgICAgICAgICAgICAgIC8vIHNob3cgZXJyb3JcbiAgICAgICAgICAgICAgICBzZWxmLnRvZ2dsZUVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgc2VsZi5fbGFzdFF1ZXJ5VG90YWxJdGVtcyA9IDA7XG4gICAgICAgICAgICAgICAgLy8gYnkgcmV0dXJuaW5nIGVtcHR5IGRhdGFzZXRcbiAgICAgICAgICAgICAgICBzZWxmLmxvYWQuZW1pdChFTVBUWV9EQVRBU0VUKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZm5DYWxsYmFjayhFTVBUWV9EQVRBU0VUKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZWxmLmxhc3RRdWVyeVBhcmFtcyA9IHEuZ2V0UGFyYW1zKCk7XG4gICAgICAgICAgICBxLmdldExpc3QoKS50aGVuKChpdGVtcykgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBkYXRhU2V0ID0ge1xuICAgICAgICAgICAgICAgIHJlY29yZHNUb3RhbDogaXRlbXMudG90YWwsXG4gICAgICAgICAgICAgICAgcmVjb3Jkc0ZpbHRlcmVkOiBpdGVtcy50b3RhbCxcbiAgICAgICAgICAgICAgICBkYXRhOiBpdGVtcy52YWx1ZSxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgc2VsZi5fbGFzdFF1ZXJ5VG90YWxJdGVtcyA9IGl0ZW1zLnRvdGFsO1xuICAgICAgICAgICAgICBpZiAoaXRlbXMudG90YWwgPT09IDApIHtcbiAgICAgICAgICAgICAgICBzZWxmLnJlc2V0RW1wdHlUYWJsZSgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIC8vIGVtaXQgbG9hZCBldmVudFxuICAgICAgICAgICAgICBzZWxmLmxvYWQuZW1pdChkYXRhU2V0KTtcbiAgICAgICAgICAgICAgLy8gcmV0dXJuIGRhdGFcbiAgICAgICAgICAgICAgcmV0dXJuIGZuQ2FsbGJhY2soZGF0YVNldCk7XG4gICAgICAgICAgICB9KS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgICAgICAgIC8vIGxvZyBlcnJvciB0byBjb25zb2xlXG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1RBQkxFUycsIGVycik7XG4gICAgICAgICAgICAgIC8vIHNob3cgZXJyb3JcbiAgICAgICAgICAgICAgc2VsZi50b2dnbGVFcnJvcihlcnIpO1xuICAgICAgICAgICAgICAvLyBieSByZXR1cm5pbmcgZW1wdHkgZGF0YXNldFxuICAgICAgICAgICAgICBzZWxmLmxvYWQuZW1pdChFTVBUWV9EQVRBU0VUKTtcbiAgICAgICAgICAgICAgcmV0dXJuIGZuQ2FsbGJhY2soRU1QVFlfREFUQVNFVCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgbGFuZ3VhZ2U6IE9iamVjdC5hc3NpZ24oeyB9LCBzZWxmLnRyYW5zbGF0b3IudHJhbnNmb3JtKCdUYWJsZXMuRGF0YVRhYmxlJyksXG4gICAgICAgICAge2VtcHR5VGFibGU6ICcgJyB9KSxcbiAgICAgIH07XG4gICAgICAvLyBjaGVjayBpZiB0aGVyZSBpcyBhIHJvd0dyb3VwIGlucHV0IGFuZCBhc3NpZ24gaXQgdG8gdGFibGVcbiAgICAgIGlmICh0aGlzLnJvd0dyb3VwLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBjb2xzID0gdGhpcy5yb3dHcm91cC5tYXAoeCA9PiB0YWJsZUNvbHVtbnMuZmluZEluZGV4KHRhYmxlQ29sdW1uID0+IHRhYmxlQ29sdW1uLmRhdGEgPT09IHgpKS5maWx0ZXIoaW5kZXggPT4gaW5kZXggPj0gMCk7XG4gICAgICAgIGNvbnN0IGRhdGFTcmMgPSBjb2xzLm1hcCh4ID0+IHRhYmxlQ29sdW1uc1t4XS5kYXRhKTtcbiAgICAgICAgY29uc3Qgc3RhcnRSZW5kZXIgPSBmdW5jdGlvbiAocm93cywgZ3JvdXApIHtcbiAgICAgICAgICBjb25zdCBoZWFkZXJWaWV3UmVmID0gc2VsZi5fdmlld0NvbnRhaW5lclJlZi5jcmVhdGVFbWJlZGRlZFZpZXcoXG4gICAgICAgICAgICAgIHNlbGYuaGVhZGVyVGVtcGxhdGUgYXMgYW55LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ3JvdXAsXG4gICAgICAgICAgICAgICAgcm93c1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaGVhZGVyVmlld1JlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICBpZiAoaGVhZGVyVmlld1JlZi5yb290Tm9kZXMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0hlYWRlclRlbXBsYXRlIG11c3QgaGF2ZSBleGFjdGx5IG9uZSByb290IG5vZGUuJylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBoZWFkZXJWaWV3UmVmLnJvb3ROb2Rlc1swXTtcbiAgICAgICAgfVxuICAgICAgICAvLyBlbmRSZW5kZXIgcHJvcGVydHkgXG4gICAgICAgIGNvbnN0IGVuZFJlbmRlciA9IGZ1bmN0aW9uIChyb3dzLCBncm91cCkge1xuICAgICAgICAgIGNvbnN0IGZvb3RlclZpZXdSZWYgPSBzZWxmLl92aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUVtYmVkZGVkVmlldyhcbiAgICAgICAgICAgICAgc2VsZi5mb290ZXJUZW1wbGF0ZSBhcyBhbnksXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBncm91cCxcbiAgICAgICAgICAgICAgICByb3dzXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBmb290ZXJWaWV3UmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIGlmIChmb290ZXJWaWV3UmVmLnJvb3ROb2Rlcy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRm9vdGVyVGVtcGxhdGUgbXVzdCBoYXZlIGV4YWN0bHkgb25lIHJvb3Qgbm9kZS4nKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZvb3RlclZpZXdSZWYucm9vdE5vZGVzWzBdO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24oc2V0dGluZ3MsIHsgcm93R3JvdXA6IHsgZGF0YVNyYywgZW5kUmVuZGVyLCBzdGFydFJlbmRlciB9IH0sIHt9KTsgXG4gICAgICB9XG4gICAgICBjb25zdCBzdGF0ZVNldHRpbmdzID0ge1xuICAgICAgICBzdGF0ZVNhdmU6IHRoaXMuc3RhdGVTYXZlXG4gICAgICB9O1xuICAgICAgaWYgKHRoaXMuc3RhdGVMb2FkQ2FsbGJhY2spIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihzdGF0ZVNldHRpbmdzLCB7XG4gICAgICAgICAgc3RhdGVMb2FkQ2FsbGJhY2s6IHRoaXMuc3RhdGVMb2FkQ2FsbGJhY2tcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5zdGF0ZVNhdmVDYWxsYmFjaykge1xuICAgICAgICBPYmplY3QuYXNzaWduKHN0YXRlU2V0dGluZ3MsIHtcbiAgICAgICAgICBzdGF0ZVNhdmVDYWxsYmFjazogdGhpcy5zdGF0ZVNhdmVDYWxsYmFja1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIE9iamVjdC5hc3NpZ24oc2V0dGluZ3MsIHN0YXRlU2V0dGluZ3MpO1xuXG4gICAgICBpZiAodGhpcy5zY3JvbGxhYmxlKSB7XG4gICAgICAgIC8vIHNldCBjb250aW51b3VzIHNjcm9sbGluZ1xuICAgICAgICBPYmplY3QuYXNzaWduKHNldHRpbmdzLCB7XG4gICAgICAgICAgc2Nyb2xsWTogdGhpcy5zY3JvbGxZLFxuICAgICAgICAgIHNjcm9sbENvbGxhcHNlOiBmYWxzZSxcbiAgICAgICAgICBzY3JvbGxlcjoge1xuICAgICAgICAgICAgbG9hZGluZ0luZGljYXRvcjogZmFsc2UsXG4gICAgICAgICAgICBkaXNwbGF5QnVmZmVyOiBBcnJheS5pc0FycmF5KHRoaXMucm93R3JvdXApICYmIHRoaXMucm93R3JvdXAubGVuZ3RoID4gMCA/IDEwMCA6IDEwLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihzZXR0aW5ncywge1xuICAgICAgICAgIHNjcm9sbFk6IHRoaXMuc2Nyb2xsWSxcbiAgICAgICAgICBwYWdpbmc6IHRoaXMucGFnaW5nLFxuICAgICAgICAgIHBhZ2VMZW5ndGg6IHRoaXMucGFnZUxlbmd0aCxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5zZWxlY3RhYmxlKSB7XG5cbiAgICAgIH1cbiAgICAgIC8vIGhhbmRsZSBpbml0LmR0IGV2ZW50IGFuZCBlbWl0IGxvY2FsIGV2ZW50XG4gICAgICB0aGlzLmRhdGFUYWJsZSA9IHRhYmxlRWxlbWVudC5vbignaW5pdC5kdCcsIChldmVudCkgPT4ge1xuICAgICAgICBjb25zdCBzY3JvbGxlciA9IGpRdWVyeShldmVudC50YXJnZXQpLnBhcmVudCgpO1xuICAgICAgICAvLyBoYW5kbGUgc2Nyb2xsaW5nXG4gICAgICAgIHNjcm9sbGVyLm9uKCdzY3JvbGwnLCAoc2Nyb2xsRXZlbnQpID0+IHtcbiAgICAgICAgICBjb25zdCB0YXJnZXQgPSBqUXVlcnkoc2Nyb2xsRXZlbnQudGFyZ2V0KTtcbiAgICAgICAgICBjb25zdCB0b3AgPSB0YXJnZXQuc2Nyb2xsVG9wKCkgYXMgbnVtYmVyO1xuICAgICAgICAgIGNvbnN0IGxlZnQgPSB0YXJnZXQuc2Nyb2xsTGVmdCgpIGFzIG51bWJlcjtcbiAgICAgICAgICBpZiAodGhpcy5kYXRhVGFibGUpIHtcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsLmVtaXQoe1xuICAgICAgICAgICAgICB0b3AsXG4gICAgICAgICAgICAgIGxlZnRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KS5EYXRhVGFibGUoc2V0dGluZ3MpO1xuICAgICAgdGhpcy5pbml0LmVtaXQoKTtcbiAgICAgIC8vIHNob3cgb3IgaGlkZSBoZWFkZXJcbiAgICAgIGlmICghdGhpcy5zaG93SGVhZGVyICYmIHRoaXMuX2VsZW1lbnQgJiYgdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IGhpZGVTZWxlY3RvciA9ICh0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQgYXMgSFRNTERpdkVsZW1lbnQpXG4gICAgICAgICAgLnF1ZXJ5U2VsZWN0b3IoJy5kYXRhVGFibGU+dGhlYWQnKTtcbiAgICAgICAgaWYgKGhpZGVTZWxlY3Rvcikge1xuICAgICAgICAgIGhpZGVTZWxlY3Rvci5jbGFzc0xpc3QuYWRkKCdkLW5vbmUnKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhZGp1c3RTZWxlY3RvciA9ICAodGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50IGFzIEhUTUxEaXZFbGVtZW50KVxuICAgICAgICAgIC5xdWVyeVNlbGVjdG9yKCcuZGF0YVRhYmxlJyk7XG4gICAgICAgIGlmIChhZGp1c3RTZWxlY3Rvcikge1xuICAgICAgICAgIGFkanVzdFNlbGVjdG9yLmNsYXNzTGlzdC5hZGQoJ210LTInKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gc2hvdyBvciBoaWRlIGZvb3RlclxuICAgICAgaWYgKCF0aGlzLnNob3dGb290ZXIgJiYgdGhpcy5fZWxlbWVudCAmJiB0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgaW5mb1NlbGVjdG9yID0gKHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudCBhcyBIVE1MRGl2RWxlbWVudClcbiAgICAgICAgICAucXVlcnlTZWxlY3RvcignLmRhdGFUYWJsZXNfaW5mbycpO1xuICAgICAgICBpZiAoaW5mb1NlbGVjdG9yKSB7XG4gICAgICAgICAgaW5mb1NlbGVjdG9yLmNsYXNzTGlzdC5hZGQoJ2Qtbm9uZScpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBzaG93IG9yIGhpZGUgcGFnZXJcbiAgICAgIGlmICh0aGlzLnNob3dQYWdpbmcpIHtcbiAgICAgICAgdGhpcy5zaG93UGFnaW5nID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaGVhZGVyVGVtcGxhdGUpIHtcbiAgICAgIGNvbnN0IGhlYWRlclZpZXdSZWYgPSB0aGlzLl92aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUVtYmVkZGVkVmlldyhcbiAgICAgICAgdGhpcy5oZWFkZXJUZW1wbGF0ZSxcbiAgICAgICAge1xuICAgICAgICAgIGdyb3VwOiAnJyxcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICAgIGhlYWRlclZpZXdSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgZm9yICh2YXIgbm9kZSBvZiBoZWFkZXJWaWV3UmVmLnJvb3ROb2Rlcykge1xuICAgICAgICB0aGlzLmhlYWRlcj8gdGhpcy5oZWFkZXIubmF0aXZlRWxlbWVudC5hcHBlbmRDaGlsZChub2RlKSA6IG51bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZm9vdGVyVGVtcGxhdGUpIHtcbiAgICAgIGNvbnN0IGZvb3RlclZpZXdSZWYgPSB0aGlzLl92aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUVtYmVkZGVkVmlldyhcbiAgICAgICAgdGhpcy5mb290ZXJUZW1wbGF0ZSxcbiAgICAgICAge1xuICAgICAgICAgIGdyb3VwOiAnJyxcbiAgICAgICAgICByb3dzOiBbXVxuICAgICAgICB9XG4gICAgICApO1xuICAgICAgZm9vdGVyVmlld1JlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICBmb3IgKHZhciBub2RlIG9mIGZvb3RlclZpZXdSZWYucm9vdE5vZGVzKSB7XG4gICAgICAgIHRoaXMuZm9vdGVyPyB0aGlzLmZvb3Rlci5uYXRpdmVFbGVtZW50LmFwcGVuZENoaWxkKG5vZGUpIDogbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzY3JvbGxUb3AodmFsdWU6IG51bWJlcikge1xuICAgIGlmICh0aGlzLmRhdGFUYWJsZSkge1xuICAgICAgdGhpcy5kYXRhVGFibGUucGFyZW50KCkuc2Nyb2xsVG9wKHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBzY3JvbGxMZWZ0KHZhbHVlOiBudW1iZXIpIHtcbiAgICBpZiAodGhpcy5kYXRhVGFibGUpIHtcbiAgICAgIHRoaXMuZGF0YVRhYmxlLnBhcmVudCgpLnNjcm9sbExlZnQodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBsYXN0UXVlcnkoKTogQ2xpZW50RGF0YVF1ZXJ5YWJsZSB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHRoaXMuY29uZmlnID09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMubGFzdFF1ZXJ5UGFyYW1zID09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcSA9IHRoaXMuX2NvbnRleHQubW9kZWwodGhpcy5jb25maWcubW9kZWwpLmFzUXVlcnlhYmxlKCk7XG4gICAgT2JqZWN0LmtleXModGhpcy5sYXN0UXVlcnlQYXJhbXMpLmZvckVhY2goIChrZXkpID0+IHtcbiAgICAgIHEuc2V0UGFyYW0oa2V5LCB0aGlzLmxhc3RRdWVyeVBhcmFtcyAmJiB0aGlzLmxhc3RRdWVyeVBhcmFtc1trZXldKTtcbiAgICB9KTtcbiAgICAvLyByZXR1cm4gcXVlcnlcbiAgICByZXR1cm4gcTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaGVzIGFuZCB1cGRhdGVzIGEgc2luZ2xlIHJvd1xuICAgKiBAcGFyYW0gZmluZCAtIEFueSBvYmplY3Qgd2hpY2ggaXMgYmVpbmcgY29udmVydGVkIHRvIGEgcXVlcnlcbiAgICovXG4gIHB1YmxpYyBmZXRjaE9uZShmaW5kOiBhbnkpIHtcbiAgICBpZiAoZmluZCA9PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLmRhdGFUYWJsZSA9PSBudWxsKSB7XG4gICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMubGFzdFF1ZXJ5UGFyYW1zID09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gZ2V0IHJvd3NcbiAgICBjb25zdCByb3dzID0gQXJyYXkuZnJvbSh0aGlzLmRhdGFUYWJsZS5yb3dzKCkuZGF0YSgpKTtcbiAgICBpZiAocm93cyAmJiByb3dzLmxlbmd0aCkge1xuICAgICAgLy8gZmluZCByZXN1bHRcbiAgICAgIGNvbnN0IGZpbmRLZXlzID0gT2JqZWN0LmtleXMoZmluZCk7XG4gICAgICBpZiAoZmluZEtleXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIC8vIGRvIG5vdGhpbmdcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgLy8gZmluZCByb3cgaW5kZXggYnkgc2VhcmNoaW5nIGVhY2ggcHJvcGVydHlcbiAgICAgIGNvbnN0IHJvd0luZGV4ID0gcm93cy5maW5kSW5kZXgoKHJvdzogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiBmaW5kS2V5cy5tYXAoIChrZXkpID0+IHtcbiAgICAgICAgICByZXR1cm4gcm93W2tleV0gPT09IGZpbmRba2V5XTtcbiAgICAgICAgfSkuZmlsdGVyKCAocmVzKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHJlcyA9PT0gZmFsc2U7XG4gICAgICAgIH0pLmxlbmd0aCA9PT0gMDtcbiAgICAgIH0pO1xuICAgICAgLy8gaWYgcm93IGhhcyBiZWVuIGZvdW5kXG4gICAgICBpZiAocm93SW5kZXggPj0gMCkge1xuICAgICAgICBjb25zdCBxdWVyeSA9IHRoaXMuX2NvbnRleHQubW9kZWwodGhpcy5jb25maWcubW9kZWwpLmFzUXVlcnlhYmxlKCk7XG4gICAgICAgIC8vIHNlbGVjdCBhdHRyaWJ1dGVzXG4gICAgICAgIHF1ZXJ5LnNldFBhcmFtKCckc2VsZWN0JywgdGhpcy5sYXN0UXVlcnlQYXJhbXMuJHNlbGVjdCk7XG4gICAgICAgIGlmICh0aGlzLmxhc3RRdWVyeVBhcmFtcy4kZXhwYW5kKSB7XG4gICAgICAgICAgLy8gYXBwbHkgZXhwYW5kIGF0dHJpYnV0ZXNcbiAgICAgICAgICBxdWVyeS5zZXRQYXJhbSgnJGV4cGFuZCcsIHRoaXMubGFzdFF1ZXJ5UGFyYW1zLiRleHBhbmQpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGFwcGx5IGZpbHRlciBmb3Igcm93XG4gICAgICAgIGZpbmRLZXlzLmZvckVhY2goIChrZXkpID0+IHtcbiAgICAgICAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmNvbmZpZy5jb2x1bW5zLmZpbmQoIChjb2wpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBjb2wucHJvcGVydHkgPT09IGtleSB8fCBjb2wubmFtZSA9PT0ga2V5O1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmIChjb2x1bW4pIHtcbiAgICAgICAgICAgIC8vIGdldCBwcm9wZXJ0eSBvciBuYW1lXG4gICAgICAgICAgICBjb25zdCBwcm9wZXJ0eSA9IGNvbHVtbi5wcm9wZXJ0eSB8fCBjb2x1bW4ubmFtZTtcbiAgICAgICAgICAgIHF1ZXJ5LmFuZChwcm9wZXJ0eSBhcyBzdHJpbmcpLmVxdWFsKGZpbmRba2V5XSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHF1ZXJ5LmFuZChrZXkpLmVxdWFsKGZpbmRba2V5XSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgLy8gYW5kIGZpbmFsbHkgZ2V0IGl0ZW1cbiAgICAgICAgcmV0dXJuIHF1ZXJ5LmdldEl0ZW0oKS50aGVuKCAoaXRlbSkgPT4ge1xuICAgICAgICAgIC8vIGlmIGl0ZW0gZXhpc3RzXG4gICAgICAgICAgY29uc3Qgcm93ID0gdGhpcy5kYXRhVGFibGUucm93KHJvd0luZGV4KTtcbiAgICAgICAgICBjb25zdCBjaGVja2VkID0galF1ZXJ5KHJvdy5ub2RlKCkpLmZpbmQoJzpjaGVja2JveCcpLnByb3AoJ2NoZWNrZWQnKTtcbiAgICAgICAgICBpZiAoaXRlbSkge1xuICAgICAgICAgICAgLy8gcmVkcmF3IHJvd1xuICAgICAgICAgICAgcm93LmRhdGEoaXRlbSk7XG4gICAgICAgICAgICBqUXVlcnkocm93Lm5vZGUoKSkuZmluZCgnOmNoZWNrYm94Jykub2ZmKCdjbGljaycpLm9uKCdjbGljaycsIHRoaXMub25TZWxlY3Rpb25DaGFuZ2UuYmluZCh0aGlzKSk7XG4gICAgICAgICAgICAvLyBpZiByb3cgaXMgYWxyZWFkeSBzZWxlY3RlZFxuICAgICAgICAgICAgaWYgKGNoZWNrZWQpIHtcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RSb3cocm93LCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlbG9hZFN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5yZWxvYWRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIHNlbGVjdGlvbiBjaGFuZ2VcbiAgICogQHBhcmFtICRldmVudFxuICAgKi9cbiAgcHVibGljIG9uU2VsZWN0aW9uQ2hhbmdlKCRldmVudCkge1xuICAgIGNvbnN0IGlucHV0ID0gICRldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICBjb25zdCBleGVjUmVnZXggPSAvLShcXGQrKSQvZy5leGVjKGlucHV0LmlkKTtcbiAgICAvLyBnZXQgcm93IGZyb20gaWRcbiAgICBjb25zdCByb3dJbmRleCA9IHBhcnNlSW50KChleGVjUmVnZXggJiYgZXhlY1JlZ2V4WzFdKSBhcyBzdHJpbmcsIDEwKTtcbiAgICAvLyBnZXQgcm93XG4gICAgY29uc3Qgcm93ID0gdGhpcy5kYXRhVGFibGUucm93KHJvd0luZGV4KS5kYXRhKCk7XG4gICAgLy8gZ2V0IHJvdyBpZGVudGlmaWVyXG4gICAgaWYgKHJvdykge1xuICAgICAgY29uc3Qga2V5ID0gdGhpcy5jb25maWcuY29sdW1uc1swXS5wcm9wZXJ0eSB8fCAnJztcbiAgICAgIGNvbnN0IGlkID0gcm93W2tleV07XG4gICAgICBsZXQgZmluZEl0ZW1JbmRleCA9IHRoaXMuc2VsZWN0ZWQuZmluZEluZGV4KChpdGVtKSA9PiB7XG4gICAgICAgIHJldHVybiBpdGVtW2tleV0gPT09IGlkO1xuICAgICAgfSk7XG4gICAgICBpZiAoaW5wdXQuY2hlY2tlZCkge1xuICAgICAgICBpZiAoZmluZEl0ZW1JbmRleCA8IDApIHtcbiAgICAgICAgICAvLyBhZGQgcm93IHRvIHNlbGVjdGVkIHJvd3NcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkLnB1c2gocm93KTtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMuZW1pdCh0aGlzLnNlbGVjdGVkKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGZpbmRJdGVtSW5kZXggPj0gMCkge1xuICAgICAgICAgIC8vIHJlbW92ZSBzZWxlY3RlZCBpdGVtXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZC5zcGxpY2UoZmluZEl0ZW1JbmRleCwgMSk7XG4gICAgICAgICAgaWYgKHRoaXMuc21hcnRTZWxlY3QpIHtcbiAgICAgICAgICAgIC8vIGFkZCByb3cgdG8gdW5zZWxlY3RlZCByb3dzXG4gICAgICAgICAgICBmaW5kSXRlbUluZGV4ID0gdGhpcy51bnNlbGVjdGVkLmZpbmRJbmRleCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gaXRlbVtrZXldID09PSBpZDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGZpbmRJdGVtSW5kZXggPCAwKSB7XG4gICAgICAgICAgICAgIHRoaXMudW5zZWxlY3RlZC5wdXNoKHJvdyk7XG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5lbWl0KHRoaXMuc2VsZWN0ZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVzZXRFbXB0eVRhYmxlKCkge1xuICAgIC8vIHRoaXMgb3BlcmF0aW9uIGlzIGltcG9ydGFudFxuICAgIC8vIGR1ZSB0byBuZyBkYXRhIGJpbmRpbmdcbiAgICAvLyBlbXB0eSB0YWJsZSB0ZW1wbGF0ZSBoYXMgbm8gdHJhbnNsYXRlZCB0ZXh0IGR1cmluZyBuZ09uSW5pdCgpXG4gICAgaWYgKHRoaXMuZGF0YVRhYmxlICYmIHRoaXMuZGF0YVRhYmxlLmNvbnRleHRbMF0pIHtcbiAgICAgIHRoaXMuZGF0YVRhYmxlLmNvbnRleHRbMF0ub0xhbmd1YWdlLnNFbXB0eVRhYmxlID1cbiAgICAgIHRoaXMuZGF0YVRhYmxlLmNvbnRleHRbMF0ub0xhbmd1YWdlLnNaZXJvUmVjb3JkcyA9IHRoaXMuZW1wdHlUYWJsZSAmJiB0aGlzLmVtcHR5VGFibGUubmF0aXZlRWxlbWVudC5pbm5lckhUTUw7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB0b2dnbGVFcnJvcihlcnI/OiBhbnkpIHtcbiAgICBpZiAodGhpcy5kYXRhVGFibGUgJiYgdGhpcy5kYXRhVGFibGUuY29udGV4dFswXSkge1xuICAgICAgY29uc3QgZWxlbWVudCA9ICh0aGlzLmVycm9yVGVtcGxhdGUgJiYgdGhpcy5lcnJvclRlbXBsYXRlLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTERpdkVsZW1lbnQpO1xuICAgICAgbGV0IGlubmVyTWVzc2FnZTogYW55O1xuICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgaW5uZXJNZXNzYWdlID0gZWxlbWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc21hbGwnKS5pdGVtKDApO1xuICAgICAgfVxuICAgICAgaWYgKGVycikge1xuICAgICAgICB0aGlzLmxhc3RFcnJvciA9IGVycjtcbiAgICAgICAgaWYgKGlubmVyTWVzc2FnZSkge1xuICAgICAgICAgIGlubmVyTWVzc2FnZS5pbm5lckhUTUwgPSBlcnIuZXJyb3IgJiYgZXJyLmVycm9yLm1lc3NhZ2UgPyBlcnIuZXJyb3IubWVzc2FnZSA6IGVyci5tZXNzYWdlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGF0YVRhYmxlLmNvbnRleHRbMF0ub0xhbmd1YWdlLnNFbXB0eVRhYmxlID1cbiAgICAgICAgdGhpcy5kYXRhVGFibGUuY29udGV4dFswXS5vTGFuZ3VhZ2Uuc1plcm9SZWNvcmRzID0gdGhpcy5lcnJvclRlbXBsYXRlICYmIHRoaXMuZXJyb3JUZW1wbGF0ZS5uYXRpdmVFbGVtZW50LmlubmVySFRNTDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChpbm5lck1lc3NhZ2UpIHtcbiAgICAgICAgICBpbm5lck1lc3NhZ2UuaW5uZXJIVE1MID0gJyc7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kYXRhVGFibGUuY29udGV4dFswXS5vTGFuZ3VhZ2Uuc0VtcHR5VGFibGUgPSB0aGlzLmRhdGFUYWJsZS5jb250ZXh0WzBdLm9MYW5ndWFnZS5zWmVyb1JlY29yZHMgPSAnJztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNsZWFyRW1wdHlUYWJsZSgpIHtcbiAgICBpZiAodGhpcy5kYXRhVGFibGUgJiYgdGhpcy5kYXRhVGFibGUuY29udGV4dFswXSkge1xuICAgICAgdGhpcy5kYXRhVGFibGUuY29udGV4dFswXS5vTGFuZ3VhZ2Uuc0VtcHR5VGFibGUgPSB0aGlzLmRhdGFUYWJsZS5jb250ZXh0WzBdLm9MYW5ndWFnZS5zWmVyb1JlY29yZHMgPSAnJztcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZXhwb3J0KCkge1xuICAgIGNvbnN0IGVsZW1lbnQ6IEhUTUxFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmR0LWJ1dHRvbnMgLmJ1dHRvbnMtZXhjZWwnKSBhcyBIVE1MRWxlbWVudDtcbiAgICBlbGVtZW50LmNsaWNrKCk7XG4gIH1cblxuICBwdWJsaWMgaGFuZGxlQ29sdW1ucyhjb2x1bW5zVG9TaG93KSB7XG4gICAgY29uc3QgdGFibGUgPSB0aGlzLmRhdGFUYWJsZTtcbiAgICB0aGlzLmNvbmZpZy5jb2x1bW5zLnNsaWNlKDEpLmZvckVhY2goKGNvbHVtbiwgaSkgPT4ge1xuICAgICAgaWYgKCFjb2x1bW4uaGlkZGVuKSB7XG4gICAgICAgIGlmIChjb2x1bW5zVG9TaG93LmluY2x1ZGVzKGNvbHVtbi5uYW1lKSkge1xuICAgICAgICAgIC8vIG5vaW5zcGVjdGlvbiBUeXBlU2NyaXB0VmFsaWRhdGVKU1R5cGVzXG4gICAgICAgICAgdGFibGUuY29sdW1uKGNvbHVtbi5uYW1lICsgJzpuYW1lJykudmlzaWJsZSh0cnVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBub2luc3BlY3Rpb24gVHlwZVNjcmlwdFZhbGlkYXRlSlNUeXBlc1xuICAgICAgICAgIHRhYmxlLmNvbHVtbihjb2x1bW4ubmFtZSArICc6bmFtZScpLnZpc2libGUoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q29uZmlnKCkge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZztcbiAgfVxuXG4gIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjaGFuZ2VzLCAnY29uZmlnU3JjJykpIHtcbiAgICAgIGlmIChjaGFuZ2VzLmNvbmZpZ1NyYyAhPSBudWxsKSB7XG4gICAgICAgIC8vIGxvYWQgdGFibGUgY29uZmlndXJhdGlvbiBvbiBjaGFuZ2VcbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiB0cmlwbGUtZXF1YWxzXG4gICAgICAgIGlmIChjaGFuZ2VzLmNvbmZpZ1NyYy5jdXJyZW50VmFsdWUgJiYgKGNoYW5nZXMuY29uZmlnU3JjLmN1cnJlbnRWYWx1ZSAhPSBjaGFuZ2VzLmNvbmZpZ1NyYy5wcmV2aW91c1ZhbHVlKSkge1xuICAgICAgICAgIHRoaXMuX2h0dHAuZ2V0KGNoYW5nZXMuY29uZmlnU3JjLmN1cnJlbnRWYWx1ZSkudG9Qcm9taXNlKCkudGhlbigoY29uZmlnOiBUYWJsZUNvbmZpZ3VyYXRpb24pID0+IHtcbiAgICAgICAgICAgIC8vIHNldCBjb25maWd1cmF0aW9uXG4gICAgICAgICAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcbiAgICAgICAgICAgIHRoaXMuZGVzdHJveSgpO1xuICAgICAgICAgICAgLy8gZmV0Y2ggYW5kIHJlZHJhd1xuICAgICAgICAgICAgdGhpcy5mZXRjaCgpO1xuICAgICAgICAgIH0pLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1RBQkxFUycsICdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBsb2FkaW5nIHRhYmxlIGNvbmZpZ3VyYXRpb24uJyk7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgcmVzZXQobG9hZD86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLnF1ZXJ5ID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuZGVzdHJveSgpO1xuICAgIHRoaXMuYXV0b0xvYWQgPSAhIWxvYWQ7XG4gICAgdGhpcy5uZ09uSW5pdCgpO1xuICB9XG5cbiAgc2VsZWN0Q29sdW1ucygpIHtcbiAgICAvLyBnZXQgY29sdW1uIG9yZGVyIGUuZy4gWzAsIDQsIDEsIDIsIDNdXG4gICAgY29uc3QgY29sdW1uT3JkZXI6IG51bWJlcltdID0gdGhpcy5kYXRhVGFibGUuY29sUmVvcmRlci5vcmRlcigpO1xuICAgIC8vIGdldCBjb2x1bW4gZGVmaW5pdGlvbnNcbiAgICBjb25zdCBjb2x1bW5EZWZzID0gdGhpcy5kYXRhVGFibGUuc2V0dGluZ3MoKS5pbml0KCkuY29sdW1ucztcbiAgICBjb25zdCBjb2x1bW5zID0gY29sdW1uRGVmcy5tYXAoKFxuICAgICAgY29sdW1uRGVmOiB7IGtleTogc3RyaW5nLCB0aXRsZTogc3RyaW5nIHwgdW5kZWZpbmVkLCB2aXNpYmxlOiBib29sZWFuLFxuICAgICAgICBzb3J0YWJsZTogYm9vbGVhbiwgaW5kZXg6IG51bWJlciB9LCBpOiBudW1iZXIpID0+IHtcbiAgICAgIGNvbnN0IGtleSA9IGBjb2x1bW4tJHtpfWA7XG4gICAgICBsZXQgdGl0bGUgPSBjb2x1bW5EZWYudGl0bGU7XG4gICAgICAvLyBnZXQgY29sdW1uIGluZGV4XG4gICAgICBjb25zdCBpbmRleCA9ICBjb2x1bW5PcmRlci5pbmRleE9mKGkpO1xuICAgICAgY29uc3QgdmlzaWJsZSA9IHRoaXMuZGF0YVRhYmxlLmNvbHVtbihpbmRleCkudmlzaWJsZSgpO1xuICAgICAgLy8gc2V0IHRpdGxlIGZvciBzZWxlY3QgY29sdW1uXG4gICAgICBpZiAoaSA9PT0gMCAmJiB0aGlzLnNlbGVjdGFibGUpIHtcbiAgICAgICAgdGl0bGUgPSAnPCcgKyB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ1RhYmxlcy5TZWxlY3RDb2x1bW4nKSArICc+JztcbiAgICAgIH1cbiAgICAgIC8vIGdldCBjb2x1bW4gdGl0bGVcbiAgICAgIGlmICh0aXRsZSAhPSBudWxsICYmIHRpdGxlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aXRsZSA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGlmICh0aXRsZSA9PSBudWxsKSB7XG4gICAgICAgIC8vIHRyeSB0byBmaW5kIGNvbHVtbiBwbGFjZWhvbGRlclxuICAgICAgICBsZXQgcGxhY2Vob2xkZXI6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0YWJsZSkge1xuICAgICAgICAgIGlmIChpID4gMCkge1xuICAgICAgICAgICAgcGxhY2Vob2xkZXIgPSB0aGlzLmNvbmZpZy5jb2x1bW5zW2kgLSAxXS5wbGFjZWhvbGRlcjtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGxhY2Vob2xkZXIgPSB0aGlzLmNvbmZpZy5jb2x1bW5zW2ldLnBsYWNlaG9sZGVyO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwbGFjZWhvbGRlciAhPSBudWxsKSB7XG4gICAgICAgICAgdGl0bGUgPSAnPCcgKyB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQocGxhY2Vob2xkZXIpICsgJz4nO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodGl0bGUgPT0gbnVsbCkge1xuICAgICAgICB0aXRsZSA9ICc8JyArIHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnVGFibGVzLlVua25vd25Db2x1bW4nKSArICc+JztcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGtleSxcbiAgICAgICAgdGl0bGUsXG4gICAgICAgIHZpc2libGUsXG4gICAgICAgIGluZGV4XG4gICAgICB9O1xuICAgIH0pO1xuICAgIHRoaXMuX2NvbHVtblNlbGVjdG9yLnNlbGVjdENvbHVtbnMoY29sdW1ucykudGhlbigoZXZlbnQpID0+IHtcbiAgICAgIGlmIChldmVudC5yZXN1bHQgPT09ICdvaycpIHtcbiAgICAgICAgY29uc3Qgc29ydGVkID0gKGV2ZW50LmNvbHVtbnMgYXMgYW55W10pXG4gICAgICAgICAgLm1hcCgoY29sKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBrZXk6IGNvbC5rZXksXG4gICAgICAgICAgICAgIGluZGV4OiBjb2wuaW5kZXhcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYS5pbmRleCAtIGIuaW5kZXgpO1xuICAgICAgICAvLyBnZXQgY29sdW1uIG9yZGVyIGUuZy4gWzMsIDEsIDIsIDAsIDRdXG4gICAgICAgIGNvbnN0IGluZGV4ZXMgPSBzb3J0ZWRcbiAgICAgICAgLm1hcCgoaXRlbSkgPT4ge1xuICAgICAgICAgIHJldHVybiAoZXZlbnQuY29sdW1ucyBhcyBhbnlbXSkuZmluZEluZGV4KChuZXh0KSA9PiBpdGVtLmtleSA9PT0gbmV4dC5rZXkpO1xuICAgICAgICB9KTtcbiAgICAgICAgLy8gcmVzZXQgY29sdW1uIHZpc2liaWx0eVxuICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgKGV2ZW50LmNvbHVtbnMgYXMgYW55W10pLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSAoZXZlbnQuY29sdW1ucyBhcyBhbnlbXSlbaW5kZXhdO1xuICAgICAgICAgIGNvbnN0IGNvbEluZGV4ID0gY29sdW1uT3JkZXIuaW5kZXhPZihpbmRleCk7XG4gICAgICAgICAgLy8gc2V0IHZpc2liaWx0eSB3aXRoIHJlZHJhdyAoPXRydWUpXG4gICAgICAgICAgdGhpcy5kYXRhVGFibGUuY29sdW1uKGNvbEluZGV4KS52aXNpYmxlKGVsZW1lbnQudmlzaWJsZSwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZmluYWxseSBhcHBseSBjb2x1bW4gb3JkZXJcbiAgICAgICAgdGhpcy5kYXRhVGFibGUuY29sUmVvcmRlci5vcmRlcihpbmRleGVzLCB0cnVlKTtcbiAgICAgICAgLy8gc2ltcGx5IHJlZHJhdyB0aGUgdGFibGVcbiAgICAgICAgdGhpcy5kYXRhVGFibGUuZHJhdygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zIHRvIHBhc3MgYW4gZXJyb3JIYW5kbGVyIGNhbGxiYWNrLCBpZiBkZXNpcmVkXG4gICAqIEByZXR1cm5zIHZvaWRcbiAgICovXG4gIHB1YmxpYyBhc3luYyBleHBvcnRWaWV3KG9wdGlvbnM/OiB7ZXJyb3JIYW5kbGVyPzogKHJlYXNvbj86IGFueSkgPT4gYW55fSk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLl9sb2FkaW5nLnNob3dMb2FkaW5nKCk7XG4gICAgICAvLyB2YWxpZGF0ZSBxdWVyeSBpdGVtcyBhbmQgY29uZmlnXG4gICAgICBpZiAoISh0aGlzLmxhc3RRdWVyeSAmJiB0aGlzLl9sYXN0UXVlcnlUb3RhbEl0ZW1zICYmIHRoaXMuY29uZmlnKSkge1xuICAgICAgICAvLyBkbyBub3RoaW5nXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIC8vIGdldCBleHBvcnQgc2V0dGluZ3NcbiAgICAgIGNvbnN0IGV4cG9ydFNldHRpbmdzID0gdGhpcy5fY29uZmlndXJhdGlvbi5zZXR0aW5ncyBhcyBFeHBvcnRMaW1pdENvbmZpZ3VyYXRpb247XG4gICAgICAvLyBhbmQgZXhwb3J0IGxpbWl0XG4gICAgICBjb25zdCBleHBvcnRMaW1pdCA9XG4gICAgICAgIChleHBvcnRTZXR0aW5ncyAmJiBleHBvcnRTZXR0aW5ncy50YWJsZXMgJiYgZXhwb3J0U2V0dGluZ3MudGFibGVzLmV4cG9ydExpbWl0ICYmIGV4cG9ydFNldHRpbmdzLnRhYmxlcy5leHBvcnRMaW1pdCA+IDApXG4gICAgICAgID8gZXhwb3J0U2V0dGluZ3MudGFibGVzLmV4cG9ydExpbWl0IDogTUFYX0VYUE9SVF9JVEVNUztcbiAgICAgIC8vIGFuZCB2YWxpZGF0ZSBpdFxuICAgICAgaWYgKHRoaXMuX2xhc3RRdWVyeVRvdGFsSXRlbXMgPiBleHBvcnRMaW1pdCkge1xuICAgICAgICAvLyBjYWxsIGVycm9yIGhhbmRsZXJcbiAgICAgICAgLy8gcHJvdmlkZSBhIHJlY29nbml6aWJsZSBlcnJvciB0eXBlXG4gICAgICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMuZXJyb3JIYW5kbGVyKSB7XG4gICAgICAgICAgb3B0aW9ucy5lcnJvckhhbmRsZXIobmV3IEV4cG9ydExpbWl0RXhjZWVkZWRFcnJvcignRXhwb3J0IGxpbWl0IGV4Y2VlZGVkJykpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBvciBzaG93IHdhcm5pbmcgbW9kYWwgYW5kIGV4aXRcbiAgICAgICAgdGhpcy5fbW9kYWxTZXJ2aWNlLnNob3dXYXJuaW5nRGlhbG9nKHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnVGFibGVzLkV4cG9ydExpc3QnKSxcbiAgICAgICAgICB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ1RhYmxlcy5FeHBvcnRMaW1pdEV4Y2VlZGVkJyxcbiAgICAgICAgICAgIHtkYXRhTGVuZ3RoOiB0aGlzLl9sYXN0UXVlcnlUb3RhbEl0ZW1zLCBleHBvcnRMaW1pdH0pLCBESUFMT0dfQlVUVE9OUy5Payk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIC8vIGdldCB0b3RhbCBkaXNwbGF5ZWQgaXRlbXNcbiAgICAgIGNvbnN0IHRvdGFsRGlzcGxheWVkSXRlbXMgPSBBcnJheS5mcm9tKHRoaXMuZGF0YVRhYmxlLmNvbnRleHRbMF0uYWlEaXNwbGF5KS5sZW5ndGg7XG4gICAgICAvLyBpZiB0aGV5IGFscmVhZHkgc2F0aXNmeSB0aGUgbGFzdCBxdWVyeSB0b3RhbFxuICAgICAgaWYgKHRvdGFsRGlzcGxheWVkSXRlbXMgPT09IHRoaXMuX2xhc3RRdWVyeVRvdGFsSXRlbXMpIHtcbiAgICAgICAgLy8gcHJlcGFyZSBleGNlbCBkYXRhIGltbWVkaWF0ZWx5XG4gICAgICAgIGNvbnN0IHtib2R5LCBoZWFkZXJ9ID0gdGhpcy5nZXRFeHBvcnRhYmxlRGF0YSgpO1xuICAgICAgICAvLyBhbmQgZXhwb3J0IHRoZW0gdG8gZXhjZWxcbiAgICAgICAgdGhpcy5fZXhwb3J0U3ByZWFkc2hlZXQuZXhwb3J0KGJvZHksIGAke3RoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCh0aGlzLmNvbmZpZy50aXRsZSB8fCAnVGFibGVzLkV4cG9ydFJlc3VsdHMnKX0ueGxzeGAsIHtcbiAgICAgICAgICAgIGhlYWRlcixcbiAgICAgICAgICAgIHNraXBIZWFkZXI6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gYXQgdGhpcyBwb2ludCwgbW9yZSBkYXRhIG5lZWQgdG8gYmUgZmV0Y2hlZFxuICAgICAgICAvLyBob2xkIHByZXZpb3VzIGRhdGEgc3RhdGVcbiAgICAgICAgY29uc3QgcHJldmlvdXNEYXRhU3RhdGUgPSB0aGlzLmRhdGFUYWJsZS5yb3dzKCkuZGF0YSgpLnRvQXJyYXkoKTtcbiAgICAgICAgLy8gZ2V0IHRhcmdldCBkYXRhIHN0YXRlIGJ5IGV4ZWN1dGluZyB0aGUgbGFzdCBxdWVyeVxuICAgICAgICAvLyBub3RlOiB0YWtpbmcgdGhlIGV4cG9ydExpbWl0IGFtb3VudCBvZiBpdGVtcyB3aWxsIGFsd2F5cyBzYXRpc2Z5IHRoZSByZXN1bHRzLFxuICAgICAgICAvLyBiZWNhdXNlIGl0IGhhcyBiZWVuIHZhbGlkYXRlZFxuICAgICAgICBjb25zdCB0YXJnZXREYXRhU3RhdGUgPSBhd2FpdCB0aGlzLmxhc3RRdWVyeS50YWtlKGV4cG9ydExpbWl0KS5nZXRJdGVtcygpO1xuICAgICAgICAvLyBjaGFuZ2UgdGFibGUgZGF0YSBvbiB0aGUgZmx5LCBidXQgZG8gbm90IHJlZHJhd1xuICAgICAgICB0aGlzLmRhdGFUYWJsZS5jbGVhcigpLnJvd3MuYWRkKHRhcmdldERhdGFTdGF0ZSk7XG4gICAgICAgIC8vIHByZXBhcmUgZXhjZWwgZGF0YVxuICAgICAgICBjb25zdCB7Ym9keSwgaGVhZGVyfSA9IHRoaXMuZ2V0RXhwb3J0YWJsZURhdGEoKTtcbiAgICAgICAgLy8gcmVzZXQgdGFibGUgZGF0YVxuICAgICAgICB0aGlzLmRhdGFUYWJsZS5jbGVhcigpLnJvd3MuYWRkKHByZXZpb3VzRGF0YVN0YXRlKTtcbiAgICAgICAgLy8gYW5kIGV4cG9ydCB0YXJnZXQgZGF0YSB0byBleGNlbFxuICAgICAgICB0aGlzLl9leHBvcnRTcHJlYWRzaGVldC5leHBvcnQoYm9keSwgYCR7dGhpcy5fdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KHRoaXMuY29uZmlnLnRpdGxlIHx8ICdUYWJsZXMuRXhwb3J0UmVzdWx0cycpfS54bHN4YCwge1xuICAgICAgICAgICAgaGVhZGVyLFxuICAgICAgICAgICAgc2tpcEhlYWRlcjogZmFsc2VcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICAvLyBleGl0XG4gICAgICByZXR1cm47XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAvLyBsb2cgZXJyb3JcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgIC8vIGNhbGwgZXJyb3IgaGFuZGxlciwgaWYgZGVmaW5lZFxuICAgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5lcnJvckhhbmRsZXIpIHtcbiAgICAgICAgb3B0aW9ucy5lcnJvckhhbmRsZXIoZXJyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHVzZSBkZWZhdWx0IGVycm9yIHNlcnZpY2VcbiAgICAgICAgdGhpcy5fZXJyb3JTZXJ2aWNlLnNob3dFcnJvcihlcnIsIHtcbiAgICAgICAgICBjb250aW51ZUxpbms6ICcuJ1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5fbG9hZGluZy5oaWRlTG9hZGluZygpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRFeHBvcnRhYmxlRGF0YSgpOiB7Ym9keTogYW55W10sIGhlYWRlcjogYW55W119IHtcbiAgICBpZiAoISh0aGlzLmRhdGFUYWJsZSAmJiB0aGlzLmRhdGFUYWJsZS5idXR0b25zXG4gICAgICAmJiB0eXBlb2YgdGhpcy5kYXRhVGFibGUuYnV0dG9ucy5leHBvcnREYXRhID09PSAnZnVuY3Rpb24nICYmIHRoaXMuY29uZmlnKSkge1xuICAgICAgcmV0dXJuIHtib2R5OiBbXSwgaGVhZGVyOiBbXX07XG4gICAgfVxuICAgIC8vIGZldGNoIGV4cG9ydGFibGUgZXhjZWwgZGF0YVxuICAgIGxldCB7Ym9keSwgaGVhZGVyfSA9IHRoaXMuZGF0YVRhYmxlLmJ1dHRvbnMuZXhwb3J0RGF0YSgpO1xuICAgIGNvbnN0IGNsZWFudXBJbmRleGVzOiBudW1iZXJbXSA9IFtdO1xuICAgIC8vIGNsZWFuIHVwIGhlYWRlcnNcbiAgICBoZWFkZXIgPSBoZWFkZXIuZmlsdGVyKChoZWFkZXJJdGVtOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgIC8vIGV4Y2x1ZGUgZW1wdHkgaGVhZGVyc1xuICAgICAgaWYgKGhlYWRlckl0ZW0udHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBjbGVhbnVwSW5kZXhlcy5wdXNoKGluZGV4KTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgLy8gZXhjbHVkZSBoaWRkZW4gY29sdW1uc1xuICAgICAgLy8gbm90ZTogdXNlIHRoZSBkYXRhdGFibGUgdmlzaWJsZSgpIGZ1bmN0aW9uXG4gICAgICAvLyBpbnN0ZWFkIG9mIHRoZSBoaWRkZW4gY29uZmlnIHByb3BlcnR5LCB0byBzYXRpc2Z5IHRoZSBjb2x1bW4gc2VsZWN0b3JcbiAgICAgIGlmICghdGhpcy5kYXRhVGFibGUuY29sdW1uKGluZGV4KS52aXNpYmxlKCkpIHtcbiAgICAgICAgY2xlYW51cEluZGV4ZXMucHVzaChpbmRleCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0pO1xuICAgIC8vIGNsZWFuIHVwIGJvZHlcbiAgICBib2R5ID0gYm9keS5tYXAoKHJvdzogYW55IFtdKSA9PiB7XG4gICAgICByZXR1cm4gcm93LmZpbHRlcigoXywgcm93SW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICByZXR1cm4gY2xlYW51cEluZGV4ZXMuaW5kZXhPZihyb3dJbmRleCkgPT09IC0xO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHtib2R5LCBoZWFkZXJ9O1xuICB9XG59XG5cbi8vIGNvbnN0IGVuZFJlbmRlciA9IGZ1bmN0aW9uIChyb3dzLCBncm91cCkgeyB2YXIgY291bnQgPSByb3dzLmRhdGEoKTsgcm93cy5jb3VudCgpOyBcbi8vICAgcmV0dXJuIChgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJyb3dHcm91cFRlbXBsYXRlXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgZGF0YTogJHtncm91cH0gfVwiPjwvbmctY29udGFpbmVyPmApOyB9O1xuICAvLyA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInJvd0dyb3VwVGVtcGxhdGVcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBkYXRhOiAgfVwiPjwvbmctY29udGFpbmVyPlxuICAvLyByZXR1cm4gKCc8c3BhbiBhbGlnbj1cImxlZnRcIlwiPjxzdHJvbmc+JysgZ3JvdXAgKyAnICcgKyBgKCR7dG90YWxIZWFkZXJ9IGAgICsgY291bnQubGVuZ3RoICsgJyk8L3N0cm9uZz48L3NwYW4+Jyk7IH07XG4iLCJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgVmlld0NoaWxkLCBPbkRlc3Ryb3ksIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBbmd1bGFyRGF0YUNvbnRleHQgfSBmcm9tICdAdGhlbW9zdC9hbmd1bGFyJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBtYXgtbGluZS1sZW5ndGhcbmltcG9ydCB7IEFkdmFuY2VkVGFibGVDb21wb25lbnQsIEFkdmFuY2VkVGFibGVEYXRhUmVzdWx0LCBBZHZhbmNlZFRhYmxlQ29uZmlndXJhdGlvbiB9IGZyb20gJy4uL2FkdmFuY2VkLXRhYmxlL2FkdmFuY2VkLXRhYmxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBFcnJvclNlcnZpY2UsIERJQUxPR19CVVRUT05TLCBNb2RhbFNlcnZpY2UsIFVzZXJBY3Rpdml0eVNlcnZpY2UgfSBmcm9tICdAdW5pdmVyc2lzL2NvbW1vbic7XG5pbXBvcnQgeyBSZXNwb25zZUVycm9yIH0gZnJvbSAnQHRoZW1vc3QvY2xpZW50JztcbmltcG9ydCB7IFRhYmxlQ29uZmlndXJhdGlvbiB9IGZyb20gJy4uL2FkdmFuY2VkLXRhYmxlL2FkdmFuY2VkLXRhYmxlLmludGVyZmFjZXMnO1xuaW1wb3J0IHsgVG9hc3RTZXJ2aWNlIH0gZnJvbSAnQHVuaXZlcnNpcy9jb21tb24nO1xuXG5AQ29tcG9uZW50KHtcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmNvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ2FwcC1hZHZhbmNlZC1saXN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2FkdmFuY2VkLWxpc3QuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIEFkdmFuY2VkTGlzdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICBwdWJsaWMgcmVjb3Jkc1RvdGFsPzogbnVtYmVyO1xuICBwdWJsaWMgY29uZmlnPzogVGFibGVDb25maWd1cmF0aW9uO1xuICBwcml2YXRlIHN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBkYXRhU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIHJlbG9hZFN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcbiAgQElucHV0KCdlbnRpdHlTZXQnKSBlbnRpdHlTZXQ/OiBzdHJpbmc7XG4gIEBJbnB1dCgnY2F0ZWdvcnknKSBjYXRlZ29yeT86IHN0cmluZztcbiAgQElucHV0KCdkZXNjcmlwdGlvbicpIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBASW5wdXQoJ2xvbmdEZXNjcmlwdGlvbicpIGxvbmdEZXNjcmlwdGlvbj86IHN0cmluZztcbiAgQElucHV0KCd0YWJsZUNvbmZpZ3VyYXRpb24nKSB0YWJsZUNvbmZpZ3VyYXRpb246IGFueTtcbiAgQElucHV0KCdzZWFyY2hDb25maWd1cmF0aW9uJykgc2VhcmNoQ29uZmlndXJhdGlvbjogYW55O1xuICBAVmlld0NoaWxkKCd0YWJsZScpIHRhYmxlPzogQWR2YW5jZWRUYWJsZUNvbXBvbmVudDtcbiAgQElucHV0KCdhbGxvd1NhdmVPcHRpb24nKSBhbGxvd1NhdmVPcHRpb24gPSB0cnVlO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2NvbnRleHQ6IEFuZ3VsYXJEYXRhQ29udGV4dCxcbiAgICBwcml2YXRlIF90cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgX2FjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIF9lcnJvclNlcnZpY2U6IEVycm9yU2VydmljZSxcbiAgICBwcml2YXRlIF90b2FzdFNlcnZpY2U6IFRvYXN0U2VydmljZSxcbiAgICBwcml2YXRlIF9tb2RhbFNlcnZpY2U6IE1vZGFsU2VydmljZSxcbiAgICBwcml2YXRlIF91c2VyQWN0aXZpdHlTZXJ2aWNlOiBVc2VyQWN0aXZpdHlTZXJ2aWNlXG4gICAgKSB7IH1cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGF0YVN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5kYXRhU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnJlbG9hZFN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5yZWxvYWRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIG5nT25Jbml0KCkge1xuICAgIHRyeSB7XG4gICAgICBpZiAodGhpcy50YWJsZSA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHRhYmxlID0gdGhpcy50YWJsZTtcbiAgICAgIC8vIGdldCBtZXRhZGF0YVxuICAgICAgY29uc3QgbWV0YWRhdGEgPSBhd2FpdCB0aGlzLl9jb250ZXh0LmdldE1ldGFkYXRhKCk7XG4gICAgICAvLyBnZXQgcm91dGUgZGF0YVxuICAgICAgdGhpcy5kYXRhU3Vic2NyaXB0aW9uID0gdGhpcy5fYWN0aXZhdGVkUm91dGUuZGF0YS5zdWJzY3JpYmUoIHJvdXRlRGF0YSA9PiB7XG4gICAgICAgIC8vIGdldCBlbnRpdHlUeXBlXG4gICAgICAgIGNvbnN0IHJlID0gbmV3IFJlZ0V4cChgXiR7cm91dGVEYXRhLm1vZGVsfSRgLCAnaWcnKTtcbiAgICAgICAgY29uc3QgZW50aXR5U2V0ID0gbWV0YWRhdGEuRW50aXR5Q29udGFpbmVyLkVudGl0eVNldC5maW5kKCB4ID0+IHtcbiAgICAgICAgICByZXR1cm4gcmUudGVzdCh4Lk5hbWUpO1xuICAgICAgICB9KTtcbiAgICAgICAgLy8gaWYgZW50aXR5IHR5cGUgaXMgbnVsbFxuICAgICAgICBpZiAoZW50aXR5U2V0ID09IG51bGwpIHtcbiAgICAgICAgICAvLyBuYXZpZ2F0ZSB0byBlcnJvclxuICAgICAgICAgIHJldHVybiB0aGlzLl9lcnJvclNlcnZpY2UubmF2aWdhdGVUb0Vycm9yKG5ldyBSZXNwb25zZUVycm9yKCdFbnRpdHlTZXQgTm90IEZvdW5kJywgNDA0KSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZ2V0IGVudGl0eSB0eXBlXG4gICAgICAgIGNvbnN0IGVudGl0eVR5cGUgPSBtZXRhZGF0YS5FbnRpdHlUeXBlLmZpbmQoIHggPT4ge1xuICAgICAgICAgIHJldHVybiB4Lk5hbWUgPT09IGVudGl0eVNldC5FbnRpdHlUeXBlO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGVudGl0eVR5cGUgPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLl9lcnJvclNlcnZpY2UubmF2aWdhdGVUb0Vycm9yKG5ldyBSZXNwb25zZUVycm9yKCdFbnRpdHlUeXBlIE5vdCBGb3VuZCcsIDQwNCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyb3V0ZURhdGEuc2VhcmNoQ29uZmlndXJhdGlvbikge1xuICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocm91dGVEYXRhLnNlYXJjaENvbmZpZ3VyYXRpb24sICdhbGxvd1NhdmUnKSkge1xuICAgICAgICAgICAgdGhpcy5hbGxvd1NhdmVPcHRpb24gPSByb3V0ZURhdGEuc2VhcmNoQ29uZmlndXJhdGlvbi5hbGxvd1NhdmU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuc2VhcmNoQ29uZmlndXJhdGlvbiA9IHJvdXRlRGF0YS5zZWFyY2hDb25maWd1cmF0aW9uO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyb3V0ZURhdGEudGFibGVDb25maWd1cmF0aW9uKSB7XG4gICAgICAgICAgdGhpcy50YWJsZUNvbmZpZ3VyYXRpb24gPSByb3V0ZURhdGEudGFibGVDb25maWd1cmF0aW9uO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyb3V0ZURhdGEuZGVzY3JpcHRpb24pIHtcbiAgICAgICAgICB0aGlzLmRlc2NyaXB0aW9uID0gdGhpcy5fdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KHJvdXRlRGF0YS5kZXNjcmlwdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJvdXRlRGF0YS5sb25nRGVzY3JpcHRpb24pIHtcbiAgICAgICAgICB0aGlzLmxvbmdEZXNjcmlwdGlvbiA9IHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChyb3V0ZURhdGEubG9uZ0Rlc2NyaXB0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocm91dGVEYXRhLmNhdGVnb3J5KSB7XG4gICAgICAgICAgdGhpcy5jYXRlZ29yeSA9IHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChyb3V0ZURhdGEuY2F0ZWdvcnkpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGNsb25lIGRlZmF1bHQgY29uZmlndXJhdGlvblxuICAgICAgICBjb25zdCBkZWZhdWx0Q29uZmlndXJhdGlvbiA9IEFkdmFuY2VkVGFibGVDb25maWd1cmF0aW9uLmNhc3QodGhpcy50YWJsZUNvbmZpZ3VyYXRpb24sIHRydWUpO1xuICAgICAgICAvLyBjb3JyZWN0IGVkaXQgYnV0dG9uIGxpbmtcbiAgICAgICAgY29uc3QgY29sdW1uID0gZGVmYXVsdENvbmZpZ3VyYXRpb24uY29sdW1ucy5maW5kKCBjb2wgPT4ge1xuICAgICAgICAgIHJldHVybiBjb2wuZm9ybWF0dGVyID09PSAnQnV0dG9uRm9ybWF0dGVyJyAmJiBjb2wuZm9ybWF0U3RyaW5nID09PSAnKG1vZGFsOmVkaXQpJztcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChjb2x1bW4pIHtcbiAgICAgICAgICBjb25zdCB1cmw6IEFycmF5PHN0cmluZz4gPSBbXTtcbiAgICAgICAgICB0aGlzLl9hY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdC5wYXRoRnJvbVJvb3QuZm9yRWFjaCggcm91dGUgPT4ge1xuICAgICAgICAgICAgdXJsLnB1c2guYXBwbHkodXJsLCByb3V0ZS51cmwpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNvbHVtbi5mb3JtYXRTdHJpbmcgPSBgIy8ke3VybC5qb2luKCcvJyl9Lyhtb2RhbDpcXCRcXHtpZFxcfS9lZGl0KWA7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY3JlYXRlIGxpc3QgY29uZmlndXJhdGlvbiBieSBhc3NpZ25pbmcgbGlzdCBlbnRpdHkgc2V0XG4gICAgICAgIHRhYmxlLmNvbmZpZyA9IE9iamVjdC5hc3NpZ24oe1xuICAgICAgICAgIG1vZGVsOiBlbnRpdHlTZXQuTmFtZVxuICAgICAgICB9LCBkZWZhdWx0Q29uZmlndXJhdGlvbik7XG4gICAgICAgIC8vIGZldGNoIGRhdGFcbiAgICAgICAgdGFibGUuZmV0Y2godHJ1ZSk7XG4gICAgICAgIC8vIGRvIHJlbG9hZCBieSB1c2luZyBoaWRkZW4gZnJhZ21lbnQgZS5nLiAvY2xhc3NlcyNyZWxvYWRcbiAgICAgICAgdGhpcy5yZWxvYWRTdWJzY3JpcHRpb24gPSB0aGlzLl9hY3RpdmF0ZWRSb3V0ZS5mcmFnbWVudC5zdWJzY3JpYmUoZnJhZ21lbnQgPT4ge1xuICAgICAgICAgIGlmIChmcmFnbWVudCAmJiBmcmFnbWVudCA9PT0gJ3JlbG9hZCcpIHtcbiAgICAgICAgICAgIHRoaXMuX3RvYXN0U2VydmljZS5zaG93KFxuICAgICAgICAgICAgICB0aGlzLmRlc2NyaXB0aW9uIGFzIHN0cmluZyxcbiAgICAgICAgICAgICAgdGhpcy5fdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdTZXR0aW5ncy5PcGVyYXRpb25Db21wbGV0ZWQnKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRhYmxlLmZldGNoKHRydWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIC8vIGZpbmFsbHkgYWRkIHVzZXIgYWN0aXZpdHlcbiAgICAgICAgdGhpcy5fdXNlckFjdGl2aXR5U2VydmljZS5zZXRJdGVtKHtcbiAgICAgICAgICBjYXRlZ29yeTogdGhpcy5jYXRlZ29yeSBhcyBzdHJpbmcsXG4gICAgICAgICAgZGVzY3JpcHRpb246IHRoaXMuZGVzY3JpcHRpb24gYXMgc3RyaW5nLFxuICAgICAgICAgIHVybDogd2luZG93LmxvY2F0aW9uLmhhc2guc3Vic3RyaW5nKDEpLFxuICAgICAgICAgIGRhdGVDcmVhdGVkOiBuZXcgRGF0ZVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgcmV0dXJuIHRoaXMuX2Vycm9yU2VydmljZS5zaG93RXJyb3IoZXJyKTtcbiAgICB9XG4gIH1cblxuXG4gIC8qKlxuICAgKiBEYXRhIGxvYWQgZXZlbnQgaGFuZGxlciBvZiBhZHZhbmNlZCB0YWJsZSBjb21wb25lbnRcbiAgICogQHBhcmFtIGRhdGFcbiAgICovXG4gIG9uRGF0YUxvYWQoZGF0YTogQWR2YW5jZWRUYWJsZURhdGFSZXN1bHQpIHtcbiAgICB0aGlzLnJlY29yZHNUb3RhbCA9IGRhdGEucmVjb3Jkc1RvdGFsO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBzZWxlY3RlZCBpdGVtc1xuICAgKi9cbiAgcmVtb3ZlKCkge1xuICAgIGNvbnN0IHRhYmxlID0gdGhpcy50YWJsZTtcbiAgICBpZiAodGFibGUgJiYgdGFibGUuc2VsZWN0ZWQgJiYgdGFibGUuc2VsZWN0ZWQubGVuZ3RoKSB7XG4gICAgICAvLyBnZXQgaXRlbXMgdG8gcmVtb3ZlXG4gICAgICBjb25zdCBpdGVtcyA9IHRhYmxlLnNlbGVjdGVkO1xuICAgICAgcmV0dXJuIHRoaXMuX21vZGFsU2VydmljZS5zaG93V2FybmluZ0RpYWxvZyhcbiAgICAgICAgdGhpcy5fdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdUYWJsZXMuUmVtb3ZlSXRlbXNUaXRsZScpLFxuICAgICAgICB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ1RhYmxlcy5SZW1vdmVJdGVtc01lc3NhZ2UnKSxcbiAgICAgICAgRElBTE9HX0JVVFRPTlMuT2tDYW5jZWwpLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgICAgICBpZiAocmVzdWx0ID09PSAnb2snKSB7XG4gICAgICAgICAgICB0aGlzLl9jb250ZXh0Lm1vZGVsKHRhYmxlLmNvbmZpZy5tb2RlbCkucmVtb3ZlKGl0ZW1zKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coXG4gICAgICAgICAgICAgICAgdGhpcy5kZXNjcmlwdGlvbiArICc6JyArIHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnVGFibGVzLlJlbW92ZUl0ZW1NZXNzYWdlLnRpdGxlJyksXG4gICAgICAgICAgICAgICAgdGhpcy5fdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KChpdGVtcy5sZW5ndGggPT09IDEgP1xuICAgICAgICAgICAgICAgICAgJ1RhYmxlcy5SZW1vdmVJdGVtTWVzc2FnZS5vbmUnIDogJ1RhYmxlcy5SZW1vdmVJdGVtTWVzc2FnZS5tYW55JylcbiAgICAgICAgICAgICAgICAgICwgeyB2YWx1ZTogaXRlbXMubGVuZ3RoIH0pXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIHRhYmxlLmZldGNoKHRydWUpO1xuICAgICAgICAgICAgfSkuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5fZXJyb3JTZXJ2aWNlLnNob3dFcnJvcihlcnIsIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZUxpbms6ICcuJ1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQge0NvbXBvbmVudCwgT25Jbml0LCBPbkRlc3Ryb3ksIElucHV0LCBFdmVudEVtaXR0ZXIsXG4gICAgVmlld0NoaWxkLCBFbGVtZW50UmVmLCBWaWV3RW5jYXBzdWxhdGlvbiwgQWZ0ZXJWaWV3SW5pdCwgT3V0cHV0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlLCBSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgJ3J4anMvYWRkL29ic2VydmFibGUvY29tYmluZUxhdGVzdCc7XG5pbXBvcnQge01vZGFsU2VydmljZX0gZnJvbSAnQHVuaXZlcnNpcy9jb21tb24nO1xuaW1wb3J0IHtSb3V0ZXJNb2RhbE9rQ2FuY2VsfSBmcm9tICdAdW5pdmVyc2lzL2NvbW1vbi9yb3V0aW5nJztcbmltcG9ydCB7T2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcbmltcG9ydCB7QWR2YW5jZWRGb3JtQ29tcG9uZW50fSBmcm9tICdAdW5pdmVyc2lzL2Zvcm1zJztcbmltcG9ydCB7IFByb2dyZXNzYmFyQ29tcG9uZW50IH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9wcm9ncmVzc2Jhcic7XG5cbkBDb21wb25lbnQoe1xuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpjb21wb25lbnQtc2VsZWN0b3JcbiAgICBzZWxlY3RvcjogJ2FwcC1hZHZhbmNlZC1yb3ctYWN0aW9uJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vYWR2YW5jZWQtcm93LWFjdGlvbi5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVzOiBbXG4gICAgICAgIGBcbiAgICAgICAgLmZhLTFfNXgge1xuICAgICAgICAgICAgZm9udC1zaXplOiAxLjVyZW07XG4gICAgICAgIH1cbiAgICAgICAgLmZvcm0tY29udHJvbDpkaXNhYmxlZCwgLmZvcm0tY29udHJvbFtyZWFkb25seV0ge1xuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogaW5oZXJpdDtcbiAgICAgICAgfVxuICAgICAgICAuZm9ybS1jaGVjay5jaGVja2JveCB7XG4gICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlXG4gICAgICAgIH1cbiAgICAgICAgYFxuICAgIF0sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBBZHZhbmNlZFJvd0FjdGlvbkNvbXBvbmVudCBleHRlbmRzIFJvdXRlck1vZGFsT2tDYW5jZWwgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG5cbiAgaW52YWxpZFN1YnNjcmlwdGlvbjogYW55O1xuXG5cbiAgICBASW5wdXQoKSBpdGVtczogYW55O1xuICAgIEBJbnB1dCgpIG1vZGFsSWNvbiA9ICdmYXMgZmEtcHJvamVjdC1kaWFncmFtJztcbiAgICBASW5wdXQoKSBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgICBASW5wdXQoKSBmb3JtVGVtcGxhdGU/OiBzdHJpbmc7XG4gICAgQElucHV0KCkgcHJvZ3Jlc3NUeXBlID0gJ2luZGlnbyc7XG4gICAgQE91dHB1dCgpIGRhdGE6IGFueTtcbiAgICBASW5wdXQoKSBhZGRpdGlvbmFsTWVzc2FnZT86IHN0cmluZztcbiAgICBASW5wdXQoKSBlcnJvck1lc3NhZ2UgPSAnVGFibGVzLkFjdGlvbnMuQ29tcGxldGVkV2l0aEVycm9ycyc7XG4gICAgcHVibGljIGxhc3RFcnJvcjogYW55O1xuICAgIHB1YmxpYyBsb2FkaW5nID0gZmFsc2U7XG4gICAgQFZpZXdDaGlsZCgncHJvZ3Jlc3MnKSBwcm9ncmVzc0NvbXBvbmVudD86IFByb2dyZXNzYmFyQ29tcG9uZW50O1xuICAgIEBWaWV3Q2hpbGQoJ3Byb2dyZXNzQ29udGFpbmVyJykgcHJvZ3Jlc3NDb250YWluZXI/OiBFbGVtZW50UmVmO1xuICAgIEBWaWV3Q2hpbGQoJ2Zvcm1Db21wb25lbnQnKSBmb3JtQ29tcG9uZW50PzogQWR2YW5jZWRGb3JtQ29tcG9uZW50O1xuICAgIEBJbnB1dCgpIHJlZnJlc2g6IGFueSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBJbnB1dCgpIGV4ZWN1dGU/OiBPYnNlcnZhYmxlPGFueT47XG4gICAgcHJpdmF0ZSByZWZyZXNoU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuICAgIHByaXZhdGUgZXhlY3V0ZVN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcblxuICAgIGNvbnN0cnVjdG9yKHJvdXRlcjogUm91dGVyLFxuICAgICAgICAgICAgICAgIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICAgICAgICAgICAgICBwcml2YXRlIF90cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgICAgICAgICAgICAgIHByaXZhdGUgX21vZGFsU2VydmljZTogTW9kYWxTZXJ2aWNlKSB7XG4gICAgICAgIHN1cGVyKHJvdXRlciwgYWN0aXZhdGVkUm91dGUpO1xuICAgICAgICAvLyBzZXQgbW9kYWwgc2l6ZVxuICAgICAgICB0aGlzLm1vZGFsQ2xhc3MgPSAnbW9kYWwtbGcnO1xuICAgICAgICAvLyBzZXQgbW9kYWwgdGl0bGVcbiAgICAgICAgdGhpcy5tb2RhbFRpdGxlID0gJ1RhYmxlcy5BY3Rpb25zLkxhYmVsJztcbiAgICAgICAgLy8gZGlzYWJsZSBvayBidXR0b25cbiAgICAgICAgdGhpcy5va0J1dHRvbkRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgIC8vIHNldCBidXR0b24gdGV4dFxuICAgICAgICB0aGlzLm9rQnV0dG9uVGV4dCA9ICdUYWJsZXMuQWN0aW9ucy5TdGFydCc7XG4gICAgfVxuXG4gICAgZ2V0IGZvcm0oKSB7XG4gICAgICByZXR1cm4gdGhpcy5mb3JtQ29tcG9uZW50O1xuICAgIH1cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5yZWZyZXNoU3Vic2NyaXB0aW9uID0gdGhpcy5yZWZyZXNoLnN1YnNjcmliZSgodmFsdWUpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByb2dyZXNzQ29tcG9uZW50ID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodmFsdWUgJiYgdmFsdWUucHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgICAgICBsZXQgcHJvZ3Jlc3MgPSAwO1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5wcm9ncmVzcyA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvZ3Jlc3MgPSAwO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUucHJvZ3Jlc3MgPiAxMDApIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvZ3Jlc3MgPSAxMDA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvZ3Jlc3MgPSB2YWx1ZS5wcm9ncmVzcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9ncmVzc0NvbXBvbmVudC52YWx1ZSA9IHByb2dyZXNzO1xuICAgICAgICAgICAgICAgIHRoaXMuc2hvd1Byb2dyZXNzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgaWYgKHRoaXMuZm9ybUNvbXBvbmVudCAmJiB0aGlzLmZvcm1Db21wb25lbnQuZm9ybSkge1xuICAgICAgICB0aGlzLm9rQnV0dG9uRGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLmludmFsaWRTdWJzY3JpcHRpb24gPSB0aGlzLmZvcm1Db21wb25lbnQuZm9ybS5jaGFuZ2Uuc3Vic2NyaWJlKChldmVudDogYW55KSA9PiB7XG4gICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZXZlbnQsICdpc1ZhbGlkJykgJiYgKGV2ZW50LmNoYW5nZWQgIT0gbnVsbCkpIHtcbiAgICAgICAgICAgICAgdGhpcy5va0J1dHRvbkRpc2FibGVkID0gIWV2ZW50LmlzVmFsaWQ7XG4gICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIGlmICh0aGlzLnJlZnJlc2hTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmV4ZWN1dGVTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuZXhlY3V0ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmludmFsaWRTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuaW52YWxpZFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2FuY2VsKCk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIGlmICh0aGlzLmxvYWRpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBjbG9zZVxuICAgICAgICBpZiAodGhpcy5fbW9kYWxTZXJ2aWNlLm1vZGFsUmVmKSB7XG4gICAgICAgICAgICByZXR1cm4gIHRoaXMuX21vZGFsU2VydmljZS5tb2RhbFJlZi5oaWRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH1cblxuICAgIGFzeW5jIG9rKCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZXhlY3V0ZSA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMubGFzdEVycm9yID0gbnVsbDtcbiAgICAgICAgICAgIGlmICh0aGlzLmZvcm1Db21wb25lbnQgJiYgdGhpcy5mb3JtQ29tcG9uZW50LmZvcm0gJiZcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm1Db21wb25lbnQuZm9ybS5mb3JtaW8gJiYgdGhpcy5mb3JtQ29tcG9uZW50LmZvcm0uZm9ybWlvLmRhdGEpIHtcbiAgICAgICAgICAgICAgICAvLyBzZXQgZGF0YVxuICAgICAgICAgICAgICAgIHRoaXMuZGF0YSA9IHRoaXMuZm9ybUNvbXBvbmVudC5mb3JtLmZvcm1pby5kYXRhO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gZG8gYWN0aW9uXG4gICAgICAgICAgICB0aGlzLmV4ZWN1dGUuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlZnJlc2guZW1pdCh7XG4gICAgICAgICAgICAgICAgICAgIHByb2dyZXNzOiAxMDBcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0ICYmIHJlc3VsdC5lcnJvcnMgJiYgcmVzdWx0LmVycm9ycyA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gc2hvdyBtZXNzYWdlIGZvciBwYXJ0aWFsIHN1Y2Nlc3NcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5lcnJvcnMgPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubGFzdEVycm9yID0gbmV3IEVycm9yKHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgJHt0aGlzLmVycm9yTWVzc2FnZX0uRGVzY3JpcHRpb24uT25lYCkpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sYXN0RXJyb3IgPSBuZXcgRXJyb3IodGhpcy5fdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KFxuICAgICAgICAgICAgICAgICAgICAgICAgICBgJHt0aGlzLmVycm9yTWVzc2FnZX0uRGVzY3JpcHRpb24uTWFueWAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0KSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWZyZXNoLmVtaXQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3Jlc3M6IDFcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGlkZVByb2dyZXNzKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX21vZGFsU2VydmljZS5tb2RhbFJlZikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9tb2RhbFNlcnZpY2UubW9kYWxSZWYuaGlkZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLmxhc3RFcnJvciA9IGVycjtcbiAgICAgICAgICAgICAgICB0aGlzLnJlZnJlc2guZW1pdCh7XG4gICAgICAgICAgICAgICAgICAgIHByb2dyZXNzOiAwXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMubGFzdEVycm9yID0gZXJyO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2hvd1Byb2dyZXNzKCkge1xuICAgICAgICBpZiAodGhpcy5wcm9ncmVzc0NvbnRhaW5lcikge1xuICAgICAgICAgICAgdGhpcy5wcm9ncmVzc0NvbnRhaW5lci5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5yZXBsYWNlKCdpbnZpc2libGUnLCAndmlzaWJsZScpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaGlkZVByb2dyZXNzKCkge1xuICAgICAgICBpZiAodGhpcy5wcm9ncmVzc0NvbnRhaW5lcikge1xuICAgICAgICAgICAgdGhpcy5wcm9ncmVzc0NvbnRhaW5lci5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5yZXBsYWNlKCd2aXNpYmxlJywgJ2ludmlzaWJsZScpO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiaW1wb3J0IHtDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5AQ29tcG9uZW50KHtcbiAgICB0ZW1wbGF0ZTogJydcbiAgfSlcbmV4cG9ydCBjbGFzcyBBZHZhbmNlZFRhYmxlU2VhcmNoQmFzZUNvbXBvbmVudCB7XG4gICAgcHJpdmF0ZSBfZmlsdGVyOiBhbnk7XG4gICAgQE91dHB1dCgpIGZpbHRlckNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIEBJbnB1dCgpXG4gICAgZ2V0ICBmaWx0ZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9maWx0ZXI7XG4gICAgfVxuXG4gICAgc2V0IGZpbHRlcih2YWx1ZSkge1xuICAgICAgICB0aGlzLl9maWx0ZXIgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBvbktleUVudGVyKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGlmIChldmVudC5jb2RlID09PSAnRW50ZXInKSB7XG4gICAgICAgICAgICB0aGlzLmZpbHRlckNoYW5nZS5lbWl0KHRoaXMuX2ZpbHRlcik7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCIvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWxpbmUtbGVuZ3RoXG5pbXBvcnQge0FmdGVyVmlld0luaXQsIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkLCBWaWV3RW5jYXBzdWxhdGlvbiwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Rm9ybWlvQ29tcG9uZW50LCBGb3JtaW9Gb3JtfSBmcm9tICdhbmd1bGFyLWZvcm1pbyc7XG5pbXBvcnQge0FuZ3VsYXJEYXRhQ29udGV4dH0gZnJvbSAnQHRoZW1vc3QvYW5ndWxhcic7XG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtTZXJ2aWNlVXJsUHJlUHJvY2Vzc29yLCBUcmFuc2xhdGVQcmVQcm9jZXNzb3J9IGZyb20gJ0B1bml2ZXJzaXMvZm9ybXMnO1xuaW1wb3J0IHtBZHZhbmNlZFRhYmxlU2VhcmNoQmFzZUNvbXBvbmVudH0gZnJvbSAnLi4vYWR2YW5jZWQtdGFibGUvYWR2YW5jZWQtdGFibGUtc2VhcmNoLWJhc2UnO1xuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7U3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5cbkBDb21wb25lbnQoe1xuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6Y29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnYXBwLWFkdmFuY2VkLXNlYXJjaC1mb3JtJyxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwicC00XCI+XG4gICAgICA8Zm9ybWlvICNmb3JtaW9Db21wb25lbnQgY2xhc3M9XCJmb3JtaW8tc2VhcmNoXCJcbiAgICAgICAgICAgICAgKGtleWRvd24pPVwib25LZXlFbnRlcigkZXZlbnQpXCIgKGNoYW5nZSk9XCJvbkNoYW5nZSgkZXZlbnQpXCIgKGZvcm1Mb2FkKT1cIm9uRm9ybUxvYWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIFtyZWZyZXNoXT1cInJlZnJlc2hGb3JtXCIgW3N1Ym1pc3Npb25dPVwic3VibWlzc2lvblwiIFtmb3JtXT1cImZvcm1cIj48L2Zvcm1pbz5cbiAgICA8L2Rpdj5cbiAgYCxcbiAgc3R5bGVVcmxzOiBbJy4vYWR2YW5jZWQtc2VhcmNoLWZvcm0uY29tcG9uZW50LnNjc3MnXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBBZHZhbmNlZFNlYXJjaEZvcm1Db21wb25lbnQgZXh0ZW5kcyBBZHZhbmNlZFRhYmxlU2VhcmNoQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMge1xuXG5cbiAgQFZpZXdDaGlsZCgnZm9ybWlvQ29tcG9uZW50JykgZm9ybUNvbXBvbmVudD86IEZvcm1pb0NvbXBvbmVudDtcbiAgQElucHV0KCkgZm9ybTogYW55ID0ge307XG4gIEBJbnB1dCgpIGZvcm1TcmM/OiBzdHJpbmc7XG4gIEBPdXRwdXQoKSByZWZyZXNoRm9ybSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgbG9hZGluZyA9IG5ldyBFdmVudEVtaXR0ZXI8eyB0YXJnZXQ6IEFkdmFuY2VkU2VhcmNoRm9ybUNvbXBvbmVudH0+KCk7XG4gIHN1Ym1pc3Npb246IGFueSA9IHsgZGF0YToge30gfTtcbiAgcHJpdmF0ZSBmaWx0ZXJTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gIHB1YmxpYyBjb21wb25lbnRMb2FkaW5nID0gdHJ1ZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9jb250ZXh0OiBBbmd1bGFyRGF0YUNvbnRleHQsXG4gICAgICAgICAgICAgIHByaXZhdGUgX3RyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgX2FjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfaHR0cDogSHR0cENsaWVudFxuICApIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY2hhbmdlcywgJ2Zvcm0nKSkge1xuICAgICAgaWYgKGNoYW5nZXMuZm9ybSAhPSBudWxsKSB7XG4gICAgICAgIGlmIChjaGFuZ2VzLmZvcm0uY3VycmVudFZhbHVlICYmXG4gICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnRyaXBsZS1lcXVhbHNcbiAgICAgICAgICBjaGFuZ2VzLmZvcm0uY3VycmVudFZhbHVlICE9IGNoYW5nZXMuZm9ybS5wcmV2aW91c1ZhbHVlKSB7XG4gICAgICAgICAgdGhpcy5uZ09uSW5pdCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY2hhbmdlcywgJ2Zvcm1TcmMnKSkge1xuICAgICAgaWYgKGNoYW5nZXMuZm9ybVNyYyAhPSBudWxsKSB7XG4gICAgICAgIGlmIChjaGFuZ2VzLmZvcm1TcmMuY3VycmVudFZhbHVlICYmXG4gICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnRyaXBsZS1lcXVhbHNcbiAgICAgICAgICBjaGFuZ2VzLmZvcm1TcmMuY3VycmVudFZhbHVlICE9IGNoYW5nZXMuZm9ybVNyYy5wcmV2aW91c1ZhbHVlKSB7XG4gICAgICAgICAgdGhpcy5faHR0cC5nZXQoY2hhbmdlcy5mb3JtU3JjLmN1cnJlbnRWYWx1ZSkudG9Qcm9taXNlKCkudGhlbigoZm9ybSkgPT4ge1xuICAgICAgICAgICAgLy8gc2V0IGZvcm1cbiAgICAgICAgICAgIHRoaXMuZm9ybSA9IGZvcm07XG4gICAgICAgICAgICAvLyBhbmQgaW5pdFxuICAgICAgICAgICAgdGhpcy5uZ09uSW5pdCgpO1xuICAgICAgICAgIH0pLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIGxvYWRpbmcgc2VhcmNoIGNvbmZpZ3VyYXRpb24nKTtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNoYW5nZXMsICdmaWx0ZXInKSkge1xuICAgICAgaWYgKGNoYW5nZXMuZmlsdGVyICE9IG51bGwpIHtcbiAgICAgICAgdGhpcy5zdWJtaXNzaW9uLmRhdGEgPSBjaGFuZ2VzLmZpbHRlci5jdXJyZW50VmFsdWUgfHwge307XG4gICAgICAgIHRoaXMucmVmcmVzaEZvcm0uZW1pdCh7XG4gICAgICAgICAgc3VibWlzc2lvbjogdGhpcy5zdWJtaXNzaW9uXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmZvcm0pIHtcbiAgICAgIG5ldyBTZXJ2aWNlVXJsUHJlUHJvY2Vzc29yKHRoaXMuX2NvbnRleHQpLnBhcnNlKHRoaXMuZm9ybSk7XG4gICAgICBuZXcgVHJhbnNsYXRlUHJlUHJvY2Vzc29yKHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UpLnBhcnNlKHRoaXMuZm9ybSk7XG4gICAgICB0aGlzLnN1Ym1pc3Npb24gPSB7XG4gICAgICAgIGRhdGE6IHRoaXMuZmlsdGVyXG4gICAgICB9O1xuICAgICAgdGhpcy5sb2FkaW5nLmVtaXQoe1xuICAgICAgICB0YXJnZXQ6IHRoaXNcbiAgICAgIH0pO1xuICAgICAgdGhpcy5yZWZyZXNoRm9ybS5lbWl0KHtcbiAgICAgICAgZm9ybTogdGhpcy5mb3JtXG4gICAgICB9KTtcbiAgICAgIHRoaXMuY29tcG9uZW50TG9hZGluZyA9IGZhbHNlO1xuICAgICAgdGhpcy5maWx0ZXJTdWJzY3JpcHRpb24gPSB0aGlzLmZpbHRlckNoYW5nZS5zdWJzY3JpYmUoIGZpbHRlciA9PiB7XG4gICAgICAgIHRoaXMuc3VibWlzc2lvbi5kYXRhID0gZmlsdGVyO1xuICAgICAgICB0aGlzLnJlZnJlc2hGb3JtLmVtaXQoe1xuICAgICAgICAgIHN1Ym1pc3Npb246IHRoaXMuc3VibWlzc2lvblxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIG9uQ2hhbmdlKGV2ZW50OiBvYmplY3QpIHtcbiAgICBpZiAodGhpcy5mb3JtQ29tcG9uZW50ID09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZm9ybUNvbXBvbmVudCA9IHRoaXMuZm9ybUNvbXBvbmVudDtcbiAgICBPYmplY3Qua2V5cyhmb3JtQ29tcG9uZW50LnN1Ym1pc3Npb24uZGF0YSkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChmb3JtQ29tcG9uZW50LnN1Ym1pc3Npb24uZGF0YSwga2V5KSkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGZvcm1Db21wb25lbnQuc3VibWlzc2lvbi5kYXRhW2tleV07XG4gICAgICAgIC8vIHRoZSBmaWx0ZXIgd2l0aCB0eXBlIGlzIGEgc3RyaW5nIGFuZCBpcyBub3QgZW1wdHlcbiAgICAgICAgY29uc3QgaXNFbXB0eVN0cmluZyA9ICB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHZhbHVlLmxlbmd0aCA9PT0gMDtcbiAgICAgICAgLy8gZG8gbm90IGluY2x1ZGUgZW1wdHkgb2JqZWN0cyBpbiBmaWx0ZXJcbiAgICAgICAgY29uc3QgaXNFbXB0eU9iamVjdCA9IHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgT2JqZWN0LmtleXModmFsdWUpLmxlbmd0aCA9PT0gMDtcbiAgICAgICAgLy8gbWFrZSBpc0VtcHR5U3RyaW5nLCBpc0VtcHR5T2JqZWN0IG11dGV4XG4gICAgICAgIGlmICghaXNFbXB0eVN0cmluZyAmJiAhaXNFbXB0eU9iamVjdCkge1xuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLmZpbHRlciwga2V5LCB7XG4gICAgICAgICAgICBjb25maWd1cmFibGUgOiB0cnVlLFxuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlIDogdmFsdWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkZWxldGUgdGhpcy5maWx0ZXJba2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgb25Gb3JtTG9hZChmb3JtOiBGb3JtaW9Gb3JtKSB7XG4gICAgaWYgKHRoaXMuZm9ybUNvbXBvbmVudCA9PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGN1cnJlbnRMYW5nID0gdGhpcy5fdHJhbnNsYXRlU2VydmljZS5jdXJyZW50TGFuZztcbiAgICB0aGlzLmZvcm1Db21wb25lbnQuZm9ybWlvLmkxOG5leHQub3B0aW9ucy5yZXNvdXJjZXNbY3VycmVudExhbmddID0geyB0cmFuc2xhdGlvbiA6IHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChgRm9ybXNgKSB9O1xuICAgIHRoaXMuZm9ybUNvbXBvbmVudC5mb3JtaW8ubGFuZ3VhZ2UgPSBjdXJyZW50TGFuZztcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAvL1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZmlsdGVyU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLmZpbHRlclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIFZpZXdDaGlsZCwgQWZ0ZXJWaWV3SW5pdCwgRG9DaGVjayB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUm91dGVyTW9kYWxPa0NhbmNlbCB9IGZyb20gJ0B1bml2ZXJzaXMvY29tbW9uL3JvdXRpbmcnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBUYWJsZUNvbmZpZ3VyYXRpb24gfSBmcm9tICcuLi9hZHZhbmNlZC10YWJsZS9hZHZhbmNlZC10YWJsZS5pbnRlcmZhY2VzJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQWR2YW5jZWRUYWJsZUNvbXBvbmVudCwgQWR2YW5jZWRUYWJsZURhdGFSZXN1bHQgfSBmcm9tICcuLi9hZHZhbmNlZC10YWJsZS9hZHZhbmNlZC10YWJsZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQW5ndWxhckRhdGFDb250ZXh0IH0gZnJvbSAnQHRoZW1vc3QvYW5ndWxhcic7XG5pbXBvcnQgeyBBZHZhbmNlZEZpbHRlclZhbHVlUHJvdmlkZXIgfSBmcm9tICcuLy4uL2FkdmFuY2VkLXRhYmxlL2FkdmFuY2VkLWZpbHRlci12YWx1ZS1wcm92aWRlci5zZXJ2aWNlJztcbmltcG9ydCB7IERhdGVQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFRlbXBsYXRlUGlwZSB9IGZyb20gJ0B1bml2ZXJzaXMvY29tbW9uJztcbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBQYWdlSW5mbyB7XG4gIHBhZ2U6IG51bWJlcjtcbiAgcGFnZXM6IG51bWJlcjtcbiAgc3RhcnQ6IG51bWJlcjtcbiAgZW5kOiBudW1iZXI7XG4gIGxlbmd0aDogbnVtYmVyO1xuICByZWNvcmRzVG90YWw6IG51bWJlcjtcbiAgcmVjb3Jkc0Rpc3BsYXk6IG51bWJlcjtcbiAgc2VydmVyU2lkZT86IGJvb2xlYW47XG59XG5cbi8vIGltcG9ydGFudDogZXhwb3J0IHRoaXMgY29uc3QgZHVlIHRvIEFPVCBjb21waWxhdGlvbiBlcnJvcnNcbi8vIHNlZSBtb3JlIGh0dHBzOi8vYW5ndWxhci5pby9ndWlkZS9hb3QtbWV0YWRhdGEtZXJyb3JzI29ubHktaW5pdGlhbGl6ZWQtdmFyaWFibGVzXG5leHBvcnQgY29uc3QgQWR2YW5jZWRUYWJsZU1vZGFsQmFzZVRlbXBsYXRlID0gYFxuPGRpdj5cbiAgICA8IS0tIHNlYXJjaCAtLT5cbiAgICA8ZGl2IGNsYXNzPVwicm93IG10LTNcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLWxnLTNcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIG1iLTNcIj5cbiAgICAgICAgICA8aW5wdXQgc3BlbGxjaGVjaz1cImZhbHNlXCIgdHlwZT1cInRleHRcIiAjc2VhcmNoRWxlbWVudFxuICAgICAgICAgICAgICAgICAoa2V5dXApPVwib25LZXlVcCgkZXZlbnQpXCIgWyhuZ01vZGVsKV09XCJzZWFyY2hUZXh0XCJcbiAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgYmctZ3JheS0xMDAgYm9yZGVyLTBcIlxuICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7J1RhYmxlcy5TZWFyY2hQbGFjZWhvbGRlcicgfCB0cmFuc2xhdGV9fVwiIGFyaWEtbGFiZWw9XCJTZWFyY2hcIiBhcmlhLWRlc2NyaWJlZGJ5PVwiYmFzaWMtYWRkb24yXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwLWFwcGVuZFwiPlxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tZGVmYXVsdCBiZy1ncmF5LTEwMCBib3JkZXItMFwiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwib25TZWFyY2goKVwiPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXNlYXJjaCB0ZXh0LXNlY29uZGFyeVwiPjwvaT5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiAjZW1wdHlUYWJsZSBjbGFzcz1cImQtbm9uZVwiPlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC00XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaWNvbi1jaXJjbGUgYmctZ3JheS0zMDAgYm9yZGVyLWdyYXktMTAwXCI+PC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTRcIj5cbiAgICAgICAgICAgIDxoNCBjbGFzcz1cImZvbnQtM3hsIHRleHQtZGFya1wiIFt0cmFuc2xhdGVdPVwiJ1RhYmxlcy5FbXB0eVRhYmxlVGl0bGUnXCI+PC9oND5cbiAgICAgICAgICAgIDxwIGNsYXNzPVwiZm9udC1sZyB0ZXh0LWRhcmtcIiBbdHJhbnNsYXRlXT1cIidUYWJsZXMuRW1wdHlUYWJsZU1lc3NhZ2UnXCI+PC9wPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1sZy01XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJidG4tdG9vbGJhclwiPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWdyYXktMTAwXCI+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXNsaWRlcnMtaCBwci0yIHRleHQtc2Vjb25kYXJ5XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPnt7J1RhYmxlcy5GaWx0ZXJzJyB8IHRyYW5zbGF0ZX19XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPGRpdiAjZHJvcGRvd25GaWx0ZXIgY2xhc3M9XCJkcm9wZG93biBtbC0zXCI+XG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1ncmF5LTEwMCBkcm9wZG93bi10b2dnbGVcIlxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCIgaWQ9XCJkcm9wZG93bkRlZmF1bHRGaWx0ZXJzXCJcbiAgICAgICAgICAgICAgICAgICAgZGF0YS10b2dnbGU9XCJkcm9wZG93blwiIGRyb3Bkb3duVG9nZ2xlPlxuICAgICAgICAgICAgICB7eyB0aGlzLmRlZmF1bHRGaWx0ZXIubmFtZSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tbWVudVwiIGFyaWEtbGFiZWxsZWRieT1cImRyb3Bkb3duRGVmYXVsdEZpbHRlcnNcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJkcm9wZG93bi1pdGVtXCIgKm5nRm9yPVwibGV0IGZpbHRlciBvZiBkZWZhdWx0RmlsdGVyc1wiIChjbGljayk9XCJvbkZpbHRlclNlbGVjdChmaWx0ZXIpXCI+XG4gICAgICAgICAgICAgICAge3sgZmlsdGVyLm5hbWUgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wgdGV4dC1sZy1yaWdodCBtdC0zIG10LWxnLTAgZC1ub25lXCI+XG4gICAgICAgIDxidXR0b24gW2Rpc2FibGVkXT1cInRydWVcIiBjbGFzcz1cImJ0biByb3VuZGVkLXBpbGwgYnRuLW91dGxpbmUtdGhlbWVcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInByLTIgZm9udC1sZ1wiPis8L3NwYW4+PHNwYW4gW3RyYW5zbGF0ZV09XCInVGFibGVzLkFkZEl0ZW0nXCI+PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIiBbbmdDbGFzc109XCJ7ICdjb21wb25lbnQtbG9hZGluZyc6IGxvYWRpbmd9XCI+XG4gICAgICAgIDxhcHAtYWR2YW5jZWQtdGFibGUgI2FkdmFuY2VkVGFibGUgKGluaXQpPVwib25UYWJsZUluaXQoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvYWQpPVwib25EYXRhTG9hZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2VsZWN0YWJsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbXVsdGlwbGVTZWxlY3RdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Njcm9sbFhdPVwiZmFsc2VcIiBbc2Nyb2xsWV09XCIzMjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwYWdlTGVuZ3RoXT1cInBhZ2VMZW5ndGhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzY3JvbGxhYmxlXT1cImZhbHNlXCIgW3Nob3dGb290ZXJdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93QWN0aW9uc109XCJmYWxzZVwiIFtsZW5ndGhNZW51XT1cImxlbmd0aE1lbnVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb25maWddPVwidGFibGVDb25maWdcIiBbY29uZmlnU3JjXT1cInRhYmxlQ29uZmlnU3JjXCI+PC9hcHAtYWR2YW5jZWQtdGFibGU+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwicm93IG10LTMgdGFibGUtY3VzdG9tLXBhZ2VyXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGQtZmxleFwiICpuZ0lmPVwicmVjb3Jkc1RvdGFsXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtdC0yIG1sLWF1dG8gbXItMyB0ZXh0LXNlY29uZGFyeVwiIFt0cmFuc2xhdGVdPVwiJ1RhYmxlcy5SZWNvcmRzUGVyUGFnZSdcIj48L2Rpdj5cbiAgICAgICAgPGRpdiAjZHJvcGRvd25MZW5ndGggY2xhc3M9XCJkcm9wZG93biBtci0zXCI+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tZ3JheS0xMDAgZHJvcGRvd24tdG9nZ2xlXCJcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIiBpZD1cImRyb3Bkb3duUGFnZVNpemVcIiBkYXRhLXRvZ2dsZT1cImRyb3Bkb3duXCJcbiAgICAgICAgICAgICAgICAgIGRyb3Bkb3duVG9nZ2xlPlxuICAgICAgICAgICAge3twYWdlTGVuZ3RofX1cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tbWVudVwiIGFyaWEtbGFiZWxsZWRieT1cImRyb3Bkb3duUGFnZVNpemVcIj5cbiAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cInNldExlbmd0aChpdGVtKVwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHJvcGRvd24taXRlbSBkcm9wZG93bi1pdGVtLXRoZW1lXCJcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiICpuZ0Zvcj1cImxldCBpdGVtIG9mIGxlbmd0aE1lbnVcIj57e2l0ZW19fTwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm10LTIgbXItMlwiIFt0cmFuc2xhdGVdPVwiJ1RhYmxlcy5QYWdlSW5mbydcIiBbdHJhbnNsYXRlUGFyYW1zXT1cInBhZ2VJbmZvXCI+PC9kaXY+XG4gICAgICAgIDxidXR0b24gW2Rpc2FibGVkXT1cInBhZ2VJbmZvICYmIHBhZ2VJbmZvLnBhZ2UgPT09IDBcIiBjbGFzcz1cImJ0biB0ZXh0LW5vd3JhcFwiIChjbGljayk9XCJmaXJzdFBhZ2UoKVwiPlxuICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtY2hldnJvbi1sZWZ0IHRleHQtY29sb3ItdGhlbWVcIj48L2k+XG4gICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jaGV2cm9uLWxlZnQgdGV4dC1jb2xvci10aGVtZVwiPjwvaT5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gW2Rpc2FibGVkXT1cInBhZ2VJbmZvICYmIHBhZ2VJbmZvLnBhZ2U9PT0wXCIgY2xhc3M9XCJidG5cIiAoY2xpY2spPVwicHJldmlvdXNQYWdlKClcIj5cbiAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWNoZXZyb24tbGVmdCB0ZXh0LWNvbG9yLXRoZW1lXCI+PC9pPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBbZGlzYWJsZWRdPVwicGFnZUluZm8gJiYgcGFnZUluZm8ucGFnZT09PXBhZ2VJbmZvLnBhZ2VzLTFcIiBjbGFzcz1cImJ0blwiIChjbGljayk9XCJuZXh0UGFnZSgpXCI+XG4gICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jaGV2cm9uLXJpZ2h0IHRleHQtY29sb3ItdGhlbWVcIj48L2k+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIFtkaXNhYmxlZF09XCJwYWdlSW5mbyAmJiBwYWdlSW5mby5wYWdlPT09cGFnZUluZm8ucGFnZXMtMVwiIGNsYXNzPVwiYnRuIHRleHQtbm93cmFwXCIgKGNsaWNrKT1cImxhc3RQYWdlKClcIj5cbiAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWNoZXZyb24tcmlnaHQgdGV4dC1jb2xvci10aGVtZVwiPjwvaT5cbiAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWNoZXZyb24tcmlnaHQgdGV4dC1jb2xvci10aGVtZVwiPjwvaT5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5gO1xuXG4vKipcbiAqXG4gKiBBIHNwZWNpZmljIHZhbHVlIGZvciBhIGNyaXRlcmlvblxuICpcbiAqL1xuaW50ZXJmYWNlIFNlYXJjaEl0ZW0ge1xuICBmaWx0ZXI6IGFueTtcbiAgbmFtZTogc3RyaW5nO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBjb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdhcHAtYWR2YW5jZWQtdGFibGUtbW9kYWwnLFxuICB0ZW1wbGF0ZTogQWR2YW5jZWRUYWJsZU1vZGFsQmFzZVRlbXBsYXRlLFxuICBzdHlsZXM6IFtcbiAgICBgXG5cbiAgICBgXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgQWR2YW5jZWRUYWJsZU1vZGFsQmFzZUNvbXBvbmVudCBleHRlbmRzIFJvdXRlck1vZGFsT2tDYW5jZWwgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCB7XG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLnNlYXJjaEVsZW1lbnQgJiYgdGhpcy5zZWFyY2hFbGVtZW50Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgdGhpcy5zZWFyY2hFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9LCAwKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IERFRkFVTFRfQUxMX0ZJTFRFUiA9IHtcbiAgICBuYW1lOiAnVGFibGVzLkFsbCcsXG4gICAgZmlsdGVyOiBudWxsXG4gIH07XG5cbiAgQFZpZXdDaGlsZCgnYWR2YW5jZWRUYWJsZScpIGFkdmFuY2VkVGFibGU/OiBBZHZhbmNlZFRhYmxlQ29tcG9uZW50O1xuICBAVmlld0NoaWxkKCdlbXB0eVRhYmxlJykgZW1wdHlUYWJsZT86IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ2Ryb3Bkb3duRmlsdGVyJykgZHJvcGRvd25GaWx0ZXI/OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdkcm9wZG93bkxlbmd0aCcpIGRyb3Bkb3duTGVuZ3RoPzogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnc2VhcmNoRWxlbWVudCcpIHNlYXJjaEVsZW1lbnQ6IGFueTtcbiAgQElucHV0KCd0YWJsZUNvbmZpZycpIHRhYmxlQ29uZmlnPzogVGFibGVDb25maWd1cmF0aW9uO1xuICBASW5wdXQoJ3RhYmxlQ29uZmlnU3JjJykgdGFibGVDb25maWdTcmM/OiBzdHJpbmc7XG4gIEBJbnB1dCgncGFnZUxlbmd0aCcpIHBhZ2VMZW5ndGggPSAyNTtcbiAgQElucHV0KCdzZWFyY2hUZXh0Jykgc2VhcmNoVGV4dD86IHN0cmluZztcbiAgQElucHV0KCdsZW5ndGhNZW51JykgbGVuZ3RoTWVudTogQXJyYXk8bnVtYmVyPiA9IFs1LCAxMCwgMjUsIDUwLCAxMDBdO1xuICBwcml2YXRlIHN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcbiAgcHVibGljIHJlY29yZHNUb3RhbCA9IDA7XG4gIHB1YmxpYyBsb2FkaW5nID0gZmFsc2U7XG4gIHB1YmxpYyByZWNvcmRzRmlsdGVyZWQgPSAwO1xuICBwdWJsaWMgZGVmYXVsdEZpbHRlcnM6IEFycmF5PGFueT4gPSBbQWR2YW5jZWRUYWJsZU1vZGFsQmFzZUNvbXBvbmVudC5ERUZBVUxUX0FMTF9GSUxURVJdO1xuICBASW5wdXQoJ2RlZmF1bHRGaWx0ZXInKSBkZWZhdWx0RmlsdGVyID0gQWR2YW5jZWRUYWJsZU1vZGFsQmFzZUNvbXBvbmVudC5ERUZBVUxUX0FMTF9GSUxURVI7XG5cblxuICBwdWJsaWMgcGFnZUluZm8gPSA8UGFnZUluZm8+e1xuICAgIHNlcnZlclNpZGU6IHRydWVcbiAgfTtcbiAgcHJpdmF0ZSBfdGVtcGxhdGU6IFRlbXBsYXRlUGlwZTtcbiAgY29uZmlnQ2hhbmdlc1N1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBfcm91dGVyOiBSb3V0ZXIsXG4gICAgX2FjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcm90ZWN0ZWQgX2NvbnRleHQ6IEFuZ3VsYXJEYXRhQ29udGV4dCxcbiAgICBwcm90ZWN0ZWQgYWR2YW5jZWRGaWx0ZXJWYWx1ZVByb3ZpZGVyOiBBZHZhbmNlZEZpbHRlclZhbHVlUHJvdmlkZXIsXG4gICAgcHJvdGVjdGVkIGRhdGVQaXBlOiBEYXRlUGlwZVxuICApIHtcbiAgICBzdXBlcihfcm91dGVyLCBfYWN0aXZhdGVkUm91dGUpO1xuICAgIHRoaXMubW9kYWxDbGFzcyA9ICdtb2RhbC14bCBtb2RhbC10YWJsZSc7XG4gICAgdGhpcy5fdGVtcGxhdGUgPSBuZXcgVGVtcGxhdGVQaXBlKCk7XG4gIH1cblxuICBwcml2YXRlIF9nZXRJbnB1dHMoY29tcG9uZW50VHlwZSk6IEFycmF5PGFueT4ge1xuICAgIGNvbnN0IHByb3BzID0gY29tcG9uZW50VHlwZS5fX3Byb3BfX21ldGFkYXRhX187XG4gICAgY29uc3QgaW5wdXRzOiBhbnlbXSA9IFtdO1xuICAgIGlmIChwcm9wcyA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gaW5wdXRzO1xuICAgIH1cbiAgICBPYmplY3Qua2V5cyhwcm9wcykuZm9yRWFjaChwcm9wID0+IHtcbiAgICAgIGNvbnN0IG1lbWJlciA9IHByb3BzW3Byb3BdWzBdO1xuICAgICAgaWYgKG1lbWJlci5uZ01ldGFkYXRhTmFtZSA9PT0gJ0lucHV0Jykge1xuICAgICAgICBpbnB1dHMucHVzaChwcm9wKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gaW5wdXRzLnNvcnQoKTtcbiAgfVxuXG4gIHB1YmxpYyBoYXNJbnB1dHMoKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG5cbiAgICB0aGlzLm9rQnV0dG9uVGV4dCA9ICdUYWJsZXMuQXBwbHknO1xuICAgIHRoaXMuY2FuY2VsQnV0dG9uVGV4dCA9ICdUYWJsZXMuQ2FuY2VsJztcbiAgICAvLyBnZXQgcm91dGUgZGF0YVxuICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gdGhpcy5hY3RpdmF0ZWRSb3V0ZS5kYXRhLnN1YnNjcmliZShkYXRhID0+IHtcbiAgICAgIC8vIHNldCBtb2RhbCB0aXRsZSBpZiBhbnlcbiAgICAgIGlmIChkYXRhLnRpdGxlKSB7XG4gICAgICAgIHRoaXMubW9kYWxUaXRsZSA9IGRhdGEudGl0bGU7XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhLmNvbmZpZykge1xuICAgICAgICB0aGlzLnRhYmxlQ29uZmlnID0gZGF0YS5jb25maWc7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy50YWJsZUNvbmZpZykge1xuICAgICAgICB0aGlzLmRlZmF1bHRGaWx0ZXJzLnB1c2guYXBwbHkodGhpcy5kZWZhdWx0RmlsdGVycywgdGhpcy50YWJsZUNvbmZpZy5zZWFyY2hlcyk7XG4gICAgICB9XG4gICAgICAvLyBpbXBvcnRhbnQ6IHVzZSBoYXNJbnB1dHMgZHVlIHRvIEFPVCBjb21waWxhdGlvbi4gTWV0YWRhdGEgcHJvcGVydGllcyBjYW5ub3QgYmUgdXNlZCAoZS5nLiBASW5wdXQoKSlcbiAgICAgIC8vIGJlY2F1c2UgdGhlcmUgYXJlIGVtcHR5IGR1cmluZyBydW50aW1lXG4gICAgICAvLyBzbyB3ZSBuZWVkIHRvIGRlZmluZSBtYW51YWxseSBpbnB1dCBwcm9wZXJ0aWVzIHRoYXQgYXJlIGdvaW5nIHRvIGJlIGJpbmQgdGhyb3VnaCB0aGlzIHByb2Nlc3NcbiAgICAgIC8vIGJpbmQgYWxsIGlucHV0c1xuICAgICAgY29uc3QgaW5wdXRzID0gdGhpcy5oYXNJbnB1dHMoKTtcbiAgICAgIGlucHV0cy5mb3JFYWNoKGlucHV0ID0+IHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLCBpbnB1dCkpIHtcbiAgICAgICAgICB0aGlzW2lucHV0XSA9IGRhdGFbaW5wdXRdO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGlmICh0aGlzLmFkdmFuY2VkVGFibGUpIHtcbiAgICAgICAgdGhpcy5jb25maWdDaGFuZ2VzU3Vic2NyaXB0aW9uID0gdGhpcy5hZHZhbmNlZFRhYmxlLmNvbmZpZ0NoYW5nZXMuc3Vic2NyaWJlKChjb25maWcpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy50YWJsZUNvbmZpZykge1xuICAgICAgICAgICAgLy8gcmVzZXQgZGVmYXVsdCBmaWx0ZXJcbiAgICAgICAgICAgIHRoaXMuZGVmYXVsdEZpbHRlciA9IEFkdmFuY2VkVGFibGVNb2RhbEJhc2VDb21wb25lbnQuREVGQVVMVF9BTExfRklMVEVSO1xuICAgICAgICAgICAgLy8gaW5pdCBmaWx0ZXJcbiAgICAgICAgICAgIHRoaXMuZGVmYXVsdEZpbHRlcnMgPSBbQWR2YW5jZWRUYWJsZU1vZGFsQmFzZUNvbXBvbmVudC5ERUZBVUxUX0FMTF9GSUxURVJdO1xuICAgICAgICAgICAgLy8gYWRkIGV4dHJhIGZpbHRlcnNcbiAgICAgICAgICAgIHRoaXMuZGVmYXVsdEZpbHRlcnMucHVzaC5hcHBseSh0aGlzLmRlZmF1bHRGaWx0ZXJzLCB0aGlzLnRhYmxlQ29uZmlnLnNlYXJjaGVzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgY2FuY2VsKCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuY2xvc2UoKTtcbiAgfVxuXG4gIG9rKCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuY2xvc2UoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBvbkRhdGFMb2FkKGRhdGE6IEFkdmFuY2VkVGFibGVEYXRhUmVzdWx0KSB7XG4gICAgdGhpcy5yZWNvcmRzVG90YWwgPSBkYXRhLnJlY29yZHNUb3RhbDtcbiAgICB0aGlzLnJlY29yZHNGaWx0ZXJlZCA9IGRhdGEucmVjb3Jkc0ZpbHRlcmVkO1xuICAgIC8vIGdldCBmaXJzdCBwYWdlIGluZm8gKGJlY2F1c2UgcGFnZSBpcyBub3QgZ29pbmcgdG8gYmUgZmlyZWQgZm9yIGZpcnN0IHBhZ2UpXG4gICAgaWYgKGRhdGEucmVjb3Jkc1RvdGFsID4gMCAmJiB0aGlzLnBhZ2VJbmZvLnJlY29yZHNUb3RhbCA9PT0gMCkge1xuICAgICAgdGhpcy5wYWdlSW5mby5yZWNvcmRzVG90YWwgPSBkYXRhLnJlY29yZHNUb3RhbDtcbiAgICB9XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gIH1cblxuICBwcmV2aW91c1BhZ2UoKSB7XG4gICAgaWYgKHRoaXMuYWR2YW5jZWRUYWJsZSkge1xuICAgICAgLy8gZ28gdG8gbmV4dCBwYWdlXG4gICAgICAvLyBub2luc3BlY3Rpb24gVHlwZVNjcmlwdFZhbGlkYXRlSlNUeXBlc1xuICAgICAgdGhpcy5hZHZhbmNlZFRhYmxlLmRhdGFUYWJsZS5wYWdlKCdwcmV2aW91cycpLmRyYXcoJ3BhZ2UnKTtcbiAgICB9XG4gIH1cblxuICBuZXh0UGFnZSgpIHtcbiAgICBpZiAodGhpcy5hZHZhbmNlZFRhYmxlKSB7XG4gICAgICAvLyBnbyB0byBuZXh0IHBhZ2VcbiAgICAgIC8vIG5vaW5zcGVjdGlvbiBUeXBlU2NyaXB0VmFsaWRhdGVKU1R5cGVzXG4gICAgICB0aGlzLmFkdmFuY2VkVGFibGUuZGF0YVRhYmxlLnBhZ2UoJ25leHQnKS5kcmF3KCdwYWdlJyk7XG4gICAgfVxuICB9XG5cbiAgb25UYWJsZUluaXQoKSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgY29uc3QgZGF0YVRhYmxlID0gc2VsZi5hZHZhbmNlZFRhYmxlICYmIHNlbGYuYWR2YW5jZWRUYWJsZS5kYXRhVGFibGU7XG4gICAgLy8gZ2V0IGluaXRpYWwgcGFnZSBpbmZvXG4gICAgY29uc3QgaW5pdGlhbFBhZ2VJbmZvID0gPFBhZ2VJbmZvPmRhdGFUYWJsZS5wYWdlLmluZm8oKTtcbiAgICBpbml0aWFsUGFnZUluZm8uc3RhcnQgKz0gMTtcbiAgICBzZWxmLnBhZ2VJbmZvID0gaW5pdGlhbFBhZ2VJbmZvO1xuICAgIC8vIGNoYW5nZSBlbXB0eVRhYmxlTWVzc2FnZVxuICAgIGRhdGFUYWJsZS5jb250ZXh0WzBdLm9MYW5ndWFnZS5zRW1wdHlUYWJsZSA9IHRoaXMuZW1wdHlUYWJsZSAmJiB0aGlzLmVtcHR5VGFibGUubmF0aXZlRWxlbWVudC5pbm5lckhUTUw7XG4gICAgLy8gYmluZCBwYWdlIGNoYW5nZSBldmVudFxuICAgIGRhdGFUYWJsZS5vbigncGFnZS5kdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHBhZ2VJbmZvID0gPFBhZ2VJbmZvPmRhdGFUYWJsZS5wYWdlLmluZm8oKTtcbiAgICAgIHBhZ2VJbmZvLnN0YXJ0ICs9IDE7XG4gICAgICBzZWxmLnBhZ2VJbmZvID0gcGFnZUluZm87XG4gICAgfSk7XG4gICAgLy8gYmluZCBkcmF3IGNoYW5nZSBldmVudFxuICAgIGRhdGFUYWJsZS5vbignZHJhdy5kdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIGZvciBmdXR1cmUgdXNlXG4gICAgICBzZWxmLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgIGNvbnN0IHBhZ2VJbmZvID0gPFBhZ2VJbmZvPmRhdGFUYWJsZS5wYWdlLmluZm8oKTtcbiAgICAgIHBhZ2VJbmZvLnN0YXJ0ICs9IDE7XG4gICAgICBzZWxmLnBhZ2VJbmZvID0gcGFnZUluZm87XG4gICAgfSk7XG4gIH1cblxuICBmaXJzdFBhZ2UoKSB7XG4gICAgaWYgKHRoaXMuYWR2YW5jZWRUYWJsZSkge1xuICAgICAgLy8gZ28gdG8gZmlyc3QgcGFnZVxuICAgICAgLy8gbm9pbnNwZWN0aW9uIFR5cGVTY3JpcHRWYWxpZGF0ZUpTVHlwZXNcbiAgICAgIHRoaXMuYWR2YW5jZWRUYWJsZS5kYXRhVGFibGUucGFnZSgnZmlyc3QnKS5kcmF3KCdwYWdlJyk7XG4gICAgfVxuICB9XG5cbiAgbGFzdFBhZ2UoKSB7XG4gICAgaWYgKHRoaXMuYWR2YW5jZWRUYWJsZSkge1xuICAgICAgLy8gZ28gdG8gbGFzdCBwYWdlXG4gICAgICAvLyBub2luc3BlY3Rpb24gVHlwZVNjcmlwdFZhbGlkYXRlSlNUeXBlc1xuICAgICAgdGhpcy5hZHZhbmNlZFRhYmxlLmRhdGFUYWJsZS5wYWdlKCdsYXN0JykuZHJhdygncGFnZScpO1xuICAgIH1cbiAgfVxuXG4gIHNldExlbmd0aCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgaWYgKHRoaXMuYWR2YW5jZWRUYWJsZSkge1xuICAgICAgdGhpcy5wYWdlTGVuZ3RoID0gdmFsdWU7XG4gICAgICB0aGlzLmFkdmFuY2VkVGFibGUuZGF0YVRhYmxlLnBhZ2UubGVuKHZhbHVlKS5kcmF3KCk7XG4gICAgfVxuICB9XG5cbiAgb25LZXlVcChldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGlmIChldmVudC5rZXkgPT09ICdFbnRlcicgfHwgZXZlbnQua2V5ID09PSAnUmV0dXJuJykge1xuICAgICAgaWYgKHRoaXMuYWR2YW5jZWRUYWJsZSkge1xuICAgICAgICAvLyBsb2FkaW5nXG4gICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgICAgIHRoaXMuYWR2YW5jZWRUYWJsZS5zZWFyY2goKDxIVE1MSW5wdXRFbGVtZW50PmV2ZW50LnRhcmdldCkudmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uU2VhcmNoKCkge1xuICAgIGlmICh0aGlzLmFkdmFuY2VkVGFibGUpIHtcbiAgICAgIC8vIGxvYWRpbmdcbiAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgICB0aGlzLmFkdmFuY2VkVGFibGUuc2VhcmNoKHRoaXMuc2VhcmNoVGV4dCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIFJlYWRzIHRoZSBtb2RhbCB0YWJsZSBhbmQgcmV0dXJucyBhIGxpc3Qgb2YgZmlsdGVycyB0byB1c2UgaW4gdGhlIHRhYmxlXG4gICAqIHF1ZXJ5LlxuICAgKlxuICAgKiBAcGFyYW0gdGFibGVDb25maWcge29iamVjdH0gVGhlIHRhYmxlIGNvbmZpZ3VyYXRpb24gZnJvbSBqc29uIGZpbGVcbiAgICogQHBhcmFtIGRlZmF1bHRGaWx0ZXJWYWx1ZXMge29iamVjdH0gQSBsaXN0IG9mIGRlZmF1bHQgZmlsdGVyc1xuICAgKiBAcGFyYW0gc2VhcmNoSXRlbSBUaGUgc2VhcmNoSXRlbSB0byB1c2VcbiAgICpcbiAgICovXG4gIGdldEZpbHRlcnMoXG4gICAgdGFibGVDb25maWc6IGFueSxcbiAgICBkZWZhdWx0RmlsdGVyVmFsdWVzID0ge30sXG4gICAgc2VhcmNoSXRlbTogYW55XG4gICk6IEFycmF5PHN0cmluZz4ge1xuICAgIC8vIERvIG5vdGhpbmcgaW4gYWJzZW5jZSBvZiBjb25maWd1cmF0aW9uLlxuICAgIGlmICghdGFibGVDb25maWcgfHwgIUFycmF5LmlzQXJyYXkodGFibGVDb25maWcuY3JpdGVyaWEpKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgaWYgKHNlYXJjaEl0ZW0uZmlsdGVyID09IG51bGwpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBjb25zdCBtYXRjaGVkQ3JpdGVyaW9uID0gdGFibGVDb25maWcuY3JpdGVyaWEuZmluZChjcml0ZXJpb24gPT5cbiAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzZWFyY2hJdGVtLmZpbHRlciwgY3JpdGVyaW9uLm5hbWUpXG4gICAgKTtcblxuICAgIGlmIChtYXRjaGVkQ3JpdGVyaW9uID09IG51bGwpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZSA9IHNlYXJjaEl0ZW0uZmlsdGVyW21hdGNoZWRDcml0ZXJpb24ubmFtZV07XG5cbiAgICBjb25zdCBjcml0ZXJpb25TYWZlTmFtZSA9IG1hdGNoZWRDcml0ZXJpb24ubmFtZSAhPT0gbnVsbFxuICAgICAgPyBtYXRjaGVkQ3JpdGVyaW9uLm5hbWUudG9TdHJpbmcoKVxuICAgICAgOiAnJztcblxuICAgIGxldCBhcHBsaWNhYmxlRmlsdGVyOiBzdHJpbmc7XG5cbiAgICAvLyBSYXcgZGF0ZXMgc2hvdWxkIGJlIHRyYW5zZm9ybWVkIHRvIGEgc3BlY2lmaWMgZm9ybWF0XG4gICAgaWYgKGNyaXRlcmlvblNhZmVOYW1lLmluY2x1ZGVzKCdHTVQnKSkge1xuICAgICAgY29uc3QgbmV3RGF0ZSA9IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGNyaXRlcmlvblNhZmVOYW1lLCAnTU0vZGQveXl5eScpO1xuICAgICAgYXBwbGljYWJsZUZpbHRlciA9IHRoaXMuX3RlbXBsYXRlLnRyYW5zZm9ybShtYXRjaGVkQ3JpdGVyaW9uLmZpbHRlciwge1xuICAgICAgICB2YWx1ZTogbmV3RGF0ZVxuICAgICAgfSk7XG5cbiAgICB9IGVsc2UgaWYgKGNyaXRlcmlvblNhZmVOYW1lICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgYXBwbGljYWJsZUZpbHRlciA9ICh0aGlzLl90ZW1wbGF0ZS50cmFuc2Zvcm0obWF0Y2hlZENyaXRlcmlvbi5maWx0ZXIsIE9iamVjdC5hc3NpZ24oe1xuICAgICAgICB2YWx1ZTogdmFsdWVcbiAgICAgIH0sIGRlZmF1bHRGaWx0ZXJWYWx1ZXMpKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFwcGxpY2FibGVGaWx0ZXIgPSAnJztcbiAgICB9XG5cbiAgICByZXR1cm4gW2FwcGxpY2FibGVGaWx0ZXJdO1xuICB9XG5cbiAgb25GaWx0ZXJTZWxlY3QodmFsdWU6IHsgZmlsdGVyOiBhbnk7IG5hbWU6IHN0cmluZyB9IHwgYW55KSB7XG4gICAgdGhpcy5hZHZhbmNlZFNlYXJjaCh2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogUnVucyBhIGZpbHRlciBhZ2FpbnN0IHRoZSBtb2RhbCB0YWJsZVxuICAgKlxuICAgKiBAcGFyYW0gZmlsdGVyIFRoZSBmaWx0ZXIgdG8gdXNlIGluIHRoZSBzZWFyY2hcbiAgICpcbiAgICovXG4gIGFzeW5jIGFkdmFuY2VkU2VhcmNoKGZpbHRlcik6IFByb21pc2U8YW55PiB7XG4gICAgLy8gRG8gbm90aGluZyBpbiBhYnNlbmNlIG9mIGNvbmZpZ3VyYXRpb24uXG4gICAgaWYgKCF0aGlzLnRhYmxlQ29uZmlnIHx8ICFBcnJheS5pc0FycmF5KHRoaXMudGFibGVDb25maWcuY3JpdGVyaWEpIHx8ICF0aGlzLmFkdmFuY2VkVGFibGUpIHtcbiAgICAgIGNvbnNvbGUud2FybignTm8gdGFibGUgY29uZmlndXJhdGlvbiBhdmFpbGFibGUnLCB0aGlzLnRhYmxlQ29uZmlnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBBbiBhZHZhbmNlZCB0YWJsZSBoYXMgc29tZSBmaWx0ZXJzIGJ5IGRlZmF1bHRcbiAgICBsZXQgZGVmYXVsdEZpbHRlclZhbHVlcztcbiAgICB0cnkge1xuICAgICAgZGVmYXVsdEZpbHRlclZhbHVlcyA9IGF3YWl0IHRoaXMuYWR2YW5jZWRGaWx0ZXJWYWx1ZVByb3ZpZGVyLmdldFZhbHVlcygpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZGVmYXVsdEZpbHRlclZhbHVlcyA9IHt9O1xuICAgIH1cblxuICAgIGNvbnN0IGV4cHJlc3Npb25zOiBhbnlbXSA9IFtdO1xuICAgIGxldCBwcmVkZWZpbmVkQ3JpdGVyaWE7XG4gICAgaWYgKGZpbHRlcikge1xuICAgICAgdGhpcy5kZWZhdWx0RmlsdGVyID0gZmlsdGVyO1xuICAgICAgcHJlZGVmaW5lZENyaXRlcmlhID0gdGhpcy5nZXRGaWx0ZXJzKFxuICAgICAgICB0aGlzLnRhYmxlQ29uZmlnLFxuICAgICAgICBkZWZhdWx0RmlsdGVyVmFsdWVzLFxuICAgICAgICBmaWx0ZXJcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEVtcHR5IGEgZmFsc3kgZmlsdGVyIHJlc2V0cyB0aGUgcmVzdWx0c1xuICAgICAgdGhpcy5kZWZhdWx0RmlsdGVyID0gQWR2YW5jZWRUYWJsZU1vZGFsQmFzZUNvbXBvbmVudC5ERUZBVUxUX0FMTF9GSUxURVI7XG4gICAgfVxuXG4gICAgLy8gc2VhcmNoIGZpbHRlciBpcyBhcHBsaWVkIHNlcGFyYXRlbHksIHRoZXJlIGlzIG5vIG5lZWQgdG8gYWRkIGhlcmUuXG4gICAgZXhwcmVzc2lvbnMucHVzaChwcmVkZWZpbmVkQ3JpdGVyaWEpO1xuXG4gICAgY29uc3QgcXVlcnkgPSB0aGlzLl9jb250ZXh0Lm1vZGVsKHRoaXMuYWR2YW5jZWRUYWJsZS5jb25maWcubW9kZWwpLmFzUXVlcnlhYmxlKCk7XG4gICAgcXVlcnkuc2V0UGFyYW0oJ2ZpbHRlcicsIGV4cHJlc3Npb25zLmpvaW4oJyBhbmQgJykpLnByZXBhcmUoKTtcbiAgICB0aGlzLmFkdmFuY2VkVGFibGUucXVlcnkgPSBxdWVyeTtcbiAgICB0aGlzLmFkdmFuY2VkVGFibGUuZmV0Y2goKTtcbiAgfVxufVxuXG4iLCJpbXBvcnQgeyBBZHZhbmNlZFRhYmxlTW9kYWxCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi4vYWR2YW5jZWQtdGFibGUtbW9kYWwvYWR2YW5jZWQtdGFibGUtbW9kYWwtYmFzZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBBZHZhbmNlZEZpbHRlclZhbHVlUHJvdmlkZXIgfSBmcm9tICcuLi9hZHZhbmNlZC10YWJsZS9hZHZhbmNlZC1maWx0ZXItdmFsdWUtcHJvdmlkZXIuc2VydmljZSc7XG5pbXBvcnQgeyBBbmd1bGFyRGF0YUNvbnRleHQgfSBmcm9tICdAdGhlbW9zdC9hbmd1bGFyJztcbmltcG9ydCB7IEFmdGVyVmlld0luaXQsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBWaWV3Q2hpbGQsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCc01vZGFsUmVmIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9tb2RhbCc7XG5pbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbkBDb21wb25lbnQoe1xuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IGNvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ2FwcC1hZHZhbmNlZC1zZWxlY3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vYWR2YW5jZWQtc2VsZWN0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVzOiBbXG4gICAgYFxuICAgIC5tb2RhbC10YWJsZSAuZGF0YVRhYmxlc193cmFwcGVyIHtcbiAgICAgIGhlaWdodDogNTB2aDtcbiAgICAgIG92ZXJmbG93LXk6IGF1dG87XG4gICAgfVxuICAgIGAsXG4gIF0sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG59KVxuZXhwb3J0IGNsYXNzIEFkdmFuY2VkU2VsZWN0Q29tcG9uZW50IGV4dGVuZHMgQWR2YW5jZWRUYWJsZU1vZGFsQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xuXG4gIHB1YmxpYyBkaXNtaXNzOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQFZpZXdDaGlsZCgnc2VhcmNoRWxlbWVudCcpIHNlYXJjaEVsZW1lbnQ6IGFueTtcblxuICBjb25zdHJ1Y3Rvcihyb3V0ZXI6IFJvdXRlcixcbiAgICBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgY29udGV4dDogQW5ndWxhckRhdGFDb250ZXh0LFxuICAgIGFkdmFuY2VkRmlsdGVyVmFsdWVQcm92aWRlcjogQWR2YW5jZWRGaWx0ZXJWYWx1ZVByb3ZpZGVyLFxuICAgIGRhdGVQaXBlOiBEYXRlUGlwZSxcbiAgICBwcml2YXRlIF9tb2RhbFJlZjogQnNNb2RhbFJlZixcbiAgICBwcml2YXRlIGVsOiBFbGVtZW50UmVmKSB7XG4gICAgc3VwZXIocm91dGVyLCBhY3RpdmF0ZWRSb3V0ZSwgY29udGV4dCwgYWR2YW5jZWRGaWx0ZXJWYWx1ZVByb3ZpZGVyLCBkYXRlUGlwZSk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgc3VwZXIubmdBZnRlclZpZXdJbml0KCk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5zZWFyY2hFbGVtZW50ICYmIHRoaXMuc2VhcmNoRWxlbWVudC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgIHRoaXMuc2VhcmNoRWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICB9XG4gICAgfSwgMCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgb2soKSB7XG4gICAgdGhpcy5fbW9kYWxSZWYuaGlkZSgpO1xuICAgIHRoaXMuZGlzbWlzcy5lbWl0KCdvaycpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGNhbmNlbCgpIHtcbiAgICB0aGlzLl9tb2RhbFJlZi5oaWRlKCk7XG4gICAgdGhpcy5kaXNtaXNzLmVtaXQoJ2NhbmNlbCcpO1xuICB9XG5cbn1cbiIsImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1vZGFsU2VydmljZSB9IGZyb20gJ0B1bml2ZXJzaXMvY29tbW9uJztcbmltcG9ydCB7IEFkdmFuY2VkU2VsZWN0Q29tcG9uZW50IH0gZnJvbSAnLi9hZHZhbmNlZC1zZWxlY3QuY29tcG9uZW50JztcbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBBZHZhbmNlZFNlbGVjdFNlcnZpY2Uge1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX21vZGFsOiBNb2RhbFNlcnZpY2UpIHtcbiAgICAvL1xuICB9XG5cbiAgc2VsZWN0KGluaXRpYWxTdGF0ZTogYW55KTogUHJvbWlzZTx7cmVzdWx0OiBzdHJpbmcsIGl0ZW1zOiBBcnJheTxhbnk+fT4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBtb2RhbFJlZiA9IHRoaXMuX21vZGFsLm9wZW5Nb2RhbENvbXBvbmVudChBZHZhbmNlZFNlbGVjdENvbXBvbmVudCwge1xuICAgICAgICAgIGNsYXNzOiAnbW9kYWwteGwgbW9kYWwtdGFibGUnLFxuICAgICAgICAgIGlnbm9yZUJhY2tkcm9wQ2xpY2s6IHRydWUsXG4gICAgICAgICAgYW5pbWF0ZWQ6IHRydWUsXG4gICAgICAgICAgaW5pdGlhbFN0YXRlOiBpbml0aWFsU3RhdGVcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudFJlZjogQWR2YW5jZWRTZWxlY3RDb21wb25lbnQgPSBtb2RhbFJlZi5jb250ZW50O1xuICAgICAgICBjb21wb25lbnRSZWYuZGlzbWlzcy5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgICAgIHJldHVybiByZXNvbHZlKHtcbiAgICAgICAgICAgIHJlc3VsdDogcmVzdWx0LFxuICAgICAgICAgICAgaXRlbXM6IChjb21wb25lbnRSZWYuYWR2YW5jZWRUYWJsZSAmJiBjb21wb25lbnRSZWYuYWR2YW5jZWRUYWJsZS5zZWxlY3RlZCkgYXMgYW55W11cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdChlcnIpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG4iLCJpbXBvcnQge0luamVjdGFibGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBSZXNvbHZlLCBSb3V0ZXJTdGF0ZVNuYXBzaG90fSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtIdHRwQ2xpZW50fSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBBZHZhbmNlZFRhYmxlQ29uZmlndXJhdGlvblJlc29sdmVyIGltcGxlbWVudHMgUmVzb2x2ZTxzdHJpbmc+IHtcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9odHRwOiBIdHRwQ2xpZW50KSB7fVxuICAgIHJlc29sdmUoXG4gICAgICAgIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LFxuICAgICAgICBzdGF0ZTogUm91dGVyU3RhdGVTbmFwc2hvdFxuICAgICk6IFByb21pc2U8YW55Pnxhbnkge1xuICAgICAgICAvLyBnZXQgbGlzdFxuICAgICAgICBjb25zdCBsaXN0ID0gcm91dGUuZGF0YS5saXN0IHx8IHJvdXRlLnBhcmFtcy5saXN0O1xuICAgICAgICAvLyBnZXQgbW9kZWxcbiAgICAgICAgY29uc3QgbW9kZWwgPSByb3V0ZS5kYXRhLm1vZGVsIHx8IHJvdXRlLnBhcmFtcy5tb2RlbDtcbiAgICAgICAgLy8gZ2V0IGNvbmZpZ3VyYXRpb25cbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHAuZ2V0KGBhc3NldHMvbGlzdHMvJHttb2RlbH0vJHtsaXN0fS5qc29uYCkudG9Qcm9taXNlKCk7XG4gICAgfVxufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQWR2YW5jZWRTZWFyY2hDb25maWd1cmF0aW9uUmVzb2x2ZXIgaW1wbGVtZW50cyBSZXNvbHZlPHN0cmluZz4ge1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgX2h0dHA6IEh0dHBDbGllbnQpIHt9XG4gICAgcmVzb2x2ZShcbiAgICAgICAgcm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsXG4gICAgICAgIHN0YXRlOiBSb3V0ZXJTdGF0ZVNuYXBzaG90XG4gICAgKTogUHJvbWlzZTxhbnk+fGFueSB7XG4gICAgICAgIC8vIGdldCBsaXN0XG4gICAgICAgIGNvbnN0IGxpc3QgPSByb3V0ZS5kYXRhLmxpc3QgfHwgcm91dGUucGFyYW1zLmxpc3Q7XG4gICAgICAgIC8vIGdldCBtb2RlbFxuICAgICAgICBjb25zdCBtb2RlbCA9IHJvdXRlLmRhdGEubW9kZWwgfHwgcm91dGUucGFyYW1zLm1vZGVsO1xuICAgICAgICAvLyBnZXQgY29uZmlndXJhdGlvblxuICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5nZXQoYGFzc2V0cy9saXN0cy8ke21vZGVsfS9zZWFyY2guJHtsaXN0fS5qc29uYCkudG9Qcm9taXNlKCk7XG4gICAgfVxufVxuIiwiaW1wb3J0IHtcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIENvbXBvbmVudCxcclxuICBFbGVtZW50UmVmLFxyXG4gIElucHV0LFxyXG4gIE9uSW5pdCxcclxuICBUZW1wbGF0ZVJlZixcclxuICBWaWV3Q2hpbGQsXHJcbiAgVmlld0VuY2Fwc3VsYXRpb25cclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQWR2YW5jZWRUYWJsZUNvbXBvbmVudCB9IGZyb20gJy4vYWR2YW5jZWQtdGFibGUuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBBbmd1bGFyRGF0YUNvbnRleHQgfSBmcm9tICdAdGhlbW9zdC9hbmd1bGFyJztcclxuaW1wb3J0IHsgQnNNb2RhbFNlcnZpY2UsIEJzTW9kYWxSZWYgfSBmcm9tICduZ3gtYm9vdHN0cmFwL21vZGFsJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkVGFibGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vdGFibGVzLmFjdGl2YXRlZC10YWJsZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVXNlclN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnQHVuaXZlcnNpcy9jb21tb24nO1xyXG5pbXBvcnQgeyBGb3JtQXJyYXksIEZvcm1CdWlsZGVyLCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBWYWxpZGF0b3JGbiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpjb21wb25lbnQtc2VsZWN0b3JcclxuICBzZWxlY3RvcjogJ2FwcC1hZHZhbmNlZC10YWJsZS1zZXR0aW5ncycsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2FkdmFuY2VkLXRhYmxlLXNldHRpbmdzLmNvbXBvbmVudC5odG1sJyxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXHJcbn0pXHJcblxyXG5leHBvcnQgY2xhc3MgQWR2YW5jZWRUYWJsZVNldHRpbmdzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0IHtcclxuXHJcbiAgQElucHV0KCkgdGFibGU/OiBBZHZhbmNlZFRhYmxlQ29tcG9uZW50O1xyXG4gIEBWaWV3Q2hpbGQoJ21vZGFsX3NldHRpbmdzX3RlbXBsYXRlJykgbW9kYWxfc2V0dGluZ3NfdGVtcGxhdGU/OiBFbGVtZW50UmVmO1xyXG4gIG1vZGFsUmVmPzogQnNNb2RhbFJlZjtcclxuICBzdG9yYWdlS2V5OiBhbnk7XHJcbiAgcGFyYW1zOiBhbnkgPSB0aGlzLl9hY3RpdmF0ZWRSb3V0ZS5wYXJhbXM7XHJcbiAgcHJpdmF0ZSBzYXZlZFRhYmxlU2V0dGluZ3M6IGFueTtcclxuICBmb3JtPzogRm9ybUdyb3VwO1xyXG4gIGNvbHVtbnM6IGFueVtdID0gW107XHJcbiAgdGFibGVDb2x1bW5zOiBhbnk7XHJcbiAgYWN0aXZlVGFibGVDb25maWc6IGFueTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIF9jb250ZXh0OiBBbmd1bGFyRGF0YUNvbnRleHQsXHJcbiAgICAgICAgICAgICAgcHJvdGVjdGVkIF9hY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICAgICAgICAgICAgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IEJzTW9kYWxTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgIHByaXZhdGUgdXNlclN0b3JhZ2U6IFVzZXJTdG9yYWdlU2VydmljZSxcclxuICAgICAgICAgICAgICBwcml2YXRlIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcixcclxuICAgICAgICAgICAgICBwcml2YXRlIF9hY3RpdmF0ZWRUYWJsZTogQWN0aXZhdGVkVGFibGVTZXJ2aWNlKSB7XHJcbiAgfVxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gIH1cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmFjdGl2ZVRhYmxlQ29uZmlnID0gdGhpcy5fYWN0aXZhdGVkVGFibGUuYWN0aXZlVGFibGUgJiYgdGhpcy5fYWN0aXZhdGVkVGFibGUuYWN0aXZlVGFibGUuZ2V0Q29uZmlnKCk7XHJcbiAgICB0aGlzLnN0b3JhZ2VLZXkgPSAncmVnaXN0cmFyL3NldHRpbmdzLycgKyB0aGlzLmFjdGl2ZVRhYmxlQ29uZmlnLnRpdGxlICsgJy90YWJsZS9jb2x1bW5zJztcclxuICAgIHRoaXMuZm9ybSA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe2NvbHVtbnM6IG5ldyBGb3JtQXJyYXkoW10sIHRoaXMubWluU2VsZWN0ZWRDb2x1bW5zKDEpKX0pO1xyXG4gICAgdGhpcy51c2VyU3RvcmFnZS5nZXRJdGVtKHRoaXMuc3RvcmFnZUtleSkudGhlbigoZGF0YSkgPT4ge1xyXG4gICAgICBpZiAoZGF0YSkge1xyXG4gICAgICAgIHRoaXMuc2F2ZWRUYWJsZVNldHRpbmdzID0gZGF0YS52YWx1ZTtcclxuICAgICAgICBpZiAodGhpcy5zYXZlZFRhYmxlU2V0dGluZ3MpIHtcclxuICAgICAgICAgIGlmICh0aGlzLl9hY3RpdmF0ZWRUYWJsZS5hY3RpdmVUYWJsZSkge1xyXG4gICAgICAgICAgICB0aGlzLl9hY3RpdmF0ZWRUYWJsZS5hY3RpdmVUYWJsZS5oYW5kbGVDb2x1bW5zKHRoaXMuc2F2ZWRUYWJsZVNldHRpbmdzKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5hZGRDaGVja2JveGVzKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuICBwcml2YXRlIGFkZENoZWNrYm94ZXMoKSB7XHJcbiAgICB0aGlzLnRhYmxlQ29sdW1ucyA9IHRoaXMuYWN0aXZlVGFibGVDb25maWcuY29sdW1ucy5zbGljZSgxKTtcclxuICAgIHRoaXMudGFibGVDb2x1bW5zLmZvckVhY2ggKChjb2x1bW4sIGkpID0+IHtcclxuICAgICAgaWYgKCFjb2x1bW4uaGlkZGVuKSB7XHJcbiAgICAgICAgY29uc3QgY29udHJvbCA9IHtcclxuICAgICAgICAgIGlkOiBjb2x1bW4ubmFtZSxcclxuICAgICAgICAgIG5hbWU6IGNvbHVtbi50aXRsZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5jb2x1bW5zLnB1c2goY29udHJvbCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgaWYgKHRoaXMuc2F2ZWRUYWJsZVNldHRpbmdzKSB7XHJcbiAgICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoICgoY29sdW1uLCBpKSA9PiB7XHJcbiAgICAgICAgY29sdW1uLmNoZWNrID0gZmFsc2U7XHJcbiAgICAgICAgY29sdW1uLmNoZWNrID0gdGhpcy5zYXZlZFRhYmxlU2V0dGluZ3MuaW5jbHVkZXMoY29sdW1uLmlkKTtcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuY29sdW1ucy5tYXAoKGNvbHVtbiwgaSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woY29sdW1uLmNoZWNrKTtcclxuICAgICAgICBpZiAodGhpcy5mb3JtKSB7XHJcbiAgICAgICAgICAodGhpcy5mb3JtLmNvbnRyb2xzLmNvbHVtbnMgYXMgRm9ybUFycmF5KS5wdXNoKGNvbnRyb2wpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvcGVuVGFibGVTZXR0aW5ncyh0YWJsZV9zZXR0aW5nc19tb2RhbDogVGVtcGxhdGVSZWY8YW55Pikge1xyXG4gICAgdGhpcy5tb2RhbFJlZiA9IHRoaXMubW9kYWxTZXJ2aWNlLnNob3codGFibGVfc2V0dGluZ3NfbW9kYWwpO1xyXG4gIH1cclxuXHJcbiAgc2F2ZVRhYmxlU2V0dGluZ3MoKSB7XHJcbiAgICBpZiAodGhpcy5mb3JtID09IG51bGwpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3Qgc2VsZWN0ZWRDb2x1bW5zSWRzID0gdGhpcy5mb3JtLnZhbHVlLmNvbHVtbnNcclxuICAgICAgLm1hcCgodiwgaSkgPT4gdiA/IHRoaXMuY29sdW1uc1tpXS5pZCA6IG51bGwpXHJcbiAgICAgIC5maWx0ZXIodiA9PiB2ICE9PSBudWxsKTtcclxuICAgIHRoaXMudXNlclN0b3JhZ2Uuc2V0SXRlbSh0aGlzLnN0b3JhZ2VLZXksIHNlbGVjdGVkQ29sdW1uc0lkcyk7XHJcbiAgICBpZiAodGhpcy5fYWN0aXZhdGVkVGFibGUuYWN0aXZlVGFibGUpIHtcclxuICAgICAgdGhpcy5fYWN0aXZhdGVkVGFibGUuYWN0aXZlVGFibGUuaGFuZGxlQ29sdW1ucyhzZWxlY3RlZENvbHVtbnNJZHMpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMubW9kYWxSZWYpIHtcclxuICAgICAgdGhpcy5tb2RhbFJlZi5oaWRlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkaXNtaXNzKCkge1xyXG4gICAgaWYgKHRoaXMubW9kYWxSZWYpIHtcclxuICAgICAgdGhpcy5tb2RhbFJlZi5oaWRlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBtaW5TZWxlY3RlZENvbHVtbnMobWluID0gMSkge1xyXG4gICAgY29uc3QgdmFsaWRhdG9yOiBWYWxpZGF0b3JGbiA9IChmb3JtQXJyYXk6IEZvcm1BcnJheSkgPT4ge1xyXG4gICAgICBjb25zdCB0b3RhbFNlbGVjdGVkID0gZm9ybUFycmF5LmNvbnRyb2xzXHJcbiAgICAgICAgLm1hcChjb250cm9sID0+IGNvbnRyb2wudmFsdWUpXHJcbiAgICAgICAgLnJlZHVjZSgocHJldiwgbmV4dCkgPT4gbmV4dCA/IHByZXYgKyBuZXh0IDogcHJldiwgMCk7XHJcblxyXG4gICAgICByZXR1cm4gdG90YWxTZWxlY3RlZCA+PSBtaW4gPyBudWxsIDogeyByZXF1aXJlZDogdHJ1ZSB9O1xyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gdmFsaWRhdG9yO1xyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQge0NvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBWaWV3Q2hpbGQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLCBFdmVudEVtaXR0ZXIsIEFmdGVyVmlld0luaXQsIFRlbXBsYXRlUmVmLCBPbkRlc3Ryb3l9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWR2YW5jZWRUYWJsZUNvbXBvbmVudCB9IGZyb20gJy4vYWR2YW5jZWQtdGFibGUuY29tcG9uZW50JztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgQW5ndWxhckRhdGFDb250ZXh0IH0gZnJvbSAnQHRoZW1vc3QvYW5ndWxhcic7XG5pbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBVc2VyU3RvcmFnZVNlcnZpY2UsIE1vZGFsU2VydmljZSwgRElBTE9HX0JVVFRPTlMgfSBmcm9tICdAdW5pdmVyc2lzL2NvbW1vbic7XG5pbXBvcnQgeyBCc01vZGFsU2VydmljZSwgQnNNb2RhbFJlZiB9IGZyb20gJ25neC1ib290c3RyYXAvbW9kYWwnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtBZHZhbmNlZEZpbHRlclZhbHVlUHJvdmlkZXJ9IGZyb20gJy4vYWR2YW5jZWQtZmlsdGVyLXZhbHVlLXByb3ZpZGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgQWR2YW5jZWRUYWJsZVNlYXJjaEJhc2VDb21wb25lbnQgfSBmcm9tICcuL2FkdmFuY2VkLXRhYmxlLXNlYXJjaC1iYXNlJztcbmltcG9ydCB7VGVtcGxhdGVQaXBlfSBmcm9tICdAdW5pdmVyc2lzL2NvbW1vbic7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFRleHRVdGlscyB9IGZyb20gJ0B0aGVtb3N0L2NsaWVudCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWR2YW5jZWRTZWFyY2hWaWV3U3RhdHVzIHtcbiAgYWR2YW5jZWRWaWV3OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFkdmFuY2VkU2VhcmNoTGlzdCB7XG4gIG5hbWU6IHN0cmluZztcbn1cblxuQENvbXBvbmVudCh7XG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogY29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnYXBwLWFkdmFuY2VkLXRhYmxlLXNlYXJjaCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9hZHZhbmNlZC10YWJsZS1zZWFyY2guY29tcG9uZW50Lmh0bWwnLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxufSlcblxuZXhwb3J0IGNsYXNzIEFkdmFuY2VkVGFibGVTZWFyY2hDb21wb25lbnQgZXh0ZW5kcyBBZHZhbmNlZFRhYmxlU2VhcmNoQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95ICB7XG5cbiAgcHJpdmF0ZSBxdWVyeVBhcmFtU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIGNvbmZpZ0NoYW5nZXNTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gIEBJbnB1dCgpIHB1YmxpYyB0YWJsZT86IEFkdmFuY2VkVGFibGVDb21wb25lbnQ7XG4gIEBJbnB1dCgpIHB1YmxpYyBjb2xsYXBzZWQgPSB0cnVlO1xuICBASW5wdXQoKSBwdWJsaWMgYWxsb3dTYXZlID0gdHJ1ZTtcbiAgQElucHV0KCkgcHVibGljIHNob3dNb3JlID0gdHJ1ZTtcbiAgQElucHV0KCkgcHVibGljIG1lcmdlUXVlcnlQYXJhbXMgPSBmYWxzZTtcbiAgQFZpZXdDaGlsZCgnc2VhcmNoVGV4dCcpIHB1YmxpYyBzZWFyY2hUZXh0OiBhbnk7XG4gIEBPdXRwdXQoJ3ZpZXdDaGFuZ2UnKSBwdWJsaWMgdmlld0NoYW5nZTogRXZlbnRFbWl0dGVyPEFkdmFuY2VkU2VhcmNoVmlld1N0YXR1cz4gPSBuZXcgRXZlbnRFbWl0dGVyPEFkdmFuY2VkU2VhcmNoVmlld1N0YXR1cz4oKTtcbiAgQE91dHB1dCgnbGlzdENoYW5nZScpIHB1YmxpYyBsaXN0Q2hhbmdlOiBFdmVudEVtaXR0ZXI8QWR2YW5jZWRTZWFyY2hMaXN0PiA9IG5ldyBFdmVudEVtaXR0ZXI8QWR2YW5jZWRTZWFyY2hMaXN0PigpO1xuICBwdWJsaWMgc2V0IHRleHQodmFsdWU6IHN0cmluZykge1xuICAgIGlmICh0aGlzLnNlYXJjaFRleHQpIHtcbiAgICAgIHRoaXMuc2VhcmNoVGV4dC5uYXRpdmVFbGVtZW50LnZhbHVlID0gdmFsdWU7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCB0ZXh0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICh0aGlzLnNlYXJjaFRleHQgJiYgdGhpcy5zZWFyY2hUZXh0Lm5hdGl2ZUVsZW1lbnQgJiYgdGhpcy5zZWFyY2hUZXh0Lm5hdGl2ZUVsZW1lbnQudmFsdWUpIGFzIHN0cmluZztcbiAgfVxuXG4gIHB1YmxpYyBtb2RhbFJlZj86IEJzTW9kYWxSZWY7XG4gIHB1YmxpYyBzdG9yYWdlS2V5OiBhbnk7XG4gIHB1YmxpYyBzdG9yYWdlVmFsdWU6IGFueTtcbiAgcHVibGljIHVzZXJTZWFyY2hMaXN0OiBhbnkgPSBbXTtcbiAgcHVibGljIHNlbGVjdGVkTGlzdDogYW55ID0gbnVsbDtcblxuICBjb25zdHJ1Y3RvciggcHJvdGVjdGVkIF9jb250ZXh0OiBBbmd1bGFyRGF0YUNvbnRleHQsXG4gICAgICAgICAgICAgICBwcm90ZWN0ZWQgX2FjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICAgICAgICAgICAgIHByb3RlY3RlZCBkYXRlUGlwZTogRGF0ZVBpcGUsXG4gICAgICAgICAgICAgICBwcml2YXRlIF9tb2RhbFNlcnZpY2U6IEJzTW9kYWxTZXJ2aWNlLFxuICAgICAgICAgICAgICAgcHJpdmF0ZSBfdXNlclN0b3JhZ2U6IFVzZXJTdG9yYWdlU2VydmljZSxcbiAgICAgICAgICAgICAgIHByaXZhdGUgX3RyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICAgICAgICAgICAgIHByaXZhdGUgX2FkdmFuY2VkU2VhcmNoVmFsdWVQcm92aWRlcjogQWR2YW5jZWRGaWx0ZXJWYWx1ZVByb3ZpZGVyLFxuICAgICAgICAgICAgICAgcHJpdmF0ZSBfdGVtcGxhdGU6IFRlbXBsYXRlUGlwZSxcbiAgICAgICAgICAgICAgIHByaXZhdGUgX3JvdXRlcjogUm91dGVyLFxuICAgICAgICAgICAgICAgcHJpdmF0ZSBfbW9kYWw6IE1vZGFsU2VydmljZSkgeyBzdXBlcigpOyB9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnRhYmxlID09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5jb25maWdDaGFuZ2VzU3Vic2NyaXB0aW9uID0gdGhpcy50YWJsZS5jb25maWdDaGFuZ2VzLnN1YnNjcmliZSgoY29uZmlnKSA9PiB7XG4gICAgICAgIGlmIChjb25maWcgPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBsb2FkIHVzZXIgc2VhcmNoZXNcbiAgICAgICAgdGhpcy5sb2FkVXNlclNlYXJjaExpc3QoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAvLyBpZiBzZWFyY2ggY29tcG9uZW50IG1lcmdlcyBxdWVyeSBwYXJhbXNcbiAgICAgICAgICAvLyAodXNlcyBxdWVyeVBhcmFtcyB0byBhcHBseSBmaWx0ZXIpXG4gICAgICAgICAgaWYgKHRoaXMubWVyZ2VRdWVyeVBhcmFtcykge1xuICAgICAgICAgICAgdGhpcy5xdWVyeVBhcmFtU3Vic2NyaXB0aW9uID0gdGhpcy5fYWN0aXZhdGVkUm91dGUucXVlcnlQYXJhbXMuc3Vic2NyaWJlKChxdWVyeVBhcmFtcykgPT4ge1xuICAgICAgICAgICAgICB0aGlzLmFwcGx5UXVlcnlQYXJhbXMocXVlcnlQYXJhbXMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcGxpZXMgcXVlcnkgZ2l2ZW4gYnkgdGhlIHF1ZXJ5UGFyYW1zIG9mIHRoZSBhY3RpdmF0ZWQgcm91dGVcbiAgICogQHBhcmFtIHF1ZXJ5UGFyYW1zXG4gICAqL1xuICBwcml2YXRlIGFwcGx5UXVlcnlQYXJhbXMocXVlcnlQYXJhbXM6IGFueSkge1xuICAgIGlmICh0aGlzLnRhYmxlID09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgdGFibGUgPSB0aGlzLnRhYmxlO1xuICAgIHRoaXMuZmlsdGVyID0ge307XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChxdWVyeVBhcmFtcywgJ3EnKSkge1xuICAgICAgLy8gc2V0IGNvbGxhcHNlZFxuICAgICAgdGhpcy5jb2xsYXBzZWQgPSB0cnVlO1xuICAgICAgLy8gc2VhcmNoIHRleHRcbiAgICAgIHRoaXMudGV4dCA9IHF1ZXJ5UGFyYW1zLnE7XG4gICAgICByZXR1cm4gdGFibGUuc2VhcmNoKHRoaXMudGV4dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudGV4dCA9ICcnO1xuICAgIH1cblxuICAgIGxldCBmaWx0ZXJQYXJhbXMgPSBPYmplY3QuYXNzaWduKHt9LCBxdWVyeVBhcmFtcyk7XG5cbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHF1ZXJ5UGFyYW1zLCAncycpKSB7XG4gICAgICAvLyBzZXQgY29sbGFwc2VkXG4gICAgICB0aGlzLmNvbGxhcHNlZCA9IGZhbHNlO1xuICAgICAgLy8gZmluZCB1c2VyIHNlYXJjaCBieSBuYW1lXG4gICAgICBpZiAodGhpcy51c2VyU2VhcmNoTGlzdCkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkTGlzdCA9IHRoaXMudXNlclNlYXJjaExpc3QuZmluZCgoaXRlbSkgPT4ge1xuICAgICAgICAgIHJldHVybiBpdGVtLm5hbWUgPT09IHF1ZXJ5UGFyYW1zLnM7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZExpc3QpIHtcbiAgICAgICAgICBmaWx0ZXJQYXJhbXMgPSB0aGlzLnNlbGVjdGVkTGlzdC5maWx0ZXI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3RlZExpc3QgPSBudWxsO1xuICAgIH1cblxuICAgIE9iamVjdC5rZXlzKGZpbHRlclBhcmFtcykuZmlsdGVyKChrZXkpID0+IHtcbiAgICAgIC8vIHNlYXJjaCBjcml0ZXJpYVxuICAgICAgaWYgKHRhYmxlLmNvbmZpZyAmJiB0YWJsZS5jb25maWcuY3JpdGVyaWEpIHtcbiAgICAgICAgcmV0dXJuIHRhYmxlLmNvbmZpZy5jcml0ZXJpYS5maW5kKChpdGVtKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGl0ZW0ubmFtZSA9PT0ga2V5O1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgIGxldCB2YWx1ZSA9IGZpbHRlclBhcmFtc1trZXldO1xuICAgICAgaWYgKFRleHRVdGlscy5pc051bWJlcih2YWx1ZSkpIHtcbiAgICAgICAgdmFsdWUgPSBwYXJzZUZsb2F0KGZpbHRlclBhcmFtc1trZXldKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmZpbHRlcltrZXldICE9PSB2YWx1ZSkge1xuICAgICAgICAvLyBzZXQgdmFsdWVcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMuZmlsdGVyLCBrZXksIHtcbiAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5maWx0ZXJba2V5XSAhPSBudWxsKSB7XG4gICAgICAgIHRoaXMuY29sbGFwc2VkID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBjYWxsIGZpbHRlckNoYW5nZSBldmVudCB0byBhcHBseSBjaGFuZ2UgdG8gYWR2YW5jZWQgc2VhcmNoIGNoaWxkcmVuXG4gICAgdGhpcy5maWx0ZXJDaGFuZ2UuZW1pdCh0aGlzLmZpbHRlcik7XG4gICAgLy8gYXBwbHkgcXVlcnlcbiAgICB0aGlzLmdldFF1ZXJ5KCkudGhlbigocXVlcnkpID0+IHtcbiAgICAgIC8vIGlmIHRhYmxlIHF1ZXJ5IGlzIG51bGxcbiAgICAgIGlmICh0YWJsZS5xdWVyeSA9PSBudWxsKSB7XG4gICAgICAgIC8vIHNldCBxdWVyeVxuICAgICAgICB0YWJsZS5xdWVyeSA9IHF1ZXJ5O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHF1ZXJ5ICE9IG51bGwgJiYgcXVlcnkuZ2V0UGFyYW1zKClbJyRmaWx0ZXInXSkge1xuICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IHF1ZXJ5LmdldFBhcmFtcygpO1xuICAgICAgICAgIC8vIG90aGVyd2lzZSBzZXQgZmlsdGVyIHBhcmFtc1xuICAgICAgICAgIHRhYmxlLnF1ZXJ5LnNldFBhcmFtKCckZmlsdGVyJywgcGFyYW1zLiRmaWx0ZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRhYmxlLnF1ZXJ5LnNldFBhcmFtKCckZmlsdGVyJywgbnVsbCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIGFuZCBmaW5hbGx5IGZldGNoIGRhdGFcbiAgICAgIHRhYmxlLmZldGNoKHRydWUpO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnF1ZXJ5UGFyYW1TdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMucXVlcnlQYXJhbVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5jb25maWdDaGFuZ2VzU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLmNvbmZpZ0NoYW5nZXNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuXG4gIH1cblxuICBwdWJsaWMgb25TZWFyY2hLZXlEb3duKGV2ZW50OiBhbnkpIHtcbiAgICBpZiAodGhpcy50YWJsZSAmJiBldmVudC5rZXlDb2RlID09PSAxMykge1xuICAgICAgLy8gZ2V0IHNlYXJjaCB0ZXh0XG4gICAgICBjb25zdCBzZWFyY2hUZXh0ID0gKCBldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWU7XG4gICAgICAvLyBtZXJnZSBxdWVyeSBwYXJhbXMgP1xuICAgICAgaWYgKHRoaXMubWVyZ2VRdWVyeVBhcmFtcykge1xuICAgICAgICBjb25zdCBxdWVyeVBhcmFtcyA9IHtcbiAgICAgICAgICBxOiBzZWFyY2hUZXh0LFxuICAgICAgICB9O1xuICAgICAgICBpZiAodGhpcy50YWJsZS5jb25maWcgJiYgdGhpcy50YWJsZS5jb25maWcuY3JpdGVyaWEpIHtcbiAgICAgICAgICB0aGlzLnRhYmxlLmNvbmZpZy5jcml0ZXJpYS5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocXVlcnlQYXJhbXMsIGl0ZW0ubmFtZSwge1xuICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBudWxsLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyB0cnkgdG8gYXBwbHkgZmlsdGVyIGJ5IGFwcGVuZGluZyBxdWVyeSBwYXJhbXNcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JvdXRlci5uYXZpZ2F0ZShbXSwge1xuICAgICAgICAgIHJlbGF0aXZlVG86IHRoaXMuX2FjdGl2YXRlZFJvdXRlLFxuICAgICAgICAgIHF1ZXJ5UGFyYW1zLFxuICAgICAgICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6ICdtZXJnZScsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgdGhpcy5maWx0ZXJDaGFuZ2UuZW1pdCh7XG4gICAgICAgIHE6IHNlYXJjaFRleHRcbiAgICAgIH0pO1xuICAgICAgLy8gb3RoZXJ3aXNlIGRvIHNlYXJjaFxuICAgICAgdGhpcy50YWJsZS5zZWFyY2goc2VhcmNoVGV4dCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHRyYW5zZm9ybURhdGUoZGF0ZSkge1xuICAgIGRhdGUgPSB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShkYXRlLCAnTU0vZGQveXl5eScpOyAvLyB3aGF0ZXZlciBmb3JtYXQgeW91IG5lZWQuXG4gICAgcmV0dXJuIGRhdGU7XG4gIH1cblxuICBwdWJsaWMgY29udmVydFRvU3RyaW5nKG5hbWVGaWx0ZXIpIHtcbiAgICBsZXQgbmFtZSA9ICcnO1xuICAgIGlmIChuYW1lRmlsdGVyICE9IG51bGwpIHtcbiAgICAgIG5hbWUgPSBuYW1lRmlsdGVyLnRvU3RyaW5nKCk7XG4gICAgfVxuICAgIHJldHVybiBuYW1lO1xuICB9XG5cbi8vICBMb2FkIHNhdmVkIGNyaXRlcmlhIHNlYXJjaGVzIHVzZXIgaGFzIHN0b3JlZCBiZWZvcmVcbiAgcHJpdmF0ZSBsb2FkVXNlclNlYXJjaExpc3QoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMudGFibGUgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH1cbiAgICB0aGlzLnN0b3JhZ2VLZXkgPSAndGFibGVzLycgKyB0aGlzLnRhYmxlLmNvbmZpZy5tb2RlbCArICcvc2VhcmNoZXMnO1xuICAgIHJldHVybiB0aGlzLl91c2VyU3RvcmFnZS5nZXRJdGVtKHRoaXMuc3RvcmFnZUtleSkudGhlbigoZGF0YSkgPT4ge1xuICAgICAgY29uc3QgbGlzdCA9IGRhdGEudmFsdWUgfHwgW107XG4gICAgICAvLyBpZiB0YWJsZSBjb25maWd1cmF0aW9uIGhhcyBwcmUtZGVmaW5lZCBzZWFyY2hlc1xuICAgICAgaWYgKHRoaXMudGFibGUgJiYgdGhpcy50YWJsZS5jb25maWcuc2VhcmNoZXMgJiYgdGhpcy50YWJsZS5jb25maWcuc2VhcmNoZXMubGVuZ3RoKSB7XG4gICAgICAgIC8vIGFkZCBwcmUtZGVmaW5lZCBsaXN0c1xuICAgICAgICBsaXN0LnB1c2guYXBwbHkobGlzdCwgdGhpcy50YWJsZS5jb25maWcuc2VhcmNoZXMubWFwICggKHgpID0+IHtcbiAgICAgICAgICB4LnJlYWRPbmx5ID0gdHJ1ZTsgLy8gYXMgcmVhZG9ubHlcbiAgICAgICAgICB4Lm5hbWUgPSB0aGlzLl90cmFuc2xhdGUuaW5zdGFudCh4Lm5hbWUpO1xuICAgICAgICAgIHJldHVybiB4O1xuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgICAvLyBzZXQgdXNlciBzZWFyY2ggbGlzdFxuICAgICAgdGhpcy51c2VyU2VhcmNoTGlzdCA9IGxpc3Q7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgLy8gRE8gTk9UIFRIUk9XIEVSUk9SXG4gICAgICAvLyB0b2RvOiBub3RpZnkgY29tcG9uZW50IGZvciB0aGlzIGVycm9yIGluIG9yZGVyIHRvIGRpc2FibGUgc29tZSBhY3Rpb25zXG4gICAgICBjb25zb2xlLmVycm9yKCdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBnZXR0aW5nIHVzZXIgc2VhcmNoIGxpc3QnKTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBvblNlbGVjdFVzZXJTZWFyY2goZXZlbnQ6IGFueSk6IGFueSB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRMaXN0ICYmIHRoaXMudGFibGUpIHtcbiAgICAgIGNvbnN0IGxpc3RGb3VuZCA9IHRoaXMuc2VhcmNoSW5MaXN0QnlOYW1lKHRoaXMuc2VsZWN0ZWRMaXN0Lm5hbWUpO1xuICAgICAgaWYgKGxpc3RGb3VuZCkge1xuICAgICAgICBpZiAodGhpcy5tZXJnZVF1ZXJ5UGFyYW1zKSB7XG4gICAgICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSB7IHE6IG51bGwsIHM6IHRoaXMuc2VsZWN0ZWRMaXN0Lm5hbWUgfTtcbiAgICAgICAgICAvLyBjbGVhciBjcml0ZXJpYSBpZiBhbnlcbiAgICAgICAgICB0aGlzLnRhYmxlLmNvbmZpZy5jcml0ZXJpYS5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHF1ZXJ5UGFyYW1zLCBpdGVtLm5hbWUpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAvLyBzZXQgbnVsbCB2YWx1ZVxuICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocXVlcnlQYXJhbXMsIGl0ZW0ubmFtZSwge1xuICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBudWxsLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gdGhpcy5fcm91dGVyLm5hdmlnYXRlKFtdLCB7XG4gICAgICAgICAgICByZWxhdGl2ZVRvOiB0aGlzLl9hY3RpdmF0ZWRSb3V0ZSxcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zLFxuICAgICAgICAgICAgcXVlcnlQYXJhbXNIYW5kbGluZzogJ21lcmdlJyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbGVjdGVkTGlzdCA9IGxpc3RGb3VuZDtcbiAgICAgICAgdGhpcy5maWx0ZXIgPSB0aGlzLnNlbGVjdGVkTGlzdC5maWx0ZXI7XG4gICAgICAgIHRoaXMuZmlsdGVyQ2hhbmdlLmVtaXQodGhpcy5maWx0ZXIpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuX3JvdXRlci5uYXZpZ2F0ZShbXSwge1xuICAgICAgICByZWxhdGl2ZVRvOiB0aGlzLl9hY3RpdmF0ZWRSb3V0ZSxcbiAgICAgICAgcXVlcnlQYXJhbXM6IHsgczogbnVsbCB9LFxuICAgICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nOiAnbWVyZ2UnLFxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBzZWFyY2hJbkxpc3RCeU5hbWUobmFtZTogc3RyaW5nKTogYW55IHtcbiAgICBpZiAoIEFycmF5LmlzQXJyYXkodGhpcy51c2VyU2VhcmNoTGlzdCkgKSB7XG4gICAgICBjb25zdCBsaXN0Rm91bmQgPSB0aGlzLnVzZXJTZWFyY2hMaXN0LmZpbmQoICh4KSA9PiB4Lm5hbWUgPT09IG5hbWUpO1xuICAgICAgaWYgKCBsaXN0Rm91bmQgKSB7XG4gICAgICAgIHJldHVybiBsaXN0Rm91bmQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbi8vICBVcGRhdGUgbGlzdCBpdGVtIGNvbnRlbnRzIHdpdGggZ2l2ZW4gY29udGVudCAoU2VhcmNoIGJ5IG9iamVjdCBuYW1lIHByb3BlcnR5KVxuICBwdWJsaWMgdXBkYXRlU2F2ZWRTZWFyY2hMaXN0SXRlbUJ5TmFtZSggbmFtZTogc3RyaW5nLCBuZXdJdGVtOiBhbnkgKSB7XG4gICAgY29uc3QgaXRlbUluTGlzdCA9IHRoaXMudXNlclNlYXJjaExpc3QuZmluZCggKHgpID0+IHgubmFtZSA9PT0gbmFtZSApO1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy51c2VyU2VhcmNoTGlzdC5pbmRleE9mKGl0ZW1Jbkxpc3QpO1xuICAgIHRoaXMudXNlclNlYXJjaExpc3RbaW5kZXhdID0gbmV3SXRlbTtcbiAgICB0aGlzLnNlbGVjdGVkTGlzdCA9IHRoaXMudXNlclNlYXJjaExpc3RbaW5kZXhdO1xuICB9XG5cbi8vICBVcGRhdGUgbGlzdCBpdGVtIGNvbnRlbnRzIHdpdGggZ2l2ZW4gY29udGVudCAoU2VhcmNoIGJ5IG9iamVjdClcbiAgcHVibGljIHVwZGF0ZVNhdmVkU2VhcmNoTGlzdEl0ZW1CeU9iamVjdCggaXRlbUluTGlzdDogYW55LCBuZXdJdGVtOiBhbnkgKSB7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLnVzZXJTZWFyY2hMaXN0LmluZGV4T2YoaXRlbUluTGlzdCk7XG4gICAgdGhpcy51c2VyU2VhcmNoTGlzdFtpbmRleF0gPSBuZXdJdGVtO1xuICAgIHRoaXMuc2VsZWN0ZWRMaXN0ID0gdGhpcy51c2VyU2VhcmNoTGlzdFtpbmRleF07XG4gIH1cblxuLy8gIERlbGV0ZSBsaXN0IGl0ZW0gZnJvbSBsaXN0XG4gIHB1YmxpYyBkZWxldGVJdGVtRnJvbVNhdmVkU2VhcmNoTGlzdEJ5T2JqZWN0KCBpdGVtSW5MaXN0OiBhbnkpIHtcbiAgICB0aGlzLnVzZXJTZWFyY2hMaXN0ID0gdGhpcy51c2VyU2VhcmNoTGlzdC5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0gIT09IGl0ZW1Jbkxpc3QpO1xuICAgIHRoaXMuc2VsZWN0ZWRMaXN0ID0gbnVsbDtcbiAgICB0aGlzLmZpbHRlciA9IHt9O1xuICAgIHRoaXMuYWR2YW5jZWRTZWFyY2godHJ1ZSk7XG4gICAgdGhpcy51cGxvYWRMaXN0T25Vc2VyU3RvcmFnZSgpO1xuICB9XG5cbi8vICBVc2VyIGNob3NlIHRvIHNhdmUgaXRzIGFkdmFuY2VkIGZvcm0gc2VhcmNoIGNyaXRlcmlhXG4gIHB1YmxpYyBzYXZlU2VhcmNoKCB0ZW1wbGF0ZVRvTG9hZDogVGVtcGxhdGVSZWY8YW55PiwgbmV3TGlzdDogYm9vbGVhbiA9IHRydWUpIHtcbiAgICBpZiAodGhpcy50YWJsZSAmJiB0aGlzLnRhYmxlLmNvbmZpZy5tb2RlbCkge1xuLy8gICAgICBTZXQgdGhlIGNvcnJlc3BvbmRpbmcga2V5IHRvIGl0cyBsaXN0IGFuZCBzaG93IGEgY29uZmlybWF0aW9uIG1vZGFsIHdpbmRvd1xuICAgICAgdGhpcy5zdG9yYWdlS2V5ID0gYHRhYmxlcy8ke3RoaXMudGFibGUuY29uZmlnLm1vZGVsfS9zZWFyY2hlc2A7XG4gICAgICBpZiAodGhpcy5maWx0ZXIgJiYgT2JqZWN0LmtleXModGhpcy5maWx0ZXIpLmxlbmd0aCkge1xuLy8gICAgICBVc2VyIHdhbnRzIHRvIHNhdmUgYW4gZXhpc3RpbmcgbGlzdCBmcm9tIHRoZSBkcm9wZG93blxuICAgICAgICBpZiAoICFuZXdMaXN0ICYmIHRoaXMuc2VsZWN0ZWRMaXN0ICkge1xuICAgICAgICAgIGNvbnN0IG5ld0l0ZW0gPSB7IG5hbWUgOiAgdGhpcy5zZWxlY3RlZExpc3QubmFtZSwgZmlsdGVyIDogeyAuLi4gdGhpcy5maWx0ZXIgfSB9O1xuICAgICAgICAgIHRoaXMudXBkYXRlU2F2ZWRTZWFyY2hMaXN0SXRlbUJ5T2JqZWN0ICggdGhpcy5zZWxlY3RlZExpc3QsIG5ld0l0ZW0gKTtcbiAgICAgICAgICB0aGlzLnVwbG9hZExpc3RPblVzZXJTdG9yYWdlKCk7XG4vLyAgICAgIFVzZXIgd2FudHMgdG8gc2F2ZSBhIG5ldyBsaXN0XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5tb2RhbFJlZiA9IHRoaXMuX21vZGFsU2VydmljZS5zaG93KHRlbXBsYXRlVG9Mb2FkKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbi8vICAgICAgICBVc2VyIGRpZCBub3QgZGVmaW5lIGFueSBjcml0ZXJpYVxuICAgICAgICB0aGlzLl9tb2RhbC5zaG93V2FybmluZ0RpYWxvZyhcbiAgICAgICAgICB0aGlzLl90cmFuc2xhdGUuaW5zdGFudCgnQWR2YW5jZWRTZWFyY2guTW9kYWwuVGl0bGUnKSxcbiAgICAgICAgICB0aGlzLl90cmFuc2xhdGUuaW5zdGFudCgnQWR2YW5jZWRTZWFyY2guTW9kYWwuRW1wdHlDcml0ZXJpYUxpc3QnKSxcbiAgICAgICAgICBESUFMT0dfQlVUVE9OUy5Payk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX21vZGFsLnNob3dXYXJuaW5nRGlhbG9nKFxuICAgICAgICAgIHRoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KCdBZHZhbmNlZFNlYXJjaC5Nb2RhbC5UaXRsZScpLFxuICAgICAgICAgIHRoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KCdBZHZhbmNlZFNlYXJjaC5Nb2RhbC5Ob0xpc3REZWZpbmVkJyksXG4gICAgICAgICAgRElBTE9HX0JVVFRPTlMuT2spO1xuICAgIH1cbiAgfVxuXG4vLyAgVXNlciBBY2NlcHRlZCA9PiBTYXZlIGxpc3QgYW5kIENsb3NlIG1vZGFsXG4gIHB1YmxpYyBjb25maXJtTW9kYWwoIHNhdmVGb3JtTmFtZSApOiB2b2lkIHtcbi8vICAgIG5hbWUgZ2l2ZW4gYW5kIGxpc3QgbmFtZSBpcyB1bmlxdWVcbiAgICBpZiAoIHNhdmVGb3JtTmFtZSAmJiAhKHRoaXMuc2VhcmNoSW5MaXN0QnlOYW1lKHNhdmVGb3JtTmFtZSkpICkge1xuICAgICAgY29uc3QgbmV3SW5zZXJ0ZWRWYWx1ZSA9IHsgbmFtZSA6ICBzYXZlRm9ybU5hbWUsIGZpbHRlciA6IHsgLi4uIHRoaXMuZmlsdGVyIH0gfTtcbiAgICAgIGlmICggdGhpcy51c2VyU2VhcmNoTGlzdCAmJiB0aGlzLnVzZXJTZWFyY2hMaXN0Lmxlbmd0aCAhPT0gMCApIHtcbiAgICAgICAgdGhpcy51c2VyU2VhcmNoTGlzdC5wdXNoKG5ld0luc2VydGVkVmFsdWUpO1xuICAgICAgICB0aGlzLnN0b3JhZ2VWYWx1ZSA9IHRoaXMudXNlclNlYXJjaExpc3Q7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRMaXN0ID0gbmV3SW5zZXJ0ZWRWYWx1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc3RvcmFnZVZhbHVlID0gW25ld0luc2VydGVkVmFsdWVdO1xuICAgICAgICB0aGlzLnVzZXJTZWFyY2hMaXN0ID0gdGhpcy5zdG9yYWdlVmFsdWU7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRMaXN0ID0gbmV3SW5zZXJ0ZWRWYWx1ZTtcbiAgICAgIH1cbiAgICAgIHRoaXMudXBsb2FkTGlzdE9uVXNlclN0b3JhZ2UoKTtcbiAgICAgIGlmICh0aGlzLm1vZGFsUmVmKSB7XG4gICAgICAgIHRoaXMubW9kYWxSZWYuaGlkZSgpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIHNhdmVGb3JtTmFtZSAmJiAodGhpcy5zZWFyY2hJbkxpc3RCeU5hbWUoc2F2ZUZvcm1OYW1lKSkgKSB7XG4vLyAgICAgIFVzZXIgc2hvdWxkIGluc2VydCBhIGRpZmZlcmVudCBuYW1lIGNhdXNlIHRoaXMgb25lIGlzIGFscmVhZHkgaW4gdXNlXG4gICAgICBhbGVydCh0aGlzLl90cmFuc2xhdGUuaW5zdGFudCgnQWR2YW5jZWRTZWFyY2guTW9kYWwuVGl0bGVPbkxpc3RBbHJlYWR5Q3JlYXRlZCcpKTtcbiAgICB9IGVsc2Uge1xuLy8gICAgICBVc2VyIGRpZCBub3QgaW5zZXJ0IGFueSB0ZXh0XG4gICAgICBhbGVydCh0aGlzLl90cmFuc2xhdGUuaW5zdGFudCgnQWR2YW5jZWRTZWFyY2guTW9kYWwuVGl0bGVPblVzZXJFcnJvcicpKTtcbiAgICB9XG4gIH1cblxuLy8gIFVzZXIgZGVjbGluZWQgPT4gQ2xvc2UgbW9kYWxcbiAgcHVibGljIGNsb3NlTW9kYWwoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMubW9kYWxSZWYpIHtcbiAgICAgIHRoaXMubW9kYWxSZWYuaGlkZSgpO1xuICAgIH1cbiAgfVxuXG4vLyAgVXBsb2FkIHVzZXIncyBjcml0ZXJpYSBvbiBVc2VyIFN0b3JhZ2VcbiAgcHVibGljIHVwbG9hZExpc3RPblVzZXJTdG9yYWdlKCkge1xuICAgIHRoaXMuX3VzZXJTdG9yYWdlLnNldEl0ZW0odGhpcy5zdG9yYWdlS2V5LCB0aGlzLnVzZXJTZWFyY2hMaXN0LmZpbHRlcigoeCkgPT4ge1xuICAgICAgcmV0dXJuICF4LnJlYWRPbmx5O1xuICAgIH0pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBUaGlzIG1ldGhvZCBpcyBnb2luZyB0byBiZSBkZXByZWNhdGVkLiBVc2Ugc2VhcmNoKCkgbWV0aG9kIGluc3RlYWQuXG4gICAqIEBwYXJhbSBldmVudFxuICAgKi9cbiAgcHVibGljIGFzeW5jIGFzeW5jQWR2YW5jZWRTZWFyY2goZXZlbnQ/OiBhbnkpIHtcbiAgICBpZiAoIHRoaXMudGFibGUgJiYgdGhpcy50YWJsZS5jb25maWcgJiYgQXJyYXkuaXNBcnJheSh0aGlzLnRhYmxlLmNvbmZpZy5jcml0ZXJpYSkpIHtcbiAgICAgIGNvbnN0IHF1ZXJ5ID0gYXdhaXQgdGhpcy5nZXRRdWVyeSgpO1xuICAgICAgaWYgKHRoaXMubWVyZ2VRdWVyeVBhcmFtcykge1xuICAgICAgICB0aGlzLnNlbGVjdGVkTGlzdCA9IG51bGw7XG4gICAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0gT2JqZWN0LmFzc2lnbih7IHE6IG51bGwsIHM6IG51bGwgfSwgdGhpcy5maWx0ZXIpO1xuICAgICAgICAvLyBlbnVtZXJhdGUgY3JpdGVyaWFcbiAgICAgICAgdGhpcy50YWJsZS5jb25maWcuY3JpdGVyaWEuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocXVlcnlQYXJhbXMsIGl0ZW0ubmFtZSkgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAvLyBzZXQgbnVsbCB2YWx1ZVxuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHF1ZXJ5UGFyYW1zLCBpdGVtLm5hbWUsIHtcbiAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgdmFsdWU6IG51bGwsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5fcm91dGVyLm5hdmlnYXRlKFtdLCB7XG4gICAgICAgICAgcmVsYXRpdmVUbzogdGhpcy5fYWN0aXZhdGVkUm91dGUsXG4gICAgICAgICAgcXVlcnlQYXJhbXMsXG4gICAgICAgICAgcXVlcnlQYXJhbXNIYW5kbGluZzogJ21lcmdlJyxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnRhYmxlLnF1ZXJ5ICYmIHF1ZXJ5ICYmIHF1ZXJ5LmdldFBhcmFtcygpWyckZmlsdGVyJ10pIHtcbiAgICAgICAgdGhpcy50YWJsZS5xdWVyeS5zZXRQYXJhbSgnJGZpbHRlcicsIHF1ZXJ5LmdldFBhcmFtcygpWyckZmlsdGVyJ10pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy50YWJsZS5xdWVyeSA9IHF1ZXJ5O1xuICAgICAgfVxuICAgICAgdGhpcy5maWx0ZXJDaGFuZ2UuZW1pdCh0aGlzLmZpbHRlcik7XG4gICAgICB0aGlzLnRhYmxlLmZldGNoKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNlYXJjaCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5hc3luY0FkdmFuY2VkU2VhcmNoKCkudGhlbigoKSA9PiB7XG4gICAgICAvLyBkbyBub3RoaW5nXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0UXVlcnkoKSB7XG4gICAgLy8gb24gc2ltcGxlIHNlYXJjaCByZXR1cm4gbnVsbFxuICAgIGlmICh0aGlzLmNvbGxhcHNlZCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmICggdGhpcy50YWJsZSAmJiB0aGlzLnRhYmxlLmNvbmZpZyAmJiBBcnJheS5pc0FycmF5KHRoaXMudGFibGUuY29uZmlnLmNyaXRlcmlhKSkge1xuICAgICAgY29uc3QgZXhwcmVzc2lvbnM6IGFueVtdID0gW107XG4gICAgICBjb25zdCB2YWx1ZXMgPSBhd2FpdCB0aGlzLl9hZHZhbmNlZFNlYXJjaFZhbHVlUHJvdmlkZXIuZ2V0VmFsdWVzKCk7XG4gICAgICB0aGlzLnRhYmxlLmNvbmZpZy5jcml0ZXJpYS5mb3JFYWNoKCh4KSA9PiB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5maWx0ZXIsIHgubmFtZSkpIHtcbiAgICAgICAgICBjb25zdCBuYW1lRmlsdGVyID0gdGhpcy5jb252ZXJ0VG9TdHJpbmcodGhpcy5maWx0ZXJbeC5uYW1lXSk7XG4gICAgICAgICAgaWYgKG5hbWVGaWx0ZXIuaW5jbHVkZXMoJ0dNVCcpKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdEYXRlID0gdGhpcy50cmFuc2Zvcm1EYXRlKHRoaXMuZmlsdGVyW3gubmFtZV0pO1xuICAgICAgICAgICAgZXhwcmVzc2lvbnMucHVzaCh0aGlzLl90ZW1wbGF0ZS50cmFuc2Zvcm0oeC5maWx0ZXIsIHtcbiAgICAgICAgICAgICAgdmFsdWU6IG5ld0RhdGUsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmZpbHRlclt4Lm5hbWVdICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgZXhwcmVzc2lvbnMucHVzaCh0aGlzLl90ZW1wbGF0ZS50cmFuc2Zvcm0oeC5maWx0ZXIsIE9iamVjdC5hc3NpZ24oe1xuICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5maWx0ZXJbeC5uYW1lXSxcbiAgICAgICAgICAgIH0sIHZhbHVlcykpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgbGV0IHF1ZXJ5O1xuICAgICAgaWYgKGV4cHJlc3Npb25zICYmIGV4cHJlc3Npb25zLmxlbmd0aCkge1xuICAgICAgICAvLyBjcmVhdGUgY2xpZW50IHF1ZXJ5XG4gICAgICAgIHF1ZXJ5ID0gdGhpcy5fY29udGV4dC5tb2RlbCh0aGlzLnRhYmxlLmNvbmZpZy5tb2RlbCkuYXNRdWVyeWFibGUoKTtcbiAgICAgICAgcXVlcnkuc2V0UGFyYW0oJ2ZpbHRlcicsIGV4cHJlc3Npb25zLmpvaW4oJyBhbmQgJykpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcXVlcnkgPSB0aGlzLl9jb250ZXh0Lm1vZGVsKHRoaXMudGFibGUuY29uZmlnLm1vZGVsKS5hc1F1ZXJ5YWJsZSgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHF1ZXJ5O1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhZHZhbmNlZFNlYXJjaChldmVudDogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuYXN5bmNBZHZhbmNlZFNlYXJjaChldmVudCk7XG4gIH1cblxuICBwdWJsaWMgY2xlYXIoKSB7XG4gICAgaWYgKHRoaXMubWVyZ2VRdWVyeVBhcmFtcyAmJiB0aGlzLnRhYmxlKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRMaXN0ID0gbnVsbDtcbiAgICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSB7IHE6IG51bGwsIHM6IG51bGwgfTtcbiAgICAgICAgLy8gZW51bWVyYXRlIGNyaXRlcmlhXG4gICAgICAgIHRoaXMudGFibGUuY29uZmlnLmNyaXRlcmlhLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHF1ZXJ5UGFyYW1zLCBpdGVtLm5hbWUpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgLy8gc2V0IG51bGwgdmFsdWVcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShxdWVyeVBhcmFtcywgaXRlbS5uYW1lLCB7XG4gICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICAgIHZhbHVlOiBudWxsLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JvdXRlci5uYXZpZ2F0ZShbXSwge1xuICAgICAgICAgIHJlbGF0aXZlVG86IHRoaXMuX2FjdGl2YXRlZFJvdXRlLFxuICAgICAgICAgIHF1ZXJ5UGFyYW1zLFxuICAgICAgICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6ICdtZXJnZScsXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgIC8vIGNsZWFyIGZpbHRlclxuICAgICAgdGhpcy5maWx0ZXIgPSB7fTtcbiAgICAgIC8vIGNsZWFyIGxpc3RcbiAgICAgIHRoaXMuc2VsZWN0ZWRMaXN0ID0gbnVsbDtcbiAgICAgIC8vIHJhaXNlIGZpbHRlciBjaGFuZ2UgZXZlbnRcbiAgICAgIHRoaXMuZmlsdGVyQ2hhbmdlLmVtaXQodGhpcy5maWx0ZXIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSB2aWV3IHN0YXRlIG9mIHNlYXJjaCBjb250cm9sXG4gICAqL1xuICBwdWJsaWMgZ2V0IHZpZXdTdGF0ZSgpOiBBZHZhbmNlZFNlYXJjaFZpZXdTdGF0dXMge1xuICAgIHJldHVybiB7XG4gICAgICBhZHZhbmNlZFZpZXc6ICF0aGlzLmNvbGxhcHNlZCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFN3aXRjaGVzIHZpZXcgYmV0d2VlbiBzaW1wbGUgYW5kIGFkdmFuY2VkIHNlYXJjaFxuICAgKi9cbiAgcHVibGljIGFzeW5jIHRvZ2dsZVZpZXcoKSB7XG4gICAgdGhpcy5jb2xsYXBzZWQgPSAhdGhpcy5jb2xsYXBzZWQ7XG4gICAgLy8gZW1pdCBldmVudCBmb3IgdmlldyBzdGF0dXMgY2hhbmdlXG4gICAgdGhpcy52aWV3Q2hhbmdlLmVtaXQodGhpcy52aWV3U3RhdGUpO1xuICB9XG59XG4iLCJpbXBvcnQge1xuICBBY3Rpb25MaW5rRm9ybWF0dGVyLCBCdXR0b25Gb3JtYXR0ZXIsIERhdGVUaW1lRm9ybWF0dGVyLCBMYW5ndWFnZUZvcm1hdHRlcixcbiAgTGlua0Zvcm1hdHRlcixcbiAgTmVzdGVkUHJvcGVydHlGb3JtYXR0ZXIsIE5nQ2xhc3NGb3JtYXR0ZXIsIFNlbGVjdFJvd0Zvcm1hdHRlcixcbiAgVGVtcGxhdGVGb3JtYXR0ZXIsIFRyYW5zbGF0aW9uRm9ybWF0dGVyLFxuICBUcnVlRmFsc2VGb3JtYXR0ZXIsIEFjdGlvbkJ1dHRvbkZvcm1hdHRlciwgQWN0aW9uU3BsaXRCdXR0b25Gb3JtYXR0ZXIsXG59IGZyb20gJy4vYWR2YW5jZWQtdGFibGUuZm9ybWF0dGVycyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUFkdmFuY2VkVGFibGVGb3JtYXR0ZXJzIHtcbiAgQWN0aW9uTGlua0Zvcm1hdHRlcj86IEFjdGlvbkxpbmtGb3JtYXR0ZXI7XG4gIEJ1dHRvbkZvcm1hdHRlcj86IEJ1dHRvbkZvcm1hdHRlcjtcbiAgRGF0ZVRpbWVGb3JtYXR0ZXI/OiBEYXRlVGltZUZvcm1hdHRlcjtcbiAgTGFuZ3VhZ2VGb3JtYXR0ZXI/OiBMYW5ndWFnZUZvcm1hdHRlcjtcbiAgTGlua0Zvcm1hdHRlcj86IExpbmtGb3JtYXR0ZXI7XG4gIE5lc3RlZFByb3BlcnR5Rm9ybWF0dGVyPzogTmVzdGVkUHJvcGVydHlGb3JtYXR0ZXI7XG4gIE5nQ2xhc3NGb3JtYXR0ZXI/OiBOZ0NsYXNzRm9ybWF0dGVyO1xuICBTZWxlY3RSb3dGb3JtYXR0ZXI/OiBTZWxlY3RSb3dGb3JtYXR0ZXI7XG4gIFRlbXBsYXRlRm9ybWF0dGVyPzogVGVtcGxhdGVGb3JtYXR0ZXI7XG4gIFRyYW5zbGF0aW9uRm9ybWF0dGVyPzogVHJhbnNsYXRpb25Gb3JtYXR0ZXI7XG4gIFRydWVGYWxzZUZvcm1hdHRlcj86IFRydWVGYWxzZUZvcm1hdHRlcjtcbiAgQWN0aW9uQnV0dG9uRm9ybWF0dGVyPzogQWN0aW9uQnV0dG9uRm9ybWF0dGVyO1xuICBBY3Rpb25TcGxpdEJ1dHRvbkZvcm1hdHRlcj86IEFjdGlvblNwbGl0QnV0dG9uRm9ybWF0dGVyO1xufVxuZXhwb3J0IGNvbnN0IEZPUk1BVFRFUlM6IElBZHZhbmNlZFRhYmxlRm9ybWF0dGVycyA9IHtcbiAgICAgIEFjdGlvbkxpbmtGb3JtYXR0ZXI6IG5ldyBBY3Rpb25MaW5rRm9ybWF0dGVyKCksXG4gICAgICBCdXR0b25Gb3JtYXR0ZXI6IG5ldyBCdXR0b25Gb3JtYXR0ZXIoKSxcbiAgICAgIERhdGVUaW1lRm9ybWF0dGVyOiBuZXcgRGF0ZVRpbWVGb3JtYXR0ZXIoKSxcbiAgICAgIExhbmd1YWdlRm9ybWF0dGVyOiBuZXcgTGFuZ3VhZ2VGb3JtYXR0ZXIoKSxcbiAgICAgIExpbmtGb3JtYXR0ZXI6IG5ldyBMaW5rRm9ybWF0dGVyKCksXG4gICAgICBOZXN0ZWRQcm9wZXJ0eUZvcm1hdHRlcjogbmV3IE5lc3RlZFByb3BlcnR5Rm9ybWF0dGVyKCksXG4gICAgICBOZ0NsYXNzRm9ybWF0dGVyOiBuZXcgTmdDbGFzc0Zvcm1hdHRlcigpLFxuICAgICAgU2VsZWN0Um93Rm9ybWF0dGVyOiBuZXcgU2VsZWN0Um93Rm9ybWF0dGVyKCksXG4gICAgICBUZW1wbGF0ZUZvcm1hdHRlcjogbmV3IFRlbXBsYXRlRm9ybWF0dGVyKCksXG4gICAgICBUcmFuc2xhdGlvbkZvcm1hdHRlcjogbmV3IFRyYW5zbGF0aW9uRm9ybWF0dGVyKCksXG4gICAgICBUcnVlRmFsc2VGb3JtYXR0ZXI6IG5ldyBUcnVlRmFsc2VGb3JtYXR0ZXIoKSxcbiAgICAgIEFjdGlvbkJ1dHRvbkZvcm1hdHRlcjogbmV3IEFjdGlvbkJ1dHRvbkZvcm1hdHRlcigpLFxuICAgICAgQWN0aW9uU3BsaXRCdXR0b25Gb3JtYXR0ZXI6IG5ldyBBY3Rpb25TcGxpdEJ1dHRvbkZvcm1hdHRlcigpLFxufTtcbiIsImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgT25EZXN0cm95LCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFkdmFuY2VkVGFibGVDb21wb25lbnQsIEFkdmFuY2VkVGFibGVEYXRhUmVzdWx0IH0gZnJvbSAnLi4vYWR2YW5jZWQtdGFibGUvYWR2YW5jZWQtdGFibGUuY29tcG9uZW50JztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5AQ29tcG9uZW50KHtcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmNvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ3RhYmxlLXNpbXBsZS1oZWFkZXItdG9vbHMnLFxuICB0ZW1wbGF0ZTogYFxuICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gIGAsXG4gIHN0eWxlczogW11cbn0pXG5leHBvcnQgY2xhc3MgU2ltcGxlSGVhZGVyVG9vbHNDb21wb25lbnQge1xuICAvL1xufVxuXG5AQ29tcG9uZW50KHtcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmNvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ2FwcC10YWJsZS1zaW1wbGUtaGVhZGVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3RhYmxlLXNpbXBsZS1oZWFkZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZXM6IFtdXG59KVxuZXhwb3J0IGNsYXNzIFRhYmxlU2ltcGxlSGVhZGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIE9uQ2hhbmdlcyB7XG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlcy50YWJsZSkge1xuICAgICAgaWYgKGNoYW5nZXMudGFibGUuY3VycmVudFZhbHVlID09IG51bGwpIHtcbiAgICAgICAgaWYgKHRoaXMuZGF0YUxvYWRTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICB0aGlzLmRhdGFMb2FkU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dHJpcGxlLWVxdWFsc1xuICAgICAgaWYgKGNoYW5nZXMudGFibGUuY3VycmVudFZhbHVlICE9IGNoYW5nZXMudGFibGUucHJldmlvdXNWYWx1ZSkge1xuICAgICAgICB0aGlzLmRhdGFMb2FkU3Vic2NyaXB0aW9uID0gY2hhbmdlcy50YWJsZS5jdXJyZW50VmFsdWUubG9hZC5zdWJzY3JpYmUoKGRhdGE6IEFkdmFuY2VkVGFibGVEYXRhUmVzdWx0KSA9PiB7XG4gICAgICAgICAgdGhpcy5yZWNvcmRzVG90YWwgPSBkYXRhLnJlY29yZHNUb3RhbDtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRhdGFMb2FkU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLmRhdGFMb2FkU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgQElucHV0KCkgdGFibGU/OiBBZHZhbmNlZFRhYmxlQ29tcG9uZW50O1xuICBwdWJsaWMgcmVjb3Jkc1RvdGFsPzogbnVtYmVyO1xuICBwdWJsaWMgZGF0YUxvYWRTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gIGNvbnN0cnVjdG9yKCkgeyB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgLy9cbiAgfVxuXG59XG4iLCJpbXBvcnQge1xuICBEaXJlY3RpdmUsIE91dHB1dCwgRXZlbnRFbWl0dGVyLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFkdmFuY2VkVGFibGVDb21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnRzL2FkdmFuY2VkLXRhYmxlL2FkdmFuY2VkLXRhYmxlLmNvbXBvbmVudCc7XG5cbmV4cG9ydCBjbGFzcyBBZHZhbmNlZFRhYmxlTm90TnVsbEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcignQWR2YW5jZWQgdGFibGUgY29tcG9uZW50IGNhbm5vdCBiZSBlbXB0eSBhdCB0aGlzIGNvbnRleHQuJyk7XG4gIH1cbn1cblxuQERpcmVjdGl2ZShcbiB7XG4gICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IGRpcmVjdGl2ZS1zZWxlY3RvclxuICAgc2VsZWN0b3I6ICdbdGFibGVFZGl0b3JdJyxcbiB9LFxuKVxuZXhwb3J0IGNsYXNzIEFkdmFuY2VkVGFibGVFZGl0b3JEaXJlY3RpdmUge1xuXG4gIHB1YmxpYyBkaXJ0eSA9IGZhbHNlO1xuICBAT3V0cHV0KCkgcHVibGljIGRpcnR5Q2hhbmdlOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KGZhbHNlKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHRhYmxlOiBBZHZhbmNlZFRhYmxlQ29tcG9uZW50KSB7XG4gICAgLy9cbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgcm93cyB0byB0YWJsZSBhbmQgbWFyayB0aGVtIGFzIGFkZGVkIHJvd3NcbiAgICovXG4gIHB1YmxpYyBhZGQoLi4uYWRkSXRlbXM6IGFueVtdKSB7XG4gICAgaWYgKHRoaXMudGFibGUgPT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEFkdmFuY2VkVGFibGVOb3ROdWxsRXJyb3IoKTtcbiAgICB9XG4gICAgLy8gZGVjb3JhdGUgaXRlbXNcbiAgICBjb25zdCBrZXkgPSB0aGlzLnRhYmxlLmNvbmZpZy5jb2x1bW5zWzBdLnByb3BlcnR5IHx8IHRoaXMudGFibGUuY29uZmlnLmNvbHVtbnNbMF0ubmFtZSB8fCAnJztcbiAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgYWRkSXRlbXMpIHtcbiAgICAgIGxldCB0ciA9IHRoaXMudGFibGUuZGF0YVRhYmxlLnJvd3MoJzpoYXMoaW5wdXRbZGF0YS1pZD1cIicgKyBlbGVtZW50W2tleV0gKyAnXCJdKScpLm5vZGVzKCkudG8kKCk7XG4gICAgICBpZiAodHIuaGFzQ2xhc3MoJ3JlbW92ZWQnKSkge1xuICAgICAgICB0ci50b2dnbGVDbGFzcygncmVtb3ZlZCB0ZXh0LWdyYXktNDAwIHRleHQtZGVjb3JhdGlvbi1saW5lLXRocm91Z2gnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudGFibGUuZGF0YVRhYmxlLnJvd3MuYWRkKFtlbGVtZW50XSk7XG4gICAgICAgIHRyID0gdGhpcy50YWJsZS5kYXRhVGFibGUucm93cygnOmhhcyhpbnB1dFtkYXRhLWlkPVwiJyArIGVsZW1lbnRba2V5XSArICdcIl0pJykubm9kZXMoKS50byQoKTtcbiAgICAgICAgdHIudG9nZ2xlQ2xhc3MoJ2FkZGVkIGZvbnQtd2VpZ2h0LWJvbGQgdGV4dC1zdWNjZXNzJyk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMudGFibGUuZGF0YVRhYmxlLmRyYXcoKTtcbiAgICAvLyBmaW5kIHJlbW92ZWRcbiAgICBjb25zdCByZW1vdmVkTGVuZ3RoID0gdGhpcy50YWJsZS5kYXRhVGFibGUucm93cygnLnJlbW92ZWQnKVswXS5sZW5ndGg7XG4gICAgLy8gZmluZCBhZGRlZFxuICAgIGNvbnN0IGFkZGVkTGVuZ3RoID0gdGhpcy50YWJsZS5kYXRhVGFibGUucm93cygnLmFkZGVkJylbMF0ubGVuZ3RoO1xuICAgIC8vIGFuZCBlbWl0IGV2ZW50XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLnRhYmxlLmRhdGFUYWJsZS5yb3dzKCkuZGF0YSgpO1xuICAgIHRoaXMudGFibGUubG9hZC5lbWl0KHtcbiAgICAgIGRhdGE6IGl0ZW1zLFxuICAgICAgcmVjb3Jkc0ZpbHRlcmVkOiBpdGVtcy5sZW5ndGggLSByZW1vdmVkTGVuZ3RoLFxuICAgICAgcmVjb3Jkc1RvdGFsOiBpdGVtcy5sZW5ndGggLSByZW1vdmVkTGVuZ3RoLFxuICAgIH0pO1xuICAgIHRoaXMuZGlydHkgPSAocmVtb3ZlZExlbmd0aCA+IDAgfHwgYWRkZWRMZW5ndGggPiAwKTtcbiAgICB0aGlzLmRpcnR5Q2hhbmdlLmVtaXQodGhpcy5kaXJ0eSk7XG4gIH1cblxuICAvKipcbiAgICogTWFya3Mgcm93cyBhcyByZW1vdmVkIHJvd3NcbiAgICovXG4gIHB1YmxpYyByZW1vdmUoLi4ucmVtb3ZlSXRlbXM6IGFueVtdKSB7XG4gICAgaWYgKHRoaXMudGFibGUgPT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEFkdmFuY2VkVGFibGVOb3ROdWxsRXJyb3IoKTtcbiAgICB9XG4gICAgLy8gZ2V0IGtleVxuICAgIGNvbnN0IGtleSA9IHRoaXMudGFibGUuY29uZmlnLmNvbHVtbnNbMF0ucHJvcGVydHkgfHwgdGhpcy50YWJsZS5jb25maWcuY29sdW1uc1swXS5uYW1lIHx8ICcnO1xuICAgIC8vIGxvb3AgaXRlbXNcbiAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgcmVtb3ZlSXRlbXMpIHtcbiAgICAgICAgY29uc3QgdHIgPSB0aGlzLnRhYmxlLmRhdGFUYWJsZS5yb3dzKCc6aGFzKGlucHV0W2RhdGEtaWQ9XCInICsgZWxlbWVudFtrZXldICsgJ1wiXSknKS5ub2RlcygpLnRvJCgpO1xuICAgICAgICAvLyBpZiByb3cgaXMgbWFya2VkIGFzIGFkZGVkXG4gICAgICAgIGlmICh0ci5oYXNDbGFzcygnYWRkZWQnKSkge1xuICAgICAgICAgIC8vIHJlbW92ZSB0aGlzIGRpcnR5IHJvd1xuICAgICAgICAgIHRoaXMudGFibGUuZGF0YVRhYmxlLnJvd3ModHIpLnJlbW92ZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIG90aGVyd2lzZSB1bm1hcmtlZCByb3dcbiAgICAgICAgICB0ci50b2dnbGVDbGFzcygncmVtb3ZlZCB0ZXh0LWdyYXktNDAwIHRleHQtZGVjb3JhdGlvbi1saW5lLXRocm91Z2gnKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBjaGVjayBpZiBpdGVtIGlzIHNlbGVjdGVkXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkSW5kZXggPSB0aGlzLnRhYmxlLnNlbGVjdGVkLmZpbmRJbmRleCgoaXRlbSkgPT4ge1xuICAgICAgICAgIHJldHVybiBpdGVtW2tleV0gPT09IGVsZW1lbnRba2V5XTtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIGFuZCByZW1vdmUgaXQgZnJvbSBzZWxlY3RlZCBjb2xsZWN0aW9uXG4gICAgICAgIGlmIChzZWxlY3RlZEluZGV4ID49IDApIHtcbiAgICAgICAgICB0aGlzLnRhYmxlLnNlbGVjdGVkLnNwbGljZShzZWxlY3RlZEluZGV4LCAxKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gcmUtZHJhdyB0YWJsZVxuICAgIHRoaXMudGFibGUuZGF0YVRhYmxlLmRyYXcoKTtcbiAgICAgIC8vIGdldCBudW1iZXIgb2YgdGFibGUgaXRlbXNcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMudGFibGUuZGF0YVRhYmxlLnJvd3MoKS5kYXRhKCk7XG4gICAgICAvLyBnZXQgbnVtYmVyIG9mIHJlbW92ZWQgaXRlbXNcbiAgICBjb25zdCByZW1vdmVkTGVuZ3RoID0gdGhpcy50YWJsZS5kYXRhVGFibGUucm93cygnLnJlbW92ZWQnKVswXS5sZW5ndGg7XG4gICAgICAvLyBnZXQgbnVtYmVyIG9mIGFkZGVkIGl0ZW1zXG4gICAgY29uc3QgYWRkZWRMZW5ndGggPSB0aGlzLnRhYmxlLmRhdGFUYWJsZS5yb3dzKCcuYWRkZWQnKVswXS5sZW5ndGg7XG4gICAgICAvLyByZWZyZXNoXG4gICAgdGhpcy50YWJsZS5sb2FkLmVtaXQoe1xuICAgICAgICBkYXRhOiBpdGVtcyxcbiAgICAgICAgcmVjb3Jkc0ZpbHRlcmVkOiBpdGVtcy5sZW5ndGggLSByZW1vdmVkTGVuZ3RoLFxuICAgICAgICByZWNvcmRzVG90YWw6IGl0ZW1zLmxlbmd0aCAtIHJlbW92ZWRMZW5ndGgsXG4gICAgICB9KTtcbiAgICB0aGlzLmRpcnR5ID0gKHJlbW92ZWRMZW5ndGggPiAwIHx8IGFkZGVkTGVuZ3RoID4gMCk7XG4gICAgdGhpcy5kaXJ0eUNoYW5nZS5lbWl0KHRoaXMuZGlydHkpO1xuICB9XG5cbiAgcHVibGljIHNldChpdGVtczogYW55W10pIHtcbiAgICBpZiAodGhpcy50YWJsZSA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgQWR2YW5jZWRUYWJsZU5vdE51bGxFcnJvcigpO1xuICAgIH1cbiAgICAvLyBjbGVhciByb3dzXG4gICAgdGhpcy50YWJsZS5zZWxlY3RlZCA9IFtdO1xuICAgIHRoaXMudGFibGUuZGF0YVRhYmxlLmNsZWFyKCk7XG4gICAgLy8gc2V0IGl0ZW1zXG4gICAgdGhpcy50YWJsZS5kYXRhVGFibGUucm93cy5hZGQoaXRlbXMpLmRyYXcoKTtcbiAgICB0aGlzLnRhYmxlLmxvYWQuZW1pdCh7XG4gICAgICBkYXRhOiBpdGVtcyxcbiAgICAgIHJlY29yZHNGaWx0ZXJlZDogaXRlbXMubGVuZ3RoLFxuICAgICAgcmVjb3Jkc1RvdGFsOiBpdGVtcy5sZW5ndGgsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVW5kbyBjaGFuZ2VzXG4gICAqL1xuICBwdWJsaWMgdW5kbygpIHtcbiAgICBpZiAodGhpcy50YWJsZSA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgQWR2YW5jZWRUYWJsZU5vdE51bGxFcnJvcigpO1xuICAgIH1cbiAgICAvLyByZXNldCByZW1vdmVkIHJvd3NcbiAgICB0aGlzLnRhYmxlLmRhdGFUYWJsZS5yb3dzKCcucmVtb3ZlZCcpLm5vZGVzKCkudG8kKCkudG9nZ2xlQ2xhc3MoJ3JlbW92ZWQgdGV4dC1ncmF5LTQwMCB0ZXh0LWRlY29yYXRpb24tbGluZS10aHJvdWdoJyk7XG4gICAgLy8gcmVtb3ZlIGFkZGVkIHJvd3NcbiAgICB0aGlzLnRhYmxlLmRhdGFUYWJsZS5yb3dzKCcuYWRkZWQnKS5yZW1vdmUoKTtcbiAgICAvLyBjbGVhciBzZWxlY3RlZCBpdGVtc1xuICAgIHRoaXMudGFibGUuc2VsZWN0ZWQgPSBbXTtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMudGFibGUuZGF0YVRhYmxlLnJvd3MoKS5kYXRhKCk7XG4gICAgdGhpcy50YWJsZS5kYXRhVGFibGUuZHJhdygpO1xuICAgIHRoaXMudGFibGUubG9hZC5lbWl0KHtcbiAgICAgIGRhdGE6IGl0ZW1zLFxuICAgICAgcmVjb3Jkc0ZpbHRlcmVkOiBpdGVtcy5sZW5ndGgsXG4gICAgICByZWNvcmRzVG90YWw6IGl0ZW1zLmxlbmd0aCxcbiAgICB9KTtcbiAgICB0aGlzLmRpcnR5ID0gZmFsc2U7XG4gICAgdGhpcy5kaXJ0eUNoYW5nZS5lbWl0KHRoaXMuZGlydHkpO1xuICB9XG5cbiAgcHVibGljIHJvd3MoKSB7XG4gICAgaWYgKHRoaXMudGFibGUgPT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEFkdmFuY2VkVGFibGVOb3ROdWxsRXJyb3IoKTtcbiAgICB9XG4gICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy50YWJsZS5kYXRhVGFibGUucm93cygnOm5vdCgucmVtb3ZlZCknKS5kYXRhKCkpO1xuICB9XG5cbn1cbiIsImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFuZ3VsYXJEYXRhQ29udGV4dCB9IGZyb20gJ0B0aGVtb3N0L2FuZ3VsYXInO1xuaW1wb3J0IHsgVGVtcGxhdGVQaXBlIH0gZnJvbSAnQHVuaXZlcnNpcy9jb21tb24nO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBBZHZhbmNlZEFnZ3JlZ2F0b3JTZXJ2aWNlIHtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9jb250ZXh0OiBBbmd1bGFyRGF0YUNvbnRleHQsXG4gICAgcHJpdmF0ZSBfdGVtcGxhdGU6IFRlbXBsYXRlUGlwZVxuICApIHsgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBGb3JtYXRzIGFuZCBleGVjdXRlcyB0aGUgZGF0YSBxdWVyeVxuICAgKlxuICAgKiBAcGFyYW0gbW9kZWwgVGhlIHRhcmdldCBtb2RlbFxuICAgKiBAcGFyYW0gZml4ZWRQYXJhbXMgUGFpcnMgb2YgcGFyYW1ldGVycyB0byBhbHdheXMgYmUgYXBwbGllZFxuICAgKiBAcGFyYW0gcXVlcnlTdGF0ZW1lbnQgVGhlIGRlZmF1bHQgcXVlcnkgdG8gdXNlIGZvciBmZXRjaGluZyB0aGUgZGF0YSAoZS5nLiBleHBhbmRzIGV0YylcbiAgICogQHBhcmFtIGZpbHRlcnMgQSBsaXN0IG9mIGZpbHRlciBleHByZXNzaW9ucyB0byBhcHBlbmQgYXQgdGhlIHF1ZXJ5XG4gICAqIEBwYXJhbSBzZWFyY2hUZW1wbGF0ZSBUaGUgdGVtcGxhdGUgdG8gdXNlIGZvciBzZWFyY2hpbmcgZXhwcmVzc2lvbnNcbiAgICogQHBhcmFtIHNlYXJjaFZhbHVlIFRoZSB2YWx1ZSBvZiB0aGUgdXNlciBzZWFyY2hcbiAgICpcbiAgICogQHJldHVybnMgVGhlIHJlc3BvbnNlIG9mIHRoZSBxdWVyeSBleGVjdXRpb25cbiAgICovXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptYXgtbGluZS1sZW5ndGhcbiAgYXN5bmMgZmV0Y2hEYXRhKG1vZGVsOiBzdHJpbmcsIGZpeGVkUGFyYW1zOiBvYmplY3QsIHF1ZXJ5U3RhdGVtZW50OiBzdHJpbmcgPSAnJywgZmlsdGVyczogc3RyaW5nW10sIHNlYXJjaFRlbXBsYXRlPzogc3RyaW5nLCBzZWFyY2hWYWx1ZT86IHN0cmluZyk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3QgcXVlcnkgPSB0aGlzLl9jb250ZXh0Lm1vZGVsKG1vZGVsKS5hc1F1ZXJ5YWJsZSgpO1xuXG4gICAgaWYgKCFmaXhlZFBhcmFtcyB8fCB0eXBlb2YgZml4ZWRQYXJhbXMgIT09ICdvYmplY3QnKSB7XG4gICAgICBmaXhlZFBhcmFtcyA9IHt9O1xuICAgIH1cblxuICAgIGxldCBmaWx0ZXJFeHByZXNzaW9uczogYW55W10gPSBbXTtcblxuICAgIGlmIChmaXhlZFBhcmFtcykge1xuICAgICAgZm9yIChjb25zdCBwYXJhbSBvZiBPYmplY3Qua2V5cyhmaXhlZFBhcmFtcykpIHtcbiAgICAgICAgZmlsdGVyRXhwcmVzc2lvbnMucHVzaChgJHtwYXJhbX0gZXEgJHtmaXhlZFBhcmFtc1twYXJhbV19YCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGZpbHRlcnMgJiYgQXJyYXkuaXNBcnJheShmaWx0ZXJzKSkge1xuICAgICAgZmlsdGVyRXhwcmVzc2lvbnMgPSBbXG4gICAgICAgIC4uLmZpbHRlckV4cHJlc3Npb25zLFxuICAgICAgICAuLi5maWx0ZXJzXG4gICAgICBdO1xuICAgIH1cblxuICAgIGlmIChzZWFyY2hUZW1wbGF0ZSAmJiBzZWFyY2hWYWx1ZSkge1xuICAgICAgbGV0IGV2YWx1YXRlZFNlYXJjaDtcbiAgICAgIGlmICgvXlwiKC4qPylcIiQvLnRlc3Qoc2VhcmNoVmFsdWUpKSB7IC8vIHZhbGlkYXRlIHNlYXJjaCB0ZXh0IGluIGRvdWJsZSBxdW90ZXNcbiAgICAgICAgZXZhbHVhdGVkU2VhcmNoID0gdGhpcy5fdGVtcGxhdGUudHJhbnNmb3JtKHNlYXJjaFRlbXBsYXRlLCB7XG4gICAgICAgICAgLi4uZml4ZWRQYXJhbXMsXG4gICAgICAgICAgdGV4dDogc2VhcmNoVmFsdWUucmVwbGFjZSgvXlwifFwiJC9nLCAnJylcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyB0cnkgdG8gc3BsaXQgd29yZHNcbiAgICAgICAgY29uc3Qgd29yZHMgPSBzZWFyY2hWYWx1ZS5zcGxpdCgnICcpO1xuICAgICAgICAvLyBqb2luIHdvcmRzIHRvIGEgc2luZ2xlIGZpbHRlclxuICAgICAgICBldmFsdWF0ZWRTZWFyY2ggPSB3b3Jkcy5tYXAod29yZCA9PiB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuX3RlbXBsYXRlLnRyYW5zZm9ybShzZWFyY2hUZW1wbGF0ZSwge1xuICAgICAgICAgICAgLi4uZml4ZWRQYXJhbXMsXG4gICAgICAgICAgICB0ZXh0OiB3b3JkXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pLmpvaW4oJyBhbmQgJyk7XG5cbiAgICAgIH1cbiAgICAgIGZpbHRlckV4cHJlc3Npb25zLnB1c2goZXZhbHVhdGVkU2VhcmNoKTtcbiAgICB9XG5cbiAgICBxdWVyeS5zZXRQYXJhbSgnJGZpbHRlcicsIGZpbHRlckV4cHJlc3Npb25zLmpvaW4oJ2FuZCcpKTtcbiAgICByZXR1cm4gcXVlcnkuZXhwYW5kKHF1ZXJ5U3RhdGVtZW50KS50YWtlKC0xKS5nZXRJdGVtcygpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEZvcm1hdHMgdGhlIHJlY2VpdmVkIGRhdGEgdG8gdXNlIGZsYXQga2V5c1xuICAgKlxuICAgKiBAcGFyYW0gY29uZmlnIFRoZSBhcHBsaWVkIGNvbmZpZ3VyYXRpb25cbiAgICogQHBhcmFtIGRhdGEgVGhlIHJhdyBkYXRhXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBmbGF0LWtleSBvYmplY3QgbGlzdFxuICAgKlxuICAgKi9cbiAgZm9ybWF0RGF0YShjb25maWcsIGRhdGEpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGRhdGEubWFwKChlbnRyeSkgPT4ge1xuICAgICAgICBpZiAoZW50cnkuc3ViaXRlbXMgJiYgQXJyYXkuaXNBcnJheShlbnRyeS5zdWJpdGVtcykpIHtcbiAgICAgICAgICBlbnRyeS5zdWJpdGVtcyA9IHRoaXMuZm9ybWF0RGF0YShjb25maWcsIGVudHJ5LnN1Yml0ZW1zKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBlbnRyeU9iamVjdCA9IHt9IGFzIGFueTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb25maWcuY29sdW1ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGNvbnN0IGtleXMgPSBjb25maWcuY29sdW1uc1tpXS5uYW1lLnNwbGl0KCcvJyk7XG4gICAgICAgICAgbGV0IGhlbHBlck9iamVjdCA9IGVudHJ5W2tleXNbMF1dO1xuXG4gICAgICAgICAgaWYgKGhlbHBlck9iamVjdCAmJiBrZXlzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1zaGFkb3dlZC12YXJpYWJsZVxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgIGlmIChoZWxwZXJPYmplY3QgPT09IHVuZGVmaW5lZCB8fCBoZWxwZXJPYmplY3QgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBoZWxwZXJPYmplY3QgPSBoZWxwZXJPYmplY3Rba2V5c1tpXV0gIT09IHVuZGVmaW5lZCAmJiBoZWxwZXJPYmplY3Rba2V5c1tpXV0gIT09IG51bGxcbiAgICAgICAgICAgICAgICAgID8gaGVscGVyT2JqZWN0W2tleXNbaV1dXG4gICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGVudHJ5T2JqZWN0W2NvbmZpZy5jb2x1bW5zW2ldLm5hbWVdID0gaGVscGVyT2JqZWN0O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVudHJ5LnN1Yml0ZW1zKSB7XG4gICAgICAgICAgZW50cnlPYmplY3Quc3ViaXRlbXMgPSBlbnRyeS5zdWJpdGVtcztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBlbnRyeU9iamVjdDtcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgT25EZXN0cm95LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFkdmFuY2VkQWdncmVnYXRvclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hZHZhbmNlZC1hZ2dyZWdhdG9yL2FkdmFuY2VkLWFnZ3JlZ2F0b3Iuc2VydmljZSc7XG5pbXBvcnQgeyBBZHZhbmNlZEFnZ3JlZ2F0b3JDb25maWcsIEFkdmFuY2VkQWdncmVnYXRvckZpbHRlcnMgfSBmcm9tICcuLi8uLi9hZHZhbmNlZC1hZ2dyZWdhdG9yJztcbmltcG9ydCB7IExvYWRpbmdTZXJ2aWNlIH0gZnJvbSAnQHVuaXZlcnNpcy9jb21tb24nO1xuXG4vKipcbiAqXG4gKiBcbiAqICBAY2xhc3NkZXNjIEFuIGFkdmFuY2VkIGxpc3Qgd2l0aCB0aGUgY2FwYWJpbGl0eSBvZiBhZ2dyZWdhdGUgZGF0YSBiYXNlZCBvbiBjb25maWd1cmFibGUgZmlsdGVyc1xuICpcbiAqL1xuXG5AQ29tcG9uZW50KHtcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmNvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ2FwcC1hZHZhbmNlZC1hZ2dyZWdhdG9yJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2FkdmFuY2VkLWFnZ3JlZ2F0b3IuY29tcG9uZW50Lmh0bWwnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgQWR2YW5jZWRBZ2dyZWdhdG9yQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gIHByaXZhdGUgX2NvbmZpZz86IEFkdmFuY2VkQWdncmVnYXRvckNvbmZpZztcbiAgcHJpdmF0ZSBfYWdncmVnYXRvcnM7XG4gIHByaXZhdGUgX3Bvc3RQcm9jZXNzb3JzO1xuXG4gIHB1YmxpYyBib2R5O1xuICBwdWJsaWMgZ3JvdXBzOiBhbnlbXSA9IFtdO1xuXG4gIEBJbnB1dCgnY29uZmlnJylcbiAgcHVibGljIHNldCBjb25maWcodmFsdWU6IEFkdmFuY2VkQWdncmVnYXRvckNvbmZpZykge1xuICAgIHRoaXMuX2NvbmZpZyA9IHZhbHVlO1xuICB9XG5cbiAgQElucHV0KCdhZ2dyZWdhdG9ycycpXG4gIHB1YmxpYyBzZXQgYWdncmVnYXRvcnModmFsdWUpIHtcbiAgICB0aGlzLl9hZ2dyZWdhdG9ycyA9IHZhbHVlO1xuICB9XG5cbiAgQElucHV0KCdwb3N0UHJvY2Vzc29ycycpXG4gIHB1YmxpYyBzZXQgcG9zdFByb2Nlc3NvcnModmFsdWUpIHtcbiAgICB0aGlzLl9wb3N0UHJvY2Vzc29ycyA9IHZhbHVlO1xuICB9XG5cbiAgQElucHV0KCdwYXJhbXMnKSBwYXJhbXM7XG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1pbnB1dC1yZW5hbWVcbiAgQElucHV0KCdzZWxlY3RlZEdyb3VwcycpIHNlbGVjdGVkR3JvdXBzJDtcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWlucHV0LXJlbmFtZVxuICBASW5wdXQoJ2ZpbHRlcnMnKSBmaWx0ZXJzJDtcbiAgQElucHV0KCdzZWFyY2hFeHByZXNzaW9uJykgc2VhcmNoRXhwcmVzc2lvbj86IHN0cmluZztcblxuICBAT3V0cHV0KCkgZXZlbnRIYW5kbGVyID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgX2NoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIF9hZHZhbmNlZEFnZ3JlZ2F0b3JTZXJ2aWNlOiBBZHZhbmNlZEFnZ3JlZ2F0b3JTZXJ2aWNlLFxuICAgIHByaXZhdGUgX2xvYWRpbmdTZXJ2aWNlOiBMb2FkaW5nU2VydmljZVxuICApIHsgfVxuXG4gIHB1YmxpYyBnZXQgY29uZmlnKCkge1xuICAgIHJldHVybiB0aGlzLl9jb25maWcgYXMgQWR2YW5jZWRBZ2dyZWdhdG9yQ29uZmlnO1xuICB9XG5cbiAgcHVibGljIGdldCBhZ2dyZWdhdG9ycygpIHtcbiAgICByZXR1cm4gdGhpcy5fYWdncmVnYXRvcnM7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHBvc3RQcm9jZXNzb3JzKCkge1xuICAgIHJldHVybiB0aGlzLl9wb3N0UHJvY2Vzc29ycztcbiAgfVxuXG4gIGFzeW5jIG5nT25Jbml0KCkge1xuICAgIHRoaXMuc2VsZWN0ZWRHcm91cHMkLnN1YnNjcmliZSgoZGF0YSkgPT4ge1xuICAgICAgdGhpcy5ncm91cHMgPSBkYXRhO1xuICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmZpbHRlcnMkLnN1YnNjcmliZShhc3luYyAoZmlsdGVyczogQWR2YW5jZWRBZ2dyZWdhdG9yRmlsdGVycykgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5mZXRjaChmaWx0ZXJzKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnNlbGVjdGVkR3JvdXBzJC51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuZmlsdGVycyQudW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBSZXRyaWV2ZXMgdGhlIGRhdGFcbiAgICpcbiAgICovXG4gIGFzeW5jIGZldGNoKGZpbHRlcnM6IEFkdmFuY2VkQWdncmVnYXRvckZpbHRlcnMpIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5fbG9hZGluZ1NlcnZpY2Uuc2hvd0xvYWRpbmcoKTtcbiAgICAgIGxldCBkYXRhID0gYXdhaXQgdGhpcy5fYWR2YW5jZWRBZ2dyZWdhdG9yU2VydmljZS5mZXRjaERhdGEodGhpcy5jb25maWcubW9kZWwsXG4gICAgICAgIHRoaXMucGFyYW1zLFxuICAgICAgICB0aGlzLmNvbmZpZy5xdWVyeSxcbiAgICAgICAgZmlsdGVycy5maWx0ZXJzLFxuICAgICAgICB0aGlzLnNlYXJjaEV4cHJlc3Npb24sXG4gICAgICAgIGZpbHRlcnMudGV4dFxuICAgICAgKTtcblxuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1saW5lLWxlbmd0aFxuICAgICAgaWYgKHRoaXMucG9zdFByb2Nlc3NvcnMgJiYgT2JqZWN0LmtleXModGhpcy5wb3N0UHJvY2Vzc29ycykubGVuZ3RoID4gMCAmJiB0aGlzLmNvbmZpZy5wb3N0UHJvY2Vzc29ycyAmJiB0aGlzLmNvbmZpZy5wb3N0UHJvY2Vzc29ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jb25maWcucG9zdFByb2Nlc3NvcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBkYXRhID0gYXdhaXQgdGhpcy5wb3N0UHJvY2Vzc29yc1t0aGlzLmNvbmZpZy5wb3N0UHJvY2Vzc29yc1tpXS5uYW1lXShkYXRhKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLmJvZHkgPSB0aGlzLl9hZHZhbmNlZEFnZ3JlZ2F0b3JTZXJ2aWNlLmZvcm1hdERhdGEodGhpcy5jb25maWcsIGRhdGEpO1xuICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuX2xvYWRpbmdTZXJ2aWNlLmhpZGVMb2FkaW5nKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIFRyaWdnZXJzIHRoZSBldmVudCBoYW5kbGVyIGV2ZW50XG4gICAqXG4gICAqIEBwYXJhbSBldmVudCBUaGUgZXZlbnQgZGF0YVxuICAgKlxuICAgKi9cbiAgb25BY3Rpb25FdmVudChldmVudCkge1xuICAgIHRoaXMuZXZlbnRIYW5kbGVyLmVtaXQoZXZlbnQpO1xuICB9XG59XG4iLCJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUZW1wbGF0ZVBpcGV9IGZyb20gJ0B1bml2ZXJzaXMvY29tbW9uJztcblxuZW51bSBMZW5ndGhzIHtcbiAgWEw9ICd4bCcsXG4gIExHPSAnbGcnLFxuICBNRD0gJ21kJyxcbiAgU009ICdzbScsXG4gIFhTPSAneHMnXG59XG5cblxuQENvbXBvbmVudCh7XG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpjb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdhcHAtYWR2YW5jZWQtYWdncmVnYXRvci1saXN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2FkdmFuY2VkLWFnZ3JlZ2F0b3ItbGlzdC5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgQWR2YW5jZWRBZ2dyZWdhdG9yTGlzdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSB7QWR2YW5jZWRBZ2dyZWdhdG9yQ29uZmlnfSBjb25maWcgVGhlIGNvbmZpZ3VyYXRpb24gb2JqZWN0IHRvIHVzZVxuICAgKi9cbiAgQElucHV0KCkgY29uZmlnOiBhbnk7XG5cbiAgLyoqXG4gICAqIEBwcm9wZXJ0eSB7QXJyYXk8QXJyYXk8YW55Pj59IGJvZHkgVGhlIGxpc3Qgb2YgZGF0YSBlbnRyaWVzIHRvIHNob3cgYXMgdGhlIGxpc3QgYm9keVxuICAgKi9cbiAgQElucHV0KCkgYm9keTtcblxuICBAT3V0cHV0KCkgY2xpY2tFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF90ZW1wbGF0ZTogVGVtcGxhdGVQaXBlKSB7IH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmNvbmZpZy5jb2x1bW5zLmZvckVhY2goeCA9PiB7XG4gICAgICB4Lmxlbmd0aCA9IE9iamVjdC52YWx1ZXMoTGVuZ3RocykuaW5jbHVkZXMoeC5sZW5ndGgpID8gdGhpcy5fdGVtcGxhdGUudHJhbnNmb3JtKGBzaXMtLWxpc3QtZ3JvdXAtaXRlbV8ke3gubGVuZ3RofV9jb2x1bW5gLCB4ICkgOlxuICAgICAgICAheC5sZW5ndGggPyAnc2lzLS1saXN0LWdyb3VwLWl0ZW1fc21fY29sdW1uJyA6IHgubGVuZ3RoIDtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBUcmlnZ2VycyB0aGUgb3V0cHV0IGV2ZW50IGVtaXR0ZXJcbiAgICpcbiAgICogQHBhcmFtIHR5cGUgVGhlIHR5cGUgb2YgdGhlIGV2ZW50IGFzIGl0J3MgZGVjbGFyZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb25cbiAgICogQHBhcmFtIGl0ZW0gVGhlIHZhbHVlIG9mIHRoZSBjdXJyZW50IGl0ZW1cbiAgICogfVxuICAgKi9cbiAgY2FsbENhbGxiYWNrKHR5cGU6IHN0cmluZywgZGF0YTogYW55KTogdm9pZCB7XG4gICAgdGhpcy5jbGlja0V2ZW50LmVtaXQoe1xuICAgICAgdHlwZSxcbiAgICAgIGRhdGFcbiAgICB9KTtcbiAgfVxufVxuIiwiaW1wb3J0IHtDb21wb25lbnQsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgVmlld0NoaWxkfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Um91dGVyTW9kYWxPa0NhbmNlbH0gZnJvbSAnQHVuaXZlcnNpcy9jb21tb24vcm91dGluZyc7XG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlLCBSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge09ic2VydmFibGUsIFN1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0FkdmFuY2VkVGFibGVNb2RhbEJhc2VDb21wb25lbnR9IGZyb20gJy4uL2FkdmFuY2VkLXRhYmxlLW1vZGFsL2FkdmFuY2VkLXRhYmxlLW1vZGFsLWJhc2UuY29tcG9uZW50JztcbmltcG9ydCB7QWR2YW5jZWRGb3JtQ29tcG9uZW50fSBmcm9tICdAdW5pdmVyc2lzL2Zvcm1zJztcbmltcG9ydCB7TG9hZGluZ1NlcnZpY2UsIE1vZGFsU2VydmljZX0gZnJvbSAnQHVuaXZlcnNpcy9jb21tb24nO1xuXG5AQ29tcG9uZW50KHtcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmNvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ2FwcC1hZGQtaXRlbXMnLFxuICB0ZW1wbGF0ZVVybDogJy4vYWRkLWl0ZW1zLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBBZGRJdGVtc0NvbXBvbmVudCBleHRlbmRzIFJvdXRlck1vZGFsT2tDYW5jZWwgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cbiAgcHVibGljIGxvYWRpbmcgPSBmYWxzZTtcbiAgcHVibGljIGxhc3RFcnJvcjtcbiAgQElucHV0KCkgZXhlY3V0ZT86IE9ic2VydmFibGU8YW55PjtcbiAgQElucHV0KCkgaXRlbXM6IEFycmF5PGFueT4gPSBbXTtcbiAgQElucHV0KCkgdGFyZ2V0OiBhbnk7XG4gIC8vIEBJbnB1dCgpIHNlbGVjdGVkOiBhbnk7XG4gIEBJbnB1dCgpIHRhYmxlQ29uZmlndXJhdGlvbjogYW55O1xuICBASW5wdXQoKSBmb3JtTmFtZTogYW55O1xuICBASW5wdXQoKSBtZXNzYWdlczogQXJyYXk8YW55PiA9IFtdO1xuICBAVmlld0NoaWxkKCdmb3JtQ29tcG9uZW50JykgZm9ybUNvbXBvbmVudD86IEFkdmFuY2VkRm9ybUNvbXBvbmVudDtcbiAgQFZpZXdDaGlsZCgnc2VsZWN0Q29tcG9uZW50Jykgc2VsZWN0Q29tcG9uZW50PzogQWR2YW5jZWRUYWJsZU1vZGFsQmFzZUNvbXBvbmVudDtcbiAgcHJpdmF0ZSBmb3JtTG9hZFN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBmb3JtQ2hhbmdlU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIHNlbGVjdGVkU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKHJvdXRlcjogUm91dGVyLFxuICAgICAgICAgICAgICBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgICAgICAgICAgIHByaXZhdGUgX21vZGFsU2VydmljZTogTW9kYWxTZXJ2aWNlLFxuICAgICAgICAgICAgICBwcml2YXRlIF9sb2FkaW5nU2VydmljZTogTG9hZGluZ1NlcnZpY2UpIHtcbiAgICBzdXBlcihyb3V0ZXIsIGFjdGl2YXRlZFJvdXRlKTtcbiAgICAvLyBzZXQgbW9kYWwgc2l6ZVxuICAgIHRoaXMubW9kYWxDbGFzcyA9ICdtb2RhbC1sZyc7XG4gICAgdGhpcy5va0J1dHRvbkRpc2FibGVkID0gdHJ1ZTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGlmICh0aGlzLnNlbGVjdENvbXBvbmVudCAmJiB0aGlzLnNlbGVjdENvbXBvbmVudC5hZHZhbmNlZFRhYmxlKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkU3Vic2NyaXB0aW9uID0gdGhpcy5zZWxlY3RDb21wb25lbnQuYWR2YW5jZWRUYWJsZS5zZWxlY3RlZEl0ZW1zLnN1YnNjcmliZSgoaXRlbXMpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuZm9ybU5hbWUgPT0gbnVsbCkge1xuICAgICAgICAgIHRoaXMub2tCdXR0b25EaXNhYmxlZCA9IGl0ZW1zLmxlbmd0aCA9PT0gMDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmICh0aGlzLmZvcm1OYW1lICE9IG51bGwgJiYgdGhpcy5mb3JtQ29tcG9uZW50KSB7XG4gICAgICB0aGlzLmZvcm1DaGFuZ2VTdWJzY3JpcHRpb24gPSB0aGlzLmZvcm1Db21wb25lbnQuZm9ybS5jaGFuZ2Uuc3Vic2NyaWJlKChldmVudDogYW55KSA9PiB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZXZlbnQsICdpc1ZhbGlkJykpIHtcbiAgICAgICAgICAvLyBlbmFibGUgb3IgZGlzYWJsZSBidXR0b24gYmFzZWQgb24gZm9ybSBzdGF0dXNcbiAgICAgICAgICB0aGlzLm9rQnV0dG9uRGlzYWJsZWQgPSAoIWV2ZW50LmlzVmFsaWQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50YXJnZXQpIHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IHRoaXMudGFyZ2V0O1xuICAgIH1cbiAgfVxuXG4gIGNhbmNlbCgpOiBQcm9taXNlPGFueT4ge1xuICAgIHRoaXMuY2xlYXJNZXNzYWdlcygpO1xuICAgIGlmICh0aGlzLmxvYWRpbmcpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9XG4gICAgLy8gY2xvc2VcbiAgICBpZiAodGhpcy5fbW9kYWxTZXJ2aWNlLm1vZGFsUmVmKSB7XG4gICAgICByZXR1cm4gdGhpcy5fbW9kYWxTZXJ2aWNlLm1vZGFsUmVmLmhpZGUoKTtcbiAgICB9XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZm9ybUxvYWRTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuZm9ybUxvYWRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZm9ybUNoYW5nZVN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5mb3JtQ2hhbmdlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnNlbGVjdGVkU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgICAvLyBnZXQgZm9ybSBkYXRhXG4gIHByaXZhdGUgZXhlY3V0ZVN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcbiAgICBwdWJsaWMgZ2V0IGZvcm1EYXRhKCk6IGFueSB7XG4gICAgICBpZiAodGhpcy5mb3JtQ29tcG9uZW50ID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuZm9ybUNvbXBvbmVudCAmJiB0aGlzLmZvcm1Db21wb25lbnQuZm9ybS5mb3JtaW8uZGF0YTtcbiAgICB9XG5cbiAgICBvaygpOiBQcm9taXNlPGFueT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5jbGVhck1lc3NhZ2VzKCk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLnNlbGVjdENvbXBvbmVudCA9PSBudWxsIHx8IHRoaXMuc2VsZWN0Q29tcG9uZW50LmFkdmFuY2VkVGFibGUgPT0gbnVsbCB8fCB0aGlzLmV4ZWN1dGUgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUobnVsbCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMubGFzdEVycm9yID0gbnVsbDtcbiAgICAgICAgICAvLyBzZXQgY291cnNlc1xuICAgICAgICAgIHRoaXMuaXRlbXMgPSB0aGlzLnNlbGVjdENvbXBvbmVudC5hZHZhbmNlZFRhYmxlLnNlbGVjdGVkO1xuICAgICAgICAgIC8vIGV4ZWN1dGUgYWRkXG4gICAgICAgICAgdGhpcy5leGVjdXRlU3Vic2NyaXB0aW9uID0gdGhpcy5leGVjdXRlLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIGlmICh0aGlzLmV4ZWN1dGVTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgICAgdGhpcy5leGVjdXRlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBjbG9zZSBtb2RhbFxuICAgICAgICAgICAgaWYgKHRoaXMuX21vZGFsU2VydmljZS5tb2RhbFJlZikge1xuICAgICAgICAgICAgICB0aGlzLl9tb2RhbFNlcnZpY2UubW9kYWxSZWYuaGlkZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUobnVsbCk7XG4gICAgICAgICAgfSwgKGVycikgPT4ge1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAvLyBlbnN1cmUgdGhhdCBsb2FkaW5nIGlzIGhpZGRlblxuICAgICAgICAgICAgdGhpcy5fbG9hZGluZ1NlcnZpY2UuaGlkZUxvYWRpbmcoKTtcbiAgICAgICAgICAgIC8vIHNldCBsYXN0IGVycm9yXG4gICAgICAgICAgICB0aGlzLmxhc3RFcnJvciA9IGVycjtcbiAgICAgICAgICAgIHJldHVybiByZXNvbHZlKG51bGwpO1xuICAgICAgICAgIH0pO1xuICAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLl9sb2FkaW5nU2VydmljZS5oaWRlTG9hZGluZygpO1xuICAgICAgdGhpcy5sYXN0RXJyb3IgPSBlcnI7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfVxuICB9XG5cbiAgb25DaGFuZ2UoJGV2ZW50OiBhbnkpIHt9XG5cbiAgY2xlYXJNZXNzYWdlcygpIHtcbiAgICB0aGlzLm1lc3NhZ2VzID0gW107XG4gIH1cblxuICBvbkZpbHRlckNoYW5nZShldmVudDogIHsgbmFtZTogc3RyaW5nLCBlbWl0OiBib29sZWFuIH0pIHt9XG59XG4iLCJpbXBvcnQgeyBQaXBlLCBQaXBlVHJhbnNmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbi8qKlxuICpcbiAqXG4gKiBAY2xhc3NkZXNjIEdpdmVuIGEgbGlzdCBvZiBpdGVtcyBydW5zIGEgdXNlciBkZWZpbmVkIGZ1bmN0aW9uIGFnYWluc3QgdGhhdCBsaXN0XG4gKlxuICovXG5cbkBQaXBlKHtcbiAgbmFtZTogJ2NhbGxBZ2dyZWdhdG9yJ1xufSlcbmV4cG9ydCBjbGFzcyBBZHZhbmNlZEFnZ3JlZ2F0b3JQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG5cbiAgLyoqXG4gICAqXG4gICAqIEBvdmVycmlkZVxuICAgKlxuICAgKiBAcGFyYW0gaXRlbXMgVGhlIGxpc3Qgb2YgaXRlbXMgdG8gcnVuIHRoZSBhZ2dyZWdhdG9yIGFnYWluc3RcbiAgICogQHBhcmFtIGZ1bmN0aW9uUG9vbCBUaGUgZnVuY3Rpb25zIHRoYXQgYXJlIGF2YWlsYWJsZSBmcm9tIHRoZSBsaXN0IGNhbGxlclxuICAgKiBAcGFyYW0gZnVuY3Rpb25OYW1lIFRoZSBuYW1lIG9mIHRoZSBmdW5jdGlvbiB0byBiZSBjYWxsZWRcbiAgICpcbiAgICogQHJldHVybnMgVGhlIHZhbHVlIHRvIHNob3cgYXQgdGhlIFVJXG4gICAqXG4gICAqL1xuICB0cmFuc2Zvcm0oaXRlbXM6IGFueVtdLCBmdW5jdGlvblBvb2w6IGFueSwgZnVuY3Rpb25OYW1lOiBzdHJpbmcpOiBhbnkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGl0ZW1zKSAmJiBmdW5jdGlvbk5hbWUgJiYgZnVuY3Rpb25OYW1lIGluIGZ1bmN0aW9uUG9vbCkge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uUG9vbFtmdW5jdGlvbk5hbWVdKGl0ZW1zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICctJztcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7IFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcblxuLyoqXG4gKlxuICogXG4gKiBAY2xhc3NkZXNjIEdpdmVuIGEgdGl0bGUgb2YgYW4gYWdncmVnYXRvciBsaXN0LCB0cmFuc2xhdGVzIGFuZCBldmFsdWF0ZXMgdGhlIHBhcmFtZXRlciBpZiBhbnlcbiAqXG4gKi9cblxuQFBpcGUoe1xuICBuYW1lOiAnYWdncmVnYXRvckxpc3RUaXRsZSdcbn0pXG5leHBvcnQgY2xhc3MgUGFyc2VUaXRsZVBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF90cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlXG4gICkge31cblxuICAvKipcbiAgICpcbiAgICogQG92ZXJyaWRlXG4gICAqXG4gICAqIEBwYXJhbSB0aXRsZSBUaGUgdGl0bGUgb2YgdGhlIGxpc3RcbiAgICogQHBhcmFtIGtleSBUaGUgY3VycmVudCBsaXN0IGtleSB0aGF0IGlzIGJlaW5nIHVzZWRcbiAgICpcbiAgICovXG4gIHRyYW5zZm9ybSh0aXRsZTogc3RyaW5nLCBrZXk6IHN0cmluZyk6IGFueSB7XG4gICAgaWYgKCF0aXRsZSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoa2V5ID09PSB1bmRlZmluZWQgfHwga2V5ID09PSBudWxsIHx8IGtleSA9PT0gJ3VuZGVmaW5lZCcgfHwga2V5ID09PSAnbnVsbCcpIHtcbiAgICAgICAga2V5ID0gdGhpcy5fdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdUYWJsZXMuTm90RGVmaW5lZCcpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRpdGxlLnNwbGl0KCcgJylcbiAgICAgICAgLm1hcCgocGFydCkgPT4gdGhpcy5fdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KHBhcnQpKVxuICAgICAgICAubWFwKChwYXJ0KSA9PiBwYXJ0LnJlcGxhY2UoJyR7cGFyYW19Jywga2V5KSlcbiAgICAgICAgLmpvaW4oJyAnKTtcbiAgICB9XG4gIH1cbn1cbiIsIi8vIHRzbGludDpkaXNhYmxlOiBxdW90ZW1hcmtcbi8vIHRzbGludDpkaXNhYmxlOiBtYXgtbGluZS1sZW5ndGhcbmV4cG9ydCBjb25zdCBUQUJMRVNfRUwgPSB7XG4gICAgXCJUYWJsZXNcIjoge1xuICAgICAgICBcIkV4cG9ydFwiOiBcIs6Vzr7Osc6zz4nOs86uXCIsXG4gICAgICAgIFwiTW9yZVwiOiBcIs6gzrXPgc65z4PPg8+Mz4TOtc+BzrFcIixcbiAgICAgICAgXCJTZWFyY2hcIjogXCLOkc69zrHOts6uz4TOt8+DzrdcIixcbiAgICAgICAgXCJTZWFyY2hQbGFjZWhvbGRlclwiOiBcIs6Rzr3Osc62zq7PhM63z4POty4uLlwiLFxuICAgICAgICBcIkdyb3VwQnlcIjogXCLOn868zrHOtM6/z4DOv86vzrfPg863IM6xzr3OrFwiLFxuICAgICAgICBcIk5vdERlZmluZWRcIjogXCLOnM63IM+Az4HOv8+DzrTOuc6/z4HOuc+DzrzOrc69zr9cIixcbiAgICAgICAgXCJEYXRhVGFibGVcIjoge1xuICAgICAgICAgICAgXCJwYWdpbmF0ZVwiOiB7XG4gICAgICAgICAgICAgICAgXCJmaXJzdFwiOiBcIs6gz4HPjs+Ezrcgz4POtc67zq/OtM6xXCIsXG4gICAgICAgICAgICAgICAgXCJsYXN0XCI6IFwizqTOtc67zrXPhM6xzq/OsSDPg861zrvOr860zrFcIixcbiAgICAgICAgICAgICAgICBcIm5leHRcIjogXCLOlc+Az4zOvM61zr3Ot1wiLFxuICAgICAgICAgICAgICAgIFwicHJldmlvdXNcIjogXCLOoM+Bzr/Ot86zzr/Pjc68zrXOvc63XCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcImluZm9cIjogXCLOlc68z4bOrM69zrnPg863IF9TVEFSVF8gzq3Pic+CIF9FTkRfIM6xz4DPjCBfVE9UQUxfIM61zrPOs8+BzrHPhs6tz4JcIixcbiAgICAgICAgICAgIFwiaW5mb0VtcHR5XCI6IFwizpTOtc69IM6yz4HOrc64zrfOus6xzr0gzrXOs86zz4HOsc+Gzq3PglwiLFxuICAgICAgICAgICAgXCJsb2FkaW5nXCI6IFwizpXOvM+GzqzOvc65z4POtyDOtM61zrTOv868zq3Ovc+Jzr0uLi5cIixcbiAgICAgICAgICAgIFwicHJvY2Vzc2luZ1wiOiBcIs6gzrHPgc6xzrvOsc6yzq4gzrTOtc60zr/OvM6tzr3Pic69Li4uXCIsXG4gICAgICAgICAgICBcImVtcHR5VGFibGVcIjogXCLOlM61zr0gzrLPgc6tzrjOt866zrHOvSDOsc+Azr/PhM61zrvOrc+DzrzOsc+EzrEuXCJcbiAgICAgICAgfSxcbiAgICAgIFwiQ29sdW1uRGlzcGxheVwiOiBcIs6Vz4DOuc67zr/Os86uIM6VzrzPhs6szr3Ouc+DzrfPgiDPg8+EzrfOu8+Ozr1cIixcbiAgICAgIFwiQ29sdW1uRGlzcGxheUluZm9cIjogXCLOlc+AzrnOu86tzr7PhM61IM+EzrnPgiDPg8+Ezq7Ou861z4Igz4DOv8+FIM64zq3Ou861z4TOtSDOvc6xIM61zrzPhs6xzr3Or862zr/Ovc+EzrHOuS5cIixcbiAgICAgIFwiU2F2ZVwiOiBcIs6Vz4bOsc+BzrzOv86zzq5cIixcbiAgICAgIFwiQXBwbHlcIjogXCLOlc+GzrHPgc68zr/Os86uXCIsXG4gICAgICBcIkNhbmNlbFwiOiBcIs6RzrrPjc+Bz4nPg863XCIsXG4gICAgICBcIlJlY29yZHNQZXJQYWdlXCI6IFwizpXOs86zz4HOsc+Gzq3PgiDOsc69zqwgz4POtc67zq/OtM6xXCIsXG4gICAgICBcIlBhZ2VJbmZvXCI6IFwie3tzdGFydH19LXt7ZW5kfX0gzrHPgM+MIHt7cmVjb3Jkc1RvdGFsfX1cIixcbiAgICAgIFwiU2VhcmNoTGlzdFBsYWNlaG9sZGVyXCI6IFwizpHOvc6xzrbOt8+Ezq7Pg8+EzrUgz4PPhM63IM67zq/Pg8+EzrEuLi5cIixcbiAgICAgIFwiRmlsdGVyc1wiOiBcIs6mzq/Ou8+Ez4HOsVwiLFxuICAgICAgXCJBbGxcIjogXCLOjM67zrFcIixcbiAgICAgICAgXCJBZGRJdGVtXCI6IFwizqDPgc6/z4POuM6uzrrOtyDPg8+Ezr/Ouc+HzrXOr86/z4VcIixcbiAgICAgICAgXCJFbXB0eVRhYmxlVGl0bGVcIjogXCLOlM61zr0gzrLPgc6tzrjOt866zrHOvSDOsc+Azr/PhM61zrvOrc+DzrzOsc+EzrEuXCIsXG4gICAgICAgIFwiRW1wdHlUYWJsZU1lc3NhZ2VcIjogXCLOoM+Bzr/Pg8+AzrHOuM6uz4PPhM61IM69zrEgz4fPgc63z4POuc68zr/PgM6/zrnOrs+DzrXPhM61IM6szrvOu861z4IgzrvOrc6+zrXOuc+CIM66zrvOtc65zrTOuc6sLlwiLFxuICAgICAgICBcIlJlbW92ZUl0ZW1cIjogXCLOlM65zrHOs8+BzrHPhs6uIM+Dz4TOv865z4fOtc6vzr/PhVwiLFxuICAgICAgICBcIkl0ZW1zXCI6IFwiz4PPhM6/zrnPh861zq/OsVwiLFxuICAgICAgICBcIkl0ZW1cIjogXCLPg8+Ezr/Ouc+HzrXOr86/XCIsXG4gICAgICAgIFwiQWRkSXRlbU1lc3NhZ2VcIjoge1xuICAgICAgICAgICAgXCJ0aXRsZVwiOiBcIs6gz4HOv8+DzrjOrs66zrcgz4PPhM6/zrnPh861zq/Pic69XCIsXG4gICAgICAgICAgICBcIm9uZVwiOiBcIs6Izr3OsSDOvc6tzr8gz4PPhM6/zrnPh861zq/OvyDPgM+Bzr/Pg8+Ezq3OuM63zrrOtSDOvM61IM61z4DOuc+Ez4XPh86vzrEuXCIsXG4gICAgICAgICAgICBcIm1hbnlcIjogXCJ7e3ZhbHVlfX0gzr3Orc6xIM+Dz4TOv865z4fOtc6vzrEgz4DPgc6/z4PPhM6tzrjOt866zrHOvSDOvM61IM61z4DOuc+Ez4XPh86vzrEuXCJcbiAgICAgICAgICB9LFxuICAgICAgICBcIlJlbW92ZUl0ZW1NZXNzYWdlXCI6IHtcbiAgICAgICAgICAgIFwidGl0bGVcIjogXCLOkc+GzrHOr8+BzrXPg863IM+Dz4TOv865z4fOtc6vz4nOvVwiLFxuICAgICAgICAgICAgXCJvbmVcIjogXCLOiM69zrEgz4PPhM6/zrnPh861zq/OvyDOsc+GzrHOuc+Bzq3OuM63zrrOtSDOvM61IM61z4DOuc+Ez4XPh86vzrEuXCIsXG4gICAgICAgICAgICBcIm1hbnlcIjogXCJ7e3ZhbHVlfX0gz4PPhM6/zrnPh861zq/OsSDOsc+GzrHOuc+Bzq3OuM63zrrOsc69IM68zrUgzrXPgM65z4TPhc+Hzq/OsS5cIlxuICAgICAgICB9LFxuICAgICAgICBcIlJlbW92ZUl0ZW1zVGl0bGVcIjogXCLOlM65zrHOs8+BzrHPhs6uIM+Dz4TOv865z4fOtc6vzr/PhVwiLFxuICAgICAgICBcIlJlbW92ZUl0ZW1zTWVzc2FnZVwiOiBcIs6gz4HPjM66zrXOuc+EzrHOuSDOvc6xIM60zrnOsc6zz4HOrM+IzrXPhM61IM6tzr3OsSDOriDPgM61z4HOuc+Dz4PPjM+EzrXPgc6xIM+Dz4TOv865z4fOtc6vzrEuIM6Yzq3Ou861z4TOtSDOvc6xIM+Az4HOv8+Hz4nPgc6uz4POtc+EzrU/XCIsXG4gICAgICAgIFwiU2VsZWN0QWxsXCI6IFwizpXPgM65zrvOv86zzq4gz4zOu8+Jzr1cIixcbiAgICAgICAgXCJDbGVhclNlbGVjdGlvblwiOiBcIs6Rzr3Osc6vz4HOtc+DzrcgzrXPgM65zrvOv86zzq7PglwiLFxuICAgICAgXCJBY3Rpb25zXCI6IHtcbiAgICAgICAgXCJMYWJlbFwiOiBcIs6Vz4DOtc6+zrXPgc6zzrHPg86vzrFcIixcbiAgICAgICAgXCJTdGFydFwiOiBcIs6Izr3Osc+Bzr7Ot1wiLFxuICAgICAgICBcIkFjdGlvbk1lc3NhZ2VcIjoge1xuICAgICAgICAgIFwiTm9uZVwiOiBcIs6UzrXOvSDOrc+HzrXPhM61IM61z4DOuc67zq3Ovs61zrkgzrrOsc69zq3Ovc6xIM+Dz4TOv865z4fOtc6vzr8gz4DOv8+FIM69zrEgzrHOus6/zrvOv8+FzrjOtc6vIM+EzrnPgiDPgM+Bzr/Pi8+Azr/OuM6tz4POtc65z4Igz4TOt8+CIM61zr3Orc+BzrPOtc65zrHPgi5cIixcbiAgICAgICAgICBcIk9uZVwiOiBcIs6Iz4fOtc+EzrUgzrXPgM65zrvOrc6+zrXOuSDOrc69zrEgz4PPhM6/zrnPh861zq/OvyDPgM6/z4UgzrHOus6/zrvOv8+FzrjOtc6vIM+EzrnPgiDPgM+Bzr/Pi8+Azr/OuM6tz4POtc65z4Igz4TOt8+CIM61zr3Orc+BzrPOtc65zrHPgi4gzqDOsc+Ezq7Pg8+EzrUgz4TOvyDPgM67zq7Ous+Ez4HOvyDOiM69zrHPgc6+zrcgzrPOuc6xIM69zrEgzr7Otc66zrnOvc6uz4POtc65IM63IM60zrnOsc60zrnOus6xz4POr86xLlwiLFxuICAgICAgICAgIFwiTWFueVwiOiBcIs6Iz4fOtc+EzrUgzrXPgM65zrvOrc6+zrXOuSB7e2xlbmd0aH19IM+Dz4TOv865z4fOtc6vzrEgz4DOv8+FIM6xzrrOv867zr/Phc64zr/Pjc69IM+EzrnPgiDPgM+Bzr/Pi8+Azr/OuM6tz4POtc65z4Igz4TOt8+CIM61zr3Orc+BzrPOtc65zrHPgi4gzqDOsc+Ezq7Pg8+EzrUgz4TOvyDPgM67zq7Ous+Ez4HOvyDOiM69zrHPgc6+zrcgzrPOuc6xIM69zrEgzr7Otc66zrnOvc6uz4POtc65IM63IM60zrnOsc60zrnOus6xz4POr86xLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiQ29tcGxldGVkV2l0aEVycm9yc1wiOiB7XG4gICAgICAgICAgXCJUaXRsZVwiOiBcIs6XIM60zrnOsc60zrnOus6xz4POr86xIM6/zrvOv866zrvOt8+Bz47OuM63zrrOtSDOvM61IM+Dz4bOrM67zrzOsc+EzrEuXCIsXG4gICAgICAgICAgXCJEZXNjcmlwdGlvblwiOiB7XG4gICAgICAgICAgICBcIk9uZVwiOiBcIs6Izr3OsSDPg8+Ezr/Ouc+HzrXOr86/IM60zrXOvSDOsc69zrHOvc61z47OuM63zrrOtSDOu8+MzrPPiSDOtc69z4zPgiDPg8+GzqzOu868zrHPhM6/z4Igz4DOv8+FIM+Dz4XOvc6tzrLOtyDOus6xz4TOrCDPhM63zr0gzrXOus+Ezq3Ou861z4POtyDPhM63z4IgzrTOuc6xzrTOuc66zrHPg86vzrHPgi5cIixcbiAgICAgICAgICAgIFwiTWFueVwiOiBcInt7ZXJyb3JzfX0gz4PPhM6/zrnPh861zq/OsSDOtM61zr0gzrHOvc6xzr3Otc+OzrjOt866zrHOvSDOu8+MzrPPiSDOtc69z4zPgiDPg8+GzqzOu868zrHPhM6/z4Igz4DOv8+FIM+Dz4XOvc6tzrLOtyDOus6xz4TOrCDPhM63zr0gzrXOus+Ezq3Ou861z4POtyDPhM63z4IgzrTOuc6xzrTOuc66zrHPg86vzrHPgi5cIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJDb21wbGV0ZWRXaXRoU3VjY2Vzc1wiOiB7XG4gICAgICAgICAgXCJUaXRsZVwiOiBcIs6XIM60zrnOsc60zrnOus6xz4POr86xIM6/zrvOv866zrvOt8+Bz47OuM63zrrOtSDOvM61IM61z4DOuc+Ez4XPh86vzrEuXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwiU2VsZWN0Q29sdW1uc1wiOiBcIs6Vz4DOuc67zr/Os86uIM+Dz4TOt867z47OvVwiLFxuICAgICAgXCJNb3ZlVXBcIjogXCLOlc+AzqzOvc+JXCIsXG4gICAgICBcIk1vdmVEb3duXCI6IFwizprOrM+Ez4lcIixcbiAgICAgIFwiQWRkQ29sdW1uXCI6IFwizpXPgM65zrvOv86zzq5cIixcbiAgICAgIFwiUmVtb3ZlQ29sdW1uXCI6IFwizpHPhs6xzq/Pgc61z4POt1wiLFxuICAgICAgXCJTZWxlY3RDb2x1bW5IZWxwXCI6IFwizpXPgM65zrvOrc6+z4TOtSDOvM6vzrEgzq4gz4DOtc+BzrnPg8+Dz4zPhM61z4HOtc+CIM6xz4DPjCDPhM65z4IgzrTOuc6xzrjOrc+DzrnOvM61z4Igz4PPhM6uzrvOtc+CIM66zrHOuSDPgM6xz4TOrs+Dz4TOtSDPhM6/IM+AzrvOrs66z4TPgc6/ICfOlc+AzrnOu86/zrPOricgzrPOuc6xIM69zrEgz4TOuc+CIM61zrzPhs6xzr3Or8+DzrXPhM61LiDOp8+BzrfPg865zrzOv8+Azr/Ouc6uz4PPhM61IM+Ezr8gz4DOu86uzrrPhM+Bzr8gJ86Rz4bOsc6vz4HOtc+DzrcnIM6zzrnOsSDOvc6xIM6xz4bOsc65z4HOrc+DzrXPhM61IM+EzrnPgiDOtc+AzrnOu861zrPOvM6tzr3Otc+CIM+Dz4TOrs67zrXPgi5cIixcbiAgICAgIFwiTW92ZUNvbHVtbkhlbHBcIjogXCLOp8+BzrfPg865zrzOv8+Azr/Ouc6uz4PPhM61IM+EzrEgz4DOu86uzrrPhM+BzrEgJ86Vz4DOrM69z4knIM66zrHOuSAnzprOrM+Ez4knIM6zzrnOsSDOvc6xIM6xzrvOu86szr7Otc+EzrUgz4TOt869IM+DzrXOuc+BzqwgzrXOvM+GzqzOvc65z4POt8+CIM+Ez4nOvSDPg8+EzrfOu8+Ozr0gz4TOv8+FIM+Azq/Ovc6xzrrOsS5cIixcbiAgICAgIFwiVW5rbm93bkNvbHVtblwiOiBcIs6GzrPOvc+Jz4PPhM6/XCIsXG4gICAgICBcIlNlbGVjdENvbHVtblwiOiBcIs6Vz4DOuc67zr/Os86uXCIsXG4gICAgICBcIkFjdGlvbkxpbmtDb2x1bW5cIjogXCLOlc69zq3Pgc6zzrXOuc61z4JcIixcbiAgICAgIFwiRGF0YUVycm9yXCI6IHtcbiAgICAgICAgXCJUaXRsZVwiOiBcIs6jz4bOrM67zrzOsSDOus6xz4TOrCDPhM63zr0gz4DOsc+BzrHOu86xzrLOriDPhM+Jzr0gzrTOtc60zr/OvM6tzr3Pic69XCIsXG4gICAgICAgIFwiTWVzc2FnZVwiOiBcIs6jz4XOvc6tzrLOtyDPg8+GzqzOu868zrEgzrrOsc+Ezqwgz4TOt869IM+AzrHPgc6xzrvOsc6yzq4gz4TPic69IM60zrXOtM6/zrzOrc69z4nOvS4gzqDPgc6/z4PPgM6xzrjOrs+Dz4TOtSDOvs6xzr3OrCDOriDPhM+Bzr/PgM6/z4DOv865zq7Pg8+EzrUgz4TOsSDPg8+Ezr/Ouc+HzrXOr86xIM6xzr3Osc62zq7PhM63z4POt8+CLlwiXG4gICAgICB9LFxuICAgICAgXCJFeHBvcnRMaXN0XCI6IFwizpXOvs6xzrPPic6zzq4gzrvOr8+Dz4TOsc+CXCIsXG4gICAgICBcIkV4cG9ydExpbWl0RXhjZWVkZWRcIjogXCLOpM6/IM+AzrvOrs64zr/PgiDPhM+Jzr0gz4PPhM6/zrnPh861zq/Pic69IM+Az4HOv8+CIM61zr7Osc6zz4nOs86uICh7e2RhdGFMZW5ndGh9fSkgzr7Otc+AzrXPgc69zqzOtc65IM+Ezr8gzrzOrc6zzrnPg8+Ezr8gzrXPgM65z4TPgc61z4DPhM+MICh7e2V4cG9ydExpbWl0fX0pLiDOoM6xz4HOsc66zrHOu86/z43OvM61IM+Az4HOv8+DzrHPgc68z4zPg8+EzrUgz4TOsSDPhs6vzrvPhM+BzrEgz4TOt8+CIM6xzr3Osc62zq7PhM63z4POt8+CIM66zrHOuSDPgM+Bzr/Pg8+AzrHOuM6uz4PPhM61IM6+zrHOvc6sLlwiLFxuICAgICAgXCJFeHBvcnRSZXN1bHRzXCI6IFwizpTOtc60zr/OvM6tzr3OsSDOu86vz4PPhM6xz4JcIlxuICAgIH0sXG4gICAgXCJUcnVlRmFsc2VcIjoge1xuICAgICAgICBcImxvbmdcIjoge1xuICAgICAgICAgICAgXCJZZXNcIjogXCLOnc6xzrlcIixcbiAgICAgICAgICAgIFwiTm9cIjogXCLOjM+HzrlcIlxuICAgICAgICB9XG4gICAgfSxcbiAgICBcIlNldHRpbmdzXCI6IHtcbiAgICAgIFwiT3BlcmF0aW9uQ29tcGxldGVkXCI6IFwizpcgzrTOuc6xzrTOuc66zrHPg86vzrEgzr/Ou86/zrrOu863z4HPjs64zrfOus61IM68zrUgzrXPgM65z4TPhc+Hzq/OsS5cIlxuICAgIH0sXG4gICAgXCJBZHZhbmNlZFNlYXJjaFwiOiB7XG4gICAgICAgIFwiQ2hvb3NlXCI6IFwiPM6Vz4DOuc67zq3Ovs+EzrUgzrzOuc6xIM6xzr3Osc62zq7PhM63z4POtz5cIixcbiAgICAgICAgXCJDaG9vc2VEYXRlXCI6IFwizpXPgM65zrvOv86zzq4gzrfOvM61z4HOv868zrfOvc6vzrHPglwiLFxuICAgICAgICBcIlNhdmVkU2VhcmNoZXNcIjogXCLOkc+Azr/OuM63zrrOtc+FzrzOrc69zrXPgiDOsc69zrHOts63z4TOrs+DzrXOuc+CXCIsXG4gICAgICAgIFwiVG9nZ2xlRHJvcGRvd25cIiA6IFwizpXOvM+GzqzOvc65z4POtyDOu86vz4PPhM6xz4JcIixcbiAgICAgICAgXCJTYXZlQ3VycmVudFNlYXJjaFwiOiBcIs6Rz4DOv864zq7Ous61z4XPg863IM6xzr3Osc62zq7PhM63z4POt8+CXCIsXG4gICAgICAgIFwiU2F2ZUFzXCIgOiBcIs6Rz4DOv864zq7Ous61z4XPg863IM+Jz4JcIixcbiAgICAgICAgXCJTYXZlXCIgOiBcIs6Rz4DOv864zq7Ous61z4XPg863XCIsXG4gICAgICAgIFwiRGVsZXRlXCIgOiBcIs6UzrnOsc6zz4HOsc+Gzq5cIixcbiAgICAgICAgXCJNb3JlXCI6IFwizqDOtc+BzrnPg8+Dz4zPhM61z4HOsVwiLFxuICAgICAgICBcIkxlc3NcIjogXCLOm865zrPPjM+EzrXPgc6xXCIsXG4gICAgICAgIFwiTW9kYWxcIiA6IHtcbiAgICAgICAgICAgIFwiVGl0bGVcIiA6IFwizpHPgM6/zrjOrs66zrXPhc+DzrcgzrrPgc65z4TOt8+Bzq/Pic69IM6xzr3Osc62zq7PhM63z4POt8+CXCIsXG4gICAgICAgICAgICBcIkhlbHBcIiA6IFwizp/Pgc6vz4PPhM61IM6tzr3Osc69IM+Ezq/PhM67zr8gzrPOuc6xIM+EzrEgzrXPgM65zrvOtc6zzrzOrc69zrEgzrrPgc65z4TOrs+BzrnOsSDOsc69zrHOts6uz4TOt8+DzrfPgi4gzpHPhc+Ez4zPgiDOvyDPhM6vz4TOu86/z4IgzrjOsSDPg86xz4IgzrLOv863zrjOrs+DzrXOuSDOvc6xIM+EzrEgz4fPgc63z4POuc68zr/PgM6/zrnOrs+DzrXPhM61IM6+zrHOvc6sIM+Dz4TOvyDOvM6tzrvOu86/zr0uXCIsXG4gICAgICAgICAgICBcIlRpdGxlT25Vc2VyRXJyb3JcIiA6IFwizqDOsc+BzrHOus6xzrvPjiDOtc65z4POrM6zzrXPhM61IM6tzr3Osc69IM+Ezq/PhM67zr9cIixcbiAgICAgICAgICAgIFwiVGl0bGVPbkxpc3RBbHJlYWR5Q3JlYXRlZFwiIDogXCLOpM6/IM+Mzr3Ov868zrEgzrHPhc+Ez4wgz4fPgc63z4POuc68zr/PgM6/zrnOtc6vz4TOsc65IM6uzrTOty4gzpTOuc6xzrvOrc6+z4TOtSDOrc69zrEgzrTOuc6xz4bOv8+BzrXPhM65zrrPjC5cIixcbiAgICAgICAgICAgIFwiTm9MaXN0RGVmaW5lZFwiIDogXCLOlM61zr0gzq3Ph861zrkgzr/Pgc65z4PPhM61zq8gz4TOvyDPg863zrzOtc6vzr8gzrHPgM6/zrjOrs66zrXPhc+DzrfPgiDPhM63z4IgzrvOr8+Dz4TOsc+CXCIsXG4gICAgICAgICAgICBcIkVtcHR5Q3JpdGVyaWFMaXN0XCIgOiBcIs6UzrXOvSDOrc+HzrXPhM61IM66zrHOuM6/z4HOr8+DzrXOuSDOus6xzr3Orc69zrEgzrrPgc65z4TOrs+BzrnOvyDOs865zrEgzrHPgM6/zrjOrs66zrXPhc+DzrdcIixcbiAgICAgICAgICAgIFwiU2F2ZU5hbWVMYWJlbFwiIDogXCLOn869zr/OvM6xz4POr86xIM67zq/Pg8+EzrHPglwiLFxuICAgICAgICAgICAgXCJTYXZlTmFtZVBsYWNlaG9sZGVyXCIgOiBcIs6VzrnPg86szrPOtc+EzrUgzq3Ovc6xzr0gz4TOr8+EzrvOv1wiLFxuICAgICAgICAgICAgXCJBY2NlcHRcIiA6IFwizpHPgM6/zrjOrs66zrXPhc+DzrdcIixcbiAgICAgICAgICAgIFwiRGVjbGluZVwiIDogXCLOkc+Az4zPgc+BzrnPiM63XCIsXG4gICAgICAgICAgICBcIkNsb3NlXCIgOiBcIs6azrvOtc6vz4POuc68zr9cIlxuICAgICAgICB9XG4gICAgfSxcbiAgICBcIkFkZEl0ZW1zXCIgOiB7XG4gICAgICBcIlNlbGVjdEl0ZW1zXCI6IFwizpXPgM65zrvOrc6+z4TOtSDPg8+Ezr/Ouc+HzrXOr86xXCIsXG4gICAgfVxufTtcbiIsIi8vIHRzbGludDpkaXNhYmxlOiBxdW90ZW1hcmtcbi8vIHRzbGludDpkaXNhYmxlOiBtYXgtbGluZS1sZW5ndGhcbmV4cG9ydCBjb25zdCBUQUJMRVNfRU4gPSB7XG4gICAgXCJUYWJsZXNcIjoge1xuICAgICAgXCJFeHBvcnRcIjogXCJFeHBvcnRcIixcbiAgICAgICAgXCJNb3JlXCI6IFwiTW9yZVwiLFxuICAgICAgICBcIlNlYXJjaFwiOiBcIlNlYXJjaFwiLFxuICAgICAgICBcIlNlYXJjaFBsYWNlaG9sZGVyXCI6IFwiU2VhcmNoLi4uXCIsXG4gICAgICAgIFwiR3JvdXBCeVwiOiBcIkdyb3VwIGJ5XCIsXG4gICAgICAgIFwiTm90RGVmaW5lZFwiOiBcIk5vdCBkZWZpbmVkXCIsXG4gICAgICAgIFwiRGF0YVRhYmxlXCI6IHtcbiAgICAgICAgICAgIFwicGFnaW5hdGVcIjoge1xuICAgICAgICAgICAgICAgIFwiZmlyc3RcIjogXCJGaXJzdFwiLFxuICAgICAgICAgICAgICAgIFwibGFzdFwiOiBcIkxhc3RcIixcbiAgICAgICAgICAgICAgICBcIm5leHRcIjogXCJOZXh0XCIsXG4gICAgICAgICAgICAgICAgXCJwcmV2aW91c1wiOiBcIlByZXZpb3VzXCJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcImluZm9cIjogXCJTaG93aW5nIF9TVEFSVF8gdG8gX0VORF8gb2YgX1RPVEFMXyBlbnRyaWVzXCIsXG4gICAgICAgICAgICBcImluZm9FbXB0eVwiOiBcIlNob3dpbmcgMCB0byAwIG9mIDAgZW50cmllc1wiLFxuICAgICAgICAgICAgXCJwcm9jZXNzaW5nXCI6IFwiUHJvY2Vzc2luZyBkYXRhLi4uXCIsXG4gICAgICAgICAgICBcImVtcHR5VGFibGVcIjogXCJUaGVyZSBhcmUgbm8gbWF0Y2hpbmcgcmVjb3Jkcy5cIlxuICAgICAgICB9LFxuICAgICAgXCJDb2x1bW5EaXNwbGF5XCI6IFwiQ29sdW1uIERpc3BsYXlcIixcbiAgICAgIFwiQ29sdW1uRGlzcGxheUluZm9cIjogXCLOlc+AzrnOu86tzr7PhM61IM+EzrnPgiDPg8+Ezq7Ou861z4Igz4DOv8+FIM64zq3Ou861z4TOtSDOvc6xIM61zrzPhs6xzr3Or862zr/Ovc+EzrHOuS5cIixcbiAgICAgIFwiU2F2ZVwiOiBcIlNhdmVcIixcbiAgICAgIFwiQXBwbHlcIjogXCJBcHBseVwiLFxuICAgICAgXCJDYW5jZWxcIjogXCJDYW5jZWxcIixcbiAgICAgIFwiUmVjb3Jkc1BlclBhZ2VcIjogXCJJdGVtcyBwZXIgcGFnZVwiLFxuICAgICAgXCJQYWdlSW5mb1wiOiBcInt7c3RhcnR9fS17e2VuZH19IG9mIHt7cmVjb3Jkc1RvdGFsfX1cIixcbiAgICAgIFwiU2VhcmNoTGlzdFBsYWNlSG9sZGVyXCI6IFwiU2VhcmNoIGluIGxpc3QuLi5cIixcbiAgICAgIFwiRmlsdGVyc1wiOiBcIkZpbHRlcnNcIixcbiAgICAgIFwiQWxsXCI6IFwiQWxsXCIsXG4gICAgICBcIkFkZEl0ZW1cIjogXCJBZGQgaXRlbVwiLFxuICAgICAgXCJFbXB0eVRhYmxlVGl0bGVcIjogXCJUaGVyZSBhcmUgbm8gbWF0Y2hpbmcgcmVjb3Jkcy5cIixcbiAgICAgIFwiRW1wdHlUYWJsZU1lc3NhZ2VcIjogXCJQbGVhc2UgdHJ5IHRvIHVzZSBvdGhlciBrZXl3b3JkcyBvciBzZWFyY2ggcGFyYW1ldGVycy5cIixcbiAgICAgIFwiUmVtb3ZlSXRlbVwiOiBcIlJlbW92ZSBpdGVtXCIsXG4gICAgICBcIkl0ZW1zXCI6IFwiaXRlbXNcIixcbiAgICAgIFwiSXRlbVwiOiBcIml0ZW1cIixcbiAgICBcIkFkZEl0ZW1NZXNzYWdlXCI6IHtcbiAgICAgIFwidGl0bGVcIjogXCJBZGQgaXRlbVwiLFxuICAgICAgXCJvbmVcIjogXCJBIG5ldyBpdGVtIGhhcyBiZWVuIGFkZGVkIHN1Y2Nlc3NmdWxseS5cIixcbiAgICAgIFwibWFueVwiOiBcInt7dmFsdWV9fSBuZXcgaXRlbXMgaGF2ZSBiZWVuIGFkZGVkIHN1Y2Nlc3NmdWxseS5cIlxuICAgIH0sXG4gICAgXCJSZW1vdmVJdGVtTWVzc2FnZVwiOiB7XG4gICAgICBcInRpdGxlXCI6IFwiUmVtb3ZlIGl0ZW1zXCIsXG4gICAgICBcIm9uZVwiOiBcIkFuIGl0ZW0gaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IHJlbW92ZWQuXCIsXG4gICAgICBcIm1hbnlcIjogXCJ7e3ZhbHVlfX0gaXRlbXMgaGF2ZSBiZWVuIHN1Y2Nlc3NmdWxseSByZW1vdmVkLlwiXG4gICAgfSxcbiAgICBcIlJlbW92ZUl0ZW1zVGl0bGVcIjogXCJSZW1vdmUgaXRlbXNcIixcbiAgICBcIlJlbW92ZUl0ZW1zTWVzc2FnZVwiOiBcIllvdSBhcmUgZ29pbmcgdG8gcmVtb3ZlIG9uZSBvciBtb3JlIGluc3RydWN0b3IgY291cnNlcy4gRG8geW91IHdhbnQgdG8gcHJvY2VlZD9cIixcbiAgICAgIFwiU2VsZWN0QWxsXCI6IFwiU2VsZWN0IGFsbFwiLFxuICAgICAgXCJDbGVhclNlbGVjdGlvblwiOiBcIkNsZWFyIHNlbGVjdGlvblwiLFxuICAgICAgXCJBY3Rpb25zXCI6IHtcbiAgICAgICAgXCJMYWJlbFwiOiBcIkVkaXRcIixcbiAgICAgICAgXCJTdGFydFwiOiBcIlN0YXJ0XCIsXG4gICAgICAgIFwiQWN0aW9uTWVzc2FnZVwiOiB7XG4gICAgICAgICAgXCJOb25lXCI6IFwiVGhlcmUgaXMgbm8gc2VsZWN0ZWQgaXRlbSB0aGF0IG1lZXRzIGFjdGlvbiByZXF1aXJlbWVudHMuXCIsXG4gICAgICAgICAgXCJPbmVcIjogXCJZb3UgaGF2ZSBzZWxlY3RlZCBvbmUgaXRlbSB0aGF0IG1lZXRzIGFjdGlvbiByZXF1aXJlbWVudHMuXCIsXG4gICAgICAgICAgXCJNYW55XCI6IFwiWW91IGhhdmUgc2VsZWN0ZWQge3tsZW5ndGh9fSBpdGVtcyB0aGF0IG1lZXQgYWN0aW9uIHJlcXVpcmVtZW50cy5cIlxuICAgICAgICB9LFxuICAgICAgICBcIkNvbXBsZXRlZFdpdGhFcnJvcnNcIjoge1xuICAgICAgICAgIFwiVGl0bGVcIjogXCJUaGUgb3BlcmF0aW9uIHdhcyBjb21wbGV0ZWQgd2l0aCBlcnJvcnMuXCIsXG4gICAgICAgICAgXCJEZXNjcmlwdGlvblwiOiB7XG4gICAgICAgICAgICBcIk9uZVwiOiBcIk9uZSBpdGVtIGhhcyBub3QgYmVlbiB1cGRhdGVkIGR1ZSB0byBhbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBleGVjdXRpbmcgcHJvY2Vzcy5cIixcbiAgICAgICAgICAgIFwiTWFueVwiOiBcInt7ZXJyb3JzfX0gaXRlbXMgaGF2ZSBub3QgYmVlbiB1cGRhdGVkIGR1ZSB0byBhbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBleGVjdXRpbmcgcHJvY2Vzcy5cIlxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJDb21wbGV0ZWRXaXRoU3VjY2Vzc1wiOiB7XG4gICAgICAgICAgXCJUaXRsZVwiOiBcIlRoZSBvcGVyYXRpb24gd2FzIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuXCJcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwiU2VsZWN0Q29sdW1uc1wiOiBcIlNlbGVjdCBjb2x1bW5zXCIsXG4gICAgICBcIk1vdmVVcFwiOiBcIk1vdmUgdXBcIixcbiAgICAgIFwiTW92ZURvd25cIjogXCJNb3ZlIGRvd25cIixcbiAgICAgIFwiQWRkQ29sdW1uXCI6IFwiQWRkXCIsXG4gICAgICBcIlJlbW92ZUNvbHVtblwiOiBcIlJlbW92ZVwiLFxuICAgICAgXCJTZWxlY3RDb2x1bW5IZWxwXCI6IFwiU2VsZWN0IG9uZSBvciBtb3JlIGNvbHVtbnMgYW5kIHByZXNzICdBZGQnIGJ1dHRvbiB0byBpbmNsdWRlIHRoZW0gaW4gdGFibGUuIFVzZSAnUmVtb3ZlJyBidXR0b24gdG8gZXhjbHVkZSBvbmUgb3IgbW9yZSBjb2x1bW5zIGZyb20gdmlldy5cIixcbiAgICAgIFwiTW92ZUNvbHVtbkhlbHBcIjogXCJVc2UgJ01vdmUgdXAnIGFuZCAnTW92ZSBkb3duJyBidXR0b25zIHRvIGNoYW5nZSBjb2x1bW4gb3JkZXIuXCIsXG4gICAgICBcIlVua25vd25Db2x1bW5cIjogXCJVbmtub3duXCIsXG4gICAgICBcIlNlbGVjdENvbHVtblwiOiBcIlNlbGVjdFwiLFxuICAgICAgXCJBY3Rpb25MaW5rQ29sdW1uXCI6IFwiQWN0aW9uc1wiLFxuICAgICAgXCJEYXRhRXJyb3JcIjoge1xuICAgICAgICBcIlRpdGxlXCI6IFwiRXJyb3Igd2hpbGUgZ2V0dGluZyBkYXRhXCIsXG4gICAgICAgIFwiTWVzc2FnZVwiOiBcIkFuIGVycm9yIG9jY3VycmVkIHdoaWxlIGdldHRpbmcgZGF0YS4gUGxlYXNlIHRyeSBhZ2FpbiBvciBjaGFuZ2UgeW91ciBjcml0ZXJpYS5cIlxuICAgICAgfSxcbiAgICAgIFwiRXhwb3J0TGlzdFwiOiBcIkV4cG9ydCBsaXN0XCIsXG4gICAgICBcIkV4cG9ydExpbWl0RXhjZWVkZWRcIjogXCJUaGUgbnVtYmVyIG9mIGl0ZW1zIHRoYXQgYXJlIHRvIGJlIGV4cG9ydGVkICh7e2RhdGFMZW5ndGh9fSkgZXhjZWVkcyB0aGUgZXhwb3J0IGxpbWl0ICh7e2V4cG9ydExpbWl0fX0pLiBQbGVhc2UgYXBwbHkgbW9yZSBzcGVjaWZpYyBmaWx0ZXJzIHRvIHRoZSBzZWFyY2guXCIsXG4gICAgICBcIkV4cG9ydFJlc3VsdHNcIjogXCJFeHBvcnRlZCBsaXN0XCJcbiAgICB9LFxuICAgIFwiVHJ1ZUZhbHNlXCI6IHtcbiAgICAgICAgXCJsb25nXCI6IHtcbiAgICAgICAgICAgIFwiWWVzXCI6IFwiWWVzXCIsXG4gICAgICAgICAgICBcIk5vXCI6IFwiTm9cIlxuICAgICAgICB9XG4gICAgfSxcbiAgICBcIlNldHRpbmdzXCI6IHtcbiAgICAgIFwiT3BlcmF0aW9uQ29tcGxldGVkXCI6IFwiVGhlIG9wZXJhdGlvbiB3YXMgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS5cIlxuICAgIH0sXG4gICAgXCJBZHZhbmNlZFNlYXJjaFwiOiB7XG4gICAgICAgIFwiQ2hvb3NlXCI6IFwiPFNlbGVjdCBhIHNhdmVkIHNlYXJjaD5cIixcbiAgICAgICAgXCJDaG9vc2VEYXRlXCI6IFwiQ2hvb3NlIGRhdGVcIixcbiAgICAgICAgXCJTYXZlZFNlYXJjaGVzXCI6IFwiU2F2ZWQgc2VhcmNoZXNcIixcbiAgICAgICAgXCJUb2dnbGVEcm9wZG93blwiIDogXCJUb2dnbGUgRHJvcGRvd25cIixcbiAgICAgICAgXCJTYXZlQ3VycmVudFNlYXJjaFwiOiBcIlNhdmUgc2VhcmNoXCIsXG4gICAgICAgIFwiU2F2ZUFzXCIgOiBcIlNhdmUgYXMuLi5cIixcbiAgICAgICAgXCJTYXZlXCIgOiBcIlNhdmVcIixcbiAgICAgICAgXCJEZWxldGVcIiA6IFwiUmVtb3ZlXCIsXG4gICAgICAgIFwiTW9yZVwiOiBcIk1vcmVcIixcbiAgICAgICAgXCJMZXNzXCI6IFwiTGVzc1wiLFxuICAgICAgICBcIk1vZGFsXCIgOiB7XG4gICAgICAgICAgICBcIlRpdGxlXCIgOiBcIlNhdmUgY3VycmVudCBzZWFyY2ggY3JpdGVyaWFcIixcbiAgICAgICAgICAgIFwiSGVscFwiIDogXCJQbGVhc2UgYWRkIGEgdGl0bGUgZm9yIHRoZSBnaXZlbiBzZWFyY2ggY3JpdGVyaWEuIFRoaXMgdGl0bGUgd2lsbCBoZWxwIHlvdSB0byB1c2UgdGhvc2UgY3JpdGVyaWEgYWdhaW4gaW4gdGhlIGZ1dHVyZS5cIixcbiAgICAgICAgICAgIFwiVGl0bGVPblVzZXJFcnJvclwiIDogXCJQbGVhc2UgdXNlIGEgdmFsaWQgbmFtZSBmb3IgeW91ciBsaXN0XCIsXG4gICAgICAgICAgICBcIlRpdGxlT25MaXN0QWxyZWFkeUNyZWF0ZWRcIiA6IFwiTmFtZSBhbHJlYWR5IGluIHVzZS4gUGxlYXNlIGNob29zZSBhIGRpZmZlcmVudCBvbmVcIixcbiAgICAgICAgICAgIFwiTm9MaXN0RGVmaW5lZFwiIDogXCJDYW5ub3QgZGVmaW5lIHVzZXIgc3RvcmFnZSBrZXkuXCIsXG4gICAgICAgICAgICBcIkVtcHR5Q3JpdGVyaWFMaXN0XCIgOiBcIlBsZWFzZSBkZWZpbmUgc2VhcmNoIGNyaXRlcmlhIGJlZm9yZSBzYXZlLlwiLFxuICAgICAgICAgICAgXCJTYXZlTmFtZUxhYmVsXCIgOiBcIkxpc3QgbmFtZVwiLFxuICAgICAgICAgICAgXCJTYXZlTmFtZVBsYWNlaG9sZGVyXCIgOiBcIlR5cGUgYSB0aXRsZSBoZXJlLi4uXCIsXG4gICAgICAgICAgICBcIkFjY2VwdFwiIDogXCJTYXZlXCIsXG4gICAgICAgICAgICBcIkRlY2xpbmVcIiA6IFwiRGVjbGluZVwiLFxuICAgICAgICAgICAgXCJDbG9zZVwiIDogXCJDbG9zZVwiXG4gICAgICAgIH1cbiAgICB9LFxuICBcIkFkZEl0ZW1zXCIgOiB7XG4gICAgXCJTZWxlY3RJdGVtc1wiOiBcIlNlbGVjdCBpdGVtc1wiLFxuICB9XG59O1xuIiwiaW1wb3J0IHsgQWN0aW9uIH0gZnJvbSAnQG5ncngvc3RvcmUnO1xuXG5leHBvcnQgZW51bSBUYWJsZUFjdGlvblR5cGVzIHtcbiAgTG9hZEZpbHRlciA9ICdbVGFibGVdIExvYWQgRmlsdGVyJyxcbiAgQXBwZW5kRmlsdGVyID0gJ1tUYWJsZV0gQXBwZW5kIEZpbHRlcicsXG4gIEFwcGVuZFN0YXRlID0gJ1tUYWJsZV0gQXBwZW5kIFN0YXRlJ1xufVxuXG5leHBvcnQgY2xhc3MgTG9hZEZpbHRlciBpbXBsZW1lbnRzIEFjdGlvbiB7XG4gIHJlYWRvbmx5IHR5cGUgPSBUYWJsZUFjdGlvblR5cGVzLkxvYWRGaWx0ZXI7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSBpZDogc3RyaW5nKSB7fVxufVxuXG5leHBvcnQgY2xhc3MgQXBwZW5kRmlsdGVyIGltcGxlbWVudHMgQWN0aW9uIHtcbiAgcmVhZG9ubHkgdHlwZSA9IFRhYmxlQWN0aW9uVHlwZXMuQXBwZW5kRmlsdGVyO1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgaWQ6IHN0cmluZywgcHVibGljIHJlYWRvbmx5IGZpbHRlcjogYW55KSB7fVxufVxuXG5leHBvcnQgY2xhc3MgQXBwZW5kU3RhdGUgaW1wbGVtZW50cyBBY3Rpb24ge1xuICByZWFkb25seSB0eXBlID0gVGFibGVBY3Rpb25UeXBlcy5BcHBlbmRTdGF0ZTtcbiAgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IGlkOiBzdHJpbmcsIHB1YmxpYyByZWFkb25seSBkYXRhOiBhbnkpIHt9XG59XG5cbmV4cG9ydCB0eXBlIFRhYmxlQWN0aW9ucyA9IExvYWRGaWx0ZXIgfCBBcHBlbmRGaWx0ZXIgfCBBcHBlbmRTdGF0ZTtcbiIsImltcG9ydCB7XG4gIEFjdGlvblJlZHVjZXJNYXAsXG4gIGNyZWF0ZUZlYXR1cmVTZWxlY3RvcixcbiAgY3JlYXRlU2VsZWN0b3IsXG59IGZyb20gJ0BuZ3J4L3N0b3JlJztcbmltcG9ydCB7IGNsb25lRGVlcCB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBUYWJsZUFjdGlvbnMsIFRhYmxlQWN0aW9uVHlwZXMgfSBmcm9tICcuLi9hY3Rpb25zL3RhYmxlLmFjdGlvbnMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRhYmxlU3RhdGUge1xuICBmaWx0ZXI/OiBhbnk7XG4gIG9yZGVyPzogYW55O1xuICB0YWJsZT86IGFueTtcbn1cblxuZXhwb3J0IGNvbnN0IGluaXRpYWxTdGF0ZSA9IHtcbn07XG5cbmV4cG9ydCBjb25zdCB0YWJsZUluaXRpYWxTdGF0ZTogVGFibGVTdGF0ZSA9IHtcbiAgZmlsdGVyOiB7fSxcbiAgb3JkZXI6IFtdXG59O1xuXG5leHBvcnQgZnVuY3Rpb24gdGFibGVSZWR1Y2VyKHN0YXRlID0gaW5pdGlhbFN0YXRlLCBhY3Rpb246IFRhYmxlQWN0aW9ucyk6IHsgW2lkOiBzdHJpbmddOiBUYWJsZVN0YXRlOyB9IHtcbiAgc3dpdGNoIChhY3Rpb24udHlwZSkge1xuXG4gICAgY2FzZSBUYWJsZUFjdGlvblR5cGVzLkxvYWRGaWx0ZXI6XG4gICAgICByZXR1cm4gc3RhdGVbYWN0aW9uLmlkXTtcbiAgICBjYXNlIFRhYmxlQWN0aW9uVHlwZXMuQXBwZW5kRmlsdGVyOlxuICAgICAgICBzdGF0ZVthY3Rpb24uaWRdID0ge1xuICAgICAgICAgIC4uLnN0YXRlW2FjdGlvbi5pZF0sXG4gICAgICAgICAgZmlsdGVyOiBjbG9uZURlZXAoYWN0aW9uLmZpbHRlcilcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHN0YXRlO1xuXG4gICAgY2FzZSBUYWJsZUFjdGlvblR5cGVzLkFwcGVuZFN0YXRlOlxuICAgICAgICAgIHN0YXRlW2FjdGlvbi5pZF0gPSB7XG4gICAgICAgICAgICAuLi5zdGF0ZVthY3Rpb24uaWRdLFxuICAgICAgICAgICAgdGFibGU6IGFjdGlvbi5kYXRhXG4gICAgICAgICAgfTtcbiAgICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5neFRhYmxlc1N0YXRlIHtcbiAgdGFibGVzOiB7XG4gICAgW2lkOiBzdHJpbmddOiBUYWJsZVN0YXRlO1xuICB9O1xufVxuXG5leHBvcnQgY29uc3QgdGFibGVSZWR1Y2VyczogQWN0aW9uUmVkdWNlck1hcDxOZ3hUYWJsZXNTdGF0ZT4gPSB7XG4gIHRhYmxlczogdGFibGVSZWR1Y2VyLFxufTtcblxuZXhwb3J0IGNvbnN0IGZlYXR1cmVOYW1lID0gJ3RhYmxlcyc7XG5cbmV4cG9ydCBjb25zdCBnZXRUYWJsZXNTdGF0ZSA9IGNyZWF0ZUZlYXR1cmVTZWxlY3RvcihmZWF0dXJlTmFtZSk7XG5cbmV4cG9ydCBjb25zdCBzZWxlY3RUYWJsZSA9IGNyZWF0ZVNlbGVjdG9yKFxuICBnZXRUYWJsZXNTdGF0ZSxcbiAgKHN0YXRlOiBOZ3hUYWJsZXNTdGF0ZSwgcHJvcHM6IHsgaWQ6IHN0cmluZyB9KSA9PiB7XG4gICAgcmV0dXJuIHN0YXRlLnRhYmxlc1twcm9wcy5pZF07XG4gIH1cbik7XG4iLCJpbXBvcnQge1xuICAgIERpcmVjdGl2ZSwgT3B0aW9uYWwsIElucHV0LCBPbkluaXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgc2VsZWN0LCBTdG9yZSB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcbmltcG9ydCB7IE5neFRhYmxlc1N0YXRlIH0gZnJvbSAnLi4vcmVkdWNlcnMnO1xuaW1wb3J0IHsgQWR2YW5jZWRUYWJsZUNvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvYWR2YW5jZWQtdGFibGUvYWR2YW5jZWQtdGFibGUuY29tcG9uZW50JztcbmltcG9ydCAqIGFzIGZyb21UYWJsZXMgZnJvbSAnLi4vcmVkdWNlcnMnO1xuaW1wb3J0IHsgZmlyc3QgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBBcHBlbmRTdGF0ZSB9IGZyb20gJy4uL2FjdGlvbnMvdGFibGUuYWN0aW9ucyc7XG5cbkBEaXJlY3RpdmUoXG4gICAge1xuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IGRpcmVjdGl2ZS1zZWxlY3RvclxuICAgICAgICBzZWxlY3RvcjogJ1t0YWJsZVN0YXRlXScsXG4gICAgfSxcbilcbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpkaXJlY3RpdmUtY2xhc3Mtc3VmZml4XG5leHBvcnQgY2xhc3MgQWR2YW5jZWRUYWJsZVN0YXRlIGltcGxlbWVudHMgT25Jbml0IHtcblxuICAgIEBJbnB1dCgpIHRhYmxlU3RhdGU/OiBzdHJpbmc7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHRhYmxlOiBBZHZhbmNlZFRhYmxlQ29tcG9uZW50LFxuICAgICAgICBAT3B0aW9uYWwoKSBwcml2YXRlIHN0b3JlOiBTdG9yZTxOZ3hUYWJsZXNTdGF0ZT4pIHtcbiAgICB9XG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnN0b3JlID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRhYmxlLnN0YXRlU2F2ZSA9IHRydWU7XG4gICAgICAgIHRoaXMudGFibGUuc3RhdGVMb2FkQ2FsbGJhY2sgPSAoc2V0dGluZ3MsIGNhbGxiYWNrKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnN0b3JlLnBpcGUoc2VsZWN0KGZyb21UYWJsZXMuc2VsZWN0VGFibGUsIHsgaWQ6IHRoaXMudGFibGVTdGF0ZSBhcyBzdHJpbmcgfSksIGZpcnN0KCkpLnN1YnNjcmliZSgoc3RhdGU6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKHN0YXRlICYmIHN0YXRlLnRhYmxlKTtcbiAgICAgICAgICAgICAgICBpZiAoc3RhdGUgJiYgc3RhdGUudGFibGUgJiYgc3RhdGUudGFibGUuQ29sUmVvcmRlcikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRhYmxlLmRhdGFUYWJsZS5jb2xSZW9yZGVyLm9yZGVyKHN0YXRlLnRhYmxlLkNvbFJlb3JkZXIsIHRydWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICBsZXQgZmlyc3REcmF3ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy50YWJsZS5kcmF3LnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICBpZiAoZmlyc3REcmF3ID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLnRhYmxlLmRhdGFUYWJsZSA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmlyc3REcmF3ID0gZmFsc2U7XG4gICAgICAgICAgICBjb25zdCBsb2FkZVN0YXRlU2V0dGluZ3M6IHtcbiAgICAgICAgICAgICAgICBvU2F2ZWRTdGF0ZT86IHtcbiAgICAgICAgICAgICAgICAgICAgQ29sUmVvcmRlcj86IG51bWJlcltdO1xuICAgICAgICAgICAgICAgICAgICBzY3JvbGxlcjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdG9wUm93OiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICBiYXNlU2Nyb2xsVG9wOiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICBiYXNlUm93VG9wOiBudW1iZXJcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gPSB0aGlzLnRhYmxlLmRhdGFUYWJsZS5zZXR0aW5ncygpWzBdO1xuICAgICAgICAgICAgY29uc3Qgc2Nyb2xsZXJTZXR0aW5ncyA9IGxvYWRlU3RhdGVTZXR0aW5ncy5vU2F2ZWRTdGF0ZSAmJlxuICAgICAgICAgICAgICAgIGxvYWRlU3RhdGVTZXR0aW5ncy5vU2F2ZWRTdGF0ZS5zY3JvbGxlcjtcbiAgICAgICAgICAgIGlmIChzY3JvbGxlclNldHRpbmdzICYmIHNjcm9sbGVyU2V0dGluZ3MudG9wUm93KSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2Nyb2xsZXIgPSB0aGlzLnRhYmxlLmRhdGFUYWJsZS5zY3JvbGxlcigpO1xuICAgICAgICAgICAgICAgIHNjcm9sbGVyLnNjcm9sbFRvUm93KHNjcm9sbGVyU2V0dGluZ3MudG9wUm93LCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMudGFibGUuc3RhdGVTYXZlQ2FsbGJhY2sgPSAoc2V0dGluZ3MsIGRhdGEpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IEFwcGVuZFN0YXRlKHRoaXMudGFibGVTdGF0ZSBhcyBzdHJpbmcsIGRhdGEpKTtcbiAgICAgICAgfTtcbiAgICB9XG59XG4iLCJpbXBvcnQge1xuICAgIERpcmVjdGl2ZSwgT3B0aW9uYWwsIElucHV0LCBPbkluaXQsIE9uRGVzdHJveVxuICB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgc2VsZWN0LCBTdG9yZSB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcbmltcG9ydCB7IEFwcGVuZEZpbHRlciB9IGZyb20gJy4uL2FjdGlvbnMvdGFibGUuYWN0aW9ucyc7XG5pbXBvcnQgeyBBZHZhbmNlZFRhYmxlU2VhcmNoQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy9hZHZhbmNlZC10YWJsZS9hZHZhbmNlZC10YWJsZS1zZWFyY2guY29tcG9uZW50JztcbmltcG9ydCB7IE5neFRhYmxlc1N0YXRlLCBzZWxlY3RUYWJsZSB9IGZyb20gJy4uL3JlZHVjZXJzJztcbmltcG9ydCB7IGZpcnN0IH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQWR2YW5jZWRUYWJsZVN0YXRlIH0gZnJvbSAnLi9hZHZhbmNlLXRhYmxlLXN0YXRlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGlzRW1wdHkgfSBmcm9tICdsb2Rhc2gnO1xuXG4gIGV4cG9ydCBjbGFzcyBBZHZhbmNlZFRhYmxlU2VhcmNoQ29tcG9uZW50Tm90TnVsbCBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgIHN1cGVyKCdBZHZhbmNlZCB0YWJsZSBzZWFyY2ggY29tcG9uZW50IGNhbm5vdCBiZSBlbXB0eSBhdCB0aGlzIGNvbnRleHQuJyk7XG4gICAgfVxuICB9XG5cbiAgQERpcmVjdGl2ZShcbiAgIHtcbiAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBkaXJlY3RpdmUtc2VsZWN0b3JcbiAgICAgc2VsZWN0b3I6ICdbc2VhcmNoU3RhdGVdJyxcbiAgIH0sXG4gIClcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmRpcmVjdGl2ZS1jbGFzcy1zdWZmaXhcbiAgZXhwb3J0IGNsYXNzIEFkdmFuY2VkU2VhcmNoU3RhdGUgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cbiAgICBASW5wdXQoKSBzZWFyY2hTdGF0ZT86IHN0cmluZztcbiAgICBwcml2YXRlIGZpbHRlckNoYW5nZVN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcbiAgICBwcml2YXRlIHRhYmxlSW5pdFN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcblxuICAgIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBzZWFyY2g6IEFkdmFuY2VkVGFibGVTZWFyY2hDb21wb25lbnQsXG4gICAgICAgIEBPcHRpb25hbCgpIHByb3RlY3RlZCBzdG9yZTogU3RvcmU8Tmd4VGFibGVzU3RhdGU+KSB7XG4gICAgfVxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgaWYgKHRoaXMuc3RvcmUgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5zZWFyY2ggPT0gbnVsbCkge1xuICAgICAgICAgIHRocm93IG5ldyBBZHZhbmNlZFRhYmxlU2VhcmNoQ29tcG9uZW50Tm90TnVsbCgpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuc2VhcmNoLnRhYmxlKSB7XG4gICAgICAgICAgLy8gc2V0IGF1dG8gbG9hZCB0byBmYWxzZVxuICAgICAgICAgIHRoaXMuc2VhcmNoLnRhYmxlLmF1dG9Mb2FkID0gZmFsc2U7XG4gICAgICAgICAgLy8gaGFuZGxlIGZpbHRlcmluZ1xuICAgICAgICAgIHRoaXMuZmlsdGVyQ2hhbmdlU3Vic2NyaXB0aW9uID0gdGhpcy5zZWFyY2guZmlsdGVyQ2hhbmdlLnN1YnNjcmliZSgoZmlsdGVyKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm9uU2VhcmNoRmlsdGVyKGZpbHRlcik7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgLy8gYXBwbHkgdGFibGUgc3RhdGVcbiAgICAgICAgICB0aGlzLmFwcGx5VGFibGVTdGF0ZSgpO1xuICAgICAgICAgIC8vIGhhbmRsZSB0YWJsZSBpbml0XG4gICAgICAgICAgdGhpcy50YWJsZUluaXRTdWJzY3JpcHRpb24gPSB0aGlzLnNlYXJjaC50YWJsZS5pbml0LnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5vblRhYmxlSW5pdCgpO1xuICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBhcHBseVRhYmxlU3RhdGUoKSB7XG4gICAgICBpZiAodGhpcy5zZWFyY2gudGFibGUpIHtcbiAgICAgICAgLy8gaGFuZGxlIHRhYmxlIHN0YXRlICh2aWEgZGlyZWN0aXZlKVxuICAgICAgICBjb25zdCB0YWJsZVN0YXRlID0gbmV3IEFkdmFuY2VkVGFibGVTdGF0ZSh0aGlzLnNlYXJjaC50YWJsZSwgdGhpcy5zdG9yZSk7XG4gICAgICAgIHRhYmxlU3RhdGUudGFibGVTdGF0ZSA9IHRoaXMuc2VhcmNoU3RhdGUgYXMgc3RyaW5nO1xuICAgICAgICB0YWJsZVN0YXRlLm5nT25Jbml0KCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG9uVGFibGVJbml0KCkge1xuICAgICAgdGhpcy5zdG9yZS5waXBlKHNlbGVjdChzZWxlY3RUYWJsZSwgeyBpZDogdGhpcy5zZWFyY2hTdGF0ZSBhcyBzdHJpbmd9KSwgZmlyc3QoKSkuc3Vic2NyaWJlKChzdGF0ZTogYW55KSA9PiB7XG4gICAgICAgIC8vIHVzZSBvcmRlclxuICAgICAgICBpZiAoc3RhdGUpIHtcbiAgICAgICAgICBpZiAoc3RhdGUub3JkZXIgJiYgc3RhdGUub3JkZXIubGVuZ3RoICYmIHRoaXMuc2VhcmNoLnRhYmxlKSB7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaC50YWJsZS5kYXRhVGFibGUub3JkZXIoc3RhdGUub3JkZXIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyB1c2UgdGV4dCBzZWFyY2hcbiAgICAgICAgICBpZiAoc3RhdGUuZmlsdGVyICYmIHN0YXRlLmZpbHRlci5xICYmIHRoaXMuc2VhcmNoLnRhYmxlKSB7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaC50ZXh0ID0gc3RhdGUuZmlsdGVyLnE7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaC5jb2xsYXBzZWQgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoLnRhYmxlLnNlYXJjaCh0aGlzLnNlYXJjaC50ZXh0KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gdXNlIHByZWRlZmluZWQgc2VhcmNoXG4gICAgICAgICAgaWYgKHN0YXRlLmZpbHRlciAmJiBzdGF0ZS5maWx0ZXIucykge1xuICAgICAgICAgICAgdGhpcy5zZWFyY2guc2VsZWN0ZWRMaXN0ID0gdGhpcy5zZWFyY2gudXNlclNlYXJjaExpc3QuZmluZCgoaXRlbTogeyBuYW1lOiBzdHJpbmcgfSkgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gaXRlbS5uYW1lID09PSBzdGF0ZS5maWx0ZXIucztcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoLnNlYXJjaCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoc3RhdGUuZmlsdGVyKSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMoc3RhdGUuZmlsdGVyKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgLy8gc2V0IGNvbGxhcHNlZCB0byBmYWxzZSAoYWR2YW5jZWQgc2VhcmNoKVxuICAgICAgICAgICAgICB0aGlzLnNlYXJjaC5jb2xsYXBzZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgdGhpcy5zZWFyY2guZmlsdGVyID0gc3RhdGUuZmlsdGVyO1xuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zZWFyY2guc2VhcmNoKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIGVuc3VyZSBlbXB0eSBmaWx0ZXIgYXQgdGhpcyBtb21lbnRcbiAgICAgICAgICAvLyBiZWNhdXNlIHNlYXJjaCgpIGZ1bmN0aW9uIHRyaWdnZXJzIGEgc3RvcmUgZGlzcGF0Y2hcbiAgICAgICAgICB0aGlzLnNlYXJjaC5maWx0ZXIgPSB7fTtcbiAgICAgICAgICByZXR1cm4gdGhpcy5zZWFyY2guc2VhcmNoKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25TZWFyY2hGaWx0ZXIoZmlsdGVyOiBhbnkpIHtcbiAgICAgIGZpbHRlciA9IGlzRW1wdHkoZmlsdGVyKSA/IG51bGwgOiBmaWx0ZXI7XG4gICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBBcHBlbmRGaWx0ZXIodGhpcy5zZWFyY2hTdGF0ZSBhcyBzdHJpbmcsIGZpbHRlcikpO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgaWYgKHRoaXMuZmlsdGVyQ2hhbmdlU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgIHRoaXMuZmlsdGVyQ2hhbmdlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy50YWJsZUluaXRTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgdGhpcy50YWJsZUluaXRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgIH1cbiAgICB9XG59XG4iLCJpbXBvcnQgeyBEaXJlY3RpdmUsIE9uRGVzdHJveSwgT25Jbml0LCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmF2aWdhdGlvbkVuZCwgTmF2aWdhdGlvblN0YXJ0LCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgU3RvcmUgfSBmcm9tICdAbmdyeC9zdG9yZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEFkdmFuY2VkVGFibGVTZWFyY2hDb21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnRzL2FkdmFuY2VkLXRhYmxlL2FkdmFuY2VkLXRhYmxlLXNlYXJjaC5jb21wb25lbnQnO1xuaW1wb3J0IHsgTmd4VGFibGVzU3RhdGUgfSBmcm9tICcuLi9yZWR1Y2Vycyc7XG5pbXBvcnQgeyBBZHZhbmNlZFNlYXJjaFN0YXRlIH0gZnJvbSAnLi9hZHZhbmNlLXNlYXJjaC1zdGF0ZS5kaXJlY3RpdmUnO1xuXG5ARGlyZWN0aXZlKHtcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBkaXJlY3RpdmUtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdbcm91dGVyU2VhcmNoU3RhdGVdJ1xufSlcbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpkaXJlY3RpdmUtY2xhc3Mtc3VmZml4XG5leHBvcnQgY2xhc3MgQWR2YW5jZWRTZWFyY2hSb3V0ZXJTdGF0ZSBleHRlbmRzIEFkdmFuY2VkU2VhcmNoU3RhdGUgaW1wbGVtZW50cyBPbkRlc3Ryb3ksIE9uSW5pdCB7XG4gIHByaXZhdGUgX3JvdXRlclN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIF9lbnRlcmluZ1N0YXRlID0gdHJ1ZTtcbiAgcHJpdmF0ZSBfYXBwbHlTdGF0ZSA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBzZWFyY2g6IEFkdmFuY2VkVGFibGVTZWFyY2hDb21wb25lbnQsXG4gICAgQE9wdGlvbmFsKCkgcHJvdGVjdGVkIHN0b3JlOiBTdG9yZTxOZ3hUYWJsZXNTdGF0ZT4sXG4gICAgcHJpdmF0ZSByZWFkb25seSBfcm91dGVyOiBSb3V0ZXJcbiAgKSB7XG4gICAgLy8gY2FsbCBzdXBlciBjb25zdHJ1Y3RvclxuICAgIHN1cGVyKHNlYXJjaCwgc3RvcmUpO1xuICAgIC8vIHNldCBzZWFyY2ggc3RhdGUgZHluYW1pY2FsbHkgYWNjb3JkaW5nIHRvIHJvdXRlXG4gICAgdGhpcy5fcm91dGVyU3Vic2NyaXB0aW9uID0gdGhpcy5fcm91dGVyLmV2ZW50c1xuICAgICAgLnBpcGUoZmlsdGVyKChldmVudCkgPT4gZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uU3RhcnQgfHwgZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kKSlcbiAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBOYXZpZ2F0aW9uU3RhcnQgfCBOYXZpZ2F0aW9uRW5kKSA9PiB7XG4gICAgICAgIC8vIGNhcHR1cmUgdXJscyByZWdhcmRpbmcgdGFiIGNoYW5naW5nIHdoaWxlIHRoZSBjb21wb25lbnQgaXMgYWN0aXZlXG4gICAgICAgIGlmIChldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25TdGFydCAmJiAhdGhpcy5fZW50ZXJpbmdTdGF0ZSkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBzZXQgc2VhcmNoIHN0YXRlXG4gICAgICAgICAgICB0aGlzLnNlYXJjaFN0YXRlID0gbmV3IFVSTChldmVudC51cmwsIGxvY2F0aW9uLm9yaWdpbikucGF0aG5hbWU7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdBbiBlcnJvciBvY2N1cmVkIHdoaWxlIHRyeWluZyB0byBzZXQgc2VhcmNoIHN0YXRlIGZvciB0aGUgY3VycmVudCB0YWJsZScsIGVycik7XG4gICAgICAgICAgICAvLyBmYWxsYmFjayB0byBldmVudCB1cmxcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoU3RhdGUgPSBldmVudC51cmw7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIHRvb2dsZSBhcHBseVN0YXRlXG4gICAgICAgICAgdGhpcy5fYXBwbHlTdGF0ZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY2FwdHVyZSB1cmwgb2YgdGhlIGZpcnN0IGFjdGl2YXRpb24gb2YgdGhlIGNvbXBvbmVudCAoZS5nLiBjb21pbmcgZnJvbSBhbm90aGVyIHJvdXRlKVxuICAgICAgICBpZiAoZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kICYmIHRoaXMuX2VudGVyaW5nU3RhdGUpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gc2V0IHNlYXJjaCBzdGF0ZVxuICAgICAgICAgICAgdGhpcy5zZWFyY2hTdGF0ZSA9IG5ldyBVUkwoZXZlbnQudXJsQWZ0ZXJSZWRpcmVjdHMsIGxvY2F0aW9uLm9yaWdpbikucGF0aG5hbWU7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdBbiBlcnJvciBvY2N1cmVkIHdoaWxlIHRyeWluZyB0byBzZXQgc2VhcmNoIHN0YXRlIGZvciB0aGUgY3VycmVudCB0YWJsZScsIGVycik7XG4gICAgICAgICAgICAvLyBmYWxsYmFjayB0byBldmVudCB1cmxBZnRlclJlZGlyZWN0c1xuICAgICAgICAgICAgdGhpcy5zZWFyY2hTdGF0ZSA9IGV2ZW50LnVybEFmdGVyUmVkaXJlY3RzO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyB0b2dnbGUgZW50ZXJpbmdTdGF0ZVxuICAgICAgICAgIHRoaXMuX2VudGVyaW5nU3RhdGUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fYXBwbHlTdGF0ZSkge1xuICAgICAgICAgIC8vIGFwcGx5IG5ldyB0YWJsZSBzdGF0ZVxuICAgICAgICAgIHN1cGVyLmFwcGx5VGFibGVTdGF0ZSgpO1xuICAgICAgICAgIHRoaXMuX2FwcGx5U3RhdGUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAvLyBkZXN0cm95IG93biBzdWJzY3JpcHRpb25zXG4gICAgaWYgKHRoaXMuX3JvdXRlclN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5fcm91dGVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIC8vIGRlc3Ryb3kgcGFyZW50IHN1YnNjcmlwdGlvbnNcbiAgICByZXR1cm4gc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgfVxufVxuIiwiaW1wb3J0IHtOZ01vZHVsZSwgT25Jbml0LCBDVVNUT01fRUxFTUVOVFNfU0NIRU1BfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Q29tbW9uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtBZHZhbmNlZFRhYmxlQ29tcG9uZW50LCBDT0xVTU5fRk9STUFUVEVSU30gZnJvbSAnLi9jb21wb25lbnRzL2FkdmFuY2VkLXRhYmxlL2FkdmFuY2VkLXRhYmxlLmNvbXBvbmVudCc7XG5pbXBvcnQge1RyYW5zbGF0ZU1vZHVsZSwgVHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge0FkdmFuY2VkVGFibGVTZWFyY2hDb21wb25lbnR9IGZyb20gJy4vY29tcG9uZW50cy9hZHZhbmNlZC10YWJsZS9hZHZhbmNlZC10YWJsZS1zZWFyY2guY29tcG9uZW50JztcbmltcG9ydCB7IERhdGVQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQge0J0bkV4cERpcmVjdGl2ZX0gZnJvbSAnLi9kaXJlY3RpdmVzL2J0bmV4cC5kaXJlY3RpdmUnO1xuaW1wb3J0IHtBZHZhbmNlZFRhYmxlU2V0dGluZ3NDb21wb25lbnR9IGZyb20gJy4vY29tcG9uZW50cy9hZHZhbmNlZC10YWJsZS9hZHZhbmNlZC10YWJsZS1zZXR0aW5ncy5jb21wb25lbnQnO1xuaW1wb3J0IHtTaGFyZWRNb2R1bGUsIFRlbXBsYXRlUGlwZX0gZnJvbSAnQHVuaXZlcnNpcy9jb21tb24nO1xuaW1wb3J0IHsgQWR2YW5jZWRUYWJsZU1vZGFsQmFzZUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9hZHZhbmNlZC10YWJsZS1tb2RhbC9hZHZhbmNlZC10YWJsZS1tb2RhbC1iYXNlLmNvbXBvbmVudCc7XG5pbXBvcnQge1JvdXRlck1vZGFsTW9kdWxlfSBmcm9tICdAdW5pdmVyc2lzL2NvbW1vbi9yb3V0aW5nJztcbmltcG9ydCB7IEFkdmFuY2VkU2VhcmNoRm9ybUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9hZHZhbmNlZC1zZWFyY2gtZm9ybS9hZHZhbmNlZC1zZWFyY2gtZm9ybS5jb21wb25lbnQnO1xuaW1wb3J0IHtBZHZhbmNlZEZvcm1zTW9kdWxlfSBmcm9tICdAdW5pdmVyc2lzL2Zvcm1zJztcbmltcG9ydCB7Rm9ybWlvTW9kdWxlfSBmcm9tICdhbmd1bGFyLWZvcm1pbyc7XG5pbXBvcnQgeyBBZHZhbmNlZExpc3RDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvYWR2YW5jZWQtbGlzdC9hZHZhbmNlZC1saXN0LmNvbXBvbmVudCc7XG5pbXBvcnQge1JvdXRlck1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7XG4gICAgQWR2YW5jZWRTZWFyY2hDb25maWd1cmF0aW9uUmVzb2x2ZXIsXG4gICAgQWR2YW5jZWRUYWJsZUNvbmZpZ3VyYXRpb25SZXNvbHZlclxufSBmcm9tICcuL2NvbXBvbmVudHMvYWR2YW5jZWQtdGFibGUvYWR2YW5jZWQtdGFibGUtcmVzb2x2ZXJzJztcbmltcG9ydCB7QWR2YW5jZWRSb3dBY3Rpb25Db21wb25lbnR9IGZyb20gJy4vY29tcG9uZW50cy9hZHZhbmNlZC1yb3ctYWN0aW9uL2FkdmFuY2VkLXJvdy1hY3Rpb24uY29tcG9uZW50JztcbmltcG9ydCB7Rk9STUFUVEVSU30gZnJvbSAnLi9jb21wb25lbnRzL2FkdmFuY2VkLXRhYmxlL2FkdmFuY2VkLXRhYmxlLmZvcm1hdHRlcnMuaW50ZXJmYWNlJztcblxuaW1wb3J0IHtUQUJMRVNfRUx9IGZyb20gJy4vaTE4bi90YWJsZXMuZWwnO1xuaW1wb3J0IHtUQUJMRVNfRU59IGZyb20gJy4vaTE4bi90YWJsZXMuZW4nO1xuaW1wb3J0IHsgVGFibGVTaW1wbGVIZWFkZXJDb21wb25lbnQsIFNpbXBsZUhlYWRlclRvb2xzQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3RhYmxlLXNpbXBsZS1oZWFkZXIvdGFibGUtc2ltcGxlLWhlYWRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgTW9kYWxNb2R1bGUgfSBmcm9tICduZ3gtYm9vdHN0cmFwL21vZGFsJztcbmltcG9ydCB7IFByb2dyZXNzYmFyTW9kdWxlIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9wcm9ncmVzc2Jhcic7XG5pbXBvcnQgeyBBZHZhbmNlZFNlbGVjdENvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9hZHZhbmNlZC1zZWxlY3QvYWR2YW5jZWQtc2VsZWN0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBZHZhbmNlZFNlbGVjdFNlcnZpY2UgfSBmcm9tICcuL2NvbXBvbmVudHMvYWR2YW5jZWQtc2VsZWN0L2FkdmFuY2VkLXNlbGVjdC5zZXJ2aWNlJztcbmltcG9ydCB7IEFkdmFuY2VkVGFibGVFZGl0b3JEaXJlY3RpdmUgfSBmcm9tICcuL2RpcmVjdGl2ZXMvYWR2YW5jZWQtdGFibGUtZWRpdG9yLmRpcmVjdGl2ZSc7XG5pbXBvcnQge0FkdmFuY2VkQWdncmVnYXRvckNvbXBvbmVudH0gZnJvbSAnLi9jb21wb25lbnRzL2FkdmFuY2VkLWFnZ3JlZ2F0b3IvYWR2YW5jZWQtYWdncmVnYXRvci5jb21wb25lbnQnO1xuaW1wb3J0IHtBZHZhbmNlZEFnZ3JlZ2F0b3JMaXN0Q29tcG9uZW50fSBmcm9tICcuL2NvbXBvbmVudHMvYWR2YW5jZWQtYWdncmVnYXRvci1saXN0L2FkdmFuY2VkLWFnZ3JlZ2F0b3ItbGlzdC5jb21wb25lbnQnO1xuaW1wb3J0IHtBZHZhbmNlZEFnZ3JlZ2F0b3JTZXJ2aWNlfSBmcm9tICcuL3NlcnZpY2VzL2FkdmFuY2VkLWFnZ3JlZ2F0b3IvYWR2YW5jZWQtYWdncmVnYXRvci5zZXJ2aWNlJztcbmltcG9ydCB7QWR2YW5jZWRBZ2dyZWdhdG9yUGlwZX0gZnJvbSAnLi9waXBlcy9hZHZhbmNlZC1hZ2dyZWdhdG9yLnBpcGUnO1xuaW1wb3J0IHtHcm91cEJ5UGlwZSwgTmdQaXBlc01vZHVsZX0gZnJvbSAnbmd4LXBpcGVzJztcbmltcG9ydCB7UGFyc2VUaXRsZVBpcGV9IGZyb20gJy4vcGlwZXMvYWR2YW5zZWQtYWdncmVnYXRvci1saXN0LXRpdGxlLXBhcnNlLnBpcGUnO1xuaW1wb3J0IHtBZGRJdGVtc0NvbXBvbmVudH0gZnJvbSAnLi9jb21wb25lbnRzL2FkZC1pdGVtcy9hZGQtaXRlbXMuY29tcG9uZW50JztcbmltcG9ydCB7IEFkdmFuY2VkU2VhcmNoU3RhdGUgfSBmcm9tICcuL2RpcmVjdGl2ZXMvYWR2YW5jZS1zZWFyY2gtc3RhdGUuZGlyZWN0aXZlJztcbmltcG9ydCB7IEFkdmFuY2VkVGFibGVTdGF0ZSB9IGZyb20gJy4vZGlyZWN0aXZlcy9hZHZhbmNlLXRhYmxlLXN0YXRlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBBZHZhbmNlZFNlYXJjaFJvdXRlclN0YXRlIH0gZnJvbSAnLi9kaXJlY3RpdmVzL2FkdmFuY2VkLXNlYXJjaC1yb3V0ZXItc3RhdGUuZGlyZWN0aXZlJztcbmltcG9ydCB7IEFkdmFuY2VkVGFibGVTZWFyY2hCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2FkdmFuY2VkLXRhYmxlL2FkdmFuY2VkLXRhYmxlLXNlYXJjaC1iYXNlJztcbmltcG9ydCB7IENvbHVtblNlbGVjdG9yQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2NvbHVtbi1zZWxlY3Rvci9jb2x1bW4tc2VsZWN0b3IuY29tcG9uZW50JztcbmltcG9ydCB7IENvbHVtblNlbGVjdG9yU2VydmljZSB9IGZyb20gJy4vY29tcG9uZW50cy9jb2x1bW4tc2VsZWN0b3IvY29sdW1uLXNlbGVjdG9yLnNlcnZpY2UnO1xuXG5ATmdNb2R1bGUoe1xuICAgIGltcG9ydHM6IFtcbiAgICAgICAgQ29tbW9uTW9kdWxlLFxuICAgICAgICBTaGFyZWRNb2R1bGUsXG4gICAgICAgIFRyYW5zbGF0ZU1vZHVsZSxcbiAgICAgICAgRm9ybXNNb2R1bGUsXG4gICAgICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgICAgIFJvdXRlck1vZHVsZSxcbiAgICAgICAgUm91dGVyTW9kYWxNb2R1bGUsXG4gICAgICAgIEZvcm1pb01vZHVsZSxcbiAgICAgICAgQWR2YW5jZWRGb3Jtc01vZHVsZSxcbiAgICAgICAgU2hhcmVkTW9kdWxlLFxuICAgICAgICBNb2RhbE1vZHVsZSxcbiAgICAgICAgUHJvZ3Jlc3NiYXJNb2R1bGUsXG4gICAgICAgIE5nUGlwZXNNb2R1bGVcbiAgICBdLFxuICAgIHByb3ZpZGVyczogW0RhdGVQaXBlLCBUZW1wbGF0ZVBpcGUsXG4gICAgICB7XG4gICAgICAgIHByb3ZpZGU6IENPTFVNTl9GT1JNQVRURVJTLFxuICAgICAgICB1c2VWYWx1ZTogRk9STUFUVEVSU1xuICAgICAgfSxcblxuICAgICAgQWR2YW5jZWRUYWJsZUNvbmZpZ3VyYXRpb25SZXNvbHZlcixcbiAgICAgICAgQWR2YW5jZWRTZWFyY2hDb25maWd1cmF0aW9uUmVzb2x2ZXIsXG4gICAgICAgIEFkdmFuY2VkU2VsZWN0U2VydmljZSxcbiAgICAgICAgQWR2YW5jZWRBZ2dyZWdhdG9yU2VydmljZSxcbiAgICAgICAgQ29sdW1uU2VsZWN0b3JTZXJ2aWNlLFxuICAgICAgICBHcm91cEJ5UGlwZVxuICAgICAgXSxcbiAgICBkZWNsYXJhdGlvbnM6IFtcbiAgICAgICAgQWR2YW5jZWRUYWJsZUNvbXBvbmVudCxcbiAgICAgICAgQWR2YW5jZWRUYWJsZVNlYXJjaEJhc2VDb21wb25lbnQsXG4gICAgICAgIEFkdmFuY2VkVGFibGVTZWFyY2hDb21wb25lbnQsXG4gICAgICAgIEJ0bkV4cERpcmVjdGl2ZSxcbiAgICAgICAgQWR2YW5jZWRUYWJsZVNldHRpbmdzQ29tcG9uZW50LFxuICAgICAgICBBZHZhbmNlZFRhYmxlTW9kYWxCYXNlQ29tcG9uZW50LFxuICAgICAgICBBZHZhbmNlZFNlYXJjaEZvcm1Db21wb25lbnQsXG4gICAgICAgIEFkdmFuY2VkTGlzdENvbXBvbmVudCxcbiAgICAgICAgQWR2YW5jZWRSb3dBY3Rpb25Db21wb25lbnQsXG4gICAgICAgIFRhYmxlU2ltcGxlSGVhZGVyQ29tcG9uZW50LFxuICAgICAgICBTaW1wbGVIZWFkZXJUb29sc0NvbXBvbmVudCxcbiAgICAgICAgQWR2YW5jZWRTZWxlY3RDb21wb25lbnQsXG4gICAgICAgIEFkdmFuY2VkVGFibGVFZGl0b3JEaXJlY3RpdmUsXG4gICAgICAgIEFkdmFuY2VkQWdncmVnYXRvckNvbXBvbmVudCxcbiAgICAgICAgQWR2YW5jZWRBZ2dyZWdhdG9yTGlzdENvbXBvbmVudCxcbiAgICAgICAgQWR2YW5jZWRBZ2dyZWdhdG9yUGlwZSxcbiAgICAgICAgUGFyc2VUaXRsZVBpcGUsXG4gICAgICAgIEFkZEl0ZW1zQ29tcG9uZW50LFxuICAgICAgICBBZHZhbmNlZFNlYXJjaFN0YXRlLFxuICAgICAgICBBZHZhbmNlZFRhYmxlU3RhdGUsXG4gICAgICAgIEFkdmFuY2VkU2VhcmNoUm91dGVyU3RhdGUsXG4gICAgICAgIENvbHVtblNlbGVjdG9yQ29tcG9uZW50XG4gICAgXSxcbiAgICBleHBvcnRzOiBbXG4gICAgICAgIEFkdmFuY2VkVGFibGVDb21wb25lbnQsXG4gICAgICAgIEFkdmFuY2VkVGFibGVTZWFyY2hDb21wb25lbnQsXG4gICAgICAgIEJ0bkV4cERpcmVjdGl2ZSxcbiAgICAgICAgQWR2YW5jZWRUYWJsZVNldHRpbmdzQ29tcG9uZW50LFxuICAgICAgICBBZHZhbmNlZFNlYXJjaEZvcm1Db21wb25lbnQsXG4gICAgICAgIEFkdmFuY2VkTGlzdENvbXBvbmVudCxcbiAgICAgICAgQWR2YW5jZWRSb3dBY3Rpb25Db21wb25lbnQsXG4gICAgICAgIFRhYmxlU2ltcGxlSGVhZGVyQ29tcG9uZW50LFxuICAgICAgICBTaW1wbGVIZWFkZXJUb29sc0NvbXBvbmVudCxcbiAgICAgICAgQWR2YW5jZWRTZWxlY3RDb21wb25lbnQsXG4gICAgICAgIEFkdmFuY2VkVGFibGVFZGl0b3JEaXJlY3RpdmUsXG4gICAgICAgIEFkdmFuY2VkQWdncmVnYXRvckNvbXBvbmVudCxcbiAgICAgICAgQWR2YW5jZWRBZ2dyZWdhdG9yTGlzdENvbXBvbmVudCxcbiAgICAgICAgQWRkSXRlbXNDb21wb25lbnQsXG4gICAgICAgIEFkdmFuY2VkU2VhcmNoU3RhdGUsXG4gICAgICAgIEFkdmFuY2VkVGFibGVTdGF0ZSxcbiAgICAgICAgQWR2YW5jZWRTZWFyY2hSb3V0ZXJTdGF0ZSxcbiAgICAgICAgQ29sdW1uU2VsZWN0b3JDb21wb25lbnRcbiAgICBdLFxuICAgIGVudHJ5Q29tcG9uZW50czogW1xuICAgICAgICBBZHZhbmNlZFRhYmxlTW9kYWxCYXNlQ29tcG9uZW50LFxuICAgICAgICBBZHZhbmNlZFRhYmxlU2V0dGluZ3NDb21wb25lbnQsXG4gICAgICAgIEFkdmFuY2VkUm93QWN0aW9uQ29tcG9uZW50LFxuICAgICAgICBBZHZhbmNlZFNlbGVjdENvbXBvbmVudCxcbiAgICAgICAgQWRkSXRlbXNDb21wb25lbnQsXG4gICAgICAgIENvbHVtblNlbGVjdG9yQ29tcG9uZW50XG4gICAgXSxcbiAgICBzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV1cbn0pXG5leHBvcnQgY2xhc3MgVGFibGVzTW9kdWxlIGltcGxlbWVudHMgT25Jbml0IHtcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIF90cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlKSB7XG4gICAgICAgIHRoaXMubmdPbkluaXQoKS5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgbG9hZGluZyB0YWJsZXMgbW9kdWxlJyk7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLnNldFRyYW5zbGF0aW9uKCdlbicsIFRBQkxFU19FTiwgdHJ1ZSk7XG4gICAgICAgIHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2Uuc2V0VHJhbnNsYXRpb24oJ2VsJywgVEFCTEVTX0VMLCB0cnVlKTtcbiAgICB9XG5cbn1cbiJdLCJuYW1lcyI6WyJ0c2xpYl8xLl9fZXh0ZW5kcyIsInRzbGliXzEuX192YWx1ZXMiLCJJU082MzkxLmdldE5hdGl2ZU5hbWUiLCJmaWx0ZXIiLCJzZWxlY3QiLCJza2lwIiwiZnJvbVRhYmxlcy5zZWxlY3RUYWJsZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7cUJBc0JpQixFQUFFOzs7Ozs7SUFJSCxnQ0FBUTs7OztjQUFDLElBQVk7O1FBQ2pDLElBQUksTUFBTSxHQUFHLHVCQUF1QixDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0QsSUFBSSxPQUFPLE1BQU0sS0FBSyxVQUFVLEVBQUU7WUFDaEMsT0FBTyxNQUFNLENBQUM7U0FDZjtRQUNELE1BQU0sR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDeEIsdUJBQXVCLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDeEQsT0FBTyxNQUFNLENB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
|
|
8006
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5pdmVyc2lzLW5neC10YWJsZXMuanMubWFwIiwic291cmNlcyI6WyJuZzovL0B1bml2ZXJzaXMvbmd4LXRhYmxlcy9saWIvY29tcG9uZW50cy9hZHZhbmNlZC10YWJsZS9hZHZhbmNlZC10YWJsZS5mb3JtYXR0ZXJzLnRzIiwibmc6Ly9AdW5pdmVyc2lzL25neC10YWJsZXMvbGliL2NvbXBvbmVudHMvYWR2YW5jZWQtdGFibGUvYWR2YW5jZWQtZmlsdGVyLXZhbHVlLXByb3ZpZGVyLnNlcnZpY2UudHMiLCJuZzovL0B1bml2ZXJzaXMvbmd4LXRhYmxlcy9saWIvY29tcG9uZW50cy9jb2x1bW4tc2VsZWN0b3IvY29sdW1uLXNlbGVjdG9yLmNvbXBvbmVudC50cyIsIm5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzL2xpYi9jb21wb25lbnRzL2NvbHVtbi1zZWxlY3Rvci9jb2x1bW4tc2VsZWN0b3Iuc2VydmljZS50cyIsIm5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzL2xpYi90YWJsZXMuYWN0aXZhdGVkLXRhYmxlLnNlcnZpY2UudHMiLCJuZzovL0B1bml2ZXJzaXMvbmd4LXRhYmxlcy9saWIvZGlyZWN0aXZlcy9idG5leHAuZGlyZWN0aXZlLnRzIiwibmc6Ly9AdW5pdmVyc2lzL25neC10YWJsZXMvbGliL2NvbXBvbmVudHMvYWR2YW5jZWQtdGFibGUvYWR2YW5jZWQtdGFibGUuY29tcG9uZW50LnRzIiwibmc6Ly9AdW5pdmVyc2lzL25neC10YWJsZXMvbGliL2NvbXBvbmVudHMvYWR2YW5jZWQtbGlzdC9hZHZhbmNlZC1saXN0LmNvbXBvbmVudC50cyIsIm5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzL2xpYi9jb21wb25lbnRzL2FkdmFuY2VkLXJvdy1hY3Rpb24vYWR2YW5jZWQtcm93LWFjdGlvbi5jb21wb25lbnQudHMiLCJuZzovL0B1bml2ZXJzaXMvbmd4LXRhYmxlcy9saWIvY29tcG9uZW50cy9hZHZhbmNlZC10YWJsZS9hZHZhbmNlZC10YWJsZS1zZWFyY2gtYmFzZS50cyIsIm5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzL2xpYi9jb21wb25lbnRzL2FkdmFuY2VkLXNlYXJjaC1mb3JtL2FkdmFuY2VkLXNlYXJjaC1mb3JtLmNvbXBvbmVudC50cyIsIm5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzL2xpYi9jb21wb25lbnRzL2FkdmFuY2VkLXRhYmxlLW1vZGFsL2FkdmFuY2VkLXRhYmxlLW1vZGFsLWJhc2UuY29tcG9uZW50LnRzIiwibmc6Ly9AdW5pdmVyc2lzL25neC10YWJsZXMvbGliL2NvbXBvbmVudHMvYWR2YW5jZWQtc2VsZWN0L2FkdmFuY2VkLXNlbGVjdC5jb21wb25lbnQudHMiLCJuZzovL0B1bml2ZXJzaXMvbmd4LXRhYmxlcy9saWIvY29tcG9uZW50cy9hZHZhbmNlZC1zZWxlY3QvYWR2YW5jZWQtc2VsZWN0LnNlcnZpY2UudHMiLCJuZzovL0B1bml2ZXJzaXMvbmd4LXRhYmxlcy9saWIvY29tcG9uZW50cy9hZHZhbmNlZC10YWJsZS9hZHZhbmNlZC10YWJsZS1yZXNvbHZlcnMudHMiLCJuZzovL0B1bml2ZXJzaXMvbmd4LXRhYmxlcy9saWIvY29tcG9uZW50cy9hZHZhbmNlZC10YWJsZS9hZHZhbmNlZC10YWJsZS1zZXR0aW5ncy5jb21wb25lbnQudHMiLCJuZzovL0B1bml2ZXJzaXMvbmd4LXRhYmxlcy9saWIvY29tcG9uZW50cy9hZHZhbmNlZC10YWJsZS9hZHZhbmNlZC10YWJsZS1zZWFyY2guY29tcG9uZW50LnRzIiwibmc6Ly9AdW5pdmVyc2lzL25neC10YWJsZXMvbGliL2NvbXBvbmVudHMvYWR2YW5jZWQtdGFibGUvYWR2YW5jZWQtdGFibGUuZm9ybWF0dGVycy5pbnRlcmZhY2UudHMiLCJuZzovL0B1bml2ZXJzaXMvbmd4LXRhYmxlcy9saWIvY29tcG9uZW50cy90YWJsZS1zaW1wbGUtaGVhZGVyL3RhYmxlLXNpbXBsZS1oZWFkZXIuY29tcG9uZW50LnRzIiwibmc6Ly9AdW5pdmVyc2lzL25neC10YWJsZXMvbGliL2RpcmVjdGl2ZXMvYWR2YW5jZWQtdGFibGUtZWRpdG9yLmRpcmVjdGl2ZS50cyIsIm5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzL2xpYi9zZXJ2aWNlcy9hZHZhbmNlZC1hZ2dyZWdhdG9yL2FkdmFuY2VkLWFnZ3JlZ2F0b3Iuc2VydmljZS50cyIsIm5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzL2xpYi9jb21wb25lbnRzL2FkdmFuY2VkLWFnZ3JlZ2F0b3IvYWR2YW5jZWQtYWdncmVnYXRvci5jb21wb25lbnQudHMiLCJuZzovL0B1bml2ZXJzaXMvbmd4LXRhYmxlcy9saWIvY29tcG9uZW50cy9hZHZhbmNlZC1hZ2dyZWdhdG9yLWxpc3QvYWR2YW5jZWQtYWdncmVnYXRvci1saXN0LmNvbXBvbmVudC50cyIsIm5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzL2xpYi9jb21wb25lbnRzL2FkZC1pdGVtcy9hZGQtaXRlbXMuY29tcG9uZW50LnRzIiwibmc6Ly9AdW5pdmVyc2lzL25neC10YWJsZXMvbGliL3BpcGVzL2FkdmFuY2VkLWFnZ3JlZ2F0b3IucGlwZS50cyIsIm5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzL2xpYi9waXBlcy9hZHZhbnNlZC1hZ2dyZWdhdG9yLWxpc3QtdGl0bGUtcGFyc2UucGlwZS50cyIsIm5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzL2xpYi9pMThuL3RhYmxlcy5lbC50cyIsIm5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzL2xpYi9pMThuL3RhYmxlcy5lbi50cyIsIm5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzL2xpYi9hY3Rpb25zL3RhYmxlLmFjdGlvbnMudHMiLCJuZzovL0B1bml2ZXJzaXMvbmd4LXRhYmxlcy9saWIvcmVkdWNlcnMvaW5kZXgudHMiLCJuZzovL0B1bml2ZXJzaXMvbmd4LXRhYmxlcy9saWIvZGlyZWN0aXZlcy9hZHZhbmNlLXRhYmxlLXN0YXRlLmRpcmVjdGl2ZS50cyIsIm5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzL2xpYi9kaXJlY3RpdmVzL2FkdmFuY2Utc2VhcmNoLXN0YXRlLmRpcmVjdGl2ZS50cyIsIm5nOi8vQHVuaXZlcnNpcy9uZ3gtdGFibGVzL2xpYi9kaXJlY3RpdmVzL2FkdmFuY2VkLXNlYXJjaC1yb3V0ZXItc3RhdGUuZGlyZWN0aXZlLnRzIiwibmc6Ly9AdW5pdmVyc2lzL25neC10YWJsZXMvbGliL3RhYmxlcy5tb2R1bGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdGVtcGxhdGUsIGF0IH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IFRhYmxlQ29sdW1uQ29uZmlndXJhdGlvbiB9IGZyb20gJy4vYWR2YW5jZWQtdGFibGUuaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgRGF0ZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0ICogYXMgSVNPNjM5MSBmcm9tICdpc28tNjM5LTEvYnVpbGQnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIE5hdmlnYXRpb25FeHRyYXMsIFJvdXRlciwgVXJsVHJlZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5kZWNsYXJlIHZhciBqUXVlcnk6IGFueTtcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBZHZhbmNlZENvbHVtbkZvcm1hdHRlciBpbXBsZW1lbnRzIFRhYmxlQ29sdW1uQ29uZmlndXJhdGlvbiB7XG5cbiAgcHVibGljIHN0YXRpYyB0ZW1wbGF0ZUNhY2hlID0gbmV3IE1hcDxzdHJpbmcsIChkYXRhOiBhbnkpID0+IHN0cmluZz4oKTtcblxuICBwcm90ZWN0ZWQgaW5qZWN0b3I/OiBJbmplY3RvcjtcbiAgcHVibGljIGNsYXNzTmFtZT86IHN0cmluZztcbiAgcHVibGljIGRlZmF1bHRDb250ZW50Pzogc3RyaW5nO1xuICBwdWJsaWMgZm9ybWF0U3RyaW5nPzogc3RyaW5nO1xuICBwdWJsaWMgZm9ybWF0dGVyPzogc3RyaW5nO1xuICBwdWJsaWMgaGlkZGVuPzogYm9vbGVhbjtcbiAgcHVibGljIG5hbWU/OiBzdHJpbmc7XG4gIHB1YmxpYyBvcmRlcj86IHN0cmluZztcbiAgcHVibGljIHByb3BlcnR5Pzogc3RyaW5nO1xuICBwdWJsaWMgc29ydGFibGU/OiBib29sZWFuO1xuICBwdWJsaWMgdGl0bGUgPSAnJztcbiAgcHVibGljIGZvcm1hdE9wdGlvbnM/OiBhbnk7XG4gIHB1YmxpYyBhY3Rpb25zPzogQXJyYXk8YW55PjtcblxuICBwdWJsaWMgc3RhdGljIHRlbXBsYXRlKGV4cHI6IHN0cmluZyk6IChkYXRhOiBhbnkpID0+IHN0cmluZyB7XG4gICAgbGV0IHJlc3VsdCA9IEFkdmFuY2VkQ29sdW1uRm9ybWF0dGVyLnRlbXBsYXRlQ2FjaGUuZ2V0KGV4cHIpO1xuICAgIGlmICh0eXBlb2YgcmVzdWx0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICByZXN1bHQgPSB0ZW1wbGF0ZShleHByKTtcbiAgICBBZHZhbmNlZENvbHVtbkZvcm1hdHRlci50ZW1wbGF0ZUNhY2hlLnNldChleHByLCByZXN1bHQpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwdWJsaWMgYWJzdHJhY3QgcmVuZGVyKGRhdGE6IGFueSwgdHlwZTogc3RyaW5nLCByb3c6IGFueSwgbWV0YTogYW55KTogYW55O1xuXG4gIHByb3RlY3RlZCBjcmVhdGVVcmxUcmVlKGRhdGE6IGFueSwgb3B0aW9uczogeyBjb21tYW5kczogYW55W10sIG5hdmlnYXRpb25FeHRyYXM/OiBOYXZpZ2F0aW9uRXh0cmFzIH0pOiBVcmxUcmVlIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRpb25zLmNvbW1hbmRzKSAmJiB0aGlzLmluamVjdG9yKSB7XG4gICAgICBjb25zdCBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUgPSB0aGlzLmluamVjdG9yLmdldChBY3RpdmF0ZWRSb3V0ZSk7XG4gICAgICBjb25zdCByb3V0ZXI6IFJvdXRlciA9IHRoaXMuaW5qZWN0b3IuZ2V0KFJvdXRlcik7XG4gICAgICBjb25zdCBjb21tYW5kcyA9IG9wdGlvbnMuY29tbWFuZHMubWFwKChjb21tYW5kKSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgY29tbWFuZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICByZXR1cm4gQWR2YW5jZWRDb2x1bW5Gb3JtYXR0ZXIudGVtcGxhdGUoY29tbWFuZCkoZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbW1hbmQub3V0bGV0cykge1xuICAgICAgICAgIGNvbnN0IGNvbW1hbmRPdXRsZXRzID0ge307XG4gICAgICAgICAgT2JqZWN0LmtleXMoY29tbWFuZC5vdXRsZXRzKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY29tbWFuZC5vdXRsZXRzLCBrZXkpKSB7XG4gICAgICAgICAgICAgIGNvbnN0IG91dGxldCA9IGNvbW1hbmQub3V0bGV0c1trZXldO1xuICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvdXRsZXQpKSB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvbW1hbmRPdXRsZXRzLCBrZXksIHtcbiAgICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIHZhbHVlOiBvdXRsZXQubWFwKCh4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBBZHZhbmNlZENvbHVtbkZvcm1hdHRlci50ZW1wbGF0ZSh4KShkYXRhKTtcbiAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb21tYW5kT3V0bGV0cywga2V5LCB7XG4gICAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICB2YWx1ZTogb3V0bGV0LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG91dGxldHM6IGNvbW1hbmRPdXRsZXRzLFxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbW1hbmQ7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0ge307XG4gICAgICBsZXQgcmVwbGFjZVVybCA9IHRydWU7XG4gICAgICBjb25zdCBxdWVyeVBhcmFtRXh0cmFzID0gb3B0aW9ucy5uYXZpZ2F0aW9uRXh0cmFzICYmIG9wdGlvbnMubmF2aWdhdGlvbkV4dHJhcy5xdWVyeVBhcmFtcztcbiAgICAgIGlmIChxdWVyeVBhcmFtRXh0cmFzKSB7XG4gICAgICAgIE9iamVjdC5rZXlzKHF1ZXJ5UGFyYW1FeHRyYXMpLm1hcCgoa2V5KSA9PiB7XG4gICAgICAgICAgY29uc3QgdGV4dCA9IHF1ZXJ5UGFyYW1FeHRyYXNba2V5XTtcbiAgICAgICAgICBxdWVyeVBhcmFtc1trZXldID0gQWR2YW5jZWRDb2x1bW5Gb3JtYXR0ZXIudGVtcGxhdGUodGV4dCkoZGF0YSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbnMubmF2aWdhdGlvbkV4dHJhcyAmJiB0eXBlb2Ygb3B0aW9ucy5uYXZpZ2F0aW9uRXh0cmFzLnJlcGxhY2VVcmwgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJlcGxhY2VVcmwgPSBvcHRpb25zLm5hdmlnYXRpb25FeHRyYXMucmVwbGFjZVVybDtcbiAgICAgIH1cbiAgICAgIGxldCBza2lwTG9jYXRpb25DaGFuZ2UgPSBmYWxzZTtcbiAgICAgIGlmIChvcHRpb25zLm5hdmlnYXRpb25FeHRyYXMgJiYgdHlwZW9mIG9wdGlvbnMubmF2aWdhdGlvbkV4dHJhcy5za2lwTG9jYXRpb25DaGFuZ2UgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHNraXBMb2NhdGlvbkNoYW5nZSA9IG9wdGlvbnMubmF2aWdhdGlvbkV4dHJhcy5za2lwTG9jYXRpb25DaGFuZ2U7XG4gICAgICB9XG5cbiAgICAgIGxldCBmcmFnbWVudDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgaWYgKG9wdGlvbnMubmF2aWdhdGlvbkV4dHJhcyAmJiB0eXBlb2Ygb3B0aW9ucy5uYXZpZ2F0aW9uRXh0cmFzLmZyYWdtZW50ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBmcmFnbWVudCA9IG9wdGlvbnMubmF2aWdhdGlvbkV4dHJhcy5mcmFnbWVudDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJvdXRlci5jcmVhdGVVcmxUcmVlKGNvbW1hbmRzLFxuICAgICAgICB7XG4gICAgICAgICAgZnJhZ21lbnQsXG4gICAgICAgICAgcmVsYXRpdmVUbzogYWN0aXZhdGVkUm91dGUsXG4gICAgICAgICAgcXVlcnlQYXJhbXMsXG4gICAgICAgICAgcmVwbGFjZVVybCxcbiAgICAgICAgICBza2lwTG9jYXRpb25DaGFuZ2UsXG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT25BZHZhbmNlZENvbHVtbkFmdGVyUmVuZGVyIHtcbiAgYWZ0ZXJSZW5kZXIoY2VsbDogYW55LCBjZWxsRGF0YTogYW55LCByb3dEYXRhOiBhbnksIHJvd0luZGV4OiBudW1iZXIsIGNvbEluZGV4OiBudW1iZXIpOiB2b2lkO1xufVxuXG5leHBvcnQgY2xhc3MgTmVzdGVkUHJvcGVydHlGb3JtYXR0ZXIgZXh0ZW5kcyBBZHZhbmNlZENvbHVtbkZvcm1hdHRlciB7XG4gIHB1YmxpYyByZW5kZXIoZGF0YSwgdHlwZSwgcm93LCBtZXRhKSB7XG4gICAgLy8gZ2V0IGNvbHVtblxuICAgIGNvbnN0IGNvbHVtbiA9IG1ldGEuc2V0dGluZ3MuYW9Db2x1bW5zW21ldGEuY29sXTtcbiAgICBpZiAoY29sdW1uICYmIGNvbHVtbi5kYXRhKSB7XG4gICAgICByZXR1cm4gYXQocm93LCBjb2x1bW4uZGF0YS5yZXBsYWNlKC9cXC8vZywgJy4nKSk7XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEJ1dHRvbkZvcm1hdHRlciBleHRlbmRzIEFkdmFuY2VkQ29sdW1uRm9ybWF0dGVyIHtcbiAgcHVibGljIHJlbmRlcihkYXRhLCB0eXBlLCByb3csIG1ldGEpIHtcbiAgICBpZiAoZGF0YSA9PSBudWxsIHx8IHRoaXMuaW5qZWN0b3IgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICAvLyBnZXQgZm9ybWF0IG9wdGlvbnNcbiAgICBjb25zdCBmb3JtYXRPcHRpb25zID0gT2JqZWN0LmFzc2lnbih7XG4gICAgICBidXR0b25DbGFzczogJ2J0biBidG4tZGVmYXVsdCcsXG4gICAgfSwgdGhpcy5mb3JtYXRPcHRpb25zKTtcbiAgICAvLyBnZXQgdGV4dCBjb250ZW50XG4gICAgbGV0IGJ1dHRvblRleHQ6IHN0cmluZztcbiAgICBsZXQgYnV0dG9uVGl0bGUgPSAnJztcbiAgICBpZiAoZm9ybWF0T3B0aW9ucy5idXR0b25UZXh0KSB7XG4gICAgICBidXR0b25UZXh0ID0gdGhpcy5pbmplY3Rvci5nZXQoVHJhbnNsYXRlU2VydmljZSkuaW5zdGFudChmb3JtYXRPcHRpb25zLmJ1dHRvblRleHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBidXR0b25UZXh0ID0gZm9ybWF0T3B0aW9ucy5idXR0b25Db250ZW50O1xuICAgIH1cbiAgICBpZiAoZm9ybWF0T3B0aW9ucy5idXR0b25UaXRsZSkge1xuICAgICAgYnV0dG9uVGl0bGUgPSB0aGlzLmluamVjdG9yLmdldChUcmFuc2xhdGVTZXJ2aWNlKS5pbnN0YW50KGZvcm1hdE9wdGlvbnMuYnV0dG9uVGl0bGUpO1xuICAgIH1cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmZvcm1hdE9wdGlvbnMuY29tbWFuZHMpKSB7XG4gICAgICBjb25zdCByb3V0ZXJMaW5rID0gdGhpcy5jcmVhdGVVcmxUcmVlKHJvdywgdGhpcy5mb3JtYXRPcHRpb25zKTtcbiAgICAgIHJldHVybiBgPGEgY2xhc3M9XCIke2Zvcm1hdE9wdGlvbnMuYnV0dG9uQ2xhc3N9XCIgdGl0bGU9XCIke2J1dHRvblRpdGxlfVwiIGhyZWY9XCIjJHtyb3V0ZXJMaW5rfVwiPiR7YnV0dG9uVGV4dH08L2E+YDtcbiAgICB9XG4gICAgLy8gYW5kIHJldHVybiBidXR0b25cbiAgICBjb25zdCBocmVmID0gQWR2YW5jZWRDb2x1bW5Gb3JtYXR0ZXIudGVtcGxhdGUodGhpcy5mb3JtYXRTdHJpbmcgYXMgc3RyaW5nKShyb3cpO1xuICAgIHJldHVybiBgPGEgY2xhc3M9XCIke2Zvcm1hdE9wdGlvbnMuYnV0dG9uQ2xhc3N9XCIgdGl0bGU9XCIke2J1dHRvblRpdGxlfVwiIGhyZWY9XCIke2hyZWZ9XCI+JHtidXR0b25UZXh0fTwvYT5gO1xuICB9XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIExpbmtGb3JtYXR0ZXIgZXh0ZW5kcyBBZHZhbmNlZENvbHVtbkZvcm1hdHRlciB7XG4gIHB1YmxpYyByZW5kZXIoZGF0YTogYW55LCB0eXBlOiBzdHJpbmcsIHJvdzogYW55LCBtZXRhOiBhbnkpOiBhbnkge1xuICAgIC8vIGdldCBjb2x1bW5cbiAgICBjb25zdCBjb2x1bW4gPSBtZXRhLnNldHRpbmdzLmFvQ29sdW1uc1ttZXRhLmNvbF07XG4gICAgaWYgKGNvbHVtbiAmJiBjb2x1bW4uZGF0YSkge1xuICAgICAgcmV0dXJuIGA8YSBocmVmPVwiJHsoQWR2YW5jZWRDb2x1bW5Gb3JtYXR0ZXIudGVtcGxhdGUodGhpcy5mb3JtYXRTdHJpbmcgYXMgc3RyaW5nKShyb3cpKX1cIj4ke2RhdGF9PC9hPmA7XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFjdGlvbkxpbmtGb3JtYXR0ZXIgZXh0ZW5kcyBBZHZhbmNlZENvbHVtbkZvcm1hdHRlclxuICBpbXBsZW1lbnRzIE9uQWR2YW5jZWRDb2x1bW5BZnRlclJlbmRlciB7XG4gIHB1YmxpYyByZW5kZXIoZGF0YTogYW55LCB0eXBlOiBzdHJpbmcsIHJvdzogYW55LCBtZXRhOiBhbnkpOiBhbnkge1xuICAgIC8vIGdldCBjb2x1bW5cbiAgICBjb25zdCBjb2x1bW4gPSBtZXRhLnNldHRpbmdzLmFvQ29sdW1uc1ttZXRhLmNvbF07XG5cbiAgICBpZiAoY29sdW1uICYmIGNvbHVtbi5kYXRhKSB7XG4gICAgICBjb25zdCBhY3Rpb25zID0gdGhpcy5hY3Rpb25zIHx8IFtdO1xuICAgICAgbGV0IGluZGV4ID0gMTtcbiAgICAgIGZvciAoY29uc3QgYWN0aW9uIG9mIGFjdGlvbnMpIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihhY3Rpb24sIHtcbiAgICAgICAgICBuYW1lOiBhY3Rpb24ubmFtZSB8fCBgYWN0aW9uJHtpbmRleH1gLFxuICAgICAgICB9KTtcbiAgICAgICAgaW5kZXggKz0gMTtcbiAgICAgIH1cbiAgICAgIC8vIHJldHVybiB0aGUgZHJvcGRvd24gbWVudSB3aXRoIDMgZG90c1xuICAgICAgcmV0dXJuIGA8ZGl2IGNsYXNzPSdkcm9wZG93biBkZXRhaWxzLWNvbnRyb2wnIGRhdGEtaWQ9JyR7ZGF0YX0nIGRhdGEtdHlwZT0nc3R1ZGVudCcgPlxuICAgICAgICAgICAgICAgICAgICA8YSBpZD1cImRyb3Bkb3duTWVudUJ1dHRvbi0ke2RhdGF9XCJcbiAgICAgICAgICAgICAgICAgICAgICBkYXRhLXRvZ2dsZT1cImRyb3Bkb3duXCIgYXJpYS1oYXNwb3B1cD1cInRydWVcIiBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhLTJ4IHRleHQtZG90c1wiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tbWVudVwiIGFyaWEtbGFiZWxsZWRieT1cImRyb3Bkb3duTWVudUJ1dHRvbi0ke2RhdGF9XCI+XG4gICAgICAgICAgICAgICAgICAgICAke2FjdGlvbnMubWFwKCh4KSA9PiB7XG4gICAgICAgIGlmICh4LnR5cGUgPT09ICdkaXZpZGVyJykge1xuICAgICAgICAgIHJldHVybiBgPGRpdiBjbGFzcz1cImRyb3Bkb3duLWRpdmlkZXJcIj48L2Rpdj5gO1xuICAgICAgICB9XG4gICAgICAgIGlmICh4LmZvcm1hdE9wdGlvbnMgJiYgeC5mb3JtYXRPcHRpb25zLmNvbW1hbmRzKSB7XG4gICAgICAgICAgY29uc3QgdXJsVHJlZSA9IHRoaXMuY3JlYXRlVXJsVHJlZShyb3csIHguZm9ybWF0T3B0aW9ucyk7XG4gICAgICAgICAgcmV0dXJuIGA8YSBkYXRhLW5hbWU9JyR7eC5uYW1lfScgY2xhc3M9XCJkcm9wZG93bi1pdGVtJHt0eXBlb2YgeC5jbGFzc05hbWUgPT09ICdzdHJpbmcnICYmIHguY2xhc3NOYW1lLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gIGAgJHt4LmNsYXNzTmFtZS50cmltKCl9YCA6ICcnfVwiIGhyZWY9XCIjJHt1cmxUcmVlICYmIHVybFRyZWUudG9TdHJpbmcoKX1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3RoaXMuaW5qZWN0b3IgJiYgdGhpcy5pbmplY3Rvci5nZXQoVHJhbnNsYXRlU2VydmljZSkuaW5zdGFudCh4LnRpdGxlKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPmA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGA8YSBkYXRhLW5hbWU9JyR7eC5uYW1lfScgY2xhc3M9XCJkcm9wZG93bi1pdGVtJHt0eXBlb2YgeC5jbGFzc05hbWUgPT09ICdzdHJpbmcnICYmIHguY2xhc3NOYW1lLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICA/IGAgJHt4LmNsYXNzTmFtZS50cmltKCl9YCA6ICcnfVwiIGhyZWY9XCIke0FkdmFuY2VkQ29sdW1uRm9ybWF0dGVyLnRlbXBsYXRlKHguaHJlZikocm93KX1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgJHt0aGlzLmluamVjdG9yICYmIHRoaXMuaW5qZWN0b3IuZ2V0KFRyYW5zbGF0ZVNlcnZpY2UpLmluc3RhbnQoeC50aXRsZSl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2E+YDtcbiAgICAgIH0pXG4gICAgICAgICAgLmpvaW4oJycpfVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5gO1xuICAgIH1cbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gIH1cbiAgcHVibGljIGFmdGVyUmVuZGVyKGNlbGw6IGFueSwgY2VsbERhdGE6IGFueSwgcm93RGF0YTogYW55LCByb3dJbmRleDogbnVtYmVyLCBjb2xJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgLy8gYXNzaWduIGJvb3RzdHJhcCBkcm9wZG93biAoPylcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQWN0aW9uQnV0dG9uRm9ybWF0dGVyIGV4dGVuZHMgQWR2YW5jZWRDb2x1bW5Gb3JtYXR0ZXJcbiAgaW1wbGVtZW50cyBPbkFkdmFuY2VkQ29sdW1uQWZ0ZXJSZW5kZXIge1xuICBwdWJsaWMgcmVuZGVyKGRhdGE6IGFueSwgdHlwZTogc3RyaW5nLCByb3c6IGFueSwgbWV0YTogYW55KTogYW55IHtcbiAgICAvLyBnZXQgY29sdW1uXG4gICAgY29uc3QgY29sdW1uID0gbWV0YS5zZXR0aW5ncy5hb0NvbHVtbnNbbWV0YS5jb2xdO1xuXG4gICAgaWYgKGNvbHVtbiAmJiBjb2x1bW4uZGF0YSAmJiB0aGlzLmluamVjdG9yKSB7XG4gICAgICBjb25zdCBhY3Rpb25zID0gdGhpcy5hY3Rpb25zIHx8IFtdO1xuICAgICAgbGV0IGluZGV4ID0gMTtcbiAgICAgIGZvciAoY29uc3QgYWN0aW9uIG9mIGFjdGlvbnMpIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihhY3Rpb24sIHtcbiAgICAgICAgICBuYW1lOiBhY3Rpb24ubmFtZSB8fCBgYWN0aW9uJHtpbmRleH1gLFxuICAgICAgICB9KTtcbiAgICAgICAgaW5kZXggKz0gMTtcbiAgICAgIH1cbiAgICAgIGxldCBidXR0b25UZXh0OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICBpZiAodGhpcy5mb3JtYXRPcHRpb25zICYmIHRoaXMuZm9ybWF0T3B0aW9ucy5idXR0b25UZXh0KSB7XG4gICAgICAgIC8vIGlmIGJ1dHRvbiB0ZXh0IGlzIGEgbGl0ZXJhbCBleHByZXNzaW9uXG4gICAgICAgIGlmICh0aGlzLmZvcm1hdE9wdGlvbnMuYnV0dG9uVGV4dC5pbmNsdWRlcygnJHsnKSkge1xuICAgICAgICAgIC8vIHVzZSB0ZW1wbGF0ZVxuICAgICAgICAgIGJ1dHRvblRleHQgPSBBZHZhbmNlZENvbHVtbkZvcm1hdHRlci50ZW1wbGF0ZSh0aGlzLmZvcm1hdE9wdGlvbnMuYnV0dG9uVGV4dCkocm93KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBvdGhlcndpc2UgdHJhbnNsYXRlIGl0XG4gICAgICAgICAgYnV0dG9uVGV4dCA9IHRoaXMuaW5qZWN0b3IuZ2V0KFRyYW5zbGF0ZVNlcnZpY2UpLmluc3RhbnQodGhpcy5mb3JtYXRPcHRpb25zLmJ1dHRvblRleHQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBsZXQgYnV0dG9uVGl0bGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgIGlmICh0aGlzLmZvcm1hdE9wdGlvbnMgJiYgdGhpcy5mb3JtYXRPcHRpb25zLmJ1dHRvblRpdGxlKSB7XG4gICAgICAgIGJ1dHRvblRpdGxlID0gdGhpcy5pbmplY3Rvci5nZXQoVHJhbnNsYXRlU2VydmljZSkuaW5zdGFudCh0aGlzLmZvcm1hdE9wdGlvbnMuYnV0dG9uVGJ1dHRvblRpdGxlZXh0KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGJ1dHRvbkNsYXNzID0gKHRoaXMuZm9ybWF0T3B0aW9ucyAmJiB0aGlzLmZvcm1hdE9wdGlvbnMuYnV0dG9uQ2xhc3MpIHx8ICdidG4gYnRuLWxpZ2h0JztcbiAgICAgIC8vIHJldHVybiB0aGUgZHJvcGRvd24gbWVudSB3aXRoIDMgZG90c1xuICAgICAgcmV0dXJuIGA8ZGl2IGNsYXNzPSdkcm9wZG93biBkZXRhaWxzLWNvbnRyb2wnIGRhdGEtaWQ9JyR7ZGF0YX0nPlxuICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cIiR7YnV0dG9uQ2xhc3N9IGRyb3Bkb3duLXRvZ2dsZVwiIGhyZWY9XCIjXCIgcm9sZT1cImJ1dHRvblwiIHRpdGxlPVwiJHtidXR0b25UaXRsZX1cIlxuICAgICAgICAgICAgICAgICAgICAgIGlkPVwiZHJvcGRvd25NZW51QnV0dG9uLSR7ZGF0YX1cIiBkYXRhLXRvZ2dsZT1cImRyb3Bkb3duXCIgYXJpYS1oYXNwb3B1cD1cInRydWVcIiBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICAke2J1dHRvblRleHR9XG4gICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLW1lbnVcIiBhcmlhLWxhYmVsbGVkYnk9XCJkcm9wZG93bk1lbnVCdXR0b24tJHtkYXRhfVwiPlxuICAgICAgICAgICAgICAgICAgICAgJHthY3Rpb25zLm1hcCgoeCkgPT4ge1xuICAgICAgICBpZiAoeC50eXBlID09PSAnZGl2aWRlcicpIHtcbiAgICAgICAgICByZXR1cm4gYDxkaXYgY2xhc3M9XCJkcm9wZG93bi1kaXZpZGVyXCI+PC9kaXY+YDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoeC5jb21tYW5kcykge1xuICAgICAgICAgIGNvbnN0IHVybFRyZWUgPSB0aGlzLmNyZWF0ZVVybFRyZWUocm93LCB4KTtcbiAgICAgICAgICByZXR1cm4gYDxhIGNsYXNzPVwiZHJvcGRvd24taXRlbVwiIGhyZWY9XCIjJHt1cmxUcmVlICYmIHVybFRyZWUudG9TdHJpbmcoKX1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3RoaXMuaW5qZWN0b3IgJiYgdGhpcy5pbmplY3Rvci5nZXQoVHJhbnNsYXRlU2VydmljZSkuaW5zdGFudCh4LnRpdGxlKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPmA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGA8YSBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIiBocmVmPVwiJHtBZHZhbmNlZENvbHVtbkZvcm1hdHRlci50ZW1wbGF0ZSh4LmhyZWYpKHJvdyl9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICR7dGhpcy5pbmplY3RvciAmJiB0aGlzLmluamVjdG9yLmdldChUcmFuc2xhdGVTZXJ2aWNlKS5pbnN0YW50KHgudGl0bGUpfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9hPmA7XG4gICAgICB9KVxuICAgICAgICAgIC5qb2luKCcnKX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+YDtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICB9XG4gIHB1YmxpYyBhZnRlclJlbmRlcihjZWxsOiBhbnksIGNlbGxEYXRhOiBhbnksIHJvd0RhdGE6IGFueSwgcm93SW5kZXg6IG51bWJlciwgY29sSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIC8vIGFzc2lnbiBib290c3RyYXAgZHJvcGRvd24gKD8pXG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFjdGlvblNwbGl0QnV0dG9uRm9ybWF0dGVyIGV4dGVuZHMgQWR2YW5jZWRDb2x1bW5Gb3JtYXR0ZXJcbiAgaW1wbGVtZW50cyBPbkFkdmFuY2VkQ29sdW1uQWZ0ZXJSZW5kZXIge1xuICBwdWJsaWMgcmVuZGVyKGRhdGE6IGFueSwgdHlwZTogc3RyaW5nLCByb3c6IGFueSwgbWV0YTogYW55KTogYW55IHtcbiAgICAvLyBnZXQgY29sdW1uXG4gICAgY29uc3QgY29sdW1uID0gbWV0YS5zZXR0aW5ncy5hb0NvbHVtbnNbbWV0YS5jb2xdO1xuXG4gICAgaWYgKGNvbHVtbiAmJiBjb2x1bW4uZGF0YSkge1xuICAgICAgY29uc3QgYWN0aW9ucyA9IHRoaXMuYWN0aW9ucyB8fCBbXTtcbiAgICAgIGxldCBpbmRleCA9IDE7XG4gICAgICBmb3IgKGNvbnN0IGFjdGlvbiBvZiBhY3Rpb25zKSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24oYWN0aW9uLCB7XG4gICAgICAgICAgbmFtZTogYWN0aW9uLm5hbWUgfHwgYGFjdGlvbiR7aW5kZXh9YCxcbiAgICAgICAgfSk7XG4gICAgICAgIGluZGV4ICs9IDE7XG4gICAgICB9XG4gICAgICBpZiAoYWN0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgYnV0dG9uQ2xhc3MgPSAodGhpcy5mb3JtYXRPcHRpb25zICYmIHRoaXMuZm9ybWF0T3B0aW9ucy5idXR0b25DbGFzcykgfHwgJ2J0biBidG4tbGlnaHQnO1xuICAgICAgLy8gcmV0dXJuIHRoZSBkcm9wZG93biBtZW51IHdpdGggMyBkb3RzXG4gICAgICBjb25zdCBkZWZhdWx0QWN0aW9uID0gYWN0aW9uc1swXTtcbiAgICAgIGxldCBkZWZhdWx0QWN0aW9uSHJlZjogc3RyaW5nO1xuICAgICAgaWYgKGRlZmF1bHRBY3Rpb24gJiYgZGVmYXVsdEFjdGlvbi5jb21tYW5kcykge1xuICAgICAgICBjb25zdCB1cmxUcmVlID0gdGhpcy5jcmVhdGVVcmxUcmVlKHJvdywgZGVmYXVsdEFjdGlvbik7XG4gICAgICAgIGRlZmF1bHRBY3Rpb25IcmVmID0gJyMnICsgKHVybFRyZWUgJiYgdXJsVHJlZS50b1N0cmluZygpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlZmF1bHRBY3Rpb25IcmVmID0gQWR2YW5jZWRDb2x1bW5Gb3JtYXR0ZXIudGVtcGxhdGUoZGVmYXVsdEFjdGlvbi5ocmVmKShyb3cpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxhIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cIiR7YnV0dG9uQ2xhc3N9XCIgaHJlZj1cIiR7ZGVmYXVsdEFjdGlvbkhyZWZ9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgJHt0aGlzLmluamVjdG9yICYmIHRoaXMuaW5qZWN0b3IuZ2V0KFRyYW5zbGF0ZVNlcnZpY2UpLmluc3RhbnQoZGVmYXVsdEFjdGlvbi50aXRsZSl9XG4gICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCIke2J1dHRvbkNsYXNzfSBkcm9wZG93bi10b2dnbGUgZHJvcGRvd24tdG9nZ2xlLXNwbGl0XCJcbiAgICAgICAgICAgICAgICAgICAgICBkYXRhLXRvZ2dsZT1cImRyb3Bkb3duXCIgYXJpYS1oYXNwb3B1cD1cInRydWVcIiBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj4ke3RoaXMuaW5qZWN0b3IgJiYgdGhpcy5pbmplY3Rvci5nZXQoVHJhbnNsYXRlU2VydmljZSkuaW5zdGFudCgnVG9nZ2xlIERyb3Bkb3duJyl9PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLW1lbnVcIiBhcmlhLWxhYmVsbGVkYnk9XCJkcm9wZG93bk1lbnVCdXR0b24tJHtkYXRhfVwiPlxuICAgICAgICAgICAgICAgICAgICAgJHthY3Rpb25zLm1hcCgoeCkgPT4ge1xuICAgICAgICBpZiAoeC50aXRsZSA9PT0gJy0nKSB7XG4gICAgICAgICAgcmV0dXJuIGA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tZGl2aWRlclwiPjwvZGl2PmA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHguY29tbWFuZHMpIHtcbiAgICAgICAgICBjb25zdCB1cmxUcmVlID0gdGhpcy5jcmVhdGVVcmxUcmVlKHJvdywgeCk7XG4gICAgICAgICAgcmV0dXJuIGA8YSBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIiBocmVmPVwiIyR7dXJsVHJlZSAmJiB1cmxUcmVlLnRvU3RyaW5nKCl9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHt0aGlzLmluamVjdG9yICYmIHRoaXMuaW5qZWN0b3IuZ2V0KFRyYW5zbGF0ZVNlcnZpY2UpLmluc3RhbnQoeC50aXRsZSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5gO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBgPGEgY2xhc3M9XCJkcm9wZG93bi1pdGVtXCIgaHJlZj1cIiR7QWR2YW5jZWRDb2x1bW5Gb3JtYXR0ZXIudGVtcGxhdGUoeC5ocmVmKShyb3cpfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAke3RoaXMuaW5qZWN0b3IgJiYgdGhpcy5pbmplY3Rvci5nZXQoVHJhbnNsYXRlU2VydmljZSkuaW5zdGFudCh4LnRpdGxlKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5gO1xuICAgICAgfSlcbiAgICAgICAgICAuam9pbignJyl9XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PmA7XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuICBwdWJsaWMgYWZ0ZXJSZW5kZXIoY2VsbDogYW55LCBjZWxsRGF0YTogYW55LCByb3dEYXRhOiBhbnksIHJvd0luZGV4OiBudW1iZXIsIGNvbEluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAvLyBhc3NpZ24gYm9vdHN0cmFwIGRyb3Bkb3duICg/KVxuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTZWxlY3RSb3dGb3JtYXR0ZXIgZXh0ZW5kcyBBZHZhbmNlZENvbHVtbkZvcm1hdHRlciB7XG4gIHB1YmxpYyByZW5kZXIoZGF0YSwgdHlwZSwgcm93LCBtZXRhKSB7XG4gICAgLy8gZ2V0IGNvbHVtblxuICAgIGNvbnN0IGNvbHVtbiA9IG1ldGEuc2V0dGluZ3MuYW9Db2x1bW5zW21ldGEuY29sXTtcbiAgICBpZiAoY29sdW1uICYmIGNvbHVtbi5kYXRhKSB7XG4gICAgICBjb25zdCBfdHBsID0gYDxpbnB1dCBjbGFzcz1cImNoZWNrYm94IGNoZWNrYm94LXRoZW1lXCIgdHlwZT1cImNoZWNrYm94XCJcbiBpZD1cInMtJHttZXRhLnJvd31cIiAvPjxsYWJlbCBmb3I9XCJzLSR7bWV0YS5yb3d9XCI+Jm5ic3A7PC9sYWJlbD5gO1xuICAgICAgcmV0dXJuIEFkdmFuY2VkQ29sdW1uRm9ybWF0dGVyLnRlbXBsYXRlKF90cGwpKHJvdyk7XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFRlbXBsYXRlRm9ybWF0dGVyIGV4dGVuZHMgQWR2YW5jZWRDb2x1bW5Gb3JtYXR0ZXIge1xuICBwdWJsaWMgcmVuZGVyKGRhdGE6IGFueSwgdHlwZTogc3RyaW5nLCByb3c6IGFueSwgbWV0YTogYW55KTogYW55IHtcbiAgICAvLyBnZXQgY29sdW1uXG4gICAgY29uc3QgY29sdW1uID0gbWV0YS5zZXR0aW5ncy5hb0NvbHVtbnNbbWV0YS5jb2xdO1xuICAgIGlmIChjb2x1bW4gJiYgY29sdW1uLmRhdGEpIHtcbiAgICAgIHJldHVybiBBZHZhbmNlZENvbHVtbkZvcm1hdHRlci50ZW1wbGF0ZSh0aGlzLmZvcm1hdFN0cmluZyBhcyBzdHJpbmcpKHJvdyk7XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFRydWVGYWxzZUZvcm1hdHRlciBleHRlbmRzIEFkdmFuY2VkQ29sdW1uRm9ybWF0dGVyIHtcblxuICBwdWJsaWMgcmVuZGVyKGRhdGEsIHR5cGUsIHJvdywgbWV0YSkge1xuICAgIHJldHVybiBkYXRhID8gKHRoaXMuaW5qZWN0b3IgJiYgdGhpcy5pbmplY3Rvci5nZXQoVHJhbnNsYXRlU2VydmljZSkuaW5zdGFudCgnVHJ1ZUZhbHNlLmxvbmcuWWVzJykpIDpcbiAgICAgICh0aGlzLmluamVjdG9yICYmIHRoaXMuaW5qZWN0b3IuZ2V0KFRyYW5zbGF0ZVNlcnZpY2UpLmluc3RhbnQoJ1RydWVGYWxzZS5sb25nLk5vJykpO1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxufVxuXG5kZWNsYXJlIGludGVyZmFjZSBUcmFuc2xhdGlvbkZvcm1hdHRlclRlbXBsYXRlIHtcbiAgdHJhbnNsYXRlVGVtcGxhdGU/OiAoZGF0YTogYW55KSA9PiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBUcmFuc2xhdGlvbkZvcm1hdHRlciBleHRlbmRzIEFkdmFuY2VkQ29sdW1uRm9ybWF0dGVyIHtcbiAgcHVibGljIHJlbmRlcihkYXRhOiBhbnksIHR5cGU6IHN0cmluZywgcm93OiBhbnksIG1ldGE6IGFueSk6IGFueSB7XG4gICAgLy8gZ2V0IGNvbHVtblxuICAgIGNvbnN0IGNvbHVtbjogVHJhbnNsYXRpb25Gb3JtYXR0ZXJUZW1wbGF0ZSA9IG1ldGEuc2V0dGluZ3MuYW9Db2x1bW5zW21ldGEuY29sXTtcbiAgICBpZiAoY29sdW1uICYmIGRhdGEgIT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHRoaXMuaW5qZWN0b3IgJiYgdGhpcy5pbmplY3Rvci5nZXQoVHJhbnNsYXRlU2VydmljZSkuaW5zdGFudChcbiAgICAgICAgQWR2YW5jZWRDb2x1bW5Gb3JtYXR0ZXIudGVtcGxhdGUodGhpcy5mb3JtYXRTdHJpbmcgYXMgc3RyaW5nKSh7XG4gICAgICAgICAgdmFsdWU6IGRhdGEsXG4gICAgICAgIH0pKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaW5qZWN0b3IgJiYgdGhpcy5pbmplY3Rvci5nZXQoVHJhbnNsYXRlU2VydmljZSkuaW5zdGFudCgnVW5rbm93bicpO1xuICB9XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIERhdGVUaW1lRm9ybWF0dGVyIGV4dGVuZHMgQWR2YW5jZWRDb2x1bW5Gb3JtYXR0ZXIge1xuICBwdWJsaWMgcmVuZGVyKGRhdGE6IGFueSwgdHlwZTogc3RyaW5nLCByb3c6IGFueSwgbWV0YTogYW55KTogYW55IHtcbiAgICAvLyBnZXQgY29sdW1uXG4gICAgY29uc3QgY29sdW1uID0gbWV0YS5zZXR0aW5ncy5hb0NvbHVtbnNbbWV0YS5jb2xdO1xuICAgIGlmIChjb2x1bW4gJiYgY29sdW1uLmRhdGEgJiYgdGhpcy5pbmplY3Rvcikge1xuICAgICAgY29uc3QgZGF0ZVBpcGU6IERhdGVQaXBlID0gbmV3IERhdGVQaXBlKHRoaXMuaW5qZWN0b3IuZ2V0KFRyYW5zbGF0ZVNlcnZpY2UpLmN1cnJlbnRMYW5nKTtcbiAgICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycgJiYgL15cXGR7NH0tXFxkezJ9LVxcZHsyfVRcXGR7Mn06XFxkezJ9OlxcZHsyfVxcK1xcZHsyfSQvLnRlc3QoZGF0YSkpIHtcbiAgICAgICAgcmV0dXJuIGRhdGVQaXBlLnRyYW5zZm9ybShuZXcgRGF0ZShkYXRhICsgJzowMCcpLCB0aGlzLmZvcm1hdFN0cmluZyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZGF0ZVBpcGUudHJhbnNmb3JtKGRhdGEsIHRoaXMuZm9ybWF0U3RyaW5nKTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTmdDbGFzc0Zvcm1hdHRlciBleHRlbmRzIEFkdmFuY2VkQ29sdW1uRm9ybWF0dGVyIHtcbiAgcHVibGljIHJlbmRlcihkYXRhLCB0eXBlLCByb3csIG1ldGEpIHtcbiAgICAvLyBnZXQgY29sdW1uXG4gICAgY29uc3QgY29sdW1uID0gbWV0YS5zZXR0aW5ncy5hb0NvbHVtbnNbbWV0YS5jb2xdO1xuICAgIGlmIChjb2x1bW4gJiYgY29sdW1uLmRhdGEpIHtcbiAgICAgIC8vIGdldCBmb3JtYXRPcHRpb25zXG4gICAgICBpZiAodGhpcy5mb3JtYXRPcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IG5nQ2xhc3MgPSB0aGlzLmZvcm1hdE9wdGlvbnMubmdDbGFzcztcbiAgICAgICAgLy8gY2hlY2sgY29uZGl0aW9uIGZvciBlYWNoIGtleVxuICAgICAgICBjb2x1bW4ubmdDbGFzc1RlbXBsYXRlcyA9IGNvbHVtbi5uZ0NsYXNzVGVtcGxhdGVzIHx8IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhuZ0NsYXNzKSkge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IEFkdmFuY2VkQ29sdW1uRm9ybWF0dGVyLnRlbXBsYXRlKG5nQ2xhc3Nba2V5XSkocm93KTtcbiAgICAgICAgICBjb25zdCBmbiA9IG5ldyBGdW5jdGlvbihgcmV0dXJuICR7cmVzdWx0fTtgKTtcbiAgICAgICAgICAvLyBpZiBjb25kaXRpb24gcmV0dXJucyB0cnVlIGFkZCBjbGFzc1xuICAgICAgICAgIGlmIChmbigpID09PSB0cnVlKSB7XG4gICAgICAgICAgICByZXR1cm4gYDxzcGFuIGNsYXNzPVwiJHtrZXl9XCI+JHtkYXRhfTwvc3Bhbj5gO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gIH1cbn1cbmV4cG9ydCBjbGFzcyBMYW5ndWFnZUZvcm1hdHRlciBleHRlbmRzIEFkdmFuY2VkQ29sdW1uRm9ybWF0dGVyIHtcbiAgcHVibGljIHJlbmRlcihkYXRhLCB0eXBlLCByb3csIG1ldGEpIHtcbiAgICBpZiAoZGF0YSkge1xuICAgICAgcmV0dXJuIElTTzYzOTEuZ2V0TmF0aXZlTmFtZShkYXRhKTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVGVtcGxhdGVQaXBlIH0gZnJvbSAnQHVuaXZlcnNpcy9jb21tb24nO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBBZHZhbmNlZEZpbHRlclZhbHVlUHJvdmlkZXIge1xuXG4gIHB1YmxpYyB2YWx1ZXMgPSB7IH07XG4gIHByaXZhdGUgX3RlbXBsYXRlOiBUZW1wbGF0ZVBpcGU7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5fdGVtcGxhdGUgPSBuZXcgVGVtcGxhdGVQaXBlKCk7XG4gIH1cblxuICBidWlsZEZpbHRlcihmaWx0ZXIpIHtcbiAgICBpZiAoZmlsdGVyKSB7XG4gICAgICByZXR1cm4gdGhpcy5fdGVtcGxhdGUudHJhbnNmb3JtKGZpbHRlciwgdGhpcy52YWx1ZXMpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGFzeW5jQnVpbGRGaWx0ZXIoZmlsdGVyKSB7XG4gICAgaWYgKGZpbHRlcikge1xuICAgICAgcmV0dXJuIHRoaXMuX3RlbXBsYXRlLnRyYW5zZm9ybShmaWx0ZXIsIGF3YWl0IHRoaXMuZ2V0VmFsdWVzKCkpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGdldFZhbHVlcygpIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZXM7XG4gIH1cblxufVxuIiwiLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1saW5lLWxlbmd0aFxuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIE9uRGVzdHJveSwgSW5wdXQsIEV2ZW50RW1pdHRlciwgVmlld0VuY2Fwc3VsYXRpb24sIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcywgVmlld0NoaWxkLCBFbGVtZW50UmVmLCBDaGFuZ2VEZXRlY3RvclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFJvdXRlck1vZGFsT2tDYW5jZWwgfSBmcm9tICdAdW5pdmVyc2lzL2NvbW1vbi9yb3V0aW5nJztcbmltcG9ydCB7IEJzTW9kYWxSZWYgfSBmcm9tICduZ3gtYm9vdHN0cmFwL21vZGFsJztcbkBDb21wb25lbnQoe1xuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6Y29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnYXBwLWNvbHVtbi1zZWxlY3RvcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9jb2x1bW4tc2VsZWN0b3IuY29tcG9uZW50Lmh0bWwnLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5FbXVsYXRlZCxcbiAgc3R5bGVzOiBbXG4gICAgYFxuICAgIC5mb3JtLXNlbGVjdCB7XG4gICAgICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcbiAgICAgICAgLW1vei1hcHBlYXJhbmNlOiBub25lO1xuICAgICAgICBhcHBlYXJhbmNlOiBub25lO1xuICAgICAgICBwYWRkaW5nOiA1cHg7XG4gICAgfVxuICAgIC5mb3JtLXNlbGVjdCAqIHtcbiAgICAgICAgcGFkZGluZzogNXB4IDVweDtcbiAgICB9XG4gICAgLmJ0bi5kaXNhYmxlZCwgLmJ0bjpkaXNhYmxlZCB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQgIWltcG9ydGFudDtcbiAgICB9XG4gICAgYFxuICBdXG59KVxuZXhwb3J0IGNsYXNzIENvbHVtblNlbGVjdG9yQ29tcG9uZW50IGV4dGVuZHMgUm91dGVyTW9kYWxPa0NhbmNlbCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXMge1xuXG4gICAgQElucHV0KCkgY29sdW1ucz86IHsga2V5OiBzdHJpbmcsIHRpdGxlOiBzdHJpbmcsIHZpc2libGU6IGJvb2xlYW4sIGluZGV4OiBudW1iZXIgfVtdO1xuICAgIHB1YmxpYyBkaXNtaXNzOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIEBJbnB1dCgpIHNlbGVjdGVkQ29sdW1ucz86IHsga2V5OiBzdHJpbmcsIHRpdGxlOiBzdHJpbmcgfVtdO1xuXG4gICAgQFZpZXdDaGlsZCgnbW92ZVVwQnV0dG9uJykgbW92ZVVwQnV0dG9uPzogRWxlbWVudFJlZjtcbiAgICBAVmlld0NoaWxkKCdtb3ZlRG93bkJ1dHRvbicpIG1vdmVEb3duQnV0dG9uPzogRWxlbWVudFJlZjtcblxuICAgIGF2YWlsYWJsZUNvbHVtbnNDb250cm9sID0gbmV3IEZvcm1Db250cm9sKCk7XG4gICAgc2VsZWN0ZWRDb2x1bW5zQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgpO1xuXG4gICAgcHVibGljIGNoYW5naW5nID0gZmFsc2U7XG5cbiAgICBvaygpOiBQcm9taXNlPGFueT4ge1xuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2luZyA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9tb2RhbFJlZi5oaWRlKCk7XG4gICAgICAgIH0sIDApO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5hcHBseUNoYW5nZXMoKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICB0aGlzLmNoYW5naW5nID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kaXNtaXNzLmVtaXQoJ29rJyk7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoJ29rJyk7XG4gICAgfVxuICAgIGNhbmNlbCgpOiBQcm9taXNlPGFueT4ge1xuICAgICAgICB0aGlzLl9tb2RhbFJlZi5oaWRlKCk7XG4gICAgICAgIHRoaXMuZGlzbWlzcy5lbWl0KCdjYW5jZWwnKTtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgnY2FuY2VsJyk7XG4gICAgfVxuXG4gIGNvbnN0cnVjdG9yKHJvdXRlcjogUm91dGVyLFxuICAgIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIF9tb2RhbFJlZjogQnNNb2RhbFJlZixcbiAgICBwcml2YXRlIF9jaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcbiAgICAgICAgc3VwZXIocm91dGVyLCBhY3RpdmF0ZWRSb3V0ZSk7XG4gICAgfVxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgLy9cbiAgICB9XG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIC8vXG4gICAgfVxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmNvbHVtbnMpKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucyA9IHRoaXMuY29sdW1ucy5maWx0ZXIoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS52aXNpYmxlO1xuICAgICAgICAgICAgfSkuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChhLmluZGV4IDwgYi5pbmRleCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChhLmluZGV4ID4gYi5pbmRleCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICB9KS5tYXAoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBrZXk6IGl0ZW0ua2V5LFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogaXRlbS50aXRsZVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXBwbHlDaGFuZ2VzKCkge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZENvbHVtbnMgJiYgdGhpcy5jb2x1bW5zKSB7XG4gICAgICAgICAgICBsZXQgbW92ZUluZGV4ID0gdGhpcy5zZWxlY3RlZENvbHVtbnMubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY29sdW1uIG9mIHRoaXMuY29sdW1ucykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbmRJbmRleCA9IHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmZpbmRJbmRleCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5rZXkgPT09IGNvbHVtbi5rZXk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKGZpbmRJbmRleCA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uLnZpc2libGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgbW92ZUluZGV4ICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbi5pbmRleCA9IG1vdmVJbmRleDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb2x1bW4udmlzaWJsZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbi5pbmRleCA9IGZpbmRJbmRleDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZW1vdmVDb2x1bW5zKCkge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZENvbHVtbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5zZWxlY3RlZENvbHVtbnNDb250cm9sLnZhbHVlIGFzIHN0cmluZ1tdO1xuICAgICAgICAgICAgaWYgKHNlbGVjdGVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbmRJbmRleCA9IHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmZpbmRJbmRleCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0ua2V5ID09PSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaW5kSW5kZXggPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMuc3BsaWNlKGZpbmRJbmRleCwgMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gcmVzZXQgY29sdW1uXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnNDb250cm9sLnJlc2V0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhZGRDb2x1bW5zKCkge1xuICAgICAgICBpZiAodGhpcy5jb2x1bW5zICYmIHRoaXMuc2VsZWN0ZWRDb2x1bW5zKSB7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMuYXZhaWxhYmxlQ29sdW1uc0NvbnRyb2wudmFsdWUgYXMgc3RyaW5nW107XG4gICAgICAgICAgICBpZiAoc2VsZWN0ZWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2Ygc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmluZENvbHVtbiA9IHRoaXMuY29sdW1ucy5maW5kKChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5rZXkgPT09IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbmRDb2x1bW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbmRJbmRleCA9IHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmZpbmRJbmRleCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLmtleSA9PT0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaW5kSW5kZXggPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogZmluZENvbHVtbi5rZXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBmaW5kQ29sdW1uLnRpdGxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gZmluZCB0aGUgbGFzdCBpbmRleCBvZiB0aGUgc2VsZWN0ZWQgaXRlbXNcbiAgICAgICAgICAgICAgICBjb25zdCBsYXN0U2VsZWN0ZWRJbmRleCA9IHRoaXMuY29sdW1ucy5maW5kSW5kZXgoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0ua2V5ID09PSBzZWxlY3RlZFtzZWxlY3RlZC5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAvLyByZXNldCBjb250cm9sXG4gICAgICAgICAgICAgICAgdGhpcy5hdmFpbGFibGVDb2x1bW5zQ29udHJvbC5yZXNldCgpO1xuICAgICAgICAgICAgICAgIGlmIChsYXN0U2VsZWN0ZWRJbmRleCA+IC0xICYmIGxhc3RTZWxlY3RlZEluZGV4IDwgdGhpcy5jb2x1bW5zLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hdmFpbGFibGVDb2x1bW5zQ29udHJvbC5wYXRjaFZhbHVlKFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29sdW1uc1tsYXN0U2VsZWN0ZWRJbmRleCArIDFdLmtleVxuICAgICAgICAgICAgICAgICAgICBdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBtb3ZlVXAoKSB7XG4gICAgICAgIGlmICh0aGlzLm1vdmVVcEJ1dHRvbikge1xuICAgICAgICAgICAgdGhpcy5tb3ZlVXBCdXR0b24ubmF0aXZlRWxlbWVudC5kaXNhYmxlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRDb2x1bW5zKSB7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWRDb2x1bW5zQ29udHJvbC52YWx1ZSBhcyBzdHJpbmdbXTtcbiAgICAgICAgICAgIGlmIChzZWxlY3RlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiBzZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaW5kSW5kZXggPSB0aGlzLnNlbGVjdGVkQ29sdW1ucy5maW5kSW5kZXgoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLmtleSA9PT0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmluZEluZGV4ID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29sdW1uID0gdGhpcy5zZWxlY3RlZENvbHVtbnNbZmluZEluZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zLnNwbGljZShmaW5kSW5kZXgsIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENvbHVtbnMuc3BsaWNlKGZpbmRJbmRleCAtIDEgLCAwLCBjb2x1bW4pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm1vdmVVcEJ1dHRvbikge1xuICAgICAgICAgICAgdGhpcy5tb3ZlVXBCdXR0b24ubmF0aXZlRWxlbWVudC5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbW92ZURvd24oKSB7XG4gICAgICAgIGlmICh0aGlzLm1vdmVEb3duQnV0dG9uKSB7XG4gICAgICAgICAgICB0aGlzLm1vdmVEb3duQnV0dG9uLm5hdGl2ZUVsZW1lbnQuZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkQ29sdW1ucyAmJiB0aGlzLmNvbHVtbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkID0gdGhpcy5zZWxlY3RlZENvbHVtbnNDb250cm9sLnZhbHVlIGFzIHN0cmluZ1tdO1xuICAgICAgICAgICAgaWYgKHNlbGVjdGVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbmRJbmRleCA9IHRoaXMuc2VsZWN0ZWRDb2x1bW5zLmZpbmRJbmRleCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0ua2V5ID09PSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxlbmd0aCA9IHRoaXMuY29sdW1ucy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaW5kSW5kZXggPj0gMCAmJiBmaW5kSW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuc2VsZWN0ZWRDb2x1bW5zW2ZpbmRJbmRleF07XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ29sdW1ucy5zcGxpY2UoZmluZEluZGV4LCAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5zLnNwbGljZShmaW5kSW5kZXggKyAxICwgMCwgY29sdW1uKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5tb3ZlRG93bkJ1dHRvbikge1xuICAgICAgICAgICAgdGhpcy5tb3ZlRG93bkJ1dHRvbi5uYXRpdmVFbGVtZW50LmRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNb2RhbFNlcnZpY2UgfSBmcm9tICdAdW5pdmVyc2lzL2NvbW1vbic7XG5pbXBvcnQgeyBDb2x1bW5TZWxlY3RvckNvbXBvbmVudCB9IGZyb20gJy4vY29sdW1uLXNlbGVjdG9yLmNvbXBvbmVudCc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBDb2x1bW5TZWxlY3RvclNlcnZpY2Uge1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX21vZGFsOiBNb2RhbFNlcnZpY2UpIHtcbiAgICAvL1xuICB9XG5cbiAgc2VsZWN0Q29sdW1ucyhjb2x1bW5zOiB7IGtleTogc3RyaW5nLCB0aXRsZTogc3RyaW5nLCB2aXNpYmxlOiBib29sZWFuLCBpbmRleDogbnVtYmVyIH0pOlxuICAgIFByb21pc2U8e3Jlc3VsdDogc3RyaW5nLCBjb2x1bW5zPzogeyBrZXk6IHN0cmluZywgdGl0bGU6IHN0cmluZyxcbiAgICAgIHZpc2libGU6IGJvb2xlYW4sIGluZGV4OiBudW1iZXIgfVtdfT4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBtb2RhbFJlZiA9IHRoaXMuX21vZGFsLm9wZW5Nb2RhbENvbXBvbmVudChDb2x1bW5TZWxlY3RvckNvbXBvbmVudCwge1xuICAgICAgICAgIGNsYXNzOiAnbW9kYWwtbGcgbW9kYWwtdGFibGUnLFxuICAgICAgICAgIGlnbm9yZUJhY2tkcm9wQ2xpY2s6IHRydWUsXG4gICAgICAgICAgYW5pbWF0ZWQ6IHRydWUsXG4gICAgICAgICAgaW5pdGlhbFN0YXRlOiB7XG4gICAgICAgICAgICBjb2x1bW5zOiBjb2x1bW5zLFxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudFJlZjogQ29sdW1uU2VsZWN0b3JDb21wb25lbnQgPSBtb2RhbFJlZi5jb250ZW50O1xuICAgICAgICBjb21wb25lbnRSZWYuZGlzbWlzcy5zdWJzY3JpYmUoKHJlc3VsdDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgaWYgKHJlc3VsdCA9PT0gJ29rJykge1xuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoe1xuICAgICAgICAgICAgICByZXN1bHQ6IHJlc3VsdCxcbiAgICAgICAgICAgICAgY29sdW1uczogY29tcG9uZW50UmVmLmNvbHVtbnNcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcmVzb2x2ZSh7XG4gICAgICAgICAgICByZXN1bHQ6IHJlc3VsdFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICByZXR1cm4gcmVqZWN0KGVycik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxufVxuIiwiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgTmF2aWdhdGlvblN0YXJ0LCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBBZHZhbmNlZFRhYmxlQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2FkdmFuY2VkLXRhYmxlL2FkdmFuY2VkLXRhYmxlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBza2lwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQWN0aXZhdGVkVGFibGVTZXJ2aWNlIHtcclxuICBwcml2YXRlIF9hY3RpdmVUYWJsZT86IEFkdmFuY2VkVGFibGVDb21wb25lbnQ7XHJcbiAgLyoqXHJcbiAgICogR2V0IHRoZSBsYXN0IHRhYmxlIHRoYXQgd2FzIHNldCBhcyBhY3RpdmVcclxuICAgKiBOb3RlOiBFbWl0dGVkIHZhbHVlIG1heSBiZSB1bmRlZmluZWQgKGUuZy4gcmVzZXQgb24gcm91dGUgY2hhbmdlcylcclxuICAgKi9cclxuICBwdWJsaWMgcmVhZG9ubHkgbGFzdEFjdGl2ZVRhYmxlOlxyXG4gICAgQmVoYXZpb3JTdWJqZWN0PEFkdmFuY2VkVGFibGVDb21wb25lbnQgfCB1bmRlZmluZWQ+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBZHZhbmNlZFRhYmxlQ29tcG9uZW50IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xyXG4gIC8qKlxyXG4gICAqIE9taXQgdGhlIGxhc3QgZW1pdHRlZCB2YWx1ZSB0byBvYnNlcnZlIG9ubHkgbmV3IGFjdGl2ZSB0YWJsZSBjaGFuZ2VzXHJcbiAgICogTm90ZTogRW1pdHRlZCB2YWx1ZSBtYXkgYmUgdW5kZWZpbmVkIChlLmcuIHJlc2V0IG9uIHJvdXRlIGNoYW5nZXMpXHJcbiAgICovXHJcbiAgcHVibGljIHJlYWRvbmx5IG5leHRBY3RpdmVUYWJsZTpcclxuICAgIE9ic2VydmFibGU8QWR2YW5jZWRUYWJsZUNvbXBvbmVudCB8IHVuZGVmaW5lZD4gPSB0aGlzLmxhc3RBY3RpdmVUYWJsZS5waXBlKHNraXAoMSkpO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9yb3V0ZXI6IFJvdXRlciwgcHJpdmF0ZSBfYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlKSB7XHJcbiAgICBfcm91dGVyLmV2ZW50cy5mb3JFYWNoKChldmVudCkgPT4ge1xyXG4gICAgICBpZiAoZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uU3RhcnQpIHtcclxuICAgICAgICBpZiAodGhpcy5fYWN0aXZlVGFibGUpIHtcclxuICAgICAgICAgIHRoaXMuYWN0aXZlVGFibGUgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldCBhY3RpdmVUYWJsZSgpOiBBZHZhbmNlZFRhYmxlQ29tcG9uZW50IHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLl9hY3RpdmVUYWJsZTtcclxuICB9XHJcblxyXG4gIHNldCBhY3RpdmVUYWJsZSh0YWJsZUNvbXBvbmVudDogQWR2YW5jZWRUYWJsZUNvbXBvbmVudCB8IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy5fYWN0aXZlVGFibGUgPSB0YWJsZUNvbXBvbmVudDtcclxuICAgIC8vIHByb3ZpZGUgY2hhbmdlIHRvIG9ic2VydmVyc1xyXG4gICAgdGhpcy5sYXN0QWN0aXZlVGFibGUubmV4dCh0aGlzLl9hY3RpdmVUYWJsZSk7XHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCB7RGlyZWN0aXZlLCBIb3N0TGlzdGVuZXJ9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtBY3RpdmF0ZWRUYWJsZVNlcnZpY2V9IGZyb20gJy4uL3RhYmxlcy5hY3RpdmF0ZWQtdGFibGUuc2VydmljZSc7XG5pbXBvcnQge0FuZ3VsYXJEYXRhQ29udGV4dH0gZnJvbSAnQHRoZW1vc3QvYW5ndWxhcic7XG5pbXBvcnQge0NvbmZpZ3VyYXRpb25TZXJ2aWNlLCBFcnJvclNlcnZpY2UsIExvYWRpbmdTZXJ2aWNlfSBmcm9tICdAdW5pdmVyc2lzL2NvbW1vbic7XG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtDbGllbnREYXRhUXVlcnlhYmxlLCBSZXNwb25zZUVycm9yfSBmcm9tICdAdGhlbW9zdC9jbGllbnQnO1xuaW1wb3J0IHsgVGFibGVDb25maWd1cmF0aW9uIH0gZnJvbSAnLi4vY29tcG9uZW50cy9hZHZhbmNlZC10YWJsZS9hZHZhbmNlZC10YWJsZS5pbnRlcmZhY2VzJztcblxuZXhwb3J0IGNvbnN0IE1BWF9FWFBPUlRfSVRFTVMgPSA1MDA7XG5cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBFeHBvcnRMaW1pdENvbmZpZ3VyYXRpb24ge1xuICB0YWJsZXM/OiB7XG4gICAgZXhwb3J0TGltaXQ/OiBudW1iZXJcbiAgfTtcbn1cblxuQERpcmVjdGl2ZSh7XG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpkaXJlY3RpdmUtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICcudW5pdmVyc2lzLWJ0bi1leHBvcnQnXG59KVxuZXhwb3J0IGNsYXNzIEJ0bkV4cERpcmVjdGl2ZSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2FjdGl2YXRlZFRhYmxlOiBBY3RpdmF0ZWRUYWJsZVNlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgX2NvbnRleHQ6IEFuZ3VsYXJEYXRhQ29udGV4dCxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfY29uZmlnOiBDb25maWd1cmF0aW9uU2VydmljZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgICAgICAgICAgICBwcml2YXRlIF9sb2FkaW5nU2VydmljZTogTG9hZGluZ1NlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgX2Vycm9yU2VydmljZTogRXJyb3JTZXJ2aWNlKSB7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdjbGljaycsIFsnJGV2ZW50J10pXG4gIGFzeW5jIGNsaWNrRXZlbnQoZXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGlmICh0aGlzLl9hY3RpdmF0ZWRUYWJsZS5hY3RpdmVUYWJsZSkge1xuICAgICAgcmV0dXJuIHRoaXMuX2FjdGl2YXRlZFRhYmxlLmFjdGl2ZVRhYmxlLmV4cG9ydFZpZXcoKTtcbiAgICAgIC8qXG4gICAgICBjb25zdCBsYXN0UXVlcnkgPSB0aGlzLl9hY3RpdmF0ZWRUYWJsZS5hY3RpdmVUYWJsZS5sYXN0UXVlcnk7XG4gICAgICBjb25zdCB0YWJsZUNvbmZpZyA9IHRoaXMuX2FjdGl2YXRlZFRhYmxlLmFjdGl2ZVRhYmxlLmNvbmZpZztcbiAgICAgIGNvbnN0IHNlcnZpY2VIZWFkZXJzID0gdGhpcy5fY29udGV4dC5nZXRTZXJ2aWNlKCkuZ2V0SGVhZGVycygpO1xuICAgICAgY29uc3QgcXVlcnlNb2RlbCA9IGxhc3RRdWVyeS5nZXRNb2RlbCgpO1xuICAgICAgbGV0IHF1ZXJ5ID0gdGhpcy5fY29udGV4dC5tb2RlbChxdWVyeU1vZGVsKS5hc1F1ZXJ5YWJsZSgpO1xuICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSBsYXN0UXVlcnkuZ2V0UGFyYW1zKCk7XG4gICAgICBxdWVyeSA9IHRoaXMuY29uc3RydWN0UXVlcnkocXVlcnksIHF1ZXJ5UGFyYW1zLCB0YWJsZUNvbmZpZywgc2VydmljZUhlYWRlcnMpO1xuICAgICAgLy8gZ2V0IGV4cG9ydCBzZXR0aW5nc1xuICAgICAgY29uc3QgZXhwb3J0U2V0dGluZ3MgPSB0aGlzLl9jb25maWcuc2V0dGluZ3MgYXMgRXhwb3J0TGltaXRDb25maWd1cmF0aW9uO1xuICAgICAgLy8gZ2V0IGV4cG9ydCBsaW1pdFxuICAgICAgY29uc3QgbWF4RXhwb3J0SXRlbXMgPSBleHBvcnRTZXR0aW5ncyAmJiBleHBvcnRTZXR0aW5ncy50YWJsZXMgJiYgZXhwb3J0U2V0dGluZ3MudGFibGVzLmV4cG9ydExpbWl0O1xuICAgICAgaWYgKG1heEV4cG9ydEl0ZW1zICYmIHR5cGVvZiBtYXhFeHBvcnRJdGVtcyA9PT0gJ251bWJlcicgJiYgbWF4RXhwb3J0SXRlbXMgPiAwKSB7XG4gICAgICAgIHF1ZXJ5LnNraXAoMCkudGFrZShtYXhFeHBvcnRJdGVtcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBxdWVyeS5za2lwKDApLnRha2UoTUFYX0VYUE9SVF9JVEVNUyk7XG4gICAgICB9XG4gICAgICAvLyBUaGlzIGNvbnN0cnVjdHMgdGhlIFVSSSBiYXNlZCBvbiB0aGUgd2F5IEB0aGVtb3N0IGRvZXNcbiAgICAgIGNvbnN0IHVybCA9IHRoaXMuY29uc3RydWN0VVJMKHF1ZXJ5KTtcbiAgICAgIHRoaXMuZG93bmxvYWRGaWxlKHVybCwgcXVlcnkuZ2V0U2VydmljZSgpLmdldEhlYWRlcnMoKSwgcXVlcnkuZ2V0TW9kZWwoKSk7ICovXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHBhcmFtZXRlcnMgdG8gdGhlIHF1ZXJ5IGJhc2VkIG9uXG4gICAqIHRoZSBhY3RpdmUgZmlsdGVycyBvZiB0aGUgYWN0aXZhdGVkIHRhYmxlXG4gICAqIEBwYXJhbSBxdWVyeVxuICAgKiBAcGFyYW0gcGFyYW1zOiBUaGUgZmlsdGVycyBvZiB0aGUgbGFzdCBxdWVyeSBvZiB0aGUgYWN0aXZhdGVkIHRhYmxlXG4gICAqIEByZXR1cm4gQ2xpZW50RGF0YVF1ZXJ5YWJsZVxuICAgKi9cbiAgc2V0UGFyYW1zKHF1ZXJ5OiBDbGllbnREYXRhUXVlcnlhYmxlLCBwYXJhbXMpOiBDbGllbnREYXRhUXVlcnlhYmxlIHtcbiAgICBpZiAocGFyYW1zICYmIHR5cGVvZiBwYXJhbXMgPT09ICdvYmplY3QnKSB7XG4gICAgICBPYmplY3Qua2V5cyhwYXJhbXMpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICBxdWVyeS5zZXRQYXJhbShrZXksIHBhcmFtc1trZXldKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcXVlcnk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgaGVhZGVycyB0byB0aGUgcXVlcnkgYmFzZWQgb25cbiAgICogdGhlIGRlZmF1bHQgaGVhZGVycyBvZiB0aGUgRGF0YUNvbnRleHRcbiAgICogYW5kIGFwcGVuZGluZyB0aGUgYWNjZXB0IGhlYWRlciB0byBnZXRcbiAgICogYW4geGxzeCBmaWxlIGZyb20gdGhlIEFQSVxuICAgKiBAcGFyYW0gcXVlcnlcbiAgICogQHBhcmFtIGhlYWRlcnM6IFRoZSBoZWFkZXJzIHRvIGFwcGVuZCB0byB0aGUgcXVlcnlcbiAgICogQHJldHVybiBDbGllbnREYXRhUXVlcnlhYmxlXG4gICAqL1xuICBzZXRIZWFkZXJzKHF1ZXJ5OiBDbGllbnREYXRhUXVlcnlhYmxlLCBoZWFkZXJzOiBIZWFkZXJzKTogQ2xpZW50RGF0YVF1ZXJ5YWJsZSB7XG4gICAgT2JqZWN0LmtleXMoaGVhZGVycykuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICBpZiAoaGVhZGVycy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgIHF1ZXJ5LmdldFNlcnZpY2UoKS5zZXRIZWFkZXIoa2V5LCBoZWFkZXJzW2tleV0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIC8vIHNldHMgYSBoZWFkZXIgdG8gYWNjZXB0IHhsc3ggZmlsZXNcbiAgICBxdWVyeS5nZXRTZXJ2aWNlKCkuc2V0SGVhZGVyKCdBY2NlcHQnLCAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQnKTtcbiAgICByZXR1cm4gcXVlcnk7XG4gIH1cblxuICAvKipcbiAgICogQ29uc3RydWN0cyB0aGUgc2VsZWN0IHBhcmFtZXRlciBvZiB0aGVcbiAgICogQ2xpZW50RGF0YVF1ZXJ5IGJ5IHJlcGxhY2luZyB0aGUgdGFyZ2V0IG5hbWVcbiAgICogb2YgdGhlIGZpZWxkIGJhc2VkIG9uIHRoZSBsb2NhbGl6ZWQgdHJhbnNsYXRpb25cbiAgICogb2YgdGhhdCBwcm9wZXJ0eSBvbiB0aGUgYWR2YW5jZWQgdGFibGVkXG4gICAqIEBwYXJhbSBxdWVyeVxuICAgKiBAcGFyYW0gdGFibGVDb25maWc6IFRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBhY3RpdmF0ZWQgdGFibGVcbiAgICogQHJldHVybiBDbGllbnREYXRhUXVlcnlhYmxlXG4gICAqL1xuICBjb25zdHJ1Y3RRdWVyeVBhcmFtKHF1ZXJ5OiBDbGllbnREYXRhUXVlcnlhYmxlLCB0YWJsZUNvbmZpZzogVGFibGVDb25maWd1cmF0aW9uKTogQ2xpZW50RGF0YVF1ZXJ5YWJsZSB7XG4gICAgbGV0IHNlbGVjdFF1ZXJ5ID0gcXVlcnkuZ2V0UGFyYW1zKCkuJHNlbGVjdDtcbiAgICBsZXQgc2VsZWN0UXVlcnlBcnJheSA9IHNlbGVjdFF1ZXJ5LnNwbGl0KCcsJyk7XG4gICAgc2VsZWN0UXVlcnlBcnJheSA9IHNlbGVjdFF1ZXJ5QXJyYXkubWFwKChzZWxlY3QpID0+IHtcbiAgICAgIGNvbnN0IHdvcmRzID0gc2VsZWN0LnNwbGl0KCcgJyk7XG4gICAgICBpZiAod29yZHMubGVuZ3RoID09PSAzKSB7XG4gICAgICAgIGlmICh0YWJsZUNvbmZpZyAmJiB0YWJsZUNvbmZpZy5jb2x1bW5zKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBjb2x1bW4gb2YgdGFibGVDb25maWcuY29sdW1ucykge1xuICAgICAgICAgICAgaWYgKGNvbHVtbi5wcm9wZXJ0eSA9PT0gd29yZHNbMl0gJiYgY29sdW1uLnRpdGxlKSB7XG4gICAgICAgICAgICAgIHdvcmRzWzJdID0gYFwiJHt0aGlzLl90cmFuc2xhdGUuaW5zdGFudChjb2x1bW4udGl0bGUpfVwiYDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLnByb3BlcnR5ID09PSB3b3Jkc1syXSkge1xuICAgICAgICAgICAgICB3b3Jkc1syXSA9IGBcIiR7dGhpcy5fdHJhbnNsYXRlLmluc3RhbnQod29yZHNbMl0pfVwiYDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh3b3Jkcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgaWYgKHRhYmxlQ29uZmlnICYmIHRhYmxlQ29uZmlnLmNvbHVtbnMpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiB0YWJsZUNvbmZpZy5jb2x1bW5zKSB7XG4gICAgICAgICAgICBpZiAoY29sdW1uLm5hbWUgPT09IHdvcmRzWzBdICYmIGNvbHVtbi50aXRsZSkge1xuICAgICAgICAgICAgICB3b3Jkc1swXSA9IGAke3dvcmRzWzBdfSBhcyBcIiR7dGhpcy5fdHJhbnNsYXRlLmluc3RhbnQoY29sdW1uLnRpdGxlKX1cImA7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4ubmFtZSA9PT0gd29yZHNbMF0gJiYgY29sdW1uLnByb3BlcnR5KSB7XG4gICAgICAgICAgICAgIHdvcmRzWzBdID0gYCR7d29yZHNbMF19IGFzIFwiJHt0aGlzLl90cmFuc2xhdGUuaW5zdGFudChjb2x1bW4ucHJvcGVydHkpfVwiYDtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHdvcmRzWzBdID09PSBjb2x1bW4ubmFtZSAmJiB3b3Jkc1swXSA9PT0gJ2lkJyAmJiBjb2x1bW4uaGlkZGVuKSB7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnRyaXBsZS1lcXVhbHNcbiAgICAgICAgICAgIH0gZWxzZSBpZiAod29yZHNbMF0gPT0gY29sdW1uLm5hbWUgfHwgd29yZHNbMF0gPT09IGNvbHVtbi5wcm9wZXJ0eSkge1xuICAgICAgICAgICAgICB3b3Jkc1swXSA9IGAke3dvcmRzWzBdfSBhcyBcIiR7dGhpcy5fdHJhbnNsYXRlLmluc3RhbnQod29yZHNbMF0pfVwiYDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHdvcmRzWzBdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHdvcmRzLmpvaW4oJyAnKTtcbiAgICB9KTtcbiAgICBzZWxlY3RRdWVyeSA9IHNlbGVjdFF1ZXJ5QXJyYXkuam9pbignLCcpO1xuICAgIHF1ZXJ5LnNldFBhcmFtKCckc2VsZWN0Jywgc2VsZWN0UXVlcnkgKTtcbiAgICByZXR1cm4gcXVlcnk7XG4gIH1cblxuICAvKipcbiAgICogQ29uc3RydWN0cyB0aGUgZmV0Y2ggVVJMIGJhc2VkIHRoZSBxdWVyeSBwYXJhbWV0ZXJzXG4gICAqIEBwYXJhbSBxdWVyeVxuICAgKiBAcmV0dXJuIFN0cmluZ1xuICAgKi9cbiAgY29uc3RydWN0VVJMKHF1ZXJ5KTogU3RyaW5nIHtcbiAgICBjb25zdCBiYXNlVVJMID0gcXVlcnkuZ2V0U2VydmljZSgpLmdldEJhc2UoKTtcbiAgICBsZXQgdXJsID0gYmFzZVVSTC5lbmRzV2l0aCgnLycpID8gKGJhc2VVUkwgKyBxdWVyeS5nZXRNb2RlbCgpICsgJz8nKSA6IChiYXNlVVJMICsgJy8nICsgcXVlcnkuZ2V0TW9kZWwoKSArICc/Jyk7XG4gICAgT2JqZWN0LmtleXMocXVlcnkuZ2V0UGFyYW1zKCkpLmZvckVhY2goKGtleSwgaW5kZXgpID0+IHtcbiAgICAgIGlmIChpbmRleCA9PT0gMCkge1xuICAgICAgICB1cmwgKz0ga2V5ICsgJz0nICsgcXVlcnkuZ2V0UGFyYW1zKClba2V5XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHVybCArPSAnJicgKyBrZXkgKyAnPScgKyBxdWVyeS5nZXRQYXJhbXMoKVtrZXldO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB1cmw7XG4gIH1cblxuICAvKipcbiAgICogQ29uc3RydWN0cyB0aGUgcXVlcnkgYnkgc2V0dGluZyB0aGUgcGFyYW1ldGVycyBvZiB0aGVcbiAgICogYWR2YW5jZWQgdGFibGUncyBhY3RpdmUgZmlsdGVycywgc2V0cyB0aGUgbmVjZXNzYXJ5IGhlYWRlcnNcbiAgICogYW5kIGJ1aWxkIHRoZSBzZWxlY3QgcGFyYW1ldGVyIG9mIHRoZSBxdWVyeVxuICAgKiBAcGFyYW0gcXVlcnlcbiAgICogQHBhcmFtIHBhcmFtczogVGhlIGZpbHRlcnMgb2YgdGhlIGxhc3QgcXVlcnkgb2YgdGhlIGFjdGl2YXRlZCB0YWJsZVxuICAgKiBAcGFyYW0gdGFibGVDb25maWc6IFRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBhY3RpdmF0ZWQgdGFibGVcbiAgICogQHBhcmFtIGhlYWRlcnM6IFRoZSBoZWFkZXJzIHRvIGFwcGVuZCB0byB0aGUgcXVlcnlcbiAgICogQHJldHVybiBDbGllbnREYXRhUXVlcnlhYmxlXG4gICAqL1xuICBjb25zdHJ1Y3RRdWVyeShxdWVyeSwgcGFyYW1zLCB0YWJsZUNvbmZpZywgaGVhZGVyczogSGVhZGVycykge1xuICAgIGxldCBfcXVlcnkgPSB0aGlzLnNldFBhcmFtcyhxdWVyeSwgcGFyYW1zKTtcbiAgICBfcXVlcnkgPSB0aGlzLnNldEhlYWRlcnMoX3F1ZXJ5LCBoZWFkZXJzKTtcbiAgICBfcXVlcnkgPSB0aGlzLmNvbnN0cnVjdFF1ZXJ5UGFyYW0oX3F1ZXJ5LCB0YWJsZUNvbmZpZyk7XG4gICAgcmV0dXJuIF9xdWVyeTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaGVzIGFuZCBzYXZlcyB0aGUgeGxzeCBmaWxlXG4gICAqIEBwYXJhbSB1cmxcbiAgICogQHBhcmFtIHNlcnZpY2VIZWFkZXJzOiBUaGUgaGVhZGVycyB0byBhcHBlbmQgdG8gdGhlIHF1ZXJ5XG4gICAqIEBwYXJhbSBtb2RlbE5hbWU6IFRoZSBtb2RlbCBuYW1lIG9mIHRoZSBhZHZhbmNlZCB0YWJsZVxuICAgKi9cbiAgZG93bmxvYWRGaWxlKHVybCwgc2VydmljZUhlYWRlcnM6IEhlYWRlcnMsIG1vZGVsTmFtZSkge1xuICAgIHRoaXMuX2xvYWRpbmdTZXJ2aWNlLnNob3dMb2FkaW5nKCk7XG4gICAgZmV0Y2goZW5jb2RlVVJJKHVybCksIHtcbiAgICAgIGhlYWRlcnM6IHNlcnZpY2VIZWFkZXJzLFxuICAgICAgY3JlZGVudGlhbHM6ICdpbmNsdWRlJ1xuICAgIH0pLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgaWYgKHJlc3BvbnNlICYmICFyZXNwb25zZS5vaykge1xuICAgICAgICB0aHJvdyBuZXcgUmVzcG9uc2VFcnJvcihyZXNwb25zZS5zdGF0dXNUZXh0LCByZXNwb25zZS5zdGF0dXMpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3BvbnNlLmJsb2IoKTtcbiAgICB9KS50aGVuKGJsb2IgPT4ge1xuICAgICAgY29uc3Qgb2JqZWN0VXJsID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG4gICAgICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhKTtcbiAgICAgIGEuc2V0QXR0cmlidXRlKCdzdHlsZScsICdkaXNwbGF5OiBub25lJyk7XG4gICAgICBhLmhyZWYgPSBvYmplY3RVcmw7XG4gICAgICBjb25zdCBkb3dubG9hZE5hbWUgPSBgJHttb2RlbE5hbWV9Lnhsc3hgO1xuICAgICAgYS5kb3dubG9hZCA9IGRvd25sb2FkTmFtZTtcbiAgICAgIC8vIHRoaXMgYWRkcyBzdXBwb3J0IGZvciBJRSBhbmQgTVMgRWRnZSAodXAgdG8gdmVyc2lvbiA0NC4xOTA0MSlcbiAgICAgIGlmICh3aW5kb3cubmF2aWdhdG9yICYmICh3aW5kb3cubmF2aWdhdG9yIGFzIGFueSkubXNTYXZlT3JPcGVuQmxvYikge1xuICAgICAgICAod2luZG93Lm5hdmlnYXRvciBhcyBhbnkpLm1zU2F2ZU9yT3BlbkJsb2IoYmxvYiwgZG93bmxvYWROYW1lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGZvciBhbGwgb3RoZXIgYnJvd3NlcnNcbiAgICAgICAgYS5jbGljaygpO1xuICAgICAgfVxuICAgICAgd2luZG93LlVSTC5yZXZva2VPYmplY3RVUkwob2JqZWN0VXJsKTtcbiAgICAgIGEucmVtb3ZlKCk7XG4gICAgICB0aGlzLl9sb2FkaW5nU2VydmljZS5oaWRlTG9hZGluZygpO1xuICAgIH0pLmNhdGNoKGVyciA9PiB7XG4gICAgICB0aGlzLl9sb2FkaW5nU2VydmljZS5oaWRlTG9hZGluZygpO1xuICAgICAgdGhpcy5fZXJyb3JTZXJ2aWNlLnNob3dFcnJvcihlcnIsIHtcbiAgICAgICAgY29udGludWVMaW5rOiAnLidcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbn1cbiIsImltcG9ydCB7XG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlcixcbiAgSW5qZWN0LFxuICBJbmplY3Rpb25Ub2tlbixcbiAgSW5qZWN0b3IsXG4gIElucHV0LCBPbkRlc3Ryb3ksXG4gIE9uSW5pdCwgT3V0cHV0LFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBPbkNoYW5nZXMsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIENvbnRlbnRDaGlsZCxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDb250YWluZXJSZWYsXG4gIEFmdGVyVmlld0luaXRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0FuZ3VsYXJEYXRhQ29udGV4dH0gZnJvbSAnQHRoZW1vc3QvYW5ndWxhcic7XG5pbXBvcnQge1RyYW5zbGF0ZVBpcGUsIFRyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7VGFibGVDb25maWd1cmF0aW9ufSBmcm9tICcuL2FkdmFuY2VkLXRhYmxlLmludGVyZmFjZXMnO1xuaW1wb3J0IHtEYXRhU2VydmljZVF1ZXJ5UGFyYW1zfSBmcm9tICdAdGhlbW9zdC9jbGllbnQnO1xuaW1wb3J0IHtBZHZhbmNlZENvbHVtbkZvcm1hdHRlcn0gZnJvbSAnLi9hZHZhbmNlZC10YWJsZS5mb3JtYXR0ZXJzJztcbmltcG9ydCB7Q2xpZW50RGF0YVF1ZXJ5YWJsZX0gZnJvbSAnQHRoZW1vc3QvY2xpZW50JztcbmltcG9ydCB7QWR2YW5jZWRGaWx0ZXJWYWx1ZVByb3ZpZGVyfSBmcm9tICcuL2FkdmFuY2VkLWZpbHRlci12YWx1ZS1wcm92aWRlci5zZXJ2aWNlJztcbmltcG9ydCB7U3Vic2NyaXB0aW9uLCBCZWhhdmlvclN1YmplY3R9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtUZW1wbGF0ZVBpcGUsIExvYWRpbmdTZXJ2aWNlLCBDb25maWd1cmF0aW9uU2VydmljZSxcbiAgTW9kYWxTZXJ2aWNlLCBESUFMT0dfQlVUVE9OUywgRXJyb3JTZXJ2aWNlLCBFeHBvcnRTcHJlYWRzaGVldFNlcnZpY2V9IGZyb20gJ0B1bml2ZXJzaXMvY29tbW9uJztcbmltcG9ydCB7SUFkdmFuY2VkVGFibGVGb3JtYXR0ZXJzfSBmcm9tICcuL2FkdmFuY2VkLXRhYmxlLmZvcm1hdHRlcnMuaW50ZXJmYWNlJztcbi8vIGltcG9ydGFudCBub3RlOiB1c2UgdGhpcyBpbXBvcnQgdG8gYXZvaWQgQ2Fubm90IGNhbGwgYSBuYW1lc3BhY2UgKCdqcXVlcnknKSBlcnJvclxuaW1wb3J0ICogYXMgalF1ZXJ5XyBmcm9tICdqcXVlcnknO1xuaW1wb3J0ICdkYXRhdGFibGVzLm5ldCc7XG5pbXBvcnQge3RlbXBsYXRlfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0ICdkYXRhdGFibGVzLm5ldC1yb3dncm91cCc7IC8vIHRoaXMgcGx1Z2luIGltcG9ydCBsaW5lIG11c3QgY29tZSBiZWZvcmUgdGhlIGZvbGxvd2luZyBkYXRhdGFibGVzIHBsdWdpbiBpbXBvcnRzXG5pbXBvcnQgJ2RhdGF0YWJsZXMubmV0LXNjcm9sbGVyJzsgXG5pbXBvcnQgJ2RhdGF0YWJsZXMubmV0LWNvbHJlb3JkZXInO1xuaW1wb3J0ICdkYXRhdGFibGVzLm5ldC1idXR0b25zJztcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBDb2x1bW5TZWxlY3RvclNlcnZpY2UgfSBmcm9tICcuLi9jb2x1bW4tc2VsZWN0b3IvY29sdW1uLXNlbGVjdG9yLnNlcnZpY2UnO1xuaW1wb3J0IHsgRXhwb3J0TGltaXRDb25maWd1cmF0aW9uLCBNQVhfRVhQT1JUX0lURU1TIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9idG5leHAuZGlyZWN0aXZlJztcblxuLy8gcmVzdG9yZSBqcXVlcnkgaW1wb3J0IHRvIGF2b2lkIENhbm5vdCBjYWxsIGEgbmFtZXNwYWNlICgnanF1ZXJ5JykgZXJyb3JcbmNvbnN0IGpRdWVyeSA9IGpRdWVyeV87XG5leHBvcnQgaW50ZXJmYWNlIEFkdmFuY2VkVGFibGVEYXRhUmVzdWx0IHtcbiAgcmVjb3Jkc1RvdGFsOiBudW1iZXI7XG4gIHJlY29yZHNGaWx0ZXJlZDogbnVtYmVyO1xuICBkYXRhOiBBcnJheTxhbnk+O1xufVxuXG5jb25zdCBEYXRhVGFibGVzQXBpOiBhbnkgPSBqUXVlcnkuZm4uZGF0YVRhYmxlLkFwaTtcbkRhdGFUYWJsZXNBcGkucmVnaXN0ZXIoICdwcm9jZXNzaW5nKCknLCBmdW5jdGlvbiggc2hvdzogYW55ICkge1xuICAgIHJldHVybiB0aGlzLml0ZXJhdG9yKCd0YWJsZScsICggY3R4OiBhbnkgKSA9PiB7XG4gICAgICAgIGN0eC5vQXBpLl9mblByb2Nlc3NpbmdEaXNwbGF5KCBjdHgsIHNob3cgKTtcbiAgICB9ICk7XG59KTtcblxuY29uc3QgRU1QVFlfREFUQVNFVCA9IHtcbiAgcmVjb3Jkc1RvdGFsOiAwLFxuICByZWNvcmRzRmlsdGVyZWQ6IDAsXG4gIGRhdGE6IFtdLFxufTtcblxuY2xhc3MgVGFibGVUcmFuc2xhdGlvbkNoYW5nZURldGVjdG9yIGV4dGVuZHMgQ2hhbmdlRGV0ZWN0b3JSZWYge1xuICBwdWJsaWMgY2hlY2tOb0NoYW5nZXMoKTogdm9pZCB7XG4gIH1cblxuICBwdWJsaWMgZGV0YWNoKCk6IHZvaWQge1xuICB9XG5cbiAgcHVibGljIGRldGVjdENoYW5nZXMoKTogdm9pZCB7XG4gIH1cblxuICBwdWJsaWMgbWFya0ZvckNoZWNrKCk6IHZvaWQge1xuICB9XG5cbiAgcHVibGljIHJlYXR0YWNoKCk6IHZvaWQge1xuICB9XG5cbn1cblxuZXhwb3J0IGxldCBDT0xVTU5fRk9STUFUVEVSUyA9IG5ldyBJbmplY3Rpb25Ub2tlbignY29sdW1uLmZvcm1hdHRlcnMnKTtcblxuZXhwb3J0IGNsYXNzIEV4cG9ydExpbWl0RXhjZWVkZWRFcnJvciBleHRlbmRzIFJhbmdlRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgICB0aGlzLm5hbWUgPSAnRXhwb3J0TGltaXRFeGNlZWRlZEVycm9yJztcbiAgfVxufVxuXG5jbGFzcyBDb2x1bW5Gb3JtYXR0ZXIgZXh0ZW5kcyBBZHZhbmNlZENvbHVtbkZvcm1hdHRlciB7XG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBpbmplY3RvcjogSW5qZWN0b3IpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgcHVibGljIGNsYXNzPzogc3RyaW5nO1xuICBwdWJsaWMgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBwdWJsaWMgZGVmYXVsdENvbnRlbnQ/OiBzdHJpbmc7XG4gIHB1YmxpYyBmb3JtYXRTdHJpbmc/OiBzdHJpbmc7XG4gIHB1YmxpYyBmb3JtYXR0ZXI/OiBzdHJpbmc7XG4gIHB1YmxpYyBoaWRkZW4/OiBib29sZWFuO1xuICBwdWJsaWMgbmFtZT86IHN0cmluZztcbiAgcHVibGljIG9yZGVyPzogc3RyaW5nO1xuICBwdWJsaWMgcHJvcGVydHk/OiBzdHJpbmc7XG4gIHB1YmxpYyBzb3J0YWJsZT86IGJvb2xlYW47XG4gIHB1YmxpYyB0aXRsZSA9ICcnO1xuXG4gIHB1YmxpYyByZW5kZXIoZGF0YTogYW55LCB0eXBlOiBhbnksIHJvdzogYW55LCBtZXRhOiBhbnkpIHtcbiAgICAvL1xuICB9XG59XG5cbmZ1bmN0aW9uIGZvcmNlQ2FzdDxUPihpbnB1dDogYW55KTogVCB7XG4gIHJldHVybiBpbnB1dDtcbn1cblxuZXhwb3J0IGNsYXNzIEFkdmFuY2VkVGFibGVDb25maWd1cmF0aW9uIHtcbiAgcHVibGljIHN0YXRpYyBjYXN0KGlucHV0OiBhbnksIGNsb25lPzogYm9vbGVhbik6IFRhYmxlQ29uZmlndXJhdGlvbiB7XG4gICAgaWYgKGNsb25lKSB7XG4gICAgICByZXR1cm4gZm9yY2VDYXN0PFRhYmxlQ29uZmlndXJhdGlvbj4oSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShpbnB1dCkpKTtcbiAgICB9XG4gICAgcmV0dXJuIGZvcmNlQ2FzdDxUYWJsZUNvbmZpZ3VyYXRpb24+KGlucHV0KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRSYW5kb21JZGVudGlmaWVyKCkge1xuICByZXR1cm4gKFxuICAgIE51bWJlcihTdHJpbmcoTWF0aC5yYW5kb20oKSkuc2xpY2UoMikpXG4gICkudG9TdHJpbmcoMzYpO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBjb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdhcHAtYWR2YW5jZWQtdGFibGUnLFxuICB0ZW1wbGF0ZTogYFxuICAgIDx0YWJsZSAjdGFibGUgY2xhc3M9XCJkYXRhVGFibGVcIj5cbiAgICA8L3RhYmxlPlxuICAgIDxkaXYgI2VtcHR5VGFibGUgY2xhc3M9XCJkLW5vbmVcIj5cbiAgICAgIDxkaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtdC00XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImljb24tY2lyY2xlIGJnLWdyYXktMzAwIGJvcmRlci1ncmF5LTEwMFwiPjwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm10LTRcIj5cbiAgICAgICAgICA8aDQgY2xhc3M9XCJmb250LTN4bCB0ZXh0LWRhcmtcIiBbdHJhbnNsYXRlXT1cIidUYWJsZXMuRW1wdHlUYWJsZVRpdGxlJ1wiPjwvaDQ+XG4gICAgICAgICAgPHAgY2xhc3M9XCJmb250LWxnIHRleHQtZGFya1wiIFt0cmFuc2xhdGVdPVwiJ1RhYmxlcy5FbXB0eVRhYmxlTWVzc2FnZSdcIj48L3A+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAjZXJyb3JUZW1wbGF0ZSBjbGFzcz1cImQtbm9uZSBlcnJvci1tZXNzYWdlXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm10LTRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaWNvbi1jaXJjbGUgYmctZGFuZ2VyIGJvcmRlci1ncmF5LTEwMFwiPjwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm10LTRcIj5cbiAgICAgICAgICA8aDQgY2xhc3M9XCJmb250LTN4bCB0ZXh0LXNlY29uZGFyeVwiIFt0cmFuc2xhdGVdPVwiJ1RhYmxlcy5EYXRhRXJyb3IuVGl0bGUnXCI+PC9oND5cbiAgICAgICAgICA8cCBjbGFzcz1cImZvbnQtbGcgdGV4dC1zZWNvbmRhcnkgbWItMVwiIFt0cmFuc2xhdGVdPVwiJ1RhYmxlcy5EYXRhRXJyb3IuTWVzc2FnZSdcIj48L3A+XG4gICAgICAgICAgPHAgY2xhc3M9XCJmb250LWxnIHRleHQtc2Vjb25kYXJ5IGVycm9yLWlubmVyLW1lc3NhZ2VcIj5cbiAgICAgICAgICAgIDxzbWFsbD48L3NtYWxsPlxuICAgICAgICAgIDwvcD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgYCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgc3R5bGVVcmxzOiBbJy4vYWR2YW5jZWQtdGFibGUuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgQWR2YW5jZWRUYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXQge1xuXG4gIHByaXZhdGUgX3F1ZXJ5PzogQ2xpZW50RGF0YVF1ZXJ5YWJsZTtcbiAgcHJpdmF0ZSBfY29uZmlnPzogVGFibGVDb25maWd1cmF0aW9uO1xuICBwcml2YXRlIF9maXJzdExvYWQgPSB0cnVlO1xuICBwcml2YXRlIF9zaG93Rm9vdGVyID0gZmFsc2U7XG4gIHByaXZhdGUgX3Nob3dIZWFkZXIgPSB0cnVlO1xuICBwcml2YXRlIF9zaG93UGFnaW5nID0gZmFsc2U7XG4gIHByaXZhdGUgX2lkID0gZ2V0UmFuZG9tSWRlbnRpZmllcigpO1xuICBwdWJsaWMgc21hcnRTZWxlY3QgPSBmYWxzZTtcbiAgcHVibGljIGNvbmZpZ0NoYW5nZXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4obnVsbCk7XG5cbiAgQFZpZXdDaGlsZCgndGFibGUnKSBwdWJsaWMgdGFibGU/OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdlbXB0eVRhYmxlJykgcHVibGljIGVtcHR5VGFibGU/OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdlcnJvclRlbXBsYXRlJykgcHVibGljIGVycm9yVGVtcGxhdGU/OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdsb2FkaW5nVGFibGUnKSBwdWJsaWMgbG9hZGluZ1RhYmxlPzogRWxlbWVudFJlZjtcbiAgQElucHV0KCkgcHVibGljIGhlaWdodCA9IDgwMDtcbiAgQElucHV0KCkgcHVibGljIHNob3dBY3Rpb25zID0gdHJ1ZTtcbiAgQElucHV0KCkgcHVibGljIGF1dG9Mb2FkID0gdHJ1ZTtcbiAgQE91dHB1dCgnbG9hZCcpIHB1YmxpYyBsb2FkOiBFdmVudEVtaXR0ZXI8QWR2YW5jZWRUYWJsZURhdGFSZXN1bHQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxBZHZhbmNlZFRhYmxlRGF0YVJlc3VsdD4oKTtcbiAgQE91dHB1dCgnaW5pdCcpIHB1YmxpYyBpbml0OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBASW5wdXQoJ3JlbG9hZCcpIHB1YmxpYyByZWxvYWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoJ3NlbGVjdCcpIHB1YmxpYyBzZWxlY3Q6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoJ2RyYXcnKSBwdWJsaWMgZHJhdzogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgncGFnZScpIHB1YmxpYyBwYWdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCdvcmRlcicpIHB1YmxpYyBvcmRlcjogRXZlbnRFbWl0dGVyPGFueVtdW10+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnlbXVtdPigpO1xuICBAT3V0cHV0KCdzY3JvbGwnKSBwdWJsaWMgc2Nyb2xsOiBFdmVudEVtaXR0ZXI8eyB0b3A6IG51bWJlcjsgbGVmdDogbnVtYmVyIH0+ID0gbmV3IEV2ZW50RW1pdHRlcjx7IHRvcDogbnVtYmVyOyBsZWZ0OiBudW1iZXIgfT4oKTtcbiAgQE91dHB1dCgnc2VsZWN0ZWRJdGVtcycpIHB1YmxpYyBzZWxlY3RlZEl0ZW1zOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCdsb2FkaW5nJykgcHVibGljIGxvYWRpbmc6IEV2ZW50RW1pdHRlcjx7XG4gICAgdGFyZ2V0OiBBZHZhbmNlZFRhYmxlQ29tcG9uZW50XG4gIH0+ID0gbmV3IEV2ZW50RW1pdHRlcjx7XG4gICAgdGFyZ2V0OiBBZHZhbmNlZFRhYmxlQ29tcG9uZW50XG4gIH0+KCk7XG5cbiAgQElucHV0KCkgcHVibGljIHNjcm9sbGFibGUgPSB0cnVlO1xuICBASW5wdXQoKSBwdWJsaWMgc2VydmVyU2lkZSA9IHRydWU7XG4gIEBJbnB1dCgpIHB1YmxpYyBsZW5ndGhNZW51ID0gWzUwLCAxMDAsIDIwMCwgNTAwXTtcbiAgQElucHV0KCkgcHVibGljIHBhZ2luZyA9IHRydWU7XG4gIEBJbnB1dCgpIHB1YmxpYyBwYWdlTGVuZ3RoID0gMjU7XG4gIEBJbnB1dCgpIHB1YmxpYyBjb2x1bW5PcmRlcmluZyA9IGZhbHNlO1xuICBASW5wdXQoKSBwdWJsaWMgc3RhdGVTYXZlID0gZmFsc2U7XG4gIEBJbnB1dCgpIHB1YmxpYyBzdGF0ZUxvYWRDYWxsYmFjaz86IChzZXR0aW5nczogYW55LCBjYWxsYmFjazogKHN0YXRlOiBhbnkpID0+IHZvaWQpID0+IHZvaWQ7XG4gIEBJbnB1dCgpIHB1YmxpYyBzdGF0ZVNhdmVDYWxsYmFjaz86IChzZXR0aW5nczogYW55LCBzdGF0ZTogYW55KSA9PiB2b2lkO1xuXG4gIEBJbnB1dCgpIHB1YmxpYyBzY3JvbGxZID0gODAwO1xuICBASW5wdXQoKSBwdWJsaWMgc2Nyb2xsWCA9IHRydWU7XG4gIC8qKlxuICAgKiBFbmFibGVzIHJvdyBzZWxlY3Rpb24uIFRoZSBkZWZhdWxyIHZhbHVlIGlzIGZhbHNlXG4gICAqL1xuICBASW5wdXQoKSBwdWJsaWMgc2VsZWN0YWJsZTogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGZhbHNlO1xuICAvKipcbiAgICogRW5hYmxlcyBvciBkaXNhYmxlIG11bHRpcGxlIHNlbGVjdGlvbi4gVGhlIGRlZmF1bHQgdmFsdWVzIGlzIHRydWUuXG4gICAqL1xuICBASW5wdXQoKSBwdWJsaWMgbXVsdGlwbGVTZWxlY3Q6IGJvb2xlYW4gfCB1bmRlZmluZWQgPSB0cnVlO1xuICAvKipcbiAgICogRW5hYmxlcyBjdXN0b20gc2VsZWN0aW9uIGFuZCBoaWRlcyBzZWxlY3QgY29sdW1uLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAgZmFsc2VcbiAgICovXG4gIEBJbnB1dCgpIHB1YmxpYyBjdXN0b21TZWxlY3QgPSBmYWxzZTtcbiAgQElucHV0KCkgcHVibGljIHNlbGVjdGVkOiBhbnlbXSA9IFtdO1xuICBwdWJsaWMgdW5zZWxlY3RlZDogYW55W10gPSBbXTtcbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyBhIFVSTCB0byBsb2FkIHRhYmxlIGNvbmZpZ3VyYXRpb24gZnJvbVxuICAgKi9cbiAgQElucHV0KCkgcHVibGljIGNvbmZpZ1NyYz86IHN0cmluZztcbiAgcHVibGljIGxhc3RFcnJvcjogYW55O1xuXG4gIC8qKlxuICAgKiBBY2NlcHRzIGFycmF5IG9mIHByb3BlcnRpZXMgYXMgcm93IGdyb3VwIGZhY3RvcnMgYW5kIGRpc3BsYXlzIGdyb3VwZWQgdGFibGUuIFxuICAgKi9cbiAgQElucHV0KCkgcm93R3JvdXA6ICBzdHJpbmdbXSA9IFtdO1xuICBwcml2YXRlIGxhc3RSb3dHcm91cE9yZGVyPzogeyBjb2x1bW46IG51bWJlcjsgZGlyZWN0aW9uOiBzdHJpbmc7IH0gfCBudWxsO1xuXG4gIEBJbnB1dCgpIGhlYWRlclRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PjtcbiAgQElucHV0KCkgZm9vdGVyVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBAVmlld0NoaWxkKCdoZWFkZXInKSBoZWFkZXI/OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdmb290ZXInKSBmb290ZXI/OiBFbGVtZW50UmVmO1xuXG4gIC8qKlxuICAgKiBHZXRzIG9yIHNldHMgdGFibGUgY29uZmlndXJhdGlvblxuICAgKi9cbiAgQElucHV0KCdjb25maWcnKVxuICBwdWJsaWMgc2V0IGNvbmZpZyh2YWx1ZTogVGFibGVDb25maWd1cmF0aW9uKSB7XG4gICAgdGhpcy5fY29uZmlnID0gdmFsdWU7XG4gICAgLy8gcmFpc2Ugc3Vic2NyaXB0aW9uXG4gICAgdGhpcy5jb25maWdDaGFuZ2VzLm5leHQodGhpcy5fY29uZmlnKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY29uZmlnKCkge1xuICAgIHJldHVybiB0aGlzLl9jb25maWcgYXMgVGFibGVDb25maWd1cmF0aW9uO1xuICB9XG5cbiAgcHVibGljIGdldCBsYXN0UXVlcnlUb3RhbEl0ZW1zKCkge1xuICAgIHJldHVybiB0aGlzLl9sYXN0UXVlcnlUb3RhbEl0ZW1zO1xuICB9XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRhYmxlIGZvb3RlciB3aWxsIGJlIHZpc2libGUgb3Igbm90XG4gICAqL1xuICBASW5wdXQoJ3Nob3dGb290ZXInKVxuICBwdWJsaWMgc2V0IHNob3dGb290ZXIodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9zaG93Rm9vdGVyID0gdmFsdWU7XG4gICAgLy8gc2hvdyBvciBoaWRlIGZvb3RlclxuICAgIGlmICh0aGlzLl9lbGVtZW50ICYmIHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudCkge1xuICAgICAgY29uc3QgZWxlbWVudCA9ICggdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50IGFzIEhUTUxEaXZFbGVtZW50KVxuICAgICAgICAucXVlcnlTZWxlY3RvcignLmRhdGFUYWJsZXNfaW5mbycpO1xuICAgICAgaWYgKGVsZW1lbnQgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdkLW5vbmUnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnZC1ub25lJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCBzaG93Rm9vdGVyKCkge1xuICAgIHJldHVybiB0aGlzLl9zaG93Rm9vdGVyO1xuICB9XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRhYmxlIGZvb3RlciB3aWxsIGJlIHZpc2libGUgb3Igbm90XG4gICAqL1xuICAgQElucHV0KCdzaG93SGVhZGVyJylcbiAgIHB1YmxpYyBzZXQgc2hvd0hlYWRlcih2YWx1ZTogYm9vbGVhbikge1xuICAgICB0aGlzLl9zaG93SGVhZGVyID0gdmFsdWU7XG4gICAgIC8vIHNob3cgb3IgaGlkZSBmb290ZXJcbiAgICAgaWYgKHRoaXMuX2VsZW1lbnQgJiYgdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgY29uc3QgZWxlbWVudCA9ICggdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50IGFzIEhUTUxEaXZFbGVtZW50KVxuICAgICAgICAgLnF1ZXJ5U2VsZWN0b3IoJy5kYXRhVGFibGU+dGhlYWQnKTtcbiAgICAgICBpZiAoZWxlbWVudCA9PSBudWxsKSB7XG4gICAgICAgICByZXR1cm47XG4gICAgICAgfVxuICAgICAgIGNvbnN0IGRhdGFUYWJsZSA9ICggdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50IGFzIEhUTUxEaXZFbGVtZW50KS5xdWVyeVNlbGVjdG9yKCcuZGF0YVRhYmxlJyk7XG4gICAgICAgaWYgKGRhdGFUYWJsZSA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgICB9XG4gICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ2Qtbm9uZScpO1xuICAgICAgICAgLy8gYWRkIHRvcCBtYXJnaW5cbiAgICAgICAgIGRhdGFUYWJsZS5jbGFzc0xpc3QucmVtb3ZlKCdtdC0yJyk7XG4gICAgICAgfSBlbHNlIHtcbiAgICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnZC1ub25lJyk7XG4gICAgICAgICAvLyByZW1vdmUgdG9wIG1hcmdpblxuICAgICAgICAgZGF0YVRhYmxlLmNsYXNzTGlzdC5hZGQoJ210LTInKTtcbiAgICAgICB9XG4gICAgIH1cbiAgIH1cblxuICAgcHVibGljIGdldCBzaG93SGVhZGVyKCkge1xuICAgICByZXR1cm4gdGhpcy5fc2hvd0hlYWRlcjtcbiAgIH1cblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgcGFnaW5nIGluZm9ybWF0aW9uIHdpbGwgYmUgdmlzaWJsZSBvciBub3RcbiAgICovXG4gIEBJbnB1dCgnc2hvd1BhZ2luZycpXG4gIHB1YmxpYyBzZXQgc2hvd1BhZ2luZyh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX3Nob3dQYWdpbmcgPSB2YWx1ZTtcbiAgICAvLyBzaG93IG9yIGhpZGUgZm9vdGVyXG4gICAgaWYgKHRoaXMuX2VsZW1lbnQgJiYgdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICBjb25zdCBlbGVtZW50ID0gKCB0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQgYXMgSFRNTERpdkVsZW1lbnQpXG4gICAgICAgIC5xdWVyeVNlbGVjdG9yKCcuZGF0YVRhYmxlc19wYWdpbmF0ZScpO1xuICAgICAgaWYgKGVsZW1lbnQgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgalF1ZXJ5KGVsZW1lbnQpLnNob3coKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGpRdWVyeShlbGVtZW50KS5oaWRlKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCBzaG93UGFnaW5nKCkge1xuICAgIHJldHVybiB0aGlzLl9zaG93UGFnaW5nO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgb3Igc2V0cyBhbiBhY3RpdmUgcXVlcnkgZm9yIHRoaXMgdGFibGVcbiAgICovXG4gIEBJbnB1dCgncXVlcnknKVxuICBwdWJsaWMgc2V0IHF1ZXJ5KHZhbHVlOiBDbGllbnREYXRhUXVlcnlhYmxlIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fcXVlcnkgPSB2YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcXVlcnkoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3F1ZXJ5IGFzIENsaWVudERhdGFRdWVyeWFibGU7XG4gIH1cblxuICBwdWJsaWMgcmVhZG9ubHkgdHJhbnNsYXRvcjogVHJhbnNsYXRlUGlwZTtcbiAgcHVibGljIGRhdGFUYWJsZTogYW55O1xuICBwdWJsaWMgZHRPcHRpb25zOiBhbnk7XG4gIHByaXZhdGUgbGFzdFF1ZXJ5UGFyYW1zPzogRGF0YVNlcnZpY2VRdWVyeVBhcmFtcztcbiAgcHJpdmF0ZSBfbGFzdFF1ZXJ5VG90YWxJdGVtcyA9IDA7XG4gIHByaXZhdGUgcmVsb2FkU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9jb250ZXh0OiBBbmd1bGFyRGF0YUNvbnRleHQsXG4gICAgICAgICAgICAgIEBJbmplY3QoQ09MVU1OX0ZPUk1BVFRFUlMpIHByaXZhdGUgX2NvbHVtbkZvcm1hdHRlcnM6IElBZHZhbmNlZFRhYmxlRm9ybWF0dGVycyxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgICAgICAgICAgICBwcml2YXRlIF90cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgICAgICAgICAgICBwcml2YXRlIF9pbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgICAgICAgIHByaXZhdGUgX2FkdmFuY2VkRmlsdGVyVmFsdWVQcm92aWRlcjogQWR2YW5jZWRGaWx0ZXJWYWx1ZVByb3ZpZGVyLFxuICAgICAgICAgICAgICBwcml2YXRlIF9lbGVtZW50OiBFbGVtZW50UmVmLFxuICAgICAgICAgICAgICBwcml2YXRlIF90ZW1wbGF0ZTogVGVtcGxhdGVQaXBlLFxuICAgICAgICAgICAgICBwcml2YXRlIF9sb2FkaW5nOiBMb2FkaW5nU2VydmljZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfaHR0cDogSHR0cENsaWVudCxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfY29sdW1uU2VsZWN0b3I6IENvbHVtblNlbGVjdG9yU2VydmljZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfY29uZmlndXJhdGlvbjogQ29uZmlndXJhdGlvblNlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgX2V4cG9ydFNwcmVhZHNoZWV0OiBFeHBvcnRTcHJlYWRzaGVldFNlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgX21vZGFsU2VydmljZTogTW9kYWxTZXJ2aWNlLFxuICAgICAgICAgICAgICBwcml2YXRlIF9lcnJvclNlcnZpY2U6IEVycm9yU2VydmljZSwgXG4gICAgICAgICAgICAgIHByaXZhdGUgX3ZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYpIHtcbiAgICAvLyBpbml0aWFsaXplIHRyYW5zbGF0ZSBwaXBlXG4gICAgdGhpcy50cmFuc2xhdG9yID0gbmV3IFRyYW5zbGF0ZVBpcGUodGhpcy5fdHJhbnNsYXRlU2VydmljZSwgbmV3IFRhYmxlVHJhbnNsYXRpb25DaGFuZ2VEZXRlY3RvcigpKTtcbiAgICBqUXVlcnkuZm4uZGF0YVRhYmxlLmV4dC5jbGFzc2VzLnNQYWdlQnV0dG9uID0gJ2J0bic7XG4gICAgalF1ZXJ5LmZuLmRhdGFUYWJsZS5leHQuY2xhc3Nlcy5zUGFnZUJ1dHRvbkFjdGl2ZSA9ICdidG4gYnRuLWxpZ2h0JztcbiAgICB0aGlzLnJlbG9hZFN1YnNjcmlwdGlvbiA9IHRoaXMucmVsb2FkLnN1YnNjcmliZSgoZGF0YSkgPT4ge1xuICAgICAgdGhpcy5mZXRjaCgpO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gc2ltcGxlIHNlYXJjaFxuICBwdWJsaWMgc2VhcmNoKHNlYXJjaFRleHQpIHtcbiAgICB0aGlzLnF1ZXJ5ID0gdGhpcy5xdWVyeSB8fCB0aGlzLl9jb250ZXh0Lm1vZGVsKHRoaXMuY29uZmlnLm1vZGVsKS5hc1F1ZXJ5YWJsZSgpO1xuICAgIGlmICh0aGlzLnNlcnZlclNpZGUpIHtcbiAgICAgIGlmIChzZWFyY2hUZXh0ICYmIHRoaXMuY29uZmlnLnNlYXJjaEV4cHJlc3Npb24pIHtcbiAgICAgICAgLy8gdmFsaWRhdGUgc2VhcmNoIHRleHQgaW4gZG91YmxlIHF1b3Rlc1xuICAgICAgICBpZiAoL15cIiguKj8pXCIkLy50ZXN0KHNlYXJjaFRleHQpKSB7XG4gICAgICAgICAgdGhpcy5xdWVyeS5zZXRQYXJhbSgnJGZpbHRlcicsXG4gICAgICAgICAgICB0aGlzLl90ZW1wbGF0ZS50cmFuc2Zvcm0odGhpcy5jb25maWcuc2VhcmNoRXhwcmVzc2lvbiwge1xuICAgICAgICAgICAgICB0ZXh0OiBzZWFyY2hUZXh0LnJlcGxhY2UoL15cInxcIiQvZywgJycpLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIHRyeSB0byBzcGxpdCB3b3Jkc1xuICAgICAgICAgIGNvbnN0IHdvcmRzID0gc2VhcmNoVGV4dC5zcGxpdCgnICcpO1xuICAgICAgICAgIC8vIGpvaW4gd29yZHMgdG8gYSBzaW5nbGUgZmlsdGVyXG4gICAgICAgICAgY29uc3QgZmlsdGVyID0gd29yZHMubWFwKCh3b3JkKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdGVtcGxhdGUudHJhbnNmb3JtKCh0aGlzLmNvbmZpZyAmJiB0aGlzLmNvbmZpZy5zZWFyY2hFeHByZXNzaW9uKSBhcyBzdHJpbmcsIHtcbiAgICAgICAgICAgICAgdGV4dDogd29yZCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pLmpvaW4oJyBhbmQgJyk7XG4gICAgICAgICAgLy8gc2V0IGZpbHRlclxuICAgICAgICAgIHRoaXMucXVlcnkuc2V0UGFyYW0oJyRmaWx0ZXInLCBmaWx0ZXIpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBjbGVhciBmaWx0ZXJcbiAgICAgICAgdGhpcy5xdWVyeS5zZXRQYXJhbSgnJGZpbHRlcicsIG51bGwpO1xuICAgICAgfVxuICAgICAgdGhpcy5fZmlyc3RMb2FkID0gZmFsc2U7XG4gICAgICB0aGlzLmRhdGFUYWJsZS5kcmF3KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGVuc3VyZSBlbXB0eSB0YWJsZSBsYXlvdXRcbiAgICAgIHRoaXMucmVzZXRFbXB0eVRhYmxlKCk7XG4gICAgICAvLyBzZWFyY2ggbG9jYWxseVxuICAgICAgdGhpcy5kYXRhVGFibGUuc2VhcmNoKHNlYXJjaFRleHQudHJpbSgpKS5kcmF3KCk7XG4gICAgICAvLyBnZXQgaW5kZXhlcyBvZiBmaWx0ZXJlZCByb3dzXG4gICAgICBjb25zdCBpbmRleGVzID0gQXJyYXkuZnJvbSh0aGlzLmRhdGFUYWJsZS5jb250ZXh0WzBdLmFpRGlzcGxheSk7XG4gICAgICAvLyBzZXQgcmVjb3Jkc0ZpbHRlcmVkXG4gICAgICBjb25zdCByZWNvcmRzRmlsdGVyZWQgPSBpbmRleGVzLmxlbmd0aDtcbiAgICAgIC8vIHNldCByZWNvcmRzVG90YWxcbiAgICAgIGNvbnN0IHJlY29yZHNUb3RhbCA9IGluZGV4ZXMubGVuZ3RoO1xuICAgICAgLy8gcmV0cmlldmUgZGF0YSBmcm9tIGluZGV4ZXNcbiAgICAgIGNvbnN0IHJvd3MgPSBBcnJheS5mcm9tKHRoaXMuZGF0YVRhYmxlLnJvd3MoKS5kYXRhKCkpO1xuICAgICAgY29uc3QgZGF0YSA9IGluZGV4ZXMubWFwKGluZGV4ID0+IHJvd3NbPG51bWJlcj5pbmRleF0pO1xuICAgICAgLy8gZW1pdCByZXN1bHRzIHRvIGxvYWQgb3V0cHV0XG4gICAgICB0aGlzLmxvYWQuZW1pdCh7XG4gICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgIHJlY29yZHNGaWx0ZXJlZDogcmVjb3Jkc0ZpbHRlcmVkLFxuICAgICAgICByZWNvcmRzVG90YWw6IHJlY29yZHNUb3RhbFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGZldGNoKGNsZWFyU2VsZWN0ZWQ/OiBib29sZWFuKSB7XG4gICAgLy8gaWYgZGF0YSB0YWJsZSBpcyBudWxsXG4gICAgaWYgKHRoaXMuZGF0YVRhYmxlID09IG51bGwpIHtcbiAgICAgIC8vIGluaXRpYWxpemUgZGF0YSB0YWJsZVxuICAgICAgcmV0dXJuIHRoaXMubmdPbkluaXQoKTtcbiAgICB9XG4gICAgLy8gY2xlYXIgc2VsZWN0aW9uIGlmIHBhcmFtZXRlciBpcyBub3QgZGVjbGFyZWQgb3IgaXQncyB0cnVlXG4gICAgaWYgKGNsZWFyU2VsZWN0ZWQgPT0gbnVsbCB8fCBjbGVhclNlbGVjdGVkID09PSB0cnVlKSB7XG4gICAgICAvLyBzZXQgc21hcnQgc2VsZWN0IHRvIGZhbHNlXG4gICAgICB0aGlzLnNtYXJ0U2VsZWN0ID0gZmFsc2U7XG4gICAgICAvLyBjbGVhciBzZWxlY3RlZCBpdGVtc1xuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWQubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWQuc3BsaWNlKDAsIHRoaXMuc2VsZWN0ZWQubGVuZ3RoKTtcbiAgICAgIH1cbiAgICAgIC8vIGNsZWFyIHVuc2VsZWN0ZWQgaXRlbXNcbiAgICAgIGlmICh0aGlzLnVuc2VsZWN0ZWQubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMudW5zZWxlY3RlZC5zcGxpY2UoMCwgdGhpcy51bnNlbGVjdGVkLmxlbmd0aCk7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIG90aGVyd2lzZSBsb2FkIGRhdGEgb25seVxuICAgIHRoaXMuZGF0YVRhYmxlLmRyYXcoKTtcbiAgfVxuXG4gIHB1YmxpYyBkZXN0cm95KCkge1xuICAgIGlmICh0aGlzLmRhdGFUYWJsZSkge1xuICAgICAgdGhpcy5kYXRhVGFibGUuZGVzdHJveSgpO1xuICAgICAgdGhpcy5fZmlyc3RMb2FkID0gdHJ1ZTtcbiAgICAgIGlmICh0aGlzLnRhYmxlKSB7XG4gICAgICAgIGpRdWVyeSh0aGlzLnRhYmxlLm5hdGl2ZUVsZW1lbnQpLmVtcHR5KCk7XG4gICAgICB9XG4gICAgICB0aGlzLmRhdGFUYWJsZSA9IG51bGw7XG4gICAgICAvLyBjbGVhciBzZWxlY3RlZCBpdGVtc1xuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWQubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWQuc3BsaWNlKDAsIHRoaXMuc2VsZWN0ZWQubGVuZ3RoKTtcbiAgICAgIH1cbiAgICAgIC8vIGNsZWFyIHVuc2VsZWN0ZWQgaXRlbXNcbiAgICAgIGlmICh0aGlzLnVuc2VsZWN0ZWQubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMudW5zZWxlY3RlZC5zcGxpY2UoMCwgdGhpcy51bnNlbGVjdGVkLmxlbmd0aCk7XG4gICAgICB9XG4gICAgICAvLyBzZXQgc21hcnQgc2VsZWN0IHRvIGZhbHNlXG4gICAgICB0aGlzLnNtYXJ0U2VsZWN0ID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNlbGVjdHMgdGhlIHNwZWNpZmllZCBkYXRhIHJvd1xuICAgKi9cbiAgcHVibGljIHNlbGVjdFJvdyhyb3c6IGFueSwgc2lsZW50PzogYm9vbGVhbikge1xuICAgIGlmIChyb3cpIHtcbiAgICAgIC8vIGdldCByb3dcbiAgICAgIGNvbnN0IHJvd05vZGUgPSByb3cubm9kZSgpO1xuICAgICAgLy8gaWYgbXVsdGlwbGUgc2VsZWN0IGlzIGZhbHNlXG4gICAgICBpZiAodGhpcy5tdWx0aXBsZVNlbGVjdCA9PT0gZmFsc2UpIHtcbiAgICAgICAgaWYgKHRoaXMuY3VzdG9tU2VsZWN0ID09PSBmYWxzZSkge1xuICAgICAgICAgIC8vIGVudW1lcmF0ZSByb3dcbiAgICAgICAgICB0aGlzLmRhdGFUYWJsZS5yb3dzKCkubm9kZXMoKS5lYWNoKChub2RlOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChub2RlICE9PSByb3dOb2RlKSB7XG4gICAgICAgICAgICAgIGpRdWVyeShub2RlKS5maW5kKCc6Y2hlY2tib3gnKS5wcm9wKCdjaGVja2VkJywgZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZGF0YVRhYmxlLnJvd3MoJy5zZWxlY3RlZCcpLm5vZGVzKCkuZWFjaCgobm9kZTogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAobm9kZSAhPT0gcm93Tm9kZSkge1xuICAgICAgICAgICAgICBqUXVlcnkobm9kZSkucmVtb3ZlQ2xhc3MoJ3NlbGVjdGVkJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY2xlYXIgc2VsZWN0ZWRcbiAgICAgICAgdGhpcy5zZWxlY3RlZC5zcGxpY2UoMCwgdGhpcy5zZWxlY3RlZC5sZW5ndGgpO1xuICAgICAgfVxuICAgICAgLy8gaWYgY3VzdG9tIHNlbGVjdCBtb2RlIGlzIG9mZlxuICAgICAgaWYgKHRoaXMuY3VzdG9tU2VsZWN0ID09PSBmYWxzZSkge1xuICAgICAgICBqUXVlcnkocm93Tm9kZSkuZmluZCgnOmNoZWNrYm94JykucHJvcCgnY2hlY2tlZCcsIHRydWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gb3RoZXJ3aXNlIGFkZCBjbGFzc1xuICAgICAgICBqUXVlcnkocm93Lm5vZGUoKSkuYWRkQ2xhc3MoJ3NlbGVjdGVkJyk7XG4gICAgICB9XG4gICAgICAvLyBnZXQgcm93IGRhdGFcbiAgICAgIGNvbnN0IGtleSA9IHRoaXMuY29uZmlnLmNvbHVtbnNbMF0ucHJvcGVydHkgfHwgdGhpcy5jb25maWcuY29sdW1uc1swXS5uYW1lIHx8ICcnO1xuICAgICAgY29uc3QgZGF0YSA9IHJvdy5kYXRhKCk7XG4gICAgICAvLyBzZWFyY2ggc2VsZWN0ZWQgaXRlbXNcbiAgICAgIGxldCBmaW5kSW5kZXggPSB0aGlzLnNlbGVjdGVkLmZpbmRJbmRleCgoeCkgPT4ge1xuICAgICAgICByZXR1cm4geFtrZXldID09PSBkYXRhW2tleV07XG4gICAgICB9KTtcbiAgICAgIGlmIChmaW5kSW5kZXggPj0gMCkge1xuICAgICAgICAvLyByZW1vdmUgcHJldmlvdXNseSBzZWxlY3RlZCByb3dcbiAgICAgICAgdGhpcy5zZWxlY3RlZC5zcGxpY2UoZmluZEluZGV4LCAxKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2VsZWN0ZWQucHVzaChkYXRhKTtcbiAgICAgIC8vIHZhbGlkYXRlIHVuc2VsZWN0ZWQgZGF0YVxuICAgICAgZmluZEluZGV4ID0gdGhpcy51bnNlbGVjdGVkLmZpbmRJbmRleCgoeCkgPT4ge1xuICAgICAgICByZXR1cm4geFtrZXldID09PSBkYXRhW2tleV07XG4gICAgICB9KTtcbiAgICAgIGlmIChmaW5kSW5kZXggPj0gMCkge1xuICAgICAgICAvLyByZW1vdmUgcHJldmlvdXNseSBzZWxlY3RlZCByb3dcbiAgICAgICAgdGhpcy51bnNlbGVjdGVkLnNwbGljZShmaW5kSW5kZXgsIDEpO1xuICAgICAgfVxuICAgICAgaWYgKHNpbGVudCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbXMuZW1pdCh0aGlzLnNlbGVjdGVkKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVW5zZWxlY3RzIHRoZSBzcGVjaWZpZWQgZGF0YSByb3cgaWYgaXQncyBzZWxlY3RlZFxuICAgKi9cbiAgcHVibGljIHVuU2VsZWN0Um93KHJvdzogYW55LCBzaWxlbnQ/OiBib29sZWFuKSB7XG4gICAgaWYgKHJvdykge1xuICAgICAgLy8gaWYgY3VzdG9tIHNlbGVjdCBtb2RlIGlzIG9mZlxuICAgICAgaWYgKHRoaXMuY3VzdG9tU2VsZWN0ID09PSBmYWxzZSkge1xuICAgICAgICBqUXVlcnkocm93Lm5vZGUoKSkuZmluZCgnOmNoZWNrYm94JykucHJvcCgnY2hlY2tlZCcsIGZhbHNlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIG90aGVyd2lzZSBhZGQgY2xhc3NcbiAgICAgICAgalF1ZXJ5KHJvdy5ub2RlKCkpLnJlbW92ZUNsYXNzKCdzZWxlY3RlZCcpO1xuICAgICAgfVxuICAgICAgLy8gZ2V0IGZpcnN0IGNvbHVtbiBrZXlcbiAgICAgIGNvbnN0IGtleSA9IHRoaXMuY29uZmlnLmNvbHVtbnNbMF0ucHJvcGVydHkgfHwgdGhpcy5jb25maWcuY29sdW1uc1swXS5uYW1lIHx8ICcnO1xuICAgICAgY29uc3QgZGF0YSA9IHJvdy5kYXRhKCk7XG4gICAgICBjb25zdCBpZCA9IGRhdGFba2V5XTtcbiAgICAgIGxldCBmaW5kSW5kZXggPSB0aGlzLnNlbGVjdGVkLmZpbmRJbmRleCgoeCkgPT4ge1xuICAgICAgICByZXR1cm4geFtrZXldID09PSBpZDtcbiAgICAgIH0pO1xuICAgICAgaWYgKGZpbmRJbmRleCA+PSAwKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWQuc3BsaWNlKGZpbmRJbmRleCwgMSk7XG4gICAgICAgIGlmICh0aGlzLnNtYXJ0U2VsZWN0KSB7XG4gICAgICAgICAgLy8gYWRkIHRoaXMgcm93IHRvIHVuc2VsZWN0ZWQgcm93c1xuICAgICAgICAgIGZpbmRJbmRleCA9IHRoaXMudW5zZWxlY3RlZC5maW5kSW5kZXgoKHgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB4W2tleV0gPT09IGlkO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmIChmaW5kSW5kZXggPCAwKSB7XG4gICAgICAgICAgICB0aGlzLnVuc2VsZWN0ZWQucHVzaChkYXRhKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNpbGVudCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMuZW1pdCh0aGlzLnNlbGVjdGVkKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2VsZWN0QW55KCkge1xuICAgIGlmICh0aGlzLmRhdGFUYWJsZSAmJiB0aGlzLnNlbGVjdGFibGUpIHtcbiAgICAgIC8vIHNldCBzbWFydCBzZWxlY3QgZmxhZ1xuICAgICAgdGhpcy5zbWFydFNlbGVjdCA9IHRydWU7XG4gICAgICAvLyBzZWxlY3QgYW55IHJvd1xuICAgICAgdGhpcy5kYXRhVGFibGUucm93cygpLmV2ZXJ5KChpbmRleDogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IHJvdyA9IHRoaXMuZGF0YVRhYmxlLnJvdyggaW5kZXggKTtcbiAgICAgICAgdGhpcy5zZWxlY3RSb3cocm93LCB0cnVlKTtcbiAgICAgIH0pO1xuICAgICAgLy8gZW1pdCBzZWxlY3Rpb24gZXZlbnRcbiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5lbWl0KHRoaXMuc2VsZWN0ZWQpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZWxlY3ROb25lKCkge1xuICAgIGlmICh0aGlzLmRhdGFUYWJsZSAmJiB0aGlzLnNlbGVjdGFibGUpIHtcbiAgICAgIC8vIHNldCBzbWFydCBzZWxlY3QgZmxhZ1xuICAgICAgdGhpcy5zbWFydFNlbGVjdCA9IGZhbHNlO1xuICAgICAgdGhpcy51bnNlbGVjdGVkLnNwbGljZSgwLCB0aGlzLnVuc2VsZWN0ZWQubGVuZ3RoKTtcbiAgICAgIC8vIHNlbGVjdCBhbnkgcm93XG4gICAgICB0aGlzLmRhdGFUYWJsZS5yb3dzKCkuZXZlcnkoKGluZGV4OiBhbnkpID0+IHtcbiAgICAgICAgY29uc3Qgcm93ID0gdGhpcy5kYXRhVGFibGUucm93KCBpbmRleCApO1xuICAgICAgICB0aGlzLnVuU2VsZWN0Um93KHJvdywgdHJ1ZSk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuc2VsZWN0ZWQuc3BsaWNlKDAsIHRoaXMuc2VsZWN0ZWQubGVuZ3RoKTtcbiAgICAgIC8vIGVtaXQgc2VsZWN0aW9uIGV2ZW50XG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbXMuZW1pdCh0aGlzLnNlbGVjdGVkKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgdG9nZ2xlU2VsZWN0Um93KHJvdzogYW55KSB7XG4gICAgaWYgKHJvdykge1xuICAgICAgY29uc3QgZGF0YSA9IHJvdy5kYXRhKCk7XG4gICAgICAvLyBnZXQgZmlyc3QgY29sdW1uIGtleVxuICAgICAgY29uc3Qga2V5ID0gdGhpcy5jb25maWcuY29sdW1uc1swXS5wcm9wZXJ0eSB8fCB0aGlzLmNvbmZpZy5jb2x1bW5zWzBdLm5hbWUgfHwgJyc7XG4gICAgICAvLyBnZXQgaWRcbiAgICAgIGNvbnN0IGlkID0gZGF0YVtrZXldO1xuICAgICAgLy8gZmluZCBpZiByb3cgaXMgc2VsZWN0ZWRcbiAgICAgIGNvbnN0IGZpbmRJbmRleCA9IHRoaXMuc2VsZWN0ZWQuZmluZCgoeCkgPT4ge1xuICAgICAgICByZXR1cm4geFtrZXldID09PSBpZDtcbiAgICAgIH0pO1xuICAgICAgLy8gaWYgcm93IGlzIHNlbGVjdGVkXG4gICAgICBpZiAoZmluZEluZGV4ID49IDApIHtcbiAgICAgICAgLy8gdW5zZWxlY3RcbiAgICAgICAgdGhpcy51blNlbGVjdFJvdyhyb3cpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zZWxlY3RSb3cocm93KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBub2luc3BlY3Rpb24gSlNNZXRob2RDYW5CZVN0YXRpY1xuICAvKipcbiAgICogRGF0YXRhYmxlcyBjb2x1bW4gcmVuZGVyZXIgZm9yIHNlbGVjdCBjaGVja2JveFxuICAgKiBAcGFyYW0gZGF0YVxuICAgKiBAcGFyYW0gdHlwZVxuICAgKiBAcGFyYW0gcm93XG4gICAqIEBwYXJhbSBtZXRhXG4gICAqL1xuICBwcml2YXRlIF9yZW5kZXJTZWxlY3QoZGF0YSwgdHlwZSwgcm93LCBtZXRhKSB7XG4gICAgLy8gZ2V0IGNvbHVtblxuICAgIGNvbnN0IGNvbHVtbiA9IG1ldGEuc2V0dGluZ3MuYW9Db2x1bW5zW21ldGEuY29sXTtcbiAgICBpZiAodHlwZW9mIGNvbHVtbi5zZWxlY3RUZW1wbGF0ZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgT2JqZWN0LmFzc2lnbihjb2x1bW4sIHtcbiAgICAgICAgc2VsZWN0VGVtcGxhdGU6IHRlbXBsYXRlKGA8aW5wdXQgY2xhc3M9XCJjaGVja2JveCBjaGVja2JveC10aGVtZSBzLXJvd1wiIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgIGlkPVwicy0ke3RoaXMuX2lkfS1cXCR7bWV0YS5yb3d9XCIgZGF0YS1pZD1cIlxcJHtkYXRhfVwiIC8+PGxhYmVsIGZvcj1cInMtJHt0aGlzLl9pZH0tXFwke21ldGEucm93fVwiPiZuYnNwOzwvbGFiZWw+XG4gICAgICAgIGApLFxuICAgICAgfSk7XG4gICAgfVxuICAgIC8vIHJlbmRlciB0ZW1wbGF0ZVxuICAgIHJldHVybiBjb2x1bW4uc2VsZWN0VGVtcGxhdGUoe1xuICAgICAgbWV0YSxcbiAgICAgIGRhdGEsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgaWYgKHRoaXMuZGF0YVRhYmxlKSB7XG4gICAgICB0aGlzLmRlc3Ryb3koKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuY29uZmlnKSB7XG4gICAgICB0aGlzLmxvYWRpbmcuZW1pdCh7XG4gICAgICAgIHRhcmdldDogdGhpc1xuICAgICAgfSk7XG4gICAgICAvLyBwYXJzZSBwcm9wZXJ0aWVzXG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuY29uZmlnLCAnc2VsZWN0YWJsZScpKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0YWJsZSA9IHRoaXMuY29uZmlnLnNlbGVjdGFibGU7XG4gICAgICB9XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuY29uZmlnLCAnbXVsdGlwbGVTZWxlY3QnKSkge1xuICAgICAgICB0aGlzLm11bHRpcGxlU2VsZWN0ID0gdGhpcy5jb25maWcubXVsdGlwbGVTZWxlY3Q7XG4gICAgICB9XG4gICAgICAvLyBwcmVwYXJlIGNvbmZpZ3VyYXRpb24gZm9yIGNvbHVtbnNcbiAgICAgIGNvbnN0IHRhYmxlQ29sdW1ucyA9IHRoaXMuY29uZmlnLmNvbHVtbnNcbiAgICAgICAgLy8gZmlsdGVyIGFjdGlvbiBsaW5rIGNvbHVtblxuICAgICAgICAuZmlsdGVyKChjb2x1bW4pID0+IHtcbiAgICAgICAgICBpZiAoY29sdW1uLmZvcm1hdHRlciAmJiBjb2x1bW4uZm9ybWF0dGVyID09PSAnQWN0aW9uTGlua0Zvcm1hdHRlcicgJiYgdGhpcy5zaG93QWN0aW9ucyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0pLm1hcCgoY29sdW1uKSA9PiB7XG4gICAgICAgICAgLy8gY29udmVydCBjb2x1bW4gdG8gYWR2YW5jZSB0YWJsZSBjb2x1bW5cbiAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihuZXcgQ29sdW1uRm9ybWF0dGVyKHRoaXMuX2luamVjdG9yKSwgY29sdW1uKTtcbiAgICAgICAgfSkubWFwKChjb2x1bW4pID0+IHtcbiAgICAgICAgICBjb25zdCBjb2x1bW5EZWZpbml0aW9uID0ge1xuICAgICAgICAgICAgZGF0YTogY29sdW1uLnByb3BlcnR5IHx8IGNvbHVtbi5uYW1lLFxuICAgICAgICAgICAgZGVmYXVsdENvbnRlbnQ6IGNvbHVtbi5kZWZhdWx0Q29udGVudCAhPSBudWxsID8gY29sdW1uLmRlZmF1bHRDb250ZW50IDogJycsXG4gICAgICAgICAgICB0aXRsZTogdGhpcy50cmFuc2xhdG9yLnRyYW5zZm9ybShjb2x1bW4udGl0bGUpLFxuICAgICAgICAgICAgc29ydGFibGU6IGNvbHVtbi5oYXNPd25Qcm9wZXJ0eSgnc29ydGFibGUnKSA/IGNvbHVtbi5zb3J0YWJsZSA6IHRydWUsXG4gICAgICAgICAgICB2aXNpYmxlOiBjb2x1bW4uaGFzT3duUHJvcGVydHkoJ2hpZGRlbicpID8gIWNvbHVtbi5oaWRkZW4gOiB0cnVlLFxuICAgICAgICAgICAgbmFtZTogY29sdW1uLm5hbWUsXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGlmIChjb2x1bW4uY2xhc3NOYW1lKSB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKGNvbHVtbkRlZmluaXRpb24sIHtcbiAgICAgICAgICAgICAgY2xhc3NOYW1lOiBjb2x1bW4uY2xhc3NOYW1lLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oY29sdW1uRGVmaW5pdGlvbiwge1xuICAgICAgICAgICAgICBjbGFzc05hbWU6ICcnLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGNvbHVtbi5mb3JtYXR0ZXJzKSB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKGNvbHVtbkRlZmluaXRpb24sIHtcbiAgICAgICAgICAgICAgcmVuZGVyKGRhdGE6IGFueSwgdHlwZTogc3RyaW5nLCByb3c6IGFueSwgbWV0YTogYW55KSB7XG4gICAgICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGRhdGE7XG4gICAgICAgICAgICAgICAgKGNvbHVtbi5mb3JtYXR0ZXJzIGFzIGFueVtdKS5mb3JFYWNoKChjb2x1bW5Gb3JtYXR0ZXIpID0+IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlciA9IHNlbGYuX2NvbHVtbkZvcm1hdHRlcnNbY29sdW1uRm9ybWF0dGVyLmZvcm1hdHRlcl07XG4gICAgICAgICAgICAgICAgICBpZiAoZm9ybWF0dGVyICYmIHR5cGVvZiBmb3JtYXR0ZXIucmVuZGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbi5mb3JtYXRTdHJpbmcgPSBjb2x1bW5Gb3JtYXR0ZXIuZm9ybWF0U3RyaW5nO1xuICAgICAgICAgICAgICAgICAgICBjb2x1bW4uZm9ybWF0T3B0aW9ucyA9IGNvbHVtbkZvcm1hdHRlci5mb3JtYXRPcHRpb25zO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gZm9ybWF0dGVyLnJlbmRlci5iaW5kKGNvbHVtbikocmVzdWx0LCB0eXBlLCByb3csIG1ldGEpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBjb2x1bW4uZm9ybWF0U3RyaW5nO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBjb2x1bW4uZm9ybWF0T3B0aW9ucztcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBjaGVjayBpZiBjb2x1bW4gZm9ybWF0dGVycyBleHBvcnQgY3JlYXRlZENlbGwgZXZlbnRcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1zID0gY29sdW1uLmZvcm1hdHRlcnMuZmlsdGVyKChjb2x1bW5Gb3JtYXR0ZXIpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHlwZW9mIGNvbHVtbkZvcm1hdHRlci5hZnRlclJlbmRlciA9PT0gJ2Z1bmN0aW9uJztcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGl0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihjb2x1bW5EZWZpbml0aW9uLCB7XG4gICAgICAgICAgICAgICAgY3JlYXRlZENlbGwoY2VsbDogYW55LCBjZWxsRGF0YTogYW55LCByb3dEYXRhOiBhbnksIHJvd0luZGV4OiBudW1iZXIsIGNvbEluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgICAgICAgICAgIGl0ZW1zLmZvckVhY2goKGNvbHVtbkZvcm1hdHRlcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmb3JtYXR0ZXIgPSBzZWxmLl9jb2x1bW5Gb3JtYXR0ZXJzW2NvbHVtbkZvcm1hdHRlci5mb3JtYXR0ZXJdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZm9ybWF0dGVyICYmIHR5cGVvZiBmb3JtYXR0ZXIuYWZ0ZXJSZW5kZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtYXR0ZXIuYWZ0ZXJSZW5kZXIuYmluZChjb2x1bW4pKGNlbGwsIGNlbGxEYXRhLCByb3dEYXRhLCByb3dJbmRleCwgY29sSW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoY29sdW1uLmZvcm1hdHRlcikge1xuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVyID0gc2VsZi5fY29sdW1uRm9ybWF0dGVyc1tjb2x1bW4uZm9ybWF0dGVyXTtcbiAgICAgICAgICAgIGlmIChmb3JtYXR0ZXIgJiYgdHlwZW9mIGZvcm1hdHRlci5yZW5kZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihjb2x1bW5EZWZpbml0aW9uLCB7XG4gICAgICAgICAgICAgICAgcmVuZGVyOiBmb3JtYXR0ZXIucmVuZGVyLmJpbmQoY29sdW1uKSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZm9ybWF0dGVyICYmIHR5cGVvZiBmb3JtYXR0ZXIuYWZ0ZXJSZW5kZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihjb2x1bW5EZWZpbml0aW9uLCB7XG4gICAgICAgICAgICAgICAgcmVuZGVyOiBmb3JtYXR0ZXIucmVuZGVyLmJpbmQoY29sdW1uKSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oY29sdW1uRGVmaW5pdGlvbiwge1xuICAgICAgICAgICAgICAgIGNyZWF0ZWRDZWxsOiBmb3JtYXR0ZXIuYWZ0ZXJSZW5kZXIuYmluZChjb2x1bW4pLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGNvbHVtbkRlZmluaXRpb247XG4gICAgICAgIH0pO1xuICAgICAgLy8gZ2V0IHRhYmxlIGVsZW1lbnRcbiAgICAgIGNvbnN0IHRhYmxlRWxlbWVudCA9IGpRdWVyeSh0aGlzLnRhYmxlICYmIHRoaXMudGFibGUubmF0aXZlRWxlbWVudCk7XG4gICAgICBqUXVlcnkod2luZG93KS5vbigncmVzaXplJywgKCkgPT4ge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5kYXRhVGFibGUpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YVRhYmxlLmNvbHVtbnMuYWRqdXN0KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LCAxKTtcbiAgICAgIH0pO1xuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1zaGFkb3dlZC12YXJpYWJsZVxuICAgICAgdGFibGVFbGVtZW50Lm9uKCdwcm9jZXNzaW5nLmR0JywgKGV2ZW50LCBzZXR0aW5ncywgcHJvY2Vzc2luZykgPT4ge1xuICAgICAgICBpZiAocHJvY2Vzc2luZykge1xuICAgICAgICAgIC8vIGNsZWFyIGVtcHR5IHRhYmxlIGVsZW1lbnRcbiAgICAgICAgICB0YWJsZUVsZW1lbnQuZmluZCgnLmRhdGFUYWJsZXNfZW1wdHknKS5odG1sKCcnKTtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRhYmxlRWxlbWVudC5hZGRDbGFzcygncHJvY2Vzc2luZycpO1xuICAgICAgICAgIH0sIDApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGFibGVFbGVtZW50LnJlbW92ZUNsYXNzKCdwcm9jZXNzaW5nJyk7XG4gICAgICAgICAgfSwgMCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgbGV0IGRyYXdJbmRleCA9IDE7XG4gICAgICB0YWJsZUVsZW1lbnQub24oJ29yZGVyLmR0JywgKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuZGF0YVRhYmxlKSB7XG4gICAgICAgICAgY29uc3Qgb3JkZXIgPSB0aGlzLmRhdGFUYWJsZS5vcmRlcigpO1xuICAgICAgICAgIGNvbnN0IGNvbHVtbnMgPSB0YWJsZUNvbHVtbnM7XG4gICAgICAgICAgaWYgKG9yZGVyICYmIG9yZGVyLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5vcmRlci5lbWl0KG9yZGVyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pLm9uKCdkcmF3LmR0JywgKGV2ZW50KSA9PiB7XG4gICAgICAgIHRoaXMuZHJhdy5lbWl0KCk7XG4gICAgICAgIGlmICh0aGlzLmRhdGFUYWJsZSkge1xuICAgICAgICAgIGNvbnN0IGluZm86IHsgcGFnZTogbnVtYmVyOyBwYWdlczogbnVtYmVyIH0gPSB0aGlzLmRhdGFUYWJsZS5wYWdlLmluZm8oKTtcbiAgICAgICAgICB0aGlzLnBhZ2UuZW1pdChpbmZvKTtcbiAgICAgICAgICBpZiAoZHJhd0luZGV4ID4gMSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgZHJhd0luZGV4Kys7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHt0aGlzLmRhdGFUYWJsZS5jb2x1bW5zLmFkanVzdCgpOyB9LCAxKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0VSUk9SJywgJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIGFkanVzdGluZyB0YWJsZSBjb2x1bW5zJyk7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgLy8gYWxsb3cgc2VsZWN0aW9uXG4gICAgICBpZiAodGhpcy5zZWxlY3RhYmxlKSB7XG4gICAgICAgIC8vIGdldCBmaXJzdCBjb2x1bW4gKGFzIHJvdyBwcmltYXJ5IGtleSlcbiAgICAgICAgLy8gdG9kbzo6YWxsb3cgcm93IHByaW1hcnkga2V5IGNvbmZpZ3VyYXRpb25cbiAgICAgICAgY29uc3QgZmlyc3RDb2x1bW4gPSB0aGlzLmNvbmZpZy5jb2x1bW5zWzBdO1xuICAgICAgICAvLyBhZGQgc2VsZWN0IGNvbHVtblxuICAgICAgICBjb25zdCBzZWxlY3RDb2x1bW5EZWZpbml0aW9uID0ge1xuICAgICAgICAgIGNsYXNzTmFtZTogJ3RleHQtY2VudGVyIHBsLTQgcHItMCcsXG4gICAgICAgICAgZGF0YTogZmlyc3RDb2x1bW4ucHJvcGVydHkgfHwgZmlyc3RDb2x1bW4ubmFtZSxcbiAgICAgICAgICBkZWZhdWx0Q29udGVudDogJycsXG4gICAgICAgICAgdGl0bGU6ICcnLFxuICAgICAgICAgIHNvcnRhYmxlOiBmYWxzZSxcbiAgICAgICAgICB2aXNpYmxlOiAhdGhpcy5jdXN0b21TZWxlY3QsXG4gICAgICAgICAgbmFtZTogZmlyc3RDb2x1bW4ubmFtZSxcbiAgICAgICAgfTtcbiAgICAgICAgLy8gYXNzaWduIHJlbmRlcmVyXG4gICAgICAgIE9iamVjdC5hc3NpZ24oc2VsZWN0Q29sdW1uRGVmaW5pdGlvbiwge1xuICAgICAgICAgIHJlbmRlcjogdGhpcy5fcmVuZGVyU2VsZWN0LmJpbmQodGhpcyksXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBhbmQgZmluYWxseSBhZGQgY29sdW1uXG4gICAgICAgIHRhYmxlQ29sdW1ucy51bnNoaWZ0KHNlbGVjdENvbHVtbkRlZmluaXRpb24pO1xuICAgICAgICAvLyB1c2VyIGludGVyZmFjZSBhZGRpdGlvbnNcbiAgICAgICAgLy8gaGFuZGxlIHBhZ2UgY2hhbmdlIGV2ZW50IChhIHRyaWNrIGZvciBmaXJpbmcgZHJhdy5kdCBldmVudHMpXG4gICAgICAgIHRhYmxlRWxlbWVudFxuICAgICAgICAgIC8vIGhhbmRsZSBkcmF3IGV2ZW50c1xuICAgICAgICAgIC5vbignZHJhdy5kdCcsICgpID0+IHtcblxuICAgICAgICAgICAgaWYgKHRoaXMuY3VzdG9tU2VsZWN0KSB7XG4gICAgICAgICAgICAgIC8vIGVuYWJsZSByb3cgc2VsZWN0aW9uIGV2ZW50XG4gICAgICAgICAgICAgIHRhYmxlRWxlbWVudC5maW5kKCd0Ym9keScpLm9uKCdjbGljaycsICd0cicsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIC8vIHNlbGVjdCByb3dcbiAgICAgICAgICAgICAgICBjb25zdCByb3cgPSBzZWxmLmRhdGFUYWJsZS5yb3codGhpcyk7XG4gICAgICAgICAgICAgICAgLy8gYWRkIHJvd1xuICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0LmVtaXQocm93KTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50cyA9IHRhYmxlRWxlbWVudC5maW5kKCdpbnB1dC5zLXJvdycpO1xuICAgICAgICAgICAgZWxlbWVudHMub2ZmKCdjbGljaycpLm9uKCdjbGljaycsIHRoaXMub25TZWxlY3Rpb25DaGFuZ2UuYmluZCh0aGlzKSk7XG4gICAgICAgICAgICAvLyBtYWtlIHNlbGVjdGlvbiBvbiBjdXJyZW50IHBhZ2VcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IHRoaXMuY29uZmlnLmNvbHVtbnNbMF0ucHJvcGVydHkgfHwgJyc7XG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIC8vIGVudW1lcmF0ZSBzZWxlY3RlZCBpdGVtc1xuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICAvLyBmaW5kIHJvdyBpZGVudGlmaWVyXG4gICAgICAgICAgICAgICAgY29uc3QgaWQgPSBpdGVtW2tleV07XG4gICAgICAgICAgICAgICAgLy8gaWYgaWRlbnRpZmllciBpcyBkZWZpbmVkXG4gICAgICAgICAgICAgICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgIC8vIHRyeSB0byBmaW5kIGNoZWNrIGVsZW1lbnQgd2l0aCB0aGlzIGlkZW50aWZpZXIgaW4gYXR0cmlidXRlIGRhdGEtaWRcbiAgICAgICAgICAgICAgICAgIHRhYmxlRWxlbWVudC5maW5kKGBpbnB1dFtkYXRhLWlkPScke2lkfSddYCkucHJvcCgnY2hlY2tlZCcsIHRydWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5zbWFydFNlbGVjdCkge1xuICAgICAgICAgICAgICAvLyBzZWxlY3Qgcm93cyB0aGF0IGFyZSBub3Qgc2VsZWN0ZWRcbiAgICAgICAgICAgICAgLy8gYW5kIGRvIG5vdCBpbmNsdWRlZCBpbiB1bnNlbGVjdGVkIGNvbGxlY3Rpb25cbiAgICAgICAgICAgICAgdGFibGVFbGVtZW50LmZpbmQoJ2lucHV0W2RhdGEtaWRdJykuZWFjaCgoaW5kZXgsIGVsZW1lbnQpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBnZXQgZGF0YSBpZFxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnVuc2VsZWN0ZWQuZmluZEluZGV4KCh4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dHJpcGxlLWVxdWFsc1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHhba2V5XSA9PSBqUXVlcnkoZWxlbWVudCkuYXR0cignZGF0YS1pZCcpO1xuICAgICAgICAgICAgICAgIH0pIDwgMCkge1xuICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RSb3codGhpcy5kYXRhVGFibGUucm93KGluZGV4KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgdGFibGVFbGVtZW50LmZpbmQoJ2lucHV0W2RhdGEtaWRdJykucHJvcCgnY2hlY2tlZCcsIGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIC8vIGluaXRpYWxpemUgZGF0YSB0YWJsZVxuICAgICAgY29uc3Qgc2V0dGluZ3MgPSB7XG4gICAgICAgIC8vIHNldCBsZW5ndGggbWVudVxuICAgICAgICBsZW5ndGhNZW51OiBbNSwgMTAsIDUwLCAxMDAsIDIwMCwgNTAwXSxcbiAgICAgICAgLy8gaGlkZSBsZW5ndGggbWVudVxuICAgICAgICBsZW5ndGhDaGFuZ2U6IGZhbHNlLFxuICAgICAgICAvLyBlbmFibGUgc2VhcmNoIGJ1dCBoaWRlIHNlYXJjaCBib3ggKGNzcylcbiAgICAgICAgc2VhcmNoaW5nOiB0cnVlLFxuICAgICAgICAvLyBlbmFibGUgZGF0YSBwcm9jZXNzaW5nXG4gICAgICAgIHByb2Nlc3Npbmc6IHRydWUsXG4gICAgICAgIC8vIGVuYWJsZSBnZXR0aW5nIHNlcnZlciBzaWRlIGRhdGFcbiAgICAgICAgc2VydmVyU2lkZTogdGhpcy5zZXJ2ZXJTaWRlLFxuICAgICAgICAvLyBlbnVtZXJhdGUgdGFibGUgY29sdW1uc1xuICAgICAgICBjb2x1bW5zOiB0YWJsZUNvbHVtbnMsXG4gICAgICAgIGNvbFJlb3JkZXI6ICB0aGlzLmNvbHVtbk9yZGVyaW5nLFxuICAgICAgICBvcmRlcjogW10sXG4gICAgICAgIC8vIHNldCBzY3JvbGwgeFxuICAgICAgICBzY3JvbGxYOiB0aGlzLnNjcm9sbFgsXG4gICAgICAgIGRvbTogJ0JmcnRpcCcsXG4gICAgICAgIGF1dG9XaWR0aDogZmFsc2UsXG4gICAgICAgIGJ1dHRvbnM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBleHRlbmQ6ICdleGNlbCcsXG4gICAgICAgICAgICBmaWxlbmFtZTogdGhpcy5jb25maWcudGl0bGUsXG4gICAgICAgICAgICBjbGFzc05hbWU6ICdkLW5vbmUnLFxuICAgICAgICAgICAgZXhwb3J0T3B0aW9uczoge1xuICAgICAgICAgICAgICBjb2x1bW5zOiAndGg6bm90KDpmaXJzdC1jaGlsZCknLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICAvLyBkZWZpbmUgc2VydmVyIGRhdGEgY2FsbGJhY2tcbiAgICAgICAgZm5TZXJ2ZXJEYXRhKHNTb3VyY2U6IGFueSwgYW9EYXRhOiBhbnksIGZuQ2FsbGJhY2s6IGFueSwgb1NldHRpbmdzOiBhbnkpIHtcbiAgICAgICAgICAvLyBpZiBtZXRob2QgaXMgaW52b2tlZCBmb3IgdGhlIGZpcnN0IHRpbWVcbiAgICAgICAgICBpZiAoc2VsZi5fZmlyc3RMb2FkKSB7XG4gICAgICAgICAgICAvLyBkaXNhYmxlZCBmaXJzdCBsb2FkIGZsYWdcbiAgICAgICAgICAgIHNlbGYuX2ZpcnN0TG9hZCA9IGZhbHNlO1xuICAgICAgICAgICAgLy8gaWYgYXV0byBsb2FkIGlzIGRpc2FibGVkXG4gICAgICAgICAgICBpZiAoc2VsZi5hdXRvTG9hZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgY29uc3QgZW1wdHlEYXRhU2V0ID0ge1xuICAgICAgICAgICAgICAgIHJlY29yZHNUb3RhbDogMCxcbiAgICAgICAgICAgICAgICByZWNvcmRzRmlsdGVyZWQ6IDAsXG4gICAgICAgICAgICAgICAgZGF0YTogW10sXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIHNlbGYuX2xhc3RRdWVyeVRvdGFsSXRlbXMgPSAwO1xuICAgICAgICAgICAgICAvLyBlbWl0IGVtcHR5IGRhdGFcbiAgICAgICAgICAgICAgc2VsZi5sb2FkLmVtaXQoZW1wdHlEYXRhU2V0KTtcbiAgICAgICAgICAgICAgLy8gcmV0dXJuIGVtcHR5IGRhdGFcbiAgICAgICAgICAgICAgcmV0dXJuIGZuQ2FsbGJhY2soZW1wdHlEYXRhU2V0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gcmVzZXQgZXJyb3JcbiAgICAgICAgICBzZWxmLnRvZ2dsZUVycm9yKCk7XG4gICAgICAgICAgLy8gZ2V0IGFjdGl2YXRlZCByb3V0ZSBwYXJhbXNcbiAgICAgICAgICBjb25zdCBxdWVyeVBhcmFtcyA9IHNlbGYuX2FjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zO1xuICAgICAgICAgIC8vIGdldCBjb2x1bW5zXG4gICAgICAgICAgY29uc3QgY29sdW1ucyA9IGFvRGF0YVsxXS52YWx1ZTtcbiAgICAgICAgICAvLyBnZXQgb3JkZXIgZXhwcmVzc2lvblxuICAgICAgICAgIGxldCBvcmRlciA9IGFvRGF0YVsyXS52YWx1ZTtcbiAgICAgICAgICAvLyBnZXQgc2tpcCByZWNvcmRzIHBhcmFtXG4gICAgICAgICAgY29uc3Qgc2tpcCA9IGFvRGF0YVszXS52YWx1ZTtcbiAgICAgICAgICAvLyBnZXQgcGFnZSBzaXplIHBhcmFtXG4gICAgICAgICAgY29uc3QgdG9wID0gYW9EYXRhWzRdLnZhbHVlO1xuICAgICAgICAgIC8vIGdldCBzZWFyY2ggdmFsdWVcbiAgICAgICAgICBjb25zdCBzZWFyY2ggPSBhb0RhdGFbNV0udmFsdWU7XG4gICAgICAgICAgLy8gZ2V0IGRhdGEgcXVlcnlhYmxlXG4gICAgICAgICAgY29uc3QgcSA9IHNlbGYuX3F1ZXJ5IGluc3RhbmNlb2YgQ2xpZW50RGF0YVF1ZXJ5YWJsZSA/IHNlbGYuX3F1ZXJ5IDogc2VsZi5fY29udGV4dC5tb2RlbChzZWxmLmNvbmZpZy5tb2RlbCkuYXNRdWVyeWFibGUoKTtcbiAgICAgICAgICAvLyBhcHBseSBwYWdpbmcgcGFyYW1zXG4gICAgICAgICAgaWYgKHRvcCkge1xuICAgICAgICAgICAgcS50YWtlKHRvcCkuc2tpcChza2lwKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gaW5pdGlhbGl6ZSBwYXJhbWV0ZXJzIChyb3dHcm91cCBhbmQgb3JkZXIpIGlmIHRoZXJlIGlzIHJvdyBncm91cCBpbnB1dFxuICAgICAgICAgIGxldCByb3dHcm91cE9yZGVyOiBhbnlbXSA9IFtdO1xuICAgICAgICAgIGlmIChzZWxmLnJvd0dyb3VwICYmIHNlbGYucm93R3JvdXAubGVuZ3RoKSB7XG4gICAgICAgICAgICBsZXQgY29sT3JkZXIgPSBbXTtcbiAgICAgIFxuICAgICAgICAgICAgLy8gZmluZCBpbmRleCBvZiB0aGUgcm93R3JvdXAgY29sdW1uXG4gICAgICAgICAgICBsZXQgY29scyA9IHNlbGYucm93R3JvdXAubWFwKHggPT4gdGFibGVDb2x1bW5zLmZpbmRJbmRleCh0YWJsZUNvbHVtbiA9PiB0YWJsZUNvbHVtbi5kYXRhID09PSB4KSkuZmlsdGVyKGluZGV4ID0+IGluZGV4ID49IDApO1xuICAgICAgICAgICAgLy8gZmluZCBuZXcgaW5kZXggb2YgdGhlIHJvd0dyb3VwIGNvbHVtbiBpbiBjYXNlIG9mIHRhYmxlIG9mZmVycyB0aGUgY29sdW1uIHJlb3JkZXJpbmcgY2FwYWJpbGl0eSBcbiAgICAgICAgICAgIC8vIGkuZS4gc2V0dGluZ3MuY29sUmVvcmRlciA9PT0gZmFsc2UgKGNvbHVtbk9yZGVyaW5nID09PSBmYWxzZSlcbiAgICAgICAgICAgIGlmIChzZWxmLmRhdGFUYWJsZSAmJiBzZWxmLmRhdGFUYWJsZS5jb2xSZW9yZGVyICYmIHRoaXMuY29sdW1uT3JkZXJpbmcgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgY29sT3JkZXIgPSBzZWxmLmRhdGFUYWJsZS5jb2xSZW9yZGVyLm9yZGVyKCk7XG4gICAgICAgICAgICAgIGNvbHMgPSBjb2xzLm1hcCggKGNvbDogYW55KSA9PiBjb2xPcmRlci5pbmRleE9mKGNvbCBhcyBuZXZlcikpLmZpbHRlcihpbmRleCA9PiBpbmRleCA+IC0xKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgbGV0IGNvbHVtbiA9IC0xO1xuICAgICAgICAgICAgbGV0IGRpcmVjdGlvbiA9ICdhc2MnO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBzZXQgY29sdW1uIGFuZCBvcmRlciBkaXJlY3Rpb24gIFxuICAgICAgICAgICAgaWYgKG9yZGVyICYmIG9yZGVyLmxlbmd0aCkge1xuICAgICAgICAgICAgICBjb2x1bW4gPSBvcmRlclswXS5jb2x1bW47XG4gICAgICAgICAgICAgIGRpcmVjdGlvbiA9IG9yZGVyWzBdLmRpcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJvd0dyb3VwT3JkZXIgPSBjb2xzLm1hcCgoeCkgPT4geyBcbiAgICAgICAgICAgICAgLy8gY2hlY2sgaWYgY29sdW1uIG9yZGVyIGhhcyBiZWVuIGNoYW5nZWRcbiAgICAgICAgICAgICAgLy8gYW5kIGZpbmQgdGhlIG5ldyBpbmRleCAoY29sdW1uLWluZGV4KSBvZiB0aGUgcm93IGdyb3VwIGNvbHVtblxuICAgICAgICAgICAgICBpZiAoeCAhPSBjb2x1bW4gJiYgc2VsZi5sYXN0Um93R3JvdXBPcmRlciAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaWYgKHggPT09IHNlbGYubGFzdFJvd0dyb3VwT3JkZXIuY29sdW1uKSB7XG4gICAgICAgICAgICAgICAgICBjb2x1bW4gPSBzZWxmLmxhc3RSb3dHcm91cE9yZGVyLmNvbHVtbjtcbiAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9IHNlbGYubGFzdFJvd0dyb3VwT3JkZXIuZGlyZWN0aW9uO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4geyBcbiAgICAgICAgICAgICAgICBjb2x1bW46IHgsIFxuICAgICAgICAgICAgICAgIGRpcjogeCA9PT0gY29sdW1uID8gZGlyZWN0aW9uIDogJ2FzYydcbiAgICAgICAgICAgICAgfSBcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgb3JkZXIgPSBvcmRlciB8fCBbXTtcbiAgICAgICAgICAgIC8vIHNldCB0aGUgcm93IGdyb3VwIGNvbHVtbiBxdWVyeSBwYXJhbSBhbHdheXMgZmlyc3QgYW5kIGJlZm9yZSB0YWJsZSBvcmRlcmluZyBxdWVyeSBwYXJhbXMgXG4gICAgICAgICAgICBvcmRlci51bnNoaWZ0KC4uLnJvd0dyb3VwT3JkZXIpO1xuICAgICAgICAgIFxuICAgICAgICAgICAgLy8gc2F2ZSBvcmRlcmluZyBjb2x1bW4gYW5kIGRpcmVjdGlvbiAocmVnYXJkbGVzcyByb3dHcm91cGluZylcbiAgICAgICAgICAgIGlmIChjb2x1bW4gPiAtMSkge1xuICAgICAgICAgICAgICBzZWxmLmxhc3RSb3dHcm91cE9yZGVyID0geyBjb2x1bW4sIGRpcmVjdGlvbiB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBhcHBseSBvcmRlciBwYXJhbXNcbiAgICAgICAgICBpZiAob3JkZXIgJiYgb3JkZXIubGVuZ3RoKSB7XG4gICAgICAgICAgICAvLyBnZXQgb3JkZXIgcXVlcnkgZXhwcmVzc2lvblxuICAgICAgICAgICAgY29uc3Qgb3JkZXJCeVN0ciA9IG9yZGVyLm1hcCgoZXhwcjogYW55KSA9PiB7XG4gICAgICAgICAgICAgIGxldCBjb2x1bW5JbmRleDogbnVtYmVyO1xuICAgICAgICAgICAgICBpZiAoc2VsZi5jb2x1bW5PcmRlcmluZyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICBjb2x1bW5JbmRleCA9IGV4cHIuY29sdW1uO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHNlbGYuZGF0YVRhYmxlLmNvbFJlb3JkZXIpIHtcbiAgICAgICAgICAgICAgICAvLyBnZXQgdGhlIGN1cnJlbnQgY29sdW1uIG9yZGVyIChmcm9tIGNvbFJlb3JkZXIpXG4gICAgICAgICAgICAgICAgY29uc3QgY29sdW1uT3JkZXI6IG51bWJlcltdID0gc2VsZi5kYXRhVGFibGUuY29sUmVvcmRlci5vcmRlcigpO1xuICAgICAgICAgICAgICAgIC8vIGFuZCBtYXRjaCB0aGUgZGF0YVRhYmxlIGluZGV4IHRvIHRoZSBjb25maWcgY29sdW1ucyBpbmRleFxuICAgICAgICAgICAgICAgIC8vIGV4cHIuY29sdW1uIHNob3VsZCBhbHdheXMgYmUgdmFsaWQgKGUuZy4gaW4gcmFuZ2UpLCBidXQgcGVyZm9ybSBhIG1pbm9yIHZhbGlkYXRpb25cbiAgICAgICAgICAgICAgICBpZiAoZXhwci5jb2x1bW4gPj0gMCAmJiBleHByLmNvbHVtbiA8IGNvbHVtbk9yZGVyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgY29sdW1uSW5kZXggPSBjb2x1bW5PcmRlcltleHByLmNvbHVtbl07XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIC8vIHVzZSB0aGUgZmlyc3QgY29sdW1uIGFzIGEgZmFsbGJhY2sgKHdvbid0IGhhcHBlbiwganVzdCBmb3Igc2FmZXR5KVxuICAgICAgICAgICAgICAgICAgY29sdW1uSW5kZXggPSAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb2x1bW5JbmRleCA9IGV4cHIuY29sdW1uO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiB0YWJsZUNvbHVtbnNbY29sdW1uSW5kZXhdLm5hbWUgKyAnICcgKyBleHByLmRpciB8fCAnYXNjJztcbiAgICAgICAgICAgIH0pLmpvaW4oJywnKTtcbiAgICAgICAgICAgIC8vIHNldCBvcmRlclxuICAgICAgICAgICAgcS5zZXRQYXJhbSgnJG9yZGVyYnknLCBvcmRlckJ5U3RyKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gZW5zdXJlIHNlbGYuc3RhdGVMb2FkQ2FsbGJhY2tcbiAgICAgICAgICBpZiAoc2VsZi5zdGF0ZUxvYWRDYWxsYmFjayA9PSBudWxsKSB7XG4gICAgICAgICAgICBzZWxmLnN0YXRlTG9hZENhbGxiYWNrID0gKChfLCBjYWxsYmFjaykgID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHNlbGYuc3RhdGVMb2FkQ2FsbGJhY2sobnVsbCwgKHN0YXRlKSA9PiB7XG4gICAgICAgICAgICAvLyBjb25maWd1cmUgJHNlbGVjdCBwYXJhbWV0ZXJcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdCA9IHNlbGYuY29uZmlnLmNvbHVtbnMuZmlsdGVyKCAoY29sdW1uKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChjb2x1bW4udmlydHVhbCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoY29sdW1uLm9wdGlvbmFsID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXRlICYmIHN0YXRlLmNvbHVtbnMpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGFibGVDb2x1bW5zLmZpbmRJbmRleCgodGFibGVDb2x1bW4pID0+IHRhYmxlQ29sdW1uLm5hbWUgPT09IGNvbHVtbi5uYW1lKTtcbiAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGF0ZS5jb2x1bW5zW2luZGV4XS52aXNpYmxlO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9KS5tYXAoKGNvbHVtbikgPT4ge1xuICAgICAgICAgICAgICBpZiAoY29sdW1uLnByb3BlcnR5KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbHVtbi5uYW1lICsgJyBhcyAnICsgY29sdW1uLnByb3BlcnR5O1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb2x1bW4ubmFtZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBxLnNlbGVjdC5hcHBseShxLCBzZWxlY3QpO1xuICAgICAgICAgICAgLy8gY29uZmlndXJlICRmaWx0ZXJcbiAgICAgICAgICAgIGlmIChxdWVyeVBhcmFtcy4kZmlsdGVyICYmIHF1ZXJ5UGFyYW1zLiRmaWx0ZXIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIC8vIHNldCByb3V0ZSBmaWx0ZXJcbiAgICAgICAgICAgICAgY29uc3QgcVBhcmFtcyA9IHEuZ2V0UGFyYW1zKCk7XG4gICAgICAgICAgICAgIHEuc2V0UGFyYW0oJyRmaWx0ZXInLCBudWxsKTtcbiAgICAgICAgICAgICAgY29uc3QgZXhwcmVzc2lvbnMgPSBbIHF1ZXJ5UGFyYW1zLiRmaWx0ZXIgXTtcbiAgICAgICAgICAgICAgaWYgKHFQYXJhbXMuJGZpbHRlcikgeyBleHByZXNzaW9ucy5wdXNoKCcoJyArIHFQYXJhbXMuJGZpbHRlciArICcpJyApOyB9XG4gICAgICAgICAgICAgIHEuZmlsdGVyKGV4cHJlc3Npb25zLmpvaW4oJyBhbmQgJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gY2hlY2sgaWYgcXVlcnkgcGFyYW1ldGVycyBjb250YWluIGZpbHRlclxuICAgICAgICAgICAgaWYgKHF1ZXJ5UGFyYW1zLiRleHBhbmQgJiYgcXVlcnlQYXJhbXMuJGV4cGFuZC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgLy8gc2V0IHJvdXRlICRleHBhbmRcbiAgICAgICAgICAgICAgcS5zZXRQYXJhbSgnJGV4cGFuZCcsIHF1ZXJ5UGFyYW1zLiRleHBhbmQpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzZWxmLmNvbmZpZyAmJiBzZWxmLmNvbmZpZy5kZWZhdWx0cyAmJiBzZWxmLmNvbmZpZy5kZWZhdWx0cy5leHBhbmQpIHtcbiAgICAgICAgICAgICAgcS5zZXRQYXJhbSgnJGV4cGFuZCcsIHNlbGYuY29uZmlnLmRlZmF1bHRzLmV4cGFuZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXEuZ2V0UGFyYW1zKClbJyRvcmRlcmJ5J10gJiYgc2VsZi5jb25maWcgJiYgc2VsZi5jb25maWcuZGVmYXVsdHMgJiYgc2VsZi5jb25maWcuZGVmYXVsdHMub3JkZXJCeSkge1xuICAgICAgICAgICAgICBxLnNldFBhcmFtKCckb3JkZXJieScsIHNlbGYuY29uZmlnLmRlZmF1bHRzLm9yZGVyQnkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnICYmIHNlbGYuY29uZmlnLmRlZmF1bHRzICYmIHNlbGYuY29uZmlnLmRlZmF1bHRzLmdyb3VwQnkpIHtcbiAgICAgICAgICAgICAgcS5zZXRQYXJhbSgnJGdyb3VwYnknLCBzZWxmLmNvbmZpZy5kZWZhdWx0cy5ncm91cEJ5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGFwcGVuZCBkZWZhdWx0IGZpbHRlclxuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnICYmIHNlbGYuY29uZmlnLmRlZmF1bHRzICYmIHNlbGYuY29uZmlnLmRlZmF1bHRzLmZpbHRlcikge1xuICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fYWR2YW5jZWRGaWx0ZXJWYWx1ZVByb3ZpZGVyLmFzeW5jQnVpbGRGaWx0ZXIoc2VsZi5jb25maWcuZGVmYXVsdHMuZmlsdGVyKS50aGVuKChkZWZhdWx0RmlsdGVyU3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGRlZmF1bHRGaWx0ZXJTdHJpbmcpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHFQYXJhbXMgPSBxLmdldFBhcmFtcygpO1xuICAgICAgICAgICAgICAgICAgcS5zZXRQYXJhbSgnJGZpbHRlcicsIG51bGwpO1xuICAgICAgICAgICAgICAgICAgY29uc3QgZXhwcmVzc2lvbnMgPSBbIGRlZmF1bHRGaWx0ZXJTdHJpbmcgXTtcbiAgICAgICAgICAgICAgICAgIGlmIChxUGFyYW1zLiRmaWx0ZXIpIHsgZXhwcmVzc2lvbnMucHVzaCgnKCcgKyBxUGFyYW1zLiRmaWx0ZXIgKyAnKScgKTsgfVxuICAgICAgICAgICAgICAgICAgcS5maWx0ZXIoZXhwcmVzc2lvbnMuam9pbignIGFuZCAnKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNlbGYubGFzdFF1ZXJ5UGFyYW1zID0gcS5nZXRQYXJhbXMoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcS5nZXRMaXN0KCkudGhlbigoaXRlbXMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0YVNldCA9IHtcbiAgICAgICAgICAgICAgICAgICAgICByZWNvcmRzVG90YWw6IGl0ZW1zLnRvdGFsLFxuICAgICAgICAgICAgICAgICAgICAgIHJlY29yZHNGaWx0ZXJlZDogaXRlbXMudG90YWwsXG4gICAgICAgICAgICAgICAgICAgICAgZGF0YTogaXRlbXMudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuX2xhc3RRdWVyeVRvdGFsSXRlbXMgPSBpdGVtcy50b3RhbDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW1zLnRvdGFsID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgc2VsZi5yZXNldEVtcHR5VGFibGUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBlbWl0IGxvYWQgZXZlbnRcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2FkLmVtaXQoZGF0YVNldCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIHJldHVybiBkYXRhXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmbkNhbGxiYWNrKGRhdGFTZXQpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9KS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gbG9nIGVycm9yIHRvIGNvbnNvbGVcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdUQUJMRVMnLCBlcnIpO1xuICAgICAgICAgICAgICAgIC8vIHNob3cgZXJyb3JcbiAgICAgICAgICAgICAgICBzZWxmLnRvZ2dsZUVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgc2VsZi5fbGFzdFF1ZXJ5VG90YWxJdGVtcyA9IDA7XG4gICAgICAgICAgICAgICAgLy8gYnkgcmV0dXJuaW5nIGVtcHR5IGRhdGFzZXRcbiAgICAgICAgICAgICAgICBzZWxmLmxvYWQuZW1pdChFTVBUWV9EQVRBU0VUKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZm5DYWxsYmFjayhFTVBUWV9EQVRBU0VUKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZWxmLmxhc3RRdWVyeVBhcmFtcyA9IHEuZ2V0UGFyYW1zKCk7XG4gICAgICAgICAgICBxLmdldExpc3QoKS50aGVuKChpdGVtcykgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBkYXRhU2V0ID0ge1xuICAgICAgICAgICAgICAgIHJlY29yZHNUb3RhbDogaXRlbXMudG90YWwsXG4gICAgICAgICAgICAgICAgcmVjb3Jkc0ZpbHRlcmVkOiBpdGVtcy50b3RhbCxcbiAgICAgICAgICAgICAgICBkYXRhOiBpdGVtcy52YWx1ZSxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgc2VsZi5fbGFzdFF1ZXJ5VG90YWxJdGVtcyA9IGl0ZW1zLnRvdGFsO1xuICAgICAgICAgICAgICBpZiAoaXRlbXMudG90YWwgPT09IDApIHtcbiAgICAgICAgICAgICAgICBzZWxmLnJlc2V0RW1wdHlUYWJsZSgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIC8vIGVtaXQgbG9hZCBldmVudFxuICAgICAgICAgICAgICBzZWxmLmxvYWQuZW1pdChkYXRhU2V0KTtcbiAgICAgICAgICAgICAgLy8gcmV0dXJuIGRhdGFcbiAgICAgICAgICAgICAgcmV0dXJuIGZuQ2FsbGJhY2soZGF0YVNldCk7XG4gICAgICAgICAgICB9KS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgICAgICAgIC8vIGxvZyBlcnJvciB0byBjb25zb2xlXG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1RBQkxFUycsIGVycik7XG4gICAgICAgICAgICAgIC8vIHNob3cgZXJyb3JcbiAgICAgICAgICAgICAgc2VsZi50b2dnbGVFcnJvcihlcnIpO1xuICAgICAgICAgICAgICAvLyBieSByZXR1cm5pbmcgZW1wdHkgZGF0YXNldFxuICAgICAgICAgICAgICBzZWxmLmxvYWQuZW1pdChFTVBUWV9EQVRBU0VUKTtcbiAgICAgICAgICAgICAgcmV0dXJuIGZuQ2FsbGJhY2soRU1QVFlfREFUQVNFVCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgbGFuZ3VhZ2U6IE9iamVjdC5hc3NpZ24oeyB9LCBzZWxmLnRyYW5zbGF0b3IudHJhbnNmb3JtKCdUYWJsZXMuRGF0YVRhYmxlJyksXG4gICAgICAgICAge2VtcHR5VGFibGU6ICcgJyB9KSxcbiAgICAgIH07XG4gICAgICAvLyBjaGVjayBpZiB0aGVyZSBpcyBhIHJvd0dyb3VwIGlucHV0IGFuZCBhc3NpZ24gaXQgdG8gdGFibGVcbiAgICAgIGlmICh0aGlzLnJvd0dyb3VwLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBjb2xzID0gdGhpcy5yb3dHcm91cC5tYXAoeCA9PiB0YWJsZUNvbHVtbnMuZmluZEluZGV4KHRhYmxlQ29sdW1uID0+IHRhYmxlQ29sdW1uLmRhdGEgPT09IHgpKS5maWx0ZXIoaW5kZXggPT4gaW5kZXggPj0gMCk7XG4gICAgICAgIGNvbnN0IGRhdGFTcmMgPSBjb2xzLm1hcCh4ID0+IHRhYmxlQ29sdW1uc1t4XS5kYXRhKTtcbiAgICAgICAgY29uc3Qgc3RhcnRSZW5kZXIgPSBmdW5jdGlvbiAocm93cywgZ3JvdXApIHtcbiAgICAgICAgICBjb25zdCBoZWFkZXJWaWV3UmVmID0gc2VsZi5fdmlld0NvbnRhaW5lclJlZi5jcmVhdGVFbWJlZGRlZFZpZXcoXG4gICAgICAgICAgICAgIHNlbGYuaGVhZGVyVGVtcGxhdGUgYXMgYW55LFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZ3JvdXAsXG4gICAgICAgICAgICAgICAgcm93c1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaGVhZGVyVmlld1JlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICBpZiAoaGVhZGVyVmlld1JlZi5yb290Tm9kZXMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0hlYWRlclRlbXBsYXRlIG11c3QgaGF2ZSBleGFjdGx5IG9uZSByb290IG5vZGUuJylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBoZWFkZXJWaWV3UmVmLnJvb3ROb2Rlc1swXTtcbiAgICAgICAgfVxuICAgICAgICAvLyBlbmRSZW5kZXIgcHJvcGVydHkgXG4gICAgICAgIGNvbnN0IGVuZFJlbmRlciA9IGZ1bmN0aW9uIChyb3dzLCBncm91cCkge1xuICAgICAgICAgIGNvbnN0IGZvb3RlclZpZXdSZWYgPSBzZWxmLl92aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUVtYmVkZGVkVmlldyhcbiAgICAgICAgICAgICAgc2VsZi5mb290ZXJUZW1wbGF0ZSBhcyBhbnksXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBncm91cCxcbiAgICAgICAgICAgICAgICByb3dzXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBmb290ZXJWaWV3UmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIGlmIChmb290ZXJWaWV3UmVmLnJvb3ROb2Rlcy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRm9vdGVyVGVtcGxhdGUgbXVzdCBoYXZlIGV4YWN0bHkgb25lIHJvb3Qgbm9kZS4nKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZvb3RlclZpZXdSZWYucm9vdE5vZGVzWzBdO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24oc2V0dGluZ3MsIHsgcm93R3JvdXA6IHsgZGF0YVNyYywgZW5kUmVuZGVyLCBzdGFydFJlbmRlciB9IH0sIHt9KTsgXG4gICAgICB9XG4gICAgICBjb25zdCBzdGF0ZVNldHRpbmdzID0ge1xuICAgICAgICBzdGF0ZVNhdmU6IHRoaXMuc3RhdGVTYXZlXG4gICAgICB9O1xuICAgICAgaWYgKHRoaXMuc3RhdGVMb2FkQ2FsbGJhY2spIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihzdGF0ZVNldHRpbmdzLCB7XG4gICAgICAgICAgc3RhdGVMb2FkQ2FsbGJhY2s6IHRoaXMuc3RhdGVMb2FkQ2FsbGJhY2tcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5zdGF0ZVNhdmVDYWxsYmFjaykge1xuICAgICAgICBPYmplY3QuYXNzaWduKHN0YXRlU2V0dGluZ3MsIHtcbiAgICAgICAgICBzdGF0ZVNhdmVDYWxsYmFjazogdGhpcy5zdGF0ZVNhdmVDYWxsYmFja1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIE9iamVjdC5hc3NpZ24oc2V0dGluZ3MsIHN0YXRlU2V0dGluZ3MpO1xuXG4gICAgICBpZiAodGhpcy5zY3JvbGxhYmxlKSB7XG4gICAgICAgIC8vIHNldCBjb250aW51b3VzIHNjcm9sbGluZ1xuICAgICAgICBPYmplY3QuYXNzaWduKHNldHRpbmdzLCB7XG4gICAgICAgICAgc2Nyb2xsWTogdGhpcy5zY3JvbGxZLFxuICAgICAgICAgIHNjcm9sbENvbGxhcHNlOiBmYWxzZSxcbiAgICAgICAgICBzY3JvbGxlcjoge1xuICAgICAgICAgICAgbG9hZGluZ0luZGljYXRvcjogZmFsc2UsXG4gICAgICAgICAgICBkaXNwbGF5QnVmZmVyOiBBcnJheS5pc0FycmF5KHRoaXMucm93R3JvdXApICYmIHRoaXMucm93R3JvdXAubGVuZ3RoID4gMCA/IDEwMCA6IDEwLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihzZXR0aW5ncywge1xuICAgICAgICAgIHNjcm9sbFk6IHRoaXMuc2Nyb2xsWSxcbiAgICAgICAgICBwYWdpbmc6IHRoaXMucGFnaW5nLFxuICAgICAgICAgIHBhZ2VMZW5ndGg6IHRoaXMucGFnZUxlbmd0aCxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5zZWxlY3RhYmxlKSB7XG5cbiAgICAgIH1cbiAgICAgIC8vIGhhbmRsZSBpbml0LmR0IGV2ZW50IGFuZCBlbWl0IGxvY2FsIGV2ZW50XG4gICAgICB0aGlzLmRhdGFUYWJsZSA9IHRhYmxlRWxlbWVudC5vbignaW5pdC5kdCcsIChldmVudCkgPT4ge1xuICAgICAgICBjb25zdCBzY3JvbGxlciA9IGpRdWVyeShldmVudC50YXJnZXQpLnBhcmVudCgpO1xuICAgICAgICAvLyBoYW5kbGUgc2Nyb2xsaW5nXG4gICAgICAgIHNjcm9sbGVyLm9uKCdzY3JvbGwnLCAoc2Nyb2xsRXZlbnQpID0+IHtcbiAgICAgICAgICBjb25zdCB0YXJnZXQgPSBqUXVlcnkoc2Nyb2xsRXZlbnQudGFyZ2V0KTtcbiAgICAgICAgICBjb25zdCB0b3AgPSB0YXJnZXQuc2Nyb2xsVG9wKCkgYXMgbnVtYmVyO1xuICAgICAgICAgIGNvbnN0IGxlZnQgPSB0YXJnZXQuc2Nyb2xsTGVmdCgpIGFzIG51bWJlcjtcbiAgICAgICAgICBpZiAodGhpcy5kYXRhVGFibGUpIHtcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsLmVtaXQoe1xuICAgICAgICAgICAgICB0b3AsXG4gICAgICAgICAgICAgIGxlZnRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KS5EYXRhVGFibGUoc2V0dGluZ3MpO1xuICAgICAgdGhpcy5pbml0LmVtaXQoKTtcbiAgICAgIC8vIHNob3cgb3IgaGlkZSBoZWFkZXJcbiAgICAgIGlmICghdGhpcy5zaG93SGVhZGVyICYmIHRoaXMuX2VsZW1lbnQgJiYgdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IGhpZGVTZWxlY3RvciA9ICh0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQgYXMgSFRNTERpdkVsZW1lbnQpXG4gICAgICAgICAgLnF1ZXJ5U2VsZWN0b3IoJy5kYXRhVGFibGU+dGhlYWQnKTtcbiAgICAgICAgaWYgKGhpZGVTZWxlY3Rvcikge1xuICAgICAgICAgIGhpZGVTZWxlY3Rvci5jbGFzc0xpc3QuYWRkKCdkLW5vbmUnKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhZGp1c3RTZWxlY3RvciA9ICAodGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50IGFzIEhUTUxEaXZFbGVtZW50KVxuICAgICAgICAgIC5xdWVyeVNlbGVjdG9yKCcuZGF0YVRhYmxlJyk7XG4gICAgICAgIGlmIChhZGp1c3RTZWxlY3Rvcikge1xuICAgICAgICAgIGFkanVzdFNlbGVjdG9yLmNsYXNzTGlzdC5hZGQoJ210LTInKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gc2hvdyBvciBoaWRlIGZvb3RlclxuICAgICAgaWYgKCF0aGlzLnNob3dGb290ZXIgJiYgdGhpcy5fZWxlbWVudCAmJiB0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgaW5mb1NlbGVjdG9yID0gKHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudCBhcyBIVE1MRGl2RWxlbWVudClcbiAgICAgICAgICAucXVlcnlTZWxlY3RvcignLmRhdGFUYWJsZXNfaW5mbycpO1xuICAgICAgICBpZiAoaW5mb1NlbGVjdG9yKSB7XG4gICAgICAgICAgaW5mb1NlbGVjdG9yLmNsYXNzTGlzdC5hZGQoJ2Qtbm9uZScpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBzaG93IG9yIGhpZGUgcGFnZXJcbiAgICAgIGlmICh0aGlzLnNob3dQYWdpbmcpIHtcbiAgICAgICAgdGhpcy5zaG93UGFnaW5nID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaGVhZGVyVGVtcGxhdGUpIHtcbiAgICAgIGNvbnN0IGhlYWRlclZpZXdSZWYgPSB0aGlzLl92aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUVtYmVkZGVkVmlldyhcbiAgICAgICAgdGhpcy5oZWFkZXJUZW1wbGF0ZSxcbiAgICAgICAge1xuICAgICAgICAgIGdyb3VwOiAnJyxcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICAgIGhlYWRlclZpZXdSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgZm9yICh2YXIgbm9kZSBvZiBoZWFkZXJWaWV3UmVmLnJvb3ROb2Rlcykge1xuICAgICAgICB0aGlzLmhlYWRlcj8gdGhpcy5oZWFkZXIubmF0aXZlRWxlbWVudC5hcHBlbmRDaGlsZChub2RlKSA6IG51bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZm9vdGVyVGVtcGxhdGUpIHtcbiAgICAgIGNvbnN0IGZvb3RlclZpZXdSZWYgPSB0aGlzLl92aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUVtYmVkZGVkVmlldyhcbiAgICAgICAgdGhpcy5mb290ZXJUZW1wbGF0ZSxcbiAgICAgICAge1xuICAgICAgICAgIGdyb3VwOiAnJyxcbiAgICAgICAgICByb3dzOiBbXVxuICAgICAgICB9XG4gICAgICApO1xuICAgICAgZm9vdGVyVmlld1JlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICBmb3IgKHZhciBub2RlIG9mIGZvb3RlclZpZXdSZWYucm9vdE5vZGVzKSB7XG4gICAgICAgIHRoaXMuZm9vdGVyPyB0aGlzLmZvb3Rlci5uYXRpdmVFbGVtZW50LmFwcGVuZENoaWxkKG5vZGUpIDogbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzY3JvbGxUb3AodmFsdWU6IG51bWJlcikge1xuICAgIGlmICh0aGlzLmRhdGFUYWJsZSkge1xuICAgICAgdGhpcy5kYXRhVGFibGUucGFyZW50KCkuc2Nyb2xsVG9wKHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBzY3JvbGxMZWZ0KHZhbHVlOiBudW1iZXIpIHtcbiAgICBpZiAodGhpcy5kYXRhVGFibGUpIHtcbiAgICAgIHRoaXMuZGF0YVRhYmxlLnBhcmVudCgpLnNjcm9sbExlZnQodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBsYXN0UXVlcnkoKTogQ2xpZW50RGF0YVF1ZXJ5YWJsZSB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHRoaXMuY29uZmlnID09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMubGFzdFF1ZXJ5UGFyYW1zID09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcSA9IHRoaXMuX2NvbnRleHQubW9kZWwodGhpcy5jb25maWcubW9kZWwpLmFzUXVlcnlhYmxlKCk7XG4gICAgT2JqZWN0LmtleXModGhpcy5sYXN0UXVlcnlQYXJhbXMpLmZvckVhY2goIChrZXkpID0+IHtcbiAgICAgIHEuc2V0UGFyYW0oa2V5LCB0aGlzLmxhc3RRdWVyeVBhcmFtcyAmJiB0aGlzLmxhc3RRdWVyeVBhcmFtc1trZXldKTtcbiAgICB9KTtcbiAgICAvLyByZXR1cm4gcXVlcnlcbiAgICByZXR1cm4gcTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaGVzIGFuZCB1cGRhdGVzIGEgc2luZ2xlIHJvd1xuICAgKiBAcGFyYW0gZmluZCAtIEFueSBvYmplY3Qgd2hpY2ggaXMgYmVpbmcgY29udmVydGVkIHRvIGEgcXVlcnlcbiAgICovXG4gIHB1YmxpYyBmZXRjaE9uZShmaW5kOiBhbnkpIHtcbiAgICBpZiAoZmluZCA9PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLmRhdGFUYWJsZSA9PSBudWxsKSB7XG4gICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMubGFzdFF1ZXJ5UGFyYW1zID09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gZ2V0IHJvd3NcbiAgICBjb25zdCByb3dzID0gQXJyYXkuZnJvbSh0aGlzLmRhdGFUYWJsZS5yb3dzKCkuZGF0YSgpKTtcbiAgICBpZiAocm93cyAmJiByb3dzLmxlbmd0aCkge1xuICAgICAgLy8gZmluZCByZXN1bHRcbiAgICAgIGNvbnN0IGZpbmRLZXlzID0gT2JqZWN0LmtleXMoZmluZCk7XG4gICAgICBpZiAoZmluZEtleXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIC8vIGRvIG5vdGhpbmdcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgLy8gZmluZCByb3cgaW5kZXggYnkgc2VhcmNoaW5nIGVhY2ggcHJvcGVydHlcbiAgICAgIGNvbnN0IHJvd0luZGV4ID0gcm93cy5maW5kSW5kZXgoKHJvdzogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiBmaW5kS2V5cy5tYXAoIChrZXkpID0+IHtcbiAgICAgICAgICByZXR1cm4gcm93W2tleV0gPT09IGZpbmRba2V5XTtcbiAgICAgICAgfSkuZmlsdGVyKCAocmVzKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHJlcyA9PT0gZmFsc2U7XG4gICAgICAgIH0pLmxlbmd0aCA9PT0gMDtcbiAgICAgIH0pO1xuICAgICAgLy8gaWYgcm93IGhhcyBiZWVuIGZvdW5kXG4gICAgICBpZiAocm93SW5kZXggPj0gMCkge1xuICAgICAgICBjb25zdCBxdWVyeSA9IHRoaXMuX2NvbnRleHQubW9kZWwodGhpcy5jb25maWcubW9kZWwpLmFzUXVlcnlhYmxlKCk7XG4gICAgICAgIC8vIHNlbGVjdCBhdHRyaWJ1dGVzXG4gICAgICAgIHF1ZXJ5LnNldFBhcmFtKCckc2VsZWN0JywgdGhpcy5sYXN0UXVlcnlQYXJhbXMuJHNlbGVjdCk7XG4gICAgICAgIGlmICh0aGlzLmxhc3RRdWVyeVBhcmFtcy4kZXhwYW5kKSB7XG4gICAgICAgICAgLy8gYXBwbHkgZXhwYW5kIGF0dHJpYnV0ZXNcbiAgICAgICAgICBxdWVyeS5zZXRQYXJhbSgnJGV4cGFuZCcsIHRoaXMubGFzdFF1ZXJ5UGFyYW1zLiRleHBhbmQpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGFwcGx5IGZpbHRlciBmb3Igcm93XG4gICAgICAgIGZpbmRLZXlzLmZvckVhY2goIChrZXkpID0+IHtcbiAgICAgICAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmNvbmZpZy5jb2x1bW5zLmZpbmQoIChjb2wpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBjb2wucHJvcGVydHkgPT09IGtleSB8fCBjb2wubmFtZSA9PT0ga2V5O1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmIChjb2x1bW4pIHtcbiAgICAgICAgICAgIC8vIGdldCBwcm9wZXJ0eSBvciBuYW1lXG4gICAgICAgICAgICBjb25zdCBwcm9wZXJ0eSA9IGNvbHVtbi5wcm9wZXJ0eSB8fCBjb2x1bW4ubmFtZTtcbiAgICAgICAgICAgIHF1ZXJ5LmFuZChwcm9wZXJ0eSBhcyBzdHJpbmcpLmVxdWFsKGZpbmRba2V5XSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHF1ZXJ5LmFuZChrZXkpLmVxdWFsKGZpbmRba2V5XSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgLy8gYW5kIGZpbmFsbHkgZ2V0IGl0ZW1cbiAgICAgICAgcmV0dXJuIHF1ZXJ5LmdldEl0ZW0oKS50aGVuKCAoaXRlbSkgPT4ge1xuICAgICAgICAgIC8vIGlmIGl0ZW0gZXhpc3RzXG4gICAgICAgICAgY29uc3Qgcm93ID0gdGhpcy5kYXRhVGFibGUucm93KHJvd0luZGV4KTtcbiAgICAgICAgICBjb25zdCBjaGVja2VkID0galF1ZXJ5KHJvdy5ub2RlKCkpLmZpbmQoJzpjaGVja2JveCcpLnByb3AoJ2NoZWNrZWQnKTtcbiAgICAgICAgICBpZiAoaXRlbSkge1xuICAgICAgICAgICAgLy8gcmVkcmF3IHJvd1xuICAgICAgICAgICAgcm93LmRhdGEoaXRlbSk7XG4gICAgICAgICAgICBqUXVlcnkocm93Lm5vZGUoKSkuZmluZCgnOmNoZWNrYm94Jykub2ZmKCdjbGljaycpLm9uKCdjbGljaycsIHRoaXMub25TZWxlY3Rpb25DaGFuZ2UuYmluZCh0aGlzKSk7XG4gICAgICAgICAgICAvLyBpZiByb3cgaXMgYWxyZWFkeSBzZWxlY3RlZFxuICAgICAgICAgICAgaWYgKGNoZWNrZWQpIHtcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RSb3cocm93LCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlbG9hZFN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5yZWxvYWRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIHNlbGVjdGlvbiBjaGFuZ2VcbiAgICogQHBhcmFtICRldmVudFxuICAgKi9cbiAgcHVibGljIG9uU2VsZWN0aW9uQ2hhbmdlKCRldmVudCkge1xuICAgIGNvbnN0IGlucHV0ID0gICRldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICBjb25zdCBleGVjUmVnZXggPSAvLShcXGQrKSQvZy5leGVjKGlucHV0LmlkKTtcbiAgICAvLyBnZXQgcm93IGZyb20gaWRcbiAgICBjb25zdCByb3dJbmRleCA9IHBhcnNlSW50KChleGVjUmVnZXggJiYgZXhlY1JlZ2V4WzFdKSBhcyBzdHJpbmcsIDEwKTtcbiAgICAvLyBnZXQgcm93XG4gICAgY29uc3Qgcm93ID0gdGhpcy5kYXRhVGFibGUucm93KHJvd0luZGV4KS5kYXRhKCk7XG4gICAgLy8gZ2V0IHJvdyBpZGVudGlmaWVyXG4gICAgaWYgKHJvdykge1xuICAgICAgY29uc3Qga2V5ID0gdGhpcy5jb25maWcuY29sdW1uc1swXS5wcm9wZXJ0eSB8fCAnJztcbiAgICAgIGNvbnN0IGlkID0gcm93W2tleV07XG4gICAgICBsZXQgZmluZEl0ZW1JbmRleCA9IHRoaXMuc2VsZWN0ZWQuZmluZEluZGV4KChpdGVtKSA9PiB7XG4gICAgICAgIHJldHVybiBpdGVtW2tleV0gPT09IGlkO1xuICAgICAgfSk7XG4gICAgICBpZiAoaW5wdXQuY2hlY2tlZCkge1xuICAgICAgICBpZiAoZmluZEl0ZW1JbmRleCA8IDApIHtcbiAgICAgICAgICAvLyBhZGQgcm93IHRvIHNlbGVjdGVkIHJvd3NcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkLnB1c2gocm93KTtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMuZW1pdCh0aGlzLnNlbGVjdGVkKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGZpbmRJdGVtSW5kZXggPj0gMCkge1xuICAgICAgICAgIC8vIHJlbW92ZSBzZWxlY3RlZCBpdGVtXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZC5zcGxpY2UoZmluZEl0ZW1JbmRleCwgMSk7XG4gICAgICAgICAgaWYgKHRoaXMuc21hcnRTZWxlY3QpIHtcbiAgICAgICAgICAgIC8vIGFkZCByb3cgdG8gdW5zZWxlY3RlZCByb3dzXG4gICAgICAgICAgICBmaW5kSXRlbUluZGV4ID0gdGhpcy51bnNlbGVjdGVkLmZpbmRJbmRleCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gaXRlbVtrZXldID09PSBpZDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGZpbmRJdGVtSW5kZXggPCAwKSB7XG4gICAgICAgICAgICAgIHRoaXMudW5zZWxlY3RlZC5wdXNoKHJvdyk7XG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5lbWl0KHRoaXMuc2VsZWN0ZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVzZXRFbXB0eVRhYmxlKCkge1xuICAgIC8vIHRoaXMgb3BlcmF0aW9uIGlzIGltcG9ydGFudFxuICAgIC8vIGR1ZSB0byBuZyBkYXRhIGJpbmRpbmdcbiAgICAvLyBlbXB0eSB0YWJsZSB0ZW1wbGF0ZSBoYXMgbm8gdHJhbnNsYXRlZCB0ZXh0IGR1cmluZyBuZ09uSW5pdCgpXG4gICAgaWYgKHRoaXMuZGF0YVRhYmxlICYmIHRoaXMuZGF0YVRhYmxlLmNvbnRleHRbMF0pIHtcbiAgICAgIHRoaXMuZGF0YVRhYmxlLmNvbnRleHRbMF0ub0xhbmd1YWdlLnNFbXB0eVRhYmxlID1cbiAgICAgIHRoaXMuZGF0YVRhYmxlLmNvbnRleHRbMF0ub0xhbmd1YWdlLnNaZXJvUmVjb3JkcyA9IHRoaXMuZW1wdHlUYWJsZSAmJiB0aGlzLmVtcHR5VGFibGUubmF0aXZlRWxlbWVudC5pbm5lckhUTUw7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB0b2dnbGVFcnJvcihlcnI/OiBhbnkpIHtcbiAgICBpZiAodGhpcy5kYXRhVGFibGUgJiYgdGhpcy5kYXRhVGFibGUuY29udGV4dFswXSkge1xuICAgICAgY29uc3QgZWxlbWVudCA9ICh0aGlzLmVycm9yVGVtcGxhdGUgJiYgdGhpcy5lcnJvclRlbXBsYXRlLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTERpdkVsZW1lbnQpO1xuICAgICAgbGV0IGlubmVyTWVzc2FnZTogYW55O1xuICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgaW5uZXJNZXNzYWdlID0gZWxlbWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc21hbGwnKS5pdGVtKDApO1xuICAgICAgfVxuICAgICAgaWYgKGVycikge1xuICAgICAgICB0aGlzLmxhc3RFcnJvciA9IGVycjtcbiAgICAgICAgaWYgKGlubmVyTWVzc2FnZSkge1xuICAgICAgICAgIGlubmVyTWVzc2FnZS5pbm5lckhUTUwgPSBlcnIuZXJyb3IgJiYgZXJyLmVycm9yLm1lc3NhZ2UgPyBlcnIuZXJyb3IubWVzc2FnZSA6IGVyci5tZXNzYWdlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGF0YVRhYmxlLmNvbnRleHRbMF0ub0xhbmd1YWdlLnNFbXB0eVRhYmxlID1cbiAgICAgICAgdGhpcy5kYXRhVGFibGUuY29udGV4dFswXS5vTGFuZ3VhZ2Uuc1plcm9SZWNvcmRzID0gdGhpcy5lcnJvclRlbXBsYXRlICYmIHRoaXMuZXJyb3JUZW1wbGF0ZS5uYXRpdmVFbGVtZW50LmlubmVySFRNTDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChpbm5lck1lc3NhZ2UpIHtcbiAgICAgICAgICBpbm5lck1lc3NhZ2UuaW5uZXJIVE1MID0gJyc7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kYXRhVGFibGUuY29udGV4dFswXS5vTGFuZ3VhZ2Uuc0VtcHR5VGFibGUgPSB0aGlzLmRhdGFUYWJsZS5jb250ZXh0WzBdLm9MYW5ndWFnZS5zWmVyb1JlY29yZHMgPSAnJztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNsZWFyRW1wdHlUYWJsZSgpIHtcbiAgICBpZiAodGhpcy5kYXRhVGFibGUgJiYgdGhpcy5kYXRhVGFibGUuY29udGV4dFswXSkge1xuICAgICAgdGhpcy5kYXRhVGFibGUuY29udGV4dFswXS5vTGFuZ3VhZ2Uuc0VtcHR5VGFibGUgPSB0aGlzLmRhdGFUYWJsZS5jb250ZXh0WzBdLm9MYW5ndWFnZS5zWmVyb1JlY29yZHMgPSAnJztcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZXhwb3J0KCkge1xuICAgIGNvbnN0IGVsZW1lbnQ6IEhUTUxFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmR0LWJ1dHRvbnMgLmJ1dHRvbnMtZXhjZWwnKSBhcyBIVE1MRWxlbWVudDtcbiAgICBlbGVtZW50LmNsaWNrKCk7XG4gIH1cblxuICBwdWJsaWMgaGFuZGxlQ29sdW1ucyhjb2x1bW5zVG9TaG93KSB7XG4gICAgY29uc3QgdGFibGUgPSB0aGlzLmRhdGFUYWJsZTtcbiAgICB0aGlzLmNvbmZpZy5jb2x1bW5zLnNsaWNlKDEpLmZvckVhY2goKGNvbHVtbiwgaSkgPT4ge1xuICAgICAgaWYgKCFjb2x1bW4uaGlkZGVuKSB7XG4gICAgICAgIGlmIChjb2x1bW5zVG9TaG93LmluY2x1ZGVzKGNvbHVtbi5uYW1lKSkge1xuICAgICAgICAgIC8vIG5vaW5zcGVjdGlvbiBUeXBlU2NyaXB0VmFsaWRhdGVKU1R5cGVzXG4gICAgICAgICAgdGFibGUuY29sdW1uKGNvbHVtbi5uYW1lICsgJzpuYW1lJykudmlzaWJsZSh0cnVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBub2luc3BlY3Rpb24gVHlwZVNjcmlwdFZhbGlkYXRlSlNUeXBlc1xuICAgICAgICAgIHRhYmxlLmNvbHVtbihjb2x1bW4ubmFtZSArICc6bmFtZScpLnZpc2libGUoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q29uZmlnKCkge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZztcbiAgfVxuXG4gIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjaGFuZ2VzLCAnY29uZmlnU3JjJykpIHtcbiAgICAgIGlmIChjaGFuZ2VzLmNvbmZpZ1NyYyAhPSBudWxsKSB7XG4gICAgICAgIC8vIGxvYWQgdGFibGUgY29uZmlndXJhdGlvbiBvbiBjaGFuZ2VcbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiB0cmlwbGUtZXF1YWxzXG4gICAgICAgIGlmIChjaGFuZ2VzLmNvbmZpZ1NyYy5jdXJyZW50VmFsdWUgJiYgKGNoYW5nZXMuY29uZmlnU3JjLmN1cnJlbnRWYWx1ZSAhPSBjaGFuZ2VzLmNvbmZpZ1NyYy5wcmV2aW91c1ZhbHVlKSkge1xuICAgICAgICAgIHRoaXMuX2h0dHAuZ2V0KGNoYW5nZXMuY29uZmlnU3JjLmN1cnJlbnRWYWx1ZSkudG9Qcm9taXNlKCkudGhlbigoY29uZmlnOiBUYWJsZUNvbmZpZ3VyYXRpb24pID0+IHtcbiAgICAgICAgICAgIC8vIHNldCBjb25maWd1cmF0aW9uXG4gICAgICAgICAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcbiAgICAgICAgICAgIHRoaXMuZGVzdHJveSgpO1xuICAgICAgICAgICAgLy8gZmV0Y2ggYW5kIHJlZHJhd1xuICAgICAgICAgICAgdGhpcy5mZXRjaCgpO1xuICAgICAgICAgIH0pLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1RBQkxFUycsICdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBsb2FkaW5nIHRhYmxlIGNvbmZpZ3VyYXRpb24uJyk7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgcmVzZXQobG9hZD86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLnF1ZXJ5ID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuZGVzdHJveSgpO1xuICAgIHRoaXMuYXV0b0xvYWQgPSAhIWxvYWQ7XG4gICAgdGhpcy5uZ09uSW5pdCgpO1xuICB9XG5cbiAgc2VsZWN0Q29sdW1ucygpIHtcbiAgICAvLyBnZXQgY29sdW1uIG9yZGVyIGUuZy4gWzAsIDQsIDEsIDIsIDNdXG4gICAgY29uc3QgY29sdW1uT3JkZXI6IG51bWJlcltdID0gdGhpcy5kYXRhVGFibGUuY29sUmVvcmRlci5vcmRlcigpO1xuICAgIC8vIGdldCBjb2x1bW4gZGVmaW5pdGlvbnNcbiAgICBjb25zdCBjb2x1bW5EZWZzID0gdGhpcy5kYXRhVGFibGUuc2V0dGluZ3MoKS5pbml0KCkuY29sdW1ucztcbiAgICBjb25zdCBjb2x1bW5zID0gY29sdW1uRGVmcy5tYXAoKFxuICAgICAgY29sdW1uRGVmOiB7IGtleTogc3RyaW5nLCB0aXRsZTogc3RyaW5nIHwgdW5kZWZpbmVkLCB2aXNpYmxlOiBib29sZWFuLFxuICAgICAgICBzb3J0YWJsZTogYm9vbGVhbiwgaW5kZXg6IG51bWJlciB9LCBpOiBudW1iZXIpID0+IHtcbiAgICAgIGNvbnN0IGtleSA9IGBjb2x1bW4tJHtpfWA7XG4gICAgICBsZXQgdGl0bGUgPSBjb2x1bW5EZWYudGl0bGU7XG4gICAgICAvLyBnZXQgY29sdW1uIGluZGV4XG4gICAgICBjb25zdCBpbmRleCA9ICBjb2x1bW5PcmRlci5pbmRleE9mKGkpO1xuICAgICAgY29uc3QgdmlzaWJsZSA9IHRoaXMuZGF0YVRhYmxlLmNvbHVtbihpbmRleCkudmlzaWJsZSgpO1xuICAgICAgLy8gc2V0IHRpdGxlIGZvciBzZWxlY3QgY29sdW1uXG4gICAgICBpZiAoaSA9PT0gMCAmJiB0aGlzLnNlbGVjdGFibGUpIHtcbiAgICAgICAgdGl0bGUgPSAnPCcgKyB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ1RhYmxlcy5TZWxlY3RDb2x1bW4nKSArICc+JztcbiAgICAgIH1cbiAgICAgIC8vIGdldCBjb2x1bW4gdGl0bGVcbiAgICAgIGlmICh0aXRsZSAhPSBudWxsICYmIHRpdGxlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aXRsZSA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGlmICh0aXRsZSA9PSBudWxsKSB7XG4gICAgICAgIC8vIHRyeSB0byBmaW5kIGNvbHVtbiBwbGFjZWhvbGRlclxuICAgICAgICBsZXQgcGxhY2Vob2xkZXI6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0YWJsZSkge1xuICAgICAgICAgIGlmIChpID4gMCkge1xuICAgICAgICAgICAgcGxhY2Vob2xkZXIgPSB0aGlzLmNvbmZpZy5jb2x1bW5zW2kgLSAxXS5wbGFjZWhvbGRlcjtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGxhY2Vob2xkZXIgPSB0aGlzLmNvbmZpZy5jb2x1bW5zW2ldLnBsYWNlaG9sZGVyO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwbGFjZWhvbGRlciAhPSBudWxsKSB7XG4gICAgICAgICAgdGl0bGUgPSAnPCcgKyB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQocGxhY2Vob2xkZXIpICsgJz4nO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodGl0bGUgPT0gbnVsbCkge1xuICAgICAgICB0aXRsZSA9ICc8JyArIHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnVGFibGVzLlVua25vd25Db2x1bW4nKSArICc+JztcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGtleSxcbiAgICAgICAgdGl0bGUsXG4gICAgICAgIHZpc2libGUsXG4gICAgICAgIGluZGV4XG4gICAgICB9O1xuICAgIH0pO1xuICAgIHRoaXMuX2NvbHVtblNlbGVjdG9yLnNlbGVjdENvbHVtbnMoY29sdW1ucykudGhlbigoZXZlbnQpID0+IHtcbiAgICAgIGlmIChldmVudC5yZXN1bHQgPT09ICdvaycpIHtcbiAgICAgICAgY29uc3Qgc29ydGVkID0gKGV2ZW50LmNvbHVtbnMgYXMgYW55W10pXG4gICAgICAgICAgLm1hcCgoY29sKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBrZXk6IGNvbC5rZXksXG4gICAgICAgICAgICAgIGluZGV4OiBjb2wuaW5kZXhcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYS5pbmRleCAtIGIuaW5kZXgpO1xuICAgICAgICAvLyBnZXQgY29sdW1uIG9yZGVyIGUuZy4gWzMsIDEsIDIsIDAsIDRdXG4gICAgICAgIGNvbnN0IGluZGV4ZXMgPSBzb3J0ZWRcbiAgICAgICAgLm1hcCgoaXRlbSkgPT4ge1xuICAgICAgICAgIHJldHVybiAoZXZlbnQuY29sdW1ucyBhcyBhbnlbXSkuZmluZEluZGV4KChuZXh0KSA9PiBpdGVtLmtleSA9PT0gbmV4dC5rZXkpO1xuICAgICAgICB9KTtcbiAgICAgICAgLy8gcmVzZXQgY29sdW1uIHZpc2liaWx0eVxuICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgKGV2ZW50LmNvbHVtbnMgYXMgYW55W10pLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSAoZXZlbnQuY29sdW1ucyBhcyBhbnlbXSlbaW5kZXhdO1xuICAgICAgICAgIGNvbnN0IGNvbEluZGV4ID0gY29sdW1uT3JkZXIuaW5kZXhPZihpbmRleCk7XG4gICAgICAgICAgLy8gc2V0IHZpc2liaWx0eSB3aXRoIHJlZHJhdyAoPXRydWUpXG4gICAgICAgICAgdGhpcy5kYXRhVGFibGUuY29sdW1uKGNvbEluZGV4KS52aXNpYmxlKGVsZW1lbnQudmlzaWJsZSwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZmluYWxseSBhcHBseSBjb2x1bW4gb3JkZXJcbiAgICAgICAgdGhpcy5kYXRhVGFibGUuY29sUmVvcmRlci5vcmRlcihpbmRleGVzLCB0cnVlKTtcbiAgICAgICAgLy8gc2ltcGx5IHJlZHJhdyB0aGUgdGFibGVcbiAgICAgICAgdGhpcy5kYXRhVGFibGUuZHJhdygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zIHRvIHBhc3MgYW4gZXJyb3JIYW5kbGVyIGNhbGxiYWNrLCBpZiBkZXNpcmVkXG4gICAqIEByZXR1cm5zIHZvaWRcbiAgICovXG4gIHB1YmxpYyBhc3luYyBleHBvcnRWaWV3KG9wdGlvbnM/OiB7ZXJyb3JIYW5kbGVyPzogKHJlYXNvbj86IGFueSkgPT4gYW55fSk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLl9sb2FkaW5nLnNob3dMb2FkaW5nKCk7XG4gICAgICAvLyB2YWxpZGF0ZSBxdWVyeSBpdGVtcyBhbmQgY29uZmlnXG4gICAgICBpZiAoISh0aGlzLmxhc3RRdWVyeSAmJiB0aGlzLl9sYXN0UXVlcnlUb3RhbEl0ZW1zICYmIHRoaXMuY29uZmlnKSkge1xuICAgICAgICAvLyBkbyBub3RoaW5nXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIC8vIGdldCBleHBvcnQgc2V0dGluZ3NcbiAgICAgIGNvbnN0IGV4cG9ydFNldHRpbmdzID0gdGhpcy5fY29uZmlndXJhdGlvbi5zZXR0aW5ncyBhcyBFeHBvcnRMaW1pdENvbmZpZ3VyYXRpb247XG4gICAgICAvLyBhbmQgZXhwb3J0IGxpbWl0XG4gICAgICBjb25zdCBleHBvcnRMaW1pdCA9XG4gICAgICAgIChleHBvcnRTZXR0aW5ncyAmJiBleHBvcnRTZXR0aW5ncy50YWJsZXMgJiYgZXhwb3J0U2V0dGluZ3MudGFibGVzLmV4cG9ydExpbWl0ICYmIGV4cG9ydFNldHRpbmdzLnRhYmxlcy5leHBvcnRMaW1pdCA+IDApXG4gICAgICAgID8gZXhwb3J0U2V0dGluZ3MudGFibGVzLmV4cG9ydExpbWl0IDogTUFYX0VYUE9SVF9JVEVNUztcbiAgICAgIC8vIGFuZCB2YWxpZGF0ZSBpdFxuICAgICAgaWYgKHRoaXMuX2xhc3RRdWVyeVRvdGFsSXRlbXMgPiBleHBvcnRMaW1pdCkge1xuICAgICAgICAvLyBjYWxsIGVycm9yIGhhbmRsZXJcbiAgICAgICAgLy8gcHJvdmlkZSBhIHJlY29nbml6aWJsZSBlcnJvciB0eXBlXG4gICAgICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMuZXJyb3JIYW5kbGVyKSB7XG4gICAgICAgICAgb3B0aW9ucy5lcnJvckhhbmRsZXIobmV3IEV4cG9ydExpbWl0RXhjZWVkZWRFcnJvcignRXhwb3J0IGxpbWl0IGV4Y2VlZGVkJykpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBvciBzaG93IHdhcm5pbmcgbW9kYWwgYW5kIGV4aXRcbiAgICAgICAgdGhpcy5fbW9kYWxTZXJ2aWNlLnNob3dXYXJuaW5nRGlhbG9nKHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnVGFibGVzLkV4cG9ydExpc3QnKSxcbiAgICAgICAgICB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ1RhYmxlcy5FeHBvcnRMaW1pdEV4Y2VlZGVkJyxcbiAgICAgICAgICAgIHtkYXRhTGVuZ3RoOiB0aGlzLl9sYXN0UXVlcnlUb3RhbEl0ZW1zLCBleHBvcnRMaW1pdH0pLCBESUFMT0dfQlVUVE9OUy5Payk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIC8vIGdldCB0b3RhbCBkaXNwbGF5ZWQgaXRlbXNcbiAgICAgIGNvbnN0IHRvdGFsRGlzcGxheWVkSXRlbXMgPSBBcnJheS5mcm9tKHRoaXMuZGF0YVRhYmxlLmNvbnRleHRbMF0uYWlEaXNwbGF5KS5sZW5ndGg7XG4gICAgICAvLyBpZiB0aGV5IGFscmVhZHkgc2F0aXNmeSB0aGUgbGFzdCBxdWVyeSB0b3RhbFxuICAgICAgaWYgKHRvdGFsRGlzcGxheWVkSXRlbXMgPT09IHRoaXMuX2xhc3RRdWVyeVRvdGFsSXRlbXMpIHtcbiAgICAgICAgLy8gcHJlcGFyZSBleGNlbCBkYXRhIGltbWVkaWF0ZWx5XG4gICAgICAgIGNvbnN0IHtib2R5LCBoZWFkZXJ9ID0gdGhpcy5nZXRFeHBvcnRhYmxlRGF0YSgpO1xuICAgICAgICAvLyBhbmQgZXhwb3J0IHRoZW0gdG8gZXhjZWxcbiAgICAgICAgdGhpcy5fZXhwb3J0U3ByZWFkc2hlZXQuZXhwb3J0KGJvZHksIGAke3RoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCh0aGlzLmNvbmZpZy50aXRsZSB8fCAnVGFibGVzLkV4cG9ydFJlc3VsdHMnKX0ueGxzeGAsIHtcbiAgICAgICAgICAgIGhlYWRlcixcbiAgICAgICAgICAgIHNraXBIZWFkZXI6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gYXQgdGhpcyBwb2ludCwgbW9yZSBkYXRhIG5lZWQgdG8gYmUgZmV0Y2hlZFxuICAgICAgICAvLyBob2xkIHByZXZpb3VzIGRhdGEgc3RhdGVcbiAgICAgICAgY29uc3QgcHJldmlvdXNEYXRhU3RhdGUgPSB0aGlzLmRhdGFUYWJsZS5yb3dzKCkuZGF0YSgpLnRvQXJyYXkoKTtcbiAgICAgICAgLy8gZ2V0IHRhcmdldCBkYXRhIHN0YXRlIGJ5IGV4ZWN1dGluZyB0aGUgbGFzdCBxdWVyeVxuICAgICAgICAvLyBub3RlOiB0YWtpbmcgdGhlIGV4cG9ydExpbWl0IGFtb3VudCBvZiBpdGVtcyB3aWxsIGFsd2F5cyBzYXRpc2Z5IHRoZSByZXN1bHRzLFxuICAgICAgICAvLyBiZWNhdXNlIGl0IGhhcyBiZWVuIHZhbGlkYXRlZFxuICAgICAgICBjb25zdCB0YXJnZXREYXRhU3RhdGUgPSBhd2FpdCB0aGlzLmxhc3RRdWVyeS50YWtlKGV4cG9ydExpbWl0KS5nZXRJdGVtcygpO1xuICAgICAgICAvLyBjaGFuZ2UgdGFibGUgZGF0YSBvbiB0aGUgZmx5LCBidXQgZG8gbm90IHJlZHJhd1xuICAgICAgICB0aGlzLmRhdGFUYWJsZS5jbGVhcigpLnJvd3MuYWRkKHRhcmdldERhdGFTdGF0ZSk7XG4gICAgICAgIC8vIHByZXBhcmUgZXhjZWwgZGF0YVxuICAgICAgICBjb25zdCB7Ym9keSwgaGVhZGVyfSA9IHRoaXMuZ2V0RXhwb3J0YWJsZURhdGEoKTtcbiAgICAgICAgLy8gcmVzZXQgdGFibGUgZGF0YVxuICAgICAgICB0aGlzLmRhdGFUYWJsZS5jbGVhcigpLnJvd3MuYWRkKHByZXZpb3VzRGF0YVN0YXRlKTtcbiAgICAgICAgLy8gYW5kIGV4cG9ydCB0YXJnZXQgZGF0YSB0byBleGNlbFxuICAgICAgICB0aGlzLl9leHBvcnRTcHJlYWRzaGVldC5leHBvcnQoYm9keSwgYCR7dGhpcy5fdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KHRoaXMuY29uZmlnLnRpdGxlIHx8ICdUYWJsZXMuRXhwb3J0UmVzdWx0cycpfS54bHN4YCwge1xuICAgICAgICAgICAgaGVhZGVyLFxuICAgICAgICAgICAgc2tpcEhlYWRlcjogZmFsc2VcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICAvLyBleGl0XG4gICAgICByZXR1cm47XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAvLyBsb2cgZXJyb3JcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgIC8vIGNhbGwgZXJyb3IgaGFuZGxlciwgaWYgZGVmaW5lZFxuICAgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5lcnJvckhhbmRsZXIpIHtcbiAgICAgICAgb3B0aW9ucy5lcnJvckhhbmRsZXIoZXJyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHVzZSBkZWZhdWx0IGVycm9yIHNlcnZpY2VcbiAgICAgICAgdGhpcy5fZXJyb3JTZXJ2aWNlLnNob3dFcnJvcihlcnIsIHtcbiAgICAgICAgICBjb250aW51ZUxpbms6ICcuJ1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5fbG9hZGluZy5oaWRlTG9hZGluZygpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRFeHBvcnRhYmxlRGF0YSgpOiB7Ym9keTogYW55W10sIGhlYWRlcjogYW55W119IHtcbiAgICBpZiAoISh0aGlzLmRhdGFUYWJsZSAmJiB0aGlzLmRhdGFUYWJsZS5idXR0b25zXG4gICAgICAmJiB0eXBlb2YgdGhpcy5kYXRhVGFibGUuYnV0dG9ucy5leHBvcnREYXRhID09PSAnZnVuY3Rpb24nICYmIHRoaXMuY29uZmlnKSkge1xuICAgICAgcmV0dXJuIHtib2R5OiBbXSwgaGVhZGVyOiBbXX07XG4gICAgfVxuICAgIC8vIGZldGNoIGV4cG9ydGFibGUgZXhjZWwgZGF0YVxuICAgIGxldCB7Ym9keSwgaGVhZGVyfSA9IHRoaXMuZGF0YVRhYmxlLmJ1dHRvbnMuZXhwb3J0RGF0YSgpO1xuICAgIGNvbnN0IGNsZWFudXBJbmRleGVzOiBudW1iZXJbXSA9IFtdO1xuICAgIC8vIGNsZWFuIHVwIGhlYWRlcnNcbiAgICBoZWFkZXIgPSBoZWFkZXIuZmlsdGVyKChoZWFkZXJJdGVtOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgIC8vIGV4Y2x1ZGUgZW1wdHkgaGVhZGVyc1xuICAgICAgaWYgKGhlYWRlckl0ZW0udHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBjbGVhbnVwSW5kZXhlcy5wdXNoKGluZGV4KTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgLy8gZXhjbHVkZSBoaWRkZW4gY29sdW1uc1xuICAgICAgLy8gbm90ZTogdXNlIHRoZSBkYXRhdGFibGUgdmlzaWJsZSgpIGZ1bmN0aW9uXG4gICAgICAvLyBpbnN0ZWFkIG9mIHRoZSBoaWRkZW4gY29uZmlnIHByb3BlcnR5LCB0byBzYXRpc2Z5IHRoZSBjb2x1bW4gc2VsZWN0b3JcbiAgICAgIGlmICghdGhpcy5kYXRhVGFibGUuY29sdW1uKGluZGV4KS52aXNpYmxlKCkpIHtcbiAgICAgICAgY2xlYW51cEluZGV4ZXMucHVzaChpbmRleCk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0pO1xuICAgIC8vIGNsZWFuIHVwIGJvZHlcbiAgICBib2R5ID0gYm9keS5tYXAoKHJvdzogYW55IFtdKSA9PiB7XG4gICAgICByZXR1cm4gcm93LmZpbHRlcigoXywgcm93SW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICByZXR1cm4gY2xlYW51cEluZGV4ZXMuaW5kZXhPZihyb3dJbmRleCkgPT09IC0xO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHtib2R5LCBoZWFkZXJ9O1xuICB9XG59XG5cbi8vIGNvbnN0IGVuZFJlbmRlciA9IGZ1bmN0aW9uIChyb3dzLCBncm91cCkgeyB2YXIgY291bnQgPSByb3dzLmRhdGEoKTsgcm93cy5jb3VudCgpOyBcbi8vICAgcmV0dXJuIChgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJyb3dHcm91cFRlbXBsYXRlXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgZGF0YTogJHtncm91cH0gfVwiPjwvbmctY29udGFpbmVyPmApOyB9O1xuICAvLyA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInJvd0dyb3VwVGVtcGxhdGVcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBkYXRhOiAgfVwiPjwvbmctY29udGFpbmVyPlxuICAvLyByZXR1cm4gKCc8c3BhbiBhbGlnbj1cImxlZnRcIlwiPjxzdHJvbmc+JysgZ3JvdXAgKyAnICcgKyBgKCR7dG90YWxIZWFkZXJ9IGAgICsgY291bnQubGVuZ3RoICsgJyk8L3N0cm9uZz48L3NwYW4+Jyk7IH07XG4iLCJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgVmlld0NoaWxkLCBPbkRlc3Ryb3ksIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBbmd1bGFyRGF0YUNvbnRleHQgfSBmcm9tICdAdGhlbW9zdC9hbmd1bGFyJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBtYXgtbGluZS1sZW5ndGhcbmltcG9ydCB7IEFkdmFuY2VkVGFibGVDb21wb25lbnQsIEFkdmFuY2VkVGFibGVEYXRhUmVzdWx0LCBBZHZhbmNlZFRhYmxlQ29uZmlndXJhdGlvbiB9IGZyb20gJy4uL2FkdmFuY2VkLXRhYmxlL2FkdmFuY2VkLXRhYmxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBFcnJvclNlcnZpY2UsIERJQUxPR19CVVRUT05TLCBNb2RhbFNlcnZpY2UsIFVzZXJBY3Rpdml0eVNlcnZpY2UgfSBmcm9tICdAdW5pdmVyc2lzL2NvbW1vbic7XG5pbXBvcnQgeyBSZXNwb25zZUVycm9yIH0gZnJvbSAnQHRoZW1vc3QvY2xpZW50JztcbmltcG9ydCB7IFRhYmxlQ29uZmlndXJhdGlvbiB9IGZyb20gJy4uL2FkdmFuY2VkLXRhYmxlL2FkdmFuY2VkLXRhYmxlLmludGVyZmFjZXMnO1xuaW1wb3J0IHsgVG9hc3RTZXJ2aWNlIH0gZnJvbSAnQHVuaXZlcnNpcy9jb21tb24nO1xuXG5AQ29tcG9uZW50KHtcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmNvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ2FwcC1hZHZhbmNlZC1saXN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2FkdmFuY2VkLWxpc3QuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIEFkdmFuY2VkTGlzdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICBwdWJsaWMgcmVjb3Jkc1RvdGFsOiBudW1iZXIgPSBOYU47XG4gIHB1YmxpYyBjb25maWc/OiBUYWJsZUNvbmZpZ3VyYXRpb247XG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIGRhdGFTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgcmVsb2FkU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuICBASW5wdXQoJ2VudGl0eVNldCcpIGVudGl0eVNldD86IHN0cmluZztcbiAgQElucHV0KCdjYXRlZ29yeScpIGNhdGVnb3J5Pzogc3RyaW5nO1xuICBASW5wdXQoJ2Rlc2NyaXB0aW9uJykgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIEBJbnB1dCgnbG9uZ0Rlc2NyaXB0aW9uJykgbG9uZ0Rlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBASW5wdXQoJ3RhYmxlQ29uZmlndXJhdGlvbicpIHRhYmxlQ29uZmlndXJhdGlvbjogYW55O1xuICBASW5wdXQoJ3NlYXJjaENvbmZpZ3VyYXRpb24nKSBzZWFyY2hDb25maWd1cmF0aW9uOiBhbnk7XG4gIEBWaWV3Q2hpbGQoJ3RhYmxlJykgdGFibGU/OiBBZHZhbmNlZFRhYmxlQ29tcG9uZW50O1xuICBASW5wdXQoJ2FsbG93U2F2ZU9wdGlvbicpIGFsbG93U2F2ZU9wdGlvbiA9IHRydWU7XG4gIEBJbnB1dCgncmVhZG9ubHknKSByZWFkb25seTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2NvbnRleHQ6IEFuZ3VsYXJEYXRhQ29udGV4dCxcbiAgICBwcml2YXRlIF90cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgX2FjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIF9lcnJvclNlcnZpY2U6IEVycm9yU2VydmljZSxcbiAgICBwcml2YXRlIF90b2FzdFNlcnZpY2U6IFRvYXN0U2VydmljZSxcbiAgICBwcml2YXRlIF9tb2RhbFNlcnZpY2U6IE1vZGFsU2VydmljZSxcbiAgICBwcml2YXRlIF91c2VyQWN0aXZpdHlTZXJ2aWNlOiBVc2VyQWN0aXZpdHlTZXJ2aWNlXG4gICAgKSB7IH1cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGF0YVN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5kYXRhU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnJlbG9hZFN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5yZWxvYWRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIG5nT25Jbml0KCkge1xuICAgIHRyeSB7XG4gICAgICBpZiAodGhpcy50YWJsZSA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHRhYmxlID0gdGhpcy50YWJsZTtcbiAgICAgIC8vIGdldCBtZXRhZGF0YVxuICAgICAgY29uc3QgbWV0YWRhdGEgPSBhd2FpdCB0aGlzLl9jb250ZXh0LmdldE1ldGFkYXRhKCk7XG4gICAgICAvLyBnZXQgcm91dGUgZGF0YVxuICAgICAgdGhpcy5kYXRhU3Vic2NyaXB0aW9uID0gdGhpcy5fYWN0aXZhdGVkUm91dGUuZGF0YS5zdWJzY3JpYmUoIHJvdXRlRGF0YSA9PiB7XG4gICAgICAgIC8vIGdldCBlbnRpdHlUeXBlXG4gICAgICAgIGNvbnN0IHJlID0gbmV3IFJlZ0V4cChgXiR7cm91dGVEYXRhLm1vZGVsfSRgLCAnaWcnKTtcbiAgICAgICAgY29uc3QgZW50aXR5U2V0ID0gbWV0YWRhdGEuRW50aXR5Q29udGFpbmVyLkVudGl0eVNldC5maW5kKCB4ID0+IHtcbiAgICAgICAgICByZXR1cm4gcmUudGVzdCh4Lk5hbWUpO1xuICAgICAgICB9KTtcbiAgICAgICAgLy8gaWYgZW50aXR5IHR5cGUgaXMgbnVsbFxuICAgICAgICBpZiAoZW50aXR5U2V0ID09IG51bGwpIHtcbiAgICAgICAgICAvLyBuYXZpZ2F0ZSB0byBlcnJvclxuICAgICAgICAgIHJldHVybiB0aGlzLl9lcnJvclNlcnZpY2UubmF2aWdhdGVUb0Vycm9yKG5ldyBSZXNwb25zZUVycm9yKCdFbnRpdHlTZXQgTm90IEZvdW5kJywgNDA0KSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZ2V0IGVudGl0eSB0eXBlXG4gICAgICAgIGNvbnN0IGVudGl0eVR5cGUgPSBtZXRhZGF0YS5FbnRpdHlUeXBlLmZpbmQoIHggPT4ge1xuICAgICAgICAgIHJldHVybiB4Lk5hbWUgPT09IGVudGl0eVNldC5FbnRpdHlUeXBlO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGVudGl0eVR5cGUgPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLl9lcnJvclNlcnZpY2UubmF2aWdhdGVUb0Vycm9yKG5ldyBSZXNwb25zZUVycm9yKCdFbnRpdHlUeXBlIE5vdCBGb3VuZCcsIDQwNCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyb3V0ZURhdGEuc2VhcmNoQ29uZmlndXJhdGlvbikge1xuICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocm91dGVEYXRhLnNlYXJjaENvbmZpZ3VyYXRpb24sICdhbGxvd1NhdmUnKSkge1xuICAgICAgICAgICAgdGhpcy5hbGxvd1NhdmVPcHRpb24gPSByb3V0ZURhdGEuc2VhcmNoQ29uZmlndXJhdGlvbi5hbGxvd1NhdmU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuc2VhcmNoQ29uZmlndXJhdGlvbiA9IHJvdXRlRGF0YS5zZWFyY2hDb25maWd1cmF0aW9uO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyb3V0ZURhdGEudGFibGVDb25maWd1cmF0aW9uKSB7XG4gICAgICAgICAgdGhpcy50YWJsZUNvbmZpZ3VyYXRpb24gPSByb3V0ZURhdGEudGFibGVDb25maWd1cmF0aW9uO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyb3V0ZURhdGEuZGVzY3JpcHRpb24pIHtcbiAgICAgICAgICB0aGlzLmRlc2NyaXB0aW9uID0gdGhpcy5fdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KHJvdXRlRGF0YS5kZXNjcmlwdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJvdXRlRGF0YS5sb25nRGVzY3JpcHRpb24pIHtcbiAgICAgICAgICB0aGlzLmxvbmdEZXNjcmlwdGlvbiA9IHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChyb3V0ZURhdGEubG9uZ0Rlc2NyaXB0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocm91dGVEYXRhLmNhdGVnb3J5KSB7XG4gICAgICAgICAgdGhpcy5jYXRlZ29yeSA9IHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChyb3V0ZURhdGEuY2F0ZWdvcnkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocm91dGVEYXRhLCAncmVhZG9ubHknKSkge1xuICAgICAgICAgIHRoaXMucmVhZG9ubHkgPSByb3V0ZURhdGEucmVhZG9ubHk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY2xvbmUgZGVmYXVsdCBjb25maWd1cmF0aW9uXG4gICAgICAgIGNvbnN0IGRlZmF1bHRDb25maWd1cmF0aW9uID0gQWR2YW5jZWRUYWJsZUNvbmZpZ3VyYXRpb24uY2FzdCh0aGlzLnRhYmxlQ29uZmlndXJhdGlvbiwgdHJ1ZSk7XG4gICAgICAgIC8vIGNvcnJlY3QgZWRpdCBidXR0b24gbGlua1xuICAgICAgICBjb25zdCBjb2x1bW4gPSBkZWZhdWx0Q29uZmlndXJhdGlvbi5jb2x1bW5zLmZpbmQoIGNvbCA9PiB7XG4gICAgICAgICAgcmV0dXJuIGNvbC5mb3JtYXR0ZXIgPT09ICdCdXR0b25Gb3JtYXR0ZXInICYmIGNvbC5mb3JtYXRTdHJpbmcgPT09ICcobW9kYWw6ZWRpdCknO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGNvbHVtbikge1xuICAgICAgICAgIGNvbnN0IHVybDogQXJyYXk8c3RyaW5nPiA9IFtdO1xuICAgICAgICAgIHRoaXMuX2FjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnBhdGhGcm9tUm9vdC5mb3JFYWNoKCByb3V0ZSA9PiB7XG4gICAgICAgICAgICB1cmwucHVzaC5hcHBseSh1cmwsIHJvdXRlLnVybCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgY29sdW1uLmZvcm1hdFN0cmluZyA9IGAjLyR7dXJsLmpvaW4oJy8nKX0vKG1vZGFsOlxcJFxce2lkXFx9L2VkaXQpYDtcbiAgICAgICAgfVxuICAgICAgICAvLyBjcmVhdGUgbGlzdCBjb25maWd1cmF0aW9uIGJ5IGFzc2lnbmluZyBsaXN0IGVudGl0eSBzZXRcbiAgICAgICAgY29uc3Qgc2V0Q29uZmlnID0gT2JqZWN0LmFzc2lnbih7XG4gICAgICAgICAgbW9kZWw6IGVudGl0eVNldC5OYW1lXG4gICAgICAgIH0sIGRlZmF1bHRDb25maWd1cmF0aW9uKTtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzZXRDb25maWcsICdzZWxlY3RhYmxlJykpIHtcbiAgICAgICAgICBzZXRDb25maWcuc2VsZWN0YWJsZSA9ICF0aGlzLnJlYWRvbmx5O1xuICAgICAgICB9XG4gICAgICAgIHRhYmxlLmNvbmZpZyA9IHNldENvbmZpZztcbiAgICAgICAgLy8gZmV0Y2ggZGF0YVxuICAgICAgICB0YWJsZS5mZXRjaCh0cnVlKTtcbiAgICAgICAgLy8gZG8gcmVsb2FkIGJ5IHVzaW5nIGhpZGRlbiBmcmFnbWVudCBlLmcuIC9jbGFzc2VzI3JlbG9hZFxuICAgICAgICB0aGlzLnJlbG9hZFN1YnNjcmlwdGlvbiA9IHRoaXMuX2FjdGl2YXRlZFJvdXRlLmZyYWdtZW50LnN1YnNjcmliZShmcmFnbWVudCA9PiB7XG4gICAgICAgICAgaWYgKGZyYWdtZW50ICYmIGZyYWdtZW50ID09PSAncmVsb2FkJykge1xuICAgICAgICAgICAgdGhpcy5fdG9hc3RTZXJ2aWNlLnNob3coXG4gICAgICAgICAgICAgIHRoaXMuZGVzY3JpcHRpb24gYXMgc3RyaW5nLFxuICAgICAgICAgICAgICB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ1NldHRpbmdzLk9wZXJhdGlvbkNvbXBsZXRlZCcpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGFibGUuZmV0Y2godHJ1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgLy8gZmluYWxseSBhZGQgdXNlciBhY3Rpdml0eVxuICAgICAgICB0aGlzLl91c2VyQWN0aXZpdHlTZXJ2aWNlLnNldEl0ZW0oe1xuICAgICAgICAgIGNhdGVnb3J5OiB0aGlzLmNhdGVnb3J5IGFzIHN0cmluZyxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogdGhpcy5kZXNjcmlwdGlvbiBhcyBzdHJpbmcsXG4gICAgICAgICAgdXJsOiB3aW5kb3cubG9jYXRpb24uaGFzaC5zdWJzdHJpbmcoMSksXG4gICAgICAgICAgZGF0ZUNyZWF0ZWQ6IG5ldyBEYXRlXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICByZXR1cm4gdGhpcy5fZXJyb3JTZXJ2aWNlLnNob3dFcnJvcihlcnIpO1xuICAgIH1cbiAgfVxuXG5cbiAgLyoqXG4gICAqIERhdGEgbG9hZCBldmVudCBoYW5kbGVyIG9mIGFkdmFuY2VkIHRhYmxlIGNvbXBvbmVudFxuICAgKiBAcGFyYW0gZGF0YVxuICAgKi9cbiAgb25EYXRhTG9hZChkYXRhOiBBZHZhbmNlZFRhYmxlRGF0YVJlc3VsdCkge1xuICAgIHRoaXMucmVjb3Jkc1RvdGFsID0gZGF0YS5yZWNvcmRzVG90YWw7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIHNlbGVjdGVkIGl0ZW1zXG4gICAqL1xuICByZW1vdmUoKSB7XG4gICAgY29uc3QgdGFibGUgPSB0aGlzLnRhYmxlO1xuICAgIGlmICh0YWJsZSAmJiB0YWJsZS5zZWxlY3RlZCAmJiB0YWJsZS5zZWxlY3RlZC5sZW5ndGgpIHtcbiAgICAgIC8vIGdldCBpdGVtcyB0byByZW1vdmVcbiAgICAgIGNvbnN0IGl0ZW1zID0gdGFibGUuc2VsZWN0ZWQ7XG4gICAgICByZXR1cm4gdGhpcy5fbW9kYWxTZXJ2aWNlLnNob3dXYXJuaW5nRGlhbG9nKFxuICAgICAgICB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ1RhYmxlcy5SZW1vdmVJdGVtc1RpdGxlJyksXG4gICAgICAgIHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudCgnVGFibGVzLlJlbW92ZUl0ZW1zTWVzc2FnZScpLFxuICAgICAgICBESUFMT0dfQlVUVE9OUy5Pa0NhbmNlbCkudGhlbihyZXN1bHQgPT4ge1xuICAgICAgICAgIGlmIChyZXN1bHQgPT09ICdvaycpIHtcbiAgICAgICAgICAgIHRoaXMuX2NvbnRleHQubW9kZWwodGFibGUuY29uZmlnLm1vZGVsKS5yZW1vdmUoaXRlbXMpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLl90b2FzdFNlcnZpY2Uuc2hvdyhcbiAgICAgICAgICAgICAgICB0aGlzLmRlc2NyaXB0aW9uICsgJzonICsgdGhpcy5fdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KCdUYWJsZXMuUmVtb3ZlSXRlbU1lc3NhZ2UudGl0bGUnKSxcbiAgICAgICAgICAgICAgICB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoKGl0ZW1zLmxlbmd0aCA9PT0gMSA/XG4gICAgICAgICAgICAgICAgICAnVGFibGVzLlJlbW92ZUl0ZW1NZXNzYWdlLm9uZScgOiAnVGFibGVzLlJlbW92ZUl0ZW1NZXNzYWdlLm1hbnknKVxuICAgICAgICAgICAgICAgICAgLCB7IHZhbHVlOiBpdGVtcy5sZW5ndGggfSlcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgdGFibGUuZmV0Y2godHJ1ZSk7XG4gICAgICAgICAgICB9KS5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgICAgICB0aGlzLl9lcnJvclNlcnZpY2Uuc2hvd0Vycm9yKGVyciwge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlTGluazogJy4nXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7Q29tcG9uZW50LCBPbkluaXQsIE9uRGVzdHJveSwgSW5wdXQsIEV2ZW50RW1pdHRlcixcbiAgICBWaWV3Q2hpbGQsIEVsZW1lbnRSZWYsIFZpZXdFbmNhcHN1bGF0aW9uLCBBZnRlclZpZXdJbml0LCBPdXRwdXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7QWN0aXZhdGVkUm91dGUsIFJvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCAncnhqcy9hZGQvb2JzZXJ2YWJsZS9jb21iaW5lTGF0ZXN0JztcbmltcG9ydCB7TW9kYWxTZXJ2aWNlfSBmcm9tICdAdW5pdmVyc2lzL2NvbW1vbic7XG5pbXBvcnQge1JvdXRlck1vZGFsT2tDYW5jZWx9IGZyb20gJ0B1bml2ZXJzaXMvY29tbW9uL3JvdXRpbmcnO1xuaW1wb3J0IHtPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtBZHZhbmNlZEZvcm1Db21wb25lbnR9IGZyb20gJ0B1bml2ZXJzaXMvZm9ybXMnO1xuaW1wb3J0IHsgUHJvZ3Jlc3NiYXJDb21wb25lbnQgfSBmcm9tICduZ3gtYm9vdHN0cmFwL3Byb2dyZXNzYmFyJztcblxuQENvbXBvbmVudCh7XG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmNvbXBvbmVudC1zZWxlY3RvclxuICAgIHNlbGVjdG9yOiAnYXBwLWFkdmFuY2VkLXJvdy1hY3Rpb24nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9hZHZhbmNlZC1yb3ctYWN0aW9uLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZXM6IFtcbiAgICAgICAgYFxuICAgICAgICAuZmEtMV81eCB7XG4gICAgICAgICAgICBmb250LXNpemU6IDEuNXJlbTtcbiAgICAgICAgfVxuICAgICAgICAuZm9ybS1jb250cm9sOmRpc2FibGVkLCAuZm9ybS1jb250cm9sW3JlYWRvbmx5XSB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBpbmhlcml0O1xuICAgICAgICB9XG4gICAgICAgIC5mb3JtLWNoZWNrLmNoZWNrYm94IHtcbiAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmVcbiAgICAgICAgfVxuICAgICAgICBgXG4gICAgXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIEFkdmFuY2VkUm93QWN0aW9uQ29tcG9uZW50IGV4dGVuZHMgUm91dGVyTW9kYWxPa0NhbmNlbCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcblxuICBpbnZhbGlkU3Vic2NyaXB0aW9uOiBhbnk7XG5cblxuICAgIEBJbnB1dCgpIGl0ZW1zOiBhbnk7XG4gICAgQElucHV0KCkgbW9kYWxJY29uID0gJ2ZhcyBmYS1wcm9qZWN0LWRpYWdyYW0nO1xuICAgIEBJbnB1dCgpIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGZvcm1UZW1wbGF0ZT86IHN0cmluZztcbiAgICBASW5wdXQoKSBwcm9ncmVzc1R5cGUgPSAnaW5kaWdvJztcbiAgICBAT3V0cHV0KCkgZGF0YTogYW55O1xuICAgIEBJbnB1dCgpIGFkZGl0aW9uYWxNZXNzYWdlPzogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGVycm9yTWVzc2FnZSA9ICdUYWJsZXMuQWN0aW9ucy5Db21wbGV0ZWRXaXRoRXJyb3JzJztcbiAgICBwdWJsaWMgbGFzdEVycm9yOiBhbnk7XG4gICAgcHVibGljIGxvYWRpbmcgPSBmYWxzZTtcbiAgICBAVmlld0NoaWxkKCdwcm9ncmVzcycpIHByb2dyZXNzQ29tcG9uZW50PzogUHJvZ3Jlc3NiYXJDb21wb25lbnQ7XG4gICAgQFZpZXdDaGlsZCgncHJvZ3Jlc3NDb250YWluZXInKSBwcm9ncmVzc0NvbnRhaW5lcj86IEVsZW1lbnRSZWY7XG4gICAgQFZpZXdDaGlsZCgnZm9ybUNvbXBvbmVudCcpIGZvcm1Db21wb25lbnQ/OiBBZHZhbmNlZEZvcm1Db21wb25lbnQ7XG4gICAgQElucHV0KCkgcmVmcmVzaDogYW55ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQElucHV0KCkgZXhlY3V0ZT86IE9ic2VydmFibGU8YW55PjtcbiAgICBwcml2YXRlIHJlZnJlc2hTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gICAgcHJpdmF0ZSBleGVjdXRlU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuXG4gICAgY29uc3RydWN0b3Iocm91dGVyOiBSb3V0ZXIsXG4gICAgICAgICAgICAgICAgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgICAgICAgICAgICAgIHByaXZhdGUgX3RyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBfbW9kYWxTZXJ2aWNlOiBNb2RhbFNlcnZpY2UpIHtcbiAgICAgICAgc3VwZXIocm91dGVyLCBhY3RpdmF0ZWRSb3V0ZSk7XG4gICAgICAgIC8vIHNldCBtb2RhbCBzaXplXG4gICAgICAgIHRoaXMubW9kYWxDbGFzcyA9ICdtb2RhbC1sZyc7XG4gICAgICAgIC8vIHNldCBtb2RhbCB0aXRsZVxuICAgICAgICB0aGlzLm1vZGFsVGl0bGUgPSAnVGFibGVzLkFjdGlvbnMuTGFiZWwnO1xuICAgICAgICAvLyBkaXNhYmxlIG9rIGJ1dHRvblxuICAgICAgICB0aGlzLm9rQnV0dG9uRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgLy8gc2V0IGJ1dHRvbiB0ZXh0XG4gICAgICAgIHRoaXMub2tCdXR0b25UZXh0ID0gJ1RhYmxlcy5BY3Rpb25zLlN0YXJ0JztcbiAgICB9XG5cbiAgICBnZXQgZm9ybSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmZvcm1Db21wb25lbnQ7XG4gICAgfVxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLnJlZnJlc2hTdWJzY3JpcHRpb24gPSB0aGlzLnJlZnJlc2guc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJvZ3Jlc3NDb21wb25lbnQgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5wcm9ncmVzcykge1xuICAgICAgICAgICAgICAgIGxldCBwcm9ncmVzcyA9IDA7XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlLnByb2dyZXNzIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICBwcm9ncmVzcyA9IDA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS5wcm9ncmVzcyA+IDEwMCkge1xuICAgICAgICAgICAgICAgICAgICBwcm9ncmVzcyA9IDEwMDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBwcm9ncmVzcyA9IHZhbHVlLnByb2dyZXNzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnByb2dyZXNzQ29tcG9uZW50LnZhbHVlID0gcHJvZ3Jlc3M7XG4gICAgICAgICAgICAgICAgdGhpcy5zaG93UHJvZ3Jlc3MoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICBpZiAodGhpcy5mb3JtQ29tcG9uZW50ICYmIHRoaXMuZm9ybUNvbXBvbmVudC5mb3JtKSB7XG4gICAgICAgIHRoaXMub2tCdXR0b25EaXNhYmxlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuaW52YWxpZFN1YnNjcmlwdGlvbiA9IHRoaXMuZm9ybUNvbXBvbmVudC5mb3JtLmNoYW5nZS5zdWJzY3JpYmUoKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChldmVudCwgJ2lzVmFsaWQnKSAmJiAoZXZlbnQuY2hhbmdlZCAhPSBudWxsKSkge1xuICAgICAgICAgICAgICB0aGlzLm9rQnV0dG9uRGlzYWJsZWQgPSAhZXZlbnQuaXNWYWxpZDtcbiAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgaWYgKHRoaXMucmVmcmVzaFN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZXhlY3V0ZVN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5leGVjdXRlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaW52YWxpZFN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5pbnZhbGlkU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjYW5jZWwoKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgaWYgKHRoaXMubG9hZGluZykge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGNsb3NlXG4gICAgICAgIGlmICh0aGlzLl9tb2RhbFNlcnZpY2UubW9kYWxSZWYpIHtcbiAgICAgICAgICAgIHJldHVybiAgdGhpcy5fbW9kYWxTZXJ2aWNlLm1vZGFsUmVmLmhpZGUoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfVxuXG4gICAgYXN5bmMgb2soKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAodGhpcy5leGVjdXRlID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5sYXN0RXJyb3IgPSBudWxsO1xuICAgICAgICAgICAgaWYgKHRoaXMuZm9ybUNvbXBvbmVudCAmJiB0aGlzLmZvcm1Db21wb25lbnQuZm9ybSAmJlxuICAgICAgICAgICAgICAgIHRoaXMuZm9ybUNvbXBvbmVudC5mb3JtLmZvcm1pbyAmJiB0aGlzLmZvcm1Db21wb25lbnQuZm9ybS5mb3JtaW8uZGF0YSkge1xuICAgICAgICAgICAgICAgIC8vIHNldCBkYXRhXG4gICAgICAgICAgICAgICAgdGhpcy5kYXRhID0gdGhpcy5mb3JtQ29tcG9uZW50LmZvcm0uZm9ybWlvLmRhdGE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBkbyBhY3Rpb25cbiAgICAgICAgICAgIHRoaXMuZXhlY3V0ZS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMucmVmcmVzaC5lbWl0KHtcbiAgICAgICAgICAgICAgICAgICAgcHJvZ3Jlc3M6IDEwMFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0LmVycm9ycyAmJiByZXN1bHQuZXJyb3JzID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBzaG93IG1lc3NhZ2UgZm9yIHBhcnRpYWwgc3VjY2Vzc1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmVycm9ycyA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5sYXN0RXJyb3IgPSBuZXcgRXJyb3IodGhpcy5fdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAke3RoaXMuZXJyb3JNZXNzYWdlfS5EZXNjcmlwdGlvbi5PbmVgKSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxhc3RFcnJvciA9IG5ldyBFcnJvcih0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGAke3RoaXMuZXJyb3JNZXNzYWdlfS5EZXNjcmlwdGlvbi5NYW55YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZnJlc2guZW1pdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmVzczogMVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oaWRlUHJvZ3Jlc3MoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fbW9kYWxTZXJ2aWNlLm1vZGFsUmVmKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX21vZGFsU2VydmljZS5tb2RhbFJlZi5oaWRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgKGVycikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMubGFzdEVycm9yID0gZXJyO1xuICAgICAgICAgICAgICAgIHRoaXMucmVmcmVzaC5lbWl0KHtcbiAgICAgICAgICAgICAgICAgICAgcHJvZ3Jlc3M6IDBcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5sYXN0RXJyb3IgPSBlcnI7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzaG93UHJvZ3Jlc3MoKSB7XG4gICAgICAgIGlmICh0aGlzLnByb2dyZXNzQ29udGFpbmVyKSB7XG4gICAgICAgICAgICB0aGlzLnByb2dyZXNzQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LnJlcGxhY2UoJ2ludmlzaWJsZScsICd2aXNpYmxlJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBoaWRlUHJvZ3Jlc3MoKSB7XG4gICAgICAgIGlmICh0aGlzLnByb2dyZXNzQ29udGFpbmVyKSB7XG4gICAgICAgICAgICB0aGlzLnByb2dyZXNzQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LnJlcGxhY2UoJ3Zpc2libGUnLCAnaW52aXNpYmxlJyk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCJpbXBvcnQge0NvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbkBDb21wb25lbnQoe1xuICAgIHRlbXBsYXRlOiAnJ1xuICB9KVxuZXhwb3J0IGNsYXNzIEFkdmFuY2VkVGFibGVTZWFyY2hCYXNlQ29tcG9uZW50IHtcbiAgICBwcml2YXRlIF9maWx0ZXI6IGFueTtcbiAgICBAT3V0cHV0KCkgZmlsdGVyQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgQElucHV0KClcbiAgICBnZXQgIGZpbHRlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbHRlcjtcbiAgICB9XG5cbiAgICBzZXQgZmlsdGVyKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuX2ZpbHRlciA9IHZhbHVlO1xuICAgIH1cblxuICAgIG9uS2V5RW50ZXIoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgaWYgKGV2ZW50LmNvZGUgPT09ICdFbnRlcicpIHtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyQ2hhbmdlLmVtaXQodGhpcy5fZmlsdGVyKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptYXgtbGluZS1sZW5ndGhcbmltcG9ydCB7QWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0LCBWaWV3Q2hpbGQsIFZpZXdFbmNhcHN1bGF0aW9uLCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXN9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtGb3JtaW9Db21wb25lbnQsIEZvcm1pb0Zvcm19IGZyb20gJ2FuZ3VsYXItZm9ybWlvJztcbmltcG9ydCB7QW5ndWxhckRhdGFDb250ZXh0fSBmcm9tICdAdGhlbW9zdC9hbmd1bGFyJztcbmltcG9ydCB7QWN0aXZhdGVkUm91dGV9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge1NlcnZpY2VVcmxQcmVQcm9jZXNzb3IsIFRyYW5zbGF0ZVByZVByb2Nlc3Nvcn0gZnJvbSAnQHVuaXZlcnNpcy9mb3Jtcyc7XG5pbXBvcnQge0FkdmFuY2VkVGFibGVTZWFyY2hCYXNlQ29tcG9uZW50fSBmcm9tICcuLi9hZHZhbmNlZC10YWJsZS9hZHZhbmNlZC10YWJsZS1zZWFyY2gtYmFzZSc7XG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcblxuQENvbXBvbmVudCh7XG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpjb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdhcHAtYWR2YW5jZWQtc2VhcmNoLWZvcm0nLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgY2xhc3M9XCJwLTRcIj5cbiAgICAgIDxmb3JtaW8gI2Zvcm1pb0NvbXBvbmVudCBjbGFzcz1cImZvcm1pby1zZWFyY2hcIlxuICAgICAgICAgICAgICAoa2V5ZG93bik9XCJvbktleUVudGVyKCRldmVudClcIiAoY2hhbmdlKT1cIm9uQ2hhbmdlKCRldmVudClcIiAoZm9ybUxvYWQpPVwib25Gb3JtTG9hZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgW3JlZnJlc2hdPVwicmVmcmVzaEZvcm1cIiBbc3VibWlzc2lvbl09XCJzdWJtaXNzaW9uXCIgW2Zvcm1dPVwiZm9ybVwiPjwvZm9ybWlvPlxuICAgIDwvZGl2PlxuICBgLFxuICBzdHlsZVVybHM6IFsnLi9hZHZhbmNlZC1zZWFyY2gtZm9ybS5jb21wb25lbnQuc2NzcyddLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIEFkdmFuY2VkU2VhcmNoRm9ybUNvbXBvbmVudCBleHRlbmRzIEFkdmFuY2VkVGFibGVTZWFyY2hCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcyB7XG5cblxuICBAVmlld0NoaWxkKCdmb3JtaW9Db21wb25lbnQnKSBmb3JtQ29tcG9uZW50PzogRm9ybWlvQ29tcG9uZW50O1xuICBASW5wdXQoKSBmb3JtOiBhbnkgPSB7fTtcbiAgQElucHV0KCkgZm9ybVNyYz86IHN0cmluZztcbiAgQE91dHB1dCgpIHJlZnJlc2hGb3JtID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBsb2FkaW5nID0gbmV3IEV2ZW50RW1pdHRlcjx7IHRhcmdldDogQWR2YW5jZWRTZWFyY2hGb3JtQ29tcG9uZW50fT4oKTtcbiAgc3VibWlzc2lvbjogYW55ID0geyBkYXRhOiB7fSB9O1xuICBwcml2YXRlIGZpbHRlclN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcbiAgcHVibGljIGNvbXBvbmVudExvYWRpbmcgPSB0cnVlO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2NvbnRleHQ6IEFuZ3VsYXJEYXRhQ29udGV4dCxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgICAgICAgICAgICBwcml2YXRlIF9odHRwOiBIdHRwQ2xpZW50XG4gICkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjaGFuZ2VzLCAnZm9ybScpKSB7XG4gICAgICBpZiAoY2hhbmdlcy5mb3JtICE9IG51bGwpIHtcbiAgICAgICAgaWYgKGNoYW5nZXMuZm9ybS5jdXJyZW50VmFsdWUgJiZcbiAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dHJpcGxlLWVxdWFsc1xuICAgICAgICAgIGNoYW5nZXMuZm9ybS5jdXJyZW50VmFsdWUgIT0gY2hhbmdlcy5mb3JtLnByZXZpb3VzVmFsdWUpIHtcbiAgICAgICAgICB0aGlzLm5nT25Jbml0KCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjaGFuZ2VzLCAnZm9ybVNyYycpKSB7XG4gICAgICBpZiAoY2hhbmdlcy5mb3JtU3JjICE9IG51bGwpIHtcbiAgICAgICAgaWYgKGNoYW5nZXMuZm9ybVNyYy5jdXJyZW50VmFsdWUgJiZcbiAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dHJpcGxlLWVxdWFsc1xuICAgICAgICAgIGNoYW5nZXMuZm9ybVNyYy5jdXJyZW50VmFsdWUgIT0gY2hhbmdlcy5mb3JtU3JjLnByZXZpb3VzVmFsdWUpIHtcbiAgICAgICAgICB0aGlzLl9odHRwLmdldChjaGFuZ2VzLmZvcm1TcmMuY3VycmVudFZhbHVlKS50b1Byb21pc2UoKS50aGVuKChmb3JtKSA9PiB7XG4gICAgICAgICAgICAvLyBzZXQgZm9ybVxuICAgICAgICAgICAgdGhpcy5mb3JtID0gZm9ybTtcbiAgICAgICAgICAgIC8vIGFuZCBpbml0XG4gICAgICAgICAgICB0aGlzLm5nT25Jbml0KCk7XG4gICAgICAgICAgfSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgbG9hZGluZyBzZWFyY2ggY29uZmlndXJhdGlvbicpO1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY2hhbmdlcywgJ2ZpbHRlcicpKSB7XG4gICAgICBpZiAoY2hhbmdlcy5maWx0ZXIgIT0gbnVsbCkge1xuICAgICAgICB0aGlzLnN1Ym1pc3Npb24uZGF0YSA9IGNoYW5nZXMuZmlsdGVyLmN1cnJlbnRWYWx1ZSB8fCB7fTtcbiAgICAgICAgdGhpcy5yZWZyZXNoRm9ybS5lbWl0KHtcbiAgICAgICAgICBzdWJtaXNzaW9uOiB0aGlzLnN1Ym1pc3Npb25cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZm9ybSkge1xuICAgICAgbmV3IFNlcnZpY2VVcmxQcmVQcm9jZXNzb3IodGhpcy5fY29udGV4dCkucGFyc2UodGhpcy5mb3JtKTtcbiAgICAgIG5ldyBUcmFuc2xhdGVQcmVQcm9jZXNzb3IodGhpcy5fdHJhbnNsYXRlU2VydmljZSkucGFyc2UodGhpcy5mb3JtKTtcbiAgICAgIHRoaXMuc3VibWlzc2lvbiA9IHtcbiAgICAgICAgZGF0YTogdGhpcy5maWx0ZXJcbiAgICAgIH07XG4gICAgICB0aGlzLmxvYWRpbmcuZW1pdCh7XG4gICAgICAgIHRhcmdldDogdGhpc1xuICAgICAgfSk7XG4gICAgICB0aGlzLnJlZnJlc2hGb3JtLmVtaXQoe1xuICAgICAgICBmb3JtOiB0aGlzLmZvcm1cbiAgICAgIH0pO1xuICAgICAgdGhpcy5jb21wb25lbnRMb2FkaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLmZpbHRlclN1YnNjcmlwdGlvbiA9IHRoaXMuZmlsdGVyQ2hhbmdlLnN1YnNjcmliZSggZmlsdGVyID0+IHtcbiAgICAgICAgdGhpcy5zdWJtaXNzaW9uLmRhdGEgPSBmaWx0ZXI7XG4gICAgICAgIHRoaXMucmVmcmVzaEZvcm0uZW1pdCh7XG4gICAgICAgICAgc3VibWlzc2lvbjogdGhpcy5zdWJtaXNzaW9uXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgb25DaGFuZ2UoZXZlbnQ6IG9iamVjdCkge1xuICAgIGlmICh0aGlzLmZvcm1Db21wb25lbnQgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBmb3JtQ29tcG9uZW50ID0gdGhpcy5mb3JtQ29tcG9uZW50O1xuICAgIE9iamVjdC5rZXlzKGZvcm1Db21wb25lbnQuc3VibWlzc2lvbi5kYXRhKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGZvcm1Db21wb25lbnQuc3VibWlzc2lvbi5kYXRhLCBrZXkpKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gZm9ybUNvbXBvbmVudC5zdWJtaXNzaW9uLmRhdGFba2V5XTtcbiAgICAgICAgLy8gdGhlIGZpbHRlciB3aXRoIHR5cGUgaXMgYSBzdHJpbmcgYW5kIGlzIG5vdCBlbXB0eVxuICAgICAgICBjb25zdCBpc0VtcHR5U3RyaW5nID0gIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUubGVuZ3RoID09PSAwO1xuICAgICAgICAvLyBkbyBub3QgaW5jbHVkZSBlbXB0eSBvYmplY3RzIGluIGZpbHRlclxuICAgICAgICBjb25zdCBpc0VtcHR5T2JqZWN0ID0gdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiBPYmplY3Qua2V5cyh2YWx1ZSkubGVuZ3RoID09PSAwO1xuICAgICAgICAvLyBtYWtlIGlzRW1wdHlTdHJpbmcsIGlzRW1wdHlPYmplY3QgbXV0ZXhcbiAgICAgICAgaWYgKCFpc0VtcHR5U3RyaW5nICYmICFpc0VtcHR5T2JqZWN0KSB7XG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMuZmlsdGVyLCBrZXksIHtcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZSA6IHRydWUsXG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWUgOiB2YWx1ZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRlbGV0ZSB0aGlzLmZpbHRlcltrZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBvbkZvcm1Mb2FkKGZvcm06IEZvcm1pb0Zvcm0pIHtcbiAgICBpZiAodGhpcy5mb3JtQ29tcG9uZW50ID09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgY3VycmVudExhbmcgPSB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmN1cnJlbnRMYW5nO1xuICAgIHRoaXMuZm9ybUNvbXBvbmVudC5mb3JtaW8uaTE4bmV4dC5vcHRpb25zLnJlc291cmNlc1tjdXJyZW50TGFuZ10gPSB7IHRyYW5zbGF0aW9uIDogdGhpcy5fdHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGBGb3Jtc2ApIH07XG4gICAgdGhpcy5mb3JtQ29tcG9uZW50LmZvcm1pby5sYW5ndWFnZSA9IGN1cnJlbnRMYW5nO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIC8vXG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5maWx0ZXJTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuZmlsdGVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgVmlld0NoaWxkLCBBZnRlclZpZXdJbml0LCBEb0NoZWNrIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb3V0ZXJNb2RhbE9rQ2FuY2VsIH0gZnJvbSAnQHVuaXZlcnNpcy9jb21tb24vcm91dGluZyc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFRhYmxlQ29uZmlndXJhdGlvbiB9IGZyb20gJy4uL2FkdmFuY2VkLXRhYmxlL2FkdmFuY2VkLXRhYmxlLmludGVyZmFjZXMnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBZHZhbmNlZFRhYmxlQ29tcG9uZW50LCBBZHZhbmNlZFRhYmxlRGF0YVJlc3VsdCB9IGZyb20gJy4uL2FkdmFuY2VkLXRhYmxlL2FkdmFuY2VkLXRhYmxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBbmd1bGFyRGF0YUNvbnRleHQgfSBmcm9tICdAdGhlbW9zdC9hbmd1bGFyJztcbmltcG9ydCB7IEFkdmFuY2VkRmlsdGVyVmFsdWVQcm92aWRlciB9IGZyb20gJy4vLi4vYWR2YW5jZWQtdGFibGUvYWR2YW5jZWQtZmlsdGVyLXZhbHVlLXByb3ZpZGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgRGF0ZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgVGVtcGxhdGVQaXBlIH0gZnJvbSAnQHVuaXZlcnNpcy9jb21tb24nO1xuZXhwb3J0IGRlY2xhcmUgaW50ZXJmYWNlIFBhZ2VJbmZvIHtcbiAgcGFnZTogbnVtYmVyO1xuICBwYWdlczogbnVtYmVyO1xuICBzdGFydDogbnVtYmVyO1xuICBlbmQ6IG51bWJlcjtcbiAgbGVuZ3RoOiBudW1iZXI7XG4gIHJlY29yZHNUb3RhbDogbnVtYmVyO1xuICByZWNvcmRzRGlzcGxheTogbnVtYmVyO1xuICBzZXJ2ZXJTaWRlPzogYm9vbGVhbjtcbn1cblxuLy8gaW1wb3J0YW50OiBleHBvcnQgdGhpcyBjb25zdCBkdWUgdG8gQU9UIGNvbXBpbGF0aW9uIGVycm9yc1xuLy8gc2VlIG1vcmUgaHR0cHM6Ly9hbmd1bGFyLmlvL2d1aWRlL2FvdC1tZXRhZGF0YS1lcnJvcnMjb25seS1pbml0aWFsaXplZC12YXJpYWJsZXNcbmV4cG9ydCBjb25zdCBBZHZhbmNlZFRhYmxlTW9kYWxCYXNlVGVtcGxhdGUgPSBgXG48ZGl2PlxuICAgIDwhLS0gc2VhcmNoIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJyb3cgbXQtM1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtbGctM1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgbWItM1wiPlxuICAgICAgICAgIDxpbnB1dCBzcGVsbGNoZWNrPVwiZmFsc2VcIiB0eXBlPVwidGV4dFwiICNzZWFyY2hFbGVtZW50XG4gICAgICAgICAgICAgICAgIChrZXl1cCk9XCJvbktleVVwKCRldmVudClcIiBbKG5nTW9kZWwpXT1cInNlYXJjaFRleHRcIlxuICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBiZy1ncmF5LTEwMCBib3JkZXItMFwiXG4gICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3snVGFibGVzLlNlYXJjaFBsYWNlaG9sZGVyJyB8IHRyYW5zbGF0ZX19XCIgYXJpYS1sYWJlbD1cIlNlYXJjaFwiIGFyaWEtZGVzY3JpYmVkYnk9XCJiYXNpYy1hZGRvbjJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAtYXBwZW5kXCI+XG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0IGJnLWdyYXktMTAwIGJvcmRlci0wXCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJvblNlYXJjaCgpXCI+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtc2VhcmNoIHRleHQtc2Vjb25kYXJ5XCI+PC9pPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2ICNlbXB0eVRhYmxlIGNsYXNzPVwiZC1ub25lXCI+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpY29uLWNpcmNsZSBiZy1ncmF5LTMwMCBib3JkZXItZ3JheS0xMDBcIj48L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtNFwiPlxuICAgICAgICAgICAgPGg0IGNsYXNzPVwiZm9udC0zeGwgdGV4dC1kYXJrXCIgW3RyYW5zbGF0ZV09XCInVGFibGVzLkVtcHR5VGFibGVUaXRsZSdcIj48L2g0PlxuICAgICAgICAgICAgPHAgY2xhc3M9XCJmb250LWxnIHRleHQtZGFya1wiIFt0cmFuc2xhdGVdPVwiJ1RhYmxlcy5FbXB0eVRhYmxlTWVzc2FnZSdcIj48L3A+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLWxnLTVcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi10b29sYmFyXCI+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tZ3JheS0xMDBcIj5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtc2xpZGVycy1oIHByLTIgdGV4dC1zZWNvbmRhcnlcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+e3snVGFibGVzLkZpbHRlcnMnIHwgdHJhbnNsYXRlfX1cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8ZGl2ICNkcm9wZG93bkZpbHRlciBjbGFzcz1cImRyb3Bkb3duIG1sLTNcIj5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWdyYXktMTAwIGRyb3Bkb3duLXRvZ2dsZVwiXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIiBpZD1cImRyb3Bkb3duRGVmYXVsdEZpbHRlcnNcIlxuICAgICAgICAgICAgICAgICAgICBkYXRhLXRvZ2dsZT1cImRyb3Bkb3duXCIgZHJvcGRvd25Ub2dnbGU+XG4gICAgICAgICAgICAgIHt7IHRoaXMuZGVmYXVsdEZpbHRlci5uYW1lIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1tZW51XCIgYXJpYS1sYWJlbGxlZGJ5PVwiZHJvcGRvd25EZWZhdWx0RmlsdGVyc1wiPlxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImRyb3Bkb3duLWl0ZW1cIiAqbmdGb3I9XCJsZXQgZmlsdGVyIG9mIGRlZmF1bHRGaWx0ZXJzXCIgKGNsaWNrKT1cIm9uRmlsdGVyU2VsZWN0KGZpbHRlcilcIj5cbiAgICAgICAgICAgICAgICB7eyBmaWx0ZXIubmFtZSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNvbCB0ZXh0LWxnLXJpZ2h0IG10LTMgbXQtbGctMCBkLW5vbmVcIj5cbiAgICAgICAgPGJ1dHRvbiBbZGlzYWJsZWRdPVwidHJ1ZVwiIGNsYXNzPVwiYnRuIHJvdW5kZWQtcGlsbCBidG4tb3V0bGluZS10aGVtZVwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwicHItMiBmb250LWxnXCI+Kzwvc3Bhbj48c3BhbiBbdHJhbnNsYXRlXT1cIidUYWJsZXMuQWRkSXRlbSdcIj48L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiIFtuZ0NsYXNzXT1cInsgJ2NvbXBvbmVudC1sb2FkaW5nJzogbG9hZGluZ31cIj5cbiAgICAgICAgPGFwcC1hZHZhbmNlZC10YWJsZSAjYWR2YW5jZWRUYWJsZSAoaW5pdCk9XCJvblRhYmxlSW5pdCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9hZCk9XCJvbkRhdGFMb2FkKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWxlY3RhYmxlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttdWx0aXBsZVNlbGVjdF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2Nyb2xsWF09XCJmYWxzZVwiIFtzY3JvbGxZXT1cIjMyMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BhZ2VMZW5ndGhdPVwicGFnZUxlbmd0aFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Njcm9sbGFibGVdPVwiZmFsc2VcIiBbc2hvd0Zvb3Rlcl09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dBY3Rpb25zXT1cImZhbHNlXCIgW2xlbmd0aE1lbnVdPVwibGVuZ3RoTWVudVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbmZpZ109XCJ0YWJsZUNvbmZpZ1wiIFtjb25maWdTcmNdPVwidGFibGVDb25maWdTcmNcIj48L2FwcC1hZHZhbmNlZC10YWJsZT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJyb3cgbXQtMyB0YWJsZS1jdXN0b20tcGFnZXJcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgZC1mbGV4XCIgKm5nSWY9XCJyZWNvcmRzVG90YWxcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm10LTIgbWwtYXV0byBtci0zIHRleHQtc2Vjb25kYXJ5XCIgW3RyYW5zbGF0ZV09XCInVGFibGVzLlJlY29yZHNQZXJQYWdlJ1wiPjwvZGl2PlxuICAgICAgICA8ZGl2ICNkcm9wZG93bkxlbmd0aCBjbGFzcz1cImRyb3Bkb3duIG1yLTNcIj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1ncmF5LTEwMCBkcm9wZG93bi10b2dnbGVcIlxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiIGlkPVwiZHJvcGRvd25QYWdlU2l6ZVwiIGRhdGEtdG9nZ2xlPVwiZHJvcGRvd25cIlxuICAgICAgICAgICAgICAgICAgZHJvcGRvd25Ub2dnbGU+XG4gICAgICAgICAgICB7e3BhZ2VMZW5ndGh9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1tZW51XCIgYXJpYS1sYWJlbGxlZGJ5PVwiZHJvcGRvd25QYWdlU2l6ZVwiPlxuICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwic2V0TGVuZ3RoKGl0ZW0pXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkcm9wZG93bi1pdGVtIGRyb3Bkb3duLWl0ZW0tdGhlbWVcIlxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgbGVuZ3RoTWVudVwiPnt7aXRlbX19PC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMiBtci0yXCIgW3RyYW5zbGF0ZV09XCInVGFibGVzLlBhZ2VJbmZvJ1wiIFt0cmFuc2xhdGVQYXJhbXNdPVwicGFnZUluZm9cIj48L2Rpdj5cbiAgICAgICAgPGJ1dHRvbiBbZGlzYWJsZWRdPVwicGFnZUluZm8gJiYgcGFnZUluZm8ucGFnZSA9PT0gMFwiIGNsYXNzPVwiYnRuIHRleHQtbm93cmFwXCIgKGNsaWNrKT1cImZpcnN0UGFnZSgpXCI+XG4gICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jaGV2cm9uLWxlZnQgdGV4dC1jb2xvci10aGVtZVwiPjwvaT5cbiAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWNoZXZyb24tbGVmdCB0ZXh0LWNvbG9yLXRoZW1lXCI+PC9pPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBbZGlzYWJsZWRdPVwicGFnZUluZm8gJiYgcGFnZUluZm8ucGFnZT09PTBcIiBjbGFzcz1cImJ0blwiIChjbGljayk9XCJwcmV2aW91c1BhZ2UoKVwiPlxuICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtY2hldnJvbi1sZWZ0IHRleHQtY29sb3ItdGhlbWVcIj48L2k+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIFtkaXNhYmxlZF09XCJwYWdlSW5mbyAmJiBwYWdlSW5mby5wYWdlPT09cGFnZUluZm8ucGFnZXMtMVwiIGNsYXNzPVwiYnRuXCIgKGNsaWNrKT1cIm5leHRQYWdlKClcIj5cbiAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWNoZXZyb24tcmlnaHQgdGV4dC1jb2xvci10aGVtZVwiPjwvaT5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gW2Rpc2FibGVkXT1cInBhZ2VJbmZvICYmIHBhZ2VJbmZvLnBhZ2U9PT1wYWdlSW5mby5wYWdlcy0xXCIgY2xhc3M9XCJidG4gdGV4dC1ub3dyYXBcIiAoY2xpY2spPVwibGFzdFBhZ2UoKVwiPlxuICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtY2hldnJvbi1yaWdodCB0ZXh0LWNvbG9yLXRoZW1lXCI+PC9pPlxuICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtY2hldnJvbi1yaWdodCB0ZXh0LWNvbG9yLXRoZW1lXCI+PC9pPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbmA7XG5cbi8qKlxuICpcbiAqIEEgc3BlY2lmaWMgdmFsdWUgZm9yIGEgY3JpdGVyaW9uXG4gKlxuICovXG5pbnRlcmZhY2UgU2VhcmNoSXRlbSB7XG4gIGZpbHRlcjogYW55O1xuICBuYW1lOiBzdHJpbmc7XG59XG5cbkBDb21wb25lbnQoe1xuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IGNvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ2FwcC1hZHZhbmNlZC10YWJsZS1tb2RhbCcsXG4gIHRlbXBsYXRlOiBBZHZhbmNlZFRhYmxlTW9kYWxCYXNlVGVtcGxhdGUsXG4gIHN0eWxlczogW1xuICAgIGBcblxuICAgIGBcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBBZHZhbmNlZFRhYmxlTW9kYWxCYXNlQ29tcG9uZW50IGV4dGVuZHMgUm91dGVyTW9kYWxPa0NhbmNlbCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdJbml0IHtcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuc2VhcmNoRWxlbWVudCAmJiB0aGlzLnNlYXJjaEVsZW1lbnQubmF0aXZlRWxlbWVudCkge1xuICAgICAgICB0aGlzLnNlYXJjaEVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgfVxuICAgIH0sIDApO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgREVGQVVMVF9BTExfRklMVEVSID0ge1xuICAgIG5hbWU6ICdUYWJsZXMuQWxsJyxcbiAgICBmaWx0ZXI6IG51bGxcbiAgfTtcblxuICBAVmlld0NoaWxkKCdhZHZhbmNlZFRhYmxlJykgYWR2YW5jZWRUYWJsZT86IEFkdmFuY2VkVGFibGVDb21wb25lbnQ7XG4gIEBWaWV3Q2hpbGQoJ2VtcHR5VGFibGUnKSBlbXB0eVRhYmxlPzogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnZHJvcGRvd25GaWx0ZXInKSBkcm9wZG93bkZpbHRlcj86IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ2Ryb3Bkb3duTGVuZ3RoJykgZHJvcGRvd25MZW5ndGg/OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdzZWFyY2hFbGVtZW50Jykgc2VhcmNoRWxlbWVudDogYW55O1xuICBASW5wdXQoJ3RhYmxlQ29uZmlnJykgdGFibGVDb25maWc/OiBUYWJsZUNvbmZpZ3VyYXRpb247XG4gIEBJbnB1dCgndGFibGVDb25maWdTcmMnKSB0YWJsZUNvbmZpZ1NyYz86IHN0cmluZztcbiAgQElucHV0KCdwYWdlTGVuZ3RoJykgcGFnZUxlbmd0aCA9IDI1O1xuICBASW5wdXQoJ3NlYXJjaFRleHQnKSBzZWFyY2hUZXh0Pzogc3RyaW5nO1xuICBASW5wdXQoJ2xlbmd0aE1lbnUnKSBsZW5ndGhNZW51OiBBcnJheTxudW1iZXI+ID0gWzUsIDEwLCAyNSwgNTAsIDEwMF07XG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuICBwdWJsaWMgcmVjb3Jkc1RvdGFsID0gMDtcbiAgcHVibGljIGxvYWRpbmcgPSBmYWxzZTtcbiAgcHVibGljIHJlY29yZHNGaWx0ZXJlZCA9IDA7XG4gIHB1YmxpYyBkZWZhdWx0RmlsdGVyczogQXJyYXk8YW55PiA9IFtBZHZhbmNlZFRhYmxlTW9kYWxCYXNlQ29tcG9uZW50LkRFRkFVTFRfQUxMX0ZJTFRFUl07XG4gIEBJbnB1dCgnZGVmYXVsdEZpbHRlcicpIGRlZmF1bHRGaWx0ZXIgPSBBZHZhbmNlZFRhYmxlTW9kYWxCYXNlQ29tcG9uZW50LkRFRkFVTFRfQUxMX0ZJTFRFUjtcblxuXG4gIHB1YmxpYyBwYWdlSW5mbyA9IDxQYWdlSW5mbz57XG4gICAgc2VydmVyU2lkZTogdHJ1ZVxuICB9O1xuICBwcml2YXRlIF90ZW1wbGF0ZTogVGVtcGxhdGVQaXBlO1xuICBjb25maWdDaGFuZ2VzU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIF9yb3V0ZXI6IFJvdXRlcixcbiAgICBfYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByb3RlY3RlZCBfY29udGV4dDogQW5ndWxhckRhdGFDb250ZXh0LFxuICAgIHByb3RlY3RlZCBhZHZhbmNlZEZpbHRlclZhbHVlUHJvdmlkZXI6IEFkdmFuY2VkRmlsdGVyVmFsdWVQcm92aWRlcixcbiAgICBwcm90ZWN0ZWQgZGF0ZVBpcGU6IERhdGVQaXBlXG4gICkge1xuICAgIHN1cGVyKF9yb3V0ZXIsIF9hY3RpdmF0ZWRSb3V0ZSk7XG4gICAgdGhpcy5tb2RhbENsYXNzID0gJ21vZGFsLXhsIG1vZGFsLXRhYmxlJztcbiAgICB0aGlzLl90ZW1wbGF0ZSA9IG5ldyBUZW1wbGF0ZVBpcGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgX2dldElucHV0cyhjb21wb25lbnRUeXBlKTogQXJyYXk8YW55PiB7XG4gICAgY29uc3QgcHJvcHMgPSBjb21wb25lbnRUeXBlLl9fcHJvcF9fbWV0YWRhdGFfXztcbiAgICBjb25zdCBpbnB1dHM6IGFueVtdID0gW107XG4gICAgaWYgKHByb3BzID09IG51bGwpIHtcbiAgICAgIHJldHVybiBpbnB1dHM7XG4gICAgfVxuICAgIE9iamVjdC5rZXlzKHByb3BzKS5mb3JFYWNoKHByb3AgPT4ge1xuICAgICAgY29uc3QgbWVtYmVyID0gcHJvcHNbcHJvcF1bMF07XG4gICAgICBpZiAobWVtYmVyLm5nTWV0YWRhdGFOYW1lID09PSAnSW5wdXQnKSB7XG4gICAgICAgIGlucHV0cy5wdXNoKHByb3ApO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBpbnB1dHMuc29ydCgpO1xuICB9XG5cbiAgcHVibGljIGhhc0lucHV0cygpOiBBcnJheTxzdHJpbmc+IHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcblxuICAgIHRoaXMub2tCdXR0b25UZXh0ID0gJ1RhYmxlcy5BcHBseSc7XG4gICAgdGhpcy5jYW5jZWxCdXR0b25UZXh0ID0gJ1RhYmxlcy5DYW5jZWwnO1xuICAgIC8vIGdldCByb3V0ZSBkYXRhXG4gICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLmFjdGl2YXRlZFJvdXRlLmRhdGEuc3Vic2NyaWJlKGRhdGEgPT4ge1xuICAgICAgLy8gc2V0IG1vZGFsIHRpdGxlIGlmIGFueVxuICAgICAgaWYgKGRhdGEudGl0bGUpIHtcbiAgICAgICAgdGhpcy5tb2RhbFRpdGxlID0gZGF0YS50aXRsZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGEuY29uZmlnKSB7XG4gICAgICAgIHRoaXMudGFibGVDb25maWcgPSBkYXRhLmNvbmZpZztcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnRhYmxlQ29uZmlnKSB7XG4gICAgICAgIHRoaXMuZGVmYXVsdEZpbHRlcnMucHVzaC5hcHBseSh0aGlzLmRlZmF1bHRGaWx0ZXJzLCB0aGlzLnRhYmxlQ29uZmlnLnNlYXJjaGVzKTtcbiAgICAgIH1cbiAgICAgIC8vIGltcG9ydGFudDogdXNlIGhhc0lucHV0cyBkdWUgdG8gQU9UIGNvbXBpbGF0aW9uLiBNZXRhZGF0YSBwcm9wZXJ0aWVzIGNhbm5vdCBiZSB1c2VkIChlLmcuIEBJbnB1dCgpKVxuICAgICAgLy8gYmVjYXVzZSB0aGVyZSBhcmUgZW1wdHkgZHVyaW5nIHJ1bnRpbWVcbiAgICAgIC8vIHNvIHdlIG5lZWQgdG8gZGVmaW5lIG1hbnVhbGx5IGlucHV0IHByb3BlcnRpZXMgdGhhdCBhcmUgZ29pbmcgdG8gYmUgYmluZCB0aHJvdWdoIHRoaXMgcHJvY2Vzc1xuICAgICAgLy8gYmluZCBhbGwgaW5wdXRzXG4gICAgICBjb25zdCBpbnB1dHMgPSB0aGlzLmhhc0lucHV0cygpO1xuICAgICAgaW5wdXRzLmZvckVhY2goaW5wdXQgPT4ge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGRhdGEsIGlucHV0KSkge1xuICAgICAgICAgIHRoaXNbaW5wdXRdID0gZGF0YVtpbnB1dF07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgaWYgKHRoaXMuYWR2YW5jZWRUYWJsZSkge1xuICAgICAgICB0aGlzLmNvbmZpZ0NoYW5nZXNTdWJzY3JpcHRpb24gPSB0aGlzLmFkdmFuY2VkVGFibGUuY29uZmlnQ2hhbmdlcy5zdWJzY3JpYmUoKGNvbmZpZykgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLnRhYmxlQ29uZmlnKSB7XG4gICAgICAgICAgICAvLyByZXNldCBkZWZhdWx0IGZpbHRlclxuICAgICAgICAgICAgdGhpcy5kZWZhdWx0RmlsdGVyID0gQWR2YW5jZWRUYWJsZU1vZGFsQmFzZUNvbXBvbmVudC5ERUZBVUxUX0FMTF9GSUxURVI7XG4gICAgICAgICAgICAvLyBpbml0IGZpbHRlclxuICAgICAgICAgICAgdGhpcy5kZWZhdWx0RmlsdGVycyA9IFtBZHZhbmNlZFRhYmxlTW9kYWxCYXNlQ29tcG9uZW50LkRFRkFVTFRfQUxMX0ZJTFRFUl07XG4gICAgICAgICAgICAvLyBhZGQgZXh0cmEgZmlsdGVyc1xuICAgICAgICAgICAgdGhpcy5kZWZhdWx0RmlsdGVycy5wdXNoLmFwcGx5KHRoaXMuZGVmYXVsdEZpbHRlcnMsIHRoaXMudGFibGVDb25maWcuc2VhcmNoZXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBjYW5jZWwoKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5jbG9zZSgpO1xuICB9XG5cbiAgb2soKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5jbG9zZSgpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIG9uRGF0YUxvYWQoZGF0YTogQWR2YW5jZWRUYWJsZURhdGFSZXN1bHQpIHtcbiAgICB0aGlzLnJlY29yZHNUb3RhbCA9IGRhdGEucmVjb3Jkc1RvdGFsO1xuICAgIHRoaXMucmVjb3Jkc0ZpbHRlcmVkID0gZGF0YS5yZWNvcmRzRmlsdGVyZWQ7XG4gICAgLy8gZ2V0IGZpcnN0IHBhZ2UgaW5mbyAoYmVjYXVzZSBwYWdlIGlzIG5vdCBnb2luZyB0byBiZSBmaXJlZCBmb3IgZmlyc3QgcGFnZSlcbiAgICBpZiAoZGF0YS5yZWNvcmRzVG90YWwgPiAwICYmIHRoaXMucGFnZUluZm8ucmVjb3Jkc1RvdGFsID09PSAwKSB7XG4gICAgICB0aGlzLnBhZ2VJbmZvLnJlY29yZHNUb3RhbCA9IGRhdGEucmVjb3Jkc1RvdGFsO1xuICAgIH1cbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgfVxuXG4gIHByZXZpb3VzUGFnZSgpIHtcbiAgICBpZiAodGhpcy5hZHZhbmNlZFRhYmxlKSB7XG4gICAgICAvLyBnbyB0byBuZXh0IHBhZ2VcbiAgICAgIC8vIG5vaW5zcGVjdGlvbiBUeXBlU2NyaXB0VmFsaWRhdGVKU1R5cGVzXG4gICAgICB0aGlzLmFkdmFuY2VkVGFibGUuZGF0YVRhYmxlLnBhZ2UoJ3ByZXZpb3VzJykuZHJhdygncGFnZScpO1xuICAgIH1cbiAgfVxuXG4gIG5leHRQYWdlKCkge1xuICAgIGlmICh0aGlzLmFkdmFuY2VkVGFibGUpIHtcbiAgICAgIC8vIGdvIHRvIG5leHQgcGFnZVxuICAgICAgLy8gbm9pbnNwZWN0aW9uIFR5cGVTY3JpcHRWYWxpZGF0ZUpTVHlwZXNcbiAgICAgIHRoaXMuYWR2YW5jZWRUYWJsZS5kYXRhVGFibGUucGFnZSgnbmV4dCcpLmRyYXcoJ3BhZ2UnKTtcbiAgICB9XG4gIH1cblxuICBvblRhYmxlSW5pdCgpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBjb25zdCBkYXRhVGFibGUgPSBzZWxmLmFkdmFuY2VkVGFibGUgJiYgc2VsZi5hZHZhbmNlZFRhYmxlLmRhdGFUYWJsZTtcbiAgICAvLyBnZXQgaW5pdGlhbCBwYWdlIGluZm9cbiAgICBjb25zdCBpbml0aWFsUGFnZUluZm8gPSA8UGFnZUluZm8+ZGF0YVRhYmxlLnBhZ2UuaW5mbygpO1xuICAgIGluaXRpYWxQYWdlSW5mby5zdGFydCArPSAxO1xuICAgIHNlbGYucGFnZUluZm8gPSBpbml0aWFsUGFnZUluZm87XG4gICAgLy8gY2hhbmdlIGVtcHR5VGFibGVNZXNzYWdlXG4gICAgZGF0YVRhYmxlLmNvbnRleHRbMF0ub0xhbmd1YWdlLnNFbXB0eVRhYmxlID0gdGhpcy5lbXB0eVRhYmxlICYmIHRoaXMuZW1wdHlUYWJsZS5uYXRpdmVFbGVtZW50LmlubmVySFRNTDtcbiAgICAvLyBiaW5kIHBhZ2UgY2hhbmdlIGV2ZW50XG4gICAgZGF0YVRhYmxlLm9uKCdwYWdlLmR0JywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcGFnZUluZm8gPSA8UGFnZUluZm8+ZGF0YVRhYmxlLnBhZ2UuaW5mbygpO1xuICAgICAgcGFnZUluZm8uc3RhcnQgKz0gMTtcbiAgICAgIHNlbGYucGFnZUluZm8gPSBwYWdlSW5mbztcbiAgICB9KTtcbiAgICAvLyBiaW5kIGRyYXcgY2hhbmdlIGV2ZW50XG4gICAgZGF0YVRhYmxlLm9uKCdkcmF3LmR0JywgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gZm9yIGZ1dHVyZSB1c2VcbiAgICAgIHNlbGYubG9hZGluZyA9IGZhbHNlO1xuICAgICAgY29uc3QgcGFnZUluZm8gPSA8UGFnZUluZm8+ZGF0YVRhYmxlLnBhZ2UuaW5mbygpO1xuICAgICAgcGFnZUluZm8uc3RhcnQgKz0gMTtcbiAgICAgIHNlbGYucGFnZUluZm8gPSBwYWdlSW5mbztcbiAgICB9KTtcbiAgfVxuXG4gIGZpcnN0UGFnZSgpIHtcbiAgICBpZiAodGhpcy5hZHZhbmNlZFRhYmxlKSB7XG4gICAgICAvLyBnbyB0byBmaXJzdCBwYWdlXG4gICAgICAvLyBub2luc3BlY3Rpb24gVHlwZVNjcmlwdFZhbGlkYXRlSlNUeXBlc1xuICAgICAgdGhpcy5hZHZhbmNlZFRhYmxlLmRhdGFUYWJsZS5wYWdlKCdmaXJzdCcpLmRyYXcoJ3BhZ2UnKTtcbiAgICB9XG4gIH1cblxuICBsYXN0UGFnZSgpIHtcbiAgICBpZiAodGhpcy5hZHZhbmNlZFRhYmxlKSB7XG4gICAgICAvLyBnbyB0byBsYXN0IHBhZ2VcbiAgICAgIC8vIG5vaW5zcGVjdGlvbiBUeXBlU2NyaXB0VmFsaWRhdGVKU1R5cGVzXG4gICAgICB0aGlzLmFkdmFuY2VkVGFibGUuZGF0YVRhYmxlLnBhZ2UoJ2xhc3QnKS5kcmF3KCdwYWdlJyk7XG4gICAgfVxuICB9XG5cbiAgc2V0TGVuZ3RoKHZhbHVlOiBudW1iZXIpIHtcbiAgICBpZiAodGhpcy5hZHZhbmNlZFRhYmxlKSB7XG4gICAgICB0aGlzLnBhZ2VMZW5ndGggPSB2YWx1ZTtcbiAgICAgIHRoaXMuYWR2YW5jZWRUYWJsZS5kYXRhVGFibGUucGFnZS5sZW4odmFsdWUpLmRyYXcoKTtcbiAgICB9XG4gIH1cblxuICBvbktleVVwKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VudGVyJyB8fCBldmVudC5rZXkgPT09ICdSZXR1cm4nKSB7XG4gICAgICBpZiAodGhpcy5hZHZhbmNlZFRhYmxlKSB7XG4gICAgICAgIC8vIGxvYWRpbmdcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5hZHZhbmNlZFRhYmxlLnNlYXJjaCgoPEhUTUxJbnB1dEVsZW1lbnQ+ZXZlbnQudGFyZ2V0KS52YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25TZWFyY2goKSB7XG4gICAgaWYgKHRoaXMuYWR2YW5jZWRUYWJsZSkge1xuICAgICAgLy8gbG9hZGluZ1xuICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgIHRoaXMuYWR2YW5jZWRUYWJsZS5zZWFyY2godGhpcy5zZWFyY2hUZXh0KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogUmVhZHMgdGhlIG1vZGFsIHRhYmxlIGFuZCByZXR1cm5zIGEgbGlzdCBvZiBmaWx0ZXJzIHRvIHVzZSBpbiB0aGUgdGFibGVcbiAgICogcXVlcnkuXG4gICAqXG4gICAqIEBwYXJhbSB0YWJsZUNvbmZpZyB7b2JqZWN0fSBUaGUgdGFibGUgY29uZmlndXJhdGlvbiBmcm9tIGpzb24gZmlsZVxuICAgKiBAcGFyYW0gZGVmYXVsdEZpbHRlclZhbHVlcyB7b2JqZWN0fSBBIGxpc3Qgb2YgZGVmYXVsdCBmaWx0ZXJzXG4gICAqIEBwYXJhbSBzZWFyY2hJdGVtIFRoZSBzZWFyY2hJdGVtIHRvIHVzZVxuICAgKlxuICAgKi9cbiAgZ2V0RmlsdGVycyhcbiAgICB0YWJsZUNvbmZpZzogYW55LFxuICAgIGRlZmF1bHRGaWx0ZXJWYWx1ZXMgPSB7fSxcbiAgICBzZWFyY2hJdGVtOiBhbnlcbiAgKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgLy8gRG8gbm90aGluZyBpbiBhYnNlbmNlIG9mIGNvbmZpZ3VyYXRpb24uXG4gICAgaWYgKCF0YWJsZUNvbmZpZyB8fCAhQXJyYXkuaXNBcnJheSh0YWJsZUNvbmZpZy5jcml0ZXJpYSkpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBpZiAoc2VhcmNoSXRlbS5maWx0ZXIgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IG1hdGNoZWRDcml0ZXJpb24gPSB0YWJsZUNvbmZpZy5jcml0ZXJpYS5maW5kKGNyaXRlcmlvbiA9PlxuICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNlYXJjaEl0ZW0uZmlsdGVyLCBjcml0ZXJpb24ubmFtZSlcbiAgICApO1xuXG4gICAgaWYgKG1hdGNoZWRDcml0ZXJpb24gPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlID0gc2VhcmNoSXRlbS5maWx0ZXJbbWF0Y2hlZENyaXRlcmlvbi5uYW1lXTtcblxuICAgIGNvbnN0IGNyaXRlcmlvblNhZmVOYW1lID0gbWF0Y2hlZENyaXRlcmlvbi5uYW1lICE9PSBudWxsXG4gICAgICA/IG1hdGNoZWRDcml0ZXJpb24ubmFtZS50b1N0cmluZygpXG4gICAgICA6ICcnO1xuXG4gICAgbGV0IGFwcGxpY2FibGVGaWx0ZXI6IHN0cmluZztcblxuICAgIC8vIFJhdyBkYXRlcyBzaG91bGQgYmUgdHJhbnNmb3JtZWQgdG8gYSBzcGVjaWZpYyBmb3JtYXRcbiAgICBpZiAoY3JpdGVyaW9uU2FmZU5hbWUuaW5jbHVkZXMoJ0dNVCcpKSB7XG4gICAgICBjb25zdCBuZXdEYXRlID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oY3JpdGVyaW9uU2FmZU5hbWUsICdNTS9kZC95eXl5Jyk7XG4gICAgICBhcHBsaWNhYmxlRmlsdGVyID0gdGhpcy5fdGVtcGxhdGUudHJhbnNmb3JtKG1hdGNoZWRDcml0ZXJpb24uZmlsdGVyLCB7XG4gICAgICAgIHZhbHVlOiBuZXdEYXRlXG4gICAgICB9KTtcblxuICAgIH0gZWxzZSBpZiAoY3JpdGVyaW9uU2FmZU5hbWUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBhcHBsaWNhYmxlRmlsdGVyID0gKHRoaXMuX3RlbXBsYXRlLnRyYW5zZm9ybShtYXRjaGVkQ3JpdGVyaW9uLmZpbHRlciwgT2JqZWN0LmFzc2lnbih7XG4gICAgICAgIHZhbHVlOiB2YWx1ZVxuICAgICAgfSwgZGVmYXVsdEZpbHRlclZhbHVlcykpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXBwbGljYWJsZUZpbHRlciA9ICcnO1xuICAgIH1cblxuICAgIHJldHVybiBbYXBwbGljYWJsZUZpbHRlcl07XG4gIH1cblxuICBvbkZpbHRlclNlbGVjdCh2YWx1ZTogeyBmaWx0ZXI6IGFueTsgbmFtZTogc3RyaW5nIH0gfCBhbnkpIHtcbiAgICB0aGlzLmFkdmFuY2VkU2VhcmNoKHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBSdW5zIGEgZmlsdGVyIGFnYWluc3QgdGhlIG1vZGFsIHRhYmxlXG4gICAqXG4gICAqIEBwYXJhbSBmaWx0ZXIgVGhlIGZpbHRlciB0byB1c2UgaW4gdGhlIHNlYXJjaFxuICAgKlxuICAgKi9cbiAgYXN5bmMgYWR2YW5jZWRTZWFyY2goZmlsdGVyKTogUHJvbWlzZTxhbnk+IHtcbiAgICAvLyBEbyBub3RoaW5nIGluIGFic2VuY2Ugb2YgY29uZmlndXJhdGlvbi5cbiAgICBpZiAoIXRoaXMudGFibGVDb25maWcgfHwgIUFycmF5LmlzQXJyYXkodGhpcy50YWJsZUNvbmZpZy5jcml0ZXJpYSkgfHwgIXRoaXMuYWR2YW5jZWRUYWJsZSkge1xuICAgICAgY29uc29sZS53YXJuKCdObyB0YWJsZSBjb25maWd1cmF0aW9uIGF2YWlsYWJsZScsIHRoaXMudGFibGVDb25maWcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEFuIGFkdmFuY2VkIHRhYmxlIGhhcyBzb21lIGZpbHRlcnMgYnkgZGVmYXVsdFxuICAgIGxldCBkZWZhdWx0RmlsdGVyVmFsdWVzO1xuICAgIHRyeSB7XG4gICAgICBkZWZhdWx0RmlsdGVyVmFsdWVzID0gYXdhaXQgdGhpcy5hZHZhbmNlZEZpbHRlclZhbHVlUHJvdmlkZXIuZ2V0VmFsdWVzKCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBkZWZhdWx0RmlsdGVyVmFsdWVzID0ge307XG4gICAgfVxuXG4gICAgY29uc3QgZXhwcmVzc2lvbnM6IGFueVtdID0gW107XG4gICAgbGV0IHByZWRlZmluZWRDcml0ZXJpYTtcbiAgICBpZiAoZmlsdGVyKSB7XG4gICAgICB0aGlzLmRlZmF1bHRGaWx0ZXIgPSBmaWx0ZXI7XG4gICAgICBwcmVkZWZpbmVkQ3JpdGVyaWEgPSB0aGlzLmdldEZpbHRlcnMoXG4gICAgICAgIHRoaXMudGFibGVDb25maWcsXG4gICAgICAgIGRlZmF1bHRGaWx0ZXJWYWx1ZXMsXG4gICAgICAgIGZpbHRlclxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRW1wdHkgYSBmYWxzeSBmaWx0ZXIgcmVzZXRzIHRoZSByZXN1bHRzXG4gICAgICB0aGlzLmRlZmF1bHRGaWx0ZXIgPSBBZHZhbmNlZFRhYmxlTW9kYWxCYXNlQ29tcG9uZW50LkRFRkFVTFRfQUxMX0ZJTFRFUjtcbiAgICB9XG5cbiAgICAvLyBzZWFyY2ggZmlsdGVyIGlzIGFwcGxpZWQgc2VwYXJhdGVseSwgdGhlcmUgaXMgbm8gbmVlZCB0byBhZGQgaGVyZS5cbiAgICBleHByZXNzaW9ucy5wdXNoKHByZWRlZmluZWRDcml0ZXJpYSk7XG5cbiAgICBjb25zdCBxdWVyeSA9IHRoaXMuX2NvbnRleHQubW9kZWwodGhpcy5hZHZhbmNlZFRhYmxlLmNvbmZpZy5tb2RlbCkuYXNRdWVyeWFibGUoKTtcbiAgICBxdWVyeS5zZXRQYXJhbSgnZmlsdGVyJywgZXhwcmVzc2lvbnMuam9pbignIGFuZCAnKSkucHJlcGFyZSgpO1xuICAgIHRoaXMuYWR2YW5jZWRUYWJsZS5xdWVyeSA9IHF1ZXJ5O1xuICAgIHRoaXMuYWR2YW5jZWRUYWJsZS5mZXRjaCgpO1xuICB9XG59XG5cbiIsImltcG9ydCB7IEFkdmFuY2VkVGFibGVNb2RhbEJhc2VDb21wb25lbnQgfSBmcm9tICcuLi9hZHZhbmNlZC10YWJsZS1tb2RhbC9hZHZhbmNlZC10YWJsZS1tb2RhbC1iYXNlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEFkdmFuY2VkRmlsdGVyVmFsdWVQcm92aWRlciB9IGZyb20gJy4uL2FkdmFuY2VkLXRhYmxlL2FkdmFuY2VkLWZpbHRlci12YWx1ZS1wcm92aWRlci5zZXJ2aWNlJztcbmltcG9ydCB7IEFuZ3VsYXJEYXRhQ29udGV4dCB9IGZyb20gJ0B0aGVtb3N0L2FuZ3VsYXInO1xuaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIFZpZXdDaGlsZCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJzTW9kYWxSZWYgfSBmcm9tICduZ3gtYm9vdHN0cmFwL21vZGFsJztcbmltcG9ydCB7IERhdGVQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuQENvbXBvbmVudCh7XG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogY29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnYXBwLWFkdmFuY2VkLXNlbGVjdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9hZHZhbmNlZC1zZWxlY3QuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZXM6IFtcbiAgICBgXG4gICAgLm1vZGFsLXRhYmxlIC5kYXRhVGFibGVzX3dyYXBwZXIge1xuICAgICAgaGVpZ2h0OiA1MHZoO1xuICAgICAgb3ZlcmZsb3cteTogYXV0bztcbiAgICB9XG4gICAgYCxcbiAgXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbn0pXG5leHBvcnQgY2xhc3MgQWR2YW5jZWRTZWxlY3RDb21wb25lbnQgZXh0ZW5kcyBBZHZhbmNlZFRhYmxlTW9kYWxCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG5cbiAgcHVibGljIGRpc21pc3M6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAVmlld0NoaWxkKCdzZWFyY2hFbGVtZW50Jykgc2VhcmNoRWxlbWVudDogYW55O1xuXG4gIGNvbnN0cnVjdG9yKHJvdXRlcjogUm91dGVyLFxuICAgIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBjb250ZXh0OiBBbmd1bGFyRGF0YUNvbnRleHQsXG4gICAgYWR2YW5jZWRGaWx0ZXJWYWx1ZVByb3ZpZGVyOiBBZHZhbmNlZEZpbHRlclZhbHVlUHJvdmlkZXIsXG4gICAgZGF0ZVBpcGU6IERhdGVQaXBlLFxuICAgIHByaXZhdGUgX21vZGFsUmVmOiBCc01vZGFsUmVmLFxuICAgIHByaXZhdGUgZWw6IEVsZW1lbnRSZWYpIHtcbiAgICBzdXBlcihyb3V0ZXIsIGFjdGl2YXRlZFJvdXRlLCBjb250ZXh0LCBhZHZhbmNlZEZpbHRlclZhbHVlUHJvdmlkZXIsIGRhdGVQaXBlKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICBzdXBlci5uZ0FmdGVyVmlld0luaXQoKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLnNlYXJjaEVsZW1lbnQgJiYgdGhpcy5zZWFyY2hFbGVtZW50Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgdGhpcy5zZWFyY2hFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9LCAwKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBvaygpIHtcbiAgICB0aGlzLl9tb2RhbFJlZi5oaWRlKCk7XG4gICAgdGhpcy5kaXNtaXNzLmVtaXQoJ29rJyk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgY2FuY2VsKCkge1xuICAgIHRoaXMuX21vZGFsUmVmLmhpZGUoKTtcbiAgICB0aGlzLmRpc21pc3MuZW1pdCgnY2FuY2VsJyk7XG4gIH1cblxufVxuIiwiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTW9kYWxTZXJ2aWNlIH0gZnJvbSAnQHVuaXZlcnNpcy9jb21tb24nO1xuaW1wb3J0IHsgQWR2YW5jZWRTZWxlY3RDb21wb25lbnQgfSBmcm9tICcuL2FkdmFuY2VkLXNlbGVjdC5jb21wb25lbnQnO1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEFkdmFuY2VkU2VsZWN0U2VydmljZSB7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfbW9kYWw6IE1vZGFsU2VydmljZSkge1xuICAgIC8vXG4gIH1cblxuICBzZWxlY3QoaW5pdGlhbFN0YXRlOiBhbnkpOiBQcm9taXNlPHtyZXN1bHQ6IHN0cmluZywgaXRlbXM6IEFycmF5PGFueT59PiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IG1vZGFsUmVmID0gdGhpcy5fbW9kYWwub3Blbk1vZGFsQ29tcG9uZW50KEFkdmFuY2VkU2VsZWN0Q29tcG9uZW50LCB7XG4gICAgICAgICAgY2xhc3M6ICdtb2RhbC14bCBtb2RhbC10YWJsZScsXG4gICAgICAgICAgaWdub3JlQmFja2Ryb3BDbGljazogdHJ1ZSxcbiAgICAgICAgICBhbmltYXRlZDogdHJ1ZSxcbiAgICAgICAgICBpbml0aWFsU3RhdGU6IGluaXRpYWxTdGF0ZVxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgY29tcG9uZW50UmVmOiBBZHZhbmNlZFNlbGVjdENvbXBvbmVudCA9IG1vZGFsUmVmLmNvbnRlbnQ7XG4gICAgICAgIGNvbXBvbmVudFJlZi5kaXNtaXNzLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHJlc29sdmUoe1xuICAgICAgICAgICAgcmVzdWx0OiByZXN1bHQsXG4gICAgICAgICAgICBpdGVtczogKGNvbXBvbmVudFJlZi5hZHZhbmNlZFRhYmxlICYmIGNvbXBvbmVudFJlZi5hZHZhbmNlZFRhYmxlLnNlbGVjdGVkKSBhcyBhbnlbXVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICByZXR1cm4gcmVqZWN0KGVycik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cbiIsImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlU25hcHNob3QsIFJlc29sdmUsIFJvdXRlclN0YXRlU25hcHNob3R9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge0h0dHBDbGllbnR9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEFkdmFuY2VkVGFibGVDb25maWd1cmF0aW9uUmVzb2x2ZXIgaW1wbGVtZW50cyBSZXNvbHZlPHN0cmluZz4ge1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgX2h0dHA6IEh0dHBDbGllbnQpIHt9XG4gICAgcmVzb2x2ZShcbiAgICAgICAgcm91dGU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QsXG4gICAgICAgIHN0YXRlOiBSb3V0ZXJTdGF0ZVNuYXBzaG90XG4gICAgKTogUHJvbWlzZTxhbnk+fGFueSB7XG4gICAgICAgIC8vIGdldCBsaXN0XG4gICAgICAgIGNvbnN0IGxpc3QgPSByb3V0ZS5kYXRhLmxpc3QgfHwgcm91dGUucGFyYW1zLmxpc3Q7XG4gICAgICAgIC8vIGdldCBtb2RlbFxuICAgICAgICBjb25zdCBtb2RlbCA9IHJvdXRlLmRhdGEubW9kZWwgfHwgcm91dGUucGFyYW1zLm1vZGVsO1xuICAgICAgICAvLyBnZXQgY29uZmlndXJhdGlvblxuICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5nZXQoYGFzc2V0cy9saXN0cy8ke21vZGVsfS8ke2xpc3R9Lmpzb25gKS50b1Byb21pc2UoKTtcbiAgICB9XG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBBZHZhbmNlZFNlYXJjaENvbmZpZ3VyYXRpb25SZXNvbHZlciBpbXBsZW1lbnRzIFJlc29sdmU8c3RyaW5nPiB7XG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBfaHR0cDogSHR0cENsaWVudCkge31cbiAgICByZXNvbHZlKFxuICAgICAgICByb3V0ZTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCxcbiAgICAgICAgc3RhdGU6IFJvdXRlclN0YXRlU25hcHNob3RcbiAgICApOiBQcm9taXNlPGFueT58YW55IHtcbiAgICAgICAgLy8gZ2V0IGxpc3RcbiAgICAgICAgY29uc3QgbGlzdCA9IHJvdXRlLmRhdGEubGlzdCB8fCByb3V0ZS5wYXJhbXMubGlzdDtcbiAgICAgICAgLy8gZ2V0IG1vZGVsXG4gICAgICAgIGNvbnN0IG1vZGVsID0gcm91dGUuZGF0YS5tb2RlbCB8fCByb3V0ZS5wYXJhbXMubW9kZWw7XG4gICAgICAgIC8vIGdldCBjb25maWd1cmF0aW9uXG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwLmdldChgYXNzZXRzL2xpc3RzLyR7bW9kZWx9L3NlYXJjaC4ke2xpc3R9Lmpzb25gKS50b1Byb21pc2UoKTtcbiAgICB9XG59XG4iLCJpbXBvcnQge1xyXG4gIEFmdGVyVmlld0luaXQsXHJcbiAgQ29tcG9uZW50LFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgSW5wdXQsXHJcbiAgT25Jbml0LFxyXG4gIFRlbXBsYXRlUmVmLFxyXG4gIFZpZXdDaGlsZCxcclxuICBWaWV3RW5jYXBzdWxhdGlvblxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBZHZhbmNlZFRhYmxlQ29tcG9uZW50IH0gZnJvbSAnLi9hZHZhbmNlZC10YWJsZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IEFuZ3VsYXJEYXRhQ29udGV4dCB9IGZyb20gJ0B0aGVtb3N0L2FuZ3VsYXInO1xyXG5pbXBvcnQgeyBCc01vZGFsU2VydmljZSwgQnNNb2RhbFJlZiB9IGZyb20gJ25neC1ib290c3RyYXAvbW9kYWwnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRUYWJsZVNlcnZpY2UgfSBmcm9tICcuLi8uLi90YWJsZXMuYWN0aXZhdGVkLXRhYmxlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBVc2VyU3RvcmFnZVNlcnZpY2UgfSBmcm9tICdAdW5pdmVyc2lzL2NvbW1vbic7XHJcbmltcG9ydCB7IEZvcm1BcnJheSwgRm9ybUJ1aWxkZXIsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFZhbGlkYXRvckZuIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmNvbXBvbmVudC1zZWxlY3RvclxyXG4gIHNlbGVjdG9yOiAnYXBwLWFkdmFuY2VkLXRhYmxlLXNldHRpbmdzJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vYWR2YW5jZWQtdGFibGUtc2V0dGluZ3MuY29tcG9uZW50Lmh0bWwnLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcclxufSlcclxuXHJcbmV4cG9ydCBjbGFzcyBBZHZhbmNlZFRhYmxlU2V0dGluZ3NDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xyXG5cclxuICBASW5wdXQoKSB0YWJsZT86IEFkdmFuY2VkVGFibGVDb21wb25lbnQ7XHJcbiAgQFZpZXdDaGlsZCgnbW9kYWxfc2V0dGluZ3NfdGVtcGxhdGUnKSBtb2RhbF9zZXR0aW5nc190ZW1wbGF0ZT86IEVsZW1lbnRSZWY7XHJcbiAgbW9kYWxSZWY/OiBCc01vZGFsUmVmO1xyXG4gIHN0b3JhZ2VLZXk6IGFueTtcclxuICBwYXJhbXM6IGFueSA9IHRoaXMuX2FjdGl2YXRlZFJvdXRlLnBhcmFtcztcclxuICBwcml2YXRlIHNhdmVkVGFibGVTZXR0aW5nczogYW55O1xyXG4gIGZvcm0/OiBGb3JtR3JvdXA7XHJcbiAgY29sdW1uczogYW55W10gPSBbXTtcclxuICB0YWJsZUNvbHVtbnM6IGFueTtcclxuICBhY3RpdmVUYWJsZUNvbmZpZzogYW55O1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgX2NvbnRleHQ6IEFuZ3VsYXJEYXRhQ29udGV4dCxcclxuICAgICAgICAgICAgICBwcm90ZWN0ZWQgX2FjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgICAgICAgICAgICBwcml2YXRlIG1vZGFsU2VydmljZTogQnNNb2RhbFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgcHJpdmF0ZSB1c2VyU3RvcmFnZTogVXNlclN0b3JhZ2VTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxyXG4gICAgICAgICAgICAgIHByaXZhdGUgX2FjdGl2YXRlZFRhYmxlOiBBY3RpdmF0ZWRUYWJsZVNlcnZpY2UpIHtcclxuICB9XHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgfVxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuYWN0aXZlVGFibGVDb25maWcgPSB0aGlzLl9hY3RpdmF0ZWRUYWJsZS5hY3RpdmVUYWJsZSAmJiB0aGlzLl9hY3RpdmF0ZWRUYWJsZS5hY3RpdmVUYWJsZS5nZXRDb25maWcoKTtcclxuICAgIHRoaXMuc3RvcmFnZUtleSA9ICdyZWdpc3RyYXIvc2V0dGluZ3MvJyArIHRoaXMuYWN0aXZlVGFibGVDb25maWcudGl0bGUgKyAnL3RhYmxlL2NvbHVtbnMnO1xyXG4gICAgdGhpcy5mb3JtID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7Y29sdW1uczogbmV3IEZvcm1BcnJheShbXSwgdGhpcy5taW5TZWxlY3RlZENvbHVtbnMoMSkpfSk7XHJcbiAgICB0aGlzLnVzZXJTdG9yYWdlLmdldEl0ZW0odGhpcy5zdG9yYWdlS2V5KS50aGVuKChkYXRhKSA9PiB7XHJcbiAgICAgIGlmIChkYXRhKSB7XHJcbiAgICAgICAgdGhpcy5zYXZlZFRhYmxlU2V0dGluZ3MgPSBkYXRhLnZhbHVlO1xyXG4gICAgICAgIGlmICh0aGlzLnNhdmVkVGFibGVTZXR0aW5ncykge1xyXG4gICAgICAgICAgaWYgKHRoaXMuX2FjdGl2YXRlZFRhYmxlLmFjdGl2ZVRhYmxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2FjdGl2YXRlZFRhYmxlLmFjdGl2ZVRhYmxlLmhhbmRsZUNvbHVtbnModGhpcy5zYXZlZFRhYmxlU2V0dGluZ3MpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmFkZENoZWNrYm94ZXMoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIHByaXZhdGUgYWRkQ2hlY2tib3hlcygpIHtcclxuICAgIHRoaXMudGFibGVDb2x1bW5zID0gdGhpcy5hY3RpdmVUYWJsZUNvbmZpZy5jb2x1bW5zLnNsaWNlKDEpO1xyXG4gICAgdGhpcy50YWJsZUNvbHVtbnMuZm9yRWFjaCAoKGNvbHVtbiwgaSkgPT4ge1xyXG4gICAgICBpZiAoIWNvbHVtbi5oaWRkZW4pIHtcclxuICAgICAgICBjb25zdCBjb250cm9sID0ge1xyXG4gICAgICAgICAgaWQ6IGNvbHVtbi5uYW1lLFxyXG4gICAgICAgICAgbmFtZTogY29sdW1uLnRpdGxlXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmNvbHVtbnMucHVzaChjb250cm9sKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBpZiAodGhpcy5zYXZlZFRhYmxlU2V0dGluZ3MpIHtcclxuICAgICAgdGhpcy5jb2x1bW5zLmZvckVhY2ggKChjb2x1bW4sIGkpID0+IHtcclxuICAgICAgICBjb2x1bW4uY2hlY2sgPSBmYWxzZTtcclxuICAgICAgICBjb2x1bW4uY2hlY2sgPSB0aGlzLnNhdmVkVGFibGVTZXR0aW5ncy5pbmNsdWRlcyhjb2x1bW4uaWQpO1xyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5jb2x1bW5zLm1hcCgoY29sdW1uLCBpKSA9PiB7XHJcbiAgICAgICAgY29uc3QgY29udHJvbCA9IG5ldyBGb3JtQ29udHJvbChjb2x1bW4uY2hlY2spO1xyXG4gICAgICAgIGlmICh0aGlzLmZvcm0pIHtcclxuICAgICAgICAgICh0aGlzLmZvcm0uY29udHJvbHMuY29sdW1ucyBhcyBGb3JtQXJyYXkpLnB1c2goY29udHJvbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9wZW5UYWJsZVNldHRpbmdzKHRhYmxlX3NldHRpbmdzX21vZGFsOiBUZW1wbGF0ZVJlZjxhbnk+KSB7XHJcbiAgICB0aGlzLm1vZGFsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uuc2hvdyh0YWJsZV9zZXR0aW5nc19tb2RhbCk7XHJcbiAgfVxyXG5cclxuICBzYXZlVGFibGVTZXR0aW5ncygpIHtcclxuICAgIGlmICh0aGlzLmZvcm0gPT0gbnVsbCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBzZWxlY3RlZENvbHVtbnNJZHMgPSB0aGlzLmZvcm0udmFsdWUuY29sdW1uc1xyXG4gICAgICAubWFwKCh2LCBpKSA9PiB2ID8gdGhpcy5jb2x1bW5zW2ldLmlkIDogbnVsbClcclxuICAgICAgLmZpbHRlcih2ID0+IHYgIT09IG51bGwpO1xyXG4gICAgdGhpcy51c2VyU3RvcmFnZS5zZXRJdGVtKHRoaXMuc3RvcmFnZUtleSwgc2VsZWN0ZWRDb2x1bW5zSWRzKTtcclxuICAgIGlmICh0aGlzLl9hY3RpdmF0ZWRUYWJsZS5hY3RpdmVUYWJsZSkge1xyXG4gICAgICB0aGlzLl9hY3RpdmF0ZWRUYWJsZS5hY3RpdmVUYWJsZS5oYW5kbGVDb2x1bW5zKHNlbGVjdGVkQ29sdW1uc0lkcyk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5tb2RhbFJlZikge1xyXG4gICAgICB0aGlzLm1vZGFsUmVmLmhpZGUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRpc21pc3MoKSB7XHJcbiAgICBpZiAodGhpcy5tb2RhbFJlZikge1xyXG4gICAgICB0aGlzLm1vZGFsUmVmLmhpZGUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG1pblNlbGVjdGVkQ29sdW1ucyhtaW4gPSAxKSB7XHJcbiAgICBjb25zdCB2YWxpZGF0b3I6IFZhbGlkYXRvckZuID0gKGZvcm1BcnJheTogRm9ybUFycmF5KSA9PiB7XHJcbiAgICAgIGNvbnN0IHRvdGFsU2VsZWN0ZWQgPSBmb3JtQXJyYXkuY29udHJvbHNcclxuICAgICAgICAubWFwKGNvbnRyb2wgPT4gY29udHJvbC52YWx1ZSlcclxuICAgICAgICAucmVkdWNlKChwcmV2LCBuZXh0KSA9PiBuZXh0ID8gcHJldiArIG5leHQgOiBwcmV2LCAwKTtcclxuXHJcbiAgICAgIHJldHVybiB0b3RhbFNlbGVjdGVkID49IG1pbiA/IG51bGwgOiB7IHJlcXVpcmVkOiB0cnVlIH07XHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiB2YWxpZGF0b3I7XHJcbiAgfVxyXG59XHJcbiIsImltcG9ydCB7Q29tcG9uZW50LCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sIEV2ZW50RW1pdHRlciwgQWZ0ZXJWaWV3SW5pdCwgVGVtcGxhdGVSZWYsIE9uRGVzdHJveX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBZHZhbmNlZFRhYmxlQ29tcG9uZW50IH0gZnJvbSAnLi9hZHZhbmNlZC10YWJsZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBBbmd1bGFyRGF0YUNvbnRleHQgfSBmcm9tICdAdGhlbW9zdC9hbmd1bGFyJztcbmltcG9ydCB7IERhdGVQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFVzZXJTdG9yYWdlU2VydmljZSwgTW9kYWxTZXJ2aWNlLCBESUFMT0dfQlVUVE9OUyB9IGZyb20gJ0B1bml2ZXJzaXMvY29tbW9uJztcbmltcG9ydCB7IEJzTW9kYWxTZXJ2aWNlLCBCc01vZGFsUmVmIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9tb2RhbCc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge0FkdmFuY2VkRmlsdGVyVmFsdWVQcm92aWRlcn0gZnJvbSAnLi9hZHZhbmNlZC1maWx0ZXItdmFsdWUtcHJvdmlkZXIuc2VydmljZSc7XG5pbXBvcnQgeyBBZHZhbmNlZFRhYmxlU2VhcmNoQmFzZUNvbXBvbmVudCB9IGZyb20gJy4vYWR2YW5jZWQtdGFibGUtc2VhcmNoLWJhc2UnO1xuaW1wb3J0IHtUZW1wbGF0ZVBpcGV9IGZyb20gJ0B1bml2ZXJzaXMvY29tbW9uJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgVGV4dFV0aWxzIH0gZnJvbSAnQHRoZW1vc3QvY2xpZW50JztcblxuZXhwb3J0IGludGVyZmFjZSBBZHZhbmNlZFNlYXJjaFZpZXdTdGF0dXMge1xuICBhZHZhbmNlZFZpZXc6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWR2YW5jZWRTZWFyY2hMaXN0IHtcbiAgbmFtZTogc3RyaW5nO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBjb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdhcHAtYWR2YW5jZWQtdGFibGUtc2VhcmNoJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2FkdmFuY2VkLXRhYmxlLXNlYXJjaC5jb21wb25lbnQuaHRtbCcsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG59KVxuXG5leHBvcnQgY2xhc3MgQWR2YW5jZWRUYWJsZVNlYXJjaENvbXBvbmVudCBleHRlbmRzIEFkdmFuY2VkVGFibGVTZWFyY2hCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kgIHtcblxuICBwcml2YXRlIHF1ZXJ5UGFyYW1TdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgY29uZmlnQ2hhbmdlc1N1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcbiAgQElucHV0KCkgcHVibGljIHRhYmxlPzogQWR2YW5jZWRUYWJsZUNvbXBvbmVudDtcbiAgQElucHV0KCkgcHVibGljIGNvbGxhcHNlZCA9IHRydWU7XG4gIEBJbnB1dCgpIHB1YmxpYyBhbGxvd1NhdmUgPSB0cnVlO1xuICBASW5wdXQoKSBwdWJsaWMgc2hvd01vcmUgPSB0cnVlO1xuICBASW5wdXQoKSBwdWJsaWMgbWVyZ2VRdWVyeVBhcmFtcyA9IGZhbHNlO1xuICBAVmlld0NoaWxkKCdzZWFyY2hUZXh0JykgcHVibGljIHNlYXJjaFRleHQ6IGFueTtcbiAgQE91dHB1dCgndmlld0NoYW5nZScpIHB1YmxpYyB2aWV3Q2hhbmdlOiBFdmVudEVtaXR0ZXI8QWR2YW5jZWRTZWFyY2hWaWV3U3RhdHVzPiA9IG5ldyBFdmVudEVtaXR0ZXI8QWR2YW5jZWRTZWFyY2hWaWV3U3RhdHVzPigpO1xuICBAT3V0cHV0KCdsaXN0Q2hhbmdlJykgcHVibGljIGxpc3RDaGFuZ2U6IEV2ZW50RW1pdHRlcjxBZHZhbmNlZFNlYXJjaExpc3Q+ID0gbmV3IEV2ZW50RW1pdHRlcjxBZHZhbmNlZFNlYXJjaExpc3Q+KCk7XG4gIHB1YmxpYyBzZXQgdGV4dCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMuc2VhcmNoVGV4dCkge1xuICAgICAgdGhpcy5zZWFyY2hUZXh0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0IHRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gKHRoaXMuc2VhcmNoVGV4dCAmJiB0aGlzLnNlYXJjaFRleHQubmF0aXZlRWxlbWVudCAmJiB0aGlzLnNlYXJjaFRleHQubmF0aXZlRWxlbWVudC52YWx1ZSkgYXMgc3RyaW5nO1xuICB9XG5cbiAgcHVibGljIG1vZGFsUmVmPzogQnNNb2RhbFJlZjtcbiAgcHVibGljIHN0b3JhZ2VLZXk6IGFueTtcbiAgcHVibGljIHN0b3JhZ2VWYWx1ZTogYW55O1xuICBwdWJsaWMgdXNlclNlYXJjaExpc3Q6IGFueSA9IFtdO1xuICBwdWJsaWMgc2VsZWN0ZWRMaXN0OiBhbnkgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKCBwcm90ZWN0ZWQgX2NvbnRleHQ6IEFuZ3VsYXJEYXRhQ29udGV4dCxcbiAgICAgICAgICAgICAgIHByb3RlY3RlZCBfYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgICAgICAgICAgICAgcHJvdGVjdGVkIGRhdGVQaXBlOiBEYXRlUGlwZSxcbiAgICAgICAgICAgICAgIHByaXZhdGUgX21vZGFsU2VydmljZTogQnNNb2RhbFNlcnZpY2UsXG4gICAgICAgICAgICAgICBwcml2YXRlIF91c2VyU3RvcmFnZTogVXNlclN0b3JhZ2VTZXJ2aWNlLFxuICAgICAgICAgICAgICAgcHJpdmF0ZSBfdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgICAgICAgICAgICAgcHJpdmF0ZSBfYWR2YW5jZWRTZWFyY2hWYWx1ZVByb3ZpZGVyOiBBZHZhbmNlZEZpbHRlclZhbHVlUHJvdmlkZXIsXG4gICAgICAgICAgICAgICBwcml2YXRlIF90ZW1wbGF0ZTogVGVtcGxhdGVQaXBlLFxuICAgICAgICAgICAgICAgcHJpdmF0ZSBfcm91dGVyOiBSb3V0ZXIsXG4gICAgICAgICAgICAgICBwcml2YXRlIF9tb2RhbDogTW9kYWxTZXJ2aWNlKSB7IHN1cGVyKCk7IH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudGFibGUgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmNvbmZpZ0NoYW5nZXNTdWJzY3JpcHRpb24gPSB0aGlzLnRhYmxlLmNvbmZpZ0NoYW5nZXMuc3Vic2NyaWJlKChjb25maWcpID0+IHtcbiAgICAgICAgaWYgKGNvbmZpZyA9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIGxvYWQgdXNlciBzZWFyY2hlc1xuICAgICAgICB0aGlzLmxvYWRVc2VyU2VhcmNoTGlzdCgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIC8vIGlmIHNlYXJjaCBjb21wb25lbnQgbWVyZ2VzIHF1ZXJ5IHBhcmFtc1xuICAgICAgICAgIC8vICh1c2VzIHF1ZXJ5UGFyYW1zIHRvIGFwcGx5IGZpbHRlcilcbiAgICAgICAgICBpZiAodGhpcy5tZXJnZVF1ZXJ5UGFyYW1zKSB7XG4gICAgICAgICAgICB0aGlzLnF1ZXJ5UGFyYW1TdWJzY3JpcHRpb24gPSB0aGlzLl9hY3RpdmF0ZWRSb3V0ZS5xdWVyeVBhcmFtcy5zdWJzY3JpYmUoKHF1ZXJ5UGFyYW1zKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuYXBwbHlRdWVyeVBhcmFtcyhxdWVyeVBhcmFtcyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQXBwbGllcyBxdWVyeSBnaXZlbiBieSB0aGUgcXVlcnlQYXJhbXMgb2YgdGhlIGFjdGl2YXRlZCByb3V0ZVxuICAgKiBAcGFyYW0gcXVlcnlQYXJhbXNcbiAgICovXG4gIHByaXZhdGUgYXBwbHlRdWVyeVBhcmFtcyhxdWVyeVBhcmFtczogYW55KSB7XG4gICAgaWYgKHRoaXMudGFibGUgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB0YWJsZSA9IHRoaXMudGFibGU7XG4gICAgdGhpcy5maWx0ZXIgPSB7fTtcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHF1ZXJ5UGFyYW1zLCAncScpKSB7XG4gICAgICAvLyBzZXQgY29sbGFwc2VkXG4gICAgICB0aGlzLmNvbGxhcHNlZCA9IHRydWU7XG4gICAgICAvLyBzZWFyY2ggdGV4dFxuICAgICAgdGhpcy50ZXh0ID0gcXVlcnlQYXJhbXMucTtcbiAgICAgIHJldHVybiB0YWJsZS5zZWFyY2godGhpcy50ZXh0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy50ZXh0ID0gJyc7XG4gICAgfVxuXG4gICAgbGV0IGZpbHRlclBhcmFtcyA9IE9iamVjdC5hc3NpZ24oe30sIHF1ZXJ5UGFyYW1zKTtcblxuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocXVlcnlQYXJhbXMsICdzJykpIHtcbiAgICAgIC8vIHNldCBjb2xsYXBzZWRcbiAgICAgIHRoaXMuY29sbGFwc2VkID0gZmFsc2U7XG4gICAgICAvLyBmaW5kIHVzZXIgc2VhcmNoIGJ5IG5hbWVcbiAgICAgIGlmICh0aGlzLnVzZXJTZWFyY2hMaXN0KSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRMaXN0ID0gdGhpcy51c2VyU2VhcmNoTGlzdC5maW5kKChpdGVtKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGl0ZW0ubmFtZSA9PT0gcXVlcnlQYXJhbXMucztcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkTGlzdCkge1xuICAgICAgICAgIGZpbHRlclBhcmFtcyA9IHRoaXMuc2VsZWN0ZWRMaXN0LmZpbHRlcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdGVkTGlzdCA9IG51bGw7XG4gICAgfVxuXG4gICAgT2JqZWN0LmtleXMoZmlsdGVyUGFyYW1zKS5maWx0ZXIoKGtleSkgPT4ge1xuICAgICAgLy8gc2VhcmNoIGNyaXRlcmlhXG4gICAgICBpZiAodGFibGUuY29uZmlnICYmIHRhYmxlLmNvbmZpZy5jcml0ZXJpYSkge1xuICAgICAgICByZXR1cm4gdGFibGUuY29uZmlnLmNyaXRlcmlhLmZpbmQoKGl0ZW0pID0+IHtcbiAgICAgICAgICByZXR1cm4gaXRlbS5uYW1lID09PSBrZXk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgbGV0IHZhbHVlID0gZmlsdGVyUGFyYW1zW2tleV07XG4gICAgICBpZiAoVGV4dFV0aWxzLmlzTnVtYmVyKHZhbHVlKSkge1xuICAgICAgICB2YWx1ZSA9IHBhcnNlRmxvYXQoZmlsdGVyUGFyYW1zW2tleV0pO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuZmlsdGVyW2tleV0gIT09IHZhbHVlKSB7XG4gICAgICAgIC8vIHNldCB2YWx1ZVxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcy5maWx0ZXIsIGtleSwge1xuICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgIHZhbHVlLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmZpbHRlcltrZXldICE9IG51bGwpIHtcbiAgICAgICAgdGhpcy5jb2xsYXBzZWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIGNhbGwgZmlsdGVyQ2hhbmdlIGV2ZW50IHRvIGFwcGx5IGNoYW5nZSB0byBhZHZhbmNlZCBzZWFyY2ggY2hpbGRyZW5cbiAgICB0aGlzLmZpbHRlckNoYW5nZS5lbWl0KHRoaXMuZmlsdGVyKTtcbiAgICAvLyBhcHBseSBxdWVyeVxuICAgIHRoaXMuZ2V0UXVlcnkoKS50aGVuKChxdWVyeSkgPT4ge1xuICAgICAgLy8gaWYgdGFibGUgcXVlcnkgaXMgbnVsbFxuICAgICAgaWYgKHRhYmxlLnF1ZXJ5ID09IG51bGwpIHtcbiAgICAgICAgLy8gc2V0IHF1ZXJ5XG4gICAgICAgIHRhYmxlLnF1ZXJ5ID0gcXVlcnk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAocXVlcnkgIT0gbnVsbCAmJiBxdWVyeS5nZXRQYXJhbXMoKVsnJGZpbHRlciddKSB7XG4gICAgICAgICAgY29uc3QgcGFyYW1zID0gcXVlcnkuZ2V0UGFyYW1zKCk7XG4gICAgICAgICAgLy8gb3RoZXJ3aXNlIHNldCBmaWx0ZXIgcGFyYW1zXG4gICAgICAgICAgdGFibGUucXVlcnkuc2V0UGFyYW0oJyRmaWx0ZXInLCBwYXJhbXMuJGZpbHRlcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGFibGUucXVlcnkuc2V0UGFyYW0oJyRmaWx0ZXInLCBudWxsKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gYW5kIGZpbmFsbHkgZmV0Y2ggZGF0YVxuICAgICAgdGFibGUuZmV0Y2godHJ1ZSk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucXVlcnlQYXJhbVN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5xdWVyeVBhcmFtU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmNvbmZpZ0NoYW5nZXNTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuY29uZmlnQ2hhbmdlc1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG5cbiAgfVxuXG4gIHB1YmxpYyBvblNlYXJjaEtleURvd24oZXZlbnQ6IGFueSkge1xuICAgIGlmICh0aGlzLnRhYmxlICYmIGV2ZW50LmtleUNvZGUgPT09IDEzKSB7XG4gICAgICAvLyBnZXQgc2VhcmNoIHRleHRcbiAgICAgIGNvbnN0IHNlYXJjaFRleHQgPSAoIGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZTtcbiAgICAgIC8vIG1lcmdlIHF1ZXJ5IHBhcmFtcyA/XG4gICAgICBpZiAodGhpcy5tZXJnZVF1ZXJ5UGFyYW1zKSB7XG4gICAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0ge1xuICAgICAgICAgIHE6IHNlYXJjaFRleHQsXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0aGlzLnRhYmxlLmNvbmZpZyAmJiB0aGlzLnRhYmxlLmNvbmZpZy5jcml0ZXJpYSkge1xuICAgICAgICAgIHRoaXMudGFibGUuY29uZmlnLmNyaXRlcmlhLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShxdWVyeVBhcmFtcywgaXRlbS5uYW1lLCB7XG4gICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgdmFsdWU6IG51bGwsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIHRyeSB0byBhcHBseSBmaWx0ZXIgYnkgYXBwZW5kaW5nIHF1ZXJ5IHBhcmFtc1xuICAgICAgICByZXR1cm4gdGhpcy5fcm91dGVyLm5hdmlnYXRlKFtdLCB7XG4gICAgICAgICAgcmVsYXRpdmVUbzogdGhpcy5fYWN0aXZhdGVkUm91dGUsXG4gICAgICAgICAgcXVlcnlQYXJhbXMsXG4gICAgICAgICAgcXVlcnlQYXJhbXNIYW5kbGluZzogJ21lcmdlJyxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICB0aGlzLmZpbHRlckNoYW5nZS5lbWl0KHtcbiAgICAgICAgcTogc2VhcmNoVGV4dFxuICAgICAgfSk7XG4gICAgICAvLyBvdGhlcndpc2UgZG8gc2VhcmNoXG4gICAgICB0aGlzLnRhYmxlLnNlYXJjaChzZWFyY2hUZXh0KTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgdHJhbnNmb3JtRGF0ZShkYXRlKSB7XG4gICAgZGF0ZSA9IHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGRhdGUsICdNTS9kZC95eXl5Jyk7IC8vIHdoYXRldmVyIGZvcm1hdCB5b3UgbmVlZC5cbiAgICByZXR1cm4gZGF0ZTtcbiAgfVxuXG4gIHB1YmxpYyBjb252ZXJ0VG9TdHJpbmcobmFtZUZpbHRlcikge1xuICAgIGxldCBuYW1lID0gJyc7XG4gICAgaWYgKG5hbWVGaWx0ZXIgIT0gbnVsbCkge1xuICAgICAgbmFtZSA9IG5hbWVGaWx0ZXIudG9TdHJpbmcoKTtcbiAgICB9XG4gICAgcmV0dXJuIG5hbWU7XG4gIH1cblxuLy8gIExvYWQgc2F2ZWQgY3JpdGVyaWEgc2VhcmNoZXMgdXNlciBoYXMgc3RvcmVkIGJlZm9yZVxuICBwcml2YXRlIGxvYWRVc2VyU2VhcmNoTGlzdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy50YWJsZSA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfVxuICAgIHRoaXMuc3RvcmFnZUtleSA9ICd0YWJsZXMvJyArIHRoaXMudGFibGUuY29uZmlnLm1vZGVsICsgJy9zZWFyY2hlcyc7XG4gICAgcmV0dXJuIHRoaXMuX3VzZXJTdG9yYWdlLmdldEl0ZW0odGhpcy5zdG9yYWdlS2V5KS50aGVuKChkYXRhKSA9PiB7XG4gICAgICBjb25zdCBsaXN0ID0gZGF0YS52YWx1ZSB8fCBbXTtcbiAgICAgIC8vIGlmIHRhYmxlIGNvbmZpZ3VyYXRpb24gaGFzIHByZS1kZWZpbmVkIHNlYXJjaGVzXG4gICAgICBpZiAodGhpcy50YWJsZSAmJiB0aGlzLnRhYmxlLmNvbmZpZy5zZWFyY2hlcyAmJiB0aGlzLnRhYmxlLmNvbmZpZy5zZWFyY2hlcy5sZW5ndGgpIHtcbiAgICAgICAgLy8gYWRkIHByZS1kZWZpbmVkIGxpc3RzXG4gICAgICAgIGxpc3QucHVzaC5hcHBseShsaXN0LCB0aGlzLnRhYmxlLmNvbmZpZy5zZWFyY2hlcy5tYXAgKCAoeCkgPT4ge1xuICAgICAgICAgIHgucmVhZE9ubHkgPSB0cnVlOyAvLyBhcyByZWFkb25seVxuICAgICAgICAgIHgubmFtZSA9IHRoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KHgubmFtZSk7XG4gICAgICAgICAgcmV0dXJuIHg7XG4gICAgICAgIH0pKTtcbiAgICAgIH1cbiAgICAgIC8vIHNldCB1c2VyIHNlYXJjaCBsaXN0XG4gICAgICB0aGlzLnVzZXJTZWFyY2hMaXN0ID0gbGlzdDtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9KS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAvLyBETyBOT1QgVEhST1cgRVJST1JcbiAgICAgIC8vIHRvZG86IG5vdGlmeSBjb21wb25lbnQgZm9yIHRoaXMgZXJyb3IgaW4gb3JkZXIgdG8gZGlzYWJsZSBzb21lIGFjdGlvbnNcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIGdldHRpbmcgdXNlciBzZWFyY2ggbGlzdCcpO1xuICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG9uU2VsZWN0VXNlclNlYXJjaChldmVudDogYW55KTogYW55IHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZExpc3QgJiYgdGhpcy50YWJsZSkge1xuICAgICAgY29uc3QgbGlzdEZvdW5kID0gdGhpcy5zZWFyY2hJbkxpc3RCeU5hbWUodGhpcy5zZWxlY3RlZExpc3QubmFtZSk7XG4gICAgICBpZiAobGlzdEZvdW5kKSB7XG4gICAgICAgIGlmICh0aGlzLm1lcmdlUXVlcnlQYXJhbXMpIHtcbiAgICAgICAgICBjb25zdCBxdWVyeVBhcmFtcyA9IHsgcTogbnVsbCwgczogdGhpcy5zZWxlY3RlZExpc3QubmFtZSB9O1xuICAgICAgICAgIC8vIGNsZWFyIGNyaXRlcmlhIGlmIGFueVxuICAgICAgICAgIHRoaXMudGFibGUuY29uZmlnLmNyaXRlcmlhLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocXVlcnlQYXJhbXMsIGl0ZW0ubmFtZSkgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgIC8vIHNldCBudWxsIHZhbHVlXG4gICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShxdWVyeVBhcmFtcywgaXRlbS5uYW1lLCB7XG4gICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgdmFsdWU6IG51bGwsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiB0aGlzLl9yb3V0ZXIubmF2aWdhdGUoW10sIHtcbiAgICAgICAgICAgIHJlbGF0aXZlVG86IHRoaXMuX2FjdGl2YXRlZFJvdXRlLFxuICAgICAgICAgICAgcXVlcnlQYXJhbXMsXG4gICAgICAgICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nOiAnbWVyZ2UnLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRMaXN0ID0gbGlzdEZvdW5kO1xuICAgICAgICB0aGlzLmZpbHRlciA9IHRoaXMuc2VsZWN0ZWRMaXN0LmZpbHRlcjtcbiAgICAgICAgdGhpcy5maWx0ZXJDaGFuZ2UuZW1pdCh0aGlzLmZpbHRlcik7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5fcm91dGVyLm5hdmlnYXRlKFtdLCB7XG4gICAgICAgIHJlbGF0aXZlVG86IHRoaXMuX2FjdGl2YXRlZFJvdXRlLFxuICAgICAgICBxdWVyeVBhcmFtczogeyBzOiBudWxsIH0sXG4gICAgICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6ICdtZXJnZScsXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIHNlYXJjaEluTGlzdEJ5TmFtZShuYW1lOiBzdHJpbmcpOiBhbnkge1xuICAgIGlmICggQXJyYXkuaXNBcnJheSh0aGlzLnVzZXJTZWFyY2hMaXN0KSApIHtcbiAgICAgIGNvbnN0IGxpc3RGb3VuZCA9IHRoaXMudXNlclNlYXJjaExpc3QuZmluZCggKHgpID0+IHgubmFtZSA9PT0gbmFtZSk7XG4gICAgICBpZiAoIGxpc3RGb3VuZCApIHtcbiAgICAgICAgcmV0dXJuIGxpc3RGb3VuZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuLy8gIFVwZGF0ZSBsaXN0IGl0ZW0gY29udGVudHMgd2l0aCBnaXZlbiBjb250ZW50IChTZWFyY2ggYnkgb2JqZWN0IG5hbWUgcHJvcGVydHkpXG4gIHB1YmxpYyB1cGRhdGVTYXZlZFNlYXJjaExpc3RJdGVtQnlOYW1lKCBuYW1lOiBzdHJpbmcsIG5ld0l0ZW06IGFueSApIHtcbiAgICBjb25zdCBpdGVtSW5MaXN0ID0gdGhpcy51c2VyU2VhcmNoTGlzdC5maW5kKCAoeCkgPT4geC5uYW1lID09PSBuYW1lICk7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLnVzZXJTZWFyY2hMaXN0LmluZGV4T2YoaXRlbUluTGlzdCk7XG4gICAgdGhpcy51c2VyU2VhcmNoTGlzdFtpbmRleF0gPSBuZXdJdGVtO1xuICAgIHRoaXMuc2VsZWN0ZWRMaXN0ID0gdGhpcy51c2VyU2VhcmNoTGlzdFtpbmRleF07XG4gIH1cblxuLy8gIFVwZGF0ZSBsaXN0IGl0ZW0gY29udGVudHMgd2l0aCBnaXZlbiBjb250ZW50IChTZWFyY2ggYnkgb2JqZWN0KVxuICBwdWJsaWMgdXBkYXRlU2F2ZWRTZWFyY2hMaXN0SXRlbUJ5T2JqZWN0KCBpdGVtSW5MaXN0OiBhbnksIG5ld0l0ZW06IGFueSApIHtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMudXNlclNlYXJjaExpc3QuaW5kZXhPZihpdGVtSW5MaXN0KTtcbiAgICB0aGlzLnVzZXJTZWFyY2hMaXN0W2luZGV4XSA9IG5ld0l0ZW07XG4gICAgdGhpcy5zZWxlY3RlZExpc3QgPSB0aGlzLnVzZXJTZWFyY2hMaXN0W2luZGV4XTtcbiAgfVxuXG4vLyAgRGVsZXRlIGxpc3QgaXRlbSBmcm9tIGxpc3RcbiAgcHVibGljIGRlbGV0ZUl0ZW1Gcm9tU2F2ZWRTZWFyY2hMaXN0QnlPYmplY3QoIGl0ZW1Jbkxpc3Q6IGFueSkge1xuICAgIHRoaXMudXNlclNlYXJjaExpc3QgPSB0aGlzLnVzZXJTZWFyY2hMaXN0LmZpbHRlcigoaXRlbSkgPT4gaXRlbSAhPT0gaXRlbUluTGlzdCk7XG4gICAgdGhpcy5zZWxlY3RlZExpc3QgPSBudWxsO1xuICAgIHRoaXMuZmlsdGVyID0ge307XG4gICAgdGhpcy5hZHZhbmNlZFNlYXJjaCh0cnVlKTtcbiAgICB0aGlzLnVwbG9hZExpc3RPblVzZXJTdG9yYWdlKCk7XG4gIH1cblxuLy8gIFVzZXIgY2hvc2UgdG8gc2F2ZSBpdHMgYWR2YW5jZWQgZm9ybSBzZWFyY2ggY3JpdGVyaWFcbiAgcHVibGljIHNhdmVTZWFyY2goIHRlbXBsYXRlVG9Mb2FkOiBUZW1wbGF0ZVJlZjxhbnk+LCBuZXdMaXN0OiBib29sZWFuID0gdHJ1ZSkge1xuICAgIGlmICh0aGlzLnRhYmxlICYmIHRoaXMudGFibGUuY29uZmlnLm1vZGVsKSB7XG4vLyAgICAgIFNldCB0aGUgY29ycmVzcG9uZGluZyBrZXkgdG8gaXRzIGxpc3QgYW5kIHNob3cgYSBjb25maXJtYXRpb24gbW9kYWwgd2luZG93XG4gICAgICB0aGlzLnN0b3JhZ2VLZXkgPSBgdGFibGVzLyR7dGhpcy50YWJsZS5jb25maWcubW9kZWx9L3NlYXJjaGVzYDtcbiAgICAgIGlmICh0aGlzLmZpbHRlciAmJiBPYmplY3Qua2V5cyh0aGlzLmZpbHRlcikubGVuZ3RoKSB7XG4vLyAgICAgIFVzZXIgd2FudHMgdG8gc2F2ZSBhbiBleGlzdGluZyBsaXN0IGZyb20gdGhlIGRyb3Bkb3duXG4gICAgICAgIGlmICggIW5ld0xpc3QgJiYgdGhpcy5zZWxlY3RlZExpc3QgKSB7XG4gICAgICAgICAgY29uc3QgbmV3SXRlbSA9IHsgbmFtZSA6ICB0aGlzLnNlbGVjdGVkTGlzdC5uYW1lLCBmaWx0ZXIgOiB7IC4uLiB0aGlzLmZpbHRlciB9IH07XG4gICAgICAgICAgdGhpcy51cGRhdGVTYXZlZFNlYXJjaExpc3RJdGVtQnlPYmplY3QgKCB0aGlzLnNlbGVjdGVkTGlzdCwgbmV3SXRlbSApO1xuICAgICAgICAgIHRoaXMudXBsb2FkTGlzdE9uVXNlclN0b3JhZ2UoKTtcbi8vICAgICAgVXNlciB3YW50cyB0byBzYXZlIGEgbmV3IGxpc3RcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLm1vZGFsUmVmID0gdGhpcy5fbW9kYWxTZXJ2aWNlLnNob3codGVtcGxhdGVUb0xvYWQpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuLy8gICAgICAgIFVzZXIgZGlkIG5vdCBkZWZpbmUgYW55IGNyaXRlcmlhXG4gICAgICAgIHRoaXMuX21vZGFsLnNob3dXYXJuaW5nRGlhbG9nKFxuICAgICAgICAgIHRoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KCdBZHZhbmNlZFNlYXJjaC5Nb2RhbC5UaXRsZScpLFxuICAgICAgICAgIHRoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KCdBZHZhbmNlZFNlYXJjaC5Nb2RhbC5FbXB0eUNyaXRlcmlhTGlzdCcpLFxuICAgICAgICAgIERJQUxPR19CVVRUT05TLk9rKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbW9kYWwuc2hvd1dhcm5pbmdEaWFsb2coXG4gICAgICAgICAgdGhpcy5fdHJhbnNsYXRlLmluc3RhbnQoJ0FkdmFuY2VkU2VhcmNoLk1vZGFsLlRpdGxlJyksXG4gICAgICAgICAgdGhpcy5fdHJhbnNsYXRlLmluc3RhbnQoJ0FkdmFuY2VkU2VhcmNoLk1vZGFsLk5vTGlzdERlZmluZWQnKSxcbiAgICAgICAgICBESUFMT0dfQlVUVE9OUy5Payk7XG4gICAgfVxuICB9XG5cbi8vICBVc2VyIEFjY2VwdGVkID0+IFNhdmUgbGlzdCBhbmQgQ2xvc2UgbW9kYWxcbiAgcHVibGljIGNvbmZpcm1Nb2RhbCggc2F2ZUZvcm1OYW1lICk6IHZvaWQge1xuLy8gICAgbmFtZSBnaXZlbiBhbmQgbGlzdCBuYW1lIGlzIHVuaXF1ZVxuICAgIGlmICggc2F2ZUZvcm1OYW1lICYmICEodGhpcy5zZWFyY2hJbkxpc3RCeU5hbWUoc2F2ZUZvcm1OYW1lKSkgKSB7XG4gICAgICBjb25zdCBuZXdJbnNlcnRlZFZhbHVlID0geyBuYW1lIDogIHNhdmVGb3JtTmFtZSwgZmlsdGVyIDogeyAuLi4gdGhpcy5maWx0ZXIgfSB9O1xuICAgICAgaWYgKCB0aGlzLnVzZXJTZWFyY2hMaXN0ICYmIHRoaXMudXNlclNlYXJjaExpc3QubGVuZ3RoICE9PSAwICkge1xuICAgICAgICB0aGlzLnVzZXJTZWFyY2hMaXN0LnB1c2gobmV3SW5zZXJ0ZWRWYWx1ZSk7XG4gICAgICAgIHRoaXMuc3RvcmFnZVZhbHVlID0gdGhpcy51c2VyU2VhcmNoTGlzdDtcbiAgICAgICAgdGhpcy5zZWxlY3RlZExpc3QgPSBuZXdJbnNlcnRlZFZhbHVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zdG9yYWdlVmFsdWUgPSBbbmV3SW5zZXJ0ZWRWYWx1ZV07XG4gICAgICAgIHRoaXMudXNlclNlYXJjaExpc3QgPSB0aGlzLnN0b3JhZ2VWYWx1ZTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZExpc3QgPSBuZXdJbnNlcnRlZFZhbHVlO1xuICAgICAgfVxuICAgICAgdGhpcy51cGxvYWRMaXN0T25Vc2VyU3RvcmFnZSgpO1xuICAgICAgaWYgKHRoaXMubW9kYWxSZWYpIHtcbiAgICAgICAgdGhpcy5tb2RhbFJlZi5oaWRlKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICggc2F2ZUZvcm1OYW1lICYmICh0aGlzLnNlYXJjaEluTGlzdEJ5TmFtZShzYXZlRm9ybU5hbWUpKSApIHtcbi8vICAgICAgVXNlciBzaG91bGQgaW5zZXJ0IGEgZGlmZmVyZW50IG5hbWUgY2F1c2UgdGhpcyBvbmUgaXMgYWxyZWFkeSBpbiB1c2VcbiAgICAgIGFsZXJ0KHRoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KCdBZHZhbmNlZFNlYXJjaC5Nb2RhbC5UaXRsZU9uTGlzdEFscmVhZHlDcmVhdGVkJykpO1xuICAgIH0gZWxzZSB7XG4vLyAgICAgIFVzZXIgZGlkIG5vdCBpbnNlcnQgYW55IHRleHRcbiAgICAgIGFsZXJ0KHRoaXMuX3RyYW5zbGF0ZS5pbnN0YW50KCdBZHZhbmNlZFNlYXJjaC5Nb2RhbC5UaXRsZU9uVXNlckVycm9yJykpO1xuICAgIH1cbiAgfVxuXG4vLyAgVXNlciBkZWNsaW5lZCA9PiBDbG9zZSBtb2RhbFxuICBwdWJsaWMgY2xvc2VNb2RhbCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5tb2RhbFJlZikge1xuICAgICAgdGhpcy5tb2RhbFJlZi5oaWRlKCk7XG4gICAgfVxuICB9XG5cbi8vICBVcGxvYWQgdXNlcidzIGNyaXRlcmlhIG9uIFVzZXIgU3RvcmFnZVxuICBwdWJsaWMgdXBsb2FkTGlzdE9uVXNlclN0b3JhZ2UoKSB7XG4gICAgdGhpcy5fdXNlclN0b3JhZ2Uuc2V0SXRlbSh0aGlzLnN0b3JhZ2VLZXksIHRoaXMudXNlclNlYXJjaExpc3QuZmlsdGVyKCh4KSA9PiB7XG4gICAgICByZXR1cm4gIXgucmVhZE9ubHk7XG4gICAgfSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFRoaXMgbWV0aG9kIGlzIGdvaW5nIHRvIGJlIGRlcHJlY2F0ZWQuIFVzZSBzZWFyY2goKSBtZXRob2QgaW5zdGVhZC5cbiAgICogQHBhcmFtIGV2ZW50XG4gICAqL1xuICBwdWJsaWMgYXN5bmMgYXN5bmNBZHZhbmNlZFNlYXJjaChldmVudD86IGFueSkge1xuICAgIGlmICggdGhpcy50YWJsZSAmJiB0aGlzLnRhYmxlLmNvbmZpZyAmJiBBcnJheS5pc0FycmF5KHRoaXMudGFibGUuY29uZmlnLmNyaXRlcmlhKSkge1xuICAgICAgY29uc3QgcXVlcnkgPSBhd2FpdCB0aGlzLmdldFF1ZXJ5KCk7XG4gICAgICBpZiAodGhpcy5tZXJnZVF1ZXJ5UGFyYW1zKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRMaXN0ID0gbnVsbDtcbiAgICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSBPYmplY3QuYXNzaWduKHsgcTogbnVsbCwgczogbnVsbCB9LCB0aGlzLmZpbHRlcik7XG4gICAgICAgIC8vIGVudW1lcmF0ZSBjcml0ZXJpYVxuICAgICAgICB0aGlzLnRhYmxlLmNvbmZpZy5jcml0ZXJpYS5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChxdWVyeVBhcmFtcywgaXRlbS5uYW1lKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIC8vIHNldCBudWxsIHZhbHVlXG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocXVlcnlQYXJhbXMsIGl0ZW0ubmFtZSwge1xuICAgICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICB2YWx1ZTogbnVsbCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLl9yb3V0ZXIubmF2aWdhdGUoW10sIHtcbiAgICAgICAgICByZWxhdGl2ZVRvOiB0aGlzLl9hY3RpdmF0ZWRSb3V0ZSxcbiAgICAgICAgICBxdWVyeVBhcmFtcyxcbiAgICAgICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nOiAnbWVyZ2UnLFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMudGFibGUucXVlcnkgJiYgcXVlcnkgJiYgcXVlcnkuZ2V0UGFyYW1zKClbJyRmaWx0ZXInXSkge1xuICAgICAgICB0aGlzLnRhYmxlLnF1ZXJ5LnNldFBhcmFtKCckZmlsdGVyJywgcXVlcnkuZ2V0UGFyYW1zKClbJyRmaWx0ZXInXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnRhYmxlLnF1ZXJ5ID0gcXVlcnk7XG4gICAgICB9XG4gICAgICB0aGlzLmZpbHRlckNoYW5nZS5lbWl0KHRoaXMuZmlsdGVyKTtcbiAgICAgIHRoaXMudGFibGUuZmV0Y2goKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2VhcmNoKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmFzeW5jQWR2YW5jZWRTZWFyY2goKS50aGVuKCgpID0+IHtcbiAgICAgIC8vIGRvIG5vdGhpbmdcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBnZXRRdWVyeSgpIHtcbiAgICAvLyBvbiBzaW1wbGUgc2VhcmNoIHJldHVybiBudWxsXG4gICAgaWYgKHRoaXMuY29sbGFwc2VkKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKCB0aGlzLnRhYmxlICYmIHRoaXMudGFibGUuY29uZmlnICYmIEFycmF5LmlzQXJyYXkodGhpcy50YWJsZS5jb25maWcuY3JpdGVyaWEpKSB7XG4gICAgICBjb25zdCBleHByZXNzaW9uczogYW55W10gPSBbXTtcbiAgICAgIGNvbnN0IHZhbHVlcyA9IGF3YWl0IHRoaXMuX2FkdmFuY2VkU2VhcmNoVmFsdWVQcm92aWRlci5nZXRWYWx1ZXMoKTtcbiAgICAgIHRoaXMudGFibGUuY29uZmlnLmNyaXRlcmlhLmZvckVhY2goKHgpID0+IHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLmZpbHRlciwgeC5uYW1lKSkge1xuICAgICAgICAgIGNvbnN0IG5hbWVGaWx0ZXIgPSB0aGlzLmNvbnZlcnRUb1N0cmluZyh0aGlzLmZpbHRlclt4Lm5hbWVdKTtcbiAgICAgICAgICBpZiAobmFtZUZpbHRlci5pbmNsdWRlcygnR01UJykpIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld0RhdGUgPSB0aGlzLnRyYW5zZm9ybURhdGUodGhpcy5maWx0ZXJbeC5uYW1lXSk7XG4gICAgICAgICAgICBleHByZXNzaW9ucy5wdXNoKHRoaXMuX3RlbXBsYXRlLnRyYW5zZm9ybSh4LmZpbHRlciwge1xuICAgICAgICAgICAgICB2YWx1ZTogbmV3RGF0ZSxcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZmlsdGVyW3gubmFtZV0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBleHByZXNzaW9ucy5wdXNoKHRoaXMuX3RlbXBsYXRlLnRyYW5zZm9ybSh4LmZpbHRlciwgT2JqZWN0LmFzc2lnbih7XG4gICAgICAgICAgICAgIHZhbHVlOiB0aGlzLmZpbHRlclt4Lm5hbWVdLFxuICAgICAgICAgICAgfSwgdmFsdWVzKSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBsZXQgcXVlcnk7XG4gICAgICBpZiAoZXhwcmVzc2lvbnMgJiYgZXhwcmVzc2lvbnMubGVuZ3RoKSB7XG4gICAgICAgIC8vIGNyZWF0ZSBjbGllbnQgcXVlcnlcbiAgICAgICAgcXVlcnkgPSB0aGlzLl9jb250ZXh0Lm1vZGVsKHRoaXMudGFibGUuY29uZmlnLm1vZGVsKS5hc1F1ZXJ5YWJsZSgpO1xuICAgICAgICBxdWVyeS5zZXRQYXJhbSgnZmlsdGVyJywgZXhwcmVzc2lvbnMuam9pbignIGFuZCAnKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBxdWVyeSA9IHRoaXMuX2NvbnRleHQubW9kZWwodGhpcy50YWJsZS5jb25maWcubW9kZWwpLmFzUXVlcnlhYmxlKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcXVlcnk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFkdmFuY2VkU2VhcmNoKGV2ZW50OiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5hc3luY0FkdmFuY2VkU2VhcmNoKGV2ZW50KTtcbiAgfVxuXG4gIHB1YmxpYyBjbGVhcigpIHtcbiAgICBpZiAodGhpcy5tZXJnZVF1ZXJ5UGFyYW1zICYmIHRoaXMudGFibGUpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZExpc3QgPSBudWxsO1xuICAgICAgICBjb25zdCBxdWVyeVBhcmFtcyA9IHsgcTogbnVsbCwgczogbnVsbCB9O1xuICAgICAgICAvLyBlbnVtZXJhdGUgY3JpdGVyaWFcbiAgICAgICAgdGhpcy50YWJsZS5jb25maWcuY3JpdGVyaWEuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocXVlcnlQYXJhbXMsIGl0ZW0ubmFtZSkgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAvLyBzZXQgbnVsbCB2YWx1ZVxuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHF1ZXJ5UGFyYW1zLCBpdGVtLm5hbWUsIHtcbiAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgdmFsdWU6IG51bGwsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5fcm91dGVyLm5hdmlnYXRlKFtdLCB7XG4gICAgICAgICAgcmVsYXRpdmVUbzogdGhpcy5fYWN0aXZhdGVkUm91dGUsXG4gICAgICAgICAgcXVlcnlQYXJhbXMsXG4gICAgICAgICAgcXVlcnlQYXJhbXNIYW5kbGluZzogJ21lcmdlJyxcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgLy8gY2xlYXIgZmlsdGVyXG4gICAgICB0aGlzLmZpbHRlciA9IHt9O1xuICAgICAgLy8gY2xlYXIgbGlzdFxuICAgICAgdGhpcy5zZWxlY3RlZExpc3QgPSBudWxsO1xuICAgICAgLy8gcmFpc2UgZmlsdGVyIGNoYW5nZSBldmVudFxuICAgICAgdGhpcy5maWx0ZXJDaGFuZ2UuZW1pdCh0aGlzLmZpbHRlcik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHZpZXcgc3RhdGUgb2Ygc2VhcmNoIGNvbnRyb2xcbiAgICovXG4gIHB1YmxpYyBnZXQgdmlld1N0YXRlKCk6IEFkdmFuY2VkU2VhcmNoVmlld1N0YXR1cyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFkdmFuY2VkVmlldzogIXRoaXMuY29sbGFwc2VkLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogU3dpdGNoZXMgdmlldyBiZXR3ZWVuIHNpbXBsZSBhbmQgYWR2YW5jZWQgc2VhcmNoXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgdG9nZ2xlVmlldygpIHtcbiAgICB0aGlzLmNvbGxhcHNlZCA9ICF0aGlzLmNvbGxhcHNlZDtcbiAgICAvLyBlbWl0IGV2ZW50IGZvciB2aWV3IHN0YXR1cyBjaGFuZ2VcbiAgICB0aGlzLnZpZXdDaGFuZ2UuZW1pdCh0aGlzLnZpZXdTdGF0ZSk7XG4gIH1cbn1cbiIsImltcG9ydCB7XG4gIEFjdGlvbkxpbmtGb3JtYXR0ZXIsIEJ1dHRvbkZvcm1hdHRlciwgRGF0ZVRpbWVGb3JtYXR0ZXIsIExhbmd1YWdlRm9ybWF0dGVyLFxuICBMaW5rRm9ybWF0dGVyLFxuICBOZXN0ZWRQcm9wZXJ0eUZvcm1hdHRlciwgTmdDbGFzc0Zvcm1hdHRlciwgU2VsZWN0Um93Rm9ybWF0dGVyLFxuICBUZW1wbGF0ZUZvcm1hdHRlciwgVHJhbnNsYXRpb25Gb3JtYXR0ZXIsXG4gIFRydWVGYWxzZUZvcm1hdHRlciwgQWN0aW9uQnV0dG9uRm9ybWF0dGVyLCBBY3Rpb25TcGxpdEJ1dHRvbkZvcm1hdHRlcixcbn0gZnJvbSAnLi9hZHZhbmNlZC10YWJsZS5mb3JtYXR0ZXJzJztcblxuZXhwb3J0IGludGVyZmFjZSBJQWR2YW5jZWRUYWJsZUZvcm1hdHRlcnMge1xuICBBY3Rpb25MaW5rRm9ybWF0dGVyPzogQWN0aW9uTGlua0Zvcm1hdHRlcjtcbiAgQnV0dG9uRm9ybWF0dGVyPzogQnV0dG9uRm9ybWF0dGVyO1xuICBEYXRlVGltZUZvcm1hdHRlcj86IERhdGVUaW1lRm9ybWF0dGVyO1xuICBMYW5ndWFnZUZvcm1hdHRlcj86IExhbmd1YWdlRm9ybWF0dGVyO1xuICBMaW5rRm9ybWF0dGVyPzogTGlua0Zvcm1hdHRlcjtcbiAgTmVzdGVkUHJvcGVydHlGb3JtYXR0ZXI/OiBOZXN0ZWRQcm9wZXJ0eUZvcm1hdHRlcjtcbiAgTmdDbGFzc0Zvcm1hdHRlcj86IE5nQ2xhc3NGb3JtYXR0ZXI7XG4gIFNlbGVjdFJvd0Zvcm1hdHRlcj86IFNlbGVjdFJvd0Zvcm1hdHRlcjtcbiAgVGVtcGxhdGVGb3JtYXR0ZXI/OiBUZW1wbGF0ZUZvcm1hdHRlcjtcbiAgVHJhbnNsYXRpb25Gb3JtYXR0ZXI/OiBUcmFuc2xhdGlvbkZvcm1hdHRlcjtcbiAgVHJ1ZUZhbHNlRm9ybWF0dGVyPzogVHJ1ZUZhbHNlRm9ybWF0dGVyO1xuICBBY3Rpb25CdXR0b25Gb3JtYXR0ZXI/OiBBY3Rpb25CdXR0b25Gb3JtYXR0ZXI7XG4gIEFjdGlvblNwbGl0QnV0dG9uRm9ybWF0dGVyPzogQWN0aW9uU3BsaXRCdXR0b25Gb3JtYXR0ZXI7XG59XG5leHBvcnQgY29uc3QgRk9STUFUVEVSUzogSUFkdmFuY2VkVGFibGVGb3JtYXR0ZXJzID0ge1xuICAgICAgQWN0aW9uTGlua0Zvcm1hdHRlcjogbmV3IEFjdGlvbkxpbmtGb3JtYXR0ZXIoKSxcbiAgICAgIEJ1dHRvbkZvcm1hdHRlcjogbmV3IEJ1dHRvbkZvcm1hdHRlcigpLFxuICAgICAgRGF0ZVRpbWVGb3JtYXR0ZXI6IG5ldyBEYXRlVGltZUZvcm1hdHRlcigpLFxuICAgICAgTGFuZ3VhZ2VGb3JtYXR0ZXI6IG5ldyBMYW5ndWFnZUZvcm1hdHRlcigpLFxuICAgICAgTGlua0Zvcm1hdHRlcjogbmV3IExpbmtGb3JtYXR0ZXIoKSxcbiAgICAgIE5lc3RlZFByb3BlcnR5Rm9ybWF0dGVyOiBuZXcgTmVzdGVkUHJvcGVydHlGb3JtYXR0ZXIoKSxcbiAgICAgIE5nQ2xhc3NGb3JtYXR0ZXI6IG5ldyBOZ0NsYXNzRm9ybWF0dGVyKCksXG4gICAgICBTZWxlY3RSb3dGb3JtYXR0ZXI6IG5ldyBTZWxlY3RSb3dGb3JtYXR0ZXIoKSxcbiAgICAgIFRlbXBsYXRlRm9ybWF0dGVyOiBuZXcgVGVtcGxhdGVGb3JtYXR0ZXIoKSxcbiAgICAgIFRyYW5zbGF0aW9uRm9ybWF0dGVyOiBuZXcgVHJhbnNsYXRpb25Gb3JtYXR0ZXIoKSxcbiAgICAgIFRydWVGYWxzZUZvcm1hdHRlcjogbmV3IFRydWVGYWxzZUZvcm1hdHRlcigpLFxuICAgICAgQWN0aW9uQnV0dG9uRm9ybWF0dGVyOiBuZXcgQWN0aW9uQnV0dG9uRm9ybWF0dGVyKCksXG4gICAgICBBY3Rpb25TcGxpdEJ1dHRvbkZvcm1hdHRlcjogbmV3IEFjdGlvblNwbGl0QnV0dG9uRm9ybWF0dGVyKCksXG59O1xuIiwiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBPbkRlc3Ryb3ksIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWR2YW5jZWRUYWJsZUNvbXBvbmVudCwgQWR2YW5jZWRUYWJsZURhdGFSZXN1bHQgfSBmcm9tICcuLi9hZHZhbmNlZC10YWJsZS9hZHZhbmNlZC10YWJsZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbkBDb21wb25lbnQoe1xuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6Y29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAndGFibGUtc2ltcGxlLWhlYWRlci10b29scycsXG4gIHRlbXBsYXRlOiBgXG4gIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgYCxcbiAgc3R5bGVzOiBbXVxufSlcbmV4cG9ydCBjbGFzcyBTaW1wbGVIZWFkZXJUb29sc0NvbXBvbmVudCB7XG4gIC8vXG59XG5cbkBDb21wb25lbnQoe1xuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6Y29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnYXBwLXRhYmxlLXNpbXBsZS1oZWFkZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vdGFibGUtc2ltcGxlLWhlYWRlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlczogW11cbn0pXG5leHBvcnQgY2xhc3MgVGFibGVTaW1wbGVIZWFkZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgT25DaGFuZ2VzIHtcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzLnRhYmxlKSB7XG4gICAgICBpZiAoY2hhbmdlcy50YWJsZS5jdXJyZW50VmFsdWUgPT0gbnVsbCkge1xuICAgICAgICBpZiAodGhpcy5kYXRhTG9hZFN1YnNjcmlwdGlvbikge1xuICAgICAgICAgIHRoaXMuZGF0YUxvYWRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTp0cmlwbGUtZXF1YWxzXG4gICAgICBpZiAoY2hhbmdlcy50YWJsZS5jdXJyZW50VmFsdWUgIT0gY2hhbmdlcy50YWJsZS5wcmV2aW91c1ZhbHVlKSB7XG4gICAgICAgIHRoaXMuZGF0YUxvYWRTdWJzY3JpcHRpb24gPSBjaGFuZ2VzLnRhYmxlLmN1cnJlbnRWYWx1ZS5sb2FkLnN1YnNjcmliZSgoZGF0YTogQWR2YW5jZWRUYWJsZURhdGFSZXN1bHQpID0+IHtcbiAgICAgICAgICB0aGlzLnJlY29yZHNUb3RhbCA9IGRhdGEucmVjb3Jkc1RvdGFsO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGF0YUxvYWRTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuZGF0YUxvYWRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBASW5wdXQoKSB0YWJsZT86IEFkdmFuY2VkVGFibGVDb21wb25lbnQ7XG4gIHB1YmxpYyByZWNvcmRzVG90YWw/OiBudW1iZXI7XG4gIHB1YmxpYyBkYXRhTG9hZFN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcbiAgY29uc3RydWN0b3IoKSB7IH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICAvL1xuICB9XG5cbn1cbiIsImltcG9ydCB7XG4gIERpcmVjdGl2ZSwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWR2YW5jZWRUYWJsZUNvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvYWR2YW5jZWQtdGFibGUvYWR2YW5jZWQtdGFibGUuY29tcG9uZW50JztcblxuZXhwb3J0IGNsYXNzIEFkdmFuY2VkVGFibGVOb3ROdWxsRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCdBZHZhbmNlZCB0YWJsZSBjb21wb25lbnQgY2Fubm90IGJlIGVtcHR5IGF0IHRoaXMgY29udGV4dC4nKTtcbiAgfVxufVxuXG5ARGlyZWN0aXZlKFxuIHtcbiAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogZGlyZWN0aXZlLXNlbGVjdG9yXG4gICBzZWxlY3RvcjogJ1t0YWJsZUVkaXRvcl0nLFxuIH0sXG4pXG5leHBvcnQgY2xhc3MgQWR2YW5jZWRUYWJsZUVkaXRvckRpcmVjdGl2ZSB7XG5cbiAgcHVibGljIGRpcnR5ID0gZmFsc2U7XG4gIEBPdXRwdXQoKSBwdWJsaWMgZGlydHlDaGFuZ2U6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgdGFibGU6IEFkdmFuY2VkVGFibGVDb21wb25lbnQpIHtcbiAgICAvL1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCByb3dzIHRvIHRhYmxlIGFuZCBtYXJrIHRoZW0gYXMgYWRkZWQgcm93c1xuICAgKi9cbiAgcHVibGljIGFkZCguLi5hZGRJdGVtczogYW55W10pIHtcbiAgICBpZiAodGhpcy50YWJsZSA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgQWR2YW5jZWRUYWJsZU5vdE51bGxFcnJvcigpO1xuICAgIH1cbiAgICAvLyBkZWNvcmF0ZSBpdGVtc1xuICAgIGNvbnN0IGtleSA9IHRoaXMudGFibGUuY29uZmlnLmNvbHVtbnNbMF0ucHJvcGVydHkgfHwgdGhpcy50YWJsZS5jb25maWcuY29sdW1uc1swXS5uYW1lIHx8ICcnO1xuICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBhZGRJdGVtcykge1xuICAgICAgbGV0IHRyID0gdGhpcy50YWJsZS5kYXRhVGFibGUucm93cygnOmhhcyhpbnB1dFtkYXRhLWlkPVwiJyArIGVsZW1lbnRba2V5XSArICdcIl0pJykubm9kZXMoKS50byQoKTtcbiAgICAgIGlmICh0ci5oYXNDbGFzcygncmVtb3ZlZCcpKSB7XG4gICAgICAgIHRyLnRvZ2dsZUNsYXNzKCdyZW1vdmVkIHRleHQtZ3JheS00MDAgdGV4dC1kZWNvcmF0aW9uLWxpbmUtdGhyb3VnaCcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy50YWJsZS5kYXRhVGFibGUucm93cy5hZGQoW2VsZW1lbnRdKTtcbiAgICAgICAgdHIgPSB0aGlzLnRhYmxlLmRhdGFUYWJsZS5yb3dzKCc6aGFzKGlucHV0W2RhdGEtaWQ9XCInICsgZWxlbWVudFtrZXldICsgJ1wiXSknKS5ub2RlcygpLnRvJCgpO1xuICAgICAgICB0ci50b2dnbGVDbGFzcygnYWRkZWQgZm9udC13ZWlnaHQtYm9sZCB0ZXh0LXN1Y2Nlc3MnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy50YWJsZS5kYXRhVGFibGUuZHJhdygpO1xuICAgIC8vIGZpbmQgcmVtb3ZlZFxuICAgIGNvbnN0IHJlbW92ZWRMZW5ndGggPSB0aGlzLnRhYmxlLmRhdGFUYWJsZS5yb3dzKCcucmVtb3ZlZCcpWzBdLmxlbmd0aDtcbiAgICAvLyBmaW5kIGFkZGVkXG4gICAgY29uc3QgYWRkZWRMZW5ndGggPSB0aGlzLnRhYmxlLmRhdGFUYWJsZS5yb3dzKCcuYWRkZWQnKVswXS5sZW5ndGg7XG4gICAgLy8gYW5kIGVtaXQgZXZlbnRcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMudGFibGUuZGF0YVRhYmxlLnJvd3MoKS5kYXRhKCk7XG4gICAgdGhpcy50YWJsZS5sb2FkLmVtaXQoe1xuICAgICAgZGF0YTogaXRlbXMsXG4gICAgICByZWNvcmRzRmlsdGVyZWQ6IGl0ZW1zLmxlbmd0aCAtIHJlbW92ZWRMZW5ndGgsXG4gICAgICByZWNvcmRzVG90YWw6IGl0ZW1zLmxlbmd0aCAtIHJlbW92ZWRMZW5ndGgsXG4gICAgfSk7XG4gICAgdGhpcy5kaXJ0eSA9IChyZW1vdmVkTGVuZ3RoID4gMCB8fCBhZGRlZExlbmd0aCA+IDApO1xuICAgIHRoaXMuZGlydHlDaGFuZ2UuZW1pdCh0aGlzLmRpcnR5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYXJrcyByb3dzIGFzIHJlbW92ZWQgcm93c1xuICAgKi9cbiAgcHVibGljIHJlbW92ZSguLi5yZW1vdmVJdGVtczogYW55W10pIHtcbiAgICBpZiAodGhpcy50YWJsZSA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgQWR2YW5jZWRUYWJsZU5vdE51bGxFcnJvcigpO1xuICAgIH1cbiAgICAvLyBnZXQga2V5XG4gICAgY29uc3Qga2V5ID0gdGhpcy50YWJsZS5jb25maWcuY29sdW1uc1swXS5wcm9wZXJ0eSB8fCB0aGlzLnRhYmxlLmNvbmZpZy5jb2x1bW5zWzBdLm5hbWUgfHwgJyc7XG4gICAgLy8gbG9vcCBpdGVtc1xuICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiByZW1vdmVJdGVtcykge1xuICAgICAgICBjb25zdCB0ciA9IHRoaXMudGFibGUuZGF0YVRhYmxlLnJvd3MoJzpoYXMoaW5wdXRbZGF0YS1pZD1cIicgKyBlbGVtZW50W2tleV0gKyAnXCJdKScpLm5vZGVzKCkudG8kKCk7XG4gICAgICAgIC8vIGlmIHJvdyBpcyBtYXJrZWQgYXMgYWRkZWRcbiAgICAgICAgaWYgKHRyLmhhc0NsYXNzKCdhZGRlZCcpKSB7XG4gICAgICAgICAgLy8gcmVtb3ZlIHRoaXMgZGlydHkgcm93XG4gICAgICAgICAgdGhpcy50YWJsZS5kYXRhVGFibGUucm93cyh0cikucmVtb3ZlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gb3RoZXJ3aXNlIHVubWFya2VkIHJvd1xuICAgICAgICAgIHRyLnRvZ2dsZUNsYXNzKCdyZW1vdmVkIHRleHQtZ3JheS00MDAgdGV4dC1kZWNvcmF0aW9uLWxpbmUtdGhyb3VnaCcpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGNoZWNrIGlmIGl0ZW0gaXMgc2VsZWN0ZWRcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRJbmRleCA9IHRoaXMudGFibGUuc2VsZWN0ZWQuZmluZEluZGV4KChpdGVtKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGl0ZW1ba2V5XSA9PT0gZWxlbWVudFtrZXldO1xuICAgICAgICB9KTtcbiAgICAgICAgLy8gYW5kIHJlbW92ZSBpdCBmcm9tIHNlbGVjdGVkIGNvbGxlY3Rpb25cbiAgICAgICAgaWYgKHNlbGVjdGVkSW5kZXggPj0gMCkge1xuICAgICAgICAgIHRoaXMudGFibGUuc2VsZWN0ZWQuc3BsaWNlKHNlbGVjdGVkSW5kZXgsIDEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyByZS1kcmF3IHRhYmxlXG4gICAgdGhpcy50YWJsZS5kYXRhVGFibGUuZHJhdygpO1xuICAgICAgLy8gZ2V0IG51bWJlciBvZiB0YWJsZSBpdGVtc1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy50YWJsZS5kYXRhVGFibGUucm93cygpLmRhdGEoKTtcbiAgICAgIC8vIGdldCBudW1iZXIgb2YgcmVtb3ZlZCBpdGVtc1xuICAgIGNvbnN0IHJlbW92ZWRMZW5ndGggPSB0aGlzLnRhYmxlLmRhdGFUYWJsZS5yb3dzKCcucmVtb3ZlZCcpWzBdLmxlbmd0aDtcbiAgICAgIC8vIGdldCBudW1iZXIgb2YgYWRkZWQgaXRlbXNcbiAgICBjb25zdCBhZGRlZExlbmd0aCA9IHRoaXMudGFibGUuZGF0YVRhYmxlLnJvd3MoJy5hZGRlZCcpWzBdLmxlbmd0aDtcbiAgICAgIC8vIHJlZnJlc2hcbiAgICB0aGlzLnRhYmxlLmxvYWQuZW1pdCh7XG4gICAgICAgIGRhdGE6IGl0ZW1zLFxuICAgICAgICByZWNvcmRzRmlsdGVyZWQ6IGl0ZW1zLmxlbmd0aCAtIHJlbW92ZWRMZW5ndGgsXG4gICAgICAgIHJlY29yZHNUb3RhbDogaXRlbXMubGVuZ3RoIC0gcmVtb3ZlZExlbmd0aCxcbiAgICAgIH0pO1xuICAgIHRoaXMuZGlydHkgPSAocmVtb3ZlZExlbmd0aCA+IDAgfHwgYWRkZWRMZW5ndGggPiAwKTtcbiAgICB0aGlzLmRpcnR5Q2hhbmdlLmVtaXQodGhpcy5kaXJ0eSk7XG4gIH1cblxuICBwdWJsaWMgc2V0KGl0ZW1zOiBhbnlbXSkge1xuICAgIGlmICh0aGlzLnRhYmxlID09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBBZHZhbmNlZFRhYmxlTm90TnVsbEVycm9yKCk7XG4gICAgfVxuICAgIC8vIGNsZWFyIHJvd3NcbiAgICB0aGlzLnRhYmxlLnNlbGVjdGVkID0gW107XG4gICAgdGhpcy50YWJsZS5kYXRhVGFibGUuY2xlYXIoKTtcbiAgICAvLyBzZXQgaXRlbXNcbiAgICB0aGlzLnRhYmxlLmRhdGFUYWJsZS5yb3dzLmFkZChpdGVtcykuZHJhdygpO1xuICAgIHRoaXMudGFibGUubG9hZC5lbWl0KHtcbiAgICAgIGRhdGE6IGl0ZW1zLFxuICAgICAgcmVjb3Jkc0ZpbHRlcmVkOiBpdGVtcy5sZW5ndGgsXG4gICAgICByZWNvcmRzVG90YWw6IGl0ZW1zLmxlbmd0aCxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVbmRvIGNoYW5nZXNcbiAgICovXG4gIHB1YmxpYyB1bmRvKCkge1xuICAgIGlmICh0aGlzLnRhYmxlID09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBBZHZhbmNlZFRhYmxlTm90TnVsbEVycm9yKCk7XG4gICAgfVxuICAgIC8vIHJlc2V0IHJlbW92ZWQgcm93c1xuICAgIHRoaXMudGFibGUuZGF0YVRhYmxlLnJvd3MoJy5yZW1vdmVkJykubm9kZXMoKS50byQoKS50b2dnbGVDbGFzcygncmVtb3ZlZCB0ZXh0LWdyYXktNDAwIHRleHQtZGVjb3JhdGlvbi1saW5lLXRocm91Z2gnKTtcbiAgICAvLyByZW1vdmUgYWRkZWQgcm93c1xuICAgIHRoaXMudGFibGUuZGF0YVRhYmxlLnJvd3MoJy5hZGRlZCcpLnJlbW92ZSgpO1xuICAgIC8vIGNsZWFyIHNlbGVjdGVkIGl0ZW1zXG4gICAgdGhpcy50YWJsZS5zZWxlY3RlZCA9IFtdO1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy50YWJsZS5kYXRhVGFibGUucm93cygpLmRhdGEoKTtcbiAgICB0aGlzLnRhYmxlLmRhdGFUYWJsZS5kcmF3KCk7XG4gICAgdGhpcy50YWJsZS5sb2FkLmVtaXQoe1xuICAgICAgZGF0YTogaXRlbXMsXG4gICAgICByZWNvcmRzRmlsdGVyZWQ6IGl0ZW1zLmxlbmd0aCxcbiAgICAgIHJlY29yZHNUb3RhbDogaXRlbXMubGVuZ3RoLFxuICAgIH0pO1xuICAgIHRoaXMuZGlydHkgPSBmYWxzZTtcbiAgICB0aGlzLmRpcnR5Q2hhbmdlLmVtaXQodGhpcy5kaXJ0eSk7XG4gIH1cblxuICBwdWJsaWMgcm93cygpIHtcbiAgICBpZiAodGhpcy50YWJsZSA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgQWR2YW5jZWRUYWJsZU5vdE51bGxFcnJvcigpO1xuICAgIH1cbiAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLnRhYmxlLmRhdGFUYWJsZS5yb3dzKCc6bm90KC5yZW1vdmVkKScpLmRhdGEoKSk7XG4gIH1cblxufVxuIiwiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQW5ndWxhckRhdGFDb250ZXh0IH0gZnJvbSAnQHRoZW1vc3QvYW5ndWxhcic7XG5pbXBvcnQgeyBUZW1wbGF0ZVBpcGUgfSBmcm9tICdAdW5pdmVyc2lzL2NvbW1vbic7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEFkdmFuY2VkQWdncmVnYXRvclNlcnZpY2Uge1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgX2NvbnRleHQ6IEFuZ3VsYXJEYXRhQ29udGV4dCxcbiAgICBwcml2YXRlIF90ZW1wbGF0ZTogVGVtcGxhdGVQaXBlXG4gICkgeyB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEZvcm1hdHMgYW5kIGV4ZWN1dGVzIHRoZSBkYXRhIHF1ZXJ5XG4gICAqXG4gICAqIEBwYXJhbSBtb2RlbCBUaGUgdGFyZ2V0IG1vZGVsXG4gICAqIEBwYXJhbSBmaXhlZFBhcmFtcyBQYWlycyBvZiBwYXJhbWV0ZXJzIHRvIGFsd2F5cyBiZSBhcHBsaWVkXG4gICAqIEBwYXJhbSBxdWVyeVN0YXRlbWVudCBUaGUgZGVmYXVsdCBxdWVyeSB0byB1c2UgZm9yIGZldGNoaW5nIHRoZSBkYXRhIChlLmcuIGV4cGFuZHMgZXRjKVxuICAgKiBAcGFyYW0gZmlsdGVycyBBIGxpc3Qgb2YgZmlsdGVyIGV4cHJlc3Npb25zIHRvIGFwcGVuZCBhdCB0aGUgcXVlcnlcbiAgICogQHBhcmFtIHNlYXJjaFRlbXBsYXRlIFRoZSB0ZW1wbGF0ZSB0byB1c2UgZm9yIHNlYXJjaGluZyBleHByZXNzaW9uc1xuICAgKiBAcGFyYW0gc2VhcmNoVmFsdWUgVGhlIHZhbHVlIG9mIHRoZSB1c2VyIHNlYXJjaFxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgcmVzcG9uc2Ugb2YgdGhlIHF1ZXJ5IGV4ZWN1dGlvblxuICAgKi9cbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm1heC1saW5lLWxlbmd0aFxuICBhc3luYyBmZXRjaERhdGEobW9kZWw6IHN0cmluZywgZml4ZWRQYXJhbXM6IG9iamVjdCwgcXVlcnlTdGF0ZW1lbnQ6IHN0cmluZyA9ICcnLCBmaWx0ZXJzOiBzdHJpbmdbXSwgc2VhcmNoVGVtcGxhdGU/OiBzdHJpbmcsIHNlYXJjaFZhbHVlPzogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCBxdWVyeSA9IHRoaXMuX2NvbnRleHQubW9kZWwobW9kZWwpLmFzUXVlcnlhYmxlKCk7XG5cbiAgICBpZiAoIWZpeGVkUGFyYW1zIHx8IHR5cGVvZiBmaXhlZFBhcmFtcyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIGZpeGVkUGFyYW1zID0ge307XG4gICAgfVxuXG4gICAgbGV0IGZpbHRlckV4cHJlc3Npb25zOiBhbnlbXSA9IFtdO1xuXG4gICAgaWYgKGZpeGVkUGFyYW1zKSB7XG4gICAgICBmb3IgKGNvbnN0IHBhcmFtIG9mIE9iamVjdC5rZXlzKGZpeGVkUGFyYW1zKSkge1xuICAgICAgICBmaWx0ZXJFeHByZXNzaW9ucy5wdXNoKGAke3BhcmFtfSBlcSAke2ZpeGVkUGFyYW1zW3BhcmFtXX1gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZmlsdGVycyAmJiBBcnJheS5pc0FycmF5KGZpbHRlcnMpKSB7XG4gICAgICBmaWx0ZXJFeHByZXNzaW9ucyA9IFtcbiAgICAgICAgLi4uZmlsdGVyRXhwcmVzc2lvbnMsXG4gICAgICAgIC4uLmZpbHRlcnNcbiAgICAgIF07XG4gICAgfVxuXG4gICAgaWYgKHNlYXJjaFRlbXBsYXRlICYmIHNlYXJjaFZhbHVlKSB7XG4gICAgICBsZXQgZXZhbHVhdGVkU2VhcmNoO1xuICAgICAgaWYgKC9eXCIoLio/KVwiJC8udGVzdChzZWFyY2hWYWx1ZSkpIHsgLy8gdmFsaWRhdGUgc2VhcmNoIHRleHQgaW4gZG91YmxlIHF1b3Rlc1xuICAgICAgICBldmFsdWF0ZWRTZWFyY2ggPSB0aGlzLl90ZW1wbGF0ZS50cmFuc2Zvcm0oc2VhcmNoVGVtcGxhdGUsIHtcbiAgICAgICAgICAuLi5maXhlZFBhcmFtcyxcbiAgICAgICAgICB0ZXh0OiBzZWFyY2hWYWx1ZS5yZXBsYWNlKC9eXCJ8XCIkL2csICcnKVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHRyeSB0byBzcGxpdCB3b3Jkc1xuICAgICAgICBjb25zdCB3b3JkcyA9IHNlYXJjaFZhbHVlLnNwbGl0KCcgJyk7XG4gICAgICAgIC8vIGpvaW4gd29yZHMgdG8gYSBzaW5nbGUgZmlsdGVyXG4gICAgICAgIGV2YWx1YXRlZFNlYXJjaCA9IHdvcmRzLm1hcCh3b3JkID0+IHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5fdGVtcGxhdGUudHJhbnNmb3JtKHNlYXJjaFRlbXBsYXRlLCB7XG4gICAgICAgICAgICAuLi5maXhlZFBhcmFtcyxcbiAgICAgICAgICAgIHRleHQ6IHdvcmRcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSkuam9pbignIGFuZCAnKTtcblxuICAgICAgfVxuICAgICAgZmlsdGVyRXhwcmVzc2lvbnMucHVzaChldmFsdWF0ZWRTZWFyY2gpO1xuICAgIH1cblxuICAgIHF1ZXJ5LnNldFBhcmFtKCckZmlsdGVyJywgZmlsdGVyRXhwcmVzc2lvbnMuam9pbignYW5kJykpO1xuICAgIHJldHVybiBxdWVyeS5leHBhbmQocXVlcnlTdGF0ZW1lbnQpLnRha2UoLTEpLmdldEl0ZW1zKCk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogRm9ybWF0cyB0aGUgcmVjZWl2ZWQgZGF0YSB0byB1c2UgZmxhdCBrZXlzXG4gICAqXG4gICAqIEBwYXJhbSBjb25maWcgVGhlIGFwcGxpZWQgY29uZmlndXJhdGlvblxuICAgKiBAcGFyYW0gZGF0YSBUaGUgcmF3IGRhdGFcbiAgICpcbiAgICogQHJldHVybnMgVGhlIGZsYXQta2V5IG9iamVjdCBsaXN0XG4gICAqXG4gICAqL1xuICBmb3JtYXREYXRhKGNvbmZpZywgZGF0YSkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gZGF0YS5tYXAoKGVudHJ5KSA9PiB7XG4gICAgICAgIGlmIChlbnRyeS5zdWJpdGVtcyAmJiBBcnJheS5pc0FycmF5KGVudHJ5LnN1Yml0ZW1zKSkge1xuICAgICAgICAgIGVudHJ5LnN1Yml0ZW1zID0gdGhpcy5mb3JtYXREYXRhKGNvbmZpZywgZW50cnkuc3ViaXRlbXMpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGVudHJ5T2JqZWN0ID0ge30gYXMgYW55O1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbmZpZy5jb2x1bW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgY29uc3Qga2V5cyA9IGNvbmZpZy5jb2x1bW5zW2ldLm5hbWUuc3BsaXQoJy8nKTtcbiAgICAgICAgICBsZXQgaGVscGVyT2JqZWN0ID0gZW50cnlba2V5c1swXV07XG5cbiAgICAgICAgICBpZiAoaGVscGVyT2JqZWN0ICYmIGtleXMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLXNoYWRvd2VkLXZhcmlhYmxlXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgaWYgKGhlbHBlck9iamVjdCA9PT0gdW5kZWZpbmVkIHx8IGhlbHBlck9iamVjdCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGhlbHBlck9iamVjdCA9IGhlbHBlck9iamVjdFtrZXlzW2ldXSAhPT0gdW5kZWZpbmVkICYmIGhlbHBlck9iamVjdFtrZXlzW2ldXSAhPT0gbnVsbFxuICAgICAgICAgICAgICAgICAgPyBoZWxwZXJPYmplY3Rba2V5c1tpXV1cbiAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZW50cnlPYmplY3RbY29uZmlnLmNvbHVtbnNbaV0ubmFtZV0gPSBoZWxwZXJPYmplY3Q7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZW50cnkuc3ViaXRlbXMpIHtcbiAgICAgICAgICBlbnRyeU9iamVjdC5zdWJpdGVtcyA9IGVudHJ5LnN1Yml0ZW1zO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGVudHJ5T2JqZWN0O1xuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBPbkRlc3Ryb3ksIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWR2YW5jZWRBZ2dyZWdhdG9yU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2FkdmFuY2VkLWFnZ3JlZ2F0b3IvYWR2YW5jZWQtYWdncmVnYXRvci5zZXJ2aWNlJztcbmltcG9ydCB7IEFkdmFuY2VkQWdncmVnYXRvckNvbmZpZywgQWR2YW5jZWRBZ2dyZWdhdG9yRmlsdGVycyB9IGZyb20gJy4uLy4uL2FkdmFuY2VkLWFnZ3JlZ2F0b3InO1xuaW1wb3J0IHsgTG9hZGluZ1NlcnZpY2UgfSBmcm9tICdAdW5pdmVyc2lzL2NvbW1vbic7XG5cbi8qKlxuICpcbiAqIFxuICogIEBjbGFzc2Rlc2MgQW4gYWR2YW5jZWQgbGlzdCB3aXRoIHRoZSBjYXBhYmlsaXR5IG9mIGFnZ3JlZ2F0ZSBkYXRhIGJhc2VkIG9uIGNvbmZpZ3VyYWJsZSBmaWx0ZXJzXG4gKlxuICovXG5cbkBDb21wb25lbnQoe1xuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6Y29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnYXBwLWFkdmFuY2VkLWFnZ3JlZ2F0b3InLFxuICB0ZW1wbGF0ZVVybDogJy4vYWR2YW5jZWQtYWdncmVnYXRvci5jb21wb25lbnQuaHRtbCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBBZHZhbmNlZEFnZ3JlZ2F0b3JDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cbiAgcHJpdmF0ZSBfY29uZmlnPzogQWR2YW5jZWRBZ2dyZWdhdG9yQ29uZmlnO1xuICBwcml2YXRlIF9hZ2dyZWdhdG9ycztcbiAgcHJpdmF0ZSBfcG9zdFByb2Nlc3NvcnM7XG5cbiAgcHVibGljIGJvZHk7XG4gIHB1YmxpYyBncm91cHM6IGFueVtdID0gW107XG5cbiAgQElucHV0KCdjb25maWcnKVxuICBwdWJsaWMgc2V0IGNvbmZpZyh2YWx1ZTogQWR2YW5jZWRBZ2dyZWdhdG9yQ29uZmlnKSB7XG4gICAgdGhpcy5fY29uZmlnID0gdmFsdWU7XG4gIH1cblxuICBASW5wdXQoJ2FnZ3JlZ2F0b3JzJylcbiAgcHVibGljIHNldCBhZ2dyZWdhdG9ycyh2YWx1ZSkge1xuICAgIHRoaXMuX2FnZ3JlZ2F0b3JzID0gdmFsdWU7XG4gIH1cblxuICBASW5wdXQoJ3Bvc3RQcm9jZXNzb3JzJylcbiAgcHVibGljIHNldCBwb3N0UHJvY2Vzc29ycyh2YWx1ZSkge1xuICAgIHRoaXMuX3Bvc3RQcm9jZXNzb3JzID0gdmFsdWU7XG4gIH1cblxuICBASW5wdXQoJ3BhcmFtcycpIHBhcmFtcztcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWlucHV0LXJlbmFtZVxuICBASW5wdXQoJ3NlbGVjdGVkR3JvdXBzJykgc2VsZWN0ZWRHcm91cHMkO1xuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8taW5wdXQtcmVuYW1lXG4gIEBJbnB1dCgnZmlsdGVycycpIGZpbHRlcnMkO1xuICBASW5wdXQoJ3NlYXJjaEV4cHJlc3Npb24nKSBzZWFyY2hFeHByZXNzaW9uPzogc3RyaW5nO1xuXG4gIEBPdXRwdXQoKSBldmVudEhhbmRsZXIgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgX2FkdmFuY2VkQWdncmVnYXRvclNlcnZpY2U6IEFkdmFuY2VkQWdncmVnYXRvclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBfbG9hZGluZ1NlcnZpY2U6IExvYWRpbmdTZXJ2aWNlXG4gICkgeyB9XG5cbiAgcHVibGljIGdldCBjb25maWcoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbmZpZyBhcyBBZHZhbmNlZEFnZ3JlZ2F0b3JDb25maWc7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGFnZ3JlZ2F0b3JzKCkge1xuICAgIHJldHVybiB0aGlzLl9hZ2dyZWdhdG9ycztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcG9zdFByb2Nlc3NvcnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Bvc3RQcm9jZXNzb3JzO1xuICB9XG5cbiAgYXN5bmMgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5zZWxlY3RlZEdyb3VwcyQuc3Vic2NyaWJlKChkYXRhKSA9PiB7XG4gICAgICB0aGlzLmdyb3VwcyA9IGRhdGE7XG4gICAgICB0aGlzLl9jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9KTtcblxuICAgIHRoaXMuZmlsdGVycyQuc3Vic2NyaWJlKGFzeW5jIChmaWx0ZXJzOiBBZHZhbmNlZEFnZ3JlZ2F0b3JGaWx0ZXJzKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLmZldGNoKGZpbHRlcnMpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuc2VsZWN0ZWRHcm91cHMkLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5maWx0ZXJzJC51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIFJldHJpZXZlcyB0aGUgZGF0YVxuICAgKlxuICAgKi9cbiAgYXN5bmMgZmV0Y2goZmlsdGVyczogQWR2YW5jZWRBZ2dyZWdhdG9yRmlsdGVycykge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLl9sb2FkaW5nU2VydmljZS5zaG93TG9hZGluZygpO1xuICAgICAgbGV0IGRhdGEgPSBhd2FpdCB0aGlzLl9hZHZhbmNlZEFnZ3JlZ2F0b3JTZXJ2aWNlLmZldGNoRGF0YSh0aGlzLmNvbmZpZy5tb2RlbCxcbiAgICAgICAgdGhpcy5wYXJhbXMsXG4gICAgICAgIHRoaXMuY29uZmlnLnF1ZXJ5LFxuICAgICAgICBmaWx0ZXJzLmZpbHRlcnMsXG4gICAgICAgIHRoaXMuc2VhcmNoRXhwcmVzc2lvbixcbiAgICAgICAgZmlsdGVycy50ZXh0XG4gICAgICApO1xuXG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWxpbmUtbGVuZ3RoXG4gICAgICBpZiAodGhpcy5wb3N0UHJvY2Vzc29ycyAmJiBPYmplY3Qua2V5cyh0aGlzLnBvc3RQcm9jZXNzb3JzKS5sZW5ndGggPiAwICYmIHRoaXMuY29uZmlnLnBvc3RQcm9jZXNzb3JzICYmIHRoaXMuY29uZmlnLnBvc3RQcm9jZXNzb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNvbmZpZy5wb3N0UHJvY2Vzc29ycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGRhdGEgPSBhd2FpdCB0aGlzLnBvc3RQcm9jZXNzb3JzW3RoaXMuY29uZmlnLnBvc3RQcm9jZXNzb3JzW2ldLm5hbWVdKGRhdGEpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuYm9keSA9IHRoaXMuX2FkdmFuY2VkQWdncmVnYXRvclNlcnZpY2UuZm9ybWF0RGF0YSh0aGlzLmNvbmZpZywgZGF0YSk7XG4gICAgICB0aGlzLl9jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5fbG9hZGluZ1NlcnZpY2UuaGlkZUxvYWRpbmcoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogVHJpZ2dlcnMgdGhlIGV2ZW50IGhhbmRsZXIgZXZlbnRcbiAgICpcbiAgICogQHBhcmFtIGV2ZW50IFRoZSBldmVudCBkYXRhXG4gICAqXG4gICAqL1xuICBvbkFjdGlvbkV2ZW50KGV2ZW50KSB7XG4gICAgdGhpcy5ldmVudEhhbmRsZXIuZW1pdChldmVudCk7XG4gIH1cbn1cbiIsImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRlbXBsYXRlUGlwZX0gZnJvbSAnQHVuaXZlcnNpcy9jb21tb24nO1xuXG5lbnVtIExlbmd0aHMge1xuICBYTD0gJ3hsJyxcbiAgTEc9ICdsZycsXG4gIE1EPSAnbWQnLFxuICBTTT0gJ3NtJyxcbiAgWFM9ICd4cydcbn1cblxuXG5AQ29tcG9uZW50KHtcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmNvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ2FwcC1hZHZhbmNlZC1hZ2dyZWdhdG9yLWxpc3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vYWR2YW5jZWQtYWdncmVnYXRvci1saXN0LmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBBZHZhbmNlZEFnZ3JlZ2F0b3JMaXN0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblxuICAvKipcbiAgICogQHByb3BlcnR5IHtBZHZhbmNlZEFnZ3JlZ2F0b3JDb25maWd9IGNvbmZpZyBUaGUgY29uZmlndXJhdGlvbiBvYmplY3QgdG8gdXNlXG4gICAqL1xuICBASW5wdXQoKSBjb25maWc6IGFueTtcblxuICAvKipcbiAgICogQHByb3BlcnR5IHtBcnJheTxBcnJheTxhbnk+Pn0gYm9keSBUaGUgbGlzdCBvZiBkYXRhIGVudHJpZXMgdG8gc2hvdyBhcyB0aGUgbGlzdCBib2R5XG4gICAqL1xuICBASW5wdXQoKSBib2R5O1xuXG4gIEBPdXRwdXQoKSBjbGlja0V2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX3RlbXBsYXRlOiBUZW1wbGF0ZVBpcGUpIHsgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuY29uZmlnLmNvbHVtbnMuZm9yRWFjaCh4ID0+IHtcbiAgICAgIHgubGVuZ3RoID0gT2JqZWN0LnZhbHVlcyhMZW5ndGhzKS5pbmNsdWRlcyh4Lmxlbmd0aCkgPyB0aGlzLl90ZW1wbGF0ZS50cmFuc2Zvcm0oYHNpcy0tbGlzdC1ncm91cC1pdGVtXyR7eC5sZW5ndGh9X2NvbHVtbmAsIHggKSA6XG4gICAgICAgICF4Lmxlbmd0aCA/ICdzaXMtLWxpc3QtZ3JvdXAtaXRlbV9zbV9jb2x1bW4nIDogeC5sZW5ndGggO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIFRyaWdnZXJzIHRoZSBvdXRwdXQgZXZlbnQgZW1pdHRlclxuICAgKlxuICAgKiBAcGFyYW0gdHlwZSBUaGUgdHlwZSBvZiB0aGUgZXZlbnQgYXMgaXQncyBkZWNsYXJlZCBpbiB0aGUgY29uZmlndXJhdGlvblxuICAgKiBAcGFyYW0gaXRlbSBUaGUgdmFsdWUgb2YgdGhlIGN1cnJlbnQgaXRlbVxuICAgKiB9XG4gICAqL1xuICBjYWxsQ2FsbGJhY2sodHlwZTogc3RyaW5nLCBkYXRhOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLmNsaWNrRXZlbnQuZW1pdCh7XG4gICAgICB0eXBlLFxuICAgICAgZGF0YVxuICAgIH0pO1xuICB9XG59XG4iLCJpbXBvcnQge0NvbXBvbmVudCwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBWaWV3Q2hpbGR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtSb3V0ZXJNb2RhbE9rQ2FuY2VsfSBmcm9tICdAdW5pdmVyc2lzL2NvbW1vbi9yb3V0aW5nJztcbmltcG9ydCB7QWN0aXZhdGVkUm91dGUsIFJvdXRlcn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7T2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcbmltcG9ydCB7QWR2YW5jZWRUYWJsZU1vZGFsQmFzZUNvbXBvbmVudH0gZnJvbSAnLi4vYWR2YW5jZWQtdGFibGUtbW9kYWwvYWR2YW5jZWQtdGFibGUtbW9kYWwtYmFzZS5jb21wb25lbnQnO1xuaW1wb3J0IHtBZHZhbmNlZEZvcm1Db21wb25lbnR9IGZyb20gJ0B1bml2ZXJzaXMvZm9ybXMnO1xuaW1wb3J0IHtMb2FkaW5nU2VydmljZSwgTW9kYWxTZXJ2aWNlfSBmcm9tICdAdW5pdmVyc2lzL2NvbW1vbic7XG5cbkBDb21wb25lbnQoe1xuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6Y29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnYXBwLWFkZC1pdGVtcycsXG4gIHRlbXBsYXRlVXJsOiAnLi9hZGQtaXRlbXMuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIEFkZEl0ZW1zQ29tcG9uZW50IGV4dGVuZHMgUm91dGVyTW9kYWxPa0NhbmNlbCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICBwdWJsaWMgbG9hZGluZyA9IGZhbHNlO1xuICBwdWJsaWMgbGFzdEVycm9yO1xuICBASW5wdXQoKSBleGVjdXRlPzogT2JzZXJ2YWJsZTxhbnk+O1xuICBASW5wdXQoKSBpdGVtczogQXJyYXk8YW55PiA9IFtdO1xuICBASW5wdXQoKSB0YXJnZXQ6IGFueTtcbiAgLy8gQElucHV0KCkgc2VsZWN0ZWQ6IGFueTtcbiAgQElucHV0KCkgdGFibGVDb25maWd1cmF0aW9uOiBhbnk7XG4gIEBJbnB1dCgpIGZvcm1OYW1lOiBhbnk7XG4gIEBJbnB1dCgpIG1lc3NhZ2VzOiBBcnJheTxhbnk+ID0gW107XG4gIEBWaWV3Q2hpbGQoJ2Zvcm1Db21wb25lbnQnKSBmb3JtQ29tcG9uZW50PzogQWR2YW5jZWRGb3JtQ29tcG9uZW50O1xuICBAVmlld0NoaWxkKCdzZWxlY3RDb21wb25lbnQnKSBzZWxlY3RDb21wb25lbnQ/OiBBZHZhbmNlZFRhYmxlTW9kYWxCYXNlQ29tcG9uZW50O1xuICBwcml2YXRlIGZvcm1Mb2FkU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIGZvcm1DaGFuZ2VTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgc2VsZWN0ZWRTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG5cbiAgY29uc3RydWN0b3Iocm91dGVyOiBSb3V0ZXIsXG4gICAgICAgICAgICAgIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfbW9kYWxTZXJ2aWNlOiBNb2RhbFNlcnZpY2UsXG4gICAgICAgICAgICAgIHByaXZhdGUgX2xvYWRpbmdTZXJ2aWNlOiBMb2FkaW5nU2VydmljZSkge1xuICAgIHN1cGVyKHJvdXRlciwgYWN0aXZhdGVkUm91dGUpO1xuICAgIC8vIHNldCBtb2RhbCBzaXplXG4gICAgdGhpcy5tb2RhbENsYXNzID0gJ21vZGFsLWxnJztcbiAgICB0aGlzLm9rQnV0dG9uRGlzYWJsZWQgPSB0cnVlO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgaWYgKHRoaXMuc2VsZWN0Q29tcG9uZW50ICYmIHRoaXMuc2VsZWN0Q29tcG9uZW50LmFkdmFuY2VkVGFibGUpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRTdWJzY3JpcHRpb24gPSB0aGlzLnNlbGVjdENvbXBvbmVudC5hZHZhbmNlZFRhYmxlLnNlbGVjdGVkSXRlbXMuc3Vic2NyaWJlKChpdGVtcykgPT4ge1xuICAgICAgICBpZiAodGhpcy5mb3JtTmFtZSA9PSBudWxsKSB7XG4gICAgICAgICAgdGhpcy5va0J1dHRvbkRpc2FibGVkID0gaXRlbXMubGVuZ3RoID09PSAwO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZm9ybU5hbWUgIT0gbnVsbCAmJiB0aGlzLmZvcm1Db21wb25lbnQpIHtcbiAgICAgIHRoaXMuZm9ybUNoYW5nZVN1YnNjcmlwdGlvbiA9IHRoaXMuZm9ybUNvbXBvbmVudC5mb3JtLmNoYW5nZS5zdWJzY3JpYmUoKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChldmVudCwgJ2lzVmFsaWQnKSkge1xuICAgICAgICAgIC8vIGVuYWJsZSBvciBkaXNhYmxlIGJ1dHRvbiBiYXNlZCBvbiBmb3JtIHN0YXR1c1xuICAgICAgICAgIHRoaXMub2tCdXR0b25EaXNhYmxlZCA9ICghZXZlbnQuaXNWYWxpZCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnRhcmdldCkge1xuICAgICAgY29uc3QgdGFyZ2V0ID0gdGhpcy50YXJnZXQ7XG4gICAgfVxuICB9XG5cbiAgY2FuY2VsKCk6IFByb21pc2U8YW55PiB7XG4gICAgdGhpcy5jbGVhck1lc3NhZ2VzKCk7XG4gICAgaWYgKHRoaXMubG9hZGluZykge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH1cbiAgICAvLyBjbG9zZVxuICAgIGlmICh0aGlzLl9tb2RhbFNlcnZpY2UubW9kYWxSZWYpIHtcbiAgICAgIHJldHVybiB0aGlzLl9tb2RhbFNlcnZpY2UubW9kYWxSZWYuaGlkZSgpO1xuICAgIH1cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5mb3JtTG9hZFN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5mb3JtTG9hZFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5mb3JtQ2hhbmdlU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLmZvcm1DaGFuZ2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICAgIC8vIGdldCBmb3JtIGRhdGFcbiAgcHJpdmF0ZSBleGVjdXRlU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuICAgIHB1YmxpYyBnZXQgZm9ybURhdGEoKTogYW55IHtcbiAgICAgIGlmICh0aGlzLmZvcm1Db21wb25lbnQgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5mb3JtQ29tcG9uZW50ICYmIHRoaXMuZm9ybUNvbXBvbmVudC5mb3JtLmZvcm1pby5kYXRhO1xuICAgIH1cblxuICAgIG9rKCk6IFByb21pc2U8YW55PiB7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLmNsZWFyTWVzc2FnZXMoKTtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuc2VsZWN0Q29tcG9uZW50ID09IG51bGwgfHwgdGhpcy5zZWxlY3RDb21wb25lbnQuYWR2YW5jZWRUYWJsZSA9PSBudWxsIHx8IHRoaXMuZXhlY3V0ZSA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShudWxsKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5sYXN0RXJyb3IgPSBudWxsO1xuICAgICAgICAgIC8vIHNldCBjb3Vyc2VzXG4gICAgICAgICAgdGhpcy5pdGVtcyA9IHRoaXMuc2VsZWN0Q29tcG9uZW50LmFkdmFuY2VkVGFibGUuc2VsZWN0ZWQ7XG4gICAgICAgICAgLy8gZXhlY3V0ZSBhZGRcbiAgICAgICAgICB0aGlzLmV4ZWN1dGVTdWJzY3JpcHRpb24gPSB0aGlzLmV4ZWN1dGUuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKHRoaXMuZXhlY3V0ZVN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgICB0aGlzLmV4ZWN1dGVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGNsb3NlIG1vZGFsXG4gICAgICAgICAgICBpZiAodGhpcy5fbW9kYWxTZXJ2aWNlLm1vZGFsUmVmKSB7XG4gICAgICAgICAgICAgIHRoaXMuX21vZGFsU2VydmljZS5tb2RhbFJlZi5oaWRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShudWxsKTtcbiAgICAgICAgICB9LCAoZXJyKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIC8vIGVuc3VyZSB0aGF0IGxvYWRpbmcgaXMgaGlkZGVuXG4gICAgICAgICAgICB0aGlzLl9sb2FkaW5nU2VydmljZS5oaWRlTG9hZGluZygpO1xuICAgICAgICAgICAgLy8gc2V0IGxhc3QgZXJyb3JcbiAgICAgICAgICAgIHRoaXMubGFzdEVycm9yID0gZXJyO1xuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUobnVsbCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2xvYWRpbmdTZXJ2aWNlLmhpZGVMb2FkaW5nKCk7XG4gICAgICB0aGlzLmxhc3RFcnJvciA9IGVycjtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9XG4gIH1cblxuICBvbkNoYW5nZSgkZXZlbnQ6IGFueSkge31cblxuICBjbGVhck1lc3NhZ2VzKCkge1xuICAgIHRoaXMubWVzc2FnZXMgPSBbXTtcbiAgfVxuXG4gIG9uRmlsdGVyQ2hhbmdlKGV2ZW50OiAgeyBuYW1lOiBzdHJpbmcsIGVtaXQ6IGJvb2xlYW4gfSkge31cbn1cbiIsImltcG9ydCB7IFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuLyoqXG4gKlxuICpcbiAqIEBjbGFzc2Rlc2MgR2l2ZW4gYSBsaXN0IG9mIGl0ZW1zIHJ1bnMgYSB1c2VyIGRlZmluZWQgZnVuY3Rpb24gYWdhaW5zdCB0aGF0IGxpc3RcbiAqXG4gKi9cblxuQFBpcGUoe1xuICBuYW1lOiAnY2FsbEFnZ3JlZ2F0b3InXG59KVxuZXhwb3J0IGNsYXNzIEFkdmFuY2VkQWdncmVnYXRvclBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcblxuICAvKipcbiAgICpcbiAgICogQG92ZXJyaWRlXG4gICAqXG4gICAqIEBwYXJhbSBpdGVtcyBUaGUgbGlzdCBvZiBpdGVtcyB0byBydW4gdGhlIGFnZ3JlZ2F0b3IgYWdhaW5zdFxuICAgKiBAcGFyYW0gZnVuY3Rpb25Qb29sIFRoZSBmdW5jdGlvbnMgdGhhdCBhcmUgYXZhaWxhYmxlIGZyb20gdGhlIGxpc3QgY2FsbGVyXG4gICAqIEBwYXJhbSBmdW5jdGlvbk5hbWUgVGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZFxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUgdmFsdWUgdG8gc2hvdyBhdCB0aGUgVUlcbiAgICpcbiAgICovXG4gIHRyYW5zZm9ybShpdGVtczogYW55W10sIGZ1bmN0aW9uUG9vbDogYW55LCBmdW5jdGlvbk5hbWU6IHN0cmluZyk6IGFueSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoaXRlbXMpICYmIGZ1bmN0aW9uTmFtZSAmJiBmdW5jdGlvbk5hbWUgaW4gZnVuY3Rpb25Qb29sKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb25Qb29sW2Z1bmN0aW9uTmFtZV0oaXRlbXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gJy0nO1xuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHsgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuXG4vKipcbiAqXG4gKiBcbiAqIEBjbGFzc2Rlc2MgR2l2ZW4gYSB0aXRsZSBvZiBhbiBhZ2dyZWdhdG9yIGxpc3QsIHRyYW5zbGF0ZXMgYW5kIGV2YWx1YXRlcyB0aGUgcGFyYW1ldGVyIGlmIGFueVxuICpcbiAqL1xuXG5AUGlwZSh7XG4gIG5hbWU6ICdhZ2dyZWdhdG9yTGlzdFRpdGxlJ1xufSlcbmV4cG9ydCBjbGFzcyBQYXJzZVRpdGxlUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgX3RyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2VcbiAgKSB7fVxuXG4gIC8qKlxuICAgKlxuICAgKiBAb3ZlcnJpZGVcbiAgICpcbiAgICogQHBhcmFtIHRpdGxlIFRoZSB0aXRsZSBvZiB0aGUgbGlzdFxuICAgKiBAcGFyYW0ga2V5IFRoZSBjdXJyZW50IGxpc3Qga2V5IHRoYXQgaXMgYmVpbmcgdXNlZFxuICAgKlxuICAgKi9cbiAgdHJhbnNmb3JtKHRpdGxlOiBzdHJpbmcsIGtleTogc3RyaW5nKTogYW55IHtcbiAgICBpZiAoIXRpdGxlKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChrZXkgPT09IHVuZGVmaW5lZCB8fCBrZXkgPT09IG51bGwgfHwga2V5ID09PSAndW5kZWZpbmVkJyB8fCBrZXkgPT09ICdudWxsJykge1xuICAgICAgICBrZXkgPSB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ1RhYmxlcy5Ob3REZWZpbmVkJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGl0bGUuc3BsaXQoJyAnKVxuICAgICAgICAubWFwKChwYXJ0KSA9PiB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQocGFydCkpXG4gICAgICAgIC5tYXAoKHBhcnQpID0+IHBhcnQucmVwbGFjZSgnJHtwYXJhbX0nLCBrZXkpKVxuICAgICAgICAuam9pbignICcpO1xuICAgIH1cbiAgfVxufVxuIiwiLy8gdHNsaW50OmRpc2FibGU6IHF1b3RlbWFya1xuLy8gdHNsaW50OmRpc2FibGU6IG1heC1saW5lLWxlbmd0aFxuZXhwb3J0IGNvbnN0IFRBQkxFU19FTCA9IHtcbiAgICBcIlRhYmxlc1wiOiB7XG4gICAgICAgIFwiRXhwb3J0XCI6IFwizpXOvs6xzrPPic6zzq5cIixcbiAgICAgICAgXCJNb3JlXCI6IFwizqDOtc+BzrnPg8+Dz4zPhM61z4HOsVwiLFxuICAgICAgICBcIlNlYXJjaFwiOiBcIs6Rzr3Osc62zq7PhM63z4POt1wiLFxuICAgICAgICBcIlNlYXJjaFBsYWNlaG9sZGVyXCI6IFwizpHOvc6xzrbOrs+EzrfPg863Li4uXCIsXG4gICAgICAgIFwiR3JvdXBCeVwiOiBcIs6fzrzOsc60zr/PgM6/zq/Ot8+DzrcgzrHOvc6sXCIsXG4gICAgICAgIFwiTm90RGVmaW5lZFwiOiBcIs6czrcgz4DPgc6/z4POtM65zr/Pgc65z4POvM6tzr3Ov1wiLFxuICAgICAgICBcIkRhdGFUYWJsZVwiOiB7XG4gICAgICAgICAgICBcInBhZ2luYXRlXCI6IHtcbiAgICAgICAgICAgICAgICBcImZpcnN0XCI6IFwizqDPgc+Oz4TOtyDPg861zrvOr860zrFcIixcbiAgICAgICAgICAgICAgICBcImxhc3RcIjogXCLOpM61zrvOtc+EzrHOr86xIM+DzrXOu86vzrTOsVwiLFxuICAgICAgICAgICAgICAgIFwibmV4dFwiOiBcIs6Vz4DPjM68zrXOvc63XCIsXG4gICAgICAgICAgICAgICAgXCJwcmV2aW91c1wiOiBcIs6gz4HOv863zrPOv8+NzrzOtc69zrdcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFwiaW5mb1wiOiBcIs6VzrzPhs6szr3Ouc+DzrcgX1NUQVJUXyDOrc+Jz4IgX0VORF8gzrHPgM+MIF9UT1RBTF8gzrXOs86zz4HOsc+Gzq3PglwiLFxuICAgICAgICAgICAgXCJpbmZvRW1wdHlcIjogXCLOlM61zr0gzrLPgc6tzrjOt866zrHOvSDOtc6zzrPPgc6xz4bOrc+CXCIsXG4gICAgICAgICAgICBcImxvYWRpbmdcIjogXCLOlc68z4bOrM69zrnPg863IM60zrXOtM6/zrzOrc69z4nOvS4uLlwiLFxuICAgICAgICAgICAgXCJwcm9jZXNzaW5nXCI6IFwizqDOsc+BzrHOu86xzrLOriDOtM61zrTOv868zq3Ovc+Jzr0uLi5cIixcbiAgICAgICAgICAgIFwiZW1wdHlUYWJsZVwiOiBcIs6UzrXOvSDOss+Bzq3OuM63zrrOsc69IM6xz4DOv8+EzrXOu86tz4POvM6xz4TOsS5cIlxuICAgICAgICB9LFxuICAgICAgXCJDb2x1bW5EaXNwbGF5XCI6IFwizpXPgM65zrvOv86zzq4gzpXOvM+GzqzOvc65z4POt8+CIM+Dz4TOt867z47OvVwiLFxuICAgICAgXCJDb2x1bW5EaXNwbGF5SW5mb1wiOiBcIs6Vz4DOuc67zq3Ovs+EzrUgz4TOuc+CIM+Dz4TOrs67zrXPgiDPgM6/z4UgzrjOrc67zrXPhM61IM69zrEgzrXOvM+GzrHOvc6vzrbOv869z4TOsc65LlwiLFxuICAgICAgXCJTYXZlXCI6IFwizpXPhs6xz4HOvM6/zrPOrlwiLFxuICAgICAgXCJBcHBseVwiOiBcIs6Vz4bOsc+BzrzOv86zzq5cIixcbiAgICAgIFwiQ2FuY2VsXCI6IFwizpHOus+Nz4HPic+DzrdcIixcbiAgICAgIFwiUmVjb3Jkc1BlclBhZ2VcIjogXCLOlc6zzrPPgc6xz4bOrc+CIM6xzr3OrCDPg861zrvOr860zrFcIixcbiAgICAgIFwiUGFnZUluZm9cIjogXCJ7e3N0YXJ0fX0te3tlbmR9fSDOsc+Az4wge3tyZWNvcmRzVG90YWx9fVwiLFxuICAgICAgXCJTZWFyY2hMaXN0UGxhY2Vob2xkZXJcIjogXCLOkc69zrHOts63z4TOrs+Dz4TOtSDPg8+EzrcgzrvOr8+Dz4TOsS4uLlwiLFxuICAgICAgXCJGaWx0ZXJzXCI6IFwizqbOr867z4TPgc6xXCIsXG4gICAgICBcIkFsbFwiOiBcIs6MzrvOsVwiLFxuICAgICAgICBcIkFkZEl0ZW1cIjogXCLOoM+Bzr/Pg864zq7Ous63IM+Dz4TOv865z4fOtc6vzr/PhVwiLFxuICAgICAgICBcIkVtcHR5VGFibGVUaXRsZVwiOiBcIs6UzrXOvSDOss+Bzq3OuM63zrrOsc69IM6xz4DOv8+EzrXOu86tz4POvM6xz4TOsS5cIixcbiAgICAgICAgXCJFbXB0eVRhYmxlTWVzc2FnZVwiOiBcIs6gz4HOv8+Dz4DOsc64zq7Pg8+EzrUgzr3OsSDPh8+BzrfPg865zrzOv8+Azr/Ouc6uz4POtc+EzrUgzqzOu867zrXPgiDOu86tzr7Otc65z4IgzrrOu861zrnOtM65zqwuXCIsXG4gICAgICAgIFwiUmVtb3ZlSXRlbVwiOiBcIs6UzrnOsc6zz4HOsc+Gzq4gz4PPhM6/zrnPh861zq/Ov8+FXCIsXG4gICAgICAgIFwiSXRlbXNcIjogXCLPg8+Ezr/Ouc+HzrXOr86xXCIsXG4gICAgICAgIFwiSXRlbVwiOiBcIs+Dz4TOv865z4fOtc6vzr9cIixcbiAgICAgICAgXCJBZGRJdGVtTWVzc2FnZVwiOiB7XG4gICAgICAgICAgICBcInRpdGxlXCI6IFwizqDPgc6/z4POuM6uzrrOtyDPg8+Ezr/Ouc+HzrXOr8+Jzr1cIixcbiAgICAgICAgICAgIFwib25lXCI6IFwizojOvc6xIM69zq3OvyDPg8+Ezr/Ouc+HzrXOr86/IM+Az4HOv8+Dz4TOrc64zrfOus61IM68zrUgzrXPgM65z4TPhc+Hzq/OsS5cIixcbiAgICAgICAgICAgIFwibWFueVwiOiBcInt7dmFsdWV9fSDOvc6tzrEgz4PPhM6/zrnPh861zq/OsSDPgM+Bzr/Pg8+Ezq3OuM63zrrOsc69IM68zrUgzrXPgM65z4TPhc+Hzq/OsS5cIlxuICAgICAgICAgIH0sXG4gICAgICAgIFwiUmVtb3ZlSXRlbU1lc3NhZ2VcIjoge1xuICAgICAgICAgICAgXCJ0aXRsZVwiOiBcIs6Rz4bOsc6vz4HOtc+Dzrcgz4PPhM6/zrnPh861zq/Pic69XCIsXG4gICAgICAgICAgICBcIm9uZVwiOiBcIs6Izr3OsSDPg8+Ezr/Ouc+HzrXOr86/IM6xz4bOsc65z4HOrc64zrfOus61IM68zrUgzrXPgM65z4TPhc+Hzq/OsS5cIixcbiAgICAgICAgICAgIFwibWFueVwiOiBcInt7dmFsdWV9fSDPg8+Ezr/Ouc+HzrXOr86xIM6xz4bOsc65z4HOrc64zrfOus6xzr0gzrzOtSDOtc+AzrnPhM+Fz4fOr86xLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiUmVtb3ZlSXRlbXNUaXRsZVwiOiBcIs6UzrnOsc6zz4HOsc+Gzq4gz4PPhM6/zrnPh861zq/Ov8+FXCIsXG4gICAgICAgIFwiUmVtb3ZlSXRlbXNNZXNzYWdlXCI6IFwizqDPgc+MzrrOtc65z4TOsc65IM69zrEgzrTOuc6xzrPPgc6sz4jOtc+EzrUgzq3Ovc6xIM6uIM+AzrXPgc65z4PPg8+Mz4TOtc+BzrEgz4PPhM6/zrnPh861zq/OsS4gzpjOrc67zrXPhM61IM69zrEgz4DPgc6/z4fPic+Bzq7Pg861z4TOtT9cIixcbiAgICAgICAgXCJTZWxlY3RBbGxcIjogXCLOlc+AzrnOu86/zrPOriDPjM67z4nOvVwiLFxuICAgICAgICBcIkNsZWFyU2VsZWN0aW9uXCI6IFwizpHOvc6xzq/Pgc61z4POtyDOtc+AzrnOu86/zrPOrs+CXCIsXG4gICAgICBcIkFjdGlvbnNcIjoge1xuICAgICAgICBcIkxhYmVsXCI6IFwizpXPgM61zr7Otc+BzrPOsc+Dzq/OsVwiLFxuICAgICAgICBcIlN0YXJ0XCI6IFwizojOvc6xz4HOvs63XCIsXG4gICAgICAgIFwiQWN0aW9uTWVzc2FnZVwiOiB7XG4gICAgICAgICAgXCJOb25lXCI6IFwizpTOtc69IM6tz4fOtc+EzrUgzrXPgM65zrvOrc6+zrXOuSDOus6xzr3Orc69zrEgz4PPhM6/zrnPh861zq/OvyDPgM6/z4Ugzr3OsSDOsc66zr/Ou86/z4XOuM61zq8gz4TOuc+CIM+Az4HOv8+Lz4DOv864zq3Pg861zrnPgiDPhM63z4IgzrXOvc6tz4HOs861zrnOsc+CLlwiLFxuICAgICAgICAgIFwiT25lXCI6IFwizojPh861z4TOtSDOtc+AzrnOu86tzr7Otc65IM6tzr3OsSDPg8+Ezr/Ouc+HzrXOr86/IM+Azr/PhSDOsc66zr/Ou86/z4XOuM61zq8gz4TOuc+CIM+Az4HOv8+Lz4DOv864zq3Pg861zrnPgiDPhM63z4IgzrXOvc6tz4HOs861zrnOsc+CLiDOoM6xz4TOrs+Dz4TOtSDPhM6/IM+AzrvOrs66z4TPgc6/IM6Izr3Osc+Bzr7OtyDOs865zrEgzr3OsSDOvs61zrrOuc69zq7Pg861zrkgzrcgzrTOuc6xzrTOuc66zrHPg86vzrEuXCIsXG4gICAgICAgICAgXCJNYW55XCI6IFwizojPh861z4TOtSDOtc+AzrnOu86tzr7Otc65IHt7bGVuZ3RofX0gz4PPhM6/zrnPh861zq/OsSDPgM6/z4UgzrHOus6/zrvOv8+FzrjOv8+Nzr0gz4TOuc+CIM+Az4HOv8+Lz4DOv864zq3Pg861zrnPgiDPhM63z4IgzrXOvc6tz4HOs861zrnOsc+CLiDOoM6xz4TOrs+Dz4TOtSDPhM6/IM+AzrvOrs66z4TPgc6/IM6Izr3Osc+Bzr7OtyDOs865zrEgzr3OsSDOvs61zrrOuc69zq7Pg861zrkgzrcgzrTOuc6xzrTOuc66zrHPg86vzrEuXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJDb21wbGV0ZWRXaXRoRXJyb3JzXCI6IHtcbiAgICAgICAgICBcIlRpdGxlXCI6IFwizpcgzrTOuc6xzrTOuc66zrHPg86vzrEgzr/Ou86/zrrOu863z4HPjs64zrfOus61IM68zrUgz4PPhs6szrvOvM6xz4TOsS5cIixcbiAgICAgICAgICBcIkRlc2NyaXB0aW9uXCI6IHtcbiAgICAgICAgICAgIFwiT25lXCI6IFwizojOvc6xIM+Dz4TOv865z4fOtc6vzr8gzrTOtc69IM6xzr3Osc69zrXPjs64zrfOus61IM67z4zOs8+JIM61zr3PjM+CIM+Dz4bOrM67zrzOsc+Ezr/PgiDPgM6/z4Ugz4PPhc69zq3Oss63IM66zrHPhM6sIM+EzrfOvSDOtc66z4TOrc67zrXPg863IM+EzrfPgiDOtM65zrHOtM65zrrOsc+Dzq/Osc+CLlwiLFxuICAgICAgICAgICAgXCJNYW55XCI6IFwie3tlcnJvcnN9fSDPg8+Ezr/Ouc+HzrXOr86xIM60zrXOvSDOsc69zrHOvc61z47OuM63zrrOsc69IM67z4zOs8+JIM61zr3PjM+CIM+Dz4bOrM67zrzOsc+Ezr/PgiDPgM6/z4Ugz4PPhc69zq3Oss63IM66zrHPhM6sIM+EzrfOvSDOtc66z4TOrc67zrXPg863IM+EzrfPgiDOtM65zrHOtM65zrrOsc+Dzq/Osc+CLlwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcIkNvbXBsZXRlZFdpdGhTdWNjZXNzXCI6IHtcbiAgICAgICAgICBcIlRpdGxlXCI6IFwizpcgzrTOuc6xzrTOuc66zrHPg86vzrEgzr/Ou86/zrrOu863z4HPjs64zrfOus61IM68zrUgzrXPgM65z4TPhc+Hzq/OsS5cIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJTZWxlY3RDb2x1bW5zXCI6IFwizpXPgM65zrvOv86zzq4gz4PPhM63zrvPjs69XCIsXG4gICAgICBcIk1vdmVVcFwiOiBcIs6Vz4DOrM69z4lcIixcbiAgICAgIFwiTW92ZURvd25cIjogXCLOms6sz4TPiVwiLFxuICAgICAgXCJBZGRDb2x1bW5cIjogXCLOlc+AzrnOu86/zrPOrlwiLFxuICAgICAgXCJSZW1vdmVDb2x1bW5cIjogXCLOkc+GzrHOr8+BzrXPg863XCIsXG4gICAgICBcIlNlbGVjdENvbHVtbkhlbHBcIjogXCLOlc+AzrnOu86tzr7PhM61IM68zq/OsSDOriDPgM61z4HOuc+Dz4PPjM+EzrXPgc61z4IgzrHPgM+MIM+EzrnPgiDOtM65zrHOuM6tz4POuc68zrXPgiDPg8+Ezq7Ou861z4IgzrrOsc65IM+AzrHPhM6uz4PPhM61IM+Ezr8gz4DOu86uzrrPhM+Bzr8gJ86Vz4DOuc67zr/Os86uJyDOs865zrEgzr3OsSDPhM65z4IgzrXOvM+GzrHOvc6vz4POtc+EzrUuIM6nz4HOt8+DzrnOvM6/z4DOv865zq7Pg8+EzrUgz4TOvyDPgM67zq7Ous+Ez4HOvyAnzpHPhs6xzq/Pgc61z4POtycgzrPOuc6xIM69zrEgzrHPhs6xzrnPgc6tz4POtc+EzrUgz4TOuc+CIM61z4DOuc67zrXOs868zq3Ovc61z4Igz4PPhM6uzrvOtc+CLlwiLFxuICAgICAgXCJNb3ZlQ29sdW1uSGVscFwiOiBcIs6nz4HOt8+DzrnOvM6/z4DOv865zq7Pg8+EzrUgz4TOsSDPgM67zq7Ous+Ez4HOsSAnzpXPgM6szr3PiScgzrrOsc65ICfOms6sz4TPiScgzrPOuc6xIM69zrEgzrHOu867zqzOvs61z4TOtSDPhM63zr0gz4POtc65z4HOrCDOtc68z4bOrM69zrnPg863z4Igz4TPic69IM+Dz4TOt867z47OvSDPhM6/z4Ugz4DOr869zrHOus6xLlwiLFxuICAgICAgXCJVbmtub3duQ29sdW1uXCI6IFwizobOs869z4nPg8+Ezr9cIixcbiAgICAgIFwiU2VsZWN0Q29sdW1uXCI6IFwizpXPgM65zrvOv86zzq5cIixcbiAgICAgIFwiQWN0aW9uTGlua0NvbHVtblwiOiBcIs6Vzr3Orc+BzrPOtc65zrXPglwiLFxuICAgICAgXCJEYXRhRXJyb3JcIjoge1xuICAgICAgICBcIlRpdGxlXCI6IFwizqPPhs6szrvOvM6xIM66zrHPhM6sIM+EzrfOvSDPgM6xz4HOsc67zrHOss6uIM+Ez4nOvSDOtM61zrTOv868zq3Ovc+Jzr1cIixcbiAgICAgICAgXCJNZXNzYWdlXCI6IFwizqPPhc69zq3Oss63IM+Dz4bOrM67zrzOsSDOus6xz4TOrCDPhM63zr0gz4DOsc+BzrHOu86xzrLOriDPhM+Jzr0gzrTOtc60zr/OvM6tzr3Pic69LiDOoM+Bzr/Pg8+AzrHOuM6uz4PPhM61IM6+zrHOvc6sIM6uIM+Ez4HOv8+Azr/PgM6/zrnOrs+Dz4TOtSDPhM6xIM+Dz4TOv865z4fOtc6vzrEgzrHOvc6xzrbOrs+EzrfPg863z4IuXCJcbiAgICAgIH0sXG4gICAgICBcIkV4cG9ydExpc3RcIjogXCLOlc6+zrHOs8+JzrPOriDOu86vz4PPhM6xz4JcIixcbiAgICAgIFwiRXhwb3J0TGltaXRFeGNlZWRlZFwiOiBcIs6kzr8gz4DOu86uzrjOv8+CIM+Ez4nOvSDPg8+Ezr/Ouc+HzrXOr8+Jzr0gz4DPgc6/z4IgzrXOvs6xzrPPic6zzq4gKHt7ZGF0YUxlbmd0aH19KSDOvs61z4DOtc+Bzr3OrM61zrkgz4TOvyDOvM6tzrPOuc+Dz4TOvyDOtc+AzrnPhM+BzrXPgM+Ez4wgKHt7ZXhwb3J0TGltaXR9fSkuIM6gzrHPgc6xzrrOsc67zr/Pjc68zrUgz4DPgc6/z4POsc+BzrzPjM+Dz4TOtSDPhM6xIM+Gzq/Ou8+Ez4HOsSDPhM63z4IgzrHOvc6xzrbOrs+EzrfPg863z4IgzrrOsc65IM+Az4HOv8+Dz4DOsc64zq7Pg8+EzrUgzr7Osc69zqwuXCIsXG4gICAgICBcIkV4cG9ydFJlc3VsdHNcIjogXCLOlM61zrTOv868zq3Ovc6xIM67zq/Pg8+EzrHPglwiXG4gICAgfSxcbiAgICBcIlRydWVGYWxzZVwiOiB7XG4gICAgICAgIFwibG9uZ1wiOiB7XG4gICAgICAgICAgICBcIlllc1wiOiBcIs6dzrHOuVwiLFxuICAgICAgICAgICAgXCJOb1wiOiBcIs6Mz4fOuVwiXG4gICAgICAgIH1cbiAgICB9LFxuICAgIFwiU2V0dGluZ3NcIjoge1xuICAgICAgXCJPcGVyYXRpb25Db21wbGV0ZWRcIjogXCLOlyDOtM65zrHOtM65zrrOsc+Dzq/OsSDOv867zr/Ous67zrfPgc+OzrjOt866zrUgzrzOtSDOtc+AzrnPhM+Fz4fOr86xLlwiXG4gICAgfSxcbiAgICBcIkFkdmFuY2VkU2VhcmNoXCI6IHtcbiAgICAgICAgXCJDaG9vc2VcIjogXCI8zpXPgM65zrvOrc6+z4TOtSDOvM65zrEgzrHOvc6xzrbOrs+EzrfPg863PlwiLFxuICAgICAgICBcIkNob29zZURhdGVcIjogXCLOlc+AzrnOu86/zrPOriDOt868zrXPgc6/zrzOt869zq/Osc+CXCIsXG4gICAgICAgIFwiU2F2ZWRTZWFyY2hlc1wiOiBcIs6Rz4DOv864zrfOus61z4XOvM6tzr3Otc+CIM6xzr3Osc62zrfPhM6uz4POtc65z4JcIixcbiAgICAgICAgXCJUb2dnbGVEcm9wZG93blwiIDogXCLOlc68z4bOrM69zrnPg863IM67zq/Pg8+EzrHPglwiLFxuICAgICAgICBcIlNhdmVDdXJyZW50U2VhcmNoXCI6IFwizpHPgM6/zrjOrs66zrXPhc+DzrcgzrHOvc6xzrbOrs+EzrfPg863z4JcIixcbiAgICAgICAgXCJTYXZlQXNcIiA6IFwizpHPgM6/zrjOrs66zrXPhc+Dzrcgz4nPglwiLFxuICAgICAgICBcIlNhdmVcIiA6IFwizpHPgM6/zrjOrs66zrXPhc+DzrdcIixcbiAgICAgICAgXCJEZWxldGVcIiA6IFwizpTOuc6xzrPPgc6xz4bOrlwiLFxuICAgICAgICBcIk1vcmVcIjogXCLOoM61z4HOuc+Dz4PPjM+EzrXPgc6xXCIsXG4gICAgICAgIFwiTGVzc1wiOiBcIs6bzrnOs8+Mz4TOtc+BzrFcIixcbiAgICAgICAgXCJNb2RhbFwiIDoge1xuICAgICAgICAgICAgXCJUaXRsZVwiIDogXCLOkc+Azr/OuM6uzrrOtc+Fz4POtyDOus+BzrnPhM63z4HOr8+Jzr0gzrHOvc6xzrbOrs+EzrfPg863z4JcIixcbiAgICAgICAgICAgIFwiSGVscFwiIDogXCLOn8+Bzq/Pg8+EzrUgzq3Ovc6xzr0gz4TOr8+EzrvOvyDOs865zrEgz4TOsSDOtc+AzrnOu861zrPOvM6tzr3OsSDOus+BzrnPhM6uz4HOuc6xIM6xzr3Osc62zq7PhM63z4POt8+CLiDOkc+Fz4TPjM+CIM6/IM+Ezq/PhM67zr/PgiDOuM6xIM+DzrHPgiDOss6/zrfOuM6uz4POtc65IM69zrEgz4TOsSDPh8+BzrfPg865zrzOv8+Azr/Ouc6uz4POtc+EzrUgzr7Osc69zqwgz4PPhM6/IM68zq3Ou867zr/OvS5cIixcbiAgICAgICAgICAgIFwiVGl0bGVPblVzZXJFcnJvclwiIDogXCLOoM6xz4HOsc66zrHOu8+OIM61zrnPg86szrPOtc+EzrUgzq3Ovc6xzr0gz4TOr8+EzrvOv1wiLFxuICAgICAgICAgICAgXCJUaXRsZU9uTGlzdEFscmVhZHlDcmVhdGVkXCIgOiBcIs6kzr8gz4zOvc6/zrzOsSDOsc+Fz4TPjCDPh8+BzrfPg865zrzOv8+Azr/Ouc61zq/PhM6xzrkgzq7OtM63LiDOlM65zrHOu86tzr7PhM61IM6tzr3OsSDOtM65zrHPhs6/z4HOtc+EzrnOus+MLlwiLFxuICAgICAgICAgICAgXCJOb0xpc3REZWZpbmVkXCIgOiBcIs6UzrXOvSDOrc+HzrXOuSDOv8+BzrnPg8+EzrXOryDPhM6/IM+DzrfOvM61zq/OvyDOsc+Azr/OuM6uzrrOtc+Fz4POt8+CIM+EzrfPgiDOu86vz4PPhM6xz4JcIixcbiAgICAgICAgICAgIFwiRW1wdHlDcml0ZXJpYUxpc3RcIiA6IFwizpTOtc69IM6tz4fOtc+EzrUgzrrOsc64zr/Pgc6vz4POtc65IM66zrHOvc6tzr3OsSDOus+BzrnPhM6uz4HOuc6/IM6zzrnOsSDOsc+Azr/OuM6uzrrOtc+Fz4POt1wiLFxuICAgICAgICAgICAgXCJTYXZlTmFtZUxhYmVsXCIgOiBcIs6fzr3Ov868zrHPg86vzrEgzrvOr8+Dz4TOsc+CXCIsXG4gICAgICAgICAgICBcIlNhdmVOYW1lUGxhY2Vob2xkZXJcIiA6IFwizpXOuc+DzqzOs861z4TOtSDOrc69zrHOvSDPhM6vz4TOu86/XCIsXG4gICAgICAgICAgICBcIkFjY2VwdFwiIDogXCLOkc+Azr/OuM6uzrrOtc+Fz4POt1wiLFxuICAgICAgICAgICAgXCJEZWNsaW5lXCIgOiBcIs6Rz4DPjM+Bz4HOuc+IzrdcIixcbiAgICAgICAgICAgIFwiQ2xvc2VcIiA6IFwizprOu861zq/Pg865zrzOv1wiXG4gICAgICAgIH1cbiAgICB9LFxuICAgIFwiQWRkSXRlbXNcIiA6IHtcbiAgICAgIFwiU2VsZWN0SXRlbXNcIjogXCLOlc+AzrnOu86tzr7PhM61IM+Dz4TOv865z4fOtc6vzrFcIixcbiAgICB9XG59O1xuIiwiLy8gdHNsaW50OmRpc2FibGU6IHF1b3RlbWFya1xuLy8gdHNsaW50OmRpc2FibGU6IG1heC1saW5lLWxlbmd0aFxuZXhwb3J0IGNvbnN0IFRBQkxFU19FTiA9IHtcbiAgICBcIlRhYmxlc1wiOiB7XG4gICAgICBcIkV4cG9ydFwiOiBcIkV4cG9ydFwiLFxuICAgICAgICBcIk1vcmVcIjogXCJNb3JlXCIsXG4gICAgICAgIFwiU2VhcmNoXCI6IFwiU2VhcmNoXCIsXG4gICAgICAgIFwiU2VhcmNoUGxhY2Vob2xkZXJcIjogXCJTZWFyY2guLi5cIixcbiAgICAgICAgXCJHcm91cEJ5XCI6IFwiR3JvdXAgYnlcIixcbiAgICAgICAgXCJOb3REZWZpbmVkXCI6IFwiTm90IGRlZmluZWRcIixcbiAgICAgICAgXCJEYXRhVGFibGVcIjoge1xuICAgICAgICAgICAgXCJwYWdpbmF0ZVwiOiB7XG4gICAgICAgICAgICAgICAgXCJmaXJzdFwiOiBcIkZpcnN0XCIsXG4gICAgICAgICAgICAgICAgXCJsYXN0XCI6IFwiTGFzdFwiLFxuICAgICAgICAgICAgICAgIFwibmV4dFwiOiBcIk5leHRcIixcbiAgICAgICAgICAgICAgICBcInByZXZpb3VzXCI6IFwiUHJldmlvdXNcIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFwiaW5mb1wiOiBcIlNob3dpbmcgX1NUQVJUXyB0byBfRU5EXyBvZiBfVE9UQUxfIGVudHJpZXNcIixcbiAgICAgICAgICAgIFwiaW5mb0VtcHR5XCI6IFwiU2hvd2luZyAwIHRvIDAgb2YgMCBlbnRyaWVzXCIsXG4gICAgICAgICAgICBcInByb2Nlc3NpbmdcIjogXCJQcm9jZXNzaW5nIGRhdGEuLi5cIixcbiAgICAgICAgICAgIFwiZW1wdHlUYWJsZVwiOiBcIlRoZXJlIGFyZSBubyBtYXRjaGluZyByZWNvcmRzLlwiXG4gICAgICAgIH0sXG4gICAgICBcIkNvbHVtbkRpc3BsYXlcIjogXCJDb2x1bW4gRGlzcGxheVwiLFxuICAgICAgXCJDb2x1bW5EaXNwbGF5SW5mb1wiOiBcIs6Vz4DOuc67zq3Ovs+EzrUgz4TOuc+CIM+Dz4TOrs67zrXPgiDPgM6/z4UgzrjOrc67zrXPhM61IM69zrEgzrXOvM+GzrHOvc6vzrbOv869z4TOsc65LlwiLFxuICAgICAgXCJTYXZlXCI6IFwiU2F2ZVwiLFxuICAgICAgXCJBcHBseVwiOiBcIkFwcGx5XCIsXG4gICAgICBcIkNhbmNlbFwiOiBcIkNhbmNlbFwiLFxuICAgICAgXCJSZWNvcmRzUGVyUGFnZVwiOiBcIkl0ZW1zIHBlciBwYWdlXCIsXG4gICAgICBcIlBhZ2VJbmZvXCI6IFwie3tzdGFydH19LXt7ZW5kfX0gb2Yge3tyZWNvcmRzVG90YWx9fVwiLFxuICAgICAgXCJTZWFyY2hMaXN0UGxhY2VIb2xkZXJcIjogXCJTZWFyY2ggaW4gbGlzdC4uLlwiLFxuICAgICAgXCJGaWx0ZXJzXCI6IFwiRmlsdGVyc1wiLFxuICAgICAgXCJBbGxcIjogXCJBbGxcIixcbiAgICAgIFwiQWRkSXRlbVwiOiBcIkFkZCBpdGVtXCIsXG4gICAgICBcIkVtcHR5VGFibGVUaXRsZVwiOiBcIlRoZXJlIGFyZSBubyBtYXRjaGluZyByZWNvcmRzLlwiLFxuICAgICAgXCJFbXB0eVRhYmxlTWVzc2FnZVwiOiBcIlBsZWFzZSB0cnkgdG8gdXNlIG90aGVyIGtleXdvcmRzIG9yIHNlYXJjaCBwYXJhbWV0ZXJzLlwiLFxuICAgICAgXCJSZW1vdmVJdGVtXCI6IFwiUmVtb3ZlIGl0ZW1cIixcbiAgICAgIFwiSXRlbXNcIjogXCJpdGVtc1wiLFxuICAgICAgXCJJdGVtXCI6IFwiaXRlbVwiLFxuICAgIFwiQWRkSXRlbU1lc3NhZ2VcIjoge1xuICAgICAgXCJ0aXRsZVwiOiBcIkFkZCBpdGVtXCIsXG4gICAgICBcIm9uZVwiOiBcIkEgbmV3IGl0ZW0gaGFzIGJlZW4gYWRkZWQgc3VjY2Vzc2Z1bGx5LlwiLFxuICAgICAgXCJtYW55XCI6IFwie3t2YWx1ZX19IG5ldyBpdGVtcyBoYXZlIGJlZW4gYWRkZWQgc3VjY2Vzc2Z1bGx5LlwiXG4gICAgfSxcbiAgICBcIlJlbW92ZUl0ZW1NZXNzYWdlXCI6IHtcbiAgICAgIFwidGl0bGVcIjogXCJSZW1vdmUgaXRlbXNcIixcbiAgICAgIFwib25lXCI6IFwiQW4gaXRlbSBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgcmVtb3ZlZC5cIixcbiAgICAgIFwibWFueVwiOiBcInt7dmFsdWV9fSBpdGVtcyBoYXZlIGJlZW4gc3VjY2Vzc2Z1bGx5IHJlbW92ZWQuXCJcbiAgICB9LFxuICAgIFwiUmVtb3ZlSXRlbXNUaXRsZVwiOiBcIlJlbW92ZSBpdGVtc1wiLFxuICAgIFwiUmVtb3ZlSXRlbXNNZXNzYWdlXCI6IFwiWW91IGFyZSBnb2luZyB0byByZW1vdmUgb25lIG9yIG1vcmUgaW5zdHJ1Y3RvciBjb3Vyc2VzLiBEbyB5b3Ugd2FudCB0byBwcm9jZWVkP1wiLFxuICAgICAgXCJTZWxlY3RBbGxcIjogXCJTZWxlY3QgYWxsXCIsXG4gICAgICBcIkNsZWFyU2VsZWN0aW9uXCI6IFwiQ2xlYXIgc2VsZWN0aW9uXCIsXG4gICAgICBcIkFjdGlvbnNcIjoge1xuICAgICAgICBcIkxhYmVsXCI6IFwiRWRpdFwiLFxuICAgICAgICBcIlN0YXJ0XCI6IFwiU3RhcnRcIixcbiAgICAgICAgXCJBY3Rpb25NZXNzYWdlXCI6IHtcbiAgICAgICAgICBcIk5vbmVcIjogXCJUaGVyZSBpcyBubyBzZWxlY3RlZCBpdGVtIHRoYXQgbWVldHMgYWN0aW9uIHJlcXVpcmVtZW50cy5cIixcbiAgICAgICAgICBcIk9uZVwiOiBcIllvdSBoYXZlIHNlbGVjdGVkIG9uZSBpdGVtIHRoYXQgbWVldHMgYWN0aW9uIHJlcXVpcmVtZW50cy5cIixcbiAgICAgICAgICBcIk1hbnlcIjogXCJZb3UgaGF2ZSBzZWxlY3RlZCB7e2xlbmd0aH19IGl0ZW1zIHRoYXQgbWVldCBhY3Rpb24gcmVxdWlyZW1lbnRzLlwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiQ29tcGxldGVkV2l0aEVycm9yc1wiOiB7XG4gICAgICAgICAgXCJUaXRsZVwiOiBcIlRoZSBvcGVyYXRpb24gd2FzIGNvbXBsZXRlZCB3aXRoIGVycm9ycy5cIixcbiAgICAgICAgICBcIkRlc2NyaXB0aW9uXCI6IHtcbiAgICAgICAgICAgIFwiT25lXCI6IFwiT25lIGl0ZW0gaGFzIG5vdCBiZWVuIHVwZGF0ZWQgZHVlIHRvIGFuIGVycm9yIG9jY3VycmVkIHdoaWxlIGV4ZWN1dGluZyBwcm9jZXNzLlwiLFxuICAgICAgICAgICAgXCJNYW55XCI6IFwie3tlcnJvcnN9fSBpdGVtcyBoYXZlIG5vdCBiZWVuIHVwZGF0ZWQgZHVlIHRvIGFuIGVycm9yIG9jY3VycmVkIHdoaWxlIGV4ZWN1dGluZyBwcm9jZXNzLlwiXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBcIkNvbXBsZXRlZFdpdGhTdWNjZXNzXCI6IHtcbiAgICAgICAgICBcIlRpdGxlXCI6IFwiVGhlIG9wZXJhdGlvbiB3YXMgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS5cIlxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgXCJTZWxlY3RDb2x1bW5zXCI6IFwiU2VsZWN0IGNvbHVtbnNcIixcbiAgICAgIFwiTW92ZVVwXCI6IFwiTW92ZSB1cFwiLFxuICAgICAgXCJNb3ZlRG93blwiOiBcIk1vdmUgZG93blwiLFxuICAgICAgXCJBZGRDb2x1bW5cIjogXCJBZGRcIixcbiAgICAgIFwiUmVtb3ZlQ29sdW1uXCI6IFwiUmVtb3ZlXCIsXG4gICAgICBcIlNlbGVjdENvbHVtbkhlbHBcIjogXCJTZWxlY3Qgb25lIG9yIG1vcmUgY29sdW1ucyBhbmQgcHJlc3MgJ0FkZCcgYnV0dG9uIHRvIGluY2x1ZGUgdGhlbSBpbiB0YWJsZS4gVXNlICdSZW1vdmUnIGJ1dHRvbiB0byBleGNsdWRlIG9uZSBvciBtb3JlIGNvbHVtbnMgZnJvbSB2aWV3LlwiLFxuICAgICAgXCJNb3ZlQ29sdW1uSGVscFwiOiBcIlVzZSAnTW92ZSB1cCcgYW5kICdNb3ZlIGRvd24nIGJ1dHRvbnMgdG8gY2hhbmdlIGNvbHVtbiBvcmRlci5cIixcbiAgICAgIFwiVW5rbm93bkNvbHVtblwiOiBcIlVua25vd25cIixcbiAgICAgIFwiU2VsZWN0Q29sdW1uXCI6IFwiU2VsZWN0XCIsXG4gICAgICBcIkFjdGlvbkxpbmtDb2x1bW5cIjogXCJBY3Rpb25zXCIsXG4gICAgICBcIkRhdGFFcnJvclwiOiB7XG4gICAgICAgIFwiVGl0bGVcIjogXCJFcnJvciB3aGlsZSBnZXR0aW5nIGRhdGFcIixcbiAgICAgICAgXCJNZXNzYWdlXCI6IFwiQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgZ2V0dGluZyBkYXRhLiBQbGVhc2UgdHJ5IGFnYWluIG9yIGNoYW5nZSB5b3VyIGNyaXRlcmlhLlwiXG4gICAgICB9LFxuICAgICAgXCJFeHBvcnRMaXN0XCI6IFwiRXhwb3J0IGxpc3RcIixcbiAgICAgIFwiRXhwb3J0TGltaXRFeGNlZWRlZFwiOiBcIlRoZSBudW1iZXIgb2YgaXRlbXMgdGhhdCBhcmUgdG8gYmUgZXhwb3J0ZWQgKHt7ZGF0YUxlbmd0aH19KSBleGNlZWRzIHRoZSBleHBvcnQgbGltaXQgKHt7ZXhwb3J0TGltaXR9fSkuIFBsZWFzZSBhcHBseSBtb3JlIHNwZWNpZmljIGZpbHRlcnMgdG8gdGhlIHNlYXJjaC5cIixcbiAgICAgIFwiRXhwb3J0UmVzdWx0c1wiOiBcIkV4cG9ydGVkIGxpc3RcIlxuICAgIH0sXG4gICAgXCJUcnVlRmFsc2VcIjoge1xuICAgICAgICBcImxvbmdcIjoge1xuICAgICAgICAgICAgXCJZZXNcIjogXCJZZXNcIixcbiAgICAgICAgICAgIFwiTm9cIjogXCJOb1wiXG4gICAgICAgIH1cbiAgICB9LFxuICAgIFwiU2V0dGluZ3NcIjoge1xuICAgICAgXCJPcGVyYXRpb25Db21wbGV0ZWRcIjogXCJUaGUgb3BlcmF0aW9uIHdhcyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LlwiXG4gICAgfSxcbiAgICBcIkFkdmFuY2VkU2VhcmNoXCI6IHtcbiAgICAgICAgXCJDaG9vc2VcIjogXCI8U2VsZWN0IGEgc2F2ZWQgc2VhcmNoPlwiLFxuICAgICAgICBcIkNob29zZURhdGVcIjogXCJDaG9vc2UgZGF0ZVwiLFxuICAgICAgICBcIlNhdmVkU2VhcmNoZXNcIjogXCJTYXZlZCBzZWFyY2hlc1wiLFxuICAgICAgICBcIlRvZ2dsZURyb3Bkb3duXCIgOiBcIlRvZ2dsZSBEcm9wZG93blwiLFxuICAgICAgICBcIlNhdmVDdXJyZW50U2VhcmNoXCI6IFwiU2F2ZSBzZWFyY2hcIixcbiAgICAgICAgXCJTYXZlQXNcIiA6IFwiU2F2ZSBhcy4uLlwiLFxuICAgICAgICBcIlNhdmVcIiA6IFwiU2F2ZVwiLFxuICAgICAgICBcIkRlbGV0ZVwiIDogXCJSZW1vdmVcIixcbiAgICAgICAgXCJNb3JlXCI6IFwiTW9yZVwiLFxuICAgICAgICBcIkxlc3NcIjogXCJMZXNzXCIsXG4gICAgICAgIFwiTW9kYWxcIiA6IHtcbiAgICAgICAgICAgIFwiVGl0bGVcIiA6IFwiU2F2ZSBjdXJyZW50IHNlYXJjaCBjcml0ZXJpYVwiLFxuICAgICAgICAgICAgXCJIZWxwXCIgOiBcIlBsZWFzZSBhZGQgYSB0aXRsZSBmb3IgdGhlIGdpdmVuIHNlYXJjaCBjcml0ZXJpYS4gVGhpcyB0aXRsZSB3aWxsIGhlbHAgeW91IHRvIHVzZSB0aG9zZSBjcml0ZXJpYSBhZ2FpbiBpbiB0aGUgZnV0dXJlLlwiLFxuICAgICAgICAgICAgXCJUaXRsZU9uVXNlckVycm9yXCIgOiBcIlBsZWFzZSB1c2UgYSB2YWxpZCBuYW1lIGZvciB5b3VyIGxpc3RcIixcbiAgICAgICAgICAgIFwiVGl0bGVPbkxpc3RBbHJlYWR5Q3JlYXRlZFwiIDogXCJOYW1lIGFscmVhZHkgaW4gdXNlLiBQbGVhc2UgY2hvb3NlIGEgZGlmZmVyZW50IG9uZVwiLFxuICAgICAgICAgICAgXCJOb0xpc3REZWZpbmVkXCIgOiBcIkNhbm5vdCBkZWZpbmUgdXNlciBzdG9yYWdlIGtleS5cIixcbiAgICAgICAgICAgIFwiRW1wdHlDcml0ZXJpYUxpc3RcIiA6IFwiUGxlYXNlIGRlZmluZSBzZWFyY2ggY3JpdGVyaWEgYmVmb3JlIHNhdmUuXCIsXG4gICAgICAgICAgICBcIlNhdmVOYW1lTGFiZWxcIiA6IFwiTGlzdCBuYW1lXCIsXG4gICAgICAgICAgICBcIlNhdmVOYW1lUGxhY2Vob2xkZXJcIiA6IFwiVHlwZSBhIHRpdGxlIGhlcmUuLi5cIixcbiAgICAgICAgICAgIFwiQWNjZXB0XCIgOiBcIlNhdmVcIixcbiAgICAgICAgICAgIFwiRGVjbGluZVwiIDogXCJEZWNsaW5lXCIsXG4gICAgICAgICAgICBcIkNsb3NlXCIgOiBcIkNsb3NlXCJcbiAgICAgICAgfVxuICAgIH0sXG4gIFwiQWRkSXRlbXNcIiA6IHtcbiAgICBcIlNlbGVjdEl0ZW1zXCI6IFwiU2VsZWN0IGl0ZW1zXCIsXG4gIH1cbn07XG4iLCJpbXBvcnQgeyBBY3Rpb24gfSBmcm9tICdAbmdyeC9zdG9yZSc7XG5cbmV4cG9ydCBlbnVtIFRhYmxlQWN0aW9uVHlwZXMge1xuICBMb2FkRmlsdGVyID0gJ1tUYWJsZV0gTG9hZCBGaWx0ZXInLFxuICBBcHBlbmRGaWx0ZXIgPSAnW1RhYmxlXSBBcHBlbmQgRmlsdGVyJyxcbiAgQXBwZW5kU3RhdGUgPSAnW1RhYmxlXSBBcHBlbmQgU3RhdGUnXG59XG5cbmV4cG9ydCBjbGFzcyBMb2FkRmlsdGVyIGltcGxlbWVudHMgQWN0aW9uIHtcbiAgcmVhZG9ubHkgdHlwZSA9IFRhYmxlQWN0aW9uVHlwZXMuTG9hZEZpbHRlcjtcbiAgY29uc3RydWN0b3IocHVibGljIHJlYWRvbmx5IGlkOiBzdHJpbmcpIHt9XG59XG5cbmV4cG9ydCBjbGFzcyBBcHBlbmRGaWx0ZXIgaW1wbGVtZW50cyBBY3Rpb24ge1xuICByZWFkb25seSB0eXBlID0gVGFibGVBY3Rpb25UeXBlcy5BcHBlbmRGaWx0ZXI7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSBpZDogc3RyaW5nLCBwdWJsaWMgcmVhZG9ubHkgZmlsdGVyOiBhbnkpIHt9XG59XG5cbmV4cG9ydCBjbGFzcyBBcHBlbmRTdGF0ZSBpbXBsZW1lbnRzIEFjdGlvbiB7XG4gIHJlYWRvbmx5IHR5cGUgPSBUYWJsZUFjdGlvblR5cGVzLkFwcGVuZFN0YXRlO1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgaWQ6IHN0cmluZywgcHVibGljIHJlYWRvbmx5IGRhdGE6IGFueSkge31cbn1cblxuZXhwb3J0IHR5cGUgVGFibGVBY3Rpb25zID0gTG9hZEZpbHRlciB8IEFwcGVuZEZpbHRlciB8IEFwcGVuZFN0YXRlO1xuIiwiaW1wb3J0IHtcbiAgQWN0aW9uUmVkdWNlck1hcCxcbiAgY3JlYXRlRmVhdHVyZVNlbGVjdG9yLFxuICBjcmVhdGVTZWxlY3Rvcixcbn0gZnJvbSAnQG5ncngvc3RvcmUnO1xuaW1wb3J0IHsgY2xvbmVEZWVwIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IFRhYmxlQWN0aW9ucywgVGFibGVBY3Rpb25UeXBlcyB9IGZyb20gJy4uL2FjdGlvbnMvdGFibGUuYWN0aW9ucyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGFibGVTdGF0ZSB7XG4gIGZpbHRlcj86IGFueTtcbiAgb3JkZXI/OiBhbnk7XG4gIHRhYmxlPzogYW55O1xufVxuXG5leHBvcnQgY29uc3QgaW5pdGlhbFN0YXRlID0ge1xufTtcblxuZXhwb3J0IGNvbnN0IHRhYmxlSW5pdGlhbFN0YXRlOiBUYWJsZVN0YXRlID0ge1xuICBmaWx0ZXI6IHt9LFxuICBvcmRlcjogW11cbn07XG5cbmV4cG9ydCBmdW5jdGlvbiB0YWJsZVJlZHVjZXIoc3RhdGUgPSBpbml0aWFsU3RhdGUsIGFjdGlvbjogVGFibGVBY3Rpb25zKTogeyBbaWQ6IHN0cmluZ106IFRhYmxlU3RhdGU7IH0ge1xuICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG5cbiAgICBjYXNlIFRhYmxlQWN0aW9uVHlwZXMuTG9hZEZpbHRlcjpcbiAgICAgIHJldHVybiBzdGF0ZVthY3Rpb24uaWRdO1xuICAgIGNhc2UgVGFibGVBY3Rpb25UeXBlcy5BcHBlbmRGaWx0ZXI6XG4gICAgICAgIHN0YXRlW2FjdGlvbi5pZF0gPSB7XG4gICAgICAgICAgLi4uc3RhdGVbYWN0aW9uLmlkXSxcbiAgICAgICAgICBmaWx0ZXI6IGNsb25lRGVlcChhY3Rpb24uZmlsdGVyKVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gc3RhdGU7XG5cbiAgICBjYXNlIFRhYmxlQWN0aW9uVHlwZXMuQXBwZW5kU3RhdGU6XG4gICAgICAgICAgc3RhdGVbYWN0aW9uLmlkXSA9IHtcbiAgICAgICAgICAgIC4uLnN0YXRlW2FjdGlvbi5pZF0sXG4gICAgICAgICAgICB0YWJsZTogYWN0aW9uLmRhdGFcbiAgICAgICAgICB9O1xuICAgICAgICAgIHJldHVybiBzdGF0ZTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHN0YXRlO1xuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmd4VGFibGVzU3RhdGUge1xuICB0YWJsZXM6IHtcbiAgICBbaWQ6IHN0cmluZ106IFRhYmxlU3RhdGU7XG4gIH07XG59XG5cbmV4cG9ydCBjb25zdCB0YWJsZVJlZHVjZXJzOiBBY3Rpb25SZWR1Y2VyTWFwPE5neFRhYmxlc1N0YXRlPiA9IHtcbiAgdGFibGVzOiB0YWJsZVJlZHVjZXIsXG59O1xuXG5leHBvcnQgY29uc3QgZmVhdHVyZU5hbWUgPSAndGFibGVzJztcblxuZXhwb3J0IGNvbnN0IGdldFRhYmxlc1N0YXRlID0gY3JlYXRlRmVhdHVyZVNlbGVjdG9yKGZlYXR1cmVOYW1lKTtcblxuZXhwb3J0IGNvbnN0IHNlbGVjdFRhYmxlID0gY3JlYXRlU2VsZWN0b3IoXG4gIGdldFRhYmxlc1N0YXRlLFxuICAoc3RhdGU6IE5neFRhYmxlc1N0YXRlLCBwcm9wczogeyBpZDogc3RyaW5nIH0pID0+IHtcbiAgICByZXR1cm4gc3RhdGUudGFibGVzW3Byb3BzLmlkXTtcbiAgfVxuKTtcbiIsImltcG9ydCB7XG4gICAgRGlyZWN0aXZlLCBPcHRpb25hbCwgSW5wdXQsIE9uSW5pdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBzZWxlY3QsIFN0b3JlIH0gZnJvbSAnQG5ncngvc3RvcmUnO1xuaW1wb3J0IHsgTmd4VGFibGVzU3RhdGUgfSBmcm9tICcuLi9yZWR1Y2Vycyc7XG5pbXBvcnQgeyBBZHZhbmNlZFRhYmxlQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy9hZHZhbmNlZC10YWJsZS9hZHZhbmNlZC10YWJsZS5jb21wb25lbnQnO1xuaW1wb3J0ICogYXMgZnJvbVRhYmxlcyBmcm9tICcuLi9yZWR1Y2Vycyc7XG5pbXBvcnQgeyBmaXJzdCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEFwcGVuZFN0YXRlIH0gZnJvbSAnLi4vYWN0aW9ucy90YWJsZS5hY3Rpb25zJztcblxuQERpcmVjdGl2ZShcbiAgICB7XG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogZGlyZWN0aXZlLXNlbGVjdG9yXG4gICAgICAgIHNlbGVjdG9yOiAnW3RhYmxlU3RhdGVdJyxcbiAgICB9LFxuKVxuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmRpcmVjdGl2ZS1jbGFzcy1zdWZmaXhcbmV4cG9ydCBjbGFzcyBBZHZhbmNlZFRhYmxlU3RhdGUgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gICAgQElucHV0KCkgdGFibGVTdGF0ZT86IHN0cmluZztcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgdGFibGU6IEFkdmFuY2VkVGFibGVDb21wb25lbnQsXG4gICAgICAgIEBPcHRpb25hbCgpIHByaXZhdGUgc3RvcmU6IFN0b3JlPE5neFRhYmxlc1N0YXRlPikge1xuICAgIH1cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuc3RvcmUgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudGFibGUuc3RhdGVTYXZlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy50YWJsZS5zdGF0ZUxvYWRDYWxsYmFjayA9IChzZXR0aW5ncywgY2FsbGJhY2spID0+IHtcbiAgICAgICAgICAgIHRoaXMuc3RvcmUucGlwZShzZWxlY3QoZnJvbVRhYmxlcy5zZWxlY3RUYWJsZSwgeyBpZDogdGhpcy50YWJsZVN0YXRlIGFzIHN0cmluZyB9KSwgZmlyc3QoKSkuc3Vic2NyaWJlKChzdGF0ZTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soc3RhdGUgJiYgc3RhdGUudGFibGUpO1xuICAgICAgICAgICAgICAgIGlmIChzdGF0ZSAmJiBzdGF0ZS50YWJsZSAmJiBzdGF0ZS50YWJsZS5Db2xSZW9yZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGFibGUuZGF0YVRhYmxlLmNvbFJlb3JkZXIub3JkZXIoc3RhdGUudGFibGUuQ29sUmVvcmRlciwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIGxldCBmaXJzdERyYXcgPSB0cnVlO1xuICAgICAgICB0aGlzLnRhYmxlLmRyYXcuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIGlmIChmaXJzdERyYXcgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMudGFibGUuZGF0YVRhYmxlID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaXJzdERyYXcgPSBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IGxvYWRlU3RhdGVTZXR0aW5nczoge1xuICAgICAgICAgICAgICAgIG9TYXZlZFN0YXRlPzoge1xuICAgICAgICAgICAgICAgICAgICBDb2xSZW9yZGVyPzogbnVtYmVyW107XG4gICAgICAgICAgICAgICAgICAgIHNjcm9sbGVyOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0b3BSb3c6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VTY3JvbGxUb3A6IG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VSb3dUb3A6IG51bWJlclxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSA9IHRoaXMudGFibGUuZGF0YVRhYmxlLnNldHRpbmdzKClbMF07XG4gICAgICAgICAgICBjb25zdCBzY3JvbGxlclNldHRpbmdzID0gbG9hZGVTdGF0ZVNldHRpbmdzLm9TYXZlZFN0YXRlICYmXG4gICAgICAgICAgICAgICAgbG9hZGVTdGF0ZVNldHRpbmdzLm9TYXZlZFN0YXRlLnNjcm9sbGVyO1xuICAgICAgICAgICAgaWYgKHNjcm9sbGVyU2V0dGluZ3MgJiYgc2Nyb2xsZXJTZXR0aW5ncy50b3BSb3cpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzY3JvbGxlciA9IHRoaXMudGFibGUuZGF0YVRhYmxlLnNjcm9sbGVyKCk7XG4gICAgICAgICAgICAgICAgc2Nyb2xsZXIuc2Nyb2xsVG9Sb3coc2Nyb2xsZXJTZXR0aW5ncy50b3BSb3csIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy50YWJsZS5zdGF0ZVNhdmVDYWxsYmFjayA9IChzZXR0aW5ncywgZGF0YSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgQXBwZW5kU3RhdGUodGhpcy50YWJsZVN0YXRlIGFzIHN0cmluZywgZGF0YSkpO1xuICAgICAgICB9O1xuICAgIH1cbn1cbiIsImltcG9ydCB7XG4gICAgRGlyZWN0aXZlLCBPcHRpb25hbCwgSW5wdXQsIE9uSW5pdCwgT25EZXN0cm95XG4gIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBzZWxlY3QsIFN0b3JlIH0gZnJvbSAnQG5ncngvc3RvcmUnO1xuaW1wb3J0IHsgQXBwZW5kRmlsdGVyIH0gZnJvbSAnLi4vYWN0aW9ucy90YWJsZS5hY3Rpb25zJztcbmltcG9ydCB7IEFkdmFuY2VkVGFibGVTZWFyY2hDb21wb25lbnQgfSBmcm9tICcuLi9jb21wb25lbnRzL2FkdmFuY2VkLXRhYmxlL2FkdmFuY2VkLXRhYmxlLXNlYXJjaC5jb21wb25lbnQnO1xuaW1wb3J0IHsgTmd4VGFibGVzU3RhdGUsIHNlbGVjdFRhYmxlIH0gZnJvbSAnLi4vcmVkdWNlcnMnO1xuaW1wb3J0IHsgZmlyc3QgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBBZHZhbmNlZFRhYmxlU3RhdGUgfSBmcm9tICcuL2FkdmFuY2UtdGFibGUtc3RhdGUuZGlyZWN0aXZlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gJ2xvZGFzaCc7XG5cbiAgZXhwb3J0IGNsYXNzIEFkdmFuY2VkVGFibGVTZWFyY2hDb21wb25lbnROb3ROdWxsIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgc3VwZXIoJ0FkdmFuY2VkIHRhYmxlIHNlYXJjaCBjb21wb25lbnQgY2Fubm90IGJlIGVtcHR5IGF0IHRoaXMgY29udGV4dC4nKTtcbiAgICB9XG4gIH1cblxuICBARGlyZWN0aXZlKFxuICAge1xuICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IGRpcmVjdGl2ZS1zZWxlY3RvclxuICAgICBzZWxlY3RvcjogJ1tzZWFyY2hTdGF0ZV0nLFxuICAgfSxcbiAgKVxuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6ZGlyZWN0aXZlLWNsYXNzLXN1ZmZpeFxuICBleHBvcnQgY2xhc3MgQWR2YW5jZWRTZWFyY2hTdGF0ZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcblxuICAgIEBJbnB1dCgpIHNlYXJjaFN0YXRlPzogc3RyaW5nO1xuICAgIHByaXZhdGUgZmlsdGVyQ2hhbmdlU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuICAgIHByaXZhdGUgdGFibGVJbml0U3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuXG4gICAgY29uc3RydWN0b3IocHJvdGVjdGVkIHNlYXJjaDogQWR2YW5jZWRUYWJsZVNlYXJjaENvbXBvbmVudCxcbiAgICAgICAgQE9wdGlvbmFsKCkgcHJvdGVjdGVkIHN0b3JlOiBTdG9yZTxOZ3hUYWJsZXNTdGF0ZT4pIHtcbiAgICB9XG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICBpZiAodGhpcy5zdG9yZSA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnNlYXJjaCA9PSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEFkdmFuY2VkVGFibGVTZWFyY2hDb21wb25lbnROb3ROdWxsKCk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5zZWFyY2gudGFibGUpIHtcbiAgICAgICAgICAvLyBzZXQgYXV0byBsb2FkIHRvIGZhbHNlXG4gICAgICAgICAgdGhpcy5zZWFyY2gudGFibGUuYXV0b0xvYWQgPSBmYWxzZTtcbiAgICAgICAgICAvLyBoYW5kbGUgZmlsdGVyaW5nXG4gICAgICAgICAgdGhpcy5maWx0ZXJDaGFuZ2VTdWJzY3JpcHRpb24gPSB0aGlzLnNlYXJjaC5maWx0ZXJDaGFuZ2Uuc3Vic2NyaWJlKChmaWx0ZXIpID0+IHtcbiAgICAgICAgICAgIHRoaXMub25TZWFyY2hGaWx0ZXIoZmlsdGVyKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICAvLyBhcHBseSB0YWJsZSBzdGF0ZVxuICAgICAgICAgIHRoaXMuYXBwbHlUYWJsZVN0YXRlKCk7XG4gICAgICAgICAgLy8gaGFuZGxlIHRhYmxlIGluaXRcbiAgICAgICAgICB0aGlzLnRhYmxlSW5pdFN1YnNjcmlwdGlvbiA9IHRoaXMuc2VhcmNoLnRhYmxlLmluaXQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm9uVGFibGVJbml0KCk7XG4gICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGFwcGx5VGFibGVTdGF0ZSgpIHtcbiAgICAgIGlmICh0aGlzLnNlYXJjaC50YWJsZSkge1xuICAgICAgICAvLyBoYW5kbGUgdGFibGUgc3RhdGUgKHZpYSBkaXJlY3RpdmUpXG4gICAgICAgIGNvbnN0IHRhYmxlU3RhdGUgPSBuZXcgQWR2YW5jZWRUYWJsZVN0YXRlKHRoaXMuc2VhcmNoLnRhYmxlLCB0aGlzLnN0b3JlKTtcbiAgICAgICAgdGFibGVTdGF0ZS50YWJsZVN0YXRlID0gdGhpcy5zZWFyY2hTdGF0ZSBhcyBzdHJpbmc7XG4gICAgICAgIHRhYmxlU3RhdGUubmdPbkluaXQoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgb25UYWJsZUluaXQoKSB7XG4gICAgICB0aGlzLnN0b3JlLnBpcGUoc2VsZWN0KHNlbGVjdFRhYmxlLCB7IGlkOiB0aGlzLnNlYXJjaFN0YXRlIGFzIHN0cmluZ30pLCBmaXJzdCgpKS5zdWJzY3JpYmUoKHN0YXRlOiBhbnkpID0+IHtcbiAgICAgICAgLy8gdXNlIG9yZGVyXG4gICAgICAgIGlmIChzdGF0ZSkge1xuICAgICAgICAgIGlmIChzdGF0ZS5vcmRlciAmJiBzdGF0ZS5vcmRlci5sZW5ndGggJiYgdGhpcy5zZWFyY2gudGFibGUpIHtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoLnRhYmxlLmRhdGFUYWJsZS5vcmRlcihzdGF0ZS5vcmRlcik7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIHVzZSB0ZXh0IHNlYXJjaFxuICAgICAgICAgIGlmIChzdGF0ZS5maWx0ZXIgJiYgc3RhdGUuZmlsdGVyLnEgJiYgdGhpcy5zZWFyY2gudGFibGUpIHtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoLnRleHQgPSBzdGF0ZS5maWx0ZXIucTtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoLmNvbGxhcHNlZCA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZWFyY2gudGFibGUuc2VhcmNoKHRoaXMuc2VhcmNoLnRleHQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyB1c2UgcHJlZGVmaW5lZCBzZWFyY2hcbiAgICAgICAgICBpZiAoc3RhdGUuZmlsdGVyICYmIHN0YXRlLmZpbHRlci5zKSB7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaC5zZWxlY3RlZExpc3QgPSB0aGlzLnNlYXJjaC51c2VyU2VhcmNoTGlzdC5maW5kKChpdGVtOiB7IG5hbWU6IHN0cmluZyB9KSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiBpdGVtLm5hbWUgPT09IHN0YXRlLmZpbHRlci5zO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZWFyY2guc2VhcmNoKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzdGF0ZS5maWx0ZXIpIHtcbiAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhzdGF0ZS5maWx0ZXIpLmxlbmd0aCkge1xuICAgICAgICAgICAgICAvLyBzZXQgY29sbGFwc2VkIHRvIGZhbHNlIChhZHZhbmNlZCBzZWFyY2gpXG4gICAgICAgICAgICAgIHRoaXMuc2VhcmNoLmNvbGxhcHNlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICB0aGlzLnNlYXJjaC5maWx0ZXIgPSBzdGF0ZS5maWx0ZXI7XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLnNlYXJjaC5zZWFyY2goKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gZW5zdXJlIGVtcHR5IGZpbHRlciBhdCB0aGlzIG1vbWVudFxuICAgICAgICAgIC8vIGJlY2F1c2Ugc2VhcmNoKCkgZnVuY3Rpb24gdHJpZ2dlcnMgYSBzdG9yZSBkaXNwYXRjaFxuICAgICAgICAgIHRoaXMuc2VhcmNoLmZpbHRlciA9IHt9O1xuICAgICAgICAgIHJldHVybiB0aGlzLnNlYXJjaC5zZWFyY2goKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvblNlYXJjaEZpbHRlcihmaWx0ZXI6IGFueSkge1xuICAgICAgZmlsdGVyID0gaXNFbXB0eShmaWx0ZXIpID8gbnVsbCA6IGZpbHRlcjtcbiAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IEFwcGVuZEZpbHRlcih0aGlzLnNlYXJjaFN0YXRlIGFzIHN0cmluZywgZmlsdGVyKSk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICBpZiAodGhpcy5maWx0ZXJDaGFuZ2VTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgdGhpcy5maWx0ZXJDaGFuZ2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnRhYmxlSW5pdFN1YnNjcmlwdGlvbikge1xuICAgICAgICB0aGlzLnRhYmxlSW5pdFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgfVxuICAgIH1cbn1cbiIsImltcG9ydCB7IERpcmVjdGl2ZSwgT25EZXN0cm95LCBPbkluaXQsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOYXZpZ2F0aW9uRW5kLCBOYXZpZ2F0aW9uU3RhcnQsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBTdG9yZSB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQWR2YW5jZWRUYWJsZVNlYXJjaENvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvYWR2YW5jZWQtdGFibGUvYWR2YW5jZWQtdGFibGUtc2VhcmNoLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOZ3hUYWJsZXNTdGF0ZSB9IGZyb20gJy4uL3JlZHVjZXJzJztcbmltcG9ydCB7IEFkdmFuY2VkU2VhcmNoU3RhdGUgfSBmcm9tICcuL2FkdmFuY2Utc2VhcmNoLXN0YXRlLmRpcmVjdGl2ZSc7XG5cbkBEaXJlY3RpdmUoe1xuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IGRpcmVjdGl2ZS1zZWxlY3RvclxuICBzZWxlY3RvcjogJ1tyb3V0ZXJTZWFyY2hTdGF0ZV0nXG59KVxuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmRpcmVjdGl2ZS1jbGFzcy1zdWZmaXhcbmV4cG9ydCBjbGFzcyBBZHZhbmNlZFNlYXJjaFJvdXRlclN0YXRlIGV4dGVuZHMgQWR2YW5jZWRTZWFyY2hTdGF0ZSBpbXBsZW1lbnRzIE9uRGVzdHJveSwgT25Jbml0IHtcbiAgcHJpdmF0ZSBfcm91dGVyU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgX2VudGVyaW5nU3RhdGUgPSB0cnVlO1xuICBwcml2YXRlIF9hcHBseVN0YXRlID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIHNlYXJjaDogQWR2YW5jZWRUYWJsZVNlYXJjaENvbXBvbmVudCxcbiAgICBAT3B0aW9uYWwoKSBwcm90ZWN0ZWQgc3RvcmU6IFN0b3JlPE5neFRhYmxlc1N0YXRlPixcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9yb3V0ZXI6IFJvdXRlclxuICApIHtcbiAgICAvLyBjYWxsIHN1cGVyIGNvbnN0cnVjdG9yXG4gICAgc3VwZXIoc2VhcmNoLCBzdG9yZSk7XG4gICAgLy8gc2V0IHNlYXJjaCBzdGF0ZSBkeW5hbWljYWxseSBhY2NvcmRpbmcgdG8gcm91dGVcbiAgICB0aGlzLl9yb3V0ZXJTdWJzY3JpcHRpb24gPSB0aGlzLl9yb3V0ZXIuZXZlbnRzXG4gICAgICAucGlwZShmaWx0ZXIoKGV2ZW50KSA9PiBldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25TdGFydCB8fCBldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQpKVxuICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IE5hdmlnYXRpb25TdGFydCB8IE5hdmlnYXRpb25FbmQpID0+IHtcbiAgICAgICAgLy8gY2FwdHVyZSB1cmxzIHJlZ2FyZGluZyB0YWIgY2hhbmdpbmcgd2hpbGUgdGhlIGNvbXBvbmVudCBpcyBhY3RpdmVcbiAgICAgICAgaWYgKGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvblN0YXJ0ICYmICF0aGlzLl9lbnRlcmluZ1N0YXRlKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIHNldCBzZWFyY2ggc3RhdGVcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoU3RhdGUgPSBuZXcgVVJMKGV2ZW50LnVybCwgbG9jYXRpb24ub3JpZ2luKS5wYXRobmFtZTtcbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0FuIGVycm9yIG9jY3VyZWQgd2hpbGUgdHJ5aW5nIHRvIHNldCBzZWFyY2ggc3RhdGUgZm9yIHRoZSBjdXJyZW50IHRhYmxlJywgZXJyKTtcbiAgICAgICAgICAgIC8vIGZhbGxiYWNrIHRvIGV2ZW50IHVybFxuICAgICAgICAgICAgdGhpcy5zZWFyY2hTdGF0ZSA9IGV2ZW50LnVybDtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gdG9vZ2xlIGFwcGx5U3RhdGVcbiAgICAgICAgICB0aGlzLl9hcHBseVN0YXRlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBjYXB0dXJlIHVybCBvZiB0aGUgZmlyc3QgYWN0aXZhdGlvbiBvZiB0aGUgY29tcG9uZW50IChlLmcuIGNvbWluZyBmcm9tIGFub3RoZXIgcm91dGUpXG4gICAgICAgIGlmIChldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQgJiYgdGhpcy5fZW50ZXJpbmdTdGF0ZSkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBzZXQgc2VhcmNoIHN0YXRlXG4gICAgICAgICAgICB0aGlzLnNlYXJjaFN0YXRlID0gbmV3IFVSTChldmVudC51cmxBZnRlclJlZGlyZWN0cywgbG9jYXRpb24ub3JpZ2luKS5wYXRobmFtZTtcbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0FuIGVycm9yIG9jY3VyZWQgd2hpbGUgdHJ5aW5nIHRvIHNldCBzZWFyY2ggc3RhdGUgZm9yIHRoZSBjdXJyZW50IHRhYmxlJywgZXJyKTtcbiAgICAgICAgICAgIC8vIGZhbGxiYWNrIHRvIGV2ZW50IHVybEFmdGVyUmVkaXJlY3RzXG4gICAgICAgICAgICB0aGlzLnNlYXJjaFN0YXRlID0gZXZlbnQudXJsQWZ0ZXJSZWRpcmVjdHM7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIHRvZ2dsZSBlbnRlcmluZ1N0YXRlXG4gICAgICAgICAgdGhpcy5fZW50ZXJpbmdTdGF0ZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9hcHBseVN0YXRlKSB7XG4gICAgICAgICAgLy8gYXBwbHkgbmV3IHRhYmxlIHN0YXRlXG4gICAgICAgICAgc3VwZXIuYXBwbHlUYWJsZVN0YXRlKCk7XG4gICAgICAgICAgdGhpcy5fYXBwbHlTdGF0ZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIC8vIGRlc3Ryb3kgb3duIHN1YnNjcmlwdGlvbnNcbiAgICBpZiAodGhpcy5fcm91dGVyU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLl9yb3V0ZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgLy8gZGVzdHJveSBwYXJlbnQgc3Vic2NyaXB0aW9uc1xuICAgIHJldHVybiBzdXBlci5uZ09uRGVzdHJveSgpO1xuICB9XG59XG4iLCJpbXBvcnQge05nTW9kdWxlLCBPbkluaXQsIENVU1RPTV9FTEVNRU5UU19TQ0hFTUF9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge0FkdmFuY2VkVGFibGVDb21wb25lbnQsIENPTFVNTl9GT1JNQVRURVJTfSBmcm9tICcuL2NvbXBvbmVudHMvYWR2YW5jZWQtdGFibGUvYWR2YW5jZWQtdGFibGUuY29tcG9uZW50JztcbmltcG9ydCB7VHJhbnNsYXRlTW9kdWxlLCBUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7QWR2YW5jZWRUYWJsZVNlYXJjaENvbXBvbmVudH0gZnJvbSAnLi9jb21wb25lbnRzL2FkdmFuY2VkLXRhYmxlL2FkdmFuY2VkLXRhYmxlLXNlYXJjaC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGF0ZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7QnRuRXhwRGlyZWN0aXZlfSBmcm9tICcuL2RpcmVjdGl2ZXMvYnRuZXhwLmRpcmVjdGl2ZSc7XG5pbXBvcnQge0FkdmFuY2VkVGFibGVTZXR0aW5nc0NvbXBvbmVudH0gZnJvbSAnLi9jb21wb25lbnRzL2FkdmFuY2VkLXRhYmxlL2FkdmFuY2VkLXRhYmxlLXNldHRpbmdzLmNvbXBvbmVudCc7XG5pbXBvcnQge1NoYXJlZE1vZHVsZSwgVGVtcGxhdGVQaXBlfSBmcm9tICdAdW5pdmVyc2lzL2NvbW1vbic7XG5pbXBvcnQgeyBBZHZhbmNlZFRhYmxlTW9kYWxCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2FkdmFuY2VkLXRhYmxlLW1vZGFsL2FkdmFuY2VkLXRhYmxlLW1vZGFsLWJhc2UuY29tcG9uZW50JztcbmltcG9ydCB7Um91dGVyTW9kYWxNb2R1bGV9IGZyb20gJ0B1bml2ZXJzaXMvY29tbW9uL3JvdXRpbmcnO1xuaW1wb3J0IHsgQWR2YW5jZWRTZWFyY2hGb3JtQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2FkdmFuY2VkLXNlYXJjaC1mb3JtL2FkdmFuY2VkLXNlYXJjaC1mb3JtLmNvbXBvbmVudCc7XG5pbXBvcnQge0FkdmFuY2VkRm9ybXNNb2R1bGV9IGZyb20gJ0B1bml2ZXJzaXMvZm9ybXMnO1xuaW1wb3J0IHtGb3JtaW9Nb2R1bGV9IGZyb20gJ2FuZ3VsYXItZm9ybWlvJztcbmltcG9ydCB7IEFkdmFuY2VkTGlzdENvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9hZHZhbmNlZC1saXN0L2FkdmFuY2VkLWxpc3QuY29tcG9uZW50JztcbmltcG9ydCB7Um91dGVyTW9kdWxlfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtcbiAgICBBZHZhbmNlZFNlYXJjaENvbmZpZ3VyYXRpb25SZXNvbHZlcixcbiAgICBBZHZhbmNlZFRhYmxlQ29uZmlndXJhdGlvblJlc29sdmVyXG59IGZyb20gJy4vY29tcG9uZW50cy9hZHZhbmNlZC10YWJsZS9hZHZhbmNlZC10YWJsZS1yZXNvbHZlcnMnO1xuaW1wb3J0IHtBZHZhbmNlZFJvd0FjdGlvbkNvbXBvbmVudH0gZnJvbSAnLi9jb21wb25lbnRzL2FkdmFuY2VkLXJvdy1hY3Rpb24vYWR2YW5jZWQtcm93LWFjdGlvbi5jb21wb25lbnQnO1xuaW1wb3J0IHtGT1JNQVRURVJTfSBmcm9tICcuL2NvbXBvbmVudHMvYWR2YW5jZWQtdGFibGUvYWR2YW5jZWQtdGFibGUuZm9ybWF0dGVycy5pbnRlcmZhY2UnO1xuXG5pbXBvcnQge1RBQkxFU19FTH0gZnJvbSAnLi9pMThuL3RhYmxlcy5lbCc7XG5pbXBvcnQge1RBQkxFU19FTn0gZnJvbSAnLi9pMThuL3RhYmxlcy5lbic7XG5pbXBvcnQgeyBUYWJsZVNpbXBsZUhlYWRlckNvbXBvbmVudCwgU2ltcGxlSGVhZGVyVG9vbHNDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvdGFibGUtc2ltcGxlLWhlYWRlci90YWJsZS1zaW1wbGUtaGVhZGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNb2RhbE1vZHVsZSB9IGZyb20gJ25neC1ib290c3RyYXAvbW9kYWwnO1xuaW1wb3J0IHsgUHJvZ3Jlc3NiYXJNb2R1bGUgfSBmcm9tICduZ3gtYm9vdHN0cmFwL3Byb2dyZXNzYmFyJztcbmltcG9ydCB7IEFkdmFuY2VkU2VsZWN0Q29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2FkdmFuY2VkLXNlbGVjdC9hZHZhbmNlZC1zZWxlY3QuY29tcG9uZW50JztcbmltcG9ydCB7IEFkdmFuY2VkU2VsZWN0U2VydmljZSB9IGZyb20gJy4vY29tcG9uZW50cy9hZHZhbmNlZC1zZWxlY3QvYWR2YW5jZWQtc2VsZWN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgQWR2YW5jZWRUYWJsZUVkaXRvckRpcmVjdGl2ZSB9IGZyb20gJy4vZGlyZWN0aXZlcy9hZHZhbmNlZC10YWJsZS1lZGl0b3IuZGlyZWN0aXZlJztcbmltcG9ydCB7QWR2YW5jZWRBZ2dyZWdhdG9yQ29tcG9uZW50fSBmcm9tICcuL2NvbXBvbmVudHMvYWR2YW5jZWQtYWdncmVnYXRvci9hZHZhbmNlZC1hZ2dyZWdhdG9yLmNvbXBvbmVudCc7XG5pbXBvcnQge0FkdmFuY2VkQWdncmVnYXRvckxpc3RDb21wb25lbnR9IGZyb20gJy4vY29tcG9uZW50cy9hZHZhbmNlZC1hZ2dyZWdhdG9yLWxpc3QvYWR2YW5jZWQtYWdncmVnYXRvci1saXN0LmNvbXBvbmVudCc7XG5pbXBvcnQge0FkdmFuY2VkQWdncmVnYXRvclNlcnZpY2V9IGZyb20gJy4vc2VydmljZXMvYWR2YW5jZWQtYWdncmVnYXRvci9hZHZhbmNlZC1hZ2dyZWdhdG9yLnNlcnZpY2UnO1xuaW1wb3J0IHtBZHZhbmNlZEFnZ3JlZ2F0b3JQaXBlfSBmcm9tICcuL3BpcGVzL2FkdmFuY2VkLWFnZ3JlZ2F0b3IucGlwZSc7XG5pbXBvcnQge0dyb3VwQnlQaXBlLCBOZ1BpcGVzTW9kdWxlfSBmcm9tICduZ3gtcGlwZXMnO1xuaW1wb3J0IHtQYXJzZVRpdGxlUGlwZX0gZnJvbSAnLi9waXBlcy9hZHZhbnNlZC1hZ2dyZWdhdG9yLWxpc3QtdGl0bGUtcGFyc2UucGlwZSc7XG5pbXBvcnQge0FkZEl0ZW1zQ29tcG9uZW50fSBmcm9tICcuL2NvbXBvbmVudHMvYWRkLWl0ZW1zL2FkZC1pdGVtcy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQWR2YW5jZWRTZWFyY2hTdGF0ZSB9IGZyb20gJy4vZGlyZWN0aXZlcy9hZHZhbmNlLXNlYXJjaC1zdGF0ZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgQWR2YW5jZWRUYWJsZVN0YXRlIH0gZnJvbSAnLi9kaXJlY3RpdmVzL2FkdmFuY2UtdGFibGUtc3RhdGUuZGlyZWN0aXZlJztcbmltcG9ydCB7IEFkdmFuY2VkU2VhcmNoUm91dGVyU3RhdGUgfSBmcm9tICcuL2RpcmVjdGl2ZXMvYWR2YW5jZWQtc2VhcmNoLXJvdXRlci1zdGF0ZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgQWR2YW5jZWRUYWJsZVNlYXJjaEJhc2VDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvYWR2YW5jZWQtdGFibGUvYWR2YW5jZWQtdGFibGUtc2VhcmNoLWJhc2UnO1xuaW1wb3J0IHsgQ29sdW1uU2VsZWN0b3JDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvY29sdW1uLXNlbGVjdG9yL2NvbHVtbi1zZWxlY3Rvci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ29sdW1uU2VsZWN0b3JTZXJ2aWNlIH0gZnJvbSAnLi9jb21wb25lbnRzL2NvbHVtbi1zZWxlY3Rvci9jb2x1bW4tc2VsZWN0b3Iuc2VydmljZSc7XG5cbkBOZ01vZHVsZSh7XG4gICAgaW1wb3J0czogW1xuICAgICAgICBDb21tb25Nb2R1bGUsXG4gICAgICAgIFNoYXJlZE1vZHVsZSxcbiAgICAgICAgVHJhbnNsYXRlTW9kdWxlLFxuICAgICAgICBGb3Jtc01vZHVsZSxcbiAgICAgICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICAgICAgUm91dGVyTW9kdWxlLFxuICAgICAgICBSb3V0ZXJNb2RhbE1vZHVsZSxcbiAgICAgICAgRm9ybWlvTW9kdWxlLFxuICAgICAgICBBZHZhbmNlZEZvcm1zTW9kdWxlLFxuICAgICAgICBTaGFyZWRNb2R1bGUsXG4gICAgICAgIE1vZGFsTW9kdWxlLFxuICAgICAgICBQcm9ncmVzc2Jhck1vZHVsZSxcbiAgICAgICAgTmdQaXBlc01vZHVsZVxuICAgIF0sXG4gICAgcHJvdmlkZXJzOiBbRGF0ZVBpcGUsIFRlbXBsYXRlUGlwZSxcbiAgICAgIHtcbiAgICAgICAgcHJvdmlkZTogQ09MVU1OX0ZPUk1BVFRFUlMsXG4gICAgICAgIHVzZVZhbHVlOiBGT1JNQVRURVJTXG4gICAgICB9LFxuXG4gICAgICBBZHZhbmNlZFRhYmxlQ29uZmlndXJhdGlvblJlc29sdmVyLFxuICAgICAgICBBZHZhbmNlZFNlYXJjaENvbmZpZ3VyYXRpb25SZXNvbHZlcixcbiAgICAgICAgQWR2YW5jZWRTZWxlY3RTZXJ2aWNlLFxuICAgICAgICBBZHZhbmNlZEFnZ3JlZ2F0b3JTZXJ2aWNlLFxuICAgICAgICBDb2x1bW5TZWxlY3RvclNlcnZpY2UsXG4gICAgICAgIEdyb3VwQnlQaXBlXG4gICAgICBdLFxuICAgIGRlY2xhcmF0aW9uczogW1xuICAgICAgICBBZHZhbmNlZFRhYmxlQ29tcG9uZW50LFxuICAgICAgICBBZHZhbmNlZFRhYmxlU2VhcmNoQmFzZUNvbXBvbmVudCxcbiAgICAgICAgQWR2YW5jZWRUYWJsZVNlYXJjaENvbXBvbmVudCxcbiAgICAgICAgQnRuRXhwRGlyZWN0aXZlLFxuICAgICAgICBBZHZhbmNlZFRhYmxlU2V0dGluZ3NDb21wb25lbnQsXG4gICAgICAgIEFkdmFuY2VkVGFibGVNb2RhbEJhc2VDb21wb25lbnQsXG4gICAgICAgIEFkdmFuY2VkU2VhcmNoRm9ybUNvbXBvbmVudCxcbiAgICAgICAgQWR2YW5jZWRMaXN0Q29tcG9uZW50LFxuICAgICAgICBBZHZhbmNlZFJvd0FjdGlvbkNvbXBvbmVudCxcbiAgICAgICAgVGFibGVTaW1wbGVIZWFkZXJDb21wb25lbnQsXG4gICAgICAgIFNpbXBsZUhlYWRlclRvb2xzQ29tcG9uZW50LFxuICAgICAgICBBZHZhbmNlZFNlbGVjdENvbXBvbmVudCxcbiAgICAgICAgQWR2YW5jZWRUYWJsZUVkaXRvckRpcmVjdGl2ZSxcbiAgICAgICAgQWR2YW5jZWRBZ2dyZWdhdG9yQ29tcG9uZW50LFxuICAgICAgICBBZHZhbmNlZEFnZ3JlZ2F0b3JMaXN0Q29tcG9uZW50LFxuICAgICAgICBBZHZhbmNlZEFnZ3JlZ2F0b3JQaXBlLFxuICAgICAgICBQYXJzZVRpdGxlUGlwZSxcbiAgICAgICAgQWRkSXRlbXNDb21wb25lbnQsXG4gICAgICAgIEFkdmFuY2VkU2VhcmNoU3RhdGUsXG4gICAgICAgIEFkdmFuY2VkVGFibGVTdGF0ZSxcbiAgICAgICAgQWR2YW5jZWRTZWFyY2hSb3V0ZXJTdGF0ZSxcbiAgICAgICAgQ29sdW1uU2VsZWN0b3JDb21wb25lbnRcbiAgICBdLFxuICAgIGV4cG9ydHM6IFtcbiAgICAgICAgQWR2YW5jZWRUYWJsZUNvbXBvbmVudCxcbiAgICAgICAgQWR2YW5jZWRUYWJsZVNlYXJjaENvbXBvbmVudCxcbiAgICAgICAgQnRuRXhwRGlyZWN0aXZlLFxuICAgICAgICBBZHZhbmNlZFRhYmxlU2V0dGluZ3NDb21wb25lbnQsXG4gICAgICAgIEFkdmFuY2VkU2VhcmNoRm9ybUNvbXBvbmVudCxcbiAgICAgICAgQWR2YW5jZWRMaXN0Q29tcG9uZW50LFxuICAgICAgICBBZHZhbmNlZFJvd0FjdGlvbkNvbXBvbmVudCxcbiAgICAgICAgVGFibGVTaW1wbGVIZWFkZXJDb21wb25lbnQsXG4gICAgICAgIFNpbXBsZUhlYWRlclRvb2xzQ29tcG9uZW50LFxuICAgICAgICBBZHZhbmNlZFNlbGVjdENvbXBvbmVudCxcbiAgICAgICAgQWR2YW5jZWRUYWJsZUVkaXRvckRpcmVjdGl2ZSxcbiAgICAgICAgQWR2YW5jZWRBZ2dyZWdhdG9yQ29tcG9uZW50LFxuICAgICAgICBBZHZhbmNlZEFnZ3JlZ2F0b3JMaXN0Q29tcG9uZW50LFxuICAgICAgICBBZGRJdGVtc0NvbXBvbmVudCxcbiAgICAgICAgQWR2YW5jZWRTZWFyY2hTdGF0ZSxcbiAgICAgICAgQWR2YW5jZWRUYWJsZVN0YXRlLFxuICAgICAgICBBZHZhbmNlZFNlYXJjaFJvdXRlclN0YXRlLFxuICAgICAgICBDb2x1bW5TZWxlY3RvckNvbXBvbmVudFxuICAgIF0sXG4gICAgZW50cnlDb21wb25lbnRzOiBbXG4gICAgICAgIEFkdmFuY2VkVGFibGVNb2RhbEJhc2VDb21wb25lbnQsXG4gICAgICAgIEFkdmFuY2VkVGFibGVTZXR0aW5nc0NvbXBvbmVudCxcbiAgICAgICAgQWR2YW5jZWRSb3dBY3Rpb25Db21wb25lbnQsXG4gICAgICAgIEFkdmFuY2VkU2VsZWN0Q29tcG9uZW50LFxuICAgICAgICBBZGRJdGVtc0NvbXBvbmVudCxcbiAgICAgICAgQ29sdW1uU2VsZWN0b3JDb21wb25lbnRcbiAgICBdLFxuICAgIHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXVxufSlcbmV4cG9ydCBjbGFzcyBUYWJsZXNNb2R1bGUgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgX3RyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UpIHtcbiAgICAgICAgdGhpcy5uZ09uSW5pdCgpLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBsb2FkaW5nIHRhYmxlcyBtb2R1bGUnKTtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXN5bmMgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2Uuc2V0VHJhbnNsYXRpb24oJ2VuJywgVEFCTEVTX0VOLCB0cnVlKTtcbiAgICAgICAgdGhpcy5fdHJhbnNsYXRlU2VydmljZS5zZXRUcmFuc2xhdGlvbignZWwnLCBUQUJMRVNfRUwsIHRydWUpO1xuICAgIH1cblxufVxuIl0sIm5hbWVzIjpbInRzbGliXzEuX19leHRlbmRzIiwidHNsaWJfMS5fX3ZhbHVlcyIsIklTTzYzOTEuZ2V0TmF0aXZlTmFtZSIsImZpbHRlciIsInNlbGVjdCIsInNraXAiLCJmcm9t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
|