trimble-connect-sdk
Version:
Trimble Connect SDK for JavaScript
394 lines • 104 kB
JavaScript
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());
});
};
import { isBrowser, isWebWorker } from 'browser-or-node';
import { ServiceResponse } from './response';
import { Service } from './service';
export const 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: DefaultOrganizerServiceUri,
};
}
export class Organizer extends 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 (!isBrowser && !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 (!isBrowser && !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 (!isBrowser && !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 ServiceResponse(this, new Response(), undefined);
});
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnYW5pemVyLmpzIiwic291cmNlUm9vdCI6Ii4vIiwic291cmNlcyI6WyJvcmdhbml6ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQVl6RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFJcEMsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQ3JDLHlDQUF5QyxDQUFDO0FBRTVDLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxHQUFHLENBQWlCO0lBQy9DLENBQUMsV0FBVyxFQUFFLG1EQUFtRCxDQUFDO0lBQ2xFLENBQUMsZ0JBQWdCLEVBQUUsd0RBQXdELENBQUM7SUFDNUUsQ0FBQyxXQUFXLEVBQUUsbURBQW1ELENBQUM7Q0FDbkUsQ0FBQyxDQUFDO0FBR0gsU0FBUyx1QkFBdUI7SUFDOUIsT0FBTztRQUNMLE1BQU0sRUFBRSxXQUFXO1FBQ25CLFVBQVUsRUFBRSwwQkFBMEI7S0FDdkMsQ0FBQztBQUNKLENBQUM7QUFvZ0JELE1BQU0sT0FBTyxTQUFVLFNBQVEsT0FBTztJQU1wQyxZQUFZLE1BQStCO1FBQ3pDLE1BQU0sZUFBZSxxQkFBZ0MsTUFBTSxDQUFFLENBQUM7UUFFOUQsSUFDRSxlQUFlO1lBQ2YsZUFBZSxDQUFDLE1BQU07WUFDdEIsZUFBZSxDQUFDLFVBQVUsS0FBSyxTQUFTLEVBQ3hDO1lBQ0EsSUFBSSxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxFQUFFO2dCQUNoRCxlQUFlLENBQUMsVUFBVSxHQUFHLGdCQUFnQixDQUFDLEdBQUcsQ0FDL0MsZUFBZSxDQUFDLE1BQU0sQ0FDdkIsQ0FBQzthQUNIO2lCQUFNO2dCQUNMLE1BQU0sSUFBSSxLQUFLLENBQ2IsbUJBQW1CLGVBQWUsQ0FBQyxNQUNuQyxvQkFBb0Is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J2Jyb3dzZXItb3Itbm9kZSc7XG5pbXBvcnQge1xuICBEZWxldGVPcHRpb25zLFxuICBHZXRPcHRpb25zLFxuICBMaXN0T3B0aW9ucyxcbiAgUGFnZWRJdGVtcyxcbiAgUmVzb3VyY2VJZGVudGl0eVdpdGhFcnJvcixcbiAgVXNlckluZm9SZXNwb25zZSxcbiAgV1NTdWJzY3JpcHRpb25SZXNwb25zZSxcbn0gZnJvbSAnLi9jb21tb24nO1xuaW1wb3J0IHsgQ29uZmlndXJhdGlvbiB9IGZyb20gJy4vY29uZmlnJztcbmltcG9ydCB7IFBvbGljeSB9IGZyb20gJy4vcG9saWN5JztcbmltcG9ydCB7IFNlcnZpY2VSZXNwb25zZSB9IGZyb20gJy4vcmVzcG9uc2UnO1xuaW1wb3J0IHsgU2VydmljZSB9IGZyb20gJy4vc2VydmljZSc7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLSBjb25maWd1cmF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgY29uc3QgRGVmYXVsdE9yZ2FuaXplclNlcnZpY2VVcmkgPVxuICAnaHR0cHM6Ly9vcmctYXBpLmNvbm5lY3QudHJpbWJsZS5jb20vdjEvJztcblxuY29uc3QgT3JnU2VydmljZVVyaU1hcCA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KFtcbiAgWyd1cy1lYXN0LTEnLCAnaHR0cHM6Ly9vcmctYXBpLnVzLWVhc3QtMS5jb25uZWN0LnRyaW1ibGUuY29tL3YxLyddLFxuICBbJ2FwLXNvdXRoZWFzdC0xJywgJ2h0dHBzOi8vb3JnLWFwaS5hcC1zb3V0aGVhc3QtMS5jb25uZWN0LnRyaW1ibGUuY29tL3YxLyddLFxuICBbJ2V1LXdlc3QtMScsICdodHRwczovL29yZy1hcGkuZXUtd2VzdC0xLmNvbm5lY3QudHJpbWJsZS5jb20vdjEvJ10sXG5dKTtcblxuLyoqIEBpbnRlcm5hbCAqL1xuZnVuY3Rpb24gZ2V0RGVmYXVsdENvbmZpZ3VyYXRpb24oKTogQ29uZmlndXJhdGlvbiB7XG4gIHJldHVybiB7XG4gICAgcmVnaW9uOiAnZXUtd2VzdC0xJyxcbiAgICBzZXJ2aWNlVXJpOiBEZWZhdWx0T3JnYW5pemVyU2VydmljZVVyaSxcbiAgfTtcbn1cblxuLyoqXG4gKiBUaGUgcmVxdWVzdCBib2R5IGZvciB0aGUgQHNlZSBPcmdhbmlzZXIjY3JlYXRlVHJlZSBvcGVyYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlVHJlZVJlcXVlc3Qge1xuICAvKiogVGhlIG9wdGlvbmFsIGlkZW50aWZpZXIgZm9yIHRoZSBuZXcgdHJlZSwgaWYgbm90IHByb3ZpZGVkIHNlcnZpY2Ugd2lsbCBnZW5lcmF0ZSBhbiB1bmlxdWUgaWRlbnRpZmllci4gKi9cbiAgaWQ/OiBzdHJpbmc7XG4gIC8qKiBUaGUgYWNjZXNzIGNvbnJvbCBwb2xpY3kgZG9jdW1lbnQgdG8gYmUgYXR0YWNoZWQgdG8gdGhlIHRyZWUuICovXG4gIHBvbGljeT86IFBvbGljeTtcbiAgLyoqIFRoZSBvcHRpb25hbCB0cmVlIG5hbWUuICovXG4gIG5hbWU/OiBzdHJpbmc7XG4gIC8qKiBUaGUgb3B0aW9uYWwgZGVzY3JpcHRpb24uICovXG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAvKiogVGhlIHR5cGUgb2YgdGhlIHRyZWUgdGhhdCBkZWZpbmVzIHRoZSBzeW1hbnRpYy4gKi9cbiAgdHlwZTogc3RyaW5nO1xuICAvKiogVGhlIG9wdGlvbmFsIG5vZGUgbWV0YWRhdGEuICovXG4gIG1ldGFkYXRhPzogb2JqZWN0O1xufVxuXG4vKipcbiAqIFRoZSByZXF1ZXN0IHBhcmFtZXRlcnMgZm9yIHRoZSBAc2VlIE9yZ2FuaXNlciNnZXRUcmVlIG9wZXJhdGlvbi5cbiAqL1xuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWVtcHR5LWludGVyZmFjZVxuZXhwb3J0IGludGVyZmFjZSBHZXRUcmVlT3B0aW9ucyBleHRlbmRzIEdldE9wdGlvbnMge1xuICAvKiogQ29udHJvbHMgd2hpY2ggb3B0aW9uYWwgbm9kZSBhdHRyaWJ1dGVzIGFyZSByZXR1cm5lZCwgY3VycmVudGx5IG9ubHkgbWV0YWRhdGEgaXMgc3VwcG9ydGVkLiAqL1xuICBmaWVsZHM/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIHJlcXVlc3QgcGFyYW1ldGVycyBmb3IgdGhlIEBzZWUgT3JnYW5pc2VyI2dldE5vZGUgb3BlcmF0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdldE5vZGVPcHRpb25zIGV4dGVuZHMgR2V0T3B0aW9ucyB7XG4gIC8qKiBDb250cm9scyB3aGV0aGVyIHRvIHNlbmQgbGlzdCBvZiBsaW5rIHRvZ2hldGhlciB3aXRoIHRoZSBub2RlIGRlc2NyaXB0b3IuIEJ5IGRlZmF1bHQgbGlua3MgYXJlIHNlbnQuIEFwcCBjYW4gcmVkdWNlIHRoZSBwYXlsb2FkIHNpemUgYnkgdXNpbmcgdGhpcyBwYXJhbWV0ZXIuICovXG4gIG5vbGlua3M/OiBib29sZWFuO1xuICAvKiogQ29udHJvbHMgd2hpY2ggb3B0aW9uYWwgbm9kZSBhdHRyaWJ1dGVzIGFyZSByZXR1cm5lZCwgY3VycmVudGx5IG9ubHkgbWV0YWRhdGEgaXMgc3VwcG9ydGVkLiAqL1xuICBmaWVsZHM/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIHJlcXVlc3QgcGFyYW1ldGVycyBmb3IgdGhlIEBzZWUgT3JnYW5pc2VyI3B1dE5vZGVHZW9tZXRyeSBvcGVyYXRpb24uXG4gKiBEb2VzIG5vdCBleHRlbmQgR2V0T3B0aW9ucyBiZWNhdXNlIHRoZSBmbGFnIGRlZmluZWQgdGhlcmUgaGFzIG5vIG1lYW5pbmcgaGVyZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQdXRHZW9tZXRyeU9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIGxhc3Qgc2VlbiB2ZXJzaW9uIG9mIHRoZSBub2RlIGRlc2NyaXB0b3IuXG4gICAqIElmIHByb3ZpZGVkIHNlcnZpY2Ugd2lsbCB1c2UgdGhpcyBpbmZvcm1hdGlvbiBmb3IgdGhlIGNvbmN1cnJlbmN5IGNvbnRyb2wgYW5kIHdpbGwgcmVmdXNlIHRvIGFwcGx5IGNoYW5nZXMgaWYgY3VycmVudCB2ZXJzaW9uIGlzIG5vdCBlcXVhbCB0byB2ZXJzaW9uIHByb3ZpZGVkIGluIHRoZSByZXF1ZXN0LlxuICAgKi9cbiAgdj86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBUaGUgY3JlYXRlIHRyZWUgb3B0aW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZVRyZWVPcHRpb25zIHtcbiAgLyoqIENvbnRyb2xzIHdoaWNoIG9wdGlvbmFsIG5vZGUgYXR0cmlidXRlcyBhcmUgcmV0dXJuZWQsIGN1cnJlbnRseSBvbmx5IG1ldGFkYXRhIGlzIHN1cHBvcnRlZC4gKi9cbiAgZmllbGRzPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSByZXF1ZXN0IGJvZHkgZm9yIHRoZSBAc2VlIE9yZ2FuaXNlciN1cGRhdGVUcmVlIG9wZXJhdGlvbi5cbiAqIEFsbCBwcm9wZXJ0aWVzIGFyZSBvcHRpb25hbCwgaWYgcHJvcGVydHkgaXMgbm90IHByb3ZpZGVkIGluIHRoZSByZXF1ZXN0IHRoZSBwcm9wZXJ0eSB3aWxsIHJldGFpbiBpdCdzIG9sZCB2YWx1ZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVcGRhdGVUcmVlUmVxdWVzdCB7XG4gIC8qKlxuICAgKiBUaGUgbGFzdCBzZWVuIHZlcnNpb24gb2YgdGhlIHRyZWUgZGVzY3JpcHRvci5cbiAgICogSWYgcHJvdmlkZWQgc2VydmljZSB3aWxsIHVzZSB0aGlzIGluZm9ybWF0aW9uIGZvciB0aGUgY29uY3VyZW5jeSBjb250cm9sIGFuZCB3aWxsIHJlZnVzZSB0byBhcHBseSBjaGFuZ2VzIGlmIGN1cnJlbnQgdmVyc2lvbiBpcyBub3QgZXF1YWwgdG8gdmVyc2lvbiBwcm92aWRlZCBpbiB0aGUgcmVxdWVzdC5cbiAgICovXG4gIHY/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBUaGUgYWNjZXNzIGNvbnJvbCBwb2xpY3kgZG9jdW1lbnQgdG8gYmUgYXR0YWNoZWQgdG8gdGhlIHRyZWUuXG4gICAqIElmIHByb3BlcnR5IGlzIHNwZWNpZmllZCBjYWxsZXIgbXVzdCBoYXZlIG9yZzpVcGRhdGVUcmVlUG9saWN5IHJpZ2h0IHRvIGV4ZWN1dGUgdGhpcyBvcGVyYXRpb24gaW4gYWRkaXRpb24gdG8gb3JnOlVwZGF0ZVRyZWUuXG4gICAqL1xuICBwb2xpY3k/OiBQb2xpY3k7XG4gIC8qKiBUaGUgbmV3IG5hbWUuICovXG4gIG5hbWU/OiBzdHJpbmc7XG4gIC8qKiBUaGUgbmV3IGRlc2NyaXB0aW9uLiAqL1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgLyoqIFRoZSBvcHRpb25hbCBub2RlIG1ldGFkYXRhLiAqL1xuICBtZXRhZGF0YT86IG9iamVjdDtcbn1cblxuLyoqXG4gKiBUaGUgdXBkYXRlIHRyZWUgb3B0aW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFVwZGF0ZVRyZWVPcHRpb25zIHtcbiAgLyoqIENvbnRyb2xzIHdoaWNoIG9wdGlvbmFsIG5vZGUgYXR0cmlidXRlcyBhcmUgcmV0dXJuZWQsIGN1cnJlbnRseSBvbmx5IG1ldGFkYXRhIGlzIHN1cHBvcnRlZC4gKi9cbiAgZmllbGRzPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSB0cmVlIGRlc2NyaXB0b3IgcmV0dXJuZWQgZnJvbSBAc2VlIE9yZ2FuaXNlciNjcmVhdGVUcmVlICwgQHNlZSBPcmdhbmlzZXIjdXBkYXRlVHJlZSAsIEBzZWUgT3JnYW5pc2VyI2RlbGV0ZVRyZWUgYW5kIEBzZWUgT3JnYW5pc2VyI2dldFRyZWUgb3BlcmF0aW9ucy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUcmVlUmVzcG9uc2Uge1xuICAvKiogVGhlIHVuaXF1ZSB0cmVlIGlkZW50aWZpZXIuICovXG4gIGlkOiBzdHJpbmc7XG4gIC8qKiBUaGUgY3JlYXRpb24gdGltZXN0YW1wIGluIElTTyBmb3JtYXQuICovXG4gIGNyZWF0ZWRBdDogc3RyaW5nO1xuICAvKiogVGhlIGlkZW50aWZpZXIgb2YgdGhlIHByaW5jaXBhbCB3aG8gY3JlYXRlZCB0aGUgdHJlZS4gKi9cbiAgY3JlYXRlZEJ5OiBzdHJpbmc7XG4gIC8qKiBUaGUgbGFzdCBtb2RpZmljYXRpb24gdGltZXN0YW1wIGluIElTTyBmb3JtYXQuICovXG4gIG1vZGlmaWVkQXQ6IHN0cmluZztcbiAgLyoqIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBwcmluY2lsYXQgd2hvIGxhc3QgbW9kaWZpZWQgdGhlIHRyZWUgZGVzY3JpcHRvci4gKi9cbiAgbW9kaWZpZWRCeTogc3RyaW5nO1xuICAvKiogVGhlIGN1cnJlbnQgdmVyc2lvbiBvZiB0aGUgdHJlZSBkZXNjcmlwdG9yLiAqL1xuICB2OiBudW1iZXI7XG4gIC8qKiBUaGUgYWNjZXNzIGNvbnJvbCBwb2xpY3kgZG9jdW1lbnQgYXR0YWNoZWQgdG8gdGhlIHRyZWUuIFRoaXMgcHJvcGVydHkgaXMgcmV0dXJuZWQgb25seSBpZiBjYWxsZXIgaGFzIG9yZzpHZXRUcmVlUG9saWN5IHJpZ2h0LiAqL1xuICBwb2xpY3k/OiBQb2xpY3k7XG4gIC8qKiBUaGUgZGVsZXRpb24gbWFya2VyLiBJZiBub3QgcHJlc2VudCBvciBmYWxzZSB0aGUgdHJlZSBpcyBhY3RpdmUsIG90aGVyd2lzZSB0aGUgdHJlZSBpcyBtYXJrZWQgYXMgZGVsZXRlZC4gKi9cbiAgZGVsZXRlZD86IGJvb2xlYW47XG4gIC8qKiBUaGUgdHJlZSBzaG9ydCBuYW1lLiAqL1xuICBuYW1lPzogc3RyaW5nO1xuICAvKiogVGhlIG9wdGlvbmFsIGRlc2NyaXB0aW9uLiAqL1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgLyoqIFRoZSB0cmVlIHR5cGUgdGhhdCBkZWZpbmVzIHRoZSBzeW1hbnRpYy4gKi9cbiAgdHlwZTogc3RyaW5nO1xuICAvKiogVGhlIGNvbGxlY3Rpb24gb2YgYWN0aW9ucyBjdXJyZW50IHVzZXIgaGFzIHJpZ2h0cyB0byBwZXJmb3JtIG9uIHRoaXMgcmVzb3VyY2UgYXQgdGhlIG1vbWVudCB0aGUgcmVzcG9uc2UgaXMgZ2VuZXJhdGVkIGJ5IHNlcnZpY2UuIE5vdCByZXR1cm5lZCB3aGVuIHNwZWNpZmljIHZlcnNpb24gaXMgcmVxdWVzdGVkLiAqL1xuICBfYWN0aW9ucz86IHN0cmluZ1tdO1xuICAvKiogVGhlIG5vZGUgbWV0YWRhdGEuICovXG4gIG1ldGFkYXRhPzogb2JqZWN0O1xufVxuXG4vKipcbiAqIFRoZSByZXF1ZXN0IGJvZHkgZm9yIHRoZSBAc2VlIE9yZ2FuaXNlciNjcmVhdGVOb2RlIG9wZXJhdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDcmVhdGVOb2RlUmVxdWVzdCB7XG4gIC8qKiBUaGUgb3B0aW9uYWwgaWRlbnRpZmllciBmb3IgdGhlIG5ldyB0cmVlLCBpZiBub3QgcHJvdmlkZWQgc2VydmljZSB3aWxsIGdlbmVyYXRlIGFuIHVuaXF1ZSBpZGVudGlmaWVyLiAqL1xuICBpZD86IHN0cmluZztcbiAgLyoqIFRoZSBub2RlIG5hbWUuIFRvIHBlc2VudCBhIHRyZWUtbGlrZSBzdHJ1Y3R1cmUgdGhpcyBuYW1lIGlzIGludGVycHJldGVkIGFzIGEgZnVsbCBwYXRoIGluIGEgdHJlZSB3aXRoICcvJyBjaGFyYWN0ZXIgYXMgYSBzZXBhcmF0b3IgYmV0d2VlbiBwYXRoIHNlZ21lbnRzLiAqL1xuICBuYW1lPzogc3RyaW5nO1xuICAvKiogVGhlIG9wdGlvbmFsIGNvbGxlY3Rpb24gb2YgbGlua3MgdG8gcmVzb3VyY2VzIHRvIGFzc29jaWF0ZSB3aXRoIHRoaXMgbm9kZS4gKi9cbiAgbGlua3M/OiBzdHJpbmdbXTtcbiAgLyoqIFRoZSBvcHRpb25hbCBub2RlIG1ldGFkYXRhLiAqL1xuICBtZXRhZGF0YT86IG9iamVjdDtcbiAgLyoqIFRoZSBvcHRpb25hbCBnZW9tZXRyeSBkYXRhIHRvIGF0dGFjaCB0byB0aGUgbm9kZS4gKi9cbiAgZ2VvbWV0cnk/OiB7XG4gICAgLyoqIFRoZSBiYXNlNjQgZW5jb2RlZCBnZW9tZXRyeSBkYXRhLiAqL1xuICAgIGRhdGE6IHN0cmluZztcbiAgICAvKiogVGhlIGNvbnRlbnQgdHlwZSAoTUlNRSkgb2YgdGhlIGdlb21ldHJ5IGRhdGEuICovXG4gICAgY29udGVudFR5cGU6IHN0cmluZztcbiAgfTtcbn1cblxuLyoqXG4gKiBUaGUgY3JlYXRlIG5vZGUgb3B0aW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZU5vZGVPcHRpb25zIHtcbiAgLyoqIENvbnRyb2xzIHdoaWNoIG9wdGlvbmFsIG5vZGUgYXR0cmlidXRlcyBhcmUgcmV0dXJuZWQsIGN1cnJlbnRseSBvbmx5IG1ldGFkYXRhIGlzIHN1cHBvcnRlZC4gKi9cbiAgZmllbGRzPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSByZXF1ZXN0IGJvZHkgZm9yIHRoZSBAc2VlIE9yZ2FuaXNlciN1cGRhdGVOb2RlIG9wZXJhdGlvbi4gQWxzbyBrbm93biBhcyBVcHNlcnROb2RlUmVxdWVzdC5cbiAqIEFsbCBwcm9wZXJ0aWVzIGFyZSBvcHRpb25hbCwgaWYgcHJvcGVydHkgbm90IHByb3ZpZGVkIGluIHRoZSByZXF1ZXN0IHRoZSBwcm9wZXJ0eSB3aWxsIHJldGFpbiBpdCdzIG9sZCB2YWx1ZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVcGRhdGVOb2RlUmVxdWVzdCB7XG4gIC8qKlxuICAgKiBUaGUgbGFzdCBzZWVuIHZlcnNpb24gb2YgdGhlIHRyZWUgZGVzY3JpcHRvci5cbiAgICogSWYgcHJvdmlkZWQgc2VydmljZSB3aWxsIHVzZSB0aGlzIGluZm9ybWF0aW9uIGZvciB0aGUgY29uY3VyZW5jeSBjb250cm9sIGFuZCB3aWxsIHJlZnVzZSB0byBhcHBseSBjaGFuZ2VzIGlmIGN1cnJlbnQgdmVyc2lvbiBpcyBub3QgZXF1YWwgdG8gdmVyc2lvbiBwcm92aWRlZCBpbiB0aGUgcmVxdWVzdC5cbiAgICovXG4gIHY/OiBudW1iZXI7XG4gIC8qKiBUaGUgbmV3IG5hbWUuICovXG4gIG5hbWU/OiBzdHJpbmc7XG4gIC8qKiBUaGUgbmV3IHNldCBvZiBsaW5rcyB0byByZXNvdXJjZXMuIElmIHRoaXMgcHJvcGVydHkgaXMgcHJvdmlkZWQgaXQgd2lsbCBvdmVycmlkZSBhbGwgZXhpc3RpbmcgbGlua3MgYXNzb2NpYXRlZC4gRm9yIGRpZmZlcmVudGlhbCBjaGFuZ2VzIHVzZSBAc2VlIGFkZCBhbmQgQHNlZSByZW1vdmUgcHJvcGVydGllcy4gKi9cbiAgbGlua3M/OiBzdHJpbmdbXTtcbiAgLyoqIFRoZSBzZXQgb2YgbGlua3MgdG8gYWRkIHRvIHRoZSBhc3NvY2lhdGlvbnMgY29sbGVjdGlvbiAoQHNlZSBOb2RlUmVzcG9uc2UjbGlua3MgKSBhbGwgY3VycmVudGx5IGFzc29jaWF0ZWQgbGlua3MgcmVtYWluIHVuY2hhbmdlZC4gKi9cbiAgYWRkPzogc3RyaW5nW107XG4gIC8qKiBUaGUgc2V0IG9mIGxpbmtzIHRvIGJlIHJlbW92ZWQgZnJvbSB0byB0aGUgYXNzb2NpYXRpb25zIGNvbGxlY3Rpb24gKEBzZWUgTm9kZVJlc3BvbnNlI2xpbmtzICkuIExpbmtzIHRoYXQgYXJlIG5vdCBhc3NvY2lhdGVkIGFscmVhZHksIGFyZSBpZ25vcmVkLiAqL1xuICByZW1vdmU/OiBzdHJpbmdbXTtcbiAgLyoqIFRoZSBvcHRpb25hbCBub2RlIG1ldGFkYXRhLiAqL1xuICBtZXRhZGF0YT86IG9iamVjdDtcbiAgLyoqIFRoZSBvcHRpb25hbCBnZW9tZXRyeSBkYXRhIHRvIGF0dGFjaCB0byB0aGUgbm9kZSBvciByZXBsYWNlIHRoZSBleGlzdGluZyBvbmUuICovXG4gIGdlb21ldHJ5Pzoge1xuICAgIC8qKiBUaGUgYmFzZTY0IGVuY29kZWQgZ2VvbWV0cnkgZGF0YS4gVG8gcmVtb3ZlIHRoZSBnZW9tZXRyeSBmcm9tIHRoZSBub2RlIHBhc3MgYW4gZW1wdHkgc3RyaW5nLiAqL1xuICAgIGRhdGE6IHN0cmluZztcbiAgICAvKiogVGhlIGNvbnRlbnQgdHlwZSAoTUlNRSkgb2YgdGhlIGdlb21ldHJ5IGRhdGEuICovXG4gICAgY29udGVudFR5cGU6IHN0cmluZztcbiAgfTtcbn1cblxuLyoqXG4gKiBUaGUgdXBkYXRlIG5vZGUgb3B0aW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFVwZGF0ZU5vZGVPcHRpb25zIHtcbiAgLyoqIENvbnRyb2xzIHdoaWNoIG9wdGlvbmFsIG5vZGUgYXR0cmlidXRlcyBhcmUgcmV0dXJuZWQsIGN1cnJlbnRseSBvbmx5IG1ldGFkYXRhIGlzIHN1cHBvcnRlZC4gKi9cbiAgZmllbGRzPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSB0cmVlIGRlc2NyaXB0b3IgcmV0dXJuZWQgZnJvbSBAc2VlIE9yZ2FuaXNlciNjcmVhdGVOb2RlLCBAc2VlIE9yZ2FuaXNlciN1cGRhdGVOb2RlLCBAc2VlIE9yZ2FuaXNlciNkZWxldGVOb2RlIGFuZCBAc2VlIE9yZ2FuaXNlciNnZXROb2RlIG9wZXJhdGlvbnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTm9kZVJlc3BvbnNlIHtcbiAgLyoqIFRoZSBmb3Jlc3QgaWRlbnRpZmllci4gKi9cbiAgZm9yZXN0SWQ6IHN0cmluZztcbiAgLyoqIFRoZSB0cmVlIGlkZW50aWZpZXIuICovXG4gIHRyZWVJZDogc3RyaW5nO1xuICAvKiogVGhlIHVuaXF1ZSBub2RlIGlkZW50aWZpZXIuICovXG4gIGlkOiBzdHJpbmc7XG4gIC8qKiBUaGUgY3JlYXRpb24gdGltZXN0YW1wIGluIElTTyBmb3JtYXQuICovXG4gIGNyZWF0ZWRBdDogc3RyaW5nO1xuICAvKiogVGhlIGlkZW50aWZpZXIgb2YgdGhlIHByaW5jaXBhbCB3aG8gY3JlYXRlZCB0aGUgbm9kZS4gKi9cbiAgY3JlYXRlZEJ5OiBzdHJpbmc7XG4gIC8qKiBUaGUgbGFzdCBtb2RpZmljYXRpb24gdGltZXN0YW1wIGluIElTTyBmb3JtYXQuICovXG4gIG1vZGlmaWVkQXQ6IHN0cmluZztcbiAgLyoqIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBwcmluY2lsYXQgd2hvIGxhc3QgbW9kaWZpZWQgdGhlIG5vZGUuICovXG4gIG1vZGlmaWVkQnk6IHN0cmluZztcbiAgLyoqIFRoZSB2ZXJzaW9uIG9mIHRoZSBub2RlLiAqL1xuICB2OiBudW1iZXI7XG4gIC8qKiBUaGUgZGVsZXRpb24gbWFya2VyLiBJZiBub3QgcHJlc2VudCBvciBmYWxzZSB0aGUgbm9kZSBpcyBhY3RpdmUsIG90aGVyd2lzZSB0aGUgbm9kZSBpcyBtYXJrZWQgYXMgZGVsZXRlZC4gKi9cbiAgZGVsZXRlZD86IGJvb2xlYW47XG4gIC8qKiBUaGUgbmFtZS4gKi9cbiAgbmFtZTogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIGNvbGxlY3Rpb24gb2YgbGlua3MgdG8gcmVzb3VyY2VzIHRvIGFzc29jaWF0ZSB3aXRoIHRoaXMgbm9kZS4gTWlnaHQgYmUgYWJzZW50IGlmIGNsaWVudCByZXF1ZXN0ZWQgdG8gc2tpcCB0aGlzIHByb3BlcnR5IGZyb20gdGhlIHJlc3BvbnNlLlxuICAgKiBJZiBwcm9wZXJ0eSBpcyByZXF1ZXN0ZWQgYW5kIHRoZXJlIGFyZSBubyBhc3NvY2lhdGlvbnMgdGhlbiBlbXB0eSBhcnJheSBpcyByZXR1cm5lZC5cbiAgICogSW4gY2FzZSBvZiBleHRlcm5hbGl6ZWQgbGlua3MgdGhpcyBwcm9wZXJ0eSBpcyBub3QgcmV0dXJuZWQuXG4gICAqL1xuICBsaW5rcz86IHN0cmluZ1tdO1xuICAvKiogVGhlIG51bWJlciBvZiBsaW5rcyBhc3NvY2lhdGVkIHdpdGggdGhlIG5vZGUuICovXG4gIGNvdW50OiBudW1iZXI7XG4gIC8qKiBVUkwgdG8gZXh0ZXJuYWxpemVkIGxpbmtzLCBpZiB0aGF0J3MgdGhlIGNhc2UuIFRoaXMgaXMgcmV0dXJuZWQgZXZlbiB3aGVuIHRoZSBub2xpbmtzIG9wdGlvbiB3YXMgdXNlZCBpbiB0aGUgcmVxdWVzdC4gKi9cbiAgbGlua3NVcmw/OiBzdHJpbmc7XG4gIC8qKiBUaGUgY29sbGVjdGlvbiBvZiBhY3Rpb25zIGN1cnJlbnQgdXNlciBoYXMgcmlnaHRzIHRvIHBlcmZvcm0gb24gdGhpcyByZXNvdXJjZSBhdCB0aGUgbW9tZW50IHRoZSByZXNwb25zZSBpcyBnZW5lcmF0ZWQgYnkgc2VydmljZS4gTm90IHJldHVybmVkIHdoZW4gc3BlY2lmaWMgdmVyc2lvbiBpcyByZXF1ZXN0ZWQuICovXG4gIF9hY3Rpb25zPzogc3RyaW5nW107XG4gIC8qKiBUaGUgbm9kZSBtZXRhZGF0YS4gKi9cbiAgbWV0YWRhdGE/OiBvYmplY3Q7XG4gIC8qKiBUaGUgYXNzb2NpYXRlZCBnZW9tZXRyeSBpbmZvcm1hdGlvbiwgaWYgZXhpc3RzIGZvciB0aGlzIG5vZGUuIERvIG5vdCBzdG9yZSB0aGlzIGZvciBhIGxvbmdlciB0aW1lIChzZWUgdXJsIHByb3BlcnR5KS4gKi9cbiAgZ2VvbWV0cnk/OiB7XG4gICAgLyoqIFRoZSBjb250ZW50IHR5cGUgKE1JTUUpIG9mIHRoZSBnZW9tZXRyeSBkYXRhLiAqL1xuICAgIGNvbnRlbnRUeXBlOiBzdHJpbmc7XG4gICAgLyoqIFRoZSB1cmwgdG8gZG93bmxvYWQgZ2VvbWV0cnkgZGF0YS4gSXQgaGFzIGFuIGV4cGlyYXRpb24gdGltZSwgbm90IHN1aXRhYmxlIGZvciB2ZXJ5IGRlbGF5ZWQgZG93bmxvYWRzLiBUbyBiZSB1c2VkIGFzIGlzLCBubyBhZGRpdGlvbmFsIGhlYWRlcnMuICovXG4gICAgdXJsOiBzdHJpbmc7XG4gIH07XG59XG5cbi8qKlxuICogVGhlIGRlLXNlcmlhbGl6ZWQgZGF0YSByZXR1cm5lZCBmcm9tIHRoZSByZXF1ZXN0IHdpdGggbGlzdCBvZiB0cmVlIGRlc2NyaXB0b3JzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExpc3RUcmVlc1Jlc3BvbnNlIGV4dGVuZHMgUGFnZWRJdGVtczxUcmVlUmVzcG9uc2U+IHsgfVxuXG4vKipcbiAqIFRoZSBkZS1zZXJpYWxpemVkIGRhdGEgcmV0dXJuZWQgZnJvbSB0aGUgcmVxdWVzdCB3aXRoIGxpc3Qgb2Ygbm9kZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGlzdE5vZGVzUmVzcG9uc2UgZXh0ZW5kcyBQYWdlZEl0ZW1zPE5vZGVSZXNwb25zZT4geyB9XG5cbi8qKlxuICogVGhlIHNlYXJjaCB0cmVlcyBBUEkgcGFyYW1ldGVycy5cbiAqL1xuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWVtcHR5LWludGVyZmFjZVxuZXhwb3J0IGludGVyZmFjZSBMaXN0VHJlZXNPcHRpb25zIGV4dGVuZHMgTGlzdE9wdGlvbnMge1xuICAvKiogQ29udHJvbHMgd2hpY2ggb3B0aW9uYWwgbm9kZSBhdHRyaWJ1dGVzIGFyZSByZXR1cm5lZCwgY3VycmVudGx5IG9ubHkgbWV0YWRhdGEg