@datorama/core 21.4.0-rc.3 → 21.4.0-rc.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/datorama-core.umd.js +1 -1
- package/bundles/datorama-core.umd.js.map +1 -1
- package/bundles/datorama-core.umd.min.js +1 -1
- package/bundles/datorama-core.umd.min.js.map +1 -1
- package/esm2015/lib/grid-v2/grid-store/grid.service.js +2 -2
- package/esm5/lib/grid-v2/grid-store/grid.service.js +2 -2
- package/fesm2015/datorama-core.js +1 -1
- package/fesm2015/datorama-core.js.map +1 -1
- package/fesm5/datorama-core.js +1 -1
- package/fesm5/datorama-core.js.map +1 -1
- package/package.json +1 -1
|
@@ -844,7 +844,7 @@ let GridService = class GridService {
|
|
|
844
844
|
*/
|
|
845
845
|
initPivotSecondaryColsProcess({ gridOptions }) {
|
|
846
846
|
gridOptions.processSecondaryColDef = colDef => {
|
|
847
|
-
const api = colDef.headerComponentParams.gridQuery.api;
|
|
847
|
+
const api = colDef.headerComponentParams && colDef.headerComponentParams.gridQuery.api;
|
|
848
848
|
if (api) {
|
|
849
849
|
const valueColumns = colDef.headerComponentParams.gridQuery.api.columns.getValueColumns();
|
|
850
850
|
const originalColDef = valueColumns
|
|
@@ -902,4 +902,4 @@ GridService = __decorate([
|
|
|
902
902
|
SvgRegistry, Object, Object])
|
|
903
903
|
], GridService);
|
|
904
904
|
export { GridService };
|
|
905
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGRhdG9yYW1hL2NvcmUvIiwic291cmNlcyI6WyJsaWIvZ3JpZC12Mi9ncmlkLXN0b3JlL2dyaWQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQXdCLE1BQU0sZUFBZSxDQUFDO0FBZXpFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM3QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUV4RSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEMsT0FBTyxFQUNMLG9CQUFvQixFQUlwQixzQkFBc0IsRUFRdkIsTUFBTSxrQ0FBa0MsQ0FBQztBQUMxQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzlFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUVqRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSw0QkFBNEIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBUWxGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxxQkFBcUIsRUFBa0IsTUFBTSxrQkFBa0IsQ0FBQztBQUN6RSxPQUFPLEVBSUwsbUJBQW1CLEVBT25CLHVDQUF1QyxFQUN2QyxhQUFhLEVBQ2Isb0JBQW9CLEVBQ3BCLDJCQUEy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QUFHLEdBQUcsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxLQUFLLENBQUM7Z0JBRXBDLFlBQVksQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxZQUFZLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2FBQzdFO1lBRUQsT0FBTyxZQUFZLENBQUM7UUFDdEIsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDMUMsQ0FBQztDQUNGLENBQUE7O1lBai9Ca0IsU0FBUztZQUNMLFNBQVM7WUFDVCxvQkFBb0I7WUFDakIsWUFBWTtZQUNiLFdBQVc7NENBQy9CLE1BQU0sU0FBQyxxQkFBcUI7NENBQzVCLE1BQU0sU0FBQyxnQkFBZ0I7O0FBaENmLFdBQVc7SUFEdkIsVUFBVSxFQUFFO0lBZ0NSLFdBQUEsTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUE7SUFDN0IsV0FBQSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTtxQ0FOVixTQUFTO1FBQ0wsU0FBUztRQUNULG9CQUFvQjtRQUNqQixZQUFZO1FBQ2IsV0FBVztHQTlCdkIsV0FBVyxDQTJnQ3ZCO1NBM2dDWSxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBPbkRlc3Ryb3ksIFF1ZXJ5TGlzdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRGF0b0dyaWRBcGkgfSBmcm9tICcuLi9ncmlkLWNvbnRyb2xsZXIvZ3JpZC1jb250cm9sbGVyLnR5cGVzJztcbmltcG9ydCB7XG4gIENlbGxDbGFzc1BhcmFtcyxcbiAgQ29sR3JvdXBEZWYsXG4gIENvbHVtbixcbiAgR2V0Q29udGV4dE1lbnVJdGVtc1BhcmFtcyxcbiAgR3JpZE9wdGlvbnMsXG4gIElDZWxsUmVuZGVyZXJQYXJhbXMsXG4gIElHZXRSb3dzUGFyYW1zLFxuICBSb3dOb2RlLFxuICBSb3dOb2RlVHJhbnNhY3Rpb24sXG4gIFJvd1NlbGVjdGVkRXZlbnRcbn0gZnJvbSAnYWctZ3JpZC1jb21tdW5pdHknO1xuaW1wb3J0IHsgUm93RGF0YVRyYW5zYWN0aW9uIH0gZnJvbSAnYWctZ3JpZC1jb21tdW5pdHkvZGlzdC9saWIvcm93TW9kZWxzL2NsaWVudFNpZGUvY2xpZW50U2lkZVJvd01vZGVsJztcbmltcG9ydCB7IEdyaWRRdWVyeSB9IGZyb20gJy4vZ3JpZC5xdWVyeSc7XG5pbXBvcnQgeyBEYXRvQ29yZUVycm9yIH0gZnJvbSAnLi4vLi4vZXJyb3JzJztcbmltcG9ydCB7IERhdG9UcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdHJhbnNsYXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgRGF0b0N1c3RvbUhlYWRlclRlbXBsYXRlQ29tcG9uZW50IH0gZnJvbSAnLi4vZ3JpZC1jdXN0b20taGVhZGVyL2N1c3RvbS1oZWFkZXItdGVtcGxhdGUuY29tcG9uZW50JztcbmltcG9ydCB7IHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1xuICBEYXRvRmlsdGVyQ29uZGl0aW9ucyxcbiAgRGF0b0dyaWRDb25kaXRpb25hbEZpbHRlcixcbiAgRGF0b0dyaWRGaWx0ZXIsXG4gIERhdG9HcmlkRmlsdGVyQ29uZGl0aW9uLFxuICBEYXRvR3JpZEZpbHRlclNlY3Rpb25zLFxuICBEYXRvR3JpZEZpbHRlcnNNYXAsXG4gIERhdG9HcmlkUmFuZ2VGaWx0ZXJDb25kaXRpb24sXG4gIFNlcnZlclNpZGVQYWdpbmF0aW9uQ29uZGl0aW9uLFxuICBTZXJ2ZXJTaWRlUGFnaW5hdGlvbkZpbHRlcixcbiAgU2VydmVyU2lkZVBhZ2luYXRpb25GaWx0ZXJzLFxuICBTZXJ2ZXJTaWRlUGFnaW5hdGlvbkxpc3RDb25kaXRpb24sXG4gIFNlcnZlclNpZGVQYWdpbmF0aW9uUmFuZ2VDb25kaXRpb25cbn0gZnJvbSAnLi4vZ3JpZC1maWx0ZXIvZ3JpZC1maWx0ZXIudHlwZXMnO1xuaW1wb3J0IHsgY29lcmNlQXJyYXkgfSBmcm9tICcuLi8uLi91dGlscy9jb2VyY2lvbic7XG5pbXBvcnQgeyBpc0VtcHR5LCBpc0Z1bmN0aW9uLCBpc05pbCwgaXNTdHJpbmcgfSBmcm9tICcuLi8uLi91dGlscy92YWxpZGF0b3JzJztcbmltcG9ydCB7IHZhbGlkYXRlRmlsdGVyIH0gZnJvbSAnLi4vZ3JpZC1maWx0ZXIvZmlsdGVyLXZhbGlkYXRvcic7XG5pbXBvcnQgeyBBZ0dyaWROZzIgfSBmcm9tICdhZy1ncmlkLWFuZ3VsYXInO1xuaW1wb3J0IHsgSWNvblJlZ2lzdHJ5LCBTdmdSZWdpc3RyeSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2ljb24tcmVnaXN0cnknO1xuaW1wb3J0IHsgZ2V0VmlzaWJsZUFjdGlvbnMsIHRvb2xiYXJBY3Rpb25Ub0NvbnRleHRBY3Rpb24gfSBmcm9tICcuLi9ncmlkLXYyLnV0aWwnO1xuaW1wb3J0IHtcbiAgRGF0b0dyaWRTZXR0aW5ncyxcbiAgTm9ybWFsaXplT3B0aW9uc1BhcmFtcyxcbiAgU2VydmVyU2lkZVBhZ2luYXRpb25Db25maWcsXG4gIFN1Y2Nlc3NXcmFwcGVyUGFyYW1zXG59IGZyb20gJy4vZ3JpZC5zdG9yZS50eXBlcyc7XG5pbXBvcnQgeyBSb3dBY3Rpb24gfSBmcm9tICcuLi9ncmlkLXRvb2xiYXIvZ3JpZC10b29sYmFyLnR5cGVzJztcbmltcG9ydCB7IGNvcHlUb0NsaXBib2FyZCB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvY2xpcGJvYXJkLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBHcmlkU3RvcmUgfSBmcm9tICcuL2dyaWQuc3RvcmUnO1xuaW1wb3J0IHsgREFUT19HUklEX1NUT1JBR0VfQVBJLCBHcmlkU3RvcmFnZUFQSSB9IGZyb20gJy4uL2dyaWQtc2V0dGluZ3MnO1xuaW1wb3J0IHtcbiAgQWN0aW9uQ29udmVydGVyUGFyYW1zLFxuICBEYXRvR3JpZEFsaWdubWVudCxcbiAgRGF0b0dyaWRDb2x1bW5EZWYsXG4gIERhdG9HcmlkQ29sdW1uVHlwZXMsXG4gIERhdG9HcmlkR2V0Um93c1BhcmFtcyxcbiAgRGF0b0dyaWRPcHRpb25zLFxuICBEYXRvR3JpZFNlcnZlclNvcnQsXG4gIERhdG9HcmlkU2VydmVyU29ydERpcmVjdGlvbixcbiAgRGF0b0dyaWRTb3J0LFxuICBEYXRvR3JpZFRyZWVDb25maWcsXG4gIGVkaXRhYmxlQ2VsbFJlbmRlcmVyV2l0aFNlYXJjaEhpZ2hsaWdodCxcbiAgR3JpZE1pbldpZHRocyxcbiAgR3JpZFJvd1NlbGVjdGlvblR5cGUsXG4gIHNlYXJjaEhpZ2hsaWdodENlbGxSZW5kZXJlclxufSBmcm9tICcuLi9ncmlkL2dyaWQtdjIudHlwZXMnO1xuXG5pbXBvcnQgeyBjb252ZXJ0VG9UcmVlRGF0YSwgZGVmYXVsdEdyaWRPcHRpb25zLCBkZWZhdWx0R3JpZFRyZWVMYWJlbCB9IGZyb20gJy4uL2dyaWQvZ3JpZC12Mi5jb25maWcnO1xuaW1wb3J0IHsgZGlmZiB9IGZyb20gJy4uLy4uL3V0aWxzL29iamVjdCc7XG5pbXBvcnQgeyB1bnRpbERlc3Ryb3llZCB9IGZyb20gJ25neC10YWtlLXVudGlsLWRlc3Ryb3knO1xuaW1wb3J0IHsgQ29yZUV2ZW50TG9nZ2VyLCBDb3JlRXZlbnRUeXBlcywgREFUT19DT1JFX0xPR0dFUiB9IGZyb20gJy4uLy4uL2V2ZW50LWxvZ2dlcic7XG5pbXBvcnQgeyBIYXNoTWFwIH0gZnJvbSAnLi4vLi4vdXRpbHMvdHlwZXMnO1xuaW1wb3J0IHsgc2l6ZSB9IGZyb20gJy4uLy4uL3V0aWxzL2NvbGxlY3Rpb24nO1xuaW1wb3J0IHsgT3BlcmF0b3JUeXBlcyB9IGZyb20gJy4uLy4uL29wZXJhdG9yLXRvZ2dsZXIvb3BlcmF0b3ItdG9nZ2xlci50eXBlcyc7XG5pbXBvcnQgeyBkZWVwbWVyZ2UgfSBmcm9tICcuLi8uLi9pbnRlcm5hbC9kZWVwLW1lcmdlJztcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRyaWdnZXJXaW5kb3dSZXNpemUgfSBmcm9tICcuLi8uLi91dGlscy91c2VyLWFnZW50JztcbmltcG9ydCB7IGdldENvbEZpZWxkLCBnZXRDb2x1bW5zU2l6ZXMgfSBmcm9tICcuL3V0aWwnO1xuaW1wb3J0IHsgRGF0b0dyaWRNdWx0aVNlbGVjdENvbHVtbkhlYWRlckNvbXBvbmVudCB9IGZyb20gJy4uL2dyaWQtY29sdW1uLWhlYWRlci9ncmlkLW11bHRpLXNlbGVjdC1oZWFkZXIvZ3JpZC1tdWx0aS1zZWxlY3QtaGVhZGVyLmNvbXBvbmVudCc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBHcmlkU2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIGFwaTogRGF0b0dyaWRBcGk7XG4gIHRyZWVDb25maWc6IERhdG9HcmlkVHJlZUNvbmZpZyA9IGRlZmF1bHRHcmlkVHJlZUxhYmVsO1xuICBpc1Bpdm90TW9kZTogYm9vbGVhbjtcblxuICAvKiogQGludGVybmFsIC0gdXNlZCBmb3Igc2VydmVyIHNpZGUgYnkgdmFsdWUgZmlsdGVyICovXG4gIF9vcmlnaW5hbEdldFJvd3M6IChwYXJhbXM6IERhdG9HcmlkR2V0Um93c1BhcmFtcykgPT4gdm9pZDtcbiAgcHJpdmF0ZSBpbml0aWFsU2V0dGluZ3M6IERhdG9HcmlkU2V0dGluZ3M7XG4gIHByaXZhdGUgZ3JpZE5hbWU6IHN0cmluZztcbiAgcHJpdmF0ZSBncmlkUmVmOiBBZ0dyaWROZzI7XG4gIHByaXZhdGUgY3VzdG9tSGVhZGVyc1RlbXBsYXRlczogUXVlcnlMaXN0PERhdG9DdXN0b21IZWFkZXJUZW1wbGF0ZUNvbXBvbmVudD47XG4gIHByaXZhdGUgaXNUcmVlRGF0YTogYm9vbGVhbjtcbiAgcHJpdmF0ZSBwYWdlTnVtYmVyVG9SZXR1cm5BZnRlclJlZnJlc2ggPSAtMTtcbiAgcHJpdmF0ZSBsYXN0VG90YWxSb3dzOiBudW1iZXI7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBDSEVDS0JPWF9TRUxFQ1RJT05fQ09MX0lEID0gJ2dyaWQtY2hlY2tib3gtc2VsZWN0aW9uJztcblxuICBzZXQgdHJlZURhdGEoaXNUcmVlRGF0YTogYm9vbGVhbikge1xuICAgIHRoaXMuaXNUcmVlRGF0YSA9IGlzVHJlZURhdGE7XG4gIH1cblxuICBnZXQgdHJlZURhdGEoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNUcmVlRGF0YTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgc3RvcmU6IEdyaWRTdG9yZSxcbiAgICBwcml2YXRlIGdyaWRRdWVyeTogR3JpZFF1ZXJ5LFxuICAgIHByaXZhdGUgdHJhbnNsYXRlOiBEYXRvVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIGljb25SZWdpc3RyeTogSWNvblJlZ2lzdHJ5LFxuICAgIHByaXZhdGUgc3ZnUmVnaXN0cnk6IFN2Z1JlZ2lzdHJ5LFxuICAgIEBJbmplY3QoREFUT19HUklEX1NUT1JBR0VfQVBJKSBwcml2YXRlIHN0b3JhZ2VBUEk6IEdyaWRTdG9yYWdlQVBJLFxuICAgIEBJbmplY3QoREFUT19DT1JFX0xPR0dFUikgcHJpdmF0ZSBsb2dnZXI6IENvcmVFdmVudExvZ2dlclxuICApIHt9XG5cbiAgbmdPbkRlc3Ryb3koKSB7fVxuXG4gIC8qKiBAaW50ZXJuYWwgLSB1c2VkIHRvIGluaXQgdGhlIHNlcnZpY2UgKi9cbiAgX3NldEFwaShhcGk6IERhdG9HcmlkQXBpLCBncmlkUmVmOiBBZ0dyaWROZzIpIHtcbiAgICB0aGlzLmFwaSA9IGFwaTtcbiAgICB0aGlzLmdyaWRSZWYgPSBncmlkUmVmO1xuICAgIHRoaXMuZ3JpZE5hbWUgPSAoZ3JpZFJlZi5ncmlkT3B0aW9ucyBhcyBEYXRvR3JpZE9wdGlvbnMpLmdyaWROYW1lO1xuICAgIHRoaXMuc2V0U2VydmVyU2lkZVBhZ2luYXRpb24oe1xuICAgICAgZW5hYmxlZDogdGhpcy5pc1NlcnZlclNpZGVQYWdpbmF0aW9uKGdyaWRSZWYuZ3JpZE9wdGlvbnMpXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGlzU2VydmVyU2lkZVBhZ2luYXRpb24oZ3JpZE9wdGlvbnM6IEdyaWRPcHRpb25zKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGdyaWRPcHRpb25zLnJvd01vZGVsVHlwZSA9PT0gJ2luZmluaXRlJztcbiAgfVxuXG4gIHVwZGF0ZUdyaWRDb250ZXh0KGNvbnRleHQgPSB7fSwgcmVwbGFjZSA9IGZhbHNlKSB7XG4gICAgdGhpcy5ncmlkUXVlcnkuZ2V0R3JpZE9wdGlvbnMoKS5jb250ZXh0ID0gcmVwbGFjZVxuICAgICAgPyBjb250ZXh0XG4gICAgICA6IGRlZXBtZXJnZSh0aGlzLmdyaWRSZWYuZ3JpZE9wdGlvbnMuY29udGV4dCB8fCB7fSwgY29udGV4dCk7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgdXNlIHNlbGVjdFJvd3MgaW5zdGVhZFxuICAgKiBAcGFyYW0gcm93XG4gICAqL1xuICBzZXRTZWxlY3RlZFJvd3M8VD4ocm93OiAoVCAmIFJvd05vZGUpIHwgKFRbXSAmIFJvd05vZGVbXSkpIHtcbiAgICB0aGlzLnNlbGVjdFJvd3Mocm93KTtcbiAgfVxuXG4gIHNlbGVjdFJvd3M8VD4ocm93OiAoVCAmIFJvd05vZGUpIHwgKFRbXSAmIFJvd05vZGVbXSkpIHtcbiAgICBjb25zdCByb3dOb2RlcyA9IGNvZXJjZUFycmF5KHJvdykuZmlsdGVyKHJvd05vZGUgPT4gIXJvd05vZGUuaXNTZWxlY3RlZCgpKTtcbiAgICBjb25zdCBsYXN0Tm9kZSA9IHJvd05vZGVzLnBvcCgpO1xuICAgIHJvd05vZGVzLmZvckVhY2gocm93Tm9kZSA9PiByb3dOb2RlLnNldFNlbGVjdGVkKHRydWUsIGZhbHNlLCB0cnVlKSk7XG4gICAgaWYgKGxhc3ROb2RlKSB7XG4gICAgICBsYXN0Tm9kZS5zZXRTZWxlY3RlZCh0cnVlKTtcbiAgICB9XG4gIH1cblxuICBkZXNlbGVjdFJvd3M8VD4ocm93OiAoVCAmIFJvd05vZGUpIHwgKFRbXSAmIFJvd05vZGVbXSkpIHtcbiAgICBjb25zdCByb3dOb2RlcyA9IGNvZXJjZUFycmF5KHJvdykuZmlsdGVyKHJvd05vZGUgPT4gcm93Tm9kZS5pc1NlbGVjdGVkKCkpO1xuICAgIGNvbnN0IGxhc3ROb2RlID0gcm93Tm9kZXMucG9wKCk7XG4gICAgcm93Tm9kZXMuZm9yRWFjaChyb3dOb2RlID0+IHJvd05vZGUuc2V0U2VsZWN0ZWQoZmFsc2UsIGZhbHNlLCB0cnVlKSk7XG4gICAgaWYgKGxhc3ROb2RlKSB7XG4gICAgICBsYXN0Tm9kZS5zZXRTZWxlY3RlZChmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgc2V0Um93czxUPihkYXRhOiBUW10sIGZpdENvbnRhaW5lciA9IGZhbHNlLCB0cmVlQ29uZmlnOiBQYXJ0aWFsPERhdG9HcmlkVHJlZUNvbmZpZz4gPSB7fSkge1xuICAgIHRoaXMuZ3JpZFF1ZXJ5LmdyaWRSZWFkeSQucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuaXNUcmVlRGF0YSkge1xuICAgICAgICB0aGlzLnRyZWVDb25maWcgPSB7XG4gICAgICAgICAgLi4uZGVmYXVsdEdyaWRUcmVlTGFiZWwsXG4gICAgICAgICAgLi4udHJlZUNvbmZpZ1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCB0cmVlRGF0ZSA9IGNvbnZlcnRUb1RyZWVEYXRhKGRhdGEsIHRoaXMudHJlZUNvbmZpZyk7XG4gICAgICAgIHRoaXMuYXBpLmdyaWQuc2V0Um93RGF0YSh0cmVlRGF0ZSk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuaXNQaXZvdE1vZGUpIHtcbiAgICAgICAgdGhpcy5zZXRQaXZvdE1vZGVSb3dzPFQ+KGRhdGEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5hcGkuZ3JpZC5zZXRSb3dEYXRhKGRhdGEpO1xuICAgICAgfVxuICAgICAgaWYgKGZpdENvbnRhaW5lcikge1xuICAgICAgICB0aGlzLmZpdEdyaWQoJ2NvbnRhaW5lcicpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdHJpZ2dlcldpbmRvd1Jlc2l6ZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc2V0RGF0YXNvdXJjZShnZXRSb3dzOiAocGFyYW1zOiBEYXRvR3JpZEdldFJvd3NQYXJhbXMpID0+IHZvaWQsIHJldHVyblRvQ3VycmVudFBhZ2UgPSBmYWxzZSwgc2hvd0xvYWRpbmcgPSBmYWxzZSkge1xuICAgIHJldHVyblRvQ3VycmVudFBhZ2UgJiYgdGhpcy51cGRhdGVQYWdlVG9LZWVwT25SZWZyZXNoU2VydmVyRGF0YSgpO1xuICAgIHNob3dMb2FkaW5nICYmIHRoaXMuc2V0TG9hZGluZyh0cnVlKTtcbiAgICB0aGlzLl9vcmlnaW5hbEdldFJvd3MgPSBnZXRSb3dzO1xuICAgIHRoaXMuYXBpLmdyaWQuc2V0RGF0YXNvdXJjZSh7IGdldFJvd3M6IHRoaXMud3JhcEdldFJvd3ModGhpcy5ncmlkUXVlcnkuZ2V0R3JpZE9wdGlvbnMoKSwgZ2V0Um93cykgfSk7XG4gIH1cblxuICByZWZyZXNoU2VydmVyRGF0YShrZWVwQ3VycmVudFBhZ2UgPSBmYWxzZSwgc2hvd0xvYWRpbmcgPSBmYWxzZSkge1xuICAgIGtlZXBDdXJyZW50UGFnZSAmJiB0aGlzLnVwZGF0ZVBhZ2VUb0tlZXBPblJlZnJlc2hTZXJ2ZXJEYXRhKCk7XG4gICAgc2hvd0xvYWRpbmcgJiYgdGhpcy5zZXRMb2FkaW5nKHRydWUpO1xuICAgIHRoaXMuYXBpLmdyaWQuc2V0RGF0YXNvdXJjZSh7IGdldFJvd3M6IHRoaXMuZ3JpZFF1ZXJ5LmdldEdyaWRPcHRpb25zKCkuZGF0YXNvdXJjZS5nZXRSb3dzIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVQYWdlVG9LZWVwT25SZWZyZXNoU2VydmVyRGF0YSgpIHtcbiAgICAvLyBLZWVwaW5nIHRoZSBjdXJyZW50IHBhZ2Ugb24gc2VydmVyIHJlZnJlc2ggaXMgY3VycmVudGx5IGF2YWlsYWJsZSBvbmx5IHdoZW4gbm8gcGFnZSBjbGllbnQgY2FjaGluZyBpcyBlbmFibGVkXG4gICAgaWYgKHRoaXMuZ3JpZFF1ZXJ5LmdldEdyaWRPcHRpb25zKCkubWF4QmxvY2tzSW5DYWNoZSA9PT0gMSkge1xuICAgICAgdGhpcy5wYWdlTnVtYmVyVG9SZXR1cm5BZnRlclJlZnJlc2ggPSB0aGlzLmFwaS5ncmlkLnBhZ2luYXRpb25HZXRDdXJyZW50UGFnZSgpO1xuICAgIH1cbiAgfVxuXG4gIGFkZFJvd3M8VD4ocm93OiBULCBpbmRleD86IG51bWJlcik6IFJvd05vZGVUcmFuc2FjdGlvbiB7XG4gICAgY29uc3Qgcm93cyA9IGNvZXJjZUFycmF5KHJvdyk7XG4gICAgY29uc3QgZGF0YTogUm93RGF0YVRyYW5zYWN0aW9uID0geyBhZGQ6IHJvd3MgfTtcbiAgICBpZiAoIWlzTmlsKGluZGV4KSkge1xuICAgICAgZGF0YS5hZGRJbmRleCA9IGluZGV4O1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5hcGkuZ3JpZC51cGRhdGVSb3dEYXRhKGRhdGEpO1xuICB9XG5cbiAgdXBkYXRlUm93czxUPihyb3c6IFRbXSk6IGFueSB7XG4gICAgY29uc3Qgcm93cyA9IGNvZXJjZUFycmF5KHJvdyk7XG4gICAgcmV0dXJuIHRoaXMuYXBpLmdyaWQudXBkYXRlUm93RGF0YSh7IHVwZGF0ZTogcm93cyB9KTtcbiAgfVxuXG4gIHVwZGF0ZVJvd1ZhbHVlPFQ+KHJvdzogUm93Tm9kZSwga2V5OiBzdHJpbmcsIG5ld1ZhbHVlOiBUKTtcbiAgdXBkYXRlUm93VmFsdWU8VD4oaWQ6IHN0cmluZywga2V5OiBzdHJpbmcsIG5ld1ZhbHVlOiBUKTtcbiAgdXBkYXRlUm93VmFsdWU8VD4ocm93OiBzdHJpbmcgfCBSb3dOb2RlLCBrZXk6IHN0cmluZywgbmV3VmFsdWU6IFQpIHtcbiAgICBjb25zdCByb3dOb2RlID0gaXNTdHJpbmcocm93KSA/IHRoaXMuYXBpLmdyaWQuZ2V0Um93Tm9kZShyb3cpIDogcm93O1xuICAgIHJvd05vZGUuc2V0RGF0YVZhbHVlKGtleSwgbmV3VmFsdWUpO1xuICB9XG5cbiAgcmVtb3ZlUm93cyhyb3c6IFJvd05vZGUgfCBSb3dOb2RlW10pOiBSb3dOb2RlVHJhbnNhY3Rpb24ge1xuICAgIGNvbnN0IHJvd3MgPSBjb2VyY2VBcnJheShyb3cpLm1hcCgoeyBkYXRhIH0pID0+IGRhdGEpO1xuICAgIHJldHVybiB0aGlzLmFwaS5ncmlkLnVwZGF0ZVJvd0RhdGEoeyByZW1vdmU6IHJvd3MgfSk7XG4gIH1cblxuICByZW1vdmVTZWxlY3RlZFJvd3MoKSB7XG4gICAgY29uc3Qgc2VsZWN0ZWRSb3dzID0gdGhpcy5ncmlkUXVlcnkuZ2V0U2VsZWN0ZWRSb3dOb2RlcygpO1xuICAgIHJldHVybiB0aGlzLnJlbW92ZVJvd3Moc2VsZWN0ZWRSb3dzKTtcbiAgfVxuXG4gIGNsZWFyVGFibGUoKSB7XG4gICAgdGhpcy5zZXRSb3dzKFtdKTtcbiAgfVxuXG4gIHVwZGF0ZUNvbHVtbnMoY29sRGVmczogRGF0b0dyaWRDb2x1bW5EZWYgfCBEYXRvR3JpZENvbHVtbkRlZltdLCByZWxvYWRTZXR0aW5ncyA9IGZhbHNlKSB7XG4gICAgaWYgKCFjb2xEZWZzKSB7XG4gICAgICB0aHJvdyBuZXcgRGF0b0NvcmVFcnJvcignTm8gY29sdW1uRGVmcyB3ZXJlIHByb3ZpZGVkLiDwn5W18J+Pu+KAjeKZgO+4jycpO1xuICAgIH1cbiAgICBjb25zdCBub3JtYWxpemVkID0gdGhpcy5ub3JtYWxpemVDb2x1bW5zKGNvZXJjZUFycmF5KGNvbERlZnMpKTtcbiAgICBjb25zdCBzYXZlZFNldHRpbmdzID0gcmVsb2FkU2V0dGluZ3MgJiYgdGhpcy5ncmlkUXVlcnkuZ2V0Q3VycmVudEdyaWRTZXR0aW5ncygpO1xuICAgIHRoaXMuYXBpLmdyaWQuc2V0Q29sdW1uRGVmcyhub3JtYWxpemVkKTtcbiAgICBpZiAoc2F2ZWRTZXR0aW5ncykge1xuICAgICAgdGhpcy5sb2FkU2F2ZWRTZXR0aW5ncyhzYXZlZFNldHRpbmdzKTtcbiAgICB9XG4gIH1cblxuICBub3JtYWxpemVPcHRpb25zKHBhcmFtczogTm9ybWFsaXplT3B0aW9uc1BhcmFtcykge1xuICAgIHRoaXMuY3VzdG9tSGVhZGVyc1RlbXBsYXRlcyA9IHBhcmFtcy5jdXN0b21IZWFkZXJzVGVtcGxhdGVzO1xuICAgIGNvbnN0IGhlYWRlckNvbXBvbmVudFBhcmFtcyA9IHsgZ3JpZFNlcnZpY2U6IHRoaXMsIGdyaWRRdWVyeTogdGhpcy5ncmlkUXVlcnkgfTtcbiAgICBwYXJhbXMuZ3JpZE9wdGlvbnMuYXV0b0dyb3VwQ29sdW1uRGVmID0ge1xuICAgICAgLi4uaGVhZGVyQ29tcG9uZW50UGFyYW1zLFxuICAgICAgLi4ucGFyYW1zLmdyaWRPcHRpb25zLmF1dG9Hcm91cENvbHVtbkRlZlxuICAgIH07XG5cbiAgICBwYXJhbXMuZ3JpZE9wdGlvbnMuZGVmYXVsdENvbERlZiA9IHtcbiAgICAgIC4uLnBhcmFtcy5ncmlkT3B0aW9ucy5kZWZhdWx0Q29sRGVmLFxuICAgICAgaGVhZGVyQ29tcG9uZW50UGFyYW1zXG4gICAgfTtcbiAgICBpZiAodHlwZW9mIHBhcmFtcy5ncmlkT3B0aW9ucy5lbmFibGVTZWFyY2ggPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBwYXJhbXMuZ3JpZE9wdGlvbnMuZW5hYmxlU2VhcmNoID0gcGFyYW1zLmdyaWRPcHRpb25zLmVuYWJsZVYyXzE7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgcGFyYW1zLmdyaWRPcHRpb25zLmVuYWJsZUJhY2tncm91bmQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBwYXJhbXMuZ3JpZE9wdGlvbnMuZW5hYmxlQmFja2dyb3VuZCA9IHBhcmFtcy5ncmlkT3B0aW9ucy5lbmFibGVWMl8xO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHBhcmFtcy5ncmlkT3B0aW9ucy5zaG93TXVsdGlTZWxlY3Rpb25DaGVja2JveGVzID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcGFyYW1zLmdyaWRPcHRpb25zLnNob3dNdWx0aVNlbGVjdGlvbkNoZWNrYm94ZXMgPVxuICAgICAgICBwYXJhbXMuZ3JpZE9wdGlvbnMuZW5hYmxlVjJfMSAmJiBwYXJhbXMuZ3JpZE9wdGlvbnMucm93U2VsZWN0aW9uICE9PSBHcmlkUm93U2VsZWN0aW9uVHlwZS5TSU5HTEU7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgcGFyYW1zLmdyaWRPcHRpb25zLmVuYWJsZVNlYXJjaEhpZ2hsaWdodCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHBhcmFtcy5ncmlkT3B0aW9ucy5lbmFibGVTZWFyY2hIaWdobGlnaHQgPVxuICAgICAgICBwYXJhbXMuZ3JpZE9wdGlvbnMuZW5hYmxlU2VhcmNoICYmIGRlZmF1bHRHcmlkT3B0aW9ucy5lbmFibGVTZWFyY2hIaWdobGlnaHQ7XG4gICAgfVxuICAgIHBhcmFtcy5ncmlkT3B0aW9ucy5jb2x1bW5EZWZzID0gdGhpcy5ub3JtYWxpemVDb2x1bW5zKHBhcmFtcy5ncmlkT3B0aW9ucy5jb2x1bW5EZWZzLCBwYXJhbXMuZ3JpZE9wdGlvbnMpO1xuXG4gICAgLyoqIEFkZCBjb3JlIGZpbHRlcnMgKi9cbiAgICBwYXJhbXMuZ3JpZE9wdGlvbnMuaXNFeHRlcm5hbEZpbHRlclByZXNlbnQgPSAoKSA9PiB0cnVlO1xuICAgIHBhcmFtcy5ncmlkT3B0aW9ucy5kb2VzRXh0ZXJuYWxGaWx0ZXJQYXNzID0gKHJvdzogUm93Tm9kZSkgPT4ge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdmFsaWRhdGVGaWx0ZXIoeyByb3csIGFwaTogdGhpcy5ncmlkUXVlcnkuYXBpLmdyaWQgfSwgdGhpcy5ncmlkUXVlcnkuZ2V0RmlsdGVyKCkpICYmIHRoaXMucm93TWF0Y2hlc1NlYXJjaChyb3cpXG4gICAgICApO1xuICAgIH07XG5cbiAgICAvKiogV3JhcCB0aGUgc2VydmVyIHNpZGUgcGFnaW5hdGlvbiBnZXQgcm93cyBmdW5jdGlvbiAqL1xuICAgIGlmICh0aGlzLmlzU2VydmVyU2lkZVBhZ2luYXRpb24ocGFyYW1zLmdyaWRPcHRpb25zKSkge1xuICAgICAgcGFyYW1zLmdyaWRPcHRpb25zLmJsb2NrTG9hZERlYm91bmNlTWlsbGlzID0gMzAwO1xuICAgICAgdGhpcy5fb3JpZ2luYWxHZXRSb3dzID0gcGFyYW1zLmdyaWRPcHRpb25zLmRhdGFzb3VyY2UuZ2V0Um93cztcbiAgICAgIHBhcmFtcy5ncmlkT3B0aW9ucy5kYXRhc291cmNlLmdldFJvd3MgPSB0aGlzLndyYXBHZXRSb3dzKHBhcmFtcy5ncmlkT3B0aW9ucyk7XG4gICAgICAvKiBUaGUgY2FjaGUgc2l6ZSBpcyBzeW5jZWQgd2l0aCB0aGUgcGFnaW5hdGlvbiBwYWdlIHNpemUgKi9cbiAgICAgIGNvbnN0IGNhY2hlU2l6ZSA9IHBhcmFtcy5ncmlkT3B0aW9ucy5wYWdpbmF0aW9uUGFnZVNpemU7XG4gICAgICBpZiAoY2FjaGVTaXplKSB7XG4gICAgICAgIHBhcmFtcy5ncmlkT3B0aW9ucy5jYWNoZUJsb2NrU2l6ZSA9IGNhY2hlU2l6ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogRWRpdGFibGUgY2VsbCAqL1xuICAgIHRoaXMuaW5pdEVkaXRhYmxlQ29sdW1uc0NlbGxDbGFzcyhwYXJhbXMpO1xuXG4gICAgLyoqIFdyYXAgY29udGV4dCBtZW51ICovXG4gICAgcGFyYW1zLmdyaWRPcHRpb25zLmdldENvbnRleHRNZW51SXRlbXMgPSB0aGlzLndyYXBDb250ZXh0TWVudUJ1aWxkZXIocGFyYW1zKTtcblxuICAgIC8qKiBTYXZlIGdyaWQgc2V0dGluZ3MgKi9cbiAgICBjb25zdCB7IHNhdmVTZXR0aW5ncywgZ3JpZE5hbWUgfSA9IHBhcmFtcy5ncmlkT3B0aW9ucztcbiAgICBwYXJhbXMuZ3JpZE9wdGlvbnMuc2F2ZVNldHRpbmdzID0gc2F2ZVNldHRpbmdzICE9PSBmYWxzZSAmJiAhaXNOaWwoZ3JpZE5hbWUpO1xuXG4gICAgLyoqIFNlcnZlciBTaWRlIFBhZ2luYXRpb24gZm9yIHNlbGVjdCBhbGwgb3B0aW9uICovXG4gICAgdGhpcy5pbml0T25Sb3dTZWxlY3RlZEZvclNlcnZlclNpZGVQYWdpbmF0aW9uKHBhcmFtcyk7XG5cbiAgICAvKiogQWRkIHBpdm90IHNwZWNpZmljIHJlcXVpcmVkIHNldHRpbmdzICovXG4gICAgaWYgKHBhcmFtcy5ncmlkT3B0aW9ucy5waXZvdE1vZGUpIHtcbiAgICAgIHRoaXMuaW5pdFBpdm90U2Vjb25kYXJ5Q29sc1Byb2Nlc3MocGFyYW1zKTtcbiAgICAgIHBhcmFtcy5ncmlkT3B0aW9ucy5lbmFibGVWMl8xID0gdHJ1ZTtcbiAgICAgIHBhcmFtcy5ncmlkT3B0aW9ucy5zYXZlU2V0dGluZ3MgPSBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyYW1zLmdyaWRPcHRpb25zO1xuICB9XG5cbiAgcHJpdmF0ZSBub3JtYWxpemVDb2x1bW5zKGNvbERlZnM6IERhdG9HcmlkQ29sdW1uRGVmW10sIGdyaWRPcHRpb25zOiBEYXRvR3JpZE9wdGlvbnMgPSBudWxsKTogRGF0b0dyaWRDb2x1bW5EZWZbXSB7XG4gICAgaWYgKCFncmlkT3B0aW9ucykge1xuICAgICAgZ3JpZE9wdGlvbnMgPSB0aGlzLmdyaWRRdWVyeS5nZXRHcmlkT3B0aW9ucygpO1xuICAgIH1cbiAgICBjb25zdCB1cGRhdGVkQ29sRGVmcyA9IGNvbERlZnMubWFwKChjb2w6IERhdG9HcmlkQ29sdW1uRGVmKSA9PiB7XG4gICAgICBjb25zdCBub3JtYWxpemVkID0ge1xuICAgICAgICAuLi5jb2wsXG4gICAgICAgIGhlYWRlck5hbWU6IHRoaXMudHJhbnNsYXRlLnRyYW5zZm9ybShjb2wuaGVhZGVyTmFtZSlcbiAgICAgIH07XG4gICAgICAvKiogQWRqdXN0IHRoZSB3aWR0aCBpbiBjYXNlIHRoZSBjb2x1bW4gaGFzIGluZm8gKi9cbiAgICAgIGlmIChjb2wuaW5mbykge1xuICAgICAgICBub3JtYWxpemVkLm1pbldpZHRoID0gY29sLm1pbldpZHRoIHx8IEdyaWRNaW5XaWR0aHMuV2l0aF9JbmZvO1xuICAgICAgfVxuICAgICAgaWYgKCFjb2wuY29sSWQpIHtcbiAgICAgICAgbm9ybWFsaXplZC5jb2xJZCA9IGNvbC5maWVsZDtcbiAgICAgIH1cbiAgICAgIGlmIChub3JtYWxpemVkLnR5cGUgPT09IERhdG9HcmlkQ29sdW1uVHlwZXMuSXRlbXMgJiYgIW5vcm1hbGl6ZWQuZmlsdGVyc0NvbmZpZykge1xuICAgICAgICBub3JtYWxpemVkLmZpbHRlcnNDb25maWcgPSB7IHNlY3Rpb25zOiBEYXRvR3JpZEZpbHRlclNlY3Rpb25zLkNvbmRpdGlvbmFsIH07XG4gICAgICB9XG4gICAgICB0aGlzLm5vcm1hbGl6ZUNvbHVtblNlYXJjaENvbmZpZyhncmlkT3B0aW9ucywgY29sLCBub3JtYWxpemVkKTtcbiAgICAgIHJldHVybiBub3JtYWxpemVkO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMuYWRkTXVsdGlTZWxlY3RIZWFkZXJDb2x1bW5JZlJlcXVpcmVkKHVwZGF0ZWRDb2xEZWZzLCBncmlkT3B0aW9ucyk7XG4gIH1cblxuICBwcml2YXRlIG5vcm1hbGl6ZUNvbHVtblNlYXJjaENvbmZpZyhcbiAgICBncmlkT3B0aW9uczogRGF0b0dyaWRPcHRpb25zLFxuICAgIGNvbDogRGF0b0dyaWRDb2x1bW5EZWYsXG4gICAgbm9ybWFsaXplZDogRGF0b0dyaWRDb2x1bW5EZWZcbiAgKSB7XG4gICAgLyoqIENoZWNrIGlmIGNvbHVtbiBzaG91bGQgYmUgZXhjbHVkZWQgZnJvbSBzZWFyY2ggKiovXG4gICAgY29uc3QgaXNTZXJ2ZXJQYWdpbmF0aW9uID0gdGhpcy5pc1NlcnZlclNpZGVQYWdpbmF0aW9uKGdyaWRPcHRpb25zKTtcbiAgICBpZiAodHlwZW9mIGNvbC5pbmNsdWRlSW5TZWFyY2ggPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBpZiAoaXNTZXJ2ZXJQYWdpbmF0aW9uICYmIGNvbC50eXBlID09PSBEYXRvR3JpZENvbHVtblR5cGVzLkRhdGUpIHtcbiAgICAgICAgbm9ybWFsaXplZC5pbmNsdWRlSW5TZWFyY2ggPSBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5vcm1hbGl6ZWQuaW5jbHVkZUluU2VhcmNoID1cbiAgICAgICAgICB0eXBlb2YgZ3JpZE9wdGlvbnMuY29sdW1uc0luY2x1ZGVkSW5TZWFyY2hCeURlZmF1bHQgIT09ICd1bmRlZmluZWQnXG4gICAgICAgICAgICA/IGdyaWRPcHRpb25zLmNvbHVtbnNJbmNsdWRlZEluU2VhcmNoQnlEZWZhdWx0XG4gICAgICAgICAgICA6IGRlZmF1bHRHcmlkT3B0aW9ucy5jb2x1bW5zSW5jbHVkZWRJblNlYXJjaEJ5RGVmYXVsdDtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKFxuICAgICAgbm9ybWFsaXplZC5pbmNsdWRlSW5TZWFyY2ggJiZcbiAgICAgICF0aGlzLmhhc0NlbGxSZW5kZXJlcihub3JtYWxpemVkLCBncmlkT3B0aW9ucykgJiZcbiAgICAgIGdyaWRPcHRpb25zLmVuYWJsZVNlYXJjaEhpZ2hsaWdodFxuICAgICkge1xuICAgICAgbm9ybWFsaXplZC5jZWxsUmVuZGVyZXIgPSAocGFyYW1zOiBJQ2VsbFJlbmRlcmVyUGFyYW1zKSA9PiB7XG4gICAgICAgIGNvbnN0IGlzRWRpdGFibGUgPVxuICAgICAgICAgIChpc0Z1bmN0aW9uKG5vcm1hbGl6ZWQuZWRpdGFibGUpICYmIG5vcm1hbGl6ZWQuZWRpdGFibGUocGFyYW1zKSkgfHxcbiAgICAgICAgICAoIWlzRnVuY3Rpb24obm9ybWFsaXplZC5lZGl0YWJsZSkgJiYgbm9ybWFsaXplZC5lZGl0YWJsZSk7XG4gICAgICAgIHJldHVybiBpc0VkaXRhYmxlXG4gICAgICAgICAgPyBlZGl0YWJsZUNlbGxSZW5kZXJlcldpdGhTZWFyY2hIaWdobGlnaHQocGFyYW1zLCB0aGlzLmdyaWRRdWVyeS5nZXRTZWFyY2hUZXJtKCkpXG4gICAgICAgICAgOiBzZWFyY2hIaWdobGlnaHRDZWxsUmVuZGVyZXIocGFyYW1zLCB0aGlzLmdyaWRRdWVyeS5nZXRTZWFyY2hUZXJtKCkpO1xuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhc0NlbGxSZW5kZXJlcihjb2x1bW46IERhdG9HcmlkQ29sdW1uRGVmLCBncmlkT3B0aW9uczogRGF0b0dyaWRPcHRpb25zKTogYm9vbGVhbiB7XG4gICAgaWYgKGNvbHVtbi5jZWxsUmVuZGVyZXIpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBjb25zdCB0eXBlID0gY29sdW1uLnR5cGUgYXMgc3RyaW5nO1xuICAgIGNvbnN0IGNvbHVtblR5cGVIYXNDZWxsUmVuZGVyZXIgPSAob3B0aW9uczogUGFydGlhbDxEYXRvR3JpZE9wdGlvbnM+KTogYm9vbGVhbiA9PlxuICAgICAgb3B0aW9ucy5jb2x1bW5UeXBlcyAmJiAhIW9wdGlvbnMuY29sdW1uVHlwZXNbdHlwZV0gJiYgISFvcHRpb25zLmNvbHVtblR5cGVzW3R5cGVdLmNlbGxSZW5kZXJlcjtcblxuICAgIHJldHVybiBjb2x1bW5UeXBlSGFzQ2VsbFJlbmRlcmVyKGdyaWRPcHRpb25zKSB8fCBjb2x1bW5UeXBlSGFzQ2VsbFJlbmRlcmVyKGRlZmF1bHRHcmlkT3B0aW9ucyk7XG4gIH1cblxuICBwcml2YXRlIGFkZE11bHRpU2VsZWN0SGVhZGVyQ29sdW1uSWZSZXF1aXJlZChcbiAgICBjb2x1bW5EZWZzOiBEYXRvR3JpZENvbHVtbkRlZltdLFxuICAgIGdyaWRPcHRpb25zOiBEYXRvR3JpZE9wdGlvbnNcbiAgKTogRGF0b0dyaWRDb2x1bW5EZWZbXSB7XG4gICAgY29uc3Qgc2hvd011bHRpU2VsZWN0aW9uQ2hlY2tib3hlcyA9IGdyaWRPcHRpb25zICYmIGdyaWRPcHRpb25zLnNob3dNdWx0aVNlbGVjdGlvbkNoZWNrYm94ZXM7XG4gICAgY29uc3Qgcm93U2VsZWN0aW9uID1cbiAgICAgIGdyaWRPcHRpb25zICYmIGdyaWRPcHRpb25zLnJvd1NlbGVjdGlvbiA/IGdyaWRPcHRpb25zLnJvd1NlbGVjdGlvbiA6IGRlZmF1bHRHcmlkT3B0aW9ucy5yb3dTZWxlY3Rpb247XG5cbiAgICBpZiAoc2hvd011bHRpU2VsZWN0aW9uQ2hlY2tib3hlcyAmJiByb3dTZWxlY3Rpb24gPT09IEdyaWRSb3dTZWxlY3Rpb25UeXBlLk1VTFRJUExFKSB7XG4gICAgICBjb25zdCBjaGVja2JveGVzQ29sdW1uOiBEYXRvR3JpZENvbHVtbkRlZiA9IHtcbiAgICAgICAgY29sSWQ6IHRoaXMuQ0hFQ0tCT1hfU0VMRUNUSU9OX0NPTF9JRCxcbiAgICAgICAgY2hlY2tib3hTZWxlY3Rpb246IHRydWUsXG4gICAgICAgIGhlYWRlckNvbXBvbmVudEZyYW1ld29yazogRGF0b0dyaWRNdWx0aVNlbGVjdENvbHVtbkhlYWRlckNvbXBvbmVudCxcbiAgICAgICAgd2lkdGg6IDMwLFxuICAgICAgICBtYXhXaWR0aDogMzAsXG4gICAgICAgIHN1cHByZXNzU2l6ZVRvRml0OiB0cnVlLFxuICAgICAgICBjZWxsQ2xhc3M6ICdjaGVja2JveC1zZWxlY3Rpb24tY2VsbCcsXG4gICAgICAgIGhlYWRlckNsYXNzOiAnaGVhZGVyLWNoZWNrYm94LXNlbGVjdGlvbi1jZWxsJyxcbiAgICAgICAgcmVzaXphYmxlOiBmYWxzZSxcbiAgICAgICAgcGlubmVkOiAnbGVmdCcsXG4gICAgICAgIGxvY2tQb3NpdGlvbjogdHJ1ZSxcbiAgICAgICAgaW5jbHVkZUluU2VhcmNoOiBmYWxzZVxuICAgICAgfTtcbiAgICAgIHJldHVybiBbY2hlY2tib3hlc0NvbHVtbiwgLi4uY29sdW1uRGVmc107XG4gICAgfVxuICAgIHJldHVybiBjb2x1bW5EZWZzO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0T25Sb3dTZWxlY3RlZEZvclNlcnZlclNpZGVQYWdpbmF0aW9uKHsgZ3JpZE9wdGlvbnMgfTogTm9ybWFsaXplT3B0aW9uc1BhcmFtcykge1xuICAgIGlmICghdGhpcy5pc1NlcnZlclNpZGVQYWdpbmF0aW9uKGdyaWRPcHRpb25zKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBleHRlcm5hbE9uUm93U2VsZWN0ZWQgPSBncmlkT3B0aW9ucy5vblJvd1NlbGVjdGVkO1xuICAgIGdyaWRPcHRpb25zLm9uUm93U2VsZWN0ZWQgPSAoZXZ0OiBSb3dTZWxlY3RlZEV2ZW50KSA9PiB7XG4gICAgICBpZiAodGhpcy5ncmlkUXVlcnkuaXNTZXJ2ZXJTZWxlY3RBbGxSb3dzRW5hYmxlZCkge1xuICAgICAgICBjb25zdCBub2RlID0gZXZ0Lm5vZGU7XG4gICAgICAgIGNvbnN0IGlzU2VsZWN0ZWQgPSBub2RlLmlzU2VsZWN0ZWQoKTtcbiAgICAgICAgY29uc3QgeyBleGNsdWRlZEZyb21TZWxlY3RBbGwgfSA9IHRoaXMuZ3JpZFF1ZXJ5LnNlcnZlclNpZGVDb25maWc7XG4gICAgICAgIGNvbnN0IGlzRXhjbHVkZWQgPSBleGNsdWRlZEZyb21TZWxlY3RBbGwuaW5jbHVkZXMobm9kZS5pZCk7XG4gICAgICAgIGlmIChpc1NlbGVjdGVkICYmIGlzRXhjbHVkZWQpIHtcbiAgICAgICAgICB0aGlzLnNldFNlcnZlclNpZGVQYWdpbmF0aW9uKHtcbiAgICAgICAgICAgIGV4Y2x1ZGVkRnJvbVNlbGVjdEFsbDogZXhjbHVkZWRGcm9tU2VsZWN0QWxsLmZpbHRlcigobm9kZUlkOiBzdHJpbmcpID0+IG5vZGVJZCAhPT0gbm9kZS5pZClcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmICghaXNTZWxlY3RlZCAmJiAhaXNFeGNsdWRlZCkge1xuICAgICAgICAgIHRoaXMuc2V0U2VydmVyU2lkZVBhZ2luYXRpb24oeyBleGNsdWRlZEZyb21TZWxlY3RBbGw6IFsuLi5leGNsdWRlZEZyb21TZWxlY3RBbGwsIG5vZGUuaWRdIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZXh0ZXJuYWxPblJvd1NlbGVjdGVkKSB7XG4gICAgICAgIGV4dGVybmFsT25Sb3dTZWxlY3RlZChldnQpO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHJvd01hdGNoZXNTZWFyY2gocm93OiBSb3dOb2RlKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgc2VhcmNoVGVybSA9ICh0aGlzLmdyaWRRdWVyeS5nZXRTZWFyY2hUZXJtKCkgfHwgJycpLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICAgIGlmIChpc0VtcHR5KHNlYXJjaFRlcm0pKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgY29uc3QgY29sdW1ucyA9IHRoaXMuZ3JpZFF1ZXJ5LmdldEdyaWRPcHRpb25zKCkuaW5jbHVkZUhpZGRlbkNvbHVtbnNJblNlYXJjaFxuICAgICAgPyB0aGlzLmdyaWRRdWVyeS5nZXRBbGxDb2x1bW5zKClcbiAgICAgIDogdGhpcy5ncmlkUXVlcnkuZ2V0QWxsRGlzcGxheWVkQ29sdW1ucygpO1xuICAgIGZvciAoY29uc3QgY29sIG9mIGNvbHVtbnMpIHtcbiAgICAgIGNvbnN0IGNvbERlZiA9IHRoaXMuYXBpLmdyaWQuZ2V0Q29sdW1uRGVmKGNvbC5nZXRDb2xJZCgpKSBhcyBEYXRvR3JpZENvbHVtbkRlZjtcbiAgICAgIGlmICghY29sRGVmLmluY2x1ZGVJblNlYXJjaCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJvd1ZhbHVlID0gKHRoaXMuYXBpLmdyaWQuZ2V0VmFsdWUoY29sLmdldENvbElkKCksIHJvdykgfHwgJycpLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKTtcbiAgICAgIGlmIChyb3dWYWx1ZS5pbmNsdWRlcyhzZWFyY2hUZXJtKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIHVzZSBmaXRHcmlkKCdjb250YWluZXInKSBpbnN0ZWFkXG4gICAqL1xuICBmaXRUb0NvbnRhaW5lcigpIHtcbiAgICB0aGlzLmFwaS5ncmlkLnNpemVDb2x1bW5zVG9GaXQoKTtcbiAgfVxuXG4gIGdldEN1c3RvbUhlYWRlcihmaWVsZDogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMuY3VzdG9tSGVhZGVyc1RlbXBsYXRlcykge1xuICAgICAgY29uc3Qgc3BlY2lmaWMgPSB0aGlzLmN1c3RvbUhlYWRlcnNUZW1wbGF0ZXMuZmluZCgoeyBjb2x1bW4gfSkgPT4gY29sdW1uID09PSBmaWVsZCk7XG4gICAgICBjb25zdCBjb21tb24gPSB0aGlzLmN1c3RvbUhlYWRlcnNUZW1wbGF0ZXMuZmluZCgoeyBjb2x1bW4gfSkgPT4gIWNvbHVtbik7XG4gICAgICBpZiAoc3BlY2lmaWMgfHwgY29tbW9uKSB7XG4gICAgICAgIGNvbnN0IHsgbW9yZU1lbnUsIGN1c3RvbUhlYWRlciB9ID0ge1xuICAgICAgICAgIG1vcmVNZW51OiAoc3BlY2lmaWMgJiYgc3BlY2lmaWMubW9yZU1lbnUpIHx8IChjb21tb24gJiYgY29tbW9uLm1vcmVNZW51KSxcbiAgICAgICAgICBjdXN0b21IZWFkZXI6IChzcGVjaWZpYyAmJiBzcGVjaWZpYy5jdXN0b21IZWFkZXIpIHx8IChjb21tb24gJiYgY29tbW9uLmN1c3RvbUhlYWRlcilcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHsgbW9yZU1lbnU6IG1vcmVNZW51ICYmIG1vcmVNZW51LnRwbCwgY3VzdG9tSGVhZGVyOiBjdXN0b21IZWFkZXIgJiYgY3VzdG9tSGVhZGVyLnRwbCB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIGNsZWFyQWxsRmlsdGVycygpIHtcbiAgICB0aGlzLnN0b3JlLnVwZGF0ZShzdGF0ZSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzZXR0aW5nczoge1xuICAgICAgICAgIC4uLnN0YXRlLnNldHRpbmdzLFxuICAgICAgICAgIGZpbHRlcjoge30sXG4gICAgICAgICAgc2VhcmNoVGVybTogbnVsbFxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0pO1xuICAgIHRoaXMubm90aWZ5RmlsdGVyVXBkYXRlKCk7XG4gIH1cblxuICBjbGVhckNvbHVtbkZpbHRlcihjb2x1bW5GaWVsZDogc3RyaW5nKSB7XG4gICAgY29uc3QgeyBbY29sdW1uRmllbGRdOiBkZWxldGVkLCAuLi5maWx0ZXIgfSA9IHRoaXMuZ3JpZFF1ZXJ5LmdldEZpbHRlcigpO1xuICAgIHRoaXMuc3RvcmUudXBkYXRlKHN0YXRlID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNldHRpbmdzOiB7XG4gICAgICAgICAgLi4uc3RhdGUuc2V0dGluZ3MsXG4gICAgICAgICAgZmlsdGVyXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSk7XG4gICAgdGhpcy5ub3RpZnlGaWx0ZXJVcGRhdGUoKTtcbiAgfVxuXG4gIHNldENvbHVtbkZpbHRlcihjb2x1bW46IENvbHVtbiwgZmlsdGVyOiBEYXRvR3JpZEZpbHRlcikge1xuICAgIHRoaXMuX2xvZ0V2ZW50KENvcmVFdmVudFR5cGVzLkdSSURfRklMVEVSX0FQUExJRUQsIHtcbiAgICAgIGNvbHVtbjogY29sdW1uLmdldENvbElkKCksXG4gICAgICBudW1PZkNvbmRpdGlvbnM6IChmaWx0ZXIuY29uZGl0aW9uYWwgJiYgZmlsdGVyLmNvbmRpdGlvbmFsLmNvbmRpdGlvbnMubGVuZ3RoKSB8fCAwLFxuICAgICAgYnlWYWx1ZTogISFmaWx0ZXIuYnlWYWx1ZSA/ICdZZXMnIDogJ05vJ1xuICAgIH0pO1xuXG4gICAgY29uc3QgY29sRmllbGQgPSBnZXRDb2xGaWVsZChjb2x1bW4uZ2V0Q29sRGVmKCkpO1xuXG4gICAgdGhpcy5zdG9yZS51cGRhdGUoc3RhdGUgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2V0dGluZ3M6IHtcbiAgICAgICAgICAuLi5zdGF0ZS5zZXR0aW5ncyxcbiAgICAgICAgICBmaWx0ZXI6IHtcbiAgICAgICAgICAgIC4uLnN0YXRlLnNldHRpbmdzLmZpbHRlcixcbiAgICAgICAgICAgIFtjb2xGaWVsZF06IGZpbHRlclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9KTtcblxuICAgIHRoaXMubm90aWZ5RmlsdGVyVXBkYXRlKCk7XG4gIH1cblxuICBzZXRTZWFyY2hUZXJtKHNlYXJjaFRlcm06IHN0cmluZykge1xuICAgIHRoaXMuc3RvcmUudXBkYXRlKHN0YXRlID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNldHRpbmdzOiB7XG4gICAgICAgICAgLi4uc3RhdGUuc2V0dGluZ3MsXG4gICAgICAgICAgc2VhcmNoVGVybVxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0pO1xuICAgIHRoaXMubm90aWZ5RmlsdGVyVXBkYXRlKCk7XG4gIH1cblxuICBzZXRTZXJ2ZXJTaWRlUGFnaW5hdGlvbihjb25maWc6IFBhcnRpYWw8U2VydmVyU2lkZVBhZ2luYXRpb25Db25maWc+KSB7XG4gICAgdGhpcy5zdG9yZS51cGRhdGUoc3RhdGUgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2VydmVyU2lkZVBhZ2luYXRpb246IHtcbiAgICAgICAgICAuLi5zdGF0ZS5zZXJ2ZXJTaWRlUGFnaW5hdGlvbixcbiAgICAgICAgICAuLi5jb25maWdcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIHNldExvYWRpbmcoc2hvdzogYm9vbGVhbikge1xuICAgIGlmIChzaG93KSB7XG4gICAgICB0aGlzLmFwaS5ncmlkLnNob3dMb2FkaW5nT3ZlcmxheSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFwaS5ncmlkLmdldERpc3BsYXllZFJvd0NvdW50KCkgPT09IDAgPyB0aGlzLnNldE92ZXJsYXkodHJ1ZSkgOiB0aGlzLnNldE92ZXJsYXkoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCB1c2Ugc2V0T3ZlcmxheSBpbnN0ZWFkXG4gICAqIEBwYXJhbSBzaG93XG4gICAqL1xuICBzZXROb0RhdGEoc2hvdzogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0T3ZlcmxheShzaG93KTtcbiAgfVxuXG4gIHNldE92ZXJsYXkoc2hvdzogYm9vbGVhbikge1xuICAgIHNob3cgPyB0aGlzLmFwaS5ncmlkLnNob3dOb1Jvd3NPdmVybGF5KCkgOiB0aGlzLmFwaS5ncmlkLmhpZGVPdmVybGF5KCk7XG4gIH1cblxuICB1cGRhdGVTZXR0aW5ncyhzZXR0aW5nczogUGFydGlhbDxEYXRvR3JpZFNldHRpbmdzPikge1xuICAgIHRoaXMuc3RvcmUudXBkYXRlKHN0YXRlID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNldHRpbmdzOiB7XG4gICAgICAgICAgLi4uc3RhdGUuc2V0dGluZ3MsXG4gICAgICAgICAgLi4uc2V0dGluZ3NcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIGZpdEdyaWQodG86ICdjb250YWluZXInIHwgJ2NvbnRlbnQnKSB7XG4gICAgdG8gPT09ICdjb250YWluZXInID8gdGhpcy5hcGkuZ3JpZC5zaXplQ29sdW1uc1RvRml0KCkgOiB0aGlzLmFwaS5jb2x1bW5zLmF1dG9TaXplQWxsQ29sdW1ucygpO1xuICAgIGNvbnN0IGdyaWRBbGlnbm1lbnQgPSB0byA9PT0gJ2NvbnRhaW5lcicgPyBEYXRvR3JpZEFsaWdubWVudC5GSVRfVE9fQ09OVEFJTkVSIDogRGF0b0dyaWRBbGlnbm1lbnQuRklUX1RPX0NPTlRFTlQ7XG4gICAgdGhpcy51cGRhdGVTZXR0aW5ncyh7IGdyaWRBbGlnbm1lbnQsIGNvbHVtbnNTaXplczogbnVsbCB9KTtcbiAgfVxuXG4gIHNhdmVTZXR0aW5nc1RvU2VydmVyKHNldHRpbmdzOiBQYXJ0aWFsPERhdG9HcmlkU2V0dGluZ3M+KSB7XG4gICAgY29uc3QgaXNHbG9iYWwgPSB0aGlzLmdyaWRRdWVyeS5nZXRHcmlkT3B0aW9ucygpLmlzR2xvYmFsU2V0dGluZ3M7XG4gICAgdGhpcy5zdG9yYWdlQVBJLnNldCh0aGlzLmdyaWROYW1lLCBzZXR0aW5ncywgaXNHbG9iYWwpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbCB1c2VkIHRvIGxvZyBncmlkIGV2ZW50cyB0byB0aGUgcGxhdGZvcm0ncyBsb2dnaW5nIHNlcnZpY2VcbiAgICovXG4gIF9sb2dFdmVudChldmVudFR5cGU6IENvcmVFdmVudFR5cGVzLCBldmVudFByb3BlcnRpZXM/OiBIYXNoTWFwPGFueT4pIHtcbiAgICB0aGlzLmxvZ2dlci5sb2dFdmVudChldmVudFR5cGUsIHsgdGFibGU6IHRoaXMuZ3JpZE5hbWUsIC4uLmV2ZW50UHJvcGVydGllcyB9KTtcbiAgfVxuXG4gIHByaXZhdGUgd3JhcFN1Y2Nlc3NDYWxsYmFjayh7IHN1Y2Nlc3NDYiwgcGFnZU51bWJlciwgaXNQZW5kaW5nUmV0dXJuVG9QYWdlIH06IFN1Y2Nlc3NXcmFwcGVyUGFyYW1zKSB7XG4gICAgcmV0dXJuIChyb3dzVGhpc0Jsb2NrOiBhbnlbXSwgdG90YWxSb3dzOiBudW1iZXIpID0+IHtcbiAgICAgIHRoaXMuc2V0U2VydmVyU2lkZVBhZ2luYXRpb24oeyB0b3RhbFJvd3MsIGhhc0Vycm9yOiBmYWxzZSB9KTtcbiAgICAgIHN1Y2Nlc3NDYihyb3dzVGhpc0Jsb2NrLCB0b3RhbFJvd3MpO1xuICAgICAgdGhpcy5ncmlkUXVlcnkuX3NlcnZlckRhdGFMb2FkZWQubmV4dCh7XG4gICAgICAgIGFwaTogdGhpcy5hcGkuZ3JpZCxcbiAgICAgICAgY29sdW1uQXBpOiB0aGlzLmFwaS5jb2x1bW5zLFxuICAgICAgICB0eXBlOiAnU2VydmVyRGF0YUxvYWRlZCcsXG4gICAgICAgIHBhZ2luYXRpb25QYWdlOiBwYWdlTnVtYmVyXG4gICAgICB9KTtcbiAgICAgIGlmICghaXNQZW5kaW5nUmV0dXJuVG9QYWdlKSB7XG4gICAgICAgIHRoaXMuc2V0TG9hZGluZyhmYWxzZSk7XG4gICAgICAgIC8qKiBzbyB0aGUgZ3JpZCBmaXRzIGluIGV2ZXJ5IG5ldyBkYXRhIGlucHV0ICovXG4gICAgICAgIHRyaWdnZXJXaW5kb3dSZXNpemUoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMubGFzdFRvdGFsUm93cyA9IHRvdGFsUm93cztcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSB3cmFwR2V0Um93cyhvcHRpb25zOiBEYXRvR3JpZE9wdGlvbnMsIGdldFJvd3M/OiAocGFyYW1zOiBEYXRvR3JpZEdldFJvd3NQYXJhbXMpID0+IHZvaWQpIHtcbiAgICBjb25zdCBnZXRSb3dzQ2IgPSBnZXRSb3dzIHx8IG9wdGlvbnMuZGF0YXNvdXJjZS5nZXRSb3dzO1xuICAgIHJldHVybiAoZ2V0Um93c1BhcmFtczogSUdldFJvd3NQYXJhbXMpID0+IHtcbiAgICAgIGNvbnN0IHsgc3RhcnRSb3csIGVuZFJvdywgc29ydE1vZGVsLCBzdWNjZXNzQ2FsbGJhY2sgfSA9IGdldFJvd3NQYXJhbXM7XG4gICAgICBjb25zdCBwYWdlU2l6ZSA9IG9wdGlvbnMucGFnaW5hdGlvblBhZ2VTaXplIHx8IDEwMDtcbiAgICAgIGNvbnN0IGlzUmV0dXJuVG9DdXJyZW50UGFnZVJlcXVpcmVkID0gdGhpcy5wYWdlTnVtYmVyVG9SZXR1cm5BZnRlclJlZnJlc2ggPiAwO1xuICAgICAgY29uc3QgaXNQZW5kaW5nUmV0dXJuVG9QYWdlID0gaXNSZXR1cm5Ub0N1cnJlbnRQYWdlUmVxdWlyZWQgJiYgc3RhcnRSb3cgPT09IDA7XG5cbiAgICAgIGNvbnN0IHBhZ2VOdW1iZXIgPSBpc1JldHVyblRvQ3VycmVudFBhZ2VSZXF1aXJlZFxuICAgICAgICA/IHRoaXMucGFnZU51bWJlclRvUmV0dXJuQWZ0ZXJSZWZyZXNoICsgMVxuICAgICAgICA6IE1hdGguY2VpbChlbmRSb3cgLyBwYWdlU2l6ZSk7XG5cbiAgICAgIHRoaXMucGFnZU51bWJlclRvUmV0dXJuQWZ0ZXJSZWZyZXNoID0gLTE7XG5cbiAgICAgIGNvbnN0IGZpbHRlciA9IHRoaXMuZ3JpZFF1ZXJ5LmdldEZpbHRlcigpO1xuICAgICAgY29uc3QgbmV3UGFyYW1zOiBEYXRvR3JpZEdldFJvd3NQYXJhbXMgPSB7XG4gICAgICAgIC4uLmdldFJvd3NQYXJhbXMsXG4gICAgICAgIGZhaWxDYWxsYmFjazogKCkgPT4ge1xuICAgICAgICAgIHRoaXMuc2V0U2VydmVyU2lkZVBhZ2luYXRpb24oeyBoYXNFcnJvcjogdHJ1ZSB9KTtcbiAgICAgICAgICB0aGlzLnNldE92ZXJsYXkodHJ1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIHN1Y2Nlc3NDYWxsYmFjazogdGhpcy53cmFwU3VjY2Vzc0NhbGxiYWNrKHsgcGFnZU51bWJlciwgc3VjY2Vzc0NiOiBzdWNjZXNzQ2FsbGJhY2ssIGlzUGVuZGluZ1JldHVyblRvUGFnZSB9KSxcbiAgICAgICAgc2VydmVyQ29uZmlnOiB7XG4gICAgICAgICAgcGFnZVNpemUsXG4gICAgICAgICAgcGFnZU51bWJlcixcbiAgICAgICAgICBjb2x1bW5GaWx0ZXJzOiBpc0VtcHR5KGZpbHRlcikgfHwgb3B0aW9ucy5lbmFibGVWMl8xID8gbnVsbCA6IHRoaXMuYnVpbGRTZXJ2ZXJSZXF1ZXN0RmlsdGVycyhmaWx0ZXIpLFxuICAgICAgICAgIGZpbHRlcjogb3B0aW9ucy5lbmFibGVWMl8xID8gdGhpcy5idWlsZFNlcnZlclJlcXVlc3RGaWx0ZXJzX3YyXzEob3B0aW9ucy5jb2x1bW5EZWZzKSA6IG51bGwsXG4gICAgICAgICAgc29ydDogdGhpcy5idWlsZFNlcnZlclJlcXVlc3RTb3J0KHNvcnRNb2RlbClcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGlmIChpc1BlbmRpbmdSZXR1cm5Ub1BhZ2UpIHtcbiAgICAgICAgLy8gU2NlbmFyaW8gdGhlIGZvbGxvd2luZyBoYW5kbGVzIC0gc2VydmVyIHJlZnJlc2ggd2hlcmUgaXQgd2FzIHJlcXVlc3RlZCB0byBrZWVwIHRoZSBjdXJyZW50IHBhZ2UuXG4gICAgICAgIC8vIFRoZSBwcm9ibGVtIC0gZ2V0Um93cyB3aWxsIGluaXRpYWxseSBiZSBjYWxsZWQgZm9yIHBhZ2UgMSAoYXV0b21hdGljYWxseSBoYXBwZW5zIHdoZW4gY2FsbGluZyBhZy1ncmlkJ3Mgc2V0RGF0YVNvdXJjZSkuXG4gICAgICAgIC8vIEluIG9yZGVyIHRvIHRyaWdnZXIgaXQgYWdhaW4sIHN1Y2Nlc3NDYWxsYmFjayBpcyBjYWxsZWQgd2l0aCB0aGUgZGVzaXJlZCBwYWdlLlxuICAgICAgICAvLyBmYWtlR2V0Um93cyBpcyB1c2VkIGluIG9yZGVyIHRvIGF2b2lkIHJldHJpZXZpbmcgdGhlIHVubmVjZXNzYXJ5IHJlYWwgZGF0YSBmb3IgcGFnZSAxLlxuICAgICAgICBjb25zdCBmYWtlR2V0Um93cyA9ICh7IHN1Y2Nlc3NDYWxsYmFjayB9OiBEYXRvR3JpZEdldFJvd3NQYXJhbXMpID0+IHtcbiAgICAgICAgICBzdWNjZXNzQ2FsbGJhY2soW10sIHRoaXMubGFzdFRvdGFsUm93cyk7XG4gICAgICAgIH07XG4gICAgICAgIGZha2VHZXRSb3dzKG5ld1BhcmFtcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBnZXRSb3dzQ2IobmV3UGFyYW1zKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0RWRpdGFibGVDb2x1bW5zQ2VsbENsYXNzKHBhcmFtczogTm9ybWFsaXplT3B0aW9uc1BhcmFtcykge1xuICAgIHBhcmFtcy5ncmlkT3B0aW9ucy5jb2x1bW5EZWZzLmZvckVhY2goY29sRGVmID0+IHtcbiAgICAgIGlmIChjb2xEZWYuZWRpdGFibGUpIHtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24oY29sRGVmLmVkaXRhYmxlKSkge1xuICAgICAgICAgIGNvbnN0IGluaXRpYWxDZWxsQ2xhc3MgPSBjb2xEZWYuY2VsbENsYXNzO1xuICAgICAgICAgIGNvbERlZi5jZWxsQ2xhc3MgPSAoY2VsbENsYXNzUGFyYW1zOiBDZWxsQ2xhc3NQYXJhbXMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGlzRWRpdGFibGUgPSAoY29sRGVmLmVkaXRhYmxlIGFzIEZ1bmN0aW9uKShjZWxsQ2xhc3NQYXJhbXMgYXMgYW55KTtcbiAgICAgICAgICAgIGlmIChpc0VkaXRhYmxlKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGVkaXRhYmxlUmVzdWx0ID0gdGhpcy5hZGRFZGl0YWJsZUNlbGxDbGFzcyhpbml0aWFsQ2VsbENsYXNzKTtcbiAgICAgICAgICAgICAgcmV0dXJuIGlzRnVuY3Rpb24oZWRpdGFibGVSZXN1bHQpID8gZWRpdGFibGVSZXN1bHQoY2VsbENsYXNzUGFyYW1zKSA6IGVkaXRhYmxlUmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGlzRnVuY3Rpb24oaW5pdGlhbENlbGxDbGFzcykgPyBpbml0aWFsQ2VsbENsYXNzKGNlbGxDbGFzc1BhcmFtcykgOiBpbml0aWFsQ2VsbENsYXNzO1xuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29sRGVmLmNlbGxDbGFzcyA9IHRoaXMuYWRkRWRpdGFibGVDZWxsQ2xhc3MoY29sRGVmLmNlbGxDbGFzcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgd3JhcENvbnRleHRNZW51QnVpbGRlcihwYXJhbXM6IE5vcm1hbGl6ZU9wdGlvbnNQYXJhbXMpIHtcbiAgICBjb25zdCB7IGN1c3RvbUNvbnRleHRNZW51IH0gPSBwYXJhbXMuZ3JpZE9wdGlvbnM7XG4gICAgY29uc3QgYWxsQWN0aW9ucyA9IGlzRnVuY3Rpb24oY3VzdG9tQ29udGV4dE1lbnUpID8gY3VzdG9tQ29udGV4dE1lbnUocGFyYW1zLnJvd0FjdGlvbnMpIDogcGFyYW1zLnJvd0FjdGlvbnM7XG4gICAgdGhpcy50cmFuc2xhdGVBY3Rpb25MYWJlbHMoYWxsQWN0aW9ucyk7XG4gICAgY29uc3QgY29weUFjdGlvbjogUm93QWN0aW9uID0ge1xuICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLnRyYW5zZm9ybSgnY29yZS5jb3B5LWNlbGwnKSxcbiAgICAgIGljb246ICdjb3B5JyxcbiAgICAgIGtleTogJ0NvcHkgQ2VsbCdcbiAgICB9O1xuICAgIHJldHVybiAoeyBub2RlLCBjb2x1bW4sIGNvbnRleHQgfTogR2V0Q29udGV4dE1lbnVJdGVtc1BhcmFtcykgPT4ge1xuICAgICAgY29uc3Qgb25Ib3ZlckFjdGlvbk1lbnUgPSBjb250ZXh0ICYmIGNvbnRleHQuY29udGV4dE1lbnUgJiYgY29udGV4dC5jb250ZXh0TWVudS5mcm9tT25Ib3ZlcjtcbiAgICAgIGlmICghbm9kZSkgcmV0dXJuIFtdO1xuICAgICAgbGV0IHNlbGVjdGVkID0gW25vZGVdO1xuICAgICAgbGV0IHJvd3NDb3VudCA9IDE7XG4gICAgICBpZiAob25Ib3ZlckFjdGlvbk1lbnUpIHtcbiAgICAgICAgdGhpcy51cGRhdGVHcmlkQ29udGV4dCh7IGNvbnRleHRNZW51OiB7IGZyb21PbkhvdmVyOiBmYWxzZSB9IH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29weUFjdGlvbi5vbkNsaWNrID0gKFtyb3ddKSA9PiB7XG4gICAgICAgICAgY29uc3QgcmF3VmFsdWUgPSB0aGlzLmFwaS5ncmlkLmdldFZhbHVlKGNvbHVtbi5nZXRDb2xJZCgpLCByb3cpO1xuICAgICAgICAgIGNvbnN0IGZvcm1hdHRlciA9IGNvbHVtbi5nZXRDb2xEZWYoKS52YWx1ZUZvcm1hdHRlcjtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IGZvcm1hdHRlciA/IGZvcm1hdHRlcihyYXdWYWx1ZSkgOiByYXdWYWx1ZTtcbiAgICAgICAgICBjb3B5VG9DbGlwYm9hcmQodmFsdWUpO1xuICAgICAgICB9O1xuICAgICAgICBpZiAobm9kZS5pc1NlbGVjdGVkKCkpIHtcbiAgICAgICAgICBzZWxlY3RlZCA9IHRoaXMuZ3JpZFF1ZXJ5LmdldFNlbGVjdGVkUm93Tm9kZXMoKTtcbiAgICAgICAgICByb3dzQ291bnQgPSBzaXplKHNlbGVjdGVkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc3QgdmlzaWJsZUFjdGlvbnMgPSBnZXRWaXNpYmxlQWN0aW9ucyhcbiAgICAgICAgYWxsQWN0aW9ucyxcbiAgICAgICAgcm93c0NvdW50LFxuICAgICAgICBzZWxlY3RlZCxcbiAgICAgICAgdGhpcy5ncmlkUXVlcnkuaXNTZXJ2ZXJTZWxlY3RBbGxSb3dzRW5hYmxlZFxuICAgICAgKS5maWx0ZXIoKHsgdmlzaWJsZSB9KSA9PiB2aXNpYmxlKTtcbiAgICAgIGxldCB0b29sYmFyQWN0aW9ucyA9IFtjb3B5QWN0aW9uXTtcbiAgICAgIGlmIChvbkhvdmVyQWN0aW9uTWVudSkge1xuICAgICAgICB0b29sYmFyQWN0aW9ucyA9IHZpc2libGVBY3Rpb25zO1xuICAgICAgfSBlbHNlIGlmICh2aXNpYmxlQWN0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRvb2xiYXJBY3Rpb25zID0gW3sgLi4uY29weUFjdGlvbiwgc2VwYXJhdG9yOiB0cnVlIH0sIC4uLnZpc2libGVBY3Rpb25zXTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNvbnZlcnRlclBhcmFtczogQWN0aW9uQ29udmVydGVyUGFyYW1zID0ge1xuICAgICAgICB0b29sYmFyQWN0aW9ucyxcbiAgICAgICAgc2VsZWN0ZWRSb3dzOiBzZWxlY3RlZCxcbiAgICAgICAgaWNvblJlZ2lzdHJ5OiB0aGlzLnN2Z1JlZ2lzdHJ5LFxuICAgICAgICBub2RlLFxuICAgICAgICBsb2dnZXI6IHtcbiAgICAgICAgICBsb2c6IHRoaXMuX2xvZ0V2ZW50LmJpbmQodGhpcyksXG4gICAgICAgICAgZXZlbnRPcmlnaW46IG9uSG92ZXJBY3Rpb25NZW51ID8gJ09uIEhvdmVyJyA6ICdDb250ZXh0IE1lbnUnXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICByZXR1cm4gdG9vbGJhckFjdGlvblRvQ29udGV4dEFjdGlvbihjb252ZXJ0ZXJQYXJhbXMpO1xuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHRyYW5zbGF0ZUFjdGlvbkxhYmVscyhhbGxBY3Rpb25zOiBSb3dBY3Rpb25bXSkge1xuICAgIGFsbEFjdGlvbnMuZm9yRWFjaChhY3Rpb24gPT4ge1xuICAgICAgYWN0aW9uLmxhYmVsID0gdGhpcy50cmFuc2xhdGUudHJhbnNmb3JtKGFjdGlvbi5sYWJlbCk7XG4gICAgICBpZiAoYWN0aW9uLnN1Yk1lbnUpIHtcbiAgICAgICAgdGhpcy50cmFuc2xhdGVBY3Rpb25MYWJlbHMoYWN0aW9uLnN1Yk1lbnUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgbG9hZFNhdmVkU2V0dGluZ3Moc2V0dGluZ3M6IFBhcnRpYWw8RGF0b0dyaWRTZXR0aW5ncz4pIHtcbiAgICBjb25zdCB7XG4gICAgICBzb3J0LFxuICAgICAgaGlkZGVuQ29sdW1ucyxcbiAgICAgIGZpbHRlcixcbiAgICAgIGdyb3VwZWRDb2x1bW5zLFxuICAgICAgY29sdW1uc1NpemVzLFxuICAgICAgcGlubmVkQ29sdW1ucyxcbiAgICAgIGNvbHVtbnNPcmRlcixcbiAgICAgIGdyaWRBbGlnbm1lbnRcbiAgICB9ID0gc2V0dGluZ3M7XG4gICAgY29uc3QgeyBncmlkLCBjb2x1bW5zIH0gPSB0aGlzLmFwaTtcbiAgICAvKiBIaWRlIGNvbHVtbnMgKi9cbiAgICAvKiBOT1RFOiBjb2x1bW5zIG9yZGVyIGFyZSB0cmVhdGVkIGFzIHRoZSBjdXJyZW50bHkgdmlzaWJsZSBjb2x1bW5zICovXG4gICAgY29sdW1ucy5zZXRDb2x1bW5zVmlzaWJsZSh0aGlzLmluaXRpYWxTZXR0aW5ncy5jb2x1bW5zT3JkZXIsIHRydWUpO1xuICAgIGNvbnN0IGNvbHVtblRvSGlkZSA9ICFpc05pbChoaWRkZW5Db2x1bW5zKSA/IGhpZGRlbkNvbHVtbnMgOiB0aGlzLmluaXRpYWxTZXR0aW5ncy5oaWRkZW5Db2x1bW5zO1xuICAgIGNvbHVtbnMuc2V0Q29sdW1uc1Zpc2libGUoY29sdW1uVG9IaWRlLCBmYWxzZSk7XG5cbiAgICAvKiBBcHBseSBmaWx0ZXJzICovXG4gICAgaWYgKGZpbHRlcikge1xuICAgICAgZ3JpZC5vbkZpbHRlckNoYW5nZWQoKTtcbiAgICB9XG5cbiAgICAvKiBHcm91cCBjb2x1bW5zICovXG4gICAgY29uc3QgYWxsR3JvdXBlZENvbHVtbnMgPSBjb2x1bW5zLmdldFJvd0dyb3VwQ29sdW1ucygpO1xuICAgIGxldCByZW1vdmVHcm91cGVkO1xuICAgIGlmIChncm91cGVkQ29sdW1ucykge1xuICAgICAgcmVtb3ZlR3JvdXBlZCA9IGFsbEdyb3VwZWRDb2x1bW5zLmZpbHRlcihjb2wgPT4gIWdyb3VwZWRDb2x1bW5zLmluY2x1ZGVzKGNvbC5nZXRDb2xJZCgpKSk7XG4gICAgICBjb2x1bW5zLmFkZFJvd0dyb3VwQ29sdW1ucyhncm91cGVkQ29sdW1ucyk7XG4gICAgICBjb2x1bW5zLnNldENvbHVtbnNWaXNpYmxlKGdyb3VwZWRDb2x1bW5zLCBmYWxzZSk7XG4gICAgfVxuICAgIGNvbHVtbnMucmVtb3ZlUm93R3JvdXBDb2x1bW5zKHJlbW92ZUdyb3VwZWQpO1xuICAgIGNvbHVtbnMuc2V0Q29sdW1uc1Zpc2libGUocmVtb3ZlR3JvdXBlZCwgdHJ1ZSk7XG5cbiAgICAvKiBBcHBseSBzb3J0ICovXG4gICAgY29uc3QgZ3JpZFNvcnQgPSBzb3J0IHx8IHRoaXMuaW5pdGlhbFNldHRpbmdzLnNvcnQ7XG4gICAgZ3JpZC5zZXRTb3J0TW9kZWwoZ3JpZFNvcnQgPyBbZ3JpZFNvcnRdIDogbnVsbCk7XG5cbiAgICAvKiBBbGlnbiBncmlkICovXG4gICAgaWYgKGdyaWRBbGlnbm1lbnQgPT09IERhdG9HcmlkQWxpZ25tZW50LkNVU1RPTSkge1xuICAgICAgLyogU2V0IGNvbHVtbiBzaXplcyAqL1xuICAgICAgY29sdW1uc1NpemVzICYmXG4gICAgICAgIE9iamVjdC5rZXlzKGNvbHVtbnNTaXplcykuZm9yRWFjaChjb2xJZCA9PiB7XG4gICAgICAgICAgaWYgKGNvbHVtbnNTaXplc1tjb2xJZF0gPT09IERhdG9HcmlkQWxpZ25tZW50LkZJVF9UT19DT05URU5UKSB7XG4gICAgICAgICAgICBjb2x1bW5zLmF1dG9TaXplQ29sdW1uKGNvbElkKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29sdW1ucy5zZXRDb2x1bW5XaWR0aChjb2xJZCwgY29sdW1uc1NpemVzW2NvbElkXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZ3JpZEFsaWdubWVudCA9PT0gRGF0b0dyaWRBbGlnbm1lbnQuRklUX1RPX0NPTlRFTlQgPyBjb2x1bW5zLmF1dG9TaXplQWxsQ29sdW1ucygpIDogZ3JpZC5zaXplQ29sdW1uc1RvRml0KCk7XG4gICAgfVxuXG4gICAgLyogUGluIGNvbHVtbnMgbGVmdCAqL1xuICAgIGNvbnN0IGZpbHRlcmVkUGlubmVkQ29sdW1ucyA9IHBpbm5lZENvbHVtbnNcbiAgICAgID8gcGlubmVkQ29sdW1ucy5maWx0ZXIoKGNvbDogc3RyaW5nKSA9PiBjb2wgIT09IHRoaXMuQ0hFQ0tCT1hfU0VMRUNUSU9OX0NPTF9JRClcbiAgICAgIDogbnVsbDtcbiAgICBjb25zdCBmaWx0ZXJlZENvbHVtbnMgPSBjb2x1bW5zT3JkZXJcbiAgICAgID8gY29sdW1uc09yZGVyLmZpbHRlcigoY29sOiBzdHJpbmcpID0+IGNvbCAhPT0gdGhpcy5DSEVDS0JPWF9TRUxFQ1RJT05fQ09MX0lEKVxuICAgICAgOiBudWxsO1xuICAgIHNpemUoZmlsdGVyZWRQaW5uZWRDb2x1bW5zKSA+IDBcbiAgICAgID8gY29sdW1ucy5zZXRDb2x1bW5zUGlubmVkKGZpbHRlcmVkUGlubmVkQ29sdW1ucywgJ2xlZnQnKVxuICAgICAgOiBmaWx0ZXJlZENvbHVtbnMgJiYgY29sdW1ucy5zZXRDb2x1bW5zUGlubmVkKGZpbHRlcmVkQ29sdW1ucywgbnVsbCk7XG5cbiAgICAvKiBPcmRlciBjb2x1bW5zICovXG4gICAgY29sdW1uc09yZGVyICYmIGNvbHVtbnMubW92ZUNvbHVtbnMoY29sdW1uc09yZGVyLCAwKTtcbiAgfVxuXG4gIGdldFNldHRpbmdzRGlmZigpOiBQYXJ0aWFsPERhdG9HcmlkU2V0dGluZ3M+IHtcbiAgICBjb25zdCBjdXJyZW50U3RhdGUgPSB0aGlzLmdyaWRRdWVyeS5nZXRDdXJyZW50R3JpZFNldHRpbmdzKCk7XG4gICAgcmV0dXJuIGRpZmYoY3VycmVudFN0YXRlLCB0aGlzLmluaXRpYWxTZXR0aW5ncyk7XG4gIH1cblxuICByZXNldFRhYmxlU2V0dGluZ3MoKSB7XG4gICAgY29uc3QgeyBmaWx0ZXIsIC4uLnJlc3QgfSA9IHRoaXMuaW5pdGlhbFNldHRpbmdzO1xuICAgIGNvbnN0IHsgY29sdW1ucyB9ID0gdGhpcy5hcGk7XG4gICAgY29uc3Qgb3JpZ2luYWxDb2xTaXplcyA9IGdldENvbHVtbnNTaXplcyhjb2x1bW5zLmdldEFsbEdyaWRDb2x1bW5zKCksIHRydWUpO1xuICAgIGNvbnN0IGdyaWRBbGlnbm1lbnQgPSBpc0VtcHR5KG9yaWdpbmFsQ29sU2l6ZXMpID8gcmVzdC5ncmlkQWxpZ25tZW50IDogRGF0b0dyaWRBbGlnbm1lbnQuQ1VTVE9NO1xuICAgIGNvbnN0IG5ld1NldHRpbmdzID0geyAuLi5yZXN0LCBjb2x1bW5zU2l6ZXM6IG9yaWdpbmFsQ29sU2l6ZXMsIGdyaWRBbGlnbm1lbnQgfTtcbiAgICB0aGlzLnVwZGF0ZVNldHRpbmdzKG5ld1NldHRpbmdzKTtcbiAgICB0aGlzLmxvYWRTYXZlZFNldHRpbmdzKG5ld1NldHRpbmdzKTtcbiAgICB0aGlzLnNhdmVTZXR0aW5nc1RvU2VydmVyKHsgZmlsdGVyIH0pO1xuICB9XG5cbiAgaW5pdFNldHRpbmdzKHNhdmVkU2V0dGluZ3M6IFBhcnRpYWw8RGF0b0dyaWRTZXR0aW5ncz4pIHtcbiAgICB0aGlzLmluaXRpYWxTZXR0aW5ncyA9IHRoaXMuZ3JpZFF1ZXJ5LmdldEN1cnJlbnRHcmlkU2V0dGluZ3MoKTtcbiAgICB0aGlzLnVwZGF0ZVNldHRpbmdzKHNhdmVkU2V0dGluZ3MpO1xuICAgIHRoaXMubG9hZFNhdmVkU2V0dGluZ3Moc2F2ZWRTZXR0aW5ncyk7XG4gIH1cblxuICBub3RpZnlGaWx0ZXJVcGRhdGUoKSB7XG4gICAgY29uc3Qgd2F0Y2ggPSBbdGhpcy5ncmlkUmVmLmZpbHRlckNoYW5nZWQuYXNPYnNlcnZhYmxlKCldO1xuICAgIGlmICh0aGlzLmdyaWRRdWVyeS5pc1NlcnZlclNpZGUpIHtcbiAgICAgIHdhdGNoLnB1c2godGhpcy5ncmlkUXVlcnkuc2VydmVyRGF0YUxvYWRlZCQpO1xuICAgICAgdGhpcy5zZXRMb2FkaW5nKHRydWUpO1xuICAgIH1cbiAgICBjb21iaW5lTGF0ZXN0KHdhdGNoKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2UoMSksXG4gICAgICAgIHVudGlsRGVzdHJveWVkKHRoaXMpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgY29uc3Qgcm93c0FmdGVyRmlsdGVyID0gdGhpcy5hcGkuZ3JpZC5nZXREaXNwbGF5ZWRSb3dDb3VudCgpO1xuICAgICAgICB0aGlzLnNldE92ZXJsYXkocm93c0FmdGVyRmlsdGVyID09PSAwKTtcbiAgICAgIH0pO1xuICAgIHRoaXMuYXBpLmdyaWQub25GaWx0ZXJDaGFuZ2VkKCk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkU2VydmVyUmVxdWVzdEZpbHRlcnMoZmlsdGVyOiBEYXRvR3JpZEZpbHRlcnNNYXApOiBTZXJ2ZXJTaWRlUGFnaW5hdGlvbkZpbHRlcnMge1xuICAgIGNvbnN0IGNvbHVtbnNGaWx0ZXJzOiBTZXJ2ZXJTaWRlUGFnaW5hdGlvbkZpbHRlcnMgPSB7fTtcbiAgICBmb3IgKGNvbnN0IFtjb2x1bW4sIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhmaWx0ZXIpKSB7XG4gICAgICBjb25zdCB7IGJ5VmFsdWUsIGNvbmRpdGlvbmFsIH0gPSB2YWx1ZTtcbiAgICAgIGlmIChieVZhbHVlKSB7XG4gICAgICAgIGNvbHVtbnNGaWx0ZXJzW2NvbHVtbl0gPSB7XG4gICAgICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yVHlwZXMuQU5ELFxuICAgICAgICAgIGZpbHRlcnM6IFtieVZhbHVlXVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgaWYgKGNvbmRpdGlvbmFsKSB7XG4gICAgICAgIGNvbnN0IGNvbmRpdGlvbmFsRmlsdGVyID0ge1xuICAgICAgICAgIG9wZXJhdG9yOiBjb25kaXRpb25hbC5vcGVyYXRvcixcbiAgICAgICAgICBmaWx0ZXJzOiBjb25kaXRpb25hbC5jb25kaXRpb25zLm1hcChpdGVtID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgY29uZGl0aW9uLCB2YWx1ZSB9ID0gaXRlbTtcbiAgICAgICAgICAgIGlmIChjb25kaXRpb24gPT09IERhdG9GaWx0ZXJDb25kaXRpb25zLklOX1JBTkdFKSB7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgY29uZGl0aW9uLFxuICAgICAgICAgICAgICAgIHN0YXJ0OiB2YWx1ZSxcbiAgICAgICAgICAgICAgICBlbmQ6IChpdGVtIGFzIERhdG9HcmlkUmFuZ2VGaWx0ZXJDb25kaXRpb24pLnJhbmdlRW5kXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaXRlbSBhcyBEYXRvR3JpZEZpbHRlckNvbmRpdGlvbjtcbiAgICAgICAgICB9KVxuICAgICAgICB9O1xuICAgICAgICBpZiAoYnlWYWx1ZSkge1xuICAgICAgICAgIGNvbHVtbnNGaWx0ZXJzW2NvbHVtbl0uZmlsdGVycy5wdXNoKGNvbmRpdGlvbmFsRmlsdGVyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb2x1bW5zRmlsdGVyc1tjb2x1bW5dID0gY29uZGl0aW9uYWxGaWx0ZXI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY29sdW1uc0ZpbHRlcnM7XG4gIH1cblxuICBidWlsZFNlcnZlclJlcXVlc3RGaWx0ZXJzX3YyXzEoZ3JpZENvbHVtbnM6IERhdG9HcmlkQ29sdW1uRGVmW10pOiBTZXJ2ZXJTaWRlUGFnaW5hdGlvbkZpbHRlciB7XG4gICAgY29uc3QgZmlsdGVyID0gdGhpcy5ncmlkUXVlcnkuZ2V0RmlsdGVyKCk7XG4gICAgY29uc3Qgc2VhcmNoVGVybSA9IHRoaXMuZ3JpZFF1ZXJ5LmdldFNlYXJjaFRlcm0oKTtcblxuICAgIGxldCBjb2x1bW5GaWx0ZXJzID0gdGhpcy5idWlsZFNlcnZlckNvbHVtbkZpbHRlcnNfdjJfMShmaWx0ZXIpO1xuICAgIGlmIChjb2x1bW5GaWx0ZXJzLmV2ZXJ5KCh7IG9wZXJhdG9yIH06IFNlcnZlclNpZGVQYWdpbmF0aW9uRmlsdGVyKSA9PiBvcGVyYXRvciA9PT0gT3BlcmF0b3JUeXBlcy5BTkQpKSB7XG4gICAgICBjb25zdCBmbGF0dGVuZWRGaWx0ZXJzID0gY29sdW1uRmlsdGVyc1xuICAgICAgICAubWFwKCh7IGZpbHRlcnMgfTogU2VydmVyU2lkZVBhZ2luYXRpb25GaWx0ZXIpID0+IGZpbHRlcnMpXG4gICAgICAgIC5yZWR1Y2UoKGFyciwgcmVzKSA9PiByZXMuY29uY2F0KGFyciksIFtdKTtcbiAgICAgIGNvbHVtbkZpbHRlcnMgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICBvcGVyYXRvcjogT3BlcmF0b3JUeXBlcy5BTkQsXG4gICAgICAgICAgZmlsdGVyczogZmxhdHRlbmVkRmlsdGVyc1xuICAgICAgICB9XG4gICAgICBdO1xuICAgIH1cbiAgICBjb25zdCBjb2x1bW5GaWx0ZXI6IFNlcnZlclNpZGVQYWdpbmF0aW9uRmlsdGVyID1cbiAgICAgIHNpemUoY29sdW1uRmlsdGVycykgPiAxXG4gICAgICAgID8geyBvcGVyYXRvcjogT3BlcmF0b3JUeXBlcy5BTkQsIGZpbHRlcnM6IGNvbHVtbkZpbHRlcnMgfVxuICAgICAgICA6IHNpemUoY29sdW1uRmlsdGVycykgPT09IDFcbiAgICAgICAgPyBjb2x1bW5GaWx0ZXJzWzBdXG4gICAgICAgIDogbnVsbDtcbiAgICBpZiAoIXNlYXJjaFRlcm0pIHtcbiAgICAgIHJldHVybiBjb2x1bW5GaWx0ZXI7XG4gICAgfVxuICAgIGNvbnN0IHsgaW5jbHVkZUhpZGRlbkNvbHVtbnNJblNlYXJjaCB9ID0gdGhpcy5ncmlkUXVlcnkuZ2V0R3JpZE9wdGlvbnMoKTtcbiAgICBjb25zdCBzZWFyY2hhYmxlQ29sdW1ucyA9IGdyaWRDb2x1bW5zLmZpbHRlcigoY29sRGVmOiBEYXRvR3JpZENvbHVtbkRlZikgPT4ge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgY29sRGVmLmluY2x1ZGVJblNlYXJjaCAmJiAoaW5jbHVkZUhpZGRlbkNvbHVtbnNJblNlYXJjaCB8fCB0aGlzLmFwaS5jb2x1bW5zLmdldENvbHVtbihjb2xEZWYuY29sSWQpLmlzVmlzaWJsZSgpKVxuICAgICAgKTtcbiAgICB9KTtcbiAgICBjb25zdCBzZWFyY2hGaWx0ZXJzOiBTZXJ2ZXJTaWRlUGFnaW5hdGlvbkNvbmRpdGlvbltdID0gc2VhcmNoYWJsZUNvbHVtbnMubWFwKCh7IGZpZWxkIH06IERhdG9HcmlkQ29sdW1uRGVmKSA9PiAoe1xuICAgICAgY29uZGl0aW9uOiBEYXRvRmlsdGVyQ29uZGl0aW9ucy5DT05UQUlOUyxcbiAgICAgIHZhbHVlOiBzZWFyY2hUZXJtLFxuICAgICAgY29sdW1uOiBmaWVsZFxuICAgIH0pKTtcbiAgICBjb25zdCBzZWFyY2hGaWx0ZXI6IFNlcnZlclNpZGVQYWdpbmF0aW9uRmlsdGVyID1cbiAgICAgIHNpemUoc2VhcmNoRmlsdGVycykgPiAwID8geyBvcGVyYXRvcjogT3BlcmF0b3JUeXBlcy5PUiwgZmlsdGVyczogc2VhcmNoRmlsdGVycyB9IDogbnVsbDtcbiAgICBpZiAoIWNvbHVtbkZpbHRlcikge1xuICAgICAgcmV0dXJuIHNlYXJjaEZpbHRlcjtcbiAgICB9XG4gICAgcmV0dXJuIHsgb3BlcmF0b3I6IE9wZXJhdG9yVHlwZXMuQU5ELCBmaWx0ZXJzOiBbY29sdW1uRmlsdGVyLCBzZWFyY2hGaWx0ZXJdIH07XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkU2VydmVyQ29sdW1uRmlsdGVyc192Ml8xKGZpbHRlcjogRGF0b0dyaWRGaWx0ZXJzTWFwKTogU2VydmVyU2lkZVBhZ2luYXRpb25GaWx0ZXJbXSB7XG4gICAgbGV0IGNvbHVtbkZpbHRlcnM6IFNlcnZlclNpZGVQYWdpbmF0aW9uRmlsdGVyW10gPSBbXTtcblxuICAgIGZvciAoY29uc3QgW2NvbHVtbiwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGZpbHRlcikpIHtcbiAgICAgIGxldCBjb2x1bW5GaWx0ZXI6IFNlcnZlclNpZGVQYWdpbmF0aW9uRmlsdGVyID0gbnVsbDtcbiAgICAgIGNvbnN0IHsgYnlWYWx1ZSwgY29uZGl0aW9uYWwgfSA9IHZhbHVlO1xuICAgICAgaWYgKGJ5VmFsdWUpIHtcbiAgICAgICAgY29sdW1uRmlsdGVyID0ge1xuICAgICAgICAgIG9wZXJhdG9yOiBPcGVyYXRvclR5cGVzLkFORCxcbiAgICAgICAgICBmaWx0ZXJzOiBbeyBjb2x1bW4sIC4uLmJ5VmFsdWUgfV1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGlmIChjb25kaXRpb25hbCkge1xuICAgICAgICBjb25zdCBjb25kaXRpb25hbEZpbHRlcjogU2VydmVyU2lkZVBhZ2luYXRpb25GaWx0ZXIgPSB0aGlzLmdldFNlcnZlckNvbmRpdGlvbmFsRmlsdGVyKGNvbmRpdGlvbmFsLCBjb2x1bW4pO1xuICAgICAgICBpZiAoY29sdW1uRmlsdGVyKSB7XG4gICAgICAgICAgY29sdW1uRmlsdGVyLmZpbHRlcnMucHVzaChjb25kaXRpb25hbEZpbHRlcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29sdW1uRmlsdGVyID0gY29uZGl0aW9uYWxGaWx0ZXI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbHVtbkZpbHRlcnMucHVzaChjb2x1bW5GaWx0ZXIpO1xuICAgIH1cbiAgICByZXR1cm4gY29sdW1uRmlsdGVycztcbiAgfVxuXG4gIGdldEZpbHRlckZvclNlcnZlckFjdGlvbk9uU2VsZWN0QWxsKCk6IFNlcnZlclNpZGVQYWdpbmF0aW9uRmlsdGVyIHtcbiAgICBjb25zdCB7IGV4Y2x1ZGVkRnJvbVNlbGVjdEFsbCB9ID0gdGhpcy5ncmlkUXVlcnkuc2VydmVyU2lkZUNvbmZpZztcbiAgICBjb25zdCB7IGNvbHVtbkRlZnMsIGlkQ29sdW1uS2V5IH0gPSB0aGlzLmdyaWRRdWVyeS5nZXRHcmlkT3B0aW9ucygpO1xuICAgIGNvbnN0IG1haW5GaWx0ZXIgPSB0aGlzLmJ1aWxkU2VydmVyUmVxdWVzdEZpbHRlcnNfdjJfMShjb2x1bW5EZWZzKTtcbiAgICBpZiAoaXNFbXB0eShleGNsdWRlZEZyb21TZWxlY3RBbGwpKSB7XG4gICAgICByZXR1cm4gbWFpbkZpbHRlcjtcbiAgICB9XG4gICAgY29uc3QgZXhjbHVkZWRSb3dzRmlsdGVyOiBTZXJ2ZXJTaWRlUGFnaW5hdGlvbkxpc3RDb25kaXRpb24gPSB7XG4gICAgICBjb25kaXRpb246IERhdG9GaWx0ZXJDb25kaXRpb25zLk5PVF9JTl9MSVNULFxuICAgICAgdmFsdWVzOiBleGNsdWRlZEZyb21TZWxlY3RBbGwsXG4gICAgICBjb2x1bW46IGlkQ29sdW1uS2V5XG4gICAgfTtcbiAgICBjb25zdCBmaWx0ZXJzID0gbWFpbkZpbHRlciA/IFttYWluRmlsdGVyLCBleGNsdWRlZFJvd3NGaWx0ZXJdIDogW2V4Y2x1ZGVkUm93c0ZpbHRlcl07XG4gICAgcmV0dXJuIHsgb3BlcmF0b3I6IE9wZXJhdG9yVHlwZXMuQU5ELCBmaWx0ZXJzIH07XG4gIH1cblxuICBwcml2YXRlIGdldFNlcnZlckNvbmRpdGlvbmFsRmlsdGVyKFxuICAgIGNvbmRpdGlvbmFsRmlsdGVyOiBEYXRvR3JpZENvbmRpdGlvbmFsRmlsdGVyLFxuICAgIGNvbHVtbjogc3RyaW5nXG4gICk6IFNlcnZlclNpZGVQYWdpbmF0aW9uRmlsdGVyIHtcbiAgICByZXR1cm4ge1xuICAgICAgb3BlcmF0b3I6IGNvbmRpdGlvbmFsRmlsdGVyLm9wZXJhdG9yLFxuICAgICAgZmlsdGVyczogY29uZGl0aW9uYWxGaWx0ZXIuY29uZGl0aW9ucy5tYXAoaXRlbSA9PiB7XG4gICAgICAgIGNvbnN0IHsgY29uZGl0aW9uLCB2YWx1ZSB9ID0gaXRlbTtcbiAgICAgICAgaWYgKGNvbmRpdGlvbiA9PT0gRGF0b0ZpbHRlckNvbmRpdGlvbnMuSU5fUkFOR0UpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29uZGl0aW9uLFxuICAgICAgICAgICAgc3RhcnQ6IHZhbHVlLFxuICAgICAgICAgICAgZW5kOiAoaXRlbSBhcyBEYXRvR3JpZFJhbmdlRmlsdGVyQ29uZGl0aW9uKS5yYW5nZUVuZCxcbiAgICAgICAgICAgIGNvbHVtblxuICAgICAgICAgIH0gYXMgU2VydmVyU2lkZVBhZ2luYXRpb25SYW5nZUNvbmRpdGlvbjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29uZGl0aW9uID09PSBEYXRvRmlsdGVyQ29uZGl0aW9ucy5JU19FTVBUWSB8fCBjb25kaXRpb24gPT09IERhdG9GaWx0ZXJDb25kaXRpb25zLk5PVF9FTVBUWSkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb25kaXRpb246IERhdG9GaWx0ZXJDb25kaXRpb25zLklTX0VNUFRZLFxuICAgICAgICAgICAgdmFsdWU6IGNvbmRpdGlvbiA9PT0gRGF0b0ZpbHRlckNvbmRpdGlvbnMuSVNfRU1QVFkgPyAndHJ1ZScgOiAnZmFsc2UnLFxuICAgICAgICAgICAgY29sdW1uXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyAuLi5pdGVtLCBjb2x1bW4gfSBhcyBTZXJ2ZXJTaWRlUGFnaW5hdGlvbkNvbmRpdGlvbjtcbiAgICAgIH0pXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRTZXJ2ZXJSZXF1ZXN0U29ydChzb3J0TW9kZWw6IERhdG9HcmlkU29ydFtdKTogRGF0b0dyaWRTZXJ2ZXJTb3J0W10ge1xuICAgIHJldHVybiBzb3J0TW9kZWwubWFwKCh7IGNvbElkLCBzb3J0IH0pID0+ICh7XG4gICAgICBjb2x1bW46IGNvbElkLFxuICAgICAgc29ydE9yZGVyOiBzb3J0LnRvVXBwZXJDYXNlKCkgYXMgRGF0b0dyaWRTZXJ2ZXJTb3J0RGlyZWN0aW9uXG4gICAgfSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRFZGl0YWJsZUNlbGxDbGFzcyhcbiAgICBjZWxsQ2xhc3NWYWx1ZTogc3RyaW5nIHwgc3RyaW5nW10gfCAoKGNlbGxDbGFzc1BhcmFtczogQ2VsbENsYXNzUGFyYW1zKSA9PiBzdHJpbmcgfCBzdHJpbmdbXSlcbiAgKSB7XG4gICAgaWYgKGlzTmlsKGNlbGxDbGFzc1ZhbHVlKSkge1xuICAgICAgcmV0dXJuICdkYXRvLWVkaXRhYmxlLWNlbGwnO1xuICAgIH0gZWxzZSBpZiAoaXNGdW5jdGlvbihjZWxsQ2xhc3NWYWx1ZSkpIHtcbiAgICAgIHJldHVybiBjZWxsQ2xhc3NQYXJhbXMgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRFZGl0YWJsZUNsYXNzQXJyYXkoY2VsbENsYXNzVmFsdWUoY2VsbENsYXNzUGFyYW1zKSk7XG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5nZXRFZGl0YWJsZUNsYXNzQXJyYXkoY2VsbENsYXNzVmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRFZGl0YWJsZUNsYXNzQXJyYXkoY3VycmVudENsYXNzOiBzdHJpbmcgfCBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBjZWxsQ2xhc3MgPSBjb2VyY2VBcnJheShjdXJyZW50Q2xhc3MpO1xuICAgIGNlbGxDbGFzcy5wdXNoKCdkYXRvLWVkaXRhYmxlLWNlbGwnKTtcbiAgICByZXR1cm4gY2VsbENsYXNzO1xuICB9XG5cbiAgc2VsZWN0QWxsQ3VycmVudFBhZ2VSb3dzKGlzU2VsZWN0ZWQgPSB0cnVlLCBjb25zaWRlckV4Y2x1ZGVkID0gZmFsc2UpIHtcbiAgICBsZXQgcm93c0ZvclNlbGVjdGlvbiA9IHRoaXMuZ3JpZFF1ZXJ5LmdldEN1cnJlbnRQYWdlUm93cygpO1xuICAgIGlmIChjb25zaWRlckV4Y2x1ZGVkKSB7XG4gICAgICBjb25zdCB7IGV4Y2x1ZGVkRnJvbVNlbGVjdEFsbCB9ID0gdGhpcy5ncmlkUXVlcnkuc2VydmVyU2lkZUNvbmZpZztcbiAgICAgIGlmICghaXNFbXB0eShleGNsdWRlZEZyb21TZWxlY3RBbGwpKSB7XG4gICAgICAgIHJvd3NGb3JTZWxlY3Rpb24gPSByb3dzRm9yU2VsZWN0aW9uLmZpbHRlcigoeyBpZCB9OiBSb3dOb2RlKSA9PiAhZXhjbHVkZWRGcm9tU2VsZWN0QWxsLmluY2x1ZGVzKGlkKSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlzU2VsZWN0ZWQgPyB0aGlzLnNlbGVjdFJvd3Mocm93c0ZvclNlbGVjdGlvbikgOiB0aGlzLmRlc2VsZWN0Um93cyhyb3dzRm9yU2VsZWN0aW9uKTtcbiAgfVxuXG4gIGRlc2VsZWN0QWxsUm93cygpIHtcbiAgICB0aGlzLmFwaS5ncmlkLmRlc2VsZWN0QWxsKCk7XG4gICAgaWYgKHRoaXMuZ3JpZFF1ZXJ5LmlzU2VydmVyU2VsZWN0QWxsUm93c0VuYWJsZWQpIHtcbiAgICAgIHRoaXMuc2V0U2VydmVyU2lkZVBhZ2luYXRpb24oeyBzZWxlY3RBbGxSb3dzRW5hYmxlZDogZmFsc2UsIGV4Y2x1ZGVkRnJvbVNlbGVjdEFsbDogW10gfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFdoZW4gcGl2b3RpbmcsXG4gICAqIHdlIGFkZCB0aGUgZmllbGQgbmFtZSB0byB0aGUgY29sdW1uIGhlYWRlciBjbGFzcyBpbiBvcmRlciB0byBhY2Nlc3MgaXQgdGhyb3VnaCB0aGUgYXV0byBnZW5lcmF0ZWQgcGl2b3QgY29sdW1uLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBpbml0UGl2b3RTZWNvbmRhcnlDb2xzUHJvY2Vzcyh7IGdyaWRPcHRpb25zIH06IE5vcm1hbGl6ZU9wdGlvbnNQYXJhbXMpIHtcbiAgICBncmlkT3B0aW9ucy5wcm9jZXNzU2Vjb25kYXJ5Q29sRGVmID0gY29sRGVmID0+IHtcbiAgICAgIGNvbnN0IGFwaSA9IGNvbERlZi5oZWFkZXJDb21wb25lbnRQYXJhbXMuZ3JpZFF1ZXJ5LmFwaTtcblxuICAgICAgaWYgKGFwaSkge1xuICAgICAgICBjb25zdCB2YWx1ZUNvbHVtbnMgPSBjb2xEZWYuaGVhZGVyQ29tcG9uZW50UGFyYW1zLmdyaWRRdWVyeS5hcGkuY29sdW1ucy5nZXRWYWx1ZUNvbHVtbnMoKTtcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxDb2xEZWYgPSB2YWx1ZUNvbHVtbnNcbiAgICAgICAgICAubWFwKCh7IHVzZXJQcm92aWRlZENvbERlZiB9KSA9PiB1c2VyUHJvdmlkZWRDb2xEZWYpXG4gICAgICAgICAgLmZpbmQoKHsgY29sSWQgfSkgPT4gY29sSWQgPT09IGNvbERlZi5waXZvdFZhbHVlQ29sdW1uLmdldENvbElkKCkpO1xuXG4gICAgICAgIGlmIChvcmlnaW5hbENvbERlZikge1xuICAgICAgICAgIGNvbERlZi5maWx0ZXIgPSBvcmlnaW5hbENvbERlZi5maWx0ZXI7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGNvbERlZi5waXZvdEtleXMpIHtcbiAgICAgICAgY29sRGVmLnBpdm90S2V5cyA9IGNvbERlZi5waXZvdEtleXMubWFwKGtleSA9PiBKU09OLnBhcnNlKGtleSkudmFsdWUpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBncmlkT3B0aW9ucy5wcm9jZXNzU2Vjb25kYXJ5Q29sR3JvdXBEZWYgPSAoY29sR3JvdXBEZWY6IENvbEdyb3VwRGVmKSA9PiB7XG4gICAgICBpZiAoY29sR3JvdXBEZWYuaGVhZGVyTmFtZSkge1xuICAgICAgICBjb25zdCB7IGZpZWxkLCB2YWx1ZSB9ID0gSlNPTi5wYXJzZShjb2xHcm91cERlZi5oZWFkZXJOYW1lKTtcblxuICAgICAgICBjb2xHcm91cERlZi5oZWFkZXJDbGFzcyA9IGZpZWxkO1xuICAgICAgICBjb2xHcm91cERlZi5oZWFkZXJOYW1lID0gdmFsdWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb2xHcm91cERlZi5waXZvdEtleXMpIHtcbiAgICAgICAgY29sR3JvdXBEZWYucGl2b3RLZXlzID0gY29sR3JvdXBEZWYucGl2b3RLZXlzLm1hcChrZXkgPT4gSlNPTi5wYXJzZShrZXkpLnZhbHVlKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRQaXZvdE1vZGVSb3dzPFQ+KGRhdGE6IFRbXSkge1xuICAgIGNvbnN0IHBpdm90Q29sdW1ucyA9IHRoaXMuZ3JpZFF1ZXJ5LmdldEFsbFBpdm90Q29sdW1ucygpO1xuICAgIGNvbnN0IGNvbnZlcnRlZERhdGEgPSBkYXRhLm1hcCgoY3VycmVudFZhbHVlLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgbWFwcGVkVmFsdWVzID0geyAuLi5jdXJyZW50VmFsdWUgfTtcblxuICAgICAgZm9yIChjb25zdCBjb2wgb2YgcGl2b3RDb2x1bW5zKSB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gY29sLmdldENvbERlZigpLmZpZWxkO1xuXG4gICAgICAgIG1hcHBlZFZhbHVlc1tmaWVsZF0gPSBKU09OLnN0cmluZ2lmeSh7IGZpZWxkLCB2YWx1ZTogY3VycmVudFZhbHVlW2ZpZWxkXSB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG1hcHBlZFZhbHVlcztcbiAgICB9KTtcblxuICAgIHRoaXMuYXBpLmdyaWQuc2V0Um93RGF0YShjb252ZXJ0ZWREYXRhKTtcbiAgfVxufVxuIl19
|
|
905
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGRhdG9yYW1hL2NvcmUvIiwic291cmNlcyI6WyJsaWIvZ3JpZC12Mi9ncmlkLXN0b3JlL2dyaWQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQXdCLE1BQU0sZUFBZSxDQUFDO0FBZXpFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM3QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUV4RSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEMsT0FBTyxFQUNMLG9CQUFvQixFQUlwQixzQkFBc0IsRUFRdkIsTUFBTSxrQ0FBa0MsQ0FBQztBQUMxQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzlFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUVqRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSw0QkFBNEIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBUWxGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxxQkFBcUIsRUFBa0IsTUFBTSxrQkFBa0IsQ0FBQztBQUN6RSxPQUFPLEVBSUwsbUJBQW1CLEVBT25CLHVDQUF1QyxFQUN2QyxhQUFhLEVBQ2Isb0JBQW9CLEVBQ3BCLDJCQUEy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QUFFO2dCQUM5QixNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsU0FBUyxFQUFFLENBQUMsS0FBSyxDQUFDO2dCQUVwQyxZQUFZLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsWUFBWSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQzthQUM3RTtZQUVELE9BQU8sWUFBWSxDQUFDO1FBQ3RCLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzFDLENBQUM7Q0FDRixDQUFBOztZQWovQmtCLFNBQVM7WUFDTCxTQUFTO1lBQ1Qsb0JBQW9CO1lBQ2pCLFlBQVk7WUFDYixXQUFXOzRDQUMvQixNQUFNLFNBQUMscUJBQXFCOzRDQUM1QixNQUFNLFNBQUMsZ0JBQWdCOztBQWhDZixXQUFXO0lBRHZCLFVBQVUsRUFBRTtJQWdDUixXQUFBLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFBO0lBQzdCLFdBQUEsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUE7cUNBTlYsU0FBUztRQUNMLFNBQVM7UUFDVCxvQkFBb0I7UUFDakIsWUFBWTtRQUNiLFdBQVc7R0E5QnZCLFdBQVcsQ0EyZ0N2QjtTQTNnQ1ksV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgT25EZXN0cm95LCBRdWVyeUxpc3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERhdG9HcmlkQXBpIH0gZnJvbSAnLi4vZ3JpZC1jb250cm9sbGVyL2dyaWQtY29udHJvbGxlci50eXBlcyc7XG5pbXBvcnQge1xuICBDZWxsQ2xhc3NQYXJhbXMsXG4gIENvbEdyb3VwRGVmLFxuICBDb2x1bW4sXG4gIEdldENvbnRleHRNZW51SXRlbXNQYXJhbXMsXG4gIEdyaWRPcHRpb25zLFxuICBJQ2VsbFJlbmRlcmVyUGFyYW1zLFxuICBJR2V0Um93c1BhcmFtcyxcbiAgUm93Tm9kZSxcbiAgUm93Tm9kZVRyYW5zYWN0aW9uLFxuICBSb3dTZWxlY3RlZEV2ZW50XG59IGZyb20gJ2FnLWdyaWQtY29tbXVuaXR5JztcbmltcG9ydCB7IFJvd0RhdGFUcmFuc2FjdGlvbiB9IGZyb20gJ2FnLWdyaWQtY29tbXVuaXR5L2Rpc3QvbGliL3Jvd01vZGVscy9jbGllbnRTaWRlL2NsaWVudFNpZGVSb3dNb2RlbCc7XG5pbXBvcnQgeyBHcmlkUXVlcnkgfSBmcm9tICcuL2dyaWQucXVlcnknO1xuaW1wb3J0IHsgRGF0b0NvcmVFcnJvciB9IGZyb20gJy4uLy4uL2Vycm9ycyc7XG5pbXBvcnQgeyBEYXRvVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RyYW5zbGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IERhdG9DdXN0b21IZWFkZXJUZW1wbGF0ZUNvbXBvbmVudCB9IGZyb20gJy4uL2dyaWQtY3VzdG9tLWhlYWRlci9jdXN0b20taGVhZGVyLXRlbXBsYXRlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtcbiAgRGF0b0ZpbHRlckNvbmRpdGlvbnMsXG4gIERhdG9HcmlkQ29uZGl0aW9uYWxGaWx0ZXIsXG4gIERhdG9HcmlkRmlsdGVyLFxuICBEYXRvR3JpZEZpbHRlckNvbmRpdGlvbixcbiAgRGF0b0dyaWRGaWx0ZXJTZWN0aW9ucyxcbiAgRGF0b0dyaWRGaWx0ZXJzTWFwLFxuICBEYXRvR3JpZFJhbmdlRmlsdGVyQ29uZGl0aW9uLFxuICBTZXJ2ZXJTaWRlUGFnaW5hdGlvbkNvbmRpdGlvbixcbiAgU2VydmVyU2lkZVBhZ2luYXRpb25GaWx0ZXIsXG4gIFNlcnZlclNpZGVQYWdpbmF0aW9uRmlsdGVycyxcbiAgU2VydmVyU2lkZVBhZ2luYXRpb25MaXN0Q29uZGl0aW9uLFxuICBTZXJ2ZXJTaWRlUGFnaW5hdGlvblJhbmdlQ29uZGl0aW9uXG59IGZyb20gJy4uL2dyaWQtZmlsdGVyL2dyaWQtZmlsdGVyLnR5cGVzJztcbmltcG9ydCB7IGNvZXJjZUFycmF5IH0gZnJvbSAnLi4vLi4vdXRpbHMvY29lcmNpb24nO1xuaW1wb3J0IHsgaXNFbXB0eSwgaXNGdW5jdGlvbiwgaXNOaWwsIGlzU3RyaW5nIH0gZnJvbSAnLi4vLi4vdXRpbHMvdmFsaWRhdG9ycyc7XG5pbXBvcnQgeyB2YWxpZGF0ZUZpbHRlciB9IGZyb20gJy4uL2dyaWQtZmlsdGVyL2ZpbHRlci12YWxpZGF0b3InO1xuaW1wb3J0IHsgQWdHcmlkTmcyIH0gZnJvbSAnYWctZ3JpZC1hbmd1bGFyJztcbmltcG9ydCB7IEljb25SZWdpc3RyeSwgU3ZnUmVnaXN0cnkgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9pY29uLXJlZ2lzdHJ5JztcbmltcG9ydCB7IGdldFZpc2libGVBY3Rpb25zLCB0b29sYmFyQWN0aW9uVG9Db250ZXh0QWN0aW9uIH0gZnJvbSAnLi4vZ3JpZC12Mi51dGlsJztcbmltcG9ydCB7XG4gIERhdG9HcmlkU2V0dGluZ3MsXG4gIE5vcm1hbGl6ZU9wdGlvbnNQYXJhbXMsXG4gIFNlcnZlclNpZGVQYWdpbmF0aW9uQ29uZmlnLFxuICBTdWNjZXNzV3JhcHBlclBhcmFtc1xufSBmcm9tICcuL2dyaWQuc3RvcmUudHlwZXMnO1xuaW1wb3J0IHsgUm93QWN0aW9uIH0gZnJvbSAnLi4vZ3JpZC10b29sYmFyL2dyaWQtdG9vbGJhci50eXBlcyc7XG5pbXBvcnQgeyBjb3B5VG9DbGlwYm9hcmQgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL2NsaXBib2FyZC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgR3JpZFN0b3JlIH0gZnJvbSAnLi9ncmlkLnN0b3JlJztcbmltcG9ydCB7IERBVE9fR1JJRF9TVE9SQUdFX0FQSSwgR3JpZFN0b3JhZ2VBUEkgfSBmcm9tICcuLi9ncmlkLXNldHRpbmdzJztcbmltcG9ydCB7XG4gIEFjdGlvbkNvbnZlcnRlclBhcmFtcyxcbiAgRGF0b0dyaWRBbGlnbm1lbnQsXG4gIERhdG9HcmlkQ29sdW1uRGVmLFxuICBEYXRvR3JpZENvbHVtblR5cGVzLFxuICBEYXRvR3JpZEdldFJvd3NQYXJhbXMsXG4gIERhdG9HcmlkT3B0aW9ucyxcbiAgRGF0b0dyaWRTZXJ2ZXJTb3J0LFxuICBEYXRvR3JpZFNlcnZlclNvcnREaXJlY3Rpb24sXG4gIERhdG9HcmlkU29ydCxcbiAgRGF0b0dyaWRUcmVlQ29uZmlnLFxuICBlZGl0YWJsZUNlbGxSZW5kZXJlcldpdGhTZWFyY2hIaWdobGlnaHQsXG4gIEdyaWRNaW5XaWR0aHMsXG4gIEdyaWRSb3dTZWxlY3Rpb25UeXBlLFxuICBzZWFyY2hIaWdobGlnaHRDZWxsUmVuZGVyZXJcbn0gZnJvbSAnLi4vZ3JpZC9ncmlkLXYyLnR5cGVzJztcblxuaW1wb3J0IHsgY29udmVydFRvVHJlZURhdGEsIGRlZmF1bHRHcmlkT3B0aW9ucywgZGVmYXVsdEdyaWRUcmVlTGFiZWwgfSBmcm9tICcuLi9ncmlkL2dyaWQtdjIuY29uZmlnJztcbmltcG9ydCB7IGRpZmYgfSBmcm9tICcuLi8uLi91dGlscy9vYmplY3QnO1xuaW1wb3J0IHsgdW50aWxEZXN0cm95ZWQgfSBmcm9tICduZ3gtdGFrZS11bnRpbC1kZXN0cm95JztcbmltcG9ydCB7IENvcmVFdmVudExvZ2dlciwgQ29yZUV2ZW50VHlwZXMsIERBVE9fQ09SRV9MT0dHRVIgfSBmcm9tICcuLi8uLi9ldmVudC1sb2dnZXInO1xuaW1wb3J0IHsgSGFzaE1hcCB9IGZyb20gJy4uLy4uL3V0aWxzL3R5cGVzJztcbmltcG9ydCB7IHNpemUgfSBmcm9tICcuLi8uLi91dGlscy9jb2xsZWN0aW9uJztcbmltcG9ydCB7IE9wZXJhdG9yVHlwZXMgfSBmcm9tICcuLi8uLi9vcGVyYXRvci10b2dnbGVyL29wZXJhdG9yLXRvZ2dsZXIudHlwZXMnO1xuaW1wb3J0IHsgZGVlcG1lcmdlIH0gZnJvbSAnLi4vLi4vaW50ZXJuYWwvZGVlcC1tZXJnZSc7XG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0cmlnZ2VyV2luZG93UmVzaXplIH0gZnJvbSAnLi4vLi4vdXRpbHMvdXNlci1hZ2VudCc7XG5pbXBvcnQgeyBnZXRDb2xGaWVsZCwgZ2V0Q29sdW1uc1NpemVzIH0gZnJvbSAnLi91dGlsJztcbmltcG9ydCB7IERhdG9HcmlkTXVsdGlTZWxlY3RDb2x1bW5IZWFkZXJDb21wb25lbnQgfSBmcm9tICcuLi9ncmlkLWNvbHVtbi1oZWFkZXIvZ3JpZC1tdWx0aS1zZWxlY3QtaGVhZGVyL2dyaWQtbXVsdGktc2VsZWN0LWhlYWRlci5jb21wb25lbnQnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgR3JpZFNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBhcGk6IERhdG9HcmlkQXBpO1xuICB0cmVlQ29uZmlnOiBEYXRvR3JpZFRyZWVDb25maWcgPSBkZWZhdWx0R3JpZFRyZWVMYWJlbDtcbiAgaXNQaXZvdE1vZGU6IGJvb2xlYW47XG5cbiAgLyoqIEBpbnRlcm5hbCAtIHVzZWQgZm9yIHNlcnZlciBzaWRlIGJ5IHZhbHVlIGZpbHRlciAqL1xuICBfb3JpZ2luYWxHZXRSb3dzOiAocGFyYW1zOiBEYXRvR3JpZEdldFJvd3NQYXJhbXMpID0+IHZvaWQ7XG4gIHByaXZhdGUgaW5pdGlhbFNldHRpbmdzOiBEYXRvR3JpZFNldHRpbmdzO1xuICBwcml2YXRlIGdyaWROYW1lOiBzdHJpbmc7XG4gIHByaXZhdGUgZ3JpZFJlZjogQWdHcmlkTmcyO1xuICBwcml2YXRlIGN1c3RvbUhlYWRlcnNUZW1wbGF0ZXM6IFF1ZXJ5TGlzdDxEYXRvQ3VzdG9tSGVhZGVyVGVtcGxhdGVDb21wb25lbnQ+O1xuICBwcml2YXRlIGlzVHJlZURhdGE6IGJvb2xlYW47XG4gIHByaXZhdGUgcGFnZU51bWJlclRvUmV0dXJuQWZ0ZXJSZWZyZXNoID0gLTE7XG4gIHByaXZhdGUgbGFzdFRvdGFsUm93czogbnVtYmVyO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgQ0hFQ0tCT1hfU0VMRUNUSU9OX0NPTF9JRCA9ICdncmlkLWNoZWNrYm94LXNlbGVjdGlvbic7XG5cbiAgc2V0IHRyZWVEYXRhKGlzVHJlZURhdGE6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmlzVHJlZURhdGEgPSBpc1RyZWVEYXRhO1xuICB9XG5cbiAgZ2V0IHRyZWVEYXRhKCkge1xuICAgIHJldHVybiB0aGlzLmlzVHJlZURhdGE7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHN0b3JlOiBHcmlkU3RvcmUsXG4gICAgcHJpdmF0ZSBncmlkUXVlcnk6IEdyaWRRdWVyeSxcbiAgICBwcml2YXRlIHRyYW5zbGF0ZTogRGF0b1RyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBpY29uUmVnaXN0cnk6IEljb25SZWdpc3RyeSxcbiAgICBwcml2YXRlIHN2Z1JlZ2lzdHJ5OiBTdmdSZWdpc3RyeSxcbiAgICBASW5qZWN0KERBVE9fR1JJRF9TVE9SQUdFX0FQSSkgcHJpdmF0ZSBzdG9yYWdlQVBJOiBHcmlkU3RvcmFnZUFQSSxcbiAgICBASW5qZWN0KERBVE9fQ09SRV9MT0dHRVIpIHByaXZhdGUgbG9nZ2VyOiBDb3JlRXZlbnRMb2dnZXJcbiAgKSB7fVxuXG4gIG5nT25EZXN0cm95KCkge31cblxuICAvKiogQGludGVybmFsIC0gdXNlZCB0byBpbml0IHRoZSBzZXJ2aWNlICovXG4gIF9zZXRBcGkoYXBpOiBEYXRvR3JpZEFwaSwgZ3JpZFJlZjogQWdHcmlkTmcyKSB7XG4gICAgdGhpcy5hcGkgPSBhcGk7XG4gICAgdGhpcy5ncmlkUmVmID0gZ3JpZFJlZjtcbiAgICB0aGlzLmdyaWROYW1lID0gKGdyaWRSZWYuZ3JpZE9wdGlvbnMgYXMgRGF0b0dyaWRPcHRpb25zKS5ncmlkTmFtZTtcbiAgICB0aGlzLnNldFNlcnZlclNpZGVQYWdpbmF0aW9uKHtcbiAgICAgIGVuYWJsZWQ6IHRoaXMuaXNTZXJ2ZXJTaWRlUGFnaW5hdGlvbihncmlkUmVmLmdyaWRPcHRpb25zKVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1NlcnZlclNpZGVQYWdpbmF0aW9uKGdyaWRPcHRpb25zOiBHcmlkT3B0aW9ucyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBncmlkT3B0aW9ucy5yb3dNb2RlbFR5cGUgPT09ICdpbmZpbml0ZSc7XG4gIH1cblxuICB1cGRhdGVHcmlkQ29udGV4dChjb250ZXh0ID0ge30sIHJlcGxhY2UgPSBmYWxzZSkge1xuICAgIHRoaXMuZ3JpZFF1ZXJ5LmdldEdyaWRPcHRpb25zKCkuY29udGV4dCA9IHJlcGxhY2VcbiAgICAgID8gY29udGV4dFxuICAgICAgOiBkZWVwbWVyZ2UodGhpcy5ncmlkUmVmLmdyaWRPcHRpb25zLmNvbnRleHQgfHwge30sIGNvbnRleHQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIHVzZSBzZWxlY3RSb3dzIGluc3RlYWRcbiAgICogQHBhcmFtIHJvd1xuICAgKi9cbiAgc2V0U2VsZWN0ZWRSb3dzPFQ+KHJvdzogKFQgJiBSb3dOb2RlKSB8IChUW10gJiBSb3dOb2RlW10pKSB7XG4gICAgdGhpcy5zZWxlY3RSb3dzKHJvdyk7XG4gIH1cblxuICBzZWxlY3RSb3dzPFQ+KHJvdzogKFQgJiBSb3dOb2RlKSB8IChUW10gJiBSb3dOb2RlW10pKSB7XG4gICAgY29uc3Qgcm93Tm9kZXMgPSBjb2VyY2VBcnJheShyb3cpLmZpbHRlcihyb3dOb2RlID0+ICFyb3dOb2RlLmlzU2VsZWN0ZWQoKSk7XG4gICAgY29uc3QgbGFzdE5vZGUgPSByb3dOb2Rlcy5wb3AoKTtcbiAgICByb3dOb2Rlcy5mb3JFYWNoKHJvd05vZGUgPT4gcm93Tm9kZS5zZXRTZWxlY3RlZCh0cnVlLCBmYWxzZSwgdHJ1ZSkpO1xuICAgIGlmIChsYXN0Tm9kZSkge1xuICAgICAgbGFzdE5vZGUuc2V0U2VsZWN0ZWQodHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgZGVzZWxlY3RSb3dzPFQ+KHJvdzogKFQgJiBSb3dOb2RlKSB8IChUW10gJiBSb3dOb2RlW10pKSB7XG4gICAgY29uc3Qgcm93Tm9kZXMgPSBjb2VyY2VBcnJheShyb3cpLmZpbHRlcihyb3dOb2RlID0+IHJvd05vZGUuaXNTZWxlY3RlZCgpKTtcbiAgICBjb25zdCBsYXN0Tm9kZSA9IHJvd05vZGVzLnBvcCgpO1xuICAgIHJvd05vZGVzLmZvckVhY2gocm93Tm9kZSA9PiByb3dOb2RlLnNldFNlbGVjdGVkKGZhbHNlLCBmYWxzZSwgdHJ1ZSkpO1xuICAgIGlmIChsYXN0Tm9kZSkge1xuICAgICAgbGFzdE5vZGUuc2V0U2VsZWN0ZWQoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIHNldFJvd3M8VD4oZGF0YTogVFtdLCBmaXRDb250YWluZXIgPSBmYWxzZSwgdHJlZUNvbmZpZzogUGFydGlhbDxEYXRvR3JpZFRyZWVDb25maWc+ID0ge30pIHtcbiAgICB0aGlzLmdyaWRRdWVyeS5ncmlkUmVhZHkkLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIGlmICh0aGlzLmlzVHJlZURhdGEpIHtcbiAgICAgICAgdGhpcy50cmVlQ29uZmlnID0ge1xuICAgICAgICAgIC4uLmRlZmF1bHRHcmlkVHJlZUxhYmVsLFxuICAgICAgICAgIC4uLnRyZWVDb25maWdcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgdHJlZURhdGUgPSBjb252ZXJ0VG9UcmVlRGF0YShkYXRhLCB0aGlzLnRyZWVDb25maWcpO1xuICAgICAgICB0aGlzLmFwaS5ncmlkLnNldFJvd0RhdGEodHJlZURhdGUpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLmlzUGl2b3RNb2RlKSB7XG4gICAgICAgIHRoaXMuc2V0UGl2b3RNb2RlUm93czxUPihkYXRhKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuYXBpLmdyaWQuc2V0Um93RGF0YShkYXRhKTtcbiAgICAgIH1cbiAgICAgIGlmIChmaXRDb250YWluZXIpIHtcbiAgICAgICAgdGhpcy5maXRHcmlkKCdjb250YWluZXInKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRyaWdnZXJXaW5kb3dSZXNpemUoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHNldERhdGFzb3VyY2UoZ2V0Um93czogKHBhcmFtczogRGF0b0dyaWRHZXRSb3dzUGFyYW1zKSA9PiB2b2lkLCByZXR1cm5Ub0N1cnJlbnRQYWdlID0gZmFsc2UsIHNob3dMb2FkaW5nID0gZmFsc2UpIHtcbiAgICByZXR1cm5Ub0N1cnJlbnRQYWdlICYmIHRoaXMudXBkYXRlUGFnZVRvS2VlcE9uUmVmcmVzaFNlcnZlckRhdGEoKTtcbiAgICBzaG93TG9hZGluZyAmJiB0aGlzLnNldExvYWRpbmcodHJ1ZSk7XG4gICAgdGhpcy5fb3JpZ2luYWxHZXRSb3dzID0gZ2V0Um93cztcbiAgICB0aGlzLmFwaS5ncmlkLnNldERhdGFzb3VyY2UoeyBnZXRSb3dzOiB0aGlzLndyYXBHZXRSb3dzKHRoaXMuZ3JpZFF1ZXJ5LmdldEdyaWRPcHRpb25zKCksIGdldFJvd3MpIH0pO1xuICB9XG5cbiAgcmVmcmVzaFNlcnZlckRhdGEoa2VlcEN1cnJlbnRQYWdlID0gZmFsc2UsIHNob3dMb2FkaW5nID0gZmFsc2UpIHtcbiAgICBrZWVwQ3VycmVudFBhZ2UgJiYgdGhpcy51cGRhdGVQYWdlVG9LZWVwT25SZWZyZXNoU2VydmVyRGF0YSgpO1xuICAgIHNob3dMb2FkaW5nICYmIHRoaXMuc2V0TG9hZGluZyh0cnVlKTtcbiAgICB0aGlzLmFwaS5ncmlkLnNldERhdGFzb3VyY2UoeyBnZXRSb3dzOiB0aGlzLmdyaWRRdWVyeS5nZXRHcmlkT3B0aW9ucygpLmRhdGFzb3VyY2UuZ2V0Um93cyB9KTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlUGFnZVRvS2VlcE9uUmVmcmVzaFNlcnZlckRhdGEoKSB7XG4gICAgLy8gS2VlcGluZyB0aGUgY3VycmVudCBwYWdlIG9uIHNlcnZlciByZWZyZXNoIGlzIGN1cnJlbnRseSBhdmFpbGFibGUgb25seSB3aGVuIG5vIHBhZ2UgY2xpZW50IGNhY2hpbmcgaXMgZW5hYmxlZFxuICAgIGlmICh0aGlzLmdyaWRRdWVyeS5nZXRHcmlkT3B0aW9ucygpLm1heEJsb2Nrc0luQ2FjaGUgPT09IDEpIHtcbiAgICAgIHRoaXMucGFnZU51bWJlclRvUmV0dXJuQWZ0ZXJSZWZyZXNoID0gdGhpcy5hcGkuZ3JpZC5wYWdpbmF0aW9uR2V0Q3VycmVudFBhZ2UoKTtcbiAgICB9XG4gIH1cblxuICBhZGRSb3dzPFQ+KHJvdzogVCwgaW5kZXg/OiBudW1iZXIpOiBSb3dOb2RlVHJhbnNhY3Rpb24ge1xuICAgIGNvbnN0IHJvd3MgPSBjb2VyY2VBcnJheShyb3cpO1xuICAgIGNvbnN0IGRhdGE6IFJvd0RhdGFUcmFuc2FjdGlvbiA9IHsgYWRkOiByb3dzIH07XG4gICAgaWYgKCFpc05pbChpbmRleCkpIHtcbiAgICAgIGRhdGEuYWRkSW5kZXggPSBpbmRleDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuYXBpLmdyaWQudXBkYXRlUm93RGF0YShkYXRhKTtcbiAgfVxuXG4gIHVwZGF0ZVJvd3M8VD4ocm93OiBUW10pOiBhbnkge1xuICAgIGNvbnN0IHJvd3MgPSBjb2VyY2VBcnJheShyb3cpO1xuICAgIHJldHVybiB0aGlzLmFwaS5ncmlkLnVwZGF0ZVJvd0RhdGEoeyB1cGRhdGU6IHJvd3MgfSk7XG4gIH1cblxuICB1cGRhdGVSb3dWYWx1ZTxUPihyb3c6IFJvd05vZGUsIGtleTogc3RyaW5nLCBuZXdWYWx1ZTogVCk7XG4gIHVwZGF0ZVJvd1ZhbHVlPFQ+KGlkOiBzdHJpbmcsIGtleTogc3RyaW5nLCBuZXdWYWx1ZTogVCk7XG4gIHVwZGF0ZVJvd1ZhbHVlPFQ+KHJvdzogc3RyaW5nIHwgUm93Tm9kZSwga2V5OiBzdHJpbmcsIG5ld1ZhbHVlOiBUKSB7XG4gICAgY29uc3Qgcm93Tm9kZSA9IGlzU3RyaW5nKHJvdykgPyB0aGlzLmFwaS5ncmlkLmdldFJvd05vZGUocm93KSA6IHJvdztcbiAgICByb3dOb2RlLnNldERhdGFWYWx1ZShrZXksIG5ld1ZhbHVlKTtcbiAgfVxuXG4gIHJlbW92ZVJvd3Mocm93OiBSb3dOb2RlIHwgUm93Tm9kZVtdKTogUm93Tm9kZVRyYW5zYWN0aW9uIHtcbiAgICBjb25zdCByb3dzID0gY29lcmNlQXJyYXkocm93KS5tYXAoKHsgZGF0YSB9KSA9PiBkYXRhKTtcbiAgICByZXR1cm4gdGhpcy5hcGkuZ3JpZC51cGRhdGVSb3dEYXRhKHsgcmVtb3ZlOiByb3dzIH0pO1xuICB9XG5cbiAgcmVtb3ZlU2VsZWN0ZWRSb3dzKCkge1xuICAgIGNvbnN0IHNlbGVjdGVkUm93cyA9IHRoaXMuZ3JpZFF1ZXJ5LmdldFNlbGVjdGVkUm93Tm9kZXMoKTtcbiAgICByZXR1cm4gdGhpcy5yZW1vdmVSb3dzKHNlbGVjdGVkUm93cyk7XG4gIH1cblxuICBjbGVhclRhYmxlKCkge1xuICAgIHRoaXMuc2V0Um93cyhbXSk7XG4gIH1cblxuICB1cGRhdGVDb2x1bW5zKGNvbERlZnM6IERhdG9HcmlkQ29sdW1uRGVmIHwgRGF0b0dyaWRDb2x1bW5EZWZbXSwgcmVsb2FkU2V0dGluZ3MgPSBmYWxzZSkge1xuICAgIGlmICghY29sRGVmcykge1xuICAgICAgdGhyb3cgbmV3IERhdG9Db3JlRXJyb3IoJ05vIGNvbHVtbkRlZnMgd2VyZSBwcm92aWRlZC4g8J+VtfCfj7vigI3imYDvuI8nKTtcbiAgICB9XG4gICAgY29uc3Qgbm9ybWFsaXplZCA9IHRoaXMubm9ybWFsaXplQ29sdW1ucyhjb2VyY2VBcnJheShjb2xEZWZzKSk7XG4gICAgY29uc3Qgc2F2ZWRTZXR0aW5ncyA9IHJlbG9hZFNldHRpbmdzICYmIHRoaXMuZ3JpZFF1ZXJ5LmdldEN1cnJlbnRHcmlkU2V0dGluZ3MoKTtcbiAgICB0aGlzLmFwaS5ncmlkLnNldENvbHVtbkRlZnMobm9ybWFsaXplZCk7XG4gICAgaWYgKHNhdmVkU2V0dGluZ3MpIHtcbiAgICAgIHRoaXMubG9hZFNhdmVkU2V0dGluZ3Moc2F2ZWRTZXR0aW5ncyk7XG4gICAgfVxuICB9XG5cbiAgbm9ybWFsaXplT3B0aW9ucyhwYXJhbXM6IE5vcm1hbGl6ZU9wdGlvbnNQYXJhbXMpIHtcbiAgICB0aGlzLmN1c3RvbUhlYWRlcnNUZW1wbGF0ZXMgPSBwYXJhbXMuY3VzdG9tSGVhZGVyc1RlbXBsYXRlcztcbiAgICBjb25zdCBoZWFkZXJDb21wb25lbnRQYXJhbXMgPSB7IGdyaWRTZXJ2aWNlOiB0aGlzLCBncmlkUXVlcnk6IHRoaXMuZ3JpZFF1ZXJ5IH07XG4gICAgcGFyYW1zLmdyaWRPcHRpb25zLmF1dG9Hcm91cENvbHVtbkRlZiA9IHtcbiAgICAgIC4uLmhlYWRlckNvbXBvbmVudFBhcmFtcyxcbiAgICAgIC4uLnBhcmFtcy5ncmlkT3B0aW9ucy5hdXRvR3JvdXBDb2x1bW5EZWZcbiAgICB9O1xuXG4gICAgcGFyYW1zLmdyaWRPcHRpb25zLmRlZmF1bHRDb2xEZWYgPSB7XG4gICAgICAuLi5wYXJhbXMuZ3JpZE9wdGlvbnMuZGVmYXVsdENvbERlZixcbiAgICAgIGhlYWRlckNvbXBvbmVudFBhcmFtc1xuICAgIH07XG4gICAgaWYgKHR5cGVvZiBwYXJhbXMuZ3JpZE9wdGlvbnMuZW5hYmxlU2VhcmNoID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcGFyYW1zLmdyaWRPcHRpb25zLmVuYWJsZVNlYXJjaCA9IHBhcmFtcy5ncmlkT3B0aW9ucy5lbmFibGVWMl8xO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHBhcmFtcy5ncmlkT3B0aW9ucy5lbmFibGVCYWNrZ3JvdW5kID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcGFyYW1zLmdyaWRPcHRpb25zLmVuYWJsZUJhY2tncm91bmQgPSBwYXJhbXMuZ3JpZE9wdGlvbnMuZW5hYmxlVjJfMTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBwYXJhbXMuZ3JpZE9wdGlvbnMuc2hvd011bHRpU2VsZWN0aW9uQ2hlY2tib3hlcyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHBhcmFtcy5ncmlkT3B0aW9ucy5zaG93TXVsdGlTZWxlY3Rpb25DaGVja2JveGVzID1cbiAgICAgICAgcGFyYW1zLmdyaWRPcHRpb25zLmVuYWJsZVYyXzEgJiYgcGFyYW1zLmdyaWRPcHRpb25zLnJvd1NlbGVjdGlvbiAhPT0gR3JpZFJvd1NlbGVjdGlvblR5cGUuU0lOR0xFO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHBhcmFtcy5ncmlkT3B0aW9ucy5lbmFibGVTZWFyY2hIaWdobGlnaHQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBwYXJhbXMuZ3JpZE9wdGlvbnMuZW5hYmxlU2VhcmNoSGlnaGxpZ2h0ID1cbiAgICAgICAgcGFyYW1zLmdyaWRPcHRpb25zLmVuYWJsZVNlYXJjaCAmJiBkZWZhdWx0R3JpZE9wdGlvbnMuZW5hYmxlU2VhcmNoSGlnaGxpZ2h0O1xuICAgIH1cbiAgICBwYXJhbXMuZ3JpZE9wdGlvbnMuY29sdW1uRGVmcyA9IHRoaXMubm9ybWFsaXplQ29sdW1ucyhwYXJhbXMuZ3JpZE9wdGlvbnMuY29sdW1uRGVmcywgcGFyYW1zLmdyaWRPcHRpb25zKTtcblxuICAgIC8qKiBBZGQgY29yZSBmaWx0ZXJzICovXG4gICAgcGFyYW1zLmdyaWRPcHRpb25zLmlzRXh0ZXJuYWxGaWx0ZXJQcmVzZW50ID0gKCkgPT4gdHJ1ZTtcbiAgICBwYXJhbXMuZ3JpZE9wdGlvbnMuZG9lc0V4dGVybmFsRmlsdGVyUGFzcyA9IChyb3c6IFJvd05vZGUpID0+IHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHZhbGlkYXRlRmlsdGVyKHsgcm93LCBhcGk6IHRoaXMuZ3JpZFF1ZXJ5LmFwaS5ncmlkIH0sIHRoaXMuZ3JpZFF1ZXJ5LmdldEZpbHRlcigpKSAmJiB0aGlzLnJvd01hdGNoZXNTZWFyY2gocm93KVxuICAgICAgKTtcbiAgICB9O1xuXG4gICAgLyoqIFdyYXAgdGhlIHNlcnZlciBzaWRlIHBhZ2luYXRpb24gZ2V0IHJvd3MgZnVuY3Rpb24gKi9cbiAgICBpZiAodGhpcy5pc1NlcnZlclNpZGVQYWdpbmF0aW9uKHBhcmFtcy5ncmlkT3B0aW9ucykpIHtcbiAgICAgIHBhcmFtcy5ncmlkT3B0aW9ucy5ibG9ja0xvYWREZWJvdW5jZU1pbGxpcyA9IDMwMDtcbiAgICAgIHRoaXMuX29yaWdpbmFsR2V0Um93cyA9IHBhcmFtcy5ncmlkT3B0aW9ucy5kYXRhc291cmNlLmdldFJvd3M7XG4gICAgICBwYXJhbXMuZ3JpZE9wdGlvbnMuZGF0YXNvdXJjZS5nZXRSb3dzID0gdGhpcy53cmFwR2V0Um93cyhwYXJhbXMuZ3JpZE9wdGlvbnMpO1xuICAgICAgLyogVGhlIGNhY2hlIHNpemUgaXMgc3luY2VkIHdpdGggdGhlIHBhZ2luYXRpb24gcGFnZSBzaXplICovXG4gICAgICBjb25zdCBjYWNoZVNpemUgPSBwYXJhbXMuZ3JpZE9wdGlvbnMucGFnaW5hdGlvblBhZ2VTaXplO1xuICAgICAgaWYgKGNhY2hlU2l6ZSkge1xuICAgICAgICBwYXJhbXMuZ3JpZE9wdGlvbnMuY2FjaGVCbG9ja1NpemUgPSBjYWNoZVNpemU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEVkaXRhYmxlIGNlbGwgKi9cbiAgICB0aGlzLmluaXRFZGl0YWJsZUNvbHVtbnNDZWxsQ2xhc3MocGFyYW1zKTtcblxuICAgIC8qKiBXcmFwIGNvbnRleHQgbWVudSAqL1xuICAgIHBhcmFtcy5ncmlkT3B0aW9ucy5nZXRDb250ZXh0TWVudUl0ZW1zID0gdGhpcy53cmFwQ29udGV4dE1lbnVCdWlsZGVyKHBhcmFtcyk7XG5cbiAgICAvKiogU2F2ZSBncmlkIHNldHRpbmdzICovXG4gICAgY29uc3QgeyBzYXZlU2V0dGluZ3MsIGdyaWROYW1lIH0gPSBwYXJhbXMuZ3JpZE9wdGlvbnM7XG4gICAgcGFyYW1zLmdyaWRPcHRpb25zLnNhdmVTZXR0aW5ncyA9IHNhdmVTZXR0aW5ncyAhPT0gZmFsc2UgJiYgIWlzTmlsKGdyaWROYW1lKTtcblxuICAgIC8qKiBTZXJ2ZXIgU2lkZSBQYWdpbmF0aW9uIGZvciBzZWxlY3QgYWxsIG9wdGlvbiAqL1xuICAgIHRoaXMuaW5pdE9uUm93U2VsZWN0ZWRGb3JTZXJ2ZXJTaWRlUGFnaW5hdGlvbihwYXJhbXMpO1xuXG4gICAgLyoqIEFkZCBwaXZvdCBzcGVjaWZpYyByZXF1aXJlZCBzZXR0aW5ncyAqL1xuICAgIGlmIChwYXJhbXMuZ3JpZE9wdGlvbnMucGl2b3RNb2RlKSB7XG4gICAgICB0aGlzLmluaXRQaXZvdFNlY29uZGFyeUNvbHNQcm9jZXNzKHBhcmFtcyk7XG4gICAgICBwYXJhbXMuZ3JpZE9wdGlvbnMuZW5hYmxlVjJfMSA9IHRydWU7XG4gICAgICBwYXJhbXMuZ3JpZE9wdGlvbnMuc2F2ZVNldHRpbmdzID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcmFtcy5ncmlkT3B0aW9ucztcbiAgfVxuXG4gIHByaXZhdGUgbm9ybWFsaXplQ29sdW1ucyhjb2xEZWZzOiBEYXRvR3JpZENvbHVtbkRlZltdLCBncmlkT3B0aW9uczogRGF0b0dyaWRPcHRpb25zID0gbnVsbCk6IERhdG9HcmlkQ29sdW1uRGVmW10ge1xuICAgIGlmICghZ3JpZE9wdGlvbnMpIHtcbiAgICAgIGdyaWRPcHRpb25zID0gdGhpcy5ncmlkUXVlcnkuZ2V0R3JpZE9wdGlvbnMoKTtcbiAgICB9XG4gICAgY29uc3QgdXBkYXRlZENvbERlZnMgPSBjb2xEZWZzLm1hcCgoY29sOiBEYXRvR3JpZENvbHVtbkRlZikgPT4ge1xuICAgICAgY29uc3Qgbm9ybWFsaXplZCA9IHtcbiAgICAgICAgLi4uY29sLFxuICAgICAgICBoZWFkZXJOYW1lOiB0aGlzLnRyYW5zbGF0ZS50cmFuc2Zvcm0oY29sLmhlYWRlck5hbWUpXG4gICAgICB9O1xuICAgICAgLyoqIEFkanVzdCB0aGUgd2lkdGggaW4gY2FzZSB0aGUgY29sdW1uIGhhcyBpbmZvICovXG4gICAgICBpZiAoY29sLmluZm8pIHtcbiAgICAgICAgbm9ybWFsaXplZC5taW5XaWR0aCA9IGNvbC5taW5XaWR0aCB8fCBHcmlkTWluV2lkdGhzLldpdGhfSW5mbztcbiAgICAgIH1cbiAgICAgIGlmICghY29sLmNvbElkKSB7XG4gICAgICAgIG5vcm1hbGl6ZWQuY29sSWQgPSBjb2wuZmllbGQ7XG4gICAgICB9XG4gICAgICBpZiAobm9ybWFsaXplZC50eXBlID09PSBEYXRvR3JpZENvbHVtblR5cGVzLkl0ZW1zICYmICFub3JtYWxpemVkLmZpbHRlcnNDb25maWcpIHtcbiAgICAgICAgbm9ybWFsaXplZC5maWx0ZXJzQ29uZmlnID0geyBzZWN0aW9uczogRGF0b0dyaWRGaWx0ZXJTZWN0aW9ucy5Db25kaXRpb25hbCB9O1xuICAgICAgfVxuICAgICAgdGhpcy5ub3JtYWxpemVDb2x1bW5TZWFyY2hDb25maWcoZ3JpZE9wdGlvbnMsIGNvbCwgbm9ybWFsaXplZCk7XG4gICAgICByZXR1cm4gbm9ybWFsaXplZDtcbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzLmFkZE11bHRpU2VsZWN0SGVhZGVyQ29sdW1uSWZSZXF1aXJlZCh1cGRhdGVkQ29sRGVmcywgZ3JpZE9wdGlvbnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBub3JtYWxpemVDb2x1bW5TZWFyY2hDb25maWcoXG4gICAgZ3JpZE9wdGlvbnM6IERhdG9HcmlkT3B0aW9ucyxcbiAgICBjb2w6IERhdG9HcmlkQ29sdW1uRGVmLFxuICAgIG5vcm1hbGl6ZWQ6IERhdG9HcmlkQ29sdW1uRGVmXG4gICkge1xuICAgIC8qKiBDaGVjayBpZiBjb2x1bW4gc2hvdWxkIGJlIGV4Y2x1ZGVkIGZyb20gc2VhcmNoICoqL1xuICAgIGNvbnN0IGlzU2VydmVyUGFnaW5hdGlvbiA9IHRoaXMuaXNTZXJ2ZXJTaWRlUGFnaW5hdGlvbihncmlkT3B0aW9ucyk7XG4gICAgaWYgKHR5cGVvZiBjb2wuaW5jbHVkZUluU2VhcmNoID09PSAndW5kZWZpbmVkJykge1xuICAgICAgaWYgKGlzU2VydmVyUGFnaW5hdGlvbiAmJiBjb2wudHlwZSA9PT0gRGF0b0dyaWRDb2x1bW5UeXBlcy5EYXRlKSB7XG4gICAgICAgIG5vcm1hbGl6ZWQuaW5jbHVkZUluU2VhcmNoID0gZmFsc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub3JtYWxpemVkLmluY2x1ZGVJblNlYXJjaCA9XG4gICAgICAgICAgdHlwZW9mIGdyaWRPcHRpb25zLmNvbHVtbnNJbmNsdWRlZEluU2VhcmNoQnlEZWZhdWx0ICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICAgICAgPyBncmlkT3B0aW9ucy5jb2x1bW5zSW5jbHVkZWRJblNlYXJjaEJ5RGVmYXVsdFxuICAgICAgICAgICAgOiBkZWZhdWx0R3JpZE9wdGlvbnMuY29sdW1uc0luY2x1ZGVkSW5TZWFyY2hCeURlZmF1bHQ7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChcbiAgICAgIG5vcm1hbGl6ZWQuaW5jbHVkZUluU2VhcmNoICYmXG4gICAgICAhdGhpcy5oYXNDZWxsUmVuZGVyZXIobm9ybWFsaXplZCwgZ3JpZE9wdGlvbnMpICYmXG4gICAgICBncmlkT3B0aW9ucy5lbmFibGVTZWFyY2hIaWdobGlnaHRcbiAgICApIHtcbiAgICAgIG5vcm1hbGl6ZWQuY2VsbFJlbmRlcmVyID0gKHBhcmFtczogSUNlbGxSZW5kZXJlclBhcmFtcykgPT4ge1xuICAgICAgICBjb25zdCBpc0VkaXRhYmxlID1cbiAgICAgICAgICAoaXNGdW5jdGlvbihub3JtYWxpemVkLmVkaXRhYmxlKSAmJiBub3JtYWxpemVkLmVkaXRhYmxlKHBhcmFtcykpIHx8XG4gICAgICAgICAgKCFpc0Z1bmN0aW9uKG5vcm1hbGl6ZWQuZWRpdGFibGUpICYmIG5vcm1hbGl6ZWQuZWRpdGFibGUpO1xuICAgICAgICByZXR1cm4gaXNFZGl0YWJsZVxuICAgICAgICAgID8gZWRpdGFibGVDZWxsUmVuZGVyZXJXaXRoU2VhcmNoSGlnaGxpZ2h0KHBhcmFtcywgdGhpcy5ncmlkUXVlcnkuZ2V0U2VhcmNoVGVybSgpKVxuICAgICAgICAgIDogc2VhcmNoSGlnaGxpZ2h0Q2VsbFJlbmRlcmVyKHBhcmFtcywgdGhpcy5ncmlkUXVlcnkuZ2V0U2VhcmNoVGVybSgpKTtcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYXNDZWxsUmVuZGVyZXIoY29sdW1uOiBEYXRvR3JpZENvbHVtbkRlZiwgZ3JpZE9wdGlvbnM6IERhdG9HcmlkT3B0aW9ucyk6IGJvb2xlYW4ge1xuICAgIGlmIChjb2x1bW4uY2VsbFJlbmRlcmVyKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgY29uc3QgdHlwZSA9IGNvbHVtbi50eXBlIGFzIHN0cmluZztcbiAgICBjb25zdCBjb2x1bW5UeXBlSGFzQ2VsbFJlbmRlcmVyID0gKG9wdGlvbnM6IFBhcnRpYWw8RGF0b0dyaWRPcHRpb25zPik6IGJvb2xlYW4gPT5cbiAgICAgIG9wdGlvbnMuY29sdW1uVHlwZXMgJiYgISFvcHRpb25zLmNvbHVtblR5cGVzW3R5cGVdICYmICEhb3B0aW9ucy5jb2x1bW5UeXBlc1t0eXBlXS5jZWxsUmVuZGVyZXI7XG5cbiAgICByZXR1cm4gY29sdW1uVHlwZUhhc0NlbGxSZW5kZXJlcihncmlkT3B0aW9ucykgfHwgY29sdW1uVHlwZUhhc0NlbGxSZW5kZXJlcihkZWZhdWx0R3JpZE9wdGlvbnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRNdWx0aVNlbGVjdEhlYWRlckNvbHVtbklmUmVxdWlyZWQoXG4gICAgY29sdW1uRGVmczogRGF0b0dyaWRDb2x1bW5EZWZbXSxcbiAgICBncmlkT3B0aW9uczogRGF0b0dyaWRPcHRpb25zXG4gICk6IERhdG9HcmlkQ29sdW1uRGVmW10ge1xuICAgIGNvbnN0IHNob3dNdWx0aVNlbGVjdGlvbkNoZWNrYm94ZXMgPSBncmlkT3B0aW9ucyAmJiBncmlkT3B0aW9ucy5zaG93TXVsdGlTZWxlY3Rpb25DaGVja2JveGVzO1xuICAgIGNvbnN0IHJvd1NlbGVjdGlvbiA9XG4gICAgICBncmlkT3B0aW9ucyAmJiBncmlkT3B0aW9ucy5yb3dTZWxlY3Rpb24gPyBncmlkT3B0aW9ucy5yb3dTZWxlY3Rpb24gOiBkZWZhdWx0R3JpZE9wdGlvbnMucm93U2VsZWN0aW9uO1xuXG4gICAgaWYgKHNob3dNdWx0aVNlbGVjdGlvbkNoZWNrYm94ZXMgJiYgcm93U2VsZWN0aW9uID09PSBHcmlkUm93U2VsZWN0aW9uVHlwZS5NVUxUSVBMRSkge1xuICAgICAgY29uc3QgY2hlY2tib3hlc0NvbHVtbjogRGF0b0dyaWRDb2x1bW5EZWYgPSB7XG4gICAgICAgIGNvbElkOiB0aGlzLkNIRUNLQk9YX1NFTEVDVElPTl9DT0xfSUQsXG4gICAgICAgIGNoZWNrYm94U2VsZWN0aW9uOiB0cnVlLFxuICAgICAgICBoZWFkZXJDb21wb25lbnRGcmFtZXdvcms6IERhdG9HcmlkTXVsdGlTZWxlY3RDb2x1bW5IZWFkZXJDb21wb25lbnQsXG4gICAgICAgIHdpZHRoOiAzMCxcbiAgICAgICAgbWF4V2lkdGg6IDMwLFxuICAgICAgICBzdXBwcmVzc1NpemVUb0ZpdDogdHJ1ZSxcbiAgICAgICAgY2VsbENsYXNzOiAnY2hlY2tib3gtc2VsZWN0aW9uLWNlbGwnLFxuICAgICAgICBoZWFkZXJDbGFzczogJ2hlYWRlci1jaGVja2JveC1zZWxlY3Rpb24tY2VsbCcsXG4gICAgICAgIHJlc2l6YWJsZTogZmFsc2UsXG4gICAgICAgIHBpbm5lZDogJ2xlZnQnLFxuICAgICAgICBsb2NrUG9zaXRpb246IHRydWUsXG4gICAgICAgIGluY2x1ZGVJblNlYXJjaDogZmFsc2VcbiAgICAgIH07XG4gICAgICByZXR1cm4gW2NoZWNrYm94ZXNDb2x1bW4sIC4uLmNvbHVtbkRlZnNdO1xuICAgIH1cbiAgICByZXR1cm4gY29sdW1uRGVmcztcbiAgfVxuXG4gIHByaXZhdGUgaW5pdE9uUm93U2VsZWN0ZWRGb3JTZXJ2ZXJTaWRlUGFnaW5hdGlvbih7IGdyaWRPcHRpb25zIH06IE5vcm1hbGl6ZU9wdGlvbnNQYXJhbXMpIHtcbiAgICBpZiAoIXRoaXMuaXNTZXJ2ZXJTaWRlUGFnaW5hdGlvbihncmlkT3B0aW9ucykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZXh0ZXJuYWxPblJvd1NlbGVjdGVkID0gZ3JpZE9wdGlvbnMub25Sb3dTZWxlY3RlZDtcbiAgICBncmlkT3B0aW9ucy5vblJvd1NlbGVjdGVkID0gKGV2dDogUm93U2VsZWN0ZWRFdmVudCkgPT4ge1xuICAgICAgaWYgKHRoaXMuZ3JpZFF1ZXJ5LmlzU2VydmVyU2VsZWN0QWxsUm93c0VuYWJsZWQpIHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IGV2dC5ub2RlO1xuICAgICAgICBjb25zdCBpc1NlbGVjdGVkID0gbm9kZS5pc1NlbGVjdGVkKCk7XG4gICAgICAgIGNvbnN0IHsgZXhjbHVkZWRGcm9tU2VsZWN0QWxsIH0gPSB0aGlzLmdyaWRRdWVyeS5zZXJ2ZXJTaWRlQ29uZmlnO1xuICAgICAgICBjb25zdCBpc0V4Y2x1ZGVkID0gZXhjbHVkZWRGcm9tU2VsZWN0QWxsLmluY2x1ZGVzKG5vZGUuaWQpO1xuICAgICAgICBpZiAoaXNTZWxlY3RlZCAmJiBpc0V4Y2x1ZGVkKSB7XG4gICAgICAgICAgdGhpcy5zZXRTZXJ2ZXJTaWRlUGFnaW5hdGlvbih7XG4gICAgICAgICAgICBleGNsdWRlZEZyb21TZWxlY3RBbGw6IGV4Y2x1ZGVkRnJvbVNlbGVjdEFsbC5maWx0ZXIoKG5vZGVJZDogc3RyaW5nKSA9PiBub2RlSWQgIT09IG5vZGUuaWQpXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoIWlzU2VsZWN0ZWQgJiYgIWlzRXhjbHVkZWQpIHtcbiAgICAgICAgICB0aGlzLnNldFNlcnZlclNpZGVQYWdpbmF0aW9uKHsgZXhjbHVkZWRGcm9tU2VsZWN0QWxsOiBbLi4uZXhjbHVkZWRGcm9tU2VsZWN0QWxsLCBub2RlLmlkXSB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGV4dGVybmFsT25Sb3dTZWxlY3RlZCkge1xuICAgICAgICBleHRlcm5hbE9uUm93U2VsZWN0ZWQoZXZ0KTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSByb3dNYXRjaGVzU2VhcmNoKHJvdzogUm93Tm9kZSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHNlYXJjaFRlcm0gPSAodGhpcy5ncmlkUXVlcnkuZ2V0U2VhcmNoVGVybSgpIHx8ICcnKS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgICBpZiAoaXNFbXB0eShzZWFyY2hUZXJtKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNvbnN0IGNvbHVtbnMgPSB0aGlzLmdyaWRRdWVyeS5nZXRHcmlkT3B0aW9ucygpLmluY2x1ZGVIaWRkZW5Db2x1bW5zSW5TZWFyY2hcbiAgICAgID8gdGhpcy5ncmlkUXVlcnkuZ2V0QWxsQ29sdW1ucygpXG4gICAgICA6IHRoaXMuZ3JpZFF1ZXJ5LmdldEFsbERpc3BsYXllZENvbHVtbnMoKTtcbiAgICBmb3IgKGNvbnN0IGNvbCBvZiBjb2x1bW5zKSB7XG4gICAgICBjb25zdCBjb2xEZWYgPSB0aGlzLmFwaS5ncmlkLmdldENvbHVtbkRlZihjb2wuZ2V0Q29sSWQoKSkgYXMgRGF0b0dyaWRDb2x1bW5EZWY7XG4gICAgICBpZiAoIWNvbERlZi5pbmNsdWRlSW5TZWFyY2gpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCByb3dWYWx1ZSA9ICh0aGlzLmFwaS5ncmlkLmdldFZhbHVlKGNvbC5nZXRDb2xJZCgpLCByb3cpIHx8ICcnKS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCk7XG4gICAgICBpZiAocm93VmFsdWUuaW5jbHVkZXMoc2VhcmNoVGVybSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCB1c2UgZml0R3JpZCgnY29udGFpbmVyJykgaW5zdGVhZFxuICAgKi9cbiAgZml0VG9Db250YWluZXIoKSB7XG4gICAgdGhpcy5hcGkuZ3JpZC5zaXplQ29sdW1uc1RvRml0KCk7XG4gIH1cblxuICBnZXRDdXN0b21IZWFkZXIoZmllbGQ6IHN0cmluZykge1xuICAgIGlmICh0aGlzLmN1c3RvbUhlYWRlcnNUZW1wbGF0ZXMpIHtcbiAgICAgIGNvbnN0IHNwZWNpZmljID0gdGhpcy5jdXN0b21IZWFkZXJzVGVtcGxhdGVzLmZpbmQoKHsgY29sdW1uIH0pID0+IGNvbHVtbiA9PT0gZmllbGQpO1xuICAgICAgY29uc3QgY29tbW9uID0gdGhpcy5jdXN0b21IZWFkZXJzVGVtcGxhdGVzLmZpbmQoKHsgY29sdW1uIH0pID0+ICFjb2x1bW4pO1xuICAgICAgaWYgKHNwZWNpZmljIHx8IGNvbW1vbikge1xuICAgICAgICBjb25zdCB7IG1vcmVNZW51LCBjdXN0b21IZWFkZXIgfSA9IHtcbiAgICAgICAgICBtb3JlTWVudTogKHNwZWNpZmljICYmIHNwZWNpZmljLm1vcmVNZW51KSB8fCAoY29tbW9uICYmIGNvbW1vbi5tb3JlTWVudSksXG4gICAgICAgICAgY3VzdG9tSGVhZGVyOiAoc3BlY2lmaWMgJiYgc3BlY2lmaWMuY3VzdG9tSGVhZGVyKSB8fCAoY29tbW9uICYmIGNvbW1vbi5jdXN0b21IZWFkZXIpXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB7IG1vcmVNZW51OiBtb3JlTWVudSAmJiBtb3JlTWVudS50cGwsIGN1c3RvbUhlYWRlcjogY3VzdG9tSGVhZGVyICYmIGN1c3RvbUhlYWRlci50cGwgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge307XG4gIH1cblxuICBjbGVhckFsbEZpbHRlcnMoKSB7XG4gICAgdGhpcy5zdG9yZS51cGRhdGUoc3RhdGUgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc2V0dGluZ3M6IHtcbiAgICAgICAgICAuLi5zdGF0ZS5zZXR0aW5ncyxcbiAgICAgICAgICBmaWx0ZXI6IHt9LFxuICAgICAgICAgIHNlYXJjaFRlcm06IG51bGxcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9KTtcbiAgICB0aGlzLm5vdGlmeUZpbHRlclVwZGF0ZSgpO1xuICB9XG5cbiAgY2xlYXJDb2x1bW5GaWx0ZXIoY29sdW1uRmllbGQ6IHN0cmluZykge1xuICAgIGNvbnN0IHsgW2NvbHVtbkZpZWxkXTogZGVsZXRlZCwgLi4uZmlsdGVyIH0gPSB0aGlzLmdyaWRRdWVyeS5nZXRGaWx0ZXIoKTtcbiAgICB0aGlzLnN0b3JlLnVwZGF0ZShzdGF0ZSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzZXR0aW5nczoge1xuICAgICAgICAgIC4uLnN0YXRlLnNldHRpbmdzLFxuICAgICAgICAgIGZpbHRlclxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0pO1xuICAgIHRoaXMubm90aWZ5RmlsdGVyVXBkYXRlKCk7XG4gIH1cblxuICBzZXRDb2x1bW5GaWx0ZXIoY29sdW1uOiBDb2x1bW4sIGZpbHRlcjogRGF0b0dyaWRGaWx0ZXIpIHtcbiAgICB0aGlzLl9sb2dFdmVudChDb3JlRXZlbnRUeXBlcy5HUklEX0ZJTFRFUl9BUFBMSUVELCB7XG4gICAgICBjb2x1bW46IGNvbHVtbi5nZXRDb2xJZCgpLFxuICAgICAgbnVtT2ZDb25kaXRpb25zOiAoZmlsdGVyLmNvbmRpdGlvbmFsICYmIGZpbHRlci5jb25kaXRpb25hbC5jb25kaXRpb25zLmxlbmd0aCkgfHwgMCxcbiAgICAgIGJ5VmFsdWU6ICEhZmlsdGVyLmJ5VmFsdWUgPyAnWWVzJyA6ICdObydcbiAgICB9KTtcblxuICAgIGNvbnN0IGNvbEZpZWxkID0gZ2V0Q29sRmllbGQoY29sdW1uLmdldENvbERlZigpKTtcblxuICAgIHRoaXMuc3RvcmUudXBkYXRlKHN0YXRlID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNldHRpbmdzOiB7XG4gICAgICAgICAgLi4uc3RhdGUuc2V0dGluZ3MsXG4gICAgICAgICAgZmlsdGVyOiB7XG4gICAgICAgICAgICAuLi5zdGF0ZS5zZXR0aW5ncy5maWx0ZXIsXG4gICAgICAgICAgICBbY29sRmllbGRdOiBmaWx0ZXJcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICB0aGlzLm5vdGlmeUZpbHRlclVwZGF0ZSgpO1xuICB9XG5cbiAgc2V0U2VhcmNoVGVybShzZWFyY2hUZXJtOiBzdHJpbmcpIHtcbiAgICB0aGlzLnN0b3JlLnVwZGF0ZShzdGF0ZSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzZXR0aW5nczoge1xuICAgICAgICAgIC4uLnN0YXRlLnNldHRpbmdzLFxuICAgICAgICAgIHNlYXJjaFRlcm1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9KTtcbiAgICB0aGlzLm5vdGlmeUZpbHRlclVwZGF0ZSgpO1xuICB9XG5cbiAgc2V0U2VydmVyU2lkZVBhZ2luYXRpb24oY29uZmlnOiBQYXJ0aWFsPFNlcnZlclNpZGVQYWdpbmF0aW9uQ29uZmlnPikge1xuICAgIHRoaXMuc3RvcmUudXBkYXRlKHN0YXRlID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNlcnZlclNpZGVQYWdpbmF0aW9uOiB7XG4gICAgICAgICAgLi4uc3RhdGUuc2VydmVyU2lkZVBhZ2luYXRpb24sXG4gICAgICAgICAgLi4uY29uZmlnXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBzZXRMb2FkaW5nKHNob3c6IGJvb2xlYW4pIHtcbiAgICBpZiAoc2hvdykge1xuICAgICAgdGhpcy5hcGkuZ3JpZC5zaG93TG9hZGluZ092ZXJsYXkoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hcGkuZ3JpZC5nZXREaXNwbGF5ZWRSb3dDb3VudCgpID09PSAwID8gdGhpcy5zZXRPdmVybGF5KHRydWUpIDogdGhpcy5zZXRPdmVybGF5KGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgdXNlIHNldE92ZXJsYXkgaW5zdGVhZFxuICAgKiBAcGFyYW0gc2hvd1xuICAgKi9cbiAgc2V0Tm9EYXRhKHNob3c6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldE92ZXJsYXkoc2hvdyk7XG4gIH1cblxuICBzZXRPdmVybGF5KHNob3c6IGJvb2xlYW4pIHtcbiAgICBzaG93ID8gdGhpcy5hcGkuZ3JpZC5zaG93Tm9Sb3dzT3ZlcmxheSgpIDogdGhpcy5hcGkuZ3JpZC5oaWRlT3ZlcmxheSgpO1xuICB9XG5cbiAgdXBkYXRlU2V0dGluZ3Moc2V0dGluZ3M6IFBhcnRpYWw8RGF0b0dyaWRTZXR0aW5ncz4pIHtcbiAgICB0aGlzLnN0b3JlLnVwZGF0ZShzdGF0ZSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzZXR0aW5nczoge1xuICAgICAgICAgIC4uLnN0YXRlLnNldHRpbmdzLFxuICAgICAgICAgIC4uLnNldHRpbmdzXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBmaXRHcmlkKHRvOiAnY29udGFpbmVyJyB8ICdjb250ZW50Jykge1xuICAgIHRvID09PSAnY29udGFpbmVyJyA/IHRoaXMuYXBpLmdyaWQuc2l6ZUNvbHVtbnNUb0ZpdCgpIDogdGhpcy5hcGkuY29sdW1ucy5hdXRvU2l6ZUFsbENvbHVtbnMoKTtcbiAgICBjb25zdCBncmlkQWxpZ25tZW50ID0gdG8gPT09ICdjb250YWluZXInID8gRGF0b0dyaWRBbGlnbm1lbnQuRklUX1RPX0NPTlRBSU5FUiA6IERhdG9HcmlkQWxpZ25tZW50LkZJVF9UT19DT05URU5UO1xuICAgIHRoaXMudXBkYXRlU2V0dGluZ3MoeyBncmlkQWxpZ25tZW50LCBjb2x1bW5zU2l6ZXM6IG51bGwgfSk7XG4gIH1cblxuICBzYXZlU2V0dGluZ3NUb1NlcnZlcihzZXR0aW5nczogUGFydGlhbDxEYXRvR3JpZFNldHRpbmdzPikge1xuICAgIGNvbnN0IGlzR2xvYmFsID0gdGhpcy5ncmlkUXVlcnkuZ2V0R3JpZE9wdGlvbnMoKS5pc0dsb2JhbFNldHRpbmdzO1xuICAgIHRoaXMuc3RvcmFnZUFQSS5zZXQodGhpcy5ncmlkTmFtZSwgc2V0dGluZ3MsIGlzR2xvYmFsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWwgdXNlZCB0byBsb2cgZ3JpZCBldmVudHMgdG8gdGhlIHBsYXRmb3JtJ3MgbG9nZ2luZyBzZXJ2aWNlXG4gICAqL1xuICBfbG9nRXZlbnQoZXZlbnRUeXBlOiBDb3JlRXZlbnRUeXBlcywgZXZlbnRQcm9wZXJ0aWVzPzogSGFzaE1hcDxhbnk+KSB7XG4gICAgdGhpcy5sb2dnZXIubG9nRXZlbnQoZXZlbnRUeXBlLCB7IHRhYmxlOiB0aGlzLmdyaWROYW1lLCAuLi5ldmVudFByb3BlcnRpZXMgfSk7XG4gIH1cblxuICBwcml2YXRlIHdyYXBTdWNjZXNzQ2FsbGJhY2soeyBzdWNjZXNzQ2IsIHBhZ2VOdW1iZXIsIGlzUGVuZGluZ1JldHVyblRvUGFnZSB9OiBTdWNjZXNzV3JhcHBlclBhcmFtcykge1xuICAgIHJldHVybiAocm93c1RoaXNCbG9jazogYW55W10sIHRvdGFsUm93czogbnVtYmVyKSA9PiB7XG4gICAgICB0aGlzLnNldFNlcnZlclNpZGVQYWdpbmF0aW9uKHsgdG90YWxSb3dzLCBoYXNFcnJvcjogZmFsc2UgfSk7XG4gICAgICBzdWNjZXNzQ2Iocm93c1RoaXNCbG9jaywgdG90YWxSb3dzKTtcbiAgICAgIHRoaXMuZ3JpZFF1ZXJ5Ll9zZXJ2ZXJEYXRhTG9hZGVkLm5leHQoe1xuICAgICAgICBhcGk6IHRoaXMuYXBpLmdyaWQsXG4gICAgICAgIGNvbHVtbkFwaTogdGhpcy5hcGkuY29sdW1ucyxcbiAgICAgICAgdHlwZTogJ1NlcnZlckRhdGFMb2FkZWQnLFxuICAgICAgICBwYWdpbmF0aW9uUGFnZTogcGFnZU51bWJlclxuICAgICAgfSk7XG4gICAgICBpZiAoIWlzUGVuZGluZ1JldHVyblRvUGFnZSkge1xuICAgICAgICB0aGlzLnNldExvYWRpbmcoZmFsc2UpO1xuICAgICAgICAvKiogc28gdGhlIGdyaWQgZml0cyBpbiBldmVyeSBuZXcgZGF0YSBpbnB1dCAqL1xuICAgICAgICB0cmlnZ2VyV2luZG93UmVzaXplKCk7XG4gICAgICB9XG4gICAgICB0aGlzLmxhc3RUb3RhbFJvd3MgPSB0b3RhbFJvd3M7XG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgd3JhcEdldFJvd3Mob3B0aW9uczogRGF0b0dyaWRPcHRpb25zLCBnZXRSb3dzPzogKHBhcmFtczogRGF0b0dyaWRHZXRSb3dzUGFyYW1zKSA9PiB2b2lkKSB7XG4gICAgY29uc3QgZ2V0Um93c0NiID0gZ2V0Um93cyB8fCBvcHRpb25zLmRhdGFzb3VyY2UuZ2V0Um93cztcbiAgICByZXR1cm4gKGdldFJvd3NQYXJhbXM6IElHZXRSb3dzUGFyYW1zKSA9PiB7XG4gICAgICBjb25zdCB7IHN0YXJ0Um93LCBlbmRSb3csIHNvcnRNb2RlbCwgc3VjY2Vzc0NhbGxiYWNrIH0gPSBnZXRSb3dzUGFyYW1zO1xuICAgICAgY29uc3QgcGFnZVNpemUgPSBvcHRpb25zLnBhZ2luYXRpb25QYWdlU2l6ZSB8fCAxMDA7XG4gICAgICBjb25zdCBpc1JldHVyblRvQ3VycmVudFBhZ2VSZXF1aXJlZCA9IHRoaXMucGFnZU51bWJlclRvUmV0dXJuQWZ0ZXJSZWZyZXNoID4gMDtcbiAgICAgIGNvbnN0IGlzUGVuZGluZ1JldHVyblRvUGFnZSA9IGlzUmV0dXJuVG9DdXJyZW50UGFnZVJlcXVpcmVkICYmIHN0YXJ0Um93ID09PSAwO1xuXG4gICAgICBjb25zdCBwYWdlTnVtYmVyID0gaXNSZXR1cm5Ub0N1cnJlbnRQYWdlUmVxdWlyZWRcbiAgICAgICAgPyB0aGlzLnBhZ2VOdW1iZXJUb1JldHVybkFmdGVyUmVmcmVzaCArIDFcbiAgICAgICAgOiBNYXRoLmNlaWwoZW5kUm93IC8gcGFnZVNpemUpO1xuXG4gICAgICB0aGlzLnBhZ2VOdW1iZXJUb1JldHVybkFmdGVyUmVmcmVzaCA9IC0xO1xuXG4gICAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLmdyaWRRdWVyeS5nZXRGaWx0ZXIoKTtcbiAgICAgIGNvbnN0IG5ld1BhcmFtczogRGF0b0dyaWRHZXRSb3dzUGFyYW1zID0ge1xuICAgICAgICAuLi5nZXRSb3dzUGFyYW1zLFxuICAgICAgICBmYWlsQ2FsbGJhY2s6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLnNldFNlcnZlclNpZGVQYWdpbmF0aW9uKHsgaGFzRXJyb3I6IHRydWUgfSk7XG4gICAgICAgICAgdGhpcy5zZXRPdmVybGF5KHRydWUpO1xuICAgICAgICB9LFxuICAgICAgICBzdWNjZXNzQ2FsbGJhY2s6IHRoaXMud3JhcFN1Y2Nlc3NDYWxsYmFjayh7IHBhZ2VOdW1iZXIsIHN1Y2Nlc3NDYjogc3VjY2Vzc0NhbGxiYWNrLCBpc1BlbmRpbmdSZXR1cm5Ub1BhZ2UgfSksXG4gICAgICAgIHNlcnZlckNvbmZpZzoge1xuICAgICAgICAgIHBhZ2VTaXplLFxuICAgICAgICAgIHBhZ2VOdW1iZXIsXG4gICAgICAgICAgY29sdW1uRmlsdGVyczogaXNFbXB0eShmaWx0ZXIpIHx8IG9wdGlvbnMuZW5hYmxlVjJfMSA/IG51bGwgOiB0aGlzLmJ1aWxkU2VydmVyUmVxdWVzdEZpbHRlcnMoZmlsdGVyKSxcbiAgICAgICAgICBmaWx0ZXI6IG9wdGlvbnMuZW5hYmxlVjJfMSA/IHRoaXMuYnVpbGRTZXJ2ZXJSZXF1ZXN0RmlsdGVyc192Ml8xKG9wdGlvbnMuY29sdW1uRGVmcykgOiBudWxsLFxuICAgICAgICAgIHNvcnQ6IHRoaXMuYnVpbGRTZXJ2ZXJSZXF1ZXN0U29ydChzb3J0TW9kZWwpXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBpZiAoaXNQZW5kaW5nUmV0dXJuVG9QYWdlKSB7XG4gICAgICAgIC8vIFNjZW5hcmlvIHRoZSBmb2xsb3dpbmcgaGFuZGxlcyAtIHNlcnZlciByZWZyZXNoIHdoZXJlIGl0IHdhcyByZXF1ZXN0ZWQgdG8ga2VlcCB0aGUgY3VycmVudCBwYWdlLlxuICAgICAgICAvLyBUaGUgcHJvYmxlbSAtIGdldFJvd3Mgd2lsbCBpbml0aWFsbHkgYmUgY2FsbGVkIGZvciBwYWdlIDEgKGF1dG9tYXRpY2FsbHkgaGFwcGVucyB3aGVuIGNhbGxpbmcgYWctZ3JpZCdzIHNldERhdGFTb3VyY2UpLlxuICAgICAgICAvLyBJbiBvcmRlciB0byB0cmlnZ2VyIGl0IGFnYWluLCBzdWNjZXNzQ2FsbGJhY2sgaXMgY2FsbGVkIHdpdGggdGhlIGRlc2lyZWQgcGFnZS5cbiAgICAgICAgLy8gZmFrZUdldFJvd3MgaXMgdXNlZCBpbiBvcmRlciB0byBhdm9pZCByZXRyaWV2aW5nIHRoZSB1bm5lY2Vzc2FyeSByZWFsIGRhdGEgZm9yIHBhZ2UgMS5cbiAgICAgICAgY29uc3QgZmFrZUdldFJvd3MgPSAoeyBzdWNjZXNzQ2FsbGJhY2sgfTogRGF0b0dyaWRHZXRSb3dzUGFyYW1zKSA9PiB7XG4gICAgICAgICAgc3VjY2Vzc0NhbGxiYWNrKFtdLCB0aGlzLmxhc3RUb3RhbFJvd3MpO1xuICAgICAgICB9O1xuICAgICAgICBmYWtlR2V0Um93cyhuZXdQYXJhbXMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZ2V0Um93c0NiKG5ld1BhcmFtcyk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdEVkaXRhYmxlQ29sdW1uc0NlbGxDbGFzcyhwYXJhbXM6IE5vcm1hbGl6ZU9wdGlvbnNQYXJhbXMpIHtcbiAgICBwYXJhbXMuZ3JpZE9wdGlvbnMuY29sdW1uRGVmcy5mb3JFYWNoKGNvbERlZiA9PiB7XG4gICAgICBpZiAoY29sRGVmLmVkaXRhYmxlKSB7XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKGNvbERlZi5lZGl0YWJsZSkpIHtcbiAgICAgICAgICBjb25zdCBpbml0aWFsQ2VsbENsYXNzID0gY29sRGVmLmNlbGxDbGFzcztcbiAgICAgICAgICBjb2xEZWYuY2VsbENsYXNzID0gKGNlbGxDbGFzc1BhcmFtczogQ2VsbENsYXNzUGFyYW1zKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpc0VkaXRhYmxlID0gKGNvbERlZi5lZGl0YWJsZSBhcyBGdW5jdGlvbikoY2VsbENsYXNzUGFyYW1zIGFzIGFueSk7XG4gICAgICAgICAgICBpZiAoaXNFZGl0YWJsZSkge1xuICAgICAgICAgICAgICBjb25zdCBlZGl0YWJsZVJlc3VsdCA9IHRoaXMuYWRkRWRpdGFibGVDZWxsQ2xhc3MoaW5pdGlhbENlbGxDbGFzcyk7XG4gICAgICAgICAgICAgIHJldHVybiBpc0Z1bmN0aW9uKGVkaXRhYmxlUmVzdWx0KSA/IGVkaXRhYmxlUmVzdWx0KGNlbGxDbGFzc1BhcmFtcykgOiBlZGl0YWJsZVJlc3VsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBpc0Z1bmN0aW9uKGluaXRpYWxDZWxsQ2xhc3MpID8gaW5pdGlhbENlbGxDbGFzcyhjZWxsQ2xhc3NQYXJhbXMpIDogaW5pdGlhbENlbGxDbGFzcztcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbERlZi5jZWxsQ2xhc3MgPSB0aGlzLmFkZEVkaXRhYmxlQ2VsbENsYXNzKGNvbERlZi5jZWxsQ2xhc3MpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHdyYXBDb250ZXh0TWVudUJ1aWxkZXIocGFyYW1zOiBOb3JtYWxpemVPcHRpb25zUGFyYW1zKSB7XG4gICAgY29uc3QgeyBjdXN0b21Db250ZXh0TWVudSB9ID0gcGFyYW1zLmdyaWRPcHRpb25zO1xuICAgIGNvbnN0IGFsbEFjdGlvbnMgPSBpc0Z1bmN0aW9uKGN1c3RvbUNvbnRleHRNZW51KSA/IGN1c3RvbUNvbnRleHRNZW51KHBhcmFtcy5yb3dBY3Rpb25zKSA6IHBhcmFtcy5yb3dBY3Rpb25zO1xuICAgIHRoaXMudHJhbnNsYXRlQWN0aW9uTGFiZWxzKGFsbEFjdGlvbnMpO1xuICAgIGNvbnN0IGNvcHlBY3Rpb246IFJvd0FjdGlvbiA9IHtcbiAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS50cmFuc2Zvcm0oJ2NvcmUuY29weS1jZWxsJyksXG4gICAgICBpY29uOiAnY29weScsXG4gICAgICBrZXk6ICdDb3B5IENlbGwnXG4gICAgfTtcbiAgICByZXR1cm4gKHsgbm9kZSwgY29sdW1uLCBjb250ZXh0IH06IEdldENvbnRleHRNZW51SXRlbXNQYXJhbXMpID0+IHtcbiAgICAgIGNvbnN0IG9uSG92ZXJBY3Rpb25NZW51ID0gY29udGV4dCAmJiBjb250ZXh0LmNvbnRleHRNZW51ICYmIGNvbnRleHQuY29udGV4dE1lbnUuZnJvbU9uSG92ZXI7XG4gICAgICBpZiAoIW5vZGUpIHJldHVybiBbXTtcbiAgICAgIGxldCBzZWxlY3RlZCA9IFtub2RlXTtcbiAgICAgIGxldCByb3dzQ291bnQgPSAxO1xuICAgICAgaWYgKG9uSG92ZXJBY3Rpb25NZW51KSB7XG4gICAgICAgIHRoaXMudXBkYXRlR3JpZENvbnRleHQoeyBjb250ZXh0TWVudTogeyBmcm9tT25Ib3ZlcjogZmFsc2UgfSB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvcHlBY3Rpb24ub25DbGljayA9IChbcm93XSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHJhd1ZhbHVlID0gdGhpcy5hcGkuZ3JpZC5nZXRWYWx1ZShjb2x1bW4uZ2V0Q29sSWQoKSwgcm93KTtcbiAgICAgICAgICBjb25zdCBmb3JtYXR0ZXIgPSBjb2x1bW4uZ2V0Q29sRGVmKCkudmFsdWVGb3JtYXR0ZXI7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBmb3JtYXR0ZXIgPyBmb3JtYXR0ZXIocmF3VmFsdWUpIDogcmF3VmFsdWU7XG4gICAgICAgICAgY29weVRvQ2xpcGJvYXJkKHZhbHVlKTtcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKG5vZGUuaXNTZWxlY3RlZCgpKSB7XG4gICAgICAgICAgc2VsZWN0ZWQgPSB0aGlzLmdyaWRRdWVyeS5nZXRTZWxlY3RlZFJvd05vZGVzKCk7XG4gICAgICAgICAgcm93c0NvdW50ID0gc2l6ZShzZWxlY3RlZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnN0IHZpc2libGVBY3Rpb25zID0gZ2V0VmlzaWJsZUFjdGlvbnMoXG4gICAgICAgIGFsbEFjdGlvbnMsXG4gICAgICAgIHJvd3NDb3VudCxcbiAgICAgICAgc2VsZWN0ZWQsXG4gICAgICAgIHRoaXMuZ3JpZFF1ZXJ5LmlzU2VydmVyU2VsZWN0QWxsUm93c0VuYWJsZWRcbiAgICAgICkuZmlsdGVyKCh7IHZpc2libGUgfSkgPT4gdmlzaWJsZSk7XG4gICAgICBsZXQgdG9vbGJhckFjdGlvbnMgPSBbY29weUFjdGlvbl07XG4gICAgICBpZiAob25Ib3ZlckFjdGlvbk1lbnUpIHtcbiAgICAgICAgdG9vbGJhckFjdGlvbnMgPSB2aXNpYmxlQWN0aW9ucztcbiAgICAgIH0gZWxzZSBpZiAodmlzaWJsZUFjdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICB0b29sYmFyQWN0aW9ucyA9IFt7IC4uLmNvcHlBY3Rpb24sIHNlcGFyYXRvcjogdHJ1ZSB9LCAuLi52aXNpYmxlQWN0aW9uc107XG4gICAgICB9XG4gICAgICBjb25zdCBjb252ZXJ0ZXJQYXJhbXM6IEFjdGlvbkNvbnZlcnRlclBhcmFtcyA9IHtcbiAgICAgICAgdG9vbGJhckFjdGlvbnMsXG4gICAgICAgIHNlbGVjdGVkUm93czogc2VsZWN0ZWQsXG4gICAgICAgIGljb25SZWdpc3RyeTogdGhpcy5zdmdSZWdpc3RyeSxcbiAgICAgICAgbm9kZSxcbiAgICAgICAgbG9nZ2VyOiB7XG4gICAgICAgICAgbG9nOiB0aGlzLl9sb2dFdmVudC5iaW5kKHRoaXMpLFxuICAgICAgICAgIGV2ZW50T3JpZ2luOiBvbkhvdmVyQWN0aW9uTWVudSA/ICdPbiBIb3ZlcicgOiAnQ29udGV4dCBNZW51J1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHRvb2xiYXJBY3Rpb25Ub0NvbnRleHRBY3Rpb24oY29udmVydGVyUGFyYW1zKTtcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSB0cmFuc2xhdGVBY3Rpb25MYWJlbHMoYWxsQWN0aW9uczogUm93QWN0aW9uW10pIHtcbiAgICBhbGxBY3Rpb25zLmZvckVhY2goYWN0aW9uID0+IHtcbiAgICAgIGFjdGlvbi5sYWJlbCA9IHRoaXMudHJhbnNsYXRlLnRyYW5zZm9ybShhY3Rpb24ubGFiZWwpO1xuICAgICAgaWYgKGFjdGlvbi5zdWJNZW51KSB7XG4gICAgICAgIHRoaXMudHJhbnNsYXRlQWN0aW9uTGFiZWxzKGFjdGlvbi5zdWJNZW51KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGxvYWRTYXZlZFNldHRpbmdzKHNldHRpbmdzOiBQYXJ0aWFsPERhdG9HcmlkU2V0dGluZ3M+KSB7XG4gICAgY29uc3Qge1xuICAgICAgc29ydCxcbiAgICAgIGhpZGRlbkNvbHVtbnMsXG4gICAgICBmaWx0ZXIsXG4gICAgICBncm91cGVkQ29sdW1ucyxcbiAgICAgIGNvbHVtbnNTaXplcyxcbiAgICAgIHBpbm5lZENvbHVtbnMsXG4gICAgICBjb2x1bW5zT3JkZXIsXG4gICAgICBncmlkQWxpZ25tZW50XG4gICAgfSA9IHNldHRpbmdzO1xuICAgIGNvbnN0IHsgZ3JpZCwgY29sdW1ucyB9ID0gdGhpcy5hcGk7XG4gICAgLyogSGlkZSBjb2x1bW5zICovXG4gICAgLyogTk9URTogY29sdW1ucyBvcmRlciBhcmUgdHJlYXRlZCBhcyB0aGUgY3VycmVudGx5IHZpc2libGUgY29sdW1ucyAqL1xuICAgIGNvbHVtbnMuc2V0Q29sdW1uc1Zpc2libGUodGhpcy5pbml0aWFsU2V0dGluZ3MuY29sdW1uc09yZGVyLCB0cnVlKTtcbiAgICBjb25zdCBjb2x1bW5Ub0hpZGUgPSAhaXNOaWwoaGlkZGVuQ29sdW1ucykgPyBoaWRkZW5Db2x1bW5zIDogdGhpcy5pbml0aWFsU2V0dGluZ3MuaGlkZGVuQ29sdW1ucztcbiAgICBjb2x1bW5zLnNldENvbHVtbnNWaXNpYmxlKGNvbHVtblRvSGlkZSwgZmFsc2UpO1xuXG4gICAgLyogQXBwbHkgZmlsdGVycyAqL1xuICAgIGlmIChmaWx0ZXIpIHtcbiAgICAgIGdyaWQub25GaWx0ZXJDaGFuZ2VkKCk7XG4gICAgfVxuXG4gICAgLyogR3JvdXAgY29sdW1ucyAqL1xuICAgIGNvbnN0IGFsbEdyb3VwZWRDb2x1bW5zID0gY29sdW1ucy5nZXRSb3dHcm91cENvbHVtbnMoKTtcbiAgICBsZXQgcmVtb3ZlR3JvdXBlZDtcbiAgICBpZiAoZ3JvdXBlZENvbHVtbnMpIHtcbiAgICAgIHJlbW92ZUdyb3VwZWQgPSBhbGxHcm91cGVkQ29sdW1ucy5maWx0ZXIoY29sID0+ICFncm91cGVkQ29sdW1ucy5pbmNsdWRlcyhjb2wuZ2V0Q29sSWQoKSkpO1xuICAgICAgY29sdW1ucy5hZGRSb3dHcm91cENvbHVtbnMoZ3JvdXBlZENvbHVtbnMpO1xuICAgICAgY29sdW1ucy5zZXRDb2x1bW5zVmlzaWJsZShncm91cGVkQ29sdW1ucywgZmFsc2UpO1xuICAgIH1cbiAgICBjb2x1bW5zLnJlbW92ZVJvd0dyb3VwQ29sdW1ucyhyZW1vdmVHcm91cGVkKTtcbiAgICBjb2x1bW5zLnNldENvbHVtbnNWaXNpYmxlKHJlbW92ZUdyb3VwZWQsIHRydWUpO1xuXG4gICAgLyogQXBwbHkgc29ydCAqL1xuICAgIGNvbnN0IGdyaWRTb3J0ID0gc29ydCB8fCB0aGlzLmluaXRpYWxTZXR0aW5ncy5zb3J0O1xuICAgIGdyaWQuc2V0U29ydE1vZGVsKGdyaWRTb3J0ID8gW2dyaWRTb3J0XSA6IG51bGwpO1xuXG4gICAgLyogQWxpZ24gZ3JpZCAqL1xuICAgIGlmIChncmlkQWxpZ25tZW50ID09PSBEYXRvR3JpZEFsaWdubWVudC5DVVNUT00pIHtcbiAgICAgIC8qIFNldCBjb2x1bW4gc2l6ZXMgKi9cbiAgICAgIGNvbHVtbnNTaXplcyAmJlxuICAgICAgICBPYmplY3Qua2V5cyhjb2x1bW5zU2l6ZXMpLmZvckVhY2goY29sSWQgPT4ge1xuICAgICAgICAgIGlmIChjb2x1bW5zU2l6ZXNbY29sSWRdID09PSBEYXRvR3JpZEFsaWdubWVudC5GSVRfVE9fQ09OVEVOVCkge1xuICAgICAgICAgICAgY29sdW1ucy5hdXRvU2l6ZUNvbHVtbihjb2xJZCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbHVtbnMuc2V0Q29sdW1uV2lkdGgoY29sSWQsIGNvbHVtbnNTaXplc1tjb2xJZF0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGdyaWRBbGlnbm1lbnQgPT09IERhdG9HcmlkQWxpZ25tZW50LkZJVF9UT19DT05URU5UID8gY29sdW1ucy5hdXRvU2l6ZUFsbENvbHVtbnMoKSA6IGdyaWQuc2l6ZUNvbHVtbnNUb0ZpdCgpO1xuICAgIH1cblxuICAgIC8qIFBpbiBjb2x1bW5zIGxlZnQgKi9cbiAgICBjb25zdCBmaWx0ZXJlZFBpbm5lZENvbHVtbnMgPSBwaW5uZWRDb2x1bW5zXG4gICAgICA/IHBpbm5lZENvbHVtbnMuZmlsdGVyKChjb2w6IHN0cmluZykgPT4gY29sICE9PSB0aGlzLkNIRUNLQk9YX1NFTEVDVElPTl9DT0xfSUQpXG4gICAgICA6IG51bGw7XG4gICAgY29uc3QgZmlsdGVyZWRDb2x1bW5zID0gY29sdW1uc09yZGVyXG4gICAgICA/IGNvbHVtbnNPcmRlci5maWx0ZXIoKGNvbDogc3RyaW5nKSA9PiBjb2wgIT09IHRoaXMuQ0hFQ0tCT1hfU0VMRUNUSU9OX0NPTF9JRClcbiAgICAgIDogbnVsbDtcbiAgICBzaXplKGZpbHRlcmVkUGlubmVkQ29sdW1ucykgPiAwXG4gICAgICA/IGNvbHVtbnMuc2V0Q29sdW1uc1Bpbm5lZChmaWx0ZXJlZFBpbm5lZENvbHVtbnMsICdsZWZ0JylcbiAgICAgIDogZmlsdGVyZWRDb2x1bW5zICYmIGNvbHVtbnMuc2V0Q29sdW1uc1Bpbm5lZChmaWx0ZXJlZENvbHVtbnMsIG51bGwpO1xuXG4gICAgLyogT3JkZXIgY29sdW1ucyAqL1xuICAgIGNvbHVtbnNPcmRlciAmJiBjb2x1bW5zLm1vdmVDb2x1bW5zKGNvbHVtbnNPcmRlciwgMCk7XG4gIH1cblxuICBnZXRTZXR0aW5nc0RpZmYoKTogUGFydGlhbDxEYXRvR3JpZFNldHRpbmdzPiB7XG4gICAgY29uc3QgY3VycmVudFN0YXRlID0gdGhpcy5ncmlkUXVlcnkuZ2V0Q3VycmVudEdyaWRTZXR0aW5ncygpO1xuICAgIHJldHVybiBkaWZmKGN1cnJlbnRTdGF0ZSwgdGhpcy5pbml0aWFsU2V0dGluZ3MpO1xuICB9XG5cbiAgcmVzZXRUYWJsZVNldHRpbmdzKCkge1xuICAgIGNvbnN0IHsgZmlsdGVyLCAuLi5yZXN0IH0gPSB0aGlzLmluaXRpYWxTZXR0aW5ncztcbiAgICBjb25zdCB7IGNvbHVtbnMgfSA9IHRoaXMuYXBpO1xuICAgIGNvbnN0IG9yaWdpbmFsQ29sU2l6ZXMgPSBnZXRDb2x1bW5zU2l6ZXMoY29sdW1ucy5nZXRBbGxHcmlkQ29sdW1ucygpLCB0cnVlKTtcbiAgICBjb25zdCBncmlkQWxpZ25tZW50ID0gaXNFbXB0eShvcmlnaW5hbENvbFNpemVzKSA/IHJlc3QuZ3JpZEFsaWdubWVudCA6IERhdG9HcmlkQWxpZ25tZW50LkNVU1RPTTtcbiAgICBjb25zdCBuZXdTZXR0aW5ncyA9IHsgLi4ucmVzdCwgY29sdW1uc1NpemVzOiBvcmlnaW5hbENvbFNpemVzLCBncmlkQWxpZ25tZW50IH07XG4gICAgdGhpcy51cGRhdGVTZXR0aW5ncyhuZXdTZXR0aW5ncyk7XG4gICAgdGhpcy5sb2FkU2F2ZWRTZXR0aW5ncyhuZXdTZXR0aW5ncyk7XG4gICAgdGhpcy5zYXZlU2V0dGluZ3NUb1NlcnZlcih7IGZpbHRlciB9KTtcbiAgfVxuXG4gIGluaXRTZXR0aW5ncyhzYXZlZFNldHRpbmdzOiBQYXJ0aWFsPERhdG9HcmlkU2V0dGluZ3M+KSB7XG4gICAgdGhpcy5pbml0aWFsU2V0dGluZ3MgPSB0aGlzLmdyaWRRdWVyeS5nZXRDdXJyZW50R3JpZFNldHRpbmdzKCk7XG4gICAgdGhpcy51cGRhdGVTZXR0aW5ncyhzYXZlZFNldHRpbmdzKTtcbiAgICB0aGlzLmxvYWRTYXZlZFNldHRpbmdzKHNhdmVkU2V0dGluZ3MpO1xuICB9XG5cbiAgbm90aWZ5RmlsdGVyVXBkYXRlKCkge1xuICAgIGNvbnN0IHdhdGNoID0gW3RoaXMuZ3JpZFJlZi5maWx0ZXJDaGFuZ2VkLmFzT2JzZXJ2YWJsZSgpXTtcbiAgICBpZiAodGhpcy5ncmlkUXVlcnkuaXNTZXJ2ZXJTaWRlKSB7XG4gICAgICB3YXRjaC5wdXNoKHRoaXMuZ3JpZFF1ZXJ5LnNlcnZlckRhdGFMb2FkZWQkKTtcbiAgICAgIHRoaXMuc2V0TG9hZGluZyh0cnVlKTtcbiAgICB9XG4gICAgY29tYmluZUxhdGVzdCh3YXRjaClcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlKDEpLFxuICAgICAgICB1bnRpbERlc3Ryb3llZCh0aGlzKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJvd3NBZnRlckZpbHRlciA9IHRoaXMuYXBpLmdyaWQuZ2V0RGlzcGxheWVkUm93Q291bnQoKTtcbiAgICAgICAgdGhpcy5zZXRPdmVybGF5KHJvd3NBZnRlckZpbHRlciA9PT0gMCk7XG4gICAgICB9KTtcbiAgICB0aGlzLmFwaS5ncmlkLm9uRmlsdGVyQ2hhbmdlZCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFNlcnZlclJlcXVlc3RGaWx0ZXJzKGZpbHRlcjogRGF0b0dyaWRGaWx0ZXJzTWFwKTogU2VydmVyU2lkZVBhZ2luYXRpb25GaWx0ZXJzIHtcbiAgICBjb25zdCBjb2x1bW5zRmlsdGVyczogU2VydmVyU2lkZVBhZ2luYXRpb25GaWx0ZXJzID0ge307XG4gICAgZm9yIChjb25zdCBbY29sdW1uLCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZmlsdGVyKSkge1xuICAgICAgY29uc3QgeyBieVZhbHVlLCBjb25kaXRpb25hbCB9ID0gdmFsdWU7XG4gICAgICBpZiAoYnlWYWx1ZSkge1xuICAgICAgICBjb2x1bW5zRmlsdGVyc1tjb2x1bW5dID0ge1xuICAgICAgICAgIG9wZXJhdG9yOiBPcGVyYXRvclR5cGVzLkFORCxcbiAgICAgICAgICBmaWx0ZXJzOiBbYnlWYWx1ZV1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGlmIChjb25kaXRpb25hbCkge1xuICAgICAgICBjb25zdCBjb25kaXRpb25hbEZpbHRlciA9IHtcbiAgICAgICAgICBvcGVyYXRvcjogY29uZGl0aW9uYWwub3BlcmF0b3IsXG4gICAgICAgICAgZmlsdGVyczogY29uZGl0aW9uYWwuY29uZGl0aW9ucy5tYXAoaXRlbSA9PiB7XG4gICAgICAgICAgICBjb25zdCB7IGNvbmRpdGlvbiwgdmFsdWUgfSA9IGl0ZW07XG4gICAgICAgICAgICBpZiAoY29uZGl0aW9uID09PSBEYXRvRmlsdGVyQ29uZGl0aW9ucy5JTl9SQU5HRSkge1xuICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGNvbmRpdGlvbixcbiAgICAgICAgICAgICAgICBzdGFydDogdmFsdWUsXG4gICAgICAgICAgICAgICAgZW5kOiAoaXRlbSBhcyBEYXRvR3JpZFJhbmdlRmlsdGVyQ29uZGl0aW9uKS5yYW5nZUVuZFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGl0ZW0gYXMgRGF0b0dyaWRGaWx0ZXJDb25kaXRpb247XG4gICAgICAgICAgfSlcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGJ5VmFsdWUpIHtcbiAgICAgICAgICBjb2x1bW5zRmlsdGVyc1tjb2x1bW5dLmZpbHRlcnMucHVzaChjb25kaXRpb25hbEZpbHRlcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29sdW1uc0ZpbHRlcnNbY29sdW1uXSA9IGNvbmRpdGlvbmFsRmlsdGVyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbHVtbnNGaWx0ZXJzO1xuICB9XG5cbiAgYnVpbGRTZXJ2ZXJSZXF1ZXN0RmlsdGVyc192Ml8xKGdyaWRDb2x1bW5zOiBEYXRvR3JpZENvbHVtbkRlZltdKTogU2VydmVyU2lkZVBhZ2luYXRpb25GaWx0ZXIge1xuICAgIGNvbnN0IGZpbHRlciA9IHRoaXMuZ3JpZFF1ZXJ5LmdldEZpbHRlcigpO1xuICAgIGNvbnN0IHNlYXJjaFRlcm0gPSB0aGlzLmdyaWRRdWVyeS5nZXRTZWFyY2hUZXJtKCk7XG5cbiAgICBsZXQgY29sdW1uRmlsdGVycyA9IHRoaXMuYnVpbGRTZXJ2ZXJDb2x1bW5GaWx0ZXJzX3YyXzEoZmlsdGVyKTtcbiAgICBpZiAoY29sdW1uRmlsdGVycy5ldmVyeSgoeyBvcGVyYXRvciB9OiBTZXJ2ZXJTaWRlUGFnaW5hdGlvbkZpbHRlcikgPT4gb3BlcmF0b3IgPT09IE9wZXJhdG9yVHlwZXMuQU5EKSkge1xuICAgICAgY29uc3QgZmxhdHRlbmVkRmlsdGVycyA9IGNvbHVtbkZpbHRlcnNcbiAgICAgICAgLm1hcCgoeyBmaWx0ZXJzIH06IFNlcnZlclNpZGVQYWdpbmF0aW9uRmlsdGVyKSA9PiBmaWx0ZXJzKVxuICAgICAgICAucmVkdWNlKChhcnIsIHJlcykgPT4gcmVzLmNvbmNhdChhcnIpLCBbXSk7XG4gICAgICBjb2x1bW5GaWx0ZXJzID0gW1xuICAgICAgICB7XG4gICAgICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yVHlwZXMuQU5ELFxuICAgICAgICAgIGZpbHRlcnM6IGZsYXR0ZW5lZEZpbHRlcnNcbiAgICAgICAgfVxuICAgICAgXTtcbiAgICB9XG4gICAgY29uc3QgY29sdW1uRmlsdGVyOiBTZXJ2ZXJTaWRlUGFnaW5hdGlvbkZpbHRlciA9XG4gICAgICBzaXplKGNvbHVtbkZpbHRlcnMpID4gMVxuICAgICAgICA/IHsgb3BlcmF0b3I6IE9wZXJhdG9yVHlwZXMuQU5ELCBmaWx0ZXJzOiBjb2x1bW5GaWx0ZXJzIH1cbiAgICAgICAgOiBzaXplKGNvbHVtbkZpbHRlcnMpID09PSAxXG4gICAgICAgID8gY29sdW1uRmlsdGVyc1swXVxuICAgICAgICA6IG51bGw7XG4gICAgaWYgKCFzZWFyY2hUZXJtKSB7XG4gICAgICByZXR1cm4gY29sdW1uRmlsdGVyO1xuICAgIH1cbiAgICBjb25zdCB7IGluY2x1ZGVIaWRkZW5Db2x1bW5zSW5TZWFyY2ggfSA9IHRoaXMuZ3JpZFF1ZXJ5LmdldEdyaWRPcHRpb25zKCk7XG4gICAgY29uc3Qgc2VhcmNoYWJsZUNvbHVtbnMgPSBncmlkQ29sdW1ucy5maWx0ZXIoKGNvbERlZjogRGF0b0dyaWRDb2x1bW5EZWYpID0+IHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIGNvbERlZi5pbmNsdWRlSW5TZWFyY2ggJiYgKGluY2x1ZGVIaWRkZW5Db2x1bW5zSW5TZWFyY2ggfHwgdGhpcy5hcGkuY29sdW1ucy5nZXRDb2x1bW4oY29sRGVmLmNvbElkKS5pc1Zpc2libGUoKSlcbiAgICAgICk7XG4gICAgfSk7XG4gICAgY29uc3Qgc2VhcmNoRmlsdGVyczogU2VydmVyU2lkZVBhZ2luYXRpb25Db25kaXRpb25bXSA9IHNlYXJjaGFibGVDb2x1bW5zLm1hcCgoeyBmaWVsZCB9OiBEYXRvR3JpZENvbHVtbkRlZikgPT4gKHtcbiAgICAgIGNvbmRpdGlvbjogRGF0b0ZpbHRlckNvbmRpdGlvbnMuQ09OVEFJTlMsXG4gICAgICB2YWx1ZTogc2VhcmNoVGVybSxcbiAgICAgIGNvbHVtbjogZmllbGRcbiAgICB9KSk7XG4gICAgY29uc3Qgc2VhcmNoRmlsdGVyOiBTZXJ2ZXJTaWRlUGFnaW5hdGlvbkZpbHRlciA9XG4gICAgICBzaXplKHNlYXJjaEZpbHRlcnMpID4gMCA/IHsgb3BlcmF0b3I6IE9wZXJhdG9yVHlwZXMuT1IsIGZpbHRlcnM6IHNlYXJjaEZpbHRlcnMgfSA6IG51bGw7XG4gICAgaWYgKCFjb2x1bW5GaWx0ZXIpIHtcbiAgICAgIHJldHVybiBzZWFyY2hGaWx0ZXI7XG4gICAgfVxuICAgIHJldHVybiB7IG9wZXJhdG9yOiBPcGVyYXRvclR5cGVzLkFORCwgZmlsdGVyczogW2NvbHVtbkZpbHRlciwgc2VhcmNoRmlsdGVyXSB9O1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZFNlcnZlckNvbHVtbkZpbHRlcnNfdjJfMShmaWx0ZXI6IERhdG9HcmlkRmlsdGVyc01hcCk6IFNlcnZlclNpZGVQYWdpbmF0aW9uRmlsdGVyW10ge1xuICAgIGxldCBjb2x1bW5GaWx0ZXJzOiBTZXJ2ZXJTaWRlUGFnaW5hdGlvbkZpbHRlcltdID0gW107XG5cbiAgICBmb3IgKGNvbnN0IFtjb2x1bW4sIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhmaWx0ZXIpKSB7XG4gICAgICBsZXQgY29sdW1uRmlsdGVyOiBTZXJ2ZXJTaWRlUGFnaW5hdGlvbkZpbHRlciA9IG51bGw7XG4gICAgICBjb25zdCB7IGJ5VmFsdWUsIGNvbmRpdGlvbmFsIH0gPSB2YWx1ZTtcbiAgICAgIGlmIChieVZhbHVlKSB7XG4gICAgICAgIGNvbHVtbkZpbHRlciA9IHtcbiAgICAgICAgICBvcGVyYXRvcjogT3BlcmF0b3JUeXBlcy5BTkQsXG4gICAgICAgICAgZmlsdGVyczogW3sgY29sdW1uLCAuLi5ieVZhbHVlIH1dXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBpZiAoY29uZGl0aW9uYWwpIHtcbiAgICAgICAgY29uc3QgY29uZGl0aW9uYWxGaWx0ZXI6IFNlcnZlclNpZGVQYWdpbmF0aW9uRmlsdGVyID0gdGhpcy5nZXRTZXJ2ZXJDb25kaXRpb25hbEZpbHRlcihjb25kaXRpb25hbCwgY29sdW1uKTtcbiAgICAgICAgaWYgKGNvbHVtbkZpbHRlcikge1xuICAgICAgICAgIGNvbHVtbkZpbHRlci5maWx0ZXJzLnB1c2goY29uZGl0aW9uYWxGaWx0ZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbHVtbkZpbHRlciA9IGNvbmRpdGlvbmFsRmlsdGVyO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb2x1bW5GaWx0ZXJzLnB1c2goY29sdW1uRmlsdGVyKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbHVtbkZpbHRlcnM7XG4gIH1cblxuICBnZXRGaWx0ZXJGb3JTZXJ2ZXJBY3Rpb25PblNlbGVjdEFsbCgpOiBTZXJ2ZXJTaWRlUGFnaW5hdGlvbkZpbHRlciB7XG4gICAgY29uc3QgeyBleGNsdWRlZEZyb21TZWxlY3RBbGwgfSA9IHRoaXMuZ3JpZFF1ZXJ5LnNlcnZlclNpZGVDb25maWc7XG4gICAgY29uc3QgeyBjb2x1bW5EZWZzLCBpZENvbHVtbktleSB9ID0gdGhpcy5ncmlkUXVlcnkuZ2V0R3JpZE9wdGlvbnMoKTtcbiAgICBjb25zdCBtYWluRmlsdGVyID0gdGhpcy5idWlsZFNlcnZlclJlcXVlc3RGaWx0ZXJzX3YyXzEoY29sdW1uRGVmcyk7XG4gICAgaWYgKGlzRW1wdHkoZXhjbHVkZWRGcm9tU2VsZWN0QWxsKSkge1xuICAgICAgcmV0dXJuIG1haW5GaWx0ZXI7XG4gICAgfVxuICAgIGNvbnN0IGV4Y2x1ZGVkUm93c0ZpbHRlcjogU2VydmVyU2lkZVBhZ2luYXRpb25MaXN0Q29uZGl0aW9uID0ge1xuICAgICAgY29uZGl0aW9uOiBEYXRvRmlsdGVyQ29uZGl0aW9ucy5OT1RfSU5fTElTVCxcbiAgICAgIHZhbHVlczogZXhjbHVkZWRGcm9tU2VsZWN0QWxsLFxuICAgICAgY29sdW1uOiBpZENvbHVtbktleVxuICAgIH07XG4gICAgY29uc3QgZmlsdGVycyA9IG1haW5GaWx0ZXIgPyBbbWFpbkZpbHRlciwgZXhjbHVkZWRSb3dzRmlsdGVyXSA6IFtleGNsdWRlZFJvd3NGaWx0ZXJdO1xuICAgIHJldHVybiB7IG9wZXJhdG9yOiBPcGVyYXRvclR5cGVzLkFORCwgZmlsdGVycyB9O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTZXJ2ZXJDb25kaXRpb25hbEZpbHRlcihcbiAgICBjb25kaXRpb25hbEZpbHRlcjogRGF0b0dyaWRDb25kaXRpb25hbEZpbHRlcixcbiAgICBjb2x1bW46IHN0cmluZ1xuICApOiBTZXJ2ZXJTaWRlUGFnaW5hdGlvbkZpbHRlciB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG9wZXJhdG9yOiBjb25kaXRpb25hbEZpbHRlci5vcGVyYXRvcixcbiAgICAgIGZpbHRlcnM6IGNvbmRpdGlvbmFsRmlsdGVyLmNvbmRpdGlvbnMubWFwKGl0ZW0gPT4ge1xuICAgICAgICBjb25zdCB7IGNvbmRpdGlvbiwgdmFsdWUgfSA9IGl0ZW07XG4gICAgICAgIGlmIChjb25kaXRpb24gPT09IERhdG9GaWx0ZXJDb25kaXRpb25zLklOX1JBTkdFKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvbmRpdGlvbixcbiAgICAgICAgICAgIHN0YXJ0OiB2YWx1ZSxcbiAgICAgICAgICAgIGVuZDogKGl0ZW0gYXMgRGF0b0dyaWRSYW5nZUZpbHRlckNvbmRpdGlvbikucmFuZ2VFbmQsXG4gICAgICAgICAgICBjb2x1bW5cbiAgICAgICAgICB9IGFzIFNlcnZlclNpZGVQYWdpbmF0aW9uUmFuZ2VDb25kaXRpb247XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbmRpdGlvbiA9PT0gRGF0b0ZpbHRlckNvbmRpdGlvbnMuSVNfRU1QVFkgfHwgY29uZGl0aW9uID09PSBEYXRvRmlsdGVyQ29uZGl0aW9ucy5OT1RfRU1QVFkpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29uZGl0aW9uOiBEYXRvRmlsdGVyQ29uZGl0aW9ucy5JU19FTVBUWSxcbiAgICAgICAgICAgIHZhbHVlOiBjb25kaXRpb24gPT09IERhdG9GaWx0ZXJDb25kaXRpb25zLklTX0VNUFRZID8gJ3RydWUnIDogJ2ZhbHNlJyxcbiAgICAgICAgICAgIGNvbHVtblxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgLi4uaXRlbSwgY29sdW1uIH0gYXMgU2VydmVyU2lkZVBhZ2luYXRpb25Db25kaXRpb247XG4gICAgICB9KVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkU2VydmVyUmVxdWVzdFNvcnQoc29ydE1vZGVsOiBEYXRvR3JpZFNvcnRbXSk6IERhdG9HcmlkU2VydmVyU29ydFtdIHtcbiAgICByZXR1cm4gc29ydE1vZGVsLm1hcCgoeyBjb2xJZCwgc29ydCB9KSA9PiAoe1xuICAgICAgY29sdW1uOiBjb2xJZCxcbiAgICAgIHNvcnRPcmRlcjogc29ydC50b1VwcGVyQ2FzZSgpIGFzIERhdG9HcmlkU2VydmVyU29ydERpcmVjdGlvblxuICAgIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkRWRpdGFibGVDZWxsQ2xhc3MoXG4gICAgY2VsbENsYXNzVmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdIHwgKChjZWxsQ2xhc3NQYXJhbXM6IENlbGxDbGFzc1BhcmFtcykgPT4gc3RyaW5nIHwgc3RyaW5nW10pXG4gICkge1xuICAgIGlmIChpc05pbChjZWxsQ2xhc3NWYWx1ZSkpIHtcbiAgICAgIHJldHVybiAnZGF0by1lZGl0YWJsZS1jZWxsJztcbiAgICB9IGVsc2UgaWYgKGlzRnVuY3Rpb24oY2VsbENsYXNzVmFsdWUpKSB7XG4gICAgICByZXR1cm4gY2VsbENsYXNzUGFyYW1zID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RWRpdGFibGVDbGFzc0FycmF5KGNlbGxDbGFzc1ZhbHVlKGNlbGxDbGFzc1BhcmFtcykpO1xuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZ2V0RWRpdGFibGVDbGFzc0FycmF5KGNlbGxDbGFzc1ZhbHVlKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RWRpdGFibGVDbGFzc0FycmF5KGN1cnJlbnRDbGFzczogc3RyaW5nIHwgc3RyaW5nW10pOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgY2VsbENsYXNzID0gY29lcmNlQXJyYXkoY3VycmVudENsYXNzKTtcbiAgICBjZWxsQ2xhc3MucHVzaCgnZGF0by1lZGl0YWJsZS1jZWxsJyk7XG4gICAgcmV0dXJuIGNlbGxDbGFzcztcbiAgfVxuXG4gIHNlbGVjdEFsbEN1cnJlbnRQYWdlUm93cyhpc1NlbGVjdGVkID0gdHJ1ZSwgY29uc2lkZXJFeGNsdWRlZCA9IGZhbHNlKSB7XG4gICAgbGV0IHJvd3NGb3JTZWxlY3Rpb24gPSB0aGlzLmdyaWRRdWVyeS5nZXRDdXJyZW50UGFnZVJvd3MoKTtcbiAgICBpZiAoY29uc2lkZXJFeGNsdWRlZCkge1xuICAgICAgY29uc3QgeyBleGNsdWRlZEZyb21TZWxlY3RBbGwgfSA9IHRoaXMuZ3JpZFF1ZXJ5LnNlcnZlclNpZGVDb25maWc7XG4gICAgICBpZiAoIWlzRW1wdHkoZXhjbHVkZWRGcm9tU2VsZWN0QWxsKSkge1xuICAgICAgICByb3dzRm9yU2VsZWN0aW9uID0gcm93c0ZvclNlbGVjdGlvbi5maWx0ZXIoKHsgaWQgfTogUm93Tm9kZSkgPT4gIWV4Y2x1ZGVkRnJvbVNlbGVjdEFsbC5pbmNsdWRlcyhpZCkpO1xuICAgICAgfVxuICAgIH1cbiAgICBpc1NlbGVjdGVkID8gdGhpcy5zZWxlY3RSb3dzKHJvd3NGb3JTZWxlY3Rpb24pIDogdGhpcy5kZXNlbGVjdFJvd3Mocm93c0ZvclNlbGVjdGlvbik7XG4gIH1cblxuICBkZXNlbGVjdEFsbFJvd3MoKSB7XG4gICAgdGhpcy5hcGkuZ3JpZC5kZXNlbGVjdEFsbCgpO1xuICAgIGlmICh0aGlzLmdyaWRRdWVyeS5pc1NlcnZlclNlbGVjdEFsbFJvd3NFbmFibGVkKSB7XG4gICAgICB0aGlzLnNldFNlcnZlclNpZGVQYWdpbmF0aW9uKHsgc2VsZWN0QWxsUm93c0VuYWJsZWQ6IGZhbHNlLCBleGNsdWRlZEZyb21TZWxlY3RBbGw6IFtdIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBXaGVuIHBpdm90aW5nLFxuICAgKiB3ZSBhZGQgdGhlIGZpZWxkIG5hbWUgdG8gdGhlIGNvbHVtbiBoZWFkZXIgY2xhc3MgaW4gb3JkZXIgdG8gYWNjZXNzIGl0IHRocm91Z2ggdGhlIGF1dG8gZ2VuZXJhdGVkIHBpdm90IGNvbHVtbi5cbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgaW5pdFBpdm90U2Vjb25kYXJ5Q29sc1Byb2Nlc3MoeyBncmlkT3B0aW9ucyB9OiBOb3JtYWxpemVPcHRpb25zUGFyYW1zKSB7XG4gICAgZ3JpZE9wdGlvbnMucHJvY2Vzc1NlY29uZGFyeUNvbERlZiA9IGNvbERlZiA9PiB7XG4gICAgICBjb25zdCBhcGkgPSBjb2xEZWYuaGVhZGVyQ29tcG9uZW50UGFyYW1zICYmIGNvbERlZi5oZWFkZXJDb21wb25lbnRQYXJhbXMuZ3JpZFF1ZXJ5LmFwaTtcblxuICAgICAgaWYgKGFwaSkge1xuICAgICAgICBjb25zdCB2YWx1ZUNvbHVtbnMgPSBjb2xEZWYuaGVhZGVyQ29tcG9uZW50UGFyYW1zLmdyaWRRdWVyeS5hcGkuY29sdW1ucy5nZXRWYWx1ZUNvbHVtbnMoKTtcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxDb2xEZWYgPSB2YWx1ZUNvbHVtbnNcbiAgICAgICAgICAubWFwKCh7IHVzZXJQcm92aWRlZENvbERlZiB9KSA9PiB1c2VyUHJvdmlkZWRDb2xEZWYpXG4gICAgICAgICAgLmZpbmQoKHsgY29sSWQgfSkgPT4gY29sSWQgPT09IGNvbERlZi5waXZvdFZhbHVlQ29sdW1uLmdldENvbElkKCkpO1xuXG4gICAgICAgIGlmIChvcmlnaW5hbENvbERlZikge1xuICAgICAgICAgIGNvbERlZi5maWx0ZXIgPSBvcmlnaW5hbENvbERlZi5maWx0ZXI7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGNvbERlZi5waXZvdEtleXMpIHtcbiAgICAgICAgY29sRGVmLnBpdm90S2V5cyA9IGNvbERlZi5waXZvdEtleXMubWFwKGtleSA9PiBKU09OLnBhcnNlKGtleSkudmFsdWUpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBncmlkT3B0aW9ucy5wcm9jZXNzU2Vjb25kYXJ5Q29sR3JvdXBEZWYgPSAoY29sR3JvdXBEZWY6IENvbEdyb3VwRGVmKSA9PiB7XG4gICAgICBpZiAoY29sR3JvdXBEZWYuaGVhZGVyTmFtZSkge1xuICAgICAgICBjb25zdCB7IGZpZWxkLCB2YWx1ZSB9ID0gSlNPTi5wYXJzZShjb2xHcm91cERlZi5oZWFkZXJOYW1lKTtcblxuICAgICAgICBjb2xHcm91cERlZi5oZWFkZXJDbGFzcyA9IGZpZWxkO1xuICAgICAgICBjb2xHcm91cERlZi5oZWFkZXJOYW1lID0gdmFsdWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb2xHcm91cERlZi5waXZvdEtleXMpIHtcbiAgICAgICAgY29sR3JvdXBEZWYucGl2b3RLZXlzID0gY29sR3JvdXBEZWYucGl2b3RLZXlzLm1hcChrZXkgPT4gSlNPTi5wYXJzZShrZXkpLnZhbHVlKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRQaXZvdE1vZGVSb3dzPFQ+KGRhdGE6IFRbXSkge1xuICAgIGNvbnN0IHBpdm90Q29sdW1ucyA9IHRoaXMuZ3JpZFF1ZXJ5LmdldEFsbFBpdm90Q29sdW1ucygpO1xuICAgIGNvbnN0IGNvbnZlcnRlZERhdGEgPSBkYXRhLm1hcCgoY3VycmVudFZhbHVlLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgbWFwcGVkVmFsdWVzID0geyAuLi5jdXJyZW50VmFsdWUgfTtcblxuICAgICAgZm9yIChjb25zdCBjb2wgb2YgcGl2b3RDb2x1bW5zKSB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gY29sLmdldENvbERlZigpLmZpZWxkO1xuXG4gICAgICAgIG1hcHBlZFZhbHVlc1tmaWVsZF0gPSBKU09OLnN0cmluZ2lmeSh7IGZpZWxkLCB2YWx1ZTogY3VycmVudFZhbHVlW2ZpZWxkXSB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG1hcHBlZFZhbHVlcztcbiAgICB9KTtcblxuICAgIHRoaXMuYXBpLmdyaWQuc2V0Um93RGF0YShjb252ZXJ0ZWREYXRhKTtcbiAgfVxufVxuIl19
|