UNPKG

trimble-connect-sdk

Version:

Trimble Connect SDK for JavaScript

398 lines 104 kB
"use strict"; 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()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.Organizer = exports.DefaultOrganizerServiceUri = void 0; const browser_or_node_1 = require("browser-or-node"); const response_1 = require("./response"); const service_1 = require("./service"); exports.DefaultOrganizerServiceUri = 'https://org-api.connect.trimble.com/v1/'; const OrgServiceUriMap = new Map([ ['us-east-1', 'https://org-api.us-east-1.connect.trimble.com/v1/'], ['ap-southeast-1', 'https://org-api.ap-southeast-1.connect.trimble.com/v1/'], ['eu-west-1', 'https://org-api.eu-west-1.connect.trimble.com/v1/'], ]); function getDefaultConfiguration() { return { region: 'eu-west-1', serviceUri: exports.DefaultOrganizerServiceUri, }; } class Organizer extends service_1.Service { constructor(config) { const sanitizedConfig = Object.assign({}, config); if (sanitizedConfig && sanitizedConfig.region && sanitizedConfig.serviceUri === undefined) { if (OrgServiceUriMap.has(sanitizedConfig.region)) { sanitizedConfig.serviceUri = OrgServiceUriMap.get(sanitizedConfig.region); } else { throw new Error(`Unknown region: ${sanitizedConfig.region}, allowed values ${Array.from(OrgServiceUriMap.keys()).join(', ')}`); } } super(Object.assign(Object.assign({}, getDefaultConfiguration()), sanitizedConfig)); } getUserInfo() { return __awaiter(this, void 0, void 0, function* () { return this.makeRequest('me'); }); } listTrees(forestId, params) { return __awaiter(this, void 0, void 0, function* () { let url = `forests/${encodeURIComponent(forestId)}/trees`; if (params) { const query = []; if (params.deleted) { query.push('deleted'); } if (params.top) { query.push(`top=${encodeURIComponent(params.top.toString())}`); } if (params.skiptoken) { query.push(`skiptoken=${encodeURIComponent(params.skiptoken)}`); } if (params.fields) { query.push(`fields=${encodeURIComponent(params.fields)}`); } if (query.length > 0) { url += `?${query.join('&')}`; } } return this.makeRequest(url); }); } getTree(forestId, treeId, params) { return __awaiter(this, void 0, void 0, function* () { let url = `forests/${encodeURIComponent(forestId)}/trees/${encodeURIComponent(treeId)}`; if (params) { const query = []; if (params.deleted) { query.push('deleted'); } if (params.fields) { query.push(`fields=${encodeURIComponent(params.fields)}`); } if (query.length > 0) { url += `?${query.join('&')}`; } } return this.makeRequest(url); }); } createTree(forestId, request, params) { return __awaiter(this, void 0, void 0, function* () { let url = `forests/${encodeURIComponent(forestId)}/trees`; if (params === null || params === void 0 ? void 0 : params.fields) { url += `?fields=${encodeURIComponent(params.fields)}`; } return this.makeRequest(url, 'POST', JSON.stringify(request)); }); } updateTree(forestId, treeId, request, params) { return __awaiter(this, void 0, void 0, function* () { let url = `forests/${encodeURIComponent(forestId)}/trees/${encodeURIComponent(treeId)}`; if (params === null || params === void 0 ? void 0 : params.fields) { url += `?fields=${encodeURIComponent(params.fields)}`; } return this.makeRequest(url, 'PATCH', JSON.stringify(request)); }); } deleteTree(forestId, treeId, params) { return __awaiter(this, void 0, void 0, function* () { const url = `forests/${encodeURIComponent(forestId)}/trees/${encodeURIComponent(treeId)}`; let headers; if (params && params.v !== undefined) { headers = new Headers({ 'If-Match': `W/"${params.v}"` }); } return this.makeRequest(url, 'DELETE', undefined, headers); }); } getTreePolicy(forestId, treeId) { return __awaiter(this, void 0, void 0, function* () { const url = `forests/${encodeURIComponent(forestId)}/trees/${encodeURIComponent(treeId)}/policy`; return this.makeRequest(url); }); } putTreePolicy(forestId, treeId, policy) { return __awaiter(this, void 0, void 0, function* () { const url = `forests/${encodeURIComponent(forestId)}/trees/${encodeURIComponent(treeId)}/policy`; return this.makeRequest(url, 'PUT', JSON.stringify(policy)); }); } searchNodes(forestId, params) { return __awaiter(this, void 0, void 0, function* () { let url = params.treeId ? `forests/${encodeURIComponent(forestId)}/trees/${encodeURIComponent(params.treeId)}/search` : `forests/${encodeURIComponent(forestId)}/search`; if (params) { const query = []; if (params.deleted) { query.push('deleted'); } if (params.top) { query.push(`top=${encodeURIComponent(params.top.toString())}`); } if (params.skiptoken) { query.push(`skiptoken=${encodeURIComponent(params.skiptoken)}`); } if (params.link) { query.push(`link=${encodeURIComponent(params.link)}`); } if (params.nolinks) { query.push('nolinks'); } if (params.fields) { query.push(`fields=${encodeURIComponent(params.fields)}`); } if (query.length > 0) { url += `?${query.join('&')}`; } } return this.makeRequest(url); }); } listNodes(forestId, treeId, params) { return __awaiter(this, void 0, void 0, function* () { let url = `forests/${encodeURIComponent(forestId)}/trees/${encodeURIComponent(treeId)}/nodes`; if (params) { const query = []; if (params.deleted) { query.push('deleted'); } if (params.top) { query.push(`top=${encodeURIComponent(params.top.toString())}`); } if (params.skiptoken) { query.push(`skiptoken=${encodeURIComponent(params.skiptoken)}`); } if (params.prefix) { query.push(`prefix=${encodeURIComponent(params.prefix)}`); } if (params.nolinks) { query.push('nolinks'); } if (params.fields) { query.push(`fields=${encodeURIComponent(params.fields)}`); } if (query.length > 0) { url += `?${query.join('&')}`; } } return this.makeRequest(url); }); } listNodeVersions(forestId, treeId, nodeId, params) { return __awaiter(this, void 0, void 0, function* () { let url = `forests/${encodeURIComponent(forestId)}/trees/${encodeURIComponent(treeId)}/nodes/${encodeURIComponent(nodeId)}/versions`; if (params) { const query = []; if (params.deleted) { query.push('deleted'); } if (params.top) { query.push(`top=${encodeURIComponent(params.top.toString())}`); } if (params.skiptoken) { query.push(`skiptoken=${encodeURIComponent(params.skiptoken)}`); } if (params.nolinks) { query.push('nolinks'); } if (params.fields) { query.push(`fields=${encodeURIComponent(params.fields)}`); } if (query.length > 0) { url += `?${query.join('&')}`; } } return this.makeRequest(url); }); } getNode(forestId, treeId, nodeId, params) { return __awaiter(this, void 0, void 0, function* () { let url = `forests/${encodeURIComponent(forestId)}/trees/${encodeURIComponent(treeId)}/nodes/${encodeURIComponent(nodeId)}`; if (params) { const query = []; if (params.deleted) { query.push('deleted'); } if (params.nolinks) { query.push('nolinks'); } if (params.fields) { query.push(`fields=${encodeURIComponent(params.fields)}`); } if (query.length > 0) { url += `?${query.join('&')}`; } } return this.makeRequest(url); }); } getNodeLinks(forestId, treeId, nodeId, params) { return __awaiter(this, void 0, void 0, function* () { const url = `forests/${encodeURIComponent(forestId)}/trees/${encodeURIComponent(treeId)}/nodes/${encodeURIComponent(nodeId)}/links${params && params.deleted ? '?deleted' : ''}`; return this.makeRequest(url); }); } createNode(forestId, treeId, node, params) { return __awaiter(this, void 0, void 0, function* () { let url = `forests/${encodeURIComponent(forestId)}/trees/${encodeURIComponent(treeId)}/nodes`; if (params === null || params === void 0 ? void 0 : params.fields) { url += `?fields=${encodeURIComponent(params.fields)}`; } return this.makeRequest(url, 'POST', JSON.stringify(node)); }); } updateNode(forestId, treeId, nodeId, node, params) { return __awaiter(this, void 0, void 0, function* () { let url = `forests/${encodeURIComponent(forestId)}/trees/${encodeURIComponent(treeId)}/nodes/${encodeURIComponent(nodeId)}`; if (params === null || params === void 0 ? void 0 : params.fields) { url += `?fields=${encodeURIComponent(params.fields)}`; } return this.makeRequest(url, 'PATCH', JSON.stringify(node)); }); } deleteNode(forestId, treeId, nodeId, params) { return __awaiter(this, void 0, void 0, function* () { const url = `forests/${encodeURIComponent(forestId)}/trees/${encodeURIComponent(treeId)}/nodes/${encodeURIComponent(nodeId)}`; let headers; if (params && params.v !== undefined) { headers = new Headers({ 'If-Match': `W/"${params.v}"` }); } return this.makeRequest(url, 'DELETE', undefined, headers); }); } getNodeGeometry(forestId, treeId, nodeId, params) { return __awaiter(this, void 0, void 0, function* () { if (!browser_or_node_1.isBrowser && !browser_or_node_1.isWebWorker) { throw new Error('Not supported in NodeJS environment.'); } const url = `forests/${encodeURIComponent(forestId)}/trees/${encodeURIComponent(treeId)}/nodes/${encodeURIComponent(nodeId)}`; return this.commonGetNodeGeometry(url, !!(params && params.deleted)); }); } getNodeVersionGeometry(forestId, treeId, nodeId, version) { return __awaiter(this, void 0, void 0, function* () { if (!browser_or_node_1.isBrowser && !browser_or_node_1.isWebWorker) { throw new Error('Not supported in NodeJS environment.'); } const url = `forests/${encodeURIComponent(forestId)}/trees/${encodeURIComponent(treeId)}/nodes/${encodeURIComponent(nodeId)}/versions/${version}`; return this.commonGetNodeGeometry(url, false); }); } putNodeGeometry(forestId, treeId, nodeId, data, params) { return __awaiter(this, void 0, void 0, function* () { if (!browser_or_node_1.isBrowser && !browser_or_node_1.isWebWorker) { throw new Error('Not supported in NodeJS environment.'); } const headers = new Headers({ 'Content-Type': data.type }); if (params && params.v !== undefined) { headers.set('If-Match', `W/"${params.v}"`); } const url = `forests/${encodeURIComponent(forestId)}/trees/${encodeURIComponent(treeId)}/nodes/${encodeURIComponent(nodeId)}/geometry`; return this.request(url, 'PUT', data, headers); }); } batchGetNodes(forestId, treeId, request, params) { var _a; return __awaiter(this, void 0, void 0, function* () { (_a = request.nodes) === null || _a === void 0 ? void 0 : _a.forEach((node) => { node.forestId = forestId; node.treeId = treeId; }); return this.batchGet(request, params); }); } batchGet(request, params) { return __awaiter(this, void 0, void 0, function* () { let url = `batch-get`; if (params) { const query = []; if (params.deleted) { query.push('deleted'); } if (params.nolinks) { query.push('nolinks'); } if (params.fields) { query.push(`fields=${encodeURIComponent(params.fields)}`); } if (query.length > 0) { url += `?${query.join('&')}`; } } return this.makeRequest(url, 'POST', JSON.stringify(request)); }); } changeset(forestId, treeId, changeset, params) { return __awaiter(this, void 0, void 0, function* () { let url = `forests/${encodeURIComponent(forestId)}/trees/${encodeURIComponent(treeId)}/changeset`; if (params) { const query = []; if (params.nolinks) { query.push('nolinks'); } if (params.fields) { query.push(`fields=${encodeURIComponent(params.fields)}`); } if (query.length > 0) { url += `?${query.join('&')}`; } } return this.makeRequest(url, 'POST', JSON.stringify(changeset)); }); } changesetAsync(forestId, treeId, changesetConfig, params) { return __awaiter(this, void 0, void 0, function* () { let url = `forests/${encodeURIComponent(forestId)}/trees/${encodeURIComponent(treeId)}/changeset-async`; if (params) { const query = []; if (params.fields) { query.push(`fields=${encodeURIComponent(params.fields)}`); } if (query.length > 0) { url += `?${query.join('&')}`; } } return this.makeRequest(url, 'POST', JSON.stringify(changesetConfig)); }); } changesetStatus(changesetId) { return __awaiter(this, void 0, void 0, function* () { const url = `changeset/${encodeURIComponent(changesetId)}`; return this.makeRequest(url); }); } subscribeWS() { return __awaiter(this, void 0, void 0, function* () { const url = 'subscribe'; return this.makeRequest(url, 'GET'); }); } commonGetNodeGeometry(urlWithoutParams, includeDeleted) { return __awaiter(this, void 0, void 0, function* () { const urlParams = `?nolinks${includeDeleted ? '&deleted' : ''}`; const node = yield this.makeRequest(urlWithoutParams + urlParams); if (node.data.geometry && node.data.geometry.url) { const geometry = (yield this.request(node.data.geometry.url, 'GET', undefined, undefined, false)); if (geometry.response.status !== 204) { const blob = yield geometry.response.blob(); geometry.data = blob; return geometry; } } return new response_1.ServiceResponse(this, new Response(), undefined); }); } } exports.Organizer = Organizer; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnYW5pemVyLmpzIiwic291cmNlUm9vdCI6Ii4vIiwic291cmNlcyI6WyJvcmdhbml6ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEscURBQXlEO0FBWXpELHlDQUE2QztBQUM3Qyx1Q0FBb0M7QUFJdkIsUUFBQSwwQkFBMEIsR0FDckMseUNBQXlDLENBQUM7QUFFNUMsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsQ0FBaUI7SUFDL0MsQ0FBQyxXQUFXLEVBQUUsbURBQW1ELENBQUM7SUFDbEUsQ0FBQyxnQkFBZ0IsRUFBRSx3REFBd0QsQ0FBQztJQUM1RSxDQUFDLFdBQVcsRUFBRSxtREFBbUQsQ0FBQztDQUNuRSxDQUFDLENBQUM7QUFHSCxTQUFTLHVCQUF1QjtJQUM5QixPQUFPO1FBQ0wsTUFBTSxFQUFFLFdBQVc7UUFDbkIsVUFBVSxFQUFFLGtDQUEwQjtLQUN2QyxDQUFDO0FBQ0osQ0FBQztBQW9nQkQsTUFBYSxTQUFVLFNBQVEsaUJBQU87SUFNcEMsWUFBWSxNQUErQjtRQUN6QyxNQUFNLGVBQWUscUJBQWdDLE1BQU0sQ0FBRSxDQUFDO1FBRTlELElBQ0UsZUFBZTtZQUNmLGVBQWUsQ0FBQyxNQUFNO1lBQ3RCLGVBQWUsQ0FBQyxVQUFVLEtBQUssU0FBUyxFQUN4QztZQUNBLElBQUksZ0JBQWdCLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsRUFBRTtnQkFDaEQsZUFBZSxDQUFDLFVBQVUsR0FBRyxnQkFBZ0IsQ0FBQyxHQUFHLENBQy9DLGVBQWUsQ0FBQyxNQUFNLENBQ3ZCLENBQUM7YUFDSDtpQkFBTTtnQkFDTCxNQUFNLElBQUksS0FBSyxDQUNiLG1CQUFtQixlQUFlLENBQUMsTUFDbkMsb0JBQW9CLEtBQUssQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FDckUsQ0FBQzthQUNIO1NBQ0Y7UUFFRCxLQUFL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QXlCLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM5RCxDQUFDO0tBQUE7SUFTYSxxQkFBcUIsQ0FDakMsZ0JBQXdCLEVBQ3hCLGNBQXVCOztZQUt2QixNQUFNLFNBQVMsR0FBRyxXQUFXLGNBQWMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUVoRSxNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQ2pDLGdCQUFnQixHQUFHLFNBQVMsQ0FDN0IsQ0FBQztZQUVGLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFO2dCQUVoRCxNQUFNLFFBQVEsR0FBRyxDQUFDLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FDbEMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUN0QixLQUFLLEVBQ0wsU0FBUyxFQUNULFNBQVMsRUFDVCxLQUFLLENBQ04sQ0FBc0MsQ0FBQztnQkFHeEMsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLE1BQU0sS0FBSyxHQUFHLEVBQUU7b0JBRXBDLE1BQU0sSUFBSSxHQUFHLE1BQU0sUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztvQkFDNUMsUUFBUSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7b0JBQ3JCLE9BQU8sUUFBUSxDQUFDO2lCQUNqQjthQUNGO1lBRUQsT0FBTyxJQUFJLDBCQUFlLENBQVksSUFBSSxFQUFFLElBQUksUUFBUSxFQUFFLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDekUsQ0FBQztLQUFBO0NBQ0Y7QUEzekJELDhCQTJ6QkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc0Jyb3dzZXIsIGlzV2ViV29ya2VyIH0gZnJvbSAnYnJvd3Nlci1vci1ub2RlJztcbmltcG9ydCB7XG4gIERlbGV0ZU9wdGlvbnMsXG4gIEdldE9wdGlvbnMsXG4gIExpc3RPcHRpb25zLFxuICBQYWdlZEl0ZW1zLFxuICBSZXNvdXJjZUlkZW50aXR5V2l0aEVycm9yLFxuICBVc2VySW5mb1Jlc3BvbnNlLFxuICBXU1N1YnNjcmlwdGlvblJlc3BvbnNlLFxufSBmcm9tICcuL2NvbW1vbic7XG5pbXBvcnQgeyBDb25maWd1cmF0aW9uIH0gZnJvbSAnLi9jb25maWcnO1xuaW1wb3J0IHsgUG9saWN5IH0gZnJvbSAnLi9wb2xpY3knO1xuaW1wb3J0IHsgU2VydmljZVJlc3BvbnNlIH0gZnJvbSAnLi9yZXNwb25zZSc7XG5pbXBvcnQgeyBTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlJztcblxuLy8gLS0tLS0tLS0tLS0tLS0tIGNvbmZpZ3VyYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydCBjb25zdCBEZWZhdWx0T3JnYW5pemVyU2VydmljZVVyaSA9XG4gICdodHRwczovL29yZy1hcGkuY29ubmVjdC50cmltYmxlLmNvbS92MS8nO1xuXG5jb25zdCBPcmdTZXJ2aWNlVXJpTWFwID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oW1xuICBbJ3VzLWVhc3QtMScsICdodHRwczovL29yZy1hcGkudXMtZWFzdC0xLmNvbm5lY3QudHJpbWJsZS5jb20vdjEvJ10sXG4gIFsnYXAtc291dGhlYXN0LTEnLCAnaHR0cHM6Ly9vcmctYXBpLmFwLXNvdXRoZWFzdC0xLmNvbm5lY3QudHJpbWJsZS5jb20vdjEvJ10sXG4gIFsnZXUtd2VzdC0xJywgJ2h0dHBzOi8vb3JnLWFwaS5ldS13ZXN0LTEuY29ubmVjdC50cmltYmxlLmNvbS92MS8nXSxcbl0pO1xuXG4vKiogQGludGVybmFsICovXG5mdW5jdGlvbiBnZXREZWZhdWx0Q29uZmlndXJhdGlvbigpOiBDb25maWd1cmF0aW9uIHtcbiAgcmV0dXJuIHtcbiAgICByZWdpb246ICdldS13ZXN0LTEnLFxuICAgIHNlcnZpY2VVcmk6IERlZmF1bHRPcmdhbml6ZXJTZXJ2aWNlVXJpLFxuICB9O1xufVxuXG4vKipcbiAqIFRoZSByZXF1ZXN0IGJvZHkgZm9yIHRoZSBAc2VlIE9yZ2FuaXNlciNjcmVhdGVUcmVlIG9wZXJhdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDcmVhdGVUcmVlUmVxdWVzdCB7XG4gIC8qKiBUaGUgb3B0aW9uYWwgaWRlbnRpZmllciBmb3IgdGhlIG5ldyB0cmVlLCBpZiBub3QgcHJvdmlkZWQgc2VydmljZSB3aWxsIGdlbmVyYXRlIGFuIHVuaXF1ZSBpZGVudGlmaWVyLiAqL1xuICBpZD86IHN0cmluZztcbiAgLyoqIFRoZSBhY2Nlc3MgY29ucm9sIHBvbGljeSBkb2N1bWVudCB0byBiZSBhdHRhY2hlZCB0byB0aGUgdHJlZS4gKi9cbiAgcG9saWN5PzogUG9saWN5O1xuICAvKiogVGhlIG9wdGlvbmFsIHRyZWUgbmFtZS4gKi9cbiAgbmFtZT86IHN0cmluZztcbiAgLyoqIFRoZSBvcHRpb25hbCBkZXNjcmlwdGlvbi4gKi9cbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIC8qKiBUaGUgdHlwZSBvZiB0aGUgdHJlZSB0aGF0IGRlZmluZXMgdGhlIHN5bWFudGljLiAqL1xuICB0eXBlOiBzdHJpbmc7XG4gIC8qKiBUaGUgb3B0aW9uYWwgbm9kZSBtZXRhZGF0YS4gKi9cbiAgbWV0YWRhdGE/OiBvYmplY3Q7XG59XG5cbi8qKlxuICogVGhlIHJlcXVlc3QgcGFyYW1ldGVycyBmb3IgdGhlIEBzZWUgT3JnYW5pc2VyI2dldFRyZWUgb3BlcmF0aW9uLlxuICovXG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tZW1wdHktaW50ZXJmYWNlXG5leHBvcnQgaW50ZXJmYWNlIEdldFRyZWVPcHRpb25zIGV4dGVuZHMgR2V0T3B0aW9ucyB7XG4gIC8qKiBDb250cm9scyB3aGljaCBvcHRpb25hbCBub2RlIGF0dHJpYnV0ZXMgYXJlIHJldHVybmVkLCBjdXJyZW50bHkgb25seSBtZXRhZGF0YSBpcyBzdXBwb3J0ZWQuICovXG4gIGZpZWxkcz86IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgcmVxdWVzdCBwYXJhbWV0ZXJzIGZvciB0aGUgQHNlZSBPcmdhbmlzZXIjZ2V0Tm9kZSBvcGVyYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2V0Tm9kZU9wdGlvbnMgZXh0ZW5kcyBHZXRPcHRpb25zIHtcbiAgLyoqIENvbnRyb2xzIHdoZXRoZXIgdG8gc2VuZCBsaXN0IG9mIGxpbmsgdG9naGV0aGVyIHdpdGggdGhlIG5vZGUgZGVzY3JpcHRvci4gQnkgZGVmYXVsdCBsaW5rcyBhcmUgc2VudC4gQXBwIGNhbiByZWR1Y2UgdGhlIHBheWxvYWQgc2l6ZSBieSB1c2luZyB0aGlzIHBhcmFtZXRlci4gKi9cbiAgbm9saW5rcz86IGJvb2xlYW47XG4gIC8qKiBDb250cm9scyB3aGljaCBvcHRpb25hbCBub2RlIGF0dHJpYnV0ZXMgYXJlIHJldHVybmVkLCBjdXJyZW50bHkgb25seSBtZXRhZGF0YSBpcyBzdXBwb3J0ZWQuICovXG4gIGZpZWxkcz86IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgcmVxdWVzdCBwYXJhbWV0ZXJzIGZvciB0aGUgQHNlZSBPcmdhbmlzZXIjcHV0Tm9kZUdlb21ldHJ5IG9wZXJhdGlvbi5cbiAqIERvZXMgbm90IGV4dGVuZCBHZXRPcHRpb25zIGJlY2F1c2UgdGhlIGZsYWcgZGVmaW5lZCB0aGVyZSBoYXMgbm8gbWVhbmluZyBoZXJlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFB1dEdlb21ldHJ5T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgbGFzdCBzZWVuIHZlcnNpb24gb2YgdGhlIG5vZGUgZGVzY3JpcHRvci5cbiAgICogSWYgcHJvdmlkZWQgc2VydmljZSB3aWxsIHVzZSB0aGlzIGluZm9ybWF0aW9uIGZvciB0aGUgY29uY3VycmVuY3kgY29udHJvbCBhbmQgd2lsbCByZWZ1c2UgdG8gYXBwbHkgY2hhbmdlcyBpZiBjdXJyZW50IHZlcnNpb24gaXMgbm90IGVxdWFsIHRvIHZlcnNpb24gcHJvdmlkZWQgaW4gdGhlIHJlcXVlc3QuXG4gICAqL1xuICB2PzogbnVtYmVyO1xufVxuXG4vKipcbiAqIFRoZSBjcmVhdGUgdHJlZSBvcHRpb25zXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlVHJlZU9wdGlvbnMge1xuICAvKiogQ29udHJvbHMgd2hpY2ggb3B0aW9uYWwgbm9kZSBhdHRyaWJ1dGVzIGFyZSByZXR1cm5lZCwgY3VycmVudGx5IG9ubHkgbWV0YWRhdGEgaXMgc3VwcG9ydGVkLiAqL1xuICBmaWVsZHM/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIHJlcXVlc3QgYm9keSBmb3IgdGhlIEBzZWUgT3JnYW5pc2VyI3VwZGF0ZVRyZWUgb3BlcmF0aW9uLlxuICogQWxsIHByb3BlcnRpZXMgYXJlIG9wdGlvbmFsLCBpZiBwcm9wZXJ0eSBpcyBub3QgcHJvdmlkZWQgaW4gdGhlIHJlcXVlc3QgdGhlIHByb3BlcnR5IHdpbGwgcmV0YWluIGl0J3Mgb2xkIHZhbHVlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVwZGF0ZVRyZWVSZXF1ZXN0IHtcbiAgLyoqXG4gICAqIFRoZSBsYXN0IHNlZW4gdmVyc2lvbiBvZiB0aGUgdHJlZSBkZXNjcmlwdG9yLlxuICAgKiBJZiBwcm92aWRlZCBzZXJ2aWNlIHdpbGwgdXNlIHRoaXMgaW5mb3JtYXRpb24gZm9yIHRoZSBjb25jdXJlbmN5IGNvbnRyb2wgYW5kIHdpbGwgcmVmdXNlIHRvIGFwcGx5IGNoYW5nZXMgaWYgY3VycmVudCB2ZXJzaW9uIGlzIG5vdCBlcXVhbCB0byB2ZXJzaW9uIHByb3ZpZGVkIGluIHRoZSByZXF1ZXN0LlxuICAgKi9cbiAgdj86IG51bWJlcjtcbiAgLyoqXG4gICAqIFRoZSBhY2Nlc3MgY29ucm9sIHBvbGljeSBkb2N1bWVudCB0byBiZSBhdHRhY2hlZCB0byB0aGUgdHJlZS5cbiAgICogSWYgcHJvcGVydHkgaXMgc3BlY2lmaWVkIGNhbGxlciBtdXN0IGhhdmUgb3JnOlVwZGF0ZVRyZWVQb2xpY3kgcmlnaHQgdG8gZXhlY3V0ZSB0aGlzIG9wZXJhdGlvbiBpbiBhZGRpdGlvbiB0byBvcmc6VXBkYXRlVHJlZS5cbiAgICovXG4gIHBvbGljeT86IFBvbGljeTtcbiAgLyoqIFRoZSBuZXcgbmFtZS4gKi9cbiAgbmFtZT86IHN0cmluZztcbiAgLyoqIFRoZSBuZXcgZGVzY3JpcHRpb24uICovXG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAvKiogVGhlIG9wdGlvbmFsIG5vZGUgbWV0YWRhdGEuICovXG4gIG1ldGFkYXRhPzogb2JqZWN0O1xufVxuXG4vKipcbiAqIFRoZSB1cGRhdGUgdHJlZSBvcHRpb25zXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXBkYXRlVHJlZU9wdGlvbnMge1xuICAvKiogQ29udHJvbHMgd2hpY2ggb3B0aW9uYWwgbm9kZSBhdHRyaWJ1dGVzIGFyZSByZXR1cm5lZCwgY3VycmVudGx5IG9ubHkgbWV0YWRhdGEgaXMgc3VwcG9ydGVkLiAqL1xuICBmaWVsZHM/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIHRyZWUgZGVzY3JpcHRvciByZXR1cm5lZCBmcm9tIEBzZWUgT3JnYW5pc2VyI2NyZWF0ZVRyZWUgLCBAc2VlIE9yZ2FuaXNlciN1cGRhdGVUcmVlICwgQHNlZSBPcmdhbmlzZXIjZGVsZXRlVHJlZSBhbmQgQHNlZSBPcmdhbmlzZXIjZ2V0VHJlZSBvcGVyYXRpb25zLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRyZWVSZXNwb25zZSB7XG4gIC8qKiBUaGUgdW5pcXVlIHRyZWUgaWRlbnRpZmllci4gKi9cbiAgaWQ6IHN0cmluZztcbiAgLyoqIFRoZSBjcmVhdGlvbiB0aW1lc3RhbXAgaW4gSVNPIGZvcm1hdC4gKi9cbiAgY3JlYXRlZEF0OiBzdHJpbmc7XG4gIC8qKiBUaGUgaWRlbnRpZmllciBvZiB0aGUgcHJpbmNpcGFsIHdobyBjcmVhdGVkIHRoZSB0cmVlLiAqL1xuICBjcmVhdGVkQnk6IHN0cmluZztcbiAgLyoqIFRoZSBsYXN0IG1vZGlmaWNhdGlvbiB0aW1lc3RhbXAgaW4gSVNPIGZvcm1hdC4gKi9cbiAgbW9kaWZpZWRBdDogc3RyaW5nO1xuICAvKiogVGhlIGlkZW50aWZpZXIgb2YgdGhlIHByaW5jaWxhdCB3aG8gbGFzdCBtb2RpZmllZCB0aGUgdHJlZSBkZXNjcmlwdG9yLiAqL1xuICBtb2RpZmllZEJ5OiBzdHJpbmc7XG4gIC8qKiBUaGUgY3VycmVudCB2ZXJzaW9uIG9mIHRoZSB0cmVlIGRlc2NyaXB0b3IuICovXG4gIHY6IG51bWJlcjtcbiAgLyoqIFRoZSBhY2Nlc3MgY29ucm9sIHBvbGljeSBkb2N1bWVudCBhdHRhY2hlZCB0byB0aGUgdHJlZS4gVGhpcyBwcm9wZXJ0eSBpcyByZXR1cm5lZCBvbmx5IGlmIGNhbGxlciBoYXMgb3JnOkdldFRyZWVQb2xpY3kgcmlnaHQuICovXG4gIHBvbGljeT86IFBvbGljeTtcbiAgLyoqIFRoZSBkZWxldGlvbiBtYXJrZXIuIElmIG5vdCBwcmVzZW50IG9yIGZhbHNlIHRoZSB0cmVlIGlzIGFjdGl2ZSwgb3RoZXJ3aXNlIHRoZSB0cmVlIGlzIG1hcmtlZCBhcyBkZWxldGVkLiAqL1xuICBkZWxldGVkPzogYm9vbGVhbjtcbiAgLyoqIFRoZSB0cmVlIHNob3J0IG5hbWUuICovXG4gIG5hbWU/OiBzdHJpbmc7XG4gIC8qKiBUaGUgb3B0aW9uYWwgZGVzY3JpcHRpb24uICovXG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAvKiogVGhlIHRyZWUgdHlwZSB0aGF0IGRlZmluZXMgdGhlIHN5bWFudGljLiAqL1xuICB0eXBlOiBzdHJpbmc7XG4gIC8qKiBUaGUgY29sbGVjdGlvbiBvZiBhY3Rpb25zIGN1cnJlbnQgdXNlciBoYXMgcmlnaHRzIHRvIHBlcmZvcm0gb24gdGhpcyByZXNvdXJjZSBhdCB0aGUgbW9tZW50IHRoZSByZXNwb25zZSBpcyBnZW5lcmF0ZWQgYnkgc2VydmljZS4gTm90IHJldHVybmVkIHdoZW4gc3BlY2lmaWMgdmVyc2lvbiBpcyByZXF1ZXN0ZWQuICovXG4gIF9hY3Rpb25zPzogc3RyaW5nW107XG4gIC8qKiBUaGUgbm9kZSBtZXRhZGF0YS4gKi9cbiAgbWV0YWRhdGE/OiBvYmplY3Q7XG59XG5cbi8qKlxuICogVGhlIHJlcXVlc3QgYm9keSBmb3IgdGhlIEBzZWUgT3JnYW5pc2VyI2NyZWF0ZU5vZGUgb3BlcmF0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZU5vZGVSZXF1ZXN0IHtcbiAgLyoqIFRoZSBvcHRpb25hbCBpZGVudGlmaWVyIGZvciB0aGUgbmV3IHRyZWUsIGlmIG5vdCBwcm92aWRlZCBzZXJ2aWNlIHdpbGwgZ2VuZXJhdGUgYW4gdW5pcXVlIGlkZW50aWZpZXIuICovXG4gIGlkPzogc3RyaW5nO1xuICAvKiogVGhlIG5vZGUgbmFtZS4gVG8gcGVzZW50IGEgdHJlZS1saWtlIHN0cnVjdHVyZSB0aGlzIG5hbWUgaXMgaW50ZXJwcmV0ZWQgYXMgYSBmdWxsIHBhdGggaW4gYSB0cmVlIHdpdGggJy8nIGNoYXJhY3RlciBhcyBhIHNlcGFyYXRvciBiZXR3ZWVuIHBhdGggc2VnbWVudHMuICovXG4gIG5hbWU/OiBzdHJpbmc7XG4gIC8qKiBUaGUgb3B0aW9uYWwgY29sbGVjdGlvbiBvZiBsaW5rcyB0byByZXNvdXJjZXMgdG8gYXNzb2NpYXRlIHdpdGggdGhpcyBub2RlLiAqL1xuICBsaW5rcz86IHN0cmluZ1tdO1xuICAvKiogVGhlIG9wdGlvbmFsIG5vZGUgbWV0YWRhdGEuICovXG4gIG1ldGFkYXRhPzogb2JqZWN0O1xuICAvKiogVGhlIG9wdGlvbmFsIGdlb21ldHJ5IGRhdGEgdG8gYXR0YWNoIHRvIHRoZSBub2RlLiAqL1xuICBnZW9tZXRyeT86IHtcbiAgICAvKiogVGhlIGJhc2U2NCBlbmNvZGVkIGdlb21ldHJ5IGRhdGEuICovXG4gICAgZGF0YTogc3RyaW5nO1xuICAgIC8qKiBUaGUgY29udGVudCB0eXBlIChNSU1FKSBvZiB0aGUgZ2VvbWV0cnkgZGF0YS4gKi9cbiAgICBjb250ZW50VHlwZTogc3RyaW5nO1xuICB9O1xufVxuXG4vKipcbiAqIFRoZSBjcmVhdGUgbm9kZSBvcHRpb25zXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlTm9kZU9wdGlvbnMge1xuICAvKiogQ29udHJvbHMgd2hpY2ggb3B0aW9uYWwgbm9kZSBhdHRyaWJ1dGVzIGFyZSByZXR1cm5lZCwgY3VycmVudGx5IG9ubHkgbWV0YWRhdGEgaXMgc3VwcG9ydGVkLiAqL1xuICBmaWVsZHM/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIHJlcXVlc3QgYm9keSBmb3IgdGhlIEBzZWUgT3JnYW5pc2VyI3VwZGF0ZU5vZGUgb3BlcmF0aW9uLiBBbHNvIGtub3duIGFzIFVwc2VydE5vZGVSZXF1ZXN0LlxuICogQWxsIHByb3BlcnRpZXMgYXJlIG9wdGlvbmFsLCBpZiBwcm9wZXJ0eSBub3QgcHJvdmlkZWQgaW4gdGhlIHJlcXVlc3QgdGhlIHByb3BlcnR5IHdpbGwgcmV0YWluIGl0J3Mgb2xkIHZhbHVlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVwZGF0ZU5vZGVSZXF1ZXN0IHtcbiAgLyoqXG4gICAqIFRoZSBsYXN0IHNlZW4gdmVyc2lvbiBvZiB0aGUgdHJlZSBkZXNjcmlwdG9yLlxuICAgKiBJZiBwcm92aWRlZCBzZXJ2aWNlIHdpbGwgdXNlIHRoaXMgaW5mb3JtYXRpb24gZm9yIHRoZSBjb25jdXJlbmN5IGNvbnRyb2wgYW5kIHdpbGwgcmVmdXNlIHRvIGFwcGx5IGNoYW5nZXMgaWYgY3VycmVudCB2ZXJzaW9uIGlzIG5vdCBlcXVhbCB0byB2ZXJzaW9uIHByb3ZpZGVkIGluIHRoZSByZXF1ZXN0LlxuICAgKi9cbiAgdj86IG51bWJlcjtcbiAgLyoqIFRoZSBuZXcgbmFtZS4gKi9cbiAgbmFtZT86IHN0cmluZztcbiAgLyoqIFRoZSBuZXcgc2V0IG9mIGxpbmtzIHRvIHJlc291cmNlcy4gSWYgdGhpcyBwcm9wZXJ0eSBpcyBwcm92aWRlZCBpdCB3aWxsIG92ZXJyaWRlIGFsbCBleGlzdGluZyBsaW5rcyBhc3NvY2lhdGVkLiBGb3IgZGlmZmVyZW50aWFsIGNoYW5nZXMgdXNlIEBzZWUgYWRkIGFuZCBAc2VlIHJlbW92ZSBwcm9wZXJ0aWVzLiAqL1xuICBsaW5rcz86IHN0cmluZ1tdO1xuICAvKiogVGhlIHNldCBvZiBsaW5rcyB0byBhZGQgdG8gdGhlIGFzc29jaWF0aW9ucyBjb2xsZWN0aW9uIChAc2VlIE5vZGVSZXNwb25zZSNsaW5rcyApIGFsbCBjdXJyZW50bHkgYXNzb2NpYXRlZCBsaW5rcyByZW1haW4gdW5jaGFuZ2VkLiAqL1xuICBhZGQ/OiBzdHJpbmdbXTtcbiAgLyoqIFRoZSBzZXQgb2YgbGlua3MgdG8gYmUgcmVtb3ZlZCBmcm9tIHRvIHRoZSBhc3NvY2lhdGlvbnMgY29sbGVjdGlvbiAoQHNlZSBOb2RlUmVzcG9uc2UjbGlua3MgKS4gTGlua3MgdGhhdCBhcmUgbm90IGFzc29jaWF0ZWQgYWxyZWFkeSwgYXJlIGlnbm9yZWQuICovXG4gIHJlbW92ZT86IHN0cmluZ1tdO1xuICAvKiogVGhlIG9wdGlvbmFsIG5vZGUgbWV0YWRhdGEuICovXG4gIG1ldGFkYXRhPzogb2JqZWN0O1xuICAvKiogVGhlIG9wdGlvbmFsIGdlb21ldHJ5IGRhdGEgdG8gYXR0YWNoIHRvIHRoZSBub2RlIG9yIHJlcGxhY2UgdGhlIGV4aXN0aW5nIG9uZS4gKi9cbiAgZ2VvbWV0cnk/OiB7XG4gICAgLyoqIFRoZSBiYXNlNjQgZW5jb2RlZCBnZW9tZXRyeSBkYXRhLiBUbyByZW1vdmUgdGhlIGdlb21ldHJ5IGZyb20gdGhlIG5vZGUgcGFzcyBhbiBlbXB0eSBzdHJpbmcuICovXG4gICAgZGF0YTogc3RyaW5nO1xuICAgIC8qKiBUaGUgY29udGVudCB0eXBlIChNSU1FKSBvZiB0aGUgZ2VvbWV0cnkgZGF0YS4gKi9cbiAgICBjb250ZW50VHlwZTogc3RyaW5nO1xuICB9O1xufVxuXG4vKipcbiAqIFRoZSB1cGRhdGUgbm9kZSBvcHRpb25zXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXBkYXRlTm9kZU9wdGlvbnMge1xuICAvKiogQ29udHJvbHMgd2hpY2ggb3B0aW9uYWwgbm9kZSBhdHRyaWJ1dGVzIGFyZSByZXR1cm5lZCwgY3VycmVudGx5IG9ubHkgbWV0YWRhdGEgaXMgc3VwcG9ydGVkLiAqL1xuICBmaWVsZHM/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIHRyZWUgZGVzY3JpcHRvciByZXR1cm5lZCBmcm9tIEBzZWUgT3JnYW5pc2VyI2NyZWF0ZU5vZGUsIEBzZWUgT3JnYW5pc2VyI3VwZGF0ZU5vZGUsIEBzZWUgT3JnYW5pc2VyI2RlbGV0ZU5vZGUgYW5kIEBzZWUgT3JnYW5pc2VyI2dldE5vZGUgb3BlcmF0aW9ucy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOb2RlUmVzcG9uc2Uge1xuICAvKiogVGhlIGZvcmVzdCBpZGVudGlmaWVyLiAqL1xuICBmb3Jlc3RJZDogc3RyaW5nO1xuICAvKiogVGhlIHRyZWUgaWRlbnRpZmllci4gKi9cbiAgdHJlZUlkOiBzdHJpbmc7XG4gIC8qKiBUaGUgdW5pcXVlIG5vZGUgaWRlbnRpZmllci4gKi9cbiAgaWQ6IHN0cmluZztcbiAgLyoqIFRoZSBjcmVhdGlvbiB0aW1lc3RhbXAgaW4gSVNPIGZvcm1hdC4gKi9cbiAgY3JlYXRlZEF0OiBzdHJpbmc7XG4gIC8qKiBUaGUgaWRlbnRpZmllciBvZiB0aGUgcHJpbmNpcGFsIHdobyBjcmVhdGVkIHRoZSBub2RlLiAqL1xuICBjcmVhdGVkQnk6IHN0cmluZztcbiAgLyoqIFRoZSBsYXN0IG1vZGlmaWNhdGlvbiB0aW1lc3RhbXAgaW4gSVNPIGZvcm1hdC4gKi9cbiAgbW9kaWZpZWRBdDogc3RyaW5nO1xuICAvKiogVGhlIGlkZW50aWZpZXIgb2YgdGhlIHByaW5jaWxhdCB3aG8gbGFzdCBtb2RpZmllZCB0aGUgbm9kZS4gKi9cbiAgbW9kaWZpZWRCeTogc3RyaW5nO1xuICAvKiogVGhlIHZlcnNpb24gb2YgdGhlIG5vZGUuICovXG4gIHY6IG51bWJlcjtcbiAgLyoqIFRoZSBkZWxldGlvbiBtYXJrZXIuIElmIG5vdCBwcmVzZW50IG9yIGZhbHNlIHRoZSBub2RlIGlzIGFjdGl2ZSwgb3RoZXJ3aXNlIHRoZSBub2RlIGlzIG1hcmtlZCBhcyBkZWxldGVkLiAqL1xuICBkZWxldGVkPzogYm9vbGVhbjtcbiAgLyoqIFRoZSBuYW1lLiAqL1xuICBuYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgY29sbGVjdGlvbiBvZiBsaW5rcyB0byByZXNvdXJjZXMgdG8gYXNzb2NpYXRlIHdpdGggdGhpcyBub2RlLiBNaWdodCBiZSBhYnNlbnQgaWYgY2xpZW50IHJlcXVlc3RlZCB0byBza2lwIHRoaXMgcHJvcGVydHkgZnJvbSB0aGUgcmVzcG9uc2UuXG4gICAqIElmIHByb3BlcnR5IGlzIHJlcXVlc3RlZCBhbmQgdGhlcmUgYXJlIG5vIGFzc29jaWF0aW9ucyB0aGVuIGVtcHR5IGFycmF5IGlzIHJldHVybmVkLlxuICAgKiBJbiBjYXNlIG9mIGV4dGVybmFsaXplZCBsaW5rcyB0aGlzIHByb3BlcnR5IGlzIG5vdCByZXR1cm5lZC5cbiAgICovXG4gIGxpbmtzPzogc3RyaW5nW107XG4gIC8qKiBUaGUgbnVtYmVyIG9mIGxpbmtzIGFzc29jaWF0ZWQgd2l0aCB0aGUgbm9kZS4gKi9cbiAgY291bnQ6IG51bWJlcjtcbiAgLyoqIFVSTCB0byBleHRlcm5hbGl6ZWQgbGlua3MsIGlmIHRoYXQncyB0aGUgY2FzZS4gVGhpcyBpcyByZXR1cm5lZCBldmVuIHdoZW4gdGhlIG5vbGlua3Mgb3B0aW9uIHdhcyB1c2VkIGluIHRoZSByZXF1ZXN0LiAqL1xuICBsaW5rc1VybD86IHN0cmluZztcbiAgLyoqIFRoZSBjb2xsZWN0aW9uIG9mIGFjdGlvbnMgY3VycmVudCB1c2VyIGhhcyByaWdodHMgdG8gcGVyZm9ybSBvbiB0aGlzIHJlc291cmNlIGF0IHRoZSBtb21lbnQgdGhlIHJlc3BvbnNlIGlzIGdlbmVyYXRlZCBieSBzZXJ2aWNlLiBOb3QgcmV0dXJuZWQgd2hlbiBzcGVjaWZpYyB2ZXJzaW9uIGlzIHJlcXVlc3RlZC4gKi9cbiAgX2FjdGlvbnM/OiBzdHJpbmdbXTtcbiAgLyoqIFRoZSBub2RlIG1ldGFkYXRhLiAqL1xuICBtZXRhZGF0YT86IG9iamVjdDtcbiAgLyoqIFRoZSBhc3NvY2lhdGVkIGdlb21ldHJ5IGluZm9ybWF0aW9uLCBpZiBleGlzdHMgZm9yIHRoaXMgbm9kZS4gRG8gbm90IHN0b3JlIHRoaXMgZm9yIGEgbG9uZ2VyIHRpbWUgKHNlZSB1cmwgcHJvcGVydHkpLiAqL1xuICBnZW9tZXRyeT86IHtcbiAgICAvKiogVGhlIGNvbnRlbnQgdHlwZSAoTUlNRSkgb2YgdGhlIGdlb21ldHJ5IGRhdGEuICovXG4gICAgY29udGVudFR5cGU6IHN0cmluZztcbiAgICAvKiogVGhlIHVybCB0byBkb3dubG9hZCBnZW9tZXRyeSBkYXRhLiBJdCBoYXMgYW4gZXhwaXJhdGlvbiB0aW1lLCBub3Qgc3VpdGFibGUgZm9yIHZlcnkgZGVsYXllZCBkb3dubG9hZHMuIFRvIGJlIHVzZWQgYXMgaXMsIG5vIGFkZGl0aW9uYWwgaGVhZGVycy4gKi9cbiAgICB1cmw6IHN0cmluZztcbiAgfTtcbn1cblxuLyoqXG4gKiBUaGUgZGUtc2VyaWFsaXplZCBkYXRhIHJldHVybmVkIGZyb20gdGhlIHJlcXVlc3Qgd2l0aCBsaXN0IG9mIHRyZWUgZGVzY3JpcHRvcnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGlzdFRyZWVzUmVzcG9uc2UgZXh0ZW5kcyBQYWdlZEl0ZW1zPFRyZWVSZXNwb25zZT4geyB9XG5cbi8qKlxuICogVGhlIGRlLXNlcmlhbGl6ZWQgZGF0YSByZXR1cm5lZCBmcm9tIHRoZSByZXF1ZXN0IHdpdGggbGlzdCBvZiBub2Rlcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMaXN0Tm9kZXNSZXNwb25zZSBleHRlbmRzIFBhZ2VkSXRlbXM8Tm9kZVJlc3BvbnNlPiB7IH1cblxuLyoqXG4gKiBUaGUgc2VhcmNoIHRyZWVzIEFQSSBwYXJhbWV0ZXJzLlxuICovXG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tZW1wdHktaW50ZXJmYWNlXG5leHBvcnQ