e5core-angular-ui
Version:
e5 Anywhere Angular UI
511 lines • 42.5 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
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 {?} */
const 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'
]
]
};
export class SearchDataSourceService {
/**
* @param {?} searchDefinitionService
* @param {?} searchService
*/
constructor(searchDefinitionService, searchService) {
this.searchDefinitionService = searchDefinitionService;
this.searchService = searchService;
this.SlaExpiryColumnCode = '_SLAExpiryStatus';
this.NextTaskColumnCode = '_NextDueTask';
this.searchDefinitionId = 0;
this.searchOptions = {};
}
/**
* @return {?}
*/
defaultOptions() {
return (this.searchOptions);
}
/**
* @param {?} options
* @return {?}
*/
setDefaultOptions(options) {
this.searchOptions = Object.assign({}, options); // clone
}
/**
* @param {?} id
* @return {?}
*/
setSearchDefinitionId(id) {
this.searchDefinitionId = id;
return (this);
}
/**
* @return {?}
*/
columns() {
return this.searchDefinitionService.get(this.searchDefinitionId).pipe(map(r => {
/** @type {?} */
const columns = r.searchFields.map(sf => (/** @type {?} */ ({
code: sf.fieldDefinitionId,
label: sf.fieldLabel,
type: sf.fieldDataType,
status: sf.fieldStatus
})));
return this.addOptionalColumns(columns);
}));
}
/**
* @private
* @param {?} columns
* @return {?}
*/
addOptionalColumns(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 {?}
*/
read(page, pageSize, optionsIn) {
/** @type {?} */
const options = Object.assign({}, this.searchOptions, optionsIn, { page: page, pageSize: pageSize });
/** @type {?} */
const filterBy = this.mapQueryToFilterBy(options.query);
return this.searchService.getFindWorkItem(this.searchDefinitionId, filterBy, options)
.pipe(map(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.
* @private
* @param {?} model
* @return {?}
*/
mapResults(model) {
/** @type {?} */
const data = model.results;
/** @type {?} */
let results;
if (model && model.total > 0 && model.results && model.columns) {
/** @type {?} */
const colDefs = model.columns;
results = model.results.map(r => {
/** @type {?} */
const dataRow = r;
/** @type {?} */
const objectRow = {};
for (let c = 0; c < colDefs.length; c++) {
/** @type {?} */
const columnDef = colDefs[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'
// }
/**
* @private
* @param {?} query
* @return {?}
*/
mapQueryToFilterBy(query) {
/** @type {?} */
let filterBy = {};
if (query && query.Expressions && query.Expressions.length > 0) {
/** @type {?} */
const filters = query.Expressions
.filter(e => e.Value)
.map(e => {
return {
field: e.Field,
value: e.Value
};
});
filterBy = {
filters: filters
};
}
return (filterBy);
}
}
SearchDataSourceService.decorators = [
{ type: Injectable, args: [{
providedIn: null // 'root'
},] }
];
/** @nocollapse */
SearchDataSourceService.ctorParameters = () => [
{ 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 });
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLWRhdGEtc291cmNlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9lNWNvcmUtYW5ndWxhci11aS8iLCJzb3VyY2VzIjpbImxpYi9kYXRhc291cmNlL3NlYXJjaC1kYXRhLXNvdXJjZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFFQSxPQUFPLEVBQUUsR0FBRyxFQUFjLE1BQU0sZ0JBQWdCLENBQUM7QUFDakQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNqRyxPQUFPLEVBQW9CLHNCQUFzQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7Ozs7TUFRMUUsUUFBUSxHQUFHO0lBQ2IsS0FBSyxFQUFFLE1BQU07SUFDYixhQUFhLEVBQUUsQ0FBQztJQUNoQixNQUFNLEVBQUUsQ0FBQztJQUNULFVBQVUsRUFBRSxFQUFFO0lBQ2QsYUFBYSxFQUFFLEVBQUU7SUFDakIsT0FBTyxFQUFFLEVBQUU7SUFDWCxTQUFTLEVBQUU7UUFDUjtZQUNHLEtBQUssRUFBRSxNQUFNO1lBQ2IsTUFBTSxFQUFFLElBQUk7WUFDWixPQUFPLEVBQUUsU0FBUztZQUNsQixNQUFNLEVBQUUsYUFBYTtTQUN2QjtRQUNEO1lBQ0csS0FBSyxFQUFFLE1BQU07WUFDYixNQUFNLEVBQUUsZUFBZTtZQUN2QixPQUFPLEVBQUUsVUFBVTtZQUNuQixNQUFNLEVBQUUsaUJBQWlCO1NBQzNCO1FBQ0Q7WUFDRyxLQUFLLEVBQUUsTUFBTTtZQUNiLE1BQU0sRUFBRSxZQUFZO1lBQ3BCLE9BQU8sRUFBRSxZQUFZO1lBQ3JCLE1BQU0sRUFBRSxlQUFlO1NBQ3pCO1FBQ0Q7WUFDRyxLQUFLLEVBQUUsTUFBTTtZQUNiLE1BQU0sRUFBRSxjQUFjO1lBQ3RCLE9BQU8sRUFBRSxlQUFlO1lBQ3hCLE1BQU0sRUFBRSxlQUFlO1NBQ3pCO1FBQ0Q7WUFD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Q29udGVudCI6WyJpbXBvcnQgeyBJRGF0YVNvdXJjZSB9IGZyb20gJy4vZGF0YS1zb3VyY2UnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IG1hcCwgY2F0Y2hFcnJvciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBVaVNlYXJjaERlZmluaXRpb25TZXJ2aWNlLCBXb3JrU2VhcmNoRm91bmRhdGlvblNlcnZpY2UgfSBmcm9tICdlNWNvcmUtYW5ndWxhci1zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IERhdGFTb3VyY2VDb2x1bW4sIERhdGFTb3VyY2VDb2x1bW5TdGF0dXMgfSBmcm9tICcuL2RhdGEtc291cmNlLWNvbHVtbic7XHJcbmltcG9ydCB7IERhdGFTb3VyY2VSZXN1bHRzIH0gZnJvbSAnLi9kYXRhLXNvdXJjZS1yZXN1bHRzJztcclxuaW1wb3J0IHsgRm91bmRhdGlvbldvcmtGaW5kV29ya0l0ZW1SZXN1bHRNb2RlbCB9IGZyb20gJ2U1Y29yZS1hbmd1bGFyLXNlcnZpY2VzJztcclxuaW1wb3J0IHsgRm91bmRhdGlvbldvcmtGaW5kV29ya0l0ZW1Db2x1bW5EZWZNb2RlbCB9IGZyb20gJ2U1Y29yZS1hbmd1bGFyLXNlcnZpY2VzJztcclxuaW1wb3J0IHsgU2VhcmNoRGF0YVNvdXJjZU9wdGlvbnMgfSBmcm9tICcuL3NlYXJjaC1kYXRhLXNvdXJjZS1vcHRpb25zJztcclxuaW1wb3J0IHsgRGF0YVNvdXJjZU9wdGlvbnMgfSBmcm9tICcuL2RhdGEtc291cmNlLW9wdGlvbnMnO1xyXG5pbXBvcnQgeyBEYXRhU291cmNlUXVlcnkgfSBmcm9tICcuL2RhdGEtc291cmNlLXF1ZXJ5JztcclxuXHJcbmNvbnN0IFRFU1REQVRBID0ge1xyXG4gICAgJyRpZCc6ICcyMTExJyxcclxuICAgICdmaW5kQ2xhc3NJZCc6IDQsXHJcbiAgICAncGFnZSc6IDAsXHJcbiAgICAncGFnZVNpemUnOiAxMCxcclxuICAgICdyZXN1bHRDb3VudCc6IDEwLFxyXG4gICAgJ3RvdGFsJzogMjQsXHJcbiAgICAnY29sdW1ucyc6IFtcclxuICAgICAgIHtcclxuICAgICAgICAgICckaWQnOiAnMjExMicsXHJcbiAgICAgICAgICAnY29kZSc6ICdJZCcsXHJcbiAgICAgICAgICAnbGFiZWwnOiAnV29yayBJZCcsXHJcbiAgICAgICAgICAndHlwZSc6ICdTeXN0ZW0uR3VpZCdcclxuICAgICAgIH0sXHJcbiAgICAgICB7XHJcbiAgICAgICAgICAnJGlkJzogJzIxMTMnLFxyXG4gICAgICAgICAgJ2NvZGUnOiAnU0xBRXhwaXJ5RGF0ZScsXHJcbiAgICAgICAgICAnbGFiZWwnOiAnRHVlIERhdGUnLFxyXG4gICAgICAgICAgJ3R5cGUnOiAnU3lzdGVtLkRhdGVUaW1lJ1xyXG4gICAgICAgfSxcclxuICAgICAgIHtcclxuICAgICAgICAgICckaWQnOiAnMjExNCcsXHJcbiAgICAgICAgICAnY29kZSc6ICdBbGxvY2F0aW9uJyxcclxuICAgICAgICAgICdsYWJlbCc6ICdBbGxvY2F0aW9uJyxcclxuICAgICAgICAgICd0eXBlJzogJ1N5c3RlbS5TdHJpbmcnXHJcbiAgICAgICB9LFxyXG4gICAgICAge1xyXG4gICAgICAgICAgJyRpZCc6ICcyMTE1JyxcclxuICAgICAgICAgICdjb2RlJzogJ19OZXh0RHVlVGFzaycsXHJcbiAgICAgICAgICAnbGFiZWwnOiAnTmV4dCBEdWUgVGFzaycsXHJcbiAgICAgICAgICAndHlwZSc6ICdTeXN0ZW0uU3RyaW5nJ1xyXG4gICAgICAgfSxcclxuICAgICAgIHtcclxuICAgICAgICAgICckaWQnOiAnMjExNicsXHJcbiAgICAgICAgICAnY29kZSc6ICdTdGF0dXNfSWQnLFxyXG4gICAgICAgICAgJ2xhYmVsJzogJ1N0YXR1cycsXHJcbiAgICAgICAgICAndHlwZSc6ICdTeXN0ZW0uU3RyaW5nJ1xyXG4gICAgICAgfSxcclxuICAgICAgIHtcclxuICAgICAgICAgICckaWQnOiAnMjExNycsXHJcbiAgICAgICAgICAnY29kZSc6ICdBc3NpZ25lZFVzZXInLFxyXG4gICAgICAgICAgJ2xhYmVsJzogJ0Fzc2lnbmVkIFVzZXInLFxyXG4gICAgICAgICAgJ3R5cGUnOiAnU3lzdGVtLlN0cmluZydcclxuICAgICAgIH0sXHJcbiAgICAgICB7XHJcbiAgICAgICAgICAnJGlkJzogJzIxMTgnLFxyXG4gICAgICAgICAgJ2NvZGUnOiAnQ2F0ZWdvcnkxX0lkJyxcclxuICAgICAgICAgICdsYWJlbCc6ICdCdXNpbmVzcyBBcmVhJyxcclxuICAgICAgICAgICd0eXBlJzogJ1N5c3RlbS5TdHJpbmcnXHJcbiAgICAgICB9LFxyXG4gICAgICAge1xyXG4gICAgICAgICAgJyRpZCc6ICcyMTE5JyxcclxuICAgICAgICAgICdjb2RlJzogJ0NhdGVnb3J5M19JZCcsXHJcbiAgICAgICAgICAnbGFiZWwnOiAnQ2F0ZWdvcnknLFxyXG4gICAgICAgICAgJ3R5cGUnOiAnU3lzdGVtLlN0cmluZydcclxuICAgICAgIH0sXHJcbiAgICAgICB7XHJcbiAgICAgICAgICAnJGlkJzogJzIxMjAnLFxyXG4gICAgICAgICAgJ2NvZGUnOiAnSGVhbHRoRnVuZE51bWJlcicsXHJcbiAgICAgICAgICAnbGFiZWwnOiAnQ2xpZW50IE51bWJlcicsXHJcbiAgICAgICAgICAndHlwZSc6ICdTeXN0ZW0uU3RyaW5nJ1xyXG4gICAgICAgfSxcclxuICAgICAgIHtcclxuICAgICAgICAgICckaWQnOiAnMjEyMScsXHJcbiAgICAgICAgICAnY29kZSc6ICdGaXJzdE5hbWUnLFxyXG4gICAgICAgICAgJ2xhYmVsJzogJ0ZpcnN0IE5hbWUnLFxyXG4gICAgICAgICAgJ3R5cGUnOiAnU3lzdGVtLlN0cmluZydcclxuICAgICAgIH0sXHJcbiAgICAgICB7XHJcbiAgICAgICAgICAnJGlkJzogJzIxMjInLFxyXG4gICAgICAgICAgJ2NvZGUnOiAnU3VybmFtZScsXHJcbiAgICAgICAgICAnbGFiZWwnOiAnU3VybmFtZScsXHJcbiAgICAgICAgICAndHlwZSc6ICdTeXN0ZW0uU3RyaW5nJ1xyXG4gICAgICAgfSxcclxuICAgICAgIHtcclxuICAgICAgICAgICckaWQnOiAnMjEyMycsXHJcbiAgICAgICAgICAnY29kZSc6ICdDYXRlZ29yeTJfSWQnLFxyXG4gICAgICAgICAgJ2xhYmVsJzogJ1Byb2R1Y3QgVHlwZScsXHJcbiAgICAgICAgICAndHlwZSc6ICdTeXN0ZW0uU3RyaW5nJ1xyXG4gICAgICAgfSxcclxuICAgICAgIHtcclxuICAgICAgICAgICckaWQnOiAnMjEyNCcsXHJcbiAgICAgICAgICAnY29kZSc6ICdQcm92aWRlck5hbWUnLFxyXG4gICAgICAgICAgJ2xhYmVsJzogJ1Byb3ZpZGVyIE5hbWUnLFxyXG4gICAgICAgICAgJ3R5cGUnOiAnU3lzdGVtLlN0cmluZydcclxuICAgICAgIH0sXHJcbiAgICAgICB7XHJcbiAgICAgICAgICAnJGlkJzogJzIxMjUnLFxyXG4gICAgICAgICAgJ2NvZGUnOiAnUHJvdmlkZXJOdW1iZXInLFxyXG4gICAgICAgICAgJ2xhYmVsJzogJ1Byb3ZpZGVyIE51bWJlcicsXHJcbiAgICAgICAgICAndHlwZSc6ICdTeXN0ZW0uU3RyaW5nJ1xyXG4gICAgICAgfSxcclxuICAgICAgIHtcclxuICAgICAgICAgICckaWQnOiAnMjEyNicsXHJcbiAgICAgICAgICAnY29kZSc6ICdSZWZlcmVuY2UnLFxyXG4gICAgICAgICAgJ2xhYmVsJzogJ1JlZmVyZW5jZScsXHJcbiAgICAgICAgICAndHlwZSc6ICdTeXN0ZW0uSW50MzInXHJcbiAgICAgICB9LFxyXG4gICAgICAge1xyXG4gICAgICAgICAgJyRpZCc6ICcyMTI3JyxcclxuICAgICAgICAgICdjb2RlJzogJ1JlbGF0ZWRJdGVtJyxcclxuICAgICAgICAgICdsYWJlbCc6ICdSZWxhdGVkIEl0ZW1zJyxcclxuICAgICAgICAgICd0eXBlJzogJ1N5c3RlbS5TdHJpbmcnXHJcbiAgICAgICB9LFxyXG4gICAgICAge1xyXG4gICAgICAgICAgJyRpZCc6ICcyMTI4JyxcclxuICAgICAgICAgICdjb2RlJzogJ19TTEFFeHBpcnlTdGF0dXMnLFxyXG4gICAgICAgICAgJ2xhYmVsJzogJ19TTEFFeHBpcnlTdGF0dXMnLFxyXG4gICAgICAgICAgJ3R5cGUnOiAnU3lzdGVtLlN0cmluZydcclxuICAgICAgIH1cclxuICAgIF0sXHJcbiAgICAncmVzdWx0cyc6IFtcclxuICAgICAgIFtcclxuICAgICAgICAgICdjYTNhMTIxOS0wM2ViLTExZTktOTY4Mi0wMDUwNTZiYTY1ZTQnLFxyXG4gICAgICAgICAgJzIwMTgtMTItMjRUMTE6MTE6MjcrMTE6MDAnLFxyXG4gICAgICAgICAgJzJ8MTAwNXwxMDExfDAnLFxyXG4gICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICdDb21wbGV0ZScsXHJcbiAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgJ01lbWJlciBIZWFsdGgnLFxyXG4gICAgICAgICAgJ0JlbmVmaXQgRWxpZ2liaWxpdHknLFxyXG4gICAgICAgICAgJzI5NDA1NTY0JyxcclxuICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgJ0FuY2lsbGFyeSBCZW5lZml0cyBNYW5hZ2VtZW50JyxcclxuICAgICAgICAgICcnLFxyXG4gICAgICAgICAgJzI1JyxcclxuICAgICAgICAgIDE3NzgsXHJcbiAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgJ3dpdGhpbidcclxuICAgICAgIF0sXHJcbiAgICAgICBbXHJcbiAgICAgICAgICAnNjAzYjgyZmYtMDNlNi0xMWU5LTk2ODItMDA1MDU2YmE2NWU0JyxcclxuICAgICAgICAgICcyMDE4LTEyLTI0VDEwOjMyOjQxKzExOjAwJyxcclxuICAgICAgICAgICcyfDEwMDJ8MTAzN3wwJyxcclxuICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAnQ29tcGxldGUnLFxyXG4gICAgICAgICAgJ0xlbyBTYW50b3MnLFxyXG4gICAgICAgICAgJ01lbWJlciBIZWFsdGgnLFxyXG4gICAgICAgICAgJ0JlbmVmaXQgRWxpZ2liaWxpdHknLFxyXG4gICAgICAgICAgJzI5NDA1NTY0JyxcclxuICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgJ0NsaW5pY2FsIFJldmlldycsXHJcbiAgICAgICAgICAnJyxcclxuICAgICAgICAgICcyNCcsXHJcbiAgICAgICAgICAxNzc2LFxyXG4gICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICd3aXRoaW4nXHJcbiAgICAgICBdLFxyXG4gICAgICAgW1xyXG4gICAgICAgICAgJzJiNDcwMWY1LTAzZTYtMTFlOS05NjgyLTAwNTA1NmJhNjVlNCcsXHJcbiAgICAgICAgICAnMjAxOC0xMi0yNFQxMDozMToxMisxMTowMCcsXHJcbiAgICAgICAgICAnMnwxMDA1fDEwMTB8MCcsXHJcbiAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgJ0FjdGl2ZScsXHJcbiAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgJ01lbWJlciBIZWFsdGgnLFxyXG4gICAgICAgICAgJ0JlbmVmaXQgUmV2aWV3JyxcclxuICAgICAgICAgICcyOTQwNTU2NCcsXHJcbiAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICdBbmNpbGxhcnkgQmVuZWZpdHMgTWFuYWdlbWVudCcsXHJcbiAgICAgICAgICAnJyxcclxuICAgICAgICAgICcyMicsXHJcbiAgICAgICAgICAxNzc1LFxyXG4gICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICd3aXRoaW4nXHJcbiAgICAgICBdLFxyXG4gICAgICAgW1xyXG4gICAgICAgICAgJ2YyZTRjZTU3LTAzM2QtMTFlOS05NjgyLTAwNTA1NmJhNjVlNCcsXHJcbiAgICAgICAgICAnMjAxOC0xMi0yMVQxNDoyNzowMisxMTowMCcsXHJcbiAgICAgICAgICAnMnwxMDA1fDEwMTR8MCcsXHJcbiAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgJ0NvbXBsZXRlJyxcclxuICAgICAgICAgICdEZXZhc2hpIFdlc3VtcGVydW1hJyxcclxuICAgICAgICAgICdNZW1iZXIgSGVhbHRoJyxcclxuICAgICAgICAgICdJbnZlc3RpZ2F0aW9uJyxcclxuICAgICAgICAgICcyOTQwNTU2NCcsXHJcbiAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICdBbmNpbGxhcnkgQmVuZWZpdHMgTWFuYWdlbWVudCcsXHJcbiAgICAgICAgICAnJyxcclxuICAgICAgICAgICcxOScsXHJcbiAgICAgICAgICAxNzY5LFxyXG4gICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICd3aXRoaW4nXHJcbiAgICAgICBdLFxyXG4gICAgICAgW1xyXG4gICAgICAgICAgJzZkNTc1YzZjLTAzMjctMTFlOS05NjgyLTAwNTA1NmJhNjVlNCcsXHJcbiAgICAgICAgICAnMjAxOC0xMi0yMVQxMTo0NTo0OSsxMTowMCcsXHJcbiAgICAgICAgICAnMnwxMDA2fDEwMTJ8MCcsXHJcbiAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgJ0NvbXBsZXRlJyxcclxuICAgICAgICAgICdWaW5oIFRhbmcnLFxyXG4gICAgICAgICAgJ01lbWJlciBIZWFsdGgnLFxyXG4gICAgICAgICAgJ1VuY2xhc3NpZmllZCcsXHJcbiAgICAgICAgICAnMjk0MDU1NjQnLFxyXG4gICAgICAgICAgbnVsbCxcclxuICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAnVW5jbGFzc2lmaWVkJyxcclxuICAgICAgICAgICcnLFxyXG4gICAgICAgICAgJzE4JyxcclxuICAgICAgICAgIDE3NjgsXHJcbiAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgJ3dpdGhpbidcclxuICAgICAgIF0sXHJcbiAgICAgICBbXHJcbiAgICAgICAgICAnZDQxN2MwNTctMDMyNi0xMWU5LTk2ODItMDA1MDU2YmE2NWU0JyxcclxuICAgICAgICAgICcyMDE4LTEyLTIxVDExOjQxOjMyKzExOjAwJyxcclxuICAgICAgICAgICcyfDEwMDZ8MTAxMnwwJyxcclxuICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAnQ29tcGxldGUnLFxyXG4gICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICdNZW1iZXIgSGVhbHRoJyxcclxuICAgICAgICAgICdVbmNsYXNzaWZpZWQnLFxyXG4gICAgICAgICAgJzI5NDA1NTY0JyxcclxuICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgJ1VuY2xhc3NpZmllZCcsXHJcbiAgICAgICAgICAnJyxcclxuICAgICAgICAgICcxNycsXHJcbiAgICAgICAgICAxNzY3LFxyXG4gICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICd3aXRoaW4nXHJcbiAgICAgICBdLFxyXG4gICAgICAgW1xyXG4gICAgICAgICAgJ2Y3MmE1YjA1LTAzMjUtMTFlOS05NjgyLTAwNTA1NmJhNjVlNCcsXHJcbiAgICAgICAgICAnMjAxOC0xMi0yMVQxMTozNToyMisxMTowMCcsXHJcbiAgICAgICAgICAnMnwxMDA0fDEwMTd8MCcsXHJcbiAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgJ0NvbXBsZXRlJyxcclxuICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAnTWVtYmVyIEhlYWx0aCcsXHJcbiAgICAgICAgICAnRXhncmF0aWEnLFxyXG4gICAgICAgICAgJzI5NDA1NTY0JyxcclxuICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgJ0NvbXBlbnNhYmxlJyxcclxuICAgICAgICAgICcnLFxyXG4gICAgICAgICAgJzE2JyxcclxuICAgICAgICAgIDE3NjYsXHJcbiAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgJ3dpdGhpbidcclxuICAgICAgIF0sXHJcbiAgICAgICBbXHJcbiAgICAgICAgICAnZTg4ZmVmZTctMDMyNS0xMWU5LTk2ODItMDA1MDU2YmE2NWU0JyxcclxuICAgICAgICAgICcyMDE4LTEyLTIxVDExOjM0OjU3KzExOjAwJyxcclxuICAgICAgICAgICcyfDEwMDV8MTAxMHwwJyxcclxuICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAnQ29tcGxldGUnLFxyXG4gICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICdNZW1iZXIgSGVhbHRoJyxcclxuICAgICAgICAgICdCZW5lZml0IFJldmlldycsXHJcbiAgICAgICAgICAnMjk0MDU1NjQnLFxyXG4gICAgICAgICBudWxsLFxyXG4gICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICdBbmNpbGxhcnkgQmVuZWZpdHMgTWFuYWdlbWVudCcsXHJcbiAgICAgICAgICAnJyxcclxuICAgICAgICAgICcxNScsXHJcbiAgICAgICAgICAxNzY1LFxyXG4gICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICd3aXRoaW4nXHJcbiAgICAgICBdLFxyXG4gICAgICAgW1xyXG4gICAgICAgICAgJzY0NGUzZDhjLTAzMjUtMTFlOS05NjgyLTAwNTA1NmJhNjVlNCcsXHJcbiAgICAgICAgICAnMjAxOC0xMi0yMVQxMTozMToxNSsxMTowMCcsXHJcbiAgICAgICAgICAnMnwxMDA1fDEwMTB8MCcsXHJcbiAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgJ0NvbXBsZXRlJyxcclxuICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAnTWVtYmVyIEhlYWx0aCcsXHJcbiAgICAgICAgICAnQmVuZWZpdCBSZXZpZXcnLFxyXG4gICAgICAgICAgJzI5NDA1NTY0JyxcclxuICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgJ0FuY2lsbGFyeSBCZW5lZml0cyBNYW5hZ2VtZW50JyxcclxuICAgICAgICAgICcnLFxyXG4gICAgICAgICAgJzE0JyxcclxuICAgICAgICAgIDE3NjQsXHJcbiAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgJ3dpdGhpbidcclxuICAgICAgIF0sXHJcbiAgICAgICBbXHJcbiAgICAgICAgICAnMzU4OGU2NzgtMDMyNS0xMWU5LTk2ODItMDA1MDU2YmE2NWU0JyxcclxuICAgICAgICAgICcyMDE4LTEyLTIxVDExOjI5OjU3KzExOjAwJyxcclxuICAgICAgICAgICcyfDEwMDN8MTAzMXwwJyxcclxuICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAnQ29tcGxldGUnLFxyXG4gICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICdNZW1iZXIgSGVhbHRoJyxcclxuICAgICAgICAgICdJbnZlc3RpZ2F0aW9uJyxcclxuICAgICAgICAgICcyOTQwNTU2NCcsXHJcbiAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICdJbnZlc3RpZ2F0aW9ucycsXHJcbiAgICAgICAgICAnJyxcclxuICAgICAgICAgICcxMycsXHJcbiAgICAgICAgICAxNzYzLFxyXG4gICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICd3aXRoaW4nXHJcbiAgICAgICBdXHJcbiAgICBdXHJcbiB9IDtcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICAgIHByb3ZpZGVkSW46IG51bGwgLy8gJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTZWFyY2hEYXRhU291cmNlU2VydmljZSBpbXBsZW1lbnRzIElEYXRhU291cmNlIHtcclxuXHJcbiAgICByZWFkb25seSBTbGFFeHBpcnlDb2x1bW5Db2RlID0gJ19TTEFFeHBpcnlTdGF0dXMnO1xyXG4gICAgcmVhZG9ubHkgTmV4dFRhc2tDb2x1bW5Db2RlID0gJ19OZXh0RHVlVGFzayc7XHJcblxyXG4gICAgc2VhcmNoRGVmaW5pdGlvbklkID0gMDtcclxuICAgIHNlYXJjaE9wdGlvbnM6IFNlYXJjaERhdGFTb3VyY2VPcHRpb25zID0ge30gO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgc2VhcmNoRGVmaW5pdGlvblNlcnZpY2U6IFVpU2VhcmNoRGVmaW5pdGlvblNlcnZpY2UsIHByaXZhdGUgc2VhcmNoU2VydmljZTogV29ya1NlYXJjaEZvdW5kYXRpb25TZXJ2aWNlKSB7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRlZmF1bHRPcHRpb25zKCk6IERhdGFTb3VyY2VPcHRpb25zIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMuc2VhcmNoT3B0aW9ucykgO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXREZWZhdWx0T3B0aW9ucyhvcHRpb25zOiBEYXRhU291cmNlT3B0aW9ucykge1xyXG4gICAgICAgIHRoaXMuc2VhcmNoT3B0aW9ucyA9IHsuLi5vcHRpb25zfSA7IC8vIGNsb25lXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldFNlYXJjaERlZmluaXRpb25JZChpZDogbnVtYmVyKTogU2VhcmNoRGF0YVNvdXJjZVNlcnZpY2Uge1xyXG4gICAgICAgIHRoaXMuc2VhcmNoRGVmaW5pdGlvbklkID0gaWQ7XHJcbiAgICAgICAgcmV0dXJuICh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBjb2x1bW5zKCk6IE9ic2VydmFibGU8RGF0YVNvdXJjZUNvbHVtbltdPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VhcmNoRGVmaW5pdGlvblNlcnZpY2UuZ2V0KHRoaXMuc2VhcmNoRGVmaW5pdGlvbklkKS5waXBlPERhdGFTb3VyY2VDb2x1bW5bXT4oXHJcbiAgICAgICAgICAgIG1hcChyID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbHVtbnMgPSByLnNlYXJjaEZpZWxkcy5tYXA8RGF0YVNvdXJjZUNvbHVtbj4oc2YgPT4gPERhdGFTb3VyY2VDb2x1bW4+e1xyXG4gICAgICAgICAgICAgICAgICAgIGNvZGU6IHNmLmZpZWxkRGVmaW5pdGlvbklkLFxyXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiBzZi5maWVsZExhYmVsLFxyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IHNmLmZpZWxkRGF0YVR5cGUsXHJcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzOiBzZi5maWVsZFN0YXR1c1xyXG4gICAgICAgICAgICAgICAgfSkgO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWRkT3B0aW9uYWxDb2x1bW5zKGNvbHVtbnMpIDtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApIDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFkZE9wdGlvbmFsQ29sdW1ucyhjb2x1bW5zOiBEYXRhU291cmNlQ29sdW1uW10pOiBEYXRhU291cmNlQ29sdW1uW10ge1xyXG4gICAgICAgIGlmICh0aGlzLnNlYXJjaE9wdGlvbnMpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2VhcmNoT3B0aW9ucy5pbmNsdWRlU2xhKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBBZGQgdG8gc3RhcnRcclxuICAgICAgICAgICAgICAgIGNvbHVtbnMudW5zaGlmdCg8RGF0YVNvdXJjZUNvbHVtbj57XHJcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICdTTEEnLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvZGU6IHRoaXMuU2xhRXhwaXJ5Q29sdW1uQ29kZSxcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnU0xBJyxcclxuICAgICAgICAgICAgICAgICAgICBzdGF0dXM6IERhdGFTb3VyY2VDb2x1bW5TdGF0dXMuU2VsZWN0ZWRcclxuICAgICAgICAgICAgICAgIH0pIDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGhpcy5zZWFyY2hPcHRpb25zLmluY2x1ZGVOZXh0RHVlVGFzaykge1xyXG4gICAgICAgICAgICAgICAgLy8gQWRkIHRvIGVuZFxyXG4gICAgICAgICAgICAgICAgY29sdW1ucy5wdXNoKDxEYXRhU291cmNlQ29sdW1uPntcclxuICAgICAgICAgICAgICAgICAgICBjb2RlOiB0aGlzLk5leHRUYXNrQ29sdW1uQ29kZSxcclxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ05leHQgRHVlIFRhc2snLFxyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdJbnB1dCcsXHJcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzOiBEYXRhU291cmNlQ29sdW1uU3RhdHVzLlNlbGVjdGVkXHJcbiAgICAgICAgICAgICAgICB9KSA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIChjb2x1bW5zKSA7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlYWQocGFnZTogbnVtYmVyLCBwYWdlU2l6ZTogbnVtYmVyLCBvcHRpb25zSW46IERhdGFTb3VyY2VPcHRpb25zKTogT2JzZXJ2YWJsZTxEYXRhU291cmNlUmVzdWx0cz4ge1xyXG4gICAgICAgIGNvbnN0IG9wdGlvbnM6IFNlYXJjaERhdGFTb3VyY2VPcHRpb25zID0ge1xyXG4gICAgICAgICAgICAuLi50aGlzLnNlYXJjaE9wdGlvbnMsXHJcbiAgICAgICAgICAgIC4uLm9wdGlvbnNJbixcclxuICAgICAgICAgICAgcGFnZTogcGFnZSxcclxuICAgICAgICAgICAgcGFnZVNpemU6IHBhZ2VTaXplXHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIGNvbnN0IGZpbHRlckJ5ID0gdGhpcy5tYXBRdWVyeVRvRmlsdGVyQnkob3B0aW9ucy5xdWVyeSkgO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlYXJjaFNlcnZpY2UuZ2V0RmluZFdvcmtJdGVtKHRoaXMuc2VhcmNoRGVmaW5pdGlvbklkLCBmaWx0ZXJCeSwgb3B0aW9ucylcclxuICAgICAgICAgICAgLnBpcGU8RGF0YVNvdXJjZVJlc3VsdHM+KFxyXG4gICAgICAgICAgICAgICAgbWFwKHJlc3VsdHMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsOiByZXN1bHRzLnRvdGFsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiB0aGlzLm1hcFJlc3VsdHMocmVzdWx0cylcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAqIFRoZSBkYXRhIHRoYXQgY29tZXMgYmFjayBmcm9tIHRoZSBBUEkgaXMgYSBjb2x1bW5zIGRlZmludGlvbiBhbmQgYW4gYXJyYXlcclxuICAgKiBvZiBhcnJheSBvZiBkYXRhLiBXZSBuZWVkIHRvIG1hcCB0aGlzIGludG8gYW4gYXJyYXkgb2Ygb2JqZWN0cyB3aXRoIHRoZSBjb2x1bW4gcHJvcGVydHlcclxuICAgKiBpZCBhcyB0aGUgb2JqZWN0IGtleSBzbyB0aGF0IGl0J3MgZWFzaWVyIHRvIGhhbmRsZSBieSB0aGUgdGFibGUuXHJcbiAgICogQHBhcmFtIG1vZGVsXHJcbiAgICovXHJcbiAgICBwcml2YXRlIG1hcFJlc3VsdHMobW9kZWw6IEZvdW5kYXRpb25Xb3JrRmluZFdvcmtJdGVtUmVzdWx0TW9kZWwpOiBhbnlbXSB7XHJcblxyXG4gICAgICAgIGNvbnN0IGRhdGE6IGFueVtdW10gPSBtb2RlbC5yZXN1bHRzO1xyXG4gICAgICAgIGxldCByZXN1bHRzOiBhbnlbXTtcclxuXHJcbiAgICAgICAgaWYgKG1vZGVsICYmIG1vZGVsLnRvdGFsID4gMCAmJiBtb2RlbC5yZXN1bHRzICYmIG1vZGVsLmNvbHVtbnMpIHtcclxuICAgICAgICAgICAgY29uc3QgY29sRGVmczogRm91bmRhdGlvbldvcmtGaW5kV29ya0l0ZW1Db2x1bW5EZWZNb2RlbFtdID0gbW9kZWwuY29sdW1ucztcclxuXHJcbiAgICAgICAgICAgIHJlc3VsdHMgPSBtb2RlbC5yZXN1bHRzLm1hcDxhbnk+KHIgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZGF0YVJvdzogYW55W10gPSByO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgb2JqZWN0Um93OiBhbnkgPSB7fTtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgY29sRGVmcy5sZW5ndGg7IGMrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbHVtbkRlZiA9IGNvbERlZnNbY107XHJcbiAgICAgICAgICAgICAgICAgICAgb2JqZWN0Um93W2NvbHVtbkRlZi5jb2RlXSA9IGRhdGFSb3dbY107XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKG9iamVjdFJvdyk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0cyA7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gIEluIG9yZGVyIHRvIHVzZSB0aGUgZm91bmRhdGlvbiBzZXJ2aWNlIHdlIG5lZWQgdG8gbWFwIHRoZSBEYXRhU291cmNlUXVlcnkgaW50byBcclxuICAgIC8vICB0aGUgdW5kZXJseWluZyBmb3VuZGF0aW9uIHF1ZXJ5XHJcbiAgICAvLyBcdHtcclxuICAgIC8vIFx0XHQnZmlsdGVycyc6IFtcclxuICAgIC8vIFx0ICBcdFx0e1xyXG4gICAgLy8gXHRcdFx0XHQnZmllbGQnOiAnc3RyaW5nJyxcclxuICAgIC8vIFx0XHRcdFx0J29wZXJhdG9yJzogJ3N0cmluZycsXHJcbiAgICAvLyBcdFx0XHRcdCd2YWx1ZSc6ICdzdHJpbmcnXHJcbiAgICAvLyBcdCAgXHRcdH1cclxuICAgIC8vIFx0XHRdLFxyXG4gICAgLy8gXHRcdCdsb2dpYyc6ICdzdHJpbmcnXHJcbiAgICAvLyBcdH1cclxuICAgIHByaXZhdGUgbWFwUXVlcnlUb0ZpbHRlckJ5KHF1ZXJ5OiBEYXRhU291cmNlUXVlcnkpOiBhbnkge1xyXG4gICAgICAgIGxldCBmaWx0ZXJCeSA9IHt9IDtcclxuICAgICAgICBpZiAocXVlcnkgJiYgcXVlcnkuRXhwcmVzc2lvbnMgJiYgcXVlcnkuRXhwcmVzc2lvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJzID0gcXVlcnkuRXhwcmVzc2lvbnNcclxuICAgICAgICAgICAgICAgIC5maWx0ZXIoIGUgPT4gZS5WYWx1ZSApXHJcbiAgICAgICAgICAgICAgICAubWFwKCBlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZCA6IGUuRmllbGQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIDogZS5WYWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB9KSA7XHJcbiAgICAgICAgICAgIGZpbHRlckJ5ID0ge1xyXG4gICAgICAgICAgICAgICAgZmlsdGVycyA6IGZpbHRlcnNcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIChmaWx0ZXJCeSkgO1xyXG4gICAgfVxyXG59Il19