e5core-angular-ui
Version:
e5 Anywhere Angular UI
581 lines • 45.3 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import * as tslib_1 from "tslib";
import { map } from 'rxjs/operators';
import { Injectable } from '@angular/core';
import { UiSearchDefinitionService, WorkSearchFoundationService } from 'e5core-angular-services';
import { DataSourceColumnStatus } from './data-source-column';
import * as i0 from "@angular/core";
import * as i1 from "e5core-angular-services";
/** @type {?} */
var TESTDATA = {
'$id': '2111',
'findClassId': 4,
'page': 0,
'pageSize': 10,
'resultCount': 10,
'total': 24,
'columns': [
{
'$id': '2112',
'code': 'Id',
'label': 'Work Id',
'type': 'System.Guid'
},
{
'$id': '2113',
'code': 'SLAExpiryDate',
'label': 'Due Date',
'type': 'System.DateTime'
},
{
'$id': '2114',
'code': 'Allocation',
'label': 'Allocation',
'type': 'System.String'
},
{
'$id': '2115',
'code': '_NextDueTask',
'label': 'Next Due Task',
'type': 'System.String'
},
{
'$id': '2116',
'code': 'Status_Id',
'label': 'Status',
'type': 'System.String'
},
{
'$id': '2117',
'code': 'AssignedUser',
'label': 'Assigned User',
'type': 'System.String'
},
{
'$id': '2118',
'code': 'Category1_Id',
'label': 'Business Area',
'type': 'System.String'
},
{
'$id': '2119',
'code': 'Category3_Id',
'label': 'Category',
'type': 'System.String'
},
{
'$id': '2120',
'code': 'HealthFundNumber',
'label': 'Client Number',
'type': 'System.String'
},
{
'$id': '2121',
'code': 'FirstName',
'label': 'First Name',
'type': 'System.String'
},
{
'$id': '2122',
'code': 'Surname',
'label': 'Surname',
'type': 'System.String'
},
{
'$id': '2123',
'code': 'Category2_Id',
'label': 'Product Type',
'type': 'System.String'
},
{
'$id': '2124',
'code': 'ProviderName',
'label': 'Provider Name',
'type': 'System.String'
},
{
'$id': '2125',
'code': 'ProviderNumber',
'label': 'Provider Number',
'type': 'System.String'
},
{
'$id': '2126',
'code': 'Reference',
'label': 'Reference',
'type': 'System.Int32'
},
{
'$id': '2127',
'code': 'RelatedItem',
'label': 'Related Items',
'type': 'System.String'
},
{
'$id': '2128',
'code': '_SLAExpiryStatus',
'label': '_SLAExpiryStatus',
'type': 'System.String'
}
],
'results': [
[
'ca3a1219-03eb-11e9-9682-005056ba65e4',
'2018-12-24T11:11:27+11:00',
'2|1005|1011|0',
null,
'Complete',
null,
'Member Health',
'Benefit Eligibility',
'29405564',
null,
null,
'Ancillary Benefits Management',
'',
'25',
1778,
null,
'within'
],
[
'603b82ff-03e6-11e9-9682-005056ba65e4',
'2018-12-24T10:32:41+11:00',
'2|1002|1037|0',
null,
'Complete',
'Leo Santos',
'Member Health',
'Benefit Eligibility',
'29405564',
null,
null,
'Clinical Review',
'',
'24',
1776,
null,
'within'
],
[
'2b4701f5-03e6-11e9-9682-005056ba65e4',
'2018-12-24T10:31:12+11:00',
'2|1005|1010|0',
null,
'Active',
null,
'Member Health',
'Benefit Review',
'29405564',
null,
null,
'Ancillary Benefits Management',
'',
'22',
1775,
null,
'within'
],
[
'f2e4ce57-033d-11e9-9682-005056ba65e4',
'2018-12-21T14:27:02+11:00',
'2|1005|1014|0',
null,
'Complete',
'Devashi Wesumperuma',
'Member Health',
'Investigation',
'29405564',
null,
null,
'Ancillary Benefits Management',
'',
'19',
1769,
null,
'within'
],
[
'6d575c6c-0327-11e9-9682-005056ba65e4',
'2018-12-21T11:45:49+11:00',
'2|1006|1012|0',
null,
'Complete',
'Vinh Tang',
'Member Health',
'Unclassified',
'29405564',
null,
null,
'Unclassified',
'',
'18',
1768,
null,
'within'
],
[
'd417c057-0326-11e9-9682-005056ba65e4',
'2018-12-21T11:41:32+11:00',
'2|1006|1012|0',
null,
'Complete',
null,
'Member Health',
'Unclassified',
'29405564',
null,
null,
'Unclassified',
'',
'17',
1767,
null,
'within'
],
[
'f72a5b05-0325-11e9-9682-005056ba65e4',
'2018-12-21T11:35:22+11:00',
'2|1004|1017|0',
null,
'Complete',
null,
'Member Health',
'Exgratia',
'29405564',
null,
null,
'Compensable',
'',
'16',
1766,
null,
'within'
],
[
'e88fefe7-0325-11e9-9682-005056ba65e4',
'2018-12-21T11:34:57+11:00',
'2|1005|1010|0',
null,
'Complete',
null,
'Member Health',
'Benefit Review',
'29405564',
null,
null,
'Ancillary Benefits Management',
'',
'15',
1765,
null,
'within'
],
[
'644e3d8c-0325-11e9-9682-005056ba65e4',
'2018-12-21T11:31:15+11:00',
'2|1005|1010|0',
null,
'Complete',
null,
'Member Health',
'Benefit Review',
'29405564',
null,
null,
'Ancillary Benefits Management',
'',
'14',
1764,
null,
'within'
],
[
'3588e678-0325-11e9-9682-005056ba65e4',
'2018-12-21T11:29:57+11:00',
'2|1003|1031|0',
null,
'Complete',
null,
'Member Health',
'Investigation',
'29405564',
null,
null,
'Investigations',
'',
'13',
1763,
null,
'within'
]
]
};
var SearchDataSourceService = /** @class */ (function () {
function SearchDataSourceService(searchDefinitionService, searchService) {
this.searchDefinitionService = searchDefinitionService;
this.searchService = searchService;
this.SlaExpiryColumnCode = '_SLAExpiryStatus';
this.NextTaskColumnCode = '_NextDueTask';
this.searchDefinitionId = 0;
this.searchOptions = {};
}
/**
* @return {?}
*/
SearchDataSourceService.prototype.defaultOptions = /**
* @return {?}
*/
function () {
return (this.searchOptions);
};
/**
* @param {?} options
* @return {?}
*/
SearchDataSourceService.prototype.setDefaultOptions = /**
* @param {?} options
* @return {?}
*/
function (options) {
this.searchOptions = tslib_1.__assign({}, options); // clone
};
/**
* @param {?} id
* @return {?}
*/
SearchDataSourceService.prototype.setSearchDefinitionId = /**
* @param {?} id
* @return {?}
*/
function (id) {
this.searchDefinitionId = id;
return (this);
};
/**
* @return {?}
*/
SearchDataSourceService.prototype.columns = /**
* @return {?}
*/
function () {
var _this = this;
return this.searchDefinitionService.get(this.searchDefinitionId).pipe(map(function (r) {
/** @type {?} */
var columns = r.searchFields.map(function (sf) { return (/** @type {?} */ ({
code: sf.fieldDefinitionId,
label: sf.fieldLabel,
type: sf.fieldDataType,
status: sf.fieldStatus
})); });
return _this.addOptionalColumns(columns);
}));
};
/**
* @private
* @param {?} columns
* @return {?}
*/
SearchDataSourceService.prototype.addOptionalColumns = /**
* @private
* @param {?} columns
* @return {?}
*/
function (columns) {
if (this.searchOptions) {
if (this.searchOptions.includeSla) {
// Add to start
columns.unshift((/** @type {?} */ ({
label: 'SLA',
code: this.SlaExpiryColumnCode,
type: 'SLA',
status: DataSourceColumnStatus.Selected
})));
}
if (this.searchOptions.includeNextDueTask) {
// Add to end
columns.push((/** @type {?} */ ({
code: this.NextTaskColumnCode,
label: 'Next Due Task',
type: 'Input',
status: DataSourceColumnStatus.Selected
})));
}
}
return (columns);
};
/**
* @param {?} page
* @param {?} pageSize
* @param {?} optionsIn
* @return {?}
*/
SearchDataSourceService.prototype.read = /**
* @param {?} page
* @param {?} pageSize
* @param {?} optionsIn
* @return {?}
*/
function (page, pageSize, optionsIn) {
var _this = this;
/** @type {?} */
var options = tslib_1.__assign({}, this.searchOptions, optionsIn, { page: page, pageSize: pageSize });
/** @type {?} */
var filterBy = this.mapQueryToFilterBy(options.query);
return this.searchService.getFindWorkItem(this.searchDefinitionId, filterBy, options)
.pipe(map(function (results) {
return {
total: results.total,
data: _this.mapResults(results)
};
}));
};
/**
* The data that comes back from the API is a columns defintion and an array
* of array of data. We need to map this into an array of objects with the column property
* id as the object key so that it's easier to handle by the table.
* @param model
*/
/**
* The data that comes back from the API is a columns defintion and an array
* of array of data. We need to map this into an array of objects with the column property
* id as the object key so that it's easier to handle by the table.
* @private
* @param {?} model
* @return {?}
*/
SearchDataSourceService.prototype.mapResults = /**
* The data that comes back from the API is a columns defintion and an array
* of array of data. We need to map this into an array of objects with the column property
* id as the object key so that it's easier to handle by the table.
* @private
* @param {?} model
* @return {?}
*/
function (model) {
/** @type {?} */
var data = model.results;
/** @type {?} */
var results;
if (model && model.total > 0 && model.results && model.columns) {
/** @type {?} */
var colDefs_1 = model.columns;
results = model.results.map(function (r) {
/** @type {?} */
var dataRow = r;
/** @type {?} */
var objectRow = {};
for (var c = 0; c < colDefs_1.length; c++) {
/** @type {?} */
var columnDef = colDefs_1[c];
objectRow[columnDef.code] = dataRow[c];
}
return (objectRow);
});
}
return results;
};
// In order to use the foundation service we need to map the DataSourceQuery into
// the underlying foundation query
// {
// 'filters': [
// {
// 'field': 'string',
// 'operator': 'string',
// 'value': 'string'
// }
// ],
// 'logic': 'string'
// }
// In order to use the foundation service we need to map the DataSourceQuery into
// the underlying foundation query
// {
// 'filters': [
// {
// 'field': 'string',
// 'operator': 'string',
// 'value': 'string'
// }
// ],
// 'logic': 'string'
// }
/**
* @private
* @param {?} query
* @return {?}
*/
SearchDataSourceService.prototype.mapQueryToFilterBy =
// In order to use the foundation service we need to map the DataSourceQuery into
// the underlying foundation query
// {
// 'filters': [
// {
// 'field': 'string',
// 'operator': 'string',
// 'value': 'string'
// }
// ],
// 'logic': 'string'
// }
/**
* @private
* @param {?} query
* @return {?}
*/
function (query) {
/** @type {?} */
var filterBy = {};
if (query && query.Expressions && query.Expressions.length > 0) {
/** @type {?} */
var filters = query.Expressions
.filter(function (e) { return e.Value; })
.map(function (e) {
return {
field: e.Field,
value: e.Value
};
});
filterBy = {
filters: filters
};
}
return (filterBy);
};
SearchDataSourceService.decorators = [
{ type: Injectable, args: [{
providedIn: null // 'root'
},] }
];
/** @nocollapse */
SearchDataSourceService.ctorParameters = function () { return [
{ type: UiSearchDefinitionService },
{ type: WorkSearchFoundationService }
]; };
/** @nocollapse */ SearchDataSourceService.ngInjectableDef = i0.defineInjectable({ factory: function SearchDataSourceService_Factory() { return new SearchDataSourceService(i0.inject(i1.UiSearchDefinitionService), i0.inject(i1.WorkSearchFoundationService)); }, token: SearchDataSourceService, providedIn: null });
return SearchDataSourceService;
}());
export { SearchDataSourceService };
if (false) {
/** @type {?} */
SearchDataSourceService.prototype.SlaExpiryColumnCode;
/** @type {?} */
SearchDataSourceService.prototype.NextTaskColumnCode;
/** @type {?} */
SearchDataSourceService.prototype.searchDefinitionId;
/** @type {?} */
SearchDataSourceService.prototype.searchOptions;
/**
* @type {?}
* @private
*/
SearchDataSourceService.prototype.searchDefinitionService;
/**
* @type {?}
* @private
*/
SearchDataSourceService.prototype.searchService;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLWRhdGEtc291cmNlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9lNWNvcmUtYW5ndWxhci11aS8iLCJzb3VyY2VzIjpbImxpYi9kYXRhc291cmNlL3NlYXJjaC1kYXRhLXNvdXJjZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBRUEsT0FBTyxFQUFFLEdBQUcsRUFBYyxNQUFNLGdCQUFnQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLHlCQUF5QixFQUFFLDJCQUEyQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDakcsT0FBTyxFQUFvQixzQkFBc0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDOzs7O0lBUTFFLFFBQVEsR0FBRztJQUNiLEtBQUssRUFBRSxNQUFNO0lBQ2IsYUFBYSxFQUFFLENBQUM7SUFDaEIsTUFBTSxFQUFFLENBQUM7SUFDVCxVQUFVLEVBQUUsRUFBRTtJQUNkLGFBQWEsRUFBRSxFQUFFO0lBQ2pCLE9BQU8sRUFBRSxFQUFFO0lBQ1gsU0FBUyxFQUFFO1FBQ1I7WUFDRyxLQUFLLEVBQUUsTUFBTTtZQUNiLE1BQU0sRUFBRSxJQUFJO1lBQ1osT0FBTyxFQUFFLFNBQVM7WUFDbEIsTUFBTSxFQUFFLGFBQWE7U0FDdkI7UUFDRDtZQUNHLEtBQUssRUFBRSxNQUFNO1lBQ2IsTUFBTSxFQUFFLGVBQWU7WUFDdkIsT0FBTyxFQUFFLFVBQVU7WUFDbkIsTUFBTSxFQUFFLGlCQUFpQjtTQUMzQjtRQUNEO1lBQ0csS0FBSyxFQUFFLE1BQU07WUFDYixNQUFNLEVBQUUsWUFBWTtZQUNwQixPQUFPLEVBQUUsWUFBWTtZQUNyQixNQUFNLEVBQUUsZUFBZTtTQUN6QjtRQUNEO1lBQ0csS0FBSyxFQUFFLE1BQU07WUFDYixNQUFNLEVBQUUsY0FBYztZQUN0QixPQUFPLEVBQUUsZUFBZTtZQUN4QixNQUFNLEVBQUUsZUFBZTtTQUN6QjtRQUNEO1lB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QUFPO2FBQ3BCLENBQUM7U0FDTDtRQUNELE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBRTtJQUN2QixDQUFDOztnQkE1SUosVUFBVSxTQUFDO29CQUNSLFVBQVUsRUFBRSxJQUFJLENBQUMsU0FBUztpQkFDN0I7Ozs7Z0JBNVRRLHlCQUF5QjtnQkFBRSwyQkFBMkI7OztrQ0FKL0Q7Q0EyY0MsQUE3SUQsSUE2SUM7U0ExSVksdUJBQXVCOzs7SUFFaEMsc0RBQWtEOztJQUNsRCxxREFBNkM7O0lBRTdDLHFEQUF1Qjs7SUFDdkIsZ0RBQTZDOzs7OztJQUVqQywwREFBMEQ7Ozs7O0lBQUUsZ0RBQWtEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSURhdGFTb3VyY2UgfSBmcm9tICcuL2RhdGEtc291cmNlJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBtYXAsIGNhdGNoRXJyb3IgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVWlTZWFyY2hEZWZpbml0aW9uU2VydmljZSwgV29ya1NlYXJjaEZvdW5kYXRpb25TZXJ2aWNlIH0gZnJvbSAnZTVjb3JlLWFuZ3VsYXItc2VydmljZXMnO1xyXG5pbXBvcnQgeyBEYXRhU291cmNlQ29sdW1uLCBEYXRhU291cmNlQ29sdW1uU3RhdHVzIH0gZnJvbSAnLi9kYXRhLXNvdXJjZS1jb2x1bW4nO1xyXG5pbXBvcnQgeyBEYXRhU291cmNlUmVzdWx0cyB9IGZyb20gJy4vZGF0YS1zb3VyY2UtcmVzdWx0cyc7XHJcbmltcG9ydCB7IEZvdW5kYXRpb25Xb3JrRmluZFdvcmtJdGVtUmVzdWx0TW9kZWwgfSBmcm9tICdlNWNvcmUtYW5ndWxhci1zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IEZvdW5kYXRpb25Xb3JrRmluZFdvcmtJdGVtQ29sdW1uRGVmTW9kZWwgfSBmcm9tICdlNWNvcmUtYW5ndWxhci1zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IFNlYXJjaERhdGFTb3VyY2VPcHRpb25zIH0gZnJvbSAnLi9zZWFyY2gtZGF0YS1zb3VyY2Utb3B0aW9ucyc7XHJcbmltcG9ydCB7IERhdGFTb3VyY2VPcHRpb25zIH0gZnJvbSAnLi9kYXRhLXNvdXJjZS1vcHRpb25zJztcclxuaW1wb3J0IHsgRGF0YVNvdXJjZVF1ZXJ5IH0gZnJvbSAnLi9kYXRhLXNvdXJjZS1xdWVyeSc7XHJcblxyXG5jb25zdCBURVNUREFUQSA9IHtcclxuICAgICckaWQnOiAnMjExMScsXHJcbiAgICAnZmluZENsYXNzSWQnOiA0LFxyXG4gICAgJ3BhZ2UnOiAwLFxyXG4gICAgJ3BhZ2VTaXplJzogMTAsXHJcbiAgICAncmVzdWx0Q291bnQnOiAxMCxcclxuICAgICd0b3RhbCc6IDI0LFxyXG4gICAgJ2NvbHVtbnMnOiBbXHJcbiAgICAgICB7XHJcbiAgICAgICAgICAnJGlkJzogJzIxMTInLFxyXG4gICAgICAgICAgJ2NvZGUnOiAnSWQnLFxyXG4gICAgICAgICAgJ2xhYmVsJzogJ1dvcmsgSWQnLFxyXG4gICAgICAgICAgJ3R5cGUnOiAnU3lzdGVtLkd1aWQnXHJcbiAgICAgICB9LFxyXG4gICAgICAge1xyXG4gICAgICAgICAgJyRpZCc6ICcyMTEzJyxcclxuICAgICAgICAgICdjb2RlJzogJ1NMQUV4cGlyeURhdGUnLFxyXG4gICAgICAgICAgJ2xhYmVsJzogJ0R1ZSBEYXRlJyxcclxuICAgICAgICAgICd0eXBlJzogJ1N5c3RlbS5EYXRlVGltZSdcclxuICAgICAgIH0sXHJcbiAgICAgICB7XHJcbiAgICAgICAgICAnJGlkJzogJzIxMTQnLFxyXG4gICAgICAgICAgJ2NvZGUnOiAnQWxsb2NhdGlvbicsXHJcbiAgICAgICAgICAnbGFiZWwnOiAnQWxsb2NhdGlvbicsXHJcbiAgICAgICAgICAndHlwZSc6ICdTeXN0ZW0uU3RyaW5nJ1xyXG4gICAgICAgfSxcclxuICAgICAgIHtcclxuICAgICAgICAgICckaWQnOiAnMjExNScsXHJcbiAgICAgICAgICAnY29kZSc6ICdfTmV4dER1ZVRhc2snLFxyXG4gICAgICAgICAgJ2xhYmVsJzogJ05leHQgRHVlIFRhc2snLFxyXG4gICAgICAgICAgJ3R5cGUnOiAnU3lzdGVtLlN0cmluZydcclxuICAgICAgIH0sXHJcbiAgICAgICB7XHJcbiAgICAgICAgICAnJGlkJzogJzIxMTYnLFxyXG4gICAgICAgICAgJ2NvZGUnOiAnU3RhdHVzX0lkJyxcclxuICAgICAgICAgICdsYWJlbCc6ICdTdGF0dXMnLFxyXG4gICAgICAgICAgJ3R5cGUnOiAnU3lzdGVtLlN0cmluZydcclxuICAgICAgIH0sXHJcbiAgICAgICB7XHJcbiAgICAgICAgICAnJGlkJzogJzIxMTcnLFxyXG4gICAgICAgICAgJ2NvZGUnOiAnQXNzaWduZWRVc2VyJyxcclxuICAgICAgICAgICdsYWJlbCc6ICdBc3NpZ25lZCBVc2VyJyxcclxuICAgICAgICAgICd0eXBlJzogJ1N5c3RlbS5TdHJpbmcnXHJcbiAgICAgICB9LFxyXG4gICAgICAge1xyXG4gICAgICAgICAgJyRpZCc6ICcyMTE4JyxcclxuICAgICAgICAgICdjb2RlJzogJ0NhdGVnb3J5MV9JZCcsXHJcbiAgICAgICAgICAnbGFiZWwnOiAnQnVzaW5lc3MgQXJlYScsXHJcbiAgICAgICAgICAndHlwZSc6ICdTeXN0ZW0uU3RyaW5nJ1xyXG4gICAgICAgfSxcclxuICAgICAgIHtcclxuICAgICAgICAgICckaWQnOiAnMjExOScsXHJcbiAgICAgICAgICAnY29kZSc6ICdDYXRlZ29yeTNfSWQnLFxyXG4gICAgICAgICAgJ2xhYmVsJzogJ0NhdGVnb3J5JyxcclxuICAgICAgICAgICd0eXBlJzogJ1N5c3RlbS5TdHJpbmcnXHJcbiAgICAgICB9LFxyXG4gICAgICAge1xyXG4gICAgICAgICAgJyRpZCc6ICcyMTIwJyxcclxuICAgICAgICAgICdjb2RlJzogJ0hlYWx0aEZ1bmROdW1iZXInLFxyXG4gICAgICAgICAgJ2xhYmVsJzogJ0NsaWVudCBOdW1iZXInLFxyXG4gICAgICAgICAgJ3R5cGUnOiAnU3lzdGVtLlN0cmluZydcclxuICAgICAgIH0sXHJcbiAgICAgICB7XHJcbiAgICAgICAgICAnJGlkJzogJzIxMjEnLFxyXG4gICAgICAgICAgJ2NvZGUnOiAnRmlyc3ROYW1lJyxcclxuICAgICAgICAgICdsYWJlbCc6ICdGaXJzdCBOYW1lJyxcclxuICAgICAgICAgICd0eXBlJzogJ1N5c3RlbS5TdHJpbmcnXHJcbiAgICAgICB9LFxyXG4gICAgICAge1xyXG4gICAgICAgICAgJyRpZCc6ICcyMTIyJyxcclxuICAgICAgICAgICdjb2RlJzogJ1N1cm5hbWUnLFxyXG4gICAgICAgICAgJ2xhYmVsJzogJ1N1cm5hbWUnLFxyXG4gICAgICAgICAgJ3R5cGUnOiAnU3lzdGVtLlN0cmluZydcclxuICAgICAgIH0sXHJcbiAgICAgICB7XHJcbiAgICAgICAgICAnJGlkJzogJzIxMjMnLFxyXG4gICAgICAgICAgJ2NvZGUnOiAnQ2F0ZWdvcnkyX0lkJyxcclxuICAgICAgICAgICdsYWJlbCc6ICdQcm9kdWN0IFR5cGUnLFxyXG4gICAgICAgICAgJ3R5cGUnOiAnU3lzdGVtLlN0cmluZydcclxuICAgICAgIH0sXHJcbiAgICAgICB7XHJcbiAgICAgICAgICAnJGlkJzogJzIxMjQnLFxyXG4gICAgICAgICAgJ2NvZGUnOiAnUHJvdmlkZXJOYW1lJyxcclxuICAgICAgICAgICdsYWJlbCc6ICdQcm92aWRlciBOYW1lJyxcclxuICAgICAgICAgICd0eXBlJzogJ1N5c3RlbS5TdHJpbmcnXHJcbiAgICAgICB9LFxyXG4gICAgICAge1xyXG4gICAgICAgICAgJyRpZCc6ICcyMTI1JyxcclxuICAgICAgICAgICdjb2RlJzogJ1Byb3ZpZGVyTnVtYmVyJyxcclxuICAgICAgICAgICdsYWJlbCc6ICdQcm92aWRlciBOdW1iZXInLFxyXG4gICAgICAgICAgJ3R5cGUnOiAnU3lzdGVtLlN0cmluZydcclxuICAgICAgIH0sXHJcbiAgICAgICB7XHJcbiAgICAgICAgICAnJGlkJzogJzIxMjYnLFxyXG4gICAgICAgICAgJ2NvZGUnOiAnUmVmZXJlbmNlJyxcclxuICAgICAgICAgICdsYWJlbCc6ICdSZWZlcmVuY2UnLFxyXG4gICAgICAgICAgJ3R5cGUnOiAnU3lzdGVtLkludDMyJ1xyXG4gICAgICAgfSxcclxuICAgICAgIHtcclxuICAgICAgICAgICckaWQnOiAnMjEyNycsXHJcbiAgICAgICAgICAnY29kZSc6ICdSZWxhdGVkSXRlbScsXHJcbiAgICAgICAgICAnbGFiZWwnOiAnUmVsYXRlZCBJdGVtcycsXHJcbiAgICAgICAgICAndHlwZSc6ICdTeXN0ZW0uU3RyaW5nJ1xyXG4gICAgICAgfSxcclxuICAgICAgIHtcclxuICAgICAgICAgICckaWQnOiAnMjEyOCcsXHJcbiAgICAgICAgICAnY29kZSc6ICdfU0xBRXhwaXJ5U3RhdHVzJyxcclxuICAgICAgICAgICdsYWJlbCc6ICdfU0xBRXhwaXJ5U3RhdHVzJyxcclxuICAgICAgICAgICd0eXBlJzogJ1N5c3RlbS5TdHJpbmcnXHJcbiAgICAgICB9XHJcbiAgICBdLFxyXG4gICAgJ3Jlc3VsdHMnOiBbXHJcbiAgICAgICBbXHJcbiAgICAgICAgICAnY2EzYTEyMTktMDNlYi0xMWU5LTk2ODItMDA1MDU2YmE2NWU0JyxcclxuICAgICAgICAgICcyMDE4LTEyLTI0VDExOjExOjI3KzExOjAwJyxcclxuICAgICAgICAgICcyfDEwMDV8MTAxMXwwJyxcclxuICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAnQ29tcGxldGUnLFxyXG4gICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICdNZW1iZXIgSGVhbHRoJyxcclxuICAgICAgICAgICdCZW5lZml0IEVsaWdpYmlsaXR5JyxcclxuICAgICAgICAgICcyOTQwNTU2NCcsXHJcbiAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICdBbmNpbGxhcnkgQmVuZWZpdHMgTWFuYWdlbWVudCcsXHJcbiAgICAgICAgICAnJyxcclxuICAgICAgICAgICcyNScsXHJcbiAgICAgICAgICAxNzc4LFxyXG4gICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICd3aXRoaW4nXHJcbiAgICAgICBdLFxyXG4gICAgICAgW1xyXG4gICAgICAgICAgJzYwM2I4MmZmLTAzZTYtMTFlOS05NjgyLTAwNTA1NmJhNjVlNCcsXHJcbiAgICAgICAgICAnMjAxOC0xMi0yNFQxMDozMjo0MSsxMTowMCcsXHJcbiAgICAgICAgICAnMnwxMDAyfDEwMzd8MCcsXHJcbiAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgJ0NvbXBsZXRlJyxcclxuICAgICAgICAgICdMZW8gU2FudG9zJyxcclxuICAgICAgICAgICdNZW1iZXIgSGVhbHRoJyxcclxuICAgICAgICAgICdCZW5lZml0IEVsaWdpYmlsaXR5JyxcclxuICAgICAgICAgICcyOTQwNTU2NCcsXHJcbiAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICdDbGluaWNhbCBSZXZpZXcnLFxyXG4gICAgICAgICAgJycsXHJcbiAgICAgICAgICAnMjQnLFxyXG4gICAgICAgICAgMTc3NixcclxuICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAnd2l0aGluJ1xyXG4gICAgICAgXSxcclxuICAgICAgIFtcclxuICAgICAgICAgICcyYjQ3MDFmNS0wM2U2LTExZTktOTY4Mi0wMDUwNTZiYTY1ZTQnLFxyXG4gICAgICAgICAgJzIwMTgtMTItMjRUMTA6MzE6MTIrMTE6MDAnLFxyXG4gICAgICAgICAgJzJ8MTAwNXwxMDEwfDAnLFxyXG4gICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICdBY3RpdmUnLFxyXG4gICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICdNZW1iZXIgSGVhbHRoJyxcclxuICAgICAgICAgICdCZW5lZml0IFJldmlldycsXHJcbiAgICAgICAgICAnMjk0MDU1NjQnLFxyXG4gICAgICAgICAgbnVsbCxcclxuICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAnQW5jaWxsYXJ5IEJlbmVmaXRzIE1hbmFnZW1lbnQnLFxyXG4gICAgICAgICAgJycsXHJcbiAgICAgICAgICAnMjInLFxyXG4gICAgICAgICAgMTc3NSxcclxuICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAnd2l0aGluJ1xyXG4gICAgICAgXSxcclxuICAgICAgIFtcclxuICAgICAgICAgICdmMmU0Y2U1Ny0wMzNkLTExZTktOTY4Mi0wMDUwNTZiYTY1ZTQnLFxyXG4gICAgICAgICAgJzIwMTgtMTItMjFUMTQ6Mjc6MDIrMTE6MDAnLFxyXG4gICAgICAgICAgJzJ8MTAwNXwxMDE0fDAnLFxyXG4gICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICdDb21wbGV0ZScsXHJcbiAgICAgICAgICAnRGV2YXNoaSBXZXN1bXBlcnVtYScsXHJcbiAgICAgICAgICAnTWVtYmVyIEhlYWx0aCcsXHJcbiAgICAgICAgICAnSW52ZXN0aWdhdGlvbicsXHJcbiAgICAgICAgICAnMjk0MDU1NjQnLFxyXG4gICAgICAgICAgbnVsbCxcclxuICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAnQW5jaWxsYXJ5IEJlbmVmaXRzIE1hbmFnZW1lbnQnLFxyXG4gICAgICAgICAgJycsXHJcbiAgICAgICAgICAnMTknLFxyXG4gICAgICAgICAgMTc2OSxcclxuICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAnd2l0aGluJ1xyXG4gICAgICAgXSxcclxuICAgICAgIFtcclxuICAgICAgICAgICc2ZDU3NWM2Yy0wMzI3LTExZTktOTY4Mi0wMDUwNTZiYTY1ZTQnLFxyXG4gICAgICAgICAgJzIwMTgtMTItMjFUMTE6NDU6NDkrMTE6MDAnLFxyXG4gICAgICAgICAgJzJ8MTAwNnwxMDEyfDAnLFxyXG4gICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICdDb21wbGV0ZScsXHJcbiAgICAgICAgICAnVmluaCBUYW5nJyxcclxuICAgICAgICAgICdNZW1iZXIgSGVhbHRoJyxcclxuICAgICAgICAgICdVbmNsYXNzaWZpZWQnLFxyXG4gICAgICAgICAgJzI5NDA1NTY0JyxcclxuICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgJ1VuY2xhc3NpZmllZCcsXHJcbiAgICAgICAgICAnJyxcclxuICAgICAgICAgICcxOCcsXHJcbiAgICAgICAgICAxNzY4LFxyXG4gICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICd3aXRoaW4nXHJcbiAgICAgICBdLFxyXG4gICAgICAgW1xyXG4gICAgICAgICAgJ2Q0MTdjMDU3LTAzMjYtMTFlOS05NjgyLTAwNTA1NmJhNjVlNCcsXHJcbiAgICAgICAgICAnMjAxOC0xMi0yMVQxMTo0MTozMisxMTowMCcsXHJcbiAgICAgICAgICAnMnwxMDA2fDEwMTJ8MCcsXHJcbiAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgJ0NvbXBsZXRlJyxcclxuICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAnTWVtYmVyIEhlYWx0aCcsXHJcbiAgICAgICAgICAnVW5jbGFzc2lmaWVkJyxcclxuICAgICAgICAgICcyOTQwNTU2NCcsXHJcbiAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICdVbmNsYXNzaWZpZWQnLFxyXG4gICAgICAgICAgJycsXHJcbiAgICAgICAgICAnMTcnLFxyXG4gICAgICAgICAgMTc2NyxcclxuICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAnd2l0aGluJ1xyXG4gICAgICAgXSxcclxuICAgICAgIFtcclxuICAgICAgICAgICdmNzJhNWIwNS0wMzI1LTExZTktOTY4Mi0wMDUwNTZiYTY1ZTQnLFxyXG4gICAgICAgICAgJzIwMTgtMTItMjFUMTE6MzU6MjIrMTE6MDAnLFxyXG4gICAgICAgICAgJzJ8MTAwNHwxMDE3fDAnLFxyXG4gICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICdDb21wbGV0ZScsXHJcbiAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgJ01lbWJlciBIZWFsdGgnLFxyXG4gICAgICAgICAgJ0V4Z3JhdGlhJyxcclxuICAgICAgICAgICcyOTQwNTU2NCcsXHJcbiAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICdDb21wZW5zYWJsZScsXHJcbiAgICAgICAgICAnJyxcclxuICAgICAgICAgICcxNicsXHJcbiAgICAgICAgICAxNzY2LFxyXG4gICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICd3aXRoaW4nXHJcbiAgICAgICBdLFxyXG4gICAgICAgW1xyXG4gICAgICAgICAgJ2U4OGZlZmU3LTAzMjUtMTFlOS05NjgyLTAwNTA1NmJhNjVlNCcsXHJcbiAgICAgICAgICAnMjAxOC0xMi0yMVQxMTozNDo1NysxMTowMCcsXHJcbiAgICAgICAgICAnMnwxMDA1fDEwMTB8MCcsXHJcbiAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgJ0NvbXBsZXRlJyxcclxuICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAnTWVtYmVyIEhlYWx0aCcsXHJcbiAgICAgICAgICAnQmVuZWZpdCBSZXZpZXcnLFxyXG4gICAgICAgICAgJzI5NDA1NTY0JyxcclxuICAgICAgICAgbnVsbCxcclxuICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAnQW5jaWxsYXJ5IEJlbmVmaXRzIE1hbmFnZW1lbnQnLFxyXG4gICAgICAgICAgJycsXHJcbiAgICAgICAgICAnMTUnLFxyXG4gICAgICAgICAgMTc2NSxcclxuICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAnd2l0aGluJ1xyXG4gICAgICAgXSxcclxuICAgICAgIFtcclxuICAgICAgICAgICc2NDRlM2Q4Yy0wMzI1LTExZTktOTY4Mi0wMDUwNTZiYTY1ZTQnLFxyXG4gICAgICAgICAgJzIwMTgtMTItMjFUMTE6MzE6MTUrMTE6MDAnLFxyXG4gICAgICAgICAgJzJ8MTAwNXwxMDEwfDAnLFxyXG4gICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICdDb21wbGV0ZScsXHJcbiAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgJ01lbWJlciBIZWFsdGgnLFxyXG4gICAgICAgICAgJ0JlbmVmaXQgUmV2aWV3JyxcclxuICAgICAgICAgICcyOTQwNTU2NCcsXHJcbiAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICdBbmNpbGxhcnkgQmVuZWZpdHMgTWFuYWdlbWVudCcsXHJcbiAgICAgICAgICAnJyxcclxuICAgICAgICAgICcxNCcsXHJcbiAgICAgICAgICAxNzY0LFxyXG4gICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICd3aXRoaW4nXHJcbiAgICAgICBdLFxyXG4gICAgICAgW1xyXG4gICAgICAgICAgJzM1ODhlNjc4LTAzMjUtMTFlOS05NjgyLTAwNTA1NmJhNjVlNCcsXHJcbiAgICAgICAgICAnMjAxOC0xMi0yMVQxMToyOTo1NysxMTowMCcsXHJcbiAgICAgICAgICAnMnwxMDAzfDEwMzF8MCcsXHJcbiAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgJ0NvbXBsZXRlJyxcclxuICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAnTWVtYmVyIEhlYWx0aCcsXHJcbiAgICAgICAgICAnSW52ZXN0aWdhdGlvbicsXHJcbiAgICAgICAgICAnMjk0MDU1NjQnLFxyXG4gICAgICAgICAgbnVsbCxcclxuICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAnSW52ZXN0aWdhdGlvbnMnLFxyXG4gICAgICAgICAgJycsXHJcbiAgICAgICAgICAnMTMnLFxyXG4gICAgICAgICAgMTc2MyxcclxuICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAnd2l0aGluJ1xyXG4gICAgICAgXVxyXG4gICAgXVxyXG4gfSA7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgICBwcm92aWRlZEluOiBudWxsIC8vICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgU2VhcmNoRGF0YVNvdXJjZVNlcnZpY2UgaW1wbGVtZW50cyBJRGF0YVNvdXJjZSB7XHJcblxyXG4gICAgcmVhZG9ubHkgU2xhRXhwaXJ5Q29sdW1uQ29kZSA9ICdfU0xBRXhwaXJ5U3RhdHVzJztcclxuICAgIHJlYWRvbmx5IE5leHRUYXNrQ29sdW1uQ29kZSA9ICdfTmV4dER1ZVRhc2snO1xyXG5cclxuICAgIHNlYXJjaERlZmluaXRpb25JZCA9IDA7XHJcbiAgICBzZWFyY2hPcHRpb25zOiBTZWFyY2hEYXRhU291cmNlT3B0aW9ucyA9IHt9IDtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHNlYXJjaERlZmluaXRpb25TZXJ2aWNlOiBVaVNlYXJjaERlZmluaXRpb25TZXJ2aWNlLCBwcml2YXRlIHNlYXJjaFNlcnZpY2U6IFdvcmtTZWFyY2hGb3VuZGF0aW9uU2VydmljZSkge1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBkZWZhdWx0T3B0aW9ucygpOiBEYXRhU291cmNlT3B0aW9ucyB7XHJcbiAgICAgICAgcmV0dXJuICh0aGlzLnNlYXJjaE9wdGlvbnMpIDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0RGVmYXVsdE9wdGlvbnMob3B0aW9uczogRGF0YVNvdXJjZU9wdGlvbnMpIHtcclxuICAgICAgICB0aGlzLnNlYXJjaE9wdGlvbnMgPSB7Li4ub3B0aW9uc30gOyAvLyBjbG9uZVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXRTZWFyY2hEZWZpbml0aW9uSWQoaWQ6IG51bWJlcik6IFNlYXJjaERhdGFTb3VyY2VTZXJ2aWNlIHtcclxuICAgICAgICB0aGlzLnNlYXJjaERlZmluaXRpb25JZCA9IGlkO1xyXG4gICAgICAgIHJldHVybiAodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgY29sdW1ucygpOiBPYnNlcnZhYmxlPERhdGFTb3VyY2VDb2x1bW5bXT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlYXJjaERlZmluaXRpb25TZXJ2aWNlLmdldCh0aGlzLnNlYXJjaERlZmluaXRpb25JZCkucGlwZTxEYXRhU291cmNlQ29sdW1uW10+KFxyXG4gICAgICAgICAgICBtYXAociA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjb2x1bW5zID0gci5zZWFyY2hGaWVsZHMubWFwPERhdGFTb3VyY2VDb2x1bW4+KHNmID0+IDxEYXRhU291cmNlQ29sdW1uPntcclxuICAgICAgICAgICAgICAgICAgICBjb2RlOiBzZi5maWVsZERlZmluaXRpb25JZCxcclxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogc2YuZmllbGRMYWJlbCxcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBzZi5maWVsZERhdGFUeXBlLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0YXR1czogc2YuZmllbGRTdGF0dXNcclxuICAgICAgICAgICAgICAgIH0pIDtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmFkZE9wdGlvbmFsQ29sdW1ucyhjb2x1bW5zKSA7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgKSA7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhZGRPcHRpb25hbENvbHVtbnMoY29sdW1uczogRGF0YVNvdXJjZUNvbHVtbltdKTogRGF0YVNvdXJjZUNvbHVtbltdIHtcclxuICAgICAgICBpZiAodGhpcy5zZWFyY2hPcHRpb25zKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNlYXJjaE9wdGlvbnMuaW5jbHVkZVNsYSkge1xyXG4gICAgICAgICAgICAgICAgLy8gQWRkIHRvIHN0YXJ0XHJcbiAgICAgICAgICAgICAgICBjb2x1bW5zLnVuc2hpZnQoPERhdGFTb3VyY2VDb2x1bW4+e1xyXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnU0xBJyxcclxuICAgICAgICAgICAgICAgICAgICBjb2RlOiB0aGlzLlNsYUV4cGlyeUNvbHVtbkNvZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ1NMQScsXHJcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzOiBEYXRhU291cmNlQ29sdW1uU3RhdHVzLlNlbGVjdGVkXHJcbiAgICAgICAgICAgICAgICB9KSA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRoaXMuc2VhcmNoT3B0aW9ucy5pbmNsdWRlTmV4dER1ZVRhc2spIHtcclxuICAgICAgICAgICAgICAgIC8vIEFkZCB0byBlbmRcclxuICAgICAgICAgICAgICAgIGNvbHVtbnMucHVzaCg8RGF0YVNvdXJjZUNvbHVtbj57XHJcbiAgICAgICAgICAgICAgICAgICAgY29kZTogdGhpcy5OZXh0VGFza0NvbHVtbkNvZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICdOZXh0IER1ZSBUYXNrJyxcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnSW5wdXQnLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0YXR1czogRGF0YVNvdXJjZUNvbHVtblN0YXR1cy5TZWxlY3RlZFxyXG4gICAgICAgICAgICAgICAgfSkgO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAoY29sdW1ucykgO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZWFkKHBhZ2U6IG51bWJlciwgcGFnZVNpemU6IG51bWJlciwgb3B0aW9uc0luOiBEYXRhU291cmNlT3B0aW9ucyk6IE9ic2VydmFibGU8RGF0YVNvdXJjZVJlc3VsdHM+IHtcclxuICAgICAgICBjb25zdCBvcHRpb25zOiBTZWFyY2hEYXRhU291cmNlT3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgLi4udGhpcy5zZWFyY2hPcHRpb25zLFxyXG4gICAgICAgICAgICAuLi5vcHRpb25zSW4sXHJcbiAgICAgICAgICAgIHBhZ2U6IHBhZ2UsXHJcbiAgICAgICAgICAgIHBhZ2VTaXplOiBwYWdlU2l6ZVxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICBjb25zdCBmaWx0ZXJCeSA9IHRoaXMubWFwUXVlcnlUb0ZpbHRlckJ5KG9wdGlvbnMucXVlcnkpIDtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZWFyY2hTZXJ2aWNlLmdldEZpbmRXb3JrSXRlbSh0aGlzLnNlYXJjaERlZmluaXRpb25JZCwgZmlsdGVyQnksIG9wdGlvbnMpXHJcbiAgICAgICAgICAgIC5waXBlPERhdGFTb3VyY2VSZXN1bHRzPihcclxuICAgICAgICAgICAgICAgIG1hcChyZXN1bHRzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0b3RhbDogcmVzdWx0cy50b3RhbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogdGhpcy5tYXBSZXN1bHRzKHJlc3VsdHMpXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgKiBUaGUgZGF0YSB0aGF0IGNvbWVzIGJhY2sgZnJvbSB0aGUgQVBJIGlzIGEgY29sdW1ucyBkZWZpbnRpb24gYW5kIGFuIGFycmF5XHJcbiAgICogb2YgYXJyYXkgb2YgZGF0YS4gV2UgbmVlZCB0byBtYXAgdGhpcyBpbnRvIGFuIGFycmF5IG9mIG9iamVjdHMgd2l0aCB0aGUgY29sdW1uIHByb3BlcnR5XHJcbiAgICogaWQgYXMgdGhlIG9iamVjdCBrZXkgc28gdGhhdCBpdCdzIGVhc2llciB0byBoYW5kbGUgYnkgdGhlIHRhYmxlLlxyXG4gICAqIEBwYXJhbSBtb2RlbFxyXG4gICAqL1xyXG4gICAgcHJpdmF0ZSBtYXBSZXN1bHRzKG1vZGVsOiBGb3VuZGF0aW9uV29ya0ZpbmRXb3JrSXRlbVJlc3VsdE1vZGVsKTogYW55W10ge1xyXG5cclxuICAgICAgICBjb25zdCBkYXRhOiBhbnlbXVtdID0gbW9kZWwucmVzdWx0cztcclxuICAgICAgICBsZXQgcmVzdWx0czogYW55W107XHJcblxyXG4gICAgICAgIGlmIChtb2RlbCAmJiBtb2RlbC50b3RhbCA+IDAgJiYgbW9kZWwucmVzdWx0cyAmJiBtb2RlbC5jb2x1bW5zKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbERlZnM6IEZvdW5kYXRpb25Xb3JrRmluZFdvcmtJdGVtQ29sdW1uRGVmTW9kZWxbXSA9IG1vZGVsLmNvbHVtbnM7XHJcblxyXG4gICAgICAgICAgICByZXN1bHRzID0gbW9kZWwucmVzdWx0cy5tYXA8YW55PihyID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGFSb3c6IGFueVtdID0gcjtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG9iamVjdFJvdzogYW55ID0ge307XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IGNvbERlZnMubGVuZ3RoOyBjKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb2x1bW5EZWYgPSBjb2xEZWZzW2NdO1xyXG4gICAgICAgICAgICAgICAgICAgIG9iamVjdFJvd1tjb2x1bW5EZWYuY29kZV0gPSBkYXRhUm93W2NdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIChvYmplY3RSb3cpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdHMgO1xyXG4gICAgfVxyXG5cclxuICAgIC8vICBJbiBvcmRlciB0byB1c2UgdGhlIGZvdW5kYXRpb24gc2VydmljZSB3ZSBuZWVkIHRvIG1hcCB0aGUgRGF0YVNvdXJjZVF1ZXJ5IGludG8gXHJcbiAgICAvLyAgdGhlIHVuZGVybHlpbmcgZm91bmRhdGlvbiBxdWVyeVxyXG4gICAgLy8gXHR7XHJcbiAgICAvLyBcdFx0J2ZpbHRlcnMnOiBbXHJcbiAgICAvLyBcdCAgXHRcdHtcclxuICAgIC8vIFx0XHRcdFx0J2ZpZWxkJzogJ3N0cmluZycsXHJcbiAgICAvLyBcdFx0XHRcdCdvcGVyYXRvcic6ICdzdHJpbmcnLFxyXG4gICAgLy8gXHRcdFx0XHQndmFsdWUnOiAnc3RyaW5nJ1xyXG4gICAgLy8gXHQgIFx0XHR9XHJcbiAgICAvLyBcdFx0XSxcclxuICAgIC8vIFx0XHQnbG9naWMnOiAnc3RyaW5nJ1xyXG4gICAgLy8gXHR9XHJcbiAgICBwcml2YXRlIG1hcFF1ZXJ5VG9GaWx0ZXJCeShxdWVyeTogRGF0YVNvdXJjZVF1ZXJ5KTogYW55IHtcclxuICAgICAgICBsZXQgZmlsdGVyQnkgPSB7fSA7XHJcbiAgICAgICAgaWYgKHF1ZXJ5ICYmIHF1ZXJ5LkV4cHJlc3Npb25zICYmIHF1ZXJ5LkV4cHJlc3Npb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgY29uc3QgZmlsdGVycyA9IHF1ZXJ5LkV4cHJlc3Npb25zXHJcbiAgICAgICAgICAgICAgICAuZmlsdGVyKCBlID0+IGUuVmFsdWUgKVxyXG4gICAgICAgICAgICAgICAgLm1hcCggZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQgOiBlLkZpZWxkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA6IGUuVmFsdWVcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgfSkgO1xyXG4gICAgICAgICAgICBmaWx0ZXJCeSA9IHtcclxuICAgICAgICAgICAgICAgIGZpbHRlcnMgOiBmaWx0ZXJzXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAoZmlsdGVyQnkpIDtcclxuICAgIH1cclxufSJdfQ==