UNPKG

awscdk-resources-mongodbatlas

Version:

MongoDB Atlas CDK Construct Library for AWS CloudFormation Resources

239 lines 45.9 kB
"use strict"; var _a; Object.defineProperty(exports, "__esModule", { value: true }); exports.CfnFederatedDatabaseInstance = void 0; exports.toJson_CfnFederatedDatabaseInstanceProps = toJson_CfnFederatedDatabaseInstanceProps; exports.toJson_CloudProviderConfig = toJson_CloudProviderConfig; exports.toJson_DataProcessRegion = toJson_DataProcessRegion; exports.toJson_Storage = toJson_Storage; exports.toJson_Database = toJson_Database; exports.toJson_Store = toJson_Store; exports.toJson_Collection = toJson_Collection; exports.toJson_View = toJson_View; exports.toJson_ReadPreference = toJson_ReadPreference; exports.toJson_DataSource = toJson_DataSource; exports.toJson_TagSet = toJson_TagSet; const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti"); // Generated by cdk-import const cdk = require("aws-cdk-lib"); /** * Converts an object of type 'CfnFederatedDatabaseInstanceProps' to JSON representation. */ /* eslint-disable max-len, quote-props */ function toJson_CfnFederatedDatabaseInstanceProps(obj) { if (obj === undefined) { return undefined; } const result = { CloudProviderConfig: toJson_CloudProviderConfig(obj.cloudProviderConfig), DataProcessRegion: toJson_DataProcessRegion(obj.dataProcessRegion), ProjectId: obj.projectId, TenantName: obj.tenantName, SkipRoleValidation: obj.skipRoleValidation, Storage: toJson_Storage(obj.storage), Profile: obj.profile, }; // filter undefined values return Object.entries(result).reduce((r, i) => (i[1] === undefined ? r : { ...r, [i[0]]: i[1] }), {}); } /** * Converts an object of type 'CloudProviderConfig' to JSON representation. */ /* eslint-disable max-len, quote-props */ function toJson_CloudProviderConfig(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] }), {}); } /** * Converts an object of type 'DataProcessRegion' to JSON representation. */ /* eslint-disable max-len, quote-props */ function toJson_DataProcessRegion(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 'Storage' to JSON representation. */ /* eslint-disable max-len, quote-props */ function toJson_Storage(obj) { if (obj === undefined) { return undefined; } const result = { Databases: obj.databases?.map((y) => toJson_Database(y)), Stores: obj.stores?.map((y) => toJson_Store(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 'Database' to JSON representation. */ /* eslint-disable max-len, quote-props */ function toJson_Database(obj) { if (obj === undefined) { return undefined; } const result = { Collections: obj.collections?.map((y) => toJson_Collection(y)), MaxWildcardCollections: obj.maxWildcardCollections, Name: obj.name, Views: obj.views?.map((y) => toJson_View(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 'Store' to JSON representation. */ /* eslint-disable max-len, quote-props */ function toJson_Store(obj) { if (obj === undefined) { return undefined; } const result = { Name: obj.name, Provider: obj.provider, ClusterName: obj.clusterName, ProjectId: obj.projectId, ReadPreference: toJson_ReadPreference(obj.readPreference), }; // filter undefined values return Object.entries(result).reduce((r, i) => (i[1] === undefined ? r : { ...r, [i[0]]: i[1] }), {}); } /** * Converts an object of type 'Collection' to JSON representation. */ /* eslint-disable max-len, quote-props */ function toJson_Collection(obj) { if (obj === undefined) { return undefined; } const result = { DataSources: obj.dataSources?.map((y) => toJson_DataSource(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 'View' to JSON representation. */ /* eslint-disable max-len, quote-props */ function toJson_View(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 'ReadPreference' to JSON representation. */ /* eslint-disable max-len, quote-props */ function toJson_ReadPreference(obj) { if (obj === undefined) { return undefined; } const result = { Mode: obj.mode, MaxStalenessSeconds: obj.maxStalenessSeconds, TagSets: obj.tagSets?.map((y) => y?.map((x) => toJson_TagSet(x))), }; // filter undefined values return Object.entries(result).reduce((r, i) => (i[1] === undefined ? r : { ...r, [i[0]]: i[1] }), {}); } /** * Converts an object of type 'DataSource' to JSON representation. */ /* eslint-disable max-len, quote-props */ function toJson_DataSource(obj) { if (obj === undefined) { return undefined; } const result = { AllowInsecure: obj.allowInsecure, Collection: obj.collection, CollectionRegex: obj.collectionRegex, Database: obj.database, DatabaseRegex: obj.databaseRegex, DefaultFormat: obj.defaultFormat, Path: obj.path, ProvenanceFieldName: obj.provenanceFieldName, 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] }), {}); } /** * Converts an object of type 'TagSet' to JSON representation. */ /* eslint-disable max-len, quote-props */ function toJson_TagSet(obj) { if (obj === undefined) { return undefined; } const result = { Name: obj.name, Value: obj.value, }; // 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 */ /** * A CloudFormation `MongoDB::Atlas::FederatedDatabaseInstance` * * @cloudformationResource MongoDB::Atlas::FederatedDatabaseInstance * @stability external */ class CfnFederatedDatabaseInstance extends cdk.CfnResource { /** * Create a new `MongoDB::Atlas::FederatedDatabaseInstance`. * * @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: CfnFederatedDatabaseInstance.CFN_RESOURCE_TYPE_NAME, properties: toJson_CfnFederatedDatabaseInstanceProps(props), }); this.props = props; this.attrHostNames = cdk.Token.asList(this.getAtt("HostNames")); this.attrState = cdk.Token.asString(this.getAtt("State")); } } exports.CfnFederatedDatabaseInstance = CfnFederatedDatabaseInstance; _a = JSII_RTTI_SYMBOL_1; CfnFederatedDatabaseInstance[_a] = { fqn: "awscdk-resources-mongodbatlas.CfnFederatedDatabaseInstance", version: "4.0.0" }; /** * The CloudFormation resource type name for this resource class. */ CfnFederatedDatabaseInstance.CFN_RESOURCE_TYPE_NAME = "MongoDB::Atlas::FederatedDatabaseInstance"; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbDEtcmVzb3VyY2VzL2ZlZGVyYXRlZC1kYXRhYmFzZS1pbnN0YW5jZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBZ0VBLDRGQW9CQztBQWlERCxnRUFrQkM7QUE0QkQsNERBZUM7QUE0QkQsd0NBZUM7QUF3Q0QsMENBaUJDO0FBaURELG9DQWtCQztBQTBCRCw4Q0FlQztBQWlDRCxrQ0FnQkM7QUFrQ0Qsc0RBZ0JDO0FBa0ZELDhDQXVCQztBQTBCRCxzQ0FlQzs7QUF2b0JELDBCQUEwQjtBQUMxQixtQ0FBbUM7QUEyRG5DOztHQUVHO0FBQ0gseUNBQXlDO0FBQ3pDLFNBQWdCLHdDQUF3QyxDQUN0RCxHQUFrRDtJQUVsRCxJQUFJLEdBQUcsS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUN0QixPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBQ0QsTUFBTSxNQUFNLEdBQUc7UUFDYixtQkFBbUIsRUFBRSwwQkFBMEIsQ0FBQyxHQUFHLENBQUMsbUJBQW1CLENBQUM7UUFDeEUsaUJBQWlCLEVBQUUsd0JBQXdCLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDO1FBQ2xFLFNBQVMsRUFBRSxHQUFHLENBQUMsU0FBUztRQUN4QixVQUFVLEVBQUUsR0FBRyxDQUFDLFVBQVU7UUFDMUIsa0JBQWtCLEVBQUUsR0FBRyxDQUFDLGtCQUFrQjtRQUMxQyxPQUFPLEVBQUUsY0FBYyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUM7UUFDcEMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxPQUFPO0tBQ3JCLENBQUM7SUFDRiwwQkFBMEI7SUFDMUIsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FDbEMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQyxD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QixTQUFRLEdBQUcsQ0FBQyxXQUFXO0lBcUIvRDs7Ozs7O09BTUc7SUFDSCxZQUNFLEtBQTJCLEVBQzNCLEVBQVUsRUFDVixLQUF3QztRQUV4QyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRTtZQUNmLElBQUksRUFBRSw0QkFBNEIsQ0FBQyxzQkFBc0I7WUFDekQsVUFBVSxFQUFFLHdDQUF3QyxDQUFDLEtBQUssQ0FBRTtTQUM3RCxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUVuQixJQUFJLENBQUMsYUFBYSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztRQUNoRSxJQUFJLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUM1RCxDQUFDOztBQTFDSCxvRUEyQ0M7OztBQTFDQzs7R0FFRztBQUNvQixtREFBc0IsR0FDM0MsMkNBQTJDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBHZW5lcmF0ZWQgYnkgY2RrLWltcG9ydFxuaW1wb3J0ICogYXMgY2RrIGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0ICogYXMgY29uc3RydWN0cyBmcm9tIFwiY29uc3RydWN0c1wiO1xuXG4vKipcbiAqIFJldHVybnMsIGFkZHMsIGVkaXRzLCBhbmQgcmVtb3ZlcyBGZWRlcmF0ZWQgRGF0YWJhc2UgSW5zdGFuY2VzLlxuICpcbiAqIEBzY2hlbWEgQ2ZuRmVkZXJhdGVkRGF0YWJhc2VJbnN0YW5jZVByb3BzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2ZuRmVkZXJhdGVkRGF0YWJhc2VJbnN0YW5jZVByb3BzIHtcbiAgLyoqXG4gICAqIENsb3VkIHByb3ZpZGVyIGxpbmtlZCB0byB0aGlzIEF0bGFzIERhdGEgRmVkZXJhdGlvbi5cbiAgICpcbiAgICogQHNjaGVtYSBDZm5GZWRlcmF0ZWREYXRhYmFzZUluc3RhbmNlUHJvcHMjQ2xvdWRQcm92aWRlckNvbmZpZ1xuICAgKi9cbiAgcmVhZG9ubHkgY2xvdWRQcm92aWRlckNvbmZpZz86IENsb3VkUHJvdmlkZXJDb25maWc7XG5cbiAgLyoqXG4gICAqIEluZm9ybWF0aW9uIGFib3V0IHRoZSBjbG91ZCBwcm92aWRlciByZWdpb24gdG8gd2hpY2ggdGhlIEF0bGFzIERhdGEgRmVkZXJhdGlvbiByb3V0ZXMgY2xpZW50IGNvbm5lY3Rpb25zLiBNb25nb0RCIENsb3VkIHN1cHBvcnRzIEFXUyBvbmx5LlxuICAgKlxuICAgKiBAc2NoZW1hIENmbkZlZGVyYXRlZERhdGFiYXNlSW5zdGFuY2VQcm9wcyNEYXRhUHJvY2Vzc1JlZ2lvblxuICAgKi9cbiAgcmVhZG9ubHkgZGF0YVByb2Nlc3NSZWdpb24/OiBEYXRhUHJvY2Vzc1JlZ2lvbjtcblxuICAvKipcbiAgICogVW5pcXVlIDI0LWhleGFkZWNpbWFsIGRpZ2l0IHN0cmluZyB0aGF0IGlkZW50aWZpZXMgeW91ciBwcm9qZWN0LlxuICAgKlxuICAgKiBAc2NoZW1hIENmbkZlZGVyYXRlZERhdGFiYXNlSW5zdGFuY2VQcm9wcyNQcm9qZWN0SWRcbiAgICovXG4gIHJlYWRvbmx5IHByb2plY3RJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBIdW1hbi1yZWFkYWJsZSBsYWJlbCB0aGF0IGlkZW50aWZpZXMgdGhlIGRhdGEgZmVkZXJhdGlvbi5cbiAgICpcbiAgICogQHNjaGVtYSBDZm5GZWRlcmF0ZWREYXRhYmFzZUluc3RhbmNlUHJvcHMjVGVuYW50TmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgdGVuYW50TmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBGbGFnIHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgdGhpcyByZXF1ZXN0IHNob3VsZCBjaGVjayBpZiB0aGUgcmVxdWVzdGluZyBJQU0gcm9sZSBjYW4gcmVhZCBmcm9tIHRoZSBTMyBidWNrZXQuIEFXUyBjaGVja3MgaWYgdGhlIHJvbGUgY2FuIGxpc3QgdGhlIG9iamVjdHMgaW4gdGhlIGJ1Y2tldCBiZWZvcmUgd3JpdGluZyB0byBpdC4gU29tZSBJQU0gcm9sZXMgb25seSBuZWVkIHdyaXRlIHBlcm1pc3Npb25zLiBUaGlzIGZsYWcgYWxsb3dzIHlvdSB0byBza2lwIHRoYXQgY2hlY2suXG4gICAqXG4gICAqIEBzY2hlbWEgQ2ZuRmVkZXJhdGVkRGF0YWJhc2VJbnN0YW5jZVByb3BzI1NraXBSb2xlVmFsaWRhdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgc2tpcFJvbGVWYWxpZGF0aW9uPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQ29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgZWFjaCBkYXRhIHN0b3JlIGFuZCBpdHMgbWFwcGluZyB0byBNb25nb0RCIENsb3VkIGRhdGFiYXNlcy5cbiAgICpcbiAgICogQHNjaGVtYSBDZm5GZWRlcmF0ZWREYXRhYmFzZUluc3RhbmNlUHJvcHMjU3RvcmFnZVxuICAgKi9cbiAgcmVhZG9ubHkgc3RvcmFnZT86IFN0b3JhZ2U7XG5cbiAgLyoqXG4gICAqIFRoZSBwcm9maWxlIGlzIGRlZmluZWQgaW4gQVdTIFNlY3JldCBtYW5hZ2VyLiBTZWUgW1NlY3JldCBNYW5hZ2VyIFByb2ZpbGUgc2V0dXBdKC4uLy4uLy4uL2V4YW1wbGVzL3Byb2ZpbGUtc2VjcmV0LnlhbWwpLlxuICAgKlxuICAgKiBAc2NoZW1hIENmbkZlZGVyYXRlZERhdGFiYXNlSW5zdGFuY2VQcm9wcyNQcm9maWxlXG4gICAqL1xuICByZWFkb25seSBwcm9maWxlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdDZm5GZWRlcmF0ZWREYXRhYmFzZUluc3RhbmNlUHJvcHMnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0NmbkZlZGVyYXRlZERhdGFiYXNlSW5zdGFuY2VQcm9wcyhcbiAgb2JqOiBDZm5GZWRlcmF0ZWREYXRhYmFzZUluc3RhbmNlUHJvcHMgfCB1bmRlZmluZWRcbik6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICBDbG91ZFByb3ZpZGVyQ29uZmlnOiB0b0pzb25fQ2xvdWRQcm92aWRlckNvbmZpZyhvYmouY2xvdWRQcm92aWRlckNvbmZpZyksXG4gICAgRGF0YVByb2Nlc3NSZWdpb246IHRvSnNvbl9EYXRhUHJvY2Vzc1JlZ2lvbihvYmouZGF0YVByb2Nlc3NSZWdpb24pLFxuICAgIFByb2plY3RJZDogb2JqLnByb2plY3RJZCxcbiAgICBUZW5hbnROYW1lOiBvYmoudGVuYW50TmFtZSxcbiAgICBTa2lwUm9sZVZhbGlkYXRpb246IG9iai5za2lwUm9sZVZhbGlkYXRpb24sXG4gICAgU3RvcmFnZTogdG9Kc29uX1N0b3JhZ2Uob2JqLnN0b3JhZ2UpLFxuICAgIFByb2ZpbGU6IG9iai5wcm9maWxlLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoXG4gICAgKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQgPyByIDogeyAuLi5yLCBbaVswXV06IGlbMV0gfSksXG4gICAge31cbiAgKTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBDbG91ZCBwcm92aWRlciBsaW5rZWQgdG8gdGhpcyBBdGxhcyBEYXRhIEZlZGVyYXRpb24uXG4gKlxuICogQHNjaGVtYSBDbG91ZFByb3ZpZGVyQ29uZmlnXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2xvdWRQcm92aWRlckNvbmZpZyB7XG4gIC8qKlxuICAgKiBVbmlxdWUgaWRlbnRpZmllciBvZiB0aGUgcm9sZSB0aGF0IHRoZSBBdGxhcyBEYXRhIEZlZGVyYXRpb24gY2FuIHVzZSB0byBhY2Nlc3MgdGhlIGRhdGEgc3RvcmVzLlJlcXVpcmVkIGlmIHNwZWNpZnlpbmcgY2xvdWRQcm92aWRlckNvbmZpZy5cbiAgICpcbiAgICogQHNjaGVtYSBDbG91ZFByb3ZpZGVyQ29uZmlnI0V4dGVybmFsSWRcbiAgICovXG4gIHJlYWRvbmx5IGV4dGVybmFsSWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFtYXpvbiBSZXNvdXJjZSBOYW1lIChBUk4pIG9mIHRoZSBJZGVudGl0eSBhbmQgQWNjZXNzIE1hbmFnZW1lbnQgKElBTSkgcm9sZSB0aGF0IHRoZSBBdGxhcyBEYXRhIEZlZGVyYXRpb24gYXNzdW1lcyB3aGVuIGFjY2Vzc2luZyBkYXRhIHN0b3Jlcy5cbiAgICpcbiAgICogQHNjaGVtYSBDbG91ZFByb3ZpZGVyQ29uZmlnI0lhbUFzc3VtZWRSb2xlQVJOXG4gICAqL1xuICByZWFkb25seSBpYW1Bc3N1bWVkUm9sZUFybj86IHN0cmluZztcblxuICAvKipcbiAgICogQW1hem9uIFJlc291cmNlIE5hbWUgKEFSTikgb2YgdGhlIHVzZXIgdGhhdCB0aGUgQXRsYXMgRGF0YSBGZWRlcmF0aW9uIGFzc3VtZXMgd2hlbiBhY2Nlc3NpbmcgZGF0YSBzdG9yZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgQ2xvdWRQcm92aWRlckNvbmZpZyNJYW1Vc2VyQVJOXG4gICAqL1xuICByZWFkb25seSBpYW1Vc2VyQXJuPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBVbmlxdWUgaWRlbnRpZmllciBvZiB0aGUgcm9sZSB0aGF0IHRoZSBBdGxhcyBEYXRhIEZlZGVyYXRpb24gY2FuIHVzZSB0byBhY2Nlc3MgdGhlIGRhdGEgc3RvcmVzLlJlcXVpcmVkIGlmIHNwZWNpZnlpbmcgY2xvdWRQcm92aWRlckNvbmZpZy5cbiAgICpcbiAgICogQHNjaGVtYSBDbG91ZFByb3ZpZGVyQ29uZmlnI1JvbGVJZFxuICAgKi9cbiAgcmVhZG9ubHkgcm9sZUlkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSBTMyBkYXRhIGJ1Y2tldCB0aGF0IHRoZSBwcm92aWRlZCByb2xlIElEIGlzIGF1dGhvcml6ZWQgdG8gYWNjZXNzLlJlcXVpcmVkIGlmIHNwZWNpZnlpbmcgY2xvdWRQcm92aWRlckNvbmZpZy5cbiAgICpcbiAgICogQHNjaGVtYSBDbG91ZFByb3ZpZGVyQ29uZmlnI1Rlc3RTM0J1Y2tldFxuICAgKi9cbiAgcmVhZG9ubHkgdGVzdFMzQnVja2V0Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdDbG91ZFByb3ZpZGVyQ29uZmlnJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9DbG91ZFByb3ZpZGVyQ29uZmlnKFxuICBvYmo6IENsb3VkUHJvdmlkZXJDb25maWcgfCB1bmRlZmluZWRcbik6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICBFeHRlcm5hbElkOiBvYmouZXh0ZXJuYWxJZCxcbiAgICBJYW1Bc3N1bWVkUm9sZUFSTjogb2JqLmlhbUFzc3VtZWRSb2xlQXJuLFxuICAgIElhbVVzZXJBUk46IG9iai5pYW1Vc2VyQXJuLFxuICAgIFJvbGVJZDogb2JqLnJvbGVJZCxcbiAgICBUZXN0UzNCdWNrZXQ6IG9iai50ZXN0UzNCdWNrZXQsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZShcbiAgICAociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCA/IHIgOiB7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSxcbiAgICB7fVxuICApO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEluZm9ybWF0aW9uIGFib3V0IHRoZSBjbG91ZCBwcm92aWRlciByZWdpb24gdG8gd2hpY2ggdGhlIEF0bGFzIERhdGEgRmVkZXJhdGlvbiByb3V0ZXMgY2xpZW50IGNvbm5lY3Rpb25zLiBNb25nb0RCIENsb3VkIHN1cHBvcnRzIEFXUyBvbmx5LlxuICpcbiAqIEBzY2hlbWEgRGF0YVByb2Nlc3NSZWdpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRhUHJvY2Vzc1JlZ2lvbiB7XG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSBjbG91ZCBzZXJ2aWNlIHRoYXQgaG9zdHMgdGhlIEF0bGFzIERhdGEgRmVkZXJhdGlvbiBkYXRhIHN0b3Jlcy5cbiAgICpcbiAgICogQHNjaGVtYSBEYXRhUHJvY2Vzc1JlZ2lvbiNDbG91ZFByb3ZpZGVyXG4gICAqL1xuICByZWFkb25seSBjbG91ZFByb3ZpZGVyPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSByZWdpb24gdG8gd2hpY2ggdGhlIEF0bGFzIERhdGEgRmVkZXJhdGlvbiByb3V0ZXMgY2xpZW50IGNvbm5lY3Rpb25zLlxuICAgKlxuICAgKiBAc2NoZW1hIERhdGFQcm9jZXNzUmVnaW9uI1JlZ2lvblxuICAgKi9cbiAgcmVhZG9ubHkgcmVnaW9uOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0RhdGFQcm9jZXNzUmVnaW9uJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9EYXRhUHJvY2Vzc1JlZ2lvbihcbiAgb2JqOiBEYXRhUHJvY2Vzc1JlZ2lvbiB8IHVuZGVmaW5lZFxuKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgIENsb3VkUHJvdmlkZXI6IG9iai5jbG91ZFByb3ZpZGVyLFxuICAgIFJlZ2lvbjogb2JqLnJlZ2lvbixcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKFxuICAgIChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkID8gciA6IHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLFxuICAgIHt9XG4gICk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgZWFjaCBkYXRhIHN0b3JlIGFuZCBpdHMgbWFwcGluZyB0byBNb25nb0RCIENsb3VkIGRhdGFiYXNlcy5cbiAqXG4gKiBAc2NoZW1hIFN0b3JhZ2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdG9yYWdlIHtcbiAgLyoqXG4gICAqIEFycmF5IHRoYXQgY29udGFpbnMgdGhlIHF1ZXJ5YWJsZSBkYXRhYmFzZXMgYW5kIGNvbGxlY3Rpb25zIGZvciB0aGlzIEF0bGFzIERhdGEgRmVkZXJhdGlvbi5cbiAgICpcbiAgICogQHNjaGVtYSBTdG9yYWdlI0RhdGFiYXNlc1xuICAgKi9cbiAgcmVhZG9ubHkgZGF0YWJhc2VzPzogRGF0YWJhc2VbXTtcblxuICAvKipcbiAgICogQXJyYXkgdGhhdCBjb250YWlucyB0aGUgZGF0YSBzdG9yZXMgZm9yIHRoZSBBdGxhcyBEYXRhIEZlZGVyYXRpb24uXG4gICAqXG4gICAqIEBzY2hlbWEgU3RvcmFnZSNTdG9yZXNcbiAgICovXG4gIHJlYWRvbmx5IHN0b3Jlcz86IFN0b3JlW107XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ1N0b3JhZ2UnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX1N0b3JhZ2UoXG4gIG9iajogU3RvcmFnZSB8IHVuZGVmaW5lZFxuKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgIERhdGFiYXNlczogb2JqLmRhdGFiYXNlcz8ubWFwKCh5KSA9PiB0b0pzb25fRGF0YWJhc2UoeSkpLFxuICAgIFN0b3Jlczogb2JqLnN0b3Jlcz8ubWFwKCh5KSA9PiB0b0pzb25fU3RvcmUoeSkpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoXG4gICAgKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQgPyByIDogeyAuLi5yLCBbaVswXV06IGlbMV0gfSksXG4gICAge31cbiAgKTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIERhdGFiYXNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YWJhc2Uge1xuICAvKipcbiAgICogQXJyYXkgb2YgY29sbGVjdGlvbnMgYW5kIGRhdGEgc291cmNlcyB0aGF0IG1hcCB0byBhIHN0b3JlcyBkYXRhIHN0b3JlLlxuICAgKlxuICAgKiBAc2NoZW1hIERhdGFiYXNlI0NvbGxlY3Rpb25zXG4gICAqL1xuICByZWFkb25seSBjb2xsZWN0aW9ucz86IENvbGxlY3Rpb25bXTtcblxuICAvKipcbiAgICogTWF4aW11bSBudW1iZXIgb2Ygd2lsZGNhcmQgY29sbGVjdGlvbnMgaW4gdGhlIGRhdGFiYXNlLiBUaGlzIG9ubHkgYXBwbGllcyB0byBTMyBkYXRhIHNvdXJjZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgRGF0YWJhc2UjTWF4V2lsZGNhcmRDb2xsZWN0aW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgbWF4V2lsZGNhcmRDb2xsZWN0aW9ucz86IHN0cmluZztcblxuICAvKipcbiAgICogSHVtYW4tcmVhZGFibGUgbGFiZWwgdGhhdCBpZGVudGlmaWVzIHRoZSBkYXRhYmFzZSB0byB3aGljaCB0aGUgQXRsYXMgRGF0YSBGZWRlcmF0aW9uIG1hcHMgZGF0YS5cbiAgICpcbiAgICogQHNjaGVtYSBEYXRhYmFzZSNOYW1lXG4gICAqL1xuICByZWFkb25seSBuYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBcnJheSBvZiBhZ2dyZWdhdGlvbiBwaXBlbGluZXMgdGhhdCBhcHBseSB0byB0aGUgY29sbGVjdGlvbi4gVGhpcyBvbmx5IGFwcGxpZXMgdG8gUzMgZGF0YSBzb3VyY2VzLlxuICAgKlxuICAgKiBAc2NoZW1hIERhdGFiYXNlI1ZpZXdzXG4gICAqL1xuICByZWFkb25seSB2aWV3cz86IFZpZXdbXTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRGF0YWJhc2UnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0RhdGFiYXNlKFxuICBvYmo6IERhdGFiYXNlIHwgdW5kZWZpbmVkXG4pOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgQ29sbGVjdGlvbnM6IG9iai5jb2xsZWN0aW9ucz8ubWFwKCh5KSA9PiB0b0pzb25fQ29sbGVjdGlvbih5KSksXG4gICAgTWF4V2lsZGNhcmRDb2xsZWN0aW9uczogb2JqLm1heFdpbGRjYXJkQ29sbGVjdGlvbnMsXG4gICAgTmFtZTogb2JqLm5hbWUsXG4gICAgVmlld3M6IG9iai52aWV3cz8ubWFwKCh5KSA9PiB0b0pzb25fVmlldyh5KSksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZShcbiAgICAociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCA/IHIgOiB7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSxcbiAgICB7fVxuICApO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEFycmF5IHRoYXQgY29udGFpbnMgdGhlIGRhdGEgc3RvcmVzIGZvciB0aGUgQXRsYXMgRGF0YSBGZWRlcmF0aW9uLlxuICpcbiAqIEBzY2hlbWEgU3RvcmVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdG9yZSB7XG4gIC8qKlxuICAgKiBIdW1hbi1yZWFkYWJsZSBsYWJlbCB0aGF0IGlkZW50aWZpZXMgdGhlIGRhdGEgc3RvcmUuIFRoZSBkYXRhYmFzZXMuW25dLmNvbGxlY3Rpb25zLltuXS5kYXRhU291cmNlcy5bbl0uc3RvcmVOYW1lIGZpZWxkIHJlZmVyZW5jZXMgdGhpcyB2YWx1ZXMgYXMgcGFydCBvZiB0aGUgbWFwcGluZyBjb25maWd1cmF0aW9uLiBUbyB1c2UgTW9uZ29EQiBDbG91ZCBhcyBhIGRhdGEgc3RvcmUsIHRoZSBBdGxhcyBEYXRhIEZlZGVyYXRpb24gcmVxdWlyZXMgYW4gTTEwIG9yIGhpZ2hlciBjbHVzdGVyLlxuICAgKlxuICAgKiBAc2NoZW1hIFN0b3JlI05hbWVcbiAgICovXG4gIHJlYWRvbmx5IG5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFsbG93ZWQgdmFsdWVzIGF0bGFzLCBodHRwLCBvbmxpbmVfYXJjaGl2ZSwgczMgYW5kIERhdGFMYWtlQXp1cmVCbG9iU3RvcmUuXG4gICAqXG4gICAqIEBzY2hlbWEgU3RvcmUjUHJvdmlkZXJcbiAgICovXG4gIHJlYWRvbmx5IHByb3ZpZGVyPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBIdW1hbi1yZWFkYWJsZSBsYWJlbCBvZiB0aGUgTW9uZ29EQiBDbG91ZCBjbHVzdGVyIG9uIHdoaWNoIHRoZSBzdG9yZSBpcyBiYXNlZC5cbiAgICpcbiAgICogQHNjaGVtYSBTdG9yZSNDbHVzdGVyTmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgY2x1c3Rlck5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFVuaXF1ZSAyNC1oZXhhZGVjaW1hbCBkaWdpdCBzdHJpbmcgdGhhdCBpZGVudGlmaWVzIHRoZSBwcm9qZWN0LlJlZ2V4IF4oW2EtZjAtOV17MjR9KSQgLlxuICAgKlxuICAgKiBAc2NoZW1hIFN0b3JlI1Byb2plY3RJZFxuICAgKi9cbiAgcmVhZG9ubHkgcHJvamVjdElkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBNb25nb0RCIENsb3VkIGNsdXN0ZXIgcmVhZCBwcmVmZXJlbmNlLCB3aGljaCBkZXNjcmliZXMgaG93IHRvIHJvdXRlIHJlYWQgcmVxdWVzdHMgdG8gdGhlIGNsdXN0ZXIuXG4gICAqXG4gICAqIEBzY2hlbWEgU3RvcmUjUmVhZFByZWZlcmVuY2VcbiAgICovXG4gIHJlYWRvbmx5IHJlYWRQcmVmZXJlbmNlPzogUmVhZFByZWZlcmVuY2U7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ1N0b3JlJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9TdG9yZShcbiAgb2JqOiBTdG9yZSB8IHVuZGVmaW5lZFxuKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgIE5hbWU6IG9iai5uYW1lLFxuICAgIFByb3ZpZGVyOiBvYmoucHJvdmlkZXIsXG4gICAgQ2x1c3Rlck5hbWU6IG9iai5jbHVzdGVyTmFtZSxcbiAgICBQcm9qZWN0SWQ6IG9iai5wcm9qZWN0SWQsXG4gICAgUmVhZFByZWZlcmVuY2U6IHRvSnNvbl9SZWFkUHJlZmVyZW5jZShvYmoucmVhZFByZWZlcmVuY2UpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoXG4gICAgKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQgPyByIDogeyAuLi5yLCBbaVswXV06IGlbMV0gfSksXG4gICAge31cbiAgKTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBBcnJheSBvZiBjb2xsZWN0aW9ucyBhbmQgZGF0YSBzb3VyY2VzIHRoYXQgbWFwIHRvIGEgc3RvcmVzIGRhdGEgc3RvcmUuXG4gKlxuICogQHNjaGVtYSBDb2xsZWN0aW9uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29sbGVjdGlvbiB7XG4gIC8qKlxuICAgKiBBcnJheSB0aGF0IGNvbnRhaW5zIHRoZSBkYXRhIHN0b3JlcyB0aGF0IG1hcCB0byBhIGNvbGxlY3Rpb24gZm9yIHRoaXMgQXRsYXMgRGF0YSBGZWRlcmF0aW9uLlxuICAgKlxuICAgKiBAc2NoZW1hIENvbGxlY3Rpb24jRGF0YVNvdXJjZXNcbiAgICovXG4gIHJlYWRvbmx5IGRhdGFTb3VyY2VzPzogRGF0YVNvdXJjZVtdO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIENvbGxlY3Rpb24jTmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQ29sbGVjdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQ29sbGVjdGlvbihcbiAgb2JqOiBDb2xsZWN0aW9uIHwgdW5kZWZpbmVkXG4pOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgRGF0YVNvdXJjZXM6IG9iai5kYXRhU291cmNlcz8ubWFwKCh5KSA9PiB0b0pzb25fRGF0YVNvdXJjZSh5KSksXG4gICAgTmFtZTogb2JqLm5hbWUsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZShcbiAgICAociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCA/IHIgOiB7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSxcbiAgICB7fVxuICApO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgVmlld1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFZpZXcge1xuICAvKipcbiAgICogSHVtYW4tcmVhZGFibGUgbGFiZWwgdGhhdCBpZGVudGlmaWVzIHRoZSB2aWV3LCB3aGljaCBjb3JyZXNwb25kcyB0byBhbiBhZ2dyZWdhdGlvbiBwaXBlbGluZSBvbiBhIGNvbGxlY3Rpb24uXG4gICAqXG4gICAqIEBzY2hlbWEgVmlldyNOYW1lXG4gICAqL1xuICByZWFkb25seSBuYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBZ2dyZWdhdGlvbiBwaXBlbGluZSBzdGFnZXMgdG8gYXBwbHkgdG8gdGhlIHNvdXJjZSBjb2xsZWN0aW9uLlxuICAgKlxuICAgKiBAc2NoZW1hIFZpZXcjUGlwZWxpbmVcbiAgICovXG4gIHJlYWRvbmx5IHBpcGVsaW5lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBIdW1hbi1yZWFkYWJsZSBsYWJlbCB0aGF0IGlkZW50aWZpZXMgdGhlIHNvdXJjZSBjb2xsZWN0aW9uIGZvciB0aGUgdmlldy5cbiAgICpcbiAgICogQHNjaGVtYSBWaWV3I1NvdXJjZVxuICAgKi9cbiAgcmVhZG9ubHkgc291cmNlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdWaWV3JyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9WaWV3KFxuICBvYmo6IFZpZXcgfCB1bmRlZmluZWRcbik6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICBOYW1lOiBvYmoubmFtZSxcbiAgICBQaXBlbGluZTogb2JqLnBpcGVsaW5lLFxuICAgIFNvdXJjZTogb2JqLnNvdXJjZSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKFxuICAgIChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkID8gciA6IHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLFxuICAgIHt9XG4gICk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBSZWFkUHJlZmVyZW5jZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlYWRQcmVmZXJlbmNlIHtcbiAgLyoqXG4gICAqIFwicHJpbWFyeVwiIFwicHJpbWFyeVByZWZlcnJlZFwiIFwic2Vjb25kYXJ5XCIgXCJzZWNvbmRhcnlQcmVmZXJyZWRcIiBcIm5lYXJlc3RcIlxuICAgKiBSZWFkIHByZWZlcmVuY2UgbW9kZSB0aGF0IHNwZWNpZmllcyB0byB3aGljaCByZXBsaWNhIHNldCBtZW1iZXIgdG8gcm91dGUgdGhlIHJlYWQgcmVxdWVzdHMuXG4gICAqXG4gICAqIEBzY2hlbWEgUmVhZFByZWZlcmVuY2UjTW9kZVxuICAgKi9cbiAgcmVhZG9ubHkgbW9kZT86IHN0cmluZztcblxuICAvKipcbiAgICogTWF4aW11bSByZXBsaWNhdGlvbiBsYWcsIG9yIHN0YWxlbmVzcywgZm9yIHJlYWRzIGZyb20gc2Vjb25kYXJpZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgUmVhZFByZWZlcmVuY2UjTWF4U3RhbGVuZXNzU2Vjb25kc1xuICAgKi9cbiAgcmVhZG9ubHkgbWF4U3RhbGVuZXNzU2Vjb25kcz86IHN0cmluZztcblxuICAvKipcbiAgICogTGlzdCB0aGF0IGNvbnRhaW5zIHRhZyBzZXRzIG9yIHRhZyBzcGVjaWZpY2F0aW9uIGRvY3VtZW50cy4gSWYgc3BlY2lmaWVkLCBBdGxhcyBEYXRhIEZlZGVyYXRpb24gcm91dGVzIHJlYWQgcmVxdWVzdHMgdG8gcmVwbGljYSBzZXQgbWVtYmVyIG9yIG1lbWJlcnMgdGhhdCBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBzcGVjaWZpZWQgdGFncy5cbiAgICpcbiAgICogQHNjaGVtYSBSZWFkUHJlZmVyZW5jZSNUYWdTZXRzXG4gICAqL1xuICByZWFkb25seSB0YWdTZXRzPzogVGFnU2V0W11bXTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnUmVhZFByZWZlcmVuY2UnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX1JlYWRQcmVmZXJlbmNlKFxuICBvYmo6IFJlYWRQcmVmZXJlbmNlIHwgdW5kZWZpbmVkXG4pOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgTW9kZTogb2JqLm1vZGUsXG4gICAgTWF4U3RhbGVuZXNzU2Vjb25kczogb2JqLm1heFN0YWxlbmVzc1NlY29uZHMsXG4gICAgVGFnU2V0czogb2JqLnRhZ1NldHM/Lm1hcCgoeSkgPT4geT8ubWFwKCh4KSA9PiB0b0pzb25fVGFnU2V0KHgpKSksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZShcbiAgICAociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCA/IHIgOiB7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSxcbiAgICB7fVxuICApO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgRGF0YVNvdXJjZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIERhdGFTb3VyY2Uge1xuICAvKipcbiAgICogRmxhZyB0aGF0IHZhbGlkYXRlcyB0aGUgc2NoZW1lIGluIHRoZSBzcGVjaWZpZWQgVVJMcy4gSWYgdHJ1ZSwgYWxsb3dzIGluc2VjdXJlIEhUVFAgc2NoZW1lLCBkb2Vzbid0IHZlcmlmeSB0aGUgc2VydmVyJ3MgY2VydGlmaWNhdGUgY2hhaW4gYW5kIGhvc3RuYW1lLCBhbmQgYWNjZXB0cyBhbnkgY2VydGlmaWNhdGUgd2l0aCBhbnkgaG9zdG5hbWUgcHJlc2VudGVkIGJ5IHRoZSBzZXJ2ZXIuIElmIGZhbHNlLCBhbGxvd3Mgc2VjdXJlIEhUVFBTIHNjaGVtZSBvbmx5LlxuICAgKlxuICAgKiBAc2NoZW1hIERhdGFTb3VyY2UjQWxsb3dJbnNlY3VyZVxuICAgKi9cbiAgcmVhZG9ubHkgYWxsb3dJbnNlY3VyZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEh1bWFuLXJlYWRhYmxlIGxhYmVsIHRoYXQgaWRlbnRpZmllcyB0aGUgY29sbGVjdGlvbiBpbiB0aGUgZGF0YWJhc2UuIEZvciBjcmVhdGluZyBhIHdpbGRjYXJkICgqKSBjb2xsZWN0aW9uLCB5b3UgbXVzdCBvbWl0IHRoaXMgcGFyYW1ldGVyLlxuICAgKlxuICAgKiBAc2NoZW1hIERhdGFTb3VyY2UjQ29sbGVjdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgY29sbGVjdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogUmVnZXggcGF0dGVybiB0byB1c2UgZm9yIGNyZWF0aW5nIHRoZSB3aWxkY2FyZCAoKikgY29sbGVjdGlvbi4gVG8gbGVhcm4gbW9yZSBhYm91dCB0aGUgcmVnZXggc3ludGF4LCBzZWUgR28gcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UuKCBodHRwczovL3BrZy5nby5kZXYvcmVnZXhwICkuXG4gICAqXG4gICAqIEBzY2hlbWEgRGF0YVNvdXJjZSNDb2xsZWN0aW9uUmVnZXhcbiAgICovXG4gIHJlYWRvbmx5IGNvbGxlY3Rpb25SZWdleD86IHN0cmluZztcblxuICAvKipcbiAgICogSHVtYW4tcmVhZGFibGUgbGFiZWwgdGhhdCBpZGVudGlmaWVzIHRoZSBkYXRhYmFzZSwgd2hpY2ggY29udGFpbnMgdGhlIGNvbGxlY3Rpb24gaW4gdGhlIGNsdXN0ZXIuIFlvdSBtdXN0IG9taXQgdGhpcyBwYXJhbWV0ZXIgdG8gZ2VuZXJhdGUgd2lsZGNhcmQgKCopIGNvbGxlY3Rpb25zIGZvciBkeW5hbWljYWxseSBnZW5lcmF0ZWQgZGF0YWJhc2VzLlxuICAgKlxuICAgKiBAc2NoZW1hIERhdGFTb3VyY2UjRGF0YWJhc2VcbiAgICovXG4gIHJlYWRvbmx5IGRhdGFiYXNlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBSZWdleCBwYXR0ZXJuIHRvIHVzZSBmb3IgY3JlYXRpbmcgdGhlIHdpbGRjYXJkICgqKSBjb2xsZWN0aW9uLiBUbyBsZWFybiBtb3JlIGFib3V0IHRoZSByZWdleCBzeW50YXgsIHNlZSBHbyBwcm9ncmFtbWluZyBsYW5ndWFnZS4oIGh0dHBzOi8vcGtnLmdvLmRldi9yZWdleHAgKS5cbiAgICpcbiAgICogQHNjaGVtYSBEYXRhU291cmNlI0RhdGFiYXNlUmVnZXhcbiAgICovXG4gIHJlYWRvbmx5IGRhdGFiYXNlUmVnZXg/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEZpbGUgZm9ybWF0IHRoYXQgTW9uZ29EQiBDbG91ZCB1c2VzIGlmIGl0IGVuY291bnRlcnMgYSBmaWxlIHdpdGhvdXQgYSBmaWxlIGV4dGVuc2lvbiB3aGlsZSBzZWFyY2hpbmcgc3RvcmVOYW1lLkVudW06IFwiLmF2cm9cIiBcIi5hdnJvLmJ6MlwiIFwiLmF2cm8uZ3pcIiBcIi5ic29uXCIgXCIuYnNvbi5iejJcIiBcIi5ic29uLmd6XCIgXCIuYnNvbnhcIiBcIi5jc3ZcIiBcIi5jc3YuYnoyXCIgXCIuY3N2Lmd6XCIgXCIuanNvblwiIFwiLmpzb24uYnoyXCIgXCIuanNvbi5nelwiIFwiLm9yY1wiIFwiLnBhcnF1ZXRcIiBcIi50c3ZcIiBcIi50c3YuYnoyXCIgXCIudHN2Lmd6XCJcbiAgICpcbiAgICogQHNjaGVtYSBEYXRhU291cmNlI0RlZmF1bHRGb3JtYXRcbiAgICovXG4gIHJlYWRvbmx5IGRlZmF1bHRGb3JtYXQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEZpbGUgcGF0aCB0aGF0IGNvbnRyb2xzIGhvdyBNb25nb0RCIENsb3VkIHNlYXJjaGVzIGZvciBhbmQgcGFyc2VzIGZpbGVzIGluIHRoZSBzdG9yZU5hbWUgYmVmb3JlIG1hcHBpbmcgdGhlbSB0byBhIGNvbGxlY3Rpb24uU3BlY2lmeSAvIHRvIGNhcHR1cmUgYWxsIGZpbGVzIGFuZCBmb2xkZXJzIGZyb20gdGhlIHByZWZpeCBwYXRoLlxuICAgKlxuICAgKiBAc2NoZW1hIERhdGFTb3VyY2UjUGF0aFxuICAgKi9cbiAgcmVhZG9ubHkgcGF0aD86IHN0cmluZztcblxuICAvKipcbiAgICogTmFtZSBmb3IgdGhlIGZpZWxkIHRoYXQgaW5jbHVkZXMgdGhlIHByb3ZlbmFuY2Ugb2YgdGhlIGRvY3VtZW50cyBpbiB0aGUgcmVzdWx0cy4gTW9uZ29EQiBDbG91ZCByZXR1cm5zIGRpZmZlcmVudCBmaWVsZHMgaW4gdGhlIHJlc3VsdHMgZm9yIGVhY2ggc3VwcG9ydGVkIHByb3ZpZGVyLlxuICAgKlxuICAgKiBAc2NoZW1hIERhdGFTb3VyY2UjUHJvdmVuYW5jZUZpZWxkTmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgcHJvdmVuYW5jZUZpZWxkTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogSHVtYW4tcmVhZGFibGUgbGFiZWwgdGhhdCBpZGVudGlmaWVzIHRoZSBkYXRhIHN0b3JlIHRoYXQgTW9uZ29EQiBDbG91ZCBtYXBzIHRvIHRoZSBjb2xsZWN0aW9uLlxuICAgKlxuICAgKiBAc2NoZW1hIERhdGFTb3VyY2UjU3RvcmVOYW1lXG4gICAqL1xuICByZWFkb25seSBzdG9yZU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFVSTHMgb2YgdGhlIHB1YmxpY2x5IGFjY2Vzc2libGUgZGF0YSBmaWxlcy4gWW91IGNhbid0IHNwZWNpZnkgVVJMcyB0aGF0IHJlcXVpcmUgYXV0aGVudGljYXRpb24uIEF0bGFzIERhdGEgRmVkZXJhdGlvbiBjcmVhdGVzIGEgcGFydGl0aW9uIGZvciBlYWNoIFVSTC4gSWYgZW1wdHkgb3Igb21pdHRlZCwgRGF0YSBGZWRlcmF0aW9uIHVzZXMgdGhlIFVSTHMgZnJvbSB0aGUgc3RvcmUgc3BlY2lmaWVkIGluIHRoZSBkYXRhU291cmNlcy5zdG9yZU5hbWUgcGFyYW1ldGVyLlxuICAgKlxuICAgKiBAc2NoZW1hIERhdGFTb3VyY2UjVXJsc1xuICAgKi9cbiAgcmVhZG9ubHkgdXJscz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdEYXRhU291cmNlJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9EYXRhU291cmNlKFxuICBvYmo6IERhdGFTb3VyY2UgfCB1bmRlZmluZWRcbik6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICBBbGxvd0luc2VjdXJlOiBvYmouYWxsb3dJbnNlY3VyZSxcbiAgICBDb2xsZWN0aW9uOiBvYmouY29sbGVjdGlvbixcbiAgICBDb2xsZWN0aW9uUmVnZXg6IG9iai5jb2xsZWN0aW9uUmVnZXgsXG4gICAgRGF0YWJhc2U6IG9iai5kYXRhYmFzZSxcbiAgICBEYXRhYmFzZVJlZ2V4OiBvYmouZGF0YWJhc2VSZWdleCxcbiAgICBEZWZhdWx0Rm9ybWF0OiBvYmouZGVmYXVsdEZvcm1hdCxcbiAgICBQYXRoOiBvYmoucGF0aCxcbiAgICBQcm92ZW5hbmNlRmllbGROYW1lOiBvYmoucHJvdmVuYW5jZUZpZWxkTmFtZSxcbiAgICBTdG9yZU5hbWU6IG9iai5zdG9yZU5hbWUsXG4gICAgVXJsczogb2JqLnVybHM/Lm1hcCgoeSkgPT4geSksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZShcbiAgICAociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCA/IHIgOiB7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSxcbiAgICB7fVxuICApO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgVGFnU2V0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGFnU2V0IHtcbiAgLyoqXG4gICAqIEh1bWFuLXJlYWRhYmxlIGxhYmVsIG9mIHRoZSB0YWcuXG4gICAqXG4gICAqIEBzY2hlbWEgVGFnU2V0I05hbWVcbiAgICovXG4gIHJlYWRvbmx5IG5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEh1bWFuLXJlYWRhYmxlIGxhYmVsIG9mIHRoZSB0YWcuXG4gICAqXG4gICAqIEBzY2hlbWEgVGFnU2V0I1ZhbHVlXG4gICAqL1xuICByZWFkb25seSB2YWx1ZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnVGFnU2V0JyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9UYWdTZXQoXG4gIG9iajogVGFnU2V0IHwgdW5kZWZpbmVkXG4pOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgTmFtZTogb2JqLm5hbWUsXG4gICAgVmFsdWU6IG9iai52YWx1ZSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKFxuICAgIChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkID8gciA6IHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLFxuICAgIHt9XG4gICk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQSBDbG91ZEZvcm1hdGlvbiBgTW9uZ29EQjo6QXRsYXM6OkZlZGVyYXRlZERhdGFiYXNlSW5zdGFuY2VgXG4gKlxuICogQGNsb3VkZm9ybWF0aW9uUmVzb3VyY2UgTW9uZ29EQjo6QXRsYXM6OkZlZGVyYXRlZERhdGFiYXNlSW5zdGFuY2VcbiAqIEBzdGFiaWxpdHkgZXh0ZXJuYWxcbiAqL1xuZXhwb3J0IGNsYXNzIENmbkZlZGVyYXRlZERhdGFiYXNlSW5zdGFuY2UgZXh0ZW5kcyBjZGsuQ2ZuUmVzb3VyY2Uge1xuICAvKipcbiAgICogVGhlIENsb3VkRm9ybWF0aW9uIHJlc291cmNlIHR5cGUgbmFtZSBmb3IgdGhpcyByZXNvdXJjZSBjbGFzcy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQ0ZOX1JFU09VUkNFX1RZUEVfTkFNRSA9XG4gICAgXCJNb25nb0RCOjpBdGxhczo6RmVkZXJhdGVkRGF0YWJhc2VJbnN0YW5jZVwiO1xuXG4gIC8qKlxuICAgKiBSZXNvdXJjZSBwcm9wcy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBwcm9wczogQ2ZuRmVkZXJhdGVkRGF0YWJhc2VJbnN0YW5jZVByb3BzO1xuXG4gIC8qKlxuICAgKiBBdHRyaWJ1dGUgYE1vbmdvREI6OkF0bGFzOjpGZWRlcmF0ZWREYXRhYmFzZUluc3RhbmNlLkhvc3ROYW1lc2BcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBhdHRySG9zdE5hbWVzOiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIEF0dHJpYnV0ZSBgTW9uZ29EQjo6QXRsYXM6OkZlZGVyYXRlZERhdGFiYXNlSW5zdGFuY2UuU3RhdGVgXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYXR0clN0YXRlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBgTW9uZ29EQjo6QXRsYXM6OkZlZGVyYXRlZERhdGFiYXNlSW5zdGFuY2VgLlxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgLSBzY29wZSBpbiB3aGljaCB0aGlzIHJlc291cmNlIGlzIGRlZmluZWRcbiAgICogQHBhcmFtIGlkICAgIC0gc2NvcGVkIGlkIG9mIHRoZSByZXNvdXJjZVxuICAgKiBAcGFyYW0gcHJvcHMgLSByZXNvdXJjZSBwcm9wZXJ0aWVzXG4gICAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICBzY29wZTogY29uc3RydWN0cy5Db25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwcm9wczogQ2ZuRmVkZXJhdGVkRGF0YWJhc2VJbnN0YW5jZVByb3BzXG4gICkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgdHlwZTogQ2ZuRmVkZXJhdGVkRGF0YWJhc2VJbnN0YW5jZS5DRk5fUkVTT1VSQ0VfVFlQRV9OQU1FLFxuICAgICAgcHJvcGVydGllczogdG9Kc29uX0NmbkZlZGVyYXRlZERhdGFiYXNlSW5zdGFuY2VQcm9wcyhwcm9wcykhLFxuICAgIH0pO1xuXG4gICAgdGhpcy5wcm9wcyA9IHByb3BzO1xuXG4gICAgdGhpcy5hdHRySG9zdE5hbWVzID0gY2RrLlRva2VuLmFzTGlzdCh0aGlzLmdldEF0dChcIkhvc3ROYW1lc1wiKSk7XG4gICAgdGhpcy5hdHRyU3RhdGUgPSBjZGsuVG9rZW4uYXNTdHJpbmcodGhpcy5nZXRBdHQoXCJTdGF0ZVwiKSk7XG4gIH1cbn1cbiJdfQ==