rhizo-co-terraform-provider-oci
Version:
Prebuilt oci Provider for Terraform CDK (cdktf)
2,636 lines • 389 kB
JavaScript
"use strict";
var _a, _b, _c, _d;
Object.defineProperty(exports, "__esModule", { value: true });
exports.MysqlMysqlConfiguration = exports.MysqlMysqlConfigurationVariablesOutputReference = exports.mysqlMysqlConfigurationVariablesToHclTerraform = exports.mysqlMysqlConfigurationVariablesToTerraform = exports.MysqlMysqlConfigurationTimeoutsOutputReference = exports.mysqlMysqlConfigurationTimeoutsToHclTerraform = exports.mysqlMysqlConfigurationTimeoutsToTerraform = exports.MysqlMysqlConfigurationInitVariablesOutputReference = exports.mysqlMysqlConfigurationInitVariablesToHclTerraform = exports.mysqlMysqlConfigurationInitVariablesToTerraform = void 0;
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
const cdktf = require("cdktf");
function mysqlMysqlConfigurationInitVariablesToTerraform(struct) {
if (!cdktf.canInspect(struct) || cdktf.Tokenization.isResolvable(struct)) {
return struct;
}
if (cdktf.isComplexElement(struct)) {
throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
}
return {
lower_case_table_names: cdktf.stringToTerraform(struct.lowerCaseTableNames),
};
}
exports.mysqlMysqlConfigurationInitVariablesToTerraform = mysqlMysqlConfigurationInitVariablesToTerraform;
function mysqlMysqlConfigurationInitVariablesToHclTerraform(struct) {
if (!cdktf.canInspect(struct) || cdktf.Tokenization.isResolvable(struct)) {
return struct;
}
if (cdktf.isComplexElement(struct)) {
throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
}
const attrs = {
lower_case_table_names: {
value: cdktf.stringToHclTerraform(struct.lowerCaseTableNames),
isBlock: false,
type: "simple",
storageClassType: "string",
},
};
// remove undefined attributes
return Object.fromEntries(Object.entries(attrs).filter(([_, value]) => value !== undefined && value.value !== undefined));
}
exports.mysqlMysqlConfigurationInitVariablesToHclTerraform = mysqlMysqlConfigurationInitVariablesToHclTerraform;
class MysqlMysqlConfigurationInitVariablesOutputReference extends cdktf.ComplexObject {
/**
* @param terraformResource The parent resource
* @param terraformAttribute The attribute on the parent resource this class is referencing
*/
constructor(terraformResource, terraformAttribute) {
super(terraformResource, terraformAttribute, false, 0);
this.isEmptyObject = false;
}
get internalValue() {
let hasAnyValues = this.isEmptyObject;
const internalValueResult = {};
if (this._lowerCaseTableNames !== undefined) {
hasAnyValues = true;
internalValueResult.lowerCaseTableNames = this._lowerCaseTableNames;
}
return hasAnyValues ? internalValueResult : undefined;
}
set internalValue(value) {
if (value === undefined) {
this.isEmptyObject = false;
this._lowerCaseTableNames = undefined;
}
else {
this.isEmptyObject = Object.keys(value).length === 0;
this._lowerCaseTableNames = value.lowerCaseTableNames;
}
}
get lowerCaseTableNames() {
return this.getStringAttribute('lower_case_table_names');
}
set lowerCaseTableNames(value) {
this._lowerCaseTableNames = value;
}
resetLowerCaseTableNames() {
this._lowerCaseTableNames = undefined;
}
// Temporarily expose input value. Use with caution.
get lowerCaseTableNamesInput() {
return this._lowerCaseTableNames;
}
}
exports.MysqlMysqlConfigurationInitVariablesOutputReference = MysqlMysqlConfigurationInitVariablesOutputReference;
_a = JSII_RTTI_SYMBOL_1;
MysqlMysqlConfigurationInitVariablesOutputReference[_a] = { fqn: "rhizo-co-terraform-provider-oci.mysqlMysqlConfiguration.MysqlMysqlConfigurationInitVariablesOutputReference", version: "1.0.0" };
function mysqlMysqlConfigurationTimeoutsToTerraform(struct) {
if (!cdktf.canInspect(struct) || cdktf.Tokenization.isResolvable(struct)) {
return struct;
}
if (cdktf.isComplexElement(struct)) {
throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
}
return {
create: cdktf.stringToTerraform(struct.create),
delete: cdktf.stringToTerraform(struct.delete),
update: cdktf.stringToTerraform(struct.update),
};
}
exports.mysqlMysqlConfigurationTimeoutsToTerraform = mysqlMysqlConfigurationTimeoutsToTerraform;
function mysqlMysqlConfigurationTimeoutsToHclTerraform(struct) {
if (!cdktf.canInspect(struct) || cdktf.Tokenization.isResolvable(struct)) {
return struct;
}
if (cdktf.isComplexElement(struct)) {
throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
}
const attrs = {
create: {
value: cdktf.stringToHclTerraform(struct.create),
isBlock: false,
type: "simple",
storageClassType: "string",
},
delete: {
value: cdktf.stringToHclTerraform(struct.delete),
isBlock: false,
type: "simple",
storageClassType: "string",
},
update: {
value: cdktf.stringToHclTerraform(struct.update),
isBlock: false,
type: "simple",
storageClassType: "string",
},
};
// remove undefined attributes
return Object.fromEntries(Object.entries(attrs).filter(([_, value]) => value !== undefined && value.value !== undefined));
}
exports.mysqlMysqlConfigurationTimeoutsToHclTerraform = mysqlMysqlConfigurationTimeoutsToHclTerraform;
class MysqlMysqlConfigurationTimeoutsOutputReference extends cdktf.ComplexObject {
/**
* @param terraformResource The parent resource
* @param terraformAttribute The attribute on the parent resource this class is referencing
*/
constructor(terraformResource, terraformAttribute) {
super(terraformResource, terraformAttribute, false);
this.isEmptyObject = false;
}
get internalValue() {
if (this.resolvableValue) {
return this.resolvableValue;
}
let hasAnyValues = this.isEmptyObject;
const internalValueResult = {};
if (this._create !== undefined) {
hasAnyValues = true;
internalValueResult.create = this._create;
}
if (this._delete !== undefined) {
hasAnyValues = true;
internalValueResult.delete = this._delete;
}
if (this._update !== undefined) {
hasAnyValues = true;
internalValueResult.update = this._update;
}
return hasAnyValues ? internalValueResult : undefined;
}
set internalValue(value) {
if (value === undefined) {
this.isEmptyObject = false;
this.resolvableValue = undefined;
this._create = undefined;
this._delete = undefined;
this._update = undefined;
}
else if (cdktf.Tokenization.isResolvable(value)) {
this.isEmptyObject = false;
this.resolvableValue = value;
}
else {
this.isEmptyObject = Object.keys(value).length === 0;
this.resolvableValue = undefined;
this._create = value.create;
this._delete = value.delete;
this._update = value.update;
}
}
get create() {
return this.getStringAttribute('create');
}
set create(value) {
this._create = value;
}
resetCreate() {
this._create = undefined;
}
// Temporarily expose input value. Use with caution.
get createInput() {
return this._create;
}
get delete() {
return this.getStringAttribute('delete');
}
set delete(value) {
this._delete = value;
}
resetDelete() {
this._delete = undefined;
}
// Temporarily expose input value. Use with caution.
get deleteInput() {
return this._delete;
}
get update() {
return this.getStringAttribute('update');
}
set update(value) {
this._update = value;
}
resetUpdate() {
this._update = undefined;
}
// Temporarily expose input value. Use with caution.
get updateInput() {
return this._update;
}
}
exports.MysqlMysqlConfigurationTimeoutsOutputReference = MysqlMysqlConfigurationTimeoutsOutputReference;
_b = JSII_RTTI_SYMBOL_1;
MysqlMysqlConfigurationTimeoutsOutputReference[_b] = { fqn: "rhizo-co-terraform-provider-oci.mysqlMysqlConfiguration.MysqlMysqlConfigurationTimeoutsOutputReference", version: "1.0.0" };
function mysqlMysqlConfigurationVariablesToTerraform(struct) {
if (!cdktf.canInspect(struct) || cdktf.Tokenization.isResolvable(struct)) {
return struct;
}
if (cdktf.isComplexElement(struct)) {
throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
}
return {
autocommit: cdktf.booleanToTerraform(struct.autocommit),
big_tables: cdktf.booleanToTerraform(struct.bigTables),
binlog_expire_logs_seconds: cdktf.numberToTerraform(struct.binlogExpireLogsSeconds),
binlog_row_metadata: cdktf.stringToTerraform(struct.binlogRowMetadata),
binlog_row_value_options: cdktf.stringToTerraform(struct.binlogRowValueOptions),
binlog_transaction_compression: cdktf.booleanToTerraform(struct.binlogTransactionCompression),
completion_type: cdktf.stringToTerraform(struct.completionType),
connect_timeout: cdktf.numberToTerraform(struct.connectTimeout),
connection_memory_chunk_size: cdktf.numberToTerraform(struct.connectionMemoryChunkSize),
connection_memory_limit: cdktf.stringToTerraform(struct.connectionMemoryLimit),
cte_max_recursion_depth: cdktf.stringToTerraform(struct.cteMaxRecursionDepth),
default_authentication_plugin: cdktf.stringToTerraform(struct.defaultAuthenticationPlugin),
foreign_key_checks: cdktf.booleanToTerraform(struct.foreignKeyChecks),
generated_random_password_length: cdktf.numberToTerraform(struct.generatedRandomPasswordLength),
global_connection_memory_limit: cdktf.stringToTerraform(struct.globalConnectionMemoryLimit),
global_connection_memory_tracking: cdktf.booleanToTerraform(struct.globalConnectionMemoryTracking),
group_replication_consistency: cdktf.stringToTerraform(struct.groupReplicationConsistency),
information_schema_stats_expiry: cdktf.numberToTerraform(struct.informationSchemaStatsExpiry),
innodb_buffer_pool_dump_pct: cdktf.numberToTerraform(struct.innodbBufferPoolDumpPct),
innodb_buffer_pool_instances: cdktf.numberToTerraform(struct.innodbBufferPoolInstances),
innodb_buffer_pool_size: cdktf.stringToTerraform(struct.innodbBufferPoolSize),
innodb_ddl_buffer_size: cdktf.stringToTerraform(struct.innodbDdlBufferSize),
innodb_ddl_threads: cdktf.numberToTerraform(struct.innodbDdlThreads),
innodb_ft_enable_stopword: cdktf.booleanToTerraform(struct.innodbFtEnableStopword),
innodb_ft_max_token_size: cdktf.numberToTerraform(struct.innodbFtMaxTokenSize),
innodb_ft_min_token_size: cdktf.numberToTerraform(struct.innodbFtMinTokenSize),
innodb_ft_num_word_optimize: cdktf.numberToTerraform(struct.innodbFtNumWordOptimize),
innodb_ft_result_cache_limit: cdktf.stringToTerraform(struct.innodbFtResultCacheLimit),
innodb_ft_server_stopword_table: cdktf.stringToTerraform(struct.innodbFtServerStopwordTable),
innodb_lock_wait_timeout: cdktf.numberToTerraform(struct.innodbLockWaitTimeout),
innodb_log_writer_threads: cdktf.booleanToTerraform(struct.innodbLogWriterThreads),
innodb_max_purge_lag: cdktf.stringToTerraform(struct.innodbMaxPurgeLag),
innodb_max_purge_lag_delay: cdktf.numberToTerraform(struct.innodbMaxPurgeLagDelay),
innodb_stats_persistent_sample_pages: cdktf.stringToTerraform(struct.innodbStatsPersistentSamplePages),
innodb_stats_transient_sample_pages: cdktf.stringToTerraform(struct.innodbStatsTransientSamplePages),
interactive_timeout: cdktf.numberToTerraform(struct.interactiveTimeout),
local_infile: cdktf.booleanToTerraform(struct.localInfile),
mandatory_roles: cdktf.stringToTerraform(struct.mandatoryRoles),
max_allowed_packet: cdktf.numberToTerraform(struct.maxAllowedPacket),
max_binlog_cache_size: cdktf.stringToTerraform(struct.maxBinlogCacheSize),
max_connect_errors: cdktf.stringToTerraform(struct.maxConnectErrors),
max_connections: cdktf.numberToTerraform(struct.maxConnections),
max_execution_time: cdktf.stringToTerraform(struct.maxExecutionTime),
max_heap_table_size: cdktf.stringToTerraform(struct.maxHeapTableSize),
max_prepared_stmt_count: cdktf.numberToTerraform(struct.maxPreparedStmtCount),
mysql_firewall_mode: cdktf.booleanToTerraform(struct.mysqlFirewallMode),
mysql_zstd_default_compression_level: cdktf.numberToTerraform(struct.mysqlZstdDefaultCompressionLevel),
mysqlx_connect_timeout: cdktf.numberToTerraform(struct.mysqlxConnectTimeout),
mysqlx_deflate_default_compression_level: cdktf.numberToTerraform(struct.mysqlxDeflateDefaultCompressionLevel),
mysqlx_deflate_max_client_compression_level: cdktf.numberToTerraform(struct.mysqlxDeflateMaxClientCompressionLevel),
mysqlx_document_id_unique_prefix: cdktf.numberToTerraform(struct.mysqlxDocumentIdUniquePrefix),
mysqlx_enable_hello_notice: cdktf.booleanToTerraform(struct.mysqlxEnableHelloNotice),
mysqlx_idle_worker_thread_timeout: cdktf.numberToTerraform(struct.mysqlxIdleWorkerThreadTimeout),
mysqlx_interactive_timeout: cdktf.numberToTerraform(struct.mysqlxInteractiveTimeout),
mysqlx_lz4default_compression_level: cdktf.numberToTerraform(struct.mysqlxLz4DefaultCompressionLevel),
mysqlx_lz4max_client_compression_level: cdktf.numberToTerraform(struct.mysqlxLz4MaxClientCompressionLevel),
mysqlx_max_allowed_packet: cdktf.numberToTerraform(struct.mysqlxMaxAllowedPacket),
mysqlx_min_worker_threads: cdktf.numberToTerraform(struct.mysqlxMinWorkerThreads),
mysqlx_read_timeout: cdktf.numberToTerraform(struct.mysqlxReadTimeout),
mysqlx_wait_timeout: cdktf.numberToTerraform(struct.mysqlxWaitTimeout),
mysqlx_write_timeout: cdktf.numberToTerraform(struct.mysqlxWriteTimeout),
mysqlx_zstd_default_compression_level: cdktf.numberToTerraform(struct.mysqlxZstdDefaultCompressionLevel),
mysqlx_zstd_max_client_compression_level: cdktf.numberToTerraform(struct.mysqlxZstdMaxClientCompressionLevel),
net_read_timeout: cdktf.numberToTerraform(struct.netReadTimeout),
net_write_timeout: cdktf.numberToTerraform(struct.netWriteTimeout),
parser_max_mem_size: cdktf.stringToTerraform(struct.parserMaxMemSize),
query_alloc_block_size: cdktf.stringToTerraform(struct.queryAllocBlockSize),
query_prealloc_size: cdktf.stringToTerraform(struct.queryPreallocSize),
regexp_time_limit: cdktf.numberToTerraform(struct.regexpTimeLimit),
sort_buffer_size: cdktf.stringToTerraform(struct.sortBufferSize),
sql_mode: cdktf.stringToTerraform(struct.sqlMode),
sql_require_primary_key: cdktf.booleanToTerraform(struct.sqlRequirePrimaryKey),
sql_warnings: cdktf.booleanToTerraform(struct.sqlWarnings),
thread_pool_dedicated_listeners: cdktf.booleanToTerraform(struct.threadPoolDedicatedListeners),
thread_pool_max_transactions_limit: cdktf.numberToTerraform(struct.threadPoolMaxTransactionsLimit),
time_zone: cdktf.stringToTerraform(struct.timeZone),
tmp_table_size: cdktf.stringToTerraform(struct.tmpTableSize),
transaction_isolation: cdktf.stringToTerraform(struct.transactionIsolation),
wait_timeout: cdktf.numberToTerraform(struct.waitTimeout),
};
}
exports.mysqlMysqlConfigurationVariablesToTerraform = mysqlMysqlConfigurationVariablesToTerraform;
function mysqlMysqlConfigurationVariablesToHclTerraform(struct) {
if (!cdktf.canInspect(struct) || cdktf.Tokenization.isResolvable(struct)) {
return struct;
}
if (cdktf.isComplexElement(struct)) {
throw new Error("A complex element was used as configuration, this is not supported: https://cdk.tf/complex-object-as-configuration");
}
const attrs = {
autocommit: {
value: cdktf.booleanToHclTerraform(struct.autocommit),
isBlock: false,
type: "simple",
storageClassType: "boolean",
},
big_tables: {
value: cdktf.booleanToHclTerraform(struct.bigTables),
isBlock: false,
type: "simple",
storageClassType: "boolean",
},
binlog_expire_logs_seconds: {
value: cdktf.numberToHclTerraform(struct.binlogExpireLogsSeconds),
isBlock: false,
type: "simple",
storageClassType: "number",
},
binlog_row_metadata: {
value: cdktf.stringToHclTerraform(struct.binlogRowMetadata),
isBlock: false,
type: "simple",
storageClassType: "string",
},
binlog_row_value_options: {
value: cdktf.stringToHclTerraform(struct.binlogRowValueOptions),
isBlock: false,
type: "simple",
storageClassType: "string",
},
binlog_transaction_compression: {
value: cdktf.booleanToHclTerraform(struct.binlogTransactionCompression),
isBlock: false,
type: "simple",
storageClassType: "boolean",
},
completion_type: {
value: cdktf.stringToHclTerraform(struct.completionType),
isBlock: false,
type: "simple",
storageClassType: "string",
},
connect_timeout: {
value: cdktf.numberToHclTerraform(struct.connectTimeout),
isBlock: false,
type: "simple",
storageClassType: "number",
},
connection_memory_chunk_size: {
value: cdktf.numberToHclTerraform(struct.connectionMemoryChunkSize),
isBlock: false,
type: "simple",
storageClassType: "number",
},
connection_memory_limit: {
value: cdktf.stringToHclTerraform(struct.connectionMemoryLimit),
isBlock: false,
type: "simple",
storageClassType: "string",
},
cte_max_recursion_depth: {
value: cdktf.stringToHclTerraform(struct.cteMaxRecursionDepth),
isBlock: false,
type: "simple",
storageClassType: "string",
},
default_authentication_plugin: {
value: cdktf.stringToHclTerraform(struct.defaultAuthenticationPlugin),
isBlock: false,
type: "simple",
storageClassType: "string",
},
foreign_key_checks: {
value: cdktf.booleanToHclTerraform(struct.foreignKeyChecks),
isBlock: false,
type: "simple",
storageClassType: "boolean",
},
generated_random_password_length: {
value: cdktf.numberToHclTerraform(struct.generatedRandomPasswordLength),
isBlock: false,
type: "simple",
storageClassType: "number",
},
global_connection_memory_limit: {
value: cdktf.stringToHclTerraform(struct.globalConnectionMemoryLimit),
isBlock: false,
type: "simple",
storageClassType: "string",
},
global_connection_memory_tracking: {
value: cdktf.booleanToHclTerraform(struct.globalConnectionMemoryTracking),
isBlock: false,
type: "simple",
storageClassType: "boolean",
},
group_replication_consistency: {
value: cdktf.stringToHclTerraform(struct.groupReplicationConsistency),
isBlock: false,
type: "simple",
storageClassType: "string",
},
information_schema_stats_expiry: {
value: cdktf.numberToHclTerraform(struct.informationSchemaStatsExpiry),
isBlock: false,
type: "simple",
storageClassType: "number",
},
innodb_buffer_pool_dump_pct: {
value: cdktf.numberToHclTerraform(struct.innodbBufferPoolDumpPct),
isBlock: false,
type: "simple",
storageClassType: "number",
},
innodb_buffer_pool_instances: {
value: cdktf.numberToHclTerraform(struct.innodbBufferPoolInstances),
isBlock: false,
type: "simple",
storageClassType: "number",
},
innodb_buffer_pool_size: {
value: cdktf.stringToHclTerraform(struct.innodbBufferPoolSize),
isBlock: false,
type: "simple",
storageClassType: "string",
},
innodb_ddl_buffer_size: {
value: cdktf.stringToHclTerraform(struct.innodbDdlBufferSize),
isBlock: false,
type: "simple",
storageClassType: "string",
},
innodb_ddl_threads: {
value: cdktf.numberToHclTerraform(struct.innodbDdlThreads),
isBlock: false,
type: "simple",
storageClassType: "number",
},
innodb_ft_enable_stopword: {
value: cdktf.booleanToHclTerraform(struct.innodbFtEnableStopword),
isBlock: false,
type: "simple",
storageClassType: "boolean",
},
innodb_ft_max_token_size: {
value: cdktf.numberToHclTerraform(struct.innodbFtMaxTokenSize),
isBlock: false,
type: "simple",
storageClassType: "number",
},
innodb_ft_min_token_size: {
value: cdktf.numberToHclTerraform(struct.innodbFtMinTokenSize),
isBlock: false,
type: "simple",
storageClassType: "number",
},
innodb_ft_num_word_optimize: {
value: cdktf.numberToHclTerraform(struct.innodbFtNumWordOptimize),
isBlock: false,
type: "simple",
storageClassType: "number",
},
innodb_ft_result_cache_limit: {
value: cdktf.stringToHclTerraform(struct.innodbFtResultCacheLimit),
isBlock: false,
type: "simple",
storageClassType: "string",
},
innodb_ft_server_stopword_table: {
value: cdktf.stringToHclTerraform(struct.innodbFtServerStopwordTable),
isBlock: false,
type: "simple",
storageClassType: "string",
},
innodb_lock_wait_timeout: {
value: cdktf.numberToHclTerraform(struct.innodbLockWaitTimeout),
isBlock: false,
type: "simple",
storageClassType: "number",
},
innodb_log_writer_threads: {
value: cdktf.booleanToHclTerraform(struct.innodbLogWriterThreads),
isBlock: false,
type: "simple",
storageClassType: "boolean",
},
innodb_max_purge_lag: {
value: cdktf.stringToHclTerraform(struct.innodbMaxPurgeLag),
isBlock: false,
type: "simple",
storageClassType: "string",
},
innodb_max_purge_lag_delay: {
value: cdktf.numberToHclTerraform(struct.innodbMaxPurgeLagDelay),
isBlock: false,
type: "simple",
storageClassType: "number",
},
innodb_stats_persistent_sample_pages: {
value: cdktf.stringToHclTerraform(struct.innodbStatsPersistentSamplePages),
isBlock: false,
type: "simple",
storageClassType: "string",
},
innodb_stats_transient_sample_pages: {
value: cdktf.stringToHclTerraform(struct.innodbStatsTransientSamplePages),
isBlock: false,
type: "simple",
storageClassType: "string",
},
interactive_timeout: {
value: cdktf.numberToHclTerraform(struct.interactiveTimeout),
isBlock: false,
type: "simple",
storageClassType: "number",
},
local_infile: {
value: cdktf.booleanToHclTerraform(struct.localInfile),
isBlock: false,
type: "simple",
storageClassType: "boolean",
},
mandatory_roles: {
value: cdktf.stringToHclTerraform(struct.mandatoryRoles),
isBlock: false,
type: "simple",
storageClassType: "string",
},
max_allowed_packet: {
value: cdktf.numberToHclTerraform(struct.maxAllowedPacket),
isBlock: false,
type: "simple",
storageClassType: "number",
},
max_binlog_cache_size: {
value: cdktf.stringToHclTerraform(struct.maxBinlogCacheSize),
isBlock: false,
type: "simple",
storageClassType: "string",
},
max_connect_errors: {
value: cdktf.stringToHclTerraform(struct.maxConnectErrors),
isBlock: false,
type: "simple",
storageClassType: "string",
},
max_connections: {
value: cdktf.numberToHclTerraform(struct.maxConnections),
isBlock: false,
type: "simple",
storageClassType: "number",
},
max_execution_time: {
value: cdktf.stringToHclTerraform(struct.maxExecutionTime),
isBlock: false,
type: "simple",
storageClassType: "string",
},
max_heap_table_size: {
value: cdktf.stringToHclTerraform(struct.maxHeapTableSize),
isBlock: false,
type: "simple",
storageClassType: "string",
},
max_prepared_stmt_count: {
value: cdktf.numberToHclTerraform(struct.maxPreparedStmtCount),
isBlock: false,
type: "simple",
storageClassType: "number",
},
mysql_firewall_mode: {
value: cdktf.booleanToHclTerraform(struct.mysqlFirewallMode),
isBlock: false,
type: "simple",
storageClassType: "boolean",
},
mysql_zstd_default_compression_level: {
value: cdktf.numberToHclTerraform(struct.mysqlZstdDefaultCompressionLevel),
isBlock: false,
type: "simple",
storageClassType: "number",
},
mysqlx_connect_timeout: {
value: cdktf.numberToHclTerraform(struct.mysqlxConnectTimeout),
isBlock: false,
type: "simple",
storageClassType: "number",
},
mysqlx_deflate_default_compression_level: {
value: cdktf.numberToHclTerraform(struct.mysqlxDeflateDefaultCompressionLevel),
isBlock: false,
type: "simple",
storageClassType: "number",
},
mysqlx_deflate_max_client_compression_level: {
value: cdktf.numberToHclTerraform(struct.mysqlxDeflateMaxClientCompressionLevel),
isBlock: false,
type: "simple",
storageClassType: "number",
},
mysqlx_document_id_unique_prefix: {
value: cdktf.numberToHclTerraform(struct.mysqlxDocumentIdUniquePrefix),
isBlock: false,
type: "simple",
storageClassType: "number",
},
mysqlx_enable_hello_notice: {
value: cdktf.booleanToHclTerraform(struct.mysqlxEnableHelloNotice),
isBlock: false,
type: "simple",
storageClassType: "boolean",
},
mysqlx_idle_worker_thread_timeout: {
value: cdktf.numberToHclTerraform(struct.mysqlxIdleWorkerThreadTimeout),
isBlock: false,
type: "simple",
storageClassType: "number",
},
mysqlx_interactive_timeout: {
value: cdktf.numberToHclTerraform(struct.mysqlxInteractiveTimeout),
isBlock: false,
type: "simple",
storageClassType: "number",
},
mysqlx_lz4default_compression_level: {
value: cdktf.numberToHclTerraform(struct.mysqlxLz4DefaultCompressionLevel),
isBlock: false,
type: "simple",
storageClassType: "number",
},
mysqlx_lz4max_client_compression_level: {
value: cdktf.numberToHclTerraform(struct.mysqlxLz4MaxClientCompressionLevel),
isBlock: false,
type: "simple",
storageClassType: "number",
},
mysqlx_max_allowed_packet: {
value: cdktf.numberToHclTerraform(struct.mysqlxMaxAllowedPacket),
isBlock: false,
type: "simple",
storageClassType: "number",
},
mysqlx_min_worker_threads: {
value: cdktf.numberToHclTerraform(struct.mysqlxMinWorkerThreads),
isBlock: false,
type: "simple",
storageClassType: "number",
},
mysqlx_read_timeout: {
value: cdktf.numberToHclTerraform(struct.mysqlxReadTimeout),
isBlock: false,
type: "simple",
storageClassType: "number",
},
mysqlx_wait_timeout: {
value: cdktf.numberToHclTerraform(struct.mysqlxWaitTimeout),
isBlock: false,
type: "simple",
storageClassType: "number",
},
mysqlx_write_timeout: {
value: cdktf.numberToHclTerraform(struct.mysqlxWriteTimeout),
isBlock: false,
type: "simple",
storageClassType: "number",
},
mysqlx_zstd_default_compression_level: {
value: cdktf.numberToHclTerraform(struct.mysqlxZstdDefaultCompressionLevel),
isBlock: false,
type: "simple",
storageClassType: "number",
},
mysqlx_zstd_max_client_compression_level: {
value: cdktf.numberToHclTerraform(struct.mysqlxZstdMaxClientCompressionLevel),
isBlock: false,
type: "simple",
storageClassType: "number",
},
net_read_timeout: {
value: cdktf.numberToHclTerraform(struct.netReadTimeout),
isBlock: false,
type: "simple",
storageClassType: "number",
},
net_write_timeout: {
value: cdktf.numberToHclTerraform(struct.netWriteTimeout),
isBlock: false,
type: "simple",
storageClassType: "number",
},
parser_max_mem_size: {
value: cdktf.stringToHclTerraform(struct.parserMaxMemSize),
isBlock: false,
type: "simple",
storageClassType: "string",
},
query_alloc_block_size: {
value: cdktf.stringToHclTerraform(struct.queryAllocBlockSize),
isBlock: false,
type: "simple",
storageClassType: "string",
},
query_prealloc_size: {
value: cdktf.stringToHclTerraform(struct.queryPreallocSize),
isBlock: false,
type: "simple",
storageClassType: "string",
},
regexp_time_limit: {
value: cdktf.numberToHclTerraform(struct.regexpTimeLimit),
isBlock: false,
type: "simple",
storageClassType: "number",
},
sort_buffer_size: {
value: cdktf.stringToHclTerraform(struct.sortBufferSize),
isBlock: false,
type: "simple",
storageClassType: "string",
},
sql_mode: {
value: cdktf.stringToHclTerraform(struct.sqlMode),
isBlock: false,
type: "simple",
storageClassType: "string",
},
sql_require_primary_key: {
value: cdktf.booleanToHclTerraform(struct.sqlRequirePrimaryKey),
isBlock: false,
type: "simple",
storageClassType: "boolean",
},
sql_warnings: {
value: cdktf.booleanToHclTerraform(struct.sqlWarnings),
isBlock: false,
type: "simple",
storageClassType: "boolean",
},
thread_pool_dedicated_listeners: {
value: cdktf.booleanToHclTerraform(struct.threadPoolDedicatedListeners),
isBlock: false,
type: "simple",
storageClassType: "boolean",
},
thread_pool_max_transactions_limit: {
value: cdktf.numberToHclTerraform(struct.threadPoolMaxTransactionsLimit),
isBlock: false,
type: "simple",
storageClassType: "number",
},
time_zone: {
value: cdktf.stringToHclTerraform(struct.timeZone),
isBlock: false,
type: "simple",
storageClassType: "string",
},
tmp_table_size: {
value: cdktf.stringToHclTerraform(struct.tmpTableSize),
isBlock: false,
type: "simple",
storageClassType: "string",
},
transaction_isolation: {
value: cdktf.stringToHclTerraform(struct.transactionIsolation),
isBlock: false,
type: "simple",
storageClassType: "string",
},
wait_timeout: {
value: cdktf.numberToHclTerraform(struct.waitTimeout),
isBlock: false,
type: "simple",
storageClassType: "number",
},
};
// remove undefined attributes
return Object.fromEntries(Object.entries(attrs).filter(([_, value]) => value !== undefined && value.value !== undefined));
}
exports.mysqlMysqlConfigurationVariablesToHclTerraform = mysqlMysqlConfigurationVariablesToHclTerraform;
class MysqlMysqlConfigurationVariablesOutputReference extends cdktf.ComplexObject {
/**
* @param terraformResource The parent resource
* @param terraformAttribute The attribute on the parent resource this class is referencing
*/
constructor(terraformResource, terraformAttribute) {
super(terraformResource, terraformAttribute, false, 0);
this.isEmptyObject = false;
}
get internalValue() {
let hasAnyValues = this.isEmptyObject;
const internalValueResult = {};
if (this._autocommit !== undefined) {
hasAnyValues = true;
internalValueResult.autocommit = this._autocommit;
}
if (this._bigTables !== undefined) {
hasAnyValues = true;
internalValueResult.bigTables = this._bigTables;
}
if (this._binlogExpireLogsSeconds !== undefined) {
hasAnyValues = true;
internalValueResult.binlogExpireLogsSeconds = this._binlogExpireLogsSeconds;
}
if (this._binlogRowMetadata !== undefined) {
hasAnyValues = true;
internalValueResult.binlogRowMetadata = this._binlogRowMetadata;
}
if (this._binlogRowValueOptions !== undefined) {
hasAnyValues = true;
internalValueResult.binlogRowValueOptions = this._binlogRowValueOptions;
}
if (this._binlogTransactionCompression !== undefined) {
hasAnyValues = true;
internalValueResult.binlogTransactionCompression = this._binlogTransactionCompression;
}
if (this._completionType !== undefined) {
hasAnyValues = true;
internalValueResult.completionType = this._completionType;
}
if (this._connectTimeout !== undefined) {
hasAnyValues = true;
internalValueResult.connectTimeout = this._connectTimeout;
}
if (this._connectionMemoryChunkSize !== undefined) {
hasAnyValues = true;
internalValueResult.connectionMemoryChunkSize = this._connectionMemoryChunkSize;
}
if (this._connectionMemoryLimit !== undefined) {
hasAnyValues = true;
internalValueResult.connectionMemoryLimit = this._connectionMemoryLimit;
}
if (this._cteMaxRecursionDepth !== undefined) {
hasAnyValues = true;
internalValueResult.cteMaxRecursionDepth = this._cteMaxRecursionDepth;
}
if (this._defaultAuthenticationPlugin !== undefined) {
hasAnyValues = true;
internalValueResult.defaultAuthenticationPlugin = this._defaultAuthenticationPlugin;
}
if (this._foreignKeyChecks !== undefined) {
hasAnyValues = true;
internalValueResult.foreignKeyChecks = this._foreignKeyChecks;
}
if (this._generatedRandomPasswordLength !== undefined) {
hasAnyValues = true;
internalValueResult.generatedRandomPasswordLength = this._generatedRandomPasswordLength;
}
if (this._globalConnectionMemoryLimit !== undefined) {
hasAnyValues = true;
internalValueResult.globalConnectionMemoryLimit = this._globalConnectionMemoryLimit;
}
if (this._globalConnectionMemoryTracking !== undefined) {
hasAnyValues = true;
internalValueResult.globalConnectionMemoryTracking = this._globalConnectionMemoryTracking;
}
if (this._groupReplicationConsistency !== undefined) {
hasAnyValues = true;
internalValueResult.groupReplicationConsistency = this._groupReplicationConsistency;
}
if (this._informationSchemaStatsExpiry !== undefined) {
hasAnyValues = true;
internalValueResult.informationSchemaStatsExpiry = this._informationSchemaStatsExpiry;
}
if (this._innodbBufferPoolDumpPct !== undefined) {
hasAnyValues = true;
internalValueResult.innodbBufferPoolDumpPct = this._innodbBufferPoolDumpPct;
}
if (this._innodbBufferPoolInstances !== undefined) {
hasAnyValues = true;
internalValueResult.innodbBufferPoolInstances = this._innodbBufferPoolInstances;
}
if (this._innodbBufferPoolSize !== undefined) {
hasAnyValues = true;
internalValueResult.innodbBufferPoolSize = this._innodbBufferPoolSize;
}
if (this._innodbDdlBufferSize !== undefined) {
hasAnyValues = true;
internalValueResult.innodbDdlBufferSize = this._innodbDdlBufferSize;
}
if (this._innodbDdlThreads !== undefined) {
hasAnyValues = true;
internalValueResult.innodbDdlThreads = this._innodbDdlThreads;
}
if (this._innodbFtEnableStopword !== undefined) {
hasAnyValues = true;
internalValueResult.innodbFtEnableStopword = this._innodbFtEnableStopword;
}
if (this._innodbFtMaxTokenSize !== undefined) {
hasAnyValues = true;
internalValueResult.innodbFtMaxTokenSize = this._innodbFtMaxTokenSize;
}
if (this._innodbFtMinTokenSize !== undefined) {
hasAnyValues = true;
internalValueResult.innodbFtMinTokenSize = this._innodbFtMinTokenSize;
}
if (this._innodbFtNumWordOptimize !== undefined) {
hasAnyValues = true;
internalValueResult.innodbFtNumWordOptimize = this._innodbFtNumWordOptimize;
}
if (this._innodbFtResultCacheLimit !== undefined) {
hasAnyValues = true;
internalValueResult.innodbFtResultCacheLimit = this._innodbFtResultCacheLimit;
}
if (this._innodbFtServerStopwordTable !== undefined) {
hasAnyValues = true;
internalValueResult.innodbFtServerStopwordTable = this._innodbFtServerStopwordTable;
}
if (this._innodbLockWaitTimeout !== undefined) {
hasAnyValues = true;
internalValueResult.innodbLockWaitTimeout = this._innodbLockWaitTimeout;
}
if (this._innodbLogWriterThreads !== undefined) {
hasAnyValues = true;
internalValueResult.innodbLogWriterThreads = this._innodbLogWriterThreads;
}
if (this._innodbMaxPurgeLag !== undefined) {
hasAnyValues = true;
internalValueResult.innodbMaxPurgeLag = this._innodbMaxPurgeLag;
}
if (this._innodbMaxPurgeLagDelay !== undefined) {
hasAnyValues = true;
internalValueResult.innodbMaxPurgeLagDelay = this._innodbMaxPurgeLagDelay;
}
if (this._innodbStatsPersistentSamplePages !== undefined) {
hasAnyValues = true;
internalValueResult.innodbStatsPersistentSamplePages = this._innodbStatsPersistentSamplePages;
}
if (this._innodbStatsTransientSamplePages !== undefined) {
hasAnyValues = true;
internalValueResult.innodbStatsTransientSamplePages = this._innodbStatsTransientSamplePages;
}
if (this._interactiveTimeout !== undefined) {
hasAnyValues = true;
internalValueResult.interactiveTimeout = this._interactiveTimeout;
}
if (this._localInfile !== undefined) {
hasAnyValues = true;
internalValueResult.localInfile = this._localInfile;
}
if (this._mandatoryRoles !== undefined) {
hasAnyValues = true;
internalValueResult.mandatoryRoles = this._mandatoryRoles;
}
if (this._maxAllowedPacket !== undefined) {
hasAnyValues = true;
internalValueResult.maxAllowedPacket = this._maxAllowedPacket;
}
if (this._maxBinlogCacheSize !== undefined) {
hasAnyValues = true;
internalValueResult.maxBinlogCacheSize = this._maxBinlogCacheSize;
}
if (this._maxConnectErrors !== undefined) {
hasAnyValues = true;
internalValueResult.maxConnectErrors = this._maxConnectErrors;
}
if (this._maxConnections !== undefined) {
hasAnyValues = true;
internalValueResult.maxConnections = this._maxConnections;
}
if (this._maxExecutionTime !== undefined) {
hasAnyValues = true;
internalValueResult.maxExecutionTime = this._maxExecutionTime;
}
if (this._maxHeapTableSize !== undefined) {
hasAnyValues = true;
internalValueResult.maxHeapTableSize = this._maxHeapTableSize;
}
if (this._maxPreparedStmtCount !== undefined) {
hasAnyValues = true;
internalValueResult.maxPreparedStmtCount = this._maxPreparedStmtCount;
}
if (this._mysqlFirewallMode !== undefined) {
hasAnyValues = true;
internalValueResult.mysqlFirewallMode = this._mysqlFirewallMode;
}
if (this._mysqlZstdDefaultCompressionLevel !== undefined) {
hasAnyValues = true;
internalValueResult.mysqlZstdDefaultCompressionLevel = this._mysqlZstdDefaultCompressionLevel;
}
if (this._mysqlxConnectTimeout !== undefined) {
hasAnyValues = true;
internalValueResult.mysqlxConnectTimeout = this._mysqlxConnectTimeout;
}
if (this._mysqlxDeflateDefaultCompressionLevel !== undefined) {
hasAnyValues = true;
internalValueResult.mysqlxDeflateDefaultCompressionLevel = this._mysqlxDeflateDefaultCompressionLevel;
}
if (this._mysqlxDeflateMaxClientCompressionLevel !== undefined) {
hasAnyValues = true;
internalValueResult.mysqlxDeflateMaxClientCompressionLevel = this._mysqlxDeflateMaxClientCompressionLevel;
}
if (this._mysqlxDocumentIdUniquePrefix !== undefined) {
hasAnyValues = true;
internalValueResult.mysqlxDocumentIdUniquePrefix = this._mysqlxDocumentIdUniquePrefix;
}
if (this._mysqlxEnableHelloNotice !== undefined) {
hasAnyValues = true;
internalValueResult.mysqlxEnableHelloNotice = this._mysqlxEnableHelloNotice;
}
if (this._mysqlxIdleWorkerThreadTimeout !== undefined) {
hasAnyValues = true;
internalValueResult.mysqlxIdleWorkerThreadTimeout = this._mysqlxIdleWorkerThreadTimeout;
}
if (this._mysqlxInteractiveTimeout !== undefined) {
hasAnyValues = true;
internalValueResult.mysqlxInteractiveTimeout = this._mysqlxInteractiveTimeout;
}
if (this._mysqlxLz4DefaultCompressionLevel !== undefined) {
hasAnyValues = true;
internalValueResult.mysqlxLz4DefaultCompressionLevel = this._mysqlxLz4DefaultCompressionLevel;
}
if (this._mysqlxLz4MaxClientCompressionLevel !== undefined) {
hasAnyValues = true;
internalValueResult.mysqlxLz4MaxClientCompressionLevel = this._mysqlxLz4MaxClientCompressionLevel;
}
if (this._mysqlxMaxAllowedPacket !== undefined) {
hasAnyValues = true;
internalValueResult.mysqlxMaxAllowedPacket = this._mysqlxMaxAllowedPacket;
}
if (this._mysqlxMinWorkerThreads !== undefined) {
hasAnyValues = true;
internalValueResult.mysqlxMinWorkerThreads = this._mysqlxMinWorkerThreads;
}
if (this._mysqlxReadTimeout !== undefined) {
hasAnyValues = true;
internalValueResult.mysqlxReadTimeout = this._mysqlxReadTimeout;
}
if (this._mysqlxWaitTimeout !== undefined) {
hasAnyValues = true;
internalValueResult.mysqlxWaitTimeout = this._mysqlxWaitTimeout;
}
if (this._mysqlxWriteTimeout !== undefined) {
hasAnyValues = true;
internalValueResult.mysqlxWriteTimeout = this._mysqlxWriteTimeout;
}
if (this._mysqlxZstdDefaultCompressionLevel !== undefined) {
hasAnyValues = true;
internalValueResult.mysqlxZstdDefaultCompressionLevel = this._mysqlxZstdDefaultCompressionLevel;
}
if (this._mysqlxZstdMaxClientCompressionLevel !== undefined) {
hasAnyValues = true;
internalValueResult.mysqlxZstdMaxClientCompressionLevel = this._mysqlxZstdMaxClientCompressionLevel;
}
if (this._netReadTimeout !== undefined) {
hasAnyValues = true;
internalValueResult.netReadTimeout = this._netReadTimeout;
}
if (this._netWriteTimeout !== undefined) {
hasAnyValues = true;
internalValueResult.netWriteTimeout = this._netWriteTimeout;
}
if (this._parserMaxMemSize !== undefined) {
hasAnyValues = true;
internalValueResult.parserMaxMemSize = this._parserMaxMemSize;
}
if (this._queryAllocBlockSize !== undefined) {
hasAnyValues = true;
internalValueResult.queryAllocBlockSize = this._queryAllocBlockSize;
}
if (this._queryPreallocSize !== undefined) {
hasAnyValues = true;
internalValueResult.queryPreallocSize = this._queryPreallocSize;
}
if (this._regexpTimeLimit !== undefined) {
hasAnyValues = true;
internalValueResult.regexpTimeLimit = this._regexpTimeLimit;
}
if (this._sortBufferSize !== undefined) {
hasAnyValues = true;
internalValueResult.sortBufferSize = this._sortBufferSize;
}
if (this._sqlMode !== undefined) {
hasAnyValues = true;
internalValueResult.sqlMode = this._sqlMode;
}
if (this._sqlRequirePrimaryKey !== undefined) {
hasAnyValues = true;
internalValueResult.sqlRequirePrimaryKey = this._sqlRequirePrimaryKey;
}
if (this._sqlWarnings !== undefined) {
hasAnyValues = true;
internalValueResult.sqlWarnings = this._sqlWarnings;
}
if (this._threadPoolDedicatedListeners !== undefined) {
hasAnyValues = true;
internalValueResult.threadPoolDedicatedListeners = this._threadPoolDedicatedListeners;
}
if (this._threadPoolMaxTransactionsLimit !== undefined) {
hasAnyValues = true;
internalValueResult.threadPoolMaxTransactionsLimit = this._threadPoolMaxTransactionsLimit;
}
if (this._timeZone !== undefined) {
hasAnyValues = true;
internalValueResult.timeZone = this._timeZone;
}
if (this._tmpTableSize !== undefined) {
hasAnyValues = true;
internalValueResult.tmpTableSize = this._tmpTableSize;
}
if (this._transactionIsolation !== undefined) {
hasAnyValues = true;
internalValueResult.transactionIsolation = this._transactionIsolation;
}
if (this._waitTimeout !== undefined) {
hasAnyValues = true;
internalValueResult.waitTimeout = this._waitTimeout;
}
return hasAnyValues ? internalValueResult : undefined;
}
set internalValue(value) {
if (value === undefined) {
this.isEmptyObject = false;
this._autocommit = undefined;
this._bigTables = undefined;
this._binlogExpireLogsSeconds = undefined;
this._binlogRowMetadata = undefined;
this._binlogRowValueOptions = undefined;
this._binlogTransactionCompression = undefined;
this._completionType = undefined;
this._connectTimeout = undefined;
this._connectionMemoryChunkSize = undefined;
this._connectionMemoryLimit = undefined;
this._cteMaxRecursionDepth = undefined;
this._defaultAuthenticationPlugin = undefined;
this._foreignKeyChecks = undefined;
this._generatedRandomPasswordLength = undefined;
this._globalConnectionMemoryLimit = undefined;
this._globalConnectionMemoryTracking = undefined;
this._groupReplicationConsistency = undefined;
this._informationSchemaStatsExpiry = undefined;
this._innodbBufferPoolDumpPct = undefined;
this._innodbBufferPoolInstances = undefined;
this._innodbBufferPoolSize = undefined;
this._innodbDdlBufferSize = undefined;
this._innodbDdlThreads = undefined;
this._innodbFtEnableStopword = undefined;
this._innodbFtMaxTokenSize = undefined;
this._innodbFtMinTokenSize = undefined;
this._innodbFtNumWordOptimize = undefined;
this._innodbFtResultCacheLimit = undefined;
this._innodbFtServerStopwordTable = undefined;
this._innodbLockWaitTimeout = undefined;
this._innodbLogWriterThreads = undefined;
this._innodbMaxPurgeLag = undefined;
this._innodbMaxPurgeLagDelay = undefined;
this._innodbStatsPersistentSamplePages = undefined;
this._innodbStatsTransientSamplePages = undefined;
this._interactiveTimeout = undefined;
this._localInfile = undefined;
this._mandatoryRoles = undefined;
this._maxAllowedPacket = undefined;
this._maxBinlogCacheSize = undefined;
this._maxConnectErrors = undefined;
this._maxConnections = undefined;
this._maxExecutionTime = undefined;
this._maxHeapTableSize = undefined;
this._maxPreparedStmtCount = undefined;
this._mysqlFirewallMode = undefined;
this._mysqlZstdDefaultCompressionLevel = undefined;
this._mysqlxConnectTimeout = undefined;
this._mysqlxDeflateDefaultCompressionLevel = undefined;
this._mysqlxDeflateMaxClientCompressionLevel = undefined;
this._mysqlxDocumentIdUniquePrefix = undefined;
this._mysqlxEnableHelloNotice = undefined;
this._mysqlxIdleWorkerThreadTimeout = undefined;
this._mysqlxInteractiveTimeout = undefined;
this._mysqlxLz4DefaultCompressionLevel = undefined;
this._mysqlxLz4MaxClientCompressionLevel = undefined;
this._mysqlxMaxAllowedPacket = undefined;
this._mysqlxMinWorkerThreads = undefined;
this._mysqlxReadTimeout = undefined;
this._mysqlxWaitTimeout = undefined;
this._mysqlxWriteTimeout = undefined;
this._mysqlxZstdDefaultCompressionLevel = undefined;
this._mysqlxZstdMaxClientCompressionLevel = undefined;
this._netReadTimeout = undefined;
this._netWriteTimeout = undefined;
this._parserMaxMemSize = undefined;
this._queryAllocBlockSize = undefined;
this._queryPreallocSize = undefined;
this._regexpTimeLimit = undefined;
this._sortBufferSize = undefined;
this._sqlMode = undefined;
this._sqlRequirePrimaryKey = undefined;
this._sqlWarnings = undefined;
this._threadPoolDedicatedListeners = undefined;
this._threadPoolMaxTransactionsLimit = undefined;
this._timeZone = undefined;
this._tmpTableSize = undefined;
this._transactionIsolation = undefined;
this._waitTimeout = undefined;
}
else {
this.isEmptyObject = Object.keys(value).length === 0;
this._autocommit = value.autocommit;
this._bigTables = value.bigTables;
this._binlogExpireLogsSeconds = value.binlogExpireLogsSeconds;
this._binlogRowMetadata = value.binlogRowMetadata;
this._binlogRowValueOptions = value.binlogRowValueOptions;
this._binlogTransactionCompression = value.binlogTransactionCompression;
this._completionType = value.completionType;
this._connectTimeout = value.connectTimeout;
this._connectionMemoryChunkSize = value.connectionMemoryChunkSize;
this._connectionMemoryLimit = value.connectionMemoryLimit;
this._cteMaxRecursionDepth = value.cteMaxRecursionDepth;
this._defaultAuthenticationPlugin = value.defaultAuthenticationPlugin;
this._foreignKeyChecks = value.foreignKeyChecks;
this._generatedRandomPasswordLength = value.generatedRandomPasswordLength;
this._globalConnectionMemoryLimit = value.globalConnectionMemoryLimit;
this._globalConnectionMemoryTracking = value.globalConnectionMemoryTracking;
this._groupReplicationConsistency = value.groupReplicationConsistency;
this._informationSchemaStatsExpiry = value.informationSchemaStatsExpiry;
this._innodbBufferPoolDumpPct = value.innodbBufferPoolDumpPct;
this._innodbBufferPoolInstances = value.innodbBufferPoolInstances;
this._innodbBufferPoolSize = value.innodbBufferPoolSize;
this._innodbDdlBufferSize = value.innodbDdlBufferSize;
this._innodbDdlThreads = value.innodbDdlThreads;
this._innodbFtEnableStopword = value.innodbFtEnableStopword;
this._innodbFtMaxTokenSize = value.innodbFtMaxTokenSize;
this._innodbFtMinTokenSize = value.innodbFtMinTokenSize;
this._innodbFtNumWordOptimize = value.innodbFtNumWordOptimize;
this._innodbFtResultCacheLimit = value.innodbFtResultCacheLimit;
this._innodbFtServerStopwordTable = value.innodbFtServerStopwordTable;
this._innodbLockWaitTimeout = value.innodbLockWaitTimeout;
this._innodbLogWriterThreads = value.innodbLogWriterThreads;
this._innodbMaxPurgeLag = value.innodbMaxPurgeLag;
this._innodbMaxPurgeLagDelay = value.innodbMaxPurgeLagDelay;
this._innodbStatsPersistentSamplePages = value.innodbStatsPersistentSamplePages;
this._innodbStatsTransientSamplePages = value.innodbStatsTransientSamplePages;
this._interactiveTimeout = value.interactiveTimeout;
this._localInfile = value.localInfile;
this._mandatoryRoles = value.mandatoryRoles;
this._maxAllowedPacket = value.maxAllowedPacket;
this._maxBinlogCacheSize = value.maxBinlogCacheSize;
this._maxConnectErrors = value.maxConnectErrors;
this._maxConnections = value.maxConnections;
this._maxExecutionTime = value.maxExecutionTime;
this._maxHeapTableSize = value.maxHeapTableSize;
this._maxPreparedStmtCount = value.maxPreparedStmtCount;
this._mysqlFirewallMode = value.mysqlFirewallMode;
this._mysqlZstdDefaultCompressionLevel = value.mysqlZstdDefaultCompressionLevel;
this._mysqlxConnectTimeout = value.mysqlxConnectTimeout;
this._mysqlxDeflateDefaultCompressionLevel = value.mysqlxDeflateDefaultCompressionLevel;
this._mysqlxDeflateMaxClientCompressionLevel = value.mysqlxDeflateMaxClientCompressionLevel;
this._mysqlxDocumentIdUniquePrefix = value.mysqlxDocumentIdUniquePrefix;
this._mysqlxEnableHelloNotice = value.mysqlxEnableHelloNotice;
this._mysqlxIdleWorkerThreadTimeout = value.mysqlxIdleWorkerThreadTimeout;
this._mysqlxInteractiveTimeout = value.mysqlxInteractiveTimeout;
this._mysqlxLz4DefaultCompressionLevel = value.mysqlxLz4DefaultCompressionLevel;
this._mysqlxLz4MaxClientCompressionLevel = value.mysqlxLz4MaxClientCompressionLevel;
this._mysqlxMaxAllowedPacket = value.mysqlxMaxAllowedPacket;
this._mysqlxMinWorkerThreads = value.mysqlxMinWorkerThreads;
this._mysqlxReadTimeout = value.mysqlxReadTimeout;
this._mysqlxWaitTimeout = value.mysqlxWaitTimeout;
this._mysqlxWriteTimeout = value.mysqlxWriteTimeout;
this._mysqlxZstdDefaultCompressionLevel = value.mysqlxZstdDefaultCompressionLevel;
this._mysqlxZstdMaxClientCompressionLevel = value.mysqlxZstdMaxClientCompressionLevel;
this._netReadTimeout = value.netReadTimeout;
this._netWriteTimeout = value.netWriteTimeout;
this._parserMaxMemSize = value.parserMaxMemSize;
this._queryAllocBlockSize = value.queryAllocBlockSize;
this._queryPreallocSize = value.queryPreallocSize;
this._regexpTimeLimit = value.regexpTimeLimit;
this._sortBufferSize = value.sortBufferSize;
this._sqlMode = value.sqlMode;
this._sqlRequirePrimaryKey = value.sqlRequirePrimaryKey;
this._sqlWarnings = value.sqlWarnings;
this._threadPoolDedicatedListeners = value.threadPoolDedicatedListeners;
this._threadPoolMaxTransactionsLimit = value.threadPoolMaxTransactionsLimit;
this._timeZone = value.timeZone;
this._tmpTableSize = value.tmpTableSize;
this._transactionIsolation = value.transactionIsolation;
this._waitTimeout = value.waitTimeout;
}
}
get autocommit() {
return this.getBooleanAttribute('autocommit');
}
set autocommit(value) {
this._autocommit = value;
}
resetAutocommit() {
this._autocommit = undefined;
}
// Temporarily expose input value. Use with caution.
get autocommitInput() {
return this._autocommit;
}
get bigTables() {
return this.getBooleanAttribute('big_tables');
}
set bigTables(value) {
this._bigTables = value;
}
resetBigTables() {
this._bigTables = undefined;
}
// Temporarily expose input value. Use with caution.
get bigTablesInput() {
return this._bigTables;
}
get binlogExpireLogsSeconds() {
return this.getNumberAttribute('binlog_expire_logs_seconds');
}
set binlogExpireLogsSeconds(value) {
this._binlogExpireLogsSeconds = value;
}
resetBinlogExpireLogsSeconds() {
this._binlogExpireLogsSeconds = undefined;
}
// Temporarily expose input value. Use with caution.
get binlogExpireLogsSecondsInput() {
return this._binlogExpireLogsSeconds;
}
get binlogRowMetadata() {
return this.getStringAttribute('binlog_row_metadata');
}
set binlogRowMetadata(value) {
this._binlogRowMetadata = value;
}
resetBinlogRowMetadata() {
this._binlogRowMetadata = undefined;
}
// Temporarily expose input value. Use with caution.
get binlogRowMetadataInput() {
return this._binlogRowMetadata;
}
get binlogRowValueOptions() {
return this.getStringAttribute('binlog_row_value_options');
}
set binlogRowValueOptions(value) {
this._binlogRowValueOptions = value;
}
resetBinlogRowValueOptions() {
this._binlogRowValueOptions = undefined;
}
// Temporarily expose input value. Use with caution.
get binlogRowValueOptionsInput() {
return this._binlogRowValueOptions;
}
get binlogTransactionCompression() {
return this.getBooleanAttribute('binlog_transaction_compression');
}
set binlogTransactionCompression(value) {
this._binlogTransactionCompression = value;
}
resetBinlogTransactionCompression() {
this._binlogTransactionCompression = undefined;
}
// Temporarily expose input value. Use with caution.
get binlogTransactionCompressionInput() {
return this._binlogTransactionCompression;
}
get completionType() {
return this.getStringAttribute('completion_type');
}
set completionType(value) {
this._completionType = value;
}
resetCompletionType() {
this._completionType = undefined;
}
// Temporarily expose input value. Use with caution.
get completionTypeInput() {
return this._completionType;
}
get connectTimeout() {
return this.getNumberAttribute('connect_timeout');
}
set connectTimeout(value) {
this._connectTimeout = value;
}
resetConnectTimeout() {
this._connectTimeout = undefined;
}
// Temporarily expose input value. Use with caution.
get connectTimeoutInput() {
return this._connectTimeout;
}
get connectionMemoryChunkSize() {
return this.getNumberAttribute('connection_memory_chunk_size');
}
set connectionMemoryChunkSize(value) {
this._connectionMemoryChunkSize = value;
}
resetConnectionMemoryChunkSize() {
this._connectionMemoryChunkSize = undefined;
}
// Temporarily expose input value. Use with caution.
get connectionMemoryChunkSizeInput() {
return this._connectionMemoryChunkSize;
}
get connectionMemoryLimit() {
return this.getStringAttribute('connection_memory_limit');
}
set connectionMemoryLimit(value) {
this._connectionMemoryLimit = value;
}
resetConnectionMemoryLimit() {
this._connectionMemoryLimit = undefined;
}
// Temporarily expose input value. Use with caution.
get connectionMemoryLimitInput() {
return this._connectionMemoryLimit;
}
get cteMaxRecursionDepth() {
return this.getStringAttribute('cte_max_recursion_depth');
}
set cteMaxRecursionDepth(value) {
this._cteMaxRecursionDepth = value;
}
resetCteMaxRecursionDepth() {
this._cteMaxRecursionDepth = undefined;
}
// Temporarily expose input value. Use with caution.
get cteMaxRecursionDepthInput() {
return this._cteMaxRecursionDepth;
}
get defaultAuthenticationPlugin() {
return this.getStringAttribute('default_authentication_plugin');
}
set defaultAuthenticationPlugin(value) {
this._defaultAuthenticationPlugin = value;
}
resetDefaultAuthenticationPlugin() {
this._defaultAuthenticationPlugin = undefined;
}
// Temporarily expose input value. Use with caution.
get defaultAuthenticationPluginInput() {
return this._defaultAuthenticationPlugin;
}
get foreignKeyChecks() {
return this.getBooleanAttribute('foreign_key_checks');
}
set foreignKeyChecks(value) {
this._foreignKeyChecks = value;
}
resetForeignKeyChecks() {
this._foreignKeyChecks = undefined;
}
// Temporarily expose input value. Use with caution.
get foreignKeyChecksInput() {
return this._foreignKeyChecks;
}
get generatedRandomPasswordLength() {
return this.getNumberAttribute('generated_random_password_length');
}
set generatedRandomPasswordLength(value) {
this._generatedRandomPasswordLength = value;
}
resetGeneratedRandomPasswordLength() {
this._generatedRandomPasswordLength = undefined;
}
// Temporarily expose input value. Use with caution.
get generatedRandomPasswordLengthInput() {
return this._generatedRandomPasswordLength;
}
get globalConnectionMemoryLimit() {
return this.getStringAttribute('global_connection_memory_limit');
}
set globalConnectionMemoryLimit(value) {
this._globalConnectionMemoryLimit = value;
}
resetGlobalConnectionMemoryLimit() {
this._globalConnectionMemoryLimit = undefined;
}
// Temporarily expose input value. Use with caution.
get globalConnectionMemoryLimitInput() {
return this._globalConnectionMemoryLimit;
}
get globalConnectionMemoryTracking() {
return this.getBooleanAttribute('global_connection_memory_tracking');
}
set globalConnectionMemoryTracking(value) {
this._globalConnectionMemoryTracking = value;
}
resetGlobalConnectionMemoryTracking() {
this._globalConnectionMemoryTracking = undefined;
}
// Temporarily expose input value. Use with caution.
get globalConnectionMemoryTrackingInput() {
return this._globalConnectionMemoryTracking;
}
get groupReplicationConsistency() {
return this.getStringAttribute('group_replication_consistency');
}
set groupReplicationConsistency(value) {
this._groupReplicationConsistency = value;
}
resetGroupReplicationConsistency() {
this._groupReplicationConsistency = undefined;
}
// Temporarily expose input value. Use with caution.
get groupReplicationConsistencyInput() {
return this._groupReplicationConsistency;
}
get informationSchemaStatsExpiry() {
return this.getNumberAttribute('information_schema_stats_expiry');
}
set informationSchemaStatsExpiry(value) {
this._informationSchemaStatsExpiry = value;
}
resetInformationSchemaStatsExpiry() {
this._informationSchemaStatsExpiry = undefined;
}
// Temporarily expose input value. Use with caution.
get informationSchemaStatsExpiryInput() {
return this._informationSchemaStatsExpiry;
}
get innodbBufferPoolDumpPct() {
return this.getNumberAttribute('innodb_buffer_pool_dump_pct');
}
set innodbBufferPoolDumpPct(value) {
this._innodbBufferPoolDumpPct = value;
}
resetInnodbBufferPoolDumpPct() {
this._innodbBufferPoolDumpPct = undefined;
}
// Temporarily expose input value. Use with caution.
get innodbBufferPoolDumpPctInput() {
return this._innodbBufferPoolDumpPct;
}
get innodbBufferPoolInstances() {
return this.getNumberAttribute('innodb_buffer_pool_instances');
}
set innodbBufferPoolInstances(value) {
this._innodbBufferPoolInstances = value;
}
resetInnodbBufferPoolInstances() {
this._innodbBufferPoolInstances = undefined;
}
// Temporarily expose input value. Use with caution.
get innodbBufferPoolInstancesInput() {
return this._innodbBufferPoolInstances;
}
get innodbBufferPoolSize() {
return this.getStringAttribute('innodb_buffer_pool_size');
}
set innodbBufferPoolSize(value) {
this._innodbBufferPoolSize = value;
}
resetInnodbBufferPoolSize() {
this._innodbBufferPoolSize = undefined;
}
// Temporarily expose input value. Use with caution.
get innodbBufferPoolSizeInput() {
return this._innodbBufferPoolSize;
}
get innodbDdlBufferSize() {
return this.getStringAttribute('innodb_ddl_buffer_size');
}
set innodbDdlBufferSize(value) {
this._innodbDdlBufferSize = value;
}
resetInnodbDdlBufferSize() {
this._innodbDdlBufferSize = undefined;
}
// Temporarily expose input value. Use with caution.
get innodbDdlBufferSizeInput() {
return this._innodbDdlBufferSize;
}
get innodbDdlThreads() {
return this.getNumberAttribute('innodb_ddl_threads');
}
set innodbDdlThreads(value) {
this._innodbDdlThreads = value;
}
resetInnodbDdlThreads() {
this._innodbDdlThreads = undefined;
}
// Temporarily expose input value. Use with caution.
get innodbDdlThreadsInput() {
return this._innodbDdlThreads;
}
get innodbFtEnableStopword() {
return this.getBooleanAttribute('innodb_ft_enable_stopword');
}
set innodbFtEnableStopword(value) {
this._innodbFtEnableStopword = value;
}
resetInnodbFtEnableStopword() {
this._innodbFtEnableStopword = undefined;
}
// Temporarily expose input value. Use with caution.
get innodbFtEnableStopwordInput() {
return this._innodbFtEnableStopword;
}
get innodbFtMaxTokenSize() {
return this.getNumberAttribute('innodb_ft_max_token_size');
}
set innodbFtMaxTokenSize(value) {
this._innodbFtMaxTokenSize = value;
}
resetInnodbFtMaxTokenSize() {
this._innodbFtMaxTokenSize = undefined;
}
// Temporarily expose input value. Use with caution.
get innodbFtMaxTokenSizeInput() {
return this._innodbFtMaxTokenSize;
}
get innodbFtMinTokenSize() {
return this.getNumberAttribute('innodb_ft_min_token_size');
}
set innodbFtMinTokenSize(value) {
this._innodbFtMinTokenSize = value;
}
resetInnodbFtMinTokenSize() {
this._innodbFtMinTokenSize = undefined;
}
// Temporarily expose input value. Use with caution.
get innodbFtMinTokenSizeInput() {
return this._innodbFtMinTokenSize;
}
get innodbFtNumWordOptimize() {
return this.getNumberAttribute('innodb_ft_num_word_optimize');
}
set innodbFtNumWordOptimize(value) {
this._innodbFtNumWordOptimize = value;
}
resetInnodbFtNumWordOptimize() {
this._innodbFtNumWordOptimize = undefined;
}
// Temporarily expose input value. Use with caution.
get innodbFtNumWordOptimizeInput() {
return this._innodbFtNumWordOptimize;
}
get innodbFtResultCacheLimit() {
return this.getStringAttribute('innodb_ft_result_cache_limit');
}
set innodbFtResultCacheLimit(value) {
this._innodbFtResultCacheLimit = value;
}
resetInnodbFtResultCacheLimit() {
this._innodbFtResultCacheLimit = undefined;
}
// Temporarily expose input value. Use with caution.
get innodbFtResultCacheLimitInput() {
return this._innodbFtResultCacheLimit;
}
get innodbFtServerStopwordTable() {
return this.getStringAttribute('innodb_ft_server_stopword_table');
}
set innodbFtServerStopwordTable(value) {
this._innodbFtServerStopwordTable = value;
}
resetInnodbFtServerStopwordTable() {
this._innodbFtServerStopwordTable = undefined;
}
// Temporarily expose input value. Use with caution.
get innodbFtServerStopwordTableInput() {
return this._innodbFtServerStopwordTable;
}
get innodbLockWaitTimeout() {
return this.getNumberAttribute('innodb_lock_wait_timeout');
}
set innodbLockWaitTimeout(value) {
this._innodbLockWaitTimeout = value;
}
resetInnodbLockWaitTimeout() {
this._innodbLockWaitTimeout = undefined;
}
// Temporarily expose input value. Use with caution.
get innodbLockWaitTimeoutInput() {
return this._innodbLockWaitTimeout;
}
get innodbLogWriterThreads() {
return this.getBooleanAttribute('innodb_log_writer_threads');
}
set innodbLogWriterThreads(value) {
this._innodbLogWriterThreads = value;
}
resetInnodbLogWriterThreads() {
this._innodbLogWriterThreads = undefined;
}
// Temporarily expose input value. Use with caution.
get innodbLogWriterThreadsInput() {
return this._innodbLogWriterThreads;
}
get innodbMaxPurgeLag() {
return this.getStringAttribute('innodb_max_purge_lag');
}
set innodbMaxPurgeLag(value) {
this._innodbMaxPurgeLag = value;
}
resetInnodbMaxPurgeLag() {
this._innodbMaxPurgeLag = undefined;
}
// Temporarily expose input value. Use with caution.
get innodbMaxPurgeLagInput() {
return this._innodbMaxPurgeLag;
}
get innodbMaxPurgeLagDelay() {
return this.getNumberAttribute('innodb_max_purge_lag_delay');
}
set innodbMaxPurgeLagDelay(value) {
this._innodbMaxPurgeLagDelay = value;
}
resetInnodbMaxPurgeLagDelay() {
this._innodbMaxPurgeLagDelay = undefined;
}
// Temporarily expose input value. Use with caution.
get innodbMaxPurgeLagDelayInput() {
return this._innodbMaxPurgeLagDelay;
}
get innodbStatsPersistentSamplePages() {
return this.getStringAttribute('innodb_stats_persistent_sample_pages');
}
set innodbStatsPersistentSamplePages(value) {
this._innodbStatsPersistentSamplePages = value;
}
resetInnodbStatsPersistentSamplePages() {
this._innodbStatsPersistentSamplePages = undefined;
}
// Temporarily expose input value. Use with caution.
get innodbStatsPersistentSamplePagesInput() {
return this._innodbStatsPersistentSamplePages;
}
get innodbStatsTransientSamplePages() {
return this.getStringAttribute('innodb_stats_transient_sample_pages');
}
set innodbStatsTransientSamplePages(value) {
this._innodbStatsTransientSamplePages = value;
}
resetInnodbStatsTransientSamplePages() {
this._innodbStatsTransientSamplePages = undefined;
}
// Temporarily expose input value. Use with caution.
get innodbStatsTransientSamplePagesInput() {
return this._innodbStatsTransientSamplePages;
}
get interactiveTimeout() {
return this.getNumberAttribute('interactive_timeout');
}
set interactiveTimeout(value) {
this._interactiveTimeout = value;
}
resetInteractiveTimeout() {
this._interactiveTimeout = undefined;
}
// Temporarily expose input value. Use with caution.
get interactiveTimeoutInput() {
return this._interactiveTimeout;
}
get localInfile() {
return this.getBooleanAttribute('local_infile');
}
set localInfile(value) {
this._localInfile = value;
}
resetLocalInfile() {
this._localInfile = undefined;
}
// Temporarily expose input value. Use with caution.
get localInfileInput() {
return this._localInfile;
}
get mandatoryRoles() {
return this.getStringAttribute('mandatory_roles');
}
set mandatoryRoles(value) {
this._mandatoryRoles = value;
}
resetMandatoryRoles() {
this._mandatoryRoles = undefined;
}
// Temporarily expose input value. Use with caution.
get mandatoryRolesInput() {
return this._mandatoryRoles;
}
get maxAllowedPacket() {
return this.getNumberAttribute('max_allowed_packet');
}
set maxAllowedPacket(value) {
this._maxAllowedPacket = value;
}
resetMaxAllowedPacket() {
this._maxAllowedPacket = undefined;
}
// Temporarily expose input value. Use with caution.
get maxAllowedPacketInput() {
return this._maxAllowedPacket;
}
get maxBinlogCacheSize() {
return this.getStringAttribute('max_binlog_cache_size');
}
set maxBinlogCacheSize(value) {
this._maxBinlogCacheSize = value;
}
resetMaxBinlogCacheSize() {
this._maxBinlogCacheSize = undefined;
}
// Temporarily expose input value. Use with caution.
get maxBinlogCacheSizeInput() {
return this._maxBinlogCacheSize;
}
get maxConnectErrors() {
return this.getStringAttribute('max_connect_errors');
}
set maxConnectErrors(value) {
this._maxConnectErrors = value;
}
resetMaxConnectErrors() {
this._maxConnectErrors = undefined;
}
// Temporarily expose input value. Use with caution.
get maxConnectErrorsInput() {
return this._maxConnectErrors;
}
get maxConnections() {
return this.getNumberAttribute('max_connections');
}
set maxConnections(value) {
this._maxConnections = value;
}
resetMaxConnections() {
this._maxConnections = undefined;
}
// Temporarily expose input value. Use with caution.
get maxConnectionsInput() {
return this._maxConnections;
}
get maxExecutionTime() {
return this.getStringAttribute('max_execution_time');
}
set maxExecutionTime(value) {
this._maxExecutionTime = value;
}
resetMaxExecutionTime() {
this._maxExecutionTime = undefined;
}
// Temporarily expose input value. Use with caution.
get maxExecutionTimeInput() {
return this._maxExecutionTime;
}
get maxHeapTableSize() {
return this.getStringAttribute('max_heap_table_size');
}
set maxHeapTableSize(value) {
this._maxHeapTableSize = value;
}
resetMaxHeapTableSize() {
this._maxHeapTableSize = undefined;
}
// Temporarily expose input value. Use with caution.
get maxHeapTableSizeInput() {
return this._maxHeapTableSize;
}
get maxPreparedStmtCount() {
return this.getNumberAttribute('max_prepared_stmt_count');
}
set maxPreparedStmtCount(value) {
this._maxPreparedStmtCount = value;
}
resetMaxPreparedStmtCount() {
this._maxPreparedStmtCount = undefined;
}
// Temporarily expose input value. Use with caution.
get maxPreparedStmtCountInput() {
return this._maxPreparedStmtCount;
}
get mysqlFirewallMode() {
return this.getBooleanAttribute('mysql_firewall_mode');
}
set mysqlFirewallMode(value) {
this._mysqlFirewallMode = value;
}
resetMysqlFirewallMode() {
this._mysqlFirewallMode = undefined;
}
// Temporarily expose input value. Use with caution.
get mysqlFirewallModeInput() {
return this._mysqlFirewallMode;
}
get mysqlZstdDefaultCompressionLevel() {
return this.getNumberAttribute('mysql_zstd_default_compression_level');
}
set mysqlZstdDefaultCompressionLevel(value) {
this._mysqlZstdDefaultCompressionLevel = value;
}
resetMysqlZstdDefaultCompressionLevel() {
this._mysqlZstdDefaultCompressionLevel = undefined;
}
// Temporarily expose input value. Use with caution.
get mysqlZstdDefaultCompressionLevelInput() {
return this._mysqlZstdDefaultCompressionLevel;
}
get mysqlxConnectTimeout() {
return this.getNumberAttribute('mysqlx_connect_timeout');
}
set mysqlxConnectTimeout(value) {
this._mysqlxConnectTimeout = value;
}
resetMysqlxConnectTimeout() {
this._mysqlxConnectTimeout = undefined;
}
// Temporarily expose input value. Use with caution.
get mysqlxConnectTimeoutInput() {
return this._mysqlxConnectTimeout;
}
get mysqlxDeflateDefaultCompressionLevel() {
return this.getNumberAttribute('mysqlx_deflate_default_compression_level');
}
set mysqlxDeflateDefaultCompressionLevel(value) {
this._mysqlxDeflateDefaultCompressionLevel = value;
}
resetMysqlxDeflateDefaultCompressionLevel() {
this._mysqlxDeflateDefaultCompressionLevel = undefined;
}
// Temporarily expose input value. Use with caution.
get mysqlxDeflateDefaultCompressionLevelInput() {
return this._mysqlxDeflateDefaultCompressionLevel;
}
get mysqlxDeflateMaxClientCompressionLevel() {
return this.getNumberAttribute('mysqlx_deflate_max_client_compression_level');
}
set mysqlxDeflateMaxClientCompressionLevel(value) {
this._mysqlxDeflateMaxClientCompressionLevel = value;
}
resetMysqlxDeflateMaxClientCompressionLevel() {
this._mysqlxDeflateMaxClientCompressionLevel = undefined;
}
// Temporarily expose input value. Use with caution.
get mysqlxDeflateMaxClientCompressionLevelInput() {
return this._mysqlxDeflateMaxClientCompressionLevel;
}
get mysqlxDocumentIdUniquePrefix() {
return this.getNumberAttribute('mysqlx_document_id_unique_prefix');
}
set mysqlxDocumentIdUniquePrefix(value) {
this._mysqlxDocumentIdUniquePrefix = value;
}
resetMysqlxDocumentIdUniquePrefix() {
this._mysqlxDocumentIdUniquePrefix = undefined;
}
// Temporarily expose input value. Use with caution.
get mysqlxDocumentIdUniquePrefixInput() {
return this._mysqlxDocumentIdUniquePrefix;
}
get mysqlxEnableHelloNotice() {
return this.getBooleanAttribute('mysqlx_enable_hello_notice');
}
set mysqlxEnableHelloNotice(value) {
this._mysqlxEnableHelloNotice = value;
}
resetMysqlxEnableHelloNotice() {
this._mysqlxEnableHelloNotice = undefined;
}
// Temporarily expose input value. Use with caution.
get mysqlxEnableHelloNoticeInput() {
return this._mysqlxEnableHelloNotice;
}
get mysqlxIdleWorkerThreadTimeout() {
return this.getNumberAttribute('mysqlx_idle_worker_thread_timeout');
}
set mysqlxIdleWorkerThreadTimeout(value) {
this._mysqlxIdleWorkerThreadTimeout = value;
}
resetMysqlxIdleWorkerThreadTimeout() {
this._mysqlxIdleWorkerThreadTimeout = undefined;
}
// Temporarily expose input value. Use with caution.
get mysqlxIdleWorkerThreadTimeoutInput() {
return this._mysqlxIdleWorkerThreadTimeout;
}
get mysqlxInteractiveTimeout() {
return this.getNumberAttribute('mysqlx_interactive_timeout');
}
set mysqlxInteractiveTimeout(value) {
this._mysqlxInteractiveTimeout = value;
}
resetMysqlxInteractiveTimeout() {
this._mysqlxInteractiveTimeout = undefined;
}
// Temporarily expose input value. Use with caution.
get mysqlxInteractiveTimeoutInput() {
return this._mysqlxInteractiveTimeout;
}
get mysqlxLz4DefaultCompressionLevel() {
return this.getNumberAttribute('mysqlx_lz4default_compression_level');
}
set mysqlxLz4DefaultCompressionLevel(value) {
this._mysqlxLz4DefaultCompressionLevel = value;
}
resetMysqlxLz4DefaultCompressionLevel() {
this._mysqlxLz4DefaultCompressionLevel = undefined;
}
// Temporarily expose input value. Use with caution.
get mysqlxLz4DefaultCompressionLevelInput() {
return this._mysqlxLz4DefaultCompressionLevel;
}
get mysqlxLz4MaxClientCompressionLevel() {
return this.getNumberAttribute('mysqlx_lz4max_client_compression_level');
}
set mysqlxLz4MaxClientCompressionLevel(value) {
this._mysqlxLz4MaxClientCompressionLevel = value;
}
resetMysqlxLz4MaxClientCompressionLevel() {
this._mysqlxLz4MaxClientCompressionLevel = undefined;
}
// Temporarily expose input value. Use with caution.
get mysqlxLz4MaxClientCompressionLevelInput() {
return this._mysqlxLz4MaxClientCompressionLevel;
}
get mysqlxMaxAllowedPacket() {
return this.getNumberAttribute('mysqlx_max_allowed_packet');
}
set mysqlxMaxAllowedPacket(value) {
this._mysqlxMaxAllowedPacket = value;
}
resetMysqlxMaxAllowedPacket() {
this._mysqlxMaxAllowedPacket = undefined;
}
// Temporarily expose input value. Use with caution.
get mysqlxMaxAllowedPacketInput() {
return this._mysqlxMaxAllowedPacket;
}
get mysqlxMinWorkerThreads() {
return this.getNumberAttribute('mysqlx_min_worker_threads');
}
set mysqlxMinWorkerThreads(value) {
this._mysqlxMinWorkerThreads = value;
}
resetMysqlxMinWorkerThreads() {
this._mysqlxMinWorkerThreads = undefined;
}
// Temporarily expose input value. Use with caution.
get mysqlxMinWorkerThreadsInput() {
return this._mysqlxMinWorkerThreads;
}
get mysqlxReadTimeout() {
return this.getNumberAttribute('mysqlx_read_timeout');
}
set mysqlxReadTimeout(value) {
this._mysqlxReadTimeout = value;
}
resetMysqlxReadTimeout() {
this._mysqlxReadTimeout = undefined;
}
// Temporarily expose input value. Use with caution.
get mysqlxReadTimeoutInput() {
return this._mysqlxReadTimeout;
}
get mysqlxWaitTimeout() {
return this.getNumberAttribute('mysqlx_wait_timeout');
}
set mysqlxWaitTimeout(value) {
this._mysqlxWaitTimeout = value;
}
resetMysqlxWaitTimeout() {
this._mysqlxWaitTimeout = undefined;
}
// Temporarily expose input value. Use with caution.
get mysqlxWaitTimeoutInput() {
return this._mysqlxWaitTimeout;
}
get mysqlxWriteTimeout() {
return this.getNumberAttribute('mysqlx_write_timeout');
}
set mysqlxWriteTimeout(value) {
this._mysqlxWriteTimeout = value;
}
resetMysqlxWriteTimeout() {
this._mysqlxWriteTimeout = undefined;
}
// Temporarily expose input value. Use with caution.
get mysqlxWriteTimeoutInput() {
return this._mysqlxWriteTimeout;
}
get mysqlxZstdDefaultCompressionLevel() {
return this.getNumberAttribute('mysqlx_zstd_default_compression_level');
}
set mysqlxZstdDefaultCompressionLevel(value) {
this._mysqlxZstdDefaultCompressionLevel = value;
}
resetMysqlxZstdDefaultCompressionLevel() {
this._mysqlxZstdDefaultCompressionLevel = undefined;
}
// Temporarily expose input value. Use with caution.
get mysqlxZstdDefaultCompressionLevelInput() {
return this._mysqlxZstdDefaultCompressionLevel;
}
get mysqlxZstdMaxClientCompressionLevel() {
return this.getNumberAttribute('mysqlx_zstd_max_client_compression_level');
}
set mysqlxZstdMaxClientCompressionLevel(value) {
this._mysqlxZstdMaxClientCompressionLevel = value;
}
resetMysqlxZstdMaxClientCompressionLevel() {
this._mysqlxZstdMaxClientCompressionLevel = undefined;
}
// Temporarily expose input value. Use with caution.
get mysqlxZstdMaxClientCompressionLevelInput() {
return this._mysqlxZstdMaxClientCompressionLevel;
}
get netReadTimeout() {
return this.getNumberAttribute('net_read_timeout');
}
set netReadTimeout(value) {
this._netReadTimeout = value;
}
resetNetReadTimeout() {
this._netReadTimeout = undefined;
}
// Temporarily expose input value. Use with caution.
get netReadTimeoutInput() {
return this._netReadTimeout;
}
get netWriteTimeout() {
return this.getNumberAttribute('net_write_timeout');
}
set netWriteTimeout(value) {
this._netWriteTimeout = value;
}
resetNetWriteTimeout() {
this._netWriteTimeout = undefined;
}
// Temporarily expose input value. Use with caution.
get netWriteTimeoutInput() {
return this._netWriteTimeout;
}
get parserMaxMemSize() {
return this.getStringAttribute('parser_max_mem_size');
}
set parserMaxMemSize(value) {
this._parserMaxMemSize = value;
}
resetParserMaxMemSize() {
this._parserMaxMemSize = undefined;
}
// Temporarily expose input value. Use with caution.
get parserMaxMemSizeInput() {
return this._parserMaxMemSize;
}
get queryAllocBlockSize() {
return this.getStringAttribute('query_alloc_block_size');
}
set queryAllocBlockSize(value) {
this._queryAllocBlockSize = value;
}
resetQueryAllocBlockSize() {
this._queryAllocBlockSize = undefined;
}
// Temporarily expose input value. Use with caution.
get queryAllocBlockSizeInput() {
return this._queryAllocBlockSize;
}
get queryPreallocSize() {
return this.getStringAttribute('query_prealloc_size');
}
set queryPreallocSize(value) {
this._queryPreallocSize = value;
}
resetQueryPreallocSize() {
this._queryPreallocSize = undefined;
}
// Temporarily expose input value. Use with caution.
get queryPreallocSizeInput() {
return this._queryPreallocSize;
}
get regexpTimeLimit() {
return this.getNumberAttribute('regexp_time_limit');
}
set regexpTimeLimit(value) {
this._regexpTimeLimit = value;
}
resetRegexpTimeLimit() {
this._regexpTimeLimit = undefined;
}
// Temporarily expose input value. Use with caution.
get regexpTimeLimitInput() {
return this._regexpTimeLimit;
}
get sortBufferSize() {
return this.getStringAttribute('sort_buffer_size');
}
set sortBufferSize(value) {
this._sortBufferSize = value;
}
resetSortBufferSize() {
this._sortBufferSize = undefined;
}
// Temporarily expose input value. Use with caution.
get sortBufferSizeInput() {
return this._sortBufferSize;
}
get sqlMode() {
return this.getStringAttribute('sql_mode');
}
set sqlMode(value) {
this._sqlMode = value;
}
resetSqlMode() {
this._sqlMode = undefined;
}
// Temporarily expose input value. Use with caution.
get sqlModeInput() {
return this._sqlMode;
}
get sqlRequirePrimaryKey() {
return this.getBooleanAttribute('sql_require_primary_key');
}
set sqlRequirePrimaryKey(value) {
this._sqlRequirePrimaryKey = value;
}
resetSqlRequirePrimaryKey() {
this._sqlRequirePrimaryKey = undefined;
}
// Temporarily expose input value. Use with caution.
get sqlRequirePrimaryKeyInput() {
return this._sqlRequirePrimaryKey;
}
get sqlWarnings() {
return this.getBooleanAttribute('sql_warnings');
}
set sqlWarnings(value) {
this._sqlWarnings = value;
}
resetSqlWarnings() {
this._sqlWarnings = undefined;
}
// Temporarily expose input value. Use with caution.
get sqlWarningsInput() {
return this._sqlWarnings;
}
get threadPoolDedicatedListeners() {
return this.getBooleanAttribute('thread_pool_dedicated_listeners');
}
set threadPoolDedicatedListeners(value) {
this._threadPoolDedicatedListeners = value;
}
resetThreadPoolDedicatedListeners() {
this._threadPoolDedicatedListeners = undefined;
}
// Temporarily expose input value. Use with caution.
get threadPoolDedicatedListenersInput() {
return this._threadPoolDedicatedListeners;
}
get threadPoolMaxTransactionsLimit() {
return this.getNumberAttribute('thread_pool_max_transactions_limit');
}
set threadPoolMaxTransactionsLimit(value) {
this._threadPoolMaxTransactionsLimit = value;
}
resetThreadPoolMaxTransactionsLimit() {
this._threadPoolMaxTransactionsLimit = undefined;
}
// Temporarily expose input value. Use with caution.
get threadPoolMaxTransactionsLimitInput() {
return this._threadPoolMaxTransactionsLimit;
}
get timeZone() {
return this.getStringAttribute('time_zone');
}
set timeZone(value) {
this._timeZone = value;
}
resetTimeZone() {
this._timeZone = undefined;
}
// Temporarily expose input value. Use with caution.
get timeZoneInput() {
return this._timeZone;
}
get tmpTableSize() {
return this.getStringAttribute('tmp_table_size');
}
set tmpTableSize(value) {
this._tmpTableSize = value;
}
resetTmpTableSize() {
this._tmpTableSize = undefined;
}
// Temporarily expose input value. Use with caution.
get tmpTableSizeInput() {
return this._tmpTableSize;
}
get transactionIsolation() {
return this.getStringAttribute('transaction_isolation');
}
set transactionIsolation(value) {
this._transactionIsolation = value;
}
resetTransactionIsolation() {
this._transactionIsolation = undefined;
}
// Temporarily expose input value. Use with caution.
get transactionIsolationInput() {
return this._transactionIsolation;
}
get waitTimeout() {
return this.getNumberAttribute('wait_timeout');
}
set waitTimeout(value) {
this._waitTimeout = value;
}
resetWaitTimeout() {
this._waitTimeout = undefined;
}
// Temporarily expose input value. Use with caution.
get waitTimeoutInput() {
return this._waitTimeout;
}
}
exports.MysqlMysqlConfigurationVariablesOutputReference = MysqlMysqlConfigurationVariablesOutputReference;
_c = JSII_RTTI_SYMBOL_1;
MysqlMysqlConfigurationVariablesOutputReference[_c] = { fqn: "rhizo-co-terraform-provider-oci.mysqlMysqlConfiguration.MysqlMysqlConfigurationVariablesOutputReference", version: "1.0.0" };
/**
* Represents a {@link https://registry.terraform.io/providers/oracle/oci/6.18.0/docs/resources/mysql_mysql_configuration oci_mysql_mysql_configuration}
*/
class MysqlMysqlConfiguration extends cdktf.TerraformResource {
// ==============
// STATIC Methods
// ==============
/**
* Generates CDKTF code for importing a MysqlMysqlConfiguration resource upon running "cdktf plan <stack-name>"
* @param scope The scope in which to define this construct
* @param importToId The construct id used in the generated config for the MysqlMysqlConfiguration to import
* @param importFromId The id of the existing MysqlMysqlConfiguration that should be imported. Refer to the {@link https://registry.terraform.io/providers/oracle/oci/6.18.0/docs/resources/mysql_mysql_configuration#import import section} in the documentation of this resource for the id to use
* @param provider? Optional instance of the provider where the MysqlMysqlConfiguration to import is found
*/
static generateConfigForImport(scope, importToId, importFromId, provider) {
return new cdktf.ImportableResource(scope, importToId, { terraformResourceType: "oci_mysql_mysql_configuration", importId: importFromId, provider });
}
// ===========
// INITIALIZER
// ===========
/**
* Create a new {@link https://registry.terraform.io/providers/oracle/oci/6.18.0/docs/resources/mysql_mysql_configuration oci_mysql_mysql_configuration} Resource
*
* @param scope The scope in which to define this construct
* @param id The scoped construct ID. Must be unique amongst siblings in the same scope
* @param options MysqlMysqlConfigurationConfig
*/
constructor(scope, id, config) {
super(scope, id, {
terraformResourceType: 'oci_mysql_mysql_configuration',
terraformGeneratorMetadata: {
providerName: 'oci',
providerVersion: '6.18.0',
providerVersionConstraint: '~> 6.18.0'
},
provider: config.provider,
dependsOn: config.dependsOn,
count: config.count,
lifecycle: config.lifecycle,
provisioners: config.provisioners,
connection: config.connection,
forEach: config.forEach
});
// init_variables - computed: false, optional: true, required: false
this._initVariables = new MysqlMysqlConfigurationInitVariablesOutputReference(this, "init_variables");
// timeouts - computed: false, optional: true, required: false
this._timeouts = new MysqlMysqlConfigurationTimeoutsOutputReference(this, "timeouts");
// variables - computed: false, optional: true, required: false
this._variables = new MysqlMysqlConfigurationVariablesOutputReference(this, "variables");
this._compartmentId = config.compartmentId;
this._definedTags = config.definedTags;
this._description = config.description;
this._displayName = config.displayName;
this._freeformTags = config.freeformTags;
this._id = config.id;
this._parentConfigurationId = config.parentConfigurationId;
this._shapeName = config.shapeName;
this._initVariables.internalValue = config.initVariables;
this._timeouts.internalValue = config.timeouts;
this._variables.internalValue = config.variables;
}
get compartmentId() {
return this.getStringAttribute('compartment_id');
}
set compartmentId(value) {
this._compartmentId = value;
}
// Temporarily expose input value. Use with caution.
get compartmentIdInput() {
return this._compartmentId;
}
get definedTags() {
return this.getStringMapAttribute('defined_tags');
}
set definedTags(value) {
this._definedTags = value;
}
resetDefinedTags() {
this._definedTags = undefined;
}
// Temporarily expose input value. Use with caution.
get definedTagsInput() {
return this._definedTags;
}
get description() {
return this.getStringAttribute('description');
}
set description(value) {
this._description = value;
}
resetDescription() {
this._description = undefined;
}
// Temporarily expose input value. Use with caution.
get descriptionInput() {
return this._description;
}
get displayName() {
return this.getStringAttribute('display_name');
}
set displayName(value) {
this._displayName = value;
}
resetDisplayName() {
this._displayName = undefined;
}
// Temporarily expose input value. Use with caution.
get displayNameInput() {
return this._displayName;
}
get freeformTags() {
return this.getStringMapAttribute('freeform_tags');
}
set freeformTags(value) {
this._freeformTags = value;
}
resetFreeformTags() {
this._freeformTags = undefined;
}
// Temporarily expose input value. Use with caution.
get freeformTagsInput() {
return this._freeformTags;
}
get id() {
return this.getStringAttribute('id');
}
set id(value) {
this._id = value;
}
resetId() {
this._id = undefined;
}
// Temporarily expose input value. Use with caution.
get idInput() {
return this._id;
}
get parentConfigurationId() {
return this.getStringAttribute('parent_configuration_id');
}
set parentConfigurationId(value) {
this._parentConfigurationId = value;
}
resetParentConfigurationId() {
this._parentConfigurationId = undefined;
}
// Temporarily expose input value. Use with caution.
get parentConfigurationIdInput() {
return this._parentConfigurationId;
}
get shapeName() {
return this.getStringAttribute('shape_name');
}
set shapeName(value) {
this._shapeName = value;
}
// Temporarily expose input value. Use with caution.
get shapeNameInput() {
return this._shapeName;
}
// state - computed: true, optional: false, required: false
get state() {
return this.getStringAttribute('state');
}
// time_created - computed: true, optional: false, required: false
get timeCreated() {
return this.getStringAttribute('time_created');
}
// time_updated - computed: true, optional: false, required: false
get timeUpdated() {
return this.getStringAttribute('time_updated');
}
// type - computed: true, optional: false, required: false
get type() {
return this.getStringAttribute('type');
}
get initVariables() {
return this._initVariables;
}
putInitVariables(value) {
this._initVariables.internalValue = value;
}
resetInitVariables() {
this._initVariables.internalValue = undefined;
}
// Temporarily expose input value. Use with caution.
get initVariablesInput() {
return this._initVariables.internalValue;
}
get timeouts() {
return this._timeouts;
}
putTimeouts(value) {
this._timeouts.internalValue = value;
}
resetTimeouts() {
this._timeouts.internalValue = undefined;
}
// Temporarily expose input value. Use with caution.
get timeoutsInput() {
return this._timeouts.internalValue;
}
get variables() {
return this._variables;
}
putVariables(value) {
this._variables.internalValue = value;
}
resetVariables() {
this._variables.internalValue = undefined;
}
// Temporarily expose input value. Use with caution.
get variablesInput() {
return this._variables.internalValue;
}
// =========
// SYNTHESIS
// =========
synthesizeAttributes() {
return {
compartment_id: cdktf.stringToTerraform(this._compartmentId),
defined_tags: cdktf.hashMapper(cdktf.stringToTerraform)(this._definedTags),
description: cdktf.stringToTerraform(this._description),
display_name: cdktf.stringToTerraform(this._displayName),
freeform_tags: cdktf.hashMapper(cdktf.stringToTerraform)(this._freeformTags),
id: cdktf.stringToTerraform(this._id),
parent_configuration_id: cdktf.stringToTerraform(this._parentConfigurationId),
shape_name: cdktf.stringToTerraform(this._shapeName),
init_variables: mysqlMysqlConfigurationInitVariablesToTerraform(this._initVariables.internalValue),
timeouts: mysqlMysqlConfigurationTimeoutsToTerraform(this._timeouts.internalValue),
variables: mysqlMysqlConfigurationVariablesToTerraform(this._variables.internalValue),
};
}
synthesizeHclAttributes() {
const attrs = {
compartment_id: {
value: cdktf.stringToHclTerraform(this._compartmentId),
isBlock: false,
type: "simple",
storageClassType: "string",
},
defined_tags: {
value: cdktf.hashMapperHcl(cdktf.stringToHclTerraform)(this._definedTags),
isBlock: false,
type: "map",
storageClassType: "stringMap",
},
description: {
value: cdktf.stringToHclTerraform(this._description),
isBlock: false,
type: "simple",
storageClassType: "string",
},
display_name: {
value: cdktf.stringToHclTerraform(this._displayName),
isBlock: false,
type: "simple",
storageClassType: "string",
},
freeform_tags: {
value: cdktf.hashMapperHcl(cdktf.stringToHclTerraform)(this._freeformTags),
isBlock: false,
type: "map",
storageClassType: "stringMap",
},
id: {
value: cdktf.stringToHclTerraform(this._id),
isBlock: false,
type: "simple",
storageClassType: "string",
},
parent_configuration_id: {
value: cdktf.stringToHclTerraform(this._parentConfigurationId),
isBlock: false,
type: "simple",
storageClassType: "string",
},
shape_name: {
value: cdktf.stringToHclTerraform(this._shapeName),
isBlock: false,
type: "simple",
storageClassType: "string",
},
init_variables: {
value: mysqlMysqlConfigurationInitVariablesToHclTerraform(this._initVariables.internalValue),
isBlock: true,
type: "list",
storageClassType: "MysqlMysqlConfigurationInitVariablesList",
},
timeouts: {
value: mysqlMysqlConfigurationTimeoutsToHclTerraform(this._timeouts.internalValue),
isBlock: true,
type: "struct",
storageClassType: "MysqlMysqlConfigurationTimeouts",
},
variables: {
value: mysqlMysqlConfigurationVariablesToHclTerraform(this._variables.internalValue),
isBlock: true,
type: "list",
storageClassType: "MysqlMysqlConfigurationVariablesList",
},
};
// remove undefined attributes
return Object.fromEntries(Object.entries(attrs).filter(([_, value]) => value !== undefined && value.value !== undefined));
}
}
exports.MysqlMysqlConfiguration = MysqlMysqlConfiguration;
_d = JSII_RTTI_SYMBOL_1;
MysqlMysqlConfiguration[_d] = { fqn: "rhizo-co-terraform-provider-oci.mysqlMysqlConfiguration.MysqlMysqlConfiguration", version: "1.0.0" };
// =================
// STATIC PROPERTIES
// =================
MysqlMysqlConfiguration.tfResourceType = "oci_mysql_mysql_configuration";
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbXlzcWwtbXlzcWwtY29uZmlndXJhdGlvbi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUlBLCtCQUErQjtBQWtFL0IsU0FBZ0IsK0NBQStDLENBQUMsTUFBbUc7SUFDakssSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUFDLE9BQU8sTUFBTSxDQUFDO0lBQUMsQ0FBQztJQUM1RixJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQ25DLE1BQU0sSUFBSSxLQUFLLENBQUMsb0hBQW9ILENBQUMsQ0FBQztJQUN4SSxDQUFDO0lBQ0QsT0FBTztRQUNMLHNCQUFzQixFQUFFLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxNQUFPLENBQUMsbUJBQW1CLENBQUM7S0FDN0UsQ0FBQTtBQUNILENBQUM7QUFSRCwwR0FRQztBQUdELFNBQWdCLGtEQUFrRCxDQUFDLE1BQW1HO0lBQ3BLLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7UUFBQyxPQUFPLE1BQU0sQ0FBQztJQUFDLENBQUM7SUFDNUYsSUFBSSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUNuQyxNQUFNLElBQUksS0FBSyxDQUFDLG9IQUFvSCxDQUFDLENBQUM7SUFDeEksQ0FBQztJQUNELE1BQU0sS0FBSyxHQUFHO1FBQ1osc0JBQXNCLEVBQUU7WUFDdEIsS0FBSyxFQUFFLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxNQUFPLENBQUMsbUJBQW1CLENBQUM7WUFDOUQsT0FBTyxFQUFFLEtB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QUE4QyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDO2dCQUNwRixPQUFPLEVBQUUsSUFBSTtnQkFDYixJQUFJLEVBQUUsTUFBTTtnQkFDWixnQkFBZ0IsRUFBRSxzQ0FBc0M7YUFDekQ7U0FDRixDQUFDO1FBRUYsOEJBQThCO1FBQzlCLE9BQU8sTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEtBQUssU0FBUyxJQUFJLEtBQUssQ0FBQyxLQUFLLEtBQUssU0FBUyxDQUFFLENBQUMsQ0FBQTtJQUM1SCxDQUFDOztBQTNWSCwwREE0VkM7OztBQTFWQyxvQkFBb0I7QUFDcEIsb0JBQW9CO0FBQ3BCLG9CQUFvQjtBQUNHLHNDQUFjLEdBQUcsK0JBQStCLEFBQWxDLENBQW1DIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL29yYWNsZS9vY2kvNi4xOC4wL2RvY3MvcmVzb3VyY2VzL215c3FsX215c3FsX2NvbmZpZ3VyYXRpb25cbi8vIGdlbmVyYXRlZCBmcm9tIHRlcnJhZm9ybSByZXNvdXJjZSBzY2hlbWFcblxuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgKiBhcyBjZGt0ZiBmcm9tICdjZGt0Zic7XG5cbi8vIENvbmZpZ3VyYXRpb25cblxuZXhwb3J0IGludGVyZmFjZSBNeXNxbE15c3FsQ29uZmlndXJhdGlvbkNvbmZpZyBleHRlbmRzIGNka3RmLlRlcnJhZm9ybU1ldGFBcmd1bWVudHMge1xuICAvKipcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9vcmFjbGUvb2NpLzYuMTguMC9kb2NzL3Jlc291cmNlcy9teXNxbF9teXNxbF9jb25maWd1cmF0aW9uI2NvbXBhcnRtZW50X2lkIE15c3FsTXlzcWxDb25maWd1cmF0aW9uI2NvbXBhcnRtZW50X2lkfVxuICAqL1xuICByZWFkb25seSBjb21wYXJ0bWVudElkOiBzdHJpbmc7XG4gIC8qKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL29yYWNsZS9vY2kvNi4xOC4wL2RvY3MvcmVzb3VyY2VzL215c3FsX215c3FsX2NvbmZpZ3VyYXRpb24jZGVmaW5lZF90YWdzIE15c3FsTXlzcWxDb25maWd1cmF0aW9uI2RlZmluZWRfdGFnc31cbiAgKi9cbiAgcmVhZG9ubHkgZGVmaW5lZFRhZ3M/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuICAvKipcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9vcmFjbGUvb2NpLzYuMTguMC9kb2NzL3Jlc291cmNlcy9teXNxbF9teXNxbF9jb25maWd1cmF0aW9uI2Rlc2NyaXB0aW9uIE15c3FsTXlzcWxDb25maWd1cmF0aW9uI2Rlc2NyaXB0aW9ufVxuICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgLyoqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvb3JhY2xlL29jaS82LjE4LjAvZG9jcy9yZXNvdXJjZXMvbXlzcWxfbXlzcWxfY29uZmlndXJhdGlvbiNkaXNwbGF5X25hbWUgTXlzcWxNeXNxbENvbmZpZ3VyYXRpb24jZGlzcGxheV9uYW1lfVxuICAqL1xuICByZWFkb25seSBkaXNwbGF5TmFtZT86IHN0cmluZztcbiAgLyoqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvb3JhY2xlL29jaS82LjE4LjAvZG9jcy9yZXNvdXJjZXMvbXlzcWxfbXlzcWxfY29uZmlndXJhdGlvbiNmcmVlZm9ybV90YWdzIE15c3FsTXlzcWxDb25maWd1cmF0aW9uI2ZyZWVmb3JtX3RhZ3N9XG4gICovXG4gIHJlYWRvbmx5IGZyZWVmb3JtVGFncz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG4gIC8qKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL29yYWNsZS9vY2kvNi4xOC4wL2RvY3MvcmVzb3VyY2VzL215c3FsX215c3FsX2NvbmZpZ3VyYXRpb24jaWQgTXlzcWxNeXNxbENvbmZpZ3VyYXRpb24jaWR9XG4gICpcbiAgKiBQbGVhc2UgYmUgYXdhcmUgdGhhdCB0aGUgaWQgZmllbGQgaXMgYXV0b21hdGljYWxseSBhZGRlZCB0byBhbGwgcmVzb3VyY2VzIGluIFRlcnJhZm9ybSBwcm92aWRlcnMgdXNpbmcgYSBUZXJyYWZvcm0gcHJvdmlkZXIgU0RLIHZlcnNpb24gYmVsb3cgMi5cbiAgKiBJZiB5b3UgZXhwZXJpZW5jZSBwcm9ibGVtcyBzZXR0aW5nIHRoaXMgdmFsdWUgaXQgbWlnaHQgbm90IGJlIHNldHRhYmxlLiBQbGVhc2UgdGFrZSBhIGxvb2sgYXQgdGhlIHByb3ZpZGVyIGRvY3VtZW50YXRpb24gdG8gZW5zdXJlIGl0IHNob3VsZCBiZSBzZXR0YWJsZS5cbiAgKi9cbiAgcmVhZG9ubHkgaWQ/OiBzdHJpbmc7XG4gIC8qKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL29yYWNsZS9vY2kvNi4xOC4wL2RvY3MvcmVzb3VyY2VzL215c3FsX215c3FsX2NvbmZpZ3VyYXRpb24jcGFyZW50X2NvbmZpZ3VyYXRpb25faWQgTXlzcWxNeXNxbENvbmZpZ3VyYXRpb24jcGFyZW50X2NvbmZpZ3VyYXRpb25faWR9XG4gICovXG4gIHJlYWRvbmx5IHBhcmVudENvbmZpZ3VyYXRpb25JZD86IHN0cmluZztcbiAgLyoqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvb3JhY2xlL29jaS82LjE4LjAvZG9jcy9yZXNvdXJjZXMvbXlzcWxfbXlzcWxfY29uZmlndXJhdGlvbiNzaGFwZV9uYW1lIE15c3FsTXlzcWxDb25maWd1cmF0aW9uI3NoYXBlX25hbWV9XG4gICovXG4gIHJlYWRvbmx5IHNoYXBlTmFtZTogc3RyaW5nO1xuICAvKipcbiAgKiBpbml0X3ZhcmlhYmxlcyBibG9ja1xuICAqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvb3JhY2xlL29jaS82LjE4LjAvZG9jcy9yZXNvdXJjZXMvbXlzcWxfbXlzcWxfY29uZmlndXJhdGlvbiNpbml0X3ZhcmlhYmxlcyBNeXNxbE15c3FsQ29uZmlndXJhdGlvbiNpbml0X3ZhcmlhYmxlc31cbiAgKi9cbiAgcmVhZG9ubHkgaW5pdFZhcmlhYmxlcz86IE15c3FsTXlzcWxDb25maWd1cmF0aW9uSW5pdFZhcmlhYmxlcztcbiAgLyoqXG4gICogdGltZW91dHMgYmxvY2tcbiAgKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL29yYWNsZS9vY2kvNi4xOC4wL2RvY3MvcmVzb3VyY2VzL215c3FsX215c3FsX2NvbmZpZ3VyYXRpb24jdGltZW91dHMgTXlzcWxNeXNxbENvbmZpZ3VyYXRpb24jdGltZW91dHN9XG4gICovXG4gIHJlYWRvbmx5IHRpbWVvdXRzPzogTXlzcWxNeXNxbENvbmZpZ3VyYXRpb25UaW1lb3V0cztcbiAgLyoqXG4gICogdmFyaWFibGVzIGJsb2NrXG4gICpcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9vcmFjbGUvb2NpLzYuMTguMC9kb2NzL3Jlc291cmNlcy9teXNxbF9teXNxbF9jb25maWd1cmF0aW9uI3ZhcmlhYmxlcyBNeXNxbE15c3FsQ29uZmlndXJhdGlvbiN2YXJpYWJsZXN9XG4gICovXG4gIHJlYWRvbmx5IHZhcmlhYmxlcz86IE15c3FsTXlzcWxDb25maWd1cmF0aW9uVmFyaWFibGVzO1xufVxuZXhwb3J0IGludGVyZmFjZSBNeXNxbE15c3FsQ29uZmlndXJhdGlvbkluaXRWYXJpYWJsZXMge1xuICAvKipcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9vcmFjbGUvb2NpLzYuMTguMC9kb2NzL3Jlc291cmNlcy9teXNxbF9teXNxbF9jb25maWd1cmF0aW9uI2xvd2VyX2Nhc2VfdGFibGVfbmFtZXMgTXlzcWxNeXNxbENvbmZpZ3VyYXRpb24jbG93ZXJfY2FzZV90YWJsZV9uYW1lc31cbiAgKi9cbiAgcmVhZG9ubHkgbG93ZXJDYXNlVGFibGVOYW1lcz86IHN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG15c3FsTXlzcWxDb25maWd1cmF0aW9uSW5pdFZhcmlhYmxlc1RvVGVycmFmb3JtKHN0cnVjdD86IE15c3FsTXlzcWxDb25maWd1cmF0aW9uSW5pdFZhcmlhYmxlc091dHB1dFJlZmVyZW5jZSB8IE15c3FsTXlzcWxDb25maWd1cmF0aW9uSW5pdFZhcmlhYmxlcyk6IGFueSB7XG4gIGlmICghY2RrdGYuY2FuSW5zcGVjdChzdHJ1Y3QpIHx8IGNka3RmLlRva2VuaXphdGlvbi5pc1Jlc29sdmFibGUoc3RydWN0KSkgeyByZXR1cm4gc3RydWN0OyB9XG4gIGlmIChjZGt0Zi5pc0NvbXBsZXhFbGVtZW50KHN0cnVjdCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJBIGNvbXBsZXggZWxlbWVudCB3YXMgdXNlZCBhcyBjb25maWd1cmF0aW9uLCB0aGlzIGlzIG5vdCBzdXBwb3J0ZWQ6IGh0dHBzOi8vY2RrLnRmL2NvbXBsZXgtb2JqZWN0LWFzLWNvbmZpZ3VyYXRpb25cIik7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBsb3dlcl9jYXNlX3RhYmxlX25hbWVzOiBjZGt0Zi5zdHJpbmdUb1RlcnJhZm9ybShzdHJ1Y3QhLmxvd2VyQ2FzZVRhYmxlTmFtZXMpLFxuICB9XG59XG5cblxuZXhwb3J0IGZ1bmN0aW9uIG15c3FsTXlzcWxDb25maWd1cmF0aW9uSW5pdFZhcmlhYmxlc1RvSGNsVGVycmFmb3JtKHN0cnVjdD86IE15c3FsTXlzcWxDb25maWd1cmF0aW9uSW5pdFZhcmlhYmxlc091dHB1dFJlZmVyZW5jZSB8IE15c3FsTXlzcWxDb25maWd1cmF0aW9uSW5pdFZhcmlhYmxlcyk6IGFueSB7XG4gIGlmICghY2RrdGYuY2FuSW5zcGVjdChzdHJ1Y3QpIHx8IGNka3RmLlRva2VuaXphdGlvbi5pc1Jlc29sdmFibGUoc3RydWN0KSkgeyByZXR1cm4gc3RydWN0OyB9XG4gIGlmIChjZGt0Zi5pc0NvbXBsZXhFbGVtZW50KHN0cnVjdCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJBIGNvbXBsZXggZWxlbWVudCB3YXMgdXNlZCBhcyBjb25maWd1cmF0aW9uLCB0aGlzIGlzIG5vdCBzdXBwb3J0ZWQ6IGh0dHBzOi8vY2RrLnRmL2NvbXBsZXgtb2JqZWN0LWFzLWNvbmZpZ3VyYXRpb25cIik7XG4gIH1cbiAgY29uc3QgYXR0cnMgPSB7XG4gICAgbG93ZXJfY2FzZV90YWJsZV9uYW1lczoge1xuICAgICAgdmFsdWU6IGNka3RmLnN0cmluZ1RvSGNsVGVycmFmb3JtKHN0cnVjdCEubG93ZXJDYXNlVGFibGVOYW1lcyksXG4gICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcInN0cmluZ1wiLFxuICAgIH0sXG4gIH07XG5cbiAgLy8gcmVtb3ZlIHVuZGVmaW5lZCBhdHRyaWJ1dGVzXG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXMoYXR0cnMpLmZpbHRlcigoW18sIHZhbHVlXSkgPT4gdmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZS52YWx1ZSAhPT0gdW5kZWZpbmVkKSk7XG59XG5cbmV4cG9ydCBjbGFzcyBNeXNxbE15c3FsQ29uZmlndXJhdGlvbkluaXRWYXJpYWJsZXNPdXRwdXRSZWZlcmVuY2UgZXh0ZW5kcyBjZGt0Zi5Db21wbGV4T2JqZWN0IHtcbiAgcHJpdmF0ZSBpc0VtcHR5T2JqZWN0ID0gZmFsc2U7XG5cbiAgLyoqXG4gICogQHBhcmFtIHRlcnJhZm9ybVJlc291cmNlIFRoZSBwYXJlbnQgcmVzb3VyY2VcbiAgKiBAcGFyYW0gdGVycmFmb3JtQXR0cmlidXRlIFRoZSBhdHRyaWJ1dGUgb24gdGhlIHBhcmVudCByZXNvdXJjZSB0aGlzIGNsYXNzIGlzIHJlZmVyZW5jaW5nXG4gICovXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcih0ZXJyYWZvcm1SZXNvdXJjZTogY2RrdGYuSUludGVycG9sYXRpbmdQYXJlbnQsIHRlcnJhZm9ybUF0dHJpYnV0ZTogc3RyaW5nKSB7XG4gICAgc3VwZXIodGVycmFmb3JtUmVzb3VyY2UsIHRlcnJhZm9ybUF0dHJpYnV0ZSwgZmFsc2UsIDApO1xuICB9XG5cbiAgcHVibGljIGdldCBpbnRlcm5hbFZhbHVlKCk6IE15c3FsTXlzcWxDb25maWd1cmF0aW9uSW5pdFZhcmlhYmxlcyB8IHVuZGVmaW5lZCB7XG4gICAgbGV0IGhhc0FueVZhbHVlcyA9IHRoaXMuaXNFbXB0eU9iamVjdDtcbiAgICBjb25zdCBpbnRlcm5hbFZhbHVlUmVzdWx0OiBhbnkgPSB7fTtcbiAgICBpZiAodGhpcy5fbG93ZXJDYXNlVGFibGVOYW1lcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBoYXNBbnlWYWx1ZXMgPSB0cnVlO1xuICAgICAgaW50ZXJuYWxWYWx1ZVJlc3VsdC5sb3dlckNhc2VUYWJsZU5hbWVzID0gdGhpcy5fbG93ZXJDYXNlVGFibGVOYW1lcztcbiAgICB9XG4gICAgcmV0dXJuIGhhc0FueVZhbHVlcyA/IGludGVybmFsVmFsdWVSZXN1bHQgOiB1bmRlZmluZWQ7XG4gIH1cblxuICBwdWJsaWMgc2V0IGludGVybmFsVmFsdWUodmFsdWU6IE15c3FsTXlzcWxDb25maWd1cmF0aW9uSW5pdFZhcmlhYmxlcyB8IHVuZGVmaW5lZCkge1xuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmlzRW1wdHlPYmplY3QgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2xvd2VyQ2FzZVRhYmxlTmFtZXMgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhpcy5pc0VtcHR5T2JqZWN0ID0gT2JqZWN0LmtleXModmFsdWUpLmxlbmd0aCA9PT0gMDtcbiAgICAgIHRoaXMuX2xvd2VyQ2FzZVRhYmxlTmFtZXMgPSB2YWx1ZS5sb3dlckNhc2VUYWJsZU5hbWVzO1xuICAgIH1cbiAgfVxuXG4gIC8vIGxvd2VyX2Nhc2VfdGFibGVfbmFtZXMgLSBjb21wdXRlZDogdHJ1ZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9sb3dlckNhc2VUYWJsZU5hbWVzPzogc3RyaW5nOyBcbiAgcHVibGljIGdldCBsb3dlckNhc2VUYWJsZU5hbWVzKCkge1xuICAgIHJldHVybiB0aGlzLmdldFN0cmluZ0F0dHJpYnV0ZSgnbG93ZXJfY2FzZV90YWJsZV9uYW1lcycpO1xuICB9XG4gIHB1YmxpYyBzZXQgbG93ZXJDYXNlVGFibGVOYW1lcyh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fbG93ZXJDYXNlVGFibGVOYW1lcyA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldExvd2VyQ2FzZVRhYmxlTmFtZXMoKSB7XG4gICAgdGhpcy5fbG93ZXJDYXNlVGFibGVOYW1lcyA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgbG93ZXJDYXNlVGFibGVOYW1lc0lucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9sb3dlckNhc2VUYWJsZU5hbWVzO1xuICB9XG59XG5leHBvcnQgaW50ZXJmYWNlIE15c3FsTXlzcWxDb25maWd1cmF0aW9uVGltZW91dHMge1xuICAvKipcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9vcmFjbGUvb2NpLzYuMTguMC9kb2NzL3Jlc291cmNlcy9teXNxbF9teXNxbF9jb25maWd1cmF0aW9uI2NyZWF0ZSBNeXNxbE15c3FsQ29uZmlndXJhdGlvbiNjcmVhdGV9XG4gICovXG4gIHJlYWRvbmx5IGNyZWF0ZT86IHN0cmluZztcbiAgLyoqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvb3JhY2xlL29jaS82LjE4LjAvZG9jcy9yZXNvdXJjZXMvbXlzcWxfbXlzcWxfY29uZmlndXJhdGlvbiNkZWxldGUgTXlzcWxNeXNxbENvbmZpZ3VyYXRpb24jZGVsZXRlfVxuICAqL1xuICByZWFkb25seSBkZWxldGU/OiBzdHJpbmc7XG4gIC8qKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL29yYWNsZS9vY2kvNi4xOC4wL2RvY3MvcmVzb3VyY2VzL215c3FsX215c3FsX2NvbmZpZ3VyYXRpb24jdXBkYXRlIE15c3FsTXlzcWxDb25maWd1cmF0aW9uI3VwZGF0ZX1cbiAgKi9cbiAgcmVhZG9ubHkgdXBkYXRlPzogc3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbXlzcWxNeXNxbENvbmZpZ3VyYXRpb25UaW1lb3V0c1RvVGVycmFmb3JtKHN0cnVjdD86IE15c3FsTXlzcWxDb25maWd1cmF0aW9uVGltZW91dHMgfCBjZGt0Zi5JUmVzb2x2YWJsZSk6IGFueSB7XG4gIGlmICghY2RrdGYuY2FuSW5zcGVjdChzdHJ1Y3QpIHx8IGNka3RmLlRva2VuaXphdGlvbi5pc1Jlc29sdmFibGUoc3RydWN0KSkgeyByZXR1cm4gc3RydWN0OyB9XG4gIGlmIChjZGt0Zi5pc0NvbXBsZXhFbGVtZW50KHN0cnVjdCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJBIGNvbXBsZXggZWxlbWVudCB3YXMgdXNlZCBhcyBjb25maWd1cmF0aW9uLCB0aGlzIGlzIG5vdCBzdXBwb3J0ZWQ6IGh0dHBzOi8vY2RrLnRmL2NvbXBsZXgtb2JqZWN0LWFzLWNvbmZpZ3VyYXRpb25cIik7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBjcmVhdGU6IGNka3RmLnN0cmluZ1RvVGVycmFmb3JtKHN0cnVjdCEuY3JlYXRlKSxcbiAgICBkZWxldGU6IGNka3RmLnN0cmluZ1RvVGVycmFmb3JtKHN0cnVjdCEuZGVsZXRlKSxcbiAgICB1cGRhdGU6IGNka3RmLnN0cmluZ1RvVGVycmFmb3JtKHN0cnVjdCEudXBkYXRlKSxcbiAgfVxufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiBteXNxbE15c3FsQ29uZmlndXJhdGlvblRpbWVvdXRzVG9IY2xUZXJyYWZvcm0oc3RydWN0PzogTXlzcWxNeXNxbENvbmZpZ3VyYXRpb25UaW1lb3V0cyB8IGNka3RmLklSZXNvbHZhYmxlKTogYW55IHtcbiAgaWYgKCFjZGt0Zi5jYW5JbnNwZWN0KHN0cnVjdCkgfHwgY2RrdGYuVG9rZW5pemF0aW9uLmlzUmVzb2x2YWJsZShzdHJ1Y3QpKSB7IHJldHVybiBzdHJ1Y3Q7IH1cbiAgaWYgKGNka3RmLmlzQ29tcGxleEVsZW1lbnQoc3RydWN0KSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkEgY29tcGxleCBlbGVtZW50IHdhcyB1c2VkIGFzIGNvbmZpZ3VyYXRpb24sIHRoaXMgaXMgbm90IHN1cHBvcnRlZDogaHR0cHM6Ly9jZGsudGYvY29tcGxleC1vYmplY3QtYXMtY29uZmlndXJhdGlvblwiKTtcbiAgfVxuICBjb25zdCBhdHRycyA9IHtcbiAgICBjcmVhdGU6IHtcbiAgICAgIHZhbHVlOiBjZGt0Zi5zdHJpbmdUb0hjbFRlcnJhZm9ybShzdHJ1Y3QhLmNyZWF0ZSksXG4gICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcInN0cmluZ1wiLFxuICAgIH0sXG4gICAgZGVsZXRlOiB7XG4gICAgICB2YWx1ZTogY2RrdGYuc3RyaW5nVG9IY2xUZXJyYWZvcm0oc3RydWN0IS5kZWxldGUpLFxuICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICB0eXBlOiBcInNpbXBsZVwiLFxuICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJzdHJpbmdcIixcbiAgICB9LFxuICAgIHVwZGF0ZToge1xuICAgICAgdmFsdWU6IGNka3RmLnN0cmluZ1RvSGNsVGVycmFmb3JtKHN0cnVjdCEudXBkYXRlKSxcbiAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwic3RyaW5nXCIsXG4gICAgfSxcbiAgfTtcblxuICAvLyByZW1vdmUgdW5kZWZpbmVkIGF0dHJpYnV0ZXNcbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhhdHRycykuZmlsdGVyKChbXywgdmFsdWVdKSA9PiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlLnZhbHVlICE9PSB1bmRlZmluZWQpKTtcbn1cblxuZXhwb3J0IGNsYXNzIE15c3FsTXlzcWxDb25maWd1cmF0aW9uVGltZW91dHNPdXRwdXRSZWZlcmVuY2UgZXh0ZW5kcyBjZGt0Zi5Db21wbGV4T2JqZWN0IHtcbiAgcHJpdmF0ZSBpc0VtcHR5T2JqZWN0ID0gZmFsc2U7XG4gIHByaXZhdGUgcmVzb2x2YWJsZVZhbHVlPzogY2RrdGYuSVJlc29sdmFibGU7XG5cbiAgLyoqXG4gICogQHBhcmFtIHRlcnJhZm9ybVJlc291cmNlIFRoZSBwYXJlbnQgcmVzb3VyY2VcbiAgKiBAcGFyYW0gdGVycmFmb3JtQXR0cmlidXRlIFRoZSBhdHRyaWJ1dGUgb24gdGhlIHBhcmVudCByZXNvdXJjZSB0aGlzIGNsYXNzIGlzIHJlZmVyZW5jaW5nXG4gICovXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcih0ZXJyYWZvcm1SZXNvdXJjZTogY2RrdGYuSUludGVycG9sYXRpbmdQYXJlbnQsIHRlcnJhZm9ybUF0dHJpYnV0ZTogc3RyaW5nKSB7XG4gICAgc3VwZXIodGVycmFmb3JtUmVzb3VyY2UsIHRlcnJhZm9ybUF0dHJpYnV0ZSwgZmFsc2UpO1xuICB9XG5cbiAgcHVibGljIGdldCBpbnRlcm5hbFZhbHVlKCk6IE15c3FsTXlzcWxDb25maWd1cmF0aW9uVGltZW91dHMgfCBjZGt0Zi5JUmVzb2x2YWJsZSB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHRoaXMucmVzb2x2YWJsZVZhbHVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXNvbHZhYmxlVmFsdWU7XG4gICAgfVxuICAgIGxldCBoYXNBbnlWYWx1ZXMgPSB0aGlzLmlzRW1wdHlPYmplY3Q7XG4gICAgY29uc3QgaW50ZXJuYWxWYWx1ZVJlc3VsdDogYW55ID0ge307XG4gICAgaWYgKHRoaXMuX2NyZWF0ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBoYXNBbnlWYWx1ZXMgPSB0cnVlO1xuICAgICAgaW50ZXJuYWxWYWx1ZVJlc3VsdC5jcmVhdGUgPSB0aGlzLl9jcmVhdGU7XG4gICAgfVxuICAgIGlmICh0aGlzLl9kZWxldGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaGFzQW55VmFsdWVzID0gdHJ1ZTtcbiAgICAgIGludGVybmFsVmFsdWVSZXN1bHQuZGVsZXRlID0gdGhpcy5fZGVsZXRlO1xuICAgIH1cbiAgICBpZiAodGhpcy5fdXBkYXRlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGhhc0FueVZhbHVlcyA9IHRydWU7XG4gICAgICBpbnRlcm5hbFZhbHVlUmVzdWx0LnVwZGF0ZSA9IHRoaXMuX3VwZGF0ZTtcbiAgICB9XG4gICAgcmV0dXJuIGhhc0FueVZhbHVlcyA/IGludGVybmFsVmFsdWVSZXN1bHQgOiB1bmRlZmluZWQ7XG4gIH1cblxuICBwdWJsaWMgc2V0IGludGVybmFsVmFsdWUodmFsdWU6IE15c3FsTXlzcWxDb25maWd1cmF0aW9uVGltZW91dHMgfCBjZGt0Zi5JUmVzb2x2YWJsZSB8IHVuZGVmaW5lZCkge1xuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmlzRW1wdHlPYmplY3QgPSBmYWxzZTtcbiAgICAgIHRoaXMucmVzb2x2YWJsZVZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fY3JlYXRlID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fZGVsZXRlID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fdXBkYXRlID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBlbHNlIGlmIChjZGt0Zi5Ub2tlbml6YXRpb24uaXNSZXNvbHZhYmxlKHZhbHVlKSkge1xuICAgICAgdGhpcy5pc0VtcHR5T2JqZWN0ID0gZmFsc2U7XG4gICAgICB0aGlzLnJlc29sdmFibGVWYWx1ZSA9IHZhbHVlO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMuaXNFbXB0eU9iamVjdCA9IE9iamVjdC5rZXlzKHZhbHVlKS5sZW5ndGggPT09IDA7XG4gICAgICB0aGlzLnJlc29sdmFibGVWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX2NyZWF0ZSA9IHZhbHVlLmNyZWF0ZTtcbiAgICAgIHRoaXMuX2RlbGV0ZSA9IHZhbHVlLmRlbGV0ZTtcbiAgICAgIHRoaXMuX3VwZGF0ZSA9IHZhbHVlLnVwZGF0ZTtcbiAgICB9XG4gIH1cblxuICAvLyBjcmVhdGUgLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfY3JlYXRlPzogc3RyaW5nOyBcbiAgcHVibGljIGdldCBjcmVhdGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U3RyaW5nQXR0cmlidXRlKCdjcmVhdGUnKTtcbiAgfVxuICBwdWJsaWMgc2V0IGNyZWF0ZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fY3JlYXRlID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0Q3JlYXRlKCkge1xuICAgIHRoaXMuX2NyZWF0ZSA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgY3JlYXRlSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NyZWF0ZTtcbiAgfVxuXG4gIC8vIGRlbGV0ZSAtIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9kZWxldGU/OiBzdHJpbmc7IFxuICBwdWJsaWMgZ2V0IGRlbGV0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTdHJpbmdBdHRyaWJ1dGUoJ2RlbGV0ZScpO1xuICB9XG4gIHB1YmxpYyBzZXQgZGVsZXRlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9kZWxldGUgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXREZWxldGUoKSB7XG4gICAgdGhpcy5fZGVsZXRlID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBkZWxldGVJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZGVsZXRlO1xuICB9XG5cbiAgLy8gdXBkYXRlIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX3VwZGF0ZT86IHN0cmluZzsgXG4gIHB1YmxpYyBnZXQgdXBkYXRlKCkge1xuICAgIHJldHVybiB0aGlzLmdldFN0cmluZ0F0dHJpYnV0ZSgndXBkYXRlJyk7XG4gIH1cbiAgcHVibGljIHNldCB1cGRhdGUodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX3VwZGF0ZSA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldFVwZGF0ZSgpIHtcbiAgICB0aGlzLl91cGRhdGUgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IHVwZGF0ZUlucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl91cGRhdGU7XG4gIH1cbn1cbmV4cG9ydCBpbnRlcmZhY2UgTXlzcWxNeXNxbENvbmZpZ3VyYXRpb25WYXJpYWJsZXMge1xuICAvKipcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9vcmFjbGUvb2NpLzYuMTguMC9kb2NzL3Jlc291cmNlcy9teXNxbF9teXNxbF9jb25maWd1cmF0aW9uI2F1dG9jb21taXQgTXlzcWxNeXNxbENvbmZpZ3VyYXRpb24jYXV0b2NvbW1pdH1cbiAgKi9cbiAgcmVhZG9ubHkgYXV0b2NvbW1pdD86IGJvb2xlYW4gfCBjZGt0Zi5JUmVzb2x2YWJsZTtcbiAgLyoqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvb3JhY2xlL29jaS82LjE4LjAvZG9jcy9yZXNvdXJjZXMvbXlzcWxfbXlzcWxfY29uZmlndXJhdGlvbiNiaWdfdGFibGVzIE15c3FsTXlzcWxDb25maWd1cmF0aW9uI2JpZ190YWJsZXN9XG4gICovXG4gIHJlYWRvbmx5IGJpZ1RhYmxlcz86IGJvb2xlYW4gfCBjZGt0Zi5JUmVzb2x2YWJsZTtcbiAgLyoqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvb3JhY2xlL29jaS82LjE4LjAvZG9jcy9yZXNvdXJjZXMvbXlzcWxfbXlzcWxfY29uZmlndXJhdGlvbiNiaW5sb2dfZXhwaXJlX2xvZ3Nfc2Vjb25kcyBNeXNxbE15c3FsQ29uZmlndXJhdGlvbiNiaW5sb2dfZXhwaXJlX2xvZ3Nfc2Vjb25kc31cbiAgKi9cbiAgcmVhZG9ubHkgYmlubG9nRXhwaXJlTG9nc1NlY29uZHM/OiBudW1iZXI7XG4gIC8qKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL29yYWNsZS9vY2kvNi4xOC4wL2RvY3MvcmVzb3VyY2VzL215c3FsX215c3FsX2NvbmZpZ3VyYXRpb24jYmlubG9nX3Jvd19tZXRhZGF0YSBNeXNxbE15c3FsQ29uZmlndXJhdGlvbiNiaW5sb2dfcm93X21ldGFkYXRhfVxuICAqL1xuICByZWFkb25seSBiaW5sb2dSb3dNZXRhZGF0YT86IHN0cmluZztcbiAgLyoqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvb3JhY2xlL29jaS82LjE4LjAvZG9jcy9yZXNvdXJjZXMvbXlzcWxfbXlzcWxfY29uZmlndXJhdGlvbiNiaW5sb2dfcm93X3ZhbHVlX29wdGlvbnMgTXlzcWxNeXNxbENvbmZpZ3VyYXRpb24jYmlubG9nX3Jvd192YWx1ZV9vcHRpb25zfVxuICAqL1xuICByZWFkb25seSBiaW5sb2dSb3dWYWx1ZU9wdGlvbnM/OiBzdHJpbmc7XG4gIC8qKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL29yYWNsZS9vY2kvNi4xOC4wL2RvY3MvcmVzb3VyY2VzL215c3FsX215c3FsX2NvbmZpZ3VyYXRpb24jYmlubG9nX3RyYW5zYWN0aW9uX2NvbXByZXNzaW9uIE15c3FsTXlzcWxDb25maWd1cmF0aW9uI2JpbmxvZ190cmFuc2FjdGlvbl9jb21wcmVzc2lvbn1cbiAgKi9cbiAgcmVhZG9ubHkgYmlubG9nVHJhbnNhY3Rpb25Db21wcmVzc2lvbj86IGJvb2xlYW4gfCBjZGt0Zi5JUmVzb2x2YWJsZTtcbiAgLyoqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvb3JhY2xlL29jaS82LjE4LjAvZG9jcy9yZXNvdXJjZXMvbXlzcWxfbXlzcWxfY29uZmlndXJhdGlvbiNjb21wbGV0aW9uX3R5cGUgTXlzcWxNeXNxbENvbmZpZ3VyYXRpb24jY29tcGxldGlvbl90eXBlfVxuICAqL1xuICByZWFkb25seSBjb21wbGV0aW9uVHlwZT86IHN0cmluZztcbiAgLyoqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvb3JhY2xlL29jaS82LjE4LjAvZG9jcy9yZXNvdXJjZXMvbXlzcWxfbXlzcWxfY29uZmlndXJhdGlvbiNjb25uZWN0X3RpbWVvdXQgTXlzcWxNeXNxbENvbmZpZ3VyYXRpb24jY29ubmVjdF90aW1lb3V0fVxuICAqL1xuICByZWFkb25seSBjb25uZWN0VGltZW91dD86IG51bWJlcjtcbiAgLyoqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvb3JhY2xlL29jaS82LjE4LjAvZG9jcy9yZXNvdXJjZXMvbXlzcWxfbXlzcWxfY29uZmlndXJhdGlvbiNjb25uZWN0aW9uX21lbW9yeV9jaHVua19zaXplIE15c3FsTXlzcWxDb25maWd1cmF0aW9uI2Nvbm5lY3Rpb25fbWVtb3J5X2NodW5rX3NpemV9XG4gICovXG4gIHJlYWRvbmx5IGNvbm5lY3Rpb25NZW1vcnlDaHVua1NpemU/OiBudW1iZXI7XG4gIC8qKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL29yYWNsZS9vY2kvNi4xOC4wL2RvY3MvcmVzb3VyY2VzL215c3FsX215c3FsX2NvbmZpZ3VyYXRpb24jY29ubmVjdGlvbl9tZW1vcnlfbGltaXQgTXlzcWxNeXNxbENvbmZpZ3VyYXRpb24jY29ubmVjdGlvbl9tZW1vcnlfbGltaXR9XG4gICovXG4gIHJlYWRvbmx5IGNvbm5lY3Rpb25NZW1vcnlMaW1pdD86IHN0cmluZztcbiAgLyoqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvb3JhY2xlL29jaS82LjE4LjAvZG9jcy9yZXNvdXJjZXMvbXlzcWxfbXlzcWxfY29uZmlndXJhdGlvbiNjdGVfbWF4X3JlY3Vyc2lvbl9kZXB0aCBNeXNxbE15c3FsQ29uZmlndXJhdGlvbiNjdGVfbWF4X3JlY3Vyc2lvbl9kZXB0aH1cbiAgKi9cbiAgcmVhZG9ubHkgY3RlTWF4UmVjdXJzaW9uRGVwdGg/OiBzdHJpbmc7XG4gIC8qKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL29yYWNsZS9vY2kvNi4xOC4wL2RvY3MvcmVzb3VyY2VzL215c3FsX215c3FsX2NvbmZpZ3VyYXRpb24jZGVmYXVsdF9hdXRoZW50aWNhdGlvbl9wbHVnaW4gTXlzcWxNeXNxbENvbmZpZ3VyYXRpb24jZGVmYXVsdF9hdXRoZW50aWNhdGlvbl9wbHVnaW59XG4gICovXG4gIHJlYWRvbmx5IGRlZmF1bHRBdXRoZW50aWNhdGlvblBsdWdpbj86IHN0cmluZztcbiAgLyoqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvb3JhY2xlL29jaS82LjE4LjAvZG9jcy9yZXNvdXJjZXMvbXlzcWxfbXlzcWxfY29uZmlndXJhdGlvbiNmb3JlaWduX2tleV9jaGVja3MgTXlzcWxNeXNxbENvbmZpZ3VyYXRpb24jZm9yZWlnbl9rZXlfY2hlY2tzfVxuICAqL1xuICByZWFkb25seSBmb3JlaWduS2V5Q2hlY2tzPzogYm9vbGVhbiB8IGNka3RmLklSZXNvbHZhYmxlO1xuICAvKipcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9vcmFjbGUvb2NpLzYuMTguMC9kb2NzL3Jlc291cmNlcy9teXNxbF9teXNxbF9jb25maWd1cmF0aW9uI2dlbmVyYXRlZF9yYW5kb21fcGFzc3dvcmRfbGVuZ3RoIE15c3FsTXlzcWxDb25maWd1cmF0aW9uI2dlbmVyYXRlZF9yYW5kb21fcGFzc3dvcmRfbGVuZ3RofVxuICAqL1xuICByZWFkb25seSBnZW5lcmF0ZWRSYW5kb21QYXNzd29yZExlbmd0aD86IG51bWJlcjtcbiAgLyoqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvb3JhY2xlL29jaS82LjE4LjAvZG9jcy9yZXNvdXJjZXMvbXlzcWxfbXlzcWxfY29uZmlndXJhdGlvbiNnbG9iYWxfY29ubmVjdGlvbl9tZW1vcnlfbGltaXQgTXlzcWxNeXNxbENvbmZpZ3VyYXRpb24jZ2xvYmFsX2Nvbm5lY3Rpb25fbWVtb3J5X2xpbWl0fVxuICAqL1xuICByZWFkb25seSBnbG9iYWxDb25uZWN0aW9uTWVtb3J5TGltaXQ/OiBzdHJpbmc7XG4gIC8qKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL29yYWNsZS9vY2kvNi4xOC4wL2RvY3MvcmVzb3VyY2VzL215c3FsX215c3FsX2NvbmZpZ3VyYXRpb24jZ2xvYmFsX2Nvbm5lY3Rpb25fbWVtb3J5X3RyYWNraW5nIE15c3FsTXlzcWxDb25maWd1cmF0aW9uI2dsb2JhbF9jb25uZWN0aW9uX21lbW9yeV90cmFja2luZ31cbiAgKi9cbiAgcmVhZG9ubHkgZ2xvYmFsQ29ubmVjdGlvbk1lbW9yeVRyYWNraW5nPzogYm9vbGVhbiB8IGNka3RmLklSZXNvbHZhYmxlO1xuICAvKipcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9vcmFjbGUvb2NpLzYuMTguMC9kb2NzL3Jlc291cmNlcy9teXNxbF9teXNxbF9jb25maWd1cmF0aW9uI2dyb3VwX3JlcGxpY2F0aW9uX2NvbnNpc3RlbmN5IE15c3FsTXlzcWxDb25maWd1cmF0aW9uI2dyb3VwX3JlcGxpY2F0aW9uX2NvbnNpc3RlbmN5fVxuICAqL1xuICByZWFkb25seSBncm91cFJlcGxpY2F0aW9uQ29uc2lzdGVuY3k/OiBzdHJpbmc7XG4gIC8qKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL29yYWNsZS9vY2kvNi4xOC4wL2RvY3MvcmVzb3VyY2VzL215c3FsX215c3FsX2NvbmZpZ3VyYXRpb24jaW5mb3JtYXRpb25fc2NoZW1hX3N0YXRzX2V4cGlyeSBNeXNxbE15c3FsQ29uZmlndXJhdGlvbiNpbmZvcm1hdGlvbl9zY2hlbWFfc3RhdHNfZXhwaXJ5fVxuICAqL1xuICByZWFkb25seSBpbmZvcm1hdGlvblNjaGVtYVN0YXRzRXhwaXJ5PzogbnVtYmVyO1xuICAvKipcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9vcmFjbGUvb2NpLzYuMTguMC9kb2NzL3Jlc291cmNlcy9teXNxbF9teXNxbF9jb25maWd1cmF0aW9uI2lubm9kYl9idWZmZXJfcG9vbF9kdW1wX3BjdCBNeXNxbE15c3FsQ29uZmlndXJhdGlvbiNpbm5vZGJfYnVmZmVyX3Bvb2xfZHVtcF9wY3R9XG4gICovXG4gIHJlYWRvbmx5IGlubm9kYkJ1ZmZlclBvb2xEdW1wUGN0PzogbnVtYmVyO1xuICAvKipcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9vcmFjbGUvb2NpLzYuMTguMC9kb2NzL3Jlc291cmNlcy9teXNxbF9teXNxbF9jb25maWd1cmF0aW9uI2lubm9kYl9idWZmZXJfcG9vbF9pbnN0YW5jZXMgTXlzcWxNeXNxbENvbmZpZ3VyYXRpb24jaW5ub2RiX2J1ZmZlcl9wb29sX2luc3RhbmNlc31cbiAgKi9cbiAgcmVhZG9ubHkgaW5ub2RiQnVmZmVyUG9vbEluc3RhbmNlcz86IG51bWJlcjtcbiAgLyoqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvb3JhY2xlL29jaS82LjE4LjAvZG9jcy9yZXNvdXJjZXMvbXlzcWxfbXlzcWxfY29uZmlndXJhdGlvbiNpbm5vZGJfYnVmZmVyX3Bvb2xfc2l6ZSBNeXNxbE15c3FsQ29uZmlndXJhdGlvbiNpbm5vZGJfYnVmZmVyX3Bvb2xfc2l6ZX1cbiAgKi9cbiAgcmVhZG9ubHkgaW5ub2RiQnVmZmVyUG9vbFNpemU/OiBzdHJpbmc7XG4gIC8qKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL29yYWNsZS9vY2kvNi4xOC4wL2RvY3MvcmVzb3VyY2VzL215c3FsX215c3FsX2NvbmZpZ3VyYXRpb24jaW5ub2RiX2RkbF9idWZmZXJfc2l6ZSBNeXNxbE15c3FsQ29uZmlndXJhdGlvbiNpbm5vZGJfZGRsX2J1ZmZlcl9zaXplfVxuICAqL1xuICByZWFkb25seSBpbm5vZGJEZGxCdWZmZXJTaXplPzogc3RyaW5nO1xuICAvKipcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9vcmFjbGUvb2NpLzYuMTguMC9kb2NzL3Jlc291cmNlcy9teXNxbF9teXNxbF9jb25maWd1cmF0aW9uI2lubm9kYl9kZGxfdGhyZWFkcyBNeXNxbE15c3FsQ29uZmlndXJhdGlvbiNpbm5vZGJfZGRsX3RocmVhZHN9XG4gICovXG4gIHJlYWRvbmx5IGlubm9kYkRkbFRocmVhZHM/OiBudW1iZXI7XG4gIC8qKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL29yYWNsZS9vY2kvNi4xOC4wL2RvY3MvcmVzb3VyY2VzL215c3FsX215c3FsX2NvbmZpZ3VyYXRpb24jaW5ub2RiX2Z0X2VuYWJsZV9zdG9wd29yZCBNeXNxbE15c3FsQ29uZmlndXJhdGlvbiNpbm5vZGJfZnRfZW5hYmxlX3N0b3B3b3JkfVxuICAqL1xuICByZWFkb25seSBpbm5vZGJGdEVuYWJsZVN0b3B3b3JkPzogYm9vbGVhbiB8IGNka3RmLklSZXNvbHZhYmxlO1xuICAvKipcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9vcmFjbGUvb2NpLzYuMTguMC9kb2NzL3Jlc291cmNlcy9teXNxbF9teXNxbF9jb25maWd1cmF0aW9uI2lubm9kYl9mdF9tYXhfdG9rZW5fc2l6ZSBNeXNxbE15c3FsQ29uZmlndXJhdGlvbiNpbm5vZGJfZnRfbWF4X3Rva2VuX3NpemV9XG4gICovXG4gIHJlYWRvbmx5IGlubm9kYkZ0TWF4VG9rZW5TaXplPzogbnVtYmVyO1xuICAvKipcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9vcmFjbGUvb2NpLzYuMTguMC9kb2NzL3Jlc291cmNlcy9teXNxbF9teXNxbF9jb25maWd1cmF0aW9uI2lubm9kYl9mdF9taW5fdG9rZW5fc2l6ZSBNeXNxbE15c3FsQ29uZmlndXJhdGlvbiNpbm5vZGJfZnRfbWluX3Rva2VuX3NpemV9XG4gICovXG4gIHJlYWRvbmx5IGlubm9kYkZ0TWluVG9rZW5TaXplPzogbnVtYmVyO1xuICAvKipcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9vcmFjbGUvb2NpLzYuMTguMC9kb2NzL3Jlc291cmNlcy9teXNxbF9teXNxbF9jb25maWd1cmF0aW9uI2lubm9kYl9mdF9udW1fd29yZF9vcHRpbWl6ZSBNeXNxbE15c3FsQ29uZmlndXJhdGlvbiNpbm5vZGJfZnRfbnVtX3dvcmRfb3B0aW1pemV9XG4gICovXG4gIHJlYWRvbmx5IGlubm9kYkZ0TnVtV29yZE9wdGltaXplPzogbnVtYmVyO1xuICAvKipcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9vcmFjbGUvb2NpLzYuMTguMC9kb2NzL3Jlc291cmNlcy9teXNxbF9teXNxbF9jb25maWd1cmF0aW9uI2lubm9kYl9mdF9yZXN1bHRfY2FjaGVfbGltaXQgTXlzcWxNeXNxbENvbmZpZ3VyYXRpb24jaW5ub2RiX2Z0X3Jlc3VsdF9jYWNoZV9saW1pdH1cbiAgKi9cbiAgcmVhZG9ubHkgaW5ub2RiRnRSZXN1bHRDYWNoZUxpbWl0Pzogc3RyaW5nO1xuICAvKipcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9vcmFjbGUvb2NpLzYuMTguMC9kb2NzL3Jlc291cmNlcy9teXNxbF9teXNxbF9jb25maWd1cmF0aW9uI2lubm9kYl9mdF9zZXJ2ZXJfc3RvcHdvcmRfdGFibGUgTXlzcWxNeXNxbENvbmZpZ3VyYXRpb24jaW5ub2RiX2Z0X3NlcnZlcl9zdG9wd29yZF90YWJsZX1cbiAgKi9cbiAgcmVhZG9ubHkgaW5ub2RiRnRTZXJ2ZXJTdG9wd29yZFRhYmxlPzogc3RyaW5nO1xuICAvKipcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9vcmFjbGUvb2NpLzYuMTguMC9kb2NzL3Jlc291cmNlcy9teXNxbF9teXNxbF9jb25maWd1cmF0aW9uI2lubm9kYl9sb2NrX3dhaXRfdGltZW91dCBNeXNxbE15c3FsQ29uZmlndXJhdGlvbiNpbm5vZGJfbG9ja193YWl0X3RpbWVvdXR9XG4gICovXG4gIHJlYWRvbmx5IGlubm9kYkxvY2tXYWl0VGltZW91dD86IG51bWJlcjtcbiAgLyoqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvb3JhY2xlL29jaS82LjE4LjAvZG9jcy9yZXNvdXJjZXMvbXlzcWxfbXlzcWxfY29uZmlndXJhdGlvbiNpbm5vZGJfbG9nX3dyaXRlcl90aHJlYWRzIE15c3FsTXlzcWxDb25maWd1cmF0aW9uI2lubm9kYl9sb2dfd3JpdGVyX3RocmVhZHN9XG4gICovXG4gIHJlYWRvbmx5IGlubm9kYkxvZ1dyaXRlclRocmVhZHM/OiBib29sZWFuIHwgY2RrdGYuSVJlc29sdmFibGU7XG4gIC8qKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL29yYWNsZS9vY2kvNi4xOC4wL2RvY3MvcmVzb3VyY2VzL215c3FsX215c3FsX2NvbmZpZ3VyYXRpb24jaW5ub2RiX21heF9wdXJnZV9sYWcgTXlzcWxNeXNxbENvbmZpZ3VyYXRpb24jaW5ub2RiX21heF9wdXJnZV9sYWd9XG4gICovXG4gIHJlYWRvbmx5IGlubm9kYk1heFB1cmdlTGFnPzogc3RyaW5nO1xuICAvKipcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9vcmFjbGUvb2NpLzYuMTguMC9kb2NzL3Jlc291cmNlcy9teXNxbF9teXNxbF9jb25maWd1cmF0aW9uI2lubm9kYl9tYXhfcHVyZ2VfbGFnX2RlbGF5IE15c3FsTXlzcWxDb25maWd1cmF0aW9uI2lubm9kYl9tYXhfcHVyZ2VfbGFnX2RlbGF5fVxuICAqL1xuICByZWFkb25seSBpbm5vZGJNYXhQdXJnZUxhZ0RlbGF5PzogbnVtYmVyO1xuICAvKipcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9vcmFjbGUvb2NpLzYuMTguMC9kb2NzL3Jlc291cmNlcy9teXNxbF9teXNxbF9jb25maWd1cmF0aW9uI2lubm9kYl9zdGF0c19wZXJzaXN0ZW50X3NhbXBsZV9wYWdlcyBNeXNxbE15c3FsQ29uZmlndXJhdGlvbiNpbm5vZGJfc3RhdHNfcGVyc2lzdGVudF9zYW1wbGVfcGFnZXN9XG4gICovXG4gIHJlYWRvbmx5IGlubm9kYlN0YXRzUGVyc2lzdGVudFNhbXBsZVBhZ2VzPzogc3RyaW5nO1xuICAvKipcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9vcmFjbGUvb2NpLzYuMTguMC9kb2NzL3Jlc291cmNlcy9teXNxbF9teXNxbF9jb25maWd1cmF0aW9uI2lubm9kYl9zdGF0c190cmFuc2llbnRfc2FtcGxlX3BhZ2VzIE15c3FsTXlzcWxDb25maWd1cmF0aW9uI2lubm9kYl9zdGF0c190cmFuc2llbnRfc2FtcGxlX3BhZ2VzfVxuICAqL1xuICByZWFkb25seSBpbm5vZGJTdGF0c1RyYW5zaWVudFNhbXBsZVBhZ2VzPzogc3RyaW5nO1xuICAvKipcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9vcmFjbGUvb2NpLzYuMTguMC9kb2NzL3Jlc291cmNlcy9teXNxbF9teXNxbF9jb25maWd1cmF0aW9uI2ludGVyYWN0aXZlX3RpbWVvdXQgTXlzcWxNeXNxbENvbmZpZ3VyYXRpb24jaW50ZXJhY3RpdmVfdGltZW91dH1cbiAgKi9cbiAgcmVhZG9ubHkgaW50ZXJhY3RpdmVUaW1lb3V0PzogbnVtYmVyO1xuICAvKipcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9vcmFjbGUvb2NpLzYuMTguMC9kb2NzL3Jlc291cmNlcy9teXNxbF9teXNxbF9jb25maWd1cmF0aW9uI2xvY2FsX2luZmlsZSBNeXNxbE15c3FsQ29uZmlndXJhdGlvbiNsb2NhbF9pbmZpbGV9XG4gICovXG4gIHJlYWRvbmx5IGxvY2FsSW5maWxlPzogYm9vbGVhbiB8IGNka3RmLklSZXNvbHZhYmxlO1xuICAvKipcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9vcmFjbGUvb2NpLzYuMTguMC9kb2NzL3Jlc291cmNlcy9teXNxbF9teXNxbF9jb25maWd1cmF0aW9uI21hbmRhdG9yeV9yb2xlcyBNeXNxbE15c3FsQ29uZmlndXJhdGlvbiNtYW5kYXRvcnlfcm9sZXN9XG4gICovXG4gIHJlYWRvbmx5IG1hbmRhdG9yeVJvbGVzPzogc3RyaW5nO1xuICAvKipcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9vcmFjbGUvb2NpLzYuMTguMC9kb2NzL3Jlc291cmNlcy9teXNxbF9teXNxbF9jb25maWd1cmF0aW9uI21heF9hbGxvd2VkX3BhY2tldCBNeXNxbE15c3FsQ29uZmlndXJhdGlvbiNtYXhfYWxsb3dlZF9wYWNrZXR9XG4gICovXG4gIHJlYWRvbmx5IG1heEFsbG93ZWRQYWNrZXQ/OiBudW1iZXI7XG4gIC8qKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL29yYWNsZS9vY2kvNi4xOC4wL2RvY3MvcmVzb3VyY2VzL215c3FsX215c3FsX2NvbmZpZ3VyYXRpb24jbWF4X2JpbmxvZ19jYWNoZV9zaXplIE15c3FsTXlzcWxDb25maWd1cmF0aW9uI21heF9iaW5sb2dfY2FjaGVfc2l6ZX1cbiAgKi9cbiAgcmVhZG9ubHkgbWF4QmlubG9nQ2FjaGVTaXplPzogc3RyaW5nO1xuICAvKipcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9vcmFjbGUvb2NpLzYuMTguMC9kb2NzL3Jlc291cmNlcy9teXNxbF9teXNxbF9jb25maWd1cmF0aW9uI21heF9jb25uZWN0X2Vycm9ycyBNeXNxbE15c3FsQ29uZmlndXJhdGlvbiNtYXhfY29ubmVjdF9lcnJvcnN9XG4gICovXG4gIHJlYWRvbmx5IG1heENvbm5lY3RFcnJvcnM/OiBzdHJpbmc7XG4gIC8qKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL29yYWNsZS9vY2kvNi4xOC4wL2RvY3MvcmVzb3VyY2VzL215c3FsX215c3FsX2NvbmZpZ3VyYXRpb24jbWF4X2Nvbm5lY3Rpb25zIE15c3FsTXlzcWxDb25maWd1cmF0aW9uI21heF9jb25uZWN0aW9uc31cbiAgKi9cbiAgcmVhZG9ubHkgbWF4Q29ubmVjdGlvbnM/OiBudW1iZXI7XG4gIC8qKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL29yYWNsZS9vY2kvNi4xOC4wL2RvY3MvcmVzb3VyY2VzL215c3FsX215c3FsX2NvbmZpZ3VyYXRpb24jbWF4X2V4ZWN1dGlvbl90aW1lIE15c3FsTXlzcWxDb25maWd1cmF0aW9uI21heF9leGVjdXRpb25fdGltZX1cbiAgKi9cbiAgcmVhZG9ubHkgbWF4RXhlY3V0aW9uVGltZT86IHN0cmluZztcbiAgLyoqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvb3JhY2xlL29jaS82LjE4LjAvZG9jcy9yZXNvdXJjZXMvbXlzcWxfbXlzcWxfY29uZmlndXJhdGlvbiNtYXhfaGVhcF90YWJsZV9zaXplIE15c3FsTXlzcWxDb25maWd1cmF0aW9uI21heF9oZWFwX3RhYmxlX3NpemV9XG4gICovXG4gIHJlYWRvbmx5IG1heEhlYXBUYWJsZVNpemU/OiBzdHJpbmc7XG4gIC8qKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL29yYWNsZS9vY2kvNi4xOC4wL2RvY3MvcmVzb3VyY2VzL215c3FsX215c3FsX2NvbmZpZ3VyYXRpb24jbWF4X3ByZXBhcmVkX3N0bXRfY291bnQgTXlzcWxNeXNxbENvbmZpZ3VyYXRpb24jbWF4X3ByZXBhcmVkX3N0bXRfY291bnR9XG4gICovXG4gIHJlYWRvbmx5IG1heFByZXBhcmVkU3RtdENvdW50PzogbnVtYmVyO1xuICAvKipcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9vcmFjbGUvb2NpLzYuMTguMC9kb2NzL3Jlc291cmNlcy9teXNxbF9teXNxbF9jb25maWd1cmF0aW9uI215c3FsX2ZpcmV3YWxsX21vZGUgTXlzcWxNeXNxbENvbmZpZ3VyYXRpb24jbXlzcWxfZmlyZXdhbGxfbW9kZX1cbiAgKi9cbiAgcmVhZG9ubHkgbXlzcWxGaXJld2FsbE1vZGU/OiBib29sZWFuIHwgY2RrdGYuSVJlc29sdmFibGU7XG4gIC8qKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL29yYWNsZS9vY2kvNi4xOC4wL2RvY3MvcmVzb3VyY2VzL215c3FsX215c3FsX2NvbmZpZ3VyYXRpb24jbXlzcWxfenN0ZF9kZWZhdWx0X2NvbXByZXNzaW9uX2xldmVsIE15c3FsTXlzcWxDb25maWd1cmF0aW9uI215c3FsX3pzdGRfZGVmYXVsdF9jb21wcmVzc2lvbl9sZXZlbH1cbiAgKi9cbiAgcmVhZG9ubHkgbXlzcWxac3RkRGVmYXVsdENvbXByZXNzaW9uTGV2ZWw/OiBudW1iZXI7XG4gIC8qKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL29yYWNsZS9vY2kvNi4xOC4wL2RvY3MvcmVzb3VyY2VzL215c3FsX215c3FsX2NvbmZpZ3VyYXRpb24jbXlzcWx4X2Nvbm5lY3RfdGltZW91dCBNeXNxbE15c3FsQ29uZmlndXJhdGlvbiNteXNxbHhfY29ubmVjdF90aW1lb3V0fVxuICAqL1xuICByZWFkb25seSBteXNxbHhDb25uZWN0VGltZW91dD86IG51bWJlcjtcbiAgLyoqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvb3JhY2xlL29jaS82LjE4LjAvZG9jcy9yZXNvdXJjZXMvbXlzcWxfbXlzcWxfY29uZmlndXJhdGlvbiNteXNxbHhfZGVmbGF0ZV9kZWZhdWx0X2NvbXByZXNzaW9uX2xldmVsIE15c3FsTXlzcWxDb25maWd1cmF0aW9uI215c3FseF9kZWZsYXRlX2RlZmF1bHRfY29tcHJlc3Npb25fbGV2ZWx9XG4gICovXG4gIHJlYWRvbmx5IG15c3FseERlZmxhdGVEZWZhdWx0Q29tcHJlc3Npb25MZXZlbD86IG51bWJlcjtcbiAgLyoqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvb3JhY2xlL29jaS82LjE4LjAvZG9jcy9yZXNvdXJjZXMvbXlzcWxfbXlzcWxfY29uZmlndXJhdGlvbiNteXNxbHhfZGVmbGF0ZV9tYXhfY2xpZW50X2NvbXByZXNzaW9uX2xldmVsIE15c3FsTXlzcWxDb25maWd1cmF0aW9uI215c3FseF9kZWZsYXRlX21heF9jbGllbnRfY29tcHJlc3Npb25fbGV2ZWx9XG4gICovXG4gIHJlYWRvbmx5IG15c3FseERlZmxhdGVNYXhDbGllbnRDb21wcmVzc2lvbkxldmVsPzogbnVtYmVyO1xuICAvKipcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9vcmFjbGUvb2NpLzYuMTguMC9kb2NzL3Jlc291cmNlcy9teXNxbF9teXNxbF9jb25maWd1cmF0aW9uI215c3FseF9kb2N1bWVudF9pZF91bmlxdWVfcHJlZml4IE15c3FsTXlzcWxDb25maWd1cmF0aW9uI215c3FseF9kb2N1bWVudF9pZF91bmlxdWVfcHJlZml4fVxuICAqL1xuICByZWFkb25seSBteXNxbHhEb2N1bWVudElkVW5pcXVlUHJlZml4PzogbnVtYmVyO1xuICAvKipcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9vcmFjbGUvb2NpLzYuMTguMC9kb2NzL3Jlc291cmNlcy9teXNxbF9teXNxbF9jb25maWd1cmF0aW9uI215c3FseF9lbmFibGVfaGVsbG9fbm90aWNlIE15c3FsTXlzcWxDb25maWd1cmF0aW9uI215c3FseF9lbmFibGVfaGVsbG9fbm90aWNlfVxuICAqL1xuICByZWFkb25seSBteXNxbHhFbmFibGVIZWxsb05vdGljZT86IGJvb2xlYW4gfCBjZGt0Zi5JUmVzb2x2YWJsZTtcbiAgLyoqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvb3JhY2xlL29jaS82LjE4LjAvZG9jcy9yZXNvdXJjZXMvbXlzcWxfbXlzcWxfY29uZmlndXJhdGlvbiNteXNxbHhfaWRsZV93b3JrZXJfdGhyZWFkX3RpbWVvdXQgTXlzcWxNeXNxbENvbmZpZ3VyYXRpb24jbXlzcWx4X2lkbGVfd29ya2VyX3RocmVhZF90aW1lb3V0fVxuICAqL1xuICByZWFkb25seSBteXNxbHhJZGxlV29ya2VyVGhyZWFkVGltZW91dD86IG51bWJlcjtcbiAgLyoqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvb3JhY2xlL29jaS82LjE4LjAvZG9jcy9yZXNvdXJjZXMvbXlzcWxfbXlzcWxfY29uZmlndXJhdGlvbiNteXNxbHhfaW50ZXJhY3RpdmVfdGltZW91dCBNeXNxbE15c3FsQ29uZmlndXJhdGlvbiNteXNxbHhfaW50ZXJhY3RpdmVfdGltZW91dH1cbiAgKi9cbiAgcmVhZG9ubHkgbXlzcWx4SW50ZXJhY3RpdmVUaW1lb3V0PzogbnVtYmVyO1xuICAvKipcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9vcmFjbGUvb2NpLzYuMTguMC9kb2NzL3Jlc291cmNlcy9teXNxbF9teXNxbF9jb25maWd1cmF0aW9uI215c3FseF9sejRkZWZhdWx0X2NvbXByZXNzaW9uX2xldmVsIE15c3FsTXlzcWxDb25maWd1cmF0aW9uI215c3FseF9sejRkZWZhdWx0X2NvbXByZXNzaW9uX2xldmVsfVxuICAqL1xuICByZWFkb25seSBteXNxbHhMejREZWZhdWx0Q29tcHJlc3Npb25MZXZlbD86IG51bWJlcjtcbiAgLyoqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvb3JhY2xlL29jaS82LjE4LjAvZG9jcy9yZXNvdXJjZXMvbXlzcWxfbXlzcWxfY29uZmlndXJhdGlvbiNteXNxbHhfbHo0bWF4X2NsaWVudF9jb21wcmVzc2lvbl9sZXZlbCBNeXNxbE15c3FsQ29uZmlndXJhdGlvbiNteXNxbHhfbHo0bWF4X2NsaWVudF9jb21wcmVzc2lvbl9sZXZlbH1cbiAgKi9cbiAgcmVhZG9ubHkgbXlzcWx4THo0TWF4Q2xpZW50Q29tcHJlc3Npb25MZXZlbD86IG51bWJlcjtcbiAgLyoqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvb3JhY2xlL29jaS82LjE4LjAvZG9jcy9yZXNvdXJjZXMvbXlzcWxfbXlzcWxfY29uZmlndXJhdGlvbiNteXNxbHhfbWF4X2FsbG93ZWRfcGFja2V0IE15c3FsTXlzcWxDb25maWd1cmF0aW9uI215c3FseF9tYXhfYWxsb3dlZF9wYWNrZXR9XG4gICovXG4gIHJlYWRvbmx5IG15c3FseE1heEFsbG93ZWRQYWNrZXQ/OiBudW1iZXI7XG4gIC8qKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL29yYWNsZS9vY2kvNi4xOC4wL2RvY3MvcmVzb3VyY2VzL215c3FsX215c3FsX2NvbmZpZ3VyYXRpb24jbXlzcWx4X21pbl93b3JrZXJfdGhyZWFkcyBNeXNxbE15c3FsQ29uZmlndXJhdGlvbiNteXNxbHhfbWluX3dvcmtlcl90aHJlYWRzfVxuICAqL1xuICByZWFkb25seSBteXNxbHhNaW5Xb3JrZXJUaHJlYWRzPzogbnVtYmVyO1xuICAvKipcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9vcmFjbGUvb2NpLzYuMTguMC9kb2NzL3Jlc291cmNlcy9teXNxbF9teXNxbF9jb25maWd1cmF0aW9uI215c3FseF9yZWFkX3RpbWVvdXQgTXlzcWxNeXNxbENvbmZpZ3VyYXRpb24jbXlzcWx4X3JlYWRfdGltZW91dH1cbiAgKi9cbiAgcmVhZG9ubHkgbXlzcWx4UmVhZFRpbWVvdXQ/OiBudW1iZXI7XG4gIC8qKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL29yYWNsZS9vY2kvNi4xOC4wL2RvY3MvcmVzb3VyY2VzL215c3FsX215c3FsX2NvbmZpZ3VyYXRpb24jbXlzcWx4X3dhaXRfdGltZW91dCBNeXNxbE15c3FsQ29uZmlndXJhdGlvbiNteXNxbHhfd2FpdF90aW1lb3V0fVxuICAqL1xuICByZWFkb25seSBteXNxbHhXYWl0VGltZW91dD86IG51bWJlcjtcbiAgLyoqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvb3JhY2xlL29jaS82LjE4LjAvZG9jcy9yZXNvdXJjZXMvbXlzcWxfbXlzcWxfY29uZmlndXJhdGlvbiNteXNxbHhfd3JpdGVfdGltZW91dCBNeXNxbE15c3FsQ29uZmlndXJhdGlvbiNteXNxbHhfd3JpdGVfdGltZW91dH1cbiAgKi9cbiAgcmVhZG9ubHkgbXlzcWx4V3JpdGVUaW1lb3V0PzogbnVtYmVyO1xuICAvKipcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9vcmFjbGUvb2NpLzYuMTguMC9kb2NzL3Jlc291cmNlcy9teXNxbF9teXNxbF9jb25maWd1cmF0aW9uI215c3FseF96c3RkX2RlZmF1bHRfY29tcHJlc3Npb25fbGV2ZWwgTXlzcWxNeXNxbENvbmZpZ3VyYXRpb24jbXlzcWx4X3pzdGRfZGVmYXVsdF9jb21wcmVzc2lvbl9sZXZlbH1cbiAgKi9cbiAgcmVhZG9ubHkgbXlzcWx4WnN0ZERlZmF1bHRDb21wcmVzc2lvbkxldmVsPzogbnVtYmVyO1xuICAvKipcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9vcmFjbGUvb2NpLzYuMTguMC9kb2NzL3Jlc291cmNlcy9teXNxbF9teXNxbF9jb25maWd1cmF0aW9uI215c3FseF96c3RkX21heF9jbGllbnRfY29tcHJlc3Npb25fbGV2ZWwgTXlzcWxNeXNxbENvbmZpZ3VyYXRpb24jbXlzcWx4X3pzdGRfbWF4X2NsaWVudF9jb21wcmVzc2lvbl9sZXZlbH1cbiAgKi9cbiAgcmVhZG9ubHkgbXlzcWx4WnN0ZE1heENsaWVudENvbXByZXNzaW9uTGV2ZWw/OiBudW1iZXI7XG4gIC8qKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL29yYWNsZS9vY2kvNi4xOC4wL2RvY3MvcmVzb3VyY2VzL215c3FsX215c3FsX2NvbmZpZ3VyYXRpb24jbmV0X3JlYWRfdGltZW91dCBNeXNxbE15c3FsQ29uZmlndXJhdGlvbiNuZXRfcmVhZF90aW1lb3V0fVxuICAqL1xuICByZWFkb25seSBuZXRSZWFkVGltZW91dD86IG51bWJlcjtcbiAgLyoqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvb3JhY2xlL29jaS82LjE4LjAvZG9jcy9yZXNvdXJjZXMvbXlzcWxfbXlzcWxfY29uZmlndXJhdGlvbiNuZXRfd3JpdGVfdGltZW91dCBNeXNxbE15c3FsQ29uZmlndXJhdGlvbiNuZXRfd3JpdGVfdGltZW91dH1cbiAgKi9cbiAgcmVhZG9ubHkgbmV0V3JpdGVUaW1lb3V0PzogbnVtYmVyO1xuICAvKipcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9vcmFjbGUvb2NpLzYuMTguMC9kb2NzL3Jlc291cmNlcy9teXNxbF9teXNxbF9jb25maWd1cmF0aW9uI3BhcnNlcl9tYXhfbWVtX3NpemUgTXlzcWxNeXNxbENvbmZpZ3VyYXRpb24jcGFyc2VyX21heF9tZW1fc2l6ZX1cbiAgKi9cbiAgcmVhZG9ubHkgcGFyc2VyTWF4TWVtU2l6ZT86IHN0cmluZztcbiAgLyoqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvb3JhY2xlL29jaS82LjE4LjAvZG9jcy9yZXNvdXJjZXMvbXlzcWxfbXlzcWxfY29uZmlndXJhdGlvbiNxdWVyeV9hbGxvY19ibG9ja19zaXplIE15c3FsTXlzcWxDb25maWd1cmF0aW9uI3F1ZXJ5X2FsbG9jX2Jsb2NrX3NpemV9XG4gICovXG4gIHJlYWRvbmx5IHF1ZXJ5QWxsb2NCbG9ja1NpemU/OiBzdHJpbmc7XG4gIC8qKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL29yYWNsZS9vY2kvNi4xOC4wL2RvY3MvcmVzb3VyY2VzL215c3FsX215c3FsX2NvbmZpZ3VyYXRpb24jcXVlcnlfcHJlYWxsb2Nfc2l6ZSBNeXNxbE15c3FsQ29uZmlndXJhdGlvbiNxdWVyeV9wcmVhbGxvY19zaXplfVxuICAqL1xuICByZWFkb25seSBxdWVyeVByZWFsbG9jU2l6ZT86IHN0cmluZztcbiAgLyoqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvb3JhY2xlL29jaS82LjE4LjAvZG9jcy9yZXNvdXJjZXMvbXlzcWxfbXlzcWxfY29uZmlndXJhdGlvbiNyZWdleHBfdGltZV9saW1pdCBNeXNxbE15c3FsQ29uZmlndXJhdGlvbiNyZWdleHBfdGltZV9saW1pdH1cbiAgKi9cbiAgcmVhZG9ubHkgcmVnZXhwVGltZUxpbWl0PzogbnVtYmVyO1xuICAvKipcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9vcmFjbGUvb2NpLzYuMTguMC9kb2NzL3Jlc291cmNlcy9teXNxbF9teXNxbF9jb25maWd1cmF0aW9uI3NvcnRfYnVmZmVyX3NpemUgTXlzcWxNeXNxbENvbmZpZ3VyYXRpb24jc29ydF9idWZmZXJfc2l6ZX1cbiAgKi9cbiAgcmVhZG9ubHkgc29ydEJ1ZmZlclNpemU/OiBzdHJpbmc7XG4gIC8qKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL29yYWNsZS9vY2kvNi4xOC4wL2RvY3MvcmVzb3VyY2VzL215c3FsX215c3FsX2NvbmZpZ3VyYXRpb24jc3FsX21vZGUgTXlzcWxNeXNxbENvbmZpZ3VyYXRpb24jc3FsX21vZGV9XG4gICovXG4gIHJlYWRvbmx5IHNxbE1vZGU/OiBzdHJpbmc7XG4gIC8qKlxuICAqIERvY3MgYXQgVGVycmFmb3JtIFJlZ2lzdHJ5OiB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL29yYWNsZS9vY2kvNi4xOC4wL2RvY3MvcmVzb3VyY2VzL215c3FsX215c3FsX2NvbmZpZ3VyYXRpb24jc3FsX3JlcXVpcmVfcHJpbWFyeV9rZXkgTXlzcWxNeXNxbENvbmZpZ3VyYXRpb24jc3FsX3JlcXVpcmVfcHJpbWFyeV9rZXl9XG4gICovXG4gIHJlYWRvbmx5IHNxbFJlcXVpcmVQcmltYXJ5S2V5PzogYm9vbGVhbiB8IGNka3RmLklSZXNvbHZhYmxlO1xuICAvKipcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9vcmFjbGUvb2NpLzYuMTguMC9kb2NzL3Jlc291cmNlcy9teXNxbF9teXNxbF9jb25maWd1cmF0aW9uI3NxbF93YXJuaW5ncyBNeXNxbE15c3FsQ29uZmlndXJhdGlvbiNzcWxfd2FybmluZ3N9XG4gICovXG4gIHJlYWRvbmx5IHNxbFdhcm5pbmdzPzogYm9vbGVhbiB8IGNka3RmLklSZXNvbHZhYmxlO1xuICAvKipcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9vcmFjbGUvb2NpLzYuMTguMC9kb2NzL3Jlc291cmNlcy9teXNxbF9teXNxbF9jb25maWd1cmF0aW9uI3RocmVhZF9wb29sX2RlZGljYXRlZF9saXN0ZW5lcnMgTXlzcWxNeXNxbENvbmZpZ3VyYXRpb24jdGhyZWFkX3Bvb2xfZGVkaWNhdGVkX2xpc3RlbmVyc31cbiAgKi9cbiAgcmVhZG9ubHkgdGhyZWFkUG9vbERlZGljYXRlZExpc3RlbmVycz86IGJvb2xlYW4gfCBjZGt0Zi5JUmVzb2x2YWJsZTtcbiAgLyoqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvb3JhY2xlL29jaS82LjE4LjAvZG9jcy9yZXNvdXJjZXMvbXlzcWxfbXlzcWxfY29uZmlndXJhdGlvbiN0aHJlYWRfcG9vbF9tYXhfdHJhbnNhY3Rpb25zX2xpbWl0IE15c3FsTXlzcWxDb25maWd1cmF0aW9uI3RocmVhZF9wb29sX21heF90cmFuc2FjdGlvbnNfbGltaXR9XG4gICovXG4gIHJlYWRvbmx5IHRocmVhZFBvb2xNYXhUcmFuc2FjdGlvbnNMaW1pdD86IG51bWJlcjtcbiAgLyoqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvb3JhY2xlL29jaS82LjE4LjAvZG9jcy9yZXNvdXJjZXMvbXlzcWxfbXlzcWxfY29uZmlndXJhdGlvbiN0aW1lX3pvbmUgTXlzcWxNeXNxbENvbmZpZ3VyYXRpb24jdGltZV96b25lfVxuICAqL1xuICByZWFkb25seSB0aW1lWm9uZT86IHN0cmluZztcbiAgLyoqXG4gICogRG9jcyBhdCBUZXJyYWZvcm0gUmVnaXN0cnk6IHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvb3JhY2xlL29jaS82LjE4LjAvZG9jcy9yZXNvdXJjZXMvbXlzcWxfbXlzcWxfY29uZmlndXJhdGlvbiN0bXBfdGFibGVfc2l6ZSBNeXNxbE15c3FsQ29uZmlndXJhdGlvbiN0bXBfdGFibGVfc2l6ZX1cbiAgKi9cbiAgcmVhZG9ubHkgdG1wVGFibGVTaXplPzogc3RyaW5nO1xuICAvKipcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9vcmFjbGUvb2NpLzYuMTguMC9kb2NzL3Jlc291cmNlcy9teXNxbF9teXNxbF9jb25maWd1cmF0aW9uI3RyYW5zYWN0aW9uX2lzb2xhdGlvbiBNeXNxbE15c3FsQ29uZmlndXJhdGlvbiN0cmFuc2FjdGlvbl9pc29sYXRpb259XG4gICovXG4gIHJlYWRvbmx5IHRyYW5zYWN0aW9uSXNvbGF0aW9uPzogc3RyaW5nO1xuICAvKipcbiAgKiBEb2NzIGF0IFRlcnJhZm9ybSBSZWdpc3RyeToge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9vcmFjbGUvb2NpLzYuMTguMC9kb2NzL3Jlc291cmNlcy9teXNxbF9teXNxbF9jb25maWd1cmF0aW9uI3dhaXRfdGltZW91dCBNeXNxbE15c3FsQ29uZmlndXJhdGlvbiN3YWl0X3RpbWVvdXR9XG4gICovXG4gIHJlYWRvbmx5IHdhaXRUaW1lb3V0PzogbnVtYmVyO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbXlzcWxNeXNxbENvbmZpZ3VyYXRpb25WYXJpYWJsZXNUb1RlcnJhZm9ybShzdHJ1Y3Q/OiBNeXNxbE15c3FsQ29uZmlndXJhdGlvblZhcmlhYmxlc091dHB1dFJlZmVyZW5jZSB8IE15c3FsTXlzcWxDb25maWd1cmF0aW9uVmFyaWFibGVzKTogYW55IHtcbiAgaWYgKCFjZGt0Zi5jYW5JbnNwZWN0KHN0cnVjdCkgfHwgY2RrdGYuVG9rZW5pemF0aW9uLmlzUmVzb2x2YWJsZShzdHJ1Y3QpKSB7IHJldHVybiBzdHJ1Y3Q7IH1cbiAgaWYgKGNka3RmLmlzQ29tcGxleEVsZW1lbnQoc3RydWN0KSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkEgY29tcGxleCBlbGVtZW50IHdhcyB1c2VkIGFzIGNvbmZpZ3VyYXRpb24sIHRoaXMgaXMgbm90IHN1cHBvcnRlZDogaHR0cHM6Ly9jZGsudGYvY29tcGxleC1vYmplY3QtYXMtY29uZmlndXJhdGlvblwiKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIGF1dG9jb21taXQ6IGNka3RmLmJvb2xlYW5Ub1RlcnJhZm9ybShzdHJ1Y3QhLmF1dG9jb21taXQpLFxuICAgIGJpZ190YWJsZXM6IGNka3RmLmJvb2xlYW5Ub1RlcnJhZm9ybShzdHJ1Y3QhLmJpZ1RhYmxlcyksXG4gICAgYmlubG9nX2V4cGlyZV9sb2dzX3NlY29uZHM6IGNka3RmLm51bWJlclRvVGVycmFmb3JtKHN0cnVjdCEuYmlubG9nRXhwaXJlTG9nc1NlY29uZHMpLFxuICAgIGJpbmxvZ19yb3dfbWV0YWRhdGE6IGNka3RmLnN0cmluZ1RvVGVycmFmb3JtKHN0cnVjdCEuYmlubG9nUm93TWV0YWRhdGEpLFxuICAgIGJpbmxvZ19yb3dfdmFsdWVfb3B0aW9uczogY2RrdGYuc3RyaW5nVG9UZXJyYWZvcm0oc3RydWN0IS5iaW5sb2dSb3dWYWx1ZU9wdGlvbnMpLFxuICAgIGJpbmxvZ190cmFuc2FjdGlvbl9jb21wcmVzc2lvbjogY2RrdGYuYm9vbGVhblRvVGVycmFmb3JtKHN0cnVjdCEuYmlubG9nVHJhbnNhY3Rpb25Db21wcmVzc2lvbiksXG4gICAgY29tcGxldGlvbl90eXBlOiBjZGt0Zi5zdHJpbmdUb1RlcnJhZm9ybShzdHJ1Y3QhLmNvbXBsZXRpb25UeXBlKSxcbiAgICBjb25uZWN0X3RpbWVvdXQ6IGNka3RmLm51bWJlclRvVGVycmFmb3JtKHN0cnVjdCEuY29ubmVjdFRpbWVvdXQpLFxuICAgIGNvbm5lY3Rpb25fbWVtb3J5X2NodW5rX3NpemU6IGNka3RmLm51bWJlclRvVGVycmFmb3JtKHN0cnVjdCEuY29ubmVjdGlvbk1lbW9yeUNodW5rU2l6ZSksXG4gICAgY29ubmVjdGlvbl9tZW1vcnlfbGltaXQ6IGNka3RmLnN0cmluZ1RvVGVycmFmb3JtKHN0cnVjdCEuY29ubmVjdGlvbk1lbW9yeUxpbWl0KSxcbiAgICBjdGVfbWF4X3JlY3Vyc2lvbl9kZXB0aDogY2RrdGYuc3RyaW5nVG9UZXJyYWZvcm0oc3RydWN0IS5jdGVNYXhSZWN1cnNpb25EZXB0aCksXG4gICAgZGVmYXVsdF9hdXRoZW50aWNhdGlvbl9wbHVnaW46IGNka3RmLnN0cmluZ1RvVGVycmFmb3JtKHN0cnVjdCEuZGVmYXVsdEF1dGhlbnRpY2F0aW9uUGx1Z2luKSxcbiAgICBmb3JlaWduX2tleV9jaGVja3M6IGNka3RmLmJvb2xlYW5Ub1RlcnJhZm9ybShzdHJ1Y3QhLmZvcmVpZ25LZXlDaGVja3MpLFxuICAgIGdlbmVyYXRlZF9yYW5kb21fcGFzc3dvcmRfbGVuZ3RoOiBjZGt0Zi5udW1iZXJUb1RlcnJhZm9ybShzdHJ1Y3QhLmdlbmVyYXRlZFJhbmRvbVBhc3N3b3JkTGVuZ3RoKSxcbiAgICBnbG9iYWxfY29ubmVjdGlvbl9tZW1vcnlfbGltaXQ6IGNka3RmLnN0cmluZ1RvVGVycmFmb3JtKHN0cnVjdCEuZ2xvYmFsQ29ubmVjdGlvbk1lbW9yeUxpbWl0KSxcbiAgICBnbG9iYWxfY29ubmVjdGlvbl9tZW1vcnlfdHJhY2tpbmc6IGNka3RmLmJvb2xlYW5Ub1RlcnJhZm9ybShzdHJ1Y3QhLmdsb2JhbENvbm5lY3Rpb25NZW1vcnlUcmFja2luZyksXG4gICAgZ3JvdXBfcmVwbGljYXRpb25fY29uc2lzdGVuY3k6IGNka3RmLnN0cmluZ1RvVGVycmFmb3JtKHN0cnVjdCEuZ3JvdXBSZXBsaWNhdGlvbkNvbnNpc3RlbmN5KSxcbiAgICBpbmZvcm1hdGlvbl9zY2hlbWFfc3RhdHNfZXhwaXJ5OiBjZGt0Zi5udW1iZXJUb1RlcnJhZm9ybShzdHJ1Y3QhLmluZm9ybWF0aW9uU2NoZW1hU3RhdHNFeHBpcnkpLFxuICAgIGlubm9kYl9idWZmZXJfcG9vbF9kdW1wX3BjdDogY2RrdGYubnVtYmVyVG9UZXJyYWZvcm0oc3RydWN0IS5pbm5vZGJCdWZmZXJQb29sRHVtcFBjdCksXG4gICAgaW5ub2RiX2J1ZmZlcl9wb29sX2luc3RhbmNlczogY2RrdGYubnVtYmVyVG9UZXJyYWZvcm0oc3RydWN0IS5pbm5vZGJCdWZmZXJQb29sSW5zdGFuY2VzKSxcbiAgICBpbm5vZGJfYnVmZmVyX3Bvb2xfc2l6ZTogY2RrdGYuc3RyaW5nVG9UZXJyYWZvcm0oc3RydWN0IS5pbm5vZGJCdWZmZXJQb29sU2l6ZSksXG4gICAgaW5ub2RiX2RkbF9idWZmZXJfc2l6ZTogY2RrdGYuc3RyaW5nVG9UZXJyYWZvcm0oc3RydWN0IS5pbm5vZGJEZGxCdWZmZXJTaXplKSxcbiAgICBpbm5vZGJfZGRsX3RocmVhZHM6IGNka3RmLm51bWJlclRvVGVycmFmb3JtKHN0cnVjdCEuaW5ub2RiRGRsVGhyZWFkcyksXG4gICAgaW5ub2RiX2Z0X2VuYWJsZV9zdG9wd29yZDogY2RrdGYuYm9vbGVhblRvVGVycmFmb3JtKHN0cnVjdCEuaW5ub2RiRnRFbmFibGVTdG9wd29yZCksXG4gICAgaW5ub2RiX2Z0X21heF90b2tlbl9zaXplOiBjZGt0Zi5udW1iZXJUb1RlcnJhZm9ybShzdHJ1Y3QhLmlubm9kYkZ0TWF4VG9rZW5TaXplKSxcbiAgICBpbm5vZGJfZnRfbWluX3Rva2VuX3NpemU6IGNka3RmLm51bWJlclRvVGVycmFmb3JtKHN0cnVjdCEuaW5ub2RiRnRNaW5Ub2tlblNpemUpLFxuICAgIGlubm9kYl9mdF9udW1fd29yZF9vcHRpbWl6ZTogY2RrdGYubnVtYmVyVG9UZXJyYWZvcm0oc3RydWN0IS5pbm5vZGJGdE51bVdvcmRPcHRpbWl6ZSksXG4gICAgaW5ub2RiX2Z0X3Jlc3VsdF9jYWNoZV9saW1pdDogY2RrdGYuc3RyaW5nVG9UZXJyYWZvcm0oc3RydWN0IS5pbm5vZGJGdFJlc3VsdENhY2hlTGltaXQpLFxuICAgIGlubm9kYl9mdF9zZXJ2ZXJfc3RvcHdvcmRfdGFibGU6IGNka3RmLnN0cmluZ1RvVGVycmFmb3JtKHN0cnVjdCEuaW5ub2RiRnRTZXJ2ZXJTdG9wd29yZFRhYmxlKSxcbiAgICBpbm5vZGJfbG9ja193YWl0X3RpbWVvdXQ6IGNka3RmLm51bWJlclRvVGVycmFmb3JtKHN0cnVjdCEuaW5ub2RiTG9ja1dhaXRUaW1lb3V0KSxcbiAgICBpbm5vZGJfbG9nX3dyaXRlcl90aHJlYWRzOiBjZGt0Zi5ib29sZWFuVG9UZXJyYWZvcm0oc3RydWN0IS5pbm5vZGJMb2dXcml0ZXJUaHJlYWRzKSxcbiAgICBpbm5vZGJfbWF4X3B1cmdlX2xhZzogY2RrdGYuc3RyaW5nVG9UZXJyYWZvcm0oc3RydWN0IS5pbm5vZGJNYXhQdXJnZUxhZyksXG4gICAgaW5ub2RiX21heF9wdXJnZV9sYWdfZGVsYXk6IGNka3RmLm51bWJlclRvVGVycmFmb3JtKHN0cnVjdCEuaW5ub2RiTWF4UHVyZ2VMYWdEZWxheSksXG4gICAgaW5ub2RiX3N0YXRzX3BlcnNpc3RlbnRfc2FtcGxlX3BhZ2VzOiBjZGt0Zi5zdHJpbmdUb1RlcnJhZm9ybShzdHJ1Y3QhLmlubm9kYlN0YXRzUGVyc2lzdGVudFNhbXBsZVBhZ2VzKSxcbiAgICBpbm5vZGJfc3RhdHNfdHJhbnNpZW50X3NhbXBsZV9wYWdlczogY2RrdGYuc3RyaW5nVG9UZXJyYWZvcm0oc3RydWN0IS5pbm5vZGJTdGF0c1RyYW5zaWVudFNhbXBsZVBhZ2VzKSxcbiAgICBpbnRlcmFjdGl2ZV90aW1lb3V0OiBjZGt0Zi5udW1iZXJUb1RlcnJhZm9ybShzdHJ1Y3QhLmludGVyYWN0aXZlVGltZW91dCksXG4gICAgbG9jYWxfaW5maWxlOiBjZGt0Zi5ib29sZWFuVG9UZXJyYWZvcm0oc3RydWN0IS5sb2NhbEluZmlsZSksXG4gICAgbWFuZGF0b3J5X3JvbGVzOiBjZGt0Zi5zdHJpbmdUb1RlcnJhZm9ybShzdHJ1Y3QhLm1hbmRhdG9yeVJvbGVzKSxcbiAgICBtYXhfYWxsb3dlZF9wYWNrZXQ6IGNka3RmLm51bWJlclRvVGVycmFmb3JtKHN0cnVjdCEubWF4QWxsb3dlZFBhY2tldCksXG4gICAgbWF4X2JpbmxvZ19jYWNoZV9zaXplOiBjZGt0Zi5zdHJpbmdUb1RlcnJhZm9ybShzdHJ1Y3QhLm1heEJpbmxvZ0NhY2hlU2l6ZSksXG4gICAgbWF4X2Nvbm5lY3RfZXJyb3JzOiBjZGt0Zi5zdHJpbmdUb1RlcnJhZm9ybShzdHJ1Y3QhLm1heENvbm5lY3RFcnJvcnMpLFxuICAgIG1heF9jb25uZWN0aW9uczogY2RrdGYubnVtYmVyVG9UZXJyYWZvcm0oc3RydWN0IS5tYXhDb25uZWN0aW9ucyksXG4gICAgbWF4X2V4ZWN1dGlvbl90aW1lOiBjZGt0Zi5zdHJpbmdUb1RlcnJhZm9ybShzdHJ1Y3QhLm1heEV4ZWN1dGlvblRpbWUpLFxuICAgIG1heF9oZWFwX3RhYmxlX3NpemU6IGNka3RmLnN0cmluZ1RvVGVycmFmb3JtKHN0cnVjdCEubWF4SGVhcFRhYmxlU2l6ZSksXG4gICAgbWF4X3ByZXBhcmVkX3N0bXRfY291bnQ6IGNka3RmLm51bWJlclRvVGVycmFmb3JtKHN0cnVjdCEubWF4UHJlcGFyZWRTdG10Q291bnQpLFxuICAgIG15c3FsX2ZpcmV3YWxsX21vZGU6IGNka3RmLmJvb2xlYW5Ub1RlcnJhZm9ybShzdHJ1Y3QhLm15c3FsRmlyZXdhbGxNb2RlKSxcbiAgICBteXNxbF96c3RkX2RlZmF1bHRfY29tcHJlc3Npb25fbGV2ZWw6IGNka3RmLm51bWJlclRvVGVycmFmb3JtKHN0cnVjdCEubXlzcWxac3RkRGVmYXVsdENvbXByZXNzaW9uTGV2ZWwpLFxuICAgIG15c3FseF9jb25uZWN0X3RpbWVvdXQ6IGNka3RmLm51bWJlclRvVGVycmFmb3JtKHN0cnVjdCEubXlzcWx4Q29ubmVjdFRpbWVvdXQpLFxuICAgIG15c3FseF9kZWZsYXRlX2RlZmF1bHRfY29tcHJlc3Npb25fbGV2ZWw6IGNka3RmLm51bWJlclRvVGVycmFmb3JtKHN0cnVjdCEubXlzcWx4RGVmbGF0ZURlZmF1bHRDb21wcmVzc2lvbkxldmVsKSxcbiAgICBteXNxbHhfZGVmbGF0ZV9tYXhfY2xpZW50X2NvbXByZXNzaW9uX2xldmVsOiBjZGt0Zi5udW1iZXJUb1RlcnJhZm9ybShzdHJ1Y3QhLm15c3FseERlZmxhdGVNYXhDbGllbnRDb21wcmVzc2lvbkxldmVsKSxcbiAgICBteXNxbHhfZG9jdW1lbnRfaWRfdW5pcXVlX3ByZWZpeDogY2RrdGYubnVtYmVyVG9UZXJyYWZvcm0oc3RydWN0IS5teXNxbHhEb2N1bWVudElkVW5pcXVlUHJlZml4KSxcbiAgICBteXNxbHhfZW5hYmxlX2hlbGxvX25vdGljZTogY2RrdGYuYm9vbGVhblRvVGVycmFmb3JtKHN0cnVjdCEubXlzcWx4RW5hYmxlSGVsbG9Ob3RpY2UpLFxuICAgIG15c3FseF9pZGxlX3dvcmtlcl90aHJlYWRfdGltZW91dDogY2RrdGYubnVtYmVyVG9UZXJyYWZvcm0oc3RydWN0IS5teXNxbHhJZGxlV29ya2VyVGhyZWFkVGltZW91dCksXG4gICAgbXlzcWx4X2ludGVyYWN0aXZlX3RpbWVvdXQ6IGNka3RmLm51bWJlclRvVGVycmFmb3JtKHN0cnVjdCEubXlzcWx4SW50ZXJhY3RpdmVUaW1lb3V0KSxcbiAgICBteXNxbHhfbHo0ZGVmYXVsdF9jb21wcmVzc2lvbl9sZXZlbDogY2RrdGYubnVtYmVyVG9UZXJyYWZvcm0oc3RydWN0IS5teXNxbHhMejREZWZhdWx0Q29tcHJlc3Npb25MZXZlbCksXG4gICAgbXlzcWx4X2x6NG1heF9jbGllbnRfY29tcHJlc3Npb25fbGV2ZWw6IGNka3RmLm51bWJlclRvVGVycmFmb3JtKHN0cnVjdCEubXlzcWx4THo0TWF4Q2xpZW50Q29tcHJlc3Npb25MZXZlbCksXG4gICAgbXlzcWx4X21heF9hbGxvd2VkX3BhY2tldDogY2RrdGYubnVtYmVyVG9UZXJyYWZvcm0oc3RydWN0IS5teXNxbHhNYXhBbGxvd2VkUGFja2V0KSxcbiAgICBteXNxbHhfbWluX3dvcmtlcl90aHJlYWRzOiBjZGt0Zi5udW1iZXJUb1RlcnJhZm9ybShzdHJ1Y3QhLm15c3FseE1pbldvcmtlclRocmVhZHMpLFxuICAgIG15c3FseF9yZWFkX3RpbWVvdXQ6IGNka3RmLm51bWJlclRvVGVycmFmb3JtKHN0cnVjdCEubXlzcWx4UmVhZFRpbWVvdXQpLFxuICAgIG15c3FseF93YWl0X3RpbWVvdXQ6IGNka3RmLm51bWJlclRvVGVycmFmb3JtKHN0cnVjdCEubXlzcWx4V2FpdFRpbWVvdXQpLFxuICAgIG15c3FseF93cml0ZV90aW1lb3V0OiBjZGt0Zi5udW1iZXJUb1RlcnJhZm9ybShzdHJ1Y3QhLm15c3FseFdyaXRlVGltZW91dCksXG4gICAgbXlzcWx4X3pzdGRfZGVmYXVsdF9jb21wcmVzc2lvbl9sZXZlbDogY2RrdGYubnVtYmVyVG9UZXJyYWZvcm0oc3RydWN0IS5teXNxbHhac3RkRGVmYXVsdENvbXByZXNzaW9uTGV2ZWwpLFxuICAgIG15c3FseF96c3RkX21heF9jbGllbnRfY29tcHJlc3Npb25fbGV2ZWw6IGNka3RmLm51bWJlclRvVGVycmFmb3JtKHN0cnVjdCEubXlzcWx4WnN0ZE1heENsaWVudENvbXByZXNzaW9uTGV2ZWwpLFxuICAgIG5ldF9yZWFkX3RpbWVvdXQ6IGNka3RmLm51bWJlclRvVGVycmFmb3JtKHN0cnVjdCEubmV0UmVhZFRpbWVvdXQpLFxuICAgIG5ldF93cml0ZV90aW1lb3V0OiBjZGt0Zi5udW1iZXJUb1RlcnJhZm9ybShzdHJ1Y3QhLm5ldFdyaXRlVGltZW91dCksXG4gICAgcGFyc2VyX21heF9tZW1fc2l6ZTogY2RrdGYuc3RyaW5nVG9UZXJyYWZvcm0oc3RydWN0IS5wYXJzZXJNYXhNZW1TaXplKSxcbiAgICBxdWVyeV9hbGxvY19ibG9ja19zaXplOiBjZGt0Zi5zdHJpbmdUb1RlcnJhZm9ybShzdHJ1Y3QhLnF1ZXJ5QWxsb2NCbG9ja1NpemUpLFxuICAgIHF1ZXJ5X3ByZWFsbG9jX3NpemU6IGNka3RmLnN0cmluZ1RvVGVycmFmb3JtKHN0cnVjdCEucXVlcnlQcmVhbGxvY1NpemUpLFxuICAgIHJlZ2V4cF90aW1lX2xpbWl0OiBjZGt0Zi5udW1iZXJUb1RlcnJhZm9ybShzdHJ1Y3QhLnJlZ2V4cFRpbWVMaW1pdCksXG4gICAgc29ydF9idWZmZXJfc2l6ZTogY2RrdGYuc3RyaW5nVG9UZXJyYWZvcm0oc3RydWN0IS5zb3J0QnVmZmVyU2l6ZSksXG4gICAgc3FsX21vZGU6IGNka3RmLnN0cmluZ1RvVGVycmFmb3JtKHN0cnVjdCEuc3FsTW9kZSksXG4gICAgc3FsX3JlcXVpcmVfcHJpbWFyeV9rZXk6IGNka3RmLmJvb2xlYW5Ub1RlcnJhZm9ybShzdHJ1Y3QhLnNxbFJlcXVpcmVQcmltYXJ5S2V5KSxcbiAgICBzcWxfd2FybmluZ3M6IGNka3RmLmJvb2xlYW5Ub1RlcnJhZm9ybShzdHJ1Y3QhLnNxbFdhcm5pbmdzKSxcbiAgICB0aHJlYWRfcG9vbF9kZWRpY2F0ZWRfbGlzdGVuZXJzOiBjZGt0Zi5ib29sZWFuVG9UZXJyYWZvcm0oc3RydWN0IS50aHJlYWRQb29sRGVkaWNhdGVkTGlzdGVuZXJzKSxcbiAgICB0aHJlYWRfcG9vbF9tYXhfdHJhbnNhY3Rpb25zX2xpbWl0OiBjZGt0Zi5udW1iZXJUb1RlcnJhZm9ybShzdHJ1Y3QhLnRocmVhZFBvb2xNYXhUcmFuc2FjdGlvbnNMaW1pdCksXG4gICAgdGltZV96b25lOiBjZGt0Zi5zdHJpbmdUb1RlcnJhZm9ybShzdHJ1Y3QhLnRpbWVab25lKSxcbiAgICB0bXBfdGFibGVfc2l6ZTogY2RrdGYuc3RyaW5nVG9UZXJyYWZvcm0oc3RydWN0IS50bXBUYWJsZVNpemUpLFxuICAgIHRyYW5zYWN0aW9uX2lzb2xhdGlvbjogY2RrdGYuc3RyaW5nVG9UZXJyYWZvcm0oc3RydWN0IS50cmFuc2FjdGlvbklzb2xhdGlvbiksXG4gICAgd2FpdF90aW1lb3V0OiBjZGt0Zi5udW1iZXJUb1RlcnJhZm9ybShzdHJ1Y3QhLndhaXRUaW1lb3V0KSxcbiAgfVxufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiBteXNxbE15c3FsQ29uZmlndXJhdGlvblZhcmlhYmxlc1RvSGNsVGVycmFmb3JtKHN0cnVjdD86IE15c3FsTXlzcWxDb25maWd1cmF0aW9uVmFyaWFibGVzT3V0cHV0UmVmZXJlbmNlIHwgTXlzcWxNeXNxbENvbmZpZ3VyYXRpb25WYXJpYWJsZXMpOiBhbnkge1xuICBpZiAoIWNka3RmLmNhbkluc3BlY3Qoc3RydWN0KSB8fCBjZGt0Zi5Ub2tlbml6YXRpb24uaXNSZXNvbHZhYmxlKHN0cnVjdCkpIHsgcmV0dXJuIHN0cnVjdDsgfVxuICBpZiAoY2RrdGYuaXNDb21wbGV4RWxlbWVudChzdHJ1Y3QpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQSBjb21wbGV4IGVsZW1lbnQgd2FzIHVzZWQgYXMgY29uZmlndXJhdGlvbiwgdGhpcyBpcyBub3Qgc3VwcG9ydGVkOiBodHRwczovL2Nkay50Zi9jb21wbGV4LW9iamVjdC1hcy1jb25maWd1cmF0aW9uXCIpO1xuICB9XG4gIGNvbnN0IGF0dHJzID0ge1xuICAgIGF1dG9jb21taXQ6IHtcbiAgICAgIHZhbHVlOiBjZGt0Zi5ib29sZWFuVG9IY2xUZXJyYWZvcm0oc3RydWN0IS5hdXRvY29tbWl0KSxcbiAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwiYm9vbGVhblwiLFxuICAgIH0sXG4gICAgYmlnX3RhYmxlczoge1xuICAgICAgdmFsdWU6IGNka3RmLmJvb2xlYW5Ub0hjbFRlcnJhZm9ybShzdHJ1Y3QhLmJpZ1RhYmxlcyksXG4gICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcImJvb2xlYW5cIixcbiAgICB9LFxuICAgIGJpbmxvZ19leHBpcmVfbG9nc19zZWNvbmRzOiB7XG4gICAgICB2YWx1ZTogY2RrdGYubnVtYmVyVG9IY2xUZXJyYWZvcm0oc3RydWN0IS5iaW5sb2dFeHBpcmVMb2dzU2Vjb25kcyksXG4gICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcIm51bWJlclwiLFxuICAgIH0sXG4gICAgYmlubG9nX3Jvd19tZXRhZGF0YToge1xuICAgICAgdmFsdWU6IGNka3RmLnN0cmluZ1RvSGNsVGVycmFmb3JtKHN0cnVjdCEuYmlubG9nUm93TWV0YWRhdGEpLFxuICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICB0eXBlOiBcInNpbXBsZVwiLFxuICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJzdHJpbmdcIixcbiAgICB9LFxuICAgIGJpbmxvZ19yb3dfdmFsdWVfb3B0aW9uczoge1xuICAgICAgdmFsdWU6IGNka3RmLnN0cmluZ1RvSGNsVGVycmFmb3JtKHN0cnVjdCEuYmlubG9nUm93VmFsdWVPcHRpb25zKSxcbiAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwic3RyaW5nXCIsXG4gICAgfSxcbiAgICBiaW5sb2dfdHJhbnNhY3Rpb25fY29tcHJlc3Npb246IHtcbiAgICAgIHZhbHVlOiBjZGt0Zi5ib29sZWFuVG9IY2xUZXJyYWZvcm0oc3RydWN0IS5iaW5sb2dUcmFuc2FjdGlvbkNvbXByZXNzaW9uKSxcbiAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwiYm9vbGVhblwiLFxuICAgIH0sXG4gICAgY29tcGxldGlvbl90eXBlOiB7XG4gICAgICB2YWx1ZTogY2RrdGYuc3RyaW5nVG9IY2xUZXJyYWZvcm0oc3RydWN0IS5jb21wbGV0aW9uVHlwZSksXG4gICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcInN0cmluZ1wiLFxuICAgIH0sXG4gICAgY29ubmVjdF90aW1lb3V0OiB7XG4gICAgICB2YWx1ZTogY2RrdGYubnVtYmVyVG9IY2xUZXJyYWZvcm0oc3RydWN0IS5jb25uZWN0VGltZW91dCksXG4gICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcIm51bWJlclwiLFxuICAgIH0sXG4gICAgY29ubmVjdGlvbl9tZW1vcnlfY2h1bmtfc2l6ZToge1xuICAgICAgdmFsdWU6IGNka3RmLm51bWJlclRvSGNsVGVycmFmb3JtKHN0cnVjdCEuY29ubmVjdGlvbk1lbW9yeUNodW5rU2l6ZSksXG4gICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcIm51bWJlclwiLFxuICAgIH0sXG4gICAgY29ubmVjdGlvbl9tZW1vcnlfbGltaXQ6IHtcbiAgICAgIHZhbHVlOiBjZGt0Zi5zdHJpbmdUb0hjbFRlcnJhZm9ybShzdHJ1Y3QhLmNvbm5lY3Rpb25NZW1vcnlMaW1pdCksXG4gICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcInN0cmluZ1wiLFxuICAgIH0sXG4gICAgY3RlX21heF9yZWN1cnNpb25fZGVwdGg6IHtcbiAgICAgIHZhbHVlOiBjZGt0Zi5zdHJpbmdUb0hjbFRlcnJhZm9ybShzdHJ1Y3QhLmN0ZU1heFJlY3Vyc2lvbkRlcHRoKSxcbiAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwic3RyaW5nXCIsXG4gICAgfSxcbiAgICBkZWZhdWx0X2F1dGhlbnRpY2F0aW9uX3BsdWdpbjoge1xuICAgICAgdmFsdWU6IGNka3RmLnN0cmluZ1RvSGNsVGVycmFmb3JtKHN0cnVjdCEuZGVmYXVsdEF1dGhlbnRpY2F0aW9uUGx1Z2luKSxcbiAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwic3RyaW5nXCIsXG4gICAgfSxcbiAgICBmb3JlaWduX2tleV9jaGVja3M6IHtcbiAgICAgIHZhbHVlOiBjZGt0Zi5ib29sZWFuVG9IY2xUZXJyYWZvcm0oc3RydWN0IS5mb3JlaWduS2V5Q2hlY2tzKSxcbiAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwiYm9vbGVhblwiLFxuICAgIH0sXG4gICAgZ2VuZXJhdGVkX3JhbmRvbV9wYXNzd29yZF9sZW5ndGg6IHtcbiAgICAgIHZhbHVlOiBjZGt0Zi5udW1iZXJUb0hjbFRlcnJhZm9ybShzdHJ1Y3QhLmdlbmVyYXRlZFJhbmRvbVBhc3N3b3JkTGVuZ3RoKSxcbiAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwibnVtYmVyXCIsXG4gICAgfSxcbiAgICBnbG9iYWxfY29ubmVjdGlvbl9tZW1vcnlfbGltaXQ6IHtcbiAgICAgIHZhbHVlOiBjZGt0Zi5zdHJpbmdUb0hjbFRlcnJhZm9ybShzdHJ1Y3QhLmdsb2JhbENvbm5lY3Rpb25NZW1vcnlMaW1pdCksXG4gICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcInN0cmluZ1wiLFxuICAgIH0sXG4gICAgZ2xvYmFsX2Nvbm5lY3Rpb25fbWVtb3J5X3RyYWNraW5nOiB7XG4gICAgICB2YWx1ZTogY2RrdGYuYm9vbGVhblRvSGNsVGVycmFmb3JtKHN0cnVjdCEuZ2xvYmFsQ29ubmVjdGlvbk1lbW9yeVRyYWNraW5nKSxcbiAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwiYm9vbGVhblwiLFxuICAgIH0sXG4gICAgZ3JvdXBfcmVwbGljYXRpb25fY29uc2lzdGVuY3k6IHtcbiAgICAgIHZhbHVlOiBjZGt0Zi5zdHJpbmdUb0hjbFRlcnJhZm9ybShzdHJ1Y3QhLmdyb3VwUmVwbGljYXRpb25Db25zaXN0ZW5jeSksXG4gICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcInN0cmluZ1wiLFxuICAgIH0sXG4gICAgaW5mb3JtYXRpb25fc2NoZW1hX3N0YXRzX2V4cGlyeToge1xuICAgICAgdmFsdWU6IGNka3RmLm51bWJlclRvSGNsVGVycmFmb3JtKHN0cnVjdCEuaW5mb3JtYXRpb25TY2hlbWFTdGF0c0V4cGlyeSksXG4gICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcIm51bWJlclwiLFxuICAgIH0sXG4gICAgaW5ub2RiX2J1ZmZlcl9wb29sX2R1bXBfcGN0OiB7XG4gICAgICB2YWx1ZTogY2RrdGYubnVtYmVyVG9IY2xUZXJyYWZvcm0oc3RydWN0IS5pbm5vZGJCdWZmZXJQb29sRHVtcFBjdCksXG4gICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcIm51bWJlclwiLFxuICAgIH0sXG4gICAgaW5ub2RiX2J1ZmZlcl9wb29sX2luc3RhbmNlczoge1xuICAgICAgdmFsdWU6IGNka3RmLm51bWJlclRvSGNsVGVycmFmb3JtKHN0cnVjdCEuaW5ub2RiQnVmZmVyUG9vbEluc3RhbmNlcyksXG4gICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcIm51bWJlclwiLFxuICAgIH0sXG4gICAgaW5ub2RiX2J1ZmZlcl9wb29sX3NpemU6IHtcbiAgICAgIHZhbHVlOiBjZGt0Zi5zdHJpbmdUb0hjbFRlcnJhZm9ybShzdHJ1Y3QhLmlubm9kYkJ1ZmZlclBvb2xTaXplKSxcbiAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwic3RyaW5nXCIsXG4gICAgfSxcbiAgICBpbm5vZGJfZGRsX2J1ZmZlcl9zaXplOiB7XG4gICAgICB2YWx1ZTogY2RrdGYuc3RyaW5nVG9IY2xUZXJyYWZvcm0oc3RydWN0IS5pbm5vZGJEZGxCdWZmZXJTaXplKSxcbiAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwic3RyaW5nXCIsXG4gICAgfSxcbiAgICBpbm5vZGJfZGRsX3RocmVhZHM6IHtcbiAgICAgIHZhbHVlOiBjZGt0Zi5udW1iZXJUb0hjbFRlcnJhZm9ybShzdHJ1Y3QhLmlubm9kYkRkbFRocmVhZHMpLFxuICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICB0eXBlOiBcInNpbXBsZVwiLFxuICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJudW1iZXJcIixcbiAgICB9LFxuICAgIGlubm9kYl9mdF9lbmFibGVfc3RvcHdvcmQ6IHtcbiAgICAgIHZhbHVlOiBjZGt0Zi5ib29sZWFuVG9IY2xUZXJyYWZvcm0oc3RydWN0IS5pbm5vZGJGdEVuYWJsZVN0b3B3b3JkKSxcbiAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwiYm9vbGVhblwiLFxuICAgIH0sXG4gICAgaW5ub2RiX2Z0X21heF90b2tlbl9zaXplOiB7XG4gICAgICB2YWx1ZTogY2RrdGYubnVtYmVyVG9IY2xUZXJyYWZvcm0oc3RydWN0IS5pbm5vZGJGdE1heFRva2VuU2l6ZSksXG4gICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcIm51bWJlclwiLFxuICAgIH0sXG4gICAgaW5ub2RiX2Z0X21pbl90b2tlbl9zaXplOiB7XG4gICAgICB2YWx1ZTogY2RrdGYubnVtYmVyVG9IY2xUZXJyYWZvcm0oc3RydWN0IS5pbm5vZGJGdE1pblRva2VuU2l6ZSksXG4gICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcIm51bWJlclwiLFxuICAgIH0sXG4gICAgaW5ub2RiX2Z0X251bV93b3JkX29wdGltaXplOiB7XG4gICAgICB2YWx1ZTogY2RrdGYubnVtYmVyVG9IY2xUZXJyYWZvcm0oc3RydWN0IS5pbm5vZGJGdE51bVdvcmRPcHRpbWl6ZSksXG4gICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcIm51bWJlclwiLFxuICAgIH0sXG4gICAgaW5ub2RiX2Z0X3Jlc3VsdF9jYWNoZV9saW1pdDoge1xuICAgICAgdmFsdWU6IGNka3RmLnN0cmluZ1RvSGNsVGVycmFmb3JtKHN0cnVjdCEuaW5ub2RiRnRSZXN1bHRDYWNoZUxpbWl0KSxcbiAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwic3RyaW5nXCIsXG4gICAgfSxcbiAgICBpbm5vZGJfZnRfc2VydmVyX3N0b3B3b3JkX3RhYmxlOiB7XG4gICAgICB2YWx1ZTogY2RrdGYuc3RyaW5nVG9IY2xUZXJyYWZvcm0oc3RydWN0IS5pbm5vZGJGdFNlcnZlclN0b3B3b3JkVGFibGUpLFxuICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICB0eXBlOiBcInNpbXBsZVwiLFxuICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJzdHJpbmdcIixcbiAgICB9LFxuICAgIGlubm9kYl9sb2NrX3dhaXRfdGltZW91dDoge1xuICAgICAgdmFsdWU6IGNka3RmLm51bWJlclRvSGNsVGVycmFmb3JtKHN0cnVjdCEuaW5ub2RiTG9ja1dhaXRUaW1lb3V0KSxcbiAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwibnVtYmVyXCIsXG4gICAgfSxcbiAgICBpbm5vZGJfbG9nX3dyaXRlcl90aHJlYWRzOiB7XG4gICAgICB2YWx1ZTogY2RrdGYuYm9vbGVhblRvSGNsVGVycmFmb3JtKHN0cnVjdCEuaW5ub2RiTG9nV3JpdGVyVGhyZWFkcyksXG4gICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcImJvb2xlYW5cIixcbiAgICB9LFxuICAgIGlubm9kYl9tYXhfcHVyZ2VfbGFnOiB7XG4gICAgICB2YWx1ZTogY2RrdGYuc3RyaW5nVG9IY2xUZXJyYWZvcm0oc3RydWN0IS5pbm5vZGJNYXhQdXJnZUxhZyksXG4gICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcInN0cmluZ1wiLFxuICAgIH0sXG4gICAgaW5ub2RiX21heF9wdXJnZV9sYWdfZGVsYXk6IHtcbiAgICAgIHZhbHVlOiBjZGt0Zi5udW1iZXJUb0hjbFRlcnJhZm9ybShzdHJ1Y3QhLmlubm9kYk1heFB1cmdlTGFnRGVsYXkpLFxuICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICB0eXBlOiBcInNpbXBsZVwiLFxuICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJudW1iZXJcIixcbiAgICB9LFxuICAgIGlubm9kYl9zdGF0c19wZXJzaXN0ZW50X3NhbXBsZV9wYWdlczoge1xuICAgICAgdmFsdWU6IGNka3RmLnN0cmluZ1RvSGNsVGVycmFmb3JtKHN0cnVjdCEuaW5ub2RiU3RhdHNQZXJzaXN0ZW50U2FtcGxlUGFnZXMpLFxuICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICB0eXBlOiBcInNpbXBsZVwiLFxuICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJzdHJpbmdcIixcbiAgICB9LFxuICAgIGlubm9kYl9zdGF0c190cmFuc2llbnRfc2FtcGxlX3BhZ2VzOiB7XG4gICAgICB2YWx1ZTogY2RrdGYuc3RyaW5nVG9IY2xUZXJyYWZvcm0oc3RydWN0IS5pbm5vZGJTdGF0c1RyYW5zaWVudFNhbXBsZVBhZ2VzKSxcbiAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwic3RyaW5nXCIsXG4gICAgfSxcbiAgICBpbnRlcmFjdGl2ZV90aW1lb3V0OiB7XG4gICAgICB2YWx1ZTogY2RrdGYubnVtYmVyVG9IY2xUZXJyYWZvcm0oc3RydWN0IS5pbnRlcmFjdGl2ZVRpbWVvdXQpLFxuICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICB0eXBlOiBcInNpbXBsZVwiLFxuICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJudW1iZXJcIixcbiAgICB9LFxuICAgIGxvY2FsX2luZmlsZToge1xuICAgICAgdmFsdWU6IGNka3RmLmJvb2xlYW5Ub0hjbFRlcnJhZm9ybShzdHJ1Y3QhLmxvY2FsSW5maWxlKSxcbiAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwiYm9vbGVhblwiLFxuICAgIH0sXG4gICAgbWFuZGF0b3J5X3JvbGVzOiB7XG4gICAgICB2YWx1ZTogY2RrdGYuc3RyaW5nVG9IY2xUZXJyYWZvcm0oc3RydWN0IS5tYW5kYXRvcnlSb2xlcyksXG4gICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcInN0cmluZ1wiLFxuICAgIH0sXG4gICAgbWF4X2FsbG93ZWRfcGFja2V0OiB7XG4gICAgICB2YWx1ZTogY2RrdGYubnVtYmVyVG9IY2xUZXJyYWZvcm0oc3RydWN0IS5tYXhBbGxvd2VkUGFja2V0KSxcbiAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwibnVtYmVyXCIsXG4gICAgfSxcbiAgICBtYXhfYmlubG9nX2NhY2hlX3NpemU6IHtcbiAgICAgIHZhbHVlOiBjZGt0Zi5zdHJpbmdUb0hjbFRlcnJhZm9ybShzdHJ1Y3QhLm1heEJpbmxvZ0NhY2hlU2l6ZSksXG4gICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcInN0cmluZ1wiLFxuICAgIH0sXG4gICAgbWF4X2Nvbm5lY3RfZXJyb3JzOiB7XG4gICAgICB2YWx1ZTogY2RrdGYuc3RyaW5nVG9IY2xUZXJyYWZvcm0oc3RydWN0IS5tYXhDb25uZWN0RXJyb3JzKSxcbiAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwic3RyaW5nXCIsXG4gICAgfSxcbiAgICBtYXhfY29ubmVjdGlvbnM6IHtcbiAgICAgIHZhbHVlOiBjZGt0Zi5udW1iZXJUb0hjbFRlcnJhZm9ybShzdHJ1Y3QhLm1heENvbm5lY3Rpb25zKSxcbiAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwibnVtYmVyXCIsXG4gICAgfSxcbiAgICBtYXhfZXhlY3V0aW9uX3RpbWU6IHtcbiAgICAgIHZhbHVlOiBjZGt0Zi5zdHJpbmdUb0hjbFRlcnJhZm9ybShzdHJ1Y3QhLm1heEV4ZWN1dGlvblRpbWUpLFxuICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICB0eXBlOiBcInNpbXBsZVwiLFxuICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJzdHJpbmdcIixcbiAgICB9LFxuICAgIG1heF9oZWFwX3RhYmxlX3NpemU6IHtcbiAgICAgIHZhbHVlOiBjZGt0Zi5zdHJpbmdUb0hjbFRlcnJhZm9ybShzdHJ1Y3QhLm1heEhlYXBUYWJsZVNpemUpLFxuICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICB0eXBlOiBcInNpbXBsZVwiLFxuICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJzdHJpbmdcIixcbiAgICB9LFxuICAgIG1heF9wcmVwYXJlZF9zdG10X2NvdW50OiB7XG4gICAgICB2YWx1ZTogY2RrdGYubnVtYmVyVG9IY2xUZXJyYWZvcm0oc3RydWN0IS5tYXhQcmVwYXJlZFN0bXRDb3VudCksXG4gICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcIm51bWJlclwiLFxuICAgIH0sXG4gICAgbXlzcWxfZmlyZXdhbGxfbW9kZToge1xuICAgICAgdmFsdWU6IGNka3RmLmJvb2xlYW5Ub0hjbFRlcnJhZm9ybShzdHJ1Y3QhLm15c3FsRmlyZXdhbGxNb2RlKSxcbiAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwiYm9vbGVhblwiLFxuICAgIH0sXG4gICAgbXlzcWxfenN0ZF9kZWZhdWx0X2NvbXByZXNzaW9uX2xldmVsOiB7XG4gICAgICB2YWx1ZTogY2RrdGYubnVtYmVyVG9IY2xUZXJyYWZvcm0oc3RydWN0IS5teXNxbFpzdGREZWZhdWx0Q29tcHJlc3Npb25MZXZlbCksXG4gICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcIm51bWJlclwiLFxuICAgIH0sXG4gICAgbXlzcWx4X2Nvbm5lY3RfdGltZW91dDoge1xuICAgICAgdmFsdWU6IGNka3RmLm51bWJlclRvSGNsVGVycmFmb3JtKHN0cnVjdCEubXlzcWx4Q29ubmVjdFRpbWVvdXQpLFxuICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICB0eXBlOiBcInNpbXBsZVwiLFxuICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJudW1iZXJcIixcbiAgICB9LFxuICAgIG15c3FseF9kZWZsYXRlX2RlZmF1bHRfY29tcHJlc3Npb25fbGV2ZWw6IHtcbiAgICAgIHZhbHVlOiBjZGt0Zi5udW1iZXJUb0hjbFRlcnJhZm9ybShzdHJ1Y3QhLm15c3FseERlZmxhdGVEZWZhdWx0Q29tcHJlc3Npb25MZXZlbCksXG4gICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcIm51bWJlclwiLFxuICAgIH0sXG4gICAgbXlzcWx4X2RlZmxhdGVfbWF4X2NsaWVudF9jb21wcmVzc2lvbl9sZXZlbDoge1xuICAgICAgdmFsdWU6IGNka3RmLm51bWJlclRvSGNsVGVycmFmb3JtKHN0cnVjdCEubXlzcWx4RGVmbGF0ZU1heENsaWVudENvbXByZXNzaW9uTGV2ZWwpLFxuICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICB0eXBlOiBcInNpbXBsZVwiLFxuICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJudW1iZXJcIixcbiAgICB9LFxuICAgIG15c3FseF9kb2N1bWVudF9pZF91bmlxdWVfcHJlZml4OiB7XG4gICAgICB2YWx1ZTogY2RrdGYubnVtYmVyVG9IY2xUZXJyYWZvcm0oc3RydWN0IS5teXNxbHhEb2N1bWVudElkVW5pcXVlUHJlZml4KSxcbiAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwibnVtYmVyXCIsXG4gICAgfSxcbiAgICBteXNxbHhfZW5hYmxlX2hlbGxvX25vdGljZToge1xuICAgICAgdmFsdWU6IGNka3RmLmJvb2xlYW5Ub0hjbFRlcnJhZm9ybShzdHJ1Y3QhLm15c3FseEVuYWJsZUhlbGxvTm90aWNlKSxcbiAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwiYm9vbGVhblwiLFxuICAgIH0sXG4gICAgbXlzcWx4X2lkbGVfd29ya2VyX3RocmVhZF90aW1lb3V0OiB7XG4gICAgICB2YWx1ZTogY2RrdGYubnVtYmVyVG9IY2xUZXJyYWZvcm0oc3RydWN0IS5teXNxbHhJZGxlV29ya2VyVGhyZWFkVGltZW91dCksXG4gICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcIm51bWJlclwiLFxuICAgIH0sXG4gICAgbXlzcWx4X2ludGVyYWN0aXZlX3RpbWVvdXQ6IHtcbiAgICAgIHZhbHVlOiBjZGt0Zi5udW1iZXJUb0hjbFRlcnJhZm9ybShzdHJ1Y3QhLm15c3FseEludGVyYWN0aXZlVGltZW91dCksXG4gICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcIm51bWJlclwiLFxuICAgIH0sXG4gICAgbXlzcWx4X2x6NGRlZmF1bHRfY29tcHJlc3Npb25fbGV2ZWw6IHtcbiAgICAgIHZhbHVlOiBjZGt0Zi5udW1iZXJUb0hjbFRlcnJhZm9ybShzdHJ1Y3QhLm15c3FseEx6NERlZmF1bHRDb21wcmVzc2lvbkxldmVsKSxcbiAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwibnVtYmVyXCIsXG4gICAgfSxcbiAgICBteXNxbHhfbHo0bWF4X2NsaWVudF9jb21wcmVzc2lvbl9sZXZlbDoge1xuICAgICAgdmFsdWU6IGNka3RmLm51bWJlclRvSGNsVGVycmFmb3JtKHN0cnVjdCEubXlzcWx4THo0TWF4Q2xpZW50Q29tcHJlc3Npb25MZXZlbCksXG4gICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcIm51bWJlclwiLFxuICAgIH0sXG4gICAgbXlzcWx4X21heF9hbGxvd2VkX3BhY2tldDoge1xuICAgICAgdmFsdWU6IGNka3RmLm51bWJlclRvSGNsVGVycmFmb3JtKHN0cnVjdCEubXlzcWx4TWF4QWxsb3dlZFBhY2tldCksXG4gICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcIm51bWJlclwiLFxuICAgIH0sXG4gICAgbXlzcWx4X21pbl93b3JrZXJfdGhyZWFkczoge1xuICAgICAgdmFsdWU6IGNka3RmLm51bWJlclRvSGNsVGVycmFmb3JtKHN0cnVjdCEubXlzcWx4TWluV29ya2VyVGhyZWFkcyksXG4gICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcIm51bWJlclwiLFxuICAgIH0sXG4gICAgbXlzcWx4X3JlYWRfdGltZW91dDoge1xuICAgICAgdmFsdWU6IGNka3RmLm51bWJlclRvSGNsVGVycmFmb3JtKHN0cnVjdCEubXlzcWx4UmVhZFRpbWVvdXQpLFxuICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICB0eXBlOiBcInNpbXBsZVwiLFxuICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJudW1iZXJcIixcbiAgICB9LFxuICAgIG15c3FseF93YWl0X3RpbWVvdXQ6IHtcbiAgICAgIHZhbHVlOiBjZGt0Zi5udW1iZXJUb0hjbFRlcnJhZm9ybShzdHJ1Y3QhLm15c3FseFdhaXRUaW1lb3V0KSxcbiAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwibnVtYmVyXCIsXG4gICAgfSxcbiAgICBteXNxbHhfd3JpdGVfdGltZW91dDoge1xuICAgICAgdmFsdWU6IGNka3RmLm51bWJlclRvSGNsVGVycmFmb3JtKHN0cnVjdCEubXlzcWx4V3JpdGVUaW1lb3V0KSxcbiAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwibnVtYmVyXCIsXG4gICAgfSxcbiAgICBteXNxbHhfenN0ZF9kZWZhdWx0X2NvbXByZXNzaW9uX2xldmVsOiB7XG4gICAgICB2YWx1ZTogY2RrdGYubnVtYmVyVG9IY2xUZXJyYWZvcm0oc3RydWN0IS5teXNxbHhac3RkRGVmYXVsdENvbXByZXNzaW9uTGV2ZWwpLFxuICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICB0eXBlOiBcInNpbXBsZVwiLFxuICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJudW1iZXJcIixcbiAgICB9LFxuICAgIG15c3FseF96c3RkX21heF9jbGllbnRfY29tcHJlc3Npb25fbGV2ZWw6IHtcbiAgICAgIHZhbHVlOiBjZGt0Zi5udW1iZXJUb0hjbFRlcnJhZm9ybShzdHJ1Y3QhLm15c3FseFpzdGRNYXhDbGllbnRDb21wcmVzc2lvbkxldmVsKSxcbiAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwibnVtYmVyXCIsXG4gICAgfSxcbiAgICBuZXRfcmVhZF90aW1lb3V0OiB7XG4gICAgICB2YWx1ZTogY2RrdGYubnVtYmVyVG9IY2xUZXJyYWZvcm0oc3RydWN0IS5uZXRSZWFkVGltZW91dCksXG4gICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcIm51bWJlclwiLFxuICAgIH0sXG4gICAgbmV0X3dyaXRlX3RpbWVvdXQ6IHtcbiAgICAgIHZhbHVlOiBjZGt0Zi5udW1iZXJUb0hjbFRlcnJhZm9ybShzdHJ1Y3QhLm5ldFdyaXRlVGltZW91dCksXG4gICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcIm51bWJlclwiLFxuICAgIH0sXG4gICAgcGFyc2VyX21heF9tZW1fc2l6ZToge1xuICAgICAgdmFsdWU6IGNka3RmLnN0cmluZ1RvSGNsVGVycmFmb3JtKHN0cnVjdCEucGFyc2VyTWF4TWVtU2l6ZSksXG4gICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcInN0cmluZ1wiLFxuICAgIH0sXG4gICAgcXVlcnlfYWxsb2NfYmxvY2tfc2l6ZToge1xuICAgICAgdmFsdWU6IGNka3RmLnN0cmluZ1RvSGNsVGVycmFmb3JtKHN0cnVjdCEucXVlcnlBbGxvY0Jsb2NrU2l6ZSksXG4gICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcInN0cmluZ1wiLFxuICAgIH0sXG4gICAgcXVlcnlfcHJlYWxsb2Nfc2l6ZToge1xuICAgICAgdmFsdWU6IGNka3RmLnN0cmluZ1RvSGNsVGVycmFmb3JtKHN0cnVjdCEucXVlcnlQcmVhbGxvY1NpemUpLFxuICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICB0eXBlOiBcInNpbXBsZVwiLFxuICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJzdHJpbmdcIixcbiAgICB9LFxuICAgIHJlZ2V4cF90aW1lX2xpbWl0OiB7XG4gICAgICB2YWx1ZTogY2RrdGYubnVtYmVyVG9IY2xUZXJyYWZvcm0oc3RydWN0IS5yZWdleHBUaW1lTGltaXQpLFxuICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICB0eXBlOiBcInNpbXBsZVwiLFxuICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJudW1iZXJcIixcbiAgICB9LFxuICAgIHNvcnRfYnVmZmVyX3NpemU6IHtcbiAgICAgIHZhbHVlOiBjZGt0Zi5zdHJpbmdUb0hjbFRlcnJhZm9ybShzdHJ1Y3QhLnNvcnRCdWZmZXJTaXplKSxcbiAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwic3RyaW5nXCIsXG4gICAgfSxcbiAgICBzcWxfbW9kZToge1xuICAgICAgdmFsdWU6IGNka3RmLnN0cmluZ1RvSGNsVGVycmFmb3JtKHN0cnVjdCEuc3FsTW9kZSksXG4gICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcInN0cmluZ1wiLFxuICAgIH0sXG4gICAgc3FsX3JlcXVpcmVfcHJpbWFyeV9rZXk6IHtcbiAgICAgIHZhbHVlOiBjZGt0Zi5ib29sZWFuVG9IY2xUZXJyYWZvcm0oc3RydWN0IS5zcWxSZXF1aXJlUHJpbWFyeUtleSksXG4gICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcImJvb2xlYW5cIixcbiAgICB9LFxuICAgIHNxbF93YXJuaW5nczoge1xuICAgICAgdmFsdWU6IGNka3RmLmJvb2xlYW5Ub0hjbFRlcnJhZm9ybShzdHJ1Y3QhLnNxbFdhcm5pbmdzKSxcbiAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwiYm9vbGVhblwiLFxuICAgIH0sXG4gICAgdGhyZWFkX3Bvb2xfZGVkaWNhdGVkX2xpc3RlbmVyczoge1xuICAgICAgdmFsdWU6IGNka3RmLmJvb2xlYW5Ub0hjbFRlcnJhZm9ybShzdHJ1Y3QhLnRocmVhZFBvb2xEZWRpY2F0ZWRMaXN0ZW5lcnMpLFxuICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICB0eXBlOiBcInNpbXBsZVwiLFxuICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJib29sZWFuXCIsXG4gICAgfSxcbiAgICB0aHJlYWRfcG9vbF9tYXhfdHJhbnNhY3Rpb25zX2xpbWl0OiB7XG4gICAgICB2YWx1ZTogY2RrdGYubnVtYmVyVG9IY2xUZXJyYWZvcm0oc3RydWN0IS50aHJlYWRQb29sTWF4VHJhbnNhY3Rpb25zTGltaXQpLFxuICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICB0eXBlOiBcInNpbXBsZVwiLFxuICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJudW1iZXJcIixcbiAgICB9LFxuICAgIHRpbWVfem9uZToge1xuICAgICAgdmFsdWU6IGNka3RmLnN0cmluZ1RvSGNsVGVycmFmb3JtKHN0cnVjdCEudGltZVpvbmUpLFxuICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICB0eXBlOiBcInNpbXBsZVwiLFxuICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJzdHJpbmdcIixcbiAgICB9LFxuICAgIHRtcF90YWJsZV9zaXplOiB7XG4gICAgICB2YWx1ZTogY2RrdGYuc3RyaW5nVG9IY2xUZXJyYWZvcm0oc3RydWN0IS50bXBUYWJsZVNpemUpLFxuICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICB0eXBlOiBcInNpbXBsZVwiLFxuICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJzdHJpbmdcIixcbiAgICB9LFxuICAgIHRyYW5zYWN0aW9uX2lzb2xhdGlvbjoge1xuICAgICAgdmFsdWU6IGNka3RmLnN0cmluZ1RvSGNsVGVycmFmb3JtKHN0cnVjdCEudHJhbnNhY3Rpb25Jc29sYXRpb24pLFxuICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICB0eXBlOiBcInNpbXBsZVwiLFxuICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJzdHJpbmdcIixcbiAgICB9LFxuICAgIHdhaXRfdGltZW91dDoge1xuICAgICAgdmFsdWU6IGNka3RmLm51bWJlclRvSGNsVGVycmFmb3JtKHN0cnVjdCEud2FpdFRpbWVvdXQpLFxuICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICB0eXBlOiBcInNpbXBsZVwiLFxuICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJudW1iZXJcIixcbiAgICB9LFxuICB9O1xuXG4gIC8vIHJlbW92ZSB1bmRlZmluZWQgYXR0cmlidXRlc1xuICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKGF0dHJzKS5maWx0ZXIoKFtfLCB2YWx1ZV0pID0+IHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUudmFsdWUgIT09IHVuZGVmaW5lZCkpO1xufVxuXG5leHBvcnQgY2xhc3MgTXlzcWxNeXNxbENvbmZpZ3VyYXRpb25WYXJpYWJsZXNPdXRwdXRSZWZlcmVuY2UgZXh0ZW5kcyBjZGt0Zi5Db21wbGV4T2JqZWN0IHtcbiAgcHJpdmF0ZSBpc0VtcHR5T2JqZWN0ID0gZmFsc2U7XG5cbiAgLyoqXG4gICogQHBhcmFtIHRlcnJhZm9ybVJlc291cmNlIFRoZSBwYXJlbnQgcmVzb3VyY2VcbiAgKiBAcGFyYW0gdGVycmFmb3JtQXR0cmlidXRlIFRoZSBhdHRyaWJ1dGUgb24gdGhlIHBhcmVudCByZXNvdXJjZSB0aGlzIGNsYXNzIGlzIHJlZmVyZW5jaW5nXG4gICovXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcih0ZXJyYWZvcm1SZXNvdXJjZTogY2RrdGYuSUludGVycG9sYXRpbmdQYXJlbnQsIHRlcnJhZm9ybUF0dHJpYnV0ZTogc3RyaW5nKSB7XG4gICAgc3VwZXIodGVycmFmb3JtUmVzb3VyY2UsIHRlcnJhZm9ybUF0dHJpYnV0ZSwgZmFsc2UsIDApO1xuICB9XG5cbiAgcHVibGljIGdldCBpbnRlcm5hbFZhbHVlKCk6IE15c3FsTXlzcWxDb25maWd1cmF0aW9uVmFyaWFibGVzIHwgdW5kZWZpbmVkIHtcbiAgICBsZXQgaGFzQW55VmFsdWVzID0gdGhpcy5pc0VtcHR5T2JqZWN0O1xuICAgIGNvbnN0IGludGVybmFsVmFsdWVSZXN1bHQ6IGFueSA9IHt9O1xuICAgIGlmICh0aGlzLl9hdXRvY29tbWl0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGhhc0FueVZhbHVlcyA9IHRydWU7XG4gICAgICBpbnRlcm5hbFZhbHVlUmVzdWx0LmF1dG9jb21taXQgPSB0aGlzLl9hdXRvY29tbWl0O1xuICAgIH1cbiAgICBpZiAodGhpcy5fYmlnVGFibGVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGhhc0FueVZhbHVlcyA9IHRydWU7XG4gICAgICBpbnRlcm5hbFZhbHVlUmVzdWx0LmJpZ1RhYmxlcyA9IHRoaXMuX2JpZ1RhYmxlcztcbiAgICB9XG4gICAgaWYgKHRoaXMuX2JpbmxvZ0V4cGlyZUxvZ3NTZWNvbmRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGhhc0FueVZhbHVlcyA9IHRydWU7XG4gICAgICBpbnRlcm5hbFZhbHVlUmVzdWx0LmJpbmxvZ0V4cGlyZUxvZ3NTZWNvbmRzID0gdGhpcy5fYmlubG9nRXhwaXJlTG9nc1NlY29uZHM7XG4gICAgfVxuICAgIGlmICh0aGlzLl9iaW5sb2dSb3dNZXRhZGF0YSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBoYXNBbnlWYWx1ZXMgPSB0cnVlO1xuICAgICAgaW50ZXJuYWxWYWx1ZVJlc3VsdC5iaW5sb2dSb3dNZXRhZGF0YSA9IHRoaXMuX2JpbmxvZ1Jvd01ldGFkYXRhO1xuICAgIH1cbiAgICBpZiAodGhpcy5fYmlubG9nUm93VmFsdWVPcHRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGhhc0FueVZhbHVlcyA9IHRydWU7XG4gICAgICBpbnRlcm5hbFZhbHVlUmVzdWx0LmJpbmxvZ1Jvd1ZhbHVlT3B0aW9ucyA9IHRoaXMuX2JpbmxvZ1Jvd1ZhbHVlT3B0aW9ucztcbiAgICB9XG4gICAgaWYgKHRoaXMuX2JpbmxvZ1RyYW5zYWN0aW9uQ29tcHJlc3Npb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgaGFzQW55VmFsdWVzID0gdHJ1ZTtcbiAgICAgIGludGVybmFsVmFsdWVSZXN1bHQuYmlubG9nVHJhbnNhY3Rpb25Db21wcmVzc2lvbiA9IHRoaXMuX2JpbmxvZ1RyYW5zYWN0aW9uQ29tcHJlc3Npb247XG4gICAgfVxuICAgIGlmICh0aGlzLl9jb21wbGV0aW9uVHlwZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBoYXNBbnlWYWx1ZXMgPSB0cnVlO1xuICAgICAgaW50ZXJuYWxWYWx1ZVJlc3VsdC5jb21wbGV0aW9uVHlwZSA9IHRoaXMuX2NvbXBsZXRpb25UeXBlO1xuICAgIH1cbiAgICBpZiAodGhpcy5fY29ubmVjdFRpbWVvdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaGFzQW55VmFsdWVzID0gdHJ1ZTtcbiAgICAgIGludGVybmFsVmFsdWVSZXN1bHQuY29ubmVjdFRpbWVvdXQgPSB0aGlzLl9jb25uZWN0VGltZW91dDtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2Nvbm5lY3Rpb25NZW1vcnlDaHVua1NpemUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaGFzQW55VmFsdWVzID0gdHJ1ZTtcbiAgICAgIGludGVybmFsVmFsdWVSZXN1bHQuY29ubmVjdGlvbk1lbW9yeUNodW5rU2l6ZSA9IHRoaXMuX2Nvbm5lY3Rpb25NZW1vcnlDaHVua1NpemU7XG4gICAgfVxuICAgIGlmICh0aGlzLl9jb25uZWN0aW9uTWVtb3J5TGltaXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaGFzQW55VmFsdWVzID0gdHJ1ZTtcbiAgICAgIGludGVybmFsVmFsdWVSZXN1bHQuY29ubmVjdGlvbk1lbW9yeUxpbWl0ID0gdGhpcy5fY29ubmVjdGlvbk1lbW9yeUxpbWl0O1xuICAgIH1cbiAgICBpZiAodGhpcy5fY3RlTWF4UmVjdXJzaW9uRGVwdGggIT09IHVuZGVmaW5lZCkge1xuICAgICAgaGFzQW55VmFsdWVzID0gdHJ1ZTtcbiAgICAgIGludGVybmFsVmFsdWVSZXN1bHQuY3RlTWF4UmVjdXJzaW9uRGVwdGggPSB0aGlzLl9jdGVNYXhSZWN1cnNpb25EZXB0aDtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2RlZmF1bHRBdXRoZW50aWNhdGlvblBsdWdpbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBoYXNBbnlWYWx1ZXMgPSB0cnVlO1xuICAgICAgaW50ZXJuYWxWYWx1ZVJlc3VsdC5kZWZhdWx0QXV0aGVudGljYXRpb25QbHVnaW4gPSB0aGlzLl9kZWZhdWx0QXV0aGVudGljYXRpb25QbHVnaW47XG4gICAgfVxuICAgIGlmICh0aGlzLl9mb3JlaWduS2V5Q2hlY2tzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGhhc0FueVZhbHVlcyA9IHRydWU7XG4gICAgICBpbnRlcm5hbFZhbHVlUmVzdWx0LmZvcmVpZ25LZXlDaGVja3MgPSB0aGlzLl9mb3JlaWduS2V5Q2hlY2tzO1xuICAgIH1cbiAgICBpZiAodGhpcy5fZ2VuZXJhdGVkUmFuZG9tUGFzc3dvcmRMZW5ndGggIT09IHVuZGVmaW5lZCkge1xuICAgICAgaGFzQW55VmFsdWVzID0gdHJ1ZTtcbiAgICAgIGludGVybmFsVmFsdWVSZXN1bHQuZ2VuZXJhdGVkUmFuZG9tUGFzc3dvcmRMZW5ndGggPSB0aGlzLl9nZW5lcmF0ZWRSYW5kb21QYXNzd29yZExlbmd0aDtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2dsb2JhbENvbm5lY3Rpb25NZW1vcnlMaW1pdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBoYXNBbnlWYWx1ZXMgPSB0cnVlO1xuICAgICAgaW50ZXJuYWxWYWx1ZVJlc3VsdC5nbG9iYWxDb25uZWN0aW9uTWVtb3J5TGltaXQgPSB0aGlzLl9nbG9iYWxDb25uZWN0aW9uTWVtb3J5TGltaXQ7XG4gICAgfVxuICAgIGlmICh0aGlzLl9nbG9iYWxDb25uZWN0aW9uTWVtb3J5VHJhY2tpbmcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaGFzQW55VmFsdWVzID0gdHJ1ZTtcbiAgICAgIGludGVybmFsVmFsdWVSZXN1bHQuZ2xvYmFsQ29ubmVjdGlvbk1lbW9yeVRyYWNraW5nID0gdGhpcy5fZ2xvYmFsQ29ubmVjdGlvbk1lbW9yeVRyYWNraW5nO1xuICAgIH1cbiAgICBpZiAodGhpcy5fZ3JvdXBSZXBsaWNhdGlvbkNvbnNpc3RlbmN5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGhhc0FueVZhbHVlcyA9IHRydWU7XG4gICAgICBpbnRlcm5hbFZhbHVlUmVzdWx0Lmdyb3VwUmVwbGljYXRpb25Db25zaXN0ZW5jeSA9IHRoaXMuX2dyb3VwUmVwbGljYXRpb25Db25zaXN0ZW5jeTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2luZm9ybWF0aW9uU2NoZW1hU3RhdHNFeHBpcnkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaGFzQW55VmFsdWVzID0gdHJ1ZTtcbiAgICAgIGludGVybmFsVmFsdWVSZXN1bHQuaW5mb3JtYXRpb25TY2hlbWFTdGF0c0V4cGlyeSA9IHRoaXMuX2luZm9ybWF0aW9uU2NoZW1hU3RhdHNFeHBpcnk7XG4gICAgfVxuICAgIGlmICh0aGlzLl9pbm5vZGJCdWZmZXJQb29sRHVtcFBjdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBoYXNBbnlWYWx1ZXMgPSB0cnVlO1xuICAgICAgaW50ZXJuYWxWYWx1ZVJlc3VsdC5pbm5vZGJCdWZmZXJQb29sRHVtcFBjdCA9IHRoaXMuX2lubm9kYkJ1ZmZlclBvb2xEdW1wUGN0O1xuICAgIH1cbiAgICBpZiAodGhpcy5faW5ub2RiQnVmZmVyUG9vbEluc3RhbmNlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBoYXNBbnlWYWx1ZXMgPSB0cnVlO1xuICAgICAgaW50ZXJuYWxWYWx1ZVJlc3VsdC5pbm5vZGJCdWZmZXJQb29sSW5zdGFuY2VzID0gdGhpcy5faW5ub2RiQnVmZmVyUG9vbEluc3RhbmNlcztcbiAgICB9XG4gICAgaWYgKHRoaXMuX2lubm9kYkJ1ZmZlclBvb2xTaXplICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGhhc0FueVZhbHVlcyA9IHRydWU7XG4gICAgICBpbnRlcm5hbFZhbHVlUmVzdWx0Lmlubm9kYkJ1ZmZlclBvb2xTaXplID0gdGhpcy5faW5ub2RiQnVmZmVyUG9vbFNpemU7XG4gICAgfVxuICAgIGlmICh0aGlzLl9pbm5vZGJEZGxCdWZmZXJTaXplICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGhhc0FueVZhbHVlcyA9IHRydWU7XG4gICAgICBpbnRlcm5hbFZhbHVlUmVzdWx0Lmlubm9kYkRkbEJ1ZmZlclNpemUgPSB0aGlzLl9pbm5vZGJEZGxCdWZmZXJTaXplO1xuICAgIH1cbiAgICBpZiAodGhpcy5faW5ub2RiRGRsVGhyZWFkcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBoYXNBbnlWYWx1ZXMgPSB0cnVlO1xuICAgICAgaW50ZXJuYWxWYWx1ZVJlc3VsdC5pbm5vZGJEZGxUaHJlYWRzID0gdGhpcy5faW5ub2RiRGRsVGhyZWFkcztcbiAgICB9XG4gICAgaWYgKHRoaXMuX2lubm9kYkZ0RW5hYmxlU3RvcHdvcmQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaGFzQW55VmFsdWVzID0gdHJ1ZTtcbiAgICAgIGludGVybmFsVmFsdWVSZXN1bHQuaW5ub2RiRnRFbmFibGVTdG9wd29yZCA9IHRoaXMuX2lubm9kYkZ0RW5hYmxlU3RvcHdvcmQ7XG4gICAgfVxuICAgIGlmICh0aGlzLl9pbm5vZGJGdE1heFRva2VuU2l6ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBoYXNBbnlWYWx1ZXMgPSB0cnVlO1xuICAgICAgaW50ZXJuYWxWYWx1ZVJlc3VsdC5pbm5vZGJGdE1heFRva2VuU2l6ZSA9IHRoaXMuX2lubm9kYkZ0TWF4VG9rZW5TaXplO1xuICAgIH1cbiAgICBpZiAodGhpcy5faW5ub2RiRnRNaW5Ub2tlblNpemUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaGFzQW55VmFsdWVzID0gdHJ1ZTtcbiAgICAgIGludGVybmFsVmFsdWVSZXN1bHQuaW5ub2RiRnRNaW5Ub2tlblNpemUgPSB0aGlzLl9pbm5vZGJGdE1pblRva2VuU2l6ZTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2lubm9kYkZ0TnVtV29yZE9wdGltaXplICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGhhc0FueVZhbHVlcyA9IHRydWU7XG4gICAgICBpbnRlcm5hbFZhbHVlUmVzdWx0Lmlubm9kYkZ0TnVtV29yZE9wdGltaXplID0gdGhpcy5faW5ub2RiRnROdW1Xb3JkT3B0aW1pemU7XG4gICAgfVxuICAgIGlmICh0aGlzLl9pbm5vZGJGdFJlc3VsdENhY2hlTGltaXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaGFzQW55VmFsdWVzID0gdHJ1ZTtcbiAgICAgIGludGVybmFsVmFsdWVSZXN1bHQuaW5ub2RiRnRSZXN1bHRDYWNoZUxpbWl0ID0gdGhpcy5faW5ub2RiRnRSZXN1bHRDYWNoZUxpbWl0O1xuICAgIH1cbiAgICBpZiAodGhpcy5faW5ub2RiRnRTZXJ2ZXJTdG9wd29yZFRhYmxlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGhhc0FueVZhbHVlcyA9IHRydWU7XG4gICAgICBpbnRlcm5hbFZhbHVlUmVzdWx0Lmlubm9kYkZ0U2VydmVyU3RvcHdvcmRUYWJsZSA9IHRoaXMuX2lubm9kYkZ0U2VydmVyU3RvcHdvcmRUYWJsZTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2lubm9kYkxvY2tXYWl0VGltZW91dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBoYXNBbnlWYWx1ZXMgPSB0cnVlO1xuICAgICAgaW50ZXJuYWxWYWx1ZVJlc3VsdC5pbm5vZGJMb2NrV2FpdFRpbWVvdXQgPSB0aGlzLl9pbm5vZGJMb2NrV2FpdFRpbWVvdXQ7XG4gICAgfVxuICAgIGlmICh0aGlzLl9pbm5vZGJMb2dXcml0ZXJUaHJlYWRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGhhc0FueVZhbHVlcyA9IHRydWU7XG4gICAgICBpbnRlcm5hbFZhbHVlUmVzdWx0Lmlubm9kYkxvZ1dyaXRlclRocmVhZHMgPSB0aGlzLl9pbm5vZGJMb2dXcml0ZXJUaHJlYWRzO1xuICAgIH1cbiAgICBpZiAodGhpcy5faW5ub2RiTWF4UHVyZ2VMYWcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaGFzQW55VmFsdWVzID0gdHJ1ZTtcbiAgICAgIGludGVybmFsVmFsdWVSZXN1bHQuaW5ub2RiTWF4UHVyZ2VMYWcgPSB0aGlzLl9pbm5vZGJNYXhQdXJnZUxhZztcbiAgICB9XG4gICAgaWYgKHRoaXMuX2lubm9kYk1heFB1cmdlTGFnRGVsYXkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaGFzQW55VmFsdWVzID0gdHJ1ZTtcbiAgICAgIGludGVybmFsVmFsdWVSZXN1bHQuaW5ub2RiTWF4UHVyZ2VMYWdEZWxheSA9IHRoaXMuX2lubm9kYk1heFB1cmdlTGFnRGVsYXk7XG4gICAgfVxuICAgIGlmICh0aGlzLl9pbm5vZGJTdGF0c1BlcnNpc3RlbnRTYW1wbGVQYWdlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBoYXNBbnlWYWx1ZXMgPSB0cnVlO1xuICAgICAgaW50ZXJuYWxWYWx1ZVJlc3VsdC5pbm5vZGJTdGF0c1BlcnNpc3RlbnRTYW1wbGVQYWdlcyA9IHRoaXMuX2lubm9kYlN0YXRzUGVyc2lzdGVudFNhbXBsZVBhZ2VzO1xuICAgIH1cbiAgICBpZiAodGhpcy5faW5ub2RiU3RhdHNUcmFuc2llbnRTYW1wbGVQYWdlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBoYXNBbnlWYWx1ZXMgPSB0cnVlO1xuICAgICAgaW50ZXJuYWxWYWx1ZVJlc3VsdC5pbm5vZGJTdGF0c1RyYW5zaWVudFNhbXBsZVBhZ2VzID0gdGhpcy5faW5ub2RiU3RhdHNUcmFuc2llbnRTYW1wbGVQYWdlcztcbiAgICB9XG4gICAgaWYgKHRoaXMuX2ludGVyYWN0aXZlVGltZW91dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBoYXNBbnlWYWx1ZXMgPSB0cnVlO1xuICAgICAgaW50ZXJuYWxWYWx1ZVJlc3VsdC5pbnRlcmFjdGl2ZVRpbWVvdXQgPSB0aGlzLl9pbnRlcmFjdGl2ZVRpbWVvdXQ7XG4gICAgfVxuICAgIGlmICh0aGlzLl9sb2NhbEluZmlsZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBoYXNBbnlWYWx1ZXMgPSB0cnVlO1xuICAgICAgaW50ZXJuYWxWYWx1ZVJlc3VsdC5sb2NhbEluZmlsZSA9IHRoaXMuX2xvY2FsSW5maWxlO1xuICAgIH1cbiAgICBpZiAodGhpcy5fbWFuZGF0b3J5Um9sZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaGFzQW55VmFsdWVzID0gdHJ1ZTtcbiAgICAgIGludGVybmFsVmFsdWVSZXN1bHQubWFuZGF0b3J5Um9sZXMgPSB0aGlzLl9tYW5kYXRvcnlSb2xlcztcbiAgICB9XG4gICAgaWYgKHRoaXMuX21heEFsbG93ZWRQYWNrZXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaGFzQW55VmFsdWVzID0gdHJ1ZTtcbiAgICAgIGludGVybmFsVmFsdWVSZXN1bHQubWF4QWxsb3dlZFBhY2tldCA9IHRoaXMuX21heEFsbG93ZWRQYWNrZXQ7XG4gICAgfVxuICAgIGlmICh0aGlzLl9tYXhCaW5sb2dDYWNoZVNpemUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaGFzQW55VmFsdWVzID0gdHJ1ZTtcbiAgICAgIGludGVybmFsVmFsdWVSZXN1bHQubWF4QmlubG9nQ2FjaGVTaXplID0gdGhpcy5fbWF4QmlubG9nQ2FjaGVTaXplO1xuICAgIH1cbiAgICBpZiAodGhpcy5fbWF4Q29ubmVjdEVycm9ycyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBoYXNBbnlWYWx1ZXMgPSB0cnVlO1xuICAgICAgaW50ZXJuYWxWYWx1ZVJlc3VsdC5tYXhDb25uZWN0RXJyb3JzID0gdGhpcy5fbWF4Q29ubmVjdEVycm9ycztcbiAgICB9XG4gICAgaWYgKHRoaXMuX21heENvbm5lY3Rpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGhhc0FueVZhbHVlcyA9IHRydWU7XG4gICAgICBpbnRlcm5hbFZhbHVlUmVzdWx0Lm1heENvbm5lY3Rpb25zID0gdGhpcy5fbWF4Q29ubmVjdGlvbnM7XG4gICAgfVxuICAgIGlmICh0aGlzLl9tYXhFeGVjdXRpb25UaW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGhhc0FueVZhbHVlcyA9IHRydWU7XG4gICAgICBpbnRlcm5hbFZhbHVlUmVzdWx0Lm1heEV4ZWN1dGlvblRpbWUgPSB0aGlzLl9tYXhFeGVjdXRpb25UaW1lO1xuICAgIH1cbiAgICBpZiAodGhpcy5fbWF4SGVhcFRhYmxlU2l6ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBoYXNBbnlWYWx1ZXMgPSB0cnVlO1xuICAgICAgaW50ZXJuYWxWYWx1ZVJlc3VsdC5tYXhIZWFwVGFibGVTaXplID0gdGhpcy5fbWF4SGVhcFRhYmxlU2l6ZTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX21heFByZXBhcmVkU3RtdENvdW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGhhc0FueVZhbHVlcyA9IHRydWU7XG4gICAgICBpbnRlcm5hbFZhbHVlUmVzdWx0Lm1heFByZXBhcmVkU3RtdENvdW50ID0gdGhpcy5fbWF4UHJlcGFyZWRTdG10Q291bnQ7XG4gICAgfVxuICAgIGlmICh0aGlzLl9teXNxbEZpcmV3YWxsTW9kZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBoYXNBbnlWYWx1ZXMgPSB0cnVlO1xuICAgICAgaW50ZXJuYWxWYWx1ZVJlc3VsdC5teXNxbEZpcmV3YWxsTW9kZSA9IHRoaXMuX215c3FsRmlyZXdhbGxNb2RlO1xuICAgIH1cbiAgICBpZiAodGhpcy5fbXlzcWxac3RkRGVmYXVsdENvbXByZXNzaW9uTGV2ZWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaGFzQW55VmFsdWVzID0gdHJ1ZTtcbiAgICAgIGludGVybmFsVmFsdWVSZXN1bHQubXlzcWxac3RkRGVmYXVsdENvbXByZXNzaW9uTGV2ZWwgPSB0aGlzLl9teXNxbFpzdGREZWZhdWx0Q29tcHJlc3Npb25MZXZlbDtcbiAgICB9XG4gICAgaWYgKHRoaXMuX215c3FseENvbm5lY3RUaW1lb3V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGhhc0FueVZhbHVlcyA9IHRydWU7XG4gICAgICBpbnRlcm5hbFZhbHVlUmVzdWx0Lm15c3FseENvbm5lY3RUaW1lb3V0ID0gdGhpcy5fbXlzcWx4Q29ubmVjdFRpbWVvdXQ7XG4gICAgfVxuICAgIGlmICh0aGlzLl9teXNxbHhEZWZsYXRlRGVmYXVsdENvbXByZXNzaW9uTGV2ZWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaGFzQW55VmFsdWVzID0gdHJ1ZTtcbiAgICAgIGludGVybmFsVmFsdWVSZXN1bHQubXlzcWx4RGVmbGF0ZURlZmF1bHRDb21wcmVzc2lvbkxldmVsID0gdGhpcy5fbXlzcWx4RGVmbGF0ZURlZmF1bHRDb21wcmVzc2lvbkxldmVsO1xuICAgIH1cbiAgICBpZiAodGhpcy5fbXlzcWx4RGVmbGF0ZU1heENsaWVudENvbXByZXNzaW9uTGV2ZWwgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaGFzQW55VmFsdWVzID0gdHJ1ZTtcbiAgICAgIGludGVybmFsVmFsdWVSZXN1bHQubXlzcWx4RGVmbGF0ZU1heENsaWVudENvbXByZXNzaW9uTGV2ZWwgPSB0aGlzLl9teXNxbHhEZWZsYXRlTWF4Q2xpZW50Q29tcHJlc3Npb25MZXZlbDtcbiAgICB9XG4gICAgaWYgKHRoaXMuX215c3FseERvY3VtZW50SWRVbmlxdWVQcmVmaXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgaGFzQW55VmFsdWVzID0gdHJ1ZTtcbiAgICAgIGludGVybmFsVmFsdWVSZXN1bHQubXlzcWx4RG9jdW1lbnRJZFVuaXF1ZVByZWZpeCA9IHRoaXMuX215c3FseERvY3VtZW50SWRVbmlxdWVQcmVmaXg7XG4gICAgfVxuICAgIGlmICh0aGlzLl9teXNxbHhFbmFibGVIZWxsb05vdGljZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBoYXNBbnlWYWx1ZXMgPSB0cnVlO1xuICAgICAgaW50ZXJuYWxWYWx1ZVJlc3VsdC5teXNxbHhFbmFibGVIZWxsb05vdGljZSA9IHRoaXMuX215c3FseEVuYWJsZUhlbGxvTm90aWNlO1xuICAgIH1cbiAgICBpZiAodGhpcy5fbXlzcWx4SWRsZVdvcmtlclRocmVhZFRpbWVvdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaGFzQW55VmFsdWVzID0gdHJ1ZTtcbiAgICAgIGludGVybmFsVmFsdWVSZXN1bHQubXlzcWx4SWRsZVdvcmtlclRocmVhZFRpbWVvdXQgPSB0aGlzLl9teXNxbHhJZGxlV29ya2VyVGhyZWFkVGltZW91dDtcbiAgICB9XG4gICAgaWYgKHRoaXMuX215c3FseEludGVyYWN0aXZlVGltZW91dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBoYXNBbnlWYWx1ZXMgPSB0cnVlO1xuICAgICAgaW50ZXJuYWxWYWx1ZVJlc3VsdC5teXNxbHhJbnRlcmFjdGl2ZVRpbWVvdXQgPSB0aGlzLl9teXNxbHhJbnRlcmFjdGl2ZVRpbWVvdXQ7XG4gICAgfVxuICAgIGlmICh0aGlzLl9teXNxbHhMejREZWZhdWx0Q29tcHJlc3Npb25MZXZlbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBoYXNBbnlWYWx1ZXMgPSB0cnVlO1xuICAgICAgaW50ZXJuYWxWYWx1ZVJlc3VsdC5teXNxbHhMejREZWZhdWx0Q29tcHJlc3Npb25MZXZlbCA9IHRoaXMuX215c3FseEx6NERlZmF1bHRDb21wcmVzc2lvbkxldmVsO1xuICAgIH1cbiAgICBpZiAodGhpcy5fbXlzcWx4THo0TWF4Q2xpZW50Q29tcHJlc3Npb25MZXZlbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBoYXNBbnlWYWx1ZXMgPSB0cnVlO1xuICAgICAgaW50ZXJuYWxWYWx1ZVJlc3VsdC5teXNxbHhMejRNYXhDbGllbnRDb21wcmVzc2lvbkxldmVsID0gdGhpcy5fbXlzcWx4THo0TWF4Q2xpZW50Q29tcHJlc3Npb25MZXZlbDtcbiAgICB9XG4gICAgaWYgKHRoaXMuX215c3FseE1heEFsbG93ZWRQYWNrZXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaGFzQW55VmFsdWVzID0gdHJ1ZTtcbiAgICAgIGludGVybmFsVmFsdWVSZXN1bHQubXlzcWx4TWF4QWxsb3dlZFBhY2tldCA9IHRoaXMuX215c3FseE1heEFsbG93ZWRQYWNrZXQ7XG4gICAgfVxuICAgIGlmICh0aGlzLl9teXNxbHhNaW5Xb3JrZXJUaHJlYWRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGhhc0FueVZhbHVlcyA9IHRydWU7XG4gICAgICBpbnRlcm5hbFZhbHVlUmVzdWx0Lm15c3FseE1pbldvcmtlclRocmVhZHMgPSB0aGlzLl9teXNxbHhNaW5Xb3JrZXJUaHJlYWRzO1xuICAgIH1cbiAgICBpZiAodGhpcy5fbXlzcWx4UmVhZFRpbWVvdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaGFzQW55VmFsdWVzID0gdHJ1ZTtcbiAgICAgIGludGVybmFsVmFsdWVSZXN1bHQubXlzcWx4UmVhZFRpbWVvdXQgPSB0aGlzLl9teXNxbHhSZWFkVGltZW91dDtcbiAgICB9XG4gICAgaWYgKHRoaXMuX215c3FseFdhaXRUaW1lb3V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGhhc0FueVZhbHVlcyA9IHRydWU7XG4gICAgICBpbnRlcm5hbFZhbHVlUmVzdWx0Lm15c3FseFdhaXRUaW1lb3V0ID0gdGhpcy5fbXlzcWx4V2FpdFRpbWVvdXQ7XG4gICAgfVxuICAgIGlmICh0aGlzLl9teXNxbHhXcml0ZVRpbWVvdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaGFzQW55VmFsdWVzID0gdHJ1ZTtcbiAgICAgIGludGVybmFsVmFsdWVSZXN1bHQubXlzcWx4V3JpdGVUaW1lb3V0ID0gdGhpcy5fbXlzcWx4V3JpdGVUaW1lb3V0O1xuICAgIH1cbiAgICBpZiAodGhpcy5fbXlzcWx4WnN0ZERlZmF1bHRDb21wcmVzc2lvbkxldmVsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGhhc0FueVZhbHVlcyA9IHRydWU7XG4gICAgICBpbnRlcm5hbFZhbHVlUmVzdWx0Lm15c3FseFpzdGREZWZhdWx0Q29tcHJlc3Npb25MZXZlbCA9IHRoaXMuX215c3FseFpzdGREZWZhdWx0Q29tcHJlc3Npb25MZXZlbDtcbiAgICB9XG4gICAgaWYgKHRoaXMuX215c3FseFpzdGRNYXhDbGllbnRDb21wcmVzc2lvbkxldmVsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGhhc0FueVZhbHVlcyA9IHRydWU7XG4gICAgICBpbnRlcm5hbFZhbHVlUmVzdWx0Lm15c3FseFpzdGRNYXhDbGllbnRDb21wcmVzc2lvbkxldmVsID0gdGhpcy5fbXlzcWx4WnN0ZE1heENsaWVudENvbXByZXNzaW9uTGV2ZWw7XG4gICAgfVxuICAgIGlmICh0aGlzLl9uZXRSZWFkVGltZW91dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBoYXNBbnlWYWx1ZXMgPSB0cnVlO1xuICAgICAgaW50ZXJuYWxWYWx1ZVJlc3VsdC5uZXRSZWFkVGltZW91dCA9IHRoaXMuX25ldFJlYWRUaW1lb3V0O1xuICAgIH1cbiAgICBpZiAodGhpcy5fbmV0V3JpdGVUaW1lb3V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGhhc0FueVZhbHVlcyA9IHRydWU7XG4gICAgICBpbnRlcm5hbFZhbHVlUmVzdWx0Lm5ldFdyaXRlVGltZW91dCA9IHRoaXMuX25ldFdyaXRlVGltZW91dDtcbiAgICB9XG4gICAgaWYgKHRoaXMuX3BhcnNlck1heE1lbVNpemUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaGFzQW55VmFsdWVzID0gdHJ1ZTtcbiAgICAgIGludGVybmFsVmFsdWVSZXN1bHQucGFyc2VyTWF4TWVtU2l6ZSA9IHRoaXMuX3BhcnNlck1heE1lbVNpemU7XG4gICAgfVxuICAgIGlmICh0aGlzLl9xdWVyeUFsbG9jQmxvY2tTaXplICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGhhc0FueVZhbHVlcyA9IHRydWU7XG4gICAgICBpbnRlcm5hbFZhbHVlUmVzdWx0LnF1ZXJ5QWxsb2NCbG9ja1NpemUgPSB0aGlzLl9xdWVyeUFsbG9jQmxvY2tTaXplO1xuICAgIH1cbiAgICBpZiAodGhpcy5fcXVlcnlQcmVhbGxvY1NpemUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaGFzQW55VmFsdWVzID0gdHJ1ZTtcbiAgICAgIGludGVybmFsVmFsdWVSZXN1bHQucXVlcnlQcmVhbGxvY1NpemUgPSB0aGlzLl9xdWVyeVByZWFsbG9jU2l6ZTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX3JlZ2V4cFRpbWVMaW1pdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBoYXNBbnlWYWx1ZXMgPSB0cnVlO1xuICAgICAgaW50ZXJuYWxWYWx1ZVJlc3VsdC5yZWdleHBUaW1lTGltaXQgPSB0aGlzLl9yZWdleHBUaW1lTGltaXQ7XG4gICAgfVxuICAgIGlmICh0aGlzLl9zb3J0QnVmZmVyU2l6ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBoYXNBbnlWYWx1ZXMgPSB0cnVlO1xuICAgICAgaW50ZXJuYWxWYWx1ZVJlc3VsdC5zb3J0QnVmZmVyU2l6ZSA9IHRoaXMuX3NvcnRCdWZmZXJTaXplO1xuICAgIH1cbiAgICBpZiAodGhpcy5fc3FsTW9kZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBoYXNBbnlWYWx1ZXMgPSB0cnVlO1xuICAgICAgaW50ZXJuYWxWYWx1ZVJlc3VsdC5zcWxNb2RlID0gdGhpcy5fc3FsTW9kZTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX3NxbFJlcXVpcmVQcmltYXJ5S2V5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGhhc0FueVZhbHVlcyA9IHRydWU7XG4gICAgICBpbnRlcm5hbFZhbHVlUmVzdWx0LnNxbFJlcXVpcmVQcmltYXJ5S2V5ID0gdGhpcy5fc3FsUmVxdWlyZVByaW1hcnlLZXk7XG4gICAgfVxuICAgIGlmICh0aGlzLl9zcWxXYXJuaW5ncyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBoYXNBbnlWYWx1ZXMgPSB0cnVlO1xuICAgICAgaW50ZXJuYWxWYWx1ZVJlc3VsdC5zcWxXYXJuaW5ncyA9IHRoaXMuX3NxbFdhcm5pbmdzO1xuICAgIH1cbiAgICBpZiAodGhpcy5fdGhyZWFkUG9vbERlZGljYXRlZExpc3RlbmVycyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBoYXNBbnlWYWx1ZXMgPSB0cnVlO1xuICAgICAgaW50ZXJuYWxWYWx1ZVJlc3VsdC50aHJlYWRQb29sRGVkaWNhdGVkTGlzdGVuZXJzID0gdGhpcy5fdGhyZWFkUG9vbERlZGljYXRlZExpc3RlbmVycztcbiAgICB9XG4gICAgaWYgKHRoaXMuX3RocmVhZFBvb2xNYXhUcmFuc2FjdGlvbnNMaW1pdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBoYXNBbnlWYWx1ZXMgPSB0cnVlO1xuICAgICAgaW50ZXJuYWxWYWx1ZVJlc3VsdC50aHJlYWRQb29sTWF4VHJhbnNhY3Rpb25zTGltaXQgPSB0aGlzLl90aHJlYWRQb29sTWF4VHJhbnNhY3Rpb25zTGltaXQ7XG4gICAgfVxuICAgIGlmICh0aGlzLl90aW1lWm9uZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBoYXNBbnlWYWx1ZXMgPSB0cnVlO1xuICAgICAgaW50ZXJuYWxWYWx1ZVJlc3VsdC50aW1lWm9uZSA9IHRoaXMuX3RpbWVab25lO1xuICAgIH1cbiAgICBpZiAodGhpcy5fdG1wVGFibGVTaXplICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGhhc0FueVZhbHVlcyA9IHRydWU7XG4gICAgICBpbnRlcm5hbFZhbHVlUmVzdWx0LnRtcFRhYmxlU2l6ZSA9IHRoaXMuX3RtcFRhYmxlU2l6ZTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX3RyYW5zYWN0aW9uSXNvbGF0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGhhc0FueVZhbHVlcyA9IHRydWU7XG4gICAgICBpbnRlcm5hbFZhbHVlUmVzdWx0LnRyYW5zYWN0aW9uSXNvbGF0aW9uID0gdGhpcy5fdHJhbnNhY3Rpb25Jc29sYXRpb247XG4gICAgfVxuICAgIGlmICh0aGlzLl93YWl0VGltZW91dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBoYXNBbnlWYWx1ZXMgPSB0cnVlO1xuICAgICAgaW50ZXJuYWxWYWx1ZVJlc3VsdC53YWl0VGltZW91dCA9IHRoaXMuX3dhaXRUaW1lb3V0O1xuICAgIH1cbiAgICByZXR1cm4gaGFzQW55VmFsdWVzID8gaW50ZXJuYWxWYWx1ZVJlc3VsdCA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgaW50ZXJuYWxWYWx1ZSh2YWx1ZTogTXlzcWxNeXNxbENvbmZpZ3VyYXRpb25WYXJpYWJsZXMgfCB1bmRlZmluZWQpIHtcbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5pc0VtcHR5T2JqZWN0ID0gZmFsc2U7XG4gICAgICB0aGlzLl9hdXRvY29tbWl0ID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fYmlnVGFibGVzID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fYmlubG9nRXhwaXJlTG9nc1NlY29uZHMgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl9iaW5sb2dSb3dNZXRhZGF0YSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX2JpbmxvZ1Jvd1ZhbHVlT3B0aW9ucyA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX2JpbmxvZ1RyYW5zYWN0aW9uQ29tcHJlc3Npb24gPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl9jb21wbGV0aW9uVHlwZSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX2Nvbm5lY3RUaW1lb3V0ID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fY29ubmVjdGlvbk1lbW9yeUNodW5rU2l6ZSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX2Nvbm5lY3Rpb25NZW1vcnlMaW1pdCA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX2N0ZU1heFJlY3Vyc2lvbkRlcHRoID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fZGVmYXVsdEF1dGhlbnRpY2F0aW9uUGx1Z2luID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fZm9yZWlnbktleUNoZWNrcyA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX2dlbmVyYXRlZFJhbmRvbVBhc3N3b3JkTGVuZ3RoID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fZ2xvYmFsQ29ubmVjdGlvbk1lbW9yeUxpbWl0ID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fZ2xvYmFsQ29ubmVjdGlvbk1lbW9yeVRyYWNraW5nID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fZ3JvdXBSZXBsaWNhdGlvbkNvbnNpc3RlbmN5ID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5faW5mb3JtYXRpb25TY2hlbWFTdGF0c0V4cGlyeSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX2lubm9kYkJ1ZmZlclBvb2xEdW1wUGN0ID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5faW5ub2RiQnVmZmVyUG9vbEluc3RhbmNlcyA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX2lubm9kYkJ1ZmZlclBvb2xTaXplID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5faW5ub2RiRGRsQnVmZmVyU2l6ZSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX2lubm9kYkRkbFRocmVhZHMgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl9pbm5vZGJGdEVuYWJsZVN0b3B3b3JkID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5faW5ub2RiRnRNYXhUb2tlblNpemUgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl9pbm5vZGJGdE1pblRva2VuU2l6ZSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX2lubm9kYkZ0TnVtV29yZE9wdGltaXplID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5faW5ub2RiRnRSZXN1bHRDYWNoZUxpbWl0ID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5faW5ub2RiRnRTZXJ2ZXJTdG9wd29yZFRhYmxlID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5faW5ub2RiTG9ja1dhaXRUaW1lb3V0ID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5faW5ub2RiTG9nV3JpdGVyVGhyZWFkcyA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX2lubm9kYk1heFB1cmdlTGFnID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5faW5ub2RiTWF4UHVyZ2VMYWdEZWxheSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX2lubm9kYlN0YXRzUGVyc2lzdGVudFNhbXBsZVBhZ2VzID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5faW5ub2RiU3RhdHNUcmFuc2llbnRTYW1wbGVQYWdlcyA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX2ludGVyYWN0aXZlVGltZW91dCA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX2xvY2FsSW5maWxlID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fbWFuZGF0b3J5Um9sZXMgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl9tYXhBbGxvd2VkUGFja2V0ID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fbWF4QmlubG9nQ2FjaGVTaXplID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fbWF4Q29ubmVjdEVycm9ycyA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX21heENvbm5lY3Rpb25zID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fbWF4RXhlY3V0aW9uVGltZSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX21heEhlYXBUYWJsZVNpemUgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl9tYXhQcmVwYXJlZFN0bXRDb3VudCA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX215c3FsRmlyZXdhbGxNb2RlID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fbXlzcWxac3RkRGVmYXVsdENvbXByZXNzaW9uTGV2ZWwgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl9teXNxbHhDb25uZWN0VGltZW91dCA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX215c3FseERlZmxhdGVEZWZhdWx0Q29tcHJlc3Npb25MZXZlbCA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX215c3FseERlZmxhdGVNYXhDbGllbnRDb21wcmVzc2lvbkxldmVsID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fbXlzcWx4RG9jdW1lbnRJZFVuaXF1ZVByZWZpeCA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX215c3FseEVuYWJsZUhlbGxvTm90aWNlID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fbXlzcWx4SWRsZVdvcmtlclRocmVhZFRpbWVvdXQgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl9teXNxbHhJbnRlcmFjdGl2ZVRpbWVvdXQgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl9teXNxbHhMejREZWZhdWx0Q29tcHJlc3Npb25MZXZlbCA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX215c3FseEx6NE1heENsaWVudENvbXByZXNzaW9uTGV2ZWwgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl9teXNxbHhNYXhBbGxvd2VkUGFja2V0ID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fbXlzcWx4TWluV29ya2VyVGhyZWFkcyA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX215c3FseFJlYWRUaW1lb3V0ID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fbXlzcWx4V2FpdFRpbWVvdXQgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl9teXNxbHhXcml0ZVRpbWVvdXQgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl9teXNxbHhac3RkRGVmYXVsdENvbXByZXNzaW9uTGV2ZWwgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl9teXNxbHhac3RkTWF4Q2xpZW50Q29tcHJlc3Npb25MZXZlbCA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX25ldFJlYWRUaW1lb3V0ID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fbmV0V3JpdGVUaW1lb3V0ID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fcGFyc2VyTWF4TWVtU2l6ZSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX3F1ZXJ5QWxsb2NCbG9ja1NpemUgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl9xdWVyeVByZWFsbG9jU2l6ZSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX3JlZ2V4cFRpbWVMaW1pdCA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX3NvcnRCdWZmZXJTaXplID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fc3FsTW9kZSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX3NxbFJlcXVpcmVQcmltYXJ5S2V5ID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fc3FsV2FybmluZ3MgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl90aHJlYWRQb29sRGVkaWNhdGVkTGlzdGVuZXJzID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fdGhyZWFkUG9vbE1heFRyYW5zYWN0aW9uc0xpbWl0ID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fdGltZVpvbmUgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl90bXBUYWJsZVNpemUgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl90cmFuc2FjdGlvbklzb2xhdGlvbiA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX3dhaXRUaW1lb3V0ID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMuaXNFbXB0eU9iamVjdCA9IE9iamVjdC5rZXlzKHZhbHVlKS5sZW5ndGggPT09IDA7XG4gICAgICB0aGlzLl9hdXRvY29tbWl0ID0gdmFsdWUuYXV0b2NvbW1pdDtcbiAgICAgIHRoaXMuX2JpZ1RhYmxlcyA9IHZhbHVlLmJpZ1RhYmxlcztcbiAgICAgIHRoaXMuX2JpbmxvZ0V4cGlyZUxvZ3NTZWNvbmRzID0gdmFsdWUuYmlubG9nRXhwaXJlTG9nc1NlY29uZHM7XG4gICAgICB0aGlzLl9iaW5sb2dSb3dNZXRhZGF0YSA9IHZhbHVlLmJpbmxvZ1Jvd01ldGFkYXRhO1xuICAgICAgdGhpcy5fYmlubG9nUm93VmFsdWVPcHRpb25zID0gdmFsdWUuYmlubG9nUm93VmFsdWVPcHRpb25zO1xuICAgICAgdGhpcy5fYmlubG9nVHJhbnNhY3Rpb25Db21wcmVzc2lvbiA9IHZhbHVlLmJpbmxvZ1RyYW5zYWN0aW9uQ29tcHJlc3Npb247XG4gICAgICB0aGlzLl9jb21wbGV0aW9uVHlwZSA9IHZhbHVlLmNvbXBsZXRpb25UeXBlO1xuICAgICAgdGhpcy5fY29ubmVjdFRpbWVvdXQgPSB2YWx1ZS5jb25uZWN0VGltZW91dDtcbiAgICAgIHRoaXMuX2Nvbm5lY3Rpb25NZW1vcnlDaHVua1NpemUgPSB2YWx1ZS5jb25uZWN0aW9uTWVtb3J5Q2h1bmtTaXplO1xuICAgICAgdGhpcy5fY29ubmVjdGlvbk1lbW9yeUxpbWl0ID0gdmFsdWUuY29ubmVjdGlvbk1lbW9yeUxpbWl0O1xuICAgICAgdGhpcy5fY3RlTWF4UmVjdXJzaW9uRGVwdGggPSB2YWx1ZS5jdGVNYXhSZWN1cnNpb25EZXB0aDtcbiAgICAgIHRoaXMuX2RlZmF1bHRBdXRoZW50aWNhdGlvblBsdWdpbiA9IHZhbHVlLmRlZmF1bHRBdXRoZW50aWNhdGlvblBsdWdpbjtcbiAgICAgIHRoaXMuX2ZvcmVpZ25LZXlDaGVja3MgPSB2YWx1ZS5mb3JlaWduS2V5Q2hlY2tzO1xuICAgICAgdGhpcy5fZ2VuZXJhdGVkUmFuZG9tUGFzc3dvcmRMZW5ndGggPSB2YWx1ZS5nZW5lcmF0ZWRSYW5kb21QYXNzd29yZExlbmd0aDtcbiAgICAgIHRoaXMuX2dsb2JhbENvbm5lY3Rpb25NZW1vcnlMaW1pdCA9IHZhbHVlLmdsb2JhbENvbm5lY3Rpb25NZW1vcnlMaW1pdDtcbiAgICAgIHRoaXMuX2dsb2JhbENvbm5lY3Rpb25NZW1vcnlUcmFja2luZyA9IHZhbHVlLmdsb2JhbENvbm5lY3Rpb25NZW1vcnlUcmFja2luZztcbiAgICAgIHRoaXMuX2dyb3VwUmVwbGljYXRpb25Db25zaXN0ZW5jeSA9IHZhbHVlLmdyb3VwUmVwbGljYXRpb25Db25zaXN0ZW5jeTtcbiAgICAgIHRoaXMuX2luZm9ybWF0aW9uU2NoZW1hU3RhdHNFeHBpcnkgPSB2YWx1ZS5pbmZvcm1hdGlvblNjaGVtYVN0YXRzRXhwaXJ5O1xuICAgICAgdGhpcy5faW5ub2RiQnVmZmVyUG9vbER1bXBQY3QgPSB2YWx1ZS5pbm5vZGJCdWZmZXJQb29sRHVtcFBjdDtcbiAgICAgIHRoaXMuX2lubm9kYkJ1ZmZlclBvb2xJbnN0YW5jZXMgPSB2YWx1ZS5pbm5vZGJCdWZmZXJQb29sSW5zdGFuY2VzO1xuICAgICAgdGhpcy5faW5ub2RiQnVmZmVyUG9vbFNpemUgPSB2YWx1ZS5pbm5vZGJCdWZmZXJQb29sU2l6ZTtcbiAgICAgIHRoaXMuX2lubm9kYkRkbEJ1ZmZlclNpemUgPSB2YWx1ZS5pbm5vZGJEZGxCdWZmZXJTaXplO1xuICAgICAgdGhpcy5faW5ub2RiRGRsVGhyZWFkcyA9IHZhbHVlLmlubm9kYkRkbFRocmVhZHM7XG4gICAgICB0aGlzLl9pbm5vZGJGdEVuYWJsZVN0b3B3b3JkID0gdmFsdWUuaW5ub2RiRnRFbmFibGVTdG9wd29yZDtcbiAgICAgIHRoaXMuX2lubm9kYkZ0TWF4VG9rZW5TaXplID0gdmFsdWUuaW5ub2RiRnRNYXhUb2tlblNpemU7XG4gICAgICB0aGlzLl9pbm5vZGJGdE1pblRva2VuU2l6ZSA9IHZhbHVlLmlubm9kYkZ0TWluVG9rZW5TaXplO1xuICAgICAgdGhpcy5faW5ub2RiRnROdW1Xb3JkT3B0aW1pemUgPSB2YWx1ZS5pbm5vZGJGdE51bVdvcmRPcHRpbWl6ZTtcbiAgICAgIHRoaXMuX2lubm9kYkZ0UmVzdWx0Q2FjaGVMaW1pdCA9IHZhbHVlLmlubm9kYkZ0UmVzdWx0Q2FjaGVMaW1pdDtcbiAgICAgIHRoaXMuX2lubm9kYkZ0U2VydmVyU3RvcHdvcmRUYWJsZSA9IHZhbHVlLmlubm9kYkZ0U2VydmVyU3RvcHdvcmRUYWJsZTtcbiAgICAgIHRoaXMuX2lubm9kYkxvY2tXYWl0VGltZW91dCA9IHZhbHVlLmlubm9kYkxvY2tXYWl0VGltZW91dDtcbiAgICAgIHRoaXMuX2lubm9kYkxvZ1dyaXRlclRocmVhZHMgPSB2YWx1ZS5pbm5vZGJMb2dXcml0ZXJUaHJlYWRzO1xuICAgICAgdGhpcy5faW5ub2RiTWF4UHVyZ2VMYWcgPSB2YWx1ZS5pbm5vZGJNYXhQdXJnZUxhZztcbiAgICAgIHRoaXMuX2lubm9kYk1heFB1cmdlTGFnRGVsYXkgPSB2YWx1ZS5pbm5vZGJNYXhQdXJnZUxhZ0RlbGF5O1xuICAgICAgdGhpcy5faW5ub2RiU3RhdHNQZXJzaXN0ZW50U2FtcGxlUGFnZXMgPSB2YWx1ZS5pbm5vZGJTdGF0c1BlcnNpc3RlbnRTYW1wbGVQYWdlcztcbiAgICAgIHRoaXMuX2lubm9kYlN0YXRzVHJhbnNpZW50U2FtcGxlUGFnZXMgPSB2YWx1ZS5pbm5vZGJTdGF0c1RyYW5zaWVudFNhbXBsZVBhZ2VzO1xuICAgICAgdGhpcy5faW50ZXJhY3RpdmVUaW1lb3V0ID0gdmFsdWUuaW50ZXJhY3RpdmVUaW1lb3V0O1xuICAgICAgdGhpcy5fbG9jYWxJbmZpbGUgPSB2YWx1ZS5sb2NhbEluZmlsZTtcbiAgICAgIHRoaXMuX21hbmRhdG9yeVJvbGVzID0gdmFsdWUubWFuZGF0b3J5Um9sZXM7XG4gICAgICB0aGlzLl9tYXhBbGxvd2VkUGFja2V0ID0gdmFsdWUubWF4QWxsb3dlZFBhY2tldDtcbiAgICAgIHRoaXMuX21heEJpbmxvZ0NhY2hlU2l6ZSA9IHZhbHVlLm1heEJpbmxvZ0NhY2hlU2l6ZTtcbiAgICAgIHRoaXMuX21heENvbm5lY3RFcnJvcnMgPSB2YWx1ZS5tYXhDb25uZWN0RXJyb3JzO1xuICAgICAgdGhpcy5fbWF4Q29ubmVjdGlvbnMgPSB2YWx1ZS5tYXhDb25uZWN0aW9ucztcbiAgICAgIHRoaXMuX21heEV4ZWN1dGlvblRpbWUgPSB2YWx1ZS5tYXhFeGVjdXRpb25UaW1lO1xuICAgICAgdGhpcy5fbWF4SGVhcFRhYmxlU2l6ZSA9IHZhbHVlLm1heEhlYXBUYWJsZVNpemU7XG4gICAgICB0aGlzLl9tYXhQcmVwYXJlZFN0bXRDb3VudCA9IHZhbHVlLm1heFByZXBhcmVkU3RtdENvdW50O1xuICAgICAgdGhpcy5fbXlzcWxGaXJld2FsbE1vZGUgPSB2YWx1ZS5teXNxbEZpcmV3YWxsTW9kZTtcbiAgICAgIHRoaXMuX215c3FsWnN0ZERlZmF1bHRDb21wcmVzc2lvbkxldmVsID0gdmFsdWUubXlzcWxac3RkRGVmYXVsdENvbXByZXNzaW9uTGV2ZWw7XG4gICAgICB0aGlzLl9teXNxbHhDb25uZWN0VGltZW91dCA9IHZhbHVlLm15c3FseENvbm5lY3RUaW1lb3V0O1xuICAgICAgdGhpcy5fbXlzcWx4RGVmbGF0ZURlZmF1bHRDb21wcmVzc2lvbkxldmVsID0gdmFsdWUubXlzcWx4RGVmbGF0ZURlZmF1bHRDb21wcmVzc2lvbkxldmVsO1xuICAgICAgdGhpcy5fbXlzcWx4RGVmbGF0ZU1heENsaWVudENvbXByZXNzaW9uTGV2ZWwgPSB2YWx1ZS5teXNxbHhEZWZsYXRlTWF4Q2xpZW50Q29tcHJlc3Npb25MZXZlbDtcbiAgICAgIHRoaXMuX215c3FseERvY3VtZW50SWRVbmlxdWVQcmVmaXggPSB2YWx1ZS5teXNxbHhEb2N1bWVudElkVW5pcXVlUHJlZml4O1xuICAgICAgdGhpcy5fbXlzcWx4RW5hYmxlSGVsbG9Ob3RpY2UgPSB2YWx1ZS5teXNxbHhFbmFibGVIZWxsb05vdGljZTtcbiAgICAgIHRoaXMuX215c3FseElkbGVXb3JrZXJUaHJlYWRUaW1lb3V0ID0gdmFsdWUubXlzcWx4SWRsZVdvcmtlclRocmVhZFRpbWVvdXQ7XG4gICAgICB0aGlzLl9teXNxbHhJbnRlcmFjdGl2ZVRpbWVvdXQgPSB2YWx1ZS5teXNxbHhJbnRlcmFjdGl2ZVRpbWVvdXQ7XG4gICAgICB0aGlzLl9teXNxbHhMejREZWZhdWx0Q29tcHJlc3Npb25MZXZlbCA9IHZhbHVlLm15c3FseEx6NERlZmF1bHRDb21wcmVzc2lvbkxldmVsO1xuICAgICAgdGhpcy5fbXlzcWx4THo0TWF4Q2xpZW50Q29tcHJlc3Npb25MZXZlbCA9IHZhbHVlLm15c3FseEx6NE1heENsaWVudENvbXByZXNzaW9uTGV2ZWw7XG4gICAgICB0aGlzLl9teXNxbHhNYXhBbGxvd2VkUGFja2V0ID0gdmFsdWUubXlzcWx4TWF4QWxsb3dlZFBhY2tldDtcbiAgICAgIHRoaXMuX215c3FseE1pbldvcmtlclRocmVhZHMgPSB2YWx1ZS5teXNxbHhNaW5Xb3JrZXJUaHJlYWRzO1xuICAgICAgdGhpcy5fbXlzcWx4UmVhZFRpbWVvdXQgPSB2YWx1ZS5teXNxbHhSZWFkVGltZW91dDtcbiAgICAgIHRoaXMuX215c3FseFdhaXRUaW1lb3V0ID0gdmFsdWUubXlzcWx4V2FpdFRpbWVvdXQ7XG4gICAgICB0aGlzLl9teXNxbHhXcml0ZVRpbWVvdXQgPSB2YWx1ZS5teXNxbHhXcml0ZVRpbWVvdXQ7XG4gICAgICB0aGlzLl9teXNxbHhac3RkRGVmYXVsdENvbXByZXNzaW9uTGV2ZWwgPSB2YWx1ZS5teXNxbHhac3RkRGVmYXVsdENvbXByZXNzaW9uTGV2ZWw7XG4gICAgICB0aGlzLl9teXNxbHhac3RkTWF4Q2xpZW50Q29tcHJlc3Npb25MZXZlbCA9IHZhbHVlLm15c3FseFpzdGRNYXhDbGllbnRDb21wcmVzc2lvbkxldmVsO1xuICAgICAgdGhpcy5fbmV0UmVhZFRpbWVvdXQgPSB2YWx1ZS5uZXRSZWFkVGltZW91dDtcbiAgICAgIHRoaXMuX25ldFdyaXRlVGltZW91dCA9IHZhbHVlLm5ldFdyaXRlVGltZW91dDtcbiAgICAgIHRoaXMuX3BhcnNlck1heE1lbVNpemUgPSB2YWx1ZS5wYXJzZXJNYXhNZW1TaXplO1xuICAgICAgdGhpcy5fcXVlcnlBbGxvY0Jsb2NrU2l6ZSA9IHZhbHVlLnF1ZXJ5QWxsb2NCbG9ja1NpemU7XG4gICAgICB0aGlzLl9xdWVyeVByZWFsbG9jU2l6ZSA9IHZhbHVlLnF1ZXJ5UHJlYWxsb2NTaXplO1xuICAgICAgdGhpcy5fcmVnZXhwVGltZUxpbWl0ID0gdmFsdWUucmVnZXhwVGltZUxpbWl0O1xuICAgICAgdGhpcy5fc29ydEJ1ZmZlclNpemUgPSB2YWx1ZS5zb3J0QnVmZmVyU2l6ZTtcbiAgICAgIHRoaXMuX3NxbE1vZGUgPSB2YWx1ZS5zcWxNb2RlO1xuICAgICAgdGhpcy5fc3FsUmVxdWlyZVByaW1hcnlLZXkgPSB2YWx1ZS5zcWxSZXF1aXJlUHJpbWFyeUtleTtcbiAgICAgIHRoaXMuX3NxbFdhcm5pbmdzID0gdmFsdWUuc3FsV2FybmluZ3M7XG4gICAgICB0aGlzLl90aHJlYWRQb29sRGVkaWNhdGVkTGlzdGVuZXJzID0gdmFsdWUudGhyZWFkUG9vbERlZGljYXRlZExpc3RlbmVycztcbiAgICAgIHRoaXMuX3RocmVhZFBvb2xNYXhUcmFuc2FjdGlvbnNMaW1pdCA9IHZhbHVlLnRocmVhZFBvb2xNYXhUcmFuc2FjdGlvbnNMaW1pdDtcbiAgICAgIHRoaXMuX3RpbWVab25lID0gdmFsdWUudGltZVpvbmU7XG4gICAgICB0aGlzLl90bXBUYWJsZVNpemUgPSB2YWx1ZS50bXBUYWJsZVNpemU7XG4gICAgICB0aGlzLl90cmFuc2FjdGlvbklzb2xhdGlvbiA9IHZhbHVlLnRyYW5zYWN0aW9uSXNvbGF0aW9uO1xuICAgICAgdGhpcy5fd2FpdFRpbWVvdXQgPSB2YWx1ZS53YWl0VGltZW91dDtcbiAgICB9XG4gIH1cblxuICAvLyBhdXRvY29tbWl0IC0gY29tcHV0ZWQ6IHRydWUsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfYXV0b2NvbW1pdD86IGJvb2xlYW4gfCBjZGt0Zi5JUmVzb2x2YWJsZTsgXG4gIHB1YmxpYyBnZXQgYXV0b2NvbW1pdCgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRCb29sZWFuQXR0cmlidXRlKCdhdXRvY29tbWl0Jyk7XG4gIH1cbiAgcHVibGljIHNldCBhdXRvY29tbWl0KHZhbHVlOiBib29sZWFuIHwgY2RrdGYuSVJlc29sdmFibGUpIHtcbiAgICB0aGlzLl9hdXRvY29tbWl0ID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0QXV0b2NvbW1pdCgpIHtcbiAgICB0aGlzLl9hdXRvY29tbWl0ID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBhdXRvY29tbWl0SW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2F1dG9jb21taXQ7XG4gIH1cblxuICAvLyBiaWdfdGFibGVzIC0gY29tcHV0ZWQ6IHRydWUsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfYmlnVGFibGVzPzogYm9vbGVhbiB8IGNka3RmLklSZXNvbHZhYmxlOyBcbiAgcHVibGljIGdldCBiaWdUYWJsZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Qm9vbGVhbkF0dHJpYnV0ZSgnYmlnX3RhYmxlcycpO1xuICB9XG4gIHB1YmxpYyBzZXQgYmlnVGFibGVzKHZhbHVlOiBib29sZWFuIHwgY2RrdGYuSVJlc29sdmFibGUpIHtcbiAgICB0aGlzLl9iaWdUYWJsZXMgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRCaWdUYWJsZXMoKSB7XG4gICAgdGhpcy5fYmlnVGFibGVzID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBiaWdUYWJsZXNJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fYmlnVGFibGVzO1xuICB9XG5cbiAgLy8gYmlubG9nX2V4cGlyZV9sb2dzX3NlY29uZHMgLSBjb21wdXRlZDogdHJ1ZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9iaW5sb2dFeHBpcmVMb2dzU2Vjb25kcz86IG51bWJlcjsgXG4gIHB1YmxpYyBnZXQgYmlubG9nRXhwaXJlTG9nc1NlY29uZHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TnVtYmVyQXR0cmlidXRlKCdiaW5sb2dfZXhwaXJlX2xvZ3Nfc2Vjb25kcycpO1xuICB9XG4gIHB1YmxpYyBzZXQgYmlubG9nRXhwaXJlTG9nc1NlY29uZHModmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX2JpbmxvZ0V4cGlyZUxvZ3NTZWNvbmRzID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0QmlubG9nRXhwaXJlTG9nc1NlY29uZHMoKSB7XG4gICAgdGhpcy5fYmlubG9nRXhwaXJlTG9nc1NlY29uZHMgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IGJpbmxvZ0V4cGlyZUxvZ3NTZWNvbmRzSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2JpbmxvZ0V4cGlyZUxvZ3NTZWNvbmRzO1xuICB9XG5cbiAgLy8gYmlubG9nX3Jvd19tZXRhZGF0YSAtIGNvbXB1dGVkOiB0cnVlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX2JpbmxvZ1Jvd01ldGFkYXRhPzogc3RyaW5nOyBcbiAgcHVibGljIGdldCBiaW5sb2dSb3dNZXRhZGF0YSgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTdHJpbmdBdHRyaWJ1dGUoJ2JpbmxvZ19yb3dfbWV0YWRhdGEnKTtcbiAgfVxuICBwdWJsaWMgc2V0IGJpbmxvZ1Jvd01ldGFkYXRhKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9iaW5sb2dSb3dNZXRhZGF0YSA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldEJpbmxvZ1Jvd01ldGFkYXRhKCkge1xuICAgIHRoaXMuX2JpbmxvZ1Jvd01ldGFkYXRhID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBiaW5sb2dSb3dNZXRhZGF0YUlucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9iaW5sb2dSb3dNZXRhZGF0YTtcbiAgfVxuXG4gIC8vIGJpbmxvZ19yb3dfdmFsdWVfb3B0aW9ucyAtIGNvbXB1dGVkOiB0cnVlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX2JpbmxvZ1Jvd1ZhbHVlT3B0aW9ucz86IHN0cmluZzsgXG4gIHB1YmxpYyBnZXQgYmlubG9nUm93VmFsdWVPcHRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmdldFN0cmluZ0F0dHJpYnV0ZSgnYmlubG9nX3Jvd192YWx1ZV9vcHRpb25zJyk7XG4gIH1cbiAgcHVibGljIHNldCBiaW5sb2dSb3dWYWx1ZU9wdGlvbnModmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX2JpbmxvZ1Jvd1ZhbHVlT3B0aW9ucyA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldEJpbmxvZ1Jvd1ZhbHVlT3B0aW9ucygpIHtcbiAgICB0aGlzLl9iaW5sb2dSb3dWYWx1ZU9wdGlvbnMgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IGJpbmxvZ1Jvd1ZhbHVlT3B0aW9uc0lucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9iaW5sb2dSb3dWYWx1ZU9wdGlvbnM7XG4gIH1cblxuICAvLyBiaW5sb2dfdHJhbnNhY3Rpb25fY29tcHJlc3Npb24gLSBjb21wdXRlZDogdHJ1ZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9iaW5sb2dUcmFuc2FjdGlvbkNvbXByZXNzaW9uPzogYm9vbGVhbiB8IGNka3RmLklSZXNvbHZhYmxlOyBcbiAgcHVibGljIGdldCBiaW5sb2dUcmFuc2FjdGlvbkNvbXByZXNzaW9uKCkge1xuICAgIHJldHVybiB0aGlzLmdldEJvb2xlYW5BdHRyaWJ1dGUoJ2JpbmxvZ190cmFuc2FjdGlvbl9jb21wcmVzc2lvbicpO1xuICB9XG4gIHB1YmxpYyBzZXQgYmlubG9nVHJhbnNhY3Rpb25Db21wcmVzc2lvbih2YWx1ZTogYm9vbGVhbiB8IGNka3RmLklSZXNvbHZhYmxlKSB7XG4gICAgdGhpcy5fYmlubG9nVHJhbnNhY3Rpb25Db21wcmVzc2lvbiA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldEJpbmxvZ1RyYW5zYWN0aW9uQ29tcHJlc3Npb24oKSB7XG4gICAgdGhpcy5fYmlubG9nVHJhbnNhY3Rpb25Db21wcmVzc2lvbiA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgYmlubG9nVHJhbnNhY3Rpb25Db21wcmVzc2lvbklucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9iaW5sb2dUcmFuc2FjdGlvbkNvbXByZXNzaW9uO1xuICB9XG5cbiAgLy8gY29tcGxldGlvbl90eXBlIC0gY29tcHV0ZWQ6IHRydWUsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfY29tcGxldGlvblR5cGU/OiBzdHJpbmc7IFxuICBwdWJsaWMgZ2V0IGNvbXBsZXRpb25UeXBlKCkge1xuICAgIHJldHVybiB0aGlzLmdldFN0cmluZ0F0dHJpYnV0ZSgnY29tcGxldGlvbl90eXBlJyk7XG4gIH1cbiAgcHVibGljIHNldCBjb21wbGV0aW9uVHlwZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fY29tcGxldGlvblR5cGUgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRDb21wbGV0aW9uVHlwZSgpIHtcbiAgICB0aGlzLl9jb21wbGV0aW9uVHlwZSA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgY29tcGxldGlvblR5cGVJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY29tcGxldGlvblR5cGU7XG4gIH1cblxuICAvLyBjb25uZWN0X3RpbWVvdXQgLSBjb21wdXRlZDogdHJ1ZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9jb25uZWN0VGltZW91dD86IG51bWJlcjsgXG4gIHB1YmxpYyBnZXQgY29ubmVjdFRpbWVvdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TnVtYmVyQXR0cmlidXRlKCdjb25uZWN0X3RpbWVvdXQnKTtcbiAgfVxuICBwdWJsaWMgc2V0IGNvbm5lY3RUaW1lb3V0KHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLl9jb25uZWN0VGltZW91dCA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldENvbm5lY3RUaW1lb3V0KCkge1xuICAgIHRoaXMuX2Nvbm5lY3RUaW1lb3V0ID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBjb25uZWN0VGltZW91dElucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9jb25uZWN0VGltZW91dDtcbiAgfVxuXG4gIC8vIGNvbm5lY3Rpb25fbWVtb3J5X2NodW5rX3NpemUgLSBjb21wdXRlZDogdHJ1ZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9jb25uZWN0aW9uTWVtb3J5Q2h1bmtTaXplPzogbnVtYmVyOyBcbiAgcHVibGljIGdldCBjb25uZWN0aW9uTWVtb3J5Q2h1bmtTaXplKCkge1xuICAgIHJldHVybiB0aGlzLmdldE51bWJlckF0dHJpYnV0ZSgnY29ubmVjdGlvbl9tZW1vcnlfY2h1bmtfc2l6ZScpO1xuICB9XG4gIHB1YmxpYyBzZXQgY29ubmVjdGlvbk1lbW9yeUNodW5rU2l6ZSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fY29ubmVjdGlvbk1lbW9yeUNodW5rU2l6ZSA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldENvbm5lY3Rpb25NZW1vcnlDaHVua1NpemUoKSB7XG4gICAgdGhpcy5fY29ubmVjdGlvbk1lbW9yeUNodW5rU2l6ZSA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgY29ubmVjdGlvbk1lbW9yeUNodW5rU2l6ZUlucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9jb25uZWN0aW9uTWVtb3J5Q2h1bmtTaXplO1xuICB9XG5cbiAgLy8gY29ubmVjdGlvbl9tZW1vcnlfbGltaXQgLSBjb21wdXRlZDogdHJ1ZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9jb25uZWN0aW9uTWVtb3J5TGltaXQ/OiBzdHJpbmc7IFxuICBwdWJsaWMgZ2V0IGNvbm5lY3Rpb25NZW1vcnlMaW1pdCgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTdHJpbmdBdHRyaWJ1dGUoJ2Nvbm5lY3Rpb25fbWVtb3J5X2xpbWl0Jyk7XG4gIH1cbiAgcHVibGljIHNldCBjb25uZWN0aW9uTWVtb3J5TGltaXQodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX2Nvbm5lY3Rpb25NZW1vcnlMaW1pdCA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldENvbm5lY3Rpb25NZW1vcnlMaW1pdCgpIHtcbiAgICB0aGlzLl9jb25uZWN0aW9uTWVtb3J5TGltaXQgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IGNvbm5lY3Rpb25NZW1vcnlMaW1pdElucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9jb25uZWN0aW9uTWVtb3J5TGltaXQ7XG4gIH1cblxuICAvLyBjdGVfbWF4X3JlY3Vyc2lvbl9kZXB0aCAtIGNvbXB1dGVkOiB0cnVlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX2N0ZU1heFJlY3Vyc2lvbkRlcHRoPzogc3RyaW5nOyBcbiAgcHVibGljIGdldCBjdGVNYXhSZWN1cnNpb25EZXB0aCgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTdHJpbmdBdHRyaWJ1dGUoJ2N0ZV9tYXhfcmVjdXJzaW9uX2RlcHRoJyk7XG4gIH1cbiAgcHVibGljIHNldCBjdGVNYXhSZWN1cnNpb25EZXB0aCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fY3RlTWF4UmVjdXJzaW9uRGVwdGggPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRDdGVNYXhSZWN1cnNpb25EZXB0aCgpIHtcbiAgICB0aGlzLl9jdGVNYXhSZWN1cnNpb25EZXB0aCA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgY3RlTWF4UmVjdXJzaW9uRGVwdGhJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY3RlTWF4UmVjdXJzaW9uRGVwdGg7XG4gIH1cblxuICAvLyBkZWZhdWx0X2F1dGhlbnRpY2F0aW9uX3BsdWdpbiAtIGNvbXB1dGVkOiB0cnVlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX2RlZmF1bHRBdXRoZW50aWNhdGlvblBsdWdpbj86IHN0cmluZzsgXG4gIHB1YmxpYyBnZXQgZGVmYXVsdEF1dGhlbnRpY2F0aW9uUGx1Z2luKCkge1xuICAgIHJldHVybiB0aGlzLmdldFN0cmluZ0F0dHJpYnV0ZSgnZGVmYXVsdF9hdXRoZW50aWNhdGlvbl9wbHVnaW4nKTtcbiAgfVxuICBwdWJsaWMgc2V0IGRlZmF1bHRBdXRoZW50aWNhdGlvblBsdWdpbih2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fZGVmYXVsdEF1dGhlbnRpY2F0aW9uUGx1Z2luID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0RGVmYXVsdEF1dGhlbnRpY2F0aW9uUGx1Z2luKCkge1xuICAgIHRoaXMuX2RlZmF1bHRBdXRoZW50aWNhdGlvblBsdWdpbiA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgZGVmYXVsdEF1dGhlbnRpY2F0aW9uUGx1Z2luSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RlZmF1bHRBdXRoZW50aWNhdGlvblBsdWdpbjtcbiAgfVxuXG4gIC8vIGZvcmVpZ25fa2V5X2NoZWNrcyAtIGNvbXB1dGVkOiB0cnVlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX2ZvcmVpZ25LZXlDaGVja3M/OiBib29sZWFuIHwgY2RrdGYuSVJlc29sdmFibGU7IFxuICBwdWJsaWMgZ2V0IGZvcmVpZ25LZXlDaGVja3MoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Qm9vbGVhbkF0dHJpYnV0ZSgnZm9yZWlnbl9rZXlfY2hlY2tzJyk7XG4gIH1cbiAgcHVibGljIHNldCBmb3JlaWduS2V5Q2hlY2tzKHZhbHVlOiBib29sZWFuIHwgY2RrdGYuSVJlc29sdmFibGUpIHtcbiAgICB0aGlzLl9mb3JlaWduS2V5Q2hlY2tzID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0Rm9yZWlnbktleUNoZWNrcygpIHtcbiAgICB0aGlzLl9mb3JlaWduS2V5Q2hlY2tzID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBmb3JlaWduS2V5Q2hlY2tzSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2ZvcmVpZ25LZXlDaGVja3M7XG4gIH1cblxuICAvLyBnZW5lcmF0ZWRfcmFuZG9tX3Bhc3N3b3JkX2xlbmd0aCAtIGNvbXB1dGVkOiB0cnVlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX2dlbmVyYXRlZFJhbmRvbVBhc3N3b3JkTGVuZ3RoPzogbnVtYmVyOyBcbiAgcHVibGljIGdldCBnZW5lcmF0ZWRSYW5kb21QYXNzd29yZExlbmd0aCgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXROdW1iZXJBdHRyaWJ1dGUoJ2dlbmVyYXRlZF9yYW5kb21fcGFzc3dvcmRfbGVuZ3RoJyk7XG4gIH1cbiAgcHVibGljIHNldCBnZW5lcmF0ZWRSYW5kb21QYXNzd29yZExlbmd0aCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fZ2VuZXJhdGVkUmFuZG9tUGFzc3dvcmRMZW5ndGggPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRHZW5lcmF0ZWRSYW5kb21QYXNzd29yZExlbmd0aCgpIHtcbiAgICB0aGlzLl9nZW5lcmF0ZWRSYW5kb21QYXNzd29yZExlbmd0aCA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgZ2VuZXJhdGVkUmFuZG9tUGFzc3dvcmRMZW5ndGhJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZ2VuZXJhdGVkUmFuZG9tUGFzc3dvcmRMZW5ndGg7XG4gIH1cblxuICAvLyBnbG9iYWxfY29ubmVjdGlvbl9tZW1vcnlfbGltaXQgLSBjb21wdXRlZDogdHJ1ZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9nbG9iYWxDb25uZWN0aW9uTWVtb3J5TGltaXQ/OiBzdHJpbmc7IFxuICBwdWJsaWMgZ2V0IGdsb2JhbENvbm5lY3Rpb25NZW1vcnlMaW1pdCgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTdHJpbmdBdHRyaWJ1dGUoJ2dsb2JhbF9jb25uZWN0aW9uX21lbW9yeV9saW1pdCcpO1xuICB9XG4gIHB1YmxpYyBzZXQgZ2xvYmFsQ29ubmVjdGlvbk1lbW9yeUxpbWl0KHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9nbG9iYWxDb25uZWN0aW9uTWVtb3J5TGltaXQgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRHbG9iYWxDb25uZWN0aW9uTWVtb3J5TGltaXQoKSB7XG4gICAgdGhpcy5fZ2xvYmFsQ29ubmVjdGlvbk1lbW9yeUxpbWl0ID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBnbG9iYWxDb25uZWN0aW9uTWVtb3J5TGltaXRJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZ2xvYmFsQ29ubmVjdGlvbk1lbW9yeUxpbWl0O1xuICB9XG5cbiAgLy8gZ2xvYmFsX2Nvbm5lY3Rpb25fbWVtb3J5X3RyYWNraW5nIC0gY29tcHV0ZWQ6IHRydWUsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfZ2xvYmFsQ29ubmVjdGlvbk1lbW9yeVRyYWNraW5nPzogYm9vbGVhbiB8IGNka3RmLklSZXNvbHZhYmxlOyBcbiAgcHVibGljIGdldCBnbG9iYWxDb25uZWN0aW9uTWVtb3J5VHJhY2tpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Qm9vbGVhbkF0dHJpYnV0ZSgnZ2xvYmFsX2Nvbm5lY3Rpb25fbWVtb3J5X3RyYWNraW5nJyk7XG4gIH1cbiAgcHVibGljIHNldCBnbG9iYWxDb25uZWN0aW9uTWVtb3J5VHJhY2tpbmcodmFsdWU6IGJvb2xlYW4gfCBjZGt0Zi5JUmVzb2x2YWJsZSkge1xuICAgIHRoaXMuX2dsb2JhbENvbm5lY3Rpb25NZW1vcnlUcmFja2luZyA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldEdsb2JhbENvbm5lY3Rpb25NZW1vcnlUcmFja2luZygpIHtcbiAgICB0aGlzLl9nbG9iYWxDb25uZWN0aW9uTWVtb3J5VHJhY2tpbmcgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IGdsb2JhbENvbm5lY3Rpb25NZW1vcnlUcmFja2luZ0lucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9nbG9iYWxDb25uZWN0aW9uTWVtb3J5VHJhY2tpbmc7XG4gIH1cblxuICAvLyBncm91cF9yZXBsaWNhdGlvbl9jb25zaXN0ZW5jeSAtIGNvbXB1dGVkOiB0cnVlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX2dyb3VwUmVwbGljYXRpb25Db25zaXN0ZW5jeT86IHN0cmluZzsgXG4gIHB1YmxpYyBnZXQgZ3JvdXBSZXBsaWNhdGlvbkNvbnNpc3RlbmN5KCkge1xuICAgIHJldHVybiB0aGlzLmdldFN0cmluZ0F0dHJpYnV0ZSgnZ3JvdXBfcmVwbGljYXRpb25fY29uc2lzdGVuY3knKTtcbiAgfVxuICBwdWJsaWMgc2V0IGdyb3VwUmVwbGljYXRpb25Db25zaXN0ZW5jeSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fZ3JvdXBSZXBsaWNhdGlvbkNvbnNpc3RlbmN5ID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0R3JvdXBSZXBsaWNhdGlvbkNvbnNpc3RlbmN5KCkge1xuICAgIHRoaXMuX2dyb3VwUmVwbGljYXRpb25Db25zaXN0ZW5jeSA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgZ3JvdXBSZXBsaWNhdGlvbkNvbnNpc3RlbmN5SW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2dyb3VwUmVwbGljYXRpb25Db25zaXN0ZW5jeTtcbiAgfVxuXG4gIC8vIGluZm9ybWF0aW9uX3NjaGVtYV9zdGF0c19leHBpcnkgLSBjb21wdXRlZDogdHJ1ZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9pbmZvcm1hdGlvblNjaGVtYVN0YXRzRXhwaXJ5PzogbnVtYmVyOyBcbiAgcHVibGljIGdldCBpbmZvcm1hdGlvblNjaGVtYVN0YXRzRXhwaXJ5KCkge1xuICAgIHJldHVybiB0aGlzLmdldE51bWJlckF0dHJpYnV0ZSgnaW5mb3JtYXRpb25fc2NoZW1hX3N0YXRzX2V4cGlyeScpO1xuICB9XG4gIHB1YmxpYyBzZXQgaW5mb3JtYXRpb25TY2hlbWFTdGF0c0V4cGlyeSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5faW5mb3JtYXRpb25TY2hlbWFTdGF0c0V4cGlyeSA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldEluZm9ybWF0aW9uU2NoZW1hU3RhdHNFeHBpcnkoKSB7XG4gICAgdGhpcy5faW5mb3JtYXRpb25TY2hlbWFTdGF0c0V4cGlyeSA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgaW5mb3JtYXRpb25TY2hlbWFTdGF0c0V4cGlyeUlucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9pbmZvcm1hdGlvblNjaGVtYVN0YXRzRXhwaXJ5O1xuICB9XG5cbiAgLy8gaW5ub2RiX2J1ZmZlcl9wb29sX2R1bXBfcGN0IC0gY29tcHV0ZWQ6IHRydWUsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfaW5ub2RiQnVmZmVyUG9vbER1bXBQY3Q/OiBudW1iZXI7IFxuICBwdWJsaWMgZ2V0IGlubm9kYkJ1ZmZlclBvb2xEdW1wUGN0KCkge1xuICAgIHJldHVybiB0aGlzLmdldE51bWJlckF0dHJpYnV0ZSgnaW5ub2RiX2J1ZmZlcl9wb29sX2R1bXBfcGN0Jyk7XG4gIH1cbiAgcHVibGljIHNldCBpbm5vZGJCdWZmZXJQb29sRHVtcFBjdCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5faW5ub2RiQnVmZmVyUG9vbER1bXBQY3QgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRJbm5vZGJCdWZmZXJQb29sRHVtcFBjdCgpIHtcbiAgICB0aGlzLl9pbm5vZGJCdWZmZXJQb29sRHVtcFBjdCA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgaW5ub2RiQnVmZmVyUG9vbER1bXBQY3RJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5faW5ub2RiQnVmZmVyUG9vbER1bXBQY3Q7XG4gIH1cblxuICAvLyBpbm5vZGJfYnVmZmVyX3Bvb2xfaW5zdGFuY2VzIC0gY29tcHV0ZWQ6IHRydWUsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfaW5ub2RiQnVmZmVyUG9vbEluc3RhbmNlcz86IG51bWJlcjsgXG4gIHB1YmxpYyBnZXQgaW5ub2RiQnVmZmVyUG9vbEluc3RhbmNlcygpIHtcbiAgICByZXR1cm4gdGhpcy5nZXROdW1iZXJBdHRyaWJ1dGUoJ2lubm9kYl9idWZmZXJfcG9vbF9pbnN0YW5jZXMnKTtcbiAgfVxuICBwdWJsaWMgc2V0IGlubm9kYkJ1ZmZlclBvb2xJbnN0YW5jZXModmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX2lubm9kYkJ1ZmZlclBvb2xJbnN0YW5jZXMgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRJbm5vZGJCdWZmZXJQb29sSW5zdGFuY2VzKCkge1xuICAgIHRoaXMuX2lubm9kYkJ1ZmZlclBvb2xJbnN0YW5jZXMgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IGlubm9kYkJ1ZmZlclBvb2xJbnN0YW5jZXNJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5faW5ub2RiQnVmZmVyUG9vbEluc3RhbmNlcztcbiAgfVxuXG4gIC8vIGlubm9kYl9idWZmZXJfcG9vbF9zaXplIC0gY29tcHV0ZWQ6IHRydWUsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfaW5ub2RiQnVmZmVyUG9vbFNpemU/OiBzdHJpbmc7IFxuICBwdWJsaWMgZ2V0IGlubm9kYkJ1ZmZlclBvb2xTaXplKCkge1xuICAgIHJldHVybiB0aGlzLmdldFN0cmluZ0F0dHJpYnV0ZSgnaW5ub2RiX2J1ZmZlcl9wb29sX3NpemUnKTtcbiAgfVxuICBwdWJsaWMgc2V0IGlubm9kYkJ1ZmZlclBvb2xTaXplKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9pbm5vZGJCdWZmZXJQb29sU2l6ZSA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldElubm9kYkJ1ZmZlclBvb2xTaXplKCkge1xuICAgIHRoaXMuX2lubm9kYkJ1ZmZlclBvb2xTaXplID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBpbm5vZGJCdWZmZXJQb29sU2l6ZUlucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9pbm5vZGJCdWZmZXJQb29sU2l6ZTtcbiAgfVxuXG4gIC8vIGlubm9kYl9kZGxfYnVmZmVyX3NpemUgLSBjb21wdXRlZDogdHJ1ZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9pbm5vZGJEZGxCdWZmZXJTaXplPzogc3RyaW5nOyBcbiAgcHVibGljIGdldCBpbm5vZGJEZGxCdWZmZXJTaXplKCkge1xuICAgIHJldHVybiB0aGlzLmdldFN0cmluZ0F0dHJpYnV0ZSgnaW5ub2RiX2RkbF9idWZmZXJfc2l6ZScpO1xuICB9XG4gIHB1YmxpYyBzZXQgaW5ub2RiRGRsQnVmZmVyU2l6ZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5faW5ub2RiRGRsQnVmZmVyU2l6ZSA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldElubm9kYkRkbEJ1ZmZlclNpemUoKSB7XG4gICAgdGhpcy5faW5ub2RiRGRsQnVmZmVyU2l6ZSA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgaW5ub2RiRGRsQnVmZmVyU2l6ZUlucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9pbm5vZGJEZGxCdWZmZXJTaXplO1xuICB9XG5cbiAgLy8gaW5ub2RiX2RkbF90aHJlYWRzIC0gY29tcHV0ZWQ6IHRydWUsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfaW5ub2RiRGRsVGhyZWFkcz86IG51bWJlcjsgXG4gIHB1YmxpYyBnZXQgaW5ub2RiRGRsVGhyZWFkcygpIHtcbiAgICByZXR1cm4gdGhpcy5nZXROdW1iZXJBdHRyaWJ1dGUoJ2lubm9kYl9kZGxfdGhyZWFkcycpO1xuICB9XG4gIHB1YmxpYyBzZXQgaW5ub2RiRGRsVGhyZWFkcyh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5faW5ub2RiRGRsVGhyZWFkcyA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldElubm9kYkRkbFRocmVhZHMoKSB7XG4gICAgdGhpcy5faW5ub2RiRGRsVGhyZWFkcyA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgaW5ub2RiRGRsVGhyZWFkc0lucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9pbm5vZGJEZGxUaHJlYWRzO1xuICB9XG5cbiAgLy8gaW5ub2RiX2Z0X2VuYWJsZV9zdG9wd29yZCAtIGNvbXB1dGVkOiB0cnVlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX2lubm9kYkZ0RW5hYmxlU3RvcHdvcmQ/OiBib29sZWFuIHwgY2RrdGYuSVJlc29sdmFibGU7IFxuICBwdWJsaWMgZ2V0IGlubm9kYkZ0RW5hYmxlU3RvcHdvcmQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Qm9vbGVhbkF0dHJpYnV0ZSgnaW5ub2RiX2Z0X2VuYWJsZV9zdG9wd29yZCcpO1xuICB9XG4gIHB1YmxpYyBzZXQgaW5ub2RiRnRFbmFibGVTdG9wd29yZCh2YWx1ZTogYm9vbGVhbiB8IGNka3RmLklSZXNvbHZhYmxlKSB7XG4gICAgdGhpcy5faW5ub2RiRnRFbmFibGVTdG9wd29yZCA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldElubm9kYkZ0RW5hYmxlU3RvcHdvcmQoKSB7XG4gICAgdGhpcy5faW5ub2RiRnRFbmFibGVTdG9wd29yZCA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgaW5ub2RiRnRFbmFibGVTdG9wd29yZElucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9pbm5vZGJGdEVuYWJsZVN0b3B3b3JkO1xuICB9XG5cbiAgLy8gaW5ub2RiX2Z0X21heF90b2tlbl9zaXplIC0gY29tcHV0ZWQ6IHRydWUsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfaW5ub2RiRnRNYXhUb2tlblNpemU/OiBudW1iZXI7IFxuICBwdWJsaWMgZ2V0IGlubm9kYkZ0TWF4VG9rZW5TaXplKCkge1xuICAgIHJldHVybiB0aGlzLmdldE51bWJlckF0dHJpYnV0ZSgnaW5ub2RiX2Z0X21heF90b2tlbl9zaXplJyk7XG4gIH1cbiAgcHVibGljIHNldCBpbm5vZGJGdE1heFRva2VuU2l6ZSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5faW5ub2RiRnRNYXhUb2tlblNpemUgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRJbm5vZGJGdE1heFRva2VuU2l6ZSgpIHtcbiAgICB0aGlzLl9pbm5vZGJGdE1heFRva2VuU2l6ZSA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgaW5ub2RiRnRNYXhUb2tlblNpemVJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5faW5ub2RiRnRNYXhUb2tlblNpemU7XG4gIH1cblxuICAvLyBpbm5vZGJfZnRfbWluX3Rva2VuX3NpemUgLSBjb21wdXRlZDogdHJ1ZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9pbm5vZGJGdE1pblRva2VuU2l6ZT86IG51bWJlcjsgXG4gIHB1YmxpYyBnZXQgaW5ub2RiRnRNaW5Ub2tlblNpemUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TnVtYmVyQXR0cmlidXRlKCdpbm5vZGJfZnRfbWluX3Rva2VuX3NpemUnKTtcbiAgfVxuICBwdWJsaWMgc2V0IGlubm9kYkZ0TWluVG9rZW5TaXplKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLl9pbm5vZGJGdE1pblRva2VuU2l6ZSA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldElubm9kYkZ0TWluVG9rZW5TaXplKCkge1xuICAgIHRoaXMuX2lubm9kYkZ0TWluVG9rZW5TaXplID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBpbm5vZGJGdE1pblRva2VuU2l6ZUlucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9pbm5vZGJGdE1pblRva2VuU2l6ZTtcbiAgfVxuXG4gIC8vIGlubm9kYl9mdF9udW1fd29yZF9vcHRpbWl6ZSAtIGNvbXB1dGVkOiB0cnVlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX2lubm9kYkZ0TnVtV29yZE9wdGltaXplPzogbnVtYmVyOyBcbiAgcHVibGljIGdldCBpbm5vZGJGdE51bVdvcmRPcHRpbWl6ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXROdW1iZXJBdHRyaWJ1dGUoJ2lubm9kYl9mdF9udW1fd29yZF9vcHRpbWl6ZScpO1xuICB9XG4gIHB1YmxpYyBzZXQgaW5ub2RiRnROdW1Xb3JkT3B0aW1pemUodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX2lubm9kYkZ0TnVtV29yZE9wdGltaXplID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0SW5ub2RiRnROdW1Xb3JkT3B0aW1pemUoKSB7XG4gICAgdGhpcy5faW5ub2RiRnROdW1Xb3JkT3B0aW1pemUgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IGlubm9kYkZ0TnVtV29yZE9wdGltaXplSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lubm9kYkZ0TnVtV29yZE9wdGltaXplO1xuICB9XG5cbiAgLy8gaW5ub2RiX2Z0X3Jlc3VsdF9jYWNoZV9saW1pdCAtIGNvbXB1dGVkOiB0cnVlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX2lubm9kYkZ0UmVzdWx0Q2FjaGVMaW1pdD86IHN0cmluZzsgXG4gIHB1YmxpYyBnZXQgaW5ub2RiRnRSZXN1bHRDYWNoZUxpbWl0KCkge1xuICAgIHJldHVybiB0aGlzLmdldFN0cmluZ0F0dHJpYnV0ZSgnaW5ub2RiX2Z0X3Jlc3VsdF9jYWNoZV9saW1pdCcpO1xuICB9XG4gIHB1YmxpYyBzZXQgaW5ub2RiRnRSZXN1bHRDYWNoZUxpbWl0KHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9pbm5vZGJGdFJlc3VsdENhY2hlTGltaXQgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRJbm5vZGJGdFJlc3VsdENhY2hlTGltaXQoKSB7XG4gICAgdGhpcy5faW5ub2RiRnRSZXN1bHRDYWNoZUxpbWl0ID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBpbm5vZGJGdFJlc3VsdENhY2hlTGltaXRJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5faW5ub2RiRnRSZXN1bHRDYWNoZUxpbWl0O1xuICB9XG5cbiAgLy8gaW5ub2RiX2Z0X3NlcnZlcl9zdG9wd29yZF90YWJsZSAtIGNvbXB1dGVkOiB0cnVlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX2lubm9kYkZ0U2VydmVyU3RvcHdvcmRUYWJsZT86IHN0cmluZzsgXG4gIHB1YmxpYyBnZXQgaW5ub2RiRnRTZXJ2ZXJTdG9wd29yZFRhYmxlKCkge1xuICAgIHJldHVybiB0aGlzLmdldFN0cmluZ0F0dHJpYnV0ZSgnaW5ub2RiX2Z0X3NlcnZlcl9zdG9wd29yZF90YWJsZScpO1xuICB9XG4gIHB1YmxpYyBzZXQgaW5ub2RiRnRTZXJ2ZXJTdG9wd29yZFRhYmxlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9pbm5vZGJGdFNlcnZlclN0b3B3b3JkVGFibGUgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRJbm5vZGJGdFNlcnZlclN0b3B3b3JkVGFibGUoKSB7XG4gICAgdGhpcy5faW5ub2RiRnRTZXJ2ZXJTdG9wd29yZFRhYmxlID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBpbm5vZGJGdFNlcnZlclN0b3B3b3JkVGFibGVJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5faW5ub2RiRnRTZXJ2ZXJTdG9wd29yZFRhYmxlO1xuICB9XG5cbiAgLy8gaW5ub2RiX2xvY2tfd2FpdF90aW1lb3V0IC0gY29tcHV0ZWQ6IHRydWUsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfaW5ub2RiTG9ja1dhaXRUaW1lb3V0PzogbnVtYmVyOyBcbiAgcHVibGljIGdldCBpbm5vZGJMb2NrV2FpdFRpbWVvdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TnVtYmVyQXR0cmlidXRlKCdpbm5vZGJfbG9ja193YWl0X3RpbWVvdXQnKTtcbiAgfVxuICBwdWJsaWMgc2V0IGlubm9kYkxvY2tXYWl0VGltZW91dCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5faW5ub2RiTG9ja1dhaXRUaW1lb3V0ID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0SW5ub2RiTG9ja1dhaXRUaW1lb3V0KCkge1xuICAgIHRoaXMuX2lubm9kYkxvY2tXYWl0VGltZW91dCA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgaW5ub2RiTG9ja1dhaXRUaW1lb3V0SW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lubm9kYkxvY2tXYWl0VGltZW91dDtcbiAgfVxuXG4gIC8vIGlubm9kYl9sb2dfd3JpdGVyX3RocmVhZHMgLSBjb21wdXRlZDogdHJ1ZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9pbm5vZGJMb2dXcml0ZXJUaHJlYWRzPzogYm9vbGVhbiB8IGNka3RmLklSZXNvbHZhYmxlOyBcbiAgcHVibGljIGdldCBpbm5vZGJMb2dXcml0ZXJUaHJlYWRzKCkge1xuICAgIHJldHVybiB0aGlzLmdldEJvb2xlYW5BdHRyaWJ1dGUoJ2lubm9kYl9sb2dfd3JpdGVyX3RocmVhZHMnKTtcbiAgfVxuICBwdWJsaWMgc2V0IGlubm9kYkxvZ1dyaXRlclRocmVhZHModmFsdWU6IGJvb2xlYW4gfCBjZGt0Zi5JUmVzb2x2YWJsZSkge1xuICAgIHRoaXMuX2lubm9kYkxvZ1dyaXRlclRocmVhZHMgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRJbm5vZGJMb2dXcml0ZXJUaHJlYWRzKCkge1xuICAgIHRoaXMuX2lubm9kYkxvZ1dyaXRlclRocmVhZHMgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IGlubm9kYkxvZ1dyaXRlclRocmVhZHNJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5faW5ub2RiTG9nV3JpdGVyVGhyZWFkcztcbiAgfVxuXG4gIC8vIGlubm9kYl9tYXhfcHVyZ2VfbGFnIC0gY29tcHV0ZWQ6IHRydWUsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfaW5ub2RiTWF4UHVyZ2VMYWc/OiBzdHJpbmc7IFxuICBwdWJsaWMgZ2V0IGlubm9kYk1heFB1cmdlTGFnKCkge1xuICAgIHJldHVybiB0aGlzLmdldFN0cmluZ0F0dHJpYnV0ZSgnaW5ub2RiX21heF9wdXJnZV9sYWcnKTtcbiAgfVxuICBwdWJsaWMgc2V0IGlubm9kYk1heFB1cmdlTGFnKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9pbm5vZGJNYXhQdXJnZUxhZyA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldElubm9kYk1heFB1cmdlTGFnKCkge1xuICAgIHRoaXMuX2lubm9kYk1heFB1cmdlTGFnID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBpbm5vZGJNYXhQdXJnZUxhZ0lucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9pbm5vZGJNYXhQdXJnZUxhZztcbiAgfVxuXG4gIC8vIGlubm9kYl9tYXhfcHVyZ2VfbGFnX2RlbGF5IC0gY29tcHV0ZWQ6IHRydWUsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfaW5ub2RiTWF4UHVyZ2VMYWdEZWxheT86IG51bWJlcjsgXG4gIHB1YmxpYyBnZXQgaW5ub2RiTWF4UHVyZ2VMYWdEZWxheSgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXROdW1iZXJBdHRyaWJ1dGUoJ2lubm9kYl9tYXhfcHVyZ2VfbGFnX2RlbGF5Jyk7XG4gIH1cbiAgcHVibGljIHNldCBpbm5vZGJNYXhQdXJnZUxhZ0RlbGF5KHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLl9pbm5vZGJNYXhQdXJnZUxhZ0RlbGF5ID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0SW5ub2RiTWF4UHVyZ2VMYWdEZWxheSgpIHtcbiAgICB0aGlzLl9pbm5vZGJNYXhQdXJnZUxhZ0RlbGF5ID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBpbm5vZGJNYXhQdXJnZUxhZ0RlbGF5SW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lubm9kYk1heFB1cmdlTGFnRGVsYXk7XG4gIH1cblxuICAvLyBpbm5vZGJfc3RhdHNfcGVyc2lzdGVudF9zYW1wbGVfcGFnZXMgLSBjb21wdXRlZDogdHJ1ZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9pbm5vZGJTdGF0c1BlcnNpc3RlbnRTYW1wbGVQYWdlcz86IHN0cmluZzsgXG4gIHB1YmxpYyBnZXQgaW5ub2RiU3RhdHNQZXJzaXN0ZW50U2FtcGxlUGFnZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U3RyaW5nQXR0cmlidXRlKCdpbm5vZGJfc3RhdHNfcGVyc2lzdGVudF9zYW1wbGVfcGFnZXMnKTtcbiAgfVxuICBwdWJsaWMgc2V0IGlubm9kYlN0YXRzUGVyc2lzdGVudFNhbXBsZVBhZ2VzKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9pbm5vZGJTdGF0c1BlcnNpc3RlbnRTYW1wbGVQYWdlcyA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldElubm9kYlN0YXRzUGVyc2lzdGVudFNhbXBsZVBhZ2VzKCkge1xuICAgIHRoaXMuX2lubm9kYlN0YXRzUGVyc2lzdGVudFNhbXBsZVBhZ2VzID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBpbm5vZGJTdGF0c1BlcnNpc3RlbnRTYW1wbGVQYWdlc0lucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9pbm5vZGJTdGF0c1BlcnNpc3RlbnRTYW1wbGVQYWdlcztcbiAgfVxuXG4gIC8vIGlubm9kYl9zdGF0c190cmFuc2llbnRfc2FtcGxlX3BhZ2VzIC0gY29tcHV0ZWQ6IHRydWUsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfaW5ub2RiU3RhdHNUcmFuc2llbnRTYW1wbGVQYWdlcz86IHN0cmluZzsgXG4gIHB1YmxpYyBnZXQgaW5ub2RiU3RhdHNUcmFuc2llbnRTYW1wbGVQYWdlcygpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTdHJpbmdBdHRyaWJ1dGUoJ2lubm9kYl9zdGF0c190cmFuc2llbnRfc2FtcGxlX3BhZ2VzJyk7XG4gIH1cbiAgcHVibGljIHNldCBpbm5vZGJTdGF0c1RyYW5zaWVudFNhbXBsZVBhZ2VzKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9pbm5vZGJTdGF0c1RyYW5zaWVudFNhbXBsZVBhZ2VzID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0SW5ub2RiU3RhdHNUcmFuc2llbnRTYW1wbGVQYWdlcygpIHtcbiAgICB0aGlzLl9pbm5vZGJTdGF0c1RyYW5zaWVudFNhbXBsZVBhZ2VzID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBpbm5vZGJTdGF0c1RyYW5zaWVudFNhbXBsZVBhZ2VzSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lubm9kYlN0YXRzVHJhbnNpZW50U2FtcGxlUGFnZXM7XG4gIH1cblxuICAvLyBpbnRlcmFjdGl2ZV90aW1lb3V0IC0gY29tcHV0ZWQ6IHRydWUsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfaW50ZXJhY3RpdmVUaW1lb3V0PzogbnVtYmVyOyBcbiAgcHVibGljIGdldCBpbnRlcmFjdGl2ZVRpbWVvdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TnVtYmVyQXR0cmlidXRlKCdpbnRlcmFjdGl2ZV90aW1lb3V0Jyk7XG4gIH1cbiAgcHVibGljIHNldCBpbnRlcmFjdGl2ZVRpbWVvdXQodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX2ludGVyYWN0aXZlVGltZW91dCA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldEludGVyYWN0aXZlVGltZW91dCgpIHtcbiAgICB0aGlzLl9pbnRlcmFjdGl2ZVRpbWVvdXQgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IGludGVyYWN0aXZlVGltZW91dElucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9pbnRlcmFjdGl2ZVRpbWVvdXQ7XG4gIH1cblxuICAvLyBsb2NhbF9pbmZpbGUgLSBjb21wdXRlZDogdHJ1ZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9sb2NhbEluZmlsZT86IGJvb2xlYW4gfCBjZGt0Zi5JUmVzb2x2YWJsZTsgXG4gIHB1YmxpYyBnZXQgbG9jYWxJbmZpbGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Qm9vbGVhbkF0dHJpYnV0ZSgnbG9jYWxfaW5maWxlJyk7XG4gIH1cbiAgcHVibGljIHNldCBsb2NhbEluZmlsZSh2YWx1ZTogYm9vbGVhbiB8IGNka3RmLklSZXNvbHZhYmxlKSB7XG4gICAgdGhpcy5fbG9jYWxJbmZpbGUgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRMb2NhbEluZmlsZSgpIHtcbiAgICB0aGlzLl9sb2NhbEluZmlsZSA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgbG9jYWxJbmZpbGVJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fbG9jYWxJbmZpbGU7XG4gIH1cblxuICAvLyBtYW5kYXRvcnlfcm9sZXMgLSBjb21wdXRlZDogdHJ1ZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9tYW5kYXRvcnlSb2xlcz86IHN0cmluZzsgXG4gIHB1YmxpYyBnZXQgbWFuZGF0b3J5Um9sZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U3RyaW5nQXR0cmlidXRlKCdtYW5kYXRvcnlfcm9sZXMnKTtcbiAgfVxuICBwdWJsaWMgc2V0IG1hbmRhdG9yeVJvbGVzKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9tYW5kYXRvcnlSb2xlcyA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldE1hbmRhdG9yeVJvbGVzKCkge1xuICAgIHRoaXMuX21hbmRhdG9yeVJvbGVzID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBtYW5kYXRvcnlSb2xlc0lucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9tYW5kYXRvcnlSb2xlcztcbiAgfVxuXG4gIC8vIG1heF9hbGxvd2VkX3BhY2tldCAtIGNvbXB1dGVkOiB0cnVlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX21heEFsbG93ZWRQYWNrZXQ/OiBudW1iZXI7IFxuICBwdWJsaWMgZ2V0IG1heEFsbG93ZWRQYWNrZXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TnVtYmVyQXR0cmlidXRlKCdtYXhfYWxsb3dlZF9wYWNrZXQnKTtcbiAgfVxuICBwdWJsaWMgc2V0IG1heEFsbG93ZWRQYWNrZXQodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX21heEFsbG93ZWRQYWNrZXQgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRNYXhBbGxvd2VkUGFja2V0KCkge1xuICAgIHRoaXMuX21heEFsbG93ZWRQYWNrZXQgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IG1heEFsbG93ZWRQYWNrZXRJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fbWF4QWxsb3dlZFBhY2tldDtcbiAgfVxuXG4gIC8vIG1heF9iaW5sb2dfY2FjaGVfc2l6ZSAtIGNvbXB1dGVkOiB0cnVlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX21heEJpbmxvZ0NhY2hlU2l6ZT86IHN0cmluZzsgXG4gIHB1YmxpYyBnZXQgbWF4QmlubG9nQ2FjaGVTaXplKCkge1xuICAgIHJldHVybiB0aGlzLmdldFN0cmluZ0F0dHJpYnV0ZSgnbWF4X2JpbmxvZ19jYWNoZV9zaXplJyk7XG4gIH1cbiAgcHVibGljIHNldCBtYXhCaW5sb2dDYWNoZVNpemUodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX21heEJpbmxvZ0NhY2hlU2l6ZSA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldE1heEJpbmxvZ0NhY2hlU2l6ZSgpIHtcbiAgICB0aGlzLl9tYXhCaW5sb2dDYWNoZVNpemUgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IG1heEJpbmxvZ0NhY2hlU2l6ZUlucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9tYXhCaW5sb2dDYWNoZVNpemU7XG4gIH1cblxuICAvLyBtYXhfY29ubmVjdF9lcnJvcnMgLSBjb21wdXRlZDogdHJ1ZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9tYXhDb25uZWN0RXJyb3JzPzogc3RyaW5nOyBcbiAgcHVibGljIGdldCBtYXhDb25uZWN0RXJyb3JzKCkge1xuICAgIHJldHVybiB0aGlzLmdldFN0cmluZ0F0dHJpYnV0ZSgnbWF4X2Nvbm5lY3RfZXJyb3JzJyk7XG4gIH1cbiAgcHVibGljIHNldCBtYXhDb25uZWN0RXJyb3JzKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9tYXhDb25uZWN0RXJyb3JzID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0TWF4Q29ubmVjdEVycm9ycygpIHtcbiAgICB0aGlzLl9tYXhDb25uZWN0RXJyb3JzID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBtYXhDb25uZWN0RXJyb3JzSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX21heENvbm5lY3RFcnJvcnM7XG4gIH1cblxuICAvLyBtYXhfY29ubmVjdGlvbnMgLSBjb21wdXRlZDogdHJ1ZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9tYXhDb25uZWN0aW9ucz86IG51bWJlcjsgXG4gIHB1YmxpYyBnZXQgbWF4Q29ubmVjdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TnVtYmVyQXR0cmlidXRlKCdtYXhfY29ubmVjdGlvbnMnKTtcbiAgfVxuICBwdWJsaWMgc2V0IG1heENvbm5lY3Rpb25zKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLl9tYXhDb25uZWN0aW9ucyA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldE1heENvbm5lY3Rpb25zKCkge1xuICAgIHRoaXMuX21heENvbm5lY3Rpb25zID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBtYXhDb25uZWN0aW9uc0lucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9tYXhDb25uZWN0aW9ucztcbiAgfVxuXG4gIC8vIG1heF9leGVjdXRpb25fdGltZSAtIGNvbXB1dGVkOiB0cnVlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX21heEV4ZWN1dGlvblRpbWU/OiBzdHJpbmc7IFxuICBwdWJsaWMgZ2V0IG1heEV4ZWN1dGlvblRpbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U3RyaW5nQXR0cmlidXRlKCdtYXhfZXhlY3V0aW9uX3RpbWUnKTtcbiAgfVxuICBwdWJsaWMgc2V0IG1heEV4ZWN1dGlvblRpbWUodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX21heEV4ZWN1dGlvblRpbWUgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRNYXhFeGVjdXRpb25UaW1lKCkge1xuICAgIHRoaXMuX21heEV4ZWN1dGlvblRpbWUgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IG1heEV4ZWN1dGlvblRpbWVJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fbWF4RXhlY3V0aW9uVGltZTtcbiAgfVxuXG4gIC8vIG1heF9oZWFwX3RhYmxlX3NpemUgLSBjb21wdXRlZDogdHJ1ZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9tYXhIZWFwVGFibGVTaXplPzogc3RyaW5nOyBcbiAgcHVibGljIGdldCBtYXhIZWFwVGFibGVTaXplKCkge1xuICAgIHJldHVybiB0aGlzLmdldFN0cmluZ0F0dHJpYnV0ZSgnbWF4X2hlYXBfdGFibGVfc2l6ZScpO1xuICB9XG4gIHB1YmxpYyBzZXQgbWF4SGVhcFRhYmxlU2l6ZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fbWF4SGVhcFRhYmxlU2l6ZSA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldE1heEhlYXBUYWJsZVNpemUoKSB7XG4gICAgdGhpcy5fbWF4SGVhcFRhYmxlU2l6ZSA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgbWF4SGVhcFRhYmxlU2l6ZUlucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9tYXhIZWFwVGFibGVTaXplO1xuICB9XG5cbiAgLy8gbWF4X3ByZXBhcmVkX3N0bXRfY291bnQgLSBjb21wdXRlZDogdHJ1ZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9tYXhQcmVwYXJlZFN0bXRDb3VudD86IG51bWJlcjsgXG4gIHB1YmxpYyBnZXQgbWF4UHJlcGFyZWRTdG10Q291bnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TnVtYmVyQXR0cmlidXRlKCdtYXhfcHJlcGFyZWRfc3RtdF9jb3VudCcpO1xuICB9XG4gIHB1YmxpYyBzZXQgbWF4UHJlcGFyZWRTdG10Q291bnQodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX21heFByZXBhcmVkU3RtdENvdW50ID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0TWF4UHJlcGFyZWRTdG10Q291bnQoKSB7XG4gICAgdGhpcy5fbWF4UHJlcGFyZWRTdG10Q291bnQgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IG1heFByZXBhcmVkU3RtdENvdW50SW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX21heFByZXBhcmVkU3RtdENvdW50O1xuICB9XG5cbiAgLy8gbXlzcWxfZmlyZXdhbGxfbW9kZSAtIGNvbXB1dGVkOiB0cnVlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX215c3FsRmlyZXdhbGxNb2RlPzogYm9vbGVhbiB8IGNka3RmLklSZXNvbHZhYmxlOyBcbiAgcHVibGljIGdldCBteXNxbEZpcmV3YWxsTW9kZSgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRCb29sZWFuQXR0cmlidXRlKCdteXNxbF9maXJld2FsbF9tb2RlJyk7XG4gIH1cbiAgcHVibGljIHNldCBteXNxbEZpcmV3YWxsTW9kZSh2YWx1ZTogYm9vbGVhbiB8IGNka3RmLklSZXNvbHZhYmxlKSB7XG4gICAgdGhpcy5fbXlzcWxGaXJld2FsbE1vZGUgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRNeXNxbEZpcmV3YWxsTW9kZSgpIHtcbiAgICB0aGlzLl9teXNxbEZpcmV3YWxsTW9kZSA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgbXlzcWxGaXJld2FsbE1vZGVJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fbXlzcWxGaXJld2FsbE1vZGU7XG4gIH1cblxuICAvLyBteXNxbF96c3RkX2RlZmF1bHRfY29tcHJlc3Npb25fbGV2ZWwgLSBjb21wdXRlZDogdHJ1ZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9teXNxbFpzdGREZWZhdWx0Q29tcHJlc3Npb25MZXZlbD86IG51bWJlcjsgXG4gIHB1YmxpYyBnZXQgbXlzcWxac3RkRGVmYXVsdENvbXByZXNzaW9uTGV2ZWwoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TnVtYmVyQXR0cmlidXRlKCdteXNxbF96c3RkX2RlZmF1bHRfY29tcHJlc3Npb25fbGV2ZWwnKTtcbiAgfVxuICBwdWJsaWMgc2V0IG15c3FsWnN0ZERlZmF1bHRDb21wcmVzc2lvbkxldmVsKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLl9teXNxbFpzdGREZWZhdWx0Q29tcHJlc3Npb25MZXZlbCA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldE15c3FsWnN0ZERlZmF1bHRDb21wcmVzc2lvbkxldmVsKCkge1xuICAgIHRoaXMuX215c3FsWnN0ZERlZmF1bHRDb21wcmVzc2lvbkxldmVsID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBteXNxbFpzdGREZWZhdWx0Q29tcHJlc3Npb25MZXZlbElucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9teXNxbFpzdGREZWZhdWx0Q29tcHJlc3Npb25MZXZlbDtcbiAgfVxuXG4gIC8vIG15c3FseF9jb25uZWN0X3RpbWVvdXQgLSBjb21wdXRlZDogdHJ1ZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9teXNxbHhDb25uZWN0VGltZW91dD86IG51bWJlcjsgXG4gIHB1YmxpYyBnZXQgbXlzcWx4Q29ubmVjdFRpbWVvdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TnVtYmVyQXR0cmlidXRlKCdteXNxbHhfY29ubmVjdF90aW1lb3V0Jyk7XG4gIH1cbiAgcHVibGljIHNldCBteXNxbHhDb25uZWN0VGltZW91dCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fbXlzcWx4Q29ubmVjdFRpbWVvdXQgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRNeXNxbHhDb25uZWN0VGltZW91dCgpIHtcbiAgICB0aGlzLl9teXNxbHhDb25uZWN0VGltZW91dCA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgbXlzcWx4Q29ubmVjdFRpbWVvdXRJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fbXlzcWx4Q29ubmVjdFRpbWVvdXQ7XG4gIH1cblxuICAvLyBteXNxbHhfZGVmbGF0ZV9kZWZhdWx0X2NvbXByZXNzaW9uX2xldmVsIC0gY29tcHV0ZWQ6IHRydWUsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfbXlzcWx4RGVmbGF0ZURlZmF1bHRDb21wcmVzc2lvbkxldmVsPzogbnVtYmVyOyBcbiAgcHVibGljIGdldCBteXNxbHhEZWZsYXRlRGVmYXVsdENvbXByZXNzaW9uTGV2ZWwoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TnVtYmVyQXR0cmlidXRlKCdteXNxbHhfZGVmbGF0ZV9kZWZhdWx0X2NvbXByZXNzaW9uX2xldmVsJyk7XG4gIH1cbiAgcHVibGljIHNldCBteXNxbHhEZWZsYXRlRGVmYXVsdENvbXByZXNzaW9uTGV2ZWwodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX215c3FseERlZmxhdGVEZWZhdWx0Q29tcHJlc3Npb25MZXZlbCA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldE15c3FseERlZmxhdGVEZWZhdWx0Q29tcHJlc3Npb25MZXZlbCgpIHtcbiAgICB0aGlzLl9teXNxbHhEZWZsYXRlRGVmYXVsdENvbXByZXNzaW9uTGV2ZWwgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IG15c3FseERlZmxhdGVEZWZhdWx0Q29tcHJlc3Npb25MZXZlbElucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9teXNxbHhEZWZsYXRlRGVmYXVsdENvbXByZXNzaW9uTGV2ZWw7XG4gIH1cblxuICAvLyBteXNxbHhfZGVmbGF0ZV9tYXhfY2xpZW50X2NvbXByZXNzaW9uX2xldmVsIC0gY29tcHV0ZWQ6IHRydWUsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfbXlzcWx4RGVmbGF0ZU1heENsaWVudENvbXByZXNzaW9uTGV2ZWw/OiBudW1iZXI7IFxuICBwdWJsaWMgZ2V0IG15c3FseERlZmxhdGVNYXhDbGllbnRDb21wcmVzc2lvbkxldmVsKCkge1xuICAgIHJldHVybiB0aGlzLmdldE51bWJlckF0dHJpYnV0ZSgnbXlzcWx4X2RlZmxhdGVfbWF4X2NsaWVudF9jb21wcmVzc2lvbl9sZXZlbCcpO1xuICB9XG4gIHB1YmxpYyBzZXQgbXlzcWx4RGVmbGF0ZU1heENsaWVudENvbXByZXNzaW9uTGV2ZWwodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX215c3FseERlZmxhdGVNYXhDbGllbnRDb21wcmVzc2lvbkxldmVsID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0TXlzcWx4RGVmbGF0ZU1heENsaWVudENvbXByZXNzaW9uTGV2ZWwoKSB7XG4gICAgdGhpcy5fbXlzcWx4RGVmbGF0ZU1heENsaWVudENvbXByZXNzaW9uTGV2ZWwgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IG15c3FseERlZmxhdGVNYXhDbGllbnRDb21wcmVzc2lvbkxldmVsSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX215c3FseERlZmxhdGVNYXhDbGllbnRDb21wcmVzc2lvbkxldmVsO1xuICB9XG5cbiAgLy8gbXlzcWx4X2RvY3VtZW50X2lkX3VuaXF1ZV9wcmVmaXggLSBjb21wdXRlZDogdHJ1ZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9teXNxbHhEb2N1bWVudElkVW5pcXVlUHJlZml4PzogbnVtYmVyOyBcbiAgcHVibGljIGdldCBteXNxbHhEb2N1bWVudElkVW5pcXVlUHJlZml4KCkge1xuICAgIHJldHVybiB0aGlzLmdldE51bWJlckF0dHJpYnV0ZSgnbXlzcWx4X2RvY3VtZW50X2lkX3VuaXF1ZV9wcmVmaXgnKTtcbiAgfVxuICBwdWJsaWMgc2V0IG15c3FseERvY3VtZW50SWRVbmlxdWVQcmVmaXgodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX215c3FseERvY3VtZW50SWRVbmlxdWVQcmVmaXggPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRNeXNxbHhEb2N1bWVudElkVW5pcXVlUHJlZml4KCkge1xuICAgIHRoaXMuX215c3FseERvY3VtZW50SWRVbmlxdWVQcmVmaXggPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IG15c3FseERvY3VtZW50SWRVbmlxdWVQcmVmaXhJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fbXlzcWx4RG9jdW1lbnRJZFVuaXF1ZVByZWZpeDtcbiAgfVxuXG4gIC8vIG15c3FseF9lbmFibGVfaGVsbG9fbm90aWNlIC0gY29tcHV0ZWQ6IHRydWUsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfbXlzcWx4RW5hYmxlSGVsbG9Ob3RpY2U/OiBib29sZWFuIHwgY2RrdGYuSVJlc29sdmFibGU7IFxuICBwdWJsaWMgZ2V0IG15c3FseEVuYWJsZUhlbGxvTm90aWNlKCkge1xuICAgIHJldHVybiB0aGlzLmdldEJvb2xlYW5BdHRyaWJ1dGUoJ215c3FseF9lbmFibGVfaGVsbG9fbm90aWNlJyk7XG4gIH1cbiAgcHVibGljIHNldCBteXNxbHhFbmFibGVIZWxsb05vdGljZSh2YWx1ZTogYm9vbGVhbiB8IGNka3RmLklSZXNvbHZhYmxlKSB7XG4gICAgdGhpcy5fbXlzcWx4RW5hYmxlSGVsbG9Ob3RpY2UgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRNeXNxbHhFbmFibGVIZWxsb05vdGljZSgpIHtcbiAgICB0aGlzLl9teXNxbHhFbmFibGVIZWxsb05vdGljZSA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgbXlzcWx4RW5hYmxlSGVsbG9Ob3RpY2VJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fbXlzcWx4RW5hYmxlSGVsbG9Ob3RpY2U7XG4gIH1cblxuICAvLyBteXNxbHhfaWRsZV93b3JrZXJfdGhyZWFkX3RpbWVvdXQgLSBjb21wdXRlZDogdHJ1ZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9teXNxbHhJZGxlV29ya2VyVGhyZWFkVGltZW91dD86IG51bWJlcjsgXG4gIHB1YmxpYyBnZXQgbXlzcWx4SWRsZVdvcmtlclRocmVhZFRpbWVvdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TnVtYmVyQXR0cmlidXRlKCdteXNxbHhfaWRsZV93b3JrZXJfdGhyZWFkX3RpbWVvdXQnKTtcbiAgfVxuICBwdWJsaWMgc2V0IG15c3FseElkbGVXb3JrZXJUaHJlYWRUaW1lb3V0KHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLl9teXNxbHhJZGxlV29ya2VyVGhyZWFkVGltZW91dCA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldE15c3FseElkbGVXb3JrZXJUaHJlYWRUaW1lb3V0KCkge1xuICAgIHRoaXMuX215c3FseElkbGVXb3JrZXJUaHJlYWRUaW1lb3V0ID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBteXNxbHhJZGxlV29ya2VyVGhyZWFkVGltZW91dElucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9teXNxbHhJZGxlV29ya2VyVGhyZWFkVGltZW91dDtcbiAgfVxuXG4gIC8vIG15c3FseF9pbnRlcmFjdGl2ZV90aW1lb3V0IC0gY29tcHV0ZWQ6IHRydWUsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfbXlzcWx4SW50ZXJhY3RpdmVUaW1lb3V0PzogbnVtYmVyOyBcbiAgcHVibGljIGdldCBteXNxbHhJbnRlcmFjdGl2ZVRpbWVvdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TnVtYmVyQXR0cmlidXRlKCdteXNxbHhfaW50ZXJhY3RpdmVfdGltZW91dCcpO1xuICB9XG4gIHB1YmxpYyBzZXQgbXlzcWx4SW50ZXJhY3RpdmVUaW1lb3V0KHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLl9teXNxbHhJbnRlcmFjdGl2ZVRpbWVvdXQgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRNeXNxbHhJbnRlcmFjdGl2ZVRpbWVvdXQoKSB7XG4gICAgdGhpcy5fbXlzcWx4SW50ZXJhY3RpdmVUaW1lb3V0ID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBteXNxbHhJbnRlcmFjdGl2ZVRpbWVvdXRJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fbXlzcWx4SW50ZXJhY3RpdmVUaW1lb3V0O1xuICB9XG5cbiAgLy8gbXlzcWx4X2x6NGRlZmF1bHRfY29tcHJlc3Npb25fbGV2ZWwgLSBjb21wdXRlZDogdHJ1ZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9teXNxbHhMejREZWZhdWx0Q29tcHJlc3Npb25MZXZlbD86IG51bWJlcjsgXG4gIHB1YmxpYyBnZXQgbXlzcWx4THo0RGVmYXVsdENvbXByZXNzaW9uTGV2ZWwoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TnVtYmVyQXR0cmlidXRlKCdteXNxbHhfbHo0ZGVmYXVsdF9jb21wcmVzc2lvbl9sZXZlbCcpO1xuICB9XG4gIHB1YmxpYyBzZXQgbXlzcWx4THo0RGVmYXVsdENvbXByZXNzaW9uTGV2ZWwodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX215c3FseEx6NERlZmF1bHRDb21wcmVzc2lvbkxldmVsID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0TXlzcWx4THo0RGVmYXVsdENvbXByZXNzaW9uTGV2ZWwoKSB7XG4gICAgdGhpcy5fbXlzcWx4THo0RGVmYXVsdENvbXByZXNzaW9uTGV2ZWwgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IG15c3FseEx6NERlZmF1bHRDb21wcmVzc2lvbkxldmVsSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX215c3FseEx6NERlZmF1bHRDb21wcmVzc2lvbkxldmVsO1xuICB9XG5cbiAgLy8gbXlzcWx4X2x6NG1heF9jbGllbnRfY29tcHJlc3Npb25fbGV2ZWwgLSBjb21wdXRlZDogdHJ1ZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9teXNxbHhMejRNYXhDbGllbnRDb21wcmVzc2lvbkxldmVsPzogbnVtYmVyOyBcbiAgcHVibGljIGdldCBteXNxbHhMejRNYXhDbGllbnRDb21wcmVzc2lvbkxldmVsKCkge1xuICAgIHJldHVybiB0aGlzLmdldE51bWJlckF0dHJpYnV0ZSgnbXlzcWx4X2x6NG1heF9jbGllbnRfY29tcHJlc3Npb25fbGV2ZWwnKTtcbiAgfVxuICBwdWJsaWMgc2V0IG15c3FseEx6NE1heENsaWVudENvbXByZXNzaW9uTGV2ZWwodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX215c3FseEx6NE1heENsaWVudENvbXByZXNzaW9uTGV2ZWwgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRNeXNxbHhMejRNYXhDbGllbnRDb21wcmVzc2lvbkxldmVsKCkge1xuICAgIHRoaXMuX215c3FseEx6NE1heENsaWVudENvbXByZXNzaW9uTGV2ZWwgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IG15c3FseEx6NE1heENsaWVudENvbXByZXNzaW9uTGV2ZWxJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fbXlzcWx4THo0TWF4Q2xpZW50Q29tcHJlc3Npb25MZXZlbDtcbiAgfVxuXG4gIC8vIG15c3FseF9tYXhfYWxsb3dlZF9wYWNrZXQgLSBjb21wdXRlZDogdHJ1ZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9teXNxbHhNYXhBbGxvd2VkUGFja2V0PzogbnVtYmVyOyBcbiAgcHVibGljIGdldCBteXNxbHhNYXhBbGxvd2VkUGFja2V0KCkge1xuICAgIHJldHVybiB0aGlzLmdldE51bWJlckF0dHJpYnV0ZSgnbXlzcWx4X21heF9hbGxvd2VkX3BhY2tldCcpO1xuICB9XG4gIHB1YmxpYyBzZXQgbXlzcWx4TWF4QWxsb3dlZFBhY2tldCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fbXlzcWx4TWF4QWxsb3dlZFBhY2tldCA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldE15c3FseE1heEFsbG93ZWRQYWNrZXQoKSB7XG4gICAgdGhpcy5fbXlzcWx4TWF4QWxsb3dlZFBhY2tldCA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgbXlzcWx4TWF4QWxsb3dlZFBhY2tldElucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9teXNxbHhNYXhBbGxvd2VkUGFja2V0O1xuICB9XG5cbiAgLy8gbXlzcWx4X21pbl93b3JrZXJfdGhyZWFkcyAtIGNvbXB1dGVkOiB0cnVlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX215c3FseE1pbldvcmtlclRocmVhZHM/OiBudW1iZXI7IFxuICBwdWJsaWMgZ2V0IG15c3FseE1pbldvcmtlclRocmVhZHMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TnVtYmVyQXR0cmlidXRlKCdteXNxbHhfbWluX3dvcmtlcl90aHJlYWRzJyk7XG4gIH1cbiAgcHVibGljIHNldCBteXNxbHhNaW5Xb3JrZXJUaHJlYWRzKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLl9teXNxbHhNaW5Xb3JrZXJUaHJlYWRzID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0TXlzcWx4TWluV29ya2VyVGhyZWFkcygpIHtcbiAgICB0aGlzLl9teXNxbHhNaW5Xb3JrZXJUaHJlYWRzID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBteXNxbHhNaW5Xb3JrZXJUaHJlYWRzSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX215c3FseE1pbldvcmtlclRocmVhZHM7XG4gIH1cblxuICAvLyBteXNxbHhfcmVhZF90aW1lb3V0IC0gY29tcHV0ZWQ6IHRydWUsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfbXlzcWx4UmVhZFRpbWVvdXQ/OiBudW1iZXI7IFxuICBwdWJsaWMgZ2V0IG15c3FseFJlYWRUaW1lb3V0KCkge1xuICAgIHJldHVybiB0aGlzLmdldE51bWJlckF0dHJpYnV0ZSgnbXlzcWx4X3JlYWRfdGltZW91dCcpO1xuICB9XG4gIHB1YmxpYyBzZXQgbXlzcWx4UmVhZFRpbWVvdXQodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX215c3FseFJlYWRUaW1lb3V0ID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0TXlzcWx4UmVhZFRpbWVvdXQoKSB7XG4gICAgdGhpcy5fbXlzcWx4UmVhZFRpbWVvdXQgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IG15c3FseFJlYWRUaW1lb3V0SW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX215c3FseFJlYWRUaW1lb3V0O1xuICB9XG5cbiAgLy8gbXlzcWx4X3dhaXRfdGltZW91dCAtIGNvbXB1dGVkOiB0cnVlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX215c3FseFdhaXRUaW1lb3V0PzogbnVtYmVyOyBcbiAgcHVibGljIGdldCBteXNxbHhXYWl0VGltZW91dCgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXROdW1iZXJBdHRyaWJ1dGUoJ215c3FseF93YWl0X3RpbWVvdXQnKTtcbiAgfVxuICBwdWJsaWMgc2V0IG15c3FseFdhaXRUaW1lb3V0KHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLl9teXNxbHhXYWl0VGltZW91dCA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldE15c3FseFdhaXRUaW1lb3V0KCkge1xuICAgIHRoaXMuX215c3FseFdhaXRUaW1lb3V0ID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBteXNxbHhXYWl0VGltZW91dElucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9teXNxbHhXYWl0VGltZW91dDtcbiAgfVxuXG4gIC8vIG15c3FseF93cml0ZV90aW1lb3V0IC0gY29tcHV0ZWQ6IHRydWUsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfbXlzcWx4V3JpdGVUaW1lb3V0PzogbnVtYmVyOyBcbiAgcHVibGljIGdldCBteXNxbHhXcml0ZVRpbWVvdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TnVtYmVyQXR0cmlidXRlKCdteXNxbHhfd3JpdGVfdGltZW91dCcpO1xuICB9XG4gIHB1YmxpYyBzZXQgbXlzcWx4V3JpdGVUaW1lb3V0KHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLl9teXNxbHhXcml0ZVRpbWVvdXQgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRNeXNxbHhXcml0ZVRpbWVvdXQoKSB7XG4gICAgdGhpcy5fbXlzcWx4V3JpdGVUaW1lb3V0ID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBteXNxbHhXcml0ZVRpbWVvdXRJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fbXlzcWx4V3JpdGVUaW1lb3V0O1xuICB9XG5cbiAgLy8gbXlzcWx4X3pzdGRfZGVmYXVsdF9jb21wcmVzc2lvbl9sZXZlbCAtIGNvbXB1dGVkOiB0cnVlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX215c3FseFpzdGREZWZhdWx0Q29tcHJlc3Npb25MZXZlbD86IG51bWJlcjsgXG4gIHB1YmxpYyBnZXQgbXlzcWx4WnN0ZERlZmF1bHRDb21wcmVzc2lvbkxldmVsKCkge1xuICAgIHJldHVybiB0aGlzLmdldE51bWJlckF0dHJpYnV0ZSgnbXlzcWx4X3pzdGRfZGVmYXVsdF9jb21wcmVzc2lvbl9sZXZlbCcpO1xuICB9XG4gIHB1YmxpYyBzZXQgbXlzcWx4WnN0ZERlZmF1bHRDb21wcmVzc2lvbkxldmVsKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLl9teXNxbHhac3RkRGVmYXVsdENvbXByZXNzaW9uTGV2ZWwgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRNeXNxbHhac3RkRGVmYXVsdENvbXByZXNzaW9uTGV2ZWwoKSB7XG4gICAgdGhpcy5fbXlzcWx4WnN0ZERlZmF1bHRDb21wcmVzc2lvbkxldmVsID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBteXNxbHhac3RkRGVmYXVsdENvbXByZXNzaW9uTGV2ZWxJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fbXlzcWx4WnN0ZERlZmF1bHRDb21wcmVzc2lvbkxldmVsO1xuICB9XG5cbiAgLy8gbXlzcWx4X3pzdGRfbWF4X2NsaWVudF9jb21wcmVzc2lvbl9sZXZlbCAtIGNvbXB1dGVkOiB0cnVlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX215c3FseFpzdGRNYXhDbGllbnRDb21wcmVzc2lvbkxldmVsPzogbnVtYmVyOyBcbiAgcHVibGljIGdldCBteXNxbHhac3RkTWF4Q2xpZW50Q29tcHJlc3Npb25MZXZlbCgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXROdW1iZXJBdHRyaWJ1dGUoJ215c3FseF96c3RkX21heF9jbGllbnRfY29tcHJlc3Npb25fbGV2ZWwnKTtcbiAgfVxuICBwdWJsaWMgc2V0IG15c3FseFpzdGRNYXhDbGllbnRDb21wcmVzc2lvbkxldmVsKHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLl9teXNxbHhac3RkTWF4Q2xpZW50Q29tcHJlc3Npb25MZXZlbCA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldE15c3FseFpzdGRNYXhDbGllbnRDb21wcmVzc2lvbkxldmVsKCkge1xuICAgIHRoaXMuX215c3FseFpzdGRNYXhDbGllbnRDb21wcmVzc2lvbkxldmVsID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBteXNxbHhac3RkTWF4Q2xpZW50Q29tcHJlc3Npb25MZXZlbElucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9teXNxbHhac3RkTWF4Q2xpZW50Q29tcHJlc3Npb25MZXZlbDtcbiAgfVxuXG4gIC8vIG5ldF9yZWFkX3RpbWVvdXQgLSBjb21wdXRlZDogdHJ1ZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9uZXRSZWFkVGltZW91dD86IG51bWJlcjsgXG4gIHB1YmxpYyBnZXQgbmV0UmVhZFRpbWVvdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TnVtYmVyQXR0cmlidXRlKCduZXRfcmVhZF90aW1lb3V0Jyk7XG4gIH1cbiAgcHVibGljIHNldCBuZXRSZWFkVGltZW91dCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fbmV0UmVhZFRpbWVvdXQgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXROZXRSZWFkVGltZW91dCgpIHtcbiAgICB0aGlzLl9uZXRSZWFkVGltZW91dCA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgbmV0UmVhZFRpbWVvdXRJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fbmV0UmVhZFRpbWVvdXQ7XG4gIH1cblxuICAvLyBuZXRfd3JpdGVfdGltZW91dCAtIGNvbXB1dGVkOiB0cnVlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX25ldFdyaXRlVGltZW91dD86IG51bWJlcjsgXG4gIHB1YmxpYyBnZXQgbmV0V3JpdGVUaW1lb3V0KCkge1xuICAgIHJldHVybiB0aGlzLmdldE51bWJlckF0dHJpYnV0ZSgnbmV0X3dyaXRlX3RpbWVvdXQnKTtcbiAgfVxuICBwdWJsaWMgc2V0IG5ldFdyaXRlVGltZW91dCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fbmV0V3JpdGVUaW1lb3V0ID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0TmV0V3JpdGVUaW1lb3V0KCkge1xuICAgIHRoaXMuX25ldFdyaXRlVGltZW91dCA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgbmV0V3JpdGVUaW1lb3V0SW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX25ldFdyaXRlVGltZW91dDtcbiAgfVxuXG4gIC8vIHBhcnNlcl9tYXhfbWVtX3NpemUgLSBjb21wdXRlZDogdHJ1ZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9wYXJzZXJNYXhNZW1TaXplPzogc3RyaW5nOyBcbiAgcHVibGljIGdldCBwYXJzZXJNYXhNZW1TaXplKCkge1xuICAgIHJldHVybiB0aGlzLmdldFN0cmluZ0F0dHJpYnV0ZSgncGFyc2VyX21heF9tZW1fc2l6ZScpO1xuICB9XG4gIHB1YmxpYyBzZXQgcGFyc2VyTWF4TWVtU2l6ZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fcGFyc2VyTWF4TWVtU2l6ZSA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldFBhcnNlck1heE1lbVNpemUoKSB7XG4gICAgdGhpcy5fcGFyc2VyTWF4TWVtU2l6ZSA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgcGFyc2VyTWF4TWVtU2l6ZUlucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9wYXJzZXJNYXhNZW1TaXplO1xuICB9XG5cbiAgLy8gcXVlcnlfYWxsb2NfYmxvY2tfc2l6ZSAtIGNvbXB1dGVkOiB0cnVlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX3F1ZXJ5QWxsb2NCbG9ja1NpemU/OiBzdHJpbmc7IFxuICBwdWJsaWMgZ2V0IHF1ZXJ5QWxsb2NCbG9ja1NpemUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U3RyaW5nQXR0cmlidXRlKCdxdWVyeV9hbGxvY19ibG9ja19zaXplJyk7XG4gIH1cbiAgcHVibGljIHNldCBxdWVyeUFsbG9jQmxvY2tTaXplKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9xdWVyeUFsbG9jQmxvY2tTaXplID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0UXVlcnlBbGxvY0Jsb2NrU2l6ZSgpIHtcbiAgICB0aGlzLl9xdWVyeUFsbG9jQmxvY2tTaXplID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBxdWVyeUFsbG9jQmxvY2tTaXplSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3F1ZXJ5QWxsb2NCbG9ja1NpemU7XG4gIH1cblxuICAvLyBxdWVyeV9wcmVhbGxvY19zaXplIC0gY29tcHV0ZWQ6IHRydWUsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfcXVlcnlQcmVhbGxvY1NpemU/OiBzdHJpbmc7IFxuICBwdWJsaWMgZ2V0IHF1ZXJ5UHJlYWxsb2NTaXplKCkge1xuICAgIHJldHVybiB0aGlzLmdldFN0cmluZ0F0dHJpYnV0ZSgncXVlcnlfcHJlYWxsb2Nfc2l6ZScpO1xuICB9XG4gIHB1YmxpYyBzZXQgcXVlcnlQcmVhbGxvY1NpemUodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX3F1ZXJ5UHJlYWxsb2NTaXplID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0UXVlcnlQcmVhbGxvY1NpemUoKSB7XG4gICAgdGhpcy5fcXVlcnlQcmVhbGxvY1NpemUgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IHF1ZXJ5UHJlYWxsb2NTaXplSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3F1ZXJ5UHJlYWxsb2NTaXplO1xuICB9XG5cbiAgLy8gcmVnZXhwX3RpbWVfbGltaXQgLSBjb21wdXRlZDogdHJ1ZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9yZWdleHBUaW1lTGltaXQ/OiBudW1iZXI7IFxuICBwdWJsaWMgZ2V0IHJlZ2V4cFRpbWVMaW1pdCgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXROdW1iZXJBdHRyaWJ1dGUoJ3JlZ2V4cF90aW1lX2xpbWl0Jyk7XG4gIH1cbiAgcHVibGljIHNldCByZWdleHBUaW1lTGltaXQodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX3JlZ2V4cFRpbWVMaW1pdCA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldFJlZ2V4cFRpbWVMaW1pdCgpIHtcbiAgICB0aGlzLl9yZWdleHBUaW1lTGltaXQgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IHJlZ2V4cFRpbWVMaW1pdElucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9yZWdleHBUaW1lTGltaXQ7XG4gIH1cblxuICAvLyBzb3J0X2J1ZmZlcl9zaXplIC0gY29tcHV0ZWQ6IHRydWUsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfc29ydEJ1ZmZlclNpemU/OiBzdHJpbmc7IFxuICBwdWJsaWMgZ2V0IHNvcnRCdWZmZXJTaXplKCkge1xuICAgIHJldHVybiB0aGlzLmdldFN0cmluZ0F0dHJpYnV0ZSgnc29ydF9idWZmZXJfc2l6ZScpO1xuICB9XG4gIHB1YmxpYyBzZXQgc29ydEJ1ZmZlclNpemUodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX3NvcnRCdWZmZXJTaXplID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0U29ydEJ1ZmZlclNpemUoKSB7XG4gICAgdGhpcy5fc29ydEJ1ZmZlclNpemUgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IHNvcnRCdWZmZXJTaXplSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NvcnRCdWZmZXJTaXplO1xuICB9XG5cbiAgLy8gc3FsX21vZGUgLSBjb21wdXRlZDogdHJ1ZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9zcWxNb2RlPzogc3RyaW5nOyBcbiAgcHVibGljIGdldCBzcWxNb2RlKCkge1xuICAgIHJldHVybiB0aGlzLmdldFN0cmluZ0F0dHJpYnV0ZSgnc3FsX21vZGUnKTtcbiAgfVxuICBwdWJsaWMgc2V0IHNxbE1vZGUodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX3NxbE1vZGUgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRTcWxNb2RlKCkge1xuICAgIHRoaXMuX3NxbE1vZGUgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IHNxbE1vZGVJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fc3FsTW9kZTtcbiAgfVxuXG4gIC8vIHNxbF9yZXF1aXJlX3ByaW1hcnlfa2V5IC0gY29tcHV0ZWQ6IHRydWUsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfc3FsUmVxdWlyZVByaW1hcnlLZXk/OiBib29sZWFuIHwgY2RrdGYuSVJlc29sdmFibGU7IFxuICBwdWJsaWMgZ2V0IHNxbFJlcXVpcmVQcmltYXJ5S2V5KCkge1xuICAgIHJldHVybiB0aGlzLmdldEJvb2xlYW5BdHRyaWJ1dGUoJ3NxbF9yZXF1aXJlX3ByaW1hcnlfa2V5Jyk7XG4gIH1cbiAgcHVibGljIHNldCBzcWxSZXF1aXJlUHJpbWFyeUtleSh2YWx1ZTogYm9vbGVhbiB8IGNka3RmLklSZXNvbHZhYmxlKSB7XG4gICAgdGhpcy5fc3FsUmVxdWlyZVByaW1hcnlLZXkgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRTcWxSZXF1aXJlUHJpbWFyeUtleSgpIHtcbiAgICB0aGlzLl9zcWxSZXF1aXJlUHJpbWFyeUtleSA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgc3FsUmVxdWlyZVByaW1hcnlLZXlJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fc3FsUmVxdWlyZVByaW1hcnlLZXk7XG4gIH1cblxuICAvLyBzcWxfd2FybmluZ3MgLSBjb21wdXRlZDogdHJ1ZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9zcWxXYXJuaW5ncz86IGJvb2xlYW4gfCBjZGt0Zi5JUmVzb2x2YWJsZTsgXG4gIHB1YmxpYyBnZXQgc3FsV2FybmluZ3MoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Qm9vbGVhbkF0dHJpYnV0ZSgnc3FsX3dhcm5pbmdzJyk7XG4gIH1cbiAgcHVibGljIHNldCBzcWxXYXJuaW5ncyh2YWx1ZTogYm9vbGVhbiB8IGNka3RmLklSZXNvbHZhYmxlKSB7XG4gICAgdGhpcy5fc3FsV2FybmluZ3MgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRTcWxXYXJuaW5ncygpIHtcbiAgICB0aGlzLl9zcWxXYXJuaW5ncyA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgc3FsV2FybmluZ3NJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fc3FsV2FybmluZ3M7XG4gIH1cblxuICAvLyB0aHJlYWRfcG9vbF9kZWRpY2F0ZWRfbGlzdGVuZXJzIC0gY29tcHV0ZWQ6IHRydWUsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfdGhyZWFkUG9vbERlZGljYXRlZExpc3RlbmVycz86IGJvb2xlYW4gfCBjZGt0Zi5JUmVzb2x2YWJsZTsgXG4gIHB1YmxpYyBnZXQgdGhyZWFkUG9vbERlZGljYXRlZExpc3RlbmVycygpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRCb29sZWFuQXR0cmlidXRlKCd0aHJlYWRfcG9vbF9kZWRpY2F0ZWRfbGlzdGVuZXJzJyk7XG4gIH1cbiAgcHVibGljIHNldCB0aHJlYWRQb29sRGVkaWNhdGVkTGlzdGVuZXJzKHZhbHVlOiBib29sZWFuIHwgY2RrdGYuSVJlc29sdmFibGUpIHtcbiAgICB0aGlzLl90aHJlYWRQb29sRGVkaWNhdGVkTGlzdGVuZXJzID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0VGhyZWFkUG9vbERlZGljYXRlZExpc3RlbmVycygpIHtcbiAgICB0aGlzLl90aHJlYWRQb29sRGVkaWNhdGVkTGlzdGVuZXJzID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCB0aHJlYWRQb29sRGVkaWNhdGVkTGlzdGVuZXJzSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3RocmVhZFBvb2xEZWRpY2F0ZWRMaXN0ZW5lcnM7XG4gIH1cblxuICAvLyB0aHJlYWRfcG9vbF9tYXhfdHJhbnNhY3Rpb25zX2xpbWl0IC0gY29tcHV0ZWQ6IHRydWUsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfdGhyZWFkUG9vbE1heFRyYW5zYWN0aW9uc0xpbWl0PzogbnVtYmVyOyBcbiAgcHVibGljIGdldCB0aHJlYWRQb29sTWF4VHJhbnNhY3Rpb25zTGltaXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TnVtYmVyQXR0cmlidXRlKCd0aHJlYWRfcG9vbF9tYXhfdHJhbnNhY3Rpb25zX2xpbWl0Jyk7XG4gIH1cbiAgcHVibGljIHNldCB0aHJlYWRQb29sTWF4VHJhbnNhY3Rpb25zTGltaXQodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX3RocmVhZFBvb2xNYXhUcmFuc2FjdGlvbnNMaW1pdCA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldFRocmVhZFBvb2xNYXhUcmFuc2FjdGlvbnNMaW1pdCgpIHtcbiAgICB0aGlzLl90aHJlYWRQb29sTWF4VHJhbnNhY3Rpb25zTGltaXQgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IHRocmVhZFBvb2xNYXhUcmFuc2FjdGlvbnNMaW1pdElucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl90aHJlYWRQb29sTWF4VHJhbnNhY3Rpb25zTGltaXQ7XG4gIH1cblxuICAvLyB0aW1lX3pvbmUgLSBjb21wdXRlZDogdHJ1ZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF90aW1lWm9uZT86IHN0cmluZzsgXG4gIHB1YmxpYyBnZXQgdGltZVpvbmUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U3RyaW5nQXR0cmlidXRlKCd0aW1lX3pvbmUnKTtcbiAgfVxuICBwdWJsaWMgc2V0IHRpbWVab25lKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl90aW1lWm9uZSA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldFRpbWVab25lKCkge1xuICAgIHRoaXMuX3RpbWVab25lID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCB0aW1lWm9uZUlucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl90aW1lWm9uZTtcbiAgfVxuXG4gIC8vIHRtcF90YWJsZV9zaXplIC0gY29tcHV0ZWQ6IHRydWUsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfdG1wVGFibGVTaXplPzogc3RyaW5nOyBcbiAgcHVibGljIGdldCB0bXBUYWJsZVNpemUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U3RyaW5nQXR0cmlidXRlKCd0bXBfdGFibGVfc2l6ZScpO1xuICB9XG4gIHB1YmxpYyBzZXQgdG1wVGFibGVTaXplKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl90bXBUYWJsZVNpemUgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRUbXBUYWJsZVNpemUoKSB7XG4gICAgdGhpcy5fdG1wVGFibGVTaXplID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCB0bXBUYWJsZVNpemVJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fdG1wVGFibGVTaXplO1xuICB9XG5cbiAgLy8gdHJhbnNhY3Rpb25faXNvbGF0aW9uIC0gY29tcHV0ZWQ6IHRydWUsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfdHJhbnNhY3Rpb25Jc29sYXRpb24/OiBzdHJpbmc7IFxuICBwdWJsaWMgZ2V0IHRyYW5zYWN0aW9uSXNvbGF0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmdldFN0cmluZ0F0dHJpYnV0ZSgndHJhbnNhY3Rpb25faXNvbGF0aW9uJyk7XG4gIH1cbiAgcHVibGljIHNldCB0cmFuc2FjdGlvbklzb2xhdGlvbih2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fdHJhbnNhY3Rpb25Jc29sYXRpb24gPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRUcmFuc2FjdGlvbklzb2xhdGlvbigpIHtcbiAgICB0aGlzLl90cmFuc2FjdGlvbklzb2xhdGlvbiA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgdHJhbnNhY3Rpb25Jc29sYXRpb25JbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fdHJhbnNhY3Rpb25Jc29sYXRpb247XG4gIH1cblxuICAvLyB3YWl0X3RpbWVvdXQgLSBjb21wdXRlZDogdHJ1ZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF93YWl0VGltZW91dD86IG51bWJlcjsgXG4gIHB1YmxpYyBnZXQgd2FpdFRpbWVvdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TnVtYmVyQXR0cmlidXRlKCd3YWl0X3RpbWVvdXQnKTtcbiAgfVxuICBwdWJsaWMgc2V0IHdhaXRUaW1lb3V0KHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLl93YWl0VGltZW91dCA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldFdhaXRUaW1lb3V0KCkge1xuICAgIHRoaXMuX3dhaXRUaW1lb3V0ID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCB3YWl0VGltZW91dElucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl93YWl0VGltZW91dDtcbiAgfVxufVxuXG4vKipcbiogUmVwcmVzZW50cyBhIHtAbGluayBodHRwczovL3JlZ2lzdHJ5LnRlcnJhZm9ybS5pby9wcm92aWRlcnMvb3JhY2xlL29jaS82LjE4LjAvZG9jcy9yZXNvdXJjZXMvbXlzcWxfbXlzcWxfY29uZmlndXJhdGlvbiBvY2lfbXlzcWxfbXlzcWxfY29uZmlndXJhdGlvbn1cbiovXG5leHBvcnQgY2xhc3MgTXlzcWxNeXNxbENvbmZpZ3VyYXRpb24gZXh0ZW5kcyBjZGt0Zi5UZXJyYWZvcm1SZXNvdXJjZSB7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT1cbiAgLy8gU1RBVElDIFBST1BFUlRJRVNcbiAgLy8gPT09PT09PT09PT09PT09PT1cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSB0ZlJlc291cmNlVHlwZSA9IFwib2NpX215c3FsX215c3FsX2NvbmZpZ3VyYXRpb25cIjtcblxuICAvLyA9PT09PT09PT09PT09PVxuICAvLyBTVEFUSUMgTWV0aG9kc1xuICAvLyA9PT09PT09PT09PT09PVxuICAvKipcbiAgKiBHZW5lcmF0ZXMgQ0RLVEYgY29kZSBmb3IgaW1wb3J0aW5nIGEgTXlzcWxNeXNxbENvbmZpZ3VyYXRpb24gcmVzb3VyY2UgdXBvbiBydW5uaW5nIFwiY2RrdGYgcGxhbiA8c3RhY2stbmFtZT5cIlxuICAqIEBwYXJhbSBzY29wZSBUaGUgc2NvcGUgaW4gd2hpY2ggdG8gZGVmaW5lIHRoaXMgY29uc3RydWN0XG4gICogQHBhcmFtIGltcG9ydFRvSWQgVGhlIGNvbnN0cnVjdCBpZCB1c2VkIGluIHRoZSBnZW5lcmF0ZWQgY29uZmlnIGZvciB0aGUgTXlzcWxNeXNxbENvbmZpZ3VyYXRpb24gdG8gaW1wb3J0XG4gICogQHBhcmFtIGltcG9ydEZyb21JZCBUaGUgaWQgb2YgdGhlIGV4aXN0aW5nIE15c3FsTXlzcWxDb25maWd1cmF0aW9uIHRoYXQgc2hvdWxkIGJlIGltcG9ydGVkLiBSZWZlciB0byB0aGUge0BsaW5rIGh0dHBzOi8vcmVnaXN0cnkudGVycmFmb3JtLmlvL3Byb3ZpZGVycy9vcmFjbGUvb2NpLzYuMTguMC9kb2NzL3Jlc291cmNlcy9teXNxbF9teXNxbF9jb25maWd1cmF0aW9uI2ltcG9ydCBpbXBvcnQgc2VjdGlvbn0gaW4gdGhlIGRvY3VtZW50YXRpb24gb2YgdGhpcyByZXNvdXJjZSBmb3IgdGhlIGlkIHRvIHVzZVxuICAqIEBwYXJhbSBwcm92aWRlcj8gT3B0aW9uYWwgaW5zdGFuY2Ugb2YgdGhlIHByb3ZpZGVyIHdoZXJlIHRoZSBNeXNxbE15c3FsQ29uZmlndXJhdGlvbiB0byBpbXBvcnQgaXMgZm91bmRcbiAgKi9cbiAgcHVibGljIHN0YXRpYyBnZW5lcmF0ZUNvbmZpZ0ZvckltcG9ydChzY29wZTogQ29uc3RydWN0LCBpbXBvcnRUb0lkOiBzdHJpbmcsIGltcG9ydEZyb21JZDogc3RyaW5nLCBwcm92aWRlcj86IGNka3RmLlRlcnJhZm9ybVByb3ZpZGVyKSB7XG4gICAgICAgIHJldHVybiBuZXcgY2RrdGYuSW1wb3J0YWJsZVJlc291cmNlKHNjb3BlLCBpbXBvcnRUb0lkLCB7IHRlcnJhZm9ybVJlc291cmNlVHlwZTogXCJvY2lfbXlzcWxfbXlzcWxfY29uZmlndXJhdGlvblwiLCBpbXBvcnRJZDogaW1wb3J0RnJvbUlkLCBwcm92aWRlciB9KTtcbiAgICAgIH1cblxuICAvLyA9PT09PT09PT09PVxuICAvLyBJTklUSUFMSVpFUlxuICAvLyA9PT09PT09PT09PVxuXG4gIC8qKlxuICAqIENyZWF0ZSBhIG5ldyB7QGxpbmsgaHR0cHM6Ly9yZWdpc3RyeS50ZXJyYWZvcm0uaW8vcHJvdmlkZXJzL29yYWNsZS9vY2kvNi4xOC4wL2RvY3MvcmVzb3VyY2VzL215c3FsX215c3FsX2NvbmZpZ3VyYXRpb24gb2NpX215c3FsX215c3FsX2NvbmZpZ3VyYXRpb259IFJlc291cmNlXG4gICpcbiAgKiBAcGFyYW0gc2NvcGUgVGhlIHNjb3BlIGluIHdoaWNoIHRvIGRlZmluZSB0aGlzIGNvbnN0cnVjdFxuICAqIEBwYXJhbSBpZCBUaGUgc2NvcGVkIGNvbnN0cnVjdCBJRC4gTXVzdCBiZSB1bmlxdWUgYW1vbmdzdCBzaWJsaW5ncyBpbiB0aGUgc2FtZSBzY29wZVxuICAqIEBwYXJhbSBvcHRpb25zIE15c3FsTXlzcWxDb25maWd1cmF0aW9uQ29uZmlnXG4gICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBjb25maWc6IE15c3FsTXlzcWxDb25maWd1cmF0aW9uQ29uZmlnKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICB0ZXJyYWZvcm1SZXNvdXJjZVR5cGU6ICdvY2lfbXlzcWxfbXlzcWxfY29uZmlndXJhdGlvbicsXG4gICAgICB0ZXJyYWZvcm1HZW5lcmF0b3JNZXRhZGF0YToge1xuICAgICAgICBwcm92aWRlck5hbWU6ICdvY2knLFxuICAgICAgICBwcm92aWRlclZlcnNpb246ICc2LjE4LjAnLFxuICAgICAgICBwcm92aWRlclZlcnNpb25Db25zdHJhaW50OiAnfj4gNi4xOC4wJ1xuICAgICAgfSxcbiAgICAgIHByb3ZpZGVyOiBjb25maWcucHJvdmlkZXIsXG4gICAgICBkZXBlbmRzT246IGNvbmZpZy5kZXBlbmRzT24sXG4gICAgICBjb3VudDogY29uZmlnLmNvdW50LFxuICAgICAgbGlmZWN5Y2xlOiBjb25maWcubGlmZWN5Y2xlLFxuICAgICAgcHJvdmlzaW9uZXJzOiBjb25maWcucHJvdmlzaW9uZXJzLFxuICAgICAgY29ubmVjdGlvbjogY29uZmlnLmNvbm5lY3Rpb24sXG4gICAgICBmb3JFYWNoOiBjb25maWcuZm9yRWFjaFxuICAgIH0pO1xuICAgIHRoaXMuX2NvbXBhcnRtZW50SWQgPSBjb25maWcuY29tcGFydG1lbnRJZDtcbiAgICB0aGlzLl9kZWZpbmVkVGFncyA9IGNvbmZpZy5kZWZpbmVkVGFncztcbiAgICB0aGlzLl9kZXNjcmlwdGlvbiA9IGNvbmZpZy5kZXNjcmlwdGlvbjtcbiAgICB0aGlzLl9kaXNwbGF5TmFtZSA9IGNvbmZpZy5kaXNwbGF5TmFtZTtcbiAgICB0aGlzLl9mcmVlZm9ybVRhZ3MgPSBjb25maWcuZnJlZWZvcm1UYWdzO1xuICAgIHRoaXMuX2lkID0gY29uZmlnLmlkO1xuICAgIHRoaXMuX3BhcmVudENvbmZpZ3VyYXRpb25JZCA9IGNvbmZpZy5wYXJlbnRDb25maWd1cmF0aW9uSWQ7XG4gICAgdGhpcy5fc2hhcGVOYW1lID0gY29uZmlnLnNoYXBlTmFtZTtcbiAgICB0aGlzLl9pbml0VmFyaWFibGVzLmludGVybmFsVmFsdWUgPSBjb25maWcuaW5pdFZhcmlhYmxlcztcbiAgICB0aGlzLl90aW1lb3V0cy5pbnRlcm5hbFZhbHVlID0gY29uZmlnLnRpbWVvdXRzO1xuICAgIHRoaXMuX3ZhcmlhYmxlcy5pbnRlcm5hbFZhbHVlID0gY29uZmlnLnZhcmlhYmxlcztcbiAgfVxuXG4gIC8vID09PT09PT09PT1cbiAgLy8gQVRUUklCVVRFU1xuICAvLyA9PT09PT09PT09XG5cbiAgLy8gY29tcGFydG1lbnRfaWQgLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiBmYWxzZSwgcmVxdWlyZWQ6IHRydWVcbiAgcHJpdmF0ZSBfY29tcGFydG1lbnRJZD86IHN0cmluZzsgXG4gIHB1YmxpYyBnZXQgY29tcGFydG1lbnRJZCgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTdHJpbmdBdHRyaWJ1dGUoJ2NvbXBhcnRtZW50X2lkJyk7XG4gIH1cbiAgcHVibGljIHNldCBjb21wYXJ0bWVudElkKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9jb21wYXJ0bWVudElkID0gdmFsdWU7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IGNvbXBhcnRtZW50SWRJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY29tcGFydG1lbnRJZDtcbiAgfVxuXG4gIC8vIGRlZmluZWRfdGFncyAtIGNvbXB1dGVkOiB0cnVlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX2RlZmluZWRUYWdzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTsgXG4gIHB1YmxpYyBnZXQgZGVmaW5lZFRhZ3MoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U3RyaW5nTWFwQXR0cmlidXRlKCdkZWZpbmVkX3RhZ3MnKTtcbiAgfVxuICBwdWJsaWMgc2V0IGRlZmluZWRUYWdzKHZhbHVlOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9KSB7XG4gICAgdGhpcy5fZGVmaW5lZFRhZ3MgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXREZWZpbmVkVGFncygpIHtcbiAgICB0aGlzLl9kZWZpbmVkVGFncyA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgZGVmaW5lZFRhZ3NJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZGVmaW5lZFRhZ3M7XG4gIH1cblxuICAvLyBkZXNjcmlwdGlvbiAtIGNvbXB1dGVkOiB0cnVlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX2Rlc2NyaXB0aW9uPzogc3RyaW5nOyBcbiAgcHVibGljIGdldCBkZXNjcmlwdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTdHJpbmdBdHRyaWJ1dGUoJ2Rlc2NyaXB0aW9uJyk7XG4gIH1cbiAgcHVibGljIHNldCBkZXNjcmlwdGlvbih2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fZGVzY3JpcHRpb24gPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXREZXNjcmlwdGlvbigpIHtcbiAgICB0aGlzLl9kZXNjcmlwdGlvbiA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgZGVzY3JpcHRpb25JbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZGVzY3JpcHRpb247XG4gIH1cblxuICAvLyBkaXNwbGF5X25hbWUgLSBjb21wdXRlZDogdHJ1ZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9kaXNwbGF5TmFtZT86IHN0cmluZzsgXG4gIHB1YmxpYyBnZXQgZGlzcGxheU5hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U3RyaW5nQXR0cmlidXRlKCdkaXNwbGF5X25hbWUnKTtcbiAgfVxuICBwdWJsaWMgc2V0IGRpc3BsYXlOYW1lKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9kaXNwbGF5TmFtZSA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldERpc3BsYXlOYW1lKCkge1xuICAgIHRoaXMuX2Rpc3BsYXlOYW1lID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBkaXNwbGF5TmFtZUlucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9kaXNwbGF5TmFtZTtcbiAgfVxuXG4gIC8vIGZyZWVmb3JtX3RhZ3MgLSBjb21wdXRlZDogdHJ1ZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9mcmVlZm9ybVRhZ3M/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9OyBcbiAgcHVibGljIGdldCBmcmVlZm9ybVRhZ3MoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U3RyaW5nTWFwQXR0cmlidXRlKCdmcmVlZm9ybV90YWdzJyk7XG4gIH1cbiAgcHVibGljIHNldCBmcmVlZm9ybVRhZ3ModmFsdWU6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0pIHtcbiAgICB0aGlzLl9mcmVlZm9ybVRhZ3MgPSB2YWx1ZTtcbiAgfVxuICBwdWJsaWMgcmVzZXRGcmVlZm9ybVRhZ3MoKSB7XG4gICAgdGhpcy5fZnJlZWZvcm1UYWdzID0gdW5kZWZpbmVkO1xuICB9XG4gIC8vIFRlbXBvcmFyaWx5IGV4cG9zZSBpbnB1dCB2YWx1ZS4gVXNlIHdpdGggY2F1dGlvbi5cbiAgcHVibGljIGdldCBmcmVlZm9ybVRhZ3NJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZnJlZWZvcm1UYWdzO1xuICB9XG5cbiAgLy8gaWQgLSBjb21wdXRlZDogdHJ1ZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9pZD86IHN0cmluZzsgXG4gIHB1YmxpYyBnZXQgaWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U3RyaW5nQXR0cmlidXRlKCdpZCcpO1xuICB9XG4gIHB1YmxpYyBzZXQgaWQodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX2lkID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0SWQoKSB7XG4gICAgdGhpcy5faWQgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IGlkSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lkO1xuICB9XG5cbiAgLy8gcGFyZW50X2NvbmZpZ3VyYXRpb25faWQgLSBjb21wdXRlZDogdHJ1ZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF9wYXJlbnRDb25maWd1cmF0aW9uSWQ/OiBzdHJpbmc7IFxuICBwdWJsaWMgZ2V0IHBhcmVudENvbmZpZ3VyYXRpb25JZCgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTdHJpbmdBdHRyaWJ1dGUoJ3BhcmVudF9jb25maWd1cmF0aW9uX2lkJyk7XG4gIH1cbiAgcHVibGljIHNldCBwYXJlbnRDb25maWd1cmF0aW9uSWQodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX3BhcmVudENvbmZpZ3VyYXRpb25JZCA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldFBhcmVudENvbmZpZ3VyYXRpb25JZCgpIHtcbiAgICB0aGlzLl9wYXJlbnRDb25maWd1cmF0aW9uSWQgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IHBhcmVudENvbmZpZ3VyYXRpb25JZElucHV0KCkge1xuICAgIHJldHVybiB0aGlzLl9wYXJlbnRDb25maWd1cmF0aW9uSWQ7XG4gIH1cblxuICAvLyBzaGFwZV9uYW1lIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogZmFsc2UsIHJlcXVpcmVkOiB0cnVlXG4gIHByaXZhdGUgX3NoYXBlTmFtZT86IHN0cmluZzsgXG4gIHB1YmxpYyBnZXQgc2hhcGVOYW1lKCkge1xuICAgIHJldHVybiB0aGlzLmdldFN0cmluZ0F0dHJpYnV0ZSgnc2hhcGVfbmFtZScpO1xuICB9XG4gIHB1YmxpYyBzZXQgc2hhcGVOYW1lKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9zaGFwZU5hbWUgPSB2YWx1ZTtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgc2hhcGVOYW1lSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NoYXBlTmFtZTtcbiAgfVxuXG4gIC8vIHN0YXRlIC0gY29tcHV0ZWQ6IHRydWUsIG9wdGlvbmFsOiBmYWxzZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHB1YmxpYyBnZXQgc3RhdGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U3RyaW5nQXR0cmlidXRlKCdzdGF0ZScpO1xuICB9XG5cbiAgLy8gdGltZV9jcmVhdGVkIC0gY29tcHV0ZWQ6IHRydWUsIG9wdGlvbmFsOiBmYWxzZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHB1YmxpYyBnZXQgdGltZUNyZWF0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U3RyaW5nQXR0cmlidXRlKCd0aW1lX2NyZWF0ZWQnKTtcbiAgfVxuXG4gIC8vIHRpbWVfdXBkYXRlZCAtIGNvbXB1dGVkOiB0cnVlLCBvcHRpb25hbDogZmFsc2UsIHJlcXVpcmVkOiBmYWxzZVxuICBwdWJsaWMgZ2V0IHRpbWVVcGRhdGVkKCkge1xuICAgIHJldHVybiB0aGlzLmdldFN0cmluZ0F0dHJpYnV0ZSgndGltZV91cGRhdGVkJyk7XG4gIH1cblxuICAvLyB0eXBlIC0gY29tcHV0ZWQ6IHRydWUsIG9wdGlvbmFsOiBmYWxzZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHB1YmxpYyBnZXQgdHlwZSgpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTdHJpbmdBdHRyaWJ1dGUoJ3R5cGUnKTtcbiAgfVxuXG4gIC8vIGluaXRfdmFyaWFibGVzIC0gY29tcHV0ZWQ6IGZhbHNlLCBvcHRpb25hbDogdHJ1ZSwgcmVxdWlyZWQ6IGZhbHNlXG4gIHByaXZhdGUgX2luaXRWYXJpYWJsZXMgPSBuZXcgTXlzcWxNeXNxbENvbmZpZ3VyYXRpb25Jbml0VmFyaWFibGVzT3V0cHV0UmVmZXJlbmNlKHRoaXMsIFwiaW5pdF92YXJpYWJsZXNcIik7XG4gIHB1YmxpYyBnZXQgaW5pdFZhcmlhYmxlcygpIHtcbiAgICByZXR1cm4gdGhpcy5faW5pdFZhcmlhYmxlcztcbiAgfVxuICBwdWJsaWMgcHV0SW5pdFZhcmlhYmxlcyh2YWx1ZTogTXlzcWxNeXNxbENvbmZpZ3VyYXRpb25Jbml0VmFyaWFibGVzKSB7XG4gICAgdGhpcy5faW5pdFZhcmlhYmxlcy5pbnRlcm5hbFZhbHVlID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0SW5pdFZhcmlhYmxlcygpIHtcbiAgICB0aGlzLl9pbml0VmFyaWFibGVzLmludGVybmFsVmFsdWUgPSB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gVGVtcG9yYXJpbHkgZXhwb3NlIGlucHV0IHZhbHVlLiBVc2Ugd2l0aCBjYXV0aW9uLlxuICBwdWJsaWMgZ2V0IGluaXRWYXJpYWJsZXNJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5faW5pdFZhcmlhYmxlcy5pbnRlcm5hbFZhbHVlO1xuICB9XG5cbiAgLy8gdGltZW91dHMgLSBjb21wdXRlZDogZmFsc2UsIG9wdGlvbmFsOiB0cnVlLCByZXF1aXJlZDogZmFsc2VcbiAgcHJpdmF0ZSBfdGltZW91dHMgPSBuZXcgTXlzcWxNeXNxbENvbmZpZ3VyYXRpb25UaW1lb3V0c091dHB1dFJlZmVyZW5jZSh0aGlzLCBcInRpbWVvdXRzXCIpO1xuICBwdWJsaWMgZ2V0IHRpbWVvdXRzKCkge1xuICAgIHJldHVybiB0aGlzLl90aW1lb3V0cztcbiAgfVxuICBwdWJsaWMgcHV0VGltZW91dHModmFsdWU6IE15c3FsTXlzcWxDb25maWd1cmF0aW9uVGltZW91dHMpIHtcbiAgICB0aGlzLl90aW1lb3V0cy5pbnRlcm5hbFZhbHVlID0gdmFsdWU7XG4gIH1cbiAgcHVibGljIHJlc2V0VGltZW91dHMoKSB7XG4gICAgdGhpcy5fdGltZW91dHMuaW50ZXJuYWxWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgdGltZW91dHNJbnB1dCgpIHtcbiAgICByZXR1cm4gdGhpcy5fdGltZW91dHMuaW50ZXJuYWxWYWx1ZTtcbiAgfVxuXG4gIC8vIHZhcmlhYmxlcyAtIGNvbXB1dGVkOiBmYWxzZSwgb3B0aW9uYWw6IHRydWUsIHJlcXVpcmVkOiBmYWxzZVxuICBwcml2YXRlIF92YXJpYWJsZXMgPSBuZXcgTXlzcWxNeXNxbENvbmZpZ3VyYXRpb25WYXJpYWJsZXNPdXRwdXRSZWZlcmVuY2UodGhpcywgXCJ2YXJpYWJsZXNcIik7XG4gIHB1YmxpYyBnZXQgdmFyaWFibGVzKCkge1xuICAgIHJldHVybiB0aGlzLl92YXJpYWJsZXM7XG4gIH1cbiAgcHVibGljIHB1dFZhcmlhYmxlcyh2YWx1ZTogTXlzcWxNeXNxbENvbmZpZ3VyYXRpb25WYXJpYWJsZXMpIHtcbiAgICB0aGlzLl92YXJpYWJsZXMuaW50ZXJuYWxWYWx1ZSA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyByZXNldFZhcmlhYmxlcygpIHtcbiAgICB0aGlzLl92YXJpYWJsZXMuaW50ZXJuYWxWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgfVxuICAvLyBUZW1wb3JhcmlseSBleHBvc2UgaW5wdXQgdmFsdWUuIFVzZSB3aXRoIGNhdXRpb24uXG4gIHB1YmxpYyBnZXQgdmFyaWFibGVzSW5wdXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhcmlhYmxlcy5pbnRlcm5hbFZhbHVlO1xuICB9XG5cbiAgLy8gPT09PT09PT09XG4gIC8vIFNZTlRIRVNJU1xuICAvLyA9PT09PT09PT1cblxuICBwcm90ZWN0ZWQgc3ludGhlc2l6ZUF0dHJpYnV0ZXMoKTogeyBbbmFtZTogc3RyaW5nXTogYW55IH0ge1xuICAgIHJldHVybiB7XG4gICAgICBjb21wYXJ0bWVudF9pZDogY2RrdGYuc3RyaW5nVG9UZXJyYWZvcm0odGhpcy5fY29tcGFydG1lbnRJZCksXG4gICAgICBkZWZpbmVkX3RhZ3M6IGNka3RmLmhhc2hNYXBwZXIoY2RrdGYuc3RyaW5nVG9UZXJyYWZvcm0pKHRoaXMuX2RlZmluZWRUYWdzKSxcbiAgICAgIGRlc2NyaXB0aW9uOiBjZGt0Zi5zdHJpbmdUb1RlcnJhZm9ybSh0aGlzLl9kZXNjcmlwdGlvbiksXG4gICAgICBkaXNwbGF5X25hbWU6IGNka3RmLnN0cmluZ1RvVGVycmFmb3JtKHRoaXMuX2Rpc3BsYXlOYW1lKSxcbiAgICAgIGZyZWVmb3JtX3RhZ3M6IGNka3RmLmhhc2hNYXBwZXIoY2RrdGYuc3RyaW5nVG9UZXJyYWZvcm0pKHRoaXMuX2ZyZWVmb3JtVGFncyksXG4gICAgICBpZDogY2RrdGYuc3RyaW5nVG9UZXJyYWZvcm0odGhpcy5faWQpLFxuICAgICAgcGFyZW50X2NvbmZpZ3VyYXRpb25faWQ6IGNka3RmLnN0cmluZ1RvVGVycmFmb3JtKHRoaXMuX3BhcmVudENvbmZpZ3VyYXRpb25JZCksXG4gICAgICBzaGFwZV9uYW1lOiBjZGt0Zi5zdHJpbmdUb1RlcnJhZm9ybSh0aGlzLl9zaGFwZU5hbWUpLFxuICAgICAgaW5pdF92YXJpYWJsZXM6IG15c3FsTXlzcWxDb25maWd1cmF0aW9uSW5pdFZhcmlhYmxlc1RvVGVycmFmb3JtKHRoaXMuX2luaXRWYXJpYWJsZXMuaW50ZXJuYWxWYWx1ZSksXG4gICAgICB0aW1lb3V0czogbXlzcWxNeXNxbENvbmZpZ3VyYXRpb25UaW1lb3V0c1RvVGVycmFmb3JtKHRoaXMuX3RpbWVvdXRzLmludGVybmFsVmFsdWUpLFxuICAgICAgdmFyaWFibGVzOiBteXNxbE15c3FsQ29uZmlndXJhdGlvblZhcmlhYmxlc1RvVGVycmFmb3JtKHRoaXMuX3ZhcmlhYmxlcy5pbnRlcm5hbFZhbHVlKSxcbiAgICB9O1xuICB9XG5cbiAgcHJvdGVjdGVkIHN5bnRoZXNpemVIY2xBdHRyaWJ1dGVzKCk6IHsgW25hbWU6IHN0cmluZ106IGFueSB9IHtcbiAgICBjb25zdCBhdHRycyA9IHtcbiAgICAgIGNvbXBhcnRtZW50X2lkOiB7XG4gICAgICAgIHZhbHVlOiBjZGt0Zi5zdHJpbmdUb0hjbFRlcnJhZm9ybSh0aGlzLl9jb21wYXJ0bWVudElkKSxcbiAgICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwic3RyaW5nXCIsXG4gICAgICB9LFxuICAgICAgZGVmaW5lZF90YWdzOiB7XG4gICAgICAgIHZhbHVlOiBjZGt0Zi5oYXNoTWFwcGVySGNsKGNka3RmLnN0cmluZ1RvSGNsVGVycmFmb3JtKSh0aGlzLl9kZWZpbmVkVGFncyksXG4gICAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgICB0eXBlOiBcIm1hcFwiLFxuICAgICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcInN0cmluZ01hcFwiLFxuICAgICAgfSxcbiAgICAgIGRlc2NyaXB0aW9uOiB7XG4gICAgICAgIHZhbHVlOiBjZGt0Zi5zdHJpbmdUb0hjbFRlcnJhZm9ybSh0aGlzLl9kZXNjcmlwdGlvbiksXG4gICAgICAgIGlzQmxvY2s6IGZhbHNlLFxuICAgICAgICB0eXBlOiBcInNpbXBsZVwiLFxuICAgICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcInN0cmluZ1wiLFxuICAgICAgfSxcbiAgICAgIGRpc3BsYXlfbmFtZToge1xuICAgICAgICB2YWx1ZTogY2RrdGYuc3RyaW5nVG9IY2xUZXJyYWZvcm0odGhpcy5fZGlzcGxheU5hbWUpLFxuICAgICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJzdHJpbmdcIixcbiAgICAgIH0sXG4gICAgICBmcmVlZm9ybV90YWdzOiB7XG4gICAgICAgIHZhbHVlOiBjZGt0Zi5oYXNoTWFwcGVySGNsKGNka3RmLnN0cmluZ1RvSGNsVGVycmFmb3JtKSh0aGlzLl9mcmVlZm9ybVRhZ3MpLFxuICAgICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgICAgdHlwZTogXCJtYXBcIixcbiAgICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJzdHJpbmdNYXBcIixcbiAgICAgIH0sXG4gICAgICBpZDoge1xuICAgICAgICB2YWx1ZTogY2RrdGYuc3RyaW5nVG9IY2xUZXJyYWZvcm0odGhpcy5faWQpLFxuICAgICAgICBpc0Jsb2NrOiBmYWxzZSxcbiAgICAgICAgdHlwZTogXCJzaW1wbGVcIixcbiAgICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJzdHJpbmdcIixcbiAgICAgIH0sXG4gICAgICBwYXJlbnRfY29uZmlndXJhdGlvbl9pZDoge1xuICAgICAgICB2YWx1ZTogY2RrdGYuc3RyaW5nVG9IY2xUZXJyYWZvcm0odGhpcy5fcGFyZW50Q29uZmlndXJhdGlvbklkKSxcbiAgICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwic3RyaW5nXCIsXG4gICAgICB9LFxuICAgICAgc2hhcGVfbmFtZToge1xuICAgICAgICB2YWx1ZTogY2RrdGYuc3RyaW5nVG9IY2xUZXJyYWZvcm0odGhpcy5fc2hhcGVOYW1lKSxcbiAgICAgICAgaXNCbG9jazogZmFsc2UsXG4gICAgICAgIHR5cGU6IFwic2ltcGxlXCIsXG4gICAgICAgIHN0b3JhZ2VDbGFzc1R5cGU6IFwic3RyaW5nXCIsXG4gICAgICB9LFxuICAgICAgaW5pdF92YXJpYWJsZXM6IHtcbiAgICAgICAgdmFsdWU6IG15c3FsTXlzcWxDb25maWd1cmF0aW9uSW5pdFZhcmlhYmxlc1RvSGNsVGVycmFmb3JtKHRoaXMuX2luaXRWYXJpYWJsZXMuaW50ZXJuYWxWYWx1ZSksXG4gICAgICAgIGlzQmxvY2s6IHRydWUsXG4gICAgICAgIHR5cGU6IFwibGlzdFwiLFxuICAgICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcIk15c3FsTXlzcWxDb25maWd1cmF0aW9uSW5pdFZhcmlhYmxlc0xpc3RcIixcbiAgICAgIH0sXG4gICAgICB0aW1lb3V0czoge1xuICAgICAgICB2YWx1ZTogbXlzcWxNeXNxbENvbmZpZ3VyYXRpb25UaW1lb3V0c1RvSGNsVGVycmFmb3JtKHRoaXMuX3RpbWVvdXRzLmludGVybmFsVmFsdWUpLFxuICAgICAgICBpc0Jsb2NrOiB0cnVlLFxuICAgICAgICB0eXBlOiBcInN0cnVjdFwiLFxuICAgICAgICBzdG9yYWdlQ2xhc3NUeXBlOiBcIk15c3FsTXlzcWxDb25maWd1cmF0aW9uVGltZW91dHNcIixcbiAgICAgIH0sXG4gICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgdmFsdWU6IG15c3FsTXlzcWxDb25maWd1cmF0aW9uVmFyaWFibGVzVG9IY2xUZXJyYWZvcm0odGhpcy5fdmFyaWFibGVzLmludGVybmFsVmFsdWUpLFxuICAgICAgICBpc0Jsb2NrOiB0cnVlLFxuICAgICAgICB0eXBlOiBcImxpc3RcIixcbiAgICAgICAgc3RvcmFnZUNsYXNzVHlwZTogXCJNeXNxbE15c3FsQ29uZmlndXJhdGlvblZhcmlhYmxlc0xpc3RcIixcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIC8vIHJlbW92ZSB1bmRlZmluZWQgYXR0cmlidXRlc1xuICAgIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoT2JqZWN0LmVudHJpZXMoYXR0cnMpLmZpbHRlcigoW18sIHZhbHVlXSkgPT4gdmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZS52YWx1ZSAhPT0gdW5kZWZpbmVkICkpXG4gIH1cbn1cbiJdfQ==