@aneoconsultingfr/armonik.api.angular
Version:
gRPC API to interact with ArmoniK built for Angular
375 lines • 51.9 kB
JavaScript
/* tslint:disable */
/* eslint-disable */
// @ts-nocheck
//
// THIS IS A GENERATED FILE
// DO NOT MODIFY IT! YOUR CHANGES WILL BE LOST
import { Inject, Injectable, Optional } from '@angular/core';
import { GrpcCallType, GrpcMetadata } from '@ngx-grpc/common';
import { GRPC_CLIENT_FACTORY, takeMessages, throwStatusErrors } from '@ngx-grpc/core';
import * as armonikApiGrpcV1007 from './objects.pb';
import * as armonikApiGrpcV1Results008 from './results-common.pb';
import { GRPC_RESULTS_CLIENT_SETTINGS } from './results-service.pbconf';
import * as i0 from "@angular/core";
import * as i1 from "@ngx-grpc/core";
/**
* Service client implementation for armonik.api.grpc.v1.results.Results
*/
export class ResultsClient {
constructor(settings, clientFactory, handler) {
this.handler = handler;
/**
* Raw RPC implementation for each service client method.
* The raw methods provide more control on the incoming data and events. E.g. they can be useful to read status `OK` metadata.
* Attention: these methods do not throw errors when non-zero status codes are received.
*/
this.$raw = {
/**
* Unary call: /armonik.api.grpc.v1.results.Results/ListResults
*
* @param requestMessage Request message
* @param requestMetadata Request metadata
* @returns Observable<GrpcEvent<armonikApiGrpcV1Results008.ListResultsResponse>>
*/
listResults: (requestData, requestMetadata = new GrpcMetadata()) => {
return this.handler.handle({
type: GrpcCallType.unary,
client: this.client,
path: '/armonik.api.grpc.v1.results.Results/ListResults',
requestData,
requestMetadata,
requestClass: armonikApiGrpcV1Results008.ListResultsRequest,
responseClass: armonikApiGrpcV1Results008.ListResultsResponse
});
},
/**
* Unary call: /armonik.api.grpc.v1.results.Results/GetResult
*
* @param requestMessage Request message
* @param requestMetadata Request metadata
* @returns Observable<GrpcEvent<armonikApiGrpcV1Results008.GetResultResponse>>
*/
getResult: (requestData, requestMetadata = new GrpcMetadata()) => {
return this.handler.handle({
type: GrpcCallType.unary,
client: this.client,
path: '/armonik.api.grpc.v1.results.Results/GetResult',
requestData,
requestMetadata,
requestClass: armonikApiGrpcV1Results008.GetResultRequest,
responseClass: armonikApiGrpcV1Results008.GetResultResponse
});
},
/**
* Unary call: /armonik.api.grpc.v1.results.Results/GetOwnerTaskId
*
* @param requestMessage Request message
* @param requestMetadata Request metadata
* @returns Observable<GrpcEvent<armonikApiGrpcV1Results008.GetOwnerTaskIdResponse>>
*/
getOwnerTaskId: (requestData, requestMetadata = new GrpcMetadata()) => {
return this.handler.handle({
type: GrpcCallType.unary,
client: this.client,
path: '/armonik.api.grpc.v1.results.Results/GetOwnerTaskId',
requestData,
requestMetadata,
requestClass: armonikApiGrpcV1Results008.GetOwnerTaskIdRequest,
responseClass: armonikApiGrpcV1Results008.GetOwnerTaskIdResponse
});
},
/**
* Unary call: /armonik.api.grpc.v1.results.Results/CreateResultsMetaData
*
* @param requestMessage Request message
* @param requestMetadata Request metadata
* @returns Observable<GrpcEvent<armonikApiGrpcV1Results008.CreateResultsMetaDataResponse>>
*/
createResultsMetaData: (requestData, requestMetadata = new GrpcMetadata()) => {
return this.handler.handle({
type: GrpcCallType.unary,
client: this.client,
path: '/armonik.api.grpc.v1.results.Results/CreateResultsMetaData',
requestData,
requestMetadata,
requestClass: armonikApiGrpcV1Results008.CreateResultsMetaDataRequest,
responseClass: armonikApiGrpcV1Results008.CreateResultsMetaDataResponse
});
},
/**
* Unary call: /armonik.api.grpc.v1.results.Results/CreateResults
*
* @param requestMessage Request message
* @param requestMetadata Request metadata
* @returns Observable<GrpcEvent<armonikApiGrpcV1Results008.CreateResultsResponse>>
*/
createResults: (requestData, requestMetadata = new GrpcMetadata()) => {
return this.handler.handle({
type: GrpcCallType.unary,
client: this.client,
path: '/armonik.api.grpc.v1.results.Results/CreateResults',
requestData,
requestMetadata,
requestClass: armonikApiGrpcV1Results008.CreateResultsRequest,
responseClass: armonikApiGrpcV1Results008.CreateResultsResponse
});
},
/**
* Client streaming: /armonik.api.grpc.v1.results.Results/UploadResultData
*
* @param requestMessage Request message
* @param requestMetadata Request metadata
* @returns Observable<GrpcEvent<armonikApiGrpcV1Results008.UploadResultDataResponse>>
*/
uploadResultData: (requestData, requestMetadata = new GrpcMetadata()) => {
return this.handler.handle({
type: GrpcCallType.clientStream,
client: this.client,
path: '/armonik.api.grpc.v1.results.Results/UploadResultData',
requestData,
requestMetadata,
requestClass: armonikApiGrpcV1Results008.UploadResultDataRequest,
responseClass: armonikApiGrpcV1Results008.UploadResultDataResponse
});
},
/**
* Server streaming: /armonik.api.grpc.v1.results.Results/DownloadResultData
*
* @param requestMessage Request message
* @param requestMetadata Request metadata
* @returns Observable<GrpcEvent<armonikApiGrpcV1Results008.DownloadResultDataResponse>>
*/
downloadResultData: (requestData, requestMetadata = new GrpcMetadata()) => {
return this.handler.handle({
type: GrpcCallType.serverStream,
client: this.client,
path: '/armonik.api.grpc.v1.results.Results/DownloadResultData',
requestData,
requestMetadata,
requestClass: armonikApiGrpcV1Results008.DownloadResultDataRequest,
responseClass: armonikApiGrpcV1Results008.DownloadResultDataResponse
});
},
/**
* Unary call: /armonik.api.grpc.v1.results.Results/DeleteResultsData
*
* @param requestMessage Request message
* @param requestMetadata Request metadata
* @returns Observable<GrpcEvent<armonikApiGrpcV1Results008.DeleteResultsDataResponse>>
*/
deleteResultsData: (requestData, requestMetadata = new GrpcMetadata()) => {
return this.handler.handle({
type: GrpcCallType.unary,
client: this.client,
path: '/armonik.api.grpc.v1.results.Results/DeleteResultsData',
requestData,
requestMetadata,
requestClass: armonikApiGrpcV1Results008.DeleteResultsDataRequest,
responseClass: armonikApiGrpcV1Results008.DeleteResultsDataResponse
});
},
/**
* Unary call: /armonik.api.grpc.v1.results.Results/ImportResultsData
*
* @param requestMessage Request message
* @param requestMetadata Request metadata
* @returns Observable<GrpcEvent<armonikApiGrpcV1Results008.ImportResultsDataResponse>>
*/
importResultsData: (requestData, requestMetadata = new GrpcMetadata()) => {
return this.handler.handle({
type: GrpcCallType.unary,
client: this.client,
path: '/armonik.api.grpc.v1.results.Results/ImportResultsData',
requestData,
requestMetadata,
requestClass: armonikApiGrpcV1Results008.ImportResultsDataRequest,
responseClass: armonikApiGrpcV1Results008.ImportResultsDataResponse
});
},
/**
* Unary call: /armonik.api.grpc.v1.results.Results/GetServiceConfiguration
*
* @param requestMessage Request message
* @param requestMetadata Request metadata
* @returns Observable<GrpcEvent<armonikApiGrpcV1Results008.ResultsServiceConfigurationResponse>>
*/
getServiceConfiguration: (requestData, requestMetadata = new GrpcMetadata()) => {
return this.handler.handle({
type: GrpcCallType.unary,
client: this.client,
path: '/armonik.api.grpc.v1.results.Results/GetServiceConfiguration',
requestData,
requestMetadata,
requestClass: armonikApiGrpcV1007.Empty,
responseClass: armonikApiGrpcV1Results008.ResultsServiceConfigurationResponse
});
},
/**
* Bidirectional streaming: /armonik.api.grpc.v1.results.Results/WatchResults
*
* @param requestMessage Request message
* @param requestMetadata Request metadata
* @returns Observable<GrpcEvent<armonikApiGrpcV1Results008.WatchResultResponse>>
*/
watchResults: (requestData, requestMetadata = new GrpcMetadata()) => {
return this.handler.handle({
type: GrpcCallType.bidiStream,
client: this.client,
path: '/armonik.api.grpc.v1.results.Results/WatchResults',
requestData,
requestMetadata,
requestClass: armonikApiGrpcV1Results008.WatchResultRequest,
responseClass: armonikApiGrpcV1Results008.WatchResultResponse
});
}
};
this.client = clientFactory.createClient('armonik.api.grpc.v1.results.Results', settings);
}
/**
* Unary call @/armonik.api.grpc.v1.results.Results/ListResults
*
* @param requestMessage Request message
* @param requestMetadata Request metadata
* @returns Observable<armonikApiGrpcV1Results008.ListResultsResponse>
*/
listResults(requestData, requestMetadata = new GrpcMetadata()) {
return this.$raw
.listResults(requestData, requestMetadata)
.pipe(throwStatusErrors(), takeMessages());
}
/**
* Unary call @/armonik.api.grpc.v1.results.Results/GetResult
*
* @param requestMessage Request message
* @param requestMetadata Request metadata
* @returns Observable<armonikApiGrpcV1Results008.GetResultResponse>
*/
getResult(requestData, requestMetadata = new GrpcMetadata()) {
return this.$raw
.getResult(requestData, requestMetadata)
.pipe(throwStatusErrors(), takeMessages());
}
/**
* Unary call @/armonik.api.grpc.v1.results.Results/GetOwnerTaskId
*
* @param requestMessage Request message
* @param requestMetadata Request metadata
* @returns Observable<armonikApiGrpcV1Results008.GetOwnerTaskIdResponse>
*/
getOwnerTaskId(requestData, requestMetadata = new GrpcMetadata()) {
return this.$raw
.getOwnerTaskId(requestData, requestMetadata)
.pipe(throwStatusErrors(), takeMessages());
}
/**
* Unary call @/armonik.api.grpc.v1.results.Results/CreateResultsMetaData
*
* @param requestMessage Request message
* @param requestMetadata Request metadata
* @returns Observable<armonikApiGrpcV1Results008.CreateResultsMetaDataResponse>
*/
createResultsMetaData(requestData, requestMetadata = new GrpcMetadata()) {
return this.$raw
.createResultsMetaData(requestData, requestMetadata)
.pipe(throwStatusErrors(), takeMessages());
}
/**
* Unary call @/armonik.api.grpc.v1.results.Results/CreateResults
*
* @param requestMessage Request message
* @param requestMetadata Request metadata
* @returns Observable<armonikApiGrpcV1Results008.CreateResultsResponse>
*/
createResults(requestData, requestMetadata = new GrpcMetadata()) {
return this.$raw
.createResults(requestData, requestMetadata)
.pipe(throwStatusErrors(), takeMessages());
}
/**
* Client streaming @/armonik.api.grpc.v1.results.Results/UploadResultData
*
* @param requestMessage Request message
* @param requestMetadata Request metadata
* @returns Observable<armonikApiGrpcV1Results008.UploadResultDataResponse>
*/
uploadResultData(requestData, requestMetadata = new GrpcMetadata()) {
return this.$raw
.uploadResultData(requestData, requestMetadata)
.pipe(throwStatusErrors(), takeMessages());
}
/**
* Server streaming @/armonik.api.grpc.v1.results.Results/DownloadResultData
*
* @param requestMessage Request message
* @param requestMetadata Request metadata
* @returns Observable<armonikApiGrpcV1Results008.DownloadResultDataResponse>
*/
downloadResultData(requestData, requestMetadata = new GrpcMetadata()) {
return this.$raw
.downloadResultData(requestData, requestMetadata)
.pipe(throwStatusErrors(), takeMessages());
}
/**
* Unary call @/armonik.api.grpc.v1.results.Results/DeleteResultsData
*
* @param requestMessage Request message
* @param requestMetadata Request metadata
* @returns Observable<armonikApiGrpcV1Results008.DeleteResultsDataResponse>
*/
deleteResultsData(requestData, requestMetadata = new GrpcMetadata()) {
return this.$raw
.deleteResultsData(requestData, requestMetadata)
.pipe(throwStatusErrors(), takeMessages());
}
/**
* Unary call @/armonik.api.grpc.v1.results.Results/ImportResultsData
*
* @param requestMessage Request message
* @param requestMetadata Request metadata
* @returns Observable<armonikApiGrpcV1Results008.ImportResultsDataResponse>
*/
importResultsData(requestData, requestMetadata = new GrpcMetadata()) {
return this.$raw
.importResultsData(requestData, requestMetadata)
.pipe(throwStatusErrors(), takeMessages());
}
/**
* Unary call @/armonik.api.grpc.v1.results.Results/GetServiceConfiguration
*
* @param requestMessage Request message
* @param requestMetadata Request metadata
* @returns Observable<armonikApiGrpcV1Results008.ResultsServiceConfigurationResponse>
*/
getServiceConfiguration(requestData, requestMetadata = new GrpcMetadata()) {
return this.$raw
.getServiceConfiguration(requestData, requestMetadata)
.pipe(throwStatusErrors(), takeMessages());
}
/**
* Bidirectional streaming @/armonik.api.grpc.v1.results.Results/WatchResults
*
* @param requestMessage Request message
* @param requestMetadata Request metadata
* @returns Observable<armonikApiGrpcV1Results008.WatchResultResponse>
*/
watchResults(requestData, requestMetadata = new GrpcMetadata()) {
return this.$raw
.watchResults(requestData, requestMetadata)
.pipe(throwStatusErrors(), takeMessages());
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: ResultsClient, deps: [{ token: GRPC_RESULTS_CLIENT_SETTINGS, optional: true }, { token: GRPC_CLIENT_FACTORY }, { token: i1.GrpcHandler }], target: i0.ɵɵFactoryTarget.Injectable }); }
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: ResultsClient, providedIn: 'any' }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: ResultsClient, decorators: [{
type: Injectable,
args: [{ providedIn: 'any' }]
}], ctorParameters: () => [{ type: undefined, decorators: [{
type: Optional
}, {
type: Inject,
args: [GRPC_RESULTS_CLIENT_SETTINGS]
}] }, { type: undefined, decorators: [{
type: Inject,
args: [GRPC_CLIENT_FACTORY]
}] }, { type: i1.GrpcHandler }] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdWx0cy1zZXJ2aWNlLnBic2MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmVvY29uc3VsdGluZ2ZyL2FybW9uaWsuYXBpLmFuZ3VsYXIvc3JjL2xpYi9nZW5lcmF0ZWQvcmVzdWx0cy1zZXJ2aWNlLnBic2MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsb0JBQW9CO0FBQ3BCLG9CQUFvQjtBQUNwQixjQUFjO0FBQ2QsRUFBRTtBQUNGLDJCQUEyQjtBQUMzQiw4Q0FBOEM7QUFDOUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFDTCxZQUFZLEVBSVosWUFBWSxFQUNiLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUNMLG1CQUFtQixFQUVuQixZQUFZLEVBQ1osaUJBQWlCLEVBQ2xCLE1BQU0sZ0JBQWdCLENBQUM7QUFVeEIsT0FBTyxLQUFLLG1CQUFtQixNQUFNLGNBQWMsQ0FBQztBQUNwRCxPQUFPLEtBQUssMEJBQTBCLE1BQU0scUJBQXFCLENBQUM7QUFDbEUsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sMEJBQTBCLENBQUM7OztBQUN4RTs7R0FFRztBQUVILE1BQU0sT0FBTyxhQUFhO0lBeVF4QixZQUNvRCxRQUFhLEVBQ2xDLGFBQXFDLEVBQzFELE9BQW9CO1FBQXBCLFlBQU8sR0FBUCxPQUFPLENBQWE7UUF6UTlCOzs7O1dBSUc7UUFDSCxTQUFJLEdBQUc7WUFDTDs7Ozs7O2VBTUc7WUFDSCxXQUFXLEVBQUUsQ0FDWCxXQUEwRCxFQUMxRCxlQUFlLEdBQUcsSUFBSSxZQUFZLEVBQUUsRUFHcEMsRUFBRTtnQkFDRixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO29CQUN6QixJQUFJLEVBQUUsWUFBWSxDQUFDLEtBQUs7b0JBQ3hCLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFB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LEVBQUU7UUFJcEMsT0FBTyxJQUFJLENBQUMsSUFBSTthQUNiLHVCQUF1QixDQUFDLFdBQVcsRUFBRSxlQUFlLENBQUM7YUFDckQsSUFBSSxDQUFDLGlCQUFpQixFQUFFLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsWUFBWSxDQUNWLFdBQXNFLEVBQ3RFLGVBQWUsR0FBRyxJQUFJLFlBQVksRUFBRTtRQUVwQyxPQUFPLElBQUksQ0FBQyxJQUFJO2FBQ2IsWUFBWSxDQUFDLFdBQVcsRUFBRSxlQUFlLENBQUM7YUFDMUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQztJQUMvQyxDQUFDOzhHQXBjVSxhQUFhLGtCQTBRRiw0QkFBNEIsNkJBQ3hDLG1CQUFtQjtrSEEzUWxCLGFBQWEsY0FEQSxLQUFLOzsyRkFDbEIsYUFBYTtrQkFEekIsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUU7OzBCQTJRNUIsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyw0QkFBNEI7OzBCQUMvQyxNQUFNOzJCQUFDLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbIi8qIHRzbGludDpkaXNhYmxlICovXG4vKiBlc2xpbnQtZGlzYWJsZSAqL1xuLy8gQHRzLW5vY2hlY2tcbi8vXG4vLyBUSElTIElTIEEgR0VORVJBVEVEIEZJTEVcbi8vIERPIE5PVCBNT0RJRlkgSVQhIFlPVVIgQ0hBTkdFUyBXSUxMIEJFIExPU1RcbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEdycGNDYWxsVHlwZSxcbiAgR3JwY0NsaWVudCxcbiAgR3JwY0NsaWVudEZhY3RvcnksXG4gIEdycGNFdmVudCxcbiAgR3JwY01ldGFkYXRhXG59IGZyb20gJ0BuZ3gtZ3JwYy9jb21tb24nO1xuaW1wb3J0IHtcbiAgR1JQQ19DTElFTlRfRkFDVE9SWSxcbiAgR3JwY0hhbmRsZXIsXG4gIHRha2VNZXNzYWdlcyxcbiAgdGhyb3dTdGF0dXNFcnJvcnNcbn0gZnJvbSAnQG5neC1ncnBjL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0ICogYXMgdGhpc1Byb3RvIGZyb20gJy4vcmVzdWx0cy1zZXJ2aWNlLnBiJztcbmltcG9ydCAqIGFzIGdvb2dsZVByb3RvYnVmMDAwIGZyb20gJ0BuZ3gtZ3JwYy93ZWxsLWtub3duLXR5cGVzJztcbmltcG9ydCAqIGFzIGFybW9uaWtBcGlHcnBjVjFUYXNrX3N0YXR1czAwMSBmcm9tICcuL3Rhc2stc3RhdHVzLnBiJztcbmltcG9ydCAqIGFzIGdvb2dsZVByb3RvYnVmMDAyIGZyb20gJ0BuZ3gtZ3JwYy93ZWxsLWtub3duLXR5cGVzJztcbmltcG9ydCAqIGFzIGFybW9uaWtBcGlHcnBjVjFSZXN1bHRfc3RhdHVzMDAzIGZyb20gJy4vcmVzdWx0LXN0YXR1cy5wYic7XG5pbXBvcnQgKiBhcyBhcm1vbmlrQXBpR3JwY1YxUmVzdWx0czAwNCBmcm9tICcuL3Jlc3VsdHMtZmllbGRzLnBiJztcbmltcG9ydCAqIGFzIGFybW9uaWtBcGlHcnBjVjFSZXN1bHRzMDA1IGZyb20gJy4vcmVzdWx0cy1maWx0ZXJzLnBiJztcbmltcG9ydCAqIGFzIGFybW9uaWtBcGlHcnBjVjFTb3J0X2RpcmVjdGlvbjAwNiBmcm9tICcuL3NvcnQtZGlyZWN0aW9uLnBiJztcbmltcG9ydCAqIGFzIGFybW9uaWtBcGlHcnBjVjEwMDcgZnJvbSAnLi9vYmplY3RzLnBiJztcbmltcG9ydCAqIGFzIGFybW9uaWtBcGlHcnBjVjFSZXN1bHRzMDA4IGZyb20gJy4vcmVzdWx0cy1jb21tb24ucGInO1xuaW1wb3J0IHsgR1JQQ19SRVNVTFRTX0NMSUVOVF9TRVRUSU5HUyB9IGZyb20gJy4vcmVzdWx0cy1zZXJ2aWNlLnBiY29uZic7XG4vKipcbiAqIFNlcnZpY2UgY2xpZW50IGltcGxlbWVudGF0aW9uIGZvciBhcm1vbmlrLmFwaS5ncnBjLnYxLnJlc3VsdHMuUmVzdWx0c1xuICovXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdhbnknIH0pXG5leHBvcnQgY2xhc3MgUmVzdWx0c0NsaWVudCB7XG4gIHByaXZhdGUgY2xpZW50OiBHcnBjQ2xpZW50PGFueT47XG5cbiAgLyoqXG4gICAqIFJhdyBSUEMgaW1wbGVtZW50YXRpb24gZm9yIGVhY2ggc2VydmljZSBjbGllbnQgbWV0aG9kLlxuICAgKiBUaGUgcmF3IG1ldGhvZHMgcHJvdmlkZSBtb3JlIGNvbnRyb2wgb24gdGhlIGluY29taW5nIGRhdGEgYW5kIGV2ZW50cy4gRS5nLiB0aGV5IGNhbiBiZSB1c2VmdWwgdG8gcmVhZCBzdGF0dXMgYE9LYCBtZXRhZGF0YS5cbiAgICogQXR0ZW50aW9uOiB0aGVzZSBtZXRob2RzIGRvIG5vdCB0aHJvdyBlcnJvcnMgd2hlbiBub24temVybyBzdGF0dXMgY29kZXMgYXJlIHJlY2VpdmVkLlxuICAgKi9cbiAgJHJhdyA9IHtcbiAgICAvKipcbiAgICAgKiBVbmFyeSBjYWxsOiAvYXJtb25pay5hcGkuZ3JwYy52MS5yZXN1bHRzLlJlc3VsdHMvTGlzdFJlc3VsdHNcbiAgICAgKlxuICAgICAqIEBwYXJhbSByZXF1ZXN0TWVzc2FnZSBSZXF1ZXN0IG1lc3NhZ2VcbiAgICAgKiBAcGFyYW0gcmVxdWVzdE1ldGFkYXRhIFJlcXVlc3QgbWV0YWRhdGFcbiAgICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlPEdycGNFdmVudDxhcm1vbmlrQXBpR3JwY1YxUmVzdWx0czAwOC5MaXN0UmVzdWx0c1Jlc3BvbnNlPj5cbiAgICAgKi9cbiAgICBsaXN0UmVzdWx0czogKFxuICAgICAgcmVxdWVzdERhdGE6IGFybW9uaWtBcGlHcnBjVjFSZXN1bHRzMDA4Lkxpc3RSZXN1bHRzUmVxdWVzdCxcbiAgICAgIHJlcXVlc3RNZXRhZGF0YSA9IG5ldyBHcnBjTWV0YWRhdGEoKVxuICAgICk6IE9ic2VydmFibGU8XG4gICAgICBHcnBjRXZlbnQ8YXJtb25pa0FwaUdycGNWMVJlc3VsdHMwMDguTGlzdFJlc3VsdHNSZXNwb25zZT5cbiAgICA+ID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZXIuaGFuZGxlKHtcbiAgICAgICAgdHlwZTogR3JwY0NhbGxUeXBlLnVuYXJ5LFxuICAgICAgICBjbGllbnQ6IHRoaXMuY2xpZW50LFxuICAgICAgICBwYXRoOiAnL2FybW9uaWsuYXBpLmdycGMudjEucmVzdWx0cy5SZXN1bHRzL0xpc3RSZXN1bHRzJyxcbiAgICAgICAgcmVxdWVzdERhdGEsXG4gICAgICAgIHJlcXVlc3RNZXRhZGF0YSxcbiAgICAgICAgcmVxdWVzdENsYXNzOiBhcm1vbmlrQXBpR3JwY1YxUmVzdWx0czAwOC5MaXN0UmVzdWx0c1JlcXVlc3QsXG4gICAgICAgIHJlc3BvbnNlQ2xhc3M6IGFybW9uaWtBcGlHcnBjVjFSZXN1bHRzMDA4Lkxpc3RSZXN1bHRzUmVzcG9uc2VcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgLyoqXG4gICAgICogVW5hcnkgY2FsbDogL2FybW9uaWsuYXBpLmdycGMudjEucmVzdWx0cy5SZXN1bHRzL0dldFJlc3VsdFxuICAgICAqXG4gICAgICogQHBhcmFtIHJlcXVlc3RNZXNzYWdlIFJlcXVlc3QgbWVzc2FnZVxuICAgICAqIEBwYXJhbSByZXF1ZXN0TWV0YWRhdGEgUmVxdWVzdCBtZXRhZGF0YVxuICAgICAqIEByZXR1cm5zIE9ic2VydmFibGU8R3JwY0V2ZW50PGFybW9uaWtBcGlHcnBjVjFSZXN1bHRzMDA4LkdldFJlc3VsdFJlc3BvbnNlPj5cbiAgICAgKi9cbiAgICBnZXRSZXN1bHQ6IChcbiAgICAgIHJlcXVlc3REYXRhOiBhcm1vbmlrQXBpR3JwY1YxUmVzdWx0czAwOC5HZXRSZXN1bHRSZXF1ZXN0LFxuICAgICAgcmVxdWVzdE1ldGFkYXRhID0gbmV3IEdycGNNZXRhZGF0YSgpXG4gICAgKTogT2JzZXJ2YWJsZTxHcnBjRXZlbnQ8YXJtb25pa0FwaUdycGNWMVJlc3VsdHMwMDguR2V0UmVzdWx0UmVzcG9uc2U+PiA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVyLmhhbmRsZSh7XG4gICAgICAgIHR5cGU6IEdycGNDYWxsVHlwZS51bmFyeSxcbiAgICAgICAgY2xpZW50OiB0aGlzLmNsaWVudCxcbiAgICAgICAgcGF0aDogJy9hcm1vbmlrLmFwaS5ncnBjLnYxLnJlc3VsdHMuUmVzdWx0cy9HZXRSZXN1bHQnLFxuICAgICAgICByZXF1ZXN0RGF0YSxcbiAgICAgICAgcmVxdWVzdE1ldGFkYXRhLFxuICAgICAgICByZXF1ZXN0Q2xhc3M6IGFybW9uaWtBcGlHcnBjVjFSZXN1bHRzMDA4LkdldFJlc3VsdFJlcXVlc3QsXG4gICAgICAgIHJlc3BvbnNlQ2xhc3M6IGFybW9uaWtBcGlHcnBjVjFSZXN1bHRzMDA4LkdldFJlc3VsdFJlc3BvbnNlXG4gICAgICB9KTtcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFVuYXJ5IGNhbGw6IC9hcm1vbmlrLmFwaS5ncnBjLnYxLnJlc3VsdHMuUmVzdWx0cy9HZXRPd25lclRhc2tJZFxuICAgICAqXG4gICAgICogQHBhcmFtIHJlcXVlc3RNZXNzYWdlIFJlcXVlc3QgbWVzc2FnZVxuICAgICAqIEBwYXJhbSByZXF1ZXN0TWV0YWRhdGEgUmVxdWVzdCBtZXRhZGF0YVxuICAgICAqIEByZXR1cm5zIE9ic2VydmFibGU8R3JwY0V2ZW50PGFybW9uaWtBcGlHcnBjVjFSZXN1bHRzMDA4LkdldE93bmVyVGFza0lkUmVzcG9uc2U+PlxuICAgICAqL1xuICAgIGdldE93bmVyVGFza0lkOiAoXG4gICAgICByZXF1ZXN0RGF0YTogYXJtb25pa0FwaUdycGNWMVJlc3VsdHMwMDguR2V0T3duZXJUYXNrSWRSZXF1ZXN0LFxuICAgICAgcmVxdWVzdE1ldGFkYXRhID0gbmV3IEdycGNNZXRhZGF0YSgpXG4gICAgKTogT2JzZXJ2YWJsZTxcbiAgICAgIEdycGNFdmVudDxhcm1vbmlrQXBpR3JwY1YxUmVzdWx0czAwOC5HZXRPd25lclRhc2tJZFJlc3BvbnNlPlxuICAgID4gPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlci5oYW5kbGUoe1xuICAgICAgICB0eXBlOiBHcnBjQ2FsbFR5cGUudW5hcnksXG4gICAgICAgIGNsaWVudDogdGhpcy5jbGllbnQsXG4gICAgICAgIHBhdGg6ICcvYXJtb25pay5hcGkuZ3JwYy52MS5yZXN1bHRzLlJlc3VsdHMvR2V0T3duZXJUYXNrSWQnLFxuICAgICAgICByZXF1ZXN0RGF0YSxcbiAgICAgICAgcmVxdWVzdE1ldGFkYXRhLFxuICAgICAgICByZXF1ZXN0Q2xhc3M6IGFybW9uaWtBcGlHcnBjVjFSZXN1bHRzMDA4LkdldE93bmVyVGFza0lkUmVxdWVzdCxcbiAgICAgICAgcmVzcG9uc2VDbGFzczogYXJtb25pa0FwaUdycGNWMVJlc3VsdHMwMDguR2V0T3duZXJUYXNrSWRSZXNwb25zZVxuICAgICAgfSk7XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBVbmFyeSBjYWxsOiAvYXJtb25pay5hcGkuZ3JwYy52MS5yZXN1bHRzLlJlc3VsdHMvQ3JlYXRlUmVzdWx0c01ldGFEYXRhXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmVxdWVzdE1lc3NhZ2UgUmVxdWVzdCBtZXNzYWdlXG4gICAgICogQHBhcmFtIHJlcXVlc3RNZXRhZGF0YSBSZXF1ZXN0IG1ldGFkYXRhXG4gICAgICogQHJldHVybnMgT2JzZXJ2YWJsZTxHcnBjRXZlbnQ8YXJtb25pa0FwaUdycGNWMVJlc3VsdHMwMDguQ3JlYXRlUmVzdWx0c01ldGFEYXRhUmVzcG9uc2U+PlxuICAgICAqL1xuICAgIGNyZWF0ZVJlc3VsdHNNZXRhRGF0YTogKFxuICAgICAgcmVxdWVzdERhdGE6IGFybW9uaWtBcGlHcnBjVjFSZXN1bHRzMDA4LkNyZWF0ZVJlc3VsdHNNZXRhRGF0YVJlcXVlc3QsXG4gICAgICByZXF1ZXN0TWV0YWRhdGEgPSBuZXcgR3JwY01ldGFkYXRhKClcbiAgICApOiBPYnNlcnZhYmxlPFxuICAgICAgR3JwY0V2ZW50PGFybW9uaWtBcGlHcnBjVjFSZXN1bHRzMDA4LkNyZWF0ZVJlc3VsdHNNZXRhRGF0YVJlc3BvbnNlPlxuICAgID4gPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlci5oYW5kbGUoe1xuICAgICAgICB0eXBlOiBHcnBjQ2FsbFR5cGUudW5hcnksXG4gICAgICAgIGNsaWVudDogdGhpcy5jbGllbnQsXG4gICAgICAgIHBhdGg6ICcvYXJtb25pay5hcGkuZ3JwYy52MS5yZXN1bHRzLlJlc3VsdHMvQ3JlYXRlUmVzdWx0c01ldGFEYXRhJyxcbiAgICAgICAgcmVxdWVzdERhdGEsXG4gICAgICAgIHJlcXVlc3RNZXRhZGF0YSxcbiAgICAgICAgcmVxdWVzdENsYXNzOiBhcm1vbmlrQXBpR3JwY1YxUmVzdWx0czAwOC5DcmVhdGVSZXN1bHRzTWV0YURhdGFSZXF1ZXN0LFxuICAgICAgICByZXNwb25zZUNsYXNzOiBhcm1vbmlrQXBpR3JwY1YxUmVzdWx0czAwOC5DcmVhdGVSZXN1bHRzTWV0YURhdGFSZXNwb25zZVxuICAgICAgfSk7XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBVbmFyeSBjYWxsOiAvYXJtb25pay5hcGkuZ3JwYy52MS5yZXN1bHRzLlJlc3VsdHMvQ3JlYXRlUmVzdWx0c1xuICAgICAqXG4gICAgICogQHBhcmFtIHJlcXVlc3RNZXNzYWdlIFJlcXVlc3QgbWVzc2FnZVxuICAgICAqIEBwYXJhbSByZXF1ZXN0TWV0YWRhdGEgUmVxdWVzdCBtZXRhZGF0YVxuICAgICAqIEByZXR1cm5zIE9ic2VydmFibGU8R3JwY0V2ZW50PGFybW9uaWtBcGlHcnBjVjFSZXN1bHRzMDA4LkNyZWF0ZVJlc3VsdHNSZXNwb25zZT4+XG4gICAgICovXG4gICAgY3JlYXRlUmVzdWx0czogKFxuICAgICAgcmVxdWVzdERhdGE6IGFybW9uaWtBcGlHcnBjVjFSZXN1bHRzMDA4LkNyZWF0ZVJlc3VsdHNSZXF1ZXN0LFxuICAgICAgcmVxdWVzdE1ldGFkYXRhID0gbmV3IEdycGNNZXRhZGF0YSgpXG4gICAgKTogT2JzZXJ2YWJsZTxcbiAgICAgIEdycGNFdmVudDxhcm1vbmlrQXBpR3JwY1YxUmVzdWx0czAwOC5DcmVhdGVSZXN1bHRzUmVzcG9uc2U+XG4gICAgPiA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVyLmhhbmRsZSh7XG4gICAgICAgIHR5cGU6IEdycGNDYWxsVHlwZS51bmFyeSxcbiAgICAgICAgY2xpZW50OiB0aGlzLmNsaWVudCxcbiAgICAgICAgcGF0aDogJy9hcm1vbmlrLmFwaS5ncnBjLnYxLnJlc3VsdHMuUmVzdWx0cy9DcmVhdGVSZXN1bHRzJyxcbiAgICAgICAgcmVxdWVzdERhdGEsXG4gICAgICAgIHJlcXVlc3RNZXRhZGF0YSxcbiAgICAgICAgcmVxdWVzdENsYXNzOiBhcm1vbmlrQXBpR3JwY1YxUmVzdWx0czAwOC5DcmVhdGVSZXN1bHRzUmVxdWVzdCxcbiAgICAgICAgcmVzcG9uc2VDbGFzczogYXJtb25pa0FwaUdycGNWMVJlc3VsdHMwMDguQ3JlYXRlUmVzdWx0c1Jlc3BvbnNlXG4gICAgICB9KTtcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIENsaWVudCBzdHJlYW1pbmc6IC9hcm1vbmlrLmFwaS5ncnBjLnYxLnJlc3VsdHMuUmVzdWx0cy9VcGxvYWRSZXN1bHREYXRhXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmVxdWVzdE1lc3NhZ2UgUmVxdWVzdCBtZXNzYWdlXG4gICAgICogQHBhcmFtIHJlcXVlc3RNZXRhZGF0YSBSZXF1ZXN0IG1ldGFkYXRhXG4gICAgICogQHJldHVybnMgT2JzZXJ2YWJsZTxHcnBjRXZlbnQ8YXJtb25pa0FwaUdycGNWMVJlc3VsdHMwMDguVXBsb2FkUmVzdWx0RGF0YVJlc3BvbnNlPj5cbiAgICAgKi9cbiAgICB1cGxvYWRSZXN1bHREYXRhOiAoXG4gICAgICByZXF1ZXN0RGF0YTogT2JzZXJ2YWJsZTxcbiAgICAgICAgYXJtb25pa0FwaUdycGNWMVJlc3VsdHMwMDguVXBsb2FkUmVzdWx0RGF0YVJlcXVlc3RcbiAgICAgID4sXG4gICAgICByZXF1ZXN0TWV0YWRhdGEgPSBuZXcgR3JwY01ldGFkYXRhKClcbiAgICApOiBPYnNlcnZhYmxlPFxuICAgICAgR3JwY0V2ZW50PGFybW9uaWtBcGlHcnBjVjFSZXN1bHRzMDA4LlVwbG9hZFJlc3VsdERhdGFSZXNwb25zZT5cbiAgICA+ID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZXIuaGFuZGxlKHtcbiAgICAgICAgdHlwZTogR3JwY0NhbGxUeXBlLmNsaWVudFN0cmVhbSxcbiAgICAgICAgY2xpZW50OiB0aGlzLmNsaWVudCxcbiAgICAgICAgcGF0aDogJy9hcm1vbmlrLmFwaS5ncnBjLnYxLnJlc3VsdHMuUmVzdWx0cy9VcGxvYWRSZXN1bHREYXRhJyxcbiAgICAgICAgcmVxdWVzdERhdGEsXG4gICAgICAgIHJlcXVlc3RNZXRhZGF0YSxcbiAgICAgICAgcmVxdWVzdENsYXNzOiBhcm1vbmlrQXBpR3JwY1YxUmVzdWx0czAwOC5VcGxvYWRSZXN1bHREYXRhUmVxdWVzdCxcbiAgICAgICAgcmVzcG9uc2VDbGFzczogYXJtb25pa0FwaUdycGNWMVJlc3VsdHMwMDguVXBsb2FkUmVzdWx0RGF0YVJlc3BvbnNlXG4gICAgICB9KTtcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFNlcnZlciBzdHJlYW1pbmc6IC9hcm1vbmlrLmFwaS5ncnBjLnYxLnJlc3VsdHMuUmVzdWx0cy9Eb3dubG9hZFJlc3VsdERhdGFcbiAgICAgKlxuICAgICAqIEBwYXJhbSByZXF1ZXN0TWVzc2FnZSBSZXF1ZXN0IG1lc3NhZ2VcbiAgICAgKiBAcGFyYW0gcmVxdWVzdE1ldGFkYXRhIFJlcXVlc3QgbWV0YWRhdGFcbiAgICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlPEdycGNFdmVudDxhcm1vbmlrQXBpR3JwY1YxUmVzdWx0czAwOC5Eb3dubG9hZFJlc3VsdERhdGFSZXNwb25zZT4+XG4gICAgICovXG4gICAgZG93bmxvYWRSZXN1bHREYXRhOiAoXG4gICAgICByZXF1ZXN0RGF0YTogYXJtb25pa0FwaUdycGNWMVJlc3VsdHMwMDguRG93bmxvYWRSZXN1bHREYXRhUmVxdWVzdCxcbiAgICAgIHJlcXVlc3RNZXRhZGF0YSA9IG5ldyBHcnBjTWV0YWRhdGEoKVxuICAgICk6IE9ic2VydmFibGU8XG4gICAgICBHcnBjRXZlbnQ8YXJtb25pa0FwaUdycGNWMVJlc3VsdHMwMDguRG93bmxvYWRSZXN1bHREYXRhUmVzcG9uc2U+XG4gICAgPiA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVyLmhhbmRsZSh7XG4gICAgICAgIHR5cGU6IEdycGNDYWxsVHlwZS5zZXJ2ZXJTdHJlYW0sXG4gICAgICAgIGNsaWVudDogdGhpcy5jbGllbnQsXG4gICAgICAgIHBhdGg6ICcvYXJtb25pay5hcGkuZ3JwYy52MS5yZXN1bHRzLlJlc3VsdHMvRG93bmxvYWRSZXN1bHREYXRhJyxcbiAgICAgICAgcmVxdWVzdERhdGEsXG4gICAgICAgIHJlcXVlc3RNZXRhZGF0YSxcbiAgICAgICAgcmVxdWVzdENsYXNzOiBhcm1vbmlrQXBpR3JwY1YxUmVzdWx0czAwOC5Eb3dubG9hZFJlc3VsdERhdGFSZXF1ZXN0LFxuICAgICAgICByZXNwb25zZUNsYXNzOiBhcm1vbmlrQXBpR3JwY1YxUmVzdWx0czAwOC5Eb3dubG9hZFJlc3VsdERhdGFSZXNwb25zZVxuICAgICAgfSk7XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBVbmFyeSBjYWxsOiAvYXJtb25pay5hcGkuZ3JwYy52MS5yZXN1bHRzLlJlc3VsdHMvRGVsZXRlUmVzdWx0c0RhdGFcbiAgICAgKlxuICAgICAqIEBwYXJhbSByZXF1ZXN0TWVzc2FnZSBSZXF1ZXN0IG1lc3NhZ2VcbiAgICAgKiBAcGFyYW0gcmVxdWVzdE1ldGFkYXRhIFJlcXVlc3QgbWV0YWRhdGFcbiAgICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlPEdycGNFdmVudDxhcm1vbmlrQXBpR3JwY1YxUmVzdWx0czAwOC5EZWxldGVSZXN1bHRzRGF0YVJlc3BvbnNlPj5cbiAgICAgKi9cbiAgICBkZWxldGVSZXN1bHRzRGF0YTogKFxuICAgICAgcmVxdWVzdERhdGE6IGFybW9uaWtBcGlHcnBjVjFSZXN1bHRzMDA4LkRlbGV0ZVJlc3VsdHNEYXRhUmVxdWVzdCxcbiAgICAgIHJlcXVlc3RNZXRhZGF0YSA9IG5ldyBHcnBjTWV0YWRhdGEoKVxuICAgICk6IE9ic2VydmFibGU8XG4gICAgICBHcnBjRXZlbnQ8YXJtb25pa0FwaUdycGNWMVJlc3VsdHMwMDguRGVsZXRlUmVzdWx0c0RhdGFSZXNwb25zZT5cbiAgICA+ID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZXIuaGFuZGxlKHtcbiAgICAgICAgdHlwZTogR3JwY0NhbGxUeXBlLnVuYXJ5LFxuICAgICAgICBjbGllbnQ6IHRoaXMuY2xpZW50LFxuICAgICAgICBwYXRoOiAnL2FybW9uaWsuYXBpLmdycGMudjEucmVzdWx0cy5SZXN1bHRzL0RlbGV0ZVJlc3VsdHNEYXRhJyxcbiAgICAgICAgcmVxdWVzdERhdGEsXG4gICAgICAgIHJlcXVlc3RNZXRhZGF0YSxcbiAgICAgICAgcmVxdWVzdENsYXNzOiBhcm1vbmlrQXBpR3JwY1YxUmVzdWx0czAwOC5EZWxldGVSZXN1bHRzRGF0YVJlcXVlc3QsXG4gICAgICAgIHJlc3BvbnNlQ2xhc3M6IGFybW9uaWtBcGlHcnBjVjFSZXN1bHRzMDA4LkRlbGV0ZVJlc3VsdHNEYXRhUmVzcG9uc2VcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgLyoqXG4gICAgICogVW5hcnkgY2FsbDogL2FybW9uaWsuYXBpLmdycGMudjEucmVzdWx0cy5SZXN1bHRzL0ltcG9ydFJlc3VsdHNEYXRhXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmVxdWVzdE1lc3NhZ2UgUmVxdWVzdCBtZXNzYWdlXG4gICAgICogQHBhcmFtIHJlcXVlc3RNZXRhZGF0YSBSZXF1ZXN0IG1ldGFkYXRhXG4gICAgICogQHJldHVybnMgT2JzZXJ2YWJsZTxHcnBjRXZlbnQ8YXJtb25pa0FwaUdycGNWMVJlc3VsdHMwMDguSW1wb3J0UmVzdWx0c0RhdGFSZXNwb25zZT4+XG4gICAgICovXG4gICAgaW1wb3J0UmVzdWx0c0RhdGE6IChcbiAgICAgIHJlcXVlc3REYXRhOiBhcm1vbmlrQXBpR3JwY1YxUmVzdWx0czAwOC5JbXBvcnRSZXN1bHRzRGF0YVJlcXVlc3QsXG4gICAgICByZXF1ZXN0TWV0YWRhdGEgPSBuZXcgR3JwY01ldGFkYXRhKClcbiAgICApOiBPYnNlcnZhYmxlPFxuICAgICAgR3JwY0V2ZW50PGFybW9uaWtBcGlHcnBjVjFSZXN1bHRzMDA4LkltcG9ydFJlc3VsdHNEYXRhUmVzcG9uc2U+XG4gICAgPiA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVyLmhhbmRsZSh7XG4gICAgICAgIHR5cGU6IEdycGNDYWxsVHlwZS51bmFyeSxcbiAgICAgICAgY2xpZW50OiB0aGlzLmNsaWVudCxcbiAgICAgICAgcGF0aDogJy9hcm1vbmlrLmFwaS5ncnBjLnYxLnJlc3VsdHMuUmVzdWx0cy9JbXBvcnRSZXN1bHRzRGF0YScsXG4gICAgICAgIHJlcXVlc3REYXRhLFxuICAgICAgICByZXF1ZXN0TWV0YWRhdGEsXG4gICAgICAgIHJlcXVlc3RDbGFzczogYXJtb25pa0FwaUdycGNWMVJlc3VsdHMwMDguSW1wb3J0UmVzdWx0c0RhdGFSZXF1ZXN0LFxuICAgICAgICByZXNwb25zZUNsYXNzOiBhcm1vbmlrQXBpR3JwY1YxUmVzdWx0czAwOC5JbXBvcnRSZXN1bHRzRGF0YVJlc3BvbnNlXG4gICAgICB9KTtcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIFVuYXJ5IGNhbGw6IC9hcm1vbmlrLmFwaS5ncnBjLnYxLnJlc3VsdHMuUmVzdWx0cy9HZXRTZXJ2aWNlQ29uZmlndXJhdGlvblxuICAgICAqXG4gICAgICogQHBhcmFtIHJlcXVlc3RNZXNzYWdlIFJlcXVlc3QgbWVzc2FnZVxuICAgICAqIEBwYXJhbSByZXF1ZXN0TWV0YWRhdGEgUmVxdWVzdCBtZXRhZGF0YVxuICAgICAqIEByZXR1cm5zIE9ic2VydmFibGU8R3JwY0V2ZW50PGFybW9uaWtBcGlHcnBjVjFSZXN1bHRzMDA4LlJlc3VsdHNTZXJ2aWNlQ29uZmlndXJhdGlvblJlc3BvbnNlPj5cbiAgICAgKi9cbiAgICBnZXRTZXJ2aWNlQ29uZmlndXJhdGlvbjogKFxuICAgICAgcmVxdWVzdERhdGE6IGFybW9uaWtBcGlHcnBjVjEwMDcuRW1wdHksXG4gICAgICByZXF1ZXN0TWV0YWRhdGEgPSBuZXcgR3JwY01ldGFkYXRhKClcbiAgICApOiBPYnNlcnZhYmxlPFxuICAgICAgR3JwY0V2ZW50PGFybW9uaWtBcGlHcnBjVjFSZXN1bHRzMDA4LlJlc3VsdHNTZXJ2aWNlQ29uZmlndXJhdGlvblJlc3BvbnNlPlxuICAgID4gPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlci5oYW5kbGUoe1xuICAgICAgICB0eXBlOiBHcnBjQ2FsbFR5cGUudW5hcnksXG4gICAgICAgIGNsaWVudDogdGhpcy5jbGllbnQsXG4gICAgICAgIHBhdGg6ICcvYXJtb25pay5hcGkuZ3JwYy52MS5yZXN1bHRzLlJlc3VsdHMvR2V0U2VydmljZUNvbmZpZ3VyYXRpb24nLFxuICAgICAgICByZXF1ZXN0RGF0YSxcbiAgICAgICAgcmVxdWVzdE1ldGFkYXRhLFxuICAgICAgICByZXF1ZXN0Q2xhc3M6IGFybW9uaWtBcGlHcnBjVjEwMDcuRW1wdHksXG4gICAgICAgIHJlc3BvbnNlQ2xhc3M6XG4gICAgICAgICAgYXJtb25pa0FwaUdycGNWMVJlc3VsdHMwMDguUmVzdWx0c1NlcnZpY2VDb25maWd1cmF0aW9uUmVzcG9uc2VcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgLyoqXG4gICAgICogQmlkaXJlY3Rpb25hbCBzdHJlYW1pbmc6IC9hcm1vbmlrLmFwaS5ncnBjLnYxLnJlc3VsdHMuUmVzdWx0cy9XYXRjaFJlc3VsdHNcbiAgICAgKlxuICAgICAqIEBwYXJhbSByZXF1ZXN0TWVzc2FnZSBSZXF1ZXN0IG1lc3NhZ2VcbiAgICAgKiBAcGFyYW0gcmVxdWVzdE1ldGFkYXRhIFJlcXVlc3QgbWV0YWRhdGFcbiAgICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlPEdycGNFdmVudDxhcm1vbmlrQXBpR3JwY1YxUmVzdWx0czAwOC5XYXRjaFJlc3VsdFJlc3BvbnNlPj5cbiAgICAgKi9cbiAgICB3YXRjaFJlc3VsdHM6IChcbiAgICAgIHJlcXVlc3REYXRhOiBPYnNlcnZhYmxlPGFybW9uaWtBcGlHcnBjVjFSZXN1bHRzMDA4LldhdGNoUmVzdWx0UmVxdWVzdD4sXG4gICAgICByZXF1ZXN0TWV0YWRhdGEgPSBuZXcgR3JwY01ldGFkYXRhKClcbiAgICApOiBPYnNlcnZhYmxlPFxuICAgICAgR3JwY0V2ZW50PGFybW9uaWtBcGlHcnBjVjFSZXN1bHRzMDA4LldhdGNoUmVzdWx0UmVzcG9uc2U+XG4gICAgPiA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVyLmhhbmRsZSh7XG4gICAgICAgIHR5cGU6IEdycGNDYWxsVHlwZS5iaWRpU3RyZWFtLFxuICAgICAgICBjbGllbnQ6IHRoaXMuY2xpZW50LFxuICAgICAgICBwYXRoOiAnL2FybW9uaWsuYXBpLmdycGMudjEucmVzdWx0cy5SZXN1bHRzL1dhdGNoUmVzdWx0cycsXG4gICAgICAgIHJlcXVlc3REYXRhLFxuICAgICAgICByZXF1ZXN0TWV0YWRhdGEsXG4gICAgICAgIHJlcXVlc3RDbGFzczogYXJtb25pa0FwaUdycGNWMVJlc3VsdHMwMDguV2F0Y2hSZXN1bHRSZXF1ZXN0LFxuICAgICAgICByZXNwb25zZUNsYXNzOiBhcm1vbmlrQXBpR3JwY1YxUmVzdWx0czAwOC5XYXRjaFJlc3VsdFJlc3BvbnNlXG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChHUlBDX1JFU1VMVFNfQ0xJRU5UX1NFVFRJTkdTKSBzZXR0aW5nczogYW55LFxuICAgIEBJbmplY3QoR1JQQ19DTElFTlRfRkFDVE9SWSkgY2xpZW50RmFjdG9yeTogR3JwY0NsaWVudEZhY3Rvcnk8YW55PixcbiAgICBwcml2YXRlIGhhbmRsZXI6IEdycGNIYW5kbGVyXG4gICkge1xuICAgIHRoaXMuY2xpZW50ID0gY2xpZW50RmFjdG9yeS5jcmVhdGVDbGllbnQoXG4gICAgICAnYXJtb25pay5hcGkuZ3JwYy52MS5yZXN1bHRzLlJlc3VsdHMnLFxuICAgICAgc2V0dGluZ3NcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFVuYXJ5IGNhbGwgQC9hcm1vbmlrLmFwaS5ncnBjLnYxLnJlc3VsdHMuUmVzdWx0cy9MaXN0UmVzdWx0c1xuICAgKlxuICAgKiBAcGFyYW0gcmVxdWVzdE1lc3NhZ2UgUmVxdWVzdCBtZXNzYWdlXG4gICAqIEBwYXJhbSByZXF1ZXN0TWV0YWRhdGEgUmVxdWVzdCBtZXRhZGF0YVxuICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlPGFybW9uaWtBcGlHcnBjVjFSZXN1bHRzMDA4Lkxpc3RSZXN1bHRzUmVzcG9uc2U+XG4gICAqL1xuICBsaXN0UmVzdWx0cyhcbiAgICByZXF1ZXN0RGF0YTogYXJtb25pa0FwaUdycGNWMVJlc3VsdHMwMDguTGlzdFJlc3VsdHNSZXF1ZXN0LFxuICAgIHJlcXVlc3RNZXRhZGF0YSA9IG5ldyBHcnBjTWV0YWRhdGEoKVxuICApOiBPYnNlcnZhYmxlPGFybW9uaWtBcGlHcnBjVjFSZXN1bHRzMDA4Lkxpc3RSZXN1bHRzUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy4kcmF3XG4gICAgICAubGlzdFJlc3VsdHMocmVxdWVzdERhdGEsIHJlcXVlc3RNZXRhZGF0YSlcbiAgICAgIC5waXBlKHRocm93U3RhdHVzRXJyb3JzKCksIHRha2VNZXNzYWdlcygpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVbmFyeSBjYWxsIEAvYXJtb25pay5hcGkuZ3JwYy52MS5yZXN1bHRzLlJlc3VsdHMvR2V0UmVzdWx0XG4gICAqXG4gICAqIEBwYXJhbSByZXF1ZXN0TWVzc2FnZSBSZXF1ZXN0IG1lc3NhZ2VcbiAgICogQHBhcmFtIHJlcXVlc3RNZXRhZGF0YSBSZXF1ZXN0IG1ldGFkYXRhXG4gICAqIEByZXR1cm5zIE9ic2VydmFibGU8YXJtb25pa0FwaUdycGNWMVJlc3VsdHMwMDguR2V0UmVzdWx0UmVzcG9uc2U+XG4gICAqL1xuICBnZXRSZXN1bHQoXG4gICAgcmVxdWVzdERhdGE6IGFybW9uaWtBcGlHcnBjVjFSZXN1bHRzMDA4LkdldFJlc3VsdFJlcXVlc3QsXG4gICAgcmVxdWVzdE1ldGFkYXRhID0gbmV3IEdycGNNZXRhZGF0YSgpXG4gICk6IE9ic2VydmFibGU8YXJtb25pa0FwaUdycGNWMVJlc3VsdHMwMDguR2V0UmVzdWx0UmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy4kcmF3XG4gICAgICAuZ2V0UmVzdWx0KHJlcXVlc3REYXRhLCByZXF1ZXN0TWV0YWRhdGEpXG4gICAgICAucGlwZSh0aHJvd1N0YXR1c0Vycm9ycygpLCB0YWtlTWVzc2FnZXMoKSk7XG4gIH1cblxuICAvKipcbiAgICogVW5hcnkgY2FsbCBAL2FybW9uaWsuYXBpLmdycGMudjEucmVzdWx0cy5SZXN1bHRzL0dldE93bmVyVGFza0lkXG4gICAqXG4gICAqIEBwYXJhbSByZXF1ZXN0TWVzc2FnZSBSZXF1ZXN0IG1lc3NhZ2VcbiAgICogQHBhcmFtIHJlcXVlc3RNZXRhZGF0YSBSZXF1ZXN0IG1ldGFkYXRhXG4gICAqIEByZXR1cm5zIE9ic2VydmFibGU8YXJtb25pa0FwaUdycGNWMVJlc3VsdHMwMDguR2V0T3duZXJUYXNrSWRSZXNwb25zZT5cbiAgICovXG4gIGdldE93bmVyVGFza0lkKFxuICAgIHJlcXVlc3REYXRhOiBhcm1vbmlrQXBpR3JwY1YxUmVzdWx0czAwOC5HZXRPd25lclRhc2tJZFJlcXVlc3QsXG4gICAgcmVxdWVzdE1ldGFkYXRhID0gbmV3IEdycGNNZXRhZGF0YSgpXG4gICk6IE9ic2VydmFibGU8YXJtb25pa0FwaUdycGNWMVJlc3VsdHMwMDguR2V0T3duZXJUYXNrSWRSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLiRyYXdcbiAgICAgIC5nZXRPd25lclRhc2tJZChyZXF1ZXN0RGF0YSwgcmVxdWVzdE1ldGFkYXRhKVxuICAgICAgLnBpcGUodGhyb3dTdGF0dXNFcnJvcnMoKSwgdGFrZU1lc3NhZ2VzKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVuYXJ5IGNhbGwgQC9hcm1vbmlrLmFwaS5ncnBjLnYxLnJlc3VsdHMuUmVzdWx0cy9DcmVhdGVSZXN1bHRzTWV0YURhdGFcbiAgICpcbiAgICogQHBhcmFtIHJlcXVlc3RNZXNzYWdlIFJlcXVlc3QgbWVzc2FnZVxuICAgKiBAcGFyYW0gcmVxdWVzdE1ldGFkYXRhIFJlcXVlc3QgbWV0YWRhdGFcbiAgICogQHJldHVybnMgT2JzZXJ2YWJsZTxhcm1vbmlrQXBpR3JwY1YxUmVzdWx0czAwOC5DcmVhdGVSZXN1bHRzTWV0YURhdGFSZXNwb25zZT5cbiAgICovXG4gIGNyZWF0ZVJlc3VsdHNNZXRhRGF0YShcbiAgICByZXF1ZXN0RGF0YTogYXJtb25pa0FwaUdycGNWMVJlc3VsdHMwMDguQ3JlYXRlUmVzdWx0c01ldGFEYXRhUmVxdWVzdCxcbiAgICByZXF1ZXN0TWV0YWRhdGEgPSBuZXcgR3JwY01ldGFkYXRhKClcbiAgKTogT2JzZXJ2YWJsZTxhcm1vbmlrQXBpR3JwY1YxUmVzdWx0czAwOC5DcmVhdGVSZXN1bHRzTWV0YURhdGFSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLiRyYXdcbiAgICAgIC5jcmVhdGVSZXN1bHRzTWV0YURhdGEocmVxdWVzdERhdGEsIHJlcXVlc3RNZXRhZGF0YSlcbiAgICAgIC5waXBlKHRocm93U3RhdHVzRXJyb3JzKCksIHRha2VNZXNzYWdlcygpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVbmFyeSBjYWxsIEAvYXJtb25pay5hcGkuZ3JwYy52MS5yZXN1bHRzLlJlc3VsdHMvQ3JlYXRlUmVzdWx0c1xuICAgKlxuICAgKiBAcGFyYW0gcmVxdWVzdE1lc3NhZ2UgUmVxdWVzdCBtZXNzYWdlXG4gICAqIEBwYXJhbSByZXF1ZXN0TWV0YWRhdGEgUmVxdWVzdCBtZXRhZGF0YVxuICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlPGFybW9uaWtBcGlHcnBjVjFSZXN1bHRzMDA4LkNyZWF0ZVJlc3VsdHNSZXNwb25zZT5cbiAgICovXG4gIGNyZWF0ZVJlc3VsdHMoXG4gICAgcmVxdWVzdERhdGE6IGFybW9uaWtBcGlHcnBjVjFSZXN1bHRzMDA4LkNyZWF0ZVJlc3VsdHNSZXF1ZXN0LFxuICAgIHJlcXVlc3RNZXRhZGF0YSA9IG5ldyBHcnBjTWV0YWRhdGEoKVxuICApOiBPYnNlcnZhYmxlPGFybW9uaWtBcGlHcnBjVjFSZXN1bHRzMDA4LkNyZWF0ZVJlc3VsdHNSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLiRyYXdcbiAgICAgIC5jcmVhdGVSZXN1bHRzKHJlcXVlc3REYXRhLCByZXF1ZXN0TWV0YWRhdGEpXG4gICAgICAucGlwZSh0aHJvd1N0YXR1c0Vycm9ycygpLCB0YWtlTWVzc2FnZXMoKSk7XG4gIH1cblxuICAvKipcbiAgICogQ2xpZW50IHN0cmVhbWluZyBAL2FybW9uaWsuYXBpLmdycGMudjEucmVzdWx0cy5SZXN1bHRzL1VwbG9hZFJlc3VsdERhdGFcbiAgICpcbiAgICogQHBhcmFtIHJlcXVlc3RNZXNzYWdlIFJlcXVlc3QgbWVzc2FnZVxuICAgKiBAcGFyYW0gcmVxdWVzdE1ldGFkYXRhIFJlcXVlc3QgbWV0YWRhdGFcbiAgICogQHJldHVybnMgT2JzZXJ2YWJsZTxhcm1vbmlrQXBpR3JwY1YxUmVzdWx0czAwOC5VcGxvYWRSZXN1bHREYXRhUmVzcG9uc2U+XG4gICAqL1xuICB1cGxvYWRSZXN1bHREYXRhKFxuICAgIHJlcXVlc3REYXRhOiBPYnNlcnZhYmxlPGFybW9uaWtBcGlHcnBjVjFSZXN1bHRzMDA4LlVwbG9hZFJlc3VsdERhdGFSZXF1ZXN0PixcbiAgICByZXF1ZXN0TWV0YWRhdGEgPSBuZXcgR3JwY01ldGFkYXRhKClcbiAgKTogT2JzZXJ2YWJsZTxhcm1vbmlrQXBpR3JwY1YxUmVzdWx0czAwOC5VcGxvYWRSZXN1bHREYXRhUmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy4kcmF3XG4gICAgICAudXBsb2FkUmVzdWx0RGF0YShyZXF1ZXN0RGF0YSwgcmVxdWVzdE1ldGFkYXRhKVxuICAgICAgLnBpcGUodGhyb3dTdGF0dXNFcnJvcnMoKSwgdGFrZU1lc3NhZ2VzKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcnZlciBzdHJlYW1pbmcgQC9hcm1vbmlrLmFwaS5ncnBjLnYxLnJlc3VsdHMuUmVzdWx0cy9Eb3dubG9hZFJlc3VsdERhdGFcbiAgICpcbiAgICogQHBhcmFtIHJlcXVlc3RNZXNzYWdlIFJlcXVlc3QgbWVzc2FnZVxuICAgKiBAcGFyYW0gcmVxdWVzdE1ldGFkYXRhIFJlcXVlc3QgbWV0YWRhdGFcbiAgICogQHJldHVybnMgT2JzZXJ2YWJsZTxhcm1vbmlrQXBpR3JwY1YxUmVzdWx0czAwOC5Eb3dubG9hZFJlc3VsdERhdGFSZXNwb25zZT5cbiAgICovXG4gIGRvd25sb2FkUmVzdWx0RGF0YShcbiAgICByZXF1ZXN0RGF0YTogYXJtb25pa0FwaUdycGNWMVJlc3VsdHMwMDguRG93bmxvYWRSZXN1bHREYXRhUmVxdWVzdCxcbiAgICByZXF1ZXN0TWV0YWRhdGEgPSBuZXcgR3JwY01ldGFkYXRhKClcbiAgKTogT2JzZXJ2YWJsZTxhcm1vbmlrQXBpR3JwY1YxUmVzdWx0czAwOC5Eb3dubG9hZFJlc3VsdERhdGFSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLiRyYXdcbiAgICAgIC5kb3dubG9hZFJlc3VsdERhdGEocmVxdWVzdERhdGEsIHJlcXVlc3RNZXRhZGF0YSlcbiAgICAgIC5waXBlKHRocm93U3RhdHVzRXJyb3JzKCksIHRha2VNZXNzYWdlcygpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVbmFyeSBjYWxsIEAvYXJtb25pay5hcGkuZ3JwYy52MS5yZXN1bHRzLlJlc3VsdHMvRGVsZXRlUmVzdWx0c0RhdGFcbiAgICpcbiAgICogQHBhcmFtIHJlcXVlc3RNZXNzYWdlIFJlcXVlc3QgbWVzc2FnZVxuICAgKiBAcGFyYW0gcmVxdWVzdE1ldGFkYXRhIFJlcXVlc3QgbWV0YWRhdGFcbiAgICogQHJldHVybnMgT2JzZXJ2YWJsZTxhcm1vbmlrQXBpR3JwY1YxUmVzdWx0czAwOC5EZWxldGVSZXN1bHRzRGF0YVJlc3BvbnNlPlxuICAgKi9cbiAgZGVsZXRlUmVzdWx0c0RhdGEoXG4gICAgcmVxdWVzdERhdGE6IGFybW9uaWtBcGlHcnBjVjFSZXN1bHRzMDA4LkRlbGV0ZVJlc3VsdHNEYXRhUmVxdWVzdCxcbiAgICByZXF1ZXN0TWV0YWRhdGEgPSBuZXcgR3JwY01ldGFkYXRhKClcbiAgKTogT2JzZXJ2YWJsZTxhcm1vbmlrQXBpR3JwY1YxUmVzdWx0czAwOC5EZWxldGVSZXN1bHRzRGF0YVJlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuJHJhd1xuICAgICAgLmRlbGV0ZVJlc3VsdHNEYXRhKHJlcXVlc3REYXRhLCByZXF1ZXN0TWV0YWRhdGEpXG4gICAgICAucGlwZSh0aHJvd1N0YXR1c0Vycm9ycygpLCB0YWtlTWVzc2FnZXMoKSk7XG4gIH1cblxuICAvKipcbiAgICogVW5hcnkgY2FsbCBAL2FybW9uaWsuYXBpLmdycGMudjEucmVzdWx0cy5SZXN1bHRzL0ltcG9ydFJlc3VsdHNEYXRhXG4gICAqXG4gICAqIEBwYXJhbSByZXF1ZXN0TWVzc2FnZSBSZXF1ZXN0IG1lc3NhZ2VcbiAgICogQHBhcmFtIHJlcXVlc3RNZXRhZGF0YSBSZXF1ZXN0IG1ldGFkYXRhXG4gICAqIEByZXR1cm5zIE9ic2VydmFibGU8YXJtb25pa0FwaUdycGNWMVJlc3VsdHMwMDguSW1wb3J0UmVzdWx0c0RhdGFSZXNwb25zZT5cbiAgICovXG4gIGltcG9ydFJlc3VsdHNEYXRhKFxuICAgIHJlcXVlc3REYXRhOiBhcm1vbmlrQXBpR3JwY1YxUmVzdWx0czAwOC5JbXBvcnRSZXN1bHRzRGF0YVJlcXVlc3QsXG4gICAgcmVxdWVzdE1ldGFkYXRhID0gbmV3IEdycGNNZXRhZGF0YSgp