awscdk-resources-mongodbatlas
Version:
MongoDB Atlas CDK Construct Library for AWS CloudFormation Resources
293 lines • 50.8 kB
JavaScript
"use strict";
var _a;
Object.defineProperty(exports, "__esModule", { value: true });
exports.CfnDataLakes = exports.DataLakeDatabaseDataSourceViewDefaultFormat = exports.DataLakeDataProcessRegionViewRegion = exports.DataLakeDataProcessRegionViewCloudProvider = void 0;
exports.toJson_CfnDataLakesProps = toJson_CfnDataLakesProps;
exports.toJson_DataLakeCloudProviderConfigView = toJson_DataLakeCloudProviderConfigView;
exports.toJson_DataLakeDataProcessRegionView = toJson_DataLakeDataProcessRegionView;
exports.toJson_DataLakeStorageView = toJson_DataLakeStorageView;
exports.toJson_DataLakeAwsCloudProviderConfigView = toJson_DataLakeAwsCloudProviderConfigView;
exports.toJson_DataLakeDatabaseView = toJson_DataLakeDatabaseView;
exports.toJson_StoreDetail = toJson_StoreDetail;
exports.toJson_DataLakeDatabaseCollectionView = toJson_DataLakeDatabaseCollectionView;
exports.toJson_DataLakeViewView = toJson_DataLakeViewView;
exports.toJson_DataLakeDatabaseDataSourceView = toJson_DataLakeDatabaseDataSourceView;
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
// Generated by cdk-import
const cdk = require("aws-cdk-lib");
/**
* Converts an object of type 'CfnDataLakesProps' to JSON representation.
*/
/* eslint-disable max-len, quote-props */
function toJson_CfnDataLakesProps(obj) {
if (obj === undefined) {
return undefined;
}
const result = {
CloudProviderConfig: toJson_DataLakeCloudProviderConfigView(obj.cloudProviderConfig),
DataProcessRegion: toJson_DataLakeDataProcessRegionView(obj.dataProcessRegion),
EndDate: obj.endDate,
ProjectId: obj.projectId,
Profile: obj.profile,
SkipRoleValidation: obj.skipRoleValidation,
Storage: toJson_DataLakeStorageView(obj.storage),
TenantName: obj.tenantName,
};
// filter undefined values
return Object.entries(result).reduce((r, i) => (i[1] === undefined ? r : { ...r, [i[0]]: i[1] }), {});
}
/**
* Converts an object of type 'DataLakeCloudProviderConfigView' to JSON representation.
*/
/* eslint-disable max-len, quote-props */
function toJson_DataLakeCloudProviderConfigView(obj) {
if (obj === undefined) {
return undefined;
}
const result = {
Aws: toJson_DataLakeAwsCloudProviderConfigView(obj.aws),
};
// filter undefined values
return Object.entries(result).reduce((r, i) => (i[1] === undefined ? r : { ...r, [i[0]]: i[1] }), {});
}
/**
* Converts an object of type 'DataLakeDataProcessRegionView' to JSON representation.
*/
/* eslint-disable max-len, quote-props */
function toJson_DataLakeDataProcessRegionView(obj) {
if (obj === undefined) {
return undefined;
}
const result = {
CloudProvider: obj.cloudProvider,
Region: obj.region,
};
// filter undefined values
return Object.entries(result).reduce((r, i) => (i[1] === undefined ? r : { ...r, [i[0]]: i[1] }), {});
}
/**
* Converts an object of type 'DataLakeStorageView' to JSON representation.
*/
/* eslint-disable max-len, quote-props */
function toJson_DataLakeStorageView(obj) {
if (obj === undefined) {
return undefined;
}
const result = {
Databases: obj.databases?.map((y) => toJson_DataLakeDatabaseView(y)),
Stores: obj.stores?.map((y) => toJson_StoreDetail(y)),
};
// filter undefined values
return Object.entries(result).reduce((r, i) => (i[1] === undefined ? r : { ...r, [i[0]]: i[1] }), {});
}
/**
* Converts an object of type 'DataLakeAwsCloudProviderConfigView' to JSON representation.
*/
/* eslint-disable max-len, quote-props */
function toJson_DataLakeAwsCloudProviderConfigView(obj) {
if (obj === undefined) {
return undefined;
}
const result = {
ExternalId: obj.externalId,
IamAssumedRoleARN: obj.iamAssumedRoleArn,
IamUserARN: obj.iamUserArn,
RoleId: obj.roleId,
TestS3Bucket: obj.testS3Bucket,
};
// filter undefined values
return Object.entries(result).reduce((r, i) => (i[1] === undefined ? r : { ...r, [i[0]]: i[1] }), {});
}
/* eslint-enable max-len, quote-props */
/**
* Name of the cloud service that hosts the data lake's data stores.
*
* @schema DataLakeDataProcessRegionViewCloudProvider
*/
var DataLakeDataProcessRegionViewCloudProvider;
(function (DataLakeDataProcessRegionViewCloudProvider) {
/** AWS */
DataLakeDataProcessRegionViewCloudProvider["AWS"] = "AWS";
/** GCP */
DataLakeDataProcessRegionViewCloudProvider["GCP"] = "GCP";
/** AZURE */
DataLakeDataProcessRegionViewCloudProvider["AZURE"] = "AZURE";
/** TENANT */
DataLakeDataProcessRegionViewCloudProvider["TENANT"] = "TENANT";
/** SERVERLESS */
DataLakeDataProcessRegionViewCloudProvider["SERVERLESS"] = "SERVERLESS";
})(DataLakeDataProcessRegionViewCloudProvider || (exports.DataLakeDataProcessRegionViewCloudProvider = DataLakeDataProcessRegionViewCloudProvider = {}));
/**
* Name of the region to which the data lake routes client connections.
*
* @schema DataLakeDataProcessRegionViewRegion
*/
var DataLakeDataProcessRegionViewRegion;
(function (DataLakeDataProcessRegionViewRegion) {
/** DUBLIN_IRL */
DataLakeDataProcessRegionViewRegion["DUBLIN_IRL"] = "DUBLIN_IRL";
/** FRANKFURT_DEU */
DataLakeDataProcessRegionViewRegion["FRANKFURT_DEU"] = "FRANKFURT_DEU";
/** LONDON_GBR */
DataLakeDataProcessRegionViewRegion["LONDON_GBR"] = "LONDON_GBR";
/** MUMBAI_IND */
DataLakeDataProcessRegionViewRegion["MUMBAI_IND"] = "MUMBAI_IND";
/** OREGON_USA */
DataLakeDataProcessRegionViewRegion["OREGON_USA"] = "OREGON_USA";
/** SYDNEY_AUS */
DataLakeDataProcessRegionViewRegion["SYDNEY_AUS"] = "SYDNEY_AUS";
/** VIRGINIA_USA */
DataLakeDataProcessRegionViewRegion["VIRGINIA_USA"] = "VIRGINIA_USA";
})(DataLakeDataProcessRegionViewRegion || (exports.DataLakeDataProcessRegionViewRegion = DataLakeDataProcessRegionViewRegion = {}));
/**
* Converts an object of type 'DataLakeDatabaseView' to JSON representation.
*/
/* eslint-disable max-len, quote-props */
function toJson_DataLakeDatabaseView(obj) {
if (obj === undefined) {
return undefined;
}
const result = {
Collections: obj.collections?.map((y) => toJson_DataLakeDatabaseCollectionView(y)),
MaxWildcardCollections: obj.maxWildcardCollections,
Name: obj.name,
Views: obj.views?.map((y) => toJson_DataLakeViewView(y)),
};
// filter undefined values
return Object.entries(result).reduce((r, i) => (i[1] === undefined ? r : { ...r, [i[0]]: i[1] }), {});
}
/**
* Converts an object of type 'StoreDetail' to JSON representation.
*/
/* eslint-disable max-len, quote-props */
function toJson_StoreDetail(obj) {
if (obj === undefined) {
return undefined;
}
const result = {
Name: obj.name,
Provider: obj.provider,
Region: obj.region,
Bucket: obj.bucket,
Prefix: obj.prefix,
Delimiter: obj.delimiter,
IncludeTags: obj.includeTags,
AdditionalStorageClasses: obj.additionalStorageClasses?.map((y) => y),
};
// filter undefined values
return Object.entries(result).reduce((r, i) => (i[1] === undefined ? r : { ...r, [i[0]]: i[1] }), {});
}
/**
* Converts an object of type 'DataLakeDatabaseCollectionView' to JSON representation.
*/
/* eslint-disable max-len, quote-props */
function toJson_DataLakeDatabaseCollectionView(obj) {
if (obj === undefined) {
return undefined;
}
const result = {
DataSources: obj.dataSources?.map((y) => toJson_DataLakeDatabaseDataSourceView(y)),
Name: obj.name,
};
// filter undefined values
return Object.entries(result).reduce((r, i) => (i[1] === undefined ? r : { ...r, [i[0]]: i[1] }), {});
}
/**
* Converts an object of type 'DataLakeViewView' to JSON representation.
*/
/* eslint-disable max-len, quote-props */
function toJson_DataLakeViewView(obj) {
if (obj === undefined) {
return undefined;
}
const result = {
Name: obj.name,
Pipeline: obj.pipeline,
Source: obj.source,
};
// filter undefined values
return Object.entries(result).reduce((r, i) => (i[1] === undefined ? r : { ...r, [i[0]]: i[1] }), {});
}
/**
* Converts an object of type 'DataLakeDatabaseDataSourceView' to JSON representation.
*/
/* eslint-disable max-len, quote-props */
function toJson_DataLakeDatabaseDataSourceView(obj) {
if (obj === undefined) {
return undefined;
}
const result = {
AllowInsecure: obj.allowInsecure,
Collection: obj.collection,
CollectionRegex: obj.collectionRegex,
Database: obj.database,
DefaultFormat: obj.defaultFormat,
Path: obj.path,
StoreName: obj.storeName,
Urls: obj.urls?.map((y) => y),
};
// filter undefined values
return Object.entries(result).reduce((r, i) => (i[1] === undefined ? r : { ...r, [i[0]]: i[1] }), {});
}
/* eslint-enable max-len, quote-props */
/**
* File format that MongoDB Cloud uses if it encounters a file without a file extension while searching **storeName**.
*
* @schema DataLakeDatabaseDataSourceViewDefaultFormat
*/
var DataLakeDatabaseDataSourceViewDefaultFormat;
(function (DataLakeDatabaseDataSourceViewDefaultFormat) {
/** .avro */
DataLakeDatabaseDataSourceViewDefaultFormat["AVRO"] = ".avro";
/** .avro.gz */
DataLakeDatabaseDataSourceViewDefaultFormat["AVRO_GZ"] = ".avro.gz";
/** .bson */
DataLakeDatabaseDataSourceViewDefaultFormat["BSON"] = ".bson";
/** .bson.gz */
DataLakeDatabaseDataSourceViewDefaultFormat["BSON_GZ"] = ".bson.gz";
/** .csv */
DataLakeDatabaseDataSourceViewDefaultFormat["CSV"] = ".csv";
/** .json */
DataLakeDatabaseDataSourceViewDefaultFormat["JSON"] = ".json";
/** .json.gz */
DataLakeDatabaseDataSourceViewDefaultFormat["JSON_GZ"] = ".json.gz";
/** .orc */
DataLakeDatabaseDataSourceViewDefaultFormat["ORC"] = ".orc";
/** .tsv */
DataLakeDatabaseDataSourceViewDefaultFormat["TSV"] = ".tsv";
/** .tsv.gz */
DataLakeDatabaseDataSourceViewDefaultFormat["TSV_GZ"] = ".tsv.gz";
})(DataLakeDatabaseDataSourceViewDefaultFormat || (exports.DataLakeDatabaseDataSourceViewDefaultFormat = DataLakeDatabaseDataSourceViewDefaultFormat = {}));
/**
* A CloudFormation `MongoDB::Atlas::DataLakes`
*
* @cloudformationResource MongoDB::Atlas::DataLakes
* @stability external
*/
class CfnDataLakes extends cdk.CfnResource {
/**
* Create a new `MongoDB::Atlas::DataLakes`.
*
* @param scope - scope in which this resource is defined
* @param id - scoped id of the resource
* @param props - resource properties
*/
constructor(scope, id, props) {
super(scope, id, {
type: CfnDataLakes.CFN_RESOURCE_TYPE_NAME,
properties: toJson_CfnDataLakesProps(props),
});
this.props = props;
this.attrStartDate = cdk.Token.asNumber(this.getAtt("StartDate"));
this.attrHostnames = cdk.Token.asList(this.getAtt("Hostnames"));
this.attrState = cdk.Token.asString(this.getAtt("State"));
}
}
exports.CfnDataLakes = CfnDataLakes;
_a = JSII_RTTI_SYMBOL_1;
CfnDataLakes[_a] = { fqn: "awscdk-resources-mongodbatlas.CfnDataLakes", version: "3.13.0" };
/**
* The CloudFormation resource type name for this resource class.
*/
CfnDataLakes.CFN_RESOURCE_TYPE_NAME = "MongoDB::Atlas::DataLakes";
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbDEtcmVzb3VyY2VzL2RhdGFsYWtlcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBdUVBLDREQXlCQztBQW1CRCx3RkFjQztBQTBCRCxvRkFlQztBQTBCRCxnRUFlQztBQStDRCw4RkFrQkM7QUFnRkQsa0VBbUJDO0FBc0VELGdEQXFCQztBQTBCRCxzRkFpQkM7QUFpQ0QsMERBZ0JDO0FBb0VELHNGQXFCQzs7QUF2b0JELDBCQUEwQjtBQUMxQixtQ0FBbUM7QUFrRW5DOztHQUVHO0FBQ0gseUNBQXlDO0FBQ3pDLFNBQWdCLHdCQUF3QixDQUN0QyxHQUFrQztJQUVsQyxJQUFJLEdBQUcsS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUN0QixPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBQ0QsTUFBTSxNQUFNLEdBQUc7UUFDYixtQkFBbUIsRUFBRSxzQ0FBc0MsQ0FDekQsR0FBRyxDQUFDLG1CQUFtQixDQUN4QjtRQUNELGlCQUFpQixFQUFFLG9DQUFvQyxDQUNyRCxHQUFHLENBQUMsaUJBQWlCLENBQ3RCO1FBQ0QsT0FBTyxFQUFFLEdBQUcsQ0FBQyxPQUFPO1FBQ3BCLFNBQVMsRUFBRSxHQUFHLENBQUMsU0FBUztRQUN4QixPQUFPLEVBQUUsR0FBRyxDQUFDLE9BQU87UUFDcEIsa0JBQWtCLEVBQUUsR0FBRyxDQUFDLGtCQUFrQjtRQUMxQyxPQUFPLEVBQUUsMEJBQTBCLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQztRQUNoRCxVQUFVLEVBQUUsR0FBRyxDQUFDLFVBQVU7S0FDM0IsQ0FBQztJQUNGLDBCQUEwQjtJQUMxQixPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUNsQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxD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RywyQkFBMkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEdlbmVyYXRlZCBieSBjZGstaW1wb3J0XG5pbXBvcnQgKiBhcyBjZGsgZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgKiBhcyBjb25zdHJ1Y3RzIGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5cbi8qKlxuICogUmV0dXJucywgYWRkcywgZWRpdHMsIGFuZCByZW1vdmVzIEZlZGVyYXRlZCBEYXRhYmFzZSBJbnN0YW5jZXMuXG4gKlxuICogQHNjaGVtYSBDZm5EYXRhTGFrZXNQcm9wc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIENmbkRhdGFMYWtlc1Byb3BzIHtcbiAgLyoqXG4gICAqIENsb3VkIHByb3ZpZGVyIGxpbmtlZCB0byB0aGlzIGRhdGEgbGFrZS5cbiAgICpcbiAgICogQHNjaGVtYSBDZm5EYXRhTGFrZXNQcm9wcyNDbG91ZFByb3ZpZGVyQ29uZmlnXG4gICAqL1xuICByZWFkb25seSBjbG91ZFByb3ZpZGVyQ29uZmlnPzogRGF0YUxha2VDbG91ZFByb3ZpZGVyQ29uZmlnVmlldztcblxuICAvKipcbiAgICogSW5mb3JtYXRpb24gYWJvdXQgdGhlIGNsb3VkIHByb3ZpZGVyIHJlZ2lvbiB0byB3aGljaCB0aGUgZGF0YSBsYWtlIHJvdXRlcyBjbGllbnQgY29ubmVjdGlvbnMuIE1vbmdvREIgQ2xvdWQgc3VwcG9ydHMgQVdTIG9ubHkuXG4gICAqXG4gICAqIEBzY2hlbWEgQ2ZuRGF0YUxha2VzUHJvcHMjRGF0YVByb2Nlc3NSZWdpb25cbiAgICovXG4gIHJlYWRvbmx5IGRhdGFQcm9jZXNzUmVnaW9uPzogRGF0YUxha2VEYXRhUHJvY2Vzc1JlZ2lvblZpZXc7XG5cbiAgLyoqXG4gICAqIFRpbWVzdGFtcCB0aGF0IHNwZWNpZmllcyB0aGUgZW5kIHBvaW50IGZvciB0aGUgcmFuZ2Ugb2YgbG9nIG1lc3NhZ2VzIHRvIGRvd25sb2FkLiAgTW9uZ29EQiBDbG91ZCBleHByZXNzZXMgdGhpcyB0aW1lc3RhbXAgaW4gdGhlIG51bWJlciBvZiBzZWNvbmRzIHRoYXQgaGF2ZSBlbGFwc2VkIHNpbmNlIHRoZSBVTklYIGVwb2NoLlxuICAgKlxuICAgKiBAc2NoZW1hIENmbkRhdGFMYWtlc1Byb3BzI0VuZERhdGVcbiAgICovXG4gIHJlYWRvbmx5IGVuZERhdGU/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFVuaXF1ZSAyNC1oZXhhZGVjaW1hbCBkaWdpdCBzdHJpbmcgdGhhdCBpZGVudGlmaWVzIHlvdXIgcHJvamVjdC5cbiAgICpcbiAgICogQHNjaGVtYSBDZm5EYXRhTGFrZXNQcm9wcyNQcm9qZWN0SWRcbiAgICovXG4gIHJlYWRvbmx5IHByb2plY3RJZD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHByb2ZpbGUgaXMgZGVmaW5lZCBpbiBBV1MgU2VjcmV0IG1hbmFnZXIuIFNlZSBbU2VjcmV0IE1hbmFnZXIgUHJvZmlsZSBzZXR1cF0oLi4vLi4vLi4vZXhhbXBsZXMvcHJvZmlsZS1zZWNyZXQueWFtbCkuXG4gICAqXG4gICAqIEBzY2hlbWEgQ2ZuRGF0YUxha2VzUHJvcHMjUHJvZmlsZVxuICAgKi9cbiAgcmVhZG9ubHkgcHJvZmlsZT86IHN0cmluZztcblxuICAvKipcbiAgICogRmxhZyB0aGF0IGluZGljYXRlcyB3aGV0aGVyIHRoaXMgcmVxdWVzdCBzaG91bGQgY2hlY2sgaWYgdGhlIHJlcXVlc3RpbmcgSUFNIHJvbGUgY2FuIHJlYWQgZnJvbSB0aGUgUzMgYnVja2V0LiBBV1MgY2hlY2tzIGlmIHRoZSByb2xlIGNhbiBsaXN0IHRoZSBvYmplY3RzIGluIHRoZSBidWNrZXQgYmVmb3JlIHdyaXRpbmcgdG8gaXQuIFNvbWUgSUFNIHJvbGVzIG9ubHkgbmVlZCB3cml0ZSBwZXJtaXNzaW9ucy4gVGhpcyBmbGFnIGFsbG93cyB5b3UgdG8gc2tpcCB0aGF0IGNoZWNrLlxuICAgKlxuICAgKiBAc2NoZW1hIENmbkRhdGFMYWtlc1Byb3BzI1NraXBSb2xlVmFsaWRhdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgc2tpcFJvbGVWYWxpZGF0aW9uPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQ29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgZWFjaCBkYXRhIHN0b3JlIGFuZCBpdHMgbWFwcGluZyB0byBNb25nb0RCIENsb3VkIGRhdGFiYXNlcy5cbiAgICpcbiAgICogQHNjaGVtYSBDZm5EYXRhTGFrZXNQcm9wcyNTdG9yYWdlXG4gICAqL1xuICByZWFkb25seSBzdG9yYWdlPzogRGF0YUxha2VTdG9yYWdlVmlldztcblxuICAvKipcbiAgICogSHVtYW4tcmVhZGFibGUgbGFiZWwgdGhhdCBpZGVudGlmaWVzIHRoZSBGZWRlcmF0ZWQgRGF0YWJhc2UgdG8gcmVtb3ZlLlxuICAgKlxuICAgKiBAc2NoZW1hIENmbkRhdGFMYWtlc1Byb3BzI1RlbmFudE5hbWVcbiAgICovXG4gIHJlYWRvbmx5IHRlbmFudE5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0NmbkRhdGFMYWtlc1Byb3BzJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9DZm5EYXRhTGFrZXNQcm9wcyhcbiAgb2JqOiBDZm5EYXRhTGFrZXNQcm9wcyB8IHVuZGVmaW5lZFxuKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgIENsb3VkUHJvdmlkZXJDb25maWc6IHRvSnNvbl9EYXRhTGFrZUNsb3VkUHJvdmlkZXJDb25maWdWaWV3KFxuICAgICAgb2JqLmNsb3VkUHJvdmlkZXJDb25maWdcbiAgICApLFxuICAgIERhdGFQcm9jZXNzUmVnaW9uOiB0b0pzb25fRGF0YUxha2VEYXRhUHJvY2Vzc1JlZ2lvblZpZXcoXG4gICAgICBvYmouZGF0YVByb2Nlc3NSZWdpb25cbiAgICApLFxuICAgIEVuZERhdGU6IG9iai5lbmREYXRlLFxuICAgIFByb2plY3RJZDogb2JqLnByb2plY3RJZCxcbiAgICBQcm9maWxlOiBvYmoucHJvZmlsZSxcbiAgICBTa2lwUm9sZVZhbGlkYXRpb246IG9iai5za2lwUm9sZVZhbGlkYXRpb24sXG4gICAgU3RvcmFnZTogdG9Kc29uX0RhdGFMYWtlU3RvcmFnZVZpZXcob2JqLnN0b3JhZ2UpLFxuICAgIFRlbmFudE5hbWU6IG9iai50ZW5hbnROYW1lLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoXG4gICAgKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQgPyByIDogeyAuLi5yLCBbaVswXV06IGlbMV0gfSksXG4gICAge31cbiAgKTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIERhdGFMYWtlQ2xvdWRQcm92aWRlckNvbmZpZ1ZpZXdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhTGFrZUNsb3VkUHJvdmlkZXJDb25maWdWaWV3IHtcbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIGNsb3VkIHNlcnZpY2UgdGhhdCBob3N0cyB0aGUgZGF0YSBsYWtlJ3MgZGF0YSBzdG9yZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgRGF0YUxha2VDbG91ZFByb3ZpZGVyQ29uZmlnVmlldyNBd3NcbiAgICovXG4gIHJlYWRvbmx5IGF3cz86IERhdGFMYWtlQXdzQ2xvdWRQcm92aWRlckNvbmZpZ1ZpZXc7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0RhdGFMYWtlQ2xvdWRQcm92aWRlckNvbmZpZ1ZpZXcnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0RhdGFMYWtlQ2xvdWRQcm92aWRlckNvbmZpZ1ZpZXcoXG4gIG9iajogRGF0YUxha2VDbG91ZFByb3ZpZGVyQ29uZmlnVmlldyB8IHVuZGVmaW5lZFxuKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgIEF3czogdG9Kc29uX0RhdGFMYWtlQXdzQ2xvdWRQcm92aWRlckNvbmZpZ1ZpZXcob2JqLmF3cyksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZShcbiAgICAociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCA/IHIgOiB7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSxcbiAgICB7fVxuICApO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRGF0YUxha2VEYXRhUHJvY2Vzc1JlZ2lvblZpZXdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhTGFrZURhdGFQcm9jZXNzUmVnaW9uVmlldyB7XG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSBjbG91ZCBzZXJ2aWNlIHRoYXQgaG9zdHMgdGhlIGRhdGEgbGFrZSdzIGRhdGEgc3RvcmVzLlxuICAgKlxuICAgKiBAc2NoZW1hIERhdGFMYWtlRGF0YVByb2Nlc3NSZWdpb25WaWV3I0Nsb3VkUHJvdmlkZXJcbiAgICovXG4gIHJlYWRvbmx5IGNsb3VkUHJvdmlkZXI/OiBEYXRhTGFrZURhdGFQcm9jZXNzUmVnaW9uVmlld0Nsb3VkUHJvdmlkZXI7XG5cbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIHJlZ2lvbiB0byB3aGljaCB0aGUgZGF0YSBsYWtlIHJvdXRlcyBjbGllbnQgY29ubmVjdGlvbnMuXG4gICAqXG4gICAqIEBzY2hlbWEgRGF0YUxha2VEYXRhUHJvY2Vzc1JlZ2lvblZpZXcjUmVnaW9uXG4gICAqL1xuICByZWFkb25seSByZWdpb24/OiBEYXRhTGFrZURhdGFQcm9jZXNzUmVnaW9uVmlld1JlZ2lvbjtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRGF0YUxha2VEYXRhUHJvY2Vzc1JlZ2lvblZpZXcnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0RhdGFMYWtlRGF0YVByb2Nlc3NSZWdpb25WaWV3KFxuICBvYmo6IERhdGFMYWtlRGF0YVByb2Nlc3NSZWdpb25WaWV3IHwgdW5kZWZpbmVkXG4pOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgQ2xvdWRQcm92aWRlcjogb2JqLmNsb3VkUHJvdmlkZXIsXG4gICAgUmVnaW9uOiBvYmoucmVnaW9uLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoXG4gICAgKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQgPyByIDogeyAuLi5yLCBbaVswXV06IGlbMV0gfSksXG4gICAge31cbiAgKTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIERhdGFMYWtlU3RvcmFnZVZpZXdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhTGFrZVN0b3JhZ2VWaWV3IHtcbiAgLyoqXG4gICAqIEFycmF5IHRoYXQgY29udGFpbnMgdGhlIHF1ZXJ5YWJsZSBkYXRhYmFzZXMgYW5kIGNvbGxlY3Rpb25zIGZvciB0aGlzIGRhdGEgbGFrZS5cbiAgICpcbiAgICogQHNjaGVtYSBEYXRhTGFrZVN0b3JhZ2VWaWV3I0RhdGFiYXNlc1xuICAgKi9cbiAgcmVhZG9ubHkgZGF0YWJhc2VzPzogRGF0YUxha2VEYXRhYmFzZVZpZXdbXTtcblxuICAvKipcbiAgICogQXJyYXkgdGhhdCBjb250YWlucyB0aGUgZGF0YSBzdG9yZXMgZm9yIHRoZSBkYXRhIGxha2UuXG4gICAqXG4gICAqIEBzY2hlbWEgRGF0YUxha2VTdG9yYWdlVmlldyNTdG9yZXNcbiAgICovXG4gIHJlYWRvbmx5IHN0b3Jlcz86IFN0b3JlRGV0YWlsW107XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0RhdGFMYWtlU3RvcmFnZVZpZXcnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0RhdGFMYWtlU3RvcmFnZVZpZXcoXG4gIG9iajogRGF0YUxha2VTdG9yYWdlVmlldyB8IHVuZGVmaW5lZFxuKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgIERhdGFiYXNlczogb2JqLmRhdGFiYXNlcz8ubWFwKCh5KSA9PiB0b0pzb25fRGF0YUxha2VEYXRhYmFzZVZpZXcoeSkpLFxuICAgIFN0b3Jlczogb2JqLnN0b3Jlcz8ubWFwKCh5KSA9PiB0b0pzb25fU3RvcmVEZXRhaWwoeSkpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoXG4gICAgKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQgPyByIDogeyAuLi5yLCBbaVswXV06IGlbMV0gfSksXG4gICAge31cbiAgKTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIERhdGFMYWtlQVdTQ2xvdWRQcm92aWRlckNvbmZpZ1ZpZXdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhTGFrZUF3c0Nsb3VkUHJvdmlkZXJDb25maWdWaWV3IHtcbiAgLyoqXG4gICAqIFVuaXF1ZSBpZGVudGlmaWVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgSWRlbnRpdHkgYW5kIEFjY2VzcyBNYW5hZ2VtZW50IChJQU0pIHJvbGUgdGhhdCB0aGUgZGF0YSBsYWtlIGFzc3VtZXMgd2hlbiBhY2Nlc3NpbmcgdGhlIGRhdGEgc3RvcmVzLlxuICAgKlxuICAgKiBAc2NoZW1hIERhdGFMYWtlQVdTQ2xvdWRQcm92aWRlckNvbmZpZ1ZpZXcjRXh0ZXJuYWxJZFxuICAgKi9cbiAgcmVhZG9ubHkgZXh0ZXJuYWxJZD86IHN0cmluZztcblxuICAvKipcbiAgICogQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgb2YgdGhlIElkZW50aXR5IGFuZCBBY2Nlc3MgTWFuYWdlbWVudCAoSUFNKSByb2xlIHRoYXQgdGhlIGRhdGEgbGFrZSBhc3N1bWVzIHdoZW4gYWNjZXNzaW5nIGRhdGEgc3RvcmVzLlxuICAgKlxuICAgKiBAc2NoZW1hIERhdGFMYWtlQVdTQ2xvdWRQcm92aWRlckNvbmZpZ1ZpZXcjSWFtQXNzdW1lZFJvbGVBUk5cbiAgICovXG4gIHJlYWRvbmx5IGlhbUFzc3VtZWRSb2xlQXJuPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBbWF6b24gUmVzb3VyY2UgTmFtZSAoQVJOKSBvZiB0aGUgdXNlciB0aGF0IHRoZSBkYXRhIGxha2UgYXNzdW1lcyB3aGVuIGFjY2Vzc2luZyBkYXRhIHN0b3Jlcy5cbiAgICpcbiAgICogQHNjaGVtYSBEYXRhTGFrZUFXU0Nsb3VkUHJvdmlkZXJDb25maWdWaWV3I0lhbVVzZXJBUk5cbiAgICovXG4gIHJlYWRvbmx5IGlhbVVzZXJBcm4/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSByb2xlIHRoYXQgdGhlIGRhdGEgbGFrZSBjYW4gdXNlIHRvIGFjY2VzcyB0aGUgZGF0YSBzdG9yZXMuUmVxdWlyZWQgaWYgc3BlY2lmeWluZyBjbG91ZFByb3ZpZGVyQ29uZmlnLlxuICAgKlxuICAgKiBAc2NoZW1hIERhdGFMYWtlQVdTQ2xvdWRQcm92aWRlckNvbmZpZ1ZpZXcjUm9sZUlkXG4gICAqL1xuICByZWFkb25seSByb2xlSWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIFMzIGRhdGEgYnVja2V0IHRoYXQgdGhlIHByb3ZpZGVkIHJvbGUgSUQgaXMgYXV0aG9yaXplZCB0byBhY2Nlc3MuUmVxdWlyZWQgaWYgc3BlY2lmeWluZyBjbG91ZFByb3ZpZGVyQ29uZmlnLlxuICAgKlxuICAgKiBAc2NoZW1hIERhdGFMYWtlQVdTQ2xvdWRQcm92aWRlckNvbmZpZ1ZpZXcjVGVzdFMzQnVja2V0XG4gICAqL1xuICByZWFkb25seSB0ZXN0UzNCdWNrZXQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0RhdGFMYWtlQXdzQ2xvdWRQcm92aWRlckNvbmZpZ1ZpZXcnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0RhdGFMYWtlQXdzQ2xvdWRQcm92aWRlckNvbmZpZ1ZpZXcoXG4gIG9iajogRGF0YUxha2VBd3NDbG91ZFByb3ZpZGVyQ29uZmlnVmlldyB8IHVuZGVmaW5lZFxuKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgIEV4dGVybmFsSWQ6IG9iai5leHRlcm5hbElkLFxuICAgIElhbUFzc3VtZWRSb2xlQVJOOiBvYmouaWFtQXNzdW1lZFJvbGVBcm4sXG4gICAgSWFtVXNlckFSTjogb2JqLmlhbVVzZXJBcm4sXG4gICAgUm9sZUlkOiBvYmoucm9sZUlkLFxuICAgIFRlc3RTM0J1Y2tldDogb2JqLnRlc3RTM0J1Y2tldCxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKFxuICAgIChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkID8gciA6IHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLFxuICAgIHt9XG4gICk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogTmFtZSBvZiB0aGUgY2xvdWQgc2VydmljZSB0aGF0IGhvc3RzIHRoZSBkYXRhIGxha2UncyBkYXRhIHN0b3Jlcy5cbiAqXG4gKiBAc2NoZW1hIERhdGFMYWtlRGF0YVByb2Nlc3NSZWdpb25WaWV3Q2xvdWRQcm92aWRlclxuICovXG5leHBvcnQgZW51bSBEYXRhTGFrZURhdGFQcm9jZXNzUmVnaW9uVmlld0Nsb3VkUHJvdmlkZXIge1xuICAvKiogQVdTICovXG4gIEFXUyA9IFwiQVdTXCIsXG4gIC8qKiBHQ1AgKi9cbiAgR0NQID0gXCJHQ1BcIixcbiAgLyoqIEFaVVJFICovXG4gIEFaVVJFID0gXCJBWlVSRVwiLFxuICAvKiogVEVOQU5UICovXG4gIFRFTkFOVCA9IFwiVEVOQU5UXCIsXG4gIC8qKiBTRVJWRVJMRVNTICovXG4gIFNFUlZFUkxFU1MgPSBcIlNFUlZFUkxFU1NcIixcbn1cblxuLyoqXG4gKiBOYW1lIG9mIHRoZSByZWdpb24gdG8gd2hpY2ggdGhlIGRhdGEgbGFrZSByb3V0ZXMgY2xpZW50IGNvbm5lY3Rpb25zLlxuICpcbiAqIEBzY2hlbWEgRGF0YUxha2VEYXRhUHJvY2Vzc1JlZ2lvblZpZXdSZWdpb25cbiAqL1xuZXhwb3J0IGVudW0gRGF0YUxha2VEYXRhUHJvY2Vzc1JlZ2lvblZpZXdSZWdpb24ge1xuICAvKiogRFVCTElOX0lSTCAqL1xuICBEVUJMSU5fSVJMID0gXCJEVUJMSU5fSVJMXCIsXG4gIC8qKiBGUkFOS0ZVUlRfREVVICovXG4gIEZSQU5LRlVSVF9ERVUgPSBcIkZSQU5LRlVSVF9ERVVcIixcbiAgLyoqIExPTkRPTl9HQlIgKi9cbiAgTE9ORE9OX0dCUiA9IFwiTE9ORE9OX0dCUlwiLFxuICAvKiogTVVNQkFJX0lORCAqL1xuICBNVU1CQUlfSU5EID0gXCJNVU1CQUlfSU5EXCIsXG4gIC8qKiBPUkVHT05fVVNBICovXG4gIE9SRUdPTl9VU0EgPSBcIk9SRUdPTl9VU0FcIixcbiAgLyoqIFNZRE5FWV9BVVMgKi9cbiAgU1lETkVZX0FVUyA9IFwiU1lETkVZX0FVU1wiLFxuICAvKiogVklSR0lOSUFfVVNBICovXG4gIFZJUkdJTklBX1VTQSA9IFwiVklSR0lOSUFfVVNBXCIsXG59XG5cbi8qKlxuICogQHNjaGVtYSBEYXRhTGFrZURhdGFiYXNlVmlld1xuICovXG5leHBvcnQgaW50ZXJmYWNlIERhdGFMYWtlRGF0YWJhc2VWaWV3IHtcbiAgLyoqXG4gICAqIEFycmF5IG9mIGNvbGxlY3Rpb25zIGFuZCBkYXRhIHNvdXJjZXMgdGhhdCBtYXAgdG8gYSBgYHN0b3Jlc2BgIGRhdGEgc3RvcmUuXG4gICAqXG4gICAqIEBzY2hlbWEgRGF0YUxha2VEYXRhYmFzZVZpZXcjQ29sbGVjdGlvbnNcbiAgICovXG4gIHJlYWRvbmx5IGNvbGxlY3Rpb25zPzogRGF0YUxha2VEYXRhYmFzZUNvbGxlY3Rpb25WaWV3W107XG5cbiAgLyoqXG4gICAqIE1heGltdW0gbnVtYmVyIG9mIHdpbGRjYXJkIGNvbGxlY3Rpb25zIGluIHRoZSBkYXRhYmFzZS4gVGhpcyBvbmx5IGFwcGxpZXMgdG8gUzMgZGF0YSBzb3VyY2VzLlxuICAgKlxuICAgKiBAc2NoZW1hIERhdGFMYWtlRGF0YWJhc2VWaWV3I01heFdpbGRjYXJkQ29sbGVjdGlvbnNcbiAgICovXG4gIHJlYWRvbmx5IG1heFdpbGRjYXJkQ29sbGVjdGlvbnM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEh1bWFuLXJlYWRhYmxlIGxhYmVsIHRoYXQgaWRlbnRpZmllcyB0aGUgZGF0YWJhc2UgdG8gd2hpY2ggdGhlIGRhdGEgbGFrZSBtYXBzIGRhdGEuXG4gICAqXG4gICAqIEBzY2hlbWEgRGF0YUxha2VEYXRhYmFzZVZpZXcjTmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogQXJyYXkgb2YgYWdncmVnYXRpb24gcGlwZWxpbmVzIHRoYXQgYXBwbHkgdG8gdGhlIGNvbGxlY3Rpb24uIFRoaXMgb25seSBhcHBsaWVzIHRvIFMzIGRhdGEgc291cmNlcy5cbiAgICpcbiAgICogQHNjaGVtYSBEYXRhTGFrZURhdGFiYXNlVmlldyNWaWV3c1xuICAgKi9cbiAgcmVhZG9ubHkgdmlld3M/OiBEYXRhTGFrZVZpZXdWaWV3W107XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0RhdGFMYWtlRGF0YWJhc2VWaWV3JyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9EYXRhTGFrZURhdGFiYXNlVmlldyhcbiAgb2JqOiBEYXRhTGFrZURhdGFiYXNlVmlldyB8IHVuZGVmaW5lZFxuKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgIENvbGxlY3Rpb25zOiBvYmouY29sbGVjdGlvbnM/Lm1hcCgoeSkgPT5cbiAgICAgIHRvSnNvbl9EYXRhTGFrZURhdGFiYXNlQ29sbGVjdGlvblZpZXcoeSlcbiAgICApLFxuICAgIE1heFdpbGRjYXJkQ29sbGVjdGlvbnM6IG9iai5tYXhXaWxkY2FyZENvbGxlY3Rpb25zLFxuICAgIE5hbWU6IG9iai5uYW1lLFxuICAgIFZpZXdzOiBvYmoudmlld3M/Lm1hcCgoeSkgPT4gdG9Kc29uX0RhdGFMYWtlVmlld1ZpZXcoeSkpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoXG4gICAgKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQgPyByIDogeyAuLi5yLCBbaVswXV06IGlbMV0gfSksXG4gICAge31cbiAgKTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvciBlYWNoIGRhdGEgc3RvcmUgYW5kIGl0cyBtYXBwaW5nIHRvIE1vbmdvREIgQ2xvdWQgZGF0YWJhc2VzLlxuICpcbiAqIEBzY2hlbWEgU3RvcmVEZXRhaWxcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdG9yZURldGFpbCB7XG4gIC8qKlxuICAgKiBIdW1hbi1yZWFkYWJsZSBsYWJlbCB0aGF0IGlkZW50aWZpZXMgdGhlIGRhdGEgc3RvcmUuXG4gICAqXG4gICAqIEBzY2hlbWEgU3RvcmVEZXRhaWwjTmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogSHVtYW4tcmVhZGFibGUgbGFiZWwgdGhhdCBpZGVudGlmaWVzIHRoZSBGZWRlcmF0ZWQgRGF0YWJhc2UgdG8gdXBkYXRlLlxuICAgKlxuICAgKiBAc2NoZW1hIFN0b3JlRGV0YWlsI1Byb3ZpZGVyXG4gICAqL1xuICByZWFkb25seSBwcm92aWRlcj86IHN0cmluZztcblxuICAvKipcbiAgICogSHVtYW4tcmVhZGFibGUgbGFiZWwgdGhhdCBpZGVudGlmaWVzIHRoZSBGZWRlcmF0ZWQgRGF0YWJhc2UgdG8gdXBkYXRlLlxuICAgKlxuICAgKiBAc2NoZW1hIFN0b3JlRGV0YWlsI1JlZ2lvblxuICAgKi9cbiAgcmVhZG9ubHkgcmVnaW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBIdW1hbi1yZWFkYWJsZSBsYWJlbCB0aGF0IGlkZW50aWZpZXMgdGhlIEZlZGVyYXRlZCBEYXRhYmFzZSB0byB1cGRhdGUuXG4gICAqXG4gICAqIEBzY2hlbWEgU3RvcmVEZXRhaWwjQnVja2V0XG4gICAqL1xuICByZWFkb25seSBidWNrZXQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEh1bWFuLXJlYWRhYmxlIGxhYmVsIHRoYXQgaWRlbnRpZmllcyB0aGUgRmVkZXJhdGVkIERhdGFiYXNlIHRvIHVwZGF0ZS5cbiAgICpcbiAgICogQHNjaGVtYSBTdG9yZURldGFpbCNQcmVmaXhcbiAgICovXG4gIHJlYWRvbmx5IHByZWZpeD86IHN0cmluZztcblxuICAvKipcbiAgICogSHVtYW4tcmVhZGFibGUgbGFiZWwgdGhhdCBpZGVudGlmaWVzIHRoZSBGZWRlcmF0ZWQgRGF0YWJhc2UgdG8gdXBkYXRlLlxuICAgKlxuICAgKiBAc2NoZW1hIFN0b3JlRGV0YWlsI0RlbGltaXRlclxuICAgKi9cbiAgcmVhZG9ubHkgZGVsaW1pdGVyPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBIdW1hbi1yZWFkYWJsZSBsYWJlbCB0aGF0IGlkZW50aWZpZXMgdGhlIEZlZGVyYXRlZCBEYXRhYmFzZSB0byB1cGRhdGUuXG4gICAqXG4gICAqIEBzY2hlbWEgU3RvcmVEZXRhaWwjSW5jbHVkZVRhZ3NcbiAgICovXG4gIHJlYWRvbmx5IGluY2x1ZGVUYWdzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSHVtYW4tcmVhZGFibGUgbGFiZWwgdGhhdCBpZGVudGlmaWVzIHRoZSBGZWRlcmF0ZWQgRGF0YWJhc2UgdG8gdXBkYXRlLlxuICAgKlxuICAgKiBAc2NoZW1hIFN0b3JlRGV0YWlsI0FkZGl0aW9uYWxTdG9yYWdlQ2xhc3Nlc1xuICAgKi9cbiAgcmVhZG9ubHkgYWRkaXRpb25hbFN0b3JhZ2VDbGFzc2VzPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ1N0b3JlRGV0YWlsJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9TdG9yZURldGFpbChcbiAgb2JqOiBTdG9yZURldGFpbCB8IHVuZGVmaW5lZFxuKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgIE5hbWU6IG9iai5uYW1lLFxuICAgIFByb3ZpZGVyOiBvYmoucHJvdmlkZXIsXG4gICAgUmVnaW9uOiBvYmoucmVnaW9uLFxuICAgIEJ1Y2tldDogb2JqLmJ1Y2tldCxcbiAgICBQcmVmaXg6IG9iai5wcmVmaXgsXG4gICAgRGVsaW1pdGVyOiBvYmouZGVsaW1pdGVyLFxuICAgIEluY2x1ZGVUYWdzOiBvYmouaW5jbHVkZVRhZ3MsXG4gICAgQWRkaXRpb25hbFN0b3JhZ2VDbGFzc2VzOiBvYmouYWRkaXRpb25hbFN0b3JhZ2VDbGFzc2VzPy5tYXAoKHkpID0+IHkpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoXG4gICAgKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQgPyByIDogeyAuLi5yLCBbaVswXV06IGlbMV0gfSksXG4gICAge31cbiAgKTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIERhdGFMYWtlRGF0YWJhc2VDb2xsZWN0aW9uVmlld1xuICovXG5leHBvcnQgaW50ZXJmYWNlIERhdGFMYWtlRGF0YWJhc2VDb2xsZWN0aW9uVmlldyB7XG4gIC8qKlxuICAgKiBBcnJheSB0aGF0IGNvbnRhaW5zIHRoZSBkYXRhIHN0b3JlcyB0aGF0IG1hcCB0byBhIGNvbGxlY3Rpb24gZm9yIHRoaXMgZGF0YSBsYWtlLlxuICAgKlxuICAgKiBAc2NoZW1hIERhdGFMYWtlRGF0YWJhc2VDb2xsZWN0aW9uVmlldyNEYXRhU291cmNlc1xuICAgKi9cbiAgcmVhZG9ubHkgZGF0YVNvdXJjZXM/OiBEYXRhTGFrZURhdGFiYXNlRGF0YVNvdXJjZVZpZXdbXTtcblxuICAvKipcbiAgICogSHVtYW4tcmVhZGFibGUgbGFiZWwgdGhhdCBpZGVudGlmaWVzIHRoZSBjb2xsZWN0aW9uIHRvIHdoaWNoIE1vbmdvREIgQ2xvdWQgbWFwcyB0aGUgZGF0YSBpbiB0aGUgZGF0YSBzdG9yZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgRGF0YUxha2VEYXRhYmFzZUNvbGxlY3Rpb25WaWV3I05hbWVcbiAgICovXG4gIHJlYWRvbmx5IG5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0RhdGFMYWtlRGF0YWJhc2VDb2xsZWN0aW9uVmlldycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fRGF0YUxha2VEYXRhYmFzZUNvbGxlY3Rpb25WaWV3KFxuICBvYmo6IERhdGFMYWtlRGF0YWJhc2VDb2xsZWN0aW9uVmlldyB8IHVuZGVmaW5lZFxuKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgIERhdGFTb3VyY2VzOiBvYmouZGF0YVNvdXJjZXM/Lm1hcCgoeSkgPT5cbiAgICAgIHRvSnNvbl9EYXRhTGFrZURhdGFiYXNlRGF0YVNvdXJjZVZpZXcoeSlcbiAgICApLFxuICAgIE5hbWU6IG9iai5uYW1lLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoXG4gICAgKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQgPyByIDogeyAuLi5yLCBbaVswXV06IGlbMV0gfSksXG4gICAge31cbiAgKTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIERhdGFMYWtlVmlld1ZpZXdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhTGFrZVZpZXdWaWV3IHtcbiAgLyoqXG4gICAqIEh1bWFuLXJlYWRhYmxlIGxhYmVsIHRoYXQgaWRlbnRpZmllcyB0aGUgdmlldywgd2hpY2ggY29ycmVzcG9uZHMgdG8gYW4gYWdncmVnYXRpb24gcGlwZWxpbmUgb24gYSBjb2xsZWN0aW9uLlxuICAgKlxuICAgKiBAc2NoZW1hIERhdGFMYWtlVmlld1ZpZXcjTmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogQWdncmVnYXRpb24gcGlwZWxpbmUgc3RhZ2VzIHRvIGFwcGx5IHRvIHRoZSBzb3VyY2UgY29sbGVjdGlvbi5cbiAgICpcbiAgICogQHNjaGVtYSBEYXRhTGFrZVZpZXdWaWV3I1BpcGVsaW5lXG4gICAqL1xuICByZWFkb25seSBwaXBlbGluZT86IHN0cmluZztcblxuICAvKipcbiAgICogSHVtYW4tcmVhZGFibGUgbGFiZWwgdGhhdCBpZGVudGlmaWVzIHRoZSBzb3VyY2UgY29sbGVjdGlvbiBmb3IgdGhlIHZpZXcuXG4gICAqXG4gICAqIEBzY2hlbWEgRGF0YUxha2VWaWV3VmlldyNTb3VyY2VcbiAgICovXG4gIHJlYWRvbmx5IHNvdXJjZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRGF0YUxha2VWaWV3VmlldycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fRGF0YUxha2VWaWV3VmlldyhcbiAgb2JqOiBEYXRhTGFrZVZpZXdWaWV3IHwgdW5kZWZpbmVkXG4pOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgTmFtZTogb2JqLm5hbWUsXG4gICAgUGlwZWxpbmU6IG9iai5waXBlbGluZSxcbiAgICBTb3VyY2U6IG9iai5zb3VyY2UsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZShcbiAgICAociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCA/IHIgOiB7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSxcbiAgICB7fVxuICApO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRGF0YUxha2VEYXRhYmFzZURhdGFTb3VyY2VWaWV3XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YUxha2VEYXRhYmFzZURhdGFTb3VyY2VWaWV3IHtcbiAgLyoqXG4gICAqIEZsYWcgdGhhdCB2YWxpZGF0ZXMgdGhlIHNjaGVtZSBpbiB0aGUgc3BlY2lmaWVkIFVSTHMuIElmIGB0cnVlYCwgYWxsb3dzIGluc2VjdXJlIGBIVFRQYCBzY2hlbWUsIGRvZXNuJ3QgdmVyaWZ5IHRoZSBzZXJ2ZXIncyBjZXJ0aWZpY2F0ZSBjaGFpbiBhbmQgaG9zdG5hbWUsIGFuZCBhY2NlcHRzIGFueSBjZXJ0aWZpY2F0ZSB3aXRoIGFueSBob3N0bmFtZSBwcmVzZW50ZWQgYnkgdGhlIHNlcnZlci4gSWYgYGZhbHNlYCwgYWxsb3dzIHNlY3VyZSBgSFRUUFNgIHNjaGVtZSBvbmx5LlxuICAgKlxuICAgKiBAc2NoZW1hIERhdGFMYWtlRGF0YWJhc2VEYXRhU291cmNlVmlldyNBbGxvd0luc2VjdXJlXG4gICAqL1xuICByZWFkb25seSBhbGxvd0luc2VjdXJlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSHVtYW4tcmVhZGFibGUgbGFiZWwgdGhhdCBpZGVudGlmaWVzIHRoZSBjb2xsZWN0aW9uIGluIHRoZSBkYXRhYmFzZS4gRm9yIGNyZWF0aW5nIGEgd2lsZGNhcmQgKGAqYCkgY29sbGVjdGlvbiwgeW91IG11c3Qgb21pdCB0aGlzIHBhcmFtZXRlci5cbiAgICpcbiAgICogQHNjaGVtYSBEYXRhTGFrZURhdGFiYXNlRGF0YVNvdXJjZVZpZXcjQ29sbGVjdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgY29sbGVjdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogUmVnZXggcGF0dGVybiB0byB1c2UgZm9yIGNyZWF0aW5nIHRoZSB3aWxkY2FyZCAoKikgY29sbGVjdGlvbi4gVG8gbGVhcm4gbW9yZSBhYm91dCB0aGUgcmVnZXggc3ludGF4LCBzZWUgW0dvIHByb2dyYW1taW5nIGxhbmd1YWdlXShodHRwczovL3BrZy5nby5kZXYvcmVnZXhwKS5cbiAgICpcbiAgICogQHNjaGVtYSBEYXRhTGFrZURhdGFiYXNlRGF0YVNvdXJjZVZpZXcjQ29sbGVjdGlvblJlZ2V4XG4gICAqL1xuICByZWFkb25seSBjb2xsZWN0aW9uUmVnZXg/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEh1bWFuLXJlYWRhYmxlIGxhYmVsIHRoYXQgaWRlbnRpZmllcyB0aGUgZGF0YWJhc2UsIHdoaWNoIGNvbnRhaW5zIHRoZSBjb2xsZWN0aW9uIGluIHRoZSBjbHVzdGVyLiBZb3UgbXVzdCBvbWl0IHRoaXMgcGFyYW1ldGVyIHRvIGdlbmVyYXRlIHdpbGRjYXJkIChgKmApIGNvbGxlY3Rpb25zIGZvciBkeW5hbWljYWxseSBnZW5lcmF0ZWQgZGF0YWJhc2VzLlxuICAgKlxuICAgKiBAc2NoZW1hIERhdGFMYWtlRGF0YWJhc2VEYXRhU291cmNlVmlldyNEYXRhYmFzZVxuICAgKi9cbiAgcmVhZG9ubHkgZGF0YWJhc2U/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEZpbGUgZm9ybWF0IHRoYXQgTW9uZ29EQiBDbG91ZCB1c2VzIGlmIGl0IGVuY291bnRlcnMgYSBmaWxlIHdpdGhvdXQgYSBmaWxlIGV4dGVuc2lvbiB3aGlsZSBzZWFyY2hpbmcgKipzdG9yZU5hbWUqKi5cbiAgICpcbiAgICogQHNjaGVtYSBEYXRhTGFrZURhdGFiYXNlRGF0YVNvdXJjZVZpZXcjRGVmYXVsdEZvcm1hdFxuICAgKi9cbiAgcmVhZG9ubHkgZGVmYXVsdEZvcm1hdD86IERhdGFMYWtlRGF0YWJhc2VEYXRhU291cmNlVmlld0RlZmF1bHRGb3JtYXQ7XG5cbiAgLyoqXG4gICAqIEZpbGUgcGF0aCB0aGF0IGNvbnRyb2xzIGhvdyBNb25nb0RCIENsb3VkIHNlYXJjaGVzIGZvciBhbmQgcGFyc2VzIGZpbGVzIGluIHRoZSAqKnN0b3JlTmFtZSoqIGJlZm9yZSBtYXBwaW5nIHRoZW0gdG8gYSBjb2xsZWN0aW9uLlNwZWNpZnkgYGAvYGAgdG8gY2FwdHVyZSBhbGwgZmlsZXMgYW5kIGZvbGRlcnMgZnJvbSB0aGUgYGBwcmVmaXhgYCBwYXRoLlxuICAgKlxuICAgKiBAc2NoZW1hIERhdGFMYWtlRGF0YWJhc2VEYXRhU291cmNlVmlldyNQYXRoXG4gICAqL1xuICByZWFkb25seSBwYXRoPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBIdW1hbi1yZWFkYWJsZSBsYWJlbCB0aGF0IGlkZW50aWZpZXMgdGhlIGRhdGEgc3RvcmUgdGhhdCBNb25nb0RCIENsb3VkIG1hcHMgdG8gdGhlIGNvbGxlY3Rpb24uXG4gICAqXG4gICAqIEBzY2hlbWEgRGF0YUxha2VEYXRhYmFzZURhdGFTb3VyY2VWaWV3I1N0b3JlTmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgc3RvcmVOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBVUkxzIG9mIHRoZSBwdWJsaWNseSBhY2Nlc3NpYmxlIGRhdGEgZmlsZXMuIFlvdSBjYW4ndCBzcGVjaWZ5IFVSTHMgdGhhdCByZXF1aXJlIGF1dGhlbnRpY2F0aW9uLiBBdGxhcyBEYXRhIExha2UgY3JlYXRlcyBhIHBhcnRpdGlvbiBmb3IgZWFjaCBVUkwuIElmIGVtcHR5IG9yIG9taXR0ZWQsIERhdGEgTGFrZSB1c2VzIHRoZSBVUkxzIGZyb20gdGhlIHN0b3JlIHNwZWNpZmllZCBpbiB0aGUgKipkYXRhU291cmNlcy5zdG9yZU5hbWUqKiBwYXJhbWV0ZXIuXG4gICAqXG4gICAqIEBzY2hlbWEgRGF0YUxha2VEYXRhYmFzZURhdGFTb3VyY2VWaWV3I1VybHNcbiAgICovXG4gIHJlYWRvbmx5IHVybHM/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRGF0YUxha2VEYXRhYmFzZURhdGFTb3VyY2VWaWV3JyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9EYXRhTGFrZURhdGFiYXNlRGF0YVNvdXJjZVZpZXcoXG4gIG9iajogRGF0YUxha2VEYXRhYmFzZURhdGFTb3VyY2VWaWV3IHwgdW5kZWZpbmVkXG4pOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgQWxsb3dJbnNlY3VyZTogb2JqLmFsbG93SW5zZWN1cmUsXG4gICAgQ29sbGVjdGlvbjogb2JqLmNvbGxlY3Rpb24sXG4gICAgQ29sbGVjdGlvblJlZ2V4OiBvYmouY29sbGVjdGlvblJlZ2V4LFxuICAgIERhdGFiYXNlOiBvYmouZGF0YWJhc2UsXG4gICAgRGVmYXVsdEZvcm1hdDogb2JqLmRlZmF1bHRGb3JtYXQsXG4gICAgUGF0aDogb2JqLnBhdGgsXG4gICAgU3RvcmVOYW1lOiBvYmouc3RvcmVOYW1lLFxuICAgIFVybHM6IG9iai51cmxzPy5tYXAoKHkpID0+IHkpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoXG4gICAgKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQgPyByIDogeyAuLi5yLCBbaVswXV06IGlbMV0gfSksXG4gICAge31cbiAgKTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBGaWxlIGZvcm1hdCB0aGF0IE1vbmdvREIgQ2xvdWQgdXNlcyBpZiBpdCBlbmNvdW50ZXJzIGEgZmlsZSB3aXRob3V0IGEgZmlsZSBleHRlbnNpb24gd2hpbGUgc2VhcmNoaW5nICoqc3RvcmVOYW1lKiouXG4gKlxuICogQHNjaGVtYSBEYXRhTGFrZURhdGFiYXNlRGF0YVNvdXJjZVZpZXdEZWZhdWx0Rm9ybWF0XG4gKi9cbmV4cG9ydCBlbnVtIERhdGFMYWtlRGF0YWJhc2VEYXRhU291cmNlVmlld0RlZmF1bHRGb3JtYXQge1xuICAvKiogLmF2cm8gKi9cbiAgQVZSTyA9IFwiLmF2cm9cIixcbiAgLyoqIC5hdnJvLmd6ICovXG4gIEFWUk9fR1ogPSBcIi5hdnJvLmd6XCIsXG4gIC8qKiAuYnNvbiAqL1xuICBCU09OID0gXCIuYnNvblwiLFxuICAvKiogLmJzb24uZ3ogKi9cbiAgQlNPTl9HWiA9IFwiLmJzb24uZ3pcIixcbiAgLyoqIC5jc3YgKi9cbiAgQ1NWID0gXCIuY3N2XCIsXG4gIC8qKiAuanNvbiAqL1xuICBKU09OID0gXCIuanNvblwiLFxuICAvKiogLmpzb24uZ3ogKi9cbiAgSlNPTl9HWiA9IFwiLmpzb24uZ3pcIixcbiAgLyoqIC5vcmMgKi9cbiAgT1JDID0gXCIub3JjXCIsXG4gIC8qKiAudHN2ICovXG4gIFRTViA9IFwiLnRzdlwiLFxuICAvKiogLnRzdi5neiAqL1xuICBUU1ZfR1ogPSBcIi50c3YuZ3pcIixcbn1cblxuLyoqXG4gKiBBIENsb3VkRm9ybWF0aW9uIGBNb25nb0RCOjpBdGxhczo6RGF0YUxha2VzYFxuICpcbiAqIEBjbG91ZGZvcm1hdGlvblJlc291cmNlIE1vbmdvREI6OkF0bGFzOjpEYXRhTGFrZXNcbiAqIEBzdGFiaWxpdHkgZXh0ZXJuYWxcbiAqL1xuZXhwb3J0IGNsYXNzIENmbkRhdGFMYWtlcyBleHRlbmRzIGNkay5DZm5SZXNvdXJjZSB7XG4gIC8qKlxuICAgKiBUaGUgQ2xvdWRGb3JtYXRpb24gcmVzb3VyY2UgdHlwZSBuYW1lIGZvciB0aGlzIHJlc291cmNlIGNsYXNzLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBDRk5fUkVTT1VSQ0VfVFlQRV9OQU1FID0gXCJNb25nb0RCOjpBdGxhczo6RGF0YUxha2VzXCI7XG5cbiAgLyoqXG4gICAqIFJlc291cmNlIHByb3BzLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHByb3BzOiBDZm5EYXRhTGFrZXNQcm9wcztcblxuICAvKipcbiAgICogQXR0cmlidXRlIGBNb25nb0RCOjpBdGxhczo6RGF0YUxha2VzLlN0YXJ0RGF0ZWBcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBhdHRyU3RhcnREYXRlOiBudW1iZXI7XG4gIC8qKlxuICAgKiBBdHRyaWJ1dGUgYE1vbmdvREI6OkF0bGFzOjpEYXRhTGFrZXMuSG9zdG5hbWVzYFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGF0dHJIb3N0bmFtZXM6IHN0cmluZ1tdO1xuICAvKipcbiAgICogQXR0cmlidXRlIGBNb25nb0RCOjpBdGxhczo6RGF0YUxha2VzLlN0YXRlYFxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGF0dHJTdGF0ZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgYE1vbmdvREI6OkF0bGFzOjpEYXRhTGFrZXNgLlxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgLSBzY29wZSBpbiB3aGljaCB0aGlzIHJlc291cmNlIGlzIGRlZmluZWRcbiAgICogQHBhcmFtIGl