trimble-connect-sdk
Version:
Trimble Connect SDK for JavaScript
400 lines • 105 kB
JavaScript
"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/'],
['ap-southeast-2', 'https://org-api.ap-southeast-2.connect.trimble.com/v1/'],
['eu-west-1', 'https://org-api.eu-west-1.connect.trimble.com/v1/'],
['eu-west-2', 'https://org-api.eu-west-2.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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnYW5pemVyLmpzIiwic291cmNlUm9vdCI6Ii4vIiwic291cmNlcyI6WyJvcmdhbml6ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEscURBQXlEO0FBWXpELHlDQUE2QztBQUM3Qyx1Q0FBb0M7QUFJdkIsUUFBQSwwQkFBMEIsR0FDckMseUNBQXlDLENBQUM7QUFFNUMsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsQ0FBaUI7SUFDL0MsQ0FBQyxXQUFXLEVBQUUsbURBQW1ELENBQUM7SUFDbEUsQ0FBQyxnQkFBZ0IsRUFBRSx3REFBd0QsQ0FBQztJQUM1RSxDQUFDLGdCQUFnQixFQUFFLHdEQUF3RCxDQUFDO0lBQzVFLENBQUMsV0FBVyxFQUFFLG1EQUFtRCxDQUFDO0lBQ2xFLENBQUMsV0FBVyxFQUFFLG1EQUFtRCxDQUFDO0NBQ25FLENBQUMsQ0FBQztBQUdILFNBQVMsdUJBQXVCO0lBQzlCLE9BQU87UUFDTCxNQUFNLEVBQUUsV0FBVztRQUNuQixVQUFVLEVBQUUsa0NBQTBCO0tBQ3ZDLENBQUM7QUFDSixDQUFDO0FBb2dCRCxNQUFhLFNBQVUsU0FBUSxpQkFBTztJQU1wQyxZQUFZLE1BQStCO1FBQ3pDLE1BQU0sZUFBZSxxQkFBZ0MsTUFBTSxDQUFFLENBQUM7UUFFOUQsSUFDRSxlQUFlO1lBQ2YsZUFBZSxDQUFDLE1BQU07WUFDdEIsZUFBZSxDQUFDLFVBQVUsS0FBSyxTQUFTLEVBQ3hDO1lBQ0EsSUFBSSxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxFQUFFO2dCQUNoRCxlQUFlLENBQUMsVUFBVSxHQUFHLGdCQUFnQixDQUFDLEdBQUcsQ0FDL0MsZUFBZSxDQUFDLE1BQU0sQ0FDdkIsQ0FBQzthQUNIO2lCQUFNO2dCQUNMLE1BQU0sSUFBSSxLQUFLLENBQ2IsbUJBQW1CLGVBQWUsQ0FBQyxNQUNuQyxvQkFBb0IsS0FBSyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVB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T1ksV0FBVzs7WUFDdEIsTUFBTSxHQUFHLEdBQUcsV0FBVyxDQUFDO1lBQ3hCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBeUIsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzlELENBQUM7S0FBQTtJQVNhLHFCQUFxQixDQUNqQyxnQkFBd0IsRUFDeEIsY0FBdUI7O1lBS3ZCLE1BQU0sU0FBUyxHQUFHLFdBQVcsY0FBYyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBRWhFLE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FDakMsZ0JBQWdCLEdBQUcsU0FBUyxDQUM3QixDQUFDO1lBRUYsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUU7Z0JBRWhELE1BQU0sUUFBUSxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUNsQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQ3RCLEtBQUssRUFDTCxTQUFTLEVBQ1QsU0FBUyxFQUNULEtBQUssQ0FDTixDQUFzQyxDQUFDO2dCQUd4QyxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxLQUFLLEdBQUcsRUFBRTtvQkFFcEMsTUFBTSxJQUFJLEdBQUcsTUFBTSxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO29CQUM1QyxRQUFRLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztvQkFDckIsT0FBTyxRQUFRLENBQUM7aUJBQ2pCO2FBQ0Y7WUFFRCxPQUFPLElBQUksMEJBQWUsQ0FBWSxJQUFJLEVBQUUsSUFBSSxRQUFRLEVBQUUsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUN6RSxDQUFDO0tBQUE7Q0FDRjtBQTN6QkQsOEJBMnpCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzQnJvd3NlciwgaXNXZWJXb3JrZXIgfSBmcm9tICdicm93c2VyLW9yLW5vZGUnO1xuaW1wb3J0IHtcbiAgRGVsZXRlT3B0aW9ucyxcbiAgR2V0T3B0aW9ucyxcbiAgTGlzdE9wdGlvbnMsXG4gIFBhZ2VkSXRlbXMsXG4gIFJlc291cmNlSWRlbnRpdHlXaXRoRXJyb3IsXG4gIFVzZXJJbmZvUmVzcG9uc2UsXG4gIFdTU3Vic2NyaXB0aW9uUmVzcG9uc2UsXG59IGZyb20gJy4vY29tbW9uJztcbmltcG9ydCB7IENvbmZpZ3VyYXRpb24gfSBmcm9tICcuL2NvbmZpZyc7XG5pbXBvcnQgeyBQb2xpY3kgfSBmcm9tICcuL3BvbGljeSc7XG5pbXBvcnQgeyBTZXJ2aWNlUmVzcG9uc2UgfSBmcm9tICcuL3Jlc3BvbnNlJztcbmltcG9ydCB7IFNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2UnO1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0gY29uZmlndXJhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IGNvbnN0IERlZmF1bHRPcmdhbml6ZXJTZXJ2aWNlVXJpID1cbiAgJ2h0dHBzOi8vb3JnLWFwaS5jb25uZWN0LnRyaW1ibGUuY29tL3YxLyc7XG5cbmNvbnN0IE9yZ1NlcnZpY2VVcmlNYXAgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPihbXG4gIFsndXMtZWFzdC0xJywgJ2h0dHBzOi8vb3JnLWFwaS51cy1lYXN0LTEuY29ubmVjdC50cmltYmxlLmNvbS92MS8nXSxcbiAgWydhcC1zb3V0aGVhc3QtMScsICdodHRwczovL29yZy1hcGkuYXAtc291dGhlYXN0LTEuY29ubmVjdC50cmltYmxlLmNvbS92MS8nXSxcbiAgWydhcC1zb3V0aGVhc3QtMicsICdodHRwczovL29yZy1hcGkuYXAtc291dGhlYXN0LTIuY29ubmVjdC50cmltYmxlLmNvbS92MS8nXSxcbiAgWydldS13ZXN0LTEnLCAnaHR0cHM6Ly9vcmctYXBpLmV1LXdlc3QtMS5jb25uZWN0LnRyaW1ibGUuY29tL3YxLyddLFxuICBbJ2V1LXdlc3QtMicsICdodHRwczovL29yZy1hcGkuZXUtd2VzdC0yLmNvbm5lY3QudHJpbWJsZS5jb20vdjEvJ10sXG5dKTtcblxuLyoqIEBpbnRlcm5hbCAqL1xuZnVuY3Rpb24gZ2V0RGVmYXVsdENvbmZpZ3VyYXRpb24oKTogQ29uZmlndXJhdGlvbiB7XG4gIHJldHVybiB7XG4gICAgcmVnaW9uOiAnZXUtd2VzdC0xJyxcbiAgICBzZXJ2aWNlVXJpOiBEZWZhdWx0T3JnYW5pemVyU2VydmljZVVyaSxcbiAgfTtcbn1cblxuLyoqXG4gKiBUaGUgcmVxdWVzdCBib2R5IGZvciB0aGUgQHNlZSBPcmdhbml6ZXIjY3JlYXRlVHJlZSBvcGVyYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlVHJlZVJlcXVlc3Qge1xuICAvKiogVGhlIG9wdGlvbmFsIGlkZW50aWZpZXIgZm9yIHRoZSBuZXcgdHJlZSwgaWYgbm90IHByb3ZpZGVkIHNlcnZpY2Ugd2lsbCBnZW5lcmF0ZSBhbiB1bmlxdWUgaWRlbnRpZmllci4gKi9cbiAgaWQ/OiBzdHJpbmc7XG4gIC8qKiBUaGUgYWNjZXNzIGNvbnRyb2wgcG9saWN5IGRvY3VtZW50IHRvIGJlIGF0dGFjaGVkIHRvIHRoZSB0cmVlLiAqL1xuICBwb2xpY3k/OiBQb2xpY3k7XG4gIC8qKiBUaGUgb3B0aW9uYWwgdHJlZSBuYW1lLiAqL1xuICBuYW1lPzogc3RyaW5nO1xuICAvKiogVGhlIG9wdGlvbmFsIGRlc2NyaXB0aW9uLiAqL1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgLyoqIFRoZSB0eXBlIG9mIHRoZSB0cmVlIHRoYXQgZGVmaW5lcyB0aGUgc2VtYW50aWMuICovXG4gIHR5cGU6IHN0cmluZztcbiAgLyoqIFRoZSBvcHRpb25hbCBub2RlIG1ldGFkYXRhLiAqL1xuICBtZXRhZGF0YT86IG9iamVjdDtcbn1cblxuLyoqXG4gKiBUaGUgcmVxdWVzdCBwYXJhbWV0ZXJzIGZvciB0aGUgQHNlZSBPcmdhbml6ZXIjZ2V0VHJlZSBvcGVyYXRpb24uXG4gKi9cbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1lbXB0eS1pbnRlcmZhY2VcbmV4cG9ydCBpbnRlcmZhY2UgR2V0VHJlZU9wdGlvbnMgZXh0ZW5kcyBHZXRPcHRpb25zIHtcbiAgLyoqIENvbnRyb2xzIHdoaWNoIG9wdGlvbmFsIG5vZGUgYXR0cmlidXRlcyBhcmUgcmV0dXJuZWQsIGN1cnJlbnRseSBvbmx5IG1ldGFkYXRhIGlzIHN1cHBvcnRlZC4gKi9cbiAgZmllbGRzPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSByZXF1ZXN0IHBhcmFtZXRlcnMgZm9yIHRoZSBAc2VlIE9yZ2FuaXplciNnZXROb2RlIG9wZXJhdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHZXROb2RlT3B0aW9ucyBleHRlbmRzIEdldE9wdGlvbnMge1xuICAvKiogQ29udHJvbHMgd2hldGhlciB0byBzZW5kIGxpc3Qgb2YgbGluayB0b2dldGhlciB3aXRoIHRoZSBub2RlIGRlc2NyaXB0b3IuIEJ5IGRlZmF1bHQgbGlua3MgYXJlIHNlbnQuIEFwcCBjYW4gcmVkdWNlIHRoZSBwYXlsb2FkIHNpemUgYnkgdXNpbmcgdGhpcyBwYXJhbWV0ZXIuICovXG4gIG5vbGlua3M/OiBib29sZWFuO1xuICAvKiogQ29udHJvbHMgd2hpY2ggb3B0aW9uYWwgbm9kZSBhdHRyaWJ1dGVzIGFyZSByZXR1cm5lZCwgY3VycmVudGx5IG9ubHkgbWV0YWRhdGEgaXMgc3VwcG9ydGVkLiAqL1xuICBmaWVsZHM/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIHJlcXVlc3QgcGFyYW1ldGVycyBmb3IgdGhlIEBzZWUgT3JnYW5pemVyI3B1dE5vZGVHZW9tZXRyeSBvcGVyYXRpb24uXG4gKiBEb2VzIG5vdCBleHRlbmQgR2V0T3B0aW9ucyBiZWNhdXNlIHRoZSBmbGFnIGRlZmluZWQgdGhlcmUgaGFzIG5vIG1lYW5pbmcgaGVyZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQdXRHZW9tZXRyeU9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIGxhc3Qgc2VlbiB2ZXJzaW9uIG9mIHRoZSBub2RlIGRlc2NyaXB0b3IuXG4gICAqIElmIHByb3ZpZGVkIHNlcnZpY2Ugd2lsbCB1c2UgdGhpcyBpbmZvcm1hdGlvbiBmb3IgdGhlIGNvbmN1cnJlbmN5IGNvbnRyb2wgYW5kIHdpbGwgcmVmdXNlIHRvIGFwcGx5IGNoYW5nZXMgaWYgY3VycmVudCB2ZXJzaW9uIGlzIG5vdCBlcXVhbCB0byB2ZXJzaW9uIHByb3ZpZGVkIGluIHRoZSByZXF1ZXN0LlxuICAgKi9cbiAgdj86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBUaGUgY3JlYXRlIHRyZWUgb3B0aW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZVRyZWVPcHRpb25zIHtcbiAgLyoqIENvbnRyb2xzIHdoaWNoIG9wdGlvbmFsIG5vZGUgYXR0cmlidXRlcyBhcmUgcmV0dXJuZWQsIGN1cnJlbnRseSBvbmx5IG1ldGFkYXRhIGlzIHN1cHBvcnRlZC4gKi9cbiAgZmllbGRzPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSByZXF1ZXN0IGJvZHkgZm9yIHRoZSBAc2VlIE9yZ2FuaXplciN1cGRhdGVUcmVlIG9wZXJhdGlvbi5cbiAqIEFsbCBwcm9wZXJ0aWVzIGFyZSBvcHRpb25hbCwgaWYgcHJvcGVydHkgaXMgbm90IHByb3ZpZGVkIGluIHRoZSByZXF1ZXN0IHRoZSBwcm9wZXJ0eSB3aWxsIHJldGFpbiBpdCdzIG9sZCB2YWx1ZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVcGRhdGVUcmVlUmVxdWVzdCB7XG4gIC8qKlxuICAgKiBUaGUgbGFzdCBzZWVuIHZlcnNpb24gb2YgdGhlIHRyZWUgZGVzY3JpcHRvci5cbiAgICogSWYgcHJvdmlkZWQgc2VydmljZSB3aWxsIHVzZSB0aGlzIGluZm9ybWF0aW9uIGZvciB0aGUgY29uY3VycmVuY3kgY29udHJvbCBhbmQgd2lsbCByZWZ1c2UgdG8gYXBwbHkgY2hhbmdlcyBpZiBjdXJyZW50IHZlcnNpb24gaXMgbm90IGVxdWFsIHRvIHZlcnNpb24gcHJvdmlkZWQgaW4gdGhlIHJlcXVlc3QuXG4gICAqL1xuICB2PzogbnVtYmVyO1xuICAvKipcbiAgICogVGhlIGFjY2VzcyBjb250cm9sIHBvbGljeSBkb2N1bWVudCB0byBiZSBhdHRhY2hlZCB0byB0aGUgdHJlZS5cbiAgICogSWYgcHJvcGVydHkgaXMgc3BlY2lmaWVkIGNhbGxlciBtdXN0IGhhdmUgb3JnOlVwZGF0ZVRyZWVQb2xpY3kgcmlnaHQgdG8gZXhlY3V0ZSB0aGlzIG9wZXJhdGlvbiBpbiBhZGRpdGlvbiB0byBvcmc6VXBkYXRlVHJlZS5cbiAgICovXG4gIHBvbGljeT86IFBvbGljeTtcbiAgLyoqIFRoZSBuZXcgbmFtZS4gKi9cbiAgbmFtZT86IHN0cmluZztcbiAgLyoqIFRoZSBuZXcgZGVzY3JpcHRpb24uICovXG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAvKiogVGhlIG9wdGlvbmFsIG5vZGUgbWV0YWRhdGEuICovXG4gIG1ldGFkYXRhPzogb2JqZWN0O1xufVxuXG4vKipcbiAqIFRoZSB1cGRhdGUgdHJlZSBvcHRpb25zXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXBkYXRlVHJlZU9wdGlvbnMge1xuICAvKiogQ29udHJvbHMgd2hpY2ggb3B0aW9uYWwgbm9kZSBhdHRyaWJ1dGVzIGFyZSByZXR1cm5lZCwgY3VycmVudGx5IG9ubHkgbWV0YWRhdGEgaXMgc3VwcG9ydGVkLiAqL1xuICBmaWVsZHM/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIHRyZWUgZGVzY3JpcHRvciByZXR1cm5lZCBmcm9tIEBzZWUgT3JnYW5pemVyI2NyZWF0ZVRyZWUgLCBAc2VlIE9yZ2FuaXplciN1cGRhdGVUcmVlICwgQHNlZSBPcmdhbml6ZXIjZGVsZXRlVHJlZSBhbmQgQHNlZSBPcmdhbml6ZXIjZ2V0VHJlZSBvcGVyYXRpb25zLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRyZWVSZXNwb25zZSB7XG4gIC8qKiBUaGUgdW5pcXVlIHRyZWUgaWRlbnRpZmllci4gKi9cbiAgaWQ6IHN0cmluZztcbiAgLyoqIFRoZSBjcmVhdGlvbiB0aW1lc3RhbXAgaW4gSVNPIGZvcm1hdC4gKi9cbiAgY3JlYXRlZEF0OiBzdHJpbmc7XG4gIC8qKiBUaGUgaWRlbnRpZmllciBvZiB0aGUgcHJpbmNpcGFsIHdobyBjcmVhdGVkIHRoZSB0cmVlLiAqL1xuICBjcmVhdGVkQnk6IHN0cmluZztcbiAgLyoqIFRoZSBsYXN0IG1vZGlmaWNhdGlvbiB0aW1lc3RhbXAgaW4gSVNPIGZvcm1hdC4gKi9cbiAgbW9kaWZpZWRBdDogc3RyaW5nO1xuICAvKiogVGhlIGlkZW50aWZpZXIgb2YgdGhlIHByaW5jaXBhbCB3aG8gbGFzdCBtb2RpZmllZCB0aGUgdHJlZSBkZXNjcmlwdG9yLiAqL1xuICBtb2RpZmllZEJ5OiBzdHJpbmc7XG4gIC8qKiBUaGUgY3VycmVudCB2ZXJzaW9uIG9mIHRoZSB0cmVlIGRlc2NyaXB0b3IuICovXG4gIHY6IG51bWJlcjtcbiAgLyoqIFRoZSBhY2Nlc3MgY29udHJvbCBwb2xpY3kgZG9jdW1lbnQgYXR0YWNoZWQgdG8gdGhlIHRyZWUuIFRoaXMgcHJvcGVydHkgaXMgcmV0dXJuZWQgb25seSBpZiBjYWxsZXIgaGFzIG9yZzpHZXRUcmVlUG9saWN5IHJpZ2h0LiAqL1xuICBwb2xpY3k/OiBQb2xpY3k7XG4gIC8qKiBUaGUgZGVsZXRpb24gbWFya2VyLiBJZiBub3QgcHJlc2VudCBvciBmYWxzZSB0aGUgdHJlZSBpcyBhY3RpdmUsIG90aGVyd2lzZSB0aGUgdHJlZSBpcyBtYXJrZWQgYXMgZGVsZXRlZC4gKi9cbiAgZGVsZXRlZD86IGJvb2xlYW47XG4gIC8qKiBUaGUgdHJlZSBzaG9ydCBuYW1lLiAqL1xuICBuYW1lPzogc3RyaW5nO1xuICAvKiogVGhlIG9wdGlvbmFsIGRlc2NyaXB0aW9uLiAqL1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgLyoqIFRoZSB0cmVlIHR5cGUgdGhhdCBkZWZpbmVzIHRoZSBzZW1hbnRpYy4gKi9cbiAgdHlwZTogc3RyaW5nO1xuICAvKiogVGhlIGNvbGxlY3Rpb24gb2YgYWN0aW9ucyBjdXJyZW50IHVzZXIgaGFzIHJpZ2h0cyB0byBwZXJmb3JtIG9uIHRoaXMgcmVzb3VyY2UgYXQgdGhlIG1vbWVudCB0aGUgcmVzcG9uc2UgaXMgZ2VuZXJhdGVkIGJ5IHNlcnZpY2UuIE5vdCByZXR1cm5lZCB3aGVuIHNwZWNpZmljIHZlcnNpb24gaXMgcmVxdWVzdGVkLiAqL1xuICBfYWN0aW9ucz86IHN0cmluZ1tdO1xuICAvKiogVGhlIG5vZGUgbWV0YWRhdGEuICovXG4gIG1ldGFkYXRhPzogb2JqZWN0O1xufVxuXG4vKipcbiAqIFRoZSByZXF1ZXN0IGJvZHkgZm9yIHRoZSBAc2VlIE9yZ2FuaXplciNjcmVhdGVOb2RlIG9wZXJhdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDcmVhdGVOb2RlUmVxdWVzdCB7XG4gIC8qKiBUaGUgb3B0aW9uYWwgaWRlbnRpZmllciBmb3IgdGhlIG5ldyB0cmVlLCBpZiBub3QgcHJvdmlkZWQgc2VydmljZSB3aWxsIGdlbmVyYXRlIGFuIHVuaXF1ZSBpZGVudGlmaWVyLiAqL1xuICBpZD86IHN0cmluZztcbiAgLyoqIFRoZSBub2RlIG5hbWUuIFRvIHByZXNlbnQgYSB0cmVlLWxpa2Ugc3RydWN0dXJlIHRoaXMgbmFtZSBpcyBpbnRlcnByZXRlZCBhcyBhIGZ1bGwgcGF0aCBpbiBhIHRyZWUgd2l0aCAnLycgY2hhcmFjdGVyIGFzIGEgc2VwYXJhdG9yIGJldHdlZW4gcGF0aCBzZWdtZW50cy4gKi9cbiAgbmFtZT86IHN0cmluZztcbiAgLyoqIFRoZSBvcHRpb25hbCBjb2xsZWN0aW9uIG9mIGxpbmtzIHRvIHJlc291cmNlcyB0byBhc3NvY2lhdGUgd2l0aCB0aGlzIG5vZGUuICovXG4gIGxpbmtzPzogc3RyaW5nW107XG4gIC8qKiBUaGUgb3B0aW9uYWwgbm9kZSBtZXRhZGF0YS4gKi9cbiAgbWV0YWRhdGE/OiBvYmplY3Q7XG4gIC8qKiBUaGUgb3B0aW9uYWwgZ2VvbWV0cnkgZGF0YSB0byBhdHRhY2ggdG8gdGhlIG5vZGUuICovXG4gIGdlb21ldHJ5Pzoge1xuICAgIC8qKiBUaGUgYmFzZTY0IGVuY29kZWQgZ2VvbWV0cnkgZGF0YS4gKi9cbiAgICBkYXRhOiBzdHJpbmc7XG4gICAgLyoqIFRoZSBjb250ZW50IHR5cGUgKE1JTUUpIG9mIHRoZSBnZW9tZXRyeSBkYXRhLiAqL1xuICAgIGNvbnRlbnRUeXBlOiBzdHJpbmc7XG4gIH07XG59XG5cbi8qKlxuICogVGhlIGNyZWF0ZSBub2RlIG9wdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDcmVhdGVOb2RlT3B0aW9ucyB7XG4gIC8qKiBDb250cm9scyB3aGljaCBvcHRpb25hbCBub2RlIGF0dHJpYnV0ZXMgYXJlIHJldHVybmVkLCBjdXJyZW50bHkgb25seSBtZXRhZGF0YSBpcyBzdXBwb3J0ZWQuICovXG4gIGZpZWxkcz86IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgcmVxdWVzdCBib2R5IGZvciB0aGUgQHNlZSBPcmdhbml6ZXIjdXBkYXRlTm9kZSBvcGVyYXRpb24uIEFsc28ga25vd24gYXMgVXBzZXJ0Tm9kZVJlcXVlc3QuXG4gKiBBbGwgcHJvcGVydGllcyBhcmUgb3B0aW9uYWwsIGlmIHByb3BlcnR5IG5vdCBwcm92aWRlZCBpbiB0aGUgcmVxdWVzdCB0aGUgcHJvcGVydHkgd2lsbCByZXRhaW4gaXQncyBvbGQgdmFsdWUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXBkYXRlTm9kZVJlcXVlc3Qge1xuICAvKipcbiAgICogVGhlIGxhc3Qgc2VlbiB2ZXJzaW9uIG9mIHRoZSB0cmVlIGRlc2NyaXB0b3IuXG4gICAqIElmIHByb3ZpZGVkIHNlcnZpY2Ugd2lsbCB1c2UgdGhpcyBpbmZvcm1hdGlvbiBmb3IgdGhlIGNvbmN1cnJlbmN5IGNvbnRyb2wgYW5kIHdpbGwgcmVmdXNlIHRvIGFwcGx5IGNoYW5nZXMgaWYgY3VycmVudCB2ZXJzaW9uIGlzIG5vdCBlcXVhbCB0byB2ZXJzaW9uIHByb3ZpZGVkIGluIHRoZSByZXF1ZXN0LlxuICAgKi9cbiAgdj86IG51bWJlcjtcbiAgLyoqIFRoZSBuZXcgbmFtZS4gKi9cbiAgbmFtZT86IHN0cmluZztcbiAgLyoqIFRoZSBuZXcgc2V0IG9mIGxpbmtzIHRvIHJlc291cmNlcy4gSWYgdGhpcyBwcm9wZXJ0eSBpcyBwcm92aWRlZCBpdCB3aWxsIG92ZXJyaWRlIGFsbCBleGlzdGluZyBsaW5rcyBhc3NvY2lhdGVkLiBGb3IgZGlmZmVyZW50aWFsIGNoYW5nZXMgdXNlIEBzZWUgYWRkIGFuZCBAc2VlIHJlbW92ZSBwcm9wZXJ0aWVzLiAqL1xuICBsaW5rcz86IHN0cmluZ1tdO1xuICAvKiogVGhlIHNldCBvZiBsaW5rcyB0byBhZGQgdG8gdGhlIGFzc29jaWF0aW9ucyBjb2xsZWN0aW9uIChAc2VlIE5vZGVSZXNwb25zZSNsaW5rcyApIGFsbCBjdXJyZW50bHkgYXNzb2NpYXRlZCBsaW5rcyByZW1haW4gdW5jaGFuZ2VkLiAqL1xuICBhZGQ/OiBzdHJpbmdbXTtcbiAgLyoqIFRoZSBzZXQgb2YgbGlua3MgdG8gYmUgcmVtb3ZlZCBmcm9tIHRvIHRoZSBhc3NvY2lhdGlvbnMgY29sbGVjdGlvbiAoQHNlZSBOb2RlUmVzcG9uc2UjbGlua3MgKS4gTGlua3MgdGhhdCBhcmUgbm90IGFzc29jaWF0ZWQgYWxyZWFkeSwgYXJlIGlnbm9yZWQuICovXG4gIHJlbW92ZT86IHN0cmluZ1tdO1xuICAvKiogVGhlIG9wdGlvbmFsIG5vZGUgbWV0YWRhdGEuICovXG4gIG1ldGFkYXRhPzogb2JqZWN0O1xuICAvKiogVGhlIG9wdGlvbmFsIGdlb21ldHJ5IGRhdGEgdG8gYXR0YWNoIHRvIHRoZSBub2RlIG9yIHJlcGxhY2UgdGhlIGV4aXN0aW5nIG9uZS4gKi9cbiAgZ2VvbWV0cnk/OiB7XG4gICAgLyoqIFRoZSBiYXNlNjQgZW5jb2RlZCBnZW9tZXRyeSBkYXRhLiBUbyByZW1vdmUgdGhlIGdlb21ldHJ5IGZyb20gdGhlIG5vZGUgcGFzcyBhbiBlbXB0eSBzdHJpbmcuICovXG4gICAgZGF0YTogc3RyaW5nO1xuICAgIC8qKiBUaGUgY29udGVudCB0eXBlIChNSU1FKSBvZiB0aGUgZ2VvbWV0cnkgZGF0YS4gKi9cbiAgICBjb250ZW50VHlwZTogc3RyaW5nO1xuICB9O1xufVxuXG4vKipcbiAqIFRoZSB1cGRhdGUgbm9kZSBvcHRpb25zXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXBkYXRlTm9kZU9wdGlvbnMge1xuICAvKiogQ29udHJvbHMgd2hpY2ggb3B0aW9uYWwgbm9kZSBhdHRyaWJ1dGVzIGFyZSByZXR1cm5lZCwgY3VycmVudGx5IG9ubHkgbWV0YWRhdGEgaXMgc3VwcG9ydGVkLiAqL1xuICBmaWVsZHM/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIHRyZWUgZGVzY3JpcHRvciByZXR1cm5lZCBmcm9tIEBzZWUgT3JnYW5pemVyI2NyZWF0ZU5vZGUsIEBzZWUgT3JnYW5pemVyI3VwZGF0ZU5vZGUsIEBzZWUgT3JnYW5pemVyI2RlbGV0ZU5vZGUgYW5kIEBzZWUgT3JnYW5pemVyI2dldE5vZGUgb3BlcmF0aW9ucy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOb2RlUmVzcG9uc2Uge1xuICAvKiogVGhlIGZvcmVzdCBpZGVudGlmaWVyLiAqL1xuICBmb3Jlc3RJZDogc3RyaW5nO1xuICAvKiogVGhlIHRyZWUgaWRlbnRpZmllci4gKi9cbiAgdHJlZUlkOiBzdHJpbmc7XG4gIC8qKiBUaGUgdW5pcXVlIG5vZGUgaWRlbnRpZmllci4gKi9cbiAgaWQ6IHN0cmluZztcbiAgLyoqIFRoZSBjcmVhdGlvbiB0aW1lc3RhbXAgaW4gSVNPIGZvcm1hdC4gKi9cbiAgY3JlYXRlZEF0OiBzdHJpbmc7XG4gIC8qKiBUaGUgaWRlbnRpZmllciBvZiB0aGUgcHJpbmNpcGFsIHdobyBjcmVhdGVkIHRoZSBub2RlLiAqL1xuICBjcmVhdGVkQnk6IHN0cmluZztcbiAgLyoqIFRoZSBsYXN0IG1vZGlmaWNhdGlvbiB0aW1lc3RhbXAgaW4gSVNPIGZvcm1hdC4gKi9cbiAgbW9kaWZpZWRBdDogc3RyaW5nO1xuICAvKiogVGhlIGlkZW50aWZpZXIgb2YgdGhlIHByaW5jaXBhbCB3aG8gbGFzdCBtb2RpZmllZCB0aGUgbm9kZS4gKi9cbiAgbW9kaWZpZWRCeTogc3RyaW5nO1xuICAvKiogVGhlIHZlcnNpb24gb2YgdGhlIG5vZGUuICovXG4gIHY6IG51bWJlcjtcbiAgLyoqIFRoZSBkZWxldGlvbiBtYXJrZXIuIElmIG5vdCBwcmVzZW50IG9yIGZhbHNlIHRoZSBub2RlIGlzIGFjdGl2ZSwgb3RoZXJ3aXNlIHRoZSBub2RlIGlzIG1hcmtlZCBhcyBkZWxldGVkLiAqL1xuICBkZWxldGVkPzogYm9vbGVhbjtcbiAgLyoqIFRoZSBuYW1lLiAqL1xuICBuYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgY29sbGVjdGlvbiBvZiBsaW5rcyB0byByZXNvdXJjZXMgdG8gYXNzb2NpYXRlIHdpdGggdGhpcyBub2RlLiBNaWdodCBiZSBhYnNlbnQgaWYgY2xpZW50IHJlcXVlc3RlZCB0byBza2lwIHRoaXMgcHJvcGVydHkgZnJvbSB0aGUgcmVzcG9uc2UuXG4gICAqIElmIHByb3BlcnR5IGlzIHJlcXVlc3RlZCBhbmQgdGhlcmUgYXJlIG5vIGFzc29jaWF0aW9ucyB0aGVuIGVtcHR5IGFycmF5IGlzIHJldHVybmVkLlxuICAgKiBJbiBjYXNlIG9mIGV4dGVybmFsaXplZCBsaW5rcyB0aGlzIHByb3BlcnR5IGlzIG5vdCByZXR1cm5lZC5cbiAgICovXG4gIGxpbmtzPzogc3RyaW5nW107XG4gIC8qKiBUaGUgbnVtYmVyIG9mIGxpbmtzIGFzc29jaWF0ZWQgd2l0aCB0aGUgbm9kZS4gKi9cbiAgY291bnQ6IG51bWJlcjtcbiAgLyoqIFVSTCB0byBleHRlcm5hbGl6ZWQgbGlua3MsIGlmIHRoYXQncyB0aGUgY2FzZS4gVGhpcyBpcyByZXR1cm5lZCBldmVuIHdoZW4gdGhlIG5vbGlua3Mgb3B0aW9uIHdhcyB1c2VkIGluIHRoZSByZXF1ZXN0LiAqL1xuICBsaW5rc1VybD86IHN0cmluZztcbiAgLyoqIFRoZSBjb2xsZWN0aW9uIG9mIGFjdGlvbnMgY3VycmVudCB1c2VyIGhhcyByaWdodHMgdG8gcGVyZm9ybSBvbiB0aGlzIHJlc291cmNlIGF0IHRoZSBtb21lbnQgdGhlIHJlc3BvbnNlIGlzIGdlbmVyYXRlZCBieSBzZXJ2aWNlLiBOb3QgcmV0dXJuZWQgd2hlbiBzcGVjaWZpYyB2ZXJzaW9uIGlzIHJlcXVlc3RlZC4gKi9cbiAgX2FjdGlvbnM/OiBzdHJpbmdbXTtcbiAgLyoqIFRoZSBub2RlIG1ldGFkYXRhLiAqL1xuICBtZXRhZGF0YT86IG9iamVjdDtcbiAgLyoqIFRoZSBhc3NvY2lhdGVkIGdlb21ldHJ5IGluZm9ybWF0aW9uLCBpZiBleGlzdHMgZm9yIHRoaXMgbm9kZS4gRG8gbm90IHN0b3JlIHRoaXMgZm9yIGEgbG9uZ2VyIHRpbWUgKHNlZSB1cmwgcHJvcGVydHkpLiAqL1xuICBnZW9tZXRyeT86IHtcbiAgICAvKiogVGhlIGNvbnRlbnQgdHlwZSAoTUlNRSkgb2YgdGhlIGdlb21ldHJ5IGRhdGEuICovXG4gICAgY29udGVudFR5cGU6IHN0cmluZztcbiAgICAvKiogVGhlIHVybCB0byBkb3dubG9hZCBnZW9tZXRyeSBkYXRhLiBJdCBoYXMgYW4gZXhwaXJhdGlvbiB0aW1lLCBub3Qgc3VpdGFibGUgZm9yIHZlcnkgZGVsYXllZCBkb3dubG9hZHMuIFRvIGJlIHVzZWQgYXMgaXMsIG5vIGFkZGl0aW9uYWwgaGVhZGVycy4gKi9cbiAgICB1cmw6IHN0cmluZztcbiAgfTtcbn1cblxuLyoqXG4gKiBUaGUgZGUtc2VyaWFsaXplZCBkYXRhIHJldHVybmVkIGZyb20gdGhlIHJlcXVlc3Qgd2l0aCBsaXN0IG9mIHRyZWUgZGVzY3JpcHRvcnMuX