@decaf-ts/utils 0.3.2 → 0.3.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/build-scripts.cjs +234 -77
- package/bin/tag-release.cjs +234 -77
- package/bin/update-scripts.cjs +234 -77
- package/dist/utils.cjs +2 -2
- package/dist/utils.esm.cjs +2 -2
- package/lib/cli/commands/build-scripts.cjs +1 -1
- package/lib/esm/cli/commands/build-scripts.js +1 -1
- package/lib/esm/index.d.ts +2 -2
- package/lib/esm/index.js +2 -2
- package/lib/index.cjs +2 -2
- package/lib/index.d.ts +2 -2
- package/package.json +2 -2
package/bin/update-scripts.cjs
CHANGED
|
@@ -6125,7 +6125,7 @@ var prompts = /*@__PURE__*/getDefaultExportFromCjs(promptsExports);
|
|
|
6125
6125
|
* @description Enum for log levels.
|
|
6126
6126
|
* @summary Defines different levels of logging for the application.
|
|
6127
6127
|
* @enum {string}
|
|
6128
|
-
* @memberOf
|
|
6128
|
+
* @memberOf module:Logging
|
|
6129
6129
|
*/
|
|
6130
6130
|
var LogLevel;
|
|
6131
6131
|
(function (LogLevel) {
|
|
@@ -6143,13 +6143,13 @@ var LogLevel;
|
|
|
6143
6143
|
/**
|
|
6144
6144
|
* @description Numeric values associated with log levels.
|
|
6145
6145
|
* @summary Provides a numeric representation of log levels for comparison and filtering.
|
|
6146
|
-
* @const
|
|
6147
|
-
* @property {number} error - Numeric value for error level (
|
|
6148
|
-
* @property {number} info - Numeric value for info level (
|
|
6149
|
-
* @property {number} verbose - Numeric value for verbose level (
|
|
6150
|
-
* @property {number} debug - Numeric value for debug level (
|
|
6151
|
-
* @property {number} silly - Numeric value for silly level (
|
|
6152
|
-
* @memberOf
|
|
6146
|
+
* @const NumericLogLevels
|
|
6147
|
+
* @property {number} error - Numeric value for error level (2).
|
|
6148
|
+
* @property {number} info - Numeric value for info level (4).
|
|
6149
|
+
* @property {number} verbose - Numeric value for verbose level (6).
|
|
6150
|
+
* @property {number} debug - Numeric value for debug level (7).
|
|
6151
|
+
* @property {number} silly - Numeric value for silly level (9).
|
|
6152
|
+
* @memberOf module:Logging
|
|
6153
6153
|
*/
|
|
6154
6154
|
const NumericLogLevels = {
|
|
6155
6155
|
error: 2,
|
|
@@ -6158,9 +6158,17 @@ const NumericLogLevels = {
|
|
|
6158
6158
|
debug: 7,
|
|
6159
6159
|
silly: 9,
|
|
6160
6160
|
};
|
|
6161
|
+
/**
|
|
6162
|
+
* @description Enum for logging output modes.
|
|
6163
|
+
* @summary Defines different output formats for log messages.
|
|
6164
|
+
* @enum {string}
|
|
6165
|
+
* @memberOf module:Logging
|
|
6166
|
+
*/
|
|
6161
6167
|
var LoggingMode;
|
|
6162
6168
|
(function (LoggingMode) {
|
|
6169
|
+
/** Raw text format for human readability */
|
|
6163
6170
|
LoggingMode["RAW"] = "raw";
|
|
6171
|
+
/** JSON format for machine parsing */
|
|
6164
6172
|
LoggingMode["JSON"] = "json";
|
|
6165
6173
|
})(LoggingMode || (LoggingMode = {}));
|
|
6166
6174
|
/**
|
|
@@ -6169,23 +6177,24 @@ var LoggingMode;
|
|
|
6169
6177
|
* @const DefaultTheme
|
|
6170
6178
|
* @typedef {Theme} DefaultTheme
|
|
6171
6179
|
* @property {Object} class - Styling for class names.
|
|
6172
|
-
* @property {number} class.fg - Foreground color code for class names (
|
|
6180
|
+
* @property {number} class.fg - Foreground color code for class names (34).
|
|
6173
6181
|
* @property {Object} id - Styling for identifiers.
|
|
6174
6182
|
* @property {number} id.fg - Foreground color code for identifiers (36).
|
|
6175
6183
|
* @property {Object} stack - Styling for stack traces (empty object).
|
|
6176
6184
|
* @property {Object} timestamp - Styling for timestamps (empty object).
|
|
6177
6185
|
* @property {Object} message - Styling for different types of messages.
|
|
6178
6186
|
* @property {Object} message.error - Styling for error messages.
|
|
6179
|
-
* @property {number} message.error.fg - Foreground color code for error messages (
|
|
6187
|
+
* @property {number} message.error.fg - Foreground color code for error messages (31).
|
|
6180
6188
|
* @property {Object} method - Styling for method names (empty object).
|
|
6181
6189
|
* @property {Object} logLevel - Styling for different log levels.
|
|
6182
6190
|
* @property {Object} logLevel.error - Styling for error level logs.
|
|
6183
|
-
* @property {number} logLevel.error.fg - Foreground color code for error level logs (
|
|
6191
|
+
* @property {number} logLevel.error.fg - Foreground color code for error level logs (31).
|
|
6192
|
+
* @property {string[]} logLevel.error.style - Style attributes for error level logs (["bold"]).
|
|
6184
6193
|
* @property {Object} logLevel.info - Styling for info level logs (empty object).
|
|
6185
6194
|
* @property {Object} logLevel.verbose - Styling for verbose level logs (empty object).
|
|
6186
6195
|
* @property {Object} logLevel.debug - Styling for debug level logs.
|
|
6187
|
-
* @property {number} logLevel.debug.fg - Foreground color code for debug level logs (
|
|
6188
|
-
* @memberOf
|
|
6196
|
+
* @property {number} logLevel.debug.fg - Foreground color code for debug level logs (33).
|
|
6197
|
+
* @memberOf module:Logging
|
|
6189
6198
|
*/
|
|
6190
6199
|
const DefaultTheme = {
|
|
6191
6200
|
class: {
|
|
@@ -6221,12 +6230,15 @@ const DefaultTheme = {
|
|
|
6221
6230
|
* @typedef {LoggingConfig} DefaultLoggingConfig
|
|
6222
6231
|
* @property {number} verbose - Verbosity level (0).
|
|
6223
6232
|
* @property {LogLevel} level - Default log level (LogLevel.info).
|
|
6233
|
+
* @property {boolean} logLevel - Whether to display log level in output (true).
|
|
6234
|
+
* @property {LoggingMode} mode - Output format mode (LoggingMode.RAW).
|
|
6224
6235
|
* @property {boolean} style - Whether to apply styling to log output (false).
|
|
6236
|
+
* @property {string} separator - Separator between log components (" - ").
|
|
6225
6237
|
* @property {boolean} timestamp - Whether to include timestamps in log messages (true).
|
|
6226
6238
|
* @property {string} timestampFormat - Format for timestamps ("HH:mm:ss.SSS").
|
|
6227
6239
|
* @property {boolean} context - Whether to include context information in log messages (true).
|
|
6228
6240
|
* @property {Theme} theme - The theme to use for styling log messages (DefaultTheme).
|
|
6229
|
-
* @memberOf
|
|
6241
|
+
* @memberOf module:Logging
|
|
6230
6242
|
*/
|
|
6231
6243
|
const DefaultLoggingConfig = {
|
|
6232
6244
|
verbose: 0,
|
|
@@ -6234,6 +6246,7 @@ const DefaultLoggingConfig = {
|
|
|
6234
6246
|
logLevel: true,
|
|
6235
6247
|
mode: LoggingMode.RAW,
|
|
6236
6248
|
style: false,
|
|
6249
|
+
contextSeparator: ".",
|
|
6237
6250
|
separator: " - ",
|
|
6238
6251
|
timestamp: true,
|
|
6239
6252
|
timestampFormat: "HH:mm:ss.SSS",
|
|
@@ -6681,20 +6694,29 @@ function style(...t) {
|
|
|
6681
6694
|
|
|
6682
6695
|
/**
|
|
6683
6696
|
* @description A minimal logger implementation.
|
|
6684
|
-
* @summary MiniLogger is a lightweight logging class that implements the
|
|
6685
|
-
* It provides basic logging functionality with support for different log levels
|
|
6697
|
+
* @summary MiniLogger is a lightweight logging class that implements the Logger interface.
|
|
6698
|
+
* It provides basic logging functionality with support for different log levels, verbosity,
|
|
6699
|
+
* context-aware logging, and customizable formatting.
|
|
6700
|
+
* @param {string} context - The context (typically class name) this logger is associated with
|
|
6701
|
+
* @param {Partial<LoggingConfig>} conf - Optional configuration to override global settings
|
|
6702
|
+
* @class MiniLogger
|
|
6703
|
+
* @example
|
|
6704
|
+
* // Create a new logger for a class
|
|
6705
|
+
* const logger = new MiniLogger('MyClass');
|
|
6686
6706
|
*
|
|
6687
|
-
*
|
|
6707
|
+
* // Log messages at different levels
|
|
6708
|
+
* logger.info('This is an info message');
|
|
6709
|
+
* logger.debug('This is a debug message');
|
|
6710
|
+
* logger.error('Something went wrong');
|
|
6711
|
+
*
|
|
6712
|
+
* // Create a child logger for a specific method
|
|
6713
|
+
* const methodLogger = logger.for('myMethod');
|
|
6714
|
+
* methodLogger.verbose('Detailed information', 2);
|
|
6715
|
+
*
|
|
6716
|
+
* // Log with custom configuration
|
|
6717
|
+
* logger.for('specialMethod', { style: true }).info('Styled message');
|
|
6688
6718
|
*/
|
|
6689
6719
|
class MiniLogger {
|
|
6690
|
-
/**
|
|
6691
|
-
* @description Creates a new MiniLogger instance.
|
|
6692
|
-
* @summary Initializes a MiniLogger with the given class name, optional configuration, and method name.
|
|
6693
|
-
*
|
|
6694
|
-
* @param context - The name of the class using this logger.
|
|
6695
|
-
* @param [conf] - Optional logging configuration. Defaults to Info level and verbosity 0.
|
|
6696
|
-
* @param [id] - Optional unique identifier for the logger instance.
|
|
6697
|
-
*/
|
|
6698
6720
|
constructor(context, conf) {
|
|
6699
6721
|
this.context = context;
|
|
6700
6722
|
this.conf = conf;
|
|
@@ -6704,22 +6726,46 @@ class MiniLogger {
|
|
|
6704
6726
|
return this.conf[key];
|
|
6705
6727
|
return Logging.getConfig()[key];
|
|
6706
6728
|
}
|
|
6707
|
-
|
|
6729
|
+
/**
|
|
6730
|
+
* @description Creates a child logger for a specific method or context
|
|
6731
|
+
* @summary Returns a new logger instance with the current context extended by the specified method name
|
|
6732
|
+
* @param {string | Function} method - The method name or function to create a logger for
|
|
6733
|
+
* @param {Partial<LoggingConfig>} config - Optional configuration to override settings
|
|
6734
|
+
* @param {...any} args - Additional arguments to pass to the logger factory
|
|
6735
|
+
* @return {Logger} A new logger instance for the specified method
|
|
6736
|
+
*/
|
|
6737
|
+
for(method, config) {
|
|
6708
6738
|
method = method
|
|
6709
6739
|
? typeof method === "string"
|
|
6710
6740
|
? method
|
|
6711
6741
|
: method.name
|
|
6712
6742
|
: undefined;
|
|
6713
|
-
return
|
|
6743
|
+
return new Proxy(this, {
|
|
6744
|
+
get: (target, p, receiver) => {
|
|
6745
|
+
const result = Reflect.get(target, p, receiver);
|
|
6746
|
+
if (p === "config") {
|
|
6747
|
+
return new Proxy(this.config, {
|
|
6748
|
+
get: (target, p) => {
|
|
6749
|
+
if (config && p in config)
|
|
6750
|
+
return config[p];
|
|
6751
|
+
return Reflect.get(target, p, receiver);
|
|
6752
|
+
},
|
|
6753
|
+
});
|
|
6754
|
+
}
|
|
6755
|
+
if (p === "context") {
|
|
6756
|
+
return [result, method].join(".");
|
|
6757
|
+
}
|
|
6758
|
+
return result;
|
|
6759
|
+
},
|
|
6760
|
+
});
|
|
6714
6761
|
}
|
|
6715
6762
|
/**
|
|
6716
|
-
* @description Creates a formatted log string
|
|
6717
|
-
* @summary Generates a log string with timestamp, colored log level, and message
|
|
6718
|
-
*
|
|
6719
|
-
* @param
|
|
6720
|
-
* @param
|
|
6721
|
-
* @
|
|
6722
|
-
* @return A formatted log string.
|
|
6763
|
+
* @description Creates a formatted log string
|
|
6764
|
+
* @summary Generates a log string with timestamp, colored log level, context, and message
|
|
6765
|
+
* @param {LogLevel} level - The log level for this message
|
|
6766
|
+
* @param {StringLike | Error} message - The message to log or an Error object
|
|
6767
|
+
* @param {string} [stack] - Optional stack trace to include in the log
|
|
6768
|
+
* @return {string} A formatted log string with all components
|
|
6723
6769
|
*/
|
|
6724
6770
|
createLog(level, message, stack) {
|
|
6725
6771
|
const log = [];
|
|
@@ -6764,13 +6810,13 @@ class MiniLogger {
|
|
|
6764
6810
|
return log.join(this.config("separator"));
|
|
6765
6811
|
}
|
|
6766
6812
|
/**
|
|
6767
|
-
* @description Logs a message with the specified log level
|
|
6813
|
+
* @description Logs a message with the specified log level
|
|
6768
6814
|
* @summary Checks if the message should be logged based on the current log level,
|
|
6769
|
-
* then uses the appropriate console method to output the log
|
|
6770
|
-
*
|
|
6771
|
-
* @param
|
|
6772
|
-
* @param
|
|
6773
|
-
* @
|
|
6815
|
+
* then uses the appropriate console method to output the formatted log
|
|
6816
|
+
* @param {LogLevel} level - The log level of the message
|
|
6817
|
+
* @param {StringLike | Error} msg - The message to be logged or an Error object
|
|
6818
|
+
* @param {string} [stack] - Optional stack trace to include in the log
|
|
6819
|
+
* @return {void}
|
|
6774
6820
|
*/
|
|
6775
6821
|
log(level, msg, stack) {
|
|
6776
6822
|
if (NumericLogLevels[this.config("level")] <
|
|
@@ -6794,96 +6840,166 @@ class MiniLogger {
|
|
|
6794
6840
|
method(this.createLog(level, msg, stack));
|
|
6795
6841
|
}
|
|
6796
6842
|
/**
|
|
6797
|
-
* @description
|
|
6798
|
-
* @summary Logs a message at the
|
|
6799
|
-
*
|
|
6800
|
-
* @param
|
|
6801
|
-
* @
|
|
6843
|
+
* @description Logs a message at the silly level
|
|
6844
|
+
* @summary Logs a message at the silly level if the current verbosity setting allows it
|
|
6845
|
+
* @param {StringLike} msg - The message to be logged
|
|
6846
|
+
* @param {number} [verbosity=0] - The verbosity level of the message
|
|
6847
|
+
* @return {void}
|
|
6802
6848
|
*/
|
|
6803
6849
|
silly(msg, verbosity = 0) {
|
|
6804
6850
|
if (this.config("verbose") >= verbosity)
|
|
6805
6851
|
this.log(LogLevel.verbose, msg);
|
|
6806
6852
|
}
|
|
6807
6853
|
/**
|
|
6808
|
-
* @description Logs a verbose
|
|
6809
|
-
* @summary Logs a message at the
|
|
6810
|
-
*
|
|
6811
|
-
* @param
|
|
6812
|
-
* @
|
|
6854
|
+
* @description Logs a message at the verbose level
|
|
6855
|
+
* @summary Logs a message at the verbose level if the current verbosity setting allows it
|
|
6856
|
+
* @param {StringLike} msg - The message to be logged
|
|
6857
|
+
* @param {number} [verbosity=0] - The verbosity level of the message
|
|
6858
|
+
* @return {void}
|
|
6813
6859
|
*/
|
|
6814
6860
|
verbose(msg, verbosity = 0) {
|
|
6815
6861
|
if (this.config("verbose") >= verbosity)
|
|
6816
6862
|
this.log(LogLevel.verbose, msg);
|
|
6817
6863
|
}
|
|
6818
6864
|
/**
|
|
6819
|
-
* @description Logs
|
|
6820
|
-
* @summary Logs a message at the
|
|
6821
|
-
*
|
|
6822
|
-
* @
|
|
6865
|
+
* @description Logs a message at the info level
|
|
6866
|
+
* @summary Logs a message at the info level for general application information
|
|
6867
|
+
* @param {StringLike} msg - The message to be logged
|
|
6868
|
+
* @return {void}
|
|
6823
6869
|
*/
|
|
6824
6870
|
info(msg) {
|
|
6825
6871
|
this.log(LogLevel.info, msg);
|
|
6826
6872
|
}
|
|
6827
6873
|
/**
|
|
6828
|
-
* @description Logs a debug
|
|
6829
|
-
* @summary Logs a message at the
|
|
6830
|
-
*
|
|
6831
|
-
* @
|
|
6874
|
+
* @description Logs a message at the debug level
|
|
6875
|
+
* @summary Logs a message at the debug level for detailed troubleshooting information
|
|
6876
|
+
* @param {StringLike} msg - The message to be logged
|
|
6877
|
+
* @return {void}
|
|
6832
6878
|
*/
|
|
6833
6879
|
debug(msg) {
|
|
6834
6880
|
this.log(LogLevel.debug, msg);
|
|
6835
6881
|
}
|
|
6836
6882
|
/**
|
|
6837
|
-
* @description Logs
|
|
6838
|
-
* @summary Logs a message at the
|
|
6839
|
-
*
|
|
6840
|
-
* @
|
|
6883
|
+
* @description Logs a message at the error level
|
|
6884
|
+
* @summary Logs a message at the error level for errors and exceptions
|
|
6885
|
+
* @param {StringLike | Error} msg - The message to be logged or an Error object
|
|
6886
|
+
* @return {void}
|
|
6841
6887
|
*/
|
|
6842
6888
|
error(msg) {
|
|
6843
6889
|
this.log(LogLevel.error, msg);
|
|
6844
6890
|
}
|
|
6891
|
+
/**
|
|
6892
|
+
* @description Updates the logger configuration
|
|
6893
|
+
* @summary Merges the provided configuration with the existing configuration
|
|
6894
|
+
* @param {Partial<LoggingConfig>} config - The configuration options to apply
|
|
6895
|
+
* @return {void}
|
|
6896
|
+
*/
|
|
6845
6897
|
setConfig(config) {
|
|
6846
6898
|
this.conf = { ...(this.conf || {}), ...config };
|
|
6847
6899
|
}
|
|
6848
6900
|
}
|
|
6849
6901
|
/**
|
|
6850
|
-
* @description A static class for managing logging operations
|
|
6902
|
+
* @description A static class for managing logging operations
|
|
6851
6903
|
* @summary The Logging class provides a centralized logging mechanism with support for
|
|
6852
|
-
* different log levels and
|
|
6904
|
+
* different log levels, verbosity, and styling. It uses a singleton pattern to maintain a global
|
|
6853
6905
|
* logger instance and allows creating specific loggers for different classes and methods.
|
|
6906
|
+
* @class Logging
|
|
6907
|
+
* @example
|
|
6908
|
+
* // Set global configuration
|
|
6909
|
+
* Logging.setConfig({ level: LogLevel.debug, style: true });
|
|
6854
6910
|
*
|
|
6855
|
-
*
|
|
6911
|
+
* // Get a logger for a specific class
|
|
6912
|
+
* const logger = Logging.for('MyClass');
|
|
6913
|
+
*
|
|
6914
|
+
* // Log messages at different levels
|
|
6915
|
+
* logger.info('Application started');
|
|
6916
|
+
* logger.debug('Processing data...');
|
|
6917
|
+
*
|
|
6918
|
+
* // Log with context
|
|
6919
|
+
* const methodLogger = Logging.for('MyClass.myMethod');
|
|
6920
|
+
* methodLogger.verbose('Detailed operation information', 1);
|
|
6921
|
+
*
|
|
6922
|
+
* // Log errors
|
|
6923
|
+
* try {
|
|
6924
|
+
* // some operation
|
|
6925
|
+
* } catch (error) {
|
|
6926
|
+
* logger.error(error);
|
|
6927
|
+
* }
|
|
6928
|
+
* @mermaid
|
|
6929
|
+
* classDiagram
|
|
6930
|
+
* class Logger {
|
|
6931
|
+
* <<interface>>
|
|
6932
|
+
* +for(method, config, ...args)
|
|
6933
|
+
* +silly(msg, verbosity)
|
|
6934
|
+
* +verbose(msg, verbosity)
|
|
6935
|
+
* +info(msg)
|
|
6936
|
+
* +debug(msg)
|
|
6937
|
+
* +error(msg)
|
|
6938
|
+
* +setConfig(config)
|
|
6939
|
+
* }
|
|
6940
|
+
*
|
|
6941
|
+
* class Logging {
|
|
6942
|
+
* -global: Logger
|
|
6943
|
+
* -_factory: LoggerFactory
|
|
6944
|
+
* -_config: LoggingConfig
|
|
6945
|
+
* +setFactory(factory)
|
|
6946
|
+
* +setConfig(config)
|
|
6947
|
+
* +getConfig()
|
|
6948
|
+
* +get()
|
|
6949
|
+
* +verbose(msg, verbosity)
|
|
6950
|
+
* +info(msg)
|
|
6951
|
+
* +debug(msg)
|
|
6952
|
+
* +silly(msg)
|
|
6953
|
+
* +error(msg)
|
|
6954
|
+
* +for(object, config, ...args)
|
|
6955
|
+
* +because(reason, id)
|
|
6956
|
+
* +theme(text, type, loggerLevel, template)
|
|
6957
|
+
* }
|
|
6958
|
+
*
|
|
6959
|
+
* class MiniLogger {
|
|
6960
|
+
* +constructor(context, conf?)
|
|
6961
|
+
* }
|
|
6962
|
+
*
|
|
6963
|
+
* Logging ..> Logger : creates
|
|
6964
|
+
* Logging ..> MiniLogger : creates by default
|
|
6856
6965
|
*/
|
|
6857
6966
|
class Logging {
|
|
6858
6967
|
/**
|
|
6859
|
-
* @description Factory function for creating logger instances
|
|
6860
|
-
* @summary A function that creates new
|
|
6968
|
+
* @description Factory function for creating logger instances
|
|
6969
|
+
* @summary A function that creates new Logger instances. By default, it creates a MiniLogger.
|
|
6861
6970
|
*/
|
|
6862
6971
|
static { this._factory = (object, config) => {
|
|
6863
6972
|
return new MiniLogger(object, config);
|
|
6864
6973
|
}; }
|
|
6865
6974
|
/**
|
|
6866
|
-
* @description Configuration for the logging system
|
|
6867
|
-
* @summary Stores the global verbosity level and
|
|
6975
|
+
* @description Configuration for the logging system
|
|
6976
|
+
* @summary Stores the global logging configuration including verbosity, log level, styling, and formatting settings
|
|
6868
6977
|
*/
|
|
6869
6978
|
static { this._config = DefaultLoggingConfig; }
|
|
6979
|
+
constructor() { }
|
|
6870
6980
|
/**
|
|
6871
|
-
* @description
|
|
6872
|
-
* @summary
|
|
6981
|
+
* @description Sets the factory function for creating logger instances
|
|
6982
|
+
* @summary Allows customizing how logger instances are created
|
|
6983
|
+
* @param {LoggerFactory} factory - The factory function to use for creating loggers
|
|
6984
|
+
* @return {void}
|
|
6873
6985
|
*/
|
|
6874
|
-
constructor() { }
|
|
6875
6986
|
static setFactory(factory) {
|
|
6876
6987
|
Logging._factory = factory;
|
|
6877
6988
|
}
|
|
6878
6989
|
/**
|
|
6879
|
-
* @description
|
|
6880
|
-
* @summary Allows updating the global logging configuration
|
|
6881
|
-
*
|
|
6882
|
-
* @
|
|
6990
|
+
* @description Updates the global logging configuration
|
|
6991
|
+
* @summary Allows updating the global logging configuration with new settings
|
|
6992
|
+
* @param {Partial<LoggingConfig>} config - The configuration options to apply
|
|
6993
|
+
* @return {void}
|
|
6883
6994
|
*/
|
|
6884
6995
|
static setConfig(config) {
|
|
6885
6996
|
Object.assign(this._config, config);
|
|
6886
6997
|
}
|
|
6998
|
+
/**
|
|
6999
|
+
* @description Gets a copy of the current global logging configuration
|
|
7000
|
+
* @summary Returns a copy of the current global logging configuration
|
|
7001
|
+
* @return {LoggingConfig} A copy of the current configuration
|
|
7002
|
+
*/
|
|
6887
7003
|
static getConfig() {
|
|
6888
7004
|
return Object.assign({}, this._config);
|
|
6889
7005
|
}
|
|
@@ -6943,6 +7059,14 @@ class Logging {
|
|
|
6943
7059
|
static error(msg) {
|
|
6944
7060
|
return this.get().error(msg);
|
|
6945
7061
|
}
|
|
7062
|
+
/**
|
|
7063
|
+
* @description Creates a logger for a specific object or context
|
|
7064
|
+
* @summary Creates a new logger instance for the given object or context using the factory function
|
|
7065
|
+
* @param {LoggingContext} object - The object, class, or context to create a logger for
|
|
7066
|
+
* @param {Partial<LoggingConfig>} [config] - Optional configuration to override global settings
|
|
7067
|
+
* @param {...any} args - Additional arguments to pass to the logger factory
|
|
7068
|
+
* @return {Logger} A new logger instance for the specified object or context
|
|
7069
|
+
*/
|
|
6946
7070
|
static for(object, config, ...args) {
|
|
6947
7071
|
object =
|
|
6948
7072
|
typeof object === "string"
|
|
@@ -6965,6 +7089,39 @@ class Logging {
|
|
|
6965
7089
|
static because(reason, id) {
|
|
6966
7090
|
return this._factory(reason, this._config, id);
|
|
6967
7091
|
}
|
|
7092
|
+
/**
|
|
7093
|
+
* @description Applies theme styling to text
|
|
7094
|
+
* @summary Applies styling (colors, formatting) to text based on the theme configuration
|
|
7095
|
+
* @param {string} text - The text to style
|
|
7096
|
+
* @param {string} type - The type of element to style (e.g., "class", "message", "logLevel")
|
|
7097
|
+
* @param {LogLevel} loggerLevel - The log level to use for styling
|
|
7098
|
+
* @param {Theme} [template=DefaultTheme] - The theme to use for styling
|
|
7099
|
+
* @return {string} The styled text
|
|
7100
|
+
* @mermaid
|
|
7101
|
+
* sequenceDiagram
|
|
7102
|
+
* participant Caller
|
|
7103
|
+
* participant Theme as Logging.theme
|
|
7104
|
+
* participant Apply as apply function
|
|
7105
|
+
* participant Style as styled-string-builder
|
|
7106
|
+
*
|
|
7107
|
+
* Caller->>Theme: theme(text, type, loggerLevel)
|
|
7108
|
+
* Theme->>Theme: Check if styling is enabled
|
|
7109
|
+
* alt styling disabled
|
|
7110
|
+
* Theme-->>Caller: return original text
|
|
7111
|
+
* else styling enabled
|
|
7112
|
+
* Theme->>Theme: Get theme for type
|
|
7113
|
+
* alt theme not found
|
|
7114
|
+
* Theme-->>Caller: return original text
|
|
7115
|
+
* else theme found
|
|
7116
|
+
* Theme->>Theme: Determine actual theme based on log level
|
|
7117
|
+
* Theme->>Apply: Apply each style property
|
|
7118
|
+
* Apply->>Style: Apply colors and formatting
|
|
7119
|
+
* Style-->>Apply: Return styled text
|
|
7120
|
+
* Apply-->>Theme: Return styled text
|
|
7121
|
+
* Theme-->>Caller: Return final styled text
|
|
7122
|
+
* end
|
|
7123
|
+
* end
|
|
7124
|
+
*/
|
|
6968
7125
|
static theme(text, type, loggerLevel, template = DefaultTheme) {
|
|
6969
7126
|
if (!this._config.style)
|
|
6970
7127
|
return text;
|
|
@@ -10307,4 +10464,4 @@ new TemplateSync()
|
|
|
10307
10464
|
TemplateSync.log.error(`Error preparing template: ${e}`);
|
|
10308
10465
|
process.exit(1);
|
|
10309
10466
|
});
|
|
10310
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBkYXRlLXNjcmlwdHMuY2pzIiwic291cmNlcyI6WyIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9kaXN0L3V0aWwvYWN0aW9uLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvZGlzdC91dGlsL3N0cmlwLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvZGlzdC91dGlsL2NsZWFyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvZGlzdC91dGlsL2ZpZ3VyZXMuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9kaXN0L3V0aWwvc3R5bGUuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9kaXN0L3V0aWwvbGluZXMuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9kaXN0L3V0aWwvd3JhcC5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2Rpc3QvdXRpbC9lbnRyaWVzVG9EaXNwbGF5LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvZGlzdC91dGlsL2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvZGlzdC9lbGVtZW50cy9wcm9tcHQuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9kaXN0L2VsZW1lbnRzL3RleHQuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9kaXN0L2VsZW1lbnRzL3NlbGVjdC5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2Rpc3QvZWxlbWVudHMvdG9nZ2xlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvZGlzdC9kYXRlcGFydHMvZGF0ZXBhcnQuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9kaXN0L2RhdGVwYXJ0cy9tZXJpZGllbS5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2Rpc3QvZGF0ZXBhcnRzL2RheS5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2Rpc3QvZGF0ZXBhcnRzL2hvdXJzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvZGlzdC9kYXRlcGFydHMvbWlsbGlzZWNvbmRzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvZGlzdC9kYXRlcGFydHMvbWludXRlcy5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2Rpc3QvZGF0ZXBhcnRzL21vbnRoLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvZGlzdC9kYXRlcGFydHMvc2Vjb25kcy5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2Rpc3QvZGF0ZXBhcnRzL3llYXIuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9kaXN0L2RhdGVwYXJ0cy9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2Rpc3QvZWxlbWVudHMvZGF0ZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2Rpc3QvZWxlbWVudHMvbnVtYmVyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvZGlzdC9lbGVtZW50cy9tdWx0aXNlbGVjdC5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2Rpc3QvZWxlbWVudHMvYXV0b2NvbXBsZXRlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvZGlzdC9lbGVtZW50cy9hdXRvY29tcGxldGVNdWx0aXNlbGVjdC5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2Rpc3QvZWxlbWVudHMvY29uZmlybS5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2Rpc3QvZWxlbWVudHMvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9kaXN0L3Byb21wdHMuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9kaXN0L2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvbGliL3V0aWwvYWN0aW9uLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvbGliL3V0aWwvc3RyaXAuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9saWIvdXRpbC9jbGVhci5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2xpYi91dGlsL2ZpZ3VyZXMuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9saWIvdXRpbC9zdHlsZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2xpYi91dGlsL2xpbmVzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvbGliL3V0aWwvd3JhcC5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2xpYi91dGlsL2VudHJpZXNUb0Rpc3BsYXkuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9saWIvdXRpbC9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2xpYi9lbGVtZW50cy9wcm9tcHQuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9saWIvZWxlbWVudHMvdGV4dC5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2xpYi9lbGVtZW50cy9zZWxlY3QuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9saWIvZWxlbWVudHMvdG9nZ2xlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvbGliL2RhdGVwYXJ0cy9kYXRlcGFydC5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2xpYi9kYXRlcGFydHMvbWVyaWRpZW0uanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9saWIvZGF0ZXBhcnRzL2RheS5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2xpYi9kYXRlcGFydHMvaG91cnMuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9saWIvZGF0ZXBhcnRzL21pbGxpc2Vjb25kcy5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2xpYi9kYXRlcGFydHMvbWludXRlcy5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2xpYi9kYXRlcGFydHMvbW9udGguanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9saWIvZGF0ZXBhcnRzL3NlY29uZHMuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9saWIvZGF0ZXBhcnRzL3llYXIuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9saWIvZGF0ZXBhcnRzL2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvbGliL2VsZW1lbnRzL2RhdGUuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9saWIvZWxlbWVudHMvbnVtYmVyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvbGliL2VsZW1lbnRzL211bHRpc2VsZWN0LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvbGliL2VsZW1lbnRzL2F1dG9jb21wbGV0ZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2xpYi9lbGVtZW50cy9hdXRvY29tcGxldGVNdWx0aXNlbGVjdC5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2xpYi9lbGVtZW50cy9jb25maXJtLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvbGliL2VsZW1lbnRzL2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvbGliL3Byb21wdHMuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9saWIvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9AZGVjYWYtdHMvbG9nZ2luZy9saWIvZXNtL2NvbnN0YW50cy5qcyIsIi4uL25vZGVfbW9kdWxlcy9zdHlsZWQtc3RyaW5nLWJ1aWxkZXIvbGliL2VzbS9jb25zdGFudHMuanMiLCIuLi9ub2RlX21vZHVsZXMvc3R5bGVkLXN0cmluZy1idWlsZGVyL2xpYi9lc20vY29sb3JzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3N0eWxlZC1zdHJpbmctYnVpbGRlci9saWIvZXNtL3N0cmluZ3MuanMiLCIuLi9ub2RlX21vZHVsZXMvQGRlY2FmLXRzL2xvZ2dpbmcvbGliL2VzbS9sb2dnaW5nLmpzIiwiLi4vc3JjL2lucHV0L2lucHV0LnRzIiwiLi4vc3JjL2NsaS9jb25zdGFudHMudHMiLCIuLi9zcmMvdXRpbHMvdGV4dC50cyIsIi4uL3NyYy91dGlscy9jb25zdGFudHMudHMiLCIuLi9zcmMvd3JpdGVycy9TdGFuZGFyZE91dHB1dFdyaXRlci50cyIsIi4uL3NyYy91dGlscy91dGlscy50cyIsIi4uL3NyYy91dGlscy9mcy50cyIsIi4uL3NyYy9vdXRwdXQvY29tbW9uLnRzIiwiLi4vc3JjL3V0aWxzL3dlYi50cyIsIi4uL25vZGVfbW9kdWxlcy90eXBlZC1vYmplY3QtYWNjdW11bGF0b3IvbGliL2VzbS9hY2N1bXVsYXRvci5qcyIsIi4uL3NyYy91dGlscy9lbnZpcm9ubWVudC50cyIsIi4uL3NyYy9jbGkvY29tbWFuZC50cyIsIi4uL3NyYy91dGlscy9odHRwLnRzIiwiLi4vc3JjL2NsaS9jb21tYW5kcy9idWlsZC1zY3JpcHRzLnRzIiwiLi4vc3JjL2NsaS9jb21tYW5kcy91cGRhdGUtc2NyaXB0cy50cyIsIi4uL3NyYy9iaW4vdXBkYXRlLXNjcmlwdHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IChrZXksIGlzU2VsZWN0KSA9PiB7XG4gIGlmIChrZXkubWV0YSAmJiBrZXkubmFtZSAhPT0gJ2VzY2FwZScpIHJldHVybjtcblxuICBpZiAoa2V5LmN0cmwpIHtcbiAgICBpZiAoa2V5Lm5hbWUgPT09ICdhJykgcmV0dXJuICdmaXJzdCc7XG4gICAgaWYgKGtleS5uYW1lID09PSAnYycpIHJldHVybiAnYWJvcnQnO1xuICAgIGlmIChrZXkubmFtZSA9PT0gJ2QnKSByZXR1cm4gJ2Fib3J0JztcbiAgICBpZiAoa2V5Lm5hbWUgPT09ICdlJykgcmV0dXJuICdsYXN0JztcbiAgICBpZiAoa2V5Lm5hbWUgPT09ICdnJykgcmV0dXJuICdyZXNldCc7XG4gIH1cblxuICBpZiAoaXNTZWxlY3QpIHtcbiAgICBpZiAoa2V5Lm5hbWUgPT09ICdqJykgcmV0dXJuICdkb3duJztcbiAgICBpZiAoa2V5Lm5hbWUgPT09ICdrJykgcmV0dXJuICd1cCc7XG4gIH1cblxuICBpZiAoa2V5Lm5hbWUgPT09ICdyZXR1cm4nKSByZXR1cm4gJ3N1Ym1pdCc7XG4gIGlmIChrZXkubmFtZSA9PT0gJ2VudGVyJykgcmV0dXJuICdzdWJtaXQnOyAvLyBjdHJsICsgSlxuXG4gIGlmIChrZXkubmFtZSA9PT0gJ2JhY2tzcGFjZScpIHJldHVybiAnZGVsZXRlJztcbiAgaWYgKGtleS5uYW1lID09PSAnZGVsZXRlJykgcmV0dXJuICdkZWxldGVGb3J3YXJkJztcbiAgaWYgKGtleS5uYW1lID09PSAnYWJvcnQnKSByZXR1cm4gJ2Fib3J0JztcbiAgaWYgKGtleS5uYW1lID09PSAnZXNjYXBlJykgcmV0dXJuICdleGl0JztcbiAgaWYgKGtleS5uYW1lID09PSAndGFiJykgcmV0dXJuICduZXh0JztcbiAgaWYgKGtleS5uYW1lID09PSAncGFnZWRvd24nKSByZXR1cm4gJ25leHRQYWdlJztcbiAgaWYgKGtleS5uYW1lID09PSAncGFnZXVwJykgcmV0dXJuICdwcmV2UGFnZSc7IC8vIFRPRE8gY3JlYXRlIGhvbWUoKSBpbiBwcm9tcHQgdHlwZXMgKGUuZy4gVGV4dFByb21wdClcblxuICBpZiAoa2V5Lm5hbWUgPT09ICdob21lJykgcmV0dXJuICdob21lJzsgLy8gVE9ETyBjcmVhdGUgZW5kKCkgaW4gcHJvbXB0IHR5cGVzIChlLmcuIFRleHRQcm9tcHQpXG5cbiAgaWYgKGtleS5uYW1lID09PSAnZW5kJykgcmV0dXJuICdlbmQnO1xuICBpZiAoa2V5Lm5hbWUgPT09ICd1cCcpIHJldHVybiAndXAnO1xuICBpZiAoa2V5Lm5hbWUgPT09ICdkb3duJykgcmV0dXJuICdkb3duJztcbiAgaWYgKGtleS5uYW1lID09PSAncmlnaHQnKSByZXR1cm4gJ3JpZ2h0JztcbiAgaWYgKGtleS5uYW1lID09PSAnbGVmdCcpIHJldHVybiAnbGVmdCc7XG4gIHJldHVybiBmYWxzZTtcbn07IiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHN0ciA9PiB7XG4gIGNvbnN0IHBhdHRlcm4gPSBbJ1tcXFxcdTAwMUJcXFxcdTAwOUJdW1tcXFxcXSgpIzs/XSooPzooPzooPzooPzo7Wy1hLXpBLVpcXFxcZFxcXFwvIyYuOj0/JUB+X10rKSp8W2EtekEtWlxcXFxkXSsoPzo7Wy1hLXpBLVpcXFxcZFxcXFwvIyYuOj0/JUB+X10qKSopP1xcXFx1MDAwNyknLCAnKD86KD86XFxcXGR7MSw0fSg/OjtcXFxcZHswLDR9KSopP1tcXFxcZEEtUFJaY2YtbnRxcnk9Pjx+XSkpJ10uam9pbignfCcpO1xuICBjb25zdCBSR1ggPSBuZXcgUmVnRXhwKHBhdHRlcm4sICdnJyk7XG4gIHJldHVybiB0eXBlb2Ygc3RyID09PSAnc3RyaW5nJyA/IHN0ci5yZXBsYWNlKFJHWCwgJycpIDogc3RyO1xufTsiLCIndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIF9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyKG8sIGFsbG93QXJyYXlMaWtlKSB7IHZhciBpdCA9IHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdIHx8IG9bXCJAQGl0ZXJhdG9yXCJdOyBpZiAoIWl0KSB7IGlmIChBcnJheS5pc0FycmF5KG8pIHx8IChpdCA9IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvKSkgfHwgYWxsb3dBcnJheUxpa2UgJiYgbyAmJiB0eXBlb2Ygby5sZW5ndGggPT09IFwibnVtYmVyXCIpIHsgaWYgKGl0KSBvID0gaXQ7IHZhciBpID0gMDsgdmFyIEYgPSBmdW5jdGlvbiBGKCkge307IHJldHVybiB7IHM6IEYsIG46IGZ1bmN0aW9uIG4oKSB7IGlmIChpID49IG8ubGVuZ3RoKSByZXR1cm4geyBkb25lOiB0cnVlIH07IHJldHVybiB7IGRvbmU6IGZhbHNlLCB2YWx1ZTogb1tpKytdIH07IH0sIGU6IGZ1bmN0aW9uIGUoX2UpIHsgdGhyb3cgX2U7IH0sIGY6IEYgfTsgfSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH0gdmFyIG5vcm1hbENvbXBsZXRpb24gPSB0cnVlLCBkaWRFcnIgPSBmYWxzZSwgZXJyOyByZXR1cm4geyBzOiBmdW5jdGlvbiBzKCkgeyBpdCA9IGl0LmNhbGwobyk7IH0sIG46IGZ1bmN0aW9uIG4oKSB7IHZhciBzdGVwID0gaXQubmV4dCgpOyBub3JtYWxDb21wbGV0aW9uID0gc3RlcC5kb25lOyByZXR1cm4gc3RlcDsgfSwgZTogZnVuY3Rpb24gZShfZTIpIHsgZGlkRXJyID0gdHJ1ZTsgZXJyID0gX2UyOyB9LCBmOiBmdW5jdGlvbiBmKCkgeyB0cnkgeyBpZiAoIW5vcm1hbENvbXBsZXRpb24gJiYgaXQucmV0dXJuICE9IG51bGwpIGl0LnJldHVybigpOyB9IGZpbmFsbHkgeyBpZiAoZGlkRXJyKSB0aHJvdyBlcnI7IH0gfSB9OyB9XG5cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHsgaWYgKCFvKSByZXR1cm47IGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTsgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTsgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7IGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikgeyBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSBhcnIyW2ldID0gYXJyW2ldOyByZXR1cm4gYXJyMjsgfVxuXG5jb25zdCBzdHJpcCA9IHJlcXVpcmUoJy4vc3RyaXAnKTtcblxuY29uc3QgX3JlcXVpcmUgPSByZXF1aXJlKCdzaXN0ZXJhbnNpJyksXG4gICAgICBlcmFzZSA9IF9yZXF1aXJlLmVyYXNlLFxuICAgICAgY3Vyc29yID0gX3JlcXVpcmUuY3Vyc29yO1xuXG5jb25zdCB3aWR0aCA9IHN0ciA9PiBbLi4uc3RyaXAoc3RyKV0ubGVuZ3RoO1xuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gcHJvbXB0XG4gKiBAcGFyYW0ge251bWJlcn0gcGVyTGluZVxuICovXG5cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAocHJvbXB0LCBwZXJMaW5lKSB7XG4gIGlmICghcGVyTGluZSkgcmV0dXJuIGVyYXNlLmxpbmUgKyBjdXJzb3IudG8oMCk7XG4gIGxldCByb3dzID0gMDtcbiAgY29uc3QgbGluZXMgPSBwcm9tcHQuc3BsaXQoL1xccj9cXG4vKTtcblxuICB2YXIgX2l0ZXJhdG9yID0gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIobGluZXMpLFxuICAgICAgX3N0ZXA7XG5cbiAgdHJ5IHtcbiAgICBmb3IgKF9pdGVyYXRvci5zKCk7ICEoX3N0ZXAgPSBfaXRlcmF0b3IubigpKS5kb25lOykge1xuICAgICAgbGV0IGxpbmUgPSBfc3RlcC52YWx1ZTtcbiAgICAgIHJvd3MgKz0gMSArIE1hdGguZmxvb3IoTWF0aC5tYXgod2lkdGgobGluZSkgLSAxLCAwKSAvIHBlckxpbmUpO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgX2l0ZXJhdG9yLmUoZXJyKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBfaXRlcmF0b3IuZigpO1xuICB9XG5cbiAgcmV0dXJuIGVyYXNlLmxpbmVzKHJvd3MpO1xufTsiLCIndXNlIHN0cmljdCc7XG5cbmNvbnN0IG1haW4gPSB7XG4gIGFycm93VXA6ICfihpEnLFxuICBhcnJvd0Rvd246ICfihpMnLFxuICBhcnJvd0xlZnQ6ICfihpAnLFxuICBhcnJvd1JpZ2h0OiAn4oaSJyxcbiAgcmFkaW9PbjogJ+KXiScsXG4gIHJhZGlvT2ZmOiAn4pevJyxcbiAgdGljazogJ+KclCcsXG4gIGNyb3NzOiAn4pyWJyxcbiAgZWxsaXBzaXM6ICfigKYnLFxuICBwb2ludGVyU21hbGw6ICfigLonLFxuICBsaW5lOiAn4pSAJyxcbiAgcG9pbnRlcjogJ+Kdrydcbn07XG5jb25zdCB3aW4gPSB7XG4gIGFycm93VXA6IG1haW4uYXJyb3dVcCxcbiAgYXJyb3dEb3duOiBtYWluLmFycm93RG93bixcbiAgYXJyb3dMZWZ0OiBtYWluLmFycm93TGVmdCxcbiAgYXJyb3dSaWdodDogbWFpbi5hcnJvd1JpZ2h0LFxuICByYWRpb09uOiAnKCopJyxcbiAgcmFkaW9PZmY6ICcoICknLFxuICB0aWNrOiAn4oiaJyxcbiAgY3Jvc3M6ICfDlycsXG4gIGVsbGlwc2lzOiAnLi4uJyxcbiAgcG9pbnRlclNtYWxsOiAnwrsnLFxuICBsaW5lOiAn4pSAJyxcbiAgcG9pbnRlcjogJz4nXG59O1xuY29uc3QgZmlndXJlcyA9IHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicgPyB3aW4gOiBtYWluO1xubW9kdWxlLmV4cG9ydHMgPSBmaWd1cmVzOyIsIid1c2Ugc3RyaWN0JztcblxuY29uc3QgYyA9IHJlcXVpcmUoJ2tsZXVyJyk7XG5cbmNvbnN0IGZpZ3VyZXMgPSByZXF1aXJlKCcuL2ZpZ3VyZXMnKTsgLy8gcmVuZGVyaW5nIHVzZXIgaW5wdXQuXG5cblxuY29uc3Qgc3R5bGVzID0gT2JqZWN0LmZyZWV6ZSh7XG4gIHBhc3N3b3JkOiB7XG4gICAgc2NhbGU6IDEsXG4gICAgcmVuZGVyOiBpbnB1dCA9PiAnKicucmVwZWF0KGlucHV0Lmxlbmd0aClcbiAgfSxcbiAgZW1vamk6IHtcbiAgICBzY2FsZTogMixcbiAgICByZW5kZXI6IGlucHV0ID0+ICfwn5iDJy5yZXBlYXQoaW5wdXQubGVuZ3RoKVxuICB9LFxuICBpbnZpc2libGU6IHtcbiAgICBzY2FsZTogMCxcbiAgICByZW5kZXI6IGlucHV0ID0+ICcnXG4gIH0sXG4gIGRlZmF1bHQ6IHtcbiAgICBzY2FsZTogMSxcbiAgICByZW5kZXI6IGlucHV0ID0+IGAke2lucHV0fWBcbiAgfVxufSk7XG5cbmNvbnN0IHJlbmRlciA9IHR5cGUgPT4gc3R5bGVzW3R5cGVdIHx8IHN0eWxlcy5kZWZhdWx0OyAvLyBpY29uIHRvIHNpZ25hbGl6ZSBhIHByb21wdC5cblxuXG5jb25zdCBzeW1ib2xzID0gT2JqZWN0LmZyZWV6ZSh7XG4gIGFib3J0ZWQ6IGMucmVkKGZpZ3VyZXMuY3Jvc3MpLFxuICBkb25lOiBjLmdyZWVuKGZpZ3VyZXMudGljayksXG4gIGV4aXRlZDogYy55ZWxsb3coZmlndXJlcy5jcm9zcyksXG4gIGRlZmF1bHQ6IGMuY3lhbignPycpXG59KTtcblxuY29uc3Qgc3ltYm9sID0gKGRvbmUsIGFib3J0ZWQsIGV4aXRlZCkgPT4gYWJvcnRlZCA/IHN5bWJvbHMuYWJvcnRlZCA6IGV4aXRlZCA/IHN5bWJvbHMuZXhpdGVkIDogZG9uZSA/IHN5bWJvbHMuZG9uZSA6IHN5bWJvbHMuZGVmYXVsdDsgLy8gYmV0d2VlbiB0aGUgcXVlc3Rpb24gYW5kIHRoZSB1c2VyJ3MgaW5wdXQuXG5cblxuY29uc3QgZGVsaW1pdGVyID0gY29tcGxldGluZyA9PiBjLmdyYXkoY29tcGxldGluZyA/IGZpZ3VyZXMuZWxsaXBzaXMgOiBmaWd1cmVzLnBvaW50ZXJTbWFsbCk7XG5cbmNvbnN0IGl0ZW0gPSAoZXhwYW5kYWJsZSwgZXhwYW5kZWQpID0+IGMuZ3JheShleHBhbmRhYmxlID8gZXhwYW5kZWQgPyBmaWd1cmVzLnBvaW50ZXJTbWFsbCA6ICcrJyA6IGZpZ3VyZXMubGluZSk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzdHlsZXMsXG4gIHJlbmRlcixcbiAgc3ltYm9scyxcbiAgc3ltYm9sLFxuICBkZWxpbWl0ZXIsXG4gIGl0ZW1cbn07IiwiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBzdHJpcCA9IHJlcXVpcmUoJy4vc3RyaXAnKTtcbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IG1zZ1xuICogQHBhcmFtIHtudW1iZXJ9IHBlckxpbmVcbiAqL1xuXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG1zZywgcGVyTGluZSkge1xuICBsZXQgbGluZXMgPSBTdHJpbmcoc3RyaXAobXNnKSB8fCAnJykuc3BsaXQoL1xccj9cXG4vKTtcbiAgaWYgKCFwZXJMaW5lKSByZXR1cm4gbGluZXMubGVuZ3RoO1xuICByZXR1cm4gbGluZXMubWFwKGwgPT4gTWF0aC5jZWlsKGwubGVuZ3RoIC8gcGVyTGluZSkpLnJlZHVjZSgoYSwgYikgPT4gYSArIGIpO1xufTsiLCIndXNlIHN0cmljdCc7XG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBtc2cgVGhlIG1lc3NhZ2UgdG8gd3JhcFxuICogQHBhcmFtIHtvYmplY3R9IG9wdHNcbiAqIEBwYXJhbSB7bnVtYmVyfHN0cmluZ30gW29wdHMubWFyZ2luXSBMZWZ0IG1hcmdpblxuICogQHBhcmFtIHtudW1iZXJ9IG9wdHMud2lkdGggTWF4aW11bSBjaGFyYWN0ZXJzIHBlciBsaW5lIGluY2x1ZGluZyB0aGUgbWFyZ2luXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSAobXNnLCBvcHRzID0ge30pID0+IHtcbiAgY29uc3QgdGFiID0gTnVtYmVyLmlzU2FmZUludGVnZXIocGFyc2VJbnQob3B0cy5tYXJnaW4pKSA/IG5ldyBBcnJheShwYXJzZUludChvcHRzLm1hcmdpbikpLmZpbGwoJyAnKS5qb2luKCcnKSA6IG9wdHMubWFyZ2luIHx8ICcnO1xuICBjb25zdCB3aWR0aCA9IG9wdHMud2lkdGg7XG4gIHJldHVybiAobXNnIHx8ICcnKS5zcGxpdCgvXFxyP1xcbi9nKS5tYXAobGluZSA9PiBsaW5lLnNwbGl0KC9cXHMrL2cpLnJlZHVjZSgoYXJyLCB3KSA9PiB7XG4gICAgaWYgKHcubGVuZ3RoICsgdGFiLmxlbmd0aCA+PSB3aWR0aCB8fCBhcnJbYXJyLmxlbmd0aCAtIDFdLmxlbmd0aCArIHcubGVuZ3RoICsgMSA8IHdpZHRoKSBhcnJbYXJyLmxlbmd0aCAtIDFdICs9IGAgJHt3fWA7ZWxzZSBhcnIucHVzaChgJHt0YWJ9JHt3fWApO1xuICAgIHJldHVybiBhcnI7XG4gIH0sIFt0YWJdKS5qb2luKCdcXG4nKSkuam9pbignXFxuJyk7XG59OyIsIid1c2Ugc3RyaWN0Jztcbi8qKlxuICogRGV0ZXJtaW5lIHdoYXQgZW50cmllcyBzaG91bGQgYmUgZGlzcGxheWVkIG9uIHRoZSBzY3JlZW4sIGJhc2VkIG9uIHRoZVxuICogY3VycmVudGx5IHNlbGVjdGVkIGluZGV4IGFuZCB0aGUgbWF4aW11bSB2aXNpYmxlLiBVc2VkIGluIGxpc3QtYmFzZWRcbiAqIHByb21wdHMgbGlrZSBgc2VsZWN0YCBhbmQgYG11bHRpc2VsZWN0YC5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gY3Vyc29yIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgZW50cnlcbiAqIEBwYXJhbSB7bnVtYmVyfSB0b3RhbCB0aGUgdG90YWwgZW50cmllcyBhdmFpbGFibGUgdG8gZGlzcGxheVxuICogQHBhcmFtIHtudW1iZXJ9IFttYXhWaXNpYmxlXSB0aGUgbnVtYmVyIG9mIGVudHJpZXMgdGhhdCBjYW4gYmUgZGlzcGxheWVkXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSAoY3Vyc29yLCB0b3RhbCwgbWF4VmlzaWJsZSkgPT4ge1xuICBtYXhWaXNpYmxlID0gbWF4VmlzaWJsZSB8fCB0b3RhbDtcbiAgbGV0IHN0YXJ0SW5kZXggPSBNYXRoLm1pbih0b3RhbCAtIG1heFZpc2libGUsIGN1cnNvciAtIE1hdGguZmxvb3IobWF4VmlzaWJsZSAvIDIpKTtcbiAgaWYgKHN0YXJ0SW5kZXggPCAwKSBzdGFydEluZGV4ID0gMDtcbiAgbGV0IGVuZEluZGV4ID0gTWF0aC5taW4oc3RhcnRJbmRleCArIG1heFZpc2libGUsIHRvdGFsKTtcbiAgcmV0dXJuIHtcbiAgICBzdGFydEluZGV4LFxuICAgIGVuZEluZGV4XG4gIH07XG59OyIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGFjdGlvbjogcmVxdWlyZSgnLi9hY3Rpb24nKSxcbiAgY2xlYXI6IHJlcXVpcmUoJy4vY2xlYXInKSxcbiAgc3R5bGU6IHJlcXVpcmUoJy4vc3R5bGUnKSxcbiAgc3RyaXA6IHJlcXVpcmUoJy4vc3RyaXAnKSxcbiAgZmlndXJlczogcmVxdWlyZSgnLi9maWd1cmVzJyksXG4gIGxpbmVzOiByZXF1aXJlKCcuL2xpbmVzJyksXG4gIHdyYXA6IHJlcXVpcmUoJy4vd3JhcCcpLFxuICBlbnRyaWVzVG9EaXNwbGF5OiByZXF1aXJlKCcuL2VudHJpZXNUb0Rpc3BsYXknKVxufTsiLCIndXNlIHN0cmljdCc7XG5cbmNvbnN0IHJlYWRsaW5lID0gcmVxdWlyZSgncmVhZGxpbmUnKTtcblxuY29uc3QgX3JlcXVpcmUgPSByZXF1aXJlKCcuLi91dGlsJyksXG4gICAgICBhY3Rpb24gPSBfcmVxdWlyZS5hY3Rpb247XG5cbmNvbnN0IEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50cycpO1xuXG5jb25zdCBfcmVxdWlyZTIgPSByZXF1aXJlKCdzaXN0ZXJhbnNpJyksXG4gICAgICBiZWVwID0gX3JlcXVpcmUyLmJlZXAsXG4gICAgICBjdXJzb3IgPSBfcmVxdWlyZTIuY3Vyc29yO1xuXG5jb25zdCBjb2xvciA9IHJlcXVpcmUoJ2tsZXVyJyk7XG4vKipcbiAqIEJhc2UgcHJvbXB0IHNrZWxldG9uXG4gKiBAcGFyYW0ge1N0cmVhbX0gW29wdHMuc3RkaW5dIFRoZSBSZWFkYWJsZSBzdHJlYW0gdG8gbGlzdGVuIHRvXG4gKiBAcGFyYW0ge1N0cmVhbX0gW29wdHMuc3Rkb3V0XSBUaGUgV3JpdGFibGUgc3RyZWFtIHRvIHdyaXRlIHJlYWRsaW5lIGRhdGEgdG9cbiAqL1xuXG5cbmNsYXNzIFByb21wdCBleHRlbmRzIEV2ZW50RW1pdHRlciB7XG4gIGNvbnN0cnVjdG9yKG9wdHMgPSB7fSkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5maXJzdFJlbmRlciA9IHRydWU7XG4gICAgdGhpcy5pbiA9IG9wdHMuc3RkaW4gfHwgcHJvY2Vzcy5zdGRpbjtcbiAgICB0aGlzLm91dCA9IG9wdHMuc3Rkb3V0IHx8IHByb2Nlc3Muc3Rkb3V0O1xuXG4gICAgdGhpcy5vblJlbmRlciA9IChvcHRzLm9uUmVuZGVyIHx8ICgoKSA9PiB2b2lkIDApKS5iaW5kKHRoaXMpO1xuXG4gICAgY29uc3QgcmwgPSByZWFkbGluZS5jcmVhdGVJbnRlcmZhY2Uoe1xuICAgICAgaW5wdXQ6IHRoaXMuaW4sXG4gICAgICBlc2NhcGVDb2RlVGltZW91dDogNTBcbiAgICB9KTtcbiAgICByZWFkbGluZS5lbWl0S2V5cHJlc3NFdmVudHModGhpcy5pbiwgcmwpO1xuICAgIGlmICh0aGlzLmluLmlzVFRZKSB0aGlzLmluLnNldFJhd01vZGUodHJ1ZSk7XG4gICAgY29uc3QgaXNTZWxlY3QgPSBbJ1NlbGVjdFByb21wdCcsICdNdWx0aXNlbGVjdFByb21wdCddLmluZGV4T2YodGhpcy5jb25zdHJ1Y3Rvci5uYW1lKSA+IC0xO1xuXG4gICAgY29uc3Qga2V5cHJlc3MgPSAoc3RyLCBrZXkpID0+IHtcbiAgICAgIGxldCBhID0gYWN0aW9uKGtleSwgaXNTZWxlY3QpO1xuXG4gICAgICBpZiAoYSA9PT0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5fICYmIHRoaXMuXyhzdHIsIGtleSk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzW2FdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRoaXNbYV0oa2V5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuYmVsbCgpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB0aGlzLmNsb3NlID0gKCkgPT4ge1xuICAgICAgdGhpcy5vdXQud3JpdGUoY3Vyc29yLnNob3cpO1xuICAgICAgdGhpcy5pbi5yZW1vdmVMaXN0ZW5lcigna2V5cHJlc3MnLCBrZXlwcmVzcyk7XG4gICAgICBpZiAodGhpcy5pbi5pc1RUWSkgdGhpcy5pbi5zZXRSYXdNb2RlKGZhbHNlKTtcbiAgICAgIHJsLmNsb3NlKCk7XG4gICAgICB0aGlzLmVtaXQodGhpcy5hYm9ydGVkID8gJ2Fib3J0JyA6IHRoaXMuZXhpdGVkID8gJ2V4aXQnIDogJ3N1Ym1pdCcsIHRoaXMudmFsdWUpO1xuICAgICAgdGhpcy5jbG9zZWQgPSB0cnVlO1xuICAgIH07XG5cbiAgICB0aGlzLmluLm9uKCdrZXlwcmVzcycsIGtleXByZXNzKTtcbiAgfVxuXG4gIGZpcmUoKSB7XG4gICAgdGhpcy5lbWl0KCdzdGF0ZScsIHtcbiAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgYWJvcnRlZDogISF0aGlzLmFib3J0ZWQsXG4gICAgICBleGl0ZWQ6ICEhdGhpcy5leGl0ZWRcbiAgICB9KTtcbiAgfVxuXG4gIGJlbGwoKSB7XG4gICAgdGhpcy5vdXQud3JpdGUoYmVlcCk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgdGhpcy5vblJlbmRlcihjb2xvcik7XG4gICAgaWYgKHRoaXMuZmlyc3RSZW5kZXIpIHRoaXMuZmlyc3RSZW5kZXIgPSBmYWxzZTtcbiAgfVxuXG59XG5cbm1vZHVsZS5leHBvcnRzID0gUHJvbXB0OyIsIlwidXNlIHN0cmljdFwiO1xuXG5mdW5jdGlvbiBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIGtleSwgYXJnKSB7IHRyeSB7IHZhciBpbmZvID0gZ2VuW2tleV0oYXJnKTsgdmFyIHZhbHVlID0gaW5mby52YWx1ZTsgfSBjYXRjaCAoZXJyb3IpIHsgcmVqZWN0KGVycm9yKTsgcmV0dXJuOyB9IGlmIChpbmZvLmRvbmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0gZWxzZSB7IFByb21pc2UucmVzb2x2ZSh2YWx1ZSkudGhlbihfbmV4dCwgX3Rocm93KTsgfSB9XG5cbmZ1bmN0aW9uIF9hc3luY1RvR2VuZXJhdG9yKGZuKSB7IHJldHVybiBmdW5jdGlvbiAoKSB7IHZhciBzZWxmID0gdGhpcywgYXJncyA9IGFyZ3VtZW50czsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsgdmFyIGdlbiA9IGZuLmFwcGx5KHNlbGYsIGFyZ3MpOyBmdW5jdGlvbiBfbmV4dCh2YWx1ZSkgeyBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIFwibmV4dFwiLCB2YWx1ZSk7IH0gZnVuY3Rpb24gX3Rocm93KGVycikgeyBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIFwidGhyb3dcIiwgZXJyKTsgfSBfbmV4dCh1bmRlZmluZWQpOyB9KTsgfTsgfVxuXG5jb25zdCBjb2xvciA9IHJlcXVpcmUoJ2tsZXVyJyk7XG5cbmNvbnN0IFByb21wdCA9IHJlcXVpcmUoJy4vcHJvbXB0Jyk7XG5cbmNvbnN0IF9yZXF1aXJlID0gcmVxdWlyZSgnc2lzdGVyYW5zaScpLFxuICAgICAgZXJhc2UgPSBfcmVxdWlyZS5lcmFzZSxcbiAgICAgIGN1cnNvciA9IF9yZXF1aXJlLmN1cnNvcjtcblxuY29uc3QgX3JlcXVpcmUyID0gcmVxdWlyZSgnLi4vdXRpbCcpLFxuICAgICAgc3R5bGUgPSBfcmVxdWlyZTIuc3R5bGUsXG4gICAgICBjbGVhciA9IF9yZXF1aXJlMi5jbGVhcixcbiAgICAgIGxpbmVzID0gX3JlcXVpcmUyLmxpbmVzLFxuICAgICAgZmlndXJlcyA9IF9yZXF1aXJlMi5maWd1cmVzO1xuLyoqXG4gKiBUZXh0UHJvbXB0IEJhc2UgRWxlbWVudFxuICogQHBhcmFtIHtPYmplY3R9IG9wdHMgT3B0aW9uc1xuICogQHBhcmFtIHtTdHJpbmd9IG9wdHMubWVzc2FnZSBNZXNzYWdlXG4gKiBAcGFyYW0ge1N0cmluZ30gW29wdHMuc3R5bGU9J2RlZmF1bHQnXSBSZW5kZXIgc3R5bGVcbiAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5pbml0aWFsXSBEZWZhdWx0IHZhbHVlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0cy52YWxpZGF0ZV0gVmFsaWRhdGUgZnVuY3Rpb25cbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLmVycm9yXSBUaGUgaW52YWxpZCBlcnJvciBsYWJlbFxuICovXG5cblxuY2xhc3MgVGV4dFByb21wdCBleHRlbmRzIFByb21wdCB7XG4gIGNvbnN0cnVjdG9yKG9wdHMgPSB7fSkge1xuICAgIHN1cGVyKG9wdHMpO1xuICAgIHRoaXMudHJhbnNmb3JtID0gc3R5bGUucmVuZGVyKG9wdHMuc3R5bGUpO1xuICAgIHRoaXMuc2NhbGUgPSB0aGlzLnRyYW5zZm9ybS5zY2FsZTtcbiAgICB0aGlzLm1zZyA9IG9wdHMubWVzc2FnZTtcbiAgICB0aGlzLmluaXRpYWwgPSBvcHRzLmluaXRpYWwgfHwgYGA7XG5cbiAgICB0aGlzLnZhbGlkYXRvciA9IG9wdHMudmFsaWRhdGUgfHwgKCgpID0+IHRydWUpO1xuXG4gICAgdGhpcy52YWx1ZSA9IGBgO1xuICAgIHRoaXMuZXJyb3JNc2cgPSBvcHRzLmVycm9yIHx8IGBQbGVhc2UgRW50ZXIgQSBWYWxpZCBWYWx1ZWA7XG4gICAgdGhpcy5jdXJzb3IgPSBOdW1iZXIoISF0aGlzLmluaXRpYWwpO1xuICAgIHRoaXMuY3Vyc29yT2Zmc2V0ID0gMDtcbiAgICB0aGlzLmNsZWFyID0gY2xlYXIoYGAsIHRoaXMub3V0LmNvbHVtbnMpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBzZXQgdmFsdWUodikge1xuICAgIGlmICghdiAmJiB0aGlzLmluaXRpYWwpIHtcbiAgICAgIHRoaXMucGxhY2Vob2xkZXIgPSB0cnVlO1xuICAgICAgdGhpcy5yZW5kZXJlZCA9IGNvbG9yLmdyYXkodGhpcy50cmFuc2Zvcm0ucmVuZGVyKHRoaXMuaW5pdGlhbCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnBsYWNlaG9sZGVyID0gZmFsc2U7XG4gICAgICB0aGlzLnJlbmRlcmVkID0gdGhpcy50cmFuc2Zvcm0ucmVuZGVyKHYpO1xuICAgIH1cblxuICAgIHRoaXMuX3ZhbHVlID0gdjtcbiAgICB0aGlzLmZpcmUoKTtcbiAgfVxuXG4gIGdldCB2YWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gIH1cblxuICByZXNldCgpIHtcbiAgICB0aGlzLnZhbHVlID0gYGA7XG4gICAgdGhpcy5jdXJzb3IgPSBOdW1iZXIoISF0aGlzLmluaXRpYWwpO1xuICAgIHRoaXMuY3Vyc29yT2Zmc2V0ID0gMDtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZXhpdCgpIHtcbiAgICB0aGlzLmFib3J0KCk7XG4gIH1cblxuICBhYm9ydCgpIHtcbiAgICB0aGlzLnZhbHVlID0gdGhpcy52YWx1ZSB8fCB0aGlzLmluaXRpYWw7XG4gICAgdGhpcy5kb25lID0gdGhpcy5hYm9ydGVkID0gdHJ1ZTtcbiAgICB0aGlzLmVycm9yID0gZmFsc2U7XG4gICAgdGhpcy5yZWQgPSBmYWxzZTtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICAgIHRoaXMub3V0LndyaXRlKCdcXG4nKTtcbiAgICB0aGlzLmNsb3NlKCk7XG4gIH1cblxuICB2YWxpZGF0ZSgpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgcmV0dXJuIF9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKiAoKSB7XG4gICAgICBsZXQgdmFsaWQgPSB5aWVsZCBfdGhpcy52YWxpZGF0b3IoX3RoaXMudmFsdWUpO1xuXG4gICAgICBpZiAodHlwZW9mIHZhbGlkID09PSBgc3RyaW5nYCkge1xuICAgICAgICBfdGhpcy5lcnJvck1zZyA9IHZhbGlkO1xuICAgICAgICB2YWxpZCA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBfdGhpcy5lcnJvciA9ICF2YWxpZDtcbiAgICB9KSgpO1xuICB9XG5cbiAgc3VibWl0KCkge1xuICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgcmV0dXJuIF9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKiAoKSB7XG4gICAgICBfdGhpczIudmFsdWUgPSBfdGhpczIudmFsdWUgfHwgX3RoaXMyLmluaXRpYWw7XG4gICAgICBfdGhpczIuY3Vyc29yT2Zmc2V0ID0gMDtcbiAgICAgIF90aGlzMi5jdXJzb3IgPSBfdGhpczIucmVuZGVyZWQubGVuZ3RoO1xuICAgICAgeWllbGQgX3RoaXMyLnZhbGlkYXRlKCk7XG5cbiAgICAgIGlmIChfdGhpczIuZXJyb3IpIHtcbiAgICAgICAgX3RoaXMyLnJlZCA9IHRydWU7XG5cbiAgICAgICAgX3RoaXMyLmZpcmUoKTtcblxuICAgICAgICBfdGhpczIucmVuZGVyKCk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBfdGhpczIuZG9uZSA9IHRydWU7XG4gICAgICBfdGhpczIuYWJvcnRlZCA9IGZhbHNlO1xuXG4gICAgICBfdGhpczIuZmlyZSgpO1xuXG4gICAgICBfdGhpczIucmVuZGVyKCk7XG5cbiAgICAgIF90aGlzMi5vdXQud3JpdGUoJ1xcbicpO1xuXG4gICAgICBfdGhpczIuY2xvc2UoKTtcbiAgICB9KSgpO1xuICB9XG5cbiAgbmV4dCgpIHtcbiAgICBpZiAoIXRoaXMucGxhY2Vob2xkZXIpIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgICB0aGlzLnZhbHVlID0gdGhpcy5pbml0aWFsO1xuICAgIHRoaXMuY3Vyc29yID0gdGhpcy5yZW5kZXJlZC5sZW5ndGg7XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIG1vdmVDdXJzb3Iobikge1xuICAgIGlmICh0aGlzLnBsYWNlaG9sZGVyKSByZXR1cm47XG4gICAgdGhpcy5jdXJzb3IgPSB0aGlzLmN1cnNvciArIG47XG4gICAgdGhpcy5jdXJzb3JPZmZzZXQgKz0gbjtcbiAgfVxuXG4gIF8oYywga2V5KSB7XG4gICAgbGV0IHMxID0gdGhpcy52YWx1ZS5zbGljZSgwLCB0aGlzLmN1cnNvcik7XG4gICAgbGV0IHMyID0gdGhpcy52YWx1ZS5zbGljZSh0aGlzLmN1cnNvcik7XG4gICAgdGhpcy52YWx1ZSA9IGAke3MxfSR7Y30ke3MyfWA7XG4gICAgdGhpcy5yZWQgPSBmYWxzZTtcbiAgICB0aGlzLmN1cnNvciA9IHRoaXMucGxhY2Vob2xkZXIgPyAwIDogczEubGVuZ3RoICsgMTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZGVsZXRlKCkge1xuICAgIGlmICh0aGlzLmlzQ3Vyc29yQXRTdGFydCgpKSByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgbGV0IHMxID0gdGhpcy52YWx1ZS5zbGljZSgwLCB0aGlzLmN1cnNvciAtIDEpO1xuICAgIGxldCBzMiA9IHRoaXMudmFsdWUuc2xpY2UodGhpcy5jdXJzb3IpO1xuICAgIHRoaXMudmFsdWUgPSBgJHtzMX0ke3MyfWA7XG4gICAgdGhpcy5yZWQgPSBmYWxzZTtcblxuICAgIGlmICh0aGlzLmlzQ3Vyc29yQXRTdGFydCgpKSB7XG4gICAgICB0aGlzLmN1cnNvck9mZnNldCA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY3Vyc29yT2Zmc2V0Kys7XG4gICAgICB0aGlzLm1vdmVDdXJzb3IoLTEpO1xuICAgIH1cblxuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBkZWxldGVGb3J3YXJkKCkge1xuICAgIGlmICh0aGlzLmN1cnNvciAqIHRoaXMuc2NhbGUgPj0gdGhpcy5yZW5kZXJlZC5sZW5ndGggfHwgdGhpcy5wbGFjZWhvbGRlcikgcmV0dXJuIHRoaXMuYmVsbCgpO1xuICAgIGxldCBzMSA9IHRoaXMudmFsdWUuc2xpY2UoMCwgdGhpcy5jdXJzb3IpO1xuICAgIGxldCBzMiA9IHRoaXMudmFsdWUuc2xpY2UodGhpcy5jdXJzb3IgKyAxKTtcbiAgICB0aGlzLnZhbHVlID0gYCR7czF9JHtzMn1gO1xuICAgIHRoaXMucmVkID0gZmFsc2U7XG5cbiAgICBpZiAodGhpcy5pc0N1cnNvckF0RW5kKCkpIHtcbiAgICAgIHRoaXMuY3Vyc29yT2Zmc2V0ID0gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jdXJzb3JPZmZzZXQrKztcbiAgICB9XG5cbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZmlyc3QoKSB7XG4gICAgdGhpcy5jdXJzb3IgPSAwO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBsYXN0KCkge1xuICAgIHRoaXMuY3Vyc29yID0gdGhpcy52YWx1ZS5sZW5ndGg7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIGxlZnQoKSB7XG4gICAgaWYgKHRoaXMuY3Vyc29yIDw9IDAgfHwgdGhpcy5wbGFjZWhvbGRlcikgcmV0dXJuIHRoaXMuYmVsbCgpO1xuICAgIHRoaXMubW92ZUN1cnNvcigtMSk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHJpZ2h0KCkge1xuICAgIGlmICh0aGlzLmN1cnNvciAqIHRoaXMuc2NhbGUgPj0gdGhpcy5yZW5kZXJlZC5sZW5ndGggfHwgdGhpcy5wbGFjZWhvbGRlcikgcmV0dXJuIHRoaXMuYmVsbCgpO1xuICAgIHRoaXMubW92ZUN1cnNvcigxKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgaXNDdXJzb3JBdFN0YXJ0KCkge1xuICAgIHJldHVybiB0aGlzLmN1cnNvciA9PT0gMCB8fCB0aGlzLnBsYWNlaG9sZGVyICYmIHRoaXMuY3Vyc29yID09PSAxO1xuICB9XG5cbiAgaXNDdXJzb3JBdEVuZCgpIHtcbiAgICByZXR1cm4gdGhpcy5jdXJzb3IgPT09IHRoaXMucmVuZGVyZWQubGVuZ3RoIHx8IHRoaXMucGxhY2Vob2xkZXIgJiYgdGhpcy5jdXJzb3IgPT09IHRoaXMucmVuZGVyZWQubGVuZ3RoICsgMTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBpZiAodGhpcy5jbG9zZWQpIHJldHVybjtcblxuICAgIGlmICghdGhpcy5maXJzdFJlbmRlcikge1xuICAgICAgaWYgKHRoaXMub3V0cHV0RXJyb3IpIHRoaXMub3V0LndyaXRlKGN1cnNvci5kb3duKGxpbmVzKHRoaXMub3V0cHV0RXJyb3IsIHRoaXMub3V0LmNvbHVtbnMpIC0gMSkgKyBjbGVhcih0aGlzLm91dHB1dEVycm9yLCB0aGlzLm91dC5jb2x1bW5zKSk7XG4gICAgICB0aGlzLm91dC53cml0ZShjbGVhcih0aGlzLm91dHB1dFRleHQsIHRoaXMub3V0LmNvbHVtbnMpKTtcbiAgICB9XG5cbiAgICBzdXBlci5yZW5kZXIoKTtcbiAgICB0aGlzLm91dHB1dEVycm9yID0gJyc7XG4gICAgdGhpcy5vdXRwdXRUZXh0ID0gW3N0eWxlLnN5bWJvbCh0aGlzLmRvbmUsIHRoaXMuYWJvcnRlZCksIGNvbG9yLmJvbGQodGhpcy5tc2cpLCBzdHlsZS5kZWxpbWl0ZXIodGhpcy5kb25lKSwgdGhpcy5yZWQgPyBjb2xvci5yZWQodGhpcy5yZW5kZXJlZCkgOiB0aGlzLnJlbmRlcmVkXS5qb2luKGAgYCk7XG5cbiAgICBpZiAodGhpcy5lcnJvcikge1xuICAgICAgdGhpcy5vdXRwdXRFcnJvciArPSB0aGlzLmVycm9yTXNnLnNwbGl0KGBcXG5gKS5yZWR1Y2UoKGEsIGwsIGkpID0+IGEgKyBgXFxuJHtpID8gJyAnIDogZmlndXJlcy5wb2ludGVyU21hbGx9ICR7Y29sb3IucmVkKCkuaXRhbGljKGwpfWAsIGBgKTtcbiAgICB9XG5cbiAgICB0aGlzLm91dC53cml0ZShlcmFzZS5saW5lICsgY3Vyc29yLnRvKDApICsgdGhpcy5vdXRwdXRUZXh0ICsgY3Vyc29yLnNhdmUgKyB0aGlzLm91dHB1dEVycm9yICsgY3Vyc29yLnJlc3RvcmUgKyBjdXJzb3IubW92ZSh0aGlzLmN1cnNvck9mZnNldCwgMCkpO1xuICB9XG5cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBUZXh0UHJvbXB0OyIsIid1c2Ugc3RyaWN0JztcblxuY29uc3QgY29sb3IgPSByZXF1aXJlKCdrbGV1cicpO1xuXG5jb25zdCBQcm9tcHQgPSByZXF1aXJlKCcuL3Byb21wdCcpO1xuXG5jb25zdCBfcmVxdWlyZSA9IHJlcXVpcmUoJy4uL3V0aWwnKSxcbiAgICAgIHN0eWxlID0gX3JlcXVpcmUuc3R5bGUsXG4gICAgICBjbGVhciA9IF9yZXF1aXJlLmNsZWFyLFxuICAgICAgZmlndXJlcyA9IF9yZXF1aXJlLmZpZ3VyZXMsXG4gICAgICB3cmFwID0gX3JlcXVpcmUud3JhcCxcbiAgICAgIGVudHJpZXNUb0Rpc3BsYXkgPSBfcmVxdWlyZS5lbnRyaWVzVG9EaXNwbGF5O1xuXG5jb25zdCBfcmVxdWlyZTIgPSByZXF1aXJlKCdzaXN0ZXJhbnNpJyksXG4gICAgICBjdXJzb3IgPSBfcmVxdWlyZTIuY3Vyc29yO1xuLyoqXG4gKiBTZWxlY3RQcm9tcHQgQmFzZSBFbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyBPcHRpb25zXG4gKiBAcGFyYW0ge1N0cmluZ30gb3B0cy5tZXNzYWdlIE1lc3NhZ2VcbiAqIEBwYXJhbSB7QXJyYXl9IG9wdHMuY2hvaWNlcyBBcnJheSBvZiBjaG9pY2Ugb2JqZWN0c1xuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLmhpbnRdIEhpbnQgdG8gZGlzcGxheVxuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRzLmluaXRpYWxdIEluZGV4IG9mIGRlZmF1bHQgdmFsdWVcbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRzLm9wdGlvbnNQZXJQYWdlPTEwXSBNYXggb3B0aW9ucyB0byBkaXNwbGF5IGF0IG9uY2VcbiAqL1xuXG5cbmNsYXNzIFNlbGVjdFByb21wdCBleHRlbmRzIFByb21wdCB7XG4gIGNvbnN0cnVjdG9yKG9wdHMgPSB7fSkge1xuICAgIHN1cGVyKG9wdHMpO1xuICAgIHRoaXMubXNnID0gb3B0cy5tZXNzYWdlO1xuICAgIHRoaXMuaGludCA9IG9wdHMuaGludCB8fCAnLSBVc2UgYXJyb3cta2V5cy4gUmV0dXJuIHRvIHN1Ym1pdC4nO1xuICAgIHRoaXMud2FybiA9IG9wdHMud2FybiB8fCAnLSBUaGlzIG9wdGlvbiBpcyBkaXNhYmxlZCc7XG4gICAgdGhpcy5jdXJzb3IgPSBvcHRzLmluaXRpYWwgfHwgMDtcbiAgICB0aGlzLmNob2ljZXMgPSBvcHRzLmNob2ljZXMubWFwKChjaCwgaWR4KSA9PiB7XG4gICAgICBpZiAodHlwZW9mIGNoID09PSAnc3RyaW5nJykgY2ggPSB7XG4gICAgICAgIHRpdGxlOiBjaCxcbiAgICAgICAgdmFsdWU6IGlkeFxuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRpdGxlOiBjaCAmJiAoY2gudGl0bGUgfHwgY2gudmFsdWUgfHwgY2gpLFxuICAgICAgICB2YWx1ZTogY2ggJiYgKGNoLnZhbHVlID09PSB1bmRlZmluZWQgPyBpZHggOiBjaC52YWx1ZSksXG4gICAgICAgIGRlc2NyaXB0aW9uOiBjaCAmJiBjaC5kZXNjcmlwdGlvbixcbiAgICAgICAgc2VsZWN0ZWQ6IGNoICYmIGNoLnNlbGVjdGVkLFxuICAgICAgICBkaXNhYmxlZDogY2ggJiYgY2guZGlzYWJsZWRcbiAgICAgIH07XG4gICAgfSk7XG4gICAgdGhpcy5vcHRpb25zUGVyUGFnZSA9IG9wdHMub3B0aW9uc1BlclBhZ2UgfHwgMTA7XG4gICAgdGhpcy52YWx1ZSA9ICh0aGlzLmNob2ljZXNbdGhpcy5jdXJzb3JdIHx8IHt9KS52YWx1ZTtcbiAgICB0aGlzLmNsZWFyID0gY2xlYXIoJycsIHRoaXMub3V0LmNvbHVtbnMpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBtb3ZlQ3Vyc29yKG4pIHtcbiAgICB0aGlzLmN1cnNvciA9IG47XG4gICAgdGhpcy52YWx1ZSA9IHRoaXMuY2hvaWNlc1tuXS52YWx1ZTtcbiAgICB0aGlzLmZpcmUoKTtcbiAgfVxuXG4gIHJlc2V0KCkge1xuICAgIHRoaXMubW92ZUN1cnNvcigwKTtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZXhpdCgpIHtcbiAgICB0aGlzLmFib3J0KCk7XG4gIH1cblxuICBhYm9ydCgpIHtcbiAgICB0aGlzLmRvbmUgPSB0aGlzLmFib3J0ZWQgPSB0cnVlO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gICAgdGhpcy5vdXQud3JpdGUoJ1xcbicpO1xuICAgIHRoaXMuY2xvc2UoKTtcbiAgfVxuXG4gIHN1Ym1pdCgpIHtcbiAgICBpZiAoIXRoaXMuc2VsZWN0aW9uLmRpc2FibGVkKSB7XG4gICAgICB0aGlzLmRvbmUgPSB0cnVlO1xuICAgICAgdGhpcy5hYm9ydGVkID0gZmFsc2U7XG4gICAgICB0aGlzLmZpcmUoKTtcbiAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgICB0aGlzLm91dC53cml0ZSgnXFxuJyk7XG4gICAgICB0aGlzLmNsb3NlKCk7XG4gICAgfSBlbHNlIHRoaXMuYmVsbCgpO1xuICB9XG5cbiAgZmlyc3QoKSB7XG4gICAgdGhpcy5tb3ZlQ3Vyc29yKDApO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBsYXN0KCkge1xuICAgIHRoaXMubW92ZUN1cnNvcih0aGlzLmNob2ljZXMubGVuZ3RoIC0gMSk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHVwKCkge1xuICAgIGlmICh0aGlzLmN1cnNvciA9PT0gMCkge1xuICAgICAgdGhpcy5tb3ZlQ3Vyc29yKHRoaXMuY2hvaWNlcy5sZW5ndGggLSAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5tb3ZlQ3Vyc29yKHRoaXMuY3Vyc29yIC0gMSk7XG4gICAgfVxuXG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIGRvd24oKSB7XG4gICAgaWYgKHRoaXMuY3Vyc29yID09PSB0aGlzLmNob2ljZXMubGVuZ3RoIC0gMSkge1xuICAgICAgdGhpcy5tb3ZlQ3Vyc29yKDApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm1vdmVDdXJzb3IodGhpcy5jdXJzb3IgKyAxKTtcbiAgICB9XG5cbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgbmV4dCgpIHtcbiAgICB0aGlzLm1vdmVDdXJzb3IoKHRoaXMuY3Vyc29yICsgMSkgJSB0aGlzLmNob2ljZXMubGVuZ3RoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgXyhjLCBrZXkpIHtcbiAgICBpZiAoYyA9PT0gJyAnKSByZXR1cm4gdGhpcy5zdWJtaXQoKTtcbiAgfVxuXG4gIGdldCBzZWxlY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuY2hvaWNlc1t0aGlzLmN1cnNvcl07XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgaWYgKHRoaXMuY2xvc2VkKSByZXR1cm47XG4gICAgaWYgKHRoaXMuZmlyc3RSZW5kZXIpIHRoaXMub3V0LndyaXRlKGN1cnNvci5oaWRlKTtlbHNlIHRoaXMub3V0LndyaXRlKGNsZWFyKHRoaXMub3V0cHV0VGV4dCwgdGhpcy5vdXQuY29sdW1ucykpO1xuICAgIHN1cGVyLnJlbmRlcigpO1xuXG4gICAgbGV0IF9lbnRyaWVzVG9EaXNwbGF5ID0gZW50cmllc1RvRGlzcGxheSh0aGlzLmN1cnNvciwgdGhpcy5jaG9pY2VzLmxlbmd0aCwgdGhpcy5vcHRpb25zUGVyUGFnZSksXG4gICAgICAgIHN0YXJ0SW5kZXggPSBfZW50cmllc1RvRGlzcGxheS5zdGFydEluZGV4LFxuICAgICAgICBlbmRJbmRleCA9IF9lbnRyaWVzVG9EaXNwbGF5LmVuZEluZGV4OyAvLyBQcmludCBwcm9tcHRcblxuXG4gICAgdGhpcy5vdXRwdXRUZXh0ID0gW3N0eWxlLnN5bWJvbCh0aGlzLmRvbmUsIHRoaXMuYWJvcnRlZCksIGNvbG9yLmJvbGQodGhpcy5tc2cpLCBzdHlsZS5kZWxpbWl0ZXIoZmFsc2UpLCB0aGlzLmRvbmUgPyB0aGlzLnNlbGVjdGlvbi50aXRsZSA6IHRoaXMuc2VsZWN0aW9uLmRpc2FibGVkID8gY29sb3IueWVsbG93KHRoaXMud2FybikgOiBjb2xvci5ncmF5KHRoaXMuaGludCldLmpvaW4oJyAnKTsgLy8gUHJpbnQgY2hvaWNlc1xuXG4gICAgaWYgKCF0aGlzLmRvbmUpIHtcbiAgICAgIHRoaXMub3V0cHV0VGV4dCArPSAnXFxuJztcblxuICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0SW5kZXg7IGkgPCBlbmRJbmRleDsgaSsrKSB7XG4gICAgICAgIGxldCB0aXRsZSxcbiAgICAgICAgICAgIHByZWZpeCxcbiAgICAgICAgICAgIGRlc2MgPSAnJyxcbiAgICAgICAgICAgIHYgPSB0aGlzLmNob2ljZXNbaV07IC8vIERldGVybWluZSB3aGV0aGVyIHRvIGRpc3BsYXkgXCJtb3JlIGNob2ljZXNcIiBpbmRpY2F0b3JzXG5cbiAgICAgICAgaWYgKGkgPT09IHN0YXJ0SW5kZXggJiYgc3RhcnRJbmRleCA+IDApIHtcbiAgICAgICAgICBwcmVmaXggPSBmaWd1cmVzLmFycm93VXA7XG4gICAgICAgIH0gZWxzZSBpZiAoaSA9PT0gZW5kSW5kZXggLSAxICYmIGVuZEluZGV4IDwgdGhpcy5jaG9pY2VzLmxlbmd0aCkge1xuICAgICAgICAgIHByZWZpeCA9IGZpZ3VyZXMuYXJyb3dEb3duO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByZWZpeCA9ICcgJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2LmRpc2FibGVkKSB7XG4gICAgICAgICAgdGl0bGUgPSB0aGlzLmN1cnNvciA9PT0gaSA/IGNvbG9yLmdyYXkoKS51bmRlcmxpbmUodi50aXRsZSkgOiBjb2xvci5zdHJpa2V0aHJvdWdoKCkuZ3JheSh2LnRpdGxlKTtcbiAgICAgICAgICBwcmVmaXggPSAodGhpcy5jdXJzb3IgPT09IGkgPyBjb2xvci5ib2xkKCkuZ3JheShmaWd1cmVzLnBvaW50ZXIpICsgJyAnIDogJyAgJykgKyBwcmVmaXg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGl0bGUgPSB0aGlzLmN1cnNvciA9PT0gaSA/IGNvbG9yLmN5YW4oKS51bmRlcmxpbmUodi50aXRsZSkgOiB2LnRpdGxlO1xuICAgICAgICAgIHByZWZpeCA9ICh0aGlzLmN1cnNvciA9PT0gaSA/IGNvbG9yLmN5YW4oZmlndXJlcy5wb2ludGVyKSArICcgJyA6ICcgICcpICsgcHJlZml4O1xuXG4gICAgICAgICAgaWYgKHYuZGVzY3JpcHRpb24gJiYgdGhpcy5jdXJzb3IgPT09IGkpIHtcbiAgICAgICAgICAgIGRlc2MgPSBgIC0gJHt2LmRlc2NyaXB0aW9ufWA7XG5cbiAgICAgICAgICAgIGlmIChwcmVmaXgubGVuZ3RoICsgdGl0bGUubGVuZ3RoICsgZGVzYy5sZW5ndGggPj0gdGhpcy5vdXQuY29sdW1ucyB8fCB2LmRlc2NyaXB0aW9uLnNwbGl0KC9cXHI/XFxuLykubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICBkZXNjID0gJ1xcbicgKyB3cmFwKHYuZGVzY3JpcHRpb24sIHtcbiAgICAgICAgICAgICAgICBtYXJnaW46IDMsXG4gICAgICAgICAgICAgICAgd2lkdGg6IHRoaXMub3V0LmNvbHVtbnNcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5vdXRwdXRUZXh0ICs9IGAke3ByZWZpeH0gJHt0aXRsZX0ke2NvbG9yLmdyYXkoZGVzYyl9XFxuYDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLm91dC53cml0ZSh0aGlzLm91dHB1dFRleHQpO1xuICB9XG5cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBTZWxlY3RQcm9tcHQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbG9yID0gcmVxdWlyZSgna2xldXInKTtcblxuY29uc3QgUHJvbXB0ID0gcmVxdWlyZSgnLi9wcm9tcHQnKTtcblxuY29uc3QgX3JlcXVpcmUgPSByZXF1aXJlKCcuLi91dGlsJyksXG4gICAgICBzdHlsZSA9IF9yZXF1aXJlLnN0eWxlLFxuICAgICAgY2xlYXIgPSBfcmVxdWlyZS5jbGVhcjtcblxuY29uc3QgX3JlcXVpcmUyID0gcmVxdWlyZSgnc2lzdGVyYW5zaScpLFxuICAgICAgY3Vyc29yID0gX3JlcXVpcmUyLmN1cnNvcixcbiAgICAgIGVyYXNlID0gX3JlcXVpcmUyLmVyYXNlO1xuLyoqXG4gKiBUb2dnbGVQcm9tcHQgQmFzZSBFbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyBPcHRpb25zXG4gKiBAcGFyYW0ge1N0cmluZ30gb3B0cy5tZXNzYWdlIE1lc3NhZ2VcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdHMuaW5pdGlhbD1mYWxzZV0gRGVmYXVsdCB2YWx1ZVxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLmFjdGl2ZT0nbm8nXSBBY3RpdmUgbGFiZWxcbiAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5pbmFjdGl2ZT0nb2ZmJ10gSW5hY3RpdmUgbGFiZWxcbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICovXG5cblxuY2xhc3MgVG9nZ2xlUHJvbXB0IGV4dGVuZHMgUHJvbXB0IHtcbiAgY29uc3RydWN0b3Iob3B0cyA9IHt9KSB7XG4gICAgc3VwZXIob3B0cyk7XG4gICAgdGhpcy5tc2cgPSBvcHRzLm1lc3NhZ2U7XG4gICAgdGhpcy52YWx1ZSA9ICEhb3B0cy5pbml0aWFsO1xuICAgIHRoaXMuYWN0aXZlID0gb3B0cy5hY3RpdmUgfHwgJ29uJztcbiAgICB0aGlzLmluYWN0aXZlID0gb3B0cy5pbmFjdGl2ZSB8fCAnb2ZmJztcbiAgICB0aGlzLmluaXRpYWxWYWx1ZSA9IHRoaXMudmFsdWU7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHJlc2V0KCkge1xuICAgIHRoaXMudmFsdWUgPSB0aGlzLmluaXRpYWxWYWx1ZTtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZXhpdCgpIHtcbiAgICB0aGlzLmFib3J0KCk7XG4gIH1cblxuICBhYm9ydCgpIHtcbiAgICB0aGlzLmRvbmUgPSB0aGlzLmFib3J0ZWQgPSB0cnVlO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gICAgdGhpcy5vdXQud3JpdGUoJ1xcbicpO1xuICAgIHRoaXMuY2xvc2UoKTtcbiAgfVxuXG4gIHN1Ym1pdCgpIHtcbiAgICB0aGlzLmRvbmUgPSB0cnVlO1xuICAgIHRoaXMuYWJvcnRlZCA9IGZhbHNlO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gICAgdGhpcy5vdXQud3JpdGUoJ1xcbicpO1xuICAgIHRoaXMuY2xvc2UoKTtcbiAgfVxuXG4gIGRlYWN0aXZhdGUoKSB7XG4gICAgaWYgKHRoaXMudmFsdWUgPT09IGZhbHNlKSByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgdGhpcy52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBhY3RpdmF0ZSgpIHtcbiAgICBpZiAodGhpcy52YWx1ZSA9PT0gdHJ1ZSkgcmV0dXJuIHRoaXMuYmVsbCgpO1xuICAgIHRoaXMudmFsdWUgPSB0cnVlO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBkZWxldGUoKSB7XG4gICAgdGhpcy5kZWFjdGl2YXRlKCk7XG4gIH1cblxuICBsZWZ0KCkge1xuICAgIHRoaXMuZGVhY3RpdmF0ZSgpO1xuICB9XG5cbiAgcmlnaHQoKSB7XG4gICAgdGhpcy5hY3RpdmF0ZSgpO1xuICB9XG5cbiAgZG93bigpIHtcbiAgICB0aGlzLmRlYWN0aXZhdGUoKTtcbiAgfVxuXG4gIHVwKCkge1xuICAgIHRoaXMuYWN0aXZhdGUoKTtcbiAgfVxuXG4gIG5leHQoKSB7XG4gICAgdGhpcy52YWx1ZSA9ICF0aGlzLnZhbHVlO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBfKGMsIGtleSkge1xuICAgIGlmIChjID09PSAnICcpIHtcbiAgICAgIHRoaXMudmFsdWUgPSAhdGhpcy52YWx1ZTtcbiAgICB9IGVsc2UgaWYgKGMgPT09ICcxJykge1xuICAgICAgdGhpcy52YWx1ZSA9IHRydWU7XG4gICAgfSBlbHNlIGlmIChjID09PSAnMCcpIHtcbiAgICAgIHRoaXMudmFsdWUgPSBmYWxzZTtcbiAgICB9IGVsc2UgcmV0dXJuIHRoaXMuYmVsbCgpO1xuXG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBpZiAodGhpcy5jbG9zZWQpIHJldHVybjtcbiAgICBpZiAodGhpcy5maXJzdFJlbmRlcikgdGhpcy5vdXQud3JpdGUoY3Vyc29yLmhpZGUpO2Vsc2UgdGhpcy5vdXQud3JpdGUoY2xlYXIodGhpcy5vdXRwdXRUZXh0LCB0aGlzLm91dC5jb2x1bW5zKSk7XG4gICAgc3VwZXIucmVuZGVyKCk7XG4gICAgdGhpcy5vdXRwdXRUZXh0ID0gW3N0eWxlLnN5bWJvbCh0aGlzLmRvbmUsIHRoaXMuYWJvcnRlZCksIGNvbG9yLmJvbGQodGhpcy5tc2cpLCBzdHlsZS5kZWxpbWl0ZXIodGhpcy5kb25lKSwgdGhpcy52YWx1ZSA/IHRoaXMuaW5hY3RpdmUgOiBjb2xvci5jeWFuKCkudW5kZXJsaW5lKHRoaXMuaW5hY3RpdmUpLCBjb2xvci5ncmF5KCcvJyksIHRoaXMudmFsdWUgPyBjb2xvci5jeWFuKCkudW5kZXJsaW5lKHRoaXMuYWN0aXZlKSA6IHRoaXMuYWN0aXZlXS5qb2luKCcgJyk7XG4gICAgdGhpcy5vdXQud3JpdGUoZXJhc2UubGluZSArIGN1cnNvci50bygwKSArIHRoaXMub3V0cHV0VGV4dCk7XG4gIH1cblxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFRvZ2dsZVByb21wdDsiLCIndXNlIHN0cmljdCc7XG5cbmNsYXNzIERhdGVQYXJ0IHtcbiAgY29uc3RydWN0b3Ioe1xuICAgIHRva2VuLFxuICAgIGRhdGUsXG4gICAgcGFydHMsXG4gICAgbG9jYWxlc1xuICB9KSB7XG4gICAgdGhpcy50b2tlbiA9IHRva2VuO1xuICAgIHRoaXMuZGF0ZSA9IGRhdGUgfHwgbmV3IERhdGUoKTtcbiAgICB0aGlzLnBhcnRzID0gcGFydHMgfHwgW3RoaXNdO1xuICAgIHRoaXMubG9jYWxlcyA9IGxvY2FsZXMgfHwge307XG4gIH1cblxuICB1cCgpIHt9XG5cbiAgZG93bigpIHt9XG5cbiAgbmV4dCgpIHtcbiAgICBjb25zdCBjdXJyZW50SWR4ID0gdGhpcy5wYXJ0cy5pbmRleE9mKHRoaXMpO1xuICAgIHJldHVybiB0aGlzLnBhcnRzLmZpbmQoKHBhcnQsIGlkeCkgPT4gaWR4ID4gY3VycmVudElkeCAmJiBwYXJ0IGluc3RhbmNlb2YgRGF0ZVBhcnQpO1xuICB9XG5cbiAgc2V0VG8odmFsKSB7fVxuXG4gIHByZXYoKSB7XG4gICAgbGV0IHBhcnRzID0gW10uY29uY2F0KHRoaXMucGFydHMpLnJldmVyc2UoKTtcbiAgICBjb25zdCBjdXJyZW50SWR4ID0gcGFydHMuaW5kZXhPZih0aGlzKTtcbiAgICByZXR1cm4gcGFydHMuZmluZCgocGFydCwgaWR4KSA9PiBpZHggPiBjdXJyZW50SWR4ICYmIHBhcnQgaW5zdGFuY2VvZiBEYXRlUGFydCk7XG4gIH1cblxuICB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gU3RyaW5nKHRoaXMuZGF0ZSk7XG4gIH1cblxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IERhdGVQYXJ0OyIsIid1c2Ugc3RyaWN0JztcblxuY29uc3QgRGF0ZVBhcnQgPSByZXF1aXJlKCcuL2RhdGVwYXJ0Jyk7XG5cbmNsYXNzIE1lcmlkaWVtIGV4dGVuZHMgRGF0ZVBhcnQge1xuICBjb25zdHJ1Y3RvcihvcHRzID0ge30pIHtcbiAgICBzdXBlcihvcHRzKTtcbiAgfVxuXG4gIHVwKCkge1xuICAgIHRoaXMuZGF0ZS5zZXRIb3VycygodGhpcy5kYXRlLmdldEhvdXJzKCkgKyAxMikgJSAyNCk7XG4gIH1cblxuICBkb3duKCkge1xuICAgIHRoaXMudXAoKTtcbiAgfVxuXG4gIHRvU3RyaW5nKCkge1xuICAgIGxldCBtZXJpZGllbSA9IHRoaXMuZGF0ZS5nZXRIb3VycygpID4gMTIgPyAncG0nIDogJ2FtJztcbiAgICByZXR1cm4gL1xcQS8udGVzdCh0aGlzLnRva2VuKSA/IG1lcmlkaWVtLnRvVXBwZXJDYXNlKCkgOiBtZXJpZGllbTtcbiAgfVxuXG59XG5cbm1vZHVsZS5leHBvcnRzID0gTWVyaWRpZW07IiwiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBEYXRlUGFydCA9IHJlcXVpcmUoJy4vZGF0ZXBhcnQnKTtcblxuY29uc3QgcG9zID0gbiA9PiB7XG4gIG4gPSBuICUgMTA7XG4gIHJldHVybiBuID09PSAxID8gJ3N0JyA6IG4gPT09IDIgPyAnbmQnIDogbiA9PT0gMyA/ICdyZCcgOiAndGgnO1xufTtcblxuY2xhc3MgRGF5IGV4dGVuZHMgRGF0ZVBhcnQge1xuICBjb25zdHJ1Y3RvcihvcHRzID0ge30pIHtcbiAgICBzdXBlcihvcHRzKTtcbiAgfVxuXG4gIHVwKCkge1xuICAgIHRoaXMuZGF0ZS5zZXREYXRlKHRoaXMuZGF0ZS5nZXREYXRlKCkgKyAxKTtcbiAgfVxuXG4gIGRvd24oKSB7XG4gICAgdGhpcy5kYXRlLnNldERhdGUodGhpcy5kYXRlLmdldERhdGUoKSAtIDEpO1xuICB9XG5cbiAgc2V0VG8odmFsKSB7XG4gICAgdGhpcy5kYXRlLnNldERhdGUocGFyc2VJbnQodmFsLnN1YnN0cigtMikpKTtcbiAgfVxuXG4gIHRvU3RyaW5nKCkge1xuICAgIGxldCBkYXRlID0gdGhpcy5kYXRlLmdldERhdGUoKTtcbiAgICBsZXQgZGF5ID0gdGhpcy5kYXRlLmdldERheSgpO1xuICAgIHJldHVybiB0aGlzLnRva2VuID09PSAnREQnID8gU3RyaW5nKGRhdGUpLnBhZFN0YXJ0KDIsICcwJykgOiB0aGlzLnRva2VuID09PSAnRG8nID8gZGF0ZSArIHBvcyhkYXRlKSA6IHRoaXMudG9rZW4gPT09ICdkJyA/IGRheSArIDEgOiB0aGlzLnRva2VuID09PSAnZGRkJyA/IHRoaXMubG9jYWxlcy53ZWVrZGF5c1Nob3J0W2RheV0gOiB0aGlzLnRva2VuID09PSAnZGRkZCcgPyB0aGlzLmxvY2FsZXMud2Vla2RheXNbZGF5XSA6IGRhdGU7XG4gIH1cblxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IERheTsiLCIndXNlIHN0cmljdCc7XG5cbmNvbnN0IERhdGVQYXJ0ID0gcmVxdWlyZSgnLi9kYXRlcGFydCcpO1xuXG5jbGFzcyBIb3VycyBleHRlbmRzIERhdGVQYXJ0IHtcbiAgY29uc3RydWN0b3Iob3B0cyA9IHt9KSB7XG4gICAgc3VwZXIob3B0cyk7XG4gIH1cblxuICB1cCgpIHtcbiAgICB0aGlzLmRhdGUuc2V0SG91cnModGhpcy5kYXRlLmdldEhvdXJzKCkgKyAxKTtcbiAgfVxuXG4gIGRvd24oKSB7XG4gICAgdGhpcy5kYXRlLnNldEhvdXJzKHRoaXMuZGF0ZS5nZXRIb3VycygpIC0gMSk7XG4gIH1cblxuICBzZXRUbyh2YWwpIHtcbiAgICB0aGlzLmRhdGUuc2V0SG91cnMocGFyc2VJbnQodmFsLnN1YnN0cigtMikpKTtcbiAgfVxuXG4gIHRvU3RyaW5nKCkge1xuICAgIGxldCBob3VycyA9IHRoaXMuZGF0ZS5nZXRIb3VycygpO1xuICAgIGlmICgvaC8udGVzdCh0aGlzLnRva2VuKSkgaG91cnMgPSBob3VycyAlIDEyIHx8IDEyO1xuICAgIHJldHVybiB0aGlzLnRva2VuLmxlbmd0aCA+IDEgPyBTdHJpbmcoaG91cnMpLnBhZFN0YXJ0KDIsICcwJykgOiBob3VycztcbiAgfVxuXG59XG5cbm1vZHVsZS5leHBvcnRzID0gSG91cnM7IiwiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBEYXRlUGFydCA9IHJlcXVpcmUoJy4vZGF0ZXBhcnQnKTtcblxuY2xhc3MgTWlsbGlzZWNvbmRzIGV4dGVuZHMgRGF0ZVBhcnQge1xuICBjb25zdHJ1Y3RvcihvcHRzID0ge30pIHtcbiAgICBzdXBlcihvcHRzKTtcbiAgfVxuXG4gIHVwKCkge1xuICAgIHRoaXMuZGF0ZS5zZXRNaWxsaXNlY29uZHModGhpcy5kYXRlLmdldE1pbGxpc2Vjb25kcygpICsgMSk7XG4gIH1cblxuICBkb3duKCkge1xuICAgIHRoaXMuZGF0ZS5zZXRNaWxsaXNlY29uZHModGhpcy5kYXRlLmdldE1pbGxpc2Vjb25kcygpIC0gMSk7XG4gIH1cblxuICBzZXRUbyh2YWwpIHtcbiAgICB0aGlzLmRhdGUuc2V0TWlsbGlzZWNvbmRzKHBhcnNlSW50KHZhbC5zdWJzdHIoLXRoaXMudG9rZW4ubGVuZ3RoKSkpO1xuICB9XG5cbiAgdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIFN0cmluZyh0aGlzLmRhdGUuZ2V0TWlsbGlzZWNvbmRzKCkpLnBhZFN0YXJ0KDQsICcwJykuc3Vic3RyKDAsIHRoaXMudG9rZW4ubGVuZ3RoKTtcbiAgfVxuXG59XG5cbm1vZHVsZS5leHBvcnRzID0gTWlsbGlzZWNvbmRzOyIsIid1c2Ugc3RyaWN0JztcblxuY29uc3QgRGF0ZVBhcnQgPSByZXF1aXJlKCcuL2RhdGVwYXJ0Jyk7XG5cbmNsYXNzIE1pbnV0ZXMgZXh0ZW5kcyBEYXRlUGFydCB7XG4gIGNvbnN0cnVjdG9yKG9wdHMgPSB7fSkge1xuICAgIHN1cGVyKG9wdHMpO1xuICB9XG5cbiAgdXAoKSB7XG4gICAgdGhpcy5kYXRlLnNldE1pbnV0ZXModGhpcy5kYXRlLmdldE1pbnV0ZXMoKSArIDEpO1xuICB9XG5cbiAgZG93bigpIHtcbiAgICB0aGlzLmRhdGUuc2V0TWludXRlcyh0aGlzLmRhdGUuZ2V0TWludXRlcygpIC0gMSk7XG4gIH1cblxuICBzZXRUbyh2YWwpIHtcbiAgICB0aGlzLmRhdGUuc2V0TWludXRlcyhwYXJzZUludCh2YWwuc3Vic3RyKC0yKSkpO1xuICB9XG5cbiAgdG9TdHJpbmcoKSB7XG4gICAgbGV0IG0gPSB0aGlzLmRhdGUuZ2V0TWludXRlcygpO1xuICAgIHJldHVybiB0aGlzLnRva2VuLmxlbmd0aCA+IDEgPyBTdHJpbmcobSkucGFkU3RhcnQoMiwgJzAnKSA6IG07XG4gIH1cblxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IE1pbnV0ZXM7IiwiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBEYXRlUGFydCA9IHJlcXVpcmUoJy4vZGF0ZXBhcnQnKTtcblxuY2xhc3MgTW9udGggZXh0ZW5kcyBEYXRlUGFydCB7XG4gIGNvbnN0cnVjdG9yKG9wdHMgPSB7fSkge1xuICAgIHN1cGVyKG9wdHMpO1xuICB9XG5cbiAgdXAoKSB7XG4gICAgdGhpcy5kYXRlLnNldE1vbnRoKHRoaXMuZGF0ZS5nZXRNb250aCgpICsgMSk7XG4gIH1cblxuICBkb3duKCkge1xuICAgIHRoaXMuZGF0ZS5zZXRNb250aCh0aGlzLmRhdGUuZ2V0TW9udGgoKSAtIDEpO1xuICB9XG5cbiAgc2V0VG8odmFsKSB7XG4gICAgdmFsID0gcGFyc2VJbnQodmFsLnN1YnN0cigtMikpIC0gMTtcbiAgICB0aGlzLmRhdGUuc2V0TW9udGgodmFsIDwgMCA/IDAgOiB2YWwpO1xuICB9XG5cbiAgdG9TdHJpbmcoKSB7XG4gICAgbGV0IG1vbnRoID0gdGhpcy5kYXRlLmdldE1vbnRoKCk7XG4gICAgbGV0IHRsID0gdGhpcy50b2tlbi5sZW5ndGg7XG4gICAgcmV0dXJuIHRsID09PSAyID8gU3RyaW5nKG1vbnRoICsgMSkucGFkU3RhcnQoMiwgJzAnKSA6IHRsID09PSAzID8gdGhpcy5sb2NhbGVzLm1vbnRoc1Nob3J0W21vbnRoXSA6IHRsID09PSA0ID8gdGhpcy5sb2NhbGVzLm1vbnRoc1ttb250aF0gOiBTdHJpbmcobW9udGggKyAxKTtcbiAgfVxuXG59XG5cbm1vZHVsZS5leHBvcnRzID0gTW9udGg7IiwiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBEYXRlUGFydCA9IHJlcXVpcmUoJy4vZGF0ZXBhcnQnKTtcblxuY2xhc3MgU2Vjb25kcyBleHRlbmRzIERhdGVQYXJ0IHtcbiAgY29uc3RydWN0b3Iob3B0cyA9IHt9KSB7XG4gICAgc3VwZXIob3B0cyk7XG4gIH1cblxuICB1cCgpIHtcbiAgICB0aGlzLmRhdGUuc2V0U2Vjb25kcyh0aGlzLmRhdGUuZ2V0U2Vjb25kcygpICsgMSk7XG4gIH1cblxuICBkb3duKCkge1xuICAgIHRoaXMuZGF0ZS5zZXRTZWNvbmRzKHRoaXMuZGF0ZS5nZXRTZWNvbmRzKCkgLSAxKTtcbiAgfVxuXG4gIHNldFRvKHZhbCkge1xuICAgIHRoaXMuZGF0ZS5zZXRTZWNvbmRzKHBhcnNlSW50KHZhbC5zdWJzdHIoLTIpKSk7XG4gIH1cblxuICB0b1N0cmluZygpIHtcbiAgICBsZXQgcyA9IHRoaXMuZGF0ZS5nZXRTZWNvbmRzKCk7XG4gICAgcmV0dXJuIHRoaXMudG9rZW4ubGVuZ3RoID4gMSA/IFN0cmluZyhzKS5wYWRTdGFydCgyLCAnMCcpIDogcztcbiAgfVxuXG59XG5cbm1vZHVsZS5leHBvcnRzID0gU2Vjb25kczsiLCIndXNlIHN0cmljdCc7XG5cbmNvbnN0IERhdGVQYXJ0ID0gcmVxdWlyZSgnLi9kYXRlcGFydCcpO1xuXG5jbGFzcyBZZWFyIGV4dGVuZHMgRGF0ZVBhcnQge1xuICBjb25zdHJ1Y3RvcihvcHRzID0ge30pIHtcbiAgICBzdXBlcihvcHRzKTtcbiAgfVxuXG4gIHVwKCkge1xuICAgIHRoaXMuZGF0ZS5zZXRGdWxsWWVhcih0aGlzLmRhdGUuZ2V0RnVsbFllYXIoKSArIDEpO1xuICB9XG5cbiAgZG93bigpIHtcbiAgICB0aGlzLmRhdGUuc2V0RnVsbFllYXIodGhpcy5kYXRlLmdldEZ1bGxZZWFyKCkgLSAxKTtcbiAgfVxuXG4gIHNldFRvKHZhbCkge1xuICAgIHRoaXMuZGF0ZS5zZXRGdWxsWWVhcih2YWwuc3Vic3RyKC00KSk7XG4gIH1cblxuICB0b1N0cmluZygpIHtcbiAgICBsZXQgeWVhciA9IFN0cmluZyh0aGlzLmRhdGUuZ2V0RnVsbFllYXIoKSkucGFkU3RhcnQoNCwgJzAnKTtcbiAgICByZXR1cm4gdGhpcy50b2tlbi5sZW5ndGggPT09IDIgPyB5ZWFyLnN1YnN0cigtMikgOiB5ZWFyO1xuICB9XG5cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBZZWFyOyIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIERhdGVQYXJ0OiByZXF1aXJlKCcuL2RhdGVwYXJ0JyksXG4gIE1lcmlkaWVtOiByZXF1aXJlKCcuL21lcmlkaWVtJyksXG4gIERheTogcmVxdWlyZSgnLi9kYXknKSxcbiAgSG91cnM6IHJlcXVpcmUoJy4vaG91cnMnKSxcbiAgTWlsbGlzZWNvbmRzOiByZXF1aXJlKCcuL21pbGxpc2Vjb25kcycpLFxuICBNaW51dGVzOiByZXF1aXJlKCcuL21pbnV0ZXMnKSxcbiAgTW9udGg6IHJlcXVpcmUoJy4vbW9udGgnKSxcbiAgU2Vjb25kczogcmVxdWlyZSgnLi9zZWNvbmRzJyksXG4gIFllYXI6IHJlcXVpcmUoJy4veWVhcicpXG59OyIsIid1c2Ugc3RyaWN0JztcblxuZnVuY3Rpb24gYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBrZXksIGFyZykgeyB0cnkgeyB2YXIgaW5mbyA9IGdlbltrZXldKGFyZyk7IHZhciB2YWx1ZSA9IGluZm8udmFsdWU7IH0gY2F0Y2ggKGVycm9yKSB7IHJlamVjdChlcnJvcik7IHJldHVybjsgfSBpZiAoaW5mby5kb25lKSB7IHJlc29sdmUodmFsdWUpOyB9IGVsc2UgeyBQcm9taXNlLnJlc29sdmUodmFsdWUpLnRoZW4oX25leHQsIF90aHJvdyk7IH0gfVxuXG5mdW5jdGlvbiBfYXN5bmNUb0dlbmVyYXRvcihmbikgeyByZXR1cm4gZnVuY3Rpb24gKCkgeyB2YXIgc2VsZiA9IHRoaXMsIGFyZ3MgPSBhcmd1bWVudHM7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7IHZhciBnZW4gPSBmbi5hcHBseShzZWxmLCBhcmdzKTsgZnVuY3Rpb24gX25leHQodmFsdWUpIHsgYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBcIm5leHRcIiwgdmFsdWUpOyB9IGZ1bmN0aW9uIF90aHJvdyhlcnIpIHsgYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBcInRocm93XCIsIGVycik7IH0gX25leHQodW5kZWZpbmVkKTsgfSk7IH07IH1cblxuY29uc3QgY29sb3IgPSByZXF1aXJlKCdrbGV1cicpO1xuXG5jb25zdCBQcm9tcHQgPSByZXF1aXJlKCcuL3Byb21wdCcpO1xuXG5jb25zdCBfcmVxdWlyZSA9IHJlcXVpcmUoJy4uL3V0aWwnKSxcbiAgICAgIHN0eWxlID0gX3JlcXVpcmUuc3R5bGUsXG4gICAgICBjbGVhciA9IF9yZXF1aXJlLmNsZWFyLFxuICAgICAgZmlndXJlcyA9IF9yZXF1aXJlLmZpZ3VyZXM7XG5cbmNvbnN0IF9yZXF1aXJlMiA9IHJlcXVpcmUoJ3Npc3RlcmFuc2knKSxcbiAgICAgIGVyYXNlID0gX3JlcXVpcmUyLmVyYXNlLFxuICAgICAgY3Vyc29yID0gX3JlcXVpcmUyLmN1cnNvcjtcblxuY29uc3QgX3JlcXVpcmUzID0gcmVxdWlyZSgnLi4vZGF0ZXBhcnRzJyksXG4gICAgICBEYXRlUGFydCA9IF9yZXF1aXJlMy5EYXRlUGFydCxcbiAgICAgIE1lcmlkaWVtID0gX3JlcXVpcmUzLk1lcmlkaWVtLFxuICAgICAgRGF5ID0gX3JlcXVpcmUzLkRheSxcbiAgICAgIEhvdXJzID0gX3JlcXVpcmUzLkhvdXJzLFxuICAgICAgTWlsbGlzZWNvbmRzID0gX3JlcXVpcmUzLk1pbGxpc2Vjb25kcyxcbiAgICAgIE1pbnV0ZXMgPSBfcmVxdWlyZTMuTWludXRlcyxcbiAgICAgIE1vbnRoID0gX3JlcXVpcmUzLk1vbnRoLFxuICAgICAgU2Vjb25kcyA9IF9yZXF1aXJlMy5TZWNvbmRzLFxuICAgICAgWWVhciA9IF9yZXF1aXJlMy5ZZWFyO1xuXG5jb25zdCByZWdleCA9IC9cXFxcKC4pfFwiKCg/OlxcXFxbXCJcXFxcXXxbXlwiXSkrKVwifChEW0RvXT98ZHszLDR9fGQpfChNezEsNH0pfChZWSg/OllZKT8pfChbYUFdKXwoW0hoXXsxLDJ9KXwobXsxLDJ9KXwoc3sxLDJ9KXwoU3sxLDR9KXwuL2c7XG5jb25zdCByZWdleEdyb3VwcyA9IHtcbiAgMTogKHtcbiAgICB0b2tlblxuICB9KSA9PiB0b2tlbi5yZXBsYWNlKC9cXFxcKC4pL2csICckMScpLFxuICAyOiBvcHRzID0+IG5ldyBEYXkob3B0cyksXG4gIC8vIERheSAvLyBUT0RPXG4gIDM6IG9wdHMgPT4gbmV3IE1vbnRoKG9wdHMpLFxuICAvLyBNb250aFxuICA0OiBvcHRzID0+IG5ldyBZZWFyKG9wdHMpLFxuICAvLyBZZWFyXG4gIDU6IG9wdHMgPT4gbmV3IE1lcmlkaWVtKG9wdHMpLFxuICAvLyBBTS9QTSAvLyBUT0RPIChzcGVjaWFsKVxuICA2OiBvcHRzID0+IG5ldyBIb3VycyhvcHRzKSxcbiAgLy8gSG91cnNcbiAgNzogb3B0cyA9PiBuZXcgTWludXRlcyhvcHRzKSxcbiAgLy8gTWludXRlc1xuICA4OiBvcHRzID0+IG5ldyBTZWNvbmRzKG9wdHMpLFxuICAvLyBTZWNvbmRzXG4gIDk6IG9wdHMgPT4gbmV3IE1pbGxpc2Vjb25kcyhvcHRzKSAvLyBGcmFjdGlvbmFsIHNlY29uZHNcblxufTtcbmNvbnN0IGRmbHRMb2NhbGVzID0ge1xuICBtb250aHM6ICdKYW51YXJ5LEZlYnJ1YXJ5LE1hcmNoLEFwcmlsLE1heSxKdW5lLEp1bHksQXVndXN0LFNlcHRlbWJlcixPY3RvYmVyLE5vdmVtYmVyLERlY2VtYmVyJy5zcGxpdCgnLCcpLFxuICBtb250aHNTaG9ydDogJ0phbixGZWIsTWFyLEFwcixNYXksSnVuLEp1bCxBdWcsU2VwLE9jdCxOb3YsRGVjJy5zcGxpdCgnLCcpLFxuICB3ZWVrZGF5czogJ1N1bmRheSxNb25kYXksVHVlc2RheSxXZWRuZXNkYXksVGh1cnNkYXksRnJpZGF5LFNhdHVyZGF5Jy5zcGxpdCgnLCcpLFxuICB3ZWVrZGF5c1Nob3J0OiAnU3VuLE1vbixUdWUsV2VkLFRodSxGcmksU2F0Jy5zcGxpdCgnLCcpXG59O1xuLyoqXG4gKiBEYXRlUHJvbXB0IEJhc2UgRWxlbWVudFxuICogQHBhcmFtIHtPYmplY3R9IG9wdHMgT3B0aW9uc1xuICogQHBhcmFtIHtTdHJpbmd9IG9wdHMubWVzc2FnZSBNZXNzYWdlXG4gKiBAcGFyYW0ge051bWJlcn0gW29wdHMuaW5pdGlhbF0gSW5kZXggb2YgZGVmYXVsdCB2YWx1ZVxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLm1hc2tdIFRoZSBmb3JtYXQgbWFza1xuICogQHBhcmFtIHtvYmplY3R9IFtvcHRzLmxvY2FsZXNdIFRoZSBkYXRlIGxvY2FsZXNcbiAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5lcnJvcl0gVGhlIGVycm9yIG1lc3NhZ2Ugc2hvd24gb24gaW52YWxpZCB2YWx1ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdHMudmFsaWRhdGVdIEZ1bmN0aW9uIHRvIHZhbGlkYXRlIHRoZSBzdWJtaXR0ZWQgdmFsdWVcbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICovXG5cbmNsYXNzIERhdGVQcm9tcHQgZXh0ZW5kcyBQcm9tcHQge1xuICBjb25zdHJ1Y3RvcihvcHRzID0ge30pIHtcbiAgICBzdXBlcihvcHRzKTtcbiAgICB0aGlzLm1zZyA9IG9wdHMubWVzc2FnZTtcbiAgICB0aGlzLmN1cnNvciA9IDA7XG4gICAgdGhpcy50eXBlZCA9ICcnO1xuICAgIHRoaXMubG9jYWxlcyA9IE9iamVjdC5hc3NpZ24oZGZsdExvY2FsZXMsIG9wdHMubG9jYWxlcyk7XG4gICAgdGhpcy5fZGF0ZSA9IG9wdHMuaW5pdGlhbCB8fCBuZXcgRGF0ZSgpO1xuICAgIHRoaXMuZXJyb3JNc2cgPSBvcHRzLmVycm9yIHx8ICdQbGVhc2UgRW50ZXIgQSBWYWxpZCBWYWx1ZSc7XG5cbiAgICB0aGlzLnZhbGlkYXRvciA9IG9wdHMudmFsaWRhdGUgfHwgKCgpID0+IHRydWUpO1xuXG4gICAgdGhpcy5tYXNrID0gb3B0cy5tYXNrIHx8ICdZWVlZLU1NLUREIEhIOm1tOnNzJztcbiAgICB0aGlzLmNsZWFyID0gY2xlYXIoJycsIHRoaXMub3V0LmNvbHVtbnMpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBnZXQgdmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0ZTtcbiAgfVxuXG4gIGdldCBkYXRlKCkge1xuICAgIHJldHVybiB0aGlzLl9kYXRlO1xuICB9XG5cbiAgc2V0IGRhdGUoZGF0ZSkge1xuICAgIGlmIChkYXRlKSB0aGlzLl9kYXRlLnNldFRpbWUoZGF0ZS5nZXRUaW1lKCkpO1xuICB9XG5cbiAgc2V0IG1hc2sobWFzaykge1xuICAgIGxldCByZXN1bHQ7XG4gICAgdGhpcy5wYXJ0cyA9IFtdO1xuXG4gICAgd2hpbGUgKHJlc3VsdCA9IHJlZ2V4LmV4ZWMobWFzaykpIHtcbiAgICAgIGxldCBtYXRjaCA9IHJlc3VsdC5zaGlmdCgpO1xuICAgICAgbGV0IGlkeCA9IHJlc3VsdC5maW5kSW5kZXgoZ3IgPT4gZ3IgIT0gbnVsbCk7XG4gICAgICB0aGlzLnBhcnRzLnB1c2goaWR4IGluIHJlZ2V4R3JvdXBzID8gcmVnZXhHcm91cHNbaWR4XSh7XG4gICAgICAgIHRva2VuOiByZXN1bHRbaWR4XSB8fCBtYXRjaCxcbiAgICAgICAgZGF0ZTogdGhpcy5kYXRlLFxuICAgICAgICBwYXJ0czogdGhpcy5wYXJ0cyxcbiAgICAgICAgbG9jYWxlczogdGhpcy5sb2NhbGVzXG4gICAgICB9KSA6IHJlc3VsdFtpZHhdIHx8IG1hdGNoKTtcbiAgICB9XG5cbiAgICBsZXQgcGFydHMgPSB0aGlzLnBhcnRzLnJlZHVjZSgoYXJyLCBpKSA9PiB7XG4gICAgICBpZiAodHlwZW9mIGkgPT09ICdzdHJpbmcnICYmIHR5cGVvZiBhcnJbYXJyLmxlbmd0aCAtIDFdID09PSAnc3RyaW5nJykgYXJyW2Fyci5sZW5ndGggLSAxXSArPSBpO2Vsc2UgYXJyLnB1c2goaSk7XG4gICAgICByZXR1cm4gYXJyO1xuICAgIH0sIFtdKTtcbiAgICB0aGlzLnBhcnRzLnNwbGljZSgwKTtcbiAgICB0aGlzLnBhcnRzLnB1c2goLi4ucGFydHMpO1xuICAgIHRoaXMucmVzZXQoKTtcbiAgfVxuXG4gIG1vdmVDdXJzb3Iobikge1xuICAgIHRoaXMudHlwZWQgPSAnJztcbiAgICB0aGlzLmN1cnNvciA9IG47XG4gICAgdGhpcy5maXJlKCk7XG4gIH1cblxuICByZXNldCgpIHtcbiAgICB0aGlzLm1vdmVDdXJzb3IodGhpcy5wYXJ0cy5maW5kSW5kZXgocCA9PiBwIGluc3RhbmNlb2YgRGF0ZVBhcnQpKTtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZXhpdCgpIHtcbiAgICB0aGlzLmFib3J0KCk7XG4gIH1cblxuICBhYm9ydCgpIHtcbiAgICB0aGlzLmRvbmUgPSB0aGlzLmFib3J0ZWQgPSB0cnVlO1xuICAgIHRoaXMuZXJyb3IgPSBmYWxzZTtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICAgIHRoaXMub3V0LndyaXRlKCdcXG4nKTtcbiAgICB0aGlzLmNsb3NlKCk7XG4gIH1cblxuICB2YWxpZGF0ZSgpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgcmV0dXJuIF9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKiAoKSB7XG4gICAgICBsZXQgdmFsaWQgPSB5aWVsZCBfdGhpcy52YWxpZGF0b3IoX3RoaXMudmFsdWUpO1xuXG4gICAgICBpZiAodHlwZW9mIHZhbGlkID09PSAnc3RyaW5nJykge1xuICAgICAgICBfdGhpcy5lcnJvck1zZyA9IHZhbGlkO1xuICAgICAgICB2YWxpZCA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBfdGhpcy5lcnJvciA9ICF2YWxpZDtcbiAgICB9KSgpO1xuICB9XG5cbiAgc3VibWl0KCkge1xuICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgcmV0dXJuIF9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKiAoKSB7XG4gICAgICB5aWVsZCBfdGhpczIudmFsaWRhdGUoKTtcblxuICAgICAgaWYgKF90aGlzMi5lcnJvcikge1xuICAgICAgICBfdGhpczIuY29sb3IgPSAncmVkJztcblxuICAgICAgICBfdGhpczIuZmlyZSgpO1xuXG4gICAgICAgIF90aGlzMi5yZW5kZXIoKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIF90aGlzMi5kb25lID0gdHJ1ZTtcbiAgICAgIF90aGlzMi5hYm9ydGVkID0gZmFsc2U7XG5cbiAgICAgIF90aGlzMi5maXJlKCk7XG5cbiAgICAgIF90aGlzMi5yZW5kZXIoKTtcblxuICAgICAgX3RoaXMyLm91dC53cml0ZSgnXFxuJyk7XG5cbiAgICAgIF90aGlzMi5jbG9zZSgpO1xuICAgIH0pKCk7XG4gIH1cblxuICB1cCgpIHtcbiAgICB0aGlzLnR5cGVkID0gJyc7XG4gICAgdGhpcy5wYXJ0c1t0aGlzLmN1cnNvcl0udXAoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZG93bigpIHtcbiAgICB0aGlzLnR5cGVkID0gJyc7XG4gICAgdGhpcy5wYXJ0c1t0aGlzLmN1cnNvcl0uZG93bigpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBsZWZ0KCkge1xuICAgIGxldCBwcmV2ID0gdGhpcy5wYXJ0c1t0aGlzLmN1cnNvcl0ucHJldigpO1xuICAgIGlmIChwcmV2ID09IG51bGwpIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgICB0aGlzLm1vdmVDdXJzb3IodGhpcy5wYXJ0cy5pbmRleE9mKHByZXYpKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgcmlnaHQoKSB7XG4gICAgbGV0IG5leHQgPSB0aGlzLnBhcnRzW3RoaXMuY3Vyc29yXS5uZXh0KCk7XG4gICAgaWYgKG5leHQgPT0gbnVsbCkgcmV0dXJuIHRoaXMuYmVsbCgpO1xuICAgIHRoaXMubW92ZUN1cnNvcih0aGlzLnBhcnRzLmluZGV4T2YobmV4dCkpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBuZXh0KCkge1xuICAgIGxldCBuZXh0ID0gdGhpcy5wYXJ0c1t0aGlzLmN1cnNvcl0ubmV4dCgpO1xuICAgIHRoaXMubW92ZUN1cnNvcihuZXh0ID8gdGhpcy5wYXJ0cy5pbmRleE9mKG5leHQpIDogdGhpcy5wYXJ0cy5maW5kSW5kZXgocGFydCA9PiBwYXJ0IGluc3RhbmNlb2YgRGF0ZVBhcnQpKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgXyhjKSB7XG4gICAgaWYgKC9cXGQvLnRlc3QoYykpIHtcbiAgICAgIHRoaXMudHlwZWQgKz0gYztcbiAgICAgIHRoaXMucGFydHNbdGhpcy5jdXJzb3JdLnNldFRvKHRoaXMudHlwZWQpO1xuICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICB9XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgaWYgKHRoaXMuY2xvc2VkKSByZXR1cm47XG4gICAgaWYgKHRoaXMuZmlyc3RSZW5kZXIpIHRoaXMub3V0LndyaXRlKGN1cnNvci5oaWRlKTtlbHNlIHRoaXMub3V0LndyaXRlKGNsZWFyKHRoaXMub3V0cHV0VGV4dCwgdGhpcy5vdXQuY29sdW1ucykpO1xuICAgIHN1cGVyLnJlbmRlcigpOyAvLyBQcmludCBwcm9tcHRcblxuICAgIHRoaXMub3V0cHV0VGV4dCA9IFtzdHlsZS5zeW1ib2wodGhpcy5kb25lLCB0aGlzLmFib3J0ZWQpLCBjb2xvci5ib2xkKHRoaXMubXNnKSwgc3R5bGUuZGVsaW1pdGVyKGZhbHNlKSwgdGhpcy5wYXJ0cy5yZWR1Y2UoKGFyciwgcCwgaWR4KSA9PiBhcnIuY29uY2F0KGlkeCA9PT0gdGhpcy5jdXJzb3IgJiYgIXRoaXMuZG9uZSA/IGNvbG9yLmN5YW4oKS51bmRlcmxpbmUocC50b1N0cmluZygpKSA6IHApLCBbXSkuam9pbignJyldLmpvaW4oJyAnKTsgLy8gUHJpbnQgZXJyb3JcblxuICAgIGlmICh0aGlzLmVycm9yKSB7XG4gICAgICB0aGlzLm91dHB1dFRleHQgKz0gdGhpcy5lcnJvck1zZy5zcGxpdCgnXFxuJykucmVkdWNlKChhLCBsLCBpKSA9PiBhICsgYFxcbiR7aSA/IGAgYCA6IGZpZ3VyZXMucG9pbnRlclNtYWxsfSAke2NvbG9yLnJlZCgpLml0YWxpYyhsKX1gLCBgYCk7XG4gICAgfVxuXG4gICAgdGhpcy5vdXQud3JpdGUoZXJhc2UubGluZSArIGN1cnNvci50bygwKSArIHRoaXMub3V0cHV0VGV4dCk7XG4gIH1cblxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IERhdGVQcm9tcHQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmZ1bmN0aW9uIGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywga2V5LCBhcmcpIHsgdHJ5IHsgdmFyIGluZm8gPSBnZW5ba2V5XShhcmcpOyB2YXIgdmFsdWUgPSBpbmZvLnZhbHVlOyB9IGNhdGNoIChlcnJvcikgeyByZWplY3QoZXJyb3IpOyByZXR1cm47IH0gaWYgKGluZm8uZG9uZSkgeyByZXNvbHZlKHZhbHVlKTsgfSBlbHNlIHsgUHJvbWlzZS5yZXNvbHZlKHZhbHVlKS50aGVuKF9uZXh0LCBfdGhyb3cpOyB9IH1cblxuZnVuY3Rpb24gX2FzeW5jVG9HZW5lcmF0b3IoZm4pIHsgcmV0dXJuIGZ1bmN0aW9uICgpIHsgdmFyIHNlbGYgPSB0aGlzLCBhcmdzID0gYXJndW1lbnRzOyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2YXIgZ2VuID0gZm4uYXBwbHkoc2VsZiwgYXJncyk7IGZ1bmN0aW9uIF9uZXh0KHZhbHVlKSB7IGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJuZXh0XCIsIHZhbHVlKTsgfSBmdW5jdGlvbiBfdGhyb3coZXJyKSB7IGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJ0aHJvd1wiLCBlcnIpOyB9IF9uZXh0KHVuZGVmaW5lZCk7IH0pOyB9OyB9XG5cbmNvbnN0IGNvbG9yID0gcmVxdWlyZSgna2xldXInKTtcblxuY29uc3QgUHJvbXB0ID0gcmVxdWlyZSgnLi9wcm9tcHQnKTtcblxuY29uc3QgX3JlcXVpcmUgPSByZXF1aXJlKCdzaXN0ZXJhbnNpJyksXG4gICAgICBjdXJzb3IgPSBfcmVxdWlyZS5jdXJzb3IsXG4gICAgICBlcmFzZSA9IF9yZXF1aXJlLmVyYXNlO1xuXG5jb25zdCBfcmVxdWlyZTIgPSByZXF1aXJlKCcuLi91dGlsJyksXG4gICAgICBzdHlsZSA9IF9yZXF1aXJlMi5zdHlsZSxcbiAgICAgIGZpZ3VyZXMgPSBfcmVxdWlyZTIuZmlndXJlcyxcbiAgICAgIGNsZWFyID0gX3JlcXVpcmUyLmNsZWFyLFxuICAgICAgbGluZXMgPSBfcmVxdWlyZTIubGluZXM7XG5cbmNvbnN0IGlzTnVtYmVyID0gL1swLTldLztcblxuY29uc3QgaXNEZWYgPSBhbnkgPT4gYW55ICE9PSB1bmRlZmluZWQ7XG5cbmNvbnN0IHJvdW5kID0gKG51bWJlciwgcHJlY2lzaW9uKSA9PiB7XG4gIGxldCBmYWN0b3IgPSBNYXRoLnBvdygxMCwgcHJlY2lzaW9uKTtcbiAgcmV0dXJuIE1hdGgucm91bmQobnVtYmVyICogZmFjdG9yKSAvIGZhY3Rvcjtcbn07XG4vKipcbiAqIE51bWJlclByb21wdCBCYXNlIEVsZW1lbnRcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIE9wdGlvbnNcbiAqIEBwYXJhbSB7U3RyaW5nfSBvcHRzLm1lc3NhZ2UgTWVzc2FnZVxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLnN0eWxlPSdkZWZhdWx0J10gUmVuZGVyIHN0eWxlXG4gKiBAcGFyYW0ge051bWJlcn0gW29wdHMuaW5pdGlhbF0gRGVmYXVsdCB2YWx1ZVxuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRzLm1heD0rSW5maW5pdHldIE1heCB2YWx1ZVxuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRzLm1pbj0tSW5maW5pdHldIE1pbiB2YWx1ZVxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0cy5mbG9hdD1mYWxzZV0gUGFyc2UgaW5wdXQgYXMgZmxvYXRzXG4gKiBAcGFyYW0ge051bWJlcn0gW29wdHMucm91bmQ9Ml0gUm91bmQgZmxvYXRzIHRvIHggZGVjaW1hbHNcbiAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0cy5pbmNyZW1lbnQ9MV0gTnVtYmVyIHRvIGluY3JlbWVudCBieSB3aGVuIHVzaW5nIGFycm93LWtleXNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRzLnZhbGlkYXRlXSBWYWxpZGF0ZSBmdW5jdGlvblxuICogQHBhcmFtIHtTdHJlYW19IFtvcHRzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFtvcHRzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKiBAcGFyYW0ge1N0cmluZ30gW29wdHMuZXJyb3JdIFRoZSBpbnZhbGlkIGVycm9yIGxhYmVsXG4gKi9cblxuXG5jbGFzcyBOdW1iZXJQcm9tcHQgZXh0ZW5kcyBQcm9tcHQge1xuICBjb25zdHJ1Y3RvcihvcHRzID0ge30pIHtcbiAgICBzdXBlcihvcHRzKTtcbiAgICB0aGlzLnRyYW5zZm9ybSA9IHN0eWxlLnJlbmRlcihvcHRzLnN0eWxlKTtcbiAgICB0aGlzLm1zZyA9IG9wdHMubWVzc2FnZTtcbiAgICB0aGlzLmluaXRpYWwgPSBpc0RlZihvcHRzLmluaXRpYWwpID8gb3B0cy5pbml0aWFsIDogJyc7XG4gICAgdGhpcy5mbG9hdCA9ICEhb3B0cy5mbG9hdDtcbiAgICB0aGlzLnJvdW5kID0gb3B0cy5yb3VuZCB8fCAyO1xuICAgIHRoaXMuaW5jID0gb3B0cy5pbmNyZW1lbnQgfHwgMTtcbiAgICB0aGlzLm1pbiA9IGlzRGVmKG9wdHMubWluKSA/IG9wdHMubWluIDogLUluZmluaXR5O1xuICAgIHRoaXMubWF4ID0gaXNEZWYob3B0cy5tYXgpID8gb3B0cy5tYXggOiBJbmZpbml0eTtcbiAgICB0aGlzLmVycm9yTXNnID0gb3B0cy5lcnJvciB8fCBgUGxlYXNlIEVudGVyIEEgVmFsaWQgVmFsdWVgO1xuXG4gICAgdGhpcy52YWxpZGF0b3IgPSBvcHRzLnZhbGlkYXRlIHx8ICgoKSA9PiB0cnVlKTtcblxuICAgIHRoaXMuY29sb3IgPSBgY3lhbmA7XG4gICAgdGhpcy52YWx1ZSA9IGBgO1xuICAgIHRoaXMudHlwZWQgPSBgYDtcbiAgICB0aGlzLmxhc3RIaXQgPSAwO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBzZXQgdmFsdWUodikge1xuICAgIGlmICghdiAmJiB2ICE9PSAwKSB7XG4gICAgICB0aGlzLnBsYWNlaG9sZGVyID0gdHJ1ZTtcbiAgICAgIHRoaXMucmVuZGVyZWQgPSBjb2xvci5ncmF5KHRoaXMudHJhbnNmb3JtLnJlbmRlcihgJHt0aGlzLmluaXRpYWx9YCkpO1xuICAgICAgdGhpcy5fdmFsdWUgPSBgYDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wbGFjZWhvbGRlciA9IGZhbHNlO1xuICAgICAgdGhpcy5yZW5kZXJlZCA9IHRoaXMudHJhbnNmb3JtLnJlbmRlcihgJHtyb3VuZCh2LCB0aGlzLnJvdW5kKX1gKTtcbiAgICAgIHRoaXMuX3ZhbHVlID0gcm91bmQodiwgdGhpcy5yb3VuZCk7XG4gICAgfVxuXG4gICAgdGhpcy5maXJlKCk7XG4gIH1cblxuICBnZXQgdmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG5cbiAgcGFyc2UoeCkge1xuICAgIHJldHVybiB0aGlzLmZsb2F0ID8gcGFyc2VGbG9hdCh4KSA6IHBhcnNlSW50KHgpO1xuICB9XG5cbiAgdmFsaWQoYykge1xuICAgIHJldHVybiBjID09PSBgLWAgfHwgYyA9PT0gYC5gICYmIHRoaXMuZmxvYXQgfHwgaXNOdW1iZXIudGVzdChjKTtcbiAgfVxuXG4gIHJlc2V0KCkge1xuICAgIHRoaXMudHlwZWQgPSBgYDtcbiAgICB0aGlzLnZhbHVlID0gYGA7XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIGV4aXQoKSB7XG4gICAgdGhpcy5hYm9ydCgpO1xuICB9XG5cbiAgYWJvcnQoKSB7XG4gICAgbGV0IHggPSB0aGlzLnZhbHVlO1xuICAgIHRoaXMudmFsdWUgPSB4ICE9PSBgYCA/IHggOiB0aGlzLmluaXRpYWw7XG4gICAgdGhpcy5kb25lID0gdGhpcy5hYm9ydGVkID0gdHJ1ZTtcbiAgICB0aGlzLmVycm9yID0gZmFsc2U7XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgICB0aGlzLm91dC53cml0ZShgXFxuYCk7XG4gICAgdGhpcy5jbG9zZSgpO1xuICB9XG5cbiAgdmFsaWRhdGUoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHJldHVybiBfYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiogKCkge1xuICAgICAgbGV0IHZhbGlkID0geWllbGQgX3RoaXMudmFsaWRhdG9yKF90aGlzLnZhbHVlKTtcblxuICAgICAgaWYgKHR5cGVvZiB2YWxpZCA9PT0gYHN0cmluZ2ApIHtcbiAgICAgICAgX3RoaXMuZXJyb3JNc2cgPSB2YWxpZDtcbiAgICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgX3RoaXMuZXJyb3IgPSAhdmFsaWQ7XG4gICAgfSkoKTtcbiAgfVxuXG4gIHN1Ym1pdCgpIHtcbiAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgIHJldHVybiBfYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiogKCkge1xuICAgICAgeWllbGQgX3RoaXMyLnZhbGlkYXRlKCk7XG5cbiAgICAgIGlmIChfdGhpczIuZXJyb3IpIHtcbiAgICAgICAgX3RoaXMyLmNvbG9yID0gYHJlZGA7XG5cbiAgICAgICAgX3RoaXMyLmZpcmUoKTtcblxuICAgICAgICBfdGhpczIucmVuZGVyKCk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBsZXQgeCA9IF90aGlzMi52YWx1ZTtcbiAgICAgIF90aGlzMi52YWx1ZSA9IHggIT09IGBgID8geCA6IF90aGlzMi5pbml0aWFsO1xuICAgICAgX3RoaXMyLmRvbmUgPSB0cnVlO1xuICAgICAgX3RoaXMyLmFib3J0ZWQgPSBmYWxzZTtcbiAgICAgIF90aGlzMi5lcnJvciA9IGZhbHNlO1xuXG4gICAgICBfdGhpczIuZmlyZSgpO1xuXG4gICAgICBfdGhpczIucmVuZGVyKCk7XG5cbiAgICAgIF90aGlzMi5vdXQud3JpdGUoYFxcbmApO1xuXG4gICAgICBfdGhpczIuY2xvc2UoKTtcbiAgICB9KSgpO1xuICB9XG5cbiAgdXAoKSB7XG4gICAgdGhpcy50eXBlZCA9IGBgO1xuXG4gICAgaWYgKHRoaXMudmFsdWUgPT09ICcnKSB7XG4gICAgICB0aGlzLnZhbHVlID0gdGhpcy5taW4gLSB0aGlzLmluYztcbiAgICB9XG5cbiAgICBpZiAodGhpcy52YWx1ZSA+PSB0aGlzLm1heCkgcmV0dXJuIHRoaXMuYmVsbCgpO1xuICAgIHRoaXMudmFsdWUgKz0gdGhpcy5pbmM7XG4gICAgdGhpcy5jb2xvciA9IGBjeWFuYDtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZG93bigpIHtcbiAgICB0aGlzLnR5cGVkID0gYGA7XG5cbiAgICBpZiAodGhpcy52YWx1ZSA9PT0gJycpIHtcbiAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm1pbiArIHRoaXMuaW5jO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnZhbHVlIDw9IHRoaXMubWluKSByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgdGhpcy52YWx1ZSAtPSB0aGlzLmluYztcbiAgICB0aGlzLmNvbG9yID0gYGN5YW5gO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBkZWxldGUoKSB7XG4gICAgbGV0IHZhbCA9IHRoaXMudmFsdWUudG9TdHJpbmcoKTtcbiAgICBpZiAodmFsLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHRoaXMuYmVsbCgpO1xuICAgIHRoaXMudmFsdWUgPSB0aGlzLnBhcnNlKHZhbCA9IHZhbC5zbGljZSgwLCAtMSkpIHx8IGBgO1xuXG4gICAgaWYgKHRoaXMudmFsdWUgIT09ICcnICYmIHRoaXMudmFsdWUgPCB0aGlzLm1pbikge1xuICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubWluO1xuICAgIH1cblxuICAgIHRoaXMuY29sb3IgPSBgY3lhbmA7XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIG5leHQoKSB7XG4gICAgdGhpcy52YWx1ZSA9IHRoaXMuaW5pdGlhbDtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgXyhjLCBrZXkpIHtcbiAgICBpZiAoIXRoaXMudmFsaWQoYykpIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGlmIChub3cgLSB0aGlzLmxhc3RIaXQgPiAxMDAwKSB0aGlzLnR5cGVkID0gYGA7IC8vIDFzIGVsYXBzZWRcblxuICAgIHRoaXMudHlwZWQgKz0gYztcbiAgICB0aGlzLmxhc3RIaXQgPSBub3c7XG4gICAgdGhpcy5jb2xvciA9IGBjeWFuYDtcbiAgICBpZiAoYyA9PT0gYC5gKSByZXR1cm4gdGhpcy5maXJlKCk7XG4gICAgdGhpcy52YWx1ZSA9IE1hdGgubWluKHRoaXMucGFyc2UodGhpcy50eXBlZCksIHRoaXMubWF4KTtcbiAgICBpZiAodGhpcy52YWx1ZSA+IHRoaXMubWF4KSB0aGlzLnZhbHVlID0gdGhpcy5tYXg7XG4gICAgaWYgKHRoaXMudmFsdWUgPCB0aGlzLm1pbikgdGhpcy52YWx1ZSA9IHRoaXMubWluO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgaWYgKHRoaXMuY2xvc2VkKSByZXR1cm47XG5cbiAgICBpZiAoIXRoaXMuZmlyc3RSZW5kZXIpIHtcbiAgICAgIGlmICh0aGlzLm91dHB1dEVycm9yKSB0aGlzLm91dC53cml0ZShjdXJzb3IuZG93bihsaW5lcyh0aGlzLm91dHB1dEVycm9yLCB0aGlzLm91dC5jb2x1bW5zKSAtIDEpICsgY2xlYXIodGhpcy5vdXRwdXRFcnJvciwgdGhpcy5vdXQuY29sdW1ucykpO1xuICAgICAgdGhpcy5vdXQud3JpdGUoY2xlYXIodGhpcy5vdXRwdXRUZXh0LCB0aGlzLm91dC5jb2x1bW5zKSk7XG4gICAgfVxuXG4gICAgc3VwZXIucmVuZGVyKCk7XG4gICAgdGhpcy5vdXRwdXRFcnJvciA9ICcnOyAvLyBQcmludCBwcm9tcHRcblxuICAgIHRoaXMub3V0cHV0VGV4dCA9IFtzdHlsZS5zeW1ib2wodGhpcy5kb25lLCB0aGlzLmFib3J0ZWQpLCBjb2xvci5ib2xkKHRoaXMubXNnKSwgc3R5bGUuZGVsaW1pdGVyKHRoaXMuZG9uZSksICF0aGlzLmRvbmUgfHwgIXRoaXMuZG9uZSAmJiAhdGhpcy5wbGFjZWhvbGRlciA/IGNvbG9yW3RoaXMuY29sb3JdKCkudW5kZXJsaW5lKHRoaXMucmVuZGVyZWQpIDogdGhpcy5yZW5kZXJlZF0uam9pbihgIGApOyAvLyBQcmludCBlcnJvclxuXG4gICAgaWYgKHRoaXMuZXJyb3IpIHtcbiAgICAgIHRoaXMub3V0cHV0RXJyb3IgKz0gdGhpcy5lcnJvck1zZy5zcGxpdChgXFxuYCkucmVkdWNlKChhLCBsLCBpKSA9PiBhICsgYFxcbiR7aSA/IGAgYCA6IGZpZ3VyZXMucG9pbnRlclNtYWxsfSAke2NvbG9yLnJlZCgpLml0YWxpYyhsKX1gLCBgYCk7XG4gICAgfVxuXG4gICAgdGhpcy5vdXQud3JpdGUoZXJhc2UubGluZSArIGN1cnNvci50bygwKSArIHRoaXMub3V0cHV0VGV4dCArIGN1cnNvci5zYXZlICsgdGhpcy5vdXRwdXRFcnJvciArIGN1cnNvci5yZXN0b3JlKTtcbiAgfVxuXG59XG5cbm1vZHVsZS5leHBvcnRzID0gTnVtYmVyUHJvbXB0OyIsIid1c2Ugc3RyaWN0JztcblxuY29uc3QgY29sb3IgPSByZXF1aXJlKCdrbGV1cicpO1xuXG5jb25zdCBfcmVxdWlyZSA9IHJlcXVpcmUoJ3Npc3RlcmFuc2knKSxcbiAgICAgIGN1cnNvciA9IF9yZXF1aXJlLmN1cnNvcjtcblxuY29uc3QgUHJvbXB0ID0gcmVxdWlyZSgnLi9wcm9tcHQnKTtcblxuY29uc3QgX3JlcXVpcmUyID0gcmVxdWlyZSgnLi4vdXRpbCcpLFxuICAgICAgY2xlYXIgPSBfcmVxdWlyZTIuY2xlYXIsXG4gICAgICBmaWd1cmVzID0gX3JlcXVpcmUyLmZpZ3VyZXMsXG4gICAgICBzdHlsZSA9IF9yZXF1aXJlMi5zdHlsZSxcbiAgICAgIHdyYXAgPSBfcmVxdWlyZTIud3JhcCxcbiAgICAgIGVudHJpZXNUb0Rpc3BsYXkgPSBfcmVxdWlyZTIuZW50cmllc1RvRGlzcGxheTtcbi8qKlxuICogTXVsdGlzZWxlY3RQcm9tcHQgQmFzZSBFbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyBPcHRpb25zXG4gKiBAcGFyYW0ge1N0cmluZ30gb3B0cy5tZXNzYWdlIE1lc3NhZ2VcbiAqIEBwYXJhbSB7QXJyYXl9IG9wdHMuY2hvaWNlcyBBcnJheSBvZiBjaG9pY2Ugb2JqZWN0c1xuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLmhpbnRdIEhpbnQgdG8gZGlzcGxheVxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLndhcm5dIEhpbnQgc2hvd24gZm9yIGRpc2FibGVkIGNob2ljZXNcbiAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0cy5tYXhdIE1heCBjaG9pY2VzXG4gKiBAcGFyYW0ge051bWJlcn0gW29wdHMuY3Vyc29yPTBdIEN1cnNvciBzdGFydCBwb3NpdGlvblxuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRzLm9wdGlvbnNQZXJQYWdlPTEwXSBNYXggb3B0aW9ucyB0byBkaXNwbGF5IGF0IG9uY2VcbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICovXG5cblxuY2xhc3MgTXVsdGlzZWxlY3RQcm9tcHQgZXh0ZW5kcyBQcm9tcHQge1xuICBjb25zdHJ1Y3RvcihvcHRzID0ge30pIHtcbiAgICBzdXBlcihvcHRzKTtcbiAgICB0aGlzLm1zZyA9IG9wdHMubWVzc2FnZTtcbiAgICB0aGlzLmN1cnNvciA9IG9wdHMuY3Vyc29yIHx8IDA7XG4gICAgdGhpcy5zY3JvbGxJbmRleCA9IG9wdHMuY3Vyc29yIHx8IDA7XG4gICAgdGhpcy5oaW50ID0gb3B0cy5oaW50IHx8ICcnO1xuICAgIHRoaXMud2FybiA9IG9wdHMud2FybiB8fCAnLSBUaGlzIG9wdGlvbiBpcyBkaXNhYmxlZCAtJztcbiAgICB0aGlzLm1pblNlbGVjdGVkID0gb3B0cy5taW47XG4gICAgdGhpcy5zaG93TWluRXJyb3IgPSBmYWxzZTtcbiAgICB0aGlzLm1heENob2ljZXMgPSBvcHRzLm1heDtcbiAgICB0aGlzLmluc3RydWN0aW9ucyA9IG9wdHMuaW5zdHJ1Y3Rpb25zO1xuICAgIHRoaXMub3B0aW9uc1BlclBhZ2UgPSBvcHRzLm9wdGlvbnNQZXJQYWdlIHx8IDEwO1xuICAgIHRoaXMudmFsdWUgPSBvcHRzLmNob2ljZXMubWFwKChjaCwgaWR4KSA9PiB7XG4gICAgICBpZiAodHlwZW9mIGNoID09PSAnc3RyaW5nJykgY2ggPSB7XG4gICAgICAgIHRpdGxlOiBjaCxcbiAgICAgICAgdmFsdWU6IGlkeFxuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRpdGxlOiBjaCAmJiAoY2gudGl0bGUgfHwgY2gudmFsdWUgfHwgY2gpLFxuICAgICAgICBkZXNjcmlwdGlvbjogY2ggJiYgY2guZGVzY3JpcHRpb24sXG4gICAgICAgIHZhbHVlOiBjaCAmJiAoY2gudmFsdWUgPT09IHVuZGVmaW5lZCA/IGlkeCA6IGNoLnZhbHVlKSxcbiAgICAgICAgc2VsZWN0ZWQ6IGNoICYmIGNoLnNlbGVjdGVkLFxuICAgICAgICBkaXNhYmxlZDogY2ggJiYgY2guZGlzYWJsZWRcbiAgICAgIH07XG4gICAgfSk7XG4gICAgdGhpcy5jbGVhciA9IGNsZWFyKCcnLCB0aGlzLm91dC5jb2x1bW5zKTtcblxuICAgIGlmICghb3B0cy5vdmVycmlkZVJlbmRlcikge1xuICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICB9XG4gIH1cblxuICByZXNldCgpIHtcbiAgICB0aGlzLnZhbHVlLm1hcCh2ID0+ICF2LnNlbGVjdGVkKTtcbiAgICB0aGlzLmN1cnNvciA9IDA7XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHNlbGVjdGVkKCkge1xuICAgIHJldHVybiB0aGlzLnZhbHVlLmZpbHRlcih2ID0+IHYuc2VsZWN0ZWQpO1xuICB9XG5cbiAgZXhpdCgpIHtcbiAgICB0aGlzLmFib3J0KCk7XG4gIH1cblxuICBhYm9ydCgpIHtcbiAgICB0aGlzLmRvbmUgPSB0aGlzLmFib3J0ZWQgPSB0cnVlO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gICAgdGhpcy5vdXQud3JpdGUoJ1xcbicpO1xuICAgIHRoaXMuY2xvc2UoKTtcbiAgfVxuXG4gIHN1Ym1pdCgpIHtcbiAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMudmFsdWUuZmlsdGVyKGUgPT4gZS5zZWxlY3RlZCk7XG5cbiAgICBpZiAodGhpcy5taW5TZWxlY3RlZCAmJiBzZWxlY3RlZC5sZW5ndGggPCB0aGlzLm1pblNlbGVjdGVkKSB7XG4gICAgICB0aGlzLnNob3dNaW5FcnJvciA9IHRydWU7XG4gICAgICB0aGlzLnJlbmRlcigpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRvbmUgPSB0cnVlO1xuICAgICAgdGhpcy5hYm9ydGVkID0gZmFsc2U7XG4gICAgICB0aGlzLmZpcmUoKTtcbiAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgICB0aGlzLm91dC53cml0ZSgnXFxuJyk7XG4gICAgICB0aGlzLmNsb3NlKCk7XG4gICAgfVxuICB9XG5cbiAgZmlyc3QoKSB7XG4gICAgdGhpcy5jdXJzb3IgPSAwO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBsYXN0KCkge1xuICAgIHRoaXMuY3Vyc29yID0gdGhpcy52YWx1ZS5sZW5ndGggLSAxO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBuZXh0KCkge1xuICAgIHRoaXMuY3Vyc29yID0gKHRoaXMuY3Vyc29yICsgMSkgJSB0aGlzLnZhbHVlLmxlbmd0aDtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgdXAoKSB7XG4gICAgaWYgKHRoaXMuY3Vyc29yID09PSAwKSB7XG4gICAgICB0aGlzLmN1cnNvciA9IHRoaXMudmFsdWUubGVuZ3RoIC0gMTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jdXJzb3ItLTtcbiAgICB9XG5cbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZG93bigpIHtcbiAgICBpZiAodGhpcy5jdXJzb3IgPT09IHRoaXMudmFsdWUubGVuZ3RoIC0gMSkge1xuICAgICAgdGhpcy5jdXJzb3IgPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmN1cnNvcisrO1xuICAgIH1cblxuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBsZWZ0KCkge1xuICAgIHRoaXMudmFsdWVbdGhpcy5jdXJzb3JdLnNlbGVjdGVkID0gZmFsc2U7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHJpZ2h0KCkge1xuICAgIGlmICh0aGlzLnZhbHVlLmZpbHRlcihlID0+IGUuc2VsZWN0ZWQpLmxlbmd0aCA+PSB0aGlzLm1heENob2ljZXMpIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgICB0aGlzLnZhbHVlW3RoaXMuY3Vyc29yXS5zZWxlY3RlZCA9IHRydWU7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIGhhbmRsZVNwYWNlVG9nZ2xlKCkge1xuICAgIGNvbnN0IHYgPSB0aGlzLnZhbHVlW3RoaXMuY3Vyc29yXTtcblxuICAgIGlmICh2LnNlbGVjdGVkKSB7XG4gICAgICB2LnNlbGVjdGVkID0gZmFsc2U7XG4gICAgICB0aGlzLnJlbmRlcigpO1xuICAgIH0gZWxzZSBpZiAodi5kaXNhYmxlZCB8fCB0aGlzLnZhbHVlLmZpbHRlcihlID0+IGUuc2VsZWN0ZWQpLmxlbmd0aCA+PSB0aGlzLm1heENob2ljZXMpIHtcbiAgICAgIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdi5zZWxlY3RlZCA9IHRydWU7XG4gICAgICB0aGlzLnJlbmRlcigpO1xuICAgIH1cbiAgfVxuXG4gIHRvZ2dsZUFsbCgpIHtcbiAgICBpZiAodGhpcy5tYXhDaG9pY2VzICE9PSB1bmRlZmluZWQgfHwgdGhpcy52YWx1ZVt0aGlzLmN1cnNvcl0uZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgICB9XG5cbiAgICBjb25zdCBuZXdTZWxlY3RlZCA9ICF0aGlzLnZhbHVlW3RoaXMuY3Vyc29yXS5zZWxlY3RlZDtcbiAgICB0aGlzLnZhbHVlLmZpbHRlcih2ID0+ICF2LmRpc2FibGVkKS5mb3JFYWNoKHYgPT4gdi5zZWxlY3RlZCA9IG5ld1NlbGVjdGVkKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgXyhjLCBrZXkpIHtcbiAgICBpZiAoYyA9PT0gJyAnKSB7XG4gICAgICB0aGlzLmhhbmRsZVNwYWNlVG9nZ2xlKCk7XG4gICAgfSBlbHNlIGlmIChjID09PSAnYScpIHtcbiAgICAgIHRoaXMudG9nZ2xlQWxsKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgICB9XG4gIH1cblxuICByZW5kZXJJbnN0cnVjdGlvbnMoKSB7XG4gICAgaWYgKHRoaXMuaW5zdHJ1Y3Rpb25zID09PSB1bmRlZmluZWQgfHwgdGhpcy5pbnN0cnVjdGlvbnMpIHtcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5pbnN0cnVjdGlvbnMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmluc3RydWN0aW9ucztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuICdcXG5JbnN0cnVjdGlvbnM6XFxuJyArIGAgICAgJHtmaWd1cmVzLmFycm93VXB9LyR7ZmlndXJlcy5hcnJvd0Rvd259OiBIaWdobGlnaHQgb3B0aW9uXFxuYCArIGAgICAgJHtmaWd1cmVzLmFycm93TGVmdH0vJHtmaWd1cmVzLmFycm93UmlnaHR9L1tzcGFjZV06IFRvZ2dsZSBzZWxlY3Rpb25cXG5gICsgKHRoaXMubWF4Q2hvaWNlcyA9PT0gdW5kZWZpbmVkID8gYCAgICBhOiBUb2dnbGUgYWxsXFxuYCA6ICcnKSArIGAgICAgZW50ZXIvcmV0dXJuOiBDb21wbGV0ZSBhbnN3ZXJgO1xuICAgIH1cblxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIHJlbmRlck9wdGlvbihjdXJzb3IsIHYsIGksIGFycm93SW5kaWNhdG9yKSB7XG4gICAgY29uc3QgcHJlZml4ID0gKHYuc2VsZWN0ZWQgPyBjb2xvci5ncmVlbihmaWd1cmVzLnJhZGlvT24pIDogZmlndXJlcy5yYWRpb09mZikgKyAnICcgKyBhcnJvd0luZGljYXRvciArICcgJztcbiAgICBsZXQgdGl0bGUsIGRlc2M7XG5cbiAgICBpZiAodi5kaXNhYmxlZCkge1xuICAgICAgdGl0bGUgPSBjdXJzb3IgPT09IGkgPyBjb2xvci5ncmF5KCkudW5kZXJsaW5lKHYudGl0bGUpIDogY29sb3Iuc3RyaWtldGhyb3VnaCgpLmdyYXkodi50aXRsZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRpdGxlID0gY3Vyc29yID09PSBpID8gY29sb3IuY3lhbigpLnVuZGVybGluZSh2LnRpdGxlKSA6IHYudGl0bGU7XG5cbiAgICAgIGlmIChjdXJzb3IgPT09IGkgJiYgdi5kZXNjcmlwdGlvbikge1xuICAgICAgICBkZXNjID0gYCAtICR7di5kZXNjcmlwdGlvbn1gO1xuXG4gICAgICAgIGlmIChwcmVmaXgubGVuZ3RoICsgdGl0bGUubGVuZ3RoICsgZGVzYy5sZW5ndGggPj0gdGhpcy5vdXQuY29sdW1ucyB8fCB2LmRlc2NyaXB0aW9uLnNwbGl0KC9cXHI/XFxuLykubGVuZ3RoID4gMSkge1xuICAgICAgICAgIGRlc2MgPSAnXFxuJyArIHdyYXAodi5kZXNjcmlwdGlvbiwge1xuICAgICAgICAgICAgbWFyZ2luOiBwcmVmaXgubGVuZ3RoLFxuICAgICAgICAgICAgd2lkdGg6IHRoaXMub3V0LmNvbHVtbnNcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwcmVmaXggKyB0aXRsZSArIGNvbG9yLmdyYXkoZGVzYyB8fCAnJyk7XG4gIH0gLy8gc2hhcmVkIHdpdGggYXV0b2NvbXBsZXRlTXVsdGlzZWxlY3RcblxuXG4gIHBhZ2luYXRlT3B0aW9ucyhvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gY29sb3IucmVkKCdObyBtYXRjaGVzIGZvciB0aGlzIHF1ZXJ5LicpO1xuICAgIH1cblxuICAgIGxldCBfZW50cmllc1RvRGlzcGxheSA9IGVudHJpZXNUb0Rpc3BsYXkodGhpcy5jdXJzb3IsIG9wdGlvbnMubGVuZ3RoLCB0aGlzLm9wdGlvbnNQZXJQYWdlKSxcbiAgICAgICAgc3RhcnRJbmRleCA9IF9lbnRyaWVzVG9EaXNwbGF5LnN0YXJ0SW5kZXgsXG4gICAgICAgIGVuZEluZGV4ID0gX2VudHJpZXNUb0Rpc3BsYXkuZW5kSW5kZXg7XG5cbiAgICBsZXQgcHJlZml4LFxuICAgICAgICBzdHlsZWRPcHRpb25zID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gc3RhcnRJbmRleDsgaSA8IGVuZEluZGV4OyBpKyspIHtcbiAgICAgIGlmIChpID09PSBzdGFydEluZGV4ICYmIHN0YXJ0SW5kZXggPiAwKSB7XG4gICAgICAgIHByZWZpeCA9IGZpZ3VyZXMuYXJyb3dVcDtcbiAgICAgIH0gZWxzZSBpZiAoaSA9PT0gZW5kSW5kZXggLSAxICYmIGVuZEluZGV4IDwgb3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgcHJlZml4ID0gZmlndXJlcy5hcnJvd0Rvd247XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwcmVmaXggPSAnICc7XG4gICAgICB9XG5cbiAgICAgIHN0eWxlZE9wdGlvbnMucHVzaCh0aGlzLnJlbmRlck9wdGlvbih0aGlzLmN1cnNvciwgb3B0aW9uc1tpXSwgaSwgcHJlZml4KSk7XG4gICAgfVxuXG4gICAgcmV0dXJuICdcXG4nICsgc3R5bGVkT3B0aW9ucy5qb2luKCdcXG4nKTtcbiAgfSAvLyBzaGFyZWQgd2l0aCBhdXRvY29tbGV0ZU11bHRpc2VsZWN0XG5cblxuICByZW5kZXJPcHRpb25zKG9wdGlvbnMpIHtcbiAgICBpZiAoIXRoaXMuZG9uZSkge1xuICAgICAgcmV0dXJuIHRoaXMucGFnaW5hdGVPcHRpb25zKG9wdGlvbnMpO1xuICAgIH1cblxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIHJlbmRlckRvbmVPckluc3RydWN0aW9ucygpIHtcbiAgICBpZiAodGhpcy5kb25lKSB7XG4gICAgICByZXR1cm4gdGhpcy52YWx1ZS5maWx0ZXIoZSA9PiBlLnNlbGVjdGVkKS5tYXAodiA9PiB2LnRpdGxlKS5qb2luKCcsICcpO1xuICAgIH1cblxuICAgIGNvbnN0IG91dHB1dCA9IFtjb2xvci5ncmF5KHRoaXMuaGludCksIHRoaXMucmVuZGVySW5zdHJ1Y3Rpb25zKCldO1xuXG4gICAgaWYgKHRoaXMudmFsdWVbdGhpcy5jdXJzb3JdLmRpc2FibGVkKSB7XG4gICAgICBvdXRwdXQucHVzaChjb2xvci55ZWxsb3codGhpcy53YXJuKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG91dHB1dC5qb2luKCcgJyk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgaWYgKHRoaXMuY2xvc2VkKSByZXR1cm47XG4gICAgaWYgKHRoaXMuZmlyc3RSZW5kZXIpIHRoaXMub3V0LndyaXRlKGN1cnNvci5oaWRlKTtcbiAgICBzdXBlci5yZW5kZXIoKTsgLy8gcHJpbnQgcHJvbXB0XG5cbiAgICBsZXQgcHJvbXB0ID0gW3N0eWxlLnN5bWJvbCh0aGlzLmRvbmUsIHRoaXMuYWJvcnRlZCksIGNvbG9yLmJvbGQodGhpcy5tc2cpLCBzdHlsZS5kZWxpbWl0ZXIoZmFsc2UpLCB0aGlzLnJlbmRlckRvbmVPckluc3RydWN0aW9ucygpXS5qb2luKCcgJyk7XG5cbiAgICBpZiAodGhpcy5zaG93TWluRXJyb3IpIHtcbiAgICAgIHByb21wdCArPSBjb2xvci5yZWQoYFlvdSBtdXN0IHNlbGVjdCBhIG1pbmltdW0gb2YgJHt0aGlzLm1pblNlbGVjdGVkfSBjaG9pY2VzLmApO1xuICAgICAgdGhpcy5zaG93TWluRXJyb3IgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBwcm9tcHQgKz0gdGhpcy5yZW5kZXJPcHRpb25zKHRoaXMudmFsdWUpO1xuICAgIHRoaXMub3V0LndyaXRlKHRoaXMuY2xlYXIgKyBwcm9tcHQpO1xuICAgIHRoaXMuY2xlYXIgPSBjbGVhcihwcm9tcHQsIHRoaXMub3V0LmNvbHVtbnMpO1xuICB9XG5cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBNdWx0aXNlbGVjdFByb21wdDsiLCIndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywga2V5LCBhcmcpIHsgdHJ5IHsgdmFyIGluZm8gPSBnZW5ba2V5XShhcmcpOyB2YXIgdmFsdWUgPSBpbmZvLnZhbHVlOyB9IGNhdGNoIChlcnJvcikgeyByZWplY3QoZXJyb3IpOyByZXR1cm47IH0gaWYgKGluZm8uZG9uZSkgeyByZXNvbHZlKHZhbHVlKTsgfSBlbHNlIHsgUHJvbWlzZS5yZXNvbHZlKHZhbHVlKS50aGVuKF9uZXh0LCBfdGhyb3cpOyB9IH1cblxuZnVuY3Rpb24gX2FzeW5jVG9HZW5lcmF0b3IoZm4pIHsgcmV0dXJuIGZ1bmN0aW9uICgpIHsgdmFyIHNlbGYgPSB0aGlzLCBhcmdzID0gYXJndW1lbnRzOyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2YXIgZ2VuID0gZm4uYXBwbHkoc2VsZiwgYXJncyk7IGZ1bmN0aW9uIF9uZXh0KHZhbHVlKSB7IGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJuZXh0XCIsIHZhbHVlKTsgfSBmdW5jdGlvbiBfdGhyb3coZXJyKSB7IGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJ0aHJvd1wiLCBlcnIpOyB9IF9uZXh0KHVuZGVmaW5lZCk7IH0pOyB9OyB9XG5cbmNvbnN0IGNvbG9yID0gcmVxdWlyZSgna2xldXInKTtcblxuY29uc3QgUHJvbXB0ID0gcmVxdWlyZSgnLi9wcm9tcHQnKTtcblxuY29uc3QgX3JlcXVpcmUgPSByZXF1aXJlKCdzaXN0ZXJhbnNpJyksXG4gICAgICBlcmFzZSA9IF9yZXF1aXJlLmVyYXNlLFxuICAgICAgY3Vyc29yID0gX3JlcXVpcmUuY3Vyc29yO1xuXG5jb25zdCBfcmVxdWlyZTIgPSByZXF1aXJlKCcuLi91dGlsJyksXG4gICAgICBzdHlsZSA9IF9yZXF1aXJlMi5zdHlsZSxcbiAgICAgIGNsZWFyID0gX3JlcXVpcmUyLmNsZWFyLFxuICAgICAgZmlndXJlcyA9IF9yZXF1aXJlMi5maWd1cmVzLFxuICAgICAgd3JhcCA9IF9yZXF1aXJlMi53cmFwLFxuICAgICAgZW50cmllc1RvRGlzcGxheSA9IF9yZXF1aXJlMi5lbnRyaWVzVG9EaXNwbGF5O1xuXG5jb25zdCBnZXRWYWwgPSAoYXJyLCBpKSA9PiBhcnJbaV0gJiYgKGFycltpXS52YWx1ZSB8fCBhcnJbaV0udGl0bGUgfHwgYXJyW2ldKTtcblxuY29uc3QgZ2V0VGl0bGUgPSAoYXJyLCBpKSA9PiBhcnJbaV0gJiYgKGFycltpXS50aXRsZSB8fCBhcnJbaV0udmFsdWUgfHwgYXJyW2ldKTtcblxuY29uc3QgZ2V0SW5kZXggPSAoYXJyLCB2YWxPclRpdGxlKSA9PiB7XG4gIGNvbnN0IGluZGV4ID0gYXJyLmZpbmRJbmRleChlbCA9PiBlbC52YWx1ZSA9PT0gdmFsT3JUaXRsZSB8fCBlbC50aXRsZSA9PT0gdmFsT3JUaXRsZSk7XG4gIHJldHVybiBpbmRleCA+IC0xID8gaW5kZXggOiB1bmRlZmluZWQ7XG59O1xuLyoqXG4gKiBUZXh0UHJvbXB0IEJhc2UgRWxlbWVudFxuICogQHBhcmFtIHtPYmplY3R9IG9wdHMgT3B0aW9uc1xuICogQHBhcmFtIHtTdHJpbmd9IG9wdHMubWVzc2FnZSBNZXNzYWdlXG4gKiBAcGFyYW0ge0FycmF5fSBvcHRzLmNob2ljZXMgQXJyYXkgb2YgYXV0by1jb21wbGV0ZSBjaG9pY2VzIG9iamVjdHNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRzLnN1Z2dlc3RdIEZpbHRlciBmdW5jdGlvbi4gRGVmYXVsdHMgdG8gc29ydCBieSB0aXRsZVxuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRzLmxpbWl0PTEwXSBNYXggbnVtYmVyIG9mIHJlc3VsdHMgdG8gc2hvd1xuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRzLmN1cnNvcj0wXSBDdXJzb3Igc3RhcnQgcG9zaXRpb25cbiAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5zdHlsZT0nZGVmYXVsdCddIFJlbmRlciBzdHlsZVxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLmZhbGxiYWNrXSBGYWxsYmFjayBtZXNzYWdlIC0gaW5pdGlhbCB0byBkZWZhdWx0IHZhbHVlXG4gKiBAcGFyYW0ge1N0cmluZ30gW29wdHMuaW5pdGlhbF0gSW5kZXggb2YgdGhlIGRlZmF1bHQgdmFsdWVcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdHMuY2xlYXJGaXJzdF0gVGhlIGZpcnN0IEVTQ0FQRSBrZXlwcmVzcyB3aWxsIGNsZWFyIHRoZSBpbnB1dFxuICogQHBhcmFtIHtTdHJlYW19IFtvcHRzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFtvcHRzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKiBAcGFyYW0ge1N0cmluZ30gW29wdHMubm9NYXRjaGVzXSBUaGUgbm8gbWF0Y2hlcyBmb3VuZCBsYWJlbFxuICovXG5cblxuY2xhc3MgQXV0b2NvbXBsZXRlUHJvbXB0IGV4dGVuZHMgUHJvbXB0IHtcbiAgY29uc3RydWN0b3Iob3B0cyA9IHt9KSB7XG4gICAgc3VwZXIob3B0cyk7XG4gICAgdGhpcy5tc2cgPSBvcHRzLm1lc3NhZ2U7XG4gICAgdGhpcy5zdWdnZXN0ID0gb3B0cy5zdWdnZXN0O1xuICAgIHRoaXMuY2hvaWNlcyA9IG9wdHMuY2hvaWNlcztcbiAgICB0aGlzLmluaXRpYWwgPSB0eXBlb2Ygb3B0cy5pbml0aWFsID09PSAnbnVtYmVyJyA/IG9wdHMuaW5pdGlhbCA6IGdldEluZGV4KG9wdHMuY2hvaWNlcywgb3B0cy5pbml0aWFsKTtcbiAgICB0aGlzLnNlbGVjdCA9IHRoaXMuaW5pdGlhbCB8fCBvcHRzLmN1cnNvciB8fCAwO1xuICAgIHRoaXMuaTE4biA9IHtcbiAgICAgIG5vTWF0Y2hlczogb3B0cy5ub01hdGNoZXMgfHwgJ25vIG1hdGNoZXMgZm91bmQnXG4gICAgfTtcbiAgICB0aGlzLmZhbGxiYWNrID0gb3B0cy5mYWxsYmFjayB8fCB0aGlzLmluaXRpYWw7XG4gICAgdGhpcy5jbGVhckZpcnN0ID0gb3B0cy5jbGVhckZpcnN0IHx8IGZhbHNlO1xuICAgIHRoaXMuc3VnZ2VzdGlvbnMgPSBbXTtcbiAgICB0aGlzLmlucHV0ID0gJyc7XG4gICAgdGhpcy5saW1pdCA9IG9wdHMubGltaXQgfHwgMTA7XG4gICAgdGhpcy5jdXJzb3IgPSAwO1xuICAgIHRoaXMudHJhbnNmb3JtID0gc3R5bGUucmVuZGVyKG9wdHMuc3R5bGUpO1xuICAgIHRoaXMuc2NhbGUgPSB0aGlzLnRyYW5zZm9ybS5zY2FsZTtcbiAgICB0aGlzLnJlbmRlciA9IHRoaXMucmVuZGVyLmJpbmQodGhpcyk7XG4gICAgdGhpcy5jb21wbGV0ZSA9IHRoaXMuY29tcGxldGUuYmluZCh0aGlzKTtcbiAgICB0aGlzLmNsZWFyID0gY2xlYXIoJycsIHRoaXMub3V0LmNvbHVtbnMpO1xuICAgIHRoaXMuY29tcGxldGUodGhpcy5yZW5kZXIpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBzZXQgZmFsbGJhY2soZmIpIHtcbiAgICB0aGlzLl9mYiA9IE51bWJlci5pc1NhZmVJbnRlZ2VyKHBhcnNlSW50KGZiKSkgPyBwYXJzZUludChmYikgOiBmYjtcbiAgfVxuXG4gIGdldCBmYWxsYmFjaygpIHtcbiAgICBsZXQgY2hvaWNlO1xuICAgIGlmICh0eXBlb2YgdGhpcy5fZmIgPT09ICdudW1iZXInKSBjaG9pY2UgPSB0aGlzLmNob2ljZXNbdGhpcy5fZmJdO2Vsc2UgaWYgKHR5cGVvZiB0aGlzLl9mYiA9PT0gJ3N0cmluZycpIGNob2ljZSA9IHtcbiAgICAgIHRpdGxlOiB0aGlzLl9mYlxuICAgIH07XG4gICAgcmV0dXJuIGNob2ljZSB8fCB0aGlzLl9mYiB8fCB7XG4gICAgICB0aXRsZTogdGhpcy5pMThuLm5vTWF0Y2hlc1xuICAgIH07XG4gIH1cblxuICBtb3ZlU2VsZWN0KGkpIHtcbiAgICB0aGlzLnNlbGVjdCA9IGk7XG4gICAgaWYgKHRoaXMuc3VnZ2VzdGlvbnMubGVuZ3RoID4gMCkgdGhpcy52YWx1ZSA9IGdldFZhbCh0aGlzLnN1Z2dlc3Rpb25zLCBpKTtlbHNlIHRoaXMudmFsdWUgPSB0aGlzLmZhbGxiYWNrLnZhbHVlO1xuICAgIHRoaXMuZmlyZSgpO1xuICB9XG5cbiAgY29tcGxldGUoY2IpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgcmV0dXJuIF9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKiAoKSB7XG4gICAgICBjb25zdCBwID0gX3RoaXMuY29tcGxldGluZyA9IF90aGlzLnN1Z2dlc3QoX3RoaXMuaW5wdXQsIF90aGlzLmNob2ljZXMpO1xuXG4gICAgICBjb25zdCBzdWdnZXN0aW9ucyA9IHlpZWxkIHA7XG4gICAgICBpZiAoX3RoaXMuY29tcGxldGluZyAhPT0gcCkgcmV0dXJuO1xuICAgICAgX3RoaXMuc3VnZ2VzdGlvbnMgPSBzdWdnZXN0aW9ucy5tYXAoKHMsIGksIGFycikgPT4gKHtcbiAgICAgICAgdGl0bGU6IGdldFRpdGxlKGFyciwgaSksXG4gICAgICAgIHZhbHVlOiBnZXRWYWwoYXJyLCBpKSxcbiAgICAgICAgZGVzY3JpcHRpb246IHMuZGVzY3JpcHRpb25cbiAgICAgIH0pKTtcbiAgICAgIF90aGlzLmNvbXBsZXRpbmcgPSBmYWxzZTtcbiAgICAgIGNvbnN0IGwgPSBNYXRoLm1heChzdWdnZXN0aW9ucy5sZW5ndGggLSAxLCAwKTtcblxuICAgICAgX3RoaXMubW92ZVNlbGVjdChNYXRoLm1pbihsLCBfdGhpcy5zZWxlY3QpKTtcblxuICAgICAgY2IgJiYgY2IoKTtcbiAgICB9KSgpO1xuICB9XG5cbiAgcmVzZXQoKSB7XG4gICAgdGhpcy5pbnB1dCA9ICcnO1xuICAgIHRoaXMuY29tcGxldGUoKCkgPT4ge1xuICAgICAgdGhpcy5tb3ZlU2VsZWN0KHRoaXMuaW5pdGlhbCAhPT0gdm9pZCAwID8gdGhpcy5pbml0aWFsIDogMCk7XG4gICAgICB0aGlzLnJlbmRlcigpO1xuICAgIH0pO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBleGl0KCkge1xuICAgIGlmICh0aGlzLmNsZWFyRmlyc3QgJiYgdGhpcy5pbnB1dC5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnJlc2V0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZG9uZSA9IHRoaXMuZXhpdGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMuYWJvcnRlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5maXJlKCk7XG4gICAgICB0aGlzLnJlbmRlcigpO1xuICAgICAgdGhpcy5vdXQud3JpdGUoJ1xcbicpO1xuICAgICAgdGhpcy5jbG9zZSgpO1xuICAgIH1cbiAgfVxuXG4gIGFib3J0KCkge1xuICAgIHRoaXMuZG9uZSA9IHRoaXMuYWJvcnRlZCA9IHRydWU7XG4gICAgdGhpcy5leGl0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICAgIHRoaXMub3V0LndyaXRlKCdcXG4nKTtcbiAgICB0aGlzLmNsb3NlKCk7XG4gIH1cblxuICBzdWJtaXQoKSB7XG4gICAgdGhpcy5kb25lID0gdHJ1ZTtcbiAgICB0aGlzLmFib3J0ZWQgPSB0aGlzLmV4aXRlZCA9IGZhbHNlO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gICAgdGhpcy5vdXQud3JpdGUoJ1xcbicpO1xuICAgIHRoaXMuY2xvc2UoKTtcbiAgfVxuXG4gIF8oYywga2V5KSB7XG4gICAgbGV0IHMxID0gdGhpcy5pbnB1dC5zbGljZSgwLCB0aGlzLmN1cnNvcik7XG4gICAgbGV0IHMyID0gdGhpcy5pbnB1dC5zbGljZSh0aGlzLmN1cnNvcik7XG4gICAgdGhpcy5pbnB1dCA9IGAke3MxfSR7Y30ke3MyfWA7XG4gICAgdGhpcy5jdXJzb3IgPSBzMS5sZW5ndGggKyAxO1xuICAgIHRoaXMuY29tcGxldGUodGhpcy5yZW5kZXIpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBkZWxldGUoKSB7XG4gICAgaWYgKHRoaXMuY3Vyc29yID09PSAwKSByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgbGV0IHMxID0gdGhpcy5pbnB1dC5zbGljZSgwLCB0aGlzLmN1cnNvciAtIDEpO1xuICAgIGxldCBzMiA9IHRoaXMuaW5wdXQuc2xpY2UodGhpcy5jdXJzb3IpO1xuICAgIHRoaXMuaW5wdXQgPSBgJHtzMX0ke3MyfWA7XG4gICAgdGhpcy5jb21wbGV0ZSh0aGlzLnJlbmRlcik7XG4gICAgdGhpcy5jdXJzb3IgPSB0aGlzLmN1cnNvciAtIDE7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIGRlbGV0ZUZvcndhcmQoKSB7XG4gICAgaWYgKHRoaXMuY3Vyc29yICogdGhpcy5zY2FsZSA+PSB0aGlzLnJlbmRlcmVkLmxlbmd0aCkgcmV0dXJuIHRoaXMuYmVsbCgpO1xuICAgIGxldCBzMSA9IHRoaXMuaW5wdXQuc2xpY2UoMCwgdGhpcy5jdXJzb3IpO1xuICAgIGxldCBzMiA9IHRoaXMuaW5wdXQuc2xpY2UodGhpcy5jdXJzb3IgKyAxKTtcbiAgICB0aGlzLmlucHV0ID0gYCR7czF9JHtzMn1gO1xuICAgIHRoaXMuY29tcGxldGUodGhpcy5yZW5kZXIpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBmaXJzdCgpIHtcbiAgICB0aGlzLm1vdmVTZWxlY3QoMCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIGxhc3QoKSB7XG4gICAgdGhpcy5tb3ZlU2VsZWN0KHRoaXMuc3VnZ2VzdGlvbnMubGVuZ3RoIC0gMSk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHVwKCkge1xuICAgIGlmICh0aGlzLnNlbGVjdCA9PT0gMCkge1xuICAgICAgdGhpcy5tb3ZlU2VsZWN0KHRoaXMuc3VnZ2VzdGlvbnMubGVuZ3RoIC0gMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubW92ZVNlbGVjdCh0aGlzLnNlbGVjdCAtIDEpO1xuICAgIH1cblxuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBkb3duKCkge1xuICAgIGlmICh0aGlzLnNlbGVjdCA9PT0gdGhpcy5zdWdnZXN0aW9ucy5sZW5ndGggLSAxKSB7XG4gICAgICB0aGlzLm1vdmVTZWxlY3QoMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubW92ZVNlbGVjdCh0aGlzLnNlbGVjdCArIDEpO1xuICAgIH1cblxuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBuZXh0KCkge1xuICAgIGlmICh0aGlzLnNlbGVjdCA9PT0gdGhpcy5zdWdnZXN0aW9ucy5sZW5ndGggLSAxKSB7XG4gICAgICB0aGlzLm1vdmVTZWxlY3QoMCk7XG4gICAgfSBlbHNlIHRoaXMubW92ZVNlbGVjdCh0aGlzLnNlbGVjdCArIDEpO1xuXG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIG5leHRQYWdlKCkge1xuICAgIHRoaXMubW92ZVNlbGVjdChNYXRoLm1pbih0aGlzLnNlbGVjdCArIHRoaXMubGltaXQsIHRoaXMuc3VnZ2VzdGlvbnMubGVuZ3RoIC0gMSkpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBwcmV2UGFnZSgpIHtcbiAgICB0aGlzLm1vdmVTZWxlY3QoTWF0aC5tYXgodGhpcy5zZWxlY3QgLSB0aGlzLmxpbWl0LCAwKSk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIGxlZnQoKSB7XG4gICAgaWYgKHRoaXMuY3Vyc29yIDw9IDApIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgICB0aGlzLmN1cnNvciA9IHRoaXMuY3Vyc29yIC0gMTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgcmlnaHQoKSB7XG4gICAgaWYgKHRoaXMuY3Vyc29yICogdGhpcy5zY2FsZSA+PSB0aGlzLnJlbmRlcmVkLmxlbmd0aCkgcmV0dXJuIHRoaXMuYmVsbCgpO1xuICAgIHRoaXMuY3Vyc29yID0gdGhpcy5jdXJzb3IgKyAxO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICByZW5kZXJPcHRpb24odiwgaG92ZXJlZCwgaXNTdGFydCwgaXNFbmQpIHtcbiAgICBsZXQgZGVzYztcbiAgICBsZXQgcHJlZml4ID0gaXNTdGFydCA/IGZpZ3VyZXMuYXJyb3dVcCA6IGlzRW5kID8gZmlndXJlcy5hcnJvd0Rvd24gOiAnICc7XG4gICAgbGV0IHRpdGxlID0gaG92ZXJlZCA/IGNvbG9yLmN5YW4oKS51bmRlcmxpbmUodi50aXRsZSkgOiB2LnRpdGxlO1xuICAgIHByZWZpeCA9IChob3ZlcmVkID8gY29sb3IuY3lhbihmaWd1cmVzLnBvaW50ZXIpICsgJyAnIDogJyAgJykgKyBwcmVmaXg7XG5cbiAgICBpZiAodi5kZXNjcmlwdGlvbikge1xuICAgICAgZGVzYyA9IGAgLSAke3YuZGVzY3JpcHRpb259YDtcblxuICAgICAgaWYgKHByZWZpeC5sZW5ndGggKyB0aXRsZS5sZW5ndGggKyBkZXNjLmxlbmd0aCA+PSB0aGlzLm91dC5jb2x1bW5zIHx8IHYuZGVzY3JpcHRpb24uc3BsaXQoL1xccj9cXG4vKS5sZW5ndGggPiAxKSB7XG4gICAgICAgIGRlc2MgPSAnXFxuJyArIHdyYXAodi5kZXNjcmlwdGlvbiwge1xuICAgICAgICAgIG1hcmdpbjogMyxcbiAgICAgICAgICB3aWR0aDogdGhpcy5vdXQuY29sdW1uc1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcHJlZml4ICsgJyAnICsgdGl0bGUgKyBjb2xvci5ncmF5KGRlc2MgfHwgJycpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGlmICh0aGlzLmNsb3NlZCkgcmV0dXJuO1xuICAgIGlmICh0aGlzLmZpcnN0UmVuZGVyKSB0aGlzLm91dC53cml0ZShjdXJzb3IuaGlkZSk7ZWxzZSB0aGlzLm91dC53cml0ZShjbGVhcih0aGlzLm91dHB1dFRleHQsIHRoaXMub3V0LmNvbHVtbnMpKTtcbiAgICBzdXBlci5yZW5kZXIoKTtcblxuICAgIGxldCBfZW50cmllc1RvRGlzcGxheSA9IGVudHJpZXNUb0Rpc3BsYXkodGhpcy5zZWxlY3QsIHRoaXMuY2hvaWNlcy5sZW5ndGgsIHRoaXMubGltaXQpLFxuICAgICAgICBzdGFydEluZGV4ID0gX2VudHJpZXNUb0Rpc3BsYXkuc3RhcnRJbmRleCxcbiAgICAgICAgZW5kSW5kZXggPSBfZW50cmllc1RvRGlzcGxheS5lbmRJbmRleDtcblxuICAgIHRoaXMub3V0cHV0VGV4dCA9IFtzdHlsZS5zeW1ib2wodGhpcy5kb25lLCB0aGlzLmFib3J0ZWQsIHRoaXMuZXhpdGVkKSwgY29sb3IuYm9sZCh0aGlzLm1zZyksIHN0eWxlLmRlbGltaXRlcih0aGlzLmNvbXBsZXRpbmcpLCB0aGlzLmRvbmUgJiYgdGhpcy5zdWdnZXN0aW9uc1t0aGlzLnNlbGVjdF0gPyB0aGlzLnN1Z2dlc3Rpb25zW3RoaXMuc2VsZWN0XS50aXRsZSA6IHRoaXMucmVuZGVyZWQgPSB0aGlzLnRyYW5zZm9ybS5yZW5kZXIodGhpcy5pbnB1dCldLmpvaW4oJyAnKTtcblxuICAgIGlmICghdGhpcy5kb25lKSB7XG4gICAgICBjb25zdCBzdWdnZXN0aW9ucyA9IHRoaXMuc3VnZ2VzdGlvbnMuc2xpY2Uoc3RhcnRJbmRleCwgZW5kSW5kZXgpLm1hcCgoaXRlbSwgaSkgPT4gdGhpcy5yZW5kZXJPcHRpb24oaXRlbSwgdGhpcy5zZWxlY3QgPT09IGkgKyBzdGFydEluZGV4LCBpID09PSAwICYmIHN0YXJ0SW5kZXggPiAwLCBpICsgc3RhcnRJbmRleCA9PT0gZW5kSW5kZXggLSAxICYmIGVuZEluZGV4IDwgdGhpcy5jaG9pY2VzLmxlbmd0aCkpLmpvaW4oJ1xcbicpO1xuICAgICAgdGhpcy5vdXRwdXRUZXh0ICs9IGBcXG5gICsgKHN1Z2dlc3Rpb25zIHx8IGNvbG9yLmdyYXkodGhpcy5mYWxsYmFjay50aXRsZSkpO1xuICAgIH1cblxuICAgIHRoaXMub3V0LndyaXRlKGVyYXNlLmxpbmUgKyBjdXJzb3IudG8oMCkgKyB0aGlzLm91dHB1dFRleHQpO1xuICB9XG5cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBBdXRvY29tcGxldGVQcm9tcHQ7IiwiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBjb2xvciA9IHJlcXVpcmUoJ2tsZXVyJyk7XG5cbmNvbnN0IF9yZXF1aXJlID0gcmVxdWlyZSgnc2lzdGVyYW5zaScpLFxuICAgICAgY3Vyc29yID0gX3JlcXVpcmUuY3Vyc29yO1xuXG5jb25zdCBNdWx0aXNlbGVjdFByb21wdCA9IHJlcXVpcmUoJy4vbXVsdGlzZWxlY3QnKTtcblxuY29uc3QgX3JlcXVpcmUyID0gcmVxdWlyZSgnLi4vdXRpbCcpLFxuICAgICAgY2xlYXIgPSBfcmVxdWlyZTIuY2xlYXIsXG4gICAgICBzdHlsZSA9IF9yZXF1aXJlMi5zdHlsZSxcbiAgICAgIGZpZ3VyZXMgPSBfcmVxdWlyZTIuZmlndXJlcztcbi8qKlxuICogTXVsdGlzZWxlY3RQcm9tcHQgQmFzZSBFbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyBPcHRpb25zXG4gKiBAcGFyYW0ge1N0cmluZ30gb3B0cy5tZXNzYWdlIE1lc3NhZ2VcbiAqIEBwYXJhbSB7QXJyYXl9IG9wdHMuY2hvaWNlcyBBcnJheSBvZiBjaG9pY2Ugb2JqZWN0c1xuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLmhpbnRdIEhpbnQgdG8gZGlzcGxheVxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLndhcm5dIEhpbnQgc2hvd24gZm9yIGRpc2FibGVkIGNob2ljZXNcbiAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0cy5tYXhdIE1heCBjaG9pY2VzXG4gKiBAcGFyYW0ge051bWJlcn0gW29wdHMuY3Vyc29yPTBdIEN1cnNvciBzdGFydCBwb3NpdGlvblxuICogQHBhcmFtIHtTdHJlYW19IFtvcHRzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFtvcHRzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKi9cblxuXG5jbGFzcyBBdXRvY29tcGxldGVNdWx0aXNlbGVjdFByb21wdCBleHRlbmRzIE11bHRpc2VsZWN0UHJvbXB0IHtcbiAgY29uc3RydWN0b3Iob3B0cyA9IHt9KSB7XG4gICAgb3B0cy5vdmVycmlkZVJlbmRlciA9IHRydWU7XG4gICAgc3VwZXIob3B0cyk7XG4gICAgdGhpcy5pbnB1dFZhbHVlID0gJyc7XG4gICAgdGhpcy5jbGVhciA9IGNsZWFyKCcnLCB0aGlzLm91dC5jb2x1bW5zKTtcbiAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IHRoaXMudmFsdWU7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIGxhc3QoKSB7XG4gICAgdGhpcy5jdXJzb3IgPSB0aGlzLmZpbHRlcmVkT3B0aW9ucy5sZW5ndGggLSAxO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBuZXh0KCkge1xuICAgIHRoaXMuY3Vyc29yID0gKHRoaXMuY3Vyc29yICsgMSkgJSB0aGlzLmZpbHRlcmVkT3B0aW9ucy5sZW5ndGg7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHVwKCkge1xuICAgIGlmICh0aGlzLmN1cnNvciA9PT0gMCkge1xuICAgICAgdGhpcy5jdXJzb3IgPSB0aGlzLmZpbHRlcmVkT3B0aW9ucy5sZW5ndGggLSAxO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmN1cnNvci0tO1xuICAgIH1cblxuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBkb3duKCkge1xuICAgIGlmICh0aGlzLmN1cnNvciA9PT0gdGhpcy5maWx0ZXJlZE9wdGlvbnMubGVuZ3RoIC0gMSkge1xuICAgICAgdGhpcy5jdXJzb3IgPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmN1cnNvcisrO1xuICAgIH1cblxuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBsZWZ0KCkge1xuICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zW3RoaXMuY3Vyc29yXS5zZWxlY3RlZCA9IGZhbHNlO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICByaWdodCgpIHtcbiAgICBpZiAodGhpcy52YWx1ZS5maWx0ZXIoZSA9PiBlLnNlbGVjdGVkKS5sZW5ndGggPj0gdGhpcy5tYXhDaG9pY2VzKSByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgdGhpcy5maWx0ZXJlZE9wdGlvbnNbdGhpcy5jdXJzb3JdLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZGVsZXRlKCkge1xuICAgIGlmICh0aGlzLmlucHV0VmFsdWUubGVuZ3RoKSB7XG4gICAgICB0aGlzLmlucHV0VmFsdWUgPSB0aGlzLmlucHV0VmFsdWUuc3Vic3RyKDAsIHRoaXMuaW5wdXRWYWx1ZS5sZW5ndGggLSAxKTtcbiAgICAgIHRoaXMudXBkYXRlRmlsdGVyZWRPcHRpb25zKCk7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlRmlsdGVyZWRPcHRpb25zKCkge1xuICAgIGNvbnN0IGN1cnJlbnRIaWdobGlnaHQgPSB0aGlzLmZpbHRlcmVkT3B0aW9uc1t0aGlzLmN1cnNvcl07XG4gICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSB0aGlzLnZhbHVlLmZpbHRlcih2ID0+IHtcbiAgICAgIGlmICh0aGlzLmlucHV0VmFsdWUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB2LnRpdGxlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIGlmICh2LnRpdGxlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy5pbnB1dFZhbHVlLnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIHYudmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgaWYgKHYudmFsdWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLmlucHV0VmFsdWUudG9Mb3dlckNhc2UoKSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG4gICAgY29uc3QgbmV3SGlnaGxpZ2h0SW5kZXggPSB0aGlzLmZpbHRlcmVkT3B0aW9ucy5maW5kSW5kZXgodiA9PiB2ID09PSBjdXJyZW50SGlnaGxpZ2h0KTtcbiAgICB0aGlzLmN1cnNvciA9IG5ld0hpZ2hsaWdodEluZGV4IDwgMCA/IDAgOiBuZXdIaWdobGlnaHRJbmRleDtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgaGFuZGxlU3BhY2VUb2dnbGUoKSB7XG4gICAgY29uc3QgdiA9IHRoaXMuZmlsdGVyZWRPcHRpb25zW3RoaXMuY3Vyc29yXTtcblxuICAgIGlmICh2LnNlbGVjdGVkKSB7XG4gICAgICB2LnNlbGVjdGVkID0gZmFsc2U7XG4gICAgICB0aGlzLnJlbmRlcigpO1xuICAgIH0gZWxzZSBpZiAodi5kaXNhYmxlZCB8fCB0aGlzLnZhbHVlLmZpbHRlcihlID0+IGUuc2VsZWN0ZWQpLmxlbmd0aCA+PSB0aGlzLm1heENob2ljZXMpIHtcbiAgICAgIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdi5zZWxlY3RlZCA9IHRydWU7XG4gICAgICB0aGlzLnJlbmRlcigpO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZUlucHV0Q2hhbmdlKGMpIHtcbiAgICB0aGlzLmlucHV0VmFsdWUgPSB0aGlzLmlucHV0VmFsdWUgKyBjO1xuICAgIHRoaXMudXBkYXRlRmlsdGVyZWRPcHRpb25zKCk7XG4gIH1cblxuICBfKGMsIGtleSkge1xuICAgIGlmIChjID09PSAnICcpIHtcbiAgICAgIHRoaXMuaGFuZGxlU3BhY2VUb2dnbGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5oYW5kbGVJbnB1dENoYW5nZShjKTtcbiAgICB9XG4gIH1cblxuICByZW5kZXJJbnN0cnVjdGlvbnMoKSB7XG4gICAgaWYgKHRoaXMuaW5zdHJ1Y3Rpb25zID09PSB1bmRlZmluZWQgfHwgdGhpcy5pbnN0cnVjdGlvbnMpIHtcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5pbnN0cnVjdGlvbnMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmluc3RydWN0aW9ucztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGBcbkluc3RydWN0aW9uczpcbiAgICAke2ZpZ3VyZXMuYXJyb3dVcH0vJHtmaWd1cmVzLmFycm93RG93bn06IEhpZ2hsaWdodCBvcHRpb25cbiAgICAke2ZpZ3VyZXMuYXJyb3dMZWZ0fS8ke2ZpZ3VyZXMuYXJyb3dSaWdodH0vW3NwYWNlXTogVG9nZ2xlIHNlbGVjdGlvblxuICAgIFthLGIsY10vZGVsZXRlOiBGaWx0ZXIgY2hvaWNlc1xuICAgIGVudGVyL3JldHVybjogQ29tcGxldGUgYW5zd2VyXG5gO1xuICAgIH1cblxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIHJlbmRlckN1cnJlbnRJbnB1dCgpIHtcbiAgICByZXR1cm4gYFxuRmlsdGVyZWQgcmVzdWx0cyBmb3I6ICR7dGhpcy5pbnB1dFZhbHVlID8gdGhpcy5pbnB1dFZhbHVlIDogY29sb3IuZ3JheSgnRW50ZXIgc29tZXRoaW5nIHRvIGZpbHRlcicpfVxcbmA7XG4gIH1cblxuICByZW5kZXJPcHRpb24oY3Vyc29yLCB2LCBpKSB7XG4gICAgbGV0IHRpdGxlO1xuICAgIGlmICh2LmRpc2FibGVkKSB0aXRsZSA9IGN1cnNvciA9PT0gaSA/IGNvbG9yLmdyYXkoKS51bmRlcmxpbmUodi50aXRsZSkgOiBjb2xvci5zdHJpa2V0aHJvdWdoKCkuZ3JheSh2LnRpdGxlKTtlbHNlIHRpdGxlID0gY3Vyc29yID09PSBpID8gY29sb3IuY3lhbigpLnVuZGVybGluZSh2LnRpdGxlKSA6IHYudGl0bGU7XG4gICAgcmV0dXJuICh2LnNlbGVjdGVkID8gY29sb3IuZ3JlZW4oZmlndXJlcy5yYWRpb09uKSA6IGZpZ3VyZXMucmFkaW9PZmYpICsgJyAgJyArIHRpdGxlO1xuICB9XG5cbiAgcmVuZGVyRG9uZU9ySW5zdHJ1Y3Rpb25zKCkge1xuICAgIGlmICh0aGlzLmRvbmUpIHtcbiAgICAgIHJldHVybiB0aGlzLnZhbHVlLmZpbHRlcihlID0+IGUuc2VsZWN0ZWQpLm1hcCh2ID0+IHYudGl0bGUpLmpvaW4oJywgJyk7XG4gICAgfVxuXG4gICAgY29uc3Qgb3V0cHV0ID0gW2NvbG9yLmdyYXkodGhpcy5oaW50KSwgdGhpcy5yZW5kZXJJbnN0cnVjdGlvbnMoKSwgdGhpcy5yZW5kZXJDdXJyZW50SW5wdXQoKV07XG5cbiAgICBpZiAodGhpcy5maWx0ZXJlZE9wdGlvbnMubGVuZ3RoICYmIHRoaXMuZmlsdGVyZWRPcHRpb25zW3RoaXMuY3Vyc29yXS5kaXNhYmxlZCkge1xuICAgICAgb3V0cHV0LnB1c2goY29sb3IueWVsbG93KHRoaXMud2FybikpO1xuICAgIH1cblxuICAgIHJldHVybiBvdXRwdXQuam9pbignICcpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGlmICh0aGlzLmNsb3NlZCkgcmV0dXJuO1xuICAgIGlmICh0aGlzLmZpcnN0UmVuZGVyKSB0aGlzLm91dC53cml0ZShjdXJzb3IuaGlkZSk7XG4gICAgc3VwZXIucmVuZGVyKCk7IC8vIHByaW50IHByb21wdFxuXG4gICAgbGV0IHByb21wdCA9IFtzdHlsZS5zeW1ib2wodGhpcy5kb25lLCB0aGlzLmFib3J0ZWQpLCBjb2xvci5ib2xkKHRoaXMubXNnKSwgc3R5bGUuZGVsaW1pdGVyKGZhbHNlKSwgdGhpcy5yZW5kZXJEb25lT3JJbnN0cnVjdGlvbnMoKV0uam9pbignICcpO1xuXG4gICAgaWYgKHRoaXMuc2hvd01pbkVycm9yKSB7XG4gICAgICBwcm9tcHQgKz0gY29sb3IucmVkKGBZb3UgbXVzdCBzZWxlY3QgYSBtaW5pbXVtIG9mICR7dGhpcy5taW5TZWxlY3RlZH0gY2hvaWNlcy5gKTtcbiAgICAgIHRoaXMuc2hvd01pbkVycm9yID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcHJvbXB0ICs9IHRoaXMucmVuZGVyT3B0aW9ucyh0aGlzLmZpbHRlcmVkT3B0aW9ucyk7XG4gICAgdGhpcy5vdXQud3JpdGUodGhpcy5jbGVhciArIHByb21wdCk7XG4gICAgdGhpcy5jbGVhciA9IGNsZWFyKHByb21wdCwgdGhpcy5vdXQuY29sdW1ucyk7XG4gIH1cblxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEF1dG9jb21wbGV0ZU11bHRpc2VsZWN0UHJvbXB0OyIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBjb2xvciA9IHJlcXVpcmUoJ2tsZXVyJyk7XG5cbmNvbnN0IFByb21wdCA9IHJlcXVpcmUoJy4vcHJvbXB0Jyk7XG5cbmNvbnN0IF9yZXF1aXJlID0gcmVxdWlyZSgnLi4vdXRpbCcpLFxuICAgICAgc3R5bGUgPSBfcmVxdWlyZS5zdHlsZSxcbiAgICAgIGNsZWFyID0gX3JlcXVpcmUuY2xlYXI7XG5cbmNvbnN0IF9yZXF1aXJlMiA9IHJlcXVpcmUoJ3Npc3RlcmFuc2knKSxcbiAgICAgIGVyYXNlID0gX3JlcXVpcmUyLmVyYXNlLFxuICAgICAgY3Vyc29yID0gX3JlcXVpcmUyLmN1cnNvcjtcbi8qKlxuICogQ29uZmlybVByb21wdCBCYXNlIEVsZW1lbnRcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIE9wdGlvbnNcbiAqIEBwYXJhbSB7U3RyaW5nfSBvcHRzLm1lc3NhZ2UgTWVzc2FnZVxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0cy5pbml0aWFsXSBEZWZhdWx0IHZhbHVlICh0cnVlL2ZhbHNlKVxuICogQHBhcmFtIHtTdHJlYW19IFtvcHRzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFtvcHRzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKiBAcGFyYW0ge1N0cmluZ30gW29wdHMueWVzXSBUaGUgXCJZZXNcIiBsYWJlbFxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLnllc09wdGlvbl0gVGhlIFwiWWVzXCIgb3B0aW9uIHdoZW4gY2hvb3NpbmcgYmV0d2VlbiB5ZXMvbm9cbiAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5ub10gVGhlIFwiTm9cIiBsYWJlbFxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLm5vT3B0aW9uXSBUaGUgXCJOb1wiIG9wdGlvbiB3aGVuIGNob29zaW5nIGJldHdlZW4geWVzL25vXG4gKi9cblxuXG5jbGFzcyBDb25maXJtUHJvbXB0IGV4dGVuZHMgUHJvbXB0IHtcbiAgY29uc3RydWN0b3Iob3B0cyA9IHt9KSB7XG4gICAgc3VwZXIob3B0cyk7XG4gICAgdGhpcy5tc2cgPSBvcHRzLm1lc3NhZ2U7XG4gICAgdGhpcy52YWx1ZSA9IG9wdHMuaW5pdGlhbDtcbiAgICB0aGlzLmluaXRpYWxWYWx1ZSA9ICEhb3B0cy5pbml0aWFsO1xuICAgIHRoaXMueWVzTXNnID0gb3B0cy55ZXMgfHwgJ3llcyc7XG4gICAgdGhpcy55ZXNPcHRpb24gPSBvcHRzLnllc09wdGlvbiB8fCAnKFkvbiknO1xuICAgIHRoaXMubm9Nc2cgPSBvcHRzLm5vIHx8ICdubyc7XG4gICAgdGhpcy5ub09wdGlvbiA9IG9wdHMubm9PcHRpb24gfHwgJyh5L04pJztcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgcmVzZXQoKSB7XG4gICAgdGhpcy52YWx1ZSA9IHRoaXMuaW5pdGlhbFZhbHVlO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBleGl0KCkge1xuICAgIHRoaXMuYWJvcnQoKTtcbiAgfVxuXG4gIGFib3J0KCkge1xuICAgIHRoaXMuZG9uZSA9IHRoaXMuYWJvcnRlZCA9IHRydWU7XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgICB0aGlzLm91dC53cml0ZSgnXFxuJyk7XG4gICAgdGhpcy5jbG9zZSgpO1xuICB9XG5cbiAgc3VibWl0KCkge1xuICAgIHRoaXMudmFsdWUgPSB0aGlzLnZhbHVlIHx8IGZhbHNlO1xuICAgIHRoaXMuZG9uZSA9IHRydWU7XG4gICAgdGhpcy5hYm9ydGVkID0gZmFsc2U7XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgICB0aGlzLm91dC53cml0ZSgnXFxuJyk7XG4gICAgdGhpcy5jbG9zZSgpO1xuICB9XG5cbiAgXyhjLCBrZXkpIHtcbiAgICBpZiAoYy50b0xvd2VyQ2FzZSgpID09PSAneScpIHtcbiAgICAgIHRoaXMudmFsdWUgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRoaXMuc3VibWl0KCk7XG4gICAgfVxuXG4gICAgaWYgKGMudG9Mb3dlckNhc2UoKSA9PT0gJ24nKSB7XG4gICAgICB0aGlzLnZhbHVlID0gZmFsc2U7XG4gICAgICByZXR1cm4gdGhpcy5zdWJtaXQoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5iZWxsKCk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgaWYgKHRoaXMuY2xvc2VkKSByZXR1cm47XG4gICAgaWYgKHRoaXMuZmlyc3RSZW5kZXIpIHRoaXMub3V0LndyaXRlKGN1cnNvci5oaWRlKTtlbHNlIHRoaXMub3V0LndyaXRlKGNsZWFyKHRoaXMub3V0cHV0VGV4dCwgdGhpcy5vdXQuY29sdW1ucykpO1xuICAgIHN1cGVyLnJlbmRlcigpO1xuICAgIHRoaXMub3V0cHV0VGV4dCA9IFtzdHlsZS5zeW1ib2wodGhpcy5kb25lLCB0aGlzLmFib3J0ZWQpLCBjb2xvci5ib2xkKHRoaXMubXNnKSwgc3R5bGUuZGVsaW1pdGVyKHRoaXMuZG9uZSksIHRoaXMuZG9uZSA/IHRoaXMudmFsdWUgPyB0aGlzLnllc01zZyA6IHRoaXMubm9Nc2cgOiBjb2xvci5ncmF5KHRoaXMuaW5pdGlhbFZhbHVlID8gdGhpcy55ZXNPcHRpb24gOiB0aGlzLm5vT3B0aW9uKV0uam9pbignICcpO1xuICAgIHRoaXMub3V0LndyaXRlKGVyYXNlLmxpbmUgKyBjdXJzb3IudG8oMCkgKyB0aGlzLm91dHB1dFRleHQpO1xuICB9XG5cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBDb25maXJtUHJvbXB0OyIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIFRleHRQcm9tcHQ6IHJlcXVpcmUoJy4vdGV4dCcpLFxuICBTZWxlY3RQcm9tcHQ6IHJlcXVpcmUoJy4vc2VsZWN0JyksXG4gIFRvZ2dsZVByb21wdDogcmVxdWlyZSgnLi90b2dnbGUnKSxcbiAgRGF0ZVByb21wdDogcmVxdWlyZSgnLi9kYXRlJyksXG4gIE51bWJlclByb21wdDogcmVxdWlyZSgnLi9udW1iZXInKSxcbiAgTXVsdGlzZWxlY3RQcm9tcHQ6IHJlcXVpcmUoJy4vbXVsdGlzZWxlY3QnKSxcbiAgQXV0b2NvbXBsZXRlUHJvbXB0OiByZXF1aXJlKCcuL2F1dG9jb21wbGV0ZScpLFxuICBBdXRvY29tcGxldGVNdWx0aXNlbGVjdFByb21wdDogcmVxdWlyZSgnLi9hdXRvY29tcGxldGVNdWx0aXNlbGVjdCcpLFxuICBDb25maXJtUHJvbXB0OiByZXF1aXJlKCcuL2NvbmZpcm0nKVxufTsiLCIndXNlIHN0cmljdCc7XG5cbmNvbnN0ICQgPSBleHBvcnRzO1xuXG5jb25zdCBlbCA9IHJlcXVpcmUoJy4vZWxlbWVudHMnKTtcblxuY29uc3Qgbm9vcCA9IHYgPT4gdjtcblxuZnVuY3Rpb24gdG9Qcm9tcHQodHlwZSwgYXJncywgb3B0cyA9IHt9KSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzLCByZWopID0+IHtcbiAgICBjb25zdCBwID0gbmV3IGVsW3R5cGVdKGFyZ3MpO1xuICAgIGNvbnN0IG9uQWJvcnQgPSBvcHRzLm9uQWJvcnQgfHwgbm9vcDtcbiAgICBjb25zdCBvblN1Ym1pdCA9IG9wdHMub25TdWJtaXQgfHwgbm9vcDtcbiAgICBjb25zdCBvbkV4aXQgPSBvcHRzLm9uRXhpdCB8fCBub29wO1xuICAgIHAub24oJ3N0YXRlJywgYXJncy5vblN0YXRlIHx8IG5vb3ApO1xuICAgIHAub24oJ3N1Ym1pdCcsIHggPT4gcmVzKG9uU3VibWl0KHgpKSk7XG4gICAgcC5vbignZXhpdCcsIHggPT4gcmVzKG9uRXhpdCh4KSkpO1xuICAgIHAub24oJ2Fib3J0JywgeCA9PiByZWoob25BYm9ydCh4KSkpO1xuICB9KTtcbn1cbi8qKlxuICogVGV4dCBwcm9tcHRcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLm1lc3NhZ2UgUHJvbXB0IG1lc3NhZ2UgdG8gZGlzcGxheVxuICogQHBhcmFtIHtzdHJpbmd9IFthcmdzLmluaXRpYWxdIERlZmF1bHQgc3RyaW5nIHZhbHVlXG4gKiBAcGFyYW0ge3N0cmluZ30gW2FyZ3Muc3R5bGU9XCJkZWZhdWx0XCJdIFJlbmRlciBzdHlsZSAoJ2RlZmF1bHQnLCAncGFzc3dvcmQnLCAnaW52aXNpYmxlJylcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IFthcmdzLm9uU3RhdGVdIE9uIHN0YXRlIGNoYW5nZSBjYWxsYmFja1xuICogQHBhcmFtIHtmdW5jdGlvbn0gW2FyZ3MudmFsaWRhdGVdIEZ1bmN0aW9uIHRvIHZhbGlkYXRlIHVzZXIgaW5wdXRcbiAqIEBwYXJhbSB7U3RyZWFtfSBbYXJncy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbYXJncy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICogQHJldHVybnMge1Byb21pc2V9IFByb21pc2Ugd2l0aCB1c2VyIGlucHV0XG4gKi9cblxuXG4kLnRleHQgPSBhcmdzID0+IHRvUHJvbXB0KCdUZXh0UHJvbXB0JywgYXJncyk7XG4vKipcbiAqIFBhc3N3b3JkIHByb21wdCB3aXRoIG1hc2tlZCBpbnB1dFxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MubWVzc2FnZSBQcm9tcHQgbWVzc2FnZSB0byBkaXNwbGF5XG4gKiBAcGFyYW0ge3N0cmluZ30gW2FyZ3MuaW5pdGlhbF0gRGVmYXVsdCBzdHJpbmcgdmFsdWVcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IFthcmdzLm9uU3RhdGVdIE9uIHN0YXRlIGNoYW5nZSBjYWxsYmFja1xuICogQHBhcmFtIHtmdW5jdGlvbn0gW2FyZ3MudmFsaWRhdGVdIEZ1bmN0aW9uIHRvIHZhbGlkYXRlIHVzZXIgaW5wdXRcbiAqIEBwYXJhbSB7U3RyZWFtfSBbYXJncy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbYXJncy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICogQHJldHVybnMge1Byb21pc2V9IFByb21pc2Ugd2l0aCB1c2VyIGlucHV0XG4gKi9cblxuXG4kLnBhc3N3b3JkID0gYXJncyA9PiB7XG4gIGFyZ3Muc3R5bGUgPSAncGFzc3dvcmQnO1xuICByZXR1cm4gJC50ZXh0KGFyZ3MpO1xufTtcbi8qKlxuICogUHJvbXB0IHdoZXJlIGlucHV0IGlzIGludmlzaWJsZSwgbGlrZSBzdWRvXG4gKiBAcGFyYW0ge3N0cmluZ30gYXJncy5tZXNzYWdlIFByb21wdCBtZXNzYWdlIHRvIGRpc3BsYXlcbiAqIEBwYXJhbSB7c3RyaW5nfSBbYXJncy5pbml0aWFsXSBEZWZhdWx0IHN0cmluZyB2YWx1ZVxuICogQHBhcmFtIHtmdW5jdGlvbn0gW2FyZ3Mub25TdGF0ZV0gT24gc3RhdGUgY2hhbmdlIGNhbGxiYWNrXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBbYXJncy52YWxpZGF0ZV0gRnVuY3Rpb24gdG8gdmFsaWRhdGUgdXNlciBpbnB1dFxuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSB3aXRoIHVzZXIgaW5wdXRcbiAqL1xuXG5cbiQuaW52aXNpYmxlID0gYXJncyA9PiB7XG4gIGFyZ3Muc3R5bGUgPSAnaW52aXNpYmxlJztcbiAgcmV0dXJuICQudGV4dChhcmdzKTtcbn07XG4vKipcbiAqIE51bWJlciBwcm9tcHRcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLm1lc3NhZ2UgUHJvbXB0IG1lc3NhZ2UgdG8gZGlzcGxheVxuICogQHBhcmFtIHtudW1iZXJ9IGFyZ3MuaW5pdGlhbCBEZWZhdWx0IG51bWJlciB2YWx1ZVxuICogQHBhcmFtIHtmdW5jdGlvbn0gW2FyZ3Mub25TdGF0ZV0gT24gc3RhdGUgY2hhbmdlIGNhbGxiYWNrXG4gKiBAcGFyYW0ge251bWJlcn0gW2FyZ3MubWF4XSBNYXggdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBbYXJncy5taW5dIE1pbiB2YWx1ZVxuICogQHBhcmFtIHtzdHJpbmd9IFthcmdzLnN0eWxlPVwiZGVmYXVsdFwiXSBSZW5kZXIgc3R5bGUgKCdkZWZhdWx0JywgJ3Bhc3N3b3JkJywgJ2ludmlzaWJsZScpXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRzLmZsb2F0PWZhbHNlXSBQYXJzZSBpbnB1dCBhcyBmbG9hdHNcbiAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0cy5yb3VuZD0yXSBSb3VuZCBmbG9hdHMgdG8geCBkZWNpbWFsc1xuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRzLmluY3JlbWVudD0xXSBOdW1iZXIgdG8gaW5jcmVtZW50IGJ5IHdoZW4gdXNpbmcgYXJyb3cta2V5c1xuICogQHBhcmFtIHtmdW5jdGlvbn0gW2FyZ3MudmFsaWRhdGVdIEZ1bmN0aW9uIHRvIHZhbGlkYXRlIHVzZXIgaW5wdXRcbiAqIEBwYXJhbSB7U3RyZWFtfSBbYXJncy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbYXJncy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICogQHJldHVybnMge1Byb21pc2V9IFByb21pc2Ugd2l0aCB1c2VyIGlucHV0XG4gKi9cblxuXG4kLm51bWJlciA9IGFyZ3MgPT4gdG9Qcm9tcHQoJ051bWJlclByb21wdCcsIGFyZ3MpO1xuLyoqXG4gKiBEYXRlIHByb21wdFxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MubWVzc2FnZSBQcm9tcHQgbWVzc2FnZSB0byBkaXNwbGF5XG4gKiBAcGFyYW0ge251bWJlcn0gYXJncy5pbml0aWFsIERlZmF1bHQgbnVtYmVyIHZhbHVlXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBbYXJncy5vblN0YXRlXSBPbiBzdGF0ZSBjaGFuZ2UgY2FsbGJhY2tcbiAqIEBwYXJhbSB7bnVtYmVyfSBbYXJncy5tYXhdIE1heCB2YWx1ZVxuICogQHBhcmFtIHtudW1iZXJ9IFthcmdzLm1pbl0gTWluIHZhbHVlXG4gKiBAcGFyYW0ge3N0cmluZ30gW2FyZ3Muc3R5bGU9XCJkZWZhdWx0XCJdIFJlbmRlciBzdHlsZSAoJ2RlZmF1bHQnLCAncGFzc3dvcmQnLCAnaW52aXNpYmxlJylcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdHMuZmxvYXQ9ZmFsc2VdIFBhcnNlIGlucHV0IGFzIGZsb2F0c1xuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRzLnJvdW5kPTJdIFJvdW5kIGZsb2F0cyB0byB4IGRlY2ltYWxzXG4gKiBAcGFyYW0ge051bWJlcn0gW29wdHMuaW5jcmVtZW50PTFdIE51bWJlciB0byBpbmNyZW1lbnQgYnkgd2hlbiB1c2luZyBhcnJvdy1rZXlzXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBbYXJncy52YWxpZGF0ZV0gRnVuY3Rpb24gdG8gdmFsaWRhdGUgdXNlciBpbnB1dFxuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSB3aXRoIHVzZXIgaW5wdXRcbiAqL1xuXG5cbiQuZGF0ZSA9IGFyZ3MgPT4gdG9Qcm9tcHQoJ0RhdGVQcm9tcHQnLCBhcmdzKTtcbi8qKlxuICogQ2xhc3NpYyB5ZXMvbm8gcHJvbXB0XG4gKiBAcGFyYW0ge3N0cmluZ30gYXJncy5tZXNzYWdlIFByb21wdCBtZXNzYWdlIHRvIGRpc3BsYXlcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2FyZ3MuaW5pdGlhbD1mYWxzZV0gRGVmYXVsdCB2YWx1ZVxuICogQHBhcmFtIHtmdW5jdGlvbn0gW2FyZ3Mub25TdGF0ZV0gT24gc3RhdGUgY2hhbmdlIGNhbGxiYWNrXG4gKiBAcGFyYW0ge1N0cmVhbX0gW2FyZ3Muc3RkaW5dIFRoZSBSZWFkYWJsZSBzdHJlYW0gdG8gbGlzdGVuIHRvXG4gKiBAcGFyYW0ge1N0cmVhbX0gW2FyZ3Muc3Rkb3V0XSBUaGUgV3JpdGFibGUgc3RyZWFtIHRvIHdyaXRlIHJlYWRsaW5lIGRhdGEgdG9cbiAqIEByZXR1cm5zIHtQcm9taXNlfSBQcm9taXNlIHdpdGggdXNlciBpbnB1dFxuICovXG5cblxuJC5jb25maXJtID0gYXJncyA9PiB0b1Byb21wdCgnQ29uZmlybVByb21wdCcsIGFyZ3MpO1xuLyoqXG4gKiBMaXN0IHByb21wdCwgc3BsaXQgaW50cHV0IHN0cmluZyBieSBgc2VwZXJhdG9yYFxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MubWVzc2FnZSBQcm9tcHQgbWVzc2FnZSB0byBkaXNwbGF5XG4gKiBAcGFyYW0ge3N0cmluZ30gW2FyZ3MuaW5pdGlhbF0gRGVmYXVsdCBzdHJpbmcgdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBbYXJncy5zdHlsZT1cImRlZmF1bHRcIl0gUmVuZGVyIHN0eWxlICgnZGVmYXVsdCcsICdwYXNzd29yZCcsICdpbnZpc2libGUnKVxuICogQHBhcmFtIHtzdHJpbmd9IFthcmdzLnNlcGFyYXRvcl0gU3RyaW5nIHNlcGFyYXRvclxuICogQHBhcmFtIHtmdW5jdGlvbn0gW2FyZ3Mub25TdGF0ZV0gT24gc3RhdGUgY2hhbmdlIGNhbGxiYWNrXG4gKiBAcGFyYW0ge1N0cmVhbX0gW2FyZ3Muc3RkaW5dIFRoZSBSZWFkYWJsZSBzdHJlYW0gdG8gbGlzdGVuIHRvXG4gKiBAcGFyYW0ge1N0cmVhbX0gW2FyZ3Muc3Rkb3V0XSBUaGUgV3JpdGFibGUgc3RyZWFtIHRvIHdyaXRlIHJlYWRsaW5lIGRhdGEgdG9cbiAqIEByZXR1cm5zIHtQcm9taXNlfSBQcm9taXNlIHdpdGggdXNlciBpbnB1dCwgaW4gZm9ybSBvZiBhbiBgQXJyYXlgXG4gKi9cblxuXG4kLmxpc3QgPSBhcmdzID0+IHtcbiAgY29uc3Qgc2VwID0gYXJncy5zZXBhcmF0b3IgfHwgJywnO1xuICByZXR1cm4gdG9Qcm9tcHQoJ1RleHRQcm9tcHQnLCBhcmdzLCB7XG4gICAgb25TdWJtaXQ6IHN0ciA9PiBzdHIuc3BsaXQoc2VwKS5tYXAocyA9PiBzLnRyaW0oKSlcbiAgfSk7XG59O1xuLyoqXG4gKiBUb2dnbGUvc3dpdGNoIHByb21wdFxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MubWVzc2FnZSBQcm9tcHQgbWVzc2FnZSB0byBkaXNwbGF5XG4gKiBAcGFyYW0ge2Jvb2xlYW59IFthcmdzLmluaXRpYWw9ZmFsc2VdIERlZmF1bHQgdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBbYXJncy5hY3RpdmU9XCJvblwiXSBUZXh0IGZvciBgYWN0aXZlYCBzdGF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IFthcmdzLmluYWN0aXZlPVwib2ZmXCJdIFRleHQgZm9yIGBpbmFjdGl2ZWAgc3RhdGVcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IFthcmdzLm9uU3RhdGVdIE9uIHN0YXRlIGNoYW5nZSBjYWxsYmFja1xuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSB3aXRoIHVzZXIgaW5wdXRcbiAqL1xuXG5cbiQudG9nZ2xlID0gYXJncyA9PiB0b1Byb21wdCgnVG9nZ2xlUHJvbXB0JywgYXJncyk7XG4vKipcbiAqIEludGVyYWN0aXZlIHNlbGVjdCBwcm9tcHRcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLm1lc3NhZ2UgUHJvbXB0IG1lc3NhZ2UgdG8gZGlzcGxheVxuICogQHBhcmFtIHtBcnJheX0gYXJncy5jaG9pY2VzIEFycmF5IG9mIGNob2ljZXMgb2JqZWN0cyBgW3sgdGl0bGUsIHZhbHVlIH0sIC4uLl1gXG4gKiBAcGFyYW0ge251bWJlcn0gW2FyZ3MuaW5pdGlhbF0gSW5kZXggb2YgZGVmYXVsdCB2YWx1ZVxuICogQHBhcmFtIHtTdHJpbmd9IFthcmdzLmhpbnRdIEhpbnQgdG8gZGlzcGxheVxuICogQHBhcmFtIHtmdW5jdGlvbn0gW2FyZ3Mub25TdGF0ZV0gT24gc3RhdGUgY2hhbmdlIGNhbGxiYWNrXG4gKiBAcGFyYW0ge1N0cmVhbX0gW2FyZ3Muc3RkaW5dIFRoZSBSZWFkYWJsZSBzdHJlYW0gdG8gbGlzdGVuIHRvXG4gKiBAcGFyYW0ge1N0cmVhbX0gW2FyZ3Muc3Rkb3V0XSBUaGUgV3JpdGFibGUgc3RyZWFtIHRvIHdyaXRlIHJlYWRsaW5lIGRhdGEgdG9cbiAqIEByZXR1cm5zIHtQcm9taXNlfSBQcm9taXNlIHdpdGggdXNlciBpbnB1dFxuICovXG5cblxuJC5zZWxlY3QgPSBhcmdzID0+IHRvUHJvbXB0KCdTZWxlY3RQcm9tcHQnLCBhcmdzKTtcbi8qKlxuICogSW50ZXJhY3RpdmUgbXVsdGktc2VsZWN0IC8gYXV0b2NvbXBsZXRlTXVsdGlzZWxlY3QgcHJvbXB0XG4gKiBAcGFyYW0ge3N0cmluZ30gYXJncy5tZXNzYWdlIFByb21wdCBtZXNzYWdlIHRvIGRpc3BsYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFyZ3MuY2hvaWNlcyBBcnJheSBvZiBjaG9pY2VzIG9iamVjdHMgYFt7IHRpdGxlLCB2YWx1ZSwgW3NlbGVjdGVkXSB9LCAuLi5dYFxuICogQHBhcmFtIHtudW1iZXJ9IFthcmdzLm1heF0gTWF4IHNlbGVjdFxuICogQHBhcmFtIHtzdHJpbmd9IFthcmdzLmhpbnRdIEhpbnQgdG8gZGlzcGxheSB1c2VyXG4gKiBAcGFyYW0ge051bWJlcn0gW2FyZ3MuY3Vyc29yPTBdIEN1cnNvciBzdGFydCBwb3NpdGlvblxuICogQHBhcmFtIHtmdW5jdGlvbn0gW2FyZ3Mub25TdGF0ZV0gT24gc3RhdGUgY2hhbmdlIGNhbGxiYWNrXG4gKiBAcGFyYW0ge1N0cmVhbX0gW2FyZ3Muc3RkaW5dIFRoZSBSZWFkYWJsZSBzdHJlYW0gdG8gbGlzdGVuIHRvXG4gKiBAcGFyYW0ge1N0cmVhbX0gW2FyZ3Muc3Rkb3V0XSBUaGUgV3JpdGFibGUgc3RyZWFtIHRvIHdyaXRlIHJlYWRsaW5lIGRhdGEgdG9cbiAqIEByZXR1cm5zIHtQcm9taXNlfSBQcm9taXNlIHdpdGggdXNlciBpbnB1dFxuICovXG5cblxuJC5tdWx0aXNlbGVjdCA9IGFyZ3MgPT4ge1xuICBhcmdzLmNob2ljZXMgPSBbXS5jb25jYXQoYXJncy5jaG9pY2VzIHx8IFtdKTtcblxuICBjb25zdCB0b1NlbGVjdGVkID0gaXRlbXMgPT4gaXRlbXMuZmlsdGVyKGl0ZW0gPT4gaXRlbS5zZWxlY3RlZCkubWFwKGl0ZW0gPT4gaXRlbS52YWx1ZSk7XG5cbiAgcmV0dXJuIHRvUHJvbXB0KCdNdWx0aXNlbGVjdFByb21wdCcsIGFyZ3MsIHtcbiAgICBvbkFib3J0OiB0b1NlbGVjdGVkLFxuICAgIG9uU3VibWl0OiB0b1NlbGVjdGVkXG4gIH0pO1xufTtcblxuJC5hdXRvY29tcGxldGVNdWx0aXNlbGVjdCA9IGFyZ3MgPT4ge1xuICBhcmdzLmNob2ljZXMgPSBbXS5jb25jYXQoYXJncy5jaG9pY2VzIHx8IFtdKTtcblxuICBjb25zdCB0b1NlbGVjdGVkID0gaXRlbXMgPT4gaXRlbXMuZmlsdGVyKGl0ZW0gPT4gaXRlbS5zZWxlY3RlZCkubWFwKGl0ZW0gPT4gaXRlbS52YWx1ZSk7XG5cbiAgcmV0dXJuIHRvUHJvbXB0KCdBdXRvY29tcGxldGVNdWx0aXNlbGVjdFByb21wdCcsIGFyZ3MsIHtcbiAgICBvbkFib3J0OiB0b1NlbGVjdGVkLFxuICAgIG9uU3VibWl0OiB0b1NlbGVjdGVkXG4gIH0pO1xufTtcblxuY29uc3QgYnlUaXRsZSA9IChpbnB1dCwgY2hvaWNlcykgPT4gUHJvbWlzZS5yZXNvbHZlKGNob2ljZXMuZmlsdGVyKGl0ZW0gPT4gaXRlbS50aXRsZS5zbGljZSgwLCBpbnB1dC5sZW5ndGgpLnRvTG93ZXJDYXNlKCkgPT09IGlucHV0LnRvTG93ZXJDYXNlKCkpKTtcbi8qKlxuICogSW50ZXJhY3RpdmUgYXV0by1jb21wbGV0ZSBwcm9tcHRcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLm1lc3NhZ2UgUHJvbXB0IG1lc3NhZ2UgdG8gZGlzcGxheVxuICogQHBhcmFtIHtBcnJheX0gYXJncy5jaG9pY2VzIEFycmF5IG9mIGF1dG8tY29tcGxldGUgY2hvaWNlcyBvYmplY3RzIGBbeyB0aXRsZSwgdmFsdWUgfSwgLi4uXWBcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFthcmdzLnN1Z2dlc3RdIEZ1bmN0aW9uIHRvIGZpbHRlciByZXN1bHRzIGJhc2VkIG9uIHVzZXIgaW5wdXQuIERlZmF1bHRzIHRvIHNvcnQgYnkgYHRpdGxlYFxuICogQHBhcmFtIHtudW1iZXJ9IFthcmdzLmxpbWl0PTEwXSBNYXggbnVtYmVyIG9mIHJlc3VsdHMgdG8gc2hvd1xuICogQHBhcmFtIHtzdHJpbmd9IFthcmdzLnN0eWxlPVwiZGVmYXVsdFwiXSBSZW5kZXIgc3R5bGUgKCdkZWZhdWx0JywgJ3Bhc3N3b3JkJywgJ2ludmlzaWJsZScpXG4gKiBAcGFyYW0ge1N0cmluZ30gW2FyZ3MuaW5pdGlhbF0gSW5kZXggb2YgdGhlIGRlZmF1bHQgdmFsdWVcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuY2xlYXJGaXJzdF0gVGhlIGZpcnN0IEVTQ0FQRSBrZXlwcmVzcyB3aWxsIGNsZWFyIHRoZSBpbnB1dFxuICogQHBhcmFtIHtTdHJpbmd9IFthcmdzLmZhbGxiYWNrXSBGYWxsYmFjayBtZXNzYWdlIC0gZGVmYXVsdHMgdG8gaW5pdGlhbCB2YWx1ZVxuICogQHBhcmFtIHtmdW5jdGlvbn0gW2FyZ3Mub25TdGF0ZV0gT24gc3RhdGUgY2hhbmdlIGNhbGxiYWNrXG4gKiBAcGFyYW0ge1N0cmVhbX0gW2FyZ3Muc3RkaW5dIFRoZSBSZWFkYWJsZSBzdHJlYW0gdG8gbGlzdGVuIHRvXG4gKiBAcGFyYW0ge1N0cmVhbX0gW2FyZ3Muc3Rkb3V0XSBUaGUgV3JpdGFibGUgc3RyZWFtIHRvIHdyaXRlIHJlYWRsaW5lIGRhdGEgdG9cbiAqIEByZXR1cm5zIHtQcm9taXNlfSBQcm9taXNlIHdpdGggdXNlciBpbnB1dFxuICovXG5cblxuJC5hdXRvY29tcGxldGUgPSBhcmdzID0+IHtcbiAgYXJncy5zdWdnZXN0ID0gYXJncy5zdWdnZXN0IHx8IGJ5VGl0bGU7XG4gIGFyZ3MuY2hvaWNlcyA9IFtdLmNvbmNhdChhcmdzLmNob2ljZXMgfHwgW10pO1xuICByZXR1cm4gdG9Qcm9tcHQoJ0F1dG9jb21wbGV0ZVByb21wdCcsIGFyZ3MpO1xufTsiLCIndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHsgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyB9IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIobywgYWxsb3dBcnJheUxpa2UpIHsgdmFyIGl0ID0gdHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl0gfHwgb1tcIkBAaXRlcmF0b3JcIl07IGlmICghaXQpIHsgaWYgKEFycmF5LmlzQXJyYXkobykgfHwgKGl0ID0gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8pKSB8fCBhbGxvd0FycmF5TGlrZSAmJiBvICYmIHR5cGVvZiBvLmxlbmd0aCA9PT0gXCJudW1iZXJcIikgeyBpZiAoaXQpIG8gPSBpdDsgdmFyIGkgPSAwOyB2YXIgRiA9IGZ1bmN0aW9uIEYoKSB7fTsgcmV0dXJuIHsgczogRiwgbjogZnVuY3Rpb24gbigpIHsgaWYgKGkgPj0gby5sZW5ndGgpIHJldHVybiB7IGRvbmU6IHRydWUgfTsgcmV0dXJuIHsgZG9uZTogZmFsc2UsIHZhbHVlOiBvW2krK10gfTsgfSwgZTogZnVuY3Rpb24gZShfZSkgeyB0aHJvdyBfZTsgfSwgZjogRiB9OyB9IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfSB2YXIgbm9ybWFsQ29tcGxldGlvbiA9IHRydWUsIGRpZEVyciA9IGZhbHNlLCBlcnI7IHJldHVybiB7IHM6IGZ1bmN0aW9uIHMoKSB7IGl0ID0gaXQuY2FsbChvKTsgfSwgbjogZnVuY3Rpb24gbigpIHsgdmFyIHN0ZXAgPSBpdC5uZXh0KCk7IG5vcm1hbENvbXBsZXRpb24gPSBzdGVwLmRvbmU7IHJldHVybiBzdGVwOyB9LCBlOiBmdW5jdGlvbiBlKF9lMikgeyBkaWRFcnIgPSB0cnVlOyBlcnIgPSBfZTI7IH0sIGY6IGZ1bmN0aW9uIGYoKSB7IHRyeSB7IGlmICghbm9ybWFsQ29tcGxldGlvbiAmJiBpdC5yZXR1cm4gIT0gbnVsbCkgaXQucmV0dXJuKCk7IH0gZmluYWxseSB7IGlmIChkaWRFcnIpIHRocm93IGVycjsgfSB9IH07IH1cblxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikgeyBpZiAoIW8pIHJldHVybjsgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpOyBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lOyBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTsgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB9XG5cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7IGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoOyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIGFycjJbaV0gPSBhcnJbaV07IHJldHVybiBhcnIyOyB9XG5cbmZ1bmN0aW9uIGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywga2V5LCBhcmcpIHsgdHJ5IHsgdmFyIGluZm8gPSBnZW5ba2V5XShhcmcpOyB2YXIgdmFsdWUgPSBpbmZvLnZhbHVlOyB9IGNhdGNoIChlcnJvcikgeyByZWplY3QoZXJyb3IpOyByZXR1cm47IH0gaWYgKGluZm8uZG9uZSkgeyByZXNvbHZlKHZhbHVlKTsgfSBlbHNlIHsgUHJvbWlzZS5yZXNvbHZlKHZhbHVlKS50aGVuKF9uZXh0LCBfdGhyb3cpOyB9IH1cblxuZnVuY3Rpb24gX2FzeW5jVG9HZW5lcmF0b3IoZm4pIHsgcmV0dXJuIGZ1bmN0aW9uICgpIHsgdmFyIHNlbGYgPSB0aGlzLCBhcmdzID0gYXJndW1lbnRzOyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2YXIgZ2VuID0gZm4uYXBwbHkoc2VsZiwgYXJncyk7IGZ1bmN0aW9uIF9uZXh0KHZhbHVlKSB7IGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJuZXh0XCIsIHZhbHVlKTsgfSBmdW5jdGlvbiBfdGhyb3coZXJyKSB7IGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJ0aHJvd1wiLCBlcnIpOyB9IF9uZXh0KHVuZGVmaW5lZCk7IH0pOyB9OyB9XG5cbmNvbnN0IHByb21wdHMgPSByZXF1aXJlKCcuL3Byb21wdHMnKTtcblxuY29uc3QgcGFzc09uID0gWydzdWdnZXN0JywgJ2Zvcm1hdCcsICdvblN0YXRlJywgJ3ZhbGlkYXRlJywgJ29uUmVuZGVyJywgJ3R5cGUnXTtcblxuY29uc3Qgbm9vcCA9ICgpID0+IHt9O1xuLyoqXG4gKiBQcm9tcHQgZm9yIGEgc2VyaWVzIG9mIHF1ZXN0aW9uc1xuICogQHBhcmFtIHtBcnJheXxPYmplY3R9IHF1ZXN0aW9ucyBTaW5nbGUgcXVlc3Rpb24gb2JqZWN0IG9yIEFycmF5IG9mIHF1ZXN0aW9uIG9iamVjdHNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtvblN1Ym1pdF0gQ2FsbGJhY2sgZnVuY3Rpb24gY2FsbGVkIG9uIHByb21wdCBzdWJtaXRcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtvbkNhbmNlbF0gQ2FsbGJhY2sgZnVuY3Rpb24gY2FsbGVkIG9uIGNhbmNlbC9hYm9ydFxuICogQHJldHVybnMge09iamVjdH0gT2JqZWN0IHdpdGggdmFsdWVzIGZyb20gdXNlciBpbnB1dFxuICovXG5cblxuZnVuY3Rpb24gcHJvbXB0KCkge1xuICByZXR1cm4gX3Byb21wdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufVxuXG5mdW5jdGlvbiBfcHJvbXB0KCkge1xuICBfcHJvbXB0ID0gX2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qIChxdWVzdGlvbnMgPSBbXSwge1xuICAgIG9uU3VibWl0ID0gbm9vcCxcbiAgICBvbkNhbmNlbCA9IG5vb3BcbiAgfSA9IHt9KSB7XG4gICAgY29uc3QgYW5zd2VycyA9IHt9O1xuICAgIGNvbnN0IG92ZXJyaWRlID0gcHJvbXB0Ll9vdmVycmlkZSB8fCB7fTtcbiAgICBxdWVzdGlvbnMgPSBbXS5jb25jYXQocXVlc3Rpb25zKTtcbiAgICBsZXQgYW5zd2VyLCBxdWVzdGlvbiwgcXVpdCwgbmFtZSwgdHlwZSwgbGFzdFByb21wdDtcblxuICAgIGNvbnN0IGdldEZvcm1hdHRlZEFuc3dlciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgX3JlZiA9IF9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKiAocXVlc3Rpb24sIGFuc3dlciwgc2tpcFZhbGlkYXRpb24gPSBmYWxzZSkge1xuICAgICAgICBpZiAoIXNraXBWYWxpZGF0aW9uICYmIHF1ZXN0aW9uLnZhbGlkYXRlICYmIHF1ZXN0aW9uLnZhbGlkYXRlKGFuc3dlcikgIT09IHRydWUpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcXVlc3Rpb24uZm9ybWF0ID8geWllbGQgcXVlc3Rpb24uZm9ybWF0KGFuc3dlciwgYW5zd2VycykgOiBhbnN3ZXI7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGZ1bmN0aW9uIGdldEZvcm1hdHRlZEFuc3dlcihfeCwgX3gyKSB7XG4gICAgICAgIHJldHVybiBfcmVmLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB9O1xuICAgIH0oKTtcblxuICAgIHZhciBfaXRlcmF0b3IgPSBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlcihxdWVzdGlvbnMpLFxuICAgICAgICBfc3RlcDtcblxuICAgIHRyeSB7XG4gICAgICBmb3IgKF9pdGVyYXRvci5zKCk7ICEoX3N0ZXAgPSBfaXRlcmF0b3IubigpKS5kb25lOykge1xuICAgICAgICBxdWVzdGlvbiA9IF9zdGVwLnZhbHVlO1xuICAgICAgICB2YXIgX3F1ZXN0aW9uID0gcXVlc3Rpb247XG4gICAgICAgIG5hbWUgPSBfcXVlc3Rpb24ubmFtZTtcbiAgICAgICAgdHlwZSA9IF9xdWVzdGlvbi50eXBlO1xuXG4gICAgICAgIC8vIGV2YWx1YXRlIHR5cGUgZmlyc3QgYW5kIHNraXAgaWYgdHlwZSBpcyBhIGZhbHN5IHZhbHVlXG4gICAgICAgIGlmICh0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHR5cGUgPSB5aWVsZCB0eXBlKGFuc3dlciwgX29iamVjdFNwcmVhZCh7fSwgYW5zd2VycyksIHF1ZXN0aW9uKTtcbiAgICAgICAgICBxdWVzdGlvblsndHlwZSddID0gdHlwZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdHlwZSkgY29udGludWU7IC8vIGlmIHByb3BlcnR5IGlzIGEgZnVuY3Rpb24sIGludm9rZSBpdCB1bmxlc3MgaXQncyBhIHNwZWNpYWwgZnVuY3Rpb25cblxuICAgICAgICBmb3IgKGxldCBrZXkgaW4gcXVlc3Rpb24pIHtcbiAgICAgICAgICBpZiAocGFzc09uLmluY2x1ZGVzKGtleSkpIGNvbnRpbnVlO1xuICAgICAgICAgIGxldCB2YWx1ZSA9IHF1ZXN0aW9uW2tleV07XG4gICAgICAgICAgcXVlc3Rpb25ba2V5XSA9IHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyA/IHlpZWxkIHZhbHVlKGFuc3dlciwgX29iamVjdFNwcmVhZCh7fSwgYW5zd2VycyksIGxhc3RQcm9tcHQpIDogdmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICBsYXN0UHJvbXB0ID0gcXVlc3Rpb247XG5cbiAgICAgICAgaWYgKHR5cGVvZiBxdWVzdGlvbi5tZXNzYWdlICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcigncHJvbXB0IG1lc3NhZ2UgaXMgcmVxdWlyZWQnKTtcbiAgICAgICAgfSAvLyB1cGRhdGUgdmFycyBpbiBjYXNlIHRoZXkgY2hhbmdlZFxuXG5cbiAgICAgICAgdmFyIF9xdWVzdGlvbjIgPSBxdWVzdGlvbjtcbiAgICAgICAgbmFtZSA9IF9xdWVzdGlvbjIubmFtZTtcbiAgICAgICAgdHlwZSA9IF9xdWVzdGlvbjIudHlwZTtcblxuICAgICAgICBpZiAocHJvbXB0c1t0eXBlXSA9PT0gdm9pZCAwKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBwcm9tcHQgdHlwZSAoJHt0eXBlfSkgaXMgbm90IGRlZmluZWRgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvdmVycmlkZVtxdWVzdGlvbi5uYW1lXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgYW5zd2VyID0geWllbGQgZ2V0Rm9ybWF0dGVkQW5zd2VyKHF1ZXN0aW9uLCBvdmVycmlkZVtxdWVzdGlvbi5uYW1lXSk7XG5cbiAgICAgICAgICBpZiAoYW5zd2VyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGFuc3dlcnNbbmFtZV0gPSBhbnN3ZXI7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIEdldCB0aGUgaW5qZWN0ZWQgYW5zd2VyIGlmIHRoZXJlIGlzIG9uZSBvciBwcm9tcHQgdGhlIHVzZXJcbiAgICAgICAgICBhbnN3ZXIgPSBwcm9tcHQuX2luamVjdGVkID8gZ2V0SW5qZWN0ZWRBbnN3ZXIocHJvbXB0Ll9pbmplY3RlZCwgcXVlc3Rpb24uaW5pdGlhbCkgOiB5aWVsZCBwcm9tcHRzW3R5cGVdKHF1ZXN0aW9uKTtcbiAgICAgICAgICBhbnN3ZXJzW25hbWVdID0gYW5zd2VyID0geWllbGQgZ2V0Rm9ybWF0dGVkQW5zd2VyKHF1ZXN0aW9uLCBhbnN3ZXIsIHRydWUpO1xuICAgICAgICAgIHF1aXQgPSB5aWVsZCBvblN1Ym1pdChxdWVzdGlvbiwgYW5zd2VyLCBhbnN3ZXJzKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgcXVpdCA9ICEoeWllbGQgb25DYW5jZWwocXVlc3Rpb24sIGFuc3dlcnMpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChxdWl0KSByZXR1cm4gYW5zd2VycztcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIF9pdGVyYXRvci5lKGVycik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIF9pdGVyYXRvci5mKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFuc3dlcnM7XG4gIH0pO1xuICByZXR1cm4gX3Byb21wdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufVxuXG5mdW5jdGlvbiBnZXRJbmplY3RlZEFuc3dlcihpbmplY3RlZCwgZGVhZnVsdFZhbHVlKSB7XG4gIGNvbnN0IGFuc3dlciA9IGluamVjdGVkLnNoaWZ0KCk7XG5cbiAgaWYgKGFuc3dlciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgdGhyb3cgYW5zd2VyO1xuICB9XG5cbiAgcmV0dXJuIGFuc3dlciA9PT0gdW5kZWZpbmVkID8gZGVhZnVsdFZhbHVlIDogYW5zd2VyO1xufVxuXG5mdW5jdGlvbiBpbmplY3QoYW5zd2Vycykge1xuICBwcm9tcHQuX2luamVjdGVkID0gKHByb21wdC5faW5qZWN0ZWQgfHwgW10pLmNvbmNhdChhbnN3ZXJzKTtcbn1cblxuZnVuY3Rpb24gb3ZlcnJpZGUoYW5zd2Vycykge1xuICBwcm9tcHQuX292ZXJyaWRlID0gT2JqZWN0LmFzc2lnbih7fSwgYW5zd2Vycyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmFzc2lnbihwcm9tcHQsIHtcbiAgcHJvbXB0LFxuICBwcm9tcHRzLFxuICBpbmplY3QsXG4gIG92ZXJyaWRlXG59KTsiLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gKGtleSwgaXNTZWxlY3QpID0+IHtcbiAgaWYgKGtleS5tZXRhICYmIGtleS5uYW1lICE9PSAnZXNjYXBlJykgcmV0dXJuO1xuICBcbiAgaWYgKGtleS5jdHJsKSB7XG4gICAgaWYgKGtleS5uYW1lID09PSAnYScpIHJldHVybiAnZmlyc3QnO1xuICAgIGlmIChrZXkubmFtZSA9PT0gJ2MnKSByZXR1cm4gJ2Fib3J0JztcbiAgICBpZiAoa2V5Lm5hbWUgPT09ICdkJykgcmV0dXJuICdhYm9ydCc7XG4gICAgaWYgKGtleS5uYW1lID09PSAnZScpIHJldHVybiAnbGFzdCc7XG4gICAgaWYgKGtleS5uYW1lID09PSAnZycpIHJldHVybiAncmVzZXQnO1xuICB9XG4gIFxuICBpZiAoaXNTZWxlY3QpIHtcbiAgICBpZiAoa2V5Lm5hbWUgPT09ICdqJykgcmV0dXJuICdkb3duJztcbiAgICBpZiAoa2V5Lm5hbWUgPT09ICdrJykgcmV0dXJuICd1cCc7XG4gIH1cblxuICBpZiAoa2V5Lm5hbWUgPT09ICdyZXR1cm4nKSByZXR1cm4gJ3N1Ym1pdCc7XG4gIGlmIChrZXkubmFtZSA9PT0gJ2VudGVyJykgcmV0dXJuICdzdWJtaXQnOyAvLyBjdHJsICsgSlxuICBpZiAoa2V5Lm5hbWUgPT09ICdiYWNrc3BhY2UnKSByZXR1cm4gJ2RlbGV0ZSc7XG4gIGlmIChrZXkubmFtZSA9PT0gJ2RlbGV0ZScpIHJldHVybiAnZGVsZXRlRm9yd2FyZCc7XG4gIGlmIChrZXkubmFtZSA9PT0gJ2Fib3J0JykgcmV0dXJuICdhYm9ydCc7XG4gIGlmIChrZXkubmFtZSA9PT0gJ2VzY2FwZScpIHJldHVybiAnZXhpdCc7XG4gIGlmIChrZXkubmFtZSA9PT0gJ3RhYicpIHJldHVybiAnbmV4dCc7XG4gIGlmIChrZXkubmFtZSA9PT0gJ3BhZ2Vkb3duJykgcmV0dXJuICduZXh0UGFnZSc7XG4gIGlmIChrZXkubmFtZSA9PT0gJ3BhZ2V1cCcpIHJldHVybiAncHJldlBhZ2UnO1xuICAvLyBUT0RPIGNyZWF0ZSBob21lKCkgaW4gcHJvbXB0IHR5cGVzIChlLmcuIFRleHRQcm9tcHQpXG4gIGlmIChrZXkubmFtZSA9PT0gJ2hvbWUnKSByZXR1cm4gJ2hvbWUnO1xuICAvLyBUT0RPIGNyZWF0ZSBlbmQoKSBpbiBwcm9tcHQgdHlwZXMgKGUuZy4gVGV4dFByb21wdClcbiAgaWYgKGtleS5uYW1lID09PSAnZW5kJykgcmV0dXJuICdlbmQnO1xuXG4gIGlmIChrZXkubmFtZSA9PT0gJ3VwJykgcmV0dXJuICd1cCc7XG4gIGlmIChrZXkubmFtZSA9PT0gJ2Rvd24nKSByZXR1cm4gJ2Rvd24nO1xuICBpZiAoa2V5Lm5hbWUgPT09ICdyaWdodCcpIHJldHVybiAncmlnaHQnO1xuICBpZiAoa2V5Lm5hbWUgPT09ICdsZWZ0JykgcmV0dXJuICdsZWZ0JztcblxuICByZXR1cm4gZmFsc2U7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHN0ciA9PiB7XG4gIGNvbnN0IHBhdHRlcm4gPSBbXG4gICAgJ1tcXFxcdTAwMUJcXFxcdTAwOUJdW1tcXFxcXSgpIzs/XSooPzooPzooPzooPzo7Wy1hLXpBLVpcXFxcZFxcXFwvIyYuOj0/JUB+X10rKSp8W2EtekEtWlxcXFxkXSsoPzo7Wy1hLXpBLVpcXFxcZFxcXFwvIyYuOj0/JUB+X10qKSopP1xcXFx1MDAwNyknLFxuICAgICcoPzooPzpcXFxcZHsxLDR9KD86O1xcXFxkezAsNH0pKik/W1xcXFxkQS1QUlpjZi1udHFyeT0+PH5dKSknXG4gIF0uam9pbignfCcpO1xuXG4gIGNvbnN0IFJHWCA9IG5ldyBSZWdFeHAocGF0dGVybiwgJ2cnKTtcbiAgcmV0dXJuIHR5cGVvZiBzdHIgPT09ICdzdHJpbmcnID8gc3RyLnJlcGxhY2UoUkdYLCAnJykgOiBzdHI7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBzdHJpcCA9IHJlcXVpcmUoJy4vc3RyaXAnKTtcbmNvbnN0IHsgZXJhc2UsIGN1cnNvciB9ID0gcmVxdWlyZSgnc2lzdGVyYW5zaScpO1xuXG5jb25zdCB3aWR0aCA9IHN0ciA9PiBbLi4uc3RyaXAoc3RyKV0ubGVuZ3RoO1xuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9tcHRcbiAqIEBwYXJhbSB7bnVtYmVyfSBwZXJMaW5lXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ocHJvbXB0LCBwZXJMaW5lKSB7XG4gIGlmICghcGVyTGluZSkgcmV0dXJuIGVyYXNlLmxpbmUgKyBjdXJzb3IudG8oMCk7XG5cbiAgbGV0IHJvd3MgPSAwO1xuICBjb25zdCBsaW5lcyA9IHByb21wdC5zcGxpdCgvXFxyP1xcbi8pO1xuICBmb3IgKGxldCBsaW5lIG9mIGxpbmVzKSB7XG4gICAgcm93cyArPSAxICsgTWF0aC5mbG9vcihNYXRoLm1heCh3aWR0aChsaW5lKSAtIDEsIDApIC8gcGVyTGluZSk7XG4gIH1cblxuICByZXR1cm4gZXJhc2UubGluZXMocm93cyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1x0XG5cbiBjb25zdCBtYWluID0ge1xuICBhcnJvd1VwOiAn4oaRJyxcbiAgYXJyb3dEb3duOiAn4oaTJyxcbiAgYXJyb3dMZWZ0OiAn4oaQJyxcbiAgYXJyb3dSaWdodDogJ+KGkicsXG4gIHJhZGlvT246ICfil4knLFxuICByYWRpb09mZjogJ+KXrycsXG4gIHRpY2s6ICfinJQnLFx0XG4gIGNyb3NzOiAn4pyWJyxcdFxuICBlbGxpcHNpczogJ+KApicsXHRcbiAgcG9pbnRlclNtYWxsOiAn4oC6JyxcdFxuICBsaW5lOiAn4pSAJyxcdFxuICBwb2ludGVyOiAn4p2vJ1x0XG59O1x0XG5jb25zdCB3aW4gPSB7XG4gIGFycm93VXA6IG1haW4uYXJyb3dVcCxcbiAgYXJyb3dEb3duOiBtYWluLmFycm93RG93bixcbiAgYXJyb3dMZWZ0OiBtYWluLmFycm93TGVmdCxcbiAgYXJyb3dSaWdodDogbWFpbi5hcnJvd1JpZ2h0LFxuICByYWRpb09uOiAnKCopJyxcbiAgcmFkaW9PZmY6ICcoICknLFx0XG4gIHRpY2s6ICfiiJonLFx0XG4gIGNyb3NzOiAnw5cnLFx0XG4gIGVsbGlwc2lzOiAnLi4uJyxcdFxuICBwb2ludGVyU21hbGw6ICfCuycsXHRcbiAgbGluZTogJ+KUgCcsXHRcbiAgcG9pbnRlcjogJz4nXHRcbn07XHRcbmNvbnN0IGZpZ3VyZXMgPSBwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInID8gd2luIDogbWFpbjtcdFxuXG4gbW9kdWxlLmV4cG9ydHMgPSBmaWd1cmVzO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBjID0gcmVxdWlyZSgna2xldXInKTtcbmNvbnN0IGZpZ3VyZXMgPSByZXF1aXJlKCcuL2ZpZ3VyZXMnKTtcblxuLy8gcmVuZGVyaW5nIHVzZXIgaW5wdXQuXG5jb25zdCBzdHlsZXMgPSBPYmplY3QuZnJlZXplKHtcbiAgcGFzc3dvcmQ6IHsgc2NhbGU6IDEsIHJlbmRlcjogaW5wdXQgPT4gJyonLnJlcGVhdChpbnB1dC5sZW5ndGgpIH0sXG4gIGVtb2ppOiB7IHNjYWxlOiAyLCByZW5kZXI6IGlucHV0ID0+ICfwn5iDJy5yZXBlYXQoaW5wdXQubGVuZ3RoKSB9LFxuICBpbnZpc2libGU6IHsgc2NhbGU6IDAsIHJlbmRlcjogaW5wdXQgPT4gJycgfSxcbiAgZGVmYXVsdDogeyBzY2FsZTogMSwgcmVuZGVyOiBpbnB1dCA9PiBgJHtpbnB1dH1gIH1cbn0pO1xuY29uc3QgcmVuZGVyID0gdHlwZSA9PiBzdHlsZXNbdHlwZV0gfHwgc3R5bGVzLmRlZmF1bHQ7XG5cbi8vIGljb24gdG8gc2lnbmFsaXplIGEgcHJvbXB0LlxuY29uc3Qgc3ltYm9scyA9IE9iamVjdC5mcmVlemUoe1xuICBhYm9ydGVkOiBjLnJlZChmaWd1cmVzLmNyb3NzKSxcbiAgZG9uZTogYy5ncmVlbihmaWd1cmVzLnRpY2spLFxuICBleGl0ZWQ6IGMueWVsbG93KGZpZ3VyZXMuY3Jvc3MpLFxuICBkZWZhdWx0OiBjLmN5YW4oJz8nKVxufSk7XG5cbmNvbnN0IHN5bWJvbCA9IChkb25lLCBhYm9ydGVkLCBleGl0ZWQpID0+XG4gIGFib3J0ZWQgPyBzeW1ib2xzLmFib3J0ZWQgOiBleGl0ZWQgPyBzeW1ib2xzLmV4aXRlZCA6IGRvbmUgPyBzeW1ib2xzLmRvbmUgOiBzeW1ib2xzLmRlZmF1bHQ7XG5cbi8vIGJldHdlZW4gdGhlIHF1ZXN0aW9uIGFuZCB0aGUgdXNlcidzIGlucHV0LlxuY29uc3QgZGVsaW1pdGVyID0gY29tcGxldGluZyA9PlxuICBjLmdyYXkoY29tcGxldGluZyA/IGZpZ3VyZXMuZWxsaXBzaXMgOiBmaWd1cmVzLnBvaW50ZXJTbWFsbCk7XG5cbmNvbnN0IGl0ZW0gPSAoZXhwYW5kYWJsZSwgZXhwYW5kZWQpID0+XG4gIGMuZ3JheShleHBhbmRhYmxlID8gKGV4cGFuZGVkID8gZmlndXJlcy5wb2ludGVyU21hbGwgOiAnKycpIDogZmlndXJlcy5saW5lKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHN0eWxlcyxcbiAgcmVuZGVyLFxuICBzeW1ib2xzLFxuICBzeW1ib2wsXG4gIGRlbGltaXRlcixcbiAgaXRlbVxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuY29uc3Qgc3RyaXAgPSByZXF1aXJlKCcuL3N0cmlwJyk7XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IG1zZ1xuICogQHBhcmFtIHtudW1iZXJ9IHBlckxpbmVcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobXNnLCBwZXJMaW5lKSB7XG4gIGxldCBsaW5lcyA9IFN0cmluZyhzdHJpcChtc2cpIHx8ICcnKS5zcGxpdCgvXFxyP1xcbi8pO1xuXG4gIGlmICghcGVyTGluZSkgcmV0dXJuIGxpbmVzLmxlbmd0aDtcbiAgcmV0dXJuIGxpbmVzLm1hcChsID0+IE1hdGguY2VpbChsLmxlbmd0aCAvIHBlckxpbmUpKVxuICAgICAgLnJlZHVjZSgoYSwgYikgPT4gYSArIGIpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gbXNnIFRoZSBtZXNzYWdlIHRvIHdyYXBcbiAqIEBwYXJhbSB7b2JqZWN0fSBvcHRzXG4gKiBAcGFyYW0ge251bWJlcnxzdHJpbmd9IFtvcHRzLm1hcmdpbl0gTGVmdCBtYXJnaW5cbiAqIEBwYXJhbSB7bnVtYmVyfSBvcHRzLndpZHRoIE1heGltdW0gY2hhcmFjdGVycyBwZXIgbGluZSBpbmNsdWRpbmcgdGhlIG1hcmdpblxuICovXG5tb2R1bGUuZXhwb3J0cyA9IChtc2csIG9wdHMgPSB7fSkgPT4ge1xuICBjb25zdCB0YWIgPSBOdW1iZXIuaXNTYWZlSW50ZWdlcihwYXJzZUludChvcHRzLm1hcmdpbikpXG4gICAgPyBuZXcgQXJyYXkocGFyc2VJbnQob3B0cy5tYXJnaW4pKS5maWxsKCcgJykuam9pbignJylcbiAgICA6IChvcHRzLm1hcmdpbiB8fCAnJyk7XG5cbiAgY29uc3Qgd2lkdGggPSBvcHRzLndpZHRoO1xuXG4gIHJldHVybiAobXNnIHx8ICcnKS5zcGxpdCgvXFxyP1xcbi9nKVxuICAgIC5tYXAobGluZSA9PiBsaW5lXG4gICAgICAuc3BsaXQoL1xccysvZylcbiAgICAgIC5yZWR1Y2UoKGFyciwgdykgPT4ge1xuICAgICAgICBpZiAody5sZW5ndGggKyB0YWIubGVuZ3RoID49IHdpZHRoIHx8IGFyclthcnIubGVuZ3RoIC0gMV0ubGVuZ3RoICsgdy5sZW5ndGggKyAxIDwgd2lkdGgpXG4gICAgICAgICAgYXJyW2Fyci5sZW5ndGggLSAxXSArPSBgICR7d31gO1xuICAgICAgICBlbHNlIGFyci5wdXNoKGAke3RhYn0ke3d9YCk7XG4gICAgICAgIHJldHVybiBhcnI7XG4gICAgICB9LCBbIHRhYiBdKVxuICAgICAgLmpvaW4oJ1xcbicpKVxuICAgIC5qb2luKCdcXG4nKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogRGV0ZXJtaW5lIHdoYXQgZW50cmllcyBzaG91bGQgYmUgZGlzcGxheWVkIG9uIHRoZSBzY3JlZW4sIGJhc2VkIG9uIHRoZVxuICogY3VycmVudGx5IHNlbGVjdGVkIGluZGV4IGFuZCB0aGUgbWF4aW11bSB2aXNpYmxlLiBVc2VkIGluIGxpc3QtYmFzZWRcbiAqIHByb21wdHMgbGlrZSBgc2VsZWN0YCBhbmQgYG11bHRpc2VsZWN0YC5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gY3Vyc29yIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgZW50cnlcbiAqIEBwYXJhbSB7bnVtYmVyfSB0b3RhbCB0aGUgdG90YWwgZW50cmllcyBhdmFpbGFibGUgdG8gZGlzcGxheVxuICogQHBhcmFtIHtudW1iZXJ9IFttYXhWaXNpYmxlXSB0aGUgbnVtYmVyIG9mIGVudHJpZXMgdGhhdCBjYW4gYmUgZGlzcGxheWVkXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gKGN1cnNvciwgdG90YWwsIG1heFZpc2libGUpICA9PiB7XG4gIG1heFZpc2libGUgPSBtYXhWaXNpYmxlIHx8IHRvdGFsO1xuXG4gIGxldCBzdGFydEluZGV4ID0gTWF0aC5taW4odG90YWwtIG1heFZpc2libGUsIGN1cnNvciAtIE1hdGguZmxvb3IobWF4VmlzaWJsZSAvIDIpKTtcbiAgaWYgKHN0YXJ0SW5kZXggPCAwKSBzdGFydEluZGV4ID0gMDtcblxuICBsZXQgZW5kSW5kZXggPSBNYXRoLm1pbihzdGFydEluZGV4ICsgbWF4VmlzaWJsZSwgdG90YWwpO1xuXG4gIHJldHVybiB7IHN0YXJ0SW5kZXgsIGVuZEluZGV4IH07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgYWN0aW9uOiByZXF1aXJlKCcuL2FjdGlvbicpLFxuICBjbGVhcjogcmVxdWlyZSgnLi9jbGVhcicpLFxuICBzdHlsZTogcmVxdWlyZSgnLi9zdHlsZScpLFxuICBzdHJpcDogcmVxdWlyZSgnLi9zdHJpcCcpLFxuICBmaWd1cmVzOiByZXF1aXJlKCcuL2ZpZ3VyZXMnKSxcbiAgbGluZXM6IHJlcXVpcmUoJy4vbGluZXMnKSxcbiAgd3JhcDogcmVxdWlyZSgnLi93cmFwJyksXG4gIGVudHJpZXNUb0Rpc3BsYXk6IHJlcXVpcmUoJy4vZW50cmllc1RvRGlzcGxheScpXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCByZWFkbGluZSA9IHJlcXVpcmUoJ3JlYWRsaW5lJyk7XG5jb25zdCB7IGFjdGlvbiB9ID0gcmVxdWlyZSgnLi4vdXRpbCcpO1xuY29uc3QgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRzJyk7XG5jb25zdCB7IGJlZXAsIGN1cnNvciB9ID0gcmVxdWlyZSgnc2lzdGVyYW5zaScpO1xuY29uc3QgY29sb3IgPSByZXF1aXJlKCdrbGV1cicpO1xuXG4vKipcbiAqIEJhc2UgcHJvbXB0IHNrZWxldG9uXG4gKiBAcGFyYW0ge1N0cmVhbX0gW29wdHMuc3RkaW5dIFRoZSBSZWFkYWJsZSBzdHJlYW0gdG8gbGlzdGVuIHRvXG4gKiBAcGFyYW0ge1N0cmVhbX0gW29wdHMuc3Rkb3V0XSBUaGUgV3JpdGFibGUgc3RyZWFtIHRvIHdyaXRlIHJlYWRsaW5lIGRhdGEgdG9cbiAqL1xuY2xhc3MgUHJvbXB0IGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcbiAgY29uc3RydWN0b3Iob3B0cz17fSkge1xuICAgIHN1cGVyKCk7XG5cbiAgICB0aGlzLmZpcnN0UmVuZGVyID0gdHJ1ZTtcbiAgICB0aGlzLmluID0gb3B0cy5zdGRpbiB8fCBwcm9jZXNzLnN0ZGluO1xuICAgIHRoaXMub3V0ID0gb3B0cy5zdGRvdXQgfHwgcHJvY2Vzcy5zdGRvdXQ7XG4gICAgdGhpcy5vblJlbmRlciA9IChvcHRzLm9uUmVuZGVyIHx8ICgoKSA9PiB2b2lkIDApKS5iaW5kKHRoaXMpO1xuICAgIGNvbnN0IHJsID0gcmVhZGxpbmUuY3JlYXRlSW50ZXJmYWNlKHsgaW5wdXQ6dGhpcy5pbiwgZXNjYXBlQ29kZVRpbWVvdXQ6NTAgfSk7XG4gICAgcmVhZGxpbmUuZW1pdEtleXByZXNzRXZlbnRzKHRoaXMuaW4sIHJsKTtcblxuICAgIGlmICh0aGlzLmluLmlzVFRZKSB0aGlzLmluLnNldFJhd01vZGUodHJ1ZSk7XG4gICAgY29uc3QgaXNTZWxlY3QgPSBbICdTZWxlY3RQcm9tcHQnLCAnTXVsdGlzZWxlY3RQcm9tcHQnIF0uaW5kZXhPZih0aGlzLmNvbnN0cnVjdG9yLm5hbWUpID4gLTE7XG4gICAgY29uc3Qga2V5cHJlc3MgPSAoc3RyLCBrZXkpID0+IHtcbiAgICAgIGxldCBhID0gYWN0aW9uKGtleSwgaXNTZWxlY3QpO1xuICAgICAgaWYgKGEgPT09IGZhbHNlKSB7XG4gICAgICAgIHRoaXMuXyAmJiB0aGlzLl8oc3RyLCBrZXkpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdGhpc1thXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzW2FdKGtleSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmJlbGwoKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy5jbG9zZSA9ICgpID0+IHtcbiAgICAgIHRoaXMub3V0LndyaXRlKGN1cnNvci5zaG93KTtcbiAgICAgIHRoaXMuaW4ucmVtb3ZlTGlzdGVuZXIoJ2tleXByZXNzJywga2V5cHJlc3MpO1xuICAgICAgaWYgKHRoaXMuaW4uaXNUVFkpIHRoaXMuaW4uc2V0UmF3TW9kZShmYWxzZSk7XG4gICAgICBybC5jbG9zZSgpO1xuICAgICAgdGhpcy5lbWl0KHRoaXMuYWJvcnRlZCA/ICdhYm9ydCcgOiB0aGlzLmV4aXRlZCA/ICdleGl0JyA6ICdzdWJtaXQnLCB0aGlzLnZhbHVlKTtcbiAgICAgIHRoaXMuY2xvc2VkID0gdHJ1ZTtcbiAgICB9O1xuXG4gICAgdGhpcy5pbi5vbigna2V5cHJlc3MnLCBrZXlwcmVzcyk7XG4gIH1cblxuICBmaXJlKCkge1xuICAgIHRoaXMuZW1pdCgnc3RhdGUnLCB7XG4gICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgIGFib3J0ZWQ6ICEhdGhpcy5hYm9ydGVkLFxuICAgICAgZXhpdGVkOiAhIXRoaXMuZXhpdGVkXG4gICAgfSk7XG4gIH1cblxuICBiZWxsKCkge1xuICAgIHRoaXMub3V0LndyaXRlKGJlZXApO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIHRoaXMub25SZW5kZXIoY29sb3IpO1xuICAgIGlmICh0aGlzLmZpcnN0UmVuZGVyKSB0aGlzLmZpcnN0UmVuZGVyID0gZmFsc2U7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBQcm9tcHQ7XG4iLCJjb25zdCBjb2xvciA9IHJlcXVpcmUoJ2tsZXVyJyk7XG5jb25zdCBQcm9tcHQgPSByZXF1aXJlKCcuL3Byb21wdCcpO1xuY29uc3QgeyBlcmFzZSwgY3Vyc29yIH0gPSByZXF1aXJlKCdzaXN0ZXJhbnNpJyk7XG5jb25zdCB7IHN0eWxlLCBjbGVhciwgbGluZXMsIGZpZ3VyZXMgfSA9IHJlcXVpcmUoJy4uL3V0aWwnKTtcblxuLyoqXG4gKiBUZXh0UHJvbXB0IEJhc2UgRWxlbWVudFxuICogQHBhcmFtIHtPYmplY3R9IG9wdHMgT3B0aW9uc1xuICogQHBhcmFtIHtTdHJpbmd9IG9wdHMubWVzc2FnZSBNZXNzYWdlXG4gKiBAcGFyYW0ge1N0cmluZ30gW29wdHMuc3R5bGU9J2RlZmF1bHQnXSBSZW5kZXIgc3R5bGVcbiAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5pbml0aWFsXSBEZWZhdWx0IHZhbHVlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0cy52YWxpZGF0ZV0gVmFsaWRhdGUgZnVuY3Rpb25cbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLmVycm9yXSBUaGUgaW52YWxpZCBlcnJvciBsYWJlbFxuICovXG5jbGFzcyBUZXh0UHJvbXB0IGV4dGVuZHMgUHJvbXB0IHtcbiAgY29uc3RydWN0b3Iob3B0cz17fSkge1xuICAgIHN1cGVyKG9wdHMpO1xuICAgIHRoaXMudHJhbnNmb3JtID0gc3R5bGUucmVuZGVyKG9wdHMuc3R5bGUpO1xuICAgIHRoaXMuc2NhbGUgPSB0aGlzLnRyYW5zZm9ybS5zY2FsZTtcbiAgICB0aGlzLm1zZyA9IG9wdHMubWVzc2FnZTtcbiAgICB0aGlzLmluaXRpYWwgPSBvcHRzLmluaXRpYWwgfHwgYGA7XG4gICAgdGhpcy52YWxpZGF0b3IgPSBvcHRzLnZhbGlkYXRlIHx8ICgoKSA9PiB0cnVlKTtcbiAgICB0aGlzLnZhbHVlID0gYGA7XG4gICAgdGhpcy5lcnJvck1zZyA9IG9wdHMuZXJyb3IgfHwgYFBsZWFzZSBFbnRlciBBIFZhbGlkIFZhbHVlYDtcbiAgICB0aGlzLmN1cnNvciA9IE51bWJlcighIXRoaXMuaW5pdGlhbCk7XG4gICAgdGhpcy5jdXJzb3JPZmZzZXQgPSAwO1xuICAgIHRoaXMuY2xlYXIgPSBjbGVhcihgYCwgdGhpcy5vdXQuY29sdW1ucyk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHNldCB2YWx1ZSh2KSB7XG4gICAgaWYgKCF2ICYmIHRoaXMuaW5pdGlhbCkge1xuICAgICAgdGhpcy5wbGFjZWhvbGRlciA9IHRydWU7XG4gICAgICB0aGlzLnJlbmRlcmVkID0gY29sb3IuZ3JheSh0aGlzLnRyYW5zZm9ybS5yZW5kZXIodGhpcy5pbml0aWFsKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucGxhY2Vob2xkZXIgPSBmYWxzZTtcbiAgICAgIHRoaXMucmVuZGVyZWQgPSB0aGlzLnRyYW5zZm9ybS5yZW5kZXIodik7XG4gICAgfVxuICAgIHRoaXMuX3ZhbHVlID0gdjtcbiAgICB0aGlzLmZpcmUoKTtcbiAgfVxuXG4gIGdldCB2YWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gIH1cblxuICByZXNldCgpIHtcbiAgICB0aGlzLnZhbHVlID0gYGA7XG4gICAgdGhpcy5jdXJzb3IgPSBOdW1iZXIoISF0aGlzLmluaXRpYWwpO1xuICAgIHRoaXMuY3Vyc29yT2Zmc2V0ID0gMDtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZXhpdCgpIHtcbiAgICB0aGlzLmFib3J0KCk7XG4gIH1cblxuICBhYm9ydCgpIHtcbiAgICB0aGlzLnZhbHVlID0gdGhpcy52YWx1ZSB8fCB0aGlzLmluaXRpYWw7XG4gICAgdGhpcy5kb25lID0gdGhpcy5hYm9ydGVkID0gdHJ1ZTtcbiAgICB0aGlzLmVycm9yID0gZmFsc2U7XG4gICAgdGhpcy5yZWQgPSBmYWxzZTtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICAgIHRoaXMub3V0LndyaXRlKCdcXG4nKTtcbiAgICB0aGlzLmNsb3NlKCk7XG4gIH1cblxuICBhc3luYyB2YWxpZGF0ZSgpIHtcbiAgICBsZXQgdmFsaWQgPSBhd2FpdCB0aGlzLnZhbGlkYXRvcih0aGlzLnZhbHVlKTtcbiAgICBpZiAodHlwZW9mIHZhbGlkID09PSBgc3RyaW5nYCkge1xuICAgICAgdGhpcy5lcnJvck1zZyA9IHZhbGlkO1xuICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5lcnJvciA9ICF2YWxpZDtcbiAgfVxuXG4gIGFzeW5jIHN1Ym1pdCgpIHtcbiAgICB0aGlzLnZhbHVlID0gdGhpcy52YWx1ZSB8fCB0aGlzLmluaXRpYWw7XG4gICAgdGhpcy5jdXJzb3JPZmZzZXQgPSAwO1xuICAgIHRoaXMuY3Vyc29yID0gdGhpcy5yZW5kZXJlZC5sZW5ndGg7XG4gICAgYXdhaXQgdGhpcy52YWxpZGF0ZSgpO1xuICAgIGlmICh0aGlzLmVycm9yKSB7XG4gICAgICB0aGlzLnJlZCA9IHRydWU7XG4gICAgICB0aGlzLmZpcmUoKTtcbiAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuZG9uZSA9IHRydWU7XG4gICAgdGhpcy5hYm9ydGVkID0gZmFsc2U7XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgICB0aGlzLm91dC53cml0ZSgnXFxuJyk7XG4gICAgdGhpcy5jbG9zZSgpO1xuICB9XG5cbiAgbmV4dCgpIHtcbiAgICBpZiAoIXRoaXMucGxhY2Vob2xkZXIpIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgICB0aGlzLnZhbHVlID0gdGhpcy5pbml0aWFsO1xuICAgIHRoaXMuY3Vyc29yID0gdGhpcy5yZW5kZXJlZC5sZW5ndGg7XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIG1vdmVDdXJzb3Iobikge1xuICAgIGlmICh0aGlzLnBsYWNlaG9sZGVyKSByZXR1cm47XG4gICAgdGhpcy5jdXJzb3IgPSB0aGlzLmN1cnNvcituO1xuICAgIHRoaXMuY3Vyc29yT2Zmc2V0ICs9IG47XG4gIH1cblxuICBfKGMsIGtleSkge1xuICAgIGxldCBzMSA9IHRoaXMudmFsdWUuc2xpY2UoMCwgdGhpcy5jdXJzb3IpO1xuICAgIGxldCBzMiA9IHRoaXMudmFsdWUuc2xpY2UodGhpcy5jdXJzb3IpO1xuICAgIHRoaXMudmFsdWUgPSBgJHtzMX0ke2N9JHtzMn1gO1xuICAgIHRoaXMucmVkID0gZmFsc2U7XG4gICAgdGhpcy5jdXJzb3IgPSB0aGlzLnBsYWNlaG9sZGVyID8gMCA6IHMxLmxlbmd0aCsxO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBkZWxldGUoKSB7XG4gICAgaWYgKHRoaXMuaXNDdXJzb3JBdFN0YXJ0KCkpIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgICBsZXQgczEgPSB0aGlzLnZhbHVlLnNsaWNlKDAsIHRoaXMuY3Vyc29yLTEpO1xuICAgIGxldCBzMiA9IHRoaXMudmFsdWUuc2xpY2UodGhpcy5jdXJzb3IpO1xuICAgIHRoaXMudmFsdWUgPSBgJHtzMX0ke3MyfWA7XG4gICAgdGhpcy5yZWQgPSBmYWxzZTtcbiAgICBpZiAodGhpcy5pc0N1cnNvckF0U3RhcnQoKSkge1xuICAgICAgdGhpcy5jdXJzb3JPZmZzZXQgPSAwXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY3Vyc29yT2Zmc2V0Kys7XG4gICAgICB0aGlzLm1vdmVDdXJzb3IoLTEpO1xuICAgIH1cbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZGVsZXRlRm9yd2FyZCgpIHtcbiAgICBpZih0aGlzLmN1cnNvcip0aGlzLnNjYWxlID49IHRoaXMucmVuZGVyZWQubGVuZ3RoIHx8IHRoaXMucGxhY2Vob2xkZXIpIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgICBsZXQgczEgPSB0aGlzLnZhbHVlLnNsaWNlKDAsIHRoaXMuY3Vyc29yKTtcbiAgICBsZXQgczIgPSB0aGlzLnZhbHVlLnNsaWNlKHRoaXMuY3Vyc29yKzEpO1xuICAgIHRoaXMudmFsdWUgPSBgJHtzMX0ke3MyfWA7XG4gICAgdGhpcy5yZWQgPSBmYWxzZTtcbiAgICBpZiAodGhpcy5pc0N1cnNvckF0RW5kKCkpIHtcbiAgICAgIHRoaXMuY3Vyc29yT2Zmc2V0ID0gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jdXJzb3JPZmZzZXQrKztcbiAgICB9XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIGZpcnN0KCkge1xuICAgIHRoaXMuY3Vyc29yID0gMDtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgbGFzdCgpIHtcbiAgICB0aGlzLmN1cnNvciA9IHRoaXMudmFsdWUubGVuZ3RoO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBsZWZ0KCkge1xuICAgIGlmICh0aGlzLmN1cnNvciA8PSAwIHx8IHRoaXMucGxhY2Vob2xkZXIpIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgICB0aGlzLm1vdmVDdXJzb3IoLTEpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICByaWdodCgpIHtcbiAgICBpZiAodGhpcy5jdXJzb3IqdGhpcy5zY2FsZSA+PSB0aGlzLnJlbmRlcmVkLmxlbmd0aCB8fCB0aGlzLnBsYWNlaG9sZGVyKSByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgdGhpcy5tb3ZlQ3Vyc29yKDEpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBpc0N1cnNvckF0U3RhcnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY3Vyc29yID09PSAwIHx8ICh0aGlzLnBsYWNlaG9sZGVyICYmIHRoaXMuY3Vyc29yID09PSAxKTtcbiAgfVxuXG4gIGlzQ3Vyc29yQXRFbmQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY3Vyc29yID09PSB0aGlzLnJlbmRlcmVkLmxlbmd0aCB8fCAodGhpcy5wbGFjZWhvbGRlciAmJiB0aGlzLmN1cnNvciA9PT0gdGhpcy5yZW5kZXJlZC5sZW5ndGggKyAxKVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGlmICh0aGlzLmNsb3NlZCkgcmV0dXJuO1xuICAgIGlmICghdGhpcy5maXJzdFJlbmRlcikge1xuICAgICAgaWYgKHRoaXMub3V0cHV0RXJyb3IpXG4gICAgICAgIHRoaXMub3V0LndyaXRlKGN1cnNvci5kb3duKGxpbmVzKHRoaXMub3V0cHV0RXJyb3IsIHRoaXMub3V0LmNvbHVtbnMpIC0gMSkgKyBjbGVhcih0aGlzLm91dHB1dEVycm9yLCB0aGlzLm91dC5jb2x1bW5zKSk7XG4gICAgICB0aGlzLm91dC53cml0ZShjbGVhcih0aGlzLm91dHB1dFRleHQsIHRoaXMub3V0LmNvbHVtbnMpKTtcbiAgICB9XG4gICAgc3VwZXIucmVuZGVyKCk7XG4gICAgdGhpcy5vdXRwdXRFcnJvciA9ICcnO1xuXG4gICAgdGhpcy5vdXRwdXRUZXh0ID0gW1xuICAgICAgc3R5bGUuc3ltYm9sKHRoaXMuZG9uZSwgdGhpcy5hYm9ydGVkKSxcbiAgICAgIGNvbG9yLmJvbGQodGhpcy5tc2cpLFxuICAgICAgc3R5bGUuZGVsaW1pdGVyKHRoaXMuZG9uZSksXG4gICAgICB0aGlzLnJlZCA/IGNvbG9yLnJlZCh0aGlzLnJlbmRlcmVkKSA6IHRoaXMucmVuZGVyZWRcbiAgICBdLmpvaW4oYCBgKTtcblxuICAgIGlmICh0aGlzLmVycm9yKSB7XG4gICAgICB0aGlzLm91dHB1dEVycm9yICs9IHRoaXMuZXJyb3JNc2cuc3BsaXQoYFxcbmApXG4gICAgICAgICAgLnJlZHVjZSgoYSwgbCwgaSkgPT4gYSArIGBcXG4ke2kgPyAnICcgOiBmaWd1cmVzLnBvaW50ZXJTbWFsbH0gJHtjb2xvci5yZWQoKS5pdGFsaWMobCl9YCwgYGApO1xuICAgIH1cblxuICAgIHRoaXMub3V0LndyaXRlKGVyYXNlLmxpbmUgKyBjdXJzb3IudG8oMCkgKyB0aGlzLm91dHB1dFRleHQgKyBjdXJzb3Iuc2F2ZSArIHRoaXMub3V0cHV0RXJyb3IgKyBjdXJzb3IucmVzdG9yZSArIGN1cnNvci5tb3ZlKHRoaXMuY3Vyc29yT2Zmc2V0LCAwKSk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBUZXh0UHJvbXB0OyIsIid1c2Ugc3RyaWN0JztcblxuY29uc3QgY29sb3IgPSByZXF1aXJlKCdrbGV1cicpO1xuY29uc3QgUHJvbXB0ID0gcmVxdWlyZSgnLi9wcm9tcHQnKTtcbmNvbnN0IHsgc3R5bGUsIGNsZWFyLCBmaWd1cmVzLCB3cmFwLCBlbnRyaWVzVG9EaXNwbGF5IH0gPSByZXF1aXJlKCcuLi91dGlsJyk7XG5jb25zdCB7IGN1cnNvciB9ID0gcmVxdWlyZSgnc2lzdGVyYW5zaScpO1xuXG4vKipcbiAqIFNlbGVjdFByb21wdCBCYXNlIEVsZW1lbnRcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIE9wdGlvbnNcbiAqIEBwYXJhbSB7U3RyaW5nfSBvcHRzLm1lc3NhZ2UgTWVzc2FnZVxuICogQHBhcmFtIHtBcnJheX0gb3B0cy5jaG9pY2VzIEFycmF5IG9mIGNob2ljZSBvYmplY3RzXG4gKiBAcGFyYW0ge1N0cmluZ30gW29wdHMuaGludF0gSGludCB0byBkaXNwbGF5XG4gKiBAcGFyYW0ge051bWJlcn0gW29wdHMuaW5pdGlhbF0gSW5kZXggb2YgZGVmYXVsdCB2YWx1ZVxuICogQHBhcmFtIHtTdHJlYW19IFtvcHRzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFtvcHRzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKiBAcGFyYW0ge051bWJlcn0gW29wdHMub3B0aW9uc1BlclBhZ2U9MTBdIE1heCBvcHRpb25zIHRvIGRpc3BsYXkgYXQgb25jZVxuICovXG5jbGFzcyBTZWxlY3RQcm9tcHQgZXh0ZW5kcyBQcm9tcHQge1xuICBjb25zdHJ1Y3RvcihvcHRzPXt9KSB7XG4gICAgc3VwZXIob3B0cyk7XG4gICAgdGhpcy5tc2cgPSBvcHRzLm1lc3NhZ2U7XG4gICAgdGhpcy5oaW50ID0gb3B0cy5oaW50IHx8ICctIFVzZSBhcnJvdy1rZXlzLiBSZXR1cm4gdG8gc3VibWl0Lic7XG4gICAgdGhpcy53YXJuID0gb3B0cy53YXJuIHx8ICctIFRoaXMgb3B0aW9uIGlzIGRpc2FibGVkJztcbiAgICB0aGlzLmN1cnNvciA9IG9wdHMuaW5pdGlhbCB8fCAwO1xuICAgIHRoaXMuY2hvaWNlcyA9IG9wdHMuY2hvaWNlcy5tYXAoKGNoLCBpZHgpID0+IHtcbiAgICAgIGlmICh0eXBlb2YgY2ggPT09ICdzdHJpbmcnKVxuICAgICAgICBjaCA9IHt0aXRsZTogY2gsIHZhbHVlOiBpZHh9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdGl0bGU6IGNoICYmIChjaC50aXRsZSB8fCBjaC52YWx1ZSB8fCBjaCksXG4gICAgICAgIHZhbHVlOiBjaCAmJiAoY2gudmFsdWUgPT09IHVuZGVmaW5lZCA/IGlkeCA6IGNoLnZhbHVlKSxcbiAgICAgICAgZGVzY3JpcHRpb246IGNoICYmIGNoLmRlc2NyaXB0aW9uLFxuICAgICAgICBzZWxlY3RlZDogY2ggJiYgY2guc2VsZWN0ZWQsXG4gICAgICAgIGRpc2FibGVkOiBjaCAmJiBjaC5kaXNhYmxlZFxuICAgICAgfTtcbiAgICB9KTtcbiAgICB0aGlzLm9wdGlvbnNQZXJQYWdlID0gb3B0cy5vcHRpb25zUGVyUGFnZSB8fCAxMDtcbiAgICB0aGlzLnZhbHVlID0gKHRoaXMuY2hvaWNlc1t0aGlzLmN1cnNvcl0gfHwge30pLnZhbHVlO1xuICAgIHRoaXMuY2xlYXIgPSBjbGVhcignJywgdGhpcy5vdXQuY29sdW1ucyk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIG1vdmVDdXJzb3Iobikge1xuICAgIHRoaXMuY3Vyc29yID0gbjtcbiAgICB0aGlzLnZhbHVlID0gdGhpcy5jaG9pY2VzW25dLnZhbHVlO1xuICAgIHRoaXMuZmlyZSgpO1xuICB9XG5cbiAgcmVzZXQoKSB7XG4gICAgdGhpcy5tb3ZlQ3Vyc29yKDApO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBleGl0KCkge1xuICAgIHRoaXMuYWJvcnQoKTtcbiAgfVxuXG4gIGFib3J0KCkge1xuICAgIHRoaXMuZG9uZSA9IHRoaXMuYWJvcnRlZCA9IHRydWU7XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgICB0aGlzLm91dC53cml0ZSgnXFxuJyk7XG4gICAgdGhpcy5jbG9zZSgpO1xuICB9XG5cbiAgc3VibWl0KCkge1xuICAgIGlmICghdGhpcy5zZWxlY3Rpb24uZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuZG9uZSA9IHRydWU7XG4gICAgICB0aGlzLmFib3J0ZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuZmlyZSgpO1xuICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICAgIHRoaXMub3V0LndyaXRlKCdcXG4nKTtcbiAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICB9IGVsc2VcbiAgICAgIHRoaXMuYmVsbCgpO1xuICB9XG5cbiAgZmlyc3QoKSB7XG4gICAgdGhpcy5tb3ZlQ3Vyc29yKDApO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBsYXN0KCkge1xuICAgIHRoaXMubW92ZUN1cnNvcih0aGlzLmNob2ljZXMubGVuZ3RoIC0gMSk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHVwKCkge1xuICAgIGlmICh0aGlzLmN1cnNvciA9PT0gMCkge1xuICAgICAgdGhpcy5tb3ZlQ3Vyc29yKHRoaXMuY2hvaWNlcy5sZW5ndGggLSAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5tb3ZlQ3Vyc29yKHRoaXMuY3Vyc29yIC0gMSk7XG4gICAgfVxuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBkb3duKCkge1xuICAgIGlmICh0aGlzLmN1cnNvciA9PT0gdGhpcy5jaG9pY2VzLmxlbmd0aCAtIDEpIHtcbiAgICAgIHRoaXMubW92ZUN1cnNvcigwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5tb3ZlQ3Vyc29yKHRoaXMuY3Vyc29yICsgMSk7XG4gICAgfVxuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBuZXh0KCkge1xuICAgIHRoaXMubW92ZUN1cnNvcigodGhpcy5jdXJzb3IgKyAxKSAlIHRoaXMuY2hvaWNlcy5sZW5ndGgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBfKGMsIGtleSkge1xuICAgIGlmIChjID09PSAnICcpIHJldHVybiB0aGlzLnN1Ym1pdCgpO1xuICB9XG5cbiAgZ2V0IHNlbGVjdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5jaG9pY2VzW3RoaXMuY3Vyc29yXTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBpZiAodGhpcy5jbG9zZWQpIHJldHVybjtcbiAgICBpZiAodGhpcy5maXJzdFJlbmRlcikgdGhpcy5vdXQud3JpdGUoY3Vyc29yLmhpZGUpO1xuICAgIGVsc2UgdGhpcy5vdXQud3JpdGUoY2xlYXIodGhpcy5vdXRwdXRUZXh0LCB0aGlzLm91dC5jb2x1bW5zKSk7XG4gICAgc3VwZXIucmVuZGVyKCk7XG5cbiAgICBsZXQgeyBzdGFydEluZGV4LCBlbmRJbmRleCB9ID0gZW50cmllc1RvRGlzcGxheSh0aGlzLmN1cnNvciwgdGhpcy5jaG9pY2VzLmxlbmd0aCwgdGhpcy5vcHRpb25zUGVyUGFnZSk7XG5cbiAgICAvLyBQcmludCBwcm9tcHRcbiAgICB0aGlzLm91dHB1dFRleHQgPSBbXG4gICAgICBzdHlsZS5zeW1ib2wodGhpcy5kb25lLCB0aGlzLmFib3J0ZWQpLFxuICAgICAgY29sb3IuYm9sZCh0aGlzLm1zZyksXG4gICAgICBzdHlsZS5kZWxpbWl0ZXIoZmFsc2UpLFxuICAgICAgdGhpcy5kb25lID8gdGhpcy5zZWxlY3Rpb24udGl0bGUgOiB0aGlzLnNlbGVjdGlvbi5kaXNhYmxlZFxuICAgICAgICAgID8gY29sb3IueWVsbG93KHRoaXMud2FybikgOiBjb2xvci5ncmF5KHRoaXMuaGludClcbiAgICBdLmpvaW4oJyAnKTtcblxuICAgIC8vIFByaW50IGNob2ljZXNcbiAgICBpZiAoIXRoaXMuZG9uZSkge1xuICAgICAgdGhpcy5vdXRwdXRUZXh0ICs9ICdcXG4nO1xuICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0SW5kZXg7IGkgPCBlbmRJbmRleDsgaSsrKSB7XG4gICAgICAgIGxldCB0aXRsZSwgcHJlZml4LCBkZXNjID0gJycsIHYgPSB0aGlzLmNob2ljZXNbaV07XG5cbiAgICAgICAgLy8gRGV0ZXJtaW5lIHdoZXRoZXIgdG8gZGlzcGxheSBcIm1vcmUgY2hvaWNlc1wiIGluZGljYXRvcnNcbiAgICAgICAgaWYgKGkgPT09IHN0YXJ0SW5kZXggJiYgc3RhcnRJbmRleCA+IDApIHtcbiAgICAgICAgICBwcmVmaXggPSBmaWd1cmVzLmFycm93VXA7XG4gICAgICAgIH0gZWxzZSBpZiAoaSA9PT0gZW5kSW5kZXggLSAxICYmIGVuZEluZGV4IDwgdGhpcy5jaG9pY2VzLmxlbmd0aCkge1xuICAgICAgICAgIHByZWZpeCA9IGZpZ3VyZXMuYXJyb3dEb3duO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByZWZpeCA9ICcgJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2LmRpc2FibGVkKSB7XG4gICAgICAgICAgdGl0bGUgPSB0aGlzLmN1cnNvciA9PT0gaSA/IGNvbG9yLmdyYXkoKS51bmRlcmxpbmUodi50aXRsZSkgOiBjb2xvci5zdHJpa2V0aHJvdWdoKCkuZ3JheSh2LnRpdGxlKTtcbiAgICAgICAgICBwcmVmaXggPSAodGhpcy5jdXJzb3IgPT09IGkgPyBjb2xvci5ib2xkKCkuZ3JheShmaWd1cmVzLnBvaW50ZXIpICsgJyAnIDogJyAgJykgKyBwcmVmaXg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGl0bGUgPSB0aGlzLmN1cnNvciA9PT0gaSA/IGNvbG9yLmN5YW4oKS51bmRlcmxpbmUodi50aXRsZSkgOiB2LnRpdGxlO1xuICAgICAgICAgIHByZWZpeCA9ICh0aGlzLmN1cnNvciA9PT0gaSA/IGNvbG9yLmN5YW4oZmlndXJlcy5wb2ludGVyKSArICcgJyA6ICcgICcpICsgcHJlZml4O1xuICAgICAgICAgIGlmICh2LmRlc2NyaXB0aW9uICYmIHRoaXMuY3Vyc29yID09PSBpKSB7XG4gICAgICAgICAgICBkZXNjID0gYCAtICR7di5kZXNjcmlwdGlvbn1gO1xuICAgICAgICAgICAgaWYgKHByZWZpeC5sZW5ndGggKyB0aXRsZS5sZW5ndGggKyBkZXNjLmxlbmd0aCA+PSB0aGlzLm91dC5jb2x1bW5zXG4gICAgICAgICAgICAgICAgfHwgdi5kZXNjcmlwdGlvbi5zcGxpdCgvXFxyP1xcbi8pLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgZGVzYyA9ICdcXG4nICsgd3JhcCh2LmRlc2NyaXB0aW9uLCB7IG1hcmdpbjogMywgd2lkdGg6IHRoaXMub3V0LmNvbHVtbnMgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5vdXRwdXRUZXh0ICs9IGAke3ByZWZpeH0gJHt0aXRsZX0ke2NvbG9yLmdyYXkoZGVzYyl9XFxuYDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLm91dC53cml0ZSh0aGlzLm91dHB1dFRleHQpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gU2VsZWN0UHJvbXB0O1xuIiwiY29uc3QgY29sb3IgPSByZXF1aXJlKCdrbGV1cicpO1xuY29uc3QgUHJvbXB0ID0gcmVxdWlyZSgnLi9wcm9tcHQnKTtcbmNvbnN0IHsgc3R5bGUsIGNsZWFyIH0gPSByZXF1aXJlKCcuLi91dGlsJyk7XG5jb25zdCB7IGN1cnNvciwgZXJhc2UgfSA9IHJlcXVpcmUoJ3Npc3RlcmFuc2knKTtcblxuLyoqXG4gKiBUb2dnbGVQcm9tcHQgQmFzZSBFbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyBPcHRpb25zXG4gKiBAcGFyYW0ge1N0cmluZ30gb3B0cy5tZXNzYWdlIE1lc3NhZ2VcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdHMuaW5pdGlhbD1mYWxzZV0gRGVmYXVsdCB2YWx1ZVxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLmFjdGl2ZT0nbm8nXSBBY3RpdmUgbGFiZWxcbiAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5pbmFjdGl2ZT0nb2ZmJ10gSW5hY3RpdmUgbGFiZWxcbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICovXG5jbGFzcyBUb2dnbGVQcm9tcHQgZXh0ZW5kcyBQcm9tcHQge1xuICBjb25zdHJ1Y3RvcihvcHRzPXt9KSB7XG4gICAgc3VwZXIob3B0cyk7XG4gICAgdGhpcy5tc2cgPSBvcHRzLm1lc3NhZ2U7XG4gICAgdGhpcy52YWx1ZSA9ICEhb3B0cy5pbml0aWFsO1xuICAgIHRoaXMuYWN0aXZlID0gb3B0cy5hY3RpdmUgfHwgJ29uJztcbiAgICB0aGlzLmluYWN0aXZlID0gb3B0cy5pbmFjdGl2ZSB8fCAnb2ZmJztcbiAgICB0aGlzLmluaXRpYWxWYWx1ZSA9IHRoaXMudmFsdWU7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHJlc2V0KCkge1xuICAgIHRoaXMudmFsdWUgPSB0aGlzLmluaXRpYWxWYWx1ZTtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZXhpdCgpIHtcbiAgICB0aGlzLmFib3J0KCk7XG4gIH1cblxuICBhYm9ydCgpIHtcbiAgICB0aGlzLmRvbmUgPSB0aGlzLmFib3J0ZWQgPSB0cnVlO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gICAgdGhpcy5vdXQud3JpdGUoJ1xcbicpO1xuICAgIHRoaXMuY2xvc2UoKTtcbiAgfVxuXG4gIHN1Ym1pdCgpIHtcbiAgICB0aGlzLmRvbmUgPSB0cnVlO1xuICAgIHRoaXMuYWJvcnRlZCA9IGZhbHNlO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gICAgdGhpcy5vdXQud3JpdGUoJ1xcbicpO1xuICAgIHRoaXMuY2xvc2UoKTtcbiAgfVxuXG4gIGRlYWN0aXZhdGUoKSB7XG4gICAgaWYgKHRoaXMudmFsdWUgPT09IGZhbHNlKSByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgdGhpcy52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBhY3RpdmF0ZSgpIHtcbiAgICBpZiAodGhpcy52YWx1ZSA9PT0gdHJ1ZSkgcmV0dXJuIHRoaXMuYmVsbCgpO1xuICAgIHRoaXMudmFsdWUgPSB0cnVlO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBkZWxldGUoKSB7XG4gICAgdGhpcy5kZWFjdGl2YXRlKCk7XG4gIH1cbiAgbGVmdCgpIHtcbiAgICB0aGlzLmRlYWN0aXZhdGUoKTtcbiAgfVxuICByaWdodCgpIHtcbiAgICB0aGlzLmFjdGl2YXRlKCk7XG4gIH1cbiAgZG93bigpIHtcbiAgICB0aGlzLmRlYWN0aXZhdGUoKTtcbiAgfVxuICB1cCgpIHtcbiAgICB0aGlzLmFjdGl2YXRlKCk7XG4gIH1cblxuICBuZXh0KCkge1xuICAgIHRoaXMudmFsdWUgPSAhdGhpcy52YWx1ZTtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgXyhjLCBrZXkpIHtcbiAgICBpZiAoYyA9PT0gJyAnKSB7XG4gICAgICB0aGlzLnZhbHVlID0gIXRoaXMudmFsdWU7XG4gICAgfSBlbHNlIGlmIChjID09PSAnMScpIHtcbiAgICAgIHRoaXMudmFsdWUgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAoYyA9PT0gJzAnKSB7XG4gICAgICB0aGlzLnZhbHVlID0gZmFsc2U7XG4gICAgfSBlbHNlIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGlmICh0aGlzLmNsb3NlZCkgcmV0dXJuO1xuICAgIGlmICh0aGlzLmZpcnN0UmVuZGVyKSB0aGlzLm91dC53cml0ZShjdXJzb3IuaGlkZSk7XG4gICAgZWxzZSB0aGlzLm91dC53cml0ZShjbGVhcih0aGlzLm91dHB1dFRleHQsIHRoaXMub3V0LmNvbHVtbnMpKTtcbiAgICBzdXBlci5yZW5kZXIoKTtcblxuICAgIHRoaXMub3V0cHV0VGV4dCA9IFtcbiAgICAgIHN0eWxlLnN5bWJvbCh0aGlzLmRvbmUsIHRoaXMuYWJvcnRlZCksXG4gICAgICBjb2xvci5ib2xkKHRoaXMubXNnKSxcbiAgICAgIHN0eWxlLmRlbGltaXRlcih0aGlzLmRvbmUpLFxuICAgICAgdGhpcy52YWx1ZSA/IHRoaXMuaW5hY3RpdmUgOiBjb2xvci5jeWFuKCkudW5kZXJsaW5lKHRoaXMuaW5hY3RpdmUpLFxuICAgICAgY29sb3IuZ3JheSgnLycpLFxuICAgICAgdGhpcy52YWx1ZSA/IGNvbG9yLmN5YW4oKS51bmRlcmxpbmUodGhpcy5hY3RpdmUpIDogdGhpcy5hY3RpdmVcbiAgICBdLmpvaW4oJyAnKTtcblxuICAgIHRoaXMub3V0LndyaXRlKGVyYXNlLmxpbmUgKyBjdXJzb3IudG8oMCkgKyB0aGlzLm91dHB1dFRleHQpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gVG9nZ2xlUHJvbXB0O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5jbGFzcyBEYXRlUGFydCB7XG4gIGNvbnN0cnVjdG9yKHt0b2tlbiwgZGF0ZSwgcGFydHMsIGxvY2FsZXN9KSB7XG4gICAgdGhpcy50b2tlbiA9IHRva2VuO1xuICAgIHRoaXMuZGF0ZSA9IGRhdGUgfHwgbmV3IERhdGUoKTtcbiAgICB0aGlzLnBhcnRzID0gcGFydHMgfHwgW3RoaXNdO1xuICAgIHRoaXMubG9jYWxlcyA9IGxvY2FsZXMgfHwge307XG4gIH1cblxuICB1cCgpIHt9XG5cbiAgZG93bigpIHt9XG5cbiAgbmV4dCgpIHtcbiAgICBjb25zdCBjdXJyZW50SWR4ID0gdGhpcy5wYXJ0cy5pbmRleE9mKHRoaXMpO1xuICAgIHJldHVybiB0aGlzLnBhcnRzLmZpbmQoKHBhcnQsIGlkeCkgPT4gaWR4ID4gY3VycmVudElkeCAmJiBwYXJ0IGluc3RhbmNlb2YgRGF0ZVBhcnQpO1xuICB9XG5cbiAgc2V0VG8odmFsKSB7fVxuXG4gIHByZXYoKSB7XG4gICAgbGV0IHBhcnRzID0gW10uY29uY2F0KHRoaXMucGFydHMpLnJldmVyc2UoKTtcbiAgICBjb25zdCBjdXJyZW50SWR4ID0gcGFydHMuaW5kZXhPZih0aGlzKTtcbiAgICByZXR1cm4gcGFydHMuZmluZCgocGFydCwgaWR4KSA9PiBpZHggPiBjdXJyZW50SWR4ICYmIHBhcnQgaW5zdGFuY2VvZiBEYXRlUGFydCk7XG4gIH1cblxuICB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gU3RyaW5nKHRoaXMuZGF0ZSk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBEYXRlUGFydDtcblxuXG4iLCIndXNlIHN0cmljdCc7XG5cbmNvbnN0IERhdGVQYXJ0ID0gcmVxdWlyZSgnLi9kYXRlcGFydCcpO1xuXG5jbGFzcyBNZXJpZGllbSBleHRlbmRzIERhdGVQYXJ0IHtcbiAgY29uc3RydWN0b3Iob3B0cz17fSkge1xuICAgIHN1cGVyKG9wdHMpO1xuICB9XG5cbiAgdXAoKSB7XG4gICAgdGhpcy5kYXRlLnNldEhvdXJzKCh0aGlzLmRhdGUuZ2V0SG91cnMoKSArIDEyKSAlIDI0KTtcbiAgfVxuXG4gIGRvd24oKSB7XG4gICAgdGhpcy51cCgpO1xuICB9XG5cbiAgdG9TdHJpbmcoKSB7XG4gICAgbGV0IG1lcmlkaWVtID0gdGhpcy5kYXRlLmdldEhvdXJzKCkgPiAxMiA/ICdwbScgOiAnYW0nO1xuICAgIHJldHVybiAvXFxBLy50ZXN0KHRoaXMudG9rZW4pID8gbWVyaWRpZW0udG9VcHBlckNhc2UoKSA6IG1lcmlkaWVtO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gTWVyaWRpZW07XG4iLCIndXNlIHN0cmljdCc7XG5cbmNvbnN0IERhdGVQYXJ0ID0gcmVxdWlyZSgnLi9kYXRlcGFydCcpO1xuXG5jb25zdCBwb3MgPSBuID0+IHtcbiAgbiA9IG4gJSAxMDtcbiAgcmV0dXJuIG4gPT09IDEgPyAnc3QnXG4gICAgICAgOiBuID09PSAyID8gJ25kJ1xuICAgICAgIDogbiA9PT0gMyA/ICdyZCdcbiAgICAgICA6ICd0aCc7XG59XG5cbmNsYXNzIERheSBleHRlbmRzIERhdGVQYXJ0IHtcbiAgY29uc3RydWN0b3Iob3B0cz17fSkge1xuICAgIHN1cGVyKG9wdHMpO1xuICB9XG5cbiAgdXAoKSB7XG4gICAgdGhpcy5kYXRlLnNldERhdGUodGhpcy5kYXRlLmdldERhdGUoKSArIDEpO1xuICB9XG5cbiAgZG93bigpIHtcbiAgICB0aGlzLmRhdGUuc2V0RGF0ZSh0aGlzLmRhdGUuZ2V0RGF0ZSgpIC0gMSk7XG4gIH1cblxuICBzZXRUbyh2YWwpIHtcbiAgICB0aGlzLmRhdGUuc2V0RGF0ZShwYXJzZUludCh2YWwuc3Vic3RyKC0yKSkpO1xuICB9XG5cbiAgdG9TdHJpbmcoKSB7XG4gICAgbGV0IGRhdGUgPSB0aGlzLmRhdGUuZ2V0RGF0ZSgpO1xuICAgIGxldCBkYXkgPSB0aGlzLmRhdGUuZ2V0RGF5KCk7XG4gICAgcmV0dXJuIHRoaXMudG9rZW4gPT09ICdERCcgPyBTdHJpbmcoZGF0ZSkucGFkU3RhcnQoMiwgJzAnKVxuICAgICAgICAgOiB0aGlzLnRva2VuID09PSAnRG8nID8gZGF0ZSArIHBvcyhkYXRlKVxuICAgICAgICAgOiB0aGlzLnRva2VuID09PSAnZCcgPyBkYXkgKyAxXG4gICAgICAgICA6IHRoaXMudG9rZW4gPT09ICdkZGQnID8gdGhpcy5sb2NhbGVzLndlZWtkYXlzU2hvcnRbZGF5XVxuICAgICAgICAgOiB0aGlzLnRva2VuID09PSAnZGRkZCcgPyB0aGlzLmxvY2FsZXMud2Vla2RheXNbZGF5XVxuICAgICAgICAgOiBkYXRlO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gRGF5O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBEYXRlUGFydCA9IHJlcXVpcmUoJy4vZGF0ZXBhcnQnKTtcblxuY2xhc3MgSG91cnMgZXh0ZW5kcyBEYXRlUGFydCB7XG4gIGNvbnN0cnVjdG9yKG9wdHM9e30pIHtcbiAgICBzdXBlcihvcHRzKTtcbiAgfVxuXG4gIHVwKCkge1xuICAgIHRoaXMuZGF0ZS5zZXRIb3Vycyh0aGlzLmRhdGUuZ2V0SG91cnMoKSArIDEpO1xuICB9XG5cbiAgZG93bigpIHtcbiAgICB0aGlzLmRhdGUuc2V0SG91cnModGhpcy5kYXRlLmdldEhvdXJzKCkgLSAxKTtcbiAgfVxuXG4gIHNldFRvKHZhbCkge1xuICAgIHRoaXMuZGF0ZS5zZXRIb3VycyhwYXJzZUludCh2YWwuc3Vic3RyKC0yKSkpO1xuICB9XG5cbiAgdG9TdHJpbmcoKSB7XG4gICAgbGV0IGhvdXJzID0gdGhpcy5kYXRlLmdldEhvdXJzKCk7XG4gICAgaWYgKC9oLy50ZXN0KHRoaXMudG9rZW4pKVxuICAgICAgaG91cnMgPSAoaG91cnMgJSAxMikgfHwgMTI7XG4gICAgcmV0dXJuIHRoaXMudG9rZW4ubGVuZ3RoID4gMSA/IFN0cmluZyhob3VycykucGFkU3RhcnQoMiwgJzAnKSA6IGhvdXJzO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gSG91cnM7XG4iLCIndXNlIHN0cmljdCc7XG5cbmNvbnN0IERhdGVQYXJ0ID0gcmVxdWlyZSgnLi9kYXRlcGFydCcpO1xuXG5jbGFzcyBNaWxsaXNlY29uZHMgZXh0ZW5kcyBEYXRlUGFydCB7XG4gIGNvbnN0cnVjdG9yKG9wdHM9e30pIHtcbiAgICBzdXBlcihvcHRzKTtcbiAgfVxuXG4gIHVwKCkge1xuICAgIHRoaXMuZGF0ZS5zZXRNaWxsaXNlY29uZHModGhpcy5kYXRlLmdldE1pbGxpc2Vjb25kcygpICsgMSk7XG4gIH1cblxuICBkb3duKCkge1xuICAgIHRoaXMuZGF0ZS5zZXRNaWxsaXNlY29uZHModGhpcy5kYXRlLmdldE1pbGxpc2Vjb25kcygpIC0gMSk7XG4gIH1cblxuICBzZXRUbyh2YWwpIHtcbiAgICB0aGlzLmRhdGUuc2V0TWlsbGlzZWNvbmRzKHBhcnNlSW50KHZhbC5zdWJzdHIoLSh0aGlzLnRva2VuLmxlbmd0aCkpKSk7XG4gIH1cblxuICB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gU3RyaW5nKHRoaXMuZGF0ZS5nZXRNaWxsaXNlY29uZHMoKSkucGFkU3RhcnQoNCwgJzAnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zdWJzdHIoMCwgdGhpcy50b2tlbi5sZW5ndGgpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gTWlsbGlzZWNvbmRzO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBEYXRlUGFydCA9IHJlcXVpcmUoJy4vZGF0ZXBhcnQnKTtcblxuY2xhc3MgTWludXRlcyBleHRlbmRzIERhdGVQYXJ0IHtcbiAgY29uc3RydWN0b3Iob3B0cz17fSkge1xuICAgIHN1cGVyKG9wdHMpO1xuICB9XG5cbiAgdXAoKSB7XG4gICAgdGhpcy5kYXRlLnNldE1pbnV0ZXModGhpcy5kYXRlLmdldE1pbnV0ZXMoKSArIDEpO1xuICB9XG5cbiAgZG93bigpIHtcbiAgICB0aGlzLmRhdGUuc2V0TWludXRlcyh0aGlzLmRhdGUuZ2V0TWludXRlcygpIC0gMSk7XG4gIH1cblxuICBzZXRUbyh2YWwpIHtcbiAgICB0aGlzLmRhdGUuc2V0TWludXRlcyhwYXJzZUludCh2YWwuc3Vic3RyKC0yKSkpO1xuICB9XG5cbiAgdG9TdHJpbmcoKSB7XG4gICAgbGV0IG0gPSB0aGlzLmRhdGUuZ2V0TWludXRlcygpO1xuICAgIHJldHVybiB0aGlzLnRva2VuLmxlbmd0aCA+IDEgPyBTdHJpbmcobSkucGFkU3RhcnQoMiwgJzAnKSA6IG07XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBNaW51dGVzO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBEYXRlUGFydCA9IHJlcXVpcmUoJy4vZGF0ZXBhcnQnKTtcblxuY2xhc3MgTW9udGggZXh0ZW5kcyBEYXRlUGFydCB7XG4gIGNvbnN0cnVjdG9yKG9wdHM9e30pIHtcbiAgICBzdXBlcihvcHRzKTtcbiAgfVxuXG4gIHVwKCkge1xuICAgIHRoaXMuZGF0ZS5zZXRNb250aCh0aGlzLmRhdGUuZ2V0TW9udGgoKSArIDEpO1xuICB9XG5cbiAgZG93bigpIHtcbiAgICB0aGlzLmRhdGUuc2V0TW9udGgodGhpcy5kYXRlLmdldE1vbnRoKCkgLSAxKTtcbiAgfVxuXG4gIHNldFRvKHZhbCkge1xuICAgIHZhbCA9IHBhcnNlSW50KHZhbC5zdWJzdHIoLTIpKSAtIDE7XG4gICAgdGhpcy5kYXRlLnNldE1vbnRoKHZhbCA8IDAgPyAwIDogdmFsKTtcbiAgfVxuXG4gIHRvU3RyaW5nKCkge1xuICAgIGxldCBtb250aCA9IHRoaXMuZGF0ZS5nZXRNb250aCgpO1xuICAgIGxldCB0bCA9IHRoaXMudG9rZW4ubGVuZ3RoO1xuICAgIHJldHVybiB0bCA9PT0gMiA/IFN0cmluZyhtb250aCArIDEpLnBhZFN0YXJ0KDIsICcwJylcbiAgICAgICAgICAgOiB0bCA9PT0gMyA/IHRoaXMubG9jYWxlcy5tb250aHNTaG9ydFttb250aF1cbiAgICAgICAgICAgICA6IHRsID09PSA0ID8gdGhpcy5sb2NhbGVzLm1vbnRoc1ttb250aF1cbiAgICAgICAgICAgICAgIDogU3RyaW5nKG1vbnRoICsgMSk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBNb250aDtcbiIsIid1c2Ugc3RyaWN0JztcblxuY29uc3QgRGF0ZVBhcnQgPSByZXF1aXJlKCcuL2RhdGVwYXJ0Jyk7XG5cbmNsYXNzIFNlY29uZHMgZXh0ZW5kcyBEYXRlUGFydCB7XG4gIGNvbnN0cnVjdG9yKG9wdHM9e30pIHtcbiAgICBzdXBlcihvcHRzKTtcbiAgfVxuXG4gIHVwKCkge1xuICAgIHRoaXMuZGF0ZS5zZXRTZWNvbmRzKHRoaXMuZGF0ZS5nZXRTZWNvbmRzKCkgKyAxKTtcbiAgfVxuXG4gIGRvd24oKSB7XG4gICAgdGhpcy5kYXRlLnNldFNlY29uZHModGhpcy5kYXRlLmdldFNlY29uZHMoKSAtIDEpO1xuICB9XG5cbiAgc2V0VG8odmFsKSB7XG4gICAgdGhpcy5kYXRlLnNldFNlY29uZHMocGFyc2VJbnQodmFsLnN1YnN0cigtMikpKTtcbiAgfVxuXG4gIHRvU3RyaW5nKCkge1xuICAgIGxldCBzID0gdGhpcy5kYXRlLmdldFNlY29uZHMoKTtcbiAgICByZXR1cm4gdGhpcy50b2tlbi5sZW5ndGggPiAxID8gU3RyaW5nKHMpLnBhZFN0YXJ0KDIsICcwJykgOiBzO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gU2Vjb25kcztcbiIsIid1c2Ugc3RyaWN0JztcblxuY29uc3QgRGF0ZVBhcnQgPSByZXF1aXJlKCcuL2RhdGVwYXJ0Jyk7XG5cbmNsYXNzIFllYXIgZXh0ZW5kcyBEYXRlUGFydCB7XG4gIGNvbnN0cnVjdG9yKG9wdHM9e30pIHtcbiAgICBzdXBlcihvcHRzKTtcbiAgfVxuXG4gIHVwKCkge1xuICAgIHRoaXMuZGF0ZS5zZXRGdWxsWWVhcih0aGlzLmRhdGUuZ2V0RnVsbFllYXIoKSArIDEpO1xuICB9XG5cbiAgZG93bigpIHtcbiAgICB0aGlzLmRhdGUuc2V0RnVsbFllYXIodGhpcy5kYXRlLmdldEZ1bGxZZWFyKCkgLSAxKTtcbiAgfVxuXG4gIHNldFRvKHZhbCkge1xuICAgIHRoaXMuZGF0ZS5zZXRGdWxsWWVhcih2YWwuc3Vic3RyKC00KSk7XG4gIH1cblxuICB0b1N0cmluZygpIHtcbiAgICBsZXQgeWVhciA9IFN0cmluZyh0aGlzLmRhdGUuZ2V0RnVsbFllYXIoKSkucGFkU3RhcnQoNCwgJzAnKTtcbiAgICByZXR1cm4gdGhpcy50b2tlbi5sZW5ndGggPT09IDIgPyB5ZWFyLnN1YnN0cigtMikgOiB5ZWFyO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gWWVhcjtcbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIERhdGVQYXJ0OiByZXF1aXJlKCcuL2RhdGVwYXJ0JyksXG4gIE1lcmlkaWVtOiByZXF1aXJlKCcuL21lcmlkaWVtJyksXG4gIERheTogcmVxdWlyZSgnLi9kYXknKSxcbiAgSG91cnM6IHJlcXVpcmUoJy4vaG91cnMnKSxcbiAgTWlsbGlzZWNvbmRzOiByZXF1aXJlKCcuL21pbGxpc2Vjb25kcycpLFxuICBNaW51dGVzOiByZXF1aXJlKCcuL21pbnV0ZXMnKSxcbiAgTW9udGg6IHJlcXVpcmUoJy4vbW9udGgnKSxcbiAgU2Vjb25kczogcmVxdWlyZSgnLi9zZWNvbmRzJyksXG4gIFllYXI6IHJlcXVpcmUoJy4veWVhcicpLFxufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBjb2xvciA9IHJlcXVpcmUoJ2tsZXVyJyk7XG5jb25zdCBQcm9tcHQgPSByZXF1aXJlKCcuL3Byb21wdCcpO1xuY29uc3QgeyBzdHlsZSwgY2xlYXIsIGZpZ3VyZXMgfSA9IHJlcXVpcmUoJy4uL3V0aWwnKTtcbmNvbnN0IHsgZXJhc2UsIGN1cnNvciB9ID0gcmVxdWlyZSgnc2lzdGVyYW5zaScpO1xuY29uc3QgeyBEYXRlUGFydCwgTWVyaWRpZW0sIERheSwgSG91cnMsIE1pbGxpc2Vjb25kcywgTWludXRlcywgTW9udGgsIFNlY29uZHMsIFllYXIgfSA9IHJlcXVpcmUoJy4uL2RhdGVwYXJ0cycpO1xuXG5jb25zdCByZWdleCA9IC9cXFxcKC4pfFwiKCg/OlxcXFxbXCJcXFxcXXxbXlwiXSkrKVwifChEW0RvXT98ZHszLDR9fGQpfChNezEsNH0pfChZWSg/OllZKT8pfChbYUFdKXwoW0hoXXsxLDJ9KXwobXsxLDJ9KXwoc3sxLDJ9KXwoU3sxLDR9KXwuL2c7XG5jb25zdCByZWdleEdyb3VwcyA9IHtcbiAgMTogKHt0b2tlbn0pID0+IHRva2VuLnJlcGxhY2UoL1xcXFwoLikvZywgJyQxJyksXG4gIDI6IChvcHRzKSA9PiBuZXcgRGF5KG9wdHMpLCAvLyBEYXkgLy8gVE9ET1xuICAzOiAob3B0cykgPT4gbmV3IE1vbnRoKG9wdHMpLCAvLyBNb250aFxuICA0OiAob3B0cykgPT4gbmV3IFllYXIob3B0cyksIC8vIFllYXJcbiAgNTogKG9wdHMpID0+IG5ldyBNZXJpZGllbShvcHRzKSwgLy8gQU0vUE0gLy8gVE9ETyAoc3BlY2lhbClcbiAgNjogKG9wdHMpID0+IG5ldyBIb3VycyhvcHRzKSwgLy8gSG91cnNcbiAgNzogKG9wdHMpID0+IG5ldyBNaW51dGVzKG9wdHMpLCAvLyBNaW51dGVzXG4gIDg6IChvcHRzKSA9PiBuZXcgU2Vjb25kcyhvcHRzKSwgLy8gU2Vjb25kc1xuICA5OiAob3B0cykgPT4gbmV3IE1pbGxpc2Vjb25kcyhvcHRzKSwgLy8gRnJhY3Rpb25hbCBzZWNvbmRzXG59XG5cbmNvbnN0IGRmbHRMb2NhbGVzID0ge1xuICBtb250aHM6ICdKYW51YXJ5LEZlYnJ1YXJ5LE1hcmNoLEFwcmlsLE1heSxKdW5lLEp1bHksQXVndXN0LFNlcHRlbWJlcixPY3RvYmVyLE5vdmVtYmVyLERlY2VtYmVyJy5zcGxpdCgnLCcpLFxuICBtb250aHNTaG9ydDogJ0phbixGZWIsTWFyLEFwcixNYXksSnVuLEp1bCxBdWcsU2VwLE9jdCxOb3YsRGVjJy5zcGxpdCgnLCcpLFxuICB3ZWVrZGF5czogJ1N1bmRheSxNb25kYXksVHVlc2RheSxXZWRuZXNkYXksVGh1cnNkYXksRnJpZGF5LFNhdHVyZGF5Jy5zcGxpdCgnLCcpLFxuICB3ZWVrZGF5c1Nob3J0OiAnU3VuLE1vbixUdWUsV2VkLFRodSxGcmksU2F0Jy5zcGxpdCgnLCcpXG59XG5cblxuLyoqXG4gKiBEYXRlUHJvbXB0IEJhc2UgRWxlbWVudFxuICogQHBhcmFtIHtPYmplY3R9IG9wdHMgT3B0aW9uc1xuICogQHBhcmFtIHtTdHJpbmd9IG9wdHMubWVzc2FnZSBNZXNzYWdlXG4gKiBAcGFyYW0ge051bWJlcn0gW29wdHMuaW5pdGlhbF0gSW5kZXggb2YgZGVmYXVsdCB2YWx1ZVxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLm1hc2tdIFRoZSBmb3JtYXQgbWFza1xuICogQHBhcmFtIHtvYmplY3R9IFtvcHRzLmxvY2FsZXNdIFRoZSBkYXRlIGxvY2FsZXNcbiAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5lcnJvcl0gVGhlIGVycm9yIG1lc3NhZ2Ugc2hvd24gb24gaW52YWxpZCB2YWx1ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdHMudmFsaWRhdGVdIEZ1bmN0aW9uIHRvIHZhbGlkYXRlIHRoZSBzdWJtaXR0ZWQgdmFsdWVcbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICovXG5jbGFzcyBEYXRlUHJvbXB0IGV4dGVuZHMgUHJvbXB0IHtcbiAgY29uc3RydWN0b3Iob3B0cz17fSkge1xuICAgIHN1cGVyKG9wdHMpO1xuICAgIHRoaXMubXNnID0gb3B0cy5tZXNzYWdlO1xuICAgIHRoaXMuY3Vyc29yID0gMDtcbiAgICB0aGlzLnR5cGVkID0gJyc7XG4gICAgdGhpcy5sb2NhbGVzID0gT2JqZWN0LmFzc2lnbihkZmx0TG9jYWxlcywgb3B0cy5sb2NhbGVzKTtcbiAgICB0aGlzLl9kYXRlID0gb3B0cy5pbml0aWFsIHx8IG5ldyBEYXRlKCk7XG4gICAgdGhpcy5lcnJvck1zZyA9IG9wdHMuZXJyb3IgfHwgJ1BsZWFzZSBFbnRlciBBIFZhbGlkIFZhbHVlJztcbiAgICB0aGlzLnZhbGlkYXRvciA9IG9wdHMudmFsaWRhdGUgfHwgKCgpID0+IHRydWUpO1xuICAgIHRoaXMubWFzayA9IG9wdHMubWFzayB8fCAnWVlZWS1NTS1ERCBISDptbTpzcyc7XG4gICAgdGhpcy5jbGVhciA9IGNsZWFyKCcnLCB0aGlzLm91dC5jb2x1bW5zKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZ2V0IHZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLmRhdGVcbiAgfVxuXG4gIGdldCBkYXRlKCkge1xuICAgIHJldHVybiB0aGlzLl9kYXRlO1xuICB9XG5cbiAgc2V0IGRhdGUoZGF0ZSkge1xuICAgIGlmIChkYXRlKSB0aGlzLl9kYXRlLnNldFRpbWUoZGF0ZS5nZXRUaW1lKCkpO1xuICB9XG5cbiAgc2V0IG1hc2sobWFzaykge1xuICAgIGxldCByZXN1bHQ7XG4gICAgdGhpcy5wYXJ0cyA9IFtdO1xuICAgIHdoaWxlKHJlc3VsdCA9IHJlZ2V4LmV4ZWMobWFzaykpIHtcbiAgICAgIGxldCBtYXRjaCA9IHJlc3VsdC5zaGlmdCgpO1xuICAgICAgbGV0IGlkeCA9IHJlc3VsdC5maW5kSW5kZXgoZ3IgPT4gZ3IgIT0gbnVsbCk7XG4gICAgICB0aGlzLnBhcnRzLnB1c2goaWR4IGluIHJlZ2V4R3JvdXBzXG4gICAgICAgID8gcmVnZXhHcm91cHNbaWR4XSh7IHRva2VuOiByZXN1bHRbaWR4XSB8fCBtYXRjaCwgZGF0ZTogdGhpcy5kYXRlLCBwYXJ0czogdGhpcy5wYXJ0cywgbG9jYWxlczogdGhpcy5sb2NhbGVzIH0pXG4gICAgICAgIDogcmVzdWx0W2lkeF0gfHwgbWF0Y2gpO1xuICAgIH1cblxuICAgIGxldCBwYXJ0cyA9IHRoaXMucGFydHMucmVkdWNlKChhcnIsIGkpID0+IHtcbiAgICAgIGlmICh0eXBlb2YgaSA9PT0gJ3N0cmluZycgJiYgdHlwZW9mIGFyclthcnIubGVuZ3RoIC0gMV0gPT09ICdzdHJpbmcnKVxuICAgICAgICBhcnJbYXJyLmxlbmd0aCAtIDFdICs9IGk7XG4gICAgICBlbHNlIGFyci5wdXNoKGkpO1xuICAgICAgcmV0dXJuIGFycjtcbiAgICB9LCBbXSk7XG5cbiAgICB0aGlzLnBhcnRzLnNwbGljZSgwKTtcbiAgICB0aGlzLnBhcnRzLnB1c2goLi4ucGFydHMpO1xuICAgIHRoaXMucmVzZXQoKTtcbiAgfVxuXG4gIG1vdmVDdXJzb3Iobikge1xuICAgIHRoaXMudHlwZWQgPSAnJztcbiAgICB0aGlzLmN1cnNvciA9IG47XG4gICAgdGhpcy5maXJlKCk7XG4gIH1cblxuICByZXNldCgpIHtcbiAgICB0aGlzLm1vdmVDdXJzb3IodGhpcy5wYXJ0cy5maW5kSW5kZXgocCA9PiBwIGluc3RhbmNlb2YgRGF0ZVBhcnQpKTtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZXhpdCgpIHtcbiAgICB0aGlzLmFib3J0KCk7XG4gIH1cblxuICBhYm9ydCgpIHtcbiAgICB0aGlzLmRvbmUgPSB0aGlzLmFib3J0ZWQgPSB0cnVlO1xuICAgIHRoaXMuZXJyb3IgPSBmYWxzZTtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICAgIHRoaXMub3V0LndyaXRlKCdcXG4nKTtcbiAgICB0aGlzLmNsb3NlKCk7XG4gIH1cblxuICBhc3luYyB2YWxpZGF0ZSgpIHtcbiAgICBsZXQgdmFsaWQgPSBhd2FpdCB0aGlzLnZhbGlkYXRvcih0aGlzLnZhbHVlKTtcbiAgICBpZiAodHlwZW9mIHZhbGlkID09PSAnc3RyaW5nJykge1xuICAgICAgdGhpcy5lcnJvck1zZyA9IHZhbGlkO1xuICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5lcnJvciA9ICF2YWxpZDtcbiAgfVxuXG4gIGFzeW5jIHN1Ym1pdCgpIHtcbiAgICBhd2FpdCB0aGlzLnZhbGlkYXRlKCk7XG4gICAgaWYgKHRoaXMuZXJyb3IpIHtcbiAgICAgIHRoaXMuY29sb3IgPSAncmVkJztcbiAgICAgIHRoaXMuZmlyZSgpO1xuICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5kb25lID0gdHJ1ZTtcbiAgICB0aGlzLmFib3J0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICAgIHRoaXMub3V0LndyaXRlKCdcXG4nKTtcbiAgICB0aGlzLmNsb3NlKCk7XG4gIH1cblxuICB1cCgpIHtcbiAgICB0aGlzLnR5cGVkID0gJyc7XG4gICAgdGhpcy5wYXJ0c1t0aGlzLmN1cnNvcl0udXAoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZG93bigpIHtcbiAgICB0aGlzLnR5cGVkID0gJyc7XG4gICAgdGhpcy5wYXJ0c1t0aGlzLmN1cnNvcl0uZG93bigpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBsZWZ0KCkge1xuICAgIGxldCBwcmV2ID0gdGhpcy5wYXJ0c1t0aGlzLmN1cnNvcl0ucHJldigpO1xuICAgIGlmIChwcmV2ID09IG51bGwpIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgICB0aGlzLm1vdmVDdXJzb3IodGhpcy5wYXJ0cy5pbmRleE9mKHByZXYpKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgcmlnaHQoKSB7XG4gICAgbGV0IG5leHQgPSB0aGlzLnBhcnRzW3RoaXMuY3Vyc29yXS5uZXh0KCk7XG4gICAgaWYgKG5leHQgPT0gbnVsbCkgcmV0dXJuIHRoaXMuYmVsbCgpO1xuICAgIHRoaXMubW92ZUN1cnNvcih0aGlzLnBhcnRzLmluZGV4T2YobmV4dCkpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBuZXh0KCkge1xuICAgIGxldCBuZXh0ID0gdGhpcy5wYXJ0c1t0aGlzLmN1cnNvcl0ubmV4dCgpO1xuICAgIHRoaXMubW92ZUN1cnNvcihuZXh0XG4gICAgICA/IHRoaXMucGFydHMuaW5kZXhPZihuZXh0KVxuICAgICAgOiB0aGlzLnBhcnRzLmZpbmRJbmRleCgocGFydCkgPT4gcGFydCBpbnN0YW5jZW9mIERhdGVQYXJ0KSk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIF8oYykge1xuICAgIGlmICgvXFxkLy50ZXN0KGMpKSB7XG4gICAgICB0aGlzLnR5cGVkICs9IGM7XG4gICAgICB0aGlzLnBhcnRzW3RoaXMuY3Vyc29yXS5zZXRUbyh0aGlzLnR5cGVkKTtcbiAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGlmICh0aGlzLmNsb3NlZCkgcmV0dXJuO1xuICAgIGlmICh0aGlzLmZpcnN0UmVuZGVyKSB0aGlzLm91dC53cml0ZShjdXJzb3IuaGlkZSk7XG4gICAgZWxzZSB0aGlzLm91dC53cml0ZShjbGVhcih0aGlzLm91dHB1dFRleHQsIHRoaXMub3V0LmNvbHVtbnMpKTtcbiAgICBzdXBlci5yZW5kZXIoKTtcblxuICAgIC8vIFByaW50IHByb21wdFxuICAgIHRoaXMub3V0cHV0VGV4dCA9IFtcbiAgICAgIHN0eWxlLnN5bWJvbCh0aGlzLmRvbmUsIHRoaXMuYWJvcnRlZCksXG4gICAgICBjb2xvci5ib2xkKHRoaXMubXNnKSxcbiAgICAgIHN0eWxlLmRlbGltaXRlcihmYWxzZSksXG4gICAgICB0aGlzLnBhcnRzLnJlZHVjZSgoYXJyLCBwLCBpZHgpID0+IGFyci5jb25jYXQoaWR4ID09PSB0aGlzLmN1cnNvciAmJiAhdGhpcy5kb25lID8gY29sb3IuY3lhbigpLnVuZGVybGluZShwLnRvU3RyaW5nKCkpIDogcCksIFtdKVxuICAgICAgICAgIC5qb2luKCcnKVxuICAgIF0uam9pbignICcpO1xuXG4gICAgLy8gUHJpbnQgZXJyb3JcbiAgICBpZiAodGhpcy5lcnJvcikge1xuICAgICAgdGhpcy5vdXRwdXRUZXh0ICs9IHRoaXMuZXJyb3JNc2cuc3BsaXQoJ1xcbicpLnJlZHVjZShcbiAgICAgICAgICAoYSwgbCwgaSkgPT4gYSArIGBcXG4ke2kgPyBgIGAgOiBmaWd1cmVzLnBvaW50ZXJTbWFsbH0gJHtjb2xvci5yZWQoKS5pdGFsaWMobCl9YCwgYGApO1xuICAgIH1cblxuICAgIHRoaXMub3V0LndyaXRlKGVyYXNlLmxpbmUgKyBjdXJzb3IudG8oMCkgKyB0aGlzLm91dHB1dFRleHQpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gRGF0ZVByb21wdDtcbiIsImNvbnN0IGNvbG9yID0gcmVxdWlyZSgna2xldXInKTtcbmNvbnN0IFByb21wdCA9IHJlcXVpcmUoJy4vcHJvbXB0Jyk7XG5jb25zdCB7IGN1cnNvciwgZXJhc2UgfSA9IHJlcXVpcmUoJ3Npc3RlcmFuc2knKTtcbmNvbnN0IHsgc3R5bGUsIGZpZ3VyZXMsIGNsZWFyLCBsaW5lcyB9ID0gcmVxdWlyZSgnLi4vdXRpbCcpO1xuXG5jb25zdCBpc051bWJlciA9IC9bMC05XS87XG5jb25zdCBpc0RlZiA9IGFueSA9PiBhbnkgIT09IHVuZGVmaW5lZDtcbmNvbnN0IHJvdW5kID0gKG51bWJlciwgcHJlY2lzaW9uKSA9PiB7XG4gIGxldCBmYWN0b3IgPSBNYXRoLnBvdygxMCwgcHJlY2lzaW9uKTtcbiAgcmV0dXJuIE1hdGgucm91bmQobnVtYmVyICogZmFjdG9yKSAvIGZhY3Rvcjtcbn1cblxuLyoqXG4gKiBOdW1iZXJQcm9tcHQgQmFzZSBFbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyBPcHRpb25zXG4gKiBAcGFyYW0ge1N0cmluZ30gb3B0cy5tZXNzYWdlIE1lc3NhZ2VcbiAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5zdHlsZT0nZGVmYXVsdCddIFJlbmRlciBzdHlsZVxuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRzLmluaXRpYWxdIERlZmF1bHQgdmFsdWVcbiAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0cy5tYXg9K0luZmluaXR5XSBNYXggdmFsdWVcbiAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0cy5taW49LUluZmluaXR5XSBNaW4gdmFsdWVcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdHMuZmxvYXQ9ZmFsc2VdIFBhcnNlIGlucHV0IGFzIGZsb2F0c1xuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRzLnJvdW5kPTJdIFJvdW5kIGZsb2F0cyB0byB4IGRlY2ltYWxzXG4gKiBAcGFyYW0ge051bWJlcn0gW29wdHMuaW5jcmVtZW50PTFdIE51bWJlciB0byBpbmNyZW1lbnQgYnkgd2hlbiB1c2luZyBhcnJvdy1rZXlzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0cy52YWxpZGF0ZV0gVmFsaWRhdGUgZnVuY3Rpb25cbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLmVycm9yXSBUaGUgaW52YWxpZCBlcnJvciBsYWJlbFxuICovXG5jbGFzcyBOdW1iZXJQcm9tcHQgZXh0ZW5kcyBQcm9tcHQge1xuICBjb25zdHJ1Y3RvcihvcHRzPXt9KSB7XG4gICAgc3VwZXIob3B0cyk7XG4gICAgdGhpcy50cmFuc2Zvcm0gPSBzdHlsZS5yZW5kZXIob3B0cy5zdHlsZSk7XG4gICAgdGhpcy5tc2cgPSBvcHRzLm1lc3NhZ2U7XG4gICAgdGhpcy5pbml0aWFsID0gaXNEZWYob3B0cy5pbml0aWFsKSA/IG9wdHMuaW5pdGlhbCA6ICcnO1xuICAgIHRoaXMuZmxvYXQgPSAhIW9wdHMuZmxvYXQ7XG4gICAgdGhpcy5yb3VuZCA9IG9wdHMucm91bmQgfHwgMjtcbiAgICB0aGlzLmluYyA9IG9wdHMuaW5jcmVtZW50IHx8IDE7XG4gICAgdGhpcy5taW4gPSBpc0RlZihvcHRzLm1pbikgPyBvcHRzLm1pbiA6IC1JbmZpbml0eTtcbiAgICB0aGlzLm1heCA9IGlzRGVmKG9wdHMubWF4KSA/IG9wdHMubWF4IDogSW5maW5pdHk7XG4gICAgdGhpcy5lcnJvck1zZyA9IG9wdHMuZXJyb3IgfHwgYFBsZWFzZSBFbnRlciBBIFZhbGlkIFZhbHVlYDtcbiAgICB0aGlzLnZhbGlkYXRvciA9IG9wdHMudmFsaWRhdGUgfHwgKCgpID0+IHRydWUpO1xuICAgIHRoaXMuY29sb3IgPSBgY3lhbmA7XG4gICAgdGhpcy52YWx1ZSA9IGBgO1xuICAgIHRoaXMudHlwZWQgPSBgYDtcbiAgICB0aGlzLmxhc3RIaXQgPSAwO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBzZXQgdmFsdWUodikge1xuICAgIGlmICghdiAmJiB2ICE9PSAwKSB7XG4gICAgICB0aGlzLnBsYWNlaG9sZGVyID0gdHJ1ZTtcbiAgICAgIHRoaXMucmVuZGVyZWQgPSBjb2xvci5ncmF5KHRoaXMudHJhbnNmb3JtLnJlbmRlcihgJHt0aGlzLmluaXRpYWx9YCkpO1xuICAgICAgdGhpcy5fdmFsdWUgPSBgYDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wbGFjZWhvbGRlciA9IGZhbHNlO1xuICAgICAgdGhpcy5yZW5kZXJlZCA9IHRoaXMudHJhbnNmb3JtLnJlbmRlcihgJHtyb3VuZCh2LCB0aGlzLnJvdW5kKX1gKTtcbiAgICAgIHRoaXMuX3ZhbHVlID0gcm91bmQodiwgdGhpcy5yb3VuZCk7XG4gICAgfVxuICAgIHRoaXMuZmlyZSgpO1xuICB9XG5cbiAgZ2V0IHZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgfVxuXG4gIHBhcnNlKHgpIHtcbiAgICByZXR1cm4gdGhpcy5mbG9hdCA/IHBhcnNlRmxvYXQoeCkgOiBwYXJzZUludCh4KTtcbiAgfVxuXG4gIHZhbGlkKGMpIHtcbiAgICByZXR1cm4gYyA9PT0gYC1gIHx8IGMgPT09IGAuYCAmJiB0aGlzLmZsb2F0IHx8IGlzTnVtYmVyLnRlc3QoYylcbiAgfVxuXG4gIHJlc2V0KCkge1xuICAgIHRoaXMudHlwZWQgPSBgYDtcbiAgICB0aGlzLnZhbHVlID0gYGA7XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIGV4aXQoKSB7XG4gICAgdGhpcy5hYm9ydCgpO1xuICB9XG5cbiAgYWJvcnQoKSB7XG4gICAgbGV0IHggPSB0aGlzLnZhbHVlO1xuICAgIHRoaXMudmFsdWUgPSB4ICE9PSBgYCA/IHggOiB0aGlzLmluaXRpYWw7XG4gICAgdGhpcy5kb25lID0gdGhpcy5hYm9ydGVkID0gdHJ1ZTtcbiAgICB0aGlzLmVycm9yID0gZmFsc2U7XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgICB0aGlzLm91dC53cml0ZShgXFxuYCk7XG4gICAgdGhpcy5jbG9zZSgpO1xuICB9XG5cbiAgYXN5bmMgdmFsaWRhdGUoKSB7XG4gICAgbGV0IHZhbGlkID0gYXdhaXQgdGhpcy52YWxpZGF0b3IodGhpcy52YWx1ZSk7XG4gICAgaWYgKHR5cGVvZiB2YWxpZCA9PT0gYHN0cmluZ2ApIHtcbiAgICAgIHRoaXMuZXJyb3JNc2cgPSB2YWxpZDtcbiAgICAgIHZhbGlkID0gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuZXJyb3IgPSAhdmFsaWQ7XG4gIH1cblxuICBhc3luYyBzdWJtaXQoKSB7XG4gICAgYXdhaXQgdGhpcy52YWxpZGF0ZSgpO1xuICAgIGlmICh0aGlzLmVycm9yKSB7XG4gICAgICB0aGlzLmNvbG9yID0gYHJlZGA7XG4gICAgICB0aGlzLmZpcmUoKTtcbiAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCB4ID0gdGhpcy52YWx1ZTtcbiAgICB0aGlzLnZhbHVlID0geCAhPT0gYGAgPyB4IDogdGhpcy5pbml0aWFsO1xuICAgIHRoaXMuZG9uZSA9IHRydWU7XG4gICAgdGhpcy5hYm9ydGVkID0gZmFsc2U7XG4gICAgdGhpcy5lcnJvciA9IGZhbHNlO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gICAgdGhpcy5vdXQud3JpdGUoYFxcbmApO1xuICAgIHRoaXMuY2xvc2UoKTtcbiAgfVxuXG4gIHVwKCkge1xuICAgIHRoaXMudHlwZWQgPSBgYDtcbiAgICBpZih0aGlzLnZhbHVlID09PSAnJykge1xuICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubWluIC0gdGhpcy5pbmM7XG4gICAgfVxuICAgIGlmICh0aGlzLnZhbHVlID49IHRoaXMubWF4KSByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgdGhpcy52YWx1ZSArPSB0aGlzLmluYztcbiAgICB0aGlzLmNvbG9yID0gYGN5YW5gO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBkb3duKCkge1xuICAgIHRoaXMudHlwZWQgPSBgYDtcbiAgICBpZih0aGlzLnZhbHVlID09PSAnJykge1xuICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubWluICsgdGhpcy5pbmM7XG4gICAgfVxuICAgIGlmICh0aGlzLnZhbHVlIDw9IHRoaXMubWluKSByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgdGhpcy52YWx1ZSAtPSB0aGlzLmluYztcbiAgICB0aGlzLmNvbG9yID0gYGN5YW5gO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBkZWxldGUoKSB7XG4gICAgbGV0IHZhbCA9IHRoaXMudmFsdWUudG9TdHJpbmcoKTtcbiAgICBpZiAodmFsLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHRoaXMuYmVsbCgpO1xuICAgIHRoaXMudmFsdWUgPSB0aGlzLnBhcnNlKCh2YWwgPSB2YWwuc2xpY2UoMCwgLTEpKSkgfHwgYGA7XG4gICAgaWYgKHRoaXMudmFsdWUgIT09ICcnICYmIHRoaXMudmFsdWUgPCB0aGlzLm1pbikge1xuICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubWluO1xuICAgIH1cbiAgICB0aGlzLmNvbG9yID0gYGN5YW5gO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBuZXh0KCkge1xuICAgIHRoaXMudmFsdWUgPSB0aGlzLmluaXRpYWw7XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIF8oYywga2V5KSB7XG4gICAgaWYgKCF0aGlzLnZhbGlkKGMpKSByZXR1cm4gdGhpcy5iZWxsKCk7XG5cbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGlmIChub3cgLSB0aGlzLmxhc3RIaXQgPiAxMDAwKSB0aGlzLnR5cGVkID0gYGA7IC8vIDFzIGVsYXBzZWRcbiAgICB0aGlzLnR5cGVkICs9IGM7XG4gICAgdGhpcy5sYXN0SGl0ID0gbm93O1xuICAgIHRoaXMuY29sb3IgPSBgY3lhbmA7XG5cbiAgICBpZiAoYyA9PT0gYC5gKSByZXR1cm4gdGhpcy5maXJlKCk7XG5cbiAgICB0aGlzLnZhbHVlID0gTWF0aC5taW4odGhpcy5wYXJzZSh0aGlzLnR5cGVkKSwgdGhpcy5tYXgpO1xuICAgIGlmICh0aGlzLnZhbHVlID4gdGhpcy5tYXgpIHRoaXMudmFsdWUgPSB0aGlzLm1heDtcbiAgICBpZiAodGhpcy52YWx1ZSA8IHRoaXMubWluKSB0aGlzLnZhbHVlID0gdGhpcy5taW47XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBpZiAodGhpcy5jbG9zZWQpIHJldHVybjtcbiAgICBpZiAoIXRoaXMuZmlyc3RSZW5kZXIpIHtcbiAgICAgIGlmICh0aGlzLm91dHB1dEVycm9yKVxuICAgICAgICB0aGlzLm91dC53cml0ZShjdXJzb3IuZG93bihsaW5lcyh0aGlzLm91dHB1dEVycm9yLCB0aGlzLm91dC5jb2x1bW5zKSAtIDEpICsgY2xlYXIodGhpcy5vdXRwdXRFcnJvciwgdGhpcy5vdXQuY29sdW1ucykpO1xuICAgICAgdGhpcy5vdXQud3JpdGUoY2xlYXIodGhpcy5vdXRwdXRUZXh0LCB0aGlzLm91dC5jb2x1bW5zKSk7XG4gICAgfVxuICAgIHN1cGVyLnJlbmRlcigpO1xuICAgIHRoaXMub3V0cHV0RXJyb3IgPSAnJztcblxuICAgIC8vIFByaW50IHByb21wdFxuICAgIHRoaXMub3V0cHV0VGV4dCA9IFtcbiAgICAgIHN0eWxlLnN5bWJvbCh0aGlzLmRvbmUsIHRoaXMuYWJvcnRlZCksXG4gICAgICBjb2xvci5ib2xkKHRoaXMubXNnKSxcbiAgICAgIHN0eWxlLmRlbGltaXRlcih0aGlzLmRvbmUpLFxuICAgICAgIXRoaXMuZG9uZSB8fCAoIXRoaXMuZG9uZSAmJiAhdGhpcy5wbGFjZWhvbGRlcilcbiAgICAgICAgICA/IGNvbG9yW3RoaXMuY29sb3JdKCkudW5kZXJsaW5lKHRoaXMucmVuZGVyZWQpIDogdGhpcy5yZW5kZXJlZFxuICAgIF0uam9pbihgIGApO1xuXG4gICAgLy8gUHJpbnQgZXJyb3JcbiAgICBpZiAodGhpcy5lcnJvcikge1xuICAgICAgdGhpcy5vdXRwdXRFcnJvciArPSB0aGlzLmVycm9yTXNnLnNwbGl0KGBcXG5gKVxuICAgICAgICAgIC5yZWR1Y2UoKGEsIGwsIGkpID0+IGEgKyBgXFxuJHtpID8gYCBgIDogZmlndXJlcy5wb2ludGVyU21hbGx9ICR7Y29sb3IucmVkKCkuaXRhbGljKGwpfWAsIGBgKTtcbiAgICB9XG5cbiAgICB0aGlzLm91dC53cml0ZShlcmFzZS5saW5lICsgY3Vyc29yLnRvKDApICsgdGhpcy5vdXRwdXRUZXh0ICsgY3Vyc29yLnNhdmUgKyB0aGlzLm91dHB1dEVycm9yICsgY3Vyc29yLnJlc3RvcmUpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gTnVtYmVyUHJvbXB0O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBjb2xvciA9IHJlcXVpcmUoJ2tsZXVyJyk7XG5jb25zdCB7IGN1cnNvciB9ID0gcmVxdWlyZSgnc2lzdGVyYW5zaScpO1xuY29uc3QgUHJvbXB0ID0gcmVxdWlyZSgnLi9wcm9tcHQnKTtcbmNvbnN0IHsgY2xlYXIsIGZpZ3VyZXMsIHN0eWxlLCB3cmFwLCBlbnRyaWVzVG9EaXNwbGF5IH0gPSByZXF1aXJlKCcuLi91dGlsJyk7XG5cbi8qKlxuICogTXVsdGlzZWxlY3RQcm9tcHQgQmFzZSBFbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyBPcHRpb25zXG4gKiBAcGFyYW0ge1N0cmluZ30gb3B0cy5tZXNzYWdlIE1lc3NhZ2VcbiAqIEBwYXJhbSB7QXJyYXl9IG9wdHMuY2hvaWNlcyBBcnJheSBvZiBjaG9pY2Ugb2JqZWN0c1xuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLmhpbnRdIEhpbnQgdG8gZGlzcGxheVxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLndhcm5dIEhpbnQgc2hvd24gZm9yIGRpc2FibGVkIGNob2ljZXNcbiAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0cy5tYXhdIE1heCBjaG9pY2VzXG4gKiBAcGFyYW0ge051bWJlcn0gW29wdHMuY3Vyc29yPTBdIEN1cnNvciBzdGFydCBwb3NpdGlvblxuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRzLm9wdGlvbnNQZXJQYWdlPTEwXSBNYXggb3B0aW9ucyB0byBkaXNwbGF5IGF0IG9uY2VcbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICovXG5jbGFzcyBNdWx0aXNlbGVjdFByb21wdCBleHRlbmRzIFByb21wdCB7XG4gIGNvbnN0cnVjdG9yKG9wdHM9e30pIHtcbiAgICBzdXBlcihvcHRzKTtcbiAgICB0aGlzLm1zZyA9IG9wdHMubWVzc2FnZTtcbiAgICB0aGlzLmN1cnNvciA9IG9wdHMuY3Vyc29yIHx8IDA7XG4gICAgdGhpcy5zY3JvbGxJbmRleCA9IG9wdHMuY3Vyc29yIHx8IDA7XG4gICAgdGhpcy5oaW50ID0gb3B0cy5oaW50IHx8ICcnO1xuICAgIHRoaXMud2FybiA9IG9wdHMud2FybiB8fCAnLSBUaGlzIG9wdGlvbiBpcyBkaXNhYmxlZCAtJztcbiAgICB0aGlzLm1pblNlbGVjdGVkID0gb3B0cy5taW47XG4gICAgdGhpcy5zaG93TWluRXJyb3IgPSBmYWxzZTtcbiAgICB0aGlzLm1heENob2ljZXMgPSBvcHRzLm1heDtcbiAgICB0aGlzLmluc3RydWN0aW9ucyA9IG9wdHMuaW5zdHJ1Y3Rpb25zO1xuICAgIHRoaXMub3B0aW9uc1BlclBhZ2UgPSBvcHRzLm9wdGlvbnNQZXJQYWdlIHx8IDEwO1xuICAgIHRoaXMudmFsdWUgPSBvcHRzLmNob2ljZXMubWFwKChjaCwgaWR4KSA9PiB7XG4gICAgICBpZiAodHlwZW9mIGNoID09PSAnc3RyaW5nJylcbiAgICAgICAgY2ggPSB7dGl0bGU6IGNoLCB2YWx1ZTogaWR4fTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRpdGxlOiBjaCAmJiAoY2gudGl0bGUgfHwgY2gudmFsdWUgfHwgY2gpLFxuICAgICAgICBkZXNjcmlwdGlvbjogY2ggJiYgY2guZGVzY3JpcHRpb24sXG4gICAgICAgIHZhbHVlOiBjaCAmJiAoY2gudmFsdWUgPT09IHVuZGVmaW5lZCA/IGlkeCA6IGNoLnZhbHVlKSxcbiAgICAgICAgc2VsZWN0ZWQ6IGNoICYmIGNoLnNlbGVjdGVkLFxuICAgICAgICBkaXNhYmxlZDogY2ggJiYgY2guZGlzYWJsZWRcbiAgICAgIH07XG4gICAgfSk7XG4gICAgdGhpcy5jbGVhciA9IGNsZWFyKCcnLCB0aGlzLm91dC5jb2x1bW5zKTtcbiAgICBpZiAoIW9wdHMub3ZlcnJpZGVSZW5kZXIpIHtcbiAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgfVxuICB9XG5cbiAgcmVzZXQoKSB7XG4gICAgdGhpcy52YWx1ZS5tYXAodiA9PiAhdi5zZWxlY3RlZCk7XG4gICAgdGhpcy5jdXJzb3IgPSAwO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBzZWxlY3RlZCgpIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZS5maWx0ZXIodiA9PiB2LnNlbGVjdGVkKTtcbiAgfVxuXG4gIGV4aXQoKSB7XG4gICAgdGhpcy5hYm9ydCgpO1xuICB9XG5cbiAgYWJvcnQoKSB7XG4gICAgdGhpcy5kb25lID0gdGhpcy5hYm9ydGVkID0gdHJ1ZTtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICAgIHRoaXMub3V0LndyaXRlKCdcXG4nKTtcbiAgICB0aGlzLmNsb3NlKCk7XG4gIH1cblxuICBzdWJtaXQoKSB7XG4gICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLnZhbHVlXG4gICAgICAuZmlsdGVyKGUgPT4gZS5zZWxlY3RlZCk7XG4gICAgaWYgKHRoaXMubWluU2VsZWN0ZWQgJiYgc2VsZWN0ZWQubGVuZ3RoIDwgdGhpcy5taW5TZWxlY3RlZCkge1xuICAgICAgdGhpcy5zaG93TWluRXJyb3IgPSB0cnVlO1xuICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kb25lID0gdHJ1ZTtcbiAgICAgIHRoaXMuYWJvcnRlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5maXJlKCk7XG4gICAgICB0aGlzLnJlbmRlcigpO1xuICAgICAgdGhpcy5vdXQud3JpdGUoJ1xcbicpO1xuICAgICAgdGhpcy5jbG9zZSgpO1xuICAgIH1cbiAgfVxuXG4gIGZpcnN0KCkge1xuICAgIHRoaXMuY3Vyc29yID0gMDtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgbGFzdCgpIHtcbiAgICB0aGlzLmN1cnNvciA9IHRoaXMudmFsdWUubGVuZ3RoIC0gMTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG4gIG5leHQoKSB7XG4gICAgdGhpcy5jdXJzb3IgPSAodGhpcy5jdXJzb3IgKyAxKSAlIHRoaXMudmFsdWUubGVuZ3RoO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICB1cCgpIHtcbiAgICBpZiAodGhpcy5jdXJzb3IgPT09IDApIHtcbiAgICAgIHRoaXMuY3Vyc29yID0gdGhpcy52YWx1ZS5sZW5ndGggLSAxO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmN1cnNvci0tO1xuICAgIH1cbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZG93bigpIHtcbiAgICBpZiAodGhpcy5jdXJzb3IgPT09IHRoaXMudmFsdWUubGVuZ3RoIC0gMSkge1xuICAgICAgdGhpcy5jdXJzb3IgPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmN1cnNvcisrO1xuICAgIH1cbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgbGVmdCgpIHtcbiAgICB0aGlzLnZhbHVlW3RoaXMuY3Vyc29yXS5zZWxlY3RlZCA9IGZhbHNlO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICByaWdodCgpIHtcbiAgICBpZiAodGhpcy52YWx1ZS5maWx0ZXIoZSA9PiBlLnNlbGVjdGVkKS5sZW5ndGggPj0gdGhpcy5tYXhDaG9pY2VzKSByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgdGhpcy52YWx1ZVt0aGlzLmN1cnNvcl0uc2VsZWN0ZWQgPSB0cnVlO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBoYW5kbGVTcGFjZVRvZ2dsZSgpIHtcbiAgICBjb25zdCB2ID0gdGhpcy52YWx1ZVt0aGlzLmN1cnNvcl07XG5cbiAgICBpZiAodi5zZWxlY3RlZCkge1xuICAgICAgdi5zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICB9IGVsc2UgaWYgKHYuZGlzYWJsZWQgfHwgdGhpcy52YWx1ZS5maWx0ZXIoZSA9PiBlLnNlbGVjdGVkKS5sZW5ndGggPj0gdGhpcy5tYXhDaG9pY2VzKSB7XG4gICAgICByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHYuc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICB9XG4gIH1cblxuICB0b2dnbGVBbGwoKSB7XG4gICAgaWYgKHRoaXMubWF4Q2hvaWNlcyAhPT0gdW5kZWZpbmVkIHx8IHRoaXMudmFsdWVbdGhpcy5jdXJzb3JdLmRpc2FibGVkKSB7XG4gICAgICByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgfVxuXG4gICAgY29uc3QgbmV3U2VsZWN0ZWQgPSAhdGhpcy52YWx1ZVt0aGlzLmN1cnNvcl0uc2VsZWN0ZWQ7XG4gICAgdGhpcy52YWx1ZS5maWx0ZXIodiA9PiAhdi5kaXNhYmxlZCkuZm9yRWFjaCh2ID0+IHYuc2VsZWN0ZWQgPSBuZXdTZWxlY3RlZCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIF8oYywga2V5KSB7XG4gICAgaWYgKGMgPT09ICcgJykge1xuICAgICAgdGhpcy5oYW5kbGVTcGFjZVRvZ2dsZSgpO1xuICAgIH0gZWxzZSBpZiAoYyA9PT0gJ2EnKSB7XG4gICAgICB0aGlzLnRvZ2dsZUFsbCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVySW5zdHJ1Y3Rpb25zKCkge1xuICAgIGlmICh0aGlzLmluc3RydWN0aW9ucyA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuaW5zdHJ1Y3Rpb25zKSB7XG4gICAgICBpZiAodHlwZW9mIHRoaXMuaW5zdHJ1Y3Rpb25zID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gdGhpcy5pbnN0cnVjdGlvbnM7XG4gICAgICB9XG4gICAgICByZXR1cm4gJ1xcbkluc3RydWN0aW9uczpcXG4nXG4gICAgICAgICsgYCAgICAke2ZpZ3VyZXMuYXJyb3dVcH0vJHtmaWd1cmVzLmFycm93RG93bn06IEhpZ2hsaWdodCBvcHRpb25cXG5gXG4gICAgICAgICsgYCAgICAke2ZpZ3VyZXMuYXJyb3dMZWZ0fS8ke2ZpZ3VyZXMuYXJyb3dSaWdodH0vW3NwYWNlXTogVG9nZ2xlIHNlbGVjdGlvblxcbmBcbiAgICAgICAgKyAodGhpcy5tYXhDaG9pY2VzID09PSB1bmRlZmluZWQgPyBgICAgIGE6IFRvZ2dsZSBhbGxcXG5gIDogJycpXG4gICAgICAgICsgYCAgICBlbnRlci9yZXR1cm46IENvbXBsZXRlIGFuc3dlcmA7XG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIHJlbmRlck9wdGlvbihjdXJzb3IsIHYsIGksIGFycm93SW5kaWNhdG9yKSB7XG4gICAgY29uc3QgcHJlZml4ID0gKHYuc2VsZWN0ZWQgPyBjb2xvci5ncmVlbihmaWd1cmVzLnJhZGlvT24pIDogZmlndXJlcy5yYWRpb09mZikgKyAnICcgKyBhcnJvd0luZGljYXRvciArICcgJztcbiAgICBsZXQgdGl0bGUsIGRlc2M7XG5cbiAgICBpZiAodi5kaXNhYmxlZCkge1xuICAgICAgdGl0bGUgPSBjdXJzb3IgPT09IGkgPyBjb2xvci5ncmF5KCkudW5kZXJsaW5lKHYudGl0bGUpIDogY29sb3Iuc3RyaWtldGhyb3VnaCgpLmdyYXkodi50aXRsZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRpdGxlID0gY3Vyc29yID09PSBpID8gY29sb3IuY3lhbigpLnVuZGVybGluZSh2LnRpdGxlKSA6IHYudGl0bGU7XG4gICAgICBpZiAoY3Vyc29yID09PSBpICYmIHYuZGVzY3JpcHRpb24pIHtcbiAgICAgICAgZGVzYyA9IGAgLSAke3YuZGVzY3JpcHRpb259YDtcbiAgICAgICAgaWYgKHByZWZpeC5sZW5ndGggKyB0aXRsZS5sZW5ndGggKyBkZXNjLmxlbmd0aCA+PSB0aGlzLm91dC5jb2x1bW5zXG4gICAgICAgICAgfHwgdi5kZXNjcmlwdGlvbi5zcGxpdCgvXFxyP1xcbi8pLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICBkZXNjID0gJ1xcbicgKyB3cmFwKHYuZGVzY3JpcHRpb24sIHsgbWFyZ2luOiBwcmVmaXgubGVuZ3RoLCB3aWR0aDogdGhpcy5vdXQuY29sdW1ucyB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwcmVmaXggKyB0aXRsZSArIGNvbG9yLmdyYXkoZGVzYyB8fCAnJyk7XG4gIH1cblxuICAvLyBzaGFyZWQgd2l0aCBhdXRvY29tcGxldGVNdWx0aXNlbGVjdFxuICBwYWdpbmF0ZU9wdGlvbnMob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIGNvbG9yLnJlZCgnTm8gbWF0Y2hlcyBmb3IgdGhpcyBxdWVyeS4nKTtcbiAgICB9XG5cbiAgICBsZXQgeyBzdGFydEluZGV4LCBlbmRJbmRleCB9ID0gZW50cmllc1RvRGlzcGxheSh0aGlzLmN1cnNvciwgb3B0aW9ucy5sZW5ndGgsIHRoaXMub3B0aW9uc1BlclBhZ2UpO1xuICAgIGxldCBwcmVmaXgsIHN0eWxlZE9wdGlvbnMgPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSBzdGFydEluZGV4OyBpIDwgZW5kSW5kZXg7IGkrKykge1xuICAgICAgaWYgKGkgPT09IHN0YXJ0SW5kZXggJiYgc3RhcnRJbmRleCA+IDApIHtcbiAgICAgICAgcHJlZml4ID0gZmlndXJlcy5hcnJvd1VwO1xuICAgICAgfSBlbHNlIGlmIChpID09PSBlbmRJbmRleCAtIDEgJiYgZW5kSW5kZXggPCBvcHRpb25zLmxlbmd0aCkge1xuICAgICAgICBwcmVmaXggPSBmaWd1cmVzLmFycm93RG93bjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHByZWZpeCA9ICcgJztcbiAgICAgIH1cbiAgICAgIHN0eWxlZE9wdGlvbnMucHVzaCh0aGlzLnJlbmRlck9wdGlvbih0aGlzLmN1cnNvciwgb3B0aW9uc1tpXSwgaSwgcHJlZml4KSk7XG4gICAgfVxuXG4gICAgcmV0dXJuICdcXG4nICsgc3R5bGVkT3B0aW9ucy5qb2luKCdcXG4nKTtcbiAgfVxuXG4gIC8vIHNoYXJlZCB3aXRoIGF1dG9jb21sZXRlTXVsdGlzZWxlY3RcbiAgcmVuZGVyT3B0aW9ucyhvcHRpb25zKSB7XG4gICAgaWYgKCF0aGlzLmRvbmUpIHtcbiAgICAgIHJldHVybiB0aGlzLnBhZ2luYXRlT3B0aW9ucyhvcHRpb25zKTtcbiAgICB9XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgcmVuZGVyRG9uZU9ySW5zdHJ1Y3Rpb25zKCkge1xuICAgIGlmICh0aGlzLmRvbmUpIHtcbiAgICAgIHJldHVybiB0aGlzLnZhbHVlXG4gICAgICAgIC5maWx0ZXIoZSA9PiBlLnNlbGVjdGVkKVxuICAgICAgICAubWFwKHYgPT4gdi50aXRsZSlcbiAgICAgICAgLmpvaW4oJywgJyk7XG4gICAgfVxuXG4gICAgY29uc3Qgb3V0cHV0ID0gW2NvbG9yLmdyYXkodGhpcy5oaW50KSwgdGhpcy5yZW5kZXJJbnN0cnVjdGlvbnMoKV07XG5cbiAgICBpZiAodGhpcy52YWx1ZVt0aGlzLmN1cnNvcl0uZGlzYWJsZWQpIHtcbiAgICAgIG91dHB1dC5wdXNoKGNvbG9yLnllbGxvdyh0aGlzLndhcm4pKTtcbiAgICB9XG4gICAgcmV0dXJuIG91dHB1dC5qb2luKCcgJyk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgaWYgKHRoaXMuY2xvc2VkKSByZXR1cm47XG4gICAgaWYgKHRoaXMuZmlyc3RSZW5kZXIpIHRoaXMub3V0LndyaXRlKGN1cnNvci5oaWRlKTtcbiAgICBzdXBlci5yZW5kZXIoKTtcblxuICAgIC8vIHByaW50IHByb21wdFxuICAgIGxldCBwcm9tcHQgPSBbXG4gICAgICBzdHlsZS5zeW1ib2wodGhpcy5kb25lLCB0aGlzLmFib3J0ZWQpLFxuICAgICAgY29sb3IuYm9sZCh0aGlzLm1zZyksXG4gICAgICBzdHlsZS5kZWxpbWl0ZXIoZmFsc2UpLFxuICAgICAgdGhpcy5yZW5kZXJEb25lT3JJbnN0cnVjdGlvbnMoKVxuICAgIF0uam9pbignICcpO1xuICAgIGlmICh0aGlzLnNob3dNaW5FcnJvcikge1xuICAgICAgcHJvbXB0ICs9IGNvbG9yLnJlZChgWW91IG11c3Qgc2VsZWN0IGEgbWluaW11bSBvZiAke3RoaXMubWluU2VsZWN0ZWR9IGNob2ljZXMuYCk7XG4gICAgICB0aGlzLnNob3dNaW5FcnJvciA9IGZhbHNlO1xuICAgIH1cbiAgICBwcm9tcHQgKz0gdGhpcy5yZW5kZXJPcHRpb25zKHRoaXMudmFsdWUpO1xuXG4gICAgdGhpcy5vdXQud3JpdGUodGhpcy5jbGVhciArIHByb21wdCk7XG4gICAgdGhpcy5jbGVhciA9IGNsZWFyKHByb21wdCwgdGhpcy5vdXQuY29sdW1ucyk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBNdWx0aXNlbGVjdFByb21wdDtcbiIsIid1c2Ugc3RyaWN0JztcblxuY29uc3QgY29sb3IgPSByZXF1aXJlKCdrbGV1cicpO1xuY29uc3QgUHJvbXB0ID0gcmVxdWlyZSgnLi9wcm9tcHQnKTtcbmNvbnN0IHsgZXJhc2UsIGN1cnNvciB9ID0gcmVxdWlyZSgnc2lzdGVyYW5zaScpO1xuY29uc3QgeyBzdHlsZSwgY2xlYXIsIGZpZ3VyZXMsIHdyYXAsIGVudHJpZXNUb0Rpc3BsYXkgfSA9IHJlcXVpcmUoJy4uL3V0aWwnKTtcblxuY29uc3QgZ2V0VmFsID0gKGFyciwgaSkgPT4gYXJyW2ldICYmIChhcnJbaV0udmFsdWUgfHwgYXJyW2ldLnRpdGxlIHx8IGFycltpXSk7XG5jb25zdCBnZXRUaXRsZSA9IChhcnIsIGkpID0+IGFycltpXSAmJiAoYXJyW2ldLnRpdGxlIHx8IGFycltpXS52YWx1ZSB8fCBhcnJbaV0pO1xuY29uc3QgZ2V0SW5kZXggPSAoYXJyLCB2YWxPclRpdGxlKSA9PiB7XG4gIGNvbnN0IGluZGV4ID0gYXJyLmZpbmRJbmRleChlbCA9PiBlbC52YWx1ZSA9PT0gdmFsT3JUaXRsZSB8fCBlbC50aXRsZSA9PT0gdmFsT3JUaXRsZSk7XG4gIHJldHVybiBpbmRleCA+IC0xID8gaW5kZXggOiB1bmRlZmluZWQ7XG59O1xuXG4vKipcbiAqIFRleHRQcm9tcHQgQmFzZSBFbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyBPcHRpb25zXG4gKiBAcGFyYW0ge1N0cmluZ30gb3B0cy5tZXNzYWdlIE1lc3NhZ2VcbiAqIEBwYXJhbSB7QXJyYXl9IG9wdHMuY2hvaWNlcyBBcnJheSBvZiBhdXRvLWNvbXBsZXRlIGNob2ljZXMgb2JqZWN0c1xuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdHMuc3VnZ2VzdF0gRmlsdGVyIGZ1bmN0aW9uLiBEZWZhdWx0cyB0byBzb3J0IGJ5IHRpdGxlXG4gKiBAcGFyYW0ge051bWJlcn0gW29wdHMubGltaXQ9MTBdIE1heCBudW1iZXIgb2YgcmVzdWx0cyB0byBzaG93XG4gKiBAcGFyYW0ge051bWJlcn0gW29wdHMuY3Vyc29yPTBdIEN1cnNvciBzdGFydCBwb3NpdGlvblxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLnN0eWxlPSdkZWZhdWx0J10gUmVuZGVyIHN0eWxlXG4gKiBAcGFyYW0ge1N0cmluZ30gW29wdHMuZmFsbGJhY2tdIEZhbGxiYWNrIG1lc3NhZ2UgLSBpbml0aWFsIHRvIGRlZmF1bHQgdmFsdWVcbiAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5pbml0aWFsXSBJbmRleCBvZiB0aGUgZGVmYXVsdCB2YWx1ZVxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0cy5jbGVhckZpcnN0XSBUaGUgZmlyc3QgRVNDQVBFIGtleXByZXNzIHdpbGwgY2xlYXIgdGhlIGlucHV0XG4gKiBAcGFyYW0ge1N0cmVhbX0gW29wdHMuc3RkaW5dIFRoZSBSZWFkYWJsZSBzdHJlYW0gdG8gbGlzdGVuIHRvXG4gKiBAcGFyYW0ge1N0cmVhbX0gW29wdHMuc3Rkb3V0XSBUaGUgV3JpdGFibGUgc3RyZWFtIHRvIHdyaXRlIHJlYWRsaW5lIGRhdGEgdG9cbiAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5ub01hdGNoZXNdIFRoZSBubyBtYXRjaGVzIGZvdW5kIGxhYmVsXG4gKi9cbmNsYXNzIEF1dG9jb21wbGV0ZVByb21wdCBleHRlbmRzIFByb21wdCB7XG4gIGNvbnN0cnVjdG9yKG9wdHM9e30pIHtcbiAgICBzdXBlcihvcHRzKTtcbiAgICB0aGlzLm1zZyA9IG9wdHMubWVzc2FnZTtcbiAgICB0aGlzLnN1Z2dlc3QgPSBvcHRzLnN1Z2dlc3Q7XG4gICAgdGhpcy5jaG9pY2VzID0gb3B0cy5jaG9pY2VzO1xuICAgIHRoaXMuaW5pdGlhbCA9IHR5cGVvZiBvcHRzLmluaXRpYWwgPT09ICdudW1iZXInXG4gICAgICA/IG9wdHMuaW5pdGlhbFxuICAgICAgOiBnZXRJbmRleChvcHRzLmNob2ljZXMsIG9wdHMuaW5pdGlhbCk7XG4gICAgdGhpcy5zZWxlY3QgPSB0aGlzLmluaXRpYWwgfHwgb3B0cy5jdXJzb3IgfHwgMDtcbiAgICB0aGlzLmkxOG4gPSB7IG5vTWF0Y2hlczogb3B0cy5ub01hdGNoZXMgfHwgJ25vIG1hdGNoZXMgZm91bmQnIH07XG4gICAgdGhpcy5mYWxsYmFjayA9IG9wdHMuZmFsbGJhY2sgfHwgdGhpcy5pbml0aWFsO1xuICAgIHRoaXMuY2xlYXJGaXJzdCA9IG9wdHMuY2xlYXJGaXJzdCB8fCBmYWxzZTtcbiAgICB0aGlzLnN1Z2dlc3Rpb25zID0gW107XG4gICAgdGhpcy5pbnB1dCA9ICcnO1xuICAgIHRoaXMubGltaXQgPSBvcHRzLmxpbWl0IHx8IDEwO1xuICAgIHRoaXMuY3Vyc29yID0gMDtcbiAgICB0aGlzLnRyYW5zZm9ybSA9IHN0eWxlLnJlbmRlcihvcHRzLnN0eWxlKTtcbiAgICB0aGlzLnNjYWxlID0gdGhpcy50cmFuc2Zvcm0uc2NhbGU7XG4gICAgdGhpcy5yZW5kZXIgPSB0aGlzLnJlbmRlci5iaW5kKHRoaXMpO1xuICAgIHRoaXMuY29tcGxldGUgPSB0aGlzLmNvbXBsZXRlLmJpbmQodGhpcyk7XG4gICAgdGhpcy5jbGVhciA9IGNsZWFyKCcnLCB0aGlzLm91dC5jb2x1bW5zKTtcbiAgICB0aGlzLmNvbXBsZXRlKHRoaXMucmVuZGVyKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgc2V0IGZhbGxiYWNrKGZiKSB7XG4gICAgdGhpcy5fZmIgPSBOdW1iZXIuaXNTYWZlSW50ZWdlcihwYXJzZUludChmYikpID8gcGFyc2VJbnQoZmIpIDogZmI7XG4gIH1cblxuICBnZXQgZmFsbGJhY2soKSB7XG4gICAgbGV0IGNob2ljZTtcbiAgICBpZiAodHlwZW9mIHRoaXMuX2ZiID09PSAnbnVtYmVyJylcbiAgICAgIGNob2ljZSA9IHRoaXMuY2hvaWNlc1t0aGlzLl9mYl07XG4gICAgZWxzZSBpZiAodHlwZW9mIHRoaXMuX2ZiID09PSAnc3RyaW5nJylcbiAgICAgIGNob2ljZSA9IHsgdGl0bGU6IHRoaXMuX2ZiIH07XG4gICAgcmV0dXJuIGNob2ljZSB8fCB0aGlzLl9mYiB8fCB7IHRpdGxlOiB0aGlzLmkxOG4ubm9NYXRjaGVzIH07XG4gIH1cblxuICBtb3ZlU2VsZWN0KGkpIHtcbiAgICB0aGlzLnNlbGVjdCA9IGk7XG4gICAgaWYgKHRoaXMuc3VnZ2VzdGlvbnMubGVuZ3RoID4gMClcbiAgICAgIHRoaXMudmFsdWUgPSBnZXRWYWwodGhpcy5zdWdnZXN0aW9ucywgaSk7XG4gICAgZWxzZSB0aGlzLnZhbHVlID0gdGhpcy5mYWxsYmFjay52YWx1ZTtcbiAgICB0aGlzLmZpcmUoKTtcbiAgfVxuXG4gIGFzeW5jIGNvbXBsZXRlKGNiKSB7XG4gICAgY29uc3QgcCA9ICh0aGlzLmNvbXBsZXRpbmcgPSB0aGlzLnN1Z2dlc3QodGhpcy5pbnB1dCwgdGhpcy5jaG9pY2VzKSk7XG4gICAgY29uc3Qgc3VnZ2VzdGlvbnMgPSBhd2FpdCBwO1xuXG4gICAgaWYgKHRoaXMuY29tcGxldGluZyAhPT0gcCkgcmV0dXJuO1xuICAgIHRoaXMuc3VnZ2VzdGlvbnMgPSBzdWdnZXN0aW9uc1xuICAgICAgLm1hcCgocywgaSwgYXJyKSA9PiAoeyB0aXRsZTogZ2V0VGl0bGUoYXJyLCBpKSwgdmFsdWU6IGdldFZhbChhcnIsIGkpLCBkZXNjcmlwdGlvbjogcy5kZXNjcmlwdGlvbiB9KSk7XG4gICAgdGhpcy5jb21wbGV0aW5nID0gZmFsc2U7XG4gICAgY29uc3QgbCA9IE1hdGgubWF4KHN1Z2dlc3Rpb25zLmxlbmd0aCAtIDEsIDApO1xuICAgIHRoaXMubW92ZVNlbGVjdChNYXRoLm1pbihsLCB0aGlzLnNlbGVjdCkpO1xuXG4gICAgY2IgJiYgY2IoKTtcbiAgfVxuXG4gIHJlc2V0KCkge1xuICAgIHRoaXMuaW5wdXQgPSAnJztcbiAgICB0aGlzLmNvbXBsZXRlKCgpID0+IHtcbiAgICAgIHRoaXMubW92ZVNlbGVjdCh0aGlzLmluaXRpYWwgIT09IHZvaWQgMCA/IHRoaXMuaW5pdGlhbCA6IDApO1xuICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICB9KTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZXhpdCgpIHtcbiAgICBpZiAodGhpcy5jbGVhckZpcnN0ICYmIHRoaXMuaW5wdXQubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5yZXNldCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRvbmUgPSB0aGlzLmV4aXRlZCA9IHRydWU7IFxuICAgICAgdGhpcy5hYm9ydGVkID0gZmFsc2U7XG4gICAgICB0aGlzLmZpcmUoKTtcbiAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgICB0aGlzLm91dC53cml0ZSgnXFxuJyk7XG4gICAgICB0aGlzLmNsb3NlKCk7XG4gICAgfVxuICB9XG5cbiAgYWJvcnQoKSB7XG4gICAgdGhpcy5kb25lID0gdGhpcy5hYm9ydGVkID0gdHJ1ZTtcbiAgICB0aGlzLmV4aXRlZCA9IGZhbHNlO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gICAgdGhpcy5vdXQud3JpdGUoJ1xcbicpO1xuICAgIHRoaXMuY2xvc2UoKTtcbiAgfVxuXG4gIHN1Ym1pdCgpIHtcbiAgICB0aGlzLmRvbmUgPSB0cnVlO1xuICAgIHRoaXMuYWJvcnRlZCA9IHRoaXMuZXhpdGVkID0gZmFsc2U7XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgICB0aGlzLm91dC53cml0ZSgnXFxuJyk7XG4gICAgdGhpcy5jbG9zZSgpO1xuICB9XG5cbiAgXyhjLCBrZXkpIHtcbiAgICBsZXQgczEgPSB0aGlzLmlucHV0LnNsaWNlKDAsIHRoaXMuY3Vyc29yKTtcbiAgICBsZXQgczIgPSB0aGlzLmlucHV0LnNsaWNlKHRoaXMuY3Vyc29yKTtcbiAgICB0aGlzLmlucHV0ID0gYCR7czF9JHtjfSR7czJ9YDtcbiAgICB0aGlzLmN1cnNvciA9IHMxLmxlbmd0aCsxO1xuICAgIHRoaXMuY29tcGxldGUodGhpcy5yZW5kZXIpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBkZWxldGUoKSB7XG4gICAgaWYgKHRoaXMuY3Vyc29yID09PSAwKSByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgbGV0IHMxID0gdGhpcy5pbnB1dC5zbGljZSgwLCB0aGlzLmN1cnNvci0xKTtcbiAgICBsZXQgczIgPSB0aGlzLmlucHV0LnNsaWNlKHRoaXMuY3Vyc29yKTtcbiAgICB0aGlzLmlucHV0ID0gYCR7czF9JHtzMn1gO1xuICAgIHRoaXMuY29tcGxldGUodGhpcy5yZW5kZXIpO1xuICAgIHRoaXMuY3Vyc29yID0gdGhpcy5jdXJzb3ItMTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZGVsZXRlRm9yd2FyZCgpIHtcbiAgICBpZih0aGlzLmN1cnNvcip0aGlzLnNjYWxlID49IHRoaXMucmVuZGVyZWQubGVuZ3RoKSByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgbGV0IHMxID0gdGhpcy5pbnB1dC5zbGljZSgwLCB0aGlzLmN1cnNvcik7XG4gICAgbGV0IHMyID0gdGhpcy5pbnB1dC5zbGljZSh0aGlzLmN1cnNvcisxKTtcbiAgICB0aGlzLmlucHV0ID0gYCR7czF9JHtzMn1gO1xuICAgIHRoaXMuY29tcGxldGUodGhpcy5yZW5kZXIpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBmaXJzdCgpIHtcbiAgICB0aGlzLm1vdmVTZWxlY3QoMCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIGxhc3QoKSB7XG4gICAgdGhpcy5tb3ZlU2VsZWN0KHRoaXMuc3VnZ2VzdGlvbnMubGVuZ3RoIC0gMSk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHVwKCkge1xuICAgIGlmICh0aGlzLnNlbGVjdCA9PT0gMCkge1xuICAgICAgdGhpcy5tb3ZlU2VsZWN0KHRoaXMuc3VnZ2VzdGlvbnMubGVuZ3RoIC0gMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubW92ZVNlbGVjdCh0aGlzLnNlbGVjdCAtIDEpO1xuICAgIH1cbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZG93bigpIHtcbiAgICBpZiAodGhpcy5zZWxlY3QgPT09IHRoaXMuc3VnZ2VzdGlvbnMubGVuZ3RoIC0gMSkge1xuICAgICAgdGhpcy5tb3ZlU2VsZWN0KDApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm1vdmVTZWxlY3QodGhpcy5zZWxlY3QgKyAxKTtcbiAgICB9XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIG5leHQoKSB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ID09PSB0aGlzLnN1Z2dlc3Rpb25zLmxlbmd0aCAtIDEpIHtcbiAgICAgIHRoaXMubW92ZVNlbGVjdCgwKTtcbiAgICB9IGVsc2UgdGhpcy5tb3ZlU2VsZWN0KHRoaXMuc2VsZWN0ICsgMSk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIG5leHRQYWdlKCkge1xuICAgIHRoaXMubW92ZVNlbGVjdChNYXRoLm1pbih0aGlzLnNlbGVjdCArIHRoaXMubGltaXQsIHRoaXMuc3VnZ2VzdGlvbnMubGVuZ3RoIC0gMSkpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBwcmV2UGFnZSgpIHtcbiAgICB0aGlzLm1vdmVTZWxlY3QoTWF0aC5tYXgodGhpcy5zZWxlY3QgLSB0aGlzLmxpbWl0LCAwKSk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIGxlZnQoKSB7XG4gICAgaWYgKHRoaXMuY3Vyc29yIDw9IDApIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgICB0aGlzLmN1cnNvciA9IHRoaXMuY3Vyc29yLTE7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHJpZ2h0KCkge1xuICAgIGlmICh0aGlzLmN1cnNvcip0aGlzLnNjYWxlID49IHRoaXMucmVuZGVyZWQubGVuZ3RoKSByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgdGhpcy5jdXJzb3IgPSB0aGlzLmN1cnNvcisxO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICByZW5kZXJPcHRpb24odiwgaG92ZXJlZCwgaXNTdGFydCwgaXNFbmQpIHtcbiAgICBsZXQgZGVzYztcbiAgICBsZXQgcHJlZml4ID0gaXNTdGFydCA/IGZpZ3VyZXMuYXJyb3dVcCA6IGlzRW5kID8gZmlndXJlcy5hcnJvd0Rvd24gOiAnICc7XG4gICAgbGV0IHRpdGxlID0gaG92ZXJlZCA/IGNvbG9yLmN5YW4oKS51bmRlcmxpbmUodi50aXRsZSkgOiB2LnRpdGxlO1xuICAgIHByZWZpeCA9IChob3ZlcmVkID8gY29sb3IuY3lhbihmaWd1cmVzLnBvaW50ZXIpICsgJyAnIDogJyAgJykgKyBwcmVmaXg7XG4gICAgaWYgKHYuZGVzY3JpcHRpb24pIHtcbiAgICAgIGRlc2MgPSBgIC0gJHt2LmRlc2NyaXB0aW9ufWA7XG4gICAgICBpZiAocHJlZml4Lmxlbmd0aCArIHRpdGxlLmxlbmd0aCArIGRlc2MubGVuZ3RoID49IHRoaXMub3V0LmNvbHVtbnNcbiAgICAgICAgfHwgdi5kZXNjcmlwdGlvbi5zcGxpdCgvXFxyP1xcbi8pLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgZGVzYyA9ICdcXG4nICsgd3JhcCh2LmRlc2NyaXB0aW9uLCB7IG1hcmdpbjogMywgd2lkdGg6IHRoaXMub3V0LmNvbHVtbnMgfSlcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHByZWZpeCArICcgJyArIHRpdGxlICsgY29sb3IuZ3JheShkZXNjIHx8ICcnKTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBpZiAodGhpcy5jbG9zZWQpIHJldHVybjtcbiAgICBpZiAodGhpcy5maXJzdFJlbmRlcikgdGhpcy5vdXQud3JpdGUoY3Vyc29yLmhpZGUpO1xuICAgIGVsc2UgdGhpcy5vdXQud3JpdGUoY2xlYXIodGhpcy5vdXRwdXRUZXh0LCB0aGlzLm91dC5jb2x1bW5zKSk7XG4gICAgc3VwZXIucmVuZGVyKCk7XG5cbiAgICBsZXQgeyBzdGFydEluZGV4LCBlbmRJbmRleCB9ID0gZW50cmllc1RvRGlzcGxheSh0aGlzLnNlbGVjdCwgdGhpcy5jaG9pY2VzLmxlbmd0aCwgdGhpcy5saW1pdCk7XG5cbiAgICB0aGlzLm91dHB1dFRleHQgPSBbXG4gICAgICBzdHlsZS5zeW1ib2wodGhpcy5kb25lLCB0aGlzLmFib3J0ZWQsIHRoaXMuZXhpdGVkKSxcbiAgICAgIGNvbG9yLmJvbGQodGhpcy5tc2cpLFxuICAgICAgc3R5bGUuZGVsaW1pdGVyKHRoaXMuY29tcGxldGluZyksXG4gICAgICB0aGlzLmRvbmUgJiYgdGhpcy5zdWdnZXN0aW9uc1t0aGlzLnNlbGVjdF1cbiAgICAgICAgPyB0aGlzLnN1Z2dlc3Rpb25zW3RoaXMuc2VsZWN0XS50aXRsZVxuICAgICAgICA6IHRoaXMucmVuZGVyZWQgPSB0aGlzLnRyYW5zZm9ybS5yZW5kZXIodGhpcy5pbnB1dClcbiAgICBdLmpvaW4oJyAnKTtcblxuICAgIGlmICghdGhpcy5kb25lKSB7XG4gICAgICBjb25zdCBzdWdnZXN0aW9ucyA9IHRoaXMuc3VnZ2VzdGlvbnNcbiAgICAgICAgLnNsaWNlKHN0YXJ0SW5kZXgsIGVuZEluZGV4KVxuICAgICAgICAubWFwKChpdGVtLCBpKSA9PiAgdGhpcy5yZW5kZXJPcHRpb24oaXRlbSxcbiAgICAgICAgICB0aGlzLnNlbGVjdCA9PT0gaSArIHN0YXJ0SW5kZXgsXG4gICAgICAgICAgaSA9PT0gMCAmJiBzdGFydEluZGV4ID4gMCxcbiAgICAgICAgICBpICsgc3RhcnRJbmRleCA9PT0gZW5kSW5kZXggLSAxICYmIGVuZEluZGV4IDwgdGhpcy5jaG9pY2VzLmxlbmd0aCkpXG4gICAgICAgIC5qb2luKCdcXG4nKTtcbiAgICAgIHRoaXMub3V0cHV0VGV4dCArPSBgXFxuYCArIChzdWdnZXN0aW9ucyB8fCBjb2xvci5ncmF5KHRoaXMuZmFsbGJhY2sudGl0bGUpKTtcbiAgICB9XG5cbiAgICB0aGlzLm91dC53cml0ZShlcmFzZS5saW5lICsgY3Vyc29yLnRvKDApICsgdGhpcy5vdXRwdXRUZXh0KTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEF1dG9jb21wbGV0ZVByb21wdDtcbiIsIid1c2Ugc3RyaWN0JztcblxuY29uc3QgY29sb3IgPSByZXF1aXJlKCdrbGV1cicpO1xuY29uc3QgeyBjdXJzb3IgfSA9IHJlcXVpcmUoJ3Npc3RlcmFuc2knKTtcbmNvbnN0IE11bHRpc2VsZWN0UHJvbXB0ID0gcmVxdWlyZSgnLi9tdWx0aXNlbGVjdCcpO1xuY29uc3QgeyBjbGVhciwgc3R5bGUsIGZpZ3VyZXMgfSA9IHJlcXVpcmUoJy4uL3V0aWwnKTtcbi8qKlxuICogTXVsdGlzZWxlY3RQcm9tcHQgQmFzZSBFbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyBPcHRpb25zXG4gKiBAcGFyYW0ge1N0cmluZ30gb3B0cy5tZXNzYWdlIE1lc3NhZ2VcbiAqIEBwYXJhbSB7QXJyYXl9IG9wdHMuY2hvaWNlcyBBcnJheSBvZiBjaG9pY2Ugb2JqZWN0c1xuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLmhpbnRdIEhpbnQgdG8gZGlzcGxheVxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLndhcm5dIEhpbnQgc2hvd24gZm9yIGRpc2FibGVkIGNob2ljZXNcbiAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0cy5tYXhdIE1heCBjaG9pY2VzXG4gKiBAcGFyYW0ge051bWJlcn0gW29wdHMuY3Vyc29yPTBdIEN1cnNvciBzdGFydCBwb3NpdGlvblxuICogQHBhcmFtIHtTdHJlYW19IFtvcHRzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFtvcHRzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKi9cbmNsYXNzIEF1dG9jb21wbGV0ZU11bHRpc2VsZWN0UHJvbXB0IGV4dGVuZHMgTXVsdGlzZWxlY3RQcm9tcHQge1xuICBjb25zdHJ1Y3RvcihvcHRzPXt9KSB7XG4gICAgb3B0cy5vdmVycmlkZVJlbmRlciA9IHRydWU7XG4gICAgc3VwZXIob3B0cyk7XG4gICAgdGhpcy5pbnB1dFZhbHVlID0gJyc7XG4gICAgdGhpcy5jbGVhciA9IGNsZWFyKCcnLCB0aGlzLm91dC5jb2x1bW5zKTtcbiAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IHRoaXMudmFsdWU7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIGxhc3QoKSB7XG4gICAgdGhpcy5jdXJzb3IgPSB0aGlzLmZpbHRlcmVkT3B0aW9ucy5sZW5ndGggLSAxO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cbiAgbmV4dCgpIHtcbiAgICB0aGlzLmN1cnNvciA9ICh0aGlzLmN1cnNvciArIDEpICUgdGhpcy5maWx0ZXJlZE9wdGlvbnMubGVuZ3RoO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICB1cCgpIHtcbiAgICBpZiAodGhpcy5jdXJzb3IgPT09IDApIHtcbiAgICAgIHRoaXMuY3Vyc29yID0gdGhpcy5maWx0ZXJlZE9wdGlvbnMubGVuZ3RoIC0gMTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jdXJzb3ItLTtcbiAgICB9XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIGRvd24oKSB7XG4gICAgaWYgKHRoaXMuY3Vyc29yID09PSB0aGlzLmZpbHRlcmVkT3B0aW9ucy5sZW5ndGggLSAxKSB7XG4gICAgICB0aGlzLmN1cnNvciA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY3Vyc29yKys7XG4gICAgfVxuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBsZWZ0KCkge1xuICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zW3RoaXMuY3Vyc29yXS5zZWxlY3RlZCA9IGZhbHNlO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICByaWdodCgpIHtcbiAgICBpZiAodGhpcy52YWx1ZS5maWx0ZXIoZSA9PiBlLnNlbGVjdGVkKS5sZW5ndGggPj0gdGhpcy5tYXhDaG9pY2VzKSByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgdGhpcy5maWx0ZXJlZE9wdGlvbnNbdGhpcy5jdXJzb3JdLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZGVsZXRlKCkge1xuICAgIGlmICh0aGlzLmlucHV0VmFsdWUubGVuZ3RoKSB7XG4gICAgICB0aGlzLmlucHV0VmFsdWUgPSB0aGlzLmlucHV0VmFsdWUuc3Vic3RyKDAsIHRoaXMuaW5wdXRWYWx1ZS5sZW5ndGggLSAxKTtcbiAgICAgIHRoaXMudXBkYXRlRmlsdGVyZWRPcHRpb25zKCk7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlRmlsdGVyZWRPcHRpb25zKCkge1xuICAgIGNvbnN0IGN1cnJlbnRIaWdobGlnaHQgPSB0aGlzLmZpbHRlcmVkT3B0aW9uc1t0aGlzLmN1cnNvcl07XG4gICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSB0aGlzLnZhbHVlXG4gICAgICAuZmlsdGVyKHYgPT4ge1xuICAgICAgICBpZiAodGhpcy5pbnB1dFZhbHVlKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiB2LnRpdGxlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgaWYgKHYudGl0bGUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLmlucHV0VmFsdWUudG9Mb3dlckNhc2UoKSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0eXBlb2Ygdi52YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGlmICh2LnZhbHVlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy5pbnB1dFZhbHVlLnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9KTtcbiAgICBjb25zdCBuZXdIaWdobGlnaHRJbmRleCA9IHRoaXMuZmlsdGVyZWRPcHRpb25zLmZpbmRJbmRleCh2ID0+IHYgPT09IGN1cnJlbnRIaWdobGlnaHQpXG4gICAgdGhpcy5jdXJzb3IgPSBuZXdIaWdobGlnaHRJbmRleCA8IDAgPyAwIDogbmV3SGlnaGxpZ2h0SW5kZXg7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIGhhbmRsZVNwYWNlVG9nZ2xlKCkge1xuICAgIGNvbnN0IHYgPSB0aGlzLmZpbHRlcmVkT3B0aW9uc1t0aGlzLmN1cnNvcl07XG5cbiAgICBpZiAodi5zZWxlY3RlZCkge1xuICAgICAgdi5zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICB9IGVsc2UgaWYgKHYuZGlzYWJsZWQgfHwgdGhpcy52YWx1ZS5maWx0ZXIoZSA9PiBlLnNlbGVjdGVkKS5sZW5ndGggPj0gdGhpcy5tYXhDaG9pY2VzKSB7XG4gICAgICByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHYuc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVJbnB1dENoYW5nZShjKSB7XG4gICAgdGhpcy5pbnB1dFZhbHVlID0gdGhpcy5pbnB1dFZhbHVlICsgYztcbiAgICB0aGlzLnVwZGF0ZUZpbHRlcmVkT3B0aW9ucygpO1xuICB9XG5cbiAgXyhjLCBrZXkpIHtcbiAgICBpZiAoYyA9PT0gJyAnKSB7XG4gICAgICB0aGlzLmhhbmRsZVNwYWNlVG9nZ2xlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaGFuZGxlSW5wdXRDaGFuZ2UoYyk7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVySW5zdHJ1Y3Rpb25zKCkge1xuICAgIGlmICh0aGlzLmluc3RydWN0aW9ucyA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuaW5zdHJ1Y3Rpb25zKSB7XG4gICAgICBpZiAodHlwZW9mIHRoaXMuaW5zdHJ1Y3Rpb25zID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gdGhpcy5pbnN0cnVjdGlvbnM7XG4gICAgICB9XG4gICAgICByZXR1cm4gYFxuSW5zdHJ1Y3Rpb25zOlxuICAgICR7ZmlndXJlcy5hcnJvd1VwfS8ke2ZpZ3VyZXMuYXJyb3dEb3dufTogSGlnaGxpZ2h0IG9wdGlvblxuICAgICR7ZmlndXJlcy5hcnJvd0xlZnR9LyR7ZmlndXJlcy5hcnJvd1JpZ2h0fS9bc3BhY2VdOiBUb2dnbGUgc2VsZWN0aW9uXG4gICAgW2EsYixjXS9kZWxldGU6IEZpbHRlciBjaG9pY2VzXG4gICAgZW50ZXIvcmV0dXJuOiBDb21wbGV0ZSBhbnN3ZXJcbmA7XG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIHJlbmRlckN1cnJlbnRJbnB1dCgpIHtcbiAgICByZXR1cm4gYFxuRmlsdGVyZWQgcmVzdWx0cyBmb3I6ICR7dGhpcy5pbnB1dFZhbHVlID8gdGhpcy5pbnB1dFZhbHVlIDogY29sb3IuZ3JheSgnRW50ZXIgc29tZXRoaW5nIHRvIGZpbHRlcicpfVxcbmA7XG4gIH1cblxuICByZW5kZXJPcHRpb24oY3Vyc29yLCB2LCBpKSB7XG4gICAgbGV0IHRpdGxlO1xuICAgIGlmICh2LmRpc2FibGVkKSB0aXRsZSA9IGN1cnNvciA9PT0gaSA/IGNvbG9yLmdyYXkoKS51bmRlcmxpbmUodi50aXRsZSkgOiBjb2xvci5zdHJpa2V0aHJvdWdoKCkuZ3JheSh2LnRpdGxlKTtcbiAgICBlbHNlIHRpdGxlID0gY3Vyc29yID09PSBpID8gY29sb3IuY3lhbigpLnVuZGVybGluZSh2LnRpdGxlKSA6IHYudGl0bGU7XG4gICAgcmV0dXJuICh2LnNlbGVjdGVkID8gY29sb3IuZ3JlZW4oZmlndXJlcy5yYWRpb09uKSA6IGZpZ3VyZXMucmFkaW9PZmYpICsgJyAgJyArIHRpdGxlXG4gIH1cblxuICByZW5kZXJEb25lT3JJbnN0cnVjdGlvbnMoKSB7XG4gICAgaWYgKHRoaXMuZG9uZSkge1xuICAgICAgcmV0dXJuIHRoaXMudmFsdWVcbiAgICAgICAgLmZpbHRlcihlID0+IGUuc2VsZWN0ZWQpXG4gICAgICAgIC5tYXAodiA9PiB2LnRpdGxlKVxuICAgICAgICAuam9pbignLCAnKTtcbiAgICB9XG5cbiAgICBjb25zdCBvdXRwdXQgPSBbY29sb3IuZ3JheSh0aGlzLmhpbnQpLCB0aGlzLnJlbmRlckluc3RydWN0aW9ucygpLCB0aGlzLnJlbmRlckN1cnJlbnRJbnB1dCgpXTtcblxuICAgIGlmICh0aGlzLmZpbHRlcmVkT3B0aW9ucy5sZW5ndGggJiYgdGhpcy5maWx0ZXJlZE9wdGlvbnNbdGhpcy5jdXJzb3JdLmRpc2FibGVkKSB7XG4gICAgICBvdXRwdXQucHVzaChjb2xvci55ZWxsb3codGhpcy53YXJuKSk7XG4gICAgfVxuICAgIHJldHVybiBvdXRwdXQuam9pbignICcpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGlmICh0aGlzLmNsb3NlZCkgcmV0dXJuO1xuICAgIGlmICh0aGlzLmZpcnN0UmVuZGVyKSB0aGlzLm91dC53cml0ZShjdXJzb3IuaGlkZSk7XG4gICAgc3VwZXIucmVuZGVyKCk7XG5cbiAgICAvLyBwcmludCBwcm9tcHRcblxuICAgIGxldCBwcm9tcHQgPSBbXG4gICAgICBzdHlsZS5zeW1ib2wodGhpcy5kb25lLCB0aGlzLmFib3J0ZWQpLFxuICAgICAgY29sb3IuYm9sZCh0aGlzLm1zZyksXG4gICAgICBzdHlsZS5kZWxpbWl0ZXIoZmFsc2UpLFxuICAgICAgdGhpcy5yZW5kZXJEb25lT3JJbnN0cnVjdGlvbnMoKVxuICAgIF0uam9pbignICcpO1xuXG4gICAgaWYgKHRoaXMuc2hvd01pbkVycm9yKSB7XG4gICAgICBwcm9tcHQgKz0gY29sb3IucmVkKGBZb3UgbXVzdCBzZWxlY3QgYSBtaW5pbXVtIG9mICR7dGhpcy5taW5TZWxlY3RlZH0gY2hvaWNlcy5gKTtcbiAgICAgIHRoaXMuc2hvd01pbkVycm9yID0gZmFsc2U7XG4gICAgfVxuICAgIHByb21wdCArPSB0aGlzLnJlbmRlck9wdGlvbnModGhpcy5maWx0ZXJlZE9wdGlvbnMpO1xuXG4gICAgdGhpcy5vdXQud3JpdGUodGhpcy5jbGVhciArIHByb21wdCk7XG4gICAgdGhpcy5jbGVhciA9IGNsZWFyKHByb21wdCwgdGhpcy5vdXQuY29sdW1ucyk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBBdXRvY29tcGxldGVNdWx0aXNlbGVjdFByb21wdDtcbiIsImNvbnN0IGNvbG9yID0gcmVxdWlyZSgna2xldXInKTtcbmNvbnN0IFByb21wdCA9IHJlcXVpcmUoJy4vcHJvbXB0Jyk7XG5jb25zdCB7IHN0eWxlLCBjbGVhciB9ID0gcmVxdWlyZSgnLi4vdXRpbCcpO1xuY29uc3QgeyBlcmFzZSwgY3Vyc29yIH0gPSByZXF1aXJlKCdzaXN0ZXJhbnNpJyk7XG5cbi8qKlxuICogQ29uZmlybVByb21wdCBCYXNlIEVsZW1lbnRcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIE9wdGlvbnNcbiAqIEBwYXJhbSB7U3RyaW5nfSBvcHRzLm1lc3NhZ2UgTWVzc2FnZVxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0cy5pbml0aWFsXSBEZWZhdWx0IHZhbHVlICh0cnVlL2ZhbHNlKVxuICogQHBhcmFtIHtTdHJlYW19IFtvcHRzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFtvcHRzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKiBAcGFyYW0ge1N0cmluZ30gW29wdHMueWVzXSBUaGUgXCJZZXNcIiBsYWJlbFxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLnllc09wdGlvbl0gVGhlIFwiWWVzXCIgb3B0aW9uIHdoZW4gY2hvb3NpbmcgYmV0d2VlbiB5ZXMvbm9cbiAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5ub10gVGhlIFwiTm9cIiBsYWJlbFxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLm5vT3B0aW9uXSBUaGUgXCJOb1wiIG9wdGlvbiB3aGVuIGNob29zaW5nIGJldHdlZW4geWVzL25vXG4gKi9cbmNsYXNzIENvbmZpcm1Qcm9tcHQgZXh0ZW5kcyBQcm9tcHQge1xuICBjb25zdHJ1Y3RvcihvcHRzPXt9KSB7XG4gICAgc3VwZXIob3B0cyk7XG4gICAgdGhpcy5tc2cgPSBvcHRzLm1lc3NhZ2U7XG4gICAgdGhpcy52YWx1ZSA9IG9wdHMuaW5pdGlhbDtcbiAgICB0aGlzLmluaXRpYWxWYWx1ZSA9ICEhb3B0cy5pbml0aWFsO1xuICAgIHRoaXMueWVzTXNnID0gb3B0cy55ZXMgfHwgJ3llcyc7XG4gICAgdGhpcy55ZXNPcHRpb24gPSBvcHRzLnllc09wdGlvbiB8fCAnKFkvbiknO1xuICAgIHRoaXMubm9Nc2cgPSBvcHRzLm5vIHx8ICdubyc7XG4gICAgdGhpcy5ub09wdGlvbiA9IG9wdHMubm9PcHRpb24gfHwgJyh5L04pJztcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgcmVzZXQoKSB7XG4gICAgdGhpcy52YWx1ZSA9IHRoaXMuaW5pdGlhbFZhbHVlO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBleGl0KCkge1xuICAgIHRoaXMuYWJvcnQoKTtcbiAgfVxuXG4gIGFib3J0KCkge1xuICAgIHRoaXMuZG9uZSA9IHRoaXMuYWJvcnRlZCA9IHRydWU7XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgICB0aGlzLm91dC53cml0ZSgnXFxuJyk7XG4gICAgdGhpcy5jbG9zZSgpO1xuICB9XG5cbiAgc3VibWl0KCkge1xuICAgIHRoaXMudmFsdWUgPSB0aGlzLnZhbHVlIHx8IGZhbHNlO1xuICAgIHRoaXMuZG9uZSA9IHRydWU7XG4gICAgdGhpcy5hYm9ydGVkID0gZmFsc2U7XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgICB0aGlzLm91dC53cml0ZSgnXFxuJyk7XG4gICAgdGhpcy5jbG9zZSgpO1xuICB9XG5cbiAgXyhjLCBrZXkpIHtcbiAgICBpZiAoYy50b0xvd2VyQ2FzZSgpID09PSAneScpIHtcbiAgICAgIHRoaXMudmFsdWUgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRoaXMuc3VibWl0KCk7XG4gICAgfVxuICAgIGlmIChjLnRvTG93ZXJDYXNlKCkgPT09ICduJykge1xuICAgICAgdGhpcy52YWx1ZSA9IGZhbHNlO1xuICAgICAgcmV0dXJuIHRoaXMuc3VibWl0KCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBpZiAodGhpcy5jbG9zZWQpIHJldHVybjtcbiAgICBpZiAodGhpcy5maXJzdFJlbmRlcikgdGhpcy5vdXQud3JpdGUoY3Vyc29yLmhpZGUpO1xuICAgIGVsc2UgdGhpcy5vdXQud3JpdGUoY2xlYXIodGhpcy5vdXRwdXRUZXh0LCB0aGlzLm91dC5jb2x1bW5zKSk7XG4gICAgc3VwZXIucmVuZGVyKCk7XG5cbiAgICB0aGlzLm91dHB1dFRleHQgPSBbXG4gICAgICBzdHlsZS5zeW1ib2wodGhpcy5kb25lLCB0aGlzLmFib3J0ZWQpLFxuICAgICAgY29sb3IuYm9sZCh0aGlzLm1zZyksXG4gICAgICBzdHlsZS5kZWxpbWl0ZXIodGhpcy5kb25lKSxcbiAgICAgIHRoaXMuZG9uZSA/ICh0aGlzLnZhbHVlID8gdGhpcy55ZXNNc2cgOiB0aGlzLm5vTXNnKVxuICAgICAgICAgIDogY29sb3IuZ3JheSh0aGlzLmluaXRpYWxWYWx1ZSA/IHRoaXMueWVzT3B0aW9uIDogdGhpcy5ub09wdGlvbilcbiAgICBdLmpvaW4oJyAnKTtcblxuICAgIHRoaXMub3V0LndyaXRlKGVyYXNlLmxpbmUgKyBjdXJzb3IudG8oMCkgKyB0aGlzLm91dHB1dFRleHQpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gQ29uZmlybVByb21wdDtcbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIFRleHRQcm9tcHQ6IHJlcXVpcmUoJy4vdGV4dCcpLFxuICBTZWxlY3RQcm9tcHQ6IHJlcXVpcmUoJy4vc2VsZWN0JyksXG4gIFRvZ2dsZVByb21wdDogcmVxdWlyZSgnLi90b2dnbGUnKSxcbiAgRGF0ZVByb21wdDogcmVxdWlyZSgnLi9kYXRlJyksXG4gIE51bWJlclByb21wdDogcmVxdWlyZSgnLi9udW1iZXInKSxcbiAgTXVsdGlzZWxlY3RQcm9tcHQ6IHJlcXVpcmUoJy4vbXVsdGlzZWxlY3QnKSxcbiAgQXV0b2NvbXBsZXRlUHJvbXB0OiByZXF1aXJlKCcuL2F1dG9jb21wbGV0ZScpLFxuICBBdXRvY29tcGxldGVNdWx0aXNlbGVjdFByb21wdDogcmVxdWlyZSgnLi9hdXRvY29tcGxldGVNdWx0aXNlbGVjdCcpLFxuICBDb25maXJtUHJvbXB0OiByZXF1aXJlKCcuL2NvbmZpcm0nKVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbmNvbnN0ICQgPSBleHBvcnRzO1xuY29uc3QgZWwgPSByZXF1aXJlKCcuL2VsZW1lbnRzJyk7XG5jb25zdCBub29wID0gdiA9PiB2O1xuXG5mdW5jdGlvbiB0b1Byb21wdCh0eXBlLCBhcmdzLCBvcHRzPXt9KSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzLCByZWopID0+IHtcbiAgICBjb25zdCBwID0gbmV3IGVsW3R5cGVdKGFyZ3MpO1xuICAgIGNvbnN0IG9uQWJvcnQgPSBvcHRzLm9uQWJvcnQgfHwgbm9vcDtcbiAgICBjb25zdCBvblN1Ym1pdCA9IG9wdHMub25TdWJtaXQgfHwgbm9vcDtcbiAgICBjb25zdCBvbkV4aXQgPSBvcHRzLm9uRXhpdCB8fCBub29wO1xuICAgIHAub24oJ3N0YXRlJywgYXJncy5vblN0YXRlIHx8IG5vb3ApO1xuICAgIHAub24oJ3N1Ym1pdCcsIHggPT4gcmVzKG9uU3VibWl0KHgpKSk7XG4gICAgcC5vbignZXhpdCcsIHggPT4gcmVzKG9uRXhpdCh4KSkpO1xuICAgIHAub24oJ2Fib3J0JywgeCA9PiByZWoob25BYm9ydCh4KSkpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBUZXh0IHByb21wdFxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MubWVzc2FnZSBQcm9tcHQgbWVzc2FnZSB0byBkaXNwbGF5XG4gKiBAcGFyYW0ge3N0cmluZ30gW2FyZ3MuaW5pdGlhbF0gRGVmYXVsdCBzdHJpbmcgdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBbYXJncy5zdHlsZT1cImRlZmF1bHRcIl0gUmVuZGVyIHN0eWxlICgnZGVmYXVsdCcsICdwYXNzd29yZCcsICdpbnZpc2libGUnKVxuICogQHBhcmFtIHtmdW5jdGlvbn0gW2FyZ3Mub25TdGF0ZV0gT24gc3RhdGUgY2hhbmdlIGNhbGxiYWNrXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBbYXJncy52YWxpZGF0ZV0gRnVuY3Rpb24gdG8gdmFsaWRhdGUgdXNlciBpbnB1dFxuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSB3aXRoIHVzZXIgaW5wdXRcbiAqL1xuJC50ZXh0ID0gYXJncyA9PiB0b1Byb21wdCgnVGV4dFByb21wdCcsIGFyZ3MpO1xuXG4vKipcbiAqIFBhc3N3b3JkIHByb21wdCB3aXRoIG1hc2tlZCBpbnB1dFxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MubWVzc2FnZSBQcm9tcHQgbWVzc2FnZSB0byBkaXNwbGF5XG4gKiBAcGFyYW0ge3N0cmluZ30gW2FyZ3MuaW5pdGlhbF0gRGVmYXVsdCBzdHJpbmcgdmFsdWVcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IFthcmdzLm9uU3RhdGVdIE9uIHN0YXRlIGNoYW5nZSBjYWxsYmFja1xuICogQHBhcmFtIHtmdW5jdGlvbn0gW2FyZ3MudmFsaWRhdGVdIEZ1bmN0aW9uIHRvIHZhbGlkYXRlIHVzZXIgaW5wdXRcbiAqIEBwYXJhbSB7U3RyZWFtfSBbYXJncy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbYXJncy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICogQHJldHVybnMge1Byb21pc2V9IFByb21pc2Ugd2l0aCB1c2VyIGlucHV0XG4gKi9cbiQucGFzc3dvcmQgPSBhcmdzID0+IHtcbiAgYXJncy5zdHlsZSA9ICdwYXNzd29yZCc7XG4gIHJldHVybiAkLnRleHQoYXJncyk7XG59O1xuXG4vKipcbiAqIFByb21wdCB3aGVyZSBpbnB1dCBpcyBpbnZpc2libGUsIGxpa2Ugc3Vkb1xuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MubWVzc2FnZSBQcm9tcHQgbWVzc2FnZSB0byBkaXNwbGF5XG4gKiBAcGFyYW0ge3N0cmluZ30gW2FyZ3MuaW5pdGlhbF0gRGVmYXVsdCBzdHJpbmcgdmFsdWVcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IFthcmdzLm9uU3RhdGVdIE9uIHN0YXRlIGNoYW5nZSBjYWxsYmFja1xuICogQHBhcmFtIHtmdW5jdGlvbn0gW2FyZ3MudmFsaWRhdGVdIEZ1bmN0aW9uIHRvIHZhbGlkYXRlIHVzZXIgaW5wdXRcbiAqIEBwYXJhbSB7U3RyZWFtfSBbYXJncy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbYXJncy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICogQHJldHVybnMge1Byb21pc2V9IFByb21pc2Ugd2l0aCB1c2VyIGlucHV0XG4gKi9cbiQuaW52aXNpYmxlID0gYXJncyA9PiB7XG4gIGFyZ3Muc3R5bGUgPSAnaW52aXNpYmxlJztcbiAgcmV0dXJuICQudGV4dChhcmdzKTtcbn07XG5cbi8qKlxuICogTnVtYmVyIHByb21wdFxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MubWVzc2FnZSBQcm9tcHQgbWVzc2FnZSB0byBkaXNwbGF5XG4gKiBAcGFyYW0ge251bWJlcn0gYXJncy5pbml0aWFsIERlZmF1bHQgbnVtYmVyIHZhbHVlXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBbYXJncy5vblN0YXRlXSBPbiBzdGF0ZSBjaGFuZ2UgY2FsbGJhY2tcbiAqIEBwYXJhbSB7bnVtYmVyfSBbYXJncy5tYXhdIE1heCB2YWx1ZVxuICogQHBhcmFtIHtudW1iZXJ9IFthcmdzLm1pbl0gTWluIHZhbHVlXG4gKiBAcGFyYW0ge3N0cmluZ30gW2FyZ3Muc3R5bGU9XCJkZWZhdWx0XCJdIFJlbmRlciBzdHlsZSAoJ2RlZmF1bHQnLCAncGFzc3dvcmQnLCAnaW52aXNpYmxlJylcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdHMuZmxvYXQ9ZmFsc2VdIFBhcnNlIGlucHV0IGFzIGZsb2F0c1xuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRzLnJvdW5kPTJdIFJvdW5kIGZsb2F0cyB0byB4IGRlY2ltYWxzXG4gKiBAcGFyYW0ge051bWJlcn0gW29wdHMuaW5jcmVtZW50PTFdIE51bWJlciB0byBpbmNyZW1lbnQgYnkgd2hlbiB1c2luZyBhcnJvdy1rZXlzXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBbYXJncy52YWxpZGF0ZV0gRnVuY3Rpb24gdG8gdmFsaWRhdGUgdXNlciBpbnB1dFxuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSB3aXRoIHVzZXIgaW5wdXRcbiAqL1xuJC5udW1iZXIgPSBhcmdzID0+IHRvUHJvbXB0KCdOdW1iZXJQcm9tcHQnLCBhcmdzKTtcblxuLyoqXG4gKiBEYXRlIHByb21wdFxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MubWVzc2FnZSBQcm9tcHQgbWVzc2FnZSB0byBkaXNwbGF5XG4gKiBAcGFyYW0ge251bWJlcn0gYXJncy5pbml0aWFsIERlZmF1bHQgbnVtYmVyIHZhbHVlXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBbYXJncy5vblN0YXRlXSBPbiBzdGF0ZSBjaGFuZ2UgY2FsbGJhY2tcbiAqIEBwYXJhbSB7bnVtYmVyfSBbYXJncy5tYXhdIE1heCB2YWx1ZVxuICogQHBhcmFtIHtudW1iZXJ9IFthcmdzLm1pbl0gTWluIHZhbHVlXG4gKiBAcGFyYW0ge3N0cmluZ30gW2FyZ3Muc3R5bGU9XCJkZWZhdWx0XCJdIFJlbmRlciBzdHlsZSAoJ2RlZmF1bHQnLCAncGFzc3dvcmQnLCAnaW52aXNpYmxlJylcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdHMuZmxvYXQ9ZmFsc2VdIFBhcnNlIGlucHV0IGFzIGZsb2F0c1xuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRzLnJvdW5kPTJdIFJvdW5kIGZsb2F0cyB0byB4IGRlY2ltYWxzXG4gKiBAcGFyYW0ge051bWJlcn0gW29wdHMuaW5jcmVtZW50PTFdIE51bWJlciB0byBpbmNyZW1lbnQgYnkgd2hlbiB1c2luZyBhcnJvdy1rZXlzXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBbYXJncy52YWxpZGF0ZV0gRnVuY3Rpb24gdG8gdmFsaWRhdGUgdXNlciBpbnB1dFxuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSB3aXRoIHVzZXIgaW5wdXRcbiAqL1xuJC5kYXRlID0gYXJncyA9PiB0b1Byb21wdCgnRGF0ZVByb21wdCcsIGFyZ3MpO1xuXG4vKipcbiAqIENsYXNzaWMgeWVzL25vIHByb21wdFxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MubWVzc2FnZSBQcm9tcHQgbWVzc2FnZSB0byBkaXNwbGF5XG4gKiBAcGFyYW0ge2Jvb2xlYW59IFthcmdzLmluaXRpYWw9ZmFsc2VdIERlZmF1bHQgdmFsdWVcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IFthcmdzLm9uU3RhdGVdIE9uIHN0YXRlIGNoYW5nZSBjYWxsYmFja1xuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSB3aXRoIHVzZXIgaW5wdXRcbiAqL1xuJC5jb25maXJtID0gYXJncyA9PiB0b1Byb21wdCgnQ29uZmlybVByb21wdCcsIGFyZ3MpO1xuXG4vKipcbiAqIExpc3QgcHJvbXB0LCBzcGxpdCBpbnRwdXQgc3RyaW5nIGJ5IGBzZXBlcmF0b3JgXG4gKiBAcGFyYW0ge3N0cmluZ30gYXJncy5tZXNzYWdlIFByb21wdCBtZXNzYWdlIHRvIGRpc3BsYXlcbiAqIEBwYXJhbSB7c3RyaW5nfSBbYXJncy5pbml0aWFsXSBEZWZhdWx0IHN0cmluZyB2YWx1ZVxuICogQHBhcmFtIHtzdHJpbmd9IFthcmdzLnN0eWxlPVwiZGVmYXVsdFwiXSBSZW5kZXIgc3R5bGUgKCdkZWZhdWx0JywgJ3Bhc3N3b3JkJywgJ2ludmlzaWJsZScpXG4gKiBAcGFyYW0ge3N0cmluZ30gW2FyZ3Muc2VwYXJhdG9yXSBTdHJpbmcgc2VwYXJhdG9yXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBbYXJncy5vblN0YXRlXSBPbiBzdGF0ZSBjaGFuZ2UgY2FsbGJhY2tcbiAqIEBwYXJhbSB7U3RyZWFtfSBbYXJncy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbYXJncy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICogQHJldHVybnMge1Byb21pc2V9IFByb21pc2Ugd2l0aCB1c2VyIGlucHV0LCBpbiBmb3JtIG9mIGFuIGBBcnJheWBcbiAqL1xuJC5saXN0ID0gYXJncyA9PiB7XG4gIGNvbnN0IHNlcCA9IGFyZ3Muc2VwYXJhdG9yIHx8ICcsJztcbiAgcmV0dXJuIHRvUHJvbXB0KCdUZXh0UHJvbXB0JywgYXJncywge1xuICAgIG9uU3VibWl0OiBzdHIgPT4gc3RyLnNwbGl0KHNlcCkubWFwKHMgPT4gcy50cmltKCkpXG4gIH0pO1xufTtcblxuLyoqXG4gKiBUb2dnbGUvc3dpdGNoIHByb21wdFxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MubWVzc2FnZSBQcm9tcHQgbWVzc2FnZSB0byBkaXNwbGF5XG4gKiBAcGFyYW0ge2Jvb2xlYW59IFthcmdzLmluaXRpYWw9ZmFsc2VdIERlZmF1bHQgdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBbYXJncy5hY3RpdmU9XCJvblwiXSBUZXh0IGZvciBgYWN0aXZlYCBzdGF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IFthcmdzLmluYWN0aXZlPVwib2ZmXCJdIFRleHQgZm9yIGBpbmFjdGl2ZWAgc3RhdGVcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IFthcmdzLm9uU3RhdGVdIE9uIHN0YXRlIGNoYW5nZSBjYWxsYmFja1xuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSB3aXRoIHVzZXIgaW5wdXRcbiAqL1xuJC50b2dnbGUgPSBhcmdzID0+IHRvUHJvbXB0KCdUb2dnbGVQcm9tcHQnLCBhcmdzKTtcblxuLyoqXG4gKiBJbnRlcmFjdGl2ZSBzZWxlY3QgcHJvbXB0XG4gKiBAcGFyYW0ge3N0cmluZ30gYXJncy5tZXNzYWdlIFByb21wdCBtZXNzYWdlIHRvIGRpc3BsYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFyZ3MuY2hvaWNlcyBBcnJheSBvZiBjaG9pY2VzIG9iamVjdHMgYFt7IHRpdGxlLCB2YWx1ZSB9LCAuLi5dYFxuICogQHBhcmFtIHtudW1iZXJ9IFthcmdzLmluaXRpYWxdIEluZGV4IG9mIGRlZmF1bHQgdmFsdWVcbiAqIEBwYXJhbSB7U3RyaW5nfSBbYXJncy5oaW50XSBIaW50IHRvIGRpc3BsYXlcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IFthcmdzLm9uU3RhdGVdIE9uIHN0YXRlIGNoYW5nZSBjYWxsYmFja1xuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSB3aXRoIHVzZXIgaW5wdXRcbiAqL1xuJC5zZWxlY3QgPSBhcmdzID0+IHRvUHJvbXB0KCdTZWxlY3RQcm9tcHQnLCBhcmdzKTtcblxuLyoqXG4gKiBJbnRlcmFjdGl2ZSBtdWx0aS1zZWxlY3QgLyBhdXRvY29tcGxldGVNdWx0aXNlbGVjdCBwcm9tcHRcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLm1lc3NhZ2UgUHJvbXB0IG1lc3NhZ2UgdG8gZGlzcGxheVxuICogQHBhcmFtIHtBcnJheX0gYXJncy5jaG9pY2VzIEFycmF5IG9mIGNob2ljZXMgb2JqZWN0cyBgW3sgdGl0bGUsIHZhbHVlLCBbc2VsZWN0ZWRdIH0sIC4uLl1gXG4gKiBAcGFyYW0ge251bWJlcn0gW2FyZ3MubWF4XSBNYXggc2VsZWN0XG4gKiBAcGFyYW0ge3N0cmluZ30gW2FyZ3MuaGludF0gSGludCB0byBkaXNwbGF5IHVzZXJcbiAqIEBwYXJhbSB7TnVtYmVyfSBbYXJncy5jdXJzb3I9MF0gQ3Vyc29yIHN0YXJ0IHBvc2l0aW9uXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBbYXJncy5vblN0YXRlXSBPbiBzdGF0ZSBjaGFuZ2UgY2FsbGJhY2tcbiAqIEBwYXJhbSB7U3RyZWFtfSBbYXJncy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbYXJncy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICogQHJldHVybnMge1Byb21pc2V9IFByb21pc2Ugd2l0aCB1c2VyIGlucHV0XG4gKi9cbiQubXVsdGlzZWxlY3QgPSBhcmdzID0+IHtcbiAgYXJncy5jaG9pY2VzID0gW10uY29uY2F0KGFyZ3MuY2hvaWNlcyB8fCBbXSk7XG4gIGNvbnN0IHRvU2VsZWN0ZWQgPSBpdGVtcyA9PiBpdGVtcy5maWx0ZXIoaXRlbSA9PiBpdGVtLnNlbGVjdGVkKS5tYXAoaXRlbSA9PiBpdGVtLnZhbHVlKTtcbiAgcmV0dXJuIHRvUHJvbXB0KCdNdWx0aXNlbGVjdFByb21wdCcsIGFyZ3MsIHtcbiAgICBvbkFib3J0OiB0b1NlbGVjdGVkLFxuICAgIG9uU3VibWl0OiB0b1NlbGVjdGVkXG4gIH0pO1xufTtcblxuJC5hdXRvY29tcGxldGVNdWx0aXNlbGVjdCA9IGFyZ3MgPT4ge1xuICBhcmdzLmNob2ljZXMgPSBbXS5jb25jYXQoYXJncy5jaG9pY2VzIHx8IFtdKTtcbiAgY29uc3QgdG9TZWxlY3RlZCA9IGl0ZW1zID0+IGl0ZW1zLmZpbHRlcihpdGVtID0+IGl0ZW0uc2VsZWN0ZWQpLm1hcChpdGVtID0+IGl0ZW0udmFsdWUpO1xuICByZXR1cm4gdG9Qcm9tcHQoJ0F1dG9jb21wbGV0ZU11bHRpc2VsZWN0UHJvbXB0JywgYXJncywge1xuICAgIG9uQWJvcnQ6IHRvU2VsZWN0ZWQsXG4gICAgb25TdWJtaXQ6IHRvU2VsZWN0ZWRcbiAgfSk7XG59O1xuXG5jb25zdCBieVRpdGxlID0gKGlucHV0LCBjaG9pY2VzKSA9PiBQcm9taXNlLnJlc29sdmUoXG4gIGNob2ljZXMuZmlsdGVyKGl0ZW0gPT4gaXRlbS50aXRsZS5zbGljZSgwLCBpbnB1dC5sZW5ndGgpLnRvTG93ZXJDYXNlKCkgPT09IGlucHV0LnRvTG93ZXJDYXNlKCkpXG4pO1xuXG4vKipcbiAqIEludGVyYWN0aXZlIGF1dG8tY29tcGxldGUgcHJvbXB0XG4gKiBAcGFyYW0ge3N0cmluZ30gYXJncy5tZXNzYWdlIFByb21wdCBtZXNzYWdlIHRvIGRpc3BsYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFyZ3MuY2hvaWNlcyBBcnJheSBvZiBhdXRvLWNvbXBsZXRlIGNob2ljZXMgb2JqZWN0cyBgW3sgdGl0bGUsIHZhbHVlIH0sIC4uLl1gXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbYXJncy5zdWdnZXN0XSBGdW5jdGlvbiB0byBmaWx0ZXIgcmVzdWx0cyBiYXNlZCBvbiB1c2VyIGlucHV0LiBEZWZhdWx0cyB0byBzb3J0IGJ5IGB0aXRsZWBcbiAqIEBwYXJhbSB7bnVtYmVyfSBbYXJncy5saW1pdD0xMF0gTWF4IG51bWJlciBvZiByZXN1bHRzIHRvIHNob3dcbiAqIEBwYXJhbSB7c3RyaW5nfSBbYXJncy5zdHlsZT1cImRlZmF1bHRcIl0gUmVuZGVyIHN0eWxlICgnZGVmYXVsdCcsICdwYXNzd29yZCcsICdpbnZpc2libGUnKVxuICogQHBhcmFtIHtTdHJpbmd9IFthcmdzLmluaXRpYWxdIEluZGV4IG9mIHRoZSBkZWZhdWx0IHZhbHVlXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLmNsZWFyRmlyc3RdIFRoZSBmaXJzdCBFU0NBUEUga2V5cHJlc3Mgd2lsbCBjbGVhciB0aGUgaW5wdXRcbiAqIEBwYXJhbSB7U3RyaW5nfSBbYXJncy5mYWxsYmFja10gRmFsbGJhY2sgbWVzc2FnZSAtIGRlZmF1bHRzIHRvIGluaXRpYWwgdmFsdWVcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IFthcmdzLm9uU3RhdGVdIE9uIHN0YXRlIGNoYW5nZSBjYWxsYmFja1xuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSB3aXRoIHVzZXIgaW5wdXRcbiAqL1xuJC5hdXRvY29tcGxldGUgPSBhcmdzID0+IHtcbiAgYXJncy5zdWdnZXN0ID0gYXJncy5zdWdnZXN0IHx8IGJ5VGl0bGU7XG4gIGFyZ3MuY2hvaWNlcyA9IFtdLmNvbmNhdChhcmdzLmNob2ljZXMgfHwgW10pO1xuICByZXR1cm4gdG9Qcm9tcHQoJ0F1dG9jb21wbGV0ZVByb21wdCcsIGFyZ3MpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuY29uc3QgcHJvbXB0cyA9IHJlcXVpcmUoJy4vcHJvbXB0cycpO1xuXG5jb25zdCBwYXNzT24gPSBbJ3N1Z2dlc3QnLCAnZm9ybWF0JywgJ29uU3RhdGUnLCAndmFsaWRhdGUnLCAnb25SZW5kZXInLCAndHlwZSddO1xuY29uc3Qgbm9vcCA9ICgpID0+IHt9O1xuXG4vKipcbiAqIFByb21wdCBmb3IgYSBzZXJpZXMgb2YgcXVlc3Rpb25zXG4gKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gcXVlc3Rpb25zIFNpbmdsZSBxdWVzdGlvbiBvYmplY3Qgb3IgQXJyYXkgb2YgcXVlc3Rpb24gb2JqZWN0c1xuICogQHBhcmFtIHtGdW5jdGlvbn0gW29uU3VibWl0XSBDYWxsYmFjayBmdW5jdGlvbiBjYWxsZWQgb24gcHJvbXB0IHN1Ym1pdFxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29uQ2FuY2VsXSBDYWxsYmFjayBmdW5jdGlvbiBjYWxsZWQgb24gY2FuY2VsL2Fib3J0XG4gKiBAcmV0dXJucyB7T2JqZWN0fSBPYmplY3Qgd2l0aCB2YWx1ZXMgZnJvbSB1c2VyIGlucHV0XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHByb21wdChxdWVzdGlvbnM9W10sIHsgb25TdWJtaXQ9bm9vcCwgb25DYW5jZWw9bm9vcCB9PXt9KSB7XG4gIGNvbnN0IGFuc3dlcnMgPSB7fTtcbiAgY29uc3Qgb3ZlcnJpZGUgPSBwcm9tcHQuX292ZXJyaWRlIHx8IHt9O1xuICBxdWVzdGlvbnMgPSBbXS5jb25jYXQocXVlc3Rpb25zKTtcbiAgbGV0IGFuc3dlciwgcXVlc3Rpb24sIHF1aXQsIG5hbWUsIHR5cGUsIGxhc3RQcm9tcHQ7XG5cbiAgY29uc3QgZ2V0Rm9ybWF0dGVkQW5zd2VyID0gYXN5bmMgKHF1ZXN0aW9uLCBhbnN3ZXIsIHNraXBWYWxpZGF0aW9uID0gZmFsc2UpID0+IHtcbiAgICBpZiAoIXNraXBWYWxpZGF0aW9uICYmIHF1ZXN0aW9uLnZhbGlkYXRlICYmIHF1ZXN0aW9uLnZhbGlkYXRlKGFuc3dlcikgIT09IHRydWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcmV0dXJuIHF1ZXN0aW9uLmZvcm1hdCA/IGF3YWl0IHF1ZXN0aW9uLmZvcm1hdChhbnN3ZXIsIGFuc3dlcnMpIDogYW5zd2VyXG4gIH07XG5cbiAgZm9yIChxdWVzdGlvbiBvZiBxdWVzdGlvbnMpIHtcbiAgICAoeyBuYW1lLCB0eXBlIH0gPSBxdWVzdGlvbik7XG5cbiAgICAvLyBldmFsdWF0ZSB0eXBlIGZpcnN0IGFuZCBza2lwIGlmIHR5cGUgaXMgYSBmYWxzeSB2YWx1ZVxuICAgIGlmICh0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdHlwZSA9IGF3YWl0IHR5cGUoYW5zd2VyLCB7IC4uLmFuc3dlcnMgfSwgcXVlc3Rpb24pXG4gICAgICBxdWVzdGlvblsndHlwZSddID0gdHlwZVxuICAgIH1cbiAgICBpZiAoIXR5cGUpIGNvbnRpbnVlO1xuXG4gICAgLy8gaWYgcHJvcGVydHkgaXMgYSBmdW5jdGlvbiwgaW52b2tlIGl0IHVubGVzcyBpdCdzIGEgc3BlY2lhbCBmdW5jdGlvblxuICAgIGZvciAobGV0IGtleSBpbiBxdWVzdGlvbikge1xuICAgICAgaWYgKHBhc3NPbi5pbmNsdWRlcyhrZXkpKSBjb250aW51ZTtcbiAgICAgIGxldCB2YWx1ZSA9IHF1ZXN0aW9uW2tleV07XG4gICAgICBxdWVzdGlvbltrZXldID0gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nID8gYXdhaXQgdmFsdWUoYW5zd2VyLCB7IC4uLmFuc3dlcnMgfSwgbGFzdFByb21wdCkgOiB2YWx1ZTtcbiAgICB9XG5cbiAgICBsYXN0UHJvbXB0ID0gcXVlc3Rpb247XG5cbiAgICBpZiAodHlwZW9mIHF1ZXN0aW9uLm1lc3NhZ2UgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb21wdCBtZXNzYWdlIGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuXG4gICAgLy8gdXBkYXRlIHZhcnMgaW4gY2FzZSB0aGV5IGNoYW5nZWRcbiAgICAoeyBuYW1lLCB0eXBlIH0gPSBxdWVzdGlvbik7XG5cbiAgICBpZiAocHJvbXB0c1t0eXBlXSA9PT0gdm9pZCAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHByb21wdCB0eXBlICgke3R5cGV9KSBpcyBub3QgZGVmaW5lZGApO1xuICAgIH1cblxuICAgIGlmIChvdmVycmlkZVtxdWVzdGlvbi5uYW1lXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBhbnN3ZXIgPSBhd2FpdCBnZXRGb3JtYXR0ZWRBbnN3ZXIocXVlc3Rpb24sIG92ZXJyaWRlW3F1ZXN0aW9uLm5hbWVdKTtcbiAgICAgIGlmIChhbnN3ZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBhbnN3ZXJzW25hbWVdID0gYW5zd2VyO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgLy8gR2V0IHRoZSBpbmplY3RlZCBhbnN3ZXIgaWYgdGhlcmUgaXMgb25lIG9yIHByb21wdCB0aGUgdXNlclxuICAgICAgYW5zd2VyID0gcHJvbXB0Ll9pbmplY3RlZCA/IGdldEluamVjdGVkQW5zd2VyKHByb21wdC5faW5qZWN0ZWQsIHF1ZXN0aW9uLmluaXRpYWwpIDogYXdhaXQgcHJvbXB0c1t0eXBlXShxdWVzdGlvbik7XG4gICAgICBhbnN3ZXJzW25hbWVdID0gYW5zd2VyID0gYXdhaXQgZ2V0Rm9ybWF0dGVkQW5zd2VyKHF1ZXN0aW9uLCBhbnN3ZXIsIHRydWUpO1xuICAgICAgcXVpdCA9IGF3YWl0IG9uU3VibWl0KHF1ZXN0aW9uLCBhbnN3ZXIsIGFuc3dlcnMpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcXVpdCA9ICEoYXdhaXQgb25DYW5jZWwocXVlc3Rpb24sIGFuc3dlcnMpKTtcbiAgICB9XG5cbiAgICBpZiAocXVpdCkgcmV0dXJuIGFuc3dlcnM7XG4gIH1cblxuICByZXR1cm4gYW5zd2Vycztcbn1cblxuZnVuY3Rpb24gZ2V0SW5qZWN0ZWRBbnN3ZXIoaW5qZWN0ZWQsIGRlYWZ1bHRWYWx1ZSkge1xuICBjb25zdCBhbnN3ZXIgPSBpbmplY3RlZC5zaGlmdCgpO1xuICAgIGlmIChhbnN3ZXIgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgdGhyb3cgYW5zd2VyO1xuICAgIH1cblxuICAgIHJldHVybiAoYW5zd2VyID09PSB1bmRlZmluZWQpID8gZGVhZnVsdFZhbHVlIDogYW5zd2VyO1xufVxuXG5mdW5jdGlvbiBpbmplY3QoYW5zd2Vycykge1xuICBwcm9tcHQuX2luamVjdGVkID0gKHByb21wdC5faW5qZWN0ZWQgfHwgW10pLmNvbmNhdChhbnN3ZXJzKTtcbn1cblxuZnVuY3Rpb24gb3ZlcnJpZGUoYW5zd2Vycykge1xuICBwcm9tcHQuX292ZXJyaWRlID0gT2JqZWN0LmFzc2lnbih7fSwgYW5zd2Vycyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmFzc2lnbihwcm9tcHQsIHsgcHJvbXB0LCBwcm9tcHRzLCBpbmplY3QsIG92ZXJyaWRlIH0pO1xuIiwiZnVuY3Rpb24gaXNOb2RlTFQodGFyKSB7XG4gIHRhciA9IChBcnJheS5pc0FycmF5KHRhcikgPyB0YXIgOiB0YXIuc3BsaXQoJy4nKSkubWFwKE51bWJlcik7XG4gIGxldCBpPTAsIHNyYz1wcm9jZXNzLnZlcnNpb25zLm5vZGUuc3BsaXQoJy4nKS5tYXAoTnVtYmVyKTtcbiAgZm9yICg7IGkgPCB0YXIubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoc3JjW2ldID4gdGFyW2ldKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHRhcltpXSA+IHNyY1tpXSkgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9XG4gIGlzTm9kZUxUKCc4LjYuMCcpXG4gICAgPyByZXF1aXJlKCcuL2Rpc3QvaW5kZXguanMnKVxuICAgIDogcmVxdWlyZSgnLi9saWIvaW5kZXguanMnKTtcbiIsIi8qKlxuICogQGRlc2NyaXB0aW9uIEVudW0gZm9yIGxvZyBsZXZlbHMuXG4gKiBAc3VtbWFyeSBEZWZpbmVzIGRpZmZlcmVudCBsZXZlbHMgb2YgbG9nZ2luZyBmb3IgdGhlIGFwcGxpY2F0aW9uLlxuICogQGVudW0ge3N0cmluZ31cbiAqIEBtZW1iZXJPZiBAZGVjYWYtdHMvdXRpbHNcbiAqL1xuZXhwb3J0IHZhciBMb2dMZXZlbDtcbihmdW5jdGlvbiAoTG9nTGV2ZWwpIHtcbiAgICAvKiogRXJyb3IgZXZlbnRzIHRoYXQgYXJlIGxpa2VseSB0byBjYXVzZSBwcm9ibGVtcy4gKi9cbiAgICBMb2dMZXZlbFtcImVycm9yXCJdID0gXCJlcnJvclwiO1xuICAgIC8qKiBSb3V0aW5lIGluZm9ybWF0aW9uLCBzdWNoIGFzIG9uZ29pbmcgc3RhdHVzIG9yIHBlcmZvcm1hbmNlLiAqL1xuICAgIExvZ0xldmVsW1wiaW5mb1wiXSA9IFwiaW5mb1wiO1xuICAgIC8qKiBBZGRpdGlvbmFsIHJlbGV2YW50IGluZm9ybWF0aW9uLiAqL1xuICAgIExvZ0xldmVsW1widmVyYm9zZVwiXSA9IFwidmVyYm9zZVwiO1xuICAgIC8qKiBEZWJ1ZyBvciB0cmFjZSBpbmZvcm1hdGlvbi4gKi9cbiAgICBMb2dMZXZlbFtcImRlYnVnXCJdID0gXCJkZWJ1Z1wiO1xuICAgIC8qKiB3YXkgdG9vIHZlcmJvc2Ugb3Igc2lsbHkgaW5mb3JtYXRpb24uICovXG4gICAgTG9nTGV2ZWxbXCJzaWxseVwiXSA9IFwic2lsbHlcIjtcbn0pKExvZ0xldmVsIHx8IChMb2dMZXZlbCA9IHt9KSk7XG4vKipcbiAqIEBkZXNjcmlwdGlvbiBOdW1lcmljIHZhbHVlcyBhc3NvY2lhdGVkIHdpdGggbG9nIGxldmVscy5cbiAqIEBzdW1tYXJ5IFByb3ZpZGVzIGEgbnVtZXJpYyByZXByZXNlbnRhdGlvbiBvZiBsb2cgbGV2ZWxzIGZvciBjb21wYXJpc29uIGFuZCBmaWx0ZXJpbmcuXG4gKiBAY29uc3Qge09iamVjdH0gTnVtZXJpY0xvZ0xldmVsc1xuICogQHByb3BlcnR5IHtudW1iZXJ9IGVycm9yIC0gTnVtZXJpYyB2YWx1ZSBmb3IgZXJyb3IgbGV2ZWwgKDApLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGluZm8gLSBOdW1lcmljIHZhbHVlIGZvciBpbmZvIGxldmVsICgyKS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB2ZXJib3NlIC0gTnVtZXJpYyB2YWx1ZSBmb3IgdmVyYm9zZSBsZXZlbCAoNCkuXG4gKiBAcHJvcGVydHkge251bWJlcn0gZGVidWcgLSBOdW1lcmljIHZhbHVlIGZvciBkZWJ1ZyBsZXZlbCAoNSkuXG4gKiBAcHJvcGVydHkge251bWJlcn0gc2lsbHkgLSBOdW1lcmljIHZhbHVlIGZvciBzaWxseSBsZXZlbCAoOCkuXG4gKiBAbWVtYmVyT2YgQGRlY2FmLXRzL3V0aWxzXG4gKi9cbmV4cG9ydCBjb25zdCBOdW1lcmljTG9nTGV2ZWxzID0ge1xuICAgIGVycm9yOiAyLFxuICAgIGluZm86IDQsXG4gICAgdmVyYm9zZTogNixcbiAgICBkZWJ1ZzogNyxcbiAgICBzaWxseTogOSxcbn07XG5leHBvcnQgdmFyIExvZ2dpbmdNb2RlO1xuKGZ1bmN0aW9uIChMb2dnaW5nTW9kZSkge1xuICAgIExvZ2dpbmdNb2RlW1wiUkFXXCJdID0gXCJyYXdcIjtcbiAgICBMb2dnaW5nTW9kZVtcIkpTT05cIl0gPSBcImpzb25cIjtcbn0pKExvZ2dpbmdNb2RlIHx8IChMb2dnaW5nTW9kZSA9IHt9KSk7XG4vKipcbiAqIEBkZXNjcmlwdGlvbiBEZWZhdWx0IHRoZW1lIGZvciBzdHlsaW5nIGxvZyBvdXRwdXQuXG4gKiBAc3VtbWFyeSBEZWZpbmVzIHRoZSBkZWZhdWx0IGNvbG9yIGFuZCBzdHlsZSBzZXR0aW5ncyBmb3IgdmFyaW91cyBjb21wb25lbnRzIG9mIGxvZyBtZXNzYWdlcy5cbiAqIEBjb25zdCBEZWZhdWx0VGhlbWVcbiAqIEB0eXBlZGVmIHtUaGVtZX0gRGVmYXVsdFRoZW1lXG4gKiBAcHJvcGVydHkge09iamVjdH0gY2xhc3MgLSBTdHlsaW5nIGZvciBjbGFzcyBuYW1lcy5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBjbGFzcy5mZyAtIEZvcmVncm91bmQgY29sb3IgY29kZSBmb3IgY2xhc3MgbmFtZXMgKDQpLlxuICogQHByb3BlcnR5IHtPYmplY3R9IGlkIC0gU3R5bGluZyBmb3IgaWRlbnRpZmllcnMuXG4gKiBAcHJvcGVydHkge251bWJlcn0gaWQuZmcgLSBGb3JlZ3JvdW5kIGNvbG9yIGNvZGUgZm9yIGlkZW50aWZpZXJzICgzNikuXG4gKiBAcHJvcGVydHkge09iamVjdH0gc3RhY2sgLSBTdHlsaW5nIGZvciBzdGFjayB0cmFjZXMgKGVtcHR5IG9iamVjdCkuXG4gKiBAcHJvcGVydHkge09iamVjdH0gdGltZXN0YW1wIC0gU3R5bGluZyBmb3IgdGltZXN0YW1wcyAoZW1wdHkgb2JqZWN0KS5cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBtZXNzYWdlIC0gU3R5bGluZyBmb3IgZGlmZmVyZW50IHR5cGVzIG9mIG1lc3NhZ2VzLlxuICogQHByb3BlcnR5IHtPYmplY3R9IG1lc3NhZ2UuZXJyb3IgLSBTdHlsaW5nIGZvciBlcnJvciBtZXNzYWdlcy5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBtZXNzYWdlLmVycm9yLmZnIC0gRm9yZWdyb3VuZCBjb2xvciBjb2RlIGZvciBlcnJvciBtZXNzYWdlcyAoMzQpLlxuICogQHByb3BlcnR5IHtPYmplY3R9IG1ldGhvZCAtIFN0eWxpbmcgZm9yIG1ldGhvZCBuYW1lcyAoZW1wdHkgb2JqZWN0KS5cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBsb2dMZXZlbCAtIFN0eWxpbmcgZm9yIGRpZmZlcmVudCBsb2cgbGV2ZWxzLlxuICogQHByb3BlcnR5IHtPYmplY3R9IGxvZ0xldmVsLmVycm9yIC0gU3R5bGluZyBmb3IgZXJyb3IgbGV2ZWwgbG9ncy5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBsb2dMZXZlbC5lcnJvci5mZyAtIEZvcmVncm91bmQgY29sb3IgY29kZSBmb3IgZXJyb3IgbGV2ZWwgbG9ncyAoNikuXG4gKiBAcHJvcGVydHkge09iamVjdH0gbG9nTGV2ZWwuaW5mbyAtIFN0eWxpbmcgZm9yIGluZm8gbGV2ZWwgbG9ncyAoZW1wdHkgb2JqZWN0KS5cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBsb2dMZXZlbC52ZXJib3NlIC0gU3R5bGluZyBmb3IgdmVyYm9zZSBsZXZlbCBsb2dzIChlbXB0eSBvYmplY3QpLlxuICogQHByb3BlcnR5IHtPYmplY3R9IGxvZ0xldmVsLmRlYnVnIC0gU3R5bGluZyBmb3IgZGVidWcgbGV2ZWwgbG9ncy5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBsb2dMZXZlbC5kZWJ1Zy5mZyAtIEZvcmVncm91bmQgY29sb3IgY29kZSBmb3IgZGVidWcgbGV2ZWwgbG9ncyAoNykuXG4gKiBAbWVtYmVyT2YgQGRlY2FmLXRzL3V0aWxzXG4gKi9cbmV4cG9ydCBjb25zdCBEZWZhdWx0VGhlbWUgPSB7XG4gICAgY2xhc3M6IHtcbiAgICAgICAgZmc6IDM0LFxuICAgIH0sXG4gICAgaWQ6IHtcbiAgICAgICAgZmc6IDM2LFxuICAgIH0sXG4gICAgc3RhY2s6IHt9LFxuICAgIHRpbWVzdGFtcDoge30sXG4gICAgbWVzc2FnZToge1xuICAgICAgICBlcnJvcjoge1xuICAgICAgICAgICAgZmc6IDMxLFxuICAgICAgICB9LFxuICAgIH0sXG4gICAgbWV0aG9kOiB7fSxcbiAgICBsb2dMZXZlbDoge1xuICAgICAgICBlcnJvcjoge1xuICAgICAgICAgICAgZmc6IDMxLFxuICAgICAgICAgICAgc3R5bGU6IFtcImJvbGRcIl0sXG4gICAgICAgIH0sXG4gICAgICAgIGluZm86IHt9LFxuICAgICAgICB2ZXJib3NlOiB7fSxcbiAgICAgICAgZGVidWc6IHtcbiAgICAgICAgICAgIGZnOiAzMyxcbiAgICAgICAgfSxcbiAgICB9LFxufTtcbi8qKlxuICogQGRlc2NyaXB0aW9uIERlZmF1bHQgY29uZmlndXJhdGlvbiBmb3IgbG9nZ2luZy5cbiAqIEBzdW1tYXJ5IERlZmluZXMgdGhlIGRlZmF1bHQgc2V0dGluZ3MgZm9yIHRoZSBsb2dnaW5nIHN5c3RlbSwgaW5jbHVkaW5nIHZlcmJvc2l0eSwgbG9nIGxldmVsLCBzdHlsaW5nLCBhbmQgdGltZXN0YW1wIGZvcm1hdC5cbiAqIEBjb25zdCBEZWZhdWx0TG9nZ2luZ0NvbmZpZ1xuICogQHR5cGVkZWYge0xvZ2dpbmdDb25maWd9IERlZmF1bHRMb2dnaW5nQ29uZmlnXG4gKiBAcHJvcGVydHkge251bWJlcn0gdmVyYm9zZSAtIFZlcmJvc2l0eSBsZXZlbCAoMCkuXG4gKiBAcHJvcGVydHkge0xvZ0xldmVsfSBsZXZlbCAtIERlZmF1bHQgbG9nIGxldmVsIChMb2dMZXZlbC5pbmZvKS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gc3R5bGUgLSBXaGV0aGVyIHRvIGFwcGx5IHN0eWxpbmcgdG8gbG9nIG91dHB1dCAoZmFsc2UpLlxuICogQHByb3BlcnR5IHtib29sZWFufSB0aW1lc3RhbXAgLSBXaGV0aGVyIHRvIGluY2x1ZGUgdGltZXN0YW1wcyBpbiBsb2cgbWVzc2FnZXMgKHRydWUpLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IHRpbWVzdGFtcEZvcm1hdCAtIEZvcm1hdCBmb3IgdGltZXN0YW1wcyAoXCJISDptbTpzcy5TU1NcIikuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGNvbnRleHQgLSBXaGV0aGVyIHRvIGluY2x1ZGUgY29udGV4dCBpbmZvcm1hdGlvbiBpbiBsb2cgbWVzc2FnZXMgKHRydWUpLlxuICogQHByb3BlcnR5IHtUaGVtZX0gdGhlbWUgLSBUaGUgdGhlbWUgdG8gdXNlIGZvciBzdHlsaW5nIGxvZyBtZXNzYWdlcyAoRGVmYXVsdFRoZW1lKS5cbiAqIEBtZW1iZXJPZiBAZGVjYWYtdHMvdXRpbHNcbiAqL1xuZXhwb3J0IGNvbnN0IERlZmF1bHRMb2dnaW5nQ29uZmlnID0ge1xuICAgIHZlcmJvc2U6IDAsXG4gICAgbGV2ZWw6IExvZ0xldmVsLmluZm8sXG4gICAgbG9nTGV2ZWw6IHRydWUsXG4gICAgbW9kZTogTG9nZ2luZ01vZGUuUkFXLFxuICAgIHN0eWxlOiBmYWxzZSxcbiAgICBzZXBhcmF0b3I6IFwiIC0gXCIsXG4gICAgdGltZXN0YW1wOiB0cnVlLFxuICAgIHRpbWVzdGFtcEZvcm1hdDogXCJISDptbTpzcy5TU1NcIixcbiAgICBjb250ZXh0OiB0cnVlLFxuICAgIHRoZW1lOiBEZWZhdWx0VGhlbWUsXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pWTI5dWMzUmhiblJ6TG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhNaU9sc2lMaTR2TGk0dmMzSmpMMk52Ym5OMFlXNTBjeTUwY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pUVVGRlFUczdPenM3UjBGTFJ6dEJRVU5JTEUxQlFVMHNRMEZCVGl4SlFVRlpMRkZCVjFnN1FVRllSQ3hYUVVGWkxGRkJRVkU3U1VGRGJFSXNjMFJCUVhORU8wbEJRM1JFTERKQ1FVRmxMRU5CUVVFN1NVRkRaaXhyUlVGQmEwVTdTVUZEYkVVc2VVSkJRV0VzUTBGQlFUdEpRVU5pTEhWRFFVRjFRenRKUVVOMlF5d3JRa0ZCYlVJc1EwRkJRVHRKUVVOdVFpeHJRMEZCYTBNN1NVRkRiRU1zTWtKQlFXVXNRMEZCUVR0SlFVTm1MRFJEUVVFMFF6dEpRVU0xUXl3eVFrRkJaU3hEUVVGQk8wRkJRMnBDTEVOQlFVTXNSVUZZVnl4UlFVRlJMRXRCUVZJc1VVRkJVU3hSUVZkdVFqdEJRVVZFT3pzN096czdPenM3TzBkQlZVYzdRVUZEU0N4TlFVRk5MRU5CUVVNc1RVRkJUU3huUWtGQlowSXNSMEZCUnp0SlFVTTVRaXhMUVVGTExFVkJRVVVzUTBGQlF6dEpRVU5TTEVsQlFVa3NSVUZCUlN4RFFVRkRPMGxCUTFBc1QwRkJUeXhGUVVGRkxFTkJRVU03U1VGRFZpeExRVUZMTEVWQlFVVXNRMEZCUXp0SlFVTlNMRXRCUVVzc1JVRkJSU3hEUVVGRE8wTkJRMVFzUTBGQlF6dEJRVVZHTEUxQlFVMHNRMEZCVGl4SlFVRlpMRmRCUjFnN1FVRklSQ3hYUVVGWkxGZEJRVmM3U1VGRGNrSXNNRUpCUVZjc1EwRkJRVHRKUVVOWUxEUkNRVUZoTEVOQlFVRTdRVUZEWml4RFFVRkRMRVZCU0Zjc1YwRkJWeXhMUVVGWUxGZEJRVmNzVVVGSGRFSTdRVUZGUkRzN096czdPenM3T3pzN096czdPenM3T3pzN096czdSMEYxUWtjN1FVRkRTQ3hOUVVGTkxFTkJRVU1zVFVGQlRTeFpRVUZaTEVkQlFWVTdTVUZEYWtNc1MwRkJTeXhGUVVGRk8xRkJRMHdzUlVGQlJTeEZRVUZGTEVWQlFVVTdTMEZEVUR0SlFVTkVMRVZCUVVVc1JVRkJSVHRSUVVOR0xFVkJRVVVzUlVGQlJTeEZRVUZGTzB0QlExQTdTVUZEUkN4TFFVRkxMRVZCUVVVc1JVRkJSVHRKUVVOVUxGTkJRVk1zUlVGQlJTeEZRVUZGTzBsQlEySXNUMEZCVHl4RlFVRkZPMUZCUTFBc1MwRkJTeXhGUVVGRk8xbEJRMHdzUlVGQlJTeEZRVUZGTEVWQlFVVTdVMEZEVUR0TFFVTkdPMGxCUTBRc1RVRkJUU3hGUVVGRkxFVkJRVVU3U1VGRFZpeFJRVUZSTEVWQlFVVTdVVUZEVWl4TFFVRkxMRVZCUVVVN1dVRkRUQ3hGUVVGRkxFVkJRVVVzUlVGQlJUdFpRVU5PTEV0QlFVc3NSVUZCUlN4RFFVRkRMRTFCUVUwc1EwRkJRenRUUVVOb1FqdFJRVU5FTEVsQlFVa3NSVUZCUlN4RlFVRkZPMUZCUTFJc1QwRkJUeXhGUVVGRkxFVkJRVVU3VVVGRFdDeExRVUZMTEVWQlFVVTdXVUZEVEN4RlFVRkZMRVZCUVVVc1JVRkJSVHRUUVVOUU8wdEJRMFk3UTBGRFJpeERRVUZETzBGQlJVWTdPenM3T3pzN096czdPenM3UjBGaFJ6dEJRVU5JTEUxQlFVMHNRMEZCUXl4TlFVRk5MRzlDUVVGdlFpeEhRVUZyUWp0SlFVTnFSQ3hQUVVGUExFVkJRVVVzUTBGQlF6dEpRVU5XTEV0QlFVc3NSVUZCUlN4UlFVRlJMRU5CUVVNc1NVRkJTVHRKUVVOd1FpeFJRVUZSTEVWQlFVVXNTVUZCU1R0SlFVTmtMRWxCUVVrc1JVRkJSU3hYUVVGWExFTkJRVU1zUjBGQlJ6dEpRVU55UWl4TFFVRkxMRVZCUVVVc1MwRkJTenRKUVVOYUxGTkJRVk1zUlVGQlJTeExRVUZMTzBsQlEyaENMRk5CUVZNc1JVRkJSU3hKUVVGSk8wbEJRMllzWlVGQlpTeEZRVUZGTEdOQlFXTTdTVUZETDBJc1QwRkJUeXhGUVVGRkxFbEJRVWs3U1VGRFlpeExRVUZMTEVWQlFVVXNXVUZCV1R0RFFVTndRaXhEUVVGRElpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lhVzF3YjNKMElIc2dURzluWjJsdVowTnZibVpwWnl3Z1ZHaGxiV1VnZlNCbWNtOXRJRndpTGk5MGVYQmxjMXdpTzF4dVhHNHZLaXBjYmlBcUlFQmtaWE5qY21sd2RHbHZiaUJGYm5WdElHWnZjaUJzYjJjZ2JHVjJaV3h6TGx4dUlDb2dRSE4xYlcxaGNua2dSR1ZtYVc1bGN5QmthV1ptWlhKbGJuUWdiR1YyWld4eklHOW1JR3h2WjJkcGJtY2dabTl5SUhSb1pTQmhjSEJzYVdOaGRHbHZiaTVjYmlBcUlFQmxiblZ0SUh0emRISnBibWQ5WEc0Z0tpQkFiV1Z0WW1WeVQyWWdRR1JsWTJGbUxYUnpMM1YwYVd4elhHNGdLaTljYm1WNGNHOXlkQ0JsYm5WdElFeHZaMHhsZG1Wc0lIdGNiaUFnTHlvcUlFVnljbTl5SUdWMlpXNTBjeUIwYUdGMElHRnlaU0JzYVd0bGJIa2dkRzhnWTJGMWMyVWdjSEp2WW14bGJYTXVJQ292WEc0Z0lHVnljbTl5SUQwZ1hDSmxjbkp2Y2x3aUxGeHVJQ0F2S2lvZ1VtOTFkR2x1WlNCcGJtWnZjbTFoZEdsdmJpd2djM1ZqYUNCaGN5QnZibWR2YVc1bklITjBZWFIxY3lCdmNpQndaWEptYjNKdFlXNWpaUzRnS2k5Y2JpQWdhVzVtYnlBOUlGd2lhVzVtYjF3aUxGeHVJQ0F2S2lvZ1FXUmthWFJwYjI1aGJDQnlaV3hsZG1GdWRDQnBibVp2Y20xaGRHbHZiaTRnS2k5Y2JpQWdkbVZ5WW05elpTQTlJRndpZG1WeVltOXpaVndpTEZ4dUlDQXZLaW9nUkdWaWRXY2diM0lnZEhKaFkyVWdhVzVtYjNKdFlYUnBiMjR1SUNvdlhHNGdJR1JsWW5WbklEMGdYQ0prWldKMVoxd2lMRnh1SUNBdktpb2dkMkY1SUhSdmJ5QjJaWEppYjNObElHOXlJSE5wYkd4NUlHbHVabTl5YldGMGFXOXVMaUFxTDF4dUlDQnphV3hzZVNBOUlGd2ljMmxzYkhsY0lpeGNibjFjYmx4dUx5b3FYRzRnS2lCQVpHVnpZM0pwY0hScGIyNGdUblZ0WlhKcFl5QjJZV3gxWlhNZ1lYTnpiMk5wWVhSbFpDQjNhWFJvSUd4dlp5QnNaWFpsYkhNdVhHNGdLaUJBYzNWdGJXRnllU0JRY205MmFXUmxjeUJoSUc1MWJXVnlhV01nY21Wd2NtVnpaVzUwWVhScGIyNGdiMllnYkc5bklHeGxkbVZzY3lCbWIzSWdZMjl0Y0dGeWFYTnZiaUJoYm1RZ1ptbHNkR1Z5YVc1bkxseHVJQ29nUUdOdmJuTjBJSHRQWW1wbFkzUjlJRTUxYldWeWFXTk1iMmRNWlhabGJITmNiaUFxSUVCd2NtOXdaWEowZVNCN2JuVnRZbVZ5ZlNCbGNuSnZjaUF0SUU1MWJXVnlhV01nZG1Gc2RXVWdabTl5SUdWeWNtOXlJR3hsZG1Wc0lDZ3dLUzVjYmlBcUlFQndjbTl3WlhKMGVTQjdiblZ0WW1WeWZTQnBibVp2SUMwZ1RuVnRaWEpwWXlCMllXeDFaU0JtYjNJZ2FXNW1ieUJzWlhabGJDQW9NaWt1WEc0Z0tpQkFjSEp2Y0dWeWRIa2dlMjUxYldKbGNuMGdkbVZ5WW05elpTQXRJRTUxYldWeWFXTWdkbUZzZFdVZ1ptOXlJSFpsY21KdmMyVWdiR1YyWld3Z0tEUXBMbHh1SUNvZ1FIQnliM0JsY25SNUlIdHVkVzFpWlhKOUlHUmxZblZuSUMwZ1RuVnRaWEpwWXlCMllXeDFaU0JtYjNJZ1pHVmlkV2NnYkdWMlpXd2dLRFVwTGx4dUlDb2dRSEJ5YjNCbGNuUjVJSHR1ZFcxaVpYSjlJSE5wYkd4NUlDMGdUblZ0WlhKcFl5QjJZV3gxWlNCbWIzSWdjMmxzYkhrZ2JHVjJaV3dnS0RncExseHVJQ29nUUcxbGJXSmxjazltSUVCa1pXTmhaaTEwY3k5MWRHbHNjMXh1SUNvdlhHNWxlSEJ2Y25RZ1kyOXVjM1FnVG5WdFpYSnBZMHh2WjB4bGRtVnNjeUE5SUh0Y2JpQWdaWEp5YjNJNklESXNYRzRnSUdsdVptODZJRFFzWEc0Z0lIWmxjbUp2YzJVNklEWXNYRzRnSUdSbFluVm5PaUEzTEZ4dUlDQnphV3hzZVRvZ09TeGNibjA3WEc1Y2JtVjRjRzl5ZENCbGJuVnRJRXh2WjJkcGJtZE5iMlJsSUh0Y2JpQWdVa0ZYSUQwZ1hDSnlZWGRjSWl4Y2JpQWdTbE5QVGlBOUlGd2lhbk52Ymx3aUxGeHVmVnh1WEc0dktpcGNiaUFxSUVCa1pYTmpjbWx3ZEdsdmJpQkVaV1poZFd4MElIUm9aVzFsSUdadmNpQnpkSGxzYVc1bklHeHZaeUJ2ZFhSd2RYUXVYRzRnS2lCQWMzVnRiV0Z5ZVNCRVpXWnBibVZ6SUhSb1pTQmtaV1poZFd4MElHTnZiRzl5SUdGdVpDQnpkSGxzWlNCelpYUjBhVzVuY3lCbWIzSWdkbUZ5YVc5MWN5QmpiMjF3YjI1bGJuUnpJRzltSUd4dlp5QnRaWE56WVdkbGN5NWNiaUFxSUVCamIyNXpkQ0JFWldaaGRXeDBWR2hsYldWY2JpQXFJRUIwZVhCbFpHVm1JSHRVYUdWdFpYMGdSR1ZtWVhWc2RGUm9aVzFsWEc0Z0tpQkFjSEp2Y0dWeWRIa2dlMDlpYW1WamRIMGdZMnhoYzNNZ0xTQlRkSGxzYVc1bklHWnZjaUJqYkdGemN5QnVZVzFsY3k1Y2JpQXFJRUJ3Y205d1pYSjBlU0I3Ym5WdFltVnlmU0JqYkdGemN5NW1aeUF0SUVadmNtVm5jbTkxYm1RZ1kyOXNiM0lnWTI5a1pTQm1iM0lnWTJ4aGMzTWdibUZ0WlhNZ0tEUXBMbHh1SUNvZ1FIQnliM0JsY25SNUlIdFBZbXBsWTNSOUlHbGtJQzBnVTNSNWJHbHVaeUJtYjNJZ2FXUmxiblJwWm1sbGNuTXVYRzRnS2lCQWNISnZjR1Z5ZEhrZ2UyNTFiV0psY24wZ2FXUXVabWNnTFNCR2IzSmxaM0p2ZFc1a0lHTnZiRzl5SUdOdlpHVWdabTl5SUdsa1pXNTBhV1pwWlhKeklDZ3pOaWt1WEc0Z0tpQkFjSEp2Y0dWeWRIa2dlMDlpYW1WamRIMGdjM1JoWTJzZ0xTQlRkSGxzYVc1bklHWnZjaUJ6ZEdGamF5QjBjbUZqWlhNZ0tHVnRjSFI1SUc5aWFtVmpkQ2t1WEc0Z0tpQkFjSEp2Y0dWeWRIa2dlMDlpYW1WamRIMGdkR2x0WlhOMFlXMXdJQzBnVTNSNWJHbHVaeUJtYjNJZ2RHbHRaWE4wWVcxd2N5QW9aVzF3ZEhrZ2IySnFaV04wS1M1Y2JpQXFJRUJ3Y205d1pYSjBlU0I3VDJKcVpXTjBmU0J0WlhOellXZGxJQzBnVTNSNWJHbHVaeUJtYjNJZ1pHbG1abVZ5Wlc1MElIUjVjR1Z6SUc5bUlHMWxjM05oWjJWekxseHVJQ29nUUhCeWIzQmxjblI1SUh0UFltcGxZM1I5SUcxbGMzTmhaMlV1WlhKeWIzSWdMU0JUZEhsc2FXNW5JR1p2Y2lCbGNuSnZjaUJ0WlhOellXZGxjeTVjYmlBcUlFQndjbTl3WlhKMGVTQjdiblZ0WW1WeWZTQnRaWE56WVdkbExtVnljbTl5TG1abklDMGdSbTl5WldkeWIzVnVaQ0JqYjJ4dmNpQmpiMlJsSUdadmNpQmxjbkp2Y2lCdFpYTnpZV2RsY3lBb016UXBMbHh1SUNvZ1FIQnliM0JsY25SNUlIdFBZbXBsWTNSOUlHMWxkR2h2WkNBdElGTjBlV3hwYm1jZ1ptOXlJRzFsZEdodlpDQnVZVzFsY3lBb1pXMXdkSGtnYjJKcVpXTjBLUzVjYmlBcUlFQndjbTl3WlhKMGVTQjdUMkpxWldOMGZTQnNiMmRNWlhabGJDQXRJRk4wZVd4cGJtY2dabTl5SUdScFptWmxjbVZ1ZENCc2IyY2diR1YyWld4ekxseHVJQ29nUUhCeWIzQmxjblI1SUh0UFltcGxZM1I5SUd4dloweGxkbVZzTG1WeWNtOXlJQzBnVTNSNWJHbHVaeUJtYjNJZ1pYSnliM0lnYkdWMlpXd2diRzluY3k1Y2JpQXFJRUJ3Y205d1pYSjBlU0I3Ym5WdFltVnlmU0JzYjJkTVpYWmxiQzVsY25KdmNpNW1aeUF0SUVadmNtVm5jbTkxYm1RZ1kyOXNiM0lnWTI5a1pTQm1iM0lnWlhKeWIzSWdiR1YyWld3Z2JHOW5jeUFvTmlrdVhHNGdLaUJBY0hKdmNHVnlkSGtnZTA5aWFtVmpkSDBnYkc5blRHVjJaV3d1YVc1bWJ5QXRJRk4wZVd4cGJtY2dabTl5SUdsdVptOGdiR1YyWld3Z2JHOW5jeUFvWlcxd2RIa2diMkpxWldOMEtTNWNiaUFxSUVCd2NtOXdaWEowZVNCN1QySnFaV04wZlNCc2IyZE1aWFpsYkM1MlpYSmliM05sSUMwZ1UzUjViR2x1WnlCbWIzSWdkbVZ5WW05elpTQnNaWFpsYkNCc2IyZHpJQ2hsYlhCMGVTQnZZbXBsWTNRcExseHVJQ29nUUhCeWIzQmxjblI1SUh0UFltcGxZM1I5SUd4dloweGxkbVZzTG1SbFluVm5JQzBnVTNSNWJHbHVaeUJtYjNJZ1pHVmlkV2NnYkdWMlpXd2diRzluY3k1Y2JpQXFJRUJ3Y205d1pYSjBlU0I3Ym5WdFltVnlmU0JzYjJkTVpYWmxiQzVrWldKMVp5NW1aeUF0SUVadmNtVm5jbTkxYm1RZ1kyOXNiM0lnWTI5a1pTQm1iM0lnWkdWaWRXY2diR1YyWld3Z2JHOW5jeUFvTnlrdVhHNGdLaUJBYldWdFltVnlUMllnUUdSbFkyRm1MWFJ6TDNWMGFXeHpYRzRnS2k5Y2JtVjRjRzl5ZENCamIyNXpkQ0JFWldaaGRXeDBWR2hsYldVNklGUm9aVzFsSUQwZ2UxeHVJQ0JqYkdGemN6b2dlMXh1SUNBZ0lHWm5PaUF6TkN4Y2JpQWdmU3hjYmlBZ2FXUTZJSHRjYmlBZ0lDQm1aem9nTXpZc1hHNGdJSDBzWEc0Z0lITjBZV05yT2lCN2ZTeGNiaUFnZEdsdFpYTjBZVzF3T2lCN2ZTeGNiaUFnYldWemMyRm5aVG9nZTF4dUlDQWdJR1Z5Y205eU9pQjdYRzRnSUNBZ0lDQm1aem9nTXpFc1hHNGdJQ0FnZlN4Y2JpQWdmU3hjYmlBZ2JXVjBhRzlrT2lCN2ZTeGNiaUFnYkc5blRHVjJaV3c2SUh0Y2JpQWdJQ0JsY25KdmNqb2dlMXh1SUNBZ0lDQWdabWM2SURNeExGeHVJQ0FnSUNBZ2MzUjViR1U2SUZ0Y0ltSnZiR1JjSWwwc1hHNGdJQ0FnZlN4Y2JpQWdJQ0JwYm1adk9pQjdmU3hjYmlBZ0lDQjJaWEppYjNObE9pQjdmU3hjYmlBZ0lDQmtaV0oxWnpvZ2UxeHVJQ0FnSUNBZ1ptYzZJRE16TEZ4dUlDQWdJSDBzWEc0Z0lIMHNYRzU5TzF4dVhHNHZLaXBjYmlBcUlFQmtaWE5qY21sd2RHbHZiaUJFWldaaGRXeDBJR052Ym1acFozVnlZWFJwYjI0Z1ptOXlJR3h2WjJkcGJtY3VYRzRnS2lCQWMzVnRiV0Z5ZVNCRVpXWnBibVZ6SUhSb1pTQmtaV1poZFd4MElITmxkSFJwYm1keklHWnZjaUIwYUdVZ2JHOW5aMmx1WnlCemVYTjBaVzBzSUdsdVkyeDFaR2x1WnlCMlpYSmliM05wZEhrc0lHeHZaeUJzWlhabGJDd2djM1I1YkdsdVp5d2dZVzVrSUhScGJXVnpkR0Z0Y0NCbWIzSnRZWFF1WEc0Z0tpQkFZMjl1YzNRZ1JHVm1ZWFZzZEV4dloyZHBibWREYjI1bWFXZGNiaUFxSUVCMGVYQmxaR1ZtSUh0TWIyZG5hVzVuUTI5dVptbG5mU0JFWldaaGRXeDBURzluWjJsdVowTnZibVpwWjF4dUlDb2dRSEJ5YjNCbGNuUjVJSHR1ZFcxaVpYSjlJSFpsY21KdmMyVWdMU0JXWlhKaWIzTnBkSGtnYkdWMlpXd2dLREFwTGx4dUlDb2dRSEJ5YjNCbGNuUjVJSHRNYjJkTVpYWmxiSDBnYkdWMlpXd2dMU0JFWldaaGRXeDBJR3h2WnlCc1pYWmxiQ0FvVEc5blRHVjJaV3d1YVc1bWJ5a3VYRzRnS2lCQWNISnZjR1Z5ZEhrZ2UySnZiMnhsWVc1OUlITjBlV3hsSUMwZ1YyaGxkR2hsY2lCMGJ5QmhjSEJzZVNCemRIbHNhVzVuSUhSdklHeHZaeUJ2ZFhSd2RYUWdLR1poYkhObEtTNWNiaUFxSUVCd2NtOXdaWEowZVNCN1ltOXZiR1ZoYm4wZ2RHbHRaWE4wWVcxd0lDMGdWMmhsZEdobGNpQjBieUJwYm1Oc2RXUmxJSFJwYldWemRHRnRjSE1nYVc0Z2JHOW5JRzFsYzNOaFoyVnpJQ2gwY25WbEtTNWNiaUFxSUVCd2NtOXdaWEowZVNCN2MzUnlhVzVuZlNCMGFXMWxjM1JoYlhCR2IzSnRZWFFnTFNCR2IzSnRZWFFnWm05eUlIUnBiV1Z6ZEdGdGNITWdLRndpU0VnNmJXMDZjM011VTFOVFhDSXBMbHh1SUNvZ1FIQnliM0JsY25SNUlIdGliMjlzWldGdWZTQmpiMjUwWlhoMElDMGdWMmhsZEdobGNpQjBieUJwYm1Oc2RXUmxJR052Ym5SbGVIUWdhVzVtYjNKdFlYUnBiMjRnYVc0Z2JHOW5JRzFsYzNOaFoyVnpJQ2gwY25WbEtTNWNiaUFxSUVCd2NtOXdaWEowZVNCN1ZHaGxiV1Y5SUhSb1pXMWxJQzBnVkdobElIUm9aVzFsSUhSdklIVnpaU0JtYjNJZ2MzUjViR2x1WnlCc2IyY2diV1Z6YzJGblpYTWdLRVJsWm1GMWJIUlVhR1Z0WlNrdVhHNGdLaUJBYldWdFltVnlUMllnUUdSbFkyRm1MWFJ6TDNWMGFXeHpYRzRnS2k5Y2JtVjRjRzl5ZENCamIyNXpkQ0JFWldaaGRXeDBURzluWjJsdVowTnZibVpwWnpvZ1RHOW5aMmx1WjBOdmJtWnBaeUE5SUh0Y2JpQWdkbVZ5WW05elpUb2dNQ3hjYmlBZ2JHVjJaV3c2SUV4dloweGxkbVZzTG1sdVptOHNYRzRnSUd4dloweGxkbVZzT2lCMGNuVmxMRnh1SUNCdGIyUmxPaUJNYjJkbmFXNW5UVzlrWlM1U1FWY3NYRzRnSUhOMGVXeGxPaUJtWVd4elpTeGNiaUFnYzJWd1lYSmhkRzl5T2lCY0lpQXRJRndpTEZ4dUlDQjBhVzFsYzNSaGJYQTZJSFJ5ZFdVc1hHNGdJSFJwYldWemRHRnRjRVp2Y20xaGREb2dYQ0pJU0RwdGJUcHpjeTVUVTFOY0lpeGNiaUFnWTI5dWRHVjRkRG9nZEhKMVpTeGNiaUFnZEdobGJXVTZJRVJsWm1GMWJIUlVhR1Z0WlN4Y2JuMDdYRzRpWFgwPSIsIi8qKlxuICogQGRlc2NyaXB0aW9uIEFOU0kgZXNjYXBlIGNvZGUgZm9yIHJlc2V0dGluZyB0ZXh0IGZvcm1hdHRpbmcuXG4gKiBAc3VtbWFyeSBUaGlzIGNvbnN0YW50IGhvbGRzIHRoZSBBTlNJIGVzY2FwZSBzZXF1ZW5jZSB1c2VkIHRvIHJlc2V0IGFsbCB0ZXh0IGZvcm1hdHRpbmcgdG8gZGVmYXVsdC5cbiAqIEBjb25zdCBBbnNpUmVzZXRcbiAqIEBtZW1iZXJPZiBtb2R1bGU6U3R5bGVkU3RyaW5nXG4gKi9cbmV4cG9ydCBjb25zdCBBbnNpUmVzZXQgPSBcIlxceDFiWzBtXCI7XG4vKipcbiAqIEBkZXNjcmlwdGlvbiBTdGFuZGFyZCBmb3JlZ3JvdW5kIGNvbG9yIGNvZGVzIGZvciBBTlNJIHRleHQgZm9ybWF0dGluZy5cbiAqIEBzdW1tYXJ5IFRoaXMgb2JqZWN0IG1hcHMgY29sb3IgbmFtZXMgdG8gdGhlaXIgY29ycmVzcG9uZGluZyBBTlNJIGNvbG9yIGNvZGVzIGZvciBzdGFuZGFyZCBmb3JlZ3JvdW5kIGNvbG9ycy5cbiAqIEBjb25zdCBTdGFuZGFyZEZvcmVncm91bmRDb2xvcnNcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBibGFjayAtIEFOU0kgY29kZSBmb3IgYmxhY2sgdGV4dCAoMzApLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IHJlZCAtIEFOU0kgY29kZSBmb3IgcmVkIHRleHQgKDMxKS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBncmVlbiAtIEFOU0kgY29kZSBmb3IgZ3JlZW4gdGV4dCAoMzIpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IHllbGxvdyAtIEFOU0kgY29kZSBmb3IgeWVsbG93IHRleHQgKDMzKS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBibHVlIC0gQU5TSSBjb2RlIGZvciBibHVlIHRleHQgKDM0KS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBtYWdlbnRhIC0gQU5TSSBjb2RlIGZvciBtYWdlbnRhIHRleHQgKDM1KS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBjeWFuIC0gQU5TSSBjb2RlIGZvciBjeWFuIHRleHQgKDM2KS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB3aGl0ZSAtIEFOU0kgY29kZSBmb3Igd2hpdGUgdGV4dCAoMzcpLlxuICogQG1lbWJlck9mIG1vZHVsZTpTdHlsZWRTdHJpbmdcbiAqL1xuZXhwb3J0IGNvbnN0IFN0YW5kYXJkRm9yZWdyb3VuZENvbG9ycyA9IHtcbiAgICBibGFjazogMzAsXG4gICAgcmVkOiAzMSxcbiAgICBncmVlbjogMzIsXG4gICAgeWVsbG93OiAzMyxcbiAgICBibHVlOiAzNCxcbiAgICBtYWdlbnRhOiAzNSxcbiAgICBjeWFuOiAzNixcbiAgICB3aGl0ZTogMzcsXG59O1xuLyoqXG4gKiBAZGVzY3JpcHRpb24gQnJpZ2h0IGZvcmVncm91bmQgY29sb3IgY29kZXMgZm9yIEFOU0kgdGV4dCBmb3JtYXR0aW5nLlxuICogQHN1bW1hcnkgVGhpcyBvYmplY3QgbWFwcyBjb2xvciBuYW1lcyB0byB0aGVpciBjb3JyZXNwb25kaW5nIEFOU0kgY29sb3IgY29kZXMgZm9yIGJyaWdodCBmb3JlZ3JvdW5kIGNvbG9ycy5cbiAqIEBjb25zdCBCcmlnaHRGb3JlZ3JvdW5kQ29sb3JzXG4gKiBAcHJvcGVydHkge251bWJlcn0gYmxhY2sgLSBBTlNJIGNvZGUgZm9yIGJyaWdodCBibGFjayB0ZXh0ICg5MCkuXG4gKiBAcHJvcGVydHkge251bWJlcn0gcmVkIC0gQU5TSSBjb2RlIGZvciBicmlnaHQgcmVkIHRleHQgKDkxKS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBncmVlbiAtIEFOU0kgY29kZSBmb3IgYnJpZ2h0IGdyZWVuIHRleHQgKDkyKS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB5ZWxsb3cgLSBBTlNJIGNvZGUgZm9yIGJyaWdodCB5ZWxsb3cgdGV4dCAoOTMpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGJsdWUgLSBBTlNJIGNvZGUgZm9yIGJyaWdodCBibHVlIHRleHQgKDk0KS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBtYWdlbnRhIC0gQU5TSSBjb2RlIGZvciBicmlnaHQgbWFnZW50YSB0ZXh0ICg5NSkuXG4gKiBAcHJvcGVydHkge251bWJlcn0gY3lhbiAtIEFOU0kgY29kZSBmb3IgYnJpZ2h0IGN5YW4gdGV4dCAoOTYpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IHdoaXRlIC0gQU5TSSBjb2RlIGZvciBicmlnaHQgd2hpdGUgdGV4dCAoOTcpLlxuICogQG1lbWJlck9mIG1vZHVsZTpAU3R5bGVkU3RyaW5nXG4gKi9cbmV4cG9ydCBjb25zdCBCcmlnaHRGb3JlZ3JvdW5kQ29sb3JzID0ge1xuICAgIGJyaWdodEJsYWNrOiA5MCxcbiAgICBicmlnaHRSZWQ6IDkxLFxuICAgIGJyaWdodEdyZWVuOiA5MixcbiAgICBicmlnaHRZZWxsb3c6IDkzLFxuICAgIGJyaWdodEJsdWU6IDk0LFxuICAgIGJyaWdodE1hZ2VudGE6IDk1LFxuICAgIGJyaWdodEN5YW46IDk2LFxuICAgIGJyaWdodFdoaXRlOiA5Nyxcbn07XG4vKipcbiAqIEBkZXNjcmlwdGlvbiBTdGFuZGFyZCBiYWNrZ3JvdW5kIGNvbG9yIGNvZGVzIGZvciBBTlNJIHRleHQgZm9ybWF0dGluZy5cbiAqIEBzdW1tYXJ5IFRoaXMgb2JqZWN0IG1hcHMgY29sb3IgbmFtZXMgdG8gdGhlaXIgY29ycmVzcG9uZGluZyBBTlNJIGNvbG9yIGNvZGVzIGZvciBzdGFuZGFyZCBiYWNrZ3JvdW5kIGNvbG9ycy5cbiAqIEBjb25zdCBTdGFuZGFyZEJhY2tncm91bmRDb2xvcnNcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBiZ0JsYWNrIC0gQU5TSSBjb2RlIGZvciBibGFjayBiYWNrZ3JvdW5kICg0MCkuXG4gKiBAcHJvcGVydHkge251bWJlcn0gYmdSZWQgLSBBTlNJIGNvZGUgZm9yIHJlZCBiYWNrZ3JvdW5kICg0MSkuXG4gKiBAcHJvcGVydHkge251bWJlcn0gYmdHcmVlbiAtIEFOU0kgY29kZSBmb3IgZ3JlZW4gYmFja2dyb3VuZCAoNDIpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGJnWWVsbG93IC0gQU5TSSBjb2RlIGZvciB5ZWxsb3cgYmFja2dyb3VuZCAoNDMpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGJnQmx1ZSAtIEFOU0kgY29kZSBmb3IgYmx1ZSBiYWNrZ3JvdW5kICg0NCkuXG4gKiBAcHJvcGVydHkge251bWJlcn0gYmdNYWdlbnRhIC0gQU5TSSBjb2RlIGZvciBtYWdlbnRhIGJhY2tncm91bmQgKDQ1KS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBiZ0N5YW4gLSBBTlNJIGNvZGUgZm9yIGN5YW4gYmFja2dyb3VuZCAoNDYpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGJnV2hpdGUgLSBBTlNJIGNvZGUgZm9yIHdoaXRlIGJhY2tncm91bmQgKDQ3KS5cbiAqIEBtZW1iZXJPZiBtb2R1bGU6QFN0eWxlZFN0cmluZ1xuICovXG5leHBvcnQgY29uc3QgU3RhbmRhcmRCYWNrZ3JvdW5kQ29sb3JzID0ge1xuICAgIGJnQmxhY2s6IDQwLFxuICAgIGJnUmVkOiA0MSxcbiAgICBiZ0dyZWVuOiA0MixcbiAgICBiZ1llbGxvdzogNDMsXG4gICAgYmdCbHVlOiA0NCxcbiAgICBiZ01hZ2VudGE6IDQ1LFxuICAgIGJnQ3lhbjogNDYsXG4gICAgYmdXaGl0ZTogNDcsXG59O1xuLyoqXG4gKiBAZGVzY3JpcHRpb24gQnJpZ2h0IGJhY2tncm91bmQgY29sb3IgY29kZXMgZm9yIEFOU0kgdGV4dCBmb3JtYXR0aW5nLlxuICogQHN1bW1hcnkgVGhpcyBvYmplY3QgbWFwcyBjb2xvciBuYW1lcyB0byB0aGVpciBjb3JyZXNwb25kaW5nIEFOU0kgY29sb3IgY29kZXMgZm9yIGJyaWdodCBiYWNrZ3JvdW5kIGNvbG9ycy5cbiAqIEBjb25zdCBCcmlnaHRCYWNrZ3JvdW5kQ29sb3JzXG4gKiBAcHJvcGVydHkge251bWJlcn0gYmdCcmlnaHRCbGFjayAtIEFOU0kgY29kZSBmb3IgYnJpZ2h0IGJsYWNrIGJhY2tncm91bmQgKDEwMCkuXG4gKiBAcHJvcGVydHkge251bWJlcn0gYmdCcmlnaHRSZWQgLSBBTlNJIGNvZGUgZm9yIGJyaWdodCByZWQgYmFja2dyb3VuZCAoMTAxKS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBiZ0JyaWdodEdyZWVuIC0gQU5TSSBjb2RlIGZvciBicmlnaHQgZ3JlZW4gYmFja2dyb3VuZCAoMTAyKS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBiZ0JyaWdodFllbGxvdyAtIEFOU0kgY29kZSBmb3IgYnJpZ2h0IHllbGxvdyBiYWNrZ3JvdW5kICgxMDMpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGJnQnJpZ2h0Qmx1ZSAtIEFOU0kgY29kZSBmb3IgYnJpZ2h0IGJsdWUgYmFja2dyb3VuZCAoMTA0KS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBiZ0JyaWdodE1hZ2VudGEgLSBBTlNJIGNvZGUgZm9yIGJyaWdodCBtYWdlbnRhIGJhY2tncm91bmQgKDEwNSkuXG4gKiBAcHJvcGVydHkge251bWJlcn0gYmdCcmlnaHRDeWFuIC0gQU5TSSBjb2RlIGZvciBicmlnaHQgY3lhbiBiYWNrZ3JvdW5kICgxMDYpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGJnQnJpZ2h0V2hpdGUgLSBBTlNJIGNvZGUgZm9yIGJyaWdodCB3aGl0ZSBiYWNrZ3JvdW5kICgxMDcpLlxuICogQG1lbWJlck9mIG1vZHVsZTpAU3R5bGVkU3RyaW5nXG4gKi9cbmV4cG9ydCBjb25zdCBCcmlnaHRCYWNrZ3JvdW5kQ29sb3JzID0ge1xuICAgIGJnQnJpZ2h0QmxhY2s6IDEwMCxcbiAgICBiZ0JyaWdodFJlZDogMTAxLFxuICAgIGJnQnJpZ2h0R3JlZW46IDEwMixcbiAgICBiZ0JyaWdodFllbGxvdzogMTAzLFxuICAgIGJnQnJpZ2h0Qmx1ZTogMTA0LFxuICAgIGJnQnJpZ2h0TWFnZW50YTogMTA1LFxuICAgIGJnQnJpZ2h0Q3lhbjogMTA2LFxuICAgIGJnQnJpZ2h0V2hpdGU6IDEwNyxcbn07XG4vKipcbiAqIEBkZXNjcmlwdGlvbiBUZXh0IHN0eWxlIGNvZGVzIGZvciBBTlNJIHRleHQgZm9ybWF0dGluZy5cbiAqIEBzdW1tYXJ5IFRoaXMgb2JqZWN0IG1hcHMgc3R5bGUgbmFtZXMgdG8gdGhlaXIgY29ycmVzcG9uZGluZyBBTlNJIGNvZGVzIGZvciB2YXJpb3VzIHRleHQgc3R5bGVzLlxuICogQGNvbnN0IHN0eWxlc1xuICogQHByb3BlcnR5IHtudW1iZXJ9IHJlc2V0IC0gQU5TSSBjb2RlIHRvIHJlc2V0IGFsbCBzdHlsZXMgKDApLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGJvbGQgLSBBTlNJIGNvZGUgZm9yIGJvbGQgdGV4dCAoMSkuXG4gKiBAcHJvcGVydHkge251bWJlcn0gZGltIC0gQU5TSSBjb2RlIGZvciBkaW0gdGV4dCAoMikuXG4gKiBAcHJvcGVydHkge251bWJlcn0gaXRhbGljIC0gQU5TSSBjb2RlIGZvciBpdGFsaWMgdGV4dCAoMykuXG4gKiBAcHJvcGVydHkge251bWJlcn0gdW5kZXJsaW5lIC0gQU5TSSBjb2RlIGZvciB1bmRlcmxpbmVkIHRleHQgKDQpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGJsaW5rIC0gQU5TSSBjb2RlIGZvciBibGlua2luZyB0ZXh0ICg1KS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBpbnZlcnNlIC0gQU5TSSBjb2RlIGZvciBpbnZlcnNlIGNvbG9ycyAoNykuXG4gKiBAcHJvcGVydHkge251bWJlcn0gaGlkZGVuIC0gQU5TSSBjb2RlIGZvciBoaWRkZW4gdGV4dCAoOCkuXG4gKiBAcHJvcGVydHkge251bWJlcn0gc3RyaWtldGhyb3VnaCAtIEFOU0kgY29kZSBmb3Igc3RyaWtldGhyb3VnaCB0ZXh0ICg5KS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBkb3VibGVVbmRlcmxpbmUgLSBBTlNJIGNvZGUgZm9yIGRvdWJsZSB1bmRlcmxpbmVkIHRleHQgKDIxKS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBub3JtYWxDb2xvciAtIEFOU0kgY29kZSB0byByZXNldCBjb2xvciB0byBub3JtYWwgKDIyKS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBub0l0YWxpY09yRnJha3R1ciAtIEFOU0kgY29kZSB0byB0dXJuIG9mZiBpdGFsaWMgKDIzKS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBub1VuZGVybGluZSAtIEFOU0kgY29kZSB0byB0dXJuIG9mZiB1bmRlcmxpbmUgKDI0KS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBub0JsaW5rIC0gQU5TSSBjb2RlIHRvIHR1cm4gb2ZmIGJsaW5rICgyNSkuXG4gKiBAcHJvcGVydHkge251bWJlcn0gbm9JbnZlcnNlIC0gQU5TSSBjb2RlIHRvIHR1cm4gb2ZmIGludmVyc2UgKDI3KS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBub0hpZGRlbiAtIEFOU0kgY29kZSB0byB0dXJuIG9mZiBoaWRkZW4gKDI4KS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBub1N0cmlrZXRocm91Z2ggLSBBTlNJIGNvZGUgdG8gdHVybiBvZmYgc3RyaWtldGhyb3VnaCAoMjkpLlxuICogQG1lbWJlck9mIG1vZHVsZTpAU3R5bGVkU3RyaW5nXG4gKi9cbmV4cG9ydCBjb25zdCBzdHlsZXMgPSB7XG4gICAgcmVzZXQ6IDAsXG4gICAgYm9sZDogMSxcbiAgICBkaW06IDIsXG4gICAgaXRhbGljOiAzLFxuICAgIHVuZGVybGluZTogNCxcbiAgICBibGluazogNSxcbiAgICBpbnZlcnNlOiA3LFxuICAgIGhpZGRlbjogOCxcbiAgICBzdHJpa2V0aHJvdWdoOiA5LFxuICAgIGRvdWJsZVVuZGVybGluZTogMjEsXG4gICAgbm9ybWFsQ29sb3I6IDIyLFxuICAgIG5vSXRhbGljT3JGcmFrdHVyOiAyMyxcbiAgICBub1VuZGVybGluZTogMjQsXG4gICAgbm9CbGluazogMjUsXG4gICAgbm9JbnZlcnNlOiAyNyxcbiAgICBub0hpZGRlbjogMjgsXG4gICAgbm9TdHJpa2V0aHJvdWdoOiAyOSxcbn07XG4iLCJpbXBvcnQgeyBBbnNpUmVzZXQsIHN0eWxlcyB9IGZyb20gXCIuL2NvbnN0YW50cy5qc1wiO1xuLyoqXG4gKiBAZGVzY3JpcHRpb24gQXBwbGllcyBhIGJhc2ljIEFOU0kgY29sb3IgY29kZSB0byB0ZXh0LlxuICogQHN1bW1hcnkgVGhpcyBmdW5jdGlvbiB0YWtlcyBhIHN0cmluZywgYW4gQU5TSSBjb2xvciBjb2RlIG51bWJlciwgYW5kIGFuIG9wdGlvbmFsIGJhY2tncm91bmQgZmxhZy5cbiAqIEl0IHJldHVybnMgdGhlIHRleHQgd3JhcHBlZCBpbiB0aGUgYXBwcm9wcmlhdGUgQU5TSSBlc2NhcGUgY29kZXMgZm9yIGVpdGhlciBmb3JlZ3JvdW5kIG9yIGJhY2tncm91bmQgY29sb3JpbmcuXG4gKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgZm9yIGJhc2ljIDE2LWNvbG9yIEFOU0kgZm9ybWF0dGluZy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIFRoZSB0ZXh0IHRvIGJlIGNvbG9yZWQuXG4gKiBAcGFyYW0ge251bWJlcn0gbiAtIFRoZSBBTlNJIGNvbG9yIGNvZGUgbnVtYmVyLlxuICogQHBhcmFtIHtib29sZWFufSBbYmc9ZmFsc2VdIC0gSWYgdHJ1ZSwgYXBwbGllcyB0aGUgY29sb3IgdG8gdGhlIGJhY2tncm91bmQgaW5zdGVhZCBvZiB0aGUgZm9yZWdyb3VuZC5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIHRleHQgd3JhcHBlZCBpbiBBTlNJIGNvbG9yIGNvZGVzLlxuICpcbiAqIEBmdW5jdGlvbiBjb2xvcml6ZUFOU0lcbiAqIEBtZW1iZXJPZiBtb2R1bGU6QFN0eWxlZFN0cmluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gY29sb3JpemVBTlNJKHRleHQsIG4sIGJnID0gZmFsc2UpIHtcbiAgICBpZiAoaXNOYU4obikpIHtcbiAgICAgICAgY29uc29sZS53YXJuKGBJbnZhbGlkIGNvbG9yIG51bWJlciBvbiB0aGUgQU5TSSBzY2FsZTogJHtufS4gaWdub3JpbmcuLi5gKTtcbiAgICAgICAgcmV0dXJuIHRleHQ7XG4gICAgfVxuICAgIGlmIChiZyAmJiAoKG4gPiAzMCAmJiBuIDw9IDQwKVxuICAgICAgICB8fCAobiA+IDkwICYmIG4gPD0gMTAwKSkpIHtcbiAgICAgICAgbiA9IG4gKyAxMDtcbiAgICB9XG4gICAgcmV0dXJuIGBcXHgxYlske259bSR7dGV4dH0ke0Fuc2lSZXNldH1gO1xufVxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQXBwbGllcyBhIDI1Ni1jb2xvciBBTlNJIGNvZGUgdG8gdGV4dC5cbiAqIEBzdW1tYXJ5IFRoaXMgZnVuY3Rpb24gdGFrZXMgYSBzdHJpbmcgYW5kIGEgY29sb3IgbnVtYmVyICgwLTI1NSkgYW5kIHJldHVybnMgdGhlIHRleHRcbiAqIHdyYXBwZWQgaW4gQU5TSSBlc2NhcGUgY29kZXMgZm9yIGVpdGhlciBmb3JlZ3JvdW5kIG9yIGJhY2tncm91bmQgY29sb3JpbmcuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBUaGUgdGV4dCB0byBiZSBjb2xvcmVkLlxuICogQHBhcmFtIHtudW1iZXJ9IG4gLSBUaGUgY29sb3IgbnVtYmVyICgwLTI1NSkuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtiZz1mYWxzZV0gLSBJZiB0cnVlLCBhcHBsaWVzIHRoZSBjb2xvciB0byB0aGUgYmFja2dyb3VuZCBpbnN0ZWFkIG9mIHRoZSBmb3JlZ3JvdW5kLlxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgdGV4dCB3cmFwcGVkIGluIEFOU0kgY29sb3IgY29kZXMuXG4gKlxuICogQGZ1bmN0aW9uIGNvbG9yaXplMjU2XG4gKiBAbWVtYmVyT2YgbW9kdWxlOkBTdHlsZWRTdHJpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbG9yaXplMjU2KHRleHQsIG4sIGJnID0gZmFsc2UpIHtcbiAgICBpZiAoaXNOYU4obikpIHtcbiAgICAgICAgY29uc29sZS53YXJuKGBJbnZhbGlkIGNvbG9yIG51bWJlciBvbiB0aGUgMjU2IHNjYWxlOiAke259LiBpZ25vcmluZy4uLmApO1xuICAgICAgICByZXR1cm4gdGV4dDtcbiAgICB9XG4gICAgaWYgKG4gPCAwIHx8IG4gPiAyNTUpIHtcbiAgICAgICAgY29uc29sZS53YXJuKGBJbnZhbGlkIGNvbG9yIG51bWJlciBvbiB0aGUgMjU2IHNjYWxlOiAke259LiBpZ25vcmluZy4uLmApO1xuICAgICAgICByZXR1cm4gdGV4dDtcbiAgICB9XG4gICAgcmV0dXJuIGBcXHgxYlske2JnID8gNDggOiAzOH07NTske259bSR7dGV4dH0ke0Fuc2lSZXNldH1gO1xufVxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQXBwbGllcyBhbiBSR0IgY29sb3IgQU5TSSBjb2RlIHRvIHRleHQuXG4gKiBAc3VtbWFyeSBUaGlzIGZ1bmN0aW9uIHRha2VzIGEgc3RyaW5nIGFuZCBSR0IgY29sb3IgdmFsdWVzICgwLTI1NSBmb3IgZWFjaCBjb21wb25lbnQpXG4gKiBhbmQgcmV0dXJucyB0aGUgdGV4dCB3cmFwcGVkIGluIEFOU0kgZXNjYXBlIGNvZGVzIGZvciBlaXRoZXIgZm9yZWdyb3VuZCBvciBiYWNrZ3JvdW5kIGNvbG9yaW5nLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gVGhlIHRleHQgdG8gYmUgY29sb3JlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSByIC0gVGhlIHJlZCBjb21wb25lbnQgb2YgdGhlIGNvbG9yICgwLTI1NSkuXG4gKiBAcGFyYW0ge251bWJlcn0gZyAtIFRoZSBncmVlbiBjb21wb25lbnQgb2YgdGhlIGNvbG9yICgwLTI1NSkuXG4gKiBAcGFyYW0ge251bWJlcn0gYiAtIFRoZSBibHVlIGNvbXBvbmVudCBvZiB0aGUgY29sb3IgKDAtMjU1KS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2JnPWZhbHNlXSAtIElmIHRydWUsIGFwcGxpZXMgdGhlIGNvbG9yIHRvIHRoZSBiYWNrZ3JvdW5kIGluc3RlYWQgb2YgdGhlIGZvcmVncm91bmQuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSB0ZXh0IHdyYXBwZWQgaW4gQU5TSSBjb2xvciBjb2Rlcy5cbiAqXG4gKiBAZnVuY3Rpb24gY29sb3JpemVSR0JcbiAqIEBtZW1iZXJPZiBtb2R1bGU6U3R5bGVkU3RyaW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb2xvcml6ZVJHQih0ZXh0LCByLCBnLCBiLCBiZyA9IGZhbHNlKSB7XG4gICAgaWYgKGlzTmFOKHIpIHx8IGlzTmFOKGcpIHx8IGlzTmFOKGIpKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihgSW52YWxpZCBSR0IgY29sb3IgdmFsdWVzOiByPSR7cn0sIGc9JHtnfSwgYj0ke2J9LiBJZ25vcmluZy4uLmApO1xuICAgICAgICByZXR1cm4gdGV4dDtcbiAgICB9XG4gICAgaWYgKFtyLCBnLCBiXS5zb21lKHYgPT4gdiA8IDAgfHwgdiA+IDI1NSkpIHtcbiAgICAgICAgY29uc29sZS53YXJuKGBJbnZhbGlkIFJHQiBjb2xvciB2YWx1ZXM6IHI9JHtyfSwgZz0ke2d9LCBiPSR7Yn0uIElnbm9yaW5nLi4uYCk7XG4gICAgICAgIHJldHVybiB0ZXh0O1xuICAgIH1cbiAgICByZXR1cm4gYFxceDFiWyR7YmcgPyA0OCA6IDM4fTsyOyR7cn07JHtnfTske2J9bSR7dGV4dH0ke0Fuc2lSZXNldH1gO1xufVxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQXBwbGllcyBhbiBBTlNJIHN0eWxlIGNvZGUgdG8gdGV4dC5cbiAqIEBzdW1tYXJ5IFRoaXMgZnVuY3Rpb24gdGFrZXMgYSBzdHJpbmcgYW5kIGEgc3R5bGUgY29kZSAoZWl0aGVyIGEgbnVtYmVyIG9yIGEga2V5IGZyb20gdGhlIHN0eWxlcyBvYmplY3QpXG4gKiBhbmQgcmV0dXJucyB0aGUgdGV4dCB3cmFwcGVkIGluIHRoZSBhcHByb3ByaWF0ZSBBTlNJIGVzY2FwZSBjb2RlcyBmb3IgdGhhdCBzdHlsZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIFRoZSB0ZXh0IHRvIGJlIHN0eWxlZC5cbiAqIEBwYXJhbSB7bnVtYmVyIHwgc3RyaW5nfSBuIC0gVGhlIHN0eWxlIGNvZGUgb3Igc3R5bGUgbmFtZS5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIHRleHQgd3JhcHBlZCBpbiBBTlNJIHN0eWxlIGNvZGVzLlxuICpcbiAqIEBmdW5jdGlvbiBhcHBseVN0eWxlXG4gKiBAbWVtYmVyT2YgbW9kdWxlOlN0eWxlZFN0cmluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlTdHlsZSh0ZXh0LCBuKSB7XG4gICAgY29uc3Qgc3R5bGVDb2RlID0gdHlwZW9mIG4gPT09IFwibnVtYmVyXCIgPyBuIDogc3R5bGVzW25dO1xuICAgIHJldHVybiBgXFx4MWJbJHtzdHlsZUNvZGV9bSR7dGV4dH0ke0Fuc2lSZXNldH1gO1xufVxuLyoqXG4gKiBAZGVzY3JpcHRpb24gUmVtb3ZlcyBhbGwgQU5TSSBmb3JtYXR0aW5nIGNvZGVzIGZyb20gdGV4dC5cbiAqIEBzdW1tYXJ5IFRoaXMgZnVuY3Rpb24gdGFrZXMgYSBzdHJpbmcgdGhhdCBtYXkgY29udGFpbiBBTlNJIGVzY2FwZSBjb2RlcyBmb3IgZm9ybWF0dGluZ1xuICogYW5kIHJldHVybnMgYSBuZXcgc3RyaW5nIHdpdGggYWxsIHN1Y2ggY29kZXMgcmVtb3ZlZCwgbGVhdmluZyBvbmx5IHRoZSBwbGFpbiB0ZXh0IGNvbnRlbnQuXG4gKiBJdCB1c2VzIGEgcmVndWxhciBleHByZXNzaW9uIHRvIG1hdGNoIGFuZCByZW1vdmUgQU5TSSBlc2NhcGUgc2VxdWVuY2VzLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gVGhlIHRleHQgcG90ZW50aWFsbHkgY29udGFpbmluZyBBTlNJIGZvcm1hdHRpbmcgY29kZXMuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBpbnB1dCB0ZXh0IHdpdGggYWxsIEFOU0kgZm9ybWF0dGluZyBjb2RlcyByZW1vdmVkLlxuICpcbiAqIEBmdW5jdGlvbiBjbGVhclxuICogQG1lbWJlck9mIG1vZHVsZTpTdHlsZWRTdHJpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsZWFyKHRleHQpIHtcbiAgICAvLyBSZWd1bGFyIGV4cHJlc3Npb24gdG8gbWF0Y2ggQU5TSSBlc2NhcGUgY29kZXNcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29udHJvbC1yZWdleFxuICAgIGNvbnN0IGFuc2lSZWdleCA9IC9cXHgxQig/OltALVpcXFxcLV9dfFxcW1swLT9dKlsgLS9dKltALX5dKS9nO1xuICAgIHJldHVybiB0ZXh0LnJlcGxhY2UoYW5zaVJlZ2V4LCAnJyk7XG59XG4vKipcbiAqIEBkZXNjcmlwdGlvbiBBcHBsaWVzIHJhdyBBTlNJIGVzY2FwZSBjb2RlcyB0byB0ZXh0LlxuICogQHN1bW1hcnkgVGhpcyBmdW5jdGlvbiB0YWtlcyBhIHN0cmluZyBhbmQgYSByYXcgQU5TSSBlc2NhcGUgY29kZSwgYW5kIHJldHVybnMgdGhlIHRleHRcbiAqIHdyYXBwZWQgaW4gdGhlIHByb3ZpZGVkIHJhdyBBTlNJIGNvZGUgYW5kIHRoZSByZXNldCBjb2RlLiBUaGlzIGFsbG93cyBmb3IgYXBwbHlpbmcgY3VzdG9tXG4gKiBvciBjb21wbGV4IEFOU0kgZm9ybWF0dGluZyB0aGF0IG1heSBub3QgYmUgY292ZXJlZCBieSBvdGhlciB1dGlsaXR5IGZ1bmN0aW9ucy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIFRoZSB0ZXh0IHRvIGJlIGZvcm1hdHRlZC5cbiAqIEBwYXJhbSB7c3RyaW5nfSByYXcgLSBUaGUgcmF3IEFOU0kgZXNjYXBlIGNvZGUgdG8gYmUgYXBwbGllZC5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIHRleHQgd3JhcHBlZCBpbiB0aGUgcmF3IEFOU0kgY29kZSBhbmQgdGhlIHJlc2V0IGNvZGUuXG4gKlxuICogQGZ1bmN0aW9uIHJhd1xuICogQG1lbWJlck9mIG1vZHVsZTpTdHlsZWRTdHJpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJhdyh0ZXh0LCByYXcpIHtcbiAgICByZXR1cm4gYCR7cmF3fSR7dGV4dH0ke0Fuc2lSZXNldH1gO1xufVxuIiwiaW1wb3J0IHsgQnJpZ2h0QmFja2dyb3VuZENvbG9ycywgQnJpZ2h0Rm9yZWdyb3VuZENvbG9ycywgU3RhbmRhcmRCYWNrZ3JvdW5kQ29sb3JzLCBTdGFuZGFyZEZvcmVncm91bmRDb2xvcnMsIHN0eWxlcywgfSBmcm9tIFwiLi9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IGNsZWFyLCBjb2xvcml6ZTI1NiwgY29sb3JpemVBTlNJLCBjb2xvcml6ZVJHQiwgcmF3LCBhcHBseVN0eWxlLCB9IGZyb20gXCIuL2NvbG9ycy5qc1wiO1xuLyoqXG4gKiBAY2xhc3MgU3R5bGVkU3RyaW5nXG4gKiBAZGVzY3JpcHRpb24gQSBjbGFzcyB0aGF0IGV4dGVuZHMgc3RyaW5nIGZ1bmN0aW9uYWxpdHkgd2l0aCBBTlNJIGNvbG9yIGFuZCBzdHlsZSBvcHRpb25zLlxuICogQHN1bW1hcnkgU3R5bGVkU3RyaW5nIHByb3ZpZGVzIG1ldGhvZHMgdG8gYXBwbHkgdmFyaW91cyBBTlNJIGNvbG9yIGFuZCBzdHlsZSBvcHRpb25zIHRvIHRleHQgc3RyaW5ncy5cbiAqIEl0IGltcGxlbWVudHMgdGhlIENvbG9yaXplT3B0aW9ucyBpbnRlcmZhY2UgYW5kIHByb3hpZXMgbmF0aXZlIHN0cmluZyBtZXRob2RzIHRvIHRoZSB1bmRlcmx5aW5nIHRleHQuXG4gKiBUaGlzIGNsYXNzIGFsbG93cyBmb3IgY2hhaW5pbmcgb2Ygc3R5bGluZyBtZXRob2RzIGFuZCBlYXN5IGFwcGxpY2F0aW9uIG9mIGNvbG9ycyBhbmQgc3R5bGVzIHRvIHRleHQuXG4gKlxuICogQGltcGxlbWVudHMge0NvbG9yaXplT3B0aW9uc31cbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gVGhlIGluaXRpYWwgdGV4dCBzdHJpbmcgdG8gYmUgc3R5bGVkLlxuICovXG5leHBvcnQgY2xhc3MgU3R5bGVkU3RyaW5nIHtcbiAgICBjb25zdHJ1Y3Rvcih0ZXh0KSB7XG4gICAgICAgIHRoaXMudGV4dCA9IHRleHQ7XG4gICAgICAgIC8vIEJhc2ljIGNvbG9yc1xuICAgICAgICBPYmplY3QuZW50cmllcyhTdGFuZGFyZEZvcmVncm91bmRDb2xvcnMpLmZvckVhY2goKFtuYW1lLCBjb2RlXSkgPT4ge1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIG5hbWUsIHtcbiAgICAgICAgICAgICAgICBnZXQ6ICgpID0+IHRoaXMuZm9yZWdyb3VuZChjb2RlKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgT2JqZWN0LmVudHJpZXMoQnJpZ2h0Rm9yZWdyb3VuZENvbG9ycykuZm9yRWFjaCgoW25hbWUsIGNvZGVdKSA9PiB7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgbmFtZSwge1xuICAgICAgICAgICAgICAgIGdldDogKCkgPT4gdGhpcy5mb3JlZ3JvdW5kKGNvZGUpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBCYWNrZ3JvdW5kIGNvbG9yc1xuICAgICAgICBPYmplY3QuZW50cmllcyhTdGFuZGFyZEJhY2tncm91bmRDb2xvcnMpLmZvckVhY2goKFtuYW1lLCBjb2RlXSkgPT4ge1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIG5hbWUsIHtcbiAgICAgICAgICAgICAgICBnZXQ6ICgpID0+IHRoaXMuYmFja2dyb3VuZChjb2RlKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgT2JqZWN0LmVudHJpZXMoQnJpZ2h0QmFja2dyb3VuZENvbG9ycykuZm9yRWFjaCgoW25hbWUsIGNvZGVdKSA9PiB7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgbmFtZSwge1xuICAgICAgICAgICAgICAgIGdldDogKCkgPT4gdGhpcy5iYWNrZ3JvdW5kKGNvZGUpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBTdHlsZXNcbiAgICAgICAgT2JqZWN0LmVudHJpZXMoc3R5bGVzKS5mb3JFYWNoKChbbmFtZSwgY29kZV0pID0+IHtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBuYW1lLCB7XG4gICAgICAgICAgICAgICAgZ2V0OiAoKSA9PiB0aGlzLnN0eWxlKGNvZGUpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ2xlYXJzIGFsbCBzdHlsaW5nIGZyb20gdGhlIHRleHQuXG4gICAgICogQHN1bW1hcnkgUmVtb3ZlcyBhbGwgQU5TSSBjb2xvciBhbmQgc3R5bGUgY29kZXMgZnJvbSB0aGUgdGV4dC5cbiAgICAgKiBAcmV0dXJuIHtTdHlsZWRTdHJpbmd9IFRoZSBTdHlsZWRTdHJpbmcgaW5zdGFuY2Ugd2l0aCBjbGVhcmVkIHN0eWxpbmcuXG4gICAgICovXG4gICAgY2xlYXIoKSB7XG4gICAgICAgIHRoaXMudGV4dCA9IGNsZWFyKHRoaXMudGV4dCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQXBwbGllcyByYXcgQU5TSSBjb2RlcyB0byB0aGUgdGV4dC5cbiAgICAgKiBAc3VtbWFyeSBBbGxvd3MgZGlyZWN0IGFwcGxpY2F0aW9uIG9mIEFOU0kgZXNjYXBlIHNlcXVlbmNlcyB0byB0aGUgdGV4dC5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gcmF3QW5zaSAtIFRoZSByYXcgQU5TSSBlc2NhcGUgc2VxdWVuY2UgdG8gYXBwbHkuXG4gICAgICogQHJldHVybiB7U3R5bGVkU3RyaW5nfSBUaGUgU3R5bGVkU3RyaW5nIGluc3RhbmNlIHdpdGggdGhlIHJhdyBBTlNJIGNvZGUgYXBwbGllZC5cbiAgICAgKi9cbiAgICByYXcocmF3QW5zaSkge1xuICAgICAgICB0aGlzLnRleHQgPSByYXcodGhpcy50ZXh0LCByYXdBbnNpKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBBcHBsaWVzIGEgZm9yZWdyb3VuZCBjb2xvciB0byB0aGUgdGV4dC5cbiAgICAgKiBAc3VtbWFyeSBTZXRzIHRoZSB0ZXh0IGNvbG9yIHVzaW5nIEFOU0kgY29sb3IgY29kZXMuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG4gLSBUaGUgQU5TSSBjb2xvciBjb2RlIGZvciB0aGUgZm9yZWdyb3VuZCBjb2xvci5cbiAgICAgKiBAcmV0dXJuIHtTdHlsZWRTdHJpbmd9IFRoZSBTdHlsZWRTdHJpbmcgaW5zdGFuY2Ugd2l0aCB0aGUgZm9yZWdyb3VuZCBjb2xvciBhcHBsaWVkLlxuICAgICAqL1xuICAgIGZvcmVncm91bmQobikge1xuICAgICAgICB0aGlzLnRleHQgPSBjb2xvcml6ZUFOU0kodGhpcy50ZXh0LCBuKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBBcHBsaWVzIGEgYmFja2dyb3VuZCBjb2xvciB0byB0aGUgdGV4dC5cbiAgICAgKiBAc3VtbWFyeSBTZXRzIHRoZSBiYWNrZ3JvdW5kIGNvbG9yIG9mIHRoZSB0ZXh0IHVzaW5nIEFOU0kgY29sb3IgY29kZXMuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG4gLSBUaGUgQU5TSSBjb2xvciBjb2RlIGZvciB0aGUgYmFja2dyb3VuZCBjb2xvci5cbiAgICAgKiBAcmV0dXJuIHtTdHlsZWRTdHJpbmd9IFRoZSBTdHlsZWRTdHJpbmcgaW5zdGFuY2Ugd2l0aCB0aGUgYmFja2dyb3VuZCBjb2xvciBhcHBsaWVkLlxuICAgICAqL1xuICAgIGJhY2tncm91bmQobikge1xuICAgICAgICB0aGlzLnRleHQgPSBjb2xvcml6ZUFOU0kodGhpcy50ZXh0LCBuLCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBBcHBsaWVzIGEgdGV4dCBzdHlsZSB0byB0aGUgc3RyaW5nLlxuICAgICAqIEBzdW1tYXJ5IFNldHMgdGV4dCBzdHlsZXMgc3VjaCBhcyBib2xkLCBpdGFsaWMsIG9yIHVuZGVybGluZSB1c2luZyBBTlNJIHN0eWxlIGNvZGVzLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyIHwgc3RyaW5nfSBuIC0gVGhlIHN0eWxlIGNvZGUgb3Iga2V5IGZyb20gdGhlIHN0eWxlcyBvYmplY3QuXG4gICAgICogQHJldHVybiB7U3R5bGVkU3RyaW5nfSBUaGUgU3R5bGVkU3RyaW5nIGluc3RhbmNlIHdpdGggdGhlIHN0eWxlIGFwcGxpZWQuXG4gICAgICovXG4gICAgc3R5bGUobikge1xuICAgICAgICBpZiAodHlwZW9mIG4gPT09IFwic3RyaW5nXCIgJiYgIShuIGluIHN0eWxlcykpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihgSW52YWxpZCBzdHlsZTogJHtufWApO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50ZXh0ID0gYXBwbHlTdHlsZSh0aGlzLnRleHQsIG4pO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEFwcGxpZXMgYSAyNTYtY29sb3IgZm9yZWdyb3VuZCBjb2xvciB0byB0aGUgdGV4dC5cbiAgICAgKiBAc3VtbWFyeSBTZXRzIHRoZSB0ZXh0IGNvbG9yIHVzaW5nIHRoZSBleHRlbmRlZCAyNTYtY29sb3IgcGFsZXR0ZS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbiAtIFRoZSBjb2xvciBudW1iZXIgZnJvbSB0aGUgMjU2LWNvbG9yIHBhbGV0dGUuXG4gICAgICogQHJldHVybiB7U3R5bGVkU3RyaW5nfSBUaGUgU3R5bGVkU3RyaW5nIGluc3RhbmNlIHdpdGggdGhlIDI1Ni1jb2xvciBmb3JlZ3JvdW5kIGFwcGxpZWQuXG4gICAgICovXG4gICAgY29sb3IyNTYobikge1xuICAgICAgICB0aGlzLnRleHQgPSBjb2xvcml6ZTI1Nih0aGlzLnRleHQsIG4pO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEFwcGxpZXMgYSAyNTYtY29sb3IgYmFja2dyb3VuZCBjb2xvciB0byB0aGUgdGV4dC5cbiAgICAgKiBAc3VtbWFyeSBTZXRzIHRoZSBiYWNrZ3JvdW5kIGNvbG9yIHVzaW5nIHRoZSBleHRlbmRlZCAyNTYtY29sb3IgcGFsZXR0ZS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbiAtIFRoZSBjb2xvciBudW1iZXIgZnJvbSB0aGUgMjU2LWNvbG9yIHBhbGV0dGUuXG4gICAgICogQHJldHVybiB7U3R5bGVkU3RyaW5nfSBUaGUgU3R5bGVkU3RyaW5nIGluc3RhbmNlIHdpdGggdGhlIDI1Ni1jb2xvciBiYWNrZ3JvdW5kIGFwcGxpZWQuXG4gICAgICovXG4gICAgYmdDb2xvcjI1NihuKSB7XG4gICAgICAgIHRoaXMudGV4dCA9IGNvbG9yaXplMjU2KHRoaXMudGV4dCwgbiwgdHJ1ZSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQXBwbGllcyBhbiBSR0IgZm9yZWdyb3VuZCBjb2xvciB0byB0aGUgdGV4dC5cbiAgICAgKiBAc3VtbWFyeSBTZXRzIHRoZSB0ZXh0IGNvbG9yIHVzaW5nIFJHQiB2YWx1ZXMuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHIgLSBUaGUgcmVkIGNvbXBvbmVudCAoMC0yNTUpLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBnIC0gVGhlIGdyZWVuIGNvbXBvbmVudCAoMC0yNTUpLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBiIC0gVGhlIGJsdWUgY29tcG9uZW50ICgwLTI1NSkuXG4gICAgICogQHJldHVybiB7U3R5bGVkU3RyaW5nfSBUaGUgU3R5bGVkU3RyaW5nIGluc3RhbmNlIHdpdGggdGhlIFJHQiBmb3JlZ3JvdW5kIGNvbG9yIGFwcGxpZWQuXG4gICAgICovXG4gICAgcmdiKHIsIGcsIGIpIHtcbiAgICAgICAgdGhpcy50ZXh0ID0gY29sb3JpemVSR0IodGhpcy50ZXh0LCByLCBnLCBiKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBBcHBsaWVzIGFuIFJHQiBiYWNrZ3JvdW5kIGNvbG9yIHRvIHRoZSB0ZXh0LlxuICAgICAqIEBzdW1tYXJ5IFNldHMgdGhlIGJhY2tncm91bmQgY29sb3IgdXNpbmcgUkdCIHZhbHVlcy5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gciAtIFRoZSByZWQgY29tcG9uZW50ICgwLTI1NSkuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGcgLSBUaGUgZ3JlZW4gY29tcG9uZW50ICgwLTI1NSkuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGIgLSBUaGUgYmx1ZSBjb21wb25lbnQgKDAtMjU1KS5cbiAgICAgKiBAcmV0dXJuIHtTdHlsZWRTdHJpbmd9IFRoZSBTdHlsZWRTdHJpbmcgaW5zdGFuY2Ugd2l0aCB0aGUgUkdCIGJhY2tncm91bmQgY29sb3IgYXBwbGllZC5cbiAgICAgKi9cbiAgICBiZ1JnYihyLCBnLCBiKSB7XG4gICAgICAgIHRoaXMudGV4dCA9IGNvbG9yaXplUkdCKHRoaXMudGV4dCwgciwgZywgYiwgdHJ1ZSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29udmVydHMgdGhlIFN0eWxlZFN0cmluZyB0byBhIHJlZ3VsYXIgc3RyaW5nLlxuICAgICAqIEBzdW1tYXJ5IFJldHVybnMgdGhlIHVuZGVybHlpbmcgdGV4dCB3aXRoIGFsbCBhcHBsaWVkIHN0eWxpbmcuXG4gICAgICogQHJldHVybiB7c3RyaW5nfSBUaGUgc3R5bGVkIHRleHQgYXMgYSByZWd1bGFyIHN0cmluZy5cbiAgICAgKi9cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGV4dDtcbiAgICB9XG59XG4vKipcbiAqIEBkZXNjcmlwdGlvbiBBcHBsaWVzIHN0eWxpbmcgdG8gYSBnaXZlbiB0ZXh0IHN0cmluZy5cbiAqIEBzdW1tYXJ5IFRoaXMgZnVuY3Rpb24gdGFrZXMgYSBzdHJpbmcgYW5kIHJldHVybnMgYSBTdHlsZWRTdHJpbmcgb2JqZWN0LCB3aGljaCBpcyBhbiBlbmhhbmNlZFxuICogdmVyc2lvbiBvZiB0aGUgb3JpZ2luYWwgc3RyaW5nIHdpdGggYWRkaXRpb25hbCBtZXRob2RzIGZvciBhcHBseWluZyB2YXJpb3VzIEFOU0kgY29sb3IgYW5kIHN0eWxlXG4gKiBvcHRpb25zLiBJdCBzZXRzIHVwIGEgbWFwcGVyIG9iamVjdCB3aXRoIG1ldGhvZHMgZm9yIGRpZmZlcmVudCBzdHlsaW5nIG9wZXJhdGlvbnMgYW5kIHRoZW5cbiAqIGRlZmluZXMgcHJvcGVydGllcyBvbiB0aGUgdGV4dCBzdHJpbmcgdG8gbWFrZSB0aGVzZSBtZXRob2RzIGFjY2Vzc2libGUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmdbXX0gdCAgVGhlIGlucHV0IHRleHQgdG8gYmUgc3R5bGVkLlxuICogQHJldHVybiB7U3R5bGVkU3RyaW5nfSBBIFN0eWxlZFN0cmluZyBvYmplY3Qgd2l0aCBhZGRpdGlvbmFsIHN0eWxpbmcgbWV0aG9kcy5cbiAqXG4gKiBAZnVuY3Rpb24gc3R5bGVcbiAqXG4gKiBAbWVtYmVyT2YgU3R5bGVkU3RyaW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHlsZSguLi50KSB7XG4gICAgcmV0dXJuIG5ldyBTdHlsZWRTdHJpbmcodC5qb2luKFwiIFwiKSk7XG59XG4iLCJpbXBvcnQgeyBzdHlsZSB9IGZyb20gXCJzdHlsZWQtc3RyaW5nLWJ1aWxkZXJcIjtcbmltcG9ydCB7IERlZmF1bHRMb2dnaW5nQ29uZmlnLCBEZWZhdWx0VGhlbWUsIExvZ0xldmVsLCBOdW1lcmljTG9nTGV2ZWxzLCB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuLyoqXG4gKiBAZGVzY3JpcHRpb24gQSBtaW5pbWFsIGxvZ2dlciBpbXBsZW1lbnRhdGlvbi5cbiAqIEBzdW1tYXJ5IE1pbmlMb2dnZXIgaXMgYSBsaWdodHdlaWdodCBsb2dnaW5nIGNsYXNzIHRoYXQgaW1wbGVtZW50cyB0aGUgVmVyYm9zaXR5TG9nZ2VyIGludGVyZmFjZS5cbiAqIEl0IHByb3ZpZGVzIGJhc2ljIGxvZ2dpbmcgZnVuY3Rpb25hbGl0eSB3aXRoIHN1cHBvcnQgZm9yIGRpZmZlcmVudCBsb2cgbGV2ZWxzIGFuZCB2ZXJib3NpdHkuXG4gKlxuICogQGNsYXNzXG4gKi9cbmV4cG9ydCBjbGFzcyBNaW5pTG9nZ2VyIHtcbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhIG5ldyBNaW5pTG9nZ2VyIGluc3RhbmNlLlxuICAgICAqIEBzdW1tYXJ5IEluaXRpYWxpemVzIGEgTWluaUxvZ2dlciB3aXRoIHRoZSBnaXZlbiBjbGFzcyBuYW1lLCBvcHRpb25hbCBjb25maWd1cmF0aW9uLCBhbmQgbWV0aG9kIG5hbWUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY29udGV4dCAtIFRoZSBuYW1lIG9mIHRoZSBjbGFzcyB1c2luZyB0aGlzIGxvZ2dlci5cbiAgICAgKiBAcGFyYW0gW2NvbmZdIC0gT3B0aW9uYWwgbG9nZ2luZyBjb25maWd1cmF0aW9uLiBEZWZhdWx0cyB0byBJbmZvIGxldmVsIGFuZCB2ZXJib3NpdHkgMC5cbiAgICAgKiBAcGFyYW0gW2lkXSAtIE9wdGlvbmFsIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgbG9nZ2VyIGluc3RhbmNlLlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKGNvbnRleHQsIGNvbmYpIHtcbiAgICAgICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgICAgICAgdGhpcy5jb25mID0gY29uZjtcbiAgICB9XG4gICAgY29uZmlnKGtleSkge1xuICAgICAgICBpZiAodGhpcy5jb25mICYmIGtleSBpbiB0aGlzLmNvbmYpXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb25mW2tleV07XG4gICAgICAgIHJldHVybiBMb2dnaW5nLmdldENvbmZpZygpW2tleV07XG4gICAgfVxuICAgIGZvcihtZXRob2QsIGNvbmZpZywgLi4uYXJncykge1xuICAgICAgICBtZXRob2QgPSBtZXRob2RcbiAgICAgICAgICAgID8gdHlwZW9mIG1ldGhvZCA9PT0gXCJzdHJpbmdcIlxuICAgICAgICAgICAgICAgID8gbWV0aG9kXG4gICAgICAgICAgICAgICAgOiBtZXRob2QubmFtZVxuICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiBMb2dnaW5nLmZvcihbdGhpcy5jb250ZXh0LCBtZXRob2RdLmpvaW4oXCIuXCIpLCBjb25maWcsIC4uLmFyZ3MpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhIGZvcm1hdHRlZCBsb2cgc3RyaW5nLlxuICAgICAqIEBzdW1tYXJ5IEdlbmVyYXRlcyBhIGxvZyBzdHJpbmcgd2l0aCB0aW1lc3RhbXAsIGNvbG9yZWQgbG9nIGxldmVsLCBhbmQgbWVzc2FnZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBsZXZlbCAtIFRoZSBsb2cgbGV2ZWwgYXMgYSBzdHJpbmcuXG4gICAgICogQHBhcmFtIG1lc3NhZ2VcbiAgICAgKiBAcGFyYW0gc3RhY2tcbiAgICAgKiBAcmV0dXJuIEEgZm9ybWF0dGVkIGxvZyBzdHJpbmcuXG4gICAgICovXG4gICAgY3JlYXRlTG9nKGxldmVsLCBtZXNzYWdlLCBzdGFjaykge1xuICAgICAgICBjb25zdCBsb2cgPSBbXTtcbiAgICAgICAgY29uc3Qgc3R5bGUgPSB0aGlzLmNvbmZpZyhcInN0eWxlXCIpO1xuICAgICAgICBpZiAodGhpcy5jb25maWcoXCJ0aW1lc3RhbXBcIikpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk7XG4gICAgICAgICAgICBjb25zdCB0aW1lc3RhbXAgPSBzdHlsZSA/IExvZ2dpbmcudGhlbWUoZGF0ZSwgXCJ0aW1lc3RhbXBcIiwgbGV2ZWwpIDogZGF0ZTtcbiAgICAgICAgICAgIGxvZy5wdXNoKHRpbWVzdGFtcCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY29uZmlnKFwibG9nTGV2ZWxcIikpIHtcbiAgICAgICAgICAgIGNvbnN0IGx2bCA9IHN0eWxlXG4gICAgICAgICAgICAgICAgPyBMb2dnaW5nLnRoZW1lKGxldmVsLCBcImxvZ0xldmVsXCIsIGxldmVsKVxuICAgICAgICAgICAgICAgIDogbGV2ZWw7XG4gICAgICAgICAgICBsb2cucHVzaChsdmwpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmNvbmZpZyhcImNvbnRleHRcIikpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSBzdHlsZVxuICAgICAgICAgICAgICAgID8gTG9nZ2luZy50aGVtZSh0aGlzLmNvbnRleHQsIFwiY2xhc3NcIiwgbGV2ZWwpXG4gICAgICAgICAgICAgICAgOiB0aGlzLmNvbnRleHQ7XG4gICAgICAgICAgICBsb2cucHVzaChjb250ZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5jb25maWcoXCJjb3JyZWxhdGlvbklkXCIpKSB7XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29uc3QgaWQgPSBzdHlsZVxuICAgICAgICAgICAgICAgICAgICA/IExvZ2dpbmcudGhlbWUodGhpcy5jb25maWcoXCJjb3JyZWxhdGlvbklkXCIpLnRvU3RyaW5nKCksIFwiaWRcIiwgbGV2ZWwpXG4gICAgICAgICAgICAgICAgICAgIDogdGhpcy5jb25maWcoXCJjb3JyZWxhdGlvbklkXCIpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgbG9nLnB1c2goaWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1zZyA9IHN0eWxlXG4gICAgICAgICAgICA/IExvZ2dpbmcudGhlbWUodHlwZW9mIG1lc3NhZ2UgPT09IFwic3RyaW5nXCIgPyBtZXNzYWdlIDogbWVzc2FnZS5tZXNzYWdlLCBcIm1lc3NhZ2VcIiwgbGV2ZWwpXG4gICAgICAgICAgICA6IHR5cGVvZiBtZXNzYWdlID09PSBcInN0cmluZ1wiXG4gICAgICAgICAgICAgICAgPyBtZXNzYWdlXG4gICAgICAgICAgICAgICAgOiBtZXNzYWdlLm1lc3NhZ2U7XG4gICAgICAgIGxvZy5wdXNoKG1zZyk7XG4gICAgICAgIGlmIChzdGFjayB8fCBtZXNzYWdlIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgIHN0YWNrID0gc3R5bGVcbiAgICAgICAgICAgICAgICA/IExvZ2dpbmcudGhlbWUoKHN0YWNrIHx8IG1lc3NhZ2Uuc3RhY2spLCBcInN0YWNrXCIsIGxldmVsKVxuICAgICAgICAgICAgICAgIDogc3RhY2s7XG4gICAgICAgICAgICBsb2cucHVzaChgXFxuU3RhY2sgdHJhY2U6XFxuJHtzdGFja31gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbG9nLmpvaW4odGhpcy5jb25maWcoXCJzZXBhcmF0b3JcIikpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gTG9ncyBhIG1lc3NhZ2Ugd2l0aCB0aGUgc3BlY2lmaWVkIGxvZyBsZXZlbC5cbiAgICAgKiBAc3VtbWFyeSBDaGVja3MgaWYgdGhlIG1lc3NhZ2Ugc2hvdWxkIGJlIGxvZ2dlZCBiYXNlZCBvbiB0aGUgY3VycmVudCBsb2cgbGV2ZWwsXG4gICAgICogdGhlbiB1c2VzIHRoZSBhcHByb3ByaWF0ZSBjb25zb2xlIG1ldGhvZCB0byBvdXRwdXQgdGhlIGxvZy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBsZXZlbCAtIFRoZSBsb2cgbGV2ZWwgb2YgdGhlIG1lc3NhZ2UuXG4gICAgICogQHBhcmFtIG1zZyAtIFRoZSBtZXNzYWdlIHRvIGJlIGxvZ2dlZC5cbiAgICAgKiBAcGFyYW0gc3RhY2tcbiAgICAgKi9cbiAgICBsb2cobGV2ZWwsIG1zZywgc3RhY2spIHtcbiAgICAgICAgaWYgKE51bWVyaWNMb2dMZXZlbHNbdGhpcy5jb25maWcoXCJsZXZlbFwiKV0gPFxuICAgICAgICAgICAgTnVtZXJpY0xvZ0xldmVsc1tsZXZlbF0pXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGxldCBtZXRob2Q7XG4gICAgICAgIHN3aXRjaCAobGV2ZWwpIHtcbiAgICAgICAgICAgIGNhc2UgTG9nTGV2ZWwuaW5mbzpcbiAgICAgICAgICAgICAgICBtZXRob2QgPSBjb25zb2xlLmxvZztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgTG9nTGV2ZWwudmVyYm9zZTpcbiAgICAgICAgICAgIGNhc2UgTG9nTGV2ZWwuZGVidWc6XG4gICAgICAgICAgICAgICAgbWV0aG9kID0gY29uc29sZS5kZWJ1ZztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgTG9nTGV2ZWwuZXJyb3I6XG4gICAgICAgICAgICAgICAgbWV0aG9kID0gY29uc29sZS5lcnJvcjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBsb2cgbGV2ZWxcIik7XG4gICAgICAgIH1cbiAgICAgICAgbWV0aG9kKHRoaXMuY3JlYXRlTG9nKGxldmVsLCBtc2csIHN0YWNrKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBMTG9ncyBhIGB3YXkgdG9vIHZlcmJvc2VgIG9yIGEgc2lsbHkgbWVzc2FnZS5cbiAgICAgKiBAc3VtbWFyeSBMb2dzIGEgbWVzc2FnZSBhdCB0aGUgU2lsbHkgbGV2ZWwgaWYgdGhlIGN1cnJlbnQgdmVyYm9zaXR5IGFsbG93cyBpdC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBtc2cgLSBUaGUgbWVzc2FnZSB0byBiZSBsb2dnZWQuXG4gICAgICogQHBhcmFtIHZlcmJvc2l0eSAtIFRoZSB2ZXJib3NpdHkgbGV2ZWwgb2YgdGhlIG1lc3NhZ2UgKGRlZmF1bHQ6IDApLlxuICAgICAqL1xuICAgIHNpbGx5KG1zZywgdmVyYm9zaXR5ID0gMCkge1xuICAgICAgICBpZiAodGhpcy5jb25maWcoXCJ2ZXJib3NlXCIpID49IHZlcmJvc2l0eSlcbiAgICAgICAgICAgIHRoaXMubG9nKExvZ0xldmVsLnZlcmJvc2UsIG1zZyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBMb2dzIGEgdmVyYm9zZSBtZXNzYWdlLlxuICAgICAqIEBzdW1tYXJ5IExvZ3MgYSBtZXNzYWdlIGF0IHRoZSBWZXJib3NlIGxldmVsIGlmIHRoZSBjdXJyZW50IHZlcmJvc2l0eSBhbGxvd3MgaXQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbXNnIC0gVGhlIG1lc3NhZ2UgdG8gYmUgbG9nZ2VkLlxuICAgICAqIEBwYXJhbSB2ZXJib3NpdHkgLSBUaGUgdmVyYm9zaXR5IGxldmVsIG9mIHRoZSBtZXNzYWdlIChkZWZhdWx0OiAwKS5cbiAgICAgKi9cbiAgICB2ZXJib3NlKG1zZywgdmVyYm9zaXR5ID0gMCkge1xuICAgICAgICBpZiAodGhpcy5jb25maWcoXCJ2ZXJib3NlXCIpID49IHZlcmJvc2l0eSlcbiAgICAgICAgICAgIHRoaXMubG9nKExvZ0xldmVsLnZlcmJvc2UsIG1zZyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBMb2dzIGFuIGluZm8gbWVzc2FnZS5cbiAgICAgKiBAc3VtbWFyeSBMb2dzIGEgbWVzc2FnZSBhdCB0aGUgSW5mbyBsZXZlbC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBtc2cgLSBUaGUgbWVzc2FnZSB0byBiZSBsb2dnZWQuXG4gICAgICovXG4gICAgaW5mbyhtc2cpIHtcbiAgICAgICAgdGhpcy5sb2coTG9nTGV2ZWwuaW5mbywgbXNnKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIExvZ3MgYSBkZWJ1ZyBtZXNzYWdlLlxuICAgICAqIEBzdW1tYXJ5IExvZ3MgYSBtZXNzYWdlIGF0IHRoZSBEZWJ1ZyBsZXZlbC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBtc2cgLSBUaGUgbWVzc2FnZSB0byBiZSBsb2dnZWQuXG4gICAgICovXG4gICAgZGVidWcobXNnKSB7XG4gICAgICAgIHRoaXMubG9nKExvZ0xldmVsLmRlYnVnLCBtc2cpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gTG9ncyBhbiBlcnJvciBtZXNzYWdlLlxuICAgICAqIEBzdW1tYXJ5IExvZ3MgYSBtZXNzYWdlIGF0IHRoZSBFcnJvciBsZXZlbC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBtc2cgLSBUaGUgbWVzc2FnZSB0byBiZSBsb2dnZWQuXG4gICAgICovXG4gICAgZXJyb3IobXNnKSB7XG4gICAgICAgIHRoaXMubG9nKExvZ0xldmVsLmVycm9yLCBtc2cpO1xuICAgIH1cbiAgICBzZXRDb25maWcoY29uZmlnKSB7XG4gICAgICAgIHRoaXMuY29uZiA9IHsgLi4uKHRoaXMuY29uZiB8fCB7fSksIC4uLmNvbmZpZyB9O1xuICAgIH1cbn1cbi8qKlxuICogQGRlc2NyaXB0aW9uIEEgc3RhdGljIGNsYXNzIGZvciBtYW5hZ2luZyBsb2dnaW5nIG9wZXJhdGlvbnMuXG4gKiBAc3VtbWFyeSBUaGUgTG9nZ2luZyBjbGFzcyBwcm92aWRlcyBhIGNlbnRyYWxpemVkIGxvZ2dpbmcgbWVjaGFuaXNtIHdpdGggc3VwcG9ydCBmb3JcbiAqIGRpZmZlcmVudCBsb2cgbGV2ZWxzIGFuZCB2ZXJib3NpdHkuIEl0IHVzZXMgYSBzaW5nbGV0b24gcGF0dGVybiB0byBtYWludGFpbiBhIGdsb2JhbFxuICogbG9nZ2VyIGluc3RhbmNlIGFuZCBhbGxvd3MgY3JlYXRpbmcgc3BlY2lmaWMgbG9nZ2VycyBmb3IgZGlmZmVyZW50IGNsYXNzZXMgYW5kIG1ldGhvZHMuXG4gKlxuICogQGNsYXNzXG4gKi9cbmV4cG9ydCBjbGFzcyBMb2dnaW5nIHtcbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gRmFjdG9yeSBmdW5jdGlvbiBmb3IgY3JlYXRpbmcgbG9nZ2VyIGluc3RhbmNlcy5cbiAgICAgKiBAc3VtbWFyeSBBIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBuZXcgVmVyYm9zaXR5TG9nZ2VyIGluc3RhbmNlcy4gQnkgZGVmYXVsdCwgaXQgY3JlYXRlcyBhIE1pbmlMb2dnZXIuXG4gICAgICovXG4gICAgc3RhdGljIHsgdGhpcy5fZmFjdG9yeSA9IChvYmplY3QsIGNvbmZpZykgPT4ge1xuICAgICAgICByZXR1cm4gbmV3IE1pbmlMb2dnZXIob2JqZWN0LCBjb25maWcpO1xuICAgIH07IH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29uZmlndXJhdGlvbiBmb3IgdGhlIGxvZ2dpbmcgc3lzdGVtLlxuICAgICAqIEBzdW1tYXJ5IFN0b3JlcyB0aGUgZ2xvYmFsIHZlcmJvc2l0eSBsZXZlbCBhbmQgbG9nIGxldmVsIHNldHRpbmdzLlxuICAgICAqL1xuICAgIHN0YXRpYyB7IHRoaXMuX2NvbmZpZyA9IERlZmF1bHRMb2dnaW5nQ29uZmlnOyB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFByaXZhdGUgY29uc3RydWN0b3IgdG8gcHJldmVudCBpbnN0YW50aWF0aW9uLlxuICAgICAqIEBzdW1tYXJ5IEVuc3VyZXMgdGhhdCB0aGUgTG9nZ2luZyBjbGFzcyBjYW5ub3QgYmUgaW5zdGFudGlhdGVkIGFzIGl0J3MgZGVzaWduZWQgdG8gYmUgdXNlZCBzdGF0aWNhbGx5LlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKCkgeyB9XG4gICAgc3RhdGljIHNldEZhY3RvcnkoZmFjdG9yeSkge1xuICAgICAgICBMb2dnaW5nLl9mYWN0b3J5ID0gZmFjdG9yeTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFNldHRlciBmb3IgdGhlIGxvZ2dpbmcgY29uZmlndXJhdGlvbi5cbiAgICAgKiBAc3VtbWFyeSBBbGxvd3MgdXBkYXRpbmcgdGhlIGdsb2JhbCBsb2dnaW5nIGNvbmZpZ3VyYXRpb24uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY29uZmlnIC0gQW4gb2JqZWN0IGNvbnRhaW5pbmcgdmVyYm9zaXR5IGFuZCBsb2cgbGV2ZWwgc2V0dGluZ3MuXG4gICAgICovXG4gICAgc3RhdGljIHNldENvbmZpZyhjb25maWcpIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLl9jb25maWcsIGNvbmZpZyk7XG4gICAgfVxuICAgIHN0YXRpYyBnZXRDb25maWcoKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCB0aGlzLl9jb25maWcpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0cmlldmVzIG9yIGNyZWF0ZXMgdGhlIGdsb2JhbCBsb2dnZXIgaW5zdGFuY2UuXG4gICAgICogQHN1bW1hcnkgUmV0dXJucyB0aGUgZXhpc3RpbmcgZ2xvYmFsIGxvZ2dlciBvciBjcmVhdGVzIGEgbmV3IG9uZSBpZiBpdCBkb2Vzbid0IGV4aXN0LlxuICAgICAqXG4gICAgICogQHJldHVybiBUaGUgZ2xvYmFsIFZlcmJvc2l0eUxvZ2dlciBpbnN0YW5jZS5cbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0KCkge1xuICAgICAgICB0aGlzLmdsb2JhbCA9IHRoaXMuZ2xvYmFsID8gdGhpcy5nbG9iYWwgOiB0aGlzLl9mYWN0b3J5KFwiTG9nZ2luZ1wiKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2xvYmFsO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gTG9ncyBhIHZlcmJvc2UgbWVzc2FnZS5cbiAgICAgKiBAc3VtbWFyeSBEZWxlZ2F0ZXMgdGhlIHZlcmJvc2UgbG9nZ2luZyB0byB0aGUgZ2xvYmFsIGxvZ2dlciBpbnN0YW5jZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBtc2cgLSBUaGUgbWVzc2FnZSB0byBiZSBsb2dnZWQuXG4gICAgICogQHBhcmFtIHZlcmJvc2l0eSAtIFRoZSB2ZXJib3NpdHkgbGV2ZWwgb2YgdGhlIG1lc3NhZ2UgKGRlZmF1bHQ6IDApLlxuICAgICAqL1xuICAgIHN0YXRpYyB2ZXJib3NlKG1zZywgdmVyYm9zaXR5ID0gMCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXQoKS52ZXJib3NlKG1zZywgdmVyYm9zaXR5KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIExvZ3MgYW4gaW5mbyBtZXNzYWdlLlxuICAgICAqIEBzdW1tYXJ5IERlbGVnYXRlcyB0aGUgaW5mbyBsb2dnaW5nIHRvIHRoZSBnbG9iYWwgbG9nZ2VyIGluc3RhbmNlLlxuICAgICAqXG4gICAgICogQHBhcmFtIG1zZyAtIFRoZSBtZXNzYWdlIHRvIGJlIGxvZ2dlZC5cbiAgICAgKi9cbiAgICBzdGF0aWMgaW5mbyhtc2cpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KCkuaW5mbyhtc2cpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gTG9ncyBhIGRlYnVnIG1lc3NhZ2UuXG4gICAgICogQHN1bW1hcnkgRGVsZWdhdGVzIHRoZSBkZWJ1ZyBsb2dnaW5nIHRvIHRoZSBnbG9iYWwgbG9nZ2VyIGluc3RhbmNlLlxuICAgICAqXG4gICAgICogQHBhcmFtIG1zZyAtIFRoZSBtZXNzYWdlIHRvIGJlIGxvZ2dlZC5cbiAgICAgKi9cbiAgICBzdGF0aWMgZGVidWcobXNnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldCgpLmRlYnVnKG1zZyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBMb2dzIGEgc2lsbHkgbWVzc2FnZS5cbiAgICAgKiBAc3VtbWFyeSBEZWxlZ2F0ZXMgdGhlIGRlYnVnIGxvZ2dpbmcgdG8gdGhlIGdsb2JhbCBsb2dnZXIgaW5zdGFuY2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbXNnIC0gVGhlIG1lc3NhZ2UgdG8gYmUgbG9nZ2VkLlxuICAgICAqL1xuICAgIHN0YXRpYyBzaWxseShtc2cpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KCkuc2lsbHkobXNnKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIExvZ3MgYW4gZXJyb3IgbWVzc2FnZS5cbiAgICAgKiBAc3VtbWFyeSBEZWxlZ2F0ZXMgdGhlIGVycm9yIGxvZ2dpbmcgdG8gdGhlIGdsb2JhbCBsb2dnZXIgaW5zdGFuY2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbXNnIC0gVGhlIG1lc3NhZ2UgdG8gYmUgbG9nZ2VkLlxuICAgICAqL1xuICAgIHN0YXRpYyBlcnJvcihtc2cpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KCkuZXJyb3IobXNnKTtcbiAgICB9XG4gICAgc3RhdGljIGZvcihvYmplY3QsIGNvbmZpZywgLi4uYXJncykge1xuICAgICAgICBvYmplY3QgPVxuICAgICAgICAgICAgdHlwZW9mIG9iamVjdCA9PT0gXCJzdHJpbmdcIlxuICAgICAgICAgICAgICAgID8gb2JqZWN0XG4gICAgICAgICAgICAgICAgOiBvYmplY3QuY29uc3RydWN0b3JcbiAgICAgICAgICAgICAgICAgICAgPyBvYmplY3QuY29uc3RydWN0b3IubmFtZVxuICAgICAgICAgICAgICAgICAgICA6IG9iamVjdC5uYW1lO1xuICAgICAgICByZXR1cm4gdGhpcy5fZmFjdG9yeShvYmplY3QsIGNvbmZpZywgLi4uYXJncyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDcmVhdGVzIGEgbG9nZ2VyIGZvciBhIHNwZWNpZmljIHJlYXNvbiBvciBjb250ZXh0LlxuICAgICAqXG4gICAgICogQHN1bW1hcnkgVGhpcyBzdGF0aWMgbWV0aG9kIGNyZWF0ZXMgYSBuZXcgbG9nZ2VyIGluc3RhbmNlIHVzaW5nIHRoZSBmYWN0b3J5IGZ1bmN0aW9uLFxuICAgICAqIGJhc2VkIG9uIGEgZ2l2ZW4gcmVhc29uIG9yIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmVhc29uIC0gQSBzdHJpbmcgZGVzY3JpYmluZyB0aGUgcmVhc29uIG9yIGNvbnRleHQgZm9yIGNyZWF0aW5nIHRoaXMgbG9nZ2VyLlxuICAgICAqIEBwYXJhbSBpZFxuICAgICAqIEByZXR1cm5zIEEgbmV3IFZlcmJvc2l0eUxvZ2dlciBvciBDbGFzc0xvZ2dlciBpbnN0YW5jZS5cbiAgICAgKi9cbiAgICBzdGF0aWMgYmVjYXVzZShyZWFzb24sIGlkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9mYWN0b3J5KHJlYXNvbiwgdGhpcy5fY29uZmlnLCBpZCk7XG4gICAgfVxuICAgIHN0YXRpYyB0aGVtZSh0ZXh0LCB0eXBlLCBsb2dnZXJMZXZlbCwgdGVtcGxhdGUgPSBEZWZhdWx0VGhlbWUpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9jb25maWcuc3R5bGUpXG4gICAgICAgICAgICByZXR1cm4gdGV4dDtcbiAgICAgICAgY29uc3QgbG9nZ2VyID0gTG9nZ2luZy5nZXQoKS5mb3IodGhpcy50aGVtZSk7XG4gICAgICAgIGZ1bmN0aW9uIGFwcGx5KHR4dCwgb3B0aW9uLCB2YWx1ZSkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCB0ID0gdHh0O1xuICAgICAgICAgICAgICAgIGxldCBjID0gc3R5bGUodCk7XG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gYXBwbHlDb2xvcih2YWwsIGlzQmcgPSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZiA9IGlzQmcgPyBjLmJhY2tncm91bmQgOiBjLmZvcmVncm91bmQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWwpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZi5jYWxsKGMsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHZhbC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmID0gaXNCZyA/IGMuYmdDb2xvcjI1NiA6IGMuY29sb3IyNTY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGYodmFsWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmID0gaXNCZyA/IGMuYmdSZ2IgOiBjLnJnYjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYy5yZ2IodmFsWzBdLCB2YWxbMV0sIHZhbFsyXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcihgTm90IGEgdmFsaWQgY29sb3Igb3B0aW9uOiAke29wdGlvbn1gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3R5bGUodCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gYXBwbHlTdHlsZSh2KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdiA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgYyA9IGMuc3R5bGUodik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjID0gY1t2XTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzd2l0Y2ggKG9wdGlvbikge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiYmdcIjpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcImZnXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXBwbHlDb2xvcih2YWx1ZSkudGV4dDtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcInN0eWxlXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS5mb3JFYWNoKGFwcGx5U3R5bGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwbHlTdHlsZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYy50ZXh0O1xuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKGBOb3QgYSB2YWxpZCB0aGVtZSBvcHRpb246ICR7b3B0aW9ufWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKGBFcnJvciBhcHBseWluZyBzdHlsZTogJHtvcHRpb259IHdpdGggdmFsdWUgJHt2YWx1ZX1gKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHh0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGluZGl2aWR1YWxUaGVtZSA9IHRlbXBsYXRlW3R5cGVdO1xuICAgICAgICBpZiAoIWluZGl2aWR1YWxUaGVtZSB8fCAhT2JqZWN0LmtleXMoaW5kaXZpZHVhbFRoZW1lKS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiB0ZXh0O1xuICAgICAgICB9XG4gICAgICAgIGxldCBhY3R1YWxUaGVtZSA9IGluZGl2aWR1YWxUaGVtZTtcbiAgICAgICAgY29uc3QgbG9nTGV2ZWxzID0gT2JqZWN0LmFzc2lnbih7fSwgTG9nTGV2ZWwpO1xuICAgICAgICBpZiAoT2JqZWN0LmtleXMoaW5kaXZpZHVhbFRoZW1lKVswXSBpbiBsb2dMZXZlbHMpXG4gICAgICAgICAgICBhY3R1YWxUaGVtZSA9XG4gICAgICAgICAgICAgICAgaW5kaXZpZHVhbFRoZW1lW2xvZ2dlckxldmVsXSB8fCB7fTtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKGFjdHVhbFRoZW1lKS5yZWR1Y2UoKGFjYywga2V5KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2YWwgPSBhY3R1YWxUaGVtZVtrZXldO1xuICAgICAgICAgICAgaWYgKHZhbClcbiAgICAgICAgICAgICAgICByZXR1cm4gYXBwbHkoYWNjLCBrZXksIHZhbCk7XG4gICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICB9LCB0ZXh0KTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2liRzluWjJsdVp5NXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMM055WXk5c2IyZG5hVzVuTG5SeklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lKQlFWVkJMRTlCUVU4c1JVRkJiVUlzUzBGQlN5eEZRVUZuUWl4TlFVRk5MSFZDUVVGMVFpeERRVUZETzBGQlF6ZEZMRTlCUVU4c1JVRkRUQ3h2UWtGQmIwSXNSVUZEY0VJc1dVRkJXU3hGUVVOYUxGRkJRVkVzUlVGRFVpeG5Ra0ZCWjBJc1IwRkRha0lzVFVGQlRTeGhRVUZoTEVOQlFVTTdRVUZGY2tJN096czdPenRIUVUxSE8wRkJRMGdzVFVGQlRTeFBRVUZQTEZWQlFWVTdTVUZEY2tJN096czdPenM3VDBGUFJ6dEpRVU5JTEZsQlExa3NUMEZCWlN4RlFVTm1MRWxCUVRaQ08xRkJSRGRDTEZsQlFVOHNSMEZCVUN4UFFVRlBMRU5CUVZFN1VVRkRaaXhUUVVGSkxFZEJRVW9zU1VGQlNTeERRVUY1UWp0SlFVTjBReXhEUVVGRE8wbEJSVTBzVFVGQlRTeERRVU5rTEVkQlFYZENPMUZCUlhoQ0xFbEJRVWtzU1VGQlNTeERRVUZETEVsQlFVa3NTVUZCU1N4SFFVRkhMRWxCUVVrc1NVRkJTU3hEUVVGRExFbEJRVWs3V1VGQlJTeFBRVUZQTEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03VVVGRGVrUXNUMEZCVHl4UFFVRlBMRU5CUVVNc1UwRkJVeXhGUVVGRkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdTVUZEYkVNc1EwRkJRenRKUVVWRUxFZEJRVWNzUTBGRFJDeE5RVUV5UXl4RlFVTXpReXhOUVVFclFpeEZRVU12UWl4SFFVRkhMRWxCUVZjN1VVRkZaQ3hOUVVGTkxFZEJRVWNzVFVGQlRUdFpRVU5pTEVOQlFVTXNRMEZCUXl4UFFVRlBMRTFCUVUwc1MwRkJTeXhSUVVGUk8yZENRVU14UWl4RFFVRkRMRU5CUVVNc1RVRkJUVHRuUWtGRFVpeERRVUZETEVOQlFVTXNUVUZCVFN4RFFVRkRMRWxCUVVrN1dVRkRaaXhEUVVGRExFTkJRVU1zVTBGQlV5eERRVUZETzFGQlJXUXNUMEZCVHl4UFFVRlBMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEU5QlFVOHNSVUZCUlN4TlFVRk5MRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNUVUZCVFN4RlFVRkZMRWRCUVVjc1NVRkJTU3hEUVVGRExFTkJRVU03U1VGRGVFVXNRMEZCUXp0SlFVVkVPenM3T3pzN096dFBRVkZITzBsQlEwOHNVMEZCVXl4RFFVTnFRaXhMUVVGbExFVkJRMllzVDBGQk1rSXNSVUZETTBJc1MwRkJZenRSUVVWa0xFMUJRVTBzUjBGQlJ5eEhRVUZoTEVWQlFVVXNRMEZCUXp0UlFVTjZRaXhOUVVGTkxFdEJRVXNzUjBGQlJ5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRE8xRkJRMjVETEVsQlFVa3NTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhYUVVGWExFTkJRVU1zUlVGQlJTeERRVUZETzFsQlF6ZENMRTFCUVUwc1NVRkJTU3hIUVVGSExFbEJRVWtzU1VGQlNTeEZRVUZGTEVOQlFVTXNWMEZCVnl4RlFVRkZMRU5CUVVNN1dVRkRkRU1zVFVGQlRTeFRRVUZUTEVkQlFVY3NTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhQUVVGUExFTkJRVU1zUzBGQlN5eERRVUZETEVsQlFVa3NSVUZCUlN4WFFVRlhMRVZCUVVVc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXp0WlFVTjZSU3hIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEZOQlFWTXNRMEZCUXl4RFFVRkRPMUZCUTNSQ0xFTkJRVU03VVVGRlJDeEpRVUZKTEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1ZVRkJWU3hEUVVGRExFVkJRVVVzUTBGQlF6dFpRVU0xUWl4TlFVRk5MRWRCUVVjc1IwRkJWeXhMUVVGTE8yZENRVU4yUWl4RFFVRkRMRU5CUVVNc1QwRkJUeXhEUVVGRExFdEJRVXNzUTBGQlF5eExRVUZMTEVWQlFVVXNWVUZCVlN4RlFVRkZMRXRCUVVzc1EwRkJRenRuUWtGRGVrTXNRMEZCUXl4RFFVRkRMRXRCUVVzc1EwRkJRenRaUVVOV0xFZEJRVWNzUTBGQlF5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1VVRkRhRUlzUTBGQlF6dFJRVVZFTEVsQlFVa3NTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhUUVVGVExFTkJRVU1zUlVGQlJTeERRVUZETzFsQlF6TkNMRTFCUVUwc1QwRkJUeXhIUVVGWExFdEJRVXM3WjBKQlF6TkNMRU5CUVVNc1EwRkJReXhQUVVGUExFTkJRVU1zUzBGQlN5eERRVUZETEVsQlFVa3NRMEZCUXl4UFFVRlBMRVZCUVVVc1QwRkJUeXhGUVVGRkxFdEJRVXNzUTBGQlF6dG5Ra0ZETjBNc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTTdXVUZEYWtJc1IwRkJSeXhEUVVGRExFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXp0UlFVTndRaXhEUVVGRE8xRkJSVVFzU1VGQlNTeEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMR1ZCUVdVc1EwRkJReXhGUVVGRkxFTkJRVU03V1VGRGFrTXNRMEZCUXp0blFrRkRReXhOUVVGTkxFVkJRVVVzUjBGQlZ5eExRVUZMTzI5Q1FVTjBRaXhEUVVGRExFTkJRVU1zVDBGQlR5eERRVUZETEV0QlFVc3NRMEZCUXl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExHVkJRV1VzUTBGQlJTeERRVUZETEZGQlFWRXNSVUZCUlN4RlFVRkZMRWxCUVVrc1JVRkJSU3hMUVVGTExFTkJRVU03YjBKQlEzUkZMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEdWQlFXVXNRMEZCUlN4RFFVRkRMRkZCUVZFc1JVRkJSU3hEUVVGRE8yZENRVU0zUXl4SFFVRkhMRU5CUVVNc1NVRkJTU3hEUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETzFsQlEyWXNRMEZCUXp0UlFVTklMRU5CUVVNN1VVRkZSQ3hOUVVGTkxFZEJRVWNzUjBGQlZ5eExRVUZMTzFsQlEzWkNMRU5CUVVNc1EwRkJReXhQUVVGUExFTkJRVU1zUzBGQlN5eERRVU5ZTEU5QlFVOHNUMEZCVHl4TFFVRkxMRkZCUVZFc1EwRkJReXhEUVVGRExFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTXNRMEZCUlN4UFFVRnBRaXhEUVVGRExFOUJRVThzUlVGRGJFVXNVMEZCVXl4RlFVTlVMRXRCUVVzc1EwRkRUanRaUVVOSUxFTkJRVU1zUTBGQlF5eFBRVUZQTEU5QlFVOHNTMEZCU3l4UlFVRlJPMmRDUVVNelFpeERRVUZETEVOQlFVTXNUMEZCVHp0blFrRkRWQ3hEUVVGRExFTkJRVVVzVDBGQmFVSXNRMEZCUXl4UFFVRlBMRU5CUVVNN1VVRkRha01zUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRSUVVOa0xFbEJRVWtzUzBGQlN5eEpRVUZKTEU5QlFVOHNXVUZCV1N4TFFVRkxMRVZCUVVVc1EwRkJRenRaUVVOMFF5eExRVUZMTEVkQlFVY3NTMEZCU3p0blFrRkRXQ3hEUVVGRExFTkJRVU1zVDBGQlR5eERRVUZETEV0QlFVc3NRMEZEV0N4RFFVRkRMRXRCUVVzc1NVRkJTeXhQUVVGcFFpeERRVUZETEV0QlFVc3NRMEZCVnl4RlFVTTNReXhQUVVGUExFVkJRMUFzUzBGQlN5eERRVU5PTzJkQ1FVTklMRU5CUVVNc1EwRkJReXhMUVVGTExFTkJRVU03V1VGRFZpeEhRVUZITEVOQlFVTXNTVUZCU1N4RFFVRkRMRzFDUVVGdFFpeExRVUZMTEVWQlFVVXNRMEZCUXl4RFFVRkRPMUZCUTNaRExFTkJRVU03VVVGRlJDeFBRVUZQTEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eFhRVUZYTEVOQlFWY3NRMEZCUXl4RFFVRkRPMGxCUTNSRUxFTkJRVU03U1VGRlJEczdPenM3T3pzN1QwRlJSenRKUVVOUExFZEJRVWNzUTBGRFdDeExRVUZsTEVWQlEyWXNSMEZCZFVJc1JVRkRka0lzUzBGQll6dFJRVVZrTEVsQlEwVXNaMEpCUVdkQ0xFTkJRVU1zU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4UFFVRlBMRU5CUVdFc1EwRkJRenRaUVVOc1JDeG5Ra0ZCWjBJc1EwRkJReXhMUVVGTExFTkJRVU03V1VGRmRrSXNUMEZCVHp0UlFVTlVMRWxCUVVrc1RVRkJUU3hEUVVGRE8xRkJRMWdzVVVGQlVTeExRVUZMTEVWQlFVVXNRMEZCUXp0WlFVTmtMRXRCUVVzc1VVRkJVU3hEUVVGRExFbEJRVWs3WjBKQlEyaENMRTFCUVUwc1IwRkJSeXhQUVVGUExFTkJRVU1zUjBGQlJ5eERRVUZETzJkQ1FVTnlRaXhOUVVGTk8xbEJRMUlzUzBGQlN5eFJRVUZSTEVOQlFVTXNUMEZCVHl4RFFVRkRPMWxCUTNSQ0xFdEJRVXNzVVVGQlVTeERRVUZETEV0QlFVczdaMEpCUTJwQ0xFMUJRVTBzUjBGQlJ5eFBRVUZQTEVOQlFVTXNTMEZCU3l4RFFVRkRPMmRDUVVOMlFpeE5RVUZOTzFsQlExSXNTMEZCU3l4UlFVRlJMRU5CUVVNc1MwRkJTenRuUWtGRGFrSXNUVUZCVFN4SFFVRkhMRTlCUVU4c1EwRkJReXhMUVVGTExFTkJRVU03WjBKQlEzWkNMRTFCUVUwN1dVRkRVanRuUWtGRFJTeE5RVUZOTEVsQlFVa3NTMEZCU3l4RFFVRkRMRzFDUVVGdFFpeERRVUZETEVOQlFVTTdVVUZEZWtNc1EwRkJRenRSUVVORUxFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTXNVMEZCVXl4RFFVRkRMRXRCUVVzc1JVRkJSU3hIUVVGSExFVkJRVVVzUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXp0SlFVTTFReXhEUVVGRE8wbEJSVVE3T3pzN096dFBRVTFITzBsQlEwZ3NTMEZCU3l4RFFVRkRMRWRCUVdVc1JVRkJSU3haUVVGdlFpeERRVUZETzFGQlF6RkRMRWxCUVVzc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eFRRVUZUTEVOQlFWa3NTVUZCU1N4VFFVRlRPMWxCUTJwRUxFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNVVUZCVVN4RFFVRkRMRTlCUVU4c1JVRkJSU3hIUVVGSExFTkJRVU1zUTBGQlF6dEpRVU53UXl4RFFVRkRPMGxCUlVRN096czdPenRQUVUxSE8wbEJRMGdzVDBGQlR5eERRVUZETEVkQlFXVXNSVUZCUlN4WlFVRnZRaXhEUVVGRE8xRkJRelZETEVsQlFVc3NTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhUUVVGVExFTkJRVmtzU1VGQlNTeFRRVUZUTzFsQlEycEVMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zVVVGQlVTeERRVUZETEU5QlFVOHNSVUZCUlN4SFFVRkhMRU5CUVVNc1EwRkJRenRKUVVOd1F5eERRVUZETzBsQlJVUTdPenM3TzA5QlMwYzdTVUZEU0N4SlFVRkpMRU5CUVVNc1IwRkJaVHRSUVVOc1FpeEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRkZCUVZFc1EwRkJReXhKUVVGSkxFVkJRVVVzUjBGQlJ5eERRVUZETEVOQlFVTTdTVUZETDBJc1EwRkJRenRKUVVWRU96czdPenRQUVV0SE8wbEJRMGdzUzBGQlN5eERRVUZETEVkQlFXVTdVVUZEYmtJc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eFJRVUZSTEVOQlFVTXNTMEZCU3l4RlFVRkZMRWRCUVVjc1EwRkJReXhEUVVGRE8wbEJRMmhETEVOQlFVTTdTVUZGUkRzN096czdUMEZMUnp0SlFVTklMRXRCUVVzc1EwRkJReXhIUVVGMVFqdFJRVU16UWl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExGRkJRVkVzUTBGQlF5eExRVUZMTEVWQlFVVXNSMEZCUnl4RFFVRkRMRU5CUVVNN1NVRkRhRU1zUTBGQlF6dEpRVVZFTEZOQlFWTXNRMEZCUXl4TlFVRTRRanRSUVVOMFF5eEpRVUZKTEVOQlFVTXNTVUZCU1N4SFFVRkhMRVZCUVVVc1IwRkJSeXhEUVVGRExFbEJRVWtzUTBGQlF5eEpRVUZKTEVsQlFVa3NSVUZCUlN4RFFVRkRMRVZCUVVVc1IwRkJSeXhOUVVGTkxFVkJRVVVzUTBGQlF6dEpRVU5zUkN4RFFVRkRPME5CUTBZN1FVRkZSRHM3T3pzN096dEhRVTlITzBGQlEwZ3NUVUZCVFN4UFFVRlBMRTlCUVU4N1NVRlBiRUk3T3p0UFFVZEhPMkZCUTFrc1lVRkJVU3hIUVVGclFpeERRVU4yUXl4TlFVRmpMRVZCUTJRc1RVRkJLMElzUlVGREwwSXNSVUZCUlR0UlFVTkdMRTlCUVU4c1NVRkJTU3hWUVVGVkxFTkJRVU1zVFVGQlRTeEZRVUZGTEUxQlFVMHNRMEZCUXl4RFFVRkRPMGxCUTNoRExFTkJRVU1zUTBGQlF6dEpRVU5HT3pzN1QwRkhSenRoUVVOWkxGbEJRVThzUjBGQmEwSXNiMEpCUVc5Q0xFTkJRVU03U1VGRk4wUTdPenRQUVVkSE8wbEJRMGdzWjBKQlFYVkNMRU5CUVVNN1NVRkZlRUlzVFVGQlRTeERRVUZETEZWQlFWVXNRMEZCUXl4UFFVRnpRanRSUVVOMFF5eFBRVUZQTEVOQlFVTXNVVUZCVVN4SFFVRkhMRTlCUVU4c1EwRkJRenRKUVVNM1FpeERRVUZETzBsQlJVUTdPenM3TzA5QlMwYzdTVUZEU0N4TlFVRk5MRU5CUVVNc1UwRkJVeXhEUVVGRExFMUJRVGhDTzFGQlF6ZERMRTFCUVUwc1EwRkJReXhOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETEU5QlFVOHNSVUZCUlN4TlFVRk5MRU5CUVVNc1EwRkJRenRKUVVOMFF5eERRVUZETzBsQlJVUXNUVUZCVFN4RFFVRkRMRk5CUVZNN1VVRkRaQ3hQUVVGUExFMUJRVTBzUTBGQlF5eE5RVUZOTEVOQlFVTXNSVUZCUlN4RlFVRkZMRWxCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF6dEpRVU42UXl4RFFVRkRPMGxCUlVRN096czdPMDlCUzBjN1NVRkRTQ3hOUVVGTkxFTkJRVU1zUjBGQlJ6dFJRVU5TTEVsQlFVa3NRMEZCUXl4TlFVRk5MRWRCUVVjc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4VFFVRlRMRU5CUVVNc1EwRkJRenRSUVVOdVJTeFBRVUZQTEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNN1NVRkRja0lzUTBGQlF6dEpRVVZFT3pzN096czdUMEZOUnp0SlFVTklMRTFCUVUwc1EwRkJReXhQUVVGUExFTkJRVU1zUjBGQlpTeEZRVUZGTEZsQlFXOUNMRU5CUVVNN1VVRkRia1FzVDBGQlR5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RlFVRkZMRU5CUVVNc1QwRkJUeXhEUVVGRExFZEJRVWNzUlVGQlJTeFRRVUZUTEVOQlFVTXNRMEZCUXp0SlFVTTFReXhEUVVGRE8wbEJSVVE3T3pzN08wOUJTMGM3U1VGRFNDeE5RVUZOTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWRCUVdVN1VVRkRla0lzVDBGQlR5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RlFVRkZMRU5CUVVNc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzBsQlF6bENMRU5CUVVNN1NVRkZSRHM3T3pzN1QwRkxSenRKUVVOSUxFMUJRVTBzUTBGQlF5eExRVUZMTEVOQlFVTXNSMEZCWlR0UlFVTXhRaXhQUVVGUExFbEJRVWtzUTBGQlF5eEhRVUZITEVWQlFVVXNRMEZCUXl4TFFVRkxMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03U1VGREwwSXNRMEZCUXp0SlFVVkVPenM3T3p0UFFVdEhPMGxCUTBnc1RVRkJUU3hEUVVGRExFdEJRVXNzUTBGQlF5eEhRVUZsTzFGQlF6RkNMRTlCUVU4c1NVRkJTU3hEUVVGRExFZEJRVWNzUlVGQlJTeERRVUZETEV0QlFVc3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRKUVVNdlFpeERRVUZETzBsQlJVUTdPenM3TzA5QlMwYzdTVUZEU0N4TlFVRk5MRU5CUVVNc1MwRkJTeXhEUVVGRExFZEJRV1U3VVVGRE1VSXNUMEZCVHl4SlFVRkpMRU5CUVVNc1IwRkJSeXhGUVVGRkxFTkJRVU1zUzBGQlN5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMGxCUXk5Q0xFTkJRVU03U1VGRlJDeE5RVUZOTEVOQlFVTXNSMEZCUnl4RFFVTlNMRTFCUVhOQ0xFVkJRM1JDTEUxQlFTdENMRVZCUXk5Q0xFZEJRVWNzU1VGQlZ6dFJRVVZrTEUxQlFVMDdXVUZEU2l4UFFVRlBMRTFCUVUwc1MwRkJTeXhSUVVGUk8yZENRVU40UWl4RFFVRkRMRU5CUVVNc1RVRkJUVHRuUWtGRFVpeERRVUZETEVOQlFVTXNUVUZCVFN4RFFVRkRMRmRCUVZjN2IwSkJRMnhDTEVOQlFVTXNRMEZCUXl4TlFVRk5MRU5CUVVNc1YwRkJWeXhEUVVGRExFbEJRVWs3YjBKQlEzcENMRU5CUVVNc1EwRkJReXhOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETzFGQlEzQkNMRTlCUVU4c1NVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eE5RVUZOTEVWQlFVVXNUVUZCVFN4RlFVRkZMRWRCUVVjc1NVRkJTU3hEUVVGRExFTkJRVU03U1VGRGFFUXNRMEZCUXp0SlFVVkVPenM3T3pzN096czdUMEZUUnp0SlFVTklMRTFCUVUwc1EwRkJReXhQUVVGUExFTkJRVU1zVFVGQll5eEZRVUZGTEVWQlFWYzdVVUZEZUVNc1QwRkJUeXhKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEUxQlFVMHNSVUZCUlN4SlFVRkpMRU5CUVVNc1QwRkJUeXhGUVVGRkxFVkJRVVVzUTBGQlF5eERRVUZETzBsQlEycEVMRU5CUVVNN1NVRkZSQ3hOUVVGTkxFTkJRVU1zUzBGQlN5eERRVU5XTEVsQlFWa3NSVUZEV2l4SlFVRnJReXhGUVVOc1F5eFhRVUZ4UWl4RlFVTnlRaXhYUVVGclFpeFpRVUZaTzFGQlJUbENMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEV0QlFVczdXVUZCUlN4UFFVRlBMRWxCUVVrc1EwRkJRenRSUVVOeVF5eE5RVUZOTEUxQlFVMHNSMEZCUnl4UFFVRlBMRU5CUVVNc1IwRkJSeXhGUVVGRkxFTkJRVU1zUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJRenRSUVVVM1F5eFRRVUZUTEV0QlFVc3NRMEZEV2l4SFFVRlhMRVZCUTFnc1RVRkJlVUlzUlVGRGVrSXNTMEZCZVVVN1dVRkZla1VzU1VGQlNTeERRVUZETzJkQ1FVTklMRTFCUVUwc1EwRkJReXhIUVVFd1FpeEhRVUZITEVOQlFVTTdaMEpCUTNKRExFbEJRVWtzUTBGQlF5eEhRVUZITEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRuUWtGRmFrSXNVMEZCVXl4VlFVRlZMRU5CUTJwQ0xFZEJRV2xFTEVWQlEycEVMRWxCUVVrc1IwRkJSeXhMUVVGTE8yOUNRVVZhTEVsQlFVa3NRMEZCUXl4SFFVbHRRaXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4VlFVRlZMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eFZRVUZWTEVOQlFVTTdiMEpCUXpORUxFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNUMEZCVHl4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU03ZDBKQlEzaENMRTlCUVZFc1EwRkJLME1zUTBGQlF5eEpRVUZKTEVOQlF6RkVMRU5CUVVNc1JVRkRSQ3hMUVVGbExFTkJRMmhDTEVOQlFVTTdiMEpCUTBvc1EwRkJRenR2UWtGRFJDeFJRVUZSTEVkQlFVY3NRMEZCUXl4TlFVRk5MRVZCUVVVc1EwRkJRenQzUWtGRGJrSXNTMEZCU3l4RFFVRkRPelJDUVVOS0xFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhWUVVGVkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4UlFVRlJMRU5CUVVNN05FSkJRM0pETEU5QlFWRXNRMEZCTmtNc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0M1FrRkRhRVVzUzBGQlN5eERRVUZET3pSQ1FVTktMRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTTdORUpCUXpOQ0xFOUJRVThzUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRVVVzUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzNkQ1FVTjJRenMwUWtGRFJTeE5RVUZOTEVOQlFVTXNTMEZCU3l4RFFVRkRMRFpDUVVFMlFpeE5RVUZOTEVWQlFVVXNRMEZCUXl4RFFVRkRPelJDUVVOd1JDeFBRVUZQTEV0QlFVc3NRMEZCUXl4RFFVRlhMRU5CUVVNc1EwRkJRenR2UWtGRE9VSXNRMEZCUXp0blFrRkRTQ3hEUVVGRE8yZENRVVZFTEZOQlFWTXNWVUZCVlN4RFFVRkRMRU5CUVd0Q08yOUNRVU53UXl4SlFVRkpMRTlCUVU4c1EwRkJReXhMUVVGTExGRkJRVkVzUlVGQlJTeERRVUZETzNkQ1FVTXhRaXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenR2UWtGRGFrSXNRMEZCUXp0NVFrRkJUU3hEUVVGRE8zZENRVU5PTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJNRUlzUTBGQmFVSXNRMEZCUXp0dlFrRkRjRVFzUTBGQlF6dG5Ra0ZEU0N4RFFVRkRPMmRDUVVWRUxGRkJRVkVzVFVGQlRTeEZRVUZGTEVOQlFVTTdiMEpCUTJZc1MwRkJTeXhKUVVGSkxFTkJRVU03YjBKQlExWXNTMEZCU3l4SlFVRkpPM2RDUVVOUUxFOUJRVThzVlVGQlZTeERRVUZETEV0QlFXVXNRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJRenR2UWtGRE1VTXNTMEZCU3l4UFFVRlBPM2RDUVVOV0xFbEJRVWtzUzBGQlN5eERRVUZETEU5QlFVOHNRMEZCUXl4TFFVRkxMRU5CUVVNc1JVRkJSU3hEUVVGRE96UkNRVU42UWl4TFFVRkxMRU5CUVVNc1QwRkJUeXhEUVVGRExGVkJRVlVzUTBGQlF5eERRVUZETzNkQ1FVTTFRaXhEUVVGRE96WkNRVUZOTEVOQlFVTTdORUpCUTA0c1ZVRkJWU3hEUVVGRExFdEJRWGRDTEVOQlFVTXNRMEZCUXp0M1FrRkRka01zUTBGQlF6dDNRa0ZEUkN4UFFVRlBMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU03YjBKQlEyaENPM2RDUVVORkxFMUJRVTBzUTBGQlF5eExRVUZMTEVOQlFVTXNOa0pCUVRaQ0xFMUJRVTBzUlVGQlJTeERRVUZETEVOQlFVTTdkMEpCUTNCRUxFOUJRVThzUTBGQlF5eERRVUZETzJkQ1FVTmlMRU5CUVVNN1owSkJRMFFzTmtSQlFUWkVPMWxCUXk5RUxFTkJRVU03V1VGQlF5eFBRVUZQTEVOQlFWVXNSVUZCUlN4RFFVRkRPMmRDUVVOd1FpeE5RVUZOTEVOQlFVTXNTMEZCU3l4RFFVRkRMSGxDUVVGNVFpeE5RVUZOTEdWQlFXVXNTMEZCU3l4RlFVRkZMRU5CUVVNc1EwRkJRenRuUWtGRGNFVXNUMEZCVHl4SFFVRkhMRU5CUVVNN1dVRkRZaXhEUVVGRE8xRkJRMGdzUTBGQlF6dFJRVVZFTEUxQlFVMHNaVUZCWlN4SFFVRkhMRkZCUVZFc1EwRkJReXhKUVVGdFFpeERRVUZETEVOQlFVTTdVVUZEZEVRc1NVRkJTU3hEUVVGRExHVkJRV1VzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1pVRkJaU3hEUVVGRExFTkJRVU1zVFVGQlRTeEZRVUZGTEVOQlFVTTdXVUZETjBRc1QwRkJUeXhKUVVGSkxFTkJRVU03VVVGRFpDeERRVUZETzFGQlJVUXNTVUZCU1N4WFFVRlhMRWRCUVdkQ0xHVkJRVGhDTEVOQlFVTTdVVUZGT1VRc1RVRkJUU3hUUVVGVExFZEJRVWNzVFVGQlRTeERRVUZETEUxQlFVMHNRMEZCUXl4RlFVRkZMRVZCUVVVc1VVRkJVU3hEUVVGRExFTkJRVU03VVVGRE9VTXNTVUZCU1N4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExHVkJRV1VzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4SlFVRkpMRk5CUVZNN1dVRkRPVU1zVjBGQlZ6dG5Ra0ZEVWl4bFFVRjVReXhEUVVGRExGZEJRVmNzUTBGQlF5eEpRVUZKTEVWQlFVVXNRMEZCUXp0UlFVVnNSU3hQUVVGUExFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTXNWMEZCVnl4RFFVRkRMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU1zUjBGQlZ5eEZRVUZGTEVkQlFWY3NSVUZCUlN4RlFVRkZPMWxCUTJ4RkxFMUJRVTBzUjBGQlJ5eEhRVUZKTEZkQlFUSkNMRU5CUVVNc1IwRkJkMElzUTBGQlF5eERRVUZETzFsQlEyNUZMRWxCUVVrc1IwRkJSenRuUWtGRFRDeFBRVUZQTEV0QlFVc3NRMEZEVml4SFFVRkhMRVZCUTBnc1IwRkJkMElzUlVGRGVFSXNSMEZMV1N4RFFVTmlMRU5CUVVNN1dVRkRTaXhQUVVGUExFZEJRVWNzUTBGQlF6dFJRVU5pTEVOQlFVTXNSVUZCUlN4SlFVRkpMRU5CUVVNc1EwRkJRenRKUVVOWUxFTkJRVU1pTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lKcGJYQnZjblFnZTF4dUlDQk1iMmRuWlhKR1lXTjBiM0o1TEZ4dUlDQk1iMmRuYVc1blEyOXVabWxuTEZ4dUlDQk1iMmRuYVc1blEyOXVkR1Y0ZEN4Y2JpQWdVM1J5YVc1blRHbHJaU3hjYmlBZ1ZHaGxiV1VzWEc0Z0lGUm9aVzFsVDNCMGFXOXVMRnh1SUNCVWFHVnRaVTl3ZEdsdmJrSjVURzluVEdWMlpXd3NYRzRnSUV4dloyZGxjaXhjYm4wZ1puSnZiU0JjSWk0dmRIbHdaWE5jSWp0Y2JtbHRjRzl5ZENCN0lFTnZiRzl5YVhwbFQzQjBhVzl1Y3l3Z2MzUjViR1VzSUZOMGVXeGxaRk4wY21sdVp5QjlJR1p5YjIwZ1hDSnpkSGxzWldRdGMzUnlhVzVuTFdKMWFXeGtaWEpjSWp0Y2JtbHRjRzl5ZENCN1hHNGdJRVJsWm1GMWJIUk1iMmRuYVc1blEyOXVabWxuTEZ4dUlDQkVaV1poZFd4MFZHaGxiV1VzWEc0Z0lFeHZaMHhsZG1Wc0xGeHVJQ0JPZFcxbGNtbGpURzluVEdWMlpXeHpMRnh1ZlNCbWNtOXRJRndpTGk5amIyNXpkR0Z1ZEhOY0lqdGNibHh1THlvcVhHNGdLaUJBWkdWelkzSnBjSFJwYjI0Z1FTQnRhVzVwYldGc0lHeHZaMmRsY2lCcGJYQnNaVzFsYm5SaGRHbHZiaTVjYmlBcUlFQnpkVzF0WVhKNUlFMXBibWxNYjJkblpYSWdhWE1nWVNCc2FXZG9kSGRsYVdkb2RDQnNiMmRuYVc1bklHTnNZWE56SUhSb1lYUWdhVzF3YkdWdFpXNTBjeUIwYUdVZ1ZtVnlZbTl6YVhSNVRHOW5aMlZ5SUdsdWRHVnlabUZqWlM1Y2JpQXFJRWwwSUhCeWIzWnBaR1Z6SUdKaGMybGpJR3h2WjJkcGJtY2dablZ1WTNScGIyNWhiR2wwZVNCM2FYUm9JSE4xY0hCdmNuUWdabTl5SUdScFptWmxjbVZ1ZENCc2IyY2diR1YyWld4eklHRnVaQ0IyWlhKaWIzTnBkSGt1WEc0Z0tseHVJQ29nUUdOc1lYTnpYRzRnS2k5Y2JtVjRjRzl5ZENCamJHRnpjeUJOYVc1cFRHOW5aMlZ5SUdsdGNHeGxiV1Z1ZEhNZ1RHOW5aMlZ5SUh0Y2JpQWdMeW9xWEc0Z0lDQXFJRUJrWlhOamNtbHdkR2x2YmlCRGNtVmhkR1Z6SUdFZ2JtVjNJRTFwYm1sTWIyZG5aWElnYVc1emRHRnVZMlV1WEc0Z0lDQXFJRUJ6ZFcxdFlYSjVJRWx1YVhScFlXeHBlbVZ6SUdFZ1RXbHVhVXh2WjJkbGNpQjNhWFJvSUhSb1pTQm5hWFpsYmlCamJHRnpjeUJ1WVcxbExDQnZjSFJwYjI1aGJDQmpiMjVtYVdkMWNtRjBhVzl1TENCaGJtUWdiV1YwYUc5a0lHNWhiV1V1WEc0Z0lDQXFYRzRnSUNBcUlFQndZWEpoYlNCamIyNTBaWGgwSUMwZ1ZHaGxJRzVoYldVZ2IyWWdkR2hsSUdOc1lYTnpJSFZ6YVc1bklIUm9hWE1nYkc5bloyVnlMbHh1SUNBZ0tpQkFjR0Z5WVcwZ1cyTnZibVpkSUMwZ1QzQjBhVzl1WVd3Z2JHOW5aMmx1WnlCamIyNW1hV2QxY21GMGFXOXVMaUJFWldaaGRXeDBjeUIwYnlCSmJtWnZJR3hsZG1Wc0lHRnVaQ0IyWlhKaWIzTnBkSGtnTUM1Y2JpQWdJQ29nUUhCaGNtRnRJRnRwWkYwZ0xTQlBjSFJwYjI1aGJDQjFibWx4ZFdVZ2FXUmxiblJwWm1sbGNpQm1iM0lnZEdobElHeHZaMmRsY2lCcGJuTjBZVzVqWlM1Y2JpQWdJQ292WEc0Z0lHTnZibk4wY25WamRHOXlLRnh1SUNBZ0lIQnliM1JsWTNSbFpDQmpiMjUwWlhoME9pQnpkSEpwYm1jc1hHNGdJQ0FnY0hKdmRHVmpkR1ZrSUdOdmJtWS9PaUJRWVhKMGFXRnNQRXh2WjJkcGJtZERiMjVtYVdjK1hHNGdJQ2tnZTMxY2JseHVJQ0J3Y205MFpXTjBaV1FnWTI5dVptbG5LRnh1SUNBZ0lHdGxlVG9nYTJWNWIyWWdURzluWjJsdVowTnZibVpwWjF4dUlDQXBPaUJNYjJkbmFXNW5RMjl1Wm1sblcydGxlVzltSUV4dloyZHBibWREYjI1bWFXZGRJSHRjYmlBZ0lDQnBaaUFvZEdocGN5NWpiMjVtSUNZbUlHdGxlU0JwYmlCMGFHbHpMbU52Ym1ZcElISmxkSFZ5YmlCMGFHbHpMbU52Ym1aYmEyVjVYVHRjYmlBZ0lDQnlaWFIxY200Z1RHOW5aMmx1Wnk1blpYUkRiMjVtYVdjb0tWdHJaWGxkTzF4dUlDQjlYRzVjYmlBZ1ptOXlLRnh1SUNBZ0lHMWxkR2h2WkQ4NklITjBjbWx1WnlCOElDZ29MaTR1WVhKbmN6b2dZVzU1VzEwcElEMCtJR0Z1ZVNrc1hHNGdJQ0FnWTI5dVptbG5Qem9nVUdGeWRHbGhiRHhNYjJkbmFXNW5RMjl1Wm1sblBpeGNiaUFnSUNBdUxpNWhjbWR6T2lCaGJubGJYVnh1SUNBcE9pQk1iMmRuWlhJZ2UxeHVJQ0FnSUcxbGRHaHZaQ0E5SUcxbGRHaHZaRnh1SUNBZ0lDQWdQeUIwZVhCbGIyWWdiV1YwYUc5a0lEMDlQU0JjSW5OMGNtbHVaMXdpWEc0Z0lDQWdJQ0FnSUQ4Z2JXVjBhRzlrWEc0Z0lDQWdJQ0FnSURvZ2JXVjBhRzlrTG01aGJXVmNiaUFnSUNBZ0lEb2dkVzVrWldacGJtVmtPMXh1WEc0Z0lDQWdjbVYwZFhKdUlFeHZaMmRwYm1jdVptOXlLRnQwYUdsekxtTnZiblJsZUhRc0lHMWxkR2h2WkYwdWFtOXBiaWhjSWk1Y0lpa3NJR052Ym1acFp5d2dMaTR1WVhKbmN5azdYRzRnSUgxY2JseHVJQ0F2S2lwY2JpQWdJQ29nUUdSbGMyTnlhWEIwYVc5dUlFTnlaV0YwWlhNZ1lTQm1iM0p0WVhSMFpXUWdiRzluSUhOMGNtbHVaeTVjYmlBZ0lDb2dRSE4xYlcxaGNua2dSMlZ1WlhKaGRHVnpJR0VnYkc5bklITjBjbWx1WnlCM2FYUm9JSFJwYldWemRHRnRjQ3dnWTI5c2IzSmxaQ0JzYjJjZ2JHVjJaV3dzSUdGdVpDQnRaWE56WVdkbExseHVJQ0FnS2x4dUlDQWdLaUJBY0dGeVlXMGdiR1YyWld3Z0xTQlVhR1VnYkc5bklHeGxkbVZzSUdGeklHRWdjM1J5YVc1bkxseHVJQ0FnS2lCQWNHRnlZVzBnYldWemMyRm5aVnh1SUNBZ0tpQkFjR0Z5WVcwZ2MzUmhZMnRjYmlBZ0lDb2dRSEpsZEhWeWJpQkJJR1p2Y20xaGRIUmxaQ0JzYjJjZ2MzUnlhVzVuTGx4dUlDQWdLaTljYmlBZ2NISnZkR1ZqZEdWa0lHTnlaV0YwWlV4dlp5aGNiaUFnSUNCc1pYWmxiRG9nVEc5blRHVjJaV3dzWEc0Z0lDQWdiV1Z6YzJGblpUb2dVM1J5YVc1blRHbHJaU0I4SUVWeWNtOXlMRnh1SUNBZ0lITjBZV05yUHpvZ2MzUnlhVzVuWEc0Z0lDazZJSE4wY21sdVp5QjdYRzRnSUNBZ1kyOXVjM1FnYkc5bk9pQnpkSEpwYm1kYlhTQTlJRnRkTzF4dUlDQWdJR052Ym5OMElITjBlV3hsSUQwZ2RHaHBjeTVqYjI1bWFXY29YQ0p6ZEhsc1pWd2lLVHRjYmlBZ0lDQnBaaUFvZEdocGN5NWpiMjVtYVdjb1hDSjBhVzFsYzNSaGJYQmNJaWtwSUh0Y2JpQWdJQ0FnSUdOdmJuTjBJR1JoZEdVZ1BTQnVaWGNnUkdGMFpTZ3BMblJ2U1ZOUFUzUnlhVzVuS0NrN1hHNGdJQ0FnSUNCamIyNXpkQ0IwYVcxbGMzUmhiWEFnUFNCemRIbHNaU0EvSUV4dloyZHBibWN1ZEdobGJXVW9aR0YwWlN3Z1hDSjBhVzFsYzNSaGJYQmNJaXdnYkdWMlpXd3BJRG9nWkdGMFpUdGNiaUFnSUNBZ0lHeHZaeTV3ZFhOb0tIUnBiV1Z6ZEdGdGNDazdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2FXWWdLSFJvYVhNdVkyOXVabWxuS0Z3aWJHOW5UR1YyWld4Y0lpa3BJSHRjYmlBZ0lDQWdJR052Ym5OMElHeDJiRG9nYzNSeWFXNW5JRDBnYzNSNWJHVmNiaUFnSUNBZ0lDQWdQeUJNYjJkbmFXNW5MblJvWlcxbEtHeGxkbVZzTENCY0lteHZaMHhsZG1Wc1hDSXNJR3hsZG1Wc0tWeHVJQ0FnSUNBZ0lDQTZJR3hsZG1Wc08xeHVJQ0FnSUNBZ2JHOW5MbkIxYzJnb2JIWnNLVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQnBaaUFvZEdocGN5NWpiMjVtYVdjb1hDSmpiMjUwWlhoMFhDSXBLU0I3WEc0Z0lDQWdJQ0JqYjI1emRDQmpiMjUwWlhoME9pQnpkSEpwYm1jZ1BTQnpkSGxzWlZ4dUlDQWdJQ0FnSUNBL0lFeHZaMmRwYm1jdWRHaGxiV1VvZEdocGN5NWpiMjUwWlhoMExDQmNJbU5zWVhOelhDSXNJR3hsZG1Wc0tWeHVJQ0FnSUNBZ0lDQTZJSFJvYVhNdVkyOXVkR1Y0ZER0Y2JpQWdJQ0FnSUd4dlp5NXdkWE5vS0dOdmJuUmxlSFFwTzF4dUlDQWdJSDFjYmx4dUlDQWdJR2xtSUNoMGFHbHpMbU52Ym1acFp5aGNJbU52Y25KbGJHRjBhVzl1U1dSY0lpa3BJSHRjYmlBZ0lDQWdJSHRjYmlBZ0lDQWdJQ0FnWTI5dWMzUWdhV1E2SUhOMGNtbHVaeUE5SUhOMGVXeGxYRzRnSUNBZ0lDQWdJQ0FnUHlCTWIyZG5hVzVuTG5Sb1pXMWxLSFJvYVhNdVkyOXVabWxuS0Z3aVkyOXljbVZzWVhScGIyNUpaRndpS1NFdWRHOVRkSEpwYm1jb0tTd2dYQ0pwWkZ3aUxDQnNaWFpsYkNsY2JpQWdJQ0FnSUNBZ0lDQTZJSFJvYVhNdVkyOXVabWxuS0Z3aVkyOXljbVZzWVhScGIyNUpaRndpS1NFdWRHOVRkSEpwYm1jb0tUdGNiaUFnSUNBZ0lDQWdiRzluTG5CMWMyZ29hV1FwTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmx4dUlDQWdJR052Ym5OMElHMXpaem9nYzNSeWFXNW5JRDBnYzNSNWJHVmNiaUFnSUNBZ0lEOGdURzluWjJsdVp5NTBhR1Z0WlNoY2JpQWdJQ0FnSUNBZ0lDQjBlWEJsYjJZZ2JXVnpjMkZuWlNBOVBUMGdYQ0p6ZEhKcGJtZGNJaUEvSUcxbGMzTmhaMlVnT2lBb2JXVnpjMkZuWlNCaGN5QkZjbkp2Y2lrdWJXVnpjMkZuWlN4Y2JpQWdJQ0FnSUNBZ0lDQmNJbTFsYzNOaFoyVmNJaXhjYmlBZ0lDQWdJQ0FnSUNCc1pYWmxiRnh1SUNBZ0lDQWdJQ0FwWEc0Z0lDQWdJQ0E2SUhSNWNHVnZaaUJ0WlhOellXZGxJRDA5UFNCY0luTjBjbWx1WjF3aVhHNGdJQ0FnSUNBZ0lEOGdiV1Z6YzJGblpWeHVJQ0FnSUNBZ0lDQTZJQ2h0WlhOellXZGxJR0Z6SUVWeWNtOXlLUzV0WlhOellXZGxPMXh1SUNBZ0lHeHZaeTV3ZFhOb0tHMXpaeWs3WEc0Z0lDQWdhV1lnS0hOMFlXTnJJSHg4SUcxbGMzTmhaMlVnYVc1emRHRnVZMlZ2WmlCRmNuSnZjaWtnZTF4dUlDQWdJQ0FnYzNSaFkyc2dQU0J6ZEhsc1pWeHVJQ0FnSUNBZ0lDQS9JRXh2WjJkcGJtY3VkR2hsYldVb1hHNGdJQ0FnSUNBZ0lDQWdJQ0FvYzNSaFkyc2dmSHdnS0cxbGMzTmhaMlVnWVhNZ1JYSnliM0lwTG5OMFlXTnJLU0JoY3lCemRISnBibWNzWEc0Z0lDQWdJQ0FnSUNBZ0lDQmNJbk4wWVdOclhDSXNYRzRnSUNBZ0lDQWdJQ0FnSUNCc1pYWmxiRnh1SUNBZ0lDQWdJQ0FnSUNsY2JpQWdJQ0FnSUNBZ09pQnpkR0ZqYXp0Y2JpQWdJQ0FnSUd4dlp5NXdkWE5vS0dCY1hHNVRkR0ZqYXlCMGNtRmpaVHBjWEc0a2UzTjBZV05yZldBcE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUhKbGRIVnliaUJzYjJjdWFtOXBiaWgwYUdsekxtTnZibVpwWnloY0luTmxjR0Z5WVhSdmNsd2lLU0JoY3lCemRISnBibWNwTzF4dUlDQjlYRzVjYmlBZ0x5b3FYRzRnSUNBcUlFQmtaWE5qY21sd2RHbHZiaUJNYjJkeklHRWdiV1Z6YzJGblpTQjNhWFJvSUhSb1pTQnpjR1ZqYVdacFpXUWdiRzluSUd4bGRtVnNMbHh1SUNBZ0tpQkFjM1Z0YldGeWVTQkRhR1ZqYTNNZ2FXWWdkR2hsSUcxbGMzTmhaMlVnYzJodmRXeGtJR0psSUd4dloyZGxaQ0JpWVhObFpDQnZiaUIwYUdVZ1kzVnljbVZ1ZENCc2IyY2diR1YyWld3c1hHNGdJQ0FxSUhSb1pXNGdkWE5sY3lCMGFHVWdZWEJ3Y205d2NtbGhkR1VnWTI5dWMyOXNaU0J0WlhSb2IyUWdkRzhnYjNWMGNIVjBJSFJvWlNCc2IyY3VYRzRnSUNBcVhHNGdJQ0FxSUVCd1lYSmhiU0JzWlhabGJDQXRJRlJvWlNCc2IyY2diR1YyWld3Z2IyWWdkR2hsSUcxbGMzTmhaMlV1WEc0Z0lDQXFJRUJ3WVhKaGJTQnRjMmNnTFNCVWFHVWdiV1Z6YzJGblpTQjBieUJpWlNCc2IyZG5aV1F1WEc0Z0lDQXFJRUJ3WVhKaGJTQnpkR0ZqYTF4dUlDQWdLaTljYmlBZ2NISnZkR1ZqZEdWa0lHeHZaeWhjYmlBZ0lDQnNaWFpsYkRvZ1RHOW5UR1YyWld3c1hHNGdJQ0FnYlhObk9pQlRkSEpwYm1kTWFXdGxJSHdnUlhKeWIzSXNYRzRnSUNBZ2MzUmhZMnMvT2lCemRISnBibWRjYmlBZ0tUb2dkbTlwWkNCN1hHNGdJQ0FnYVdZZ0tGeHVJQ0FnSUNBZ1RuVnRaWEpwWTB4dloweGxkbVZzYzF0MGFHbHpMbU52Ym1acFp5aGNJbXhsZG1Wc1hDSXBJR0Z6SUV4dloweGxkbVZzWFNBOFhHNGdJQ0FnSUNCT2RXMWxjbWxqVEc5blRHVjJaV3h6VzJ4bGRtVnNYVnh1SUNBZ0lDbGNiaUFnSUNBZ0lISmxkSFZ5Ymp0Y2JpQWdJQ0JzWlhRZ2JXVjBhRzlrTzF4dUlDQWdJSE4zYVhSamFDQW9iR1YyWld3cElIdGNiaUFnSUNBZ0lHTmhjMlVnVEc5blRHVjJaV3d1YVc1bWJ6cGNiaUFnSUNBZ0lDQWdiV1YwYUc5a0lEMGdZMjl1YzI5c1pTNXNiMmM3WEc0Z0lDQWdJQ0FnSUdKeVpXRnJPMXh1SUNBZ0lDQWdZMkZ6WlNCTWIyZE1aWFpsYkM1MlpYSmliM05sT2x4dUlDQWdJQ0FnWTJGelpTQk1iMmRNWlhabGJDNWtaV0oxWnpwY2JpQWdJQ0FnSUNBZ2JXVjBhRzlrSUQwZ1kyOXVjMjlzWlM1a1pXSjFaenRjYmlBZ0lDQWdJQ0FnWW5KbFlXczdYRzRnSUNBZ0lDQmpZWE5sSUV4dloweGxkbVZzTG1WeWNtOXlPbHh1SUNBZ0lDQWdJQ0J0WlhSb2IyUWdQU0JqYjI1emIyeGxMbVZ5Y205eU8xeHVJQ0FnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0FnSUdSbFptRjFiSFE2WEc0Z0lDQWdJQ0FnSUhSb2NtOTNJRzVsZHlCRmNuSnZjaWhjSWtsdWRtRnNhV1FnYkc5bklHeGxkbVZzWENJcE8xeHVJQ0FnSUgxY2JpQWdJQ0J0WlhSb2IyUW9kR2hwY3k1amNtVmhkR1ZNYjJjb2JHVjJaV3dzSUcxelp5d2djM1JoWTJzcEtUdGNiaUFnZlZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJBWkdWelkzSnBjSFJwYjI0Z1RFeHZaM01nWVNCZ2QyRjVJSFJ2YnlCMlpYSmliM05sWUNCdmNpQmhJSE5wYkd4NUlHMWxjM05oWjJVdVhHNGdJQ0FxSUVCemRXMXRZWEo1SUV4dlozTWdZU0J0WlhOellXZGxJR0YwSUhSb1pTQlRhV3hzZVNCc1pYWmxiQ0JwWmlCMGFHVWdZM1Z5Y21WdWRDQjJaWEppYjNOcGRIa2dZV3hzYjNkeklHbDBMbHh1SUNBZ0tseHVJQ0FnS2lCQWNHRnlZVzBnYlhObklDMGdWR2hsSUcxbGMzTmhaMlVnZEc4Z1ltVWdiRzluWjJWa0xseHVJQ0FnS2lCQWNHRnlZVzBnZG1WeVltOXphWFI1SUMwZ1ZHaGxJSFpsY21KdmMybDBlU0JzWlhabGJDQnZaaUIwYUdVZ2JXVnpjMkZuWlNBb1pHVm1ZWFZzZERvZ01Da3VYRzRnSUNBcUwxeHVJQ0J6YVd4c2VTaHRjMmM2SUZOMGNtbHVaMHhwYTJVc0lIWmxjbUp2YzJsMGVUb2diblZ0WW1WeUlEMGdNQ2s2SUhadmFXUWdlMXh1SUNBZ0lHbG1JQ2dvZEdocGN5NWpiMjVtYVdjb1hDSjJaWEppYjNObFhDSXBJR0Z6SUc1MWJXSmxjaWtnUGowZ2RtVnlZbTl6YVhSNUtWeHVJQ0FnSUNBZ2RHaHBjeTVzYjJjb1RHOW5UR1YyWld3dWRtVnlZbTl6WlN3Z2JYTm5LVHRjYmlBZ2ZWeHVYRzRnSUM4cUtseHVJQ0FnS2lCQVpHVnpZM0pwY0hScGIyNGdURzluY3lCaElIWmxjbUp2YzJVZ2JXVnpjMkZuWlM1Y2JpQWdJQ29nUUhOMWJXMWhjbmtnVEc5bmN5QmhJRzFsYzNOaFoyVWdZWFFnZEdobElGWmxjbUp2YzJVZ2JHVjJaV3dnYVdZZ2RHaGxJR04xY25KbGJuUWdkbVZ5WW05emFYUjVJR0ZzYkc5M2N5QnBkQzVjYmlBZ0lDcGNiaUFnSUNvZ1FIQmhjbUZ0SUcxelp5QXRJRlJvWlNCdFpYTnpZV2RsSUhSdklHSmxJR3h2WjJkbFpDNWNiaUFnSUNvZ1FIQmhjbUZ0SUhabGNtSnZjMmwwZVNBdElGUm9aU0IyWlhKaWIzTnBkSGtnYkdWMlpXd2diMllnZEdobElHMWxjM05oWjJVZ0tHUmxabUYxYkhRNklEQXBMbHh1SUNBZ0tpOWNiaUFnZG1WeVltOXpaU2h0YzJjNklGTjBjbWx1WjB4cGEyVXNJSFpsY21KdmMybDBlVG9nYm5WdFltVnlJRDBnTUNrNklIWnZhV1FnZTF4dUlDQWdJR2xtSUNnb2RHaHBjeTVqYjI1bWFXY29YQ0oyWlhKaWIzTmxYQ0lwSUdGeklHNTFiV0psY2lrZ1BqMGdkbVZ5WW05emFYUjVLVnh1SUNBZ0lDQWdkR2hwY3k1c2IyY29URzluVEdWMlpXd3VkbVZ5WW05elpTd2diWE5uS1R0Y2JpQWdmVnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkFaR1Z6WTNKcGNIUnBiMjRnVEc5bmN5QmhiaUJwYm1adklHMWxjM05oWjJVdVhHNGdJQ0FxSUVCemRXMXRZWEo1SUV4dlozTWdZU0J0WlhOellXZGxJR0YwSUhSb1pTQkpibVp2SUd4bGRtVnNMbHh1SUNBZ0tseHVJQ0FnS2lCQWNHRnlZVzBnYlhObklDMGdWR2hsSUcxbGMzTmhaMlVnZEc4Z1ltVWdiRzluWjJWa0xseHVJQ0FnS2k5Y2JpQWdhVzVtYnlodGMyYzZJRk4wY21sdVoweHBhMlVwT2lCMmIybGtJSHRjYmlBZ0lDQjBhR2x6TG14dlp5aE1iMmRNWlhabGJDNXBibVp2TENCdGMyY3BPMXh1SUNCOVhHNWNiaUFnTHlvcVhHNGdJQ0FxSUVCa1pYTmpjbWx3ZEdsdmJpQk1iMmR6SUdFZ1pHVmlkV2NnYldWemMyRm5aUzVjYmlBZ0lDb2dRSE4xYlcxaGNua2dURzluY3lCaElHMWxjM05oWjJVZ1lYUWdkR2hsSUVSbFluVm5JR3hsZG1Wc0xseHVJQ0FnS2x4dUlDQWdLaUJBY0dGeVlXMGdiWE5uSUMwZ1ZHaGxJRzFsYzNOaFoyVWdkRzhnWW1VZ2JHOW5aMlZrTGx4dUlDQWdLaTljYmlBZ1pHVmlkV2NvYlhObk9pQlRkSEpwYm1kTWFXdGxLVG9nZG05cFpDQjdYRzRnSUNBZ2RHaHBjeTVzYjJjb1RHOW5UR1YyWld3dVpHVmlkV2NzSUcxelp5azdYRzRnSUgxY2JseHVJQ0F2S2lwY2JpQWdJQ29nUUdSbGMyTnlhWEIwYVc5dUlFeHZaM01nWVc0Z1pYSnliM0lnYldWemMyRm5aUzVjYmlBZ0lDb2dRSE4xYlcxaGNua2dURzluY3lCaElHMWxjM05oWjJVZ1lYUWdkR2hsSUVWeWNtOXlJR3hsZG1Wc0xseHVJQ0FnS2x4dUlDQWdLaUJBY0dGeVlXMGdiWE5uSUMwZ1ZHaGxJRzFsYzNOaFoyVWdkRzhnWW1VZ2JHOW5aMlZrTGx4dUlDQWdLaTljYmlBZ1pYSnliM0lvYlhObk9pQlRkSEpwYm1kTWFXdGxJSHdnUlhKeWIzSXBPaUIyYjJsa0lIdGNiaUFnSUNCMGFHbHpMbXh2WnloTWIyZE1aWFpsYkM1bGNuSnZjaXdnYlhObktUdGNiaUFnZlZ4dVhHNGdJSE5sZEVOdmJtWnBaeWhqYjI1bWFXYzZJRkJoY25ScFlXdzhURzluWjJsdVowTnZibVpwWno0cElIdGNiaUFnSUNCMGFHbHpMbU52Ym1ZZ1BTQjdJQzR1TGloMGFHbHpMbU52Ym1ZZ2ZId2dlMzBwTENBdUxpNWpiMjVtYVdjZ2ZUdGNiaUFnZlZ4dWZWeHVYRzR2S2lwY2JpQXFJRUJrWlhOamNtbHdkR2x2YmlCQklITjBZWFJwWXlCamJHRnpjeUJtYjNJZ2JXRnVZV2RwYm1jZ2JHOW5aMmx1WnlCdmNHVnlZWFJwYjI1ekxseHVJQ29nUUhOMWJXMWhjbmtnVkdobElFeHZaMmRwYm1jZ1kyeGhjM01nY0hKdmRtbGtaWE1nWVNCalpXNTBjbUZzYVhwbFpDQnNiMmRuYVc1bklHMWxZMmhoYm1semJTQjNhWFJvSUhOMWNIQnZjblFnWm05eVhHNGdLaUJrYVdabVpYSmxiblFnYkc5bklHeGxkbVZzY3lCaGJtUWdkbVZ5WW05emFYUjVMaUJKZENCMWMyVnpJR0VnYzJsdVoyeGxkRzl1SUhCaGRIUmxjbTRnZEc4Z2JXRnBiblJoYVc0Z1lTQm5iRzlpWVd4Y2JpQXFJR3h2WjJkbGNpQnBibk4wWVc1alpTQmhibVFnWVd4c2IzZHpJR055WldGMGFXNW5JSE53WldOcFptbGpJR3h2WjJkbGNuTWdabTl5SUdScFptWmxjbVZ1ZENCamJHRnpjMlZ6SUdGdVpDQnRaWFJvYjJSekxseHVJQ3BjYmlBcUlFQmpiR0Z6YzF4dUlDb3ZYRzVsZUhCdmNuUWdZMnhoYzNNZ1RHOW5aMmx1WnlCN1hHNGdJQzhxS2x4dUlDQWdLaUJBWkdWelkzSnBjSFJwYjI0Z1ZHaGxJR2RzYjJKaGJDQnNiMmRuWlhJZ2FXNXpkR0Z1WTJVdVhHNGdJQ0FxSUVCemRXMXRZWEo1SUVFZ2MybHVaMnhsZEc5dUlHbHVjM1JoYm1ObElHOW1JRlpsY21KdmMybDBlVXh2WjJkbGNpQjFjMlZrSUdadmNpQm5iRzlpWVd3Z2JHOW5aMmx1Wnk1Y2JpQWdJQ292WEc0Z0lIQnlhWFpoZEdVZ2MzUmhkR2xqSUdkc2IySmhiRDg2SUV4dloyZGxjanRjYmx4dUlDQXZLaXBjYmlBZ0lDb2dRR1JsYzJOeWFYQjBhVzl1SUVaaFkzUnZjbmtnWm5WdVkzUnBiMjRnWm05eUlHTnlaV0YwYVc1bklHeHZaMmRsY2lCcGJuTjBZVzVqWlhNdVhHNGdJQ0FxSUVCemRXMXRZWEo1SUVFZ1puVnVZM1JwYjI0Z2RHaGhkQ0JqY21WaGRHVnpJRzVsZHlCV1pYSmliM05wZEhsTWIyZG5aWElnYVc1emRHRnVZMlZ6TGlCQ2VTQmtaV1poZFd4MExDQnBkQ0JqY21WaGRHVnpJR0VnVFdsdWFVeHZaMmRsY2k1Y2JpQWdJQ292WEc0Z0lIQnlhWFpoZEdVZ2MzUmhkR2xqSUY5bVlXTjBiM0o1T2lCTWIyZG5aWEpHWVdOMGIzSjVJRDBnS0Z4dUlDQWdJRzlpYW1WamREb2djM1J5YVc1bkxGeHVJQ0FnSUdOdmJtWnBaejg2SUZCaGNuUnBZV3c4VEc5bloybHVaME52Ym1acFp6NWNiaUFnS1NBOVBpQjdYRzRnSUNBZ2NtVjBkWEp1SUc1bGR5Qk5hVzVwVEc5bloyVnlLRzlpYW1WamRDd2dZMjl1Wm1sbktUdGNiaUFnZlR0Y2JpQWdMeW9xWEc0Z0lDQXFJRUJrWlhOamNtbHdkR2x2YmlCRGIyNW1hV2QxY21GMGFXOXVJR1p2Y2lCMGFHVWdiRzluWjJsdVp5QnplWE4wWlcwdVhHNGdJQ0FxSUVCemRXMXRZWEo1SUZOMGIzSmxjeUIwYUdVZ1oyeHZZbUZzSUhabGNtSnZjMmwwZVNCc1pYWmxiQ0JoYm1RZ2JHOW5JR3hsZG1Wc0lITmxkSFJwYm1kekxseHVJQ0FnS2k5Y2JpQWdjSEpwZG1GMFpTQnpkR0YwYVdNZ1gyTnZibVpwWnpvZ1RHOW5aMmx1WjBOdmJtWnBaeUE5SUVSbFptRjFiSFJNYjJkbmFXNW5RMjl1Wm1sbk8xeHVYRzRnSUM4cUtseHVJQ0FnS2lCQVpHVnpZM0pwY0hScGIyNGdVSEpwZG1GMFpTQmpiMjV6ZEhKMVkzUnZjaUIwYnlCd2NtVjJaVzUwSUdsdWMzUmhiblJwWVhScGIyNHVYRzRnSUNBcUlFQnpkVzF0WVhKNUlFVnVjM1Z5WlhNZ2RHaGhkQ0IwYUdVZ1RHOW5aMmx1WnlCamJHRnpjeUJqWVc1dWIzUWdZbVVnYVc1emRHRnVkR2xoZEdWa0lHRnpJR2wwSjNNZ1pHVnphV2R1WldRZ2RHOGdZbVVnZFhObFpDQnpkR0YwYVdOaGJHeDVMbHh1SUNBZ0tpOWNiaUFnY0hKcGRtRjBaU0JqYjI1emRISjFZM1J2Y2lncElIdDlYRzVjYmlBZ2MzUmhkR2xqSUhObGRFWmhZM1J2Y25rb1ptRmpkRzl5ZVRvZ1RHOW5aMlZ5Um1GamRHOXllU2tnZTF4dUlDQWdJRXh2WjJkcGJtY3VYMlpoWTNSdmNua2dQU0JtWVdOMGIzSjVPMXh1SUNCOVhHNWNiaUFnTHlvcVhHNGdJQ0FxSUVCa1pYTmpjbWx3ZEdsdmJpQlRaWFIwWlhJZ1ptOXlJSFJvWlNCc2IyZG5hVzVuSUdOdmJtWnBaM1Z5WVhScGIyNHVYRzRnSUNBcUlFQnpkVzF0WVhKNUlFRnNiRzkzY3lCMWNHUmhkR2x1WnlCMGFHVWdaMnh2WW1Gc0lHeHZaMmRwYm1jZ1kyOXVabWxuZFhKaGRHbHZiaTVjYmlBZ0lDcGNiaUFnSUNvZ1FIQmhjbUZ0SUdOdmJtWnBaeUF0SUVGdUlHOWlhbVZqZENCamIyNTBZV2x1YVc1bklIWmxjbUp2YzJsMGVTQmhibVFnYkc5bklHeGxkbVZzSUhObGRIUnBibWR6TGx4dUlDQWdLaTljYmlBZ2MzUmhkR2xqSUhObGRFTnZibVpwWnloamIyNW1hV2M2SUZCaGNuUnBZV3c4VEc5bloybHVaME52Ym1acFp6NHBJSHRjYmlBZ0lDQlBZbXBsWTNRdVlYTnphV2R1S0hSb2FYTXVYMk52Ym1acFp5d2dZMjl1Wm1sbktUdGNiaUFnZlZ4dVhHNGdJSE4wWVhScFl5Qm5aWFJEYjI1bWFXY29LVG9nVEc5bloybHVaME52Ym1acFp5QjdYRzRnSUNBZ2NtVjBkWEp1SUU5aWFtVmpkQzVoYzNOcFoyNG9lMzBzSUhSb2FYTXVYMk52Ym1acFp5azdYRzRnSUgxY2JseHVJQ0F2S2lwY2JpQWdJQ29nUUdSbGMyTnlhWEIwYVc5dUlGSmxkSEpwWlhabGN5QnZjaUJqY21WaGRHVnpJSFJvWlNCbmJHOWlZV3dnYkc5bloyVnlJR2x1YzNSaGJtTmxMbHh1SUNBZ0tpQkFjM1Z0YldGeWVTQlNaWFIxY201eklIUm9aU0JsZUdsemRHbHVaeUJuYkc5aVlXd2diRzluWjJWeUlHOXlJR055WldGMFpYTWdZU0J1WlhjZ2IyNWxJR2xtSUdsMElHUnZaWE51SjNRZ1pYaHBjM1F1WEc0Z0lDQXFYRzRnSUNBcUlFQnlaWFIxY200Z1ZHaGxJR2RzYjJKaGJDQldaWEppYjNOcGRIbE1iMmRuWlhJZ2FXNXpkR0Z1WTJVdVhHNGdJQ0FxTDF4dUlDQnpkR0YwYVdNZ1oyVjBLQ2s2SUV4dloyZGxjaUI3WEc0Z0lDQWdkR2hwY3k1bmJHOWlZV3dnUFNCMGFHbHpMbWRzYjJKaGJDQS9JSFJvYVhNdVoyeHZZbUZzSURvZ2RHaHBjeTVmWm1GamRHOXllU2hjSWt4dloyZHBibWRjSWlrN1hHNGdJQ0FnY21WMGRYSnVJSFJvYVhNdVoyeHZZbUZzTzF4dUlDQjlYRzVjYmlBZ0x5b3FYRzRnSUNBcUlFQmtaWE5qY21sd2RHbHZiaUJNYjJkeklHRWdkbVZ5WW05elpTQnRaWE56WVdkbExseHVJQ0FnS2lCQWMzVnRiV0Z5ZVNCRVpXeGxaMkYwWlhNZ2RHaGxJSFpsY21KdmMyVWdiRzluWjJsdVp5QjBieUIwYUdVZ1oyeHZZbUZzSUd4dloyZGxjaUJwYm5OMFlXNWpaUzVjYmlBZ0lDcGNiaUFnSUNvZ1FIQmhjbUZ0SUcxelp5QXRJRlJvWlNCdFpYTnpZV2RsSUhSdklHSmxJR3h2WjJkbFpDNWNiaUFnSUNvZ1FIQmhjbUZ0SUhabGNtSnZjMmwwZVNBdElGUm9aU0IyWlhKaWIzTnBkSGtnYkdWMlpXd2diMllnZEdobElHMWxjM05oWjJVZ0tHUmxabUYxYkhRNklEQXBMbHh1SUNBZ0tpOWNiaUFnYzNSaGRHbGpJSFpsY21KdmMyVW9iWE5uT2lCVGRISnBibWRNYVd0bExDQjJaWEppYjNOcGRIazZJRzUxYldKbGNpQTlJREFwT2lCMmIybGtJSHRjYmlBZ0lDQnlaWFIxY200Z2RHaHBjeTVuWlhRb0tTNTJaWEppYjNObEtHMXpaeXdnZG1WeVltOXphWFI1S1R0Y2JpQWdmVnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkFaR1Z6WTNKcGNIUnBiMjRnVEc5bmN5QmhiaUJwYm1adklHMWxjM05oWjJVdVhHNGdJQ0FxSUVCemRXMXRZWEo1SUVSbGJHVm5ZWFJsY3lCMGFHVWdhVzVtYnlCc2IyZG5hVzVuSUhSdklIUm9aU0JuYkc5aVlXd2diRzluWjJWeUlHbHVjM1JoYm1ObExseHVJQ0FnS2x4dUlDQWdLaUJBY0dGeVlXMGdiWE5uSUMwZ1ZHaGxJRzFsYzNOaFoyVWdkRzhnWW1VZ2JHOW5aMlZrTGx4dUlDQWdLaTljYmlBZ2MzUmhkR2xqSUdsdVptOG9iWE5uT2lCVGRISnBibWRNYVd0bEtUb2dkbTlwWkNCN1hHNGdJQ0FnY21WMGRYSnVJSFJvYVhNdVoyVjBLQ2t1YVc1bWJ5aHRjMmNwTzF4dUlDQjlYRzVjYmlBZ0x5b3FYRzRnSUNBcUlFQmtaWE5qY21sd2RHbHZiaUJNYjJkeklHRWdaR1ZpZFdjZ2JXVnpjMkZuWlM1Y2JpQWdJQ29nUUhOMWJXMWhjbmtnUkdWc1pXZGhkR1Z6SUhSb1pTQmtaV0oxWnlCc2IyZG5hVzVuSUhSdklIUm9aU0JuYkc5aVlXd2diRzluWjJWeUlHbHVjM1JoYm1ObExseHVJQ0FnS2x4dUlDQWdLaUJBY0dGeVlXMGdiWE5uSUMwZ1ZHaGxJRzFsYzNOaFoyVWdkRzhnWW1VZ2JHOW5aMlZrTGx4dUlDQWdLaTljYmlBZ2MzUmhkR2xqSUdSbFluVm5LRzF6WnpvZ1UzUnlhVzVuVEdsclpTazZJSFp2YVdRZ2UxeHVJQ0FnSUhKbGRIVnliaUIwYUdsekxtZGxkQ2dwTG1SbFluVm5LRzF6WnlrN1hHNGdJSDFjYmx4dUlDQXZLaXBjYmlBZ0lDb2dRR1JsYzJOeWFYQjBhVzl1SUV4dlozTWdZU0J6YVd4c2VTQnRaWE56WVdkbExseHVJQ0FnS2lCQWMzVnRiV0Z5ZVNCRVpXeGxaMkYwWlhNZ2RHaGxJR1JsWW5WbklHeHZaMmRwYm1jZ2RHOGdkR2hsSUdkc2IySmhiQ0JzYjJkblpYSWdhVzV6ZEdGdVkyVXVYRzRnSUNBcVhHNGdJQ0FxSUVCd1lYSmhiU0J0YzJjZ0xTQlVhR1VnYldWemMyRm5aU0IwYnlCaVpTQnNiMmRuWldRdVhHNGdJQ0FxTDF4dUlDQnpkR0YwYVdNZ2MybHNiSGtvYlhObk9pQlRkSEpwYm1kTWFXdGxLVG9nZG05cFpDQjdYRzRnSUNBZ2NtVjBkWEp1SUhSb2FYTXVaMlYwS0NrdWMybHNiSGtvYlhObktUdGNiaUFnZlZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJBWkdWelkzSnBjSFJwYjI0Z1RHOW5jeUJoYmlCbGNuSnZjaUJ0WlhOellXZGxMbHh1SUNBZ0tpQkFjM1Z0YldGeWVTQkVaV3hsWjJGMFpYTWdkR2hsSUdWeWNtOXlJR3h2WjJkcGJtY2dkRzhnZEdobElHZHNiMkpoYkNCc2IyZG5aWElnYVc1emRHRnVZMlV1WEc0Z0lDQXFYRzRnSUNBcUlFQndZWEpoYlNCdGMyY2dMU0JVYUdVZ2JXVnpjMkZuWlNCMGJ5QmlaU0JzYjJkblpXUXVYRzRnSUNBcUwxeHVJQ0J6ZEdGMGFXTWdaWEp5YjNJb2JYTm5PaUJUZEhKcGJtZE1hV3RsS1RvZ2RtOXBaQ0I3WEc0Z0lDQWdjbVYwZFhKdUlIUm9hWE11WjJWMEtDa3VaWEp5YjNJb2JYTm5LVHRjYmlBZ2ZWeHVYRzRnSUhOMFlYUnBZeUJtYjNJb1hHNGdJQ0FnYjJKcVpXTjBPaUJNYjJkbmFXNW5RMjl1ZEdWNGRDeGNiaUFnSUNCamIyNW1hV2MvT2lCUVlYSjBhV0ZzUEV4dloyZHBibWREYjI1bWFXYytMRnh1SUNBZ0lDNHVMbUZ5WjNNNklHRnVlVnRkWEc0Z0lDazZJRXh2WjJkbGNpQjdYRzRnSUNBZ2IySnFaV04wSUQxY2JpQWdJQ0FnSUhSNWNHVnZaaUJ2WW1wbFkzUWdQVDA5SUZ3aWMzUnlhVzVuWENKY2JpQWdJQ0FnSUNBZ1B5QnZZbXBsWTNSY2JpQWdJQ0FnSUNBZ09pQnZZbXBsWTNRdVkyOXVjM1J5ZFdOMGIzSmNiaUFnSUNBZ0lDQWdJQ0EvSUc5aWFtVmpkQzVqYjI1emRISjFZM1J2Y2k1dVlXMWxYRzRnSUNBZ0lDQWdJQ0FnT2lCdlltcGxZM1F1Ym1GdFpUdGNiaUFnSUNCeVpYUjFjbTRnZEdocGN5NWZabUZqZEc5eWVTaHZZbXBsWTNRc0lHTnZibVpwWnl3Z0xpNHVZWEpuY3lrN1hHNGdJSDFjYmx4dUlDQXZLaXBjYmlBZ0lDb2dRR1JsYzJOeWFYQjBhVzl1SUVOeVpXRjBaWE1nWVNCc2IyZG5aWElnWm05eUlHRWdjM0JsWTJsbWFXTWdjbVZoYzI5dUlHOXlJR052Ym5SbGVIUXVYRzRnSUNBcVhHNGdJQ0FxSUVCemRXMXRZWEo1SUZSb2FYTWdjM1JoZEdsaklHMWxkR2h2WkNCamNtVmhkR1Z6SUdFZ2JtVjNJR3h2WjJkbGNpQnBibk4wWVc1alpTQjFjMmx1WnlCMGFHVWdabUZqZEc5eWVTQm1kVzVqZEdsdmJpeGNiaUFnSUNvZ1ltRnpaV1FnYjI0Z1lTQm5hWFpsYmlCeVpXRnpiMjRnYjNJZ1kyOXVkR1Y0ZEM1Y2JpQWdJQ3BjYmlBZ0lDb2dRSEJoY21GdElISmxZWE52YmlBdElFRWdjM1J5YVc1bklHUmxjMk55YVdKcGJtY2dkR2hsSUhKbFlYTnZiaUJ2Y2lCamIyNTBaWGgwSUdadmNpQmpjbVZoZEdsdVp5QjBhR2x6SUd4dloyZGxjaTVjYmlBZ0lDb2dRSEJoY21GdElHbGtYRzRnSUNBcUlFQnlaWFIxY201eklFRWdibVYzSUZabGNtSnZjMmwwZVV4dloyZGxjaUJ2Y2lCRGJHRnpjMHh2WjJkbGNpQnBibk4wWVc1alpTNWNiaUFnSUNvdlhHNGdJSE4wWVhScFl5QmlaV05oZFhObEtISmxZWE52YmpvZ2MzUnlhVzVuTENCcFpEODZJSE4wY21sdVp5azZJRXh2WjJkbGNpQjdYRzRnSUNBZ2NtVjBkWEp1SUhSb2FYTXVYMlpoWTNSdmNua29jbVZoYzI5dUxDQjBhR2x6TGw5amIyNW1hV2NzSUdsa0tUdGNiaUFnZlZ4dVhHNGdJSE4wWVhScFl5QjBhR1Z0WlNoY2JpQWdJQ0IwWlhoME9pQnpkSEpwYm1jc1hHNGdJQ0FnZEhsd1pUb2dhMlY1YjJZZ1ZHaGxiV1VnZkNCclpYbHZaaUJNYjJkTVpYWmxiQ3hjYmlBZ0lDQnNiMmRuWlhKTVpYWmxiRG9nVEc5blRHVjJaV3dzWEc0Z0lDQWdkR1Z0Y0d4aGRHVTZJRlJvWlcxbElEMGdSR1ZtWVhWc2RGUm9aVzFsWEc0Z0lDa2dlMXh1SUNBZ0lHbG1JQ2doZEdocGN5NWZZMjl1Wm1sbkxuTjBlV3hsS1NCeVpYUjFjbTRnZEdWNGREdGNiaUFnSUNCamIyNXpkQ0JzYjJkblpYSWdQU0JNYjJkbmFXNW5MbWRsZENncExtWnZjaWgwYUdsekxuUm9aVzFsS1R0Y2JseHVJQ0FnSUdaMWJtTjBhVzl1SUdGd2NHeDVLRnh1SUNBZ0lDQWdkSGgwT2lCemRISnBibWNzWEc0Z0lDQWdJQ0J2Y0hScGIyNDZJR3RsZVc5bUlGUm9aVzFsVDNCMGFXOXVMRnh1SUNBZ0lDQWdkbUZzZFdVNklHNTFiV0psY2lCOElGdHVkVzFpWlhKZElId2dXMjUxYldKbGNpd2diblZ0WW1WeUxDQnVkVzFpWlhKZElId2diblZ0WW1WeVcxMGdmQ0J6ZEhKcGJtZGJYVnh1SUNBZ0lDazZJSE4wY21sdVp5QjdYRzRnSUNBZ0lDQjBjbmtnZTF4dUlDQWdJQ0FnSUNCamIyNXpkQ0IwT2lCemRISnBibWNnZkNCVGRIbHNaV1JUZEhKcGJtY2dQU0IwZUhRN1hHNGdJQ0FnSUNBZ0lHeGxkQ0JqSUQwZ2MzUjViR1VvZENrN1hHNWNiaUFnSUNBZ0lDQWdablZ1WTNScGIyNGdZWEJ3YkhsRGIyeHZjaWhjYmlBZ0lDQWdJQ0FnSUNCMllXdzZJRzUxYldKbGNpQjhJRnR1ZFcxaVpYSmRJSHdnVzI1MWJXSmxjaXdnYm5WdFltVnlMQ0J1ZFcxaVpYSmRMRnh1SUNBZ0lDQWdJQ0FnSUdselFtY2dQU0JtWVd4elpWeHVJQ0FnSUNBZ0lDQXBPaUJUZEhsc1pXUlRkSEpwYm1jZ2UxeHVJQ0FnSUNBZ0lDQWdJR3hsZENCbU9seHVJQ0FnSUNBZ0lDQWdJQ0FnZkNCMGVYQmxiMllnWXk1aVlXTnJaM0p2ZFc1a1hHNGdJQ0FnSUNBZ0lDQWdJQ0I4SUhSNWNHVnZaaUJqTG1admNtVm5jbTkxYm1SY2JpQWdJQ0FnSUNBZ0lDQWdJSHdnZEhsd1pXOW1JR011Y21kaVhHNGdJQ0FnSUNBZ0lDQWdJQ0I4SUhSNWNHVnZaaUJqTG1OdmJHOXlNalUySUQwZ2FYTkNaeUEvSUdNdVltRmphMmR5YjNWdVpDQTZJR011Wm05eVpXZHliM1Z1WkR0Y2JpQWdJQ0FnSUNBZ0lDQnBaaUFvSVVGeWNtRjVMbWx6UVhKeVlYa29kbUZzS1NrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnY21WMGRYSnVJQ2htSUdGeklIUjVjR1Z2WmlCakxtSmhZMnRuY205MWJtUWdmQ0IwZVhCbGIyWWdZeTVtYjNKbFozSnZkVzVrS1M1allXeHNLRnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQmpMRnh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQjJZV3gxWlNCaGN5QnVkVzFpWlhKY2JpQWdJQ0FnSUNBZ0lDQWdJQ2s3WEc0Z0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJSE4zYVhSamFDQW9kbUZzTG14bGJtZDBhQ2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdZMkZ6WlNBeE9seHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCbUlEMGdhWE5DWnlBL0lHTXVZbWREYjJ4dmNqSTFOaUE2SUdNdVkyOXNiM0l5TlRZN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUFvWmlCaGN5QjBlWEJsYjJZZ1l5NWlaME52Ykc5eU1qVTJJSHdnZEhsd1pXOW1JR011WTI5c2IzSXlOVFlwS0haaGJGc3dYU2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmpZWE5sSURNNlhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUdZZ1BTQnBjMEpuSUQ4Z1l5NWlaMUpuWWlBNklHTXVjbWRpTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdZeTV5WjJJb2RtRnNXekJkTENCMllXeGJNVjBzSUhaaGJGc3lYU2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmtaV1poZFd4ME9seHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCc2IyZG5aWEl1WlhKeWIzSW9ZRTV2ZENCaElIWmhiR2xrSUdOdmJHOXlJRzl3ZEdsdmJqb2dKSHR2Y0hScGIyNTlZQ2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQnpkSGxzWlNoMElHRnpJSE4wY21sdVp5azdYRzRnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lDQWdablZ1WTNScGIyNGdZWEJ3YkhsVGRIbHNaU2gyT2lCdWRXMWlaWElnZkNCemRISnBibWNwT2lCMmIybGtJSHRjYmlBZ0lDQWdJQ0FnSUNCcFppQW9kSGx3Wlc5bUlIWWdQVDA5SUZ3aWJuVnRZbVZ5WENJcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUdNZ1BTQmpMbk4wZVd4bEtIWXBPMXh1SUNBZ0lDQWdJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmpJRDBnWTF0MklHRnpJR3RsZVc5bUlFTnZiRzl5YVhwbFQzQjBhVzl1YzEwZ1lYTWdVM1I1YkdWa1UzUnlhVzVuTzF4dUlDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0FnSUhOM2FYUmphQ0FvYjNCMGFXOXVLU0I3WEc0Z0lDQWdJQ0FnSUNBZ1kyRnpaU0JjSW1KblhDSTZYRzRnSUNBZ0lDQWdJQ0FnWTJGelpTQmNJbVpuWENJNlhHNGdJQ0FnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdZWEJ3YkhsRGIyeHZjaWgyWVd4MVpTQmhjeUJ1ZFcxaVpYSXBMblJsZUhRN1hHNGdJQ0FnSUNBZ0lDQWdZMkZ6WlNCY0luTjBlV3hsWENJNlhHNGdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb1FYSnlZWGt1YVhOQmNuSmhlU2gyWVd4MVpTa3BJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdkbUZzZFdVdVptOXlSV0ZqYUNoaGNIQnNlVk4wZVd4bEtUdGNiaUFnSUNBZ0lDQWdJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJR0Z3Y0d4NVUzUjViR1VvZG1Gc2RXVWdZWE1nYm5WdFltVnlJSHdnYzNSeWFXNW5LVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdJQ0FnSUhKbGRIVnliaUJqTG5SbGVIUTdYRzRnSUNBZ0lDQWdJQ0FnWkdWbVlYVnNkRHBjYmlBZ0lDQWdJQ0FnSUNBZ0lHeHZaMmRsY2k1bGNuSnZjaWhnVG05MElHRWdkbUZzYVdRZ2RHaGxiV1VnYjNCMGFXOXVPaUFrZTI5d2RHbHZibjFnS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQjBPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUM4dklHVnpiR2x1ZEMxa2FYTmhZbXhsTFc1bGVIUXRiR2x1WlNCQWRIbHdaWE5qY21sd2RDMWxjMnhwYm5RdmJtOHRkVzUxYzJWa0xYWmhjbk5jYmlBZ0lDQWdJSDBnWTJGMFkyZ2dLR1U2SUhWdWEyNXZkMjRwSUh0Y2JpQWdJQ0FnSUNBZ2JHOW5aMlZ5TG1WeWNtOXlLR0JGY25KdmNpQmhjSEJzZVdsdVp5QnpkSGxzWlRvZ0pIdHZjSFJwYjI1OUlIZHBkR2dnZG1Gc2RXVWdKSHQyWVd4MVpYMWdLVHRjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJSFI0ZER0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0I5WEc1Y2JpQWdJQ0JqYjI1emRDQnBibVJwZG1sa2RXRnNWR2hsYldVZ1BTQjBaVzF3YkdGMFpWdDBlWEJsSUdGeklHdGxlVzltSUZSb1pXMWxYVHRjYmlBZ0lDQnBaaUFvSVdsdVpHbDJhV1IxWVd4VWFHVnRaU0I4ZkNBaFQySnFaV04wTG10bGVYTW9hVzVrYVhacFpIVmhiRlJvWlcxbEtTNXNaVzVuZEdncElIdGNiaUFnSUNBZ0lISmxkSFZ5YmlCMFpYaDBPMXh1SUNBZ0lIMWNibHh1SUNBZ0lHeGxkQ0JoWTNSMVlXeFVhR1Z0WlRvZ1ZHaGxiV1ZQY0hScGIyNGdQU0JwYm1ScGRtbGtkV0ZzVkdobGJXVWdZWE1nVkdobGJXVlBjSFJwYjI0N1hHNWNiaUFnSUNCamIyNXpkQ0JzYjJkTVpYWmxiSE1nUFNCUFltcGxZM1F1WVhOemFXZHVLSHQ5TENCTWIyZE1aWFpsYkNrN1hHNGdJQ0FnYVdZZ0tFOWlhbVZqZEM1clpYbHpLR2x1WkdsMmFXUjFZV3hVYUdWdFpTbGJNRjBnYVc0Z2JHOW5UR1YyWld4ektWeHVJQ0FnSUNBZ1lXTjBkV0ZzVkdobGJXVWdQVnh1SUNBZ0lDQWdJQ0FvYVc1a2FYWnBaSFZoYkZSb1pXMWxJR0Z6SUZSb1pXMWxUM0IwYVc5dVFubE1iMmRNWlhabGJDbGJiRzluWjJWeVRHVjJaV3hkSUh4OElIdDlPMXh1WEc0Z0lDQWdjbVYwZFhKdUlFOWlhbVZqZEM1clpYbHpLR0ZqZEhWaGJGUm9aVzFsS1M1eVpXUjFZMlVvS0dGall6b2djM1J5YVc1bkxDQnJaWGs2SUhOMGNtbHVaeWtnUFQ0Z2UxeHVJQ0FnSUNBZ1kyOXVjM1FnZG1Gc0lEMGdLR0ZqZEhWaGJGUm9aVzFsSUdGeklGUm9aVzFsVDNCMGFXOXVLVnRyWlhrZ1lYTWdhMlY1YjJZZ1ZHaGxiV1ZQY0hScGIyNWRPMXh1SUNBZ0lDQWdhV1lnS0haaGJDbGNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlHRndjR3g1S0Z4dUlDQWdJQ0FnSUNBZ0lHRmpZeXhjYmlBZ0lDQWdJQ0FnSUNCclpYa2dZWE1nYTJWNWIyWWdWR2hsYldWUGNIUnBiMjRzWEc0Z0lDQWdJQ0FnSUNBZ2RtRnNJR0Z6WEc0Z0lDQWdJQ0FnSUNBZ0lDQjhJRzUxYldKbGNseHVJQ0FnSUNBZ0lDQWdJQ0FnZkNCYmJuVnRZbVZ5WFZ4dUlDQWdJQ0FnSUNBZ0lDQWdmQ0JiYm5WdFltVnlMQ0J1ZFcxaVpYSXNJRzUxYldKbGNsMWNiaUFnSUNBZ0lDQWdJQ0FnSUh3Z2JuVnRZbVZ5VzExY2JpQWdJQ0FnSUNBZ0lDQWdJSHdnYzNSeWFXNW5XMTFjYmlBZ0lDQWdJQ0FnS1R0Y2JpQWdJQ0FnSUhKbGRIVnliaUJoWTJNN1hHNGdJQ0FnZlN3Z2RHVjRkQ2s3WEc0Z0lIMWNibjFjYmlKZGZRPT0iLCJpbXBvcnQge1xuICBBbnN3ZXJzLFxuICBDaG9pY2UsXG4gIEZhbHN5LFxuICBJbml0aWFsUmV0dXJuVmFsdWUsXG4gIFByZXZDYWxsZXIsXG4gIFByb21wdE9iamVjdCxcbiAgUHJvbXB0VHlwZSxcbiAgVmFsdWVPckZ1bmMsXG59IGZyb20gXCJwcm9tcHRzXCI7XG5pbXBvcnQgcHJvbXB0cyBmcm9tIFwicHJvbXB0c1wiO1xuaW1wb3J0IHsgcGFyc2VBcmdzLCBQYXJzZUFyZ3NDb25maWcgfSBmcm9tIFwidXRpbFwiO1xuaW1wb3J0IHsgV3JpdGFibGUsIFJlYWRhYmxlIH0gZnJvbSBcInN0cmVhbVwiO1xuaW1wb3J0IHsgUGFyc2VBcmdzT3B0aW9uc0NvbmZpZywgUGFyc2VBcmdzUmVzdWx0IH0gZnJvbSBcIi4vdHlwZXNcIjtcbmltcG9ydCB7IExvZ2dpbmcgfSBmcm9tIFwiQGRlY2FmLXRzL2xvZ2dpbmdcIjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gUmVwcmVzZW50cyBhIHVzZXIgaW5wdXQgcHJvbXB0IHdpdGggdmFyaW91cyBjb25maWd1cmF0aW9uIG9wdGlvbnMuXG4gKiBAc3VtbWFyeSBUaGlzIGNsYXNzIHByb3ZpZGVzIGEgZmxleGlibGUgaW50ZXJmYWNlIGZvciBjcmVhdGluZyBhbmQgbWFuYWdpbmcgdXNlciBpbnB1dCBwcm9tcHRzLlxuICogSXQgaW1wbGVtZW50cyB0aGUgUHJvbXB0T2JqZWN0IGludGVyZmFjZSBmcm9tIHRoZSAncHJvbXB0cycgbGlicmFyeSBhbmQgb2ZmZXJzIG1ldGhvZHMgdG8gc2V0XG4gKiB2YXJpb3VzIHByb3BlcnRpZXMgb2YgdGhlIHByb21wdC4gVGhlIGNsYXNzIGFsc28gaW5jbHVkZXMgc3RhdGljIG1ldGhvZHMgZm9yIGNvbW1vbiBpbnB1dCBzY2VuYXJpb3NcbiAqIGFuZCBhcmd1bWVudCBwYXJzaW5nLlxuICpcbiAqIEB0ZW1wbGF0ZSBSIC0gVGhlIHR5cGUgb2YgdGhlIHByb21wdCBuYW1lLCBleHRlbmRpbmcgc3RyaW5nLlxuICpcbiAqIEBwYXJhbSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHByb21wdCwgdXNlZCBhcyB0aGUga2V5IGluIHRoZSByZXR1cm5lZCBhbnN3ZXJzIG9iamVjdC5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBVc2VySW5wdXQgfSBmcm9tICdAZGVjYWYtdHMvdXRpbHMnO1xuICpcbiAqIC8vIENyZWF0ZSBhIHNpbXBsZSB0ZXh0IGlucHV0XG4gKiBjb25zdCBuYW1lSW5wdXQgPSBuZXcgVXNlcklucHV0KCduYW1lJylcbiAqICAgLnNldE1lc3NhZ2UoJ1doYXQgaXMgeW91ciBuYW1lPycpXG4gKiAgIC5zZXRJbml0aWFsKCdVc2VyJyk7XG4gKlxuICogLy8gQ3JlYXRlIGEgbnVtYmVyIGlucHV0IHdpdGggdmFsaWRhdGlvblxuICogY29uc3QgYWdlSW5wdXQgPSBuZXcgVXNlcklucHV0KCdhZ2UnKVxuICogICAuc2V0VHlwZSgnbnVtYmVyJylcbiAqICAgLnNldE1lc3NhZ2UoJ0hvdyBvbGQgYXJlIHlvdT8nKVxuICogICAuc2V0TWluKDApXG4gKiAgIC5zZXRNYXgoMTIwKTtcbiAqXG4gKiAvLyBBc2sgZm9yIGlucHV0IGFuZCBwcm9jZXNzIHRoZSByZXN1bHRzXG4gKiBhc3luYyBmdW5jdGlvbiBnZXRVc2VySW5mbygpIHtcbiAqICAgY29uc3QgYW5zd2VycyA9IGF3YWl0IFVzZXJJbnB1dC5hc2soW25hbWVJbnB1dCwgYWdlSW5wdXRdKTtcbiAqICAgY29uc29sZS5sb2coYEhlbGxvICR7YW5zd2Vycy5uYW1lfSwgeW91IGFyZSAke2Fuc3dlcnMuYWdlfSB5ZWFycyBvbGQuYCk7XG4gKiB9XG4gKlxuICogZ2V0VXNlckluZm8oKTtcbiAqIGBgYFxuICpcbiAqIEBtZXJtYWlkXG4gKiBzZXF1ZW5jZURpYWdyYW1cbiAqICAgcGFydGljaXBhbnQgQ2xpZW50XG4gKiAgIHBhcnRpY2lwYW50IFVzZXJJbnB1dFxuICogICBwYXJ0aWNpcGFudCBQcm9tcHRMaWJyYXJ5XG4gKlxuICogICBDbGllbnQtPj5Vc2VySW5wdXQ6IG5ldyBVc2VySW5wdXQobmFtZSlcbiAqICAgQ2xpZW50LT4+VXNlcklucHV0OiBzZXRNZXNzYWdlKG1lc3NhZ2UpXG4gKiAgIENsaWVudC0+PlVzZXJJbnB1dDogc2V0VHlwZSh0eXBlKVxuICogICBDbGllbnQtPj5Vc2VySW5wdXQ6IHNldEluaXRpYWwoaW5pdGlhbClcbiAqICAgQ2xpZW50LT4+VXNlcklucHV0OiBPdGhlciBjb25maWd1cmF0aW9uIG1ldGhvZHNcbiAqXG4gKiAgIENsaWVudC0+PlVzZXJJbnB1dDogYXNrKClcbiAqICAgVXNlcklucHV0LT4+UHJvbXB0TGlicmFyeTogcHJvbXB0cyhxdWVzdGlvbilcbiAqICAgUHJvbXB0TGlicmFyeS0+PkNsaWVudDogRGlzcGxheSBwcm9tcHRcbiAqICAgQ2xpZW50LT4+UHJvbXB0TGlicmFyeTogVXNlciBwcm92aWRlcyBpbnB1dFxuICogICBQcm9tcHRMaWJyYXJ5LT4+VXNlcklucHV0OiBSZXR1cm4gYW5zd2Vyc1xuICogICBVc2VySW5wdXQtPj5DbGllbnQ6IFJldHVybiBwcm9jZXNzZWQgYW5zd2Vyc1xuICovXG5leHBvcnQgY2xhc3MgVXNlcklucHV0PFIgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmc+IGltcGxlbWVudHMgUHJvbXB0T2JqZWN0PFI+IHtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgbG9nZ2VyID0gTG9nZ2luZy5mb3IoVXNlcklucHV0KTtcbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgdHlwZSBvZiB0aGUgcHJvbXB0LlxuICAgKiBAc3VtbWFyeSBEZXRlcm1pbmVzIHRoZSBpbnB1dCBtZXRob2QgKGUuZy4sIHRleHQsIG51bWJlciwgY29uZmlybSkuXG4gICAqL1xuICB0eXBlOiBQcm9tcHRUeXBlIHwgRmFsc3kgfCBQcmV2Q2FsbGVyPFIsIFByb21wdFR5cGUgfCBGYWxzeT4gPSBcInRleHRcIjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBuYW1lIG9mIHRoZSBwcm9tcHQuXG4gICAqIEBzdW1tYXJ5IFVzZWQgYXMgdGhlIGtleSBpbiB0aGUgcmV0dXJuZWQgYW5zd2VycyBvYmplY3QuXG4gICAqL1xuICBuYW1lOiBWYWx1ZU9yRnVuYzxSPjtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBtZXNzYWdlIGRpc3BsYXllZCB0byB0aGUgdXNlci5cbiAgICogQHN1bW1hcnkgVGhlIHF1ZXN0aW9uIG9yIGluc3RydWN0aW9uIHByZXNlbnRlZCB0byB0aGUgdXNlci5cbiAgICovXG4gIG1lc3NhZ2U/OiBWYWx1ZU9yRnVuYzxzdHJpbmc+IHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIGluaXRpYWwgdmFsdWUgb2YgdGhlIHByb21wdC5cbiAgICogQHN1bW1hcnkgVGhlIGRlZmF1bHQgdmFsdWUgcHJlc2VudGVkIHRvIHRoZSB1c2VyLlxuICAgKi9cbiAgaW5pdGlhbD86XG4gICAgfCBJbml0aWFsUmV0dXJuVmFsdWVcbiAgICB8IFByZXZDYWxsZXI8UiwgSW5pdGlhbFJldHVyblZhbHVlIHwgUHJvbWlzZTxJbml0aWFsUmV0dXJuVmFsdWU+PlxuICAgIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIHN0eWxlIG9mIHRoZSBwcm9tcHQuXG4gICAqIEBzdW1tYXJ5IERldGVybWluZXMgdGhlIHZpc3VhbCBzdHlsZSBvZiB0aGUgcHJvbXB0LlxuICAgKi9cbiAgc3R5bGU/OiBzdHJpbmcgfCBQcmV2Q2FsbGVyPFIsIHN0cmluZyB8IEZhbHN5PiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBmb3JtYXQgZnVuY3Rpb24gZm9yIHRoZSBpbnB1dC5cbiAgICogQHN1bW1hcnkgQSBmdW5jdGlvbiB0byBmb3JtYXQgdGhlIHVzZXIncyBpbnB1dCBiZWZvcmUgaXQncyByZXR1cm5lZC5cbiAgICovXG4gIGZvcm1hdD86IFByZXZDYWxsZXI8Uiwgdm9pZD4gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgdmFsaWRhdGlvbiBmdW5jdGlvbiBmb3IgdGhlIGlucHV0LlxuICAgKiBAc3VtbWFyeSBBIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIHRoZSB1c2VyJ3MgaW5wdXQuXG4gICAqL1xuICB2YWxpZGF0ZT86XG4gICAgfCBQcmV2Q2FsbGVyPFIsIGJvb2xlYW4gfCBzdHJpbmcgfCBQcm9taXNlPGJvb2xlYW4gfCBzdHJpbmc+PlxuICAgIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIG9uU3RhdGUgY2FsbGJhY2sgZnVuY3Rpb24uXG4gICAqIEBzdW1tYXJ5IEEgZnVuY3Rpb24gY2FsbGVkIHdoZW4gdGhlIHN0YXRlIG9mIHRoZSBwcm9tcHQgY2hhbmdlcy5cbiAgICovXG4gIG9uU3RhdGU/OiBQcmV2Q2FsbGVyPFIsIHZvaWQ+IHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIG1pbmltdW0gdmFsdWUgZm9yIG51bWJlciBpbnB1dHMuXG4gICAqIEBzdW1tYXJ5IFRoZSBsb3dlc3QgbnVtYmVyIHRoZSB1c2VyIGNhbiBpbnB1dC5cbiAgICovXG4gIG1pbj86IG51bWJlciB8IFByZXZDYWxsZXI8UiwgbnVtYmVyIHwgRmFsc3k+IHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIG1heGltdW0gdmFsdWUgZm9yIG51bWJlciBpbnB1dHMuXG4gICAqIEBzdW1tYXJ5IFRoZSBoaWdoZXN0IG51bWJlciB0aGUgdXNlciBjYW4gaW5wdXQuXG4gICAqL1xuICBtYXg/OiBudW1iZXIgfCBQcmV2Q2FsbGVyPFIsIG51bWJlciB8IEZhbHN5PiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFdoZXRoZXIgdG8gYWxsb3cgZmxvYXQgdmFsdWVzIGZvciBudW1iZXIgaW5wdXRzLlxuICAgKiBAc3VtbWFyeSBJZiB0cnVlLCBhbGxvd3MgZGVjaW1hbCBudW1iZXJzLlxuICAgKi9cbiAgZmxvYXQ/OiBib29sZWFuIHwgUHJldkNhbGxlcjxSLCBib29sZWFuIHwgRmFsc3k+IHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIG51bWJlciBvZiBkZWNpbWFsIHBsYWNlcyB0byByb3VuZCB0byBmb3IgZmxvYXQgaW5wdXRzLlxuICAgKiBAc3VtbWFyeSBEZXRlcm1pbmVzIHRoZSBwcmVjaXNpb24gb2YgZmxvYXQgaW5wdXRzLlxuICAgKi9cbiAgcm91bmQ/OiBudW1iZXIgfCBQcmV2Q2FsbGVyPFIsIG51bWJlciB8IEZhbHN5PiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEluc3RydWN0aW9ucyBmb3IgdGhlIHVzZXIuXG4gICAqIEBzdW1tYXJ5IEFkZGl0aW9uYWwgZ3VpZGFuY2UgcHJvdmlkZWQgdG8gdGhlIHVzZXIuXG4gICAqL1xuICBpbnN0cnVjdGlvbnM/OiBzdHJpbmcgfCBib29sZWFuIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIGluY3JlbWVudCB2YWx1ZSBmb3IgbnVtYmVyIGlucHV0cy5cbiAgICogQHN1bW1hcnkgVGhlIHN0ZXAgc2l6ZSB3aGVuIGluY3JlYXNpbmcgb3IgZGVjcmVhc2luZyB0aGUgbnVtYmVyLlxuICAgKi9cbiAgaW5jcmVtZW50PzogbnVtYmVyIHwgUHJldkNhbGxlcjxSLCBudW1iZXIgfCBGYWxzeT4gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgc2VwYXJhdG9yIGZvciBsaXN0IGlucHV0cy5cbiAgICogQHN1bW1hcnkgVGhlIGNoYXJhY3RlciB1c2VkIHRvIHNlcGFyYXRlIGxpc3QgaXRlbXMuXG4gICAqL1xuICBzZXBhcmF0b3I/OiBzdHJpbmcgfCBQcmV2Q2FsbGVyPFIsIHN0cmluZyB8IEZhbHN5PiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBhY3RpdmUgb3B0aW9uIHN0eWxlIGZvciBzZWxlY3QgaW5wdXRzLlxuICAgKiBAc3VtbWFyeSBUaGUgc3R5bGUgYXBwbGllZCB0byB0aGUgY3VycmVudGx5IHNlbGVjdGVkIG9wdGlvbi5cbiAgICovXG4gIGFjdGl2ZT86IHN0cmluZyB8IFByZXZDYWxsZXI8Uiwgc3RyaW5nIHwgRmFsc3k+IHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIGluYWN0aXZlIG9wdGlvbiBzdHlsZSBmb3Igc2VsZWN0IGlucHV0cy5cbiAgICogQHN1bW1hcnkgVGhlIHN0eWxlIGFwcGxpZWQgdG8gbm9uLXNlbGVjdGVkIG9wdGlvbnMuXG4gICAqL1xuICBpbmFjdGl2ZT86IHN0cmluZyB8IFByZXZDYWxsZXI8Uiwgc3RyaW5nIHwgRmFsc3k+IHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIGF2YWlsYWJsZSBjaG9pY2VzIGZvciBzZWxlY3QsIG11bHRpc2VsZWN0LCBvciBhdXRvY29tcGxldGUgaW5wdXRzLlxuICAgKiBAc3VtbWFyeSBBbiBhcnJheSBvZiBvcHRpb25zIHRoYXQgdGhlIHVzZXIgY2FuIHNlbGVjdCBmcm9tIGluIGNob2ljZS1iYXNlZCBwcm9tcHRzLlxuICAgKi9cbiAgY2hvaWNlcz86IENob2ljZVtdIHwgUHJldkNhbGxlcjxSLCBDaG9pY2VbXSB8IEZhbHN5PiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBoaW50IHRleHQgZm9yIHRoZSBwcm9tcHQuXG4gICAqIEBzdW1tYXJ5IEFkZGl0aW9uYWwgaW5mb3JtYXRpb24gZGlzcGxheWVkIHRvIHRoZSB1c2VyLlxuICAgKi9cbiAgaGludD86IHN0cmluZyB8IFByZXZDYWxsZXI8Uiwgc3RyaW5nIHwgRmFsc3k+IHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIHdhcm5pbmcgdGV4dCBmb3IgdGhlIHByb21wdC5cbiAgICogQHN1bW1hcnkgQSB3YXJuaW5nIG1lc3NhZ2UgZGlzcGxheWVkIHRvIHRoZSB1c2VyLlxuICAgKi9cbiAgd2Fybj86IHN0cmluZyB8IFByZXZDYWxsZXI8Uiwgc3RyaW5nIHwgRmFsc3k+IHwgdW5kZWZpbmVkO1xuXG4gIHN1Z2dlc3Q/OiAoKGlucHV0OiBhbnksIGNob2ljZXM6IENob2ljZVtdKSA9PiBQcm9taXNlPGFueT4pIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIGxpbWl0IGZvciBsaXN0IGlucHV0cy5cbiAgICogQHN1bW1hcnkgVGhlIG1heGltdW0gbnVtYmVyIG9mIGl0ZW1zIHRoYXQgY2FuIGJlIHNlbGVjdGVkLlxuICAgKi9cbiAgbGltaXQ/OiBudW1iZXIgfCBQcmV2Q2FsbGVyPFIsIG51bWJlciB8IEZhbHN5PiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBtYXNrIGZvciBwYXNzd29yZCBpbnB1dHMuXG4gICAqIEBzdW1tYXJ5IFRoZSBjaGFyYWN0ZXIgdXNlZCB0byBoaWRlIHRoZSB1c2VyJ3MgaW5wdXQuXG4gICAqL1xuICBtYXNrPzogc3RyaW5nIHwgUHJldkNhbGxlcjxSLCBzdHJpbmcgfCBGYWxzeT4gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgc3Rkb3V0IHN0cmVhbSBmb3IgdGhlIHByb21wdC5cbiAgICogQHN1bW1hcnkgVGhlIG91dHB1dCBzdHJlYW0gdXNlZCBieSB0aGUgcHJvbXB0LlxuICAgKi9cbiAgc3Rkb3V0PzogV3JpdGFibGUgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgc3RkaW4gc3RyZWFtIGZvciB0aGUgcHJvbXB0LlxuICAgKiBAc3VtbWFyeSBUaGUgaW5wdXQgc3RyZWFtIHVzZWQgYnkgdGhlIHByb21wdC5cbiAgICovXG4gIHN0ZGluPzogUmVhZGFibGUgfCB1bmRlZmluZWQ7XG5cbiAgY29uc3RydWN0b3IobmFtZTogVmFsdWVPckZ1bmM8Uj4pIHtcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBTZXRzIHRoZSB0eXBlIG9mIHRoZSBwcm9tcHQuXG4gICAqIEBzdW1tYXJ5IENvbmZpZ3VyZXMgdGhlIGlucHV0IG1ldGhvZCBmb3IgdGhlIHByb21wdC5cbiAgICpcbiAgICogQHBhcmFtIHR5cGUgLSBUaGUgdHlwZSBvZiB0aGUgcHJvbXB0LlxuICAgKiBAcmV0dXJucyBUaGlzIFVzZXJJbnB1dCBpbnN0YW5jZSBmb3IgbWV0aG9kIGNoYWluaW5nLlxuICAgKi9cbiAgc2V0VHlwZSh0eXBlOiBQcm9tcHRUeXBlIHwgRmFsc3kgfCBQcmV2Q2FsbGVyPFIsIFByb21wdFR5cGUgfCBGYWxzeT4pOiB0aGlzIHtcbiAgICBVc2VySW5wdXQubG9nZ2VyLnZlcmJvc2UoYFNldHRpbmcgdHlwZSB0bzogJHt0eXBlfWApO1xuICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFNldHMgdGhlIG1lc3NhZ2Ugb2YgdGhlIHByb21wdC5cbiAgICogQHN1bW1hcnkgQ29uZmlndXJlcyB0aGUgcXVlc3Rpb24gb3IgaW5zdHJ1Y3Rpb24gcHJlc2VudGVkIHRvIHRoZSB1c2VyLlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgbWVzc2FnZSB0byBiZSBkaXNwbGF5ZWQuXG4gICAqIEByZXR1cm5zIFRoaXMgVXNlcklucHV0IGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmcuXG4gICAqL1xuICBzZXRNZXNzYWdlKHZhbHVlOiBWYWx1ZU9yRnVuYzxzdHJpbmc+IHwgdW5kZWZpbmVkKTogdGhpcyB7XG4gICAgVXNlcklucHV0LmxvZ2dlci52ZXJib3NlKGBTZXR0aW5nIG1lc3NhZ2UgdG86ICR7dmFsdWV9YCk7XG4gICAgdGhpcy5tZXNzYWdlID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFNldHMgdGhlIGluaXRpYWwgdmFsdWUgb2YgdGhlIHByb21wdC5cbiAgICogQHN1bW1hcnkgQ29uZmlndXJlcyB0aGUgZGVmYXVsdCB2YWx1ZSBwcmVzZW50ZWQgdG8gdGhlIHVzZXIuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBpbml0aWFsIHZhbHVlLlxuICAgKiBAcmV0dXJucyBUaGlzIFVzZXJJbnB1dCBpbnN0YW5jZSBmb3IgbWV0aG9kIGNoYWluaW5nLlxuICAgKi9cbiAgc2V0SW5pdGlhbChcbiAgICB2YWx1ZTpcbiAgICAgIHwgSW5pdGlhbFJldHVyblZhbHVlXG4gICAgICB8IFByZXZDYWxsZXI8UiwgSW5pdGlhbFJldHVyblZhbHVlIHwgUHJvbWlzZTxJbml0aWFsUmV0dXJuVmFsdWU+PlxuICAgICAgfCB1bmRlZmluZWRcbiAgKTogdGhpcyB7XG4gICAgVXNlcklucHV0LmxvZ2dlci52ZXJib3NlKGBTZXR0aW5nIGluaXRpYWwgdmFsdWUgdG86ICR7dmFsdWV9YCk7XG4gICAgdGhpcy5pbml0aWFsID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFNldHMgdGhlIHN0eWxlIG9mIHRoZSBwcm9tcHQuXG4gICAqIEBzdW1tYXJ5IENvbmZpZ3VyZXMgdGhlIHZpc3VhbCBzdHlsZSBvZiB0aGUgcHJvbXB0LlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgc3R5bGUgdG8gYmUgYXBwbGllZC5cbiAgICogQHJldHVybnMgVGhpcyBVc2VySW5wdXQgaW5zdGFuY2UgZm9yIG1ldGhvZCBjaGFpbmluZy5cbiAgICovXG4gIHNldFN0eWxlKHZhbHVlOiBzdHJpbmcgfCBQcmV2Q2FsbGVyPFIsIHN0cmluZyB8IEZhbHN5PiB8IHVuZGVmaW5lZCk6IHRoaXMge1xuICAgIFVzZXJJbnB1dC5sb2dnZXIudmVyYm9zZShgU2V0dGluZyBzdHlsZSB0bzogJHt2YWx1ZX1gKTtcbiAgICB0aGlzLnN0eWxlID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFNldHMgdGhlIGZvcm1hdCBmdW5jdGlvbiBvZiB0aGUgcHJvbXB0LlxuICAgKiBAc3VtbWFyeSBDb25maWd1cmVzIGEgZnVuY3Rpb24gdG8gZm9ybWF0IHRoZSB1c2VyJ3MgaW5wdXQgYmVmb3JlIGl0J3MgcmV0dXJuZWQuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBmb3JtYXQgZnVuY3Rpb24uXG4gICAqIEByZXR1cm5zIFRoaXMgVXNlcklucHV0IGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmcuXG4gICAqL1xuICBzZXRGb3JtYXQodmFsdWU6IFByZXZDYWxsZXI8Uiwgdm9pZD4gfCB1bmRlZmluZWQpOiB0aGlzIHtcbiAgICBVc2VySW5wdXQubG9nZ2VyLnZlcmJvc2UoYFNldHRpbmcgZm9ybWF0IGZ1bmN0aW9uYCk7XG4gICAgdGhpcy5mb3JtYXQgPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gU2V0cyB0aGUgdmFsaWRhdGlvbiBmdW5jdGlvbiBvZiB0aGUgcHJvbXB0LlxuICAgKiBAc3VtbWFyeSBDb25maWd1cmVzIGEgZnVuY3Rpb24gdG8gdmFsaWRhdGUgdGhlIHVzZXIncyBpbnB1dC5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbGlkYXRpb24gZnVuY3Rpb24uXG4gICAqIEByZXR1cm5zIFRoaXMgVXNlcklucHV0IGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmcuXG4gICAqL1xuICBzZXRWYWxpZGF0ZShcbiAgICB2YWx1ZTpcbiAgICAgIHwgUHJldkNhbGxlcjxSLCBib29sZWFuIHwgc3RyaW5nIHwgUHJvbWlzZTxib29sZWFuIHwgc3RyaW5nPj5cbiAgICAgIHwgdW5kZWZpbmVkXG4gICk6IHRoaXMge1xuICAgIFVzZXJJbnB1dC5sb2dnZXIudmVyYm9zZShgU2V0dGluZyB2YWxpZGF0ZSBmdW5jdGlvbmApO1xuICAgIHRoaXMudmFsaWRhdGUgPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gU2V0cyB0aGUgb25TdGF0ZSBjYWxsYmFjayBvZiB0aGUgcHJvbXB0LlxuICAgKiBAc3VtbWFyeSBDb25maWd1cmVzIGEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gdGhlIHN0YXRlIG9mIHRoZSBwcm9tcHQgY2hhbmdlcy5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gVGhlIG9uU3RhdGUgY2FsbGJhY2sgZnVuY3Rpb24uXG4gICAqIEByZXR1cm5zIFRoaXMgVXNlcklucHV0IGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmcuXG4gICAqL1xuICBzZXRPblN0YXRlKHZhbHVlOiBQcmV2Q2FsbGVyPFIsIHZvaWQ+IHwgdW5kZWZpbmVkKTogdGhpcyB7XG4gICAgVXNlcklucHV0LmxvZ2dlci52ZXJib3NlKGBTZXR0aW5nIG9uU3RhdGUgY2FsbGJhY2tgKTtcbiAgICB0aGlzLm9uU3RhdGUgPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gU2V0cyB0aGUgbWluaW11bSB2YWx1ZSBmb3IgbnVtYmVyIGlucHV0cy5cbiAgICogQHN1bW1hcnkgQ29uZmlndXJlcyB0aGUgbG93ZXN0IG51bWJlciB0aGUgdXNlciBjYW4gaW5wdXQuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBtaW5pbXVtIHZhbHVlLlxuICAgKiBAcmV0dXJucyBUaGlzIFVzZXJJbnB1dCBpbnN0YW5jZSBmb3IgbWV0aG9kIGNoYWluaW5nLlxuICAgKi9cbiAgc2V0TWluKHZhbHVlOiBudW1iZXIgfCBQcmV2Q2FsbGVyPFIsIG51bWJlciB8IEZhbHN5PiB8IHVuZGVmaW5lZCk6IHRoaXMge1xuICAgIFVzZXJJbnB1dC5sb2dnZXIudmVyYm9zZShgU2V0dGluZyBtaW4gdmFsdWUgdG86ICR7dmFsdWV9YCk7XG4gICAgdGhpcy5taW4gPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gU2V0cyB0aGUgbWF4aW11bSB2YWx1ZSBmb3IgbnVtYmVyIGlucHV0cy5cbiAgICogQHN1bW1hcnkgQ29uZmlndXJlcyB0aGUgaGlnaGVzdCBudW1iZXIgdGhlIHVzZXIgY2FuIGlucHV0LlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgbWF4aW11bSB2YWx1ZS5cbiAgICogQHJldHVybnMgVGhpcyBVc2VySW5wdXQgaW5zdGFuY2UgZm9yIG1ldGhvZCBjaGFpbmluZy5cbiAgICovXG4gIHNldE1heCh2YWx1ZTogbnVtYmVyIHwgUHJldkNhbGxlcjxSLCBudW1iZXIgfCBGYWxzeT4gfCB1bmRlZmluZWQpOiB0aGlzIHtcbiAgICBVc2VySW5wdXQubG9nZ2VyLnZlcmJvc2UoYFNldHRpbmcgbWF4IHZhbHVlIHRvOiAke3ZhbHVlfWApO1xuICAgIHRoaXMubWF4ID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFNldHMgd2hldGhlciB0byBhbGxvdyBmbG9hdCB2YWx1ZXMgZm9yIG51bWJlciBpbnB1dHMuXG4gICAqIEBzdW1tYXJ5IENvbmZpZ3VyZXMgd2hldGhlciBkZWNpbWFsIG51bWJlcnMgYXJlIGFsbG93ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFdoZXRoZXIgdG8gYWxsb3cgZmxvYXQgdmFsdWVzLlxuICAgKiBAcmV0dXJucyBUaGlzIFVzZXJJbnB1dCBpbnN0YW5jZSBmb3IgbWV0aG9kIGNoYWluaW5nLlxuICAgKi9cbiAgc2V0RmxvYXQodmFsdWU6IGJvb2xlYW4gfCBQcmV2Q2FsbGVyPFIsIGJvb2xlYW4gfCBGYWxzeT4gfCB1bmRlZmluZWQpOiB0aGlzIHtcbiAgICBVc2VySW5wdXQubG9nZ2VyLnZlcmJvc2UoYFNldHRpbmcgZmxvYXQgdG86ICR7dmFsdWV9YCk7XG4gICAgdGhpcy5mbG9hdCA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBTZXRzIHRoZSBudW1iZXIgb2YgZGVjaW1hbCBwbGFjZXMgdG8gcm91bmQgdG8gZm9yIGZsb2F0IGlucHV0cy5cbiAgICogQHN1bW1hcnkgQ29uZmlndXJlcyB0aGUgcHJlY2lzaW9uIG9mIGZsb2F0IGlucHV0cy5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gVGhlIG51bWJlciBvZiBkZWNpbWFsIHBsYWNlcy5cbiAgICogQHJldHVybnMgVGhpcyBVc2VySW5wdXQgaW5zdGFuY2UgZm9yIG1ldGhvZCBjaGFpbmluZy5cbiAgICovXG4gIHNldFJvdW5kKHZhbHVlOiBudW1iZXIgfCBQcmV2Q2FsbGVyPFIsIG51bWJlciB8IEZhbHN5PiB8IHVuZGVmaW5lZCk6IHRoaXMge1xuICAgIFVzZXJJbnB1dC5sb2dnZXIudmVyYm9zZShgU2V0dGluZyByb3VuZCB0bzogJHt2YWx1ZX1gKTtcbiAgICB0aGlzLnJvdW5kID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFNldHMgdGhlIGluc3RydWN0aW9ucyBmb3IgdGhlIHVzZXIuXG4gICAqIEBzdW1tYXJ5IENvbmZpZ3VyZXMgYWRkaXRpb25hbCBndWlkYW5jZSBwcm92aWRlZCB0byB0aGUgdXNlci5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gVGhlIGluc3RydWN0aW9ucy5cbiAgICogQHJldHVybnMgVGhpcyBVc2VySW5wdXQgaW5zdGFuY2UgZm9yIG1ldGhvZCBjaGFpbmluZy5cbiAgICovXG4gIHNldEluc3RydWN0aW9ucyh2YWx1ZTogc3RyaW5nIHwgYm9vbGVhbiB8IHVuZGVmaW5lZCk6IHRoaXMge1xuICAgIFVzZXJJbnB1dC5sb2dnZXIudmVyYm9zZShgU2V0dGluZyBpbnN0cnVjdGlvbnMgdG86ICR7dmFsdWV9YCk7XG4gICAgdGhpcy5pbnN0cnVjdGlvbnMgPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gU2V0cyB0aGUgaW5jcmVtZW50IHZhbHVlIGZvciBudW1iZXIgaW5wdXRzLlxuICAgKiBAc3VtbWFyeSBDb25maWd1cmVzIHRoZSBzdGVwIHNpemUgd2hlbiBpbmNyZWFzaW5nIG9yIGRlY3JlYXNpbmcgdGhlIG51bWJlci5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gVGhlIGluY3JlbWVudCB2YWx1ZS5cbiAgICogQHJldHVybnMgVGhpcyBVc2VySW5wdXQgaW5zdGFuY2UgZm9yIG1ldGhvZCBjaGFpbmluZy5cbiAgICovXG4gIHNldEluY3JlbWVudChcbiAgICB2YWx1ZTogbnVtYmVyIHwgUHJldkNhbGxlcjxSLCBudW1iZXIgfCBGYWxzeT4gfCB1bmRlZmluZWRcbiAgKTogdGhpcyB7XG4gICAgVXNlcklucHV0LmxvZ2dlci52ZXJib3NlKGBTZXR0aW5nIGluY3JlbWVudCB0bzogJHt2YWx1ZX1gKTtcbiAgICB0aGlzLmluY3JlbWVudCA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBTZXRzIHRoZSBzZXBhcmF0b3IgZm9yIGxpc3QgaW5wdXRzLlxuICAgKiBAc3VtbWFyeSBDb25maWd1cmVzIHRoZSBjaGFyYWN0ZXIgdXNlZCB0byBzZXBhcmF0ZSBsaXN0IGl0ZW1zLlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgc2VwYXJhdG9yIGNoYXJhY3Rlci5cbiAgICogQHJldHVybnMgVGhpcyBVc2VySW5wdXQgaW5zdGFuY2UgZm9yIG1ldGhvZCBjaGFpbmluZy5cbiAgICovXG4gIHNldFNlcGFyYXRvcihcbiAgICB2YWx1ZTogc3RyaW5nIHwgUHJldkNhbGxlcjxSLCBzdHJpbmcgfCBGYWxzeT4gfCB1bmRlZmluZWRcbiAgKTogdGhpcyB7XG4gICAgVXNlcklucHV0LmxvZ2dlci52ZXJib3NlKGBTZXR0aW5nIHNlcGFyYXRvciB0bzogJHt2YWx1ZX1gKTtcbiAgICB0aGlzLnNlcGFyYXRvciA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBTZXRzIHRoZSBhY3RpdmUgb3B0aW9uIHN0eWxlIGZvciBzZWxlY3QgaW5wdXRzLlxuICAgKiBAc3VtbWFyeSBDb25maWd1cmVzIHRoZSBzdHlsZSBhcHBsaWVkIHRvIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgb3B0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgYWN0aXZlIG9wdGlvbiBzdHlsZS5cbiAgICogQHJldHVybnMgVGhpcyBVc2VySW5wdXQgaW5zdGFuY2UgZm9yIG1ldGhvZCBjaGFpbmluZy5cbiAgICovXG4gIHNldEFjdGl2ZSh2YWx1ZTogc3RyaW5nIHwgUHJldkNhbGxlcjxSLCBzdHJpbmcgfCBGYWxzeT4gfCB1bmRlZmluZWQpOiB0aGlzIHtcbiAgICBVc2VySW5wdXQubG9nZ2VyLnZlcmJvc2UoYFNldHRpbmcgYWN0aXZlIHN0eWxlIHRvOiAke3ZhbHVlfWApO1xuICAgIHRoaXMuYWN0aXZlID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFNldHMgdGhlIGluYWN0aXZlIG9wdGlvbiBzdHlsZSBmb3Igc2VsZWN0IGlucHV0cy5cbiAgICogQHN1bW1hcnkgQ29uZmlndXJlcyB0aGUgc3R5bGUgYXBwbGllZCB0byBub24tc2VsZWN0ZWQgb3B0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gVGhlIGluYWN0aXZlIG9wdGlvbiBzdHlsZS5cbiAgICogQHJldHVybnMgVGhpcyBVc2VySW5wdXQgaW5zdGFuY2UgZm9yIG1ldGhvZCBjaGFpbmluZy5cbiAgICovXG4gIHNldEluYWN0aXZlKHZhbHVlOiBzdHJpbmcgfCBQcmV2Q2FsbGVyPFIsIHN0cmluZyB8IEZhbHN5PiB8IHVuZGVmaW5lZCk6IHRoaXMge1xuICAgIFVzZXJJbnB1dC5sb2dnZXIudmVyYm9zZShgU2V0dGluZyBpbmFjdGl2ZSBzdHlsZSB0bzogJHt2YWx1ZX1gKTtcbiAgICB0aGlzLmluYWN0aXZlID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFNldHMgdGhlIGNob2ljZXMgZm9yIHNlbGVjdCwgbXVsdGlzZWxlY3QsIG9yIGF1dG9jb21wbGV0ZSBpbnB1dHMuXG4gICAqIEBzdW1tYXJ5IENvbmZpZ3VyZXMgdGhlIGF2YWlsYWJsZSBvcHRpb25zIHRoYXQgdGhlIHVzZXIgY2FuIHNlbGVjdCBmcm9tIGluIGNob2ljZS1iYXNlZCBwcm9tcHRzLlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgYXJyYXkgb2YgY2hvaWNlcyBvciBhIGZ1bmN0aW9uIHRvIGRldGVybWluZSB0aGUgY2hvaWNlcy5cbiAgICogQHJldHVybnMgVGhpcyBVc2VySW5wdXQgaW5zdGFuY2UgZm9yIG1ldGhvZCBjaGFpbmluZy5cbiAgICovXG4gIHNldENob2ljZXMoXG4gICAgdmFsdWU6IENob2ljZVtdIHwgUHJldkNhbGxlcjxSLCBDaG9pY2VbXSB8IEZhbHN5PiB8IHVuZGVmaW5lZFxuICApOiB0aGlzIHtcbiAgICBVc2VySW5wdXQubG9nZ2VyLnZlcmJvc2UoYFNldHRpbmcgY2hvaWNlczogJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9YCk7XG4gICAgdGhpcy5jaG9pY2VzID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFNldHMgdGhlIGhpbnQgdGV4dCBmb3IgdGhlIHByb21wdC5cbiAgICogQHN1bW1hcnkgQ29uZmlndXJlcyBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGRpc3BsYXllZCB0byB0aGUgdXNlci5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gVGhlIGhpbnQgdGV4dC5cbiAgICogQHJldHVybnMgVGhpcyBVc2VySW5wdXQgaW5zdGFuY2UgZm9yIG1ldGhvZCBjaGFpbmluZy5cbiAgICovXG4gIHNldEhpbnQodmFsdWU6IHN0cmluZyB8IFByZXZDYWxsZXI8Uiwgc3RyaW5nIHwgRmFsc3k+IHwgdW5kZWZpbmVkKTogdGhpcyB7XG4gICAgVXNlcklucHV0LmxvZ2dlci52ZXJib3NlKGBTZXR0aW5nIGhpbnQgdG86ICR7dmFsdWV9YCk7XG4gICAgdGhpcy5oaW50ID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFNldHMgdGhlIHdhcm5pbmcgdGV4dCBmb3IgdGhlIHByb21wdC5cbiAgICogQHN1bW1hcnkgQ29uZmlndXJlcyBhIHdhcm5pbmcgbWVzc2FnZSBkaXNwbGF5ZWQgdG8gdGhlIHVzZXIuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB3YXJuaW5nIHRleHQuXG4gICAqIEByZXR1cm5zIFRoaXMgVXNlcklucHV0IGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmcuXG4gICAqL1xuICBzZXRXYXJuKHZhbHVlOiBzdHJpbmcgfCBQcmV2Q2FsbGVyPFIsIHN0cmluZyB8IEZhbHN5PiB8IHVuZGVmaW5lZCk6IHRoaXMge1xuICAgIFVzZXJJbnB1dC5sb2dnZXIudmVyYm9zZShgU2V0dGluZyB3YXJuIHRvOiAke3ZhbHVlfWApO1xuICAgIHRoaXMud2FybiA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBTZXRzIHRoZSBzdWdnZXN0aW9uIGZ1bmN0aW9uIGZvciBhdXRvY29tcGxldGUgaW5wdXRzLlxuICAgKiBAc3VtbWFyeSBDb25maWd1cmVzIGEgZnVuY3Rpb24gdGhhdCBwcm92aWRlcyBzdWdnZXN0aW9ucyBiYXNlZCBvbiB0aGUgdXNlcidzIGlucHV0IGFuZCBhdmFpbGFibGUgY2hvaWNlcy5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gQSBmdW5jdGlvbiB0aGF0IHRha2VzIHRoZSBjdXJyZW50IGlucHV0IGFuZCBhdmFpbGFibGUgY2hvaWNlcyBhbmQgcmV0dXJucyBhIFByb21pc2UgcmVzb2x2aW5nIHRvIHN1Z2dlc3Rpb25zLlxuICAgKiBAcmV0dXJucyBUaGlzIFVzZXJJbnB1dCBpbnN0YW5jZSBmb3IgbWV0aG9kIGNoYWluaW5nLlxuICAgKi9cbiAgc2V0U3VnZ2VzdChcbiAgICB2YWx1ZTogKChpbnB1dDogYW55LCBjaG9pY2VzOiBDaG9pY2VbXSkgPT4gUHJvbWlzZTxhbnk+KSB8IHVuZGVmaW5lZFxuICApOiB0aGlzIHtcbiAgICBVc2VySW5wdXQubG9nZ2VyLnZlcmJvc2UoYFNldHRpbmcgc3VnZ2VzdCBmdW5jdGlvbmApO1xuICAgIHRoaXMuc3VnZ2VzdCA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBTZXRzIHRoZSBsaW1pdCBmb3IgbGlzdCBpbnB1dHMuXG4gICAqIEBzdW1tYXJ5IENvbmZpZ3VyZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGl0ZW1zIHRoYXQgY2FuIGJlIHNlbGVjdGVkIGluIGxpc3QtdHlwZSBwcm9tcHRzLlxuICAgKiBAdGVtcGxhdGUgUiAtIFRoZSB0eXBlIG9mIHRoZSBwcm9tcHQgbmFtZSwgZXh0ZW5kaW5nIHN0cmluZy5cbiAgICogQHBhcmFtIHZhbHVlIC0gVGhlIG1heGltdW0gbnVtYmVyIG9mIGl0ZW1zIHRoYXQgY2FuIGJlIHNlbGVjdGVkLCBvciBhIGZ1bmN0aW9uIHRvIGRldGVybWluZSB0aGlzIHZhbHVlLlxuICAgKiBAcmV0dXJuIFRoaXMgVXNlcklucHV0IGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmcuXG4gICAqL1xuICBzZXRMaW1pdCh2YWx1ZTogbnVtYmVyIHwgUHJldkNhbGxlcjxSLCBudW1iZXIgfCBGYWxzeT4gfCB1bmRlZmluZWQpOiB0aGlzIHtcbiAgICBVc2VySW5wdXQubG9nZ2VyLnZlcmJvc2UoYFNldHRpbmcgbGltaXQgdG86ICR7dmFsdWV9YCk7XG4gICAgdGhpcy5saW1pdCA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBTZXRzIHRoZSBtYXNrIGZvciBwYXNzd29yZCBpbnB1dHMuXG4gICAqIEBzdW1tYXJ5IENvbmZpZ3VyZXMgdGhlIGNoYXJhY3RlciB1c2VkIHRvIGhpZGUgdGhlIHVzZXIncyBpbnB1dCBpbiBwYXNzd29yZC10eXBlIHByb21wdHMuXG4gICAqIEB0ZW1wbGF0ZSBSIC0gVGhlIHR5cGUgb2YgdGhlIHByb21wdCBuYW1lLCBleHRlbmRpbmcgc3RyaW5nLlxuICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgY2hhcmFjdGVyIHVzZWQgdG8gbWFzayB0aGUgaW5wdXQsIG9yIGEgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIHRoaXMgdmFsdWUuXG4gICAqIEByZXR1cm4gVGhpcyBVc2VySW5wdXQgaW5zdGFuY2UgZm9yIG1ldGhvZCBjaGFpbmluZy5cbiAgICovXG4gIHNldE1hc2sodmFsdWU6IHN0cmluZyB8IFByZXZDYWxsZXI8Uiwgc3RyaW5nIHwgRmFsc3k+IHwgdW5kZWZpbmVkKTogdGhpcyB7XG4gICAgVXNlcklucHV0LmxvZ2dlci52ZXJib3NlKGBTZXR0aW5nIG1hc2sgdG86ICR7dmFsdWV9YCk7XG4gICAgdGhpcy5tYXNrID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFNldHMgdGhlIHN0ZG91dCBzdHJlYW0gZm9yIHRoZSBwcm9tcHQuXG4gICAqIEBzdW1tYXJ5IENvbmZpZ3VyZXMgdGhlIG91dHB1dCBzdHJlYW0gdXNlZCBieSB0aGUgcHJvbXB0IGZvciBkaXNwbGF5aW5nIG1lc3NhZ2VzIGFuZCByZXN1bHRzLlxuICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgV3JpdGFibGUgc3RyZWFtIHRvIGJlIHVzZWQgYXMgc3Rkb3V0LlxuICAgKiBAcmV0dXJuIFRoaXMgVXNlcklucHV0IGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmcuXG4gICAqL1xuICBzZXRTdGRvdXQodmFsdWU6IFdyaXRhYmxlIHwgdW5kZWZpbmVkKTogdGhpcyB7XG4gICAgVXNlcklucHV0LmxvZ2dlci52ZXJib3NlKGBTZXR0aW5nIHN0ZG91dCBzdHJlYW1gKTtcbiAgICB0aGlzLnN0ZG91dCA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gU2V0cyB0aGUgc3RkaW4gc3RyZWFtIGZvciB0aGUgcHJvbXB0LlxuICAgKiBAc3VtbWFyeSBDb25maWd1cmVzIHRoZSBpbnB1dCBzdHJlYW0gdXNlZCBieSB0aGUgcHJvbXB0IGZvciByZWNlaXZpbmcgdXNlciBpbnB1dC5cbiAgICogQHBhcmFtIHZhbHVlIC0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBiZSB1c2VkIGFzIHN0ZGluLlxuICAgKiBAcmV0dXJuIFRoaXMgVXNlcklucHV0IGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmcuXG4gICAqL1xuICBzZXRTdGRpbih2YWx1ZTogUmVhZGFibGUgfCB1bmRlZmluZWQpOiB0aGlzIHtcbiAgICB0aGlzLnN0ZGluID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEFza3MgdGhlIHVzZXIgZm9yIGlucHV0IGJhc2VkIG9uIHRoZSBjdXJyZW50IFVzZXJJbnB1dCBjb25maWd1cmF0aW9uLlxuICAgKiBAc3VtbWFyeSBQcm9tcHRzIHRoZSB1c2VyIGFuZCByZXR1cm5zIHRoZWlyIHJlc3BvbnNlIGFzIGEgc2luZ2xlIHZhbHVlLlxuICAgKiBAdGVtcGxhdGUgUiAtIFRoZSB0eXBlIG9mIHRoZSBwcm9tcHQgbmFtZSwgZXh0ZW5kaW5nIHN0cmluZy5cbiAgICogQHJldHVybiBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgdXNlcidzIGFuc3dlci5cbiAgICovXG4gIGFzeW5jIGFzaygpIHtcbiAgICByZXR1cm4gKGF3YWl0IFVzZXJJbnB1dC5hc2sodGhpcykpW3RoaXMubmFtZSBhcyBrZXlvZiBBbnN3ZXJzPFI+XTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQXNrcyB0aGUgdXNlciBvbmUgb3IgbW9yZSBxdWVzdGlvbnMgYmFzZWQgb24gdGhlIHByb3ZpZGVkIFVzZXJJbnB1dCBjb25maWd1cmF0aW9ucy5cbiAgICogQHN1bW1hcnkgUHJvbXB0cyB0aGUgdXNlciB3aXRoIG9uZSBvciBtb3JlIHF1ZXN0aW9ucyBhbmQgcmV0dXJucyB0aGVpciBhbnN3ZXJzIGFzIGFuIG9iamVjdC5cbiAgICogQHRlbXBsYXRlIFIgLSBUaGUgdHlwZSBvZiB0aGUgcHJvbXB0IG5hbWUsIGV4dGVuZGluZyBzdHJpbmcuXG4gICAqIEBwYXJhbSBxdWVzdGlvbiAtIEEgc2luZ2xlIFVzZXJJbnB1dCBpbnN0YW5jZSBvciBhbiBhcnJheSBvZiBVc2VySW5wdXQgaW5zdGFuY2VzLlxuICAgKiBAcmV0dXJuIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGFuIG9iamVjdCBjb250YWluaW5nIHRoZSB1c2VyJ3MgYW5zd2Vycy5cbiAgICogQG1lcm1haWRcbiAgICogc2VxdWVuY2VEaWFncmFtXG4gICAqICAgcGFydGljaXBhbnQgVSBhcyBVc2VyXG4gICAqICAgcGFydGljaXBhbnQgQSBhcyBhc2sgbWV0aG9kXG4gICAqICAgcGFydGljaXBhbnQgUCBhcyBwcm9tcHRzIGxpYnJhcnlcbiAgICogICBBLT4+UDogQ2FsbCBwcm9tcHRzIHdpdGggcXVlc3Rpb24ocylcbiAgICogICBQLT4+VTogRGlzcGxheSBwcm9tcHQocylcbiAgICogICBVLT4+UDogUHJvdmlkZSBpbnB1dFxuICAgKiAgIFAtPj5BOiBSZXR1cm4gYW5zd2Vyc1xuICAgKiAgIEEtPj5BOiBQcm9jZXNzIGFuc3dlcnNcbiAgICogICBBLS0+PkNhbGxlcjogUmV0dXJuIHByb2Nlc3NlZCBhbnN3ZXJzXG4gICAqL1xuICBzdGF0aWMgYXN5bmMgYXNrPFIgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmc+KFxuICAgIHF1ZXN0aW9uOiBVc2VySW5wdXQ8Uj4gfCBVc2VySW5wdXQ8Uj5bXVxuICApIHtcbiAgICBjb25zdCBsb2cgPSBVc2VySW5wdXQubG9nZ2VyLmZvcih0aGlzLmFzayk7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHF1ZXN0aW9uKSkge1xuICAgICAgcXVlc3Rpb24gPSBbcXVlc3Rpb25dO1xuICAgIH1cbiAgICBsZXQgYW5zd2VyczogQW5zd2VyczxSPjtcbiAgICB0cnkge1xuICAgICAgbG9nLnZlcmJvc2UoXG4gICAgICAgIGBBc2tpbmcgcXVlc3Rpb25zOiAke3F1ZXN0aW9uLm1hcCgocSkgPT4gcS5uYW1lKS5qb2luKFwiLCBcIil9YFxuICAgICAgKTtcbiAgICAgIGFuc3dlcnMgPSBhd2FpdCBwcm9tcHRzKHF1ZXN0aW9uKTtcbiAgICAgIGxvZy52ZXJib3NlKGBSZWNlaXZlZCBhbnN3ZXJzOiAke0pTT04uc3RyaW5naWZ5KGFuc3dlcnMsIG51bGwsIDIpfWApO1xuICAgIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yIHdoaWxlIGdldHRpbmcgaW5wdXQ6ICR7ZXJyb3J9YCk7XG4gICAgfVxuICAgIHJldHVybiBhbnN3ZXJzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBBc2tzIHRoZSB1c2VyIGZvciBhIG51bWJlciBpbnB1dC5cbiAgICogQHN1bW1hcnkgUHJvbXB0cyB0aGUgdXNlciB0byBlbnRlciBhIG51bWJlciwgd2l0aCBvcHRpb25hbCBtaW5pbXVtLCBtYXhpbXVtLCBhbmQgaW5pdGlhbCB2YWx1ZXMuXG4gICAqIEBwYXJhbSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHByb21wdCwgdXNlZCBhcyB0aGUga2V5IGluIHRoZSByZXR1cm5lZCBhbnN3ZXJzIG9iamVjdC5cbiAgICogQHBhcmFtIHF1ZXN0aW9uIC0gVGhlIG1lc3NhZ2UgZGlzcGxheWVkIHRvIHRoZSB1c2VyLlxuICAgKiBAcGFyYW0gbWluIC0gVGhlIG1pbmltdW0gYWxsb3dlZCB2YWx1ZSAob3B0aW9uYWwpLlxuICAgKiBAcGFyYW0gbWF4IC0gVGhlIG1heGltdW0gYWxsb3dlZCB2YWx1ZSAob3B0aW9uYWwpLlxuICAgKiBAcGFyYW0gaW5pdGlhbCAtIFRoZSBpbml0aWFsIHZhbHVlIHByZXNlbnRlZCB0byB0aGUgdXNlciAob3B0aW9uYWwpLlxuICAgKiBAcmV0dXJuIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIHRoZSBudW1iZXIgZW50ZXJlZCBieSB0aGUgdXNlci5cbiAgICovXG4gIHN0YXRpYyBhc3luYyBhc2tOdW1iZXIoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHF1ZXN0aW9uOiBzdHJpbmcsXG4gICAgbWluPzogbnVtYmVyLFxuICAgIG1heD86IG51bWJlcixcbiAgICBpbml0aWFsPzogbnVtYmVyXG4gICk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgY29uc3QgbG9nID0gVXNlcklucHV0LmxvZ2dlci5mb3IodGhpcy5hc2tOdW1iZXIpO1xuICAgIGxvZy52ZXJib3NlKFxuICAgICAgYEFza2luZyBudW1iZXIgaW5wdXQ6IHVuZGVmaW5lZCwgcXVlc3Rpb246ICR7cXVlc3Rpb259LCBtaW46ICR7bWlufSwgbWF4OiAke21heH0sIGluaXRpYWw6ICR7aW5pdGlhbH1gXG4gICAgKTtcbiAgICBjb25zdCB1c2VySW5wdXQgPSBuZXcgVXNlcklucHV0KG5hbWUpXG4gICAgICAuc2V0TWVzc2FnZShxdWVzdGlvbilcbiAgICAgIC5zZXRUeXBlKFwibnVtYmVyXCIpO1xuXG4gICAgaWYgKHR5cGVvZiBtaW4gPT09IFwibnVtYmVyXCIpIHVzZXJJbnB1dC5zZXRNaW4obWluKTtcblxuICAgIGlmICh0eXBlb2YgbWF4ID09PSBcIm51bWJlclwiKSB1c2VySW5wdXQuc2V0TWF4KG1heCk7XG5cbiAgICBpZiAodHlwZW9mIGluaXRpYWwgPT09IFwibnVtYmVyXCIpIHVzZXJJbnB1dC5zZXRJbml0aWFsKGluaXRpYWwpO1xuXG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLmFzayh1c2VySW5wdXQpKVtuYW1lXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQXNrcyB0aGUgdXNlciBmb3IgYSB0ZXh0IGlucHV0LlxuICAgKiBAc3VtbWFyeSBQcm9tcHRzIHRoZSB1c2VyIHRvIGVudGVyIHRleHQsIHdpdGggb3B0aW9uYWwgbWFza2luZyBhbmQgaW5pdGlhbCB2YWx1ZS5cbiAgICogQHBhcmFtIG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgcHJvbXB0LCB1c2VkIGFzIHRoZSBrZXkgaW4gdGhlIHJldHVybmVkIGFuc3dlcnMgb2JqZWN0LlxuICAgKiBAcGFyYW0gcXVlc3Rpb24gLSBUaGUgbWVzc2FnZSBkaXNwbGF5ZWQgdG8gdGhlIHVzZXIuXG4gICAqIEBwYXJhbSBtYXNrIC0gVGhlIGNoYXJhY3RlciB1c2VkIHRvIG1hc2sgdGhlIGlucHV0IChvcHRpb25hbCwgZm9yIHBhc3N3b3JkLWxpa2UgaW5wdXRzKS5cbiAgICogQHBhcmFtIGluaXRpYWwgLSBUaGUgaW5pdGlhbCB2YWx1ZSBwcmVzZW50ZWQgdG8gdGhlIHVzZXIgKG9wdGlvbmFsKS5cbiAgICogQHJldHVybiBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgdGV4dCBlbnRlcmVkIGJ5IHRoZSB1c2VyLlxuICAgKi9cbiAgc3RhdGljIGFzeW5jIGFza1RleHQoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHF1ZXN0aW9uOiBzdHJpbmcsXG4gICAgbWFzazogc3RyaW5nIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkLFxuICAgIGluaXRpYWw/OiBzdHJpbmdcbiAgKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCBsb2cgPSBVc2VySW5wdXQubG9nZ2VyLmZvcih0aGlzLmFza1RleHQpO1xuICAgIGxvZy52ZXJib3NlKFxuICAgICAgYEFza2luZyB0ZXh0IGlucHV0OiB1bmRlZmluZWQsIHF1ZXN0aW9uOiAke3F1ZXN0aW9ufSwgbWFzazogJHttYXNrfSwgaW5pdGlhbDogJHtpbml0aWFsfWBcbiAgICApO1xuICAgIGNvbnN0IHVzZXJJbnB1dCA9IG5ldyBVc2VySW5wdXQobmFtZSkuc2V0TWVzc2FnZShxdWVzdGlvbik7XG5cbiAgICBpZiAobWFzaykgdXNlcklucHV0LnNldE1hc2sobWFzayk7XG4gICAgaWYgKHR5cGVvZiBpbml0aWFsID09PSBcInN0cmluZ1wiKSB1c2VySW5wdXQuc2V0SW5pdGlhbChpbml0aWFsKTtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMuYXNrKHVzZXJJbnB1dCkpW25hbWVdO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBBc2tzIHRoZSB1c2VyIGZvciBhIGNvbmZpcm1hdGlvbiAoeWVzL25vKS5cbiAgICogQHN1bW1hcnkgUHJvbXB0cyB0aGUgdXNlciB3aXRoIGEgeWVzL25vIHF1ZXN0aW9uIGFuZCByZXR1cm5zIGEgYm9vbGVhbiByZXN1bHQuXG4gICAqIEBwYXJhbSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHByb21wdCwgdXNlZCBhcyB0aGUga2V5IGluIHRoZSByZXR1cm5lZCBhbnN3ZXJzIG9iamVjdC5cbiAgICogQHBhcmFtIHF1ZXN0aW9uIC0gVGhlIG1lc3NhZ2UgZGlzcGxheWVkIHRvIHRoZSB1c2VyLlxuICAgKiBAcGFyYW0gaW5pdGlhbCAtIFRoZSBpbml0aWFsIHZhbHVlIHByZXNlbnRlZCB0byB0aGUgdXNlciAob3B0aW9uYWwpLlxuICAgKiBAcmV0dXJuIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGEgYm9vbGVhbiByZXByZXNlbnRpbmcgdGhlIHVzZXIncyBhbnN3ZXIuXG4gICAqL1xuICBzdGF0aWMgYXN5bmMgYXNrQ29uZmlybWF0aW9uKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBxdWVzdGlvbjogc3RyaW5nLFxuICAgIGluaXRpYWw/OiBib29sZWFuXG4gICk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGxvZyA9IFVzZXJJbnB1dC5sb2dnZXIuZm9yKHRoaXMuYXNrQ29uZmlybWF0aW9uKTtcbiAgICBsb2cudmVyYm9zZShcbiAgICAgIGBBc2tpbmcgY29uZmlybWF0aW9uIGlucHV0OiB1bmRlZmluZWQsIHF1ZXN0aW9uOiAke3F1ZXN0aW9ufSwgaW5pdGlhbDogJHtpbml0aWFsfWBcbiAgICApO1xuICAgIGNvbnN0IHVzZXJJbnB1dCA9IG5ldyBVc2VySW5wdXQobmFtZSlcbiAgICAgIC5zZXRNZXNzYWdlKHF1ZXN0aW9uKVxuICAgICAgLnNldFR5cGUoXCJjb25maXJtXCIpO1xuXG4gICAgaWYgKHR5cGVvZiBpbml0aWFsICE9PSBcInVuZGVmaW5lZFwiKSB1c2VySW5wdXQuc2V0SW5pdGlhbChpbml0aWFsKTtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMuYXNrKHVzZXJJbnB1dCkpW25hbWVdO1xuICB9XG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmVwZWF0ZWRseSBhc2tzIGZvciBpbnB1dCB1bnRpbCBhIHZhbGlkIHJlc3BvbnNlIGlzIGdpdmVuIG9yIHRoZSBsaW1pdCBpcyByZWFjaGVkLlxuICAgKiBAc3VtbWFyeSBUaGlzIG1ldGhvZCBpbnNpc3RzIG9uIGdldHRpbmcgYSB2YWxpZCBpbnB1dCBmcm9tIHRoZSB1c2VyLCBhbGxvd2luZyBmb3IgYSBzcGVjaWZpZWQgbnVtYmVyIG9mIGF0dGVtcHRzLlxuICAgKlxuICAgKiBAdGVtcGxhdGUgUiAtIFRoZSB0eXBlIG9mIHRoZSBleHBlY3RlZCByZXN1bHQuXG4gICAqIEBwYXJhbSBpbnB1dCAtIFRoZSBVc2VySW5wdXQgaW5zdGFuY2UgdG8gdXNlIGZvciBwcm9tcHRpbmcuXG4gICAqIEBwYXJhbSB0ZXN0IC0gQSBmdW5jdGlvbiB0byB2YWxpZGF0ZSB0aGUgdXNlcidzIGlucHV0LlxuICAgKiBAcGFyYW0gZGVmYXVsdENvbmZpcm1hdGlvbiAtIFRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGUgY29uZmlybWF0aW9uIHByb21wdCAodHJ1ZSBmb3IgeWVzLCBmYWxzZSBmb3Igbm8pLlxuICAgKiBAcGFyYW0gbGltaXQgLSBUaGUgbWF4aW11bSBudW1iZXIgb2YgYXR0ZW1wdHMgYWxsb3dlZCAoZGVmYXVsdCBpcyAxKS5cbiAgICogQHJldHVybiBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgdmFsaWQgaW5wdXQgb3IgdW5kZWZpbmVkIGlmIHRoZSBsaW1pdCBpcyByZWFjaGVkLlxuICAgKlxuICAgKiBAbWVybWFpZFxuICAgKiBzZXF1ZW5jZURpYWdyYW1cbiAgICogICBwYXJ0aWNpcGFudCBVIGFzIFVzZXJcbiAgICogICBwYXJ0aWNpcGFudCBJIGFzIGluc2lzdCBtZXRob2RcbiAgICogICBwYXJ0aWNpcGFudCBBIGFzIGFzayBtZXRob2RcbiAgICogICBwYXJ0aWNpcGFudCBUIGFzIHRlc3QgZnVuY3Rpb25cbiAgICogICBwYXJ0aWNpcGFudCBDIGFzIGFza0NvbmZpcm1hdGlvbiBtZXRob2RcbiAgICogICBsb29wIFVudGlsIHZhbGlkIGlucHV0IG9yIGxpbWl0IHJlYWNoZWRcbiAgICogICAgIEktPj5BOiBDYWxsIGFzayB3aXRoIGlucHV0XG4gICAqICAgICBBLT4+VTogUHJvbXB0IHVzZXJcbiAgICogICAgIFUtPj5BOiBQcm92aWRlIGlucHV0XG4gICAqICAgICBBLT4+STogUmV0dXJuIHJlc3VsdFxuICAgKiAgICAgSS0+PlQ6IFRlc3QgcmVzdWx0XG4gICAqICAgICBhbHQgVGVzdCBwYXNzZXNcbiAgICogICAgICAgSS0+PkM6IEFzayBmb3IgY29uZmlybWF0aW9uXG4gICAqICAgICAgIEMtPj5VOiBDb25maXJtIGlucHV0XG4gICAqICAgICAgIFUtPj5DOiBQcm92aWRlIGNvbmZpcm1hdGlvblxuICAgKiAgICAgICBDLT4+STogUmV0dXJuIGNvbmZpcm1hdGlvblxuICAgKiAgICAgICBhbHQgQ29uZmlybWVkXG4gICAqICAgICAgICAgSS0tPj5DYWxsZXI6IFJldHVybiB2YWxpZCByZXN1bHRcbiAgICogICAgICAgZWxzZSBOb3QgY29uZmlybWVkXG4gICAqICAgICAgICAgSS0+Pkk6IENvbnRpbnVlIGxvb3BcbiAgICogICAgICAgZW5kXG4gICAqICAgICBlbHNlIFRlc3QgZmFpbHNcbiAgICogICAgICAgSS0+Pkk6IENvbnRpbnVlIGxvb3BcbiAgICogICAgIGVuZFxuICAgKiAgIGVuZFxuICAgKiAgIEktLT4+Q2FsbGVyOiBSZXR1cm4gdW5kZWZpbmVkIGlmIGxpbWl0IHJlYWNoZWRcbiAgICovXG4gIHN0YXRpYyBhc3luYyBpbnNpc3Q8Uj4oXG4gICAgaW5wdXQ6IFVzZXJJbnB1dCxcbiAgICB0ZXN0OiAocmVzOiBzdHJpbmcgfCBudW1iZXIpID0+IGJvb2xlYW4sXG4gICAgZGVmYXVsdENvbmZpcm1hdGlvbjogYm9vbGVhbixcbiAgICBsaW1pdCA9IDFcbiAgKTogUHJvbWlzZTxSIHwgdW5kZWZpbmVkPiB7XG4gICAgY29uc3QgbG9nID0gVXNlcklucHV0LmxvZ2dlci5mb3IodGhpcy5pbnNpc3QpO1xuICAgIGxvZy52ZXJib3NlKFxuICAgICAgYEluc2lzdGluZyBvbiBpbnB1dDogJHtpbnB1dC5uYW1lfSwgdGVzdDogJHt0ZXN0LnRvU3RyaW5nKCl9LCBkZWZhdWx0Q29uZmlybWF0aW9uOiAke2RlZmF1bHRDb25maXJtYXRpb259LCBsaW1pdDogJHtsaW1pdH1gXG4gICAgKTtcbiAgICBsZXQgcmVzdWx0OiBzdHJpbmcgfCBudW1iZXIgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgbGV0IGNvdW50ID0gMDtcbiAgICBsZXQgY29uZmlybWF0aW9uOiBib29sZWFuO1xuICAgIHRyeSB7XG4gICAgICBkbyB7XG4gICAgICAgIHJlc3VsdCA9IChhd2FpdCBVc2VySW5wdXQuYXNrKGlucHV0KSlbXG4gICAgICAgICAgaW5wdXQubmFtZSBhcyBrZXlvZiBBbnN3ZXJzPHN0cmluZz5cbiAgICAgICAgXSBhcyBzdHJpbmc7XG4gICAgICAgIGlmICghdGVzdChyZXN1bHQpKSB7XG4gICAgICAgICAgcmVzdWx0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbmZpcm1hdGlvbiA9IGF3YWl0IFVzZXJJbnB1dC5hc2tDb25maXJtYXRpb24oXG4gICAgICAgICAgYCR7aW5wdXQubmFtZX0tY29uZmlybWAsXG4gICAgICAgICAgYElzIHRoZSAke2lucHV0LnR5cGV9IGNvcnJlY3Q/YCxcbiAgICAgICAgICBkZWZhdWx0Q29uZmlybWF0aW9uXG4gICAgICAgICk7XG4gICAgICAgIGlmICghY29uZmlybWF0aW9uKSByZXN1bHQgPSB1bmRlZmluZWQ7XG4gICAgICB9IHdoaWxlICh0eXBlb2YgcmVzdWx0ID09PSBcInVuZGVmaW5lZFwiICYmIGxpbWl0ID4gMSAmJiBjb3VudCsrIDwgbGltaXQpO1xuICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgIGxvZy5lcnJvcihgRXJyb3Igd2hpbGUgaW5zaXN0aW5nOiAke2V9YCk7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgcmVzdWx0ID09PSBcInVuZGVmaW5lZFwiKSBsb2cuaW5mbyhcIm5vIHNlbGVjdGlvbi4uLlwiKTtcbiAgICByZXR1cm4gcmVzdWx0IGFzIFIgfCB1bmRlZmluZWQ7XG4gIH1cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBSZXBlYXRlZGx5IGFza3MgZm9yIHRleHQgaW5wdXQgdW50aWwgYSB2YWxpZCByZXNwb25zZSBpcyBnaXZlbiBvciB0aGUgbGltaXQgaXMgcmVhY2hlZC5cbiAgICogQHN1bW1hcnkgVGhpcyBtZXRob2QgaW5zaXN0cyBvbiBnZXR0aW5nIGEgdmFsaWQgdGV4dCBpbnB1dCBmcm9tIHRoZSB1c2VyLCBhbGxvd2luZyBmb3IgYSBzcGVjaWZpZWQgbnVtYmVyIG9mIGF0dGVtcHRzLlxuICAgKlxuICAgKiBAcGFyYW0gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBwcm9tcHQsIHVzZWQgYXMgdGhlIGtleSBpbiB0aGUgcmV0dXJuZWQgYW5zd2VycyBvYmplY3QuXG4gICAqIEBwYXJhbSBxdWVzdGlvbiAtIFRoZSBtZXNzYWdlIGRpc3BsYXllZCB0byB0aGUgdXNlci5cbiAgICogQHBhcmFtIHRlc3QgLSBBIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIHRoZSB1c2VyJ3MgaW5wdXQuXG4gICAqIEBwYXJhbSBtYXNrIC0gVGhlIGNoYXJhY3RlciB1c2VkIHRvIG1hc2sgdGhlIGlucHV0IChvcHRpb25hbCwgZm9yIHBhc3N3b3JkLWxpa2UgaW5wdXRzKS5cbiAgICogQHBhcmFtIGluaXRpYWwgLSBUaGUgaW5pdGlhbCB2YWx1ZSBwcmVzZW50ZWQgdG8gdGhlIHVzZXIgKG9wdGlvbmFsKS5cbiAgICogQHBhcmFtIGRlZmF1bHRDb25maXJtYXRpb24gLSBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIGNvbmZpcm1hdGlvbiBwcm9tcHQgKHRydWUgZm9yIHllcywgZmFsc2UgZm9yIG5vKS5cbiAgICogQHBhcmFtIGxpbWl0IC0gVGhlIG1heGltdW0gbnVtYmVyIG9mIGF0dGVtcHRzIGFsbG93ZWQgKGRlZmF1bHQgaXMgLTEsIG1lYW5pbmcgdW5saW1pdGVkKS5cbiAgICogQHJldHVybiBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgdmFsaWQgaW5wdXQgb3IgdW5kZWZpbmVkIGlmIHRoZSBsaW1pdCBpcyByZWFjaGVkLlxuICAgKi9cbiAgc3RhdGljIGFzeW5jIGluc2lzdEZvclRleHQoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHF1ZXN0aW9uOiBzdHJpbmcsXG4gICAgdGVzdDogKHJlczogc3RyaW5nKSA9PiBib29sZWFuLFxuICAgIG1hc2s6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZCxcbiAgICBpbml0aWFsPzogc3RyaW5nLFxuICAgIGRlZmF1bHRDb25maXJtYXRpb24gPSBmYWxzZSxcbiAgICBsaW1pdCA9IC0xXG4gICk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgbG9nID0gVXNlcklucHV0LmxvZ2dlci5mb3IodGhpcy5pbnNpc3RGb3JUZXh0KTtcbiAgICBsb2cudmVyYm9zZShcbiAgICAgIGBJbnNpc3RpbmcgZm9yIHRleHQgaW5wdXQ6IHVuZGVmaW5lZCwgcXVlc3Rpb246ICR7cXVlc3Rpb259LCB0ZXN0OiAke3Rlc3QudG9TdHJpbmcoKX0sIG1hc2s6ICR7bWFza30sIGluaXRpYWw6ICR7aW5pdGlhbH0sIGRlZmF1bHRDb25maXJtYXRpb246ICR7ZGVmYXVsdENvbmZpcm1hdGlvbn0sIGxpbWl0OiAke2xpbWl0fWBcbiAgICApO1xuICAgIGNvbnN0IHVzZXJJbnB1dCA9IG5ldyBVc2VySW5wdXQobmFtZSkuc2V0TWVzc2FnZShxdWVzdGlvbik7XG5cbiAgICBpZiAobWFzaykgdXNlcklucHV0LnNldE1hc2sobWFzayk7XG4gICAgaWYgKHR5cGVvZiBpbml0aWFsID09PSBcInN0cmluZ1wiKSB1c2VySW5wdXQuc2V0SW5pdGlhbChpbml0aWFsKTtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMuaW5zaXN0KFxuICAgICAgdXNlcklucHV0LFxuICAgICAgdGVzdCBhcyAocmVzOiBzdHJpbmcgfCBudW1iZXIpID0+IGJvb2xlYW4sXG4gICAgICBkZWZhdWx0Q29uZmlybWF0aW9uLFxuICAgICAgbGltaXRcbiAgICApKSBhcyBzdHJpbmc7XG4gIH1cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBSZXBlYXRlZGx5IGFza3MgZm9yIG51bWJlciBpbnB1dCB1bnRpbCBhIHZhbGlkIHJlc3BvbnNlIGlzIGdpdmVuIG9yIHRoZSBsaW1pdCBpcyByZWFjaGVkLlxuICAgKiBAc3VtbWFyeSBUaGlzIG1ldGhvZCBpbnNpc3RzIG9uIGdldHRpbmcgYSB2YWxpZCBudW1iZXIgaW5wdXQgZnJvbSB0aGUgdXNlciwgYWxsb3dpbmcgZm9yIGEgc3BlY2lmaWVkIG51bWJlciBvZiBhdHRlbXB0cy5cbiAgICpcbiAgICogQHBhcmFtIG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgcHJvbXB0LCB1c2VkIGFzIHRoZSBrZXkgaW4gdGhlIHJldHVybmVkIGFuc3dlcnMgb2JqZWN0LlxuICAgKiBAcGFyYW0gcXVlc3Rpb24gLSBUaGUgbWVzc2FnZSBkaXNwbGF5ZWQgdG8gdGhlIHVzZXIuXG4gICAqIEBwYXJhbSB0ZXN0IC0gQSBmdW5jdGlvbiB0byB2YWxpZGF0ZSB0aGUgdXNlcidzIGlucHV0LlxuICAgKiBAcGFyYW0gbWluIC0gVGhlIG1pbmltdW0gYWxsb3dlZCB2YWx1ZSAob3B0aW9uYWwpLlxuICAgKiBAcGFyYW0gbWF4IC0gVGhlIG1heGltdW0gYWxsb3dlZCB2YWx1ZSAob3B0aW9uYWwpLlxuICAgKiBAcGFyYW0gaW5pdGlhbCAtIFRoZSBpbml0aWFsIHZhbHVlIHByZXNlbnRlZCB0byB0aGUgdXNlciAob3B0aW9uYWwpLlxuICAgKiBAcGFyYW0gZGVmYXVsdENvbmZpcm1hdGlvbiAtIFRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGUgY29uZmlybWF0aW9uIHByb21wdCAodHJ1ZSBmb3IgeWVzLCBmYWxzZSBmb3Igbm8pLlxuICAgKiBAcGFyYW0gbGltaXQgLSBUaGUgbWF4aW11bSBudW1iZXIgb2YgYXR0ZW1wdHMgYWxsb3dlZCAoZGVmYXVsdCBpcyAtMSwgbWVhbmluZyB1bmxpbWl0ZWQpLlxuICAgKiBAcmV0dXJuIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIHRoZSB2YWxpZCBpbnB1dCBvciB1bmRlZmluZWQgaWYgdGhlIGxpbWl0IGlzIHJlYWNoZWQuXG4gICAqL1xuICBzdGF0aWMgYXN5bmMgaW5zaXN0Rm9yTnVtYmVyKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBxdWVzdGlvbjogc3RyaW5nLFxuICAgIHRlc3Q6IChyZXM6IG51bWJlcikgPT4gYm9vbGVhbixcbiAgICBtaW4/OiBudW1iZXIsXG4gICAgbWF4PzogbnVtYmVyLFxuICAgIGluaXRpYWw/OiBudW1iZXIsXG4gICAgZGVmYXVsdENvbmZpcm1hdGlvbiA9IGZhbHNlLFxuICAgIGxpbWl0ID0gLTFcbiAgKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBjb25zdCBsb2cgPSBVc2VySW5wdXQubG9nZ2VyLmZvcih0aGlzLmluc2lzdEZvck51bWJlcik7XG4gICAgbG9nLnZlcmJvc2UoXG4gICAgICBgSW5zaXN0aW5nIGZvciBudW1iZXIgaW5wdXQ6IHVuZGVmaW5lZCwgcXVlc3Rpb246ICR7cXVlc3Rpb259LCB0ZXN0OiAke3Rlc3QudG9TdHJpbmcoKX0sIG1pbjogJHttaW59LCBtYXg6ICR7bWF4fSwgaW5pdGlhbDogJHtpbml0aWFsfSwgZGVmYXVsdENvbmZpcm1hdGlvbjogJHtkZWZhdWx0Q29uZmlybWF0aW9ufSwgbGltaXQ6ICR7bGltaXR9YFxuICAgICk7XG4gICAgY29uc3QgdXNlcklucHV0ID0gbmV3IFVzZXJJbnB1dChuYW1lKVxuICAgICAgLnNldE1lc3NhZ2UocXVlc3Rpb24pXG4gICAgICAuc2V0VHlwZShcIm51bWJlclwiKTtcblxuICAgIGlmICh0eXBlb2YgbWluID09PSBcIm51bWJlclwiKSB1c2VySW5wdXQuc2V0TWluKG1pbik7XG5cbiAgICBpZiAodHlwZW9mIG1heCA9PT0gXCJudW1iZXJcIikgdXNlcklucHV0LnNldE1heChtYXgpO1xuXG4gICAgaWYgKHR5cGVvZiBpbml0aWFsID09PSBcIm51bWJlclwiKSB1c2VySW5wdXQuc2V0SW5pdGlhbChpbml0aWFsKTtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMuaW5zaXN0KFxuICAgICAgdXNlcklucHV0LFxuICAgICAgdGVzdCBhcyAocmVzOiBzdHJpbmcgfCBudW1iZXIpID0+IGJvb2xlYW4sXG4gICAgICBkZWZhdWx0Q29uZmlybWF0aW9uLFxuICAgICAgbGltaXRcbiAgICApKSBhcyBudW1iZXI7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFBhcnNlcyBjb21tYW5kLWxpbmUgYXJndW1lbnRzIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBvcHRpb25zLlxuICAgKiBAc3VtbWFyeSBVc2VzIE5vZGUuanMncyB1dGlsLnBhcnNlQXJncyB0byBwYXJzZSBjb21tYW5kLWxpbmUgYXJndW1lbnRzIGFuZCByZXR1cm4gdGhlIHJlc3VsdC5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHBhcnNpbmcgYXJndW1lbnRzLlxuICAgKiBAcmV0dXJuIEFuIG9iamVjdCBjb250YWluaW5nIHRoZSBwYXJzZWQgYXJndW1lbnRzLlxuICAgKiBAbWVybWFpZFxuICAgKiBzZXF1ZW5jZURpYWdyYW1cbiAgICogICBwYXJ0aWNpcGFudCBDIGFzIENhbGxlclxuICAgKiAgIHBhcnRpY2lwYW50IFAgYXMgcGFyc2VBcmdzIG1ldGhvZFxuICAgKiAgIHBhcnRpY2lwYW50IFUgYXMgdXRpbC5wYXJzZUFyZ3NcbiAgICogICBDLT4+UDogQ2FsbCB3aXRoIG9wdGlvbnNcbiAgICogICBQLT4+UDogUHJlcGFyZSBhcmdzIG9iamVjdFxuICAgKiAgIFAtPj5VOiBDYWxsIHBhcnNlQXJncyB3aXRoIHByZXBhcmVkIGFyZ3NcbiAgICogICBVLT4+UDogUmV0dXJuIHBhcnNlZCByZXN1bHRcbiAgICogICBQLS0+PkM6IFJldHVybiBQYXJzZUFyZ3NSZXN1bHRcbiAgICovXG4gIHN0YXRpYyBwYXJzZUFyZ3Mob3B0aW9uczogUGFyc2VBcmdzT3B0aW9uc0NvbmZpZyk6IFBhcnNlQXJnc1Jlc3VsdCB7XG4gICAgY29uc3QgbG9nID0gVXNlcklucHV0LmxvZ2dlci5mb3IodGhpcy5wYXJzZUFyZ3MpO1xuICAgIGNvbnN0IGFyZ3M6IFBhcnNlQXJnc0NvbmZpZyA9IHtcbiAgICAgIGFyZ3M6IHByb2Nlc3MuYXJndi5zbGljZSgyKSxcbiAgICAgIG9wdGlvbnM6IG9wdGlvbnMsXG4gICAgfTtcbiAgICBsb2cuZGVidWcoYFBhcnNpbmcgYXJndW1lbnRzOiAke0pTT04uc3RyaW5naWZ5KGFyZ3MsIG51bGwsIDIpfWApO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gcGFyc2VBcmdzKGFyZ3MpO1xuICAgIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgICBsb2cuZGVidWcoXG4gICAgICAgIGBFcnJvciB3aGlsZSBwYXJzaW5nIGFyZ3VtZW50czpcXG4ke0pTT04uc3RyaW5naWZ5KGFyZ3MsIG51bGwsIDIpfVxcbiB8IG9wdGlvbnNcXG4ke0pTT04uc3RyaW5naWZ5KG9wdGlvbnMsIG51bGwsIDIpfVxcbiB8ICR7ZXJyb3J9YFxuICAgICAgKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3Igd2hpbGUgcGFyc2luZyBhcmd1bWVudHM6ICR7ZXJyb3J9YCk7XG4gICAgfVxuICB9XG59XG4iLCIvKipcbiAqIEBkZXNjcmlwdGlvbiBEZWZhdWx0IGNvbW1hbmQgb3B0aW9ucyBmb3IgQ0xJIGNvbW1hbmRzLlxuICogQHN1bW1hcnkgRGVmaW5lcyB0aGUgc3RydWN0dXJlIGFuZCBkZWZhdWx0IHZhbHVlcyBmb3IgY29tbW9uIGNvbW1hbmQtbGluZSBvcHRpb25zIHVzZWQgYWNyb3NzIHZhcmlvdXMgQ0xJIGNvbW1hbmRzLlxuICogQGNvbnN0IERlZmF1bHRDb21tYW5kT3B0aW9uc1xuICogQHR5cGVkZWYge09iamVjdH0gRGVmYXVsdENvbW1hbmRPcHRpb25zXG4gKiBAcHJvcGVydHkge09iamVjdH0gdmVyYm9zZSAtIFZlcmJvc2l0eSBsZXZlbCBvcHRpb24uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdmVyYm9zZS50eXBlIC0gVGhlIHR5cGUgb2YgdGhlIHZlcmJvc2Ugb3B0aW9uIChudW1iZXIpLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IHZlcmJvc2Uuc2hvcnQgLSBUaGUgc2hvcnQgZmxhZyBmb3IgdGhlIHZlcmJvc2Ugb3B0aW9uIChWKS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB2ZXJib3NlLmRlZmF1bHQgLSBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgdmVyYm9zaXR5ICgwKS5cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB2ZXJzaW9uIC0gVmVyc2lvbiBkaXNwbGF5IG9wdGlvbi5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB2ZXJzaW9uLnR5cGUgLSBUaGUgdHlwZSBvZiB0aGUgdmVyc2lvbiBvcHRpb24gKGJvb2xlYW4pLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IHZlcnNpb24uc2hvcnQgLSBUaGUgc2hvcnQgZmxhZyBmb3IgdGhlIHZlcnNpb24gb3B0aW9uICh2KS5cbiAqIEBwcm9wZXJ0eSB7dW5kZWZpbmVkfSB2ZXJzaW9uLmRlZmF1bHQgLSBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgdmVyc2lvbiBkaXNwbGF5ICh1bmRlZmluZWQpLlxuICogQHByb3BlcnR5IHtPYmplY3R9IGhlbHAgLSBIZWxwIGRpc3BsYXkgb3B0aW9uLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGhlbHAudHlwZSAtIFRoZSB0eXBlIG9mIHRoZSBoZWxwIG9wdGlvbiAoYm9vbGVhbikuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gaGVscC5zaG9ydCAtIFRoZSBzaG9ydCBmbGFnIGZvciB0aGUgaGVscCBvcHRpb24gKGgpLlxuICogQHByb3BlcnR5IHtib29sZWFufSBoZWxwLmRlZmF1bHQgLSBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgaGVscCBkaXNwbGF5IChmYWxzZSkuXG4gKiBAcHJvcGVydHkge09iamVjdH0gbG9nTGV2ZWwgLSBMb2cgbGV2ZWwgb3B0aW9uLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGxvZ0xldmVsLnR5cGUgLSBUaGUgdHlwZSBvZiB0aGUgbG9nTGV2ZWwgb3B0aW9uIChzdHJpbmcpLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGxvZ0xldmVsLmRlZmF1bHQgLSBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgbG9nIGxldmVsIChcImluZm9cIikuXG4gKiBAcHJvcGVydHkge09iamVjdH0gbG9nU3R5bGUgLSBMb2cgc3R5bGluZyBvcHRpb24uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gbG9nU3R5bGUudHlwZSAtIFRoZSB0eXBlIG9mIHRoZSBsb2dTdHlsZSBvcHRpb24gKGJvb2xlYW4pLlxuICogQHByb3BlcnR5IHtib29sZWFufSBsb2dTdHlsZS5kZWZhdWx0IC0gVGhlIGRlZmF1bHQgdmFsdWUgZm9yIGxvZyBzdHlsaW5nICh0cnVlKS5cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0aW1lc3RhbXAgLSBUaW1lc3RhbXAgZGlzcGxheSBvcHRpb24uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdGltZXN0YW1wLnR5cGUgLSBUaGUgdHlwZSBvZiB0aGUgdGltZXN0YW1wIG9wdGlvbiAoYm9vbGVhbikuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHRpbWVzdGFtcC5kZWZhdWx0IC0gVGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRpbWVzdGFtcCBkaXNwbGF5ICh0cnVlKS5cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBiYW5uZXIgLSBCYW5uZXIgZGlzcGxheSBvcHRpb24uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gYmFubmVyLnR5cGUgLSBUaGUgdHlwZSBvZiB0aGUgYmFubmVyIG9wdGlvbiAoYm9vbGVhbikuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGJhbm5lci5kZWZhdWx0IC0gVGhlIGRlZmF1bHQgdmFsdWUgZm9yIGJhbm5lciBkaXNwbGF5IChmYWxzZSkuXG4gKiBAbWVtYmVyT2YgbW9kdWxlOnV0aWxzXG4gKi9cbmV4cG9ydCBjb25zdCBEZWZhdWx0Q29tbWFuZE9wdGlvbnMgPSB7XG4gIHZlcmJvc2U6IHtcbiAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgICBzaG9ydDogXCJWXCIsXG4gICAgZGVmYXVsdDogdW5kZWZpbmVkLFxuICB9LFxuICB2ZXJzaW9uOiB7XG4gICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgc2hvcnQ6IFwidlwiLFxuICAgIGRlZmF1bHQ6IHVuZGVmaW5lZCxcbiAgfSxcbiAgaGVscDoge1xuICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgIHNob3J0OiBcImhcIixcbiAgICBkZWZhdWx0OiBmYWxzZSxcbiAgfSxcbiAgbG9nTGV2ZWw6IHtcbiAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgIGRlZmF1bHQ6IFwiaW5mb1wiLFxuICB9LFxuICBsb2dTdHlsZToge1xuICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgIGRlZmF1bHQ6IHRydWUsXG4gIH0sXG4gIHRpbWVzdGFtcDoge1xuICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgIGRlZmF1bHQ6IHRydWUsXG4gIH0sXG4gIGJhbm5lcjoge1xuICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgIGRlZmF1bHQ6IHRydWUsXG4gIH0sXG59O1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBEZWZhdWx0IGNvbW1hbmQgdmFsdWVzIGRlcml2ZWQgZnJvbSBEZWZhdWx0Q29tbWFuZE9wdGlvbnMuXG4gKiBAc3VtbWFyeSBDcmVhdGVzIGFuIG9iamVjdCB3aXRoIHRoZSBkZWZhdWx0IHZhbHVlcyBvZiBhbGwgb3B0aW9ucyBkZWZpbmVkIGluIERlZmF1bHRDb21tYW5kT3B0aW9ucy5cbiAqIEBjb25zdCBEZWZhdWx0Q29tbWFuZFZhbHVlc1xuICogQHR5cGVkZWYge09iamVjdH0gRGVmYXVsdENvbW1hbmRWYWx1ZXNcbiAqIEBwcm9wZXJ0eSB7dW5rbm93bn0gW2tleTogc3RyaW5nXSAtIFRoZSBkZWZhdWx0IHZhbHVlIGZvciBlYWNoIG9wdGlvbiBpbiBEZWZhdWx0Q29tbWFuZE9wdGlvbnMuXG4gKiBAbWVtYmVyT2YgbW9kdWxlOnV0aWxzXG4gKi9cbmV4cG9ydCBjb25zdCBEZWZhdWx0Q29tbWFuZFZhbHVlczoge1xuICBbayBpbiBrZXlvZiB0eXBlb2YgRGVmYXVsdENvbW1hbmRPcHRpb25zXTogdW5rbm93bjtcbn0gPSBPYmplY3Qua2V5cyhEZWZhdWx0Q29tbWFuZE9wdGlvbnMpLnJlZHVjZShcbiAgKGFjYzogUmVjb3JkPGtleW9mIHR5cGVvZiBEZWZhdWx0Q29tbWFuZE9wdGlvbnMsIHVua25vd24+LCBrZXk6IHN0cmluZykgPT4ge1xuICAgIGFjY1trZXkgYXMga2V5b2YgdHlwZW9mIERlZmF1bHRDb21tYW5kT3B0aW9uc10gPVxuICAgICAgRGVmYXVsdENvbW1hbmRPcHRpb25zW2tleSBhcyBrZXlvZiB0eXBlb2YgRGVmYXVsdENvbW1hbmRPcHRpb25zXS5kZWZhdWx0O1xuICAgIHJldHVybiBhY2M7XG4gIH0sXG4gIHt9IGFzIFJlY29yZDxrZXlvZiB0eXBlb2YgRGVmYXVsdENvbW1hbmRWYWx1ZXMsIHVua25vd24+XG4pO1xuIiwiLyoqXG4gKiBAZGVzY3JpcHRpb24gUGFkcyB0aGUgZW5kIG9mIGEgc3RyaW5nIHdpdGggYSBzcGVjaWZpZWQgY2hhcmFjdGVyLlxuICogQHN1bW1hcnkgRXh0ZW5kcyB0aGUgaW5wdXQgc3RyaW5nIHRvIGEgc3BlY2lmaWVkIGxlbmd0aCBieSBhZGRpbmcgYSBwYWRkaW5nIGNoYXJhY3RlciB0byB0aGUgZW5kLlxuICogSWYgdGhlIGlucHV0IHN0cmluZyBpcyBhbHJlYWR5IGxvbmdlciB0aGFuIHRoZSBzcGVjaWZpZWQgbGVuZ3RoLCBpdCBpcyByZXR1cm5lZCB1bmNoYW5nZWQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHN0ciAtIFRoZSBpbnB1dCBzdHJpbmcgdG8gYmUgcGFkZGVkLlxuICogQHBhcmFtIHtudW1iZXJ9IGxlbmd0aCAtIFRoZSBkZXNpcmVkIHRvdGFsIGxlbmd0aCBvZiB0aGUgcmVzdWx0aW5nIHN0cmluZy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbY2hhcj1cIiBcIl0gLSBUaGUgY2hhcmFjdGVyIHRvIHVzZSBmb3IgcGFkZGluZy4gRGVmYXVsdHMgdG8gYSBzcGFjZS5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIHBhZGRlZCBzdHJpbmcuXG4gKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHBhZGRpbmcgY2hhcmFjdGVyIGlzIG5vdCBleGFjdGx5IG9uZSBjaGFyYWN0ZXIgbG9uZy5cbiAqXG4gKiBAZnVuY3Rpb24gcGFkRW5kXG4gKlxuICogQG1lbWJlck9mIG1vZHVsZTp1dGlsc1xuICovXG5leHBvcnQgZnVuY3Rpb24gcGFkRW5kKFxuICBzdHI6IHN0cmluZyxcbiAgbGVuZ3RoOiBudW1iZXIsXG4gIGNoYXI6IHN0cmluZyA9IFwiIFwiXG4pOiBzdHJpbmcge1xuICBpZiAoY2hhci5sZW5ndGggIT09IDEpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBjaGFyYWN0ZXIgbGVuZ3RoIGZvciBwYWRkaW5nLiBtdXN0IGJlIG9uZSFcIik7XG4gIHJldHVybiBzdHIucGFkRW5kKGxlbmd0aCwgY2hhcik7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFJlcGxhY2VzIHBsYWNlaG9sZGVycyBpbiBhIHN0cmluZyB3aXRoIHByb3ZpZGVkIHZhbHVlcy5cbiAqIEBzdW1tYXJ5IEludGVycG9sYXRlcyBhIHN0cmluZyBieSByZXBsYWNpbmcgcGxhY2Vob2xkZXJzIG9mIHRoZSBmb3JtICR7dmFyaWFibGVOYW1lfVxuICogd2l0aCBjb3JyZXNwb25kaW5nIHZhbHVlcyBmcm9tIHRoZSBwcm92aWRlZCBvYmplY3QuIElmIGEgcGxhY2Vob2xkZXIgZG9lc24ndCBoYXZlXG4gKiBhIGNvcnJlc3BvbmRpbmcgdmFsdWUsIGl0IGlzIGxlZnQgdW5jaGFuZ2VkIGluIHRoZSBzdHJpbmcuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGlucHV0IC0gVGhlIGlucHV0IHN0cmluZyBjb250YWluaW5nIHBsYWNlaG9sZGVycyB0byBiZSByZXBsYWNlZC5cbiAqIEBwYXJhbSB7UmVjb3JkPHN0cmluZywgbnVtYmVyIHwgc3RyaW5nPn0gdmFsdWVzIC0gQW4gb2JqZWN0IGNvbnRhaW5pbmcga2V5LXZhbHVlIHBhaXJzIGZvciByZXBsYWNlbWVudC5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGludGVycG9sYXRlZCBzdHJpbmcgd2l0aCBwbGFjZWhvbGRlcnMgcmVwbGFjZWQgYnkgdGhlaXIgY29ycmVzcG9uZGluZyB2YWx1ZXMuXG4gKlxuICogQGZ1bmN0aW9uIHBhdGNoUGxhY2Vob2xkZXJzXG4gKlxuICogQG1lcm1haWRcbiAqIHNlcXVlbmNlRGlhZ3JhbVxuICogICBwYXJ0aWNpcGFudCBDYWxsZXJcbiAqICAgcGFydGljaXBhbnQgcGF0Y2hTdHJpbmdcbiAqICAgcGFydGljaXBhbnQgU3RyaW5nLnJlcGxhY2VcbiAqICAgQ2FsbGVyLT4+cGF0Y2hTdHJpbmc6IENhbGwgd2l0aCBpbnB1dCBhbmQgdmFsdWVzXG4gKiAgIHBhdGNoU3RyaW5nLT4+U3RyaW5nLnJlcGxhY2U6IENhbGwgd2l0aCByZWdleCBhbmQgcmVwbGFjZW1lbnQgZnVuY3Rpb25cbiAqICAgU3RyaW5nLnJlcGxhY2UtPj5wYXRjaFN0cmluZzogUmV0dXJuIHJlcGxhY2VkIHN0cmluZ1xuICogICBwYXRjaFN0cmluZy0tPj5DYWxsZXI6IFJldHVybiBwYXRjaGVkIHN0cmluZ1xuICpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6dXRpbHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhdGNoUGxhY2Vob2xkZXJzKFxuICBpbnB1dDogc3RyaW5nLFxuICB2YWx1ZXM6IFJlY29yZDxzdHJpbmcsIG51bWJlciB8IHN0cmluZz5cbik6IHN0cmluZyB7XG4gIHJldHVybiBpbnB1dC5yZXBsYWNlKFxuICAgIC9cXCRcXHsoW2EtekEtWjAtOV9dKylcXH0vZyxcbiAgICAobWF0Y2gsIHZhcmlhYmxlKSA9PiAodmFsdWVzW3ZhcmlhYmxlIGFzIHN0cmluZ10gYXMgc3RyaW5nKSB8fCBtYXRjaFxuICApO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBSZXBsYWNlcyBvY2N1cnJlbmNlcyBvZiBrZXlzIHdpdGggdGhlaXIgY29ycmVzcG9uZGluZyB2YWx1ZXMgaW4gYSBzdHJpbmcuXG4gKiBAc3VtbWFyeSBJdGVyYXRlcyB0aHJvdWdoIGEgc2V0IG9mIGtleS12YWx1ZSBwYWlycyBhbmQgcmVwbGFjZXMgYWxsIG9jY3VycmVuY2VzIG9mIGVhY2gga2V5XG4gKiBpbiB0aGUgaW5wdXQgc3RyaW5nIHdpdGggaXRzIGNvcnJlc3BvbmRpbmcgdmFsdWUuIFN1cHBvcnRzIHJlZ3VsYXIgZXhwcmVzc2lvbiBmbGFncyBmb3IgY3VzdG9taXplZCByZXBsYWNlbWVudC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXQgLSBUaGUgaW5wdXQgc3RyaW5nIGluIHdoaWNoIHJlcGxhY2VtZW50cyB3aWxsIGJlIG1hZGUuXG4gKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIG51bWJlciB8IHN0cmluZz59IHZhbHVlcyAtIEFuIG9iamVjdCBjb250YWluaW5nIGtleS12YWx1ZSBwYWlycyBmb3IgcmVwbGFjZW1lbnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gW2ZsYWdzPVwiZ1wiXSAtIFJlZ3VsYXIgZXhwcmVzc2lvbiBmbGFncyB0byBjb250cm9sIHRoZSByZXBsYWNlbWVudCBiZWhhdmlvci5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIHN0cmluZyB3aXRoIGFsbCBzcGVjaWZpZWQgcmVwbGFjZW1lbnRzIGFwcGxpZWQuXG4gKlxuICogQGZ1bmN0aW9uIHBhdGNoU3RyaW5nXG4gKlxuICogQG1lbWJlck9mIG1vZHVsZTp1dGlsc1xuICovXG5leHBvcnQgZnVuY3Rpb24gcGF0Y2hTdHJpbmcoXG4gIGlucHV0OiBzdHJpbmcsXG4gIHZhbHVlczogUmVjb3JkPHN0cmluZywgbnVtYmVyIHwgc3RyaW5nPixcbiAgZmxhZ3M6IHN0cmluZyA9IFwiZ1wiXG4pOiBzdHJpbmcge1xuICBPYmplY3QuZW50cmllcyh2YWx1ZXMpLmZvckVhY2goKFtrZXksIHZhbF0pID0+IHtcbiAgICBjb25zdCByZWdleHAgPSBuZXcgUmVnRXhwKGVzY2FwZVJlZ0V4cChrZXkpLCBmbGFncyk7XG4gICAgaW5wdXQgPSBpbnB1dC5yZXBsYWNlKHJlZ2V4cCwgdmFsIGFzIHN0cmluZyk7XG4gIH0pO1xuICByZXR1cm4gaW5wdXQ7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIENvbnZlcnRzIGEgc3RyaW5nIHRvIGNhbWVsQ2FzZS5cbiAqIEBzdW1tYXJ5IFRyYW5zZm9ybXMgdGhlIGlucHV0IHN0cmluZyBpbnRvIGNhbWVsQ2FzZSBmb3JtYXQsIHdoZXJlIHdvcmRzIGFyZSBqb2luZWQgd2l0aG91dCBzcGFjZXNcbiAqIGFuZCBlYWNoIHdvcmQgYWZ0ZXIgdGhlIGZpcnN0IHN0YXJ0cyB3aXRoIGEgY2FwaXRhbCBsZXR0ZXIuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBUaGUgaW5wdXQgc3RyaW5nIHRvIGJlIGNvbnZlcnRlZC5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGlucHV0IHN0cmluZyBjb252ZXJ0ZWQgdG8gY2FtZWxDYXNlLlxuICpcbiAqIEBmdW5jdGlvbiB0b0NhbWVsQ2FzZVxuICpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6dXRpbHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvQ2FtZWxDYXNlKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0ZXh0XG4gICAgLnJlcGxhY2UoLyg/Ol5cXHd8W0EtWl18XFxiXFx3KS9nLCAod29yZCwgaW5kZXgpID0+XG4gICAgICBpbmRleCA9PT0gMCA/IHdvcmQudG9Mb3dlckNhc2UoKSA6IHdvcmQudG9VcHBlckNhc2UoKVxuICAgIClcbiAgICAucmVwbGFjZSgvXFxzKy9nLCBcIlwiKTtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQ29udmVydHMgYSBzdHJpbmcgdG8gRU5WSVJPTk1FTlRfVkFSSUFCTEUgZm9ybWF0LlxuICogQHN1bW1hcnkgVHJhbnNmb3JtcyB0aGUgaW5wdXQgc3RyaW5nIGludG8gdXBwZXJjYXNlIHdpdGggd29yZHMgc2VwYXJhdGVkIGJ5IHVuZGVyc2NvcmVzLFxuICogdHlwaWNhbGx5IHVzZWQgZm9yIGVudmlyb25tZW50IHZhcmlhYmxlIG5hbWVzLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gVGhlIGlucHV0IHN0cmluZyB0byBiZSBjb252ZXJ0ZWQuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBpbnB1dCBzdHJpbmcgY29udmVydGVkIHRvIEVOVklST05NRU5UX1ZBUklBQkxFIGZvcm1hdC5cbiAqXG4gKiBAZnVuY3Rpb24gdG9FTlZGb3JtYXRcbiAqXG4gKiBAbWVtYmVyT2YgbW9kdWxlOnV0aWxzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0VOVkZvcm1hdCh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gdG9TbmFrZUNhc2UodGV4dCkudG9VcHBlckNhc2UoKTtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQ29udmVydHMgYSBzdHJpbmcgdG8gc25ha2VfY2FzZS5cbiAqIEBzdW1tYXJ5IFRyYW5zZm9ybXMgdGhlIGlucHV0IHN0cmluZyBpbnRvIGxvd2VyY2FzZSB3aXRoIHdvcmRzIHNlcGFyYXRlZCBieSB1bmRlcnNjb3Jlcy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIFRoZSBpbnB1dCBzdHJpbmcgdG8gYmUgY29udmVydGVkLlxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgaW5wdXQgc3RyaW5nIGNvbnZlcnRlZCB0byBzbmFrZV9jYXNlLlxuICpcbiAqIEBmdW5jdGlvbiB0b1NuYWtlQ2FzZVxuICpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6dXRpbHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvU25ha2VDYXNlKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0ZXh0XG4gICAgLnJlcGxhY2UoLyhbYS16XSkoW0EtWl0pL2csIFwiJDFfJDJcIilcbiAgICAucmVwbGFjZSgvW1xccy1dKy9nLCBcIl9cIilcbiAgICAudG9Mb3dlckNhc2UoKTtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQ29udmVydHMgYSBzdHJpbmcgdG8ga2ViYWItY2FzZS5cbiAqIEBzdW1tYXJ5IFRyYW5zZm9ybXMgdGhlIGlucHV0IHN0cmluZyBpbnRvIGxvd2VyY2FzZSB3aXRoIHdvcmRzIHNlcGFyYXRlZCBieSBoeXBoZW5zLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gVGhlIGlucHV0IHN0cmluZyB0byBiZSBjb252ZXJ0ZWQuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBpbnB1dCBzdHJpbmcgY29udmVydGVkIHRvIGtlYmFiLWNhc2UuXG4gKlxuICogQGZ1bmN0aW9uIHRvS2ViYWJDYXNlXG4gKlxuICogQG1lbWJlck9mIG1vZHVsZTp1dGlsc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdG9LZWJhYkNhc2UodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRleHRcbiAgICAucmVwbGFjZSgvKFthLXpdKShbQS1aXSkvZywgXCIkMS0kMlwiKVxuICAgIC5yZXBsYWNlKC9bXFxzX10rL2csIFwiLVwiKVxuICAgIC50b0xvd2VyQ2FzZSgpO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBDb252ZXJ0cyBhIHN0cmluZyB0byBQYXNjYWxDYXNlLlxuICogQHN1bW1hcnkgVHJhbnNmb3JtcyB0aGUgaW5wdXQgc3RyaW5nIGludG8gUGFzY2FsQ2FzZSBmb3JtYXQsIHdoZXJlIHdvcmRzIGFyZSBqb2luZWQgd2l0aG91dCBzcGFjZXNcbiAqIGFuZCBlYWNoIHdvcmQgc3RhcnRzIHdpdGggYSBjYXBpdGFsIGxldHRlci5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIFRoZSBpbnB1dCBzdHJpbmcgdG8gYmUgY29udmVydGVkLlxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgaW5wdXQgc3RyaW5nIGNvbnZlcnRlZCB0byBQYXNjYWxDYXNlLlxuICpcbiAqIEBmdW5jdGlvbiB0b1Bhc2NhbENhc2VcbiAqXG4gKiBAbWVtYmVyT2YgbW9kdWxlOnV0aWxzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b1Bhc2NhbENhc2UodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRleHRcbiAgICAucmVwbGFjZSgvKD86Xlxcd3xbQS1aXXxcXGJcXHcpL2csICh3b3JkKSA9PiB3b3JkLnRvVXBwZXJDYXNlKCkpXG4gICAgLnJlcGxhY2UoL1xccysvZywgXCJcIik7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEVzY2FwZXMgc3BlY2lhbCBjaGFyYWN0ZXJzIGluIGEgc3RyaW5nIGZvciB1c2UgaW4gYSByZWd1bGFyIGV4cHJlc3Npb24uXG4gKiBAc3VtbWFyeSBBZGRzIGJhY2tzbGFzaGVzIGJlZm9yZSBjaGFyYWN0ZXJzIHRoYXQgaGF2ZSBzcGVjaWFsIG1lYW5pbmcgaW4gcmVndWxhciBleHByZXNzaW9ucyxcbiAqIGFsbG93aW5nIHRoZSBzdHJpbmcgdG8gYmUgdXNlZCBhcyBhIGxpdGVyYWwgbWF0Y2ggaW4gYSBSZWdFeHAuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyAtIFRoZSBzdHJpbmcgdG8gZXNjYXBlIGZvciByZWd1bGFyIGV4cHJlc3Npb24gdXNlLlxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgZXNjYXBlZCBzdHJpbmcgc2FmZSBmb3IgdXNlIGluIHJlZ3VsYXIgZXhwcmVzc2lvbnMuXG4gKlxuICogQGZ1bmN0aW9uIGVzY2FwZVJlZ0V4cFxuICpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6dXRpbHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZVJlZ0V4cChzdHJpbmc6IHN0cmluZykge1xuICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1suKis/XiR7fSgpfFtcXF1cXFxcXS9nLCBcIlxcXFwkJlwiKTsgLy8gJCYgbWVhbnMgdGhlIHdob2xlIG1hdGNoZWQgc3RyaW5nXG59XG4iLCIvKipcbiAqIEBkZXNjcmlwdGlvbiBEZWZhdWx0IGVuY29kaW5nIGZvciB0ZXh0IG9wZXJhdGlvbnMuXG4gKiBAc3VtbWFyeSBUaGUgc3RhbmRhcmQgVVRGLTggZW5jb2RpbmcgdXNlZCBmb3IgdGV4dCBwcm9jZXNzaW5nLlxuICogQGNvbnN0IHtzdHJpbmd9IEVuY29kaW5nXG4gKiBAbWVtYmVyT2YgbW9kdWxlOnV0aWxzXG4gKi9cbmV4cG9ydCBjb25zdCBFbmNvZGluZyA9IFwidXRmLThcIjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gUmVndWxhciBleHByZXNzaW9uIGZvciBzZW1hbnRpYyB2ZXJzaW9uaW5nLlxuICogQHN1bW1hcnkgQSByZWdleCBwYXR0ZXJuIHRvIG1hdGNoIGFuZCBwYXJzZSBzZW1hbnRpYyB2ZXJzaW9uIHN0cmluZ3MuXG4gKiBAY29uc3Qge1JlZ0V4cH0gU2VtVmVyc2lvblJlZ2V4XG4gKiBAbWVtYmVyT2YgbW9kdWxlOnV0aWxzXG4gKi9cbmV4cG9ydCBjb25zdCBTZW1WZXJzaW9uUmVnZXggPVxuICAvXihcXGQrKVxcLihcXGQrKVxcLihcXGQrKSg/Oi0oWzAtOUEtWmEtei1dKyg/OlxcLlswLTlBLVphLXpdKSkpL2c7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEVudW0gZm9yIHNlbWFudGljIHZlcnNpb24gY29tcG9uZW50cy5cbiAqIEBzdW1tYXJ5IERlZmluZXMgdGhlIHRocmVlIGxldmVscyBvZiBzZW1hbnRpYyB2ZXJzaW9uaW5nOiBQQVRDSCwgTUlOT1IsIGFuZCBNQUpPUi5cbiAqIEBlbnVtIHtzdHJpbmd9XG4gKiBAbWVtYmVyT2YgbW9kdWxlOnV0aWxzXG4gKi9cbmV4cG9ydCBlbnVtIFNlbVZlcnNpb24ge1xuICAvKiogUGF0Y2ggdmVyc2lvbiBmb3IgYmFja3dhcmRzLWNvbXBhdGlibGUgYnVnIGZpeGVzLiAqL1xuICBQQVRDSCA9IFwicGF0Y2hcIixcbiAgLyoqIE1pbm9yIHZlcnNpb24gZm9yIGJhY2t3YXJkcy1jb21wYXRpYmxlIG5ldyBmZWF0dXJlcy4gKi9cbiAgTUlOT1IgPSBcIm1pbm9yXCIsXG4gIC8qKiBNYWpvciB2ZXJzaW9uIGZvciBjaGFuZ2VzIHRoYXQgYnJlYWsgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuICovXG4gIE1BSk9SID0gXCJtYWpvclwiLFxufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBGbGFnIHRvIGluZGljYXRlIG5vbi1DSSBlbnZpcm9ubWVudC5cbiAqIEBzdW1tYXJ5IFVzZWQgdG8gc3BlY2lmeSB0aGF0IGEgY29tbWFuZCBzaG91bGQgcnVuIG91dHNpZGUgb2YgYSBDb250aW51b3VzIEludGVncmF0aW9uIGVudmlyb25tZW50LlxuICogQGNvbnN0IHtzdHJpbmd9IE5vQ0lGTGFnXG4gKiBAbWVtYmVyT2YgbW9kdWxlOnV0aWxzXG4gKi9cbmV4cG9ydCBjb25zdCBOb0NJRkxhZyA9IFwiLW5vLWNpXCI7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEtleSBmb3IgdGhlIHNldHVwIHNjcmlwdCBpbiBwYWNrYWdlLmpzb24uXG4gKiBAc3VtbWFyeSBJZGVudGlmaWVzIHRoZSBzY3JpcHQgdGhhdCBydW5zIGFmdGVyIHBhY2thZ2UgaW5zdGFsbGF0aW9uLlxuICogQGNvbnN0IHtzdHJpbmd9IFNldHVwU2NyaXB0S2V5XG4gKiBAbWVtYmVyT2YgbW9kdWxlOnV0aWxzXG4gKi9cbmV4cG9ydCBjb25zdCBTZXR1cFNjcmlwdEtleSA9IFwicG9zdGluc3RhbGxcIjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gRW51bSBmb3IgdmFyaW91cyBhdXRoZW50aWNhdGlvbiB0b2tlbnMuXG4gKiBAc3VtbWFyeSBEZWZpbmVzIHRoZSBmaWxlIG5hbWVzIGZvciBzdG9yaW5nIGRpZmZlcmVudCB0eXBlcyBvZiBhdXRoZW50aWNhdGlvbiB0b2tlbnMuXG4gKiBAZW51bSB7c3RyaW5nfVxuICogQG1lbWJlck9mIG1vZHVsZTp1dGlsc1xuICovXG5leHBvcnQgZW51bSBUb2tlbnMge1xuICAvKiogR2l0IGF1dGhlbnRpY2F0aW9uIHRva2VuIGZpbGUgbmFtZS4gKi9cbiAgR0lUID0gXCIudG9rZW5cIixcbiAgLyoqIE5QTSBhdXRoZW50aWNhdGlvbiB0b2tlbiBmaWxlIG5hbWUuICovXG4gIE5QTSA9IFwiLm5wbXRva2VuXCIsXG4gIC8qKiBEb2NrZXIgYXV0aGVudGljYXRpb24gdG9rZW4gZmlsZSBuYW1lLiAqL1xuICBET0NLRVIgPSBcIi5kb2NrZXJ0b2tlblwiLFxuICAvKiogQ29uZmx1ZW5jZSBhdXRoZW50aWNhdGlvbiB0b2tlbiBmaWxlIG5hbWUuICovXG4gIENPTkZMVUVOQ0UgPSBcIi5jb25mbHVlbmNlLXRva2VuXCIsXG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIENvZGUgdXNlZCB0byBpbmRpY2F0ZSBhbiBvcGVyYXRpb24gd2FzIGFib3J0ZWQuXG4gKiBAc3VtbWFyeSBTdGFuZGFyZCBtZXNzYWdlIHVzZWQgd2hlbiBhIHByb2Nlc3MgaXMgbWFudWFsbHkgdGVybWluYXRlZC5cbiAqIEBjb25zdCB7c3RyaW5nfSBBYm9ydENvZGVcbiAqIEBtZW1iZXJPZiBtb2R1bGU6dXRpbHNcbiAqL1xuZXhwb3J0IGNvbnN0IEFib3J0Q29kZSA9IFwiQWJvcnRlZFwiO1xuIiwiaW1wb3J0IHsgRW5jb2RpbmcgfSBmcm9tIFwiLi4vdXRpbHMvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBPdXRwdXRXcml0ZXIgfSBmcm9tIFwiLi9PdXRwdXRXcml0ZXJcIjtcbmltcG9ydCB7IFByb21pc2VFeGVjdXRvciB9IGZyb20gXCIuLi91dGlscy90eXBlc1wiO1xuaW1wb3J0IHsgT3V0cHV0VHlwZSB9IGZyb20gXCIuL3R5cGVzXCI7XG5pbXBvcnQgeyBzdHlsZSB9IGZyb20gXCJzdHlsZWQtc3RyaW5nLWJ1aWxkZXJcIjtcbmltcG9ydCB7IExvZ2dlciwgTG9nZ2luZyB9IGZyb20gXCJAZGVjYWYtdHMvbG9nZ2luZ1wiO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBBIHN0YW5kYXJkIG91dHB1dCB3cml0ZXIgZm9yIGhhbmRsaW5nIGNvbW1hbmQgZXhlY3V0aW9uIG91dHB1dC5cbiAqIEBzdW1tYXJ5IFRoaXMgY2xhc3MgaW1wbGVtZW50cyB0aGUgT3V0cHV0V3JpdGVyIGludGVyZmFjZSBhbmQgcHJvdmlkZXMgbWV0aG9kcyBmb3JcbiAqIGhhbmRsaW5nIHZhcmlvdXMgdHlwZXMgb2Ygb3V0cHV0IGZyb20gY29tbWFuZCBleGVjdXRpb24sIGluY2x1ZGluZyBzdGFuZGFyZCBvdXRwdXQsXG4gKiBlcnJvciBvdXRwdXQsIGFuZCBleGl0IGNvZGVzLiBJdCBhbHNvIGluY2x1ZGVzIHV0aWxpdHkgbWV0aG9kcyBmb3IgcGFyc2luZyBjb21tYW5kc1xuICogYW5kIHJlc29sdmluZyBvciByZWplY3RpbmcgcHJvbWlzZXMgYmFzZWQgb24gZXhlY3V0aW9uIHJlc3VsdHMuXG4gKlxuICogQHRlbXBsYXRlIFIgLSBUaGUgdHlwZSBvZiB0aGUgcmVzb2x2ZWQgdmFsdWUsIGRlZmF1bHRpbmcgdG8gc3RyaW5nLlxuICpcbiAqIEBwYXJhbSBjbWQgLSBUaGUgY29tbWFuZCBzdHJpbmcgdG8gYmUgZXhlY3V0ZWQuXG4gKiBAcGFyYW0gbG9jayAtIEEgUHJvbWlzZUV4ZWN1dG9yIHRvIGNvbnRyb2wgdGhlIGFzeW5jaHJvbm91cyBmbG93LlxuICogQHBhcmFtIGFyZ3MgLSBBZGRpdGlvbmFsIGFyZ3VtZW50cyAodW51c2VkIGluIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uKS5cbiAqXG4gKiBAY2xhc3NcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBTdGFuZGFyZE91dHB1dFdyaXRlciB9IGZyb20gJ0BkZWNhZi10cy91dGlscyc7XG4gKiBpbXBvcnQgeyBQcm9taXNlRXhlY3V0b3IgfSBmcm9tICdAZGVjYWYtdHMvdXRpbHMnO1xuICogXG4gKiAvLyBDcmVhdGUgYSBwcm9taXNlIGV4ZWN1dG9yXG4gKiBjb25zdCBleGVjdXRvcjogUHJvbWlzZUV4ZWN1dG9yPHN0cmluZz4gPSB7XG4gKiAgIHJlc29sdmU6ICh2YWx1ZSkgPT4gY29uc29sZS5sb2coYFJlc29sdmVkOiAke3ZhbHVlfWApLFxuICogICByZWplY3Q6IChlcnJvcikgPT4gY29uc29sZS5lcnJvcihgUmVqZWN0ZWQ6ICR7ZXJyb3IubWVzc2FnZX1gKVxuICogfTtcbiAqIFxuICogLy8gQ3JlYXRlIGEgc3RhbmRhcmQgb3V0cHV0IHdyaXRlclxuICogY29uc3Qgd3JpdGVyID0gbmV3IFN0YW5kYXJkT3V0cHV0V3JpdGVyKCdscyAtbGEnLCBleGVjdXRvcik7XG4gKiBcbiAqIC8vIFVzZSB0aGUgd3JpdGVyIHRvIGhhbmRsZSBjb21tYW5kIG91dHB1dFxuICogd3JpdGVyLmRhdGEoJ0ZpbGUgbGlzdCBvdXRwdXQuLi4nKTtcbiAqIHdyaXRlci5leGl0KDAsIFsnQ29tbWFuZCBleGVjdXRlZCBzdWNjZXNzZnVsbHknXSk7XG4gKiBgYGBcbiAqXG4gKiBAbWVybWFpZFxuICogc2VxdWVuY2VEaWFncmFtXG4gKiAgIHBhcnRpY2lwYW50IENsaWVudFxuICogICBwYXJ0aWNpcGFudCBTdGFuZGFyZE91dHB1dFdyaXRlclxuICogICBwYXJ0aWNpcGFudCBMb2dnZXJcbiAqICAgcGFydGljaXBhbnQgUHJvbWlzZUV4ZWN1dG9yXG4gKiAgIFxuICogICBDbGllbnQtPj5TdGFuZGFyZE91dHB1dFdyaXRlcjogbmV3IFN0YW5kYXJkT3V0cHV0V3JpdGVyKGNtZCwgbG9jaylcbiAqICAgU3RhbmRhcmRPdXRwdXRXcml0ZXItPj5Mb2dnZXI6IExvZ2dpbmcuZm9yKGNtZClcbiAqICAgXG4gKiAgIENsaWVudC0+PlN0YW5kYXJkT3V0cHV0V3JpdGVyOiBkYXRhKGNodW5rKVxuICogICBTdGFuZGFyZE91dHB1dFdyaXRlci0+PlN0YW5kYXJkT3V0cHV0V3JpdGVyOiBsb2coXCJzdGRvdXRcIiwgY2h1bmspXG4gKiAgIFN0YW5kYXJkT3V0cHV0V3JpdGVyLT4+TG9nZ2VyOiBsb2dnZXIuaW5mbyhsb2cpXG4gKiAgIFxuICogICBDbGllbnQtPj5TdGFuZGFyZE91dHB1dFdyaXRlcjogZXJyb3IoY2h1bmspXG4gKiAgIFN0YW5kYXJkT3V0cHV0V3JpdGVyLT4+U3RhbmRhcmRPdXRwdXRXcml0ZXI6IGxvZyhcInN0ZGVyclwiLCBjaHVuaylcbiAqICAgU3RhbmRhcmRPdXRwdXRXcml0ZXItPj5Mb2dnZXI6IGxvZ2dlci5pbmZvKGxvZylcbiAqICAgXG4gKiAgIENsaWVudC0+PlN0YW5kYXJkT3V0cHV0V3JpdGVyOiBleGl0KGNvZGUsIGxvZ3MpXG4gKiAgIFN0YW5kYXJkT3V0cHV0V3JpdGVyLT4+U3RhbmRhcmRPdXRwdXRXcml0ZXI6IGxvZyhcInN0ZG91dFwiLCBleGl0TWVzc2FnZSlcbiAqICAgYWx0IGNvZGUgPT09IDBcbiAqICAgICBTdGFuZGFyZE91dHB1dFdyaXRlci0+PlN0YW5kYXJkT3V0cHV0V3JpdGVyOiByZXNvbHZlKGxvZ3MpXG4gKiAgICAgU3RhbmRhcmRPdXRwdXRXcml0ZXItPj5Qcm9taXNlRXhlY3V0b3I6IGxvY2sucmVzb2x2ZShyZWFzb24pXG4gKiAgIGVsc2UgY29kZSAhPT0gMFxuICogICAgIFN0YW5kYXJkT3V0cHV0V3JpdGVyLT4+U3RhbmRhcmRPdXRwdXRXcml0ZXI6IHJlamVjdChlcnJvcilcbiAqICAgICBTdGFuZGFyZE91dHB1dFdyaXRlci0+PlByb21pc2VFeGVjdXRvcjogbG9jay5yZWplY3QocmVhc29uKVxuICogICBlbmRcbiAqL1xuZXhwb3J0IGNsYXNzIFN0YW5kYXJkT3V0cHV0V3JpdGVyPFIgPSBzdHJpbmc+IGltcGxlbWVudHMgT3V0cHV0V3JpdGVyIHtcbiAgcHJvdGVjdGVkIGxvZ2dlcjogTG9nZ2VyO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBjbWQ6IHN0cmluZyxcbiAgICBwcm90ZWN0ZWQgbG9jazogUHJvbWlzZUV4ZWN1dG9yPFI+LFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICAuLi5hcmdzOiB1bmtub3duW11cbiAgKSB7XG4gICAgdGhpcy5sb2dnZXIgPSBMb2dnaW5nLmZvcih0aGlzLmNtZCk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIExvZ3Mgb3V0cHV0IHRvIHRoZSBjb25zb2xlLlxuICAgKiBAc3VtbWFyeSBGb3JtYXRzIGFuZCBsb2dzIHRoZSBnaXZlbiBkYXRhIHdpdGggYSB0aW1lc3RhbXAgYW5kIHR5cGUgaW5kaWNhdG9yLlxuICAgKlxuICAgKiBAcGFyYW0gdHlwZSAtIFRoZSB0eXBlIG9mIG91dHB1dCAoc3Rkb3V0IG9yIHN0ZGVycikuXG4gICAqIEBwYXJhbSBkYXRhIC0gVGhlIGRhdGEgdG8gYmUgbG9nZ2VkLlxuICAgKi9cbiAgcHJvdGVjdGVkIGxvZyh0eXBlOiBPdXRwdXRUeXBlLCBkYXRhOiBzdHJpbmcgfCBCdWZmZXIpIHtcbiAgICBkYXRhID0gQnVmZmVyLmlzQnVmZmVyKGRhdGEpID8gZGF0YS50b1N0cmluZyhFbmNvZGluZykgOiBkYXRhO1xuICAgIGNvbnN0IGxvZyA9IHR5cGUgPT09IFwic3RkZXJyXCIgPyBzdHlsZShkYXRhKS5yZWQudGV4dCA6IGRhdGE7XG4gICAgdGhpcy5sb2dnZXIuaW5mbyhsb2cpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBIYW5kbGVzIHN0YW5kYXJkIG91dHB1dCBkYXRhLlxuICAgKiBAc3VtbWFyeSBMb2dzIHRoZSBnaXZlbiBjaHVuayBhcyBzdGFuZGFyZCBvdXRwdXQuXG4gICAqXG4gICAqIEBwYXJhbSBjaHVuayAtIFRoZSBkYXRhIGNodW5rIHRvIGJlIGxvZ2dlZC5cbiAgICovXG4gIGRhdGEoY2h1bms6IGFueSkge1xuICAgIHRoaXMubG9nKFwic3Rkb3V0XCIsIFN0cmluZyhjaHVuaykpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBIYW5kbGVzIGVycm9yIG91dHB1dCBkYXRhLlxuICAgKiBAc3VtbWFyeSBMb2dzIHRoZSBnaXZlbiBjaHVuayBhcyBlcnJvciBvdXRwdXQuXG4gICAqXG4gICAqIEBwYXJhbSBjaHVuayAtIFRoZSBlcnJvciBkYXRhIGNodW5rIHRvIGJlIGxvZ2dlZC5cbiAgICovXG4gIGVycm9yKGNodW5rOiBhbnkpIHtcbiAgICB0aGlzLmxvZyhcInN0ZGVyclwiLCBTdHJpbmcoY2h1bmspKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gSGFuZGxlcyBlcnJvciBvYmplY3RzLlxuICAgKiBAc3VtbWFyeSBMb2dzIHRoZSBlcnJvciBtZXNzYWdlIGZyb20gdGhlIGdpdmVuIEVycm9yIG9iamVjdC5cbiAgICpcbiAgICogQHBhcmFtIGVyciAtIFRoZSBFcnJvciBvYmplY3QgdG8gYmUgbG9nZ2VkLlxuICAgKi9cbiAgZXJyb3JzKGVycjogRXJyb3IpIHtcbiAgICB0aGlzLmxvZyhcInN0ZGVyclwiLCBgRXJyb3IgZXhlY3V0aW5nIGNvbW1hbmQgZXhpdGVkIDogJHtlcnJ9YCk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEhhbmRsZXMgdGhlIGV4aXQgb2YgYSBjb21tYW5kLlxuICAgKiBAc3VtbWFyeSBMb2dzIHRoZSBleGl0IGNvZGUgYW5kIHJlc29sdmVzIG9yIHJlamVjdHMgdGhlIHByb21pc2UgYmFzZWQgb24gdGhlIGNvZGUuXG4gICAqXG4gICAqIEBwYXJhbSBjb2RlIC0gVGhlIGV4aXQgY29kZSBvZiB0aGUgY29tbWFuZC5cbiAgICogQHBhcmFtIGxvZ3MgLSBBcnJheSBvZiBsb2cgbWVzc2FnZXMgdG8gYmUgcHJvY2Vzc2VkIGJlZm9yZSBleGl0aW5nLlxuICAgKi9cbiAgZXhpdChjb2RlOiBudW1iZXIgfCBzdHJpbmcsIGxvZ3M6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5sb2coXG4gICAgICBcInN0ZG91dFwiLFxuICAgICAgYGNvbW1hbmQgZXhpdGVkIGNvZGUgOiAke2NvZGUgPT09IDAgPyBzdHlsZShjb2RlLnRvU3RyaW5nKCkpLmdyZWVuLnRleHQgOiBzdHlsZShjb2RlID09PSBudWxsID8gXCJudWxsXCIgOiBjb2RlLnRvU3RyaW5nKCkpLnJlZC50ZXh0fWBcbiAgICApO1xuICAgIGlmIChjb2RlID09PSAwKSB7XG4gICAgICB0aGlzLnJlc29sdmUobG9ncy5tYXAoKGwpID0+IGwudHJpbSgpKS5qb2luKFwiXFxuXCIpIGFzIFIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlamVjdChuZXcgRXJyb3IobG9ncy5sZW5ndGggPyBsb2dzLmpvaW4oXCJcXG5cIikgOiBjb2RlLnRvU3RyaW5nKCkpKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFBhcnNlcyBhIGNvbW1hbmQgc3RyaW5nIG9yIGFycmF5IGludG8gY29tcG9uZW50cy5cbiAgICogQHN1bW1hcnkgQ29udmVydHMgdGhlIGNvbW1hbmQgaW50byBhIGNvbnNpc3RlbnQgZm9ybWF0IGFuZCBzdG9yZXMgaXQsIHRoZW4gcmV0dXJucyBpdCBzcGxpdCBpbnRvIGNvbW1hbmQgYW5kIGFyZ3VtZW50cy5cbiAgICpcbiAgICogQHBhcmFtIGNvbW1hbmQgLSBUaGUgY29tbWFuZCBhcyBhIHN0cmluZyBvciBhcnJheSBvZiBzdHJpbmdzLlxuICAgKiBAcmV0dXJuIEEgdHVwbGUgY29udGFpbmluZyB0aGUgY29tbWFuZCBhbmQgaXRzIGFyZ3VtZW50cyBhcyBzZXBhcmF0ZSBlbGVtZW50cy5cbiAgICovXG4gIHBhcnNlQ29tbWFuZChjb21tYW5kOiBzdHJpbmcgfCBzdHJpbmdbXSk6IFtzdHJpbmcsIHN0cmluZ1tdXSB7XG4gICAgY29tbWFuZCA9IHR5cGVvZiBjb21tYW5kID09PSBcInN0cmluZ1wiID8gY29tbWFuZC5zcGxpdChcIiBcIikgOiBjb21tYW5kO1xuICAgIHRoaXMuY21kID0gY29tbWFuZC5qb2luKFwiIFwiKTtcbiAgICByZXR1cm4gW2NvbW1hbmRbMF0sIGNvbW1hbmQuc2xpY2UoMSldO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBSZXNvbHZlcyB0aGUgcHJvbWlzZSB3aXRoIGEgc3VjY2VzcyBtZXNzYWdlLlxuICAgKiBAc3VtbWFyeSBMb2dzIGEgc3VjY2VzcyBtZXNzYWdlIGFuZCByZXNvbHZlcyB0aGUgcHJvbWlzZSB3aXRoIHRoZSBnaXZlbiByZWFzb24uXG4gICAqXG4gICAqIEBwYXJhbSByZWFzb24gLSBUaGUgcmVhc29uIGZvciByZXNvbHZpbmcgdGhlIHByb21pc2UuXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVzb2x2ZShyZWFzb246IFIpIHtcbiAgICB0aGlzLmxvZyhcbiAgICAgIFwic3Rkb3V0XCIsXG4gICAgICBgJHt0aGlzLmNtZH0gZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5OiAke3N0eWxlKHJlYXNvbiA/IFwicmFuIHRvIGNvbXBsZXRpb25cIiA6IChyZWFzb24gYXMgc3RyaW5nKSkuZ3JlZW59YFxuICAgICk7XG4gICAgdGhpcy5sb2NrLnJlc29sdmUocmVhc29uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmVqZWN0cyB0aGUgcHJvbWlzZSB3aXRoIGFuIGVycm9yIG1lc3NhZ2UuXG4gICAqIEBzdW1tYXJ5IExvZ3MgYW4gZXJyb3IgbWVzc2FnZSBhbmQgcmVqZWN0cyB0aGUgcHJvbWlzZSB3aXRoIHRoZSBnaXZlbiByZWFzb24uXG4gICAqXG4gICAqIEBwYXJhbSByZWFzb24gLSBUaGUgcmVhc29uIGZvciByZWplY3RpbmcgdGhlIHByb21pc2UsIGVpdGhlciBhIG51bWJlciAoZXhpdCBjb2RlKSBvciBhIHN0cmluZy5cbiAgICovXG4gIHByb3RlY3RlZCByZWplY3QocmVhc29uOiBudW1iZXIgfCBzdHJpbmcgfCBFcnJvcikge1xuICAgIGlmICghKHJlYXNvbiBpbnN0YW5jZW9mIEVycm9yKSkge1xuICAgICAgcmVhc29uID0gbmV3IEVycm9yKFxuICAgICAgICB0eXBlb2YgcmVhc29uID09PSBcIm51bWJlclwiID8gYEV4aXQgY29kZSAke3JlYXNvbn1gIDogcmVhc29uXG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLmxvZyhcbiAgICAgIFwic3RkZXJyXCIsXG4gICAgICBgJHt0aGlzLmNtZH0gZmFpbGVkIHRvIGV4ZWN1dGU6ICR7c3R5bGUocmVhc29uLm1lc3NhZ2UpLnJlZH1gXG4gICAgKTtcbiAgICB0aGlzLmxvY2sucmVqZWN0KHJlYXNvbik7XG4gIH1cbn1cbiIsImltcG9ydCB7XG4gIENoaWxkUHJvY2Vzc1dpdGhvdXROdWxsU3RyZWFtcyxcbiAgc3Bhd24sXG4gIFNwYXduT3B0aW9uc1dpdGhvdXRTdGRpbyxcbn0gZnJvbSBcImNoaWxkX3Byb2Nlc3NcIjtcbmltcG9ydCB7IFN0YW5kYXJkT3V0cHV0V3JpdGVyIH0gZnJvbSBcIi4uL3dyaXRlcnMvU3RhbmRhcmRPdXRwdXRXcml0ZXJcIjtcbmltcG9ydCB7IENvbW1hbmRSZXN1bHQgfSBmcm9tIFwiLi90eXBlc1wiO1xuaW1wb3J0IHsgT3V0cHV0V3JpdGVyQ29uc3RydWN0b3IgfSBmcm9tIFwiLi4vd3JpdGVycy90eXBlc1wiO1xuaW1wb3J0IHsgQWJvcnRDb2RlIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBMb2dnZXIsIExvZ2dpbmcgfSBmcm9tIFwiQGRlY2FmLXRzL2xvZ2dpbmdcIjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhIGxvY2tlZCB2ZXJzaW9uIG9mIGEgZnVuY3Rpb24uXG4gKiBAc3VtbWFyeSBUaGlzIGhpZ2hlci1vcmRlciBmdW5jdGlvbiB0YWtlcyBhIGZ1bmN0aW9uIGFuZCByZXR1cm5zIGEgbmV3IGZ1bmN0aW9uIHRoYXQgZW5zdXJlc1xuICogc2VxdWVudGlhbCBleGVjdXRpb24gb2YgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uLCBldmVuIHdoZW4gY2FsbGVkIG11bHRpcGxlIHRpbWVzIGNvbmN1cnJlbnRseS5cbiAqIEl0IHVzZXMgYSBQcm9taXNlLWJhc2VkIGxvY2tpbmcgbWVjaGFuaXNtIHRvIHF1ZXVlIGZ1bmN0aW9uIGNhbGxzLlxuICpcbiAqIEB0ZW1wbGF0ZSBSIC0gVGhlIHJldHVybiB0eXBlIG9mIHRoZSBpbnB1dCBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0gZiAtIFRoZSBmdW5jdGlvbiB0byBiZSBsb2NrZWQuIEl0IGNhbiB0YWtlIGFueSBudW1iZXIgb2YgcGFyYW1ldGVycyBhbmQgcmV0dXJuIGEgdmFsdWUgb2YgdHlwZSBSLlxuICogQHJldHVybiBBIG5ldyBmdW5jdGlvbiB3aXRoIHRoZSBzYW1lIHNpZ25hdHVyZSBhcyB0aGUgaW5wdXQgZnVuY3Rpb24sIGJ1dCB3aXRoIHNlcXVlbnRpYWwgZXhlY3V0aW9uIGd1YXJhbnRlZWQuXG4gKlxuICogQGZ1bmN0aW9uIGxvY2tpZnlcbiAqXG4gKiBAbWVybWFpZFxuICogc2VxdWVuY2VEaWFncmFtXG4gKiAgIHBhcnRpY2lwYW50IENhbGxlclxuICogICBwYXJ0aWNpcGFudCBMb2NrZWRGdW5jdGlvblxuICogICBwYXJ0aWNpcGFudCBPcmlnaW5hbEZ1bmN0aW9uXG4gKiAgIENhbGxlci0+PkxvY2tlZEZ1bmN0aW9uOiBDYWxsIHdpdGggcGFyYW1zXG4gKiAgIExvY2tlZEZ1bmN0aW9uLT4+TG9ja2VkRnVuY3Rpb246IENoZWNrIGN1cnJlbnQgbG9ja1xuICogICBhbHQgTG9jayBpcyByZXNvbHZlZFxuICogICAgIExvY2tlZEZ1bmN0aW9uLT4+T3JpZ2luYWxGdW5jdGlvbjogRXhlY3V0ZSB3aXRoIHBhcmFtc1xuICogICAgIE9yaWdpbmFsRnVuY3Rpb24tLT4+TG9ja2VkRnVuY3Rpb246IFJldHVybiByZXN1bHRcbiAqICAgICBMb2NrZWRGdW5jdGlvbi0tPj5DYWxsZXI6IFJldHVybiByZXN1bHRcbiAqICAgZWxzZSBMb2NrIGlzIHBlbmRpbmdcbiAqICAgICBMb2NrZWRGdW5jdGlvbi0+PkxvY2tlZEZ1bmN0aW9uOiBRdWV1ZSBleGVjdXRpb25cbiAqICAgICBMb2NrZWRGdW5jdGlvbi0tPj5DYWxsZXI6IFJldHVybiBwcm9taXNlXG4gKiAgICAgTm90ZSBvdmVyIExvY2tlZEZ1bmN0aW9uOiBXYWl0IGZvciBwcmV2aW91cyBleGVjdXRpb25cbiAqICAgICBMb2NrZWRGdW5jdGlvbi0+Pk9yaWdpbmFsRnVuY3Rpb246IEV4ZWN1dGUgd2l0aCBwYXJhbXNcbiAqICAgICBPcmlnaW5hbEZ1bmN0aW9uLS0+PkxvY2tlZEZ1bmN0aW9uOiBSZXR1cm4gcmVzdWx0XG4gKiAgICAgTG9ja2VkRnVuY3Rpb24tLT4+Q2FsbGVyOiBSZXNvbHZlIHByb21pc2Ugd2l0aCByZXN1bHRcbiAqICAgZW5kXG4gKiAgIExvY2tlZEZ1bmN0aW9uLT4+TG9ja2VkRnVuY3Rpb246IFVwZGF0ZSBsb2NrXG4gKlxuICogQG1lbWJlck9mIG1vZHVsZTp1dGlsc1xuICovXG5leHBvcnQgZnVuY3Rpb24gbG9ja2lmeTxSPihmOiAoLi4ucGFyYW1zOiB1bmtub3duW10pID0+IFIpIHtcbiAgbGV0IGxvY2s6IFByb21pc2U8UiB8IHZvaWQ+ID0gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIHJldHVybiAoLi4ucGFyYW1zOiB1bmtub3duW10pID0+IHtcbiAgICBjb25zdCByZXN1bHQgPSBsb2NrLnRoZW4oKCkgPT4gZiguLi5wYXJhbXMpKTtcbiAgICBsb2NrID0gcmVzdWx0LmNhdGNoKCgpID0+IHt9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBDaGFpbnMgbXVsdGlwbGUgYWJvcnQgc2lnbmFscyB0byBhIGNvbnRyb2xsZXIuXG4gKiBAc3VtbWFyeSBDcmVhdGVzIGEgbWVjaGFuaXNtIHdoZXJlIG11bHRpcGxlIGFib3J0IHNpZ25hbHMgY2FuIHRyaWdnZXIgYSBzaW5nbGUgYWJvcnQgY29udHJvbGxlci5cbiAqIFRoaXMgaXMgdXNlZnVsIGZvciBjb29yZGluYXRpbmcgY2FuY2VsbGF0aW9uIGFjcm9zcyBtdWx0aXBsZSBhc3luY2hyb25vdXMgb3BlcmF0aW9ucy5cbiAqXG4gKiBAcGFyYW0ge0Fib3J0Q29udHJvbGxlcn0gY29udHJvbGxlciAtIFRoZSBhYm9ydCBjb250cm9sbGVyIHRvIGJlIHRyaWdnZXJlZCBieSBzaWduYWxzLlxuICogQHBhcmFtIHsuLi5BYm9ydFNpZ25hbH0gc2lnbmFscyAtIE9uZSBvciBtb3JlIGFib3J0IHNpZ25hbHMgdGhhdCBjYW4gdHJpZ2dlciB0aGUgY29udHJvbGxlci5cbiAqIEByZXR1cm4ge0Fib3J0Q29udHJvbGxlcn0gVGhlIGlucHV0IGNvbnRyb2xsZXIsIG5vdyBjb25uZWN0ZWQgdG8gdGhlIHNpZ25hbHMuXG4gKlxuICogQGZ1bmN0aW9uIGNoYWluQWJvcnRDb250cm9sbGVyXG4gKlxuICogQG1lbWJlck9mIG1vZHVsZTp1dGlsc1xuICovXG5leHBvcnQgZnVuY3Rpb24gY2hhaW5BYm9ydENvbnRyb2xsZXIoXG4gIGNvbnRyb2xsZXI6IEFib3J0Q29udHJvbGxlcixcbiAgLi4uc2lnbmFsczogQWJvcnRTaWduYWxbXVxuKTogQWJvcnRDb250cm9sbGVyO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBDcmVhdGVzIGEgbmV3IGNvbnRyb2xsZXIgY2hhaW5lZCB0byBtdWx0aXBsZSBhYm9ydCBzaWduYWxzLlxuICogQHN1bW1hcnkgQ3JlYXRlcyBhIG5ldyBhYm9ydCBjb250cm9sbGVyIHRoYXQgd2lsbCBiZSB0cmlnZ2VyZWQgaWYgYW55IG9mIHRoZSBwcm92aWRlZCBzaWduYWxzIGFyZSBhYm9ydGVkLlxuICpcbiAqIEBwYXJhbSB7Li4uQWJvcnRTaWduYWx9IHNpZ25hbHMgLSBPbmUgb3IgbW9yZSBhYm9ydCBzaWduYWxzIHRoYXQgY2FuIHRyaWdnZXIgdGhlIG5ldyBjb250cm9sbGVyLlxuICogQHJldHVybiB7QWJvcnRDb250cm9sbGVyfSBBIG5ldyBhYm9ydCBjb250cm9sbGVyIGNvbm5lY3RlZCB0byB0aGUgc2lnbmFscy5cbiAqXG4gKiBAZnVuY3Rpb24gY2hhaW5BYm9ydENvbnRyb2xsZXJcbiAqXG4gKiBAbWVtYmVyT2YgbW9kdWxlOnV0aWxzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGFpbkFib3J0Q29udHJvbGxlcihcbiAgLi4uc2lnbmFsczogQWJvcnRTaWduYWxbXVxuKTogQWJvcnRDb250cm9sbGVyO1xuXG5leHBvcnQgZnVuY3Rpb24gY2hhaW5BYm9ydENvbnRyb2xsZXIoXG4gIGFyZ3VtZW50MDogQWJvcnRDb250cm9sbGVyIHwgQWJvcnRTaWduYWwsXG4gIC4uLnJlbWFpbmRlcjogQWJvcnRTaWduYWxbXVxuKTogQWJvcnRDb250cm9sbGVyIHtcbiAgbGV0IHNpZ25hbHM6IEFib3J0U2lnbmFsW107XG4gIGxldCBjb250cm9sbGVyOiBBYm9ydENvbnRyb2xsZXI7XG5cbiAgLy8gbm9ybWFsaXplIGFyZ3NcbiAgaWYgKGFyZ3VtZW50MCBpbnN0YW5jZW9mIEFib3J0U2lnbmFsKSB7XG4gICAgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICBzaWduYWxzID0gW2FyZ3VtZW50MCwgLi4ucmVtYWluZGVyXTtcbiAgfSBlbHNlIHtcbiAgICBjb250cm9sbGVyID0gYXJndW1lbnQwO1xuICAgIHNpZ25hbHMgPSByZW1haW5kZXI7XG4gIH1cblxuICAvLyBpZiB0aGUgY29udHJvbGxlciBpcyBhbHJlYWR5IGFib3J0ZWQsIGV4aXQgZWFybHlcbiAgaWYgKGNvbnRyb2xsZXIuc2lnbmFsLmFib3J0ZWQpIHtcbiAgICByZXR1cm4gY29udHJvbGxlcjtcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZXIgPSAoKSA9PiBjb250cm9sbGVyLmFib3J0KCk7XG5cbiAgZm9yIChjb25zdCBzaWduYWwgb2Ygc2lnbmFscykge1xuICAgIC8vIGNoZWNrIGJlZm9yZSBhZGRpbmchIChhbmQgYXNzdW1lIHRoZXJlIGlzIG5vIHBvc3NpYmxlIHdheSB0aGF0IHRoZSBzaWduYWwgY291bGRcbiAgICAvLyBhYm9ydCBiZXR3ZWVuIHRoZSBgaWZgIGNoZWNrIGFuZCBhZGRpbmcgdGhlIGV2ZW50IGxpc3RlbmVyKVxuICAgIGlmIChzaWduYWwuYWJvcnRlZCkge1xuICAgICAgY29udHJvbGxlci5hYm9ydCgpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgaGFuZGxlciwge1xuICAgICAgb25jZTogdHJ1ZSxcbiAgICAgIHNpZ25hbDogY29udHJvbGxlci5zaWduYWwsXG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gY29udHJvbGxlcjtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gU3Bhd25zIGEgY29tbWFuZCBhcyBhIGNoaWxkIHByb2Nlc3Mgd2l0aCBvdXRwdXQgaGFuZGxpbmcuXG4gKiBAc3VtbWFyeSBDcmVhdGVzIGEgY2hpbGQgcHJvY2VzcyB0byBleGVjdXRlIGEgY29tbWFuZCB3aXRoIHN1cHBvcnQgZm9yIHBpcGluZyBtdWx0aXBsZSBjb21tYW5kcyxcbiAqIGN1c3RvbSBvdXRwdXQgaGFuZGxpbmcsIGFuZCBhYm9ydCBjb250cm9sLiBUaGlzIGZ1bmN0aW9uIGhhbmRsZXMgdGhlIGxvdy1sZXZlbCBkZXRhaWxzIG9mXG4gKiBzcGF3bmluZyBwcm9jZXNzZXMgYW5kIGNvbm5lY3RpbmcgdGhlaXIgaW5wdXRzL291dHB1dHMgd2hlbiBwaXBpbmcgaXMgdXNlZC5cbiAqXG4gKiBAdGVtcGxhdGUgUiAtIFRoZSB0eXBlIG9mIHRoZSBwcm9jZXNzZWQgb3V0cHV0LCBkZWZhdWx0aW5nIHRvIHN0cmluZy5cbiAqIEBwYXJhbSB7U3RhbmRhcmRPdXRwdXRXcml0ZXI8Uj59IG91dHB1dCAtIFRoZSBvdXRwdXQgd3JpdGVyIHRvIGhhbmRsZSBjb21tYW5kIG91dHB1dC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBjb21tYW5kIC0gVGhlIGNvbW1hbmQgdG8gZXhlY3V0ZSwgY2FuIGluY2x1ZGUgcGlwZSBvcGVyYXRvcnMuXG4gKiBAcGFyYW0ge1NwYXduT3B0aW9uc1dpdGhvdXRTdGRpb30gb3B0cyAtIE9wdGlvbnMgZm9yIHRoZSBzcGF3bmVkIHByb2Nlc3MuXG4gKiBAcGFyYW0ge0Fib3J0Q29udHJvbGxlcn0gYWJvcnQgLSBDb250cm9sbGVyIHRvIGFib3J0IHRoZSBjb21tYW5kIGV4ZWN1dGlvbi5cbiAqIEBwYXJhbSB7TG9nZ2VyfSBsb2dnZXIgLSBMb2dnZXIgZm9yIHJlY29yZGluZyBjb21tYW5kIGV4ZWN1dGlvbiBkZXRhaWxzLlxuICogQHJldHVybiB7Q2hpbGRQcm9jZXNzV2l0aG91dE51bGxTdHJlYW1zfSBUaGUgc3Bhd25lZCBjaGlsZCBwcm9jZXNzLlxuICpcbiAqIEBmdW5jdGlvbiBzcGF3bkNvbW1hbmRcbiAqXG4gKiBAbWVtYmVyT2YgbW9kdWxlOnV0aWxzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzcGF3bkNvbW1hbmQ8UiA9IHN0cmluZz4oXG4gIG91dHB1dDogU3RhbmRhcmRPdXRwdXRXcml0ZXI8Uj4sXG4gIGNvbW1hbmQ6IHN0cmluZyxcbiAgb3B0czogU3Bhd25PcHRpb25zV2l0aG91dFN0ZGlvLFxuICBhYm9ydDogQWJvcnRDb250cm9sbGVyLFxuICBsb2dnZXI6IExvZ2dlclxuKTogQ2hpbGRQcm9jZXNzV2l0aG91dE51bGxTdHJlYW1zIHtcbiAgZnVuY3Rpb24gc3Bhd25Jbm5lcihjb21tYW5kOiBzdHJpbmcsIGNvbnRyb2xsZXI6IEFib3J0Q29udHJvbGxlcikge1xuICAgIGNvbnN0IFtjbWQsIGFyZ3pdID0gb3V0cHV0LnBhcnNlQ29tbWFuZChjb21tYW5kKTtcbiAgICBsb2dnZXIuaW5mbyhgUnVubmluZyBjb21tYW5kOiAke2NtZH1gKTtcbiAgICBsb2dnZXIuZGVidWcoYHdpdGggYXJnczogJHthcmd6LmpvaW4oXCIgXCIpfWApO1xuICAgIGNvbnN0IGNoaWxkUHJvY2VzcyA9IHNwYXduKGNtZCwgYXJneiwge1xuICAgICAgLi4ub3B0cyxcbiAgICAgIGN3ZDogb3B0cy5jd2QgfHwgcHJvY2Vzcy5jd2QoKSxcbiAgICAgIGVudjogT2JqZWN0LmFzc2lnbih7fSwgcHJvY2Vzcy5lbnYsIG9wdHMuZW52LCB7IFBBVEg6IHByb2Nlc3MuZW52LlBBVEggfSksXG4gICAgICBzaGVsbDogb3B0cy5zaGVsbCB8fCBmYWxzZSxcbiAgICAgIHNpZ25hbDogY29udHJvbGxlci5zaWduYWwsXG4gICAgfSk7XG4gICAgbG9nZ2VyLnZlcmJvc2UoYHBpZCA6ICR7Y2hpbGRQcm9jZXNzLnBpZH1gKTtcbiAgICByZXR1cm4gY2hpbGRQcm9jZXNzO1xuICB9XG5cbiAgY29uc3QgbSA9IGNvbW1hbmQubWF0Y2goL1s8PiQjXS9nKTtcbiAgaWYgKG0pXG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEludmFsaWQgY29tbWFuZDogJHtjb21tYW5kfS4gY29udGFpbnMgaW52YWxpZCBjaGFyYWN0ZXJzOiAke219YFxuICAgICk7XG4gIGlmIChjb21tYW5kLmluY2x1ZGVzKFwiIHwgXCIpKSB7XG4gICAgY29uc3QgY21kcyA9IGNvbW1hbmQuc3BsaXQoXCIgfCBcIik7XG4gICAgY29uc3Qgc3Bhd25zID0gW107XG4gICAgY29uc3QgY29udHJvbGxlcnMgPSBuZXcgQXJyYXkoY21kcy5sZW5ndGgpO1xuICAgIGNvbnRyb2xsZXJzWzBdID0gYWJvcnQ7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjbWRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoaSAhPT0gMClcbiAgICAgICAgY29udHJvbGxlcnNbaV0gPSBjaGFpbkFib3J0Q29udHJvbGxlcihjb250cm9sbGVyc1tpIC0gMV0uc2lnbmFsKTtcbiAgICAgIHNwYXducy5wdXNoKHNwYXduSW5uZXIoY21kc1tpXSwgY29udHJvbGxlcnNbaV0pKTtcbiAgICAgIGlmIChpID09PSAwKSBjb250aW51ZTtcbiAgICAgIHNwYXduc1tpIC0gMV0uc3Rkb3V0LnBpcGUoc3Bhd25zW2ldLnN0ZGluKTtcbiAgICB9XG4gICAgcmV0dXJuIHNwYXduc1tjbWRzLmxlbmd0aCAtIDFdO1xuICB9XG5cbiAgcmV0dXJuIHNwYXduSW5uZXIoY29tbWFuZCwgYWJvcnQpO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBFeGVjdXRlcyBhIGNvbW1hbmQgYXN5bmNocm9ub3VzbHkgd2l0aCBjdXN0b21pemFibGUgb3V0cHV0IGhhbmRsaW5nLlxuICogQHN1bW1hcnkgVGhpcyBmdW5jdGlvbiBydW5zIGEgc2hlbGwgY29tbWFuZCBhcyBhIGNoaWxkIHByb2Nlc3MsIHByb3ZpZGluZyBmaW5lLWdyYWluZWRcbiAqIGNvbnRyb2wgb3ZlciBpdHMgZXhlY3V0aW9uIGFuZCBvdXRwdXQgaGFuZGxpbmcuIEl0IHN1cHBvcnRzIGN1c3RvbSBvdXRwdXQgd3JpdGVycyxcbiAqIGFsbG93cyBmb3IgY29tbWFuZCBhYm9ydGlvbiwgYW5kIGNhcHR1cmVzIGJvdGggc3Rkb3V0IGFuZCBzdGRlcnIuXG4gKlxuICogQHRlbXBsYXRlIFIgLSBUaGUgdHlwZSBvZiB0aGUgcmVzb2x2ZWQgdmFsdWUgZnJvbSB0aGUgY29tbWFuZCBleGVjdXRpb24uXG4gKlxuICogQHBhcmFtIGNvbW1hbmQgLSBUaGUgY29tbWFuZCB0byBydW4sIGVpdGhlciBhcyBhIHN0cmluZyBvciBhbiBhcnJheSBvZiBzdHJpbmdzLlxuICogQHBhcmFtIG9wdHMgLSBTcGF3biBvcHRpb25zIGZvciB0aGUgY2hpbGQgcHJvY2Vzcy4gRGVmYXVsdHMgdG8gYW4gZW1wdHkgb2JqZWN0LlxuICogQHBhcmFtIG91dHB1dENvbnN0cnVjdG9yIC0gQ29uc3RydWN0b3IgZm9yIHRoZSBvdXRwdXQgd3JpdGVyLiBEZWZhdWx0cyB0byBTdGFuZGFyZE91dHB1dFdyaXRlci5cbiAqIEBwYXJhbSBhcmdzIC0gQWRkaXRpb25hbCBhcmd1bWVudHMgdG8gcGFzcyB0byB0aGUgb3V0cHV0IGNvbnN0cnVjdG9yLlxuICogQHJldHVybiB7Q29tbWFuZFJlc3VsdH0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIGNvbW1hbmQgcmVzdWx0IG9mIHR5cGUgUi5cbiAqXG4gKiBAZnVuY3Rpb24gcnVuQ29tbWFuZFxuICpcbiAqIEBtZXJtYWlkXG4gKiBzZXF1ZW5jZURpYWdyYW1cbiAqICAgcGFydGljaXBhbnQgQ2FsbGVyXG4gKiAgIHBhcnRpY2lwYW50IHJ1bkNvbW1hbmRcbiAqICAgcGFydGljaXBhbnQgT3V0cHV0V3JpdGVyXG4gKiAgIHBhcnRpY2lwYW50IENoaWxkUHJvY2Vzc1xuICogICBDYWxsZXItPj5ydW5Db21tYW5kOiBDYWxsIHdpdGggY29tbWFuZCBhbmQgb3B0aW9uc1xuICogICBydW5Db21tYW5kLT4+T3V0cHV0V3JpdGVyOiBDcmVhdGUgbmV3IGluc3RhbmNlXG4gKiAgIHJ1bkNvbW1hbmQtPj5PdXRwdXRXcml0ZXI6IFBhcnNlIGNvbW1hbmRcbiAqICAgcnVuQ29tbWFuZC0+PkNoaWxkUHJvY2VzczogU3Bhd24gcHJvY2Vzc1xuICogICBDaGlsZFByb2Nlc3MtLT4+cnVuQ29tbWFuZDogUmV0dXJuIHByb2Nlc3Mgb2JqZWN0XG4gKiAgIHJ1bkNvbW1hbmQtPj5DaGlsZFByb2Nlc3M6IFNldCB1cCBldmVudCBsaXN0ZW5lcnNcbiAqICAgbG9vcCBGb3IgZWFjaCBzdGRvdXQgZGF0YVxuICogICAgIENoaWxkUHJvY2Vzcy0+PnJ1bkNvbW1hbmQ6IEVtaXQgc3Rkb3V0IGRhdGFcbiAqICAgICBydW5Db21tYW5kLT4+T3V0cHV0V3JpdGVyOiBIYW5kbGUgc3Rkb3V0IGRhdGFcbiAqICAgZW5kXG4gKiAgIGxvb3AgRm9yIGVhY2ggc3RkZXJyIGRhdGFcbiAqICAgICBDaGlsZFByb2Nlc3MtPj5ydW5Db21tYW5kOiBFbWl0IHN0ZGVyciBkYXRhXG4gKiAgICAgcnVuQ29tbWFuZC0+Pk91dHB1dFdyaXRlcjogSGFuZGxlIHN0ZGVyciBkYXRhXG4gKiAgIGVuZFxuICogICBDaGlsZFByb2Nlc3MtPj5ydW5Db21tYW5kOiBFbWl0IGVycm9yIChpZiBhbnkpXG4gKiAgIHJ1bkNvbW1hbmQtPj5PdXRwdXRXcml0ZXI6IEhhbmRsZSBlcnJvclxuICogICBDaGlsZFByb2Nlc3MtPj5ydW5Db21tYW5kOiBFbWl0IGV4aXRcbiAqICAgcnVuQ29tbWFuZC0+Pk91dHB1dFdyaXRlcjogSGFuZGxlIGV4aXRcbiAqICAgT3V0cHV0V3JpdGVyLS0+PnJ1bkNvbW1hbmQ6IFJlc29sdmUgb3IgcmVqZWN0IHByb21pc2VcbiAqICAgcnVuQ29tbWFuZC0tPj5DYWxsZXI6IFJldHVybiBDb21tYW5kUmVzdWx0XG4gKlxuICogQG1lbWJlck9mIG1vZHVsZTp1dGlsc1xuICovXG5leHBvcnQgZnVuY3Rpb24gcnVuQ29tbWFuZDxSID0gc3RyaW5nPihcbiAgY29tbWFuZDogc3RyaW5nLFxuICBvcHRzOiBTcGF3bk9wdGlvbnNXaXRob3V0U3RkaW8gPSB7fSxcbiAgb3V0cHV0Q29uc3RydWN0b3I6IE91dHB1dFdyaXRlckNvbnN0cnVjdG9yPFxuICAgIFIsXG4gICAgU3RhbmRhcmRPdXRwdXRXcml0ZXI8Uj4sXG4gICAgRXJyb3JcbiAgPiA9IFN0YW5kYXJkT3V0cHV0V3JpdGVyPFI+LFxuICAuLi5hcmdzOiB1bmtub3duW11cbik6IENvbW1hbmRSZXN1bHQ8Uj4ge1xuICBjb25zdCBsb2dnZXIgPSBMb2dnaW5nLmZvcihydW5Db21tYW5kKTtcbiAgY29uc3QgYWJvcnQgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG5cbiAgY29uc3QgcmVzdWx0OiBPbWl0PENvbW1hbmRSZXN1bHQsIFwicHJvbWlzZVwiIHwgXCJwaXBlXCI+ID0ge1xuICAgIGFib3J0OiBhYm9ydCxcbiAgICBjb21tYW5kOiBjb21tYW5kLFxuICAgIGxvZ3M6IFtdLFxuICAgIGVycnM6IFtdLFxuICB9O1xuXG4gIGNvbnN0IGxvY2sgPSBuZXcgUHJvbWlzZTxSPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgbGV0IG91dHB1dDtcbiAgICB0cnkge1xuICAgICAgb3V0cHV0ID0gbmV3IG91dHB1dENvbnN0cnVjdG9yKFxuICAgICAgICBjb21tYW5kLFxuICAgICAgICB7XG4gICAgICAgICAgcmVzb2x2ZSxcbiAgICAgICAgICByZWplY3QsXG4gICAgICAgIH0sXG4gICAgICAgIC4uLmFyZ3NcbiAgICAgICk7XG5cbiAgICAgIHJlc3VsdC5jbWQgPSBzcGF3bkNvbW1hbmQ8Uj4ob3V0cHV0LCBjb21tYW5kLCBvcHRzLCBhYm9ydCwgbG9nZ2VyKTtcbiAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICByZXR1cm4gcmVqZWN0KG5ldyBFcnJvcihgRXJyb3IgcnVubmluZyBjb21tYW5kICR7Y29tbWFuZH06ICR7ZX1gKSk7XG4gICAgfVxuXG4gICAgcmVzdWx0LmNtZC5zdGRvdXQuc2V0RW5jb2RpbmcoXCJ1dGY4XCIpO1xuXG4gICAgcmVzdWx0LmNtZC5zdGRvdXQub24oXCJkYXRhXCIsIChjaHVuazogYW55KSA9PiB7XG4gICAgICBjaHVuayA9IGNodW5rLnRvU3RyaW5nKCk7XG4gICAgICByZXN1bHQubG9ncy5wdXNoKGNodW5rKTtcbiAgICAgIG91dHB1dC5kYXRhKGNodW5rKTtcbiAgICB9KTtcblxuICAgIHJlc3VsdC5jbWQuc3RkZXJyLm9uKFwiZGF0YVwiLCAoZGF0YTogYW55KSA9PiB7XG4gICAgICBkYXRhID0gZGF0YS50b1N0cmluZygpO1xuICAgICAgcmVzdWx0LmVycnMucHVzaChkYXRhKTtcbiAgICAgIG91dHB1dC5lcnJvcihkYXRhKTtcbiAgICB9KTtcblxuICAgIHJlc3VsdC5jbWQub25jZShcImVycm9yXCIsIChlcnI6IEVycm9yKSA9PiB7XG4gICAgICBvdXRwdXQuZXhpdChlcnIubWVzc2FnZSwgcmVzdWx0LmVycnMpO1xuICAgIH0pO1xuXG4gICAgcmVzdWx0LmNtZC5vbmNlKFwiZXhpdFwiLCAoY29kZTogbnVtYmVyID0gMCkgPT4ge1xuICAgICAgaWYgKGFib3J0LnNpZ25hbC5hYm9ydGVkICYmIGNvZGUgPT09IG51bGwpIGNvZGUgPSBBYm9ydENvZGUgYXMgYW55O1xuICAgICAgb3V0cHV0LmV4aXQoY29kZSwgY29kZSA9PT0gMCA/IHJlc3VsdC5sb2dzIDogcmVzdWx0LmVycnMpO1xuICAgIH0pO1xuICB9KTtcblxuICBPYmplY3QuYXNzaWduKHJlc3VsdCwge1xuICAgIHByb21pc2U6IGxvY2ssXG4gICAgcGlwZTogYXN5bmMgPEU+KGNiOiAocjogUikgPT4gRSkgPT4ge1xuICAgICAgY29uc3QgbCA9IGxvZ2dlci5mb3IoXCJwaXBlXCIpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgbC52ZXJib3NlKGBFeGVjdXRpbmcgcGlwZSBmdW5jdGlvbiAke2NvbW1hbmR9Li4uYCk7XG4gICAgICAgIGNvbnN0IHJlc3VsdDogUiA9IGF3YWl0IGxvY2s7XG4gICAgICAgIGwudmVyYm9zZShgUGlwaW5nIG91dHB1dCB0byAke2NiLm5hbWV9OiAke3Jlc3VsdH1gKTtcbiAgICAgICAgcmV0dXJuIGNiKHJlc3VsdCk7XG4gICAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICAgIGwuZXJyb3IoYEVycm9yIHBpcGluZyBjb21tYW5kIG91dHB1dDogJHtlfWApO1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH0sXG4gIH0pO1xuXG4gIHJldHVybiByZXN1bHQgYXMgQ29tbWFuZFJlc3VsdDxSPjtcbn1cbiIsImltcG9ydCBmcyBmcm9tIFwiZnNcIjtcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBwYXRjaFN0cmluZyB9IGZyb20gXCIuL3RleHRcIjtcbmltcG9ydCB7IHJ1bkNvbW1hbmQgfSBmcm9tIFwiLi91dGlsc1wiO1xuaW1wb3J0IHsgRGVwZW5kZW5jeU1hcCwgU2ltcGxlRGVwZW5kZW5jeU1hcCB9IGZyb20gXCIuL3R5cGVzXCI7XG5pbXBvcnQgeyBMb2dnaW5nIH0gZnJvbSBcIkBkZWNhZi10cy9sb2dnaW5nXCI7XG5cbmNvbnN0IGxvZ2dlciA9IExvZ2dpbmcuZm9yKFwiZnNcIik7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFBhdGNoZXMgYSBmaWxlIHdpdGggZ2l2ZW4gdmFsdWVzLlxuICogQHN1bW1hcnkgUmVhZHMgYSBmaWxlLCBhcHBsaWVzIHBhdGNoZXMgdXNpbmcgVGV4dFV0aWxzLCBhbmQgd3JpdGVzIHRoZSByZXN1bHQgYmFjayB0byB0aGUgZmlsZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aCAtIFRoZSBwYXRoIHRvIHRoZSBmaWxlIHRvIGJlIHBhdGNoZWQuXG4gKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIG51bWJlciB8IHN0cmluZz59IHZhbHVlcyAtIFRoZSB2YWx1ZXMgdG8gcGF0Y2ggaW50byB0aGUgZmlsZS5cbiAqIEByZXR1cm4ge3ZvaWR9XG4gKlxuICogQGZ1bmN0aW9uIHBhdGNoRmlsZVxuICpcbiAqIEBtZXJtYWlkXG4gKiBzZXF1ZW5jZURpYWdyYW1cbiAqICAgcGFydGljaXBhbnQgQ2FsbGVyXG4gKiAgIHBhcnRpY2lwYW50IHBhdGNoRmlsZVxuICogICBwYXJ0aWNpcGFudCBmc1xuICogICBwYXJ0aWNpcGFudCByZWFkRmlsZVxuICogICBwYXJ0aWNpcGFudCBUZXh0VXRpbHNcbiAqICAgcGFydGljaXBhbnQgd3JpdGVGaWxlXG4gKiAgIENhbGxlci0+PnBhdGNoRmlsZTogQ2FsbCB3aXRoIHBhdGggYW5kIHZhbHVlc1xuICogICBwYXRjaEZpbGUtPj5mczogQ2hlY2sgaWYgZmlsZSBleGlzdHNcbiAqICAgcGF0Y2hGaWxlLT4+cmVhZEZpbGU6IFJlYWQgZmlsZSBjb250ZW50XG4gKiAgIHJlYWRGaWxlLT4+ZnM6IFJlYWQgZmlsZVxuICogICBmcy0tPj5yZWFkRmlsZTogUmV0dXJuIGZpbGUgY29udGVudFxuICogICByZWFkRmlsZS0tPj5wYXRjaEZpbGU6IFJldHVybiBmaWxlIGNvbnRlbnRcbiAqICAgcGF0Y2hGaWxlLT4+VGV4dFV0aWxzOiBQYXRjaCBzdHJpbmdcbiAqICAgVGV4dFV0aWxzLS0+PnBhdGNoRmlsZTogUmV0dXJuIHBhdGNoZWQgY29udGVudFxuICogICBwYXRjaEZpbGUtPj53cml0ZUZpbGU6IFdyaXRlIHBhdGNoZWQgY29udGVudFxuICogICB3cml0ZUZpbGUtPj5mczogV3JpdGUgdG8gZmlsZVxuICogICBmcy0tPj53cml0ZUZpbGU6IEZpbGUgd3JpdHRlblxuICogICB3cml0ZUZpbGUtLT4+cGF0Y2hGaWxlOiBGaWxlIHdyaXR0ZW5cbiAqICAgcGF0Y2hGaWxlLS0+PkNhbGxlcjogUGF0Y2hpbmcgY29tcGxldGVcbiAqXG4gKiBAbWVtYmVyT2YgbW9kdWxlOnV0aWxzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXRjaEZpbGUoXG4gIHBhdGg6IHN0cmluZyxcbiAgdmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXIgfCBzdHJpbmc+XG4pIHtcbiAgY29uc3QgbG9nID0gbG9nZ2VyLmZvcihwYXRjaEZpbGUpO1xuICBpZiAoIWZzLmV4aXN0c1N5bmMocGF0aCkpXG4gICAgdGhyb3cgbmV3IEVycm9yKGBGaWxlIG5vdCBmb3VuZCBhdCBwYXRoIFwiJHtwYXRofVwiLmApO1xuICBsZXQgY29udGVudCA9IHJlYWRGaWxlKHBhdGgpO1xuXG4gIHRyeSB7XG4gICAgbG9nLnZlcmJvc2UoYFBhdGNoaW5nIGZpbGUgXCIke3BhdGh9XCIuLi5gKTtcbiAgICBsb2cuZGVidWcoYHdpdGggdmFsdWU6ICR7SlNPTi5zdHJpbmdpZnkodmFsdWVzKX1gKTtcbiAgICBjb250ZW50ID0gcGF0Y2hTdHJpbmcoY29udGVudCwgdmFsdWVzKTtcbiAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yIHBhdGNoaW5nIGZpbGU6ICR7ZXJyb3J9YCk7XG4gIH1cbiAgd3JpdGVGaWxlKHBhdGgsIGNvbnRlbnQpO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBSZWFkcyBhIGZpbGUgYW5kIHJldHVybnMgaXRzIGNvbnRlbnQuXG4gKiBAc3VtbWFyeSBSZWFkcyB0aGUgY29udGVudCBvZiBhIGZpbGUgYXQgdGhlIHNwZWNpZmllZCBwYXRoIGFuZCByZXR1cm5zIGl0IGFzIGEgc3RyaW5nLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIC0gVGhlIHBhdGggdG8gdGhlIGZpbGUgdG8gYmUgcmVhZC5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGNvbnRlbnQgb2YgdGhlIGZpbGUuXG4gKlxuICogQGZ1bmN0aW9uIHJlYWRGaWxlXG4gKlxuICogQG1lbWJlck9mIG1vZHVsZTp1dGlsc1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVhZEZpbGUocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgbG9nID0gbG9nZ2VyLmZvcihyZWFkRmlsZSk7XG4gIHRyeSB7XG4gICAgbG9nLnZlcmJvc2UoYFJlYWRpbmcgZmlsZSBcIiR7cGF0aH1cIi4uLmApO1xuICAgIHJldHVybiBmcy5yZWFkRmlsZVN5bmMocGF0aCwgXCJ1dGY4XCIpO1xuICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgIGxvZy52ZXJib3NlKGBFcnJvciByZWFkaW5nIGZpbGUgXCIke3BhdGh9XCI6ICR7ZXJyb3J9YCk7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciByZWFkaW5nIGZpbGUgXCIke3BhdGh9XCI6ICR7ZXJyb3J9YCk7XG4gIH1cbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gV3JpdGVzIGRhdGEgdG8gYSBmaWxlLlxuICogQHN1bW1hcnkgV3JpdGVzIHRoZSBwcm92aWRlZCBkYXRhIHRvIGEgZmlsZSBhdCB0aGUgc3BlY2lmaWVkIHBhdGguXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGggLSBUaGUgcGF0aCB0byB0aGUgZmlsZSB0byBiZSB3cml0dGVuLlxuICogQHBhcmFtIHtzdHJpbmcgfCBCdWZmZXJ9IGRhdGEgLSBUaGUgZGF0YSB0byBiZSB3cml0dGVuIHRvIHRoZSBmaWxlLlxuICogQHJldHVybiB7dm9pZH1cbiAqXG4gKiBAZnVuY3Rpb24gd3JpdGVGaWxlXG4gKlxuICogQG1lbWJlck9mIG1vZHVsZTp1dGlsc1xuICovXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVGaWxlKHBhdGg6IHN0cmluZywgZGF0YTogc3RyaW5nIHwgQnVmZmVyKTogdm9pZCB7XG4gIGNvbnN0IGxvZyA9IGxvZ2dlci5mb3Iod3JpdGVGaWxlKTtcbiAgdHJ5IHtcbiAgICBsb2cudmVyYm9zZShgV3JpdGluZyBmaWxlIFwiJHtwYXRofSB3aXRoICR7ZGF0YS5sZW5ndGh9IGJ5dGVzLi4uYCk7XG4gICAgZnMud3JpdGVGaWxlU3luYyhwYXRoLCBkYXRhLCBcInV0ZjhcIik7XG4gIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgbG9nLnZlcmJvc2UoYEVycm9yIHdyaXRpbmcgZmlsZSBcIiR7cGF0aH1cIjogJHtlcnJvcn1gKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yIHdyaXRpbmcgZmlsZSBcIiR7cGF0aH1cIjogJHtlcnJvcn1gKTtcbiAgfVxufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBSZXRyaWV2ZXMgYWxsIGZpbGVzIHJlY3Vyc2l2ZWx5IGZyb20gYSBkaXJlY3RvcnkuXG4gKiBAc3VtbWFyeSBUcmF2ZXJzZXMgdGhyb3VnaCBkaXJlY3RvcmllcyBhbmQgc3ViZGlyZWN0b3JpZXMgdG8gY29sbGVjdCBhbGwgZmlsZSBwYXRocy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcCAtIFRoZSBwYXRoIHRvIHN0YXJ0IHNlYXJjaGluZyBmcm9tLlxuICogQHBhcmFtIHtmdW5jdGlvbn0gW2ZpbHRlcl0gLSBPcHRpb25hbCBmdW5jdGlvbiB0byBmaWx0ZXIgZmlsZXMgYnkgbmFtZSBvciBpbmRleC5cbiAqIEByZXR1cm4ge3N0cmluZ1tdfSBBcnJheSBvZiBmaWxlIHBhdGhzLlxuICpcbiAqIEBmdW5jdGlvbiBnZXRBbGxGaWxlc1xuICpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6dXRpbHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEFsbEZpbGVzKFxuICBwOiBzdHJpbmcsXG4gIGZpbHRlcj86IChmOiBzdHJpbmcsIGk/OiBudW1iZXIpID0+IGJvb2xlYW5cbik6IHN0cmluZ1tdIHtcbiAgY29uc3QgbG9nID0gbG9nZ2VyLmZvcihnZXRBbGxGaWxlcyk7XG4gIGNvbnN0IGZpbGVzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIHRyeSB7XG4gICAgbG9nLnZlcmJvc2UoYFJldHJpZXZpbmcgYWxsIGZpbGVzIGZyb20gXCIke3B9XCIuLi5gKTtcbiAgICBjb25zdCBlbnRyaWVzID0gZnMucmVhZGRpclN5bmMocCk7XG5cbiAgICBlbnRyaWVzLmZvckVhY2goKGVudHJ5KSA9PiB7XG4gICAgICBjb25zdCBmdWxsUGF0aCA9IHBhdGguam9pbihwLCBlbnRyeSk7XG4gICAgICBjb25zdCBzdGF0ID0gZnMuc3RhdFN5bmMoZnVsbFBhdGgpO1xuXG4gICAgICBpZiAoc3RhdC5pc0ZpbGUoKSkge1xuICAgICAgICBmaWxlcy5wdXNoKGZ1bGxQYXRoKTtcbiAgICAgIH0gZWxzZSBpZiAoc3RhdC5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAgIGZpbGVzLnB1c2goLi4uZ2V0QWxsRmlsZXMoZnVsbFBhdGgpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoIWZpbHRlcikgcmV0dXJuIGZpbGVzO1xuICAgIHJldHVybiBmaWxlcy5maWx0ZXIoZmlsdGVyKTtcbiAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICBsb2cudmVyYm9zZShgRXJyb3IgcmV0cmlldmluZyBmaWxlcyBmcm9tIFwiJHtwfVwiOiAke2Vycm9yfWApO1xuICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3IgcmV0cmlldmluZyBmaWxlcyBmcm9tIFwiJHtwfVwiOiAke2Vycm9yfWApO1xuICB9XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFJlbmFtZXMgYSBmaWxlIG9yIGRpcmVjdG9yeS5cbiAqIEBzdW1tYXJ5IE1vdmVzIGEgZmlsZSBvciBkaXJlY3RvcnkgZnJvbSB0aGUgc291cmNlIHBhdGggdG8gdGhlIGRlc3RpbmF0aW9uIHBhdGguXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIFRoZSBzb3VyY2UgcGF0aCBvZiB0aGUgZmlsZSBvciBkaXJlY3RvcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30gZGVzdCAtIFRoZSBkZXN0aW5hdGlvbiBwYXRoIGZvciB0aGUgZmlsZSBvciBkaXJlY3RvcnkuXG4gKiBAcmV0dXJuIHtQcm9taXNlPHZvaWQ+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSByZW5hbWUgb3BlcmF0aW9uIGlzIGNvbXBsZXRlLlxuICpcbiAqIEBmdW5jdGlvbiByZW5hbWVGaWxlXG4gKlxuICogQG1lbWJlck9mIG1vZHVsZTp1dGlsc1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVuYW1lRmlsZShzb3VyY2U6IHN0cmluZywgZGVzdDogc3RyaW5nKSB7XG4gIGNvbnN0IGxvZyA9IGxvZ2dlci5mb3IocmVuYW1lRmlsZSk7XG4gIGxldCBkZXNjcmlwdG9yU291cmNlLCBkZXNjcmlwdG9yRGVzdDtcblxuICB0cnkge1xuICAgIGRlc2NyaXB0b3JTb3VyY2UgPSBmcy5zdGF0U3luYyhzb3VyY2UpO1xuICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgIGxvZy52ZXJib3NlKGBTb3VyY2UgcGF0aCBcIiR7c291cmNlfVwiIGRvZXMgbm90IGV4aXN0OiAke2Vycm9yfWApO1xuICAgIHRocm93IG5ldyBFcnJvcihgU291cmNlIHBhdGggXCIke3NvdXJjZX1cIiBkb2VzIG5vdCBleGlzdDogJHtlcnJvcn1gKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgZGVzY3JpcHRvckRlc3QgPSBmcy5zdGF0U3luYyhkZXN0KTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAvLyBkbyBub3RoaW5nLiBpdHMgb2tcbiAgfVxuICBpZiAoZGVzY3JpcHRvckRlc3QpIHtcbiAgICBsb2cudmVyYm9zZShgRGVzdGluYXRpb24gcGF0aCBcIiR7ZGVzdH1cIiBhbHJlYWR5IGV4aXN0c2ApO1xuICAgIHRocm93IG5ldyBFcnJvcihgRGVzdGluYXRpb24gcGF0aCBcIiR7ZGVzdH1cIiBhbHJlYWR5IGV4aXN0c2ApO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBsb2cudmVyYm9zZShcbiAgICAgIGBSZW5hbWluZyAke2Rlc2NyaXB0b3JTb3VyY2UuaXNGaWxlKCkgPyBcImZpbGVcIiA6IFwiZGlyZWN0b3J5XCJ9IFwiJHtzb3VyY2V9XCIgdG8gXCIke2Rlc3R9Li4uYFxuICAgICk7XG4gICAgZnMucmVuYW1lU3luYyhzb3VyY2UsIGRlc3QpO1xuICAgIGxvZy52ZXJib3NlKGBTdWNjZXNzZnVsbHkgcmVuYW1lZCB0byBcIiR7ZGVzdH1cImApO1xuICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgIGxvZy52ZXJib3NlKFxuICAgICAgYEVycm9yIHJlbmFtaW5nICR7ZGVzY3JpcHRvclNvdXJjZS5pc0ZpbGUoKSA/IFwiZmlsZVwiIDogXCJkaXJlY3RvcnlcIn0gXCIke3NvdXJjZX1cIiB0byBcIiR7ZGVzdH1cIjogJHtlcnJvcn1gXG4gICAgKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgRXJyb3IgcmVuYW1pbmcgJHtkZXNjcmlwdG9yU291cmNlLmlzRmlsZSgpID8gXCJmaWxlXCIgOiBcImRpcmVjdG9yeVwifSBcIiR7c291cmNlfVwiIHRvIFwiJHtkZXN0fVwiOiAke2Vycm9yfWBcbiAgICApO1xuICB9XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIENvcGllcyBhIGZpbGUgb3IgZGlyZWN0b3J5LlxuICogQHN1bW1hcnkgQ3JlYXRlcyBhIGNvcHkgb2YgYSBmaWxlIG9yIGRpcmVjdG9yeSBmcm9tIHRoZSBzb3VyY2UgcGF0aCB0byB0aGUgZGVzdGluYXRpb24gcGF0aC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gVGhlIHNvdXJjZSBwYXRoIG9mIHRoZSBmaWxlIG9yIGRpcmVjdG9yeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBkZXN0IC0gVGhlIGRlc3RpbmF0aW9uIHBhdGggZm9yIHRoZSBmaWxlIG9yIGRpcmVjdG9yeS5cbiAqIEByZXR1cm4ge3ZvaWR9XG4gKlxuICogQGZ1bmN0aW9uIGNvcHlGaWxlXG4gKlxuICogQG1lbWJlck9mIG1vZHVsZTp1dGlsc1xuICovXG5leHBvcnQgZnVuY3Rpb24gY29weUZpbGUoc291cmNlOiBzdHJpbmcsIGRlc3Q6IHN0cmluZykge1xuICBjb25zdCBsb2cgPSBsb2dnZXIuZm9yKGNvcHlGaWxlKTtcbiAgbGV0IGRlc2NyaXB0b3JTb3VyY2UsIGRlc2NyaXB0b3JEZXN0O1xuICB0cnkge1xuICAgIGRlc2NyaXB0b3JTb3VyY2UgPSBmcy5zdGF0U3luYyhzb3VyY2UpO1xuICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgIGxvZy52ZXJib3NlKGBTb3VyY2UgcGF0aCBcIiR7c291cmNlfVwiIGRvZXMgbm90IGV4aXN0OiAke2Vycm9yfWApO1xuICAgIHRocm93IG5ldyBFcnJvcihgU291cmNlIHBhdGggXCIke3NvdXJjZX1cIiBkb2VzIG5vdCBleGlzdDogJHtlcnJvcn1gKTtcbiAgfVxuICB0cnkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICBkZXNjcmlwdG9yRGVzdCA9IGZzLnN0YXRTeW5jKGRlc3QpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICBpZiAoZGVzY3JpcHRvclNvdXJjZS5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICBsb2cudmVyYm9zZShgRGVzdCBwYXRoIFwiJHtkZXN0fVwiIGRvZXMgbm90IGV4aXN0LiBjcmVhdGluZ2ApO1xuICAgICAgZnMubWtkaXJTeW5jKGRlc3QsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIH1cbiAgfVxuXG4gIHRyeSB7XG4gICAgbG9nLnZlcmJvc2UoXG4gICAgICBgQ29weWluZyAke2Rlc2NyaXB0b3JTb3VyY2UuaXNGaWxlKCkgPyBcImZpbGVcIiA6IFwiZGlyZWN0b3J5XCJ9IFwiJHtzb3VyY2V9XCIgdG8gXCIke2Rlc3R9Li4uYFxuICAgICk7XG4gICAgZnMuY3BTeW5jKHNvdXJjZSwgZGVzdCwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgbG9nLnZlcmJvc2UoXG4gICAgICBgRXJyb3IgY29weWluZyAke2Rlc2NyaXB0b3JTb3VyY2UuaXNGaWxlKCkgPyBcImZpbGVcIiA6IFwiZGlyZWN0b3J5XCJ9IFwiJHtzb3VyY2V9XCIgdG8gXCIke2Rlc3R9OiAke2Vycm9yfWBcbiAgICApO1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBFcnJvciBjb3B5aW5nICR7ZGVzY3JpcHRvclNvdXJjZS5pc0ZpbGUoKSA/IFwiZmlsZVwiIDogXCJkaXJlY3RvcnlcIn0gXCIke3NvdXJjZX1cIiB0byBcIiR7ZGVzdH06ICR7ZXJyb3J9YFxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gRGVsZXRlcyBhIGZpbGUgb3IgZGlyZWN0b3J5LlxuICogQHN1bW1hcnkgUmVtb3ZlcyBhIGZpbGUgb3IgZGlyZWN0b3J5IGF0IHRoZSBzcGVjaWZpZWQgcGF0aCwgd2l0aCByZWN1cnNpdmUgYW5kIGZvcmNlIG9wdGlvbnMgZW5hYmxlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcCAtIFRoZSBwYXRoIHRvIHRoZSBmaWxlIG9yIGRpcmVjdG9yeSB0byBkZWxldGUuXG4gKiBAcmV0dXJuIHt2b2lkfVxuICpcbiAqIEBmdW5jdGlvbiBkZWxldGVQYXRoXG4gKlxuICogQG1lbWJlck9mIG1vZHVsZTp1dGlsc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZGVsZXRlUGF0aChwOiBzdHJpbmcpIHtcbiAgY29uc3QgbG9nID0gbG9nZ2VyLmZvcihkZWxldGVQYXRoKTtcbiAgdHJ5IHtcbiAgICBjb25zdCBkZXNjcmlwdG9yID0gZnMuc3RhdFN5bmMocCk7XG4gICAgaWYgKGRlc2NyaXB0b3IuaXNGaWxlKCkpIHtcbiAgICAgIGxvZy52ZXJib3NlKGBEZWxldGluZyBmaWxlIFwiJHtwfS4uLmApO1xuICAgICAgZnMucm1TeW5jKHAsIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KTtcbiAgICB9IGVsc2UgaWYgKGRlc2NyaXB0b3IuaXNEaXJlY3RvcnkoKSlcbiAgICAgIGZzLnJtU3luYyhwLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSk7XG4gIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgbG9nLnZlcmJvc2UoYEVycm9yIERlbGV0aW5nIFwiJHtwfVwiOiAke2Vycm9yfWApO1xuICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3IgRGVsZXRpbmcgXCIke3B9XCI6ICR7ZXJyb3J9YCk7XG4gIH1cbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gUmV0cmlldmVzIHBhY2thZ2UgaW5mb3JtYXRpb24gZnJvbSBwYWNrYWdlLmpzb24uXG4gKiBAc3VtbWFyeSBMb2FkcyBhbmQgcGFyc2VzIHRoZSBwYWNrYWdlLmpzb24gZmlsZSBmcm9tIGEgc3BlY2lmaWVkIGRpcmVjdG9yeSBvciB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4gQ2FuIHJldHVybiB0aGUgZW50aXJlIHBhY2thZ2Ugb2JqZWN0IG9yIGEgc3BlY2lmaWMgcHJvcGVydHkuXG4gKiBAcGFyYW0ge3N0cmluZ30gW3A9cHJvY2Vzcy5jd2QoKV0gLSBUaGUgZGlyZWN0b3J5IHBhdGggd2hlcmUgdGhlIHBhY2thZ2UuanNvbiBmaWxlIGlzIGxvY2F0ZWQuXG4gKiBAcGFyYW0ge3N0cmluZ30gW3Byb3BlcnR5XSAtIE9wdGlvbmFsLiBUaGUgc3BlY2lmaWMgcHJvcGVydHkgdG8gcmV0cmlldmUgZnJvbSBwYWNrYWdlLmpzb24uXG4gKiBAcmV0dXJuIHtvYmplY3QgfCBzdHJpbmd9IFRoZSBwYXJzZWQgY29udGVudHMgb2YgcGFja2FnZS5qc29uIG9yIHRoZSB2YWx1ZSBvZiB0aGUgc3BlY2lmaWVkIHByb3BlcnR5LlxuICogQGZ1bmN0aW9uIGdldFBhY2thZ2VcbiAqIEBtZXJtYWlkXG4gKiBzZXF1ZW5jZURpYWdyYW1cbiAqICAgcGFydGljaXBhbnQgQ2FsbGVyXG4gKiAgIHBhcnRpY2lwYW50IGdldFBhY2thZ2VcbiAqICAgcGFydGljaXBhbnQgcmVhZEZpbGVcbiAqICAgcGFydGljaXBhbnQgSlNPTlxuICogICBDYWxsZXItPj5nZXRQYWNrYWdlOiBDYWxsIHdpdGggcGF0aCBhbmQgb3B0aW9uYWwgcHJvcGVydHlcbiAqICAgZ2V0UGFja2FnZS0+PnJlYWRGaWxlOiBSZWFkIHBhY2thZ2UuanNvblxuICogICByZWFkRmlsZS0tPj5nZXRQYWNrYWdlOiBSZXR1cm4gZmlsZSBjb250ZW50XG4gKiAgIGdldFBhY2thZ2UtPj5KU09OOiBQYXJzZSBmaWxlIGNvbnRlbnRcbiAqICAgSlNPTi0tPj5nZXRQYWNrYWdlOiBSZXR1cm4gcGFyc2VkIG9iamVjdFxuICogICBhbHQgcHJvcGVydHkgc3BlY2lmaWVkXG4gKiAgICAgZ2V0UGFja2FnZS0+PmdldFBhY2thZ2U6IENoZWNrIGlmIHByb3BlcnR5IGV4aXN0c1xuICogICAgIGFsdCBwcm9wZXJ0eSBleGlzdHNcbiAqICAgICAgIGdldFBhY2thZ2UtLT4+Q2FsbGVyOiBSZXR1cm4gcHJvcGVydHkgdmFsdWVcbiAqICAgICBlbHNlIHByb3BlcnR5IGRvZXNuJ3QgZXhpc3RcbiAqICAgICAgIGdldFBhY2thZ2UtLT4+Q2FsbGVyOiBUaHJvdyBFcnJvclxuICogICAgIGVuZFxuICogICBlbHNlIG5vIHByb3BlcnR5IHNwZWNpZmllZFxuICogICAgIGdldFBhY2thZ2UtLT4+Q2FsbGVyOiBSZXR1cm4gZW50aXJlIHBhY2thZ2Ugb2JqZWN0XG4gKiAgIGVuZFxuICogQG1lbWJlck9mIG1vZHVsZTp1dGlsc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFja2FnZShcbiAgcDogc3RyaW5nID0gcHJvY2Vzcy5jd2QoKSxcbiAgcHJvcGVydHk/OiBzdHJpbmdcbik6IG9iamVjdCB8IHN0cmluZyB7XG4gIGxldCBwa2c6IGFueTtcbiAgdHJ5IHtcbiAgICBwa2cgPSBKU09OLnBhcnNlKHJlYWRGaWxlKHBhdGguam9pbihwLCBgcGFja2FnZS5qc29uYCkpKTtcbiAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byByZXRyaWV2ZSBwYWNrYWdlIGluZm9ybWF0aW9uXCIgJHtlcnJvcn1gKTtcbiAgfVxuXG4gIGlmIChwcm9wZXJ0eSkge1xuICAgIGlmICghKHByb3BlcnR5IGluIHBrZykpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFByb3BlcnR5IFwiJHtwcm9wZXJ0eX1cIiBub3QgZm91bmQgaW4gcGFja2FnZS5qc29uYCk7XG4gICAgcmV0dXJuIHBrZ1twcm9wZXJ0eV0gYXMgc3RyaW5nO1xuICB9XG4gIHJldHVybiBwa2c7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFNldHMgYW4gYXR0cmlidXRlIGluIHRoZSBwYWNrYWdlLmpzb24gZmlsZS5cbiAqIEBzdW1tYXJ5IFVwZGF0ZXMgYSBzcGVjaWZpYyBhdHRyaWJ1dGUgaW4gdGhlIHBhY2thZ2UuanNvbiBmaWxlIHdpdGggdGhlIHByb3ZpZGVkIHZhbHVlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBhdHRyIC0gVGhlIGF0dHJpYnV0ZSBuYW1lIHRvIHNldCBpbiBwYWNrYWdlLmpzb24uXG4gKiBAcGFyYW0ge3N0cmluZyB8IG51bWJlciB8IG9iamVjdH0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gc2V0IGZvciB0aGUgYXR0cmlidXRlLlxuICogQHBhcmFtIHtzdHJpbmd9IFtwPXByb2Nlc3MuY3dkKCldIC0gVGhlIGRpcmVjdG9yeSBwYXRoIHdoZXJlIHRoZSBwYWNrYWdlLmpzb24gZmlsZSBpcyBsb2NhdGVkLlxuICogQHJldHVybiB7dm9pZH1cbiAqXG4gKiBAZnVuY3Rpb24gc2V0UGFja2FnZUF0dHJpYnV0ZVxuICpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6dXRpbHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldFBhY2thZ2VBdHRyaWJ1dGUoXG4gIGF0dHI6IHN0cmluZyxcbiAgdmFsdWU6IHN0cmluZyxcbiAgcDogc3RyaW5nID0gcHJvY2Vzcy5jd2QoKVxuKTogdm9pZCB7XG4gIGNvbnN0IHBrZyA9IGdldFBhY2thZ2UocCkgYXMgUmVjb3JkPHN0cmluZywgYW55PjtcbiAgcGtnW2F0dHJdID0gdmFsdWU7XG4gIHdyaXRlRmlsZShwYXRoLmpvaW4ocCwgYHBhY2thZ2UuanNvbmApLCBKU09OLnN0cmluZ2lmeShwa2csIG51bGwsIDIpKTtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gUmV0cmlldmVzIHRoZSB2ZXJzaW9uIGZyb20gcGFja2FnZS5qc29uLlxuICogQHN1bW1hcnkgQSBjb252ZW5pZW5jZSBmdW5jdGlvbiB0aGF0IGNhbGxzIGdldFBhY2thZ2UgdG8gcmV0cmlldmUgdGhlIFwidmVyc2lvblwiIHByb3BlcnR5IGZyb20gcGFja2FnZS5qc29uLlxuICogQHBhcmFtIHtzdHJpbmd9IFtwPXByb2Nlc3MuY3dkKCldIC0gVGhlIGRpcmVjdG9yeSBwYXRoIHdoZXJlIHRoZSBwYWNrYWdlLmpzb24gZmlsZSBpcyBsb2NhdGVkLlxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgdmVyc2lvbiBzdHJpbmcgZnJvbSBwYWNrYWdlLmpzb24uXG4gKiBAZnVuY3Rpb24gZ2V0UGFja2FnZVZlcnNpb25cbiAqIEBtZW1iZXJPZiBtb2R1bGU6dXRpbHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFBhY2thZ2VWZXJzaW9uKHAgPSBwcm9jZXNzLmN3ZCgpKTogc3RyaW5nIHtcbiAgcmV0dXJuIGdldFBhY2thZ2UocCwgXCJ2ZXJzaW9uXCIpIGFzIHN0cmluZztcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gUmV0cmlldmVzIGFsbCBkZXBlbmRlbmNpZXMgZnJvbSB0aGUgcHJvamVjdC5cbiAqIEBzdW1tYXJ5IEV4ZWN1dGVzICducG0gbHMgLS1qc29uJyBjb21tYW5kIHRvIGdldCBhIGRldGFpbGVkIGxpc3Qgb2YgYWxsIGRlcGVuZGVuY2llcyAocHJvZHVjdGlvbiwgZGV2ZWxvcG1lbnQsIGFuZCBwZWVyKSBhbmQgdGhlaXIgdmVyc2lvbnMuXG4gKiBAcGFyYW0ge3N0cmluZ30gW3BhdGg9cHJvY2Vzcy5jd2QoKV0gLSBUaGUgZGlyZWN0b3J5IHBhdGggb2YgdGhlIHByb2plY3QuXG4gKiBAcmV0dXJuIHtQcm9taXNlPHtwcm9kOiBBcnJheTx7bmFtZTogc3RyaW5nLCB2ZXJzaW9uOiBzdHJpbmd9PiwgZGV2OiBBcnJheTx7bmFtZTogc3RyaW5nLCB2ZXJzaW9uOiBzdHJpbmd9PiwgcGVlcjogQXJyYXk8e25hbWU6IHN0cmluZywgdmVyc2lvbjogc3RyaW5nfT59Pn0gQW4gb2JqZWN0IGNvbnRhaW5pbmcgYXJyYXlzIG9mIHByb2R1Y3Rpb24sIGRldmVsb3BtZW50LCBhbmQgcGVlciBkZXBlbmRlbmNpZXMuXG4gKiBAZnVuY3Rpb24gZ2V0RGVwZW5kZW5jaWVzXG4gKiBAbWVybWFpZFxuICogc2VxdWVuY2VEaWFncmFtXG4gKiAgIHBhcnRpY2lwYW50IENhbGxlclxuICogICBwYXJ0aWNpcGFudCBnZXREZXBlbmRlbmNpZXNcbiAqICAgcGFydGljaXBhbnQgcnVuQ29tbWFuZFxuICogICBwYXJ0aWNpcGFudCBKU09OXG4gKiAgIENhbGxlci0+PmdldERlcGVuZGVuY2llczogQ2FsbCB3aXRoIG9wdGlvbmFsIHBhdGhcbiAqICAgZ2V0RGVwZW5kZW5jaWVzLT4+cnVuQ29tbWFuZDogRXhlY3V0ZSAnbnBtIGxzIC0tanNvbidcbiAqICAgcnVuQ29tbWFuZC0tPj5nZXREZXBlbmRlbmNpZXM6IFJldHVybiBjb21tYW5kIG91dHB1dFxuICogICBnZXREZXBlbmRlbmNpZXMtPj5KU09OOiBQYXJzZSBjb21tYW5kIG91dHB1dFxuICogICBKU09OLS0+PmdldERlcGVuZGVuY2llczogUmV0dXJuIHBhcnNlZCBvYmplY3RcbiAqICAgZ2V0RGVwZW5kZW5jaWVzLT4+Z2V0RGVwZW5kZW5jaWVzOiBQcm9jZXNzIGRlcGVuZGVuY2llc1xuICogICBnZXREZXBlbmRlbmNpZXMtLT4+Q2FsbGVyOiBSZXR1cm4gcHJvY2Vzc2VkIGRlcGVuZGVuY2llc1xuICogQG1lbWJlck9mIG1vZHVsZTp1dGlsc1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0RGVwZW5kZW5jaWVzKFxuICBwYXRoOiBzdHJpbmcgPSBwcm9jZXNzLmN3ZCgpXG4pOiBQcm9taXNlPERlcGVuZGVuY3lNYXA+IHtcbiAgbGV0IHBrZzogYW55O1xuXG4gIHRyeSB7XG4gICAgcGtnID0gSlNPTi5wYXJzZShhd2FpdCBydW5Db21tYW5kKGBucG0gbHMgLS1qc29uYCwgeyBjd2Q6IHBhdGggfSkucHJvbWlzZSk7XG4gIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byByZXRyaWV2ZSBkZXBlbmRlbmNpZXM6ICR7ZX1gKTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgY29uc3QgbWFwcGVyID0gKGVudHJ5OiBbc3RyaW5nLCB1bmtub3duXSwgaW5kZXg6IG51bWJlcikgPT4gKHtcbiAgICBuYW1lOiBlbnRyeVswXSxcbiAgICB2ZXJzaW9uOiAoZW50cnlbMV0gYXMgYW55KS52ZXJzaW9uLFxuICB9KTtcblxuICByZXR1cm4ge1xuICAgIHByb2Q6IE9iamVjdC5lbnRyaWVzKHBrZy5kZXBlbmRlbmNpZXMgfHwge30pLm1hcChtYXBwZXIpLFxuICAgIGRldjogT2JqZWN0LmVudHJpZXMocGtnLmRldkRlcGVuZGVuY2llcyB8fCB7fSkubWFwKG1hcHBlciksXG4gICAgcGVlcjogT2JqZWN0LmVudHJpZXMocGtnLnBlZXJEZXBlbmRlbmNpZXMgfHwge30pLm1hcChtYXBwZXIpLFxuICB9O1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBVcGRhdGVzIHByb2plY3QgZGVwZW5kZW5jaWVzIHRvIHRoZWlyIGxhdGVzdCB2ZXJzaW9ucy5cbiAqIEBzdW1tYXJ5IFJ1bnMgbnBtLWNoZWNrLXVwZGF0ZXMgdG8gdXBkYXRlIHBhY2thZ2UuanNvbiBhbmQgdGhlbiBpbnN0YWxscyB0aGUgdXBkYXRlZCBkZXBlbmRlbmNpZXMuXG4gKlxuICogQHJldHVybiB7UHJvbWlzZTx2b2lkPn0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiBkZXBlbmRlbmNpZXMgYXJlIHVwZGF0ZWQuXG4gKlxuICogQGZ1bmN0aW9uIHVwZGF0ZURlcGVuZGVuY2llc1xuICpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6dXRpbHNcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHVwZGF0ZURlcGVuZGVuY2llcygpIHtcbiAgY29uc3QgbG9nID0gbG9nZ2VyLmZvcih1cGRhdGVEZXBlbmRlbmNpZXMpO1xuICBsb2cuaW5mbyhcImNoZWNraW5nIGZvciB1cGRhdGVzLi4uXCIpO1xuICBhd2FpdCBydW5Db21tYW5kKFwibnB4IG5wbS1jaGVjay11cGRhdGVzIC11XCIpLnByb21pc2U7XG4gIGxvZy5pbmZvKFwidXBkYXRpbmcuLi5cIik7XG4gIGF3YWl0IHJ1bkNvbW1hbmQoXCJucHggbnBtIHJ1biBkby1pbnN0YWxsXCIpLnByb21pc2U7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEluc3RhbGxzIGRlcGVuZGVuY2llcyBpZiB0aGV5IGFyZSBub3QgYWxyZWFkeSBhdmFpbGFibGUuXG4gKiBAc3VtbWFyeSBDaGVja3MgaWYgc3BlY2lmaWVkIGRlcGVuZGVuY2llcyBhcmUgaW5zdGFsbGVkIGFuZCBpbnN0YWxscyBhbnkgdGhhdCBhcmUgbWlzc2luZy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ1tdIHwgc3RyaW5nfSBkZXBzIC0gVGhlIGRlcGVuZGVuY2llcyB0byBjaGVjayBhbmQgcG90ZW50aWFsbHkgaW5zdGFsbC5cbiAqIEBwYXJhbSB7U2ltcGxlRGVwZW5kZW5jeU1hcH0gW2RlcGVuZGVuY2llc10gLSBPcHRpb25hbCBtYXAgb2YgZXhpc3RpbmcgZGVwZW5kZW5jaWVzLlxuICogQHJldHVybiB7UHJvbWlzZTxTaW1wbGVEZXBlbmRlbmN5TWFwPn0gVXBkYXRlZCBtYXAgb2YgZGVwZW5kZW5jaWVzLlxuICpcbiAqIEBmdW5jdGlvbiBpbnN0YWxsSWZOb3RBdmFpbGFibGVcbiAqXG4gKiBAbWVtYmVyT2YgbW9kdWxlOnV0aWxzXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpbnN0YWxsSWZOb3RBdmFpbGFibGUoXG4gIGRlcHM6IHN0cmluZ1tdIHwgc3RyaW5nLFxuICBkZXBlbmRlbmNpZXM/OiBTaW1wbGVEZXBlbmRlbmN5TWFwXG4pIHtcbiAgaWYgKCFkZXBlbmRlbmNpZXMpIHtcbiAgICBjb25zdCBkOiBEZXBlbmRlbmN5TWFwID0gYXdhaXQgZ2V0RGVwZW5kZW5jaWVzKCk7XG4gICAgZGVwZW5kZW5jaWVzID0ge1xuICAgICAgcHJvZDogZC5wcm9kPy5tYXAoKHApID0+IHAubmFtZSkgfHwgW10sXG4gICAgICBkZXY6IGQuZGV2Py5tYXAoKGQpID0+IGQubmFtZSkgfHwgW10sXG4gICAgICBwZWVyOiBkLnBlZXI/Lm1hcCgocCkgPT4gcC5uYW1lKSB8fCBbXSxcbiAgICB9O1xuICB9XG4gIGNvbnN0IHsgcHJvZCwgZGV2LCBwZWVyIH0gPSBkZXBlbmRlbmNpZXM7XG4gIGNvbnN0IGluc3RhbGxlZCA9IEFycmF5LmZyb20oXG4gICAgbmV3IFNldChbLi4uKHByb2QgfHwgW10pLCAuLi4oZGV2IHx8IFtdKSwgLi4uKHBlZXIgfHwgW10pXSlcbiAgKTtcbiAgZGVwcyA9IHR5cGVvZiBkZXBzID09PSBcInN0cmluZ1wiID8gW2RlcHNdIDogZGVwcztcbiAgY29uc3QgdG9JbnN0YWxsID0gZGVwcy5maWx0ZXIoKGQpID0+ICFpbnN0YWxsZWQuaW5jbHVkZXMoZCkpO1xuXG4gIGlmICh0b0luc3RhbGwubGVuZ3RoKSBhd2FpdCBpbnN0YWxsRGVwZW5kZW5jaWVzKHsgZGV2OiB0b0luc3RhbGwgfSk7XG4gIGRlcGVuZGVuY2llcy5kZXYgPSBkZXBlbmRlbmNpZXMuZGV2IHx8IFtdO1xuICBkZXBlbmRlbmNpZXMuZGV2LnB1c2goLi4udG9JbnN0YWxsKTtcbiAgcmV0dXJuIGRlcGVuZGVuY2llcztcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gUHVzaGVzIGNoYW5nZXMgdG8gR2l0IHJlcG9zaXRvcnkuXG4gKiBAc3VtbWFyeSBUZW1wb3JhcmlseSBjaGFuZ2VzIEdpdCB1c2VyIGNvbmZpZ3VyYXRpb24sIGNvbW1pdHMgYWxsIGNoYW5nZXMsIHB1c2hlcyB0byByZW1vdGUsIGFuZCByZXN0b3JlcyBvcmlnaW5hbCB1c2VyIGNvbmZpZ3VyYXRpb24uXG4gKlxuICogQHJldHVybiB7UHJvbWlzZTx2b2lkPn0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiBjaGFuZ2VzIGFyZSBwdXNoZWQuXG4gKlxuICogQGZ1bmN0aW9uIHB1c2hUb0dpdFxuICpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6dXRpbHNcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHB1c2hUb0dpdCgpIHtcbiAgY29uc3QgbG9nID0gbG9nZ2VyLmZvcihwdXNoVG9HaXQpO1xuICBjb25zdCBnaXRVc2VyID0gYXdhaXQgcnVuQ29tbWFuZChcImdpdCBjb25maWcgdXNlci5uYW1lXCIpLnByb21pc2U7XG4gIGNvbnN0IGdpdEVtYWlsID0gYXdhaXQgcnVuQ29tbWFuZChcImdpdCBjb25maWcgdXNlci5lbWFpbFwiKS5wcm9taXNlO1xuICBsb2cudmVyYm9zZShgY2FjaGVkIGdpdCBpZDogJHtnaXRVc2VyfS8ke2dpdEVtYWlsfS4gY2hhbmdpbmcgdG8gYXV0b21hdGlvbmApO1xuICBhd2FpdCBydW5Db21tYW5kKCdnaXQgY29uZmlnIHVzZXIuZW1haWwgXCJhdXRvbWF0aW9uQGRlY2FmLnRzXCInKS5wcm9taXNlO1xuICBhd2FpdCBydW5Db21tYW5kKCdnaXQgY29uZmlnIHVzZXIubmFtZSBcImRlY2FmXCInKS5wcm9taXNlO1xuICBsb2cuaW5mbyhcIlB1c2hpbmcgY2hhbmdlcyB0byBnaXQuLi5cIik7XG4gIGF3YWl0IHJ1bkNvbW1hbmQoXCJnaXQgYWRkIC5cIikucHJvbWlzZTtcbiAgYXdhaXQgcnVuQ29tbWFuZChgZ2l0IGNvbW1pdCAtbSBcInJlZnMgIzEgLSBhZnRlciByZXBvIHNldHVwXCJgKS5wcm9taXNlO1xuICBhd2FpdCBydW5Db21tYW5kKFwiZ2l0IHB1c2hcIikucHJvbWlzZTtcbiAgYXdhaXQgcnVuQ29tbWFuZChgZ2l0IGNvbmZpZyB1c2VyLmVtYWlsIFwiJHtnaXRFbWFpbH1cImApLnByb21pc2U7XG4gIGF3YWl0IHJ1bkNvbW1hbmQoYGdpdCBjb25maWcgdXNlci5uYW1lIFwiJHtnaXRVc2VyfVwiYCkucHJvbWlzZTtcbiAgbG9nLnZlcmJvc2UoYHJldmVydGVkIHRvIGdpdCBpZDogJHtnaXRVc2VyfS8ke2dpdEVtYWlsfWApO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBJbnN0YWxscyBwcm9qZWN0IGRlcGVuZGVuY2llcy5cbiAqIEBzdW1tYXJ5IEluc3RhbGxzIHByb2R1Y3Rpb24sIGRldmVsb3BtZW50LCBhbmQgcGVlciBkZXBlbmRlbmNpZXMgYXMgc3BlY2lmaWVkLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBkZXBlbmRlbmNpZXMgLSBPYmplY3QgY29udGFpbmluZyBhcnJheXMgb2YgZGVwZW5kZW5jaWVzIHRvIGluc3RhbGwuXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBbZGVwZW5kZW5jaWVzLnByb2RdIC0gUHJvZHVjdGlvbiBkZXBlbmRlbmNpZXMgdG8gaW5zdGFsbC5cbiAqIEBwYXJhbSB7c3RyaW5nW119IFtkZXBlbmRlbmNpZXMuZGV2XSAtIERldmVsb3BtZW50IGRlcGVuZGVuY2llcyB0byBpbnN0YWxsLlxuICogQHBhcmFtIHtzdHJpbmdbXX0gW2RlcGVuZGVuY2llcy5wZWVyXSAtIFBlZXIgZGVwZW5kZW5jaWVzIHRvIGluc3RhbGwuXG4gKiBAcmV0dXJuIHtQcm9taXNlPHZvaWQ+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIGFsbCBkZXBlbmRlbmNpZXMgYXJlIGluc3RhbGxlZC5cbiAqXG4gKiBAZnVuY3Rpb24gaW5zdGFsbERlcGVuZGVuY2llc1xuICpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6dXRpbHNcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGluc3RhbGxEZXBlbmRlbmNpZXMoZGVwZW5kZW5jaWVzOiB7XG4gIHByb2Q/OiBzdHJpbmdbXTtcbiAgZGV2Pzogc3RyaW5nW107XG4gIHBlZXI/OiBzdHJpbmdbXTtcbn0pIHtcbiAgY29uc3QgbG9nID0gbG9nZ2VyLmZvcihpbnN0YWxsRGVwZW5kZW5jaWVzKTtcbiAgY29uc3QgcHJvZCA9IGRlcGVuZGVuY2llcy5wcm9kIHx8IFtdO1xuICBjb25zdCBkZXYgPSBkZXBlbmRlbmNpZXMuZGV2IHx8IFtdO1xuICBjb25zdCBwZWVyID0gZGVwZW5kZW5jaWVzLnBlZXIgfHwgW107XG4gIGlmIChwcm9kLmxlbmd0aCkge1xuICAgIGxvZy5pbmZvKGBJbnN0YWxsaW5nIGRlcGVuZGVuY2llcyAke3Byb2Quam9pbihcIiwgXCIpfS4uLmApO1xuICAgIGF3YWl0IHJ1bkNvbW1hbmQoYG5wbSBpbnN0YWxsICR7cHJvZC5qb2luKFwiIFwiKX1gLCB7IGN3ZDogcHJvY2Vzcy5jd2QoKSB9KVxuICAgICAgLnByb21pc2U7XG4gIH1cbiAgaWYgKGRldi5sZW5ndGgpIHtcbiAgICBsb2cuaW5mbyhgSW5zdGFsbGluZyBkZXZEZXBlbmRlbmNpZXMgJHtkZXYuam9pbihcIiwgXCIpfS4uLmApO1xuICAgIGF3YWl0IHJ1bkNvbW1hbmQoYG5wbSBpbnN0YWxsIC0tc2F2ZS1kZXYgJHtkZXYuam9pbihcIiBcIil9YCwge1xuICAgICAgY3dkOiBwcm9jZXNzLmN3ZCgpLFxuICAgIH0pLnByb21pc2U7XG4gIH1cbiAgaWYgKHBlZXIubGVuZ3RoKSB7XG4gICAgbG9nLmluZm8oYEluc3RhbGxpbmcgcGVlckRlcGVuZGVuY2llcyAke3BlZXIuam9pbihcIiwgXCIpfS4uLmApO1xuICAgIGF3YWl0IHJ1bkNvbW1hbmQoYG5wbSBpbnN0YWxsIC0tc2F2ZS1wZWVyICR7cGVlci5qb2luKFwiIFwiKX1gLCB7XG4gICAgICBjd2Q6IHByb2Nlc3MuY3dkKCksXG4gICAgfSkucHJvbWlzZTtcbiAgfVxufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBOb3JtYWxpemVzIGltcG9ydHMgdG8gaGFuZGxlIGJvdGggQ29tbW9uSlMgYW5kIEVTTW9kdWxlIGZvcm1hdHMuXG4gKiBAc3VtbWFyeSBVdGlsaXR5IGZ1bmN0aW9uIHRvIGhhbmRsZSBtb2R1bGUgaW1wb3J0IGRpZmZlcmVuY2VzIGJldHdlZW4gZm9ybWF0cy5cbiAqXG4gKiBAdGVtcGxhdGUgVCAtIFR5cGUgb2YgdGhlIGltcG9ydGVkIG1vZHVsZS5cbiAqIEBwYXJhbSB7UHJvbWlzZTxUPn0gaW1wb3J0UHJvbWlzZSAtIFByb21pc2UgcmV0dXJuZWQgYnkgZHluYW1pYyBpbXBvcnQuXG4gKiBAcmV0dXJuIHtQcm9taXNlPFQ+fSBOb3JtYWxpemVkIG1vZHVsZS5cbiAqXG4gKiBAZnVuY3Rpb24gbm9ybWFsaXplSW1wb3J0XG4gKlxuICogQG1lbWJlck9mIG1vZHVsZTp1dGlsc1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbm9ybWFsaXplSW1wb3J0PFQ+KFxuICBpbXBvcnRQcm9taXNlOiBQcm9taXNlPFQ+XG4pOiBQcm9taXNlPFQ+IHtcbiAgLy8gQ29tbW9uSlMncyBgbW9kdWxlLmV4cG9ydHNgIGlzIHdyYXBwZWQgYXMgYGRlZmF1bHRgIGluIEVTTW9kdWxlLlxuICByZXR1cm4gaW1wb3J0UHJvbWlzZS50aGVuKChtOiBhbnkpID0+IChtLmRlZmF1bHQgfHwgbSkgYXMgVCk7XG59XG4iLCJpbXBvcnQgc2xvZ2FucyBmcm9tIFwiLi4vYXNzZXRzL3Nsb2dhbnMuanNvblwiO1xuaW1wb3J0IHsgc3R5bGUgfSBmcm9tIFwic3R5bGVkLXN0cmluZy1idWlsZGVyXCI7XG5pbXBvcnQgeyBMb2dnZXIgfSBmcm9tIFwiQGRlY2FmLXRzL2xvZ2dpbmdcIjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQXJyYXkgb2YgQU5TSSBjb2xvciBjb2RlcyBmb3IgYmFubmVyIHN0eWxpbmcuXG4gKiBAc3VtbWFyeSBEZWZpbmVzIGEgc2V0IG9mIEFOU0kgY29sb3IgY29kZXMgdXNlZCB0byBzdHlsZSB0aGUgYmFubmVyIHRleHQuXG4gKiBAbWVtYmVyT2YgbW9kdWxlOnV0aWxzXG4gKi9cbmNvbnN0IGNvbG9ycyA9IFtcbiAgXCJcXHgxYlszODs1OzIxNW1cIiwgLy8gc29mdCBvcmFuZ2VcbiAgXCJcXHgxYlszODs1OzIwOW1cIiwgLy8gY29yYWxcbiAgXCJcXHgxYlszODs1OzIwNW1cIiwgLy8gcGlua1xuICBcIlxceDFiWzM4OzU7MjEwbVwiLCAvLyBwZWFjaHlcbiAgXCJcXHgxYlszODs1OzIxN21cIiwgLy8gc2FsbW9uXG4gIFwiXFx4MWJbMzg7NTsyMTZtXCIsIC8vIGxpZ2h0IGNvcmFsXG4gIFwiXFx4MWJbMzg7NTsyMjRtXCIsIC8vIGxpZ2h0IHBlYWNoXG4gIFwiXFx4MWJbMzg7NTsyMzBtXCIsIC8vIHNvZnQgY3JlYW1cbiAgXCJcXHgxYlszODs1OzIzMG1cIiwgLy8gc29mdCBjcmVhbVxuXTtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gUHJpbnRzIGEgc3R5bGVkIGJhbm5lciB0byB0aGUgY29uc29sZS5cbiAqIEBzdW1tYXJ5IEdlbmVyYXRlcyBhbmQgcHJpbnRzIGEgY29sb3JmdWwgQVNDSUkgYXJ0IGJhbm5lciB3aXRoIGEgcmFuZG9tIHNsb2dhbi5cbiAqIEBwYXJhbSB7TG9nZ2VyfSBbbG9nZ2VyXSAtIE9wdGlvbmFsIGxvZ2dlciBmb3IgdmVyYm9zZSBvdXRwdXQuXG4gKiBAbWVtYmVyT2YgbW9kdWxlOnV0aWxzXG4gKiBAZnVuY3Rpb24gcHJpbnRCYW5uZXJcbiAqIEBtZXJtYWlkXG4gKiBzZXF1ZW5jZURpYWdyYW1cbiAqICAgcGFydGljaXBhbnQgcHJpbnRCYW5uZXJcbiAqICAgcGFydGljaXBhbnQgZ2V0U2xvZ2FuXG4gKiAgIHBhcnRpY2lwYW50IHBhZEVuZFxuICogICBwYXJ0aWNpcGFudCBjb25zb2xlXG4gKiAgIHByaW50QmFubmVyLT4+Z2V0U2xvZ2FuOiBDYWxsIGdldFNsb2dhbigpXG4gKiAgIGdldFNsb2dhbi0tPj5wcmludEJhbm5lcjogUmV0dXJuIHJhbmRvbSBzbG9nYW5cbiAqICAgcHJpbnRCYW5uZXItPj5wcmludEJhbm5lcjogQ3JlYXRlIGJhbm5lciBBU0NJSSBhcnRcbiAqICAgcHJpbnRCYW5uZXItPj5wcmludEJhbm5lcjogU3BsaXQgYmFubmVyIGludG8gbGluZXNcbiAqICAgcHJpbnRCYW5uZXItPj5wcmludEJhbm5lcjogQ2FsY3VsYXRlIG1heCBsaW5lIGxlbmd0aFxuICogICBwcmludEJhbm5lci0+PnBhZEVuZDogQ2FsbCBwYWRFbmQgd2l0aCBzbG9nYW5cbiAqICAgcGFkRW5kLS0+PnByaW50QmFubmVyOiBSZXR1cm4gcGFkZGVkIHNsb2dhbiBsaW5lXG4gKiAgIGxvb3AgRm9yIGVhY2ggYmFubmVyIGxpbmVcbiAqICAgICBwcmludEJhbm5lci0+PnN0eWxlOiBDYWxsIHN0eWxlKGxpbmUpXG4gKiAgICAgc3R5bGUtLT4+cHJpbnRCYW5uZXI6IFJldHVybiBzdHlsZWQgbGluZVxuICogICAgIHByaW50QmFubmVyLT4+Y29uc29sZTogTG9nIHN0eWxlZCBsaW5lXG4gKiAgIGVuZFxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJpbnRCYW5uZXIobG9nZ2VyPzogTG9nZ2VyKSB7XG4gIGNvbnN0IG1lc3NhZ2UgPSBnZXRTbG9nYW4oKTtcbiAgY29uc3QgYmFubmVyOiBzdHJpbmcgfCBzdHJpbmdbXSA9XG4gICAgYCMgICAgICAgICAgICAgICAgIOKWkeKWkuKWk+KWiOKWiOKWiOKWiOKWiOKWiOKWiOKWk+KWkuKWkSAg4paR4paS4paT4paI4paI4paI4paI4paI4paI4paI4paI4paT4paS4paRICDilpHilpLilpPilojilojilojilojilojilojilpPilpLilpEgICDilpHilpLilpPilojilojilojilojilojilojilpPilpLilpEgIOKWkeKWkuKWk+KWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWk+KWkuKWkSAgICAgICDilpHilpLilpPilojilojilojilojilojilojilojilojilpPilpLilpEgIOKWkeKWkuKWk+KWiOKWiOKWiOKWiOKWiOKWiOKWiOKWk+KWkuKWkSBcbiMgICAgICAoICggICAgICAgIOKWkeKWkuKWk+KWiOKWk+KWkuKWkeKWkeKWkuKWk+KWiOKWk+KWkuKWkSDilpHilpLilpPilojilpPilpLilpEgICAgICAgIOKWkeKWkuKWk+KWiOKWk+KWkuKWkeKWkeKWkuKWk+KWiOKWk+KWkuKWkSDilpHilpLilpPilojilpPilpLilpHilpHilpLilpPilojilpPilpLilpEg4paR4paS4paT4paI4paT4paS4paRICAgICAgICAgICAgICAgICDilpHilpLilpPilojilpPilpLilpEgICAgIOKWkeKWkuKWk+KWiOKWk+KWkuKWkSAgICAgICAgXG4jICAgICAgICkgKSAgICAgICDilpHilpLilpPilojilpPilpLilpHilpHilpLilpPilojilpPilpLilpEg4paR4paS4paT4paI4paT4paS4paRICAgICAgICDilpHilpLilpPilojilpPilpLilpEgICAgICAgIOKWkeKWkuKWk+KWiOKWk+KWkuKWkeKWkeKWkuKWk+KWiOKWk+KWkuKWkSDilpHilpLilpPilojilpPilpLilpEgICAgICAgICAgICAgICAgIOKWkeKWkuKWk+KWiOKWk+KWkuKWkSAgICAg4paR4paS4paT4paI4paT4paS4paRICAgICAgICBcbiMgICAgWz09PT09PT1dICAgIOKWkeKWkuKWk+KWiOKWk+KWkuKWkeKWkeKWkuKWk+KWiOKWk+KWkuKWkSDilpHilpLilpPilojilojilojilojilojilojilpPilpLilpEgICDilpHilpLilpPilojilpPilpLilpEgICAgICAgIOKWkeKWkuKWk+KWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWk+KWkuKWkSDilpHilpLilpPilojilojilojilojilojilojilpPilpLilpEgICAgICAgICAgICDilpHilpLilpPilojilpPilpLilpEgICAgICDilpHilpLilpPilojilojilojilojilojilojilpPilpLilpEgIFxuIyAgICAgXFxgLS0tLS3CtCAgICAg4paR4paS4paT4paI4paT4paS4paR4paR4paS4paT4paI4paT4paS4paRIOKWkeKWkuKWk+KWiOKWk+KWkuKWkSAgICAgICAg4paR4paS4paT4paI4paT4paS4paRICAgICAgICDilpHilpLilpPilojilpPilpLilpHilpHilpLilpPilojilpPilpLilpEg4paR4paS4paT4paI4paT4paS4paRICAgICAgICAgICAgICAgICDilpHilpLilpPilojilpPilpLilpEgICAgICAgICAgICDilpHilpLilpPilojilpPilpLilpEgXG4jICAgICAgICAgICAgICAgICDilpHilpLilpPilojilpPilpLilpHilpHilpLilpPilojilpPilpLilpEg4paR4paS4paT4paI4paT4paS4paRICAgICAgICDilpHilpLilpPilojilpPilpLilpHilpHilpLilpPilojilpPilpLilpEg4paR4paS4paT4paI4paT4paS4paR4paR4paS4paT4paI4paT4paS4paRIOKWkeKWkuKWk+KWiOKWk+KWkuKWkSAgICAgICAgICAgICAgICAg4paR4paS4paT4paI4paT4paS4paRICAgICAgICAgICAg4paR4paS4paT4paI4paT4paS4paRIFxuIyAgICAgICAgICAgICAgICAg4paR4paS4paT4paI4paI4paI4paI4paI4paI4paI4paT4paS4paRICDilpHilpLilpPilojilojilojilojilojilojilojilojilpPilpLilpEgIOKWkeKWkuKWk+KWiOKWiOKWiOKWiOKWiOKWiOKWk+KWkuKWkSAg4paR4paS4paT4paI4paT4paS4paR4paR4paS4paT4paI4paT4paS4paRIOKWkeKWkuKWk+KWiOKWk+KWkuKWkSAgICAgICAgICAgICAgICAg4paR4paS4paT4paI4paT4paS4paRICAgICDilpHilpLilpPilojilojilojilojilojilojilojilpPilpLilpEgIFxuI2Auc3BsaXQoXCJcXG5cIik7XG4gIGNvbnN0IG1heExlbmd0aCA9IGJhbm5lci5yZWR1Y2UoKG1heCwgbGluZSkgPT4gTWF0aC5tYXgobWF4LCBsaW5lLmxlbmd0aCksIDApO1xuICBiYW5uZXIucHVzaChgIyAgJHttZXNzYWdlLnBhZFN0YXJ0KG1heExlbmd0aCAtIDMpfWApO1xuICBiYW5uZXIuZm9yRWFjaCgobGluZSwgaW5kZXgpID0+IHtcbiAgICAobG9nZ2VyID8gbG9nZ2VyLmluZm8uYmluZChsb2dnZXIpIDogY29uc29sZS5sb2cuYmluZChjb25zb2xlKSkoXG4gICAgICBzdHlsZShsaW5lIHx8IFwiXCIpLnJhdyhjb2xvcnNbaW5kZXhdKS50ZXh0XG4gICAgKTtcbiAgfSk7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFJldHJpZXZlcyBhIHNsb2dhbiBmcm9tIHRoZSBwcmVkZWZpbmVkIGxpc3QuXG4gKiBAc3VtbWFyeSBGZXRjaGVzIGEgcmFuZG9tIHNsb2dhbiBvciBhIHNwZWNpZmljIG9uZSBieSBpbmRleCBmcm9tIHRoZSBzbG9nYW5zIGxpc3QuXG4gKiBAcGFyYW0ge251bWJlcn0gW2ldIC0gT3B0aW9uYWwgaW5kZXggdG8gcmV0cmlldmUgYSBzcGVjaWZpYyBzbG9nYW4uXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBzZWxlY3RlZCBzbG9nYW4uXG4gKiBAZnVuY3Rpb24gZ2V0U2xvZ2FuXG4gKiBAbWVtYmVyT2YgbW9kdWxlOnV0aWxzXG4gKiBAbWVybWFpZFxuICogc2VxdWVuY2VEaWFncmFtXG4gKiAgIHBhcnRpY2lwYW50IGdldFNsb2dhblxuICogICBwYXJ0aWNpcGFudCBNYXRoLnJhbmRvbVxuICogICBwYXJ0aWNpcGFudCBzbG9nYW5zXG4gKiAgIGFsdCBpIGlzIHVuZGVmaW5lZFxuICogICAgIGdldFNsb2dhbi0+Pk1hdGgucmFuZG9tOiBHZW5lcmF0ZSByYW5kb20gaW5kZXhcbiAqICAgICBNYXRoLnJhbmRvbS0tPj5nZXRTbG9nYW46IFJldHVybiByYW5kb20gaW5kZXhcbiAqICAgZWxzZSBpIGlzIGRlZmluZWRcbiAqICAgICBOb3RlIG92ZXIgZ2V0U2xvZ2FuOiBVc2UgcHJvdmlkZWQgaW5kZXhcbiAqICAgZW5kXG4gKiAgIGdldFNsb2dhbi0+PnNsb2dhbnM6IEFjY2VzcyBzbG9nYW4gYXQgaW5kZXhcbiAqICAgc2xvZ2Fucy0tPj5nZXRTbG9nYW46IFJldHVybiBzbG9nYW5cbiAqICAgYWx0IEVycm9yIG9jY3Vyc1xuICogICAgIGdldFNsb2dhbi0+PmdldFNsb2dhbjogVGhyb3cgZXJyb3JcbiAqICAgZW5kXG4gKiAgIGdldFNsb2dhbi0tPj5DYWxsZXI6IFJldHVybiBzbG9nYW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNsb2dhbihpPzogbnVtYmVyKTogc3RyaW5nIHtcbiAgdHJ5IHtcbiAgICBpID1cbiAgICAgIHR5cGVvZiBpID09PSBcInVuZGVmaW5lZFwiID8gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogc2xvZ2Fucy5sZW5ndGgpIDogaTtcbiAgICByZXR1cm4gc2xvZ2Fuc1tpXS5TbG9nYW47XG4gIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gcmV0cmlldmUgc2xvZ2FuczogJHtlcnJvcn1gKTtcbiAgfVxufVxuIiwiLyoqXG4gKiBAZGVzY3JpcHRpb24gRGV0ZXJtaW5lcyBpZiB0aGUgY3VycmVudCBlbnZpcm9ubWVudCBpcyBhIGJyb3dzZXIgYnkgY2hlY2tpbmcgdGhlIHByb3RvdHlwZSBjaGFpbiBvZiB0aGUgZ2xvYmFsIG9iamVjdC5cbiAqIEBzdW1tYXJ5IENoZWNrcyBpZiB0aGUgY29kZSBpcyBydW5uaW5nIGluIGEgYnJvd3NlciBlbnZpcm9ubWVudC5cbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIGVudmlyb25tZW50IGlzIGEgYnJvd3NlciwgZmFsc2Ugb3RoZXJ3aXNlLlxuICogQGZ1bmN0aW9uIGlzQnJvd3NlclxuICogQG1lbWJlck9mIG1vZHVsZTp1dGlsc1xuICovXG5leHBvcnQgZnVuY3Rpb24gaXNCcm93c2VyKCk6IGJvb2xlYW4ge1xuICByZXR1cm4gKFxuICAgIE9iamVjdC5nZXRQcm90b3R5cGVPZihPYmplY3QuZ2V0UHJvdG90eXBlT2YoZ2xvYmFsVGhpcykpICE9PVxuICAgIE9iamVjdC5wcm90b3R5cGVcbiAgKTtcbn1cbiIsIi8qKlxuICogQGNsYXNzIE9iamVjdEFjY3VtdWxhdG9yXG4gKiBAdGVtcGxhdGUgVCAtIFRoZSB0eXBlIG9mIHRoZSBhY2N1bXVsYXRlZCBvYmplY3QsIGV4dGVuZHMgb2JqZWN0XG4gKiBAZGVzY3JpcHRpb24gQSBjbGFzcyB0aGF0IGFjY3VtdWxhdGVzIG9iamVjdHMgYW5kIHByb3ZpZGVzIHR5cGUtc2FmZSBhY2Nlc3MgdG8gdGhlaXIgcHJvcGVydGllcy5cbiAqIEl0IGFsbG93cyBmb3IgZHluYW1pYyBhZGRpdGlvbiBvZiBwcm9wZXJ0aWVzIHdoaWxlIG1haW50YWluaW5nIHR5cGUgaW5mb3JtYXRpb24uXG4gKiBAc3VtbWFyeSBBY2N1bXVsYXRlcyBvYmplY3RzIGFuZCBtYWludGFpbnMgdHlwZSBpbmZvcm1hdGlvbiBmb3IgYWNjdW11bGF0ZWQgcHJvcGVydGllc1xuICogQG1lbWJlck9mIHV0aWxzXG4gKi9cbmV4cG9ydCBjbGFzcyBPYmplY3RBY2N1bXVsYXRvciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBcIl9fc2l6ZVwiLCB7XG4gICAgICAgICAgICB2YWx1ZTogMCxcbiAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQHByb3RlY3RlZFxuICAgICAqIEBkZXNjcmlwdGlvbiBFeHBhbmRzIHRoZSBhY2N1bXVsYXRvciB3aXRoIHByb3BlcnRpZXMgZnJvbSBhIG5ldyBvYmplY3RcbiAgICAgKiBAc3VtbWFyeSBBZGRzIG5ldyBwcm9wZXJ0aWVzIHRvIHRoZSBhY2N1bXVsYXRvclxuICAgICAqIEB0ZW1wbGF0ZSBWIC0gVGhlIHR5cGUgb2YgdGhlIG9iamVjdCBiZWluZyBleHBhbmRlZFxuICAgICAqIEBwYXJhbSB7Vn0gdmFsdWUgLSBUaGUgb2JqZWN0IHRvIGV4cGFuZCB3aXRoXG4gICAgICogQHJldHVybnMge3ZvaWR9XG4gICAgICovXG4gICAgZXhwYW5kKHZhbHVlKSB7XG4gICAgICAgIE9iamVjdC5lbnRyaWVzKHZhbHVlKS5mb3JFYWNoKChbaywgdl0pID0+IHtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBrLCB7XG4gICAgICAgICAgICAgICAgZ2V0OiAoKSA9PiB2LFxuICAgICAgICAgICAgICAgIHNldDogKHZhbCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB2ID0gdmFsO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBBY2N1bXVsYXRlcyBhIG5ldyBvYmplY3QgaW50byB0aGUgYWNjdW11bGF0b3JcbiAgICAgKiBAc3VtbWFyeSBBZGRzIHByb3BlcnRpZXMgZnJvbSBhIG5ldyBvYmplY3QgdG8gdGhlIGFjY3VtdWxhdG9yLCBtYWludGFpbmluZyB0eXBlIGluZm9ybWF0aW9uXG4gICAgICogQHRlbXBsYXRlIFYgLSBUaGUgdHlwZSBvZiB0aGUgb2JqZWN0IGJlaW5nIGFjY3VtdWxhdGVkXG4gICAgICogQHBhcmFtIHtWfSB2YWx1ZSAtIFRoZSBvYmplY3QgdG8gYWNjdW11bGF0ZVxuICAgICAqIEByZXR1cm5zIEEgbmV3IE9iamVjdEFjY3VtdWxhdG9yIGluc3RhbmNlIHdpdGggdXBkYXRlZCB0eXBlIGluZm9ybWF0aW9uXG4gICAgICogQG1lcm1haWRcbiAgICAgKiBzZXF1ZW5jZURpYWdyYW1cbiAgICAgKiAgIHBhcnRpY2lwYW50IEEgYXMgQWNjdW11bGF0b3JcbiAgICAgKiAgIHBhcnRpY2lwYW50IE8gYXMgT2JqZWN0XG4gICAgICogICBBLT4+TzogR2V0IGVudHJpZXNcbiAgICAgKiAgIGxvb3AgRm9yIGVhY2ggZW50cnlcbiAgICAgKiAgICAgQS0+PkE6IERlZmluZSBwcm9wZXJ0eVxuICAgICAqICAgZW5kXG4gICAgICogICBBLT4+QTogVXBkYXRlIHNpemVcbiAgICAgKiAgIEEtPj5BOiBSZXR1cm4gdXBkYXRlZCBhY2N1bXVsYXRvclxuICAgICAqL1xuICAgIGFjY3VtdWxhdGUodmFsdWUpIHtcbiAgICAgICAgdGhpcy5leHBhbmQodmFsdWUpO1xuICAgICAgICB0aGlzLl9fc2l6ZSA9IHRoaXMuX19zaXplICsgT2JqZWN0LmtleXModmFsdWUpLmxlbmd0aDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXRyaWV2ZXMgYSB2YWx1ZSBmcm9tIHRoZSBhY2N1bXVsYXRvciBieSBpdHMga2V5XG4gICAgICogQHN1bW1hcnkgR2V0cyBhIHZhbHVlIGZyb20gdGhlIGFjY3VtdWxhdGVkIG9iamVjdCB1c2luZyBhIHR5cGUtc2FmZSBrZXlcbiAgICAgKiBAdGVtcGxhdGUgVCAtIHZhbHVlIHR5cGVcbiAgICAgKiBAdGVtcGxhdGUgSyAtIFRoZSBrZXkgdHlwZSwgbXVzdCBiZSBhIGtleSBvZiB0aGlzXG4gICAgICogQHBhcmFtIHtLfSBrZXkgLSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZXRyaWV2ZVxuICAgICAqIEByZXR1cm5zIFRoZSB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggdGhlIGtleVxuICAgICAqL1xuICAgIGdldChrZXkpIHtcbiAgICAgICAgaWYgKCEoa2V5IGluIHRoaXMpKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBLZXkgJHtrZXl9IGRvZXMgbm90IGV4aXN0IGluIGFjY3VtdWxhdG9yLiBBdmFpbGFibGUga2V5czogJHt0aGlzLmtleXMoKS5qb2luKFwiLCBcIil9YCk7XG4gICAgICAgIHJldHVybiB0aGlzW2tleV07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXRyaWV2ZXMgYSB2YWx1ZSBmcm9tIHRoZSBhY2N1bXVsYXRvciBieSBpdHMga2V5XG4gICAgICogQHN1bW1hcnkgR2V0cyBhIHZhbHVlIGZyb20gdGhlIGFjY3VtdWxhdGVkIG9iamVjdCB1c2luZyBhIHR5cGUtc2FmZSBrZXlcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmV0cmlldmVcbiAgICAgKiBAcGFyYW0ge2FueX0gdmFsdWUgLSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZXRyaWV2ZVxuICAgICAqL1xuICAgIHB1dChrZXksIHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFjY3VtdWxhdGUoeyBba2V5XTogdmFsdWUgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDaGVja3MgaWYgYSBrZXkgZXhpc3RzIGluIHRoZSBhY2N1bXVsYXRvclxuICAgICAqIEBzdW1tYXJ5IERldGVybWluZXMgd2hldGhlciB0aGUgYWNjdW11bGF0b3IgY29udGFpbnMgYSBzcGVjaWZpYyBrZXlcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSB0byBjaGVjayBmb3IgZXhpc3RlbmNlXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIGtleSBleGlzdHMsIGZhbHNlIG90aGVyd2lzZVxuICAgICAqL1xuICAgIGhhcyhrZXkpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpc1trZXldO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmVtb3ZlcyBhIGtleS12YWx1ZSBwYWlyIGZyb20gdGhlIGFjY3VtdWxhdG9yXG4gICAgICogQHN1bW1hcnkgRGVsZXRlcyBhIHByb3BlcnR5IGZyb20gdGhlIGFjY3VtdWxhdGVkIG9iamVjdFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byByZW1vdmVcbiAgICAgKiBAcmV0dXJucyB7fSBUaGUgYWNjdW11bGF0b3IgaW5zdGFuY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIHByb3BlcnR5IHJlbW92ZWRcbiAgICAgKi9cbiAgICByZW1vdmUoa2V5KSB7XG4gICAgICAgIGlmICghKGtleSBpbiB0aGlzKSlcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICBkZWxldGUgdGhpc1trZXldO1xuICAgICAgICB0aGlzLl9fc2l6ZS0tO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHJpZXZlcyBhbGwga2V5cyBmcm9tIHRoZSBhY2N1bXVsYXRvclxuICAgICAqIEBzdW1tYXJ5IEdldHMgYW4gYXJyYXkgb2YgYWxsIGFjY3VtdWxhdGVkIHByb3BlcnR5IGtleXNcbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nW119IEFuIGFycmF5IG9mIGtleXMgYXMgc3RyaW5nc1xuICAgICAqL1xuICAgIGtleXMoKSB7XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHJpZXZlcyBhbGwgdmFsdWVzIGZyb20gdGhlIGFjY3VtdWxhdG9yXG4gICAgICogQHN1bW1hcnkgR2V0cyBhbiBhcnJheSBvZiBhbGwgYWNjdW11bGF0ZWQgcHJvcGVydHkgdmFsdWVzXG4gICAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgdmFsdWVzXG4gICAgICovXG4gICAgdmFsdWVzKCkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEdldHMgdGhlIG51bWJlciBvZiBrZXktdmFsdWUgcGFpcnMgaW4gdGhlIGFjY3VtdWxhdG9yXG4gICAgICogQHN1bW1hcnkgUmV0dXJucyB0aGUgY291bnQgb2YgYWNjdW11bGF0ZWQgcHJvcGVydGllc1xuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9IFRoZSBudW1iZXIgb2Yga2V5LXZhbHVlIHBhaXJzXG4gICAgICovXG4gICAgc2l6ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX19zaXplO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ2xlYXJzIGFsbCBhY2N1bXVsYXRlZCBrZXktdmFsdWUgcGFpcnNcbiAgICAgKiBAc3VtbWFyeSBSZW1vdmVzIGFsbCBwcm9wZXJ0aWVzIGZyb20gdGhlIGFjY3VtdWxhdG9yIGFuZCByZXR1cm5zIGEgbmV3IGVtcHR5IGluc3RhbmNlXG4gICAgICogQHJldHVybnMge09iamVjdEFjY3VtdWxhdG9yPG5ldmVyPn0gQSBuZXcgZW1wdHkgT2JqZWN0QWNjdW11bGF0b3IgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBjbGVhcigpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBPYmplY3RBY2N1bXVsYXRvcigpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gRXhlY3V0ZXMgYSBjYWxsYmFjayBmb3IgZWFjaCBrZXktdmFsdWUgcGFpciBpbiB0aGUgYWNjdW11bGF0b3JcbiAgICAgKiBAc3VtbWFyeSBJdGVyYXRlcyBvdmVyIGFsbCBhY2N1bXVsYXRlZCBwcm9wZXJ0aWVzLCBjYWxsaW5nIGEgZnVuY3Rpb24gZm9yIGVhY2hcbiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGFueSwgc3RyaW5nLCBudW1iZXIpOiB2b2lkfSBjYWxsYmFjayAtIFRoZSBmdW5jdGlvbiB0byBleGVjdXRlIGZvciBlYWNoIGVudHJ5XG4gICAgICogQHJldHVybnMge3ZvaWR9XG4gICAgICovXG4gICAgZm9yRWFjaChjYWxsYmFjaykge1xuICAgICAgICBPYmplY3QuZW50cmllcyh0aGlzKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0sIGkpID0+IGNhbGxiYWNrKHZhbHVlLCBrZXksIGkpKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENyZWF0ZXMgYSBuZXcgYXJyYXkgd2l0aCB0aGUgcmVzdWx0cyBvZiBjYWxsaW5nIGEgcHJvdmlkZWQgZnVuY3Rpb24gb24gZXZlcnkgZWxlbWVudCBpbiB0aGUgYWNjdW11bGF0b3JcbiAgICAgKiBAc3VtbWFyeSBNYXBzIGVhY2ggYWNjdW11bGF0ZWQgcHJvcGVydHkgdG8gYSBuZXcgdmFsdWUgdXNpbmcgYSBjYWxsYmFjayBmdW5jdGlvblxuICAgICAqIEB0ZW1wbGF0ZSBSIC0gVGhlIHR5cGUgb2YgdGhlIG1hcHBlZCB2YWx1ZXNcbiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGFueSwgc3RyaW5nLG51bWJlcik6IFJ9IGNhbGxiYWNrIC0gRnVuY3Rpb24gdGhhdCBwcm9kdWNlcyBhbiBlbGVtZW50IG9mIHRoZSBuZXcgYXJyYXlcbiAgICAgKiBAcmV0dXJucyB7UltdfSBBIG5ldyBhcnJheSB3aXRoIGVhY2ggZWxlbWVudCBiZWluZyB0aGUgcmVzdWx0IG9mIHRoZSBjYWxsYmFjayBmdW5jdGlvblxuICAgICAqL1xuICAgIG1hcChjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcykubWFwKChba2V5LCB2YWx1ZV0sIGkpID0+IGNhbGxiYWNrKHZhbHVlLCBrZXksIGkpKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lZV05qZFcxMWJHRjBiM0l1YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sY3lJNld5SXVMaTh1TGk5emNtTXZZV05qZFcxMWJHRjBiM0l1ZEhNaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWtGQlFVRTdPenM3T3pzN1IwRlBSenRCUVVOSUxFMUJRVTBzVDBGQlR5eHBRa0ZCYVVJN1NVRlJOVUk3VVVGRFJTeE5RVUZOTEVOQlFVTXNZMEZCWXl4RFFVRkRMRWxCUVVrc1JVRkJSU3hSUVVGUkxFVkJRVVU3V1VGRGNFTXNTMEZCU3l4RlFVRkZMRU5CUVVNN1dVRkRVaXhSUVVGUkxFVkJRVVVzU1VGQlNUdFpRVU5rTEZsQlFWa3NSVUZCUlN4TFFVRkxPMWxCUTI1Q0xGVkJRVlVzUlVGQlJTeExRVUZMTzFOQlEyeENMRU5CUVVNc1EwRkJRenRKUVVOTUxFTkJRVU03U1VGRlJEczdPenM3T3p0UFFVOUhPMGxCUTA4c1RVRkJUU3hEUVVGdFFpeExRVUZSTzFGQlEzcERMRTFCUVUwc1EwRkJReXhQUVVGUExFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETEVWQlFVVXNSVUZCUlR0WlFVTjJReXhOUVVGTkxFTkJRVU1zWTBGQll5eERRVUZETEVsQlFVa3NSVUZCUlN4RFFVRkRMRVZCUVVVN1owSkJRemRDTEVkQlFVY3NSVUZCUlN4SFFVRkhMRVZCUVVVc1EwRkJReXhEUVVGRE8yZENRVU5hTEVkQlFVY3NSVUZCUlN4RFFVRkRMRWRCUVdVc1JVRkJSU3hGUVVGRk8yOUNRVU4yUWl4RFFVRkRMRWRCUVVjc1IwRkJSeXhEUVVGRE8yZENRVU5XTEVOQlFVTTdaMEpCUTBRc1dVRkJXU3hGUVVGRkxFbEJRVWs3WjBKQlEyeENMRlZCUVZVc1JVRkJSU3hKUVVGSk8yRkJRMnBDTEVOQlFVTXNRMEZCUXp0UlFVTk1MRU5CUVVNc1EwRkJReXhEUVVGRE8wbEJRMHdzUTBGQlF6dEpRVVZFT3pzN096czdPenM3T3pzN096czdPMDlCWjBKSE8wbEJRMGdzVlVGQlZTeERRVUZ0UWl4TFFVRlJPMUZCUTI1RExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNN1VVRkRia0lzU1VGQlNTeERRVUZETEUxQlFVMHNSMEZCUnl4SlFVRkpMRU5CUVVNc1RVRkJUU3hIUVVGSExFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1RVRkJUU3hEUVVGRE8xRkJRM1JFTEU5QlFVOHNTVUZCYlVRc1EwRkJRenRKUVVNM1JDeERRVUZETzBsQlJVUTdPenM3T3pzN1QwRlBSenRKUVVOSUxFZEJRVWNzUTBGQmIwSXNSMEZCVFR0UlFVTXpRaXhKUVVGSkxFTkJRVU1zUTBGQlF5eEhRVUZITEVsQlFVa3NTVUZCU1N4RFFVRkRPMWxCUTJoQ0xFMUJRVTBzU1VGQlNTeExRVUZMTEVOQlEySXNUMEZCVHl4SFFVRmhMRzFFUVVGdFJDeEpRVUZKTEVOQlFVTXNTVUZCU1N4RlFVRkZMRU5CUVVNc1NVRkJTU3hEUVVOeVJpeEpRVUZKTEVOQlEwd3NSVUZCUlN4RFFVTktMRU5CUVVNN1VVRkRTaXhQUVVGUkxFbEJRVmtzUTBGQlF5eEhRVUZSTEVOQlFWTXNRMEZCUXp0SlFVTjZReXhEUVVGRE8wbEJSVVE3T3pzN08wOUJTMGM3U1VGRFNDeEhRVUZITEVOQlFVTXNSMEZCVnl4RlFVRkZMRXRCUVZVN1VVRkRla0lzVDBGQlR5eEpRVUZKTEVOQlFVTXNWVUZCVlN4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeExRVUZMTEVWQlFVVXNRMEZCUXl4RFFVRkRPMGxCUXpORExFTkJRVU03U1VGRlJEczdPenM3VDBGTFJ6dEpRVU5JTEVkQlFVY3NRMEZCUXl4SFFVRlhPMUZCUTJJc1QwRkJUeXhEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEVkQlFXbENMRU5CUVVNc1EwRkJRenRKUVVOdVF5eERRVUZETzBsQlJVUTdPenM3TzA5QlMwYzdTVUZEU0N4TlFVRk5MRU5CUTBvc1IwRkJkMEk3VVVGSmVFSXNTVUZCU1N4RFFVRkRMRU5CUVVNc1IwRkJSeXhKUVVGSkxFbEJRVWtzUTBGQlF6dFpRVUZGTEU5QlFVOHNTVUZCU1N4RFFVRkRPMUZCUldoRExFOUJRVThzU1VGQlNTeERRVUZETEVkQlFXbENMRU5CUVVNc1EwRkJRenRSUVVNdlFpeEpRVUZKTEVOQlFVTXNUVUZCVFN4RlFVRkZMRU5CUVVNN1VVRkRaQ3hQUVVGUExFbEJRMjlETEVOQlFVTTdTVUZET1VNc1EwRkJRenRKUVVWRU96czdPMDlCU1VjN1NVRkRTQ3hKUVVGSk8xRkJRMFlzVDBGQlR5eE5RVUZOTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRE8wbEJRek5DTEVOQlFVTTdTVUZGUkRzN096dFBRVWxITzBsQlEwZ3NUVUZCVFR0UlFVTktMRTlCUVU4c1RVRkJUU3hEUVVGRExFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXp0SlFVTTNRaXhEUVVGRE8wbEJSVVE3T3pzN1QwRkpSenRKUVVOSUxFbEJRVWs3VVVGRFJpeFBRVUZQTEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNN1NVRkRja0lzUTBGQlF6dEpRVVZFT3pzN08wOUJTVWM3U1VGRFNDeExRVUZMTzFGQlEwZ3NUMEZCVHl4SlFVRkpMR2xDUVVGcFFpeEZRVUZGTEVOQlFVTTdTVUZEYWtNc1EwRkJRenRKUVVWRU96czdPenRQUVV0SE8wbEJRMGdzVDBGQlR5eERRVU5NTEZGQlFYVkZPMUZCUlhaRkxFMUJRVTBzUTBGQlF5eFBRVUZQTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEVWQlFVVXNTMEZCU3l4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFVkJRVVVzUTBGREwwTXNVVUZCVVN4RFFVRkRMRXRCUVVzc1JVRkJSU3hIUVVGcFFpeEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVTjBReXhEUVVGRE8wbEJRMG9zUTBGQlF6dEpRVVZFT3pzN096czdUMEZOUnp0SlFVTklMRWRCUVVjc1EwRkRSQ3hSUVVGdlJUdFJRVVZ3UlN4UFFVRlBMRTFCUVUwc1EwRkJReXhQUVVGUExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFVkJRVVVzUzBGQlN5eERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRVZCUVVVc1EwRkRiRVFzVVVGQlVTeERRVUZETEV0QlFVc3NSVUZCUlN4SFFVRnBRaXhGUVVGRkxFTkJRVU1zUTBGQlF5eERRVU4wUXl4RFFVRkRPMGxCUTBvc1EwRkJRenREUVVOR0lpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lMeW9xWEc0Z0tpQkFZMnhoYzNNZ1QySnFaV04wUVdOamRXMTFiR0YwYjNKY2JpQXFJRUIwWlcxd2JHRjBaU0JVSUMwZ1ZHaGxJSFI1Y0dVZ2IyWWdkR2hsSUdGalkzVnRkV3hoZEdWa0lHOWlhbVZqZEN3Z1pYaDBaVzVrY3lCdlltcGxZM1JjYmlBcUlFQmtaWE5qY21sd2RHbHZiaUJCSUdOc1lYTnpJSFJvWVhRZ1lXTmpkVzExYkdGMFpYTWdiMkpxWldOMGN5QmhibVFnY0hKdmRtbGtaWE1nZEhsd1pTMXpZV1psSUdGalkyVnpjeUIwYnlCMGFHVnBjaUJ3Y205d1pYSjBhV1Z6TGx4dUlDb2dTWFFnWVd4c2IzZHpJR1p2Y2lCa2VXNWhiV2xqSUdGa1pHbDBhVzl1SUc5bUlIQnliM0JsY25ScFpYTWdkMmhwYkdVZ2JXRnBiblJoYVc1cGJtY2dkSGx3WlNCcGJtWnZjbTFoZEdsdmJpNWNiaUFxSUVCemRXMXRZWEo1SUVGalkzVnRkV3hoZEdWeklHOWlhbVZqZEhNZ1lXNWtJRzFoYVc1MFlXbHVjeUIwZVhCbElHbHVabTl5YldGMGFXOXVJR1p2Y2lCaFkyTjFiWFZzWVhSbFpDQndjbTl3WlhKMGFXVnpYRzRnS2lCQWJXVnRZbVZ5VDJZZ2RYUnBiSE5jYmlBcUwxeHVaWGh3YjNKMElHTnNZWE56SUU5aWFtVmpkRUZqWTNWdGRXeGhkRzl5UEZRZ1pYaDBaVzVrY3lCdlltcGxZM1ErSUh0Y2JpQWdMeW9xWEc0Z0lDQXFJRUJ3Y21sMllYUmxYRzRnSUNBcUlFQmtaWE5qY21sd2RHbHZiaUJVYUdVZ2MybDZaU0J2WmlCMGFHVWdZV05qZFcxMWJHRjBaV1FnYjJKcVpXTjBYRzRnSUNBcUlFQjBlWEJsSUh0dWRXMWlaWEo5WEc0Z0lDQXFMMXh1SUNCd2NtbDJZWFJsSUY5ZmMybDZaU0U2SUc1MWJXSmxjanRjYmx4dUlDQmpiMjV6ZEhKMVkzUnZjaWdwSUh0Y2JpQWdJQ0JQWW1wbFkzUXVaR1ZtYVc1bFVISnZjR1Z5ZEhrb2RHaHBjeXdnWENKZlgzTnBlbVZjSWl3Z2UxeHVJQ0FnSUNBZ2RtRnNkV1U2SURBc1hHNGdJQ0FnSUNCM2NtbDBZV0pzWlRvZ2RISjFaU3hjYmlBZ0lDQWdJR052Ym1acFozVnlZV0pzWlRvZ1ptRnNjMlVzWEc0Z0lDQWdJQ0JsYm5WdFpYSmhZbXhsT2lCbVlXeHpaU3hjYmlBZ0lDQjlLVHRjYmlBZ2ZWeHVYRzRnSUM4cUtseHVJQ0FnS2lCQWNISnZkR1ZqZEdWa1hHNGdJQ0FxSUVCa1pYTmpjbWx3ZEdsdmJpQkZlSEJoYm1SeklIUm9aU0JoWTJOMWJYVnNZWFJ2Y2lCM2FYUm9JSEJ5YjNCbGNuUnBaWE1nWm5KdmJTQmhJRzVsZHlCdlltcGxZM1JjYmlBZ0lDb2dRSE4xYlcxaGNua2dRV1JrY3lCdVpYY2djSEp2Y0dWeWRHbGxjeUIwYnlCMGFHVWdZV05qZFcxMWJHRjBiM0pjYmlBZ0lDb2dRSFJsYlhCc1lYUmxJRllnTFNCVWFHVWdkSGx3WlNCdlppQjBhR1VnYjJKcVpXTjBJR0psYVc1bklHVjRjR0Z1WkdWa1hHNGdJQ0FxSUVCd1lYSmhiU0I3Vm4wZ2RtRnNkV1VnTFNCVWFHVWdiMkpxWldOMElIUnZJR1Y0Y0dGdVpDQjNhWFJvWEc0Z0lDQXFJRUJ5WlhSMWNtNXpJSHQyYjJsa2ZWeHVJQ0FnS2k5Y2JpQWdjSEp2ZEdWamRHVmtJR1Y0Y0dGdVpEeFdJR1Y0ZEdWdVpITWdiMkpxWldOMFBpaDJZV3gxWlRvZ1ZpazZJSFp2YVdRZ2UxeHVJQ0FnSUU5aWFtVmpkQzVsYm5SeWFXVnpLSFpoYkhWbEtTNW1iM0pGWVdOb0tDaGJheXdnZGwwcElEMCtJSHRjYmlBZ0lDQWdJRTlpYW1WamRDNWtaV1pwYm1WUWNtOXdaWEowZVNoMGFHbHpMQ0JyTENCN1hHNGdJQ0FnSUNBZ0lHZGxkRG9nS0NrZ1BUNGdkaXhjYmlBZ0lDQWdJQ0FnYzJWME9pQW9kbUZzT2lCV1cydGxlVzltSUZaZEtTQTlQaUI3WEc0Z0lDQWdJQ0FnSUNBZ2RpQTlJSFpoYkR0Y2JpQWdJQ0FnSUNBZ2ZTeGNiaUFnSUNBZ0lDQWdZMjl1Wm1sbmRYSmhZbXhsT2lCMGNuVmxMRnh1SUNBZ0lDQWdJQ0JsYm5WdFpYSmhZbXhsT2lCMGNuVmxMRnh1SUNBZ0lDQWdmU2s3WEc0Z0lDQWdmU2s3WEc0Z0lIMWNibHh1SUNBdktpcGNiaUFnSUNvZ1FHUmxjMk55YVhCMGFXOXVJRUZqWTNWdGRXeGhkR1Z6SUdFZ2JtVjNJRzlpYW1WamRDQnBiblJ2SUhSb1pTQmhZMk4xYlhWc1lYUnZjbHh1SUNBZ0tpQkFjM1Z0YldGeWVTQkJaR1J6SUhCeWIzQmxjblJwWlhNZ1puSnZiU0JoSUc1bGR5QnZZbXBsWTNRZ2RHOGdkR2hsSUdGalkzVnRkV3hoZEc5eUxDQnRZV2x1ZEdGcGJtbHVaeUIwZVhCbElHbHVabTl5YldGMGFXOXVYRzRnSUNBcUlFQjBaVzF3YkdGMFpTQldJQzBnVkdobElIUjVjR1VnYjJZZ2RHaGxJRzlpYW1WamRDQmlaV2x1WnlCaFkyTjFiWFZzWVhSbFpGeHVJQ0FnS2lCQWNHRnlZVzBnZTFaOUlIWmhiSFZsSUMwZ1ZHaGxJRzlpYW1WamRDQjBieUJoWTJOMWJYVnNZWFJsWEc0Z0lDQXFJRUJ5WlhSMWNtNXpJRUVnYm1WM0lFOWlhbVZqZEVGalkzVnRkV3hoZEc5eUlHbHVjM1JoYm1ObElIZHBkR2dnZFhCa1lYUmxaQ0IwZVhCbElHbHVabTl5YldGMGFXOXVYRzRnSUNBcUlFQnRaWEp0WVdsa1hHNGdJQ0FxSUhObGNYVmxibU5sUkdsaFozSmhiVnh1SUNBZ0tpQWdJSEJoY25ScFkybHdZVzUwSUVFZ1lYTWdRV05qZFcxMWJHRjBiM0pjYmlBZ0lDb2dJQ0J3WVhKMGFXTnBjR0Z1ZENCUElHRnpJRTlpYW1WamRGeHVJQ0FnS2lBZ0lFRXRQajVQT2lCSFpYUWdaVzUwY21sbGMxeHVJQ0FnS2lBZ0lHeHZiM0FnUm05eUlHVmhZMmdnWlc1MGNubGNiaUFnSUNvZ0lDQWdJRUV0UGo1Qk9pQkVaV1pwYm1VZ2NISnZjR1Z5ZEhsY2JpQWdJQ29nSUNCbGJtUmNiaUFnSUNvZ0lDQkJMVDQrUVRvZ1ZYQmtZWFJsSUhOcGVtVmNiaUFnSUNvZ0lDQkJMVDQrUVRvZ1VtVjBkWEp1SUhWd1pHRjBaV1FnWVdOamRXMTFiR0YwYjNKY2JpQWdJQ292WEc0Z0lHRmpZM1Z0ZFd4aGRHVThWaUJsZUhSbGJtUnpJRzlpYW1WamRENG9kbUZzZFdVNklGWXBPaUJVSUNZZ1ZpQW1JRTlpYW1WamRFRmpZM1Z0ZFd4aGRHOXlQRlFnSmlCV1BpQjdYRzRnSUNBZ2RHaHBjeTVsZUhCaGJtUW9kbUZzZFdVcE8xeHVJQ0FnSUhSb2FYTXVYMTl6YVhwbElEMGdkR2hwY3k1ZlgzTnBlbVVnS3lCUFltcGxZM1F1YTJWNWN5aDJZV3gxWlNrdWJHVnVaM1JvTzF4dUlDQWdJSEpsZEhWeWJpQjBhR2x6SUdGeklIVnVhMjV2ZDI0Z1lYTWdWQ0FtSUZZZ0ppQlBZbXBsWTNSQlkyTjFiWFZzWVhSdmNqeFVJQ1lnVmo0N1hHNGdJSDFjYmx4dUlDQXZLaXBjYmlBZ0lDb2dRR1JsYzJOeWFYQjBhVzl1SUZKbGRISnBaWFpsY3lCaElIWmhiSFZsSUdaeWIyMGdkR2hsSUdGalkzVnRkV3hoZEc5eUlHSjVJR2wwY3lCclpYbGNiaUFnSUNvZ1FITjFiVzFoY25rZ1IyVjBjeUJoSUhaaGJIVmxJR1p5YjIwZ2RHaGxJR0ZqWTNWdGRXeGhkR1ZrSUc5aWFtVmpkQ0IxYzJsdVp5QmhJSFI1Y0dVdGMyRm1aU0JyWlhsY2JpQWdJQ29nUUhSbGJYQnNZWFJsSUZRZ0xTQjJZV3gxWlNCMGVYQmxYRzRnSUNBcUlFQjBaVzF3YkdGMFpTQkxJQzBnVkdobElHdGxlU0IwZVhCbExDQnRkWE4wSUdKbElHRWdhMlY1SUc5bUlIUm9hWE5jYmlBZ0lDb2dRSEJoY21GdElIdExmU0JyWlhrZ0xTQlVhR1VnYTJWNUlHOW1JSFJvWlNCMllXeDFaU0IwYnlCeVpYUnlhV1YyWlZ4dUlDQWdLaUJBY21WMGRYSnVjeUJVYUdVZ2RtRnNkV1VnWVhOemIyTnBZWFJsWkNCM2FYUm9JSFJvWlNCclpYbGNiaUFnSUNvdlhHNGdJR2RsZER4TElHVjRkR1Z1WkhNZ2EyVjViMllnVkQ0b2EyVjVPaUJMS1RvZ1ZGdExYU0I3WEc0Z0lDQWdhV1lnS0NFb2EyVjVJR2x1SUhSb2FYTXBLVnh1SUNBZ0lDQWdkR2h5YjNjZ2JtVjNJRVZ5Y205eUtGeHVJQ0FnSUNBZ0lDQmdTMlY1SUNSN2EyVjVJR0Z6SUhOMGNtbHVaMzBnWkc5bGN5QnViM1FnWlhocGMzUWdhVzRnWVdOamRXMTFiR0YwYjNJdUlFRjJZV2xzWVdKc1pTQnJaWGx6T2lBa2UzUm9hWE11YTJWNWN5Z3BMbXB2YVc0b1hHNGdJQ0FnSUNBZ0lDQWdYQ0lzSUZ3aVhHNGdJQ0FnSUNBZ0lDbDlZRnh1SUNBZ0lDQWdLVHRjYmlBZ0lDQnlaWFIxY200Z0tIUm9hWE1nWVhNZ1lXNTVLVnRyWlhrZ1lYTWdTMTBnWVhNZ1ZGdExYVHRjYmlBZ2ZWeHVYRzRnSUM4cUtseHVJQ0FnS2lCQVpHVnpZM0pwY0hScGIyNGdVbVYwY21sbGRtVnpJR0VnZG1Gc2RXVWdabkp2YlNCMGFHVWdZV05qZFcxMWJHRjBiM0lnWW5rZ2FYUnpJR3RsZVZ4dUlDQWdLaUJBYzNWdGJXRnllU0JIWlhSeklHRWdkbUZzZFdVZ1puSnZiU0IwYUdVZ1lXTmpkVzExYkdGMFpXUWdiMkpxWldOMElIVnphVzVuSUdFZ2RIbHdaUzF6WVdabElHdGxlVnh1SUNBZ0tpQkFjR0Z5WVcwZ2UzTjBjbWx1WjMwZ2EyVjVJQzBnVkdobElHdGxlU0J2WmlCMGFHVWdkbUZzZFdVZ2RHOGdjbVYwY21sbGRtVmNiaUFnSUNvZ1FIQmhjbUZ0SUh0aGJubDlJSFpoYkhWbElDMGdWR2hsSUd0bGVTQnZaaUIwYUdVZ2RtRnNkV1VnZEc4Z2NtVjBjbWxsZG1WY2JpQWdJQ292WEc0Z0lIQjFkQ2hyWlhrNklITjBjbWx1Wnl3Z2RtRnNkV1U2SUdGdWVTa2dlMXh1SUNBZ0lISmxkSFZ5YmlCMGFHbHpMbUZqWTNWdGRXeGhkR1VvZXlCYmEyVjVYVG9nZG1Gc2RXVWdmU2s3WEc0Z0lIMWNibHh1SUNBdktpcGNiaUFnSUNvZ1FHUmxjMk55YVhCMGFXOXVJRU5vWldOcmN5QnBaaUJoSUd0bGVTQmxlR2x6ZEhNZ2FXNGdkR2hsSUdGalkzVnRkV3hoZEc5eVhHNGdJQ0FxSUVCemRXMXRZWEo1SUVSbGRHVnliV2x1WlhNZ2QyaGxkR2hsY2lCMGFHVWdZV05qZFcxMWJHRjBiM0lnWTI5dWRHRnBibk1nWVNCemNHVmphV1pwWXlCclpYbGNiaUFnSUNvZ1FIQmhjbUZ0SUh0emRISnBibWQ5SUd0bGVTQXRJRlJvWlNCclpYa2dkRzhnWTJobFkyc2dabTl5SUdWNGFYTjBaVzVqWlZ4dUlDQWdLaUJBY21WMGRYSnVjeUI3WW05dmJHVmhibjBnVkhKMVpTQnBaaUIwYUdVZ2EyVjVJR1Y0YVhOMGN5d2dabUZzYzJVZ2IzUm9aWEozYVhObFhHNGdJQ0FxTDF4dUlDQm9ZWE1vYTJWNU9pQnpkSEpwYm1jcE9pQmliMjlzWldGdUlIdGNiaUFnSUNCeVpYUjFjbTRnSVNGMGFHbHpXMnRsZVNCaGN5QnJaWGx2WmlCMGFHbHpYVHRjYmlBZ2ZWeHVYRzRnSUM4cUtseHVJQ0FnS2lCQVpHVnpZM0pwY0hScGIyNGdVbVZ0YjNabGN5QmhJR3RsZVMxMllXeDFaU0J3WVdseUlHWnliMjBnZEdobElHRmpZM1Z0ZFd4aGRHOXlYRzRnSUNBcUlFQnpkVzF0WVhKNUlFUmxiR1YwWlhNZ1lTQndjbTl3WlhKMGVTQm1jbTl0SUhSb1pTQmhZMk4xYlhWc1lYUmxaQ0J2WW1wbFkzUmNiaUFnSUNvZ1FIQmhjbUZ0SUh0emRISnBibWQ5SUd0bGVTQXRJRlJvWlNCclpYa2diMllnZEdobElIQnliM0JsY25SNUlIUnZJSEpsYlc5MlpWeHVJQ0FnS2lCQWNtVjBkWEp1Y3lCN2ZTQlVhR1VnWVdOamRXMTFiR0YwYjNJZ2FXNXpkR0Z1WTJVZ2QybDBhQ0IwYUdVZ2MzQmxZMmxtYVdWa0lIQnliM0JsY25SNUlISmxiVzkyWldSY2JpQWdJQ292WEc0Z0lISmxiVzkyWlNoY2JpQWdJQ0JyWlhrNklHdGxlVzltSUhSb2FYTWdmQ0J6ZEhKcGJtZGNiaUFnS1RwY2JpQWdJQ0I4SUNoUGJXbDBQSFJvYVhNc0lIUjVjR1Z2WmlCclpYaytJQ1lnVDJKcVpXTjBRV05qZFcxMWJHRjBiM0k4VDIxcGREeDBhR2x6TENCMGVYQmxiMllnYTJWNVBqNHBYRzRnSUNBZ2ZDQjBhR2x6SUh0Y2JpQWdJQ0JwWmlBb0lTaHJaWGtnYVc0Z2RHaHBjeWtwSUhKbGRIVnliaUIwYUdsek8xeHVYRzRnSUNBZ1pHVnNaWFJsSUhSb2FYTmJhMlY1SUdGeklHdGxlVzltSUhSb2FYTmRPMXh1SUNBZ0lIUm9hWE11WDE5emFYcGxMUzA3WEc0Z0lDQWdjbVYwZFhKdUlIUm9hWE1nWVhNZ2RXNXJibTkzYmlCaGN5QlBiV2wwUEhSb2FYTXNJSFI1Y0dWdlppQnJaWGsrSUNaY2JpQWdJQ0FnSUU5aWFtVmpkRUZqWTNWdGRXeGhkRzl5UEU5dGFYUThkR2hwY3l3Z2RIbHdaVzltSUd0bGVUNCtPMXh1SUNCOVhHNWNiaUFnTHlvcVhHNGdJQ0FxSUVCa1pYTmpjbWx3ZEdsdmJpQlNaWFJ5YVdWMlpYTWdZV3hzSUd0bGVYTWdabkp2YlNCMGFHVWdZV05qZFcxMWJHRjBiM0pjYmlBZ0lDb2dRSE4xYlcxaGNua2dSMlYwY3lCaGJpQmhjbkpoZVNCdlppQmhiR3dnWVdOamRXMTFiR0YwWldRZ2NISnZjR1Z5ZEhrZ2EyVjVjMXh1SUNBZ0tpQkFjbVYwZFhKdWN5QjdjM1J5YVc1blcxMTlJRUZ1SUdGeWNtRjVJRzltSUd0bGVYTWdZWE1nYzNSeWFXNW5jMXh1SUNBZ0tpOWNiaUFnYTJWNWN5Z3BPaUJ6ZEhKcGJtZGJYU0I3WEc0Z0lDQWdjbVYwZFhKdUlFOWlhbVZqZEM1clpYbHpLSFJvYVhNcE8xeHVJQ0I5WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRUJrWlhOamNtbHdkR2x2YmlCU1pYUnlhV1YyWlhNZ1lXeHNJSFpoYkhWbGN5Qm1jbTl0SUhSb1pTQmhZMk4xYlhWc1lYUnZjbHh1SUNBZ0tpQkFjM1Z0YldGeWVTQkhaWFJ6SUdGdUlHRnljbUY1SUc5bUlHRnNiQ0JoWTJOMWJYVnNZWFJsWkNCd2NtOXdaWEowZVNCMllXeDFaWE5jYmlBZ0lDb2dRSEpsZEhWeWJuTWdRVzRnWVhKeVlYa2diMllnZG1Gc2RXVnpYRzRnSUNBcUwxeHVJQ0IyWVd4MVpYTW9LVG9nVkZ0clpYbHZaaUJVWFZ0ZElIdGNiaUFnSUNCeVpYUjFjbTRnVDJKcVpXTjBMblpoYkhWbGN5aDBhR2x6S1R0Y2JpQWdmVnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkFaR1Z6WTNKcGNIUnBiMjRnUjJWMGN5QjBhR1VnYm5WdFltVnlJRzltSUd0bGVTMTJZV3gxWlNCd1lXbHljeUJwYmlCMGFHVWdZV05qZFcxMWJHRjBiM0pjYmlBZ0lDb2dRSE4xYlcxaGNua2dVbVYwZFhKdWN5QjBhR1VnWTI5MWJuUWdiMllnWVdOamRXMTFiR0YwWldRZ2NISnZjR1Z5ZEdsbGMxeHVJQ0FnS2lCQWNtVjBkWEp1Y3lCN2JuVnRZbVZ5ZlNCVWFHVWdiblZ0WW1WeUlHOW1JR3RsZVMxMllXeDFaU0J3WVdseWMxeHVJQ0FnS2k5Y2JpQWdjMmw2WlNncE9pQnVkVzFpWlhJZ2UxeHVJQ0FnSUhKbGRIVnliaUIwYUdsekxsOWZjMmw2WlR0Y2JpQWdmVnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkFaR1Z6WTNKcGNIUnBiMjRnUTJ4bFlYSnpJR0ZzYkNCaFkyTjFiWFZzWVhSbFpDQnJaWGt0ZG1Gc2RXVWdjR0ZwY25OY2JpQWdJQ29nUUhOMWJXMWhjbmtnVW1WdGIzWmxjeUJoYkd3Z2NISnZjR1Z5ZEdsbGN5Qm1jbTl0SUhSb1pTQmhZMk4xYlhWc1lYUnZjaUJoYm1RZ2NtVjBkWEp1Y3lCaElHNWxkeUJsYlhCMGVTQnBibk4wWVc1alpWeHVJQ0FnS2lCQWNtVjBkWEp1Y3lCN1QySnFaV04wUVdOamRXMTFiR0YwYjNJOGJtVjJaWEkrZlNCQklHNWxkeUJsYlhCMGVTQlBZbXBsWTNSQlkyTjFiWFZzWVhSdmNpQnBibk4wWVc1alpWeHVJQ0FnS2k5Y2JpQWdZMnhsWVhJb0tUb2dUMkpxWldOMFFXTmpkVzExYkdGMGIzSThibVYyWlhJK0lIdGNiaUFnSUNCeVpYUjFjbTRnYm1WM0lFOWlhbVZqZEVGalkzVnRkV3hoZEc5eUtDazdYRzRnSUgxY2JseHVJQ0F2S2lwY2JpQWdJQ29nUUdSbGMyTnlhWEIwYVc5dUlFVjRaV04xZEdWeklHRWdZMkZzYkdKaFkyc2dabTl5SUdWaFkyZ2dhMlY1TFhaaGJIVmxJSEJoYVhJZ2FXNGdkR2hsSUdGalkzVnRkV3hoZEc5eVhHNGdJQ0FxSUVCemRXMXRZWEo1SUVsMFpYSmhkR1Z6SUc5MlpYSWdZV3hzSUdGalkzVnRkV3hoZEdWa0lIQnliM0JsY25ScFpYTXNJR05oYkd4cGJtY2dZU0JtZFc1amRHbHZiaUJtYjNJZ1pXRmphRnh1SUNBZ0tpQkFjR0Z5WVcwZ2UyWjFibU4wYVc5dUtHRnVlU3dnYzNSeWFXNW5MQ0J1ZFcxaVpYSXBPaUIyYjJsa2ZTQmpZV3hzWW1GamF5QXRJRlJvWlNCbWRXNWpkR2x2YmlCMGJ5QmxlR1ZqZFhSbElHWnZjaUJsWVdOb0lHVnVkSEo1WEc0Z0lDQXFJRUJ5WlhSMWNtNXpJSHQyYjJsa2ZWeHVJQ0FnS2k5Y2JpQWdabTl5UldGamFDaGNiaUFnSUNCallXeHNZbUZqYXpvZ0tIWmhiSFZsT2lCMGFHbHpXMnRsZVc5bUlIUm9hWE5kTENCclpYazZJR3RsZVc5bUlIUm9hWE1zSUdrNklHNTFiV0psY2lrZ1BUNGdkbTlwWkZ4dUlDQXBPaUIyYjJsa0lIdGNiaUFnSUNCUFltcGxZM1F1Wlc1MGNtbGxjeWgwYUdsektTNW1iM0pGWVdOb0tDaGJhMlY1TENCMllXeDFaVjBzSUdrcElEMCtYRzRnSUNBZ0lDQmpZV3hzWW1GamF5aDJZV3gxWlN3Z2EyVjVJR0Z6SUd0bGVXOW1JSFJvYVhNc0lHa3BYRzRnSUNBZ0tUdGNiaUFnZlZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJBWkdWelkzSnBjSFJwYjI0Z1EzSmxZWFJsY3lCaElHNWxkeUJoY25KaGVTQjNhWFJvSUhSb1pTQnlaWE4xYkhSeklHOW1JR05oYkd4cGJtY2dZU0J3Y205MmFXUmxaQ0JtZFc1amRHbHZiaUJ2YmlCbGRtVnllU0JsYkdWdFpXNTBJR2x1SUhSb1pTQmhZMk4xYlhWc1lYUnZjbHh1SUNBZ0tpQkFjM1Z0YldGeWVTQk5ZWEJ6SUdWaFkyZ2dZV05qZFcxMWJHRjBaV1FnY0hKdmNHVnlkSGtnZEc4Z1lTQnVaWGNnZG1Gc2RXVWdkWE5wYm1jZ1lTQmpZV3hzWW1GamF5Qm1kVzVqZEdsdmJseHVJQ0FnS2lCQWRHVnRjR3hoZEdVZ1VpQXRJRlJvWlNCMGVYQmxJRzltSUhSb1pTQnRZWEJ3WldRZ2RtRnNkV1Z6WEc0Z0lDQXFJRUJ3WVhKaGJTQjdablZ1WTNScGIyNG9ZVzU1TENCemRISnBibWNzYm5WdFltVnlLVG9nVW4wZ1kyRnNiR0poWTJzZ0xTQkdkVzVqZEdsdmJpQjBhR0YwSUhCeWIyUjFZMlZ6SUdGdUlHVnNaVzFsYm5RZ2IyWWdkR2hsSUc1bGR5QmhjbkpoZVZ4dUlDQWdLaUJBY21WMGRYSnVjeUI3VWx0ZGZTQkJJRzVsZHlCaGNuSmhlU0IzYVhSb0lHVmhZMmdnWld4bGJXVnVkQ0JpWldsdVp5QjBhR1VnY21WemRXeDBJRzltSUhSb1pTQmpZV3hzWW1GamF5Qm1kVzVqZEdsdmJseHVJQ0FnS2k5Y2JpQWdiV0Z3UEZJK0tGeHVJQ0FnSUdOaGJHeGlZV05yT2lBb2RtRnNkV1U2SUhSb2FYTmJhMlY1YjJZZ2RHaHBjMTBzSUd0bGVUb2dhMlY1YjJZZ2RHaHBjeXdnYVRvZ2JuVnRZbVZ5S1NBOVBpQlNYRzRnSUNrNklGSmJYU0I3WEc0Z0lDQWdjbVYwZFhKdUlFOWlhbVZqZEM1bGJuUnlhV1Z6S0hSb2FYTXBMbTFoY0Nnb1cydGxlU3dnZG1Gc2RXVmRMQ0JwS1NBOVBseHVJQ0FnSUNBZ1kyRnNiR0poWTJzb2RtRnNkV1VzSUd0bGVTQmhjeUJyWlhsdlppQjBhR2x6TENCcEtWeHVJQ0FnSUNrN1hHNGdJSDFjYm4xY2JpSmRmUT09IiwiaW1wb3J0IHsgdG9FTlZGb3JtYXQgfSBmcm9tIFwiLi90ZXh0XCI7XG5pbXBvcnQgeyBFbnZpcm9ubWVudEZhY3RvcnkgfSBmcm9tIFwiLi90eXBlc1wiO1xuaW1wb3J0IHsgaXNCcm93c2VyIH0gZnJvbSBcIi4vd2ViXCI7XG5pbXBvcnQgeyBPYmplY3RBY2N1bXVsYXRvciB9IGZyb20gXCJ0eXBlZC1vYmplY3QtYWNjdW11bGF0b3JcIjtcblxuLyoqXG4gKiBAY2xhc3MgRW52aXJvbm1lbnRcbiAqIEBleHRlbmRzIHtPYmplY3RBY2N1bXVsYXRvcjxUPn1cbiAqIEB0ZW1wbGF0ZSBUXG4gKiBAZGVzY3JpcHRpb24gQSBjbGFzcyByZXByZXNlbnRpbmcgYW4gZW52aXJvbm1lbnQgd2l0aCBhY2N1bXVsYXRpb24gY2FwYWJpbGl0aWVzLlxuICogQHN1bW1hcnkgTWFuYWdlcyBlbnZpcm9ubWVudC1yZWxhdGVkIGRhdGEgYW5kIHByb3ZpZGVzIG1ldGhvZHMgZm9yIGFjY3VtdWxhdGlvbiBhbmQga2V5IHJldHJpZXZhbC5cbiAqIEBwYXJhbSB7VH0gW2luaXRpYWxEYXRhXSAtIFRoZSBpbml0aWFsIGRhdGEgdG8gcG9wdWxhdGUgdGhlIGVudmlyb25tZW50IHdpdGguXG4gKi9cbmV4cG9ydCBjbGFzcyBFbnZpcm9ubWVudDxUIGV4dGVuZHMgb2JqZWN0PiBleHRlbmRzIE9iamVjdEFjY3VtdWxhdG9yPFQ+IHtcbiAgLyoqXG4gICAqIEBzdGF0aWNcbiAgICogQHByb3RlY3RlZFxuICAgKiBAZGVzY3JpcHRpb24gQSBmYWN0b3J5IGZ1bmN0aW9uIGZvciBjcmVhdGluZyBFbnZpcm9ubWVudCBpbnN0YW5jZXMuXG4gICAqIEBzdW1tYXJ5IERlZmluZXMgaG93IG5ldyBpbnN0YW5jZXMgb2YgdGhlIEVudmlyb25tZW50IGNsYXNzIHNob3VsZCBiZSBjcmVhdGVkLlxuICAgKiBAcmV0dXJuIHtFbnZpcm9ubWVudDxhbnk+fSBBIG5ldyBpbnN0YW5jZSBvZiB0aGUgRW52aXJvbm1lbnQgY2xhc3MuXG4gICAqL1xuICBwcm90ZWN0ZWQgc3RhdGljIGZhY3Rvcnk6IEVudmlyb25tZW50RmFjdG9yeTxhbnksIGFueT4gPVxuICAgICgpOiBFbnZpcm9ubWVudDxhbnk+ID0+IG5ldyBFbnZpcm9ubWVudCgpO1xuXG4gIC8qKlxuICAgKiBAc3RhdGljXG4gICAqIEBwcml2YXRlXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBFbnZpcm9ubWVudCBjbGFzcy5cbiAgICogQHR5cGUge0Vudmlyb25tZW50PGFueT59XG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyBfaW5zdGFuY2U6IEVudmlyb25tZW50PGFueT47XG5cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFJldHJpZXZlcyBhIHZhbHVlIGZyb20gdGhlIGVudmlyb25tZW50XG4gICAqIEBzdW1tYXJ5IEdldHMgYSB2YWx1ZSBmcm9tIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMsIGhhbmRsaW5nIGJyb3dzZXIgYW5kIE5vZGUuanMgZW52aXJvbm1lbnRzIGRpZmZlcmVudGx5XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrIC0gVGhlIGtleSB0byByZXRyaWV2ZSBmcm9tIHRoZSBlbnZpcm9ubWVudFxuICAgKiBAcmV0dXJuIHt1bmtub3dufSBUaGUgdmFsdWUgZnJvbSB0aGUgZW52aXJvbm1lbnQsIG9yIHVuZGVmaW5lZCBpZiBub3QgZm91bmRcbiAgICovXG4gIHByb3RlY3RlZCBmcm9tRW52KGs6IHN0cmluZykge1xuICAgIGxldCBlbnY6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGlmIChpc0Jyb3dzZXIoKSkge1xuICAgICAgZW52ID0gKGdsb2JhbFRoaXMgYXMgdHlwZW9mIGdsb2JhbFRoaXMgJiB7IEVOVjogUmVjb3JkPHN0cmluZywgYW55PiB9KVtcbiAgICAgICAgXCJFTlZcIlxuICAgICAgXTtcbiAgICB9IGVsc2Uge1xuICAgICAgZW52ID0gZ2xvYmFsVGhpcy5wcm9jZXNzLmVudjtcbiAgICAgIGsgPSB0b0VOVkZvcm1hdChrKTtcbiAgICB9XG4gICAgcmV0dXJuIGVudltrXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gRXhwYW5kcyBhbiBvYmplY3QgaW50byB0aGUgZW52aXJvbm1lbnRcbiAgICogQHN1bW1hcnkgRGVmaW5lcyBwcm9wZXJ0aWVzIG9uIHRoZSBlbnZpcm9ubWVudCBvYmplY3QgdGhhdCBjYW4gYmUgYWNjZXNzZWQgYXMgZ2V0dGVycyBhbmQgc2V0dGVyc1xuICAgKiBAdGVtcGxhdGUgViAtIFR5cGUgb2YgdGhlIG9iamVjdCBiZWluZyBleHBhbmRlZFxuICAgKiBAcGFyYW0ge1Z9IHZhbHVlIC0gVGhlIG9iamVjdCB0byBleHBhbmQgaW50byB0aGUgZW52aXJvbm1lbnRcbiAgICogQHJldHVybiB7dm9pZH1cbiAgICovXG4gIHByb3RlY3RlZCBvdmVycmlkZSBleHBhbmQ8ViBleHRlbmRzIG9iamVjdD4odmFsdWU6IFYpOiB2b2lkIHtcbiAgICBPYmplY3QuZW50cmllcyh2YWx1ZSkuZm9yRWFjaCgoW2ssIHZdKSA9PiB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgaywge1xuICAgICAgICBnZXQ6ICgpID0+IHtcbiAgICAgICAgICBjb25zdCBmcm9tRW52ID0gdGhpcy5mcm9tRW52KGspO1xuICAgICAgICAgIHJldHVybiB0eXBlb2YgZnJvbUVudiA9PT0gXCJ1bmRlZmluZWRcIiA/IHYgOiBmcm9tRW52O1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6ICh2YWw6IFZba2V5b2YgVl0pID0+IHtcbiAgICAgICAgICB2ID0gdmFsO1xuICAgICAgICB9LFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJvdGVjdGVkXG4gICAqIEBzdGF0aWNcbiAgICogQGRlc2NyaXB0aW9uIFJldHJpZXZlcyBvciBjcmVhdGVzIHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIEVudmlyb25tZW50IGNsYXNzLlxuICAgKiBAc3VtbWFyeSBFbnN1cmVzIG9ubHkgb25lIGluc3RhbmNlIG9mIHRoZSBFbnZpcm9ubWVudCBjbGFzcyBleGlzdHMuXG4gICAqIEB0ZW1wbGF0ZSBFXG4gICAqIEBwYXJhbSB7Li4udW5rbm93bltdfSBhcmdzIC0gQXJndW1lbnRzIHRvIHBhc3MgdG8gdGhlIGZhY3RvcnkgZnVuY3Rpb24gaWYgYSBuZXcgaW5zdGFuY2UgaXMgY3JlYXRlZC5cbiAgICogQHJldHVybiB7RX0gVGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgRW52aXJvbm1lbnQgY2xhc3MuXG4gICAqL1xuICBwcm90ZWN0ZWQgc3RhdGljIGluc3RhbmNlPEUgZXh0ZW5kcyBFbnZpcm9ubWVudDxhbnk+PiguLi5hcmdzOiB1bmtub3duW10pOiBFIHtcbiAgICBFbnZpcm9ubWVudC5faW5zdGFuY2UgPSAhRW52aXJvbm1lbnQuX2luc3RhbmNlXG4gICAgICA/IEVudmlyb25tZW50LmZhY3RvcnkoLi4uYXJncylcbiAgICAgIDogRW52aXJvbm1lbnQuX2luc3RhbmNlO1xuICAgIHJldHVybiBFbnZpcm9ubWVudC5faW5zdGFuY2UgYXMgRTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAc3RhdGljXG4gICAqIEBkZXNjcmlwdGlvbiBBY2N1bXVsYXRlcyB0aGUgZ2l2ZW4gdmFsdWUgaW50byB0aGUgZW52aXJvbm1lbnQuXG4gICAqIEBzdW1tYXJ5IEFkZHMgbmV3IHByb3BlcnRpZXMgdG8gdGhlIGVudmlyb25tZW50IGZyb20gdGhlIHByb3ZpZGVkIG9iamVjdC5cbiAgICogQHRlbXBsYXRlIFZcbiAgICogQHBhcmFtIHtWfSB2YWx1ZSAtIFRoZSBvYmplY3QgdG8gYWNjdW11bGF0ZSBpbnRvIHRoZSBlbnZpcm9ubWVudC5cbiAgICogQHJldHVybiB7Vn0gVGhlIHVwZGF0ZWQgZW52aXJvbm1lbnQgaW5zdGFuY2UuXG4gICAqL1xuICBzdGF0aWMgYWNjdW11bGF0ZTxWIGV4dGVuZHMgb2JqZWN0PihcbiAgICB2YWx1ZTogVlxuICApOiB0eXBlb2YgRW52aXJvbm1lbnQuX2luc3RhbmNlICZcbiAgICBWICZcbiAgICBPYmplY3RBY2N1bXVsYXRvcjx0eXBlb2YgRW52aXJvbm1lbnQuX2luc3RhbmNlICYgVj4ge1xuICAgIGNvbnN0IGluc3RhbmNlID0gRW52aXJvbm1lbnQuaW5zdGFuY2UoKTtcbiAgICByZXR1cm4gaW5zdGFuY2UuYWNjdW11bGF0ZSh2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogQHN0YXRpY1xuICAgKiBAZGVzY3JpcHRpb24gUmV0cmlldmVzIHRoZSBrZXlzIG9mIHRoZSBlbnZpcm9ubWVudCwgb3B0aW9uYWxseSBjb252ZXJ0aW5nIHRoZW0gdG8gRU5WIGZvcm1hdC5cbiAgICogQHN1bW1hcnkgR2V0cyBhbGwga2V5cyBpbiB0aGUgZW52aXJvbm1lbnQsIHdpdGggYW4gb3B0aW9uIHRvIGZvcm1hdCB0aGVtIGZvciBlbnZpcm9ubWVudCB2YXJpYWJsZXMuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3RvRW52PXRydWVdIC0gV2hldGhlciB0byBjb252ZXJ0IHRoZSBrZXlzIHRvIEVOViBmb3JtYXQuXG4gICAqIEByZXR1cm4ge3N0cmluZ1tdfSBBbiBhcnJheSBvZiBrZXlzIGZyb20gdGhlIGVudmlyb25tZW50LlxuICAgKi9cbiAgc3RhdGljIGtleXModG9FbnY6IGJvb2xlYW4gPSB0cnVlKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBFbnZpcm9ubWVudC5pbnN0YW5jZSgpXG4gICAgICAua2V5cygpXG4gICAgICAubWFwKChrKSA9PiAodG9FbnYgPyB0b0VOVkZvcm1hdChrKSA6IGspKTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgUGFyc2VBcmdzUmVzdWx0IH0gZnJvbSBcIi4uL2lucHV0L3R5cGVzXCI7XG5pbXBvcnQgeyBDb21tYW5kT3B0aW9ucyB9IGZyb20gXCIuL3R5cGVzXCI7XG5pbXBvcnQgeyBVc2VySW5wdXQgfSBmcm9tIFwiLi4vaW5wdXQvaW5wdXRcIjtcbmltcG9ydCB7IERlZmF1bHRDb21tYW5kT3B0aW9ucywgRGVmYXVsdENvbW1hbmRWYWx1ZXMgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGdldERlcGVuZGVuY2llcywgZ2V0UGFja2FnZVZlcnNpb24gfSBmcm9tIFwiLi4vdXRpbHMvZnNcIjtcbmltcG9ydCB7IHByaW50QmFubmVyIH0gZnJvbSBcIi4uL291dHB1dC9jb21tb25cIjtcbmltcG9ydCB7IEVudmlyb25tZW50IH0gZnJvbSBcIi4uL3V0aWxzL2Vudmlyb25tZW50XCI7XG5pbXBvcnQge1xuICBEZWZhdWx0TG9nZ2luZ0NvbmZpZyxcbiAgTG9nZ2VyLFxuICBMb2dnaW5nLFxuICBMb2dnaW5nQ29uZmlnLFxuICBMb2dMZXZlbCxcbn0gZnJvbSBcIkBkZWNhZi10cy9sb2dnaW5nXCI7XG5cbi8qKlxuICogQGNsYXNzIENvbW1hbmRcbiAqIEBhYnN0cmFjdFxuICogQHRlbXBsYXRlIEkgLSBUaGUgdHlwZSBvZiBpbnB1dCBvcHRpb25zIGZvciB0aGUgY29tbWFuZC5cbiAqIEB0ZW1wbGF0ZSBSIC0gVGhlIHJldHVybiB0eXBlIG9mIHRoZSBjb21tYW5kIGV4ZWN1dGlvbi5cbiAqIEBtZW1iZXJPZiBtb2R1bGU6dXRpbHNcbiAqIEBkZXNjcmlwdGlvbiBBYnN0cmFjdCBiYXNlIGNsYXNzIGZvciBjb21tYW5kIGltcGxlbWVudGF0aW9uLlxuICogQHN1bW1hcnkgUHJvdmlkZXMgYSBzdHJ1Y3R1cmUgZm9yIGNyZWF0aW5nIGNvbW1hbmQtbGluZSBpbnRlcmZhY2UgY29tbWFuZHMgd2l0aCBpbnB1dCBoYW5kbGluZywgbG9nZ2luZywgYW5kIGV4ZWN1dGlvbiBmbG93LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIGNvbW1hbmQuXG4gKiBAcGFyYW0ge0NvbW1hbmRPcHRpb25zPEk+fSBbaW5wdXRzXSAtIFRoZSBpbnB1dCBvcHRpb25zIGZvciB0aGUgY29tbWFuZC5cbiAqIEBwYXJhbSB7c3RyaW5nW119IFtyZXF1aXJlbWVudHNdIC0gVGhlIGxpc3Qgb2YgcmVxdWlyZWQgZGVwZW5kZW5jaWVzIGZvciB0aGUgY29tbWFuZC5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIENvbW1hbmQ8SSwgUj4ge1xuICAvKipcbiAgICogQHN0YXRpY1xuICAgKiBAZGVzY3JpcHRpb24gU3RhdGljIGxvZ2dlciBmb3IgdGhlIENvbW1hbmQgY2xhc3MuXG4gICAqIEB0eXBlIHtMb2dnZXJ9XG4gICAqL1xuICBzdGF0aWMgbG9nOiBMb2dnZXI7XG5cbiAgLyoqXG4gICAqIEBwcm90ZWN0ZWRcbiAgICogQGRlc2NyaXB0aW9uIEluc3RhbmNlIGxvZ2dlciBmb3IgdGhlIGNvbW1hbmQuXG4gICAqIEB0eXBlIHtMb2dnZXJ9XG4gICAqL1xuICBwcm90ZWN0ZWQgbG9nOiBMb2dnZXI7XG5cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBuYW1lOiBzdHJpbmcsXG4gICAgcHJvdGVjdGVkIGlucHV0czogQ29tbWFuZE9wdGlvbnM8ST4gPSB7fSBhcyB1bmtub3duIGFzIENvbW1hbmRPcHRpb25zPEk+LFxuICAgIHByb3RlY3RlZCByZXF1aXJlbWVudHM6IHN0cmluZ1tdID0gW11cbiAgKSB7XG4gICAgaWYgKCFDb21tYW5kLmxvZykge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENvbW1hbmQsIFwibG9nXCIsIHtcbiAgICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgICB2YWx1ZTogTG9nZ2luZy5mb3IoQ29tbWFuZC5uYW1lKSxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5sb2cgPSBDb21tYW5kLmxvZztcbiAgICB9XG4gICAgdGhpcy5sb2cgPSBDb21tYW5kLmxvZy5mb3IodGhpcy5uYW1lKTtcbiAgICB0aGlzLmlucHV0cyA9IE9iamVjdC5hc3NpZ24oXG4gICAgICB7fSxcbiAgICAgIERlZmF1bHRDb21tYW5kT3B0aW9ucyxcbiAgICAgIGlucHV0c1xuICAgICkgYXMgQ29tbWFuZE9wdGlvbnM8ST47XG4gIH1cblxuICAvKipcbiAgICogQHByb3RlY3RlZFxuICAgKiBAYXN5bmNcbiAgICogQGRlc2NyaXB0aW9uIENoZWNrcyBpZiBhbGwgcmVxdWlyZWQgZGVwZW5kZW5jaWVzIGFyZSBwcmVzZW50LlxuICAgKiBAc3VtbWFyeSBSZXRyaWV2ZXMgdGhlIGxpc3Qgb2YgZGVwZW5kZW5jaWVzIGFuZCBjb21wYXJlcyBpdCBhZ2FpbnN0IHRoZSByZXF1aXJlZCBkZXBlbmRlbmNpZXMgZm9yIHRoZSBjb21tYW5kLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgY2hlY2sgaXMgY29tcGxldGUuXG4gICAqXG4gICAqIEBtZXJtYWlkXG4gICAqIHNlcXVlbmNlRGlhZ3JhbVxuICAgKiAgIHBhcnRpY2lwYW50IENvbW1hbmRcbiAgICogICBwYXJ0aWNpcGFudCBnZXREZXBlbmRlbmNpZXNcbiAgICogICBwYXJ0aWNpcGFudCBTZXRcbiAgICogICBDb21tYW5kLT4+Z2V0RGVwZW5kZW5jaWVzOiBDYWxsXG4gICAqICAgZ2V0RGVwZW5kZW5jaWVzLS0+PkNvbW1hbmQ6IFJldHVybiB7cHJvZCwgZGV2LCBwZWVyfVxuICAgKiAgIENvbW1hbmQtPj5TZXQ6IENyZWF0ZSBTZXQgZnJvbSBwcm9kLCBkZXYsIHBlZXJcbiAgICogICBTZXQtLT4+Q29tbWFuZDogUmV0dXJuIHVuaXF1ZSBkZXBlbmRlbmNpZXNcbiAgICogICBDb21tYW5kLT4+Q29tbWFuZDogQ29tcGFyZSBhZ2FpbnN0IHJlcXVpcmVtZW50c1xuICAgKiAgIGFsdCBNaXNzaW5nIGRlcGVuZGVuY2llc1xuICAgKiAgICAgQ29tbWFuZC0+PkNvbW1hbmQ6IEFkZCB0byBtaXNzaW5nIGxpc3RcbiAgICogICBlbmRcbiAgICogICBOb3RlIG92ZXIgQ29tbWFuZDogSWYgbWlzc2luZy5sZW5ndGggPiAwLCBoYW5kbGUgbWlzc2luZyBkZXBlbmRlbmNpZXNcbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBjaGVja1JlcXVpcmVtZW50cygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IHByb2QsIGRldiwgcGVlciB9ID0gYXdhaXQgZ2V0RGVwZW5kZW5jaWVzKCk7XG4gICAgY29uc3QgbWlzc2luZyA9IFtdO1xuICAgIGNvbnN0IGZ1bGxMaXN0ID0gQXJyYXkuZnJvbShcbiAgICAgIG5ldyBTZXQoWy4uLnByb2QsIC4uLmRldiwgLi4ucGVlcl0pLnZhbHVlcygpXG4gICAgKS5tYXAoKGQpID0+IGQubmFtZSk7XG4gICAgZm9yIChjb25zdCBkZXAgb2YgdGhpcy5yZXF1aXJlbWVudHMpXG4gICAgICBpZiAoIWZ1bGxMaXN0LmluY2x1ZGVzKGRlcCkpIG1pc3NpbmcucHVzaChkZXApO1xuXG4gICAgaWYgKCFtaXNzaW5nLmxlbmd0aCkgcmV0dXJuO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcm90ZWN0ZWRcbiAgICogQGRlc2NyaXB0aW9uIFByb3ZpZGVzIGhlbHAgaW5mb3JtYXRpb24gZm9yIHRoZSBjb21tYW5kLlxuICAgKiBAc3VtbWFyeSBUaGlzIG1ldGhvZCBzaG91bGQgYmUgb3ZlcnJpZGRlbiBpbiBkZXJpdmVkIGNsYXNzZXMgdG8gcHJvdmlkZSBzcGVjaWZpYyBoZWxwIGluZm9ybWF0aW9uLlxuICAgKiBAcGFyYW0ge1BhcnNlQXJnc1Jlc3VsdH0gYXJncyAtIFRoZSBwYXJzZWQgY29tbWFuZC1saW5lIGFyZ3VtZW50cy5cbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIHByb3RlY3RlZCBoZWxwKGFyZ3M6IFBhcnNlQXJnc1Jlc3VsdCk6IHZvaWQge1xuICAgIHJldHVybiB0aGlzLmxvZy5pbmZvKFxuICAgICAgYFRoaXMgaXMgaGVscC4gSSdtIG5vIHVzZSBiZWNhdXNlIEkgc2hvdWxkIGhhdmUgYmVlbiBvdmVycmlkZGVuLmBcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcm90ZWN0ZWRcbiAgICogQGFic3RyYWN0XG4gICAqIEBkZXNjcmlwdGlvbiBSdW5zIHRoZSBjb21tYW5kIHdpdGggdGhlIHByb3ZpZGVkIGFyZ3VtZW50cy5cbiAgICogQHN1bW1hcnkgVGhpcyBtZXRob2Qgc2hvdWxkIGJlIGltcGxlbWVudGVkIGluIGRlcml2ZWQgY2xhc3NlcyB0byBkZWZpbmUgdGhlIGNvbW1hbmQncyBiZWhhdmlvci5cbiAgICogQHBhcmFtIHtQYXJzZUFyZ3NSZXN1bHR9IGFuc3dlcnMgLSBUaGUgcGFyc2VkIGNvbW1hbmQtbGluZSBhcmd1bWVudHMuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFIgfCBzdHJpbmcgfCB2b2lkPn0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgY29tbWFuZCdzIHJlc3VsdC5cbiAgICovXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBydW48Uj4oXG4gICAgYW5zd2VyczogTG9nZ2luZ0NvbmZpZyAmXG4gICAgICB0eXBlb2YgRGVmYXVsdENvbW1hbmRWYWx1ZXMgJiB7IFtrIGluIGtleW9mIEldOiB1bmtub3duIH1cbiAgKTogUHJvbWlzZTxSIHwgc3RyaW5nIHwgdm9pZD47XG5cbiAgLyoqXG4gICAqIEBhc3luY1xuICAgKiBAZGVzY3JpcHRpb24gRXhlY3V0ZXMgdGhlIGNvbW1hbmQuXG4gICAqIEBzdW1tYXJ5IFRoaXMgbWV0aG9kIGhhbmRsZXMgdGhlIG92ZXJhbGwgZXhlY3V0aW9uIGZsb3cgb2YgdGhlIGNvbW1hbmQsIGluY2x1ZGluZyBwYXJzaW5nIGFyZ3VtZW50cyxcbiAgICogc2V0dGluZyB1cCBsb2dnaW5nLCBjaGVja2luZyBmb3IgdmVyc2lvbiBvciBoZWxwIHJlcXVlc3RzLCBhbmQgcnVubmluZyB0aGUgY29tbWFuZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8UiB8IHN0cmluZyB8IHZvaWQ+fSBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBjb21tYW5kJ3MgcmVzdWx0LlxuICAgKlxuICAgKiBAbWVybWFpZFxuICAgKiBzZXF1ZW5jZURpYWdyYW1cbiAgICogICBwYXJ0aWNpcGFudCBDb21tYW5kXG4gICAqICAgcGFydGljaXBhbnQgVXNlcklucHV0XG4gICAqICAgcGFydGljaXBhbnQgTG9nZ2luZ1xuICAgKiAgIHBhcnRpY2lwYW50IGdldFBhY2thZ2VWZXJzaW9uXG4gICAqICAgcGFydGljaXBhbnQgcHJpbnRCYW5uZXJcbiAgICogICBDb21tYW5kLT4+VXNlcklucHV0OiBwYXJzZUFyZ3MoaW5wdXRzKVxuICAgKiAgIFVzZXJJbnB1dC0tPj5Db21tYW5kOiBSZXR1cm4gUGFyc2VBcmdzUmVzdWx0XG4gICAqICAgQ29tbWFuZC0+PkNvbW1hbmQ6IFByb2Nlc3Mgb3B0aW9uc1xuICAgKiAgIENvbW1hbmQtPj5Mb2dnaW5nOiBzZXRDb25maWcob3B0aW9ucylcbiAgICogICBhbHQgdmVyc2lvbiByZXF1ZXN0ZWRcbiAgICogICAgIENvbW1hbmQtPj5nZXRQYWNrYWdlVmVyc2lvbjogQ2FsbFxuICAgKiAgICAgZ2V0UGFja2FnZVZlcnNpb24tLT4+Q29tbWFuZDogUmV0dXJuIHZlcnNpb25cbiAgICogICBlbHNlIGhlbHAgcmVxdWVzdGVkXG4gICAqICAgICBDb21tYW5kLT4+Q29tbWFuZDogaGVscChhcmdzKVxuICAgKiAgIGVsc2UgYmFubmVyIHJlcXVlc3RlZFxuICAgKiAgICAgQ29tbWFuZC0+PnByaW50QmFubmVyOiBDYWxsXG4gICAqICAgZW5kXG4gICAqICAgQ29tbWFuZC0+PkNvbW1hbmQ6IHJ1bihhcmdzKVxuICAgKiAgIGFsdCBlcnJvciBvY2N1cnNcbiAgICogICAgIENvbW1hbmQtPj5Db21tYW5kOiBMb2cgZXJyb3JcbiAgICogICBlbmRcbiAgICogICBDb21tYW5kLS0+PkNvbW1hbmQ6IFJldHVybiByZXN1bHRcbiAgICovXG4gIGFzeW5jIGV4ZWN1dGUoKTogUHJvbWlzZTxSIHwgc3RyaW5nIHwgdm9pZD4ge1xuICAgIGNvbnN0IGFyZ3M6IFBhcnNlQXJnc1Jlc3VsdCA9IFVzZXJJbnB1dC5wYXJzZUFyZ3ModGhpcy5pbnB1dHMpO1xuICAgIGNvbnN0IGVudiA9IEVudmlyb25tZW50LmFjY3VtdWxhdGUoRGVmYXVsdExvZ2dpbmdDb25maWcpXG4gICAgICAuYWNjdW11bGF0ZShEZWZhdWx0Q29tbWFuZFZhbHVlcylcbiAgICAgIC5hY2N1bXVsYXRlKGFyZ3MudmFsdWVzKTtcbiAgICBjb25zdCB7IHRpbWVzdGFtcCwgdmVyYm9zZSwgdmVyc2lvbiwgaGVscCwgbG9nTGV2ZWwsIGxvZ1N0eWxlLCBiYW5uZXIgfSA9XG4gICAgICBlbnY7XG5cbiAgICB0aGlzLmxvZy5zZXRDb25maWcoe1xuICAgICAgLi4uZW52LFxuICAgICAgdGltZXN0YW1wOiAhIXRpbWVzdGFtcCxcbiAgICAgIGxldmVsOiBsb2dMZXZlbCBhcyBMb2dMZXZlbCxcbiAgICAgIHN0eWxlOiAhIWxvZ1N0eWxlLFxuICAgICAgdmVyYm9zZTogKHZlcmJvc2UgYXMgbnVtYmVyKSB8fCAwLFxuICAgIH0pO1xuXG4gICAgaWYgKHZlcnNpb24pIHtcbiAgICAgIHJldHVybiBnZXRQYWNrYWdlVmVyc2lvbigpO1xuICAgIH1cblxuICAgIGlmIChoZWxwKSB7XG4gICAgICByZXR1cm4gdGhpcy5oZWxwKGFyZ3MpO1xuICAgIH1cblxuICAgIGlmIChiYW5uZXIpXG4gICAgICBwcmludEJhbm5lcihcbiAgICAgICAgdGhpcy5sb2cuZm9yKHByaW50QmFubmVyLCB7XG4gICAgICAgICAgdGltZXN0YW1wOiBmYWxzZSxcbiAgICAgICAgICBzdHlsZTogZmFsc2UsXG4gICAgICAgICAgY29udGV4dDogZmFsc2UsXG4gICAgICAgICAgbG9nTGV2ZWw6IGZhbHNlLFxuICAgICAgICB9KVxuICAgICAgKTtcblxuICAgIGxldCByZXN1bHQ7XG4gICAgdHJ5IHtcbiAgICAgIHJlc3VsdCA9IGF3YWl0IHRoaXMucnVuKGVudik7XG4gICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgdGhpcy5sb2cuZXJyb3IoYEVycm9yIHdoaWxlIHJ1bm5pbmcgcHJvdmlkZWQgY2xpIGZ1bmN0aW9uOiAke2V9YCk7XG4gICAgICB0aHJvdyBlO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQgYXMgUjtcbiAgfVxufVxuIiwiaW1wb3J0IGh0dHBzIGZyb20gXCJodHRwc1wiO1xuaW1wb3J0IHsgTG9nZ2luZyB9IGZyb20gXCJAZGVjYWYtdHMvbG9nZ2luZ1wiO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBBIHNpbXBsZSBIVFRQIGNsaWVudCBmb3IgZG93bmxvYWRpbmcgZmlsZXMuXG4gKiBAc3VtbWFyeSBUaGlzIGNsYXNzIHByb3ZpZGVzIGZ1bmN0aW9uYWxpdHkgdG8gZG93bmxvYWQgZmlsZXMgZnJvbSBIVFRQUyBVUkxzLlxuICogSXQgdXNlcyBOb2RlLmpzIGJ1aWx0LWluIGh0dHBzIG1vZHVsZSB0byBtYWtlIHJlcXVlc3RzLlxuICpcbiAqIEBjbGFzcyBIdHRwQ2xpZW50XG4gKi9cbmV4cG9ydCBjbGFzcyBIdHRwQ2xpZW50IHtcbiAgcHJvdGVjdGVkIHN0YXRpYyBsb2cgPSBMb2dnaW5nLmZvcihIdHRwQ2xpZW50KTtcbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBEb3dubG9hZHMgYSBmaWxlIGZyb20gYSBnaXZlbiBVUkwuXG4gICAqIEBzdW1tYXJ5IFRoaXMgbWV0aG9kIHNlbmRzIGEgR0VUIHJlcXVlc3QgdG8gdGhlIHNwZWNpZmllZCBVUkwgYW5kIHJldHVybnMgdGhlIHJlc3BvbnNlIGJvZHkgYXMgYSBzdHJpbmcuXG4gICAqIEl0IGhhbmRsZXMgZGlmZmVyZW50IHNjZW5hcmlvcyBzdWNoIGFzIG5vbi0yMDAgc3RhdHVzIGNvZGVzIGFuZCBuZXR3b3JrIGVycm9ycy5cbiAgICpcbiAgICogQHBhcmFtIHVybCAtIFRoZSBVUkwgb2YgdGhlIGZpbGUgdG8gZG93bmxvYWQuXG4gICAqIEByZXR1cm4gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgZmlsZSBjb250ZW50IGFzIGEgc3RyaW5nLlxuICAgKlxuICAgKiBAbWVybWFpZFxuICAgKiBzZXF1ZW5jZURpYWdyYW1cbiAgICogICBwYXJ0aWNpcGFudCBDbGllbnRcbiAgICogICBwYXJ0aWNpcGFudCBIdHRwQ2xpZW50XG4gICAqICAgcGFydGljaXBhbnQgSFRUUFNcbiAgICogICBwYXJ0aWNpcGFudCBTZXJ2ZXJcbiAgICogICBDbGllbnQtPj5IdHRwQ2xpZW50OiBkb3dubG9hZEZpbGUodXJsKVxuICAgKiAgIEh0dHBDbGllbnQtPj5IVFRQUzogZ2V0KHVybClcbiAgICogICBIVFRQUy0+PlNlcnZlcjogR0VUIHJlcXVlc3RcbiAgICogICBTZXJ2ZXItLT4+SFRUUFM6IFJlc3BvbnNlXG4gICAqICAgSFRUUFMtLT4+SHR0cENsaWVudDogUmVzcG9uc2Ugb2JqZWN0XG4gICAqICAgYWx0IFN0YXR1cyBjb2RlIGlzIDIwMFxuICAgKiAgICAgbG9vcCBGb3IgZWFjaCBkYXRhIGNodW5rXG4gICAqICAgICAgIEhUVFBTLT4+SHR0cENsaWVudDogJ2RhdGEnIGV2ZW50XG4gICAqICAgICAgIEh0dHBDbGllbnQtPj5IdHRwQ2xpZW50OiBBY2N1bXVsYXRlIGRhdGFcbiAgICogICAgIGVuZFxuICAgKiAgICAgSFRUUFMtPj5IdHRwQ2xpZW50OiAnZW5kJyBldmVudFxuICAgKiAgICAgSHR0cENsaWVudC0tPj5DbGllbnQ6IFJlc29sdmUgd2l0aCBkYXRhXG4gICAqICAgZWxzZSBTdGF0dXMgY29kZSBpcyBub3QgMjAwXG4gICAqICAgICBIdHRwQ2xpZW50LS0+PkNsaWVudDogUmVqZWN0IHdpdGggZXJyb3JcbiAgICogICBlbmRcbiAgICovXG4gIHN0YXRpYyBhc3luYyBkb3dubG9hZEZpbGUodXJsOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxzdHJpbmc+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGZ1bmN0aW9uIHJlcXVlc3QodXJsOiBzdHJpbmcpIHtcbiAgICAgICAgdXJsID0gZW5jb2RlVVJJKHVybCk7XG4gICAgICAgIGh0dHBzLmdldCh1cmwsIChyZXMpID0+IHtcbiAgICAgICAgICBpZiAocmVzLnN0YXR1c0NvZGUgPT09IDMwMSB8fCByZXMuc3RhdHVzQ29kZSA9PT0gMzA3KVxuICAgICAgICAgICAgcmV0dXJuIHJlcXVlc3QocmVzLmhlYWRlcnMubG9jYXRpb24gYXMgc3RyaW5nKTtcblxuICAgICAgICAgIGlmIChyZXMuc3RhdHVzQ29kZSAhPT0gMjAwKSB7XG4gICAgICAgICAgICBIdHRwQ2xpZW50LmxvZy5lcnJvcihcbiAgICAgICAgICAgICAgYEZhaWxlZCB0byBmZXRjaCAke3VybH0gKHN0YXR1czogJHtyZXMuc3RhdHVzQ29kZX0pYFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybiByZWplY3QobmV3IEVycm9yKGBGYWlsZWQgdG8gZmV0Y2ggJHt1cmx9YCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsZXQgZGF0YSA9IFwiXCI7XG4gICAgICAgICAgcmVzLm9uKFwiZGF0YVwiLCAoY2h1bmspID0+IHtcbiAgICAgICAgICAgIGRhdGEgKz0gY2h1bms7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmVzLm9uKFwiZXJyb3JcIiwgKGVycm9yKSA9PiB7XG4gICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgcmVzLm9uKFwiZW5kXCIsICgpID0+IHtcbiAgICAgICAgICAgIHJlc29sdmUoZGF0YSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmVxdWVzdCh1cmwpO1xuICAgIH0pO1xuICB9XG59XG4iLCJpbXBvcnQgeyBDb21tYW5kIH0gZnJvbSBcIi4uL2NvbW1hbmRcIjtcbmltcG9ydCB7IENvbW1hbmRPcHRpb25zIH0gZnJvbSBcIi4uL3R5cGVzXCI7XG5pbXBvcnQgeyBEZWZhdWx0Q29tbWFuZE9wdGlvbnMsIERlZmF1bHRDb21tYW5kVmFsdWVzIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHtcbiAgY29weUZpbGUsXG4gIGRlbGV0ZVBhdGgsXG4gIGdldEFsbEZpbGVzLFxuICBnZXRQYWNrYWdlLFxuICBwYXRjaEZpbGUsXG4gIHJlYWRGaWxlLFxuICByZW5hbWVGaWxlLFxuICBydW5Db21tYW5kLFxuICB3cml0ZUZpbGUsXG59IGZyb20gXCIuLi8uLi91dGlsc1wiO1xuaW1wb3J0IGZzIGZyb20gXCJmc1wiO1xuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IElucHV0T3B0aW9ucywgT3V0cHV0T3B0aW9ucywgcm9sbHVwLCBSb2xsdXBCdWlsZCB9IGZyb20gXCJyb2xsdXBcIjtcbmltcG9ydCB0eXBlc2NyaXB0IGZyb20gXCJAcm9sbHVwL3BsdWdpbi10eXBlc2NyaXB0XCI7XG5pbXBvcnQgY29tbW9uanMgZnJvbSBcIkByb2xsdXAvcGx1Z2luLWNvbW1vbmpzXCI7XG5pbXBvcnQgeyBub2RlUmVzb2x2ZSB9IGZyb20gXCJAcm9sbHVwL3BsdWdpbi1ub2RlLXJlc29sdmVcIjtcbmltcG9ydCBqc29uIGZyb20gXCJAcm9sbHVwL3BsdWdpbi1qc29uXCI7XG5pbXBvcnQgeyBMb2dnaW5nQ29uZmlnIH0gZnJvbSBcIkBkZWNhZi10cy9sb2dnaW5nXCI7XG5pbXBvcnQgKiBhcyB0cyBmcm9tIFwidHlwZXNjcmlwdFwiO1xuaW1wb3J0IHsgRGlhZ25vc3RpYywgRW1pdFJlc3VsdCwgTW9kdWxlS2luZCwgU291cmNlRmlsZSB9IGZyb20gXCJ0eXBlc2NyaXB0XCI7XG5cbmNvbnN0IFZFUlNJT05fU1RSSU5HID0gXCIjI1ZFUlNJT04jI1wiO1xuXG5lbnVtIE1vZGVzIHtcbiAgQ0pTID0gXCJjb21tb25qc1wiLFxuICBFU00gPSBcImVzMjAyMlwiLFxufVxuXG5jb25zdCBDb21tYW5kcyA9IFtcInVwZGF0ZS1zY3JpcHRzXCIsIFwidGFnLXJlbGVhc2VcIiwgXCJidWlsZC1zY3JpcHRzXCJdO1xuXG5jb25zdCBvcHRpb25zID0ge1xuICBwcm9kOiB7XG4gICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgZGVmYXVsdDogZmFsc2UsXG4gIH0sXG4gIGRldjoge1xuICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgIGRlZmF1bHQ6IGZhbHNlLFxuICB9LFxuICBkb2NzOiB7XG4gICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgZGVmYXVsdDogZmFsc2UsXG4gIH0sXG4gIGNvbW1hbmRzOiB7XG4gICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgZGVmYXVsdDogZmFsc2UsXG4gIH0sXG4gIGJhbm5lcjoge1xuICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgIGRlZmF1bHQ6IGZhbHNlLFxuICB9LFxufTtcblxuY29uc3QgY2pzMlRyYW5zZm9ybWVyID0gKGV4dCA9IFwiLmNqc1wiKSA9PiB7XG4gIGNvbnN0IGxvZyA9IEJ1aWxkU2NyaXB0cy5sb2cuZm9yKGNqczJUcmFuc2Zvcm1lcik7XG4gIGNvbnN0IHJlc29sdXRpb25DYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG5cbiAgcmV0dXJuICh0cmFuc2Zvcm1hdGlvbkNvbnRleHQ6IHRzLlRyYW5zZm9ybWF0aW9uQ29udGV4dCkgPT4ge1xuICAgIHJldHVybiAoc291cmNlRmlsZTogdHMuU291cmNlRmlsZSkgPT4ge1xuICAgICAgY29uc3Qgc291cmNlRGlyID0gcGF0aC5kaXJuYW1lKHNvdXJjZUZpbGUuZmlsZU5hbWUpO1xuXG4gICAgICBmdW5jdGlvbiByZXNvbHZlUGF0aChpbXBvcnRQYXRoOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgY2FjaGVLZXkgPSBKU09OLnN0cmluZ2lmeShbc291cmNlRGlyLCBpbXBvcnRQYXRoXSk7XG4gICAgICAgIGNvbnN0IGNhY2hlZFZhbHVlID0gcmVzb2x1dGlvbkNhY2hlLmdldChjYWNoZUtleSk7XG4gICAgICAgIGlmIChjYWNoZWRWYWx1ZSAhPSBudWxsKSByZXR1cm4gY2FjaGVkVmFsdWU7XG5cbiAgICAgICAgbGV0IHJlc29sdmVkUGF0aCA9IGltcG9ydFBhdGg7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmVzb2x2ZWRQYXRoID0gcGF0aC5yZXNvbHZlKHNvdXJjZURpciwgcmVzb2x2ZWRQYXRoICsgXCIudHNcIik7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gcmVzb2x2ZSBwYXRoICR7aW1wb3J0UGF0aH06ICR7ZXJyb3J9YCk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHN0YXQ7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgc3RhdCA9IGZzLnN0YXRTeW5jKHJlc29sdmVkUGF0aCk7XG4gICAgICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgbG9nLnZlcmJvc2UoXG4gICAgICAgICAgICAgIGBUZXN0aW5nIGV4aXN0ZW5jZSBvZiBwYXRoICR7cmVzb2x2ZWRQYXRofSBhcyBhIGZvbGRlciBkZWZhdWx0aW5nIHRvIGluZGV4IGZpbGVgXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgc3RhdCA9IGZzLnN0YXRTeW5jKHJlc29sdmVkUGF0aC5yZXBsYWNlKC9cXC50cyQvZ20sIFwiXCIpKTtcbiAgICAgICAgICB9IGNhdGNoIChlMjogdW5rbm93bikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICBgRmFpbGVkIHRvIHJlc29sdmUgcGF0aCAke2ltcG9ydFBhdGh9OiAke2V9LCAke2UyfWBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzdGF0LmlzRGlyZWN0b3J5KCkpXG4gICAgICAgICAgcmVzb2x2ZWRQYXRoID0gcmVzb2x2ZWRQYXRoLnJlcGxhY2UoL1xcLnRzJC9nbSwgXCIvaW5kZXgudHNcIik7XG5cbiAgICAgICAgaWYgKHBhdGguaXNBYnNvbHV0ZShyZXNvbHZlZFBhdGgpKSB7XG4gICAgICAgICAgY29uc3QgZXh0ZW5zaW9uID1cbiAgICAgICAgICAgICgvXFwudHN4PyQvLmV4ZWMocGF0aC5iYXNlbmFtZShyZXNvbHZlZFBhdGgpKSB8fCBbXSlbMF0gfHwgdm9pZCAwO1xuXG4gICAgICAgICAgcmVzb2x2ZWRQYXRoID1cbiAgICAgICAgICAgIFwiLi9cIiArXG4gICAgICAgICAgICBwYXRoLnJlbGF0aXZlKFxuICAgICAgICAgICAgICBzb3VyY2VEaXIsXG4gICAgICAgICAgICAgIHBhdGgucmVzb2x2ZShcbiAgICAgICAgICAgICAgICBwYXRoLmRpcm5hbWUocmVzb2x2ZWRQYXRoKSxcbiAgICAgICAgICAgICAgICBwYXRoLmJhc2VuYW1lKHJlc29sdmVkUGF0aCwgZXh0ZW5zaW9uKSArIGV4dFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzb2x1dGlvbkNhY2hlLnNldChjYWNoZUtleSwgcmVzb2x2ZWRQYXRoKTtcbiAgICAgICAgcmV0dXJuIHJlc29sdmVkUGF0aDtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gdmlzaXROb2RlKG5vZGU6IHRzLk5vZGUpOiB0cy5WaXNpdFJlc3VsdDx0cy5Ob2RlPiB7XG4gICAgICAgIGlmIChzaG91bGRNdXRhdGVNb2R1bGVTcGVjaWZpZXIobm9kZSkpIHtcbiAgICAgICAgICBpZiAodHMuaXNJbXBvcnREZWNsYXJhdGlvbihub2RlKSkge1xuICAgICAgICAgICAgY29uc3QgcmVzb2x2ZWRQYXRoID0gcmVzb2x2ZVBhdGgobm9kZS5tb2R1bGVTcGVjaWZpZXIudGV4dCk7XG4gICAgICAgICAgICBjb25zdCBuZXdNb2R1bGVTcGVjaWZpZXIgPVxuICAgICAgICAgICAgICB0cmFuc2Zvcm1hdGlvbkNvbnRleHQuZmFjdG9yeS5jcmVhdGVTdHJpbmdMaXRlcmFsKHJlc29sdmVkUGF0aCk7XG4gICAgICAgICAgICByZXR1cm4gdHJhbnNmb3JtYXRpb25Db250ZXh0LmZhY3RvcnkudXBkYXRlSW1wb3J0RGVjbGFyYXRpb24oXG4gICAgICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgICAgIG5vZGUubW9kaWZpZXJzLFxuICAgICAgICAgICAgICBub2RlLmltcG9ydENsYXVzZSxcbiAgICAgICAgICAgICAgbmV3TW9kdWxlU3BlY2lmaWVyLFxuICAgICAgICAgICAgICB1bmRlZmluZWRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIGlmICh0cy5pc0V4cG9ydERlY2xhcmF0aW9uKG5vZGUpKSB7XG4gICAgICAgICAgICBjb25zdCByZXNvbHZlZFBhdGggPSByZXNvbHZlUGF0aChub2RlLm1vZHVsZVNwZWNpZmllci50ZXh0KTtcbiAgICAgICAgICAgIGNvbnN0IG5ld01vZHVsZVNwZWNpZmllciA9XG4gICAgICAgICAgICAgIHRyYW5zZm9ybWF0aW9uQ29udGV4dC5mYWN0b3J5LmNyZWF0ZVN0cmluZ0xpdGVyYWwocmVzb2x2ZWRQYXRoKTtcbiAgICAgICAgICAgIHJldHVybiB0cmFuc2Zvcm1hdGlvbkNvbnRleHQuZmFjdG9yeS51cGRhdGVFeHBvcnREZWNsYXJhdGlvbihcbiAgICAgICAgICAgICAgbm9kZSxcbiAgICAgICAgICAgICAgbm9kZS5tb2RpZmllcnMsXG4gICAgICAgICAgICAgIG5vZGUuaXNUeXBlT25seSxcbiAgICAgICAgICAgICAgbm9kZS5leHBvcnRDbGF1c2UsXG4gICAgICAgICAgICAgIG5ld01vZHVsZVNwZWNpZmllcixcbiAgICAgICAgICAgICAgdW5kZWZpbmVkXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cy52aXNpdEVhY2hDaGlsZChub2RlLCB2aXNpdE5vZGUsIHRyYW5zZm9ybWF0aW9uQ29udGV4dCk7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIHNob3VsZE11dGF0ZU1vZHVsZVNwZWNpZmllcihub2RlOiB0cy5Ob2RlKTogbm9kZSBpcyAoXG4gICAgICAgIHwgdHMuSW1wb3J0RGVjbGFyYXRpb25cbiAgICAgICAgfCB0cy5FeHBvcnREZWNsYXJhdGlvblxuICAgICAgKSAmIHtcbiAgICAgICAgbW9kdWxlU3BlY2lmaWVyOiB0cy5TdHJpbmdMaXRlcmFsO1xuICAgICAgfSB7XG4gICAgICAgIGlmICghdHMuaXNJbXBvcnREZWNsYXJhdGlvbihub2RlKSAmJiAhdHMuaXNFeHBvcnREZWNsYXJhdGlvbihub2RlKSlcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgaWYgKG5vZGUubW9kdWxlU3BlY2lmaWVyID09PSB1bmRlZmluZWQpIHJldHVybiBmYWxzZTtcbiAgICAgICAgLy8gb25seSB3aGVuIG1vZHVsZSBzcGVjaWZpZXIgaXMgdmFsaWRcbiAgICAgICAgaWYgKCF0cy5pc1N0cmluZ0xpdGVyYWwobm9kZS5tb2R1bGVTcGVjaWZpZXIpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIC8vIG9ubHkgd2hlbiBwYXRoIGlzIHJlbGF0aXZlXG4gICAgICAgIGlmIChcbiAgICAgICAgICAhbm9kZS5tb2R1bGVTcGVjaWZpZXIudGV4dC5zdGFydHNXaXRoKFwiLi9cIikgJiZcbiAgICAgICAgICAhbm9kZS5tb2R1bGVTcGVjaWZpZXIudGV4dC5zdGFydHNXaXRoKFwiLi4vXCIpXG4gICAgICAgIClcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIC8vIG9ubHkgd2hlbiBtb2R1bGUgc3BlY2lmaWVyIGhhcyBubyBleHRlbnNpb25cbiAgICAgICAgaWYgKHBhdGguZXh0bmFtZShub2RlLm1vZHVsZVNwZWNpZmllci50ZXh0KSAhPT0gXCJcIikgcmV0dXJuIGZhbHNlO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRzLnZpc2l0Tm9kZShzb3VyY2VGaWxlLCB2aXNpdE5vZGUpIGFzIFNvdXJjZUZpbGU7XG4gICAgfTtcbiAgfTtcbn07XG5cbmV4cG9ydCBjbGFzcyBCdWlsZFNjcmlwdHMgZXh0ZW5kcyBDb21tYW5kPFxuICBDb21tYW5kT3B0aW9uczx0eXBlb2Ygb3B0aW9ucz4sXG4gIHZvaWRcbj4ge1xuICBwcml2YXRlIHJlcGxhY2VtZW50czogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICBwcml2YXRlIHJlYWRvbmx5IHBrZ1ZlcnNpb246IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBwa2dOYW1lOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXG4gICAgICBcIkJ1aWxkU2NyaXB0c1wiLFxuICAgICAgT2JqZWN0LmFzc2lnbih7fSwgRGVmYXVsdENvbW1hbmRPcHRpb25zLCBvcHRpb25zKSBhcyBDb21tYW5kT3B0aW9uczxcbiAgICAgICAgdHlwZW9mIG9wdGlvbnNcbiAgICAgID5cbiAgICApO1xuICAgIGNvbnN0IHBrZyA9IGdldFBhY2thZ2UoKSBhcyB7IG5hbWU6IHN0cmluZzsgdmVyc2lvbjogc3RyaW5nIH07XG4gICAgY29uc3QgeyBuYW1lLCB2ZXJzaW9uIH0gPSBwa2c7XG4gICAgdGhpcy5wa2dOYW1lID0gbmFtZS5pbmNsdWRlcyhcIkBcIikgPyBuYW1lLnNwbGl0KFwiL1wiKVsxXSA6IG5hbWU7XG4gICAgdGhpcy5wa2dWZXJzaW9uID0gdmVyc2lvbjtcbiAgICB0aGlzLnJlcGxhY2VtZW50c1tWRVJTSU9OX1NUUklOR10gPSB0aGlzLnBrZ1ZlcnNpb247XG4gIH1cblxuICBwYXRjaEZpbGVzKHA6IHN0cmluZykge1xuICAgIGNvbnN0IGxvZyA9IHRoaXMubG9nLmZvcih0aGlzLnBhdGNoRmlsZXMpO1xuICAgIGNvbnN0IHsgbmFtZSwgdmVyc2lvbiB9ID0gZ2V0UGFja2FnZSgpIGFzIGFueTtcbiAgICBsb2cuaW5mbyhgUGF0Y2hpbmcgJHtuYW1lfSAke3ZlcnNpb259IG1vZHVsZSBpbiAke3B9Li4uYCk7XG4gICAgY29uc3Qgc3RhdCA9IGZzLnN0YXRTeW5jKHApO1xuICAgIGlmIChzdGF0LmlzRGlyZWN0b3J5KCkpXG4gICAgICBmcy5yZWFkZGlyU3luYyhwLCB7IHdpdGhGaWxlVHlwZXM6IHRydWUsIHJlY3Vyc2l2ZTogdHJ1ZSB9KVxuICAgICAgICAuZmlsdGVyKChwKSA9PiBwLmlzRmlsZSgpKVxuICAgICAgICAuZm9yRWFjaCgoZmlsZSkgPT5cbiAgICAgICAgICBwYXRjaEZpbGUocGF0aC5qb2luKGZpbGUucGFyZW50UGF0aCwgZmlsZS5uYW1lKSwgdGhpcy5yZXBsYWNlbWVudHMpXG4gICAgICAgICk7XG4gICAgbG9nLnZlcmJvc2UoYE1vZHVsZSAke25hbWV9ICR7dmVyc2lvbn0gcGF0Y2hlZCBpbiAke3B9Li4uYCk7XG4gIH1cblxuICBwcml2YXRlIHJlcG9ydERpYWdub3N0aWNzKGRpYWdub3N0aWNzOiBEaWFnbm9zdGljW10pOiB2b2lkIHtcbiAgICBkaWFnbm9zdGljcy5mb3JFYWNoKChkaWFnbm9zdGljKSA9PiB7XG4gICAgICBsZXQgbWVzc2FnZSA9IFwiRXJyb3JcIjtcbiAgICAgIGlmIChkaWFnbm9zdGljLmZpbGUgJiYgZGlhZ25vc3RpYy5zdGFydCkge1xuICAgICAgICBjb25zdCB7IGxpbmUsIGNoYXJhY3RlciB9ID1cbiAgICAgICAgICBkaWFnbm9zdGljLmZpbGUuZ2V0TGluZUFuZENoYXJhY3Rlck9mUG9zaXRpb24oZGlhZ25vc3RpYy5zdGFydCk7XG4gICAgICAgIG1lc3NhZ2UgKz0gYCAke2RpYWdub3N0aWMuZmlsZS5maWxlTmFtZX0gKCR7bGluZSArIDF9LCR7Y2hhcmFjdGVyICsgMX0pYDtcbiAgICAgIH1cbiAgICAgIG1lc3NhZ2UgKz1cbiAgICAgICAgXCI6IFwiICsgdHMuZmxhdHRlbkRpYWdub3N0aWNNZXNzYWdlVGV4dChkaWFnbm9zdGljLm1lc3NhZ2VUZXh0LCBcIlxcblwiKTtcbiAgICAgIGNvbnNvbGUubG9nKG1lc3NhZ2UpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkQ29uZmlnRmlsZShjb25maWdGaWxlTmFtZTogc3RyaW5nKSB7XG4gICAgLy8gUmVhZCBjb25maWcgZmlsZVxuICAgIGNvbnN0IGNvbmZpZ0ZpbGVUZXh0ID0gZnMucmVhZEZpbGVTeW5jKGNvbmZpZ0ZpbGVOYW1lKS50b1N0cmluZygpO1xuXG4gICAgLy8gUGFyc2UgSlNPTiwgYWZ0ZXIgcmVtb3ZpbmcgY29tbWVudHMuIEp1c3QgZmFuY2llciBKU09OLnBhcnNlXG4gICAgY29uc3QgcmVzdWx0ID0gdHMucGFyc2VDb25maWdGaWxlVGV4dFRvSnNvbihjb25maWdGaWxlTmFtZSwgY29uZmlnRmlsZVRleHQpO1xuICAgIGNvbnN0IGNvbmZpZ09iamVjdCA9IHJlc3VsdC5jb25maWc7XG4gICAgaWYgKCFjb25maWdPYmplY3QpIHtcbiAgICAgIHRoaXMucmVwb3J0RGlhZ25vc3RpY3MoW3Jlc3VsdC5lcnJvciFdKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkZhaWxlZCB0byBwYXJzZSB0c2NvbmZpZy5qc29uXCIpO1xuICAgIH1cblxuICAgIC8vIEV4dHJhY3QgY29uZmlnIGluZnJvbWF0aW9uXG4gICAgY29uc3QgY29uZmlnUGFyc2VSZXN1bHQgPSB0cy5wYXJzZUpzb25Db25maWdGaWxlQ29udGVudChcbiAgICAgIGNvbmZpZ09iamVjdCxcbiAgICAgIHRzLnN5cyxcbiAgICAgIHBhdGguZGlybmFtZShjb25maWdGaWxlTmFtZSlcbiAgICApO1xuICAgIGlmIChjb25maWdQYXJzZVJlc3VsdC5lcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5yZXBvcnREaWFnbm9zdGljcyhjb25maWdQYXJzZVJlc3VsdC5lcnJvcnMpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRmFpbGVkIHRvIHBhcnNlIHRzY29uZmlnLmpzb25cIik7XG4gICAgfVxuICAgIHJldHVybiBjb25maWdQYXJzZVJlc3VsdDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgYnVpbGRUcyhpc0RldjogYm9vbGVhbiwgbW9kZTogTW9kZXMsIGJ1bmRsZSA9IGZhbHNlKSB7XG4gICAgY29uc3QgbG9nID0gdGhpcy5sb2cuZm9yKHRoaXMuYnVpbGRUcyk7XG4gICAgbG9nLmluZm8oXG4gICAgICBgQnVpbGRpbmcgJHt0aGlzLnBrZ05hbWV9ICR7dGhpcy5wa2dWZXJzaW9ufSBtb2R1bGUgKCR7bW9kZX0pIGluICR7aXNEZXYgPyBcImRldlwiIDogXCJwcm9kXCJ9IG1vZGUuLi5gXG4gICAgKTtcbiAgICBsZXQgdHNDb25maWc7XG4gICAgdHJ5IHtcbiAgICAgIHRzQ29uZmlnID0gdGhpcy5yZWFkQ29uZmlnRmlsZShcIi4vdHNjb25maWcuanNvblwiKTtcbiAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBwYXJzZSB0c2NvbmZpZy5qc29uOiAke2V9YCk7XG4gICAgfVxuXG4gICAgaWYgKGJ1bmRsZSkge1xuICAgICAgdHNDb25maWcub3B0aW9ucy5tb2R1bGUgPSBNb2R1bGVLaW5kLkFNRDtcbiAgICAgIHRzQ29uZmlnLm9wdGlvbnMub3V0RGlyID0gXCJkaXN0XCI7XG4gICAgICB0c0NvbmZpZy5vcHRpb25zLmlzb2xhdGVkTW9kdWxlcyA9IGZhbHNlO1xuICAgICAgdHNDb25maWcub3B0aW9ucy5vdXRGaWxlID0gdGhpcy5wa2dOYW1lO1xuICAgIH0gZWxzZSB7XG4gICAgICB0c0NvbmZpZy5vcHRpb25zLm91dERpciA9IGBsaWIke21vZGUgPT09IE1vZGVzLkVTTSA/IFwiL2VzbVwiIDogXCJcIn1gO1xuICAgICAgdHNDb25maWcub3B0aW9ucy5tb2R1bGUgPVxuICAgICAgICBtb2RlID09PSBNb2Rlcy5FU00gPyBNb2R1bGVLaW5kLkVTMjAyMiA6IE1vZHVsZUtpbmQuQ29tbW9uSlM7XG4gICAgfVxuXG4gICAgaWYgKGlzRGV2KSB7XG4gICAgICB0c0NvbmZpZy5vcHRpb25zLmlubGluZVNvdXJjZU1hcCA9IHRydWU7XG4gICAgICB0c0NvbmZpZy5vcHRpb25zLnNvdXJjZU1hcCA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0c0NvbmZpZy5vcHRpb25zLnNvdXJjZU1hcCA9IGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IHByb2dyYW0gPSB0cy5jcmVhdGVQcm9ncmFtKHRzQ29uZmlnLmZpbGVOYW1lcywgdHNDb25maWcub3B0aW9ucyk7XG5cbiAgICBjb25zdCB0cmFuc2Zvcm1hdGlvbnM6IHsgYmVmb3JlPzogYW55W10gfSA9IHt9O1xuICAgIGlmIChtb2RlID09PSBNb2Rlcy5DSlMpIHtcbiAgICAgIHRyYW5zZm9ybWF0aW9ucy5iZWZvcmUgPSBbY2pzMlRyYW5zZm9ybWVyKFwiLmNqc1wiKV07XG4gICAgfSBlbHNlIGlmIChtb2RlID09PSBNb2Rlcy5FU00pIHtcbiAgICAgIHRyYW5zZm9ybWF0aW9ucy5iZWZvcmUgPSBbY2pzMlRyYW5zZm9ybWVyKFwiLmpzXCIpXTtcbiAgICB9XG5cbiAgICBjb25zdCBlbWl0UmVzdWx0OiBFbWl0UmVzdWx0ID0gcHJvZ3JhbS5lbWl0KFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgdHJhbnNmb3JtYXRpb25zXG4gICAgKTtcblxuICAgIGNvbnN0IGFsbERpYWdub3N0aWNzID0gdHNcbiAgICAgIC5nZXRQcmVFbWl0RGlhZ25vc3RpY3MocHJvZ3JhbSlcbiAgICAgIC5jb25jYXQoZW1pdFJlc3VsdC5kaWFnbm9zdGljcyk7XG5cbiAgICBhbGxEaWFnbm9zdGljcy5mb3JFYWNoKChkaWFnbm9zdGljKSA9PiB7XG4gICAgICBpZiAoZGlhZ25vc3RpYy5maWxlKSB7XG4gICAgICAgIGNvbnN0IHsgbGluZSwgY2hhcmFjdGVyIH0gPVxuICAgICAgICAgIGRpYWdub3N0aWMuZmlsZS5nZXRMaW5lQW5kQ2hhcmFjdGVyT2ZQb3NpdGlvbihkaWFnbm9zdGljLnN0YXJ0ISk7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB0cy5mbGF0dGVuRGlhZ25vc3RpY01lc3NhZ2VUZXh0KFxuICAgICAgICAgIGRpYWdub3N0aWMubWVzc2FnZVRleHQsXG4gICAgICAgICAgXCJcXG5cIlxuICAgICAgICApO1xuICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICBgJHtkaWFnbm9zdGljLmZpbGUuZmlsZU5hbWV9ICgke2xpbmUgKyAxfSwke2NoYXJhY3RlciArIDF9KTogJHttZXNzYWdlfWBcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgIHRzLmZsYXR0ZW5EaWFnbm9zdGljTWVzc2FnZVRleHQoZGlhZ25vc3RpYy5tZXNzYWdlVGV4dCwgXCJcXG5cIilcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoZW1pdFJlc3VsdC5lbWl0U2tpcHBlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQnVpbGQgZmFpbGVkXCIpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgYnVpbGQoaXNEZXY6IGJvb2xlYW4sIG1vZGU6IE1vZGVzLCBidW5kbGUgPSBmYWxzZSkge1xuICAgIGNvbnN0IGxvZyA9IHRoaXMubG9nLmZvcih0aGlzLmJ1aWxkKTtcbiAgICBhd2FpdCB0aGlzLmJ1aWxkVHMoaXNEZXYsIG1vZGUsIGJ1bmRsZSk7XG5cbiAgICBsb2cudmVyYm9zZShcbiAgICAgIGBNb2R1bGUgJHt0aGlzLnBrZ05hbWV9ICR7dGhpcy5wa2dWZXJzaW9ufSAoJHttb2RlfSkgYnVpbHQgaW4gJHtpc0RldiA/IFwiZGV2XCIgOiBcInByb2RcIn0gbW9kZS4uLmBcbiAgICApO1xuICAgIGlmIChtb2RlID09PSBNb2Rlcy5DSlMgJiYgIWJ1bmRsZSkge1xuICAgICAgY29uc3QgZmlsZXMgPSBnZXRBbGxGaWxlcyhcbiAgICAgICAgXCJsaWJcIixcbiAgICAgICAgKGZpbGUpID0+IGZpbGUuZW5kc1dpdGgoXCIuanNcIikgJiYgIWZpbGUuaW5jbHVkZXMoXCIvZXNtL1wiKVxuICAgICAgKTtcblxuICAgICAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgICAgIGxvZy52ZXJib3NlKGBQYXRjaGluZyAke2ZpbGV9J3MgY2pzIGltcG9ydHMuLi5gKTtcbiAgICAgICAgY29uc3QgZiA9IGZpbGUucmVwbGFjZShcIi5qc1wiLCBcIi5janNcIik7XG4gICAgICAgIGF3YWl0IHJlbmFtZUZpbGUoZmlsZSwgZik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29weUFzc2V0cyhtb2RlOiBNb2Rlcykge1xuICAgIGNvbnN0IGxvZyA9IHRoaXMubG9nLmZvcih0aGlzLmNvcHlBc3NldHMpO1xuICAgIGxldCBoYXNBc3NldHMgPSBmYWxzZTtcbiAgICB0cnkge1xuICAgICAgaGFzQXNzZXRzID0gZnMuc3RhdFN5bmMoXCIuL3NyYy9hc3NldHNcIikuaXNEaXJlY3RvcnkoKTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICByZXR1cm4gbG9nLnZlcmJvc2UoYE5vIGFzc2V0cyBmb3VuZCBpbiAuL3NyYy9hc3NldHMgdG8gY29weWApO1xuICAgIH1cbiAgICBpZiAoaGFzQXNzZXRzKVxuICAgICAgY29weUZpbGUoXG4gICAgICAgIFwiLi9zcmMvYXNzZXRzXCIsXG4gICAgICAgIGAuLyR7bW9kZSA9PT0gTW9kZXMuQ0pTID8gXCJsaWJcIiA6IFwiZGlzdFwifS9hc3NldHNgXG4gICAgICApO1xuICB9XG5cbiAgYXN5bmMgYnVpbGRDb21tYW5kcygpIHtcbiAgICBmb3IgKGNvbnN0IGNtZCBvZiBDb21tYW5kcykge1xuICAgICAgYXdhaXQgdGhpcy5idW5kbGUoTW9kZXMuQ0pTLCB0cnVlLCB0cnVlLCBgc3JjL2Jpbi8ke2NtZH0udHNgLCBjbWQpO1xuICAgICAgbGV0IGRhdGEgPSByZWFkRmlsZShgYmluLyR7Y21kfS5janNgKTtcbiAgICAgIGRhdGEgPSBcIiMhL3Vzci9iaW4vZW52IG5vZGVcXG5cIiArIGRhdGE7XG4gICAgICB3cml0ZUZpbGUoYGJpbi8ke2NtZH0uY2pzYCwgZGF0YSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgYnVuZGxlKFxuICAgIG1vZGU6IE1vZGVzLFxuICAgIGlzRGV2OiBib29sZWFuLFxuICAgIGlzTGliOiBib29sZWFuLFxuICAgIGVudHJ5RmlsZTogc3RyaW5nID0gXCJzcmMvaW5kZXgudHNcIixcbiAgICBuYW1lT3ZlcnJpZGU6IHN0cmluZyA9IHRoaXMucGtnTmFtZSxcbiAgICBleHRlcm5hbHM/OiBzdHJpbmdbXSxcbiAgICBpbmNsdWRlOiBzdHJpbmdbXSA9IFtcbiAgICAgIFwicHJvbXB0c1wiLFxuICAgICAgXCJzdHlsZWQtc3RyaW5nLWJ1aWxkZXJcIixcbiAgICAgIFwidHlwZWQtb2JqZWN0LWFjY3VtdWxhdG9yXCIsXG4gICAgICBcIkBkZWNhZi10cy9sb2dnaW5nXCIsXG4gICAgXVxuICApIHtcbiAgICBjb25zdCBpc0VzbSA9IG1vZGUgPT09IE1vZGVzLkVTTTtcbiAgICBjb25zdCBwa2dOYW1lID0gdGhpcy5wa2dOYW1lO1xuXG4gICAgY29uc3QgZXh0ID0gQXJyYXkuZnJvbShcbiAgICAgIG5ldyBTZXQoW1xuICAgICAgICAuLi5bXG4gICAgICAgICAgXCJmc1wiLFxuICAgICAgICAgIFwicGF0aFwiLFxuICAgICAgICAgIFwicHJvY2Vzc1wiLFxuICAgICAgICAgIFwicm9sbHVwXCIsXG4gICAgICAgICAgXCJAcm9sbHVwL3BsdWdpbi10eXBlc2NyaXB0XCIsXG4gICAgICAgICAgXCJAcm9sbHVwL3BsdWdpbi1qc29uXCIsXG4gICAgICAgICAgXCJAcm9sbHVwL3BsdWdpbi1jb21tb25qc1wiLFxuICAgICAgICAgIFwiQHJvbGx1cC9wbHVnaW4tbm9kZS1yZXNvbHZlXCIsXG4gICAgICAgICAgXCJjaGlsZF9wcm9jZXNzXCIsXG4gICAgICAgICAgXCJ0c2xpYlwiLFxuICAgICAgICAgIFwidXRpbFwiLFxuICAgICAgICAgIFwiaHR0cHNcIixcbiAgICAgICAgXSxcbiAgICAgICAgLi4uKGV4dGVybmFscyB8fCBbXSksXG4gICAgICBdKVxuICAgICk7XG5cbiAgICBjb25zdCBwbHVnaW5zID0gW1xuICAgICAgdHlwZXNjcmlwdCh7XG4gICAgICAgIGNvbXBpbGVyT3B0aW9uczoge1xuICAgICAgICAgIG1vZHVsZTogXCJlc25leHRcIixcbiAgICAgICAgICBkZWNsYXJhdGlvbjogZmFsc2UsXG4gICAgICAgICAgb3V0RGlyOiBpc0xpYiA/IFwiYmluXCIgOiBcImRpc3RcIixcbiAgICAgICAgfSxcbiAgICAgICAgaW5jbHVkZTogW1wic3JjLyoqLyoudHNcIl0sXG4gICAgICAgIGV4Y2x1ZGU6IFtcIm5vZGVfbW9kdWxlc1wiLCBcIioqLyouc3BlYy50c1wiXSxcbiAgICAgICAgdHNjb25maWc6IFwiLi90c2NvbmZpZy5qc29uXCIsXG4gICAgICB9KSxcbiAgICAgIGpzb24oKSxcbiAgICBdO1xuXG4gICAgaWYgKGlzTGliKSB7XG4gICAgICBwbHVnaW5zLnB1c2goXG4gICAgICAgIGNvbW1vbmpzKHtcbiAgICAgICAgICBpbmNsdWRlOiBbXSxcbiAgICAgICAgICBleGNsdWRlOiBleHRlcm5hbHMsXG4gICAgICAgIH0pLFxuICAgICAgICBub2RlUmVzb2x2ZSh7XG4gICAgICAgICAgcmVzb2x2ZU9ubHk6IGluY2x1ZGUsXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGlucHV0OiBJbnB1dE9wdGlvbnMgPSB7XG4gICAgICBpbnB1dDogZW50cnlGaWxlLFxuICAgICAgcGx1Z2luczogcGx1Z2lucyxcbiAgICAgIGV4dGVybmFsOiBleHQsXG4gICAgfTtcblxuICAgIGNvbnN0IG91dHB1dHM6IE91dHB1dE9wdGlvbnNbXSA9IFtcbiAgICAgIHtcbiAgICAgICAgZmlsZTogYCR7aXNMaWIgPyBcImJpbi9cIiA6IFwiZGlzdC9cIn0ke25hbWVPdmVycmlkZSA/IG5hbWVPdmVycmlkZSA6IGAuYnVuZGxlLiR7IWlzRGV2ID8gXCJtaW5cIiA6IFwiXCJ9YH0ke2lzRXNtID8gXCIuZXNtXCIgOiBcIlwifS5janNgLFxuICAgICAgICBmb3JtYXQ6IGlzTGliID8gXCJjanNcIiA6IGlzRXNtID8gXCJlc21cIiA6IFwidW1kXCIsXG4gICAgICAgIG5hbWU6IHBrZ05hbWUsXG4gICAgICAgIGVzTW9kdWxlOiBpc0VzbSxcbiAgICAgICAgc291cmNlbWFwOiBpc0RldiA/IFwiaW5saW5lXCIgOiBmYWxzZSxcbiAgICAgICAgZ2xvYmFsczoge30sXG4gICAgICAgIGV4cG9ydHM6IFwiYXV0b1wiLFxuICAgICAgfSxcbiAgICBdO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGJ1bmRsZSA9IGF3YWl0IHJvbGx1cChpbnB1dCk7XG4gICAgICBjb25zb2xlLmxvZyhidW5kbGUud2F0Y2hGaWxlcyk7XG4gICAgICBhc3luYyBmdW5jdGlvbiBnZW5lcmF0ZU91dHB1dHMoYnVuZGxlOiBSb2xsdXBCdWlsZCkge1xuICAgICAgICBmb3IgKGNvbnN0IG91dHB1dE9wdGlvbnMgb2Ygb3V0cHV0cykge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICAgICAgICBjb25zdCB7IG91dHB1dCB9ID0gYXdhaXQgYnVuZGxlLndyaXRlKG91dHB1dE9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IGdlbmVyYXRlT3V0cHV0cyhidW5kbGUpO1xuICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGJ1bmRsZTogJHtlfWApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgYnVpbGRCeUVudihpc0RldjogYm9vbGVhbikge1xuICAgIHRyeSB7XG4gICAgICBkZWxldGVQYXRoKFwibGliXCIpO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgIC8vIGRvIG5vdGhpbmdcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGRlbGV0ZVBhdGgoXCJkaXN0XCIpO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgIC8vIGRvIG5vdGhpbmdcbiAgICB9XG4gICAgZnMubWtkaXJTeW5jKFwibGliXCIpO1xuICAgIGZzLm1rZGlyU3luYyhcImRpc3RcIik7XG4gICAgYXdhaXQgdGhpcy5idWlsZChpc0RldiwgTW9kZXMuRVNNKTtcbiAgICBhd2FpdCB0aGlzLmJ1aWxkKGlzRGV2LCBNb2Rlcy5DSlMpO1xuICAgIGF3YWl0IHRoaXMuYnVuZGxlKE1vZGVzLkVTTSwgdHJ1ZSwgZmFsc2UpO1xuICAgIGF3YWl0IHRoaXMuYnVuZGxlKE1vZGVzLkNKUywgdHJ1ZSwgZmFsc2UpO1xuICAgIHRoaXMucGF0Y2hGaWxlcyhcImxpYlwiKTtcbiAgICB0aGlzLnBhdGNoRmlsZXMoXCJkaXN0XCIpO1xuICAgIHRoaXMuY29weUFzc2V0cyhNb2Rlcy5DSlMpO1xuICAgIHRoaXMuY29weUFzc2V0cyhNb2Rlcy5FU00pO1xuICB9XG5cbiAgYXN5bmMgYnVpbGREZXYoKSB7XG4gICAgcmV0dXJuIHRoaXMuYnVpbGRCeUVudih0cnVlKTtcbiAgfVxuXG4gIGFzeW5jIGJ1aWxkUHJvZCgpIHtcbiAgICByZXR1cm4gdGhpcy5idWlsZEJ5RW52KGZhbHNlKTtcbiAgfVxuXG4gIGFzeW5jIGJ1aWxkRG9jcygpIHtcbiAgICBhd2FpdCBydW5Db21tYW5kKGBucG0gaW5zdGFsbCBiZXR0ZXItZG9jcyB0YWZmeWRiYCkucHJvbWlzZTtcbiAgICBhd2FpdCBydW5Db21tYW5kKGBucHggbWFya2Rvd24taW5jbHVkZSAuL3dvcmtkb2NzL3JlYWRtZS1tZC5qc29uYCkucHJvbWlzZTtcbiAgICBhd2FpdCBydW5Db21tYW5kKFxuICAgICAgYG5weCBqc2RvYyAtYyAuL3dvcmtkb2NzL2pzZG9jcy5qc29uIC10IC4vbm9kZV9tb2R1bGVzL2JldHRlci1kb2NzYFxuICAgICkucHJvbWlzZTtcbiAgICBhd2FpdCBydW5Db21tYW5kKGBucG0gcmVtb3ZlIGJldHRlci1kb2NzIHRhZmZ5ZGJgKS5wcm9taXNlO1xuICAgIFtcbiAgICAgIHtcbiAgICAgICAgc3JjOiBcIndvcmtkb2NzL2Fzc2V0c1wiLFxuICAgICAgICBkZXN0OiBcIi4vZG9jcy93b3JrZG9jcy9hc3NldHNcIixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHNyYzogXCJ3b3JrZG9jcy9yZXBvcnRzL2NvdmVyYWdlXCIsXG4gICAgICAgIGRlc3Q6IFwiLi9kb2NzL3dvcmtkb2NzL3JlcG9ydHMvY292ZXJhZ2VcIixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHNyYzogXCJ3b3JrZG9jcy9yZXBvcnRzL2h0bWxcIixcbiAgICAgICAgZGVzdDogXCIuL2RvY3Mvd29ya2RvY3MvcmVwb3J0cy9odG1sXCIsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBzcmM6IFwid29ya2RvY3MvcmVzb3VyY2VzXCIsXG4gICAgICAgIGRlc3Q6IFwiLi9kb2NzL3dvcmtkb2NzL3Jlc291cmNlc1wiLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgc3JjOiBcIkxJQ0VOU0UubWRcIixcbiAgICAgICAgZGVzdDogXCIuL2RvY3MvTElDRU5TRS5tZFwiLFxuICAgICAgfSxcbiAgICBdLmZvckVhY2goKGYpID0+IHtcbiAgICAgIGNvbnN0IHsgc3JjLCBkZXN0IH0gPSBmO1xuICAgICAgY29weUZpbGUoc3JjLCBkZXN0KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBydW48Uj4oXG4gICAgYW5zd2VyczogTG9nZ2luZ0NvbmZpZyAmXG4gICAgICB0eXBlb2YgRGVmYXVsdENvbW1hbmRWYWx1ZXMgJiB7IFtrIGluIGtleW9mIHR5cGVvZiBvcHRpb25zXTogdW5rbm93biB9XG4gICk6IFByb21pc2U8c3RyaW5nIHwgdm9pZCB8IFI+IHtcbiAgICBjb25zdCB7IGRldiwgcHJvZCwgZG9jcywgY29tbWFuZHMgfSA9IGFuc3dlcnM7XG5cbiAgICBpZiAoY29tbWFuZHMpIHtcbiAgICAgIGF3YWl0IHRoaXMuYnVpbGRDb21tYW5kcygpO1xuICAgIH1cblxuICAgIGlmIChkZXYpIHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLmJ1aWxkRGV2KCk7XG4gICAgfVxuICAgIGlmIChwcm9kKSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5idWlsZFByb2QoKTtcbiAgICB9XG4gICAgaWYgKGRvY3MpIHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLmJ1aWxkRG9jcygpO1xuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IENvbW1hbmQgfSBmcm9tIFwiLi4vY29tbWFuZFwiO1xuaW1wb3J0IHsgQ29tbWFuZE9wdGlvbnMgfSBmcm9tIFwiLi4vdHlwZXNcIjtcbmltcG9ydCB7XG4gIGdldFBhY2thZ2UsXG4gIEh0dHBDbGllbnQsXG4gIHBhdGNoRmlsZSxcbiAgcGF0Y2hTdHJpbmcsXG4gIHJ1bkNvbW1hbmQsXG4gIHNldFBhY2thZ2VBdHRyaWJ1dGUsXG4gIFNldHVwU2NyaXB0S2V5LFxuICBUb2tlbnMsXG4gIHdyaXRlRmlsZSxcbn0gZnJvbSBcIi4uLy4uL3V0aWxzXCI7XG5pbXBvcnQgeyBEZWZhdWx0Q29tbWFuZFZhbHVlcyB9IGZyb20gXCIuLi9pbmRleFwiO1xuaW1wb3J0IHsgVXNlcklucHV0IH0gZnJvbSBcIi4uLy4uL2lucHV0XCI7XG5pbXBvcnQgZnMgZnJvbSBcImZzXCI7XG5pbXBvcnQgeyBMb2dnaW5nQ29uZmlnIH0gZnJvbSBcIkBkZWNhZi10cy9sb2dnaW5nXCI7XG5cbmNvbnN0IGJhc2VVcmwgPVxuICBcImh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9kZWNhZi10cy90cy13b3Jrc3BhY2UvbWFzdGVyXCI7XG5cbmNvbnN0IG9wdGlvbnMgPSB7XG4gIHRlbXBsYXRlczogW1xuICAgIFwiLmdpdGh1Yi9JU1NVRV9URU1QTEFURS9idWdfcmVwb3J0Lm1kXCIsXG4gICAgXCIuZ2l0aHViL0lTU1VFX1RFTVBMQVRFL2ZlYXR1cmVfcmVxdWVzdC5tZFwiLFxuICAgIFwiLmdpdGh1Yi9GVU5ESU5HLnltbFwiLFxuICBdLFxuICB3b3JrZmxvd3M6IFtcbiAgICBcIi5naXRodWIvd29ya2Zsb3dzL2NvZGVxbC1hbmFseXNpcy55bWxcIixcbiAgICBcIi5naXRodWIvd29ya2Zsb3dzL2plc3QtY292ZXJhZ2UueWFtbFwiLFxuICAgIFwiLmdpdGh1Yi93b3JrZmxvd3Mvbm9kZWpzLWJ1aWxkLXByb2QueWFtbFwiLFxuICAgIFwiLmdpdGh1Yi93b3JrZmxvd3MvcGFnZXMueWFtbFwiLFxuICAgIFwiLmdpdGh1Yi93b3JrZmxvd3MvcHVibGlzaC1vbi1yZWxlYXNlLnlhbWxcIixcbiAgICBcIi5naXRodWIvd29ya2Zsb3dzL3JlbGVhc2Utb24tdGFnLnlhbWxcIixcbiAgICBcIi5naXRodWIvd29ya2Zsb3dzL3NueWstYW5hbHlzaXMueWFtbFwiLFxuICBdLFxuICBpZGU6IFtcbiAgICBcIi5pZGVhL3J1bkNvbmZpZ3VyYXRpb25zL0FsbCBUZXN0cy5ydW4ueG1sXCIsXG4gICAgXCIuaWRlYS9ydW5Db25maWd1cmF0aW9ucy9idWlsZC5ydW4ueG1sXCIsXG4gICAgXCIuaWRlYS9ydW5Db25maWd1cmF0aW9ucy9idWlsZF9wcm9kLnJ1bi54bWxcIixcbiAgICBcIi5pZGVhL3J1bkNvbmZpZ3VyYXRpb25zL2NvdmVyYWdlLnJ1bi54bWxcIixcbiAgICBcIi5pZGVhL3J1bkNvbmZpZ3VyYXRpb25zL2RvY3MucnVuLnhtbFwiLFxuICAgIFwiLmlkZWEvcnVuQ29uZmlndXJhdGlvbnMvZHJhd2luZ3MucnVuLnhtbFwiLFxuICAgIFwiLmlkZWEvcnVuQ29uZmlndXJhdGlvbnMvZmxhc2gtZm9yd2FyZC5ydW4ueG1sXCIsXG4gICAgXCIuaWRlYS9ydW5Db25maWd1cmF0aW9ucy9JbnRlZ3JhdGlvbl9UZXN0cy5ydW4ueG1sXCIsXG4gICAgXCIuaWRlYS9ydW5Db25maWd1cmF0aW9ucy9CdW5kbGluZ19UZXN0cy5ydW4ueG1sXCIsXG4gICAgXCIuaWRlYS9ydW5Db25maWd1cmF0aW9ucy9saW50LWZpeC5ydW4ueG1sXCIsXG4gICAgXCIuaWRlYS9ydW5Db25maWd1cmF0aW9ucy9yZWxlYXNlLnJ1bi54bWxcIixcbiAgICBcIi5pZGVhL3J1bkNvbmZpZ3VyYXRpb25zL3Rlc3RfY2lyY3VsYXIucnVuLnhtbFwiLFxuICAgIFwiLmlkZWEvcnVuQ29uZmlndXJhdGlvbnMvdW1sLnJ1bi54bWxcIixcbiAgICBcIi5pZGVhL3J1bkNvbmZpZ3VyYXRpb25zL1VuaXQgVGVzdHMucnVuLnhtbFwiLFxuICAgIFwiLmlkZWEvcnVuQ29uZmlndXJhdGlvbnMvdXBkYXRlLXNjcmlwdHMucnVuLnhtbFwiLFxuICBdLFxuICBkb2NzOiBbXG4gICAgXCJ3b3JrZG9jcy90dXRvcmlhbHMvQ29udHJpYnV0aW5nLm1kXCIsXG4gICAgXCJ3b3JrZG9jcy90dXRvcmlhbHMvRG9jdW1lbnRhdGlvbi5tZFwiLFxuICAgIFwid29ya2RvY3MvdHV0b3JpYWxzL0ZvciBEZXZlbG9wZXJzLm1kXCIsXG4gICAgXCJ3b3JrZG9jcy8yLUJhZGdlcy5tZFwiLFxuICAgIFwid29ya2RvY3MvanNkb2NzLmpzb25cIixcbiAgICBcIndvcmtkb2NzL3JlYWRtZS1tZC5qc29uXCIsXG4gIF0sXG4gIHN0eWxlczogW1wiLnByZXR0aWVycmNcIiwgXCJlc2xpbnQuY29uZmlnLmpzXCJdLFxuICBzY3JpcHRzOiBbXG4gICAgXCJiaW4vdXBkYXRlLXNjcmlwdHMuY2pzXCIsXG4gICAgXCJiaW4vdGFnLXJlbGVhc2UuY2pzXCIsXG4gICAgXCJiaW4vYnVpbGQtc2NyaXB0cy5janNcIixcbiAgXSxcbiAgdGVzdHM6IFtcImplc3QuY29uZmlnLnRzXCIsIFwid29ya2RvY3MvcmVwb3J0cy9qZXN0LmNvdmVyYWdlLmNvbmZpZy50c1wiXSxcbiAgdHlwZXNjcmlwdDogW1widHNjb25maWcuanNvblwiXSxcbiAgZG9ja2VyOiBbXCJEb2NrZXJmaWxlXCJdLFxuICBhdXRvbWF0aW9uOiBbXG4gICAgXCJ3b3JrZG9jcy9jb25mbHVlbmNlL0NvbnRpbnVvdXMgSW50ZWdyYXRpb24tRGVwbG95bWVudC9HaXRIdWIubWRcIixcbiAgICBcIndvcmtkb2NzL2NvbmZsdWVuY2UvQ29udGludW91cyBJbnRlZ3JhdGlvbi1EZXBsb3ltZW50L0ppcmEubWRcIixcbiAgICBcIndvcmtkb2NzL2NvbmZsdWVuY2UvQ29udGludW91cyBJbnRlZ3JhdGlvbi1EZXBsb3ltZW50L1RlYW1zLm1kXCIsXG4gIF0sXG59O1xuXG5jb25zdCBhcmd6eiA9IHtcbiAgLy8gaW5pdCBhdHRyaWJ1dGVzXG4gIGJvb3Q6IHtcbiAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgfSxcbiAgb3JnOiB7XG4gICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICBzaG9ydDogXCJvXCIsXG4gIH0sXG4gIG5hbWU6IHtcbiAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgIHNob3J0OiBcIm5cIixcbiAgICBkZWZhdWx0OiB1bmRlZmluZWQsXG4gIH0sXG4gIGF1dGhvcjoge1xuICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgc2hvcnQ6IFwiYVwiLFxuICAgIGRlZmF1bHQ6IHVuZGVmaW5lZCxcbiAgfSxcbiAgLy8gdXBkYXRlIGF0dHJpYnV0ZXNcbiAgYWxsOiB7XG4gICAgdHlwZTogXCJib29sZWFuXCIsXG4gIH0sXG4gIGxpY2Vuc2U6IHtcbiAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgIG1lc3NhZ2U6IFwiUGljayB0aGUgbGljZW5zZVwiLFxuICB9LFxuICBzY3JpcHRzOiB7XG4gICAgdHlwZTogXCJib29sZWFuXCIsXG4gIH0sXG4gIHN0eWxlczoge1xuICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICB9LFxuICBkb2NzOiB7XG4gICAgdHlwZTogXCJib29sZWFuXCIsXG4gIH0sXG4gIGlkZToge1xuICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICB9LFxuICB3b3JrZmxvd3M6IHtcbiAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgfSxcbiAgdGVtcGxhdGVzOiB7XG4gICAgdHlwZTogXCJib29sZWFuXCIsXG4gIH0sXG4gIHR5cGVzY3JpcHQ6IHtcbiAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgfSxcbiAgZG9ja2VyOiB7XG4gICAgdHlwZTogXCJib29sZWFuXCIsXG4gIH0sXG4gIHBrZzoge1xuICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICB9LFxuICBkZXBlbmRlbmNpZXM6IHtcbiAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgfSxcbiAgdGVzdHM6IHtcbiAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgfSxcbiAgYXV0b21hdGlvbjoge1xuICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICB9LFxufTtcblxuLyoqXG4gKiBAY2xhc3MgVGVtcGxhdGVTeW5jXG4gKiBAZXh0ZW5kcyB7Q29tbWFuZH1cbiAqIEBjYXRlZ29yeSBzY3JpcHRzXG4gKiBAZGVzY3JpcHRpb24gQSBjb21tYW5kLWxpbmUgdG9vbCBmb3Igc3luY2hyb25pemluZyBwcm9qZWN0IHRlbXBsYXRlcyBhbmQgY29uZmlndXJhdGlvbnMuXG4gKiBAc3VtbWFyeSBUaGlzIGNsYXNzIHByb3ZpZGVzIGZ1bmN0aW9uYWxpdHkgdG8gZG93bmxvYWQgYW5kIHVwZGF0ZSB2YXJpb3VzIHByb2plY3QgZmlsZXMgYW5kIGNvbmZpZ3VyYXRpb25zIGZyb20gYSByZW1vdGUgcmVwb3NpdG9yeS5cbiAqIEl0IHN1cHBvcnRzIHVwZGF0aW5nIGxpY2Vuc2VzLCBJREUgY29uZmlndXJhdGlvbnMsIHNjcmlwdHMsIHN0eWxlcywgZG9jdW1lbnRhdGlvbiwgd29ya2Zsb3dzLCBhbmQgdGVtcGxhdGVzLlxuICpcbiAqIEBwYXJhbSB7Q29tbWFuZE9wdGlvbnN9IGFyZ3MgLSBUaGUgY29tbWFuZCBvcHRpb25zIGZvciBUZW1wbGF0ZVN5bmNcbiAqL1xuZXhwb3J0IGNsYXNzIFRlbXBsYXRlU3luYyBleHRlbmRzIENvbW1hbmQ8Q29tbWFuZE9wdGlvbnM8dHlwZW9mIGFyZ3p6Piwgdm9pZD4ge1xuICBwcml2YXRlIHJlcGxhY2VtZW50czogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyPiA9IHt9O1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFwiVGVtcGxhdGVTeW5jXCIsIGFyZ3p6KTtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZFZhbHVlc0Zyb21QYWNrYWdlKCkge1xuICAgIGNvbnN0IHAgPSBwcm9jZXNzLmN3ZCgpO1xuICAgIGNvbnN0IGF1dGhvciA9IGdldFBhY2thZ2UocCwgXCJhdXRob3JcIikgYXMgc3RyaW5nO1xuICAgIGNvbnN0IHNjb3BlZE5hbWUgPSBnZXRQYWNrYWdlKHAsIFwibmFtZVwiKTtcbiAgICBsZXQgbmFtZTogc3RyaW5nID0gc2NvcGVkTmFtZSBhcyBzdHJpbmc7XG4gICAgbGV0IG9yZzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGlmIChuYW1lLnN0YXJ0c1dpdGgoXCJAXCIpKSB7XG4gICAgICBjb25zdCBzcGxpdCA9IG5hbWUuc3BsaXQoXCIvXCIpO1xuICAgICAgbmFtZSA9IHNwbGl0WzFdO1xuICAgICAgb3JnID0gc3BsaXRbMF0ucmVwbGFjZShcIkBcIiwgXCJcIik7XG4gICAgfVxuICAgIFtcIlRpYWdvIFZlbmNlc2xhdVwiLCBcIlRpYWdvVmVuY2VzbGF1XCIsIFwiJHthdXRob3J9XCJdLmZvckVhY2goXG4gICAgICAoZWwpID0+ICh0aGlzLnJlcGxhY2VtZW50c1tlbF0gPSBhdXRob3IpXG4gICAgKTtcbiAgICBbXCJUUy1Xb3Jrc3BhY2VcIiwgXCJ0cy13b3Jrc3BhY2VcIiwgXCIke25hbWV9XCJdLmZvckVhY2goXG4gICAgICAoZWwpID0+ICh0aGlzLnJlcGxhY2VtZW50c1tlbF0gPSBuYW1lKVxuICAgICk7XG4gICAgW1wiZGVjYWYtdHNcIiwgXCIke29yZ31cIl0uZm9yRWFjaChcbiAgICAgIChlbCkgPT4gKHRoaXMucmVwbGFjZW1lbnRzW2VsXSA9IChvcmcgYXMgc3RyaW5nKSB8fCAnXCJcIicpXG4gICAgKTtcbiAgICB0aGlzLnJlcGxhY2VtZW50c1tcIiR7b3JnX29yX293bmVyfVwiXSA9IG9yZyB8fCBuYW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBEb3dubG9hZHMgZmlsZXMgZm9yIGEgc3BlY2lmaWMgb3B0aW9uIGNhdGVnb3J5LlxuICAgKiBAc3VtbWFyeSBUaGlzIG1ldGhvZCBkb3dubG9hZHMgYWxsIGZpbGVzIGFzc29jaWF0ZWQgd2l0aCBhIGdpdmVuIG9wdGlvbiBrZXkgZnJvbSB0aGUgcmVtb3RlIHJlcG9zaXRvcnkuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUga2V5IHJlcHJlc2VudGluZyB0aGUgb3B0aW9uIGNhdGVnb3J5IHRvIGRvd25sb2FkXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIHNwZWNpZmllZCBvcHRpb24ga2V5IGlzIG5vdCBmb3VuZFxuICAgKi9cbiAgYXN5bmMgZG93bmxvYWRPcHRpb24oa2V5OiBrZXlvZiB0eXBlb2Ygb3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghKGtleSBpbiBvcHRpb25zKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBPcHRpb24gXCIke2tleX1cIiBub3QgZm91bmQgaW4gb3B0aW9uc2ApO1xuICAgIH1cbiAgICBjb25zdCBmaWxlcyA9IG9wdGlvbnNba2V5IGFzIGtleW9mIHR5cGVvZiBvcHRpb25zXTtcblxuICAgIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xuICAgICAgdGhpcy5sb2cuaW5mbyhgRG93bmxvYWRpbmcgJHtmaWxlfWApO1xuXG4gICAgICBsZXQgZGF0YSA9IGF3YWl0IEh0dHBDbGllbnQuZG93bmxvYWRGaWxlKGAke2Jhc2VVcmx9LyR7ZmlsZX1gKTtcbiAgICAgIGRhdGEgPSBwYXRjaFN0cmluZyhkYXRhLCB0aGlzLnJlcGxhY2VtZW50cyk7XG4gICAgICB3cml0ZUZpbGUocGF0aC5qb2luKHByb2Nlc3MuY3dkKCksIGZpbGUpLCBkYXRhKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIERvd25sb2FkcyBhbmQgc2V0cyB1cCB0aGUgc3BlY2lmaWVkIGxpY2Vuc2UuXG4gICAqIEBzdW1tYXJ5IFRoaXMgbWV0aG9kIGRvd25sb2FkcyB0aGUgY2hvc2VuIGxpY2Vuc2UgZmlsZSwgc2F2ZXMgaXQgdG8gdGhlIHByb2plY3QsIGFuZCB1cGRhdGVzIHRoZSBwYWNrYWdlLmpzb24gbGljZW5zZSBmaWVsZC5cbiAgICogQHBhcmFtIHtcIk1JVFwiIHwgXCJHUExcIiB8IFwiQXBhY2hlXCIgfCBcIkxHUExcIiB8IFwiQUdQTFwifSBsaWNlbnNlIC0gVGhlIGxpY2Vuc2UgdG8gZG93bmxvYWQgYW5kIHNldCB1cFxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIGFzeW5jIGdldExpY2Vuc2UobGljZW5zZTogXCJNSVRcIiB8IFwiR1BMXCIgfCBcIkFwYWNoZVwiIHwgXCJMR1BMXCIgfCBcIkFHUExcIikge1xuICAgIHRoaXMubG9nLmluZm8oYERvd25sb2FkaW5nICR7bGljZW5zZX0gbGljZW5zZWApO1xuICAgIGNvbnN0IHVybCA9IGAke2Jhc2VVcmx9L3dvcmtkb2NzL2xpY2Vuc2VzLyR7bGljZW5zZX0ubWRgO1xuICAgIGxldCBkYXRhID0gYXdhaXQgSHR0cENsaWVudC5kb3dubG9hZEZpbGUodXJsKTtcbiAgICBkYXRhID0gcGF0Y2hTdHJpbmcoZGF0YSwgdGhpcy5yZXBsYWNlbWVudHMpO1xuICAgIHdyaXRlRmlsZShwYXRoLmpvaW4ocHJvY2Vzcy5jd2QoKSwgXCJMSUNFTlNFLm1kXCIpLCBkYXRhKTtcbiAgICBzZXRQYWNrYWdlQXR0cmlidXRlKFwibGljZW5zZVwiLCBsaWNlbnNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gRG93bmxvYWRzIElERSBjb25maWd1cmF0aW9uIGZpbGVzLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIGFzeW5jIGdldElkZSgpIHtcbiAgICBmcy5ta2RpclN5bmMocGF0aC5qb2luKHByb2Nlc3MuY3dkKCksIFwiLmlkZWFcIiwgXCJydW5Db25maWd1cmF0aW9uc1wiKSwge1xuICAgICAgcmVjdXJzaXZlOiB0cnVlLFxuICAgIH0pO1xuICAgIGF3YWl0IHRoaXMuZG93bmxvYWRPcHRpb24oXCJpZGVcIik7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFVwZGF0ZSBucG0gc2NyaXB0c1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIGFzeW5jIGdldFNjcmlwdHMoKSB7XG4gICAgYXdhaXQgdGhpcy5kb3dubG9hZE9wdGlvbihcInNjcmlwdHNcIik7XG4gICAgdGhpcy5sb2cuaW5mbyhcInBsZWFzZSByZS1ydW4gdGhlIGNvbW1hbmRcIik7XG4gICAgcHJvY2Vzcy5leGl0KDApO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBEb3dubG9hZHMgc3R5bGUgY29uZmlndXJhdGlvbiBmaWxlcy5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBnZXRTdHlsZXMgPSAoKSA9PiB0aGlzLmRvd25sb2FkT3B0aW9uKFwic3R5bGVzXCIpO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gRG93bmxvYWRzIHRlbXBsYXRlIGZpbGVzLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIGdldFRlbXBsYXRlcyA9ICgpID0+IHRoaXMuZG93bmxvYWRPcHRpb24oXCJ0ZW1wbGF0ZXNcIik7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBEb3dubG9hZHMgd29ya2Zsb3cgY29uZmlndXJhdGlvbiBmaWxlcy5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBnZXRXb3JrZmxvd3MgPSAoKSA9PiB0aGlzLmRvd25sb2FkT3B0aW9uKFwid29ya2Zsb3dzXCIpO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gRG93bmxvYWRzIGRvY3VtZW50YXRpb24gZmlsZXMuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICAgKi9cbiAgZ2V0RG9jcyA9ICgpID0+IHRoaXMuZG93bmxvYWRPcHRpb24oXCJkb2NzXCIpO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gRG93bmxvYWRzIHR5cGVzY3JpcHQgY29uZmlnIGZpbGVzLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIGdldFR5cGVzY3JpcHQgPSAoKSA9PiB0aGlzLmRvd25sb2FkT3B0aW9uKFwidHlwZXNjcmlwdFwiKTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIERvd25sb2FkcyBhdXRvbWF0aW9uIGRvY3VtZW50YXRpb24gZmlsZXMuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICAgKi9cbiAgZ2V0QXV0b21hdGlvbiA9ICgpID0+IHRoaXMuZG93bmxvYWRPcHRpb24oXCJhdXRvbWF0aW9uXCIpO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gRG93bmxvYWRzIGF1dG9tYXRpb24gZG9jdW1lbnRhdGlvbiBmaWxlcy5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBnZXRUZXN0cyA9ICgpID0+IHRoaXMuZG93bmxvYWRPcHRpb24oXCJ0ZXN0c1wiKTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIERvd25sb2FkcyBkb2NrZXIgaW1hZ2UgZmlsZXMuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICAgKi9cbiAgZ2V0RG9ja2VyID0gKCkgPT4gdGhpcy5kb3dubG9hZE9wdGlvbihcImRvY2tlclwiKTtcblxuICBhc3luYyBpbml0UGFja2FnZShwa2dOYW1lOiBzdHJpbmcsIGF1dGhvcjogc3RyaW5nLCBsaWNlbnNlOiBzdHJpbmcpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGtnID0gZ2V0UGFja2FnZSgpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgZGVsZXRlIHBrZ1tTZXR1cFNjcmlwdEtleV07XG4gICAgICBwa2cubmFtZSA9IHBrZ05hbWU7XG4gICAgICBwa2cudmVyc2lvbiA9IFwiMC4wLjFcIjtcbiAgICAgIHBrZy5hdXRob3IgPSBhdXRob3I7XG4gICAgICBwa2cubGljZW5zZSA9IGxpY2Vuc2U7XG4gICAgICBmcy53cml0ZUZpbGVTeW5jKFwicGFja2FnZS5qc29uXCIsIEpTT04uc3RyaW5naWZ5KHBrZywgbnVsbCwgMikpO1xuICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3IgZml4aW5nIHBhY2thZ2UuanNvbjogJHtlfWApO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZVBhY2thZ2VTY3JpcHMoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG9yaWdpbmFsUGtnID0gSlNPTi5wYXJzZShcbiAgICAgICAgYXdhaXQgSHR0cENsaWVudC5kb3dubG9hZEZpbGUoYCR7YmFzZVVybH0vcGFja2FnZS5qc29uYClcbiAgICAgICk7XG4gICAgICBjb25zdCB7IHNjcmlwdHMgfSA9IG9yaWdpbmFsUGtnO1xuXG4gICAgICBjb25zdCBwa2c6IHR5cGVvZiBvcmlnaW5hbFBrZyA9IGdldFBhY2thZ2UoKSBhcyB7XG4gICAgICAgIHNjcmlwdHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gICAgICB9O1xuICAgICAgT2JqZWN0LmtleXMocGtnLnNjcmlwdHMpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICBpZiAoa2V5IGluIHNjcmlwdHMpIHtcbiAgICAgICAgICBjb25zdCByZXBsYWNlZCA9IHBhdGNoU3RyaW5nKHNjcmlwdHNba2V5XSwgdGhpcy5yZXBsYWNlbWVudHMpO1xuICAgICAgICAgIGlmIChyZXBsYWNlZCAhPT0gc2NyaXB0c1trZXldKSB7XG4gICAgICAgICAgICBwa2cuc2NyaXB0c1trZXldID0gcmVwbGFjZWQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgcGtnW1wiZXhwb3J0c1wiXVtcInJlcXVpcmVcIl0gPSBvcmlnaW5hbFBrZ1tcImV4cG9ydHNcIl1bXCJyZXF1aXJlXCJdO1xuICAgICAgcGtnW1wiZXhwb3J0c1wiXVtcImltcG9ydFwiXSA9IG9yaWdpbmFsUGtnW1wiZXhwb3J0c1wiXVtcImltcG9ydFwiXTtcbiAgICAgIHBrZ1tcInR5cGVzXCJdID0gb3JpZ2luYWxQa2dbXCJ0eXBlc1wiXTtcblxuICAgICAgZnMud3JpdGVGaWxlU3luYyhcInBhY2thZ2UuanNvblwiLCBKU09OLnN0cmluZ2lmeShwa2csIG51bGwsIDIpKTtcbiAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yIGZpeGluZyBwYWNrYWdlLmpzb24gc2NyaXB0czogJHtlfWApO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZVRva2VuRmlsZXMoKSB7XG4gICAgY29uc3QgbG9nID0gdGhpcy5sb2cuZm9yKHRoaXMuY3JlYXRlVG9rZW5GaWxlcyk7XG4gICAgY29uc3QgZ2l0VG9rZW4gPSBhd2FpdCBVc2VySW5wdXQuaW5zaXN0Rm9yVGV4dChcbiAgICAgIFwidG9rZW5cIixcbiAgICAgIFwicGxlYXNlIGlucHV0IHlvdXIgZ2l0aHViIHRva2VuXCIsXG4gICAgICAocmVzOiBzdHJpbmcpID0+IHtcbiAgICAgICAgcmV0dXJuICEhcmVzLm1hdGNoKC9eZ2hwX1swLTlhLXpBLVpdezM2fSQvZyk7XG4gICAgICB9XG4gICAgKTtcbiAgICBPYmplY3QudmFsdWVzKFRva2VucykuZm9yRWFjaCgodG9rZW4pID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGxldCBzdGF0dXM7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgc3RhdHVzID0gZnMuZXhpc3RzU3luYyh0b2tlbik7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgICAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICAgICAgbG9nLmluZm8oYFRva2VuIGZpbGUgJHt0b2tlbn0gbm90IGZvdW5kLiBDcmVhdGluZyBhIG5ldyBvbmUuLi5gKTtcbiAgICAgICAgICBmcy53cml0ZUZpbGVTeW5jKHRva2VuLCB0b2tlbiA9PT0gXCIudG9rZW5cIiA/IGdpdFRva2VuIDogXCJcIik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghc3RhdHVzKSB7XG4gICAgICAgICAgZnMud3JpdGVGaWxlU3luYyh0b2tlbiwgdG9rZW4gPT09IFwiLnRva2VuXCIgPyBnaXRUb2tlbiA6IFwiXCIpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3IgY3JlYXRpbmcgdG9rZW4gZmlsZSAke3Rva2VufTogJHtlfWApO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZ2V0T3JnKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3Qgb3JnID0gYXdhaXQgVXNlcklucHV0LmFza1RleHQoXG4gICAgICBcIk9yZ2FuaXphdGlvblwiLFxuICAgICAgXCJFbnRlciB0aGUgb3JnYW5pemF0aW9uIG5hbWUgKHdpbGwgYmUgdXNlZCB0byBzY29wZSB5b3VyIG5wbSBwcm9qZWN0LiBsZWF2ZSBibGFuayB0byBjcmVhdGUgYSB1bnNjb3BlZCBwcm9qZWN0KTpcIlxuICAgICk7XG4gICAgY29uc3QgY29uZmlybWF0aW9uID0gYXdhaXQgVXNlcklucHV0LmFza0NvbmZpcm1hdGlvbihcbiAgICAgIFwiQ29uZmlybSBvcmdhbml6YXRpb25cIixcbiAgICAgIFwiSXMgdGhpcyBvcmdhbml6YXRpb24gY29ycmVjdD9cIixcbiAgICAgIHRydWVcbiAgICApO1xuICAgIGlmICghY29uZmlybWF0aW9uKSByZXR1cm4gdGhpcy5nZXRPcmcoKTtcblxuICAgIHJldHVybiBvcmc7XG4gIH1cblxuICBhc3luYyBhdWRpdEZpeCgpIHtcbiAgICByZXR1cm4gYXdhaXQgcnVuQ29tbWFuZChcIm5wbSBhdWRpdCBmaXggLS1mb3JjZVwiKS5wcm9taXNlO1xuICB9XG5cbiAgcGF0Y2hGaWxlcygpIHtcbiAgICBjb25zdCBmaWxlcyA9IFtcbiAgICAgIC4uLmZzXG4gICAgICAgIC5yZWFkZGlyU3luYyhwYXRoLmpvaW4ocHJvY2Vzcy5jd2QoKSwgXCJzcmNcIiksIHtcbiAgICAgICAgICByZWN1cnNpdmU6IHRydWUsXG4gICAgICAgICAgd2l0aEZpbGVUeXBlczogdHJ1ZSxcbiAgICAgICAgfSlcbiAgICAgICAgLmZpbHRlcigoZW50cnkpID0+IGVudHJ5LmlzRmlsZSgpKVxuICAgICAgICAubWFwKChlbnRyeSkgPT4gcGF0aC5qb2luKGVudHJ5LnBhcmVudFBhdGgsIGVudHJ5Lm5hbWUpKSxcbiAgICAgIC4uLmZzXG4gICAgICAgIC5yZWFkZGlyU3luYyhwYXRoLmpvaW4ocHJvY2Vzcy5jd2QoKSwgXCJ3b3JrZG9jc1wiKSwge1xuICAgICAgICAgIHJlY3Vyc2l2ZTogdHJ1ZSxcbiAgICAgICAgICB3aXRoRmlsZVR5cGVzOiB0cnVlLFxuICAgICAgICB9KVxuICAgICAgICAuZmlsdGVyKChlbnRyeSkgPT4gZW50cnkuaXNGaWxlKCkgJiYgZW50cnkubmFtZS5lbmRzV2l0aChcIi5tZFwiKSlcbiAgICAgICAgLm1hcCgoZW50cnkpID0+IHBhdGguam9pbihlbnRyeS5wYXJlbnRQYXRoLCBlbnRyeS5uYW1lKSksXG4gICAgICBwYXRoLmpvaW4ocHJvY2Vzcy5jd2QoKSwgXCIuZ2l0bGFiLWNpLnltbFwiKSxcbiAgICAgIHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCBcIndvcmtkb2NzXCIsIFwianNkb2NzLmpzb25cIiksXG4gICAgXTtcblxuICAgIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xuICAgICAgcGF0Y2hGaWxlKGZpbGUgYXMgc3RyaW5nLCB0aGlzLnJlcGxhY2VtZW50cyk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgdXBkYXRlRGVwZW5kZW5jaWVzKCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBvcmlnaW5hbFBrZyA9IEpTT04ucGFyc2UoXG4gICAgICAgIGF3YWl0IEh0dHBDbGllbnQuZG93bmxvYWRGaWxlKGAke2Jhc2VVcmx9L3BhY2thZ2UuanNvbmApXG4gICAgICApO1xuICAgICAgY29uc3QgeyBkZXZEZXBlbmRlbmNpZXMgfSA9IG9yaWdpbmFsUGtnO1xuXG4gICAgICBjb25zdCBwa2c6IHR5cGVvZiBvcmlnaW5hbFBrZyA9IGdldFBhY2thZ2UoKSBhcyB7XG4gICAgICAgIHNjcmlwdHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gICAgICB9O1xuICAgICAgT2JqZWN0LmtleXMocGtnLnNjcmlwdHMpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICBpZiAoa2V5IGluIGRldkRlcGVuZGVuY2llcykge1xuICAgICAgICAgIGNvbnN0IHJlcGxhY2VkID0gZGV2RGVwZW5kZW5jaWVzW2tleV07XG4gICAgICAgICAgaWYgKHJlcGxhY2VkICE9PSBkZXZEZXBlbmRlbmNpZXNba2V5XSkge1xuICAgICAgICAgICAgKHBrZyBhcyBhbnkpW1wiZGV2RGVwZW5kZW5jaWVzXCJdID1cbiAgICAgICAgICAgICAgKHBrZyBhcyBhbnkpW1wiZGV2RGVwZW5kZW5jaWVzXCJdIHx8IHt9O1xuICAgICAgICAgICAgKHBrZyBhcyBhbnkpW1wiZGV2RGVwZW5kZW5jaWVzXCJdW2tleV0gPSByZXBsYWNlZDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBmcy53cml0ZUZpbGVTeW5jKFwicGFja2FnZS5qc29uXCIsIEpTT04uc3RyaW5naWZ5KHBrZywgbnVsbCwgMikpO1xuICAgICAgYXdhaXQgcnVuQ29tbWFuZChcIm5wbSBpbnN0YWxsXCIpLnByb21pc2U7XG4gICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciBmaXhpbmcgcGFja2FnZS5qc29uIGRlcGVuZGVuY2llczogJHtlfWApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUnVucyB0aGUgdGVtcGxhdGUgc3luY2hyb25pemF0aW9uIHByb2Nlc3MuXG4gICAqIEBzdW1tYXJ5IFRoaXMgbWV0aG9kIG9yY2hlc3RyYXRlcyB0aGUgZG93bmxvYWRpbmcgb2YgdmFyaW91cyBwcm9qZWN0IGNvbXBvbmVudHMgYmFzZWQgb24gdGhlIHByb3ZpZGVkIGFyZ3VtZW50cy5cbiAgICogQHBhcmFtIHtQYXJzZUFyZ3NSZXN1bHR9IGFyZ3MgLSBUaGUgcGFyc2VkIGNvbW1hbmQtbGluZSBhcmd1bWVudHNcbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqXG4gICAqIEBtZXJtYWlkXG4gICAqIHNlcXVlbmNlRGlhZ3JhbVxuICAgKiAgIHBhcnRpY2lwYW50IFQgYXMgVGVtcGxhdGVTeW5jXG4gICAqICAgcGFydGljaXBhbnQgTCBhcyBnZXRMaWNlbnNlXG4gICAqICAgcGFydGljaXBhbnQgSSBhcyBnZXRJZGVcbiAgICogICBwYXJ0aWNpcGFudCBTIGFzIGdldFNjcmlwdHNcbiAgICogICBwYXJ0aWNpcGFudCBTdCBhcyBnZXRTdHlsZXNcbiAgICogICBwYXJ0aWNpcGFudCBEIGFzIGdldERvY3NcbiAgICogICBwYXJ0aWNpcGFudCBXIGFzIGdldFdvcmtmbG93c1xuICAgKiAgIHBhcnRpY2lwYW50IFRlIGFzIGdldFRlbXBsYXRlc1xuICAgKiAgIFQtPj5UOiBQYXJzZSBhcmd1bWVudHNcbiAgICogICBhbHQgYWxsIGZsYWcgaXMgdHJ1ZVxuICAgKiAgICAgVC0+PlQ6IFNldCBhbGwgY29tcG9uZW50IGZsYWdzIHRvIHRydWVcbiAgICogICBlbmRcbiAgICogICBhbHQgbGljZW5zZSBpcyBzcGVjaWZpZWRcbiAgICogICAgIFQtPj5MOiBnZXRMaWNlbnNlKGxpY2Vuc2UpXG4gICAqICAgZW5kXG4gICAqICAgYWx0IGlkZSBmbGFnIGlzIHRydWVcbiAgICogICAgIFQtPj5JOiBnZXRJZGUoKVxuICAgKiAgIGVuZFxuICAgKiAgIGFsdCBzY3JpcHRzIGZsYWcgaXMgdHJ1ZVxuICAgKiAgICAgVC0+PlM6IGdldFNjcmlwdHMoKVxuICAgKiAgIGVuZFxuICAgKiAgIGFsdCBzdHlsZXMgZmxhZyBpcyB0cnVlXG4gICAqICAgICBULT4+U3Q6IGdldFN0eWxlcygpXG4gICAqICAgZW5kXG4gICAqICAgYWx0IGRvY3MgZmxhZyBpcyB0cnVlXG4gICAqICAgICBULT4+RDogZ2V0RG9jcygpXG4gICAqICAgZW5kXG4gICAqICAgYWx0IHdvcmtmbG93cyBmbGFnIGlzIHRydWVcbiAgICogICAgIFQtPj5XOiBnZXRXb3JrZmxvd3MoKVxuICAgKiAgIGVuZFxuICAgKiAgIGFsdCB0ZW1wbGF0ZXMgZmxhZyBpcyB0cnVlXG4gICAqICAgICBULT4+VGU6IGdldFRlbXBsYXRlcygpXG4gICAqICAgZW5kXG4gICAqL1xuICBhc3luYyBydW4oXG4gICAgYXJnczogTG9nZ2luZ0NvbmZpZyAmXG4gICAgICB0eXBlb2YgRGVmYXVsdENvbW1hbmRWYWx1ZXMgJiB7IFtrIGluIGtleW9mIHR5cGVvZiBhcmd6el06IHVua25vd24gfVxuICApIHtcbiAgICBsZXQgeyBsaWNlbnNlIH0gPSBhcmdzO1xuICAgIGNvbnN0IHsgYm9vdCB9ID0gYXJncztcbiAgICBsZXQge1xuICAgICAgYWxsLFxuICAgICAgc2NyaXB0cyxcbiAgICAgIHN0eWxlcyxcbiAgICAgIGRvY3MsXG4gICAgICBpZGUsXG4gICAgICB3b3JrZmxvd3MsXG4gICAgICB0ZW1wbGF0ZXMsXG4gICAgICBkb2NrZXIsXG4gICAgICB0eXBlc2NyaXB0LFxuICAgICAgZGVwZW5kZW5jaWVzLFxuICAgICAgdGVzdHMsXG4gICAgICBhdXRvbWF0aW9uLFxuICAgICAgcGtnLFxuICAgIH0gPSBhcmdzO1xuICAgIGlmIChcbiAgICAgIHNjcmlwdHMgfHxcbiAgICAgIHN0eWxlcyB8fFxuICAgICAgZG9jcyB8fFxuICAgICAgaWRlIHx8XG4gICAgICB3b3JrZmxvd3MgfHxcbiAgICAgIHRlbXBsYXRlcyB8fFxuICAgICAgZG9ja2VyIHx8XG4gICAgICB0eXBlc2NyaXB0IHx8XG4gICAgICBhdXRvbWF0aW9uIHx8XG4gICAgICBkZXBlbmRlbmNpZXMgfHxcbiAgICAgIHRlc3RzIHx8XG4gICAgICBwa2dcbiAgICApXG4gICAgICBhbGwgPSBmYWxzZTtcblxuICAgIGlmIChib290KSB7XG4gICAgICBjb25zdCBvcmcgPSBhd2FpdCB0aGlzLmdldE9yZygpO1xuICAgICAgY29uc3QgbmFtZSA9IGF3YWl0IFVzZXJJbnB1dC5pbnNpc3RGb3JUZXh0KFxuICAgICAgICBcIlByb2plY3QgbmFtZVwiLFxuICAgICAgICBcIkVudGVyIHRoZSBwcm9qZWN0IG5hbWU6XCIsXG4gICAgICAgIChyZXM6IHN0cmluZykgPT4gcmVzLmxlbmd0aCA+IDFcbiAgICAgICk7XG4gICAgICBjb25zdCBhdXRob3IgPSBhd2FpdCBVc2VySW5wdXQuaW5zaXN0Rm9yVGV4dChcbiAgICAgICAgXCJBdXRob3JcIixcbiAgICAgICAgXCJFbnRlciB0aGUgYXV0aG9yIG5hbWU6XCIsXG4gICAgICAgIChyZXM6IHN0cmluZykgPT4gcmVzLmxlbmd0aCA+IDFcbiAgICAgICk7XG4gICAgICBjb25zdCBwa2dOYW1lID0gb3JnID8gYEAke29yZ30vJHtuYW1lfWAgOiBuYW1lO1xuXG4gICAgICBhd2FpdCB0aGlzLmluaXRQYWNrYWdlKHBrZ05hbWUsIGF1dGhvciwgbGljZW5zZSBhcyBzdHJpbmcpO1xuICAgICAgYXdhaXQgdGhpcy5jcmVhdGVUb2tlbkZpbGVzKCk7XG4gICAgICBhd2FpdCB0aGlzLmF1ZGl0Rml4KCk7XG4gICAgICB0aGlzLnBhdGNoRmlsZXMoKTtcbiAgICB9XG5cbiAgICBpZiAoYWxsKSB7XG4gICAgICBzY3JpcHRzID0gZmFsc2U7XG4gICAgICBzdHlsZXMgPSB0cnVlO1xuICAgICAgZG9jcyA9IHRydWU7XG4gICAgICBpZGUgPSB0cnVlO1xuICAgICAgd29ya2Zsb3dzID0gdHJ1ZTtcbiAgICAgIHRlbXBsYXRlcyA9IHRydWU7XG4gICAgICBkb2NrZXIgPSB0cnVlO1xuICAgICAgdHlwZXNjcmlwdCA9IHRydWU7XG4gICAgICBwa2cgPSB0cnVlO1xuICAgICAgZGVwZW5kZW5jaWVzID0gdHJ1ZTtcbiAgICAgIHRlc3RzID0gdHJ1ZTtcbiAgICAgIGF1dG9tYXRpb24gPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHNjcmlwdHMgPT09IFwidW5kZWZpbmVkXCIpXG4gICAgICBzY3JpcHRzID0gYXdhaXQgVXNlcklucHV0LmFza0NvbmZpcm1hdGlvbihcbiAgICAgICAgXCJzY3JpcHRzXCIsXG4gICAgICAgIFwiRG8geW91IHdhbnQgdG8gZ2V0IHNjcmlwdHM/XCIsXG4gICAgICAgIHRydWVcbiAgICAgICk7XG5cbiAgICBpZiAoc2NyaXB0cykgYXdhaXQgdGhpcy5nZXRTY3JpcHRzKCk7XG5cbiAgICB0aGlzLmxvYWRWYWx1ZXNGcm9tUGFja2FnZSgpO1xuICAgIGlmICghYWxsICYmIHR5cGVvZiBsaWNlbnNlID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICBjb25zdCBjb25maXJtYXRpb24gPSBhd2FpdCBVc2VySW5wdXQuYXNrQ29uZmlybWF0aW9uKFxuICAgICAgICBcImxpY2Vuc2VcIixcbiAgICAgICAgXCJEbyB5b3Ugd2FudCB0byBzZXQgYSBsaWNlbnNlP1wiLFxuICAgICAgICB0cnVlXG4gICAgICApO1xuICAgICAgaWYgKGNvbmZpcm1hdGlvbilcbiAgICAgICAgbGljZW5zZSA9IGF3YWl0IFVzZXJJbnB1dC5pbnNpc3RGb3JUZXh0KFxuICAgICAgICAgIFwibGljZW5zZVwiLFxuICAgICAgICAgIFwiRW50ZXIgdGhlIGRlc2lyZWQgTGljZW5zZSAoTUlUfEdQTHxBcGFjaGV8TEdQTHxBR1BMKTpcIixcbiAgICAgICAgICAodmFsKSA9PiAhIXZhbCAmJiAhIXZhbC5tYXRjaCgvXihNSVR8R1BMfEFwYWNoZXxMR1BMfEFHUEwpJC9nKVxuICAgICAgICApO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGxpY2Vuc2UgIT09IFwidW5kZWZpbmVkXCIpXG4gICAgICBhd2FpdCB0aGlzLmdldExpY2Vuc2UoXG4gICAgICAgIGxpY2Vuc2UgYXMgXCJNSVRcIiB8IFwiR1BMXCIgfCBcIkFwYWNoZVwiIHwgXCJMR1BMXCIgfCBcIkFHUExcIlxuICAgICAgKTtcblxuICAgIGlmICh0eXBlb2YgaWRlID09PSBcInVuZGVmaW5lZFwiKVxuICAgICAgaWRlID0gYXdhaXQgVXNlcklucHV0LmFza0NvbmZpcm1hdGlvbihcbiAgICAgICAgXCJpZGVcIixcbiAgICAgICAgXCJEbyB5b3Ugd2FudCB0byBnZXQgaWRlIGNvbmZpZ3M/XCIsXG4gICAgICAgIHRydWVcbiAgICAgICk7XG5cbiAgICBpZiAoaWRlKSBhd2FpdCB0aGlzLmdldElkZSgpO1xuXG4gICAgaWYgKHR5cGVvZiB0eXBlc2NyaXB0ID09PSBcInVuZGVmaW5lZFwiKVxuICAgICAgdHlwZXNjcmlwdCA9IGF3YWl0IFVzZXJJbnB1dC5hc2tDb25maXJtYXRpb24oXG4gICAgICAgIFwidHlwZXNjcmlwdFwiLFxuICAgICAgICBcIkRvIHlvdSB3YW50IHRvIGdldCB0eXBlc2NyaXB0IGNvbmZpZ3M/XCIsXG4gICAgICAgIHRydWVcbiAgICAgICk7XG4gICAgaWYgKHR5cGVzY3JpcHQpIGF3YWl0IHRoaXMuZ2V0VHlwZXNjcmlwdCgpO1xuXG4gICAgaWYgKHR5cGVvZiBkb2NrZXIgPT09IFwidW5kZWZpbmVkXCIpXG4gICAgICBkb2NrZXIgPSBhd2FpdCBVc2VySW5wdXQuYXNrQ29uZmlybWF0aW9uKFxuICAgICAgICBcImRvY2tlclwiLFxuICAgICAgICBcIkRvIHlvdSB3YW50IHRvIGdldCBkb2NrZXIgY29uZmlncz9cIixcbiAgICAgICAgdHJ1ZVxuICAgICAgKTtcblxuICAgIGlmIChkb2NrZXIpIGF3YWl0IHRoaXMuZ2V0RG9ja2VyKCk7XG4gICAgaWYgKHR5cGVvZiBhdXRvbWF0aW9uID09PSBcInVuZGVmaW5lZFwiKVxuICAgICAgYXV0b21hdGlvbiA9IGF3YWl0IFVzZXJJbnB1dC5hc2tDb25maXJtYXRpb24oXG4gICAgICAgIFwiYXV0b21hdGlvblwiLFxuICAgICAgICBcIkRvIHlvdSB3YW50IHRvIGdldCBhdXRvbWF0aW9uIGNvbmZpZ3M/XCIsXG4gICAgICAgIHRydWVcbiAgICAgICk7XG4gICAgaWYgKGF1dG9tYXRpb24pIGF3YWl0IHRoaXMuZ2V0QXV0b21hdGlvbigpO1xuXG4gICAgaWYgKHR5cGVvZiBzdHlsZXMgPT09IFwidW5kZWZpbmVkXCIpXG4gICAgICBzdHlsZXMgPSBhd2FpdCBVc2VySW5wdXQuYXNrQ29uZmlybWF0aW9uKFxuICAgICAgICBcInN0eWxlc1wiLFxuICAgICAgICBcIkRvIHlvdSB3YW50IHRvIGdldCBzdHlsZXM/XCIsXG4gICAgICAgIHRydWVcbiAgICAgICk7XG4gICAgaWYgKHN0eWxlcykgYXdhaXQgdGhpcy5nZXRTdHlsZXMoKTtcblxuICAgIGlmICh0eXBlb2YgZG9jcyA9PT0gXCJ1bmRlZmluZWRcIilcbiAgICAgIGRvY3MgPSBhd2FpdCBVc2VySW5wdXQuYXNrQ29uZmlybWF0aW9uKFxuICAgICAgICBcImRvY3NcIixcbiAgICAgICAgXCJEbyB5b3Ugd2FudCB0byBnZXQgZG9jcz9cIixcbiAgICAgICAgdHJ1ZVxuICAgICAgKTtcbiAgICBpZiAoZG9jcykgYXdhaXQgdGhpcy5nZXREb2NzKCk7XG4gICAgaWYgKHR5cGVvZiB3b3JrZmxvd3MgPT09IFwidW5kZWZpbmVkXCIpXG4gICAgICB3b3JrZmxvd3MgPSBhd2FpdCBVc2VySW5wdXQuYXNrQ29uZmlybWF0aW9uKFxuICAgICAgICBcIndvcmtmbG93c1wiLFxuICAgICAgICBcIkRvIHlvdSB3YW50IHRvIGdldCB3b3JrZmxvd3M/XCIsXG4gICAgICAgIHRydWVcbiAgICAgICk7XG4gICAgaWYgKHdvcmtmbG93cykgYXdhaXQgdGhpcy5nZXRXb3JrZmxvd3MoKTtcbiAgICBpZiAodHlwZW9mIHRlbXBsYXRlcyA9PT0gXCJ1bmRlZmluZWRcIilcbiAgICAgIHRlbXBsYXRlcyA9IGF3YWl0IFVzZXJJbnB1dC5hc2tDb25maXJtYXRpb24oXG4gICAgICAgIFwidGVtcGxhdGVzXCIsXG4gICAgICAgIFwiRG8geW91IHdhbnQgdG8gZ2V0IHRlbXBsYXRlcz9cIixcbiAgICAgICAgdHJ1ZVxuICAgICAgKTtcbiAgICBpZiAodGVtcGxhdGVzKSBhd2FpdCB0aGlzLmdldFRlbXBsYXRlcygpO1xuICAgIGlmICh0eXBlb2YgcGtnID09PSBcInVuZGVmaW5lZFwiKVxuICAgICAgcGtnID0gYXdhaXQgVXNlcklucHV0LmFza0NvbmZpcm1hdGlvbihcbiAgICAgICAgXCJwa2dcIixcbiAgICAgICAgXCJEbyB5b3Ugd2FudCB0byB1cGRhdGUgeW91ciBwYWNrYWdlLmpzb24gc2NyaXB0cz9cIixcbiAgICAgICAgdHJ1ZVxuICAgICAgKTtcbiAgICBpZiAocGtnKSBhd2FpdCB0aGlzLnVwZGF0ZVBhY2thZ2VTY3JpcHMoKTtcblxuICAgIGlmICh0eXBlb2YgdGVzdHMgPT09IFwidW5kZWZpbmVkXCIpXG4gICAgICB0ZXN0cyA9IGF3YWl0IFVzZXJJbnB1dC5hc2tDb25maXJtYXRpb24oXG4gICAgICAgIFwicGtnXCIsXG4gICAgICAgIFwiRG8geW91IHdhbnQgdG8gdXBkYXRlIHlvdXIgdGVzdCBjb25maWdzP1wiLFxuICAgICAgICB0cnVlXG4gICAgICApO1xuICAgIGlmICh0ZXN0cykgYXdhaXQgdGhpcy5nZXRUZXN0cygpO1xuXG4gICAgaWYgKHR5cGVvZiBkZXBlbmRlbmNpZXMgPT09IFwidW5kZWZpbmVkXCIpXG4gICAgICBkZXBlbmRlbmNpZXMgPSBhd2FpdCBVc2VySW5wdXQuYXNrQ29uZmlybWF0aW9uKFxuICAgICAgICBcInBrZ1wiLFxuICAgICAgICBcIkRvIHlvdSB3YW50IHRvIHVwZGF0ZSBkZXYgZGVwZW5kZW5jaWVzP1wiLFxuICAgICAgICB0cnVlXG4gICAgICApO1xuICAgIGlmIChkZXBlbmRlbmNpZXMpIGF3YWl0IHRoaXMudXBkYXRlRGVwZW5kZW5jaWVzKCk7XG4gIH1cbn1cbiIsImltcG9ydCB7IFRlbXBsYXRlU3luYyB9IGZyb20gXCIuLi9jbGkvY29tbWFuZHNcIjtcblxubmV3IFRlbXBsYXRlU3luYygpXG4gIC5leGVjdXRlKClcbiAgLnRoZW4oKCkgPT5cbiAgICBUZW1wbGF0ZVN5bmMubG9nLmluZm8oXG4gICAgICBcIlRlbXBsYXRlIHVwZGF0ZWQgc3VjY2Vzc2Z1bGx5LiBQbGVhc2UgY29uZmlybSBhbGwgY2hhbmdlcyBiZWZvcmUgY29tbWl0aW5nXCJcbiAgICApXG4gIClcbiAgLmNhdGNoKChlOiB1bmtub3duKSA9PiB7XG4gICAgVGVtcGxhdGVTeW5jLmxvZy5lcnJvcihgRXJyb3IgcHJlcGFyaW5nIHRlbXBsYXRlOiAke2V9YCk7XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9KTtcbiJdLCJuYW1lcyI6WyJhY3Rpb24iLCJzdHJpcCIsInJlcXVpcmUkJDAiLCJyZXF1aXJlJCQxIiwiY2xlYXIiLCJmaWd1cmVzXzEiLCJzdHlsZSIsImxpbmVzIiwid3JhcCIsImVudHJpZXNUb0Rpc3BsYXkiLCJ1dGlsIiwicmVxdWlyZSQkMiIsInJlcXVpcmUkJDMiLCJyZXF1aXJlJCQ0IiwicmVxdWlyZSQkNSIsInJlcXVpcmUkJDYiLCJyZXF1aXJlJCQ3IiwicHJvbXB0IiwidGV4dCIsInNlbGVjdCIsInRvZ2dsZSIsImRhdGVwYXJ0IiwibWVyaWRpZW0iLCJkYXkiLCJob3VycyIsIm1pbGxpc2Vjb25kcyIsIm1pbnV0ZXMiLCJtb250aCIsInNlY29uZHMiLCJ5ZWFyIiwiZGF0ZXBhcnRzIiwicmVxdWlyZSQkOCIsImRhdGUiLCJudW1iZXIiLCJtdWx0aXNlbGVjdCIsImF1dG9jb21wbGV0ZSIsImF1dG9jb21wbGV0ZU11bHRpc2VsZWN0IiwiY29uZmlybSIsImVsZW1lbnRzIiwicHJvbXB0cyIsInBhcnNlQXJncyIsInNwYXduIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUEsQ0FBQUEsUUFBYyxHQUFHLENBQUMsR0FBRyxFQUFFLFFBQVEsS0FBSztHQUNsQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUU7O0FBRXpDLEdBQUUsSUFBSSxHQUFHLENBQUMsSUFBSSxFQUFFO0tBQ1osSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLEdBQUcsRUFBRSxPQUFPLE9BQU87S0FDcEMsSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLEdBQUcsRUFBRSxPQUFPLE9BQU87S0FDcEMsSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLEdBQUcsRUFBRSxPQUFPLE9BQU87S0FDcEMsSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLEdBQUcsRUFBRSxPQUFPLE1BQU07S0FDbkMsSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLEdBQUcsRUFBRSxPQUFPLE9BQU87QUFDeEM7O0dBRUUsSUFBSSxRQUFRLEVBQUU7S0FDWixJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssR0FBRyxFQUFFLE9BQU8sTUFBTTtLQUNuQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssR0FBRyxFQUFFLE9BQU8sSUFBSTtBQUNyQzs7R0FFRSxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFLE9BQU8sUUFBUTtHQUMxQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFLE9BQU8sUUFBUSxDQUFDOztHQUUxQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssV0FBVyxFQUFFLE9BQU8sUUFBUTtHQUM3QyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFLE9BQU8sZUFBZTtHQUNqRCxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFLE9BQU8sT0FBTztHQUN4QyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFLE9BQU8sTUFBTTtHQUN4QyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssS0FBSyxFQUFFLE9BQU8sTUFBTTtHQUNyQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssVUFBVSxFQUFFLE9BQU8sVUFBVTtHQUM5QyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFLE9BQU8sVUFBVSxDQUFDOztHQUU3QyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssTUFBTSxFQUFFLE9BQU8sTUFBTSxDQUFDOztHQUV2QyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssS0FBSyxFQUFFLE9BQU8sS0FBSztHQUNwQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssSUFBSSxFQUFFLE9BQU8sSUFBSTtHQUNsQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssTUFBTSxFQUFFLE9BQU8sTUFBTTtHQUN0QyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFLE9BQU8sT0FBTztHQUN4QyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssTUFBTSxFQUFFLE9BQU8sTUFBTTtBQUN4QyxHQUFFLE9BQU8sS0FBSztFQUNiOzs7Ozs7Ozs7OztBQ25DRCxDQUFjQyxPQUFBLEdBQUcsR0FBRyxJQUFJO0FBQ3hCLEdBQUUsTUFBTSxPQUFPLEdBQUcsQ0FBQyw4SEFBOEgsRUFBRSx3REFBd0QsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7R0FDcE4sTUFBTSxHQUFHLEdBQUcsSUFBSSxNQUFNLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQztBQUN0QyxHQUFFLE9BQU8sT0FBTyxHQUFHLEtBQUssUUFBUSxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUc7RUFDNUQ7Ozs7Ozs7Ozs7O0FDSkQsQ0FBQSxTQUFTLDBCQUEwQixDQUFDLENBQUMsRUFBRSxjQUFjLEVBQUUsRUFBRSxJQUFJLEVBQUUsR0FBRyxPQUFPLE1BQU0sS0FBSyxXQUFXLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsR0FBRywyQkFBMkIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLGNBQW1ELEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxNQUFNLElBQUksU0FBUyxDQUFDLHVJQUF1SSxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksZ0JBQWdCLEdBQUcsSUFBSSxFQUFFLE1BQU0sR0FBRyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxTQUFTLENBQUMsR0FBRyxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsU0FBUyxDQUFDLEdBQUcsRUFBRSxJQUFJLElBQUksR0FBRyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxFQUFFLENBQUMsTUFBTSxJQUFJLElBQUksRUFBRSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsSUFBSSxNQUFNLEVBQUUsTUFBTSxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQzs7Q0FFcCtCLFNBQVMsMkJBQTJCLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxFQUFFLE9BQU8saUJBQWlCLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxRQUFRLElBQUksQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxLQUFL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QUksQ0FBQyxXQUFXLEdBQUcsRUFBRTtLQUNyQixJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7QUFFOUssS0FBSSxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7T0FDZCxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMvSTs7QUFFQSxLQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNySjs7QUFFQTs7QUFFQSxDQUFB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LEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNuSCxLQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQzs7QUFFbkIsS0FBSSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEtBQUssR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7O0FBRWpRLEtBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO09BQ2QsSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDOUk7O0tBRUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElB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RTtBQUNaLEtBQUksSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDN0MsS0FBSSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQzFDLEtBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7S0FDN0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsTUFBTSxHQUFHLENBQUM7QUFDL0IsS0FBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7S0FDMUIsSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNqQjs7QUFFQSxHQUFFLE1BQU0sR0FBRztLQUNQLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsT0FBTyxJQUFJLENBQUMsSUFBSSxFQUFFO0FBQzdDLEtBQUksSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ2pELEtBQUksSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztLQUN0QyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUM3QixLQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztLQUMxQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQztLQUM3QixJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ2pCOztBQUVBLEdBQUUsYUFBYSxHQUFHO0FBQ2xCLEtBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLElB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ZUFBZSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsSUFBSSxHQUFHLElBQUksR0FBRyxFQUFFLEVBQUUsTUFBTSxDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsT0FBTyxHQUFHLENBQUM7O0FBRS9NLENBQUEsU0FBUywwQkFBMEIsQ0FBQyxDQUFDLEVBQUUsY0FBYyxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsT0FBTyxNQUFNLEtBQUssV0FBVyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLEdBQUcsMkJBQTJCLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxjQUFtRCxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxTQUFTLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsTUFBTSxJQUFJLFNBQVMsQ0FBQyx1SUFBdUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLGdCQUFnQixHQUFHLElBQUksRUFBRSxNQUFNLEdBQUcsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsU0FBUyxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxTQUFTLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsZ0JBQWdCLElBQUksRUFBRSxDQUFDLE1BQU0sSUFBSSxJQUFJLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLElBQUksTUFBTSxFQUFFLE1BQU0sR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUM7O0NBRXArQixTQUFTLDJCQUEyQixDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVEsRUFBRSxPQUFPLGlCQUFpQixDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FB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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDMVlBOzs7O0FBSUc7QUFDSCxNQUFNLE1BQU0sR0FBRztBQUNiLElBQUEsZ0JBQWdCO0FBQ2hCLElBQUEsZ0JBQWdCO0FBQ2hCLElBQUEsZ0JBQWdCO0FBQ2hCLElBQUEsZ0JBQWdCO0FBQ2hCLElBQUEsZ0JBQWdCO0FBQ2hCLElBQUEsZ0JBQWdCO0FBQ2hCLElBQUEsZ0JBQWdCO0FBQ2hCLElBQUEsZ0JBQWdCO0FBQ2hCLElBQUEsZ0JBQWdCO0NBQ2pCO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXdCRztBQUNHLFNB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WSxHQUFHLE1BQU0sU0FBUyxDQUFDLGVBQWUsQ0FDNUMsS0FBSyxFQUNMLHlDQUF5QyxFQUN6QyxJQUFJLENBQ0w7QUFDSCxRQUFBLElBQUksWUFBWTtBQUFFLFlBQUEsTUFBTSxJQUFJLENBQUMsa0JBQWtCLEVBQUU7O0FBRXBEOztBQ25wQkQsSUFBSSxZQUFZO0FBQ2IsS0FBQSxPQUFPO0FBQ1AsS0FBQSxJQUFJLENBQUMsTUFDSixZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FDbkIsNEVBQTRFLENBQzdFO0FBRUYsS0FBQSxLQUFLLENBQUMsQ0FBQyxDQUFVLEtBQUk7SUFDcEIsWUFBWSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBNkIsMEJBQUEsRUFBQSxDQUFDLENBQUUsQ0FBQSxDQUFDO0FBQ3hELElBQUEsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDakIsQ0FBQyxDQUFDOzsiLCJ4X2dvb2dsZV9pZ25vcmVMaXN0IjpbMCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwxOSwyMCwyMSwyMiwyMywyNCwyNSwyNiwyNywyOCwyOSwzMCwzMSwzMiwzMywzNCwzNSwzNiwzNywzOCwzOSw0MCw0MSw0Miw0Myw0NCw0NSw0Niw0Nyw0OCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw1OCw1OSw2MCw2MSw2Miw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3OV19
|
|
10467
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBkYXRlLXNjcmlwdHMuY2pzIiwic291cmNlcyI6WyIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9kaXN0L3V0aWwvYWN0aW9uLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvZGlzdC91dGlsL3N0cmlwLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvZGlzdC91dGlsL2NsZWFyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvZGlzdC91dGlsL2ZpZ3VyZXMuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9kaXN0L3V0aWwvc3R5bGUuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9kaXN0L3V0aWwvbGluZXMuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9kaXN0L3V0aWwvd3JhcC5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2Rpc3QvdXRpbC9lbnRyaWVzVG9EaXNwbGF5LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvZGlzdC91dGlsL2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvZGlzdC9lbGVtZW50cy9wcm9tcHQuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9kaXN0L2VsZW1lbnRzL3RleHQuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9kaXN0L2VsZW1lbnRzL3NlbGVjdC5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2Rpc3QvZWxlbWVudHMvdG9nZ2xlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvZGlzdC9kYXRlcGFydHMvZGF0ZXBhcnQuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9kaXN0L2RhdGVwYXJ0cy9tZXJpZGllbS5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2Rpc3QvZGF0ZXBhcnRzL2RheS5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2Rpc3QvZGF0ZXBhcnRzL2hvdXJzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvZGlzdC9kYXRlcGFydHMvbWlsbGlzZWNvbmRzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvZGlzdC9kYXRlcGFydHMvbWludXRlcy5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2Rpc3QvZGF0ZXBhcnRzL21vbnRoLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvZGlzdC9kYXRlcGFydHMvc2Vjb25kcy5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2Rpc3QvZGF0ZXBhcnRzL3llYXIuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9kaXN0L2RhdGVwYXJ0cy9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2Rpc3QvZWxlbWVudHMvZGF0ZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2Rpc3QvZWxlbWVudHMvbnVtYmVyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvZGlzdC9lbGVtZW50cy9tdWx0aXNlbGVjdC5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2Rpc3QvZWxlbWVudHMvYXV0b2NvbXBsZXRlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvZGlzdC9lbGVtZW50cy9hdXRvY29tcGxldGVNdWx0aXNlbGVjdC5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2Rpc3QvZWxlbWVudHMvY29uZmlybS5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2Rpc3QvZWxlbWVudHMvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9kaXN0L3Byb21wdHMuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9kaXN0L2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvbGliL3V0aWwvYWN0aW9uLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvbGliL3V0aWwvc3RyaXAuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9saWIvdXRpbC9jbGVhci5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2xpYi91dGlsL2ZpZ3VyZXMuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9saWIvdXRpbC9zdHlsZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2xpYi91dGlsL2xpbmVzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvbGliL3V0aWwvd3JhcC5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2xpYi91dGlsL2VudHJpZXNUb0Rpc3BsYXkuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9saWIvdXRpbC9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2xpYi9lbGVtZW50cy9wcm9tcHQuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9saWIvZWxlbWVudHMvdGV4dC5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2xpYi9lbGVtZW50cy9zZWxlY3QuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9saWIvZWxlbWVudHMvdG9nZ2xlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvbGliL2RhdGVwYXJ0cy9kYXRlcGFydC5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2xpYi9kYXRlcGFydHMvbWVyaWRpZW0uanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9saWIvZGF0ZXBhcnRzL2RheS5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2xpYi9kYXRlcGFydHMvaG91cnMuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9saWIvZGF0ZXBhcnRzL21pbGxpc2Vjb25kcy5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2xpYi9kYXRlcGFydHMvbWludXRlcy5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2xpYi9kYXRlcGFydHMvbW9udGguanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9saWIvZGF0ZXBhcnRzL3NlY29uZHMuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9saWIvZGF0ZXBhcnRzL3llYXIuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9saWIvZGF0ZXBhcnRzL2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvbGliL2VsZW1lbnRzL2RhdGUuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9saWIvZWxlbWVudHMvbnVtYmVyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvbGliL2VsZW1lbnRzL211bHRpc2VsZWN0LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvbGliL2VsZW1lbnRzL2F1dG9jb21wbGV0ZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2xpYi9lbGVtZW50cy9hdXRvY29tcGxldGVNdWx0aXNlbGVjdC5qcyIsIi4uL25vZGVfbW9kdWxlcy9wcm9tcHRzL2xpYi9lbGVtZW50cy9jb25maXJtLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvbGliL2VsZW1lbnRzL2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3Byb21wdHMvbGliL3Byb21wdHMuanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9saWIvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvcHJvbXB0cy9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9AZGVjYWYtdHMvbG9nZ2luZy9saWIvZXNtL2NvbnN0YW50cy5qcyIsIi4uL25vZGVfbW9kdWxlcy9zdHlsZWQtc3RyaW5nLWJ1aWxkZXIvbGliL2VzbS9jb25zdGFudHMuanMiLCIuLi9ub2RlX21vZHVsZXMvc3R5bGVkLXN0cmluZy1idWlsZGVyL2xpYi9lc20vY29sb3JzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3N0eWxlZC1zdHJpbmctYnVpbGRlci9saWIvZXNtL3N0cmluZ3MuanMiLCIuLi9ub2RlX21vZHVsZXMvQGRlY2FmLXRzL2xvZ2dpbmcvbGliL2VzbS9sb2dnaW5nLmpzIiwiLi4vc3JjL2lucHV0L2lucHV0LnRzIiwiLi4vc3JjL2NsaS9jb25zdGFudHMudHMiLCIuLi9zcmMvdXRpbHMvdGV4dC50cyIsIi4uL3NyYy91dGlscy9jb25zdGFudHMudHMiLCIuLi9zcmMvd3JpdGVycy9TdGFuZGFyZE91dHB1dFdyaXRlci50cyIsIi4uL3NyYy91dGlscy91dGlscy50cyIsIi4uL3NyYy91dGlscy9mcy50cyIsIi4uL3NyYy9vdXRwdXQvY29tbW9uLnRzIiwiLi4vc3JjL3V0aWxzL3dlYi50cyIsIi4uL25vZGVfbW9kdWxlcy90eXBlZC1vYmplY3QtYWNjdW11bGF0b3IvbGliL2VzbS9hY2N1bXVsYXRvci5qcyIsIi4uL3NyYy91dGlscy9lbnZpcm9ubWVudC50cyIsIi4uL3NyYy9jbGkvY29tbWFuZC50cyIsIi4uL3NyYy91dGlscy9odHRwLnRzIiwiLi4vc3JjL2NsaS9jb21tYW5kcy9idWlsZC1zY3JpcHRzLnRzIiwiLi4vc3JjL2NsaS9jb21tYW5kcy91cGRhdGUtc2NyaXB0cy50cyIsIi4uL3NyYy9iaW4vdXBkYXRlLXNjcmlwdHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IChrZXksIGlzU2VsZWN0KSA9PiB7XG4gIGlmIChrZXkubWV0YSAmJiBrZXkubmFtZSAhPT0gJ2VzY2FwZScpIHJldHVybjtcblxuICBpZiAoa2V5LmN0cmwpIHtcbiAgICBpZiAoa2V5Lm5hbWUgPT09ICdhJykgcmV0dXJuICdmaXJzdCc7XG4gICAgaWYgKGtleS5uYW1lID09PSAnYycpIHJldHVybiAnYWJvcnQnO1xuICAgIGlmIChrZXkubmFtZSA9PT0gJ2QnKSByZXR1cm4gJ2Fib3J0JztcbiAgICBpZiAoa2V5Lm5hbWUgPT09ICdlJykgcmV0dXJuICdsYXN0JztcbiAgICBpZiAoa2V5Lm5hbWUgPT09ICdnJykgcmV0dXJuICdyZXNldCc7XG4gIH1cblxuICBpZiAoaXNTZWxlY3QpIHtcbiAgICBpZiAoa2V5Lm5hbWUgPT09ICdqJykgcmV0dXJuICdkb3duJztcbiAgICBpZiAoa2V5Lm5hbWUgPT09ICdrJykgcmV0dXJuICd1cCc7XG4gIH1cblxuICBpZiAoa2V5Lm5hbWUgPT09ICdyZXR1cm4nKSByZXR1cm4gJ3N1Ym1pdCc7XG4gIGlmIChrZXkubmFtZSA9PT0gJ2VudGVyJykgcmV0dXJuICdzdWJtaXQnOyAvLyBjdHJsICsgSlxuXG4gIGlmIChrZXkubmFtZSA9PT0gJ2JhY2tzcGFjZScpIHJldHVybiAnZGVsZXRlJztcbiAgaWYgKGtleS5uYW1lID09PSAnZGVsZXRlJykgcmV0dXJuICdkZWxldGVGb3J3YXJkJztcbiAgaWYgKGtleS5uYW1lID09PSAnYWJvcnQnKSByZXR1cm4gJ2Fib3J0JztcbiAgaWYgKGtleS5uYW1lID09PSAnZXNjYXBlJykgcmV0dXJuICdleGl0JztcbiAgaWYgKGtleS5uYW1lID09PSAndGFiJykgcmV0dXJuICduZXh0JztcbiAgaWYgKGtleS5uYW1lID09PSAncGFnZWRvd24nKSByZXR1cm4gJ25leHRQYWdlJztcbiAgaWYgKGtleS5uYW1lID09PSAncGFnZXVwJykgcmV0dXJuICdwcmV2UGFnZSc7IC8vIFRPRE8gY3JlYXRlIGhvbWUoKSBpbiBwcm9tcHQgdHlwZXMgKGUuZy4gVGV4dFByb21wdClcblxuICBpZiAoa2V5Lm5hbWUgPT09ICdob21lJykgcmV0dXJuICdob21lJzsgLy8gVE9ETyBjcmVhdGUgZW5kKCkgaW4gcHJvbXB0IHR5cGVzIChlLmcuIFRleHRQcm9tcHQpXG5cbiAgaWYgKGtleS5uYW1lID09PSAnZW5kJykgcmV0dXJuICdlbmQnO1xuICBpZiAoa2V5Lm5hbWUgPT09ICd1cCcpIHJldHVybiAndXAnO1xuICBpZiAoa2V5Lm5hbWUgPT09ICdkb3duJykgcmV0dXJuICdkb3duJztcbiAgaWYgKGtleS5uYW1lID09PSAncmlnaHQnKSByZXR1cm4gJ3JpZ2h0JztcbiAgaWYgKGtleS5uYW1lID09PSAnbGVmdCcpIHJldHVybiAnbGVmdCc7XG4gIHJldHVybiBmYWxzZTtcbn07IiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHN0ciA9PiB7XG4gIGNvbnN0IHBhdHRlcm4gPSBbJ1tcXFxcdTAwMUJcXFxcdTAwOUJdW1tcXFxcXSgpIzs/XSooPzooPzooPzooPzo7Wy1hLXpBLVpcXFxcZFxcXFwvIyYuOj0/JUB+X10rKSp8W2EtekEtWlxcXFxkXSsoPzo7Wy1hLXpBLVpcXFxcZFxcXFwvIyYuOj0/JUB+X10qKSopP1xcXFx1MDAwNyknLCAnKD86KD86XFxcXGR7MSw0fSg/OjtcXFxcZHswLDR9KSopP1tcXFxcZEEtUFJaY2YtbnRxcnk9Pjx+XSkpJ10uam9pbignfCcpO1xuICBjb25zdCBSR1ggPSBuZXcgUmVnRXhwKHBhdHRlcm4sICdnJyk7XG4gIHJldHVybiB0eXBlb2Ygc3RyID09PSAnc3RyaW5nJyA/IHN0ci5yZXBsYWNlKFJHWCwgJycpIDogc3RyO1xufTsiLCIndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIF9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyKG8sIGFsbG93QXJyYXlMaWtlKSB7IHZhciBpdCA9IHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdIHx8IG9bXCJAQGl0ZXJhdG9yXCJdOyBpZiAoIWl0KSB7IGlmIChBcnJheS5pc0FycmF5KG8pIHx8IChpdCA9IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvKSkgfHwgYWxsb3dBcnJheUxpa2UgJiYgbyAmJiB0eXBlb2Ygby5sZW5ndGggPT09IFwibnVtYmVyXCIpIHsgaWYgKGl0KSBvID0gaXQ7IHZhciBpID0gMDsgdmFyIEYgPSBmdW5jdGlvbiBGKCkge307IHJldHVybiB7IHM6IEYsIG46IGZ1bmN0aW9uIG4oKSB7IGlmIChpID49IG8ubGVuZ3RoKSByZXR1cm4geyBkb25lOiB0cnVlIH07IHJldHVybiB7IGRvbmU6IGZhbHNlLCB2YWx1ZTogb1tpKytdIH07IH0sIGU6IGZ1bmN0aW9uIGUoX2UpIHsgdGhyb3cgX2U7IH0sIGY6IEYgfTsgfSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGl0ZXJhdGUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH0gdmFyIG5vcm1hbENvbXBsZXRpb24gPSB0cnVlLCBkaWRFcnIgPSBmYWxzZSwgZXJyOyByZXR1cm4geyBzOiBmdW5jdGlvbiBzKCkgeyBpdCA9IGl0LmNhbGwobyk7IH0sIG46IGZ1bmN0aW9uIG4oKSB7IHZhciBzdGVwID0gaXQubmV4dCgpOyBub3JtYWxDb21wbGV0aW9uID0gc3RlcC5kb25lOyByZXR1cm4gc3RlcDsgfSwgZTogZnVuY3Rpb24gZShfZTIpIHsgZGlkRXJyID0gdHJ1ZTsgZXJyID0gX2UyOyB9LCBmOiBmdW5jdGlvbiBmKCkgeyB0cnkgeyBpZiAoIW5vcm1hbENvbXBsZXRpb24gJiYgaXQucmV0dXJuICE9IG51bGwpIGl0LnJldHVybigpOyB9IGZpbmFsbHkgeyBpZiAoZGlkRXJyKSB0aHJvdyBlcnI7IH0gfSB9OyB9XG5cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHsgaWYgKCFvKSByZXR1cm47IGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTsgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTsgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7IGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikgeyBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSBhcnIyW2ldID0gYXJyW2ldOyByZXR1cm4gYXJyMjsgfVxuXG5jb25zdCBzdHJpcCA9IHJlcXVpcmUoJy4vc3RyaXAnKTtcblxuY29uc3QgX3JlcXVpcmUgPSByZXF1aXJlKCdzaXN0ZXJhbnNpJyksXG4gICAgICBlcmFzZSA9IF9yZXF1aXJlLmVyYXNlLFxuICAgICAgY3Vyc29yID0gX3JlcXVpcmUuY3Vyc29yO1xuXG5jb25zdCB3aWR0aCA9IHN0ciA9PiBbLi4uc3RyaXAoc3RyKV0ubGVuZ3RoO1xuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gcHJvbXB0XG4gKiBAcGFyYW0ge251bWJlcn0gcGVyTGluZVxuICovXG5cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAocHJvbXB0LCBwZXJMaW5lKSB7XG4gIGlmICghcGVyTGluZSkgcmV0dXJuIGVyYXNlLmxpbmUgKyBjdXJzb3IudG8oMCk7XG4gIGxldCByb3dzID0gMDtcbiAgY29uc3QgbGluZXMgPSBwcm9tcHQuc3BsaXQoL1xccj9cXG4vKTtcblxuICB2YXIgX2l0ZXJhdG9yID0gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIobGluZXMpLFxuICAgICAgX3N0ZXA7XG5cbiAgdHJ5IHtcbiAgICBmb3IgKF9pdGVyYXRvci5zKCk7ICEoX3N0ZXAgPSBfaXRlcmF0b3IubigpKS5kb25lOykge1xuICAgICAgbGV0IGxpbmUgPSBfc3RlcC52YWx1ZTtcbiAgICAgIHJvd3MgKz0gMSArIE1hdGguZmxvb3IoTWF0aC5tYXgod2lkdGgobGluZSkgLSAxLCAwKSAvIHBlckxpbmUpO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgX2l0ZXJhdG9yLmUoZXJyKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBfaXRlcmF0b3IuZigpO1xuICB9XG5cbiAgcmV0dXJuIGVyYXNlLmxpbmVzKHJvd3MpO1xufTsiLCIndXNlIHN0cmljdCc7XG5cbmNvbnN0IG1haW4gPSB7XG4gIGFycm93VXA6ICfihpEnLFxuICBhcnJvd0Rvd246ICfihpMnLFxuICBhcnJvd0xlZnQ6ICfihpAnLFxuICBhcnJvd1JpZ2h0OiAn4oaSJyxcbiAgcmFkaW9PbjogJ+KXiScsXG4gIHJhZGlvT2ZmOiAn4pevJyxcbiAgdGljazogJ+KclCcsXG4gIGNyb3NzOiAn4pyWJyxcbiAgZWxsaXBzaXM6ICfigKYnLFxuICBwb2ludGVyU21hbGw6ICfigLonLFxuICBsaW5lOiAn4pSAJyxcbiAgcG9pbnRlcjogJ+Kdrydcbn07XG5jb25zdCB3aW4gPSB7XG4gIGFycm93VXA6IG1haW4uYXJyb3dVcCxcbiAgYXJyb3dEb3duOiBtYWluLmFycm93RG93bixcbiAgYXJyb3dMZWZ0OiBtYWluLmFycm93TGVmdCxcbiAgYXJyb3dSaWdodDogbWFpbi5hcnJvd1JpZ2h0LFxuICByYWRpb09uOiAnKCopJyxcbiAgcmFkaW9PZmY6ICcoICknLFxuICB0aWNrOiAn4oiaJyxcbiAgY3Jvc3M6ICfDlycsXG4gIGVsbGlwc2lzOiAnLi4uJyxcbiAgcG9pbnRlclNtYWxsOiAnwrsnLFxuICBsaW5lOiAn4pSAJyxcbiAgcG9pbnRlcjogJz4nXG59O1xuY29uc3QgZmlndXJlcyA9IHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicgPyB3aW4gOiBtYWluO1xubW9kdWxlLmV4cG9ydHMgPSBmaWd1cmVzOyIsIid1c2Ugc3RyaWN0JztcblxuY29uc3QgYyA9IHJlcXVpcmUoJ2tsZXVyJyk7XG5cbmNvbnN0IGZpZ3VyZXMgPSByZXF1aXJlKCcuL2ZpZ3VyZXMnKTsgLy8gcmVuZGVyaW5nIHVzZXIgaW5wdXQuXG5cblxuY29uc3Qgc3R5bGVzID0gT2JqZWN0LmZyZWV6ZSh7XG4gIHBhc3N3b3JkOiB7XG4gICAgc2NhbGU6IDEsXG4gICAgcmVuZGVyOiBpbnB1dCA9PiAnKicucmVwZWF0KGlucHV0Lmxlbmd0aClcbiAgfSxcbiAgZW1vamk6IHtcbiAgICBzY2FsZTogMixcbiAgICByZW5kZXI6IGlucHV0ID0+ICfwn5iDJy5yZXBlYXQoaW5wdXQubGVuZ3RoKVxuICB9LFxuICBpbnZpc2libGU6IHtcbiAgICBzY2FsZTogMCxcbiAgICByZW5kZXI6IGlucHV0ID0+ICcnXG4gIH0sXG4gIGRlZmF1bHQ6IHtcbiAgICBzY2FsZTogMSxcbiAgICByZW5kZXI6IGlucHV0ID0+IGAke2lucHV0fWBcbiAgfVxufSk7XG5cbmNvbnN0IHJlbmRlciA9IHR5cGUgPT4gc3R5bGVzW3R5cGVdIHx8IHN0eWxlcy5kZWZhdWx0OyAvLyBpY29uIHRvIHNpZ25hbGl6ZSBhIHByb21wdC5cblxuXG5jb25zdCBzeW1ib2xzID0gT2JqZWN0LmZyZWV6ZSh7XG4gIGFib3J0ZWQ6IGMucmVkKGZpZ3VyZXMuY3Jvc3MpLFxuICBkb25lOiBjLmdyZWVuKGZpZ3VyZXMudGljayksXG4gIGV4aXRlZDogYy55ZWxsb3coZmlndXJlcy5jcm9zcyksXG4gIGRlZmF1bHQ6IGMuY3lhbignPycpXG59KTtcblxuY29uc3Qgc3ltYm9sID0gKGRvbmUsIGFib3J0ZWQsIGV4aXRlZCkgPT4gYWJvcnRlZCA/IHN5bWJvbHMuYWJvcnRlZCA6IGV4aXRlZCA/IHN5bWJvbHMuZXhpdGVkIDogZG9uZSA/IHN5bWJvbHMuZG9uZSA6IHN5bWJvbHMuZGVmYXVsdDsgLy8gYmV0d2VlbiB0aGUgcXVlc3Rpb24gYW5kIHRoZSB1c2VyJ3MgaW5wdXQuXG5cblxuY29uc3QgZGVsaW1pdGVyID0gY29tcGxldGluZyA9PiBjLmdyYXkoY29tcGxldGluZyA/IGZpZ3VyZXMuZWxsaXBzaXMgOiBmaWd1cmVzLnBvaW50ZXJTbWFsbCk7XG5cbmNvbnN0IGl0ZW0gPSAoZXhwYW5kYWJsZSwgZXhwYW5kZWQpID0+IGMuZ3JheShleHBhbmRhYmxlID8gZXhwYW5kZWQgPyBmaWd1cmVzLnBvaW50ZXJTbWFsbCA6ICcrJyA6IGZpZ3VyZXMubGluZSk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzdHlsZXMsXG4gIHJlbmRlcixcbiAgc3ltYm9scyxcbiAgc3ltYm9sLFxuICBkZWxpbWl0ZXIsXG4gIGl0ZW1cbn07IiwiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBzdHJpcCA9IHJlcXVpcmUoJy4vc3RyaXAnKTtcbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IG1zZ1xuICogQHBhcmFtIHtudW1iZXJ9IHBlckxpbmVcbiAqL1xuXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG1zZywgcGVyTGluZSkge1xuICBsZXQgbGluZXMgPSBTdHJpbmcoc3RyaXAobXNnKSB8fCAnJykuc3BsaXQoL1xccj9cXG4vKTtcbiAgaWYgKCFwZXJMaW5lKSByZXR1cm4gbGluZXMubGVuZ3RoO1xuICByZXR1cm4gbGluZXMubWFwKGwgPT4gTWF0aC5jZWlsKGwubGVuZ3RoIC8gcGVyTGluZSkpLnJlZHVjZSgoYSwgYikgPT4gYSArIGIpO1xufTsiLCIndXNlIHN0cmljdCc7XG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBtc2cgVGhlIG1lc3NhZ2UgdG8gd3JhcFxuICogQHBhcmFtIHtvYmplY3R9IG9wdHNcbiAqIEBwYXJhbSB7bnVtYmVyfHN0cmluZ30gW29wdHMubWFyZ2luXSBMZWZ0IG1hcmdpblxuICogQHBhcmFtIHtudW1iZXJ9IG9wdHMud2lkdGggTWF4aW11bSBjaGFyYWN0ZXJzIHBlciBsaW5lIGluY2x1ZGluZyB0aGUgbWFyZ2luXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSAobXNnLCBvcHRzID0ge30pID0+IHtcbiAgY29uc3QgdGFiID0gTnVtYmVyLmlzU2FmZUludGVnZXIocGFyc2VJbnQob3B0cy5tYXJnaW4pKSA/IG5ldyBBcnJheShwYXJzZUludChvcHRzLm1hcmdpbikpLmZpbGwoJyAnKS5qb2luKCcnKSA6IG9wdHMubWFyZ2luIHx8ICcnO1xuICBjb25zdCB3aWR0aCA9IG9wdHMud2lkdGg7XG4gIHJldHVybiAobXNnIHx8ICcnKS5zcGxpdCgvXFxyP1xcbi9nKS5tYXAobGluZSA9PiBsaW5lLnNwbGl0KC9cXHMrL2cpLnJlZHVjZSgoYXJyLCB3KSA9PiB7XG4gICAgaWYgKHcubGVuZ3RoICsgdGFiLmxlbmd0aCA+PSB3aWR0aCB8fCBhcnJbYXJyLmxlbmd0aCAtIDFdLmxlbmd0aCArIHcubGVuZ3RoICsgMSA8IHdpZHRoKSBhcnJbYXJyLmxlbmd0aCAtIDFdICs9IGAgJHt3fWA7ZWxzZSBhcnIucHVzaChgJHt0YWJ9JHt3fWApO1xuICAgIHJldHVybiBhcnI7XG4gIH0sIFt0YWJdKS5qb2luKCdcXG4nKSkuam9pbignXFxuJyk7XG59OyIsIid1c2Ugc3RyaWN0Jztcbi8qKlxuICogRGV0ZXJtaW5lIHdoYXQgZW50cmllcyBzaG91bGQgYmUgZGlzcGxheWVkIG9uIHRoZSBzY3JlZW4sIGJhc2VkIG9uIHRoZVxuICogY3VycmVudGx5IHNlbGVjdGVkIGluZGV4IGFuZCB0aGUgbWF4aW11bSB2aXNpYmxlLiBVc2VkIGluIGxpc3QtYmFzZWRcbiAqIHByb21wdHMgbGlrZSBgc2VsZWN0YCBhbmQgYG11bHRpc2VsZWN0YC5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gY3Vyc29yIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgZW50cnlcbiAqIEBwYXJhbSB7bnVtYmVyfSB0b3RhbCB0aGUgdG90YWwgZW50cmllcyBhdmFpbGFibGUgdG8gZGlzcGxheVxuICogQHBhcmFtIHtudW1iZXJ9IFttYXhWaXNpYmxlXSB0aGUgbnVtYmVyIG9mIGVudHJpZXMgdGhhdCBjYW4gYmUgZGlzcGxheWVkXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSAoY3Vyc29yLCB0b3RhbCwgbWF4VmlzaWJsZSkgPT4ge1xuICBtYXhWaXNpYmxlID0gbWF4VmlzaWJsZSB8fCB0b3RhbDtcbiAgbGV0IHN0YXJ0SW5kZXggPSBNYXRoLm1pbih0b3RhbCAtIG1heFZpc2libGUsIGN1cnNvciAtIE1hdGguZmxvb3IobWF4VmlzaWJsZSAvIDIpKTtcbiAgaWYgKHN0YXJ0SW5kZXggPCAwKSBzdGFydEluZGV4ID0gMDtcbiAgbGV0IGVuZEluZGV4ID0gTWF0aC5taW4oc3RhcnRJbmRleCArIG1heFZpc2libGUsIHRvdGFsKTtcbiAgcmV0dXJuIHtcbiAgICBzdGFydEluZGV4LFxuICAgIGVuZEluZGV4XG4gIH07XG59OyIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGFjdGlvbjogcmVxdWlyZSgnLi9hY3Rpb24nKSxcbiAgY2xlYXI6IHJlcXVpcmUoJy4vY2xlYXInKSxcbiAgc3R5bGU6IHJlcXVpcmUoJy4vc3R5bGUnKSxcbiAgc3RyaXA6IHJlcXVpcmUoJy4vc3RyaXAnKSxcbiAgZmlndXJlczogcmVxdWlyZSgnLi9maWd1cmVzJyksXG4gIGxpbmVzOiByZXF1aXJlKCcuL2xpbmVzJyksXG4gIHdyYXA6IHJlcXVpcmUoJy4vd3JhcCcpLFxuICBlbnRyaWVzVG9EaXNwbGF5OiByZXF1aXJlKCcuL2VudHJpZXNUb0Rpc3BsYXknKVxufTsiLCIndXNlIHN0cmljdCc7XG5cbmNvbnN0IHJlYWRsaW5lID0gcmVxdWlyZSgncmVhZGxpbmUnKTtcblxuY29uc3QgX3JlcXVpcmUgPSByZXF1aXJlKCcuLi91dGlsJyksXG4gICAgICBhY3Rpb24gPSBfcmVxdWlyZS5hY3Rpb247XG5cbmNvbnN0IEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50cycpO1xuXG5jb25zdCBfcmVxdWlyZTIgPSByZXF1aXJlKCdzaXN0ZXJhbnNpJyksXG4gICAgICBiZWVwID0gX3JlcXVpcmUyLmJlZXAsXG4gICAgICBjdXJzb3IgPSBfcmVxdWlyZTIuY3Vyc29yO1xuXG5jb25zdCBjb2xvciA9IHJlcXVpcmUoJ2tsZXVyJyk7XG4vKipcbiAqIEJhc2UgcHJvbXB0IHNrZWxldG9uXG4gKiBAcGFyYW0ge1N0cmVhbX0gW29wdHMuc3RkaW5dIFRoZSBSZWFkYWJsZSBzdHJlYW0gdG8gbGlzdGVuIHRvXG4gKiBAcGFyYW0ge1N0cmVhbX0gW29wdHMuc3Rkb3V0XSBUaGUgV3JpdGFibGUgc3RyZWFtIHRvIHdyaXRlIHJlYWRsaW5lIGRhdGEgdG9cbiAqL1xuXG5cbmNsYXNzIFByb21wdCBleHRlbmRzIEV2ZW50RW1pdHRlciB7XG4gIGNvbnN0cnVjdG9yKG9wdHMgPSB7fSkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5maXJzdFJlbmRlciA9IHRydWU7XG4gICAgdGhpcy5pbiA9IG9wdHMuc3RkaW4gfHwgcHJvY2Vzcy5zdGRpbjtcbiAgICB0aGlzLm91dCA9IG9wdHMuc3Rkb3V0IHx8IHByb2Nlc3Muc3Rkb3V0O1xuXG4gICAgdGhpcy5vblJlbmRlciA9IChvcHRzLm9uUmVuZGVyIHx8ICgoKSA9PiB2b2lkIDApKS5iaW5kKHRoaXMpO1xuXG4gICAgY29uc3QgcmwgPSByZWFkbGluZS5jcmVhdGVJbnRlcmZhY2Uoe1xuICAgICAgaW5wdXQ6IHRoaXMuaW4sXG4gICAgICBlc2NhcGVDb2RlVGltZW91dDogNTBcbiAgICB9KTtcbiAgICByZWFkbGluZS5lbWl0S2V5cHJlc3NFdmVudHModGhpcy5pbiwgcmwpO1xuICAgIGlmICh0aGlzLmluLmlzVFRZKSB0aGlzLmluLnNldFJhd01vZGUodHJ1ZSk7XG4gICAgY29uc3QgaXNTZWxlY3QgPSBbJ1NlbGVjdFByb21wdCcsICdNdWx0aXNlbGVjdFByb21wdCddLmluZGV4T2YodGhpcy5jb25zdHJ1Y3Rvci5uYW1lKSA+IC0xO1xuXG4gICAgY29uc3Qga2V5cHJlc3MgPSAoc3RyLCBrZXkpID0+IHtcbiAgICAgIGxldCBhID0gYWN0aW9uKGtleSwgaXNTZWxlY3QpO1xuXG4gICAgICBpZiAoYSA9PT0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5fICYmIHRoaXMuXyhzdHIsIGtleSk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzW2FdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRoaXNbYV0oa2V5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuYmVsbCgpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB0aGlzLmNsb3NlID0gKCkgPT4ge1xuICAgICAgdGhpcy5vdXQud3JpdGUoY3Vyc29yLnNob3cpO1xuICAgICAgdGhpcy5pbi5yZW1vdmVMaXN0ZW5lcigna2V5cHJlc3MnLCBrZXlwcmVzcyk7XG4gICAgICBpZiAodGhpcy5pbi5pc1RUWSkgdGhpcy5pbi5zZXRSYXdNb2RlKGZhbHNlKTtcbiAgICAgIHJsLmNsb3NlKCk7XG4gICAgICB0aGlzLmVtaXQodGhpcy5hYm9ydGVkID8gJ2Fib3J0JyA6IHRoaXMuZXhpdGVkID8gJ2V4aXQnIDogJ3N1Ym1pdCcsIHRoaXMudmFsdWUpO1xuICAgICAgdGhpcy5jbG9zZWQgPSB0cnVlO1xuICAgIH07XG5cbiAgICB0aGlzLmluLm9uKCdrZXlwcmVzcycsIGtleXByZXNzKTtcbiAgfVxuXG4gIGZpcmUoKSB7XG4gICAgdGhpcy5lbWl0KCdzdGF0ZScsIHtcbiAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgYWJvcnRlZDogISF0aGlzLmFib3J0ZWQsXG4gICAgICBleGl0ZWQ6ICEhdGhpcy5leGl0ZWRcbiAgICB9KTtcbiAgfVxuXG4gIGJlbGwoKSB7XG4gICAgdGhpcy5vdXQud3JpdGUoYmVlcCk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgdGhpcy5vblJlbmRlcihjb2xvcik7XG4gICAgaWYgKHRoaXMuZmlyc3RSZW5kZXIpIHRoaXMuZmlyc3RSZW5kZXIgPSBmYWxzZTtcbiAgfVxuXG59XG5cbm1vZHVsZS5leHBvcnRzID0gUHJvbXB0OyIsIlwidXNlIHN0cmljdFwiO1xuXG5mdW5jdGlvbiBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIGtleSwgYXJnKSB7IHRyeSB7IHZhciBpbmZvID0gZ2VuW2tleV0oYXJnKTsgdmFyIHZhbHVlID0gaW5mby52YWx1ZTsgfSBjYXRjaCAoZXJyb3IpIHsgcmVqZWN0KGVycm9yKTsgcmV0dXJuOyB9IGlmIChpbmZvLmRvbmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0gZWxzZSB7IFByb21pc2UucmVzb2x2ZSh2YWx1ZSkudGhlbihfbmV4dCwgX3Rocm93KTsgfSB9XG5cbmZ1bmN0aW9uIF9hc3luY1RvR2VuZXJhdG9yKGZuKSB7IHJldHVybiBmdW5jdGlvbiAoKSB7IHZhciBzZWxmID0gdGhpcywgYXJncyA9IGFyZ3VtZW50czsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsgdmFyIGdlbiA9IGZuLmFwcGx5KHNlbGYsIGFyZ3MpOyBmdW5jdGlvbiBfbmV4dCh2YWx1ZSkgeyBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIFwibmV4dFwiLCB2YWx1ZSk7IH0gZnVuY3Rpb24gX3Rocm93KGVycikgeyBhc3luY0dlbmVyYXRvclN0ZXAoZ2VuLCByZXNvbHZlLCByZWplY3QsIF9uZXh0LCBfdGhyb3csIFwidGhyb3dcIiwgZXJyKTsgfSBfbmV4dCh1bmRlZmluZWQpOyB9KTsgfTsgfVxuXG5jb25zdCBjb2xvciA9IHJlcXVpcmUoJ2tsZXVyJyk7XG5cbmNvbnN0IFByb21wdCA9IHJlcXVpcmUoJy4vcHJvbXB0Jyk7XG5cbmNvbnN0IF9yZXF1aXJlID0gcmVxdWlyZSgnc2lzdGVyYW5zaScpLFxuICAgICAgZXJhc2UgPSBfcmVxdWlyZS5lcmFzZSxcbiAgICAgIGN1cnNvciA9IF9yZXF1aXJlLmN1cnNvcjtcblxuY29uc3QgX3JlcXVpcmUyID0gcmVxdWlyZSgnLi4vdXRpbCcpLFxuICAgICAgc3R5bGUgPSBfcmVxdWlyZTIuc3R5bGUsXG4gICAgICBjbGVhciA9IF9yZXF1aXJlMi5jbGVhcixcbiAgICAgIGxpbmVzID0gX3JlcXVpcmUyLmxpbmVzLFxuICAgICAgZmlndXJlcyA9IF9yZXF1aXJlMi5maWd1cmVzO1xuLyoqXG4gKiBUZXh0UHJvbXB0IEJhc2UgRWxlbWVudFxuICogQHBhcmFtIHtPYmplY3R9IG9wdHMgT3B0aW9uc1xuICogQHBhcmFtIHtTdHJpbmd9IG9wdHMubWVzc2FnZSBNZXNzYWdlXG4gKiBAcGFyYW0ge1N0cmluZ30gW29wdHMuc3R5bGU9J2RlZmF1bHQnXSBSZW5kZXIgc3R5bGVcbiAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5pbml0aWFsXSBEZWZhdWx0IHZhbHVlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0cy52YWxpZGF0ZV0gVmFsaWRhdGUgZnVuY3Rpb25cbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLmVycm9yXSBUaGUgaW52YWxpZCBlcnJvciBsYWJlbFxuICovXG5cblxuY2xhc3MgVGV4dFByb21wdCBleHRlbmRzIFByb21wdCB7XG4gIGNvbnN0cnVjdG9yKG9wdHMgPSB7fSkge1xuICAgIHN1cGVyKG9wdHMpO1xuICAgIHRoaXMudHJhbnNmb3JtID0gc3R5bGUucmVuZGVyKG9wdHMuc3R5bGUpO1xuICAgIHRoaXMuc2NhbGUgPSB0aGlzLnRyYW5zZm9ybS5zY2FsZTtcbiAgICB0aGlzLm1zZyA9IG9wdHMubWVzc2FnZTtcbiAgICB0aGlzLmluaXRpYWwgPSBvcHRzLmluaXRpYWwgfHwgYGA7XG5cbiAgICB0aGlzLnZhbGlkYXRvciA9IG9wdHMudmFsaWRhdGUgfHwgKCgpID0+IHRydWUpO1xuXG4gICAgdGhpcy52YWx1ZSA9IGBgO1xuICAgIHRoaXMuZXJyb3JNc2cgPSBvcHRzLmVycm9yIHx8IGBQbGVhc2UgRW50ZXIgQSBWYWxpZCBWYWx1ZWA7XG4gICAgdGhpcy5jdXJzb3IgPSBOdW1iZXIoISF0aGlzLmluaXRpYWwpO1xuICAgIHRoaXMuY3Vyc29yT2Zmc2V0ID0gMDtcbiAgICB0aGlzLmNsZWFyID0gY2xlYXIoYGAsIHRoaXMub3V0LmNvbHVtbnMpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBzZXQgdmFsdWUodikge1xuICAgIGlmICghdiAmJiB0aGlzLmluaXRpYWwpIHtcbiAgICAgIHRoaXMucGxhY2Vob2xkZXIgPSB0cnVlO1xuICAgICAgdGhpcy5yZW5kZXJlZCA9IGNvbG9yLmdyYXkodGhpcy50cmFuc2Zvcm0ucmVuZGVyKHRoaXMuaW5pdGlhbCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnBsYWNlaG9sZGVyID0gZmFsc2U7XG4gICAgICB0aGlzLnJlbmRlcmVkID0gdGhpcy50cmFuc2Zvcm0ucmVuZGVyKHYpO1xuICAgIH1cblxuICAgIHRoaXMuX3ZhbHVlID0gdjtcbiAgICB0aGlzLmZpcmUoKTtcbiAgfVxuXG4gIGdldCB2YWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gIH1cblxuICByZXNldCgpIHtcbiAgICB0aGlzLnZhbHVlID0gYGA7XG4gICAgdGhpcy5jdXJzb3IgPSBOdW1iZXIoISF0aGlzLmluaXRpYWwpO1xuICAgIHRoaXMuY3Vyc29yT2Zmc2V0ID0gMDtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZXhpdCgpIHtcbiAgICB0aGlzLmFib3J0KCk7XG4gIH1cblxuICBhYm9ydCgpIHtcbiAgICB0aGlzLnZhbHVlID0gdGhpcy52YWx1ZSB8fCB0aGlzLmluaXRpYWw7XG4gICAgdGhpcy5kb25lID0gdGhpcy5hYm9ydGVkID0gdHJ1ZTtcbiAgICB0aGlzLmVycm9yID0gZmFsc2U7XG4gICAgdGhpcy5yZWQgPSBmYWxzZTtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICAgIHRoaXMub3V0LndyaXRlKCdcXG4nKTtcbiAgICB0aGlzLmNsb3NlKCk7XG4gIH1cblxuICB2YWxpZGF0ZSgpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgcmV0dXJuIF9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKiAoKSB7XG4gICAgICBsZXQgdmFsaWQgPSB5aWVsZCBfdGhpcy52YWxpZGF0b3IoX3RoaXMudmFsdWUpO1xuXG4gICAgICBpZiAodHlwZW9mIHZhbGlkID09PSBgc3RyaW5nYCkge1xuICAgICAgICBfdGhpcy5lcnJvck1zZyA9IHZhbGlkO1xuICAgICAgICB2YWxpZCA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBfdGhpcy5lcnJvciA9ICF2YWxpZDtcbiAgICB9KSgpO1xuICB9XG5cbiAgc3VibWl0KCkge1xuICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgcmV0dXJuIF9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKiAoKSB7XG4gICAgICBfdGhpczIudmFsdWUgPSBfdGhpczIudmFsdWUgfHwgX3RoaXMyLmluaXRpYWw7XG4gICAgICBfdGhpczIuY3Vyc29yT2Zmc2V0ID0gMDtcbiAgICAgIF90aGlzMi5jdXJzb3IgPSBfdGhpczIucmVuZGVyZWQubGVuZ3RoO1xuICAgICAgeWllbGQgX3RoaXMyLnZhbGlkYXRlKCk7XG5cbiAgICAgIGlmIChfdGhpczIuZXJyb3IpIHtcbiAgICAgICAgX3RoaXMyLnJlZCA9IHRydWU7XG5cbiAgICAgICAgX3RoaXMyLmZpcmUoKTtcblxuICAgICAgICBfdGhpczIucmVuZGVyKCk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBfdGhpczIuZG9uZSA9IHRydWU7XG4gICAgICBfdGhpczIuYWJvcnRlZCA9IGZhbHNlO1xuXG4gICAgICBfdGhpczIuZmlyZSgpO1xuXG4gICAgICBfdGhpczIucmVuZGVyKCk7XG5cbiAgICAgIF90aGlzMi5vdXQud3JpdGUoJ1xcbicpO1xuXG4gICAgICBfdGhpczIuY2xvc2UoKTtcbiAgICB9KSgpO1xuICB9XG5cbiAgbmV4dCgpIHtcbiAgICBpZiAoIXRoaXMucGxhY2Vob2xkZXIpIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgICB0aGlzLnZhbHVlID0gdGhpcy5pbml0aWFsO1xuICAgIHRoaXMuY3Vyc29yID0gdGhpcy5yZW5kZXJlZC5sZW5ndGg7XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIG1vdmVDdXJzb3Iobikge1xuICAgIGlmICh0aGlzLnBsYWNlaG9sZGVyKSByZXR1cm47XG4gICAgdGhpcy5jdXJzb3IgPSB0aGlzLmN1cnNvciArIG47XG4gICAgdGhpcy5jdXJzb3JPZmZzZXQgKz0gbjtcbiAgfVxuXG4gIF8oYywga2V5KSB7XG4gICAgbGV0IHMxID0gdGhpcy52YWx1ZS5zbGljZSgwLCB0aGlzLmN1cnNvcik7XG4gICAgbGV0IHMyID0gdGhpcy52YWx1ZS5zbGljZSh0aGlzLmN1cnNvcik7XG4gICAgdGhpcy52YWx1ZSA9IGAke3MxfSR7Y30ke3MyfWA7XG4gICAgdGhpcy5yZWQgPSBmYWxzZTtcbiAgICB0aGlzLmN1cnNvciA9IHRoaXMucGxhY2Vob2xkZXIgPyAwIDogczEubGVuZ3RoICsgMTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZGVsZXRlKCkge1xuICAgIGlmICh0aGlzLmlzQ3Vyc29yQXRTdGFydCgpKSByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgbGV0IHMxID0gdGhpcy52YWx1ZS5zbGljZSgwLCB0aGlzLmN1cnNvciAtIDEpO1xuICAgIGxldCBzMiA9IHRoaXMudmFsdWUuc2xpY2UodGhpcy5jdXJzb3IpO1xuICAgIHRoaXMudmFsdWUgPSBgJHtzMX0ke3MyfWA7XG4gICAgdGhpcy5yZWQgPSBmYWxzZTtcblxuICAgIGlmICh0aGlzLmlzQ3Vyc29yQXRTdGFydCgpKSB7XG4gICAgICB0aGlzLmN1cnNvck9mZnNldCA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY3Vyc29yT2Zmc2V0Kys7XG4gICAgICB0aGlzLm1vdmVDdXJzb3IoLTEpO1xuICAgIH1cblxuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBkZWxldGVGb3J3YXJkKCkge1xuICAgIGlmICh0aGlzLmN1cnNvciAqIHRoaXMuc2NhbGUgPj0gdGhpcy5yZW5kZXJlZC5sZW5ndGggfHwgdGhpcy5wbGFjZWhvbGRlcikgcmV0dXJuIHRoaXMuYmVsbCgpO1xuICAgIGxldCBzMSA9IHRoaXMudmFsdWUuc2xpY2UoMCwgdGhpcy5jdXJzb3IpO1xuICAgIGxldCBzMiA9IHRoaXMudmFsdWUuc2xpY2UodGhpcy5jdXJzb3IgKyAxKTtcbiAgICB0aGlzLnZhbHVlID0gYCR7czF9JHtzMn1gO1xuICAgIHRoaXMucmVkID0gZmFsc2U7XG5cbiAgICBpZiAodGhpcy5pc0N1cnNvckF0RW5kKCkpIHtcbiAgICAgIHRoaXMuY3Vyc29yT2Zmc2V0ID0gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jdXJzb3JPZmZzZXQrKztcbiAgICB9XG5cbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZmlyc3QoKSB7XG4gICAgdGhpcy5jdXJzb3IgPSAwO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBsYXN0KCkge1xuICAgIHRoaXMuY3Vyc29yID0gdGhpcy52YWx1ZS5sZW5ndGg7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIGxlZnQoKSB7XG4gICAgaWYgKHRoaXMuY3Vyc29yIDw9IDAgfHwgdGhpcy5wbGFjZWhvbGRlcikgcmV0dXJuIHRoaXMuYmVsbCgpO1xuICAgIHRoaXMubW92ZUN1cnNvcigtMSk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHJpZ2h0KCkge1xuICAgIGlmICh0aGlzLmN1cnNvciAqIHRoaXMuc2NhbGUgPj0gdGhpcy5yZW5kZXJlZC5sZW5ndGggfHwgdGhpcy5wbGFjZWhvbGRlcikgcmV0dXJuIHRoaXMuYmVsbCgpO1xuICAgIHRoaXMubW92ZUN1cnNvcigxKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgaXNDdXJzb3JBdFN0YXJ0KCkge1xuICAgIHJldHVybiB0aGlzLmN1cnNvciA9PT0gMCB8fCB0aGlzLnBsYWNlaG9sZGVyICYmIHRoaXMuY3Vyc29yID09PSAxO1xuICB9XG5cbiAgaXNDdXJzb3JBdEVuZCgpIHtcbiAgICByZXR1cm4gdGhpcy5jdXJzb3IgPT09IHRoaXMucmVuZGVyZWQubGVuZ3RoIHx8IHRoaXMucGxhY2Vob2xkZXIgJiYgdGhpcy5jdXJzb3IgPT09IHRoaXMucmVuZGVyZWQubGVuZ3RoICsgMTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBpZiAodGhpcy5jbG9zZWQpIHJldHVybjtcblxuICAgIGlmICghdGhpcy5maXJzdFJlbmRlcikge1xuICAgICAgaWYgKHRoaXMub3V0cHV0RXJyb3IpIHRoaXMub3V0LndyaXRlKGN1cnNvci5kb3duKGxpbmVzKHRoaXMub3V0cHV0RXJyb3IsIHRoaXMub3V0LmNvbHVtbnMpIC0gMSkgKyBjbGVhcih0aGlzLm91dHB1dEVycm9yLCB0aGlzLm91dC5jb2x1bW5zKSk7XG4gICAgICB0aGlzLm91dC53cml0ZShjbGVhcih0aGlzLm91dHB1dFRleHQsIHRoaXMub3V0LmNvbHVtbnMpKTtcbiAgICB9XG5cbiAgICBzdXBlci5yZW5kZXIoKTtcbiAgICB0aGlzLm91dHB1dEVycm9yID0gJyc7XG4gICAgdGhpcy5vdXRwdXRUZXh0ID0gW3N0eWxlLnN5bWJvbCh0aGlzLmRvbmUsIHRoaXMuYWJvcnRlZCksIGNvbG9yLmJvbGQodGhpcy5tc2cpLCBzdHlsZS5kZWxpbWl0ZXIodGhpcy5kb25lKSwgdGhpcy5yZWQgPyBjb2xvci5yZWQodGhpcy5yZW5kZXJlZCkgOiB0aGlzLnJlbmRlcmVkXS5qb2luKGAgYCk7XG5cbiAgICBpZiAodGhpcy5lcnJvcikge1xuICAgICAgdGhpcy5vdXRwdXRFcnJvciArPSB0aGlzLmVycm9yTXNnLnNwbGl0KGBcXG5gKS5yZWR1Y2UoKGEsIGwsIGkpID0+IGEgKyBgXFxuJHtpID8gJyAnIDogZmlndXJlcy5wb2ludGVyU21hbGx9ICR7Y29sb3IucmVkKCkuaXRhbGljKGwpfWAsIGBgKTtcbiAgICB9XG5cbiAgICB0aGlzLm91dC53cml0ZShlcmFzZS5saW5lICsgY3Vyc29yLnRvKDApICsgdGhpcy5vdXRwdXRUZXh0ICsgY3Vyc29yLnNhdmUgKyB0aGlzLm91dHB1dEVycm9yICsgY3Vyc29yLnJlc3RvcmUgKyBjdXJzb3IubW92ZSh0aGlzLmN1cnNvck9mZnNldCwgMCkpO1xuICB9XG5cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBUZXh0UHJvbXB0OyIsIid1c2Ugc3RyaWN0JztcblxuY29uc3QgY29sb3IgPSByZXF1aXJlKCdrbGV1cicpO1xuXG5jb25zdCBQcm9tcHQgPSByZXF1aXJlKCcuL3Byb21wdCcpO1xuXG5jb25zdCBfcmVxdWlyZSA9IHJlcXVpcmUoJy4uL3V0aWwnKSxcbiAgICAgIHN0eWxlID0gX3JlcXVpcmUuc3R5bGUsXG4gICAgICBjbGVhciA9IF9yZXF1aXJlLmNsZWFyLFxuICAgICAgZmlndXJlcyA9IF9yZXF1aXJlLmZpZ3VyZXMsXG4gICAgICB3cmFwID0gX3JlcXVpcmUud3JhcCxcbiAgICAgIGVudHJpZXNUb0Rpc3BsYXkgPSBfcmVxdWlyZS5lbnRyaWVzVG9EaXNwbGF5O1xuXG5jb25zdCBfcmVxdWlyZTIgPSByZXF1aXJlKCdzaXN0ZXJhbnNpJyksXG4gICAgICBjdXJzb3IgPSBfcmVxdWlyZTIuY3Vyc29yO1xuLyoqXG4gKiBTZWxlY3RQcm9tcHQgQmFzZSBFbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyBPcHRpb25zXG4gKiBAcGFyYW0ge1N0cmluZ30gb3B0cy5tZXNzYWdlIE1lc3NhZ2VcbiAqIEBwYXJhbSB7QXJyYXl9IG9wdHMuY2hvaWNlcyBBcnJheSBvZiBjaG9pY2Ugb2JqZWN0c1xuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLmhpbnRdIEhpbnQgdG8gZGlzcGxheVxuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRzLmluaXRpYWxdIEluZGV4IG9mIGRlZmF1bHQgdmFsdWVcbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRzLm9wdGlvbnNQZXJQYWdlPTEwXSBNYXggb3B0aW9ucyB0byBkaXNwbGF5IGF0IG9uY2VcbiAqL1xuXG5cbmNsYXNzIFNlbGVjdFByb21wdCBleHRlbmRzIFByb21wdCB7XG4gIGNvbnN0cnVjdG9yKG9wdHMgPSB7fSkge1xuICAgIHN1cGVyKG9wdHMpO1xuICAgIHRoaXMubXNnID0gb3B0cy5tZXNzYWdlO1xuICAgIHRoaXMuaGludCA9IG9wdHMuaGludCB8fCAnLSBVc2UgYXJyb3cta2V5cy4gUmV0dXJuIHRvIHN1Ym1pdC4nO1xuICAgIHRoaXMud2FybiA9IG9wdHMud2FybiB8fCAnLSBUaGlzIG9wdGlvbiBpcyBkaXNhYmxlZCc7XG4gICAgdGhpcy5jdXJzb3IgPSBvcHRzLmluaXRpYWwgfHwgMDtcbiAgICB0aGlzLmNob2ljZXMgPSBvcHRzLmNob2ljZXMubWFwKChjaCwgaWR4KSA9PiB7XG4gICAgICBpZiAodHlwZW9mIGNoID09PSAnc3RyaW5nJykgY2ggPSB7XG4gICAgICAgIHRpdGxlOiBjaCxcbiAgICAgICAgdmFsdWU6IGlkeFxuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRpdGxlOiBjaCAmJiAoY2gudGl0bGUgfHwgY2gudmFsdWUgfHwgY2gpLFxuICAgICAgICB2YWx1ZTogY2ggJiYgKGNoLnZhbHVlID09PSB1bmRlZmluZWQgPyBpZHggOiBjaC52YWx1ZSksXG4gICAgICAgIGRlc2NyaXB0aW9uOiBjaCAmJiBjaC5kZXNjcmlwdGlvbixcbiAgICAgICAgc2VsZWN0ZWQ6IGNoICYmIGNoLnNlbGVjdGVkLFxuICAgICAgICBkaXNhYmxlZDogY2ggJiYgY2guZGlzYWJsZWRcbiAgICAgIH07XG4gICAgfSk7XG4gICAgdGhpcy5vcHRpb25zUGVyUGFnZSA9IG9wdHMub3B0aW9uc1BlclBhZ2UgfHwgMTA7XG4gICAgdGhpcy52YWx1ZSA9ICh0aGlzLmNob2ljZXNbdGhpcy5jdXJzb3JdIHx8IHt9KS52YWx1ZTtcbiAgICB0aGlzLmNsZWFyID0gY2xlYXIoJycsIHRoaXMub3V0LmNvbHVtbnMpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBtb3ZlQ3Vyc29yKG4pIHtcbiAgICB0aGlzLmN1cnNvciA9IG47XG4gICAgdGhpcy52YWx1ZSA9IHRoaXMuY2hvaWNlc1tuXS52YWx1ZTtcbiAgICB0aGlzLmZpcmUoKTtcbiAgfVxuXG4gIHJlc2V0KCkge1xuICAgIHRoaXMubW92ZUN1cnNvcigwKTtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZXhpdCgpIHtcbiAgICB0aGlzLmFib3J0KCk7XG4gIH1cblxuICBhYm9ydCgpIHtcbiAgICB0aGlzLmRvbmUgPSB0aGlzLmFib3J0ZWQgPSB0cnVlO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gICAgdGhpcy5vdXQud3JpdGUoJ1xcbicpO1xuICAgIHRoaXMuY2xvc2UoKTtcbiAgfVxuXG4gIHN1Ym1pdCgpIHtcbiAgICBpZiAoIXRoaXMuc2VsZWN0aW9uLmRpc2FibGVkKSB7XG4gICAgICB0aGlzLmRvbmUgPSB0cnVlO1xuICAgICAgdGhpcy5hYm9ydGVkID0gZmFsc2U7XG4gICAgICB0aGlzLmZpcmUoKTtcbiAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgICB0aGlzLm91dC53cml0ZSgnXFxuJyk7XG4gICAgICB0aGlzLmNsb3NlKCk7XG4gICAgfSBlbHNlIHRoaXMuYmVsbCgpO1xuICB9XG5cbiAgZmlyc3QoKSB7XG4gICAgdGhpcy5tb3ZlQ3Vyc29yKDApO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBsYXN0KCkge1xuICAgIHRoaXMubW92ZUN1cnNvcih0aGlzLmNob2ljZXMubGVuZ3RoIC0gMSk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHVwKCkge1xuICAgIGlmICh0aGlzLmN1cnNvciA9PT0gMCkge1xuICAgICAgdGhpcy5tb3ZlQ3Vyc29yKHRoaXMuY2hvaWNlcy5sZW5ndGggLSAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5tb3ZlQ3Vyc29yKHRoaXMuY3Vyc29yIC0gMSk7XG4gICAgfVxuXG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIGRvd24oKSB7XG4gICAgaWYgKHRoaXMuY3Vyc29yID09PSB0aGlzLmNob2ljZXMubGVuZ3RoIC0gMSkge1xuICAgICAgdGhpcy5tb3ZlQ3Vyc29yKDApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm1vdmVDdXJzb3IodGhpcy5jdXJzb3IgKyAxKTtcbiAgICB9XG5cbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgbmV4dCgpIHtcbiAgICB0aGlzLm1vdmVDdXJzb3IoKHRoaXMuY3Vyc29yICsgMSkgJSB0aGlzLmNob2ljZXMubGVuZ3RoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgXyhjLCBrZXkpIHtcbiAgICBpZiAoYyA9PT0gJyAnKSByZXR1cm4gdGhpcy5zdWJtaXQoKTtcbiAgfVxuXG4gIGdldCBzZWxlY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuY2hvaWNlc1t0aGlzLmN1cnNvcl07XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgaWYgKHRoaXMuY2xvc2VkKSByZXR1cm47XG4gICAgaWYgKHRoaXMuZmlyc3RSZW5kZXIpIHRoaXMub3V0LndyaXRlKGN1cnNvci5oaWRlKTtlbHNlIHRoaXMub3V0LndyaXRlKGNsZWFyKHRoaXMub3V0cHV0VGV4dCwgdGhpcy5vdXQuY29sdW1ucykpO1xuICAgIHN1cGVyLnJlbmRlcigpO1xuXG4gICAgbGV0IF9lbnRyaWVzVG9EaXNwbGF5ID0gZW50cmllc1RvRGlzcGxheSh0aGlzLmN1cnNvciwgdGhpcy5jaG9pY2VzLmxlbmd0aCwgdGhpcy5vcHRpb25zUGVyUGFnZSksXG4gICAgICAgIHN0YXJ0SW5kZXggPSBfZW50cmllc1RvRGlzcGxheS5zdGFydEluZGV4LFxuICAgICAgICBlbmRJbmRleCA9IF9lbnRyaWVzVG9EaXNwbGF5LmVuZEluZGV4OyAvLyBQcmludCBwcm9tcHRcblxuXG4gICAgdGhpcy5vdXRwdXRUZXh0ID0gW3N0eWxlLnN5bWJvbCh0aGlzLmRvbmUsIHRoaXMuYWJvcnRlZCksIGNvbG9yLmJvbGQodGhpcy5tc2cpLCBzdHlsZS5kZWxpbWl0ZXIoZmFsc2UpLCB0aGlzLmRvbmUgPyB0aGlzLnNlbGVjdGlvbi50aXRsZSA6IHRoaXMuc2VsZWN0aW9uLmRpc2FibGVkID8gY29sb3IueWVsbG93KHRoaXMud2FybikgOiBjb2xvci5ncmF5KHRoaXMuaGludCldLmpvaW4oJyAnKTsgLy8gUHJpbnQgY2hvaWNlc1xuXG4gICAgaWYgKCF0aGlzLmRvbmUpIHtcbiAgICAgIHRoaXMub3V0cHV0VGV4dCArPSAnXFxuJztcblxuICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0SW5kZXg7IGkgPCBlbmRJbmRleDsgaSsrKSB7XG4gICAgICAgIGxldCB0aXRsZSxcbiAgICAgICAgICAgIHByZWZpeCxcbiAgICAgICAgICAgIGRlc2MgPSAnJyxcbiAgICAgICAgICAgIHYgPSB0aGlzLmNob2ljZXNbaV07IC8vIERldGVybWluZSB3aGV0aGVyIHRvIGRpc3BsYXkgXCJtb3JlIGNob2ljZXNcIiBpbmRpY2F0b3JzXG5cbiAgICAgICAgaWYgKGkgPT09IHN0YXJ0SW5kZXggJiYgc3RhcnRJbmRleCA+IDApIHtcbiAgICAgICAgICBwcmVmaXggPSBmaWd1cmVzLmFycm93VXA7XG4gICAgICAgIH0gZWxzZSBpZiAoaSA9PT0gZW5kSW5kZXggLSAxICYmIGVuZEluZGV4IDwgdGhpcy5jaG9pY2VzLmxlbmd0aCkge1xuICAgICAgICAgIHByZWZpeCA9IGZpZ3VyZXMuYXJyb3dEb3duO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByZWZpeCA9ICcgJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2LmRpc2FibGVkKSB7XG4gICAgICAgICAgdGl0bGUgPSB0aGlzLmN1cnNvciA9PT0gaSA/IGNvbG9yLmdyYXkoKS51bmRlcmxpbmUodi50aXRsZSkgOiBjb2xvci5zdHJpa2V0aHJvdWdoKCkuZ3JheSh2LnRpdGxlKTtcbiAgICAgICAgICBwcmVmaXggPSAodGhpcy5jdXJzb3IgPT09IGkgPyBjb2xvci5ib2xkKCkuZ3JheShmaWd1cmVzLnBvaW50ZXIpICsgJyAnIDogJyAgJykgKyBwcmVmaXg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGl0bGUgPSB0aGlzLmN1cnNvciA9PT0gaSA/IGNvbG9yLmN5YW4oKS51bmRlcmxpbmUodi50aXRsZSkgOiB2LnRpdGxlO1xuICAgICAgICAgIHByZWZpeCA9ICh0aGlzLmN1cnNvciA9PT0gaSA/IGNvbG9yLmN5YW4oZmlndXJlcy5wb2ludGVyKSArICcgJyA6ICcgICcpICsgcHJlZml4O1xuXG4gICAgICAgICAgaWYgKHYuZGVzY3JpcHRpb24gJiYgdGhpcy5jdXJzb3IgPT09IGkpIHtcbiAgICAgICAgICAgIGRlc2MgPSBgIC0gJHt2LmRlc2NyaXB0aW9ufWA7XG5cbiAgICAgICAgICAgIGlmIChwcmVmaXgubGVuZ3RoICsgdGl0bGUubGVuZ3RoICsgZGVzYy5sZW5ndGggPj0gdGhpcy5vdXQuY29sdW1ucyB8fCB2LmRlc2NyaXB0aW9uLnNwbGl0KC9cXHI/XFxuLykubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICBkZXNjID0gJ1xcbicgKyB3cmFwKHYuZGVzY3JpcHRpb24sIHtcbiAgICAgICAgICAgICAgICBtYXJnaW46IDMsXG4gICAgICAgICAgICAgICAgd2lkdGg6IHRoaXMub3V0LmNvbHVtbnNcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5vdXRwdXRUZXh0ICs9IGAke3ByZWZpeH0gJHt0aXRsZX0ke2NvbG9yLmdyYXkoZGVzYyl9XFxuYDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLm91dC53cml0ZSh0aGlzLm91dHB1dFRleHQpO1xuICB9XG5cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBTZWxlY3RQcm9tcHQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IGNvbG9yID0gcmVxdWlyZSgna2xldXInKTtcblxuY29uc3QgUHJvbXB0ID0gcmVxdWlyZSgnLi9wcm9tcHQnKTtcblxuY29uc3QgX3JlcXVpcmUgPSByZXF1aXJlKCcuLi91dGlsJyksXG4gICAgICBzdHlsZSA9IF9yZXF1aXJlLnN0eWxlLFxuICAgICAgY2xlYXIgPSBfcmVxdWlyZS5jbGVhcjtcblxuY29uc3QgX3JlcXVpcmUyID0gcmVxdWlyZSgnc2lzdGVyYW5zaScpLFxuICAgICAgY3Vyc29yID0gX3JlcXVpcmUyLmN1cnNvcixcbiAgICAgIGVyYXNlID0gX3JlcXVpcmUyLmVyYXNlO1xuLyoqXG4gKiBUb2dnbGVQcm9tcHQgQmFzZSBFbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyBPcHRpb25zXG4gKiBAcGFyYW0ge1N0cmluZ30gb3B0cy5tZXNzYWdlIE1lc3NhZ2VcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdHMuaW5pdGlhbD1mYWxzZV0gRGVmYXVsdCB2YWx1ZVxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLmFjdGl2ZT0nbm8nXSBBY3RpdmUgbGFiZWxcbiAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5pbmFjdGl2ZT0nb2ZmJ10gSW5hY3RpdmUgbGFiZWxcbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICovXG5cblxuY2xhc3MgVG9nZ2xlUHJvbXB0IGV4dGVuZHMgUHJvbXB0IHtcbiAgY29uc3RydWN0b3Iob3B0cyA9IHt9KSB7XG4gICAgc3VwZXIob3B0cyk7XG4gICAgdGhpcy5tc2cgPSBvcHRzLm1lc3NhZ2U7XG4gICAgdGhpcy52YWx1ZSA9ICEhb3B0cy5pbml0aWFsO1xuICAgIHRoaXMuYWN0aXZlID0gb3B0cy5hY3RpdmUgfHwgJ29uJztcbiAgICB0aGlzLmluYWN0aXZlID0gb3B0cy5pbmFjdGl2ZSB8fCAnb2ZmJztcbiAgICB0aGlzLmluaXRpYWxWYWx1ZSA9IHRoaXMudmFsdWU7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHJlc2V0KCkge1xuICAgIHRoaXMudmFsdWUgPSB0aGlzLmluaXRpYWxWYWx1ZTtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZXhpdCgpIHtcbiAgICB0aGlzLmFib3J0KCk7XG4gIH1cblxuICBhYm9ydCgpIHtcbiAgICB0aGlzLmRvbmUgPSB0aGlzLmFib3J0ZWQgPSB0cnVlO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gICAgdGhpcy5vdXQud3JpdGUoJ1xcbicpO1xuICAgIHRoaXMuY2xvc2UoKTtcbiAgfVxuXG4gIHN1Ym1pdCgpIHtcbiAgICB0aGlzLmRvbmUgPSB0cnVlO1xuICAgIHRoaXMuYWJvcnRlZCA9IGZhbHNlO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gICAgdGhpcy5vdXQud3JpdGUoJ1xcbicpO1xuICAgIHRoaXMuY2xvc2UoKTtcbiAgfVxuXG4gIGRlYWN0aXZhdGUoKSB7XG4gICAgaWYgKHRoaXMudmFsdWUgPT09IGZhbHNlKSByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgdGhpcy52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBhY3RpdmF0ZSgpIHtcbiAgICBpZiAodGhpcy52YWx1ZSA9PT0gdHJ1ZSkgcmV0dXJuIHRoaXMuYmVsbCgpO1xuICAgIHRoaXMudmFsdWUgPSB0cnVlO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBkZWxldGUoKSB7XG4gICAgdGhpcy5kZWFjdGl2YXRlKCk7XG4gIH1cblxuICBsZWZ0KCkge1xuICAgIHRoaXMuZGVhY3RpdmF0ZSgpO1xuICB9XG5cbiAgcmlnaHQoKSB7XG4gICAgdGhpcy5hY3RpdmF0ZSgpO1xuICB9XG5cbiAgZG93bigpIHtcbiAgICB0aGlzLmRlYWN0aXZhdGUoKTtcbiAgfVxuXG4gIHVwKCkge1xuICAgIHRoaXMuYWN0aXZhdGUoKTtcbiAgfVxuXG4gIG5leHQoKSB7XG4gICAgdGhpcy52YWx1ZSA9ICF0aGlzLnZhbHVlO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBfKGMsIGtleSkge1xuICAgIGlmIChjID09PSAnICcpIHtcbiAgICAgIHRoaXMudmFsdWUgPSAhdGhpcy52YWx1ZTtcbiAgICB9IGVsc2UgaWYgKGMgPT09ICcxJykge1xuICAgICAgdGhpcy52YWx1ZSA9IHRydWU7XG4gICAgfSBlbHNlIGlmIChjID09PSAnMCcpIHtcbiAgICAgIHRoaXMudmFsdWUgPSBmYWxzZTtcbiAgICB9IGVsc2UgcmV0dXJuIHRoaXMuYmVsbCgpO1xuXG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBpZiAodGhpcy5jbG9zZWQpIHJldHVybjtcbiAgICBpZiAodGhpcy5maXJzdFJlbmRlcikgdGhpcy5vdXQud3JpdGUoY3Vyc29yLmhpZGUpO2Vsc2UgdGhpcy5vdXQud3JpdGUoY2xlYXIodGhpcy5vdXRwdXRUZXh0LCB0aGlzLm91dC5jb2x1bW5zKSk7XG4gICAgc3VwZXIucmVuZGVyKCk7XG4gICAgdGhpcy5vdXRwdXRUZXh0ID0gW3N0eWxlLnN5bWJvbCh0aGlzLmRvbmUsIHRoaXMuYWJvcnRlZCksIGNvbG9yLmJvbGQodGhpcy5tc2cpLCBzdHlsZS5kZWxpbWl0ZXIodGhpcy5kb25lKSwgdGhpcy52YWx1ZSA/IHRoaXMuaW5hY3RpdmUgOiBjb2xvci5jeWFuKCkudW5kZXJsaW5lKHRoaXMuaW5hY3RpdmUpLCBjb2xvci5ncmF5KCcvJyksIHRoaXMudmFsdWUgPyBjb2xvci5jeWFuKCkudW5kZXJsaW5lKHRoaXMuYWN0aXZlKSA6IHRoaXMuYWN0aXZlXS5qb2luKCcgJyk7XG4gICAgdGhpcy5vdXQud3JpdGUoZXJhc2UubGluZSArIGN1cnNvci50bygwKSArIHRoaXMub3V0cHV0VGV4dCk7XG4gIH1cblxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFRvZ2dsZVByb21wdDsiLCIndXNlIHN0cmljdCc7XG5cbmNsYXNzIERhdGVQYXJ0IHtcbiAgY29uc3RydWN0b3Ioe1xuICAgIHRva2VuLFxuICAgIGRhdGUsXG4gICAgcGFydHMsXG4gICAgbG9jYWxlc1xuICB9KSB7XG4gICAgdGhpcy50b2tlbiA9IHRva2VuO1xuICAgIHRoaXMuZGF0ZSA9IGRhdGUgfHwgbmV3IERhdGUoKTtcbiAgICB0aGlzLnBhcnRzID0gcGFydHMgfHwgW3RoaXNdO1xuICAgIHRoaXMubG9jYWxlcyA9IGxvY2FsZXMgfHwge307XG4gIH1cblxuICB1cCgpIHt9XG5cbiAgZG93bigpIHt9XG5cbiAgbmV4dCgpIHtcbiAgICBjb25zdCBjdXJyZW50SWR4ID0gdGhpcy5wYXJ0cy5pbmRleE9mKHRoaXMpO1xuICAgIHJldHVybiB0aGlzLnBhcnRzLmZpbmQoKHBhcnQsIGlkeCkgPT4gaWR4ID4gY3VycmVudElkeCAmJiBwYXJ0IGluc3RhbmNlb2YgRGF0ZVBhcnQpO1xuICB9XG5cbiAgc2V0VG8odmFsKSB7fVxuXG4gIHByZXYoKSB7XG4gICAgbGV0IHBhcnRzID0gW10uY29uY2F0KHRoaXMucGFydHMpLnJldmVyc2UoKTtcbiAgICBjb25zdCBjdXJyZW50SWR4ID0gcGFydHMuaW5kZXhPZih0aGlzKTtcbiAgICByZXR1cm4gcGFydHMuZmluZCgocGFydCwgaWR4KSA9PiBpZHggPiBjdXJyZW50SWR4ICYmIHBhcnQgaW5zdGFuY2VvZiBEYXRlUGFydCk7XG4gIH1cblxuICB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gU3RyaW5nKHRoaXMuZGF0ZSk7XG4gIH1cblxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IERhdGVQYXJ0OyIsIid1c2Ugc3RyaWN0JztcblxuY29uc3QgRGF0ZVBhcnQgPSByZXF1aXJlKCcuL2RhdGVwYXJ0Jyk7XG5cbmNsYXNzIE1lcmlkaWVtIGV4dGVuZHMgRGF0ZVBhcnQge1xuICBjb25zdHJ1Y3RvcihvcHRzID0ge30pIHtcbiAgICBzdXBlcihvcHRzKTtcbiAgfVxuXG4gIHVwKCkge1xuICAgIHRoaXMuZGF0ZS5zZXRIb3VycygodGhpcy5kYXRlLmdldEhvdXJzKCkgKyAxMikgJSAyNCk7XG4gIH1cblxuICBkb3duKCkge1xuICAgIHRoaXMudXAoKTtcbiAgfVxuXG4gIHRvU3RyaW5nKCkge1xuICAgIGxldCBtZXJpZGllbSA9IHRoaXMuZGF0ZS5nZXRIb3VycygpID4gMTIgPyAncG0nIDogJ2FtJztcbiAgICByZXR1cm4gL1xcQS8udGVzdCh0aGlzLnRva2VuKSA/IG1lcmlkaWVtLnRvVXBwZXJDYXNlKCkgOiBtZXJpZGllbTtcbiAgfVxuXG59XG5cbm1vZHVsZS5leHBvcnRzID0gTWVyaWRpZW07IiwiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBEYXRlUGFydCA9IHJlcXVpcmUoJy4vZGF0ZXBhcnQnKTtcblxuY29uc3QgcG9zID0gbiA9PiB7XG4gIG4gPSBuICUgMTA7XG4gIHJldHVybiBuID09PSAxID8gJ3N0JyA6IG4gPT09IDIgPyAnbmQnIDogbiA9PT0gMyA/ICdyZCcgOiAndGgnO1xufTtcblxuY2xhc3MgRGF5IGV4dGVuZHMgRGF0ZVBhcnQge1xuICBjb25zdHJ1Y3RvcihvcHRzID0ge30pIHtcbiAgICBzdXBlcihvcHRzKTtcbiAgfVxuXG4gIHVwKCkge1xuICAgIHRoaXMuZGF0ZS5zZXREYXRlKHRoaXMuZGF0ZS5nZXREYXRlKCkgKyAxKTtcbiAgfVxuXG4gIGRvd24oKSB7XG4gICAgdGhpcy5kYXRlLnNldERhdGUodGhpcy5kYXRlLmdldERhdGUoKSAtIDEpO1xuICB9XG5cbiAgc2V0VG8odmFsKSB7XG4gICAgdGhpcy5kYXRlLnNldERhdGUocGFyc2VJbnQodmFsLnN1YnN0cigtMikpKTtcbiAgfVxuXG4gIHRvU3RyaW5nKCkge1xuICAgIGxldCBkYXRlID0gdGhpcy5kYXRlLmdldERhdGUoKTtcbiAgICBsZXQgZGF5ID0gdGhpcy5kYXRlLmdldERheSgpO1xuICAgIHJldHVybiB0aGlzLnRva2VuID09PSAnREQnID8gU3RyaW5nKGRhdGUpLnBhZFN0YXJ0KDIsICcwJykgOiB0aGlzLnRva2VuID09PSAnRG8nID8gZGF0ZSArIHBvcyhkYXRlKSA6IHRoaXMudG9rZW4gPT09ICdkJyA/IGRheSArIDEgOiB0aGlzLnRva2VuID09PSAnZGRkJyA/IHRoaXMubG9jYWxlcy53ZWVrZGF5c1Nob3J0W2RheV0gOiB0aGlzLnRva2VuID09PSAnZGRkZCcgPyB0aGlzLmxvY2FsZXMud2Vla2RheXNbZGF5XSA6IGRhdGU7XG4gIH1cblxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IERheTsiLCIndXNlIHN0cmljdCc7XG5cbmNvbnN0IERhdGVQYXJ0ID0gcmVxdWlyZSgnLi9kYXRlcGFydCcpO1xuXG5jbGFzcyBIb3VycyBleHRlbmRzIERhdGVQYXJ0IHtcbiAgY29uc3RydWN0b3Iob3B0cyA9IHt9KSB7XG4gICAgc3VwZXIob3B0cyk7XG4gIH1cblxuICB1cCgpIHtcbiAgICB0aGlzLmRhdGUuc2V0SG91cnModGhpcy5kYXRlLmdldEhvdXJzKCkgKyAxKTtcbiAgfVxuXG4gIGRvd24oKSB7XG4gICAgdGhpcy5kYXRlLnNldEhvdXJzKHRoaXMuZGF0ZS5nZXRIb3VycygpIC0gMSk7XG4gIH1cblxuICBzZXRUbyh2YWwpIHtcbiAgICB0aGlzLmRhdGUuc2V0SG91cnMocGFyc2VJbnQodmFsLnN1YnN0cigtMikpKTtcbiAgfVxuXG4gIHRvU3RyaW5nKCkge1xuICAgIGxldCBob3VycyA9IHRoaXMuZGF0ZS5nZXRIb3VycygpO1xuICAgIGlmICgvaC8udGVzdCh0aGlzLnRva2VuKSkgaG91cnMgPSBob3VycyAlIDEyIHx8IDEyO1xuICAgIHJldHVybiB0aGlzLnRva2VuLmxlbmd0aCA+IDEgPyBTdHJpbmcoaG91cnMpLnBhZFN0YXJ0KDIsICcwJykgOiBob3VycztcbiAgfVxuXG59XG5cbm1vZHVsZS5leHBvcnRzID0gSG91cnM7IiwiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBEYXRlUGFydCA9IHJlcXVpcmUoJy4vZGF0ZXBhcnQnKTtcblxuY2xhc3MgTWlsbGlzZWNvbmRzIGV4dGVuZHMgRGF0ZVBhcnQge1xuICBjb25zdHJ1Y3RvcihvcHRzID0ge30pIHtcbiAgICBzdXBlcihvcHRzKTtcbiAgfVxuXG4gIHVwKCkge1xuICAgIHRoaXMuZGF0ZS5zZXRNaWxsaXNlY29uZHModGhpcy5kYXRlLmdldE1pbGxpc2Vjb25kcygpICsgMSk7XG4gIH1cblxuICBkb3duKCkge1xuICAgIHRoaXMuZGF0ZS5zZXRNaWxsaXNlY29uZHModGhpcy5kYXRlLmdldE1pbGxpc2Vjb25kcygpIC0gMSk7XG4gIH1cblxuICBzZXRUbyh2YWwpIHtcbiAgICB0aGlzLmRhdGUuc2V0TWlsbGlzZWNvbmRzKHBhcnNlSW50KHZhbC5zdWJzdHIoLXRoaXMudG9rZW4ubGVuZ3RoKSkpO1xuICB9XG5cbiAgdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIFN0cmluZyh0aGlzLmRhdGUuZ2V0TWlsbGlzZWNvbmRzKCkpLnBhZFN0YXJ0KDQsICcwJykuc3Vic3RyKDAsIHRoaXMudG9rZW4ubGVuZ3RoKTtcbiAgfVxuXG59XG5cbm1vZHVsZS5leHBvcnRzID0gTWlsbGlzZWNvbmRzOyIsIid1c2Ugc3RyaWN0JztcblxuY29uc3QgRGF0ZVBhcnQgPSByZXF1aXJlKCcuL2RhdGVwYXJ0Jyk7XG5cbmNsYXNzIE1pbnV0ZXMgZXh0ZW5kcyBEYXRlUGFydCB7XG4gIGNvbnN0cnVjdG9yKG9wdHMgPSB7fSkge1xuICAgIHN1cGVyKG9wdHMpO1xuICB9XG5cbiAgdXAoKSB7XG4gICAgdGhpcy5kYXRlLnNldE1pbnV0ZXModGhpcy5kYXRlLmdldE1pbnV0ZXMoKSArIDEpO1xuICB9XG5cbiAgZG93bigpIHtcbiAgICB0aGlzLmRhdGUuc2V0TWludXRlcyh0aGlzLmRhdGUuZ2V0TWludXRlcygpIC0gMSk7XG4gIH1cblxuICBzZXRUbyh2YWwpIHtcbiAgICB0aGlzLmRhdGUuc2V0TWludXRlcyhwYXJzZUludCh2YWwuc3Vic3RyKC0yKSkpO1xuICB9XG5cbiAgdG9TdHJpbmcoKSB7XG4gICAgbGV0IG0gPSB0aGlzLmRhdGUuZ2V0TWludXRlcygpO1xuICAgIHJldHVybiB0aGlzLnRva2VuLmxlbmd0aCA+IDEgPyBTdHJpbmcobSkucGFkU3RhcnQoMiwgJzAnKSA6IG07XG4gIH1cblxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IE1pbnV0ZXM7IiwiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBEYXRlUGFydCA9IHJlcXVpcmUoJy4vZGF0ZXBhcnQnKTtcblxuY2xhc3MgTW9udGggZXh0ZW5kcyBEYXRlUGFydCB7XG4gIGNvbnN0cnVjdG9yKG9wdHMgPSB7fSkge1xuICAgIHN1cGVyKG9wdHMpO1xuICB9XG5cbiAgdXAoKSB7XG4gICAgdGhpcy5kYXRlLnNldE1vbnRoKHRoaXMuZGF0ZS5nZXRNb250aCgpICsgMSk7XG4gIH1cblxuICBkb3duKCkge1xuICAgIHRoaXMuZGF0ZS5zZXRNb250aCh0aGlzLmRhdGUuZ2V0TW9udGgoKSAtIDEpO1xuICB9XG5cbiAgc2V0VG8odmFsKSB7XG4gICAgdmFsID0gcGFyc2VJbnQodmFsLnN1YnN0cigtMikpIC0gMTtcbiAgICB0aGlzLmRhdGUuc2V0TW9udGgodmFsIDwgMCA/IDAgOiB2YWwpO1xuICB9XG5cbiAgdG9TdHJpbmcoKSB7XG4gICAgbGV0IG1vbnRoID0gdGhpcy5kYXRlLmdldE1vbnRoKCk7XG4gICAgbGV0IHRsID0gdGhpcy50b2tlbi5sZW5ndGg7XG4gICAgcmV0dXJuIHRsID09PSAyID8gU3RyaW5nKG1vbnRoICsgMSkucGFkU3RhcnQoMiwgJzAnKSA6IHRsID09PSAzID8gdGhpcy5sb2NhbGVzLm1vbnRoc1Nob3J0W21vbnRoXSA6IHRsID09PSA0ID8gdGhpcy5sb2NhbGVzLm1vbnRoc1ttb250aF0gOiBTdHJpbmcobW9udGggKyAxKTtcbiAgfVxuXG59XG5cbm1vZHVsZS5leHBvcnRzID0gTW9udGg7IiwiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBEYXRlUGFydCA9IHJlcXVpcmUoJy4vZGF0ZXBhcnQnKTtcblxuY2xhc3MgU2Vjb25kcyBleHRlbmRzIERhdGVQYXJ0IHtcbiAgY29uc3RydWN0b3Iob3B0cyA9IHt9KSB7XG4gICAgc3VwZXIob3B0cyk7XG4gIH1cblxuICB1cCgpIHtcbiAgICB0aGlzLmRhdGUuc2V0U2Vjb25kcyh0aGlzLmRhdGUuZ2V0U2Vjb25kcygpICsgMSk7XG4gIH1cblxuICBkb3duKCkge1xuICAgIHRoaXMuZGF0ZS5zZXRTZWNvbmRzKHRoaXMuZGF0ZS5nZXRTZWNvbmRzKCkgLSAxKTtcbiAgfVxuXG4gIHNldFRvKHZhbCkge1xuICAgIHRoaXMuZGF0ZS5zZXRTZWNvbmRzKHBhcnNlSW50KHZhbC5zdWJzdHIoLTIpKSk7XG4gIH1cblxuICB0b1N0cmluZygpIHtcbiAgICBsZXQgcyA9IHRoaXMuZGF0ZS5nZXRTZWNvbmRzKCk7XG4gICAgcmV0dXJuIHRoaXMudG9rZW4ubGVuZ3RoID4gMSA/IFN0cmluZyhzKS5wYWRTdGFydCgyLCAnMCcpIDogcztcbiAgfVxuXG59XG5cbm1vZHVsZS5leHBvcnRzID0gU2Vjb25kczsiLCIndXNlIHN0cmljdCc7XG5cbmNvbnN0IERhdGVQYXJ0ID0gcmVxdWlyZSgnLi9kYXRlcGFydCcpO1xuXG5jbGFzcyBZZWFyIGV4dGVuZHMgRGF0ZVBhcnQge1xuICBjb25zdHJ1Y3RvcihvcHRzID0ge30pIHtcbiAgICBzdXBlcihvcHRzKTtcbiAgfVxuXG4gIHVwKCkge1xuICAgIHRoaXMuZGF0ZS5zZXRGdWxsWWVhcih0aGlzLmRhdGUuZ2V0RnVsbFllYXIoKSArIDEpO1xuICB9XG5cbiAgZG93bigpIHtcbiAgICB0aGlzLmRhdGUuc2V0RnVsbFllYXIodGhpcy5kYXRlLmdldEZ1bGxZZWFyKCkgLSAxKTtcbiAgfVxuXG4gIHNldFRvKHZhbCkge1xuICAgIHRoaXMuZGF0ZS5zZXRGdWxsWWVhcih2YWwuc3Vic3RyKC00KSk7XG4gIH1cblxuICB0b1N0cmluZygpIHtcbiAgICBsZXQgeWVhciA9IFN0cmluZyh0aGlzLmRhdGUuZ2V0RnVsbFllYXIoKSkucGFkU3RhcnQoNCwgJzAnKTtcbiAgICByZXR1cm4gdGhpcy50b2tlbi5sZW5ndGggPT09IDIgPyB5ZWFyLnN1YnN0cigtMikgOiB5ZWFyO1xuICB9XG5cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBZZWFyOyIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIERhdGVQYXJ0OiByZXF1aXJlKCcuL2RhdGVwYXJ0JyksXG4gIE1lcmlkaWVtOiByZXF1aXJlKCcuL21lcmlkaWVtJyksXG4gIERheTogcmVxdWlyZSgnLi9kYXknKSxcbiAgSG91cnM6IHJlcXVpcmUoJy4vaG91cnMnKSxcbiAgTWlsbGlzZWNvbmRzOiByZXF1aXJlKCcuL21pbGxpc2Vjb25kcycpLFxuICBNaW51dGVzOiByZXF1aXJlKCcuL21pbnV0ZXMnKSxcbiAgTW9udGg6IHJlcXVpcmUoJy4vbW9udGgnKSxcbiAgU2Vjb25kczogcmVxdWlyZSgnLi9zZWNvbmRzJyksXG4gIFllYXI6IHJlcXVpcmUoJy4veWVhcicpXG59OyIsIid1c2Ugc3RyaWN0JztcblxuZnVuY3Rpb24gYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBrZXksIGFyZykgeyB0cnkgeyB2YXIgaW5mbyA9IGdlbltrZXldKGFyZyk7IHZhciB2YWx1ZSA9IGluZm8udmFsdWU7IH0gY2F0Y2ggKGVycm9yKSB7IHJlamVjdChlcnJvcik7IHJldHVybjsgfSBpZiAoaW5mby5kb25lKSB7IHJlc29sdmUodmFsdWUpOyB9IGVsc2UgeyBQcm9taXNlLnJlc29sdmUodmFsdWUpLnRoZW4oX25leHQsIF90aHJvdyk7IH0gfVxuXG5mdW5jdGlvbiBfYXN5bmNUb0dlbmVyYXRvcihmbikgeyByZXR1cm4gZnVuY3Rpb24gKCkgeyB2YXIgc2VsZiA9IHRoaXMsIGFyZ3MgPSBhcmd1bWVudHM7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7IHZhciBnZW4gPSBmbi5hcHBseShzZWxmLCBhcmdzKTsgZnVuY3Rpb24gX25leHQodmFsdWUpIHsgYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBcIm5leHRcIiwgdmFsdWUpOyB9IGZ1bmN0aW9uIF90aHJvdyhlcnIpIHsgYXN5bmNHZW5lcmF0b3JTdGVwKGdlbiwgcmVzb2x2ZSwgcmVqZWN0LCBfbmV4dCwgX3Rocm93LCBcInRocm93XCIsIGVycik7IH0gX25leHQodW5kZWZpbmVkKTsgfSk7IH07IH1cblxuY29uc3QgY29sb3IgPSByZXF1aXJlKCdrbGV1cicpO1xuXG5jb25zdCBQcm9tcHQgPSByZXF1aXJlKCcuL3Byb21wdCcpO1xuXG5jb25zdCBfcmVxdWlyZSA9IHJlcXVpcmUoJy4uL3V0aWwnKSxcbiAgICAgIHN0eWxlID0gX3JlcXVpcmUuc3R5bGUsXG4gICAgICBjbGVhciA9IF9yZXF1aXJlLmNsZWFyLFxuICAgICAgZmlndXJlcyA9IF9yZXF1aXJlLmZpZ3VyZXM7XG5cbmNvbnN0IF9yZXF1aXJlMiA9IHJlcXVpcmUoJ3Npc3RlcmFuc2knKSxcbiAgICAgIGVyYXNlID0gX3JlcXVpcmUyLmVyYXNlLFxuICAgICAgY3Vyc29yID0gX3JlcXVpcmUyLmN1cnNvcjtcblxuY29uc3QgX3JlcXVpcmUzID0gcmVxdWlyZSgnLi4vZGF0ZXBhcnRzJyksXG4gICAgICBEYXRlUGFydCA9IF9yZXF1aXJlMy5EYXRlUGFydCxcbiAgICAgIE1lcmlkaWVtID0gX3JlcXVpcmUzLk1lcmlkaWVtLFxuICAgICAgRGF5ID0gX3JlcXVpcmUzLkRheSxcbiAgICAgIEhvdXJzID0gX3JlcXVpcmUzLkhvdXJzLFxuICAgICAgTWlsbGlzZWNvbmRzID0gX3JlcXVpcmUzLk1pbGxpc2Vjb25kcyxcbiAgICAgIE1pbnV0ZXMgPSBfcmVxdWlyZTMuTWludXRlcyxcbiAgICAgIE1vbnRoID0gX3JlcXVpcmUzLk1vbnRoLFxuICAgICAgU2Vjb25kcyA9IF9yZXF1aXJlMy5TZWNvbmRzLFxuICAgICAgWWVhciA9IF9yZXF1aXJlMy5ZZWFyO1xuXG5jb25zdCByZWdleCA9IC9cXFxcKC4pfFwiKCg/OlxcXFxbXCJcXFxcXXxbXlwiXSkrKVwifChEW0RvXT98ZHszLDR9fGQpfChNezEsNH0pfChZWSg/OllZKT8pfChbYUFdKXwoW0hoXXsxLDJ9KXwobXsxLDJ9KXwoc3sxLDJ9KXwoU3sxLDR9KXwuL2c7XG5jb25zdCByZWdleEdyb3VwcyA9IHtcbiAgMTogKHtcbiAgICB0b2tlblxuICB9KSA9PiB0b2tlbi5yZXBsYWNlKC9cXFxcKC4pL2csICckMScpLFxuICAyOiBvcHRzID0+IG5ldyBEYXkob3B0cyksXG4gIC8vIERheSAvLyBUT0RPXG4gIDM6IG9wdHMgPT4gbmV3IE1vbnRoKG9wdHMpLFxuICAvLyBNb250aFxuICA0OiBvcHRzID0+IG5ldyBZZWFyKG9wdHMpLFxuICAvLyBZZWFyXG4gIDU6IG9wdHMgPT4gbmV3IE1lcmlkaWVtKG9wdHMpLFxuICAvLyBBTS9QTSAvLyBUT0RPIChzcGVjaWFsKVxuICA2OiBvcHRzID0+IG5ldyBIb3VycyhvcHRzKSxcbiAgLy8gSG91cnNcbiAgNzogb3B0cyA9PiBuZXcgTWludXRlcyhvcHRzKSxcbiAgLy8gTWludXRlc1xuICA4OiBvcHRzID0+IG5ldyBTZWNvbmRzKG9wdHMpLFxuICAvLyBTZWNvbmRzXG4gIDk6IG9wdHMgPT4gbmV3IE1pbGxpc2Vjb25kcyhvcHRzKSAvLyBGcmFjdGlvbmFsIHNlY29uZHNcblxufTtcbmNvbnN0IGRmbHRMb2NhbGVzID0ge1xuICBtb250aHM6ICdKYW51YXJ5LEZlYnJ1YXJ5LE1hcmNoLEFwcmlsLE1heSxKdW5lLEp1bHksQXVndXN0LFNlcHRlbWJlcixPY3RvYmVyLE5vdmVtYmVyLERlY2VtYmVyJy5zcGxpdCgnLCcpLFxuICBtb250aHNTaG9ydDogJ0phbixGZWIsTWFyLEFwcixNYXksSnVuLEp1bCxBdWcsU2VwLE9jdCxOb3YsRGVjJy5zcGxpdCgnLCcpLFxuICB3ZWVrZGF5czogJ1N1bmRheSxNb25kYXksVHVlc2RheSxXZWRuZXNkYXksVGh1cnNkYXksRnJpZGF5LFNhdHVyZGF5Jy5zcGxpdCgnLCcpLFxuICB3ZWVrZGF5c1Nob3J0OiAnU3VuLE1vbixUdWUsV2VkLFRodSxGcmksU2F0Jy5zcGxpdCgnLCcpXG59O1xuLyoqXG4gKiBEYXRlUHJvbXB0IEJhc2UgRWxlbWVudFxuICogQHBhcmFtIHtPYmplY3R9IG9wdHMgT3B0aW9uc1xuICogQHBhcmFtIHtTdHJpbmd9IG9wdHMubWVzc2FnZSBNZXNzYWdlXG4gKiBAcGFyYW0ge051bWJlcn0gW29wdHMuaW5pdGlhbF0gSW5kZXggb2YgZGVmYXVsdCB2YWx1ZVxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLm1hc2tdIFRoZSBmb3JtYXQgbWFza1xuICogQHBhcmFtIHtvYmplY3R9IFtvcHRzLmxvY2FsZXNdIFRoZSBkYXRlIGxvY2FsZXNcbiAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5lcnJvcl0gVGhlIGVycm9yIG1lc3NhZ2Ugc2hvd24gb24gaW52YWxpZCB2YWx1ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdHMudmFsaWRhdGVdIEZ1bmN0aW9uIHRvIHZhbGlkYXRlIHRoZSBzdWJtaXR0ZWQgdmFsdWVcbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICovXG5cbmNsYXNzIERhdGVQcm9tcHQgZXh0ZW5kcyBQcm9tcHQge1xuICBjb25zdHJ1Y3RvcihvcHRzID0ge30pIHtcbiAgICBzdXBlcihvcHRzKTtcbiAgICB0aGlzLm1zZyA9IG9wdHMubWVzc2FnZTtcbiAgICB0aGlzLmN1cnNvciA9IDA7XG4gICAgdGhpcy50eXBlZCA9ICcnO1xuICAgIHRoaXMubG9jYWxlcyA9IE9iamVjdC5hc3NpZ24oZGZsdExvY2FsZXMsIG9wdHMubG9jYWxlcyk7XG4gICAgdGhpcy5fZGF0ZSA9IG9wdHMuaW5pdGlhbCB8fCBuZXcgRGF0ZSgpO1xuICAgIHRoaXMuZXJyb3JNc2cgPSBvcHRzLmVycm9yIHx8ICdQbGVhc2UgRW50ZXIgQSBWYWxpZCBWYWx1ZSc7XG5cbiAgICB0aGlzLnZhbGlkYXRvciA9IG9wdHMudmFsaWRhdGUgfHwgKCgpID0+IHRydWUpO1xuXG4gICAgdGhpcy5tYXNrID0gb3B0cy5tYXNrIHx8ICdZWVlZLU1NLUREIEhIOm1tOnNzJztcbiAgICB0aGlzLmNsZWFyID0gY2xlYXIoJycsIHRoaXMub3V0LmNvbHVtbnMpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBnZXQgdmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0ZTtcbiAgfVxuXG4gIGdldCBkYXRlKCkge1xuICAgIHJldHVybiB0aGlzLl9kYXRlO1xuICB9XG5cbiAgc2V0IGRhdGUoZGF0ZSkge1xuICAgIGlmIChkYXRlKSB0aGlzLl9kYXRlLnNldFRpbWUoZGF0ZS5nZXRUaW1lKCkpO1xuICB9XG5cbiAgc2V0IG1hc2sobWFzaykge1xuICAgIGxldCByZXN1bHQ7XG4gICAgdGhpcy5wYXJ0cyA9IFtdO1xuXG4gICAgd2hpbGUgKHJlc3VsdCA9IHJlZ2V4LmV4ZWMobWFzaykpIHtcbiAgICAgIGxldCBtYXRjaCA9IHJlc3VsdC5zaGlmdCgpO1xuICAgICAgbGV0IGlkeCA9IHJlc3VsdC5maW5kSW5kZXgoZ3IgPT4gZ3IgIT0gbnVsbCk7XG4gICAgICB0aGlzLnBhcnRzLnB1c2goaWR4IGluIHJlZ2V4R3JvdXBzID8gcmVnZXhHcm91cHNbaWR4XSh7XG4gICAgICAgIHRva2VuOiByZXN1bHRbaWR4XSB8fCBtYXRjaCxcbiAgICAgICAgZGF0ZTogdGhpcy5kYXRlLFxuICAgICAgICBwYXJ0czogdGhpcy5wYXJ0cyxcbiAgICAgICAgbG9jYWxlczogdGhpcy5sb2NhbGVzXG4gICAgICB9KSA6IHJlc3VsdFtpZHhdIHx8IG1hdGNoKTtcbiAgICB9XG5cbiAgICBsZXQgcGFydHMgPSB0aGlzLnBhcnRzLnJlZHVjZSgoYXJyLCBpKSA9PiB7XG4gICAgICBpZiAodHlwZW9mIGkgPT09ICdzdHJpbmcnICYmIHR5cGVvZiBhcnJbYXJyLmxlbmd0aCAtIDFdID09PSAnc3RyaW5nJykgYXJyW2Fyci5sZW5ndGggLSAxXSArPSBpO2Vsc2UgYXJyLnB1c2goaSk7XG4gICAgICByZXR1cm4gYXJyO1xuICAgIH0sIFtdKTtcbiAgICB0aGlzLnBhcnRzLnNwbGljZSgwKTtcbiAgICB0aGlzLnBhcnRzLnB1c2goLi4ucGFydHMpO1xuICAgIHRoaXMucmVzZXQoKTtcbiAgfVxuXG4gIG1vdmVDdXJzb3Iobikge1xuICAgIHRoaXMudHlwZWQgPSAnJztcbiAgICB0aGlzLmN1cnNvciA9IG47XG4gICAgdGhpcy5maXJlKCk7XG4gIH1cblxuICByZXNldCgpIHtcbiAgICB0aGlzLm1vdmVDdXJzb3IodGhpcy5wYXJ0cy5maW5kSW5kZXgocCA9PiBwIGluc3RhbmNlb2YgRGF0ZVBhcnQpKTtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZXhpdCgpIHtcbiAgICB0aGlzLmFib3J0KCk7XG4gIH1cblxuICBhYm9ydCgpIHtcbiAgICB0aGlzLmRvbmUgPSB0aGlzLmFib3J0ZWQgPSB0cnVlO1xuICAgIHRoaXMuZXJyb3IgPSBmYWxzZTtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICAgIHRoaXMub3V0LndyaXRlKCdcXG4nKTtcbiAgICB0aGlzLmNsb3NlKCk7XG4gIH1cblxuICB2YWxpZGF0ZSgpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgcmV0dXJuIF9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKiAoKSB7XG4gICAgICBsZXQgdmFsaWQgPSB5aWVsZCBfdGhpcy52YWxpZGF0b3IoX3RoaXMudmFsdWUpO1xuXG4gICAgICBpZiAodHlwZW9mIHZhbGlkID09PSAnc3RyaW5nJykge1xuICAgICAgICBfdGhpcy5lcnJvck1zZyA9IHZhbGlkO1xuICAgICAgICB2YWxpZCA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBfdGhpcy5lcnJvciA9ICF2YWxpZDtcbiAgICB9KSgpO1xuICB9XG5cbiAgc3VibWl0KCkge1xuICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgcmV0dXJuIF9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKiAoKSB7XG4gICAgICB5aWVsZCBfdGhpczIudmFsaWRhdGUoKTtcblxuICAgICAgaWYgKF90aGlzMi5lcnJvcikge1xuICAgICAgICBfdGhpczIuY29sb3IgPSAncmVkJztcblxuICAgICAgICBfdGhpczIuZmlyZSgpO1xuXG4gICAgICAgIF90aGlzMi5yZW5kZXIoKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIF90aGlzMi5kb25lID0gdHJ1ZTtcbiAgICAgIF90aGlzMi5hYm9ydGVkID0gZmFsc2U7XG5cbiAgICAgIF90aGlzMi5maXJlKCk7XG5cbiAgICAgIF90aGlzMi5yZW5kZXIoKTtcblxuICAgICAgX3RoaXMyLm91dC53cml0ZSgnXFxuJyk7XG5cbiAgICAgIF90aGlzMi5jbG9zZSgpO1xuICAgIH0pKCk7XG4gIH1cblxuICB1cCgpIHtcbiAgICB0aGlzLnR5cGVkID0gJyc7XG4gICAgdGhpcy5wYXJ0c1t0aGlzLmN1cnNvcl0udXAoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZG93bigpIHtcbiAgICB0aGlzLnR5cGVkID0gJyc7XG4gICAgdGhpcy5wYXJ0c1t0aGlzLmN1cnNvcl0uZG93bigpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBsZWZ0KCkge1xuICAgIGxldCBwcmV2ID0gdGhpcy5wYXJ0c1t0aGlzLmN1cnNvcl0ucHJldigpO1xuICAgIGlmIChwcmV2ID09IG51bGwpIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgICB0aGlzLm1vdmVDdXJzb3IodGhpcy5wYXJ0cy5pbmRleE9mKHByZXYpKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgcmlnaHQoKSB7XG4gICAgbGV0IG5leHQgPSB0aGlzLnBhcnRzW3RoaXMuY3Vyc29yXS5uZXh0KCk7XG4gICAgaWYgKG5leHQgPT0gbnVsbCkgcmV0dXJuIHRoaXMuYmVsbCgpO1xuICAgIHRoaXMubW92ZUN1cnNvcih0aGlzLnBhcnRzLmluZGV4T2YobmV4dCkpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBuZXh0KCkge1xuICAgIGxldCBuZXh0ID0gdGhpcy5wYXJ0c1t0aGlzLmN1cnNvcl0ubmV4dCgpO1xuICAgIHRoaXMubW92ZUN1cnNvcihuZXh0ID8gdGhpcy5wYXJ0cy5pbmRleE9mKG5leHQpIDogdGhpcy5wYXJ0cy5maW5kSW5kZXgocGFydCA9PiBwYXJ0IGluc3RhbmNlb2YgRGF0ZVBhcnQpKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgXyhjKSB7XG4gICAgaWYgKC9cXGQvLnRlc3QoYykpIHtcbiAgICAgIHRoaXMudHlwZWQgKz0gYztcbiAgICAgIHRoaXMucGFydHNbdGhpcy5jdXJzb3JdLnNldFRvKHRoaXMudHlwZWQpO1xuICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICB9XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgaWYgKHRoaXMuY2xvc2VkKSByZXR1cm47XG4gICAgaWYgKHRoaXMuZmlyc3RSZW5kZXIpIHRoaXMub3V0LndyaXRlKGN1cnNvci5oaWRlKTtlbHNlIHRoaXMub3V0LndyaXRlKGNsZWFyKHRoaXMub3V0cHV0VGV4dCwgdGhpcy5vdXQuY29sdW1ucykpO1xuICAgIHN1cGVyLnJlbmRlcigpOyAvLyBQcmludCBwcm9tcHRcblxuICAgIHRoaXMub3V0cHV0VGV4dCA9IFtzdHlsZS5zeW1ib2wodGhpcy5kb25lLCB0aGlzLmFib3J0ZWQpLCBjb2xvci5ib2xkKHRoaXMubXNnKSwgc3R5bGUuZGVsaW1pdGVyKGZhbHNlKSwgdGhpcy5wYXJ0cy5yZWR1Y2UoKGFyciwgcCwgaWR4KSA9PiBhcnIuY29uY2F0KGlkeCA9PT0gdGhpcy5jdXJzb3IgJiYgIXRoaXMuZG9uZSA/IGNvbG9yLmN5YW4oKS51bmRlcmxpbmUocC50b1N0cmluZygpKSA6IHApLCBbXSkuam9pbignJyldLmpvaW4oJyAnKTsgLy8gUHJpbnQgZXJyb3JcblxuICAgIGlmICh0aGlzLmVycm9yKSB7XG4gICAgICB0aGlzLm91dHB1dFRleHQgKz0gdGhpcy5lcnJvck1zZy5zcGxpdCgnXFxuJykucmVkdWNlKChhLCBsLCBpKSA9PiBhICsgYFxcbiR7aSA/IGAgYCA6IGZpZ3VyZXMucG9pbnRlclNtYWxsfSAke2NvbG9yLnJlZCgpLml0YWxpYyhsKX1gLCBgYCk7XG4gICAgfVxuXG4gICAgdGhpcy5vdXQud3JpdGUoZXJhc2UubGluZSArIGN1cnNvci50bygwKSArIHRoaXMub3V0cHV0VGV4dCk7XG4gIH1cblxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IERhdGVQcm9tcHQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmZ1bmN0aW9uIGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywga2V5LCBhcmcpIHsgdHJ5IHsgdmFyIGluZm8gPSBnZW5ba2V5XShhcmcpOyB2YXIgdmFsdWUgPSBpbmZvLnZhbHVlOyB9IGNhdGNoIChlcnJvcikgeyByZWplY3QoZXJyb3IpOyByZXR1cm47IH0gaWYgKGluZm8uZG9uZSkgeyByZXNvbHZlKHZhbHVlKTsgfSBlbHNlIHsgUHJvbWlzZS5yZXNvbHZlKHZhbHVlKS50aGVuKF9uZXh0LCBfdGhyb3cpOyB9IH1cblxuZnVuY3Rpb24gX2FzeW5jVG9HZW5lcmF0b3IoZm4pIHsgcmV0dXJuIGZ1bmN0aW9uICgpIHsgdmFyIHNlbGYgPSB0aGlzLCBhcmdzID0gYXJndW1lbnRzOyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2YXIgZ2VuID0gZm4uYXBwbHkoc2VsZiwgYXJncyk7IGZ1bmN0aW9uIF9uZXh0KHZhbHVlKSB7IGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJuZXh0XCIsIHZhbHVlKTsgfSBmdW5jdGlvbiBfdGhyb3coZXJyKSB7IGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJ0aHJvd1wiLCBlcnIpOyB9IF9uZXh0KHVuZGVmaW5lZCk7IH0pOyB9OyB9XG5cbmNvbnN0IGNvbG9yID0gcmVxdWlyZSgna2xldXInKTtcblxuY29uc3QgUHJvbXB0ID0gcmVxdWlyZSgnLi9wcm9tcHQnKTtcblxuY29uc3QgX3JlcXVpcmUgPSByZXF1aXJlKCdzaXN0ZXJhbnNpJyksXG4gICAgICBjdXJzb3IgPSBfcmVxdWlyZS5jdXJzb3IsXG4gICAgICBlcmFzZSA9IF9yZXF1aXJlLmVyYXNlO1xuXG5jb25zdCBfcmVxdWlyZTIgPSByZXF1aXJlKCcuLi91dGlsJyksXG4gICAgICBzdHlsZSA9IF9yZXF1aXJlMi5zdHlsZSxcbiAgICAgIGZpZ3VyZXMgPSBfcmVxdWlyZTIuZmlndXJlcyxcbiAgICAgIGNsZWFyID0gX3JlcXVpcmUyLmNsZWFyLFxuICAgICAgbGluZXMgPSBfcmVxdWlyZTIubGluZXM7XG5cbmNvbnN0IGlzTnVtYmVyID0gL1swLTldLztcblxuY29uc3QgaXNEZWYgPSBhbnkgPT4gYW55ICE9PSB1bmRlZmluZWQ7XG5cbmNvbnN0IHJvdW5kID0gKG51bWJlciwgcHJlY2lzaW9uKSA9PiB7XG4gIGxldCBmYWN0b3IgPSBNYXRoLnBvdygxMCwgcHJlY2lzaW9uKTtcbiAgcmV0dXJuIE1hdGgucm91bmQobnVtYmVyICogZmFjdG9yKSAvIGZhY3Rvcjtcbn07XG4vKipcbiAqIE51bWJlclByb21wdCBCYXNlIEVsZW1lbnRcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIE9wdGlvbnNcbiAqIEBwYXJhbSB7U3RyaW5nfSBvcHRzLm1lc3NhZ2UgTWVzc2FnZVxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLnN0eWxlPSdkZWZhdWx0J10gUmVuZGVyIHN0eWxlXG4gKiBAcGFyYW0ge051bWJlcn0gW29wdHMuaW5pdGlhbF0gRGVmYXVsdCB2YWx1ZVxuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRzLm1heD0rSW5maW5pdHldIE1heCB2YWx1ZVxuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRzLm1pbj0tSW5maW5pdHldIE1pbiB2YWx1ZVxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0cy5mbG9hdD1mYWxzZV0gUGFyc2UgaW5wdXQgYXMgZmxvYXRzXG4gKiBAcGFyYW0ge051bWJlcn0gW29wdHMucm91bmQ9Ml0gUm91bmQgZmxvYXRzIHRvIHggZGVjaW1hbHNcbiAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0cy5pbmNyZW1lbnQ9MV0gTnVtYmVyIHRvIGluY3JlbWVudCBieSB3aGVuIHVzaW5nIGFycm93LWtleXNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRzLnZhbGlkYXRlXSBWYWxpZGF0ZSBmdW5jdGlvblxuICogQHBhcmFtIHtTdHJlYW19IFtvcHRzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFtvcHRzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKiBAcGFyYW0ge1N0cmluZ30gW29wdHMuZXJyb3JdIFRoZSBpbnZhbGlkIGVycm9yIGxhYmVsXG4gKi9cblxuXG5jbGFzcyBOdW1iZXJQcm9tcHQgZXh0ZW5kcyBQcm9tcHQge1xuICBjb25zdHJ1Y3RvcihvcHRzID0ge30pIHtcbiAgICBzdXBlcihvcHRzKTtcbiAgICB0aGlzLnRyYW5zZm9ybSA9IHN0eWxlLnJlbmRlcihvcHRzLnN0eWxlKTtcbiAgICB0aGlzLm1zZyA9IG9wdHMubWVzc2FnZTtcbiAgICB0aGlzLmluaXRpYWwgPSBpc0RlZihvcHRzLmluaXRpYWwpID8gb3B0cy5pbml0aWFsIDogJyc7XG4gICAgdGhpcy5mbG9hdCA9ICEhb3B0cy5mbG9hdDtcbiAgICB0aGlzLnJvdW5kID0gb3B0cy5yb3VuZCB8fCAyO1xuICAgIHRoaXMuaW5jID0gb3B0cy5pbmNyZW1lbnQgfHwgMTtcbiAgICB0aGlzLm1pbiA9IGlzRGVmKG9wdHMubWluKSA/IG9wdHMubWluIDogLUluZmluaXR5O1xuICAgIHRoaXMubWF4ID0gaXNEZWYob3B0cy5tYXgpID8gb3B0cy5tYXggOiBJbmZpbml0eTtcbiAgICB0aGlzLmVycm9yTXNnID0gb3B0cy5lcnJvciB8fCBgUGxlYXNlIEVudGVyIEEgVmFsaWQgVmFsdWVgO1xuXG4gICAgdGhpcy52YWxpZGF0b3IgPSBvcHRzLnZhbGlkYXRlIHx8ICgoKSA9PiB0cnVlKTtcblxuICAgIHRoaXMuY29sb3IgPSBgY3lhbmA7XG4gICAgdGhpcy52YWx1ZSA9IGBgO1xuICAgIHRoaXMudHlwZWQgPSBgYDtcbiAgICB0aGlzLmxhc3RIaXQgPSAwO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBzZXQgdmFsdWUodikge1xuICAgIGlmICghdiAmJiB2ICE9PSAwKSB7XG4gICAgICB0aGlzLnBsYWNlaG9sZGVyID0gdHJ1ZTtcbiAgICAgIHRoaXMucmVuZGVyZWQgPSBjb2xvci5ncmF5KHRoaXMudHJhbnNmb3JtLnJlbmRlcihgJHt0aGlzLmluaXRpYWx9YCkpO1xuICAgICAgdGhpcy5fdmFsdWUgPSBgYDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wbGFjZWhvbGRlciA9IGZhbHNlO1xuICAgICAgdGhpcy5yZW5kZXJlZCA9IHRoaXMudHJhbnNmb3JtLnJlbmRlcihgJHtyb3VuZCh2LCB0aGlzLnJvdW5kKX1gKTtcbiAgICAgIHRoaXMuX3ZhbHVlID0gcm91bmQodiwgdGhpcy5yb3VuZCk7XG4gICAgfVxuXG4gICAgdGhpcy5maXJlKCk7XG4gIH1cblxuICBnZXQgdmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG5cbiAgcGFyc2UoeCkge1xuICAgIHJldHVybiB0aGlzLmZsb2F0ID8gcGFyc2VGbG9hdCh4KSA6IHBhcnNlSW50KHgpO1xuICB9XG5cbiAgdmFsaWQoYykge1xuICAgIHJldHVybiBjID09PSBgLWAgfHwgYyA9PT0gYC5gICYmIHRoaXMuZmxvYXQgfHwgaXNOdW1iZXIudGVzdChjKTtcbiAgfVxuXG4gIHJlc2V0KCkge1xuICAgIHRoaXMudHlwZWQgPSBgYDtcbiAgICB0aGlzLnZhbHVlID0gYGA7XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIGV4aXQoKSB7XG4gICAgdGhpcy5hYm9ydCgpO1xuICB9XG5cbiAgYWJvcnQoKSB7XG4gICAgbGV0IHggPSB0aGlzLnZhbHVlO1xuICAgIHRoaXMudmFsdWUgPSB4ICE9PSBgYCA/IHggOiB0aGlzLmluaXRpYWw7XG4gICAgdGhpcy5kb25lID0gdGhpcy5hYm9ydGVkID0gdHJ1ZTtcbiAgICB0aGlzLmVycm9yID0gZmFsc2U7XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgICB0aGlzLm91dC53cml0ZShgXFxuYCk7XG4gICAgdGhpcy5jbG9zZSgpO1xuICB9XG5cbiAgdmFsaWRhdGUoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHJldHVybiBfYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiogKCkge1xuICAgICAgbGV0IHZhbGlkID0geWllbGQgX3RoaXMudmFsaWRhdG9yKF90aGlzLnZhbHVlKTtcblxuICAgICAgaWYgKHR5cGVvZiB2YWxpZCA9PT0gYHN0cmluZ2ApIHtcbiAgICAgICAgX3RoaXMuZXJyb3JNc2cgPSB2YWxpZDtcbiAgICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgX3RoaXMuZXJyb3IgPSAhdmFsaWQ7XG4gICAgfSkoKTtcbiAgfVxuXG4gIHN1Ym1pdCgpIHtcbiAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgIHJldHVybiBfYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiogKCkge1xuICAgICAgeWllbGQgX3RoaXMyLnZhbGlkYXRlKCk7XG5cbiAgICAgIGlmIChfdGhpczIuZXJyb3IpIHtcbiAgICAgICAgX3RoaXMyLmNvbG9yID0gYHJlZGA7XG5cbiAgICAgICAgX3RoaXMyLmZpcmUoKTtcblxuICAgICAgICBfdGhpczIucmVuZGVyKCk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBsZXQgeCA9IF90aGlzMi52YWx1ZTtcbiAgICAgIF90aGlzMi52YWx1ZSA9IHggIT09IGBgID8geCA6IF90aGlzMi5pbml0aWFsO1xuICAgICAgX3RoaXMyLmRvbmUgPSB0cnVlO1xuICAgICAgX3RoaXMyLmFib3J0ZWQgPSBmYWxzZTtcbiAgICAgIF90aGlzMi5lcnJvciA9IGZhbHNlO1xuXG4gICAgICBfdGhpczIuZmlyZSgpO1xuXG4gICAgICBfdGhpczIucmVuZGVyKCk7XG5cbiAgICAgIF90aGlzMi5vdXQud3JpdGUoYFxcbmApO1xuXG4gICAgICBfdGhpczIuY2xvc2UoKTtcbiAgICB9KSgpO1xuICB9XG5cbiAgdXAoKSB7XG4gICAgdGhpcy50eXBlZCA9IGBgO1xuXG4gICAgaWYgKHRoaXMudmFsdWUgPT09ICcnKSB7XG4gICAgICB0aGlzLnZhbHVlID0gdGhpcy5taW4gLSB0aGlzLmluYztcbiAgICB9XG5cbiAgICBpZiAodGhpcy52YWx1ZSA+PSB0aGlzLm1heCkgcmV0dXJuIHRoaXMuYmVsbCgpO1xuICAgIHRoaXMudmFsdWUgKz0gdGhpcy5pbmM7XG4gICAgdGhpcy5jb2xvciA9IGBjeWFuYDtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZG93bigpIHtcbiAgICB0aGlzLnR5cGVkID0gYGA7XG5cbiAgICBpZiAodGhpcy52YWx1ZSA9PT0gJycpIHtcbiAgICAgIHRoaXMudmFsdWUgPSB0aGlzLm1pbiArIHRoaXMuaW5jO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnZhbHVlIDw9IHRoaXMubWluKSByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgdGhpcy52YWx1ZSAtPSB0aGlzLmluYztcbiAgICB0aGlzLmNvbG9yID0gYGN5YW5gO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBkZWxldGUoKSB7XG4gICAgbGV0IHZhbCA9IHRoaXMudmFsdWUudG9TdHJpbmcoKTtcbiAgICBpZiAodmFsLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHRoaXMuYmVsbCgpO1xuICAgIHRoaXMudmFsdWUgPSB0aGlzLnBhcnNlKHZhbCA9IHZhbC5zbGljZSgwLCAtMSkpIHx8IGBgO1xuXG4gICAgaWYgKHRoaXMudmFsdWUgIT09ICcnICYmIHRoaXMudmFsdWUgPCB0aGlzLm1pbikge1xuICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubWluO1xuICAgIH1cblxuICAgIHRoaXMuY29sb3IgPSBgY3lhbmA7XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIG5leHQoKSB7XG4gICAgdGhpcy52YWx1ZSA9IHRoaXMuaW5pdGlhbDtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgXyhjLCBrZXkpIHtcbiAgICBpZiAoIXRoaXMudmFsaWQoYykpIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGlmIChub3cgLSB0aGlzLmxhc3RIaXQgPiAxMDAwKSB0aGlzLnR5cGVkID0gYGA7IC8vIDFzIGVsYXBzZWRcblxuICAgIHRoaXMudHlwZWQgKz0gYztcbiAgICB0aGlzLmxhc3RIaXQgPSBub3c7XG4gICAgdGhpcy5jb2xvciA9IGBjeWFuYDtcbiAgICBpZiAoYyA9PT0gYC5gKSByZXR1cm4gdGhpcy5maXJlKCk7XG4gICAgdGhpcy52YWx1ZSA9IE1hdGgubWluKHRoaXMucGFyc2UodGhpcy50eXBlZCksIHRoaXMubWF4KTtcbiAgICBpZiAodGhpcy52YWx1ZSA+IHRoaXMubWF4KSB0aGlzLnZhbHVlID0gdGhpcy5tYXg7XG4gICAgaWYgKHRoaXMudmFsdWUgPCB0aGlzLm1pbikgdGhpcy52YWx1ZSA9IHRoaXMubWluO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgaWYgKHRoaXMuY2xvc2VkKSByZXR1cm47XG5cbiAgICBpZiAoIXRoaXMuZmlyc3RSZW5kZXIpIHtcbiAgICAgIGlmICh0aGlzLm91dHB1dEVycm9yKSB0aGlzLm91dC53cml0ZShjdXJzb3IuZG93bihsaW5lcyh0aGlzLm91dHB1dEVycm9yLCB0aGlzLm91dC5jb2x1bW5zKSAtIDEpICsgY2xlYXIodGhpcy5vdXRwdXRFcnJvciwgdGhpcy5vdXQuY29sdW1ucykpO1xuICAgICAgdGhpcy5vdXQud3JpdGUoY2xlYXIodGhpcy5vdXRwdXRUZXh0LCB0aGlzLm91dC5jb2x1bW5zKSk7XG4gICAgfVxuXG4gICAgc3VwZXIucmVuZGVyKCk7XG4gICAgdGhpcy5vdXRwdXRFcnJvciA9ICcnOyAvLyBQcmludCBwcm9tcHRcblxuICAgIHRoaXMub3V0cHV0VGV4dCA9IFtzdHlsZS5zeW1ib2wodGhpcy5kb25lLCB0aGlzLmFib3J0ZWQpLCBjb2xvci5ib2xkKHRoaXMubXNnKSwgc3R5bGUuZGVsaW1pdGVyKHRoaXMuZG9uZSksICF0aGlzLmRvbmUgfHwgIXRoaXMuZG9uZSAmJiAhdGhpcy5wbGFjZWhvbGRlciA/IGNvbG9yW3RoaXMuY29sb3JdKCkudW5kZXJsaW5lKHRoaXMucmVuZGVyZWQpIDogdGhpcy5yZW5kZXJlZF0uam9pbihgIGApOyAvLyBQcmludCBlcnJvclxuXG4gICAgaWYgKHRoaXMuZXJyb3IpIHtcbiAgICAgIHRoaXMub3V0cHV0RXJyb3IgKz0gdGhpcy5lcnJvck1zZy5zcGxpdChgXFxuYCkucmVkdWNlKChhLCBsLCBpKSA9PiBhICsgYFxcbiR7aSA/IGAgYCA6IGZpZ3VyZXMucG9pbnRlclNtYWxsfSAke2NvbG9yLnJlZCgpLml0YWxpYyhsKX1gLCBgYCk7XG4gICAgfVxuXG4gICAgdGhpcy5vdXQud3JpdGUoZXJhc2UubGluZSArIGN1cnNvci50bygwKSArIHRoaXMub3V0cHV0VGV4dCArIGN1cnNvci5zYXZlICsgdGhpcy5vdXRwdXRFcnJvciArIGN1cnNvci5yZXN0b3JlKTtcbiAgfVxuXG59XG5cbm1vZHVsZS5leHBvcnRzID0gTnVtYmVyUHJvbXB0OyIsIid1c2Ugc3RyaWN0JztcblxuY29uc3QgY29sb3IgPSByZXF1aXJlKCdrbGV1cicpO1xuXG5jb25zdCBfcmVxdWlyZSA9IHJlcXVpcmUoJ3Npc3RlcmFuc2knKSxcbiAgICAgIGN1cnNvciA9IF9yZXF1aXJlLmN1cnNvcjtcblxuY29uc3QgUHJvbXB0ID0gcmVxdWlyZSgnLi9wcm9tcHQnKTtcblxuY29uc3QgX3JlcXVpcmUyID0gcmVxdWlyZSgnLi4vdXRpbCcpLFxuICAgICAgY2xlYXIgPSBfcmVxdWlyZTIuY2xlYXIsXG4gICAgICBmaWd1cmVzID0gX3JlcXVpcmUyLmZpZ3VyZXMsXG4gICAgICBzdHlsZSA9IF9yZXF1aXJlMi5zdHlsZSxcbiAgICAgIHdyYXAgPSBfcmVxdWlyZTIud3JhcCxcbiAgICAgIGVudHJpZXNUb0Rpc3BsYXkgPSBfcmVxdWlyZTIuZW50cmllc1RvRGlzcGxheTtcbi8qKlxuICogTXVsdGlzZWxlY3RQcm9tcHQgQmFzZSBFbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyBPcHRpb25zXG4gKiBAcGFyYW0ge1N0cmluZ30gb3B0cy5tZXNzYWdlIE1lc3NhZ2VcbiAqIEBwYXJhbSB7QXJyYXl9IG9wdHMuY2hvaWNlcyBBcnJheSBvZiBjaG9pY2Ugb2JqZWN0c1xuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLmhpbnRdIEhpbnQgdG8gZGlzcGxheVxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLndhcm5dIEhpbnQgc2hvd24gZm9yIGRpc2FibGVkIGNob2ljZXNcbiAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0cy5tYXhdIE1heCBjaG9pY2VzXG4gKiBAcGFyYW0ge051bWJlcn0gW29wdHMuY3Vyc29yPTBdIEN1cnNvciBzdGFydCBwb3NpdGlvblxuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRzLm9wdGlvbnNQZXJQYWdlPTEwXSBNYXggb3B0aW9ucyB0byBkaXNwbGF5IGF0IG9uY2VcbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICovXG5cblxuY2xhc3MgTXVsdGlzZWxlY3RQcm9tcHQgZXh0ZW5kcyBQcm9tcHQge1xuICBjb25zdHJ1Y3RvcihvcHRzID0ge30pIHtcbiAgICBzdXBlcihvcHRzKTtcbiAgICB0aGlzLm1zZyA9IG9wdHMubWVzc2FnZTtcbiAgICB0aGlzLmN1cnNvciA9IG9wdHMuY3Vyc29yIHx8IDA7XG4gICAgdGhpcy5zY3JvbGxJbmRleCA9IG9wdHMuY3Vyc29yIHx8IDA7XG4gICAgdGhpcy5oaW50ID0gb3B0cy5oaW50IHx8ICcnO1xuICAgIHRoaXMud2FybiA9IG9wdHMud2FybiB8fCAnLSBUaGlzIG9wdGlvbiBpcyBkaXNhYmxlZCAtJztcbiAgICB0aGlzLm1pblNlbGVjdGVkID0gb3B0cy5taW47XG4gICAgdGhpcy5zaG93TWluRXJyb3IgPSBmYWxzZTtcbiAgICB0aGlzLm1heENob2ljZXMgPSBvcHRzLm1heDtcbiAgICB0aGlzLmluc3RydWN0aW9ucyA9IG9wdHMuaW5zdHJ1Y3Rpb25zO1xuICAgIHRoaXMub3B0aW9uc1BlclBhZ2UgPSBvcHRzLm9wdGlvbnNQZXJQYWdlIHx8IDEwO1xuICAgIHRoaXMudmFsdWUgPSBvcHRzLmNob2ljZXMubWFwKChjaCwgaWR4KSA9PiB7XG4gICAgICBpZiAodHlwZW9mIGNoID09PSAnc3RyaW5nJykgY2ggPSB7XG4gICAgICAgIHRpdGxlOiBjaCxcbiAgICAgICAgdmFsdWU6IGlkeFxuICAgICAgfTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRpdGxlOiBjaCAmJiAoY2gudGl0bGUgfHwgY2gudmFsdWUgfHwgY2gpLFxuICAgICAgICBkZXNjcmlwdGlvbjogY2ggJiYgY2guZGVzY3JpcHRpb24sXG4gICAgICAgIHZhbHVlOiBjaCAmJiAoY2gudmFsdWUgPT09IHVuZGVmaW5lZCA/IGlkeCA6IGNoLnZhbHVlKSxcbiAgICAgICAgc2VsZWN0ZWQ6IGNoICYmIGNoLnNlbGVjdGVkLFxuICAgICAgICBkaXNhYmxlZDogY2ggJiYgY2guZGlzYWJsZWRcbiAgICAgIH07XG4gICAgfSk7XG4gICAgdGhpcy5jbGVhciA9IGNsZWFyKCcnLCB0aGlzLm91dC5jb2x1bW5zKTtcblxuICAgIGlmICghb3B0cy5vdmVycmlkZVJlbmRlcikge1xuICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICB9XG4gIH1cblxuICByZXNldCgpIHtcbiAgICB0aGlzLnZhbHVlLm1hcCh2ID0+ICF2LnNlbGVjdGVkKTtcbiAgICB0aGlzLmN1cnNvciA9IDA7XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHNlbGVjdGVkKCkge1xuICAgIHJldHVybiB0aGlzLnZhbHVlLmZpbHRlcih2ID0+IHYuc2VsZWN0ZWQpO1xuICB9XG5cbiAgZXhpdCgpIHtcbiAgICB0aGlzLmFib3J0KCk7XG4gIH1cblxuICBhYm9ydCgpIHtcbiAgICB0aGlzLmRvbmUgPSB0aGlzLmFib3J0ZWQgPSB0cnVlO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gICAgdGhpcy5vdXQud3JpdGUoJ1xcbicpO1xuICAgIHRoaXMuY2xvc2UoKTtcbiAgfVxuXG4gIHN1Ym1pdCgpIHtcbiAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMudmFsdWUuZmlsdGVyKGUgPT4gZS5zZWxlY3RlZCk7XG5cbiAgICBpZiAodGhpcy5taW5TZWxlY3RlZCAmJiBzZWxlY3RlZC5sZW5ndGggPCB0aGlzLm1pblNlbGVjdGVkKSB7XG4gICAgICB0aGlzLnNob3dNaW5FcnJvciA9IHRydWU7XG4gICAgICB0aGlzLnJlbmRlcigpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRvbmUgPSB0cnVlO1xuICAgICAgdGhpcy5hYm9ydGVkID0gZmFsc2U7XG4gICAgICB0aGlzLmZpcmUoKTtcbiAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgICB0aGlzLm91dC53cml0ZSgnXFxuJyk7XG4gICAgICB0aGlzLmNsb3NlKCk7XG4gICAgfVxuICB9XG5cbiAgZmlyc3QoKSB7XG4gICAgdGhpcy5jdXJzb3IgPSAwO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBsYXN0KCkge1xuICAgIHRoaXMuY3Vyc29yID0gdGhpcy52YWx1ZS5sZW5ndGggLSAxO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBuZXh0KCkge1xuICAgIHRoaXMuY3Vyc29yID0gKHRoaXMuY3Vyc29yICsgMSkgJSB0aGlzLnZhbHVlLmxlbmd0aDtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgdXAoKSB7XG4gICAgaWYgKHRoaXMuY3Vyc29yID09PSAwKSB7XG4gICAgICB0aGlzLmN1cnNvciA9IHRoaXMudmFsdWUubGVuZ3RoIC0gMTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jdXJzb3ItLTtcbiAgICB9XG5cbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZG93bigpIHtcbiAgICBpZiAodGhpcy5jdXJzb3IgPT09IHRoaXMudmFsdWUubGVuZ3RoIC0gMSkge1xuICAgICAgdGhpcy5jdXJzb3IgPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmN1cnNvcisrO1xuICAgIH1cblxuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBsZWZ0KCkge1xuICAgIHRoaXMudmFsdWVbdGhpcy5jdXJzb3JdLnNlbGVjdGVkID0gZmFsc2U7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHJpZ2h0KCkge1xuICAgIGlmICh0aGlzLnZhbHVlLmZpbHRlcihlID0+IGUuc2VsZWN0ZWQpLmxlbmd0aCA+PSB0aGlzLm1heENob2ljZXMpIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgICB0aGlzLnZhbHVlW3RoaXMuY3Vyc29yXS5zZWxlY3RlZCA9IHRydWU7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIGhhbmRsZVNwYWNlVG9nZ2xlKCkge1xuICAgIGNvbnN0IHYgPSB0aGlzLnZhbHVlW3RoaXMuY3Vyc29yXTtcblxuICAgIGlmICh2LnNlbGVjdGVkKSB7XG4gICAgICB2LnNlbGVjdGVkID0gZmFsc2U7XG4gICAgICB0aGlzLnJlbmRlcigpO1xuICAgIH0gZWxzZSBpZiAodi5kaXNhYmxlZCB8fCB0aGlzLnZhbHVlLmZpbHRlcihlID0+IGUuc2VsZWN0ZWQpLmxlbmd0aCA+PSB0aGlzLm1heENob2ljZXMpIHtcbiAgICAgIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdi5zZWxlY3RlZCA9IHRydWU7XG4gICAgICB0aGlzLnJlbmRlcigpO1xuICAgIH1cbiAgfVxuXG4gIHRvZ2dsZUFsbCgpIHtcbiAgICBpZiAodGhpcy5tYXhDaG9pY2VzICE9PSB1bmRlZmluZWQgfHwgdGhpcy52YWx1ZVt0aGlzLmN1cnNvcl0uZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgICB9XG5cbiAgICBjb25zdCBuZXdTZWxlY3RlZCA9ICF0aGlzLnZhbHVlW3RoaXMuY3Vyc29yXS5zZWxlY3RlZDtcbiAgICB0aGlzLnZhbHVlLmZpbHRlcih2ID0+ICF2LmRpc2FibGVkKS5mb3JFYWNoKHYgPT4gdi5zZWxlY3RlZCA9IG5ld1NlbGVjdGVkKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgXyhjLCBrZXkpIHtcbiAgICBpZiAoYyA9PT0gJyAnKSB7XG4gICAgICB0aGlzLmhhbmRsZVNwYWNlVG9nZ2xlKCk7XG4gICAgfSBlbHNlIGlmIChjID09PSAnYScpIHtcbiAgICAgIHRoaXMudG9nZ2xlQWxsKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgICB9XG4gIH1cblxuICByZW5kZXJJbnN0cnVjdGlvbnMoKSB7XG4gICAgaWYgKHRoaXMuaW5zdHJ1Y3Rpb25zID09PSB1bmRlZmluZWQgfHwgdGhpcy5pbnN0cnVjdGlvbnMpIHtcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5pbnN0cnVjdGlvbnMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmluc3RydWN0aW9ucztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuICdcXG5JbnN0cnVjdGlvbnM6XFxuJyArIGAgICAgJHtmaWd1cmVzLmFycm93VXB9LyR7ZmlndXJlcy5hcnJvd0Rvd259OiBIaWdobGlnaHQgb3B0aW9uXFxuYCArIGAgICAgJHtmaWd1cmVzLmFycm93TGVmdH0vJHtmaWd1cmVzLmFycm93UmlnaHR9L1tzcGFjZV06IFRvZ2dsZSBzZWxlY3Rpb25cXG5gICsgKHRoaXMubWF4Q2hvaWNlcyA9PT0gdW5kZWZpbmVkID8gYCAgICBhOiBUb2dnbGUgYWxsXFxuYCA6ICcnKSArIGAgICAgZW50ZXIvcmV0dXJuOiBDb21wbGV0ZSBhbnN3ZXJgO1xuICAgIH1cblxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIHJlbmRlck9wdGlvbihjdXJzb3IsIHYsIGksIGFycm93SW5kaWNhdG9yKSB7XG4gICAgY29uc3QgcHJlZml4ID0gKHYuc2VsZWN0ZWQgPyBjb2xvci5ncmVlbihmaWd1cmVzLnJhZGlvT24pIDogZmlndXJlcy5yYWRpb09mZikgKyAnICcgKyBhcnJvd0luZGljYXRvciArICcgJztcbiAgICBsZXQgdGl0bGUsIGRlc2M7XG5cbiAgICBpZiAodi5kaXNhYmxlZCkge1xuICAgICAgdGl0bGUgPSBjdXJzb3IgPT09IGkgPyBjb2xvci5ncmF5KCkudW5kZXJsaW5lKHYudGl0bGUpIDogY29sb3Iuc3RyaWtldGhyb3VnaCgpLmdyYXkodi50aXRsZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRpdGxlID0gY3Vyc29yID09PSBpID8gY29sb3IuY3lhbigpLnVuZGVybGluZSh2LnRpdGxlKSA6IHYudGl0bGU7XG5cbiAgICAgIGlmIChjdXJzb3IgPT09IGkgJiYgdi5kZXNjcmlwdGlvbikge1xuICAgICAgICBkZXNjID0gYCAtICR7di5kZXNjcmlwdGlvbn1gO1xuXG4gICAgICAgIGlmIChwcmVmaXgubGVuZ3RoICsgdGl0bGUubGVuZ3RoICsgZGVzYy5sZW5ndGggPj0gdGhpcy5vdXQuY29sdW1ucyB8fCB2LmRlc2NyaXB0aW9uLnNwbGl0KC9cXHI/XFxuLykubGVuZ3RoID4gMSkge1xuICAgICAgICAgIGRlc2MgPSAnXFxuJyArIHdyYXAodi5kZXNjcmlwdGlvbiwge1xuICAgICAgICAgICAgbWFyZ2luOiBwcmVmaXgubGVuZ3RoLFxuICAgICAgICAgICAgd2lkdGg6IHRoaXMub3V0LmNvbHVtbnNcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwcmVmaXggKyB0aXRsZSArIGNvbG9yLmdyYXkoZGVzYyB8fCAnJyk7XG4gIH0gLy8gc2hhcmVkIHdpdGggYXV0b2NvbXBsZXRlTXVsdGlzZWxlY3RcblxuXG4gIHBhZ2luYXRlT3B0aW9ucyhvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gY29sb3IucmVkKCdObyBtYXRjaGVzIGZvciB0aGlzIHF1ZXJ5LicpO1xuICAgIH1cblxuICAgIGxldCBfZW50cmllc1RvRGlzcGxheSA9IGVudHJpZXNUb0Rpc3BsYXkodGhpcy5jdXJzb3IsIG9wdGlvbnMubGVuZ3RoLCB0aGlzLm9wdGlvbnNQZXJQYWdlKSxcbiAgICAgICAgc3RhcnRJbmRleCA9IF9lbnRyaWVzVG9EaXNwbGF5LnN0YXJ0SW5kZXgsXG4gICAgICAgIGVuZEluZGV4ID0gX2VudHJpZXNUb0Rpc3BsYXkuZW5kSW5kZXg7XG5cbiAgICBsZXQgcHJlZml4LFxuICAgICAgICBzdHlsZWRPcHRpb25zID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gc3RhcnRJbmRleDsgaSA8IGVuZEluZGV4OyBpKyspIHtcbiAgICAgIGlmIChpID09PSBzdGFydEluZGV4ICYmIHN0YXJ0SW5kZXggPiAwKSB7XG4gICAgICAgIHByZWZpeCA9IGZpZ3VyZXMuYXJyb3dVcDtcbiAgICAgIH0gZWxzZSBpZiAoaSA9PT0gZW5kSW5kZXggLSAxICYmIGVuZEluZGV4IDwgb3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgcHJlZml4ID0gZmlndXJlcy5hcnJvd0Rvd247XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwcmVmaXggPSAnICc7XG4gICAgICB9XG5cbiAgICAgIHN0eWxlZE9wdGlvbnMucHVzaCh0aGlzLnJlbmRlck9wdGlvbih0aGlzLmN1cnNvciwgb3B0aW9uc1tpXSwgaSwgcHJlZml4KSk7XG4gICAgfVxuXG4gICAgcmV0dXJuICdcXG4nICsgc3R5bGVkT3B0aW9ucy5qb2luKCdcXG4nKTtcbiAgfSAvLyBzaGFyZWQgd2l0aCBhdXRvY29tbGV0ZU11bHRpc2VsZWN0XG5cblxuICByZW5kZXJPcHRpb25zKG9wdGlvbnMpIHtcbiAgICBpZiAoIXRoaXMuZG9uZSkge1xuICAgICAgcmV0dXJuIHRoaXMucGFnaW5hdGVPcHRpb25zKG9wdGlvbnMpO1xuICAgIH1cblxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIHJlbmRlckRvbmVPckluc3RydWN0aW9ucygpIHtcbiAgICBpZiAodGhpcy5kb25lKSB7XG4gICAgICByZXR1cm4gdGhpcy52YWx1ZS5maWx0ZXIoZSA9PiBlLnNlbGVjdGVkKS5tYXAodiA9PiB2LnRpdGxlKS5qb2luKCcsICcpO1xuICAgIH1cblxuICAgIGNvbnN0IG91dHB1dCA9IFtjb2xvci5ncmF5KHRoaXMuaGludCksIHRoaXMucmVuZGVySW5zdHJ1Y3Rpb25zKCldO1xuXG4gICAgaWYgKHRoaXMudmFsdWVbdGhpcy5jdXJzb3JdLmRpc2FibGVkKSB7XG4gICAgICBvdXRwdXQucHVzaChjb2xvci55ZWxsb3codGhpcy53YXJuKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG91dHB1dC5qb2luKCcgJyk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgaWYgKHRoaXMuY2xvc2VkKSByZXR1cm47XG4gICAgaWYgKHRoaXMuZmlyc3RSZW5kZXIpIHRoaXMub3V0LndyaXRlKGN1cnNvci5oaWRlKTtcbiAgICBzdXBlci5yZW5kZXIoKTsgLy8gcHJpbnQgcHJvbXB0XG5cbiAgICBsZXQgcHJvbXB0ID0gW3N0eWxlLnN5bWJvbCh0aGlzLmRvbmUsIHRoaXMuYWJvcnRlZCksIGNvbG9yLmJvbGQodGhpcy5tc2cpLCBzdHlsZS5kZWxpbWl0ZXIoZmFsc2UpLCB0aGlzLnJlbmRlckRvbmVPckluc3RydWN0aW9ucygpXS5qb2luKCcgJyk7XG5cbiAgICBpZiAodGhpcy5zaG93TWluRXJyb3IpIHtcbiAgICAgIHByb21wdCArPSBjb2xvci5yZWQoYFlvdSBtdXN0IHNlbGVjdCBhIG1pbmltdW0gb2YgJHt0aGlzLm1pblNlbGVjdGVkfSBjaG9pY2VzLmApO1xuICAgICAgdGhpcy5zaG93TWluRXJyb3IgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBwcm9tcHQgKz0gdGhpcy5yZW5kZXJPcHRpb25zKHRoaXMudmFsdWUpO1xuICAgIHRoaXMub3V0LndyaXRlKHRoaXMuY2xlYXIgKyBwcm9tcHQpO1xuICAgIHRoaXMuY2xlYXIgPSBjbGVhcihwcm9tcHQsIHRoaXMub3V0LmNvbHVtbnMpO1xuICB9XG5cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBNdWx0aXNlbGVjdFByb21wdDsiLCIndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywga2V5LCBhcmcpIHsgdHJ5IHsgdmFyIGluZm8gPSBnZW5ba2V5XShhcmcpOyB2YXIgdmFsdWUgPSBpbmZvLnZhbHVlOyB9IGNhdGNoIChlcnJvcikgeyByZWplY3QoZXJyb3IpOyByZXR1cm47IH0gaWYgKGluZm8uZG9uZSkgeyByZXNvbHZlKHZhbHVlKTsgfSBlbHNlIHsgUHJvbWlzZS5yZXNvbHZlKHZhbHVlKS50aGVuKF9uZXh0LCBfdGhyb3cpOyB9IH1cblxuZnVuY3Rpb24gX2FzeW5jVG9HZW5lcmF0b3IoZm4pIHsgcmV0dXJuIGZ1bmN0aW9uICgpIHsgdmFyIHNlbGYgPSB0aGlzLCBhcmdzID0gYXJndW1lbnRzOyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2YXIgZ2VuID0gZm4uYXBwbHkoc2VsZiwgYXJncyk7IGZ1bmN0aW9uIF9uZXh0KHZhbHVlKSB7IGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJuZXh0XCIsIHZhbHVlKTsgfSBmdW5jdGlvbiBfdGhyb3coZXJyKSB7IGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJ0aHJvd1wiLCBlcnIpOyB9IF9uZXh0KHVuZGVmaW5lZCk7IH0pOyB9OyB9XG5cbmNvbnN0IGNvbG9yID0gcmVxdWlyZSgna2xldXInKTtcblxuY29uc3QgUHJvbXB0ID0gcmVxdWlyZSgnLi9wcm9tcHQnKTtcblxuY29uc3QgX3JlcXVpcmUgPSByZXF1aXJlKCdzaXN0ZXJhbnNpJyksXG4gICAgICBlcmFzZSA9IF9yZXF1aXJlLmVyYXNlLFxuICAgICAgY3Vyc29yID0gX3JlcXVpcmUuY3Vyc29yO1xuXG5jb25zdCBfcmVxdWlyZTIgPSByZXF1aXJlKCcuLi91dGlsJyksXG4gICAgICBzdHlsZSA9IF9yZXF1aXJlMi5zdHlsZSxcbiAgICAgIGNsZWFyID0gX3JlcXVpcmUyLmNsZWFyLFxuICAgICAgZmlndXJlcyA9IF9yZXF1aXJlMi5maWd1cmVzLFxuICAgICAgd3JhcCA9IF9yZXF1aXJlMi53cmFwLFxuICAgICAgZW50cmllc1RvRGlzcGxheSA9IF9yZXF1aXJlMi5lbnRyaWVzVG9EaXNwbGF5O1xuXG5jb25zdCBnZXRWYWwgPSAoYXJyLCBpKSA9PiBhcnJbaV0gJiYgKGFycltpXS52YWx1ZSB8fCBhcnJbaV0udGl0bGUgfHwgYXJyW2ldKTtcblxuY29uc3QgZ2V0VGl0bGUgPSAoYXJyLCBpKSA9PiBhcnJbaV0gJiYgKGFycltpXS50aXRsZSB8fCBhcnJbaV0udmFsdWUgfHwgYXJyW2ldKTtcblxuY29uc3QgZ2V0SW5kZXggPSAoYXJyLCB2YWxPclRpdGxlKSA9PiB7XG4gIGNvbnN0IGluZGV4ID0gYXJyLmZpbmRJbmRleChlbCA9PiBlbC52YWx1ZSA9PT0gdmFsT3JUaXRsZSB8fCBlbC50aXRsZSA9PT0gdmFsT3JUaXRsZSk7XG4gIHJldHVybiBpbmRleCA+IC0xID8gaW5kZXggOiB1bmRlZmluZWQ7XG59O1xuLyoqXG4gKiBUZXh0UHJvbXB0IEJhc2UgRWxlbWVudFxuICogQHBhcmFtIHtPYmplY3R9IG9wdHMgT3B0aW9uc1xuICogQHBhcmFtIHtTdHJpbmd9IG9wdHMubWVzc2FnZSBNZXNzYWdlXG4gKiBAcGFyYW0ge0FycmF5fSBvcHRzLmNob2ljZXMgQXJyYXkgb2YgYXV0by1jb21wbGV0ZSBjaG9pY2VzIG9iamVjdHNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRzLnN1Z2dlc3RdIEZpbHRlciBmdW5jdGlvbi4gRGVmYXVsdHMgdG8gc29ydCBieSB0aXRsZVxuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRzLmxpbWl0PTEwXSBNYXggbnVtYmVyIG9mIHJlc3VsdHMgdG8gc2hvd1xuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRzLmN1cnNvcj0wXSBDdXJzb3Igc3RhcnQgcG9zaXRpb25cbiAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5zdHlsZT0nZGVmYXVsdCddIFJlbmRlciBzdHlsZVxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLmZhbGxiYWNrXSBGYWxsYmFjayBtZXNzYWdlIC0gaW5pdGlhbCB0byBkZWZhdWx0IHZhbHVlXG4gKiBAcGFyYW0ge1N0cmluZ30gW29wdHMuaW5pdGlhbF0gSW5kZXggb2YgdGhlIGRlZmF1bHQgdmFsdWVcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdHMuY2xlYXJGaXJzdF0gVGhlIGZpcnN0IEVTQ0FQRSBrZXlwcmVzcyB3aWxsIGNsZWFyIHRoZSBpbnB1dFxuICogQHBhcmFtIHtTdHJlYW19IFtvcHRzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFtvcHRzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKiBAcGFyYW0ge1N0cmluZ30gW29wdHMubm9NYXRjaGVzXSBUaGUgbm8gbWF0Y2hlcyBmb3VuZCBsYWJlbFxuICovXG5cblxuY2xhc3MgQXV0b2NvbXBsZXRlUHJvbXB0IGV4dGVuZHMgUHJvbXB0IHtcbiAgY29uc3RydWN0b3Iob3B0cyA9IHt9KSB7XG4gICAgc3VwZXIob3B0cyk7XG4gICAgdGhpcy5tc2cgPSBvcHRzLm1lc3NhZ2U7XG4gICAgdGhpcy5zdWdnZXN0ID0gb3B0cy5zdWdnZXN0O1xuICAgIHRoaXMuY2hvaWNlcyA9IG9wdHMuY2hvaWNlcztcbiAgICB0aGlzLmluaXRpYWwgPSB0eXBlb2Ygb3B0cy5pbml0aWFsID09PSAnbnVtYmVyJyA/IG9wdHMuaW5pdGlhbCA6IGdldEluZGV4KG9wdHMuY2hvaWNlcywgb3B0cy5pbml0aWFsKTtcbiAgICB0aGlzLnNlbGVjdCA9IHRoaXMuaW5pdGlhbCB8fCBvcHRzLmN1cnNvciB8fCAwO1xuICAgIHRoaXMuaTE4biA9IHtcbiAgICAgIG5vTWF0Y2hlczogb3B0cy5ub01hdGNoZXMgfHwgJ25vIG1hdGNoZXMgZm91bmQnXG4gICAgfTtcbiAgICB0aGlzLmZhbGxiYWNrID0gb3B0cy5mYWxsYmFjayB8fCB0aGlzLmluaXRpYWw7XG4gICAgdGhpcy5jbGVhckZpcnN0ID0gb3B0cy5jbGVhckZpcnN0IHx8IGZhbHNlO1xuICAgIHRoaXMuc3VnZ2VzdGlvbnMgPSBbXTtcbiAgICB0aGlzLmlucHV0ID0gJyc7XG4gICAgdGhpcy5saW1pdCA9IG9wdHMubGltaXQgfHwgMTA7XG4gICAgdGhpcy5jdXJzb3IgPSAwO1xuICAgIHRoaXMudHJhbnNmb3JtID0gc3R5bGUucmVuZGVyKG9wdHMuc3R5bGUpO1xuICAgIHRoaXMuc2NhbGUgPSB0aGlzLnRyYW5zZm9ybS5zY2FsZTtcbiAgICB0aGlzLnJlbmRlciA9IHRoaXMucmVuZGVyLmJpbmQodGhpcyk7XG4gICAgdGhpcy5jb21wbGV0ZSA9IHRoaXMuY29tcGxldGUuYmluZCh0aGlzKTtcbiAgICB0aGlzLmNsZWFyID0gY2xlYXIoJycsIHRoaXMub3V0LmNvbHVtbnMpO1xuICAgIHRoaXMuY29tcGxldGUodGhpcy5yZW5kZXIpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBzZXQgZmFsbGJhY2soZmIpIHtcbiAgICB0aGlzLl9mYiA9IE51bWJlci5pc1NhZmVJbnRlZ2VyKHBhcnNlSW50KGZiKSkgPyBwYXJzZUludChmYikgOiBmYjtcbiAgfVxuXG4gIGdldCBmYWxsYmFjaygpIHtcbiAgICBsZXQgY2hvaWNlO1xuICAgIGlmICh0eXBlb2YgdGhpcy5fZmIgPT09ICdudW1iZXInKSBjaG9pY2UgPSB0aGlzLmNob2ljZXNbdGhpcy5fZmJdO2Vsc2UgaWYgKHR5cGVvZiB0aGlzLl9mYiA9PT0gJ3N0cmluZycpIGNob2ljZSA9IHtcbiAgICAgIHRpdGxlOiB0aGlzLl9mYlxuICAgIH07XG4gICAgcmV0dXJuIGNob2ljZSB8fCB0aGlzLl9mYiB8fCB7XG4gICAgICB0aXRsZTogdGhpcy5pMThuLm5vTWF0Y2hlc1xuICAgIH07XG4gIH1cblxuICBtb3ZlU2VsZWN0KGkpIHtcbiAgICB0aGlzLnNlbGVjdCA9IGk7XG4gICAgaWYgKHRoaXMuc3VnZ2VzdGlvbnMubGVuZ3RoID4gMCkgdGhpcy52YWx1ZSA9IGdldFZhbCh0aGlzLnN1Z2dlc3Rpb25zLCBpKTtlbHNlIHRoaXMudmFsdWUgPSB0aGlzLmZhbGxiYWNrLnZhbHVlO1xuICAgIHRoaXMuZmlyZSgpO1xuICB9XG5cbiAgY29tcGxldGUoY2IpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgcmV0dXJuIF9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKiAoKSB7XG4gICAgICBjb25zdCBwID0gX3RoaXMuY29tcGxldGluZyA9IF90aGlzLnN1Z2dlc3QoX3RoaXMuaW5wdXQsIF90aGlzLmNob2ljZXMpO1xuXG4gICAgICBjb25zdCBzdWdnZXN0aW9ucyA9IHlpZWxkIHA7XG4gICAgICBpZiAoX3RoaXMuY29tcGxldGluZyAhPT0gcCkgcmV0dXJuO1xuICAgICAgX3RoaXMuc3VnZ2VzdGlvbnMgPSBzdWdnZXN0aW9ucy5tYXAoKHMsIGksIGFycikgPT4gKHtcbiAgICAgICAgdGl0bGU6IGdldFRpdGxlKGFyciwgaSksXG4gICAgICAgIHZhbHVlOiBnZXRWYWwoYXJyLCBpKSxcbiAgICAgICAgZGVzY3JpcHRpb246IHMuZGVzY3JpcHRpb25cbiAgICAgIH0pKTtcbiAgICAgIF90aGlzLmNvbXBsZXRpbmcgPSBmYWxzZTtcbiAgICAgIGNvbnN0IGwgPSBNYXRoLm1heChzdWdnZXN0aW9ucy5sZW5ndGggLSAxLCAwKTtcblxuICAgICAgX3RoaXMubW92ZVNlbGVjdChNYXRoLm1pbihsLCBfdGhpcy5zZWxlY3QpKTtcblxuICAgICAgY2IgJiYgY2IoKTtcbiAgICB9KSgpO1xuICB9XG5cbiAgcmVzZXQoKSB7XG4gICAgdGhpcy5pbnB1dCA9ICcnO1xuICAgIHRoaXMuY29tcGxldGUoKCkgPT4ge1xuICAgICAgdGhpcy5tb3ZlU2VsZWN0KHRoaXMuaW5pdGlhbCAhPT0gdm9pZCAwID8gdGhpcy5pbml0aWFsIDogMCk7XG4gICAgICB0aGlzLnJlbmRlcigpO1xuICAgIH0pO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBleGl0KCkge1xuICAgIGlmICh0aGlzLmNsZWFyRmlyc3QgJiYgdGhpcy5pbnB1dC5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnJlc2V0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZG9uZSA9IHRoaXMuZXhpdGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMuYWJvcnRlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5maXJlKCk7XG4gICAgICB0aGlzLnJlbmRlcigpO1xuICAgICAgdGhpcy5vdXQud3JpdGUoJ1xcbicpO1xuICAgICAgdGhpcy5jbG9zZSgpO1xuICAgIH1cbiAgfVxuXG4gIGFib3J0KCkge1xuICAgIHRoaXMuZG9uZSA9IHRoaXMuYWJvcnRlZCA9IHRydWU7XG4gICAgdGhpcy5leGl0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICAgIHRoaXMub3V0LndyaXRlKCdcXG4nKTtcbiAgICB0aGlzLmNsb3NlKCk7XG4gIH1cblxuICBzdWJtaXQoKSB7XG4gICAgdGhpcy5kb25lID0gdHJ1ZTtcbiAgICB0aGlzLmFib3J0ZWQgPSB0aGlzLmV4aXRlZCA9IGZhbHNlO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gICAgdGhpcy5vdXQud3JpdGUoJ1xcbicpO1xuICAgIHRoaXMuY2xvc2UoKTtcbiAgfVxuXG4gIF8oYywga2V5KSB7XG4gICAgbGV0IHMxID0gdGhpcy5pbnB1dC5zbGljZSgwLCB0aGlzLmN1cnNvcik7XG4gICAgbGV0IHMyID0gdGhpcy5pbnB1dC5zbGljZSh0aGlzLmN1cnNvcik7XG4gICAgdGhpcy5pbnB1dCA9IGAke3MxfSR7Y30ke3MyfWA7XG4gICAgdGhpcy5jdXJzb3IgPSBzMS5sZW5ndGggKyAxO1xuICAgIHRoaXMuY29tcGxldGUodGhpcy5yZW5kZXIpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBkZWxldGUoKSB7XG4gICAgaWYgKHRoaXMuY3Vyc29yID09PSAwKSByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgbGV0IHMxID0gdGhpcy5pbnB1dC5zbGljZSgwLCB0aGlzLmN1cnNvciAtIDEpO1xuICAgIGxldCBzMiA9IHRoaXMuaW5wdXQuc2xpY2UodGhpcy5jdXJzb3IpO1xuICAgIHRoaXMuaW5wdXQgPSBgJHtzMX0ke3MyfWA7XG4gICAgdGhpcy5jb21wbGV0ZSh0aGlzLnJlbmRlcik7XG4gICAgdGhpcy5jdXJzb3IgPSB0aGlzLmN1cnNvciAtIDE7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIGRlbGV0ZUZvcndhcmQoKSB7XG4gICAgaWYgKHRoaXMuY3Vyc29yICogdGhpcy5zY2FsZSA+PSB0aGlzLnJlbmRlcmVkLmxlbmd0aCkgcmV0dXJuIHRoaXMuYmVsbCgpO1xuICAgIGxldCBzMSA9IHRoaXMuaW5wdXQuc2xpY2UoMCwgdGhpcy5jdXJzb3IpO1xuICAgIGxldCBzMiA9IHRoaXMuaW5wdXQuc2xpY2UodGhpcy5jdXJzb3IgKyAxKTtcbiAgICB0aGlzLmlucHV0ID0gYCR7czF9JHtzMn1gO1xuICAgIHRoaXMuY29tcGxldGUodGhpcy5yZW5kZXIpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBmaXJzdCgpIHtcbiAgICB0aGlzLm1vdmVTZWxlY3QoMCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIGxhc3QoKSB7XG4gICAgdGhpcy5tb3ZlU2VsZWN0KHRoaXMuc3VnZ2VzdGlvbnMubGVuZ3RoIC0gMSk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHVwKCkge1xuICAgIGlmICh0aGlzLnNlbGVjdCA9PT0gMCkge1xuICAgICAgdGhpcy5tb3ZlU2VsZWN0KHRoaXMuc3VnZ2VzdGlvbnMubGVuZ3RoIC0gMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubW92ZVNlbGVjdCh0aGlzLnNlbGVjdCAtIDEpO1xuICAgIH1cblxuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBkb3duKCkge1xuICAgIGlmICh0aGlzLnNlbGVjdCA9PT0gdGhpcy5zdWdnZXN0aW9ucy5sZW5ndGggLSAxKSB7XG4gICAgICB0aGlzLm1vdmVTZWxlY3QoMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubW92ZVNlbGVjdCh0aGlzLnNlbGVjdCArIDEpO1xuICAgIH1cblxuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBuZXh0KCkge1xuICAgIGlmICh0aGlzLnNlbGVjdCA9PT0gdGhpcy5zdWdnZXN0aW9ucy5sZW5ndGggLSAxKSB7XG4gICAgICB0aGlzLm1vdmVTZWxlY3QoMCk7XG4gICAgfSBlbHNlIHRoaXMubW92ZVNlbGVjdCh0aGlzLnNlbGVjdCArIDEpO1xuXG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIG5leHRQYWdlKCkge1xuICAgIHRoaXMubW92ZVNlbGVjdChNYXRoLm1pbih0aGlzLnNlbGVjdCArIHRoaXMubGltaXQsIHRoaXMuc3VnZ2VzdGlvbnMubGVuZ3RoIC0gMSkpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBwcmV2UGFnZSgpIHtcbiAgICB0aGlzLm1vdmVTZWxlY3QoTWF0aC5tYXgodGhpcy5zZWxlY3QgLSB0aGlzLmxpbWl0LCAwKSk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIGxlZnQoKSB7XG4gICAgaWYgKHRoaXMuY3Vyc29yIDw9IDApIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgICB0aGlzLmN1cnNvciA9IHRoaXMuY3Vyc29yIC0gMTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgcmlnaHQoKSB7XG4gICAgaWYgKHRoaXMuY3Vyc29yICogdGhpcy5zY2FsZSA+PSB0aGlzLnJlbmRlcmVkLmxlbmd0aCkgcmV0dXJuIHRoaXMuYmVsbCgpO1xuICAgIHRoaXMuY3Vyc29yID0gdGhpcy5jdXJzb3IgKyAxO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICByZW5kZXJPcHRpb24odiwgaG92ZXJlZCwgaXNTdGFydCwgaXNFbmQpIHtcbiAgICBsZXQgZGVzYztcbiAgICBsZXQgcHJlZml4ID0gaXNTdGFydCA/IGZpZ3VyZXMuYXJyb3dVcCA6IGlzRW5kID8gZmlndXJlcy5hcnJvd0Rvd24gOiAnICc7XG4gICAgbGV0IHRpdGxlID0gaG92ZXJlZCA/IGNvbG9yLmN5YW4oKS51bmRlcmxpbmUodi50aXRsZSkgOiB2LnRpdGxlO1xuICAgIHByZWZpeCA9IChob3ZlcmVkID8gY29sb3IuY3lhbihmaWd1cmVzLnBvaW50ZXIpICsgJyAnIDogJyAgJykgKyBwcmVmaXg7XG5cbiAgICBpZiAodi5kZXNjcmlwdGlvbikge1xuICAgICAgZGVzYyA9IGAgLSAke3YuZGVzY3JpcHRpb259YDtcblxuICAgICAgaWYgKHByZWZpeC5sZW5ndGggKyB0aXRsZS5sZW5ndGggKyBkZXNjLmxlbmd0aCA+PSB0aGlzLm91dC5jb2x1bW5zIHx8IHYuZGVzY3JpcHRpb24uc3BsaXQoL1xccj9cXG4vKS5sZW5ndGggPiAxKSB7XG4gICAgICAgIGRlc2MgPSAnXFxuJyArIHdyYXAodi5kZXNjcmlwdGlvbiwge1xuICAgICAgICAgIG1hcmdpbjogMyxcbiAgICAgICAgICB3aWR0aDogdGhpcy5vdXQuY29sdW1uc1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcHJlZml4ICsgJyAnICsgdGl0bGUgKyBjb2xvci5ncmF5KGRlc2MgfHwgJycpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGlmICh0aGlzLmNsb3NlZCkgcmV0dXJuO1xuICAgIGlmICh0aGlzLmZpcnN0UmVuZGVyKSB0aGlzLm91dC53cml0ZShjdXJzb3IuaGlkZSk7ZWxzZSB0aGlzLm91dC53cml0ZShjbGVhcih0aGlzLm91dHB1dFRleHQsIHRoaXMub3V0LmNvbHVtbnMpKTtcbiAgICBzdXBlci5yZW5kZXIoKTtcblxuICAgIGxldCBfZW50cmllc1RvRGlzcGxheSA9IGVudHJpZXNUb0Rpc3BsYXkodGhpcy5zZWxlY3QsIHRoaXMuY2hvaWNlcy5sZW5ndGgsIHRoaXMubGltaXQpLFxuICAgICAgICBzdGFydEluZGV4ID0gX2VudHJpZXNUb0Rpc3BsYXkuc3RhcnRJbmRleCxcbiAgICAgICAgZW5kSW5kZXggPSBfZW50cmllc1RvRGlzcGxheS5lbmRJbmRleDtcblxuICAgIHRoaXMub3V0cHV0VGV4dCA9IFtzdHlsZS5zeW1ib2wodGhpcy5kb25lLCB0aGlzLmFib3J0ZWQsIHRoaXMuZXhpdGVkKSwgY29sb3IuYm9sZCh0aGlzLm1zZyksIHN0eWxlLmRlbGltaXRlcih0aGlzLmNvbXBsZXRpbmcpLCB0aGlzLmRvbmUgJiYgdGhpcy5zdWdnZXN0aW9uc1t0aGlzLnNlbGVjdF0gPyB0aGlzLnN1Z2dlc3Rpb25zW3RoaXMuc2VsZWN0XS50aXRsZSA6IHRoaXMucmVuZGVyZWQgPSB0aGlzLnRyYW5zZm9ybS5yZW5kZXIodGhpcy5pbnB1dCldLmpvaW4oJyAnKTtcblxuICAgIGlmICghdGhpcy5kb25lKSB7XG4gICAgICBjb25zdCBzdWdnZXN0aW9ucyA9IHRoaXMuc3VnZ2VzdGlvbnMuc2xpY2Uoc3RhcnRJbmRleCwgZW5kSW5kZXgpLm1hcCgoaXRlbSwgaSkgPT4gdGhpcy5yZW5kZXJPcHRpb24oaXRlbSwgdGhpcy5zZWxlY3QgPT09IGkgKyBzdGFydEluZGV4LCBpID09PSAwICYmIHN0YXJ0SW5kZXggPiAwLCBpICsgc3RhcnRJbmRleCA9PT0gZW5kSW5kZXggLSAxICYmIGVuZEluZGV4IDwgdGhpcy5jaG9pY2VzLmxlbmd0aCkpLmpvaW4oJ1xcbicpO1xuICAgICAgdGhpcy5vdXRwdXRUZXh0ICs9IGBcXG5gICsgKHN1Z2dlc3Rpb25zIHx8IGNvbG9yLmdyYXkodGhpcy5mYWxsYmFjay50aXRsZSkpO1xuICAgIH1cblxuICAgIHRoaXMub3V0LndyaXRlKGVyYXNlLmxpbmUgKyBjdXJzb3IudG8oMCkgKyB0aGlzLm91dHB1dFRleHQpO1xuICB9XG5cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBBdXRvY29tcGxldGVQcm9tcHQ7IiwiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBjb2xvciA9IHJlcXVpcmUoJ2tsZXVyJyk7XG5cbmNvbnN0IF9yZXF1aXJlID0gcmVxdWlyZSgnc2lzdGVyYW5zaScpLFxuICAgICAgY3Vyc29yID0gX3JlcXVpcmUuY3Vyc29yO1xuXG5jb25zdCBNdWx0aXNlbGVjdFByb21wdCA9IHJlcXVpcmUoJy4vbXVsdGlzZWxlY3QnKTtcblxuY29uc3QgX3JlcXVpcmUyID0gcmVxdWlyZSgnLi4vdXRpbCcpLFxuICAgICAgY2xlYXIgPSBfcmVxdWlyZTIuY2xlYXIsXG4gICAgICBzdHlsZSA9IF9yZXF1aXJlMi5zdHlsZSxcbiAgICAgIGZpZ3VyZXMgPSBfcmVxdWlyZTIuZmlndXJlcztcbi8qKlxuICogTXVsdGlzZWxlY3RQcm9tcHQgQmFzZSBFbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyBPcHRpb25zXG4gKiBAcGFyYW0ge1N0cmluZ30gb3B0cy5tZXNzYWdlIE1lc3NhZ2VcbiAqIEBwYXJhbSB7QXJyYXl9IG9wdHMuY2hvaWNlcyBBcnJheSBvZiBjaG9pY2Ugb2JqZWN0c1xuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLmhpbnRdIEhpbnQgdG8gZGlzcGxheVxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLndhcm5dIEhpbnQgc2hvd24gZm9yIGRpc2FibGVkIGNob2ljZXNcbiAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0cy5tYXhdIE1heCBjaG9pY2VzXG4gKiBAcGFyYW0ge051bWJlcn0gW29wdHMuY3Vyc29yPTBdIEN1cnNvciBzdGFydCBwb3NpdGlvblxuICogQHBhcmFtIHtTdHJlYW19IFtvcHRzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFtvcHRzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKi9cblxuXG5jbGFzcyBBdXRvY29tcGxldGVNdWx0aXNlbGVjdFByb21wdCBleHRlbmRzIE11bHRpc2VsZWN0UHJvbXB0IHtcbiAgY29uc3RydWN0b3Iob3B0cyA9IHt9KSB7XG4gICAgb3B0cy5vdmVycmlkZVJlbmRlciA9IHRydWU7XG4gICAgc3VwZXIob3B0cyk7XG4gICAgdGhpcy5pbnB1dFZhbHVlID0gJyc7XG4gICAgdGhpcy5jbGVhciA9IGNsZWFyKCcnLCB0aGlzLm91dC5jb2x1bW5zKTtcbiAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IHRoaXMudmFsdWU7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIGxhc3QoKSB7XG4gICAgdGhpcy5jdXJzb3IgPSB0aGlzLmZpbHRlcmVkT3B0aW9ucy5sZW5ndGggLSAxO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBuZXh0KCkge1xuICAgIHRoaXMuY3Vyc29yID0gKHRoaXMuY3Vyc29yICsgMSkgJSB0aGlzLmZpbHRlcmVkT3B0aW9ucy5sZW5ndGg7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHVwKCkge1xuICAgIGlmICh0aGlzLmN1cnNvciA9PT0gMCkge1xuICAgICAgdGhpcy5jdXJzb3IgPSB0aGlzLmZpbHRlcmVkT3B0aW9ucy5sZW5ndGggLSAxO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmN1cnNvci0tO1xuICAgIH1cblxuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBkb3duKCkge1xuICAgIGlmICh0aGlzLmN1cnNvciA9PT0gdGhpcy5maWx0ZXJlZE9wdGlvbnMubGVuZ3RoIC0gMSkge1xuICAgICAgdGhpcy5jdXJzb3IgPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmN1cnNvcisrO1xuICAgIH1cblxuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBsZWZ0KCkge1xuICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zW3RoaXMuY3Vyc29yXS5zZWxlY3RlZCA9IGZhbHNlO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICByaWdodCgpIHtcbiAgICBpZiAodGhpcy52YWx1ZS5maWx0ZXIoZSA9PiBlLnNlbGVjdGVkKS5sZW5ndGggPj0gdGhpcy5tYXhDaG9pY2VzKSByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgdGhpcy5maWx0ZXJlZE9wdGlvbnNbdGhpcy5jdXJzb3JdLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZGVsZXRlKCkge1xuICAgIGlmICh0aGlzLmlucHV0VmFsdWUubGVuZ3RoKSB7XG4gICAgICB0aGlzLmlucHV0VmFsdWUgPSB0aGlzLmlucHV0VmFsdWUuc3Vic3RyKDAsIHRoaXMuaW5wdXRWYWx1ZS5sZW5ndGggLSAxKTtcbiAgICAgIHRoaXMudXBkYXRlRmlsdGVyZWRPcHRpb25zKCk7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlRmlsdGVyZWRPcHRpb25zKCkge1xuICAgIGNvbnN0IGN1cnJlbnRIaWdobGlnaHQgPSB0aGlzLmZpbHRlcmVkT3B0aW9uc1t0aGlzLmN1cnNvcl07XG4gICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSB0aGlzLnZhbHVlLmZpbHRlcih2ID0+IHtcbiAgICAgIGlmICh0aGlzLmlucHV0VmFsdWUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB2LnRpdGxlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIGlmICh2LnRpdGxlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy5pbnB1dFZhbHVlLnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIHYudmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgaWYgKHYudmFsdWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLmlucHV0VmFsdWUudG9Mb3dlckNhc2UoKSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG4gICAgY29uc3QgbmV3SGlnaGxpZ2h0SW5kZXggPSB0aGlzLmZpbHRlcmVkT3B0aW9ucy5maW5kSW5kZXgodiA9PiB2ID09PSBjdXJyZW50SGlnaGxpZ2h0KTtcbiAgICB0aGlzLmN1cnNvciA9IG5ld0hpZ2hsaWdodEluZGV4IDwgMCA/IDAgOiBuZXdIaWdobGlnaHRJbmRleDtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgaGFuZGxlU3BhY2VUb2dnbGUoKSB7XG4gICAgY29uc3QgdiA9IHRoaXMuZmlsdGVyZWRPcHRpb25zW3RoaXMuY3Vyc29yXTtcblxuICAgIGlmICh2LnNlbGVjdGVkKSB7XG4gICAgICB2LnNlbGVjdGVkID0gZmFsc2U7XG4gICAgICB0aGlzLnJlbmRlcigpO1xuICAgIH0gZWxzZSBpZiAodi5kaXNhYmxlZCB8fCB0aGlzLnZhbHVlLmZpbHRlcihlID0+IGUuc2VsZWN0ZWQpLmxlbmd0aCA+PSB0aGlzLm1heENob2ljZXMpIHtcbiAgICAgIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdi5zZWxlY3RlZCA9IHRydWU7XG4gICAgICB0aGlzLnJlbmRlcigpO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZUlucHV0Q2hhbmdlKGMpIHtcbiAgICB0aGlzLmlucHV0VmFsdWUgPSB0aGlzLmlucHV0VmFsdWUgKyBjO1xuICAgIHRoaXMudXBkYXRlRmlsdGVyZWRPcHRpb25zKCk7XG4gIH1cblxuICBfKGMsIGtleSkge1xuICAgIGlmIChjID09PSAnICcpIHtcbiAgICAgIHRoaXMuaGFuZGxlU3BhY2VUb2dnbGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5oYW5kbGVJbnB1dENoYW5nZShjKTtcbiAgICB9XG4gIH1cblxuICByZW5kZXJJbnN0cnVjdGlvbnMoKSB7XG4gICAgaWYgKHRoaXMuaW5zdHJ1Y3Rpb25zID09PSB1bmRlZmluZWQgfHwgdGhpcy5pbnN0cnVjdGlvbnMpIHtcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5pbnN0cnVjdGlvbnMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmluc3RydWN0aW9ucztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGBcbkluc3RydWN0aW9uczpcbiAgICAke2ZpZ3VyZXMuYXJyb3dVcH0vJHtmaWd1cmVzLmFycm93RG93bn06IEhpZ2hsaWdodCBvcHRpb25cbiAgICAke2ZpZ3VyZXMuYXJyb3dMZWZ0fS8ke2ZpZ3VyZXMuYXJyb3dSaWdodH0vW3NwYWNlXTogVG9nZ2xlIHNlbGVjdGlvblxuICAgIFthLGIsY10vZGVsZXRlOiBGaWx0ZXIgY2hvaWNlc1xuICAgIGVudGVyL3JldHVybjogQ29tcGxldGUgYW5zd2VyXG5gO1xuICAgIH1cblxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIHJlbmRlckN1cnJlbnRJbnB1dCgpIHtcbiAgICByZXR1cm4gYFxuRmlsdGVyZWQgcmVzdWx0cyBmb3I6ICR7dGhpcy5pbnB1dFZhbHVlID8gdGhpcy5pbnB1dFZhbHVlIDogY29sb3IuZ3JheSgnRW50ZXIgc29tZXRoaW5nIHRvIGZpbHRlcicpfVxcbmA7XG4gIH1cblxuICByZW5kZXJPcHRpb24oY3Vyc29yLCB2LCBpKSB7XG4gICAgbGV0IHRpdGxlO1xuICAgIGlmICh2LmRpc2FibGVkKSB0aXRsZSA9IGN1cnNvciA9PT0gaSA/IGNvbG9yLmdyYXkoKS51bmRlcmxpbmUodi50aXRsZSkgOiBjb2xvci5zdHJpa2V0aHJvdWdoKCkuZ3JheSh2LnRpdGxlKTtlbHNlIHRpdGxlID0gY3Vyc29yID09PSBpID8gY29sb3IuY3lhbigpLnVuZGVybGluZSh2LnRpdGxlKSA6IHYudGl0bGU7XG4gICAgcmV0dXJuICh2LnNlbGVjdGVkID8gY29sb3IuZ3JlZW4oZmlndXJlcy5yYWRpb09uKSA6IGZpZ3VyZXMucmFkaW9PZmYpICsgJyAgJyArIHRpdGxlO1xuICB9XG5cbiAgcmVuZGVyRG9uZU9ySW5zdHJ1Y3Rpb25zKCkge1xuICAgIGlmICh0aGlzLmRvbmUpIHtcbiAgICAgIHJldHVybiB0aGlzLnZhbHVlLmZpbHRlcihlID0+IGUuc2VsZWN0ZWQpLm1hcCh2ID0+IHYudGl0bGUpLmpvaW4oJywgJyk7XG4gICAgfVxuXG4gICAgY29uc3Qgb3V0cHV0ID0gW2NvbG9yLmdyYXkodGhpcy5oaW50KSwgdGhpcy5yZW5kZXJJbnN0cnVjdGlvbnMoKSwgdGhpcy5yZW5kZXJDdXJyZW50SW5wdXQoKV07XG5cbiAgICBpZiAodGhpcy5maWx0ZXJlZE9wdGlvbnMubGVuZ3RoICYmIHRoaXMuZmlsdGVyZWRPcHRpb25zW3RoaXMuY3Vyc29yXS5kaXNhYmxlZCkge1xuICAgICAgb3V0cHV0LnB1c2goY29sb3IueWVsbG93KHRoaXMud2FybikpO1xuICAgIH1cblxuICAgIHJldHVybiBvdXRwdXQuam9pbignICcpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGlmICh0aGlzLmNsb3NlZCkgcmV0dXJuO1xuICAgIGlmICh0aGlzLmZpcnN0UmVuZGVyKSB0aGlzLm91dC53cml0ZShjdXJzb3IuaGlkZSk7XG4gICAgc3VwZXIucmVuZGVyKCk7IC8vIHByaW50IHByb21wdFxuXG4gICAgbGV0IHByb21wdCA9IFtzdHlsZS5zeW1ib2wodGhpcy5kb25lLCB0aGlzLmFib3J0ZWQpLCBjb2xvci5ib2xkKHRoaXMubXNnKSwgc3R5bGUuZGVsaW1pdGVyKGZhbHNlKSwgdGhpcy5yZW5kZXJEb25lT3JJbnN0cnVjdGlvbnMoKV0uam9pbignICcpO1xuXG4gICAgaWYgKHRoaXMuc2hvd01pbkVycm9yKSB7XG4gICAgICBwcm9tcHQgKz0gY29sb3IucmVkKGBZb3UgbXVzdCBzZWxlY3QgYSBtaW5pbXVtIG9mICR7dGhpcy5taW5TZWxlY3RlZH0gY2hvaWNlcy5gKTtcbiAgICAgIHRoaXMuc2hvd01pbkVycm9yID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcHJvbXB0ICs9IHRoaXMucmVuZGVyT3B0aW9ucyh0aGlzLmZpbHRlcmVkT3B0aW9ucyk7XG4gICAgdGhpcy5vdXQud3JpdGUodGhpcy5jbGVhciArIHByb21wdCk7XG4gICAgdGhpcy5jbGVhciA9IGNsZWFyKHByb21wdCwgdGhpcy5vdXQuY29sdW1ucyk7XG4gIH1cblxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEF1dG9jb21wbGV0ZU11bHRpc2VsZWN0UHJvbXB0OyIsIlwidXNlIHN0cmljdFwiO1xuXG5jb25zdCBjb2xvciA9IHJlcXVpcmUoJ2tsZXVyJyk7XG5cbmNvbnN0IFByb21wdCA9IHJlcXVpcmUoJy4vcHJvbXB0Jyk7XG5cbmNvbnN0IF9yZXF1aXJlID0gcmVxdWlyZSgnLi4vdXRpbCcpLFxuICAgICAgc3R5bGUgPSBfcmVxdWlyZS5zdHlsZSxcbiAgICAgIGNsZWFyID0gX3JlcXVpcmUuY2xlYXI7XG5cbmNvbnN0IF9yZXF1aXJlMiA9IHJlcXVpcmUoJ3Npc3RlcmFuc2knKSxcbiAgICAgIGVyYXNlID0gX3JlcXVpcmUyLmVyYXNlLFxuICAgICAgY3Vyc29yID0gX3JlcXVpcmUyLmN1cnNvcjtcbi8qKlxuICogQ29uZmlybVByb21wdCBCYXNlIEVsZW1lbnRcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIE9wdGlvbnNcbiAqIEBwYXJhbSB7U3RyaW5nfSBvcHRzLm1lc3NhZ2UgTWVzc2FnZVxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0cy5pbml0aWFsXSBEZWZhdWx0IHZhbHVlICh0cnVlL2ZhbHNlKVxuICogQHBhcmFtIHtTdHJlYW19IFtvcHRzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFtvcHRzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKiBAcGFyYW0ge1N0cmluZ30gW29wdHMueWVzXSBUaGUgXCJZZXNcIiBsYWJlbFxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLnllc09wdGlvbl0gVGhlIFwiWWVzXCIgb3B0aW9uIHdoZW4gY2hvb3NpbmcgYmV0d2VlbiB5ZXMvbm9cbiAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5ub10gVGhlIFwiTm9cIiBsYWJlbFxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLm5vT3B0aW9uXSBUaGUgXCJOb1wiIG9wdGlvbiB3aGVuIGNob29zaW5nIGJldHdlZW4geWVzL25vXG4gKi9cblxuXG5jbGFzcyBDb25maXJtUHJvbXB0IGV4dGVuZHMgUHJvbXB0IHtcbiAgY29uc3RydWN0b3Iob3B0cyA9IHt9KSB7XG4gICAgc3VwZXIob3B0cyk7XG4gICAgdGhpcy5tc2cgPSBvcHRzLm1lc3NhZ2U7XG4gICAgdGhpcy52YWx1ZSA9IG9wdHMuaW5pdGlhbDtcbiAgICB0aGlzLmluaXRpYWxWYWx1ZSA9ICEhb3B0cy5pbml0aWFsO1xuICAgIHRoaXMueWVzTXNnID0gb3B0cy55ZXMgfHwgJ3llcyc7XG4gICAgdGhpcy55ZXNPcHRpb24gPSBvcHRzLnllc09wdGlvbiB8fCAnKFkvbiknO1xuICAgIHRoaXMubm9Nc2cgPSBvcHRzLm5vIHx8ICdubyc7XG4gICAgdGhpcy5ub09wdGlvbiA9IG9wdHMubm9PcHRpb24gfHwgJyh5L04pJztcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgcmVzZXQoKSB7XG4gICAgdGhpcy52YWx1ZSA9IHRoaXMuaW5pdGlhbFZhbHVlO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBleGl0KCkge1xuICAgIHRoaXMuYWJvcnQoKTtcbiAgfVxuXG4gIGFib3J0KCkge1xuICAgIHRoaXMuZG9uZSA9IHRoaXMuYWJvcnRlZCA9IHRydWU7XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgICB0aGlzLm91dC53cml0ZSgnXFxuJyk7XG4gICAgdGhpcy5jbG9zZSgpO1xuICB9XG5cbiAgc3VibWl0KCkge1xuICAgIHRoaXMudmFsdWUgPSB0aGlzLnZhbHVlIHx8IGZhbHNlO1xuICAgIHRoaXMuZG9uZSA9IHRydWU7XG4gICAgdGhpcy5hYm9ydGVkID0gZmFsc2U7XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgICB0aGlzLm91dC53cml0ZSgnXFxuJyk7XG4gICAgdGhpcy5jbG9zZSgpO1xuICB9XG5cbiAgXyhjLCBrZXkpIHtcbiAgICBpZiAoYy50b0xvd2VyQ2FzZSgpID09PSAneScpIHtcbiAgICAgIHRoaXMudmFsdWUgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRoaXMuc3VibWl0KCk7XG4gICAgfVxuXG4gICAgaWYgKGMudG9Mb3dlckNhc2UoKSA9PT0gJ24nKSB7XG4gICAgICB0aGlzLnZhbHVlID0gZmFsc2U7XG4gICAgICByZXR1cm4gdGhpcy5zdWJtaXQoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5iZWxsKCk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgaWYgKHRoaXMuY2xvc2VkKSByZXR1cm47XG4gICAgaWYgKHRoaXMuZmlyc3RSZW5kZXIpIHRoaXMub3V0LndyaXRlKGN1cnNvci5oaWRlKTtlbHNlIHRoaXMub3V0LndyaXRlKGNsZWFyKHRoaXMub3V0cHV0VGV4dCwgdGhpcy5vdXQuY29sdW1ucykpO1xuICAgIHN1cGVyLnJlbmRlcigpO1xuICAgIHRoaXMub3V0cHV0VGV4dCA9IFtzdHlsZS5zeW1ib2wodGhpcy5kb25lLCB0aGlzLmFib3J0ZWQpLCBjb2xvci5ib2xkKHRoaXMubXNnKSwgc3R5bGUuZGVsaW1pdGVyKHRoaXMuZG9uZSksIHRoaXMuZG9uZSA/IHRoaXMudmFsdWUgPyB0aGlzLnllc01zZyA6IHRoaXMubm9Nc2cgOiBjb2xvci5ncmF5KHRoaXMuaW5pdGlhbFZhbHVlID8gdGhpcy55ZXNPcHRpb24gOiB0aGlzLm5vT3B0aW9uKV0uam9pbignICcpO1xuICAgIHRoaXMub3V0LndyaXRlKGVyYXNlLmxpbmUgKyBjdXJzb3IudG8oMCkgKyB0aGlzLm91dHB1dFRleHQpO1xuICB9XG5cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBDb25maXJtUHJvbXB0OyIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIFRleHRQcm9tcHQ6IHJlcXVpcmUoJy4vdGV4dCcpLFxuICBTZWxlY3RQcm9tcHQ6IHJlcXVpcmUoJy4vc2VsZWN0JyksXG4gIFRvZ2dsZVByb21wdDogcmVxdWlyZSgnLi90b2dnbGUnKSxcbiAgRGF0ZVByb21wdDogcmVxdWlyZSgnLi9kYXRlJyksXG4gIE51bWJlclByb21wdDogcmVxdWlyZSgnLi9udW1iZXInKSxcbiAgTXVsdGlzZWxlY3RQcm9tcHQ6IHJlcXVpcmUoJy4vbXVsdGlzZWxlY3QnKSxcbiAgQXV0b2NvbXBsZXRlUHJvbXB0OiByZXF1aXJlKCcuL2F1dG9jb21wbGV0ZScpLFxuICBBdXRvY29tcGxldGVNdWx0aXNlbGVjdFByb21wdDogcmVxdWlyZSgnLi9hdXRvY29tcGxldGVNdWx0aXNlbGVjdCcpLFxuICBDb25maXJtUHJvbXB0OiByZXF1aXJlKCcuL2NvbmZpcm0nKVxufTsiLCIndXNlIHN0cmljdCc7XG5cbmNvbnN0ICQgPSBleHBvcnRzO1xuXG5jb25zdCBlbCA9IHJlcXVpcmUoJy4vZWxlbWVudHMnKTtcblxuY29uc3Qgbm9vcCA9IHYgPT4gdjtcblxuZnVuY3Rpb24gdG9Qcm9tcHQodHlwZSwgYXJncywgb3B0cyA9IHt9KSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzLCByZWopID0+IHtcbiAgICBjb25zdCBwID0gbmV3IGVsW3R5cGVdKGFyZ3MpO1xuICAgIGNvbnN0IG9uQWJvcnQgPSBvcHRzLm9uQWJvcnQgfHwgbm9vcDtcbiAgICBjb25zdCBvblN1Ym1pdCA9IG9wdHMub25TdWJtaXQgfHwgbm9vcDtcbiAgICBjb25zdCBvbkV4aXQgPSBvcHRzLm9uRXhpdCB8fCBub29wO1xuICAgIHAub24oJ3N0YXRlJywgYXJncy5vblN0YXRlIHx8IG5vb3ApO1xuICAgIHAub24oJ3N1Ym1pdCcsIHggPT4gcmVzKG9uU3VibWl0KHgpKSk7XG4gICAgcC5vbignZXhpdCcsIHggPT4gcmVzKG9uRXhpdCh4KSkpO1xuICAgIHAub24oJ2Fib3J0JywgeCA9PiByZWoob25BYm9ydCh4KSkpO1xuICB9KTtcbn1cbi8qKlxuICogVGV4dCBwcm9tcHRcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLm1lc3NhZ2UgUHJvbXB0IG1lc3NhZ2UgdG8gZGlzcGxheVxuICogQHBhcmFtIHtzdHJpbmd9IFthcmdzLmluaXRpYWxdIERlZmF1bHQgc3RyaW5nIHZhbHVlXG4gKiBAcGFyYW0ge3N0cmluZ30gW2FyZ3Muc3R5bGU9XCJkZWZhdWx0XCJdIFJlbmRlciBzdHlsZSAoJ2RlZmF1bHQnLCAncGFzc3dvcmQnLCAnaW52aXNpYmxlJylcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IFthcmdzLm9uU3RhdGVdIE9uIHN0YXRlIGNoYW5nZSBjYWxsYmFja1xuICogQHBhcmFtIHtmdW5jdGlvbn0gW2FyZ3MudmFsaWRhdGVdIEZ1bmN0aW9uIHRvIHZhbGlkYXRlIHVzZXIgaW5wdXRcbiAqIEBwYXJhbSB7U3RyZWFtfSBbYXJncy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbYXJncy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICogQHJldHVybnMge1Byb21pc2V9IFByb21pc2Ugd2l0aCB1c2VyIGlucHV0XG4gKi9cblxuXG4kLnRleHQgPSBhcmdzID0+IHRvUHJvbXB0KCdUZXh0UHJvbXB0JywgYXJncyk7XG4vKipcbiAqIFBhc3N3b3JkIHByb21wdCB3aXRoIG1hc2tlZCBpbnB1dFxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MubWVzc2FnZSBQcm9tcHQgbWVzc2FnZSB0byBkaXNwbGF5XG4gKiBAcGFyYW0ge3N0cmluZ30gW2FyZ3MuaW5pdGlhbF0gRGVmYXVsdCBzdHJpbmcgdmFsdWVcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IFthcmdzLm9uU3RhdGVdIE9uIHN0YXRlIGNoYW5nZSBjYWxsYmFja1xuICogQHBhcmFtIHtmdW5jdGlvbn0gW2FyZ3MudmFsaWRhdGVdIEZ1bmN0aW9uIHRvIHZhbGlkYXRlIHVzZXIgaW5wdXRcbiAqIEBwYXJhbSB7U3RyZWFtfSBbYXJncy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbYXJncy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICogQHJldHVybnMge1Byb21pc2V9IFByb21pc2Ugd2l0aCB1c2VyIGlucHV0XG4gKi9cblxuXG4kLnBhc3N3b3JkID0gYXJncyA9PiB7XG4gIGFyZ3Muc3R5bGUgPSAncGFzc3dvcmQnO1xuICByZXR1cm4gJC50ZXh0KGFyZ3MpO1xufTtcbi8qKlxuICogUHJvbXB0IHdoZXJlIGlucHV0IGlzIGludmlzaWJsZSwgbGlrZSBzdWRvXG4gKiBAcGFyYW0ge3N0cmluZ30gYXJncy5tZXNzYWdlIFByb21wdCBtZXNzYWdlIHRvIGRpc3BsYXlcbiAqIEBwYXJhbSB7c3RyaW5nfSBbYXJncy5pbml0aWFsXSBEZWZhdWx0IHN0cmluZyB2YWx1ZVxuICogQHBhcmFtIHtmdW5jdGlvbn0gW2FyZ3Mub25TdGF0ZV0gT24gc3RhdGUgY2hhbmdlIGNhbGxiYWNrXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBbYXJncy52YWxpZGF0ZV0gRnVuY3Rpb24gdG8gdmFsaWRhdGUgdXNlciBpbnB1dFxuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSB3aXRoIHVzZXIgaW5wdXRcbiAqL1xuXG5cbiQuaW52aXNpYmxlID0gYXJncyA9PiB7XG4gIGFyZ3Muc3R5bGUgPSAnaW52aXNpYmxlJztcbiAgcmV0dXJuICQudGV4dChhcmdzKTtcbn07XG4vKipcbiAqIE51bWJlciBwcm9tcHRcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLm1lc3NhZ2UgUHJvbXB0IG1lc3NhZ2UgdG8gZGlzcGxheVxuICogQHBhcmFtIHtudW1iZXJ9IGFyZ3MuaW5pdGlhbCBEZWZhdWx0IG51bWJlciB2YWx1ZVxuICogQHBhcmFtIHtmdW5jdGlvbn0gW2FyZ3Mub25TdGF0ZV0gT24gc3RhdGUgY2hhbmdlIGNhbGxiYWNrXG4gKiBAcGFyYW0ge251bWJlcn0gW2FyZ3MubWF4XSBNYXggdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBbYXJncy5taW5dIE1pbiB2YWx1ZVxuICogQHBhcmFtIHtzdHJpbmd9IFthcmdzLnN0eWxlPVwiZGVmYXVsdFwiXSBSZW5kZXIgc3R5bGUgKCdkZWZhdWx0JywgJ3Bhc3N3b3JkJywgJ2ludmlzaWJsZScpXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRzLmZsb2F0PWZhbHNlXSBQYXJzZSBpbnB1dCBhcyBmbG9hdHNcbiAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0cy5yb3VuZD0yXSBSb3VuZCBmbG9hdHMgdG8geCBkZWNpbWFsc1xuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRzLmluY3JlbWVudD0xXSBOdW1iZXIgdG8gaW5jcmVtZW50IGJ5IHdoZW4gdXNpbmcgYXJyb3cta2V5c1xuICogQHBhcmFtIHtmdW5jdGlvbn0gW2FyZ3MudmFsaWRhdGVdIEZ1bmN0aW9uIHRvIHZhbGlkYXRlIHVzZXIgaW5wdXRcbiAqIEBwYXJhbSB7U3RyZWFtfSBbYXJncy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbYXJncy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICogQHJldHVybnMge1Byb21pc2V9IFByb21pc2Ugd2l0aCB1c2VyIGlucHV0XG4gKi9cblxuXG4kLm51bWJlciA9IGFyZ3MgPT4gdG9Qcm9tcHQoJ051bWJlclByb21wdCcsIGFyZ3MpO1xuLyoqXG4gKiBEYXRlIHByb21wdFxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MubWVzc2FnZSBQcm9tcHQgbWVzc2FnZSB0byBkaXNwbGF5XG4gKiBAcGFyYW0ge251bWJlcn0gYXJncy5pbml0aWFsIERlZmF1bHQgbnVtYmVyIHZhbHVlXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBbYXJncy5vblN0YXRlXSBPbiBzdGF0ZSBjaGFuZ2UgY2FsbGJhY2tcbiAqIEBwYXJhbSB7bnVtYmVyfSBbYXJncy5tYXhdIE1heCB2YWx1ZVxuICogQHBhcmFtIHtudW1iZXJ9IFthcmdzLm1pbl0gTWluIHZhbHVlXG4gKiBAcGFyYW0ge3N0cmluZ30gW2FyZ3Muc3R5bGU9XCJkZWZhdWx0XCJdIFJlbmRlciBzdHlsZSAoJ2RlZmF1bHQnLCAncGFzc3dvcmQnLCAnaW52aXNpYmxlJylcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdHMuZmxvYXQ9ZmFsc2VdIFBhcnNlIGlucHV0IGFzIGZsb2F0c1xuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRzLnJvdW5kPTJdIFJvdW5kIGZsb2F0cyB0byB4IGRlY2ltYWxzXG4gKiBAcGFyYW0ge051bWJlcn0gW29wdHMuaW5jcmVtZW50PTFdIE51bWJlciB0byBpbmNyZW1lbnQgYnkgd2hlbiB1c2luZyBhcnJvdy1rZXlzXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBbYXJncy52YWxpZGF0ZV0gRnVuY3Rpb24gdG8gdmFsaWRhdGUgdXNlciBpbnB1dFxuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSB3aXRoIHVzZXIgaW5wdXRcbiAqL1xuXG5cbiQuZGF0ZSA9IGFyZ3MgPT4gdG9Qcm9tcHQoJ0RhdGVQcm9tcHQnLCBhcmdzKTtcbi8qKlxuICogQ2xhc3NpYyB5ZXMvbm8gcHJvbXB0XG4gKiBAcGFyYW0ge3N0cmluZ30gYXJncy5tZXNzYWdlIFByb21wdCBtZXNzYWdlIHRvIGRpc3BsYXlcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2FyZ3MuaW5pdGlhbD1mYWxzZV0gRGVmYXVsdCB2YWx1ZVxuICogQHBhcmFtIHtmdW5jdGlvbn0gW2FyZ3Mub25TdGF0ZV0gT24gc3RhdGUgY2hhbmdlIGNhbGxiYWNrXG4gKiBAcGFyYW0ge1N0cmVhbX0gW2FyZ3Muc3RkaW5dIFRoZSBSZWFkYWJsZSBzdHJlYW0gdG8gbGlzdGVuIHRvXG4gKiBAcGFyYW0ge1N0cmVhbX0gW2FyZ3Muc3Rkb3V0XSBUaGUgV3JpdGFibGUgc3RyZWFtIHRvIHdyaXRlIHJlYWRsaW5lIGRhdGEgdG9cbiAqIEByZXR1cm5zIHtQcm9taXNlfSBQcm9taXNlIHdpdGggdXNlciBpbnB1dFxuICovXG5cblxuJC5jb25maXJtID0gYXJncyA9PiB0b1Byb21wdCgnQ29uZmlybVByb21wdCcsIGFyZ3MpO1xuLyoqXG4gKiBMaXN0IHByb21wdCwgc3BsaXQgaW50cHV0IHN0cmluZyBieSBgc2VwZXJhdG9yYFxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MubWVzc2FnZSBQcm9tcHQgbWVzc2FnZSB0byBkaXNwbGF5XG4gKiBAcGFyYW0ge3N0cmluZ30gW2FyZ3MuaW5pdGlhbF0gRGVmYXVsdCBzdHJpbmcgdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBbYXJncy5zdHlsZT1cImRlZmF1bHRcIl0gUmVuZGVyIHN0eWxlICgnZGVmYXVsdCcsICdwYXNzd29yZCcsICdpbnZpc2libGUnKVxuICogQHBhcmFtIHtzdHJpbmd9IFthcmdzLnNlcGFyYXRvcl0gU3RyaW5nIHNlcGFyYXRvclxuICogQHBhcmFtIHtmdW5jdGlvbn0gW2FyZ3Mub25TdGF0ZV0gT24gc3RhdGUgY2hhbmdlIGNhbGxiYWNrXG4gKiBAcGFyYW0ge1N0cmVhbX0gW2FyZ3Muc3RkaW5dIFRoZSBSZWFkYWJsZSBzdHJlYW0gdG8gbGlzdGVuIHRvXG4gKiBAcGFyYW0ge1N0cmVhbX0gW2FyZ3Muc3Rkb3V0XSBUaGUgV3JpdGFibGUgc3RyZWFtIHRvIHdyaXRlIHJlYWRsaW5lIGRhdGEgdG9cbiAqIEByZXR1cm5zIHtQcm9taXNlfSBQcm9taXNlIHdpdGggdXNlciBpbnB1dCwgaW4gZm9ybSBvZiBhbiBgQXJyYXlgXG4gKi9cblxuXG4kLmxpc3QgPSBhcmdzID0+IHtcbiAgY29uc3Qgc2VwID0gYXJncy5zZXBhcmF0b3IgfHwgJywnO1xuICByZXR1cm4gdG9Qcm9tcHQoJ1RleHRQcm9tcHQnLCBhcmdzLCB7XG4gICAgb25TdWJtaXQ6IHN0ciA9PiBzdHIuc3BsaXQoc2VwKS5tYXAocyA9PiBzLnRyaW0oKSlcbiAgfSk7XG59O1xuLyoqXG4gKiBUb2dnbGUvc3dpdGNoIHByb21wdFxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MubWVzc2FnZSBQcm9tcHQgbWVzc2FnZSB0byBkaXNwbGF5XG4gKiBAcGFyYW0ge2Jvb2xlYW59IFthcmdzLmluaXRpYWw9ZmFsc2VdIERlZmF1bHQgdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBbYXJncy5hY3RpdmU9XCJvblwiXSBUZXh0IGZvciBgYWN0aXZlYCBzdGF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IFthcmdzLmluYWN0aXZlPVwib2ZmXCJdIFRleHQgZm9yIGBpbmFjdGl2ZWAgc3RhdGVcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IFthcmdzLm9uU3RhdGVdIE9uIHN0YXRlIGNoYW5nZSBjYWxsYmFja1xuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSB3aXRoIHVzZXIgaW5wdXRcbiAqL1xuXG5cbiQudG9nZ2xlID0gYXJncyA9PiB0b1Byb21wdCgnVG9nZ2xlUHJvbXB0JywgYXJncyk7XG4vKipcbiAqIEludGVyYWN0aXZlIHNlbGVjdCBwcm9tcHRcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLm1lc3NhZ2UgUHJvbXB0IG1lc3NhZ2UgdG8gZGlzcGxheVxuICogQHBhcmFtIHtBcnJheX0gYXJncy5jaG9pY2VzIEFycmF5IG9mIGNob2ljZXMgb2JqZWN0cyBgW3sgdGl0bGUsIHZhbHVlIH0sIC4uLl1gXG4gKiBAcGFyYW0ge251bWJlcn0gW2FyZ3MuaW5pdGlhbF0gSW5kZXggb2YgZGVmYXVsdCB2YWx1ZVxuICogQHBhcmFtIHtTdHJpbmd9IFthcmdzLmhpbnRdIEhpbnQgdG8gZGlzcGxheVxuICogQHBhcmFtIHtmdW5jdGlvbn0gW2FyZ3Mub25TdGF0ZV0gT24gc3RhdGUgY2hhbmdlIGNhbGxiYWNrXG4gKiBAcGFyYW0ge1N0cmVhbX0gW2FyZ3Muc3RkaW5dIFRoZSBSZWFkYWJsZSBzdHJlYW0gdG8gbGlzdGVuIHRvXG4gKiBAcGFyYW0ge1N0cmVhbX0gW2FyZ3Muc3Rkb3V0XSBUaGUgV3JpdGFibGUgc3RyZWFtIHRvIHdyaXRlIHJlYWRsaW5lIGRhdGEgdG9cbiAqIEByZXR1cm5zIHtQcm9taXNlfSBQcm9taXNlIHdpdGggdXNlciBpbnB1dFxuICovXG5cblxuJC5zZWxlY3QgPSBhcmdzID0+IHRvUHJvbXB0KCdTZWxlY3RQcm9tcHQnLCBhcmdzKTtcbi8qKlxuICogSW50ZXJhY3RpdmUgbXVsdGktc2VsZWN0IC8gYXV0b2NvbXBsZXRlTXVsdGlzZWxlY3QgcHJvbXB0XG4gKiBAcGFyYW0ge3N0cmluZ30gYXJncy5tZXNzYWdlIFByb21wdCBtZXNzYWdlIHRvIGRpc3BsYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFyZ3MuY2hvaWNlcyBBcnJheSBvZiBjaG9pY2VzIG9iamVjdHMgYFt7IHRpdGxlLCB2YWx1ZSwgW3NlbGVjdGVkXSB9LCAuLi5dYFxuICogQHBhcmFtIHtudW1iZXJ9IFthcmdzLm1heF0gTWF4IHNlbGVjdFxuICogQHBhcmFtIHtzdHJpbmd9IFthcmdzLmhpbnRdIEhpbnQgdG8gZGlzcGxheSB1c2VyXG4gKiBAcGFyYW0ge051bWJlcn0gW2FyZ3MuY3Vyc29yPTBdIEN1cnNvciBzdGFydCBwb3NpdGlvblxuICogQHBhcmFtIHtmdW5jdGlvbn0gW2FyZ3Mub25TdGF0ZV0gT24gc3RhdGUgY2hhbmdlIGNhbGxiYWNrXG4gKiBAcGFyYW0ge1N0cmVhbX0gW2FyZ3Muc3RkaW5dIFRoZSBSZWFkYWJsZSBzdHJlYW0gdG8gbGlzdGVuIHRvXG4gKiBAcGFyYW0ge1N0cmVhbX0gW2FyZ3Muc3Rkb3V0XSBUaGUgV3JpdGFibGUgc3RyZWFtIHRvIHdyaXRlIHJlYWRsaW5lIGRhdGEgdG9cbiAqIEByZXR1cm5zIHtQcm9taXNlfSBQcm9taXNlIHdpdGggdXNlciBpbnB1dFxuICovXG5cblxuJC5tdWx0aXNlbGVjdCA9IGFyZ3MgPT4ge1xuICBhcmdzLmNob2ljZXMgPSBbXS5jb25jYXQoYXJncy5jaG9pY2VzIHx8IFtdKTtcblxuICBjb25zdCB0b1NlbGVjdGVkID0gaXRlbXMgPT4gaXRlbXMuZmlsdGVyKGl0ZW0gPT4gaXRlbS5zZWxlY3RlZCkubWFwKGl0ZW0gPT4gaXRlbS52YWx1ZSk7XG5cbiAgcmV0dXJuIHRvUHJvbXB0KCdNdWx0aXNlbGVjdFByb21wdCcsIGFyZ3MsIHtcbiAgICBvbkFib3J0OiB0b1NlbGVjdGVkLFxuICAgIG9uU3VibWl0OiB0b1NlbGVjdGVkXG4gIH0pO1xufTtcblxuJC5hdXRvY29tcGxldGVNdWx0aXNlbGVjdCA9IGFyZ3MgPT4ge1xuICBhcmdzLmNob2ljZXMgPSBbXS5jb25jYXQoYXJncy5jaG9pY2VzIHx8IFtdKTtcblxuICBjb25zdCB0b1NlbGVjdGVkID0gaXRlbXMgPT4gaXRlbXMuZmlsdGVyKGl0ZW0gPT4gaXRlbS5zZWxlY3RlZCkubWFwKGl0ZW0gPT4gaXRlbS52YWx1ZSk7XG5cbiAgcmV0dXJuIHRvUHJvbXB0KCdBdXRvY29tcGxldGVNdWx0aXNlbGVjdFByb21wdCcsIGFyZ3MsIHtcbiAgICBvbkFib3J0OiB0b1NlbGVjdGVkLFxuICAgIG9uU3VibWl0OiB0b1NlbGVjdGVkXG4gIH0pO1xufTtcblxuY29uc3QgYnlUaXRsZSA9IChpbnB1dCwgY2hvaWNlcykgPT4gUHJvbWlzZS5yZXNvbHZlKGNob2ljZXMuZmlsdGVyKGl0ZW0gPT4gaXRlbS50aXRsZS5zbGljZSgwLCBpbnB1dC5sZW5ndGgpLnRvTG93ZXJDYXNlKCkgPT09IGlucHV0LnRvTG93ZXJDYXNlKCkpKTtcbi8qKlxuICogSW50ZXJhY3RpdmUgYXV0by1jb21wbGV0ZSBwcm9tcHRcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLm1lc3NhZ2UgUHJvbXB0IG1lc3NhZ2UgdG8gZGlzcGxheVxuICogQHBhcmFtIHtBcnJheX0gYXJncy5jaG9pY2VzIEFycmF5IG9mIGF1dG8tY29tcGxldGUgY2hvaWNlcyBvYmplY3RzIGBbeyB0aXRsZSwgdmFsdWUgfSwgLi4uXWBcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFthcmdzLnN1Z2dlc3RdIEZ1bmN0aW9uIHRvIGZpbHRlciByZXN1bHRzIGJhc2VkIG9uIHVzZXIgaW5wdXQuIERlZmF1bHRzIHRvIHNvcnQgYnkgYHRpdGxlYFxuICogQHBhcmFtIHtudW1iZXJ9IFthcmdzLmxpbWl0PTEwXSBNYXggbnVtYmVyIG9mIHJlc3VsdHMgdG8gc2hvd1xuICogQHBhcmFtIHtzdHJpbmd9IFthcmdzLnN0eWxlPVwiZGVmYXVsdFwiXSBSZW5kZXIgc3R5bGUgKCdkZWZhdWx0JywgJ3Bhc3N3b3JkJywgJ2ludmlzaWJsZScpXG4gKiBAcGFyYW0ge1N0cmluZ30gW2FyZ3MuaW5pdGlhbF0gSW5kZXggb2YgdGhlIGRlZmF1bHQgdmFsdWVcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuY2xlYXJGaXJzdF0gVGhlIGZpcnN0IEVTQ0FQRSBrZXlwcmVzcyB3aWxsIGNsZWFyIHRoZSBpbnB1dFxuICogQHBhcmFtIHtTdHJpbmd9IFthcmdzLmZhbGxiYWNrXSBGYWxsYmFjayBtZXNzYWdlIC0gZGVmYXVsdHMgdG8gaW5pdGlhbCB2YWx1ZVxuICogQHBhcmFtIHtmdW5jdGlvbn0gW2FyZ3Mub25TdGF0ZV0gT24gc3RhdGUgY2hhbmdlIGNhbGxiYWNrXG4gKiBAcGFyYW0ge1N0cmVhbX0gW2FyZ3Muc3RkaW5dIFRoZSBSZWFkYWJsZSBzdHJlYW0gdG8gbGlzdGVuIHRvXG4gKiBAcGFyYW0ge1N0cmVhbX0gW2FyZ3Muc3Rkb3V0XSBUaGUgV3JpdGFibGUgc3RyZWFtIHRvIHdyaXRlIHJlYWRsaW5lIGRhdGEgdG9cbiAqIEByZXR1cm5zIHtQcm9taXNlfSBQcm9taXNlIHdpdGggdXNlciBpbnB1dFxuICovXG5cblxuJC5hdXRvY29tcGxldGUgPSBhcmdzID0+IHtcbiAgYXJncy5zdWdnZXN0ID0gYXJncy5zdWdnZXN0IHx8IGJ5VGl0bGU7XG4gIGFyZ3MuY2hvaWNlcyA9IFtdLmNvbmNhdChhcmdzLmNob2ljZXMgfHwgW10pO1xuICByZXR1cm4gdG9Qcm9tcHQoJ0F1dG9jb21wbGV0ZVByb21wdCcsIGFyZ3MpO1xufTsiLCIndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHsgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyB9IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuZnVuY3Rpb24gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIobywgYWxsb3dBcnJheUxpa2UpIHsgdmFyIGl0ID0gdHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl0gfHwgb1tcIkBAaXRlcmF0b3JcIl07IGlmICghaXQpIHsgaWYgKEFycmF5LmlzQXJyYXkobykgfHwgKGl0ID0gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8pKSB8fCBhbGxvd0FycmF5TGlrZSAmJiBvICYmIHR5cGVvZiBvLmxlbmd0aCA9PT0gXCJudW1iZXJcIikgeyBpZiAoaXQpIG8gPSBpdDsgdmFyIGkgPSAwOyB2YXIgRiA9IGZ1bmN0aW9uIEYoKSB7fTsgcmV0dXJuIHsgczogRiwgbjogZnVuY3Rpb24gbigpIHsgaWYgKGkgPj0gby5sZW5ndGgpIHJldHVybiB7IGRvbmU6IHRydWUgfTsgcmV0dXJuIHsgZG9uZTogZmFsc2UsIHZhbHVlOiBvW2krK10gfTsgfSwgZTogZnVuY3Rpb24gZShfZSkgeyB0aHJvdyBfZTsgfSwgZjogRiB9OyB9IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gaXRlcmF0ZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfSB2YXIgbm9ybWFsQ29tcGxldGlvbiA9IHRydWUsIGRpZEVyciA9IGZhbHNlLCBlcnI7IHJldHVybiB7IHM6IGZ1bmN0aW9uIHMoKSB7IGl0ID0gaXQuY2FsbChvKTsgfSwgbjogZnVuY3Rpb24gbigpIHsgdmFyIHN0ZXAgPSBpdC5uZXh0KCk7IG5vcm1hbENvbXBsZXRpb24gPSBzdGVwLmRvbmU7IHJldHVybiBzdGVwOyB9LCBlOiBmdW5jdGlvbiBlKF9lMikgeyBkaWRFcnIgPSB0cnVlOyBlcnIgPSBfZTI7IH0sIGY6IGZ1bmN0aW9uIGYoKSB7IHRyeSB7IGlmICghbm9ybWFsQ29tcGxldGlvbiAmJiBpdC5yZXR1cm4gIT0gbnVsbCkgaXQucmV0dXJuKCk7IH0gZmluYWxseSB7IGlmIChkaWRFcnIpIHRocm93IGVycjsgfSB9IH07IH1cblxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikgeyBpZiAoIW8pIHJldHVybjsgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpOyBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lOyBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTsgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB9XG5cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7IGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoOyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIGFycjJbaV0gPSBhcnJbaV07IHJldHVybiBhcnIyOyB9XG5cbmZ1bmN0aW9uIGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywga2V5LCBhcmcpIHsgdHJ5IHsgdmFyIGluZm8gPSBnZW5ba2V5XShhcmcpOyB2YXIgdmFsdWUgPSBpbmZvLnZhbHVlOyB9IGNhdGNoIChlcnJvcikgeyByZWplY3QoZXJyb3IpOyByZXR1cm47IH0gaWYgKGluZm8uZG9uZSkgeyByZXNvbHZlKHZhbHVlKTsgfSBlbHNlIHsgUHJvbWlzZS5yZXNvbHZlKHZhbHVlKS50aGVuKF9uZXh0LCBfdGhyb3cpOyB9IH1cblxuZnVuY3Rpb24gX2FzeW5jVG9HZW5lcmF0b3IoZm4pIHsgcmV0dXJuIGZ1bmN0aW9uICgpIHsgdmFyIHNlbGYgPSB0aGlzLCBhcmdzID0gYXJndW1lbnRzOyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2YXIgZ2VuID0gZm4uYXBwbHkoc2VsZiwgYXJncyk7IGZ1bmN0aW9uIF9uZXh0KHZhbHVlKSB7IGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJuZXh0XCIsIHZhbHVlKTsgfSBmdW5jdGlvbiBfdGhyb3coZXJyKSB7IGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJ0aHJvd1wiLCBlcnIpOyB9IF9uZXh0KHVuZGVmaW5lZCk7IH0pOyB9OyB9XG5cbmNvbnN0IHByb21wdHMgPSByZXF1aXJlKCcuL3Byb21wdHMnKTtcblxuY29uc3QgcGFzc09uID0gWydzdWdnZXN0JywgJ2Zvcm1hdCcsICdvblN0YXRlJywgJ3ZhbGlkYXRlJywgJ29uUmVuZGVyJywgJ3R5cGUnXTtcblxuY29uc3Qgbm9vcCA9ICgpID0+IHt9O1xuLyoqXG4gKiBQcm9tcHQgZm9yIGEgc2VyaWVzIG9mIHF1ZXN0aW9uc1xuICogQHBhcmFtIHtBcnJheXxPYmplY3R9IHF1ZXN0aW9ucyBTaW5nbGUgcXVlc3Rpb24gb2JqZWN0IG9yIEFycmF5IG9mIHF1ZXN0aW9uIG9iamVjdHNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtvblN1Ym1pdF0gQ2FsbGJhY2sgZnVuY3Rpb24gY2FsbGVkIG9uIHByb21wdCBzdWJtaXRcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtvbkNhbmNlbF0gQ2FsbGJhY2sgZnVuY3Rpb24gY2FsbGVkIG9uIGNhbmNlbC9hYm9ydFxuICogQHJldHVybnMge09iamVjdH0gT2JqZWN0IHdpdGggdmFsdWVzIGZyb20gdXNlciBpbnB1dFxuICovXG5cblxuZnVuY3Rpb24gcHJvbXB0KCkge1xuICByZXR1cm4gX3Byb21wdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufVxuXG5mdW5jdGlvbiBfcHJvbXB0KCkge1xuICBfcHJvbXB0ID0gX2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qIChxdWVzdGlvbnMgPSBbXSwge1xuICAgIG9uU3VibWl0ID0gbm9vcCxcbiAgICBvbkNhbmNlbCA9IG5vb3BcbiAgfSA9IHt9KSB7XG4gICAgY29uc3QgYW5zd2VycyA9IHt9O1xuICAgIGNvbnN0IG92ZXJyaWRlID0gcHJvbXB0Ll9vdmVycmlkZSB8fCB7fTtcbiAgICBxdWVzdGlvbnMgPSBbXS5jb25jYXQocXVlc3Rpb25zKTtcbiAgICBsZXQgYW5zd2VyLCBxdWVzdGlvbiwgcXVpdCwgbmFtZSwgdHlwZSwgbGFzdFByb21wdDtcblxuICAgIGNvbnN0IGdldEZvcm1hdHRlZEFuc3dlciA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgX3JlZiA9IF9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKiAocXVlc3Rpb24sIGFuc3dlciwgc2tpcFZhbGlkYXRpb24gPSBmYWxzZSkge1xuICAgICAgICBpZiAoIXNraXBWYWxpZGF0aW9uICYmIHF1ZXN0aW9uLnZhbGlkYXRlICYmIHF1ZXN0aW9uLnZhbGlkYXRlKGFuc3dlcikgIT09IHRydWUpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcXVlc3Rpb24uZm9ybWF0ID8geWllbGQgcXVlc3Rpb24uZm9ybWF0KGFuc3dlciwgYW5zd2VycykgOiBhbnN3ZXI7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGZ1bmN0aW9uIGdldEZvcm1hdHRlZEFuc3dlcihfeCwgX3gyKSB7XG4gICAgICAgIHJldHVybiBfcmVmLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB9O1xuICAgIH0oKTtcblxuICAgIHZhciBfaXRlcmF0b3IgPSBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlcihxdWVzdGlvbnMpLFxuICAgICAgICBfc3RlcDtcblxuICAgIHRyeSB7XG4gICAgICBmb3IgKF9pdGVyYXRvci5zKCk7ICEoX3N0ZXAgPSBfaXRlcmF0b3IubigpKS5kb25lOykge1xuICAgICAgICBxdWVzdGlvbiA9IF9zdGVwLnZhbHVlO1xuICAgICAgICB2YXIgX3F1ZXN0aW9uID0gcXVlc3Rpb247XG4gICAgICAgIG5hbWUgPSBfcXVlc3Rpb24ubmFtZTtcbiAgICAgICAgdHlwZSA9IF9xdWVzdGlvbi50eXBlO1xuXG4gICAgICAgIC8vIGV2YWx1YXRlIHR5cGUgZmlyc3QgYW5kIHNraXAgaWYgdHlwZSBpcyBhIGZhbHN5IHZhbHVlXG4gICAgICAgIGlmICh0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHR5cGUgPSB5aWVsZCB0eXBlKGFuc3dlciwgX29iamVjdFNwcmVhZCh7fSwgYW5zd2VycyksIHF1ZXN0aW9uKTtcbiAgICAgICAgICBxdWVzdGlvblsndHlwZSddID0gdHlwZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdHlwZSkgY29udGludWU7IC8vIGlmIHByb3BlcnR5IGlzIGEgZnVuY3Rpb24sIGludm9rZSBpdCB1bmxlc3MgaXQncyBhIHNwZWNpYWwgZnVuY3Rpb25cblxuICAgICAgICBmb3IgKGxldCBrZXkgaW4gcXVlc3Rpb24pIHtcbiAgICAgICAgICBpZiAocGFzc09uLmluY2x1ZGVzKGtleSkpIGNvbnRpbnVlO1xuICAgICAgICAgIGxldCB2YWx1ZSA9IHF1ZXN0aW9uW2tleV07XG4gICAgICAgICAgcXVlc3Rpb25ba2V5XSA9IHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyA/IHlpZWxkIHZhbHVlKGFuc3dlciwgX29iamVjdFNwcmVhZCh7fSwgYW5zd2VycyksIGxhc3RQcm9tcHQpIDogdmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICBsYXN0UHJvbXB0ID0gcXVlc3Rpb247XG5cbiAgICAgICAgaWYgKHR5cGVvZiBxdWVzdGlvbi5tZXNzYWdlICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcigncHJvbXB0IG1lc3NhZ2UgaXMgcmVxdWlyZWQnKTtcbiAgICAgICAgfSAvLyB1cGRhdGUgdmFycyBpbiBjYXNlIHRoZXkgY2hhbmdlZFxuXG5cbiAgICAgICAgdmFyIF9xdWVzdGlvbjIgPSBxdWVzdGlvbjtcbiAgICAgICAgbmFtZSA9IF9xdWVzdGlvbjIubmFtZTtcbiAgICAgICAgdHlwZSA9IF9xdWVzdGlvbjIudHlwZTtcblxuICAgICAgICBpZiAocHJvbXB0c1t0eXBlXSA9PT0gdm9pZCAwKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBwcm9tcHQgdHlwZSAoJHt0eXBlfSkgaXMgbm90IGRlZmluZWRgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvdmVycmlkZVtxdWVzdGlvbi5uYW1lXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgYW5zd2VyID0geWllbGQgZ2V0Rm9ybWF0dGVkQW5zd2VyKHF1ZXN0aW9uLCBvdmVycmlkZVtxdWVzdGlvbi5uYW1lXSk7XG5cbiAgICAgICAgICBpZiAoYW5zd2VyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGFuc3dlcnNbbmFtZV0gPSBhbnN3ZXI7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIEdldCB0aGUgaW5qZWN0ZWQgYW5zd2VyIGlmIHRoZXJlIGlzIG9uZSBvciBwcm9tcHQgdGhlIHVzZXJcbiAgICAgICAgICBhbnN3ZXIgPSBwcm9tcHQuX2luamVjdGVkID8gZ2V0SW5qZWN0ZWRBbnN3ZXIocHJvbXB0Ll9pbmplY3RlZCwgcXVlc3Rpb24uaW5pdGlhbCkgOiB5aWVsZCBwcm9tcHRzW3R5cGVdKHF1ZXN0aW9uKTtcbiAgICAgICAgICBhbnN3ZXJzW25hbWVdID0gYW5zd2VyID0geWllbGQgZ2V0Rm9ybWF0dGVkQW5zd2VyKHF1ZXN0aW9uLCBhbnN3ZXIsIHRydWUpO1xuICAgICAgICAgIHF1aXQgPSB5aWVsZCBvblN1Ym1pdChxdWVzdGlvbiwgYW5zd2VyLCBhbnN3ZXJzKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgcXVpdCA9ICEoeWllbGQgb25DYW5jZWwocXVlc3Rpb24sIGFuc3dlcnMpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChxdWl0KSByZXR1cm4gYW5zd2VycztcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIF9pdGVyYXRvci5lKGVycik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIF9pdGVyYXRvci5mKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFuc3dlcnM7XG4gIH0pO1xuICByZXR1cm4gX3Byb21wdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufVxuXG5mdW5jdGlvbiBnZXRJbmplY3RlZEFuc3dlcihpbmplY3RlZCwgZGVhZnVsdFZhbHVlKSB7XG4gIGNvbnN0IGFuc3dlciA9IGluamVjdGVkLnNoaWZ0KCk7XG5cbiAgaWYgKGFuc3dlciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgdGhyb3cgYW5zd2VyO1xuICB9XG5cbiAgcmV0dXJuIGFuc3dlciA9PT0gdW5kZWZpbmVkID8gZGVhZnVsdFZhbHVlIDogYW5zd2VyO1xufVxuXG5mdW5jdGlvbiBpbmplY3QoYW5zd2Vycykge1xuICBwcm9tcHQuX2luamVjdGVkID0gKHByb21wdC5faW5qZWN0ZWQgfHwgW10pLmNvbmNhdChhbnN3ZXJzKTtcbn1cblxuZnVuY3Rpb24gb3ZlcnJpZGUoYW5zd2Vycykge1xuICBwcm9tcHQuX292ZXJyaWRlID0gT2JqZWN0LmFzc2lnbih7fSwgYW5zd2Vycyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmFzc2lnbihwcm9tcHQsIHtcbiAgcHJvbXB0LFxuICBwcm9tcHRzLFxuICBpbmplY3QsXG4gIG92ZXJyaWRlXG59KTsiLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gKGtleSwgaXNTZWxlY3QpID0+IHtcbiAgaWYgKGtleS5tZXRhICYmIGtleS5uYW1lICE9PSAnZXNjYXBlJykgcmV0dXJuO1xuICBcbiAgaWYgKGtleS5jdHJsKSB7XG4gICAgaWYgKGtleS5uYW1lID09PSAnYScpIHJldHVybiAnZmlyc3QnO1xuICAgIGlmIChrZXkubmFtZSA9PT0gJ2MnKSByZXR1cm4gJ2Fib3J0JztcbiAgICBpZiAoa2V5Lm5hbWUgPT09ICdkJykgcmV0dXJuICdhYm9ydCc7XG4gICAgaWYgKGtleS5uYW1lID09PSAnZScpIHJldHVybiAnbGFzdCc7XG4gICAgaWYgKGtleS5uYW1lID09PSAnZycpIHJldHVybiAncmVzZXQnO1xuICB9XG4gIFxuICBpZiAoaXNTZWxlY3QpIHtcbiAgICBpZiAoa2V5Lm5hbWUgPT09ICdqJykgcmV0dXJuICdkb3duJztcbiAgICBpZiAoa2V5Lm5hbWUgPT09ICdrJykgcmV0dXJuICd1cCc7XG4gIH1cblxuICBpZiAoa2V5Lm5hbWUgPT09ICdyZXR1cm4nKSByZXR1cm4gJ3N1Ym1pdCc7XG4gIGlmIChrZXkubmFtZSA9PT0gJ2VudGVyJykgcmV0dXJuICdzdWJtaXQnOyAvLyBjdHJsICsgSlxuICBpZiAoa2V5Lm5hbWUgPT09ICdiYWNrc3BhY2UnKSByZXR1cm4gJ2RlbGV0ZSc7XG4gIGlmIChrZXkubmFtZSA9PT0gJ2RlbGV0ZScpIHJldHVybiAnZGVsZXRlRm9yd2FyZCc7XG4gIGlmIChrZXkubmFtZSA9PT0gJ2Fib3J0JykgcmV0dXJuICdhYm9ydCc7XG4gIGlmIChrZXkubmFtZSA9PT0gJ2VzY2FwZScpIHJldHVybiAnZXhpdCc7XG4gIGlmIChrZXkubmFtZSA9PT0gJ3RhYicpIHJldHVybiAnbmV4dCc7XG4gIGlmIChrZXkubmFtZSA9PT0gJ3BhZ2Vkb3duJykgcmV0dXJuICduZXh0UGFnZSc7XG4gIGlmIChrZXkubmFtZSA9PT0gJ3BhZ2V1cCcpIHJldHVybiAncHJldlBhZ2UnO1xuICAvLyBUT0RPIGNyZWF0ZSBob21lKCkgaW4gcHJvbXB0IHR5cGVzIChlLmcuIFRleHRQcm9tcHQpXG4gIGlmIChrZXkubmFtZSA9PT0gJ2hvbWUnKSByZXR1cm4gJ2hvbWUnO1xuICAvLyBUT0RPIGNyZWF0ZSBlbmQoKSBpbiBwcm9tcHQgdHlwZXMgKGUuZy4gVGV4dFByb21wdClcbiAgaWYgKGtleS5uYW1lID09PSAnZW5kJykgcmV0dXJuICdlbmQnO1xuXG4gIGlmIChrZXkubmFtZSA9PT0gJ3VwJykgcmV0dXJuICd1cCc7XG4gIGlmIChrZXkubmFtZSA9PT0gJ2Rvd24nKSByZXR1cm4gJ2Rvd24nO1xuICBpZiAoa2V5Lm5hbWUgPT09ICdyaWdodCcpIHJldHVybiAncmlnaHQnO1xuICBpZiAoa2V5Lm5hbWUgPT09ICdsZWZ0JykgcmV0dXJuICdsZWZ0JztcblxuICByZXR1cm4gZmFsc2U7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHN0ciA9PiB7XG4gIGNvbnN0IHBhdHRlcm4gPSBbXG4gICAgJ1tcXFxcdTAwMUJcXFxcdTAwOUJdW1tcXFxcXSgpIzs/XSooPzooPzooPzooPzo7Wy1hLXpBLVpcXFxcZFxcXFwvIyYuOj0/JUB+X10rKSp8W2EtekEtWlxcXFxkXSsoPzo7Wy1hLXpBLVpcXFxcZFxcXFwvIyYuOj0/JUB+X10qKSopP1xcXFx1MDAwNyknLFxuICAgICcoPzooPzpcXFxcZHsxLDR9KD86O1xcXFxkezAsNH0pKik/W1xcXFxkQS1QUlpjZi1udHFyeT0+PH5dKSknXG4gIF0uam9pbignfCcpO1xuXG4gIGNvbnN0IFJHWCA9IG5ldyBSZWdFeHAocGF0dGVybiwgJ2cnKTtcbiAgcmV0dXJuIHR5cGVvZiBzdHIgPT09ICdzdHJpbmcnID8gc3RyLnJlcGxhY2UoUkdYLCAnJykgOiBzdHI7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBzdHJpcCA9IHJlcXVpcmUoJy4vc3RyaXAnKTtcbmNvbnN0IHsgZXJhc2UsIGN1cnNvciB9ID0gcmVxdWlyZSgnc2lzdGVyYW5zaScpO1xuXG5jb25zdCB3aWR0aCA9IHN0ciA9PiBbLi4uc3RyaXAoc3RyKV0ubGVuZ3RoO1xuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9tcHRcbiAqIEBwYXJhbSB7bnVtYmVyfSBwZXJMaW5lXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ocHJvbXB0LCBwZXJMaW5lKSB7XG4gIGlmICghcGVyTGluZSkgcmV0dXJuIGVyYXNlLmxpbmUgKyBjdXJzb3IudG8oMCk7XG5cbiAgbGV0IHJvd3MgPSAwO1xuICBjb25zdCBsaW5lcyA9IHByb21wdC5zcGxpdCgvXFxyP1xcbi8pO1xuICBmb3IgKGxldCBsaW5lIG9mIGxpbmVzKSB7XG4gICAgcm93cyArPSAxICsgTWF0aC5mbG9vcihNYXRoLm1heCh3aWR0aChsaW5lKSAtIDEsIDApIC8gcGVyTGluZSk7XG4gIH1cblxuICByZXR1cm4gZXJhc2UubGluZXMocm93cyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1x0XG5cbiBjb25zdCBtYWluID0ge1xuICBhcnJvd1VwOiAn4oaRJyxcbiAgYXJyb3dEb3duOiAn4oaTJyxcbiAgYXJyb3dMZWZ0OiAn4oaQJyxcbiAgYXJyb3dSaWdodDogJ+KGkicsXG4gIHJhZGlvT246ICfil4knLFxuICByYWRpb09mZjogJ+KXrycsXG4gIHRpY2s6ICfinJQnLFx0XG4gIGNyb3NzOiAn4pyWJyxcdFxuICBlbGxpcHNpczogJ+KApicsXHRcbiAgcG9pbnRlclNtYWxsOiAn4oC6JyxcdFxuICBsaW5lOiAn4pSAJyxcdFxuICBwb2ludGVyOiAn4p2vJ1x0XG59O1x0XG5jb25zdCB3aW4gPSB7XG4gIGFycm93VXA6IG1haW4uYXJyb3dVcCxcbiAgYXJyb3dEb3duOiBtYWluLmFycm93RG93bixcbiAgYXJyb3dMZWZ0OiBtYWluLmFycm93TGVmdCxcbiAgYXJyb3dSaWdodDogbWFpbi5hcnJvd1JpZ2h0LFxuICByYWRpb09uOiAnKCopJyxcbiAgcmFkaW9PZmY6ICcoICknLFx0XG4gIHRpY2s6ICfiiJonLFx0XG4gIGNyb3NzOiAnw5cnLFx0XG4gIGVsbGlwc2lzOiAnLi4uJyxcdFxuICBwb2ludGVyU21hbGw6ICfCuycsXHRcbiAgbGluZTogJ+KUgCcsXHRcbiAgcG9pbnRlcjogJz4nXHRcbn07XHRcbmNvbnN0IGZpZ3VyZXMgPSBwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInID8gd2luIDogbWFpbjtcdFxuXG4gbW9kdWxlLmV4cG9ydHMgPSBmaWd1cmVzO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBjID0gcmVxdWlyZSgna2xldXInKTtcbmNvbnN0IGZpZ3VyZXMgPSByZXF1aXJlKCcuL2ZpZ3VyZXMnKTtcblxuLy8gcmVuZGVyaW5nIHVzZXIgaW5wdXQuXG5jb25zdCBzdHlsZXMgPSBPYmplY3QuZnJlZXplKHtcbiAgcGFzc3dvcmQ6IHsgc2NhbGU6IDEsIHJlbmRlcjogaW5wdXQgPT4gJyonLnJlcGVhdChpbnB1dC5sZW5ndGgpIH0sXG4gIGVtb2ppOiB7IHNjYWxlOiAyLCByZW5kZXI6IGlucHV0ID0+ICfwn5iDJy5yZXBlYXQoaW5wdXQubGVuZ3RoKSB9LFxuICBpbnZpc2libGU6IHsgc2NhbGU6IDAsIHJlbmRlcjogaW5wdXQgPT4gJycgfSxcbiAgZGVmYXVsdDogeyBzY2FsZTogMSwgcmVuZGVyOiBpbnB1dCA9PiBgJHtpbnB1dH1gIH1cbn0pO1xuY29uc3QgcmVuZGVyID0gdHlwZSA9PiBzdHlsZXNbdHlwZV0gfHwgc3R5bGVzLmRlZmF1bHQ7XG5cbi8vIGljb24gdG8gc2lnbmFsaXplIGEgcHJvbXB0LlxuY29uc3Qgc3ltYm9scyA9IE9iamVjdC5mcmVlemUoe1xuICBhYm9ydGVkOiBjLnJlZChmaWd1cmVzLmNyb3NzKSxcbiAgZG9uZTogYy5ncmVlbihmaWd1cmVzLnRpY2spLFxuICBleGl0ZWQ6IGMueWVsbG93KGZpZ3VyZXMuY3Jvc3MpLFxuICBkZWZhdWx0OiBjLmN5YW4oJz8nKVxufSk7XG5cbmNvbnN0IHN5bWJvbCA9IChkb25lLCBhYm9ydGVkLCBleGl0ZWQpID0+XG4gIGFib3J0ZWQgPyBzeW1ib2xzLmFib3J0ZWQgOiBleGl0ZWQgPyBzeW1ib2xzLmV4aXRlZCA6IGRvbmUgPyBzeW1ib2xzLmRvbmUgOiBzeW1ib2xzLmRlZmF1bHQ7XG5cbi8vIGJldHdlZW4gdGhlIHF1ZXN0aW9uIGFuZCB0aGUgdXNlcidzIGlucHV0LlxuY29uc3QgZGVsaW1pdGVyID0gY29tcGxldGluZyA9PlxuICBjLmdyYXkoY29tcGxldGluZyA/IGZpZ3VyZXMuZWxsaXBzaXMgOiBmaWd1cmVzLnBvaW50ZXJTbWFsbCk7XG5cbmNvbnN0IGl0ZW0gPSAoZXhwYW5kYWJsZSwgZXhwYW5kZWQpID0+XG4gIGMuZ3JheShleHBhbmRhYmxlID8gKGV4cGFuZGVkID8gZmlndXJlcy5wb2ludGVyU21hbGwgOiAnKycpIDogZmlndXJlcy5saW5lKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHN0eWxlcyxcbiAgcmVuZGVyLFxuICBzeW1ib2xzLFxuICBzeW1ib2wsXG4gIGRlbGltaXRlcixcbiAgaXRlbVxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuY29uc3Qgc3RyaXAgPSByZXF1aXJlKCcuL3N0cmlwJyk7XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IG1zZ1xuICogQHBhcmFtIHtudW1iZXJ9IHBlckxpbmVcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobXNnLCBwZXJMaW5lKSB7XG4gIGxldCBsaW5lcyA9IFN0cmluZyhzdHJpcChtc2cpIHx8ICcnKS5zcGxpdCgvXFxyP1xcbi8pO1xuXG4gIGlmICghcGVyTGluZSkgcmV0dXJuIGxpbmVzLmxlbmd0aDtcbiAgcmV0dXJuIGxpbmVzLm1hcChsID0+IE1hdGguY2VpbChsLmxlbmd0aCAvIHBlckxpbmUpKVxuICAgICAgLnJlZHVjZSgoYSwgYikgPT4gYSArIGIpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gbXNnIFRoZSBtZXNzYWdlIHRvIHdyYXBcbiAqIEBwYXJhbSB7b2JqZWN0fSBvcHRzXG4gKiBAcGFyYW0ge251bWJlcnxzdHJpbmd9IFtvcHRzLm1hcmdpbl0gTGVmdCBtYXJnaW5cbiAqIEBwYXJhbSB7bnVtYmVyfSBvcHRzLndpZHRoIE1heGltdW0gY2hhcmFjdGVycyBwZXIgbGluZSBpbmNsdWRpbmcgdGhlIG1hcmdpblxuICovXG5tb2R1bGUuZXhwb3J0cyA9IChtc2csIG9wdHMgPSB7fSkgPT4ge1xuICBjb25zdCB0YWIgPSBOdW1iZXIuaXNTYWZlSW50ZWdlcihwYXJzZUludChvcHRzLm1hcmdpbikpXG4gICAgPyBuZXcgQXJyYXkocGFyc2VJbnQob3B0cy5tYXJnaW4pKS5maWxsKCcgJykuam9pbignJylcbiAgICA6IChvcHRzLm1hcmdpbiB8fCAnJyk7XG5cbiAgY29uc3Qgd2lkdGggPSBvcHRzLndpZHRoO1xuXG4gIHJldHVybiAobXNnIHx8ICcnKS5zcGxpdCgvXFxyP1xcbi9nKVxuICAgIC5tYXAobGluZSA9PiBsaW5lXG4gICAgICAuc3BsaXQoL1xccysvZylcbiAgICAgIC5yZWR1Y2UoKGFyciwgdykgPT4ge1xuICAgICAgICBpZiAody5sZW5ndGggKyB0YWIubGVuZ3RoID49IHdpZHRoIHx8IGFyclthcnIubGVuZ3RoIC0gMV0ubGVuZ3RoICsgdy5sZW5ndGggKyAxIDwgd2lkdGgpXG4gICAgICAgICAgYXJyW2Fyci5sZW5ndGggLSAxXSArPSBgICR7d31gO1xuICAgICAgICBlbHNlIGFyci5wdXNoKGAke3RhYn0ke3d9YCk7XG4gICAgICAgIHJldHVybiBhcnI7XG4gICAgICB9LCBbIHRhYiBdKVxuICAgICAgLmpvaW4oJ1xcbicpKVxuICAgIC5qb2luKCdcXG4nKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogRGV0ZXJtaW5lIHdoYXQgZW50cmllcyBzaG91bGQgYmUgZGlzcGxheWVkIG9uIHRoZSBzY3JlZW4sIGJhc2VkIG9uIHRoZVxuICogY3VycmVudGx5IHNlbGVjdGVkIGluZGV4IGFuZCB0aGUgbWF4aW11bSB2aXNpYmxlLiBVc2VkIGluIGxpc3QtYmFzZWRcbiAqIHByb21wdHMgbGlrZSBgc2VsZWN0YCBhbmQgYG11bHRpc2VsZWN0YC5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gY3Vyc29yIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgZW50cnlcbiAqIEBwYXJhbSB7bnVtYmVyfSB0b3RhbCB0aGUgdG90YWwgZW50cmllcyBhdmFpbGFibGUgdG8gZGlzcGxheVxuICogQHBhcmFtIHtudW1iZXJ9IFttYXhWaXNpYmxlXSB0aGUgbnVtYmVyIG9mIGVudHJpZXMgdGhhdCBjYW4gYmUgZGlzcGxheWVkXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gKGN1cnNvciwgdG90YWwsIG1heFZpc2libGUpICA9PiB7XG4gIG1heFZpc2libGUgPSBtYXhWaXNpYmxlIHx8IHRvdGFsO1xuXG4gIGxldCBzdGFydEluZGV4ID0gTWF0aC5taW4odG90YWwtIG1heFZpc2libGUsIGN1cnNvciAtIE1hdGguZmxvb3IobWF4VmlzaWJsZSAvIDIpKTtcbiAgaWYgKHN0YXJ0SW5kZXggPCAwKSBzdGFydEluZGV4ID0gMDtcblxuICBsZXQgZW5kSW5kZXggPSBNYXRoLm1pbihzdGFydEluZGV4ICsgbWF4VmlzaWJsZSwgdG90YWwpO1xuXG4gIHJldHVybiB7IHN0YXJ0SW5kZXgsIGVuZEluZGV4IH07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgYWN0aW9uOiByZXF1aXJlKCcuL2FjdGlvbicpLFxuICBjbGVhcjogcmVxdWlyZSgnLi9jbGVhcicpLFxuICBzdHlsZTogcmVxdWlyZSgnLi9zdHlsZScpLFxuICBzdHJpcDogcmVxdWlyZSgnLi9zdHJpcCcpLFxuICBmaWd1cmVzOiByZXF1aXJlKCcuL2ZpZ3VyZXMnKSxcbiAgbGluZXM6IHJlcXVpcmUoJy4vbGluZXMnKSxcbiAgd3JhcDogcmVxdWlyZSgnLi93cmFwJyksXG4gIGVudHJpZXNUb0Rpc3BsYXk6IHJlcXVpcmUoJy4vZW50cmllc1RvRGlzcGxheScpXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCByZWFkbGluZSA9IHJlcXVpcmUoJ3JlYWRsaW5lJyk7XG5jb25zdCB7IGFjdGlvbiB9ID0gcmVxdWlyZSgnLi4vdXRpbCcpO1xuY29uc3QgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRzJyk7XG5jb25zdCB7IGJlZXAsIGN1cnNvciB9ID0gcmVxdWlyZSgnc2lzdGVyYW5zaScpO1xuY29uc3QgY29sb3IgPSByZXF1aXJlKCdrbGV1cicpO1xuXG4vKipcbiAqIEJhc2UgcHJvbXB0IHNrZWxldG9uXG4gKiBAcGFyYW0ge1N0cmVhbX0gW29wdHMuc3RkaW5dIFRoZSBSZWFkYWJsZSBzdHJlYW0gdG8gbGlzdGVuIHRvXG4gKiBAcGFyYW0ge1N0cmVhbX0gW29wdHMuc3Rkb3V0XSBUaGUgV3JpdGFibGUgc3RyZWFtIHRvIHdyaXRlIHJlYWRsaW5lIGRhdGEgdG9cbiAqL1xuY2xhc3MgUHJvbXB0IGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcbiAgY29uc3RydWN0b3Iob3B0cz17fSkge1xuICAgIHN1cGVyKCk7XG5cbiAgICB0aGlzLmZpcnN0UmVuZGVyID0gdHJ1ZTtcbiAgICB0aGlzLmluID0gb3B0cy5zdGRpbiB8fCBwcm9jZXNzLnN0ZGluO1xuICAgIHRoaXMub3V0ID0gb3B0cy5zdGRvdXQgfHwgcHJvY2Vzcy5zdGRvdXQ7XG4gICAgdGhpcy5vblJlbmRlciA9IChvcHRzLm9uUmVuZGVyIHx8ICgoKSA9PiB2b2lkIDApKS5iaW5kKHRoaXMpO1xuICAgIGNvbnN0IHJsID0gcmVhZGxpbmUuY3JlYXRlSW50ZXJmYWNlKHsgaW5wdXQ6dGhpcy5pbiwgZXNjYXBlQ29kZVRpbWVvdXQ6NTAgfSk7XG4gICAgcmVhZGxpbmUuZW1pdEtleXByZXNzRXZlbnRzKHRoaXMuaW4sIHJsKTtcblxuICAgIGlmICh0aGlzLmluLmlzVFRZKSB0aGlzLmluLnNldFJhd01vZGUodHJ1ZSk7XG4gICAgY29uc3QgaXNTZWxlY3QgPSBbICdTZWxlY3RQcm9tcHQnLCAnTXVsdGlzZWxlY3RQcm9tcHQnIF0uaW5kZXhPZih0aGlzLmNvbnN0cnVjdG9yLm5hbWUpID4gLTE7XG4gICAgY29uc3Qga2V5cHJlc3MgPSAoc3RyLCBrZXkpID0+IHtcbiAgICAgIGxldCBhID0gYWN0aW9uKGtleSwgaXNTZWxlY3QpO1xuICAgICAgaWYgKGEgPT09IGZhbHNlKSB7XG4gICAgICAgIHRoaXMuXyAmJiB0aGlzLl8oc3RyLCBrZXkpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdGhpc1thXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzW2FdKGtleSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmJlbGwoKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy5jbG9zZSA9ICgpID0+IHtcbiAgICAgIHRoaXMub3V0LndyaXRlKGN1cnNvci5zaG93KTtcbiAgICAgIHRoaXMuaW4ucmVtb3ZlTGlzdGVuZXIoJ2tleXByZXNzJywga2V5cHJlc3MpO1xuICAgICAgaWYgKHRoaXMuaW4uaXNUVFkpIHRoaXMuaW4uc2V0UmF3TW9kZShmYWxzZSk7XG4gICAgICBybC5jbG9zZSgpO1xuICAgICAgdGhpcy5lbWl0KHRoaXMuYWJvcnRlZCA/ICdhYm9ydCcgOiB0aGlzLmV4aXRlZCA/ICdleGl0JyA6ICdzdWJtaXQnLCB0aGlzLnZhbHVlKTtcbiAgICAgIHRoaXMuY2xvc2VkID0gdHJ1ZTtcbiAgICB9O1xuXG4gICAgdGhpcy5pbi5vbigna2V5cHJlc3MnLCBrZXlwcmVzcyk7XG4gIH1cblxuICBmaXJlKCkge1xuICAgIHRoaXMuZW1pdCgnc3RhdGUnLCB7XG4gICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgIGFib3J0ZWQ6ICEhdGhpcy5hYm9ydGVkLFxuICAgICAgZXhpdGVkOiAhIXRoaXMuZXhpdGVkXG4gICAgfSk7XG4gIH1cblxuICBiZWxsKCkge1xuICAgIHRoaXMub3V0LndyaXRlKGJlZXApO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIHRoaXMub25SZW5kZXIoY29sb3IpO1xuICAgIGlmICh0aGlzLmZpcnN0UmVuZGVyKSB0aGlzLmZpcnN0UmVuZGVyID0gZmFsc2U7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBQcm9tcHQ7XG4iLCJjb25zdCBjb2xvciA9IHJlcXVpcmUoJ2tsZXVyJyk7XG5jb25zdCBQcm9tcHQgPSByZXF1aXJlKCcuL3Byb21wdCcpO1xuY29uc3QgeyBlcmFzZSwgY3Vyc29yIH0gPSByZXF1aXJlKCdzaXN0ZXJhbnNpJyk7XG5jb25zdCB7IHN0eWxlLCBjbGVhciwgbGluZXMsIGZpZ3VyZXMgfSA9IHJlcXVpcmUoJy4uL3V0aWwnKTtcblxuLyoqXG4gKiBUZXh0UHJvbXB0IEJhc2UgRWxlbWVudFxuICogQHBhcmFtIHtPYmplY3R9IG9wdHMgT3B0aW9uc1xuICogQHBhcmFtIHtTdHJpbmd9IG9wdHMubWVzc2FnZSBNZXNzYWdlXG4gKiBAcGFyYW0ge1N0cmluZ30gW29wdHMuc3R5bGU9J2RlZmF1bHQnXSBSZW5kZXIgc3R5bGVcbiAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5pbml0aWFsXSBEZWZhdWx0IHZhbHVlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0cy52YWxpZGF0ZV0gVmFsaWRhdGUgZnVuY3Rpb25cbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLmVycm9yXSBUaGUgaW52YWxpZCBlcnJvciBsYWJlbFxuICovXG5jbGFzcyBUZXh0UHJvbXB0IGV4dGVuZHMgUHJvbXB0IHtcbiAgY29uc3RydWN0b3Iob3B0cz17fSkge1xuICAgIHN1cGVyKG9wdHMpO1xuICAgIHRoaXMudHJhbnNmb3JtID0gc3R5bGUucmVuZGVyKG9wdHMuc3R5bGUpO1xuICAgIHRoaXMuc2NhbGUgPSB0aGlzLnRyYW5zZm9ybS5zY2FsZTtcbiAgICB0aGlzLm1zZyA9IG9wdHMubWVzc2FnZTtcbiAgICB0aGlzLmluaXRpYWwgPSBvcHRzLmluaXRpYWwgfHwgYGA7XG4gICAgdGhpcy52YWxpZGF0b3IgPSBvcHRzLnZhbGlkYXRlIHx8ICgoKSA9PiB0cnVlKTtcbiAgICB0aGlzLnZhbHVlID0gYGA7XG4gICAgdGhpcy5lcnJvck1zZyA9IG9wdHMuZXJyb3IgfHwgYFBsZWFzZSBFbnRlciBBIFZhbGlkIFZhbHVlYDtcbiAgICB0aGlzLmN1cnNvciA9IE51bWJlcighIXRoaXMuaW5pdGlhbCk7XG4gICAgdGhpcy5jdXJzb3JPZmZzZXQgPSAwO1xuICAgIHRoaXMuY2xlYXIgPSBjbGVhcihgYCwgdGhpcy5vdXQuY29sdW1ucyk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHNldCB2YWx1ZSh2KSB7XG4gICAgaWYgKCF2ICYmIHRoaXMuaW5pdGlhbCkge1xuICAgICAgdGhpcy5wbGFjZWhvbGRlciA9IHRydWU7XG4gICAgICB0aGlzLnJlbmRlcmVkID0gY29sb3IuZ3JheSh0aGlzLnRyYW5zZm9ybS5yZW5kZXIodGhpcy5pbml0aWFsKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucGxhY2Vob2xkZXIgPSBmYWxzZTtcbiAgICAgIHRoaXMucmVuZGVyZWQgPSB0aGlzLnRyYW5zZm9ybS5yZW5kZXIodik7XG4gICAgfVxuICAgIHRoaXMuX3ZhbHVlID0gdjtcbiAgICB0aGlzLmZpcmUoKTtcbiAgfVxuXG4gIGdldCB2YWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gIH1cblxuICByZXNldCgpIHtcbiAgICB0aGlzLnZhbHVlID0gYGA7XG4gICAgdGhpcy5jdXJzb3IgPSBOdW1iZXIoISF0aGlzLmluaXRpYWwpO1xuICAgIHRoaXMuY3Vyc29yT2Zmc2V0ID0gMDtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZXhpdCgpIHtcbiAgICB0aGlzLmFib3J0KCk7XG4gIH1cblxuICBhYm9ydCgpIHtcbiAgICB0aGlzLnZhbHVlID0gdGhpcy52YWx1ZSB8fCB0aGlzLmluaXRpYWw7XG4gICAgdGhpcy5kb25lID0gdGhpcy5hYm9ydGVkID0gdHJ1ZTtcbiAgICB0aGlzLmVycm9yID0gZmFsc2U7XG4gICAgdGhpcy5yZWQgPSBmYWxzZTtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICAgIHRoaXMub3V0LndyaXRlKCdcXG4nKTtcbiAgICB0aGlzLmNsb3NlKCk7XG4gIH1cblxuICBhc3luYyB2YWxpZGF0ZSgpIHtcbiAgICBsZXQgdmFsaWQgPSBhd2FpdCB0aGlzLnZhbGlkYXRvcih0aGlzLnZhbHVlKTtcbiAgICBpZiAodHlwZW9mIHZhbGlkID09PSBgc3RyaW5nYCkge1xuICAgICAgdGhpcy5lcnJvck1zZyA9IHZhbGlkO1xuICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5lcnJvciA9ICF2YWxpZDtcbiAgfVxuXG4gIGFzeW5jIHN1Ym1pdCgpIHtcbiAgICB0aGlzLnZhbHVlID0gdGhpcy52YWx1ZSB8fCB0aGlzLmluaXRpYWw7XG4gICAgdGhpcy5jdXJzb3JPZmZzZXQgPSAwO1xuICAgIHRoaXMuY3Vyc29yID0gdGhpcy5yZW5kZXJlZC5sZW5ndGg7XG4gICAgYXdhaXQgdGhpcy52YWxpZGF0ZSgpO1xuICAgIGlmICh0aGlzLmVycm9yKSB7XG4gICAgICB0aGlzLnJlZCA9IHRydWU7XG4gICAgICB0aGlzLmZpcmUoKTtcbiAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuZG9uZSA9IHRydWU7XG4gICAgdGhpcy5hYm9ydGVkID0gZmFsc2U7XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgICB0aGlzLm91dC53cml0ZSgnXFxuJyk7XG4gICAgdGhpcy5jbG9zZSgpO1xuICB9XG5cbiAgbmV4dCgpIHtcbiAgICBpZiAoIXRoaXMucGxhY2Vob2xkZXIpIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgICB0aGlzLnZhbHVlID0gdGhpcy5pbml0aWFsO1xuICAgIHRoaXMuY3Vyc29yID0gdGhpcy5yZW5kZXJlZC5sZW5ndGg7XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIG1vdmVDdXJzb3Iobikge1xuICAgIGlmICh0aGlzLnBsYWNlaG9sZGVyKSByZXR1cm47XG4gICAgdGhpcy5jdXJzb3IgPSB0aGlzLmN1cnNvcituO1xuICAgIHRoaXMuY3Vyc29yT2Zmc2V0ICs9IG47XG4gIH1cblxuICBfKGMsIGtleSkge1xuICAgIGxldCBzMSA9IHRoaXMudmFsdWUuc2xpY2UoMCwgdGhpcy5jdXJzb3IpO1xuICAgIGxldCBzMiA9IHRoaXMudmFsdWUuc2xpY2UodGhpcy5jdXJzb3IpO1xuICAgIHRoaXMudmFsdWUgPSBgJHtzMX0ke2N9JHtzMn1gO1xuICAgIHRoaXMucmVkID0gZmFsc2U7XG4gICAgdGhpcy5jdXJzb3IgPSB0aGlzLnBsYWNlaG9sZGVyID8gMCA6IHMxLmxlbmd0aCsxO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBkZWxldGUoKSB7XG4gICAgaWYgKHRoaXMuaXNDdXJzb3JBdFN0YXJ0KCkpIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgICBsZXQgczEgPSB0aGlzLnZhbHVlLnNsaWNlKDAsIHRoaXMuY3Vyc29yLTEpO1xuICAgIGxldCBzMiA9IHRoaXMudmFsdWUuc2xpY2UodGhpcy5jdXJzb3IpO1xuICAgIHRoaXMudmFsdWUgPSBgJHtzMX0ke3MyfWA7XG4gICAgdGhpcy5yZWQgPSBmYWxzZTtcbiAgICBpZiAodGhpcy5pc0N1cnNvckF0U3RhcnQoKSkge1xuICAgICAgdGhpcy5jdXJzb3JPZmZzZXQgPSAwXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY3Vyc29yT2Zmc2V0Kys7XG4gICAgICB0aGlzLm1vdmVDdXJzb3IoLTEpO1xuICAgIH1cbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZGVsZXRlRm9yd2FyZCgpIHtcbiAgICBpZih0aGlzLmN1cnNvcip0aGlzLnNjYWxlID49IHRoaXMucmVuZGVyZWQubGVuZ3RoIHx8IHRoaXMucGxhY2Vob2xkZXIpIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgICBsZXQgczEgPSB0aGlzLnZhbHVlLnNsaWNlKDAsIHRoaXMuY3Vyc29yKTtcbiAgICBsZXQgczIgPSB0aGlzLnZhbHVlLnNsaWNlKHRoaXMuY3Vyc29yKzEpO1xuICAgIHRoaXMudmFsdWUgPSBgJHtzMX0ke3MyfWA7XG4gICAgdGhpcy5yZWQgPSBmYWxzZTtcbiAgICBpZiAodGhpcy5pc0N1cnNvckF0RW5kKCkpIHtcbiAgICAgIHRoaXMuY3Vyc29yT2Zmc2V0ID0gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jdXJzb3JPZmZzZXQrKztcbiAgICB9XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIGZpcnN0KCkge1xuICAgIHRoaXMuY3Vyc29yID0gMDtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgbGFzdCgpIHtcbiAgICB0aGlzLmN1cnNvciA9IHRoaXMudmFsdWUubGVuZ3RoO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBsZWZ0KCkge1xuICAgIGlmICh0aGlzLmN1cnNvciA8PSAwIHx8IHRoaXMucGxhY2Vob2xkZXIpIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgICB0aGlzLm1vdmVDdXJzb3IoLTEpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICByaWdodCgpIHtcbiAgICBpZiAodGhpcy5jdXJzb3IqdGhpcy5zY2FsZSA+PSB0aGlzLnJlbmRlcmVkLmxlbmd0aCB8fCB0aGlzLnBsYWNlaG9sZGVyKSByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgdGhpcy5tb3ZlQ3Vyc29yKDEpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBpc0N1cnNvckF0U3RhcnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY3Vyc29yID09PSAwIHx8ICh0aGlzLnBsYWNlaG9sZGVyICYmIHRoaXMuY3Vyc29yID09PSAxKTtcbiAgfVxuXG4gIGlzQ3Vyc29yQXRFbmQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY3Vyc29yID09PSB0aGlzLnJlbmRlcmVkLmxlbmd0aCB8fCAodGhpcy5wbGFjZWhvbGRlciAmJiB0aGlzLmN1cnNvciA9PT0gdGhpcy5yZW5kZXJlZC5sZW5ndGggKyAxKVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGlmICh0aGlzLmNsb3NlZCkgcmV0dXJuO1xuICAgIGlmICghdGhpcy5maXJzdFJlbmRlcikge1xuICAgICAgaWYgKHRoaXMub3V0cHV0RXJyb3IpXG4gICAgICAgIHRoaXMub3V0LndyaXRlKGN1cnNvci5kb3duKGxpbmVzKHRoaXMub3V0cHV0RXJyb3IsIHRoaXMub3V0LmNvbHVtbnMpIC0gMSkgKyBjbGVhcih0aGlzLm91dHB1dEVycm9yLCB0aGlzLm91dC5jb2x1bW5zKSk7XG4gICAgICB0aGlzLm91dC53cml0ZShjbGVhcih0aGlzLm91dHB1dFRleHQsIHRoaXMub3V0LmNvbHVtbnMpKTtcbiAgICB9XG4gICAgc3VwZXIucmVuZGVyKCk7XG4gICAgdGhpcy5vdXRwdXRFcnJvciA9ICcnO1xuXG4gICAgdGhpcy5vdXRwdXRUZXh0ID0gW1xuICAgICAgc3R5bGUuc3ltYm9sKHRoaXMuZG9uZSwgdGhpcy5hYm9ydGVkKSxcbiAgICAgIGNvbG9yLmJvbGQodGhpcy5tc2cpLFxuICAgICAgc3R5bGUuZGVsaW1pdGVyKHRoaXMuZG9uZSksXG4gICAgICB0aGlzLnJlZCA/IGNvbG9yLnJlZCh0aGlzLnJlbmRlcmVkKSA6IHRoaXMucmVuZGVyZWRcbiAgICBdLmpvaW4oYCBgKTtcblxuICAgIGlmICh0aGlzLmVycm9yKSB7XG4gICAgICB0aGlzLm91dHB1dEVycm9yICs9IHRoaXMuZXJyb3JNc2cuc3BsaXQoYFxcbmApXG4gICAgICAgICAgLnJlZHVjZSgoYSwgbCwgaSkgPT4gYSArIGBcXG4ke2kgPyAnICcgOiBmaWd1cmVzLnBvaW50ZXJTbWFsbH0gJHtjb2xvci5yZWQoKS5pdGFsaWMobCl9YCwgYGApO1xuICAgIH1cblxuICAgIHRoaXMub3V0LndyaXRlKGVyYXNlLmxpbmUgKyBjdXJzb3IudG8oMCkgKyB0aGlzLm91dHB1dFRleHQgKyBjdXJzb3Iuc2F2ZSArIHRoaXMub3V0cHV0RXJyb3IgKyBjdXJzb3IucmVzdG9yZSArIGN1cnNvci5tb3ZlKHRoaXMuY3Vyc29yT2Zmc2V0LCAwKSk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBUZXh0UHJvbXB0OyIsIid1c2Ugc3RyaWN0JztcblxuY29uc3QgY29sb3IgPSByZXF1aXJlKCdrbGV1cicpO1xuY29uc3QgUHJvbXB0ID0gcmVxdWlyZSgnLi9wcm9tcHQnKTtcbmNvbnN0IHsgc3R5bGUsIGNsZWFyLCBmaWd1cmVzLCB3cmFwLCBlbnRyaWVzVG9EaXNwbGF5IH0gPSByZXF1aXJlKCcuLi91dGlsJyk7XG5jb25zdCB7IGN1cnNvciB9ID0gcmVxdWlyZSgnc2lzdGVyYW5zaScpO1xuXG4vKipcbiAqIFNlbGVjdFByb21wdCBCYXNlIEVsZW1lbnRcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIE9wdGlvbnNcbiAqIEBwYXJhbSB7U3RyaW5nfSBvcHRzLm1lc3NhZ2UgTWVzc2FnZVxuICogQHBhcmFtIHtBcnJheX0gb3B0cy5jaG9pY2VzIEFycmF5IG9mIGNob2ljZSBvYmplY3RzXG4gKiBAcGFyYW0ge1N0cmluZ30gW29wdHMuaGludF0gSGludCB0byBkaXNwbGF5XG4gKiBAcGFyYW0ge051bWJlcn0gW29wdHMuaW5pdGlhbF0gSW5kZXggb2YgZGVmYXVsdCB2YWx1ZVxuICogQHBhcmFtIHtTdHJlYW19IFtvcHRzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFtvcHRzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKiBAcGFyYW0ge051bWJlcn0gW29wdHMub3B0aW9uc1BlclBhZ2U9MTBdIE1heCBvcHRpb25zIHRvIGRpc3BsYXkgYXQgb25jZVxuICovXG5jbGFzcyBTZWxlY3RQcm9tcHQgZXh0ZW5kcyBQcm9tcHQge1xuICBjb25zdHJ1Y3RvcihvcHRzPXt9KSB7XG4gICAgc3VwZXIob3B0cyk7XG4gICAgdGhpcy5tc2cgPSBvcHRzLm1lc3NhZ2U7XG4gICAgdGhpcy5oaW50ID0gb3B0cy5oaW50IHx8ICctIFVzZSBhcnJvdy1rZXlzLiBSZXR1cm4gdG8gc3VibWl0Lic7XG4gICAgdGhpcy53YXJuID0gb3B0cy53YXJuIHx8ICctIFRoaXMgb3B0aW9uIGlzIGRpc2FibGVkJztcbiAgICB0aGlzLmN1cnNvciA9IG9wdHMuaW5pdGlhbCB8fCAwO1xuICAgIHRoaXMuY2hvaWNlcyA9IG9wdHMuY2hvaWNlcy5tYXAoKGNoLCBpZHgpID0+IHtcbiAgICAgIGlmICh0eXBlb2YgY2ggPT09ICdzdHJpbmcnKVxuICAgICAgICBjaCA9IHt0aXRsZTogY2gsIHZhbHVlOiBpZHh9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdGl0bGU6IGNoICYmIChjaC50aXRsZSB8fCBjaC52YWx1ZSB8fCBjaCksXG4gICAgICAgIHZhbHVlOiBjaCAmJiAoY2gudmFsdWUgPT09IHVuZGVmaW5lZCA/IGlkeCA6IGNoLnZhbHVlKSxcbiAgICAgICAgZGVzY3JpcHRpb246IGNoICYmIGNoLmRlc2NyaXB0aW9uLFxuICAgICAgICBzZWxlY3RlZDogY2ggJiYgY2guc2VsZWN0ZWQsXG4gICAgICAgIGRpc2FibGVkOiBjaCAmJiBjaC5kaXNhYmxlZFxuICAgICAgfTtcbiAgICB9KTtcbiAgICB0aGlzLm9wdGlvbnNQZXJQYWdlID0gb3B0cy5vcHRpb25zUGVyUGFnZSB8fCAxMDtcbiAgICB0aGlzLnZhbHVlID0gKHRoaXMuY2hvaWNlc1t0aGlzLmN1cnNvcl0gfHwge30pLnZhbHVlO1xuICAgIHRoaXMuY2xlYXIgPSBjbGVhcignJywgdGhpcy5vdXQuY29sdW1ucyk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIG1vdmVDdXJzb3Iobikge1xuICAgIHRoaXMuY3Vyc29yID0gbjtcbiAgICB0aGlzLnZhbHVlID0gdGhpcy5jaG9pY2VzW25dLnZhbHVlO1xuICAgIHRoaXMuZmlyZSgpO1xuICB9XG5cbiAgcmVzZXQoKSB7XG4gICAgdGhpcy5tb3ZlQ3Vyc29yKDApO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBleGl0KCkge1xuICAgIHRoaXMuYWJvcnQoKTtcbiAgfVxuXG4gIGFib3J0KCkge1xuICAgIHRoaXMuZG9uZSA9IHRoaXMuYWJvcnRlZCA9IHRydWU7XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgICB0aGlzLm91dC53cml0ZSgnXFxuJyk7XG4gICAgdGhpcy5jbG9zZSgpO1xuICB9XG5cbiAgc3VibWl0KCkge1xuICAgIGlmICghdGhpcy5zZWxlY3Rpb24uZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuZG9uZSA9IHRydWU7XG4gICAgICB0aGlzLmFib3J0ZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuZmlyZSgpO1xuICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICAgIHRoaXMub3V0LndyaXRlKCdcXG4nKTtcbiAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICB9IGVsc2VcbiAgICAgIHRoaXMuYmVsbCgpO1xuICB9XG5cbiAgZmlyc3QoKSB7XG4gICAgdGhpcy5tb3ZlQ3Vyc29yKDApO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBsYXN0KCkge1xuICAgIHRoaXMubW92ZUN1cnNvcih0aGlzLmNob2ljZXMubGVuZ3RoIC0gMSk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHVwKCkge1xuICAgIGlmICh0aGlzLmN1cnNvciA9PT0gMCkge1xuICAgICAgdGhpcy5tb3ZlQ3Vyc29yKHRoaXMuY2hvaWNlcy5sZW5ndGggLSAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5tb3ZlQ3Vyc29yKHRoaXMuY3Vyc29yIC0gMSk7XG4gICAgfVxuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBkb3duKCkge1xuICAgIGlmICh0aGlzLmN1cnNvciA9PT0gdGhpcy5jaG9pY2VzLmxlbmd0aCAtIDEpIHtcbiAgICAgIHRoaXMubW92ZUN1cnNvcigwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5tb3ZlQ3Vyc29yKHRoaXMuY3Vyc29yICsgMSk7XG4gICAgfVxuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBuZXh0KCkge1xuICAgIHRoaXMubW92ZUN1cnNvcigodGhpcy5jdXJzb3IgKyAxKSAlIHRoaXMuY2hvaWNlcy5sZW5ndGgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBfKGMsIGtleSkge1xuICAgIGlmIChjID09PSAnICcpIHJldHVybiB0aGlzLnN1Ym1pdCgpO1xuICB9XG5cbiAgZ2V0IHNlbGVjdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5jaG9pY2VzW3RoaXMuY3Vyc29yXTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBpZiAodGhpcy5jbG9zZWQpIHJldHVybjtcbiAgICBpZiAodGhpcy5maXJzdFJlbmRlcikgdGhpcy5vdXQud3JpdGUoY3Vyc29yLmhpZGUpO1xuICAgIGVsc2UgdGhpcy5vdXQud3JpdGUoY2xlYXIodGhpcy5vdXRwdXRUZXh0LCB0aGlzLm91dC5jb2x1bW5zKSk7XG4gICAgc3VwZXIucmVuZGVyKCk7XG5cbiAgICBsZXQgeyBzdGFydEluZGV4LCBlbmRJbmRleCB9ID0gZW50cmllc1RvRGlzcGxheSh0aGlzLmN1cnNvciwgdGhpcy5jaG9pY2VzLmxlbmd0aCwgdGhpcy5vcHRpb25zUGVyUGFnZSk7XG5cbiAgICAvLyBQcmludCBwcm9tcHRcbiAgICB0aGlzLm91dHB1dFRleHQgPSBbXG4gICAgICBzdHlsZS5zeW1ib2wodGhpcy5kb25lLCB0aGlzLmFib3J0ZWQpLFxuICAgICAgY29sb3IuYm9sZCh0aGlzLm1zZyksXG4gICAgICBzdHlsZS5kZWxpbWl0ZXIoZmFsc2UpLFxuICAgICAgdGhpcy5kb25lID8gdGhpcy5zZWxlY3Rpb24udGl0bGUgOiB0aGlzLnNlbGVjdGlvbi5kaXNhYmxlZFxuICAgICAgICAgID8gY29sb3IueWVsbG93KHRoaXMud2FybikgOiBjb2xvci5ncmF5KHRoaXMuaGludClcbiAgICBdLmpvaW4oJyAnKTtcblxuICAgIC8vIFByaW50IGNob2ljZXNcbiAgICBpZiAoIXRoaXMuZG9uZSkge1xuICAgICAgdGhpcy5vdXRwdXRUZXh0ICs9ICdcXG4nO1xuICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0SW5kZXg7IGkgPCBlbmRJbmRleDsgaSsrKSB7XG4gICAgICAgIGxldCB0aXRsZSwgcHJlZml4LCBkZXNjID0gJycsIHYgPSB0aGlzLmNob2ljZXNbaV07XG5cbiAgICAgICAgLy8gRGV0ZXJtaW5lIHdoZXRoZXIgdG8gZGlzcGxheSBcIm1vcmUgY2hvaWNlc1wiIGluZGljYXRvcnNcbiAgICAgICAgaWYgKGkgPT09IHN0YXJ0SW5kZXggJiYgc3RhcnRJbmRleCA+IDApIHtcbiAgICAgICAgICBwcmVmaXggPSBmaWd1cmVzLmFycm93VXA7XG4gICAgICAgIH0gZWxzZSBpZiAoaSA9PT0gZW5kSW5kZXggLSAxICYmIGVuZEluZGV4IDwgdGhpcy5jaG9pY2VzLmxlbmd0aCkge1xuICAgICAgICAgIHByZWZpeCA9IGZpZ3VyZXMuYXJyb3dEb3duO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByZWZpeCA9ICcgJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2LmRpc2FibGVkKSB7XG4gICAgICAgICAgdGl0bGUgPSB0aGlzLmN1cnNvciA9PT0gaSA/IGNvbG9yLmdyYXkoKS51bmRlcmxpbmUodi50aXRsZSkgOiBjb2xvci5zdHJpa2V0aHJvdWdoKCkuZ3JheSh2LnRpdGxlKTtcbiAgICAgICAgICBwcmVmaXggPSAodGhpcy5jdXJzb3IgPT09IGkgPyBjb2xvci5ib2xkKCkuZ3JheShmaWd1cmVzLnBvaW50ZXIpICsgJyAnIDogJyAgJykgKyBwcmVmaXg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGl0bGUgPSB0aGlzLmN1cnNvciA9PT0gaSA/IGNvbG9yLmN5YW4oKS51bmRlcmxpbmUodi50aXRsZSkgOiB2LnRpdGxlO1xuICAgICAgICAgIHByZWZpeCA9ICh0aGlzLmN1cnNvciA9PT0gaSA/IGNvbG9yLmN5YW4oZmlndXJlcy5wb2ludGVyKSArICcgJyA6ICcgICcpICsgcHJlZml4O1xuICAgICAgICAgIGlmICh2LmRlc2NyaXB0aW9uICYmIHRoaXMuY3Vyc29yID09PSBpKSB7XG4gICAgICAgICAgICBkZXNjID0gYCAtICR7di5kZXNjcmlwdGlvbn1gO1xuICAgICAgICAgICAgaWYgKHByZWZpeC5sZW5ndGggKyB0aXRsZS5sZW5ndGggKyBkZXNjLmxlbmd0aCA+PSB0aGlzLm91dC5jb2x1bW5zXG4gICAgICAgICAgICAgICAgfHwgdi5kZXNjcmlwdGlvbi5zcGxpdCgvXFxyP1xcbi8pLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgZGVzYyA9ICdcXG4nICsgd3JhcCh2LmRlc2NyaXB0aW9uLCB7IG1hcmdpbjogMywgd2lkdGg6IHRoaXMub3V0LmNvbHVtbnMgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5vdXRwdXRUZXh0ICs9IGAke3ByZWZpeH0gJHt0aXRsZX0ke2NvbG9yLmdyYXkoZGVzYyl9XFxuYDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLm91dC53cml0ZSh0aGlzLm91dHB1dFRleHQpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gU2VsZWN0UHJvbXB0O1xuIiwiY29uc3QgY29sb3IgPSByZXF1aXJlKCdrbGV1cicpO1xuY29uc3QgUHJvbXB0ID0gcmVxdWlyZSgnLi9wcm9tcHQnKTtcbmNvbnN0IHsgc3R5bGUsIGNsZWFyIH0gPSByZXF1aXJlKCcuLi91dGlsJyk7XG5jb25zdCB7IGN1cnNvciwgZXJhc2UgfSA9IHJlcXVpcmUoJ3Npc3RlcmFuc2knKTtcblxuLyoqXG4gKiBUb2dnbGVQcm9tcHQgQmFzZSBFbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyBPcHRpb25zXG4gKiBAcGFyYW0ge1N0cmluZ30gb3B0cy5tZXNzYWdlIE1lc3NhZ2VcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdHMuaW5pdGlhbD1mYWxzZV0gRGVmYXVsdCB2YWx1ZVxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLmFjdGl2ZT0nbm8nXSBBY3RpdmUgbGFiZWxcbiAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5pbmFjdGl2ZT0nb2ZmJ10gSW5hY3RpdmUgbGFiZWxcbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICovXG5jbGFzcyBUb2dnbGVQcm9tcHQgZXh0ZW5kcyBQcm9tcHQge1xuICBjb25zdHJ1Y3RvcihvcHRzPXt9KSB7XG4gICAgc3VwZXIob3B0cyk7XG4gICAgdGhpcy5tc2cgPSBvcHRzLm1lc3NhZ2U7XG4gICAgdGhpcy52YWx1ZSA9ICEhb3B0cy5pbml0aWFsO1xuICAgIHRoaXMuYWN0aXZlID0gb3B0cy5hY3RpdmUgfHwgJ29uJztcbiAgICB0aGlzLmluYWN0aXZlID0gb3B0cy5pbmFjdGl2ZSB8fCAnb2ZmJztcbiAgICB0aGlzLmluaXRpYWxWYWx1ZSA9IHRoaXMudmFsdWU7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHJlc2V0KCkge1xuICAgIHRoaXMudmFsdWUgPSB0aGlzLmluaXRpYWxWYWx1ZTtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZXhpdCgpIHtcbiAgICB0aGlzLmFib3J0KCk7XG4gIH1cblxuICBhYm9ydCgpIHtcbiAgICB0aGlzLmRvbmUgPSB0aGlzLmFib3J0ZWQgPSB0cnVlO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gICAgdGhpcy5vdXQud3JpdGUoJ1xcbicpO1xuICAgIHRoaXMuY2xvc2UoKTtcbiAgfVxuXG4gIHN1Ym1pdCgpIHtcbiAgICB0aGlzLmRvbmUgPSB0cnVlO1xuICAgIHRoaXMuYWJvcnRlZCA9IGZhbHNlO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gICAgdGhpcy5vdXQud3JpdGUoJ1xcbicpO1xuICAgIHRoaXMuY2xvc2UoKTtcbiAgfVxuXG4gIGRlYWN0aXZhdGUoKSB7XG4gICAgaWYgKHRoaXMudmFsdWUgPT09IGZhbHNlKSByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgdGhpcy52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBhY3RpdmF0ZSgpIHtcbiAgICBpZiAodGhpcy52YWx1ZSA9PT0gdHJ1ZSkgcmV0dXJuIHRoaXMuYmVsbCgpO1xuICAgIHRoaXMudmFsdWUgPSB0cnVlO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBkZWxldGUoKSB7XG4gICAgdGhpcy5kZWFjdGl2YXRlKCk7XG4gIH1cbiAgbGVmdCgpIHtcbiAgICB0aGlzLmRlYWN0aXZhdGUoKTtcbiAgfVxuICByaWdodCgpIHtcbiAgICB0aGlzLmFjdGl2YXRlKCk7XG4gIH1cbiAgZG93bigpIHtcbiAgICB0aGlzLmRlYWN0aXZhdGUoKTtcbiAgfVxuICB1cCgpIHtcbiAgICB0aGlzLmFjdGl2YXRlKCk7XG4gIH1cblxuICBuZXh0KCkge1xuICAgIHRoaXMudmFsdWUgPSAhdGhpcy52YWx1ZTtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgXyhjLCBrZXkpIHtcbiAgICBpZiAoYyA9PT0gJyAnKSB7XG4gICAgICB0aGlzLnZhbHVlID0gIXRoaXMudmFsdWU7XG4gICAgfSBlbHNlIGlmIChjID09PSAnMScpIHtcbiAgICAgIHRoaXMudmFsdWUgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAoYyA9PT0gJzAnKSB7XG4gICAgICB0aGlzLnZhbHVlID0gZmFsc2U7XG4gICAgfSBlbHNlIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGlmICh0aGlzLmNsb3NlZCkgcmV0dXJuO1xuICAgIGlmICh0aGlzLmZpcnN0UmVuZGVyKSB0aGlzLm91dC53cml0ZShjdXJzb3IuaGlkZSk7XG4gICAgZWxzZSB0aGlzLm91dC53cml0ZShjbGVhcih0aGlzLm91dHB1dFRleHQsIHRoaXMub3V0LmNvbHVtbnMpKTtcbiAgICBzdXBlci5yZW5kZXIoKTtcblxuICAgIHRoaXMub3V0cHV0VGV4dCA9IFtcbiAgICAgIHN0eWxlLnN5bWJvbCh0aGlzLmRvbmUsIHRoaXMuYWJvcnRlZCksXG4gICAgICBjb2xvci5ib2xkKHRoaXMubXNnKSxcbiAgICAgIHN0eWxlLmRlbGltaXRlcih0aGlzLmRvbmUpLFxuICAgICAgdGhpcy52YWx1ZSA/IHRoaXMuaW5hY3RpdmUgOiBjb2xvci5jeWFuKCkudW5kZXJsaW5lKHRoaXMuaW5hY3RpdmUpLFxuICAgICAgY29sb3IuZ3JheSgnLycpLFxuICAgICAgdGhpcy52YWx1ZSA/IGNvbG9yLmN5YW4oKS51bmRlcmxpbmUodGhpcy5hY3RpdmUpIDogdGhpcy5hY3RpdmVcbiAgICBdLmpvaW4oJyAnKTtcblxuICAgIHRoaXMub3V0LndyaXRlKGVyYXNlLmxpbmUgKyBjdXJzb3IudG8oMCkgKyB0aGlzLm91dHB1dFRleHQpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gVG9nZ2xlUHJvbXB0O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5jbGFzcyBEYXRlUGFydCB7XG4gIGNvbnN0cnVjdG9yKHt0b2tlbiwgZGF0ZSwgcGFydHMsIGxvY2FsZXN9KSB7XG4gICAgdGhpcy50b2tlbiA9IHRva2VuO1xuICAgIHRoaXMuZGF0ZSA9IGRhdGUgfHwgbmV3IERhdGUoKTtcbiAgICB0aGlzLnBhcnRzID0gcGFydHMgfHwgW3RoaXNdO1xuICAgIHRoaXMubG9jYWxlcyA9IGxvY2FsZXMgfHwge307XG4gIH1cblxuICB1cCgpIHt9XG5cbiAgZG93bigpIHt9XG5cbiAgbmV4dCgpIHtcbiAgICBjb25zdCBjdXJyZW50SWR4ID0gdGhpcy5wYXJ0cy5pbmRleE9mKHRoaXMpO1xuICAgIHJldHVybiB0aGlzLnBhcnRzLmZpbmQoKHBhcnQsIGlkeCkgPT4gaWR4ID4gY3VycmVudElkeCAmJiBwYXJ0IGluc3RhbmNlb2YgRGF0ZVBhcnQpO1xuICB9XG5cbiAgc2V0VG8odmFsKSB7fVxuXG4gIHByZXYoKSB7XG4gICAgbGV0IHBhcnRzID0gW10uY29uY2F0KHRoaXMucGFydHMpLnJldmVyc2UoKTtcbiAgICBjb25zdCBjdXJyZW50SWR4ID0gcGFydHMuaW5kZXhPZih0aGlzKTtcbiAgICByZXR1cm4gcGFydHMuZmluZCgocGFydCwgaWR4KSA9PiBpZHggPiBjdXJyZW50SWR4ICYmIHBhcnQgaW5zdGFuY2VvZiBEYXRlUGFydCk7XG4gIH1cblxuICB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gU3RyaW5nKHRoaXMuZGF0ZSk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBEYXRlUGFydDtcblxuXG4iLCIndXNlIHN0cmljdCc7XG5cbmNvbnN0IERhdGVQYXJ0ID0gcmVxdWlyZSgnLi9kYXRlcGFydCcpO1xuXG5jbGFzcyBNZXJpZGllbSBleHRlbmRzIERhdGVQYXJ0IHtcbiAgY29uc3RydWN0b3Iob3B0cz17fSkge1xuICAgIHN1cGVyKG9wdHMpO1xuICB9XG5cbiAgdXAoKSB7XG4gICAgdGhpcy5kYXRlLnNldEhvdXJzKCh0aGlzLmRhdGUuZ2V0SG91cnMoKSArIDEyKSAlIDI0KTtcbiAgfVxuXG4gIGRvd24oKSB7XG4gICAgdGhpcy51cCgpO1xuICB9XG5cbiAgdG9TdHJpbmcoKSB7XG4gICAgbGV0IG1lcmlkaWVtID0gdGhpcy5kYXRlLmdldEhvdXJzKCkgPiAxMiA/ICdwbScgOiAnYW0nO1xuICAgIHJldHVybiAvXFxBLy50ZXN0KHRoaXMudG9rZW4pID8gbWVyaWRpZW0udG9VcHBlckNhc2UoKSA6IG1lcmlkaWVtO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gTWVyaWRpZW07XG4iLCIndXNlIHN0cmljdCc7XG5cbmNvbnN0IERhdGVQYXJ0ID0gcmVxdWlyZSgnLi9kYXRlcGFydCcpO1xuXG5jb25zdCBwb3MgPSBuID0+IHtcbiAgbiA9IG4gJSAxMDtcbiAgcmV0dXJuIG4gPT09IDEgPyAnc3QnXG4gICAgICAgOiBuID09PSAyID8gJ25kJ1xuICAgICAgIDogbiA9PT0gMyA/ICdyZCdcbiAgICAgICA6ICd0aCc7XG59XG5cbmNsYXNzIERheSBleHRlbmRzIERhdGVQYXJ0IHtcbiAgY29uc3RydWN0b3Iob3B0cz17fSkge1xuICAgIHN1cGVyKG9wdHMpO1xuICB9XG5cbiAgdXAoKSB7XG4gICAgdGhpcy5kYXRlLnNldERhdGUodGhpcy5kYXRlLmdldERhdGUoKSArIDEpO1xuICB9XG5cbiAgZG93bigpIHtcbiAgICB0aGlzLmRhdGUuc2V0RGF0ZSh0aGlzLmRhdGUuZ2V0RGF0ZSgpIC0gMSk7XG4gIH1cblxuICBzZXRUbyh2YWwpIHtcbiAgICB0aGlzLmRhdGUuc2V0RGF0ZShwYXJzZUludCh2YWwuc3Vic3RyKC0yKSkpO1xuICB9XG5cbiAgdG9TdHJpbmcoKSB7XG4gICAgbGV0IGRhdGUgPSB0aGlzLmRhdGUuZ2V0RGF0ZSgpO1xuICAgIGxldCBkYXkgPSB0aGlzLmRhdGUuZ2V0RGF5KCk7XG4gICAgcmV0dXJuIHRoaXMudG9rZW4gPT09ICdERCcgPyBTdHJpbmcoZGF0ZSkucGFkU3RhcnQoMiwgJzAnKVxuICAgICAgICAgOiB0aGlzLnRva2VuID09PSAnRG8nID8gZGF0ZSArIHBvcyhkYXRlKVxuICAgICAgICAgOiB0aGlzLnRva2VuID09PSAnZCcgPyBkYXkgKyAxXG4gICAgICAgICA6IHRoaXMudG9rZW4gPT09ICdkZGQnID8gdGhpcy5sb2NhbGVzLndlZWtkYXlzU2hvcnRbZGF5XVxuICAgICAgICAgOiB0aGlzLnRva2VuID09PSAnZGRkZCcgPyB0aGlzLmxvY2FsZXMud2Vla2RheXNbZGF5XVxuICAgICAgICAgOiBkYXRlO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gRGF5O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBEYXRlUGFydCA9IHJlcXVpcmUoJy4vZGF0ZXBhcnQnKTtcblxuY2xhc3MgSG91cnMgZXh0ZW5kcyBEYXRlUGFydCB7XG4gIGNvbnN0cnVjdG9yKG9wdHM9e30pIHtcbiAgICBzdXBlcihvcHRzKTtcbiAgfVxuXG4gIHVwKCkge1xuICAgIHRoaXMuZGF0ZS5zZXRIb3Vycyh0aGlzLmRhdGUuZ2V0SG91cnMoKSArIDEpO1xuICB9XG5cbiAgZG93bigpIHtcbiAgICB0aGlzLmRhdGUuc2V0SG91cnModGhpcy5kYXRlLmdldEhvdXJzKCkgLSAxKTtcbiAgfVxuXG4gIHNldFRvKHZhbCkge1xuICAgIHRoaXMuZGF0ZS5zZXRIb3VycyhwYXJzZUludCh2YWwuc3Vic3RyKC0yKSkpO1xuICB9XG5cbiAgdG9TdHJpbmcoKSB7XG4gICAgbGV0IGhvdXJzID0gdGhpcy5kYXRlLmdldEhvdXJzKCk7XG4gICAgaWYgKC9oLy50ZXN0KHRoaXMudG9rZW4pKVxuICAgICAgaG91cnMgPSAoaG91cnMgJSAxMikgfHwgMTI7XG4gICAgcmV0dXJuIHRoaXMudG9rZW4ubGVuZ3RoID4gMSA/IFN0cmluZyhob3VycykucGFkU3RhcnQoMiwgJzAnKSA6IGhvdXJzO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gSG91cnM7XG4iLCIndXNlIHN0cmljdCc7XG5cbmNvbnN0IERhdGVQYXJ0ID0gcmVxdWlyZSgnLi9kYXRlcGFydCcpO1xuXG5jbGFzcyBNaWxsaXNlY29uZHMgZXh0ZW5kcyBEYXRlUGFydCB7XG4gIGNvbnN0cnVjdG9yKG9wdHM9e30pIHtcbiAgICBzdXBlcihvcHRzKTtcbiAgfVxuXG4gIHVwKCkge1xuICAgIHRoaXMuZGF0ZS5zZXRNaWxsaXNlY29uZHModGhpcy5kYXRlLmdldE1pbGxpc2Vjb25kcygpICsgMSk7XG4gIH1cblxuICBkb3duKCkge1xuICAgIHRoaXMuZGF0ZS5zZXRNaWxsaXNlY29uZHModGhpcy5kYXRlLmdldE1pbGxpc2Vjb25kcygpIC0gMSk7XG4gIH1cblxuICBzZXRUbyh2YWwpIHtcbiAgICB0aGlzLmRhdGUuc2V0TWlsbGlzZWNvbmRzKHBhcnNlSW50KHZhbC5zdWJzdHIoLSh0aGlzLnRva2VuLmxlbmd0aCkpKSk7XG4gIH1cblxuICB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gU3RyaW5nKHRoaXMuZGF0ZS5nZXRNaWxsaXNlY29uZHMoKSkucGFkU3RhcnQoNCwgJzAnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zdWJzdHIoMCwgdGhpcy50b2tlbi5sZW5ndGgpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gTWlsbGlzZWNvbmRzO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBEYXRlUGFydCA9IHJlcXVpcmUoJy4vZGF0ZXBhcnQnKTtcblxuY2xhc3MgTWludXRlcyBleHRlbmRzIERhdGVQYXJ0IHtcbiAgY29uc3RydWN0b3Iob3B0cz17fSkge1xuICAgIHN1cGVyKG9wdHMpO1xuICB9XG5cbiAgdXAoKSB7XG4gICAgdGhpcy5kYXRlLnNldE1pbnV0ZXModGhpcy5kYXRlLmdldE1pbnV0ZXMoKSArIDEpO1xuICB9XG5cbiAgZG93bigpIHtcbiAgICB0aGlzLmRhdGUuc2V0TWludXRlcyh0aGlzLmRhdGUuZ2V0TWludXRlcygpIC0gMSk7XG4gIH1cblxuICBzZXRUbyh2YWwpIHtcbiAgICB0aGlzLmRhdGUuc2V0TWludXRlcyhwYXJzZUludCh2YWwuc3Vic3RyKC0yKSkpO1xuICB9XG5cbiAgdG9TdHJpbmcoKSB7XG4gICAgbGV0IG0gPSB0aGlzLmRhdGUuZ2V0TWludXRlcygpO1xuICAgIHJldHVybiB0aGlzLnRva2VuLmxlbmd0aCA+IDEgPyBTdHJpbmcobSkucGFkU3RhcnQoMiwgJzAnKSA6IG07XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBNaW51dGVzO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBEYXRlUGFydCA9IHJlcXVpcmUoJy4vZGF0ZXBhcnQnKTtcblxuY2xhc3MgTW9udGggZXh0ZW5kcyBEYXRlUGFydCB7XG4gIGNvbnN0cnVjdG9yKG9wdHM9e30pIHtcbiAgICBzdXBlcihvcHRzKTtcbiAgfVxuXG4gIHVwKCkge1xuICAgIHRoaXMuZGF0ZS5zZXRNb250aCh0aGlzLmRhdGUuZ2V0TW9udGgoKSArIDEpO1xuICB9XG5cbiAgZG93bigpIHtcbiAgICB0aGlzLmRhdGUuc2V0TW9udGgodGhpcy5kYXRlLmdldE1vbnRoKCkgLSAxKTtcbiAgfVxuXG4gIHNldFRvKHZhbCkge1xuICAgIHZhbCA9IHBhcnNlSW50KHZhbC5zdWJzdHIoLTIpKSAtIDE7XG4gICAgdGhpcy5kYXRlLnNldE1vbnRoKHZhbCA8IDAgPyAwIDogdmFsKTtcbiAgfVxuXG4gIHRvU3RyaW5nKCkge1xuICAgIGxldCBtb250aCA9IHRoaXMuZGF0ZS5nZXRNb250aCgpO1xuICAgIGxldCB0bCA9IHRoaXMudG9rZW4ubGVuZ3RoO1xuICAgIHJldHVybiB0bCA9PT0gMiA/IFN0cmluZyhtb250aCArIDEpLnBhZFN0YXJ0KDIsICcwJylcbiAgICAgICAgICAgOiB0bCA9PT0gMyA/IHRoaXMubG9jYWxlcy5tb250aHNTaG9ydFttb250aF1cbiAgICAgICAgICAgICA6IHRsID09PSA0ID8gdGhpcy5sb2NhbGVzLm1vbnRoc1ttb250aF1cbiAgICAgICAgICAgICAgIDogU3RyaW5nKG1vbnRoICsgMSk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBNb250aDtcbiIsIid1c2Ugc3RyaWN0JztcblxuY29uc3QgRGF0ZVBhcnQgPSByZXF1aXJlKCcuL2RhdGVwYXJ0Jyk7XG5cbmNsYXNzIFNlY29uZHMgZXh0ZW5kcyBEYXRlUGFydCB7XG4gIGNvbnN0cnVjdG9yKG9wdHM9e30pIHtcbiAgICBzdXBlcihvcHRzKTtcbiAgfVxuXG4gIHVwKCkge1xuICAgIHRoaXMuZGF0ZS5zZXRTZWNvbmRzKHRoaXMuZGF0ZS5nZXRTZWNvbmRzKCkgKyAxKTtcbiAgfVxuXG4gIGRvd24oKSB7XG4gICAgdGhpcy5kYXRlLnNldFNlY29uZHModGhpcy5kYXRlLmdldFNlY29uZHMoKSAtIDEpO1xuICB9XG5cbiAgc2V0VG8odmFsKSB7XG4gICAgdGhpcy5kYXRlLnNldFNlY29uZHMocGFyc2VJbnQodmFsLnN1YnN0cigtMikpKTtcbiAgfVxuXG4gIHRvU3RyaW5nKCkge1xuICAgIGxldCBzID0gdGhpcy5kYXRlLmdldFNlY29uZHMoKTtcbiAgICByZXR1cm4gdGhpcy50b2tlbi5sZW5ndGggPiAxID8gU3RyaW5nKHMpLnBhZFN0YXJ0KDIsICcwJykgOiBzO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gU2Vjb25kcztcbiIsIid1c2Ugc3RyaWN0JztcblxuY29uc3QgRGF0ZVBhcnQgPSByZXF1aXJlKCcuL2RhdGVwYXJ0Jyk7XG5cbmNsYXNzIFllYXIgZXh0ZW5kcyBEYXRlUGFydCB7XG4gIGNvbnN0cnVjdG9yKG9wdHM9e30pIHtcbiAgICBzdXBlcihvcHRzKTtcbiAgfVxuXG4gIHVwKCkge1xuICAgIHRoaXMuZGF0ZS5zZXRGdWxsWWVhcih0aGlzLmRhdGUuZ2V0RnVsbFllYXIoKSArIDEpO1xuICB9XG5cbiAgZG93bigpIHtcbiAgICB0aGlzLmRhdGUuc2V0RnVsbFllYXIodGhpcy5kYXRlLmdldEZ1bGxZZWFyKCkgLSAxKTtcbiAgfVxuXG4gIHNldFRvKHZhbCkge1xuICAgIHRoaXMuZGF0ZS5zZXRGdWxsWWVhcih2YWwuc3Vic3RyKC00KSk7XG4gIH1cblxuICB0b1N0cmluZygpIHtcbiAgICBsZXQgeWVhciA9IFN0cmluZyh0aGlzLmRhdGUuZ2V0RnVsbFllYXIoKSkucGFkU3RhcnQoNCwgJzAnKTtcbiAgICByZXR1cm4gdGhpcy50b2tlbi5sZW5ndGggPT09IDIgPyB5ZWFyLnN1YnN0cigtMikgOiB5ZWFyO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gWWVhcjtcbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIERhdGVQYXJ0OiByZXF1aXJlKCcuL2RhdGVwYXJ0JyksXG4gIE1lcmlkaWVtOiByZXF1aXJlKCcuL21lcmlkaWVtJyksXG4gIERheTogcmVxdWlyZSgnLi9kYXknKSxcbiAgSG91cnM6IHJlcXVpcmUoJy4vaG91cnMnKSxcbiAgTWlsbGlzZWNvbmRzOiByZXF1aXJlKCcuL21pbGxpc2Vjb25kcycpLFxuICBNaW51dGVzOiByZXF1aXJlKCcuL21pbnV0ZXMnKSxcbiAgTW9udGg6IHJlcXVpcmUoJy4vbW9udGgnKSxcbiAgU2Vjb25kczogcmVxdWlyZSgnLi9zZWNvbmRzJyksXG4gIFllYXI6IHJlcXVpcmUoJy4veWVhcicpLFxufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBjb2xvciA9IHJlcXVpcmUoJ2tsZXVyJyk7XG5jb25zdCBQcm9tcHQgPSByZXF1aXJlKCcuL3Byb21wdCcpO1xuY29uc3QgeyBzdHlsZSwgY2xlYXIsIGZpZ3VyZXMgfSA9IHJlcXVpcmUoJy4uL3V0aWwnKTtcbmNvbnN0IHsgZXJhc2UsIGN1cnNvciB9ID0gcmVxdWlyZSgnc2lzdGVyYW5zaScpO1xuY29uc3QgeyBEYXRlUGFydCwgTWVyaWRpZW0sIERheSwgSG91cnMsIE1pbGxpc2Vjb25kcywgTWludXRlcywgTW9udGgsIFNlY29uZHMsIFllYXIgfSA9IHJlcXVpcmUoJy4uL2RhdGVwYXJ0cycpO1xuXG5jb25zdCByZWdleCA9IC9cXFxcKC4pfFwiKCg/OlxcXFxbXCJcXFxcXXxbXlwiXSkrKVwifChEW0RvXT98ZHszLDR9fGQpfChNezEsNH0pfChZWSg/OllZKT8pfChbYUFdKXwoW0hoXXsxLDJ9KXwobXsxLDJ9KXwoc3sxLDJ9KXwoU3sxLDR9KXwuL2c7XG5jb25zdCByZWdleEdyb3VwcyA9IHtcbiAgMTogKHt0b2tlbn0pID0+IHRva2VuLnJlcGxhY2UoL1xcXFwoLikvZywgJyQxJyksXG4gIDI6IChvcHRzKSA9PiBuZXcgRGF5KG9wdHMpLCAvLyBEYXkgLy8gVE9ET1xuICAzOiAob3B0cykgPT4gbmV3IE1vbnRoKG9wdHMpLCAvLyBNb250aFxuICA0OiAob3B0cykgPT4gbmV3IFllYXIob3B0cyksIC8vIFllYXJcbiAgNTogKG9wdHMpID0+IG5ldyBNZXJpZGllbShvcHRzKSwgLy8gQU0vUE0gLy8gVE9ETyAoc3BlY2lhbClcbiAgNjogKG9wdHMpID0+IG5ldyBIb3VycyhvcHRzKSwgLy8gSG91cnNcbiAgNzogKG9wdHMpID0+IG5ldyBNaW51dGVzKG9wdHMpLCAvLyBNaW51dGVzXG4gIDg6IChvcHRzKSA9PiBuZXcgU2Vjb25kcyhvcHRzKSwgLy8gU2Vjb25kc1xuICA5OiAob3B0cykgPT4gbmV3IE1pbGxpc2Vjb25kcyhvcHRzKSwgLy8gRnJhY3Rpb25hbCBzZWNvbmRzXG59XG5cbmNvbnN0IGRmbHRMb2NhbGVzID0ge1xuICBtb250aHM6ICdKYW51YXJ5LEZlYnJ1YXJ5LE1hcmNoLEFwcmlsLE1heSxKdW5lLEp1bHksQXVndXN0LFNlcHRlbWJlcixPY3RvYmVyLE5vdmVtYmVyLERlY2VtYmVyJy5zcGxpdCgnLCcpLFxuICBtb250aHNTaG9ydDogJ0phbixGZWIsTWFyLEFwcixNYXksSnVuLEp1bCxBdWcsU2VwLE9jdCxOb3YsRGVjJy5zcGxpdCgnLCcpLFxuICB3ZWVrZGF5czogJ1N1bmRheSxNb25kYXksVHVlc2RheSxXZWRuZXNkYXksVGh1cnNkYXksRnJpZGF5LFNhdHVyZGF5Jy5zcGxpdCgnLCcpLFxuICB3ZWVrZGF5c1Nob3J0OiAnU3VuLE1vbixUdWUsV2VkLFRodSxGcmksU2F0Jy5zcGxpdCgnLCcpXG59XG5cblxuLyoqXG4gKiBEYXRlUHJvbXB0IEJhc2UgRWxlbWVudFxuICogQHBhcmFtIHtPYmplY3R9IG9wdHMgT3B0aW9uc1xuICogQHBhcmFtIHtTdHJpbmd9IG9wdHMubWVzc2FnZSBNZXNzYWdlXG4gKiBAcGFyYW0ge051bWJlcn0gW29wdHMuaW5pdGlhbF0gSW5kZXggb2YgZGVmYXVsdCB2YWx1ZVxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLm1hc2tdIFRoZSBmb3JtYXQgbWFza1xuICogQHBhcmFtIHtvYmplY3R9IFtvcHRzLmxvY2FsZXNdIFRoZSBkYXRlIGxvY2FsZXNcbiAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5lcnJvcl0gVGhlIGVycm9yIG1lc3NhZ2Ugc2hvd24gb24gaW52YWxpZCB2YWx1ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdHMudmFsaWRhdGVdIEZ1bmN0aW9uIHRvIHZhbGlkYXRlIHRoZSBzdWJtaXR0ZWQgdmFsdWVcbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICovXG5jbGFzcyBEYXRlUHJvbXB0IGV4dGVuZHMgUHJvbXB0IHtcbiAgY29uc3RydWN0b3Iob3B0cz17fSkge1xuICAgIHN1cGVyKG9wdHMpO1xuICAgIHRoaXMubXNnID0gb3B0cy5tZXNzYWdlO1xuICAgIHRoaXMuY3Vyc29yID0gMDtcbiAgICB0aGlzLnR5cGVkID0gJyc7XG4gICAgdGhpcy5sb2NhbGVzID0gT2JqZWN0LmFzc2lnbihkZmx0TG9jYWxlcywgb3B0cy5sb2NhbGVzKTtcbiAgICB0aGlzLl9kYXRlID0gb3B0cy5pbml0aWFsIHx8IG5ldyBEYXRlKCk7XG4gICAgdGhpcy5lcnJvck1zZyA9IG9wdHMuZXJyb3IgfHwgJ1BsZWFzZSBFbnRlciBBIFZhbGlkIFZhbHVlJztcbiAgICB0aGlzLnZhbGlkYXRvciA9IG9wdHMudmFsaWRhdGUgfHwgKCgpID0+IHRydWUpO1xuICAgIHRoaXMubWFzayA9IG9wdHMubWFzayB8fCAnWVlZWS1NTS1ERCBISDptbTpzcyc7XG4gICAgdGhpcy5jbGVhciA9IGNsZWFyKCcnLCB0aGlzLm91dC5jb2x1bW5zKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZ2V0IHZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLmRhdGVcbiAgfVxuXG4gIGdldCBkYXRlKCkge1xuICAgIHJldHVybiB0aGlzLl9kYXRlO1xuICB9XG5cbiAgc2V0IGRhdGUoZGF0ZSkge1xuICAgIGlmIChkYXRlKSB0aGlzLl9kYXRlLnNldFRpbWUoZGF0ZS5nZXRUaW1lKCkpO1xuICB9XG5cbiAgc2V0IG1hc2sobWFzaykge1xuICAgIGxldCByZXN1bHQ7XG4gICAgdGhpcy5wYXJ0cyA9IFtdO1xuICAgIHdoaWxlKHJlc3VsdCA9IHJlZ2V4LmV4ZWMobWFzaykpIHtcbiAgICAgIGxldCBtYXRjaCA9IHJlc3VsdC5zaGlmdCgpO1xuICAgICAgbGV0IGlkeCA9IHJlc3VsdC5maW5kSW5kZXgoZ3IgPT4gZ3IgIT0gbnVsbCk7XG4gICAgICB0aGlzLnBhcnRzLnB1c2goaWR4IGluIHJlZ2V4R3JvdXBzXG4gICAgICAgID8gcmVnZXhHcm91cHNbaWR4XSh7IHRva2VuOiByZXN1bHRbaWR4XSB8fCBtYXRjaCwgZGF0ZTogdGhpcy5kYXRlLCBwYXJ0czogdGhpcy5wYXJ0cywgbG9jYWxlczogdGhpcy5sb2NhbGVzIH0pXG4gICAgICAgIDogcmVzdWx0W2lkeF0gfHwgbWF0Y2gpO1xuICAgIH1cblxuICAgIGxldCBwYXJ0cyA9IHRoaXMucGFydHMucmVkdWNlKChhcnIsIGkpID0+IHtcbiAgICAgIGlmICh0eXBlb2YgaSA9PT0gJ3N0cmluZycgJiYgdHlwZW9mIGFyclthcnIubGVuZ3RoIC0gMV0gPT09ICdzdHJpbmcnKVxuICAgICAgICBhcnJbYXJyLmxlbmd0aCAtIDFdICs9IGk7XG4gICAgICBlbHNlIGFyci5wdXNoKGkpO1xuICAgICAgcmV0dXJuIGFycjtcbiAgICB9LCBbXSk7XG5cbiAgICB0aGlzLnBhcnRzLnNwbGljZSgwKTtcbiAgICB0aGlzLnBhcnRzLnB1c2goLi4ucGFydHMpO1xuICAgIHRoaXMucmVzZXQoKTtcbiAgfVxuXG4gIG1vdmVDdXJzb3Iobikge1xuICAgIHRoaXMudHlwZWQgPSAnJztcbiAgICB0aGlzLmN1cnNvciA9IG47XG4gICAgdGhpcy5maXJlKCk7XG4gIH1cblxuICByZXNldCgpIHtcbiAgICB0aGlzLm1vdmVDdXJzb3IodGhpcy5wYXJ0cy5maW5kSW5kZXgocCA9PiBwIGluc3RhbmNlb2YgRGF0ZVBhcnQpKTtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZXhpdCgpIHtcbiAgICB0aGlzLmFib3J0KCk7XG4gIH1cblxuICBhYm9ydCgpIHtcbiAgICB0aGlzLmRvbmUgPSB0aGlzLmFib3J0ZWQgPSB0cnVlO1xuICAgIHRoaXMuZXJyb3IgPSBmYWxzZTtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICAgIHRoaXMub3V0LndyaXRlKCdcXG4nKTtcbiAgICB0aGlzLmNsb3NlKCk7XG4gIH1cblxuICBhc3luYyB2YWxpZGF0ZSgpIHtcbiAgICBsZXQgdmFsaWQgPSBhd2FpdCB0aGlzLnZhbGlkYXRvcih0aGlzLnZhbHVlKTtcbiAgICBpZiAodHlwZW9mIHZhbGlkID09PSAnc3RyaW5nJykge1xuICAgICAgdGhpcy5lcnJvck1zZyA9IHZhbGlkO1xuICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5lcnJvciA9ICF2YWxpZDtcbiAgfVxuXG4gIGFzeW5jIHN1Ym1pdCgpIHtcbiAgICBhd2FpdCB0aGlzLnZhbGlkYXRlKCk7XG4gICAgaWYgKHRoaXMuZXJyb3IpIHtcbiAgICAgIHRoaXMuY29sb3IgPSAncmVkJztcbiAgICAgIHRoaXMuZmlyZSgpO1xuICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5kb25lID0gdHJ1ZTtcbiAgICB0aGlzLmFib3J0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICAgIHRoaXMub3V0LndyaXRlKCdcXG4nKTtcbiAgICB0aGlzLmNsb3NlKCk7XG4gIH1cblxuICB1cCgpIHtcbiAgICB0aGlzLnR5cGVkID0gJyc7XG4gICAgdGhpcy5wYXJ0c1t0aGlzLmN1cnNvcl0udXAoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZG93bigpIHtcbiAgICB0aGlzLnR5cGVkID0gJyc7XG4gICAgdGhpcy5wYXJ0c1t0aGlzLmN1cnNvcl0uZG93bigpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBsZWZ0KCkge1xuICAgIGxldCBwcmV2ID0gdGhpcy5wYXJ0c1t0aGlzLmN1cnNvcl0ucHJldigpO1xuICAgIGlmIChwcmV2ID09IG51bGwpIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgICB0aGlzLm1vdmVDdXJzb3IodGhpcy5wYXJ0cy5pbmRleE9mKHByZXYpKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgcmlnaHQoKSB7XG4gICAgbGV0IG5leHQgPSB0aGlzLnBhcnRzW3RoaXMuY3Vyc29yXS5uZXh0KCk7XG4gICAgaWYgKG5leHQgPT0gbnVsbCkgcmV0dXJuIHRoaXMuYmVsbCgpO1xuICAgIHRoaXMubW92ZUN1cnNvcih0aGlzLnBhcnRzLmluZGV4T2YobmV4dCkpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBuZXh0KCkge1xuICAgIGxldCBuZXh0ID0gdGhpcy5wYXJ0c1t0aGlzLmN1cnNvcl0ubmV4dCgpO1xuICAgIHRoaXMubW92ZUN1cnNvcihuZXh0XG4gICAgICA/IHRoaXMucGFydHMuaW5kZXhPZihuZXh0KVxuICAgICAgOiB0aGlzLnBhcnRzLmZpbmRJbmRleCgocGFydCkgPT4gcGFydCBpbnN0YW5jZW9mIERhdGVQYXJ0KSk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIF8oYykge1xuICAgIGlmICgvXFxkLy50ZXN0KGMpKSB7XG4gICAgICB0aGlzLnR5cGVkICs9IGM7XG4gICAgICB0aGlzLnBhcnRzW3RoaXMuY3Vyc29yXS5zZXRUbyh0aGlzLnR5cGVkKTtcbiAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGlmICh0aGlzLmNsb3NlZCkgcmV0dXJuO1xuICAgIGlmICh0aGlzLmZpcnN0UmVuZGVyKSB0aGlzLm91dC53cml0ZShjdXJzb3IuaGlkZSk7XG4gICAgZWxzZSB0aGlzLm91dC53cml0ZShjbGVhcih0aGlzLm91dHB1dFRleHQsIHRoaXMub3V0LmNvbHVtbnMpKTtcbiAgICBzdXBlci5yZW5kZXIoKTtcblxuICAgIC8vIFByaW50IHByb21wdFxuICAgIHRoaXMub3V0cHV0VGV4dCA9IFtcbiAgICAgIHN0eWxlLnN5bWJvbCh0aGlzLmRvbmUsIHRoaXMuYWJvcnRlZCksXG4gICAgICBjb2xvci5ib2xkKHRoaXMubXNnKSxcbiAgICAgIHN0eWxlLmRlbGltaXRlcihmYWxzZSksXG4gICAgICB0aGlzLnBhcnRzLnJlZHVjZSgoYXJyLCBwLCBpZHgpID0+IGFyci5jb25jYXQoaWR4ID09PSB0aGlzLmN1cnNvciAmJiAhdGhpcy5kb25lID8gY29sb3IuY3lhbigpLnVuZGVybGluZShwLnRvU3RyaW5nKCkpIDogcCksIFtdKVxuICAgICAgICAgIC5qb2luKCcnKVxuICAgIF0uam9pbignICcpO1xuXG4gICAgLy8gUHJpbnQgZXJyb3JcbiAgICBpZiAodGhpcy5lcnJvcikge1xuICAgICAgdGhpcy5vdXRwdXRUZXh0ICs9IHRoaXMuZXJyb3JNc2cuc3BsaXQoJ1xcbicpLnJlZHVjZShcbiAgICAgICAgICAoYSwgbCwgaSkgPT4gYSArIGBcXG4ke2kgPyBgIGAgOiBmaWd1cmVzLnBvaW50ZXJTbWFsbH0gJHtjb2xvci5yZWQoKS5pdGFsaWMobCl9YCwgYGApO1xuICAgIH1cblxuICAgIHRoaXMub3V0LndyaXRlKGVyYXNlLmxpbmUgKyBjdXJzb3IudG8oMCkgKyB0aGlzLm91dHB1dFRleHQpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gRGF0ZVByb21wdDtcbiIsImNvbnN0IGNvbG9yID0gcmVxdWlyZSgna2xldXInKTtcbmNvbnN0IFByb21wdCA9IHJlcXVpcmUoJy4vcHJvbXB0Jyk7XG5jb25zdCB7IGN1cnNvciwgZXJhc2UgfSA9IHJlcXVpcmUoJ3Npc3RlcmFuc2knKTtcbmNvbnN0IHsgc3R5bGUsIGZpZ3VyZXMsIGNsZWFyLCBsaW5lcyB9ID0gcmVxdWlyZSgnLi4vdXRpbCcpO1xuXG5jb25zdCBpc051bWJlciA9IC9bMC05XS87XG5jb25zdCBpc0RlZiA9IGFueSA9PiBhbnkgIT09IHVuZGVmaW5lZDtcbmNvbnN0IHJvdW5kID0gKG51bWJlciwgcHJlY2lzaW9uKSA9PiB7XG4gIGxldCBmYWN0b3IgPSBNYXRoLnBvdygxMCwgcHJlY2lzaW9uKTtcbiAgcmV0dXJuIE1hdGgucm91bmQobnVtYmVyICogZmFjdG9yKSAvIGZhY3Rvcjtcbn1cblxuLyoqXG4gKiBOdW1iZXJQcm9tcHQgQmFzZSBFbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyBPcHRpb25zXG4gKiBAcGFyYW0ge1N0cmluZ30gb3B0cy5tZXNzYWdlIE1lc3NhZ2VcbiAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5zdHlsZT0nZGVmYXVsdCddIFJlbmRlciBzdHlsZVxuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRzLmluaXRpYWxdIERlZmF1bHQgdmFsdWVcbiAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0cy5tYXg9K0luZmluaXR5XSBNYXggdmFsdWVcbiAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0cy5taW49LUluZmluaXR5XSBNaW4gdmFsdWVcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdHMuZmxvYXQ9ZmFsc2VdIFBhcnNlIGlucHV0IGFzIGZsb2F0c1xuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRzLnJvdW5kPTJdIFJvdW5kIGZsb2F0cyB0byB4IGRlY2ltYWxzXG4gKiBAcGFyYW0ge051bWJlcn0gW29wdHMuaW5jcmVtZW50PTFdIE51bWJlciB0byBpbmNyZW1lbnQgYnkgd2hlbiB1c2luZyBhcnJvdy1rZXlzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0cy52YWxpZGF0ZV0gVmFsaWRhdGUgZnVuY3Rpb25cbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLmVycm9yXSBUaGUgaW52YWxpZCBlcnJvciBsYWJlbFxuICovXG5jbGFzcyBOdW1iZXJQcm9tcHQgZXh0ZW5kcyBQcm9tcHQge1xuICBjb25zdHJ1Y3RvcihvcHRzPXt9KSB7XG4gICAgc3VwZXIob3B0cyk7XG4gICAgdGhpcy50cmFuc2Zvcm0gPSBzdHlsZS5yZW5kZXIob3B0cy5zdHlsZSk7XG4gICAgdGhpcy5tc2cgPSBvcHRzLm1lc3NhZ2U7XG4gICAgdGhpcy5pbml0aWFsID0gaXNEZWYob3B0cy5pbml0aWFsKSA/IG9wdHMuaW5pdGlhbCA6ICcnO1xuICAgIHRoaXMuZmxvYXQgPSAhIW9wdHMuZmxvYXQ7XG4gICAgdGhpcy5yb3VuZCA9IG9wdHMucm91bmQgfHwgMjtcbiAgICB0aGlzLmluYyA9IG9wdHMuaW5jcmVtZW50IHx8IDE7XG4gICAgdGhpcy5taW4gPSBpc0RlZihvcHRzLm1pbikgPyBvcHRzLm1pbiA6IC1JbmZpbml0eTtcbiAgICB0aGlzLm1heCA9IGlzRGVmKG9wdHMubWF4KSA/IG9wdHMubWF4IDogSW5maW5pdHk7XG4gICAgdGhpcy5lcnJvck1zZyA9IG9wdHMuZXJyb3IgfHwgYFBsZWFzZSBFbnRlciBBIFZhbGlkIFZhbHVlYDtcbiAgICB0aGlzLnZhbGlkYXRvciA9IG9wdHMudmFsaWRhdGUgfHwgKCgpID0+IHRydWUpO1xuICAgIHRoaXMuY29sb3IgPSBgY3lhbmA7XG4gICAgdGhpcy52YWx1ZSA9IGBgO1xuICAgIHRoaXMudHlwZWQgPSBgYDtcbiAgICB0aGlzLmxhc3RIaXQgPSAwO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBzZXQgdmFsdWUodikge1xuICAgIGlmICghdiAmJiB2ICE9PSAwKSB7XG4gICAgICB0aGlzLnBsYWNlaG9sZGVyID0gdHJ1ZTtcbiAgICAgIHRoaXMucmVuZGVyZWQgPSBjb2xvci5ncmF5KHRoaXMudHJhbnNmb3JtLnJlbmRlcihgJHt0aGlzLmluaXRpYWx9YCkpO1xuICAgICAgdGhpcy5fdmFsdWUgPSBgYDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wbGFjZWhvbGRlciA9IGZhbHNlO1xuICAgICAgdGhpcy5yZW5kZXJlZCA9IHRoaXMudHJhbnNmb3JtLnJlbmRlcihgJHtyb3VuZCh2LCB0aGlzLnJvdW5kKX1gKTtcbiAgICAgIHRoaXMuX3ZhbHVlID0gcm91bmQodiwgdGhpcy5yb3VuZCk7XG4gICAgfVxuICAgIHRoaXMuZmlyZSgpO1xuICB9XG5cbiAgZ2V0IHZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgfVxuXG4gIHBhcnNlKHgpIHtcbiAgICByZXR1cm4gdGhpcy5mbG9hdCA/IHBhcnNlRmxvYXQoeCkgOiBwYXJzZUludCh4KTtcbiAgfVxuXG4gIHZhbGlkKGMpIHtcbiAgICByZXR1cm4gYyA9PT0gYC1gIHx8IGMgPT09IGAuYCAmJiB0aGlzLmZsb2F0IHx8IGlzTnVtYmVyLnRlc3QoYylcbiAgfVxuXG4gIHJlc2V0KCkge1xuICAgIHRoaXMudHlwZWQgPSBgYDtcbiAgICB0aGlzLnZhbHVlID0gYGA7XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIGV4aXQoKSB7XG4gICAgdGhpcy5hYm9ydCgpO1xuICB9XG5cbiAgYWJvcnQoKSB7XG4gICAgbGV0IHggPSB0aGlzLnZhbHVlO1xuICAgIHRoaXMudmFsdWUgPSB4ICE9PSBgYCA/IHggOiB0aGlzLmluaXRpYWw7XG4gICAgdGhpcy5kb25lID0gdGhpcy5hYm9ydGVkID0gdHJ1ZTtcbiAgICB0aGlzLmVycm9yID0gZmFsc2U7XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgICB0aGlzLm91dC53cml0ZShgXFxuYCk7XG4gICAgdGhpcy5jbG9zZSgpO1xuICB9XG5cbiAgYXN5bmMgdmFsaWRhdGUoKSB7XG4gICAgbGV0IHZhbGlkID0gYXdhaXQgdGhpcy52YWxpZGF0b3IodGhpcy52YWx1ZSk7XG4gICAgaWYgKHR5cGVvZiB2YWxpZCA9PT0gYHN0cmluZ2ApIHtcbiAgICAgIHRoaXMuZXJyb3JNc2cgPSB2YWxpZDtcbiAgICAgIHZhbGlkID0gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuZXJyb3IgPSAhdmFsaWQ7XG4gIH1cblxuICBhc3luYyBzdWJtaXQoKSB7XG4gICAgYXdhaXQgdGhpcy52YWxpZGF0ZSgpO1xuICAgIGlmICh0aGlzLmVycm9yKSB7XG4gICAgICB0aGlzLmNvbG9yID0gYHJlZGA7XG4gICAgICB0aGlzLmZpcmUoKTtcbiAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCB4ID0gdGhpcy52YWx1ZTtcbiAgICB0aGlzLnZhbHVlID0geCAhPT0gYGAgPyB4IDogdGhpcy5pbml0aWFsO1xuICAgIHRoaXMuZG9uZSA9IHRydWU7XG4gICAgdGhpcy5hYm9ydGVkID0gZmFsc2U7XG4gICAgdGhpcy5lcnJvciA9IGZhbHNlO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gICAgdGhpcy5vdXQud3JpdGUoYFxcbmApO1xuICAgIHRoaXMuY2xvc2UoKTtcbiAgfVxuXG4gIHVwKCkge1xuICAgIHRoaXMudHlwZWQgPSBgYDtcbiAgICBpZih0aGlzLnZhbHVlID09PSAnJykge1xuICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubWluIC0gdGhpcy5pbmM7XG4gICAgfVxuICAgIGlmICh0aGlzLnZhbHVlID49IHRoaXMubWF4KSByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgdGhpcy52YWx1ZSArPSB0aGlzLmluYztcbiAgICB0aGlzLmNvbG9yID0gYGN5YW5gO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBkb3duKCkge1xuICAgIHRoaXMudHlwZWQgPSBgYDtcbiAgICBpZih0aGlzLnZhbHVlID09PSAnJykge1xuICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubWluICsgdGhpcy5pbmM7XG4gICAgfVxuICAgIGlmICh0aGlzLnZhbHVlIDw9IHRoaXMubWluKSByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgdGhpcy52YWx1ZSAtPSB0aGlzLmluYztcbiAgICB0aGlzLmNvbG9yID0gYGN5YW5gO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBkZWxldGUoKSB7XG4gICAgbGV0IHZhbCA9IHRoaXMudmFsdWUudG9TdHJpbmcoKTtcbiAgICBpZiAodmFsLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHRoaXMuYmVsbCgpO1xuICAgIHRoaXMudmFsdWUgPSB0aGlzLnBhcnNlKCh2YWwgPSB2YWwuc2xpY2UoMCwgLTEpKSkgfHwgYGA7XG4gICAgaWYgKHRoaXMudmFsdWUgIT09ICcnICYmIHRoaXMudmFsdWUgPCB0aGlzLm1pbikge1xuICAgICAgdGhpcy52YWx1ZSA9IHRoaXMubWluO1xuICAgIH1cbiAgICB0aGlzLmNvbG9yID0gYGN5YW5gO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBuZXh0KCkge1xuICAgIHRoaXMudmFsdWUgPSB0aGlzLmluaXRpYWw7XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIF8oYywga2V5KSB7XG4gICAgaWYgKCF0aGlzLnZhbGlkKGMpKSByZXR1cm4gdGhpcy5iZWxsKCk7XG5cbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGlmIChub3cgLSB0aGlzLmxhc3RIaXQgPiAxMDAwKSB0aGlzLnR5cGVkID0gYGA7IC8vIDFzIGVsYXBzZWRcbiAgICB0aGlzLnR5cGVkICs9IGM7XG4gICAgdGhpcy5sYXN0SGl0ID0gbm93O1xuICAgIHRoaXMuY29sb3IgPSBgY3lhbmA7XG5cbiAgICBpZiAoYyA9PT0gYC5gKSByZXR1cm4gdGhpcy5maXJlKCk7XG5cbiAgICB0aGlzLnZhbHVlID0gTWF0aC5taW4odGhpcy5wYXJzZSh0aGlzLnR5cGVkKSwgdGhpcy5tYXgpO1xuICAgIGlmICh0aGlzLnZhbHVlID4gdGhpcy5tYXgpIHRoaXMudmFsdWUgPSB0aGlzLm1heDtcbiAgICBpZiAodGhpcy52YWx1ZSA8IHRoaXMubWluKSB0aGlzLnZhbHVlID0gdGhpcy5taW47XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBpZiAodGhpcy5jbG9zZWQpIHJldHVybjtcbiAgICBpZiAoIXRoaXMuZmlyc3RSZW5kZXIpIHtcbiAgICAgIGlmICh0aGlzLm91dHB1dEVycm9yKVxuICAgICAgICB0aGlzLm91dC53cml0ZShjdXJzb3IuZG93bihsaW5lcyh0aGlzLm91dHB1dEVycm9yLCB0aGlzLm91dC5jb2x1bW5zKSAtIDEpICsgY2xlYXIodGhpcy5vdXRwdXRFcnJvciwgdGhpcy5vdXQuY29sdW1ucykpO1xuICAgICAgdGhpcy5vdXQud3JpdGUoY2xlYXIodGhpcy5vdXRwdXRUZXh0LCB0aGlzLm91dC5jb2x1bW5zKSk7XG4gICAgfVxuICAgIHN1cGVyLnJlbmRlcigpO1xuICAgIHRoaXMub3V0cHV0RXJyb3IgPSAnJztcblxuICAgIC8vIFByaW50IHByb21wdFxuICAgIHRoaXMub3V0cHV0VGV4dCA9IFtcbiAgICAgIHN0eWxlLnN5bWJvbCh0aGlzLmRvbmUsIHRoaXMuYWJvcnRlZCksXG4gICAgICBjb2xvci5ib2xkKHRoaXMubXNnKSxcbiAgICAgIHN0eWxlLmRlbGltaXRlcih0aGlzLmRvbmUpLFxuICAgICAgIXRoaXMuZG9uZSB8fCAoIXRoaXMuZG9uZSAmJiAhdGhpcy5wbGFjZWhvbGRlcilcbiAgICAgICAgICA/IGNvbG9yW3RoaXMuY29sb3JdKCkudW5kZXJsaW5lKHRoaXMucmVuZGVyZWQpIDogdGhpcy5yZW5kZXJlZFxuICAgIF0uam9pbihgIGApO1xuXG4gICAgLy8gUHJpbnQgZXJyb3JcbiAgICBpZiAodGhpcy5lcnJvcikge1xuICAgICAgdGhpcy5vdXRwdXRFcnJvciArPSB0aGlzLmVycm9yTXNnLnNwbGl0KGBcXG5gKVxuICAgICAgICAgIC5yZWR1Y2UoKGEsIGwsIGkpID0+IGEgKyBgXFxuJHtpID8gYCBgIDogZmlndXJlcy5wb2ludGVyU21hbGx9ICR7Y29sb3IucmVkKCkuaXRhbGljKGwpfWAsIGBgKTtcbiAgICB9XG5cbiAgICB0aGlzLm91dC53cml0ZShlcmFzZS5saW5lICsgY3Vyc29yLnRvKDApICsgdGhpcy5vdXRwdXRUZXh0ICsgY3Vyc29yLnNhdmUgKyB0aGlzLm91dHB1dEVycm9yICsgY3Vyc29yLnJlc3RvcmUpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gTnVtYmVyUHJvbXB0O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5jb25zdCBjb2xvciA9IHJlcXVpcmUoJ2tsZXVyJyk7XG5jb25zdCB7IGN1cnNvciB9ID0gcmVxdWlyZSgnc2lzdGVyYW5zaScpO1xuY29uc3QgUHJvbXB0ID0gcmVxdWlyZSgnLi9wcm9tcHQnKTtcbmNvbnN0IHsgY2xlYXIsIGZpZ3VyZXMsIHN0eWxlLCB3cmFwLCBlbnRyaWVzVG9EaXNwbGF5IH0gPSByZXF1aXJlKCcuLi91dGlsJyk7XG5cbi8qKlxuICogTXVsdGlzZWxlY3RQcm9tcHQgQmFzZSBFbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyBPcHRpb25zXG4gKiBAcGFyYW0ge1N0cmluZ30gb3B0cy5tZXNzYWdlIE1lc3NhZ2VcbiAqIEBwYXJhbSB7QXJyYXl9IG9wdHMuY2hvaWNlcyBBcnJheSBvZiBjaG9pY2Ugb2JqZWN0c1xuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLmhpbnRdIEhpbnQgdG8gZGlzcGxheVxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLndhcm5dIEhpbnQgc2hvd24gZm9yIGRpc2FibGVkIGNob2ljZXNcbiAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0cy5tYXhdIE1heCBjaG9pY2VzXG4gKiBAcGFyYW0ge051bWJlcn0gW29wdHMuY3Vyc29yPTBdIEN1cnNvciBzdGFydCBwb3NpdGlvblxuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRzLm9wdGlvbnNQZXJQYWdlPTEwXSBNYXggb3B0aW9ucyB0byBkaXNwbGF5IGF0IG9uY2VcbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbb3B0cy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICovXG5jbGFzcyBNdWx0aXNlbGVjdFByb21wdCBleHRlbmRzIFByb21wdCB7XG4gIGNvbnN0cnVjdG9yKG9wdHM9e30pIHtcbiAgICBzdXBlcihvcHRzKTtcbiAgICB0aGlzLm1zZyA9IG9wdHMubWVzc2FnZTtcbiAgICB0aGlzLmN1cnNvciA9IG9wdHMuY3Vyc29yIHx8IDA7XG4gICAgdGhpcy5zY3JvbGxJbmRleCA9IG9wdHMuY3Vyc29yIHx8IDA7XG4gICAgdGhpcy5oaW50ID0gb3B0cy5oaW50IHx8ICcnO1xuICAgIHRoaXMud2FybiA9IG9wdHMud2FybiB8fCAnLSBUaGlzIG9wdGlvbiBpcyBkaXNhYmxlZCAtJztcbiAgICB0aGlzLm1pblNlbGVjdGVkID0gb3B0cy5taW47XG4gICAgdGhpcy5zaG93TWluRXJyb3IgPSBmYWxzZTtcbiAgICB0aGlzLm1heENob2ljZXMgPSBvcHRzLm1heDtcbiAgICB0aGlzLmluc3RydWN0aW9ucyA9IG9wdHMuaW5zdHJ1Y3Rpb25zO1xuICAgIHRoaXMub3B0aW9uc1BlclBhZ2UgPSBvcHRzLm9wdGlvbnNQZXJQYWdlIHx8IDEwO1xuICAgIHRoaXMudmFsdWUgPSBvcHRzLmNob2ljZXMubWFwKChjaCwgaWR4KSA9PiB7XG4gICAgICBpZiAodHlwZW9mIGNoID09PSAnc3RyaW5nJylcbiAgICAgICAgY2ggPSB7dGl0bGU6IGNoLCB2YWx1ZTogaWR4fTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRpdGxlOiBjaCAmJiAoY2gudGl0bGUgfHwgY2gudmFsdWUgfHwgY2gpLFxuICAgICAgICBkZXNjcmlwdGlvbjogY2ggJiYgY2guZGVzY3JpcHRpb24sXG4gICAgICAgIHZhbHVlOiBjaCAmJiAoY2gudmFsdWUgPT09IHVuZGVmaW5lZCA/IGlkeCA6IGNoLnZhbHVlKSxcbiAgICAgICAgc2VsZWN0ZWQ6IGNoICYmIGNoLnNlbGVjdGVkLFxuICAgICAgICBkaXNhYmxlZDogY2ggJiYgY2guZGlzYWJsZWRcbiAgICAgIH07XG4gICAgfSk7XG4gICAgdGhpcy5jbGVhciA9IGNsZWFyKCcnLCB0aGlzLm91dC5jb2x1bW5zKTtcbiAgICBpZiAoIW9wdHMub3ZlcnJpZGVSZW5kZXIpIHtcbiAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgfVxuICB9XG5cbiAgcmVzZXQoKSB7XG4gICAgdGhpcy52YWx1ZS5tYXAodiA9PiAhdi5zZWxlY3RlZCk7XG4gICAgdGhpcy5jdXJzb3IgPSAwO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBzZWxlY3RlZCgpIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZS5maWx0ZXIodiA9PiB2LnNlbGVjdGVkKTtcbiAgfVxuXG4gIGV4aXQoKSB7XG4gICAgdGhpcy5hYm9ydCgpO1xuICB9XG5cbiAgYWJvcnQoKSB7XG4gICAgdGhpcy5kb25lID0gdGhpcy5hYm9ydGVkID0gdHJ1ZTtcbiAgICB0aGlzLmZpcmUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICAgIHRoaXMub3V0LndyaXRlKCdcXG4nKTtcbiAgICB0aGlzLmNsb3NlKCk7XG4gIH1cblxuICBzdWJtaXQoKSB7XG4gICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLnZhbHVlXG4gICAgICAuZmlsdGVyKGUgPT4gZS5zZWxlY3RlZCk7XG4gICAgaWYgKHRoaXMubWluU2VsZWN0ZWQgJiYgc2VsZWN0ZWQubGVuZ3RoIDwgdGhpcy5taW5TZWxlY3RlZCkge1xuICAgICAgdGhpcy5zaG93TWluRXJyb3IgPSB0cnVlO1xuICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kb25lID0gdHJ1ZTtcbiAgICAgIHRoaXMuYWJvcnRlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5maXJlKCk7XG4gICAgICB0aGlzLnJlbmRlcigpO1xuICAgICAgdGhpcy5vdXQud3JpdGUoJ1xcbicpO1xuICAgICAgdGhpcy5jbG9zZSgpO1xuICAgIH1cbiAgfVxuXG4gIGZpcnN0KCkge1xuICAgIHRoaXMuY3Vyc29yID0gMDtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgbGFzdCgpIHtcbiAgICB0aGlzLmN1cnNvciA9IHRoaXMudmFsdWUubGVuZ3RoIC0gMTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG4gIG5leHQoKSB7XG4gICAgdGhpcy5jdXJzb3IgPSAodGhpcy5jdXJzb3IgKyAxKSAlIHRoaXMudmFsdWUubGVuZ3RoO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICB1cCgpIHtcbiAgICBpZiAodGhpcy5jdXJzb3IgPT09IDApIHtcbiAgICAgIHRoaXMuY3Vyc29yID0gdGhpcy52YWx1ZS5sZW5ndGggLSAxO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmN1cnNvci0tO1xuICAgIH1cbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZG93bigpIHtcbiAgICBpZiAodGhpcy5jdXJzb3IgPT09IHRoaXMudmFsdWUubGVuZ3RoIC0gMSkge1xuICAgICAgdGhpcy5jdXJzb3IgPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmN1cnNvcisrO1xuICAgIH1cbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgbGVmdCgpIHtcbiAgICB0aGlzLnZhbHVlW3RoaXMuY3Vyc29yXS5zZWxlY3RlZCA9IGZhbHNlO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICByaWdodCgpIHtcbiAgICBpZiAodGhpcy52YWx1ZS5maWx0ZXIoZSA9PiBlLnNlbGVjdGVkKS5sZW5ndGggPj0gdGhpcy5tYXhDaG9pY2VzKSByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgdGhpcy52YWx1ZVt0aGlzLmN1cnNvcl0uc2VsZWN0ZWQgPSB0cnVlO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBoYW5kbGVTcGFjZVRvZ2dsZSgpIHtcbiAgICBjb25zdCB2ID0gdGhpcy52YWx1ZVt0aGlzLmN1cnNvcl07XG5cbiAgICBpZiAodi5zZWxlY3RlZCkge1xuICAgICAgdi5zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICB9IGVsc2UgaWYgKHYuZGlzYWJsZWQgfHwgdGhpcy52YWx1ZS5maWx0ZXIoZSA9PiBlLnNlbGVjdGVkKS5sZW5ndGggPj0gdGhpcy5tYXhDaG9pY2VzKSB7XG4gICAgICByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHYuc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICB9XG4gIH1cblxuICB0b2dnbGVBbGwoKSB7XG4gICAgaWYgKHRoaXMubWF4Q2hvaWNlcyAhPT0gdW5kZWZpbmVkIHx8IHRoaXMudmFsdWVbdGhpcy5jdXJzb3JdLmRpc2FibGVkKSB7XG4gICAgICByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgfVxuXG4gICAgY29uc3QgbmV3U2VsZWN0ZWQgPSAhdGhpcy52YWx1ZVt0aGlzLmN1cnNvcl0uc2VsZWN0ZWQ7XG4gICAgdGhpcy52YWx1ZS5maWx0ZXIodiA9PiAhdi5kaXNhYmxlZCkuZm9yRWFjaCh2ID0+IHYuc2VsZWN0ZWQgPSBuZXdTZWxlY3RlZCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIF8oYywga2V5KSB7XG4gICAgaWYgKGMgPT09ICcgJykge1xuICAgICAgdGhpcy5oYW5kbGVTcGFjZVRvZ2dsZSgpO1xuICAgIH0gZWxzZSBpZiAoYyA9PT0gJ2EnKSB7XG4gICAgICB0aGlzLnRvZ2dsZUFsbCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVySW5zdHJ1Y3Rpb25zKCkge1xuICAgIGlmICh0aGlzLmluc3RydWN0aW9ucyA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuaW5zdHJ1Y3Rpb25zKSB7XG4gICAgICBpZiAodHlwZW9mIHRoaXMuaW5zdHJ1Y3Rpb25zID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gdGhpcy5pbnN0cnVjdGlvbnM7XG4gICAgICB9XG4gICAgICByZXR1cm4gJ1xcbkluc3RydWN0aW9uczpcXG4nXG4gICAgICAgICsgYCAgICAke2ZpZ3VyZXMuYXJyb3dVcH0vJHtmaWd1cmVzLmFycm93RG93bn06IEhpZ2hsaWdodCBvcHRpb25cXG5gXG4gICAgICAgICsgYCAgICAke2ZpZ3VyZXMuYXJyb3dMZWZ0fS8ke2ZpZ3VyZXMuYXJyb3dSaWdodH0vW3NwYWNlXTogVG9nZ2xlIHNlbGVjdGlvblxcbmBcbiAgICAgICAgKyAodGhpcy5tYXhDaG9pY2VzID09PSB1bmRlZmluZWQgPyBgICAgIGE6IFRvZ2dsZSBhbGxcXG5gIDogJycpXG4gICAgICAgICsgYCAgICBlbnRlci9yZXR1cm46IENvbXBsZXRlIGFuc3dlcmA7XG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIHJlbmRlck9wdGlvbihjdXJzb3IsIHYsIGksIGFycm93SW5kaWNhdG9yKSB7XG4gICAgY29uc3QgcHJlZml4ID0gKHYuc2VsZWN0ZWQgPyBjb2xvci5ncmVlbihmaWd1cmVzLnJhZGlvT24pIDogZmlndXJlcy5yYWRpb09mZikgKyAnICcgKyBhcnJvd0luZGljYXRvciArICcgJztcbiAgICBsZXQgdGl0bGUsIGRlc2M7XG5cbiAgICBpZiAodi5kaXNhYmxlZCkge1xuICAgICAgdGl0bGUgPSBjdXJzb3IgPT09IGkgPyBjb2xvci5ncmF5KCkudW5kZXJsaW5lKHYudGl0bGUpIDogY29sb3Iuc3RyaWtldGhyb3VnaCgpLmdyYXkodi50aXRsZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRpdGxlID0gY3Vyc29yID09PSBpID8gY29sb3IuY3lhbigpLnVuZGVybGluZSh2LnRpdGxlKSA6IHYudGl0bGU7XG4gICAgICBpZiAoY3Vyc29yID09PSBpICYmIHYuZGVzY3JpcHRpb24pIHtcbiAgICAgICAgZGVzYyA9IGAgLSAke3YuZGVzY3JpcHRpb259YDtcbiAgICAgICAgaWYgKHByZWZpeC5sZW5ndGggKyB0aXRsZS5sZW5ndGggKyBkZXNjLmxlbmd0aCA+PSB0aGlzLm91dC5jb2x1bW5zXG4gICAgICAgICAgfHwgdi5kZXNjcmlwdGlvbi5zcGxpdCgvXFxyP1xcbi8pLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICBkZXNjID0gJ1xcbicgKyB3cmFwKHYuZGVzY3JpcHRpb24sIHsgbWFyZ2luOiBwcmVmaXgubGVuZ3RoLCB3aWR0aDogdGhpcy5vdXQuY29sdW1ucyB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwcmVmaXggKyB0aXRsZSArIGNvbG9yLmdyYXkoZGVzYyB8fCAnJyk7XG4gIH1cblxuICAvLyBzaGFyZWQgd2l0aCBhdXRvY29tcGxldGVNdWx0aXNlbGVjdFxuICBwYWdpbmF0ZU9wdGlvbnMob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIGNvbG9yLnJlZCgnTm8gbWF0Y2hlcyBmb3IgdGhpcyBxdWVyeS4nKTtcbiAgICB9XG5cbiAgICBsZXQgeyBzdGFydEluZGV4LCBlbmRJbmRleCB9ID0gZW50cmllc1RvRGlzcGxheSh0aGlzLmN1cnNvciwgb3B0aW9ucy5sZW5ndGgsIHRoaXMub3B0aW9uc1BlclBhZ2UpO1xuICAgIGxldCBwcmVmaXgsIHN0eWxlZE9wdGlvbnMgPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSBzdGFydEluZGV4OyBpIDwgZW5kSW5kZXg7IGkrKykge1xuICAgICAgaWYgKGkgPT09IHN0YXJ0SW5kZXggJiYgc3RhcnRJbmRleCA+IDApIHtcbiAgICAgICAgcHJlZml4ID0gZmlndXJlcy5hcnJvd1VwO1xuICAgICAgfSBlbHNlIGlmIChpID09PSBlbmRJbmRleCAtIDEgJiYgZW5kSW5kZXggPCBvcHRpb25zLmxlbmd0aCkge1xuICAgICAgICBwcmVmaXggPSBmaWd1cmVzLmFycm93RG93bjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHByZWZpeCA9ICcgJztcbiAgICAgIH1cbiAgICAgIHN0eWxlZE9wdGlvbnMucHVzaCh0aGlzLnJlbmRlck9wdGlvbih0aGlzLmN1cnNvciwgb3B0aW9uc1tpXSwgaSwgcHJlZml4KSk7XG4gICAgfVxuXG4gICAgcmV0dXJuICdcXG4nICsgc3R5bGVkT3B0aW9ucy5qb2luKCdcXG4nKTtcbiAgfVxuXG4gIC8vIHNoYXJlZCB3aXRoIGF1dG9jb21sZXRlTXVsdGlzZWxlY3RcbiAgcmVuZGVyT3B0aW9ucyhvcHRpb25zKSB7XG4gICAgaWYgKCF0aGlzLmRvbmUpIHtcbiAgICAgIHJldHVybiB0aGlzLnBhZ2luYXRlT3B0aW9ucyhvcHRpb25zKTtcbiAgICB9XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgcmVuZGVyRG9uZU9ySW5zdHJ1Y3Rpb25zKCkge1xuICAgIGlmICh0aGlzLmRvbmUpIHtcbiAgICAgIHJldHVybiB0aGlzLnZhbHVlXG4gICAgICAgIC5maWx0ZXIoZSA9PiBlLnNlbGVjdGVkKVxuICAgICAgICAubWFwKHYgPT4gdi50aXRsZSlcbiAgICAgICAgLmpvaW4oJywgJyk7XG4gICAgfVxuXG4gICAgY29uc3Qgb3V0cHV0ID0gW2NvbG9yLmdyYXkodGhpcy5oaW50KSwgdGhpcy5yZW5kZXJJbnN0cnVjdGlvbnMoKV07XG5cbiAgICBpZiAodGhpcy52YWx1ZVt0aGlzLmN1cnNvcl0uZGlzYWJsZWQpIHtcbiAgICAgIG91dHB1dC5wdXNoKGNvbG9yLnllbGxvdyh0aGlzLndhcm4pKTtcbiAgICB9XG4gICAgcmV0dXJuIG91dHB1dC5qb2luKCcgJyk7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgaWYgKHRoaXMuY2xvc2VkKSByZXR1cm47XG4gICAgaWYgKHRoaXMuZmlyc3RSZW5kZXIpIHRoaXMub3V0LndyaXRlKGN1cnNvci5oaWRlKTtcbiAgICBzdXBlci5yZW5kZXIoKTtcblxuICAgIC8vIHByaW50IHByb21wdFxuICAgIGxldCBwcm9tcHQgPSBbXG4gICAgICBzdHlsZS5zeW1ib2wodGhpcy5kb25lLCB0aGlzLmFib3J0ZWQpLFxuICAgICAgY29sb3IuYm9sZCh0aGlzLm1zZyksXG4gICAgICBzdHlsZS5kZWxpbWl0ZXIoZmFsc2UpLFxuICAgICAgdGhpcy5yZW5kZXJEb25lT3JJbnN0cnVjdGlvbnMoKVxuICAgIF0uam9pbignICcpO1xuICAgIGlmICh0aGlzLnNob3dNaW5FcnJvcikge1xuICAgICAgcHJvbXB0ICs9IGNvbG9yLnJlZChgWW91IG11c3Qgc2VsZWN0IGEgbWluaW11bSBvZiAke3RoaXMubWluU2VsZWN0ZWR9IGNob2ljZXMuYCk7XG4gICAgICB0aGlzLnNob3dNaW5FcnJvciA9IGZhbHNlO1xuICAgIH1cbiAgICBwcm9tcHQgKz0gdGhpcy5yZW5kZXJPcHRpb25zKHRoaXMudmFsdWUpO1xuXG4gICAgdGhpcy5vdXQud3JpdGUodGhpcy5jbGVhciArIHByb21wdCk7XG4gICAgdGhpcy5jbGVhciA9IGNsZWFyKHByb21wdCwgdGhpcy5vdXQuY29sdW1ucyk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBNdWx0aXNlbGVjdFByb21wdDtcbiIsIid1c2Ugc3RyaWN0JztcblxuY29uc3QgY29sb3IgPSByZXF1aXJlKCdrbGV1cicpO1xuY29uc3QgUHJvbXB0ID0gcmVxdWlyZSgnLi9wcm9tcHQnKTtcbmNvbnN0IHsgZXJhc2UsIGN1cnNvciB9ID0gcmVxdWlyZSgnc2lzdGVyYW5zaScpO1xuY29uc3QgeyBzdHlsZSwgY2xlYXIsIGZpZ3VyZXMsIHdyYXAsIGVudHJpZXNUb0Rpc3BsYXkgfSA9IHJlcXVpcmUoJy4uL3V0aWwnKTtcblxuY29uc3QgZ2V0VmFsID0gKGFyciwgaSkgPT4gYXJyW2ldICYmIChhcnJbaV0udmFsdWUgfHwgYXJyW2ldLnRpdGxlIHx8IGFycltpXSk7XG5jb25zdCBnZXRUaXRsZSA9IChhcnIsIGkpID0+IGFycltpXSAmJiAoYXJyW2ldLnRpdGxlIHx8IGFycltpXS52YWx1ZSB8fCBhcnJbaV0pO1xuY29uc3QgZ2V0SW5kZXggPSAoYXJyLCB2YWxPclRpdGxlKSA9PiB7XG4gIGNvbnN0IGluZGV4ID0gYXJyLmZpbmRJbmRleChlbCA9PiBlbC52YWx1ZSA9PT0gdmFsT3JUaXRsZSB8fCBlbC50aXRsZSA9PT0gdmFsT3JUaXRsZSk7XG4gIHJldHVybiBpbmRleCA+IC0xID8gaW5kZXggOiB1bmRlZmluZWQ7XG59O1xuXG4vKipcbiAqIFRleHRQcm9tcHQgQmFzZSBFbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyBPcHRpb25zXG4gKiBAcGFyYW0ge1N0cmluZ30gb3B0cy5tZXNzYWdlIE1lc3NhZ2VcbiAqIEBwYXJhbSB7QXJyYXl9IG9wdHMuY2hvaWNlcyBBcnJheSBvZiBhdXRvLWNvbXBsZXRlIGNob2ljZXMgb2JqZWN0c1xuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdHMuc3VnZ2VzdF0gRmlsdGVyIGZ1bmN0aW9uLiBEZWZhdWx0cyB0byBzb3J0IGJ5IHRpdGxlXG4gKiBAcGFyYW0ge051bWJlcn0gW29wdHMubGltaXQ9MTBdIE1heCBudW1iZXIgb2YgcmVzdWx0cyB0byBzaG93XG4gKiBAcGFyYW0ge051bWJlcn0gW29wdHMuY3Vyc29yPTBdIEN1cnNvciBzdGFydCBwb3NpdGlvblxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLnN0eWxlPSdkZWZhdWx0J10gUmVuZGVyIHN0eWxlXG4gKiBAcGFyYW0ge1N0cmluZ30gW29wdHMuZmFsbGJhY2tdIEZhbGxiYWNrIG1lc3NhZ2UgLSBpbml0aWFsIHRvIGRlZmF1bHQgdmFsdWVcbiAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5pbml0aWFsXSBJbmRleCBvZiB0aGUgZGVmYXVsdCB2YWx1ZVxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0cy5jbGVhckZpcnN0XSBUaGUgZmlyc3QgRVNDQVBFIGtleXByZXNzIHdpbGwgY2xlYXIgdGhlIGlucHV0XG4gKiBAcGFyYW0ge1N0cmVhbX0gW29wdHMuc3RkaW5dIFRoZSBSZWFkYWJsZSBzdHJlYW0gdG8gbGlzdGVuIHRvXG4gKiBAcGFyYW0ge1N0cmVhbX0gW29wdHMuc3Rkb3V0XSBUaGUgV3JpdGFibGUgc3RyZWFtIHRvIHdyaXRlIHJlYWRsaW5lIGRhdGEgdG9cbiAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5ub01hdGNoZXNdIFRoZSBubyBtYXRjaGVzIGZvdW5kIGxhYmVsXG4gKi9cbmNsYXNzIEF1dG9jb21wbGV0ZVByb21wdCBleHRlbmRzIFByb21wdCB7XG4gIGNvbnN0cnVjdG9yKG9wdHM9e30pIHtcbiAgICBzdXBlcihvcHRzKTtcbiAgICB0aGlzLm1zZyA9IG9wdHMubWVzc2FnZTtcbiAgICB0aGlzLnN1Z2dlc3QgPSBvcHRzLnN1Z2dlc3Q7XG4gICAgdGhpcy5jaG9pY2VzID0gb3B0cy5jaG9pY2VzO1xuICAgIHRoaXMuaW5pdGlhbCA9IHR5cGVvZiBvcHRzLmluaXRpYWwgPT09ICdudW1iZXInXG4gICAgICA/IG9wdHMuaW5pdGlhbFxuICAgICAgOiBnZXRJbmRleChvcHRzLmNob2ljZXMsIG9wdHMuaW5pdGlhbCk7XG4gICAgdGhpcy5zZWxlY3QgPSB0aGlzLmluaXRpYWwgfHwgb3B0cy5jdXJzb3IgfHwgMDtcbiAgICB0aGlzLmkxOG4gPSB7IG5vTWF0Y2hlczogb3B0cy5ub01hdGNoZXMgfHwgJ25vIG1hdGNoZXMgZm91bmQnIH07XG4gICAgdGhpcy5mYWxsYmFjayA9IG9wdHMuZmFsbGJhY2sgfHwgdGhpcy5pbml0aWFsO1xuICAgIHRoaXMuY2xlYXJGaXJzdCA9IG9wdHMuY2xlYXJGaXJzdCB8fCBmYWxzZTtcbiAgICB0aGlzLnN1Z2dlc3Rpb25zID0gW107XG4gICAgdGhpcy5pbnB1dCA9ICcnO1xuICAgIHRoaXMubGltaXQgPSBvcHRzLmxpbWl0IHx8IDEwO1xuICAgIHRoaXMuY3Vyc29yID0gMDtcbiAgICB0aGlzLnRyYW5zZm9ybSA9IHN0eWxlLnJlbmRlcihvcHRzLnN0eWxlKTtcbiAgICB0aGlzLnNjYWxlID0gdGhpcy50cmFuc2Zvcm0uc2NhbGU7XG4gICAgdGhpcy5yZW5kZXIgPSB0aGlzLnJlbmRlci5iaW5kKHRoaXMpO1xuICAgIHRoaXMuY29tcGxldGUgPSB0aGlzLmNvbXBsZXRlLmJpbmQodGhpcyk7XG4gICAgdGhpcy5jbGVhciA9IGNsZWFyKCcnLCB0aGlzLm91dC5jb2x1bW5zKTtcbiAgICB0aGlzLmNvbXBsZXRlKHRoaXMucmVuZGVyKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgc2V0IGZhbGxiYWNrKGZiKSB7XG4gICAgdGhpcy5fZmIgPSBOdW1iZXIuaXNTYWZlSW50ZWdlcihwYXJzZUludChmYikpID8gcGFyc2VJbnQoZmIpIDogZmI7XG4gIH1cblxuICBnZXQgZmFsbGJhY2soKSB7XG4gICAgbGV0IGNob2ljZTtcbiAgICBpZiAodHlwZW9mIHRoaXMuX2ZiID09PSAnbnVtYmVyJylcbiAgICAgIGNob2ljZSA9IHRoaXMuY2hvaWNlc1t0aGlzLl9mYl07XG4gICAgZWxzZSBpZiAodHlwZW9mIHRoaXMuX2ZiID09PSAnc3RyaW5nJylcbiAgICAgIGNob2ljZSA9IHsgdGl0bGU6IHRoaXMuX2ZiIH07XG4gICAgcmV0dXJuIGNob2ljZSB8fCB0aGlzLl9mYiB8fCB7IHRpdGxlOiB0aGlzLmkxOG4ubm9NYXRjaGVzIH07XG4gIH1cblxuICBtb3ZlU2VsZWN0KGkpIHtcbiAgICB0aGlzLnNlbGVjdCA9IGk7XG4gICAgaWYgKHRoaXMuc3VnZ2VzdGlvbnMubGVuZ3RoID4gMClcbiAgICAgIHRoaXMudmFsdWUgPSBnZXRWYWwodGhpcy5zdWdnZXN0aW9ucywgaSk7XG4gICAgZWxzZSB0aGlzLnZhbHVlID0gdGhpcy5mYWxsYmFjay52YWx1ZTtcbiAgICB0aGlzLmZpcmUoKTtcbiAgfVxuXG4gIGFzeW5jIGNvbXBsZXRlKGNiKSB7XG4gICAgY29uc3QgcCA9ICh0aGlzLmNvbXBsZXRpbmcgPSB0aGlzLnN1Z2dlc3QodGhpcy5pbnB1dCwgdGhpcy5jaG9pY2VzKSk7XG4gICAgY29uc3Qgc3VnZ2VzdGlvbnMgPSBhd2FpdCBwO1xuXG4gICAgaWYgKHRoaXMuY29tcGxldGluZyAhPT0gcCkgcmV0dXJuO1xuICAgIHRoaXMuc3VnZ2VzdGlvbnMgPSBzdWdnZXN0aW9uc1xuICAgICAgLm1hcCgocywgaSwgYXJyKSA9PiAoeyB0aXRsZTogZ2V0VGl0bGUoYXJyLCBpKSwgdmFsdWU6IGdldFZhbChhcnIsIGkpLCBkZXNjcmlwdGlvbjogcy5kZXNjcmlwdGlvbiB9KSk7XG4gICAgdGhpcy5jb21wbGV0aW5nID0gZmFsc2U7XG4gICAgY29uc3QgbCA9IE1hdGgubWF4KHN1Z2dlc3Rpb25zLmxlbmd0aCAtIDEsIDApO1xuICAgIHRoaXMubW92ZVNlbGVjdChNYXRoLm1pbihsLCB0aGlzLnNlbGVjdCkpO1xuXG4gICAgY2IgJiYgY2IoKTtcbiAgfVxuXG4gIHJlc2V0KCkge1xuICAgIHRoaXMuaW5wdXQgPSAnJztcbiAgICB0aGlzLmNvbXBsZXRlKCgpID0+IHtcbiAgICAgIHRoaXMubW92ZVNlbGVjdCh0aGlzLmluaXRpYWwgIT09IHZvaWQgMCA/IHRoaXMuaW5pdGlhbCA6IDApO1xuICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICB9KTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZXhpdCgpIHtcbiAgICBpZiAodGhpcy5jbGVhckZpcnN0ICYmIHRoaXMuaW5wdXQubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5yZXNldCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRvbmUgPSB0aGlzLmV4aXRlZCA9IHRydWU7IFxuICAgICAgdGhpcy5hYm9ydGVkID0gZmFsc2U7XG4gICAgICB0aGlzLmZpcmUoKTtcbiAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgICB0aGlzLm91dC53cml0ZSgnXFxuJyk7XG4gICAgICB0aGlzLmNsb3NlKCk7XG4gICAgfVxuICB9XG5cbiAgYWJvcnQoKSB7XG4gICAgdGhpcy5kb25lID0gdGhpcy5hYm9ydGVkID0gdHJ1ZTtcbiAgICB0aGlzLmV4aXRlZCA9IGZhbHNlO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gICAgdGhpcy5vdXQud3JpdGUoJ1xcbicpO1xuICAgIHRoaXMuY2xvc2UoKTtcbiAgfVxuXG4gIHN1Ym1pdCgpIHtcbiAgICB0aGlzLmRvbmUgPSB0cnVlO1xuICAgIHRoaXMuYWJvcnRlZCA9IHRoaXMuZXhpdGVkID0gZmFsc2U7XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgICB0aGlzLm91dC53cml0ZSgnXFxuJyk7XG4gICAgdGhpcy5jbG9zZSgpO1xuICB9XG5cbiAgXyhjLCBrZXkpIHtcbiAgICBsZXQgczEgPSB0aGlzLmlucHV0LnNsaWNlKDAsIHRoaXMuY3Vyc29yKTtcbiAgICBsZXQgczIgPSB0aGlzLmlucHV0LnNsaWNlKHRoaXMuY3Vyc29yKTtcbiAgICB0aGlzLmlucHV0ID0gYCR7czF9JHtjfSR7czJ9YDtcbiAgICB0aGlzLmN1cnNvciA9IHMxLmxlbmd0aCsxO1xuICAgIHRoaXMuY29tcGxldGUodGhpcy5yZW5kZXIpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBkZWxldGUoKSB7XG4gICAgaWYgKHRoaXMuY3Vyc29yID09PSAwKSByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgbGV0IHMxID0gdGhpcy5pbnB1dC5zbGljZSgwLCB0aGlzLmN1cnNvci0xKTtcbiAgICBsZXQgczIgPSB0aGlzLmlucHV0LnNsaWNlKHRoaXMuY3Vyc29yKTtcbiAgICB0aGlzLmlucHV0ID0gYCR7czF9JHtzMn1gO1xuICAgIHRoaXMuY29tcGxldGUodGhpcy5yZW5kZXIpO1xuICAgIHRoaXMuY3Vyc29yID0gdGhpcy5jdXJzb3ItMTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZGVsZXRlRm9yd2FyZCgpIHtcbiAgICBpZih0aGlzLmN1cnNvcip0aGlzLnNjYWxlID49IHRoaXMucmVuZGVyZWQubGVuZ3RoKSByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgbGV0IHMxID0gdGhpcy5pbnB1dC5zbGljZSgwLCB0aGlzLmN1cnNvcik7XG4gICAgbGV0IHMyID0gdGhpcy5pbnB1dC5zbGljZSh0aGlzLmN1cnNvcisxKTtcbiAgICB0aGlzLmlucHV0ID0gYCR7czF9JHtzMn1gO1xuICAgIHRoaXMuY29tcGxldGUodGhpcy5yZW5kZXIpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBmaXJzdCgpIHtcbiAgICB0aGlzLm1vdmVTZWxlY3QoMCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIGxhc3QoKSB7XG4gICAgdGhpcy5tb3ZlU2VsZWN0KHRoaXMuc3VnZ2VzdGlvbnMubGVuZ3RoIC0gMSk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHVwKCkge1xuICAgIGlmICh0aGlzLnNlbGVjdCA9PT0gMCkge1xuICAgICAgdGhpcy5tb3ZlU2VsZWN0KHRoaXMuc3VnZ2VzdGlvbnMubGVuZ3RoIC0gMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubW92ZVNlbGVjdCh0aGlzLnNlbGVjdCAtIDEpO1xuICAgIH1cbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZG93bigpIHtcbiAgICBpZiAodGhpcy5zZWxlY3QgPT09IHRoaXMuc3VnZ2VzdGlvbnMubGVuZ3RoIC0gMSkge1xuICAgICAgdGhpcy5tb3ZlU2VsZWN0KDApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm1vdmVTZWxlY3QodGhpcy5zZWxlY3QgKyAxKTtcbiAgICB9XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIG5leHQoKSB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ID09PSB0aGlzLnN1Z2dlc3Rpb25zLmxlbmd0aCAtIDEpIHtcbiAgICAgIHRoaXMubW92ZVNlbGVjdCgwKTtcbiAgICB9IGVsc2UgdGhpcy5tb3ZlU2VsZWN0KHRoaXMuc2VsZWN0ICsgMSk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIG5leHRQYWdlKCkge1xuICAgIHRoaXMubW92ZVNlbGVjdChNYXRoLm1pbih0aGlzLnNlbGVjdCArIHRoaXMubGltaXQsIHRoaXMuc3VnZ2VzdGlvbnMubGVuZ3RoIC0gMSkpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBwcmV2UGFnZSgpIHtcbiAgICB0aGlzLm1vdmVTZWxlY3QoTWF0aC5tYXgodGhpcy5zZWxlY3QgLSB0aGlzLmxpbWl0LCAwKSk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIGxlZnQoKSB7XG4gICAgaWYgKHRoaXMuY3Vyc29yIDw9IDApIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgICB0aGlzLmN1cnNvciA9IHRoaXMuY3Vyc29yLTE7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHJpZ2h0KCkge1xuICAgIGlmICh0aGlzLmN1cnNvcip0aGlzLnNjYWxlID49IHRoaXMucmVuZGVyZWQubGVuZ3RoKSByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgdGhpcy5jdXJzb3IgPSB0aGlzLmN1cnNvcisxO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICByZW5kZXJPcHRpb24odiwgaG92ZXJlZCwgaXNTdGFydCwgaXNFbmQpIHtcbiAgICBsZXQgZGVzYztcbiAgICBsZXQgcHJlZml4ID0gaXNTdGFydCA/IGZpZ3VyZXMuYXJyb3dVcCA6IGlzRW5kID8gZmlndXJlcy5hcnJvd0Rvd24gOiAnICc7XG4gICAgbGV0IHRpdGxlID0gaG92ZXJlZCA/IGNvbG9yLmN5YW4oKS51bmRlcmxpbmUodi50aXRsZSkgOiB2LnRpdGxlO1xuICAgIHByZWZpeCA9IChob3ZlcmVkID8gY29sb3IuY3lhbihmaWd1cmVzLnBvaW50ZXIpICsgJyAnIDogJyAgJykgKyBwcmVmaXg7XG4gICAgaWYgKHYuZGVzY3JpcHRpb24pIHtcbiAgICAgIGRlc2MgPSBgIC0gJHt2LmRlc2NyaXB0aW9ufWA7XG4gICAgICBpZiAocHJlZml4Lmxlbmd0aCArIHRpdGxlLmxlbmd0aCArIGRlc2MubGVuZ3RoID49IHRoaXMub3V0LmNvbHVtbnNcbiAgICAgICAgfHwgdi5kZXNjcmlwdGlvbi5zcGxpdCgvXFxyP1xcbi8pLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgZGVzYyA9ICdcXG4nICsgd3JhcCh2LmRlc2NyaXB0aW9uLCB7IG1hcmdpbjogMywgd2lkdGg6IHRoaXMub3V0LmNvbHVtbnMgfSlcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHByZWZpeCArICcgJyArIHRpdGxlICsgY29sb3IuZ3JheShkZXNjIHx8ICcnKTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBpZiAodGhpcy5jbG9zZWQpIHJldHVybjtcbiAgICBpZiAodGhpcy5maXJzdFJlbmRlcikgdGhpcy5vdXQud3JpdGUoY3Vyc29yLmhpZGUpO1xuICAgIGVsc2UgdGhpcy5vdXQud3JpdGUoY2xlYXIodGhpcy5vdXRwdXRUZXh0LCB0aGlzLm91dC5jb2x1bW5zKSk7XG4gICAgc3VwZXIucmVuZGVyKCk7XG5cbiAgICBsZXQgeyBzdGFydEluZGV4LCBlbmRJbmRleCB9ID0gZW50cmllc1RvRGlzcGxheSh0aGlzLnNlbGVjdCwgdGhpcy5jaG9pY2VzLmxlbmd0aCwgdGhpcy5saW1pdCk7XG5cbiAgICB0aGlzLm91dHB1dFRleHQgPSBbXG4gICAgICBzdHlsZS5zeW1ib2wodGhpcy5kb25lLCB0aGlzLmFib3J0ZWQsIHRoaXMuZXhpdGVkKSxcbiAgICAgIGNvbG9yLmJvbGQodGhpcy5tc2cpLFxuICAgICAgc3R5bGUuZGVsaW1pdGVyKHRoaXMuY29tcGxldGluZyksXG4gICAgICB0aGlzLmRvbmUgJiYgdGhpcy5zdWdnZXN0aW9uc1t0aGlzLnNlbGVjdF1cbiAgICAgICAgPyB0aGlzLnN1Z2dlc3Rpb25zW3RoaXMuc2VsZWN0XS50aXRsZVxuICAgICAgICA6IHRoaXMucmVuZGVyZWQgPSB0aGlzLnRyYW5zZm9ybS5yZW5kZXIodGhpcy5pbnB1dClcbiAgICBdLmpvaW4oJyAnKTtcblxuICAgIGlmICghdGhpcy5kb25lKSB7XG4gICAgICBjb25zdCBzdWdnZXN0aW9ucyA9IHRoaXMuc3VnZ2VzdGlvbnNcbiAgICAgICAgLnNsaWNlKHN0YXJ0SW5kZXgsIGVuZEluZGV4KVxuICAgICAgICAubWFwKChpdGVtLCBpKSA9PiAgdGhpcy5yZW5kZXJPcHRpb24oaXRlbSxcbiAgICAgICAgICB0aGlzLnNlbGVjdCA9PT0gaSArIHN0YXJ0SW5kZXgsXG4gICAgICAgICAgaSA9PT0gMCAmJiBzdGFydEluZGV4ID4gMCxcbiAgICAgICAgICBpICsgc3RhcnRJbmRleCA9PT0gZW5kSW5kZXggLSAxICYmIGVuZEluZGV4IDwgdGhpcy5jaG9pY2VzLmxlbmd0aCkpXG4gICAgICAgIC5qb2luKCdcXG4nKTtcbiAgICAgIHRoaXMub3V0cHV0VGV4dCArPSBgXFxuYCArIChzdWdnZXN0aW9ucyB8fCBjb2xvci5ncmF5KHRoaXMuZmFsbGJhY2sudGl0bGUpKTtcbiAgICB9XG5cbiAgICB0aGlzLm91dC53cml0ZShlcmFzZS5saW5lICsgY3Vyc29yLnRvKDApICsgdGhpcy5vdXRwdXRUZXh0KTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEF1dG9jb21wbGV0ZVByb21wdDtcbiIsIid1c2Ugc3RyaWN0JztcblxuY29uc3QgY29sb3IgPSByZXF1aXJlKCdrbGV1cicpO1xuY29uc3QgeyBjdXJzb3IgfSA9IHJlcXVpcmUoJ3Npc3RlcmFuc2knKTtcbmNvbnN0IE11bHRpc2VsZWN0UHJvbXB0ID0gcmVxdWlyZSgnLi9tdWx0aXNlbGVjdCcpO1xuY29uc3QgeyBjbGVhciwgc3R5bGUsIGZpZ3VyZXMgfSA9IHJlcXVpcmUoJy4uL3V0aWwnKTtcbi8qKlxuICogTXVsdGlzZWxlY3RQcm9tcHQgQmFzZSBFbGVtZW50XG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyBPcHRpb25zXG4gKiBAcGFyYW0ge1N0cmluZ30gb3B0cy5tZXNzYWdlIE1lc3NhZ2VcbiAqIEBwYXJhbSB7QXJyYXl9IG9wdHMuY2hvaWNlcyBBcnJheSBvZiBjaG9pY2Ugb2JqZWN0c1xuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLmhpbnRdIEhpbnQgdG8gZGlzcGxheVxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLndhcm5dIEhpbnQgc2hvd24gZm9yIGRpc2FibGVkIGNob2ljZXNcbiAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0cy5tYXhdIE1heCBjaG9pY2VzXG4gKiBAcGFyYW0ge051bWJlcn0gW29wdHMuY3Vyc29yPTBdIEN1cnNvciBzdGFydCBwb3NpdGlvblxuICogQHBhcmFtIHtTdHJlYW19IFtvcHRzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFtvcHRzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKi9cbmNsYXNzIEF1dG9jb21wbGV0ZU11bHRpc2VsZWN0UHJvbXB0IGV4dGVuZHMgTXVsdGlzZWxlY3RQcm9tcHQge1xuICBjb25zdHJ1Y3RvcihvcHRzPXt9KSB7XG4gICAgb3B0cy5vdmVycmlkZVJlbmRlciA9IHRydWU7XG4gICAgc3VwZXIob3B0cyk7XG4gICAgdGhpcy5pbnB1dFZhbHVlID0gJyc7XG4gICAgdGhpcy5jbGVhciA9IGNsZWFyKCcnLCB0aGlzLm91dC5jb2x1bW5zKTtcbiAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IHRoaXMudmFsdWU7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIGxhc3QoKSB7XG4gICAgdGhpcy5jdXJzb3IgPSB0aGlzLmZpbHRlcmVkT3B0aW9ucy5sZW5ndGggLSAxO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cbiAgbmV4dCgpIHtcbiAgICB0aGlzLmN1cnNvciA9ICh0aGlzLmN1cnNvciArIDEpICUgdGhpcy5maWx0ZXJlZE9wdGlvbnMubGVuZ3RoO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICB1cCgpIHtcbiAgICBpZiAodGhpcy5jdXJzb3IgPT09IDApIHtcbiAgICAgIHRoaXMuY3Vyc29yID0gdGhpcy5maWx0ZXJlZE9wdGlvbnMubGVuZ3RoIC0gMTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jdXJzb3ItLTtcbiAgICB9XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIGRvd24oKSB7XG4gICAgaWYgKHRoaXMuY3Vyc29yID09PSB0aGlzLmZpbHRlcmVkT3B0aW9ucy5sZW5ndGggLSAxKSB7XG4gICAgICB0aGlzLmN1cnNvciA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY3Vyc29yKys7XG4gICAgfVxuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBsZWZ0KCkge1xuICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zW3RoaXMuY3Vyc29yXS5zZWxlY3RlZCA9IGZhbHNlO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICByaWdodCgpIHtcbiAgICBpZiAodGhpcy52YWx1ZS5maWx0ZXIoZSA9PiBlLnNlbGVjdGVkKS5sZW5ndGggPj0gdGhpcy5tYXhDaG9pY2VzKSByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgdGhpcy5maWx0ZXJlZE9wdGlvbnNbdGhpcy5jdXJzb3JdLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgZGVsZXRlKCkge1xuICAgIGlmICh0aGlzLmlucHV0VmFsdWUubGVuZ3RoKSB7XG4gICAgICB0aGlzLmlucHV0VmFsdWUgPSB0aGlzLmlucHV0VmFsdWUuc3Vic3RyKDAsIHRoaXMuaW5wdXRWYWx1ZS5sZW5ndGggLSAxKTtcbiAgICAgIHRoaXMudXBkYXRlRmlsdGVyZWRPcHRpb25zKCk7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlRmlsdGVyZWRPcHRpb25zKCkge1xuICAgIGNvbnN0IGN1cnJlbnRIaWdobGlnaHQgPSB0aGlzLmZpbHRlcmVkT3B0aW9uc1t0aGlzLmN1cnNvcl07XG4gICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSB0aGlzLnZhbHVlXG4gICAgICAuZmlsdGVyKHYgPT4ge1xuICAgICAgICBpZiAodGhpcy5pbnB1dFZhbHVlKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiB2LnRpdGxlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgaWYgKHYudGl0bGUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLmlucHV0VmFsdWUudG9Mb3dlckNhc2UoKSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0eXBlb2Ygdi52YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGlmICh2LnZhbHVlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy5pbnB1dFZhbHVlLnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9KTtcbiAgICBjb25zdCBuZXdIaWdobGlnaHRJbmRleCA9IHRoaXMuZmlsdGVyZWRPcHRpb25zLmZpbmRJbmRleCh2ID0+IHYgPT09IGN1cnJlbnRIaWdobGlnaHQpXG4gICAgdGhpcy5jdXJzb3IgPSBuZXdIaWdobGlnaHRJbmRleCA8IDAgPyAwIDogbmV3SGlnaGxpZ2h0SW5kZXg7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIGhhbmRsZVNwYWNlVG9nZ2xlKCkge1xuICAgIGNvbnN0IHYgPSB0aGlzLmZpbHRlcmVkT3B0aW9uc1t0aGlzLmN1cnNvcl07XG5cbiAgICBpZiAodi5zZWxlY3RlZCkge1xuICAgICAgdi5zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICB9IGVsc2UgaWYgKHYuZGlzYWJsZWQgfHwgdGhpcy52YWx1ZS5maWx0ZXIoZSA9PiBlLnNlbGVjdGVkKS5sZW5ndGggPj0gdGhpcy5tYXhDaG9pY2VzKSB7XG4gICAgICByZXR1cm4gdGhpcy5iZWxsKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHYuc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVJbnB1dENoYW5nZShjKSB7XG4gICAgdGhpcy5pbnB1dFZhbHVlID0gdGhpcy5pbnB1dFZhbHVlICsgYztcbiAgICB0aGlzLnVwZGF0ZUZpbHRlcmVkT3B0aW9ucygpO1xuICB9XG5cbiAgXyhjLCBrZXkpIHtcbiAgICBpZiAoYyA9PT0gJyAnKSB7XG4gICAgICB0aGlzLmhhbmRsZVNwYWNlVG9nZ2xlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaGFuZGxlSW5wdXRDaGFuZ2UoYyk7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVySW5zdHJ1Y3Rpb25zKCkge1xuICAgIGlmICh0aGlzLmluc3RydWN0aW9ucyA9PT0gdW5kZWZpbmVkIHx8IHRoaXMuaW5zdHJ1Y3Rpb25zKSB7XG4gICAgICBpZiAodHlwZW9mIHRoaXMuaW5zdHJ1Y3Rpb25zID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gdGhpcy5pbnN0cnVjdGlvbnM7XG4gICAgICB9XG4gICAgICByZXR1cm4gYFxuSW5zdHJ1Y3Rpb25zOlxuICAgICR7ZmlndXJlcy5hcnJvd1VwfS8ke2ZpZ3VyZXMuYXJyb3dEb3dufTogSGlnaGxpZ2h0IG9wdGlvblxuICAgICR7ZmlndXJlcy5hcnJvd0xlZnR9LyR7ZmlndXJlcy5hcnJvd1JpZ2h0fS9bc3BhY2VdOiBUb2dnbGUgc2VsZWN0aW9uXG4gICAgW2EsYixjXS9kZWxldGU6IEZpbHRlciBjaG9pY2VzXG4gICAgZW50ZXIvcmV0dXJuOiBDb21wbGV0ZSBhbnN3ZXJcbmA7XG4gICAgfVxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIHJlbmRlckN1cnJlbnRJbnB1dCgpIHtcbiAgICByZXR1cm4gYFxuRmlsdGVyZWQgcmVzdWx0cyBmb3I6ICR7dGhpcy5pbnB1dFZhbHVlID8gdGhpcy5pbnB1dFZhbHVlIDogY29sb3IuZ3JheSgnRW50ZXIgc29tZXRoaW5nIHRvIGZpbHRlcicpfVxcbmA7XG4gIH1cblxuICByZW5kZXJPcHRpb24oY3Vyc29yLCB2LCBpKSB7XG4gICAgbGV0IHRpdGxlO1xuICAgIGlmICh2LmRpc2FibGVkKSB0aXRsZSA9IGN1cnNvciA9PT0gaSA/IGNvbG9yLmdyYXkoKS51bmRlcmxpbmUodi50aXRsZSkgOiBjb2xvci5zdHJpa2V0aHJvdWdoKCkuZ3JheSh2LnRpdGxlKTtcbiAgICBlbHNlIHRpdGxlID0gY3Vyc29yID09PSBpID8gY29sb3IuY3lhbigpLnVuZGVybGluZSh2LnRpdGxlKSA6IHYudGl0bGU7XG4gICAgcmV0dXJuICh2LnNlbGVjdGVkID8gY29sb3IuZ3JlZW4oZmlndXJlcy5yYWRpb09uKSA6IGZpZ3VyZXMucmFkaW9PZmYpICsgJyAgJyArIHRpdGxlXG4gIH1cblxuICByZW5kZXJEb25lT3JJbnN0cnVjdGlvbnMoKSB7XG4gICAgaWYgKHRoaXMuZG9uZSkge1xuICAgICAgcmV0dXJuIHRoaXMudmFsdWVcbiAgICAgICAgLmZpbHRlcihlID0+IGUuc2VsZWN0ZWQpXG4gICAgICAgIC5tYXAodiA9PiB2LnRpdGxlKVxuICAgICAgICAuam9pbignLCAnKTtcbiAgICB9XG5cbiAgICBjb25zdCBvdXRwdXQgPSBbY29sb3IuZ3JheSh0aGlzLmhpbnQpLCB0aGlzLnJlbmRlckluc3RydWN0aW9ucygpLCB0aGlzLnJlbmRlckN1cnJlbnRJbnB1dCgpXTtcblxuICAgIGlmICh0aGlzLmZpbHRlcmVkT3B0aW9ucy5sZW5ndGggJiYgdGhpcy5maWx0ZXJlZE9wdGlvbnNbdGhpcy5jdXJzb3JdLmRpc2FibGVkKSB7XG4gICAgICBvdXRwdXQucHVzaChjb2xvci55ZWxsb3codGhpcy53YXJuKSk7XG4gICAgfVxuICAgIHJldHVybiBvdXRwdXQuam9pbignICcpO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGlmICh0aGlzLmNsb3NlZCkgcmV0dXJuO1xuICAgIGlmICh0aGlzLmZpcnN0UmVuZGVyKSB0aGlzLm91dC53cml0ZShjdXJzb3IuaGlkZSk7XG4gICAgc3VwZXIucmVuZGVyKCk7XG5cbiAgICAvLyBwcmludCBwcm9tcHRcblxuICAgIGxldCBwcm9tcHQgPSBbXG4gICAgICBzdHlsZS5zeW1ib2wodGhpcy5kb25lLCB0aGlzLmFib3J0ZWQpLFxuICAgICAgY29sb3IuYm9sZCh0aGlzLm1zZyksXG4gICAgICBzdHlsZS5kZWxpbWl0ZXIoZmFsc2UpLFxuICAgICAgdGhpcy5yZW5kZXJEb25lT3JJbnN0cnVjdGlvbnMoKVxuICAgIF0uam9pbignICcpO1xuXG4gICAgaWYgKHRoaXMuc2hvd01pbkVycm9yKSB7XG4gICAgICBwcm9tcHQgKz0gY29sb3IucmVkKGBZb3UgbXVzdCBzZWxlY3QgYSBtaW5pbXVtIG9mICR7dGhpcy5taW5TZWxlY3RlZH0gY2hvaWNlcy5gKTtcbiAgICAgIHRoaXMuc2hvd01pbkVycm9yID0gZmFsc2U7XG4gICAgfVxuICAgIHByb21wdCArPSB0aGlzLnJlbmRlck9wdGlvbnModGhpcy5maWx0ZXJlZE9wdGlvbnMpO1xuXG4gICAgdGhpcy5vdXQud3JpdGUodGhpcy5jbGVhciArIHByb21wdCk7XG4gICAgdGhpcy5jbGVhciA9IGNsZWFyKHByb21wdCwgdGhpcy5vdXQuY29sdW1ucyk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBBdXRvY29tcGxldGVNdWx0aXNlbGVjdFByb21wdDtcbiIsImNvbnN0IGNvbG9yID0gcmVxdWlyZSgna2xldXInKTtcbmNvbnN0IFByb21wdCA9IHJlcXVpcmUoJy4vcHJvbXB0Jyk7XG5jb25zdCB7IHN0eWxlLCBjbGVhciB9ID0gcmVxdWlyZSgnLi4vdXRpbCcpO1xuY29uc3QgeyBlcmFzZSwgY3Vyc29yIH0gPSByZXF1aXJlKCdzaXN0ZXJhbnNpJyk7XG5cbi8qKlxuICogQ29uZmlybVByb21wdCBCYXNlIEVsZW1lbnRcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIE9wdGlvbnNcbiAqIEBwYXJhbSB7U3RyaW5nfSBvcHRzLm1lc3NhZ2UgTWVzc2FnZVxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0cy5pbml0aWFsXSBEZWZhdWx0IHZhbHVlICh0cnVlL2ZhbHNlKVxuICogQHBhcmFtIHtTdHJlYW19IFtvcHRzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFtvcHRzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKiBAcGFyYW0ge1N0cmluZ30gW29wdHMueWVzXSBUaGUgXCJZZXNcIiBsYWJlbFxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLnllc09wdGlvbl0gVGhlIFwiWWVzXCIgb3B0aW9uIHdoZW4gY2hvb3NpbmcgYmV0d2VlbiB5ZXMvbm9cbiAqIEBwYXJhbSB7U3RyaW5nfSBbb3B0cy5ub10gVGhlIFwiTm9cIiBsYWJlbFxuICogQHBhcmFtIHtTdHJpbmd9IFtvcHRzLm5vT3B0aW9uXSBUaGUgXCJOb1wiIG9wdGlvbiB3aGVuIGNob29zaW5nIGJldHdlZW4geWVzL25vXG4gKi9cbmNsYXNzIENvbmZpcm1Qcm9tcHQgZXh0ZW5kcyBQcm9tcHQge1xuICBjb25zdHJ1Y3RvcihvcHRzPXt9KSB7XG4gICAgc3VwZXIob3B0cyk7XG4gICAgdGhpcy5tc2cgPSBvcHRzLm1lc3NhZ2U7XG4gICAgdGhpcy52YWx1ZSA9IG9wdHMuaW5pdGlhbDtcbiAgICB0aGlzLmluaXRpYWxWYWx1ZSA9ICEhb3B0cy5pbml0aWFsO1xuICAgIHRoaXMueWVzTXNnID0gb3B0cy55ZXMgfHwgJ3llcyc7XG4gICAgdGhpcy55ZXNPcHRpb24gPSBvcHRzLnllc09wdGlvbiB8fCAnKFkvbiknO1xuICAgIHRoaXMubm9Nc2cgPSBvcHRzLm5vIHx8ICdubyc7XG4gICAgdGhpcy5ub09wdGlvbiA9IG9wdHMubm9PcHRpb24gfHwgJyh5L04pJztcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgcmVzZXQoKSB7XG4gICAgdGhpcy52YWx1ZSA9IHRoaXMuaW5pdGlhbFZhbHVlO1xuICAgIHRoaXMuZmlyZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBleGl0KCkge1xuICAgIHRoaXMuYWJvcnQoKTtcbiAgfVxuXG4gIGFib3J0KCkge1xuICAgIHRoaXMuZG9uZSA9IHRoaXMuYWJvcnRlZCA9IHRydWU7XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgICB0aGlzLm91dC53cml0ZSgnXFxuJyk7XG4gICAgdGhpcy5jbG9zZSgpO1xuICB9XG5cbiAgc3VibWl0KCkge1xuICAgIHRoaXMudmFsdWUgPSB0aGlzLnZhbHVlIHx8IGZhbHNlO1xuICAgIHRoaXMuZG9uZSA9IHRydWU7XG4gICAgdGhpcy5hYm9ydGVkID0gZmFsc2U7XG4gICAgdGhpcy5maXJlKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgICB0aGlzLm91dC53cml0ZSgnXFxuJyk7XG4gICAgdGhpcy5jbG9zZSgpO1xuICB9XG5cbiAgXyhjLCBrZXkpIHtcbiAgICBpZiAoYy50b0xvd2VyQ2FzZSgpID09PSAneScpIHtcbiAgICAgIHRoaXMudmFsdWUgPSB0cnVlO1xuICAgICAgcmV0dXJuIHRoaXMuc3VibWl0KCk7XG4gICAgfVxuICAgIGlmIChjLnRvTG93ZXJDYXNlKCkgPT09ICduJykge1xuICAgICAgdGhpcy52YWx1ZSA9IGZhbHNlO1xuICAgICAgcmV0dXJuIHRoaXMuc3VibWl0KCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmJlbGwoKTtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBpZiAodGhpcy5jbG9zZWQpIHJldHVybjtcbiAgICBpZiAodGhpcy5maXJzdFJlbmRlcikgdGhpcy5vdXQud3JpdGUoY3Vyc29yLmhpZGUpO1xuICAgIGVsc2UgdGhpcy5vdXQud3JpdGUoY2xlYXIodGhpcy5vdXRwdXRUZXh0LCB0aGlzLm91dC5jb2x1bW5zKSk7XG4gICAgc3VwZXIucmVuZGVyKCk7XG5cbiAgICB0aGlzLm91dHB1dFRleHQgPSBbXG4gICAgICBzdHlsZS5zeW1ib2wodGhpcy5kb25lLCB0aGlzLmFib3J0ZWQpLFxuICAgICAgY29sb3IuYm9sZCh0aGlzLm1zZyksXG4gICAgICBzdHlsZS5kZWxpbWl0ZXIodGhpcy5kb25lKSxcbiAgICAgIHRoaXMuZG9uZSA/ICh0aGlzLnZhbHVlID8gdGhpcy55ZXNNc2cgOiB0aGlzLm5vTXNnKVxuICAgICAgICAgIDogY29sb3IuZ3JheSh0aGlzLmluaXRpYWxWYWx1ZSA/IHRoaXMueWVzT3B0aW9uIDogdGhpcy5ub09wdGlvbilcbiAgICBdLmpvaW4oJyAnKTtcblxuICAgIHRoaXMub3V0LndyaXRlKGVyYXNlLmxpbmUgKyBjdXJzb3IudG8oMCkgKyB0aGlzLm91dHB1dFRleHQpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gQ29uZmlybVByb21wdDtcbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIFRleHRQcm9tcHQ6IHJlcXVpcmUoJy4vdGV4dCcpLFxuICBTZWxlY3RQcm9tcHQ6IHJlcXVpcmUoJy4vc2VsZWN0JyksXG4gIFRvZ2dsZVByb21wdDogcmVxdWlyZSgnLi90b2dnbGUnKSxcbiAgRGF0ZVByb21wdDogcmVxdWlyZSgnLi9kYXRlJyksXG4gIE51bWJlclByb21wdDogcmVxdWlyZSgnLi9udW1iZXInKSxcbiAgTXVsdGlzZWxlY3RQcm9tcHQ6IHJlcXVpcmUoJy4vbXVsdGlzZWxlY3QnKSxcbiAgQXV0b2NvbXBsZXRlUHJvbXB0OiByZXF1aXJlKCcuL2F1dG9jb21wbGV0ZScpLFxuICBBdXRvY29tcGxldGVNdWx0aXNlbGVjdFByb21wdDogcmVxdWlyZSgnLi9hdXRvY29tcGxldGVNdWx0aXNlbGVjdCcpLFxuICBDb25maXJtUHJvbXB0OiByZXF1aXJlKCcuL2NvbmZpcm0nKVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbmNvbnN0ICQgPSBleHBvcnRzO1xuY29uc3QgZWwgPSByZXF1aXJlKCcuL2VsZW1lbnRzJyk7XG5jb25zdCBub29wID0gdiA9PiB2O1xuXG5mdW5jdGlvbiB0b1Byb21wdCh0eXBlLCBhcmdzLCBvcHRzPXt9KSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzLCByZWopID0+IHtcbiAgICBjb25zdCBwID0gbmV3IGVsW3R5cGVdKGFyZ3MpO1xuICAgIGNvbnN0IG9uQWJvcnQgPSBvcHRzLm9uQWJvcnQgfHwgbm9vcDtcbiAgICBjb25zdCBvblN1Ym1pdCA9IG9wdHMub25TdWJtaXQgfHwgbm9vcDtcbiAgICBjb25zdCBvbkV4aXQgPSBvcHRzLm9uRXhpdCB8fCBub29wO1xuICAgIHAub24oJ3N0YXRlJywgYXJncy5vblN0YXRlIHx8IG5vb3ApO1xuICAgIHAub24oJ3N1Ym1pdCcsIHggPT4gcmVzKG9uU3VibWl0KHgpKSk7XG4gICAgcC5vbignZXhpdCcsIHggPT4gcmVzKG9uRXhpdCh4KSkpO1xuICAgIHAub24oJ2Fib3J0JywgeCA9PiByZWoob25BYm9ydCh4KSkpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBUZXh0IHByb21wdFxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MubWVzc2FnZSBQcm9tcHQgbWVzc2FnZSB0byBkaXNwbGF5XG4gKiBAcGFyYW0ge3N0cmluZ30gW2FyZ3MuaW5pdGlhbF0gRGVmYXVsdCBzdHJpbmcgdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBbYXJncy5zdHlsZT1cImRlZmF1bHRcIl0gUmVuZGVyIHN0eWxlICgnZGVmYXVsdCcsICdwYXNzd29yZCcsICdpbnZpc2libGUnKVxuICogQHBhcmFtIHtmdW5jdGlvbn0gW2FyZ3Mub25TdGF0ZV0gT24gc3RhdGUgY2hhbmdlIGNhbGxiYWNrXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBbYXJncy52YWxpZGF0ZV0gRnVuY3Rpb24gdG8gdmFsaWRhdGUgdXNlciBpbnB1dFxuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSB3aXRoIHVzZXIgaW5wdXRcbiAqL1xuJC50ZXh0ID0gYXJncyA9PiB0b1Byb21wdCgnVGV4dFByb21wdCcsIGFyZ3MpO1xuXG4vKipcbiAqIFBhc3N3b3JkIHByb21wdCB3aXRoIG1hc2tlZCBpbnB1dFxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MubWVzc2FnZSBQcm9tcHQgbWVzc2FnZSB0byBkaXNwbGF5XG4gKiBAcGFyYW0ge3N0cmluZ30gW2FyZ3MuaW5pdGlhbF0gRGVmYXVsdCBzdHJpbmcgdmFsdWVcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IFthcmdzLm9uU3RhdGVdIE9uIHN0YXRlIGNoYW5nZSBjYWxsYmFja1xuICogQHBhcmFtIHtmdW5jdGlvbn0gW2FyZ3MudmFsaWRhdGVdIEZ1bmN0aW9uIHRvIHZhbGlkYXRlIHVzZXIgaW5wdXRcbiAqIEBwYXJhbSB7U3RyZWFtfSBbYXJncy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbYXJncy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICogQHJldHVybnMge1Byb21pc2V9IFByb21pc2Ugd2l0aCB1c2VyIGlucHV0XG4gKi9cbiQucGFzc3dvcmQgPSBhcmdzID0+IHtcbiAgYXJncy5zdHlsZSA9ICdwYXNzd29yZCc7XG4gIHJldHVybiAkLnRleHQoYXJncyk7XG59O1xuXG4vKipcbiAqIFByb21wdCB3aGVyZSBpbnB1dCBpcyBpbnZpc2libGUsIGxpa2Ugc3Vkb1xuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MubWVzc2FnZSBQcm9tcHQgbWVzc2FnZSB0byBkaXNwbGF5XG4gKiBAcGFyYW0ge3N0cmluZ30gW2FyZ3MuaW5pdGlhbF0gRGVmYXVsdCBzdHJpbmcgdmFsdWVcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IFthcmdzLm9uU3RhdGVdIE9uIHN0YXRlIGNoYW5nZSBjYWxsYmFja1xuICogQHBhcmFtIHtmdW5jdGlvbn0gW2FyZ3MudmFsaWRhdGVdIEZ1bmN0aW9uIHRvIHZhbGlkYXRlIHVzZXIgaW5wdXRcbiAqIEBwYXJhbSB7U3RyZWFtfSBbYXJncy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbYXJncy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICogQHJldHVybnMge1Byb21pc2V9IFByb21pc2Ugd2l0aCB1c2VyIGlucHV0XG4gKi9cbiQuaW52aXNpYmxlID0gYXJncyA9PiB7XG4gIGFyZ3Muc3R5bGUgPSAnaW52aXNpYmxlJztcbiAgcmV0dXJuICQudGV4dChhcmdzKTtcbn07XG5cbi8qKlxuICogTnVtYmVyIHByb21wdFxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MubWVzc2FnZSBQcm9tcHQgbWVzc2FnZSB0byBkaXNwbGF5XG4gKiBAcGFyYW0ge251bWJlcn0gYXJncy5pbml0aWFsIERlZmF1bHQgbnVtYmVyIHZhbHVlXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBbYXJncy5vblN0YXRlXSBPbiBzdGF0ZSBjaGFuZ2UgY2FsbGJhY2tcbiAqIEBwYXJhbSB7bnVtYmVyfSBbYXJncy5tYXhdIE1heCB2YWx1ZVxuICogQHBhcmFtIHtudW1iZXJ9IFthcmdzLm1pbl0gTWluIHZhbHVlXG4gKiBAcGFyYW0ge3N0cmluZ30gW2FyZ3Muc3R5bGU9XCJkZWZhdWx0XCJdIFJlbmRlciBzdHlsZSAoJ2RlZmF1bHQnLCAncGFzc3dvcmQnLCAnaW52aXNpYmxlJylcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdHMuZmxvYXQ9ZmFsc2VdIFBhcnNlIGlucHV0IGFzIGZsb2F0c1xuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRzLnJvdW5kPTJdIFJvdW5kIGZsb2F0cyB0byB4IGRlY2ltYWxzXG4gKiBAcGFyYW0ge051bWJlcn0gW29wdHMuaW5jcmVtZW50PTFdIE51bWJlciB0byBpbmNyZW1lbnQgYnkgd2hlbiB1c2luZyBhcnJvdy1rZXlzXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBbYXJncy52YWxpZGF0ZV0gRnVuY3Rpb24gdG8gdmFsaWRhdGUgdXNlciBpbnB1dFxuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSB3aXRoIHVzZXIgaW5wdXRcbiAqL1xuJC5udW1iZXIgPSBhcmdzID0+IHRvUHJvbXB0KCdOdW1iZXJQcm9tcHQnLCBhcmdzKTtcblxuLyoqXG4gKiBEYXRlIHByb21wdFxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MubWVzc2FnZSBQcm9tcHQgbWVzc2FnZSB0byBkaXNwbGF5XG4gKiBAcGFyYW0ge251bWJlcn0gYXJncy5pbml0aWFsIERlZmF1bHQgbnVtYmVyIHZhbHVlXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBbYXJncy5vblN0YXRlXSBPbiBzdGF0ZSBjaGFuZ2UgY2FsbGJhY2tcbiAqIEBwYXJhbSB7bnVtYmVyfSBbYXJncy5tYXhdIE1heCB2YWx1ZVxuICogQHBhcmFtIHtudW1iZXJ9IFthcmdzLm1pbl0gTWluIHZhbHVlXG4gKiBAcGFyYW0ge3N0cmluZ30gW2FyZ3Muc3R5bGU9XCJkZWZhdWx0XCJdIFJlbmRlciBzdHlsZSAoJ2RlZmF1bHQnLCAncGFzc3dvcmQnLCAnaW52aXNpYmxlJylcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdHMuZmxvYXQ9ZmFsc2VdIFBhcnNlIGlucHV0IGFzIGZsb2F0c1xuICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRzLnJvdW5kPTJdIFJvdW5kIGZsb2F0cyB0byB4IGRlY2ltYWxzXG4gKiBAcGFyYW0ge051bWJlcn0gW29wdHMuaW5jcmVtZW50PTFdIE51bWJlciB0byBpbmNyZW1lbnQgYnkgd2hlbiB1c2luZyBhcnJvdy1rZXlzXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBbYXJncy52YWxpZGF0ZV0gRnVuY3Rpb24gdG8gdmFsaWRhdGUgdXNlciBpbnB1dFxuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSB3aXRoIHVzZXIgaW5wdXRcbiAqL1xuJC5kYXRlID0gYXJncyA9PiB0b1Byb21wdCgnRGF0ZVByb21wdCcsIGFyZ3MpO1xuXG4vKipcbiAqIENsYXNzaWMgeWVzL25vIHByb21wdFxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MubWVzc2FnZSBQcm9tcHQgbWVzc2FnZSB0byBkaXNwbGF5XG4gKiBAcGFyYW0ge2Jvb2xlYW59IFthcmdzLmluaXRpYWw9ZmFsc2VdIERlZmF1bHQgdmFsdWVcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IFthcmdzLm9uU3RhdGVdIE9uIHN0YXRlIGNoYW5nZSBjYWxsYmFja1xuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSB3aXRoIHVzZXIgaW5wdXRcbiAqL1xuJC5jb25maXJtID0gYXJncyA9PiB0b1Byb21wdCgnQ29uZmlybVByb21wdCcsIGFyZ3MpO1xuXG4vKipcbiAqIExpc3QgcHJvbXB0LCBzcGxpdCBpbnRwdXQgc3RyaW5nIGJ5IGBzZXBlcmF0b3JgXG4gKiBAcGFyYW0ge3N0cmluZ30gYXJncy5tZXNzYWdlIFByb21wdCBtZXNzYWdlIHRvIGRpc3BsYXlcbiAqIEBwYXJhbSB7c3RyaW5nfSBbYXJncy5pbml0aWFsXSBEZWZhdWx0IHN0cmluZyB2YWx1ZVxuICogQHBhcmFtIHtzdHJpbmd9IFthcmdzLnN0eWxlPVwiZGVmYXVsdFwiXSBSZW5kZXIgc3R5bGUgKCdkZWZhdWx0JywgJ3Bhc3N3b3JkJywgJ2ludmlzaWJsZScpXG4gKiBAcGFyYW0ge3N0cmluZ30gW2FyZ3Muc2VwYXJhdG9yXSBTdHJpbmcgc2VwYXJhdG9yXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBbYXJncy5vblN0YXRlXSBPbiBzdGF0ZSBjaGFuZ2UgY2FsbGJhY2tcbiAqIEBwYXJhbSB7U3RyZWFtfSBbYXJncy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbYXJncy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICogQHJldHVybnMge1Byb21pc2V9IFByb21pc2Ugd2l0aCB1c2VyIGlucHV0LCBpbiBmb3JtIG9mIGFuIGBBcnJheWBcbiAqL1xuJC5saXN0ID0gYXJncyA9PiB7XG4gIGNvbnN0IHNlcCA9IGFyZ3Muc2VwYXJhdG9yIHx8ICcsJztcbiAgcmV0dXJuIHRvUHJvbXB0KCdUZXh0UHJvbXB0JywgYXJncywge1xuICAgIG9uU3VibWl0OiBzdHIgPT4gc3RyLnNwbGl0KHNlcCkubWFwKHMgPT4gcy50cmltKCkpXG4gIH0pO1xufTtcblxuLyoqXG4gKiBUb2dnbGUvc3dpdGNoIHByb21wdFxuICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MubWVzc2FnZSBQcm9tcHQgbWVzc2FnZSB0byBkaXNwbGF5XG4gKiBAcGFyYW0ge2Jvb2xlYW59IFthcmdzLmluaXRpYWw9ZmFsc2VdIERlZmF1bHQgdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBbYXJncy5hY3RpdmU9XCJvblwiXSBUZXh0IGZvciBgYWN0aXZlYCBzdGF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IFthcmdzLmluYWN0aXZlPVwib2ZmXCJdIFRleHQgZm9yIGBpbmFjdGl2ZWAgc3RhdGVcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IFthcmdzLm9uU3RhdGVdIE9uIHN0YXRlIGNoYW5nZSBjYWxsYmFja1xuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSB3aXRoIHVzZXIgaW5wdXRcbiAqL1xuJC50b2dnbGUgPSBhcmdzID0+IHRvUHJvbXB0KCdUb2dnbGVQcm9tcHQnLCBhcmdzKTtcblxuLyoqXG4gKiBJbnRlcmFjdGl2ZSBzZWxlY3QgcHJvbXB0XG4gKiBAcGFyYW0ge3N0cmluZ30gYXJncy5tZXNzYWdlIFByb21wdCBtZXNzYWdlIHRvIGRpc3BsYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFyZ3MuY2hvaWNlcyBBcnJheSBvZiBjaG9pY2VzIG9iamVjdHMgYFt7IHRpdGxlLCB2YWx1ZSB9LCAuLi5dYFxuICogQHBhcmFtIHtudW1iZXJ9IFthcmdzLmluaXRpYWxdIEluZGV4IG9mIGRlZmF1bHQgdmFsdWVcbiAqIEBwYXJhbSB7U3RyaW5nfSBbYXJncy5oaW50XSBIaW50IHRvIGRpc3BsYXlcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IFthcmdzLm9uU3RhdGVdIE9uIHN0YXRlIGNoYW5nZSBjYWxsYmFja1xuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSB3aXRoIHVzZXIgaW5wdXRcbiAqL1xuJC5zZWxlY3QgPSBhcmdzID0+IHRvUHJvbXB0KCdTZWxlY3RQcm9tcHQnLCBhcmdzKTtcblxuLyoqXG4gKiBJbnRlcmFjdGl2ZSBtdWx0aS1zZWxlY3QgLyBhdXRvY29tcGxldGVNdWx0aXNlbGVjdCBwcm9tcHRcbiAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLm1lc3NhZ2UgUHJvbXB0IG1lc3NhZ2UgdG8gZGlzcGxheVxuICogQHBhcmFtIHtBcnJheX0gYXJncy5jaG9pY2VzIEFycmF5IG9mIGNob2ljZXMgb2JqZWN0cyBgW3sgdGl0bGUsIHZhbHVlLCBbc2VsZWN0ZWRdIH0sIC4uLl1gXG4gKiBAcGFyYW0ge251bWJlcn0gW2FyZ3MubWF4XSBNYXggc2VsZWN0XG4gKiBAcGFyYW0ge3N0cmluZ30gW2FyZ3MuaGludF0gSGludCB0byBkaXNwbGF5IHVzZXJcbiAqIEBwYXJhbSB7TnVtYmVyfSBbYXJncy5jdXJzb3I9MF0gQ3Vyc29yIHN0YXJ0IHBvc2l0aW9uXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBbYXJncy5vblN0YXRlXSBPbiBzdGF0ZSBjaGFuZ2UgY2FsbGJhY2tcbiAqIEBwYXJhbSB7U3RyZWFtfSBbYXJncy5zdGRpbl0gVGhlIFJlYWRhYmxlIHN0cmVhbSB0byBsaXN0ZW4gdG9cbiAqIEBwYXJhbSB7U3RyZWFtfSBbYXJncy5zdGRvdXRdIFRoZSBXcml0YWJsZSBzdHJlYW0gdG8gd3JpdGUgcmVhZGxpbmUgZGF0YSB0b1xuICogQHJldHVybnMge1Byb21pc2V9IFByb21pc2Ugd2l0aCB1c2VyIGlucHV0XG4gKi9cbiQubXVsdGlzZWxlY3QgPSBhcmdzID0+IHtcbiAgYXJncy5jaG9pY2VzID0gW10uY29uY2F0KGFyZ3MuY2hvaWNlcyB8fCBbXSk7XG4gIGNvbnN0IHRvU2VsZWN0ZWQgPSBpdGVtcyA9PiBpdGVtcy5maWx0ZXIoaXRlbSA9PiBpdGVtLnNlbGVjdGVkKS5tYXAoaXRlbSA9PiBpdGVtLnZhbHVlKTtcbiAgcmV0dXJuIHRvUHJvbXB0KCdNdWx0aXNlbGVjdFByb21wdCcsIGFyZ3MsIHtcbiAgICBvbkFib3J0OiB0b1NlbGVjdGVkLFxuICAgIG9uU3VibWl0OiB0b1NlbGVjdGVkXG4gIH0pO1xufTtcblxuJC5hdXRvY29tcGxldGVNdWx0aXNlbGVjdCA9IGFyZ3MgPT4ge1xuICBhcmdzLmNob2ljZXMgPSBbXS5jb25jYXQoYXJncy5jaG9pY2VzIHx8IFtdKTtcbiAgY29uc3QgdG9TZWxlY3RlZCA9IGl0ZW1zID0+IGl0ZW1zLmZpbHRlcihpdGVtID0+IGl0ZW0uc2VsZWN0ZWQpLm1hcChpdGVtID0+IGl0ZW0udmFsdWUpO1xuICByZXR1cm4gdG9Qcm9tcHQoJ0F1dG9jb21wbGV0ZU11bHRpc2VsZWN0UHJvbXB0JywgYXJncywge1xuICAgIG9uQWJvcnQ6IHRvU2VsZWN0ZWQsXG4gICAgb25TdWJtaXQ6IHRvU2VsZWN0ZWRcbiAgfSk7XG59O1xuXG5jb25zdCBieVRpdGxlID0gKGlucHV0LCBjaG9pY2VzKSA9PiBQcm9taXNlLnJlc29sdmUoXG4gIGNob2ljZXMuZmlsdGVyKGl0ZW0gPT4gaXRlbS50aXRsZS5zbGljZSgwLCBpbnB1dC5sZW5ndGgpLnRvTG93ZXJDYXNlKCkgPT09IGlucHV0LnRvTG93ZXJDYXNlKCkpXG4pO1xuXG4vKipcbiAqIEludGVyYWN0aXZlIGF1dG8tY29tcGxldGUgcHJvbXB0XG4gKiBAcGFyYW0ge3N0cmluZ30gYXJncy5tZXNzYWdlIFByb21wdCBtZXNzYWdlIHRvIGRpc3BsYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFyZ3MuY2hvaWNlcyBBcnJheSBvZiBhdXRvLWNvbXBsZXRlIGNob2ljZXMgb2JqZWN0cyBgW3sgdGl0bGUsIHZhbHVlIH0sIC4uLl1gXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbYXJncy5zdWdnZXN0XSBGdW5jdGlvbiB0byBmaWx0ZXIgcmVzdWx0cyBiYXNlZCBvbiB1c2VyIGlucHV0LiBEZWZhdWx0cyB0byBzb3J0IGJ5IGB0aXRsZWBcbiAqIEBwYXJhbSB7bnVtYmVyfSBbYXJncy5saW1pdD0xMF0gTWF4IG51bWJlciBvZiByZXN1bHRzIHRvIHNob3dcbiAqIEBwYXJhbSB7c3RyaW5nfSBbYXJncy5zdHlsZT1cImRlZmF1bHRcIl0gUmVuZGVyIHN0eWxlICgnZGVmYXVsdCcsICdwYXNzd29yZCcsICdpbnZpc2libGUnKVxuICogQHBhcmFtIHtTdHJpbmd9IFthcmdzLmluaXRpYWxdIEluZGV4IG9mIHRoZSBkZWZhdWx0IHZhbHVlXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLmNsZWFyRmlyc3RdIFRoZSBmaXJzdCBFU0NBUEUga2V5cHJlc3Mgd2lsbCBjbGVhciB0aGUgaW5wdXRcbiAqIEBwYXJhbSB7U3RyaW5nfSBbYXJncy5mYWxsYmFja10gRmFsbGJhY2sgbWVzc2FnZSAtIGRlZmF1bHRzIHRvIGluaXRpYWwgdmFsdWVcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IFthcmdzLm9uU3RhdGVdIE9uIHN0YXRlIGNoYW5nZSBjYWxsYmFja1xuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZGluXSBUaGUgUmVhZGFibGUgc3RyZWFtIHRvIGxpc3RlbiB0b1xuICogQHBhcmFtIHtTdHJlYW19IFthcmdzLnN0ZG91dF0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byB3cml0ZSByZWFkbGluZSBkYXRhIHRvXG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSB3aXRoIHVzZXIgaW5wdXRcbiAqL1xuJC5hdXRvY29tcGxldGUgPSBhcmdzID0+IHtcbiAgYXJncy5zdWdnZXN0ID0gYXJncy5zdWdnZXN0IHx8IGJ5VGl0bGU7XG4gIGFyZ3MuY2hvaWNlcyA9IFtdLmNvbmNhdChhcmdzLmNob2ljZXMgfHwgW10pO1xuICByZXR1cm4gdG9Qcm9tcHQoJ0F1dG9jb21wbGV0ZVByb21wdCcsIGFyZ3MpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuY29uc3QgcHJvbXB0cyA9IHJlcXVpcmUoJy4vcHJvbXB0cycpO1xuXG5jb25zdCBwYXNzT24gPSBbJ3N1Z2dlc3QnLCAnZm9ybWF0JywgJ29uU3RhdGUnLCAndmFsaWRhdGUnLCAnb25SZW5kZXInLCAndHlwZSddO1xuY29uc3Qgbm9vcCA9ICgpID0+IHt9O1xuXG4vKipcbiAqIFByb21wdCBmb3IgYSBzZXJpZXMgb2YgcXVlc3Rpb25zXG4gKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gcXVlc3Rpb25zIFNpbmdsZSBxdWVzdGlvbiBvYmplY3Qgb3IgQXJyYXkgb2YgcXVlc3Rpb24gb2JqZWN0c1xuICogQHBhcmFtIHtGdW5jdGlvbn0gW29uU3VibWl0XSBDYWxsYmFjayBmdW5jdGlvbiBjYWxsZWQgb24gcHJvbXB0IHN1Ym1pdFxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29uQ2FuY2VsXSBDYWxsYmFjayBmdW5jdGlvbiBjYWxsZWQgb24gY2FuY2VsL2Fib3J0XG4gKiBAcmV0dXJucyB7T2JqZWN0fSBPYmplY3Qgd2l0aCB2YWx1ZXMgZnJvbSB1c2VyIGlucHV0XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHByb21wdChxdWVzdGlvbnM9W10sIHsgb25TdWJtaXQ9bm9vcCwgb25DYW5jZWw9bm9vcCB9PXt9KSB7XG4gIGNvbnN0IGFuc3dlcnMgPSB7fTtcbiAgY29uc3Qgb3ZlcnJpZGUgPSBwcm9tcHQuX292ZXJyaWRlIHx8IHt9O1xuICBxdWVzdGlvbnMgPSBbXS5jb25jYXQocXVlc3Rpb25zKTtcbiAgbGV0IGFuc3dlciwgcXVlc3Rpb24sIHF1aXQsIG5hbWUsIHR5cGUsIGxhc3RQcm9tcHQ7XG5cbiAgY29uc3QgZ2V0Rm9ybWF0dGVkQW5zd2VyID0gYXN5bmMgKHF1ZXN0aW9uLCBhbnN3ZXIsIHNraXBWYWxpZGF0aW9uID0gZmFsc2UpID0+IHtcbiAgICBpZiAoIXNraXBWYWxpZGF0aW9uICYmIHF1ZXN0aW9uLnZhbGlkYXRlICYmIHF1ZXN0aW9uLnZhbGlkYXRlKGFuc3dlcikgIT09IHRydWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcmV0dXJuIHF1ZXN0aW9uLmZvcm1hdCA/IGF3YWl0IHF1ZXN0aW9uLmZvcm1hdChhbnN3ZXIsIGFuc3dlcnMpIDogYW5zd2VyXG4gIH07XG5cbiAgZm9yIChxdWVzdGlvbiBvZiBxdWVzdGlvbnMpIHtcbiAgICAoeyBuYW1lLCB0eXBlIH0gPSBxdWVzdGlvbik7XG5cbiAgICAvLyBldmFsdWF0ZSB0eXBlIGZpcnN0IGFuZCBza2lwIGlmIHR5cGUgaXMgYSBmYWxzeSB2YWx1ZVxuICAgIGlmICh0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdHlwZSA9IGF3YWl0IHR5cGUoYW5zd2VyLCB7IC4uLmFuc3dlcnMgfSwgcXVlc3Rpb24pXG4gICAgICBxdWVzdGlvblsndHlwZSddID0gdHlwZVxuICAgIH1cbiAgICBpZiAoIXR5cGUpIGNvbnRpbnVlO1xuXG4gICAgLy8gaWYgcHJvcGVydHkgaXMgYSBmdW5jdGlvbiwgaW52b2tlIGl0IHVubGVzcyBpdCdzIGEgc3BlY2lhbCBmdW5jdGlvblxuICAgIGZvciAobGV0IGtleSBpbiBxdWVzdGlvbikge1xuICAgICAgaWYgKHBhc3NPbi5pbmNsdWRlcyhrZXkpKSBjb250aW51ZTtcbiAgICAgIGxldCB2YWx1ZSA9IHF1ZXN0aW9uW2tleV07XG4gICAgICBxdWVzdGlvbltrZXldID0gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nID8gYXdhaXQgdmFsdWUoYW5zd2VyLCB7IC4uLmFuc3dlcnMgfSwgbGFzdFByb21wdCkgOiB2YWx1ZTtcbiAgICB9XG5cbiAgICBsYXN0UHJvbXB0ID0gcXVlc3Rpb247XG5cbiAgICBpZiAodHlwZW9mIHF1ZXN0aW9uLm1lc3NhZ2UgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb21wdCBtZXNzYWdlIGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuXG4gICAgLy8gdXBkYXRlIHZhcnMgaW4gY2FzZSB0aGV5IGNoYW5nZWRcbiAgICAoeyBuYW1lLCB0eXBlIH0gPSBxdWVzdGlvbik7XG5cbiAgICBpZiAocHJvbXB0c1t0eXBlXSA9PT0gdm9pZCAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHByb21wdCB0eXBlICgke3R5cGV9KSBpcyBub3QgZGVmaW5lZGApO1xuICAgIH1cblxuICAgIGlmIChvdmVycmlkZVtxdWVzdGlvbi5uYW1lXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBhbnN3ZXIgPSBhd2FpdCBnZXRGb3JtYXR0ZWRBbnN3ZXIocXVlc3Rpb24sIG92ZXJyaWRlW3F1ZXN0aW9uLm5hbWVdKTtcbiAgICAgIGlmIChhbnN3ZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBhbnN3ZXJzW25hbWVdID0gYW5zd2VyO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgLy8gR2V0IHRoZSBpbmplY3RlZCBhbnN3ZXIgaWYgdGhlcmUgaXMgb25lIG9yIHByb21wdCB0aGUgdXNlclxuICAgICAgYW5zd2VyID0gcHJvbXB0Ll9pbmplY3RlZCA/IGdldEluamVjdGVkQW5zd2VyKHByb21wdC5faW5qZWN0ZWQsIHF1ZXN0aW9uLmluaXRpYWwpIDogYXdhaXQgcHJvbXB0c1t0eXBlXShxdWVzdGlvbik7XG4gICAgICBhbnN3ZXJzW25hbWVdID0gYW5zd2VyID0gYXdhaXQgZ2V0Rm9ybWF0dGVkQW5zd2VyKHF1ZXN0aW9uLCBhbnN3ZXIsIHRydWUpO1xuICAgICAgcXVpdCA9IGF3YWl0IG9uU3VibWl0KHF1ZXN0aW9uLCBhbnN3ZXIsIGFuc3dlcnMpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcXVpdCA9ICEoYXdhaXQgb25DYW5jZWwocXVlc3Rpb24sIGFuc3dlcnMpKTtcbiAgICB9XG5cbiAgICBpZiAocXVpdCkgcmV0dXJuIGFuc3dlcnM7XG4gIH1cblxuICByZXR1cm4gYW5zd2Vycztcbn1cblxuZnVuY3Rpb24gZ2V0SW5qZWN0ZWRBbnN3ZXIoaW5qZWN0ZWQsIGRlYWZ1bHRWYWx1ZSkge1xuICBjb25zdCBhbnN3ZXIgPSBpbmplY3RlZC5zaGlmdCgpO1xuICAgIGlmIChhbnN3ZXIgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgdGhyb3cgYW5zd2VyO1xuICAgIH1cblxuICAgIHJldHVybiAoYW5zd2VyID09PSB1bmRlZmluZWQpID8gZGVhZnVsdFZhbHVlIDogYW5zd2VyO1xufVxuXG5mdW5jdGlvbiBpbmplY3QoYW5zd2Vycykge1xuICBwcm9tcHQuX2luamVjdGVkID0gKHByb21wdC5faW5qZWN0ZWQgfHwgW10pLmNvbmNhdChhbnN3ZXJzKTtcbn1cblxuZnVuY3Rpb24gb3ZlcnJpZGUoYW5zd2Vycykge1xuICBwcm9tcHQuX292ZXJyaWRlID0gT2JqZWN0LmFzc2lnbih7fSwgYW5zd2Vycyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmFzc2lnbihwcm9tcHQsIHsgcHJvbXB0LCBwcm9tcHRzLCBpbmplY3QsIG92ZXJyaWRlIH0pO1xuIiwiZnVuY3Rpb24gaXNOb2RlTFQodGFyKSB7XG4gIHRhciA9IChBcnJheS5pc0FycmF5KHRhcikgPyB0YXIgOiB0YXIuc3BsaXQoJy4nKSkubWFwKE51bWJlcik7XG4gIGxldCBpPTAsIHNyYz1wcm9jZXNzLnZlcnNpb25zLm5vZGUuc3BsaXQoJy4nKS5tYXAoTnVtYmVyKTtcbiAgZm9yICg7IGkgPCB0YXIubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoc3JjW2ldID4gdGFyW2ldKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHRhcltpXSA+IHNyY1tpXSkgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9XG4gIGlzTm9kZUxUKCc4LjYuMCcpXG4gICAgPyByZXF1aXJlKCcuL2Rpc3QvaW5kZXguanMnKVxuICAgIDogcmVxdWlyZSgnLi9saWIvaW5kZXguanMnKTtcbiIsIi8qKlxuICogQGRlc2NyaXB0aW9uIEVudW0gZm9yIGxvZyBsZXZlbHMuXG4gKiBAc3VtbWFyeSBEZWZpbmVzIGRpZmZlcmVudCBsZXZlbHMgb2YgbG9nZ2luZyBmb3IgdGhlIGFwcGxpY2F0aW9uLlxuICogQGVudW0ge3N0cmluZ31cbiAqIEBtZW1iZXJPZiBtb2R1bGU6TG9nZ2luZ1xuICovXG5leHBvcnQgdmFyIExvZ0xldmVsO1xuKGZ1bmN0aW9uIChMb2dMZXZlbCkge1xuICAgIC8qKiBFcnJvciBldmVudHMgdGhhdCBhcmUgbGlrZWx5IHRvIGNhdXNlIHByb2JsZW1zLiAqL1xuICAgIExvZ0xldmVsW1wiZXJyb3JcIl0gPSBcImVycm9yXCI7XG4gICAgLyoqIFJvdXRpbmUgaW5mb3JtYXRpb24sIHN1Y2ggYXMgb25nb2luZyBzdGF0dXMgb3IgcGVyZm9ybWFuY2UuICovXG4gICAgTG9nTGV2ZWxbXCJpbmZvXCJdID0gXCJpbmZvXCI7XG4gICAgLyoqIEFkZGl0aW9uYWwgcmVsZXZhbnQgaW5mb3JtYXRpb24uICovXG4gICAgTG9nTGV2ZWxbXCJ2ZXJib3NlXCJdID0gXCJ2ZXJib3NlXCI7XG4gICAgLyoqIERlYnVnIG9yIHRyYWNlIGluZm9ybWF0aW9uLiAqL1xuICAgIExvZ0xldmVsW1wiZGVidWdcIl0gPSBcImRlYnVnXCI7XG4gICAgLyoqIHdheSB0b28gdmVyYm9zZSBvciBzaWxseSBpbmZvcm1hdGlvbi4gKi9cbiAgICBMb2dMZXZlbFtcInNpbGx5XCJdID0gXCJzaWxseVwiO1xufSkoTG9nTGV2ZWwgfHwgKExvZ0xldmVsID0ge30pKTtcbi8qKlxuICogQGRlc2NyaXB0aW9uIE51bWVyaWMgdmFsdWVzIGFzc29jaWF0ZWQgd2l0aCBsb2cgbGV2ZWxzLlxuICogQHN1bW1hcnkgUHJvdmlkZXMgYSBudW1lcmljIHJlcHJlc2VudGF0aW9uIG9mIGxvZyBsZXZlbHMgZm9yIGNvbXBhcmlzb24gYW5kIGZpbHRlcmluZy5cbiAqIEBjb25zdCBOdW1lcmljTG9nTGV2ZWxzXG4gKiBAcHJvcGVydHkge251bWJlcn0gZXJyb3IgLSBOdW1lcmljIHZhbHVlIGZvciBlcnJvciBsZXZlbCAoMikuXG4gKiBAcHJvcGVydHkge251bWJlcn0gaW5mbyAtIE51bWVyaWMgdmFsdWUgZm9yIGluZm8gbGV2ZWwgKDQpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IHZlcmJvc2UgLSBOdW1lcmljIHZhbHVlIGZvciB2ZXJib3NlIGxldmVsICg2KS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBkZWJ1ZyAtIE51bWVyaWMgdmFsdWUgZm9yIGRlYnVnIGxldmVsICg3KS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBzaWxseSAtIE51bWVyaWMgdmFsdWUgZm9yIHNpbGx5IGxldmVsICg5KS5cbiAqIEBtZW1iZXJPZiBtb2R1bGU6TG9nZ2luZ1xuICovXG5leHBvcnQgY29uc3QgTnVtZXJpY0xvZ0xldmVscyA9IHtcbiAgICBlcnJvcjogMixcbiAgICBpbmZvOiA0LFxuICAgIHZlcmJvc2U6IDYsXG4gICAgZGVidWc6IDcsXG4gICAgc2lsbHk6IDksXG59O1xuLyoqXG4gKiBAZGVzY3JpcHRpb24gRW51bSBmb3IgbG9nZ2luZyBvdXRwdXQgbW9kZXMuXG4gKiBAc3VtbWFyeSBEZWZpbmVzIGRpZmZlcmVudCBvdXRwdXQgZm9ybWF0cyBmb3IgbG9nIG1lc3NhZ2VzLlxuICogQGVudW0ge3N0cmluZ31cbiAqIEBtZW1iZXJPZiBtb2R1bGU6TG9nZ2luZ1xuICovXG5leHBvcnQgdmFyIExvZ2dpbmdNb2RlO1xuKGZ1bmN0aW9uIChMb2dnaW5nTW9kZSkge1xuICAgIC8qKiBSYXcgdGV4dCBmb3JtYXQgZm9yIGh1bWFuIHJlYWRhYmlsaXR5ICovXG4gICAgTG9nZ2luZ01vZGVbXCJSQVdcIl0gPSBcInJhd1wiO1xuICAgIC8qKiBKU09OIGZvcm1hdCBmb3IgbWFjaGluZSBwYXJzaW5nICovXG4gICAgTG9nZ2luZ01vZGVbXCJKU09OXCJdID0gXCJqc29uXCI7XG59KShMb2dnaW5nTW9kZSB8fCAoTG9nZ2luZ01vZGUgPSB7fSkpO1xuLyoqXG4gKiBAZGVzY3JpcHRpb24gRGVmYXVsdCB0aGVtZSBmb3Igc3R5bGluZyBsb2cgb3V0cHV0LlxuICogQHN1bW1hcnkgRGVmaW5lcyB0aGUgZGVmYXVsdCBjb2xvciBhbmQgc3R5bGUgc2V0dGluZ3MgZm9yIHZhcmlvdXMgY29tcG9uZW50cyBvZiBsb2cgbWVzc2FnZXMuXG4gKiBAY29uc3QgRGVmYXVsdFRoZW1lXG4gKiBAdHlwZWRlZiB7VGhlbWV9IERlZmF1bHRUaGVtZVxuICogQHByb3BlcnR5IHtPYmplY3R9IGNsYXNzIC0gU3R5bGluZyBmb3IgY2xhc3MgbmFtZXMuXG4gKiBAcHJvcGVydHkge251bWJlcn0gY2xhc3MuZmcgLSBGb3JlZ3JvdW5kIGNvbG9yIGNvZGUgZm9yIGNsYXNzIG5hbWVzICgzNCkuXG4gKiBAcHJvcGVydHkge09iamVjdH0gaWQgLSBTdHlsaW5nIGZvciBpZGVudGlmaWVycy5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBpZC5mZyAtIEZvcmVncm91bmQgY29sb3IgY29kZSBmb3IgaWRlbnRpZmllcnMgKDM2KS5cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBzdGFjayAtIFN0eWxpbmcgZm9yIHN0YWNrIHRyYWNlcyAoZW1wdHkgb2JqZWN0KS5cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSB0aW1lc3RhbXAgLSBTdHlsaW5nIGZvciB0aW1lc3RhbXBzIChlbXB0eSBvYmplY3QpLlxuICogQHByb3BlcnR5IHtPYmplY3R9IG1lc3NhZ2UgLSBTdHlsaW5nIGZvciBkaWZmZXJlbnQgdHlwZXMgb2YgbWVzc2FnZXMuXG4gKiBAcHJvcGVydHkge09iamVjdH0gbWVzc2FnZS5lcnJvciAtIFN0eWxpbmcgZm9yIGVycm9yIG1lc3NhZ2VzLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IG1lc3NhZ2UuZXJyb3IuZmcgLSBGb3JlZ3JvdW5kIGNvbG9yIGNvZGUgZm9yIGVycm9yIG1lc3NhZ2VzICgzMSkuXG4gKiBAcHJvcGVydHkge09iamVjdH0gbWV0aG9kIC0gU3R5bGluZyBmb3IgbWV0aG9kIG5hbWVzIChlbXB0eSBvYmplY3QpLlxuICogQHByb3BlcnR5IHtPYmplY3R9IGxvZ0xldmVsIC0gU3R5bGluZyBmb3IgZGlmZmVyZW50IGxvZyBsZXZlbHMuXG4gKiBAcHJvcGVydHkge09iamVjdH0gbG9nTGV2ZWwuZXJyb3IgLSBTdHlsaW5nIGZvciBlcnJvciBsZXZlbCBsb2dzLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGxvZ0xldmVsLmVycm9yLmZnIC0gRm9yZWdyb3VuZCBjb2xvciBjb2RlIGZvciBlcnJvciBsZXZlbCBsb2dzICgzMSkuXG4gKiBAcHJvcGVydHkge3N0cmluZ1tdfSBsb2dMZXZlbC5lcnJvci5zdHlsZSAtIFN0eWxlIGF0dHJpYnV0ZXMgZm9yIGVycm9yIGxldmVsIGxvZ3MgKFtcImJvbGRcIl0pLlxuICogQHByb3BlcnR5IHtPYmplY3R9IGxvZ0xldmVsLmluZm8gLSBTdHlsaW5nIGZvciBpbmZvIGxldmVsIGxvZ3MgKGVtcHR5IG9iamVjdCkuXG4gKiBAcHJvcGVydHkge09iamVjdH0gbG9nTGV2ZWwudmVyYm9zZSAtIFN0eWxpbmcgZm9yIHZlcmJvc2UgbGV2ZWwgbG9ncyAoZW1wdHkgb2JqZWN0KS5cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBsb2dMZXZlbC5kZWJ1ZyAtIFN0eWxpbmcgZm9yIGRlYnVnIGxldmVsIGxvZ3MuXG4gKiBAcHJvcGVydHkge251bWJlcn0gbG9nTGV2ZWwuZGVidWcuZmcgLSBGb3JlZ3JvdW5kIGNvbG9yIGNvZGUgZm9yIGRlYnVnIGxldmVsIGxvZ3MgKDMzKS5cbiAqIEBtZW1iZXJPZiBtb2R1bGU6TG9nZ2luZ1xuICovXG5leHBvcnQgY29uc3QgRGVmYXVsdFRoZW1lID0ge1xuICAgIGNsYXNzOiB7XG4gICAgICAgIGZnOiAzNCxcbiAgICB9LFxuICAgIGlkOiB7XG4gICAgICAgIGZnOiAzNixcbiAgICB9LFxuICAgIHN0YWNrOiB7fSxcbiAgICB0aW1lc3RhbXA6IHt9LFxuICAgIG1lc3NhZ2U6IHtcbiAgICAgICAgZXJyb3I6IHtcbiAgICAgICAgICAgIGZnOiAzMSxcbiAgICAgICAgfSxcbiAgICB9LFxuICAgIG1ldGhvZDoge30sXG4gICAgbG9nTGV2ZWw6IHtcbiAgICAgICAgZXJyb3I6IHtcbiAgICAgICAgICAgIGZnOiAzMSxcbiAgICAgICAgICAgIHN0eWxlOiBbXCJib2xkXCJdLFxuICAgICAgICB9LFxuICAgICAgICBpbmZvOiB7fSxcbiAgICAgICAgdmVyYm9zZToge30sXG4gICAgICAgIGRlYnVnOiB7XG4gICAgICAgICAgICBmZzogMzMsXG4gICAgICAgIH0sXG4gICAgfSxcbn07XG4vKipcbiAqIEBkZXNjcmlwdGlvbiBEZWZhdWx0IGNvbmZpZ3VyYXRpb24gZm9yIGxvZ2dpbmcuXG4gKiBAc3VtbWFyeSBEZWZpbmVzIHRoZSBkZWZhdWx0IHNldHRpbmdzIGZvciB0aGUgbG9nZ2luZyBzeXN0ZW0sIGluY2x1ZGluZyB2ZXJib3NpdHksIGxvZyBsZXZlbCwgc3R5bGluZywgYW5kIHRpbWVzdGFtcCBmb3JtYXQuXG4gKiBAY29uc3QgRGVmYXVsdExvZ2dpbmdDb25maWdcbiAqIEB0eXBlZGVmIHtMb2dnaW5nQ29uZmlnfSBEZWZhdWx0TG9nZ2luZ0NvbmZpZ1xuICogQHByb3BlcnR5IHtudW1iZXJ9IHZlcmJvc2UgLSBWZXJib3NpdHkgbGV2ZWwgKDApLlxuICogQHByb3BlcnR5IHtMb2dMZXZlbH0gbGV2ZWwgLSBEZWZhdWx0IGxvZyBsZXZlbCAoTG9nTGV2ZWwuaW5mbykuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IGxvZ0xldmVsIC0gV2hldGhlciB0byBkaXNwbGF5IGxvZyBsZXZlbCBpbiBvdXRwdXQgKHRydWUpLlxuICogQHByb3BlcnR5IHtMb2dnaW5nTW9kZX0gbW9kZSAtIE91dHB1dCBmb3JtYXQgbW9kZSAoTG9nZ2luZ01vZGUuUkFXKS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gc3R5bGUgLSBXaGV0aGVyIHRvIGFwcGx5IHN0eWxpbmcgdG8gbG9nIG91dHB1dCAoZmFsc2UpLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IHNlcGFyYXRvciAtIFNlcGFyYXRvciBiZXR3ZWVuIGxvZyBjb21wb25lbnRzIChcIiAtIFwiKS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gdGltZXN0YW1wIC0gV2hldGhlciB0byBpbmNsdWRlIHRpbWVzdGFtcHMgaW4gbG9nIG1lc3NhZ2VzICh0cnVlKS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0aW1lc3RhbXBGb3JtYXQgLSBGb3JtYXQgZm9yIHRpbWVzdGFtcHMgKFwiSEg6bW06c3MuU1NTXCIpLlxuICogQHByb3BlcnR5IHtib29sZWFufSBjb250ZXh0IC0gV2hldGhlciB0byBpbmNsdWRlIGNvbnRleHQgaW5mb3JtYXRpb24gaW4gbG9nIG1lc3NhZ2VzICh0cnVlKS5cbiAqIEBwcm9wZXJ0eSB7VGhlbWV9IHRoZW1lIC0gVGhlIHRoZW1lIHRvIHVzZSBmb3Igc3R5bGluZyBsb2cgbWVzc2FnZXMgKERlZmF1bHRUaGVtZSkuXG4gKiBAbWVtYmVyT2YgbW9kdWxlOkxvZ2dpbmdcbiAqL1xuZXhwb3J0IGNvbnN0IERlZmF1bHRMb2dnaW5nQ29uZmlnID0ge1xuICAgIHZlcmJvc2U6IDAsXG4gICAgbGV2ZWw6IExvZ0xldmVsLmluZm8sXG4gICAgbG9nTGV2ZWw6IHRydWUsXG4gICAgbW9kZTogTG9nZ2luZ01vZGUuUkFXLFxuICAgIHN0eWxlOiBmYWxzZSxcbiAgICBjb250ZXh0U2VwYXJhdG9yOiBcIi5cIixcbiAgICBzZXBhcmF0b3I6IFwiIC0gXCIsXG4gICAgdGltZXN0YW1wOiB0cnVlLFxuICAgIHRpbWVzdGFtcEZvcm1hdDogXCJISDptbTpzcy5TU1NcIixcbiAgICBjb250ZXh0OiB0cnVlLFxuICAgIHRoZW1lOiBEZWZhdWx0VGhlbWUsXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pWTI5dWMzUmhiblJ6TG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhNaU9sc2lMaTR2TGk0dmMzSmpMMk52Ym5OMFlXNTBjeTUwY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pUVVGRlFUczdPenM3UjBGTFJ6dEJRVU5JTEUxQlFVMHNRMEZCVGl4SlFVRlpMRkZCVjFnN1FVRllSQ3hYUVVGWkxGRkJRVkU3U1VGRGJFSXNjMFJCUVhORU8wbEJRM1JFTERKQ1FVRmxMRU5CUVVFN1NVRkRaaXhyUlVGQmEwVTdTVUZEYkVVc2VVSkJRV0VzUTBGQlFUdEpRVU5pTEhWRFFVRjFRenRKUVVOMlF5d3JRa0ZCYlVJc1EwRkJRVHRKUVVOdVFpeHJRMEZCYTBNN1NVRkRiRU1zTWtKQlFXVXNRMEZCUVR0SlFVTm1MRFJEUVVFMFF6dEpRVU0xUXl3eVFrRkJaU3hEUVVGQk8wRkJRMnBDTEVOQlFVTXNSVUZZVnl4UlFVRlJMRXRCUVZJc1VVRkJVU3hSUVZkdVFqdEJRVVZFT3pzN096czdPenM3TzBkQlZVYzdRVUZEU0N4TlFVRk5MRU5CUVVNc1RVRkJUU3huUWtGQlowSXNSMEZCUnp0SlFVTTVRaXhMUVVGTExFVkJRVVVzUTBGQlF6dEpRVU5TTEVsQlFVa3NSVUZCUlN4RFFVRkRPMGxCUTFBc1QwRkJUeXhGUVVGRkxFTkJRVU03U1VGRFZpeExRVUZMTEVWQlFVVXNRMEZCUXp0SlFVTlNMRXRCUVVzc1JVRkJSU3hEUVVGRE8wTkJRMVFzUTBGQlF6dEJRVVZHT3pzN096dEhRVXRITzBGQlEwZ3NUVUZCVFN4RFFVRk9MRWxCUVZrc1YwRkxXRHRCUVV4RUxGZEJRVmtzVjBGQlZ6dEpRVU55UWl3MFEwRkJORU03U1VGRE5VTXNNRUpCUVZjc1EwRkJRVHRKUVVOWUxITkRRVUZ6UXp0SlFVTjBReXcwUWtGQllTeERRVUZCTzBGQlEyWXNRMEZCUXl4RlFVeFhMRmRCUVZjc1MwRkJXQ3hYUVVGWExGRkJTM1JDTzBGQlJVUTdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3p0SFFYZENSenRCUVVOSUxFMUJRVTBzUTBGQlF5eE5RVUZOTEZsQlFWa3NSMEZCVlR0SlFVTnFReXhMUVVGTExFVkJRVVU3VVVGRFRDeEZRVUZGTEVWQlFVVXNSVUZCUlR0TFFVTlFPMGxCUTBRc1JVRkJSU3hGUVVGRk8xRkJRMFlzUlVGQlJTeEZRVUZGTEVWQlFVVTdTMEZEVUR0SlFVTkVMRXRCUVVzc1JVRkJSU3hGUVVGRk8wbEJRMVFzVTBGQlV5eEZRVUZGTEVWQlFVVTdTVUZEWWl4UFFVRlBMRVZCUVVVN1VVRkRVQ3hMUVVGTExFVkJRVVU3V1VGRFRDeEZRVUZGTEVWQlFVVXNSVUZCUlR0VFFVTlFPMHRCUTBZN1NVRkRSQ3hOUVVGTkxFVkJRVVVzUlVGQlJUdEpRVU5XTEZGQlFWRXNSVUZCUlR0UlFVTlNMRXRCUVVzc1JVRkJSVHRaUVVOTUxFVkJRVVVzUlVGQlJTeEZRVUZGTzFsQlEwNHNTMEZCU3l4RlFVRkZMRU5CUVVNc1RVRkJUU3hEUVVGRE8xTkJRMmhDTzFGQlEwUXNTVUZCU1N4RlFVRkZMRVZCUVVVN1VVRkRVaXhQUVVGUExFVkJRVVVzUlVGQlJUdFJRVU5ZTEV0QlFVc3NSVUZCUlR0WlFVTk1MRVZCUVVVc1JVRkJSU3hGUVVGRk8xTkJRMUE3UzBGRFJqdERRVU5HTEVOQlFVTTdRVUZGUmpzN096czdPenM3T3pzN096czdPenRIUVdkQ1J6dEJRVU5JTEUxQlFVMHNRMEZCUXl4TlFVRk5MRzlDUVVGdlFpeEhRVUZyUWp0SlFVTnFSQ3hQUVVGUExFVkJRVVVzUTBGQlF6dEpRVU5XTEV0QlFVc3NSVUZCUlN4UlFVRlJMRU5CUVVNc1NVRkJTVHRKUVVOd1FpeFJRVUZSTEVWQlFVVXNTVUZCU1R0SlFVTmtMRWxCUVVrc1JVRkJSU3hYUVVGWExFTkJRVU1zUjBGQlJ6dEpRVU55UWl4TFFVRkxMRVZCUVVVc1MwRkJTenRKUVVOYUxHZENRVUZuUWl4RlFVRkZMRWRCUVVjN1NVRkRja0lzVTBGQlV5eEZRVUZGTEV0QlFVczdTVUZEYUVJc1UwRkJVeXhGUVVGRkxFbEJRVWs3U1VGRFppeGxRVUZsTEVWQlFVVXNZMEZCWXp0SlFVTXZRaXhQUVVGUExFVkJRVVVzU1VGQlNUdEpRVU5pTEV0QlFVc3NSVUZCUlN4WlFVRlpPME5CUTNCQ0xFTkJRVU1pTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lKcGJYQnZjblFnZXlCTWIyZG5hVzVuUTI5dVptbG5MQ0JVYUdWdFpTQjlJR1p5YjIwZ1hDSXVMM1I1Y0dWelhDSTdYRzVjYmk4cUtseHVJQ29nUUdSbGMyTnlhWEIwYVc5dUlFVnVkVzBnWm05eUlHeHZaeUJzWlhabGJITXVYRzRnS2lCQWMzVnRiV0Z5ZVNCRVpXWnBibVZ6SUdScFptWmxjbVZ1ZENCc1pYWmxiSE1nYjJZZ2JHOW5aMmx1WnlCbWIzSWdkR2hsSUdGd2NHeHBZMkYwYVc5dUxseHVJQ29nUUdWdWRXMGdlM04wY21sdVozMWNiaUFxSUVCdFpXMWlaWEpQWmlCdGIyUjFiR1U2VEc5bloybHVaMXh1SUNvdlhHNWxlSEJ2Y25RZ1pXNTFiU0JNYjJkTVpYWmxiQ0I3WEc0Z0lDOHFLaUJGY25KdmNpQmxkbVZ1ZEhNZ2RHaGhkQ0JoY21VZ2JHbHJaV3g1SUhSdklHTmhkWE5sSUhCeWIySnNaVzF6TGlBcUwxeHVJQ0JsY25KdmNpQTlJRndpWlhKeWIzSmNJaXhjYmlBZ0x5b3FJRkp2ZFhScGJtVWdhVzVtYjNKdFlYUnBiMjRzSUhOMVkyZ2dZWE1nYjI1bmIybHVaeUJ6ZEdGMGRYTWdiM0lnY0dWeVptOXliV0Z1WTJVdUlDb3ZYRzRnSUdsdVptOGdQU0JjSW1sdVptOWNJaXhjYmlBZ0x5b3FJRUZrWkdsMGFXOXVZV3dnY21Wc1pYWmhiblFnYVc1bWIzSnRZWFJwYjI0dUlDb3ZYRzRnSUhabGNtSnZjMlVnUFNCY0luWmxjbUp2YzJWY0lpeGNiaUFnTHlvcUlFUmxZblZuSUc5eUlIUnlZV05sSUdsdVptOXliV0YwYVc5dUxpQXFMMXh1SUNCa1pXSjFaeUE5SUZ3aVpHVmlkV2RjSWl4Y2JpQWdMeW9xSUhkaGVTQjBiMjhnZG1WeVltOXpaU0J2Y2lCemFXeHNlU0JwYm1admNtMWhkR2x2Ymk0Z0tpOWNiaUFnYzJsc2JIa2dQU0JjSW5OcGJHeDVYQ0lzWEc1OVhHNWNiaThxS2x4dUlDb2dRR1JsYzJOeWFYQjBhVzl1SUU1MWJXVnlhV01nZG1Gc2RXVnpJR0Z6YzI5amFXRjBaV1FnZDJsMGFDQnNiMmNnYkdWMlpXeHpMbHh1SUNvZ1FITjFiVzFoY25rZ1VISnZkbWxrWlhNZ1lTQnVkVzFsY21saklISmxjSEpsYzJWdWRHRjBhVzl1SUc5bUlHeHZaeUJzWlhabGJITWdabTl5SUdOdmJYQmhjbWx6YjI0Z1lXNWtJR1pwYkhSbGNtbHVaeTVjYmlBcUlFQmpiMjV6ZENCT2RXMWxjbWxqVEc5blRHVjJaV3h6WEc0Z0tpQkFjSEp2Y0dWeWRIa2dlMjUxYldKbGNuMGdaWEp5YjNJZ0xTQk9kVzFsY21saklIWmhiSFZsSUdadmNpQmxjbkp2Y2lCc1pYWmxiQ0FvTWlrdVhHNGdLaUJBY0hKdmNHVnlkSGtnZTI1MWJXSmxjbjBnYVc1bWJ5QXRJRTUxYldWeWFXTWdkbUZzZFdVZ1ptOXlJR2x1Wm04Z2JHVjJaV3dnS0RRcExseHVJQ29nUUhCeWIzQmxjblI1SUh0dWRXMWlaWEo5SUhabGNtSnZjMlVnTFNCT2RXMWxjbWxqSUhaaGJIVmxJR1p2Y2lCMlpYSmliM05sSUd4bGRtVnNJQ2cyS1M1Y2JpQXFJRUJ3Y205d1pYSjBlU0I3Ym5WdFltVnlmU0JrWldKMVp5QXRJRTUxYldWeWFXTWdkbUZzZFdVZ1ptOXlJR1JsWW5WbklHeGxkbVZzSUNnM0tTNWNiaUFxSUVCd2NtOXdaWEowZVNCN2JuVnRZbVZ5ZlNCemFXeHNlU0F0SUU1MWJXVnlhV01nZG1Gc2RXVWdabTl5SUhOcGJHeDVJR3hsZG1Wc0lDZzVLUzVjYmlBcUlFQnRaVzFpWlhKUFppQnRiMlIxYkdVNlRHOW5aMmx1WjF4dUlDb3ZYRzVsZUhCdmNuUWdZMjl1YzNRZ1RuVnRaWEpwWTB4dloweGxkbVZzY3lBOUlIdGNiaUFnWlhKeWIzSTZJRElzWEc0Z0lHbHVabTg2SURRc1hHNGdJSFpsY21KdmMyVTZJRFlzWEc0Z0lHUmxZblZuT2lBM0xGeHVJQ0J6YVd4c2VUb2dPU3hjYm4wN1hHNWNiaThxS2x4dUlDb2dRR1JsYzJOeWFYQjBhVzl1SUVWdWRXMGdabTl5SUd4dloyZHBibWNnYjNWMGNIVjBJRzF2WkdWekxseHVJQ29nUUhOMWJXMWhjbmtnUkdWbWFXNWxjeUJrYVdabVpYSmxiblFnYjNWMGNIVjBJR1p2Y20xaGRITWdabTl5SUd4dlp5QnRaWE56WVdkbGN5NWNiaUFxSUVCbGJuVnRJSHR6ZEhKcGJtZDlYRzRnS2lCQWJXVnRZbVZ5VDJZZ2JXOWtkV3hsT2t4dloyZHBibWRjYmlBcUwxeHVaWGh3YjNKMElHVnVkVzBnVEc5bloybHVaMDF2WkdVZ2UxeHVJQ0F2S2lvZ1VtRjNJSFJsZUhRZ1ptOXliV0YwSUdadmNpQm9kVzFoYmlCeVpXRmtZV0pwYkdsMGVTQXFMMXh1SUNCU1FWY2dQU0JjSW5KaGQxd2lMRnh1SUNBdktpb2dTbE5QVGlCbWIzSnRZWFFnWm05eUlHMWhZMmhwYm1VZ2NHRnljMmx1WnlBcUwxeHVJQ0JLVTA5T0lEMGdYQ0pxYzI5dVhDSXNYRzU5WEc1Y2JpOHFLbHh1SUNvZ1FHUmxjMk55YVhCMGFXOXVJRVJsWm1GMWJIUWdkR2hsYldVZ1ptOXlJSE4wZVd4cGJtY2diRzluSUc5MWRIQjFkQzVjYmlBcUlFQnpkVzF0WVhKNUlFUmxabWx1WlhNZ2RHaGxJR1JsWm1GMWJIUWdZMjlzYjNJZ1lXNWtJSE4wZVd4bElITmxkSFJwYm1keklHWnZjaUIyWVhKcGIzVnpJR052YlhCdmJtVnVkSE1nYjJZZ2JHOW5JRzFsYzNOaFoyVnpMbHh1SUNvZ1FHTnZibk4wSUVSbFptRjFiSFJVYUdWdFpWeHVJQ29nUUhSNWNHVmtaV1lnZTFSb1pXMWxmU0JFWldaaGRXeDBWR2hsYldWY2JpQXFJRUJ3Y205d1pYSjBlU0I3VDJKcVpXTjBmU0JqYkdGemN5QXRJRk4wZVd4cGJtY2dabTl5SUdOc1lYTnpJRzVoYldWekxseHVJQ29nUUhCeWIzQmxjblI1SUh0dWRXMWlaWEo5SUdOc1lYTnpMbVpuSUMwZ1JtOXlaV2R5YjNWdVpDQmpiMnh2Y2lCamIyUmxJR1p2Y2lCamJHRnpjeUJ1WVcxbGN5QW9NelFwTGx4dUlDb2dRSEJ5YjNCbGNuUjVJSHRQWW1wbFkzUjlJR2xrSUMwZ1UzUjViR2x1WnlCbWIzSWdhV1JsYm5ScFptbGxjbk11WEc0Z0tpQkFjSEp2Y0dWeWRIa2dlMjUxYldKbGNuMGdhV1F1Wm1jZ0xTQkdiM0psWjNKdmRXNWtJR052Ykc5eUlHTnZaR1VnWm05eUlHbGtaVzUwYVdacFpYSnpJQ2d6TmlrdVhHNGdLaUJBY0hKdmNHVnlkSGtnZTA5aWFtVmpkSDBnYzNSaFkyc2dMU0JUZEhsc2FXNW5JR1p2Y2lCemRHRmpheUIwY21GalpYTWdLR1Z0Y0hSNUlHOWlhbVZqZENrdVhHNGdLaUJBY0hKdmNHVnlkSGtnZTA5aWFtVmpkSDBnZEdsdFpYTjBZVzF3SUMwZ1UzUjViR2x1WnlCbWIzSWdkR2x0WlhOMFlXMXdjeUFvWlcxd2RIa2diMkpxWldOMEtTNWNiaUFxSUVCd2NtOXdaWEowZVNCN1QySnFaV04wZlNCdFpYTnpZV2RsSUMwZ1UzUjViR2x1WnlCbWIzSWdaR2xtWm1WeVpXNTBJSFI1Y0dWeklHOW1JRzFsYzNOaFoyVnpMbHh1SUNvZ1FIQnliM0JsY25SNUlIdFBZbXBsWTNSOUlHMWxjM05oWjJVdVpYSnliM0lnTFNCVGRIbHNhVzVuSUdadmNpQmxjbkp2Y2lCdFpYTnpZV2RsY3k1Y2JpQXFJRUJ3Y205d1pYSjBlU0I3Ym5WdFltVnlmU0J0WlhOellXZGxMbVZ5Y205eUxtWm5JQzBnUm05eVpXZHliM1Z1WkNCamIyeHZjaUJqYjJSbElHWnZjaUJsY25KdmNpQnRaWE56WVdkbGN5QW9NekVwTGx4dUlDb2dRSEJ5YjNCbGNuUjVJSHRQWW1wbFkzUjlJRzFsZEdodlpDQXRJRk4wZVd4cGJtY2dabTl5SUcxbGRHaHZaQ0J1WVcxbGN5QW9aVzF3ZEhrZ2IySnFaV04wS1M1Y2JpQXFJRUJ3Y205d1pYSjBlU0I3VDJKcVpXTjBmU0JzYjJkTVpYWmxiQ0F0SUZOMGVXeHBibWNnWm05eUlHUnBabVpsY21WdWRDQnNiMmNnYkdWMlpXeHpMbHh1SUNvZ1FIQnliM0JsY25SNUlIdFBZbXBsWTNSOUlHeHZaMHhsZG1Wc0xtVnljbTl5SUMwZ1UzUjViR2x1WnlCbWIzSWdaWEp5YjNJZ2JHVjJaV3dnYkc5bmN5NWNiaUFxSUVCd2NtOXdaWEowZVNCN2JuVnRZbVZ5ZlNCc2IyZE1aWFpsYkM1bGNuSnZjaTVtWnlBdElFWnZjbVZuY205MWJtUWdZMjlzYjNJZ1kyOWtaU0JtYjNJZ1pYSnliM0lnYkdWMlpXd2diRzluY3lBb016RXBMbHh1SUNvZ1FIQnliM0JsY25SNUlIdHpkSEpwYm1kYlhYMGdiRzluVEdWMlpXd3VaWEp5YjNJdWMzUjViR1VnTFNCVGRIbHNaU0JoZEhSeWFXSjFkR1Z6SUdadmNpQmxjbkp2Y2lCc1pYWmxiQ0JzYjJkeklDaGJYQ0ppYjJ4a1hDSmRLUzVjYmlBcUlFQndjbTl3WlhKMGVTQjdUMkpxWldOMGZTQnNiMmRNWlhabGJDNXBibVp2SUMwZ1UzUjViR2x1WnlCbWIzSWdhVzVtYnlCc1pYWmxiQ0JzYjJkeklDaGxiWEIwZVNCdlltcGxZM1FwTGx4dUlDb2dRSEJ5YjNCbGNuUjVJSHRQWW1wbFkzUjlJR3h2WjB4bGRtVnNMblpsY21KdmMyVWdMU0JUZEhsc2FXNW5JR1p2Y2lCMlpYSmliM05sSUd4bGRtVnNJR3h2WjNNZ0tHVnRjSFI1SUc5aWFtVmpkQ2t1WEc0Z0tpQkFjSEp2Y0dWeWRIa2dlMDlpYW1WamRIMGdiRzluVEdWMlpXd3VaR1ZpZFdjZ0xTQlRkSGxzYVc1bklHWnZjaUJrWldKMVp5QnNaWFpsYkNCc2IyZHpMbHh1SUNvZ1FIQnliM0JsY25SNUlIdHVkVzFpWlhKOUlHeHZaMHhsZG1Wc0xtUmxZblZuTG1abklDMGdSbTl5WldkeWIzVnVaQ0JqYjJ4dmNpQmpiMlJsSUdadmNpQmtaV0oxWnlCc1pYWmxiQ0JzYjJkeklDZ3pNeWt1WEc0Z0tpQkFiV1Z0WW1WeVQyWWdiVzlrZFd4bE9reHZaMmRwYm1kY2JpQXFMMXh1Wlhod2IzSjBJR052Ym5OMElFUmxabUYxYkhSVWFHVnRaVG9nVkdobGJXVWdQU0I3WEc0Z0lHTnNZWE56T2lCN1hHNGdJQ0FnWm1jNklETTBMRnh1SUNCOUxGeHVJQ0JwWkRvZ2UxeHVJQ0FnSUdabk9pQXpOaXhjYmlBZ2ZTeGNiaUFnYzNSaFkyczZJSHQ5TEZ4dUlDQjBhVzFsYzNSaGJYQTZJSHQ5TEZ4dUlDQnRaWE56WVdkbE9pQjdYRzRnSUNBZ1pYSnliM0k2SUh0Y2JpQWdJQ0FnSUdabk9pQXpNU3hjYmlBZ0lDQjlMRnh1SUNCOUxGeHVJQ0J0WlhSb2IyUTZJSHQ5TEZ4dUlDQnNiMmRNWlhabGJEb2dlMXh1SUNBZ0lHVnljbTl5T2lCN1hHNGdJQ0FnSUNCbVp6b2dNekVzWEc0Z0lDQWdJQ0J6ZEhsc1pUb2dXMXdpWW05c1pGd2lYU3hjYmlBZ0lDQjlMRnh1SUNBZ0lHbHVabTg2SUh0OUxGeHVJQ0FnSUhabGNtSnZjMlU2SUh0OUxGeHVJQ0FnSUdSbFluVm5PaUI3WEc0Z0lDQWdJQ0JtWnpvZ016TXNYRzRnSUNBZ2ZTeGNiaUFnZlN4Y2JuMDdYRzVjYmk4cUtseHVJQ29nUUdSbGMyTnlhWEIwYVc5dUlFUmxabUYxYkhRZ1kyOXVabWxuZFhKaGRHbHZiaUJtYjNJZ2JHOW5aMmx1Wnk1Y2JpQXFJRUJ6ZFcxdFlYSjVJRVJsWm1sdVpYTWdkR2hsSUdSbFptRjFiSFFnYzJWMGRHbHVaM01nWm05eUlIUm9aU0JzYjJkbmFXNW5JSE41YzNSbGJTd2dhVzVqYkhWa2FXNW5JSFpsY21KdmMybDBlU3dnYkc5bklHeGxkbVZzTENCemRIbHNhVzVuTENCaGJtUWdkR2x0WlhOMFlXMXdJR1p2Y20xaGRDNWNiaUFxSUVCamIyNXpkQ0JFWldaaGRXeDBURzluWjJsdVowTnZibVpwWjF4dUlDb2dRSFI1Y0dWa1pXWWdlMHh2WjJkcGJtZERiMjVtYVdkOUlFUmxabUYxYkhSTWIyZG5hVzVuUTI5dVptbG5YRzRnS2lCQWNISnZjR1Z5ZEhrZ2UyNTFiV0psY24wZ2RtVnlZbTl6WlNBdElGWmxjbUp2YzJsMGVTQnNaWFpsYkNBb01Da3VYRzRnS2lCQWNISnZjR1Z5ZEhrZ2UweHZaMHhsZG1Wc2ZTQnNaWFpsYkNBdElFUmxabUYxYkhRZ2JHOW5JR3hsZG1Wc0lDaE1iMmRNWlhabGJDNXBibVp2S1M1Y2JpQXFJRUJ3Y205d1pYSjBlU0I3WW05dmJHVmhibjBnYkc5blRHVjJaV3dnTFNCWGFHVjBhR1Z5SUhSdklHUnBjM0JzWVhrZ2JHOW5JR3hsZG1Wc0lHbHVJRzkxZEhCMWRDQW9kSEoxWlNrdVhHNGdLaUJBY0hKdmNHVnlkSGtnZTB4dloyZHBibWROYjJSbGZTQnRiMlJsSUMwZ1QzVjBjSFYwSUdadmNtMWhkQ0J0YjJSbElDaE1iMmRuYVc1blRXOWtaUzVTUVZjcExseHVJQ29nUUhCeWIzQmxjblI1SUh0aWIyOXNaV0Z1ZlNCemRIbHNaU0F0SUZkb1pYUm9aWElnZEc4Z1lYQndiSGtnYzNSNWJHbHVaeUIwYnlCc2IyY2diM1YwY0hWMElDaG1ZV3h6WlNrdVhHNGdLaUJBY0hKdmNHVnlkSGtnZTNOMGNtbHVaMzBnYzJWd1lYSmhkRzl5SUMwZ1UyVndZWEpoZEc5eUlHSmxkSGRsWlc0Z2JHOW5JR052YlhCdmJtVnVkSE1nS0Z3aUlDMGdYQ0lwTGx4dUlDb2dRSEJ5YjNCbGNuUjVJSHRpYjI5c1pXRnVmU0IwYVcxbGMzUmhiWEFnTFNCWGFHVjBhR1Z5SUhSdklHbHVZMngxWkdVZ2RHbHRaWE4wWVcxd2N5QnBiaUJzYjJjZ2JXVnpjMkZuWlhNZ0tIUnlkV1VwTGx4dUlDb2dRSEJ5YjNCbGNuUjVJSHR6ZEhKcGJtZDlJSFJwYldWemRHRnRjRVp2Y20xaGRDQXRJRVp2Y20xaGRDQm1iM0lnZEdsdFpYTjBZVzF3Y3lBb1hDSklTRHB0YlRwemN5NVRVMU5jSWlrdVhHNGdLaUJBY0hKdmNHVnlkSGtnZTJKdmIyeGxZVzU5SUdOdmJuUmxlSFFnTFNCWGFHVjBhR1Z5SUhSdklHbHVZMngxWkdVZ1kyOXVkR1Y0ZENCcGJtWnZjbTFoZEdsdmJpQnBiaUJzYjJjZ2JXVnpjMkZuWlhNZ0tIUnlkV1VwTGx4dUlDb2dRSEJ5YjNCbGNuUjVJSHRVYUdWdFpYMGdkR2hsYldVZ0xTQlVhR1VnZEdobGJXVWdkRzhnZFhObElHWnZjaUJ6ZEhsc2FXNW5JR3h2WnlCdFpYTnpZV2RsY3lBb1JHVm1ZWFZzZEZSb1pXMWxLUzVjYmlBcUlFQnRaVzFpWlhKUFppQnRiMlIxYkdVNlRHOW5aMmx1WjF4dUlDb3ZYRzVsZUhCdmNuUWdZMjl1YzNRZ1JHVm1ZWFZzZEV4dloyZHBibWREYjI1bWFXYzZJRXh2WjJkcGJtZERiMjVtYVdjZ1BTQjdYRzRnSUhabGNtSnZjMlU2SURBc1hHNGdJR3hsZG1Wc09pQk1iMmRNWlhabGJDNXBibVp2TEZ4dUlDQnNiMmRNWlhabGJEb2dkSEoxWlN4Y2JpQWdiVzlrWlRvZ1RHOW5aMmx1WjAxdlpHVXVVa0ZYTEZ4dUlDQnpkSGxzWlRvZ1ptRnNjMlVzWEc0Z0lHTnZiblJsZUhSVFpYQmhjbUYwYjNJNklGd2lMbHdpTEZ4dUlDQnpaWEJoY21GMGIzSTZJRndpSUMwZ1hDSXNYRzRnSUhScGJXVnpkR0Z0Y0RvZ2RISjFaU3hjYmlBZ2RHbHRaWE4wWVcxd1JtOXliV0YwT2lCY0lraElPbTF0T25OekxsTlRVMXdpTEZ4dUlDQmpiMjUwWlhoME9pQjBjblZsTEZ4dUlDQjBhR1Z0WlRvZ1JHVm1ZWFZzZEZSb1pXMWxMRnh1ZlR0Y2JpSmRmUT09IiwiLyoqXG4gKiBAZGVzY3JpcHRpb24gQU5TSSBlc2NhcGUgY29kZSBmb3IgcmVzZXR0aW5nIHRleHQgZm9ybWF0dGluZy5cbiAqIEBzdW1tYXJ5IFRoaXMgY29uc3RhbnQgaG9sZHMgdGhlIEFOU0kgZXNjYXBlIHNlcXVlbmNlIHVzZWQgdG8gcmVzZXQgYWxsIHRleHQgZm9ybWF0dGluZyB0byBkZWZhdWx0LlxuICogQGNvbnN0IEFuc2lSZXNldFxuICogQG1lbWJlck9mIG1vZHVsZTpTdHlsZWRTdHJpbmdcbiAqL1xuZXhwb3J0IGNvbnN0IEFuc2lSZXNldCA9IFwiXFx4MWJbMG1cIjtcbi8qKlxuICogQGRlc2NyaXB0aW9uIFN0YW5kYXJkIGZvcmVncm91bmQgY29sb3IgY29kZXMgZm9yIEFOU0kgdGV4dCBmb3JtYXR0aW5nLlxuICogQHN1bW1hcnkgVGhpcyBvYmplY3QgbWFwcyBjb2xvciBuYW1lcyB0byB0aGVpciBjb3JyZXNwb25kaW5nIEFOU0kgY29sb3IgY29kZXMgZm9yIHN0YW5kYXJkIGZvcmVncm91bmQgY29sb3JzLlxuICogQGNvbnN0IFN0YW5kYXJkRm9yZWdyb3VuZENvbG9yc1xuICogQHByb3BlcnR5IHtudW1iZXJ9IGJsYWNrIC0gQU5TSSBjb2RlIGZvciBibGFjayB0ZXh0ICgzMCkuXG4gKiBAcHJvcGVydHkge251bWJlcn0gcmVkIC0gQU5TSSBjb2RlIGZvciByZWQgdGV4dCAoMzEpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGdyZWVuIC0gQU5TSSBjb2RlIGZvciBncmVlbiB0ZXh0ICgzMikuXG4gKiBAcHJvcGVydHkge251bWJlcn0geWVsbG93IC0gQU5TSSBjb2RlIGZvciB5ZWxsb3cgdGV4dCAoMzMpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGJsdWUgLSBBTlNJIGNvZGUgZm9yIGJsdWUgdGV4dCAoMzQpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IG1hZ2VudGEgLSBBTlNJIGNvZGUgZm9yIG1hZ2VudGEgdGV4dCAoMzUpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGN5YW4gLSBBTlNJIGNvZGUgZm9yIGN5YW4gdGV4dCAoMzYpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IHdoaXRlIC0gQU5TSSBjb2RlIGZvciB3aGl0ZSB0ZXh0ICgzNykuXG4gKiBAbWVtYmVyT2YgbW9kdWxlOlN0eWxlZFN0cmluZ1xuICovXG5leHBvcnQgY29uc3QgU3RhbmRhcmRGb3JlZ3JvdW5kQ29sb3JzID0ge1xuICAgIGJsYWNrOiAzMCxcbiAgICByZWQ6IDMxLFxuICAgIGdyZWVuOiAzMixcbiAgICB5ZWxsb3c6IDMzLFxuICAgIGJsdWU6IDM0LFxuICAgIG1hZ2VudGE6IDM1LFxuICAgIGN5YW46IDM2LFxuICAgIHdoaXRlOiAzNyxcbn07XG4vKipcbiAqIEBkZXNjcmlwdGlvbiBCcmlnaHQgZm9yZWdyb3VuZCBjb2xvciBjb2RlcyBmb3IgQU5TSSB0ZXh0IGZvcm1hdHRpbmcuXG4gKiBAc3VtbWFyeSBUaGlzIG9iamVjdCBtYXBzIGNvbG9yIG5hbWVzIHRvIHRoZWlyIGNvcnJlc3BvbmRpbmcgQU5TSSBjb2xvciBjb2RlcyBmb3IgYnJpZ2h0IGZvcmVncm91bmQgY29sb3JzLlxuICogQGNvbnN0IEJyaWdodEZvcmVncm91bmRDb2xvcnNcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBibGFjayAtIEFOU0kgY29kZSBmb3IgYnJpZ2h0IGJsYWNrIHRleHQgKDkwKS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSByZWQgLSBBTlNJIGNvZGUgZm9yIGJyaWdodCByZWQgdGV4dCAoOTEpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGdyZWVuIC0gQU5TSSBjb2RlIGZvciBicmlnaHQgZ3JlZW4gdGV4dCAoOTIpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IHllbGxvdyAtIEFOU0kgY29kZSBmb3IgYnJpZ2h0IHllbGxvdyB0ZXh0ICg5MykuXG4gKiBAcHJvcGVydHkge251bWJlcn0gYmx1ZSAtIEFOU0kgY29kZSBmb3IgYnJpZ2h0IGJsdWUgdGV4dCAoOTQpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IG1hZ2VudGEgLSBBTlNJIGNvZGUgZm9yIGJyaWdodCBtYWdlbnRhIHRleHQgKDk1KS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBjeWFuIC0gQU5TSSBjb2RlIGZvciBicmlnaHQgY3lhbiB0ZXh0ICg5NikuXG4gKiBAcHJvcGVydHkge251bWJlcn0gd2hpdGUgLSBBTlNJIGNvZGUgZm9yIGJyaWdodCB3aGl0ZSB0ZXh0ICg5NykuXG4gKiBAbWVtYmVyT2YgbW9kdWxlOkBTdHlsZWRTdHJpbmdcbiAqL1xuZXhwb3J0IGNvbnN0IEJyaWdodEZvcmVncm91bmRDb2xvcnMgPSB7XG4gICAgYnJpZ2h0QmxhY2s6IDkwLFxuICAgIGJyaWdodFJlZDogOTEsXG4gICAgYnJpZ2h0R3JlZW46IDkyLFxuICAgIGJyaWdodFllbGxvdzogOTMsXG4gICAgYnJpZ2h0Qmx1ZTogOTQsXG4gICAgYnJpZ2h0TWFnZW50YTogOTUsXG4gICAgYnJpZ2h0Q3lhbjogOTYsXG4gICAgYnJpZ2h0V2hpdGU6IDk3LFxufTtcbi8qKlxuICogQGRlc2NyaXB0aW9uIFN0YW5kYXJkIGJhY2tncm91bmQgY29sb3IgY29kZXMgZm9yIEFOU0kgdGV4dCBmb3JtYXR0aW5nLlxuICogQHN1bW1hcnkgVGhpcyBvYmplY3QgbWFwcyBjb2xvciBuYW1lcyB0byB0aGVpciBjb3JyZXNwb25kaW5nIEFOU0kgY29sb3IgY29kZXMgZm9yIHN0YW5kYXJkIGJhY2tncm91bmQgY29sb3JzLlxuICogQGNvbnN0IFN0YW5kYXJkQmFja2dyb3VuZENvbG9yc1xuICogQHByb3BlcnR5IHtudW1iZXJ9IGJnQmxhY2sgLSBBTlNJIGNvZGUgZm9yIGJsYWNrIGJhY2tncm91bmQgKDQwKS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBiZ1JlZCAtIEFOU0kgY29kZSBmb3IgcmVkIGJhY2tncm91bmQgKDQxKS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBiZ0dyZWVuIC0gQU5TSSBjb2RlIGZvciBncmVlbiBiYWNrZ3JvdW5kICg0MikuXG4gKiBAcHJvcGVydHkge251bWJlcn0gYmdZZWxsb3cgLSBBTlNJIGNvZGUgZm9yIHllbGxvdyBiYWNrZ3JvdW5kICg0MykuXG4gKiBAcHJvcGVydHkge251bWJlcn0gYmdCbHVlIC0gQU5TSSBjb2RlIGZvciBibHVlIGJhY2tncm91bmQgKDQ0KS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBiZ01hZ2VudGEgLSBBTlNJIGNvZGUgZm9yIG1hZ2VudGEgYmFja2dyb3VuZCAoNDUpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGJnQ3lhbiAtIEFOU0kgY29kZSBmb3IgY3lhbiBiYWNrZ3JvdW5kICg0NikuXG4gKiBAcHJvcGVydHkge251bWJlcn0gYmdXaGl0ZSAtIEFOU0kgY29kZSBmb3Igd2hpdGUgYmFja2dyb3VuZCAoNDcpLlxuICogQG1lbWJlck9mIG1vZHVsZTpAU3R5bGVkU3RyaW5nXG4gKi9cbmV4cG9ydCBjb25zdCBTdGFuZGFyZEJhY2tncm91bmRDb2xvcnMgPSB7XG4gICAgYmdCbGFjazogNDAsXG4gICAgYmdSZWQ6IDQxLFxuICAgIGJnR3JlZW46IDQyLFxuICAgIGJnWWVsbG93OiA0MyxcbiAgICBiZ0JsdWU6IDQ0LFxuICAgIGJnTWFnZW50YTogNDUsXG4gICAgYmdDeWFuOiA0NixcbiAgICBiZ1doaXRlOiA0Nyxcbn07XG4vKipcbiAqIEBkZXNjcmlwdGlvbiBCcmlnaHQgYmFja2dyb3VuZCBjb2xvciBjb2RlcyBmb3IgQU5TSSB0ZXh0IGZvcm1hdHRpbmcuXG4gKiBAc3VtbWFyeSBUaGlzIG9iamVjdCBtYXBzIGNvbG9yIG5hbWVzIHRvIHRoZWlyIGNvcnJlc3BvbmRpbmcgQU5TSSBjb2xvciBjb2RlcyBmb3IgYnJpZ2h0IGJhY2tncm91bmQgY29sb3JzLlxuICogQGNvbnN0IEJyaWdodEJhY2tncm91bmRDb2xvcnNcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBiZ0JyaWdodEJsYWNrIC0gQU5TSSBjb2RlIGZvciBicmlnaHQgYmxhY2sgYmFja2dyb3VuZCAoMTAwKS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBiZ0JyaWdodFJlZCAtIEFOU0kgY29kZSBmb3IgYnJpZ2h0IHJlZCBiYWNrZ3JvdW5kICgxMDEpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGJnQnJpZ2h0R3JlZW4gLSBBTlNJIGNvZGUgZm9yIGJyaWdodCBncmVlbiBiYWNrZ3JvdW5kICgxMDIpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGJnQnJpZ2h0WWVsbG93IC0gQU5TSSBjb2RlIGZvciBicmlnaHQgeWVsbG93IGJhY2tncm91bmQgKDEwMykuXG4gKiBAcHJvcGVydHkge251bWJlcn0gYmdCcmlnaHRCbHVlIC0gQU5TSSBjb2RlIGZvciBicmlnaHQgYmx1ZSBiYWNrZ3JvdW5kICgxMDQpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGJnQnJpZ2h0TWFnZW50YSAtIEFOU0kgY29kZSBmb3IgYnJpZ2h0IG1hZ2VudGEgYmFja2dyb3VuZCAoMTA1KS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBiZ0JyaWdodEN5YW4gLSBBTlNJIGNvZGUgZm9yIGJyaWdodCBjeWFuIGJhY2tncm91bmQgKDEwNikuXG4gKiBAcHJvcGVydHkge251bWJlcn0gYmdCcmlnaHRXaGl0ZSAtIEFOU0kgY29kZSBmb3IgYnJpZ2h0IHdoaXRlIGJhY2tncm91bmQgKDEwNykuXG4gKiBAbWVtYmVyT2YgbW9kdWxlOkBTdHlsZWRTdHJpbmdcbiAqL1xuZXhwb3J0IGNvbnN0IEJyaWdodEJhY2tncm91bmRDb2xvcnMgPSB7XG4gICAgYmdCcmlnaHRCbGFjazogMTAwLFxuICAgIGJnQnJpZ2h0UmVkOiAxMDEsXG4gICAgYmdCcmlnaHRHcmVlbjogMTAyLFxuICAgIGJnQnJpZ2h0WWVsbG93OiAxMDMsXG4gICAgYmdCcmlnaHRCbHVlOiAxMDQsXG4gICAgYmdCcmlnaHRNYWdlbnRhOiAxMDUsXG4gICAgYmdCcmlnaHRDeWFuOiAxMDYsXG4gICAgYmdCcmlnaHRXaGl0ZTogMTA3LFxufTtcbi8qKlxuICogQGRlc2NyaXB0aW9uIFRleHQgc3R5bGUgY29kZXMgZm9yIEFOU0kgdGV4dCBmb3JtYXR0aW5nLlxuICogQHN1bW1hcnkgVGhpcyBvYmplY3QgbWFwcyBzdHlsZSBuYW1lcyB0byB0aGVpciBjb3JyZXNwb25kaW5nIEFOU0kgY29kZXMgZm9yIHZhcmlvdXMgdGV4dCBzdHlsZXMuXG4gKiBAY29uc3Qgc3R5bGVzXG4gKiBAcHJvcGVydHkge251bWJlcn0gcmVzZXQgLSBBTlNJIGNvZGUgdG8gcmVzZXQgYWxsIHN0eWxlcyAoMCkuXG4gKiBAcHJvcGVydHkge251bWJlcn0gYm9sZCAtIEFOU0kgY29kZSBmb3IgYm9sZCB0ZXh0ICgxKS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBkaW0gLSBBTlNJIGNvZGUgZm9yIGRpbSB0ZXh0ICgyKS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBpdGFsaWMgLSBBTlNJIGNvZGUgZm9yIGl0YWxpYyB0ZXh0ICgzKS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSB1bmRlcmxpbmUgLSBBTlNJIGNvZGUgZm9yIHVuZGVybGluZWQgdGV4dCAoNCkuXG4gKiBAcHJvcGVydHkge251bWJlcn0gYmxpbmsgLSBBTlNJIGNvZGUgZm9yIGJsaW5raW5nIHRleHQgKDUpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGludmVyc2UgLSBBTlNJIGNvZGUgZm9yIGludmVyc2UgY29sb3JzICg3KS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBoaWRkZW4gLSBBTlNJIGNvZGUgZm9yIGhpZGRlbiB0ZXh0ICg4KS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBzdHJpa2V0aHJvdWdoIC0gQU5TSSBjb2RlIGZvciBzdHJpa2V0aHJvdWdoIHRleHQgKDkpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IGRvdWJsZVVuZGVybGluZSAtIEFOU0kgY29kZSBmb3IgZG91YmxlIHVuZGVybGluZWQgdGV4dCAoMjEpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IG5vcm1hbENvbG9yIC0gQU5TSSBjb2RlIHRvIHJlc2V0IGNvbG9yIHRvIG5vcm1hbCAoMjIpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IG5vSXRhbGljT3JGcmFrdHVyIC0gQU5TSSBjb2RlIHRvIHR1cm4gb2ZmIGl0YWxpYyAoMjMpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IG5vVW5kZXJsaW5lIC0gQU5TSSBjb2RlIHRvIHR1cm4gb2ZmIHVuZGVybGluZSAoMjQpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IG5vQmxpbmsgLSBBTlNJIGNvZGUgdG8gdHVybiBvZmYgYmxpbmsgKDI1KS5cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBub0ludmVyc2UgLSBBTlNJIGNvZGUgdG8gdHVybiBvZmYgaW52ZXJzZSAoMjcpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IG5vSGlkZGVuIC0gQU5TSSBjb2RlIHRvIHR1cm4gb2ZmIGhpZGRlbiAoMjgpLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IG5vU3RyaWtldGhyb3VnaCAtIEFOU0kgY29kZSB0byB0dXJuIG9mZiBzdHJpa2V0aHJvdWdoICgyOSkuXG4gKiBAbWVtYmVyT2YgbW9kdWxlOkBTdHlsZWRTdHJpbmdcbiAqL1xuZXhwb3J0IGNvbnN0IHN0eWxlcyA9IHtcbiAgICByZXNldDogMCxcbiAgICBib2xkOiAxLFxuICAgIGRpbTogMixcbiAgICBpdGFsaWM6IDMsXG4gICAgdW5kZXJsaW5lOiA0LFxuICAgIGJsaW5rOiA1LFxuICAgIGludmVyc2U6IDcsXG4gICAgaGlkZGVuOiA4LFxuICAgIHN0cmlrZXRocm91Z2g6IDksXG4gICAgZG91YmxlVW5kZXJsaW5lOiAyMSxcbiAgICBub3JtYWxDb2xvcjogMjIsXG4gICAgbm9JdGFsaWNPckZyYWt0dXI6IDIzLFxuICAgIG5vVW5kZXJsaW5lOiAyNCxcbiAgICBub0JsaW5rOiAyNSxcbiAgICBub0ludmVyc2U6IDI3LFxuICAgIG5vSGlkZGVuOiAyOCxcbiAgICBub1N0cmlrZXRocm91Z2g6IDI5LFxufTtcbiIsImltcG9ydCB7IEFuc2lSZXNldCwgc3R5bGVzIH0gZnJvbSBcIi4vY29uc3RhbnRzLmpzXCI7XG4vKipcbiAqIEBkZXNjcmlwdGlvbiBBcHBsaWVzIGEgYmFzaWMgQU5TSSBjb2xvciBjb2RlIHRvIHRleHQuXG4gKiBAc3VtbWFyeSBUaGlzIGZ1bmN0aW9uIHRha2VzIGEgc3RyaW5nLCBhbiBBTlNJIGNvbG9yIGNvZGUgbnVtYmVyLCBhbmQgYW4gb3B0aW9uYWwgYmFja2dyb3VuZCBmbGFnLlxuICogSXQgcmV0dXJucyB0aGUgdGV4dCB3cmFwcGVkIGluIHRoZSBhcHByb3ByaWF0ZSBBTlNJIGVzY2FwZSBjb2RlcyBmb3IgZWl0aGVyIGZvcmVncm91bmQgb3IgYmFja2dyb3VuZCBjb2xvcmluZy5cbiAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBmb3IgYmFzaWMgMTYtY29sb3IgQU5TSSBmb3JtYXR0aW5nLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gVGhlIHRleHQgdG8gYmUgY29sb3JlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBuIC0gVGhlIEFOU0kgY29sb3IgY29kZSBudW1iZXIuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtiZz1mYWxzZV0gLSBJZiB0cnVlLCBhcHBsaWVzIHRoZSBjb2xvciB0byB0aGUgYmFja2dyb3VuZCBpbnN0ZWFkIG9mIHRoZSBmb3JlZ3JvdW5kLlxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgdGV4dCB3cmFwcGVkIGluIEFOU0kgY29sb3IgY29kZXMuXG4gKlxuICogQGZ1bmN0aW9uIGNvbG9yaXplQU5TSVxuICogQG1lbWJlck9mIG1vZHVsZTpAU3R5bGVkU3RyaW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb2xvcml6ZUFOU0kodGV4dCwgbiwgYmcgPSBmYWxzZSkge1xuICAgIGlmIChpc05hTihuKSkge1xuICAgICAgICBjb25zb2xlLndhcm4oYEludmFsaWQgY29sb3IgbnVtYmVyIG9uIHRoZSBBTlNJIHNjYWxlOiAke259LiBpZ25vcmluZy4uLmApO1xuICAgICAgICByZXR1cm4gdGV4dDtcbiAgICB9XG4gICAgaWYgKGJnICYmICgobiA+IDMwICYmIG4gPD0gNDApXG4gICAgICAgIHx8IChuID4gOTAgJiYgbiA8PSAxMDApKSkge1xuICAgICAgICBuID0gbiArIDEwO1xuICAgIH1cbiAgICByZXR1cm4gYFxceDFiWyR7bn1tJHt0ZXh0fSR7QW5zaVJlc2V0fWA7XG59XG4vKipcbiAqIEBkZXNjcmlwdGlvbiBBcHBsaWVzIGEgMjU2LWNvbG9yIEFOU0kgY29kZSB0byB0ZXh0LlxuICogQHN1bW1hcnkgVGhpcyBmdW5jdGlvbiB0YWtlcyBhIHN0cmluZyBhbmQgYSBjb2xvciBudW1iZXIgKDAtMjU1KSBhbmQgcmV0dXJucyB0aGUgdGV4dFxuICogd3JhcHBlZCBpbiBBTlNJIGVzY2FwZSBjb2RlcyBmb3IgZWl0aGVyIGZvcmVncm91bmQgb3IgYmFja2dyb3VuZCBjb2xvcmluZy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIFRoZSB0ZXh0IHRvIGJlIGNvbG9yZWQuXG4gKiBAcGFyYW0ge251bWJlcn0gbiAtIFRoZSBjb2xvciBudW1iZXIgKDAtMjU1KS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2JnPWZhbHNlXSAtIElmIHRydWUsIGFwcGxpZXMgdGhlIGNvbG9yIHRvIHRoZSBiYWNrZ3JvdW5kIGluc3RlYWQgb2YgdGhlIGZvcmVncm91bmQuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSB0ZXh0IHdyYXBwZWQgaW4gQU5TSSBjb2xvciBjb2Rlcy5cbiAqXG4gKiBAZnVuY3Rpb24gY29sb3JpemUyNTZcbiAqIEBtZW1iZXJPZiBtb2R1bGU6QFN0eWxlZFN0cmluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gY29sb3JpemUyNTYodGV4dCwgbiwgYmcgPSBmYWxzZSkge1xuICAgIGlmIChpc05hTihuKSkge1xuICAgICAgICBjb25zb2xlLndhcm4oYEludmFsaWQgY29sb3IgbnVtYmVyIG9uIHRoZSAyNTYgc2NhbGU6ICR7bn0uIGlnbm9yaW5nLi4uYCk7XG4gICAgICAgIHJldHVybiB0ZXh0O1xuICAgIH1cbiAgICBpZiAobiA8IDAgfHwgbiA+IDI1NSkge1xuICAgICAgICBjb25zb2xlLndhcm4oYEludmFsaWQgY29sb3IgbnVtYmVyIG9uIHRoZSAyNTYgc2NhbGU6ICR7bn0uIGlnbm9yaW5nLi4uYCk7XG4gICAgICAgIHJldHVybiB0ZXh0O1xuICAgIH1cbiAgICByZXR1cm4gYFxceDFiWyR7YmcgPyA0OCA6IDM4fTs1OyR7bn1tJHt0ZXh0fSR7QW5zaVJlc2V0fWA7XG59XG4vKipcbiAqIEBkZXNjcmlwdGlvbiBBcHBsaWVzIGFuIFJHQiBjb2xvciBBTlNJIGNvZGUgdG8gdGV4dC5cbiAqIEBzdW1tYXJ5IFRoaXMgZnVuY3Rpb24gdGFrZXMgYSBzdHJpbmcgYW5kIFJHQiBjb2xvciB2YWx1ZXMgKDAtMjU1IGZvciBlYWNoIGNvbXBvbmVudClcbiAqIGFuZCByZXR1cm5zIHRoZSB0ZXh0IHdyYXBwZWQgaW4gQU5TSSBlc2NhcGUgY29kZXMgZm9yIGVpdGhlciBmb3JlZ3JvdW5kIG9yIGJhY2tncm91bmQgY29sb3JpbmcuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBUaGUgdGV4dCB0byBiZSBjb2xvcmVkLlxuICogQHBhcmFtIHtudW1iZXJ9IHIgLSBUaGUgcmVkIGNvbXBvbmVudCBvZiB0aGUgY29sb3IgKDAtMjU1KS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBnIC0gVGhlIGdyZWVuIGNvbXBvbmVudCBvZiB0aGUgY29sb3IgKDAtMjU1KS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiIC0gVGhlIGJsdWUgY29tcG9uZW50IG9mIHRoZSBjb2xvciAoMC0yNTUpLlxuICogQHBhcmFtIHtib29sZWFufSBbYmc9ZmFsc2VdIC0gSWYgdHJ1ZSwgYXBwbGllcyB0aGUgY29sb3IgdG8gdGhlIGJhY2tncm91bmQgaW5zdGVhZCBvZiB0aGUgZm9yZWdyb3VuZC5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIHRleHQgd3JhcHBlZCBpbiBBTlNJIGNvbG9yIGNvZGVzLlxuICpcbiAqIEBmdW5jdGlvbiBjb2xvcml6ZVJHQlxuICogQG1lbWJlck9mIG1vZHVsZTpTdHlsZWRTdHJpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbG9yaXplUkdCKHRleHQsIHIsIGcsIGIsIGJnID0gZmFsc2UpIHtcbiAgICBpZiAoaXNOYU4ocikgfHwgaXNOYU4oZykgfHwgaXNOYU4oYikpIHtcbiAgICAgICAgY29uc29sZS53YXJuKGBJbnZhbGlkIFJHQiBjb2xvciB2YWx1ZXM6IHI9JHtyfSwgZz0ke2d9LCBiPSR7Yn0uIElnbm9yaW5nLi4uYCk7XG4gICAgICAgIHJldHVybiB0ZXh0O1xuICAgIH1cbiAgICBpZiAoW3IsIGcsIGJdLnNvbWUodiA9PiB2IDwgMCB8fCB2ID4gMjU1KSkge1xuICAgICAgICBjb25zb2xlLndhcm4oYEludmFsaWQgUkdCIGNvbG9yIHZhbHVlczogcj0ke3J9LCBnPSR7Z30sIGI9JHtifS4gSWdub3JpbmcuLi5gKTtcbiAgICAgICAgcmV0dXJuIHRleHQ7XG4gICAgfVxuICAgIHJldHVybiBgXFx4MWJbJHtiZyA/IDQ4IDogMzh9OzI7JHtyfTske2d9OyR7Yn1tJHt0ZXh0fSR7QW5zaVJlc2V0fWA7XG59XG4vKipcbiAqIEBkZXNjcmlwdGlvbiBBcHBsaWVzIGFuIEFOU0kgc3R5bGUgY29kZSB0byB0ZXh0LlxuICogQHN1bW1hcnkgVGhpcyBmdW5jdGlvbiB0YWtlcyBhIHN0cmluZyBhbmQgYSBzdHlsZSBjb2RlIChlaXRoZXIgYSBudW1iZXIgb3IgYSBrZXkgZnJvbSB0aGUgc3R5bGVzIG9iamVjdClcbiAqIGFuZCByZXR1cm5zIHRoZSB0ZXh0IHdyYXBwZWQgaW4gdGhlIGFwcHJvcHJpYXRlIEFOU0kgZXNjYXBlIGNvZGVzIGZvciB0aGF0IHN0eWxlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gVGhlIHRleHQgdG8gYmUgc3R5bGVkLlxuICogQHBhcmFtIHtudW1iZXIgfCBzdHJpbmd9IG4gLSBUaGUgc3R5bGUgY29kZSBvciBzdHlsZSBuYW1lLlxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgdGV4dCB3cmFwcGVkIGluIEFOU0kgc3R5bGUgY29kZXMuXG4gKlxuICogQGZ1bmN0aW9uIGFwcGx5U3R5bGVcbiAqIEBtZW1iZXJPZiBtb2R1bGU6U3R5bGVkU3RyaW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcHBseVN0eWxlKHRleHQsIG4pIHtcbiAgICBjb25zdCBzdHlsZUNvZGUgPSB0eXBlb2YgbiA9PT0gXCJudW1iZXJcIiA/IG4gOiBzdHlsZXNbbl07XG4gICAgcmV0dXJuIGBcXHgxYlske3N0eWxlQ29kZX1tJHt0ZXh0fSR7QW5zaVJlc2V0fWA7XG59XG4vKipcbiAqIEBkZXNjcmlwdGlvbiBSZW1vdmVzIGFsbCBBTlNJIGZvcm1hdHRpbmcgY29kZXMgZnJvbSB0ZXh0LlxuICogQHN1bW1hcnkgVGhpcyBmdW5jdGlvbiB0YWtlcyBhIHN0cmluZyB0aGF0IG1heSBjb250YWluIEFOU0kgZXNjYXBlIGNvZGVzIGZvciBmb3JtYXR0aW5nXG4gKiBhbmQgcmV0dXJucyBhIG5ldyBzdHJpbmcgd2l0aCBhbGwgc3VjaCBjb2RlcyByZW1vdmVkLCBsZWF2aW5nIG9ubHkgdGhlIHBsYWluIHRleHQgY29udGVudC5cbiAqIEl0IHVzZXMgYSByZWd1bGFyIGV4cHJlc3Npb24gdG8gbWF0Y2ggYW5kIHJlbW92ZSBBTlNJIGVzY2FwZSBzZXF1ZW5jZXMuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBUaGUgdGV4dCBwb3RlbnRpYWxseSBjb250YWluaW5nIEFOU0kgZm9ybWF0dGluZyBjb2Rlcy5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGlucHV0IHRleHQgd2l0aCBhbGwgQU5TSSBmb3JtYXR0aW5nIGNvZGVzIHJlbW92ZWQuXG4gKlxuICogQGZ1bmN0aW9uIGNsZWFyXG4gKiBAbWVtYmVyT2YgbW9kdWxlOlN0eWxlZFN0cmluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gY2xlYXIodGV4dCkge1xuICAgIC8vIFJlZ3VsYXIgZXhwcmVzc2lvbiB0byBtYXRjaCBBTlNJIGVzY2FwZSBjb2Rlc1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb250cm9sLXJlZ2V4XG4gICAgY29uc3QgYW5zaVJlZ2V4ID0gL1xceDFCKD86W0AtWlxcXFwtX118XFxbWzAtP10qWyAtL10qW0Atfl0pL2c7XG4gICAgcmV0dXJuIHRleHQucmVwbGFjZShhbnNpUmVnZXgsICcnKTtcbn1cbi8qKlxuICogQGRlc2NyaXB0aW9uIEFwcGxpZXMgcmF3IEFOU0kgZXNjYXBlIGNvZGVzIHRvIHRleHQuXG4gKiBAc3VtbWFyeSBUaGlzIGZ1bmN0aW9uIHRha2VzIGEgc3RyaW5nIGFuZCBhIHJhdyBBTlNJIGVzY2FwZSBjb2RlLCBhbmQgcmV0dXJucyB0aGUgdGV4dFxuICogd3JhcHBlZCBpbiB0aGUgcHJvdmlkZWQgcmF3IEFOU0kgY29kZSBhbmQgdGhlIHJlc2V0IGNvZGUuIFRoaXMgYWxsb3dzIGZvciBhcHBseWluZyBjdXN0b21cbiAqIG9yIGNvbXBsZXggQU5TSSBmb3JtYXR0aW5nIHRoYXQgbWF5IG5vdCBiZSBjb3ZlcmVkIGJ5IG90aGVyIHV0aWxpdHkgZnVuY3Rpb25zLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gVGhlIHRleHQgdG8gYmUgZm9ybWF0dGVkLlxuICogQHBhcmFtIHtzdHJpbmd9IHJhdyAtIFRoZSByYXcgQU5TSSBlc2NhcGUgY29kZSB0byBiZSBhcHBsaWVkLlxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgdGV4dCB3cmFwcGVkIGluIHRoZSByYXcgQU5TSSBjb2RlIGFuZCB0aGUgcmVzZXQgY29kZS5cbiAqXG4gKiBAZnVuY3Rpb24gcmF3XG4gKiBAbWVtYmVyT2YgbW9kdWxlOlN0eWxlZFN0cmluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmF3KHRleHQsIHJhdykge1xuICAgIHJldHVybiBgJHtyYXd9JHt0ZXh0fSR7QW5zaVJlc2V0fWA7XG59XG4iLCJpbXBvcnQgeyBCcmlnaHRCYWNrZ3JvdW5kQ29sb3JzLCBCcmlnaHRGb3JlZ3JvdW5kQ29sb3JzLCBTdGFuZGFyZEJhY2tncm91bmRDb2xvcnMsIFN0YW5kYXJkRm9yZWdyb3VuZENvbG9ycywgc3R5bGVzLCB9IGZyb20gXCIuL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgY2xlYXIsIGNvbG9yaXplMjU2LCBjb2xvcml6ZUFOU0ksIGNvbG9yaXplUkdCLCByYXcsIGFwcGx5U3R5bGUsIH0gZnJvbSBcIi4vY29sb3JzLmpzXCI7XG4vKipcbiAqIEBjbGFzcyBTdHlsZWRTdHJpbmdcbiAqIEBkZXNjcmlwdGlvbiBBIGNsYXNzIHRoYXQgZXh0ZW5kcyBzdHJpbmcgZnVuY3Rpb25hbGl0eSB3aXRoIEFOU0kgY29sb3IgYW5kIHN0eWxlIG9wdGlvbnMuXG4gKiBAc3VtbWFyeSBTdHlsZWRTdHJpbmcgcHJvdmlkZXMgbWV0aG9kcyB0byBhcHBseSB2YXJpb3VzIEFOU0kgY29sb3IgYW5kIHN0eWxlIG9wdGlvbnMgdG8gdGV4dCBzdHJpbmdzLlxuICogSXQgaW1wbGVtZW50cyB0aGUgQ29sb3JpemVPcHRpb25zIGludGVyZmFjZSBhbmQgcHJveGllcyBuYXRpdmUgc3RyaW5nIG1ldGhvZHMgdG8gdGhlIHVuZGVybHlpbmcgdGV4dC5cbiAqIFRoaXMgY2xhc3MgYWxsb3dzIGZvciBjaGFpbmluZyBvZiBzdHlsaW5nIG1ldGhvZHMgYW5kIGVhc3kgYXBwbGljYXRpb24gb2YgY29sb3JzIGFuZCBzdHlsZXMgdG8gdGV4dC5cbiAqXG4gKiBAaW1wbGVtZW50cyB7Q29sb3JpemVPcHRpb25zfVxuICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBUaGUgaW5pdGlhbCB0ZXh0IHN0cmluZyB0byBiZSBzdHlsZWQuXG4gKi9cbmV4cG9ydCBjbGFzcyBTdHlsZWRTdHJpbmcge1xuICAgIGNvbnN0cnVjdG9yKHRleHQpIHtcbiAgICAgICAgdGhpcy50ZXh0ID0gdGV4dDtcbiAgICAgICAgLy8gQmFzaWMgY29sb3JzXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKFN0YW5kYXJkRm9yZWdyb3VuZENvbG9ycykuZm9yRWFjaCgoW25hbWUsIGNvZGVdKSA9PiB7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgbmFtZSwge1xuICAgICAgICAgICAgICAgIGdldDogKCkgPT4gdGhpcy5mb3JlZ3JvdW5kKGNvZGUpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3QuZW50cmllcyhCcmlnaHRGb3JlZ3JvdW5kQ29sb3JzKS5mb3JFYWNoKChbbmFtZSwgY29kZV0pID0+IHtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBuYW1lLCB7XG4gICAgICAgICAgICAgICAgZ2V0OiAoKSA9PiB0aGlzLmZvcmVncm91bmQoY29kZSksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIEJhY2tncm91bmQgY29sb3JzXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKFN0YW5kYXJkQmFja2dyb3VuZENvbG9ycykuZm9yRWFjaCgoW25hbWUsIGNvZGVdKSA9PiB7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgbmFtZSwge1xuICAgICAgICAgICAgICAgIGdldDogKCkgPT4gdGhpcy5iYWNrZ3JvdW5kKGNvZGUpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3QuZW50cmllcyhCcmlnaHRCYWNrZ3JvdW5kQ29sb3JzKS5mb3JFYWNoKChbbmFtZSwgY29kZV0pID0+IHtcbiAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBuYW1lLCB7XG4gICAgICAgICAgICAgICAgZ2V0OiAoKSA9PiB0aGlzLmJhY2tncm91bmQoY29kZSksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIFN0eWxlc1xuICAgICAgICBPYmplY3QuZW50cmllcyhzdHlsZXMpLmZvckVhY2goKFtuYW1lLCBjb2RlXSkgPT4ge1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIG5hbWUsIHtcbiAgICAgICAgICAgICAgICBnZXQ6ICgpID0+IHRoaXMuc3R5bGUoY29kZSksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDbGVhcnMgYWxsIHN0eWxpbmcgZnJvbSB0aGUgdGV4dC5cbiAgICAgKiBAc3VtbWFyeSBSZW1vdmVzIGFsbCBBTlNJIGNvbG9yIGFuZCBzdHlsZSBjb2RlcyBmcm9tIHRoZSB0ZXh0LlxuICAgICAqIEByZXR1cm4ge1N0eWxlZFN0cmluZ30gVGhlIFN0eWxlZFN0cmluZyBpbnN0YW5jZSB3aXRoIGNsZWFyZWQgc3R5bGluZy5cbiAgICAgKi9cbiAgICBjbGVhcigpIHtcbiAgICAgICAgdGhpcy50ZXh0ID0gY2xlYXIodGhpcy50ZXh0KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBBcHBsaWVzIHJhdyBBTlNJIGNvZGVzIHRvIHRoZSB0ZXh0LlxuICAgICAqIEBzdW1tYXJ5IEFsbG93cyBkaXJlY3QgYXBwbGljYXRpb24gb2YgQU5TSSBlc2NhcGUgc2VxdWVuY2VzIHRvIHRoZSB0ZXh0LlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSByYXdBbnNpIC0gVGhlIHJhdyBBTlNJIGVzY2FwZSBzZXF1ZW5jZSB0byBhcHBseS5cbiAgICAgKiBAcmV0dXJuIHtTdHlsZWRTdHJpbmd9IFRoZSBTdHlsZWRTdHJpbmcgaW5zdGFuY2Ugd2l0aCB0aGUgcmF3IEFOU0kgY29kZSBhcHBsaWVkLlxuICAgICAqL1xuICAgIHJhdyhyYXdBbnNpKSB7XG4gICAgICAgIHRoaXMudGV4dCA9IHJhdyh0aGlzLnRleHQsIHJhd0Fuc2kpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEFwcGxpZXMgYSBmb3JlZ3JvdW5kIGNvbG9yIHRvIHRoZSB0ZXh0LlxuICAgICAqIEBzdW1tYXJ5IFNldHMgdGhlIHRleHQgY29sb3IgdXNpbmcgQU5TSSBjb2xvciBjb2Rlcy5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbiAtIFRoZSBBTlNJIGNvbG9yIGNvZGUgZm9yIHRoZSBmb3JlZ3JvdW5kIGNvbG9yLlxuICAgICAqIEByZXR1cm4ge1N0eWxlZFN0cmluZ30gVGhlIFN0eWxlZFN0cmluZyBpbnN0YW5jZSB3aXRoIHRoZSBmb3JlZ3JvdW5kIGNvbG9yIGFwcGxpZWQuXG4gICAgICovXG4gICAgZm9yZWdyb3VuZChuKSB7XG4gICAgICAgIHRoaXMudGV4dCA9IGNvbG9yaXplQU5TSSh0aGlzLnRleHQsIG4pO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEFwcGxpZXMgYSBiYWNrZ3JvdW5kIGNvbG9yIHRvIHRoZSB0ZXh0LlxuICAgICAqIEBzdW1tYXJ5IFNldHMgdGhlIGJhY2tncm91bmQgY29sb3Igb2YgdGhlIHRleHQgdXNpbmcgQU5TSSBjb2xvciBjb2Rlcy5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbiAtIFRoZSBBTlNJIGNvbG9yIGNvZGUgZm9yIHRoZSBiYWNrZ3JvdW5kIGNvbG9yLlxuICAgICAqIEByZXR1cm4ge1N0eWxlZFN0cmluZ30gVGhlIFN0eWxlZFN0cmluZyBpbnN0YW5jZSB3aXRoIHRoZSBiYWNrZ3JvdW5kIGNvbG9yIGFwcGxpZWQuXG4gICAgICovXG4gICAgYmFja2dyb3VuZChuKSB7XG4gICAgICAgIHRoaXMudGV4dCA9IGNvbG9yaXplQU5TSSh0aGlzLnRleHQsIG4sIHRydWUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEFwcGxpZXMgYSB0ZXh0IHN0eWxlIHRvIHRoZSBzdHJpbmcuXG4gICAgICogQHN1bW1hcnkgU2V0cyB0ZXh0IHN0eWxlcyBzdWNoIGFzIGJvbGQsIGl0YWxpYywgb3IgdW5kZXJsaW5lIHVzaW5nIEFOU0kgc3R5bGUgY29kZXMuXG4gICAgICogQHBhcmFtIHtudW1iZXIgfCBzdHJpbmd9IG4gLSBUaGUgc3R5bGUgY29kZSBvciBrZXkgZnJvbSB0aGUgc3R5bGVzIG9iamVjdC5cbiAgICAgKiBAcmV0dXJuIHtTdHlsZWRTdHJpbmd9IFRoZSBTdHlsZWRTdHJpbmcgaW5zdGFuY2Ugd2l0aCB0aGUgc3R5bGUgYXBwbGllZC5cbiAgICAgKi9cbiAgICBzdHlsZShuKSB7XG4gICAgICAgIGlmICh0eXBlb2YgbiA9PT0gXCJzdHJpbmdcIiAmJiAhKG4gaW4gc3R5bGVzKSkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKGBJbnZhbGlkIHN0eWxlOiAke259YCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRleHQgPSBhcHBseVN0eWxlKHRoaXMudGV4dCwgbik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQXBwbGllcyBhIDI1Ni1jb2xvciBmb3JlZ3JvdW5kIGNvbG9yIHRvIHRoZSB0ZXh0LlxuICAgICAqIEBzdW1tYXJ5IFNldHMgdGhlIHRleHQgY29sb3IgdXNpbmcgdGhlIGV4dGVuZGVkIDI1Ni1jb2xvciBwYWxldHRlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBuIC0gVGhlIGNvbG9yIG51bWJlciBmcm9tIHRoZSAyNTYtY29sb3IgcGFsZXR0ZS5cbiAgICAgKiBAcmV0dXJuIHtTdHlsZWRTdHJpbmd9IFRoZSBTdHlsZWRTdHJpbmcgaW5zdGFuY2Ugd2l0aCB0aGUgMjU2LWNvbG9yIGZvcmVncm91bmQgYXBwbGllZC5cbiAgICAgKi9cbiAgICBjb2xvcjI1NihuKSB7XG4gICAgICAgIHRoaXMudGV4dCA9IGNvbG9yaXplMjU2KHRoaXMudGV4dCwgbik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQXBwbGllcyBhIDI1Ni1jb2xvciBiYWNrZ3JvdW5kIGNvbG9yIHRvIHRoZSB0ZXh0LlxuICAgICAqIEBzdW1tYXJ5IFNldHMgdGhlIGJhY2tncm91bmQgY29sb3IgdXNpbmcgdGhlIGV4dGVuZGVkIDI1Ni1jb2xvciBwYWxldHRlLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBuIC0gVGhlIGNvbG9yIG51bWJlciBmcm9tIHRoZSAyNTYtY29sb3IgcGFsZXR0ZS5cbiAgICAgKiBAcmV0dXJuIHtTdHlsZWRTdHJpbmd9IFRoZSBTdHlsZWRTdHJpbmcgaW5zdGFuY2Ugd2l0aCB0aGUgMjU2LWNvbG9yIGJhY2tncm91bmQgYXBwbGllZC5cbiAgICAgKi9cbiAgICBiZ0NvbG9yMjU2KG4pIHtcbiAgICAgICAgdGhpcy50ZXh0ID0gY29sb3JpemUyNTYodGhpcy50ZXh0LCBuLCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBBcHBsaWVzIGFuIFJHQiBmb3JlZ3JvdW5kIGNvbG9yIHRvIHRoZSB0ZXh0LlxuICAgICAqIEBzdW1tYXJ5IFNldHMgdGhlIHRleHQgY29sb3IgdXNpbmcgUkdCIHZhbHVlcy5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gciAtIFRoZSByZWQgY29tcG9uZW50ICgwLTI1NSkuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGcgLSBUaGUgZ3JlZW4gY29tcG9uZW50ICgwLTI1NSkuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGIgLSBUaGUgYmx1ZSBjb21wb25lbnQgKDAtMjU1KS5cbiAgICAgKiBAcmV0dXJuIHtTdHlsZWRTdHJpbmd9IFRoZSBTdHlsZWRTdHJpbmcgaW5zdGFuY2Ugd2l0aCB0aGUgUkdCIGZvcmVncm91bmQgY29sb3IgYXBwbGllZC5cbiAgICAgKi9cbiAgICByZ2IociwgZywgYikge1xuICAgICAgICB0aGlzLnRleHQgPSBjb2xvcml6ZVJHQih0aGlzLnRleHQsIHIsIGcsIGIpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEFwcGxpZXMgYW4gUkdCIGJhY2tncm91bmQgY29sb3IgdG8gdGhlIHRleHQuXG4gICAgICogQHN1bW1hcnkgU2V0cyB0aGUgYmFja2dyb3VuZCBjb2xvciB1c2luZyBSR0IgdmFsdWVzLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSByIC0gVGhlIHJlZCBjb21wb25lbnQgKDAtMjU1KS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gZyAtIFRoZSBncmVlbiBjb21wb25lbnQgKDAtMjU1KS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gYiAtIFRoZSBibHVlIGNvbXBvbmVudCAoMC0yNTUpLlxuICAgICAqIEByZXR1cm4ge1N0eWxlZFN0cmluZ30gVGhlIFN0eWxlZFN0cmluZyBpbnN0YW5jZSB3aXRoIHRoZSBSR0IgYmFja2dyb3VuZCBjb2xvciBhcHBsaWVkLlxuICAgICAqL1xuICAgIGJnUmdiKHIsIGcsIGIpIHtcbiAgICAgICAgdGhpcy50ZXh0ID0gY29sb3JpemVSR0IodGhpcy50ZXh0LCByLCBnLCBiLCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDb252ZXJ0cyB0aGUgU3R5bGVkU3RyaW5nIHRvIGEgcmVndWxhciBzdHJpbmcuXG4gICAgICogQHN1bW1hcnkgUmV0dXJucyB0aGUgdW5kZXJseWluZyB0ZXh0IHdpdGggYWxsIGFwcGxpZWQgc3R5bGluZy5cbiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBzdHlsZWQgdGV4dCBhcyBhIHJlZ3VsYXIgc3RyaW5nLlxuICAgICAqL1xuICAgIHRvU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50ZXh0O1xuICAgIH1cbn1cbi8qKlxuICogQGRlc2NyaXB0aW9uIEFwcGxpZXMgc3R5bGluZyB0byBhIGdpdmVuIHRleHQgc3RyaW5nLlxuICogQHN1bW1hcnkgVGhpcyBmdW5jdGlvbiB0YWtlcyBhIHN0cmluZyBhbmQgcmV0dXJucyBhIFN0eWxlZFN0cmluZyBvYmplY3QsIHdoaWNoIGlzIGFuIGVuaGFuY2VkXG4gKiB2ZXJzaW9uIG9mIHRoZSBvcmlnaW5hbCBzdHJpbmcgd2l0aCBhZGRpdGlvbmFsIG1ldGhvZHMgZm9yIGFwcGx5aW5nIHZhcmlvdXMgQU5TSSBjb2xvciBhbmQgc3R5bGVcbiAqIG9wdGlvbnMuIEl0IHNldHMgdXAgYSBtYXBwZXIgb2JqZWN0IHdpdGggbWV0aG9kcyBmb3IgZGlmZmVyZW50IHN0eWxpbmcgb3BlcmF0aW9ucyBhbmQgdGhlblxuICogZGVmaW5lcyBwcm9wZXJ0aWVzIG9uIHRoZSB0ZXh0IHN0cmluZyB0byBtYWtlIHRoZXNlIG1ldGhvZHMgYWNjZXNzaWJsZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSB0ICBUaGUgaW5wdXQgdGV4dCB0byBiZSBzdHlsZWQuXG4gKiBAcmV0dXJuIHtTdHlsZWRTdHJpbmd9IEEgU3R5bGVkU3RyaW5nIG9iamVjdCB3aXRoIGFkZGl0aW9uYWwgc3R5bGluZyBtZXRob2RzLlxuICpcbiAqIEBmdW5jdGlvbiBzdHlsZVxuICpcbiAqIEBtZW1iZXJPZiBTdHlsZWRTdHJpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0eWxlKC4uLnQpIHtcbiAgICByZXR1cm4gbmV3IFN0eWxlZFN0cmluZyh0LmpvaW4oXCIgXCIpKTtcbn1cbiIsImltcG9ydCB7IHN0eWxlIH0gZnJvbSBcInN0eWxlZC1zdHJpbmctYnVpbGRlclwiO1xuaW1wb3J0IHsgRGVmYXVsdExvZ2dpbmdDb25maWcsIERlZmF1bHRUaGVtZSwgTG9nTGV2ZWwsIE51bWVyaWNMb2dMZXZlbHMsIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG4vKipcbiAqIEBkZXNjcmlwdGlvbiBBIG1pbmltYWwgbG9nZ2VyIGltcGxlbWVudGF0aW9uLlxuICogQHN1bW1hcnkgTWluaUxvZ2dlciBpcyBhIGxpZ2h0d2VpZ2h0IGxvZ2dpbmcgY2xhc3MgdGhhdCBpbXBsZW1lbnRzIHRoZSBMb2dnZXIgaW50ZXJmYWNlLlxuICogSXQgcHJvdmlkZXMgYmFzaWMgbG9nZ2luZyBmdW5jdGlvbmFsaXR5IHdpdGggc3VwcG9ydCBmb3IgZGlmZmVyZW50IGxvZyBsZXZlbHMsIHZlcmJvc2l0eSxcbiAqIGNvbnRleHQtYXdhcmUgbG9nZ2luZywgYW5kIGN1c3RvbWl6YWJsZSBmb3JtYXR0aW5nLlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbnRleHQgLSBUaGUgY29udGV4dCAodHlwaWNhbGx5IGNsYXNzIG5hbWUpIHRoaXMgbG9nZ2VyIGlzIGFzc29jaWF0ZWQgd2l0aFxuICogQHBhcmFtIHtQYXJ0aWFsPExvZ2dpbmdDb25maWc+fSBjb25mIC0gT3B0aW9uYWwgY29uZmlndXJhdGlvbiB0byBvdmVycmlkZSBnbG9iYWwgc2V0dGluZ3NcbiAqIEBjbGFzcyBNaW5pTG9nZ2VyXG4gKiBAZXhhbXBsZVxuICogLy8gQ3JlYXRlIGEgbmV3IGxvZ2dlciBmb3IgYSBjbGFzc1xuICogY29uc3QgbG9nZ2VyID0gbmV3IE1pbmlMb2dnZXIoJ015Q2xhc3MnKTtcbiAqXG4gKiAvLyBMb2cgbWVzc2FnZXMgYXQgZGlmZmVyZW50IGxldmVsc1xuICogbG9nZ2VyLmluZm8oJ1RoaXMgaXMgYW4gaW5mbyBtZXNzYWdlJyk7XG4gKiBsb2dnZXIuZGVidWcoJ1RoaXMgaXMgYSBkZWJ1ZyBtZXNzYWdlJyk7XG4gKiBsb2dnZXIuZXJyb3IoJ1NvbWV0aGluZyB3ZW50IHdyb25nJyk7XG4gKlxuICogLy8gQ3JlYXRlIGEgY2hpbGQgbG9nZ2VyIGZvciBhIHNwZWNpZmljIG1ldGhvZFxuICogY29uc3QgbWV0aG9kTG9nZ2VyID0gbG9nZ2VyLmZvcignbXlNZXRob2QnKTtcbiAqIG1ldGhvZExvZ2dlci52ZXJib3NlKCdEZXRhaWxlZCBpbmZvcm1hdGlvbicsIDIpO1xuICpcbiAqIC8vIExvZyB3aXRoIGN1c3RvbSBjb25maWd1cmF0aW9uXG4gKiBsb2dnZXIuZm9yKCdzcGVjaWFsTWV0aG9kJywgeyBzdHlsZTogdHJ1ZSB9KS5pbmZvKCdTdHlsZWQgbWVzc2FnZScpO1xuICovXG5leHBvcnQgY2xhc3MgTWluaUxvZ2dlciB7XG4gICAgY29uc3RydWN0b3IoY29udGV4dCwgY29uZikge1xuICAgICAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICAgICAgICB0aGlzLmNvbmYgPSBjb25mO1xuICAgIH1cbiAgICBjb25maWcoa2V5KSB7XG4gICAgICAgIGlmICh0aGlzLmNvbmYgJiYga2V5IGluIHRoaXMuY29uZilcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbmZba2V5XTtcbiAgICAgICAgcmV0dXJuIExvZ2dpbmcuZ2V0Q29uZmlnKClba2V5XTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENyZWF0ZXMgYSBjaGlsZCBsb2dnZXIgZm9yIGEgc3BlY2lmaWMgbWV0aG9kIG9yIGNvbnRleHRcbiAgICAgKiBAc3VtbWFyeSBSZXR1cm5zIGEgbmV3IGxvZ2dlciBpbnN0YW5jZSB3aXRoIHRoZSBjdXJyZW50IGNvbnRleHQgZXh0ZW5kZWQgYnkgdGhlIHNwZWNpZmllZCBtZXRob2QgbmFtZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nIHwgRnVuY3Rpb259IG1ldGhvZCAtIFRoZSBtZXRob2QgbmFtZSBvciBmdW5jdGlvbiB0byBjcmVhdGUgYSBsb2dnZXIgZm9yXG4gICAgICogQHBhcmFtIHtQYXJ0aWFsPExvZ2dpbmdDb25maWc+fSBjb25maWcgLSBPcHRpb25hbCBjb25maWd1cmF0aW9uIHRvIG92ZXJyaWRlIHNldHRpbmdzXG4gICAgICogQHBhcmFtIHsuLi5hbnl9IGFyZ3MgLSBBZGRpdGlvbmFsIGFyZ3VtZW50cyB0byBwYXNzIHRvIHRoZSBsb2dnZXIgZmFjdG9yeVxuICAgICAqIEByZXR1cm4ge0xvZ2dlcn0gQSBuZXcgbG9nZ2VyIGluc3RhbmNlIGZvciB0aGUgc3BlY2lmaWVkIG1ldGhvZFxuICAgICAqL1xuICAgIGZvcihtZXRob2QsIGNvbmZpZykge1xuICAgICAgICBtZXRob2QgPSBtZXRob2RcbiAgICAgICAgICAgID8gdHlwZW9mIG1ldGhvZCA9PT0gXCJzdHJpbmdcIlxuICAgICAgICAgICAgICAgID8gbWV0aG9kXG4gICAgICAgICAgICAgICAgOiBtZXRob2QubmFtZVxuICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiBuZXcgUHJveHkodGhpcywge1xuICAgICAgICAgICAgZ2V0OiAodGFyZ2V0LCBwLCByZWNlaXZlcikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IFJlZmxlY3QuZ2V0KHRhcmdldCwgcCwgcmVjZWl2ZXIpO1xuICAgICAgICAgICAgICAgIGlmIChwID09PSBcImNvbmZpZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJveHkodGhpcy5jb25maWcsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldDogKHRhcmdldCwgcCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25maWcgJiYgcCBpbiBjb25maWcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb25maWdbcF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJlZmxlY3QuZ2V0KHRhcmdldCwgcCwgcmVjZWl2ZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChwID09PSBcImNvbnRleHRcIikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gW3Jlc3VsdCwgbWV0aG9kXS5qb2luKFwiLlwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhIGZvcm1hdHRlZCBsb2cgc3RyaW5nXG4gICAgICogQHN1bW1hcnkgR2VuZXJhdGVzIGEgbG9nIHN0cmluZyB3aXRoIHRpbWVzdGFtcCwgY29sb3JlZCBsb2cgbGV2ZWwsIGNvbnRleHQsIGFuZCBtZXNzYWdlXG4gICAgICogQHBhcmFtIHtMb2dMZXZlbH0gbGV2ZWwgLSBUaGUgbG9nIGxldmVsIGZvciB0aGlzIG1lc3NhZ2VcbiAgICAgKiBAcGFyYW0ge1N0cmluZ0xpa2UgfCBFcnJvcn0gbWVzc2FnZSAtIFRoZSBtZXNzYWdlIHRvIGxvZyBvciBhbiBFcnJvciBvYmplY3RcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0YWNrXSAtIE9wdGlvbmFsIHN0YWNrIHRyYWNlIHRvIGluY2x1ZGUgaW4gdGhlIGxvZ1xuICAgICAqIEByZXR1cm4ge3N0cmluZ30gQSBmb3JtYXR0ZWQgbG9nIHN0cmluZyB3aXRoIGFsbCBjb21wb25lbnRzXG4gICAgICovXG4gICAgY3JlYXRlTG9nKGxldmVsLCBtZXNzYWdlLCBzdGFjaykge1xuICAgICAgICBjb25zdCBsb2cgPSBbXTtcbiAgICAgICAgY29uc3Qgc3R5bGUgPSB0aGlzLmNvbmZpZyhcInN0eWxlXCIpO1xuICAgICAgICBpZiAodGhpcy5jb25maWcoXCJ0aW1lc3RhbXBcIikpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk7XG4gICAgICAgICAgICBjb25zdCB0aW1lc3RhbXAgPSBzdHlsZSA/IExvZ2dpbmcudGhlbWUoZGF0ZSwgXCJ0aW1lc3RhbXBcIiwgbGV2ZWwpIDogZGF0ZTtcbiAgICAgICAgICAgIGxvZy5wdXNoKHRpbWVzdGFtcCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY29uZmlnKFwibG9nTGV2ZWxcIikpIHtcbiAgICAgICAgICAgIGNvbnN0IGx2bCA9IHN0eWxlXG4gICAgICAgICAgICAgICAgPyBMb2dnaW5nLnRoZW1lKGxldmVsLCBcImxvZ0xldmVsXCIsIGxldmVsKVxuICAgICAgICAgICAgICAgIDogbGV2ZWw7XG4gICAgICAgICAgICBsb2cucHVzaChsdmwpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmNvbmZpZyhcImNvbnRleHRcIikpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSBzdHlsZVxuICAgICAgICAgICAgICAgID8gTG9nZ2luZy50aGVtZSh0aGlzLmNvbnRleHQsIFwiY2xhc3NcIiwgbGV2ZWwpXG4gICAgICAgICAgICAgICAgOiB0aGlzLmNvbnRleHQ7XG4gICAgICAgICAgICBsb2cucHVzaChjb250ZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5jb25maWcoXCJjb3JyZWxhdGlvbklkXCIpKSB7XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29uc3QgaWQgPSBzdHlsZVxuICAgICAgICAgICAgICAgICAgICA/IExvZ2dpbmcudGhlbWUodGhpcy5jb25maWcoXCJjb3JyZWxhdGlvbklkXCIpLnRvU3RyaW5nKCksIFwiaWRcIiwgbGV2ZWwpXG4gICAgICAgICAgICAgICAgICAgIDogdGhpcy5jb25maWcoXCJjb3JyZWxhdGlvbklkXCIpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgbG9nLnB1c2goaWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1zZyA9IHN0eWxlXG4gICAgICAgICAgICA/IExvZ2dpbmcudGhlbWUodHlwZW9mIG1lc3NhZ2UgPT09IFwic3RyaW5nXCIgPyBtZXNzYWdlIDogbWVzc2FnZS5tZXNzYWdlLCBcIm1lc3NhZ2VcIiwgbGV2ZWwpXG4gICAgICAgICAgICA6IHR5cGVvZiBtZXNzYWdlID09PSBcInN0cmluZ1wiXG4gICAgICAgICAgICAgICAgPyBtZXNzYWdlXG4gICAgICAgICAgICAgICAgOiBtZXNzYWdlLm1lc3NhZ2U7XG4gICAgICAgIGxvZy5wdXNoKG1zZyk7XG4gICAgICAgIGlmIChzdGFjayB8fCBtZXNzYWdlIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgIHN0YWNrID0gc3R5bGVcbiAgICAgICAgICAgICAgICA/IExvZ2dpbmcudGhlbWUoKHN0YWNrIHx8IG1lc3NhZ2Uuc3RhY2spLCBcInN0YWNrXCIsIGxldmVsKVxuICAgICAgICAgICAgICAgIDogc3RhY2s7XG4gICAgICAgICAgICBsb2cucHVzaChgXFxuU3RhY2sgdHJhY2U6XFxuJHtzdGFja31gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbG9nLmpvaW4odGhpcy5jb25maWcoXCJzZXBhcmF0b3JcIikpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gTG9ncyBhIG1lc3NhZ2Ugd2l0aCB0aGUgc3BlY2lmaWVkIGxvZyBsZXZlbFxuICAgICAqIEBzdW1tYXJ5IENoZWNrcyBpZiB0aGUgbWVzc2FnZSBzaG91bGQgYmUgbG9nZ2VkIGJhc2VkIG9uIHRoZSBjdXJyZW50IGxvZyBsZXZlbCxcbiAgICAgKiB0aGVuIHVzZXMgdGhlIGFwcHJvcHJpYXRlIGNvbnNvbGUgbWV0aG9kIHRvIG91dHB1dCB0aGUgZm9ybWF0dGVkIGxvZ1xuICAgICAqIEBwYXJhbSB7TG9nTGV2ZWx9IGxldmVsIC0gVGhlIGxvZyBsZXZlbCBvZiB0aGUgbWVzc2FnZVxuICAgICAqIEBwYXJhbSB7U3RyaW5nTGlrZSB8IEVycm9yfSBtc2cgLSBUaGUgbWVzc2FnZSB0byBiZSBsb2dnZWQgb3IgYW4gRXJyb3Igb2JqZWN0XG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtzdGFja10gLSBPcHRpb25hbCBzdGFjayB0cmFjZSB0byBpbmNsdWRlIGluIHRoZSBsb2dcbiAgICAgKiBAcmV0dXJuIHt2b2lkfVxuICAgICAqL1xuICAgIGxvZyhsZXZlbCwgbXNnLCBzdGFjaykge1xuICAgICAgICBpZiAoTnVtZXJpY0xvZ0xldmVsc1t0aGlzLmNvbmZpZyhcImxldmVsXCIpXSA8XG4gICAgICAgICAgICBOdW1lcmljTG9nTGV2ZWxzW2xldmVsXSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgbGV0IG1ldGhvZDtcbiAgICAgICAgc3dpdGNoIChsZXZlbCkge1xuICAgICAgICAgICAgY2FzZSBMb2dMZXZlbC5pbmZvOlxuICAgICAgICAgICAgICAgIG1ldGhvZCA9IGNvbnNvbGUubG9nO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBMb2dMZXZlbC52ZXJib3NlOlxuICAgICAgICAgICAgY2FzZSBMb2dMZXZlbC5kZWJ1ZzpcbiAgICAgICAgICAgICAgICBtZXRob2QgPSBjb25zb2xlLmRlYnVnO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBMb2dMZXZlbC5lcnJvcjpcbiAgICAgICAgICAgICAgICBtZXRob2QgPSBjb25zb2xlLmVycm9yO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGxvZyBsZXZlbFwiKTtcbiAgICAgICAgfVxuICAgICAgICBtZXRob2QodGhpcy5jcmVhdGVMb2cobGV2ZWwsIG1zZywgc3RhY2spKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIExvZ3MgYSBtZXNzYWdlIGF0IHRoZSBzaWxseSBsZXZlbFxuICAgICAqIEBzdW1tYXJ5IExvZ3MgYSBtZXNzYWdlIGF0IHRoZSBzaWxseSBsZXZlbCBpZiB0aGUgY3VycmVudCB2ZXJib3NpdHkgc2V0dGluZyBhbGxvd3MgaXRcbiAgICAgKiBAcGFyYW0ge1N0cmluZ0xpa2V9IG1zZyAtIFRoZSBtZXNzYWdlIHRvIGJlIGxvZ2dlZFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbdmVyYm9zaXR5PTBdIC0gVGhlIHZlcmJvc2l0eSBsZXZlbCBvZiB0aGUgbWVzc2FnZVxuICAgICAqIEByZXR1cm4ge3ZvaWR9XG4gICAgICovXG4gICAgc2lsbHkobXNnLCB2ZXJib3NpdHkgPSAwKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbmZpZyhcInZlcmJvc2VcIikgPj0gdmVyYm9zaXR5KVxuICAgICAgICAgICAgdGhpcy5sb2coTG9nTGV2ZWwudmVyYm9zZSwgbXNnKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIExvZ3MgYSBtZXNzYWdlIGF0IHRoZSB2ZXJib3NlIGxldmVsXG4gICAgICogQHN1bW1hcnkgTG9ncyBhIG1lc3NhZ2UgYXQgdGhlIHZlcmJvc2UgbGV2ZWwgaWYgdGhlIGN1cnJlbnQgdmVyYm9zaXR5IHNldHRpbmcgYWxsb3dzIGl0XG4gICAgICogQHBhcmFtIHtTdHJpbmdMaWtlfSBtc2cgLSBUaGUgbWVzc2FnZSB0byBiZSBsb2dnZWRcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW3ZlcmJvc2l0eT0wXSAtIFRoZSB2ZXJib3NpdHkgbGV2ZWwgb2YgdGhlIG1lc3NhZ2VcbiAgICAgKiBAcmV0dXJuIHt2b2lkfVxuICAgICAqL1xuICAgIHZlcmJvc2UobXNnLCB2ZXJib3NpdHkgPSAwKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbmZpZyhcInZlcmJvc2VcIikgPj0gdmVyYm9zaXR5KVxuICAgICAgICAgICAgdGhpcy5sb2coTG9nTGV2ZWwudmVyYm9zZSwgbXNnKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIExvZ3MgYSBtZXNzYWdlIGF0IHRoZSBpbmZvIGxldmVsXG4gICAgICogQHN1bW1hcnkgTG9ncyBhIG1lc3NhZ2UgYXQgdGhlIGluZm8gbGV2ZWwgZm9yIGdlbmVyYWwgYXBwbGljYXRpb24gaW5mb3JtYXRpb25cbiAgICAgKiBAcGFyYW0ge1N0cmluZ0xpa2V9IG1zZyAtIFRoZSBtZXNzYWdlIHRvIGJlIGxvZ2dlZFxuICAgICAqIEByZXR1cm4ge3ZvaWR9XG4gICAgICovXG4gICAgaW5mbyhtc2cpIHtcbiAgICAgICAgdGhpcy5sb2coTG9nTGV2ZWwuaW5mbywgbXNnKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIExvZ3MgYSBtZXNzYWdlIGF0IHRoZSBkZWJ1ZyBsZXZlbFxuICAgICAqIEBzdW1tYXJ5IExvZ3MgYSBtZXNzYWdlIGF0IHRoZSBkZWJ1ZyBsZXZlbCBmb3IgZGV0YWlsZWQgdHJvdWJsZXNob290aW5nIGluZm9ybWF0aW9uXG4gICAgICogQHBhcmFtIHtTdHJpbmdMaWtlfSBtc2cgLSBUaGUgbWVzc2FnZSB0byBiZSBsb2dnZWRcbiAgICAgKiBAcmV0dXJuIHt2b2lkfVxuICAgICAqL1xuICAgIGRlYnVnKG1zZykge1xuICAgICAgICB0aGlzLmxvZyhMb2dMZXZlbC5kZWJ1ZywgbXNnKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIExvZ3MgYSBtZXNzYWdlIGF0IHRoZSBlcnJvciBsZXZlbFxuICAgICAqIEBzdW1tYXJ5IExvZ3MgYSBtZXNzYWdlIGF0IHRoZSBlcnJvciBsZXZlbCBmb3IgZXJyb3JzIGFuZCBleGNlcHRpb25zXG4gICAgICogQHBhcmFtIHtTdHJpbmdMaWtlIHwgRXJyb3J9IG1zZyAtIFRoZSBtZXNzYWdlIHRvIGJlIGxvZ2dlZCBvciBhbiBFcnJvciBvYmplY3RcbiAgICAgKiBAcmV0dXJuIHt2b2lkfVxuICAgICAqL1xuICAgIGVycm9yKG1zZykge1xuICAgICAgICB0aGlzLmxvZyhMb2dMZXZlbC5lcnJvciwgbXNnKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFVwZGF0ZXMgdGhlIGxvZ2dlciBjb25maWd1cmF0aW9uXG4gICAgICogQHN1bW1hcnkgTWVyZ2VzIHRoZSBwcm92aWRlZCBjb25maWd1cmF0aW9uIHdpdGggdGhlIGV4aXN0aW5nIGNvbmZpZ3VyYXRpb25cbiAgICAgKiBAcGFyYW0ge1BhcnRpYWw8TG9nZ2luZ0NvbmZpZz59IGNvbmZpZyAtIFRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gYXBwbHlcbiAgICAgKiBAcmV0dXJuIHt2b2lkfVxuICAgICAqL1xuICAgIHNldENvbmZpZyhjb25maWcpIHtcbiAgICAgICAgdGhpcy5jb25mID0geyAuLi4odGhpcy5jb25mIHx8IHt9KSwgLi4uY29uZmlnIH07XG4gICAgfVxufVxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQSBzdGF0aWMgY2xhc3MgZm9yIG1hbmFnaW5nIGxvZ2dpbmcgb3BlcmF0aW9uc1xuICogQHN1bW1hcnkgVGhlIExvZ2dpbmcgY2xhc3MgcHJvdmlkZXMgYSBjZW50cmFsaXplZCBsb2dnaW5nIG1lY2hhbmlzbSB3aXRoIHN1cHBvcnQgZm9yXG4gKiBkaWZmZXJlbnQgbG9nIGxldmVscywgdmVyYm9zaXR5LCBhbmQgc3R5bGluZy4gSXQgdXNlcyBhIHNpbmdsZXRvbiBwYXR0ZXJuIHRvIG1haW50YWluIGEgZ2xvYmFsXG4gKiBsb2dnZXIgaW5zdGFuY2UgYW5kIGFsbG93cyBjcmVhdGluZyBzcGVjaWZpYyBsb2dnZXJzIGZvciBkaWZmZXJlbnQgY2xhc3NlcyBhbmQgbWV0aG9kcy5cbiAqIEBjbGFzcyBMb2dnaW5nXG4gKiBAZXhhbXBsZVxuICogLy8gU2V0IGdsb2JhbCBjb25maWd1cmF0aW9uXG4gKiBMb2dnaW5nLnNldENvbmZpZyh7IGxldmVsOiBMb2dMZXZlbC5kZWJ1Zywgc3R5bGU6IHRydWUgfSk7XG4gKlxuICogLy8gR2V0IGEgbG9nZ2VyIGZvciBhIHNwZWNpZmljIGNsYXNzXG4gKiBjb25zdCBsb2dnZXIgPSBMb2dnaW5nLmZvcignTXlDbGFzcycpO1xuICpcbiAqIC8vIExvZyBtZXNzYWdlcyBhdCBkaWZmZXJlbnQgbGV2ZWxzXG4gKiBsb2dnZXIuaW5mbygnQXBwbGljYXRpb24gc3RhcnRlZCcpO1xuICogbG9nZ2VyLmRlYnVnKCdQcm9jZXNzaW5nIGRhdGEuLi4nKTtcbiAqXG4gKiAvLyBMb2cgd2l0aCBjb250ZXh0XG4gKiBjb25zdCBtZXRob2RMb2dnZXIgPSBMb2dnaW5nLmZvcignTXlDbGFzcy5teU1ldGhvZCcpO1xuICogbWV0aG9kTG9nZ2VyLnZlcmJvc2UoJ0RldGFpbGVkIG9wZXJhdGlvbiBpbmZvcm1hdGlvbicsIDEpO1xuICpcbiAqIC8vIExvZyBlcnJvcnNcbiAqIHRyeSB7XG4gKiAgIC8vIHNvbWUgb3BlcmF0aW9uXG4gKiB9IGNhdGNoIChlcnJvcikge1xuICogICBsb2dnZXIuZXJyb3IoZXJyb3IpO1xuICogfVxuICogQG1lcm1haWRcbiAqIGNsYXNzRGlhZ3JhbVxuICogICBjbGFzcyBMb2dnZXIge1xuICogICAgIDw8aW50ZXJmYWNlPj5cbiAqICAgICArZm9yKG1ldGhvZCwgY29uZmlnLCAuLi5hcmdzKVxuICogICAgICtzaWxseShtc2csIHZlcmJvc2l0eSlcbiAqICAgICArdmVyYm9zZShtc2csIHZlcmJvc2l0eSlcbiAqICAgICAraW5mbyhtc2cpXG4gKiAgICAgK2RlYnVnKG1zZylcbiAqICAgICArZXJyb3IobXNnKVxuICogICAgICtzZXRDb25maWcoY29uZmlnKVxuICogICB9XG4gKlxuICogICBjbGFzcyBMb2dnaW5nIHtcbiAqICAgICAtZ2xvYmFsOiBMb2dnZXJcbiAqICAgICAtX2ZhY3Rvcnk6IExvZ2dlckZhY3RvcnlcbiAqICAgICAtX2NvbmZpZzogTG9nZ2luZ0NvbmZpZ1xuICogICAgICtzZXRGYWN0b3J5KGZhY3RvcnkpXG4gKiAgICAgK3NldENvbmZpZyhjb25maWcpXG4gKiAgICAgK2dldENvbmZpZygpXG4gKiAgICAgK2dldCgpXG4gKiAgICAgK3ZlcmJvc2UobXNnLCB2ZXJib3NpdHkpXG4gKiAgICAgK2luZm8obXNnKVxuICogICAgICtkZWJ1Zyhtc2cpXG4gKiAgICAgK3NpbGx5KG1zZylcbiAqICAgICArZXJyb3IobXNnKVxuICogICAgICtmb3Iob2JqZWN0LCBjb25maWcsIC4uLmFyZ3MpXG4gKiAgICAgK2JlY2F1c2UocmVhc29uLCBpZClcbiAqICAgICArdGhlbWUodGV4dCwgdHlwZSwgbG9nZ2VyTGV2ZWwsIHRlbXBsYXRlKVxuICogICB9XG4gKlxuICogICBjbGFzcyBNaW5pTG9nZ2VyIHtcbiAqICAgICArY29uc3RydWN0b3IoY29udGV4dCwgY29uZj8pXG4gKiAgIH1cbiAqXG4gKiAgIExvZ2dpbmcgLi4+IExvZ2dlciA6IGNyZWF0ZXNcbiAqICAgTG9nZ2luZyAuLj4gTWluaUxvZ2dlciA6IGNyZWF0ZXMgYnkgZGVmYXVsdFxuICovXG5leHBvcnQgY2xhc3MgTG9nZ2luZyB7XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEZhY3RvcnkgZnVuY3Rpb24gZm9yIGNyZWF0aW5nIGxvZ2dlciBpbnN0YW5jZXNcbiAgICAgKiBAc3VtbWFyeSBBIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBuZXcgTG9nZ2VyIGluc3RhbmNlcy4gQnkgZGVmYXVsdCwgaXQgY3JlYXRlcyBhIE1pbmlMb2dnZXIuXG4gICAgICovXG4gICAgc3RhdGljIHsgdGhpcy5fZmFjdG9yeSA9IChvYmplY3QsIGNvbmZpZykgPT4ge1xuICAgICAgICByZXR1cm4gbmV3IE1pbmlMb2dnZXIob2JqZWN0LCBjb25maWcpO1xuICAgIH07IH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ29uZmlndXJhdGlvbiBmb3IgdGhlIGxvZ2dpbmcgc3lzdGVtXG4gICAgICogQHN1bW1hcnkgU3RvcmVzIHRoZSBnbG9iYWwgbG9nZ2luZyBjb25maWd1cmF0aW9uIGluY2x1ZGluZyB2ZXJib3NpdHksIGxvZyBsZXZlbCwgc3R5bGluZywgYW5kIGZvcm1hdHRpbmcgc2V0dGluZ3NcbiAgICAgKi9cbiAgICBzdGF0aWMgeyB0aGlzLl9jb25maWcgPSBEZWZhdWx0TG9nZ2luZ0NvbmZpZzsgfVxuICAgIGNvbnN0cnVjdG9yKCkgeyB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFNldHMgdGhlIGZhY3RvcnkgZnVuY3Rpb24gZm9yIGNyZWF0aW5nIGxvZ2dlciBpbnN0YW5jZXNcbiAgICAgKiBAc3VtbWFyeSBBbGxvd3MgY3VzdG9taXppbmcgaG93IGxvZ2dlciBpbnN0YW5jZXMgYXJlIGNyZWF0ZWRcbiAgICAgKiBAcGFyYW0ge0xvZ2dlckZhY3Rvcnl9IGZhY3RvcnkgLSBUaGUgZmFjdG9yeSBmdW5jdGlvbiB0byB1c2UgZm9yIGNyZWF0aW5nIGxvZ2dlcnNcbiAgICAgKiBAcmV0dXJuIHt2b2lkfVxuICAgICAqL1xuICAgIHN0YXRpYyBzZXRGYWN0b3J5KGZhY3RvcnkpIHtcbiAgICAgICAgTG9nZ2luZy5fZmFjdG9yeSA9IGZhY3Rvcnk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBVcGRhdGVzIHRoZSBnbG9iYWwgbG9nZ2luZyBjb25maWd1cmF0aW9uXG4gICAgICogQHN1bW1hcnkgQWxsb3dzIHVwZGF0aW5nIHRoZSBnbG9iYWwgbG9nZ2luZyBjb25maWd1cmF0aW9uIHdpdGggbmV3IHNldHRpbmdzXG4gICAgICogQHBhcmFtIHtQYXJ0aWFsPExvZ2dpbmdDb25maWc+fSBjb25maWcgLSBUaGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIGFwcGx5XG4gICAgICogQHJldHVybiB7dm9pZH1cbiAgICAgKi9cbiAgICBzdGF0aWMgc2V0Q29uZmlnKGNvbmZpZykge1xuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMuX2NvbmZpZywgY29uZmlnKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEdldHMgYSBjb3B5IG9mIHRoZSBjdXJyZW50IGdsb2JhbCBsb2dnaW5nIGNvbmZpZ3VyYXRpb25cbiAgICAgKiBAc3VtbWFyeSBSZXR1cm5zIGEgY29weSBvZiB0aGUgY3VycmVudCBnbG9iYWwgbG9nZ2luZyBjb25maWd1cmF0aW9uXG4gICAgICogQHJldHVybiB7TG9nZ2luZ0NvbmZpZ30gQSBjb3B5IG9mIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb25cbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0Q29uZmlnKCkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5fY29uZmlnKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJldHJpZXZlcyBvciBjcmVhdGVzIHRoZSBnbG9iYWwgbG9nZ2VyIGluc3RhbmNlLlxuICAgICAqIEBzdW1tYXJ5IFJldHVybnMgdGhlIGV4aXN0aW5nIGdsb2JhbCBsb2dnZXIgb3IgY3JlYXRlcyBhIG5ldyBvbmUgaWYgaXQgZG9lc24ndCBleGlzdC5cbiAgICAgKlxuICAgICAqIEByZXR1cm4gVGhlIGdsb2JhbCBWZXJib3NpdHlMb2dnZXIgaW5zdGFuY2UuXG4gICAgICovXG4gICAgc3RhdGljIGdldCgpIHtcbiAgICAgICAgdGhpcy5nbG9iYWwgPSB0aGlzLmdsb2JhbCA/IHRoaXMuZ2xvYmFsIDogdGhpcy5fZmFjdG9yeShcIkxvZ2dpbmdcIik7XG4gICAgICAgIHJldHVybiB0aGlzLmdsb2JhbDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIExvZ3MgYSB2ZXJib3NlIG1lc3NhZ2UuXG4gICAgICogQHN1bW1hcnkgRGVsZWdhdGVzIHRoZSB2ZXJib3NlIGxvZ2dpbmcgdG8gdGhlIGdsb2JhbCBsb2dnZXIgaW5zdGFuY2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbXNnIC0gVGhlIG1lc3NhZ2UgdG8gYmUgbG9nZ2VkLlxuICAgICAqIEBwYXJhbSB2ZXJib3NpdHkgLSBUaGUgdmVyYm9zaXR5IGxldmVsIG9mIHRoZSBtZXNzYWdlIChkZWZhdWx0OiAwKS5cbiAgICAgKi9cbiAgICBzdGF0aWMgdmVyYm9zZShtc2csIHZlcmJvc2l0eSA9IDApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0KCkudmVyYm9zZShtc2csIHZlcmJvc2l0eSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBMb2dzIGFuIGluZm8gbWVzc2FnZS5cbiAgICAgKiBAc3VtbWFyeSBEZWxlZ2F0ZXMgdGhlIGluZm8gbG9nZ2luZyB0byB0aGUgZ2xvYmFsIGxvZ2dlciBpbnN0YW5jZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBtc2cgLSBUaGUgbWVzc2FnZSB0byBiZSBsb2dnZWQuXG4gICAgICovXG4gICAgc3RhdGljIGluZm8obXNnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldCgpLmluZm8obXNnKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIExvZ3MgYSBkZWJ1ZyBtZXNzYWdlLlxuICAgICAqIEBzdW1tYXJ5IERlbGVnYXRlcyB0aGUgZGVidWcgbG9nZ2luZyB0byB0aGUgZ2xvYmFsIGxvZ2dlciBpbnN0YW5jZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBtc2cgLSBUaGUgbWVzc2FnZSB0byBiZSBsb2dnZWQuXG4gICAgICovXG4gICAgc3RhdGljIGRlYnVnKG1zZykge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXQoKS5kZWJ1Zyhtc2cpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gTG9ncyBhIHNpbGx5IG1lc3NhZ2UuXG4gICAgICogQHN1bW1hcnkgRGVsZWdhdGVzIHRoZSBkZWJ1ZyBsb2dnaW5nIHRvIHRoZSBnbG9iYWwgbG9nZ2VyIGluc3RhbmNlLlxuICAgICAqXG4gICAgICogQHBhcmFtIG1zZyAtIFRoZSBtZXNzYWdlIHRvIGJlIGxvZ2dlZC5cbiAgICAgKi9cbiAgICBzdGF0aWMgc2lsbHkobXNnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldCgpLnNpbGx5KG1zZyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBMb2dzIGFuIGVycm9yIG1lc3NhZ2UuXG4gICAgICogQHN1bW1hcnkgRGVsZWdhdGVzIHRoZSBlcnJvciBsb2dnaW5nIHRvIHRoZSBnbG9iYWwgbG9nZ2VyIGluc3RhbmNlLlxuICAgICAqXG4gICAgICogQHBhcmFtIG1zZyAtIFRoZSBtZXNzYWdlIHRvIGJlIGxvZ2dlZC5cbiAgICAgKi9cbiAgICBzdGF0aWMgZXJyb3IobXNnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldCgpLmVycm9yKG1zZyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDcmVhdGVzIGEgbG9nZ2VyIGZvciBhIHNwZWNpZmljIG9iamVjdCBvciBjb250ZXh0XG4gICAgICogQHN1bW1hcnkgQ3JlYXRlcyBhIG5ldyBsb2dnZXIgaW5zdGFuY2UgZm9yIHRoZSBnaXZlbiBvYmplY3Qgb3IgY29udGV4dCB1c2luZyB0aGUgZmFjdG9yeSBmdW5jdGlvblxuICAgICAqIEBwYXJhbSB7TG9nZ2luZ0NvbnRleHR9IG9iamVjdCAtIFRoZSBvYmplY3QsIGNsYXNzLCBvciBjb250ZXh0IHRvIGNyZWF0ZSBhIGxvZ2dlciBmb3JcbiAgICAgKiBAcGFyYW0ge1BhcnRpYWw8TG9nZ2luZ0NvbmZpZz59IFtjb25maWddIC0gT3B0aW9uYWwgY29uZmlndXJhdGlvbiB0byBvdmVycmlkZSBnbG9iYWwgc2V0dGluZ3NcbiAgICAgKiBAcGFyYW0gey4uLmFueX0gYXJncyAtIEFkZGl0aW9uYWwgYXJndW1lbnRzIHRvIHBhc3MgdG8gdGhlIGxvZ2dlciBmYWN0b3J5XG4gICAgICogQHJldHVybiB7TG9nZ2VyfSBBIG5ldyBsb2dnZXIgaW5zdGFuY2UgZm9yIHRoZSBzcGVjaWZpZWQgb2JqZWN0IG9yIGNvbnRleHRcbiAgICAgKi9cbiAgICBzdGF0aWMgZm9yKG9iamVjdCwgY29uZmlnLCAuLi5hcmdzKSB7XG4gICAgICAgIG9iamVjdCA9XG4gICAgICAgICAgICB0eXBlb2Ygb2JqZWN0ID09PSBcInN0cmluZ1wiXG4gICAgICAgICAgICAgICAgPyBvYmplY3RcbiAgICAgICAgICAgICAgICA6IG9iamVjdC5jb25zdHJ1Y3RvclxuICAgICAgICAgICAgICAgICAgICA/IG9iamVjdC5jb25zdHJ1Y3Rvci5uYW1lXG4gICAgICAgICAgICAgICAgICAgIDogb2JqZWN0Lm5hbWU7XG4gICAgICAgIHJldHVybiB0aGlzLl9mYWN0b3J5KG9iamVjdCwgY29uZmlnLCAuLi5hcmdzKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENyZWF0ZXMgYSBsb2dnZXIgZm9yIGEgc3BlY2lmaWMgcmVhc29uIG9yIGNvbnRleHQuXG4gICAgICpcbiAgICAgKiBAc3VtbWFyeSBUaGlzIHN0YXRpYyBtZXRob2QgY3JlYXRlcyBhIG5ldyBsb2dnZXIgaW5zdGFuY2UgdXNpbmcgdGhlIGZhY3RvcnkgZnVuY3Rpb24sXG4gICAgICogYmFzZWQgb24gYSBnaXZlbiByZWFzb24gb3IgY29udGV4dC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSByZWFzb24gLSBBIHN0cmluZyBkZXNjcmliaW5nIHRoZSByZWFzb24gb3IgY29udGV4dCBmb3IgY3JlYXRpbmcgdGhpcyBsb2dnZXIuXG4gICAgICogQHBhcmFtIGlkXG4gICAgICogQHJldHVybnMgQSBuZXcgVmVyYm9zaXR5TG9nZ2VyIG9yIENsYXNzTG9nZ2VyIGluc3RhbmNlLlxuICAgICAqL1xuICAgIHN0YXRpYyBiZWNhdXNlKHJlYXNvbiwgaWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZhY3RvcnkocmVhc29uLCB0aGlzLl9jb25maWcsIGlkKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEFwcGxpZXMgdGhlbWUgc3R5bGluZyB0byB0ZXh0XG4gICAgICogQHN1bW1hcnkgQXBwbGllcyBzdHlsaW5nIChjb2xvcnMsIGZvcm1hdHRpbmcpIHRvIHRleHQgYmFzZWQgb24gdGhlIHRoZW1lIGNvbmZpZ3VyYXRpb25cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIFRoZSB0ZXh0IHRvIHN0eWxlXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgLSBUaGUgdHlwZSBvZiBlbGVtZW50IHRvIHN0eWxlIChlLmcuLCBcImNsYXNzXCIsIFwibWVzc2FnZVwiLCBcImxvZ0xldmVsXCIpXG4gICAgICogQHBhcmFtIHtMb2dMZXZlbH0gbG9nZ2VyTGV2ZWwgLSBUaGUgbG9nIGxldmVsIHRvIHVzZSBmb3Igc3R5bGluZ1xuICAgICAqIEBwYXJhbSB7VGhlbWV9IFt0ZW1wbGF0ZT1EZWZhdWx0VGhlbWVdIC0gVGhlIHRoZW1lIHRvIHVzZSBmb3Igc3R5bGluZ1xuICAgICAqIEByZXR1cm4ge3N0cmluZ30gVGhlIHN0eWxlZCB0ZXh0XG4gICAgICogQG1lcm1haWRcbiAgICAgKiBzZXF1ZW5jZURpYWdyYW1cbiAgICAgKiAgIHBhcnRpY2lwYW50IENhbGxlclxuICAgICAqICAgcGFydGljaXBhbnQgVGhlbWUgYXMgTG9nZ2luZy50aGVtZVxuICAgICAqICAgcGFydGljaXBhbnQgQXBwbHkgYXMgYXBwbHkgZnVuY3Rpb25cbiAgICAgKiAgIHBhcnRpY2lwYW50IFN0eWxlIGFzIHN0eWxlZC1zdHJpbmctYnVpbGRlclxuICAgICAqXG4gICAgICogICBDYWxsZXItPj5UaGVtZTogdGhlbWUodGV4dCwgdHlwZSwgbG9nZ2VyTGV2ZWwpXG4gICAgICogICBUaGVtZS0+PlRoZW1lOiBDaGVjayBpZiBzdHlsaW5nIGlzIGVuYWJsZWRcbiAgICAgKiAgIGFsdCBzdHlsaW5nIGRpc2FibGVkXG4gICAgICogICAgIFRoZW1lLS0+PkNhbGxlcjogcmV0dXJuIG9yaWdpbmFsIHRleHRcbiAgICAgKiAgIGVsc2Ugc3R5bGluZyBlbmFibGVkXG4gICAgICogICAgIFRoZW1lLT4+VGhlbWU6IEdldCB0aGVtZSBmb3IgdHlwZVxuICAgICAqICAgICBhbHQgdGhlbWUgbm90IGZvdW5kXG4gICAgICogICAgICAgVGhlbWUtLT4+Q2FsbGVyOiByZXR1cm4gb3JpZ2luYWwgdGV4dFxuICAgICAqICAgICBlbHNlIHRoZW1lIGZvdW5kXG4gICAgICogICAgICAgVGhlbWUtPj5UaGVtZTogRGV0ZXJtaW5lIGFjdHVhbCB0aGVtZSBiYXNlZCBvbiBsb2cgbGV2ZWxcbiAgICAgKiAgICAgICBUaGVtZS0+PkFwcGx5OiBBcHBseSBlYWNoIHN0eWxlIHByb3BlcnR5XG4gICAgICogICAgICAgQXBwbHktPj5TdHlsZTogQXBwbHkgY29sb3JzIGFuZCBmb3JtYXR0aW5nXG4gICAgICogICAgICAgU3R5bGUtLT4+QXBwbHk6IFJldHVybiBzdHlsZWQgdGV4dFxuICAgICAqICAgICAgIEFwcGx5LS0+PlRoZW1lOiBSZXR1cm4gc3R5bGVkIHRleHRcbiAgICAgKiAgICAgICBUaGVtZS0tPj5DYWxsZXI6IFJldHVybiBmaW5hbCBzdHlsZWQgdGV4dFxuICAgICAqICAgICBlbmRcbiAgICAgKiAgIGVuZFxuICAgICAqL1xuICAgIHN0YXRpYyB0aGVtZSh0ZXh0LCB0eXBlLCBsb2dnZXJMZXZlbCwgdGVtcGxhdGUgPSBEZWZhdWx0VGhlbWUpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9jb25maWcuc3R5bGUpXG4gICAgICAgICAgICByZXR1cm4gdGV4dDtcbiAgICAgICAgY29uc3QgbG9nZ2VyID0gTG9nZ2luZy5nZXQoKS5mb3IodGhpcy50aGVtZSk7XG4gICAgICAgIGZ1bmN0aW9uIGFwcGx5KHR4dCwgb3B0aW9uLCB2YWx1ZSkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCB0ID0gdHh0O1xuICAgICAgICAgICAgICAgIGxldCBjID0gc3R5bGUodCk7XG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gYXBwbHlDb2xvcih2YWwsIGlzQmcgPSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZiA9IGlzQmcgPyBjLmJhY2tncm91bmQgOiBjLmZvcmVncm91bmQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWwpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZi5jYWxsKGMsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHZhbC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmID0gaXNCZyA/IGMuYmdDb2xvcjI1NiA6IGMuY29sb3IyNTY7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGYodmFsWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmID0gaXNCZyA/IGMuYmdSZ2IgOiBjLnJnYjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYy5yZ2IodmFsWzBdLCB2YWxbMV0sIHZhbFsyXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5lcnJvcihgTm90IGEgdmFsaWQgY29sb3Igb3B0aW9uOiAke29wdGlvbn1gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3R5bGUodCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gYXBwbHlTdHlsZSh2KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdiA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgYyA9IGMuc3R5bGUodik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjID0gY1t2XTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzd2l0Y2ggKG9wdGlvbikge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiYmdcIjpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcImZnXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXBwbHlDb2xvcih2YWx1ZSkudGV4dDtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcInN0eWxlXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS5mb3JFYWNoKGFwcGx5U3R5bGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwbHlTdHlsZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYy50ZXh0O1xuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKGBOb3QgYSB2YWxpZCB0aGVtZSBvcHRpb246ICR7b3B0aW9ufWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKGBFcnJvciBhcHBseWluZyBzdHlsZTogJHtvcHRpb259IHdpdGggdmFsdWUgJHt2YWx1ZX1gKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHh0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGluZGl2aWR1YWxUaGVtZSA9IHRlbXBsYXRlW3R5cGVdO1xuICAgICAgICBpZiAoIWluZGl2aWR1YWxUaGVtZSB8fCAhT2JqZWN0LmtleXMoaW5kaXZpZHVhbFRoZW1lKS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiB0ZXh0O1xuICAgICAgICB9XG4gICAgICAgIGxldCBhY3R1YWxUaGVtZSA9IGluZGl2aWR1YWxUaGVtZTtcbiAgICAgICAgY29uc3QgbG9nTGV2ZWxzID0gT2JqZWN0LmFzc2lnbih7fSwgTG9nTGV2ZWwpO1xuICAgICAgICBpZiAoT2JqZWN0LmtleXMoaW5kaXZpZHVhbFRoZW1lKVswXSBpbiBsb2dMZXZlbHMpXG4gICAgICAgICAgICBhY3R1YWxUaGVtZSA9XG4gICAgICAgICAgICAgICAgaW5kaXZpZHVhbFRoZW1lW2xvZ2dlckxldmVsXSB8fCB7fTtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKGFjdHVhbFRoZW1lKS5yZWR1Y2UoKGFjYywga2V5KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2YWwgPSBhY3R1YWxUaGVtZVtrZXldO1xuICAgICAgICAgICAgaWYgKHZhbClcbiAgICAgICAgICAgICAgICByZXR1cm4gYXBwbHkoYWNjLCBrZXksIHZhbCk7XG4gICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICB9LCB0ZXh0KTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2liRzluWjJsdVp5NXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMM055WXk5c2IyZG5hVzVuTG5SeklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lKQlFWVkJMRTlCUVU4c1JVRkJiVUlzUzBGQlN5eEZRVUZuUWl4TlFVRk5MSFZDUVVGMVFpeERRVUZETzBGQlF6ZEZMRTlCUVU4c1JVRkRUQ3h2UWtGQmIwSXNSVUZEY0VJc1dVRkJXU3hGUVVOYUxGRkJRVkVzUlVGRFVpeG5Ra0ZCWjBJc1IwRkRha0lzVFVGQlRTeGhRVUZoTEVOQlFVTTdRVUZGY2tJN096czdPenM3T3pzN096czdPenM3T3pzN096czdPMGRCZFVKSE8wRkJRMGdzVFVGQlRTeFBRVUZQTEZWQlFWVTdTVUZEY2tJc1dVRkRXU3hQUVVGbExFVkJRMllzU1VGQk5rSTdVVUZFTjBJc1dVRkJUeXhIUVVGUUxFOUJRVThzUTBGQlVUdFJRVU5tTEZOQlFVa3NSMEZCU2l4SlFVRkpMRU5CUVhsQ08wbEJRM1JETEVOQlFVTTdTVUZGVFN4TlFVRk5MRU5CUTJRc1IwRkJkMEk3VVVGRmVFSXNTVUZCU1N4SlFVRkpMRU5CUVVNc1NVRkJTU3hKUVVGSkxFZEJRVWNzU1VGQlNTeEpRVUZKTEVOQlFVTXNTVUZCU1R0WlFVRkZMRTlCUVU4c1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0UlFVTjZSQ3hQUVVGUExFOUJRVThzUTBGQlF5eFRRVUZUTEVWQlFVVXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRKUVVOc1F5eERRVUZETzBsQlJVUTdPenM3T3pzN1QwRlBSenRKUVVOSUxFZEJRVWNzUTBGRFJDeE5RVUV5UXl4RlFVTXpReXhOUVVFclFqdFJRVVV2UWl4TlFVRk5MRWRCUVVjc1RVRkJUVHRaUVVOaUxFTkJRVU1zUTBGQlF5eFBRVUZQTEUxQlFVMHNTMEZCU3l4UlFVRlJPMmRDUVVNeFFpeERRVUZETEVOQlFVTXNUVUZCVFR0blFrRkRVaXhEUVVGRExFTkJRVU1zVFVGQlRTeERRVUZETEVsQlFVazdXVUZEWml4RFFVRkRMRU5CUVVNc1UwRkJVeXhEUVVGRE8xRkJSV1FzVDBGQlR5eEpRVUZKTEV0QlFVc3NRMEZCUXl4SlFVRkpMRVZCUVVVN1dVRkRja0lzUjBGQlJ5eEZRVUZGTEVOQlFVTXNUVUZCYlVJc1JVRkJSU3hEUVVGclFpeEZRVUZGTEZGQlFXRXNSVUZCUlN4RlFVRkZPMmRDUVVNNVJDeE5RVUZOTEUxQlFVMHNSMEZCUnl4UFFVRlBMRU5CUVVNc1IwRkJSeXhEUVVGRExFMUJRVTBzUlVGQlJTeERRVUZETEVWQlFVVXNVVUZCVVN4RFFVRkRMRU5CUVVNN1owSkJRMmhFTEVsQlFVa3NRMEZCUXl4TFFVRkxMRkZCUVZFc1JVRkJSU3hEUVVGRE8yOUNRVU51UWl4UFFVRlBMRWxCUVVrc1MwRkJTeXhEUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVWQlFVVTdkMEpCUXpWQ0xFZEJRVWNzUlVGQlJTeERRVUZETEUxQlFUQkNMRVZCUVVVc1EwRkJhMElzUlVGQlJTeEZRVUZGT3pSQ1FVTjBSQ3hKUVVGSkxFMUJRVTBzU1VGQlNTeERRVUZETEVsQlFVa3NUVUZCVFR0blEwRkRka0lzVDBGQlR5eE5RVUZOTEVOQlFVTXNRMEZCZDBJc1EwRkJReXhEUVVGRE96UkNRVU14UXl4UFFVRlBMRTlCUVU4c1EwRkJReXhIUVVGSExFTkJRVU1zVFVGQlRTeEZRVUZGTEVOQlFVTXNSVUZCUlN4UlFVRlJMRU5CUVVNc1EwRkJRenQzUWtGRE1VTXNRMEZCUXp0eFFrRkRSaXhEUVVGRExFTkJRVU03WjBKQlEwd3NRMEZCUXp0blFrRkRSQ3hKUVVGSkxFTkJRVU1zUzBGQlN5eFRRVUZUTEVWQlFVVXNRMEZCUXp0dlFrRkRjRUlzVDBGQlR5eERRVUZETEUxQlFVMHNSVUZCUlN4TlFVRk5MRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdaMEpCUTNCRExFTkJRVU03WjBKQlEwUXNUMEZCVHl4TlFVRk5MRU5CUVVNN1dVRkRhRUlzUTBGQlF6dFRRVU5HTEVOQlFVTXNRMEZCUXp0SlFVTk1MRU5CUVVNN1NVRkZSRHM3T3pzN096dFBRVTlITzBsQlEwOHNVMEZCVXl4RFFVTnFRaXhMUVVGbExFVkJRMllzVDBGQk1rSXNSVUZETTBJc1MwRkJZenRSUVVWa0xFMUJRVTBzUjBGQlJ5eEhRVUZoTEVWQlFVVXNRMEZCUXp0UlFVTjZRaXhOUVVGTkxFdEJRVXNzUjBGQlJ5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRE8xRkJRMjVETEVsQlFVa3NTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhYUVVGWExFTkJRVU1zUlVGQlJTeERRVUZETzFsQlF6ZENMRTFCUVUwc1NVRkJTU3hIUVVGSExFbEJRVWtzU1VGQlNTeEZRVUZGTEVOQlFVTXNWMEZCVnl4RlFVRkZMRU5CUVVNN1dVRkRkRU1zVFVGQlRTeFRRVUZUTEVkQlFVY3NTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhQUVVGUExFTkJRVU1zUzBGQlN5eERRVUZETEVsQlFVa3NSVUZCUlN4WFFVRlhMRVZCUVVVc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXp0WlFVTjZSU3hIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEZOQlFWTXNRMEZCUXl4RFFVRkRPMUZCUTNSQ0xFTkJRVU03VVVGRlJDeEpRVUZKTEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1ZVRkJWU3hEUVVGRExFVkJRVVVzUTBGQlF6dFpRVU0xUWl4TlFVRk5MRWRCUVVjc1IwRkJWeXhMUVVGTE8yZENRVU4yUWl4RFFVRkRMRU5CUVVNc1QwRkJUeXhEUVVGRExFdEJRVXNzUTBGQlF5eExRVUZMTEVWQlFVVXNWVUZCVlN4RlFVRkZMRXRCUVVzc1EwRkJRenRuUWtGRGVrTXNRMEZCUXl4RFFVRkRMRXRCUVVzc1EwRkJRenRaUVVOV0xFZEJRVWNzUTBGQlF5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN1VVRkRhRUlzUTBGQlF6dFJRVVZFTEVsQlFVa3NTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhUUVVGVExFTkJRVU1zUlVGQlJTeERRVUZETzFsQlF6TkNMRTFCUVUwc1QwRkJUeXhIUVVGWExFdEJRVXM3WjBKQlF6TkNMRU5CUVVNc1EwRkJReXhQUVVGUExFTkJRVU1zUzBGQlN5eERRVUZETEVsQlFVa3NRMEZCUXl4UFFVRlBMRVZCUVVVc1QwRkJUeXhGUVVGRkxFdEJRVXNzUTBGQlF6dG5Ra0ZETjBNc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTTdXVUZEYWtJc1IwRkJSeXhEUVVGRExFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXp0UlFVTndRaXhEUVVGRE8xRkJSVVFzU1VGQlNTeEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMR1ZCUVdVc1EwRkJReXhGUVVGRkxFTkJRVU03V1VGRGFrTXNRMEZCUXp0blFrRkRReXhOUVVGTkxFVkJRVVVzUjBGQlZ5eExRVUZMTzI5Q1FVTjBRaXhEUVVGRExFTkJRVU1zVDBGQlR5eERRVUZETEV0QlFVc3NRMEZCUXl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExHVkJRV1VzUTBGQlJTeERRVUZETEZGQlFWRXNSVUZCUlN4RlFVRkZMRWxCUVVrc1JVRkJSU3hMUVVGTExFTkJRVU03YjBKQlEzUkZMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEdWQlFXVXNRMEZCUlN4RFFVRkRMRkZCUVZFc1JVRkJSU3hEUVVGRE8yZENRVU0zUXl4SFFVRkhMRU5CUVVNc1NVRkJTU3hEUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETzFsQlEyWXNRMEZCUXp0UlFVTklMRU5CUVVNN1VVRkZSQ3hOUVVGTkxFZEJRVWNzUjBGQlZ5eExRVUZMTzFsQlEzWkNMRU5CUVVNc1EwRkJReXhQUVVGUExFTkJRVU1zUzBGQlN5eERRVU5ZTEU5QlFVOHNUMEZCVHl4TFFVRkxMRkZCUVZFc1EwRkJReXhEUVVGRExFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTXNRMEZCUlN4UFFVRnBRaXhEUVVGRExFOUJRVThzUlVGRGJFVXNVMEZCVXl4RlFVTlVMRXRCUVVzc1EwRkRUanRaUVVOSUxFTkJRVU1zUTBGQlF5eFBRVUZQTEU5QlFVOHNTMEZCU3l4UlFVRlJPMmRDUVVNelFpeERRVUZETEVOQlFVTXNUMEZCVHp0blFrRkRWQ3hEUVVGRExFTkJRVVVzVDBGQmFVSXNRMEZCUXl4UFFVRlBMRU5CUVVNN1VVRkRha01zUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRSUVVOa0xFbEJRVWtzUzBGQlN5eEpRVUZKTEU5QlFVOHNXVUZCV1N4TFFVRkxMRVZCUVVVc1EwRkJRenRaUVVOMFF5eExRVUZMTEVkQlFVY3NTMEZCU3p0blFrRkRXQ3hEUVVGRExFTkJRVU1zVDBGQlR5eERRVUZETEV0QlFVc3NRMEZEV0N4RFFVRkRMRXRCUVVzc1NVRkJTeXhQUVVGcFFpeERRVUZETEV0QlFVc3NRMEZCVnl4RlFVTTNReXhQUVVGUExFVkJRMUFzUzBGQlN5eERRVU5PTzJkQ1FVTklMRU5CUVVNc1EwRkJReXhMUVVGTExFTkJRVU03V1VGRFZpeEhRVUZITEVOQlFVTXNTVUZCU1N4RFFVRkRMRzFDUVVGdFFpeExRVUZMTEVWQlFVVXNRMEZCUXl4RFFVRkRPMUZCUTNaRExFTkJRVU03VVVGRlJDeFBRVUZQTEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eFhRVUZYTEVOQlFWY3NRMEZCUXl4RFFVRkRPMGxCUTNSRUxFTkJRVU03U1VGRlJEczdPenM3T3pzN1QwRlJSenRKUVVOUExFZEJRVWNzUTBGRFdDeExRVUZsTEVWQlEyWXNSMEZCZFVJc1JVRkRka0lzUzBGQll6dFJRVVZrTEVsQlEwVXNaMEpCUVdkQ0xFTkJRVU1zU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4UFFVRlBMRU5CUVdFc1EwRkJRenRaUVVOc1JDeG5Ra0ZCWjBJc1EwRkJReXhMUVVGTExFTkJRVU03V1VGRmRrSXNUMEZCVHp0UlFVTlVMRWxCUVVrc1RVRkJUU3hEUVVGRE8xRkJRMWdzVVVGQlVTeExRVUZMTEVWQlFVVXNRMEZCUXp0WlFVTmtMRXRCUVVzc1VVRkJVU3hEUVVGRExFbEJRVWs3WjBKQlEyaENMRTFCUVUwc1IwRkJSeXhQUVVGUExFTkJRVU1zUjBGQlJ5eERRVUZETzJkQ1FVTnlRaXhOUVVGTk8xbEJRMUlzUzBGQlN5eFJRVUZSTEVOQlFVTXNUMEZCVHl4RFFVRkRPMWxCUTNSQ0xFdEJRVXNzVVVGQlVTeERRVUZETEV0QlFVczdaMEpCUTJwQ0xFMUJRVTBzUjBGQlJ5eFBRVUZQTEVOQlFVTXNTMEZCU3l4RFFVRkRPMmRDUVVOMlFpeE5RVUZOTzFsQlExSXNTMEZCU3l4UlFVRlJMRU5CUVVNc1MwRkJTenRuUWtGRGFrSXNUVUZCVFN4SFFVRkhMRTlCUVU4c1EwRkJReXhMUVVGTExFTkJRVU03WjBKQlEzWkNMRTFCUVUwN1dVRkRVanRuUWtGRFJTeE5RVUZOTEVsQlFVa3NTMEZCU3l4RFFVRkRMRzFDUVVGdFFpeERRVUZETEVOQlFVTTdVVUZEZWtNc1EwRkJRenRSUVVORUxFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTXNVMEZCVXl4RFFVRkRMRXRCUVVzc1JVRkJSU3hIUVVGSExFVkJRVVVzUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXp0SlFVTTFReXhEUVVGRE8wbEJSVVE3T3pzN096dFBRVTFITzBsQlEwZ3NTMEZCU3l4RFFVRkRMRWRCUVdVc1JVRkJSU3haUVVGdlFpeERRVUZETzFGQlF6RkRMRWxCUVVzc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eFRRVUZUTEVOQlFWa3NTVUZCU1N4VFFVRlRPMWxCUTJwRUxFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNVVUZCVVN4RFFVRkRMRTlCUVU4c1JVRkJSU3hIUVVGSExFTkJRVU1zUTBGQlF6dEpRVU53UXl4RFFVRkRPMGxCUlVRN096czdPenRQUVUxSE8wbEJRMGdzVDBGQlR5eERRVUZETEVkQlFXVXNSVUZCUlN4WlFVRnZRaXhEUVVGRE8xRkJRelZETEVsQlFVc3NTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhUUVVGVExFTkJRVmtzU1VGQlNTeFRRVUZUTzFsQlEycEVMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zVVVGQlVTeERRVUZETEU5QlFVOHNSVUZCUlN4SFFVRkhMRU5CUVVNc1EwRkJRenRKUVVOd1F5eERRVUZETzBsQlJVUTdPenM3TzA5QlMwYzdTVUZEU0N4SlFVRkpMRU5CUVVNc1IwRkJaVHRSUVVOc1FpeEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRkZCUVZFc1EwRkJReXhKUVVGSkxFVkJRVVVzUjBGQlJ5eERRVUZETEVOQlFVTTdTVUZETDBJc1EwRkJRenRKUVVWRU96czdPenRQUVV0SE8wbEJRMGdzUzBGQlN5eERRVUZETEVkQlFXVTdVVUZEYmtJc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eFJRVUZSTEVOQlFVTXNTMEZCU3l4RlFVRkZMRWRCUVVjc1EwRkJReXhEUVVGRE8wbEJRMmhETEVOQlFVTTdTVUZGUkRzN096czdUMEZMUnp0SlFVTklMRXRCUVVzc1EwRkJReXhIUVVGMVFqdFJRVU16UWl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExGRkJRVkVzUTBGQlF5eExRVUZMTEVWQlFVVXNSMEZCUnl4RFFVRkRMRU5CUVVNN1NVRkRhRU1zUTBGQlF6dEpRVVZFT3pzN096dFBRVXRITzBsQlEwZ3NVMEZCVXl4RFFVRkRMRTFCUVRoQ08xRkJRM1JETEVsQlFVa3NRMEZCUXl4SlFVRkpMRWRCUVVjc1JVRkJSU3hIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NTVUZCU1N4RlFVRkZMRU5CUVVNc1JVRkJSU3hIUVVGSExFMUJRVTBzUlVGQlJTeERRVUZETzBsQlEyeEVMRU5CUVVNN1EwRkRSanRCUVVWRU96czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN08wZEJaMFZITzBGQlEwZ3NUVUZCVFN4UFFVRlBMRTlCUVU4N1NVRlBiRUk3T3p0UFFVZEhPMkZCUTFrc1lVRkJVU3hIUVVGclFpeERRVU4yUXl4TlFVRmpMRVZCUTJRc1RVRkJLMElzUlVGREwwSXNSVUZCUlR0UlFVTkdMRTlCUVU4c1NVRkJTU3hWUVVGVkxFTkJRVU1zVFVGQlRTeEZRVUZGTEUxQlFVMHNRMEZCUXl4RFFVRkRPMGxCUTNoRExFTkJRVU1zUTBGQlF6dEpRVU5HT3pzN1QwRkhSenRoUVVOWkxGbEJRVThzUjBGQmEwSXNiMEpCUVc5Q0xFTkJRVU03U1VGRk4wUXNaMEpCUVhWQ0xFTkJRVU03U1VGRmVFSTdPenM3TzA5QlMwYzdTVUZEU0N4TlFVRk5MRU5CUVVNc1ZVRkJWU3hEUVVGRExFOUJRWE5DTzFGQlEzUkRMRTlCUVU4c1EwRkJReXhSUVVGUkxFZEJRVWNzVDBGQlR5eERRVUZETzBsQlF6ZENMRU5CUVVNN1NVRkZSRHM3T3pzN1QwRkxSenRKUVVOSUxFMUJRVTBzUTBGQlF5eFRRVUZUTEVOQlFVTXNUVUZCT0VJN1VVRkROME1zVFVGQlRTeERRVUZETEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1QwRkJUeXhGUVVGRkxFMUJRVTBzUTBGQlF5eERRVUZETzBsQlEzUkRMRU5CUVVNN1NVRkZSRHM3T3p0UFFVbEhPMGxCUTBnc1RVRkJUU3hEUVVGRExGTkJRVk03VVVGRFpDeFBRVUZQTEUxQlFVMHNRMEZCUXl4TlFVRk5MRU5CUVVNc1JVRkJSU3hGUVVGRkxFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXp0SlFVTjZReXhEUVVGRE8wbEJSVVE3T3pzN08wOUJTMGM3U1VGRFNDeE5RVUZOTEVOQlFVTXNSMEZCUnp0UlFVTlNMRWxCUVVrc1EwRkJReXhOUVVGTkxFZEJRVWNzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhUUVVGVExFTkJRVU1zUTBGQlF6dFJRVU51UlN4UFFVRlBMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU03U1VGRGNrSXNRMEZCUXp0SlFVVkVPenM3T3pzN1QwRk5SenRKUVVOSUxFMUJRVTBzUTBGQlF5eFBRVUZQTEVOQlFVTXNSMEZCWlN4RlFVRkZMRmxCUVc5Q0xFTkJRVU03VVVGRGJrUXNUMEZCVHl4SlFVRkpMRU5CUVVNc1IwRkJSeXhGUVVGRkxFTkJRVU1zVDBGQlR5eERRVUZETEVkQlFVY3NSVUZCUlN4VFFVRlRMRU5CUVVNc1EwRkJRenRKUVVNMVF5eERRVUZETzBsQlJVUTdPenM3TzA5QlMwYzdTVUZEU0N4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExFZEJRV1U3VVVGRGVrSXNUMEZCVHl4SlFVRkpMRU5CUVVNc1IwRkJSeXhGUVVGRkxFTkJRVU1zU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMGxCUXpsQ0xFTkJRVU03U1VGRlJEczdPenM3VDBGTFJ6dEpRVU5JTEUxQlFVMHNRMEZCUXl4TFFVRkxMRU5CUVVNc1IwRkJaVHRSUVVNeFFpeFBRVUZQTEVsQlFVa3NRMEZCUXl4SFFVRkhMRVZCUVVVc1EwRkJReXhMUVVGTExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdTVUZETDBJc1EwRkJRenRKUVVWRU96czdPenRQUVV0SE8wbEJRMGdzVFVGQlRTeERRVUZETEV0QlFVc3NRMEZCUXl4SFFVRmxPMUZCUXpGQ0xFOUJRVThzU1VGQlNTeERRVUZETEVkQlFVY3NSVUZCUlN4RFFVRkRMRXRCUVVzc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dEpRVU12UWl4RFFVRkRPMGxCUlVRN096czdPMDlCUzBjN1NVRkRTQ3hOUVVGTkxFTkJRVU1zUzBGQlN5eERRVUZETEVkQlFXVTdVVUZETVVJc1QwRkJUeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eEZRVUZGTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8wbEJReTlDTEVOQlFVTTdTVUZGUkRzN096czdPenRQUVU5SE8wbEJRMGdzVFVGQlRTeERRVUZETEVkQlFVY3NRMEZEVWl4TlFVRnpRaXhGUVVOMFFpeE5RVUVyUWl4RlFVTXZRaXhIUVVGSExFbEJRVmM3VVVGRlpDeE5RVUZOTzFsQlEwb3NUMEZCVHl4TlFVRk5MRXRCUVVzc1VVRkJVVHRuUWtGRGVFSXNRMEZCUXl4RFFVRkRMRTFCUVUwN1owSkJRMUlzUTBGQlF5eERRVUZETEUxQlFVMHNRMEZCUXl4WFFVRlhPMjlDUVVOc1FpeERRVUZETEVOQlFVTXNUVUZCVFN4RFFVRkRMRmRCUVZjc1EwRkJReXhKUVVGSk8yOUNRVU42UWl4RFFVRkRMRU5CUVVNc1RVRkJUU3hEUVVGRExFbEJRVWtzUTBGQlF6dFJRVU53UWl4UFFVRlBMRWxCUVVrc1EwRkJReXhSUVVGUkxFTkJRVU1zVFVGQlRTeEZRVUZGTEUxQlFVMHNSVUZCUlN4SFFVRkhMRWxCUVVrc1EwRkJReXhEUVVGRE8wbEJRMmhFTEVOQlFVTTdTVUZGUkRzN096czdPenM3TzA5QlUwYzdTVUZEU0N4TlFVRk5MRU5CUVVNc1QwRkJUeXhEUVVGRExFMUJRV01zUlVGQlJTeEZRVUZYTzFGQlEzaERMRTlCUVU4c1NVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eE5RVUZOTEVWQlFVVXNTVUZCU1N4RFFVRkRMRTlCUVU4c1JVRkJSU3hGUVVGRkxFTkJRVU1zUTBGQlF6dEpRVU5xUkN4RFFVRkRPMGxCUlVRN096czdPenM3T3pzN096czdPenM3T3pzN096czdPenM3T3pzN096czdPMDlCWjBOSE8wbEJRMGdzVFVGQlRTeERRVUZETEV0QlFVc3NRMEZEVml4SlFVRlpMRVZCUTFvc1NVRkJhME1zUlVGRGJFTXNWMEZCY1VJc1JVRkRja0lzVjBGQmEwSXNXVUZCV1R0UlFVVTVRaXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4TFFVRkxPMWxCUVVVc1QwRkJUeXhKUVVGSkxFTkJRVU03VVVGRGNrTXNUVUZCVFN4TlFVRk5MRWRCUVVjc1QwRkJUeXhEUVVGRExFZEJRVWNzUlVGQlJTeERRVUZETEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU03VVVGRk4wTXNVMEZCVXl4TFFVRkxMRU5CUTFvc1IwRkJWeXhGUVVOWUxFMUJRWGxDTEVWQlEzcENMRXRCUVhsRk8xbEJSWHBGTEVsQlFVa3NRMEZCUXp0blFrRkRTQ3hOUVVGTkxFTkJRVU1zUjBGQk1FSXNSMEZCUnl4RFFVRkRPMmRDUVVOeVF5eEpRVUZKTEVOQlFVTXNSMEZCUnl4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03WjBKQlJXcENMRk5CUVZNc1ZVRkJWU3hEUVVOcVFpeEhRVUZwUkN4RlFVTnFSQ3hKUVVGSkxFZEJRVWNzUzBGQlN6dHZRa0ZGV2l4SlFVRkpMRU5CUVVNc1IwRkpiVUlzU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1ZVRkJWU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNWVUZCVlN4RFFVRkRPMjlDUVVNelJDeEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRTlCUVU4c1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETzNkQ1FVTjRRaXhQUVVGUkxFTkJRU3RETEVOQlFVTXNTVUZCU1N4RFFVTXhSQ3hEUVVGRExFVkJRMFFzUzBGQlpTeERRVU5vUWl4RFFVRkRPMjlDUVVOS0xFTkJRVU03YjBKQlEwUXNVVUZCVVN4SFFVRkhMRU5CUVVNc1RVRkJUU3hGUVVGRkxFTkJRVU03ZDBKQlEyNUNMRXRCUVVzc1EwRkJRenMwUWtGRFNpeERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zVlVGQlZTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1VVRkJVU3hEUVVGRE96UkNRVU55UXl4UFFVRlJMRU5CUVRaRExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN2QwSkJRMmhGTEV0QlFVc3NRMEZCUXpzMFFrRkRTaXhEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRPelJDUVVNelFpeFBRVUZQTEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0M1FrRkRka003TkVKQlEwVXNUVUZCVFN4RFFVRkRMRXRCUVVzc1EwRkJReXcyUWtGQk5rSXNUVUZCVFN4RlFVRkZMRU5CUVVNc1EwRkJRenMwUWtGRGNFUXNUMEZCVHl4TFFVRkxMRU5CUVVNc1EwRkJWeXhEUVVGRExFTkJRVU03YjBKQlF6bENMRU5CUVVNN1owSkJRMGdzUTBGQlF6dG5Ra0ZGUkN4VFFVRlRMRlZCUVZVc1EwRkJReXhEUVVGclFqdHZRa0ZEY0VNc1NVRkJTU3hQUVVGUExFTkJRVU1zUzBGQlN5eFJRVUZSTEVWQlFVVXNRMEZCUXp0M1FrRkRNVUlzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03YjBKQlEycENMRU5CUVVNN2VVSkJRVTBzUTBGQlF6dDNRa0ZEVGl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVEJDTEVOQlFXbENMRU5CUVVNN2IwSkJRM0JFTEVOQlFVTTdaMEpCUTBnc1EwRkJRenRuUWtGRlJDeFJRVUZSTEUxQlFVMHNSVUZCUlN4RFFVRkRPMjlDUVVObUxFdEJRVXNzU1VGQlNTeERRVUZETzI5Q1FVTldMRXRCUVVzc1NVRkJTVHQzUWtGRFVDeFBRVUZQTEZWQlFWVXNRMEZCUXl4TFFVRmxMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU03YjBKQlF6RkRMRXRCUVVzc1QwRkJUenQzUWtGRFZpeEpRVUZKTEV0QlFVc3NRMEZCUXl4UFFVRlBMRU5CUVVNc1MwRkJTeXhEUVVGRExFVkJRVVVzUTBGQlF6czBRa0ZEZWtJc1MwRkJTeXhEUVVGRExFOUJRVThzUTBGQlF5eFZRVUZWTEVOQlFVTXNRMEZCUXp0M1FrRkROVUlzUTBGQlF6czJRa0ZCVFN4RFFVRkRPelJDUVVOT0xGVkJRVlVzUTBGQlF5eExRVUYzUWl4RFFVRkRMRU5CUVVNN2QwSkJRM1pETEVOQlFVTTdkMEpCUTBRc1QwRkJUeXhEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETzI5Q1FVTm9RanQzUWtGRFJTeE5RVUZOTEVOQlFVTXNTMEZCU3l4RFFVRkRMRFpDUVVFMlFpeE5RVUZOTEVWQlFVVXNRMEZCUXl4RFFVRkRPM2RDUVVOd1JDeFBRVUZQTEVOQlFVTXNRMEZCUXp0blFrRkRZaXhEUVVGRE8yZENRVU5FTERaRVFVRTJSRHRaUVVNdlJDeERRVUZETzFsQlFVTXNUMEZCVHl4RFFVRlZMRVZCUVVVc1EwRkJRenRuUWtGRGNFSXNUVUZCVFN4RFFVRkRMRXRCUVVzc1EwRkJReXg1UWtGQmVVSXNUVUZCVFN4bFFVRmxMRXRCUVVzc1JVRkJSU3hEUVVGRExFTkJRVU03WjBKQlEzQkZMRTlCUVU4c1IwRkJSeXhEUVVGRE8xbEJRMklzUTBGQlF6dFJRVU5JTEVOQlFVTTdVVUZGUkN4TlFVRk5MR1ZCUVdVc1IwRkJSeXhSUVVGUkxFTkJRVU1zU1VGQmJVSXNRMEZCUXl4RFFVRkRPMUZCUTNSRUxFbEJRVWtzUTBGQlF5eGxRVUZsTEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExHVkJRV1VzUTBGQlF5eERRVUZETEUxQlFVMHNSVUZCUlN4RFFVRkRPMWxCUXpkRUxFOUJRVThzU1VGQlNTeERRVUZETzFGQlEyUXNRMEZCUXp0UlFVVkVMRWxCUVVrc1YwRkJWeXhIUVVGblFpeGxRVUU0UWl4RFFVRkRPMUZCUlRsRUxFMUJRVTBzVTBGQlV5eEhRVUZITEUxQlFVMHNRMEZCUXl4TlFVRk5MRU5CUVVNc1JVRkJSU3hGUVVGRkxGRkJRVkVzUTBGQlF5eERRVUZETzFGQlF6bERMRWxCUVVrc1RVRkJUU3hEUVVGRExFbEJRVWtzUTBGQlF5eGxRVUZsTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hUUVVGVE8xbEJRemxETEZkQlFWYzdaMEpCUTFJc1pVRkJlVU1zUTBGQlF5eFhRVUZYTEVOQlFVTXNTVUZCU1N4RlFVRkZMRU5CUVVNN1VVRkZiRVVzVDBGQlR5eE5RVUZOTEVOQlFVTXNTVUZCU1N4RFFVRkRMRmRCUVZjc1EwRkJReXhEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVkQlFWY3NSVUZCUlN4SFFVRlhMRVZCUVVVc1JVRkJSVHRaUVVOc1JTeE5RVUZOTEVkQlFVY3NSMEZCU1N4WFFVRXlRaXhEUVVGRExFZEJRWGRDTEVOQlFVTXNRMEZCUXp0WlFVTnVSU3hKUVVGSkxFZEJRVWM3WjBKQlEwd3NUMEZCVHl4TFFVRkxMRU5CUTFZc1IwRkJSeXhGUVVOSUxFZEJRWGRDTEVWQlEzaENMRWRCUzFrc1EwRkRZaXhEUVVGRE8xbEJRMG9zVDBGQlR5eEhRVUZITEVOQlFVTTdVVUZEWWl4RFFVRkRMRVZCUVVVc1NVRkJTU3hEUVVGRExFTkJRVU03U1VGRFdDeERRVUZESWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaWFXMXdiM0owSUh0Y2JpQWdURzluWjJWeVJtRmpkRzl5ZVN4Y2JpQWdURzluWjJsdVowTnZibVpwWnl4Y2JpQWdURzluWjJsdVowTnZiblJsZUhRc1hHNGdJRk4wY21sdVoweHBhMlVzWEc0Z0lGUm9aVzFsTEZ4dUlDQlVhR1Z0WlU5d2RHbHZiaXhjYmlBZ1ZHaGxiV1ZQY0hScGIyNUNlVXh2WjB4bGRtVnNMRnh1SUNCTWIyZG5aWElzWEc1OUlHWnliMjBnWENJdUwzUjVjR1Z6WENJN1hHNXBiWEJ2Y25RZ2V5QkRiMnh2Y21sNlpVOXdkR2x2Ym5Nc0lITjBlV3hsTENCVGRIbHNaV1JUZEhKcGJtY2dmU0JtY205dElGd2ljM1I1YkdWa0xYTjBjbWx1WnkxaWRXbHNaR1Z5WENJN1hHNXBiWEJ2Y25RZ2UxeHVJQ0JFWldaaGRXeDBURzluWjJsdVowTnZibVpwWnl4Y2JpQWdSR1ZtWVhWc2RGUm9aVzFsTEZ4dUlDQk1iMmRNWlhabGJDeGNiaUFnVG5WdFpYSnBZMHh2WjB4bGRtVnNjeXhjYm4wZ1puSnZiU0JjSWk0dlkyOXVjM1JoYm5SelhDSTdYRzVjYmk4cUtseHVJQ29nUUdSbGMyTnlhWEIwYVc5dUlFRWdiV2x1YVcxaGJDQnNiMmRuWlhJZ2FXMXdiR1Z0Wlc1MFlYUnBiMjR1WEc0Z0tpQkFjM1Z0YldGeWVTQk5hVzVwVEc5bloyVnlJR2x6SUdFZ2JHbG5hSFIzWldsbmFIUWdiRzluWjJsdVp5QmpiR0Z6Y3lCMGFHRjBJR2x0Y0d4bGJXVnVkSE1nZEdobElFeHZaMmRsY2lCcGJuUmxjbVpoWTJVdVhHNGdLaUJKZENCd2NtOTJhV1JsY3lCaVlYTnBZeUJzYjJkbmFXNW5JR1oxYm1OMGFXOXVZV3hwZEhrZ2QybDBhQ0J6ZFhCd2IzSjBJR1p2Y2lCa2FXWm1aWEpsYm5RZ2JHOW5JR3hsZG1Wc2N5d2dkbVZ5WW05emFYUjVMRnh1SUNvZ1kyOXVkR1Y0ZEMxaGQyRnlaU0JzYjJkbmFXNW5MQ0JoYm1RZ1kzVnpkRzl0YVhwaFlteGxJR1p2Y20xaGRIUnBibWN1WEc0Z0tpQkFjR0Z5WVcwZ2UzTjBjbWx1WjMwZ1kyOXVkR1Y0ZENBdElGUm9aU0JqYjI1MFpYaDBJQ2gwZVhCcFkyRnNiSGtnWTJ4aGMzTWdibUZ0WlNrZ2RHaHBjeUJzYjJkblpYSWdhWE1nWVhOemIyTnBZWFJsWkNCM2FYUm9YRzRnS2lCQWNHRnlZVzBnZTFCaGNuUnBZV3c4VEc5bloybHVaME52Ym1acFp6NTlJR052Ym1ZZ0xTQlBjSFJwYjI1aGJDQmpiMjVtYVdkMWNtRjBhVzl1SUhSdklHOTJaWEp5YVdSbElHZHNiMkpoYkNCelpYUjBhVzVuYzF4dUlDb2dRR05zWVhOeklFMXBibWxNYjJkblpYSmNiaUFxSUVCbGVHRnRjR3hsWEc0Z0tpQXZMeUJEY21WaGRHVWdZU0J1WlhjZ2JHOW5aMlZ5SUdadmNpQmhJR05zWVhOelhHNGdLaUJqYjI1emRDQnNiMmRuWlhJZ1BTQnVaWGNnVFdsdWFVeHZaMmRsY2lnblRYbERiR0Z6Y3ljcE8xeHVJQ3BjYmlBcUlDOHZJRXh2WnlCdFpYTnpZV2RsY3lCaGRDQmthV1ptWlhKbGJuUWdiR1YyWld4elhHNGdLaUJzYjJkblpYSXVhVzVtYnlnblZHaHBjeUJwY3lCaGJpQnBibVp2SUcxbGMzTmhaMlVuS1R0Y2JpQXFJR3h2WjJkbGNpNWtaV0oxWnlnblZHaHBjeUJwY3lCaElHUmxZblZuSUcxbGMzTmhaMlVuS1R0Y2JpQXFJR3h2WjJkbGNpNWxjbkp2Y2lnblUyOXRaWFJvYVc1bklIZGxiblFnZDNKdmJtY25LVHRjYmlBcVhHNGdLaUF2THlCRGNtVmhkR1VnWVNCamFHbHNaQ0JzYjJkblpYSWdabTl5SUdFZ2MzQmxZMmxtYVdNZ2JXVjBhRzlrWEc0Z0tpQmpiMjV6ZENCdFpYUm9iMlJNYjJkblpYSWdQU0JzYjJkblpYSXVabTl5S0NkdGVVMWxkR2h2WkNjcE8xeHVJQ29nYldWMGFHOWtURzluWjJWeUxuWmxjbUp2YzJVb0owUmxkR0ZwYkdWa0lHbHVabTl5YldGMGFXOXVKeXdnTWlrN1hHNGdLbHh1SUNvZ0x5OGdURzluSUhkcGRHZ2dZM1Z6ZEc5dElHTnZibVpwWjNWeVlYUnBiMjVjYmlBcUlHeHZaMmRsY2k1bWIzSW9KM053WldOcFlXeE5aWFJvYjJRbkxDQjdJSE4wZVd4bE9pQjBjblZsSUgwcExtbHVabThvSjFOMGVXeGxaQ0J0WlhOellXZGxKeWs3WEc0Z0tpOWNibVY0Y0c5eWRDQmpiR0Z6Y3lCTmFXNXBURzluWjJWeUlHbHRjR3hsYldWdWRITWdURzluWjJWeUlIdGNiaUFnWTI5dWMzUnlkV04wYjNJb1hHNGdJQ0FnY0hKdmRHVmpkR1ZrSUdOdmJuUmxlSFE2SUhOMGNtbHVaeXhjYmlBZ0lDQndjbTkwWldOMFpXUWdZMjl1Wmo4NklGQmhjblJwWVd3OFRHOW5aMmx1WjBOdmJtWnBaejVjYmlBZ0tTQjdmVnh1WEc0Z0lIQnliM1JsWTNSbFpDQmpiMjVtYVdjb1hHNGdJQ0FnYTJWNU9pQnJaWGx2WmlCTWIyZG5hVzVuUTI5dVptbG5YRzRnSUNrNklFeHZaMmRwYm1kRGIyNW1hV2RiYTJWNWIyWWdURzluWjJsdVowTnZibVpwWjEwZ2UxeHVJQ0FnSUdsbUlDaDBhR2x6TG1OdmJtWWdKaVlnYTJWNUlHbHVJSFJvYVhNdVkyOXVaaWtnY21WMGRYSnVJSFJvYVhNdVkyOXVabHRyWlhsZE8xeHVJQ0FnSUhKbGRIVnliaUJNYjJkbmFXNW5MbWRsZEVOdmJtWnBaeWdwVzJ0bGVWMDdYRzRnSUgxY2JseHVJQ0F2S2lwY2JpQWdJQ29nUUdSbGMyTnlhWEIwYVc5dUlFTnlaV0YwWlhNZ1lTQmphR2xzWkNCc2IyZG5aWElnWm05eUlHRWdjM0JsWTJsbWFXTWdiV1YwYUc5a0lHOXlJR052Ym5SbGVIUmNiaUFnSUNvZ1FITjFiVzFoY25rZ1VtVjBkWEp1Y3lCaElHNWxkeUJzYjJkblpYSWdhVzV6ZEdGdVkyVWdkMmwwYUNCMGFHVWdZM1Z5Y21WdWRDQmpiMjUwWlhoMElHVjRkR1Z1WkdWa0lHSjVJSFJvWlNCemNHVmphV1pwWldRZ2JXVjBhRzlrSUc1aGJXVmNiaUFnSUNvZ1FIQmhjbUZ0SUh0emRISnBibWNnZkNCR2RXNWpkR2x2Ym4wZ2JXVjBhRzlrSUMwZ1ZHaGxJRzFsZEdodlpDQnVZVzFsSUc5eUlHWjFibU4wYVc5dUlIUnZJR055WldGMFpTQmhJR3h2WjJkbGNpQm1iM0pjYmlBZ0lDb2dRSEJoY21GdElIdFFZWEowYVdGc1BFeHZaMmRwYm1kRGIyNW1hV2MrZlNCamIyNW1hV2NnTFNCUGNIUnBiMjVoYkNCamIyNW1hV2QxY21GMGFXOXVJSFJ2SUc5MlpYSnlhV1JsSUhObGRIUnBibWR6WEc0Z0lDQXFJRUJ3WVhKaGJTQjdMaTR1WVc1NWZTQmhjbWR6SUMwZ1FXUmthWFJwYjI1aGJDQmhjbWQxYldWdWRITWdkRzhnY0dGemN5QjBieUIwYUdVZ2JHOW5aMlZ5SUdaaFkzUnZjbmxjYmlBZ0lDb2dRSEpsZEhWeWJpQjdURzluWjJWeWZTQkJJRzVsZHlCc2IyZG5aWElnYVc1emRHRnVZMlVnWm05eUlIUm9aU0J6Y0dWamFXWnBaV1FnYldWMGFHOWtYRzRnSUNBcUwxeHVJQ0JtYjNJb1hHNGdJQ0FnYldWMGFHOWtQem9nYzNSeWFXNW5JSHdnS0NndUxpNWhjbWR6T2lCaGJubGJYU2tnUFQ0Z1lXNTVLU3hjYmlBZ0lDQmpiMjVtYVdjL09pQlFZWEowYVdGc1BFeHZaMmRwYm1kRGIyNW1hV2MrWEc0Z0lDazZJRXh2WjJkbGNpQjdYRzRnSUNBZ2JXVjBhRzlrSUQwZ2JXVjBhRzlrWEc0Z0lDQWdJQ0EvSUhSNWNHVnZaaUJ0WlhSb2IyUWdQVDA5SUZ3aWMzUnlhVzVuWENKY2JpQWdJQ0FnSUNBZ1B5QnRaWFJvYjJSY2JpQWdJQ0FnSUNBZ09pQnRaWFJvYjJRdWJtRnRaVnh1SUNBZ0lDQWdPaUIxYm1SbFptbHVaV1E3WEc1Y2JpQWdJQ0J5WlhSMWNtNGdibVYzSUZCeWIzaDVLSFJvYVhNc0lIdGNiaUFnSUNBZ0lHZGxkRG9nS0hSaGNtZGxkRG9nZEhsd1pXOW1JSFJvYVhNc0lIQTZJSE4wY21sdVp5QjhJSE41YldKdmJDd2djbVZqWldsMlpYSTZJR0Z1ZVNrZ1BUNGdlMXh1SUNBZ0lDQWdJQ0JqYjI1emRDQnlaWE4xYkhRZ1BTQlNaV1pzWldOMExtZGxkQ2gwWVhKblpYUXNJSEFzSUhKbFkyVnBkbVZ5S1R0Y2JpQWdJQ0FnSUNBZ2FXWWdLSEFnUFQwOUlGd2lZMjl1Wm1sblhDSXBJSHRjYmlBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnYm1WM0lGQnliM2g1S0hSb2FYTXVZMjl1Wm1sbkxDQjdYRzRnSUNBZ0lDQWdJQ0FnSUNCblpYUTZJQ2gwWVhKblpYUTZJSFI1Y0dWdlppQjBhR2x6TG1OdmJtWnBaeXdnY0RvZ2MzUnlhVzVuSUh3Z2MzbHRZbTlzS1NBOVBpQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lHbG1JQ2hqYjI1bWFXY2dKaVlnY0NCcGJpQmpiMjVtYVdjcFhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUdOdmJtWnBaMXR3SUdGeklHdGxlVzltSUV4dloyZHBibWREYjI1bWFXZGRPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z1VtVm1iR1ZqZEM1blpYUW9kR0Z5WjJWMExDQndMQ0J5WldObGFYWmxjaWs3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlMRnh1SUNBZ0lDQWdJQ0FnSUgwcE8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJR2xtSUNod0lEMDlQU0JjSW1OdmJuUmxlSFJjSWlrZ2UxeHVJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJpQmJjbVZ6ZFd4MExDQnRaWFJvYjJSZExtcHZhVzRvWENJdVhDSXBPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUJ5WlhOMWJIUTdYRzRnSUNBZ0lDQjlMRnh1SUNBZ0lIMHBPMXh1SUNCOVhHNWNiaUFnTHlvcVhHNGdJQ0FxSUVCa1pYTmpjbWx3ZEdsdmJpQkRjbVZoZEdWeklHRWdabTl5YldGMGRHVmtJR3h2WnlCemRISnBibWRjYmlBZ0lDb2dRSE4xYlcxaGNua2dSMlZ1WlhKaGRHVnpJR0VnYkc5bklITjBjbWx1WnlCM2FYUm9JSFJwYldWemRHRnRjQ3dnWTI5c2IzSmxaQ0JzYjJjZ2JHVjJaV3dzSUdOdmJuUmxlSFFzSUdGdVpDQnRaWE56WVdkbFhHNGdJQ0FxSUVCd1lYSmhiU0I3VEc5blRHVjJaV3g5SUd4bGRtVnNJQzBnVkdobElHeHZaeUJzWlhabGJDQm1iM0lnZEdocGN5QnRaWE56WVdkbFhHNGdJQ0FxSUVCd1lYSmhiU0I3VTNSeWFXNW5UR2xyWlNCOElFVnljbTl5ZlNCdFpYTnpZV2RsSUMwZ1ZHaGxJRzFsYzNOaFoyVWdkRzhnYkc5bklHOXlJR0Z1SUVWeWNtOXlJRzlpYW1WamRGeHVJQ0FnS2lCQWNHRnlZVzBnZTNOMGNtbHVaMzBnVzNOMFlXTnJYU0F0SUU5d2RHbHZibUZzSUhOMFlXTnJJSFJ5WVdObElIUnZJR2x1WTJ4MVpHVWdhVzRnZEdobElHeHZaMXh1SUNBZ0tpQkFjbVYwZFhKdUlIdHpkSEpwYm1kOUlFRWdabTl5YldGMGRHVmtJR3h2WnlCemRISnBibWNnZDJsMGFDQmhiR3dnWTI5dGNHOXVaVzUwYzF4dUlDQWdLaTljYmlBZ2NISnZkR1ZqZEdWa0lHTnlaV0YwWlV4dlp5aGNiaUFnSUNCc1pYWmxiRG9nVEc5blRHVjJaV3dzWEc0Z0lDQWdiV1Z6YzJGblpUb2dVM1J5YVc1blRHbHJaU0I4SUVWeWNtOXlMRnh1SUNBZ0lITjBZV05yUHpvZ2MzUnlhVzVuWEc0Z0lDazZJSE4wY21sdVp5QjdYRzRnSUNBZ1kyOXVjM1FnYkc5bk9pQnpkSEpwYm1kYlhTQTlJRnRkTzF4dUlDQWdJR052Ym5OMElITjBlV3hsSUQwZ2RHaHBjeTVqYjI1bWFXY29YQ0p6ZEhsc1pWd2lLVHRjYmlBZ0lDQnBaaUFvZEdocGN5NWpiMjVtYVdjb1hDSjBhVzFsYzNSaGJYQmNJaWtwSUh0Y2JpQWdJQ0FnSUdOdmJuTjBJR1JoZEdVZ1BTQnVaWGNnUkdGMFpTZ3BMblJ2U1ZOUFUzUnlhVzVuS0NrN1hHNGdJQ0FnSUNCamIyNXpkQ0IwYVcxbGMzUmhiWEFnUFNCemRIbHNaU0EvSUV4dloyZHBibWN1ZEdobGJXVW9aR0YwWlN3Z1hDSjBhVzFsYzNSaGJYQmNJaXdnYkdWMlpXd3BJRG9nWkdGMFpUdGNiaUFnSUNBZ0lHeHZaeTV3ZFhOb0tIUnBiV1Z6ZEdGdGNDazdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2FXWWdLSFJvYVhNdVkyOXVabWxuS0Z3aWJHOW5UR1YyWld4Y0lpa3BJSHRjYmlBZ0lDQWdJR052Ym5OMElHeDJiRG9nYzNSeWFXNW5JRDBnYzNSNWJHVmNiaUFnSUNBZ0lDQWdQeUJNYjJkbmFXNW5MblJvWlcxbEtHeGxkbVZzTENCY0lteHZaMHhsZG1Wc1hDSXNJR3hsZG1Wc0tWeHVJQ0FnSUNBZ0lDQTZJR3hsZG1Wc08xeHVJQ0FnSUNBZ2JHOW5MbkIxYzJnb2JIWnNLVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQnBaaUFvZEdocGN5NWpiMjVtYVdjb1hDSmpiMjUwWlhoMFhDSXBLU0I3WEc0Z0lDQWdJQ0JqYjI1emRDQmpiMjUwWlhoME9pQnpkSEpwYm1jZ1BTQnpkSGxzWlZ4dUlDQWdJQ0FnSUNBL0lFeHZaMmRwYm1jdWRHaGxiV1VvZEdocGN5NWpiMjUwWlhoMExDQmNJbU5zWVhOelhDSXNJR3hsZG1Wc0tWeHVJQ0FnSUNBZ0lDQTZJSFJvYVhNdVkyOXVkR1Y0ZER0Y2JpQWdJQ0FnSUd4dlp5NXdkWE5vS0dOdmJuUmxlSFFwTzF4dUlDQWdJSDFjYmx4dUlDQWdJR2xtSUNoMGFHbHpMbU52Ym1acFp5aGNJbU52Y25KbGJHRjBhVzl1U1dSY0lpa3BJSHRjYmlBZ0lDQWdJSHRjYmlBZ0lDQWdJQ0FnWTI5dWMzUWdhV1E2SUhOMGNtbHVaeUE5SUhOMGVXeGxYRzRnSUNBZ0lDQWdJQ0FnUHlCTWIyZG5hVzVuTG5Sb1pXMWxLSFJvYVhNdVkyOXVabWxuS0Z3aVkyOXljbVZzWVhScGIyNUpaRndpS1NFdWRHOVRkSEpwYm1jb0tTd2dYQ0pwWkZ3aUxDQnNaWFpsYkNsY2JpQWdJQ0FnSUNBZ0lDQTZJSFJvYVhNdVkyOXVabWxuS0Z3aVkyOXljbVZzWVhScGIyNUpaRndpS1NFdWRHOVRkSEpwYm1jb0tUdGNiaUFnSUNBZ0lDQWdiRzluTG5CMWMyZ29hV1FwTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJSDFjYmx4dUlDQWdJR052Ym5OMElHMXpaem9nYzNSeWFXNW5JRDBnYzNSNWJHVmNiaUFnSUNBZ0lEOGdURzluWjJsdVp5NTBhR1Z0WlNoY2JpQWdJQ0FnSUNBZ0lDQjBlWEJsYjJZZ2JXVnpjMkZuWlNBOVBUMGdYQ0p6ZEhKcGJtZGNJaUEvSUcxbGMzTmhaMlVnT2lBb2JXVnpjMkZuWlNCaGN5QkZjbkp2Y2lrdWJXVnpjMkZuWlN4Y2JpQWdJQ0FnSUNBZ0lDQmNJbTFsYzNOaFoyVmNJaXhjYmlBZ0lDQWdJQ0FnSUNCc1pYWmxiRnh1SUNBZ0lDQWdJQ0FwWEc0Z0lDQWdJQ0E2SUhSNWNHVnZaaUJ0WlhOellXZGxJRDA5UFNCY0luTjBjbWx1WjF3aVhHNGdJQ0FnSUNBZ0lEOGdiV1Z6YzJGblpWeHVJQ0FnSUNBZ0lDQTZJQ2h0WlhOellXZGxJR0Z6SUVWeWNtOXlLUzV0WlhOellXZGxPMXh1SUNBZ0lHeHZaeTV3ZFhOb0tHMXpaeWs3WEc0Z0lDQWdhV1lnS0hOMFlXTnJJSHg4SUcxbGMzTmhaMlVnYVc1emRHRnVZMlZ2WmlCRmNuSnZjaWtnZTF4dUlDQWdJQ0FnYzNSaFkyc2dQU0J6ZEhsc1pWeHVJQ0FnSUNBZ0lDQS9JRXh2WjJkcGJtY3VkR2hsYldVb1hHNGdJQ0FnSUNBZ0lDQWdJQ0FvYzNSaFkyc2dmSHdnS0cxbGMzTmhaMlVnWVhNZ1JYSnliM0lwTG5OMFlXTnJLU0JoY3lCemRISnBibWNzWEc0Z0lDQWdJQ0FnSUNBZ0lDQmNJbk4wWVdOclhDSXNYRzRnSUNBZ0lDQWdJQ0FnSUNCc1pYWmxiRnh1SUNBZ0lDQWdJQ0FnSUNsY2JpQWdJQ0FnSUNBZ09pQnpkR0ZqYXp0Y2JpQWdJQ0FnSUd4dlp5NXdkWE5vS0dCY1hHNVRkR0ZqYXlCMGNtRmpaVHBjWEc0a2UzTjBZV05yZldBcE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUhKbGRIVnliaUJzYjJjdWFtOXBiaWgwYUdsekxtTnZibVpwWnloY0luTmxjR0Z5WVhSdmNsd2lLU0JoY3lCemRISnBibWNwTzF4dUlDQjlYRzVjYmlBZ0x5b3FYRzRnSUNBcUlFQmtaWE5qY21sd2RHbHZiaUJNYjJkeklHRWdiV1Z6YzJGblpTQjNhWFJvSUhSb1pTQnpjR1ZqYVdacFpXUWdiRzluSUd4bGRtVnNYRzRnSUNBcUlFQnpkVzF0WVhKNUlFTm9aV05yY3lCcFppQjBhR1VnYldWemMyRm5aU0J6YUc5MWJHUWdZbVVnYkc5bloyVmtJR0poYzJWa0lHOXVJSFJvWlNCamRYSnlaVzUwSUd4dlp5QnNaWFpsYkN4Y2JpQWdJQ29nZEdobGJpQjFjMlZ6SUhSb1pTQmhjSEJ5YjNCeWFXRjBaU0JqYjI1emIyeGxJRzFsZEdodlpDQjBieUJ2ZFhSd2RYUWdkR2hsSUdadmNtMWhkSFJsWkNCc2IyZGNiaUFnSUNvZ1FIQmhjbUZ0SUh0TWIyZE1aWFpsYkgwZ2JHVjJaV3dnTFNCVWFHVWdiRzluSUd4bGRtVnNJRzltSUhSb1pTQnRaWE56WVdkbFhHNGdJQ0FxSUVCd1lYSmhiU0I3VTNSeWFXNW5UR2xyWlNCOElFVnljbTl5ZlNCdGMyY2dMU0JVYUdVZ2JXVnpjMkZuWlNCMGJ5QmlaU0JzYjJkblpXUWdiM0lnWVc0Z1JYSnliM0lnYjJKcVpXTjBYRzRnSUNBcUlFQndZWEpoYlNCN2MzUnlhVzVuZlNCYmMzUmhZMnRkSUMwZ1QzQjBhVzl1WVd3Z2MzUmhZMnNnZEhKaFkyVWdkRzhnYVc1amJIVmtaU0JwYmlCMGFHVWdiRzluWEc0Z0lDQXFJRUJ5WlhSMWNtNGdlM1p2YVdSOVhHNGdJQ0FxTDF4dUlDQndjbTkwWldOMFpXUWdiRzluS0Z4dUlDQWdJR3hsZG1Wc09pQk1iMmRNWlhabGJDeGNiaUFnSUNCdGMyYzZJRk4wY21sdVoweHBhMlVnZkNCRmNuSnZjaXhjYmlBZ0lDQnpkR0ZqYXo4NklITjBjbWx1WjF4dUlDQXBPaUIyYjJsa0lIdGNiaUFnSUNCcFppQW9YRzRnSUNBZ0lDQk9kVzFsY21salRHOW5UR1YyWld4elczUm9hWE11WTI5dVptbG5LRndpYkdWMlpXeGNJaWtnWVhNZ1RHOW5UR1YyWld4ZElEeGNiaUFnSUNBZ0lFNTFiV1Z5YVdOTWIyZE1aWFpsYkhOYmJHVjJaV3hkWEc0Z0lDQWdLVnh1SUNBZ0lDQWdjbVYwZFhKdU8xeHVJQ0FnSUd4bGRDQnRaWFJvYjJRN1hHNGdJQ0FnYzNkcGRHTm9JQ2hzWlhabGJDa2dlMXh1SUNBZ0lDQWdZMkZ6WlNCTWIyZE1aWFpsYkM1cGJtWnZPbHh1SUNBZ0lDQWdJQ0J0WlhSb2IyUWdQU0JqYjI1emIyeGxMbXh2Wnp0Y2JpQWdJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdJQ0JqWVhObElFeHZaMHhsZG1Wc0xuWmxjbUp2YzJVNlhHNGdJQ0FnSUNCallYTmxJRXh2WjB4bGRtVnNMbVJsWW5Wbk9seHVJQ0FnSUNBZ0lDQnRaWFJvYjJRZ1BTQmpiMjV6YjJ4bExtUmxZblZuTzF4dUlDQWdJQ0FnSUNCaWNtVmhhenRjYmlBZ0lDQWdJR05oYzJVZ1RHOW5UR1YyWld3dVpYSnliM0k2WEc0Z0lDQWdJQ0FnSUcxbGRHaHZaQ0E5SUdOdmJuTnZiR1V1WlhKeWIzSTdYRzRnSUNBZ0lDQWdJR0p5WldGck8xeHVJQ0FnSUNBZ1pHVm1ZWFZzZERwY2JpQWdJQ0FnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0Z3aVNXNTJZV3hwWkNCc2IyY2diR1YyWld4Y0lpazdYRzRnSUNBZ2ZWeHVJQ0FnSUcxbGRHaHZaQ2gwYUdsekxtTnlaV0YwWlV4dlp5aHNaWFpsYkN3Z2JYTm5MQ0J6ZEdGamF5a3BPMXh1SUNCOVhHNWNiaUFnTHlvcVhHNGdJQ0FxSUVCa1pYTmpjbWx3ZEdsdmJpQk1iMmR6SUdFZ2JXVnpjMkZuWlNCaGRDQjBhR1VnYzJsc2JIa2diR1YyWld4Y2JpQWdJQ29nUUhOMWJXMWhjbmtnVEc5bmN5QmhJRzFsYzNOaFoyVWdZWFFnZEdobElITnBiR3g1SUd4bGRtVnNJR2xtSUhSb1pTQmpkWEp5Wlc1MElIWmxjbUp2YzJsMGVTQnpaWFIwYVc1bklHRnNiRzkzY3lCcGRGeHVJQ0FnS2lCQWNHRnlZVzBnZTFOMGNtbHVaMHhwYTJWOUlHMXpaeUF0SUZSb1pTQnRaWE56WVdkbElIUnZJR0psSUd4dloyZGxaRnh1SUNBZ0tpQkFjR0Z5WVcwZ2UyNTFiV0psY24wZ1czWmxjbUp2YzJsMGVUMHdYU0F0SUZSb1pTQjJaWEppYjNOcGRIa2diR1YyWld3Z2IyWWdkR2hsSUcxbGMzTmhaMlZjYmlBZ0lDb2dRSEpsZEhWeWJpQjdkbTlwWkgxY2JpQWdJQ292WEc0Z0lITnBiR3g1S0cxelp6b2dVM1J5YVc1blRHbHJaU3dnZG1WeVltOXphWFI1T2lCdWRXMWlaWElnUFNBd0tUb2dkbTlwWkNCN1hHNGdJQ0FnYVdZZ0tDaDBhR2x6TG1OdmJtWnBaeWhjSW5abGNtSnZjMlZjSWlrZ1lYTWdiblZ0WW1WeUtTQStQU0IyWlhKaWIzTnBkSGtwWEc0Z0lDQWdJQ0IwYUdsekxteHZaeWhNYjJkTVpYWmxiQzUyWlhKaWIzTmxMQ0J0YzJjcE8xeHVJQ0I5WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRUJrWlhOamNtbHdkR2x2YmlCTWIyZHpJR0VnYldWemMyRm5aU0JoZENCMGFHVWdkbVZ5WW05elpTQnNaWFpsYkZ4dUlDQWdLaUJBYzNWdGJXRnllU0JNYjJkeklHRWdiV1Z6YzJGblpTQmhkQ0IwYUdVZ2RtVnlZbTl6WlNCc1pYWmxiQ0JwWmlCMGFHVWdZM1Z5Y21WdWRDQjJaWEppYjNOcGRIa2djMlYwZEdsdVp5QmhiR3h2ZDNNZ2FYUmNiaUFnSUNvZ1FIQmhjbUZ0SUh0VGRISnBibWRNYVd0bGZTQnRjMmNnTFNCVWFHVWdiV1Z6YzJGblpTQjBieUJpWlNCc2IyZG5aV1JjYmlBZ0lDb2dRSEJoY21GdElIdHVkVzFpWlhKOUlGdDJaWEppYjNOcGRIazlNRjBnTFNCVWFHVWdkbVZ5WW05emFYUjVJR3hsZG1Wc0lHOW1JSFJvWlNCdFpYTnpZV2RsWEc0Z0lDQXFJRUJ5WlhSMWNtNGdlM1p2YVdSOVhHNGdJQ0FxTDF4dUlDQjJaWEppYjNObEtHMXpaem9nVTNSeWFXNW5UR2xyWlN3Z2RtVnlZbTl6YVhSNU9pQnVkVzFpWlhJZ1BTQXdLVG9nZG05cFpDQjdYRzRnSUNBZ2FXWWdLQ2gwYUdsekxtTnZibVpwWnloY0luWmxjbUp2YzJWY0lpa2dZWE1nYm5WdFltVnlLU0ErUFNCMlpYSmliM05wZEhrcFhHNGdJQ0FnSUNCMGFHbHpMbXh2WnloTWIyZE1aWFpsYkM1MlpYSmliM05sTENCdGMyY3BPMXh1SUNCOVhHNWNiaUFnTHlvcVhHNGdJQ0FxSUVCa1pYTmpjbWx3ZEdsdmJpQk1iMmR6SUdFZ2JXVnpjMkZuWlNCaGRDQjBhR1VnYVc1bWJ5QnNaWFpsYkZ4dUlDQWdLaUJBYzNWdGJXRnllU0JNYjJkeklHRWdiV1Z6YzJGblpTQmhkQ0IwYUdVZ2FXNW1ieUJzWlhabGJDQm1iM0lnWjJWdVpYSmhiQ0JoY0hCc2FXTmhkR2x2YmlCcGJtWnZjbTFoZEdsdmJseHVJQ0FnS2lCQWNHRnlZVzBnZTFOMGNtbHVaMHhwYTJWOUlHMXpaeUF0SUZSb1pTQnRaWE56WVdkbElIUnZJR0psSUd4dloyZGxaRnh1SUNBZ0tpQkFjbVYwZFhKdUlIdDJiMmxrZlZ4dUlDQWdLaTljYmlBZ2FXNW1ieWh0YzJjNklGTjBjbWx1WjB4cGEyVXBPaUIyYjJsa0lIdGNiaUFnSUNCMGFHbHpMbXh2WnloTWIyZE1aWFpsYkM1cGJtWnZMQ0J0YzJjcE8xeHVJQ0I5WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRUJrWlhOamNtbHdkR2x2YmlCTWIyZHpJR0VnYldWemMyRm5aU0JoZENCMGFHVWdaR1ZpZFdjZ2JHVjJaV3hjYmlBZ0lDb2dRSE4xYlcxaGNua2dURzluY3lCaElHMWxjM05oWjJVZ1lYUWdkR2hsSUdSbFluVm5JR3hsZG1Wc0lHWnZjaUJrWlhSaGFXeGxaQ0IwY205MVlteGxjMmh2YjNScGJtY2dhVzVtYjNKdFlYUnBiMjVjYmlBZ0lDb2dRSEJoY21GdElIdFRkSEpwYm1kTWFXdGxmU0J0YzJjZ0xTQlVhR1VnYldWemMyRm5aU0IwYnlCaVpTQnNiMmRuWldSY2JpQWdJQ29nUUhKbGRIVnliaUI3ZG05cFpIMWNiaUFnSUNvdlhHNGdJR1JsWW5WbktHMXpaem9nVTNSeWFXNW5UR2xyWlNrNklIWnZhV1FnZTF4dUlDQWdJSFJvYVhNdWJHOW5LRXh2WjB4bGRtVnNMbVJsWW5WbkxDQnRjMmNwTzF4dUlDQjlYRzVjYmlBZ0x5b3FYRzRnSUNBcUlFQmtaWE5qY21sd2RHbHZiaUJNYjJkeklHRWdiV1Z6YzJGblpTQmhkQ0IwYUdVZ1pYSnliM0lnYkdWMlpXeGNiaUFnSUNvZ1FITjFiVzFoY25rZ1RHOW5jeUJoSUcxbGMzTmhaMlVnWVhRZ2RHaGxJR1Z5Y205eUlHeGxkbVZzSUdadmNpQmxjbkp2Y25NZ1lXNWtJR1Y0WTJWd2RHbHZibk5jYmlBZ0lDb2dRSEJoY21GdElIdFRkSEpwYm1kTWFXdGxJSHdnUlhKeWIzSjlJRzF6WnlBdElGUm9aU0J0WlhOellXZGxJSFJ2SUdKbElHeHZaMmRsWkNCdmNpQmhiaUJGY25KdmNpQnZZbXBsWTNSY2JpQWdJQ29nUUhKbGRIVnliaUI3ZG05cFpIMWNiaUFnSUNvdlhHNGdJR1Z5Y205eUtHMXpaem9nVTNSeWFXNW5UR2xyWlNCOElFVnljbTl5S1RvZ2RtOXBaQ0I3WEc0Z0lDQWdkR2hwY3k1c2IyY29URzluVEdWMlpXd3VaWEp5YjNJc0lHMXpaeWs3WEc0Z0lIMWNibHh1SUNBdktpcGNiaUFnSUNvZ1FHUmxjMk55YVhCMGFXOXVJRlZ3WkdGMFpYTWdkR2hsSUd4dloyZGxjaUJqYjI1bWFXZDFjbUYwYVc5dVhHNGdJQ0FxSUVCemRXMXRZWEo1SUUxbGNtZGxjeUIwYUdVZ2NISnZkbWxrWldRZ1kyOXVabWxuZFhKaGRHbHZiaUIzYVhSb0lIUm9aU0JsZUdsemRHbHVaeUJqYjI1bWFXZDFjbUYwYVc5dVhHNGdJQ0FxSUVCd1lYSmhiU0I3VUdGeWRHbGhiRHhNYjJkbmFXNW5RMjl1Wm1sblBuMGdZMjl1Wm1sbklDMGdWR2hsSUdOdmJtWnBaM1Z5WVhScGIyNGdiM0IwYVc5dWN5QjBieUJoY0hCc2VWeHVJQ0FnS2lCQWNtVjBkWEp1SUh0MmIybGtmVnh1SUNBZ0tpOWNiaUFnYzJWMFEyOXVabWxuS0dOdmJtWnBaem9nVUdGeWRHbGhiRHhNYjJkbmFXNW5RMjl1Wm1sblBpazZJSFp2YVdRZ2UxeHVJQ0FnSUhSb2FYTXVZMjl1WmlBOUlIc2dMaTR1S0hSb2FYTXVZMjl1WmlCOGZDQjdmU2tzSUM0dUxtTnZibVpwWnlCOU8xeHVJQ0I5WEc1OVhHNWNiaThxS2x4dUlDb2dRR1JsYzJOeWFYQjBhVzl1SUVFZ2MzUmhkR2xqSUdOc1lYTnpJR1p2Y2lCdFlXNWhaMmx1WnlCc2IyZG5hVzVuSUc5d1pYSmhkR2x2Ym5OY2JpQXFJRUJ6ZFcxdFlYSjVJRlJvWlNCTWIyZG5hVzVuSUdOc1lYTnpJSEJ5YjNacFpHVnpJR0VnWTJWdWRISmhiR2w2WldRZ2JHOW5aMmx1WnlCdFpXTm9ZVzVwYzIwZ2QybDBhQ0J6ZFhCd2IzSjBJR1p2Y2x4dUlDb2daR2xtWm1WeVpXNTBJR3h2WnlCc1pYWmxiSE1zSUhabGNtSnZjMmwwZVN3Z1lXNWtJSE4wZVd4cGJtY3VJRWwwSUhWelpYTWdZU0J6YVc1bmJHVjBiMjRnY0dGMGRHVnliaUIwYnlCdFlXbHVkR0ZwYmlCaElHZHNiMkpoYkZ4dUlDb2diRzluWjJWeUlHbHVjM1JoYm1ObElHRnVaQ0JoYkd4dmQzTWdZM0psWVhScGJtY2djM0JsWTJsbWFXTWdiRzluWjJWeWN5Qm1iM0lnWkdsbVptVnlaVzUwSUdOc1lYTnpaWE1nWVc1a0lHMWxkR2h2WkhNdVhHNGdLaUJBWTJ4aGMzTWdURzluWjJsdVoxeHVJQ29nUUdWNFlXMXdiR1ZjYmlBcUlDOHZJRk5sZENCbmJHOWlZV3dnWTI5dVptbG5kWEpoZEdsdmJseHVJQ29nVEc5bloybHVaeTV6WlhSRGIyNW1hV2NvZXlCc1pYWmxiRG9nVEc5blRHVjJaV3d1WkdWaWRXY3NJSE4wZVd4bE9pQjBjblZsSUgwcE8xeHVJQ3BjYmlBcUlDOHZJRWRsZENCaElHeHZaMmRsY2lCbWIzSWdZU0J6Y0dWamFXWnBZeUJqYkdGemMxeHVJQ29nWTI5dWMzUWdiRzluWjJWeUlEMGdURzluWjJsdVp5NW1iM0lvSjAxNVEyeGhjM01uS1R0Y2JpQXFYRzRnS2lBdkx5Qk1iMmNnYldWemMyRm5aWE1nWVhRZ1pHbG1abVZ5Wlc1MElHeGxkbVZzYzF4dUlDb2diRzluWjJWeUxtbHVabThvSjBGd2NHeHBZMkYwYVc5dUlITjBZWEowWldRbktUdGNiaUFxSUd4dloyZGxjaTVrWldKMVp5Z25VSEp2WTJWemMybHVaeUJrWVhSaExpNHVKeWs3WEc0Z0tseHVJQ29nTHk4Z1RHOW5JSGRwZEdnZ1kyOXVkR1Y0ZEZ4dUlDb2dZMjl1YzNRZ2JXVjBhRzlrVEc5bloyVnlJRDBnVEc5bloybHVaeTVtYjNJb0owMTVRMnhoYzNNdWJYbE5aWFJvYjJRbktUdGNiaUFxSUcxbGRHaHZaRXh2WjJkbGNpNTJaWEppYjNObEtDZEVaWFJoYVd4bFpDQnZjR1Z5WVhScGIyNGdhVzVtYjNKdFlYUnBiMjRuTENBeEtUdGNiaUFxWEc0Z0tpQXZMeUJNYjJjZ1pYSnliM0p6WEc0Z0tpQjBjbmtnZTF4dUlDb2dJQ0F2THlCemIyMWxJRzl3WlhKaGRHbHZibHh1SUNvZ2ZTQmpZWFJqYUNBb1pYSnliM0lwSUh0Y2JpQXFJQ0FnYkc5bloyVnlMbVZ5Y205eUtHVnljbTl5S1R0Y2JpQXFJSDFjYmlBcUlFQnRaWEp0WVdsa1hHNGdLaUJqYkdGemMwUnBZV2R5WVcxY2JpQXFJQ0FnWTJ4aGMzTWdURzluWjJWeUlIdGNiaUFxSUNBZ0lDQThQR2x1ZEdWeVptRmpaVDQrWEc0Z0tpQWdJQ0FnSzJadmNpaHRaWFJvYjJRc0lHTnZibVpwWnl3Z0xpNHVZWEpuY3lsY2JpQXFJQ0FnSUNBcmMybHNiSGtvYlhObkxDQjJaWEppYjNOcGRIa3BYRzRnS2lBZ0lDQWdLM1psY21KdmMyVW9iWE5uTENCMlpYSmliM05wZEhrcFhHNGdLaUFnSUNBZ0sybHVabThvYlhObktWeHVJQ29nSUNBZ0lDdGtaV0oxWnlodGMyY3BYRzRnS2lBZ0lDQWdLMlZ5Y205eUtHMXpaeWxjYmlBcUlDQWdJQ0FyYzJWMFEyOXVabWxuS0dOdmJtWnBaeWxjYmlBcUlDQWdmVnh1SUNwY2JpQXFJQ0FnWTJ4aGMzTWdURzluWjJsdVp5QjdYRzRnS2lBZ0lDQWdMV2RzYjJKaGJEb2dURzluWjJWeVhHNGdLaUFnSUNBZ0xWOW1ZV04wYjNKNU9pQk1iMmRuWlhKR1lXTjBiM0o1WEc0Z0tpQWdJQ0FnTFY5amIyNW1hV2M2SUV4dloyZHBibWREYjI1bWFXZGNiaUFxSUNBZ0lDQXJjMlYwUm1GamRHOXllU2htWVdOMGIzSjVLVnh1SUNvZ0lDQWdJQ3R6WlhSRGIyNW1hV2NvWTI5dVptbG5LVnh1SUNvZ0lDQWdJQ3RuWlhSRGIyNW1hV2NvS1Z4dUlDb2dJQ0FnSUN0blpYUW9LVnh1SUNvZ0lDQWdJQ3QyWlhKaWIzTmxLRzF6Wnl3Z2RtVnlZbTl6YVhSNUtWeHVJQ29nSUNBZ0lDdHBibVp2S0cxelp5bGNiaUFxSUNBZ0lDQXJaR1ZpZFdjb2JYTm5LVnh1SUNvZ0lDQWdJQ3R6YVd4c2VTaHRjMmNwWEc0Z0tpQWdJQ0FnSzJWeWNtOXlLRzF6WnlsY2JpQXFJQ0FnSUNBclptOXlLRzlpYW1WamRDd2dZMjl1Wm1sbkxDQXVMaTVoY21kektWeHVJQ29nSUNBZ0lDdGlaV05oZFhObEtISmxZWE52Yml3Z2FXUXBYRzRnS2lBZ0lDQWdLM1JvWlcxbEtIUmxlSFFzSUhSNWNHVXNJR3h2WjJkbGNreGxkbVZzTENCMFpXMXdiR0YwWlNsY2JpQXFJQ0FnZlZ4dUlDcGNiaUFxSUNBZ1kyeGhjM01nVFdsdWFVeHZaMmRsY2lCN1hHNGdLaUFnSUNBZ0syTnZibk4wY25WamRHOXlLR052Ym5SbGVIUXNJR052Ym1ZL0tWeHVJQ29nSUNCOVhHNGdLbHh1SUNvZ0lDQk1iMmRuYVc1bklDNHVQaUJNYjJkblpYSWdPaUJqY21WaGRHVnpYRzRnS2lBZ0lFeHZaMmRwYm1jZ0xpNCtJRTFwYm1sTWIyZG5aWElnT2lCamNtVmhkR1Z6SUdKNUlHUmxabUYxYkhSY2JpQXFMMXh1Wlhod2IzSjBJR05zWVhOeklFeHZaMmRwYm1jZ2UxeHVJQ0F2S2lwY2JpQWdJQ29nUUdSbGMyTnlhWEIwYVc5dUlGUm9aU0JuYkc5aVlXd2diRzluWjJWeUlHbHVjM1JoYm1ObFhHNGdJQ0FxSUVCemRXMXRZWEo1SUVFZ2MybHVaMnhsZEc5dUlHbHVjM1JoYm1ObElHOW1JRXh2WjJkbGNpQjFjMlZrSUdadmNpQm5iRzlpWVd3Z2JHOW5aMmx1WjF4dUlDQWdLaTljYmlBZ2NISnBkbUYwWlNCemRHRjBhV01nWjJ4dlltRnNQem9nVEc5bloyVnlPMXh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkFaR1Z6WTNKcGNIUnBiMjRnUm1GamRHOXllU0JtZFc1amRHbHZiaUJtYjNJZ1kzSmxZWFJwYm1jZ2JHOW5aMlZ5SUdsdWMzUmhibU5sYzF4dUlDQWdLaUJBYzNWdGJXRnllU0JCSUdaMWJtTjBhVzl1SUhSb1lYUWdZM0psWVhSbGN5QnVaWGNnVEc5bloyVnlJR2x1YzNSaGJtTmxjeTRnUW5rZ1pHVm1ZWFZzZEN3Z2FYUWdZM0psWVhSbGN5QmhJRTFwYm1sTWIyZG5aWEl1WEc0Z0lDQXFMMXh1SUNCd2NtbDJZWFJsSUhOMFlYUnBZeUJmWm1GamRHOXllVG9nVEc5bloyVnlSbUZqZEc5eWVTQTlJQ2hjYmlBZ0lDQnZZbXBsWTNRNklITjBjbWx1Wnl4Y2JpQWdJQ0JqYjI1bWFXYy9PaUJRWVhKMGFXRnNQRXh2WjJkcGJtZERiMjVtYVdjK1hHNGdJQ2tnUFQ0Z2UxeHVJQ0FnSUhKbGRIVnliaUJ1WlhjZ1RXbHVhVXh2WjJkbGNpaHZZbXBsWTNRc0lHTnZibVpwWnlrN1hHNGdJSDA3WEc0Z0lDOHFLbHh1SUNBZ0tpQkFaR1Z6WTNKcGNIUnBiMjRnUTI5dVptbG5kWEpoZEdsdmJpQm1iM0lnZEdobElHeHZaMmRwYm1jZ2MzbHpkR1Z0WEc0Z0lDQXFJRUJ6ZFcxdFlYSjVJRk4wYjNKbGN5QjBhR1VnWjJ4dlltRnNJR3h2WjJkcGJtY2dZMjl1Wm1sbmRYSmhkR2x2YmlCcGJtTnNkV1JwYm1jZ2RtVnlZbTl6YVhSNUxDQnNiMmNnYkdWMlpXd3NJSE4wZVd4cGJtY3NJR0Z1WkNCbWIzSnRZWFIwYVc1bklITmxkSFJwYm1kelhHNGdJQ0FxTDF4dUlDQndjbWwyWVhSbElITjBZWFJwWXlCZlkyOXVabWxuT2lCTWIyZG5hVzVuUTI5dVptbG5JRDBnUkdWbVlYVnNkRXh2WjJkcGJtZERiMjVtYVdjN1hHNWNiaUFnY0hKcGRtRjBaU0JqYjI1emRISjFZM1J2Y2lncElIdDlYRzVjYmlBZ0x5b3FYRzRnSUNBcUlFQmtaWE5qY21sd2RHbHZiaUJUWlhSeklIUm9aU0JtWVdOMGIzSjVJR1oxYm1OMGFXOXVJR1p2Y2lCamNtVmhkR2x1WnlCc2IyZG5aWElnYVc1emRHRnVZMlZ6WEc0Z0lDQXFJRUJ6ZFcxdFlYSjVJRUZzYkc5M2N5QmpkWE4wYjIxcGVtbHVaeUJvYjNjZ2JHOW5aMlZ5SUdsdWMzUmhibU5sY3lCaGNtVWdZM0psWVhSbFpGeHVJQ0FnS2lCQWNHRnlZVzBnZTB4dloyZGxja1poWTNSdmNubDlJR1poWTNSdmNua2dMU0JVYUdVZ1ptRmpkRzl5ZVNCbWRXNWpkR2x2YmlCMGJ5QjFjMlVnWm05eUlHTnlaV0YwYVc1bklHeHZaMmRsY25OY2JpQWdJQ29nUUhKbGRIVnliaUI3ZG05cFpIMWNiaUFnSUNvdlhHNGdJSE4wWVhScFl5QnpaWFJHWVdOMGIzSjVLR1poWTNSdmNuazZJRXh2WjJkbGNrWmhZM1J2Y25rcElIdGNiaUFnSUNCTWIyZG5hVzVuTGw5bVlXTjBiM0o1SUQwZ1ptRmpkRzl5ZVR0Y2JpQWdmVnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkFaR1Z6WTNKcGNIUnBiMjRnVlhCa1lYUmxjeUIwYUdVZ1oyeHZZbUZzSUd4dloyZHBibWNnWTI5dVptbG5kWEpoZEdsdmJseHVJQ0FnS2lCQWMzVnRiV0Z5ZVNCQmJHeHZkM01nZFhCa1lYUnBibWNnZEdobElHZHNiMkpoYkNCc2IyZG5hVzVuSUdOdmJtWnBaM1Z5WVhScGIyNGdkMmwwYUNCdVpYY2djMlYwZEdsdVozTmNiaUFnSUNvZ1FIQmhjbUZ0SUh0UVlYSjBhV0ZzUEV4dloyZHBibWREYjI1bWFXYytmU0JqYjI1bWFXY2dMU0JVYUdVZ1kyOXVabWxuZFhKaGRHbHZiaUJ2Y0hScGIyNXpJSFJ2SUdGd2NHeDVYRzRnSUNBcUlFQnlaWFIxY200Z2UzWnZhV1I5WEc0Z0lDQXFMMXh1SUNCemRHRjBhV01nYzJWMFEyOXVabWxuS0dOdmJtWnBaem9nVUdGeWRHbGhiRHhNYjJkbmFXNW5RMjl1Wm1sblBpa2dlMXh1SUNBZ0lFOWlhbVZqZEM1aGMzTnBaMjRvZEdocGN5NWZZMjl1Wm1sbkxDQmpiMjVtYVdjcE8xeHVJQ0I5WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRUJrWlhOamNtbHdkR2x2YmlCSFpYUnpJR0VnWTI5d2VTQnZaaUIwYUdVZ1kzVnljbVZ1ZENCbmJHOWlZV3dnYkc5bloybHVaeUJqYjI1bWFXZDFjbUYwYVc5dVhHNGdJQ0FxSUVCemRXMXRZWEo1SUZKbGRIVnlibk1nWVNCamIzQjVJRzltSUhSb1pTQmpkWEp5Wlc1MElHZHNiMkpoYkNCc2IyZG5hVzVuSUdOdmJtWnBaM1Z5WVhScGIyNWNiaUFnSUNvZ1FISmxkSFZ5YmlCN1RHOW5aMmx1WjBOdmJtWnBaMzBnUVNCamIzQjVJRzltSUhSb1pTQmpkWEp5Wlc1MElHTnZibVpwWjNWeVlYUnBiMjVjYmlBZ0lDb3ZYRzRnSUhOMFlYUnBZeUJuWlhSRGIyNW1hV2NvS1RvZ1RHOW5aMmx1WjBOdmJtWnBaeUI3WEc0Z0lDQWdjbVYwZFhKdUlFOWlhbVZqZEM1aGMzTnBaMjRvZTMwc0lIUm9hWE11WDJOdmJtWnBaeWs3WEc0Z0lIMWNibHh1SUNBdktpcGNiaUFnSUNvZ1FHUmxjMk55YVhCMGFXOXVJRkpsZEhKcFpYWmxjeUJ2Y2lCamNtVmhkR1Z6SUhSb1pTQm5iRzlpWVd3Z2JHOW5aMlZ5SUdsdWMzUmhibU5sTGx4dUlDQWdLaUJBYzNWdGJXRnllU0JTWlhSMWNtNXpJSFJvWlNCbGVHbHpkR2x1WnlCbmJHOWlZV3dnYkc5bloyVnlJRzl5SUdOeVpXRjBaWE1nWVNCdVpYY2diMjVsSUdsbUlHbDBJR1J2WlhOdUozUWdaWGhwYzNRdVhHNGdJQ0FxWEc0Z0lDQXFJRUJ5WlhSMWNtNGdWR2hsSUdkc2IySmhiQ0JXWlhKaWIzTnBkSGxNYjJkblpYSWdhVzV6ZEdGdVkyVXVYRzRnSUNBcUwxeHVJQ0J6ZEdGMGFXTWdaMlYwS0NrNklFeHZaMmRsY2lCN1hHNGdJQ0FnZEdocGN5NW5iRzlpWVd3Z1BTQjBhR2x6TG1kc2IySmhiQ0EvSUhSb2FYTXVaMnh2WW1Gc0lEb2dkR2hwY3k1ZlptRmpkRzl5ZVNoY0lreHZaMmRwYm1kY0lpazdYRzRnSUNBZ2NtVjBkWEp1SUhSb2FYTXVaMnh2WW1Gc08xeHVJQ0I5WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRUJrWlhOamNtbHdkR2x2YmlCTWIyZHpJR0VnZG1WeVltOXpaU0J0WlhOellXZGxMbHh1SUNBZ0tpQkFjM1Z0YldGeWVTQkVaV3hsWjJGMFpYTWdkR2hsSUhabGNtSnZjMlVnYkc5bloybHVaeUIwYnlCMGFHVWdaMnh2WW1Gc0lHeHZaMmRsY2lCcGJuTjBZVzVqWlM1Y2JpQWdJQ3BjYmlBZ0lDb2dRSEJoY21GdElHMXpaeUF0SUZSb1pTQnRaWE56WVdkbElIUnZJR0psSUd4dloyZGxaQzVjYmlBZ0lDb2dRSEJoY21GdElIWmxjbUp2YzJsMGVTQXRJRlJvWlNCMlpYSmliM05wZEhrZ2JHVjJaV3dnYjJZZ2RHaGxJRzFsYzNOaFoyVWdLR1JsWm1GMWJIUTZJREFwTGx4dUlDQWdLaTljYmlBZ2MzUmhkR2xqSUhabGNtSnZjMlVvYlhObk9pQlRkSEpwYm1kTWFXdGxMQ0IyWlhKaWIzTnBkSGs2SUc1MWJXSmxjaUE5SURBcE9pQjJiMmxrSUh0Y2JpQWdJQ0J5WlhSMWNtNGdkR2hwY3k1blpYUW9LUzUyWlhKaWIzTmxLRzF6Wnl3Z2RtVnlZbTl6YVhSNUtUdGNiaUFnZlZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJBWkdWelkzSnBjSFJwYjI0Z1RHOW5jeUJoYmlCcGJtWnZJRzFsYzNOaFoyVXVYRzRnSUNBcUlFQnpkVzF0WVhKNUlFUmxiR1ZuWVhSbGN5QjBhR1VnYVc1bWJ5QnNiMmRuYVc1bklIUnZJSFJvWlNCbmJHOWlZV3dnYkc5bloyVnlJR2x1YzNSaGJtTmxMbHh1SUNBZ0tseHVJQ0FnS2lCQWNHRnlZVzBnYlhObklDMGdWR2hsSUcxbGMzTmhaMlVnZEc4Z1ltVWdiRzluWjJWa0xseHVJQ0FnS2k5Y2JpQWdjM1JoZEdsaklHbHVabThvYlhObk9pQlRkSEpwYm1kTWFXdGxLVG9nZG05cFpDQjdYRzRnSUNBZ2NtVjBkWEp1SUhSb2FYTXVaMlYwS0NrdWFXNW1ieWh0YzJjcE8xeHVJQ0I5WEc1Y2JpQWdMeW9xWEc0Z0lDQXFJRUJrWlhOamNtbHdkR2x2YmlCTWIyZHpJR0VnWkdWaWRXY2diV1Z6YzJGblpTNWNiaUFnSUNvZ1FITjFiVzFoY25rZ1JHVnNaV2RoZEdWeklIUm9aU0JrWldKMVp5QnNiMmRuYVc1bklIUnZJSFJvWlNCbmJHOWlZV3dnYkc5bloyVnlJR2x1YzNSaGJtTmxMbHh1SUNBZ0tseHVJQ0FnS2lCQWNHRnlZVzBnYlhObklDMGdWR2hsSUcxbGMzTmhaMlVnZEc4Z1ltVWdiRzluWjJWa0xseHVJQ0FnS2k5Y2JpQWdjM1JoZEdsaklHUmxZblZuS0cxelp6b2dVM1J5YVc1blRHbHJaU2s2SUhadmFXUWdlMXh1SUNBZ0lISmxkSFZ5YmlCMGFHbHpMbWRsZENncExtUmxZblZuS0cxelp5azdYRzRnSUgxY2JseHVJQ0F2S2lwY2JpQWdJQ29nUUdSbGMyTnlhWEIwYVc5dUlFeHZaM01nWVNCemFXeHNlU0J0WlhOellXZGxMbHh1SUNBZ0tpQkFjM1Z0YldGeWVTQkVaV3hsWjJGMFpYTWdkR2hsSUdSbFluVm5JR3h2WjJkcGJtY2dkRzhnZEdobElHZHNiMkpoYkNCc2IyZG5aWElnYVc1emRHRnVZMlV1WEc0Z0lDQXFYRzRnSUNBcUlFQndZWEpoYlNCdGMyY2dMU0JVYUdVZ2JXVnpjMkZuWlNCMGJ5QmlaU0JzYjJkblpXUXVYRzRnSUNBcUwxeHVJQ0J6ZEdGMGFXTWdjMmxzYkhrb2JYTm5PaUJUZEhKcGJtZE1hV3RsS1RvZ2RtOXBaQ0I3WEc0Z0lDQWdjbVYwZFhKdUlIUm9hWE11WjJWMEtDa3VjMmxzYkhrb2JYTm5LVHRjYmlBZ2ZWeHVYRzRnSUM4cUtseHVJQ0FnS2lCQVpHVnpZM0pwY0hScGIyNGdURzluY3lCaGJpQmxjbkp2Y2lCdFpYTnpZV2RsTGx4dUlDQWdLaUJBYzNWdGJXRnllU0JFWld4bFoyRjBaWE1nZEdobElHVnljbTl5SUd4dloyZHBibWNnZEc4Z2RHaGxJR2RzYjJKaGJDQnNiMmRuWlhJZ2FXNXpkR0Z1WTJVdVhHNGdJQ0FxWEc0Z0lDQXFJRUJ3WVhKaGJTQnRjMmNnTFNCVWFHVWdiV1Z6YzJGblpTQjBieUJpWlNCc2IyZG5aV1F1WEc0Z0lDQXFMMXh1SUNCemRHRjBhV01nWlhKeWIzSW9iWE5uT2lCVGRISnBibWRNYVd0bEtUb2dkbTlwWkNCN1hHNGdJQ0FnY21WMGRYSnVJSFJvYVhNdVoyVjBLQ2t1WlhKeWIzSW9iWE5uS1R0Y2JpQWdmVnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkFaR1Z6WTNKcGNIUnBiMjRnUTNKbFlYUmxjeUJoSUd4dloyZGxjaUJtYjNJZ1lTQnpjR1ZqYVdacFl5QnZZbXBsWTNRZ2IzSWdZMjl1ZEdWNGRGeHVJQ0FnS2lCQWMzVnRiV0Z5ZVNCRGNtVmhkR1Z6SUdFZ2JtVjNJR3h2WjJkbGNpQnBibk4wWVc1alpTQm1iM0lnZEdobElHZHBkbVZ1SUc5aWFtVmpkQ0J2Y2lCamIyNTBaWGgwSUhWemFXNW5JSFJvWlNCbVlXTjBiM0o1SUdaMWJtTjBhVzl1WEc0Z0lDQXFJRUJ3WVhKaGJTQjdURzluWjJsdVowTnZiblJsZUhSOUlHOWlhbVZqZENBdElGUm9aU0J2WW1wbFkzUXNJR05zWVhOekxDQnZjaUJqYjI1MFpYaDBJSFJ2SUdOeVpXRjBaU0JoSUd4dloyZGxjaUJtYjNKY2JpQWdJQ29nUUhCaGNtRnRJSHRRWVhKMGFXRnNQRXh2WjJkcGJtZERiMjVtYVdjK2ZTQmJZMjl1Wm1sblhTQXRJRTl3ZEdsdmJtRnNJR052Ym1acFozVnlZWFJwYjI0Z2RHOGdiM1psY25KcFpHVWdaMnh2WW1Gc0lITmxkSFJwYm1kelhHNGdJQ0FxSUVCd1lYSmhiU0I3TGk0dVlXNTVmU0JoY21keklDMGdRV1JrYVhScGIyNWhiQ0JoY21kMWJXVnVkSE1nZEc4Z2NHRnpjeUIwYnlCMGFHVWdiRzluWjJWeUlHWmhZM1J2Y25sY2JpQWdJQ29nUUhKbGRIVnliaUI3VEc5bloyVnlmU0JCSUc1bGR5QnNiMmRuWlhJZ2FXNXpkR0Z1WTJVZ1ptOXlJSFJvWlNCemNHVmphV1pwWldRZ2IySnFaV04wSUc5eUlHTnZiblJsZUhSY2JpQWdJQ292WEc0Z0lITjBZWFJwWXlCbWIzSW9YRzRnSUNBZ2IySnFaV04wT2lCTWIyZG5hVzVuUTI5dWRHVjRkQ3hjYmlBZ0lDQmpiMjVtYVdjL09pQlFZWEowYVdGc1BFeHZaMmRwYm1kRGIyNW1hV2MrTEZ4dUlDQWdJQzR1TG1GeVozTTZJR0Z1ZVZ0ZFhHNGdJQ2s2SUV4dloyZGxjaUI3WEc0Z0lDQWdiMkpxWldOMElEMWNiaUFnSUNBZ0lIUjVjR1Z2WmlCdlltcGxZM1FnUFQwOUlGd2ljM1J5YVc1blhDSmNiaUFnSUNBZ0lDQWdQeUJ2WW1wbFkzUmNiaUFnSUNBZ0lDQWdPaUJ2WW1wbFkzUXVZMjl1YzNSeWRXTjBiM0pjYmlBZ0lDQWdJQ0FnSUNBL0lHOWlhbVZqZEM1amIyNXpkSEoxWTNSdmNpNXVZVzFsWEc0Z0lDQWdJQ0FnSUNBZ09pQnZZbXBsWTNRdWJtRnRaVHRjYmlBZ0lDQnlaWFIxY200Z2RHaHBjeTVmWm1GamRHOXllU2h2WW1wbFkzUXNJR052Ym1acFp5d2dMaTR1WVhKbmN5azdYRzRnSUgxY2JseHVJQ0F2S2lwY2JpQWdJQ29nUUdSbGMyTnlhWEIwYVc5dUlFTnlaV0YwWlhNZ1lTQnNiMmRuWlhJZ1ptOXlJR0VnYzNCbFkybG1hV01nY21WaGMyOXVJRzl5SUdOdmJuUmxlSFF1WEc0Z0lDQXFYRzRnSUNBcUlFQnpkVzF0WVhKNUlGUm9hWE1nYzNSaGRHbGpJRzFsZEdodlpDQmpjbVZoZEdWeklHRWdibVYzSUd4dloyZGxjaUJwYm5OMFlXNWpaU0IxYzJsdVp5QjBhR1VnWm1GamRHOXllU0JtZFc1amRHbHZiaXhjYmlBZ0lDb2dZbUZ6WldRZ2IyNGdZU0JuYVhabGJpQnlaV0Z6YjI0Z2IzSWdZMjl1ZEdWNGRDNWNiaUFnSUNwY2JpQWdJQ29nUUhCaGNtRnRJSEpsWVhOdmJpQXRJRUVnYzNSeWFXNW5JR1JsYzJOeWFXSnBibWNnZEdobElISmxZWE52YmlCdmNpQmpiMjUwWlhoMElHWnZjaUJqY21WaGRHbHVaeUIwYUdseklHeHZaMmRsY2k1Y2JpQWdJQ29nUUhCaGNtRnRJR2xrWEc0Z0lDQXFJRUJ5WlhSMWNtNXpJRUVnYm1WM0lGWmxjbUp2YzJsMGVVeHZaMmRsY2lCdmNpQkRiR0Z6YzB4dloyZGxjaUJwYm5OMFlXNWpaUzVjYmlBZ0lDb3ZYRzRnSUhOMFlYUnBZeUJpWldOaGRYTmxLSEpsWVhOdmJqb2djM1J5YVc1bkxDQnBaRDg2SUhOMGNtbHVaeWs2SUV4dloyZGxjaUI3WEc0Z0lDQWdjbVYwZFhKdUlIUm9hWE11WDJaaFkzUnZjbmtvY21WaGMyOXVMQ0IwYUdsekxsOWpiMjVtYVdjc0lHbGtLVHRjYmlBZ2ZWeHVYRzRnSUM4cUtseHVJQ0FnS2lCQVpHVnpZM0pwY0hScGIyNGdRWEJ3YkdsbGN5QjBhR1Z0WlNCemRIbHNhVzVuSUhSdklIUmxlSFJjYmlBZ0lDb2dRSE4xYlcxaGNua2dRWEJ3YkdsbGN5QnpkSGxzYVc1bklDaGpiMnh2Y25Nc0lHWnZjbTFoZEhScGJtY3BJSFJ2SUhSbGVIUWdZbUZ6WldRZ2IyNGdkR2hsSUhSb1pXMWxJR052Ym1acFozVnlZWFJwYjI1Y2JpQWdJQ29nUUhCaGNtRnRJSHR6ZEhKcGJtZDlJSFJsZUhRZ0xTQlVhR1VnZEdWNGRDQjBieUJ6ZEhsc1pWeHVJQ0FnS2lCQWNHRnlZVzBnZTNOMGNtbHVaMzBnZEhsd1pTQXRJRlJvWlNCMGVYQmxJRzltSUdWc1pXMWxiblFnZEc4Z2MzUjViR1VnS0dVdVp5NHNJRndpWTJ4aGMzTmNJaXdnWENKdFpYTnpZV2RsWENJc0lGd2liRzluVEdWMlpXeGNJaWxjYmlBZ0lDb2dRSEJoY21GdElIdE1iMmRNWlhabGJIMGdiRzluWjJWeVRHVjJaV3dnTFNCVWFHVWdiRzluSUd4bGRtVnNJSFJ2SUhWelpTQm1iM0lnYzNSNWJHbHVaMXh1SUNBZ0tpQkFjR0Z5WVcwZ2UxUm9aVzFsZlNCYmRHVnRjR3hoZEdVOVJHVm1ZWFZzZEZSb1pXMWxYU0F0SUZSb1pTQjBhR1Z0WlNCMGJ5QjFjMlVnWm05eUlITjBlV3hwYm1kY2JpQWdJQ29nUUhKbGRIVnliaUI3YzNSeWFXNW5mU0JVYUdVZ2MzUjViR1ZrSUhSbGVIUmNiaUFnSUNvZ1FHMWxjbTFoYVdSY2JpQWdJQ29nYzJWeGRXVnVZMlZFYVdGbmNtRnRYRzRnSUNBcUlDQWdjR0Z5ZEdsamFYQmhiblFnUTJGc2JHVnlYRzRnSUNBcUlDQWdjR0Z5ZEdsamFYQmhiblFnVkdobGJXVWdZWE1nVEc5bloybHVaeTUwYUdWdFpWeHVJQ0FnS2lBZ0lIQmhjblJwWTJsd1lXNTBJRUZ3Y0d4NUlHRnpJR0Z3Y0d4NUlHWjFibU4wYVc5dVhHNGdJQ0FxSUNBZ2NHRnlkR2xqYVhCaGJuUWdVM1I1YkdVZ1lYTWdjM1I1YkdWa0xYTjBjbWx1WnkxaWRXbHNaR1Z5WEc0Z0lDQXFYRzRnSUNBcUlDQWdRMkZzYkdWeUxUNCtWR2hsYldVNklIUm9aVzFsS0hSbGVIUXNJSFI1Y0dVc0lHeHZaMmRsY2t4bGRtVnNLVnh1SUNBZ0tpQWdJRlJvWlcxbExUNCtWR2hsYldVNklFTm9aV05ySUdsbUlITjBlV3hwYm1jZ2FYTWdaVzVoWW14bFpGeHVJQ0FnS2lBZ0lHRnNkQ0J6ZEhsc2FXNW5JR1JwYzJGaWJHVmtYRzRnSUNBcUlDQWdJQ0JVYUdWdFpTMHRQajVEWVd4c1pYSTZJSEpsZEhWeWJpQnZjbWxuYVc1aGJDQjBaWGgwWEc0Z0lDQXFJQ0FnWld4elpTQnpkSGxzYVc1bklHVnVZV0pzWldSY2JpQWdJQ29nSUNBZ0lGUm9aVzFsTFQ0K1ZHaGxiV1U2SUVkbGRDQjBhR1Z0WlNCbWIzSWdkSGx3WlZ4dUlDQWdLaUFnSUNBZ1lXeDBJSFJvWlcxbElHNXZkQ0JtYjNWdVpGeHVJQ0FnS2lBZ0lDQWdJQ0JVYUdWdFpTMHRQajVEWVd4c1pYSTZJSEpsZEhWeWJpQnZjbWxuYVc1aGJDQjBaWGgwWEc0Z0lDQXFJQ0FnSUNCbGJITmxJSFJvWlcxbElHWnZkVzVrWEc0Z0lDQXFJQ0FnSUNBZ0lGUm9aVzFsTFQ0K1ZHaGxiV1U2SUVSbGRHVnliV2x1WlNCaFkzUjFZV3dnZEdobGJXVWdZbUZ6WldRZ2IyNGdiRzluSUd4bGRtVnNYRzRnSUNBcUlDQWdJQ0FnSUZSb1pXMWxMVDQrUVhCd2JIazZJRUZ3Y0d4NUlHVmhZMmdnYzNSNWJHVWdjSEp2Y0dWeWRIbGNiaUFnSUNvZ0lDQWdJQ0FnUVhCd2JIa3RQajVUZEhsc1pUb2dRWEJ3YkhrZ1kyOXNiM0p6SUdGdVpDQm1iM0p0WVhSMGFXNW5YRzRnSUNBcUlDQWdJQ0FnSUZOMGVXeGxMUzArUGtGd2NHeDVPaUJTWlhSMWNtNGdjM1I1YkdWa0lIUmxlSFJjYmlBZ0lDb2dJQ0FnSUNBZ1FYQndiSGt0TFQ0K1ZHaGxiV1U2SUZKbGRIVnliaUJ6ZEhsc1pXUWdkR1Y0ZEZ4dUlDQWdLaUFnSUNBZ0lDQlVhR1Z0WlMwdFBqNURZV3hzWlhJNklGSmxkSFZ5YmlCbWFXNWhiQ0J6ZEhsc1pXUWdkR1Y0ZEZ4dUlDQWdLaUFnSUNBZ1pXNWtYRzRnSUNBcUlDQWdaVzVrWEc0Z0lDQXFMMXh1SUNCemRHRjBhV01nZEdobGJXVW9YRzRnSUNBZ2RHVjRkRG9nYzNSeWFXNW5MRnh1SUNBZ0lIUjVjR1U2SUd0bGVXOW1JRlJvWlcxbElId2dhMlY1YjJZZ1RHOW5UR1YyWld3c1hHNGdJQ0FnYkc5bloyVnlUR1YyWld3NklFeHZaMHhsZG1Wc0xGeHVJQ0FnSUhSbGJYQnNZWFJsT2lCVWFHVnRaU0E5SUVSbFptRjFiSFJVYUdWdFpWeHVJQ0FwSUh0Y2JpQWdJQ0JwWmlBb0lYUm9hWE11WDJOdmJtWnBaeTV6ZEhsc1pTa2djbVYwZFhKdUlIUmxlSFE3WEc0Z0lDQWdZMjl1YzNRZ2JHOW5aMlZ5SUQwZ1RHOW5aMmx1Wnk1blpYUW9LUzVtYjNJb2RHaHBjeTUwYUdWdFpTazdYRzVjYmlBZ0lDQm1kVzVqZEdsdmJpQmhjSEJzZVNoY2JpQWdJQ0FnSUhSNGREb2djM1J5YVc1bkxGeHVJQ0FnSUNBZ2IzQjBhVzl1T2lCclpYbHZaaUJVYUdWdFpVOXdkR2x2Yml4Y2JpQWdJQ0FnSUhaaGJIVmxPaUJ1ZFcxaVpYSWdmQ0JiYm5WdFltVnlYU0I4SUZ0dWRXMWlaWElzSUc1MWJXSmxjaXdnYm5WdFltVnlYU0I4SUc1MWJXSmxjbHRkSUh3Z2MzUnlhVzVuVzExY2JpQWdJQ0FwT2lCemRISnBibWNnZTF4dUlDQWdJQ0FnZEhKNUlIdGNiaUFnSUNBZ0lDQWdZMjl1YzNRZ2REb2djM1J5YVc1bklId2dVM1I1YkdWa1UzUnlhVzVuSUQwZ2RIaDBPMXh1SUNBZ0lDQWdJQ0JzWlhRZ1l5QTlJSE4wZVd4bEtIUXBPMXh1WEc0Z0lDQWdJQ0FnSUdaMWJtTjBhVzl1SUdGd2NHeDVRMjlzYjNJb1hHNGdJQ0FnSUNBZ0lDQWdkbUZzT2lCdWRXMWlaWElnZkNCYmJuVnRZbVZ5WFNCOElGdHVkVzFpWlhJc0lHNTFiV0psY2l3Z2JuVnRZbVZ5WFN4Y2JpQWdJQ0FnSUNBZ0lDQnBjMEpuSUQwZ1ptRnNjMlZjYmlBZ0lDQWdJQ0FnS1RvZ1UzUjViR1ZrVTNSeWFXNW5JSHRjYmlBZ0lDQWdJQ0FnSUNCc1pYUWdaanBjYmlBZ0lDQWdJQ0FnSUNBZ0lId2dkSGx3Wlc5bUlHTXVZbUZqYTJkeWIzVnVaRnh1SUNBZ0lDQWdJQ0FnSUNBZ2ZDQjBlWEJsYjJZZ1l5NW1iM0psWjNKdmRXNWtYRzRnSUNBZ0lDQWdJQ0FnSUNCOElIUjVjR1Z2WmlCakxuSm5ZbHh1SUNBZ0lDQWdJQ0FnSUNBZ2ZDQjBlWEJsYjJZZ1l5NWpiMnh2Y2pJMU5pQTlJR2x6UW1jZ1B5QmpMbUpoWTJ0bmNtOTFibVFnT2lCakxtWnZjbVZuY205MWJtUTdYRzRnSUNBZ0lDQWdJQ0FnYVdZZ0tDRkJjbkpoZVM1cGMwRnljbUY1S0haaGJDa3BJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlBb1ppQmhjeUIwZVhCbGIyWWdZeTVpWVdOclozSnZkVzVrSUh3Z2RIbHdaVzltSUdNdVptOXlaV2R5YjNWdVpDa3VZMkZzYkNoY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnWXl4Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnZG1Gc2RXVWdZWE1nYm5WdFltVnlYRzRnSUNBZ0lDQWdJQ0FnSUNBcE8xeHVJQ0FnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnSUNCemQybDBZMmdnS0haaGJDNXNaVzVuZEdncElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUdOaGMyVWdNVHBjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdaaUE5SUdselFtY2dQeUJqTG1KblEyOXNiM0l5TlRZZ09pQmpMbU52Ykc5eU1qVTJPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z0tHWWdZWE1nZEhsd1pXOW1JR011WW1kRGIyeHZjakkxTmlCOElIUjVjR1Z2WmlCakxtTnZiRzl5TWpVMktTaDJZV3hiTUYwcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnWTJGelpTQXpPbHh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQm1JRDBnYVhOQ1p5QS9JR011WW1kU1oySWdPaUJqTG5KbllqdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUdNdWNtZGlLSFpoYkZzd1hTd2dkbUZzV3pGZExDQjJZV3hiTWwwcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnWkdWbVlYVnNkRHBjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdiRzluWjJWeUxtVnljbTl5S0dCT2IzUWdZU0IyWVd4cFpDQmpiMnh2Y2lCdmNIUnBiMjQ2SUNSN2IzQjBhVzl1ZldBcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnYzNSNWJHVW9kQ0JoY3lCemRISnBibWNwTzF4dUlDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdmVnh1WEc0Z0lDQWdJQ0FnSUdaMWJtTjBhVzl1SUdGd2NHeDVVM1I1YkdVb2Rqb2diblZ0WW1WeUlId2djM1J5YVc1bktUb2dkbTlwWkNCN1hHNGdJQ0FnSUNBZ0lDQWdhV1lnS0hSNWNHVnZaaUIySUQwOVBTQmNJbTUxYldKbGNsd2lLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmpJRDBnWXk1emRIbHNaU2gyS1R0Y2JpQWdJQ0FnSUNBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnWXlBOUlHTmJkaUJoY3lCclpYbHZaaUJEYjJ4dmNtbDZaVTl3ZEdsdmJuTmRJR0Z6SUZOMGVXeGxaRk4wY21sdVp6dGNiaUFnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUgxY2JseHVJQ0FnSUNBZ0lDQnpkMmwwWTJnZ0tHOXdkR2x2YmlrZ2UxeHVJQ0FnSUNBZ0lDQWdJR05oYzJVZ1hDSmlaMXdpT2x4dUlDQWdJQ0FnSUNBZ0lHTmhjMlVnWENKbVoxd2lPbHh1SUNBZ0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUdGd2NHeDVRMjlzYjNJb2RtRnNkV1VnWVhNZ2JuVnRZbVZ5S1M1MFpYaDBPMXh1SUNBZ0lDQWdJQ0FnSUdOaGMyVWdYQ0p6ZEhsc1pWd2lPbHh1SUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLRUZ5Y21GNUxtbHpRWEp5WVhrb2RtRnNkV1VwS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUhaaGJIVmxMbVp2Y2tWaFkyZ29ZWEJ3YkhsVGRIbHNaU2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCaGNIQnNlVk4wZVd4bEtIWmhiSFZsSUdGeklHNTFiV0psY2lCOElITjBjbWx1WnlrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z1l5NTBaWGgwTzF4dUlDQWdJQ0FnSUNBZ0lHUmxabUYxYkhRNlhHNGdJQ0FnSUNBZ0lDQWdJQ0JzYjJkblpYSXVaWEp5YjNJb1lFNXZkQ0JoSUhaaGJHbGtJSFJvWlcxbElHOXdkR2x2YmpvZ0pIdHZjSFJwYjI1OVlDazdYRzRnSUNBZ0lDQWdJQ0FnSUNCeVpYUjFjbTRnZER0Y2JpQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQXZMeUJsYzJ4cGJuUXRaR2x6WVdKc1pTMXVaWGgwTFd4cGJtVWdRSFI1Y0dWelkzSnBjSFF0WlhOc2FXNTBMMjV2TFhWdWRYTmxaQzEyWVhKelhHNGdJQ0FnSUNCOUlHTmhkR05vSUNobE9pQjFibXR1YjNkdUtTQjdYRzRnSUNBZ0lDQWdJR3h2WjJkbGNpNWxjbkp2Y2loZ1JYSnliM0lnWVhCd2JIbHBibWNnYzNSNWJHVTZJQ1I3YjNCMGFXOXVmU0IzYVhSb0lIWmhiSFZsSUNSN2RtRnNkV1Y5WUNrN1hHNGdJQ0FnSUNBZ0lISmxkSFZ5YmlCMGVIUTdYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZWeHVYRzRnSUNBZ1kyOXVjM1FnYVc1a2FYWnBaSFZoYkZSb1pXMWxJRDBnZEdWdGNHeGhkR1ZiZEhsd1pTQmhjeUJyWlhsdlppQlVhR1Z0WlYwN1hHNGdJQ0FnYVdZZ0tDRnBibVJwZG1sa2RXRnNWR2hsYldVZ2ZId2dJVTlpYW1WamRDNXJaWGx6S0dsdVpHbDJhV1IxWVd4VWFHVnRaU2t1YkdWdVozUm9LU0I3WEc0Z0lDQWdJQ0J5WlhSMWNtNGdkR1Y0ZER0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0JzWlhRZ1lXTjBkV0ZzVkdobGJXVTZJRlJvWlcxbFQzQjBhVzl1SUQwZ2FXNWthWFpwWkhWaGJGUm9aVzFsSUdGeklGUm9aVzFsVDNCMGFXOXVPMXh1WEc0Z0lDQWdZMjl1YzNRZ2JHOW5UR1YyWld4eklEMGdUMkpxWldOMExtRnpjMmxuYmloN2ZTd2dURzluVEdWMlpXd3BPMXh1SUNBZ0lHbG1JQ2hQWW1wbFkzUXVhMlY1Y3locGJtUnBkbWxrZFdGc1ZHaGxiV1VwV3pCZElHbHVJR3h2WjB4bGRtVnNjeWxjYmlBZ0lDQWdJR0ZqZEhWaGJGUm9aVzFsSUQxY2JpQWdJQ0FnSUNBZ0tHbHVaR2wyYVdSMVlXeFVhR1Z0WlNCaGN5QlVhR1Z0WlU5d2RHbHZia0o1VEc5blRHVjJaV3dwVzJ4dloyZGxja3hsZG1Wc1hTQjhmQ0I3ZlR0Y2JseHVJQ0FnSUhKbGRIVnliaUJQWW1wbFkzUXVhMlY1Y3loaFkzUjFZV3hVYUdWdFpTa3VjbVZrZFdObEtDaGhZMk02SUhOMGNtbHVaeXdnYTJWNU9pQnpkSEpwYm1jcElEMCtJSHRjYmlBZ0lDQWdJR052Ym5OMElIWmhiQ0E5SUNoaFkzUjFZV3hVYUdWdFpTQmhjeUJVYUdWdFpVOXdkR2x2YmlsYmEyVjVJR0Z6SUd0bGVXOW1JRlJvWlcxbFQzQjBhVzl1WFR0Y2JpQWdJQ0FnSUdsbUlDaDJZV3dwWEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUJoY0hCc2VTaGNiaUFnSUNBZ0lDQWdJQ0JoWTJNc1hHNGdJQ0FnSUNBZ0lDQWdhMlY1SUdGeklHdGxlVzltSUZSb1pXMWxUM0IwYVc5dUxGeHVJQ0FnSUNBZ0lDQWdJSFpoYkNCaGMxeHVJQ0FnSUNBZ0lDQWdJQ0FnZkNCdWRXMWlaWEpjYmlBZ0lDQWdJQ0FnSUNBZ0lId2dXMjUxYldKbGNsMWNiaUFnSUNBZ0lDQWdJQ0FnSUh3Z1cyNTFiV0psY2l3Z2JuVnRZbVZ5TENCdWRXMWlaWEpkWEc0Z0lDQWdJQ0FnSUNBZ0lDQjhJRzUxYldKbGNsdGRYRzRnSUNBZ0lDQWdJQ0FnSUNCOElITjBjbWx1WjF0ZFhHNGdJQ0FnSUNBZ0lDazdYRzRnSUNBZ0lDQnlaWFIxY200Z1lXTmpPMXh1SUNBZ0lIMHNJSFJsZUhRcE8xeHVJQ0I5WEc1OVhHNGlYWDA9IiwiaW1wb3J0IHtcbiAgQW5zd2VycyxcbiAgQ2hvaWNlLFxuICBGYWxzeSxcbiAgSW5pdGlhbFJldHVyblZhbHVlLFxuICBQcmV2Q2FsbGVyLFxuICBQcm9tcHRPYmplY3QsXG4gIFByb21wdFR5cGUsXG4gIFZhbHVlT3JGdW5jLFxufSBmcm9tIFwicHJvbXB0c1wiO1xuaW1wb3J0IHByb21wdHMgZnJvbSBcInByb21wdHNcIjtcbmltcG9ydCB7IHBhcnNlQXJncywgUGFyc2VBcmdzQ29uZmlnIH0gZnJvbSBcInV0aWxcIjtcbmltcG9ydCB7IFdyaXRhYmxlLCBSZWFkYWJsZSB9IGZyb20gXCJzdHJlYW1cIjtcbmltcG9ydCB7IFBhcnNlQXJnc09wdGlvbnNDb25maWcsIFBhcnNlQXJnc1Jlc3VsdCB9IGZyb20gXCIuL3R5cGVzXCI7XG5pbXBvcnQgeyBMb2dnaW5nIH0gZnJvbSBcIkBkZWNhZi10cy9sb2dnaW5nXCI7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFJlcHJlc2VudHMgYSB1c2VyIGlucHV0IHByb21wdCB3aXRoIHZhcmlvdXMgY29uZmlndXJhdGlvbiBvcHRpb25zLlxuICogQHN1bW1hcnkgVGhpcyBjbGFzcyBwcm92aWRlcyBhIGZsZXhpYmxlIGludGVyZmFjZSBmb3IgY3JlYXRpbmcgYW5kIG1hbmFnaW5nIHVzZXIgaW5wdXQgcHJvbXB0cy5cbiAqIEl0IGltcGxlbWVudHMgdGhlIFByb21wdE9iamVjdCBpbnRlcmZhY2UgZnJvbSB0aGUgJ3Byb21wdHMnIGxpYnJhcnkgYW5kIG9mZmVycyBtZXRob2RzIHRvIHNldFxuICogdmFyaW91cyBwcm9wZXJ0aWVzIG9mIHRoZSBwcm9tcHQuIFRoZSBjbGFzcyBhbHNvIGluY2x1ZGVzIHN0YXRpYyBtZXRob2RzIGZvciBjb21tb24gaW5wdXQgc2NlbmFyaW9zXG4gKiBhbmQgYXJndW1lbnQgcGFyc2luZy5cbiAqXG4gKiBAdGVtcGxhdGUgUiAtIFRoZSB0eXBlIG9mIHRoZSBwcm9tcHQgbmFtZSwgZXh0ZW5kaW5nIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBwcm9tcHQsIHVzZWQgYXMgdGhlIGtleSBpbiB0aGUgcmV0dXJuZWQgYW5zd2VycyBvYmplY3QuXG4gKlxuICogQGNsYXNzXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgVXNlcklucHV0IH0gZnJvbSAnQGRlY2FmLXRzL3V0aWxzJztcbiAqXG4gKiAvLyBDcmVhdGUgYSBzaW1wbGUgdGV4dCBpbnB1dFxuICogY29uc3QgbmFtZUlucHV0ID0gbmV3IFVzZXJJbnB1dCgnbmFtZScpXG4gKiAgIC5zZXRNZXNzYWdlKCdXaGF0IGlzIHlvdXIgbmFtZT8nKVxuICogICAuc2V0SW5pdGlhbCgnVXNlcicpO1xuICpcbiAqIC8vIENyZWF0ZSBhIG51bWJlciBpbnB1dCB3aXRoIHZhbGlkYXRpb25cbiAqIGNvbnN0IGFnZUlucHV0ID0gbmV3IFVzZXJJbnB1dCgnYWdlJylcbiAqICAgLnNldFR5cGUoJ251bWJlcicpXG4gKiAgIC5zZXRNZXNzYWdlKCdIb3cgb2xkIGFyZSB5b3U/JylcbiAqICAgLnNldE1pbigwKVxuICogICAuc2V0TWF4KDEyMCk7XG4gKlxuICogLy8gQXNrIGZvciBpbnB1dCBhbmQgcHJvY2VzcyB0aGUgcmVzdWx0c1xuICogYXN5bmMgZnVuY3Rpb24gZ2V0VXNlckluZm8oKSB7XG4gKiAgIGNvbnN0IGFuc3dlcnMgPSBhd2FpdCBVc2VySW5wdXQuYXNrKFtuYW1lSW5wdXQsIGFnZUlucHV0XSk7XG4gKiAgIGNvbnNvbGUubG9nKGBIZWxsbyAke2Fuc3dlcnMubmFtZX0sIHlvdSBhcmUgJHthbnN3ZXJzLmFnZX0geWVhcnMgb2xkLmApO1xuICogfVxuICpcbiAqIGdldFVzZXJJbmZvKCk7XG4gKiBgYGBcbiAqXG4gKiBAbWVybWFpZFxuICogc2VxdWVuY2VEaWFncmFtXG4gKiAgIHBhcnRpY2lwYW50IENsaWVudFxuICogICBwYXJ0aWNpcGFudCBVc2VySW5wdXRcbiAqICAgcGFydGljaXBhbnQgUHJvbXB0TGlicmFyeVxuICpcbiAqICAgQ2xpZW50LT4+VXNlcklucHV0OiBuZXcgVXNlcklucHV0KG5hbWUpXG4gKiAgIENsaWVudC0+PlVzZXJJbnB1dDogc2V0TWVzc2FnZShtZXNzYWdlKVxuICogICBDbGllbnQtPj5Vc2VySW5wdXQ6IHNldFR5cGUodHlwZSlcbiAqICAgQ2xpZW50LT4+VXNlcklucHV0OiBzZXRJbml0aWFsKGluaXRpYWwpXG4gKiAgIENsaWVudC0+PlVzZXJJbnB1dDogT3RoZXIgY29uZmlndXJhdGlvbiBtZXRob2RzXG4gKlxuICogICBDbGllbnQtPj5Vc2VySW5wdXQ6IGFzaygpXG4gKiAgIFVzZXJJbnB1dC0+PlByb21wdExpYnJhcnk6IHByb21wdHMocXVlc3Rpb24pXG4gKiAgIFByb21wdExpYnJhcnktPj5DbGllbnQ6IERpc3BsYXkgcHJvbXB0XG4gKiAgIENsaWVudC0+PlByb21wdExpYnJhcnk6IFVzZXIgcHJvdmlkZXMgaW5wdXRcbiAqICAgUHJvbXB0TGlicmFyeS0+PlVzZXJJbnB1dDogUmV0dXJuIGFuc3dlcnNcbiAqICAgVXNlcklucHV0LT4+Q2xpZW50OiBSZXR1cm4gcHJvY2Vzc2VkIGFuc3dlcnNcbiAqL1xuZXhwb3J0IGNsYXNzIFVzZXJJbnB1dDxSIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nPiBpbXBsZW1lbnRzIFByb21wdE9iamVjdDxSPiB7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IGxvZ2dlciA9IExvZ2dpbmcuZm9yKFVzZXJJbnB1dCk7XG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIHR5cGUgb2YgdGhlIHByb21wdC5cbiAgICogQHN1bW1hcnkgRGV0ZXJtaW5lcyB0aGUgaW5wdXQgbWV0aG9kIChlLmcuLCB0ZXh0LCBudW1iZXIsIGNvbmZpcm0pLlxuICAgKi9cbiAgdHlwZTogUHJvbXB0VHlwZSB8IEZhbHN5IHwgUHJldkNhbGxlcjxSLCBQcm9tcHRUeXBlIHwgRmFsc3k+ID0gXCJ0ZXh0XCI7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgbmFtZSBvZiB0aGUgcHJvbXB0LlxuICAgKiBAc3VtbWFyeSBVc2VkIGFzIHRoZSBrZXkgaW4gdGhlIHJldHVybmVkIGFuc3dlcnMgb2JqZWN0LlxuICAgKi9cbiAgbmFtZTogVmFsdWVPckZ1bmM8Uj47XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgbWVzc2FnZSBkaXNwbGF5ZWQgdG8gdGhlIHVzZXIuXG4gICAqIEBzdW1tYXJ5IFRoZSBxdWVzdGlvbiBvciBpbnN0cnVjdGlvbiBwcmVzZW50ZWQgdG8gdGhlIHVzZXIuXG4gICAqL1xuICBtZXNzYWdlPzogVmFsdWVPckZ1bmM8c3RyaW5nPiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBpbml0aWFsIHZhbHVlIG9mIHRoZSBwcm9tcHQuXG4gICAqIEBzdW1tYXJ5IFRoZSBkZWZhdWx0IHZhbHVlIHByZXNlbnRlZCB0byB0aGUgdXNlci5cbiAgICovXG4gIGluaXRpYWw/OlxuICAgIHwgSW5pdGlhbFJldHVyblZhbHVlXG4gICAgfCBQcmV2Q2FsbGVyPFIsIEluaXRpYWxSZXR1cm5WYWx1ZSB8IFByb21pc2U8SW5pdGlhbFJldHVyblZhbHVlPj5cbiAgICB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBzdHlsZSBvZiB0aGUgcHJvbXB0LlxuICAgKiBAc3VtbWFyeSBEZXRlcm1pbmVzIHRoZSB2aXN1YWwgc3R5bGUgb2YgdGhlIHByb21wdC5cbiAgICovXG4gIHN0eWxlPzogc3RyaW5nIHwgUHJldkNhbGxlcjxSLCBzdHJpbmcgfCBGYWxzeT4gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgZm9ybWF0IGZ1bmN0aW9uIGZvciB0aGUgaW5wdXQuXG4gICAqIEBzdW1tYXJ5IEEgZnVuY3Rpb24gdG8gZm9ybWF0IHRoZSB1c2VyJ3MgaW5wdXQgYmVmb3JlIGl0J3MgcmV0dXJuZWQuXG4gICAqL1xuICBmb3JtYXQ/OiBQcmV2Q2FsbGVyPFIsIHZvaWQ+IHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIHZhbGlkYXRpb24gZnVuY3Rpb24gZm9yIHRoZSBpbnB1dC5cbiAgICogQHN1bW1hcnkgQSBmdW5jdGlvbiB0byB2YWxpZGF0ZSB0aGUgdXNlcidzIGlucHV0LlxuICAgKi9cbiAgdmFsaWRhdGU/OlxuICAgIHwgUHJldkNhbGxlcjxSLCBib29sZWFuIHwgc3RyaW5nIHwgUHJvbWlzZTxib29sZWFuIHwgc3RyaW5nPj5cbiAgICB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBvblN0YXRlIGNhbGxiYWNrIGZ1bmN0aW9uLlxuICAgKiBAc3VtbWFyeSBBIGZ1bmN0aW9uIGNhbGxlZCB3aGVuIHRoZSBzdGF0ZSBvZiB0aGUgcHJvbXB0IGNoYW5nZXMuXG4gICAqL1xuICBvblN0YXRlPzogUHJldkNhbGxlcjxSLCB2b2lkPiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBtaW5pbXVtIHZhbHVlIGZvciBudW1iZXIgaW5wdXRzLlxuICAgKiBAc3VtbWFyeSBUaGUgbG93ZXN0IG51bWJlciB0aGUgdXNlciBjYW4gaW5wdXQuXG4gICAqL1xuICBtaW4/OiBudW1iZXIgfCBQcmV2Q2FsbGVyPFIsIG51bWJlciB8IEZhbHN5PiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBtYXhpbXVtIHZhbHVlIGZvciBudW1iZXIgaW5wdXRzLlxuICAgKiBAc3VtbWFyeSBUaGUgaGlnaGVzdCBudW1iZXIgdGhlIHVzZXIgY2FuIGlucHV0LlxuICAgKi9cbiAgbWF4PzogbnVtYmVyIHwgUHJldkNhbGxlcjxSLCBudW1iZXIgfCBGYWxzeT4gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBXaGV0aGVyIHRvIGFsbG93IGZsb2F0IHZhbHVlcyBmb3IgbnVtYmVyIGlucHV0cy5cbiAgICogQHN1bW1hcnkgSWYgdHJ1ZSwgYWxsb3dzIGRlY2ltYWwgbnVtYmVycy5cbiAgICovXG4gIGZsb2F0PzogYm9vbGVhbiB8IFByZXZDYWxsZXI8UiwgYm9vbGVhbiB8IEZhbHN5PiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBudW1iZXIgb2YgZGVjaW1hbCBwbGFjZXMgdG8gcm91bmQgdG8gZm9yIGZsb2F0IGlucHV0cy5cbiAgICogQHN1bW1hcnkgRGV0ZXJtaW5lcyB0aGUgcHJlY2lzaW9uIG9mIGZsb2F0IGlucHV0cy5cbiAgICovXG4gIHJvdW5kPzogbnVtYmVyIHwgUHJldkNhbGxlcjxSLCBudW1iZXIgfCBGYWxzeT4gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBJbnN0cnVjdGlvbnMgZm9yIHRoZSB1c2VyLlxuICAgKiBAc3VtbWFyeSBBZGRpdGlvbmFsIGd1aWRhbmNlIHByb3ZpZGVkIHRvIHRoZSB1c2VyLlxuICAgKi9cbiAgaW5zdHJ1Y3Rpb25zPzogc3RyaW5nIHwgYm9vbGVhbiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBpbmNyZW1lbnQgdmFsdWUgZm9yIG51bWJlciBpbnB1dHMuXG4gICAqIEBzdW1tYXJ5IFRoZSBzdGVwIHNpemUgd2hlbiBpbmNyZWFzaW5nIG9yIGRlY3JlYXNpbmcgdGhlIG51bWJlci5cbiAgICovXG4gIGluY3JlbWVudD86IG51bWJlciB8IFByZXZDYWxsZXI8UiwgbnVtYmVyIHwgRmFsc3k+IHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIHNlcGFyYXRvciBmb3IgbGlzdCBpbnB1dHMuXG4gICAqIEBzdW1tYXJ5IFRoZSBjaGFyYWN0ZXIgdXNlZCB0byBzZXBhcmF0ZSBsaXN0IGl0ZW1zLlxuICAgKi9cbiAgc2VwYXJhdG9yPzogc3RyaW5nIHwgUHJldkNhbGxlcjxSLCBzdHJpbmcgfCBGYWxzeT4gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgYWN0aXZlIG9wdGlvbiBzdHlsZSBmb3Igc2VsZWN0IGlucHV0cy5cbiAgICogQHN1bW1hcnkgVGhlIHN0eWxlIGFwcGxpZWQgdG8gdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBvcHRpb24uXG4gICAqL1xuICBhY3RpdmU/OiBzdHJpbmcgfCBQcmV2Q2FsbGVyPFIsIHN0cmluZyB8IEZhbHN5PiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBpbmFjdGl2ZSBvcHRpb24gc3R5bGUgZm9yIHNlbGVjdCBpbnB1dHMuXG4gICAqIEBzdW1tYXJ5IFRoZSBzdHlsZSBhcHBsaWVkIHRvIG5vbi1zZWxlY3RlZCBvcHRpb25zLlxuICAgKi9cbiAgaW5hY3RpdmU/OiBzdHJpbmcgfCBQcmV2Q2FsbGVyPFIsIHN0cmluZyB8IEZhbHN5PiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBhdmFpbGFibGUgY2hvaWNlcyBmb3Igc2VsZWN0LCBtdWx0aXNlbGVjdCwgb3IgYXV0b2NvbXBsZXRlIGlucHV0cy5cbiAgICogQHN1bW1hcnkgQW4gYXJyYXkgb2Ygb3B0aW9ucyB0aGF0IHRoZSB1c2VyIGNhbiBzZWxlY3QgZnJvbSBpbiBjaG9pY2UtYmFzZWQgcHJvbXB0cy5cbiAgICovXG4gIGNob2ljZXM/OiBDaG9pY2VbXSB8IFByZXZDYWxsZXI8UiwgQ2hvaWNlW10gfCBGYWxzeT4gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgaGludCB0ZXh0IGZvciB0aGUgcHJvbXB0LlxuICAgKiBAc3VtbWFyeSBBZGRpdGlvbmFsIGluZm9ybWF0aW9uIGRpc3BsYXllZCB0byB0aGUgdXNlci5cbiAgICovXG4gIGhpbnQ/OiBzdHJpbmcgfCBQcmV2Q2FsbGVyPFIsIHN0cmluZyB8IEZhbHN5PiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSB3YXJuaW5nIHRleHQgZm9yIHRoZSBwcm9tcHQuXG4gICAqIEBzdW1tYXJ5IEEgd2FybmluZyBtZXNzYWdlIGRpc3BsYXllZCB0byB0aGUgdXNlci5cbiAgICovXG4gIHdhcm4/OiBzdHJpbmcgfCBQcmV2Q2FsbGVyPFIsIHN0cmluZyB8IEZhbHN5PiB8IHVuZGVmaW5lZDtcblxuICBzdWdnZXN0PzogKChpbnB1dDogYW55LCBjaG9pY2VzOiBDaG9pY2VbXSkgPT4gUHJvbWlzZTxhbnk+KSB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFRoZSBsaW1pdCBmb3IgbGlzdCBpbnB1dHMuXG4gICAqIEBzdW1tYXJ5IFRoZSBtYXhpbXVtIG51bWJlciBvZiBpdGVtcyB0aGF0IGNhbiBiZSBzZWxlY3RlZC5cbiAgICovXG4gIGxpbWl0PzogbnVtYmVyIHwgUHJldkNhbGxlcjxSLCBudW1iZXIgfCBGYWxzeT4gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBUaGUgbWFzayBmb3IgcGFzc3dvcmQgaW5wdXRzLlxuICAgKiBAc3VtbWFyeSBUaGUgY2hhcmFjdGVyIHVzZWQgdG8gaGlkZSB0aGUgdXNlcidzIGlucHV0LlxuICAgKi9cbiAgbWFzaz86IHN0cmluZyB8IFByZXZDYWxsZXI8Uiwgc3RyaW5nIHwgRmFsc3k+IHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIHN0ZG91dCBzdHJlYW0gZm9yIHRoZSBwcm9tcHQuXG4gICAqIEBzdW1tYXJ5IFRoZSBvdXRwdXQgc3RyZWFtIHVzZWQgYnkgdGhlIHByb21wdC5cbiAgICovXG4gIHN0ZG91dD86IFdyaXRhYmxlIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gVGhlIHN0ZGluIHN0cmVhbSBmb3IgdGhlIHByb21wdC5cbiAgICogQHN1bW1hcnkgVGhlIGlucHV0IHN0cmVhbSB1c2VkIGJ5IHRoZSBwcm9tcHQuXG4gICAqL1xuICBzdGRpbj86IFJlYWRhYmxlIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKG5hbWU6IFZhbHVlT3JGdW5jPFI+KSB7XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gU2V0cyB0aGUgdHlwZSBvZiB0aGUgcHJvbXB0LlxuICAgKiBAc3VtbWFyeSBDb25maWd1cmVzIHRoZSBpbnB1dCBtZXRob2QgZm9yIHRoZSBwcm9tcHQuXG4gICAqXG4gICAqIEBwYXJhbSB0eXBlIC0gVGhlIHR5cGUgb2YgdGhlIHByb21wdC5cbiAgICogQHJldHVybnMgVGhpcyBVc2VySW5wdXQgaW5zdGFuY2UgZm9yIG1ldGhvZCBjaGFpbmluZy5cbiAgICovXG4gIHNldFR5cGUodHlwZTogUHJvbXB0VHlwZSB8IEZhbHN5IHwgUHJldkNhbGxlcjxSLCBQcm9tcHRUeXBlIHwgRmFsc3k+KTogdGhpcyB7XG4gICAgVXNlcklucHV0LmxvZ2dlci52ZXJib3NlKGBTZXR0aW5nIHR5cGUgdG86ICR7dHlwZX1gKTtcbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBTZXRzIHRoZSBtZXNzYWdlIG9mIHRoZSBwcm9tcHQuXG4gICAqIEBzdW1tYXJ5IENvbmZpZ3VyZXMgdGhlIHF1ZXN0aW9uIG9yIGluc3RydWN0aW9uIHByZXNlbnRlZCB0byB0aGUgdXNlci5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gVGhlIG1lc3NhZ2UgdG8gYmUgZGlzcGxheWVkLlxuICAgKiBAcmV0dXJucyBUaGlzIFVzZXJJbnB1dCBpbnN0YW5jZSBmb3IgbWV0aG9kIGNoYWluaW5nLlxuICAgKi9cbiAgc2V0TWVzc2FnZSh2YWx1ZTogVmFsdWVPckZ1bmM8c3RyaW5nPiB8IHVuZGVmaW5lZCk6IHRoaXMge1xuICAgIFVzZXJJbnB1dC5sb2dnZXIudmVyYm9zZShgU2V0dGluZyBtZXNzYWdlIHRvOiAke3ZhbHVlfWApO1xuICAgIHRoaXMubWVzc2FnZSA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBTZXRzIHRoZSBpbml0aWFsIHZhbHVlIG9mIHRoZSBwcm9tcHQuXG4gICAqIEBzdW1tYXJ5IENvbmZpZ3VyZXMgdGhlIGRlZmF1bHQgdmFsdWUgcHJlc2VudGVkIHRvIHRoZSB1c2VyLlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgaW5pdGlhbCB2YWx1ZS5cbiAgICogQHJldHVybnMgVGhpcyBVc2VySW5wdXQgaW5zdGFuY2UgZm9yIG1ldGhvZCBjaGFpbmluZy5cbiAgICovXG4gIHNldEluaXRpYWwoXG4gICAgdmFsdWU6XG4gICAgICB8IEluaXRpYWxSZXR1cm5WYWx1ZVxuICAgICAgfCBQcmV2Q2FsbGVyPFIsIEluaXRpYWxSZXR1cm5WYWx1ZSB8IFByb21pc2U8SW5pdGlhbFJldHVyblZhbHVlPj5cbiAgICAgIHwgdW5kZWZpbmVkXG4gICk6IHRoaXMge1xuICAgIFVzZXJJbnB1dC5sb2dnZXIudmVyYm9zZShgU2V0dGluZyBpbml0aWFsIHZhbHVlIHRvOiAke3ZhbHVlfWApO1xuICAgIHRoaXMuaW5pdGlhbCA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBTZXRzIHRoZSBzdHlsZSBvZiB0aGUgcHJvbXB0LlxuICAgKiBAc3VtbWFyeSBDb25maWd1cmVzIHRoZSB2aXN1YWwgc3R5bGUgb2YgdGhlIHByb21wdC5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gVGhlIHN0eWxlIHRvIGJlIGFwcGxpZWQuXG4gICAqIEByZXR1cm5zIFRoaXMgVXNlcklucHV0IGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmcuXG4gICAqL1xuICBzZXRTdHlsZSh2YWx1ZTogc3RyaW5nIHwgUHJldkNhbGxlcjxSLCBzdHJpbmcgfCBGYWxzeT4gfCB1bmRlZmluZWQpOiB0aGlzIHtcbiAgICBVc2VySW5wdXQubG9nZ2VyLnZlcmJvc2UoYFNldHRpbmcgc3R5bGUgdG86ICR7dmFsdWV9YCk7XG4gICAgdGhpcy5zdHlsZSA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBTZXRzIHRoZSBmb3JtYXQgZnVuY3Rpb24gb2YgdGhlIHByb21wdC5cbiAgICogQHN1bW1hcnkgQ29uZmlndXJlcyBhIGZ1bmN0aW9uIHRvIGZvcm1hdCB0aGUgdXNlcidzIGlucHV0IGJlZm9yZSBpdCdzIHJldHVybmVkLlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgZm9ybWF0IGZ1bmN0aW9uLlxuICAgKiBAcmV0dXJucyBUaGlzIFVzZXJJbnB1dCBpbnN0YW5jZSBmb3IgbWV0aG9kIGNoYWluaW5nLlxuICAgKi9cbiAgc2V0Rm9ybWF0KHZhbHVlOiBQcmV2Q2FsbGVyPFIsIHZvaWQ+IHwgdW5kZWZpbmVkKTogdGhpcyB7XG4gICAgVXNlcklucHV0LmxvZ2dlci52ZXJib3NlKGBTZXR0aW5nIGZvcm1hdCBmdW5jdGlvbmApO1xuICAgIHRoaXMuZm9ybWF0ID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFNldHMgdGhlIHZhbGlkYXRpb24gZnVuY3Rpb24gb2YgdGhlIHByb21wdC5cbiAgICogQHN1bW1hcnkgQ29uZmlndXJlcyBhIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIHRoZSB1c2VyJ3MgaW5wdXQuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWxpZGF0aW9uIGZ1bmN0aW9uLlxuICAgKiBAcmV0dXJucyBUaGlzIFVzZXJJbnB1dCBpbnN0YW5jZSBmb3IgbWV0aG9kIGNoYWluaW5nLlxuICAgKi9cbiAgc2V0VmFsaWRhdGUoXG4gICAgdmFsdWU6XG4gICAgICB8IFByZXZDYWxsZXI8UiwgYm9vbGVhbiB8IHN0cmluZyB8IFByb21pc2U8Ym9vbGVhbiB8IHN0cmluZz4+XG4gICAgICB8IHVuZGVmaW5lZFxuICApOiB0aGlzIHtcbiAgICBVc2VySW5wdXQubG9nZ2VyLnZlcmJvc2UoYFNldHRpbmcgdmFsaWRhdGUgZnVuY3Rpb25gKTtcbiAgICB0aGlzLnZhbGlkYXRlID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFNldHMgdGhlIG9uU3RhdGUgY2FsbGJhY2sgb2YgdGhlIHByb21wdC5cbiAgICogQHN1bW1hcnkgQ29uZmlndXJlcyBhIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBzdGF0ZSBvZiB0aGUgcHJvbXB0IGNoYW5nZXMuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBvblN0YXRlIGNhbGxiYWNrIGZ1bmN0aW9uLlxuICAgKiBAcmV0dXJucyBUaGlzIFVzZXJJbnB1dCBpbnN0YW5jZSBmb3IgbWV0aG9kIGNoYWluaW5nLlxuICAgKi9cbiAgc2V0T25TdGF0ZSh2YWx1ZTogUHJldkNhbGxlcjxSLCB2b2lkPiB8IHVuZGVmaW5lZCk6IHRoaXMge1xuICAgIFVzZXJJbnB1dC5sb2dnZXIudmVyYm9zZShgU2V0dGluZyBvblN0YXRlIGNhbGxiYWNrYCk7XG4gICAgdGhpcy5vblN0YXRlID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFNldHMgdGhlIG1pbmltdW0gdmFsdWUgZm9yIG51bWJlciBpbnB1dHMuXG4gICAqIEBzdW1tYXJ5IENvbmZpZ3VyZXMgdGhlIGxvd2VzdCBudW1iZXIgdGhlIHVzZXIgY2FuIGlucHV0LlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgbWluaW11bSB2YWx1ZS5cbiAgICogQHJldHVybnMgVGhpcyBVc2VySW5wdXQgaW5zdGFuY2UgZm9yIG1ldGhvZCBjaGFpbmluZy5cbiAgICovXG4gIHNldE1pbih2YWx1ZTogbnVtYmVyIHwgUHJldkNhbGxlcjxSLCBudW1iZXIgfCBGYWxzeT4gfCB1bmRlZmluZWQpOiB0aGlzIHtcbiAgICBVc2VySW5wdXQubG9nZ2VyLnZlcmJvc2UoYFNldHRpbmcgbWluIHZhbHVlIHRvOiAke3ZhbHVlfWApO1xuICAgIHRoaXMubWluID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFNldHMgdGhlIG1heGltdW0gdmFsdWUgZm9yIG51bWJlciBpbnB1dHMuXG4gICAqIEBzdW1tYXJ5IENvbmZpZ3VyZXMgdGhlIGhpZ2hlc3QgbnVtYmVyIHRoZSB1c2VyIGNhbiBpbnB1dC5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gVGhlIG1heGltdW0gdmFsdWUuXG4gICAqIEByZXR1cm5zIFRoaXMgVXNlcklucHV0IGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmcuXG4gICAqL1xuICBzZXRNYXgodmFsdWU6IG51bWJlciB8IFByZXZDYWxsZXI8UiwgbnVtYmVyIHwgRmFsc3k+IHwgdW5kZWZpbmVkKTogdGhpcyB7XG4gICAgVXNlcklucHV0LmxvZ2dlci52ZXJib3NlKGBTZXR0aW5nIG1heCB2YWx1ZSB0bzogJHt2YWx1ZX1gKTtcbiAgICB0aGlzLm1heCA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBTZXRzIHdoZXRoZXIgdG8gYWxsb3cgZmxvYXQgdmFsdWVzIGZvciBudW1iZXIgaW5wdXRzLlxuICAgKiBAc3VtbWFyeSBDb25maWd1cmVzIHdoZXRoZXIgZGVjaW1hbCBudW1iZXJzIGFyZSBhbGxvd2VkLlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgLSBXaGV0aGVyIHRvIGFsbG93IGZsb2F0IHZhbHVlcy5cbiAgICogQHJldHVybnMgVGhpcyBVc2VySW5wdXQgaW5zdGFuY2UgZm9yIG1ldGhvZCBjaGFpbmluZy5cbiAgICovXG4gIHNldEZsb2F0KHZhbHVlOiBib29sZWFuIHwgUHJldkNhbGxlcjxSLCBib29sZWFuIHwgRmFsc3k+IHwgdW5kZWZpbmVkKTogdGhpcyB7XG4gICAgVXNlcklucHV0LmxvZ2dlci52ZXJib3NlKGBTZXR0aW5nIGZsb2F0IHRvOiAke3ZhbHVlfWApO1xuICAgIHRoaXMuZmxvYXQgPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gU2V0cyB0aGUgbnVtYmVyIG9mIGRlY2ltYWwgcGxhY2VzIHRvIHJvdW5kIHRvIGZvciBmbG9hdCBpbnB1dHMuXG4gICAqIEBzdW1tYXJ5IENvbmZpZ3VyZXMgdGhlIHByZWNpc2lvbiBvZiBmbG9hdCBpbnB1dHMuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBudW1iZXIgb2YgZGVjaW1hbCBwbGFjZXMuXG4gICAqIEByZXR1cm5zIFRoaXMgVXNlcklucHV0IGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmcuXG4gICAqL1xuICBzZXRSb3VuZCh2YWx1ZTogbnVtYmVyIHwgUHJldkNhbGxlcjxSLCBudW1iZXIgfCBGYWxzeT4gfCB1bmRlZmluZWQpOiB0aGlzIHtcbiAgICBVc2VySW5wdXQubG9nZ2VyLnZlcmJvc2UoYFNldHRpbmcgcm91bmQgdG86ICR7dmFsdWV9YCk7XG4gICAgdGhpcy5yb3VuZCA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBTZXRzIHRoZSBpbnN0cnVjdGlvbnMgZm9yIHRoZSB1c2VyLlxuICAgKiBAc3VtbWFyeSBDb25maWd1cmVzIGFkZGl0aW9uYWwgZ3VpZGFuY2UgcHJvdmlkZWQgdG8gdGhlIHVzZXIuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBpbnN0cnVjdGlvbnMuXG4gICAqIEByZXR1cm5zIFRoaXMgVXNlcklucHV0IGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmcuXG4gICAqL1xuICBzZXRJbnN0cnVjdGlvbnModmFsdWU6IHN0cmluZyB8IGJvb2xlYW4gfCB1bmRlZmluZWQpOiB0aGlzIHtcbiAgICBVc2VySW5wdXQubG9nZ2VyLnZlcmJvc2UoYFNldHRpbmcgaW5zdHJ1Y3Rpb25zIHRvOiAke3ZhbHVlfWApO1xuICAgIHRoaXMuaW5zdHJ1Y3Rpb25zID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFNldHMgdGhlIGluY3JlbWVudCB2YWx1ZSBmb3IgbnVtYmVyIGlucHV0cy5cbiAgICogQHN1bW1hcnkgQ29uZmlndXJlcyB0aGUgc3RlcCBzaXplIHdoZW4gaW5jcmVhc2luZyBvciBkZWNyZWFzaW5nIHRoZSBudW1iZXIuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBpbmNyZW1lbnQgdmFsdWUuXG4gICAqIEByZXR1cm5zIFRoaXMgVXNlcklucHV0IGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmcuXG4gICAqL1xuICBzZXRJbmNyZW1lbnQoXG4gICAgdmFsdWU6IG51bWJlciB8IFByZXZDYWxsZXI8UiwgbnVtYmVyIHwgRmFsc3k+IHwgdW5kZWZpbmVkXG4gICk6IHRoaXMge1xuICAgIFVzZXJJbnB1dC5sb2dnZXIudmVyYm9zZShgU2V0dGluZyBpbmNyZW1lbnQgdG86ICR7dmFsdWV9YCk7XG4gICAgdGhpcy5pbmNyZW1lbnQgPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gU2V0cyB0aGUgc2VwYXJhdG9yIGZvciBsaXN0IGlucHV0cy5cbiAgICogQHN1bW1hcnkgQ29uZmlndXJlcyB0aGUgY2hhcmFjdGVyIHVzZWQgdG8gc2VwYXJhdGUgbGlzdCBpdGVtcy5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gVGhlIHNlcGFyYXRvciBjaGFyYWN0ZXIuXG4gICAqIEByZXR1cm5zIFRoaXMgVXNlcklucHV0IGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmcuXG4gICAqL1xuICBzZXRTZXBhcmF0b3IoXG4gICAgdmFsdWU6IHN0cmluZyB8IFByZXZDYWxsZXI8Uiwgc3RyaW5nIHwgRmFsc3k+IHwgdW5kZWZpbmVkXG4gICk6IHRoaXMge1xuICAgIFVzZXJJbnB1dC5sb2dnZXIudmVyYm9zZShgU2V0dGluZyBzZXBhcmF0b3IgdG86ICR7dmFsdWV9YCk7XG4gICAgdGhpcy5zZXBhcmF0b3IgPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gU2V0cyB0aGUgYWN0aXZlIG9wdGlvbiBzdHlsZSBmb3Igc2VsZWN0IGlucHV0cy5cbiAgICogQHN1bW1hcnkgQ29uZmlndXJlcyB0aGUgc3R5bGUgYXBwbGllZCB0byB0aGUgY3VycmVudGx5IHNlbGVjdGVkIG9wdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gVGhlIGFjdGl2ZSBvcHRpb24gc3R5bGUuXG4gICAqIEByZXR1cm5zIFRoaXMgVXNlcklucHV0IGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmcuXG4gICAqL1xuICBzZXRBY3RpdmUodmFsdWU6IHN0cmluZyB8IFByZXZDYWxsZXI8Uiwgc3RyaW5nIHwgRmFsc3k+IHwgdW5kZWZpbmVkKTogdGhpcyB7XG4gICAgVXNlcklucHV0LmxvZ2dlci52ZXJib3NlKGBTZXR0aW5nIGFjdGl2ZSBzdHlsZSB0bzogJHt2YWx1ZX1gKTtcbiAgICB0aGlzLmFjdGl2ZSA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBTZXRzIHRoZSBpbmFjdGl2ZSBvcHRpb24gc3R5bGUgZm9yIHNlbGVjdCBpbnB1dHMuXG4gICAqIEBzdW1tYXJ5IENvbmZpZ3VyZXMgdGhlIHN0eWxlIGFwcGxpZWQgdG8gbm9uLXNlbGVjdGVkIG9wdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBpbmFjdGl2ZSBvcHRpb24gc3R5bGUuXG4gICAqIEByZXR1cm5zIFRoaXMgVXNlcklucHV0IGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmcuXG4gICAqL1xuICBzZXRJbmFjdGl2ZSh2YWx1ZTogc3RyaW5nIHwgUHJldkNhbGxlcjxSLCBzdHJpbmcgfCBGYWxzeT4gfCB1bmRlZmluZWQpOiB0aGlzIHtcbiAgICBVc2VySW5wdXQubG9nZ2VyLnZlcmJvc2UoYFNldHRpbmcgaW5hY3RpdmUgc3R5bGUgdG86ICR7dmFsdWV9YCk7XG4gICAgdGhpcy5pbmFjdGl2ZSA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBTZXRzIHRoZSBjaG9pY2VzIGZvciBzZWxlY3QsIG11bHRpc2VsZWN0LCBvciBhdXRvY29tcGxldGUgaW5wdXRzLlxuICAgKiBAc3VtbWFyeSBDb25maWd1cmVzIHRoZSBhdmFpbGFibGUgb3B0aW9ucyB0aGF0IHRoZSB1c2VyIGNhbiBzZWxlY3QgZnJvbSBpbiBjaG9pY2UtYmFzZWQgcHJvbXB0cy5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gVGhlIGFycmF5IG9mIGNob2ljZXMgb3IgYSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgdGhlIGNob2ljZXMuXG4gICAqIEByZXR1cm5zIFRoaXMgVXNlcklucHV0IGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmcuXG4gICAqL1xuICBzZXRDaG9pY2VzKFxuICAgIHZhbHVlOiBDaG9pY2VbXSB8IFByZXZDYWxsZXI8UiwgQ2hvaWNlW10gfCBGYWxzeT4gfCB1bmRlZmluZWRcbiAgKTogdGhpcyB7XG4gICAgVXNlcklucHV0LmxvZ2dlci52ZXJib3NlKGBTZXR0aW5nIGNob2ljZXM6ICR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfWApO1xuICAgIHRoaXMuY2hvaWNlcyA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBTZXRzIHRoZSBoaW50IHRleHQgZm9yIHRoZSBwcm9tcHQuXG4gICAqIEBzdW1tYXJ5IENvbmZpZ3VyZXMgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBkaXNwbGF5ZWQgdG8gdGhlIHVzZXIuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBoaW50IHRleHQuXG4gICAqIEByZXR1cm5zIFRoaXMgVXNlcklucHV0IGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmcuXG4gICAqL1xuICBzZXRIaW50KHZhbHVlOiBzdHJpbmcgfCBQcmV2Q2FsbGVyPFIsIHN0cmluZyB8IEZhbHN5PiB8IHVuZGVmaW5lZCk6IHRoaXMge1xuICAgIFVzZXJJbnB1dC5sb2dnZXIudmVyYm9zZShgU2V0dGluZyBoaW50IHRvOiAke3ZhbHVlfWApO1xuICAgIHRoaXMuaGludCA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBTZXRzIHRoZSB3YXJuaW5nIHRleHQgZm9yIHRoZSBwcm9tcHQuXG4gICAqIEBzdW1tYXJ5IENvbmZpZ3VyZXMgYSB3YXJuaW5nIG1lc3NhZ2UgZGlzcGxheWVkIHRvIHRoZSB1c2VyLlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgd2FybmluZyB0ZXh0LlxuICAgKiBAcmV0dXJucyBUaGlzIFVzZXJJbnB1dCBpbnN0YW5jZSBmb3IgbWV0aG9kIGNoYWluaW5nLlxuICAgKi9cbiAgc2V0V2Fybih2YWx1ZTogc3RyaW5nIHwgUHJldkNhbGxlcjxSLCBzdHJpbmcgfCBGYWxzeT4gfCB1bmRlZmluZWQpOiB0aGlzIHtcbiAgICBVc2VySW5wdXQubG9nZ2VyLnZlcmJvc2UoYFNldHRpbmcgd2FybiB0bzogJHt2YWx1ZX1gKTtcbiAgICB0aGlzLndhcm4gPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gU2V0cyB0aGUgc3VnZ2VzdGlvbiBmdW5jdGlvbiBmb3IgYXV0b2NvbXBsZXRlIGlucHV0cy5cbiAgICogQHN1bW1hcnkgQ29uZmlndXJlcyBhIGZ1bmN0aW9uIHRoYXQgcHJvdmlkZXMgc3VnZ2VzdGlvbnMgYmFzZWQgb24gdGhlIHVzZXIncyBpbnB1dCBhbmQgYXZhaWxhYmxlIGNob2ljZXMuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIEEgZnVuY3Rpb24gdGhhdCB0YWtlcyB0aGUgY3VycmVudCBpbnB1dCBhbmQgYXZhaWxhYmxlIGNob2ljZXMgYW5kIHJldHVybnMgYSBQcm9taXNlIHJlc29sdmluZyB0byBzdWdnZXN0aW9ucy5cbiAgICogQHJldHVybnMgVGhpcyBVc2VySW5wdXQgaW5zdGFuY2UgZm9yIG1ldGhvZCBjaGFpbmluZy5cbiAgICovXG4gIHNldFN1Z2dlc3QoXG4gICAgdmFsdWU6ICgoaW5wdXQ6IGFueSwgY2hvaWNlczogQ2hvaWNlW10pID0+IFByb21pc2U8YW55PikgfCB1bmRlZmluZWRcbiAgKTogdGhpcyB7XG4gICAgVXNlcklucHV0LmxvZ2dlci52ZXJib3NlKGBTZXR0aW5nIHN1Z2dlc3QgZnVuY3Rpb25gKTtcbiAgICB0aGlzLnN1Z2dlc3QgPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gU2V0cyB0aGUgbGltaXQgZm9yIGxpc3QgaW5wdXRzLlxuICAgKiBAc3VtbWFyeSBDb25maWd1cmVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBpdGVtcyB0aGF0IGNhbiBiZSBzZWxlY3RlZCBpbiBsaXN0LXR5cGUgcHJvbXB0cy5cbiAgICogQHRlbXBsYXRlIFIgLSBUaGUgdHlwZSBvZiB0aGUgcHJvbXB0IG5hbWUsIGV4dGVuZGluZyBzdHJpbmcuXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBtYXhpbXVtIG51bWJlciBvZiBpdGVtcyB0aGF0IGNhbiBiZSBzZWxlY3RlZCwgb3IgYSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgdGhpcyB2YWx1ZS5cbiAgICogQHJldHVybiBUaGlzIFVzZXJJbnB1dCBpbnN0YW5jZSBmb3IgbWV0aG9kIGNoYWluaW5nLlxuICAgKi9cbiAgc2V0TGltaXQodmFsdWU6IG51bWJlciB8IFByZXZDYWxsZXI8UiwgbnVtYmVyIHwgRmFsc3k+IHwgdW5kZWZpbmVkKTogdGhpcyB7XG4gICAgVXNlcklucHV0LmxvZ2dlci52ZXJib3NlKGBTZXR0aW5nIGxpbWl0IHRvOiAke3ZhbHVlfWApO1xuICAgIHRoaXMubGltaXQgPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gU2V0cyB0aGUgbWFzayBmb3IgcGFzc3dvcmQgaW5wdXRzLlxuICAgKiBAc3VtbWFyeSBDb25maWd1cmVzIHRoZSBjaGFyYWN0ZXIgdXNlZCB0byBoaWRlIHRoZSB1c2VyJ3MgaW5wdXQgaW4gcGFzc3dvcmQtdHlwZSBwcm9tcHRzLlxuICAgKiBAdGVtcGxhdGUgUiAtIFRoZSB0eXBlIG9mIHRoZSBwcm9tcHQgbmFtZSwgZXh0ZW5kaW5nIHN0cmluZy5cbiAgICogQHBhcmFtIHZhbHVlIC0gVGhlIGNoYXJhY3RlciB1c2VkIHRvIG1hc2sgdGhlIGlucHV0LCBvciBhIGZ1bmN0aW9uIHRvIGRldGVybWluZSB0aGlzIHZhbHVlLlxuICAgKiBAcmV0dXJuIFRoaXMgVXNlcklucHV0IGluc3RhbmNlIGZvciBtZXRob2QgY2hhaW5pbmcuXG4gICAqL1xuICBzZXRNYXNrKHZhbHVlOiBzdHJpbmcgfCBQcmV2Q2FsbGVyPFIsIHN0cmluZyB8IEZhbHN5PiB8IHVuZGVmaW5lZCk6IHRoaXMge1xuICAgIFVzZXJJbnB1dC5sb2dnZXIudmVyYm9zZShgU2V0dGluZyBtYXNrIHRvOiAke3ZhbHVlfWApO1xuICAgIHRoaXMubWFzayA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBTZXRzIHRoZSBzdGRvdXQgc3RyZWFtIGZvciB0aGUgcHJvbXB0LlxuICAgKiBAc3VtbWFyeSBDb25maWd1cmVzIHRoZSBvdXRwdXQgc3RyZWFtIHVzZWQgYnkgdGhlIHByb21wdCBmb3IgZGlzcGxheWluZyBtZXNzYWdlcyBhbmQgcmVzdWx0cy5cbiAgICogQHBhcmFtIHZhbHVlIC0gVGhlIFdyaXRhYmxlIHN0cmVhbSB0byBiZSB1c2VkIGFzIHN0ZG91dC5cbiAgICogQHJldHVybiBUaGlzIFVzZXJJbnB1dCBpbnN0YW5jZSBmb3IgbWV0aG9kIGNoYWluaW5nLlxuICAgKi9cbiAgc2V0U3Rkb3V0KHZhbHVlOiBXcml0YWJsZSB8IHVuZGVmaW5lZCk6IHRoaXMge1xuICAgIFVzZXJJbnB1dC5sb2dnZXIudmVyYm9zZShgU2V0dGluZyBzdGRvdXQgc3RyZWFtYCk7XG4gICAgdGhpcy5zdGRvdXQgPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFNldHMgdGhlIHN0ZGluIHN0cmVhbSBmb3IgdGhlIHByb21wdC5cbiAgICogQHN1bW1hcnkgQ29uZmlndXJlcyB0aGUgaW5wdXQgc3RyZWFtIHVzZWQgYnkgdGhlIHByb21wdCBmb3IgcmVjZWl2aW5nIHVzZXIgaW5wdXQuXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBSZWFkYWJsZSBzdHJlYW0gdG8gYmUgdXNlZCBhcyBzdGRpbi5cbiAgICogQHJldHVybiBUaGlzIFVzZXJJbnB1dCBpbnN0YW5jZSBmb3IgbWV0aG9kIGNoYWluaW5nLlxuICAgKi9cbiAgc2V0U3RkaW4odmFsdWU6IFJlYWRhYmxlIHwgdW5kZWZpbmVkKTogdGhpcyB7XG4gICAgdGhpcy5zdGRpbiA9IHZhbHVlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBBc2tzIHRoZSB1c2VyIGZvciBpbnB1dCBiYXNlZCBvbiB0aGUgY3VycmVudCBVc2VySW5wdXQgY29uZmlndXJhdGlvbi5cbiAgICogQHN1bW1hcnkgUHJvbXB0cyB0aGUgdXNlciBhbmQgcmV0dXJucyB0aGVpciByZXNwb25zZSBhcyBhIHNpbmdsZSB2YWx1ZS5cbiAgICogQHRlbXBsYXRlIFIgLSBUaGUgdHlwZSBvZiB0aGUgcHJvbXB0IG5hbWUsIGV4dGVuZGluZyBzdHJpbmcuXG4gICAqIEByZXR1cm4gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIHVzZXIncyBhbnN3ZXIuXG4gICAqL1xuICBhc3luYyBhc2soKSB7XG4gICAgcmV0dXJuIChhd2FpdCBVc2VySW5wdXQuYXNrKHRoaXMpKVt0aGlzLm5hbWUgYXMga2V5b2YgQW5zd2VyczxSPl07XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEFza3MgdGhlIHVzZXIgb25lIG9yIG1vcmUgcXVlc3Rpb25zIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBVc2VySW5wdXQgY29uZmlndXJhdGlvbnMuXG4gICAqIEBzdW1tYXJ5IFByb21wdHMgdGhlIHVzZXIgd2l0aCBvbmUgb3IgbW9yZSBxdWVzdGlvbnMgYW5kIHJldHVybnMgdGhlaXIgYW5zd2VycyBhcyBhbiBvYmplY3QuXG4gICAqIEB0ZW1wbGF0ZSBSIC0gVGhlIHR5cGUgb2YgdGhlIHByb21wdCBuYW1lLCBleHRlbmRpbmcgc3RyaW5nLlxuICAgKiBAcGFyYW0gcXVlc3Rpb24gLSBBIHNpbmdsZSBVc2VySW5wdXQgaW5zdGFuY2Ugb3IgYW4gYXJyYXkgb2YgVXNlcklucHV0IGluc3RhbmNlcy5cbiAgICogQHJldHVybiBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhbiBvYmplY3QgY29udGFpbmluZyB0aGUgdXNlcidzIGFuc3dlcnMuXG4gICAqIEBtZXJtYWlkXG4gICAqIHNlcXVlbmNlRGlhZ3JhbVxuICAgKiAgIHBhcnRpY2lwYW50IFUgYXMgVXNlclxuICAgKiAgIHBhcnRpY2lwYW50IEEgYXMgYXNrIG1ldGhvZFxuICAgKiAgIHBhcnRpY2lwYW50IFAgYXMgcHJvbXB0cyBsaWJyYXJ5XG4gICAqICAgQS0+PlA6IENhbGwgcHJvbXB0cyB3aXRoIHF1ZXN0aW9uKHMpXG4gICAqICAgUC0+PlU6IERpc3BsYXkgcHJvbXB0KHMpXG4gICAqICAgVS0+PlA6IFByb3ZpZGUgaW5wdXRcbiAgICogICBQLT4+QTogUmV0dXJuIGFuc3dlcnNcbiAgICogICBBLT4+QTogUHJvY2VzcyBhbnN3ZXJzXG4gICAqICAgQS0tPj5DYWxsZXI6IFJldHVybiBwcm9jZXNzZWQgYW5zd2Vyc1xuICAgKi9cbiAgc3RhdGljIGFzeW5jIGFzazxSIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nPihcbiAgICBxdWVzdGlvbjogVXNlcklucHV0PFI+IHwgVXNlcklucHV0PFI+W11cbiAgKSB7XG4gICAgY29uc3QgbG9nID0gVXNlcklucHV0LmxvZ2dlci5mb3IodGhpcy5hc2spO1xuICAgIGlmICghQXJyYXkuaXNBcnJheShxdWVzdGlvbikpIHtcbiAgICAgIHF1ZXN0aW9uID0gW3F1ZXN0aW9uXTtcbiAgICB9XG4gICAgbGV0IGFuc3dlcnM6IEFuc3dlcnM8Uj47XG4gICAgdHJ5IHtcbiAgICAgIGxvZy52ZXJib3NlKFxuICAgICAgICBgQXNraW5nIHF1ZXN0aW9uczogJHtxdWVzdGlvbi5tYXAoKHEpID0+IHEubmFtZSkuam9pbihcIiwgXCIpfWBcbiAgICAgICk7XG4gICAgICBhbnN3ZXJzID0gYXdhaXQgcHJvbXB0cyhxdWVzdGlvbik7XG4gICAgICBsb2cudmVyYm9zZShgUmVjZWl2ZWQgYW5zd2VyczogJHtKU09OLnN0cmluZ2lmeShhbnN3ZXJzLCBudWxsLCAyKX1gKTtcbiAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciB3aGlsZSBnZXR0aW5nIGlucHV0OiAke2Vycm9yfWApO1xuICAgIH1cbiAgICByZXR1cm4gYW5zd2VycztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQXNrcyB0aGUgdXNlciBmb3IgYSBudW1iZXIgaW5wdXQuXG4gICAqIEBzdW1tYXJ5IFByb21wdHMgdGhlIHVzZXIgdG8gZW50ZXIgYSBudW1iZXIsIHdpdGggb3B0aW9uYWwgbWluaW11bSwgbWF4aW11bSwgYW5kIGluaXRpYWwgdmFsdWVzLlxuICAgKiBAcGFyYW0gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBwcm9tcHQsIHVzZWQgYXMgdGhlIGtleSBpbiB0aGUgcmV0dXJuZWQgYW5zd2VycyBvYmplY3QuXG4gICAqIEBwYXJhbSBxdWVzdGlvbiAtIFRoZSBtZXNzYWdlIGRpc3BsYXllZCB0byB0aGUgdXNlci5cbiAgICogQHBhcmFtIG1pbiAtIFRoZSBtaW5pbXVtIGFsbG93ZWQgdmFsdWUgKG9wdGlvbmFsKS5cbiAgICogQHBhcmFtIG1heCAtIFRoZSBtYXhpbXVtIGFsbG93ZWQgdmFsdWUgKG9wdGlvbmFsKS5cbiAgICogQHBhcmFtIGluaXRpYWwgLSBUaGUgaW5pdGlhbCB2YWx1ZSBwcmVzZW50ZWQgdG8gdGhlIHVzZXIgKG9wdGlvbmFsKS5cbiAgICogQHJldHVybiBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgbnVtYmVyIGVudGVyZWQgYnkgdGhlIHVzZXIuXG4gICAqL1xuICBzdGF0aWMgYXN5bmMgYXNrTnVtYmVyKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBxdWVzdGlvbjogc3RyaW5nLFxuICAgIG1pbj86IG51bWJlcixcbiAgICBtYXg/OiBudW1iZXIsXG4gICAgaW5pdGlhbD86IG51bWJlclxuICApOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGNvbnN0IGxvZyA9IFVzZXJJbnB1dC5sb2dnZXIuZm9yKHRoaXMuYXNrTnVtYmVyKTtcbiAgICBsb2cudmVyYm9zZShcbiAgICAgIGBBc2tpbmcgbnVtYmVyIGlucHV0OiB1bmRlZmluZWQsIHF1ZXN0aW9uOiAke3F1ZXN0aW9ufSwgbWluOiAke21pbn0sIG1heDogJHttYXh9LCBpbml0aWFsOiAke2luaXRpYWx9YFxuICAgICk7XG4gICAgY29uc3QgdXNlcklucHV0ID0gbmV3IFVzZXJJbnB1dChuYW1lKVxuICAgICAgLnNldE1lc3NhZ2UocXVlc3Rpb24pXG4gICAgICAuc2V0VHlwZShcIm51bWJlclwiKTtcblxuICAgIGlmICh0eXBlb2YgbWluID09PSBcIm51bWJlclwiKSB1c2VySW5wdXQuc2V0TWluKG1pbik7XG5cbiAgICBpZiAodHlwZW9mIG1heCA9PT0gXCJudW1iZXJcIikgdXNlcklucHV0LnNldE1heChtYXgpO1xuXG4gICAgaWYgKHR5cGVvZiBpbml0aWFsID09PSBcIm51bWJlclwiKSB1c2VySW5wdXQuc2V0SW5pdGlhbChpbml0aWFsKTtcblxuICAgIHJldHVybiAoYXdhaXQgdGhpcy5hc2sodXNlcklucHV0KSlbbmFtZV07XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEFza3MgdGhlIHVzZXIgZm9yIGEgdGV4dCBpbnB1dC5cbiAgICogQHN1bW1hcnkgUHJvbXB0cyB0aGUgdXNlciB0byBlbnRlciB0ZXh0LCB3aXRoIG9wdGlvbmFsIG1hc2tpbmcgYW5kIGluaXRpYWwgdmFsdWUuXG4gICAqIEBwYXJhbSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHByb21wdCwgdXNlZCBhcyB0aGUga2V5IGluIHRoZSByZXR1cm5lZCBhbnN3ZXJzIG9iamVjdC5cbiAgICogQHBhcmFtIHF1ZXN0aW9uIC0gVGhlIG1lc3NhZ2UgZGlzcGxheWVkIHRvIHRoZSB1c2VyLlxuICAgKiBAcGFyYW0gbWFzayAtIFRoZSBjaGFyYWN0ZXIgdXNlZCB0byBtYXNrIHRoZSBpbnB1dCAob3B0aW9uYWwsIGZvciBwYXNzd29yZC1saWtlIGlucHV0cykuXG4gICAqIEBwYXJhbSBpbml0aWFsIC0gVGhlIGluaXRpYWwgdmFsdWUgcHJlc2VudGVkIHRvIHRoZSB1c2VyIChvcHRpb25hbCkuXG4gICAqIEByZXR1cm4gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIHRleHQgZW50ZXJlZCBieSB0aGUgdXNlci5cbiAgICovXG4gIHN0YXRpYyBhc3luYyBhc2tUZXh0KFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBxdWVzdGlvbjogc3RyaW5nLFxuICAgIG1hc2s6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZCxcbiAgICBpbml0aWFsPzogc3RyaW5nXG4gICk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgbG9nID0gVXNlcklucHV0LmxvZ2dlci5mb3IodGhpcy5hc2tUZXh0KTtcbiAgICBsb2cudmVyYm9zZShcbiAgICAgIGBBc2tpbmcgdGV4dCBpbnB1dDogdW5kZWZpbmVkLCBxdWVzdGlvbjogJHtxdWVzdGlvbn0sIG1hc2s6ICR7bWFza30sIGluaXRpYWw6ICR7aW5pdGlhbH1gXG4gICAgKTtcbiAgICBjb25zdCB1c2VySW5wdXQgPSBuZXcgVXNlcklucHV0KG5hbWUpLnNldE1lc3NhZ2UocXVlc3Rpb24pO1xuXG4gICAgaWYgKG1hc2spIHVzZXJJbnB1dC5zZXRNYXNrKG1hc2spO1xuICAgIGlmICh0eXBlb2YgaW5pdGlhbCA9PT0gXCJzdHJpbmdcIikgdXNlcklucHV0LnNldEluaXRpYWwoaW5pdGlhbCk7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLmFzayh1c2VySW5wdXQpKVtuYW1lXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gQXNrcyB0aGUgdXNlciBmb3IgYSBjb25maXJtYXRpb24gKHllcy9ubykuXG4gICAqIEBzdW1tYXJ5IFByb21wdHMgdGhlIHVzZXIgd2l0aCBhIHllcy9ubyBxdWVzdGlvbiBhbmQgcmV0dXJucyBhIGJvb2xlYW4gcmVzdWx0LlxuICAgKiBAcGFyYW0gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBwcm9tcHQsIHVzZWQgYXMgdGhlIGtleSBpbiB0aGUgcmV0dXJuZWQgYW5zd2VycyBvYmplY3QuXG4gICAqIEBwYXJhbSBxdWVzdGlvbiAtIFRoZSBtZXNzYWdlIGRpc3BsYXllZCB0byB0aGUgdXNlci5cbiAgICogQHBhcmFtIGluaXRpYWwgLSBUaGUgaW5pdGlhbCB2YWx1ZSBwcmVzZW50ZWQgdG8gdGhlIHVzZXIgKG9wdGlvbmFsKS5cbiAgICogQHJldHVybiBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhIGJvb2xlYW4gcmVwcmVzZW50aW5nIHRoZSB1c2VyJ3MgYW5zd2VyLlxuICAgKi9cbiAgc3RhdGljIGFzeW5jIGFza0NvbmZpcm1hdGlvbihcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgcXVlc3Rpb246IHN0cmluZyxcbiAgICBpbml0aWFsPzogYm9vbGVhblxuICApOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBsb2cgPSBVc2VySW5wdXQubG9nZ2VyLmZvcih0aGlzLmFza0NvbmZpcm1hdGlvbik7XG4gICAgbG9nLnZlcmJvc2UoXG4gICAgICBgQXNraW5nIGNvbmZpcm1hdGlvbiBpbnB1dDogdW5kZWZpbmVkLCBxdWVzdGlvbjogJHtxdWVzdGlvbn0sIGluaXRpYWw6ICR7aW5pdGlhbH1gXG4gICAgKTtcbiAgICBjb25zdCB1c2VySW5wdXQgPSBuZXcgVXNlcklucHV0KG5hbWUpXG4gICAgICAuc2V0TWVzc2FnZShxdWVzdGlvbilcbiAgICAgIC5zZXRUeXBlKFwiY29uZmlybVwiKTtcblxuICAgIGlmICh0eXBlb2YgaW5pdGlhbCAhPT0gXCJ1bmRlZmluZWRcIikgdXNlcklucHV0LnNldEluaXRpYWwoaW5pdGlhbCk7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLmFzayh1c2VySW5wdXQpKVtuYW1lXTtcbiAgfVxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFJlcGVhdGVkbHkgYXNrcyBmb3IgaW5wdXQgdW50aWwgYSB2YWxpZCByZXNwb25zZSBpcyBnaXZlbiBvciB0aGUgbGltaXQgaXMgcmVhY2hlZC5cbiAgICogQHN1bW1hcnkgVGhpcyBtZXRob2QgaW5zaXN0cyBvbiBnZXR0aW5nIGEgdmFsaWQgaW5wdXQgZnJvbSB0aGUgdXNlciwgYWxsb3dpbmcgZm9yIGEgc3BlY2lmaWVkIG51bWJlciBvZiBhdHRlbXB0cy5cbiAgICpcbiAgICogQHRlbXBsYXRlIFIgLSBUaGUgdHlwZSBvZiB0aGUgZXhwZWN0ZWQgcmVzdWx0LlxuICAgKiBAcGFyYW0gaW5wdXQgLSBUaGUgVXNlcklucHV0IGluc3RhbmNlIHRvIHVzZSBmb3IgcHJvbXB0aW5nLlxuICAgKiBAcGFyYW0gdGVzdCAtIEEgZnVuY3Rpb24gdG8gdmFsaWRhdGUgdGhlIHVzZXIncyBpbnB1dC5cbiAgICogQHBhcmFtIGRlZmF1bHRDb25maXJtYXRpb24gLSBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIGNvbmZpcm1hdGlvbiBwcm9tcHQgKHRydWUgZm9yIHllcywgZmFsc2UgZm9yIG5vKS5cbiAgICogQHBhcmFtIGxpbWl0IC0gVGhlIG1heGltdW0gbnVtYmVyIG9mIGF0dGVtcHRzIGFsbG93ZWQgKGRlZmF1bHQgaXMgMSkuXG4gICAqIEByZXR1cm4gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIHZhbGlkIGlucHV0IG9yIHVuZGVmaW5lZCBpZiB0aGUgbGltaXQgaXMgcmVhY2hlZC5cbiAgICpcbiAgICogQG1lcm1haWRcbiAgICogc2VxdWVuY2VEaWFncmFtXG4gICAqICAgcGFydGljaXBhbnQgVSBhcyBVc2VyXG4gICAqICAgcGFydGljaXBhbnQgSSBhcyBpbnNpc3QgbWV0aG9kXG4gICAqICAgcGFydGljaXBhbnQgQSBhcyBhc2sgbWV0aG9kXG4gICAqICAgcGFydGljaXBhbnQgVCBhcyB0ZXN0IGZ1bmN0aW9uXG4gICAqICAgcGFydGljaXBhbnQgQyBhcyBhc2tDb25maXJtYXRpb24gbWV0aG9kXG4gICAqICAgbG9vcCBVbnRpbCB2YWxpZCBpbnB1dCBvciBsaW1pdCByZWFjaGVkXG4gICAqICAgICBJLT4+QTogQ2FsbCBhc2sgd2l0aCBpbnB1dFxuICAgKiAgICAgQS0+PlU6IFByb21wdCB1c2VyXG4gICAqICAgICBVLT4+QTogUHJvdmlkZSBpbnB1dFxuICAgKiAgICAgQS0+Pkk6IFJldHVybiByZXN1bHRcbiAgICogICAgIEktPj5UOiBUZXN0IHJlc3VsdFxuICAgKiAgICAgYWx0IFRlc3QgcGFzc2VzXG4gICAqICAgICAgIEktPj5DOiBBc2sgZm9yIGNvbmZpcm1hdGlvblxuICAgKiAgICAgICBDLT4+VTogQ29uZmlybSBpbnB1dFxuICAgKiAgICAgICBVLT4+QzogUHJvdmlkZSBjb25maXJtYXRpb25cbiAgICogICAgICAgQy0+Pkk6IFJldHVybiBjb25maXJtYXRpb25cbiAgICogICAgICAgYWx0IENvbmZpcm1lZFxuICAgKiAgICAgICAgIEktLT4+Q2FsbGVyOiBSZXR1cm4gdmFsaWQgcmVzdWx0XG4gICAqICAgICAgIGVsc2UgTm90IGNvbmZpcm1lZFxuICAgKiAgICAgICAgIEktPj5JOiBDb250aW51ZSBsb29wXG4gICAqICAgICAgIGVuZFxuICAgKiAgICAgZWxzZSBUZXN0IGZhaWxzXG4gICAqICAgICAgIEktPj5JOiBDb250aW51ZSBsb29wXG4gICAqICAgICBlbmRcbiAgICogICBlbmRcbiAgICogICBJLS0+PkNhbGxlcjogUmV0dXJuIHVuZGVmaW5lZCBpZiBsaW1pdCByZWFjaGVkXG4gICAqL1xuICBzdGF0aWMgYXN5bmMgaW5zaXN0PFI+KFxuICAgIGlucHV0OiBVc2VySW5wdXQsXG4gICAgdGVzdDogKHJlczogc3RyaW5nIHwgbnVtYmVyKSA9PiBib29sZWFuLFxuICAgIGRlZmF1bHRDb25maXJtYXRpb246IGJvb2xlYW4sXG4gICAgbGltaXQgPSAxXG4gICk6IFByb21pc2U8UiB8IHVuZGVmaW5lZD4ge1xuICAgIGNvbnN0IGxvZyA9IFVzZXJJbnB1dC5sb2dnZXIuZm9yKHRoaXMuaW5zaXN0KTtcbiAgICBsb2cudmVyYm9zZShcbiAgICAgIGBJbnNpc3Rpbmcgb24gaW5wdXQ6ICR7aW5wdXQubmFtZX0sIHRlc3Q6ICR7dGVzdC50b1N0cmluZygpfSwgZGVmYXVsdENvbmZpcm1hdGlvbjogJHtkZWZhdWx0Q29uZmlybWF0aW9ufSwgbGltaXQ6ICR7bGltaXR9YFxuICAgICk7XG4gICAgbGV0IHJlc3VsdDogc3RyaW5nIHwgbnVtYmVyIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICAgIGxldCBjb3VudCA9IDA7XG4gICAgbGV0IGNvbmZpcm1hdGlvbjogYm9vbGVhbjtcbiAgICB0cnkge1xuICAgICAgZG8ge1xuICAgICAgICByZXN1bHQgPSAoYXdhaXQgVXNlcklucHV0LmFzayhpbnB1dCkpW1xuICAgICAgICAgIGlucHV0Lm5hbWUgYXMga2V5b2YgQW5zd2VyczxzdHJpbmc+XG4gICAgICAgIF0gYXMgc3RyaW5nO1xuICAgICAgICBpZiAoIXRlc3QocmVzdWx0KSkge1xuICAgICAgICAgIHJlc3VsdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25maXJtYXRpb24gPSBhd2FpdCBVc2VySW5wdXQuYXNrQ29uZmlybWF0aW9uKFxuICAgICAgICAgIGAke2lucHV0Lm5hbWV9LWNvbmZpcm1gLFxuICAgICAgICAgIGBJcyB0aGUgJHtpbnB1dC50eXBlfSBjb3JyZWN0P2AsXG4gICAgICAgICAgZGVmYXVsdENvbmZpcm1hdGlvblxuICAgICAgICApO1xuICAgICAgICBpZiAoIWNvbmZpcm1hdGlvbikgcmVzdWx0ID0gdW5kZWZpbmVkO1xuICAgICAgfSB3aGlsZSAodHlwZW9mIHJlc3VsdCA9PT0gXCJ1bmRlZmluZWRcIiAmJiBsaW1pdCA+IDEgJiYgY291bnQrKyA8IGxpbWl0KTtcbiAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICBsb2cuZXJyb3IoYEVycm9yIHdoaWxlIGluc2lzdGluZzogJHtlfWApO1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHJlc3VsdCA9PT0gXCJ1bmRlZmluZWRcIikgbG9nLmluZm8oXCJubyBzZWxlY3Rpb24uLi5cIik7XG4gICAgcmV0dXJuIHJlc3VsdCBhcyBSIHwgdW5kZWZpbmVkO1xuICB9XG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmVwZWF0ZWRseSBhc2tzIGZvciB0ZXh0IGlucHV0IHVudGlsIGEgdmFsaWQgcmVzcG9uc2UgaXMgZ2l2ZW4gb3IgdGhlIGxpbWl0IGlzIHJlYWNoZWQuXG4gICAqIEBzdW1tYXJ5IFRoaXMgbWV0aG9kIGluc2lzdHMgb24gZ2V0dGluZyBhIHZhbGlkIHRleHQgaW5wdXQgZnJvbSB0aGUgdXNlciwgYWxsb3dpbmcgZm9yIGEgc3BlY2lmaWVkIG51bWJlciBvZiBhdHRlbXB0cy5cbiAgICpcbiAgICogQHBhcmFtIG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgcHJvbXB0LCB1c2VkIGFzIHRoZSBrZXkgaW4gdGhlIHJldHVybmVkIGFuc3dlcnMgb2JqZWN0LlxuICAgKiBAcGFyYW0gcXVlc3Rpb24gLSBUaGUgbWVzc2FnZSBkaXNwbGF5ZWQgdG8gdGhlIHVzZXIuXG4gICAqIEBwYXJhbSB0ZXN0IC0gQSBmdW5jdGlvbiB0byB2YWxpZGF0ZSB0aGUgdXNlcidzIGlucHV0LlxuICAgKiBAcGFyYW0gbWFzayAtIFRoZSBjaGFyYWN0ZXIgdXNlZCB0byBtYXNrIHRoZSBpbnB1dCAob3B0aW9uYWwsIGZvciBwYXNzd29yZC1saWtlIGlucHV0cykuXG4gICAqIEBwYXJhbSBpbml0aWFsIC0gVGhlIGluaXRpYWwgdmFsdWUgcHJlc2VudGVkIHRvIHRoZSB1c2VyIChvcHRpb25hbCkuXG4gICAqIEBwYXJhbSBkZWZhdWx0Q29uZmlybWF0aW9uIC0gVGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoZSBjb25maXJtYXRpb24gcHJvbXB0ICh0cnVlIGZvciB5ZXMsIGZhbHNlIGZvciBubykuXG4gICAqIEBwYXJhbSBsaW1pdCAtIFRoZSBtYXhpbXVtIG51bWJlciBvZiBhdHRlbXB0cyBhbGxvd2VkIChkZWZhdWx0IGlzIC0xLCBtZWFuaW5nIHVubGltaXRlZCkuXG4gICAqIEByZXR1cm4gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIHZhbGlkIGlucHV0IG9yIHVuZGVmaW5lZCBpZiB0aGUgbGltaXQgaXMgcmVhY2hlZC5cbiAgICovXG4gIHN0YXRpYyBhc3luYyBpbnNpc3RGb3JUZXh0KFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBxdWVzdGlvbjogc3RyaW5nLFxuICAgIHRlc3Q6IChyZXM6IHN0cmluZykgPT4gYm9vbGVhbixcbiAgICBtYXNrOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQsXG4gICAgaW5pdGlhbD86IHN0cmluZyxcbiAgICBkZWZhdWx0Q29uZmlybWF0aW9uID0gZmFsc2UsXG4gICAgbGltaXQgPSAtMVxuICApOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IGxvZyA9IFVzZXJJbnB1dC5sb2dnZXIuZm9yKHRoaXMuaW5zaXN0Rm9yVGV4dCk7XG4gICAgbG9nLnZlcmJvc2UoXG4gICAgICBgSW5zaXN0aW5nIGZvciB0ZXh0IGlucHV0OiB1bmRlZmluZWQsIHF1ZXN0aW9uOiAke3F1ZXN0aW9ufSwgdGVzdDogJHt0ZXN0LnRvU3RyaW5nKCl9LCBtYXNrOiAke21hc2t9LCBpbml0aWFsOiAke2luaXRpYWx9LCBkZWZhdWx0Q29uZmlybWF0aW9uOiAke2RlZmF1bHRDb25maXJtYXRpb259LCBsaW1pdDogJHtsaW1pdH1gXG4gICAgKTtcbiAgICBjb25zdCB1c2VySW5wdXQgPSBuZXcgVXNlcklucHV0KG5hbWUpLnNldE1lc3NhZ2UocXVlc3Rpb24pO1xuXG4gICAgaWYgKG1hc2spIHVzZXJJbnB1dC5zZXRNYXNrKG1hc2spO1xuICAgIGlmICh0eXBlb2YgaW5pdGlhbCA9PT0gXCJzdHJpbmdcIikgdXNlcklucHV0LnNldEluaXRpYWwoaW5pdGlhbCk7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLmluc2lzdChcbiAgICAgIHVzZXJJbnB1dCxcbiAgICAgIHRlc3QgYXMgKHJlczogc3RyaW5nIHwgbnVtYmVyKSA9PiBib29sZWFuLFxuICAgICAgZGVmYXVsdENvbmZpcm1hdGlvbixcbiAgICAgIGxpbWl0XG4gICAgKSkgYXMgc3RyaW5nO1xuICB9XG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmVwZWF0ZWRseSBhc2tzIGZvciBudW1iZXIgaW5wdXQgdW50aWwgYSB2YWxpZCByZXNwb25zZSBpcyBnaXZlbiBvciB0aGUgbGltaXQgaXMgcmVhY2hlZC5cbiAgICogQHN1bW1hcnkgVGhpcyBtZXRob2QgaW5zaXN0cyBvbiBnZXR0aW5nIGEgdmFsaWQgbnVtYmVyIGlucHV0IGZyb20gdGhlIHVzZXIsIGFsbG93aW5nIGZvciBhIHNwZWNpZmllZCBudW1iZXIgb2YgYXR0ZW1wdHMuXG4gICAqXG4gICAqIEBwYXJhbSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHByb21wdCwgdXNlZCBhcyB0aGUga2V5IGluIHRoZSByZXR1cm5lZCBhbnN3ZXJzIG9iamVjdC5cbiAgICogQHBhcmFtIHF1ZXN0aW9uIC0gVGhlIG1lc3NhZ2UgZGlzcGxheWVkIHRvIHRoZSB1c2VyLlxuICAgKiBAcGFyYW0gdGVzdCAtIEEgZnVuY3Rpb24gdG8gdmFsaWRhdGUgdGhlIHVzZXIncyBpbnB1dC5cbiAgICogQHBhcmFtIG1pbiAtIFRoZSBtaW5pbXVtIGFsbG93ZWQgdmFsdWUgKG9wdGlvbmFsKS5cbiAgICogQHBhcmFtIG1heCAtIFRoZSBtYXhpbXVtIGFsbG93ZWQgdmFsdWUgKG9wdGlvbmFsKS5cbiAgICogQHBhcmFtIGluaXRpYWwgLSBUaGUgaW5pdGlhbCB2YWx1ZSBwcmVzZW50ZWQgdG8gdGhlIHVzZXIgKG9wdGlvbmFsKS5cbiAgICogQHBhcmFtIGRlZmF1bHRDb25maXJtYXRpb24gLSBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIGNvbmZpcm1hdGlvbiBwcm9tcHQgKHRydWUgZm9yIHllcywgZmFsc2UgZm9yIG5vKS5cbiAgICogQHBhcmFtIGxpbWl0IC0gVGhlIG1heGltdW0gbnVtYmVyIG9mIGF0dGVtcHRzIGFsbG93ZWQgKGRlZmF1bHQgaXMgLTEsIG1lYW5pbmcgdW5saW1pdGVkKS5cbiAgICogQHJldHVybiBBIFByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgdmFsaWQgaW5wdXQgb3IgdW5kZWZpbmVkIGlmIHRoZSBsaW1pdCBpcyByZWFjaGVkLlxuICAgKi9cbiAgc3RhdGljIGFzeW5jIGluc2lzdEZvck51bWJlcihcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgcXVlc3Rpb246IHN0cmluZyxcbiAgICB0ZXN0OiAocmVzOiBudW1iZXIpID0+IGJvb2xlYW4sXG4gICAgbWluPzogbnVtYmVyLFxuICAgIG1heD86IG51bWJlcixcbiAgICBpbml0aWFsPzogbnVtYmVyLFxuICAgIGRlZmF1bHRDb25maXJtYXRpb24gPSBmYWxzZSxcbiAgICBsaW1pdCA9IC0xXG4gICk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgY29uc3QgbG9nID0gVXNlcklucHV0LmxvZ2dlci5mb3IodGhpcy5pbnNpc3RGb3JOdW1iZXIpO1xuICAgIGxvZy52ZXJib3NlKFxuICAgICAgYEluc2lzdGluZyBmb3IgbnVtYmVyIGlucHV0OiB1bmRlZmluZWQsIHF1ZXN0aW9uOiAke3F1ZXN0aW9ufSwgdGVzdDogJHt0ZXN0LnRvU3RyaW5nKCl9LCBtaW46ICR7bWlufSwgbWF4OiAke21heH0sIGluaXRpYWw6ICR7aW5pdGlhbH0sIGRlZmF1bHRDb25maXJtYXRpb246ICR7ZGVmYXVsdENvbmZpcm1hdGlvbn0sIGxpbWl0OiAke2xpbWl0fWBcbiAgICApO1xuICAgIGNvbnN0IHVzZXJJbnB1dCA9IG5ldyBVc2VySW5wdXQobmFtZSlcbiAgICAgIC5zZXRNZXNzYWdlKHF1ZXN0aW9uKVxuICAgICAgLnNldFR5cGUoXCJudW1iZXJcIik7XG5cbiAgICBpZiAodHlwZW9mIG1pbiA9PT0gXCJudW1iZXJcIikgdXNlcklucHV0LnNldE1pbihtaW4pO1xuXG4gICAgaWYgKHR5cGVvZiBtYXggPT09IFwibnVtYmVyXCIpIHVzZXJJbnB1dC5zZXRNYXgobWF4KTtcblxuICAgIGlmICh0eXBlb2YgaW5pdGlhbCA9PT0gXCJudW1iZXJcIikgdXNlcklucHV0LnNldEluaXRpYWwoaW5pdGlhbCk7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLmluc2lzdChcbiAgICAgIHVzZXJJbnB1dCxcbiAgICAgIHRlc3QgYXMgKHJlczogc3RyaW5nIHwgbnVtYmVyKSA9PiBib29sZWFuLFxuICAgICAgZGVmYXVsdENvbmZpcm1hdGlvbixcbiAgICAgIGxpbWl0XG4gICAgKSkgYXMgbnVtYmVyO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBQYXJzZXMgY29tbWFuZC1saW5lIGFyZ3VtZW50cyBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgb3B0aW9ucy5cbiAgICogQHN1bW1hcnkgVXNlcyBOb2RlLmpzJ3MgdXRpbC5wYXJzZUFyZ3MgdG8gcGFyc2UgY29tbWFuZC1saW5lIGFyZ3VtZW50cyBhbmQgcmV0dXJuIHRoZSByZXN1bHQuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBwYXJzaW5nIGFyZ3VtZW50cy5cbiAgICogQHJldHVybiBBbiBvYmplY3QgY29udGFpbmluZyB0aGUgcGFyc2VkIGFyZ3VtZW50cy5cbiAgICogQG1lcm1haWRcbiAgICogc2VxdWVuY2VEaWFncmFtXG4gICAqICAgcGFydGljaXBhbnQgQyBhcyBDYWxsZXJcbiAgICogICBwYXJ0aWNpcGFudCBQIGFzIHBhcnNlQXJncyBtZXRob2RcbiAgICogICBwYXJ0aWNpcGFudCBVIGFzIHV0aWwucGFyc2VBcmdzXG4gICAqICAgQy0+PlA6IENhbGwgd2l0aCBvcHRpb25zXG4gICAqICAgUC0+PlA6IFByZXBhcmUgYXJncyBvYmplY3RcbiAgICogICBQLT4+VTogQ2FsbCBwYXJzZUFyZ3Mgd2l0aCBwcmVwYXJlZCBhcmdzXG4gICAqICAgVS0+PlA6IFJldHVybiBwYXJzZWQgcmVzdWx0XG4gICAqICAgUC0tPj5DOiBSZXR1cm4gUGFyc2VBcmdzUmVzdWx0XG4gICAqL1xuICBzdGF0aWMgcGFyc2VBcmdzKG9wdGlvbnM6IFBhcnNlQXJnc09wdGlvbnNDb25maWcpOiBQYXJzZUFyZ3NSZXN1bHQge1xuICAgIGNvbnN0IGxvZyA9IFVzZXJJbnB1dC5sb2dnZXIuZm9yKHRoaXMucGFyc2VBcmdzKTtcbiAgICBjb25zdCBhcmdzOiBQYXJzZUFyZ3NDb25maWcgPSB7XG4gICAgICBhcmdzOiBwcm9jZXNzLmFyZ3Yuc2xpY2UoMiksXG4gICAgICBvcHRpb25zOiBvcHRpb25zLFxuICAgIH07XG4gICAgbG9nLmRlYnVnKGBQYXJzaW5nIGFyZ3VtZW50czogJHtKU09OLnN0cmluZ2lmeShhcmdzLCBudWxsLCAyKX1gKTtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHBhcnNlQXJncyhhcmdzKTtcbiAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgbG9nLmRlYnVnKFxuICAgICAgICBgRXJyb3Igd2hpbGUgcGFyc2luZyBhcmd1bWVudHM6XFxuJHtKU09OLnN0cmluZ2lmeShhcmdzLCBudWxsLCAyKX1cXG4gfCBvcHRpb25zXFxuJHtKU09OLnN0cmluZ2lmeShvcHRpb25zLCBudWxsLCAyKX1cXG4gfCAke2Vycm9yfWBcbiAgICAgICk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yIHdoaWxlIHBhcnNpbmcgYXJndW1lbnRzOiAke2Vycm9yfWApO1xuICAgIH1cbiAgfVxufVxuIiwiLyoqXG4gKiBAZGVzY3JpcHRpb24gRGVmYXVsdCBjb21tYW5kIG9wdGlvbnMgZm9yIENMSSBjb21tYW5kcy5cbiAqIEBzdW1tYXJ5IERlZmluZXMgdGhlIHN0cnVjdHVyZSBhbmQgZGVmYXVsdCB2YWx1ZXMgZm9yIGNvbW1vbiBjb21tYW5kLWxpbmUgb3B0aW9ucyB1c2VkIGFjcm9zcyB2YXJpb3VzIENMSSBjb21tYW5kcy5cbiAqIEBjb25zdCBEZWZhdWx0Q29tbWFuZE9wdGlvbnNcbiAqIEB0eXBlZGVmIHtPYmplY3R9IERlZmF1bHRDb21tYW5kT3B0aW9uc1xuICogQHByb3BlcnR5IHtPYmplY3R9IHZlcmJvc2UgLSBWZXJib3NpdHkgbGV2ZWwgb3B0aW9uLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IHZlcmJvc2UudHlwZSAtIFRoZSB0eXBlIG9mIHRoZSB2ZXJib3NlIG9wdGlvbiAobnVtYmVyKS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB2ZXJib3NlLnNob3J0IC0gVGhlIHNob3J0IGZsYWcgZm9yIHRoZSB2ZXJib3NlIG9wdGlvbiAoVikuXG4gKiBAcHJvcGVydHkge251bWJlcn0gdmVyYm9zZS5kZWZhdWx0IC0gVGhlIGRlZmF1bHQgdmFsdWUgZm9yIHZlcmJvc2l0eSAoMCkuXG4gKiBAcHJvcGVydHkge09iamVjdH0gdmVyc2lvbiAtIFZlcnNpb24gZGlzcGxheSBvcHRpb24uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdmVyc2lvbi50eXBlIC0gVGhlIHR5cGUgb2YgdGhlIHZlcnNpb24gb3B0aW9uIChib29sZWFuKS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB2ZXJzaW9uLnNob3J0IC0gVGhlIHNob3J0IGZsYWcgZm9yIHRoZSB2ZXJzaW9uIG9wdGlvbiAodikuXG4gKiBAcHJvcGVydHkge3VuZGVmaW5lZH0gdmVyc2lvbi5kZWZhdWx0IC0gVGhlIGRlZmF1bHQgdmFsdWUgZm9yIHZlcnNpb24gZGlzcGxheSAodW5kZWZpbmVkKS5cbiAqIEBwcm9wZXJ0eSB7T2JqZWN0fSBoZWxwIC0gSGVscCBkaXNwbGF5IG9wdGlvbi5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBoZWxwLnR5cGUgLSBUaGUgdHlwZSBvZiB0aGUgaGVscCBvcHRpb24gKGJvb2xlYW4pLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGhlbHAuc2hvcnQgLSBUaGUgc2hvcnQgZmxhZyBmb3IgdGhlIGhlbHAgb3B0aW9uIChoKS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gaGVscC5kZWZhdWx0IC0gVGhlIGRlZmF1bHQgdmFsdWUgZm9yIGhlbHAgZGlzcGxheSAoZmFsc2UpLlxuICogQHByb3BlcnR5IHtPYmplY3R9IGxvZ0xldmVsIC0gTG9nIGxldmVsIG9wdGlvbi5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBsb2dMZXZlbC50eXBlIC0gVGhlIHR5cGUgb2YgdGhlIGxvZ0xldmVsIG9wdGlvbiAoc3RyaW5nKS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBsb2dMZXZlbC5kZWZhdWx0IC0gVGhlIGRlZmF1bHQgdmFsdWUgZm9yIGxvZyBsZXZlbCAoXCJpbmZvXCIpLlxuICogQHByb3BlcnR5IHtPYmplY3R9IGxvZ1N0eWxlIC0gTG9nIHN0eWxpbmcgb3B0aW9uLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGxvZ1N0eWxlLnR5cGUgLSBUaGUgdHlwZSBvZiB0aGUgbG9nU3R5bGUgb3B0aW9uIChib29sZWFuKS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gbG9nU3R5bGUuZGVmYXVsdCAtIFRoZSBkZWZhdWx0IHZhbHVlIGZvciBsb2cgc3R5bGluZyAodHJ1ZSkuXG4gKiBAcHJvcGVydHkge09iamVjdH0gdGltZXN0YW1wIC0gVGltZXN0YW1wIGRpc3BsYXkgb3B0aW9uLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IHRpbWVzdGFtcC50eXBlIC0gVGhlIHR5cGUgb2YgdGhlIHRpbWVzdGFtcCBvcHRpb24gKGJvb2xlYW4pLlxuICogQHByb3BlcnR5IHtib29sZWFufSB0aW1lc3RhbXAuZGVmYXVsdCAtIFRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aW1lc3RhbXAgZGlzcGxheSAodHJ1ZSkuXG4gKiBAcHJvcGVydHkge09iamVjdH0gYmFubmVyIC0gQmFubmVyIGRpc3BsYXkgb3B0aW9uLlxuICogQHByb3BlcnR5IHtzdHJpbmd9IGJhbm5lci50eXBlIC0gVGhlIHR5cGUgb2YgdGhlIGJhbm5lciBvcHRpb24gKGJvb2xlYW4pLlxuICogQHByb3BlcnR5IHtib29sZWFufSBiYW5uZXIuZGVmYXVsdCAtIFRoZSBkZWZhdWx0IHZhbHVlIGZvciBiYW5uZXIgZGlzcGxheSAoZmFsc2UpLlxuICogQG1lbWJlck9mIG1vZHVsZTp1dGlsc1xuICovXG5leHBvcnQgY29uc3QgRGVmYXVsdENvbW1hbmRPcHRpb25zID0ge1xuICB2ZXJib3NlOiB7XG4gICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgc2hvcnQ6IFwiVlwiLFxuICAgIGRlZmF1bHQ6IHVuZGVmaW5lZCxcbiAgfSxcbiAgdmVyc2lvbjoge1xuICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgIHNob3J0OiBcInZcIixcbiAgICBkZWZhdWx0OiB1bmRlZmluZWQsXG4gIH0sXG4gIGhlbHA6IHtcbiAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgICBzaG9ydDogXCJoXCIsXG4gICAgZGVmYXVsdDogZmFsc2UsXG4gIH0sXG4gIGxvZ0xldmVsOiB7XG4gICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICBkZWZhdWx0OiBcImluZm9cIixcbiAgfSxcbiAgbG9nU3R5bGU6IHtcbiAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgICBkZWZhdWx0OiB0cnVlLFxuICB9LFxuICB0aW1lc3RhbXA6IHtcbiAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgICBkZWZhdWx0OiB0cnVlLFxuICB9LFxuICBiYW5uZXI6IHtcbiAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgICBkZWZhdWx0OiB0cnVlLFxuICB9LFxufTtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gRGVmYXVsdCBjb21tYW5kIHZhbHVlcyBkZXJpdmVkIGZyb20gRGVmYXVsdENvbW1hbmRPcHRpb25zLlxuICogQHN1bW1hcnkgQ3JlYXRlcyBhbiBvYmplY3Qgd2l0aCB0aGUgZGVmYXVsdCB2YWx1ZXMgb2YgYWxsIG9wdGlvbnMgZGVmaW5lZCBpbiBEZWZhdWx0Q29tbWFuZE9wdGlvbnMuXG4gKiBAY29uc3QgRGVmYXVsdENvbW1hbmRWYWx1ZXNcbiAqIEB0eXBlZGVmIHtPYmplY3R9IERlZmF1bHRDb21tYW5kVmFsdWVzXG4gKiBAcHJvcGVydHkge3Vua25vd259IFtrZXk6IHN0cmluZ10gLSBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgZWFjaCBvcHRpb24gaW4gRGVmYXVsdENvbW1hbmRPcHRpb25zLlxuICogQG1lbWJlck9mIG1vZHVsZTp1dGlsc1xuICovXG5leHBvcnQgY29uc3QgRGVmYXVsdENvbW1hbmRWYWx1ZXM6IHtcbiAgW2sgaW4ga2V5b2YgdHlwZW9mIERlZmF1bHRDb21tYW5kT3B0aW9uc106IHVua25vd247XG59ID0gT2JqZWN0LmtleXMoRGVmYXVsdENvbW1hbmRPcHRpb25zKS5yZWR1Y2UoXG4gIChhY2M6IFJlY29yZDxrZXlvZiB0eXBlb2YgRGVmYXVsdENvbW1hbmRPcHRpb25zLCB1bmtub3duPiwga2V5OiBzdHJpbmcpID0+IHtcbiAgICBhY2Nba2V5IGFzIGtleW9mIHR5cGVvZiBEZWZhdWx0Q29tbWFuZE9wdGlvbnNdID1cbiAgICAgIERlZmF1bHRDb21tYW5kT3B0aW9uc1trZXkgYXMga2V5b2YgdHlwZW9mIERlZmF1bHRDb21tYW5kT3B0aW9uc10uZGVmYXVsdDtcbiAgICByZXR1cm4gYWNjO1xuICB9LFxuICB7fSBhcyBSZWNvcmQ8a2V5b2YgdHlwZW9mIERlZmF1bHRDb21tYW5kVmFsdWVzLCB1bmtub3duPlxuKTtcbiIsIi8qKlxuICogQGRlc2NyaXB0aW9uIFBhZHMgdGhlIGVuZCBvZiBhIHN0cmluZyB3aXRoIGEgc3BlY2lmaWVkIGNoYXJhY3Rlci5cbiAqIEBzdW1tYXJ5IEV4dGVuZHMgdGhlIGlucHV0IHN0cmluZyB0byBhIHNwZWNpZmllZCBsZW5ndGggYnkgYWRkaW5nIGEgcGFkZGluZyBjaGFyYWN0ZXIgdG8gdGhlIGVuZC5cbiAqIElmIHRoZSBpbnB1dCBzdHJpbmcgaXMgYWxyZWFkeSBsb25nZXIgdGhhbiB0aGUgc3BlY2lmaWVkIGxlbmd0aCwgaXQgaXMgcmV0dXJuZWQgdW5jaGFuZ2VkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHIgLSBUaGUgaW5wdXQgc3RyaW5nIHRvIGJlIHBhZGRlZC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBsZW5ndGggLSBUaGUgZGVzaXJlZCB0b3RhbCBsZW5ndGggb2YgdGhlIHJlc3VsdGluZyBzdHJpbmcuXG4gKiBAcGFyYW0ge3N0cmluZ30gW2NoYXI9XCIgXCJdIC0gVGhlIGNoYXJhY3RlciB0byB1c2UgZm9yIHBhZGRpbmcuIERlZmF1bHRzIHRvIGEgc3BhY2UuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBwYWRkZWQgc3RyaW5nLlxuICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBwYWRkaW5nIGNoYXJhY3RlciBpcyBub3QgZXhhY3RseSBvbmUgY2hhcmFjdGVyIGxvbmcuXG4gKlxuICogQGZ1bmN0aW9uIHBhZEVuZFxuICpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6dXRpbHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhZEVuZChcbiAgc3RyOiBzdHJpbmcsXG4gIGxlbmd0aDogbnVtYmVyLFxuICBjaGFyOiBzdHJpbmcgPSBcIiBcIlxuKTogc3RyaW5nIHtcbiAgaWYgKGNoYXIubGVuZ3RoICE9PSAxKVxuICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgY2hhcmFjdGVyIGxlbmd0aCBmb3IgcGFkZGluZy4gbXVzdCBiZSBvbmUhXCIpO1xuICByZXR1cm4gc3RyLnBhZEVuZChsZW5ndGgsIGNoYXIpO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBSZXBsYWNlcyBwbGFjZWhvbGRlcnMgaW4gYSBzdHJpbmcgd2l0aCBwcm92aWRlZCB2YWx1ZXMuXG4gKiBAc3VtbWFyeSBJbnRlcnBvbGF0ZXMgYSBzdHJpbmcgYnkgcmVwbGFjaW5nIHBsYWNlaG9sZGVycyBvZiB0aGUgZm9ybSAke3ZhcmlhYmxlTmFtZX1cbiAqIHdpdGggY29ycmVzcG9uZGluZyB2YWx1ZXMgZnJvbSB0aGUgcHJvdmlkZWQgb2JqZWN0LiBJZiBhIHBsYWNlaG9sZGVyIGRvZXNuJ3QgaGF2ZVxuICogYSBjb3JyZXNwb25kaW5nIHZhbHVlLCBpdCBpcyBsZWZ0IHVuY2hhbmdlZCBpbiB0aGUgc3RyaW5nLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dCAtIFRoZSBpbnB1dCBzdHJpbmcgY29udGFpbmluZyBwbGFjZWhvbGRlcnMgdG8gYmUgcmVwbGFjZWQuXG4gKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIG51bWJlciB8IHN0cmluZz59IHZhbHVlcyAtIEFuIG9iamVjdCBjb250YWluaW5nIGtleS12YWx1ZSBwYWlycyBmb3IgcmVwbGFjZW1lbnQuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBpbnRlcnBvbGF0ZWQgc3RyaW5nIHdpdGggcGxhY2Vob2xkZXJzIHJlcGxhY2VkIGJ5IHRoZWlyIGNvcnJlc3BvbmRpbmcgdmFsdWVzLlxuICpcbiAqIEBmdW5jdGlvbiBwYXRjaFBsYWNlaG9sZGVyc1xuICpcbiAqIEBtZXJtYWlkXG4gKiBzZXF1ZW5jZURpYWdyYW1cbiAqICAgcGFydGljaXBhbnQgQ2FsbGVyXG4gKiAgIHBhcnRpY2lwYW50IHBhdGNoU3RyaW5nXG4gKiAgIHBhcnRpY2lwYW50IFN0cmluZy5yZXBsYWNlXG4gKiAgIENhbGxlci0+PnBhdGNoU3RyaW5nOiBDYWxsIHdpdGggaW5wdXQgYW5kIHZhbHVlc1xuICogICBwYXRjaFN0cmluZy0+PlN0cmluZy5yZXBsYWNlOiBDYWxsIHdpdGggcmVnZXggYW5kIHJlcGxhY2VtZW50IGZ1bmN0aW9uXG4gKiAgIFN0cmluZy5yZXBsYWNlLT4+cGF0Y2hTdHJpbmc6IFJldHVybiByZXBsYWNlZCBzdHJpbmdcbiAqICAgcGF0Y2hTdHJpbmctLT4+Q2FsbGVyOiBSZXR1cm4gcGF0Y2hlZCBzdHJpbmdcbiAqXG4gKiBAbWVtYmVyT2YgbW9kdWxlOnV0aWxzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXRjaFBsYWNlaG9sZGVycyhcbiAgaW5wdXQ6IHN0cmluZyxcbiAgdmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXIgfCBzdHJpbmc+XG4pOiBzdHJpbmcge1xuICByZXR1cm4gaW5wdXQucmVwbGFjZShcbiAgICAvXFwkXFx7KFthLXpBLVowLTlfXSspXFx9L2csXG4gICAgKG1hdGNoLCB2YXJpYWJsZSkgPT4gKHZhbHVlc1t2YXJpYWJsZSBhcyBzdHJpbmddIGFzIHN0cmluZykgfHwgbWF0Y2hcbiAgKTtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gUmVwbGFjZXMgb2NjdXJyZW5jZXMgb2Yga2V5cyB3aXRoIHRoZWlyIGNvcnJlc3BvbmRpbmcgdmFsdWVzIGluIGEgc3RyaW5nLlxuICogQHN1bW1hcnkgSXRlcmF0ZXMgdGhyb3VnaCBhIHNldCBvZiBrZXktdmFsdWUgcGFpcnMgYW5kIHJlcGxhY2VzIGFsbCBvY2N1cnJlbmNlcyBvZiBlYWNoIGtleVxuICogaW4gdGhlIGlucHV0IHN0cmluZyB3aXRoIGl0cyBjb3JyZXNwb25kaW5nIHZhbHVlLiBTdXBwb3J0cyByZWd1bGFyIGV4cHJlc3Npb24gZmxhZ3MgZm9yIGN1c3RvbWl6ZWQgcmVwbGFjZW1lbnQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGlucHV0IC0gVGhlIGlucHV0IHN0cmluZyBpbiB3aGljaCByZXBsYWNlbWVudHMgd2lsbCBiZSBtYWRlLlxuICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBudW1iZXIgfCBzdHJpbmc+fSB2YWx1ZXMgLSBBbiBvYmplY3QgY29udGFpbmluZyBrZXktdmFsdWUgcGFpcnMgZm9yIHJlcGxhY2VtZW50LlxuICogQHBhcmFtIHtzdHJpbmd9IFtmbGFncz1cImdcIl0gLSBSZWd1bGFyIGV4cHJlc3Npb24gZmxhZ3MgdG8gY29udHJvbCB0aGUgcmVwbGFjZW1lbnQgYmVoYXZpb3IuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBzdHJpbmcgd2l0aCBhbGwgc3BlY2lmaWVkIHJlcGxhY2VtZW50cyBhcHBsaWVkLlxuICpcbiAqIEBmdW5jdGlvbiBwYXRjaFN0cmluZ1xuICpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6dXRpbHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhdGNoU3RyaW5nKFxuICBpbnB1dDogc3RyaW5nLFxuICB2YWx1ZXM6IFJlY29yZDxzdHJpbmcsIG51bWJlciB8IHN0cmluZz4sXG4gIGZsYWdzOiBzdHJpbmcgPSBcImdcIlxuKTogc3RyaW5nIHtcbiAgT2JqZWN0LmVudHJpZXModmFsdWVzKS5mb3JFYWNoKChba2V5LCB2YWxdKSA9PiB7XG4gICAgY29uc3QgcmVnZXhwID0gbmV3IFJlZ0V4cChlc2NhcGVSZWdFeHAoa2V5KSwgZmxhZ3MpO1xuICAgIGlucHV0ID0gaW5wdXQucmVwbGFjZShyZWdleHAsIHZhbCBhcyBzdHJpbmcpO1xuICB9KTtcbiAgcmV0dXJuIGlucHV0O1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBDb252ZXJ0cyBhIHN0cmluZyB0byBjYW1lbENhc2UuXG4gKiBAc3VtbWFyeSBUcmFuc2Zvcm1zIHRoZSBpbnB1dCBzdHJpbmcgaW50byBjYW1lbENhc2UgZm9ybWF0LCB3aGVyZSB3b3JkcyBhcmUgam9pbmVkIHdpdGhvdXQgc3BhY2VzXG4gKiBhbmQgZWFjaCB3b3JkIGFmdGVyIHRoZSBmaXJzdCBzdGFydHMgd2l0aCBhIGNhcGl0YWwgbGV0dGVyLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gVGhlIGlucHV0IHN0cmluZyB0byBiZSBjb252ZXJ0ZWQuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBpbnB1dCBzdHJpbmcgY29udmVydGVkIHRvIGNhbWVsQ2FzZS5cbiAqXG4gKiBAZnVuY3Rpb24gdG9DYW1lbENhc2VcbiAqXG4gKiBAbWVtYmVyT2YgbW9kdWxlOnV0aWxzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0NhbWVsQ2FzZSh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gdGV4dFxuICAgIC5yZXBsYWNlKC8oPzpeXFx3fFtBLVpdfFxcYlxcdykvZywgKHdvcmQsIGluZGV4KSA9PlxuICAgICAgaW5kZXggPT09IDAgPyB3b3JkLnRvTG93ZXJDYXNlKCkgOiB3b3JkLnRvVXBwZXJDYXNlKClcbiAgICApXG4gICAgLnJlcGxhY2UoL1xccysvZywgXCJcIik7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIENvbnZlcnRzIGEgc3RyaW5nIHRvIEVOVklST05NRU5UX1ZBUklBQkxFIGZvcm1hdC5cbiAqIEBzdW1tYXJ5IFRyYW5zZm9ybXMgdGhlIGlucHV0IHN0cmluZyBpbnRvIHVwcGVyY2FzZSB3aXRoIHdvcmRzIHNlcGFyYXRlZCBieSB1bmRlcnNjb3JlcyxcbiAqIHR5cGljYWxseSB1c2VkIGZvciBlbnZpcm9ubWVudCB2YXJpYWJsZSBuYW1lcy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIFRoZSBpbnB1dCBzdHJpbmcgdG8gYmUgY29udmVydGVkLlxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgaW5wdXQgc3RyaW5nIGNvbnZlcnRlZCB0byBFTlZJUk9OTUVOVF9WQVJJQUJMRSBmb3JtYXQuXG4gKlxuICogQGZ1bmN0aW9uIHRvRU5WRm9ybWF0XG4gKlxuICogQG1lbWJlck9mIG1vZHVsZTp1dGlsc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdG9FTlZGb3JtYXQodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRvU25ha2VDYXNlKHRleHQpLnRvVXBwZXJDYXNlKCk7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIENvbnZlcnRzIGEgc3RyaW5nIHRvIHNuYWtlX2Nhc2UuXG4gKiBAc3VtbWFyeSBUcmFuc2Zvcm1zIHRoZSBpbnB1dCBzdHJpbmcgaW50byBsb3dlcmNhc2Ugd2l0aCB3b3JkcyBzZXBhcmF0ZWQgYnkgdW5kZXJzY29yZXMuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBUaGUgaW5wdXQgc3RyaW5nIHRvIGJlIGNvbnZlcnRlZC5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGlucHV0IHN0cmluZyBjb252ZXJ0ZWQgdG8gc25ha2VfY2FzZS5cbiAqXG4gKiBAZnVuY3Rpb24gdG9TbmFrZUNhc2VcbiAqXG4gKiBAbWVtYmVyT2YgbW9kdWxlOnV0aWxzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b1NuYWtlQ2FzZSh0ZXh0OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gdGV4dFxuICAgIC5yZXBsYWNlKC8oW2Etel0pKFtBLVpdKS9nLCBcIiQxXyQyXCIpXG4gICAgLnJlcGxhY2UoL1tcXHMtXSsvZywgXCJfXCIpXG4gICAgLnRvTG93ZXJDYXNlKCk7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIENvbnZlcnRzIGEgc3RyaW5nIHRvIGtlYmFiLWNhc2UuXG4gKiBAc3VtbWFyeSBUcmFuc2Zvcm1zIHRoZSBpbnB1dCBzdHJpbmcgaW50byBsb3dlcmNhc2Ugd2l0aCB3b3JkcyBzZXBhcmF0ZWQgYnkgaHlwaGVucy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIFRoZSBpbnB1dCBzdHJpbmcgdG8gYmUgY29udmVydGVkLlxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgaW5wdXQgc3RyaW5nIGNvbnZlcnRlZCB0byBrZWJhYi1jYXNlLlxuICpcbiAqIEBmdW5jdGlvbiB0b0tlYmFiQ2FzZVxuICpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6dXRpbHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvS2ViYWJDYXNlKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0ZXh0XG4gICAgLnJlcGxhY2UoLyhbYS16XSkoW0EtWl0pL2csIFwiJDEtJDJcIilcbiAgICAucmVwbGFjZSgvW1xcc19dKy9nLCBcIi1cIilcbiAgICAudG9Mb3dlckNhc2UoKTtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQ29udmVydHMgYSBzdHJpbmcgdG8gUGFzY2FsQ2FzZS5cbiAqIEBzdW1tYXJ5IFRyYW5zZm9ybXMgdGhlIGlucHV0IHN0cmluZyBpbnRvIFBhc2NhbENhc2UgZm9ybWF0LCB3aGVyZSB3b3JkcyBhcmUgam9pbmVkIHdpdGhvdXQgc3BhY2VzXG4gKiBhbmQgZWFjaCB3b3JkIHN0YXJ0cyB3aXRoIGEgY2FwaXRhbCBsZXR0ZXIuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBUaGUgaW5wdXQgc3RyaW5nIHRvIGJlIGNvbnZlcnRlZC5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGlucHV0IHN0cmluZyBjb252ZXJ0ZWQgdG8gUGFzY2FsQ2FzZS5cbiAqXG4gKiBAZnVuY3Rpb24gdG9QYXNjYWxDYXNlXG4gKlxuICogQG1lbWJlck9mIG1vZHVsZTp1dGlsc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdG9QYXNjYWxDYXNlKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0ZXh0XG4gICAgLnJlcGxhY2UoLyg/Ol5cXHd8W0EtWl18XFxiXFx3KS9nLCAod29yZCkgPT4gd29yZC50b1VwcGVyQ2FzZSgpKVxuICAgIC5yZXBsYWNlKC9cXHMrL2csIFwiXCIpO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBFc2NhcGVzIHNwZWNpYWwgY2hhcmFjdGVycyBpbiBhIHN0cmluZyBmb3IgdXNlIGluIGEgcmVndWxhciBleHByZXNzaW9uLlxuICogQHN1bW1hcnkgQWRkcyBiYWNrc2xhc2hlcyBiZWZvcmUgY2hhcmFjdGVycyB0aGF0IGhhdmUgc3BlY2lhbCBtZWFuaW5nIGluIHJlZ3VsYXIgZXhwcmVzc2lvbnMsXG4gKiBhbGxvd2luZyB0aGUgc3RyaW5nIHRvIGJlIHVzZWQgYXMgYSBsaXRlcmFsIG1hdGNoIGluIGEgUmVnRXhwLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgLSBUaGUgc3RyaW5nIHRvIGVzY2FwZSBmb3IgcmVndWxhciBleHByZXNzaW9uIHVzZS5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGVzY2FwZWQgc3RyaW5nIHNhZmUgZm9yIHVzZSBpbiByZWd1bGFyIGV4cHJlc3Npb25zLlxuICpcbiAqIEBmdW5jdGlvbiBlc2NhcGVSZWdFeHBcbiAqXG4gKiBAbWVtYmVyT2YgbW9kdWxlOnV0aWxzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlc2NhcGVSZWdFeHAoc3RyaW5nOiBzdHJpbmcpIHtcbiAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKC9bLiorP14ke30oKXxbXFxdXFxcXF0vZywgXCJcXFxcJCZcIik7IC8vICQmIG1lYW5zIHRoZSB3aG9sZSBtYXRjaGVkIHN0cmluZ1xufVxuIiwiLyoqXG4gKiBAZGVzY3JpcHRpb24gRGVmYXVsdCBlbmNvZGluZyBmb3IgdGV4dCBvcGVyYXRpb25zLlxuICogQHN1bW1hcnkgVGhlIHN0YW5kYXJkIFVURi04IGVuY29kaW5nIHVzZWQgZm9yIHRleHQgcHJvY2Vzc2luZy5cbiAqIEBjb25zdCB7c3RyaW5nfSBFbmNvZGluZ1xuICogQG1lbWJlck9mIG1vZHVsZTp1dGlsc1xuICovXG5leHBvcnQgY29uc3QgRW5jb2RpbmcgPSBcInV0Zi04XCI7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFJlZ3VsYXIgZXhwcmVzc2lvbiBmb3Igc2VtYW50aWMgdmVyc2lvbmluZy5cbiAqIEBzdW1tYXJ5IEEgcmVnZXggcGF0dGVybiB0byBtYXRjaCBhbmQgcGFyc2Ugc2VtYW50aWMgdmVyc2lvbiBzdHJpbmdzLlxuICogQGNvbnN0IHtSZWdFeHB9IFNlbVZlcnNpb25SZWdleFxuICogQG1lbWJlck9mIG1vZHVsZTp1dGlsc1xuICovXG5leHBvcnQgY29uc3QgU2VtVmVyc2lvblJlZ2V4ID1cbiAgL14oXFxkKylcXC4oXFxkKylcXC4oXFxkKykoPzotKFswLTlBLVphLXotXSsoPzpcXC5bMC05QS1aYS16XSkpKS9nO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBFbnVtIGZvciBzZW1hbnRpYyB2ZXJzaW9uIGNvbXBvbmVudHMuXG4gKiBAc3VtbWFyeSBEZWZpbmVzIHRoZSB0aHJlZSBsZXZlbHMgb2Ygc2VtYW50aWMgdmVyc2lvbmluZzogUEFUQ0gsIE1JTk9SLCBhbmQgTUFKT1IuXG4gKiBAZW51bSB7c3RyaW5nfVxuICogQG1lbWJlck9mIG1vZHVsZTp1dGlsc1xuICovXG5leHBvcnQgZW51bSBTZW1WZXJzaW9uIHtcbiAgLyoqIFBhdGNoIHZlcnNpb24gZm9yIGJhY2t3YXJkcy1jb21wYXRpYmxlIGJ1ZyBmaXhlcy4gKi9cbiAgUEFUQ0ggPSBcInBhdGNoXCIsXG4gIC8qKiBNaW5vciB2ZXJzaW9uIGZvciBiYWNrd2FyZHMtY29tcGF0aWJsZSBuZXcgZmVhdHVyZXMuICovXG4gIE1JTk9SID0gXCJtaW5vclwiLFxuICAvKiogTWFqb3IgdmVyc2lvbiBmb3IgY2hhbmdlcyB0aGF0IGJyZWFrIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LiAqL1xuICBNQUpPUiA9IFwibWFqb3JcIixcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gRmxhZyB0byBpbmRpY2F0ZSBub24tQ0kgZW52aXJvbm1lbnQuXG4gKiBAc3VtbWFyeSBVc2VkIHRvIHNwZWNpZnkgdGhhdCBhIGNvbW1hbmQgc2hvdWxkIHJ1biBvdXRzaWRlIG9mIGEgQ29udGludW91cyBJbnRlZ3JhdGlvbiBlbnZpcm9ubWVudC5cbiAqIEBjb25zdCB7c3RyaW5nfSBOb0NJRkxhZ1xuICogQG1lbWJlck9mIG1vZHVsZTp1dGlsc1xuICovXG5leHBvcnQgY29uc3QgTm9DSUZMYWcgPSBcIi1uby1jaVwiO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBLZXkgZm9yIHRoZSBzZXR1cCBzY3JpcHQgaW4gcGFja2FnZS5qc29uLlxuICogQHN1bW1hcnkgSWRlbnRpZmllcyB0aGUgc2NyaXB0IHRoYXQgcnVucyBhZnRlciBwYWNrYWdlIGluc3RhbGxhdGlvbi5cbiAqIEBjb25zdCB7c3RyaW5nfSBTZXR1cFNjcmlwdEtleVxuICogQG1lbWJlck9mIG1vZHVsZTp1dGlsc1xuICovXG5leHBvcnQgY29uc3QgU2V0dXBTY3JpcHRLZXkgPSBcInBvc3RpbnN0YWxsXCI7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEVudW0gZm9yIHZhcmlvdXMgYXV0aGVudGljYXRpb24gdG9rZW5zLlxuICogQHN1bW1hcnkgRGVmaW5lcyB0aGUgZmlsZSBuYW1lcyBmb3Igc3RvcmluZyBkaWZmZXJlbnQgdHlwZXMgb2YgYXV0aGVudGljYXRpb24gdG9rZW5zLlxuICogQGVudW0ge3N0cmluZ31cbiAqIEBtZW1iZXJPZiBtb2R1bGU6dXRpbHNcbiAqL1xuZXhwb3J0IGVudW0gVG9rZW5zIHtcbiAgLyoqIEdpdCBhdXRoZW50aWNhdGlvbiB0b2tlbiBmaWxlIG5hbWUuICovXG4gIEdJVCA9IFwiLnRva2VuXCIsXG4gIC8qKiBOUE0gYXV0aGVudGljYXRpb24gdG9rZW4gZmlsZSBuYW1lLiAqL1xuICBOUE0gPSBcIi5ucG10b2tlblwiLFxuICAvKiogRG9ja2VyIGF1dGhlbnRpY2F0aW9uIHRva2VuIGZpbGUgbmFtZS4gKi9cbiAgRE9DS0VSID0gXCIuZG9ja2VydG9rZW5cIixcbiAgLyoqIENvbmZsdWVuY2UgYXV0aGVudGljYXRpb24gdG9rZW4gZmlsZSBuYW1lLiAqL1xuICBDT05GTFVFTkNFID0gXCIuY29uZmx1ZW5jZS10b2tlblwiLFxufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBDb2RlIHVzZWQgdG8gaW5kaWNhdGUgYW4gb3BlcmF0aW9uIHdhcyBhYm9ydGVkLlxuICogQHN1bW1hcnkgU3RhbmRhcmQgbWVzc2FnZSB1c2VkIHdoZW4gYSBwcm9jZXNzIGlzIG1hbnVhbGx5IHRlcm1pbmF0ZWQuXG4gKiBAY29uc3Qge3N0cmluZ30gQWJvcnRDb2RlXG4gKiBAbWVtYmVyT2YgbW9kdWxlOnV0aWxzXG4gKi9cbmV4cG9ydCBjb25zdCBBYm9ydENvZGUgPSBcIkFib3J0ZWRcIjtcbiIsImltcG9ydCB7IEVuY29kaW5nIH0gZnJvbSBcIi4uL3V0aWxzL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgT3V0cHV0V3JpdGVyIH0gZnJvbSBcIi4vT3V0cHV0V3JpdGVyXCI7XG5pbXBvcnQgeyBQcm9taXNlRXhlY3V0b3IgfSBmcm9tIFwiLi4vdXRpbHMvdHlwZXNcIjtcbmltcG9ydCB7IE91dHB1dFR5cGUgfSBmcm9tIFwiLi90eXBlc1wiO1xuaW1wb3J0IHsgc3R5bGUgfSBmcm9tIFwic3R5bGVkLXN0cmluZy1idWlsZGVyXCI7XG5pbXBvcnQgeyBMb2dnZXIsIExvZ2dpbmcgfSBmcm9tIFwiQGRlY2FmLXRzL2xvZ2dpbmdcIjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQSBzdGFuZGFyZCBvdXRwdXQgd3JpdGVyIGZvciBoYW5kbGluZyBjb21tYW5kIGV4ZWN1dGlvbiBvdXRwdXQuXG4gKiBAc3VtbWFyeSBUaGlzIGNsYXNzIGltcGxlbWVudHMgdGhlIE91dHB1dFdyaXRlciBpbnRlcmZhY2UgYW5kIHByb3ZpZGVzIG1ldGhvZHMgZm9yXG4gKiBoYW5kbGluZyB2YXJpb3VzIHR5cGVzIG9mIG91dHB1dCBmcm9tIGNvbW1hbmQgZXhlY3V0aW9uLCBpbmNsdWRpbmcgc3RhbmRhcmQgb3V0cHV0LFxuICogZXJyb3Igb3V0cHV0LCBhbmQgZXhpdCBjb2Rlcy4gSXQgYWxzbyBpbmNsdWRlcyB1dGlsaXR5IG1ldGhvZHMgZm9yIHBhcnNpbmcgY29tbWFuZHNcbiAqIGFuZCByZXNvbHZpbmcgb3IgcmVqZWN0aW5nIHByb21pc2VzIGJhc2VkIG9uIGV4ZWN1dGlvbiByZXN1bHRzLlxuICpcbiAqIEB0ZW1wbGF0ZSBSIC0gVGhlIHR5cGUgb2YgdGhlIHJlc29sdmVkIHZhbHVlLCBkZWZhdWx0aW5nIHRvIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0gY21kIC0gVGhlIGNvbW1hbmQgc3RyaW5nIHRvIGJlIGV4ZWN1dGVkLlxuICogQHBhcmFtIGxvY2sgLSBBIFByb21pc2VFeGVjdXRvciB0byBjb250cm9sIHRoZSBhc3luY2hyb25vdXMgZmxvdy5cbiAqIEBwYXJhbSBhcmdzIC0gQWRkaXRpb25hbCBhcmd1bWVudHMgKHVudXNlZCBpbiB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbikuXG4gKlxuICogQGNsYXNzXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgU3RhbmRhcmRPdXRwdXRXcml0ZXIgfSBmcm9tICdAZGVjYWYtdHMvdXRpbHMnO1xuICogaW1wb3J0IHsgUHJvbWlzZUV4ZWN1dG9yIH0gZnJvbSAnQGRlY2FmLXRzL3V0aWxzJztcbiAqIFxuICogLy8gQ3JlYXRlIGEgcHJvbWlzZSBleGVjdXRvclxuICogY29uc3QgZXhlY3V0b3I6IFByb21pc2VFeGVjdXRvcjxzdHJpbmc+ID0ge1xuICogICByZXNvbHZlOiAodmFsdWUpID0+IGNvbnNvbGUubG9nKGBSZXNvbHZlZDogJHt2YWx1ZX1gKSxcbiAqICAgcmVqZWN0OiAoZXJyb3IpID0+IGNvbnNvbGUuZXJyb3IoYFJlamVjdGVkOiAke2Vycm9yLm1lc3NhZ2V9YClcbiAqIH07XG4gKiBcbiAqIC8vIENyZWF0ZSBhIHN0YW5kYXJkIG91dHB1dCB3cml0ZXJcbiAqIGNvbnN0IHdyaXRlciA9IG5ldyBTdGFuZGFyZE91dHB1dFdyaXRlcignbHMgLWxhJywgZXhlY3V0b3IpO1xuICogXG4gKiAvLyBVc2UgdGhlIHdyaXRlciB0byBoYW5kbGUgY29tbWFuZCBvdXRwdXRcbiAqIHdyaXRlci5kYXRhKCdGaWxlIGxpc3Qgb3V0cHV0Li4uJyk7XG4gKiB3cml0ZXIuZXhpdCgwLCBbJ0NvbW1hbmQgZXhlY3V0ZWQgc3VjY2Vzc2Z1bGx5J10pO1xuICogYGBgXG4gKlxuICogQG1lcm1haWRcbiAqIHNlcXVlbmNlRGlhZ3JhbVxuICogICBwYXJ0aWNpcGFudCBDbGllbnRcbiAqICAgcGFydGljaXBhbnQgU3RhbmRhcmRPdXRwdXRXcml0ZXJcbiAqICAgcGFydGljaXBhbnQgTG9nZ2VyXG4gKiAgIHBhcnRpY2lwYW50IFByb21pc2VFeGVjdXRvclxuICogICBcbiAqICAgQ2xpZW50LT4+U3RhbmRhcmRPdXRwdXRXcml0ZXI6IG5ldyBTdGFuZGFyZE91dHB1dFdyaXRlcihjbWQsIGxvY2spXG4gKiAgIFN0YW5kYXJkT3V0cHV0V3JpdGVyLT4+TG9nZ2VyOiBMb2dnaW5nLmZvcihjbWQpXG4gKiAgIFxuICogICBDbGllbnQtPj5TdGFuZGFyZE91dHB1dFdyaXRlcjogZGF0YShjaHVuaylcbiAqICAgU3RhbmRhcmRPdXRwdXRXcml0ZXItPj5TdGFuZGFyZE91dHB1dFdyaXRlcjogbG9nKFwic3Rkb3V0XCIsIGNodW5rKVxuICogICBTdGFuZGFyZE91dHB1dFdyaXRlci0+PkxvZ2dlcjogbG9nZ2VyLmluZm8obG9nKVxuICogICBcbiAqICAgQ2xpZW50LT4+U3RhbmRhcmRPdXRwdXRXcml0ZXI6IGVycm9yKGNodW5rKVxuICogICBTdGFuZGFyZE91dHB1dFdyaXRlci0+PlN0YW5kYXJkT3V0cHV0V3JpdGVyOiBsb2coXCJzdGRlcnJcIiwgY2h1bmspXG4gKiAgIFN0YW5kYXJkT3V0cHV0V3JpdGVyLT4+TG9nZ2VyOiBsb2dnZXIuaW5mbyhsb2cpXG4gKiAgIFxuICogICBDbGllbnQtPj5TdGFuZGFyZE91dHB1dFdyaXRlcjogZXhpdChjb2RlLCBsb2dzKVxuICogICBTdGFuZGFyZE91dHB1dFdyaXRlci0+PlN0YW5kYXJkT3V0cHV0V3JpdGVyOiBsb2coXCJzdGRvdXRcIiwgZXhpdE1lc3NhZ2UpXG4gKiAgIGFsdCBjb2RlID09PSAwXG4gKiAgICAgU3RhbmRhcmRPdXRwdXRXcml0ZXItPj5TdGFuZGFyZE91dHB1dFdyaXRlcjogcmVzb2x2ZShsb2dzKVxuICogICAgIFN0YW5kYXJkT3V0cHV0V3JpdGVyLT4+UHJvbWlzZUV4ZWN1dG9yOiBsb2NrLnJlc29sdmUocmVhc29uKVxuICogICBlbHNlIGNvZGUgIT09IDBcbiAqICAgICBTdGFuZGFyZE91dHB1dFdyaXRlci0+PlN0YW5kYXJkT3V0cHV0V3JpdGVyOiByZWplY3QoZXJyb3IpXG4gKiAgICAgU3RhbmRhcmRPdXRwdXRXcml0ZXItPj5Qcm9taXNlRXhlY3V0b3I6IGxvY2sucmVqZWN0KHJlYXNvbilcbiAqICAgZW5kXG4gKi9cbmV4cG9ydCBjbGFzcyBTdGFuZGFyZE91dHB1dFdyaXRlcjxSID0gc3RyaW5nPiBpbXBsZW1lbnRzIE91dHB1dFdyaXRlciB7XG4gIHByb3RlY3RlZCBsb2dnZXI6IExvZ2dlcjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgY21kOiBzdHJpbmcsXG4gICAgcHJvdGVjdGVkIGxvY2s6IFByb21pc2VFeGVjdXRvcjxSPixcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgLi4uYXJnczogdW5rbm93bltdXG4gICkge1xuICAgIHRoaXMubG9nZ2VyID0gTG9nZ2luZy5mb3IodGhpcy5jbWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBMb2dzIG91dHB1dCB0byB0aGUgY29uc29sZS5cbiAgICogQHN1bW1hcnkgRm9ybWF0cyBhbmQgbG9ncyB0aGUgZ2l2ZW4gZGF0YSB3aXRoIGEgdGltZXN0YW1wIGFuZCB0eXBlIGluZGljYXRvci5cbiAgICpcbiAgICogQHBhcmFtIHR5cGUgLSBUaGUgdHlwZSBvZiBvdXRwdXQgKHN0ZG91dCBvciBzdGRlcnIpLlxuICAgKiBAcGFyYW0gZGF0YSAtIFRoZSBkYXRhIHRvIGJlIGxvZ2dlZC5cbiAgICovXG4gIHByb3RlY3RlZCBsb2codHlwZTogT3V0cHV0VHlwZSwgZGF0YTogc3RyaW5nIHwgQnVmZmVyKSB7XG4gICAgZGF0YSA9IEJ1ZmZlci5pc0J1ZmZlcihkYXRhKSA/IGRhdGEudG9TdHJpbmcoRW5jb2RpbmcpIDogZGF0YTtcbiAgICBjb25zdCBsb2cgPSB0eXBlID09PSBcInN0ZGVyclwiID8gc3R5bGUoZGF0YSkucmVkLnRleHQgOiBkYXRhO1xuICAgIHRoaXMubG9nZ2VyLmluZm8obG9nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gSGFuZGxlcyBzdGFuZGFyZCBvdXRwdXQgZGF0YS5cbiAgICogQHN1bW1hcnkgTG9ncyB0aGUgZ2l2ZW4gY2h1bmsgYXMgc3RhbmRhcmQgb3V0cHV0LlxuICAgKlxuICAgKiBAcGFyYW0gY2h1bmsgLSBUaGUgZGF0YSBjaHVuayB0byBiZSBsb2dnZWQuXG4gICAqL1xuICBkYXRhKGNodW5rOiBhbnkpIHtcbiAgICB0aGlzLmxvZyhcInN0ZG91dFwiLCBTdHJpbmcoY2h1bmspKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gSGFuZGxlcyBlcnJvciBvdXRwdXQgZGF0YS5cbiAgICogQHN1bW1hcnkgTG9ncyB0aGUgZ2l2ZW4gY2h1bmsgYXMgZXJyb3Igb3V0cHV0LlxuICAgKlxuICAgKiBAcGFyYW0gY2h1bmsgLSBUaGUgZXJyb3IgZGF0YSBjaHVuayB0byBiZSBsb2dnZWQuXG4gICAqL1xuICBlcnJvcihjaHVuazogYW55KSB7XG4gICAgdGhpcy5sb2coXCJzdGRlcnJcIiwgU3RyaW5nKGNodW5rKSk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEhhbmRsZXMgZXJyb3Igb2JqZWN0cy5cbiAgICogQHN1bW1hcnkgTG9ncyB0aGUgZXJyb3IgbWVzc2FnZSBmcm9tIHRoZSBnaXZlbiBFcnJvciBvYmplY3QuXG4gICAqXG4gICAqIEBwYXJhbSBlcnIgLSBUaGUgRXJyb3Igb2JqZWN0IHRvIGJlIGxvZ2dlZC5cbiAgICovXG4gIGVycm9ycyhlcnI6IEVycm9yKSB7XG4gICAgdGhpcy5sb2coXCJzdGRlcnJcIiwgYEVycm9yIGV4ZWN1dGluZyBjb21tYW5kIGV4aXRlZCA6ICR7ZXJyfWApO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBIYW5kbGVzIHRoZSBleGl0IG9mIGEgY29tbWFuZC5cbiAgICogQHN1bW1hcnkgTG9ncyB0aGUgZXhpdCBjb2RlIGFuZCByZXNvbHZlcyBvciByZWplY3RzIHRoZSBwcm9taXNlIGJhc2VkIG9uIHRoZSBjb2RlLlxuICAgKlxuICAgKiBAcGFyYW0gY29kZSAtIFRoZSBleGl0IGNvZGUgb2YgdGhlIGNvbW1hbmQuXG4gICAqIEBwYXJhbSBsb2dzIC0gQXJyYXkgb2YgbG9nIG1lc3NhZ2VzIHRvIGJlIHByb2Nlc3NlZCBiZWZvcmUgZXhpdGluZy5cbiAgICovXG4gIGV4aXQoY29kZTogbnVtYmVyIHwgc3RyaW5nLCBsb2dzOiBzdHJpbmdbXSkge1xuICAgIHRoaXMubG9nKFxuICAgICAgXCJzdGRvdXRcIixcbiAgICAgIGBjb21tYW5kIGV4aXRlZCBjb2RlIDogJHtjb2RlID09PSAwID8gc3R5bGUoY29kZS50b1N0cmluZygpKS5ncmVlbi50ZXh0IDogc3R5bGUoY29kZSA9PT0gbnVsbCA/IFwibnVsbFwiIDogY29kZS50b1N0cmluZygpKS5yZWQudGV4dH1gXG4gICAgKTtcbiAgICBpZiAoY29kZSA9PT0gMCkge1xuICAgICAgdGhpcy5yZXNvbHZlKGxvZ3MubWFwKChsKSA9PiBsLnRyaW0oKSkuam9pbihcIlxcblwiKSBhcyBSKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZWplY3QobmV3IEVycm9yKGxvZ3MubGVuZ3RoID8gbG9ncy5qb2luKFwiXFxuXCIpIDogY29kZS50b1N0cmluZygpKSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBQYXJzZXMgYSBjb21tYW5kIHN0cmluZyBvciBhcnJheSBpbnRvIGNvbXBvbmVudHMuXG4gICAqIEBzdW1tYXJ5IENvbnZlcnRzIHRoZSBjb21tYW5kIGludG8gYSBjb25zaXN0ZW50IGZvcm1hdCBhbmQgc3RvcmVzIGl0LCB0aGVuIHJldHVybnMgaXQgc3BsaXQgaW50byBjb21tYW5kIGFuZCBhcmd1bWVudHMuXG4gICAqXG4gICAqIEBwYXJhbSBjb21tYW5kIC0gVGhlIGNvbW1hbmQgYXMgYSBzdHJpbmcgb3IgYXJyYXkgb2Ygc3RyaW5ncy5cbiAgICogQHJldHVybiBBIHR1cGxlIGNvbnRhaW5pbmcgdGhlIGNvbW1hbmQgYW5kIGl0cyBhcmd1bWVudHMgYXMgc2VwYXJhdGUgZWxlbWVudHMuXG4gICAqL1xuICBwYXJzZUNvbW1hbmQoY29tbWFuZDogc3RyaW5nIHwgc3RyaW5nW10pOiBbc3RyaW5nLCBzdHJpbmdbXV0ge1xuICAgIGNvbW1hbmQgPSB0eXBlb2YgY29tbWFuZCA9PT0gXCJzdHJpbmdcIiA/IGNvbW1hbmQuc3BsaXQoXCIgXCIpIDogY29tbWFuZDtcbiAgICB0aGlzLmNtZCA9IGNvbW1hbmQuam9pbihcIiBcIik7XG4gICAgcmV0dXJuIFtjb21tYW5kWzBdLCBjb21tYW5kLnNsaWNlKDEpXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gUmVzb2x2ZXMgdGhlIHByb21pc2Ugd2l0aCBhIHN1Y2Nlc3MgbWVzc2FnZS5cbiAgICogQHN1bW1hcnkgTG9ncyBhIHN1Y2Nlc3MgbWVzc2FnZSBhbmQgcmVzb2x2ZXMgdGhlIHByb21pc2Ugd2l0aCB0aGUgZ2l2ZW4gcmVhc29uLlxuICAgKlxuICAgKiBAcGFyYW0gcmVhc29uIC0gVGhlIHJlYXNvbiBmb3IgcmVzb2x2aW5nIHRoZSBwcm9taXNlLlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlc29sdmUocmVhc29uOiBSKSB7XG4gICAgdGhpcy5sb2coXG4gICAgICBcInN0ZG91dFwiLFxuICAgICAgYCR7dGhpcy5jbWR9IGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseTogJHtzdHlsZShyZWFzb24gPyBcInJhbiB0byBjb21wbGV0aW9uXCIgOiAocmVhc29uIGFzIHN0cmluZykpLmdyZWVufWBcbiAgICApO1xuICAgIHRoaXMubG9jay5yZXNvbHZlKHJlYXNvbik7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFJlamVjdHMgdGhlIHByb21pc2Ugd2l0aCBhbiBlcnJvciBtZXNzYWdlLlxuICAgKiBAc3VtbWFyeSBMb2dzIGFuIGVycm9yIG1lc3NhZ2UgYW5kIHJlamVjdHMgdGhlIHByb21pc2Ugd2l0aCB0aGUgZ2l2ZW4gcmVhc29uLlxuICAgKlxuICAgKiBAcGFyYW0gcmVhc29uIC0gVGhlIHJlYXNvbiBmb3IgcmVqZWN0aW5nIHRoZSBwcm9taXNlLCBlaXRoZXIgYSBudW1iZXIgKGV4aXQgY29kZSkgb3IgYSBzdHJpbmcuXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVqZWN0KHJlYXNvbjogbnVtYmVyIHwgc3RyaW5nIHwgRXJyb3IpIHtcbiAgICBpZiAoIShyZWFzb24gaW5zdGFuY2VvZiBFcnJvcikpIHtcbiAgICAgIHJlYXNvbiA9IG5ldyBFcnJvcihcbiAgICAgICAgdHlwZW9mIHJlYXNvbiA9PT0gXCJudW1iZXJcIiA/IGBFeGl0IGNvZGUgJHtyZWFzb259YCA6IHJlYXNvblxuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy5sb2coXG4gICAgICBcInN0ZGVyclwiLFxuICAgICAgYCR7dGhpcy5jbWR9IGZhaWxlZCB0byBleGVjdXRlOiAke3N0eWxlKHJlYXNvbi5tZXNzYWdlKS5yZWR9YFxuICAgICk7XG4gICAgdGhpcy5sb2NrLnJlamVjdChyZWFzb24pO1xuICB9XG59XG4iLCJpbXBvcnQge1xuICBDaGlsZFByb2Nlc3NXaXRob3V0TnVsbFN0cmVhbXMsXG4gIHNwYXduLFxuICBTcGF3bk9wdGlvbnNXaXRob3V0U3RkaW8sXG59IGZyb20gXCJjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgeyBTdGFuZGFyZE91dHB1dFdyaXRlciB9IGZyb20gXCIuLi93cml0ZXJzL1N0YW5kYXJkT3V0cHV0V3JpdGVyXCI7XG5pbXBvcnQgeyBDb21tYW5kUmVzdWx0IH0gZnJvbSBcIi4vdHlwZXNcIjtcbmltcG9ydCB7IE91dHB1dFdyaXRlckNvbnN0cnVjdG9yIH0gZnJvbSBcIi4uL3dyaXRlcnMvdHlwZXNcIjtcbmltcG9ydCB7IEFib3J0Q29kZSB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgTG9nZ2VyLCBMb2dnaW5nIH0gZnJvbSBcIkBkZWNhZi10cy9sb2dnaW5nXCI7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIENyZWF0ZXMgYSBsb2NrZWQgdmVyc2lvbiBvZiBhIGZ1bmN0aW9uLlxuICogQHN1bW1hcnkgVGhpcyBoaWdoZXItb3JkZXIgZnVuY3Rpb24gdGFrZXMgYSBmdW5jdGlvbiBhbmQgcmV0dXJucyBhIG5ldyBmdW5jdGlvbiB0aGF0IGVuc3VyZXNcbiAqIHNlcXVlbnRpYWwgZXhlY3V0aW9uIG9mIHRoZSBvcmlnaW5hbCBmdW5jdGlvbiwgZXZlbiB3aGVuIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBjb25jdXJyZW50bHkuXG4gKiBJdCB1c2VzIGEgUHJvbWlzZS1iYXNlZCBsb2NraW5nIG1lY2hhbmlzbSB0byBxdWV1ZSBmdW5jdGlvbiBjYWxscy5cbiAqXG4gKiBAdGVtcGxhdGUgUiAtIFRoZSByZXR1cm4gdHlwZSBvZiB0aGUgaW5wdXQgZnVuY3Rpb24uXG4gKlxuICogQHBhcmFtIGYgLSBUaGUgZnVuY3Rpb24gdG8gYmUgbG9ja2VkLiBJdCBjYW4gdGFrZSBhbnkgbnVtYmVyIG9mIHBhcmFtZXRlcnMgYW5kIHJldHVybiBhIHZhbHVlIG9mIHR5cGUgUi5cbiAqIEByZXR1cm4gQSBuZXcgZnVuY3Rpb24gd2l0aCB0aGUgc2FtZSBzaWduYXR1cmUgYXMgdGhlIGlucHV0IGZ1bmN0aW9uLCBidXQgd2l0aCBzZXF1ZW50aWFsIGV4ZWN1dGlvbiBndWFyYW50ZWVkLlxuICpcbiAqIEBmdW5jdGlvbiBsb2NraWZ5XG4gKlxuICogQG1lcm1haWRcbiAqIHNlcXVlbmNlRGlhZ3JhbVxuICogICBwYXJ0aWNpcGFudCBDYWxsZXJcbiAqICAgcGFydGljaXBhbnQgTG9ja2VkRnVuY3Rpb25cbiAqICAgcGFydGljaXBhbnQgT3JpZ2luYWxGdW5jdGlvblxuICogICBDYWxsZXItPj5Mb2NrZWRGdW5jdGlvbjogQ2FsbCB3aXRoIHBhcmFtc1xuICogICBMb2NrZWRGdW5jdGlvbi0+PkxvY2tlZEZ1bmN0aW9uOiBDaGVjayBjdXJyZW50IGxvY2tcbiAqICAgYWx0IExvY2sgaXMgcmVzb2x2ZWRcbiAqICAgICBMb2NrZWRGdW5jdGlvbi0+Pk9yaWdpbmFsRnVuY3Rpb246IEV4ZWN1dGUgd2l0aCBwYXJhbXNcbiAqICAgICBPcmlnaW5hbEZ1bmN0aW9uLS0+PkxvY2tlZEZ1bmN0aW9uOiBSZXR1cm4gcmVzdWx0XG4gKiAgICAgTG9ja2VkRnVuY3Rpb24tLT4+Q2FsbGVyOiBSZXR1cm4gcmVzdWx0XG4gKiAgIGVsc2UgTG9jayBpcyBwZW5kaW5nXG4gKiAgICAgTG9ja2VkRnVuY3Rpb24tPj5Mb2NrZWRGdW5jdGlvbjogUXVldWUgZXhlY3V0aW9uXG4gKiAgICAgTG9ja2VkRnVuY3Rpb24tLT4+Q2FsbGVyOiBSZXR1cm4gcHJvbWlzZVxuICogICAgIE5vdGUgb3ZlciBMb2NrZWRGdW5jdGlvbjogV2FpdCBmb3IgcHJldmlvdXMgZXhlY3V0aW9uXG4gKiAgICAgTG9ja2VkRnVuY3Rpb24tPj5PcmlnaW5hbEZ1bmN0aW9uOiBFeGVjdXRlIHdpdGggcGFyYW1zXG4gKiAgICAgT3JpZ2luYWxGdW5jdGlvbi0tPj5Mb2NrZWRGdW5jdGlvbjogUmV0dXJuIHJlc3VsdFxuICogICAgIExvY2tlZEZ1bmN0aW9uLS0+PkNhbGxlcjogUmVzb2x2ZSBwcm9taXNlIHdpdGggcmVzdWx0XG4gKiAgIGVuZFxuICogICBMb2NrZWRGdW5jdGlvbi0+PkxvY2tlZEZ1bmN0aW9uOiBVcGRhdGUgbG9ja1xuICpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6dXRpbHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvY2tpZnk8Uj4oZjogKC4uLnBhcmFtczogdW5rbm93bltdKSA9PiBSKSB7XG4gIGxldCBsb2NrOiBQcm9taXNlPFIgfCB2b2lkPiA9IFByb21pc2UucmVzb2x2ZSgpO1xuICByZXR1cm4gKC4uLnBhcmFtczogdW5rbm93bltdKSA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0gbG9jay50aGVuKCgpID0+IGYoLi4ucGFyYW1zKSk7XG4gICAgbG9jayA9IHJlc3VsdC5jYXRjaCgoKSA9PiB7fSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQ2hhaW5zIG11bHRpcGxlIGFib3J0IHNpZ25hbHMgdG8gYSBjb250cm9sbGVyLlxuICogQHN1bW1hcnkgQ3JlYXRlcyBhIG1lY2hhbmlzbSB3aGVyZSBtdWx0aXBsZSBhYm9ydCBzaWduYWxzIGNhbiB0cmlnZ2VyIGEgc2luZ2xlIGFib3J0IGNvbnRyb2xsZXIuXG4gKiBUaGlzIGlzIHVzZWZ1bCBmb3IgY29vcmRpbmF0aW5nIGNhbmNlbGxhdGlvbiBhY3Jvc3MgbXVsdGlwbGUgYXN5bmNocm9ub3VzIG9wZXJhdGlvbnMuXG4gKlxuICogQHBhcmFtIHtBYm9ydENvbnRyb2xsZXJ9IGNvbnRyb2xsZXIgLSBUaGUgYWJvcnQgY29udHJvbGxlciB0byBiZSB0cmlnZ2VyZWQgYnkgc2lnbmFscy5cbiAqIEBwYXJhbSB7Li4uQWJvcnRTaWduYWx9IHNpZ25hbHMgLSBPbmUgb3IgbW9yZSBhYm9ydCBzaWduYWxzIHRoYXQgY2FuIHRyaWdnZXIgdGhlIGNvbnRyb2xsZXIuXG4gKiBAcmV0dXJuIHtBYm9ydENvbnRyb2xsZXJ9IFRoZSBpbnB1dCBjb250cm9sbGVyLCBub3cgY29ubmVjdGVkIHRvIHRoZSBzaWduYWxzLlxuICpcbiAqIEBmdW5jdGlvbiBjaGFpbkFib3J0Q29udHJvbGxlclxuICpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6dXRpbHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoYWluQWJvcnRDb250cm9sbGVyKFxuICBjb250cm9sbGVyOiBBYm9ydENvbnRyb2xsZXIsXG4gIC4uLnNpZ25hbHM6IEFib3J0U2lnbmFsW11cbik6IEFib3J0Q29udHJvbGxlcjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQ3JlYXRlcyBhIG5ldyBjb250cm9sbGVyIGNoYWluZWQgdG8gbXVsdGlwbGUgYWJvcnQgc2lnbmFscy5cbiAqIEBzdW1tYXJ5IENyZWF0ZXMgYSBuZXcgYWJvcnQgY29udHJvbGxlciB0aGF0IHdpbGwgYmUgdHJpZ2dlcmVkIGlmIGFueSBvZiB0aGUgcHJvdmlkZWQgc2lnbmFscyBhcmUgYWJvcnRlZC5cbiAqXG4gKiBAcGFyYW0gey4uLkFib3J0U2lnbmFsfSBzaWduYWxzIC0gT25lIG9yIG1vcmUgYWJvcnQgc2lnbmFscyB0aGF0IGNhbiB0cmlnZ2VyIHRoZSBuZXcgY29udHJvbGxlci5cbiAqIEByZXR1cm4ge0Fib3J0Q29udHJvbGxlcn0gQSBuZXcgYWJvcnQgY29udHJvbGxlciBjb25uZWN0ZWQgdG8gdGhlIHNpZ25hbHMuXG4gKlxuICogQGZ1bmN0aW9uIGNoYWluQWJvcnRDb250cm9sbGVyXG4gKlxuICogQG1lbWJlck9mIG1vZHVsZTp1dGlsc1xuICovXG5leHBvcnQgZnVuY3Rpb24gY2hhaW5BYm9ydENvbnRyb2xsZXIoXG4gIC4uLnNpZ25hbHM6IEFib3J0U2lnbmFsW11cbik6IEFib3J0Q29udHJvbGxlcjtcblxuZXhwb3J0IGZ1bmN0aW9uIGNoYWluQWJvcnRDb250cm9sbGVyKFxuICBhcmd1bWVudDA6IEFib3J0Q29udHJvbGxlciB8IEFib3J0U2lnbmFsLFxuICAuLi5yZW1haW5kZXI6IEFib3J0U2lnbmFsW11cbik6IEFib3J0Q29udHJvbGxlciB7XG4gIGxldCBzaWduYWxzOiBBYm9ydFNpZ25hbFtdO1xuICBsZXQgY29udHJvbGxlcjogQWJvcnRDb250cm9sbGVyO1xuXG4gIC8vIG5vcm1hbGl6ZSBhcmdzXG4gIGlmIChhcmd1bWVudDAgaW5zdGFuY2VvZiBBYm9ydFNpZ25hbCkge1xuICAgIGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgc2lnbmFscyA9IFthcmd1bWVudDAsIC4uLnJlbWFpbmRlcl07XG4gIH0gZWxzZSB7XG4gICAgY29udHJvbGxlciA9IGFyZ3VtZW50MDtcbiAgICBzaWduYWxzID0gcmVtYWluZGVyO1xuICB9XG5cbiAgLy8gaWYgdGhlIGNvbnRyb2xsZXIgaXMgYWxyZWFkeSBhYm9ydGVkLCBleGl0IGVhcmx5XG4gIGlmIChjb250cm9sbGVyLnNpZ25hbC5hYm9ydGVkKSB7XG4gICAgcmV0dXJuIGNvbnRyb2xsZXI7XG4gIH1cblxuICBjb25zdCBoYW5kbGVyID0gKCkgPT4gY29udHJvbGxlci5hYm9ydCgpO1xuXG4gIGZvciAoY29uc3Qgc2lnbmFsIG9mIHNpZ25hbHMpIHtcbiAgICAvLyBjaGVjayBiZWZvcmUgYWRkaW5nISAoYW5kIGFzc3VtZSB0aGVyZSBpcyBubyBwb3NzaWJsZSB3YXkgdGhhdCB0aGUgc2lnbmFsIGNvdWxkXG4gICAgLy8gYWJvcnQgYmV0d2VlbiB0aGUgYGlmYCBjaGVjayBhbmQgYWRkaW5nIHRoZSBldmVudCBsaXN0ZW5lcilcbiAgICBpZiAoc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgIGNvbnRyb2xsZXIuYWJvcnQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIGhhbmRsZXIsIHtcbiAgICAgIG9uY2U6IHRydWUsXG4gICAgICBzaWduYWw6IGNvbnRyb2xsZXIuc2lnbmFsLFxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIGNvbnRyb2xsZXI7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFNwYXducyBhIGNvbW1hbmQgYXMgYSBjaGlsZCBwcm9jZXNzIHdpdGggb3V0cHV0IGhhbmRsaW5nLlxuICogQHN1bW1hcnkgQ3JlYXRlcyBhIGNoaWxkIHByb2Nlc3MgdG8gZXhlY3V0ZSBhIGNvbW1hbmQgd2l0aCBzdXBwb3J0IGZvciBwaXBpbmcgbXVsdGlwbGUgY29tbWFuZHMsXG4gKiBjdXN0b20gb3V0cHV0IGhhbmRsaW5nLCBhbmQgYWJvcnQgY29udHJvbC4gVGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZSBsb3ctbGV2ZWwgZGV0YWlscyBvZlxuICogc3Bhd25pbmcgcHJvY2Vzc2VzIGFuZCBjb25uZWN0aW5nIHRoZWlyIGlucHV0cy9vdXRwdXRzIHdoZW4gcGlwaW5nIGlzIHVzZWQuXG4gKlxuICogQHRlbXBsYXRlIFIgLSBUaGUgdHlwZSBvZiB0aGUgcHJvY2Vzc2VkIG91dHB1dCwgZGVmYXVsdGluZyB0byBzdHJpbmcuXG4gKiBAcGFyYW0ge1N0YW5kYXJkT3V0cHV0V3JpdGVyPFI+fSBvdXRwdXQgLSBUaGUgb3V0cHV0IHdyaXRlciB0byBoYW5kbGUgY29tbWFuZCBvdXRwdXQuXG4gKiBAcGFyYW0ge3N0cmluZ30gY29tbWFuZCAtIFRoZSBjb21tYW5kIHRvIGV4ZWN1dGUsIGNhbiBpbmNsdWRlIHBpcGUgb3BlcmF0b3JzLlxuICogQHBhcmFtIHtTcGF3bk9wdGlvbnNXaXRob3V0U3RkaW99IG9wdHMgLSBPcHRpb25zIGZvciB0aGUgc3Bhd25lZCBwcm9jZXNzLlxuICogQHBhcmFtIHtBYm9ydENvbnRyb2xsZXJ9IGFib3J0IC0gQ29udHJvbGxlciB0byBhYm9ydCB0aGUgY29tbWFuZCBleGVjdXRpb24uXG4gKiBAcGFyYW0ge0xvZ2dlcn0gbG9nZ2VyIC0gTG9nZ2VyIGZvciByZWNvcmRpbmcgY29tbWFuZCBleGVjdXRpb24gZGV0YWlscy5cbiAqIEByZXR1cm4ge0NoaWxkUHJvY2Vzc1dpdGhvdXROdWxsU3RyZWFtc30gVGhlIHNwYXduZWQgY2hpbGQgcHJvY2Vzcy5cbiAqXG4gKiBAZnVuY3Rpb24gc3Bhd25Db21tYW5kXG4gKlxuICogQG1lbWJlck9mIG1vZHVsZTp1dGlsc1xuICovXG5leHBvcnQgZnVuY3Rpb24gc3Bhd25Db21tYW5kPFIgPSBzdHJpbmc+KFxuICBvdXRwdXQ6IFN0YW5kYXJkT3V0cHV0V3JpdGVyPFI+LFxuICBjb21tYW5kOiBzdHJpbmcsXG4gIG9wdHM6IFNwYXduT3B0aW9uc1dpdGhvdXRTdGRpbyxcbiAgYWJvcnQ6IEFib3J0Q29udHJvbGxlcixcbiAgbG9nZ2VyOiBMb2dnZXJcbik6IENoaWxkUHJvY2Vzc1dpdGhvdXROdWxsU3RyZWFtcyB7XG4gIGZ1bmN0aW9uIHNwYXduSW5uZXIoY29tbWFuZDogc3RyaW5nLCBjb250cm9sbGVyOiBBYm9ydENvbnRyb2xsZXIpIHtcbiAgICBjb25zdCBbY21kLCBhcmd6XSA9IG91dHB1dC5wYXJzZUNvbW1hbmQoY29tbWFuZCk7XG4gICAgbG9nZ2VyLmluZm8oYFJ1bm5pbmcgY29tbWFuZDogJHtjbWR9YCk7XG4gICAgbG9nZ2VyLmRlYnVnKGB3aXRoIGFyZ3M6ICR7YXJnei5qb2luKFwiIFwiKX1gKTtcbiAgICBjb25zdCBjaGlsZFByb2Nlc3MgPSBzcGF3bihjbWQsIGFyZ3osIHtcbiAgICAgIC4uLm9wdHMsXG4gICAgICBjd2Q6IG9wdHMuY3dkIHx8IHByb2Nlc3MuY3dkKCksXG4gICAgICBlbnY6IE9iamVjdC5hc3NpZ24oe30sIHByb2Nlc3MuZW52LCBvcHRzLmVudiwgeyBQQVRIOiBwcm9jZXNzLmVudi5QQVRIIH0pLFxuICAgICAgc2hlbGw6IG9wdHMuc2hlbGwgfHwgZmFsc2UsXG4gICAgICBzaWduYWw6IGNvbnRyb2xsZXIuc2lnbmFsLFxuICAgIH0pO1xuICAgIGxvZ2dlci52ZXJib3NlKGBwaWQgOiAke2NoaWxkUHJvY2Vzcy5waWR9YCk7XG4gICAgcmV0dXJuIGNoaWxkUHJvY2VzcztcbiAgfVxuXG4gIGNvbnN0IG0gPSBjb21tYW5kLm1hdGNoKC9bPD4kI10vZyk7XG4gIGlmIChtKVxuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBJbnZhbGlkIGNvbW1hbmQ6ICR7Y29tbWFuZH0uIGNvbnRhaW5zIGludmFsaWQgY2hhcmFjdGVyczogJHttfWBcbiAgICApO1xuICBpZiAoY29tbWFuZC5pbmNsdWRlcyhcIiB8IFwiKSkge1xuICAgIGNvbnN0IGNtZHMgPSBjb21tYW5kLnNwbGl0KFwiIHwgXCIpO1xuICAgIGNvbnN0IHNwYXducyA9IFtdO1xuICAgIGNvbnN0IGNvbnRyb2xsZXJzID0gbmV3IEFycmF5KGNtZHMubGVuZ3RoKTtcbiAgICBjb250cm9sbGVyc1swXSA9IGFib3J0O1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY21kcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGkgIT09IDApXG4gICAgICAgIGNvbnRyb2xsZXJzW2ldID0gY2hhaW5BYm9ydENvbnRyb2xsZXIoY29udHJvbGxlcnNbaSAtIDFdLnNpZ25hbCk7XG4gICAgICBzcGF3bnMucHVzaChzcGF3bklubmVyKGNtZHNbaV0sIGNvbnRyb2xsZXJzW2ldKSk7XG4gICAgICBpZiAoaSA9PT0gMCkgY29udGludWU7XG4gICAgICBzcGF3bnNbaSAtIDFdLnN0ZG91dC5waXBlKHNwYXduc1tpXS5zdGRpbik7XG4gICAgfVxuICAgIHJldHVybiBzcGF3bnNbY21kcy5sZW5ndGggLSAxXTtcbiAgfVxuXG4gIHJldHVybiBzcGF3bklubmVyKGNvbW1hbmQsIGFib3J0KTtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gRXhlY3V0ZXMgYSBjb21tYW5kIGFzeW5jaHJvbm91c2x5IHdpdGggY3VzdG9taXphYmxlIG91dHB1dCBoYW5kbGluZy5cbiAqIEBzdW1tYXJ5IFRoaXMgZnVuY3Rpb24gcnVucyBhIHNoZWxsIGNvbW1hbmQgYXMgYSBjaGlsZCBwcm9jZXNzLCBwcm92aWRpbmcgZmluZS1ncmFpbmVkXG4gKiBjb250cm9sIG92ZXIgaXRzIGV4ZWN1dGlvbiBhbmQgb3V0cHV0IGhhbmRsaW5nLiBJdCBzdXBwb3J0cyBjdXN0b20gb3V0cHV0IHdyaXRlcnMsXG4gKiBhbGxvd3MgZm9yIGNvbW1hbmQgYWJvcnRpb24sIGFuZCBjYXB0dXJlcyBib3RoIHN0ZG91dCBhbmQgc3RkZXJyLlxuICpcbiAqIEB0ZW1wbGF0ZSBSIC0gVGhlIHR5cGUgb2YgdGhlIHJlc29sdmVkIHZhbHVlIGZyb20gdGhlIGNvbW1hbmQgZXhlY3V0aW9uLlxuICpcbiAqIEBwYXJhbSBjb21tYW5kIC0gVGhlIGNvbW1hbmQgdG8gcnVuLCBlaXRoZXIgYXMgYSBzdHJpbmcgb3IgYW4gYXJyYXkgb2Ygc3RyaW5ncy5cbiAqIEBwYXJhbSBvcHRzIC0gU3Bhd24gb3B0aW9ucyBmb3IgdGhlIGNoaWxkIHByb2Nlc3MuIERlZmF1bHRzIHRvIGFuIGVtcHR5IG9iamVjdC5cbiAqIEBwYXJhbSBvdXRwdXRDb25zdHJ1Y3RvciAtIENvbnN0cnVjdG9yIGZvciB0aGUgb3V0cHV0IHdyaXRlci4gRGVmYXVsdHMgdG8gU3RhbmRhcmRPdXRwdXRXcml0ZXIuXG4gKiBAcGFyYW0gYXJncyAtIEFkZGl0aW9uYWwgYXJndW1lbnRzIHRvIHBhc3MgdG8gdGhlIG91dHB1dCBjb25zdHJ1Y3Rvci5cbiAqIEByZXR1cm4ge0NvbW1hbmRSZXN1bHR9IEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIHRoZSBjb21tYW5kIHJlc3VsdCBvZiB0eXBlIFIuXG4gKlxuICogQGZ1bmN0aW9uIHJ1bkNvbW1hbmRcbiAqXG4gKiBAbWVybWFpZFxuICogc2VxdWVuY2VEaWFncmFtXG4gKiAgIHBhcnRpY2lwYW50IENhbGxlclxuICogICBwYXJ0aWNpcGFudCBydW5Db21tYW5kXG4gKiAgIHBhcnRpY2lwYW50IE91dHB1dFdyaXRlclxuICogICBwYXJ0aWNpcGFudCBDaGlsZFByb2Nlc3NcbiAqICAgQ2FsbGVyLT4+cnVuQ29tbWFuZDogQ2FsbCB3aXRoIGNvbW1hbmQgYW5kIG9wdGlvbnNcbiAqICAgcnVuQ29tbWFuZC0+Pk91dHB1dFdyaXRlcjogQ3JlYXRlIG5ldyBpbnN0YW5jZVxuICogICBydW5Db21tYW5kLT4+T3V0cHV0V3JpdGVyOiBQYXJzZSBjb21tYW5kXG4gKiAgIHJ1bkNvbW1hbmQtPj5DaGlsZFByb2Nlc3M6IFNwYXduIHByb2Nlc3NcbiAqICAgQ2hpbGRQcm9jZXNzLS0+PnJ1bkNvbW1hbmQ6IFJldHVybiBwcm9jZXNzIG9iamVjdFxuICogICBydW5Db21tYW5kLT4+Q2hpbGRQcm9jZXNzOiBTZXQgdXAgZXZlbnQgbGlzdGVuZXJzXG4gKiAgIGxvb3AgRm9yIGVhY2ggc3Rkb3V0IGRhdGFcbiAqICAgICBDaGlsZFByb2Nlc3MtPj5ydW5Db21tYW5kOiBFbWl0IHN0ZG91dCBkYXRhXG4gKiAgICAgcnVuQ29tbWFuZC0+Pk91dHB1dFdyaXRlcjogSGFuZGxlIHN0ZG91dCBkYXRhXG4gKiAgIGVuZFxuICogICBsb29wIEZvciBlYWNoIHN0ZGVyciBkYXRhXG4gKiAgICAgQ2hpbGRQcm9jZXNzLT4+cnVuQ29tbWFuZDogRW1pdCBzdGRlcnIgZGF0YVxuICogICAgIHJ1bkNvbW1hbmQtPj5PdXRwdXRXcml0ZXI6IEhhbmRsZSBzdGRlcnIgZGF0YVxuICogICBlbmRcbiAqICAgQ2hpbGRQcm9jZXNzLT4+cnVuQ29tbWFuZDogRW1pdCBlcnJvciAoaWYgYW55KVxuICogICBydW5Db21tYW5kLT4+T3V0cHV0V3JpdGVyOiBIYW5kbGUgZXJyb3JcbiAqICAgQ2hpbGRQcm9jZXNzLT4+cnVuQ29tbWFuZDogRW1pdCBleGl0XG4gKiAgIHJ1bkNvbW1hbmQtPj5PdXRwdXRXcml0ZXI6IEhhbmRsZSBleGl0XG4gKiAgIE91dHB1dFdyaXRlci0tPj5ydW5Db21tYW5kOiBSZXNvbHZlIG9yIHJlamVjdCBwcm9taXNlXG4gKiAgIHJ1bkNvbW1hbmQtLT4+Q2FsbGVyOiBSZXR1cm4gQ29tbWFuZFJlc3VsdFxuICpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6dXRpbHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJ1bkNvbW1hbmQ8UiA9IHN0cmluZz4oXG4gIGNvbW1hbmQ6IHN0cmluZyxcbiAgb3B0czogU3Bhd25PcHRpb25zV2l0aG91dFN0ZGlvID0ge30sXG4gIG91dHB1dENvbnN0cnVjdG9yOiBPdXRwdXRXcml0ZXJDb25zdHJ1Y3RvcjxcbiAgICBSLFxuICAgIFN0YW5kYXJkT3V0cHV0V3JpdGVyPFI+LFxuICAgIEVycm9yXG4gID4gPSBTdGFuZGFyZE91dHB1dFdyaXRlcjxSPixcbiAgLi4uYXJnczogdW5rbm93bltdXG4pOiBDb21tYW5kUmVzdWx0PFI+IHtcbiAgY29uc3QgbG9nZ2VyID0gTG9nZ2luZy5mb3IocnVuQ29tbWFuZCk7XG4gIGNvbnN0IGFib3J0ID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuXG4gIGNvbnN0IHJlc3VsdDogT21pdDxDb21tYW5kUmVzdWx0LCBcInByb21pc2VcIiB8IFwicGlwZVwiPiA9IHtcbiAgICBhYm9ydDogYWJvcnQsXG4gICAgY29tbWFuZDogY29tbWFuZCxcbiAgICBsb2dzOiBbXSxcbiAgICBlcnJzOiBbXSxcbiAgfTtcblxuICBjb25zdCBsb2NrID0gbmV3IFByb21pc2U8Uj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGxldCBvdXRwdXQ7XG4gICAgdHJ5IHtcbiAgICAgIG91dHB1dCA9IG5ldyBvdXRwdXRDb25zdHJ1Y3RvcihcbiAgICAgICAgY29tbWFuZCxcbiAgICAgICAge1xuICAgICAgICAgIHJlc29sdmUsXG4gICAgICAgICAgcmVqZWN0LFxuICAgICAgICB9LFxuICAgICAgICAuLi5hcmdzXG4gICAgICApO1xuXG4gICAgICByZXN1bHQuY21kID0gc3Bhd25Db21tYW5kPFI+KG91dHB1dCwgY29tbWFuZCwgb3B0cywgYWJvcnQsIGxvZ2dlcik7XG4gICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgcmV0dXJuIHJlamVjdChuZXcgRXJyb3IoYEVycm9yIHJ1bm5pbmcgY29tbWFuZCAke2NvbW1hbmR9OiAke2V9YCkpO1xuICAgIH1cblxuICAgIHJlc3VsdC5jbWQuc3Rkb3V0LnNldEVuY29kaW5nKFwidXRmOFwiKTtcblxuICAgIHJlc3VsdC5jbWQuc3Rkb3V0Lm9uKFwiZGF0YVwiLCAoY2h1bms6IGFueSkgPT4ge1xuICAgICAgY2h1bmsgPSBjaHVuay50b1N0cmluZygpO1xuICAgICAgcmVzdWx0LmxvZ3MucHVzaChjaHVuayk7XG4gICAgICBvdXRwdXQuZGF0YShjaHVuayk7XG4gICAgfSk7XG5cbiAgICByZXN1bHQuY21kLnN0ZGVyci5vbihcImRhdGFcIiwgKGRhdGE6IGFueSkgPT4ge1xuICAgICAgZGF0YSA9IGRhdGEudG9TdHJpbmcoKTtcbiAgICAgIHJlc3VsdC5lcnJzLnB1c2goZGF0YSk7XG4gICAgICBvdXRwdXQuZXJyb3IoZGF0YSk7XG4gICAgfSk7XG5cbiAgICByZXN1bHQuY21kLm9uY2UoXCJlcnJvclwiLCAoZXJyOiBFcnJvcikgPT4ge1xuICAgICAgb3V0cHV0LmV4aXQoZXJyLm1lc3NhZ2UsIHJlc3VsdC5lcnJzKTtcbiAgICB9KTtcblxuICAgIHJlc3VsdC5jbWQub25jZShcImV4aXRcIiwgKGNvZGU6IG51bWJlciA9IDApID0+IHtcbiAgICAgIGlmIChhYm9ydC5zaWduYWwuYWJvcnRlZCAmJiBjb2RlID09PSBudWxsKSBjb2RlID0gQWJvcnRDb2RlIGFzIGFueTtcbiAgICAgIG91dHB1dC5leGl0KGNvZGUsIGNvZGUgPT09IDAgPyByZXN1bHQubG9ncyA6IHJlc3VsdC5lcnJzKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgT2JqZWN0LmFzc2lnbihyZXN1bHQsIHtcbiAgICBwcm9taXNlOiBsb2NrLFxuICAgIHBpcGU6IGFzeW5jIDxFPihjYjogKHI6IFIpID0+IEUpID0+IHtcbiAgICAgIGNvbnN0IGwgPSBsb2dnZXIuZm9yKFwicGlwZVwiKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGwudmVyYm9zZShgRXhlY3V0aW5nIHBpcGUgZnVuY3Rpb24gJHtjb21tYW5kfS4uLmApO1xuICAgICAgICBjb25zdCByZXN1bHQ6IFIgPSBhd2FpdCBsb2NrO1xuICAgICAgICBsLnZlcmJvc2UoYFBpcGluZyBvdXRwdXQgdG8gJHtjYi5uYW1lfTogJHtyZXN1bHR9YCk7XG4gICAgICAgIHJldHVybiBjYihyZXN1bHQpO1xuICAgICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgICBsLmVycm9yKGBFcnJvciBwaXBpbmcgY29tbWFuZCBvdXRwdXQ6ICR7ZX1gKTtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9LFxuICB9KTtcblxuICByZXR1cm4gcmVzdWx0IGFzIENvbW1hbmRSZXN1bHQ8Uj47XG59XG4iLCJpbXBvcnQgZnMgZnJvbSBcImZzXCI7XG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHsgcGF0Y2hTdHJpbmcgfSBmcm9tIFwiLi90ZXh0XCI7XG5pbXBvcnQgeyBydW5Db21tYW5kIH0gZnJvbSBcIi4vdXRpbHNcIjtcbmltcG9ydCB7IERlcGVuZGVuY3lNYXAsIFNpbXBsZURlcGVuZGVuY3lNYXAgfSBmcm9tIFwiLi90eXBlc1wiO1xuaW1wb3J0IHsgTG9nZ2luZyB9IGZyb20gXCJAZGVjYWYtdHMvbG9nZ2luZ1wiO1xuXG5jb25zdCBsb2dnZXIgPSBMb2dnaW5nLmZvcihcImZzXCIpO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBQYXRjaGVzIGEgZmlsZSB3aXRoIGdpdmVuIHZhbHVlcy5cbiAqIEBzdW1tYXJ5IFJlYWRzIGEgZmlsZSwgYXBwbGllcyBwYXRjaGVzIHVzaW5nIFRleHRVdGlscywgYW5kIHdyaXRlcyB0aGUgcmVzdWx0IGJhY2sgdG8gdGhlIGZpbGUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGggLSBUaGUgcGF0aCB0byB0aGUgZmlsZSB0byBiZSBwYXRjaGVkLlxuICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBudW1iZXIgfCBzdHJpbmc+fSB2YWx1ZXMgLSBUaGUgdmFsdWVzIHRvIHBhdGNoIGludG8gdGhlIGZpbGUuXG4gKiBAcmV0dXJuIHt2b2lkfVxuICpcbiAqIEBmdW5jdGlvbiBwYXRjaEZpbGVcbiAqXG4gKiBAbWVybWFpZFxuICogc2VxdWVuY2VEaWFncmFtXG4gKiAgIHBhcnRpY2lwYW50IENhbGxlclxuICogICBwYXJ0aWNpcGFudCBwYXRjaEZpbGVcbiAqICAgcGFydGljaXBhbnQgZnNcbiAqICAgcGFydGljaXBhbnQgcmVhZEZpbGVcbiAqICAgcGFydGljaXBhbnQgVGV4dFV0aWxzXG4gKiAgIHBhcnRpY2lwYW50IHdyaXRlRmlsZVxuICogICBDYWxsZXItPj5wYXRjaEZpbGU6IENhbGwgd2l0aCBwYXRoIGFuZCB2YWx1ZXNcbiAqICAgcGF0Y2hGaWxlLT4+ZnM6IENoZWNrIGlmIGZpbGUgZXhpc3RzXG4gKiAgIHBhdGNoRmlsZS0+PnJlYWRGaWxlOiBSZWFkIGZpbGUgY29udGVudFxuICogICByZWFkRmlsZS0+PmZzOiBSZWFkIGZpbGVcbiAqICAgZnMtLT4+cmVhZEZpbGU6IFJldHVybiBmaWxlIGNvbnRlbnRcbiAqICAgcmVhZEZpbGUtLT4+cGF0Y2hGaWxlOiBSZXR1cm4gZmlsZSBjb250ZW50XG4gKiAgIHBhdGNoRmlsZS0+PlRleHRVdGlsczogUGF0Y2ggc3RyaW5nXG4gKiAgIFRleHRVdGlscy0tPj5wYXRjaEZpbGU6IFJldHVybiBwYXRjaGVkIGNvbnRlbnRcbiAqICAgcGF0Y2hGaWxlLT4+d3JpdGVGaWxlOiBXcml0ZSBwYXRjaGVkIGNvbnRlbnRcbiAqICAgd3JpdGVGaWxlLT4+ZnM6IFdyaXRlIHRvIGZpbGVcbiAqICAgZnMtLT4+d3JpdGVGaWxlOiBGaWxlIHdyaXR0ZW5cbiAqICAgd3JpdGVGaWxlLS0+PnBhdGNoRmlsZTogRmlsZSB3cml0dGVuXG4gKiAgIHBhdGNoRmlsZS0tPj5DYWxsZXI6IFBhdGNoaW5nIGNvbXBsZXRlXG4gKlxuICogQG1lbWJlck9mIG1vZHVsZTp1dGlsc1xuICovXG5leHBvcnQgZnVuY3Rpb24gcGF0Y2hGaWxlKFxuICBwYXRoOiBzdHJpbmcsXG4gIHZhbHVlczogUmVjb3JkPHN0cmluZywgbnVtYmVyIHwgc3RyaW5nPlxuKSB7XG4gIGNvbnN0IGxvZyA9IGxvZ2dlci5mb3IocGF0Y2hGaWxlKTtcbiAgaWYgKCFmcy5leGlzdHNTeW5jKHBhdGgpKVxuICAgIHRocm93IG5ldyBFcnJvcihgRmlsZSBub3QgZm91bmQgYXQgcGF0aCBcIiR7cGF0aH1cIi5gKTtcbiAgbGV0IGNvbnRlbnQgPSByZWFkRmlsZShwYXRoKTtcblxuICB0cnkge1xuICAgIGxvZy52ZXJib3NlKGBQYXRjaGluZyBmaWxlIFwiJHtwYXRofVwiLi4uYCk7XG4gICAgbG9nLmRlYnVnKGB3aXRoIHZhbHVlOiAke0pTT04uc3RyaW5naWZ5KHZhbHVlcyl9YCk7XG4gICAgY29udGVudCA9IHBhdGNoU3RyaW5nKGNvbnRlbnQsIHZhbHVlcyk7XG4gIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciBwYXRjaGluZyBmaWxlOiAke2Vycm9yfWApO1xuICB9XG4gIHdyaXRlRmlsZShwYXRoLCBjb250ZW50KTtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gUmVhZHMgYSBmaWxlIGFuZCByZXR1cm5zIGl0cyBjb250ZW50LlxuICogQHN1bW1hcnkgUmVhZHMgdGhlIGNvbnRlbnQgb2YgYSBmaWxlIGF0IHRoZSBzcGVjaWZpZWQgcGF0aCBhbmQgcmV0dXJucyBpdCBhcyBhIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aCAtIFRoZSBwYXRoIHRvIHRoZSBmaWxlIHRvIGJlIHJlYWQuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBjb250ZW50IG9mIHRoZSBmaWxlLlxuICpcbiAqIEBmdW5jdGlvbiByZWFkRmlsZVxuICpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6dXRpbHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlYWRGaWxlKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IGxvZyA9IGxvZ2dlci5mb3IocmVhZEZpbGUpO1xuICB0cnkge1xuICAgIGxvZy52ZXJib3NlKGBSZWFkaW5nIGZpbGUgXCIke3BhdGh9XCIuLi5gKTtcbiAgICByZXR1cm4gZnMucmVhZEZpbGVTeW5jKHBhdGgsIFwidXRmOFwiKTtcbiAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICBsb2cudmVyYm9zZShgRXJyb3IgcmVhZGluZyBmaWxlIFwiJHtwYXRofVwiOiAke2Vycm9yfWApO1xuICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3IgcmVhZGluZyBmaWxlIFwiJHtwYXRofVwiOiAke2Vycm9yfWApO1xuICB9XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFdyaXRlcyBkYXRhIHRvIGEgZmlsZS5cbiAqIEBzdW1tYXJ5IFdyaXRlcyB0aGUgcHJvdmlkZWQgZGF0YSB0byBhIGZpbGUgYXQgdGhlIHNwZWNpZmllZCBwYXRoLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIC0gVGhlIHBhdGggdG8gdGhlIGZpbGUgdG8gYmUgd3JpdHRlbi5cbiAqIEBwYXJhbSB7c3RyaW5nIHwgQnVmZmVyfSBkYXRhIC0gVGhlIGRhdGEgdG8gYmUgd3JpdHRlbiB0byB0aGUgZmlsZS5cbiAqIEByZXR1cm4ge3ZvaWR9XG4gKlxuICogQGZ1bmN0aW9uIHdyaXRlRmlsZVxuICpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6dXRpbHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlRmlsZShwYXRoOiBzdHJpbmcsIGRhdGE6IHN0cmluZyB8IEJ1ZmZlcik6IHZvaWQge1xuICBjb25zdCBsb2cgPSBsb2dnZXIuZm9yKHdyaXRlRmlsZSk7XG4gIHRyeSB7XG4gICAgbG9nLnZlcmJvc2UoYFdyaXRpbmcgZmlsZSBcIiR7cGF0aH0gd2l0aCAke2RhdGEubGVuZ3RofSBieXRlcy4uLmApO1xuICAgIGZzLndyaXRlRmlsZVN5bmMocGF0aCwgZGF0YSwgXCJ1dGY4XCIpO1xuICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgIGxvZy52ZXJib3NlKGBFcnJvciB3cml0aW5nIGZpbGUgXCIke3BhdGh9XCI6ICR7ZXJyb3J9YCk7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciB3cml0aW5nIGZpbGUgXCIke3BhdGh9XCI6ICR7ZXJyb3J9YCk7XG4gIH1cbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gUmV0cmlldmVzIGFsbCBmaWxlcyByZWN1cnNpdmVseSBmcm9tIGEgZGlyZWN0b3J5LlxuICogQHN1bW1hcnkgVHJhdmVyc2VzIHRocm91Z2ggZGlyZWN0b3JpZXMgYW5kIHN1YmRpcmVjdG9yaWVzIHRvIGNvbGxlY3QgYWxsIGZpbGUgcGF0aHMuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHAgLSBUaGUgcGF0aCB0byBzdGFydCBzZWFyY2hpbmcgZnJvbS5cbiAqIEBwYXJhbSB7ZnVuY3Rpb259IFtmaWx0ZXJdIC0gT3B0aW9uYWwgZnVuY3Rpb24gdG8gZmlsdGVyIGZpbGVzIGJ5IG5hbWUgb3IgaW5kZXguXG4gKiBAcmV0dXJuIHtzdHJpbmdbXX0gQXJyYXkgb2YgZmlsZSBwYXRocy5cbiAqXG4gKiBAZnVuY3Rpb24gZ2V0QWxsRmlsZXNcbiAqXG4gKiBAbWVtYmVyT2YgbW9kdWxlOnV0aWxzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBbGxGaWxlcyhcbiAgcDogc3RyaW5nLFxuICBmaWx0ZXI/OiAoZjogc3RyaW5nLCBpPzogbnVtYmVyKSA9PiBib29sZWFuXG4pOiBzdHJpbmdbXSB7XG4gIGNvbnN0IGxvZyA9IGxvZ2dlci5mb3IoZ2V0QWxsRmlsZXMpO1xuICBjb25zdCBmaWxlczogc3RyaW5nW10gPSBbXTtcblxuICB0cnkge1xuICAgIGxvZy52ZXJib3NlKGBSZXRyaWV2aW5nIGFsbCBmaWxlcyBmcm9tIFwiJHtwfVwiLi4uYCk7XG4gICAgY29uc3QgZW50cmllcyA9IGZzLnJlYWRkaXJTeW5jKHApO1xuXG4gICAgZW50cmllcy5mb3JFYWNoKChlbnRyeSkgPT4ge1xuICAgICAgY29uc3QgZnVsbFBhdGggPSBwYXRoLmpvaW4ocCwgZW50cnkpO1xuICAgICAgY29uc3Qgc3RhdCA9IGZzLnN0YXRTeW5jKGZ1bGxQYXRoKTtcblxuICAgICAgaWYgKHN0YXQuaXNGaWxlKCkpIHtcbiAgICAgICAgZmlsZXMucHVzaChmdWxsUGF0aCk7XG4gICAgICB9IGVsc2UgaWYgKHN0YXQuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgICBmaWxlcy5wdXNoKC4uLmdldEFsbEZpbGVzKGZ1bGxQYXRoKSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKCFmaWx0ZXIpIHJldHVybiBmaWxlcztcbiAgICByZXR1cm4gZmlsZXMuZmlsdGVyKGZpbHRlcik7XG4gIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgbG9nLnZlcmJvc2UoYEVycm9yIHJldHJpZXZpbmcgZmlsZXMgZnJvbSBcIiR7cH1cIjogJHtlcnJvcn1gKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yIHJldHJpZXZpbmcgZmlsZXMgZnJvbSBcIiR7cH1cIjogJHtlcnJvcn1gKTtcbiAgfVxufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBSZW5hbWVzIGEgZmlsZSBvciBkaXJlY3RvcnkuXG4gKiBAc3VtbWFyeSBNb3ZlcyBhIGZpbGUgb3IgZGlyZWN0b3J5IGZyb20gdGhlIHNvdXJjZSBwYXRoIHRvIHRoZSBkZXN0aW5hdGlvbiBwYXRoLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBUaGUgc291cmNlIHBhdGggb2YgdGhlIGZpbGUgb3IgZGlyZWN0b3J5LlxuICogQHBhcmFtIHtzdHJpbmd9IGRlc3QgLSBUaGUgZGVzdGluYXRpb24gcGF0aCBmb3IgdGhlIGZpbGUgb3IgZGlyZWN0b3J5LlxuICogQHJldHVybiB7UHJvbWlzZTx2b2lkPn0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgcmVuYW1lIG9wZXJhdGlvbiBpcyBjb21wbGV0ZS5cbiAqXG4gKiBAZnVuY3Rpb24gcmVuYW1lRmlsZVxuICpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6dXRpbHNcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlbmFtZUZpbGUoc291cmNlOiBzdHJpbmcsIGRlc3Q6IHN0cmluZykge1xuICBjb25zdCBsb2cgPSBsb2dnZXIuZm9yKHJlbmFtZUZpbGUpO1xuICBsZXQgZGVzY3JpcHRvclNvdXJjZSwgZGVzY3JpcHRvckRlc3Q7XG5cbiAgdHJ5IHtcbiAgICBkZXNjcmlwdG9yU291cmNlID0gZnMuc3RhdFN5bmMoc291cmNlKTtcbiAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICBsb2cudmVyYm9zZShgU291cmNlIHBhdGggXCIke3NvdXJjZX1cIiBkb2VzIG5vdCBleGlzdDogJHtlcnJvcn1gKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFNvdXJjZSBwYXRoIFwiJHtzb3VyY2V9XCIgZG9lcyBub3QgZXhpc3Q6ICR7ZXJyb3J9YCk7XG4gIH1cblxuICB0cnkge1xuICAgIGRlc2NyaXB0b3JEZXN0ID0gZnMuc3RhdFN5bmMoZGVzdCk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgLy8gZG8gbm90aGluZy4gaXRzIG9rXG4gIH1cbiAgaWYgKGRlc2NyaXB0b3JEZXN0KSB7XG4gICAgbG9nLnZlcmJvc2UoYERlc3RpbmF0aW9uIHBhdGggXCIke2Rlc3R9XCIgYWxyZWFkeSBleGlzdHNgKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYERlc3RpbmF0aW9uIHBhdGggXCIke2Rlc3R9XCIgYWxyZWFkeSBleGlzdHNgKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgbG9nLnZlcmJvc2UoXG4gICAgICBgUmVuYW1pbmcgJHtkZXNjcmlwdG9yU291cmNlLmlzRmlsZSgpID8gXCJmaWxlXCIgOiBcImRpcmVjdG9yeVwifSBcIiR7c291cmNlfVwiIHRvIFwiJHtkZXN0fS4uLmBcbiAgICApO1xuICAgIGZzLnJlbmFtZVN5bmMoc291cmNlLCBkZXN0KTtcbiAgICBsb2cudmVyYm9zZShgU3VjY2Vzc2Z1bGx5IHJlbmFtZWQgdG8gXCIke2Rlc3R9XCJgKTtcbiAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICBsb2cudmVyYm9zZShcbiAgICAgIGBFcnJvciByZW5hbWluZyAke2Rlc2NyaXB0b3JTb3VyY2UuaXNGaWxlKCkgPyBcImZpbGVcIiA6IFwiZGlyZWN0b3J5XCJ9IFwiJHtzb3VyY2V9XCIgdG8gXCIke2Rlc3R9XCI6ICR7ZXJyb3J9YFxuICAgICk7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEVycm9yIHJlbmFtaW5nICR7ZGVzY3JpcHRvclNvdXJjZS5pc0ZpbGUoKSA/IFwiZmlsZVwiIDogXCJkaXJlY3RvcnlcIn0gXCIke3NvdXJjZX1cIiB0byBcIiR7ZGVzdH1cIjogJHtlcnJvcn1gXG4gICAgKTtcbiAgfVxufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBDb3BpZXMgYSBmaWxlIG9yIGRpcmVjdG9yeS5cbiAqIEBzdW1tYXJ5IENyZWF0ZXMgYSBjb3B5IG9mIGEgZmlsZSBvciBkaXJlY3RvcnkgZnJvbSB0aGUgc291cmNlIHBhdGggdG8gdGhlIGRlc3RpbmF0aW9uIHBhdGguXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSAtIFRoZSBzb3VyY2UgcGF0aCBvZiB0aGUgZmlsZSBvciBkaXJlY3RvcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30gZGVzdCAtIFRoZSBkZXN0aW5hdGlvbiBwYXRoIGZvciB0aGUgZmlsZSBvciBkaXJlY3RvcnkuXG4gKiBAcmV0dXJuIHt2b2lkfVxuICpcbiAqIEBmdW5jdGlvbiBjb3B5RmlsZVxuICpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6dXRpbHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvcHlGaWxlKHNvdXJjZTogc3RyaW5nLCBkZXN0OiBzdHJpbmcpIHtcbiAgY29uc3QgbG9nID0gbG9nZ2VyLmZvcihjb3B5RmlsZSk7XG4gIGxldCBkZXNjcmlwdG9yU291cmNlLCBkZXNjcmlwdG9yRGVzdDtcbiAgdHJ5IHtcbiAgICBkZXNjcmlwdG9yU291cmNlID0gZnMuc3RhdFN5bmMoc291cmNlKTtcbiAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICBsb2cudmVyYm9zZShgU291cmNlIHBhdGggXCIke3NvdXJjZX1cIiBkb2VzIG5vdCBleGlzdDogJHtlcnJvcn1gKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFNvdXJjZSBwYXRoIFwiJHtzb3VyY2V9XCIgZG9lcyBub3QgZXhpc3Q6ICR7ZXJyb3J9YCk7XG4gIH1cbiAgdHJ5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgZGVzY3JpcHRvckRlc3QgPSBmcy5zdGF0U3luYyhkZXN0KTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgaWYgKGRlc2NyaXB0b3JTb3VyY2UuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgbG9nLnZlcmJvc2UoYERlc3QgcGF0aCBcIiR7ZGVzdH1cIiBkb2VzIG5vdCBleGlzdC4gY3JlYXRpbmdgKTtcbiAgICAgIGZzLm1rZGlyU3luYyhkZXN0LCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICB9XG4gIH1cblxuICB0cnkge1xuICAgIGxvZy52ZXJib3NlKFxuICAgICAgYENvcHlpbmcgJHtkZXNjcmlwdG9yU291cmNlLmlzRmlsZSgpID8gXCJmaWxlXCIgOiBcImRpcmVjdG9yeVwifSBcIiR7c291cmNlfVwiIHRvIFwiJHtkZXN0fS4uLmBcbiAgICApO1xuICAgIGZzLmNwU3luYyhzb3VyY2UsIGRlc3QsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgIGxvZy52ZXJib3NlKFxuICAgICAgYEVycm9yIGNvcHlpbmcgJHtkZXNjcmlwdG9yU291cmNlLmlzRmlsZSgpID8gXCJmaWxlXCIgOiBcImRpcmVjdG9yeVwifSBcIiR7c291cmNlfVwiIHRvIFwiJHtkZXN0fTogJHtlcnJvcn1gXG4gICAgKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgRXJyb3IgY29weWluZyAke2Rlc2NyaXB0b3JTb3VyY2UuaXNGaWxlKCkgPyBcImZpbGVcIiA6IFwiZGlyZWN0b3J5XCJ9IFwiJHtzb3VyY2V9XCIgdG8gXCIke2Rlc3R9OiAke2Vycm9yfWBcbiAgICApO1xuICB9XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIERlbGV0ZXMgYSBmaWxlIG9yIGRpcmVjdG9yeS5cbiAqIEBzdW1tYXJ5IFJlbW92ZXMgYSBmaWxlIG9yIGRpcmVjdG9yeSBhdCB0aGUgc3BlY2lmaWVkIHBhdGgsIHdpdGggcmVjdXJzaXZlIGFuZCBmb3JjZSBvcHRpb25zIGVuYWJsZWQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHAgLSBUaGUgcGF0aCB0byB0aGUgZmlsZSBvciBkaXJlY3RvcnkgdG8gZGVsZXRlLlxuICogQHJldHVybiB7dm9pZH1cbiAqXG4gKiBAZnVuY3Rpb24gZGVsZXRlUGF0aFxuICpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6dXRpbHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlbGV0ZVBhdGgocDogc3RyaW5nKSB7XG4gIGNvbnN0IGxvZyA9IGxvZ2dlci5mb3IoZGVsZXRlUGF0aCk7XG4gIHRyeSB7XG4gICAgY29uc3QgZGVzY3JpcHRvciA9IGZzLnN0YXRTeW5jKHApO1xuICAgIGlmIChkZXNjcmlwdG9yLmlzRmlsZSgpKSB7XG4gICAgICBsb2cudmVyYm9zZShgRGVsZXRpbmcgZmlsZSBcIiR7cH0uLi5gKTtcbiAgICAgIGZzLnJtU3luYyhwLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSk7XG4gICAgfSBlbHNlIGlmIChkZXNjcmlwdG9yLmlzRGlyZWN0b3J5KCkpXG4gICAgICBmcy5ybVN5bmMocCwgeyByZWN1cnNpdmU6IHRydWUsIGZvcmNlOiB0cnVlIH0pO1xuICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgIGxvZy52ZXJib3NlKGBFcnJvciBEZWxldGluZyBcIiR7cH1cIjogJHtlcnJvcn1gKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yIERlbGV0aW5nIFwiJHtwfVwiOiAke2Vycm9yfWApO1xuICB9XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFJldHJpZXZlcyBwYWNrYWdlIGluZm9ybWF0aW9uIGZyb20gcGFja2FnZS5qc29uLlxuICogQHN1bW1hcnkgTG9hZHMgYW5kIHBhcnNlcyB0aGUgcGFja2FnZS5qc29uIGZpbGUgZnJvbSBhIHNwZWNpZmllZCBkaXJlY3Rvcnkgb3IgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuIENhbiByZXR1cm4gdGhlIGVudGlyZSBwYWNrYWdlIG9iamVjdCBvciBhIHNwZWNpZmljIHByb3BlcnR5LlxuICogQHBhcmFtIHtzdHJpbmd9IFtwPXByb2Nlc3MuY3dkKCldIC0gVGhlIGRpcmVjdG9yeSBwYXRoIHdoZXJlIHRoZSBwYWNrYWdlLmpzb24gZmlsZSBpcyBsb2NhdGVkLlxuICogQHBhcmFtIHtzdHJpbmd9IFtwcm9wZXJ0eV0gLSBPcHRpb25hbC4gVGhlIHNwZWNpZmljIHByb3BlcnR5IHRvIHJldHJpZXZlIGZyb20gcGFja2FnZS5qc29uLlxuICogQHJldHVybiB7b2JqZWN0IHwgc3RyaW5nfSBUaGUgcGFyc2VkIGNvbnRlbnRzIG9mIHBhY2thZ2UuanNvbiBvciB0aGUgdmFsdWUgb2YgdGhlIHNwZWNpZmllZCBwcm9wZXJ0eS5cbiAqIEBmdW5jdGlvbiBnZXRQYWNrYWdlXG4gKiBAbWVybWFpZFxuICogc2VxdWVuY2VEaWFncmFtXG4gKiAgIHBhcnRpY2lwYW50IENhbGxlclxuICogICBwYXJ0aWNpcGFudCBnZXRQYWNrYWdlXG4gKiAgIHBhcnRpY2lwYW50IHJlYWRGaWxlXG4gKiAgIHBhcnRpY2lwYW50IEpTT05cbiAqICAgQ2FsbGVyLT4+Z2V0UGFja2FnZTogQ2FsbCB3aXRoIHBhdGggYW5kIG9wdGlvbmFsIHByb3BlcnR5XG4gKiAgIGdldFBhY2thZ2UtPj5yZWFkRmlsZTogUmVhZCBwYWNrYWdlLmpzb25cbiAqICAgcmVhZEZpbGUtLT4+Z2V0UGFja2FnZTogUmV0dXJuIGZpbGUgY29udGVudFxuICogICBnZXRQYWNrYWdlLT4+SlNPTjogUGFyc2UgZmlsZSBjb250ZW50XG4gKiAgIEpTT04tLT4+Z2V0UGFja2FnZTogUmV0dXJuIHBhcnNlZCBvYmplY3RcbiAqICAgYWx0IHByb3BlcnR5IHNwZWNpZmllZFxuICogICAgIGdldFBhY2thZ2UtPj5nZXRQYWNrYWdlOiBDaGVjayBpZiBwcm9wZXJ0eSBleGlzdHNcbiAqICAgICBhbHQgcHJvcGVydHkgZXhpc3RzXG4gKiAgICAgICBnZXRQYWNrYWdlLS0+PkNhbGxlcjogUmV0dXJuIHByb3BlcnR5IHZhbHVlXG4gKiAgICAgZWxzZSBwcm9wZXJ0eSBkb2Vzbid0IGV4aXN0XG4gKiAgICAgICBnZXRQYWNrYWdlLS0+PkNhbGxlcjogVGhyb3cgRXJyb3JcbiAqICAgICBlbmRcbiAqICAgZWxzZSBubyBwcm9wZXJ0eSBzcGVjaWZpZWRcbiAqICAgICBnZXRQYWNrYWdlLS0+PkNhbGxlcjogUmV0dXJuIGVudGlyZSBwYWNrYWdlIG9iamVjdFxuICogICBlbmRcbiAqIEBtZW1iZXJPZiBtb2R1bGU6dXRpbHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFBhY2thZ2UoXG4gIHA6IHN0cmluZyA9IHByb2Nlc3MuY3dkKCksXG4gIHByb3BlcnR5Pzogc3RyaW5nXG4pOiBvYmplY3QgfCBzdHJpbmcge1xuICBsZXQgcGtnOiBhbnk7XG4gIHRyeSB7XG4gICAgcGtnID0gSlNPTi5wYXJzZShyZWFkRmlsZShwYXRoLmpvaW4ocCwgYHBhY2thZ2UuanNvbmApKSk7XG4gIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gcmV0cmlldmUgcGFja2FnZSBpbmZvcm1hdGlvblwiICR7ZXJyb3J9YCk7XG4gIH1cblxuICBpZiAocHJvcGVydHkpIHtcbiAgICBpZiAoIShwcm9wZXJ0eSBpbiBwa2cpKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBQcm9wZXJ0eSBcIiR7cHJvcGVydHl9XCIgbm90IGZvdW5kIGluIHBhY2thZ2UuanNvbmApO1xuICAgIHJldHVybiBwa2dbcHJvcGVydHldIGFzIHN0cmluZztcbiAgfVxuICByZXR1cm4gcGtnO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBTZXRzIGFuIGF0dHJpYnV0ZSBpbiB0aGUgcGFja2FnZS5qc29uIGZpbGUuXG4gKiBAc3VtbWFyeSBVcGRhdGVzIGEgc3BlY2lmaWMgYXR0cmlidXRlIGluIHRoZSBwYWNrYWdlLmpzb24gZmlsZSB3aXRoIHRoZSBwcm92aWRlZCB2YWx1ZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYXR0ciAtIFRoZSBhdHRyaWJ1dGUgbmFtZSB0byBzZXQgaW4gcGFja2FnZS5qc29uLlxuICogQHBhcmFtIHtzdHJpbmcgfCBudW1iZXIgfCBvYmplY3R9IHZhbHVlIC0gVGhlIHZhbHVlIHRvIHNldCBmb3IgdGhlIGF0dHJpYnV0ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbcD1wcm9jZXNzLmN3ZCgpXSAtIFRoZSBkaXJlY3RvcnkgcGF0aCB3aGVyZSB0aGUgcGFja2FnZS5qc29uIGZpbGUgaXMgbG9jYXRlZC5cbiAqIEByZXR1cm4ge3ZvaWR9XG4gKlxuICogQGZ1bmN0aW9uIHNldFBhY2thZ2VBdHRyaWJ1dGVcbiAqXG4gKiBAbWVtYmVyT2YgbW9kdWxlOnV0aWxzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRQYWNrYWdlQXR0cmlidXRlKFxuICBhdHRyOiBzdHJpbmcsXG4gIHZhbHVlOiBzdHJpbmcsXG4gIHA6IHN0cmluZyA9IHByb2Nlc3MuY3dkKClcbik6IHZvaWQge1xuICBjb25zdCBwa2cgPSBnZXRQYWNrYWdlKHApIGFzIFJlY29yZDxzdHJpbmcsIGFueT47XG4gIHBrZ1thdHRyXSA9IHZhbHVlO1xuICB3cml0ZUZpbGUocGF0aC5qb2luKHAsIGBwYWNrYWdlLmpzb25gKSwgSlNPTi5zdHJpbmdpZnkocGtnLCBudWxsLCAyKSk7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFJldHJpZXZlcyB0aGUgdmVyc2lvbiBmcm9tIHBhY2thZ2UuanNvbi5cbiAqIEBzdW1tYXJ5IEEgY29udmVuaWVuY2UgZnVuY3Rpb24gdGhhdCBjYWxscyBnZXRQYWNrYWdlIHRvIHJldHJpZXZlIHRoZSBcInZlcnNpb25cIiBwcm9wZXJ0eSBmcm9tIHBhY2thZ2UuanNvbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbcD1wcm9jZXNzLmN3ZCgpXSAtIFRoZSBkaXJlY3RvcnkgcGF0aCB3aGVyZSB0aGUgcGFja2FnZS5qc29uIGZpbGUgaXMgbG9jYXRlZC5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIHZlcnNpb24gc3RyaW5nIGZyb20gcGFja2FnZS5qc29uLlxuICogQGZ1bmN0aW9uIGdldFBhY2thZ2VWZXJzaW9uXG4gKiBAbWVtYmVyT2YgbW9kdWxlOnV0aWxzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYWNrYWdlVmVyc2lvbihwID0gcHJvY2Vzcy5jd2QoKSk6IHN0cmluZyB7XG4gIHJldHVybiBnZXRQYWNrYWdlKHAsIFwidmVyc2lvblwiKSBhcyBzdHJpbmc7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFJldHJpZXZlcyBhbGwgZGVwZW5kZW5jaWVzIGZyb20gdGhlIHByb2plY3QuXG4gKiBAc3VtbWFyeSBFeGVjdXRlcyAnbnBtIGxzIC0tanNvbicgY29tbWFuZCB0byBnZXQgYSBkZXRhaWxlZCBsaXN0IG9mIGFsbCBkZXBlbmRlbmNpZXMgKHByb2R1Y3Rpb24sIGRldmVsb3BtZW50LCBhbmQgcGVlcikgYW5kIHRoZWlyIHZlcnNpb25zLlxuICogQHBhcmFtIHtzdHJpbmd9IFtwYXRoPXByb2Nlc3MuY3dkKCldIC0gVGhlIGRpcmVjdG9yeSBwYXRoIG9mIHRoZSBwcm9qZWN0LlxuICogQHJldHVybiB7UHJvbWlzZTx7cHJvZDogQXJyYXk8e25hbWU6IHN0cmluZywgdmVyc2lvbjogc3RyaW5nfT4sIGRldjogQXJyYXk8e25hbWU6IHN0cmluZywgdmVyc2lvbjogc3RyaW5nfT4sIHBlZXI6IEFycmF5PHtuYW1lOiBzdHJpbmcsIHZlcnNpb246IHN0cmluZ30+fT59IEFuIG9iamVjdCBjb250YWluaW5nIGFycmF5cyBvZiBwcm9kdWN0aW9uLCBkZXZlbG9wbWVudCwgYW5kIHBlZXIgZGVwZW5kZW5jaWVzLlxuICogQGZ1bmN0aW9uIGdldERlcGVuZGVuY2llc1xuICogQG1lcm1haWRcbiAqIHNlcXVlbmNlRGlhZ3JhbVxuICogICBwYXJ0aWNpcGFudCBDYWxsZXJcbiAqICAgcGFydGljaXBhbnQgZ2V0RGVwZW5kZW5jaWVzXG4gKiAgIHBhcnRpY2lwYW50IHJ1bkNvbW1hbmRcbiAqICAgcGFydGljaXBhbnQgSlNPTlxuICogICBDYWxsZXItPj5nZXREZXBlbmRlbmNpZXM6IENhbGwgd2l0aCBvcHRpb25hbCBwYXRoXG4gKiAgIGdldERlcGVuZGVuY2llcy0+PnJ1bkNvbW1hbmQ6IEV4ZWN1dGUgJ25wbSBscyAtLWpzb24nXG4gKiAgIHJ1bkNvbW1hbmQtLT4+Z2V0RGVwZW5kZW5jaWVzOiBSZXR1cm4gY29tbWFuZCBvdXRwdXRcbiAqICAgZ2V0RGVwZW5kZW5jaWVzLT4+SlNPTjogUGFyc2UgY29tbWFuZCBvdXRwdXRcbiAqICAgSlNPTi0tPj5nZXREZXBlbmRlbmNpZXM6IFJldHVybiBwYXJzZWQgb2JqZWN0XG4gKiAgIGdldERlcGVuZGVuY2llcy0+PmdldERlcGVuZGVuY2llczogUHJvY2VzcyBkZXBlbmRlbmNpZXNcbiAqICAgZ2V0RGVwZW5kZW5jaWVzLS0+PkNhbGxlcjogUmV0dXJuIHByb2Nlc3NlZCBkZXBlbmRlbmNpZXNcbiAqIEBtZW1iZXJPZiBtb2R1bGU6dXRpbHNcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldERlcGVuZGVuY2llcyhcbiAgcGF0aDogc3RyaW5nID0gcHJvY2Vzcy5jd2QoKVxuKTogUHJvbWlzZTxEZXBlbmRlbmN5TWFwPiB7XG4gIGxldCBwa2c6IGFueTtcblxuICB0cnkge1xuICAgIHBrZyA9IEpTT04ucGFyc2UoYXdhaXQgcnVuQ29tbWFuZChgbnBtIGxzIC0tanNvbmAsIHsgY3dkOiBwYXRoIH0pLnByb21pc2UpO1xuICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gcmV0cmlldmUgZGVwZW5kZW5jaWVzOiAke2V9YCk7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gIGNvbnN0IG1hcHBlciA9IChlbnRyeTogW3N0cmluZywgdW5rbm93bl0sIGluZGV4OiBudW1iZXIpID0+ICh7XG4gICAgbmFtZTogZW50cnlbMF0sXG4gICAgdmVyc2lvbjogKGVudHJ5WzFdIGFzIGFueSkudmVyc2lvbixcbiAgfSk7XG5cbiAgcmV0dXJuIHtcbiAgICBwcm9kOiBPYmplY3QuZW50cmllcyhwa2cuZGVwZW5kZW5jaWVzIHx8IHt9KS5tYXAobWFwcGVyKSxcbiAgICBkZXY6IE9iamVjdC5lbnRyaWVzKHBrZy5kZXZEZXBlbmRlbmNpZXMgfHwge30pLm1hcChtYXBwZXIpLFxuICAgIHBlZXI6IE9iamVjdC5lbnRyaWVzKHBrZy5wZWVyRGVwZW5kZW5jaWVzIHx8IHt9KS5tYXAobWFwcGVyKSxcbiAgfTtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gVXBkYXRlcyBwcm9qZWN0IGRlcGVuZGVuY2llcyB0byB0aGVpciBsYXRlc3QgdmVyc2lvbnMuXG4gKiBAc3VtbWFyeSBSdW5zIG5wbS1jaGVjay11cGRhdGVzIHRvIHVwZGF0ZSBwYWNrYWdlLmpzb24gYW5kIHRoZW4gaW5zdGFsbHMgdGhlIHVwZGF0ZWQgZGVwZW5kZW5jaWVzLlxuICpcbiAqIEByZXR1cm4ge1Byb21pc2U8dm9pZD59IEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gZGVwZW5kZW5jaWVzIGFyZSB1cGRhdGVkLlxuICpcbiAqIEBmdW5jdGlvbiB1cGRhdGVEZXBlbmRlbmNpZXNcbiAqXG4gKiBAbWVtYmVyT2YgbW9kdWxlOnV0aWxzXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB1cGRhdGVEZXBlbmRlbmNpZXMoKSB7XG4gIGNvbnN0IGxvZyA9IGxvZ2dlci5mb3IodXBkYXRlRGVwZW5kZW5jaWVzKTtcbiAgbG9nLmluZm8oXCJjaGVja2luZyBmb3IgdXBkYXRlcy4uLlwiKTtcbiAgYXdhaXQgcnVuQ29tbWFuZChcIm5weCBucG0tY2hlY2stdXBkYXRlcyAtdVwiKS5wcm9taXNlO1xuICBsb2cuaW5mbyhcInVwZGF0aW5nLi4uXCIpO1xuICBhd2FpdCBydW5Db21tYW5kKFwibnB4IG5wbSBydW4gZG8taW5zdGFsbFwiKS5wcm9taXNlO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBJbnN0YWxscyBkZXBlbmRlbmNpZXMgaWYgdGhleSBhcmUgbm90IGFscmVhZHkgYXZhaWxhYmxlLlxuICogQHN1bW1hcnkgQ2hlY2tzIGlmIHNwZWNpZmllZCBkZXBlbmRlbmNpZXMgYXJlIGluc3RhbGxlZCBhbmQgaW5zdGFsbHMgYW55IHRoYXQgYXJlIG1pc3NpbmcuXG4gKlxuICogQHBhcmFtIHtzdHJpbmdbXSB8IHN0cmluZ30gZGVwcyAtIFRoZSBkZXBlbmRlbmNpZXMgdG8gY2hlY2sgYW5kIHBvdGVudGlhbGx5IGluc3RhbGwuXG4gKiBAcGFyYW0ge1NpbXBsZURlcGVuZGVuY3lNYXB9IFtkZXBlbmRlbmNpZXNdIC0gT3B0aW9uYWwgbWFwIG9mIGV4aXN0aW5nIGRlcGVuZGVuY2llcy5cbiAqIEByZXR1cm4ge1Byb21pc2U8U2ltcGxlRGVwZW5kZW5jeU1hcD59IFVwZGF0ZWQgbWFwIG9mIGRlcGVuZGVuY2llcy5cbiAqXG4gKiBAZnVuY3Rpb24gaW5zdGFsbElmTm90QXZhaWxhYmxlXG4gKlxuICogQG1lbWJlck9mIG1vZHVsZTp1dGlsc1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW5zdGFsbElmTm90QXZhaWxhYmxlKFxuICBkZXBzOiBzdHJpbmdbXSB8IHN0cmluZyxcbiAgZGVwZW5kZW5jaWVzPzogU2ltcGxlRGVwZW5kZW5jeU1hcFxuKSB7XG4gIGlmICghZGVwZW5kZW5jaWVzKSB7XG4gICAgY29uc3QgZDogRGVwZW5kZW5jeU1hcCA9IGF3YWl0IGdldERlcGVuZGVuY2llcygpO1xuICAgIGRlcGVuZGVuY2llcyA9IHtcbiAgICAgIHByb2Q6IGQucHJvZD8ubWFwKChwKSA9PiBwLm5hbWUpIHx8IFtdLFxuICAgICAgZGV2OiBkLmRldj8ubWFwKChkKSA9PiBkLm5hbWUpIHx8IFtdLFxuICAgICAgcGVlcjogZC5wZWVyPy5tYXAoKHApID0+IHAubmFtZSkgfHwgW10sXG4gICAgfTtcbiAgfVxuICBjb25zdCB7IHByb2QsIGRldiwgcGVlciB9ID0gZGVwZW5kZW5jaWVzO1xuICBjb25zdCBpbnN0YWxsZWQgPSBBcnJheS5mcm9tKFxuICAgIG5ldyBTZXQoWy4uLihwcm9kIHx8IFtdKSwgLi4uKGRldiB8fCBbXSksIC4uLihwZWVyIHx8IFtdKV0pXG4gICk7XG4gIGRlcHMgPSB0eXBlb2YgZGVwcyA9PT0gXCJzdHJpbmdcIiA/IFtkZXBzXSA6IGRlcHM7XG4gIGNvbnN0IHRvSW5zdGFsbCA9IGRlcHMuZmlsdGVyKChkKSA9PiAhaW5zdGFsbGVkLmluY2x1ZGVzKGQpKTtcblxuICBpZiAodG9JbnN0YWxsLmxlbmd0aCkgYXdhaXQgaW5zdGFsbERlcGVuZGVuY2llcyh7IGRldjogdG9JbnN0YWxsIH0pO1xuICBkZXBlbmRlbmNpZXMuZGV2ID0gZGVwZW5kZW5jaWVzLmRldiB8fCBbXTtcbiAgZGVwZW5kZW5jaWVzLmRldi5wdXNoKC4uLnRvSW5zdGFsbCk7XG4gIHJldHVybiBkZXBlbmRlbmNpZXM7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFB1c2hlcyBjaGFuZ2VzIHRvIEdpdCByZXBvc2l0b3J5LlxuICogQHN1bW1hcnkgVGVtcG9yYXJpbHkgY2hhbmdlcyBHaXQgdXNlciBjb25maWd1cmF0aW9uLCBjb21taXRzIGFsbCBjaGFuZ2VzLCBwdXNoZXMgdG8gcmVtb3RlLCBhbmQgcmVzdG9yZXMgb3JpZ2luYWwgdXNlciBjb25maWd1cmF0aW9uLlxuICpcbiAqIEByZXR1cm4ge1Byb21pc2U8dm9pZD59IEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gY2hhbmdlcyBhcmUgcHVzaGVkLlxuICpcbiAqIEBmdW5jdGlvbiBwdXNoVG9HaXRcbiAqXG4gKiBAbWVtYmVyT2YgbW9kdWxlOnV0aWxzXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwdXNoVG9HaXQoKSB7XG4gIGNvbnN0IGxvZyA9IGxvZ2dlci5mb3IocHVzaFRvR2l0KTtcbiAgY29uc3QgZ2l0VXNlciA9IGF3YWl0IHJ1bkNvbW1hbmQoXCJnaXQgY29uZmlnIHVzZXIubmFtZVwiKS5wcm9taXNlO1xuICBjb25zdCBnaXRFbWFpbCA9IGF3YWl0IHJ1bkNvbW1hbmQoXCJnaXQgY29uZmlnIHVzZXIuZW1haWxcIikucHJvbWlzZTtcbiAgbG9nLnZlcmJvc2UoYGNhY2hlZCBnaXQgaWQ6ICR7Z2l0VXNlcn0vJHtnaXRFbWFpbH0uIGNoYW5naW5nIHRvIGF1dG9tYXRpb25gKTtcbiAgYXdhaXQgcnVuQ29tbWFuZCgnZ2l0IGNvbmZpZyB1c2VyLmVtYWlsIFwiYXV0b21hdGlvbkBkZWNhZi50c1wiJykucHJvbWlzZTtcbiAgYXdhaXQgcnVuQ29tbWFuZCgnZ2l0IGNvbmZpZyB1c2VyLm5hbWUgXCJkZWNhZlwiJykucHJvbWlzZTtcbiAgbG9nLmluZm8oXCJQdXNoaW5nIGNoYW5nZXMgdG8gZ2l0Li4uXCIpO1xuICBhd2FpdCBydW5Db21tYW5kKFwiZ2l0IGFkZCAuXCIpLnByb21pc2U7XG4gIGF3YWl0IHJ1bkNvbW1hbmQoYGdpdCBjb21taXQgLW0gXCJyZWZzICMxIC0gYWZ0ZXIgcmVwbyBzZXR1cFwiYCkucHJvbWlzZTtcbiAgYXdhaXQgcnVuQ29tbWFuZChcImdpdCBwdXNoXCIpLnByb21pc2U7XG4gIGF3YWl0IHJ1bkNvbW1hbmQoYGdpdCBjb25maWcgdXNlci5lbWFpbCBcIiR7Z2l0RW1haWx9XCJgKS5wcm9taXNlO1xuICBhd2FpdCBydW5Db21tYW5kKGBnaXQgY29uZmlnIHVzZXIubmFtZSBcIiR7Z2l0VXNlcn1cImApLnByb21pc2U7XG4gIGxvZy52ZXJib3NlKGByZXZlcnRlZCB0byBnaXQgaWQ6ICR7Z2l0VXNlcn0vJHtnaXRFbWFpbH1gKTtcbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gSW5zdGFsbHMgcHJvamVjdCBkZXBlbmRlbmNpZXMuXG4gKiBAc3VtbWFyeSBJbnN0YWxscyBwcm9kdWN0aW9uLCBkZXZlbG9wbWVudCwgYW5kIHBlZXIgZGVwZW5kZW5jaWVzIGFzIHNwZWNpZmllZC5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gZGVwZW5kZW5jaWVzIC0gT2JqZWN0IGNvbnRhaW5pbmcgYXJyYXlzIG9mIGRlcGVuZGVuY2llcyB0byBpbnN0YWxsLlxuICogQHBhcmFtIHtzdHJpbmdbXX0gW2RlcGVuZGVuY2llcy5wcm9kXSAtIFByb2R1Y3Rpb24gZGVwZW5kZW5jaWVzIHRvIGluc3RhbGwuXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBbZGVwZW5kZW5jaWVzLmRldl0gLSBEZXZlbG9wbWVudCBkZXBlbmRlbmNpZXMgdG8gaW5zdGFsbC5cbiAqIEBwYXJhbSB7c3RyaW5nW119IFtkZXBlbmRlbmNpZXMucGVlcl0gLSBQZWVyIGRlcGVuZGVuY2llcyB0byBpbnN0YWxsLlxuICogQHJldHVybiB7UHJvbWlzZTx2b2lkPn0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiBhbGwgZGVwZW5kZW5jaWVzIGFyZSBpbnN0YWxsZWQuXG4gKlxuICogQGZ1bmN0aW9uIGluc3RhbGxEZXBlbmRlbmNpZXNcbiAqXG4gKiBAbWVtYmVyT2YgbW9kdWxlOnV0aWxzXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpbnN0YWxsRGVwZW5kZW5jaWVzKGRlcGVuZGVuY2llczoge1xuICBwcm9kPzogc3RyaW5nW107XG4gIGRldj86IHN0cmluZ1tdO1xuICBwZWVyPzogc3RyaW5nW107XG59KSB7XG4gIGNvbnN0IGxvZyA9IGxvZ2dlci5mb3IoaW5zdGFsbERlcGVuZGVuY2llcyk7XG4gIGNvbnN0IHByb2QgPSBkZXBlbmRlbmNpZXMucHJvZCB8fCBbXTtcbiAgY29uc3QgZGV2ID0gZGVwZW5kZW5jaWVzLmRldiB8fCBbXTtcbiAgY29uc3QgcGVlciA9IGRlcGVuZGVuY2llcy5wZWVyIHx8IFtdO1xuICBpZiAocHJvZC5sZW5ndGgpIHtcbiAgICBsb2cuaW5mbyhgSW5zdGFsbGluZyBkZXBlbmRlbmNpZXMgJHtwcm9kLmpvaW4oXCIsIFwiKX0uLi5gKTtcbiAgICBhd2FpdCBydW5Db21tYW5kKGBucG0gaW5zdGFsbCAke3Byb2Quam9pbihcIiBcIil9YCwgeyBjd2Q6IHByb2Nlc3MuY3dkKCkgfSlcbiAgICAgIC5wcm9taXNlO1xuICB9XG4gIGlmIChkZXYubGVuZ3RoKSB7XG4gICAgbG9nLmluZm8oYEluc3RhbGxpbmcgZGV2RGVwZW5kZW5jaWVzICR7ZGV2LmpvaW4oXCIsIFwiKX0uLi5gKTtcbiAgICBhd2FpdCBydW5Db21tYW5kKGBucG0gaW5zdGFsbCAtLXNhdmUtZGV2ICR7ZGV2LmpvaW4oXCIgXCIpfWAsIHtcbiAgICAgIGN3ZDogcHJvY2Vzcy5jd2QoKSxcbiAgICB9KS5wcm9taXNlO1xuICB9XG4gIGlmIChwZWVyLmxlbmd0aCkge1xuICAgIGxvZy5pbmZvKGBJbnN0YWxsaW5nIHBlZXJEZXBlbmRlbmNpZXMgJHtwZWVyLmpvaW4oXCIsIFwiKX0uLi5gKTtcbiAgICBhd2FpdCBydW5Db21tYW5kKGBucG0gaW5zdGFsbCAtLXNhdmUtcGVlciAke3BlZXIuam9pbihcIiBcIil9YCwge1xuICAgICAgY3dkOiBwcm9jZXNzLmN3ZCgpLFxuICAgIH0pLnByb21pc2U7XG4gIH1cbn1cblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gTm9ybWFsaXplcyBpbXBvcnRzIHRvIGhhbmRsZSBib3RoIENvbW1vbkpTIGFuZCBFU01vZHVsZSBmb3JtYXRzLlxuICogQHN1bW1hcnkgVXRpbGl0eSBmdW5jdGlvbiB0byBoYW5kbGUgbW9kdWxlIGltcG9ydCBkaWZmZXJlbmNlcyBiZXR3ZWVuIGZvcm1hdHMuXG4gKlxuICogQHRlbXBsYXRlIFQgLSBUeXBlIG9mIHRoZSBpbXBvcnRlZCBtb2R1bGUuXG4gKiBAcGFyYW0ge1Byb21pc2U8VD59IGltcG9ydFByb21pc2UgLSBQcm9taXNlIHJldHVybmVkIGJ5IGR5bmFtaWMgaW1wb3J0LlxuICogQHJldHVybiB7UHJvbWlzZTxUPn0gTm9ybWFsaXplZCBtb2R1bGUuXG4gKlxuICogQGZ1bmN0aW9uIG5vcm1hbGl6ZUltcG9ydFxuICpcbiAqIEBtZW1iZXJPZiBtb2R1bGU6dXRpbHNcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG5vcm1hbGl6ZUltcG9ydDxUPihcbiAgaW1wb3J0UHJvbWlzZTogUHJvbWlzZTxUPlxuKTogUHJvbWlzZTxUPiB7XG4gIC8vIENvbW1vbkpTJ3MgYG1vZHVsZS5leHBvcnRzYCBpcyB3cmFwcGVkIGFzIGBkZWZhdWx0YCBpbiBFU01vZHVsZS5cbiAgcmV0dXJuIGltcG9ydFByb21pc2UudGhlbigobTogYW55KSA9PiAobS5kZWZhdWx0IHx8IG0pIGFzIFQpO1xufVxuIiwiaW1wb3J0IHNsb2dhbnMgZnJvbSBcIi4uL2Fzc2V0cy9zbG9nYW5zLmpzb25cIjtcbmltcG9ydCB7IHN0eWxlIH0gZnJvbSBcInN0eWxlZC1zdHJpbmctYnVpbGRlclwiO1xuaW1wb3J0IHsgTG9nZ2VyIH0gZnJvbSBcIkBkZWNhZi10cy9sb2dnaW5nXCI7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIEFycmF5IG9mIEFOU0kgY29sb3IgY29kZXMgZm9yIGJhbm5lciBzdHlsaW5nLlxuICogQHN1bW1hcnkgRGVmaW5lcyBhIHNldCBvZiBBTlNJIGNvbG9yIGNvZGVzIHVzZWQgdG8gc3R5bGUgdGhlIGJhbm5lciB0ZXh0LlxuICogQG1lbWJlck9mIG1vZHVsZTp1dGlsc1xuICovXG5jb25zdCBjb2xvcnMgPSBbXG4gIFwiXFx4MWJbMzg7NTsyMTVtXCIsIC8vIHNvZnQgb3JhbmdlXG4gIFwiXFx4MWJbMzg7NTsyMDltXCIsIC8vIGNvcmFsXG4gIFwiXFx4MWJbMzg7NTsyMDVtXCIsIC8vIHBpbmtcbiAgXCJcXHgxYlszODs1OzIxMG1cIiwgLy8gcGVhY2h5XG4gIFwiXFx4MWJbMzg7NTsyMTdtXCIsIC8vIHNhbG1vblxuICBcIlxceDFiWzM4OzU7MjE2bVwiLCAvLyBsaWdodCBjb3JhbFxuICBcIlxceDFiWzM4OzU7MjI0bVwiLCAvLyBsaWdodCBwZWFjaFxuICBcIlxceDFiWzM4OzU7MjMwbVwiLCAvLyBzb2Z0IGNyZWFtXG4gIFwiXFx4MWJbMzg7NTsyMzBtXCIsIC8vIHNvZnQgY3JlYW1cbl07XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFByaW50cyBhIHN0eWxlZCBiYW5uZXIgdG8gdGhlIGNvbnNvbGUuXG4gKiBAc3VtbWFyeSBHZW5lcmF0ZXMgYW5kIHByaW50cyBhIGNvbG9yZnVsIEFTQ0lJIGFydCBiYW5uZXIgd2l0aCBhIHJhbmRvbSBzbG9nYW4uXG4gKiBAcGFyYW0ge0xvZ2dlcn0gW2xvZ2dlcl0gLSBPcHRpb25hbCBsb2dnZXIgZm9yIHZlcmJvc2Ugb3V0cHV0LlxuICogQG1lbWJlck9mIG1vZHVsZTp1dGlsc1xuICogQGZ1bmN0aW9uIHByaW50QmFubmVyXG4gKiBAbWVybWFpZFxuICogc2VxdWVuY2VEaWFncmFtXG4gKiAgIHBhcnRpY2lwYW50IHByaW50QmFubmVyXG4gKiAgIHBhcnRpY2lwYW50IGdldFNsb2dhblxuICogICBwYXJ0aWNpcGFudCBwYWRFbmRcbiAqICAgcGFydGljaXBhbnQgY29uc29sZVxuICogICBwcmludEJhbm5lci0+PmdldFNsb2dhbjogQ2FsbCBnZXRTbG9nYW4oKVxuICogICBnZXRTbG9nYW4tLT4+cHJpbnRCYW5uZXI6IFJldHVybiByYW5kb20gc2xvZ2FuXG4gKiAgIHByaW50QmFubmVyLT4+cHJpbnRCYW5uZXI6IENyZWF0ZSBiYW5uZXIgQVNDSUkgYXJ0XG4gKiAgIHByaW50QmFubmVyLT4+cHJpbnRCYW5uZXI6IFNwbGl0IGJhbm5lciBpbnRvIGxpbmVzXG4gKiAgIHByaW50QmFubmVyLT4+cHJpbnRCYW5uZXI6IENhbGN1bGF0ZSBtYXggbGluZSBsZW5ndGhcbiAqICAgcHJpbnRCYW5uZXItPj5wYWRFbmQ6IENhbGwgcGFkRW5kIHdpdGggc2xvZ2FuXG4gKiAgIHBhZEVuZC0tPj5wcmludEJhbm5lcjogUmV0dXJuIHBhZGRlZCBzbG9nYW4gbGluZVxuICogICBsb29wIEZvciBlYWNoIGJhbm5lciBsaW5lXG4gKiAgICAgcHJpbnRCYW5uZXItPj5zdHlsZTogQ2FsbCBzdHlsZShsaW5lKVxuICogICAgIHN0eWxlLS0+PnByaW50QmFubmVyOiBSZXR1cm4gc3R5bGVkIGxpbmVcbiAqICAgICBwcmludEJhbm5lci0+PmNvbnNvbGU6IExvZyBzdHlsZWQgbGluZVxuICogICBlbmRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByaW50QmFubmVyKGxvZ2dlcj86IExvZ2dlcikge1xuICBjb25zdCBtZXNzYWdlID0gZ2V0U2xvZ2FuKCk7XG4gIGNvbnN0IGJhbm5lcjogc3RyaW5nIHwgc3RyaW5nW10gPVxuICAgIGAjICAgICAgICAgICAgICAgICDilpHilpLilpPilojilojilojilojilojilojilojilpPilpLilpEgIOKWkeKWkuKWk+KWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWk+KWkuKWkSAg4paR4paS4paT4paI4paI4paI4paI4paI4paI4paT4paS4paRICAg4paR4paS4paT4paI4paI4paI4paI4paI4paI4paT4paS4paRICDilpHilpLilpPilojilojilojilojilojilojilojilojilpPilpLilpEgICAgICAg4paR4paS4paT4paI4paI4paI4paI4paI4paI4paI4paI4paT4paS4paRICDilpHilpLilpPilojilojilojilojilojilojilojilpPilpLilpEgXG4jICAgICAgKCAoICAgICAgICDilpHilpLilpPilojilpPilpLilpHilpHilpLilpPilojilpPilpLilpEg4paR4paS4paT4paI4paT4paS4paRICAgICAgICDilpHilpLilpPilojilpPilpLilpHilpHilpLilpPilojilpPilpLilpEg4paR4paS4paT4paI4paT4paS4paR4paR4paS4paT4paI4paT4paS4paRIOKWkeKWkuKWk+KWiOKWk+KWkuKWkSAgICAgICAgICAgICAgICAg4paR4paS4paT4paI4paT4paS4paRICAgICDilpHilpLilpPilojilpPilpLilpEgICAgICAgIFxuIyAgICAgICApICkgICAgICAg4paR4paS4paT4paI4paT4paS4paR4paR4paS4paT4paI4paT4paS4paRIOKWkeKWkuKWk+KWiOKWk+KWkuKWkSAgICAgICAg4paR4paS4paT4paI4paT4paS4paRICAgICAgICDilpHilpLilpPilojilpPilpLilpHilpHilpLilpPilojilpPilpLilpEg4paR4paS4paT4paI4paT4paS4paRICAgICAgICAgICAgICAgICDilpHilpLilpPilojilpPilpLilpEgICAgIOKWkeKWkuKWk+KWiOKWk+KWkuKWkSAgICAgICAgXG4jICAgIFs9PT09PT09XSAgICDilpHilpLilpPilojilpPilpLilpHilpHilpLilpPilojilpPilpLilpEg4paR4paS4paT4paI4paI4paI4paI4paI4paI4paT4paS4paRICAg4paR4paS4paT4paI4paT4paS4paRICAgICAgICDilpHilpLilpPilojilojilojilojilojilojilojilojilpPilpLilpEg4paR4paS4paT4paI4paI4paI4paI4paI4paI4paT4paS4paRICAgICAgICAgICAg4paR4paS4paT4paI4paT4paS4paRICAgICAg4paR4paS4paT4paI4paI4paI4paI4paI4paI4paT4paS4paRICBcbiMgICAgIFxcYC0tLS0twrQgICAgIOKWkeKWkuKWk+KWiOKWk+KWkuKWkeKWkeKWkuKWk+KWiOKWk+KWkuKWkSDilpHilpLilpPilojilpPilpLilpEgICAgICAgIOKWkeKWkuKWk+KWiOKWk+KWkuKWkSAgICAgICAg4paR4paS4paT4paI4paT4paS4paR4paR4paS4paT4paI4paT4paS4paRIOKWkeKWkuKWk+KWiOKWk+KWkuKWkSAgICAgICAgICAgICAgICAg4paR4paS4paT4paI4paT4paS4paRICAgICAgICAgICAg4paR4paS4paT4paI4paT4paS4paRIFxuIyAgICAgICAgICAgICAgICAg4paR4paS4paT4paI4paT4paS4paR4paR4paS4paT4paI4paT4paS4paRIOKWkeKWkuKWk+KWiOKWk+KWkuKWkSAgICAgICAg4paR4paS4paT4paI4paT4paS4paR4paR4paS4paT4paI4paT4paS4paRIOKWkeKWkuKWk+KWiOKWk+KWkuKWkeKWkeKWkuKWk+KWiOKWk+KWkuKWkSDilpHilpLilpPilojilpPilpLilpEgICAgICAgICAgICAgICAgIOKWkeKWkuKWk+KWiOKWk+KWkuKWkSAgICAgICAgICAgIOKWkeKWkuKWk+KWiOKWk+KWkuKWkSBcbiMgICAgICAgICAgICAgICAgIOKWkeKWkuKWk+KWiOKWiOKWiOKWiOKWiOKWiOKWiOKWk+KWkuKWkSAg4paR4paS4paT4paI4paI4paI4paI4paI4paI4paI4paI4paT4paS4paRICDilpHilpLilpPilojilojilojilojilojilojilpPilpLilpEgIOKWkeKWkuKWk+KWiOKWk+KWkuKWkeKWkeKWkuKWk+KWiOKWk+KWkuKWkSDilpHilpLilpPilojilpPilpLilpEgICAgICAgICAgICAgICAgIOKWkeKWkuKWk+KWiOKWk+KWkuKWkSAgICAg4paR4paS4paT4paI4paI4paI4paI4paI4paI4paI4paT4paS4paRICBcbiNgLnNwbGl0KFwiXFxuXCIpO1xuICBjb25zdCBtYXhMZW5ndGggPSBiYW5uZXIucmVkdWNlKChtYXgsIGxpbmUpID0+IE1hdGgubWF4KG1heCwgbGluZS5sZW5ndGgpLCAwKTtcbiAgYmFubmVyLnB1c2goYCMgICR7bWVzc2FnZS5wYWRTdGFydChtYXhMZW5ndGggLSAzKX1gKTtcbiAgYmFubmVyLmZvckVhY2goKGxpbmUsIGluZGV4KSA9PiB7XG4gICAgKGxvZ2dlciA/IGxvZ2dlci5pbmZvLmJpbmQobG9nZ2VyKSA6IGNvbnNvbGUubG9nLmJpbmQoY29uc29sZSkpKFxuICAgICAgc3R5bGUobGluZSB8fCBcIlwiKS5yYXcoY29sb3JzW2luZGV4XSkudGV4dFxuICAgICk7XG4gIH0pO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBSZXRyaWV2ZXMgYSBzbG9nYW4gZnJvbSB0aGUgcHJlZGVmaW5lZCBsaXN0LlxuICogQHN1bW1hcnkgRmV0Y2hlcyBhIHJhbmRvbSBzbG9nYW4gb3IgYSBzcGVjaWZpYyBvbmUgYnkgaW5kZXggZnJvbSB0aGUgc2xvZ2FucyBsaXN0LlxuICogQHBhcmFtIHtudW1iZXJ9IFtpXSAtIE9wdGlvbmFsIGluZGV4IHRvIHJldHJpZXZlIGEgc3BlY2lmaWMgc2xvZ2FuLlxuICogQHJldHVybiB7c3RyaW5nfSBUaGUgc2VsZWN0ZWQgc2xvZ2FuLlxuICogQGZ1bmN0aW9uIGdldFNsb2dhblxuICogQG1lbWJlck9mIG1vZHVsZTp1dGlsc1xuICogQG1lcm1haWRcbiAqIHNlcXVlbmNlRGlhZ3JhbVxuICogICBwYXJ0aWNpcGFudCBnZXRTbG9nYW5cbiAqICAgcGFydGljaXBhbnQgTWF0aC5yYW5kb21cbiAqICAgcGFydGljaXBhbnQgc2xvZ2Fuc1xuICogICBhbHQgaSBpcyB1bmRlZmluZWRcbiAqICAgICBnZXRTbG9nYW4tPj5NYXRoLnJhbmRvbTogR2VuZXJhdGUgcmFuZG9tIGluZGV4XG4gKiAgICAgTWF0aC5yYW5kb20tLT4+Z2V0U2xvZ2FuOiBSZXR1cm4gcmFuZG9tIGluZGV4XG4gKiAgIGVsc2UgaSBpcyBkZWZpbmVkXG4gKiAgICAgTm90ZSBvdmVyIGdldFNsb2dhbjogVXNlIHByb3ZpZGVkIGluZGV4XG4gKiAgIGVuZFxuICogICBnZXRTbG9nYW4tPj5zbG9nYW5zOiBBY2Nlc3Mgc2xvZ2FuIGF0IGluZGV4XG4gKiAgIHNsb2dhbnMtLT4+Z2V0U2xvZ2FuOiBSZXR1cm4gc2xvZ2FuXG4gKiAgIGFsdCBFcnJvciBvY2N1cnNcbiAqICAgICBnZXRTbG9nYW4tPj5nZXRTbG9nYW46IFRocm93IGVycm9yXG4gKiAgIGVuZFxuICogICBnZXRTbG9nYW4tLT4+Q2FsbGVyOiBSZXR1cm4gc2xvZ2FuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTbG9nYW4oaT86IG51bWJlcik6IHN0cmluZyB7XG4gIHRyeSB7XG4gICAgaSA9XG4gICAgICB0eXBlb2YgaSA9PT0gXCJ1bmRlZmluZWRcIiA/IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIHNsb2dhbnMubGVuZ3RoKSA6IGk7XG4gICAgcmV0dXJuIHNsb2dhbnNbaV0uU2xvZ2FuO1xuICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIHJldHJpZXZlIHNsb2dhbnM6ICR7ZXJyb3J9YCk7XG4gIH1cbn1cbiIsIi8qKlxuICogQGRlc2NyaXB0aW9uIERldGVybWluZXMgaWYgdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQgaXMgYSBicm93c2VyIGJ5IGNoZWNraW5nIHRoZSBwcm90b3R5cGUgY2hhaW4gb2YgdGhlIGdsb2JhbCBvYmplY3QuXG4gKiBAc3VtbWFyeSBDaGVja3MgaWYgdGhlIGNvZGUgaXMgcnVubmluZyBpbiBhIGJyb3dzZXIgZW52aXJvbm1lbnQuXG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoZSBlbnZpcm9ubWVudCBpcyBhIGJyb3dzZXIsIGZhbHNlIG90aGVyd2lzZS5cbiAqIEBmdW5jdGlvbiBpc0Jyb3dzZXJcbiAqIEBtZW1iZXJPZiBtb2R1bGU6dXRpbHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQnJvd3NlcigpOiBib29sZWFuIHtcbiAgcmV0dXJuIChcbiAgICBPYmplY3QuZ2V0UHJvdG90eXBlT2YoT2JqZWN0LmdldFByb3RvdHlwZU9mKGdsb2JhbFRoaXMpKSAhPT1cbiAgICBPYmplY3QucHJvdG90eXBlXG4gICk7XG59XG4iLCIvKipcbiAqIEBjbGFzcyBPYmplY3RBY2N1bXVsYXRvclxuICogQHRlbXBsYXRlIFQgLSBUaGUgdHlwZSBvZiB0aGUgYWNjdW11bGF0ZWQgb2JqZWN0LCBleHRlbmRzIG9iamVjdFxuICogQGRlc2NyaXB0aW9uIEEgY2xhc3MgdGhhdCBhY2N1bXVsYXRlcyBvYmplY3RzIGFuZCBwcm92aWRlcyB0eXBlLXNhZmUgYWNjZXNzIHRvIHRoZWlyIHByb3BlcnRpZXMuXG4gKiBJdCBhbGxvd3MgZm9yIGR5bmFtaWMgYWRkaXRpb24gb2YgcHJvcGVydGllcyB3aGlsZSBtYWludGFpbmluZyB0eXBlIGluZm9ybWF0aW9uLlxuICogQHN1bW1hcnkgQWNjdW11bGF0ZXMgb2JqZWN0cyBhbmQgbWFpbnRhaW5zIHR5cGUgaW5mb3JtYXRpb24gZm9yIGFjY3VtdWxhdGVkIHByb3BlcnRpZXNcbiAqIEBtZW1iZXJPZiB1dGlsc1xuICovXG5leHBvcnQgY2xhc3MgT2JqZWN0QWNjdW11bGF0b3Ige1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJfX3NpemVcIiwge1xuICAgICAgICAgICAgdmFsdWU6IDAsXG4gICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBwcm90ZWN0ZWRcbiAgICAgKiBAZGVzY3JpcHRpb24gRXhwYW5kcyB0aGUgYWNjdW11bGF0b3Igd2l0aCBwcm9wZXJ0aWVzIGZyb20gYSBuZXcgb2JqZWN0XG4gICAgICogQHN1bW1hcnkgQWRkcyBuZXcgcHJvcGVydGllcyB0byB0aGUgYWNjdW11bGF0b3JcbiAgICAgKiBAdGVtcGxhdGUgViAtIFRoZSB0eXBlIG9mIHRoZSBvYmplY3QgYmVpbmcgZXhwYW5kZWRcbiAgICAgKiBAcGFyYW0ge1Z9IHZhbHVlIC0gVGhlIG9iamVjdCB0byBleHBhbmQgd2l0aFxuICAgICAqIEByZXR1cm5zIHt2b2lkfVxuICAgICAqL1xuICAgIGV4cGFuZCh2YWx1ZSkge1xuICAgICAgICBPYmplY3QuZW50cmllcyh2YWx1ZSkuZm9yRWFjaCgoW2ssIHZdKSA9PiB7XG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgaywge1xuICAgICAgICAgICAgICAgIGdldDogKCkgPT4gdixcbiAgICAgICAgICAgICAgICBzZXQ6ICh2YWwpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdiA9IHZhbDtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQWNjdW11bGF0ZXMgYSBuZXcgb2JqZWN0IGludG8gdGhlIGFjY3VtdWxhdG9yXG4gICAgICogQHN1bW1hcnkgQWRkcyBwcm9wZXJ0aWVzIGZyb20gYSBuZXcgb2JqZWN0IHRvIHRoZSBhY2N1bXVsYXRvciwgbWFpbnRhaW5pbmcgdHlwZSBpbmZvcm1hdGlvblxuICAgICAqIEB0ZW1wbGF0ZSBWIC0gVGhlIHR5cGUgb2YgdGhlIG9iamVjdCBiZWluZyBhY2N1bXVsYXRlZFxuICAgICAqIEBwYXJhbSB7Vn0gdmFsdWUgLSBUaGUgb2JqZWN0IHRvIGFjY3VtdWxhdGVcbiAgICAgKiBAcmV0dXJucyBBIG5ldyBPYmplY3RBY2N1bXVsYXRvciBpbnN0YW5jZSB3aXRoIHVwZGF0ZWQgdHlwZSBpbmZvcm1hdGlvblxuICAgICAqIEBtZXJtYWlkXG4gICAgICogc2VxdWVuY2VEaWFncmFtXG4gICAgICogICBwYXJ0aWNpcGFudCBBIGFzIEFjY3VtdWxhdG9yXG4gICAgICogICBwYXJ0aWNpcGFudCBPIGFzIE9iamVjdFxuICAgICAqICAgQS0+Pk86IEdldCBlbnRyaWVzXG4gICAgICogICBsb29wIEZvciBlYWNoIGVudHJ5XG4gICAgICogICAgIEEtPj5BOiBEZWZpbmUgcHJvcGVydHlcbiAgICAgKiAgIGVuZFxuICAgICAqICAgQS0+PkE6IFVwZGF0ZSBzaXplXG4gICAgICogICBBLT4+QTogUmV0dXJuIHVwZGF0ZWQgYWNjdW11bGF0b3JcbiAgICAgKi9cbiAgICBhY2N1bXVsYXRlKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuZXhwYW5kKHZhbHVlKTtcbiAgICAgICAgdGhpcy5fX3NpemUgPSB0aGlzLl9fc2l6ZSArIE9iamVjdC5rZXlzKHZhbHVlKS5sZW5ndGg7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0cmlldmVzIGEgdmFsdWUgZnJvbSB0aGUgYWNjdW11bGF0b3IgYnkgaXRzIGtleVxuICAgICAqIEBzdW1tYXJ5IEdldHMgYSB2YWx1ZSBmcm9tIHRoZSBhY2N1bXVsYXRlZCBvYmplY3QgdXNpbmcgYSB0eXBlLXNhZmUga2V5XG4gICAgICogQHRlbXBsYXRlIFQgLSB2YWx1ZSB0eXBlXG4gICAgICogQHRlbXBsYXRlIEsgLSBUaGUga2V5IHR5cGUsIG11c3QgYmUgYSBrZXkgb2YgdGhpc1xuICAgICAqIEBwYXJhbSB7S30ga2V5IC0gVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmV0cmlldmVcbiAgICAgKiBAcmV0dXJucyBUaGUgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBrZXlcbiAgICAgKi9cbiAgICBnZXQoa2V5KSB7XG4gICAgICAgIGlmICghKGtleSBpbiB0aGlzKSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgS2V5ICR7a2V5fSBkb2VzIG5vdCBleGlzdCBpbiBhY2N1bXVsYXRvci4gQXZhaWxhYmxlIGtleXM6ICR7dGhpcy5rZXlzKCkuam9pbihcIiwgXCIpfWApO1xuICAgICAgICByZXR1cm4gdGhpc1trZXldO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUmV0cmlldmVzIGEgdmFsdWUgZnJvbSB0aGUgYWNjdW11bGF0b3IgYnkgaXRzIGtleVxuICAgICAqIEBzdW1tYXJ5IEdldHMgYSB2YWx1ZSBmcm9tIHRoZSBhY2N1bXVsYXRlZCBvYmplY3QgdXNpbmcgYSB0eXBlLXNhZmUga2V5XG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJldHJpZXZlXG4gICAgICogQHBhcmFtIHthbnl9IHZhbHVlIC0gVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmV0cmlldmVcbiAgICAgKi9cbiAgICBwdXQoa2V5LCB2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5hY2N1bXVsYXRlKHsgW2tleV06IHZhbHVlIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gQ2hlY2tzIGlmIGEga2V5IGV4aXN0cyBpbiB0aGUgYWNjdW11bGF0b3JcbiAgICAgKiBAc3VtbWFyeSBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGFjY3VtdWxhdG9yIGNvbnRhaW5zIGEgc3BlY2lmaWMga2V5XG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBrZXkgdG8gY2hlY2sgZm9yIGV4aXN0ZW5jZVxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBrZXkgZXhpc3RzLCBmYWxzZSBvdGhlcndpc2VcbiAgICAgKi9cbiAgICBoYXMoa2V5KSB7XG4gICAgICAgIHJldHVybiAhIXRoaXNba2V5XTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFJlbW92ZXMgYSBrZXktdmFsdWUgcGFpciBmcm9tIHRoZSBhY2N1bXVsYXRvclxuICAgICAqIEBzdW1tYXJ5IERlbGV0ZXMgYSBwcm9wZXJ0eSBmcm9tIHRoZSBhY2N1bXVsYXRlZCBvYmplY3RcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gcmVtb3ZlXG4gICAgICogQHJldHVybnMge30gVGhlIGFjY3VtdWxhdG9yIGluc3RhbmNlIHdpdGggdGhlIHNwZWNpZmllZCBwcm9wZXJ0eSByZW1vdmVkXG4gICAgICovXG4gICAgcmVtb3ZlKGtleSkge1xuICAgICAgICBpZiAoIShrZXkgaW4gdGhpcykpXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgZGVsZXRlIHRoaXNba2V5XTtcbiAgICAgICAgdGhpcy5fX3NpemUtLTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXRyaWV2ZXMgYWxsIGtleXMgZnJvbSB0aGUgYWNjdW11bGF0b3JcbiAgICAgKiBAc3VtbWFyeSBHZXRzIGFuIGFycmF5IG9mIGFsbCBhY2N1bXVsYXRlZCBwcm9wZXJ0eSBrZXlzXG4gICAgICogQHJldHVybnMge3N0cmluZ1tdfSBBbiBhcnJheSBvZiBrZXlzIGFzIHN0cmluZ3NcbiAgICAgKi9cbiAgICBrZXlzKCkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBSZXRyaWV2ZXMgYWxsIHZhbHVlcyBmcm9tIHRoZSBhY2N1bXVsYXRvclxuICAgICAqIEBzdW1tYXJ5IEdldHMgYW4gYXJyYXkgb2YgYWxsIGFjY3VtdWxhdGVkIHByb3BlcnR5IHZhbHVlc1xuICAgICAqIEByZXR1cm5zIEFuIGFycmF5IG9mIHZhbHVlc1xuICAgICAqL1xuICAgIHZhbHVlcygpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBHZXRzIHRoZSBudW1iZXIgb2Yga2V5LXZhbHVlIHBhaXJzIGluIHRoZSBhY2N1bXVsYXRvclxuICAgICAqIEBzdW1tYXJ5IFJldHVybnMgdGhlIGNvdW50IG9mIGFjY3VtdWxhdGVkIHByb3BlcnRpZXNcbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIGtleS12YWx1ZSBwYWlyc1xuICAgICAqL1xuICAgIHNpemUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9fc2l6ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENsZWFycyBhbGwgYWNjdW11bGF0ZWQga2V5LXZhbHVlIHBhaXJzXG4gICAgICogQHN1bW1hcnkgUmVtb3ZlcyBhbGwgcHJvcGVydGllcyBmcm9tIHRoZSBhY2N1bXVsYXRvciBhbmQgcmV0dXJucyBhIG5ldyBlbXB0eSBpbnN0YW5jZVxuICAgICAqIEByZXR1cm5zIHtPYmplY3RBY2N1bXVsYXRvcjxuZXZlcj59IEEgbmV3IGVtcHR5IE9iamVjdEFjY3VtdWxhdG9yIGluc3RhbmNlXG4gICAgICovXG4gICAgY2xlYXIoKSB7XG4gICAgICAgIHJldHVybiBuZXcgT2JqZWN0QWNjdW11bGF0b3IoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEV4ZWN1dGVzIGEgY2FsbGJhY2sgZm9yIGVhY2gga2V5LXZhbHVlIHBhaXIgaW4gdGhlIGFjY3VtdWxhdG9yXG4gICAgICogQHN1bW1hcnkgSXRlcmF0ZXMgb3ZlciBhbGwgYWNjdW11bGF0ZWQgcHJvcGVydGllcywgY2FsbGluZyBhIGZ1bmN0aW9uIGZvciBlYWNoXG4gICAgICogQHBhcmFtIHtmdW5jdGlvbihhbnksIHN0cmluZywgbnVtYmVyKTogdm9pZH0gY2FsbGJhY2sgLSBUaGUgZnVuY3Rpb24gdG8gZXhlY3V0ZSBmb3IgZWFjaCBlbnRyeVxuICAgICAqIEByZXR1cm5zIHt2b2lkfVxuICAgICAqL1xuICAgIGZvckVhY2goY2FsbGJhY2spIHtcbiAgICAgICAgT2JqZWN0LmVudHJpZXModGhpcykuZm9yRWFjaCgoW2tleSwgdmFsdWVdLCBpKSA9PiBjYWxsYmFjayh2YWx1ZSwga2V5LCBpKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDcmVhdGVzIGEgbmV3IGFycmF5IHdpdGggdGhlIHJlc3VsdHMgb2YgY2FsbGluZyBhIHByb3ZpZGVkIGZ1bmN0aW9uIG9uIGV2ZXJ5IGVsZW1lbnQgaW4gdGhlIGFjY3VtdWxhdG9yXG4gICAgICogQHN1bW1hcnkgTWFwcyBlYWNoIGFjY3VtdWxhdGVkIHByb3BlcnR5IHRvIGEgbmV3IHZhbHVlIHVzaW5nIGEgY2FsbGJhY2sgZnVuY3Rpb25cbiAgICAgKiBAdGVtcGxhdGUgUiAtIFRoZSB0eXBlIG9mIHRoZSBtYXBwZWQgdmFsdWVzXG4gICAgICogQHBhcmFtIHtmdW5jdGlvbihhbnksIHN0cmluZyxudW1iZXIpOiBSfSBjYWxsYmFjayAtIEZ1bmN0aW9uIHRoYXQgcHJvZHVjZXMgYW4gZWxlbWVudCBvZiB0aGUgbmV3IGFycmF5XG4gICAgICogQHJldHVybnMge1JbXX0gQSBuZXcgYXJyYXkgd2l0aCBlYWNoIGVsZW1lbnQgYmVpbmcgdGhlIHJlc3VsdCBvZiB0aGUgY2FsbGJhY2sgZnVuY3Rpb25cbiAgICAgKi9cbiAgICBtYXAoY2FsbGJhY2spIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMpLm1hcCgoW2tleSwgdmFsdWVdLCBpKSA9PiBjYWxsYmFjayh2YWx1ZSwga2V5LCBpKSk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pWVdOamRXMTFiR0YwYjNJdWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGN5STZXeUl1TGk4dUxpOXpjbU12WVdOamRXMTFiR0YwYjNJdWRITWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklrRkJRVUU3T3pzN096czdSMEZQUnp0QlFVTklMRTFCUVUwc1QwRkJUeXhwUWtGQmFVSTdTVUZSTlVJN1VVRkRSU3hOUVVGTkxFTkJRVU1zWTBGQll5eERRVUZETEVsQlFVa3NSVUZCUlN4UlFVRlJMRVZCUVVVN1dVRkRjRU1zUzBGQlN5eEZRVUZGTEVOQlFVTTdXVUZEVWl4UlFVRlJMRVZCUVVVc1NVRkJTVHRaUVVOa0xGbEJRVmtzUlVGQlJTeExRVUZMTzFsQlEyNUNMRlZCUVZVc1JVRkJSU3hMUVVGTE8xTkJRMnhDTEVOQlFVTXNRMEZCUXp0SlFVTk1MRU5CUVVNN1NVRkZSRHM3T3pzN096dFBRVTlITzBsQlEwOHNUVUZCVFN4RFFVRnRRaXhMUVVGUk8xRkJRM3BETEUxQlFVMHNRMEZCUXl4UFFVRlBMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVVc1EwRkJReXhEUVVGRExFVkJRVVVzUlVGQlJUdFpRVU4yUXl4TlFVRk5MRU5CUVVNc1kwRkJZeXhEUVVGRExFbEJRVWtzUlVGQlJTeERRVUZETEVWQlFVVTdaMEpCUXpkQ0xFZEJRVWNzUlVGQlJTeEhRVUZITEVWQlFVVXNRMEZCUXl4RFFVRkRPMmRDUVVOYUxFZEJRVWNzUlVGQlJTeERRVUZETEVkQlFXVXNSVUZCUlN4RlFVRkZPMjlDUVVOMlFpeERRVUZETEVkQlFVY3NSMEZCUnl4RFFVRkRPMmRDUVVOV0xFTkJRVU03WjBKQlEwUXNXVUZCV1N4RlFVRkZMRWxCUVVrN1owSkJRMnhDTEZWQlFWVXNSVUZCUlN4SlFVRkpPMkZCUTJwQ0xFTkJRVU1zUTBGQlF6dFJRVU5NTEVOQlFVTXNRMEZCUXl4RFFVRkRPMGxCUTB3c1EwRkJRenRKUVVWRU96czdPenM3T3pzN096czdPenM3TzA5QlowSkhPMGxCUTBnc1ZVRkJWU3hEUVVGdFFpeExRVUZSTzFGQlEyNURMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTTdVVUZEYmtJc1NVRkJTU3hEUVVGRExFMUJRVTBzUjBGQlJ5eEpRVUZKTEVOQlFVTXNUVUZCVFN4SFFVRkhMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNUVUZCVFN4RFFVRkRPMUZCUTNSRUxFOUJRVThzU1VGQmJVUXNRMEZCUXp0SlFVTTNSQ3hEUVVGRE8wbEJSVVE3T3pzN096czdUMEZQUnp0SlFVTklMRWRCUVVjc1EwRkJiMElzUjBGQlRUdFJRVU16UWl4SlFVRkpMRU5CUVVNc1EwRkJReXhIUVVGSExFbEJRVWtzU1VGQlNTeERRVUZETzFsQlEyaENMRTFCUVUwc1NVRkJTU3hMUVVGTExFTkJRMklzVDBGQlR5eEhRVUZoTEcxRVFVRnRSQ3hKUVVGSkxFTkJRVU1zU1VGQlNTeEZRVUZGTEVOQlFVTXNTVUZCU1N4RFFVTnlSaXhKUVVGSkxFTkJRMHdzUlVGQlJTeERRVU5LTEVOQlFVTTdVVUZEU2l4UFFVRlJMRWxCUVZrc1EwRkJReXhIUVVGUkxFTkJRVk1zUTBGQlF6dEpRVU42UXl4RFFVRkRPMGxCUlVRN096czdPMDlCUzBjN1NVRkRTQ3hIUVVGSExFTkJRVU1zUjBGQlZ5eEZRVUZGTEV0QlFWVTdVVUZEZWtJc1QwRkJUeXhKUVVGSkxFTkJRVU1zVlVGQlZTeERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hMUVVGTExFVkJRVVVzUTBGQlF5eERRVUZETzBsQlF6TkRMRU5CUVVNN1NVRkZSRHM3T3pzN1QwRkxSenRKUVVOSUxFZEJRVWNzUTBGQlF5eEhRVUZYTzFGQlEySXNUMEZCVHl4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExFZEJRV2xDTEVOQlFVTXNRMEZCUXp0SlFVTnVReXhEUVVGRE8wbEJSVVE3T3pzN08wOUJTMGM3U1VGRFNDeE5RVUZOTEVOQlEwb3NSMEZCZDBJN1VVRkplRUlzU1VGQlNTeERRVUZETEVOQlFVTXNSMEZCUnl4SlFVRkpMRWxCUVVrc1EwRkJRenRaUVVGRkxFOUJRVThzU1VGQlNTeERRVUZETzFGQlJXaERMRTlCUVU4c1NVRkJTU3hEUVVGRExFZEJRV2xDTEVOQlFVTXNRMEZCUXp0UlFVTXZRaXhKUVVGSkxFTkJRVU1zVFVGQlRTeEZRVUZGTEVOQlFVTTdVVUZEWkN4UFFVRlBMRWxCUTI5RExFTkJRVU03U1VGRE9VTXNRMEZCUXp0SlFVVkVPenM3TzA5QlNVYzdTVUZEU0N4SlFVRkpPMUZCUTBZc1QwRkJUeXhOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRPMGxCUXpOQ0xFTkJRVU03U1VGRlJEczdPenRQUVVsSE8wbEJRMGdzVFVGQlRUdFJRVU5LTEU5QlFVOHNUVUZCVFN4RFFVRkRMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF6dEpRVU0zUWl4RFFVRkRPMGxCUlVRN096czdUMEZKUnp0SlFVTklMRWxCUVVrN1VVRkRSaXhQUVVGUExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTTdTVUZEY2tJc1EwRkJRenRKUVVWRU96czdPMDlCU1VjN1NVRkRTQ3hMUVVGTE8xRkJRMGdzVDBGQlR5eEpRVUZKTEdsQ1FVRnBRaXhGUVVGRkxFTkJRVU03U1VGRGFrTXNRMEZCUXp0SlFVVkVPenM3T3p0UFFVdEhPMGxCUTBnc1QwRkJUeXhEUVVOTUxGRkJRWFZGTzFGQlJYWkZMRTFCUVUwc1EwRkJReXhQUVVGUExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFVkJRVVVzUzBGQlN5eERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRVZCUVVVc1EwRkRMME1zVVVGQlVTeERRVUZETEV0QlFVc3NSVUZCUlN4SFFVRnBRaXhGUVVGRkxFTkJRVU1zUTBGQlF5eERRVU4wUXl4RFFVRkRPMGxCUTBvc1EwRkJRenRKUVVWRU96czdPenM3VDBGTlJ6dEpRVU5JTEVkQlFVY3NRMEZEUkN4UlFVRnZSVHRSUVVWd1JTeFBRVUZQTEUxQlFVMHNRMEZCUXl4UFFVRlBMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRVZCUVVVc1MwRkJTeXhEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVWQlFVVXNRMEZEYkVRc1VVRkJVU3hEUVVGRExFdEJRVXNzUlVGQlJTeEhRVUZwUWl4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVOMFF5eERRVUZETzBsQlEwb3NRMEZCUXp0RFFVTkdJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpTHlvcVhHNGdLaUJBWTJ4aGMzTWdUMkpxWldOMFFXTmpkVzExYkdGMGIzSmNiaUFxSUVCMFpXMXdiR0YwWlNCVUlDMGdWR2hsSUhSNWNHVWdiMllnZEdobElHRmpZM1Z0ZFd4aGRHVmtJRzlpYW1WamRDd2daWGgwWlc1a2N5QnZZbXBsWTNSY2JpQXFJRUJrWlhOamNtbHdkR2x2YmlCQklHTnNZWE56SUhSb1lYUWdZV05qZFcxMWJHRjBaWE1nYjJKcVpXTjBjeUJoYm1RZ2NISnZkbWxrWlhNZ2RIbHdaUzF6WVdabElHRmpZMlZ6Y3lCMGJ5QjBhR1ZwY2lCd2NtOXdaWEowYVdWekxseHVJQ29nU1hRZ1lXeHNiM2R6SUdadmNpQmtlVzVoYldsaklHRmtaR2wwYVc5dUlHOW1JSEJ5YjNCbGNuUnBaWE1nZDJocGJHVWdiV0ZwYm5SaGFXNXBibWNnZEhsd1pTQnBibVp2Y20xaGRHbHZiaTVjYmlBcUlFQnpkVzF0WVhKNUlFRmpZM1Z0ZFd4aGRHVnpJRzlpYW1WamRITWdZVzVrSUcxaGFXNTBZV2x1Y3lCMGVYQmxJR2x1Wm05eWJXRjBhVzl1SUdadmNpQmhZMk4xYlhWc1lYUmxaQ0J3Y205d1pYSjBhV1Z6WEc0Z0tpQkFiV1Z0WW1WeVQyWWdkWFJwYkhOY2JpQXFMMXh1Wlhod2IzSjBJR05zWVhOeklFOWlhbVZqZEVGalkzVnRkV3hoZEc5eVBGUWdaWGgwWlc1a2N5QnZZbXBsWTNRK0lIdGNiaUFnTHlvcVhHNGdJQ0FxSUVCd2NtbDJZWFJsWEc0Z0lDQXFJRUJrWlhOamNtbHdkR2x2YmlCVWFHVWdjMmw2WlNCdlppQjBhR1VnWVdOamRXMTFiR0YwWldRZ2IySnFaV04wWEc0Z0lDQXFJRUIwZVhCbElIdHVkVzFpWlhKOVhHNGdJQ0FxTDF4dUlDQndjbWwyWVhSbElGOWZjMmw2WlNFNklHNTFiV0psY2p0Y2JseHVJQ0JqYjI1emRISjFZM1J2Y2lncElIdGNiaUFnSUNCUFltcGxZM1F1WkdWbWFXNWxVSEp2Y0dWeWRIa29kR2hwY3l3Z1hDSmZYM05wZW1WY0lpd2dlMXh1SUNBZ0lDQWdkbUZzZFdVNklEQXNYRzRnSUNBZ0lDQjNjbWwwWVdKc1pUb2dkSEoxWlN4Y2JpQWdJQ0FnSUdOdmJtWnBaM1Z5WVdKc1pUb2dabUZzYzJVc1hHNGdJQ0FnSUNCbGJuVnRaWEpoWW14bE9pQm1ZV3h6WlN4Y2JpQWdJQ0I5S1R0Y2JpQWdmVnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkFjSEp2ZEdWamRHVmtYRzRnSUNBcUlFQmtaWE5qY21sd2RHbHZiaUJGZUhCaGJtUnpJSFJvWlNCaFkyTjFiWFZzWVhSdmNpQjNhWFJvSUhCeWIzQmxjblJwWlhNZ1puSnZiU0JoSUc1bGR5QnZZbXBsWTNSY2JpQWdJQ29nUUhOMWJXMWhjbmtnUVdSa2N5QnVaWGNnY0hKdmNHVnlkR2xsY3lCMGJ5QjBhR1VnWVdOamRXMTFiR0YwYjNKY2JpQWdJQ29nUUhSbGJYQnNZWFJsSUZZZ0xTQlVhR1VnZEhsd1pTQnZaaUIwYUdVZ2IySnFaV04wSUdKbGFXNW5JR1Y0Y0dGdVpHVmtYRzRnSUNBcUlFQndZWEpoYlNCN1ZuMGdkbUZzZFdVZ0xTQlVhR1VnYjJKcVpXTjBJSFJ2SUdWNGNHRnVaQ0IzYVhSb1hHNGdJQ0FxSUVCeVpYUjFjbTV6SUh0MmIybGtmVnh1SUNBZ0tpOWNiaUFnY0hKdmRHVmpkR1ZrSUdWNGNHRnVaRHhXSUdWNGRHVnVaSE1nYjJKcVpXTjBQaWgyWVd4MVpUb2dWaWs2SUhadmFXUWdlMXh1SUNBZ0lFOWlhbVZqZEM1bGJuUnlhV1Z6S0haaGJIVmxLUzVtYjNKRllXTm9LQ2hiYXl3Z2RsMHBJRDArSUh0Y2JpQWdJQ0FnSUU5aWFtVmpkQzVrWldacGJtVlFjbTl3WlhKMGVTaDBhR2x6TENCckxDQjdYRzRnSUNBZ0lDQWdJR2RsZERvZ0tDa2dQVDRnZGl4Y2JpQWdJQ0FnSUNBZ2MyVjBPaUFvZG1Gc09pQldXMnRsZVc5bUlGWmRLU0E5UGlCN1hHNGdJQ0FnSUNBZ0lDQWdkaUE5SUhaaGJEdGNiaUFnSUNBZ0lDQWdmU3hjYmlBZ0lDQWdJQ0FnWTI5dVptbG5kWEpoWW14bE9pQjBjblZsTEZ4dUlDQWdJQ0FnSUNCbGJuVnRaWEpoWW14bE9pQjBjblZsTEZ4dUlDQWdJQ0FnZlNrN1hHNGdJQ0FnZlNrN1hHNGdJSDFjYmx4dUlDQXZLaXBjYmlBZ0lDb2dRR1JsYzJOeWFYQjBhVzl1SUVGalkzVnRkV3hoZEdWeklHRWdibVYzSUc5aWFtVmpkQ0JwYm5SdklIUm9aU0JoWTJOMWJYVnNZWFJ2Y2x4dUlDQWdLaUJBYzNWdGJXRnllU0JCWkdSeklIQnliM0JsY25ScFpYTWdabkp2YlNCaElHNWxkeUJ2WW1wbFkzUWdkRzhnZEdobElHRmpZM1Z0ZFd4aGRHOXlMQ0J0WVdsdWRHRnBibWx1WnlCMGVYQmxJR2x1Wm05eWJXRjBhVzl1WEc0Z0lDQXFJRUIwWlcxd2JHRjBaU0JXSUMwZ1ZHaGxJSFI1Y0dVZ2IyWWdkR2hsSUc5aWFtVmpkQ0JpWldsdVp5QmhZMk4xYlhWc1lYUmxaRnh1SUNBZ0tpQkFjR0Z5WVcwZ2UxWjlJSFpoYkhWbElDMGdWR2hsSUc5aWFtVmpkQ0IwYnlCaFkyTjFiWFZzWVhSbFhHNGdJQ0FxSUVCeVpYUjFjbTV6SUVFZ2JtVjNJRTlpYW1WamRFRmpZM1Z0ZFd4aGRHOXlJR2x1YzNSaGJtTmxJSGRwZEdnZ2RYQmtZWFJsWkNCMGVYQmxJR2x1Wm05eWJXRjBhVzl1WEc0Z0lDQXFJRUJ0WlhKdFlXbGtYRzRnSUNBcUlITmxjWFZsYm1ObFJHbGhaM0poYlZ4dUlDQWdLaUFnSUhCaGNuUnBZMmx3WVc1MElFRWdZWE1nUVdOamRXMTFiR0YwYjNKY2JpQWdJQ29nSUNCd1lYSjBhV05wY0dGdWRDQlBJR0Z6SUU5aWFtVmpkRnh1SUNBZ0tpQWdJRUV0UGo1UE9pQkhaWFFnWlc1MGNtbGxjMXh1SUNBZ0tpQWdJR3h2YjNBZ1JtOXlJR1ZoWTJnZ1pXNTBjbmxjYmlBZ0lDb2dJQ0FnSUVFdFBqNUJPaUJFWldacGJtVWdjSEp2Y0dWeWRIbGNiaUFnSUNvZ0lDQmxibVJjYmlBZ0lDb2dJQ0JCTFQ0K1FUb2dWWEJrWVhSbElITnBlbVZjYmlBZ0lDb2dJQ0JCTFQ0K1FUb2dVbVYwZFhKdUlIVndaR0YwWldRZ1lXTmpkVzExYkdGMGIzSmNiaUFnSUNvdlhHNGdJR0ZqWTNWdGRXeGhkR1U4VmlCbGVIUmxibVJ6SUc5aWFtVmpkRDRvZG1Gc2RXVTZJRllwT2lCVUlDWWdWaUFtSUU5aWFtVmpkRUZqWTNWdGRXeGhkRzl5UEZRZ0ppQldQaUI3WEc0Z0lDQWdkR2hwY3k1bGVIQmhibVFvZG1Gc2RXVXBPMXh1SUNBZ0lIUm9hWE11WDE5emFYcGxJRDBnZEdocGN5NWZYM05wZW1VZ0t5QlBZbXBsWTNRdWEyVjVjeWgyWVd4MVpTa3ViR1Z1WjNSb08xeHVJQ0FnSUhKbGRIVnliaUIwYUdseklHRnpJSFZ1YTI1dmQyNGdZWE1nVkNBbUlGWWdKaUJQWW1wbFkzUkJZMk4xYlhWc1lYUnZjanhVSUNZZ1ZqNDdYRzRnSUgxY2JseHVJQ0F2S2lwY2JpQWdJQ29nUUdSbGMyTnlhWEIwYVc5dUlGSmxkSEpwWlhabGN5QmhJSFpoYkhWbElHWnliMjBnZEdobElHRmpZM1Z0ZFd4aGRHOXlJR0o1SUdsMGN5QnJaWGxjYmlBZ0lDb2dRSE4xYlcxaGNua2dSMlYwY3lCaElIWmhiSFZsSUdaeWIyMGdkR2hsSUdGalkzVnRkV3hoZEdWa0lHOWlhbVZqZENCMWMybHVaeUJoSUhSNWNHVXRjMkZtWlNCclpYbGNiaUFnSUNvZ1FIUmxiWEJzWVhSbElGUWdMU0IyWVd4MVpTQjBlWEJsWEc0Z0lDQXFJRUIwWlcxd2JHRjBaU0JMSUMwZ1ZHaGxJR3RsZVNCMGVYQmxMQ0J0ZFhOMElHSmxJR0VnYTJWNUlHOW1JSFJvYVhOY2JpQWdJQ29nUUhCaGNtRnRJSHRMZlNCclpYa2dMU0JVYUdVZ2EyVjVJRzltSUhSb1pTQjJZV3gxWlNCMGJ5QnlaWFJ5YVdWMlpWeHVJQ0FnS2lCQWNtVjBkWEp1Y3lCVWFHVWdkbUZzZFdVZ1lYTnpiMk5wWVhSbFpDQjNhWFJvSUhSb1pTQnJaWGxjYmlBZ0lDb3ZYRzRnSUdkbGREeExJR1Y0ZEdWdVpITWdhMlY1YjJZZ1ZENG9hMlY1T2lCTEtUb2dWRnRMWFNCN1hHNGdJQ0FnYVdZZ0tDRW9hMlY1SUdsdUlIUm9hWE1wS1Z4dUlDQWdJQ0FnZEdoeWIzY2dibVYzSUVWeWNtOXlLRnh1SUNBZ0lDQWdJQ0JnUzJWNUlDUjdhMlY1SUdGeklITjBjbWx1WjMwZ1pHOWxjeUJ1YjNRZ1pYaHBjM1FnYVc0Z1lXTmpkVzExYkdGMGIzSXVJRUYyWVdsc1lXSnNaU0JyWlhsek9pQWtlM1JvYVhNdWEyVjVjeWdwTG1wdmFXNG9YRzRnSUNBZ0lDQWdJQ0FnWENJc0lGd2lYRzRnSUNBZ0lDQWdJQ2w5WUZ4dUlDQWdJQ0FnS1R0Y2JpQWdJQ0J5WlhSMWNtNGdLSFJvYVhNZ1lYTWdZVzU1S1Z0clpYa2dZWE1nUzEwZ1lYTWdWRnRMWFR0Y2JpQWdmVnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkFaR1Z6WTNKcGNIUnBiMjRnVW1WMGNtbGxkbVZ6SUdFZ2RtRnNkV1VnWm5KdmJTQjBhR1VnWVdOamRXMTFiR0YwYjNJZ1lua2dhWFJ6SUd0bGVWeHVJQ0FnS2lCQWMzVnRiV0Z5ZVNCSFpYUnpJR0VnZG1Gc2RXVWdabkp2YlNCMGFHVWdZV05qZFcxMWJHRjBaV1FnYjJKcVpXTjBJSFZ6YVc1bklHRWdkSGx3WlMxellXWmxJR3RsZVZ4dUlDQWdLaUJBY0dGeVlXMGdlM04wY21sdVozMGdhMlY1SUMwZ1ZHaGxJR3RsZVNCdlppQjBhR1VnZG1Gc2RXVWdkRzhnY21WMGNtbGxkbVZjYmlBZ0lDb2dRSEJoY21GdElIdGhibmw5SUhaaGJIVmxJQzBnVkdobElHdGxlU0J2WmlCMGFHVWdkbUZzZFdVZ2RHOGdjbVYwY21sbGRtVmNiaUFnSUNvdlhHNGdJSEIxZENoclpYazZJSE4wY21sdVp5d2dkbUZzZFdVNklHRnVlU2tnZTF4dUlDQWdJSEpsZEhWeWJpQjBhR2x6TG1GalkzVnRkV3hoZEdVb2V5QmJhMlY1WFRvZ2RtRnNkV1VnZlNrN1hHNGdJSDFjYmx4dUlDQXZLaXBjYmlBZ0lDb2dRR1JsYzJOeWFYQjBhVzl1SUVOb1pXTnJjeUJwWmlCaElHdGxlU0JsZUdsemRITWdhVzRnZEdobElHRmpZM1Z0ZFd4aGRHOXlYRzRnSUNBcUlFQnpkVzF0WVhKNUlFUmxkR1Z5YldsdVpYTWdkMmhsZEdobGNpQjBhR1VnWVdOamRXMTFiR0YwYjNJZ1kyOXVkR0ZwYm5NZ1lTQnpjR1ZqYVdacFl5QnJaWGxjYmlBZ0lDb2dRSEJoY21GdElIdHpkSEpwYm1kOUlHdGxlU0F0SUZSb1pTQnJaWGtnZEc4Z1kyaGxZMnNnWm05eUlHVjRhWE4wWlc1alpWeHVJQ0FnS2lCQWNtVjBkWEp1Y3lCN1ltOXZiR1ZoYm4wZ1ZISjFaU0JwWmlCMGFHVWdhMlY1SUdWNGFYTjBjeXdnWm1Gc2MyVWdiM1JvWlhKM2FYTmxYRzRnSUNBcUwxeHVJQ0JvWVhNb2EyVjVPaUJ6ZEhKcGJtY3BPaUJpYjI5c1pXRnVJSHRjYmlBZ0lDQnlaWFIxY200Z0lTRjBhR2x6VzJ0bGVTQmhjeUJyWlhsdlppQjBhR2x6WFR0Y2JpQWdmVnh1WEc0Z0lDOHFLbHh1SUNBZ0tpQkFaR1Z6WTNKcGNIUnBiMjRnVW1WdGIzWmxjeUJoSUd0bGVTMTJZV3gxWlNCd1lXbHlJR1p5YjIwZ2RHaGxJR0ZqWTNWdGRXeGhkRzl5WEc0Z0lDQXFJRUJ6ZFcxdFlYSjVJRVJsYkdWMFpYTWdZU0J3Y205d1pYSjBlU0JtY205dElIUm9aU0JoWTJOMWJYVnNZWFJsWkNCdlltcGxZM1JjYmlBZ0lDb2dRSEJoY21GdElIdHpkSEpwYm1kOUlHdGxlU0F0SUZSb1pTQnJaWGtnYjJZZ2RHaGxJSEJ5YjNCbGNuUjVJSFJ2SUhKbGJXOTJaVnh1SUNBZ0tpQkFjbVYwZFhKdWN5QjdmU0JVYUdVZ1lXTmpkVzExYkdGMGIzSWdhVzV6ZEdGdVkyVWdkMmwwYUNCMGFHVWdjM0JsWTJsbWFXVmtJSEJ5YjNCbGNuUjVJSEpsYlc5MlpXUmNiaUFnSUNvdlhHNGdJSEpsYlc5MlpTaGNiaUFnSUNCclpYazZJR3RsZVc5bUlIUm9hWE1nZkNCemRISnBibWRjYmlBZ0tUcGNiaUFnSUNCOElDaFBiV2wwUEhSb2FYTXNJSFI1Y0dWdlppQnJaWGsrSUNZZ1QySnFaV04wUVdOamRXMTFiR0YwYjNJOFQyMXBkRHgwYUdsekxDQjBlWEJsYjJZZ2EyVjVQajRwWEc0Z0lDQWdmQ0IwYUdseklIdGNiaUFnSUNCcFppQW9JU2hyWlhrZ2FXNGdkR2hwY3lrcElISmxkSFZ5YmlCMGFHbHpPMXh1WEc0Z0lDQWdaR1ZzWlhSbElIUm9hWE5iYTJWNUlHRnpJR3RsZVc5bUlIUm9hWE5kTzF4dUlDQWdJSFJvYVhNdVgxOXphWHBsTFMwN1hHNGdJQ0FnY21WMGRYSnVJSFJvYVhNZ1lYTWdkVzVyYm05M2JpQmhjeUJQYldsMFBIUm9hWE1zSUhSNWNHVnZaaUJyWlhrK0lDWmNiaUFnSUNBZ0lFOWlhbVZqZEVGalkzVnRkV3hoZEc5eVBFOXRhWFE4ZEdocGN5d2dkSGx3Wlc5bUlHdGxlVDQrTzF4dUlDQjlYRzVjYmlBZ0x5b3FYRzRnSUNBcUlFQmtaWE5qY21sd2RHbHZiaUJTWlhSeWFXVjJaWE1nWVd4c0lHdGxlWE1nWm5KdmJTQjBhR1VnWVdOamRXMTFiR0YwYjNKY2JpQWdJQ29nUUhOMWJXMWhjbmtnUjJWMGN5QmhiaUJoY25KaGVTQnZaaUJoYkd3Z1lXTmpkVzExYkdGMFpXUWdjSEp2Y0dWeWRIa2dhMlY1YzF4dUlDQWdLaUJBY21WMGRYSnVjeUI3YzNSeWFXNW5XMTE5SUVGdUlHRnljbUY1SUc5bUlHdGxlWE1nWVhNZ2MzUnlhVzVuYzF4dUlDQWdLaTljYmlBZ2EyVjVjeWdwT2lCemRISnBibWRiWFNCN1hHNGdJQ0FnY21WMGRYSnVJRTlpYW1WamRDNXJaWGx6S0hSb2FYTXBPMXh1SUNCOVhHNWNiaUFnTHlvcVhHNGdJQ0FxSUVCa1pYTmpjbWx3ZEdsdmJpQlNaWFJ5YVdWMlpYTWdZV3hzSUhaaGJIVmxjeUJtY205dElIUm9aU0JoWTJOMWJYVnNZWFJ2Y2x4dUlDQWdLaUJBYzNWdGJXRnllU0JIWlhSeklHRnVJR0Z5Y21GNUlHOW1JR0ZzYkNCaFkyTjFiWFZzWVhSbFpDQndjbTl3WlhKMGVTQjJZV3gxWlhOY2JpQWdJQ29nUUhKbGRIVnlibk1nUVc0Z1lYSnlZWGtnYjJZZ2RtRnNkV1Z6WEc0Z0lDQXFMMXh1SUNCMllXeDFaWE1vS1RvZ1ZGdHJaWGx2WmlCVVhWdGRJSHRjYmlBZ0lDQnlaWFIxY200Z1QySnFaV04wTG5aaGJIVmxjeWgwYUdsektUdGNiaUFnZlZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJBWkdWelkzSnBjSFJwYjI0Z1IyVjBjeUIwYUdVZ2JuVnRZbVZ5SUc5bUlHdGxlUzEyWVd4MVpTQndZV2x5Y3lCcGJpQjBhR1VnWVdOamRXMTFiR0YwYjNKY2JpQWdJQ29nUUhOMWJXMWhjbmtnVW1WMGRYSnVjeUIwYUdVZ1kyOTFiblFnYjJZZ1lXTmpkVzExYkdGMFpXUWdjSEp2Y0dWeWRHbGxjMXh1SUNBZ0tpQkFjbVYwZFhKdWN5QjdiblZ0WW1WeWZTQlVhR1VnYm5WdFltVnlJRzltSUd0bGVTMTJZV3gxWlNCd1lXbHljMXh1SUNBZ0tpOWNiaUFnYzJsNlpTZ3BPaUJ1ZFcxaVpYSWdlMXh1SUNBZ0lISmxkSFZ5YmlCMGFHbHpMbDlmYzJsNlpUdGNiaUFnZlZ4dVhHNGdJQzhxS2x4dUlDQWdLaUJBWkdWelkzSnBjSFJwYjI0Z1EyeGxZWEp6SUdGc2JDQmhZMk4xYlhWc1lYUmxaQ0JyWlhrdGRtRnNkV1VnY0dGcGNuTmNiaUFnSUNvZ1FITjFiVzFoY25rZ1VtVnRiM1psY3lCaGJHd2djSEp2Y0dWeWRHbGxjeUJtY205dElIUm9aU0JoWTJOMWJYVnNZWFJ2Y2lCaGJtUWdjbVYwZFhKdWN5QmhJRzVsZHlCbGJYQjBlU0JwYm5OMFlXNWpaVnh1SUNBZ0tpQkFjbVYwZFhKdWN5QjdUMkpxWldOMFFXTmpkVzExYkdGMGIzSThibVYyWlhJK2ZTQkJJRzVsZHlCbGJYQjBlU0JQWW1wbFkzUkJZMk4xYlhWc1lYUnZjaUJwYm5OMFlXNWpaVnh1SUNBZ0tpOWNiaUFnWTJ4bFlYSW9LVG9nVDJKcVpXTjBRV05qZFcxMWJHRjBiM0k4Ym1WMlpYSStJSHRjYmlBZ0lDQnlaWFIxY200Z2JtVjNJRTlpYW1WamRFRmpZM1Z0ZFd4aGRHOXlLQ2s3WEc0Z0lIMWNibHh1SUNBdktpcGNiaUFnSUNvZ1FHUmxjMk55YVhCMGFXOXVJRVY0WldOMWRHVnpJR0VnWTJGc2JHSmhZMnNnWm05eUlHVmhZMmdnYTJWNUxYWmhiSFZsSUhCaGFYSWdhVzRnZEdobElHRmpZM1Z0ZFd4aGRHOXlYRzRnSUNBcUlFQnpkVzF0WVhKNUlFbDBaWEpoZEdWeklHOTJaWElnWVd4c0lHRmpZM1Z0ZFd4aGRHVmtJSEJ5YjNCbGNuUnBaWE1zSUdOaGJHeHBibWNnWVNCbWRXNWpkR2x2YmlCbWIzSWdaV0ZqYUZ4dUlDQWdLaUJBY0dGeVlXMGdlMloxYm1OMGFXOXVLR0Z1ZVN3Z2MzUnlhVzVuTENCdWRXMWlaWElwT2lCMmIybGtmU0JqWVd4c1ltRmpheUF0SUZSb1pTQm1kVzVqZEdsdmJpQjBieUJsZUdWamRYUmxJR1p2Y2lCbFlXTm9JR1Z1ZEhKNVhHNGdJQ0FxSUVCeVpYUjFjbTV6SUh0MmIybGtmVnh1SUNBZ0tpOWNiaUFnWm05eVJXRmphQ2hjYmlBZ0lDQmpZV3hzWW1GamF6b2dLSFpoYkhWbE9pQjBhR2x6VzJ0bGVXOW1JSFJvYVhOZExDQnJaWGs2SUd0bGVXOW1JSFJvYVhNc0lHazZJRzUxYldKbGNpa2dQVDRnZG05cFpGeHVJQ0FwT2lCMmIybGtJSHRjYmlBZ0lDQlBZbXBsWTNRdVpXNTBjbWxsY3loMGFHbHpLUzVtYjNKRllXTm9LQ2hiYTJWNUxDQjJZV3gxWlYwc0lHa3BJRDArWEc0Z0lDQWdJQ0JqWVd4c1ltRmpheWgyWVd4MVpTd2dhMlY1SUdGeklHdGxlVzltSUhSb2FYTXNJR2twWEc0Z0lDQWdLVHRjYmlBZ2ZWeHVYRzRnSUM4cUtseHVJQ0FnS2lCQVpHVnpZM0pwY0hScGIyNGdRM0psWVhSbGN5QmhJRzVsZHlCaGNuSmhlU0IzYVhSb0lIUm9aU0J5WlhOMWJIUnpJRzltSUdOaGJHeHBibWNnWVNCd2NtOTJhV1JsWkNCbWRXNWpkR2x2YmlCdmJpQmxkbVZ5ZVNCbGJHVnRaVzUwSUdsdUlIUm9aU0JoWTJOMWJYVnNZWFJ2Y2x4dUlDQWdLaUJBYzNWdGJXRnllU0JOWVhCeklHVmhZMmdnWVdOamRXMTFiR0YwWldRZ2NISnZjR1Z5ZEhrZ2RHOGdZU0J1WlhjZ2RtRnNkV1VnZFhOcGJtY2dZU0JqWVd4c1ltRmpheUJtZFc1amRHbHZibHh1SUNBZ0tpQkFkR1Z0Y0d4aGRHVWdVaUF0SUZSb1pTQjBlWEJsSUc5bUlIUm9aU0J0WVhCd1pXUWdkbUZzZFdWelhHNGdJQ0FxSUVCd1lYSmhiU0I3Wm5WdVkzUnBiMjRvWVc1NUxDQnpkSEpwYm1jc2JuVnRZbVZ5S1RvZ1VuMGdZMkZzYkdKaFkyc2dMU0JHZFc1amRHbHZiaUIwYUdGMElIQnliMlIxWTJWeklHRnVJR1ZzWlcxbGJuUWdiMllnZEdobElHNWxkeUJoY25KaGVWeHVJQ0FnS2lCQWNtVjBkWEp1Y3lCN1VsdGRmU0JCSUc1bGR5QmhjbkpoZVNCM2FYUm9JR1ZoWTJnZ1pXeGxiV1Z1ZENCaVpXbHVaeUIwYUdVZ2NtVnpkV3gwSUc5bUlIUm9aU0JqWVd4c1ltRmpheUJtZFc1amRHbHZibHh1SUNBZ0tpOWNiaUFnYldGd1BGSStLRnh1SUNBZ0lHTmhiR3hpWVdOck9pQW9kbUZzZFdVNklIUm9hWE5iYTJWNWIyWWdkR2hwYzEwc0lHdGxlVG9nYTJWNWIyWWdkR2hwY3l3Z2FUb2diblZ0WW1WeUtTQTlQaUJTWEc0Z0lDazZJRkpiWFNCN1hHNGdJQ0FnY21WMGRYSnVJRTlpYW1WamRDNWxiblJ5YVdWektIUm9hWE1wTG0xaGNDZ29XMnRsZVN3Z2RtRnNkV1ZkTENCcEtTQTlQbHh1SUNBZ0lDQWdZMkZzYkdKaFkyc29kbUZzZFdVc0lHdGxlU0JoY3lCclpYbHZaaUIwYUdsekxDQnBLVnh1SUNBZ0lDazdYRzRnSUgxY2JuMWNiaUpkZlE9PSIsImltcG9ydCB7IHRvRU5WRm9ybWF0IH0gZnJvbSBcIi4vdGV4dFwiO1xuaW1wb3J0IHsgRW52aXJvbm1lbnRGYWN0b3J5IH0gZnJvbSBcIi4vdHlwZXNcIjtcbmltcG9ydCB7IGlzQnJvd3NlciB9IGZyb20gXCIuL3dlYlwiO1xuaW1wb3J0IHsgT2JqZWN0QWNjdW11bGF0b3IgfSBmcm9tIFwidHlwZWQtb2JqZWN0LWFjY3VtdWxhdG9yXCI7XG5cbi8qKlxuICogQGNsYXNzIEVudmlyb25tZW50XG4gKiBAZXh0ZW5kcyB7T2JqZWN0QWNjdW11bGF0b3I8VD59XG4gKiBAdGVtcGxhdGUgVFxuICogQGRlc2NyaXB0aW9uIEEgY2xhc3MgcmVwcmVzZW50aW5nIGFuIGVudmlyb25tZW50IHdpdGggYWNjdW11bGF0aW9uIGNhcGFiaWxpdGllcy5cbiAqIEBzdW1tYXJ5IE1hbmFnZXMgZW52aXJvbm1lbnQtcmVsYXRlZCBkYXRhIGFuZCBwcm92aWRlcyBtZXRob2RzIGZvciBhY2N1bXVsYXRpb24gYW5kIGtleSByZXRyaWV2YWwuXG4gKiBAcGFyYW0ge1R9IFtpbml0aWFsRGF0YV0gLSBUaGUgaW5pdGlhbCBkYXRhIHRvIHBvcHVsYXRlIHRoZSBlbnZpcm9ubWVudCB3aXRoLlxuICovXG5leHBvcnQgY2xhc3MgRW52aXJvbm1lbnQ8VCBleHRlbmRzIG9iamVjdD4gZXh0ZW5kcyBPYmplY3RBY2N1bXVsYXRvcjxUPiB7XG4gIC8qKlxuICAgKiBAc3RhdGljXG4gICAqIEBwcm90ZWN0ZWRcbiAgICogQGRlc2NyaXB0aW9uIEEgZmFjdG9yeSBmdW5jdGlvbiBmb3IgY3JlYXRpbmcgRW52aXJvbm1lbnQgaW5zdGFuY2VzLlxuICAgKiBAc3VtbWFyeSBEZWZpbmVzIGhvdyBuZXcgaW5zdGFuY2VzIG9mIHRoZSBFbnZpcm9ubWVudCBjbGFzcyBzaG91bGQgYmUgY3JlYXRlZC5cbiAgICogQHJldHVybiB7RW52aXJvbm1lbnQ8YW55Pn0gQSBuZXcgaW5zdGFuY2Ugb2YgdGhlIEVudmlyb25tZW50IGNsYXNzLlxuICAgKi9cbiAgcHJvdGVjdGVkIHN0YXRpYyBmYWN0b3J5OiBFbnZpcm9ubWVudEZhY3Rvcnk8YW55LCBhbnk+ID1cbiAgICAoKTogRW52aXJvbm1lbnQ8YW55PiA9PiBuZXcgRW52aXJvbm1lbnQoKTtcblxuICAvKipcbiAgICogQHN0YXRpY1xuICAgKiBAcHJpdmF0ZVxuICAgKiBAZGVzY3JpcHRpb24gVGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgRW52aXJvbm1lbnQgY2xhc3MuXG4gICAqIEB0eXBlIHtFbnZpcm9ubWVudDxhbnk+fVxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgX2luc3RhbmNlOiBFbnZpcm9ubWVudDxhbnk+O1xuXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBSZXRyaWV2ZXMgYSB2YWx1ZSBmcm9tIHRoZSBlbnZpcm9ubWVudFxuICAgKiBAc3VtbWFyeSBHZXRzIGEgdmFsdWUgZnJvbSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzLCBoYW5kbGluZyBicm93c2VyIGFuZCBOb2RlLmpzIGVudmlyb25tZW50cyBkaWZmZXJlbnRseVxuICAgKiBAcGFyYW0ge3N0cmluZ30gayAtIFRoZSBrZXkgdG8gcmV0cmlldmUgZnJvbSB0aGUgZW52aXJvbm1lbnRcbiAgICogQHJldHVybiB7dW5rbm93bn0gVGhlIHZhbHVlIGZyb20gdGhlIGVudmlyb25tZW50LCBvciB1bmRlZmluZWQgaWYgbm90IGZvdW5kXG4gICAqL1xuICBwcm90ZWN0ZWQgZnJvbUVudihrOiBzdHJpbmcpIHtcbiAgICBsZXQgZW52OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBpZiAoaXNCcm93c2VyKCkpIHtcbiAgICAgIGVudiA9IChnbG9iYWxUaGlzIGFzIHR5cGVvZiBnbG9iYWxUaGlzICYgeyBFTlY6IFJlY29yZDxzdHJpbmcsIGFueT4gfSlbXG4gICAgICAgIFwiRU5WXCJcbiAgICAgIF07XG4gICAgfSBlbHNlIHtcbiAgICAgIGVudiA9IGdsb2JhbFRoaXMucHJvY2Vzcy5lbnY7XG4gICAgICBrID0gdG9FTlZGb3JtYXQoayk7XG4gICAgfVxuICAgIHJldHVybiBlbnZba107XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIEV4cGFuZHMgYW4gb2JqZWN0IGludG8gdGhlIGVudmlyb25tZW50XG4gICAqIEBzdW1tYXJ5IERlZmluZXMgcHJvcGVydGllcyBvbiB0aGUgZW52aXJvbm1lbnQgb2JqZWN0IHRoYXQgY2FuIGJlIGFjY2Vzc2VkIGFzIGdldHRlcnMgYW5kIHNldHRlcnNcbiAgICogQHRlbXBsYXRlIFYgLSBUeXBlIG9mIHRoZSBvYmplY3QgYmVpbmcgZXhwYW5kZWRcbiAgICogQHBhcmFtIHtWfSB2YWx1ZSAtIFRoZSBvYmplY3QgdG8gZXhwYW5kIGludG8gdGhlIGVudmlyb25tZW50XG4gICAqIEByZXR1cm4ge3ZvaWR9XG4gICAqL1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgZXhwYW5kPFYgZXh0ZW5kcyBvYmplY3Q+KHZhbHVlOiBWKTogdm9pZCB7XG4gICAgT2JqZWN0LmVudHJpZXModmFsdWUpLmZvckVhY2goKFtrLCB2XSkgPT4ge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIGssIHtcbiAgICAgICAgZ2V0OiAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgZnJvbUVudiA9IHRoaXMuZnJvbUVudihrKTtcbiAgICAgICAgICByZXR1cm4gdHlwZW9mIGZyb21FbnYgPT09IFwidW5kZWZpbmVkXCIgPyB2IDogZnJvbUVudjtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiAodmFsOiBWW2tleW9mIFZdKSA9PiB7XG4gICAgICAgICAgdiA9IHZhbDtcbiAgICAgICAgfSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQHByb3RlY3RlZFxuICAgKiBAc3RhdGljXG4gICAqIEBkZXNjcmlwdGlvbiBSZXRyaWV2ZXMgb3IgY3JlYXRlcyB0aGUgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoZSBFbnZpcm9ubWVudCBjbGFzcy5cbiAgICogQHN1bW1hcnkgRW5zdXJlcyBvbmx5IG9uZSBpbnN0YW5jZSBvZiB0aGUgRW52aXJvbm1lbnQgY2xhc3MgZXhpc3RzLlxuICAgKiBAdGVtcGxhdGUgRVxuICAgKiBAcGFyYW0gey4uLnVua25vd25bXX0gYXJncyAtIEFyZ3VtZW50cyB0byBwYXNzIHRvIHRoZSBmYWN0b3J5IGZ1bmN0aW9uIGlmIGEgbmV3IGluc3RhbmNlIGlzIGNyZWF0ZWQuXG4gICAqIEByZXR1cm4ge0V9IFRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIEVudmlyb25tZW50IGNsYXNzLlxuICAgKi9cbiAgcHJvdGVjdGVkIHN0YXRpYyBpbnN0YW5jZTxFIGV4dGVuZHMgRW52aXJvbm1lbnQ8YW55Pj4oLi4uYXJnczogdW5rbm93bltdKTogRSB7XG4gICAgRW52aXJvbm1lbnQuX2luc3RhbmNlID0gIUVudmlyb25tZW50Ll9pbnN0YW5jZVxuICAgICAgPyBFbnZpcm9ubWVudC5mYWN0b3J5KC4uLmFyZ3MpXG4gICAgICA6IEVudmlyb25tZW50Ll9pbnN0YW5jZTtcbiAgICByZXR1cm4gRW52aXJvbm1lbnQuX2luc3RhbmNlIGFzIEU7XG4gIH1cblxuICAvKipcbiAgICogQHN0YXRpY1xuICAgKiBAZGVzY3JpcHRpb24gQWNjdW11bGF0ZXMgdGhlIGdpdmVuIHZhbHVlIGludG8gdGhlIGVudmlyb25tZW50LlxuICAgKiBAc3VtbWFyeSBBZGRzIG5ldyBwcm9wZXJ0aWVzIHRvIHRoZSBlbnZpcm9ubWVudCBmcm9tIHRoZSBwcm92aWRlZCBvYmplY3QuXG4gICAqIEB0ZW1wbGF0ZSBWXG4gICAqIEBwYXJhbSB7Vn0gdmFsdWUgLSBUaGUgb2JqZWN0IHRvIGFjY3VtdWxhdGUgaW50byB0aGUgZW52aXJvbm1lbnQuXG4gICAqIEByZXR1cm4ge1Z9IFRoZSB1cGRhdGVkIGVudmlyb25tZW50IGluc3RhbmNlLlxuICAgKi9cbiAgc3RhdGljIGFjY3VtdWxhdGU8ViBleHRlbmRzIG9iamVjdD4oXG4gICAgdmFsdWU6IFZcbiAgKTogdHlwZW9mIEVudmlyb25tZW50Ll9pbnN0YW5jZSAmXG4gICAgViAmXG4gICAgT2JqZWN0QWNjdW11bGF0b3I8dHlwZW9mIEVudmlyb25tZW50Ll9pbnN0YW5jZSAmIFY+IHtcbiAgICBjb25zdCBpbnN0YW5jZSA9IEVudmlyb25tZW50Lmluc3RhbmNlKCk7XG4gICAgcmV0dXJuIGluc3RhbmNlLmFjY3VtdWxhdGUodmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBzdGF0aWNcbiAgICogQGRlc2NyaXB0aW9uIFJldHJpZXZlcyB0aGUga2V5cyBvZiB0aGUgZW52aXJvbm1lbnQsIG9wdGlvbmFsbHkgY29udmVydGluZyB0aGVtIHRvIEVOViBmb3JtYXQuXG4gICAqIEBzdW1tYXJ5IEdldHMgYWxsIGtleXMgaW4gdGhlIGVudmlyb25tZW50LCB3aXRoIGFuIG9wdGlvbiB0byBmb3JtYXQgdGhlbSBmb3IgZW52aXJvbm1lbnQgdmFyaWFibGVzLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFt0b0Vudj10cnVlXSAtIFdoZXRoZXIgdG8gY29udmVydCB0aGUga2V5cyB0byBFTlYgZm9ybWF0LlxuICAgKiBAcmV0dXJuIHtzdHJpbmdbXX0gQW4gYXJyYXkgb2Yga2V5cyBmcm9tIHRoZSBlbnZpcm9ubWVudC5cbiAgICovXG4gIHN0YXRpYyBrZXlzKHRvRW52OiBib29sZWFuID0gdHJ1ZSk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gRW52aXJvbm1lbnQuaW5zdGFuY2UoKVxuICAgICAgLmtleXMoKVxuICAgICAgLm1hcCgoaykgPT4gKHRvRW52ID8gdG9FTlZGb3JtYXQoaykgOiBrKSk7XG4gIH1cbn1cbiIsImltcG9ydCB7IFBhcnNlQXJnc1Jlc3VsdCB9IGZyb20gXCIuLi9pbnB1dC90eXBlc1wiO1xuaW1wb3J0IHsgQ29tbWFuZE9wdGlvbnMgfSBmcm9tIFwiLi90eXBlc1wiO1xuaW1wb3J0IHsgVXNlcklucHV0IH0gZnJvbSBcIi4uL2lucHV0L2lucHV0XCI7XG5pbXBvcnQgeyBEZWZhdWx0Q29tbWFuZE9wdGlvbnMsIERlZmF1bHRDb21tYW5kVmFsdWVzIH0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBnZXREZXBlbmRlbmNpZXMsIGdldFBhY2thZ2VWZXJzaW9uIH0gZnJvbSBcIi4uL3V0aWxzL2ZzXCI7XG5pbXBvcnQgeyBwcmludEJhbm5lciB9IGZyb20gXCIuLi9vdXRwdXQvY29tbW9uXCI7XG5pbXBvcnQgeyBFbnZpcm9ubWVudCB9IGZyb20gXCIuLi91dGlscy9lbnZpcm9ubWVudFwiO1xuaW1wb3J0IHtcbiAgRGVmYXVsdExvZ2dpbmdDb25maWcsXG4gIExvZ2dlcixcbiAgTG9nZ2luZyxcbiAgTG9nZ2luZ0NvbmZpZyxcbiAgTG9nTGV2ZWwsXG59IGZyb20gXCJAZGVjYWYtdHMvbG9nZ2luZ1wiO1xuXG4vKipcbiAqIEBjbGFzcyBDb21tYW5kXG4gKiBAYWJzdHJhY3RcbiAqIEB0ZW1wbGF0ZSBJIC0gVGhlIHR5cGUgb2YgaW5wdXQgb3B0aW9ucyBmb3IgdGhlIGNvbW1hbmQuXG4gKiBAdGVtcGxhdGUgUiAtIFRoZSByZXR1cm4gdHlwZSBvZiB0aGUgY29tbWFuZCBleGVjdXRpb24uXG4gKiBAbWVtYmVyT2YgbW9kdWxlOnV0aWxzXG4gKiBAZGVzY3JpcHRpb24gQWJzdHJhY3QgYmFzZSBjbGFzcyBmb3IgY29tbWFuZCBpbXBsZW1lbnRhdGlvbi5cbiAqIEBzdW1tYXJ5IFByb3ZpZGVzIGEgc3RydWN0dXJlIGZvciBjcmVhdGluZyBjb21tYW5kLWxpbmUgaW50ZXJmYWNlIGNvbW1hbmRzIHdpdGggaW5wdXQgaGFuZGxpbmcsIGxvZ2dpbmcsIGFuZCBleGVjdXRpb24gZmxvdy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBjb21tYW5kLlxuICogQHBhcmFtIHtDb21tYW5kT3B0aW9uczxJPn0gW2lucHV0c10gLSBUaGUgaW5wdXQgb3B0aW9ucyBmb3IgdGhlIGNvbW1hbmQuXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBbcmVxdWlyZW1lbnRzXSAtIFRoZSBsaXN0IG9mIHJlcXVpcmVkIGRlcGVuZGVuY2llcyBmb3IgdGhlIGNvbW1hbmQuXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBDb21tYW5kPEksIFI+IHtcbiAgLyoqXG4gICAqIEBzdGF0aWNcbiAgICogQGRlc2NyaXB0aW9uIFN0YXRpYyBsb2dnZXIgZm9yIHRoZSBDb21tYW5kIGNsYXNzLlxuICAgKiBAdHlwZSB7TG9nZ2VyfVxuICAgKi9cbiAgc3RhdGljIGxvZzogTG9nZ2VyO1xuXG4gIC8qKlxuICAgKiBAcHJvdGVjdGVkXG4gICAqIEBkZXNjcmlwdGlvbiBJbnN0YW5jZSBsb2dnZXIgZm9yIHRoZSBjb21tYW5kLlxuICAgKiBAdHlwZSB7TG9nZ2VyfVxuICAgKi9cbiAgcHJvdGVjdGVkIGxvZzogTG9nZ2VyO1xuXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgbmFtZTogc3RyaW5nLFxuICAgIHByb3RlY3RlZCBpbnB1dHM6IENvbW1hbmRPcHRpb25zPEk+ID0ge30gYXMgdW5rbm93biBhcyBDb21tYW5kT3B0aW9uczxJPixcbiAgICBwcm90ZWN0ZWQgcmVxdWlyZW1lbnRzOiBzdHJpbmdbXSA9IFtdXG4gICkge1xuICAgIGlmICghQ29tbWFuZC5sb2cpIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb21tYW5kLCBcImxvZ1wiLCB7XG4gICAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgdmFsdWU6IExvZ2dpbmcuZm9yKENvbW1hbmQubmFtZSksXG4gICAgICB9KTtcbiAgICAgIHRoaXMubG9nID0gQ29tbWFuZC5sb2c7XG4gICAgfVxuICAgIHRoaXMubG9nID0gQ29tbWFuZC5sb2cuZm9yKHRoaXMubmFtZSk7XG4gICAgdGhpcy5pbnB1dHMgPSBPYmplY3QuYXNzaWduKFxuICAgICAge30sXG4gICAgICBEZWZhdWx0Q29tbWFuZE9wdGlvbnMsXG4gICAgICBpbnB1dHNcbiAgICApIGFzIENvbW1hbmRPcHRpb25zPEk+O1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcm90ZWN0ZWRcbiAgICogQGFzeW5jXG4gICAqIEBkZXNjcmlwdGlvbiBDaGVja3MgaWYgYWxsIHJlcXVpcmVkIGRlcGVuZGVuY2llcyBhcmUgcHJlc2VudC5cbiAgICogQHN1bW1hcnkgUmV0cmlldmVzIHRoZSBsaXN0IG9mIGRlcGVuZGVuY2llcyBhbmQgY29tcGFyZXMgaXQgYWdhaW5zdCB0aGUgcmVxdWlyZWQgZGVwZW5kZW5jaWVzIGZvciB0aGUgY29tbWFuZC5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGNoZWNrIGlzIGNvbXBsZXRlLlxuICAgKlxuICAgKiBAbWVybWFpZFxuICAgKiBzZXF1ZW5jZURpYWdyYW1cbiAgICogICBwYXJ0aWNpcGFudCBDb21tYW5kXG4gICAqICAgcGFydGljaXBhbnQgZ2V0RGVwZW5kZW5jaWVzXG4gICAqICAgcGFydGljaXBhbnQgU2V0XG4gICAqICAgQ29tbWFuZC0+PmdldERlcGVuZGVuY2llczogQ2FsbFxuICAgKiAgIGdldERlcGVuZGVuY2llcy0tPj5Db21tYW5kOiBSZXR1cm4ge3Byb2QsIGRldiwgcGVlcn1cbiAgICogICBDb21tYW5kLT4+U2V0OiBDcmVhdGUgU2V0IGZyb20gcHJvZCwgZGV2LCBwZWVyXG4gICAqICAgU2V0LS0+PkNvbW1hbmQ6IFJldHVybiB1bmlxdWUgZGVwZW5kZW5jaWVzXG4gICAqICAgQ29tbWFuZC0+PkNvbW1hbmQ6IENvbXBhcmUgYWdhaW5zdCByZXF1aXJlbWVudHNcbiAgICogICBhbHQgTWlzc2luZyBkZXBlbmRlbmNpZXNcbiAgICogICAgIENvbW1hbmQtPj5Db21tYW5kOiBBZGQgdG8gbWlzc2luZyBsaXN0XG4gICAqICAgZW5kXG4gICAqICAgTm90ZSBvdmVyIENvbW1hbmQ6IElmIG1pc3NpbmcubGVuZ3RoID4gMCwgaGFuZGxlIG1pc3NpbmcgZGVwZW5kZW5jaWVzXG4gICAqL1xuICBwcm90ZWN0ZWQgYXN5bmMgY2hlY2tSZXF1aXJlbWVudHMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyBwcm9kLCBkZXYsIHBlZXIgfSA9IGF3YWl0IGdldERlcGVuZGVuY2llcygpO1xuICAgIGNvbnN0IG1pc3NpbmcgPSBbXTtcbiAgICBjb25zdCBmdWxsTGlzdCA9IEFycmF5LmZyb20oXG4gICAgICBuZXcgU2V0KFsuLi5wcm9kLCAuLi5kZXYsIC4uLnBlZXJdKS52YWx1ZXMoKVxuICAgICkubWFwKChkKSA9PiBkLm5hbWUpO1xuICAgIGZvciAoY29uc3QgZGVwIG9mIHRoaXMucmVxdWlyZW1lbnRzKVxuICAgICAgaWYgKCFmdWxsTGlzdC5pbmNsdWRlcyhkZXApKSBtaXNzaW5nLnB1c2goZGVwKTtcblxuICAgIGlmICghbWlzc2luZy5sZW5ndGgpIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJvdGVjdGVkXG4gICAqIEBkZXNjcmlwdGlvbiBQcm92aWRlcyBoZWxwIGluZm9ybWF0aW9uIGZvciB0aGUgY29tbWFuZC5cbiAgICogQHN1bW1hcnkgVGhpcyBtZXRob2Qgc2hvdWxkIGJlIG92ZXJyaWRkZW4gaW4gZGVyaXZlZCBjbGFzc2VzIHRvIHByb3ZpZGUgc3BlY2lmaWMgaGVscCBpbmZvcm1hdGlvbi5cbiAgICogQHBhcmFtIHtQYXJzZUFyZ3NSZXN1bHR9IGFyZ3MgLSBUaGUgcGFyc2VkIGNvbW1hbmQtbGluZSBhcmd1bWVudHMuXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICBwcm90ZWN0ZWQgaGVscChhcmdzOiBQYXJzZUFyZ3NSZXN1bHQpOiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5sb2cuaW5mbyhcbiAgICAgIGBUaGlzIGlzIGhlbHAuIEknbSBubyB1c2UgYmVjYXVzZSBJIHNob3VsZCBoYXZlIGJlZW4gb3ZlcnJpZGRlbi5gXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJvdGVjdGVkXG4gICAqIEBhYnN0cmFjdFxuICAgKiBAZGVzY3JpcHRpb24gUnVucyB0aGUgY29tbWFuZCB3aXRoIHRoZSBwcm92aWRlZCBhcmd1bWVudHMuXG4gICAqIEBzdW1tYXJ5IFRoaXMgbWV0aG9kIHNob3VsZCBiZSBpbXBsZW1lbnRlZCBpbiBkZXJpdmVkIGNsYXNzZXMgdG8gZGVmaW5lIHRoZSBjb21tYW5kJ3MgYmVoYXZpb3IuXG4gICAqIEBwYXJhbSB7UGFyc2VBcmdzUmVzdWx0fSBhbnN3ZXJzIC0gVGhlIHBhcnNlZCBjb21tYW5kLWxpbmUgYXJndW1lbnRzLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxSIHwgc3RyaW5nIHwgdm9pZD59IEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGNvbW1hbmQncyByZXN1bHQuXG4gICAqL1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgcnVuPFI+KFxuICAgIGFuc3dlcnM6IExvZ2dpbmdDb25maWcgJlxuICAgICAgdHlwZW9mIERlZmF1bHRDb21tYW5kVmFsdWVzICYgeyBbayBpbiBrZXlvZiBJXTogdW5rbm93biB9XG4gICk6IFByb21pc2U8UiB8IHN0cmluZyB8IHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBAYXN5bmNcbiAgICogQGRlc2NyaXB0aW9uIEV4ZWN1dGVzIHRoZSBjb21tYW5kLlxuICAgKiBAc3VtbWFyeSBUaGlzIG1ldGhvZCBoYW5kbGVzIHRoZSBvdmVyYWxsIGV4ZWN1dGlvbiBmbG93IG9mIHRoZSBjb21tYW5kLCBpbmNsdWRpbmcgcGFyc2luZyBhcmd1bWVudHMsXG4gICAqIHNldHRpbmcgdXAgbG9nZ2luZywgY2hlY2tpbmcgZm9yIHZlcnNpb24gb3IgaGVscCByZXF1ZXN0cywgYW5kIHJ1bm5pbmcgdGhlIGNvbW1hbmQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPFIgfCBzdHJpbmcgfCB2b2lkPn0gQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgY29tbWFuZCdzIHJlc3VsdC5cbiAgICpcbiAgICogQG1lcm1haWRcbiAgICogc2VxdWVuY2VEaWFncmFtXG4gICAqICAgcGFydGljaXBhbnQgQ29tbWFuZFxuICAgKiAgIHBhcnRpY2lwYW50IFVzZXJJbnB1dFxuICAgKiAgIHBhcnRpY2lwYW50IExvZ2dpbmdcbiAgICogICBwYXJ0aWNpcGFudCBnZXRQYWNrYWdlVmVyc2lvblxuICAgKiAgIHBhcnRpY2lwYW50IHByaW50QmFubmVyXG4gICAqICAgQ29tbWFuZC0+PlVzZXJJbnB1dDogcGFyc2VBcmdzKGlucHV0cylcbiAgICogICBVc2VySW5wdXQtLT4+Q29tbWFuZDogUmV0dXJuIFBhcnNlQXJnc1Jlc3VsdFxuICAgKiAgIENvbW1hbmQtPj5Db21tYW5kOiBQcm9jZXNzIG9wdGlvbnNcbiAgICogICBDb21tYW5kLT4+TG9nZ2luZzogc2V0Q29uZmlnKG9wdGlvbnMpXG4gICAqICAgYWx0IHZlcnNpb24gcmVxdWVzdGVkXG4gICAqICAgICBDb21tYW5kLT4+Z2V0UGFja2FnZVZlcnNpb246IENhbGxcbiAgICogICAgIGdldFBhY2thZ2VWZXJzaW9uLS0+PkNvbW1hbmQ6IFJldHVybiB2ZXJzaW9uXG4gICAqICAgZWxzZSBoZWxwIHJlcXVlc3RlZFxuICAgKiAgICAgQ29tbWFuZC0+PkNvbW1hbmQ6IGhlbHAoYXJncylcbiAgICogICBlbHNlIGJhbm5lciByZXF1ZXN0ZWRcbiAgICogICAgIENvbW1hbmQtPj5wcmludEJhbm5lcjogQ2FsbFxuICAgKiAgIGVuZFxuICAgKiAgIENvbW1hbmQtPj5Db21tYW5kOiBydW4oYXJncylcbiAgICogICBhbHQgZXJyb3Igb2NjdXJzXG4gICAqICAgICBDb21tYW5kLT4+Q29tbWFuZDogTG9nIGVycm9yXG4gICAqICAgZW5kXG4gICAqICAgQ29tbWFuZC0tPj5Db21tYW5kOiBSZXR1cm4gcmVzdWx0XG4gICAqL1xuICBhc3luYyBleGVjdXRlKCk6IFByb21pc2U8UiB8IHN0cmluZyB8IHZvaWQ+IHtcbiAgICBjb25zdCBhcmdzOiBQYXJzZUFyZ3NSZXN1bHQgPSBVc2VySW5wdXQucGFyc2VBcmdzKHRoaXMuaW5wdXRzKTtcbiAgICBjb25zdCBlbnYgPSBFbnZpcm9ubWVudC5hY2N1bXVsYXRlKERlZmF1bHRMb2dnaW5nQ29uZmlnKVxuICAgICAgLmFjY3VtdWxhdGUoRGVmYXVsdENvbW1hbmRWYWx1ZXMpXG4gICAgICAuYWNjdW11bGF0ZShhcmdzLnZhbHVlcyk7XG4gICAgY29uc3QgeyB0aW1lc3RhbXAsIHZlcmJvc2UsIHZlcnNpb24sIGhlbHAsIGxvZ0xldmVsLCBsb2dTdHlsZSwgYmFubmVyIH0gPVxuICAgICAgZW52O1xuXG4gICAgdGhpcy5sb2cuc2V0Q29uZmlnKHtcbiAgICAgIC4uLmVudixcbiAgICAgIHRpbWVzdGFtcDogISF0aW1lc3RhbXAsXG4gICAgICBsZXZlbDogbG9nTGV2ZWwgYXMgTG9nTGV2ZWwsXG4gICAgICBzdHlsZTogISFsb2dTdHlsZSxcbiAgICAgIHZlcmJvc2U6ICh2ZXJib3NlIGFzIG51bWJlcikgfHwgMCxcbiAgICB9KTtcblxuICAgIGlmICh2ZXJzaW9uKSB7XG4gICAgICByZXR1cm4gZ2V0UGFja2FnZVZlcnNpb24oKTtcbiAgICB9XG5cbiAgICBpZiAoaGVscCkge1xuICAgICAgcmV0dXJuIHRoaXMuaGVscChhcmdzKTtcbiAgICB9XG5cbiAgICBpZiAoYmFubmVyKVxuICAgICAgcHJpbnRCYW5uZXIoXG4gICAgICAgIHRoaXMubG9nLmZvcihwcmludEJhbm5lciwge1xuICAgICAgICAgIHRpbWVzdGFtcDogZmFsc2UsXG4gICAgICAgICAgc3R5bGU6IGZhbHNlLFxuICAgICAgICAgIGNvbnRleHQ6IGZhbHNlLFxuICAgICAgICAgIGxvZ0xldmVsOiBmYWxzZSxcbiAgICAgICAgfSlcbiAgICAgICk7XG5cbiAgICBsZXQgcmVzdWx0O1xuICAgIHRyeSB7XG4gICAgICByZXN1bHQgPSBhd2FpdCB0aGlzLnJ1bihlbnYpO1xuICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgIHRoaXMubG9nLmVycm9yKGBFcnJvciB3aGlsZSBydW5uaW5nIHByb3ZpZGVkIGNsaSBmdW5jdGlvbjogJHtlfWApO1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0IGFzIFI7XG4gIH1cbn1cbiIsImltcG9ydCBodHRwcyBmcm9tIFwiaHR0cHNcIjtcbmltcG9ydCB7IExvZ2dpbmcgfSBmcm9tIFwiQGRlY2FmLXRzL2xvZ2dpbmdcIjtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQSBzaW1wbGUgSFRUUCBjbGllbnQgZm9yIGRvd25sb2FkaW5nIGZpbGVzLlxuICogQHN1bW1hcnkgVGhpcyBjbGFzcyBwcm92aWRlcyBmdW5jdGlvbmFsaXR5IHRvIGRvd25sb2FkIGZpbGVzIGZyb20gSFRUUFMgVVJMcy5cbiAqIEl0IHVzZXMgTm9kZS5qcyBidWlsdC1pbiBodHRwcyBtb2R1bGUgdG8gbWFrZSByZXF1ZXN0cy5cbiAqXG4gKiBAY2xhc3MgSHR0cENsaWVudFxuICovXG5leHBvcnQgY2xhc3MgSHR0cENsaWVudCB7XG4gIHByb3RlY3RlZCBzdGF0aWMgbG9nID0gTG9nZ2luZy5mb3IoSHR0cENsaWVudCk7XG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gRG93bmxvYWRzIGEgZmlsZSBmcm9tIGEgZ2l2ZW4gVVJMLlxuICAgKiBAc3VtbWFyeSBUaGlzIG1ldGhvZCBzZW5kcyBhIEdFVCByZXF1ZXN0IHRvIHRoZSBzcGVjaWZpZWQgVVJMIGFuZCByZXR1cm5zIHRoZSByZXNwb25zZSBib2R5IGFzIGEgc3RyaW5nLlxuICAgKiBJdCBoYW5kbGVzIGRpZmZlcmVudCBzY2VuYXJpb3Mgc3VjaCBhcyBub24tMjAwIHN0YXR1cyBjb2RlcyBhbmQgbmV0d29yayBlcnJvcnMuXG4gICAqXG4gICAqIEBwYXJhbSB1cmwgLSBUaGUgVVJMIG9mIHRoZSBmaWxlIHRvIGRvd25sb2FkLlxuICAgKiBAcmV0dXJuIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGZpbGUgY29udGVudCBhcyBhIHN0cmluZy5cbiAgICpcbiAgICogQG1lcm1haWRcbiAgICogc2VxdWVuY2VEaWFncmFtXG4gICAqICAgcGFydGljaXBhbnQgQ2xpZW50XG4gICAqICAgcGFydGljaXBhbnQgSHR0cENsaWVudFxuICAgKiAgIHBhcnRpY2lwYW50IEhUVFBTXG4gICAqICAgcGFydGljaXBhbnQgU2VydmVyXG4gICAqICAgQ2xpZW50LT4+SHR0cENsaWVudDogZG93bmxvYWRGaWxlKHVybClcbiAgICogICBIdHRwQ2xpZW50LT4+SFRUUFM6IGdldCh1cmwpXG4gICAqICAgSFRUUFMtPj5TZXJ2ZXI6IEdFVCByZXF1ZXN0XG4gICAqICAgU2VydmVyLS0+PkhUVFBTOiBSZXNwb25zZVxuICAgKiAgIEhUVFBTLS0+Pkh0dHBDbGllbnQ6IFJlc3BvbnNlIG9iamVjdFxuICAgKiAgIGFsdCBTdGF0dXMgY29kZSBpcyAyMDBcbiAgICogICAgIGxvb3AgRm9yIGVhY2ggZGF0YSBjaHVua1xuICAgKiAgICAgICBIVFRQUy0+Pkh0dHBDbGllbnQ6ICdkYXRhJyBldmVudFxuICAgKiAgICAgICBIdHRwQ2xpZW50LT4+SHR0cENsaWVudDogQWNjdW11bGF0ZSBkYXRhXG4gICAqICAgICBlbmRcbiAgICogICAgIEhUVFBTLT4+SHR0cENsaWVudDogJ2VuZCcgZXZlbnRcbiAgICogICAgIEh0dHBDbGllbnQtLT4+Q2xpZW50OiBSZXNvbHZlIHdpdGggZGF0YVxuICAgKiAgIGVsc2UgU3RhdHVzIGNvZGUgaXMgbm90IDIwMFxuICAgKiAgICAgSHR0cENsaWVudC0tPj5DbGllbnQ6IFJlamVjdCB3aXRoIGVycm9yXG4gICAqICAgZW5kXG4gICAqL1xuICBzdGF0aWMgYXN5bmMgZG93bmxvYWRGaWxlKHVybDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8c3RyaW5nPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBmdW5jdGlvbiByZXF1ZXN0KHVybDogc3RyaW5nKSB7XG4gICAgICAgIHVybCA9IGVuY29kZVVSSSh1cmwpO1xuICAgICAgICBodHRwcy5nZXQodXJsLCAocmVzKSA9PiB7XG4gICAgICAgICAgaWYgKHJlcy5zdGF0dXNDb2RlID09PSAzMDEgfHwgcmVzLnN0YXR1c0NvZGUgPT09IDMwNylcbiAgICAgICAgICAgIHJldHVybiByZXF1ZXN0KHJlcy5oZWFkZXJzLmxvY2F0aW9uIGFzIHN0cmluZyk7XG5cbiAgICAgICAgICBpZiAocmVzLnN0YXR1c0NvZGUgIT09IDIwMCkge1xuICAgICAgICAgICAgSHR0cENsaWVudC5sb2cuZXJyb3IoXG4gICAgICAgICAgICAgIGBGYWlsZWQgdG8gZmV0Y2ggJHt1cmx9IChzdGF0dXM6ICR7cmVzLnN0YXR1c0NvZGV9KWBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBFcnJvcihgRmFpbGVkIHRvIGZldGNoICR7dXJsfWApKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbGV0IGRhdGEgPSBcIlwiO1xuICAgICAgICAgIHJlcy5vbihcImRhdGFcIiwgKGNodW5rKSA9PiB7XG4gICAgICAgICAgICBkYXRhICs9IGNodW5rO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJlcy5vbihcImVycm9yXCIsIChlcnJvcikgPT4ge1xuICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHJlcy5vbihcImVuZFwiLCAoKSA9PiB7XG4gICAgICAgICAgICByZXNvbHZlKGRhdGEpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJlcXVlc3QodXJsKTtcbiAgICB9KTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gXCIuLi9jb21tYW5kXCI7XG5pbXBvcnQgeyBDb21tYW5kT3B0aW9ucyB9IGZyb20gXCIuLi90eXBlc1wiO1xuaW1wb3J0IHsgRGVmYXVsdENvbW1hbmRPcHRpb25zLCBEZWZhdWx0Q29tbWFuZFZhbHVlcyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7XG4gIGNvcHlGaWxlLFxuICBkZWxldGVQYXRoLFxuICBnZXRBbGxGaWxlcyxcbiAgZ2V0UGFja2FnZSxcbiAgcGF0Y2hGaWxlLFxuICByZWFkRmlsZSxcbiAgcmVuYW1lRmlsZSxcbiAgcnVuQ29tbWFuZCxcbiAgd3JpdGVGaWxlLFxufSBmcm9tIFwiLi4vLi4vdXRpbHNcIjtcbmltcG9ydCBmcyBmcm9tIFwiZnNcIjtcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBJbnB1dE9wdGlvbnMsIE91dHB1dE9wdGlvbnMsIHJvbGx1cCwgUm9sbHVwQnVpbGQgfSBmcm9tIFwicm9sbHVwXCI7XG5pbXBvcnQgdHlwZXNjcmlwdCBmcm9tIFwiQHJvbGx1cC9wbHVnaW4tdHlwZXNjcmlwdFwiO1xuaW1wb3J0IGNvbW1vbmpzIGZyb20gXCJAcm9sbHVwL3BsdWdpbi1jb21tb25qc1wiO1xuaW1wb3J0IHsgbm9kZVJlc29sdmUgfSBmcm9tIFwiQHJvbGx1cC9wbHVnaW4tbm9kZS1yZXNvbHZlXCI7XG5pbXBvcnQganNvbiBmcm9tIFwiQHJvbGx1cC9wbHVnaW4tanNvblwiO1xuaW1wb3J0IHsgTG9nZ2luZ0NvbmZpZyB9IGZyb20gXCJAZGVjYWYtdHMvbG9nZ2luZ1wiO1xuaW1wb3J0ICogYXMgdHMgZnJvbSBcInR5cGVzY3JpcHRcIjtcbmltcG9ydCB7IERpYWdub3N0aWMsIEVtaXRSZXN1bHQsIE1vZHVsZUtpbmQsIFNvdXJjZUZpbGUgfSBmcm9tIFwidHlwZXNjcmlwdFwiO1xuXG5jb25zdCBWRVJTSU9OX1NUUklORyA9IFwiIyNWRVJTSU9OIyNcIjtcblxuZW51bSBNb2RlcyB7XG4gIENKUyA9IFwiY29tbW9uanNcIixcbiAgRVNNID0gXCJlczIwMjJcIixcbn1cblxuY29uc3QgQ29tbWFuZHMgPSBbXCJ1cGRhdGUtc2NyaXB0c1wiLCBcInRhZy1yZWxlYXNlXCIsIFwiYnVpbGQtc2NyaXB0c1wiXTtcblxuY29uc3Qgb3B0aW9ucyA9IHtcbiAgcHJvZDoge1xuICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgIGRlZmF1bHQ6IGZhbHNlLFxuICB9LFxuICBkZXY6IHtcbiAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgICBkZWZhdWx0OiBmYWxzZSxcbiAgfSxcbiAgZG9jczoge1xuICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgIGRlZmF1bHQ6IGZhbHNlLFxuICB9LFxuICBjb21tYW5kczoge1xuICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgIGRlZmF1bHQ6IGZhbHNlLFxuICB9LFxuICBiYW5uZXI6IHtcbiAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgICBkZWZhdWx0OiBmYWxzZSxcbiAgfSxcbn07XG5cbmNvbnN0IGNqczJUcmFuc2Zvcm1lciA9IChleHQgPSBcIi5janNcIikgPT4ge1xuICBjb25zdCBsb2cgPSBCdWlsZFNjcmlwdHMubG9nLmZvcihjanMyVHJhbnNmb3JtZXIpO1xuICBjb25zdCByZXNvbHV0aW9uQ2FjaGUgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuXG4gIHJldHVybiAodHJhbnNmb3JtYXRpb25Db250ZXh0OiB0cy5UcmFuc2Zvcm1hdGlvbkNvbnRleHQpID0+IHtcbiAgICByZXR1cm4gKHNvdXJjZUZpbGU6IHRzLlNvdXJjZUZpbGUpID0+IHtcbiAgICAgIGNvbnN0IHNvdXJjZURpciA9IHBhdGguZGlybmFtZShzb3VyY2VGaWxlLmZpbGVOYW1lKTtcblxuICAgICAgZnVuY3Rpb24gcmVzb2x2ZVBhdGgoaW1wb3J0UGF0aDogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGNhY2hlS2V5ID0gSlNPTi5zdHJpbmdpZnkoW3NvdXJjZURpciwgaW1wb3J0UGF0aF0pO1xuICAgICAgICBjb25zdCBjYWNoZWRWYWx1ZSA9IHJlc29sdXRpb25DYWNoZS5nZXQoY2FjaGVLZXkpO1xuICAgICAgICBpZiAoY2FjaGVkVmFsdWUgIT0gbnVsbCkgcmV0dXJuIGNhY2hlZFZhbHVlO1xuXG4gICAgICAgIGxldCByZXNvbHZlZFBhdGggPSBpbXBvcnRQYXRoO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJlc29sdmVkUGF0aCA9IHBhdGgucmVzb2x2ZShzb3VyY2VEaXIsIHJlc29sdmVkUGF0aCArIFwiLnRzXCIpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIHJlc29sdmUgcGF0aCAke2ltcG9ydFBhdGh9OiAke2Vycm9yfWApO1xuICAgICAgICB9XG4gICAgICAgIGxldCBzdGF0O1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHN0YXQgPSBmcy5zdGF0U3luYyhyZXNvbHZlZFBhdGgpO1xuICAgICAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGxvZy52ZXJib3NlKFxuICAgICAgICAgICAgICBgVGVzdGluZyBleGlzdGVuY2Ugb2YgcGF0aCAke3Jlc29sdmVkUGF0aH0gYXMgYSBmb2xkZXIgZGVmYXVsdGluZyB0byBpbmRleCBmaWxlYFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHN0YXQgPSBmcy5zdGF0U3luYyhyZXNvbHZlZFBhdGgucmVwbGFjZSgvXFwudHMkL2dtLCBcIlwiKSk7XG4gICAgICAgICAgfSBjYXRjaCAoZTI6IHVua25vd24pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgYEZhaWxlZCB0byByZXNvbHZlIHBhdGggJHtpbXBvcnRQYXRofTogJHtlfSwgJHtlMn1gXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RhdC5pc0RpcmVjdG9yeSgpKVxuICAgICAgICAgIHJlc29sdmVkUGF0aCA9IHJlc29sdmVkUGF0aC5yZXBsYWNlKC9cXC50cyQvZ20sIFwiL2luZGV4LnRzXCIpO1xuXG4gICAgICAgIGlmIChwYXRoLmlzQWJzb2x1dGUocmVzb2x2ZWRQYXRoKSkge1xuICAgICAgICAgIGNvbnN0IGV4dGVuc2lvbiA9XG4gICAgICAgICAgICAoL1xcLnRzeD8kLy5leGVjKHBhdGguYmFzZW5hbWUocmVzb2x2ZWRQYXRoKSkgfHwgW10pWzBdIHx8IHZvaWQgMDtcblxuICAgICAgICAgIHJlc29sdmVkUGF0aCA9XG4gICAgICAgICAgICBcIi4vXCIgK1xuICAgICAgICAgICAgcGF0aC5yZWxhdGl2ZShcbiAgICAgICAgICAgICAgc291cmNlRGlyLFxuICAgICAgICAgICAgICBwYXRoLnJlc29sdmUoXG4gICAgICAgICAgICAgICAgcGF0aC5kaXJuYW1lKHJlc29sdmVkUGF0aCksXG4gICAgICAgICAgICAgICAgcGF0aC5iYXNlbmFtZShyZXNvbHZlZFBhdGgsIGV4dGVuc2lvbikgKyBleHRcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlc29sdXRpb25DYWNoZS5zZXQoY2FjaGVLZXksIHJlc29sdmVkUGF0aCk7XG4gICAgICAgIHJldHVybiByZXNvbHZlZFBhdGg7XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIHZpc2l0Tm9kZShub2RlOiB0cy5Ob2RlKTogdHMuVmlzaXRSZXN1bHQ8dHMuTm9kZT4ge1xuICAgICAgICBpZiAoc2hvdWxkTXV0YXRlTW9kdWxlU3BlY2lmaWVyKG5vZGUpKSB7XG4gICAgICAgICAgaWYgKHRzLmlzSW1wb3J0RGVjbGFyYXRpb24obm9kZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc29sdmVkUGF0aCA9IHJlc29sdmVQYXRoKG5vZGUubW9kdWxlU3BlY2lmaWVyLnRleHQpO1xuICAgICAgICAgICAgY29uc3QgbmV3TW9kdWxlU3BlY2lmaWVyID1cbiAgICAgICAgICAgICAgdHJhbnNmb3JtYXRpb25Db250ZXh0LmZhY3RvcnkuY3JlYXRlU3RyaW5nTGl0ZXJhbChyZXNvbHZlZFBhdGgpO1xuICAgICAgICAgICAgcmV0dXJuIHRyYW5zZm9ybWF0aW9uQ29udGV4dC5mYWN0b3J5LnVwZGF0ZUltcG9ydERlY2xhcmF0aW9uKFxuICAgICAgICAgICAgICBub2RlLFxuICAgICAgICAgICAgICBub2RlLm1vZGlmaWVycyxcbiAgICAgICAgICAgICAgbm9kZS5pbXBvcnRDbGF1c2UsXG4gICAgICAgICAgICAgIG5ld01vZHVsZVNwZWNpZmllcixcbiAgICAgICAgICAgICAgdW5kZWZpbmVkXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSBpZiAodHMuaXNFeHBvcnREZWNsYXJhdGlvbihub2RlKSkge1xuICAgICAgICAgICAgY29uc3QgcmVzb2x2ZWRQYXRoID0gcmVzb2x2ZVBhdGgobm9kZS5tb2R1bGVTcGVjaWZpZXIudGV4dCk7XG4gICAgICAgICAgICBjb25zdCBuZXdNb2R1bGVTcGVjaWZpZXIgPVxuICAgICAgICAgICAgICB0cmFuc2Zvcm1hdGlvbkNvbnRleHQuZmFjdG9yeS5jcmVhdGVTdHJpbmdMaXRlcmFsKHJlc29sdmVkUGF0aCk7XG4gICAgICAgICAgICByZXR1cm4gdHJhbnNmb3JtYXRpb25Db250ZXh0LmZhY3RvcnkudXBkYXRlRXhwb3J0RGVjbGFyYXRpb24oXG4gICAgICAgICAgICAgIG5vZGUsXG4gICAgICAgICAgICAgIG5vZGUubW9kaWZpZXJzLFxuICAgICAgICAgICAgICBub2RlLmlzVHlwZU9ubHksXG4gICAgICAgICAgICAgIG5vZGUuZXhwb3J0Q2xhdXNlLFxuICAgICAgICAgICAgICBuZXdNb2R1bGVTcGVjaWZpZXIsXG4gICAgICAgICAgICAgIHVuZGVmaW5lZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHMudmlzaXRFYWNoQ2hpbGQobm9kZSwgdmlzaXROb2RlLCB0cmFuc2Zvcm1hdGlvbkNvbnRleHQpO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBzaG91bGRNdXRhdGVNb2R1bGVTcGVjaWZpZXIobm9kZTogdHMuTm9kZSk6IG5vZGUgaXMgKFxuICAgICAgICB8IHRzLkltcG9ydERlY2xhcmF0aW9uXG4gICAgICAgIHwgdHMuRXhwb3J0RGVjbGFyYXRpb25cbiAgICAgICkgJiB7XG4gICAgICAgIG1vZHVsZVNwZWNpZmllcjogdHMuU3RyaW5nTGl0ZXJhbDtcbiAgICAgIH0ge1xuICAgICAgICBpZiAoIXRzLmlzSW1wb3J0RGVjbGFyYXRpb24obm9kZSkgJiYgIXRzLmlzRXhwb3J0RGVjbGFyYXRpb24obm9kZSkpXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIGlmIChub2RlLm1vZHVsZVNwZWNpZmllciA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIC8vIG9ubHkgd2hlbiBtb2R1bGUgc3BlY2lmaWVyIGlzIHZhbGlkXG4gICAgICAgIGlmICghdHMuaXNTdHJpbmdMaXRlcmFsKG5vZGUubW9kdWxlU3BlY2lmaWVyKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAvLyBvbmx5IHdoZW4gcGF0aCBpcyByZWxhdGl2ZVxuICAgICAgICBpZiAoXG4gICAgICAgICAgIW5vZGUubW9kdWxlU3BlY2lmaWVyLnRleHQuc3RhcnRzV2l0aChcIi4vXCIpICYmXG4gICAgICAgICAgIW5vZGUubW9kdWxlU3BlY2lmaWVyLnRleHQuc3RhcnRzV2l0aChcIi4uL1wiKVxuICAgICAgICApXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAvLyBvbmx5IHdoZW4gbW9kdWxlIHNwZWNpZmllciBoYXMgbm8gZXh0ZW5zaW9uXG4gICAgICAgIGlmIChwYXRoLmV4dG5hbWUobm9kZS5tb2R1bGVTcGVjaWZpZXIudGV4dCkgIT09IFwiXCIpIHJldHVybiBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0cy52aXNpdE5vZGUoc291cmNlRmlsZSwgdmlzaXROb2RlKSBhcyBTb3VyY2VGaWxlO1xuICAgIH07XG4gIH07XG59O1xuXG5leHBvcnQgY2xhc3MgQnVpbGRTY3JpcHRzIGV4dGVuZHMgQ29tbWFuZDxcbiAgQ29tbWFuZE9wdGlvbnM8dHlwZW9mIG9wdGlvbnM+LFxuICB2b2lkXG4+IHtcbiAgcHJpdmF0ZSByZXBsYWNlbWVudHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgcHJpdmF0ZSByZWFkb25seSBwa2dWZXJzaW9uOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgcGtnTmFtZTogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFxuICAgICAgXCJCdWlsZFNjcmlwdHNcIixcbiAgICAgIE9iamVjdC5hc3NpZ24oe30sIERlZmF1bHRDb21tYW5kT3B0aW9ucywgb3B0aW9ucykgYXMgQ29tbWFuZE9wdGlvbnM8XG4gICAgICAgIHR5cGVvZiBvcHRpb25zXG4gICAgICA+XG4gICAgKTtcbiAgICBjb25zdCBwa2cgPSBnZXRQYWNrYWdlKCkgYXMgeyBuYW1lOiBzdHJpbmc7IHZlcnNpb246IHN0cmluZyB9O1xuICAgIGNvbnN0IHsgbmFtZSwgdmVyc2lvbiB9ID0gcGtnO1xuICAgIHRoaXMucGtnTmFtZSA9IG5hbWUuaW5jbHVkZXMoXCJAXCIpID8gbmFtZS5zcGxpdChcIi9cIilbMV0gOiBuYW1lO1xuICAgIHRoaXMucGtnVmVyc2lvbiA9IHZlcnNpb247XG4gICAgdGhpcy5yZXBsYWNlbWVudHNbVkVSU0lPTl9TVFJJTkddID0gdGhpcy5wa2dWZXJzaW9uO1xuICB9XG5cbiAgcGF0Y2hGaWxlcyhwOiBzdHJpbmcpIHtcbiAgICBjb25zdCBsb2cgPSB0aGlzLmxvZy5mb3IodGhpcy5wYXRjaEZpbGVzKTtcbiAgICBjb25zdCB7IG5hbWUsIHZlcnNpb24gfSA9IGdldFBhY2thZ2UoKSBhcyBhbnk7XG4gICAgbG9nLmluZm8oYFBhdGNoaW5nICR7bmFtZX0gJHt2ZXJzaW9ufSBtb2R1bGUgaW4gJHtwfS4uLmApO1xuICAgIGNvbnN0IHN0YXQgPSBmcy5zdGF0U3luYyhwKTtcbiAgICBpZiAoc3RhdC5pc0RpcmVjdG9yeSgpKVxuICAgICAgZnMucmVhZGRpclN5bmMocCwgeyB3aXRoRmlsZVR5cGVzOiB0cnVlLCByZWN1cnNpdmU6IHRydWUgfSlcbiAgICAgICAgLmZpbHRlcigocCkgPT4gcC5pc0ZpbGUoKSlcbiAgICAgICAgLmZvckVhY2goKGZpbGUpID0+XG4gICAgICAgICAgcGF0Y2hGaWxlKHBhdGguam9pbihmaWxlLnBhcmVudFBhdGgsIGZpbGUubmFtZSksIHRoaXMucmVwbGFjZW1lbnRzKVxuICAgICAgICApO1xuICAgIGxvZy52ZXJib3NlKGBNb2R1bGUgJHtuYW1lfSAke3ZlcnNpb259IHBhdGNoZWQgaW4gJHtwfS4uLmApO1xuICB9XG5cbiAgcHJpdmF0ZSByZXBvcnREaWFnbm9zdGljcyhkaWFnbm9zdGljczogRGlhZ25vc3RpY1tdKTogdm9pZCB7XG4gICAgZGlhZ25vc3RpY3MuZm9yRWFjaCgoZGlhZ25vc3RpYykgPT4ge1xuICAgICAgbGV0IG1lc3NhZ2UgPSBcIkVycm9yXCI7XG4gICAgICBpZiAoZGlhZ25vc3RpYy5maWxlICYmIGRpYWdub3N0aWMuc3RhcnQpIHtcbiAgICAgICAgY29uc3QgeyBsaW5lLCBjaGFyYWN0ZXIgfSA9XG4gICAgICAgICAgZGlhZ25vc3RpYy5maWxlLmdldExpbmVBbmRDaGFyYWN0ZXJPZlBvc2l0aW9uKGRpYWdub3N0aWMuc3RhcnQpO1xuICAgICAgICBtZXNzYWdlICs9IGAgJHtkaWFnbm9zdGljLmZpbGUuZmlsZU5hbWV9ICgke2xpbmUgKyAxfSwke2NoYXJhY3RlciArIDF9KWA7XG4gICAgICB9XG4gICAgICBtZXNzYWdlICs9XG4gICAgICAgIFwiOiBcIiArIHRzLmZsYXR0ZW5EaWFnbm9zdGljTWVzc2FnZVRleHQoZGlhZ25vc3RpYy5tZXNzYWdlVGV4dCwgXCJcXG5cIik7XG4gICAgICBjb25zb2xlLmxvZyhtZXNzYWdlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVhZENvbmZpZ0ZpbGUoY29uZmlnRmlsZU5hbWU6IHN0cmluZykge1xuICAgIC8vIFJlYWQgY29uZmlnIGZpbGVcbiAgICBjb25zdCBjb25maWdGaWxlVGV4dCA9IGZzLnJlYWRGaWxlU3luYyhjb25maWdGaWxlTmFtZSkudG9TdHJpbmcoKTtcblxuICAgIC8vIFBhcnNlIEpTT04sIGFmdGVyIHJlbW92aW5nIGNvbW1lbnRzLiBKdXN0IGZhbmNpZXIgSlNPTi5wYXJzZVxuICAgIGNvbnN0IHJlc3VsdCA9IHRzLnBhcnNlQ29uZmlnRmlsZVRleHRUb0pzb24oY29uZmlnRmlsZU5hbWUsIGNvbmZpZ0ZpbGVUZXh0KTtcbiAgICBjb25zdCBjb25maWdPYmplY3QgPSByZXN1bHQuY29uZmlnO1xuICAgIGlmICghY29uZmlnT2JqZWN0KSB7XG4gICAgICB0aGlzLnJlcG9ydERpYWdub3N0aWNzKFtyZXN1bHQuZXJyb3IhXSk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gcGFyc2UgdHNjb25maWcuanNvblwiKTtcbiAgICB9XG5cbiAgICAvLyBFeHRyYWN0IGNvbmZpZyBpbmZyb21hdGlvblxuICAgIGNvbnN0IGNvbmZpZ1BhcnNlUmVzdWx0ID0gdHMucGFyc2VKc29uQ29uZmlnRmlsZUNvbnRlbnQoXG4gICAgICBjb25maWdPYmplY3QsXG4gICAgICB0cy5zeXMsXG4gICAgICBwYXRoLmRpcm5hbWUoY29uZmlnRmlsZU5hbWUpXG4gICAgKTtcbiAgICBpZiAoY29uZmlnUGFyc2VSZXN1bHQuZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMucmVwb3J0RGlhZ25vc3RpY3MoY29uZmlnUGFyc2VSZXN1bHQuZXJyb3JzKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkZhaWxlZCB0byBwYXJzZSB0c2NvbmZpZy5qc29uXCIpO1xuICAgIH1cbiAgICByZXR1cm4gY29uZmlnUGFyc2VSZXN1bHQ7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGJ1aWxkVHMoaXNEZXY6IGJvb2xlYW4sIG1vZGU6IE1vZGVzLCBidW5kbGUgPSBmYWxzZSkge1xuICAgIGNvbnN0IGxvZyA9IHRoaXMubG9nLmZvcih0aGlzLmJ1aWxkVHMpO1xuICAgIGxvZy5pbmZvKFxuICAgICAgYEJ1aWxkaW5nICR7dGhpcy5wa2dOYW1lfSAke3RoaXMucGtnVmVyc2lvbn0gbW9kdWxlICgke21vZGV9KSBpbiAke2lzRGV2ID8gXCJkZXZcIiA6IFwicHJvZFwifSBtb2RlLi4uYFxuICAgICk7XG4gICAgbGV0IHRzQ29uZmlnO1xuICAgIHRyeSB7XG4gICAgICB0c0NvbmZpZyA9IHRoaXMucmVhZENvbmZpZ0ZpbGUoXCIuL3RzY29uZmlnLmpzb25cIik7XG4gICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gcGFyc2UgdHNjb25maWcuanNvbjogJHtlfWApO1xuICAgIH1cblxuICAgIGlmIChidW5kbGUpIHtcbiAgICAgIHRzQ29uZmlnLm9wdGlvbnMubW9kdWxlID0gTW9kdWxlS2luZC5BTUQ7XG4gICAgICB0c0NvbmZpZy5vcHRpb25zLm91dERpciA9IFwiZGlzdFwiO1xuICAgICAgdHNDb25maWcub3B0aW9ucy5pc29sYXRlZE1vZHVsZXMgPSBmYWxzZTtcbiAgICAgIHRzQ29uZmlnLm9wdGlvbnMub3V0RmlsZSA9IHRoaXMucGtnTmFtZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdHNDb25maWcub3B0aW9ucy5vdXREaXIgPSBgbGliJHttb2RlID09PSBNb2Rlcy5FU00gPyBcIi9lc21cIiA6IFwiXCJ9YDtcbiAgICAgIHRzQ29uZmlnLm9wdGlvbnMubW9kdWxlID1cbiAgICAgICAgbW9kZSA9PT0gTW9kZXMuRVNNID8gTW9kdWxlS2luZC5FUzIwMjIgOiBNb2R1bGVLaW5kLkNvbW1vbkpTO1xuICAgIH1cblxuICAgIGlmIChpc0Rldikge1xuICAgICAgdHNDb25maWcub3B0aW9ucy5pbmxpbmVTb3VyY2VNYXAgPSB0cnVlO1xuICAgICAgdHNDb25maWcub3B0aW9ucy5zb3VyY2VNYXAgPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdHNDb25maWcub3B0aW9ucy5zb3VyY2VNYXAgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBwcm9ncmFtID0gdHMuY3JlYXRlUHJvZ3JhbSh0c0NvbmZpZy5maWxlTmFtZXMsIHRzQ29uZmlnLm9wdGlvbnMpO1xuXG4gICAgY29uc3QgdHJhbnNmb3JtYXRpb25zOiB7IGJlZm9yZT86IGFueVtdIH0gPSB7fTtcbiAgICBpZiAobW9kZSA9PT0gTW9kZXMuQ0pTKSB7XG4gICAgICB0cmFuc2Zvcm1hdGlvbnMuYmVmb3JlID0gW2NqczJUcmFuc2Zvcm1lcihcIi5janNcIildO1xuICAgIH0gZWxzZSBpZiAobW9kZSA9PT0gTW9kZXMuRVNNKSB7XG4gICAgICB0cmFuc2Zvcm1hdGlvbnMuYmVmb3JlID0gW2NqczJUcmFuc2Zvcm1lcihcIi5qc1wiKV07XG4gICAgfVxuXG4gICAgY29uc3QgZW1pdFJlc3VsdDogRW1pdFJlc3VsdCA9IHByb2dyYW0uZW1pdChcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHRyYW5zZm9ybWF0aW9uc1xuICAgICk7XG5cbiAgICBjb25zdCBhbGxEaWFnbm9zdGljcyA9IHRzXG4gICAgICAuZ2V0UHJlRW1pdERpYWdub3N0aWNzKHByb2dyYW0pXG4gICAgICAuY29uY2F0KGVtaXRSZXN1bHQuZGlhZ25vc3RpY3MpO1xuXG4gICAgYWxsRGlhZ25vc3RpY3MuZm9yRWFjaCgoZGlhZ25vc3RpYykgPT4ge1xuICAgICAgaWYgKGRpYWdub3N0aWMuZmlsZSkge1xuICAgICAgICBjb25zdCB7IGxpbmUsIGNoYXJhY3RlciB9ID1cbiAgICAgICAgICBkaWFnbm9zdGljLmZpbGUuZ2V0TGluZUFuZENoYXJhY3Rlck9mUG9zaXRpb24oZGlhZ25vc3RpYy5zdGFydCEpO1xuICAgICAgICBjb25zdCBtZXNzYWdlID0gdHMuZmxhdHRlbkRpYWdub3N0aWNNZXNzYWdlVGV4dChcbiAgICAgICAgICBkaWFnbm9zdGljLm1lc3NhZ2VUZXh0LFxuICAgICAgICAgIFwiXFxuXCJcbiAgICAgICAgKTtcbiAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgYCR7ZGlhZ25vc3RpYy5maWxlLmZpbGVOYW1lfSAoJHtsaW5lICsgMX0sJHtjaGFyYWN0ZXIgKyAxfSk6ICR7bWVzc2FnZX1gXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICB0cy5mbGF0dGVuRGlhZ25vc3RpY01lc3NhZ2VUZXh0KGRpYWdub3N0aWMubWVzc2FnZVRleHQsIFwiXFxuXCIpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKGVtaXRSZXN1bHQuZW1pdFNraXBwZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkJ1aWxkIGZhaWxlZFwiKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGJ1aWxkKGlzRGV2OiBib29sZWFuLCBtb2RlOiBNb2RlcywgYnVuZGxlID0gZmFsc2UpIHtcbiAgICBjb25zdCBsb2cgPSB0aGlzLmxvZy5mb3IodGhpcy5idWlsZCk7XG4gICAgYXdhaXQgdGhpcy5idWlsZFRzKGlzRGV2LCBtb2RlLCBidW5kbGUpO1xuXG4gICAgbG9nLnZlcmJvc2UoXG4gICAgICBgTW9kdWxlICR7dGhpcy5wa2dOYW1lfSAke3RoaXMucGtnVmVyc2lvbn0gKCR7bW9kZX0pIGJ1aWx0IGluICR7aXNEZXYgPyBcImRldlwiIDogXCJwcm9kXCJ9IG1vZGUuLi5gXG4gICAgKTtcbiAgICBpZiAobW9kZSA9PT0gTW9kZXMuQ0pTICYmICFidW5kbGUpIHtcbiAgICAgIGNvbnN0IGZpbGVzID0gZ2V0QWxsRmlsZXMoXG4gICAgICAgIFwibGliXCIsXG4gICAgICAgIChmaWxlKSA9PiBmaWxlLmVuZHNXaXRoKFwiLmpzXCIpICYmICFmaWxlLmluY2x1ZGVzKFwiL2VzbS9cIilcbiAgICAgICk7XG5cbiAgICAgIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xuICAgICAgICBsb2cudmVyYm9zZShgUGF0Y2hpbmcgJHtmaWxlfSdzIGNqcyBpbXBvcnRzLi4uYCk7XG4gICAgICAgIGNvbnN0IGYgPSBmaWxlLnJlcGxhY2UoXCIuanNcIiwgXCIuY2pzXCIpO1xuICAgICAgICBhd2FpdCByZW5hbWVGaWxlKGZpbGUsIGYpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvcHlBc3NldHMobW9kZTogTW9kZXMpIHtcbiAgICBjb25zdCBsb2cgPSB0aGlzLmxvZy5mb3IodGhpcy5jb3B5QXNzZXRzKTtcbiAgICBsZXQgaGFzQXNzZXRzID0gZmFsc2U7XG4gICAgdHJ5IHtcbiAgICAgIGhhc0Fzc2V0cyA9IGZzLnN0YXRTeW5jKFwiLi9zcmMvYXNzZXRzXCIpLmlzRGlyZWN0b3J5KCk7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgcmV0dXJuIGxvZy52ZXJib3NlKGBObyBhc3NldHMgZm91bmQgaW4gLi9zcmMvYXNzZXRzIHRvIGNvcHlgKTtcbiAgICB9XG4gICAgaWYgKGhhc0Fzc2V0cylcbiAgICAgIGNvcHlGaWxlKFxuICAgICAgICBcIi4vc3JjL2Fzc2V0c1wiLFxuICAgICAgICBgLi8ke21vZGUgPT09IE1vZGVzLkNKUyA/IFwibGliXCIgOiBcImRpc3RcIn0vYXNzZXRzYFxuICAgICAgKTtcbiAgfVxuXG4gIGFzeW5jIGJ1aWxkQ29tbWFuZHMoKSB7XG4gICAgZm9yIChjb25zdCBjbWQgb2YgQ29tbWFuZHMpIHtcbiAgICAgIGF3YWl0IHRoaXMuYnVuZGxlKE1vZGVzLkNKUywgdHJ1ZSwgdHJ1ZSwgYHNyYy9iaW4vJHtjbWR9LnRzYCwgY21kKTtcbiAgICAgIGxldCBkYXRhID0gcmVhZEZpbGUoYGJpbi8ke2NtZH0uY2pzYCk7XG4gICAgICBkYXRhID0gXCIjIS91c3IvYmluL2VudiBub2RlXFxuXCIgKyBkYXRhO1xuICAgICAgd3JpdGVGaWxlKGBiaW4vJHtjbWR9LmNqc2AsIGRhdGEpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGJ1bmRsZShcbiAgICBtb2RlOiBNb2RlcyxcbiAgICBpc0RldjogYm9vbGVhbixcbiAgICBpc0xpYjogYm9vbGVhbixcbiAgICBlbnRyeUZpbGU6IHN0cmluZyA9IFwic3JjL2luZGV4LnRzXCIsXG4gICAgbmFtZU92ZXJyaWRlOiBzdHJpbmcgPSB0aGlzLnBrZ05hbWUsXG4gICAgZXh0ZXJuYWxzPzogc3RyaW5nW10sXG4gICAgaW5jbHVkZTogc3RyaW5nW10gPSBbXG4gICAgICBcInByb21wdHNcIixcbiAgICAgIFwic3R5bGVkLXN0cmluZy1idWlsZGVyXCIsXG4gICAgICBcInR5cGVkLW9iamVjdC1hY2N1bXVsYXRvclwiLFxuICAgICAgXCJAZGVjYWYtdHMvbG9nZ2luZ1wiLFxuICAgIF1cbiAgKSB7XG4gICAgY29uc3QgaXNFc20gPSBtb2RlID09PSBNb2Rlcy5FU007XG4gICAgY29uc3QgcGtnTmFtZSA9IHRoaXMucGtnTmFtZTtcblxuICAgIGNvbnN0IGV4dCA9IEFycmF5LmZyb20oXG4gICAgICBuZXcgU2V0KFtcbiAgICAgICAgLi4uW1xuICAgICAgICAgIFwiZnNcIixcbiAgICAgICAgICBcInBhdGhcIixcbiAgICAgICAgICBcInByb2Nlc3NcIixcbiAgICAgICAgICBcInJvbGx1cFwiLFxuICAgICAgICAgIFwiQHJvbGx1cC9wbHVnaW4tdHlwZXNjcmlwdFwiLFxuICAgICAgICAgIFwiQHJvbGx1cC9wbHVnaW4tanNvblwiLFxuICAgICAgICAgIFwiQHJvbGx1cC9wbHVnaW4tY29tbW9uanNcIixcbiAgICAgICAgICBcIkByb2xsdXAvcGx1Z2luLW5vZGUtcmVzb2x2ZVwiLFxuICAgICAgICAgIFwiY2hpbGRfcHJvY2Vzc1wiLFxuICAgICAgICAgIFwidHNsaWJcIixcbiAgICAgICAgICBcInV0aWxcIixcbiAgICAgICAgICBcImh0dHBzXCIsXG4gICAgICAgIF0sXG4gICAgICAgIC4uLihleHRlcm5hbHMgfHwgW10pLFxuICAgICAgXSlcbiAgICApO1xuXG4gICAgY29uc3QgcGx1Z2lucyA9IFtcbiAgICAgIHR5cGVzY3JpcHQoe1xuICAgICAgICBjb21waWxlck9wdGlvbnM6IHtcbiAgICAgICAgICBtb2R1bGU6IFwiZXNuZXh0XCIsXG4gICAgICAgICAgZGVjbGFyYXRpb246IGZhbHNlLFxuICAgICAgICAgIG91dERpcjogaXNMaWIgPyBcImJpblwiIDogXCJkaXN0XCIsXG4gICAgICAgIH0sXG4gICAgICAgIGluY2x1ZGU6IFtcInNyYy8qKi8qLnRzXCJdLFxuICAgICAgICBleGNsdWRlOiBbXCJub2RlX21vZHVsZXNcIiwgXCIqKi8qLnNwZWMudHNcIl0sXG4gICAgICAgIHRzY29uZmlnOiBcIi4vdHNjb25maWcuanNvblwiLFxuICAgICAgfSksXG4gICAgICBqc29uKCksXG4gICAgXTtcblxuICAgIGlmIChpc0xpYikge1xuICAgICAgcGx1Z2lucy5wdXNoKFxuICAgICAgICBjb21tb25qcyh7XG4gICAgICAgICAgaW5jbHVkZTogW10sXG4gICAgICAgICAgZXhjbHVkZTogZXh0ZXJuYWxzLFxuICAgICAgICB9KSxcbiAgICAgICAgbm9kZVJlc29sdmUoe1xuICAgICAgICAgIHJlc29sdmVPbmx5OiBpbmNsdWRlLFxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBpbnB1dDogSW5wdXRPcHRpb25zID0ge1xuICAgICAgaW5wdXQ6IGVudHJ5RmlsZSxcbiAgICAgIHBsdWdpbnM6IHBsdWdpbnMsXG4gICAgICBleHRlcm5hbDogZXh0LFxuICAgIH07XG5cbiAgICBjb25zdCBvdXRwdXRzOiBPdXRwdXRPcHRpb25zW10gPSBbXG4gICAgICB7XG4gICAgICAgIGZpbGU6IGAke2lzTGliID8gXCJiaW4vXCIgOiBcImRpc3QvXCJ9JHtuYW1lT3ZlcnJpZGUgPyBuYW1lT3ZlcnJpZGUgOiBgLmJ1bmRsZS4keyFpc0RldiA/IFwibWluXCIgOiBcIlwifWB9JHtpc0VzbSA/IFwiLmVzbVwiIDogXCJcIn0uY2pzYCxcbiAgICAgICAgZm9ybWF0OiBpc0xpYiA/IFwiY2pzXCIgOiBpc0VzbSA/IFwiZXNtXCIgOiBcInVtZFwiLFxuICAgICAgICBuYW1lOiBwa2dOYW1lLFxuICAgICAgICBlc01vZHVsZTogaXNFc20sXG4gICAgICAgIHNvdXJjZW1hcDogaXNEZXYgPyBcImlubGluZVwiIDogZmFsc2UsXG4gICAgICAgIGdsb2JhbHM6IHt9LFxuICAgICAgICBleHBvcnRzOiBcImF1dG9cIixcbiAgICAgIH0sXG4gICAgXTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBidW5kbGUgPSBhd2FpdCByb2xsdXAoaW5wdXQpO1xuICAgICAgY29uc29sZS5sb2coYnVuZGxlLndhdGNoRmlsZXMpO1xuICAgICAgYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVPdXRwdXRzKGJ1bmRsZTogUm9sbHVwQnVpbGQpIHtcbiAgICAgICAgZm9yIChjb25zdCBvdXRwdXRPcHRpb25zIG9mIG91dHB1dHMpIHtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgICAgICAgY29uc3QgeyBvdXRwdXQgfSA9IGF3YWl0IGJ1bmRsZS53cml0ZShvdXRwdXRPcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBhd2FpdCBnZW5lcmF0ZU91dHB1dHMoYnVuZGxlKTtcbiAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBidW5kbGU6ICR7ZX1gKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGJ1aWxkQnlFbnYoaXNEZXY6IGJvb2xlYW4pIHtcbiAgICB0cnkge1xuICAgICAgZGVsZXRlUGF0aChcImxpYlwiKTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICAvLyBkbyBub3RoaW5nXG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBkZWxldGVQYXRoKFwiZGlzdFwiKTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICAvLyBkbyBub3RoaW5nXG4gICAgfVxuICAgIGZzLm1rZGlyU3luYyhcImxpYlwiKTtcbiAgICBmcy5ta2RpclN5bmMoXCJkaXN0XCIpO1xuICAgIGF3YWl0IHRoaXMuYnVpbGQoaXNEZXYsIE1vZGVzLkVTTSk7XG4gICAgYXdhaXQgdGhpcy5idWlsZChpc0RldiwgTW9kZXMuQ0pTKTtcbiAgICBhd2FpdCB0aGlzLmJ1bmRsZShNb2Rlcy5FU00sIHRydWUsIGZhbHNlKTtcbiAgICBhd2FpdCB0aGlzLmJ1bmRsZShNb2Rlcy5DSlMsIHRydWUsIGZhbHNlKTtcbiAgICB0aGlzLnBhdGNoRmlsZXMoXCJsaWJcIik7XG4gICAgdGhpcy5wYXRjaEZpbGVzKFwiZGlzdFwiKTtcbiAgICB0aGlzLmNvcHlBc3NldHMoTW9kZXMuQ0pTKTtcbiAgICB0aGlzLmNvcHlBc3NldHMoTW9kZXMuRVNNKTtcbiAgfVxuXG4gIGFzeW5jIGJ1aWxkRGV2KCkge1xuICAgIHJldHVybiB0aGlzLmJ1aWxkQnlFbnYodHJ1ZSk7XG4gIH1cblxuICBhc3luYyBidWlsZFByb2QoKSB7XG4gICAgcmV0dXJuIHRoaXMuYnVpbGRCeUVudihmYWxzZSk7XG4gIH1cblxuICBhc3luYyBidWlsZERvY3MoKSB7XG4gICAgYXdhaXQgcnVuQ29tbWFuZChgbnBtIGluc3RhbGwgYmV0dGVyLWRvY3MgdGFmZnlkYmApLnByb21pc2U7XG4gICAgYXdhaXQgcnVuQ29tbWFuZChgbnB4IG1hcmtkb3duLWluY2x1ZGUgLi93b3JrZG9jcy9yZWFkbWUtbWQuanNvbmApLnByb21pc2U7XG4gICAgYXdhaXQgcnVuQ29tbWFuZChcbiAgICAgIGBucHgganNkb2MgLWMgLi93b3JrZG9jcy9qc2RvY3MuanNvbiAtdCAuL25vZGVfbW9kdWxlcy9iZXR0ZXItZG9jc2BcbiAgICApLnByb21pc2U7XG4gICAgYXdhaXQgcnVuQ29tbWFuZChgbnBtIHJlbW92ZSBiZXR0ZXItZG9jcyB0YWZmeWRiYCkucHJvbWlzZTtcbiAgICBbXG4gICAgICB7XG4gICAgICAgIHNyYzogXCJ3b3JrZG9jcy9hc3NldHNcIixcbiAgICAgICAgZGVzdDogXCIuL2RvY3Mvd29ya2RvY3MvYXNzZXRzXCIsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBzcmM6IFwid29ya2RvY3MvcmVwb3J0cy9jb3ZlcmFnZVwiLFxuICAgICAgICBkZXN0OiBcIi4vZG9jcy93b3JrZG9jcy9yZXBvcnRzL2NvdmVyYWdlXCIsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBzcmM6IFwid29ya2RvY3MvcmVwb3J0cy9odG1sXCIsXG4gICAgICAgIGRlc3Q6IFwiLi9kb2NzL3dvcmtkb2NzL3JlcG9ydHMvaHRtbFwiLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgc3JjOiBcIndvcmtkb2NzL3Jlc291cmNlc1wiLFxuICAgICAgICBkZXN0OiBcIi4vZG9jcy93b3JrZG9jcy9yZXNvdXJjZXNcIixcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIHNyYzogXCJMSUNFTlNFLm1kXCIsXG4gICAgICAgIGRlc3Q6IFwiLi9kb2NzL0xJQ0VOU0UubWRcIixcbiAgICAgIH0sXG4gICAgXS5mb3JFYWNoKChmKSA9PiB7XG4gICAgICBjb25zdCB7IHNyYywgZGVzdCB9ID0gZjtcbiAgICAgIGNvcHlGaWxlKHNyYywgZGVzdCk7XG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgcnVuPFI+KFxuICAgIGFuc3dlcnM6IExvZ2dpbmdDb25maWcgJlxuICAgICAgdHlwZW9mIERlZmF1bHRDb21tYW5kVmFsdWVzICYgeyBbayBpbiBrZXlvZiB0eXBlb2Ygb3B0aW9uc106IHVua25vd24gfVxuICApOiBQcm9taXNlPHN0cmluZyB8IHZvaWQgfCBSPiB7XG4gICAgY29uc3QgeyBkZXYsIHByb2QsIGRvY3MsIGNvbW1hbmRzIH0gPSBhbnN3ZXJzO1xuXG4gICAgaWYgKGNvbW1hbmRzKSB7XG4gICAgICBhd2FpdCB0aGlzLmJ1aWxkQ29tbWFuZHMoKTtcbiAgICB9XG5cbiAgICBpZiAoZGV2KSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5idWlsZERldigpO1xuICAgIH1cbiAgICBpZiAocHJvZCkge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuYnVpbGRQcm9kKCk7XG4gICAgfVxuICAgIGlmIChkb2NzKSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5idWlsZERvY3MoKTtcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBDb21tYW5kIH0gZnJvbSBcIi4uL2NvbW1hbmRcIjtcbmltcG9ydCB7IENvbW1hbmRPcHRpb25zIH0gZnJvbSBcIi4uL3R5cGVzXCI7XG5pbXBvcnQge1xuICBnZXRQYWNrYWdlLFxuICBIdHRwQ2xpZW50LFxuICBwYXRjaEZpbGUsXG4gIHBhdGNoU3RyaW5nLFxuICBydW5Db21tYW5kLFxuICBzZXRQYWNrYWdlQXR0cmlidXRlLFxuICBTZXR1cFNjcmlwdEtleSxcbiAgVG9rZW5zLFxuICB3cml0ZUZpbGUsXG59IGZyb20gXCIuLi8uLi91dGlsc1wiO1xuaW1wb3J0IHsgRGVmYXVsdENvbW1hbmRWYWx1ZXMgfSBmcm9tIFwiLi4vaW5kZXhcIjtcbmltcG9ydCB7IFVzZXJJbnB1dCB9IGZyb20gXCIuLi8uLi9pbnB1dFwiO1xuaW1wb3J0IGZzIGZyb20gXCJmc1wiO1xuaW1wb3J0IHsgTG9nZ2luZ0NvbmZpZyB9IGZyb20gXCJAZGVjYWYtdHMvbG9nZ2luZ1wiO1xuXG5jb25zdCBiYXNlVXJsID1cbiAgXCJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vZGVjYWYtdHMvdHMtd29ya3NwYWNlL21hc3RlclwiO1xuXG5jb25zdCBvcHRpb25zID0ge1xuICB0ZW1wbGF0ZXM6IFtcbiAgICBcIi5naXRodWIvSVNTVUVfVEVNUExBVEUvYnVnX3JlcG9ydC5tZFwiLFxuICAgIFwiLmdpdGh1Yi9JU1NVRV9URU1QTEFURS9mZWF0dXJlX3JlcXVlc3QubWRcIixcbiAgICBcIi5naXRodWIvRlVORElORy55bWxcIixcbiAgXSxcbiAgd29ya2Zsb3dzOiBbXG4gICAgXCIuZ2l0aHViL3dvcmtmbG93cy9jb2RlcWwtYW5hbHlzaXMueW1sXCIsXG4gICAgXCIuZ2l0aHViL3dvcmtmbG93cy9qZXN0LWNvdmVyYWdlLnlhbWxcIixcbiAgICBcIi5naXRodWIvd29ya2Zsb3dzL25vZGVqcy1idWlsZC1wcm9kLnlhbWxcIixcbiAgICBcIi5naXRodWIvd29ya2Zsb3dzL3BhZ2VzLnlhbWxcIixcbiAgICBcIi5naXRodWIvd29ya2Zsb3dzL3B1Ymxpc2gtb24tcmVsZWFzZS55YW1sXCIsXG4gICAgXCIuZ2l0aHViL3dvcmtmbG93cy9yZWxlYXNlLW9uLXRhZy55YW1sXCIsXG4gICAgXCIuZ2l0aHViL3dvcmtmbG93cy9zbnlrLWFuYWx5c2lzLnlhbWxcIixcbiAgXSxcbiAgaWRlOiBbXG4gICAgXCIuaWRlYS9ydW5Db25maWd1cmF0aW9ucy9BbGwgVGVzdHMucnVuLnhtbFwiLFxuICAgIFwiLmlkZWEvcnVuQ29uZmlndXJhdGlvbnMvYnVpbGQucnVuLnhtbFwiLFxuICAgIFwiLmlkZWEvcnVuQ29uZmlndXJhdGlvbnMvYnVpbGRfcHJvZC5ydW4ueG1sXCIsXG4gICAgXCIuaWRlYS9ydW5Db25maWd1cmF0aW9ucy9jb3ZlcmFnZS5ydW4ueG1sXCIsXG4gICAgXCIuaWRlYS9ydW5Db25maWd1cmF0aW9ucy9kb2NzLnJ1bi54bWxcIixcbiAgICBcIi5pZGVhL3J1bkNvbmZpZ3VyYXRpb25zL2RyYXdpbmdzLnJ1bi54bWxcIixcbiAgICBcIi5pZGVhL3J1bkNvbmZpZ3VyYXRpb25zL2ZsYXNoLWZvcndhcmQucnVuLnhtbFwiLFxuICAgIFwiLmlkZWEvcnVuQ29uZmlndXJhdGlvbnMvSW50ZWdyYXRpb25fVGVzdHMucnVuLnhtbFwiLFxuICAgIFwiLmlkZWEvcnVuQ29uZmlndXJhdGlvbnMvQnVuZGxpbmdfVGVzdHMucnVuLnhtbFwiLFxuICAgIFwiLmlkZWEvcnVuQ29uZmlndXJhdGlvbnMvbGludC1maXgucnVuLnhtbFwiLFxuICAgIFwiLmlkZWEvcnVuQ29uZmlndXJhdGlvbnMvcmVsZWFzZS5ydW4ueG1sXCIsXG4gICAgXCIuaWRlYS9ydW5Db25maWd1cmF0aW9ucy90ZXN0X2NpcmN1bGFyLnJ1bi54bWxcIixcbiAgICBcIi5pZGVhL3J1bkNvbmZpZ3VyYXRpb25zL3VtbC5ydW4ueG1sXCIsXG4gICAgXCIuaWRlYS9ydW5Db25maWd1cmF0aW9ucy9Vbml0IFRlc3RzLnJ1bi54bWxcIixcbiAgICBcIi5pZGVhL3J1bkNvbmZpZ3VyYXRpb25zL3VwZGF0ZS1zY3JpcHRzLnJ1bi54bWxcIixcbiAgXSxcbiAgZG9jczogW1xuICAgIFwid29ya2RvY3MvdHV0b3JpYWxzL0NvbnRyaWJ1dGluZy5tZFwiLFxuICAgIFwid29ya2RvY3MvdHV0b3JpYWxzL0RvY3VtZW50YXRpb24ubWRcIixcbiAgICBcIndvcmtkb2NzL3R1dG9yaWFscy9Gb3IgRGV2ZWxvcGVycy5tZFwiLFxuICAgIFwid29ya2RvY3MvMi1CYWRnZXMubWRcIixcbiAgICBcIndvcmtkb2NzL2pzZG9jcy5qc29uXCIsXG4gICAgXCJ3b3JrZG9jcy9yZWFkbWUtbWQuanNvblwiLFxuICBdLFxuICBzdHlsZXM6IFtcIi5wcmV0dGllcnJjXCIsIFwiZXNsaW50LmNvbmZpZy5qc1wiXSxcbiAgc2NyaXB0czogW1xuICAgIFwiYmluL3VwZGF0ZS1zY3JpcHRzLmNqc1wiLFxuICAgIFwiYmluL3RhZy1yZWxlYXNlLmNqc1wiLFxuICAgIFwiYmluL2J1aWxkLXNjcmlwdHMuY2pzXCIsXG4gIF0sXG4gIHRlc3RzOiBbXCJqZXN0LmNvbmZpZy50c1wiLCBcIndvcmtkb2NzL3JlcG9ydHMvamVzdC5jb3ZlcmFnZS5jb25maWcudHNcIl0sXG4gIHR5cGVzY3JpcHQ6IFtcInRzY29uZmlnLmpzb25cIl0sXG4gIGRvY2tlcjogW1wiRG9ja2VyZmlsZVwiXSxcbiAgYXV0b21hdGlvbjogW1xuICAgIFwid29ya2RvY3MvY29uZmx1ZW5jZS9Db250aW51b3VzIEludGVncmF0aW9uLURlcGxveW1lbnQvR2l0SHViLm1kXCIsXG4gICAgXCJ3b3JrZG9jcy9jb25mbHVlbmNlL0NvbnRpbnVvdXMgSW50ZWdyYXRpb24tRGVwbG95bWVudC9KaXJhLm1kXCIsXG4gICAgXCJ3b3JrZG9jcy9jb25mbHVlbmNlL0NvbnRpbnVvdXMgSW50ZWdyYXRpb24tRGVwbG95bWVudC9UZWFtcy5tZFwiLFxuICBdLFxufTtcblxuY29uc3QgYXJnenogPSB7XG4gIC8vIGluaXQgYXR0cmlidXRlc1xuICBib290OiB7XG4gICAgdHlwZTogXCJib29sZWFuXCIsXG4gIH0sXG4gIG9yZzoge1xuICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgc2hvcnQ6IFwib1wiLFxuICB9LFxuICBuYW1lOiB7XG4gICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICBzaG9ydDogXCJuXCIsXG4gICAgZGVmYXVsdDogdW5kZWZpbmVkLFxuICB9LFxuICBhdXRob3I6IHtcbiAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgIHNob3J0OiBcImFcIixcbiAgICBkZWZhdWx0OiB1bmRlZmluZWQsXG4gIH0sXG4gIC8vIHVwZGF0ZSBhdHRyaWJ1dGVzXG4gIGFsbDoge1xuICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICB9LFxuICBsaWNlbnNlOiB7XG4gICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICBtZXNzYWdlOiBcIlBpY2sgdGhlIGxpY2Vuc2VcIixcbiAgfSxcbiAgc2NyaXB0czoge1xuICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICB9LFxuICBzdHlsZXM6IHtcbiAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgfSxcbiAgZG9jczoge1xuICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICB9LFxuICBpZGU6IHtcbiAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgfSxcbiAgd29ya2Zsb3dzOiB7XG4gICAgdHlwZTogXCJib29sZWFuXCIsXG4gIH0sXG4gIHRlbXBsYXRlczoge1xuICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICB9LFxuICB0eXBlc2NyaXB0OiB7XG4gICAgdHlwZTogXCJib29sZWFuXCIsXG4gIH0sXG4gIGRvY2tlcjoge1xuICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICB9LFxuICBwa2c6IHtcbiAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgfSxcbiAgZGVwZW5kZW5jaWVzOiB7XG4gICAgdHlwZTogXCJib29sZWFuXCIsXG4gIH0sXG4gIHRlc3RzOiB7XG4gICAgdHlwZTogXCJib29sZWFuXCIsXG4gIH0sXG4gIGF1dG9tYXRpb246IHtcbiAgICB0eXBlOiBcImJvb2xlYW5cIixcbiAgfSxcbn07XG5cbi8qKlxuICogQGNsYXNzIFRlbXBsYXRlU3luY1xuICogQGV4dGVuZHMge0NvbW1hbmR9XG4gKiBAY2F0ZWdvcnkgc2NyaXB0c1xuICogQGRlc2NyaXB0aW9uIEEgY29tbWFuZC1saW5lIHRvb2wgZm9yIHN5bmNocm9uaXppbmcgcHJvamVjdCB0ZW1wbGF0ZXMgYW5kIGNvbmZpZ3VyYXRpb25zLlxuICogQHN1bW1hcnkgVGhpcyBjbGFzcyBwcm92aWRlcyBmdW5jdGlvbmFsaXR5IHRvIGRvd25sb2FkIGFuZCB1cGRhdGUgdmFyaW91cyBwcm9qZWN0IGZpbGVzIGFuZCBjb25maWd1cmF0aW9ucyBmcm9tIGEgcmVtb3RlIHJlcG9zaXRvcnkuXG4gKiBJdCBzdXBwb3J0cyB1cGRhdGluZyBsaWNlbnNlcywgSURFIGNvbmZpZ3VyYXRpb25zLCBzY3JpcHRzLCBzdHlsZXMsIGRvY3VtZW50YXRpb24sIHdvcmtmbG93cywgYW5kIHRlbXBsYXRlcy5cbiAqXG4gKiBAcGFyYW0ge0NvbW1hbmRPcHRpb25zfSBhcmdzIC0gVGhlIGNvbW1hbmQgb3B0aW9ucyBmb3IgVGVtcGxhdGVTeW5jXG4gKi9cbmV4cG9ydCBjbGFzcyBUZW1wbGF0ZVN5bmMgZXh0ZW5kcyBDb21tYW5kPENvbW1hbmRPcHRpb25zPHR5cGVvZiBhcmd6ej4sIHZvaWQ+IHtcbiAgcHJpdmF0ZSByZXBsYWNlbWVudHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlcj4gPSB7fTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcIlRlbXBsYXRlU3luY1wiLCBhcmd6eik7XG4gIH1cblxuICBwcml2YXRlIGxvYWRWYWx1ZXNGcm9tUGFja2FnZSgpIHtcbiAgICBjb25zdCBwID0gcHJvY2Vzcy5jd2QoKTtcbiAgICBjb25zdCBhdXRob3IgPSBnZXRQYWNrYWdlKHAsIFwiYXV0aG9yXCIpIGFzIHN0cmluZztcbiAgICBjb25zdCBzY29wZWROYW1lID0gZ2V0UGFja2FnZShwLCBcIm5hbWVcIik7XG4gICAgbGV0IG5hbWU6IHN0cmluZyA9IHNjb3BlZE5hbWUgYXMgc3RyaW5nO1xuICAgIGxldCBvcmc6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICBpZiAobmFtZS5zdGFydHNXaXRoKFwiQFwiKSkge1xuICAgICAgY29uc3Qgc3BsaXQgPSBuYW1lLnNwbGl0KFwiL1wiKTtcbiAgICAgIG5hbWUgPSBzcGxpdFsxXTtcbiAgICAgIG9yZyA9IHNwbGl0WzBdLnJlcGxhY2UoXCJAXCIsIFwiXCIpO1xuICAgIH1cbiAgICBbXCJUaWFnbyBWZW5jZXNsYXVcIiwgXCJUaWFnb1ZlbmNlc2xhdVwiLCBcIiR7YXV0aG9yfVwiXS5mb3JFYWNoKFxuICAgICAgKGVsKSA9PiAodGhpcy5yZXBsYWNlbWVudHNbZWxdID0gYXV0aG9yKVxuICAgICk7XG4gICAgW1wiVFMtV29ya3NwYWNlXCIsIFwidHMtd29ya3NwYWNlXCIsIFwiJHtuYW1lfVwiXS5mb3JFYWNoKFxuICAgICAgKGVsKSA9PiAodGhpcy5yZXBsYWNlbWVudHNbZWxdID0gbmFtZSlcbiAgICApO1xuICAgIFtcImRlY2FmLXRzXCIsIFwiJHtvcmd9XCJdLmZvckVhY2goXG4gICAgICAoZWwpID0+ICh0aGlzLnJlcGxhY2VtZW50c1tlbF0gPSAob3JnIGFzIHN0cmluZykgfHwgJ1wiXCInKVxuICAgICk7XG4gICAgdGhpcy5yZXBsYWNlbWVudHNbXCIke29yZ19vcl9vd25lcn1cIl0gPSBvcmcgfHwgbmFtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gRG93bmxvYWRzIGZpbGVzIGZvciBhIHNwZWNpZmljIG9wdGlvbiBjYXRlZ29yeS5cbiAgICogQHN1bW1hcnkgVGhpcyBtZXRob2QgZG93bmxvYWRzIGFsbCBmaWxlcyBhc3NvY2lhdGVkIHdpdGggYSBnaXZlbiBvcHRpb24ga2V5IGZyb20gdGhlIHJlbW90ZSByZXBvc2l0b3J5LlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSByZXByZXNlbnRpbmcgdGhlIG9wdGlvbiBjYXRlZ29yeSB0byBkb3dubG9hZFxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICogQHRocm93cyB7RXJyb3J9IElmIHRoZSBzcGVjaWZpZWQgb3B0aW9uIGtleSBpcyBub3QgZm91bmRcbiAgICovXG4gIGFzeW5jIGRvd25sb2FkT3B0aW9uKGtleToga2V5b2YgdHlwZW9mIG9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIShrZXkgaW4gb3B0aW9ucykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgT3B0aW9uIFwiJHtrZXl9XCIgbm90IGZvdW5kIGluIG9wdGlvbnNgKTtcbiAgICB9XG4gICAgY29uc3QgZmlsZXMgPSBvcHRpb25zW2tleSBhcyBrZXlvZiB0eXBlb2Ygb3B0aW9uc107XG5cbiAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcbiAgICAgIHRoaXMubG9nLmluZm8oYERvd25sb2FkaW5nICR7ZmlsZX1gKTtcblxuICAgICAgbGV0IGRhdGEgPSBhd2FpdCBIdHRwQ2xpZW50LmRvd25sb2FkRmlsZShgJHtiYXNlVXJsfS8ke2ZpbGV9YCk7XG4gICAgICBkYXRhID0gcGF0Y2hTdHJpbmcoZGF0YSwgdGhpcy5yZXBsYWNlbWVudHMpO1xuICAgICAgd3JpdGVGaWxlKHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCBmaWxlKSwgZGF0YSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBEb3dubG9hZHMgYW5kIHNldHMgdXAgdGhlIHNwZWNpZmllZCBsaWNlbnNlLlxuICAgKiBAc3VtbWFyeSBUaGlzIG1ldGhvZCBkb3dubG9hZHMgdGhlIGNob3NlbiBsaWNlbnNlIGZpbGUsIHNhdmVzIGl0IHRvIHRoZSBwcm9qZWN0LCBhbmQgdXBkYXRlcyB0aGUgcGFja2FnZS5qc29uIGxpY2Vuc2UgZmllbGQuXG4gICAqIEBwYXJhbSB7XCJNSVRcIiB8IFwiR1BMXCIgfCBcIkFwYWNoZVwiIHwgXCJMR1BMXCIgfCBcIkFHUExcIn0gbGljZW5zZSAtIFRoZSBsaWNlbnNlIHRvIGRvd25sb2FkIGFuZCBzZXQgdXBcbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBhc3luYyBnZXRMaWNlbnNlKGxpY2Vuc2U6IFwiTUlUXCIgfCBcIkdQTFwiIHwgXCJBcGFjaGVcIiB8IFwiTEdQTFwiIHwgXCJBR1BMXCIpIHtcbiAgICB0aGlzLmxvZy5pbmZvKGBEb3dubG9hZGluZyAke2xpY2Vuc2V9IGxpY2Vuc2VgKTtcbiAgICBjb25zdCB1cmwgPSBgJHtiYXNlVXJsfS93b3JrZG9jcy9saWNlbnNlcy8ke2xpY2Vuc2V9Lm1kYDtcbiAgICBsZXQgZGF0YSA9IGF3YWl0IEh0dHBDbGllbnQuZG93bmxvYWRGaWxlKHVybCk7XG4gICAgZGF0YSA9IHBhdGNoU3RyaW5nKGRhdGEsIHRoaXMucmVwbGFjZW1lbnRzKTtcbiAgICB3cml0ZUZpbGUocGF0aC5qb2luKHByb2Nlc3MuY3dkKCksIFwiTElDRU5TRS5tZFwiKSwgZGF0YSk7XG4gICAgc2V0UGFja2FnZUF0dHJpYnV0ZShcImxpY2Vuc2VcIiwgbGljZW5zZSk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIERvd25sb2FkcyBJREUgY29uZmlndXJhdGlvbiBmaWxlcy5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBhc3luYyBnZXRJZGUoKSB7XG4gICAgZnMubWtkaXJTeW5jKHBhdGguam9pbihwcm9jZXNzLmN3ZCgpLCBcIi5pZGVhXCIsIFwicnVuQ29uZmlndXJhdGlvbnNcIiksIHtcbiAgICAgIHJlY3Vyc2l2ZTogdHJ1ZSxcbiAgICB9KTtcbiAgICBhd2FpdCB0aGlzLmRvd25sb2FkT3B0aW9uKFwiaWRlXCIpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBVcGRhdGUgbnBtIHNjcmlwdHNcbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBhc3luYyBnZXRTY3JpcHRzKCkge1xuICAgIGF3YWl0IHRoaXMuZG93bmxvYWRPcHRpb24oXCJzY3JpcHRzXCIpO1xuICAgIHRoaXMubG9nLmluZm8oXCJwbGVhc2UgcmUtcnVuIHRoZSBjb21tYW5kXCIpO1xuICAgIHByb2Nlc3MuZXhpdCgwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gRG93bmxvYWRzIHN0eWxlIGNvbmZpZ3VyYXRpb24gZmlsZXMuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICAgKi9cbiAgZ2V0U3R5bGVzID0gKCkgPT4gdGhpcy5kb3dubG9hZE9wdGlvbihcInN0eWxlc1wiKTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIERvd25sb2FkcyB0ZW1wbGF0ZSBmaWxlcy5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBnZXRUZW1wbGF0ZXMgPSAoKSA9PiB0aGlzLmRvd25sb2FkT3B0aW9uKFwidGVtcGxhdGVzXCIpO1xuXG4gIC8qKlxuICAgKiBAZGVzY3JpcHRpb24gRG93bmxvYWRzIHdvcmtmbG93IGNvbmZpZ3VyYXRpb24gZmlsZXMuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICAgKi9cbiAgZ2V0V29ya2Zsb3dzID0gKCkgPT4gdGhpcy5kb3dubG9hZE9wdGlvbihcIndvcmtmbG93c1wiKTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIERvd25sb2FkcyBkb2N1bWVudGF0aW9uIGZpbGVzLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIGdldERvY3MgPSAoKSA9PiB0aGlzLmRvd25sb2FkT3B0aW9uKFwiZG9jc1wiKTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIERvd25sb2FkcyB0eXBlc2NyaXB0IGNvbmZpZyBmaWxlcy5cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBnZXRUeXBlc2NyaXB0ID0gKCkgPT4gdGhpcy5kb3dubG9hZE9wdGlvbihcInR5cGVzY3JpcHRcIik7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBEb3dubG9hZHMgYXV0b21hdGlvbiBkb2N1bWVudGF0aW9uIGZpbGVzLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIGdldEF1dG9tYXRpb24gPSAoKSA9PiB0aGlzLmRvd25sb2FkT3B0aW9uKFwiYXV0b21hdGlvblwiKTtcblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIERvd25sb2FkcyBhdXRvbWF0aW9uIGRvY3VtZW50YXRpb24gZmlsZXMuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICAgKi9cbiAgZ2V0VGVzdHMgPSAoKSA9PiB0aGlzLmRvd25sb2FkT3B0aW9uKFwidGVzdHNcIik7XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvbiBEb3dubG9hZHMgZG9ja2VyIGltYWdlIGZpbGVzLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIGdldERvY2tlciA9ICgpID0+IHRoaXMuZG93bmxvYWRPcHRpb24oXCJkb2NrZXJcIik7XG5cbiAgYXN5bmMgaW5pdFBhY2thZ2UocGtnTmFtZTogc3RyaW5nLCBhdXRob3I6IHN0cmluZywgbGljZW5zZTogc3RyaW5nKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBrZyA9IGdldFBhY2thZ2UoKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgIGRlbGV0ZSBwa2dbU2V0dXBTY3JpcHRLZXldO1xuICAgICAgcGtnLm5hbWUgPSBwa2dOYW1lO1xuICAgICAgcGtnLnZlcnNpb24gPSBcIjAuMC4xXCI7XG4gICAgICBwa2cuYXV0aG9yID0gYXV0aG9yO1xuICAgICAgcGtnLmxpY2Vuc2UgPSBsaWNlbnNlO1xuICAgICAgZnMud3JpdGVGaWxlU3luYyhcInBhY2thZ2UuanNvblwiLCBKU09OLnN0cmluZ2lmeShwa2csIG51bGwsIDIpKTtcbiAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yIGZpeGluZyBwYWNrYWdlLmpzb246ICR7ZX1gKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyB1cGRhdGVQYWNrYWdlU2NyaXBzKCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBvcmlnaW5hbFBrZyA9IEpTT04ucGFyc2UoXG4gICAgICAgIGF3YWl0IEh0dHBDbGllbnQuZG93bmxvYWRGaWxlKGAke2Jhc2VVcmx9L3BhY2thZ2UuanNvbmApXG4gICAgICApO1xuICAgICAgY29uc3QgeyBzY3JpcHRzIH0gPSBvcmlnaW5hbFBrZztcblxuICAgICAgY29uc3QgcGtnOiB0eXBlb2Ygb3JpZ2luYWxQa2cgPSBnZXRQYWNrYWdlKCkgYXMge1xuICAgICAgICBzY3JpcHRzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAgICAgfTtcbiAgICAgIE9iamVjdC5rZXlzKHBrZy5zY3JpcHRzKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgaWYgKGtleSBpbiBzY3JpcHRzKSB7XG4gICAgICAgICAgY29uc3QgcmVwbGFjZWQgPSBwYXRjaFN0cmluZyhzY3JpcHRzW2tleV0sIHRoaXMucmVwbGFjZW1lbnRzKTtcbiAgICAgICAgICBpZiAocmVwbGFjZWQgIT09IHNjcmlwdHNba2V5XSkge1xuICAgICAgICAgICAgcGtnLnNjcmlwdHNba2V5XSA9IHJlcGxhY2VkO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHBrZ1tcImV4cG9ydHNcIl1bXCJyZXF1aXJlXCJdID0gb3JpZ2luYWxQa2dbXCJleHBvcnRzXCJdW1wicmVxdWlyZVwiXTtcbiAgICAgIHBrZ1tcImV4cG9ydHNcIl1bXCJpbXBvcnRcIl0gPSBvcmlnaW5hbFBrZ1tcImV4cG9ydHNcIl1bXCJpbXBvcnRcIl07XG4gICAgICBwa2dbXCJ0eXBlc1wiXSA9IG9yaWdpbmFsUGtnW1widHlwZXNcIl07XG5cbiAgICAgIGZzLndyaXRlRmlsZVN5bmMoXCJwYWNrYWdlLmpzb25cIiwgSlNPTi5zdHJpbmdpZnkocGtnLCBudWxsLCAyKSk7XG4gICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciBmaXhpbmcgcGFja2FnZS5qc29uIHNjcmlwdHM6ICR7ZX1gKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBjcmVhdGVUb2tlbkZpbGVzKCkge1xuICAgIGNvbnN0IGxvZyA9IHRoaXMubG9nLmZvcih0aGlzLmNyZWF0ZVRva2VuRmlsZXMpO1xuICAgIGNvbnN0IGdpdFRva2VuID0gYXdhaXQgVXNlcklucHV0Lmluc2lzdEZvclRleHQoXG4gICAgICBcInRva2VuXCIsXG4gICAgICBcInBsZWFzZSBpbnB1dCB5b3VyIGdpdGh1YiB0b2tlblwiLFxuICAgICAgKHJlczogc3RyaW5nKSA9PiB7XG4gICAgICAgIHJldHVybiAhIXJlcy5tYXRjaCgvXmdocF9bMC05YS16QS1aXXszNn0kL2cpO1xuICAgICAgfVxuICAgICk7XG4gICAgT2JqZWN0LnZhbHVlcyhUb2tlbnMpLmZvckVhY2goKHRva2VuKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBsZXQgc3RhdHVzO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHN0YXR1cyA9IGZzLmV4aXN0c1N5bmModG9rZW4pO1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICAgICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgICAgIGxvZy5pbmZvKGBUb2tlbiBmaWxlICR7dG9rZW59IG5vdCBmb3VuZC4gQ3JlYXRpbmcgYSBuZXcgb25lLi4uYCk7XG4gICAgICAgICAgZnMud3JpdGVGaWxlU3luYyh0b2tlbiwgdG9rZW4gPT09IFwiLnRva2VuXCIgPyBnaXRUb2tlbiA6IFwiXCIpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXN0YXR1cykge1xuICAgICAgICAgIGZzLndyaXRlRmlsZVN5bmModG9rZW4sIHRva2VuID09PSBcIi50b2tlblwiID8gZ2l0VG9rZW4gOiBcIlwiKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEVycm9yIGNyZWF0aW5nIHRva2VuIGZpbGUgJHt0b2tlbn06ICR7ZX1gKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGdldE9yZygpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IG9yZyA9IGF3YWl0IFVzZXJJbnB1dC5hc2tUZXh0KFxuICAgICAgXCJPcmdhbml6YXRpb25cIixcbiAgICAgIFwiRW50ZXIgdGhlIG9yZ2FuaXphdGlvbiBuYW1lICh3aWxsIGJlIHVzZWQgdG8gc2NvcGUgeW91ciBucG0gcHJvamVjdC4gbGVhdmUgYmxhbmsgdG8gY3JlYXRlIGEgdW5zY29wZWQgcHJvamVjdCk6XCJcbiAgICApO1xuICAgIGNvbnN0IGNvbmZpcm1hdGlvbiA9IGF3YWl0IFVzZXJJbnB1dC5hc2tDb25maXJtYXRpb24oXG4gICAgICBcIkNvbmZpcm0gb3JnYW5pemF0aW9uXCIsXG4gICAgICBcIklzIHRoaXMgb3JnYW5pemF0aW9uIGNvcnJlY3Q/XCIsXG4gICAgICB0cnVlXG4gICAgKTtcbiAgICBpZiAoIWNvbmZpcm1hdGlvbikgcmV0dXJuIHRoaXMuZ2V0T3JnKCk7XG5cbiAgICByZXR1cm4gb3JnO1xuICB9XG5cbiAgYXN5bmMgYXVkaXRGaXgoKSB7XG4gICAgcmV0dXJuIGF3YWl0IHJ1bkNvbW1hbmQoXCJucG0gYXVkaXQgZml4IC0tZm9yY2VcIikucHJvbWlzZTtcbiAgfVxuXG4gIHBhdGNoRmlsZXMoKSB7XG4gICAgY29uc3QgZmlsZXMgPSBbXG4gICAgICAuLi5mc1xuICAgICAgICAucmVhZGRpclN5bmMocGF0aC5qb2luKHByb2Nlc3MuY3dkKCksIFwic3JjXCIpLCB7XG4gICAgICAgICAgcmVjdXJzaXZlOiB0cnVlLFxuICAgICAgICAgIHdpdGhGaWxlVHlwZXM6IHRydWUsXG4gICAgICAgIH0pXG4gICAgICAgIC5maWx0ZXIoKGVudHJ5KSA9PiBlbnRyeS5pc0ZpbGUoKSlcbiAgICAgICAgLm1hcCgoZW50cnkpID0+IHBhdGguam9pbihlbnRyeS5wYXJlbnRQYXRoLCBlbnRyeS5uYW1lKSksXG4gICAgICAuLi5mc1xuICAgICAgICAucmVhZGRpclN5bmMocGF0aC5qb2luKHByb2Nlc3MuY3dkKCksIFwid29ya2RvY3NcIiksIHtcbiAgICAgICAgICByZWN1cnNpdmU6IHRydWUsXG4gICAgICAgICAgd2l0aEZpbGVUeXBlczogdHJ1ZSxcbiAgICAgICAgfSlcbiAgICAgICAgLmZpbHRlcigoZW50cnkpID0+IGVudHJ5LmlzRmlsZSgpICYmIGVudHJ5Lm5hbWUuZW5kc1dpdGgoXCIubWRcIikpXG4gICAgICAgIC5tYXAoKGVudHJ5KSA9PiBwYXRoLmpvaW4oZW50cnkucGFyZW50UGF0aCwgZW50cnkubmFtZSkpLFxuICAgICAgcGF0aC5qb2luKHByb2Nlc3MuY3dkKCksIFwiLmdpdGxhYi1jaS55bWxcIiksXG4gICAgICBwYXRoLmpvaW4ocHJvY2Vzcy5jd2QoKSwgXCJ3b3JrZG9jc1wiLCBcImpzZG9jcy5qc29uXCIpLFxuICAgIF07XG5cbiAgICBmb3IgKGNvbnN0IGZpbGUgb2YgZmlsZXMpIHtcbiAgICAgIHBhdGNoRmlsZShmaWxlIGFzIHN0cmluZywgdGhpcy5yZXBsYWNlbWVudHMpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZURlcGVuZGVuY2llcygpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgb3JpZ2luYWxQa2cgPSBKU09OLnBhcnNlKFxuICAgICAgICBhd2FpdCBIdHRwQ2xpZW50LmRvd25sb2FkRmlsZShgJHtiYXNlVXJsfS9wYWNrYWdlLmpzb25gKVxuICAgICAgKTtcbiAgICAgIGNvbnN0IHsgZGV2RGVwZW5kZW5jaWVzIH0gPSBvcmlnaW5hbFBrZztcblxuICAgICAgY29uc3QgcGtnOiB0eXBlb2Ygb3JpZ2luYWxQa2cgPSBnZXRQYWNrYWdlKCkgYXMge1xuICAgICAgICBzY3JpcHRzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAgICAgfTtcbiAgICAgIE9iamVjdC5rZXlzKHBrZy5zY3JpcHRzKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgaWYgKGtleSBpbiBkZXZEZXBlbmRlbmNpZXMpIHtcbiAgICAgICAgICBjb25zdCByZXBsYWNlZCA9IGRldkRlcGVuZGVuY2llc1trZXldO1xuICAgICAgICAgIGlmIChyZXBsYWNlZCAhPT0gZGV2RGVwZW5kZW5jaWVzW2tleV0pIHtcbiAgICAgICAgICAgIChwa2cgYXMgYW55KVtcImRldkRlcGVuZGVuY2llc1wiXSA9XG4gICAgICAgICAgICAgIChwa2cgYXMgYW55KVtcImRldkRlcGVuZGVuY2llc1wiXSB8fCB7fTtcbiAgICAgICAgICAgIChwa2cgYXMgYW55KVtcImRldkRlcGVuZGVuY2llc1wiXVtrZXldID0gcmVwbGFjZWQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgZnMud3JpdGVGaWxlU3luYyhcInBhY2thZ2UuanNvblwiLCBKU09OLnN0cmluZ2lmeShwa2csIG51bGwsIDIpKTtcbiAgICAgIGF3YWl0IHJ1bkNvbW1hbmQoXCJucG0gaW5zdGFsbFwiKS5wcm9taXNlO1xuICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3IgZml4aW5nIHBhY2thZ2UuanNvbiBkZXBlbmRlbmNpZXM6ICR7ZX1gKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uIFJ1bnMgdGhlIHRlbXBsYXRlIHN5bmNocm9uaXphdGlvbiBwcm9jZXNzLlxuICAgKiBAc3VtbWFyeSBUaGlzIG1ldGhvZCBvcmNoZXN0cmF0ZXMgdGhlIGRvd25sb2FkaW5nIG9mIHZhcmlvdXMgcHJvamVjdCBjb21wb25lbnRzIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBhcmd1bWVudHMuXG4gICAqIEBwYXJhbSB7UGFyc2VBcmdzUmVzdWx0fSBhcmdzIC0gVGhlIHBhcnNlZCBjb21tYW5kLWxpbmUgYXJndW1lbnRzXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICAgKlxuICAgKiBAbWVybWFpZFxuICAgKiBzZXF1ZW5jZURpYWdyYW1cbiAgICogICBwYXJ0aWNpcGFudCBUIGFzIFRlbXBsYXRlU3luY1xuICAgKiAgIHBhcnRpY2lwYW50IEwgYXMgZ2V0TGljZW5zZVxuICAgKiAgIHBhcnRpY2lwYW50IEkgYXMgZ2V0SWRlXG4gICAqICAgcGFydGljaXBhbnQgUyBhcyBnZXRTY3JpcHRzXG4gICAqICAgcGFydGljaXBhbnQgU3QgYXMgZ2V0U3R5bGVzXG4gICAqICAgcGFydGljaXBhbnQgRCBhcyBnZXREb2NzXG4gICAqICAgcGFydGljaXBhbnQgVyBhcyBnZXRXb3JrZmxvd3NcbiAgICogICBwYXJ0aWNpcGFudCBUZSBhcyBnZXRUZW1wbGF0ZXNcbiAgICogICBULT4+VDogUGFyc2UgYXJndW1lbnRzXG4gICAqICAgYWx0IGFsbCBmbGFnIGlzIHRydWVcbiAgICogICAgIFQtPj5UOiBTZXQgYWxsIGNvbXBvbmVudCBmbGFncyB0byB0cnVlXG4gICAqICAgZW5kXG4gICAqICAgYWx0IGxpY2Vuc2UgaXMgc3BlY2lmaWVkXG4gICAqICAgICBULT4+TDogZ2V0TGljZW5zZShsaWNlbnNlKVxuICAgKiAgIGVuZFxuICAgKiAgIGFsdCBpZGUgZmxhZyBpcyB0cnVlXG4gICAqICAgICBULT4+STogZ2V0SWRlKClcbiAgICogICBlbmRcbiAgICogICBhbHQgc2NyaXB0cyBmbGFnIGlzIHRydWVcbiAgICogICAgIFQtPj5TOiBnZXRTY3JpcHRzKClcbiAgICogICBlbmRcbiAgICogICBhbHQgc3R5bGVzIGZsYWcgaXMgdHJ1ZVxuICAgKiAgICAgVC0+PlN0OiBnZXRTdHlsZXMoKVxuICAgKiAgIGVuZFxuICAgKiAgIGFsdCBkb2NzIGZsYWcgaXMgdHJ1ZVxuICAgKiAgICAgVC0+PkQ6IGdldERvY3MoKVxuICAgKiAgIGVuZFxuICAgKiAgIGFsdCB3b3JrZmxvd3MgZmxhZyBpcyB0cnVlXG4gICAqICAgICBULT4+VzogZ2V0V29ya2Zsb3dzKClcbiAgICogICBlbmRcbiAgICogICBhbHQgdGVtcGxhdGVzIGZsYWcgaXMgdHJ1ZVxuICAgKiAgICAgVC0+PlRlOiBnZXRUZW1wbGF0ZXMoKVxuICAgKiAgIGVuZFxuICAgKi9cbiAgYXN5bmMgcnVuKFxuICAgIGFyZ3M6IExvZ2dpbmdDb25maWcgJlxuICAgICAgdHlwZW9mIERlZmF1bHRDb21tYW5kVmFsdWVzICYgeyBbayBpbiBrZXlvZiB0eXBlb2YgYXJnenpdOiB1bmtub3duIH1cbiAgKSB7XG4gICAgbGV0IHsgbGljZW5zZSB9ID0gYXJncztcbiAgICBjb25zdCB7IGJvb3QgfSA9IGFyZ3M7XG4gICAgbGV0IHtcbiAgICAgIGFsbCxcbiAgICAgIHNjcmlwdHMsXG4gICAgICBzdHlsZXMsXG4gICAgICBkb2NzLFxuICAgICAgaWRlLFxuICAgICAgd29ya2Zsb3dzLFxuICAgICAgdGVtcGxhdGVzLFxuICAgICAgZG9ja2VyLFxuICAgICAgdHlwZXNjcmlwdCxcbiAgICAgIGRlcGVuZGVuY2llcyxcbiAgICAgIHRlc3RzLFxuICAgICAgYXV0b21hdGlvbixcbiAgICAgIHBrZyxcbiAgICB9ID0gYXJncztcbiAgICBpZiAoXG4gICAgICBzY3JpcHRzIHx8XG4gICAgICBzdHlsZXMgfHxcbiAgICAgIGRvY3MgfHxcbiAgICAgIGlkZSB8fFxuICAgICAgd29ya2Zsb3dzIHx8XG4gICAgICB0ZW1wbGF0ZXMgfHxcbiAgICAgIGRvY2tlciB8fFxuICAgICAgdHlwZXNjcmlwdCB8fFxuICAgICAgYXV0b21hdGlvbiB8fFxuICAgICAgZGVwZW5kZW5jaWVzIHx8XG4gICAgICB0ZXN0cyB8fFxuICAgICAgcGtnXG4gICAgKVxuICAgICAgYWxsID0gZmFsc2U7XG5cbiAgICBpZiAoYm9vdCkge1xuICAgICAgY29uc3Qgb3JnID0gYXdhaXQgdGhpcy5nZXRPcmcoKTtcbiAgICAgIGNvbnN0IG5hbWUgPSBhd2FpdCBVc2VySW5wdXQuaW5zaXN0Rm9yVGV4dChcbiAgICAgICAgXCJQcm9qZWN0IG5hbWVcIixcbiAgICAgICAgXCJFbnRlciB0aGUgcHJvamVjdCBuYW1lOlwiLFxuICAgICAgICAocmVzOiBzdHJpbmcpID0+IHJlcy5sZW5ndGggPiAxXG4gICAgICApO1xuICAgICAgY29uc3QgYXV0aG9yID0gYXdhaXQgVXNlcklucHV0Lmluc2lzdEZvclRleHQoXG4gICAgICAgIFwiQXV0aG9yXCIsXG4gICAgICAgIFwiRW50ZXIgdGhlIGF1dGhvciBuYW1lOlwiLFxuICAgICAgICAocmVzOiBzdHJpbmcpID0+IHJlcy5sZW5ndGggPiAxXG4gICAgICApO1xuICAgICAgY29uc3QgcGtnTmFtZSA9IG9yZyA/IGBAJHtvcmd9LyR7bmFtZX1gIDogbmFtZTtcblxuICAgICAgYXdhaXQgdGhpcy5pbml0UGFja2FnZShwa2dOYW1lLCBhdXRob3IsIGxpY2Vuc2UgYXMgc3RyaW5nKTtcbiAgICAgIGF3YWl0IHRoaXMuY3JlYXRlVG9rZW5GaWxlcygpO1xuICAgICAgYXdhaXQgdGhpcy5hdWRpdEZpeCgpO1xuICAgICAgdGhpcy5wYXRjaEZpbGVzKCk7XG4gICAgfVxuXG4gICAgaWYgKGFsbCkge1xuICAgICAgc2NyaXB0cyA9IGZhbHNlO1xuICAgICAgc3R5bGVzID0gdHJ1ZTtcbiAgICAgIGRvY3MgPSB0cnVlO1xuICAgICAgaWRlID0gdHJ1ZTtcbiAgICAgIHdvcmtmbG93cyA9IHRydWU7XG4gICAgICB0ZW1wbGF0ZXMgPSB0cnVlO1xuICAgICAgZG9ja2VyID0gdHJ1ZTtcbiAgICAgIHR5cGVzY3JpcHQgPSB0cnVlO1xuICAgICAgcGtnID0gdHJ1ZTtcbiAgICAgIGRlcGVuZGVuY2llcyA9IHRydWU7XG4gICAgICB0ZXN0cyA9IHRydWU7XG4gICAgICBhdXRvbWF0aW9uID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBzY3JpcHRzID09PSBcInVuZGVmaW5lZFwiKVxuICAgICAgc2NyaXB0cyA9IGF3YWl0IFVzZXJJbnB1dC5hc2tDb25maXJtYXRpb24oXG4gICAgICAgIFwic2NyaXB0c1wiLFxuICAgICAgICBcIkRvIHlvdSB3YW50IHRvIGdldCBzY3JpcHRzP1wiLFxuICAgICAgICB0cnVlXG4gICAgICApO1xuXG4gICAgaWYgKHNjcmlwdHMpIGF3YWl0IHRoaXMuZ2V0U2NyaXB0cygpO1xuXG4gICAgdGhpcy5sb2FkVmFsdWVzRnJvbVBhY2thZ2UoKTtcbiAgICBpZiAoIWFsbCAmJiB0eXBlb2YgbGljZW5zZSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgY29uc3QgY29uZmlybWF0aW9uID0gYXdhaXQgVXNlcklucHV0LmFza0NvbmZpcm1hdGlvbihcbiAgICAgICAgXCJsaWNlbnNlXCIsXG4gICAgICAgIFwiRG8geW91IHdhbnQgdG8gc2V0IGEgbGljZW5zZT9cIixcbiAgICAgICAgdHJ1ZVxuICAgICAgKTtcbiAgICAgIGlmIChjb25maXJtYXRpb24pXG4gICAgICAgIGxpY2Vuc2UgPSBhd2FpdCBVc2VySW5wdXQuaW5zaXN0Rm9yVGV4dChcbiAgICAgICAgICBcImxpY2Vuc2VcIixcbiAgICAgICAgICBcIkVudGVyIHRoZSBkZXNpcmVkIExpY2Vuc2UgKE1JVHxHUEx8QXBhY2hlfExHUEx8QUdQTCk6XCIsXG4gICAgICAgICAgKHZhbCkgPT4gISF2YWwgJiYgISF2YWwubWF0Y2goL14oTUlUfEdQTHxBcGFjaGV8TEdQTHxBR1BMKSQvZylcbiAgICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBsaWNlbnNlICE9PSBcInVuZGVmaW5lZFwiKVxuICAgICAgYXdhaXQgdGhpcy5nZXRMaWNlbnNlKFxuICAgICAgICBsaWNlbnNlIGFzIFwiTUlUXCIgfCBcIkdQTFwiIHwgXCJBcGFjaGVcIiB8IFwiTEdQTFwiIHwgXCJBR1BMXCJcbiAgICAgICk7XG5cbiAgICBpZiAodHlwZW9mIGlkZSA9PT0gXCJ1bmRlZmluZWRcIilcbiAgICAgIGlkZSA9IGF3YWl0IFVzZXJJbnB1dC5hc2tDb25maXJtYXRpb24oXG4gICAgICAgIFwiaWRlXCIsXG4gICAgICAgIFwiRG8geW91IHdhbnQgdG8gZ2V0IGlkZSBjb25maWdzP1wiLFxuICAgICAgICB0cnVlXG4gICAgICApO1xuXG4gICAgaWYgKGlkZSkgYXdhaXQgdGhpcy5nZXRJZGUoKTtcblxuICAgIGlmICh0eXBlb2YgdHlwZXNjcmlwdCA9PT0gXCJ1bmRlZmluZWRcIilcbiAgICAgIHR5cGVzY3JpcHQgPSBhd2FpdCBVc2VySW5wdXQuYXNrQ29uZmlybWF0aW9uKFxuICAgICAgICBcInR5cGVzY3JpcHRcIixcbiAgICAgICAgXCJEbyB5b3Ugd2FudCB0byBnZXQgdHlwZXNjcmlwdCBjb25maWdzP1wiLFxuICAgICAgICB0cnVlXG4gICAgICApO1xuICAgIGlmICh0eXBlc2NyaXB0KSBhd2FpdCB0aGlzLmdldFR5cGVzY3JpcHQoKTtcblxuICAgIGlmICh0eXBlb2YgZG9ja2VyID09PSBcInVuZGVmaW5lZFwiKVxuICAgICAgZG9ja2VyID0gYXdhaXQgVXNlcklucHV0LmFza0NvbmZpcm1hdGlvbihcbiAgICAgICAgXCJkb2NrZXJcIixcbiAgICAgICAgXCJEbyB5b3Ugd2FudCB0byBnZXQgZG9ja2VyIGNvbmZpZ3M/XCIsXG4gICAgICAgIHRydWVcbiAgICAgICk7XG5cbiAgICBpZiAoZG9ja2VyKSBhd2FpdCB0aGlzLmdldERvY2tlcigpO1xuICAgIGlmICh0eXBlb2YgYXV0b21hdGlvbiA9PT0gXCJ1bmRlZmluZWRcIilcbiAgICAgIGF1dG9tYXRpb24gPSBhd2FpdCBVc2VySW5wdXQuYXNrQ29uZmlybWF0aW9uKFxuICAgICAgICBcImF1dG9tYXRpb25cIixcbiAgICAgICAgXCJEbyB5b3Ugd2FudCB0byBnZXQgYXV0b21hdGlvbiBjb25maWdzP1wiLFxuICAgICAgICB0cnVlXG4gICAgICApO1xuICAgIGlmIChhdXRvbWF0aW9uKSBhd2FpdCB0aGlzLmdldEF1dG9tYXRpb24oKTtcblxuICAgIGlmICh0eXBlb2Ygc3R5bGVzID09PSBcInVuZGVmaW5lZFwiKVxuICAgICAgc3R5bGVzID0gYXdhaXQgVXNlcklucHV0LmFza0NvbmZpcm1hdGlvbihcbiAgICAgICAgXCJzdHlsZXNcIixcbiAgICAgICAgXCJEbyB5b3Ugd2FudCB0byBnZXQgc3R5bGVzP1wiLFxuICAgICAgICB0cnVlXG4gICAgICApO1xuICAgIGlmIChzdHlsZXMpIGF3YWl0IHRoaXMuZ2V0U3R5bGVzKCk7XG5cbiAgICBpZiAodHlwZW9mIGRvY3MgPT09IFwidW5kZWZpbmVkXCIpXG4gICAgICBkb2NzID0gYXdhaXQgVXNlcklucHV0LmFza0NvbmZpcm1hdGlvbihcbiAgICAgICAgXCJkb2NzXCIsXG4gICAgICAgIFwiRG8geW91IHdhbnQgdG8gZ2V0IGRvY3M/XCIsXG4gICAgICAgIHRydWVcbiAgICAgICk7XG4gICAgaWYgKGRvY3MpIGF3YWl0IHRoaXMuZ2V0RG9jcygpO1xuICAgIGlmICh0eXBlb2Ygd29ya2Zsb3dzID09PSBcInVuZGVmaW5lZFwiKVxuICAgICAgd29ya2Zsb3dzID0gYXdhaXQgVXNlcklucHV0LmFza0NvbmZpcm1hdGlvbihcbiAgICAgICAgXCJ3b3JrZmxvd3NcIixcbiAgICAgICAgXCJEbyB5b3Ugd2FudCB0byBnZXQgd29ya2Zsb3dzP1wiLFxuICAgICAgICB0cnVlXG4gICAgICApO1xuICAgIGlmICh3b3JrZmxvd3MpIGF3YWl0IHRoaXMuZ2V0V29ya2Zsb3dzKCk7XG4gICAgaWYgKHR5cGVvZiB0ZW1wbGF0ZXMgPT09IFwidW5kZWZpbmVkXCIpXG4gICAgICB0ZW1wbGF0ZXMgPSBhd2FpdCBVc2VySW5wdXQuYXNrQ29uZmlybWF0aW9uKFxuICAgICAgICBcInRlbXBsYXRlc1wiLFxuICAgICAgICBcIkRvIHlvdSB3YW50IHRvIGdldCB0ZW1wbGF0ZXM/XCIsXG4gICAgICAgIHRydWVcbiAgICAgICk7XG4gICAgaWYgKHRlbXBsYXRlcykgYXdhaXQgdGhpcy5nZXRUZW1wbGF0ZXMoKTtcbiAgICBpZiAodHlwZW9mIHBrZyA9PT0gXCJ1bmRlZmluZWRcIilcbiAgICAgIHBrZyA9IGF3YWl0IFVzZXJJbnB1dC5hc2tDb25maXJtYXRpb24oXG4gICAgICAgIFwicGtnXCIsXG4gICAgICAgIFwiRG8geW91IHdhbnQgdG8gdXBkYXRlIHlvdXIgcGFja2FnZS5qc29uIHNjcmlwdHM/XCIsXG4gICAgICAgIHRydWVcbiAgICAgICk7XG4gICAgaWYgKHBrZykgYXdhaXQgdGhpcy51cGRhdGVQYWNrYWdlU2NyaXBzKCk7XG5cbiAgICBpZiAodHlwZW9mIHRlc3RzID09PSBcInVuZGVmaW5lZFwiKVxuICAgICAgdGVzdHMgPSBhd2FpdCBVc2VySW5wdXQuYXNrQ29uZmlybWF0aW9uKFxuICAgICAgICBcInBrZ1wiLFxuICAgICAgICBcIkRvIHlvdSB3YW50IHRvIHVwZGF0ZSB5b3VyIHRlc3QgY29uZmlncz9cIixcbiAgICAgICAgdHJ1ZVxuICAgICAgKTtcbiAgICBpZiAodGVzdHMpIGF3YWl0IHRoaXMuZ2V0VGVzdHMoKTtcblxuICAgIGlmICh0eXBlb2YgZGVwZW5kZW5jaWVzID09PSBcInVuZGVmaW5lZFwiKVxuICAgICAgZGVwZW5kZW5jaWVzID0gYXdhaXQgVXNlcklucHV0LmFza0NvbmZpcm1hdGlvbihcbiAgICAgICAgXCJwa2dcIixcbiAgICAgICAgXCJEbyB5b3Ugd2FudCB0byB1cGRhdGUgZGV2IGRlcGVuZGVuY2llcz9cIixcbiAgICAgICAgdHJ1ZVxuICAgICAgKTtcbiAgICBpZiAoZGVwZW5kZW5jaWVzKSBhd2FpdCB0aGlzLnVwZGF0ZURlcGVuZGVuY2llcygpO1xuICB9XG59XG4iLCJpbXBvcnQgeyBUZW1wbGF0ZVN5bmMgfSBmcm9tIFwiLi4vY2xpL2NvbW1hbmRzXCI7XG5cbm5ldyBUZW1wbGF0ZVN5bmMoKVxuICAuZXhlY3V0ZSgpXG4gIC50aGVuKCgpID0+XG4gICAgVGVtcGxhdGVTeW5jLmxvZy5pbmZvKFxuICAgICAgXCJUZW1wbGF0ZSB1cGRhdGVkIHN1Y2Nlc3NmdWxseS4gUGxlYXNlIGNvbmZpcm0gYWxsIGNoYW5nZXMgYmVmb3JlIGNvbW1pdGluZ1wiXG4gICAgKVxuICApXG4gIC5jYXRjaCgoZTogdW5rbm93bikgPT4ge1xuICAgIFRlbXBsYXRlU3luYy5sb2cuZXJyb3IoYEVycm9yIHByZXBhcmluZyB0ZW1wbGF0ZTogJHtlfWApO1xuICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgfSk7XG4iXSwibmFtZXMiOlsiYWN0aW9uIiwic3RyaXAiLCJyZXF1aXJlJCQwIiwicmVxdWlyZSQkMSIsImNsZWFyIiwiZmlndXJlc18xIiwic3R5bGUiLCJsaW5lcyIsIndyYXAiLCJlbnRyaWVzVG9EaXNwbGF5IiwidXRpbCIsInJlcXVpcmUkJDIiLCJyZXF1aXJlJCQzIiwicmVxdWlyZSQkNCIsInJlcXVpcmUkJDUiLCJyZXF1aXJlJCQ2IiwicmVxdWlyZSQkNyIsInByb21wdCIsInRleHQiLCJzZWxlY3QiLCJ0b2dnbGUiLCJkYXRlcGFydCIsIm1lcmlkaWVtIiwiZGF5IiwiaG91cnMiLCJtaWxsaXNlY29uZHMiLCJtaW51dGVzIiwibW9udGgiLCJzZWNvbmRzIiwieWVhciIsImRhdGVwYXJ0cyIsInJlcXVpcmUkJDgiLCJkYXRlIiwibnVtYmVyIiwibXVsdGlzZWxlY3QiLCJhdXRvY29tcGxldGUiLCJhdXRvY29tcGxldGVNdWx0aXNlbGVjdCIsImNvbmZpcm0iLCJlbGVtZW50cyIsInByb21wdHMiLCJwYXJzZUFyZ3MiLCJzcGF3biJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVBLENBQUFBLFFBQWMsR0FBRyxD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LE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLEdBQUcsMkJBQTJCLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxjQUFtRCxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxTQUFTLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsTUFBTSxJQUFJLFNBQVMsQ0FBQyx1SUFBdUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLGdCQUFnQixHQUFHLElBQUksRUFBRSxNQUFNLEdBQUcsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsU0FBUyxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxTQUFTLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsZ0JBQWdCLElBQUksRUFBRSxDQUFDLE1BQU0sSUFBSSxJQUFJLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLElBQUksTUFBTSxFQUFFLE1BQU0sR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUM7O0NBRXArQixTQUFTLDJCQUEyQixDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxJQUFJLE9BQU8sQ0FBQyxLQUFLLFFBQVEsRUFBRSxPQUFPLGlCQUFpQixDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssUUFBUSxJQUFJLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUMsS0FBSyxLQUFLLEVBQUUsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssV0FBVyxJQUFJLDBDQUEwQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLGlCQUFpQixDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQzs7Q0FFOVosU0FBUyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUUsSUFBSSxHQUFHLElBQUksSUFBSSxJQUFJLEdBQUcsR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLEdBQUcsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxHQUFHLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDOztDQUVqTCxNQUFNLEtBQUssR0FBR0MsY0FBa0IsRUFBQTs7Q0FFaEMsTUFBTSxRQUFRLEdBQUdDLFVBQXFCO0FBQ3RDLE9BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxLQUFLO0FBQzVCLE9BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxNQUFNOztBQUU5QixDQUFBLE1BQU0sS0FBSyxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTTtBQUMzQztBQUNBO0FBQ0E7QUFDQTs7O0FBR0EsQ0FBQUMsT0FBYyxHQUFHLFVBQVUsTUFBTSxFQUFFLE9BQU8sRUFBRTtBQUM1QyxHQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxLQUFLLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0dBQzlDLElBQUksSUFBSSxHQUFHLENBQUM7R0FDWixNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQzs7QUFFckMsR0FBRSxJQUFJLFNBQVMsR0FBRywwQkFBMEIsQ0FBQyxLQUFLLENBQUM7QUFDbkQsT0FBTSxLQUFLOztBQUVYLEdBQUUsSUFBSTtBQUNOLEtBQUksS0FBSyxTQUFTLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxHQUFHO0FBQ3hELE9BQU0sSUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDLEtBQUs7T0FDdEIsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUM7QUFDcEU7SUFDRyxDQUFDLE9BQU8sR0FBRyxFQUFFO0FBQ2hCLEtBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7QUFDcEIsSUFBRyxTQUFTO0tBQ1IsU0FBUyxDQUFDLENBQUMsRUFBRTtBQUNqQjs7QUFFQSxHQUFFLE9BQU8sS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7RUFDekI7Ozs7Ozs7Ozs7O0FDdkNELENBQUEsTUFBTSxJQUFJLEdBQUc7R0FDWCxPQUFPLEVBQUUsR0FBRztHQUNaLFNBQVMsRUFBRSxHQUFHO0dBQ2QsU0FBUyxFQUFFLEdBQUc7R0FDZCxVQUFVLEVBQUUsR0FBRztHQUNmLE9BQU8sRUFBRSxHQUFHO0dBQ1osUUFBUSxFQUFFLEdBQUc7R0FDYixJQUFJLEVBQUUsR0FBRztHQUNULEtBQUssRUFBRSxHQUFHO0dBQ1YsUUFBUSxFQUFFLEdBQUc7R0FDYixZQUFZLEVBQUUsR0FBRztHQUNqQixJQUFJLEVBQUUsR0FBRztBQUNYLEdBQUUsT0FBTyxFQUFFO0VBQ1Y7QUFDRCxDQUFBLE1BQU0sR0FBRyxHQUFHO0FBQ1osR0FBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87QUFDdkIsR0FBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7QUFDM0IsR0FBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7QUFDM0IsR0FBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7R0FDM0IsT0FBTyxFQUFFLEtBQUs7R0FDZCxRQUFRLEVBQUUsS0FBSztHQUNmLElBQUksRUFBRSxHQUFHO0dBQ1QsS0FBSyxFQUFFLEdBQUc7R0FDVixRQUFRLEVBQUUsS0FBSztHQUNmLFlBQVksRUFBRSxHQUFHO0dBQ2pCLElBQUksRUFBRSxHQUFHO0FBQ1gsR0FBRSxPQUFPLEVBQUU7RUFDVjtDQUNELE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxRQUFRLEtBQUssT0FBTyxHQUFHLEdBQUcsR0FBRyxJQUFJO0FBQ3pELENBQUFDLFdBQWMsR0FBRyxPQUFPOzs7Ozs7Ozs7OztDQzdCeEIsTUFBTSxDQUFDLEdBQUcsVUFBZ0I7O0NBRTFCLE1BQU0sT0FBTyxHQUFHRixnQkFBQSxFQUFvQixDQUFDOzs7QUFHckMsQ0FBQSxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0FBQzdCLEdBQUUsUUFBUSxFQUFFO0tBQ1IsS0FBSyxFQUFFLENBQUM7S0FDUixNQUFNLEVBQUUsS0FBSyxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU07SUFDekM7QUFDSCxHQUFFLEtBQUssRUFBRTtLQUNMLEtBQUssRUFBRSxDQUFDO0tBQ1IsTUFBTSxFQUFFLEtBQUssSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNO0lBQzFDO0FBQ0gsR0FBRSxTQUFTLEVBQUU7S0FDVCxLQUFLLEVBQUUsQ0FBQztLQUNSLE1BQU0sRUFBRSxLQUFLLElBQUk7SUFDbEI7QUFDSCxHQUFFLE9BQU8sRUFBRTtLQUNQLEtBQUssRUFBRSxDQUFDO0FBQ1osS0FBSSxNQUFNLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRSxLQUFLLENBQUM7QUFDOUI7QUFDQSxFQUFDLENBQUM7O0FBRUYsQ0FBQSxNQUFNLE1BQU0sR0FBRyxJQUFJLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUM7OztBQUd0RCxDQUFBLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7R0FDNUIsT0FBTyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztHQUM3QixJQUFJLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO0dBQzNCLE1BQU0sRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7QUFDakMsR0FBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHO0FBQ3JCLEVBQUMsQ0FBQzs7QUFFRixDQUFBLE1BQU0sTUFBTSxHQUFHLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxNQUFNLEtBQUssT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLEdBQUcsTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLEdBQUcsSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQzs7O0FBR3RJLENBQUEsTUFBTSxTQUFTLEdBQUcsVUFBVSxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQzs7Q0FFNUYsTUFBTSxJQUFJLEdBQUcsQ0FBQyxVQUFVLEVBQUUsUUFBUSxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLFFBQVEsR0FBRyxPQUFPLENBQUMsWUFBWSxHQUFHLEdBQUcsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDOztBQUVoSCxDQUFBRyxPQUFjLEdBQUc7QUFDakIsR0FBRSxNQUFNO0FBQ1IsR0FBRSxNQUFNO0FBQ1IsR0FBRSxPQUFPO0FBQ1QsR0FBRSxNQUFNO0FBQ1IsR0FBRSxTQUFTO0dBQ1Q7RUFDRDs7Ozs7Ozs7Ozs7Q0NoREQsTUFBTSxLQUFLLEdBQUdKLGNBQWtCLEVBQUE7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7OztBQUdBLENBQUFLLE9BQWMsR0FBRyxVQUFVLEdBQUcsRUFBRSxPQUFPLEVBQUU7QUFDekMsR0FBRSxJQUFJLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7QUFDckQsR0FBRSxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sS0FBSyxDQUFDLE1BQU07QUFDbkMsR0FBRSxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztFQUM3RTs7Ozs7Ozs7OztBQ1pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxDQUFBQyxNQUFjLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxHQUFHLEVBQUUsS0FBSztBQUNyQyxHQUFFLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLElBQUksRUFBRTtBQUNuSSxHQUFFLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLO0FBQzFCLEdBQUUsT0FBTyxDQUFDLEdBQUcsSUFBSSxFQUFFLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLO0tBQ25GLElBQUksQ0FBQyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxJQUFJLEtBQUssSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsS0FBSyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxD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YSxHQUFHO0tBQ2QsT0FBTyxJQUFJLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDO0FBQy9HOztBQUVBLEdBQUUsTUFBTSxHQUFHO0FBQ1gsS0FBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7O0FBRXJCLEtBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUU7QUFDM0IsT0FBTSxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDbEosT0FBTSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzlEOztLQUVJLEtBQUssQ0FBQyxNQUFNLEVBQUU7QUFDbEIsS0FBSSxJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUU7S0FDckIsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FB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O0FBRUEsR0FBRSxNQUFNLEdBQUc7QUFDWCxLQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNyQixLQUFJLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0tBQy9HLEtBQUssQ0FBQyxNQUFNLEVBQUU7QUFDbEIsS0FBSSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO0tBQzFRLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO0FBQy9EOztBQUVBOztBQUVBLENBQUFTLFFBQWMsR0FBRyxZQUFZOzs7Ozs7Ozs7OztBQ3pIN0IsQ0FBQSxNQUFN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SSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNsSixPQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDOUQ7O0tBRUksS0FBSyxDQUFDLE1BQU0sRUFBRTtBQUNsQixLQUFJLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDOztBQUUxQixLQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztBQUV4TyxLQUFJLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtPQUNkLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMs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QUcsRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDO0FBQy9CLEtBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO0tBQzFCLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDakI7O0FBRUEsR0FBRSxNQUFNLEdBQUc7S0FDUCxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLE9BQU8sSUFBSSxDQUFDLElBQUksRUFBRTtBQUM3QyxLQUFJLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUNqRCxLQUFJLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7S0FDdEMsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDN0IsS0FBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7S0FDMUIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUM7S0FDN0IsSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNqQjs7QUFFQSxHQUFFLGFBQWEsR0FBRztBQUNsQixLQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLE9BQU8sSUFBSSxDQUFDLElBQUksRUFBRTtBQUM1RSxLQUFJLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQzdDLEtBQUksSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7S0FDMUMsSUFBSSxDQUFDLEtBQUssR0FBRyxD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QyxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekMsTUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JDLE1BQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QyxLQUFHLENBQUM7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztFQUdBLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxJQUFJLFFBQVEsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQSxFQUFBLENBQUMsQ0FBQyxRQUFRLEdBQUcsSUFBSSxJQUFJO0FBQ3JCLElBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxVQUFVO0FBQ3pCLElBQUUsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztHQUNwQjtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQSxFQUFBLENBQUMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxJQUFJO0FBQ3RCLElBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxXQUFXO0FBQzFCLElBQUUsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztHQUNwQjtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7RUFHQSxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksSUFBSSxRQUFRLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQztBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0VBR0EsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLElBQUksUUFBUSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7RUFHQSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksSUFBSSxRQUFRLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQztBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQSxFQUFBLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxJQUFJO0FBQ2pCLElBQUUsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFNBQVMsSUFBSSxHQUFHO0FBQ25DLElBQUUsT0FBTyxRQUFRLENBQUMsWUFBWSxFQUFFLElBQUksRUFBRTtBQUN0QyxNQUFJLFFBQVEsRUFBRSxHQUFHLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUU7QUFDckQsS0FBRyxDQUFDO0dBQ0g7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7RUFHQSxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksSUFBSSxRQUFRLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQztBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7RUFHQSxDQUFDLENBQUMsTUFBTSxHQUFHLElBQUksSUFBSSxRQUFRLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQztBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdB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QUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxTQUFTLENBQUMsR0FBRyxFQUFFLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsU0FBUyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixJQUFJLEVBQUUsQ0FBQyxNQUFNLElBQUksSUFBSSxFQUFFLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxJQUFJLE1BQU0sRUFBRSxNQUFNLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDOztDQUVwK0IsU0FBUywyQkFBMkIsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsSUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRLEVBQUUsT0FBTyxpQkFBaUIsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLFFBQVEsSUFBSSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLEtBQUssS0FBSyxFQUFFLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUks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RSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDO0FBQzVDLEtBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO0tBQzFCLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDakI7O0FBRUEsR0FBRSxJQUFJLFFBQVEsQ0FBQyxFQUFFLEVBQUU7QUFDbkIsS0FBSSxJQUFJLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUU7QUFDckU7O0dBRUUsSUFBSSxRQUFRLEdBQUc7QUFDakIsS0FBSSxJQUFJLE1BQU07QUFDZCxLQUFJLElBQUksT0FBTyxJQUFJLENBQUMsR0FBRyxLQUFLLFFBQVE7T0FDOUIsTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUNyQyxVQUFTLElBQUksT0FBTyxJQUFJLENBQUMsR0FBRyxLQUFLLFFBQVE7T0FDbkMsTUFBTSxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUU7QUFDbEMsS0FBSSxPQUFPLE1BQU0sSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFO0FBQy9EOztHQUVFLFVBQVUsQ0FBQyxDQUFDLEVBQUU7QUFDaEIsS0FBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUM7QUFDbkIsS0FBSSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUM7T0FDN0IsSUFBSSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7VUFDckMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUs7S0FDckMsSUFBSSxDQUFDLElBQUksRUFBRTtBQUNmOztBQUVBLEdBQUUsTUFBTSxRQUFRLENBQUMsRUFB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RUFBRTtBQUNaLEtBQUksSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDN0MsS0FBSSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQzFDLEtBQUksSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7S0FDN0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDN0IsS0FBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7S0FDMUIsSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUNqQjs7QUFFQSxHQUFFLE1BQU0sR0FBRztLQUNQLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsT0FBTyxJQUFJLENBQUMsSUFBSSxFQUFFO0FBQzdDLEtBQUksSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQy9DLEtBQUksSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztLQUN0QyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUM3QixLQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztLQUMxQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUMzQixJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ2pCOztBQUVBLEdBQUUsYUFBYSxHQUFHO0FBQ2xCLEtBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFD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O0tBQzNCLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDakI7O0FBRUEsR0FBRSxLQUFLLEdBQUc7QUFDVixLQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLE9BQU8sSUFBSSxDQUFDLElBQUksRUFBRTtLQUN0RSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUMzQixJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ2pCOztHQUVFLFlBQVksQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUU7QUFDM0MsS0FBSSxJQUFJLElBQUk7QUFDWixLQUFJLElBQUksTUFBTSxHQUFHLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxHQUFHLEtBQUssR0FBRyxPQUFPLENBQUMsU0FBUyxHQUFHLEdBQUc7QUFDNUUsS0FBSSxJQUFJLEtBQUssR0FBRyxPQUFPLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUs7QUFDbkUsS0FBSSxNQUFNLEdBQUcsQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksSUFBSSxNQUFNO0FBQzFFLEtBQUksSUFBSSxDQUFDLENBQUMsV0FBVyxFQUFFO09BQ2pCLElBQUksR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDbEMsT0FBTSxJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDakUsWUFBVyxDQUFDLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1NBQzVD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L0MsWUFBWSxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLE9BQU8sQ0FBQyxHQUFHLEVBQUUsU0FBUyxHQUFHLENBQUMsRUFBRTtBQUNoQyxRQUFRLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxTQUFTO0FBQy9DLFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQztBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRTtBQUNkLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQztBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksS0FBSyxDQUFDLEdBQUcsRUFBRTtBQUNmLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksS0FBSyxDQUFDLEdBQUcsRUFBRTtBQUNmLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksU0FBUyxDQUFDLE1BQU0sRUFBRTtBQUN0QixRQUFRLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLEVBQUUsR0FBRyxNQUFNLEVBQUU7QUFDdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxNQUFNLE9BQU8sQ0FBQztBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksU0FBUyxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsTUFBTSxFQUFFLE1BQU0sS0FBSztBQUNqRCxRQUFRLE9BQU8sSUFBSSxVQUFVLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQztBQUM3QyxLQUFLLENBQUM7QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksU0FBUyxJQUFJLENBQUMsT0FBTyxHQUFHLG9CQUFvQixDQUFDO0FBQ2pELElBQUksV0FBVyxHQUFHO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksT0FBTyxVQUFVLENBQUMsT0FBTyxFQUFFO0FBQy9CLFFBQVEsT0FBTyxDQUFDLFFBQVEsR0FBRyxPQUFPO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxPQUFPLFNBQVMsQ0FBQyxNQUFNLEVBQUU7QUFDN0IsUUFBUSxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksT0FBTyxTQUFTLEdBQUc7QUFDdkIsUUFBUSxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUM7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLE9BQU8sR0FBRyxHQUFHO0FBQ2pCLFFBQVEsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUM7QUFDMUUsUUFBUSxPQUFPLElBQUksQ0FBQyxNQUFNO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLE9BQU8sT0FBTyxDQUFDLEdBQUcsRUFBRSxTQUFTLEdBQUcsQ0FBQyxFQUFFO0FBQ3ZDLFFBQVEsT0FBTyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUM7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLE9BQU8sSUFBSSxDQUFDLEdBQUcsRUFBRTtBQUNyQixRQUFRLE9BQU8sSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLE9BQU8sS0FBSyxDQUFDLEdBQUcsRUFBRTtBQUN0QixRQUFRLE9BQU8sSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUM7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLE9BQU8sS0FBSyxDQUFDLEdBQUcsRUFBRTtBQUN0QixRQUFRLE9BQU8sSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUM7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLE9BQU8sS0FBSyxDQUFDLEdBQUcsRUFBRTtBQUN0QixRQUFRLE9BQU8sSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUM7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxPQUFPLEdB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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUMxWUE7Ozs7QUFJRztBQUNILE1BQU0sTUFBTSxHQUFHO0FBQ2IsSUFBQSxnQkFBZ0I7QUFDaEIsSUFBQSxnQkFBZ0I7QUFDaEIsSUFBQSxnQkFBZ0I7QUFDaEIsSUFBQSxnQkFBZ0I7QUFDaEIsSUFBQSxnQkFBZ0I7QUFDaEIsSUFBQSxnQkFBZ0I7QUFDaEIsSUFBQSxnQkFBZ0I7QUFDaEIsSUFBQSxnQkFB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QU0sSUFBSSxDQUFDLFFBQVEsRUFBRTtRQUVoQyxJQUFJLE9BQU8sWUFBWSxLQUFLLFdBQVc7QUFDckMsWUFBQSxZQUFZLEdBQUcsTUFBTSxTQUFTLENBQUMsZUFBZSxDQUM1QyxLQUFLLEVBQ0wseUNBQXlDLEVBQ3pDLElBQUksQ0FDTDtBQUNILFFBQUEsSUFBSSxZQUFZO0FBQUUsWUFBQSxNQUFNLElBQUksQ0FBQyxrQkFBa0IsRUFBRTs7QUFFcEQ7O0FDbnBCRCxJQUFJLFlBQVk7QUFDYixLQUFBLE9BQU87QUFDUCxLQUFBLElBQUksQ0FBQyxNQUNKLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUNuQiw0RUFBNEUsQ0FDN0U7QUFFRixLQUFBLEtBQUssQ0FBQyxDQUFDLENBQVUsS0FBSTtJQUNwQixZQUFZLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUE2QiwwQkFBQSxFQUFBLENBQUMsQ0FBRSxDQUFBLENBQUM7QUFDeEQsSUFBQSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNqQixDQUFDLENBQUM7OyIsInhfZ29vZ2xlX2lnbm9yZUxpc3QiOlswLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxLDIyLDIzLDI0LDI1LDI2LDI3LDI4LDI5LDMwLDMxLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDU4LDU5LDYwLDYxLDYyLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDc5XX0=
|