UNPKG

@circle-fin/circle-sdk

Version:
337 lines 47.7 kB
"use strict"; /* tslint:disable */ /* eslint-disable */ /** * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). * https://openapi-generator.tech * Do not edit the class manually. */ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.CBITApi = exports.CBITApiFactory = exports.CBITApiFp = exports.CBITApiAxiosParamCreator = void 0; const axios_1 = __importDefault(require("axios")); // Some imports not used depending on template conditions // @ts-ignore const common_1 = require("../common"); // @ts-ignore const base_1 = require("../base"); /** * CBITApi - axios parameter creator * @export */ const CBITApiAxiosParamCreator = function (configuration) { return { /** * * @summary Create a CBIT bank account * @param {CbitFiatAccountCreationRequest} [cbitFiatAccountCreationRequest] * @param {*} [options] Override http request option. * @throws {RequiredError} */ createBusinessCbitAccount: (cbitFiatAccountCreationRequest, options = {}) => __awaiter(this, void 0, void 0, function* () { const localVarPath = `/v1/businessAccount/banks/cbit`; // use dummy base URL string because the URL constructor only accepts absolute URLs. const localVarUrlObj = new URL(localVarPath, common_1.DUMMY_BASE_URL); let baseOptions; if (configuration) { baseOptions = configuration.baseOptions; } const localVarRequestOptions = Object.assign(Object.assign({ method: "POST" }, baseOptions), options); const localVarHeaderParameter = {}; const localVarQueryParameter = {}; // authentication bearerAuth required // http bearer authentication required yield (0, common_1.setBearerAuthToObject)(localVarHeaderParameter, configuration); localVarHeaderParameter["Content-Type"] = "application/json"; (0, common_1.setSearchParams)(localVarUrlObj, localVarQueryParameter); let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers); localVarRequestOptions.data = (0, common_1.serializeDataIfNeeded)(cbitFiatAccountCreationRequest, localVarRequestOptions, configuration); return { url: (0, common_1.toPathString)(localVarUrlObj), options: localVarRequestOptions }; }), /** * * @summary Get a CBIT bank account * @param {string} id Universally unique identifier (UUID v4) of a resource. * @param {*} [options] Override http request option. * @throws {RequiredError} */ getBusinessCbitAccount: (id, options = {}) => __awaiter(this, void 0, void 0, function* () { // verify required parameter 'id' is not null or undefined (0, common_1.assertParamExists)("getBusinessCbitAccount", "id", id); const localVarPath = `/v1/businessAccount/banks/cbit/{id}`.replace(`{${"id"}}`, encodeURIComponent(String(id))); // use dummy base URL string because the URL constructor only accepts absolute URLs. const localVarUrlObj = new URL(localVarPath, common_1.DUMMY_BASE_URL); let baseOptions; if (configuration) { baseOptions = configuration.baseOptions; } const localVarRequestOptions = Object.assign(Object.assign({ method: "GET" }, baseOptions), options); const localVarHeaderParameter = {}; const localVarQueryParameter = {}; // authentication bearerAuth required // http bearer authentication required yield (0, common_1.setBearerAuthToObject)(localVarHeaderParameter, configuration); (0, common_1.setSearchParams)(localVarUrlObj, localVarQueryParameter); let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers); return { url: (0, common_1.toPathString)(localVarUrlObj), options: localVarRequestOptions }; }), /** * Get the CBIT transfer instructions into the Circle bank account given your bank account id. * @summary Get CBIT instructions * @param {string} id Universally unique identifier (UUID v4) of a resource. * @param {*} [options] Override http request option. * @throws {RequiredError} */ getBusinessCbitAccountInstructions: (id, options = {}) => __awaiter(this, void 0, void 0, function* () { // verify required parameter 'id' is not null or undefined (0, common_1.assertParamExists)("getBusinessCbitAccountInstructions", "id", id); const localVarPath = `/v1/businessAccount/banks/cbit/{id}/instructions`.replace(`{${"id"}}`, encodeURIComponent(String(id))); // use dummy base URL string because the URL constructor only accepts absolute URLs. const localVarUrlObj = new URL(localVarPath, common_1.DUMMY_BASE_URL); let baseOptions; if (configuration) { baseOptions = configuration.baseOptions; } const localVarRequestOptions = Object.assign(Object.assign({ method: "GET" }, baseOptions), options); const localVarHeaderParameter = {}; const localVarQueryParameter = {}; // authentication bearerAuth required // http bearer authentication required yield (0, common_1.setBearerAuthToObject)(localVarHeaderParameter, configuration); (0, common_1.setSearchParams)(localVarUrlObj, localVarQueryParameter); let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers); return { url: (0, common_1.toPathString)(localVarUrlObj), options: localVarRequestOptions }; }), /** * * @summary List all CBIT bank accounts. * @param {*} [options] Override http request option. * @throws {RequiredError} */ listBusinessCbitAccounts: (options = {}) => __awaiter(this, void 0, void 0, function* () { const localVarPath = `/v1/businessAccount/banks/cbit`; // use dummy base URL string because the URL constructor only accepts absolute URLs. const localVarUrlObj = new URL(localVarPath, common_1.DUMMY_BASE_URL); let baseOptions; if (configuration) { baseOptions = configuration.baseOptions; } const localVarRequestOptions = Object.assign(Object.assign({ method: "GET" }, baseOptions), options); const localVarHeaderParameter = {}; const localVarQueryParameter = {}; // authentication bearerAuth required // http bearer authentication required yield (0, common_1.setBearerAuthToObject)(localVarHeaderParameter, configuration); (0, common_1.setSearchParams)(localVarUrlObj, localVarQueryParameter); let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {}; localVarRequestOptions.headers = Object.assign(Object.assign(Object.assign({}, localVarHeaderParameter), headersFromBaseOptions), options.headers); return { url: (0, common_1.toPathString)(localVarUrlObj), options: localVarRequestOptions }; }) }; }; exports.CBITApiAxiosParamCreator = CBITApiAxiosParamCreator; /** * CBITApi - functional programming interface * @export */ const CBITApiFp = function (configuration) { const localVarAxiosParamCreator = (0, exports.CBITApiAxiosParamCreator)(configuration); return { /** * * @summary Create a CBIT bank account * @param {CbitFiatAccountCreationRequest} [cbitFiatAccountCreationRequest] * @param {*} [options] Override http request option. * @throws {RequiredError} */ createBusinessCbitAccount(cbitFiatAccountCreationRequest, options) { return __awaiter(this, void 0, void 0, function* () { const localVarAxiosArgs = yield localVarAxiosParamCreator.createBusinessCbitAccount(cbitFiatAccountCreationRequest, options); return (0, common_1.createRequestFunction)(localVarAxiosArgs, axios_1.default, base_1.BASE_PATH, configuration); }); }, /** * * @summary Get a CBIT bank account * @param {string} id Universally unique identifier (UUID v4) of a resource. * @param {*} [options] Override http request option. * @throws {RequiredError} */ getBusinessCbitAccount(id, options) { return __awaiter(this, void 0, void 0, function* () { const localVarAxiosArgs = yield localVarAxiosParamCreator.getBusinessCbitAccount(id, options); return (0, common_1.createRequestFunction)(localVarAxiosArgs, axios_1.default, base_1.BASE_PATH, configuration); }); }, /** * Get the CBIT transfer instructions into the Circle bank account given your bank account id. * @summary Get CBIT instructions * @param {string} id Universally unique identifier (UUID v4) of a resource. * @param {*} [options] Override http request option. * @throws {RequiredError} */ getBusinessCbitAccountInstructions(id, options) { return __awaiter(this, void 0, void 0, function* () { const localVarAxiosArgs = yield localVarAxiosParamCreator.getBusinessCbitAccountInstructions(id, options); return (0, common_1.createRequestFunction)(localVarAxiosArgs, axios_1.default, base_1.BASE_PATH, configuration); }); }, /** * * @summary List all CBIT bank accounts. * @param {*} [options] Override http request option. * @throws {RequiredError} */ listBusinessCbitAccounts(options) { return __awaiter(this, void 0, void 0, function* () { const localVarAxiosArgs = yield localVarAxiosParamCreator.listBusinessCbitAccounts(options); return (0, common_1.createRequestFunction)(localVarAxiosArgs, axios_1.default, base_1.BASE_PATH, configuration); }); } }; }; exports.CBITApiFp = CBITApiFp; /** * CBITApi - factory interface * @export */ const CBITApiFactory = function (configuration, basePath, axios) { const localVarFp = (0, exports.CBITApiFp)(configuration); return { /** * * @summary Create a CBIT bank account * @param {CbitFiatAccountCreationRequest} [cbitFiatAccountCreationRequest] * @param {*} [options] Override http request option. * @throws {RequiredError} */ createBusinessCbitAccount(cbitFiatAccountCreationRequest, options) { return localVarFp .createBusinessCbitAccount(cbitFiatAccountCreationRequest, options) .then((request) => request(axios, basePath)); }, /** * * @summary Get a CBIT bank account * @param {string} id Universally unique identifier (UUID v4) of a resource. * @param {*} [options] Override http request option. * @throws {RequiredError} */ getBusinessCbitAccount(id, options) { return localVarFp .getBusinessCbitAccount(id, options) .then((request) => request(axios, basePath)); }, /** * Get the CBIT transfer instructions into the Circle bank account given your bank account id. * @summary Get CBIT instructions * @param {string} id Universally unique identifier (UUID v4) of a resource. * @param {*} [options] Override http request option. * @throws {RequiredError} */ getBusinessCbitAccountInstructions(id, options) { return localVarFp .getBusinessCbitAccountInstructions(id, options) .then((request) => request(axios, basePath)); }, /** * * @summary List all CBIT bank accounts. * @param {*} [options] Override http request option. * @throws {RequiredError} */ listBusinessCbitAccounts(options) { return localVarFp .listBusinessCbitAccounts(options) .then((request) => request(axios, basePath)); } }; }; exports.CBITApiFactory = CBITApiFactory; /** * CBITApi - object-oriented interface * @export * @class CBITApi * @extends {BaseAPI} */ class CBITApi extends base_1.BaseAPI { /** * * @summary Create a CBIT bank account * @param {CbitFiatAccountCreationRequest} [cbitFiatAccountCreationRequest] * @param {*} [options] Override http request option. * @throws {RequiredError} * @memberof CBITApi */ createBusinessCbitAccount(cbitFiatAccountCreationRequest, options) { return (0, exports.CBITApiFp)(this.configuration) .createBusinessCbitAccount(cbitFiatAccountCreationRequest, options) .then((request) => request(this.axios, this.basePath)); } /** * * @summary Get a CBIT bank account * @param {string} id Universally unique identifier (UUID v4) of a resource. * @param {*} [options] Override http request option. * @throws {RequiredError} * @memberof CBITApi */ getBusinessCbitAccount(id, options) { return (0, exports.CBITApiFp)(this.configuration) .getBusinessCbitAccount(id, options) .then((request) => request(this.axios, this.basePath)); } /** * Get the CBIT transfer instructions into the Circle bank account given your bank account id. * @summary Get CBIT instructions * @param {string} id Universally unique identifier (UUID v4) of a resource. * @param {*} [options] Override http request option. * @throws {RequiredError} * @memberof CBITApi */ getBusinessCbitAccountInstructions(id, options) { return (0, exports.CBITApiFp)(this.configuration) .getBusinessCbitAccountInstructions(id, options) .then((request) => request(this.axios, this.basePath)); } /** * * @summary List all CBIT bank accounts. * @param {*} [options] Override http request option. * @throws {RequiredError} * @memberof CBITApi */ listBusinessCbitAccounts(options) { return (0, exports.CBITApiFp)(this.configuration) .listBusinessCbitAccounts(options) .then((request) => request(this.axios, this.basePath)); } } exports.CBITApi = CBITApi; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2JpdGFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9nZW5lcmF0ZWQvYXBpcy9jYml0YXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxvQkFBb0I7QUFDcEIsb0JBQW9CO0FBQ3BCOzs7O0dBSUc7Ozs7Ozs7Ozs7Ozs7OztBQUVILGtEQUllO0FBRWYseURBQXlEO0FBQ3pELGFBQWE7QUFDYixzQ0FRbUI7QUFDbkIsYUFBYTtBQUNiLGtDQU1pQjtBQWlCakI7OztHQUdHO0FBQ0ksTUFBTSx3QkFBd0IsR0FBRyxVQUN0QyxhQUE2QjtJQUU3QixPQUFPO1FBQ0w7Ozs7OztXQU1HO1FBQ0gseUJBQXlCLEVBQUUsQ0FDekIsOEJBQStELEVBQy9ELFVBQThCLEVBQUUsRUFDVixFQUFFO1lBQ3hCLE1BQU0sWUFBWSxHQUFHLGdDQUFnQyxDQUFDO1lBQ3RELG9GQUFvRjtZQUNwRixNQUFNLGNBQWMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxZQUFZLEVBQUUsdUJBQWMsQ0FBQyxDQUFDO1lBQzdELElBQUksV0FBVyxDQUFDO1lBQ2hCLElBQUksYUFBYSxFQUFFO2dCQUNqQixXQUFXLEdBQUcsYUFBYSxDQUFDLFdBQVcsQ0FBQzthQUN6QztZQUVELE1BQU0sc0JBQXNCLGlDQUMxQixNQUFNLEVBQUUsTUFBTSxJQUNYLFdBQVcsR0FDWCxPQUFPLENBQ1gsQ0FBQztZQUNGLE1BQU0sdUJBQXVCLEdBQUcsRUFBUyxDQUFDO1lBQzFDLE1BQU0sc0JBQXNCLEdBQUcsRUFBUyxDQUFDO1lBRXpDLHFDQUFxQztZQUNyQyxzQ0FBc0M7WUFDdEMsTUFBTSxJQUFBLDhCQUFxQixFQUFDLHVCQUF1QixFQUFFLGFBQWEsQ0FBQyxDQUFDO1lBRXBFLHVCQUF1QixDQUFDLGNBQWMsQ0FBQyxHQUFHLGtCQUFrQixDQUFDO1lBRTdELElBQUEsd0JBQWUsRUFBQyxjQUFjLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztZQUN4RCxJQUFJLHNCQUFzQixH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LENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0ksc0JBQXNCLENBQUMsRUFBVSxFQUFFLE9BQTRCO1FBQ3BFLE9BQU8sSUFBQSxpQkFBUyxFQUFDLElBQUksQ0FBQyxhQUFhLENBQUM7YUFDakMsc0JBQXNCLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQzthQUNuQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0ksa0NBQWtDLENBQ3ZDLEVBQVUsRUFDVixPQUE0QjtRQUU1QixPQUFPLElBQUEsaUJBQVMsRUFBQyxJQUFJLENBQUMsYUFBYSxDQUFDO2FBQ2pDLGtDQUFrQyxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUM7YUFDL0MsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksd0JBQXdCLENBQUMsT0FBNEI7UUFDMUQsT0FBTyxJQUFBLGlCQUFTLEVBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQzthQUNqQyx3QkFBd0IsQ0FBQyxPQUFPLENBQUM7YUFDakMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUMzRCxDQUFDO0NBQ0Y7QUE3REQsMEJBNkRDIiwic291cmNlc0NvbnRlbnQiOlsiLyogdHNsaW50OmRpc2FibGUgKi9cbi8qIGVzbGludC1kaXNhYmxlICovXG4vKipcbiAqIE5PVEU6IFRoaXMgY2xhc3MgaXMgYXV0byBnZW5lcmF0ZWQgYnkgT3BlbkFQSSBHZW5lcmF0b3IgKGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaCkuXG4gKiBodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2hcbiAqIERvIG5vdCBlZGl0IHRoZSBjbGFzcyBtYW51YWxseS5cbiAqL1xuXG5pbXBvcnQgZ2xvYmFsQXhpb3MsIHtcbiAgQXhpb3NQcm9taXNlLFxuICBBeGlvc0luc3RhbmNlLFxuICBBeGlvc1JlcXVlc3RDb25maWdcbn0gZnJvbSBcImF4aW9zXCI7XG5pbXBvcnQgeyBDb25maWd1cmF0aW9uIH0gZnJvbSBcIi4uL2NvbmZpZ3VyYXRpb25cIjtcbi8vIFNvbWUgaW1wb3J0cyBub3QgdXNlZCBkZXBlbmRpbmcgb24gdGVtcGxhdGUgY29uZGl0aW9uc1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHtcbiAgRFVNTVlfQkFTRV9VUkwsXG4gIGFzc2VydFBhcmFtRXhpc3RzLFxuICBzZXRCZWFyZXJBdXRoVG9PYmplY3QsXG4gIHNldFNlYXJjaFBhcmFtcyxcbiAgc2VyaWFsaXplRGF0YUlmTmVlZGVkLFxuICB0b1BhdGhTdHJpbmcsXG4gIGNyZWF0ZVJlcXVlc3RGdW5jdGlvblxufSBmcm9tIFwiLi4vY29tbW9uXCI7XG4vLyBAdHMtaWdub3JlXG5pbXBvcnQge1xuICBCQVNFX1BBVEgsXG4gIENPTExFQ1RJT05fRk9STUFUUyxcbiAgUmVxdWVzdEFyZ3MsXG4gIEJhc2VBUEksXG4gIFJlcXVpcmVkRXJyb3Jcbn0gZnJvbSBcIi4uL2Jhc2VcIjtcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IEJhZFJlcXVlc3QgfSBmcm9tIFwiLi4vbW9kZWxzXCI7XG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBDYml0RmlhdEFjY291bnRDcmVhdGlvblJlcXVlc3QgfSBmcm9tIFwiLi4vbW9kZWxzXCI7XG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBDcmVhdGVCdXNpbmVzc0NiaXRBY2NvdW50UmVzcG9uc2UgfSBmcm9tIFwiLi4vbW9kZWxzXCI7XG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBHZXRCdXNpbmVzc0NiaXRBY2NvdW50UmVzcG9uc2UgfSBmcm9tIFwiLi4vbW9kZWxzXCI7XG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBMaXN0QnVzaW5lc3NDYml0QWNjb3VudEluc3RydWN0aW9uc1Jlc3BvbnNlIH0gZnJvbSBcIi4uL21vZGVsc1wiO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgTGlzdEJ1c2luZXNzQ2JpdEFjY291bnRzUmVzcG9uc2UgfSBmcm9tIFwiLi4vbW9kZWxzXCI7XG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBOb3RBdXRob3JpemVkIH0gZnJvbSBcIi4uL21vZGVsc1wiO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgTm90Rm91bmQgfSBmcm9tIFwiLi4vbW9kZWxzXCI7XG4vKipcbiAqIENCSVRBcGkgLSBheGlvcyBwYXJhbWV0ZXIgY3JlYXRvclxuICogQGV4cG9ydFxuICovXG5leHBvcnQgY29uc3QgQ0JJVEFwaUF4aW9zUGFyYW1DcmVhdG9yID0gZnVuY3Rpb24gKFxuICBjb25maWd1cmF0aW9uPzogQ29uZmlndXJhdGlvblxuKSB7XG4gIHJldHVybiB7XG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBAc3VtbWFyeSBDcmVhdGUgYSBDQklUIGJhbmsgYWNjb3VudFxuICAgICAqIEBwYXJhbSB7Q2JpdEZpYXRBY2NvdW50Q3JlYXRpb25SZXF1ZXN0fSBbY2JpdEZpYXRBY2NvdW50Q3JlYXRpb25SZXF1ZXN0XVxuICAgICAqIEBwYXJhbSB7Kn0gW29wdGlvbnNdIE92ZXJyaWRlIGh0dHAgcmVxdWVzdCBvcHRpb24uXG4gICAgICogQHRocm93cyB7UmVxdWlyZWRFcnJvcn1cbiAgICAgKi9cbiAgICBjcmVhdGVCdXNpbmVzc0NiaXRBY2NvdW50OiBhc3luYyAoXG4gICAgICBjYml0RmlhdEFjY291bnRDcmVhdGlvblJlcXVlc3Q/OiBDYml0RmlhdEFjY291bnRDcmVhdGlvblJlcXVlc3QsXG4gICAgICBvcHRpb25zOiBBeGlvc1JlcXVlc3RDb25maWcgPSB7fVxuICAgICk6IFByb21pc2U8UmVxdWVzdEFyZ3M+ID0+IHtcbiAgICAgIGNvbnN0IGxvY2FsVmFyUGF0aCA9IGAvdjEvYnVzaW5lc3NBY2NvdW50L2JhbmtzL2NiaXRgO1xuICAgICAgLy8gdXNlIGR1bW15IGJhc2UgVVJMIHN0cmluZyBiZWNhdXNlIHRoZSBVUkwgY29uc3RydWN0b3Igb25seSBhY2NlcHRzIGFic29sdXRlIFVSTHMuXG4gICAgICBjb25zdCBsb2NhbFZhclVybE9iaiA9IG5ldyBVUkwobG9jYWxWYXJQYXRoLCBEVU1NWV9CQVNFX1VSTCk7XG4gICAgICBsZXQgYmFzZU9wdGlvbnM7XG4gICAgICBpZiAoY29uZmlndXJhdGlvbikge1xuICAgICAgICBiYXNlT3B0aW9ucyA9IGNvbmZpZ3VyYXRpb24uYmFzZU9wdGlvbnM7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGxvY2FsVmFyUmVxdWVzdE9wdGlvbnMgPSB7XG4gICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgIC4uLmJhc2VPcHRpb25zLFxuICAgICAgICAuLi5vcHRpb25zXG4gICAgICB9O1xuICAgICAgY29uc3QgbG9jYWxWYXJIZWFkZXJQYXJhbWV0ZXIgPSB7fSBhcyBhbnk7XG4gICAgICBjb25zdCBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVyID0ge30gYXMgYW55O1xuXG4gICAgICAvLyBhdXRoZW50aWNhdGlvbiBiZWFyZXJBdXRoIHJlcXVpcmVkXG4gICAgICAvLyBodHRwIGJlYXJlciBhdXRoZW50aWNhdGlvbiByZXF1aXJlZFxuICAgICAgYXdhaXQgc2V0QmVhcmVyQXV0aFRvT2JqZWN0KGxvY2FsVmFySGVhZGVyUGFyYW1ldGVyLCBjb25maWd1cmF0aW9uKTtcblxuICAgICAgbG9jYWxWYXJIZWFkZXJQYXJhbWV0ZXJbXCJDb250ZW50LVR5cGVcIl0gPSBcImFwcGxpY2F0aW9uL2pzb25cIjtcblxuICAgICAgc2V0U2VhcmNoUGFyYW1zKGxvY2FsVmFyVXJsT2JqLCBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVyKTtcbiAgICAgIGxldCBoZWFkZXJzRnJvbUJhc2VPcHRpb25zID1cbiAgICAgICAgYmFzZU9wdGlvbnMgJiYgYmFzZU9wdGlvbnMuaGVhZGVycyA/IGJhc2VPcHRpb25zLmhlYWRlcnMgOiB7fTtcbiAgICAgIGxvY2FsVmFyUmVxdWVzdE9wdGlvbnMuaGVhZGVycyA9IHtcbiAgICAgICAgLi4ubG9jYWxWYXJIZWFkZXJQYXJhbWV0ZXIsXG4gICAgICAgIC4uLmhlYWRlcnNGcm9tQmFzZU9wdGlvbnMsXG4gICAgICAgIC4uLm9wdGlvbnMuaGVhZGVyc1xuICAgICAgfTtcbiAgICAgIGxvY2FsVmFyUmVxdWVzdE9wdGlvbnMuZGF0YSA9IHNlcmlhbGl6ZURhdGFJZk5lZWRlZChcbiAgICAgICAgY2JpdEZpYXRBY2NvdW50Q3JlYXRpb25SZXF1ZXN0LFxuICAgICAgICBsb2NhbFZhclJlcXVlc3RPcHRpb25zLFxuICAgICAgICBjb25maWd1cmF0aW9uXG4gICAgICApO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICB1cmw6IHRvUGF0aFN0cmluZyhsb2NhbFZhclVybE9iaiksXG4gICAgICAgIG9wdGlvbnM6IGxvY2FsVmFyUmVxdWVzdE9wdGlvbnNcbiAgICAgIH07XG4gICAgfSxcbiAgICAvKipcbiAgICAgKlxuICAgICAqIEBzdW1tYXJ5IEdldCBhIENCSVQgYmFuayBhY2NvdW50XG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGlkIFVuaXZlcnNhbGx5IHVuaXF1ZSBpZGVudGlmaWVyIChVVUlEIHY0KSBvZiBhIHJlc291cmNlLlxuICAgICAqIEBwYXJhbSB7Kn0gW29wdGlvbnNdIE92ZXJyaWRlIGh0dHAgcmVxdWVzdCBvcHRpb24uXG4gICAgICogQHRocm93cyB7UmVxdWlyZWRFcnJvcn1cbiAgICAgKi9cbiAgICBnZXRCdXNpbmVzc0NiaXRBY2NvdW50OiBhc3luYyAoXG4gICAgICBpZDogc3RyaW5nLFxuICAgICAgb3B0aW9uczogQXhpb3NSZXF1ZXN0Q29uZmlnID0ge31cbiAgICApOiBQcm9taXNlPFJlcXVlc3RBcmdzPiA9PiB7XG4gICAgICAvLyB2ZXJpZnkgcmVxdWlyZWQgcGFyYW1ldGVyICdpZCcgaXMgbm90IG51bGwgb3IgdW5kZWZpbmVkXG4gICAgICBhc3NlcnRQYXJhbUV4aXN0cyhcImdldEJ1c2luZXNzQ2JpdEFjY291bnRcIiwgXCJpZFwiLCBpZCk7XG4gICAgICBjb25zdCBsb2NhbFZhclBhdGggPSBgL3YxL2J1c2luZXNzQWNjb3VudC9iYW5rcy9jYml0L3tpZH1gLnJlcGxhY2UoXG4gICAgICAgIGB7JHtcImlkXCJ9fWAsXG4gICAgICAgIGVuY29kZVVSSUNvbXBvbmVudChTdHJpbmcoaWQpKVxuICAgICAgKTtcbiAgICAgIC8vIHVzZSBkdW1teSBiYXNlIFVSTCBzdHJpbmcgYmVjYXVzZSB0aGUgVVJMIGNvbnN0cnVjdG9yIG9ubHkgYWNjZXB0cyBhYnNvbHV0ZSBVUkxzLlxuICAgICAgY29uc3QgbG9jYWxWYXJVcmxPYmogPSBuZXcgVVJMKGxvY2FsVmFyUGF0aCwgRFVNTVlfQkFTRV9VUkwpO1xuICAgICAgbGV0IGJhc2VPcHRpb25zO1xuICAgICAgaWYgKGNvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgYmFzZU9wdGlvbnMgPSBjb25maWd1cmF0aW9uLmJhc2VPcHRpb25zO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBsb2NhbFZhclJlcXVlc3RPcHRpb25zID0ge1xuICAgICAgICBtZXRob2Q6IFwiR0VUXCIsXG4gICAgICAgIC4uLmJhc2VPcHRpb25zLFxuICAgICAgICAuLi5vcHRpb25zXG4gICAgICB9O1xuICAgICAgY29uc3QgbG9jYWxWYXJIZWFkZXJQYXJhbWV0ZXIgPSB7fSBhcyBhbnk7XG4gICAgICBjb25zdCBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVyID0ge30gYXMgYW55O1xuXG4gICAgICAvLyBhdXRoZW50aWNhdGlvbiBiZWFyZXJBdXRoIHJlcXVpcmVkXG4gICAgICAvLyBodHRwIGJlYXJlciBhdXRoZW50aWNhdGlvbiByZXF1aXJlZFxuICAgICAgYXdhaXQgc2V0QmVhcmVyQXV0aFRvT2JqZWN0KGxvY2FsVmFySGVhZGVyUGFyYW1ldGVyLCBjb25maWd1cmF0aW9uKTtcblxuICAgICAgc2V0U2VhcmNoUGFyYW1zKGxvY2FsVmFyVXJsT2JqLCBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVyKTtcbiAgICAgIGxldCBoZWFkZXJzRnJvbUJhc2VPcHRpb25zID1cbiAgICAgICAgYmFzZU9wdGlvbnMgJiYgYmFzZU9wdGlvbnMuaGVhZGVycyA/IGJhc2VPcHRpb25zLmhlYWRlcnMgOiB7fTtcbiAgICAgIGxvY2FsVmFyUmVxdWVzdE9wdGlvbnMuaGVhZGVycyA9IHtcbiAgICAgICAgLi4ubG9jYWxWYXJIZWFkZXJQYXJhbWV0ZXIsXG4gICAgICAgIC4uLmhlYWRlcnNGcm9tQmFzZU9wdGlvbnMsXG4gICAgICAgIC4uLm9wdGlvbnMuaGVhZGVyc1xuICAgICAgfTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdXJsOiB0b1BhdGhTdHJpbmcobG9jYWxWYXJVcmxPYmopLFxuICAgICAgICBvcHRpb25zOiBsb2NhbFZhclJlcXVlc3RPcHRpb25zXG4gICAgICB9O1xuICAgIH0sXG4gICAgLyoqXG4gICAgICogR2V0IHRoZSBDQklUIHRyYW5zZmVyIGluc3RydWN0aW9ucyBpbnRvIHRoZSBDaXJjbGUgYmFuayBhY2NvdW50IGdpdmVuIHlvdXIgYmFuayBhY2NvdW50IGlkLlxuICAgICAqIEBzdW1tYXJ5IEdldCBDQklUIGluc3RydWN0aW9uc1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBpZCBVbml2ZXJzYWxseSB1bmlxdWUgaWRlbnRpZmllciAoVVVJRCB2NCkgb2YgYSByZXNvdXJjZS5cbiAgICAgKiBAcGFyYW0geyp9IFtvcHRpb25zXSBPdmVycmlkZSBodHRwIHJlcXVlc3Qgb3B0aW9uLlxuICAgICAqIEB0aHJvd3Mge1JlcXVpcmVkRXJyb3J9XG4gICAgICovXG4gICAgZ2V0QnVzaW5lc3NDYml0QWNjb3VudEluc3RydWN0aW9uczogYXN5bmMgKFxuICAgICAgaWQ6IHN0cmluZyxcbiAgICAgIG9wdGlvbnM6IEF4aW9zUmVxdWVzdENvbmZpZyA9IHt9XG4gICAgKTogUHJvbWlzZTxSZXF1ZXN0QXJncz4gPT4ge1xuICAgICAgLy8gdmVyaWZ5IHJlcXVpcmVkIHBhcmFtZXRlciAnaWQnIGlzIG5vdCBudWxsIG9yIHVuZGVmaW5lZFxuICAgICAgYXNzZXJ0UGFyYW1FeGlzdHMoXCJnZXRCdXNpbmVzc0NiaXRBY2NvdW50SW5zdHJ1Y3Rpb25zXCIsIFwiaWRcIiwgaWQpO1xuICAgICAgY29uc3QgbG9jYWxWYXJQYXRoID1cbiAgICAgICAgYC92MS9idXNpbmVzc0FjY291bnQvYmFua3MvY2JpdC97aWR9L2luc3RydWN0aW9uc2AucmVwbGFjZShcbiAgICAgICAgICBgeyR7XCJpZFwifX1gLFxuICAgICAgICAgIGVuY29kZVVSSUNvbXBvbmVudChTdHJpbmcoaWQpKVxuICAgICAgICApO1xuICAgICAgLy8gdXNlIGR1bW15IGJhc2UgVVJMIHN0cmluZyBiZWNhdXNlIHRoZSBVUkwgY29uc3RydWN0b3Igb25seSBhY2NlcHRzIGFic29sdXRlIFVSTHMuXG4gICAgICBjb25zdCBsb2NhbFZhclVybE9iaiA9IG5ldyBVUkwobG9jYWxWYXJQYXRoLCBEVU1NWV9CQVNFX1VSTCk7XG4gICAgICBsZXQgYmFzZU9wdGlvbnM7XG4gICAgICBpZiAoY29uZmlndXJhdGlvbikge1xuICAgICAgICBiYXNlT3B0aW9ucyA9IGNvbmZpZ3VyYXRpb24uYmFzZU9wdGlvbnM7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGxvY2FsVmFyUmVxdWVzdE9wdGlvbnMgPSB7XG4gICAgICAgIG1ldGhvZDogXCJHRVRcIixcbiAgICAgICAgLi4uYmFzZU9wdGlvbnMsXG4gICAgICAgIC4uLm9wdGlvbnNcbiAgICAgIH07XG4gICAgICBjb25zdCBsb2NhbFZhckhlYWRlclBhcmFtZXRlciA9IHt9IGFzIGFueTtcbiAgICAgIGNvbnN0IGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXIgPSB7fSBhcyBhbnk7XG5cbiAgICAgIC8vIGF1dGhlbnRpY2F0aW9uIGJlYXJlckF1dGggcmVxdWlyZWRcbiAgICAgIC8vIGh0dHAgYmVhcmVyIGF1dGhlbnRpY2F0aW9uIHJlcXVpcmVkXG4gICAgICBhd2FpdCBzZXRCZWFyZXJBdXRoVG9PYmplY3QobG9jYWxWYXJIZWFkZXJQYXJhbWV0ZXIsIGNvbmZpZ3VyYXRpb24pO1xuXG4gICAgICBzZXRTZWFyY2hQYXJhbXMobG9jYWxWYXJVcmxPYmosIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXIpO1xuICAgICAgbGV0IGhlYWRlcnNGcm9tQmFzZU9wdGlvbnMgPVxuICAgICAgICBiYXNlT3B0aW9ucyAmJiBiYXNlT3B0aW9ucy5oZWFkZXJzID8gYmFzZU9wdGlvbnMuaGVhZGVycyA6IHt9O1xuICAgICAgbG9jYWxWYXJSZXF1ZXN0T3B0aW9ucy5oZWFkZXJzID0ge1xuICAgICAgICAuLi5sb2NhbFZhckhlYWRlclBhcmFtZXRlcixcbiAgICAgICAgLi4uaGVhZGVyc0Zyb21CYXNlT3B0aW9ucyxcbiAgICAgICAgLi4ub3B0aW9ucy5oZWFkZXJzXG4gICAgICB9O1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICB1cmw6IHRvUGF0aFN0cmluZyhsb2NhbFZhclVybE9iaiksXG4gICAgICAgIG9wdGlvbnM6IGxvY2FsVmFyUmVxdWVzdE9wdGlvbnNcbiAgICAgIH07XG4gICAgfSxcbiAgICAvKipcbiAgICAgKlxuICAgICAqIEBzdW1tYXJ5IExpc3QgYWxsIENCSVQgYmFuayBhY2NvdW50cy5cbiAgICAgKiBAcGFyYW0geyp9IFtvcHRpb25zXSBPdmVycmlkZSBodHRwIHJlcXVlc3Qgb3B0aW9uLlxuICAgICAqIEB0aHJvd3Mge1JlcXVpcmVkRXJyb3J9XG4gICAgICovXG4gICAgbGlzdEJ1c2luZXNzQ2JpdEFjY291bnRzOiBhc3luYyAoXG4gICAgICBvcHRpb25zOiBBeGlvc1JlcXVlc3RDb25maWcgPSB7fVxuICAgICk6IFByb21pc2U8UmVxdWVzdEFyZ3M+ID0+IHtcbiAgICAgIGNvbnN0IGxvY2FsVmFyUGF0aCA9IGAvdjEvYnVzaW5lc3NBY2NvdW50L2JhbmtzL2NiaXRgO1xuICAgICAgLy8gdXNlIGR1bW15IGJhc2UgVVJMIHN0cmluZyBiZWNhdXNlIHRoZSBVUkwgY29uc3RydWN0b3Igb25seSBhY2NlcHRzIGFic29sdXRlIFVSTHMuXG4gICAgICBjb25zdCBsb2NhbFZhclVybE9iaiA9IG5ldyBVUkwobG9jYWxWYXJQYXRoLCBEVU1NWV9CQVNFX1VSTCk7XG4gICAgICBsZXQgYmFzZU9wdGlvbnM7XG4gICAgICBpZiAoY29uZmlndXJhdGlvbikge1xuICAgICAgICBiYXNlT3B0aW9ucyA9IGNvbmZpZ3VyYXRpb24uYmFzZU9wdGlvbnM7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGxvY2FsVmFyUmVxdWVzdE9wdGlvbnMgPSB7XG4gICAgICAgIG1ldGhvZDogXCJHRVRcIixcbiAgICAgICAgLi4uYmFzZU9wdGlvbnMsXG4gICAgICAgIC4uLm9wdGlvbnNcbiAgICAgIH07XG4gICAgICBjb25zdCBsb2NhbFZhckhlYWRlclBhcmFtZXRlciA9IHt9IGFzIGFueTtcbiAgICAgIGNvbnN0IGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXIgPSB7fSBhcyBhbnk7XG5cbiAgICAgIC8vIGF1dGhlbnRpY2F0aW9uIGJlYXJlckF1dGggcmVxdWlyZWRcbiAgICAgIC8vIGh0dHAgYmVhcmVyIGF1dGhlbnRpY2F0aW9uIHJlcXVpcmVkXG4gICAgICBhd2FpdCBzZXRCZWFyZXJBdXRoVG9PYmplY3QobG9jYWxWYXJIZWFkZXJQYXJhbWV0ZXIsIGNvbmZpZ3VyYXRpb24pO1xuXG4gICAgICBzZXRTZWFyY2hQYXJhbXMobG9jYWxWYXJVcmxPYmosIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXIpO1xuICAgICAgbGV0IGhlYWRlcnNGcm9tQmFzZU9wdGlvbnMgPVxuICAgICAgICBiYXNlT3B0aW9ucyAmJiBiYXNlT3B0aW9ucy5oZWFkZXJzID8gYmFzZU9wdGlvbnMuaGVhZGVycyA6IHt9O1xuICAgICAgbG9jYWxWYXJSZXF1ZXN0T3B0aW9ucy5oZWFkZXJzID0ge1xuICAgICAgICAuLi5sb2NhbFZhckhlYWRlclBhcmFtZXRlcixcbiAgICAgICAgLi4uaGVhZGVyc0Zyb21CYXNlT3B0aW9ucyxcbiAgICAgICAgLi4ub3B0aW9ucy5oZWFkZXJzXG4gICAgICB9O1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICB1cmw6IHRvUGF0aFN0cmluZyhsb2NhbFZhclVybE9iaiksXG4gICAgICAgIG9wdGlvbnM6IGxvY2FsVmFyUmVxdWVzdE9wdGlvbnNcbiAgICAgIH07XG4gICAgfVxuICB9O1xufTtcblxuLyoqXG4gKiBDQklUQXBpIC0gZnVuY3Rpb25hbCBwcm9ncmFtbWluZyBpbnRlcmZhY2VcbiAqIEBleHBvcnRcbiAqL1xuZXhwb3J0IGNvbnN0IENCSVRBcGlGcCA9IGZ1bmN0aW9uIChjb25maWd1cmF0aW9uPzogQ29uZmlndXJhdGlvbikge1xuICBjb25zdCBsb2NhbFZhckF4aW9zUGFyYW1DcmVhdG9yID0gQ0JJVEFwaUF4aW9zUGFyYW1DcmVhdG9yKGNvbmZpZ3VyYXRpb24pO1xuICByZXR1cm4ge1xuICAgIC8qKlxuICAgICAqXG4gICAgICogQHN1bW1hcnkgQ3JlYXRlIGEgQ0JJVCBiYW5rIGFjY291bnRcbiAgICAgKiBAcGFyYW0ge0NiaXRGaWF0QWNjb3VudENyZWF0aW9uUmVxdWVzdH0gW2NiaXRGaWF0QWNjb3VudENyZWF0aW9uUmVxdWVzdF1cbiAgICAgKiBAcGFyYW0geyp9IFtvcHRpb25zXSBPdmVycmlkZSBodHRwIHJlcXVlc3Qgb3B0aW9uLlxuICAgICAqIEB0aHJvd3Mge1JlcXVpcmVkRXJyb3J9XG4gICAgICovXG4gICAgYXN5bmMgY3JlYXRlQnVzaW5lc3NDYml0QWNjb3VudChcbiAgICAgIGNiaXRGaWF0QWNjb3VudENyZWF0aW9uUmVxdWVzdD86IENiaXRGaWF0QWNjb3VudENyZWF0aW9uUmVxdWVzdCxcbiAgICAgIG9wdGlvbnM/OiBBeGlvc1JlcXVlc3RDb25maWdcbiAgICApOiBQcm9taXNlPFxuICAgICAgKFxuICAgICAgICBheGlvcz86IEF4aW9zSW5zdGFuY2UsXG4gICAgICAgIGJhc2VQYXRoPzogc3RyaW5nXG4gICAgICApID0+IEF4aW9zUHJvbWlzZTxDcmVhdGVCdXNpbmVzc0NiaXRBY2NvdW50UmVzcG9uc2U+XG4gICAgPiB7XG4gICAgICBjb25zdCBsb2NhbFZhckF4aW9zQXJncyA9XG4gICAgICAgIGF3YWl0IGxvY2FsVmFyQXhpb3NQYXJhbUNyZWF0b3IuY3JlYXRlQnVzaW5lc3NDYml0QWNjb3VudChcbiAgICAgICAgICBjYml0RmlhdEFjY291bnRDcmVhdGlvblJlcXVlc3QsXG4gICAgICAgICAgb3B0aW9uc1xuICAgICAgICApO1xuICAgICAgcmV0dXJuIGNyZWF0ZVJlcXVlc3RGdW5jdGlvbihcbiAgICAgICAgbG9jYWxWYXJBeGlvc0FyZ3MsXG4gICAgICAgIGdsb2JhbEF4aW9zLFxuICAgICAgICBCQVNFX1BBVEgsXG4gICAgICAgIGNvbmZpZ3VyYXRpb25cbiAgICAgICk7XG4gICAgfSxcbiAgICAvKipcbiAgICAgKlxuICAgICAqIEBzdW1tYXJ5IEdldCBhIENCSVQgYmFuayBhY2NvdW50XG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGlkIFVuaXZlcnNhbGx5IHVuaXF1ZSBpZGVudGlmaWVyIChVVUlEIHY0KSBvZiBhIHJlc291cmNlLlxuICAgICAqIEBwYXJhbSB7Kn0gW29wdGlvbnNdIE92ZXJyaWRlIGh0dHAgcmVxdWVzdCBvcHRpb24uXG4gICAgICogQHRocm93cyB7UmVxdWlyZWRFcnJvcn1cbiAgICAgKi9cbiAgICBhc3luYyBnZXRCdXNpbmVzc0NiaXRBY2NvdW50KFxuICAgICAgaWQ6IHN0cmluZyxcbiAgICAgIG9wdGlvbnM/OiBBeGlvc1JlcXVlc3RDb25maWdcbiAgICApOiBQcm9taXNlPFxuICAgICAgKFxuICAgICAgICBheGlvcz86IEF4aW9zSW5zdGFuY2UsXG4gICAgICAgIGJhc2VQYXRoPzogc3RyaW5nXG4gICAgICApID0+IEF4aW9zUHJvbWlzZTxHZXRCdXNpbmVzc0NiaXRBY2NvdW50UmVzcG9uc2U+XG4gICAgPiB7XG4gICAgICBjb25zdCBsb2NhbFZhckF4aW9zQXJncyA9XG4gICAgICAgIGF3YWl0IGxvY2FsVmFyQXhpb3NQYXJhbUNyZWF0b3IuZ2V0QnVzaW5lc3NDYml0QWNjb3VudChpZCwgb3B0aW9ucyk7XG4gICAgICByZXR1cm4gY3JlYXRlUmVxdWVzdEZ1bmN0aW9uKFxuICAgICAgICBsb2NhbFZhckF4aW9zQXJncyxcbiAgICAgICAgZ2xvYmFsQXhpb3MsXG4gICAgICAgIEJBU0VfUEFUSCxcbiAgICAgICAgY29uZmlndXJhdGlvblxuICAgICAgKTtcbiAgICB9LFxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgQ0JJVCB0cmFuc2ZlciBpbnN0cnVjdGlvbnMgaW50byB0aGUgQ2lyY2xlIGJhbmsgYWNjb3VudCBnaXZlbiB5b3VyIGJhbmsgYWNjb3VudCBpZC5cbiAgICAgKiBAc3VtbWFyeSBHZXQgQ0JJVCBpbnN0cnVjdGlvbnNcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgVW5pdmVyc2FsbHkgdW5pcXVlIGlkZW50aWZpZXIgKFVVSUQgdjQpIG9mIGEgcmVzb3VyY2UuXG4gICAgICogQHBhcmFtIHsqfSBbb3B0aW9uc10gT3ZlcnJpZGUgaHR0cCByZXF1ZXN0IG9wdGlvbi5cbiAgICAgKiBAdGhyb3dzIHtSZXF1aXJlZEVycm9yfVxuICAgICAqL1xuICAgIGFzeW5jIGdldEJ1c2luZXNzQ2JpdEFjY291bnRJbnN0cnVjdGlvbnMoXG4gICAgICBpZDogc3RyaW5nLFxuICAgICAgb3B0aW9ucz86IEF4aW9zUmVxdWVzdENvbmZpZ1xuICAgICk6IFByb21pc2U8XG4gICAgICAoXG4gICAgICAgIGF4aW9zPzogQXhpb3NJbnN0YW5jZSxcbiAgICAgICAgYmFzZVBhdGg/OiBzdHJpbmdcbiAgICAgICkgPT4gQXhpb3NQcm9taXNlPExpc3RCdXNpbmVzc0NiaXRBY2NvdW50SW5zdHJ1Y3Rpb25zUmVzcG9uc2U+XG4gICAgPiB7XG4gICAgICBjb25zdCBsb2NhbFZhckF4aW9zQXJncyA9XG4gICAgICAgIGF3YWl0IGxvY2FsVmFyQXhpb3NQYXJhbUNyZWF0b3IuZ2V0QnVzaW5lc3NDYml0QWNjb3VudEluc3RydWN0aW9ucyhcbiAgICAgICAgICBpZCxcbiAgICAgICAgICBvcHRpb25zXG4gICAgICAgICk7XG4gICAgICByZXR1cm4gY3JlYXRlUmVxdWVzdEZ1bmN0aW9uKFxuICAgICAgICBsb2NhbFZhckF4aW9zQXJncyxcbiAgICAgICAgZ2xvYmFsQXhpb3MsXG4gICAgICAgIEJBU0VfUEFUSCxcbiAgICAgICAgY29uZmlndXJhdGlvblxuICAgICAgKTtcbiAgICB9LFxuICAgIC8qKlxuICAgICAqXG4gICAgICogQHN1bW1hcnkgTGlzdCBhbGwgQ0JJVCBiYW5rIGFjY291bnRzLlxuICAgICAqIEBwYXJhbSB7Kn0gW29wdGlvbnNdIE92ZXJyaWRlIGh0dHAgcmVxdWVzdCBvcHRpb24uXG4gICAgICogQHRocm93cyB7UmVxdWlyZWRFcnJvcn1cbiAgICAgKi9cbiAgICBhc3luYyBsaXN0QnVzaW5lc3NDYml0QWNjb3VudHMoXG4gICAgICBvcHRpb25zPzogQXhpb3NSZXF1ZXN0Q29uZmlnXG4gICAgKTogUHJvbWlzZTxcbiAgICAgIChcbiAgICAgICAgYXhpb3M/OiBBeGlvc0luc3RhbmNlLFxuICAgICAgICBiYXNlUGF0aD86IHN0cmluZ1xuICAgICAgKSA9PiBBeGlvc1Byb21pc2U8TGlzdEJ1c2luZXNzQ2JpdEFjY291bnRzUmVzcG9uc2U+XG4gICAgPiB7XG4gICAgICBjb25zdCBsb2NhbFZhckF4aW9zQXJncyA9XG4gICAgICAgIGF3YWl0IGxvY2FsVmFyQXhpb3NQYXJhbUNyZWF0b3IubGlzdEJ1c2luZXNzQ2JpdEFjY291bnRzKG9wdGlvbnMpO1xuICAgICAgcmV0dXJuIGNyZWF0ZVJlcXVlc3RGdW5jdGlvbihcbiAgICAgICAgbG9jYWxWYXJBeGlvc0FyZ3MsXG4gICAgICAgIGdsb2JhbEF4aW9zLFxuICAgICAgICBCQVNFX1BBVEgsXG4gICAgICAgIGNvbmZpZ3VyYXRpb25cbiAgICAgICk7XG4gICAgfVxuICB9O1xufTtcblxuLyoqXG4gKiBDQklUQXBpIC0gZmFjdG9yeSBpbnRlcmZhY2VcbiAqIEBleHBvcnRcbiAqL1xuZXhwb3J0IGNvbnN0IENCSVRBcGlGYWN0b3J5ID0gZnVuY3Rpb24gKFxuICBjb25maWd1cmF0aW9uPzogQ29uZmlndXJhdGlvbixcbiAgYmFzZVBhdGg/OiBzdHJpbmcsXG4gIGF4aW9zPzogQXhpb3NJbnN0YW5jZVxuKSB7XG4gIGNvbnN0IGxvY2FsVmFyRnAgPSBDQklUQXBpRnAoY29uZmlndXJhdGlvbik7XG4gIHJldHVybiB7XG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBAc3VtbWFyeSBDcmVhdGUgYSBDQklUIGJhbmsgYWNjb3VudFxuICAgICAqIEBwYXJhbSB7Q2JpdEZpYXRBY2NvdW50Q3JlYXRpb25SZXF1ZXN0fSBbY2JpdEZpYXRBY2NvdW50Q3JlYXRpb25SZXF1ZXN0XVxuICAgICAqIEBwYXJhbSB7Kn0gW29wdGlvbnNdIE92ZXJyaWRlIGh0dHAgcmVxdWVzdCBvcHRpb24uXG4gICAgICogQHRocm93cyB7UmVxdWlyZWRFcnJvcn1cbiAgICAgKi9cbiAgICBjcmVhdGVCdXNpbmVzc0NiaXRBY2NvdW50KFxuICAgICAgY2JpdEZpYXRBY2NvdW50Q3JlYXRpb25SZXF1ZXN0PzogQ2JpdEZpYXRBY2NvdW50Q3JlYXRpb25SZXF1ZXN0LFxuICAgICAgb3B0aW9ucz86IGFueVxuICAgICk6IEF4aW9zUHJvbWlzZTxDcmVhdGVCdXNpbmVzc0NiaXRBY2NvdW50UmVzcG9uc2U+IHtcbiAgICAgIHJldHVybiBsb2NhbFZhckZwXG4gICAgICAgIC5jcmVhdGVCdXNpbmVzc0NiaXRBY2NvdW50KGNiaXRGaWF0QWNjb3VudENyZWF0aW9uUmVxdWVzdCwgb3B0aW9ucylcbiAgICAgICAgLnRoZW4oKHJlcXVlc3QpID0+IHJlcXVlc3QoYXhpb3MsIGJhc2VQYXRoKSk7XG4gICAgfSxcbiAgICAvKipcbiAgICAgKlxuICAgICAqIEBzdW1tYXJ5IEdldCBhIENCSVQgYmFuayBhY2NvdW50XG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGlkIFVuaXZlcnNhbGx5IHVuaXF1ZSBpZGVudGlmaWVyIChVVUlEIHY0KSBvZiBhIHJlc291cmNlLlxuICAgICAqIEBwYXJhbSB7Kn0gW29wdGlvbnNdIE92ZXJyaWRlIGh0dHAgcmVxdWVzdCBvcHRpb24uXG4gICAgICogQHRocm93cyB7UmVxdWlyZWRFcnJvcn1cbiAgICAgKi9cbiAgICBnZXRCdXNpbmVzc0NiaXRBY2NvdW50KFxuICAgICAgaWQ6IHN0cmluZyxcbiAgICAgIG9wdGlvbnM/OiBhbnlcbiAgICApOiBBeGlvc1Byb21pc2U8R2V0QnVzaW5lc3NDYml0QWNjb3VudFJlc3BvbnNlPiB7XG4gICAgICByZXR1cm4gbG9jYWxWYXJGcFxuICAgICAgICAuZ2V0QnVzaW5lc3NDYml0QWNjb3VudChpZCwgb3B0aW9ucylcbiAgICAgICAgLnRoZW4oKHJlcXVlc3QpID0+IHJlcXVlc3QoYXhpb3MsIGJhc2VQYXRoKSk7XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIENCSVQgdHJhbnNmZXIgaW5zdHJ1Y3Rpb25zIGludG8gdGhlIENpcmNsZSBiYW5rIGFjY291bnQgZ2l2ZW4geW91ciBiYW5rIGFjY291bnQgaWQuXG4gICAgICogQHN1bW1hcnkgR2V0IENCSVQgaW5zdHJ1Y3Rpb25zXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGlkIFVuaXZlcnNhbGx5IHVuaXF1ZSBpZGVudGlmaWVyIChVVUlEIHY0KSBvZiBhIHJlc291cmNlLlxuICAgICAqIEBwYXJhbSB7Kn0gW29wdGlvbnNdIE92ZXJyaWRlIGh0dHAgcmVxdWVzdCBvcHRpb24uXG4gICAgICogQHRocm93cyB7UmVxdWlyZWRFcnJvcn1cbiAgICAgKi9cbiAgICBnZXRCdXNpbmVzc0NiaXRBY2NvdW50SW5zdHJ1Y3Rpb25zKFxuICAgICAgaWQ6IHN0cmluZyxcbiAgICAgIG9wdGlvbnM/OiBhbnlcbiAgICApOiBBeGlvc1Byb21pc2U8TGlzdEJ1c2luZXNzQ2JpdEFjY291bnRJbnN0cnVjdGlvbnNSZXNwb25zZT4ge1xuICAgICAgcmV0dXJuIGxvY2FsVmFyRnBcbiAgICAgICAgLmdldEJ1c2luZXNzQ2JpdEFjY291bnRJbnN0cnVjdGlvbnMoaWQsIG9wdGlvbnMpXG4gICAgICAgIC50aGVuKChyZXF1ZXN0KSA9PiByZXF1ZXN0KGF4aW9zLCBiYXNlUGF0aCkpO1xuICAgIH0sXG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBAc3VtbWFyeSBMaXN0IGFsbCBDQklUIGJhbmsgYWNjb3VudHMuXG4gICAgICogQHBhcmFtIHsqfSBbb3B0aW9uc10gT3ZlcnJpZGUgaHR0cCByZXF1ZXN0IG9wdGlvbi5cbiAgICAgKiBAdGhyb3dzIHtSZXF1aXJlZEVycm9yfVxuICAgICAqL1xuICAgIGxpc3RCdXNpbmVzc0NiaXRBY2NvdW50cyhcbiAgICAgIG9wdGlvbnM/OiBhbnlcbiAgICApOiBBeGlvc1Byb21pc2U8TGlzdEJ1c2luZXNzQ2JpdEFjY291bnRzUmVzcG9uc2U+IHtcbiAgICAgIHJldHVybiBsb2NhbFZhckZwXG4gICAgICAgIC5saXN0QnVzaW5lc3NDYml0QWNjb3VudHMob3B0aW9ucylcbiAgICAgICAgLnRoZW4oKHJlcXVlc3QpID0+IHJlcXVlc3QoYXhpb3MsIGJhc2VQYXRoKSk7XG4gICAgfVxuICB9O1xufTtcblxuLyoqXG4gKiBDQklUQXBpIC0gb2JqZWN0LW9yaWVudGVkIGludGVyZmFjZVxuICogQGV4cG9ydFxuICogQGNsYXNzIENCSVRBcGlcbiAqIEBleHRlbmRzIHtCYXNlQVBJfVxuICovXG5leHBvcnQgY2xhc3MgQ0JJVEFwaSBleHRlbmRzIEJhc2VBUEkge1xuICAvKipcbiAgICpcbiAgICogQHN1bW1hcnkgQ3JlYXRlIGEgQ0JJVCBiYW5rIGFjY291bnRcbiAgICogQHBhcmFtIHtDYml0RmlhdEFjY291bnRDcmVhdGlvblJlcXVlc3R9IFtjYml0RmlhdEFjY291bnRDcmVhdGlvblJlcXVlc3RdXG4gICAqIEBwYXJhbSB7Kn0gW29wdGlvbnNdIE92ZXJyaWRlIGh0dHAgcmVxdWVzdCBvcHRpb24uXG4gICAqIEB0aHJvd3Mge1JlcXVpcmVkRXJyb3J9XG4gICAqIEBtZW1iZXJvZiBDQklUQXBpXG4gICAqL1xuICBwdWJsaWMgY3JlYXRlQnVzaW5lc3NDYml0QWNjb3VudChcbiAgICBjYml0RmlhdEFjY291bnRDcmVhdGlvblJlcXVlc3Q/OiBDYml0RmlhdEFjY291bnRDcmVhdGlvblJlcXVlc3QsXG4gICAgb3B0aW9ucz86IEF4aW9zUmVxdWVzdENvbmZpZ1xuICApIHtcbiAgICByZXR1cm4gQ0JJVEFwaUZwKHRoaXMuY29uZmlndXJhdGlvbilcbiAgICAgIC5jcmVhdGVCdXNpbmVzc0NiaXRBY2NvdW50KGNiaXRGaWF0QWNjb3VudENyZWF0aW9uUmVxdWVzdCwgb3B0aW9ucylcbiAgICAgIC50aGVuKChyZXF1ZXN0KSA9PiByZXF1ZXN0KHRoaXMuYXhpb3MsIHRoaXMuYmFzZVBhdGgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAc3VtbWFyeSBHZXQgYSBDQklUIGJhbmsgYWNjb3VudFxuICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgVW5pdmVyc2FsbHkgdW5pcXVlIGlkZW50aWZpZXIgKFVVSUQgdjQpIG9mIGEgcmVzb3VyY2UuXG4gICAqIEBwYXJhbSB7Kn0gW29wdGlvbnNdIE92ZXJyaWRlIGh0dHAgcmVxdWVzdCBvcHRpb24uXG4gICAqIEB0aHJvd3Mge1JlcXVpcmVkRXJyb3J9XG4gICAqIEBtZW1iZXJvZiBDQklUQXBpXG4gICAqL1xuICBwdWJsaWMgZ2V0QnVzaW5lc3NDYml0QWNjb3VudChpZDogc3RyaW5nLCBvcHRpb25zPzogQXhpb3NSZXF1ZXN0Q29uZmlnKSB7XG4gICAgcmV0dXJuIENCSVRBcGlGcCh0aGlzLmNvbmZpZ3VyYXRpb24pXG4gICAgICAuZ2V0QnVzaW5lc3NDYml0QWNjb3VudChpZCwgb3B0aW9ucylcbiAgICAgIC50aGVuKChyZXF1ZXN0KSA9PiByZXF1ZXN0KHRoaXMuYXhpb3MsIHRoaXMuYmFzZVBhdGgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIENCSVQgdHJhbnNmZXIgaW5zdHJ1Y3Rpb25zIGludG8gdGhlIENpcmNsZSBiYW5rIGFjY291bnQgZ2l2ZW4geW91ciBiYW5rIGFjY291bnQgaWQuXG4gICAqIEBzdW1tYXJ5IEdldCBDQklUIGluc3RydWN0aW9uc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgVW5pdmVyc2FsbHkgdW5pcXVlIGlkZW50aWZpZXIgKFVVSUQgdjQpIG9mIGEgcmVzb3VyY2UuXG4gICAqIEBwYXJhbSB7Kn0gW29wdGlvbnNdIE92ZXJyaWRlIGh0dHAgcmVxdWVzdCBvcHRpb24uXG4gICAqIEB0aHJvd3Mge1JlcXVpcmVkRXJyb3J9XG4gICAqIEBtZW1iZXJvZiBDQklUQXBpXG4gICAqL1xuICBwdWJsaWMgZ2V0QnVzaW5lc3NDYml0QWNjb3VudEluc3RydWN0aW9ucyhcbiAgICBpZDogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiBBeGlvc1JlcXVlc3RDb25maWdcbiAgKSB7XG4gICAgcmV0dXJuIENCSVRBcGlGcCh0aGlzLmNvbmZpZ3VyYXRpb24pXG4gICAgICAuZ2V0QnVzaW5lc3NDYml0QWNjb3VudEluc3RydWN0aW9ucyhpZCwgb3B0aW9ucylcbiAgICAgIC50aGVuKChyZXF1ZXN0KSA9PiByZXF1ZXN0KHRoaXMuYXhpb3MsIHRoaXMuYmFzZVBhdGgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAc3VtbWFyeSBMaXN0IGFsbCBDQklUIGJhbmsgYWNjb3VudHMuXG4gICAqIEBwYXJhbSB7Kn0gW29wdGlvbnNdIE92ZXJyaWRlIGh0dHAgcmVxdWVzdCBvcHRpb24uXG4gICAqIEB0aHJvd3Mge1JlcXVpcmVkRXJyb3J9XG4gICAqIEBtZW1iZXJvZiBDQklUQXBpXG4gICAqL1xuICBwdWJsaWMgbGlzdEJ1c2luZXNzQ2JpdEFjY291bnRzKG9wdGlvbnM/OiBBeGlvc1JlcXVlc3RDb25maWcpIHtcbiAgICByZXR1cm4gQ0JJVEFwaUZwKHRoaXMuY29uZmlndXJhdGlvbilcbiAgICAgIC5saXN0QnVzaW5lc3NDYml0QWNjb3VudHMob3B0aW9ucylcbiAgICAgIC50aGVuKChyZXF1ZXN0KSA9PiByZXF1ZXN0KHRoaXMuYXhpb3MsIHRoaXMuYmFzZVBhdGgpKTtcbiAgfVxufVxuIl19