awscdk-resources-mongodbatlas
Version:
MongoDB Atlas CDK Construct Library for AWS CloudFormation Resources
205 lines • 30.3 kB
JavaScript
var _a;
Object.defineProperty(exports, "__esModule", { value: true });
exports.CfnStreamInstance = exports.DbRoleToExecuteType = exports.StreamsConnectionType = exports.StreamsDataProcessRegionCloudProvider = void 0;
exports.toJson_CfnStreamInstanceProps = toJson_CfnStreamInstanceProps;
exports.toJson_StreamsDataProcessRegion = toJson_StreamsDataProcessRegion;
exports.toJson_StreamConfig = toJson_StreamConfig;
exports.toJson_StreamsConnection = toJson_StreamsConnection;
exports.toJson_StreamsKafkaAuthentication = toJson_StreamsKafkaAuthentication;
exports.toJson_StreamsKafkaSecurity = toJson_StreamsKafkaSecurity;
exports.toJson_DbRoleToExecute = toJson_DbRoleToExecute;
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
// Generated by cdk-import
const cdk = require("aws-cdk-lib");
/**
* Converts an object of type 'CfnStreamInstanceProps' to JSON representation.
*/
/* eslint-disable max-len, quote-props */
function toJson_CfnStreamInstanceProps(obj) {
if (obj === undefined) {
return undefined;
}
const result = {
Profile: obj.profile,
InstanceName: obj.instanceName,
DataProcessRegion: toJson_StreamsDataProcessRegion(obj.dataProcessRegion),
StreamConfig: toJson_StreamConfig(obj.streamConfig),
Connections: obj.connections?.map((y) => toJson_StreamsConnection(y)),
ProjectId: obj.projectId,
};
// filter undefined values
return Object.entries(result).reduce((r, i) => (i[1] === undefined ? r : { ...r, [i[0]]: i[1] }), {});
}
/**
* Converts an object of type 'StreamsDataProcessRegion' to JSON representation.
*/
/* eslint-disable max-len, quote-props */
function toJson_StreamsDataProcessRegion(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 'StreamConfig' to JSON representation.
*/
/* eslint-disable max-len, quote-props */
function toJson_StreamConfig(obj) {
if (obj === undefined) {
return undefined;
}
const result = {
Tier: obj.tier,
};
// filter undefined values
return Object.entries(result).reduce((r, i) => (i[1] === undefined ? r : { ...r, [i[0]]: i[1] }), {});
}
/**
* Converts an object of type 'StreamsConnection' to JSON representation.
*/
/* eslint-disable max-len, quote-props */
function toJson_StreamsConnection(obj) {
if (obj === undefined) {
return undefined;
}
const result = {
Name: obj.name,
Type: obj.type,
Authentication: toJson_StreamsKafkaAuthentication(obj.authentication),
BootstrapServers: obj.bootstrapServers,
Security: toJson_StreamsKafkaSecurity(obj.security),
ClusterName: obj.clusterName,
DbRoleToExecute: toJson_DbRoleToExecute(obj.dbRoleToExecute),
};
// 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 */
/**
* Label that identifies the cloud service provider where MongoDB Cloud performs stream processing. Currently, this parameter supports AWS only.
*
* @schema StreamsDataProcessRegionCloudProvider
*/
var StreamsDataProcessRegionCloudProvider;
(function (StreamsDataProcessRegionCloudProvider) {
/** AWS */
StreamsDataProcessRegionCloudProvider["AWS"] = "AWS";
/** GCP */
StreamsDataProcessRegionCloudProvider["GCP"] = "GCP";
/** AZURE */
StreamsDataProcessRegionCloudProvider["AZURE"] = "AZURE";
/** TENANT */
StreamsDataProcessRegionCloudProvider["TENANT"] = "TENANT";
/** SERVERLESS */
StreamsDataProcessRegionCloudProvider["SERVERLESS"] = "SERVERLESS";
})(StreamsDataProcessRegionCloudProvider || (exports.StreamsDataProcessRegionCloudProvider = StreamsDataProcessRegionCloudProvider = {}));
/**
* Type of the connection. Can be either Cluster or Kafka.
*
* @schema StreamsConnectionType
*/
var StreamsConnectionType;
(function (StreamsConnectionType) {
/** Kafka */
StreamsConnectionType["KAFKA"] = "Kafka";
/** Cluster */
StreamsConnectionType["CLUSTER"] = "Cluster";
/** Sample */
StreamsConnectionType["SAMPLE"] = "Sample";
})(StreamsConnectionType || (exports.StreamsConnectionType = StreamsConnectionType = {}));
/**
* Converts an object of type 'StreamsKafkaAuthentication' to JSON representation.
*/
/* eslint-disable max-len, quote-props */
function toJson_StreamsKafkaAuthentication(obj) {
if (obj === undefined) {
return undefined;
}
const result = {
Mechanism: obj.mechanism,
Username: obj.username,
};
// filter undefined values
return Object.entries(result).reduce((r, i) => (i[1] === undefined ? r : { ...r, [i[0]]: i[1] }), {});
}
/**
* Converts an object of type 'StreamsKafkaSecurity' to JSON representation.
*/
/* eslint-disable max-len, quote-props */
function toJson_StreamsKafkaSecurity(obj) {
if (obj === undefined) {
return undefined;
}
const result = {
BrokerPublicCertificate: obj.brokerPublicCertificate,
Protocol: obj.protocol,
};
// filter undefined values
return Object.entries(result).reduce((r, i) => (i[1] === undefined ? r : { ...r, [i[0]]: i[1] }), {});
}
/**
* Converts an object of type 'DbRoleToExecute' to JSON representation.
*/
/* eslint-disable max-len, quote-props */
function toJson_DbRoleToExecute(obj) {
if (obj === undefined) {
return undefined;
}
const result = {
Role: obj.role,
Type: obj.type,
};
// 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 */
/**
* Type of the DB role. Can be either BuiltIn or Custom.
*
* @schema DbRoleToExecuteType
*/
var DbRoleToExecuteType;
(function (DbRoleToExecuteType) {
/** BUILT_IN */
DbRoleToExecuteType["BUILT_IN"] = "BUILT_IN";
/** CUSTOM */
DbRoleToExecuteType["CUSTOM"] = "CUSTOM";
})(DbRoleToExecuteType || (exports.DbRoleToExecuteType = DbRoleToExecuteType = {}));
/**
* A CloudFormation `MongoDB::Atlas::StreamInstance`
*
* @cloudformationResource MongoDB::Atlas::StreamInstance
* @stability external
*/
class CfnStreamInstance extends cdk.CfnResource {
/**
* Create a new `MongoDB::Atlas::StreamInstance`.
*
* @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: CfnStreamInstance.CFN_RESOURCE_TYPE_NAME,
properties: toJson_CfnStreamInstanceProps(props),
});
this.props = props;
this.attrId = cdk.Token.asString(this.getAtt("Id"));
this.attrHostnames = cdk.Token.asList(this.getAtt("Hostnames"));
}
}
exports.CfnStreamInstance = CfnStreamInstance;
_a = JSII_RTTI_SYMBOL_1;
CfnStreamInstance[_a] = { fqn: "awscdk-resources-mongodbatlas.CfnStreamInstance", version: "3.13.0" };
/**
* The CloudFormation resource type name for this resource class.
*/
CfnStreamInstance.CFN_RESOURCE_TYPE_NAME = "MongoDB::Atlas::StreamInstance";
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbDEtcmVzb3VyY2VzL3N0cmVhbS1pbnN0YW5jZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBbURBLHNFQW1CQztBQTBCRCwwRUFlQztBQXFCRCxrREFjQztBQXlERCw0REFvQkM7QUE0REQsOEVBZUM7QUE0QkQsa0VBZUM7QUE0QkQsd0RBZUM7O0FBaFlELDBCQUEwQjtBQUMxQixtQ0FBbUM7QUE4Q25DOztHQUVHO0FBQ0gseUNBQXlDO0FBQ3pDLFNBQWdCLDZCQUE2QixDQUMzQyxHQUF1QztJQUV2QyxJQUFJLEdBQUcsS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUN0QixPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBQ0QsTUFBTSxNQUFNLEdBQUc7UUFDYixPQUFPLEVBQUUsR0FBRyxDQUFDLE9BQU87UUFDcEIsWUFBWSxFQUFFLEdBQUcsQ0FBQyxZQUFZO1FBQzlCLGlCQUFpQixFQUFFLCtCQUErQixDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQztRQUN6RSxZQUFZLEVBQUUsbUJBQW1CLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQztRQUNuRCxXQUFXLEVBQUUsR0FBRyxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLHdCQUF3QixDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JFLFNBQVMsRUFBRSxHQUFHLENBQUMsU0FBUztLQUN6QixDQUFDO0lBQ0YsMEJBQTBCO0lBQzFCLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQ2xDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFD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QUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUMzRCxFQUFFLENBQ0gsQ0FBQztBQUNKLENBQUM7QUFDRCx3Q0FBd0M7QUFFeEM7Ozs7R0FJRztBQUNILElBQVksbUJBS1g7QUFMRCxXQUFZLG1CQUFtQjtJQUM3QixlQUFlO0lBQ2YsNENBQXFCLENBQUE7SUFDckIsYUFBYTtJQUNiLHdDQUFpQixDQUFBO0FBQ25CLENBQUMsRUFMVyxtQkFBbUIsbUNBQW5CLG1CQUFtQixRQUs5QjtBQUVEOzs7OztHQUtHO0FBQ0gsTUFBYSxpQkFBa0IsU0FBUSxHQUFHLENBQUMsV0FBVztJQXFCcEQ7Ozs7OztPQU1HO0lBQ0gsWUFDRSxLQUEyQixFQUMzQixFQUFVLEVBQ1YsS0FBNkI7UUFFN0IsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUU7WUFDZixJQUFJLEVBQUUsaUJBQWlCLENBQUMsc0JBQXNCO1lBQzlDLFVBQVUsRUFBRSw2QkFBNkIsQ0FBQyxLQUFLLENBQUU7U0FDbEQsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFFbkIsSUFBSSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLGFBQWEsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDbEUsQ0FBQzs7QUExQ0gsOENBMkNDOzs7QUExQ0M7O0dBRUc7QUFDb0Isd0NBQXNCLEdBQzNDLGdDQUFnQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gR2VuZXJhdGVkIGJ5IGNkay1pbXBvcnRcbmltcG9ydCAqIGFzIGNkayBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCAqIGFzIGNvbnN0cnVjdHMgZnJvbSBcImNvbnN0cnVjdHNcIjtcblxuLyoqXG4gKiBSZXR1cm5zLCBhZGRzLCBlZGl0cywgYW5kIHJlbW92ZXMgQXRsYXMgU3RyZWFtIFByb2Nlc3NpbmcgSW5zdGFuY2VzLlxuICpcbiAqIEBzY2hlbWEgQ2ZuU3RyZWFtSW5zdGFuY2VQcm9wc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIENmblN0cmVhbUluc3RhbmNlUHJvcHMge1xuICAvKipcbiAgICogVGhlIHByb2ZpbGUgaXMgZGVmaW5lZCBpbiBBV1MgU2VjcmV0IG1hbmFnZXIuIFNlZSBbU2VjcmV0IE1hbmFnZXIgUHJvZmlsZSBzZXR1cF0oLi4vLi4vLi4vZXhhbXBsZXMvcHJvZmlsZS1zZWNyZXQueWFtbCkuXG4gICAqXG4gICAqIEBzY2hlbWEgQ2ZuU3RyZWFtSW5zdGFuY2VQcm9wcyNQcm9maWxlXG4gICAqL1xuICByZWFkb25seSBwcm9maWxlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBIdW1hbi1yZWFkYWJsZSBsYWJlbCB0aGF0IGlkZW50aWZpZXMgdGhlIHN0cmVhbSBjb25uZWN0aW9uLlxuICAgKlxuICAgKiBAc2NoZW1hIENmblN0cmVhbUluc3RhbmNlUHJvcHMjSW5zdGFuY2VOYW1lXG4gICAqL1xuICByZWFkb25seSBpbnN0YW5jZU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBDZm5TdHJlYW1JbnN0YW5jZVByb3BzI0RhdGFQcm9jZXNzUmVnaW9uXG4gICAqL1xuICByZWFkb25seSBkYXRhUHJvY2Vzc1JlZ2lvbjogU3RyZWFtc0RhdGFQcm9jZXNzUmVnaW9uO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIENmblN0cmVhbUluc3RhbmNlUHJvcHMjU3RyZWFtQ29uZmlnXG4gICAqL1xuICByZWFkb25seSBzdHJlYW1Db25maWc6IFN0cmVhbUNvbmZpZztcblxuICAvKipcbiAgICogQHNjaGVtYSBDZm5TdHJlYW1JbnN0YW5jZVByb3BzI0Nvbm5lY3Rpb25zXG4gICAqL1xuICByZWFkb25seSBjb25uZWN0aW9ucz86IFN0cmVhbXNDb25uZWN0aW9uW107XG5cbiAgLyoqXG4gICAqIFVuaXF1ZSAyNC1oZXhhZGVjaW1hbCBjaGFyYWN0ZXIgc3RyaW5nIHRoYXQgaWRlbnRpZmllcyB0aGUgcHJvamVjdC5cbiAgICpcbiAgICogQHNjaGVtYSBDZm5TdHJlYW1JbnN0YW5jZVByb3BzI1Byb2plY3RJZFxuICAgKi9cbiAgcmVhZG9ubHkgcHJvamVjdElkOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ0NmblN0cmVhbUluc3RhbmNlUHJvcHMnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0NmblN0cmVhbUluc3RhbmNlUHJvcHMoXG4gIG9iajogQ2ZuU3RyZWFtSW5zdGFuY2VQcm9wcyB8IHVuZGVmaW5lZFxuKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgIFByb2ZpbGU6IG9iai5wcm9maWxlLFxuICAgIEluc3RhbmNlTmFtZTogb2JqLmluc3RhbmNlTmFtZSxcbiAgICBEYXRhUHJvY2Vzc1JlZ2lvbjogdG9Kc29uX1N0cmVhbXNEYXRhUHJvY2Vzc1JlZ2lvbihvYmouZGF0YVByb2Nlc3NSZWdpb24pLFxuICAgIFN0cmVhbUNvbmZpZzogdG9Kc29uX1N0cmVhbUNvbmZpZyhvYmouc3RyZWFtQ29uZmlnKSxcbiAgICBDb25uZWN0aW9uczogb2JqLmNvbm5lY3Rpb25zPy5tYXAoKHkpID0+IHRvSnNvbl9TdHJlYW1zQ29ubmVjdGlvbih5KSksXG4gICAgUHJvamVjdElkOiBvYmoucHJvamVjdElkLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoXG4gICAgKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQgPyByIDogeyAuLi5yLCBbaVswXV06IGlbMV0gfSksXG4gICAge31cbiAgKTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBJbmZvcm1hdGlvbiBhYm91dCB0aGUgY2xvdWQgcHJvdmlkZXIgcmVnaW9uIGluIHdoaWNoIE1vbmdvREIgQ2xvdWQgcHJvY2Vzc2VzIHRoZSBzdHJlYW0uXG4gKlxuICogQHNjaGVtYSBTdHJlYW1zRGF0YVByb2Nlc3NSZWdpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdHJlYW1zRGF0YVByb2Nlc3NSZWdpb24ge1xuICAvKipcbiAgICogTGFiZWwgdGhhdCBpZGVudGlmaWVzIHRoZSBjbG91ZCBzZXJ2aWNlIHByb3ZpZGVyIHdoZXJlIE1vbmdvREIgQ2xvdWQgcGVyZm9ybXMgc3RyZWFtIHByb2Nlc3NpbmcuIEN1cnJlbnRseSwgdGhpcyBwYXJhbWV0ZXIgc3VwcG9ydHMgQVdTIG9ubHkuXG4gICAqXG4gICAqIEBzY2hlbWEgU3RyZWFtc0RhdGFQcm9jZXNzUmVnaW9uI0Nsb3VkUHJvdmlkZXJcbiAgICovXG4gIHJlYWRvbmx5IGNsb3VkUHJvdmlkZXI6IFN0cmVhbXNEYXRhUHJvY2Vzc1JlZ2lvbkNsb3VkUHJvdmlkZXI7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgU3RyZWFtc0RhdGFQcm9jZXNzUmVnaW9uI1JlZ2lvblxuICAgKi9cbiAgcmVhZG9ubHkgcmVnaW9uOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ1N0cmVhbXNEYXRhUHJvY2Vzc1JlZ2lvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fU3RyZWFtc0RhdGFQcm9jZXNzUmVnaW9uKFxuICBvYmo6IFN0cmVhbXNEYXRhUHJvY2Vzc1JlZ2lvbiB8IHVuZGVmaW5lZFxuKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgIENsb3VkUHJvdmlkZXI6IG9iai5jbG91ZFByb3ZpZGVyLFxuICAgIFJlZ2lvbjogb2JqLnJlZ2lvbixcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKFxuICAgIChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkID8gciA6IHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLFxuICAgIHt9XG4gICk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBhbiBBdGxhcyBTdHJlYW0gUHJvY2Vzc2luZyBJbnN0YW5jZS5cbiAqXG4gKiBAc2NoZW1hIFN0cmVhbUNvbmZpZ1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0cmVhbUNvbmZpZyB7XG4gIC8qKlxuICAgKiBTZWxlY3RlZCB0aWVyIGZvciB0aGUgU3RyZWFtIEluc3RhbmNlLiBDb25maWd1cmVzIE1lbW9yeSAvIFZDUFUgYWxsb3dhbmNlcy5cbiAgICpcbiAgICogQHNjaGVtYSBTdHJlYW1Db25maWcjVGllclxuICAgKi9cbiAgcmVhZG9ubHkgdGllcj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnU3RyZWFtQ29uZmlnJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9TdHJlYW1Db25maWcoXG4gIG9iajogU3RyZWFtQ29uZmlnIHwgdW5kZWZpbmVkXG4pOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgVGllcjogb2JqLnRpZXIsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZShcbiAgICAociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCA/IHIgOiB7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSxcbiAgICB7fVxuICApO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIFNldHRpbmdzIHRoYXQgZGVmaW5lIGEgY29ubmVjdGlvbiB0byBhbiBleHRlcm5hbCBkYXRhIHN0b3JlLlxuICpcbiAqIEBzY2hlbWEgU3RyZWFtc0Nvbm5lY3Rpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdHJlYW1zQ29ubmVjdGlvbiB7XG4gIC8qKlxuICAgKiBIdW1hbi1yZWFkYWJsZSBsYWJlbCB0aGF0IGlkZW50aWZpZXMgdGhlIHN0cmVhbSBjb25uZWN0aW9uLlxuICAgKlxuICAgKiBAc2NoZW1hIFN0cmVhbXNDb25uZWN0aW9uI05hbWVcbiAgICovXG4gIHJlYWRvbmx5IG5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFR5cGUgb2YgdGhlIGNvbm5lY3Rpb24uIENhbiBiZSBlaXRoZXIgQ2x1c3RlciBvciBLYWZrYS5cbiAgICpcbiAgICogQHNjaGVtYSBTdHJlYW1zQ29ubmVjdGlvbiNUeXBlXG4gICAqL1xuICByZWFkb25seSB0eXBlPzogU3RyZWFtc0Nvbm5lY3Rpb25UeXBlO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIFN0cmVhbXNDb25uZWN0aW9uI0F1dGhlbnRpY2F0aW9uXG4gICAqL1xuICByZWFkb25seSBhdXRoZW50aWNhdGlvbj86IFN0cmVhbXNLYWZrYUF1dGhlbnRpY2F0aW9uO1xuXG4gIC8qKlxuICAgKiBDb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBzZXJ2ZXIgYWRkcmVzc2VzLlxuICAgKlxuICAgKiBAc2NoZW1hIFN0cmVhbXNDb25uZWN0aW9uI0Jvb3RzdHJhcFNlcnZlcnNcbiAgICovXG4gIHJlYWRvbmx5IGJvb3RzdHJhcFNlcnZlcnM/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgU3RyZWFtc0Nvbm5lY3Rpb24jU2VjdXJpdHlcbiAgICovXG4gIHJlYWRvbmx5IHNlY3VyaXR5PzogU3RyZWFtc0thZmthU2VjdXJpdHk7XG5cbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIGNsdXN0ZXIgY29uZmlndXJlZCBmb3IgdGhpcyBjb25uZWN0aW9uLlxuICAgKlxuICAgKiBAc2NoZW1hIFN0cmVhbXNDb25uZWN0aW9uI0NsdXN0ZXJOYW1lXG4gICAqL1xuICByZWFkb25seSBjbHVzdGVyTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBTdHJlYW1zQ29ubmVjdGlvbiNEYlJvbGVUb0V4ZWN1dGVcbiAgICovXG4gIHJlYWRvbmx5IGRiUm9sZVRvRXhlY3V0ZT86IERiUm9sZVRvRXhlY3V0ZTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnU3RyZWFtc0Nvbm5lY3Rpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX1N0cmVhbXNDb25uZWN0aW9uKFxuICBvYmo6IFN0cmVhbXNDb25uZWN0aW9uIHwgdW5kZWZpbmVkXG4pOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgTmFtZTogb2JqLm5hbWUsXG4gICAgVHlwZTogb2JqLnR5cGUsXG4gICAgQXV0aGVudGljYXRpb246IHRvSnNvbl9TdHJlYW1zS2Fma2FBdXRoZW50aWNhdGlvbihvYmouYXV0aGVudGljYXRpb24pLFxuICAgIEJvb3RzdHJhcFNlcnZlcnM6IG9iai5ib290c3RyYXBTZXJ2ZXJzLFxuICAgIFNlY3VyaXR5OiB0b0pzb25fU3RyZWFtc0thZmthU2VjdXJpdHkob2JqLnNlY3VyaXR5KSxcbiAgICBDbHVzdGVyTmFtZTogb2JqLmNsdXN0ZXJOYW1lLFxuICAgIERiUm9sZVRvRXhlY3V0ZTogdG9Kc29uX0RiUm9sZVRvRXhlY3V0ZShvYmouZGJSb2xlVG9FeGVjdXRlKSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKFxuICAgIChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkID8gciA6IHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLFxuICAgIHt9XG4gICk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogTGFiZWwgdGhhdCBpZGVudGlmaWVzIHRoZSBjbG91ZCBzZXJ2aWNlIHByb3ZpZGVyIHdoZXJlIE1vbmdvREIgQ2xvdWQgcGVyZm9ybXMgc3RyZWFtIHByb2Nlc3NpbmcuIEN1cnJlbnRseSwgdGhpcyBwYXJhbWV0ZXIgc3VwcG9ydHMgQVdTIG9ubHkuXG4gKlxuICogQHNjaGVtYSBTdHJlYW1zRGF0YVByb2Nlc3NSZWdpb25DbG91ZFByb3ZpZGVyXG4gKi9cbmV4cG9ydCBlbnVtIFN0cmVhbXNEYXRhUHJvY2Vzc1JlZ2lvbkNsb3VkUHJvdmlkZXIge1xuICAvKiogQVdTICovXG4gIEFXUyA9IFwiQVdTXCIsXG4gIC8qKiBHQ1AgKi9cbiAgR0NQID0gXCJHQ1BcIixcbiAgLyoqIEFaVVJFICovXG4gIEFaVVJFID0gXCJBWlVSRVwiLFxuICAvKiogVEVOQU5UICovXG4gIFRFTkFOVCA9IFwiVEVOQU5UXCIsXG4gIC8qKiBTRVJWRVJMRVNTICovXG4gIFNFUlZFUkxFU1MgPSBcIlNFUlZFUkxFU1NcIixcbn1cblxuLyoqXG4gKiBUeXBlIG9mIHRoZSBjb25uZWN0aW9uLiBDYW4gYmUgZWl0aGVyIENsdXN0ZXIgb3IgS2Fma2EuXG4gKlxuICogQHNjaGVtYSBTdHJlYW1zQ29ubmVjdGlvblR5cGVcbiAqL1xuZXhwb3J0IGVudW0gU3RyZWFtc0Nvbm5lY3Rpb25UeXBlIHtcbiAgLyoqIEthZmthICovXG4gIEtBRktBID0gXCJLYWZrYVwiLFxuICAvKiogQ2x1c3RlciAqL1xuICBDTFVTVEVSID0gXCJDbHVzdGVyXCIsXG4gIC8qKiBTYW1wbGUgKi9cbiAgU0FNUExFID0gXCJTYW1wbGVcIixcbn1cblxuLyoqXG4gKiBVc2VyIGNyZWRlbnRpYWxzIHJlcXVpcmVkIHRvIGNvbm5lY3QgdG8gYSBLYWZrYSBDbHVzdGVyLiBJbmNsdWRlcyB0aGUgYXV0aGVudGljYXRpb24gdHlwZSwgYXMgd2VsbCBhcyB0aGUgcGFyYW1ldGVycyBmb3IgdGhhdCBhdXRoZW50aWNhdGlvbiBtb2RlLlxuICpcbiAqIEBzY2hlbWEgU3RyZWFtc0thZmthQXV0aGVudGljYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdHJlYW1zS2Fma2FBdXRoZW50aWNhdGlvbiB7XG4gIC8qKlxuICAgKiBTdHlsZSBvZiBhdXRoZW50aWNhdGlvbi4gQ2FuIGJlIG9uZSBvZiBQTEFJTiwgU0NSQU0tMjU2LCBvciBTQ1JBTS01MTIuXG4gICAqXG4gICAqIEBzY2hlbWEgU3RyZWFtc0thZmthQXV0aGVudGljYXRpb24jTWVjaGFuaXNtXG4gICAqL1xuICByZWFkb25seSBtZWNoYW5pc20/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFVzZXJuYW1lIG9mIHRoZSBhY2NvdW50IHRvIGNvbm5lY3QgdG8gdGhlIEthZmthIGNsdXN0ZXIuXG4gICAqXG4gICAqIEBzY2hlbWEgU3RyZWFtc0thZmthQXV0aGVudGljYXRpb24jVXNlcm5hbWVcbiAgICovXG4gIHJlYWRvbmx5IHVzZXJuYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdTdHJlYW1zS2Fma2FBdXRoZW50aWNhdGlvbicgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fU3RyZWFtc0thZmthQXV0aGVudGljYXRpb24oXG4gIG9iajogU3RyZWFtc0thZmthQXV0aGVudGljYXRpb24gfCB1bmRlZmluZWRcbik6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICBNZWNoYW5pc206IG9iai5tZWNoYW5pc20sXG4gICAgVXNlcm5hbWU6IG9iai51c2VybmFtZSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKFxuICAgIChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkID8gciA6IHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLFxuICAgIHt9XG4gICk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIHF1b3RlLXByb3BzICovXG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgdGhlIHNlY3VyZSB0cmFuc3BvcnQgY29ubmVjdGlvbiB0byBLYWZrYS4gRm9yIFNTTCwgdGhpcyBjYW4gaW5jbHVkZSB0aGUgdHJ1c3RlZCBjZXJ0aWZpY2F0ZSB0byB1c2UuXG4gKlxuICogQHNjaGVtYSBTdHJlYW1zS2Fma2FTZWN1cml0eVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0cmVhbXNLYWZrYVNlY3VyaXR5IHtcbiAgLyoqXG4gICAqIEEgdHJ1c3RlZCwgcHVibGljIHg1MDkgY2VydGlmaWNhdGUgZm9yIGNvbm5lY3RpbmcgdG8gS2Fma2Egb3ZlciBTU0wuXG4gICAqXG4gICAqIEBzY2hlbWEgU3RyZWFtc0thZmthU2VjdXJpdHkjQnJva2VyUHVibGljQ2VydGlmaWNhdGVcbiAgICovXG4gIHJlYWRvbmx5IGJyb2tlclB1YmxpY0NlcnRpZmljYXRlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBEZXNjcmliZXMgdGhlIHRyYW5zcG9ydCB0eXBlLiBDYW4gYmUgZWl0aGVyIFBMQUlOVEVYVCBvciBTU0wuXG4gICAqXG4gICAqIEBzY2hlbWEgU3RyZWFtc0thZmthU2VjdXJpdHkjUHJvdG9jb2xcbiAgICovXG4gIHJlYWRvbmx5IHByb3RvY29sPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdTdHJlYW1zS2Fma2FTZWN1cml0eScgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fU3RyZWFtc0thZmthU2VjdXJpdHkoXG4gIG9iajogU3RyZWFtc0thZmthU2VjdXJpdHkgfCB1bmRlZmluZWRcbik6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICBCcm9rZXJQdWJsaWNDZXJ0aWZpY2F0ZTogb2JqLmJyb2tlclB1YmxpY0NlcnRpZmljYXRlLFxuICAgIFByb3RvY29sOiBvYmoucHJvdG9jb2wsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZShcbiAgICAociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCA/IHIgOiB7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSxcbiAgICB7fVxuICApO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIFRoZSBuYW1lIG9mIGEgQnVpbHQgaW4gb3IgQ3VzdG9tIERCIFJvbGUgdG8gY29ubmVjdCB0byBhbiBBdGxhcyBDbHVzdGVyLlxuICpcbiAqIEBzY2hlbWEgREJSb2xlVG9FeGVjdXRlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGJSb2xlVG9FeGVjdXRlIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSByb2xlIHRvIHVzZS4gQ2FuIGJlIGEgYnVpbHQgaW4gcm9sZSBvciBhIGN1c3RvbSByb2xlLlxuICAgKlxuICAgKiBAc2NoZW1hIERCUm9sZVRvRXhlY3V0ZSNSb2xlXG4gICAqL1xuICByZWFkb25seSByb2xlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUeXBlIG9mIHRoZSBEQiByb2xlLiBDYW4gYmUgZWl0aGVyIEJ1aWx0SW4gb3IgQ3VzdG9tLlxuICAgKlxuICAgKiBAc2NoZW1hIERCUm9sZVRvRXhlY3V0ZSNUeXBlXG4gICAqL1xuICByZWFkb25seSB0eXBlPzogRGJSb2xlVG9FeGVjdXRlVHlwZTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnRGJSb2xlVG9FeGVjdXRlJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9EYlJvbGVUb0V4ZWN1dGUoXG4gIG9iajogRGJSb2xlVG9FeGVjdXRlIHwgdW5kZWZpbmVkXG4pOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgUm9sZTogb2JqLnJvbGUsXG4gICAgVHlwZTogb2JqLnR5cGUsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZShcbiAgICAociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCA/IHIgOiB7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSxcbiAgICB7fVxuICApO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBxdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIFR5cGUgb2YgdGhlIERCIHJvbGUuIENhbiBiZSBlaXRoZXIgQnVpbHRJbiBvciBDdXN0b20uXG4gKlxuICogQHNjaGVtYSBEYlJvbGVUb0V4ZWN1dGVUeXBlXG4gKi9cbmV4cG9ydCBlbnVtIERiUm9sZVRvRXhlY3V0ZVR5cGUge1xuICAvKiogQlVJTFRfSU4gKi9cbiAgQlVJTFRfSU4gPSBcIkJVSUxUX0lOXCIsXG4gIC8qKiBDVVNUT00gKi9cbiAgQ1VTVE9NID0gXCJDVVNUT01cIixcbn1cblxuLyoqXG4gKiBBIENsb3VkRm9ybWF0aW9uIGBNb25nb0RCOjpBdGxhczo6U3RyZWFtSW5zdGFuY2VgXG4gKlxuICogQGNsb3VkZm9ybWF0aW9uUmVzb3VyY2UgTW9uZ29EQjo6QXRsYXM6OlN0cmVhbUluc3RhbmNlXG4gKiBAc3RhYmlsaXR5IGV4dGVybmFsXG4gKi9cbmV4cG9ydCBjbGFzcyBDZm5TdHJlYW1JbnN0YW5jZSBleHRlbmRzIGNkay5DZm5SZXNvdXJjZSB7XG4gIC8qKlxuICAgKiBUaGUgQ2xvdWRGb3JtYXRpb24gcmVzb3VyY2UgdHlwZSBuYW1lIGZvciB0aGlzIHJlc291cmNlIGNsYXNzLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBDRk5fUkVTT1VSQ0VfVFlQRV9OQU1FID1cbiAgICBcIk1vbmdvREI6OkF0bGFzOjpTdHJlYW1JbnN0YW5jZVwiO1xuXG4gIC8qKlxuICAgKiBSZXNvdXJjZSBwcm9wcy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBwcm9wczogQ2ZuU3RyZWFtSW5zdGFuY2VQcm9wcztcblxuICAvKipcbiAgICogQXR0cmlidXRlIGBNb25nb0RCOjpBdGxhczo6U3RyZWFtSW5zdGFuY2UuSWRgXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYXR0cklkOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBBdHRyaWJ1dGUgYE1vbmdvREI6OkF0bGFzOjpTdHJlYW1JbnN0YW5jZS5Ib3N0bmFtZXNgXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYXR0ckhvc3RuYW1lczogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBgTW9uZ29EQjo6QXRsYXM6OlN0cmVhbUluc3RhbmNlYC5cbiAgICpcbiAgICogQHBhcmFtIHNjb3BlIC0gc2NvcGUgaW4gd2hpY2ggdGhpcyByZXNvdXJjZSBpcyBkZWZpbmVkXG4gICAqIEBwYXJhbSBpZCAgICAtIHNjb3BlZCBpZCBvZiB0aGUgcmVzb3VyY2VcbiAgICogQHBhcmFtIHByb3BzIC0gcmVzb3VyY2UgcHJvcGVydGllc1xuICAgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgc2NvcGU6IGNvbnN0cnVjdHMuQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJvcHM6IENmblN0cmVhbUluc3RhbmNlUHJvcHNcbiAgKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICB0eXBlOiBDZm5TdHJlYW1JbnN0YW5jZS5DRk5fUkVTT1VSQ0VfVFlQRV9OQU1FLFxuICAgICAgcHJvcGVydGllczogdG9Kc29uX0NmblN0cmVhbUluc3RhbmNlUHJvcHMocHJvcHMpISxcbiAgICB9KTtcblxuICAgIHRoaXMucHJvcHMgPSBwcm9wcztcblxuICAgIHRoaXMuYXR0cklkID0gY2RrLlRva2VuLmFzU3RyaW5nKHRoaXMuZ2V0QXR0KFwiSWRcIikpO1xuICAgIHRoaXMuYXR0ckhvc3RuYW1lcyA9IGNkay5Ub2tlbi5hc0xpc3QodGhpcy5nZXRBdHQoXCJIb3N0bmFtZXNcIikpO1xuICB9XG59XG4iXX0=
;