UNPKG

projen

Version:

CDK for software projects

845 lines • 227 kB
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.TargetTriple = exports.AnnotationStyle = exports.IndexFormat = exports.AuthPolicy = exports.TrustedPublishing = exports.TorchMode = exports.ResolutionMode = exports.PythonPreference = exports.PythonDownloads = exports.PrereleaseMode = exports.LinkMode = exports.KeyringProviderType = exports.IndexStrategy = exports.ForkStrategy = exports.ExcludeNewerOverride = exports.AddBoundsKind = void 0;
exports.toJson_UvConfiguration = toJson_UvConfiguration;
exports.toJson_AuditOptions = toJson_AuditOptions;
exports.toJson_BuildBackendSettings = toJson_BuildBackendSettings;
exports.toJson_SchemaConflictItem = toJson_SchemaConflictItem;
exports.toJson_DependencyGroupSettings = toJson_DependencyGroupSettings;
exports.toJson_StaticMetadata = toJson_StaticMetadata;
exports.toJson_Index = toJson_Index;
exports.toJson_PipOptions = toJson_PipOptions;
exports.toJson_ToolUvWorkspace = toJson_ToolUvWorkspace;
exports.toJson_WheelDataIncludes = toJson_WheelDataIncludes;
exports.toJson_IndexCacheControl = toJson_IndexCacheControl;
exports.toJson_PipGroupName = toJson_PipGroupName;
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
/**
 * Converts an object of type 'UvConfiguration' to JSON representation.
 * @internal
 */
/* eslint-disable max-len, @stylistic/max-len, quote-props, @stylistic/quote-props */
function toJson_UvConfiguration(obj) {
    if (obj === undefined) {
        return undefined;
    }
    const result = {
        'add-bounds': obj.addBounds,
        'allow-insecure-host': obj.allowInsecureHost?.map(y => y),
        'audit': toJson_AuditOptions(obj.audit),
        'build-backend': toJson_BuildBackendSettings(obj.buildBackend),
        'build-constraint-dependencies': obj.buildConstraintDependencies?.map(y => y),
        'cache-dir': obj.cacheDir,
        'cache-keys': obj.cacheKeys?.map(y => y),
        'check-url': obj.checkUrl,
        'compile-bytecode': obj.compileBytecode,
        'concurrent-builds': obj.concurrentBuilds,
        'concurrent-downloads': obj.concurrentDownloads,
        'concurrent-installs': obj.concurrentInstalls,
        'config-settings': ((obj.configSettings) === undefined) ? undefined : (Object.entries(obj.configSettings).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {})),
        'config-settings-package': ((obj.configSettingsPackage) === undefined) ? undefined : (Object.entries(obj.configSettingsPackage).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: ((i[1]) === undefined) ? undefined : (Object.entries(i[1]).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {})) }), {})),
        'conflicts': obj.conflicts?.map(y => y?.map(y => toJson_SchemaConflictItem(y))),
        'constraint-dependencies': obj.constraintDependencies?.map(y => y),
        'default-groups': obj.defaultGroups,
        'dependency-groups': ((obj.dependencyGroups) === undefined) ? undefined : (Object.entries(obj.dependencyGroups).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: toJson_DependencyGroupSettings(i[1]) }), {})),
        'dependency-metadata': obj.dependencyMetadata?.map(y => toJson_StaticMetadata(y)),
        'dev-dependencies': obj.devDependencies?.map(y => y),
        'environments': obj.environments?.map(y => y),
        'exclude-dependencies': obj.excludeDependencies?.map(y => y),
        'exclude-newer': obj.excludeNewer?.value,
        'exclude-newer-package': ((obj.excludeNewerPackage) === undefined) ? undefined : (Object.entries(obj.excludeNewerPackage).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1]?.value }), {})),
        'extra-build-dependencies': ((obj.extraBuildDependencies) === undefined) ? undefined : (Object.entries(obj.extraBuildDependencies).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1]?.map(y => y) }), {})),
        'extra-build-variables': ((obj.extraBuildVariables) === undefined) ? undefined : (Object.entries(obj.extraBuildVariables).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: ((i[1]) === undefined) ? undefined : (Object.entries(i[1]).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {})) }), {})),
        'extra-index-url': obj.extraIndexUrl?.map(y => y),
        'find-links': obj.findLinks?.map(y => y),
        'fork-strategy': obj.forkStrategy,
        'http-proxy': obj.httpProxy,
        'https-proxy': obj.httpsProxy,
        'index': obj.index?.map(y => toJson_Index(y)),
        'index-strategy': obj.indexStrategy,
        'index-url': obj.indexUrl,
        'keyring-provider': obj.keyringProvider,
        'link-mode': obj.linkMode,
        'managed': obj.managed,
        'native-tls': obj.nativeTls,
        'no-binary': obj.noBinary,
        'no-binary-package': obj.noBinaryPackage?.map(y => y),
        'no-build': obj.noBuild,
        'no-build-isolation': obj.noBuildIsolation,
        'no-build-isolation-package': obj.noBuildIsolationPackage?.map(y => y),
        'no-build-package': obj.noBuildPackage?.map(y => y),
        'no-cache': obj.noCache,
        'no-index': obj.noIndex,
        'no-proxy': obj.noProxy?.map(y => y),
        'no-sources': obj.noSources,
        'no-sources-package': obj.noSourcesPackage?.map(y => y),
        'offline': obj.offline,
        'override-dependencies': obj.overrideDependencies?.map(y => y),
        'package': obj.package,
        'pip': toJson_PipOptions(obj.pip),
        'prerelease': obj.prerelease,
        'preview': obj.preview,
        'preview-features': obj.previewFeatures,
        'publish-url': obj.publishUrl,
        'pypy-install-mirror': obj.pypyInstallMirror,
        'python-downloads': obj.pythonDownloads,
        'python-downloads-json-url': obj.pythonDownloadsJsonUrl,
        'python-install-mirror': obj.pythonInstallMirror,
        'python-preference': obj.pythonPreference,
        'reinstall': obj.reinstall,
        'reinstall-package': obj.reinstallPackage?.map(y => y),
        'required-environments': obj.requiredEnvironments?.map(y => y),
        'required-version': obj.requiredVersion,
        'resolution': obj.resolution,
        'sources': ((obj.sources) === undefined) ? undefined : (Object.entries(obj.sources).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1]?.map(y => y) }), {})),
        'system-certs': obj.systemCerts,
        'torch-backend': obj.torchBackend,
        'trusted-publishing': obj.trustedPublishing,
        'upgrade': obj.upgrade,
        'upgrade-package': obj.upgradePackage?.map(y => y),
        'workspace': toJson_ToolUvWorkspace(obj.workspace),
    };
    // filter undefined values
    return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
}
/* eslint-enable max-len, @stylistic/max-len, quote-props, @stylistic/quote-props */
/**
 * The default version specifier when adding a dependency.
 *
 * @schema AddBoundsKind
 */
var AddBoundsKind;
(function (AddBoundsKind) {
    /** Only a lower bound, e.g., `>=1.2.3`. (lower) */
    AddBoundsKind["LOWER"] = "lower";
    /** Allow the same major version, similar to the semver caret, e.g., `>=1.2.3, <2.0.0`.
  
  Leading zeroes are skipped, e.g. `>=0.1.2, <0.2.0`. (major) */
    AddBoundsKind["MAJOR"] = "major";
    /** Allow the same minor version, similar to the semver tilde, e.g., `>=1.2.3, <1.3.0`.
  
  Leading zeroes are skipped, e.g. `>=0.1.2, <0.1.3`. (minor) */
    AddBoundsKind["MINOR"] = "minor";
    /** Pin the exact version, e.g., `==1.2.3`.
  
  This option is not recommended, as versions are already pinned in the uv lockfile. (exact) */
    AddBoundsKind["EXACT"] = "exact";
})(AddBoundsKind || (exports.AddBoundsKind = AddBoundsKind = {}));
/**
 * Converts an object of type 'AuditOptions' to JSON representation.
 * @internal
 */
/* eslint-disable max-len, @stylistic/max-len, quote-props, @stylistic/quote-props */
function toJson_AuditOptions(obj) {
    if (obj === undefined) {
        return undefined;
    }
    const result = {
        'ignore': obj.ignore?.map(y => y),
        'ignore-until-fixed': obj.ignoreUntilFixed?.map(y => y),
    };
    // filter undefined values
    return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
}
/**
 * Converts an object of type 'BuildBackendSettings' to JSON representation.
 * @internal
 */
/* eslint-disable max-len, @stylistic/max-len, quote-props, @stylistic/quote-props */
function toJson_BuildBackendSettings(obj) {
    if (obj === undefined) {
        return undefined;
    }
    const result = {
        'data': toJson_WheelDataIncludes(obj.data),
        'default-excludes': obj.defaultExcludes,
        'module-name': obj.moduleName,
        'module-root': obj.moduleRoot,
        'namespace': obj.namespace,
        'source-exclude': obj.sourceExclude?.map(y => y),
        'source-include': obj.sourceInclude?.map(y => y),
        'wheel-exclude': obj.wheelExclude?.map(y => y),
    };
    // filter undefined values
    return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
}
/**
 * Converts an object of type 'SchemaConflictItem' to JSON representation.
 * @internal
 */
/* eslint-disable max-len, @stylistic/max-len, quote-props, @stylistic/quote-props */
function toJson_SchemaConflictItem(obj) {
    if (obj === undefined) {
        return undefined;
    }
    const result = {
        'extra': obj.extra,
        'group': obj.group,
        'package': obj.package,
    };
    // filter undefined values
    return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
}
/**
 * Converts an object of type 'DependencyGroupSettings' to JSON representation.
 * @internal
 */
/* eslint-disable max-len, @stylistic/max-len, quote-props, @stylistic/quote-props */
function toJson_DependencyGroupSettings(obj) {
    if (obj === undefined) {
        return undefined;
    }
    const result = {
        'requires-python': obj.requiresPython,
    };
    // filter undefined values
    return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
}
/**
 * Converts an object of type 'StaticMetadata' to JSON representation.
 * @internal
 */
/* eslint-disable max-len, @stylistic/max-len, quote-props, @stylistic/quote-props */
function toJson_StaticMetadata(obj) {
    if (obj === undefined) {
        return undefined;
    }
    const result = {
        'name': obj.name,
        'provides-extra': obj.providesExtra?.map(y => y),
        'requires-dist': obj.requiresDist?.map(y => y),
        'requires-python': obj.requiresPython,
        'version': obj.version,
    };
    // filter undefined values
    return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
}
/* eslint-enable max-len, @stylistic/max-len, quote-props, @stylistic/quote-props */
/**
 * @schema ExcludeNewerOverride
 */
class ExcludeNewerOverride {
    value;
    static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.python.uvConfig.ExcludeNewerOverride", version: "0.103.12" };
    static fromBoolean(value) {
        return new ExcludeNewerOverride(value);
    }
    static fromString(value) {
        return new ExcludeNewerOverride(value);
    }
    constructor(value) {
        this.value = value;
    }
}
exports.ExcludeNewerOverride = ExcludeNewerOverride;
/**
 * @schema ForkStrategy
 */
var ForkStrategy;
(function (ForkStrategy) {
    /** Optimize for selecting the fewest number of versions for each package. Older versions may
  be preferred if they are compatible with a wider range of supported Python versions or
  platforms. (fewest) */
    ForkStrategy["FEWEST"] = "fewest";
    /** Optimize for selecting latest supported version of each package, for each supported Python
  version. (requires-python) */
    ForkStrategy["REQUIRES_HYPHEN_PYTHON"] = "requires-python";
})(ForkStrategy || (exports.ForkStrategy = ForkStrategy = {}));
/**
 * Converts an object of type 'Index' to JSON representation.
 * @internal
 */
/* eslint-disable max-len, @stylistic/max-len, quote-props, @stylistic/quote-props */
function toJson_Index(obj) {
    if (obj === undefined) {
        return undefined;
    }
    const result = {
        'authenticate': obj.authenticate,
        'cache-control': toJson_IndexCacheControl(obj.cacheControl),
        'default': obj.default,
        'exclude-newer': obj.excludeNewer?.value,
        'explicit': obj.explicit,
        'format': obj.format,
        'ignore-error-codes': obj.ignoreErrorCodes?.map(y => y),
        'name': obj.name,
        'publish-url': obj.publishUrl,
        'url': obj.url,
    };
    // filter undefined values
    return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
}
/* eslint-enable max-len, @stylistic/max-len, quote-props, @stylistic/quote-props */
/**
 * @schema IndexStrategy
 */
var IndexStrategy;
(function (IndexStrategy) {
    /** Only use results from the first index that returns a match for a given package name.
  
  While this differs from pip's behavior, it's the default index strategy as it's the most
  secure. (first-index) */
    IndexStrategy["FIRST_HYPHEN_INDEX"] = "first-index";
    /** Search for every package name across all indexes, exhausting the versions from the first
  index before moving on to the next.
  
  In this strategy, we look for every package across all indexes. When resolving, we attempt
  to use versions from the indexes in order, such that we exhaust all available versions from
  the first index before moving on to the next. Further, if a version is found to be
  incompatible in the first index, we do not reconsider that version in subsequent indexes,
  even if the secondary index might contain compatible versions (e.g., variants of the same
  versions with different ABI tags or Python version constraints).
  
  See: <https://peps.python.org/pep-0708/> (unsafe-first-match) */
    IndexStrategy["UNSAFE_HYPHEN_FIRST_HYPHEN_MATCH"] = "unsafe-first-match";
    /** Search for every package name across all indexes, preferring the "best" version found. If a
  package version is in multiple indexes, only look at the entry for the first index.
  
  In this strategy, we look for every package across all indexes. When resolving, we consider
  all versions from all indexes, choosing the "best" version found (typically, the highest
  compatible version).
  
  This most closely matches pip's behavior, but exposes the resolver to "dependency confusion"
  attacks whereby malicious actors can publish packages to public indexes with the same name
  as internal packages, causing the resolver to install the malicious package in lieu of
  the intended internal package.
  
  See: <https://peps.python.org/pep-0708/> (unsafe-best-match) */
    IndexStrategy["UNSAFE_HYPHEN_BEST_HYPHEN_MATCH"] = "unsafe-best-match";
})(IndexStrategy || (exports.IndexStrategy = IndexStrategy = {}));
/**
 * Keyring provider type to use for credential lookup.
 *
 * @schema KeyringProviderType
 */
var KeyringProviderType;
(function (KeyringProviderType) {
    /** Do not use keyring for credential lookup. (disabled) */
    KeyringProviderType["DISABLED"] = "disabled";
    /** Use the `keyring` command for credential lookup. (subprocess) */
    KeyringProviderType["SUBPROCESS"] = "subprocess";
})(KeyringProviderType || (exports.KeyringProviderType = KeyringProviderType = {}));
/**
 * The method to use when linking.
 *
 * Defaults to [`LinkMode::Clone`] on macOS and Linux (which support copy-on-write on
 * APFS and btrfs/xfs/bcachefs respectively), and [`LinkMode::Hardlink`] on other
 * platforms.
 *
 * @default LinkMode::Clone`] on macOS and Linux (which support copy-on-write on
 * @schema LinkMode
 */
var LinkMode;
(function (LinkMode) {
    /** Clone (i.e., copy-on-write) packages from the source into the destination. (clone) */
    LinkMode["CLONE"] = "clone";
    /** Copy packages from the source into the destination. (copy) */
    LinkMode["COPY"] = "copy";
    /** Hard link packages from the source into the destination. (hardlink) */
    LinkMode["HARDLINK"] = "hardlink";
    /** Symbolically link packages from the source into the destination. (symlink) */
    LinkMode["SYMLINK"] = "symlink";
})(LinkMode || (exports.LinkMode = LinkMode = {}));
/**
 * Converts an object of type 'PipOptions' to JSON representation.
 * @internal
 */
/* eslint-disable max-len, @stylistic/max-len, quote-props, @stylistic/quote-props */
function toJson_PipOptions(obj) {
    if (obj === undefined) {
        return undefined;
    }
    const result = {
        'all-extras': obj.allExtras,
        'allow-empty-requirements': obj.allowEmptyRequirements,
        'annotation-style': obj.annotationStyle,
        'break-system-packages': obj.breakSystemPackages,
        'compile-bytecode': obj.compileBytecode,
        'config-settings': ((obj.configSettings) === undefined) ? undefined : (Object.entries(obj.configSettings).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {})),
        'config-settings-package': ((obj.configSettingsPackage) === undefined) ? undefined : (Object.entries(obj.configSettingsPackage).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: ((i[1]) === undefined) ? undefined : (Object.entries(i[1]).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {})) }), {})),
        'custom-compile-command': obj.customCompileCommand,
        'dependency-metadata': obj.dependencyMetadata?.map(y => toJson_StaticMetadata(y)),
        'emit-build-options': obj.emitBuildOptions,
        'emit-find-links': obj.emitFindLinks,
        'emit-index-annotation': obj.emitIndexAnnotation,
        'emit-index-url': obj.emitIndexUrl,
        'emit-marker-expression': obj.emitMarkerExpression,
        'exclude-newer': obj.excludeNewer?.value,
        'exclude-newer-package': ((obj.excludeNewerPackage) === undefined) ? undefined : (Object.entries(obj.excludeNewerPackage).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1]?.value }), {})),
        'extra': obj.extra?.map(y => y),
        'extra-build-dependencies': ((obj.extraBuildDependencies) === undefined) ? undefined : (Object.entries(obj.extraBuildDependencies).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1]?.map(y => y) }), {})),
        'extra-build-variables': ((obj.extraBuildVariables) === undefined) ? undefined : (Object.entries(obj.extraBuildVariables).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: ((i[1]) === undefined) ? undefined : (Object.entries(i[1]).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {})) }), {})),
        'extra-index-url': obj.extraIndexUrl?.map(y => y),
        'find-links': obj.findLinks?.map(y => y),
        'fork-strategy': obj.forkStrategy,
        'generate-hashes': obj.generateHashes,
        'group': obj.group?.map(y => toJson_PipGroupName(y)),
        'index-strategy': obj.indexStrategy,
        'index-url': obj.indexUrl,
        'keyring-provider': obj.keyringProvider,
        'link-mode': obj.linkMode,
        'no-annotate': obj.noAnnotate,
        'no-binary': obj.noBinary?.map(y => y),
        'no-build': obj.noBuild,
        'no-build-isolation': obj.noBuildIsolation,
        'no-build-isolation-package': obj.noBuildIsolationPackage?.map(y => y),
        'no-deps': obj.noDeps,
        'no-emit-package': obj.noEmitPackage?.map(y => y),
        'no-extra': obj.noExtra?.map(y => y),
        'no-header': obj.noHeader,
        'no-index': obj.noIndex,
        'no-sources': obj.noSources,
        'no-sources-package': obj.noSourcesPackage?.map(y => y),
        'no-strip-extras': obj.noStripExtras,
        'no-strip-markers': obj.noStripMarkers,
        'only-binary': obj.onlyBinary?.map(y => y),
        'output-file': obj.outputFile,
        'prefix': obj.prefix,
        'prerelease': obj.prerelease,
        'python': obj.python,
        'python-platform': obj.pythonPlatform,
        'python-version': obj.pythonVersion,
        'reinstall': obj.reinstall,
        'reinstall-package': obj.reinstallPackage?.map(y => y),
        'require-hashes': obj.requireHashes,
        'resolution': obj.resolution,
        'strict': obj.strict,
        'system': obj.system,
        'target': obj.target,
        'torch-backend': obj.torchBackend,
        'universal': obj.universal,
        'upgrade': obj.upgrade,
        'upgrade-package': obj.upgradePackage?.map(y => y),
        'verify-hashes': obj.verifyHashes,
    };
    // filter undefined values
    return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
}
/* eslint-enable max-len, @stylistic/max-len, quote-props, @stylistic/quote-props */
/**
 * @schema PrereleaseMode
 */
var PrereleaseMode;
(function (PrereleaseMode) {
    /** Disallow all pre-release versions. (disallow) */
    PrereleaseMode["DISALLOW"] = "disallow";
    /** Allow all pre-release versions. (allow) */
    PrereleaseMode["ALLOW"] = "allow";
    /** Allow pre-release versions if all versions of a package are pre-release. (if-necessary) */
    PrereleaseMode["IF_HYPHEN_NECESSARY"] = "if-necessary";
    /** Allow pre-release versions for first-party packages with explicit pre-release markers in
  their version requirements. (explicit) */
    PrereleaseMode["EXPLICIT"] = "explicit";
    /** Allow pre-release versions if all versions of a package are pre-release, or if the package
  has an explicit pre-release marker in its version requirements. (if-necessary-or-explicit) */
    PrereleaseMode["IF_HYPHEN_NECESSARY_HYPHEN_OR_HYPHEN_EXPLICIT"] = "if-necessary-or-explicit";
})(PrereleaseMode || (exports.PrereleaseMode = PrereleaseMode = {}));
/**
 * @schema PythonDownloads
 */
var PythonDownloads;
(function (PythonDownloads) {
    /** Automatically download managed Python installations when needed. (automatic) */
    PythonDownloads["AUTOMATIC"] = "automatic";
    /** Do not automatically download managed Python installations; require explicit installation. (manual) */
    PythonDownloads["MANUAL"] = "manual";
    /** Do not ever allow Python downloads. (never) */
    PythonDownloads["NEVER"] = "never";
})(PythonDownloads || (exports.PythonDownloads = PythonDownloads = {}));
/**
 * @schema PythonPreference
 */
var PythonPreference;
(function (PythonPreference) {
    /** Only use managed Python installations; never use system Python installations. (only-managed) */
    PythonPreference["ONLY_HYPHEN_MANAGED"] = "only-managed";
    /** Prefer managed Python installations over system Python installations.
  
  System Python installations are still preferred over downloading managed Python versions.
  Use `only-managed` to always fetch a managed Python version. (managed) */
    PythonPreference["MANAGED"] = "managed";
    /** Prefer system Python installations over managed Python installations.
  
  If a system Python installation cannot be found, a managed Python installation can be used. (system) */
    PythonPreference["SYSTEM"] = "system";
    /** Only use system Python installations; never use managed Python installations. (only-system) */
    PythonPreference["ONLY_HYPHEN_SYSTEM"] = "only-system";
})(PythonPreference || (exports.PythonPreference = PythonPreference = {}));
/**
 * @schema ResolutionMode
 */
var ResolutionMode;
(function (ResolutionMode) {
    /** Resolve the highest compatible version of each package. (highest) */
    ResolutionMode["HIGHEST"] = "highest";
    /** Resolve the lowest compatible version of each package. (lowest) */
    ResolutionMode["LOWEST"] = "lowest";
    /** Resolve the lowest compatible version of any direct dependencies, and the highest
  compatible version of any transitive dependencies. (lowest-direct) */
    ResolutionMode["LOWEST_HYPHEN_DIRECT"] = "lowest-direct";
})(ResolutionMode || (exports.ResolutionMode = ResolutionMode = {}));
/**
 * The strategy to use when determining the appropriate PyTorch index.
 *
 * @schema TorchMode
 */
var TorchMode;
(function (TorchMode) {
    /** Select the appropriate PyTorch index based on the operating system and CUDA driver version. (auto) */
    TorchMode["AUTO"] = "auto";
    /** Use the CPU-only PyTorch index. (cpu) */
    TorchMode["CPU"] = "cpu";
    /** Use the PyTorch index for CUDA 13.2. (cu132) */
    TorchMode["CU132"] = "cu132";
    /** Use the PyTorch index for CUDA 13.0. (cu130) */
    TorchMode["CU130"] = "cu130";
    /** Use the PyTorch index for CUDA 12.9. (cu129) */
    TorchMode["CU129"] = "cu129";
    /** Use the PyTorch index for CUDA 12.8. (cu128) */
    TorchMode["CU128"] = "cu128";
    /** Use the PyTorch index for CUDA 12.6. (cu126) */
    TorchMode["CU126"] = "cu126";
    /** Use the PyTorch index for CUDA 12.5. (cu125) */
    TorchMode["CU125"] = "cu125";
    /** Use the PyTorch index for CUDA 12.4. (cu124) */
    TorchMode["CU124"] = "cu124";
    /** Use the PyTorch index for CUDA 12.3. (cu123) */
    TorchMode["CU123"] = "cu123";
    /** Use the PyTorch index for CUDA 12.2. (cu122) */
    TorchMode["CU122"] = "cu122";
    /** Use the PyTorch index for CUDA 12.1. (cu121) */
    TorchMode["CU121"] = "cu121";
    /** Use the PyTorch index for CUDA 12.0. (cu120) */
    TorchMode["CU120"] = "cu120";
    /** Use the PyTorch index for CUDA 11.8. (cu118) */
    TorchMode["CU118"] = "cu118";
    /** Use the PyTorch index for CUDA 11.7. (cu117) */
    TorchMode["CU117"] = "cu117";
    /** Use the PyTorch index for CUDA 11.6. (cu116) */
    TorchMode["CU116"] = "cu116";
    /** Use the PyTorch index for CUDA 11.5. (cu115) */
    TorchMode["CU115"] = "cu115";
    /** Use the PyTorch index for CUDA 11.4. (cu114) */
    TorchMode["CU114"] = "cu114";
    /** Use the PyTorch index for CUDA 11.3. (cu113) */
    TorchMode["CU113"] = "cu113";
    /** Use the PyTorch index for CUDA 11.2. (cu112) */
    TorchMode["CU112"] = "cu112";
    /** Use the PyTorch index for CUDA 11.1. (cu111) */
    TorchMode["CU111"] = "cu111";
    /** Use the PyTorch index for CUDA 11.0. (cu110) */
    TorchMode["CU110"] = "cu110";
    /** Use the PyTorch index for CUDA 10.2. (cu102) */
    TorchMode["CU102"] = "cu102";
    /** Use the PyTorch index for CUDA 10.1. (cu101) */
    TorchMode["CU101"] = "cu101";
    /** Use the PyTorch index for CUDA 10.0. (cu100) */
    TorchMode["CU100"] = "cu100";
    /** Use the PyTorch index for CUDA 9.2. (cu92) */
    TorchMode["CU92"] = "cu92";
    /** Use the PyTorch index for CUDA 9.1. (cu91) */
    TorchMode["CU91"] = "cu91";
    /** Use the PyTorch index for CUDA 9.0. (cu90) */
    TorchMode["CU90"] = "cu90";
    /** Use the PyTorch index for CUDA 8.0. (cu80) */
    TorchMode["CU80"] = "cu80";
    /** Use the PyTorch index for ROCm 7.2. (rocm7.2) */
    TorchMode["ROCM7_2"] = "rocm7.2";
    /** Use the PyTorch index for ROCm 7.1. (rocm7.1) */
    TorchMode["ROCM7_1"] = "rocm7.1";
    /** Use the PyTorch index for ROCm 7.0. (rocm7.0) */
    TorchMode["ROCM7_0"] = "rocm7.0";
    /** Use the PyTorch index for ROCm 6.4. (rocm6.4) */
    TorchMode["ROCM6_4"] = "rocm6.4";
    /** Use the PyTorch index for ROCm 6.3. (rocm6.3) */
    TorchMode["ROCM6_3"] = "rocm6.3";
    /** Use the PyTorch index for ROCm 6.2.4. (rocm6.2.4) */
    TorchMode["ROCM6_2_4"] = "rocm6.2.4";
    /** Use the PyTorch index for ROCm 6.2. (rocm6.2) */
    TorchMode["ROCM6_2"] = "rocm6.2";
    /** Use the PyTorch index for ROCm 6.1. (rocm6.1) */
    TorchMode["ROCM6_1"] = "rocm6.1";
    /** Use the PyTorch index for ROCm 6.0. (rocm6.0) */
    TorchMode["ROCM6_0"] = "rocm6.0";
    /** Use the PyTorch index for ROCm 5.7. (rocm5.7) */
    TorchMode["ROCM5_7"] = "rocm5.7";
    /** Use the PyTorch index for ROCm 5.6. (rocm5.6) */
    TorchMode["ROCM5_6"] = "rocm5.6";
    /** Use the PyTorch index for ROCm 5.5. (rocm5.5) */
    TorchMode["ROCM5_5"] = "rocm5.5";
    /** Use the PyTorch index for ROCm 5.4.2. (rocm5.4.2) */
    TorchMode["ROCM5_4_2"] = "rocm5.4.2";
    /** Use the PyTorch index for ROCm 5.4. (rocm5.4) */
    TorchMode["ROCM5_4"] = "rocm5.4";
    /** Use the PyTorch index for ROCm 5.3. (rocm5.3) */
    TorchMode["ROCM5_3"] = "rocm5.3";
    /** Use the PyTorch index for ROCm 5.2. (rocm5.2) */
    TorchMode["ROCM5_2"] = "rocm5.2";
    /** Use the PyTorch index for ROCm 5.1.1. (rocm5.1.1) */
    TorchMode["ROCM5_1_1"] = "rocm5.1.1";
    /** Use the PyTorch index for ROCm 4.2. (rocm4.2) */
    TorchMode["ROCM4_2"] = "rocm4.2";
    /** Use the PyTorch index for ROCm 4.1. (rocm4.1) */
    TorchMode["ROCM4_1"] = "rocm4.1";
    /** Use the PyTorch index for ROCm 4.0.1. (rocm4.0.1) */
    TorchMode["ROCM4_0_1"] = "rocm4.0.1";
    /** Use the PyTorch index for Intel XPU. (xpu) */
    TorchMode["XPU"] = "xpu";
})(TorchMode || (exports.TorchMode = TorchMode = {}));
/**
 * @schema TrustedPublishing
 */
var TrustedPublishing;
(function (TrustedPublishing) {
    /** always */
    TrustedPublishing["ALWAYS"] = "always";
    /** never */
    TrustedPublishing["NEVER"] = "never";
    /** Attempt trusted publishing when we're in a supported environment, continue if that fails.
  
  Supported environments include GitHub Actions and GitLab CI/CD. (automatic) */
    TrustedPublishing["AUTOMATIC"] = "automatic";
})(TrustedPublishing || (exports.TrustedPublishing = TrustedPublishing = {}));
/**
 * Converts an object of type 'ToolUvWorkspace' to JSON representation.
 * @internal
 */
/* eslint-disable max-len, @stylistic/max-len, quote-props, @stylistic/quote-props */
function toJson_ToolUvWorkspace(obj) {
    if (obj === undefined) {
        return undefined;
    }
    const result = {
        'exclude': obj.exclude?.map(y => y),
        'members': obj.members?.map(y => y),
    };
    // filter undefined values
    return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
}
/**
 * Converts an object of type 'WheelDataIncludes' to JSON representation.
 * @internal
 */
/* eslint-disable max-len, @stylistic/max-len, quote-props, @stylistic/quote-props */
function toJson_WheelDataIncludes(obj) {
    if (obj === undefined) {
        return undefined;
    }
    const result = {
        'data': obj.data,
        'headers': obj.headers,
        'platlib': obj.platlib,
        'purelib': obj.purelib,
        'scripts': obj.scripts,
    };
    // filter undefined values
    return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
}
/* eslint-enable max-len, @stylistic/max-len, quote-props, @stylistic/quote-props */
/**
 * When to use authentication.
 *
 * @schema AuthPolicy
 */
var AuthPolicy;
(function (AuthPolicy) {
    /** Authenticate when necessary.
  
  If credentials are provided, they will be used. Otherwise, an unauthenticated request will
  be attempted first. If the request fails, uv will search for credentials. If credentials are
  found, an authenticated request will be attempted. (auto) */
    AuthPolicy["AUTO"] = "auto";
    /** Always authenticate.
  
  If credentials are not provided, uv will eagerly search for credentials. If credentials
  cannot be found, uv will error instead of attempting an unauthenticated request. (always) */
    AuthPolicy["ALWAYS"] = "always";
    /** Never authenticate.
  
  If credentials are provided, uv will error. uv will not search for credentials. (never) */
    AuthPolicy["NEVER"] = "never";
})(AuthPolicy || (exports.AuthPolicy = AuthPolicy = {}));
/**
 * Converts an object of type 'IndexCacheControl' to JSON representation.
 * @internal
 */
/* eslint-disable max-len, @stylistic/max-len, quote-props, @stylistic/quote-props */
function toJson_IndexCacheControl(obj) {
    if (obj === undefined) {
        return undefined;
    }
    const result = {
        'api': obj.api,
        'files': obj.files,
    };
    // filter undefined values
    return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
}
/* eslint-enable max-len, @stylistic/max-len, quote-props, @stylistic/quote-props */
/**
 * @schema IndexFormat
 */
var IndexFormat;
(function (IndexFormat) {
    /** A PyPI-style index implementing the Simple Repository API. (simple) */
    IndexFormat["SIMPLE"] = "simple";
    /** A `--find-links`-style index containing a flat list of wheels and source distributions. (flat) */
    IndexFormat["FLAT"] = "flat";
})(IndexFormat || (exports.IndexFormat = IndexFormat = {}));
/**
 * Indicate the style of annotation comments, used to indicate the dependencies that requested each
 * package.
 *
 * @schema AnnotationStyle
 */
var AnnotationStyle;
(function (AnnotationStyle) {
    /** Render the annotations on a single, comma-separated line. (line) */
    AnnotationStyle["LINE"] = "line";
    /** Render each annotation on its own line. (split) */
    AnnotationStyle["SPLIT"] = "split";
})(AnnotationStyle || (exports.AnnotationStyle = AnnotationStyle = {}));
/**
 * Converts an object of type 'PipGroupName' to JSON representation.
 * @internal
 */
/* eslint-disable max-len, @stylistic/max-len, quote-props, @stylistic/quote-props */
function toJson_PipGroupName(obj) {
    if (obj === undefined) {
        return undefined;
    }
    const result = {
        'name': obj.name,
        'path': obj.path,
    };
    // filter undefined values
    return Object.entries(result).reduce((r, i) => (i[1] === undefined) ? r : ({ ...r, [i[0]]: i[1] }), {});
}
/* eslint-enable max-len, @stylistic/max-len, quote-props, @stylistic/quote-props */
/**
 * The supported target triples. Each triple consists of an architecture, vendor, and operating
 * system.
 *
 * See: <https://doc.rust-lang.org/nightly/rustc/platform-support.html>
 *
 * @schema TargetTriple
 */
var TargetTriple;
(function (TargetTriple) {
    /** An alias for `x86_64-pc-windows-msvc`, the default target for Windows. (windows) */
    TargetTriple["WINDOWS"] = "windows";
    /** An alias for `x86_64-unknown-linux-gnu`, the default target for Linux. (linux) */
    TargetTriple["LINUX"] = "linux";
    /** An alias for `aarch64-apple-darwin`, the default target for macOS. (macos) */
    TargetTriple["MACOS"] = "macos";
    /** A 64-bit x86 Windows target. (x86_64-pc-windows-msvc) */
    TargetTriple["X86_UNDERSCORE_64_HYPHEN_PC_HYPHEN_WINDOWS_HYPHEN_MSVC"] = "x86_64-pc-windows-msvc";
    /** An ARM64 Windows target. (aarch64-pc-windows-msvc) */
    TargetTriple["AARCH64_HYPHEN_PC_HYPHEN_WINDOWS_HYPHEN_MSVC"] = "aarch64-pc-windows-msvc";
    /** A 32-bit x86 Windows target. (i686-pc-windows-msvc) */
    TargetTriple["I686_HYPHEN_PC_HYPHEN_WINDOWS_HYPHEN_MSVC"] = "i686-pc-windows-msvc";
    /** An x86 Linux target. Equivalent to `x86_64-manylinux_2_28`. (x86_64-unknown-linux-gnu) */
    TargetTriple["X86_UNDERSCORE_64_HYPHEN_UNKNOWN_HYPHEN_LINUX_HYPHEN_GNU"] = "x86_64-unknown-linux-gnu";
    /** An ARM-based macOS target, as seen on Apple Silicon devices
  
  By default, assumes the least-recent, non-EOL macOS version (13.0), but respects
  the `MACOSX_DEPLOYMENT_TARGET` environment variable if set. (aarch64-apple-darwin) */
    TargetTriple["AARCH64_HYPHEN_APPLE_HYPHEN_DARWIN"] = "aarch64-apple-darwin";
    /** An x86 macOS target.
  
  By default, assumes the least-recent, non-EOL macOS version (13.0), but respects
  the `MACOSX_DEPLOYMENT_TARGET` environment variable if set. (x86_64-apple-darwin) */
    TargetTriple["X86_UNDERSCORE_64_HYPHEN_APPLE_HYPHEN_DARWIN"] = "x86_64-apple-darwin";
    /** An ARM64 Linux target. Equivalent to `aarch64-manylinux_2_28`. (aarch64-unknown-linux-gnu) */
    TargetTriple["AARCH64_HYPHEN_UNKNOWN_HYPHEN_LINUX_HYPHEN_GNU"] = "aarch64-unknown-linux-gnu";
    /** An ARM64 Linux target. (aarch64-unknown-linux-musl) */
    TargetTriple["AARCH64_HYPHEN_UNKNOWN_HYPHEN_LINUX_HYPHEN_MUSL"] = "aarch64-unknown-linux-musl";
    /** An `x86_64` Linux target. (x86_64-unknown-linux-musl) */
    TargetTriple["X86_UNDERSCORE_64_HYPHEN_UNKNOWN_HYPHEN_LINUX_HYPHEN_MUSL"] = "x86_64-unknown-linux-musl";
    /** A RISCV64 Linux target. (riscv64-unknown-linux) */
    TargetTriple["RISCV64_HYPHEN_UNKNOWN_HYPHEN_LINUX"] = "riscv64-unknown-linux";
    /** An `x86_64` target for the `manylinux2014` platform. Equivalent to `x86_64-manylinux_2_17`. (x86_64-manylinux2014) */
    TargetTriple["X86_UNDERSCORE_64_HYPHEN_MANYLINUX2014"] = "x86_64-manylinux2014";
    /** An `x86_64` target for the `manylinux_2_17` platform. (x86_64-manylinux_2_17) */
    TargetTriple["X86_UNDERSCORE_64_HYPHEN_MANYLINUX_UNDERSCORE_2_UNDERSCORE_17"] = "x86_64-manylinux_2_17";
    /** An `x86_64` target for the `manylinux_2_28` platform. (x86_64-manylinux_2_28) */
    TargetTriple["X86_UNDERSCORE_64_HYPHEN_MANYLINUX_UNDERSCORE_2_UNDERSCORE_28"] = "x86_64-manylinux_2_28";
    /** An `x86_64` target for the `manylinux_2_31` platform. (x86_64-manylinux_2_31) */
    TargetTriple["X86_UNDERSCORE_64_HYPHEN_MANYLINUX_UNDERSCORE_2_UNDERSCORE_31"] = "x86_64-manylinux_2_31";
    /** An `x86_64` target for the `manylinux_2_32` platform. (x86_64-manylinux_2_32) */
    TargetTriple["X86_UNDERSCORE_64_HYPHEN_MANYLINUX_UNDERSCORE_2_UNDERSCORE_32"] = "x86_64-manylinux_2_32";
    /** An `x86_64` target for the `manylinux_2_33` platform. (x86_64-manylinux_2_33) */
    TargetTriple["X86_UNDERSCORE_64_HYPHEN_MANYLINUX_UNDERSCORE_2_UNDERSCORE_33"] = "x86_64-manylinux_2_33";
    /** An `x86_64` target for the `manylinux_2_34` platform. (x86_64-manylinux_2_34) */
    TargetTriple["X86_UNDERSCORE_64_HYPHEN_MANYLINUX_UNDERSCORE_2_UNDERSCORE_34"] = "x86_64-manylinux_2_34";
    /** An `x86_64` target for the `manylinux_2_35` platform. (x86_64-manylinux_2_35) */
    TargetTriple["X86_UNDERSCORE_64_HYPHEN_MANYLINUX_UNDERSCORE_2_UNDERSCORE_35"] = "x86_64-manylinux_2_35";
    /** An `x86_64` target for the `manylinux_2_36` platform. (x86_64-manylinux_2_36) */
    TargetTriple["X86_UNDERSCORE_64_HYPHEN_MANYLINUX_UNDERSCORE_2_UNDERSCORE_36"] = "x86_64-manylinux_2_36";
    /** An `x86_64` target for the `manylinux_2_37` platform. (x86_64-manylinux_2_37) */
    TargetTriple["X86_UNDERSCORE_64_HYPHEN_MANYLINUX_UNDERSCORE_2_UNDERSCORE_37"] = "x86_64-manylinux_2_37";
    /** An `x86_64` target for the `manylinux_2_38` platform. (x86_64-manylinux_2_38) */
    TargetTriple["X86_UNDERSCORE_64_HYPHEN_MANYLINUX_UNDERSCORE_2_UNDERSCORE_38"] = "x86_64-manylinux_2_38";
    /** An `x86_64` target for the `manylinux_2_39` platform. (x86_64-manylinux_2_39) */
    TargetTriple["X86_UNDERSCORE_64_HYPHEN_MANYLINUX_UNDERSCORE_2_UNDERSCORE_39"] = "x86_64-manylinux_2_39";
    /** An `x86_64` target for the `manylinux_2_40` platform. (x86_64-manylinux_2_40) */
    TargetTriple["X86_UNDERSCORE_64_HYPHEN_MANYLINUX_UNDERSCORE_2_UNDERSCORE_40"] = "x86_64-manylinux_2_40";
    /** An ARM64 target for the `manylinux2014` platform. Equivalent to `aarch64-manylinux_2_17`. (aarch64-manylinux2014) */
    TargetTriple["AARCH64_HYPHEN_MANYLINUX2014"] = "aarch64-manylinux2014";
    /** An ARM64 target for the `manylinux_2_17` platform. (aarch64-manylinux_2_17) */
    TargetTriple["AARCH64_HYPHEN_MANYLINUX_UNDERSCORE_2_UNDERSCORE_17"] = "aarch64-manylinux_2_17";
    /** An ARM64 target for the `manylinux_2_28` platform. (aarch64-manylinux_2_28) */
    TargetTriple["AARCH64_HYPHEN_MANYLINUX_UNDERSCORE_2_UNDERSCORE_28"] = "aarch64-manylinux_2_28";
    /** An ARM64 target for the `manylinux_2_31` platform. (aarch64-manylinux_2_31) */
    TargetTriple["AARCH64_HYPHEN_MANYLINUX_UNDERSCORE_2_UNDERSCORE_31"] = "aarch64-manylinux_2_31";
    /** An ARM64 target for the `manylinux_2_32` platform. (aarch64-manylinux_2_32) */
    TargetTriple["AARCH64_HYPHEN_MANYLINUX_UNDERSCORE_2_UNDERSCORE_32"] = "aarch64-manylinux_2_32";
    /** An ARM64 target for the `manylinux_2_33` platform. (aarch64-manylinux_2_33) */
    TargetTriple["AARCH64_HYPHEN_MANYLINUX_UNDERSCORE_2_UNDERSCORE_33"] = "aarch64-manylinux_2_33";
    /** An ARM64 target for the `manylinux_2_34` platform. (aarch64-manylinux_2_34) */
    TargetTriple["AARCH64_HYPHEN_MANYLINUX_UNDERSCORE_2_UNDERSCORE_34"] = "aarch64-manylinux_2_34";
    /** An ARM64 target for the `manylinux_2_35` platform. (aarch64-manylinux_2_35) */
    TargetTriple["AARCH64_HYPHEN_MANYLINUX_UNDERSCORE_2_UNDERSCORE_35"] = "aarch64-manylinux_2_35";
    /** An ARM64 target for the `manylinux_2_36` platform. (aarch64-manylinux_2_36) */
    TargetTriple["AARCH64_HYPHEN_MANYLINUX_UNDERSCORE_2_UNDERSCORE_36"] = "aarch64-manylinux_2_36";
    /** An ARM64 target for the `manylinux_2_37` platform. (aarch64-manylinux_2_37) */
    TargetTriple["AARCH64_HYPHEN_MANYLINUX_UNDERSCORE_2_UNDERSCORE_37"] = "aarch64-manylinux_2_37";
    /** An ARM64 target for the `manylinux_2_38` platform. (aarch64-manylinux_2_38) */
    TargetTriple["AARCH64_HYPHEN_MANYLINUX_UNDERSCORE_2_UNDERSCORE_38"] = "aarch64-manylinux_2_38";
    /** An ARM64 target for the `manylinux_2_39` platform. (aarch64-manylinux_2_39) */
    TargetTriple["AARCH64_HYPHEN_MANYLINUX_UNDERSCORE_2_UNDERSCORE_39"] = "aarch64-manylinux_2_39";
    /** An ARM64 target for the `manylinux_2_40` platform. (aarch64-manylinux_2_40) */
    TargetTriple["AARCH64_HYPHEN_MANYLINUX_UNDERSCORE_2_UNDERSCORE_40"] = "aarch64-manylinux_2_40";
    /** An ARM64 Android target.
  
  By default uses Android API level 24, but respects
  the `ANDROID_API_LEVEL` environment variable if set. (aarch64-linux-android) */
    TargetTriple["AARCH64_HYPHEN_LINUX_HYPHEN_ANDROID"] = "aarch64-linux-android";
    /** An `x86_64` Android target.
  
  By default uses Android API level 24, but respects
  the `ANDROID_API_LEVEL` environment variable if set. (x86_64-linux-android) */
    TargetTriple["X86_UNDERSCORE_64_HYPHEN_LINUX_HYPHEN_ANDROID"] = "x86_64-linux-android";
    /** A wasm32 target using the Pyodide 2024 platform. Meant for use with Python 3.12.
  See <https://pyodide.org/en/stable/development/abi/312.html> (wasm32-pyodide2024) */
    TargetTriple["WASM32_HYPHEN_PYODIDE2024"] = "wasm32-pyodide2024";
    /** A wasm32 target using the Pyodide 2025 platform. Meant for use with Python 3.13.
  See <https://pyodide.org/en/stable/development/abi/313.html> (wasm32-pyodide2025) */
    TargetTriple["WASM32_HYPHEN_PYODIDE2025"] = "wasm32-pyodide2025";
    /** An ARM64 target for iOS device
  
  By default, iOS 13.0 is used, but respects the `IPHONEOS_DEPLOYMENT_TARGET`
  environment variable if set. (arm64-apple-ios) */
    TargetTriple["ARM64_HYPHEN_APPLE_HYPHEN_IOS"] = "arm64-apple-ios";
    /** An ARM64 target for iOS simulator
  
  By default, iOS 13.0 is used, but respects the `IPHONEOS_DEPLOYMENT_TARGET`
  environment variable if set. (arm64-apple-ios-simulator) */
    TargetTriple["ARM64_HYPHEN_APPLE_HYPHEN_IOS_HYPHEN_SIMULATOR"] = "arm64-apple-ios-simulator";
    /** An `x86_64` target for iOS simulator
  
  By default, iOS 13.0 is used, but respects the `IPHONEOS_DEPLOYMENT_TARGET`
  environment variable if set. (x86_64-apple-ios-simulator) */
    TargetTriple["X86_UNDERSCORE_64_HYPHEN_APPLE_HYPHEN_IOS_HYPHEN_SIMULATOR"] = "x86_64-apple-ios-simulator";
})(TargetTriple || (exports.TargetTriple = TargetTriple = {}));
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXYtY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3B5dGhvbi91di1jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBcTNCQSx3REFnRkM7QUF3REQsa0RBUUM7QUFzS0Qsa0VBY0M7QUFpQ0QsOERBU0M7QUFvQkQsd0VBT0M7QUE2Q0Qsc0RBV0M7QUE0TUQsb0NBZ0JDO0FBcXZCRCw4Q0FtRUM7QUE0TkQsd0RBUUM7QUEwQ0QsNERBV0M7QUFvREQsNERBUUM7QUFtREQsa0RBUUM7O0FBMTJERDs7O0dBR0c7QUFDSCxxRkFBcUY7QUFDckYsU0FBZ0Isc0JBQXNCLENBQUMsR0FBZ0M7SUFDckUsSUFBSSxHQUFHLEtBQUssU0FBUyxFQUFFLENBQUM7UUFBQyxPQUFPLFNBQVMsQ0FBQztJQUFDLENBQUM7SUFDNUMsTUFBTSxNQUFNLEdBQUc7UUFDYixZQUFZLEVBQUUsR0FBRyxDQUFDLFNBQVM7UUFDM0IscUJBQXFCLEVBQUUsR0FBRyxDQUFDLGlCQUFpQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN6RCxPQUFPLEVBQUUsbUJBQW1CLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQztRQUN2QyxlQUFlLEVBQUUsMkJBQTJCLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQztRQUM5RCwrQkFBK0IsRUFBRSxHQUFHLENBQUMsMkJBQTJCLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzdFLFdBQVcsRUFBRSxHQUFHLENBQUMsUUFBUTtRQUN6QixZQUFZLEVBQUUsR0FBRyxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDeEMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxRQUFRO1FBQ3pCLGtCQUFrQixFQUFFLEdBQUcsQ0FBQyxlQUFlO1FBQ3ZDLG1CQUFtQixFQUFFLEdBQUcsQ0FBQyxn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Q0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDMU4sdUJBQXVCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxD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RSxHQUFHLENBQUMsWUFBWTtRQUNsQyx3QkFBd0IsRUFBRSxHQUFHLENBQUMsb0JBQW9CO1FBQ2xELGVBQWUsRUFBRSxHQUFHLENBQUMsWUFBWSxFQUFFLEtBQUs7UUFDeEMsdUJBQXVCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUMzTSxPQUFPLEVBQUUsR0FBRyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDL0IsMEJBQTBCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzFOLHVCQUF1QixFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsbUJBQW1CLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3JVLGlCQUFpQixFQUFFLEdBQUcsQ0FBQyxhQUFhLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FB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RixvRkFBb0Y7SUFDcEYsdUdBQXVGLENBQUE7SUFDdkYsb0ZBQW9GO0lBQ3BGLHVHQUF1RixDQUFBO0lBQ3ZGLG9GQUFvRjtJQUNwRix1R0FBdUYsQ0FBQTtJQUN2RixvRkFBb0Y7SUFDcEYsdUdBQXVGLENBQUE7SUFDdkYsd0hBQXdIO0lBQ3hILHNFQUFzRCxDQUFBO0lBQ3RELGtGQUFrRjtJQUNsRiw4RkFBOEUsQ0FBQTtJQUM5RSxrRkFBa0Y7SUFDbEYsOEZBQThFLENBQUE7SUFDOUUsa0ZBQWtGO0lBQ2xGLDhGQUE4RSxDQUFBO0lBQzlFLGtGQUFrRjtJQUNsRiw4RkFBOEUsQ0FBQTtJQUM5RSxrRkFBa0Y7SUFDbEYsOEZBQThFLENBQUE7SUFDOUUsa0ZBQWtGO0lBQ2xGLDhGQUE4RSxDQUFBO0lBQzlFLGtGQUFrRjtJQUNsRiw4RkFBOEUsQ0FBQTtJQUM5RSxrRkFBa0Y7SUFDbEYsOEZBQThFLENBQUE7SUFDOUUsa0ZBQWtGO0lBQ2xGLDhGQUE4RSxDQUFBO0lBQzlFLGtGQUFrRjtJQUNsRiw4RkFBOEUsQ0FBQTtJQUM5RSxrRkFBa0Y7SUFDbEYsOEZBQThFLENBQUE7SUFDOUUsa0ZBQWtGO0lBQ2xGLDhGQUE4RSxDQUFBO0lBQzlFOzs7aUZBRzZFO0lBQzdFLDZFQUE2RCxDQUFBO0lBQzdEOzs7Z0ZBRzRFO0lBQzVFLHNGQUFzRSxDQUFBO0lBQ3RFO3NGQUNrRjtJQUNsRixnRUFBZ0QsQ0FBQTtJQUNoRDtzRkFDa0Y7SUFDbEYsZ0VBQWdELENBQUE7SUFDaEQ7OzttREFHK0M7SUFDL0MsaUVBQWlELENBQUE7SUFDakQ7Ozs2REFHeUQ7SUFDekQsNEZBQTRFLENBQUE7SUFDNUU7Ozs4REFHMEQ7SUFDMUQseUdBQXlGLENBQUE7QUFDM0YsQ0FBQyxFQXBIVyxZQUFZLDRCQUFaLFlBQVksUUFvSHZCIiwic291cmNlc0NvbnRlbnQiOlsiLy8gfn4gR2VuZXJhdGVkIGJ5IHByb2plbi4gVG8gbW9kaWZ5LCBlZGl0IC5wcm9qZW5yYy50cyBhbmQgcnVuIFwibm9kZSAuL3Byb2plbi5qc1wiLlxuLyoqXG4gKiBNZXRhZGF0YSBhbmQgY29uZmlndXJhdGlvbiBmb3IgdXYuXG4gKlxuICogQHNjaGVtYSBVdkNvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVdkNvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogVGhlIGRlZmF1bHQgdmVyc2lvbiBzcGVjaWZpZXIgd2hlbiBhZGRpbmcgYSBkZXBlbmRlbmN5LlxuICAgKlxuICAgKiBXaGVuIGFkZGluZyBhIGRlcGVuZGVuY3kgdG8gdGhlIHByb2plY3QsIGlmIG5vIGNvbnN0cmFpbnQgb3IgVVJMIGlzIHByb3ZpZGVkLCBhIGNvbnN0cmFpbnRcbiAgICogaXMgYWRkZWQgYmFzZWQgb24gdGhlIGxhdGVzdCBjb21wYXRpYmxlIHZlcnNpb24gb2YgdGhlIHBhY2thZ2UuIEJ5IGRlZmF1bHQsIGEgbG93ZXIgYm91bmRcbiAgICogY29uc3RyYWludCBpcyB1c2VkLCBlLmcuLCBgPj0xLjIuM2AuXG4gICAqXG4gICAqIFdoZW4gYC0tZnJvemVuYCBpcyBwcm92aWRlZCwgbm8gcmVzb2x1dGlvbiBpcyBwZXJmb3JtZWQsIGFuZCBkZXBlbmRlbmNpZXMgYXJlIGFsd2F5cyBhZGRlZFxuICAgKiB3aXRob3V0IGNvbnN0cmFpbnRzLlxuICAgKlxuICAgKiBUaGlzIG9wdGlvbiBpcyBpbiBwcmV2aWV3IGFuZCBtYXkgY2hhbmdlIGluIGFueSBmdXR1cmUgcmVsZWFzZS5cbiAgICpcbiAgICogQHNjaGVtYSBVdkNvbmZpZ3VyYXRpb24jYWRkLWJvdW5kc1xuICAgKi9cbiAgcmVhZG9ubHkgYWRkQm91bmRzPzogQWRkQm91bmRzS2luZDtcblxuICAvKipcbiAgICogQWxsb3cgaW5zZWN1cmUgY29ubmVjdGlvbnMgdG8gaG9zdC5cbiAgICpcbiAgICogRXhwZWN0cyB0byByZWNlaXZlIGVpdGhlciBhIGhvc3RuYW1lIChlLmcuLCBgbG9jYWxob3N0YCksIGEgaG9zdC1wb3J0IHBhaXIgKGUuZy4sXG4gICAqIGBsb2NhbGhvc3Q6ODA4MGApLCBvciBhIFVSTCAoZS5nLiwgYGh0dHBzOi8vbG9jYWxob3N0YCkuXG4gICAqXG4gICAqIFdBUk5JTkc6IEhvc3RzIGluY2x1ZGVkIGluIHRoaXMgbGlzdCB3aWxsIG5vdCBiZSB2ZXJpZmllZCBhZ2FpbnN0IHRoZSBzeXN0ZW0ncyBjZXJ0aWZpY2F0ZVxuICAgKiBzdG9yZS4gT25seSB1c2UgYC0tYWxsb3ctaW5zZWN1cmUtaG9zdGAgaW4gYSBzZWN1cmUgbmV0d29yayB3aXRoIHZlcmlmaWVkIHNvdXJjZXMsIGFzIGl0XG4gICAqIGJ5cGFzc2VzIFNTTCB2ZXJpZmljYXRpb24gYW5kIGNvdWxkIGV4cG9zZSB5b3UgdG8gTUlUTSBhdHRhY2tzLlxuICAgKlxuICAgKiBAc2NoZW1hIFV2Q29uZmlndXJhdGlvbiNhbGxvdy1pbnNlY3VyZS1ob3N0XG4gICAqL1xuICByZWFkb25seSBhbGxvd0luc2VjdXJlSG9zdD86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIFV2Q29uZmlndXJhdGlvbiNhdWRpdFxuICAgKi9cbiAgcmVhZG9ubHkgYXVkaXQ/OiBBdWRpdE9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIENvbmZpZ3VyYXRpb24gZm9yIHRoZSB1diBidWlsZCBiYWNrZW5kLlxuICAgKlxuICAgKiBOb3RlIHRoYXQgdGhvc2Ugc2V0dGluZ3Mgb25seSBhcHBseSB3aGVuIHVzaW5nIHRoZSBgdXZfYnVpbGRgIGJhY2tlbmQsIG90aGVyIGJ1aWxkIGJhY2tlbmRzXG4gICAqIChzdWNoIGFzIGhhdGNobGluZykgaGF2ZSB0aGVpciBvd24gY29uZmlndXJhdGlvbi5cbiAgICpcbiAgICogQHNjaGVtYSBVdkNvbmZpZ3VyYXRpb24jYnVpbGQtYmFja2VuZFxuICAgKi9cbiAgcmVhZG9ubHkgYnVpbGRCYWNrZW5kPzogQnVpbGRCYWNrZW5kU2V0dGluZ3M7XG5cbiAgLyoqXG4gICAqIFBFUCA1MDgtc3R5bGUgcmVxdWlyZW1lbnRzLCBlLmcuLCBgcnVmZj09MC41LjBgLCBvciBgcnVmZiBAIGh0dHBzOi8vLi4uYC5cbiAgICpcbiAgICogQHNjaGVtYSBVdkNvbmZpZ3VyYXRpb24jYnVpbGQtY29uc3RyYWludC1kZXBlbmRlbmNpZXNcbiAgICovXG4gIHJlYWRvbmx5IGJ1aWxkQ29uc3RyYWludERlcGVuZGVuY2llcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBQYXRoIHRvIHRoZSBjYWNoZSBkaXJlY3RvcnkuXG4gICAqXG4gICAqIEBzY2hlbWEgVXZDb25maWd1cmF0aW9uI2NhY2hlLWRpclxuICAgKi9cbiAgcmVhZG9ubHkgY2FjaGVEaXI/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBrZXlzIHRvIGNvbnNpZGVyIHdoZW4gY2FjaGluZyBidWlsZHMgZm9yIHRoZSBwcm9qZWN0LlxuICAgKlxuICAgKiBDYWNoZSBrZXlzIGVuYWJsZSB5b3UgdG8gc3BlY2lmeSB0aGUgZmlsZXMgb3IgZGlyZWN0b3JpZXMgdGhhdCBzaG91bGQgdHJpZ2dlciBhIHJlYnVpbGQgd2hlblxuICAgKiBtb2RpZmllZC4gQnkgZGVmYXVsdCwgdXYgd2lsbCByZWJ1aWxkIGEgcHJvamVjdCB3aGVuZXZlciB0aGUgYHB5cHJvamVjdC50b21sYCwgYHNldHVwLnB5YCxcbiAgICogb3IgYHNldHVwLmNmZ2AgZmlsZXMgaW4gdGhlIHByb2plY3QgZGlyZWN0b3J5IGFyZSBtb2RpZmllZCwgb3IgaWYgYSBgc3JjYCBkaXJlY3RvcnkgaXNcbiAgICogYWRkZWQgb3IgcmVtb3ZlZCwgaS5lLjpcbiAgICpcbiAgICogYGBgdG9tbFxuICAgKiBjYWNoZS1rZXlzID0gW3sgZmlsZSA9IFwicHlwcm9qZWN0LnRvbWxcIiB9LCB7IGZpbGUgPSBcInNldHVwLnB5XCIgfSwgeyBmaWxlID0gXCJzZXR1cC5jZmdcIiB9LCB7IGRpciA9IFwic3JjXCIgfV1cbiAgICogYGBgXG4gICAqXG4gICAqIEFzIGFuIGV4YW1wbGU6IGlmIGEgcHJvamVjdCB1c2VzIGR5bmFtaWMgbWV0YWRhdGEgdG8gcmVhZCBpdHMgZGVwZW5kZW5jaWVzIGZyb20gYVxuICAgKiBgcmVxdWlyZW1lbnRzLnR4dGAgZmlsZSwgeW91IGNhbiBzcGVjaWZ5IGBjYWNoZS1rZXlzID0gW3sgZmlsZSA9IFwicmVxdWlyZW1lbnRzLnR4dFwiIH0sIHsgZmlsZSA9IFwicHlwcm9qZWN0LnRvbWxcIiB9XWBcbiAgICogdG8gZW5zdXJlIHRoYXQgdGhlIHByb2plY3QgaXMgcmVidWlsdCB3aGVuZXZlciB0aGUgYHJlcXVpcmVtZW50cy50eHRgIGZpbGUgaXMgbW9kaWZpZWQgKGluXG4gICAqIGFkZGl0aW9uIHRvIHdhdGNoaW5nIHRoZSBgcHlwcm9qZWN0LnRvbWxgKS5cbiAgICpcbiAgICogR2xvYnMgYXJlIHN1cHBvcnRlZCwgZm9sbG93aW5nIHRoZSBzeW50YXggb2YgdGhlIFtgZ2xvYmBdKGh0dHBzOi8vZG9jcy5ycy9nbG9iLzAuMy4xL2dsb2Ivc3RydWN0LlBhdHRlcm4uaHRtbClcbiAgICogY3JhdGUuIEZvciBleGFtcGxlLCB0byBpbnZhbGlkYXRlIHRoZSBjYWNoZSB3aGVuZXZlciBhIGAudG9tbGAgZmlsZSBpbiB0aGUgcHJvamVjdCBkaXJlY3RvcnlcbiAgICogb3IgYW55IG9mIGl0cyBzdWJkaXJlY3RvcmllcyBpcyBtb2RpZmllZCwgeW91IGNhbiBzcGVjaWZ5IGBjYWNoZS1rZXlzID0gW3sgZmlsZSA9IFwiKl8vKi50b21sXCIgfV1gLlxuICAgKiBOb3RlIHRoYXQgdGhlIHVzZSBvZiBnbG9icyBjYW4gYmUgZXhwZW5zaXZlLCBhcyB1diBtYXkgbmVlZCB0byB3YWxrIHRoZSBmaWxlc3lzdGVtIHRvXG4gICAqIGRldGVybWluZSB3aGV0aGVyIGFueSBmaWxlcyBoYXZlIGNoYW5nZWQuXG4gICAqXG4gICAqIENhY2hlIGtleXMgY2FuIGFsc28gaW5jbHVkZSB2ZXJzaW9uIGNvbnRyb2wgaW5mb3JtYXRpb24uIEZvciBleGFtcGxlLCBpZiBhIHByb2plY3QgdXNlc1xuICAgKiBgc2V0dXB0b29sc19zY21gIHRvIHJlYWQgaXRzIHZlcnNpb24gZnJvbSBhIEdpdCBjb21taXQsIHlvdSBjYW4gc3BlY2lmeSBgY2FjaGUta2V5cyA9IFt7IGdpdCA9IHsgY29tbWl0ID0gdHJ1ZSB9LCB7IGZpbGUgPSBcInB5cHJvamVjdC50b21sXCIgfV1gXG4gICAqIHRvIGluY2x1ZGUgdGhlIGN1cnJlbnQgR2l0IGNvbW1pdCBoYXNoIGluIHRoZSBjYWNoZSBrZXkgKGluIGFkZGl0aW9uIHRvIHRoZVxuICAgKiBgcHlwcm9qZWN0LnRvbWxgKS4gR2l0IHRhZ3MgYXJlIGFsc28gc3VwcG9ydGVkIHZpYSBgY2FjaGUta2V5cyA9IFt7IGdpdCA9IHsgY29tbWl0ID0gdHJ1ZSwgdGFncyA9IHRydWUgfSB9XWAuXG4gICAqXG4gICAqIENhY2hlIGtleXMgY2FuIGFsc28gaW5jbHVkZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMuIEZvciBleGFtcGxlLCBpZiBhIHByb2plY3QgcmVsaWVzIG9uXG4gICAqIGBNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVRgIG9yIG90aGVyIGVudmlyb25tZW50IHZhcmlhYmxlcyB0byBkZXRlcm1pbmUgaXRzIGJlaGF2aW9yLCB5b3UgY2FuXG4gICAqIHNwZWNpZnkgYGNhY2hlLWtleXMgPSBbeyBlbnYgPSBcIk1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVFwiIH1dYCB0byBpbnZhbGlkYXRlIHRoZSBjYWNoZVxuICAgKiB3aGVuZXZlciB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgY2hhbmdlcy5cbiAgICpcbiAgICogQ2FjaGUga2V5cyBvbmx5IGFmZmVjdCB0aGUgcHJvamVjdCBkZWZpbmVkIGJ5IHRoZSBgcHlwcm9qZWN0LnRvbWxgIGluIHdoaWNoIHRoZXkncmVcbiAgICogc3BlY2lmaWVkIChhcyBvcHBvc2VkIHRvLCBlLmcuLCBhZmZlY3RpbmcgYWxsIG1lbWJlcnMgaW4gYSB3b3Jrc3BhY2UpLCBhbmQgYWxsIHBhdGhzIGFuZFxuICAgKiBnbG9icyBhcmUgaW50ZXJwcmV0ZWQgYXMgcmVsYXRpdmUgdG8gdGhlIHByb2plY3QgZGlyZWN0b3J5LlxuICAgKlxuICAgKiBAc2NoZW1hIFV2Q29uZmlndXJhdGlvbiNjYWNoZS1rZXlzXG4gICAqL1xuICByZWFkb25seSBjYWNoZUtleXM/OiBhbnlbXTtcblxuICAvKipcbiAgICogQ2hlY2sgYW4gaW5kZXggVVJMIGZvciBleGlzdGluZyBmaWxlcyB0byBza2lwIGR1cGxpY2F0ZSB1cGxvYWRzLlxuICAgKlxuICAgKiBUaGlzIG9wdGlvbiBhbGxvd3MgcmV0cnlpbmcgcHVibGlzaGluZyB0aGF0IGZhaWxlZCBhZnRlciBvbmx5IHNvbWUsIGJ1dCBub3QgYWxsIGZpbGVzIGhhdmVcbiAgICogYmVlbiB1cGxvYWRlZCwgYW5kIGhhbmRsZXMgZXJyb3IgZHVlIHRvIHBhcmFsbGVsIHVwbG9hZHMgb2YgdGhlIHNhbWUgZmlsZS5cbiAgICpcbiAgICogQmVmb3JlIHVwbG9hZGluZywgdGhlIGluZGV4IGlzIGNoZWNrZWQuIElmIHRoZSBleGFjdCBzYW1lIGZpbGUgYWxyZWFkeSBleGlzdHMgaW4gdGhlIGluZGV4LFxuICAgKiB0aGUgZmlsZSB3aWxsIG5vdCBiZSB1cGxvYWRlZC4gSWYgYW4gZXJyb3Igb2NjdXJyZWQgZHVyaW5nIHRoZSB1cGxvYWQsIHRoZSBpbmRleCBpcyBjaGVja2VkXG4gICAqIGFnYWluLCB0byBoYW5kbGUgY2FzZXMgd2hlcmUgdGhlIGlkZW50aWNhbCBmaWxlIHdhcyB1cGxvYWRlZCB0d2ljZSBpbiBwYXJhbGxlbC5cbiAgICpcbiAgICogVGhlIGV4YWN0IGJlaGF2aW9yIHdpbGwgdmFyeSBiYXNlZCBvbiB0aGUgaW5kZXguIFdoZW4gdXBsb2FkaW5nIHRvIFB5UEksIHVwbG9hZGluZyB0aGUgc2FtZVxuICAgKiBmaWxlIHN1Y2NlZWRzIGV2ZW4gd2l0aG91dCBgLS1jaGVjay11cmxgLCB3aGlsZSBtb3N0IG90aGVyIGluZGV4ZXMgZXJyb3IuXG4gICAqXG4gICAqIFRoZSBpbmRleCBtdXN0IHByb3ZpZGUgb25lIG9mIHRoZSBzdXBwb3J0ZWQgaGFzaGVzIChTSEEtMjU2LCBTSEEtMzg0LCBvciBTSEEtNTEyKS5cbiAgICpcbiAgICogQHNjaGVtYSBVdkNvbmZpZ3VyYXRpb24jY2hlY2stdXJsXG4gICAqL1xuICByZWFkb25seSBjaGVja1VybD86IHN0cmluZztcblxuICAvKipcbiAgICogQ29tcGlsZSBQeXRob24gZmlsZXMgdG8gYnl0ZWNvZGUgYWZ0ZXIgaW5zdGFsbGF0aW9uLlxuICAgKlxuICAgKiBCeSBkZWZhdWx0LCB1diBkb2VzIG5vdCBjb21waWxlIFB5dGhvbiAoYC5weWApIGZpbGVzIHRvIGJ5dGVjb2RlIChgX19weWNhY2hlX18vKi5weWNgKTtcbiAgICogaW5zdGVhZCwgY29tcGlsYXRpb24gaXMgcGVyZm9ybWVkIGxhemlseSB0aGUgZmlyc3QgdGltZSBhIG1vZHVsZSBpcyBpbXBvcnRlZC4gRm9yIHVzZS1jYXNlc1xuICAgKiBpbiB3aGljaCBzdGFydCB0aW1lIGlzIGNyaXRpY2FsLCBzdWNoIGFzIENMSSBhcHBsaWNhdGlvbnMgYW5kIERvY2tlciBjb250YWluZXJzLCB0aGlzIG9wdGlvblxuICAgKiBjYW4gYmUgZW5hYmxlZCB0byB0cmFkZSBsb25nZXIgaW5zdGFsbGF0aW9uIHRpbWVzIGZvciBmYXN0ZXIgc3RhcnQgdGltZXMuXG4gICAqXG4gICAqIFdoZW4gZW5hYmxlZCwgdXYgd2lsbCBwcm9jZXNzIHRoZSBlbnRpcmUgc2l0ZS1wYWNrYWdlcyBkaXJlY3RvcnkgKGluY2x1ZGluZyBwYWNrYWdlcyB0aGF0XG4gICAqIGFyZSBub3QgYmVpbmcgbW9kaWZpZWQgYnkgdGhlIGN1cnJlbnQgb3BlcmF0aW9uKSBmb3IgY29uc2lzdGVuY3kuIExpa2UgcGlwLCBpdCB3aWxsIGFsc29cbiAgICogaWdub3JlIGVycm9ycy5cbiAgICpcbiAgICogQHNjaGVtYSBVdkNvbmZpZ3VyYXRpb24jY29tcGlsZS1ieXRlY29kZVxuICAgKi9cbiAgcmVhZG9ubHkgY29tcGlsZUJ5dGVjb2RlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIG1heGltdW0gbnVtYmVyIG9mIHNvdXJjZSBkaXN0cmlidXRpb25zIHRoYXQgdXYgd2lsbCBidWlsZCBjb25jdXJyZW50bHkgYXQgYW55IGdpdmVuXG4gICAqIHRpbWUuXG4gICAqXG4gICAqIERlZmF1bHRzIHRvIHRoZSBudW1iZXIgb2YgYXZhaWxhYmxlIENQVSBjb3Jlcy5cbiAgICpcbiAgICogQGRlZmF1bHQgdGhlIG51bWJlciBvZiBhdmFpbGFibGUgQ1BVIGNvcmVzLlxuICAgKiBAc2NoZW1hIFV2Q29uZmlndXJhdGlvbiNjb25jdXJyZW50LWJ1aWxkc1xuICAgKi9cbiAgcmVhZG9ubHkgY29uY3VycmVudEJ1aWxkcz86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIG1heGltdW0gbnVtYmVyIG9mIGluLWZsaWdodCBjb25jdXJyZW50IGRvd25sb2FkcyB0aGF0IHV2IHdpbGwgcGVyZm9ybSBhdCBhbnkgZ2l2ZW5cbiAgICogdGltZS5cbiAgICpcbiAgICogQHNjaGVtYSBVdkNvbmZpZ3VyYXRpb24jY29uY3VycmVudC1kb3dubG9hZHNcbiAgICovXG4gIHJlYWRvbmx5IGNvbmN1cnJlbnREb3dubG9hZHM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2YgdGhyZWFkcyB1c2VkIHdoZW4gaW5zdGFsbGluZyBhbmQgdW56aXBwaW5nIHBhY2thZ2VzLlxuICAgKlxuICAgKiBEZWZhdWx0cyB0byB0aGUgbnVtYmVyIG9mIGF2YWlsYWJsZSBDUFUgY29yZXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRoZSBudW1iZXIgb2YgYXZhaWxhYmxlIENQVSBjb3Jlcy5cbiAgICogQHNjaGVtYSBVdkNvbmZpZ3VyYXRpb24jY29uY3VycmVudC1pbnN0YWxsc1xuICAgKi9cbiAgcmVhZG9ubHkgY29uY3VycmVudEluc3RhbGxzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBTZXR0aW5ncyB0byBwYXNzIHRvIHRoZSBbUEVQIDUxN10oaHR0cHM6Ly9wZXBzLnB5dGhvbi5vcmcvcGVwLTA1MTcvKSBidWlsZCBiYWNrZW5kLFxuICAgKiBzcGVjaWZpZWQgYXMgYEtFWT1WQUxVRWAgcGFpcnMuXG4gICAqXG4gICAqIEBzY2hlbWEgVXZDb25maWd1cmF0aW9uI2NvbmZpZy1zZXR0aW5nc1xuICAgKi9cbiAgcmVhZG9ubHkgY29uZmlnU2V0dGluZ3M/OiB7IFtrZXk6IHN0cmluZ106IGFueSB9O1xuXG4gIC8qKlxuICAgKiBTZXR0aW5ncyB0byBwYXNzIHRvIHRoZSBbUEVQIDUxN10oaHR0cHM6Ly9wZXBzLnB5dGhvbi5vcmcvcGVwLTA1MTcvKSBidWlsZCBiYWNrZW5kIGZvciBzcGVjaWZpYyBwYWNrYWdlcyxcbiAgICogc3BlY2lmaWVkIGFzIGBLRVk9VkFMVUVgIHBhaXJzLlxuICAgKlxuICAgKiBBY2NlcHRzIGEgbWFwIGZyb20gcGFja2FnZSBuYW1lcyB0byBzdHJpbmcga2V5LXZhbHVlIHBhaXJzLlxuICAgKlxuICAgKiBAc2NoZW1hIFV2Q29uZmlndXJhdGlvbiNjb25maWctc2V0dGluZ3MtcGFja2FnZVxuICAgKi9cbiAgcmVhZG9ubHkgY29uZmlnU2V0dGluZ3NQYWNrYWdlPzogeyBba2V5OiBzdHJpbmddOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IH07XG5cbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBzZXRzIG9mIGNvbmZsaWN0aW5nIGdyb3VwcyBvciBleHRyYXMuXG4gICAqXG4gICAqIEBzY2hlbWEgVXZDb25maWd1cmF0aW9uI2NvbmZsaWN0c1xuICAgKi9cbiAgcmVhZG9ubHkgY29uZmxpY3RzPzogU2NoZW1hQ29uZmxpY3RJdGVtW11bXTtcblxuICAvKipcbiAgICogUEVQIDUwOC1zdHlsZSByZXF1aXJlbWVudHMsIGUuZy4sIGBydWZmPT0wLjUuMGAsIG9yIGBydWZmIEAgaHR0cHM6Ly8uLi5gLlxuICAgKlxuICAgKiBAc2NoZW1hIFV2Q29uZmlndXJhdGlvbiNjb25zdHJhaW50LWRlcGVuZGVuY2llc1xuICAgKi9cbiAgcmVhZG9ubHkgY29uc3RyYWludERlcGVuZGVuY2llcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgbGlzdCBvZiBgZGVwZW5kZW5jeS1ncm91cHNgIHRvIGluc3RhbGwgYnkgZGVmYXVsdC5cbiAgICpcbiAgICogQ2FuIGFsc28gYmUgdGhlIGxpdGVyYWwgYFwiYWxsXCJgIHRvIGRlZmF1bHQgZW5hYmxlIGFsbCBncm91cHMuXG4gICAqXG4gICAqIEBzY2hlbWEgVXZDb25maWd1cmF0aW9uI2RlZmF1bHQtZ3JvdXBzXG4gICAqL1xuICByZWFkb25seSBkZWZhdWx0R3JvdXBzPzogYW55O1xuXG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIHNldHRpbmdzIGZvciBgZGVwZW5kZW5jeS1ncm91cHNgLlxuICAgKlxuICAgKiBDdXJyZW50bHkgdGhpcyBjYW4gb25seSBiZSB1c2VkIHRvIGFkZCBgcmVxdWlyZXMtcHl0aG9uYCBjb25zdHJhaW50c1xuICAgKiB0byBkZXBlbmRlbmN5IGdyb3VwcyAodHlwaWNhbGx5IHRvIGluZm9ybSB1diB0aGF0IHlvdXIgZGV2IHRvb2xpbmdcbiAgICogaGFzIGEgaGlnaGVyIHB5dGhvbiByZXF1aXJlbWVudCB0aGFuIHlvdXIgYWN0dWFsIHByb2plY3QpLlxuICAgKlxuICAgKiBUaGlzIGNhbm5vdCBiZSB1c2VkIHRvIGRlZmluZSBkZXBlbmRlbmN5IGdyb3VwcywgdXNlIHRoZSB0b3AtbGV2ZWxcbiAgICogYFtkZXBlbmRlbmN5LWdyb3Vwc11gIHRhYmxlIGZvciB0aGF0LlxuICAgKlxuICAgKiBAc2NoZW1hIFV2Q29uZmlndXJhdGlvbiNkZXBlbmRlbmN5LWdyb3Vwc1xuICAgKi9cbiAgcmVhZG9ubHkgZGVwZW5kZW5jeUdyb3Vwcz86IHsgW2tleTogc3RyaW5nXTogRGVwZW5kZW5jeUdyb3VwU2V0dGluZ3MgfTtcblxuICAvKipcbiAgICogUHJlLWRlZmluZWQgc3RhdGljIG1ldGFkYXRhIGZvciBkZXBlbmRlbmNpZXMgb2YgdGhlIHByb2plY3QgKGRpcmVjdCBvciB0cmFuc2l0aXZlKS4gV2hlblxuICAgKiBwcm92aWRlZCwgZW5hYmxlcyB0aGUgcmVzb2x2ZXIgdG8gdXNlIHRoZSBzcGVjaWZpZWQgbWV0YWRhdGEgaW5zdGVhZCBvZiBxdWVyeWluZyB0aGVcbiAgICogcmVnaXN0cnkgb3IgYnVpbGRpbmcgdGhlIHJlbGV2YW50IHBhY2thZ2UgZnJvbSBzb3VyY2UuXG4gICAqXG4gICAqIE1ldGFkYXRhIHNob3VsZCBiZSBwcm92aWRlZCBpbiBhZGhlcmVuY2Ugd2l0aCB0aGUgW01ldGFkYXRhIDIuM10oaHR0cHM6Ly9wYWNrYWdpbmcucHl0aG9uLm9yZy9lbi9sYXRlc3Qvc3BlY2lmaWNhdGlvbnMvY29yZS1tZXRhZGF0YS8pXG4gICAqIHN0YW5kYXJkLCB0aG91Z2ggb25seSB0aGUgZm9sbG93aW5nIGZpZWxkcyBhcmUgcmVzcGVjdGVkOlxuICAgKlxuICAgKiAtIGBuYW1lYDogVGhlIG5hbWUgb2YgdGhlIHBhY2thZ2UuXG4gICAqIC0gKE9wdGlvbmFsKSBgdmVyc2lvbmA6IFRoZSB2ZXJzaW9uIG9mIHRoZSBwYWNrYWdlLiBJZiBvbWl0dGVkLCB0aGUgbWV0YWRhdGEgd2lsbCBiZSBhcHBsaWVkXG4gICAqIHRvIGFsbCB2ZXJzaW9ucyBvZiB0aGUgcGFja2FnZS5cbiAgICogLSAoT3B0aW9uYWwpIGByZXF1aXJlcy1kaXN0YDogVGhlIGRlcGVuZGVuY2llcyBvZiB0aGUgcGFja2FnZSAoZS5nLiwgYHdlcmt6ZXVnPj0wLjE0YCkuXG4gICAqIC0gKE9wdGlvbmFsKSBgcmVxdWlyZXMtcHl0aG9uYDogVGhlIFB5dGhvbiB2ZXJzaW9uIHJlcXVpcmVkIGJ5IHRoZSBwYWNrYWdlIChlLmcuLCBgPj0zLjEwYCkuXG4gICAqIC0gKE9wdGlvbmFsKSBgcHJvdmlkZXMtZXh0cmFgOiBUaGUgZXh0cmFzIHByb3ZpZGVkIGJ5IHRoZSBwYWNrYWdlLlxuICAgKlxuICAgKiBAc2NoZW1hIFV2Q29uZmlndXJhdGlvbiNkZXBlbmRlbmN5LW1ldGFkYXRhXG4gICAqL1xuICByZWFkb25seSBkZXBlbmRlbmN5TWV0YWRhdGE/OiBTdGF0aWNNZXRhZGF0YVtdO1xuXG4gIC8qKlxuICAgKiBQRVAgNTA4LXN0eWxlIHJlcXVpcmVtZW50cywgZS5nLiwgYHJ1ZmY9PTAuNS4wYCwgb3IgYHJ1ZmYgQCBodHRwczovLy4uLmAuXG4gICAqXG4gICAqIEBzY2hlbWEgVXZDb25maWd1cmF0aW9uI2Rldi1kZXBlbmRlbmNpZXNcbiAgICovXG4gIHJlYWRvbmx5IGRldkRlcGVuZGVuY2llcz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgZW52aXJvbm1lbnQgbWFya2VycywgZS5nLiwgYHB5dGhvbl92ZXJzaW9uID49ICczLjYnYC5cbiAgICpcbiAgICogQHNjaGVtYSBVdkNvbmZpZ3VyYXRpb24jZW52aXJvbm1lbnRzXG4gICAqL1xuICByZWFkb25seSBlbnZpcm9ubWVudHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogRGVwZW5kZW5jaWVzIHRvIGV4Y2x1ZGUgd2hlbiByZXNvbHZpbmcgdGhlIHByb2plY3QncyBkZXBlbmRlbmNpZXMuXG4gICAqXG4gICAqIEV4Y2x1ZGVzIGFyZSB1c2VkIHRvIHByZXZlbnQgYSBwYWNrYWdlIGZyb20gYmVpbmcgc2VsZWN0ZWQgZHVyaW5nIHJlc29sdXRpb24sXG4gICAqIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCdzIHJlcXVlc3RlZCBieSBhbnkgb3RoZXIgcGFja2FnZS4gV2hlbiBhIHBhY2thZ2UgaXMgZXhjbHVkZWQsXG4gICAqIGl0IHdpbGwgYmUgb21pdHRlZCBmcm9tIHRoZSBkZXBlbmRlbmN5IGxpc3QgZW50aXJlbHkuXG4gICAqXG4gICAqIEluY2x1ZGluZyBhIHBhY2thZ2UgYXMgYW4gZXhjbHVzaW9uIHdpbGwgcHJldmVudCBpdCBmcm9tIGJlaW5nIGluc3RhbGxlZCwgZXZlbiBpZlxuICAgKiBpdCdzIHJlcXVlc3RlZCBieSB0cmFuc2l0aXZlIGRlcGVuZGVuY2llcy4gVGhpcyBjYW4gYmUgdXNlZnVsIGZvciByZW1vdmluZyBvcHRpb25hbFxuICAgKiBkZXBlbmRlbmNpZXMgb3Igd29ya2luZyBhcm91bmQgcGFja2FnZXMgd2l0aCBicm9rZW4gZGVwZW5kZW5jaWVzLlxuICAgKlxuICAgKiBFeGNsdXNpb25zIGNhbiBiZSBsaW1pdGVkIHRvIHRoZSBkZXBlbmRlbmNpZXMgZGVjbGFyZWQgYnkgYSBzcGVjaWZpYyBwYWNrYWdlIHZlcnNpb24gYnlcbiAgICogdXNpbmcgYSB0YWJsZSB3aXRoIGBwYWNrYWdlYCBhbmQgYGRlcGVuZGVuY2llc2AuIFRoZSBgcGFja2FnZWAgdGFibGUgaWRlbnRpZmllcyB0aGUgcGFja2FnZVxuICAgKiB3aG9zZSBkZXBlbmRlbmNpZXMgd2lsbCBiZSBleGNsdWRlZCBieSBgbmFtZWAgYW5kLCBvcHRpb25hbGx5LCBgdmVyc2lvbmAuIElmIGB2ZXJzaW9uYCBpc1xuICAgKiBvbWl0dGVkLCB0aGUgZXhjbHVzaW9ucyBhcHBseSB0byBhbGwgdmVyc2lvbnMgb2YgdGhhdCBwYWNrYWdlLiBBIHZlcnNpb24tc3BlY2lmaWMgZW50cnlcbiAgICogdGFrZXMgcHJlY2VkZW5jZSBvdmVyIGFuIGFsbC12ZXJzaW9ucyBlbnRyeS5cbiAgICpcbiAgICogISEhIG5vdGVcbiAgICogSW4gYHV2IGxvY2tgLCBgdXYgc3luY2AsIGFuZCBgdXYgcnVuYCwgdXYgd2lsbCBvbmx5IHJlYWQgYGV4Y2x1ZGUtZGVwZW5kZW5jaWVzYCBmcm9tXG4gICAqIHRoZSBgcHlwcm9qZWN0LnRvbWxgIGF0IHRoZSB3b3Jrc3BhY2Ugcm9vdCwgYW5kIHdpbGwgaWdub3JlIGFueSBkZWNsYXJhdGlvbnMgaW4gb3RoZXJcbiAgICogd29ya3NwYWNlIG1lbWJlcnMgb3IgYHV2LnRvbWxgIGZpbGVzLlxuICAgKlxuICAgKiBAc2NoZW1hIFV2Q29uZmlndXJhdGlvbiNleGNsdWRlLWRlcGVuZGVuY2llc1xuICAgKi9cbiAgcmVhZG9ubHkgZXhjbHVkZURlcGVuZGVuY2llcz86IGFueVtdO1xuXG4gIC8qKlxuICAgKiBMaW1pdCBjYW5kaWRhdGUgcGFja2FnZXMgdG8gdGhvc2UgdGhhdCB3ZXJlIHVwbG9hZGVkIHByaW9yIHRvIHRoZSBnaXZlbiBkYXRlLlxuICAgKlxuICAgKiBUaGUgZGF0ZSBpcyBjb21wYXJlZCBhZ2FpbnN0IHRoZSB1cGxvYWQgdGltZSBvZiBlYWNoIGluZGl2aWR1YWwgZGlzdHJpYnV0aW9uIGFydGlmYWN0XG4gICAqIChpLmUuLCB3aGVuIGVhY2ggZmlsZSB3YXMgdXBsb2FkZWQgdG8gdGhlIHBhY2thZ2UgaW5kZXgpLCBub3QgdGhlIHJlbGVhc2UgZGF0ZSBvZiB0aGVcbiAgICogcGFja2FnZSB2ZXJzaW9uLlxuICAgKlxuICAgKiBBY2NlcHRzIFJGQyAzMzM5IHRpbWVzdGFtcHMgKGUuZy4sIGAyMDA2LTEyLTAyVDAyOjA3OjQzWmApLCBhIFwiZnJpZW5kbHlcIiBkdXJhdGlvbiAoZS5nLixcbiAgICogYDI0IGhvdXJzYCwgYDEgd2Vla2AsIGAzMCBkYXlzYCksIG9yIGFuIElTTyA4NjAxIGR1cmF0aW9uIChlLmcuLCBgUFQyNEhgLCBgUDdEYCwgYFAzMERgKS5cbiAgICpcbiAgICogRHVyYXRpb25zIGRvIG5vdCByZXNwZWN0IHNlbWFudGljcyBvZiB0aGUgbG9jYWwgdGltZSB6b25lIGFuZCBhcmUgYWx3YXlzIHJlc29sdmVkIHRvIGEgZml4ZWRcbiAgICogbnVtYmVyIG9mIHNlY29uZHMgYXNzdW1pbmcgdGhhdCBhIGRheSBpcyAyNCBob3VycyAoZS5nLiwgRFNUIHRyYW5zaXRpb25zIGFyZSBpZ25vcmVkKS5cbiAgICogQ2FsZW5kYXIgdW5pdHMgc3VjaCBhcyBtb250aHMgYW5kIHllYXJzIGFyZSBub3QgYWxsb3dlZC5cbiAgICpcbiAgICogU2V0IHRvIGBmYWxzZWAgdG8gZGlzYWJsZSBgZXhjbHVkZS1uZXdlcmAuXG4gICAqXG4gICAqIEBzY2hlbWEgVXZDb25maWd1cmF0aW9uI2V4Y2x1ZGUtbmV3ZXJcbiAgICovXG4gIHJlYWRvbmx5IGV4Y2x1ZGVOZXdlcj86IEV4Y2x1ZGVOZXdlck92ZXJyaWRlO1xuXG4gIC8qKlxuICAgKiBMaW1pdCBjYW5kaWRhdGUgcGFja2FnZXMgZm9yIHNwZWNpZmljIHBhY2thZ2VzIHRvIHRob3NlIHRoYXQgd2VyZSB1cGxvYWRlZCBwcmlvciB0byB0aGVcbiAgICogZ2l2ZW4gZGF0ZS5cbiAgICpcbiAgICogQWNjZXB0cyBhIGRpY3Rpb25hcnkgZm9ybWF0IG9mIGBQQUNLQUdFID0gXCJEQVRFXCJgIHBhaXJzLCB3aGVyZSBgREFURWAgaXMgYW4gUkZDIDMzMzlcbiAgICogdGltZXN0YW1wIChlLmcuLCBgMjAwNi0xMi0wMlQwMjowNzo0M1pgKSwgYSBcImZyaWVuZGx5XCIgZHVyYXRpb24gKGUuZy4sIGAyNCBob3Vyc2AsIGAxIHdlZWtgLFxuICAgKiBgMzAgZGF5c2ApLCBvciBhIElTTyA4NjAxIGR1cmF0aW9uIChlLmcuLCBgUFQyNEhgLCBgUDdEYCwgYFAzMERgKS5cbiAgICpcbiAgICogRHVyYXRpb25zIGRvIG5vdCByZXNwZWN0IHNlbWFudGljcyBvZiB0aGUgbG9jYWwgdGltZSB6b25lIGFuZCBhcmUgYWx3YXlzIHJlc29sdmVkIHRvIGEgZml4ZWRcbiAgICogbnVtYmVyIG9mIHNlY29uZHMgYXNzdW1pbmcgdGhhdCBhIGRheSBpcyAyNCBob3VycyAoZS5nLiwgRFNUIHRyYW5zaXRpb25zIGFyZSBpZ25vcmVkKS5cbiAgICogQ2FsZW5kYXIgdW5pdHMgc3VjaCBhcyBtb250aHMgYW5kIHllYXJzIGFyZSBub3QgYWxsb3dlZC5cbiAgICpcbiAgICogU2V0IGEgcGFja2FnZSB0byBgZmFsc2VgIHRvIGV4ZW1wdCBpdCBmcm9tIHRoZSBnbG9iYWwgW2BleGNsdWRlLW5ld2VyYF0oI2V4Y2x1ZGUtbmV3ZXIpXG4gICAqIGNvbnN0cmFpbnQgZW50aXJlbHkuXG4gICAqXG4gICAqIEBzY2hlbWEgVXZDb25maWd1cmF0aW9uI2V4Y2x1ZGUtbmV3ZXItcGFja2FnZVxuICAgKi9cbiAgcmVhZG9ubHkgZXhjbHVkZU5ld2VyUGFja2FnZT86IHsgW2tleTogc3RyaW5nXTogRXhjbHVkZU5ld2VyT3ZlcnJpZGUgfTtcblxuICAvKipcbiAgICogQWRkaXRpb25hbCBidWlsZCBkZXBlbmRlbmNpZXMgZm9yIHBhY2thZ2VzLlxuICAgKlxuICAgKiBUaGlzIGFsbG93cyBleHRlbmRpbmcgdGhlIFBFUCA1MTcgYnVpbGQgZW52aXJvbm1lbnQgZm9yIHRoZSBwcm9qZWN0J3MgZGVwZW5kZW5jaWVzIHdpdGhcbiAgICogYWRkaXRpb25hbCBwYWNrYWdlcy4gVGhpcyBpcyB1c2VmdWwgZm9yIHBhY2thZ2VzIHRoYXQgYXNzdW1lIHRoZSBwcmVzZW5jZSBvZiBwYWNrYWdlcyBsaWtlXG4gICAqIGBwaXBgLCBhbmQgZG8gbm90IGRlY2xhcmUgdGhlbSBhcyBidWlsZCBkZXBlbmRlbmNpZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgVXZDb25maWd1cmF0aW9uI2V4dHJhLWJ1aWxkLWRlcGVuZGVuY2llc1xuICAgKi9cbiAgcmVhZG9ubHkgZXh0cmFCdWlsZERlcGVuZGVuY2llcz86IHsgW2tleTogc3RyaW5nXTogYW55W10gfTtcblxuICAvKipcbiAgICogRXh0cmEgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIHNldCB3aGVuIGJ1aWxkaW5nIGNlcnRhaW4gcGFja2FnZXMuXG4gICAqXG4gICAqIEVudmlyb25tZW50IHZhcmlhYmxlcyB3aWxsIGJlIGFkZGVkIHRvIHRoZSBlbnZpcm9ubWVudCB3aGVuIGJ1aWxkaW5nIHRoZVxuICAgKiBzcGVjaWZpZWQgcGFja2FnZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgVXZDb25maWd1cmF0aW9uI2V4dHJhLWJ1aWxkLXZhcmlhYmxlc1xuICAgKi9cbiAgcmVhZG9ubHkgZXh0cmFCdWlsZFZhcmlhYmxlcz86IHsgW2tleTogc3RyaW5nXTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSB9O1xuXG4gIC8qKlxuICAgKiBFeHRyYSBVUkxzIG9mIHBhY2thZ2UgaW5kZXhlcyB0byB1c2UsIGluIGFkZGl0aW9uIHRvIGAtLWluZGV4LXVybGAuXG4gICAqXG4gICAqIEFjY2VwdHMgZWl0aGVyIGEgcmVwb3NpdG9yeSBjb21wbGlhbnQgd2l0aCBbUEVQIDUwM10oaHR0cHM6Ly9wZXBzLnB5dGhvbi5vcmcvcGVwLTA1MDMvKVxuICAgKiAodGhlIHNpbXBsZSByZXBvc2l0b3J5IEFQSSksIG9yIGEgbG9jYWwgZGlyZWN0b3J5IGxhaWQgb3V0IGluIHRoZSBzYW1lIGZvcm1hdC5cbiAgICpcbiAgICogQWxsIGluZGV4ZXMgcHJvdmlkZWQgdmlhIHRoaXMgZmxhZyB0YWtlIHByaW9yaXR5IG92ZXIgdGhlIGluZGV4IHNwZWNpZmllZCBieVxuICAgKiBbYGluZGV4X3VybGBdKCNpbmRleC11cmwpIG9yIFtgaW5kZXhgXSgjaW5kZXgpIHdpdGggYGRlZmF1bHQgPSB0cnVlYC4gV2hlbiBtdWx0aXBsZSBpbmRleGVzXG4gICAqIGFyZSBwcm92aWRlZCwgZWFybGllciB2YWx1ZXMgdGFrZSBwcmlvcml0eS5cbiAgICpcbiAgICogVG8gY29udHJvbCB1didzIHJlc29sdXRpb24gc3RyYXRlZ3kgd2hlbiBtdWx0aXBsZSBpbmRleGVzIGFyZSBwcmVzZW50LCBzZWVcbiAgICogW2BpbmRleF9zdHJhdGVneWBdKCNpbmRleC1zdHJhdGVneSkuXG4gICAqXG4gICAqIChEZXByZWNhdGVkOiB1c2UgYGluZGV4YCBpbnN0ZWFkLilcbiAgICpcbiAgICogQHNjaGVtYSBVdkNvbmZpZ3VyYXRpb24jZXh0cmEtaW5kZXgtdXJsXG4gICAqL1xuICByZWFkb25seSBleHRyYUluZGV4VXJsPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIExvY2F0aW9ucyB0byBzZWFyY2ggZm9yIGNhbmRpZGF0ZSBkaXN0cmlidXRpb25zLCBpbiBhZGRpdGlvbiB0byB0aG9zZSBmb3VuZCBpbiB0aGUgcmVnaXN0cnlcbiAgICogaW5kZXhlcy5cbiAgICpcbiAgICogSWYgYSBwYXRoLCB0aGUgdGFyZ2V0IG11c3QgYmUgYSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyBwYWNrYWdlcyBhcyB3aGVlbCBmaWxlcyAoYC53aGxgKSBvclxuICAgKiBzb3VyY2UgZGlzdHJpYnV0aW9ucyAoZS5nLiwgYC50YXIuZ3pgIG9yIGAuemlwYCkgYXQgdGhlIHRvcCBsZXZlbC5cbiAgICpcbiAgICogSWYgYSBVUkwsIHRoZSBwYWdlIG11c3QgY29udGFpbiBhIGZsYXQgbGlzdCBvZiBsaW5rcyB0byBwYWNrYWdlIGZpbGVzIGFkaGVyaW5nIHRvIHRoZVxuICAgKiBmb3JtYXRzIGRlc2NyaWJlZCBhYm92ZS5cbiAgICpcbiAgICogQHNjaGVtYSBVdkNvbmZpZ3VyYXRpb24jZmluZC1saW5rc1xuICAgKi9cbiAgcmVhZG9ubHkgZmluZExpbmtzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBzdHJhdGVneSB0byB1c2Ugd2hlbiBzZWxlY3RpbmcgbXVsdGlwbGUgdmVyc2lvbnMgb2YgYSBnaXZlbiBwYWNrYWdlIGFjcm9zcyBQeXRob25cbiAgICogdmVyc2lvbnMgYW5kIHBsYXRmb3Jtcy5cbiAgICpcbiAgICogQnkgZGVmYXVsdCwgdXYgd2lsbCBvcHRpbWl6ZSBmb3Igc2VsZWN0aW5nIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiBlYWNoIHBhY2thZ2UgZm9yIGVhY2hcbiAgICogc3VwcG9ydGVkIFB5dGhvbiB2ZXJzaW9uIChgcmVxdWlyZXMtcHl0aG9uYCksIHdoaWxlIG1pbmltaXppbmcgdGhlIG51bWJlciBvZiBzZWxlY3RlZFxuICAgKiB2ZXJzaW9ucyBhY3Jvc3MgcGxhdGZvcm1zLlxuICAgKlxuICAgKiBVbmRlciBgZmV3ZXN0YCwgdXYgd2lsbCBtaW5pbWl6ZSB0aGUgbnVtYmVyIG9mIHNlbGVjdGVkIHZlcnNpb25zIGZvciBlYWNoIHBhY2thZ2UsXG4gICAqIHByZWZlcnJpbmcgb2xkZXIgdmVyc2lvbnMgdGhhdCBhcmUgY29tcGF0aWJsZSB3aXRoIGEgd2lkZXIgcmFuZ2Ugb2Ygc3VwcG9ydGVkIFB5dGhvblxuICAgKiB2ZXJzaW9ucyBvciBwbGF0Zm9ybXMuXG4gICAqXG4gICAqIEBzY2hlbWEgVXZDb25maWd1cmF0aW9uI2Zvcmstc3RyYXRlZ3lcbiAgICovXG4gIHJlYWRvbmx5IGZvcmtTdHJhdGVneT86IEZvcmtTdHJhdGVneTtcblxuICAvKipcbiAgICogVGhlIFVSTCBvZiB0aGUgSFRUUCBwcm94eSB0byB1c2UuXG4gICAqXG4gICAqIEBzY2hlbWEgVXZDb25maWd1cmF0aW9uI2h0dHAtcHJveHlcbiAgICovXG4gIHJlYWRvbmx5IGh0dHBQcm94eT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIFVSTCBvZiB0aGUgSFRUUFMgcHJveHkgdG8gdXNlLlxuICAgKlxuICAgKiBAc2NoZW1hIFV2Q29uZmlndXJhdGlvbiNodHRwcy1wcm94eVxuICAgKi9cbiAgcmVhZG9ubHkgaHR0cHNQcm94eT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGluZGV4ZXMgdG8gdXNlIHdoZW4gcmVzb2x2aW5nIGRlcGVuZGVuY2llcy5cbiAgICpcbiAgICogQWNjZXB0cyBlaXRoZXIgYSByZXBvc2l0b3J5IGNvbXBsaWFudCB3aXRoIFtQRVAgNTAzXShodHRwczovL3BlcHMucHl0aG9uLm9yZy9wZXAtMDUwMy8pXG4gICAqICh0aGUgc2ltcGxlIHJlcG9zaXRvcnkgQVBJKSwgb3IgYSBsb2NhbCBkaXJlY3RvcnkgbGFpZCBvdXQgaW4gdGhlIHNhbWUgZm9ybWF0LlxuICAgKlxuICAgKiBJbmRleGVzIGFyZSBjb25zaWRlcmVkIGluIHRoZSBvcmRlciBpbiB3aGljaCB0aGV5J3JlIGRlZmluZWQsIHN1Y2ggdGhhdCB0aGUgZmlyc3QtZGVmaW5lZFxuICAgKiBpbmRleCBoYXMgdGhlIGhpZ2hlc3QgcHJpb3JpdHkuIEZ1cnRoZXIsIHRoZSBpbmRleGVzIHByb3ZpZGVkIGJ5IHRoaXMgc2V0dGluZyBhcmUgZ2l2ZW5cbiAgICogaGlnaGVyIHByaW9yaXR5IHRoYW4gYW55IGluZGV4ZXMgc3BlY2lmaWVkIHZpYSBbYGluZGV4X3VybGBdKCNpbmRleC11cmwpIG9yXG4gICAqIFtgZXh0cmFfaW5kZXhfdXJsYF0oI2V4dHJhLWluZGV4LXVybCkuIHV2IHdpbGwgb25seSBjb25zaWRlciB0aGUgZmlyc3QgaW5kZXggdGhhdCBjb250YWluc1xuICAgKiBhIGdpdmVuIHBhY2thZ2UsIHVubGVzcyBhbiBhbHRlcm5hdGl2ZSBbaW5kZXggc3RyYXRlZ3ldKCNpbmRleC1zdHJhdGVneSkgaXMgc3BlY2lmaWVkLlxuICAgKlxuICAgKiBJZiBhbiBpbmRleCBpcyBtYXJrZWQgYXMgYGV4cGxpY2l0ID0gdHJ1ZWAsIGl0IHdpbGwgYmUgdXNlZCBleGNsdXNpdmVseSBmb3IgdGhlXG4gICAqIGRlcGVuZGVuY2llcyB0aGF0IHNlbGVjdCBpdCBleHBsaWNpdGx5IHZpYSBgW3Rvb2wudXYuc291cmNlc11gLCBhcyBpbjpcbiAgICpcbiAgICogYGBgdG9tbFxuICAgKiBbW3Rvb2wudXYuaW5kZXhdXVxuICAgKiBuYW1lID0gXCJweXRvcmNoXCJcbiAgICogdXJsID0gXCJodHRwczovL2Rvd25sb2FkLnB5dG9yY2gub3JnL3dobC9jdTEzMFwiXG4gICAqIGV4cGxpY2l0ID0gdHJ1ZVxuICAgKlxuICAgKiBbdG9vbC51di5zb3VyY2VzXVxuICAgKiB0b3JjaCA9IHsgaW5kZXggPSBcInB5dG9yY2hcIiB9XG4gICAqIGBgYFxuICAgKlxuICAgKiBJZiBhbiBpbmRleCBpcyBtYXJrZWQgYXMgYGRlZmF1bHQgPSB0cnVlYCwgaXQgd2lsbCBiZSBtb3ZlZCB0byB0aGUgZW5kIG9mIHRoZSBwcmlvcml0aXplZCBsaXN0LCBzdWNoIHRoYXQgaXQgaXNcbiAgICogZ2l2ZW4gdGhlIGxvd2VzdCBwcmlvcml0eSB3aGVuIHJlc29sdmluZyBwYWNrYWdlcy4gQWRkaXRpb25hbGx5LCBtYXJraW5nIGFuIGluZGV4IGFzIGRlZmF1bHQgd2lsbCBkaXNhYmxlIHRoZVxuICAgKiBQeVBJIGRlZmF1bHQgaW5kZXguXG4gICAqXG4gICAqIEBzY2hlbWEgVXZDb25maWd1cmF0aW9uI2luZGV4XG4gICAqL1xuICByZWFkb25seSBpbmRleD86IEluZGV4W107XG5cbiAgLyoqXG4gICAqIFRoZSBzdHJhdGVneSB0byB1c2Ugd2hlbiByZXNvbHZpbmcgYWdhaW5zdCBtdWx0aXBsZSBpbmRleCBVUkxzLlxuICAgKlxuICAgKiBCeSBkZWZhdWx0LCB1diB3aWxsIHN0b3AgYXQgdGhlIGZpcnN0IGluZGV4IG9uIHdoaWNoIGEgZ2l2ZW4gcGFja2FnZSBpcyBhdmFpbGFibGUsIGFuZFxuICAgKiBsaW1pdCByZXNvbHV0aW9ucyB0byB0aG9zZSBwcmVzZW50IG9uIHRoYXQgZmlyc3QgaW5kZXggKGBmaXJzdC1pbmRleGApLiBUaGlzIHByZXZlbnRzXG4gICAqIFwiZGVwZW5kZW5jeSBjb25mdXNpb25cIiBhdHRhY2tzLCB3aGVyZWJ5IGFuIGF0dGFja2VyIGNhbiB1cGxvYWQgYSBtYWxpY2lvdXMgcGFja2FnZSB1bmRlciB0aGVcbiAgICogc2FtZSBuYW1lIHRvIGFuIGFsdGVybmF0ZSBpbmRleC5cbiAgICpcbiAgICogQHNjaGVtYSBVdkNvbmZpZ3VyYXRpb24jaW5kZXgtc3RyYXRlZ3lcbiAgICovXG4gIHJlYWRvbmx5IGluZGV4U3RyYXRlZ3k/OiBJbmRleFN0cmF0ZWd5O1xuXG4gIC8qKlxuICAgKiBUaGUgVVJMIG9mIHRoZSBQeXRob24gcGFja2FnZSBpbmRleCAoYnkgZGVmYXVsdDogPGh0dHBzOi8vcHlwaS5vcmcvc2ltcGxlPikuXG4gICAqXG4gICAqIEFjY2VwdHMgZWl0aGVyIGEgcmVwb3NpdG9yeSBjb21wbGlhbnQgd2l0aCBbUEVQIDUwM10oaHR0cHM6Ly9wZXBzLnB5dGhvbi5vcmcvcGVwLTA1MDMvKVxuICAgKiAodGhlIHNpbXBsZSByZXBvc2l0b3J5IEFQSSksIG9yIGEgbG9jYWwgZGlyZWN0b3J5IGxhaWQgb3V0IGluIHRoZSBzYW1lIGZvcm1hdC5cbiAgICpcbiAgICogVGhlIGluZGV4IHByb3ZpZGVkIGJ5IHRoaXMgc2V0dGluZyBpcyBnaXZlbiBsb3dlciBwcmlvcml0eSB0aGFuIGFueSBpbmRleGVzIHNwZWNpZmllZCB2aWFcbiAgICogW2BleHRyYV9pbmRleF91cmxgXSgjZXh0cmEtaW5kZXgtdXJsKSBvciBbYGluZGV4YF0oI2luZGV4KS5cbiAgICpcbiAgICogKERlcHJlY2F0ZWQ6IHVzZSBgaW5kZXhgIGluc3RlYWQuKVxuICAgKlxuICAgKiBAc2NoZW1hIFV2Q29uZmlndXJhdGlvbiNpbmRleC11cmxcbiAgICovXG4gIHJlYWRvbmx5IGluZGV4VXJsPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBdHRlbXB0IHRvIHVzZSBga2V5cmluZ2AgZm9yIGF1dGhlbnRpY2F0aW9uIGZvciBpbmRleCBVUkxzLlxuICAgKlxuICAgKiBBdCBwcmVzZW50LCBvbmx5IGAtLWtleXJpbmctcHJvdmlkZXIgc3VicHJvY2Vzc2AgaXMgc3VwcG9ydGVkLCB3aGljaCBjb25maWd1cmVzIHV2IHRvXG4gICAqIHVzZSB0aGUgYGtleXJpbmdgIENMSSB0byBoYW5kbGUgYXV0aGVudGljYXRpb24uXG4gICAqXG4gICAqIEBzY2hlbWEgVXZDb25maWd1cmF0aW9uI2tleXJpbmctcHJvdmlkZXJcbiAgICovXG4gIHJlYWRvbmx5IGtleXJpbmdQcm92aWRlcj86IEtleXJpbmdQcm92aWRlclR5cGU7XG5cbiAgLyoqXG4gICAqIFRoZSBtZXRob2QgdG8gdXNlIHdoZW4gaW5zdGFsbGluZyBwYWNrYWdlcyBmcm9tIHRoZSBnbG9iYWwgY2FjaGUuXG4gICAqXG4gICAqIERlZmF1bHRzIHRvIGBjbG9uZWAgKGFsc28ga25vd24gYXMgQ29weS1vbi1Xcml0ZSkgb24gbWFjT1MgYW5kIExpbnV4LCBhbmQgYGhhcmRsaW5rYCBvblxuICAgKiBXaW5kb3dzLlxuICAgKlxuICAgKiBXQVJOSU5HOiBUaGUgdXNlIG9mIHN5bWxpbmsgbGluayBtb2RlIGlzIGRpc2NvdXJhZ2VkLCBhcyB0aGV5IGNyZWF0ZSB0aWdodCBjb3VwbGluZyBiZXR3ZWVuXG4gICAqIHRoZSBjYWNoZSBhbmQgdGhlIHRhcmdldCBlbnZpcm9ubWVudC4gRm9yIGV4YW1wbGUsIGNsZWFyaW5nIHRoZSBjYWNoZSAoYHV2IGNhY2hlIGNsZWFuYClcbiAgICogd2lsbCBicmVhayBhbGwgaW5zdGFsbGVkIHBhY2thZ2VzIGJ5IHdheSBvZiByZW1vdmluZyB0aGUgdW5kZXJseWluZyBzb3VyY2UgZmlsZXMuIFVzZVxuICAgKiBzeW1saW5rcyB3aXRoIGNhdXRpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IGNsb25lYCAoYWxzbyBrbm93biBhcyBDb3B5LW9uLVdyaXRlKSBvbiBtYWNPUyBhbmQgTGludXgsIGFuZCBgaGFyZGxpbmtgIG9uXG4gICAqIEBzY2hlbWEgVXZDb25maWd1cmF0aW9uI2xpbmstbW9kZVxuICAgKi9cbiAgcmVhZG9ubHkgbGlua01vZGU/OiBMaW5rTW9kZTtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgcHJvamVjdCBpcyBtYW5hZ2VkIGJ5IHV2LiBJZiBgZmFsc2VgLCB1diB3aWxsIGlnbm9yZSB0aGUgcHJvamVjdCB3aGVuXG4gICAqIGB1diBydW5gIGlzIGludm9rZWQuXG4gICAqXG4gICAqIEBzY2hlbWEgVXZDb25maWd1cmF0aW9uI21hbmFnZWRcbiAgICovXG4gIHJlYWRvbmx5IG1hbmFnZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGxvYWQgVExTIGNlcnRpZmljYXRlcyBmcm9tIHRoZSBwbGF0Zm9ybSdzIG5hdGl2ZSBjZXJ0aWZpY2F0ZSBzdG9yZS5cbiAgICpcbiAgICogQnkgZGVmYXVsdCwgdXYgdXNlcyBidW5kbGVkIE1vemlsbGEgcm9vdCBjZXJ0aWZpY2F0ZXMuIFdoZW4gZW5hYmxlZCwgdGhpcyBsb2Fkc1xuICAgKiBjZXJ0aWZpY2F0ZXMgZnJvbSB0aGUgcGxhdGZvcm0ncyBuYXRpdmUgY2VydGlmaWNhdGUgc3RvcmUgaW5zdGVhZC5cbiAgICpcbiAgICogKERlcHJlY2F0ZWQ6IHVzZSBgc3lzdGVtLWNlcnRzYCBpbnN0ZWFkLilcbiAgICpcbiAgICogQHNjaGVtYSBVdkNvbmZpZ3VyYXRpb24jbmF0aXZlLXRsc1xuICAgKi9cbiAgcmVhZG9ubHkgbmF0aXZlVGxzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRG9uJ3QgaW5zdGFsbCBwcmUtYnVpbHQgd2hlZWxzLlxuICAgKlxuICAgKiBUaGUgZ2l2ZW4gcGFja2FnZXMgd2lsbCBiZSBidWlsdCBhbmQgaW5zdGFsbGVkIGZyb20gc291cmNlLiBUaGUgcmVzb2x2ZXIgd2lsbCBzdGlsbCB1c2VcbiAgICogcHJlLWJ1aWx0IHdoZWVscyB0byBleHRyYWN0IHBhY2thZ2UgbWV0YWRhdGEsIGlmIGF2YWlsYWJsZS5cbiAgICpcbiAgICogQHNjaGVtYSBVdkNvbmZpZ3VyYXRpb24jbm8tYmluYXJ5XG4gICAqL1xuICByZWFkb25seSBub0JpbmFyeT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIERvbid0IGluc3RhbGwgcHJlLWJ1aWx0IHdoZWVscyBmb3IgYSBzcGVjaWZpYyBwYWNrYWdlLlxuICAgKlxuICAgKiBAc2NoZW1hIFV2Q29uZmlndXJhdGlvbiNuby1iaW5hcnktcGFja2FnZVxuICAgKi9cbiAgcmVhZG9ubHkgbm9CaW5hcnlQYWNrYWdlPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIERvbid0IGJ1aWxkIHNvdXJjZSBkaXN0cmlidXRpb25zLlxuICAgKlxuICAgKiBXaGVuIGVuYWJsZWQsIHV2IHdpbGwgcmV1c2UgY2FjaGVkIHdoZWVscyBmcm9tIHByZXZpb3VzbHkgYnVpbHQgc291cmNlIGRpc3RyaWJ1dGlvbnMsIGJ1dFxuICAgKiBvcGVyYXRpb25zIHRoYXQgcmVxdWlyZSBidWlsZGluZyBhIHNvdXJjZSBkaXN0cmlidXRpb24gd2lsbCBleGl0IHdpdGggYW4gZXJyb3IuIHV2IG1heVxuICAgKiBzdGlsbCBidWlsZCBlZGl0YWJsZSByZXF1aXJlbWVudHMsIGFuZCB0aGVpciBidWlsZCBiYWNrZW5kcyBtYXkgcnVuIGFyYml0cmFyeSBQeXRob24gY29kZS5cbiAgICpcbiAgICogQHNjaGVtYSBVdkNvbmZpZ3VyYXRpb24jbm8tYnVpbGRcbiAgICovXG4gIHJlYWRvbmx5IG5vQnVpbGQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBEaXNhYmxlIGlzb2xhdGlvbiB3aGVuIGJ1aWxkaW5nIHNvdXJjZSBkaXN0cmlidXRpb25zLlxuICAgKlxuICAgKiBBc3N1bWVzIHRoYXQgYnVpbGQgZGVwZW5kZW5jaWVzIHNwZWNpZmllZCBieSBbUEVQIDUxOF0oaHR0cHM6Ly9wZXBzLnB5dGhvbi5vcmcvcGVwLTA1MTgvKVxuICAgKiBhcmUgYWxyZWFkeSBpbnN0YWxsZWQuXG4gICAqXG4gICAqIEBzY2hlbWEgVXZDb25maWd1cmF0aW9uI25vLWJ1aWxkLWlzb2xhdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgbm9CdWlsZElzb2xhdGlvbj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIERpc2FibGUgaXNvbGF0aW9uIHdoZW4gYnVpbGRpbmcgc291cmNlIGRpc3RyaWJ1dGlvbnMgZm9yIGEgc3BlY2lmaWMgcGFja2FnZS5cbiAgICpcbiAgICogQXNzdW1lcyB0aGF0IHRoZSBwYWNrYWdlcycgYnVpbGQgZGVwZW5kZW5jaWVzIHNwZWNpZmllZCBieSBbUEVQIDUxOF0oaHR0cHM6Ly9wZXBzLnB5dGhvbi5vcmcvcGVwLTA1MTgvKVxuICAgKiBhcmUgYWxyZWFkeSBpbnN0YWxsZWQuXG4gICAqXG4gICAqIEBzY2hlbWEgVXZDb25maWd1cmF0aW9uI25vLWJ1aWxkLWlzb2xhdGlvbi1wYWNrYWdlXG4gICAqL1xuICByZWFkb25seSBub0J1aWxkSXNvbGF0aW9uUGFja2FnZT86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBEb24ndCBidWlsZCBzb3VyY2UgZGlzdHJpYnV0aW9ucyBmb3IgYSBzcGVjaWZpYyBwYWNrYWdlLlxuICAgKlxuICAgKiBAc2NoZW1hIFV2Q29uZmlndXJhdGlvbiNuby1idWlsZC1wYWNrYWdlXG4gICAqL1xuICByZWFkb25seSBub0J1aWxkUGFja2FnZT86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBBdm9pZCByZWFkaW5nIGZyb20gb3Igd3JpdGluZyB0byB0aGUgY2FjaGUsIGluc3RlYWQgdXNpbmcgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5IGZvciB0aGVcbiAgICogZHVyYXRpb24gb2YgdGhlIG9wZXJhdGlvbi5cbiAgICpcbiAgICogQHNjaGVtYSBVdkNvbmZpZ3VyYXRpb24jbm8tY2FjaGVcbiAgICovXG4gIHJlYWRvbmx5IG5vQ2FjaGU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJZ25vcmUgYWxsIHJlZ2lzdHJ5IGluZGV4ZXMgKGUuZy4sIFB5UEkpLCBpbnN0ZWFkIHJlbHlpbmcgb24gZGlyZWN0IFVSTCBkZXBlbmRlbmNpZXMgYW5kXG4gICAqIHRob3NlIHByb3ZpZGVkIHZpYSBgLS1maW5kLWxpbmtzYC5cbiAgICpcbiAgICogQHNjaGVtYSBVdkNvbmZpZ3VyYXRpb24jbm8taW5kZXhcbiAgICovXG4gIHJlYWRvbmx5IG5vSW5kZXg/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgaG9zdHMgdG8gZXhjbHVkZSBmcm9tIHByb3h5aW5nLlxuICAgKlxuICAgKiBAc2NoZW1hIFV2Q29uZmlndXJhdGlvbiNuby1wcm94eVxuICAgKi9cbiAgcmVhZG9ubHkgbm9Qcm94eT86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBJZ25vcmUgdGhlIGB0b29sLnV2LnNvdXJjZXNgIHRhYmxlIHdoZW4gcmVzb2x2aW5nIGRlcGVuZGVuY2llcy4gVXNlZCB0byBsb2NrIGFnYWluc3QgdGhlXG4gICAqIHN0YW5kYXJkcy1jb21wbGlhbnQsIHB1Ymxpc2hhYmxlIHBhY2thZ2UgbWV0YWRhdGEsIGFzIG9wcG9zZWQgdG8gdXNpbmcgYW55IGxvY2FsIG9yIEdpdFxuICAgKiBzb3VyY2VzLlxuICAgKlxuICAgKiBAc2NoZW1hIFV2Q29uZmlndXJhdGlvbiNuby1zb3VyY2VzXG4gICAqL1xuICByZWFkb25seSBub1NvdXJjZXM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJZ25vcmUgYHRvb2wudXYuc291cmNlc2AgZm9yIHRoZSBzcGVjaWZpZWQgcGFja2FnZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgVXZDb25maWd1cmF0aW9uI25vLXNvdXJjZXMtcGFja2FnZVxuICAgKi9cbiAgcmVhZG9ubHkgbm9Tb3VyY2VzUGFja2FnZT86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBEaXNhYmxlIG5ldHdvcmsgYWNjZXNzLCByZWx5aW5nIG9ubHkgb24gbG9jYWxseSBjYWNoZWQgZGF0YSBhbmQgbG9jYWxseSBhdmFpbGFibGUgZmlsZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgVXZDb25maWd1cmF0aW9uI29mZmxpbmVcbiAgICovXG4gIHJlYWRvbmx5IG9mZmxpbmU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBPdmVycmlkZXMgdG8gYXBwbHkgd2hlbiByZXNvbHZpbmcgdGhlIHByb2plY3QncyBkZXBlbmRlbmNpZXMuXG4gICAqXG4gICAqIE92ZXJyaWRlcyBhcmUgdXNlZCB0byBmb3JjZSBzZWxlY3Rpb24gb2YgYSBzcGVjaWZpYyB2ZXJzaW9uIG9mIGEgcGFja2FnZSwgcmVnYXJkbGVzcyBvZiB0aGVcbiAgICogdmVyc2lvbiByZXF1ZXN0ZWQgYnkgYW55IG90aGVyIHBhY2thZ2UsIGFuZCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgY2hvb3NpbmcgdGhhdCB2ZXJzaW9uXG4gICAqIHdvdWxkIHR5cGljYWxseSBjb25zdGl0dXRlIGFuIGludmFsaWQgcmVzb2x1dGlvbi5cbiAgICpcbiAgICogV2hpbGUgY29uc3RyYWludHMgYXJlIF9hZGRpdGl2ZV8sIGluIHRoYXQgdGhleSdyZSBjb21iaW5lZCB3aXRoIHRoZSByZXF1aXJlbWVudHMgb2YgdGhlXG4gICAqIGNvbnN0aXR1ZW50IHBhY2thZ2VzLCBvdmVycmlkZXMgYXJlIF9hYnNvbHV0ZV8sIGluIHRoYXQgdGhleSBjb21wbGV0ZWx5IHJlcGxhY2UgdGhlXG4gICAqIHJlcXVpcmVtZW50cyBvZiBhbnkgY29uc3RpdHVlbnQgcGFja2FnZXMuXG4gICAqXG4gICAqIEluY2x1ZGluZyBhIHBhY2thZ2UgYXMgYW4gb3ZlcnJpZGUgd2lsbCBfbm90XyB0cmlnZ2VyIGluc3RhbGxhdGlvbiBvZiB0aGUgcGFja2FnZSBvbiBpdHNcbiAgICogb3duOyBpbnN0ZWFkLCB0aGUgcGFja2FnZSBtdXN0IGJlIHJlcXVlc3RlZCBlbHNld2hlcmUgaW4gdGhlIHByb2plY3QncyBmaXJzdC1wYXJ0eSBvclxuICAgKiB0cmFuc2l0aXZlIGRlcGVuZGVuY2llcy5cbiAgICpcbiAgICogT3ZlcnJpZGVzIGNhbiBiZSBsaW1pdGVkIHRvIHRoZSBkZXBlbmRlbmNpZXMgZGVjbGFyZWQgYnkgYSBzcGVjaWZpYyBwYWNrYWdlIHZlcnNpb24gYnlcbiAgICogdXNpbmcgYSB0YWJsZSB3aXRoIGBwYWNrYWdlYCBhbmQgYGRlcGVuZGVuY2llc2AuIFRoZSBgcGFja2FnZWAgdGFibGUgaWRlbnRpZmllcyB0aGUgcGFja2FnZVxuICAgKiB3aG9zZSBkZXBlbmRlbmNpZXMgd2lsbCBiZSBvdmVycmlkZGVuIGJ5IGBuYW1lYCBhbmQsIG9wdGlvbmFsbHksIGB2ZXJzaW9uYC4gSWYgYHZlcnNpb25gIGlzXG4gICAqIG9taXR0ZWQsIHRoZSBvdmVycmlkZXMgYXBwbHkgdG8gYWxsIHZlcnNpb25zIG9mIHRoYXQgcGFja2FnZS4gUmVxdWlyZW1lbnRzIGluIGBkZXBlbmRlbmNpZXNgXG4gICAqIHJlcGxhY2UgZGVwZW5kZW5jaWVzIHdpdGggdGhlIHNhbWUgbmFtZSBhbmQgYWRkIGRlcGVuZGVuY2llcyB0aGF0IGFyZSBub3QgZGVjbGFyZWQgYnkgdGhlXG4gICAqIHBhY2thZ2UuIERlcGVuZGVuY2llcyBub3QgbGlzdGVkIGluIGBkZXBlbmRlbmNpZXNgIGFyZSBsZWZ0IHVuY2hhbmdlZC5cbiAgICpcbiAgICogU2NvcGVkIG92ZXJyaWRlcyBjdXJyZW50bHkgc3VwcG9ydCByZWdpc3RyeSB2ZXJzaW9uIHNwZWNpZmllcnMgb25seS4gRGlyZWN0IFVSTCBhbmQgcGF0aFxuICAgKiBzb3VyY2VzLCBpbmNsdWRpbmcgR2l0IHNvdXJjZXMsIGFuZCBleHBsaWNpdCBpbmRleGVzIGFyZSBub3Qgc3VwcG9ydGVkLlxuICAgKlxuICAgKiAhISEgbm90ZVxuICAgKiBJbiBgdXYgbG9ja2AsIGB1diBzeW5jYCwgYW5kIGB1diBydW5gLCB1diB3aWxsIG9ubHkgcmVhZCBgb3ZlcnJpZGUtZGVwZW5kZW5jaWVzYCBmcm9tXG4gICAqIHRoZSBgcHlwcm9qZWN0LnRvbWxgIGF0IHRoZSB3b3Jrc3BhY2Ugcm9vdCwgYW5kIHdpbGwgaWdub3JlIGFueSBkZWNsYXJhdGlvbnMgaW4gb3RoZXJcbiAgICogd29ya3NwYWNlIG1lbWJlcnMgb3IgYHV2LnRvbWxgIGZpbGVzLlxuICAgKlxuICAgKiBAc2NoZW1hIFV2Q29uZmlndXJhdGlvbiNvdmVycmlkZS1kZXBlbmRlbmNpZXNcbiAgICovXG4gIHJlYWRvbmx5IG92ZXJyaWRlRGVwZW5kZW5jaWVzPzogYW55W107XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHByb2plY3Qgc2hvdWxkIGJlIGNvbnNpZGVyZWQgYSBQeXRob24gcGFja2FnZSwgb3IgYSBub24tcGFja2FnZSAoXCJ2aXJ0dWFsXCIpXG4gICAqIHByb2plY3QuXG4gICAqXG4gICAqIFBhY2thZ2VzIGFyZSBidWlsdCBhbmQgaW5zdGFsbGVkIGludG8gdGhlIHZpcnR1YWwgZW52aXJvbm1lbnQgaW4gZWRpdGFibGUgbW9kZSBhbmQgdGh1c1xuICAgKiByZXF1aXJlIGEgYnVpbGQgYmFja2VuZCwgd2hpbGUgdmlydHVhbCBwcm9qZWN0cyBhcmUgX25vdF8gYnVpbHQgb3IgaW5zdGFsbGVkOyBpbnN0ZWFkLCBvbmx5XG4gICAqIHRoZWlyIGRlcGVuZGVuY2llcyBhcmUgaW5jbHVkZWQgaW4gdGhlIHZpcnR1YWwgZW52aXJvbm1lbnQuXG4gICAqXG4gICAqIENyZWF0aW5nIGEgcGFja2FnZSByZXF1aXJlcyB0aGF0IGEgYGJ1aWxkLXN5c3RlbWAgaXMgcHJlc2VudCBpbiB0aGUgYHB5cHJvamVjdC50b21sYCwgYW5kXG4gICAqIHRoYXQgdGhlIHByb2plY3QgYWRoZXJlcyB0byBhIHN0cnVjdHVyZSB0aGF0IGFkaGVyZXMgdG8gdGhlIGJ1aWxkIGJhY2tlbmQncyBleHBlY3RhdGlvbnNcbiAgICogKGUuZy4sIGEgYHNyY2AgbGF5b3V0KS5cbiAgICpcbiAgICogQHNjaGVtYSBVdkNvbmZpZ3VyYXRpb24jcGFja2FnZVxuICAgKi9cbiAgcmVhZG9ubHkgcGFja2FnZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgVXZDb25maWd1cmF0aW9uI3BpcFxuICAgKi9cbiAgcmVhZG9ubHkgcGlwPzogUGlwT3B0aW9ucztcblxuICAvKipcbiAgICogVGhlIHN0cmF0ZWd5IHRvIHVzZSB3aGVuIGNvbnNpZGVyaW5nIHByZS1yZWxlYXNlIHZlcnNpb25zLlxuICAgKlxuICAgKiBCeSBkZWZhdWx0LCB1diB3aWxsIGFjY2VwdCBwcmUtcmVsZWFzZXMgZm9yIHBhY2thZ2VzIHRoYXQgX29ubHlfIHB1Ymxpc2ggcHJlLXJlbGVhc2VzLFxuICAgKiBhbG9uZyB3aXRoIGZpcnN0LXBhcnR5IHJlcXVpcmVtZW50cyB0aGF0IGNvbnRhaW4gYW4gZXhwbGljaXQgcHJlLXJlbGVhc2UgbWFya2VyIGluIHRoZVxuICAgKiBkZWNsYXJlZCBzcGVjaWZpZXJzIChgaWYtbmVjZXNzYXJ5LW9yLWV4cGxpY2l0YCkuXG4gICAqXG4gICAqIEBzY2hlbWEgVXZDb25maWd1cmF0aW9uI3ByZXJlbGVhc2VcbiAgICovXG4gIHJlYWRvbmx5IHByZXJlbGVhc2U/OiBQcmVyZWxlYXNlTW9kZTtcblxuICAvKipcbiAgICogV2hldGhlciB0byBlbmFibGUgYWxsIGV4cGVyaW1lbnRhbCwgcHJldmlldyBmZWF0dXJlcy5cbiAgICpcbiAgICogVXNlIGBwcmV2aWV3LWZlYXR1cmVzYCBpbnN0ZWFkLlxuICAgKlxuICAgKiBAc2NoZW1hIFV2Q29uZmlndXJhdGlvbiNwcmV2aWV3XG4gICAqL1xuICByZWFkb25seSBwcmV2aWV3PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBlbmFibGUgc3BlY2lmaWMgb3IgYWxsIGV4cGVyaW1lbnRhbCBwcmV2aWV3IGZlYXR1cmVzLlxuICAgKlxuICAgKiBVbmtub3duIGZlYXR1cmUgbmFtZXMgYXJlIGlnbm9yZWQgd2l0aCBhIHdhcm5pbmcuXG4gICAqXG4gICAqIEBzY2hlbWEgVXZDb25maWd1cmF0aW9uI3ByZXZpZXctZmVhdHVyZXNcbiAgICovXG4gIHJlYWRvbmx5IHByZXZpZXdGZWF0dXJlcz86IGFueTtcblxuICAvKipcbiAgICogVGhlIFVSTCBmb3IgcHVibGlzaGluZyBwYWNrYWdlcyB0byB0aGUgUHl0aG9uIHBhY2thZ2UgaW5kZXggKGJ5IGRlZmF1bHQ6XG4gICAqIDxodHRwczovL3VwbG9hZC5weXBpLm9yZy9sZWdhY3kvPikuXG4gICAqXG4gICAqIEBzY2hlbWEgVXZDb25maWd1cmF0aW9uI3B1Ymxpc2gtdXJsXG4gICAqL1xuICByZWFkb25seSBwdWJsaXNoVXJsPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBNaXJyb3IgVVJMIHRvIHVzZSBmb3IgZG93bmxvYWRpbmcgbWFuYWdlZCBQeVB5IGluc3RhbGxhdGlvbnMuXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIG1hbmFnZWQgUHlQeSBpbnN0YWxsYXRpb25zIGFyZSBkb3dubG9hZGVkIGZyb20gW2Rvd25sb2Fkcy5weXRob24ub3JnXShodHRwczovL2Rvd25sb2Fkcy5weXRob24ub3JnLykuXG4gICAqIFRoaXMgdmFyaWFibGUgY2FuIGJlIHNldCB0byBhIG1pcnJvciBVUkwgdG8gdXNlIGEgZGlmZmVyZW50IHNvdXJjZSBmb3IgUHlQeSBpbnN0YWxsYXRpb25zLlxuICAgKiBUaGUgcHJvdmlkZWQgVVJMIHdpbGwgcmVwbGFjZSBgaHR0cHM6Ly9kb3dubG9hZHMucHl0aG9uLm9yZy9weXB5YCBpbiwgZS5nLiwgYGh0dHBzOi8vZG93bmxvYWRzLnB5dGhvbi5vcmcvcHlweS9weXB5My44LXY3LjMuNy1vc3g2NC50YXIuYnoyYC5cbiAgICpcbiAgICogRGlzdHJpYnV0aW9ucyBjYW4gYmUgcmVhZCBmcm9tIGFcbiAgICogbG9jYWwgZGlyZWN0b3J5IGJ5IHVzaW5nIHRoZSBgZmlsZTovL2AgVVJMIHNjaGVtZS5cbiAgICpcbiAgICogQHNjaGVtYSBVdkNvbmZpZ3VyYXRpb24jcHlweS1pbnN0YWxsLW1pcnJvclxuICAgKi9cbiAgcmVhZG9ubHkgcHlweUluc3RhbGxNaXJyb3I/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gYWxsb3cgUHl0aG9uIGRvd25sb2Fkcy5cbiAgICpcbiAgICogQHNjaGVtYSBVdkNvbmZpZ3VyYXRpb24jcHl0aG9uLWRvd25sb2Fkc1xuICAgKi9cbiAgcmVhZG9ubHkgcHl0aG9uRG93bmxvYWRzPzogUHl0aG9uRG93bmxvYWRzO1xuXG4gIC8qKlxuICAgKiBVUkwgcG9pbnRpbmcgdG8gSlNPTiBvZiBjdXN0b20gUHl0aG9uIGluc3RhbGxhdGlvbnMuXG4gICAqXG4gICAqIEBzY2hlbWEgVXZDb25maWd1cmF0aW9uI3B5dGhvbi1kb3dubG9hZHMtanNvbi11cmxcbiAgICovXG4gIHJlYWRvbmx5IHB5dGhvbkRvd25sb2Fkc0pzb25Vcmw/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE1pcnJvciBVUkwgZm9yIGRvd25sb2FkaW5nIG1hbmFnZWQgUHl0aG9uIGluc3RhbGxhdGlvbnMuXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIG1hbmFnZWQgUHl0aG9uIGluc3RhbGxhdGlvbnMgYXJlIGRvd25sb2FkZWQgZnJvbSBbYHB5dGhvbi1idWlsZC1zdGFuZGFsb25lYF0oaHR0cHM6Ly9naXRodWIuY29tL2FzdHJhbC1zaC9weXRob24tYnVpbGQtc3RhbmRhbG9uZSkuXG4gICAqIFRoaXMgdmFyaWFibGUgY2FuIGJlIHNldCB0byBhIG1pcnJvciBVUkwgdG8gdXNlIGEgZGlmZmVyZW50IHNvdXJjZSBmb3IgUHl0aG9uIGluc3RhbGxhdGlvbnMuXG4gICAqIFRoZSBwcm92aWRlZCBVUkwgd2lsbCByZXBsYWNlIGBodHRwczovL2dpdGh1Yi5jb20vYXN0cmFsLXNoL3B5dGhvbi1idWlsZC1zdGFuZGFsb25lL3JlbGVhc2VzL2Rvd25sb2FkYCBpbiwgZS5nLiwgYGh0dHBzOi8vZ2l0aHViLmNvbS9hc3RyYWwtc2gvcHl0aG9uLWJ1aWxkLXN0YW5kYWxvbmUvcmVsZWFzZXMvZG93bmxvYWQvMjAyNDA3MTMvY3B5dGhvbi0zLjEyLjQlMkIyMDI0MDcxMy1hYXJjaDY0LWFwcGxlLWRhcndpbi1pbnN0YWxsX29ubHkudGFyLmd6YC5cbiAgICpcbiAgICogRGlzdHJpYnV0aW9ucyBjYW4gYmUgcmVhZCBmcm9tIGEgbG9jYWwgZGlyZWN0b3J5IGJ5IHVzaW5nIHRoZSBgZmlsZTovL2AgVVJMIHNjaGVtZS5cbiAgICpcbiAgICogQHNjaGVtYSBVdkNvbmZpZ3VyYXRpb24jcHl0aG9uLWluc3RhbGwtbWlycm9yXG4gICAqL1xuICByZWFkb25seSBweXRob25JbnN0YWxsTWlycm9yPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHByZWZlciB1c2luZyBQeXRob24gaW5zdGFsbGF0aW9ucyB0aGF0IGFyZSBhbHJlYWR5IHByZXNlbnQgb24gdGhlIHN5c3RlbSwgb3JcbiAgICogdGhvc2UgdGhhdCBhcmUgZG93bmxvYWRlZCBhbmQgaW5zdGFsbGVkIGJ5IHV2LlxuICAgKlxuICAgKiBAc2NoZW1hIFV2Q29uZmlndXJhdGlvbiNweXRob24tcHJlZmVyZW5jZVxuICAgKi9cbiAgcmVhZG9ubHkgcHl0aG9uUHJlZmVyZW5jZT86IFB5dGhvblByZWZlcmVuY2U7XG5cbiAgLyoqXG4gICAqIFJlaW5zdGFsbCBhbGwgcGFja2FnZXMsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGV5J3JlIGFscmVhZHkgaW5zdGFsbGVkLiBJbXBsaWVzIGByZWZyZXNoYC5cbiAgICpcbiAgICogQHNjaGVtYSBVdkNvbmZpZ3VyYXRpb24jcmVpbnN0YWxsXG4gICAqL1xuICByZWFkb25seSByZWluc3RhbGw/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBSZWluc3RhbGwgYSBzcGVjaWZpYyBwYWNrYWdlLCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQncyBhbHJlYWR5IGluc3RhbGxlZC4gSW1wbGllc1xuICAgKiBgcmVmcmVzaC1wYWNrYWdlYC5cbiAgICpcbiAgICogQHNjaGVtYSBVdkNvbmZpZ3VyYXRpb24jcmVpbnN0YWxsLXBhY2thZ2VcbiAgICovXG4gIHJlYWRvbmx5IHJlaW5zdGFsbFBhY2thZ2U/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogQSBsaXN0IG9mIGVudmlyb25tZW50IG1hcmtlcnMsIGUuZy4sIGBzeXNfcGxhdGZvcm0gPT0gJ2RhcndpbicuXG4gICAqXG4gICAqIEBzY2hlbWEgVXZDb25maWd1cmF0aW9uI3JlcXVpcmVkLWVudmlyb25tZW50c1xuICAgKi9cbiAgcmVhZG9ubHkgcmVxdWlyZWRFbnZpcm9ubWVudHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogRW5mb3JjZSBhIHJlcXVpcmVtZW50IG9uIHRoZSB2ZXJzaW9uIG9mIHV2LlxuICAgKlxuICAgKiBJZiB0aGUgdmVyc2lvbiBvZiB1diBkb2VzIG5vdCBtZWV0IHRoZSByZXF1aXJlbWVudCBhdCBydW50aW1lLCB1diB3aWxsIGV4aXRcbiAgICogd2l0aCBhbiBlcnJvci5cbiAgICpcbiAgICogQWNjZXB0cyBhIFtQRVAgNDQwXShodHRwczovL3BlcHMucHl0aG9uLm9yZy9wZXAtMDQ0MC8pIHNwZWNpZmllciwgbGlrZSBgPT0wLjUuMGAgb3IgYD49MC41LjBgLlxuICAgKlxuICAgKiBAc2NoZW1hIFV2Q29uZmlndXJhdGlvbiNyZXF1aXJlZC12ZXJzaW9uXG4gICAqL1xuICByZWFkb25seSByZXF1aXJlZFZlcnNpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBzdHJhdGVneSB0byB1c2Ugd2hlbiBzZWxlY3RpbmcgYmV0d2VlbiB0aGUgZGlmZmVyZW50IGNvbXBhdGlibGUgdmVyc2lvbnMgZm9yIGEgZ2l2ZW5cbiAgICogcGFja2FnZSByZXF1aXJlbWVudC5cbiAgICpcbiAgICogQnkgZGVmYXVsdCwgdXYgd2lsbCB1c2UgdGhlIGxhdGVzdCBjb21wYXRpYmxlIHZlcnNpb24gb2YgZWFjaCBwYWNrYWdlIChgaGlnaGVzdGApLlxuICAgKlxuICAgKiBAc2NoZW1hIFV2Q29uZmlndXJhdGlvbiNyZXNvbHV0aW9uXG4gICAqL1xuICByZWFkb25seSByZXNvbHV0aW9uPzogUmVzb2x1dGlvbk1vZGU7XG5cbiAgLyoqXG4gICAqIFRoZSBzb3VyY2VzIHRvIHVzZSB3aGVuIHJlc29sdmluZyBkZXBlbmRlbmNpZXMuXG4gICAqXG4gICAqIGB0b29sLnV2LnNvdXJjZXNgIGVucmljaGVzIHRoZSBkZXBlbmRlbmN5IG1ldGFkYXRhIHdpdGggYWRkaXRpb25hbCBzb3VyY2VzLCBpbmNvcnBvcmF0ZWRcbiAgICogZHVyaW5nIGRldmVsb3BtZW50LiBBIGRlcGVuZGVuY3kgc291cmNlIGNhbiBiZSBhIEdpdCByZXBvc2l0b3J5LCBhIFVSTCwgYSBsb2NhbCBwYXRoLCBvciBhblxuICAgKiBhbHRlcm5hdGl2ZSByZWdpc3RyeS5cbiAgICpcbiAgICogU2VlIFtEZXBlbmRlbmNpZXNdKGh0dHBzOi8vZG9jcy5hc3RyYWwuc2gvdXYvY29uY2VwdHMvcHJvamVjdHMvZGVwZW5kZW5jaWVzLykgZm9yIG1vcmUuXG4gICAqXG4gICAqIEBzY2hlbWEgVXZDb25maWd1cmF0aW9uI3NvdXJjZXNcbiAgICovXG4gIHJlYWRvbmx5IHNvdXJjZXM/OiB7IFtrZXk6IHN0cmluZ106IGFueVtdIH07XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gbG9hZCBUTFMgY2VydGlmaWNhdGVzIGZyb20gdGhlIHBsYXRmb3JtJ3MgbmF0aXZlIGNlcnRpZmljYXRlIHN0b3JlLlxuICAgKlxuICAgKiBCeSBkZWZhdWx0LCB1diB1c2VzIGJ1bmRsZWQgTW96aWxsYSByb290IGNlcnRpZmljYXRlcy4gV2hlbiBlbmFibGVkLCB0aGlzIGxvYWRzXG4gICAqIGNlcnRpZmljYXRlcyBmcm9tIHRoZSBwbGF0Zm9ybSdzIG5hdGl2ZSBjZXJ0aWZpY2F0ZSBzdG9yZSBpbnN0ZWFkLlxuICAgKlxuICAgKiBAc2NoZW1hIFV2Q29uZmlndXJhdGlvbiNzeXN0ZW0tY2VydHNcbiAgICovXG4gIHJlYWRvbmx5IHN5c3RlbUNlcnRzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIGJhY2tlbmQgdG8gdXNlIHdoZW4gZmV0Y2hpbmcgcGFja2FnZXMgaW4gdGhlIFB5VG9yY2ggZWNvc3lzdGVtLlxuICAgKlxuICAgKiBXaGVuIHNldCwgdXYgd2lsbCBpZ25vcmUgdGhlIGNvbmZpZ3VyZWQgaW5kZXggVVJMcyBmb3IgcGFja2FnZXMgaW4gdGhlIFB5VG9yY2ggZWNvc3lzdGVtLFxuICAgKiBhbmQgd2lsbCBpbnN0ZWFkIHVzZSB0aGUgZGVmaW5lZCBiYWNrZW5kLlxuICAgKlxuICAgKiBGb3IgZXhhbXBsZSwgd2hlbiBzZXQgdG8gYGNwdWAsIHV2IHdpbGwgdXNlIHRoZSBDUFUtb25seSBQeVRvcmNoIGluZGV4OyB3aGVuIHNldCB0byBgY3UxMjZgLFxuICAgKiB1diB3aWxsIHVzZSB0aGUgUHlUb3JjaCBpbmRleCBmb3IgQ1VEQSAxMi42LlxuICAgKlxuICAgKiBUaGUgYGF1dG9gIG1vZGUgd2lsbCBhdHRlbXB0IHRvIGRldGVjdCB0aGUgYXBwcm9wcmlhdGUgUHlUb3JjaCBpbmRleCBiYXNlZCBvbiB0aGUgY3VycmVudGx5XG4gICAqIGluc3RhbGxlZCBDVURBIGRyaXZlcnMuXG4gICAqXG4gICAqIFRoaXMgc2V0dGluZyBpcyBvbmx5IHJlc3BlY3RlZCBieSBgdXYgcGlwYCBjb21tYW5kcy5cbiAgICpcbiAgICogVGhpcyBvcHRpb24gaXMgaW4gcHJldmlldyBhbmQgbWF5IGNoYW5nZSBpbiBhbnkgZnV0dXJlIHJlbGVhc2UuXG4gICAqXG4gICAqIEBzY2hlbWEgVXZDb25maWd1cmF0aW9uI3RvcmNoLWJhY2tlbmRcbiAgICovXG4gIHJlYWRvbmx5IHRvcmNoQmFja2VuZD86IFRvcmNoTW9kZTtcblxuICAvKipcbiAgICogQ29uZmlndXJlIHRydXN0ZWQgcHVibGlzaGluZy5cbiAgICpcbiAgICogQnkgZGVmYXVsdCwgdXYgY2hlY2tzIGZvciB0cnVzdGVkIHB1Ymxpc2hpbmcgd2hlbiBydW5uaW5nIGluIGEgc3VwcG9ydGVkIGVudmlyb25tZW50LCBidXRcbiAgICogaWdub3JlcyBpdCBpZiBpdCBpc24ndCBjb25maWd1cmVkLlxuICAgKlxuICAgKiB1didzIHN1cHBvcnRlZCBlbnZpcm9ubWVudHMgZm9yIHRydXN0ZWQgcHVibGlzaGluZyBpbmNsdWRlIEdpdEh1YiBBY3Rpb25zIGFuZCBHaXRMYWIgQ0kvQ0QuXG4gICAqXG4gICAqIEBzY2hlbWEgVXZDb25maWd1cmF0aW9uI3RydXN0ZWQtcHVibGlzaGluZ1xuICAgKi9cbiAgcmVhZG9ubHkgdHJ1c3RlZFB1Ymxpc2hpbmc/OiBUcnVzdGVkUHVibGlzaGluZztcblxuICAvKipcbiAgICogQWxsb3cgcGFja2FnZSB1cGdyYWRlcywgaWdub3JpbmcgcGlubmVkIHZlcnNpb25zIGluIGFueSBleGlzdGluZyBvdXRwdXQgZmlsZS5cbiAgICpcbiAgICogQHNjaGVtYSBVdkNvbmZpZ3VyYXRpb24jdXBncmFkZVxuICAgKi9cbiAgcmVhZG9ubHkgdXBncmFkZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEFsbG93IHVwZ3JhZGVzIGZvciBhIHNwZWNpZmljIHBhY2thZ2UsIGlnbm9yaW5nIHBpbm5lZCB2ZXJzaW9ucyBpbiBhbnkgZXhpc3Rpbmcgb3V0cHV0XG4gICAqIGZpbGUuXG4gICAqXG4gICAqIEFjY2VwdHMgYm90aCBzdGFuZGFsb25lIHBhY2thZ2UgbmFtZXMgKGBydWZmYCkgYW5kIHZlcnNpb24gc3BlY2lmaWVycyAoYHJ1ZmY8MC41LjBgKS5cbiAgICpcbiAgICogQHNjaGVtYSBVdkNvbmZpZ3VyYXRpb24jdXBncmFkZS1wYWNrYWdlXG4gICAqL1xuICByZWFkb25seSB1cGdyYWRlUGFja2FnZT86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgd29ya3NwYWNlIGRlZmluaXRpb24gZm9yIHRoZSBwcm9qZWN0LCBpZiBhbnkuXG4gICAqXG4gICAqIEBzY2hlbWEgVXZDb25maWd1cmF0aW9uI3dvcmtzcGFjZVxuICAgKi9cbiAgcmVhZG9ubHkgd29ya3NwYWNlPzogVG9vbFV2V29ya3NwYWNlO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdVdkNvbmZpZ3VyYXRpb24nIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9VdkNvbmZpZ3VyYXRpb24ob2JqOiBVdkNvbmZpZ3VyYXRpb24gfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdhZGQtYm91bmRzJzogb2JqLmFkZEJvdW5kcyxcbiAgICAnYWxsb3ctaW5zZWN1cmUtaG9zdCc6IG9iai5hbGxvd0luc2VjdXJlSG9zdD8ubWFwKHkgPT4geSksXG4gICAgJ2F1ZGl0JzogdG9Kc29uX0F1ZGl0T3B0aW9ucyhvYmouYXVkaXQpLFxuICAgICdidWlsZC1iYWNrZW5kJzogdG9Kc29uX0J1aWxkQmFja2VuZFNldHRpbmdzKG9iai5idWlsZEJhY2tlbmQpLFxuICAgICdidWlsZC1jb25zdHJhaW50LWRlcGVuZGVuY2llcyc6IG9iai5idWlsZENvbnN0cmFpbnREZXBlbmRlbmNpZXM/Lm1hcCh5ID0+IHkpLFxuICAgICdjYWNoZS1kaXInOiBvYmouY2FjaGVEaXIsXG4gICAgJ2NhY2hlLWtleXMnOiBvYmouY2FjaGVLZXlzPy5tYXAoeSA9PiB5KSxcbiAgICAnY2hlY2stdXJsJzogb2JqLmNoZWNrVXJsLFxuICAgICdjb21waWxlLWJ5dGVjb2RlJzogb2JqLmNvbXBpbGVCeXRlY29kZSxcbiAgICAnY29uY3VycmVudC1idWlsZHMnOiBvYmouY29uY3VycmVudEJ1aWxkcyxcbiAgICAnY29uY3VycmVudC1kb3dubG9hZHMnOiBvYmouY29uY3VycmVudERvd25sb2FkcyxcbiAgICAnY29uY3VycmVudC1pbnN0YWxscyc6IG9iai5jb25jdXJyZW50SW5zdGFsbHMsXG4gICAgJ2NvbmZpZy1zZXR0aW5ncyc6ICgob2JqLmNvbmZpZ1NldHRpbmdzKSA9PT0gdW5kZWZpbmVkKSA/IHVuZGVmaW5lZCA6IChPYmplY3QuZW50cmllcyhvYmouY29uZmlnU2V0dGluZ3MpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSkpLFxuICAgICdjb25maWctc2V0dGluZ3MtcGFja2FnZSc6ICgob2JqLmNvbmZpZ1NldHRpbmdzUGFja2FnZSkgPT09IHVuZGVmaW5lZCkgPyB1bmRlZmluZWQgOiAoT2JqZWN0LmVudHJpZXMob2JqLmNvbmZpZ1NldHRpbmdzUGFja2FnZSkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06ICgoaVsxXSkgPT09IHVuZGVmaW5lZCkgPyB1bmRlZmluZWQgOiAoT2JqZWN0LmVudHJpZXMoaVsxXSkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KSkgfSksIHt9KSksXG4gICAgJ2NvbmZsaWN0cyc6IG9iai5jb25mbGljdHM/Lm1hcCh5ID0+IHk/Lm1hcCh5ID0+IHRvSnNvbl9TY2hlbWFDb25mbGljdEl0ZW0oeSkpKSxcbiAgICAnY29uc3RyYWludC1kZXBlbmRlbmNpZXMnOiBvYmouY29uc3RyYWludERlcGVuZGVuY2llcz8ubWFwKHkgPT4geSksXG4gICAgJ2RlZmF1bHQtZ3JvdXBzJzogb2JqLmRlZmF1bHRHcm91cHMsXG4gICAgJ2RlcGVuZGVuY3ktZ3JvdXBzJzogKChvYmouZGVwZW5kZW5jeUdyb3VwcykgPT09IHVuZGVmaW5lZCkgPyB1bmRlZmluZWQgOiAoT2JqZWN0LmVudHJpZXMob2JqLmRlcGVuZGVuY3lHcm91cHMpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiB0b0pzb25fRGVwZW5kZW5jeUdyb3VwU2V0dGluZ3MoaVsxXSkgfSksIHt9KSksXG4gICAgJ2RlcGVuZGVuY3ktbWV0YWRhdGEnOiBvYmouZGVwZW5kZW5jeU1ldGFkYXRhPy5tYXAoeSA9PiB0b0pzb25fU3RhdGljTWV0YWRhdGEoeSkpLFxuICAgICdkZXYtZGVwZW5kZW5jaWVzJzogb2JqLmRldkRlcGVuZGVuY2llcz8ubWFwKHkgPT4geSksXG4gICAgJ2Vudmlyb25tZW50cyc6IG9iai5lbnZpcm9ubWVudHM/Lm1hcCh5ID0+IHkpLFxuICAgICdleGNsdWRlLWRlcGVuZGVuY2llcyc6IG9iai5leGNsdWRlRGVwZW5kZW5jaWVzPy5tYXAoeSA9PiB5KSxcbiAgICAnZXhjbHVkZS1uZXdlcic6IG9iai5leGNsdWRlTmV3ZXI/LnZhbHVlLFxuICAgICdleGNsdWRlLW5ld2VyLXBhY2thZ2UnOiAoKG9iai5leGNsdWRlTmV3ZXJQYWNrYWdlKSA9PT0gdW5kZWZpbmVkKSA/IHVuZGVmaW5lZCA6IChPYmplY3QuZW50cmllcyhvYmouZXhjbHVkZU5ld2VyUGFja2FnZSkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0/LnZhbHVlIH0pLCB7fSkpLFxuICAgICdleHRyYS1idWlsZC1kZXBlbmRlbmNpZXMnOiAoKG9iai5leHRyYUJ1aWxkRGVwZW5kZW5jaWVzKSA9PT0gdW5kZWZpbmVkKSA/IHVuZGVmaW5lZCA6IChPYmplY3QuZW50cmllcyhvYmouZXh0cmFCdWlsZERlcGVuZGVuY2llcykucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0/Lm1hcCh5ID0+IHkpIH0pLCB7fSkpLFxuICAgICdleHRyYS1idWlsZC12YXJpYWJsZXMnOiAoKG9iai5leHRyYUJ1aWxkVmFyaWFibGVzKSA9PT0gdW5kZWZpbmVkKSA/IHVuZGVmaW5lZCA6IChPYmplY3QuZW50cmllcyhvYmouZXh0cmFCdWlsZFZhcmlhYmxlcykucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06ICgoaVsxXSkgPT09IHVuZGVmaW5lZCkgPyB1bmRlZmluZWQgOiAoT2JqZWN0LmVudHJpZXMoaVsxXSkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KSkgfSksIHt9KSksXG4gICAgJ2V4dHJhLWluZGV4LXVybCc6IG9iai5leHRyYUluZGV4VXJsPy5tYXAoeSA9PiB5KSxcbiAgICAnZmluZC1saW5rcyc6IG9iai5maW5kTGlua3M/Lm1hcCh5ID0+IHkpLFxuICAgICdmb3JrLXN0cmF0ZWd5Jzogb2JqLmZvcmtTdHJhdGVneSxcbiAgICAnaHR0cC1wcm94eSc6IG9iai5odHRwUHJveHksXG4gICAgJ2h0dHBzLXByb3h5Jzogb2JqLmh0dHBzUHJveHksXG4gICAgJ2luZGV4Jzogb2JqLmluZGV4Py5tYXAoeSA9PiB0b0pzb25fSW5kZXgoeSkpLFxuICAgICdpbmRleC1zdHJhdGVneSc6IG9iai5pbmRleFN0cmF0ZWd5LFxuICAgICdpbmRleC11cmwnOiBvYmouaW5kZXhVcmwsXG4gICAgJ2tleXJpbmctcHJvdmlkZXInOiBvYmoua2V5cmluZ1Byb3ZpZGVyLFxuICAgICdsaW5rLW1vZGUnOiBvYmoubGlua01vZGUsXG4gICAgJ21hbmFnZWQnOiBvYmoubWFuYWdlZCxcbiAgICAnbmF0aXZlLXRscyc6IG9iai5uYXRpdmVUbHMsXG4gICAgJ25vLWJpbmFyeSc6IG9iai5ub0JpbmFyeSxcbiAgICAnbm8tYmluYXJ5LXBhY2thZ2UnOiBvYmoubm9CaW5hcnlQYWNrYWdlPy5tYXAoeSA9PiB5KSxcbiAgICAnbm8tYnVpbGQnOiBvYmoubm9CdWlsZCxcbiAgICAnbm8tYnVpbGQtaXNvbGF0aW9uJzogb2JqLm5vQnVpbGRJc29sYXRpb24sXG4gICAgJ25vLWJ1aWxkLWlzb2xhdGlvbi1wYWNrYWdlJzogb2JqLm5vQnVpbGRJc29sYXRpb25QYWNrYWdlPy5tYXAoeSA9PiB5KSxcbiAgICAnbm8tYnVpbGQtcGFja2FnZSc6IG9iai5ub0J1aWxkUGFja2FnZT8ubWFwKHkgPT4geSksXG4gICAgJ25vLWNhY2hlJzogb2JqLm5vQ2FjaGUsXG4gICAgJ25vLWluZGV4Jzogb2JqLm5vSW5kZXgsXG4gICAgJ25vLXByb3h5Jzogb2JqLm5vUHJveHk/Lm1hcCh5ID0+IHkpLFxuICAgICduby1zb3VyY2VzJzogb2JqLm5vU291cmNlcyxcbiAgICAnbm8tc291cmNlcy1wYWNrYWdlJzogb2JqLm5vU291cmNlc1BhY2thZ2U/Lm1hcCh5ID0+IHkpLFxuICAgICdvZmZsaW5lJzogb2JqLm9mZmxpbmUsXG4gICAgJ292ZXJyaWRlLWRlcGVuZGVuY2llcyc6IG9iai5vdmVycmlkZURlcGVuZGVuY2llcz8ubWFwKHkgPT4geSksXG4gICAgJ3BhY2thZ2UnOiBvYmoucGFja2FnZSxcbiAgICAncGlwJzogdG9Kc29uX1BpcE9wdGlvbnMob2JqLnBpcCksXG4gICAgJ3ByZXJlbGVhc2UnOiBvYmoucHJlcmVsZWFzZSxcbiAgICAncHJldmlldyc6IG9iai5wcmV2aWV3LFxuICAgICdwcmV2aWV3LWZlYXR1cmVzJzogb2JqLnByZXZpZXdGZWF0dXJlcyxcbiAgICAncHVibGlzaC11cmwnOiBvYmoucHVibGlzaFVybCxcbiAgICAncHlweS1pbnN0YWxsLW1pcnJvcic6IG9iai5weXB5SW5zdGFsbE1pcnJvcixcbiAgICAncHl0aG9uLWRvd25sb2Fkcyc6IG9iai5weXRob25Eb3dubG9hZHMsXG4gICAgJ3B5dGhvbi1kb3dubG9hZHMtanNvbi11cmwnOiBvYmoucHl0aG9uRG93bmxvYWRzSnNvblVybCxcbiAgICAncHl0aG9uLWluc3RhbGwtbWlycm9yJzogb2JqLnB5dGhvbkluc3RhbGxNaXJyb3IsXG4gICAgJ3B5dGhvbi1wcmVmZXJlbmNlJzogb2JqLnB5dGhvblByZWZlcmVuY2UsXG4gICAgJ3JlaW5zdGFsbCc6IG9iai5yZWluc3RhbGwsXG4gICAgJ3JlaW5zdGFsbC1wYWNrYWdlJzogb2JqLnJlaW5zdGFsbFBhY2thZ2U/Lm1hcCh5ID0+IHkpLFxuICAgICdyZXF1aXJlZC1lbnZpcm9ubWVudHMnOiBvYmoucmVxdWlyZWRFbnZpcm9ubWVudHM/Lm1hcCh5ID0+IHkpLFxuICAgICdyZXF1aXJlZC12ZXJzaW9uJzogb2JqLnJlcXVpcmVkVmVyc2lvbixcbiAgICAncmVzb2x1dGlvbic6IG9iai5yZXNvbHV0aW9uLFxuICAgICdzb3VyY2VzJzogKChvYmouc291cmNlcykgPT09IHVuZGVmaW5lZCkgPyB1bmRlZmluZWQgOiAoT2JqZWN0LmVudHJpZXMob2JqLnNvdXJjZXMpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdPy5tYXAoeSA9PiB5KSB9KSwge30pKSxcbiAgICAnc3lzdGVtLWNlcnRzJzogb2JqLnN5c3RlbUNlcnRzLFxuICAgICd0b3JjaC1iYWNrZW5kJzogb2JqLnRvcmNoQmFja2VuZCxcbiAgICAndHJ1c3RlZC1wdWJsaXNoaW5nJzogb2JqLnRydXN0ZWRQdWJsaXNoaW5nLFxuICAgICd1cGdyYWRlJzogb2JqLnVwZ3JhZGUsXG4gICAgJ3VwZ3JhZGUtcGFja2FnZSc6IG9iai51cGdyYWRlUGFja2FnZT8ubWFwKHkgPT4geSksXG4gICAgJ3dvcmtzcGFjZSc6IHRvSnNvbl9Ub29sVXZXb3Jrc3BhY2Uob2JqLndvcmtzcGFjZSksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBUaGUgZGVmYXVsdCB2ZXJzaW9uIHNwZWNpZmllciB3aGVuIGFkZGluZyBhIGRlcGVuZGVuY3kuXG4gKlxuICogQHNjaGVtYSBBZGRCb3VuZHNLaW5kXG4gKi9cbmV4cG9ydCBlbnVtIEFkZEJvdW5kc0tpbmQge1xuICAvKiogT25seSBhIGxvd2VyIGJvdW5kLCBlLmcuLCBgPj0xLjIuM2AuIChsb3dlcikgKi9cbiAgTE9XRVIgPSBcImxvd2VyXCIsXG4gIC8qKiBBbGxvdyB0aGUgc2FtZSBtYWpvciB2ZXJzaW9uLCBzaW1pbGFyIHRvIHRoZSBzZW12ZXIgY2FyZXQsIGUuZy4sIGA+PTEuMi4zLCA8Mi4wLjBgLlxuXG5MZWFkaW5nIHplcm9lcyBhcmUgc2tpcHBlZCwgZS5nLiBgPj0wLjEuMiwgPDAuMi4wYC4gKG1ham9yKSAqL1xuICBNQUpPUiA9IFwibWFqb3JcIixcbiAgLyoqIEFsbG93IHRoZSBzYW1lIG1pbm9yIHZlcnNpb24sIHNpbWlsYXIgdG8gdGhlIHNlbXZlciB0aWxkZSwgZS5nLiwgYD49MS4yLjMsIDwxLjMuMGAuXG5cbkxlYWRpbmcgemVyb2VzIGFyZSBza2lwcGVkLCBlLmcuIGA+PTAuMS4yLCA8MC4xLjNgLiAobWlub3IpICovXG4gIE1JTk9SID0gXCJtaW5vclwiLFxuICAvKiogUGluIHRoZSBleGFjdCB2ZXJzaW9uLCBlLmcuLCBgPT0xLjIuM2AuXG5cblRoaXMgb3B0aW9uIGlzIG5vdCByZWNvbW1lbmRlZCwgYXMgdmVyc2lvbnMgYXJlIGFscmVhZHkgcGlubmVkIGluIHRoZSB1diBsb2NrZmlsZS4gKGV4YWN0KSAqL1xuICBFWEFDVCA9IFwiZXhhY3RcIixcbn1cblxuLyoqXG4gKiBAc2NoZW1hIEF1ZGl0T3B0aW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEF1ZGl0T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgdnVsbmVyYWJpbGl0eSBJRHMgdG8gaWdub3JlIGR1cmluZyBhdWRpdGluZy5cbiAgICpcbiAgICogVnVsbmVyYWJpbGl0aWVzIG1hdGNoaW5nIGFueSBvZiB0aGUgcHJvdmlkZWQgSURzIChpbmNsdWRpbmcgYWxpYXNlcykgd2lsbCBiZSBleGNsdWRlZCBmcm9tXG4gICAqIHRoZSBhdWRpdCByZXN1bHRzLlxuICAgKlxuICAgKiBAc2NoZW1hIEF1ZGl0T3B0aW9ucyNpZ25vcmVcbiAgICovXG4gIHJlYWRvbmx5IGlnbm9yZT86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgdnVsbmVyYWJpbGl0eSBJRHMgdG8gaWdub3JlIGR1cmluZyBhdWRpdGluZywgYnV0IG9ubHkgd2hpbGUgbm8gZml4IGlzIGF2YWlsYWJsZS5cbiAgICpcbiAgICogVnVsbmVyYWJpbGl0aWVzIG1hdGNoaW5nIGFueSBvZiB0aGUgcHJvdmlkZWQgSURzIChpbmNsdWRpbmcgYWxpYXNlcykgd2lsbCBiZSBleGNsdWRlZCBmcm9tXG4gICAqIHRoZSBhdWRpdCByZXN1bHRzIGFzIGxvbmcgYXMgdGhleSBoYXZlIG5vIGtub3duIGZpeCB2ZXJzaW9ucy4gT25jZSBhIGZpeCB2ZXJzaW9uIGJlY29tZXNcbiAgICogYXZhaWxhYmxlLCB0aGUgdnVsbmVyYWJpbGl0eSB3aWxsIGJlIHJlcG9ydGVkIGFnYWluLlxuICAgKlxuICAgKiBAc2NoZW1hIEF1ZGl0T3B0aW9ucyNpZ25vcmUtdW50aWwtZml4ZWRcbiAgICovXG4gIHJlYWRvbmx5IGlnbm9yZVVudGlsRml4ZWQ/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnQXVkaXRPcHRpb25zJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fQXVkaXRPcHRpb25zKG9iajogQXVkaXRPcHRpb25zIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnaWdub3JlJzogb2JqLmlnbm9yZT8ubWFwKHkgPT4geSksXG4gICAgJ2lnbm9yZS11bnRpbC1maXhlZCc6IG9iai5pZ25vcmVVbnRpbEZpeGVkPy5tYXAoeSA9PiB5KSxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIFNldHRpbmdzIGZvciB0aGUgdXYgYnVpbGQgYmFja2VuZCAoYHV2X2J1aWxkYCkuXG4gKlxuICogTm90ZSB0aGF0IHRob3NlIHNldHRpbmdzIG9ubHkgYXBwbHkgd2hlbiB1c2luZyB0aGUgYHV2X2J1aWxkYCBiYWNrZW5kLCBvdGhlciBidWlsZCBiYWNrZW5kc1xuICogKHN1Y2ggYXMgaGF0Y2hsaW5nKSBoYXZlIHRoZWlyIG93biBjb25maWd1cmF0aW9uLlxuICpcbiAqIEFsbCBvcHRpb25zIHRoYXQgYWNjZXB0IGdsb2JzIHVzZSB0aGUgcG9ydGFibGUgZ2xvYiBwYXR0ZXJucyBmcm9tXG4gKiBbUEVQIDYzOV0oaHR0cHM6Ly9wYWNrYWdpbmcucHl0aG9uLm9yZy9lbi9sYXRlc3Qvc3BlY2lmaWNhdGlvbnMvZ2xvYi1wYXR0ZXJucy8pLlxuICpcbiAqIEBzY2hlbWEgQnVpbGRCYWNrZW5kU2V0dGluZ3NcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWlsZEJhY2tlbmRTZXR0aW5ncyB7XG4gIC8qKlxuICAgKiBEYXRhIGluY2x1ZGVzIGZvciB3aGVlbHMuXG4gICAqXG4gICAqIEVhY2ggZW50cnkgaXMgYSBkaXJlY3RvcnksIHdob3NlIGNvbnRlbnRzIGFyZSBjb3BpZWQgdG8gdGhlIG1hdGNoaW5nIGRpcmVjdG9yeSBpbiB0aGUgd2hlZWxcbiAgICogaW4gYDxuYW1lPi08dmVyc2lvbj4uZGF0YS8ocHVyZWxpYnxwbGF0bGlifGhlYWRlcnN8c2NyaXB0c3xkYXRhKWAuIFVwb24gaW5zdGFsbGF0aW9uLCB0aGlzXG4gICAqIGRhdGEgaXMgbW92ZWQgdG8gaXRzIHRhcmdldCBsb2NhdGlvbiwgYXMgZGVmaW5lZCBieVxuICAgKiA8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy4xMi9saWJyYXJ5L3N5c2NvbmZpZy5odG1sI2luc3RhbGxhdGlvbi1wYXRocz4uIFVzdWFsbHksIHNtYWxsXG4gICAqIGRhdGEgZmlsZXMgYXJlIGluY2x1ZGVkIGJ5IHBsYWNpbmcgdGhlbSBpbiB0aGUgUHl0aG9uIG1vZHVsZSBpbnN0ZWFkIG9mIHVzaW5nIGRhdGEgaW5jbHVkZXMuXG4gICAqXG4gICAqIC0gYHNjcmlwdHNgOiBJbnN0YWxsZWQgdG8gdGhlIGRpcmVjdG9yeSBmb3IgZXhlY3V0YWJsZXMsIGA8dmVudj4vYmluYCBvbiBVbml4IG9yXG4gICAqIGA8dmVudj5cXFNjcmlwdHNgIG9uIFdpbmRvd3MuIFRoaXMgZGlyZWN0b3J5IGlzIGFkZGVkIHRvIGBQQVRIYCB3aGVuIHRoZSB2aXJ0dWFsXG4gICAqIGVudmlyb25tZW50ICBpcyBhY3RpdmF0ZWQgb3Igd2hlbiB1c2luZyBgdXYgcnVuYCwgc28gdGhpcyBkYXRhIHR5cGUgY2FuIGJlIHVzZWQgdG8gaW5zdGFsbFxuICAgKiBhZGRpdGlvbmFsIGJpbmFyaWVzLiBDb25zaWRlciB1c2luZyBgcHJvamVjdC5zY3JpcHRzYCBpbnN0ZWFkIGZvciBQeXRob24gZW50cnlwb2ludHMuXG4gICAqIC0gYGRhdGFgOiBJbnN0YWxsZWQgb3ZlciB0aGUgdmlydHVhbGVudiBlbnZpcm9ubWVudCByb290LlxuICAgKlxuICAgKiBXYXJuaW5nOiBUaGlzIG1heSBvdmVycmlkZSBleGlzdGluZyBmaWxlcyFcbiAgICpcbiAgICogLSBgaGVhZGVyc2A6IEluc3RhbGxlZCB0byB0aGUgaW5jbHVkZSBkaXJlY3RvcnkuIENvbXBpbGVycyBidWlsZGluZyBQeXRob24gcGFja2FnZXNcbiAgICogd2l0aCB0aGlzIHBhY2thZ2UgYXMgYnVpbGQgcmVxdWlyZW1lbnQgdXNlIHRoZSBpbmNsdWRlIGRpcmVjdG9yeSB0byBmaW5kIGFkZGl0aW9uYWwgaGVhZGVyXG4gICAqIGZpbGVzLlxuICAgKiAtIGBwdXJlbGliYCBhbmQgYHBsYXRsaWJgOiBJbnN0YWxsZWQgdG8gdGhlIGBzaXRlLXBhY2thZ2VzYCBkaXJlY3RvcnkuIEl0IGlzIG5vdCByZWNvbW1lbmRlZFxuICAgKiB0byB1c2UgdGhlc2UgdHdvIG9wdGlvbnMuXG4gICAqXG4gICAqIEBzY2hlbWEgQnVpbGRCYWNrZW5kU2V0dGluZ3MjZGF0YVxuICAgKi9cbiAgcmVhZG9ubHkgZGF0YT86IFdoZWVsRGF0YUluY2x1ZGVzO1xuXG4gIC8qKlxuICAgKiBJZiBzZXQgdG8gYGZhbHNlYCwgdGhlIGRlZmF1bHQgZXhjbHVkZXMgYXJlbid0IGFwcGxpZWQuXG4gICAqXG4gICAqIERlZmF1bHQgZXhjbHVkZXM6IGBfX3B5Y2FjaGVfX2AsIGAqLnB5Y2AsIGFuZCBgKi5weW9gLlxuICAgKlxuICAgKiBAc2NoZW1hIEJ1aWxkQmFja2VuZFNldHRpbmdzI2RlZmF1bHQtZXhjbHVkZXNcbiAgICovXG4gIHJlYWRvbmx5IGRlZmF1bHRFeGNsdWRlcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBtb2R1bGUgZGlyZWN0b3J5IGluc2lkZSBgbW9kdWxlLXJvb3RgLlxuICAgKlxuICAgKiBUaGUgZGVmYXVsdCBtb2R1bGUgbmFtZSBpcyB0aGUgcGFja2FnZSBuYW1lIHdpdGggZG90cyBhbmQgZGFzaGVzIHJlcGxhY2VkIGJ5IHVuZGVyc2NvcmVzLlxuICAgKlxuICAgKiBQYWNrYWdlIG5hbWVzIG5lZWQgdG8gYmUgdmFsaWQgUHl0aG9uIGlkZW50aWZpZXJzLCBhbmQgdGhlIGRpcmVjdG9yeSBuZWVkcyB0byBjb250YWluIGFcbiAgICogYF9faW5pdF9fLnB5YC4gQW4gZXhjZXB0aW9uIGFyZSBzdHVicyBwYWNrYWdlcywgd2hvc2UgbmFtZSBlbmRzIHdpdGggYC1zdHVic2AsIHdpdGggdGhlIHN0ZW1cbiAgICogYmVpbmcgdGhlIG1vZHVsZSBuYW1lLCBhbmQgd2hpY2ggY29udGFpbiBhIGBfX2luaXRfXy5weWlgIGZpbGUuXG4gICAqXG4gICAqIEZvciBuYW1lc3BhY2UgcGFja2FnZXMgd2l0aCBhIHNpbmdsZSBtb2R1bGUsIHRoZSBwYXRoIGNhbiBiZSBkb3R0ZWQsIGUuZy4sIGBmb28uYmFyYCBvclxuICAgKiBgZm9vLXN0dWJzLmJhcmAuXG4gICAqXG4gICAqIEZvciBuYW1lc3BhY2UgcGFja2FnZXMgd2l0aCBtdWx0aXBsZSBtb2R1bGVzLCB0aGUgcGF0aCBjYW4gYmUgYSBsaXN0LCBlLmcuLFxuICAgKiBgW1wiZm9vXCIsIFwiYmFyXCJdYC4gV2UgcmVjb21tZW5kIHVzaW5nIGEgc2luZ2xlIG1vZHVsZSBwZXIgcGFja2FnZSwgc3BsaXR0aW5nIG11bHRpcGxlXG4gICAqIHBhY2thZ2VzIGludG8gYSB3b3Jrc3BhY2UuXG4gICAqXG4gICAqIE5vdGUgdGhhdCB1c2luZyB0aGlzIG9wdGlvbiBydW5zIHRoZSByaXNrIG9mIGNyZWF0aW5nIHR3byBwYWNrYWdlcyB3aXRoIGRpZmZlcmVudCBuYW1lcyBidXRcbiAgICogdGhlIHNhbWUgbW9kdWxlIG5hbWVzLiBJbnN0YWxsaW5nIHN1Y2ggcGFja2FnZXMgdG9nZXRoZXIgbGVhZHMgdG8gdW5zcGVjaWZpZWQgYmVoYXZpb3IsXG4gICAqIG9mdGVuIHdpdGggY29ycnVwdGVkIGZpbGVzIG9yIGRpcmVjdG9yeSB0cmVlcy5cbiAgICpcbiAgICogQHNjaGVtYSBCdWlsZEJhY2tlbmRTZXR0aW5ncyNtb2R1bGUtbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgbW9kdWxlTmFtZT86IGFueTtcblxuICAvKipcbiAgICogVGhlIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIHRoZSBtb2R1bGUgZGlyZWN0b3J5LlxuICAgKlxuICAgKiBDb21tb24gdmFsdWVzIGFyZSBgc3JjYCAoc3JjIGxheW91dCwgdGhlIGRlZmF1bHQpIG9yIGFuIGVtcHR5IHBhdGggKGZsYXQgbGF5b3V0KS5cbiAgICpcbiAgICogQHNjaGVtYSBCdWlsZEJhY2tlbmRTZXR0aW5ncyNtb2R1bGUtcm9vdFxuICAgKi9cbiAgcmVhZG9ubHkgbW9kdWxlUm9vdD86IHN0cmluZztcblxuICAvKipcbiAgICogQnVpbGQgYSBuYW1lc3BhY2UgcGFja2FnZS5cbiAgICpcbiAgICogQnVpbGQgYSBQRVAgNDIwIGltcGxpY2l0IG5hbWVzcGFjZSBwYWNrYWdlLCBhbGxvd2luZyBtb3JlIHRoYW4gb25lIHJvb3QgYF9faW5pdF9fLnB5YC5cbiAgICpcbiAgICogVXNlIHRoaXMgb3B0aW9uIHdoZW4gdGhlIG5hbWVzcGFjZSBwYWNrYWdlIGNvbnRhaW5zIG11bHRpcGxlIHJvb3QgYF9faW5pdF9fLnB5YCwgZm9yXG4gICAqIG5hbWVzcGFjZSBwYWNrYWdlcyB3aXRoIGEgc2luZ2xlIHJvb3QgYF9faW5pdF9fLnB5YCB1c2UgYSBkb3R0ZWQgYG1vZHVsZS1uYW1lYCBpbnN0ZWFkLlxuICAgKlxuICAgKiBUbyBjb21wYXJlIGRvdHRlZCBgbW9kdWxlLW5hbWVgIGFuZCBgbmFtZXNwYWNlID0gdHJ1ZWAsIHRoZSBmaXJzdCBleGFtcGxlIGJlbG93IGNhbiBiZVxuICAgKiBleHByZXNzZWQgd2l0aCBgbW9kdWxlLW5hbWUgPSBcImNsb3VkLmRhdGFiYXNlXCJgOiBUaGVyZSBpcyBvbmUgcm9vdCBgX19pbml0X18ucHlgIGBkYXRhYmFzZWAuXG4gICAqIEluIHRoZSBzZWNvbmQgZXhhbXBsZSwgd2UgaGF2ZSB0aHJlZSByb290cyAoYGNsb3VkLmRhdGFiYXNlYCwgYGNsb3VkLmRhdGFiYXNlX3Byb2AsXG4gICAqIGBiaWxsaW5nLm1vZHVsZXMuZGF0YWJhc2VfcHJvYCksIHNvIGBuYW1lc3BhY2UgPSB0cnVlYCBpcyByZXF1aXJlZC5cbiAgICpcbiAgICogYGBgdGV4dFxuICAgKiBzcmNcbiAgICog4pSU4pSA4pSAIGNsb3VkXG4gICAqIOKUlOKUgOKUgCBkYXRhYmFzZVxuICAgKiDilJzilIDilIAgX19pbml0X18ucHlcbiAgICog4pSc4pSA4pSAIHF1ZXJ5X2J1aWxkZXJcbiAgICog4pSCICAg4pSU4pSA4pSAIF9faW5pdF9fLnB5XG4gICAqIOKUlOKUgOKUgCBzcWxcbiAgICog4pSc4pSA4pSAIHBhcnNlci5weVxuICAgKiDilJTilIDilIAgX19pbml0X18ucHlcbiAgICogYGBgXG4gICAqXG4gICAqIGBgYHRleHRcbiAgICogc3JjXG4gICAqIOKUnOKUgOKUgCBjbG91ZFxuICAgKiDilIIgICDilJzilIDilIAgZGF0YWJhc2VcbiAgICog4pSCICAg4pSCICAg4pSc4pSA4pSAIF9faW5pdF9fLnB5XG4gICAqIOKUgiAgIOKUgiAgIOKUnOKUgOKUgCBxdWVyeV9idWlsZGVyXG4gICAqIOKUgiAgIOKUgiAgIOKUgiAgIOKUlOKUgOKUgCBfX2luaXRfXy5weVxuICAgKiDilIIgICDilIIgICDilJTilIDilIAgc3FsXG4gICAqIOKUgiAgIOKUgiAgICAgICDilJzilIDilIAgX19pbml0X18ucHlcbiAgICog4pSCICAg4pSCICAgICAgIOKUlOKUgOKUgCBwYXJzZXIucHlcbiAgICog4pSCICAg4pSU4pSA4pSAIGRhdGFiYXNlX3Byb1xuICAgKiDilIIgICAgICAg4pSc4pSA4pSAIF9faW5pdF9fLnB5XG4gICAqIOKUgiAgICAgICDilJTilIDilIAgcXVlcnlfYnVpbGRlci5weVxuICAgKiDilJTilIDilIAgYmlsbGluZ1xuICAgKiDilJTilIDilIAgbW9kdWxlc1xuICAgKiDilJTilIDilIAgZGF0YWJhc2VfcHJvXG4gICAqIOKUnOKUgOKUgCBfX2luaXRfXy5weVxuICAgKiDilJTilIDilIAgc3FsLnB5XG4gICAqIGBgYFxuICAgKlxuICAgKiBAc2NoZW1hIEJ1aWxkQmFja2VuZFNldHRpbmdzI25hbWVzcGFjZVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZXNwYWNlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogR2xvYiBleHByZXNzaW9ucyB3aGljaCBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgdG8gZXhjbHVkZSBmcm9tIHRoZSBzb3VyY2UgZGlzdHJpYnV0aW9uLlxuICAgKlxuICAgKiBUaGVzZSBleGNsdXNpb25zIGFyZSBhbHNvIGFwcGxpZWQgdG8gd2hlZWxzIHRvIGVuc3VyZSB0aGF0IGEgd2hlZWwgYnVpbHQgZnJvbSBhIHNvdXJjZSB0cmVlXG4gICAqIGlzIGNvbnNpc3RlbnQgd2l0aCBhIHdoZWVsIGJ1aWx0IGZyb20gYSBzb3VyY2UgZGlzdHJpYnV0aW9uLlxuICAgKlxuICAgKiBAc2NoZW1hIEJ1aWxkQmFja2VuZFNldHRpbmdzI3NvdXJjZS1leGNsdWRlXG4gICAqL1xuICByZWFkb25seSBzb3VyY2VFeGNsdWRlPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEdsb2IgZXhwcmVzc2lvbnMgd2hpY2ggZmlsZXMgYW5kIGRpcmVjdG9yaWVzIHRvIGFkZGl0aW9uYWxseSBpbmNsdWRlIGluIHRoZSBzb3VyY2VcbiAgICogZGlzdHJpYnV0aW9uLlxuICAgKlxuICAgKiBgcHlwcm9qZWN0LnRvbWxgIGFuZCB0aGUgY29udGVudHMgb2YgdGhlIG1vZHVsZSBkaXJlY3RvcnkgYXJlIGFsd2F5cyBpbmNsdWRlZC5cbiAgICpcbiAgICogQHNjaGVtYSBCdWlsZEJhY2tlbmRTZXR0aW5ncyNzb3VyY2UtaW5jbHVkZVxuICAgKi9cbiAgcmVhZG9ubHkgc291cmNlSW5jbHVkZT86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBHbG9iIGV4cHJlc3Npb25zIHdoaWNoIGZpbGVzIGFuZCBkaXJlY3RvcmllcyB0byBleGNsdWRlIGZyb20gdGhlIHdoZWVsLlxuICAgKlxuICAgKiBAc2NoZW1hIEJ1aWxkQmFja2VuZFNldHRpbmdzI3doZWVsLWV4Y2x1ZGVcbiAgICovXG4gIHJlYWRvbmx5IHdoZWVsRXhjbHVkZT86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdCdWlsZEJhY2tlbmRTZXR0aW5ncycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0J1aWxkQmFja2VuZFNldHRpbmdzKG9iajogQnVpbGRCYWNrZW5kU2V0dGluZ3MgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdkYXRhJzogdG9Kc29uX1doZWVsRGF0YUluY2x1ZGVzKG9iai5kYXRhKSxcbiAgICAnZGVmYXVsdC1leGNsdWRlcyc6IG9iai5kZWZhdWx0RXhjbHVkZXMsXG4gICAgJ21vZHVsZS1uYW1lJzogb2JqLm1vZHVsZU5hbWUsXG4gICAgJ21vZHVsZS1yb290Jzogb2JqLm1vZHVsZVJvb3QsXG4gICAgJ25hbWVzcGFjZSc6IG9iai5uYW1lc3BhY2UsXG4gICAgJ3NvdXJjZS1leGNsdWRlJzogb2JqLnNvdXJjZUV4Y2x1ZGU/Lm1hcCh5ID0+IHkpLFxuICAgICdzb3VyY2UtaW5jbHVkZSc6IG9iai5zb3VyY2VJbmNsdWRlPy5tYXAoeSA9PiB5KSxcbiAgICAnd2hlZWwtZXhjbHVkZSc6IG9iai53aGVlbEV4Y2x1ZGU/Lm1hcCh5ID0+IHkpLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogQSBzaW5nbGUgaXRlbSBpbiBhIGNvbmZsaWN0aW5nIHNldC5cbiAqXG4gKiBFYWNoIGl0ZW0gaXMgYSBwYWlyIG9mIGFuIChvcHRpb25hbCkgcGFja2FnZSBhbmQgYSBjb3JyZXNwb25kaW5nIGV4dHJhIG9yIGdyb3VwIG5hbWUgZm9yIHRoYXRcbiAqIHBhY2thZ2UuXG4gKlxuICogQHNjaGVtYSBTY2hlbWFDb25mbGljdEl0ZW1cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTY2hlbWFDb25mbGljdEl0ZW0ge1xuICAvKipcbiAgICogQHNjaGVtYSBTY2hlbWFDb25mbGljdEl0ZW0jZXh0cmFcbiAgICovXG4gIHJlYWRvbmx5IGV4dHJhPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIFNjaGVtYUNvbmZsaWN0SXRlbSNncm91cFxuICAgKi9cbiAgcmVhZG9ubHkgZ3JvdXA/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgU2NoZW1hQ29uZmxpY3RJdGVtI3BhY2thZ2VcbiAgICovXG4gIHJlYWRvbmx5IHBhY2thZ2U/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ1NjaGVtYUNvbmZsaWN0SXRlbScgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX1NjaGVtYUNvbmZsaWN0SXRlbShvYmo6IFNjaGVtYUNvbmZsaWN0SXRlbSB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2V4dHJhJzogb2JqLmV4dHJhLFxuICAgICdncm91cCc6IG9iai5ncm91cCxcbiAgICAncGFja2FnZSc6IG9iai5wYWNrYWdlLFxuICB9O1xuICAvLyBmaWx0ZXIgdW5kZWZpbmVkIHZhbHVlc1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMocmVzdWx0KS5yZWR1Y2UoKHIsIGkpID0+IChpWzFdID09PSB1bmRlZmluZWQpID8gciA6ICh7IC4uLnIsIFtpWzBdXTogaVsxXSB9KSwge30pO1xufVxuLyogZXNsaW50LWVuYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5cbi8qKlxuICogQHNjaGVtYSBEZXBlbmRlbmN5R3JvdXBTZXR0aW5nc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIERlcGVuZGVuY3lHcm91cFNldHRpbmdzIHtcbiAgLyoqXG4gICAqIFZlcnNpb24gb2YgcHl0aG9uIHRvIHJlcXVpcmUgd2hlbiBpbnN0YWxsaW5nIHRoaXMgZ3JvdXBcbiAgICpcbiAgICogQHNjaGVtYSBEZXBlbmRlbmN5R3JvdXBTZXR0aW5ncyNyZXF1aXJlcy1weXRob25cbiAgICovXG4gIHJlYWRvbmx5IHJlcXVpcmVzUHl0aG9uPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdEZXBlbmRlbmN5R3JvdXBTZXR0aW5ncycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0RlcGVuZGVuY3lHcm91cFNldHRpbmdzKG9iajogRGVwZW5kZW5jeUdyb3VwU2V0dGluZ3MgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdyZXF1aXJlcy1weXRob24nOiBvYmoucmVxdWlyZXNQeXRob24sXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBBIHN1YnNldCBvZiB0aGUgUHl0aG9uIFBhY2thZ2UgTWV0YWRhdGEgMi4zIHN0YW5kYXJkIGFzIHNwZWNpZmllZCBpblxuICogPGh0dHBzOi8vcGFja2FnaW5nLnB5dGhvbi5vcmcvc3BlY2lmaWNhdGlvbnMvY29yZS1tZXRhZGF0YS8+LlxuICpcbiAqIEBzY2hlbWEgU3RhdGljTWV0YWRhdGFcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdGF0aWNNZXRhZGF0YSB7XG4gIC8qKlxuICAgKiBAc2NoZW1hIFN0YXRpY01ldGFkYXRhI25hbWVcbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBTdGF0aWNNZXRhZGF0YSNwcm92aWRlcy1leHRyYVxuICAgKi9cbiAgcmVhZG9ubHkgcHJvdmlkZXNFeHRyYT86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIFN0YXRpY01ldGFkYXRhI3JlcXVpcmVzLWRpc3RcbiAgICovXG4gIHJlYWRvbmx5IHJlcXVpcmVzRGlzdD86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBQRVAgNTA4LXN0eWxlIFB5dGhvbiByZXF1aXJlbWVudCwgZS5nLiwgYD49My4xMGBcbiAgICpcbiAgICogQHNjaGVtYSBTdGF0aWNNZXRhZGF0YSNyZXF1aXJlcy1weXRob25cbiAgICovXG4gIHJlYWRvbmx5IHJlcXVpcmVzUHl0aG9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQRVAgNDQwLXN0eWxlIHBhY2thZ2UgdmVyc2lvbiwgZS5nLiwgYDEuMi4zYFxuICAgKlxuICAgKiBAc2NoZW1hIFN0YXRpY01ldGFkYXRhI3ZlcnNpb25cbiAgICovXG4gIHJlYWRvbmx5IHZlcnNpb24/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ1N0YXRpY01ldGFkYXRhJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fU3RhdGljTWV0YWRhdGEob2JqOiBTdGF0aWNNZXRhZGF0YSB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ25hbWUnOiBvYmoubmFtZSxcbiAgICAncHJvdmlkZXMtZXh0cmEnOiBvYmoucHJvdmlkZXNFeHRyYT8ubWFwKHkgPT4geSksXG4gICAgJ3JlcXVpcmVzLWRpc3QnOiBvYmoucmVxdWlyZXNEaXN0Py5tYXAoeSA9PiB5KSxcbiAgICAncmVxdWlyZXMtcHl0aG9uJzogb2JqLnJlcXVpcmVzUHl0aG9uLFxuICAgICd2ZXJzaW9uJzogb2JqLnZlcnNpb24sXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIEV4Y2x1ZGVOZXdlck92ZXJyaWRlXG4gKi9cbmV4cG9ydCBjbGFzcyBFeGNsdWRlTmV3ZXJPdmVycmlkZSB7XG4gIHB1YmxpYyBzdGF0aWMgZnJvbUJvb2xlYW4odmFsdWU6IGJvb2xlYW4pOiBFeGNsdWRlTmV3ZXJPdmVycmlkZSB7XG4gICAgcmV0dXJuIG5ldyBFeGNsdWRlTmV3ZXJPdmVycmlkZSh2YWx1ZSk7XG4gIH1cbiAgcHVibGljIHN0YXRpYyBmcm9tU3RyaW5nKHZhbHVlOiBzdHJpbmcpOiBFeGNsdWRlTmV3ZXJPdmVycmlkZSB7XG4gICAgcmV0dXJuIG5ldyBFeGNsdWRlTmV3ZXJPdmVycmlkZSh2YWx1ZSk7XG4gIH1cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihwdWJsaWMgcmVhZG9ubHkgdmFsdWU6IGJvb2xlYW4gfCBzdHJpbmcpIHtcbiAgfVxufVxuXG4vKipcbiAqIEBzY2hlbWEgRm9ya1N0cmF0ZWd5XG4gKi9cbmV4cG9ydCBlbnVtIEZvcmtTdHJhdGVneSB7XG4gIC8qKiBPcHRpbWl6ZSBmb3Igc2VsZWN0aW5nIHRoZSBmZXdlc3QgbnVtYmVyIG9mIHZlcnNpb25zIGZvciBlYWNoIHBhY2thZ2UuIE9sZGVyIHZlcnNpb25zIG1heVxuYmUgcHJlZmVycmVkIGlmIHRoZXkgYXJlIGNvbXBhdGlibGUgd2l0aCBhIHdpZGVyIHJhbmdlIG9mIHN1cHBvcnRlZCBQeXRob24gdmVyc2lvbnMgb3JcbnBsYXRmb3Jtcy4gKGZld2VzdCkgKi9cbiAgRkVXRVNUID0gXCJmZXdlc3RcIixcbiAgLyoqIE9wdGltaXplIGZvciBzZWxlY3RpbmcgbGF0ZXN0IHN1cHBvcnRlZCB2ZXJzaW9uIG9mIGVhY2ggcGFja2FnZSwgZm9yIGVhY2ggc3VwcG9ydGVkIFB5dGhvblxudmVyc2lvbi4gKHJlcXVpcmVzLXB5dGhvbikgKi9cbiAgUkVRVUlSRVNfSFlQSEVOX1BZVEhPTiA9IFwicmVxdWlyZXMtcHl0aG9uXCIsXG59XG5cbi8qKlxuICogQHNjaGVtYSBJbmRleFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEluZGV4IHtcbiAgLyoqXG4gICAqIFdoZW4gdXYgc2hvdWxkIHVzZSBhdXRoZW50aWNhdGlvbiBmb3IgcmVxdWVzdHMgdG8gdGhlIGluZGV4LlxuICAgKlxuICAgKiBgYGB0b21sXG4gICAqIFtbdG9vbC51di5pbmRleF1dXG4gICAqIG5hbWUgPSBcIm15LWluZGV4XCJcbiAgICogdXJsID0gXCJodHRwczovLzxvbWl0dGVkPi9zaW1wbGVcIlxuICAgKiBhdXRoZW50aWNhdGUgPSBcImFsd2F5c1wiXG4gICAqIGBgYFxuICAgKlxuICAgKiBAc2NoZW1hIEluZGV4I2F1dGhlbnRpY2F0ZVxuICAgKi9cbiAgcmVhZG9ubHkgYXV0aGVudGljYXRlPzogQXV0aFBvbGljeTtcblxuICAvKipcbiAgICogQ2FjaGUgY29udHJvbCBjb25maWd1cmF0aW9uIGZvciB0aGlzIGluZGV4LlxuICAgKlxuICAgKiBXaGVuIHNldCwgdGhlc2UgaGVhZGVycyB3aWxsIG92ZXJyaWRlIHRoZSBzZXJ2ZXIncyBjYWNoZSBjb250cm9sIGhlYWRlcnNcbiAgICogZm9yIGJvdGggcGFja2FnZSBtZXRhZGF0YSByZXF1ZXN0cyBhbmQgYXJ0aWZhY3QgZG93bmxvYWRzLlxuICAgKlxuICAgKiBgYGB0b21sXG4gICAqIFtbdG9vbC51di5pbmRleF1dXG4gICAqIG5hbWUgPSBcIm15LWluZGV4XCJcbiAgICogdXJsID0gXCJodHRwczovLzxvbWl0dGVkPi9zaW1wbGVcIlxuICAgKiBjYWNoZS1jb250cm9sID0geyBhcGkgPSBcIm1heC1hZ2U9NjAwXCIsIGZpbGVzID0gXCJtYXgtYWdlPTM2MDBcIiB9XG4gICAqIGBgYFxuICAgKlxuICAgKiBAc2NoZW1hIEluZGV4I2NhY2hlLWNvbnRyb2xcbiAgICovXG4gIHJlYWRvbmx5IGNhY2hlQ29udHJvbD86IEluZGV4Q2FjaGVDb250cm9sO1xuXG4gIC8qKlxuICAgKiBNYXJrIHRoZSBpbmRleCBhcyB0aGUgZGVmYXVsdCBpbmRleC5cbiAgICpcbiAgICogQnkgZGVmYXVsdCwgdXYgdXNlcyBQeVBJIGFzIHRoZSBkZWZhdWx0IGluZGV4LCBzdWNoIHRoYXQgZXZlbiBpZiBhZGRpdGlvbmFsIGluZGV4ZXMgYXJlXG4gICAqIGRlZmluZWQgdmlhIGBbW3Rvb2wudXYuaW5kZXhdXWAsIFB5UEkgd2lsbCBzdGlsbCBiZSB1c2VkIGFzIGEgZmFsbGJhY2sgZm9yIHBhY2thZ2VzIHRoYXRcbiAgICogYXJlbid0IGZvdW5kIGVsc2V3aGVyZS4gVG8gZGlzYWJsZSB0aGUgUHlQSSBkZWZhdWx0LCBzZXQgYGRlZmF1bHQgPSB0cnVlYCBvbiBhdCBsZWFzdCBvbmVcbiAgICogb3RoZXIgaW5kZXguXG4gICAqXG4gICAqIE1hcmtpbmcgYW4gaW5kZXggYXMgZGVmYXVsdCB3aWxsIG1vdmUgaXQgdG8gdGhlIGZyb250IG9mIHRoZSBsaXN0IG9mIGluZGV4ZXMsIHN1Y2ggdGhhdCBpdFxuICAgKiBpcyBnaXZlbiB0aGUgaGlnaGVzdCBwcmlvcml0eSB3aGVuIHJlc29sdmluZyBwYWNrYWdlcy5cbiAgICpcbiAgICogQHNjaGVtYSBJbmRleCNkZWZhdWx0XG4gICAqL1xuICByZWFkb25seSBkZWZhdWx0PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQW4gaW5kZXgtc3BlY2lmaWMgYGV4Y2x1ZGUtbmV3ZXJgIGN1dG9mZi5cbiAgICpcbiAgICogQWNjZXB0cyB0aGUgc2FtZSBkYXRlLCB0aW1lc3RhbXAsIGFuZCBkdXJhdGlvbiB2YWx1ZXMgYXMgdGhlIGdsb2JhbCBgZXhjbHVkZS1uZXdlcmBcbiAgICogc2V0dGluZy4gU2V0IHRoaXMgdG8gYGZhbHNlYCB0byBkaXNhYmxlIGBleGNsdWRlLW5ld2VyYCBmb3IgdGhpcyBpbmRleCBlbnRpcmVseS5cbiAgICpcbiAgICogV2hlbiBzZXQgdG8gYSB2YWx1ZSwgcGFja2FnZXMgcmVzb2x2ZWQgZnJvbSB0aGlzIGluZGV4IHdpbGwgdXNlIHRoYXQgY3V0b2ZmIGluc3RlYWQgb2YgdGhlXG4gICAqIGdsb2JhbGx5LXNwZWNpZmllZCB2YWx1ZSwgdW5sZXNzIGEgcGFja2FnZS1zcGVjaWZpYyBgZXhjbHVkZS1uZXdlci1wYWNrYWdlYCBvdmVycmlkZSBpc1xuICAgKiBwcmVzZW50LlxuICAgKlxuICAgKiBUaGlzIG9wdGlvbiBpcyBpbiBwcmV2aWV3IGFuZCBtYXkgY2hhbmdlIGluIGFueSBmdXR1cmUgcmVsZWFzZS5cbiAgICpcbiAgICogYGBgdG9tbFxuICAgKiBbdG9vbC51dl1cbiAgICogZXhjbHVkZS1uZXdlciA9IFwiMjAyNS0wMS0wMVQwMDowMDowMFpcIlxuICAgKlxuICAgKiBbW3Rvb2wudXYuaW5kZXhdXVxuICAgKiBuYW1lID0gXCJpbnRlcm5hbFwiXG4gICAqIHVybCA9IFwiaHR0cHM6Ly9pbnRlcm5hbC5leGFtcGxlLmNvbS9zaW1wbGVcIlxuICAgKiBleGNsdWRlLW5ld2VyID0gXCI3IGRheXNcIlxuICAgKiBgYGBcbiAgICpcbiAgICogQHNjaGVtYSBJbmRleCNleGNsdWRlLW5ld2VyXG4gICAqL1xuICByZWFkb25seSBleGNsdWRlTmV3ZXI/OiBFeGNsdWRlTmV3ZXJPdmVycmlkZTtcblxuICAvKipcbiAgICogTWFyayB0aGUgaW5kZXggYXMgZXhwbGljaXQuXG4gICAqXG4gICAqIEV4cGxpY2l0IGluZGV4ZXMgd2lsbCBfb25seV8gYmUgdXNlZCB3aGVuIGV4cGxpY2l0bHkgcmVxdWVzdGVkIHZpYSBhIGBbdG9vbC51di5zb3VyY2VzXWBcbiAgICogZGVmaW5pdGlvbiwgYXMgaW46XG4gICAqXG4gICAqIGBgYHRvbWxcbiAgICogW1t0b29sLnV2LmluZGV4XV1cbiAgICogbmFtZSA9IFwicHl0b3JjaFwiXG4gICAqIHVybCA9IFwiaHR0cHM6Ly9kb3dubG9hZC5weXRvcmNoLm9yZy93aGwvY3UxMzBcIlxuICAgKiBleHBsaWNpdCA9IHRydWVcbiAgICpcbiAgICogW3Rvb2wudXYuc291cmNlc11cbiAgICogdG9yY2ggPSB7IGluZGV4ID0gXCJweXRvcmNoXCIgfVxuICAgKiBgYGBcbiAgICpcbiAgICogQHNjaGVtYSBJbmRleCNleHBsaWNpdFxuICAgKi9cbiAgcmVhZG9ubHkgZXhwbGljaXQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgZm9ybWF0IHVzZWQgYnkgdGhlIGluZGV4LlxuICAgKlxuICAgKiBJbmRleGVzIGNhbiBlaXRoZXIgYmUgUEVQIDUwMy1jb21wbGlhbnQgKGkuZS4sIGEgUHlQSS1zdHlsZSByZWdpc3RyeSBpbXBsZW1lbnRpbmcgdGhlIFNpbXBsZVxuICAgKiBBUEkpIG9yIHN0cnVjdHVyZWQgYXMgYSBmbGF0IGxpc3Qgb2YgZGlzdHJpYnV0aW9ucyAoZS5nLiwgYC0tZmluZC1saW5rc2ApLiBJbiBib3RoIGNhc2VzLFxuICAgKiBpbmRleGVzIGNhbiBwb2ludCB0byBlaXRoZXIgbG9jYWwgb3IgcmVtb3RlIHJlc291cmNlcy5cbiAgICpcbiAgICogQHNjaGVtYSBJbmRleCNmb3JtYXRcbiAgICovXG4gIHJlYWRvbmx5IGZvcm1hdD86IEluZGV4Rm9ybWF0O1xuXG4gIC8qKlxuICAgKiBTdGF0dXMgY29kZXMgdGhhdCB1diBzaG91bGQgaWdub3JlIHdoZW4gZGVjaWRpbmcgd2hldGhlciB0byBjb250aW51ZSByZXNvbHV0aW9uIGFmdGVyIGFcbiAgICogcmVxdWVzdCB0byB0aGlzIGluZGV4IGZhaWxzLlxuICAgKlxuICAgKiBgYGB0b21sXG4gICAqIFtbdG9vbC51di5pbmRleF1dXG4gICAqIG5hbWUgPSBcIm15LWluZGV4XCJcbiAgICogdXJsID0gXCJodHRwczovLzxvbWl0dGVkPi9zaW1wbGVcIlxuICAgKiBpZ25vcmUtZXJyb3ItY29kZXMgPSBbNDAxLCA0MDNdXG4gICAqIGBgYFxuICAgKlxuICAgKiBAc2NoZW1hIEluZGV4I2lnbm9yZS1lcnJvci1jb2Rlc1xuICAgKi9cbiAgcmVhZG9ubHkgaWdub3JlRXJyb3JDb2Rlcz86IG51bWJlcltdO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgaW5kZXguXG4gICAqXG4gICAqIEluZGV4IG5hbWVzIGNhbiBiZSB1c2VkIHRvIHJlZmVyZW5jZSBpbmRleGVzIGVsc2V3aGVyZSBpbiB0aGUgY29uZmlndXJhdGlvbi4gRm9yIGV4YW1wbGUsXG4gICAqIHlvdSBjYW4gcGluIGEgcGFja2FnZSB0byBhIHNwZWNpZmljIGluZGV4IGJ5IG5hbWU6XG4gICAqXG4gICAqIGBgYHRvbWxcbiAgICogW1t0b29sLnV2LmluZGV4XV1cbiAgICogbmFtZSA9IFwicHl0b3JjaFwiXG4gICAqIHVybCA9IFwiaHR0cHM6Ly9kb3dubG9hZC5weXRvcmNoLm9yZy93aGwvY3UxMzBcIlxuICAgKlxuICAgKiBbdG9vbC51di5zb3VyY2VzXVxuICAgKiB0b3JjaCA9IHsgaW5kZXggPSBcInB5dG9yY2hcIiB9XG4gICAqIGBgYFxuICAgKlxuICAgKiBAc2NoZW1hIEluZGV4I25hbWVcbiAgICovXG4gIHJlYWRvbmx5IG5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBVUkwgb2YgdGhlIHVwbG9hZCBlbmRwb2ludC5cbiAgICpcbiAgICogV2hlbiB1c2luZyBgdXYgcHVibGlzaCAtLWluZGV4IDxuYW1lPmAsIHRoaXMgVVJMIGlzIHVzZWQgZm9yIHB1Ymxpc2hpbmcuXG4gICAqXG4gICAqIEEgY29uZmlndXJhdGlvbiBmb3IgdGhlIGRlZmF1bHQgaW5kZXggUHlQSSB3b3VsZCBsb29rIGFzIGZvbGxvd3M6XG4gICAqXG4gICAqIGBgYHRvbWxcbiAgICogW1t0b29sLnV2LmluZGV4XV1cbiAgICogbmFtZSA9IFwicHlwaVwiXG4gICAqIHVybCA9IFwiaHR0cHM6Ly9weXBpLm9yZy9zaW1wbGVcIlxuICAgKiBwdWJsaXNoLXVybCA9IFwiaHR0cHM6Ly91cGxvYWQucHlwaS5vcmcvbGVnYWN5L1wiXG4gICAqIGBgYFxuICAgKlxuICAgKiBAc2NoZW1hIEluZGV4I3B1Ymxpc2gtdXJsXG4gICAqL1xuICByZWFkb25seSBwdWJsaXNoVXJsPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgVVJMIG9mIHRoZSBpbmRleC5cbiAgICpcbiAgICogRXhwZWN0cyB0byByZWNlaXZlIGEgVVJMIChlLmcuLCBgaHR0cHM6Ly9weXBpLm9yZy9zaW1wbGVgKSBvciBhIGxvY2FsIHBhdGguXG4gICAqXG4gICAqIEBzY2hlbWEgSW5kZXgjdXJsXG4gICAqL1xuICByZWFkb25seSB1cmw6IHN0cmluZztcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnSW5kZXgnIHRvIEpTT04gcmVwcmVzZW50YXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSnNvbl9JbmRleChvYmo6IEluZGV4IHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnYXV0aGVudGljYXRlJzogb2JqLmF1dGhlbnRpY2F0ZSxcbiAgICAnY2FjaGUtY29udHJvbCc6IHRvSnNvbl9JbmRleENhY2hlQ29udHJvbChvYmouY2FjaGVDb250cm9sKSxcbiAgICAnZGVmYXVsdCc6IG9iai5kZWZhdWx0LFxuICAgICdleGNsdWRlLW5ld2VyJzogb2JqLmV4Y2x1ZGVOZXdlcj8udmFsdWUsXG4gICAgJ2V4cGxpY2l0Jzogb2JqLmV4cGxpY2l0LFxuICAgICdmb3JtYXQnOiBvYmouZm9ybWF0LFxuICAgICdpZ25vcmUtZXJyb3ItY29kZXMnOiBvYmouaWdub3JlRXJyb3JDb2Rlcz8ubWFwKHkgPT4geSksXG4gICAgJ25hbWUnOiBvYmoubmFtZSxcbiAgICAncHVibGlzaC11cmwnOiBvYmoucHVibGlzaFVybCxcbiAgICAndXJsJzogb2JqLnVybCxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgSW5kZXhTdHJhdGVneVxuICovXG5leHBvcnQgZW51bSBJbmRleFN0cmF0ZWd5IHtcbiAgLyoqIE9ubHkgdXNlIHJlc3VsdHMgZnJvbSB0aGUgZmlyc3QgaW5kZXggdGhhdCByZXR1cm5zIGEgbWF0Y2ggZm9yIGEgZ2l2ZW4gcGFja2FnZSBuYW1lLlxuXG5XaGlsZSB0aGlzIGRpZmZlcnMgZnJvbSBwaXAncyBiZWhhdmlvciwgaXQncyB0aGUgZGVmYXVsdCBpbmRleCBzdHJhdGVneSBhcyBpdCdzIHRoZSBtb3N0XG5zZWN1cmUuIChmaXJzdC1pbmRleCkgKi9cbiAgRklSU1RfSFlQSEVOX0lOREVYID0gXCJmaXJzdC1pbmRleFwiLFxuICAvKiogU2VhcmNoIGZvciBldmVyeSBwYWNrYWdlIG5hbWUgYWNyb3NzIGFsbCBpbmRleGVzLCBleGhhdXN0aW5nIHRoZSB2ZXJzaW9ucyBmcm9tIHRoZSBmaXJzdFxuaW5kZXggYmVmb3JlIG1vdmluZyBvbiB0byB0aGUgbmV4dC5cblxuSW4gdGhpcyBzdHJhdGVneSwgd2UgbG9vayBmb3IgZXZlcnkgcGFja2FnZSBhY3Jvc3MgYWxsIGluZGV4ZXMuIFdoZW4gcmVzb2x2aW5nLCB3ZSBhdHRlbXB0XG50byB1c2UgdmVyc2lvbnMgZnJvbSB0aGUgaW5kZXhlcyBpbiBvcmRlciwgc3VjaCB0aGF0IHdlIGV4aGF1c3QgYWxsIGF2YWlsYWJsZSB2ZXJzaW9ucyBmcm9tXG50aGUgZmlyc3QgaW5kZXggYmVmb3JlIG1vdmluZyBvbiB0byB0aGUgbmV4dC4gRnVydGhlciwgaWYgYSB2ZXJzaW9uIGlzIGZvdW5kIHRvIGJlXG5pbmNvbXBhdGlibGUgaW4gdGhlIGZpcnN0IGluZGV4LCB3ZSBkbyBub3QgcmVjb25zaWRlciB0aGF0IHZlcnNpb24gaW4gc3Vic2VxdWVudCBpbmRleGVzLFxuZXZlbiBpZiB0aGUgc2Vjb25kYXJ5IGluZGV4IG1pZ2h0IGNvbnRhaW4gY29tcGF0aWJsZSB2ZXJzaW9ucyAoZS5nLiwgdmFyaWFudHMgb2YgdGhlIHNhbWVcbnZlcnNpb25zIHdpdGggZGlmZmVyZW50IEFCSSB0YWdzIG9yIFB5dGhvbiB2ZXJzaW9uIGNvbnN0cmFpbnRzKS5cblxuU2VlOiA8aHR0cHM6Ly9wZXBzLnB5dGhvbi5vcmcvcGVwLTA3MDgvPiAodW5zYWZlLWZpcnN0LW1hdGNoKSAqL1xuICBVTlNBRkVfSFlQSEVOX0ZJUlNUX0hZUEhFTl9NQVRDSCA9IFwidW5zYWZlLWZpcnN0LW1hdGNoXCIsXG4gIC8qKiBTZWFyY2ggZm9yIGV2ZXJ5IHBhY2thZ2UgbmFtZSBhY3Jvc3MgYWxsIGluZGV4ZXMsIHByZWZlcnJpbmcgdGhlIFwiYmVzdFwiIHZlcnNpb24gZm91bmQuIElmIGFcbnBhY2thZ2UgdmVyc2lvbiBpcyBpbiBtdWx0aXBsZSBpbmRleGVzLCBvbmx5IGxvb2sgYXQgdGhlIGVudHJ5IGZvciB0aGUgZmlyc3QgaW5kZXguXG5cbkluIHRoaXMgc3RyYXRlZ3ksIHdlIGxvb2sgZm9yIGV2ZXJ5IHBhY2thZ2UgYWNyb3NzIGFsbCBpbmRleGVzLiBXaGVuIHJlc29sdmluZywgd2UgY29uc2lkZXJcbmFsbCB2ZXJzaW9ucyBmcm9tIGFsbCBpbmRleGVzLCBjaG9vc2luZyB0aGUgXCJiZXN0XCIgdmVyc2lvbiBmb3VuZCAodHlwaWNhbGx5LCB0aGUgaGlnaGVzdFxuY29tcGF0aWJsZSB2ZXJzaW9uKS5cblxuVGhpcyBtb3N0IGNsb3NlbHkgbWF0Y2hlcyBwaXAncyBiZWhhdmlvciwgYnV0IGV4cG9zZXMgdGhlIHJlc29sdmVyIHRvIFwiZGVwZW5kZW5jeSBjb25mdXNpb25cIlxuYXR0YWNrcyB3aGVyZWJ5IG1hbGljaW91cyBhY3RvcnMgY2FuIHB1Ymxpc2ggcGFja2FnZXMgdG8gcHVibGljIGluZGV4ZXMgd2l0aCB0aGUgc2FtZSBuYW1lXG5hcyBpbnRlcm5hbCBwYWNrYWdlcywgY2F1c2luZyB0aGUgcmVzb2x2ZXIgdG8gaW5zdGFsbCB0aGUgbWFsaWNpb3VzIHBhY2thZ2UgaW4gbGlldSBvZlxudGhlIGludGVuZGVkIGludGVybmFsIHBhY2thZ2UuXG5cblNlZTogPGh0dHBzOi8vcGVwcy5weXRob24ub3JnL3BlcC0wNzA4Lz4gKHVuc2FmZS1iZXN0LW1hdGNoKSAqL1xuICBVTlNBRkVfSFlQSEVOX0JFU1RfSFlQSEVOX01BVENIID0gXCJ1bnNhZmUtYmVzdC1tYXRjaFwiLFxufVxuXG4vKipcbiAqIEtleXJpbmcgcHJvdmlkZXIgdHlwZSB0byB1c2UgZm9yIGNyZWRlbnRpYWwgbG9va3VwLlxuICpcbiAqIEBzY2hlbWEgS2V5cmluZ1Byb3ZpZGVyVHlwZVxuICovXG5leHBvcnQgZW51bSBLZXlyaW5nUHJvdmlkZXJUeXBlIHtcbiAgLyoqIERvIG5vdCB1c2Uga2V5cmluZyBmb3IgY3JlZGVudGlhbCBsb29rdXAuIChkaXNhYmxlZCkgKi9cbiAgRElTQUJMRUQgPSBcImRpc2FibGVkXCIsXG4gIC8qKiBVc2UgdGhlIGBrZXlyaW5nYCBjb21tYW5kIGZvciBjcmVkZW50aWFsIGxvb2t1cC4gKHN1YnByb2Nlc3MpICovXG4gIFNVQlBST0NFU1MgPSBcInN1YnByb2Nlc3NcIixcbn1cblxuLyoqXG4gKiBUaGUgbWV0aG9kIHRvIHVzZSB3aGVuIGxpbmtpbmcuXG4gKlxuICogRGVmYXVsdHMgdG8gW2BMaW5rTW9kZTo6Q2xvbmVgXSBvbiBtYWNPUyBhbmQgTGludXggKHdoaWNoIHN1cHBvcnQgY29weS1vbi13cml0ZSBvblxuICogQVBGUyBhbmQgYnRyZnMveGZzL2JjYWNoZWZzIHJlc3BlY3RpdmVseSksIGFuZCBbYExpbmtNb2RlOjpIYXJkbGlua2BdIG9uIG90aGVyXG4gKiBwbGF0Zm9ybXMuXG4gKlxuICogQGRlZmF1bHQgTGlua01vZGU6OkNsb25lYF0gb24gbWFjT1MgYW5kIExpbnV4ICh3aGljaCBzdXBwb3J0IGNvcHktb24td3JpdGUgb25cbiAqIEBzY2hlbWEgTGlua01vZGVcbiAqL1xuZXhwb3J0IGVudW0gTGlua01vZGUge1xuICAvKiogQ2xvbmUgKGkuZS4sIGNvcHktb24td3JpdGUpIHBhY2thZ2VzIGZyb20gdGhlIHNvdXJjZSBpbnRvIHRoZSBkZXN0aW5hdGlvbi4gKGNsb25lKSAqL1xuICBDTE9ORSA9IFwiY2xvbmVcIixcbiAgLyoqIENvcHkgcGFja2FnZXMgZnJvbSB0aGUgc291cmNlIGludG8gdGhlIGRlc3RpbmF0aW9uLiAoY29weSkgKi9cbiAgQ09QWSA9IFwiY29weVwiLFxuICAvKiogSGFyZCBsaW5rIHBhY2thZ2VzIGZyb20gdGhlIHNvdXJjZSBpbnRvIHRoZSBkZXN0aW5hdGlvbi4gKGhhcmRsaW5rKSAqL1xuICBIQVJETElOSyA9IFwiaGFyZGxpbmtcIixcbiAgLyoqIFN5bWJvbGljYWxseSBsaW5rIHBhY2thZ2VzIGZyb20gdGhlIHNvdXJjZSBpbnRvIHRoZSBkZXN0aW5hdGlvbi4gKHN5bWxpbmspICovXG4gIFNZTUxJTksgPSBcInN5bWxpbmtcIixcbn1cblxuLyoqXG4gKiBTZXR0aW5ncyB0aGF0IGFyZSBzcGVjaWZpYyB0byB0aGUgYHV2IHBpcGAgY29tbWFuZC1saW5lIGludGVyZmFjZS5cbiAqXG4gKiBUaGVzZSB2YWx1ZXMgd2lsbCBiZSBpZ25vcmVkIHdoZW4gcnVubmluZyBjb21tYW5kcyBvdXRzaWRlIHRoZSBgdXYgcGlwYCBuYW1lc3BhY2UgKGUuZy4sXG4gKiBgdXYgbG9ja2AsIGB1dnhgKS5cbiAqXG4gKiBAc2NoZW1hIFBpcE9wdGlvbnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQaXBPcHRpb25zIHtcbiAgLyoqXG4gICAqIEluY2x1ZGUgYWxsIG9wdGlvbmFsIGRlcGVuZGVuY2llcy5cbiAgICpcbiAgICogT25seSBhcHBsaWVzIHRvIGBweXByb2plY3QudG9tbGAsIGBzZXR1cC5weWAsIGFuZCBgc2V0dXAuY2ZnYCBzb3VyY2VzLlxuICAgKlxuICAgKiBAc2NoZW1hIFBpcE9wdGlvbnMjYWxsLWV4dHJhc1xuICAgKi9cbiAgcmVhZG9ubHkgYWxsRXh0cmFzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQWxsb3cgYHV2IHBpcCBzeW5jYCB3aXRoIGVtcHR5IHJlcXVpcmVtZW50cywgd2hpY2ggd2lsbCBjbGVhciB0aGUgZW52aXJvbm1lbnQgb2YgYWxsXG4gICAqIHBhY2thZ2VzLlxuICAgKlxuICAgKiBAc2NoZW1hIFBpcE9wdGlvbnMjYWxsb3ctZW1wdHktcmVxdWlyZW1lbnRzXG4gICAqL1xuICByZWFkb25seSBhbGxvd0VtcHR5UmVxdWlyZW1lbnRzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHN0eWxlIG9mIHRoZSBhbm5vdGF0aW9uIGNvbW1lbnRzIGluY2x1ZGVkIGluIHRoZSBvdXRwdXQgZmlsZSwgdXNlZCB0byBpbmRpY2F0ZSB0aGVcbiAgICogc291cmNlIG9mIGVhY2ggcGFja2FnZS5cbiAgICpcbiAgICogQHNjaGVtYSBQaXBPcHRpb25zI2Fubm90YXRpb24tc3R5bGVcbiAgICovXG4gIHJlYWRvbmx5IGFubm90YXRpb25TdHlsZT86IEFubm90YXRpb25TdHlsZTtcblxuICAvKipcbiAgICogQWxsb3cgdXYgdG8gbW9kaWZ5IGFuIGBFWFRFUk5BTExZLU1BTkFHRURgIFB5dGhvbiBpbnN0YWxsYXRpb24uXG4gICAqXG4gICAqIFdBUk5JTkc6IGAtLWJyZWFrLXN5c3RlbS1wYWNrYWdlc2AgaXMgaW50ZW5kZWQgZm9yIHVzZSBpbiBjb250aW51b3VzIGludGVncmF0aW9uIChDSSlcbiAgICogZW52aXJvbm1lbnRzLCB3aGVuIGluc3RhbGxpbmcgaW50byBQeXRob24gaW5zdGFsbGF0aW9ucyB0aGF0IGFyZSBtYW5hZ2VkIGJ5IGFuIGV4dGVybmFsXG4gICAqIHBhY2thZ2UgbWFuYWdlciwgbGlrZSBgYXB0YC4gSXQgc2hvdWxkIGJlIHVzZWQgd2l0aCBjYXV0aW9uLCBhcyBzdWNoIFB5dGhvbiBpbnN0YWxsYXRpb25zXG4gICAqIGV4cGxpY2l0bHkgcmVjb21tZW5kIGFnYWluc3QgbW9kaWZpY2F0aW9ucyBieSBvdGhlciBwYWNrYWdlIG1hbmFnZXJzIChsaWtlIHV2IG9yIHBpcCkuXG4gICAqXG4gICAqIEBzY2hlbWEgUGlwT3B0aW9ucyNicmVhay1zeXN0ZW0tcGFja2FnZXNcbiAgICovXG4gIHJlYWRvbmx5IGJyZWFrU3lzdGVtUGFja2FnZXM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBDb21waWxlIFB5dGhvbiBmaWxlcyB0byBieXRlY29kZSBhZnRlciBpbnN0YWxsYXRpb24uXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIHV2IGRvZXMgbm90IGNvbXBpbGUgUHl0aG9uIChgLnB5YCkgZmlsZXMgdG8gYnl0ZWNvZGUgKGBfX3B5Y2FjaGVfXy8qLnB5Y2ApO1xuICAgKiBpbnN0ZWFkLCBjb21waWxhdGlvbiBpcyBwZXJmb3JtZWQgbGF6aWx5IHRoZSBmaXJzdCB0aW1lIGEgbW9kdWxlIGlzIGltcG9ydGVkLiBGb3IgdXNlLWNhc2VzXG4gICAqIGluIHdoaWNoIHN0YXJ0IHRpbWUgaXMgY3JpdGljYWwsIHN1Y2ggYXMgQ0xJIGFwcGxpY2F0aW9ucyBhbmQgRG9ja2VyIGNvbnRhaW5lcnMsIHRoaXMgb3B0aW9uXG4gICAqIGNhbiBiZSBlbmFibGVkIHRvIHRyYWRlIGxvbmdlciBpbnN0YWxsYXRpb24gdGltZXMgZm9yIGZhc3RlciBzdGFydCB0aW1lcy5cbiAgICpcbiAgICogV2hlbiBlbmFibGVkLCB1diB3aWxsIHByb2Nlc3MgdGhlIGVudGlyZSBzaXRlLXBhY2thZ2VzIGRpcmVjdG9yeSAoaW5jbHVkaW5nIHBhY2thZ2VzIHRoYXRcbiAgICogYXJlIG5vdCBiZWluZyBtb2RpZmllZCBieSB0aGUgY3VycmVudCBvcGVyYXRpb24pIGZvciBjb25zaXN0ZW5jeS4gTGlrZSBwaXAsIGl0IHdpbGwgYWxzb1xuICAgKiBpZ25vcmUgZXJyb3JzLlxuICAgKlxuICAgKiBAc2NoZW1hIFBpcE9wdGlvbnMjY29tcGlsZS1ieXRlY29kZVxuICAgKi9cbiAgcmVhZG9ubHkgY29tcGlsZUJ5dGVjb2RlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogU2V0dGluZ3MgdG8gcGFzcyB0byB0aGUgW1BFUCA1MTddKGh0dHBzOi8vcGVwcy5weXRob24ub3JnL3BlcC0wNTE3LykgYnVpbGQgYmFja2VuZCxcbiAgICogc3BlY2lmaWVkIGFzIGBLRVk9VkFMVUVgIHBhaXJzLlxuICAgKlxuICAgKiBAc2NoZW1hIFBpcE9wdGlvbnMjY29uZmlnLXNldHRpbmdzXG4gICAqL1xuICByZWFkb25seSBjb25maWdTZXR0aW5ncz86IHsgW2tleTogc3RyaW5nXTogYW55IH07XG5cbiAgLyoqXG4gICAqIFNldHRpbmdzIHRvIHBhc3MgdG8gdGhlIFtQRVAgNTE3XShodHRwczovL3BlcHMucHl0aG9uLm9yZy9wZXAtMDUxNy8pIGJ1aWxkIGJhY2tlbmQgZm9yIHNwZWNpZmljIHBhY2thZ2VzLFxuICAgKiBzcGVjaWZpZWQgYXMgYEtFWT1WQUxVRWAgcGFpcnMuXG4gICAqXG4gICAqIEBzY2hlbWEgUGlwT3B0aW9ucyNjb25maWctc2V0dGluZ3MtcGFja2FnZVxuICAgKi9cbiAgcmVhZG9ubHkgY29uZmlnU2V0dGluZ3NQYWNrYWdlPzogeyBba2V5OiBzdHJpbmddOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IH07XG5cbiAgLyoqXG4gICAqIFRoZSBoZWFkZXIgY29tbWVudCB0byBpbmNsdWRlIGF0IHRoZSB0b3Agb2YgdGhlIG91dHB1dCBmaWxlIGdlbmVyYXRlZCBieSBgdXYgcGlwIGNvbXBpbGVgLlxuICAgKlxuICAgKiBVc2VkIHRvIHJlZmxlY3QgY3VzdG9tIGJ1aWxkIHNjcmlwdHMgYW5kIGNvbW1hbmRzIHRoYXQgd3JhcCBgdXYgcGlwIGNvbXBpbGVgLlxuICAgKlxuICAgKiBAc2NoZW1hIFBpcE9wdGlvbnMjY3VzdG9tLWNvbXBpbGUtY29tbWFuZFxuICAgKi9cbiAgcmVhZG9ubHkgY3VzdG9tQ29tcGlsZUNvbW1hbmQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFByZS1kZWZpbmVkIHN0YXRpYyBtZXRhZGF0YSBmb3IgZGVwZW5kZW5jaWVzIG9mIHRoZSBwcm9qZWN0IChkaXJlY3Qgb3IgdHJhbnNpdGl2ZSkuIFdoZW5cbiAgICogcHJvdmlkZWQsIGVuYWJsZXMgdGhlIHJlc29sdmVyIHRvIHVzZSB0aGUgc3BlY2lmaWVkIG1ldGFkYXRhIGluc3RlYWQgb2YgcXVlcnlpbmcgdGhlXG4gICAqIHJlZ2lzdHJ5IG9yIGJ1aWxkaW5nIHRoZSByZWxldmFudCBwYWNrYWdlIGZyb20gc291cmNlLlxuICAgKlxuICAgKiBNZXRhZGF0YSBzaG91bGQgYmUgcHJvdmlkZWQgaW4gYWRoZXJlbmNlIHdpdGggdGhlIFtNZXRhZGF0YSAyLjNdKGh0dHBzOi8vcGFja2FnaW5nLnB5dGhvbi5vcmcvZW4vbGF0ZXN0L3NwZWNpZmljYXRpb25zL2NvcmUtbWV0YWRhdGEvKVxuICAgKiBzdGFuZGFyZCwgdGhvdWdoIG9ubHkgdGhlIGZvbGxvd2luZyBmaWVsZHMgYXJlIHJlc3BlY3RlZDpcbiAgICpcbiAgICogLSBgbmFtZWA6IFRoZSBuYW1lIG9mIHRoZSBwYWNrYWdlLlxuICAgKiAtIChPcHRpb25hbCkgYHZlcnNpb25gOiBUaGUgdmVyc2lvbiBvZiB0aGUgcGFja2FnZS4gSWYgb21pdHRlZCwgdGhlIG1ldGFkYXRhIHdpbGwgYmUgYXBwbGllZFxuICAgKiB0byBhbGwgdmVyc2lvbnMgb2YgdGhlIHBhY2thZ2UuXG4gICAqIC0gKE9wdGlvbmFsKSBgcmVxdWlyZXMtZGlzdGA6IFRoZSBkZXBlbmRlbmNpZXMgb2YgdGhlIHBhY2thZ2UgKGUuZy4sIGB3ZXJremV1Zz49MC4xNGApLlxuICAgKiAtIChPcHRpb25hbCkgYHJlcXVpcmVzLXB5dGhvbmA6IFRoZSBQeXRob24gdmVyc2lvbiByZXF1aXJlZCBieSB0aGUgcGFja2FnZSAoZS5nLiwgYD49My4xMGApLlxuICAgKiAtIChPcHRpb25hbCkgYHByb3ZpZGVzLWV4dHJhYDogVGhlIGV4dHJhcyBwcm92aWRlZCBieSB0aGUgcGFja2FnZS5cbiAgICpcbiAgICogQHNjaGVtYSBQaXBPcHRpb25zI2RlcGVuZGVuY3ktbWV0YWRhdGFcbiAgICovXG4gIHJlYWRvbmx5IGRlcGVuZGVuY3lNZXRhZGF0YT86IFN0YXRpY01ldGFkYXRhW107XG5cbiAgLyoqXG4gICAqIEluY2x1ZGUgYC0tbm8tYmluYXJ5YCBhbmQgYC0tb25seS1iaW5hcnlgIGVudHJpZXMgaW4gdGhlIG91dHB1dCBmaWxlIGdlbmVyYXRlZCBieSBgdXYgcGlwIGNvbXBpbGVgLlxuICAgKlxuICAgKiBAc2NoZW1hIFBpcE9wdGlvbnMjZW1pdC1idWlsZC1vcHRpb25zXG4gICAqL1xuICByZWFkb25seSBlbWl0QnVpbGRPcHRpb25zPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSW5jbHVkZSBgLS1maW5kLWxpbmtzYCBlbnRyaWVzIGluIHRoZSBvdXRwdXQgZmlsZSBnZW5lcmF0ZWQgYnkgYHV2IHBpcCBjb21waWxlYC5cbiAgICpcbiAgICogQHNjaGVtYSBQaXBPcHRpb25zI2VtaXQtZmluZC1saW5rc1xuICAgKi9cbiAgcmVhZG9ubHkgZW1pdEZpbmRMaW5rcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEluY2x1ZGUgY29tbWVudCBhbm5vdGF0aW9ucyBpbmRpY2F0aW5nIHRoZSBpbmRleCB1c2VkIHRvIHJlc29sdmUgZWFjaCBwYWNrYWdlIChlLmcuLFxuICAgKiBgIyBmcm9tIGh0dHBzOi8vcHlwaS5vcmcvc2ltcGxlYCkuXG4gICAqXG4gICAqIEBzY2hlbWEgUGlwT3B0aW9ucyNlbWl0LWluZGV4LWFubm90YXRpb25cbiAgICovXG4gIHJlYWRvbmx5IGVtaXRJbmRleEFubm90YXRpb24/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJbmNsdWRlIGAtLWluZGV4LXVybGAgYW5kIGAtLWV4dHJhLWluZGV4LXVybGAgZW50cmllcyBpbiB0aGUgb3V0cHV0IGZpbGUgZ2VuZXJhdGVkIGJ5IGB1diBwaXAgY29tcGlsZWAuXG4gICAqXG4gICAqIEBzY2hlbWEgUGlwT3B0aW9ucyNlbWl0LWluZGV4LXVybFxuICAgKi9cbiAgcmVhZG9ubHkgZW1pdEluZGV4VXJsPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBlbWl0IGEgbWFya2VyIHN0cmluZyBpbmRpY2F0aW5nIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIHRoZSBzZXQgb2YgcGlubmVkXG4gICAqIGRlcGVuZGVuY2llcyBpcyB2YWxpZC5cbiAgICpcbiAgICogVGhlIHBpbm5lZCBkZXBlbmRlbmNpZXMgbWF5IGJlIHZhbGlkIGV2ZW4gd2hlbiB0aGUgbWFya2VyIGV4cHJlc3Npb24gaXNcbiAgICogZmFsc2UsIGJ1dCB3aGVuIHRoZSBleHByZXNzaW9uIGlzIHRydWUsIHRoZSByZXF1aXJlbWVudHMgYXJlIGtub3duIHRvXG4gICAqIGJlIGNvcnJlY3QuXG4gICAqXG4gICAqIEBzY2hlbWEgUGlwT3B0aW9ucyNlbWl0LW1hcmtlci1leHByZXNzaW9uXG4gICAqL1xuICByZWFkb25seSBlbWl0TWFya2VyRXhwcmVzc2lvbj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIExpbWl0IGNhbmRpZGF0ZSBwYWNrYWdlcyB0byB0aG9zZSB0aGF0IHdlcmUgdXBsb2FkZWQgcHJpb3IgdG8gYSBnaXZlbiBwb2ludCBpbiB0aW1lLlxuICAgKlxuICAgKiBUaGUgZGF0ZSBpcyBjb21wYXJlZCBhZ2FpbnN0IHRoZSB1cGxvYWQgdGltZSBvZiBlYWNoIGluZGl2aWR1YWwgZGlzdHJpYnV0aW9uIGFydGlmYWN0XG4gICAqIChpLmUuLCB3aGVuIGVhY2ggZmlsZSB3YXMgdXBsb2FkZWQgdG8gdGhlIHBhY2thZ2UgaW5kZXgpLCBub3QgdGhlIHJlbGVhc2UgZGF0ZSBvZiB0aGVcbiAgICogcGFja2FnZSB2ZXJzaW9uLlxuICAgKlxuICAgKiBBY2NlcHRzIFJGQyAzMzM5IHRpbWVzdGFtcHMgKGUuZy4sIGAyMDA2LTEyLTAyVDAyOjA3OjQzWmApLCBhIFwiZnJpZW5kbHlcIiBkdXJhdGlvbiAoZS5nLixcbiAgICogYDI0IGhvdXJzYCwgYDEgd2Vla2AsIGAzMCBkYXlzYCksIG9yIGFuIElTTyA4NjAxIGR1cmF0aW9uIChlLmcuLCBgUFQyNEhgLCBgUDdEYCwgYFAzMERgKS5cbiAgICpcbiAgICogRHVyYXRpb25zIGRvIG5vdCByZXNwZWN0IHNlbWFudGljcyBvZiB0aGUgbG9jYWwgdGltZSB6b25lIGFuZCBhcmUgYWx3YXlzIHJlc29sdmVkIHRvIGEgZml4ZWRcbiAgICogbnVtYmVyIG9mIHNlY29uZHMgYXNzdW1pbmcgdGhhdCBhIGRheSBpcyAyNCBob3VycyAoZS5nLiwgRFNUIHRyYW5zaXRpb25zIGFyZSBpZ25vcmVkKS5cbiAgICogQ2FsZW5kYXIgdW5pdHMgc3VjaCBhcyBtb250aHMgYW5kIHllYXJzIGFyZSBub3QgYWxsb3dlZC5cbiAgICpcbiAgICogU2V0IHRvIGBmYWxzZWAgdG8gZGlzYWJsZSBgZXhjbHVkZS1uZXdlcmAuXG4gICAqXG4gICAqIEBzY2hlbWEgUGlwT3B0aW9ucyNleGNsdWRlLW5ld2VyXG4gICAqL1xuICByZWFkb25seSBleGNsdWRlTmV3ZXI/OiBFeGNsdWRlTmV3ZXJPdmVycmlkZTtcblxuICAvKipcbiAgICogTGltaXQgY2FuZGlkYXRlIHBhY2thZ2VzIGZvciBzcGVjaWZpYyBwYWNrYWdlcyB0byB0aG9zZSB0aGF0IHdlcmUgdXBsb2FkZWQgcHJpb3IgdG8gdGhlIGdpdmVuIGRhdGUuXG4gICAqXG4gICAqIEFjY2VwdHMgYSBkaWN0aW9uYXJ5IGZvcm1hdCBvZiBgUEFDS0FHRSA9IFwiREFURVwiYCBwYWlycywgd2hlcmUgYERBVEVgIGlzIGFuIFJGQyAzMzM5XG4gICAqIHRpbWVzdGFtcCAoZS5nLiwgYDIwMDYtMTItMDJUMDI6MDc6NDNaYCksIGEgXCJmcmllbmRseVwiIGR1cmF0aW9uIChlLmcuLCBgMjQgaG91cnNgLCBgMSB3ZWVrYCxcbiAgICogYDMwIGRheXNgKSwgb3IgYSBJU08gODYwMSBkdXJhdGlvbiAoZS5nLiwgYFBUMjRIYCwgYFA3RGAsIGBQMzBEYCkuXG4gICAqXG4gICAqIER1cmF0aW9ucyBkbyBub3QgcmVzcGVjdCBzZW1hbnRpY3Mgb2YgdGhlIGxvY2FsIHRpbWUgem9uZSBhbmQgYXJlIGFsd2F5cyByZXNvbHZlZCB0byBhIGZpeGVkXG4gICAqIG51bWJlciBvZiBzZWNvbmRzIGFzc3VtaW5nIHRoYXQgYSBkYXkgaXMgMjQgaG91cnMgKGUuZy4sIERTVCB0cmFuc2l0aW9ucyBhcmUgaWdub3JlZCkuXG4gICAqIENhbGVuZGFyIHVuaXRzIHN1Y2ggYXMgbW9udGhzIGFuZCB5ZWFycyBhcmUgbm90IGFsbG93ZWQuXG4gICAqXG4gICAqIFNldCBhIHBhY2thZ2UgdG8gYGZhbHNlYCB0byBleGVtcHQgaXQgZnJvbSB0aGUgZ2xvYmFsIFtgZXhjbHVkZS1uZXdlcmBdKCNleGNsdWRlLW5ld2VyKVxuICAgKiBjb25zdHJhaW50IGVudGlyZWx5LlxuICAgKlxuICAgKiBAc2NoZW1hIFBpcE9wdGlvbnMjZXhjbHVkZS1uZXdlci1wYWNrYWdlXG4gICAqL1xuICByZWFkb25seSBleGNsdWRlTmV3ZXJQYWNrYWdlPzogeyBba2V5OiBzdHJpbmddOiBFeGNsdWRlTmV3ZXJPdmVycmlkZSB9O1xuXG4gIC8qKlxuICAgKiBJbmNsdWRlIG9wdGlvbmFsIGRlcGVuZGVuY2llcyBmcm9tIHRoZSBzcGVjaWZpZWQgZXh0cmE7IG1heSBiZSBwcm92aWRlZCBtb3JlIHRoYW4gb25jZS5cbiAgICpcbiAgICogT25seSBhcHBsaWVzIHRvIGBweXByb2plY3QudG9tbGAsIGBzZXR1cC5weWAsIGFuZCBgc2V0dXAuY2ZnYCBzb3VyY2VzLlxuICAgKlxuICAgKiBAc2NoZW1hIFBpcE9wdGlvbnMjZXh0cmFcbiAgICovXG4gIHJlYWRvbmx5IGV4dHJhPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEFkZGl0aW9uYWwgYnVpbGQgZGVwZW5kZW5jaWVzIGZvciBwYWNrYWdlcy5cbiAgICpcbiAgICogVGhpcyBhbGxvd3MgZXh0ZW5kaW5nIHRoZSBQRVAgNTE3IGJ1aWxkIGVudmlyb25tZW50IGZvciB0aGUgcHJvamVjdCdzIGRlcGVuZGVuY2llcyB3aXRoXG4gICAqIGFkZGl0aW9uYWwgcGFja2FnZXMuIFRoaXMgaXMgdXNlZnVsIGZvciBwYWNrYWdlcyB0aGF0IGFzc3VtZSB0aGUgcHJlc2VuY2Ugb2YgcGFja2FnZXMgbGlrZVxuICAgKiBgcGlwYCwgYW5kIGRvIG5vdCBkZWNsYXJlIHRoZW0gYXMgYnVpbGQgZGVwZW5kZW5jaWVzLlxuICAgKlxuICAgKiBAc2NoZW1hIFBpcE9wdGlvbnMjZXh0cmEtYnVpbGQtZGVwZW5kZW5jaWVzXG4gICAqL1xuICByZWFkb25seSBleHRyYUJ1aWxkRGVwZW5kZW5jaWVzPzogeyBba2V5OiBzdHJpbmddOiBhbnlbXSB9O1xuXG4gIC8qKlxuICAgKiBFeHRyYSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gc2V0IHdoZW4gYnVpbGRpbmcgY2VydGFpbiBwYWNrYWdlcy5cbiAgICpcbiAgICogRW52aXJvbm1lbnQgdmFyaWFibGVzIHdpbGwgYmUgYWRkZWQgdG8gdGhlIGVudmlyb25tZW50IHdoZW4gYnVpbGRpbmcgdGhlXG4gICAqIHNwZWNpZmllZCBwYWNrYWdlcy5cbiAgICpcbiAgICogQHNjaGVtYSBQaXBPcHRpb25zI2V4dHJhLWJ1aWxkLXZhcmlhYmxlc1xuICAgKi9cbiAgcmVhZG9ubHkgZXh0cmFCdWlsZFZhcmlhYmxlcz86IHsgW2tleTogc3RyaW5nXTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSB9O1xuXG4gIC8qKlxuICAgKiBFeHRyYSBVUkxzIG9mIHBhY2thZ2UgaW5kZXhlcyB0byB1c2UsIGluIGFkZGl0aW9uIHRvIGAtLWluZGV4LXVybGAuXG4gICAqXG4gICAqIEFjY2VwdHMgZWl0aGVyIGEgcmVwb3NpdG9yeSBjb21wbGlhbnQgd2l0aCBbUEVQIDUwM10oaHR0cHM6Ly9wZXBzLnB5dGhvbi5vcmcvcGVwLTA1MDMvKVxuICAgKiAodGhlIHNpbXBsZSByZXBvc2l0b3J5IEFQSSksIG9yIGEgbG9jYWwgZGlyZWN0b3J5IGxhaWQgb3V0IGluIHRoZSBzYW1lIGZvcm1hdC5cbiAgICpcbiAgICogQWxsIGluZGV4ZXMgcHJvdmlkZWQgdmlhIHRoaXMgZmxhZyB0YWtlIHByaW9yaXR5IG92ZXIgdGhlIGluZGV4IHNwZWNpZmllZCBieVxuICAgKiBbYGluZGV4X3VybGBdKCNpbmRleC11cmwpLiBXaGVuIG11bHRpcGxlIGluZGV4ZXMgYXJlIHByb3ZpZGVkLCBlYXJsaWVyIHZhbHVlcyB0YWtlIHByaW9yaXR5LlxuICAgKlxuICAgKiBUbyBjb250cm9sIHV2J3MgcmVzb2x1dGlvbiBzdHJhdGVneSB3aGVuIG11bHRpcGxlIGluZGV4ZXMgYXJlIHByZXNlbnQsIHNlZVxuICAgKiBbYGluZGV4X3N0cmF0ZWd5YF0oI2luZGV4LXN0cmF0ZWd5KS5cbiAgICpcbiAgICogQHNjaGVtYSBQaXBPcHRpb25zI2V4dHJhLWluZGV4LXVybFxuICAgKi9cbiAgcmVhZG9ubHkgZXh0cmFJbmRleFVybD86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBMb2NhdGlvbnMgdG8gc2VhcmNoIGZvciBjYW5kaWRhdGUgZGlzdHJpYnV0aW9ucywgaW4gYWRkaXRpb24gdG8gdGhvc2UgZm91bmQgaW4gdGhlIHJlZ2lzdHJ5XG4gICAqIGluZGV4ZXMuXG4gICAqXG4gICAqIElmIGEgcGF0aCwgdGhlIHRhcmdldCBtdXN0IGJlIGEgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgcGFja2FnZXMgYXMgd2hlZWwgZmlsZXMgKGAud2hsYCkgb3JcbiAgICogc291cmNlIGRpc3RyaWJ1dGlvbnMgKGUuZy4sIGAudGFyLmd6YCBvciBgLnppcGApIGF0IHRoZSB0b3AgbGV2ZWwuXG4gICAqXG4gICAqIElmIGEgVVJMLCB0aGUgcGFnZSBtdXN0IGNvbnRhaW4gYSBmbGF0IGxpc3Qgb2YgbGlua3MgdG8gcGFja2FnZSBmaWxlcyBhZGhlcmluZyB0byB0aGVcbiAgICogZm9ybWF0cyBkZXNjcmliZWQgYWJvdmUuXG4gICAqXG4gICAqIEBzY2hlbWEgUGlwT3B0aW9ucyNmaW5kLWxpbmtzXG4gICAqL1xuICByZWFkb25seSBmaW5kTGlua3M/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIHN0cmF0ZWd5IHRvIHVzZSB3aGVuIHNlbGVjdGluZyBtdWx0aXBsZSB2ZXJzaW9ucyBvZiBhIGdpdmVuIHBhY2thZ2UgYWNyb3NzIFB5dGhvblxuICAgKiB2ZXJzaW9ucyBhbmQgcGxhdGZvcm1zLlxuICAgKlxuICAgKiBCeSBkZWZhdWx0LCB1diB3aWxsIG9wdGltaXplIGZvciBzZWxlY3RpbmcgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIGVhY2ggcGFja2FnZSBmb3IgZWFjaFxuICAgKiBzdXBwb3J0ZWQgUHl0aG9uIHZlcnNpb24gKGByZXF1aXJlcy1weXRob25gKSwgd2hpbGUgbWluaW1pemluZyB0aGUgbnVtYmVyIG9mIHNlbGVjdGVkXG4gICAqIHZlcnNpb25zIGFjcm9zcyBwbGF0Zm9ybXMuXG4gICAqXG4gICAqIFVuZGVyIGBmZXdlc3RgLCB1diB3aWxsIG1pbmltaXplIHRoZSBudW1iZXIgb2Ygc2VsZWN0ZWQgdmVyc2lvbnMgZm9yIGVhY2ggcGFja2FnZSxcbiAgICogcHJlZmVycmluZyBvbGRlciB2ZXJzaW9ucyB0aGF0IGFyZSBjb21wYXRpYmxlIHdpdGggYSB3aWRlciByYW5nZSBvZiBzdXBwb3J0ZWQgUHl0aG9uXG4gICAqIHZlcnNpb25zIG9yIHBsYXRmb3Jtcy5cbiAgICpcbiAgICogQHNjaGVtYSBQaXBPcHRpb25zI2Zvcmstc3RyYXRlZ3lcbiAgICovXG4gIHJlYWRvbmx5IGZvcmtTdHJhdGVneT86IEZvcmtTdHJhdGVneTtcblxuICAvKipcbiAgICogSW5jbHVkZSBkaXN0cmlidXRpb24gaGFzaGVzIGluIHRoZSBvdXRwdXQgZmlsZS5cbiAgICpcbiAgICogQHNjaGVtYSBQaXBPcHRpb25zI2dlbmVyYXRlLWhhc2hlc1xuICAgKi9cbiAgcmVhZG9ubHkgZ2VuZXJhdGVIYXNoZXM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJbmNsdWRlIHRoZSBmb2xsb3dpbmcgZGVwZW5kZW5jeSBncm91cHMuXG4gICAqXG4gICAqIEBzY2hlbWEgUGlwT3B0aW9ucyNncm91cFxuICAgKi9cbiAgcmVhZG9ubHkgZ3JvdXA/OiBQaXBHcm91cE5hbWVbXTtcblxuICAvKipcbiAgICogVGhlIHN0cmF0ZWd5IHRvIHVzZSB3aGVuIHJlc29sdmluZyBhZ2FpbnN0IG11bHRpcGxlIGluZGV4IFVSTHMuXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIHV2IHdpbGwgc3RvcCBhdCB0aGUgZmlyc3QgaW5kZXggb24gd2hpY2ggYSBnaXZlbiBwYWNrYWdlIGlzIGF2YWlsYWJsZSwgYW5kXG4gICAqIGxpbWl0IHJlc29sdXRpb25zIHRvIHRob3NlIHByZXNlbnQgb24gdGhhdCBmaXJzdCBpbmRleCAoYGZpcnN0LWluZGV4YCkuIFRoaXMgcHJldmVudHNcbiAgICogXCJkZXBlbmRlbmN5IGNvbmZ1c2lvblwiIGF0dGFja3MsIHdoZXJlYnkgYW4gYXR0YWNrZXIgY2FuIHVwbG9hZCBhIG1hbGljaW91cyBwYWNrYWdlIHVuZGVyIHRoZVxuICAgKiBzYW1lIG5hbWUgdG8gYW4gYWx0ZXJuYXRlIGluZGV4LlxuICAgKlxuICAgKiBAc2NoZW1hIFBpcE9wdGlvbnMjaW5kZXgtc3RyYXRlZ3lcbiAgICovXG4gIHJlYWRvbmx5IGluZGV4U3RyYXRlZ3k/OiBJbmRleFN0cmF0ZWd5O1xuXG4gIC8qKlxuICAgKiBUaGUgVVJMIG9mIHRoZSBQeXRob24gcGFja2FnZSBpbmRleCAoYnkgZGVmYXVsdDogPGh0dHBzOi8vcHlwaS5vcmcvc2ltcGxlPikuXG4gICAqXG4gICAqIEFjY2VwdHMgZWl0aGVyIGEgcmVwb3NpdG9yeSBjb21wbGlhbnQgd2l0aCBbUEVQIDUwM10oaHR0cHM6Ly9wZXBzLnB5dGhvbi5vcmcvcGVwLTA1MDMvKVxuICAgKiAodGhlIHNpbXBsZSByZXBvc2l0b3J5IEFQSSksIG9yIGEgbG9jYWwgZGlyZWN0b3J5IGxhaWQgb3V0IGluIHRoZSBzYW1lIGZvcm1hdC5cbiAgICpcbiAgICogVGhlIGluZGV4IHByb3ZpZGVkIGJ5IHRoaXMgc2V0dGluZyBpcyBnaXZlbiBsb3dlciBwcmlvcml0eSB0aGFuIGFueSBpbmRleGVzIHNwZWNpZmllZCB2aWFcbiAgICogW2BleHRyYV9pbmRleF91cmxgXSgjZXh0cmEtaW5kZXgtdXJsKS5cbiAgICpcbiAgICogQHNjaGVtYSBQaXBPcHRpb25zI2luZGV4LXVybFxuICAgKi9cbiAgcmVhZG9ubHkgaW5kZXhVcmw/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEF0dGVtcHQgdG8gdXNlIGBrZXlyaW5nYCBmb3IgYXV0aGVudGljYXRpb24gZm9yIGluZGV4IFVSTHMuXG4gICAqXG4gICAqIEF0IHByZXNlbnQsIG9ubHkgYC0ta2V5cmluZy1wcm92aWRlciBzdWJwcm9jZXNzYCBpcyBzdXBwb3J0ZWQsIHdoaWNoIGNvbmZpZ3VyZXMgdXYgdG9cbiAgICogdXNlIHRoZSBga2V5cmluZ2AgQ0xJIHRvIGhhbmRsZSBhdXRoZW50aWNhdGlvbi5cbiAgICpcbiAgICogQHNjaGVtYSBQaXBPcHRpb25zI2tleXJpbmctcHJvdmlkZXJcbiAgICovXG4gIHJlYWRvbmx5IGtleXJpbmdQcm92aWRlcj86IEtleXJpbmdQcm92aWRlclR5cGU7XG5cbiAgLyoqXG4gICAqIFRoZSBtZXRob2QgdG8gdXNlIHdoZW4gaW5zdGFsbGluZyBwYWNrYWdlcyBmcm9tIHRoZSBnbG9iYWwgY2FjaGUuXG4gICAqXG4gICAqIERlZmF1bHRzIHRvIGBjbG9uZWAgKGFsc28ga25vd24gYXMgQ29weS1vbi1Xcml0ZSkgb24gbWFjT1MgYW5kIExpbnV4LCBhbmQgYGhhcmRsaW5rYCBvblxuICAgKiBXaW5kb3dzLlxuICAgKlxuICAgKiBXQVJOSU5HOiBUaGUgdXNlIG9mIHN5bWxpbmsgbGluayBtb2RlIGlzIGRpc2NvdXJhZ2VkLCBhcyB0aGV5IGNyZWF0ZSB0aWdodCBjb3VwbGluZyBiZXR3ZWVuXG4gICAqIHRoZSBjYWNoZSBhbmQgdGhlIHRhcmdldCBlbnZpcm9ubWVudC4gRm9yIGV4YW1wbGUsIGNsZWFyaW5nIHRoZSBjYWNoZSAoYHV2IGNhY2hlIGNsZWFuYClcbiAgICogd2lsbCBicmVhayBhbGwgaW5zdGFsbGVkIHBhY2thZ2VzIGJ5IHdheSBvZiByZW1vdmluZyB0aGUgdW5kZXJseWluZyBzb3VyY2UgZmlsZXMuIFVzZVxuICAgKiBzeW1saW5rcyB3aXRoIGNhdXRpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IGNsb25lYCAoYWxzbyBrbm93biBhcyBDb3B5LW9uLVdyaXRlKSBvbiBtYWNPUyBhbmQgTGludXgsIGFuZCBgaGFyZGxpbmtgIG9uXG4gICAqIEBzY2hlbWEgUGlwT3B0aW9ucyNsaW5rLW1vZGVcbiAgICovXG4gIHJlYWRvbmx5IGxpbmtNb2RlPzogTGlua01vZGU7XG5cbiAgLyoqXG4gICAqIEV4Y2x1ZGUgY29tbWVudCBhbm5vdGF0aW9ucyBpbmRpY2F0aW5nIHRoZSBzb3VyY2Ugb2YgZWFjaCBwYWNrYWdlIGZyb20gdGhlIG91dHB1dCBmaWxlXG4gICAqIGdlbmVyYXRlZCBieSBgdXYgcGlwIGNvbXBpbGVgLlxuICAgKlxuICAgKiBAc2NoZW1hIFBpcE9wdGlvbnMjbm8tYW5ub3RhdGVcbiAgICovXG4gIHJlYWRvbmx5IG5vQW5ub3RhdGU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBEb24ndCBpbnN0YWxsIHByZS1idWlsdCB3aGVlbHMuXG4gICAqXG4gICAqIFRoZSBnaXZlbiBwYWNrYWdlcyB3aWxsIGJlIGJ1aWx0IGFuZCBpbnN0YWxsZWQgZnJvbSBzb3VyY2UuIFRoZSByZXNvbHZlciB3aWxsIHN0aWxsIHVzZVxuICAgKiBwcmUtYnVpbHQgd2hlZWxzIHRvIGV4dHJhY3QgcGFja2FnZSBtZXRhZGF0YSwgaWYgYXZhaWxhYmxlLlxuICAgKlxuICAgKiBNdWx0aXBsZSBwYWNrYWdlcyBtYXkgYmUgcHJvdmlkZWQuIERpc2FibGUgYmluYXJpZXMgZm9yIGFsbCBwYWNrYWdlcyB3aXRoIGA6YWxsOmAuXG4gICAqIENsZWFyIHByZXZpb3VzbHkgc3BlY2lmaWVkIHBhY2thZ2VzIHdpdGggYDpub25lOmAuXG4gICAqXG4gICAqIEBzY2hlbWEgUGlwT3B0aW9ucyNuby1iaW5hcnlcbiAgICovXG4gIHJlYWRvbmx5IG5vQmluYXJ5Pzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIERvbid0IGJ1aWxkIHNvdXJjZSBkaXN0cmlidXRpb25zLlxuICAgKlxuICAgKiBXaGVuIGVuYWJsZWQsIHV2IHdpbGwgcmV1c2UgY2FjaGVkIHdoZWVscyBmcm9tIHByZXZpb3VzbHkgYnVpbHQgc291cmNlIGRpc3RyaWJ1dGlvbnMsIGJ1dFxuICAgKiBvcGVyYXRpb25zIHRoYXQgcmVxdWlyZSBidWlsZGluZyBhIHNvdXJjZSBkaXN0cmlidXRpb24gd2lsbCBleGl0IHdpdGggYW4gZXJyb3IuIHV2IG1heVxuICAgKiBzdGlsbCBidWlsZCBlZGl0YWJsZSByZXF1aXJlbWVudHMsIGFuZCB0aGVpciBidWlsZCBiYWNrZW5kcyBtYXkgcnVuIGFyYml0cmFyeSBQeXRob24gY29kZS5cbiAgICpcbiAgICogQWxpYXMgZm9yIGAtLW9ubHktYmluYXJ5IDphbGw6YC5cbiAgICpcbiAgICogQHNjaGVtYSBQaXBPcHRpb25zI25vLWJ1aWxkXG4gICAqL1xuICByZWFkb25seSBub0J1aWxkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRGlzYWJsZSBpc29sYXRpb24gd2hlbiBidWlsZGluZyBzb3VyY2UgZGlzdHJpYnV0aW9ucy5cbiAgICpcbiAgICogQXNzdW1lcyB0aGF0IGJ1aWxkIGRlcGVuZGVuY2llcyBzcGVjaWZpZWQgYnkgW1BFUCA1MThdKGh0dHBzOi8vcGVwcy5weXRob24ub3JnL3BlcC0wNTE4LylcbiAgICogYXJlIGFscmVhZHkgaW5zdGFsbGVkLlxuICAgKlxuICAgKiBAc2NoZW1hIFBpcE9wdGlvbnMjbm8tYnVpbGQtaXNvbGF0aW9uXG4gICAqL1xuICByZWFkb25seSBub0J1aWxkSXNvbGF0aW9uPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRGlzYWJsZSBpc29sYXRpb24gd2hlbiBidWlsZGluZyBzb3VyY2UgZGlzdHJpYnV0aW9ucyBmb3IgYSBzcGVjaWZpYyBwYWNrYWdlLlxuICAgKlxuICAgKiBBc3N1bWVzIHRoYXQgdGhlIHBhY2thZ2VzJyBidWlsZCBkZXBlbmRlbmNpZXMgc3BlY2lmaWVkIGJ5IFtQRVAgNTE4XShodHRwczovL3BlcHMucHl0aG9uLm9yZy9wZXAtMDUxOC8pXG4gICAqIGFyZSBhbHJlYWR5IGluc3RhbGxlZC5cbiAgICpcbiAgICogQHNjaGVtYSBQaXBPcHRpb25zI25vLWJ1aWxkLWlzb2xhdGlvbi1wYWNrYWdlXG4gICAqL1xuICByZWFkb25seSBub0J1aWxkSXNvbGF0aW9uUGFja2FnZT86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBJZ25vcmUgcGFja2FnZSBkZXBlbmRlbmNpZXMsIGluc3RlYWQgb25seSBhZGQgdGhvc2UgcGFja2FnZXMgZXhwbGljaXRseSBsaXN0ZWRcbiAgICogb24gdGhlIGNvbW1hbmQgbGluZSB0byB0aGUgcmVzdWx0aW5nIHJlcXVpcmVtZW50cyBmaWxlLlxuICAgKlxuICAgKiBAc2NoZW1hIFBpcE9wdGlvbnMjbm8tZGVwc1xuICAgKi9cbiAgcmVhZG9ubHkgbm9EZXBzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogU3BlY2lmeSBhIHBhY2thZ2UgdG8gb21pdCBmcm9tIHRoZSBvdXRwdXQgcmVzb2x1dGlvbi4gSXRzIGRlcGVuZGVuY2llcyB3aWxsIHN0aWxsIGJlXG4gICAqIGluY2x1ZGVkIGluIHRoZSByZXNvbHV0aW9uLiBFcXVpdmFsZW50IHRvIHBpcC1jb21waWxlJ3MgYC0tdW5zYWZlLXBhY2thZ2VgIG9wdGlvbi5cbiAgICpcbiAgICogQHNjaGVtYSBQaXBPcHRpb25zI25vLWVtaXQtcGFja2FnZVxuICAgKi9cbiAgcmVhZG9ubHkgbm9FbWl0UGFja2FnZT86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBFeGNsdWRlIHRoZSBzcGVjaWZpZWQgb3B0aW9uYWwgZGVwZW5kZW5jaWVzIGlmIGBhbGwtZXh0cmFzYCBpcyBzdXBwbGllZC5cbiAgICpcbiAgICogQHNjaGVtYSBQaXBPcHRpb25zI25vLWV4dHJhXG4gICAqL1xuICByZWFkb25seSBub0V4dHJhPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEV4Y2x1ZGUgdGhlIGNvbW1lbnQgaGVhZGVyIGF0IHRoZSB0b3Agb2Ygb3V0cHV0IGZpbGUgZ2VuZXJhdGVkIGJ5IGB1diBwaXAgY29tcGlsZWAuXG4gICAqXG4gICAqIEBzY2hlbWEgUGlwT3B0aW9ucyNuby1oZWFkZXJcbiAgICovXG4gIHJlYWRvbmx5IG5vSGVhZGVyPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSWdub3JlIGFsbCByZWdpc3RyeSBpbmRleGVzIChlLmcuLCBQeVBJKSwgaW5zdGVhZCByZWx5aW5nIG9uIGRpcmVjdCBVUkwgZGVwZW5kZW5jaWVzIGFuZFxuICAgKiB0aG9zZSBwcm92aWRlZCB2aWEgYC0tZmluZC1saW5rc2AuXG4gICAqXG4gICAqIEBzY2hlbWEgUGlwT3B0aW9ucyNuby1pbmRleFxuICAgKi9cbiAgcmVhZG9ubHkgbm9JbmRleD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIElnbm9yZSB0aGUgYHRvb2wudXYuc291cmNlc2AgdGFibGUgd2hlbiByZXNvbHZpbmcgZGVwZW5kZW5jaWVzLiBVc2VkIHRvIGxvY2sgYWdhaW5zdCB0aGVcbiAgICogc3RhbmRhcmRzLWNvbXBsaWFudCwgcHVibGlzaGFibGUgcGFja2FnZSBtZXRhZGF0YSwgYXMgb3Bwb3NlZCB0byB1c2luZyBhbnkgbG9jYWwgb3IgR2l0XG4gICAqIHNvdXJjZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgUGlwT3B0aW9ucyNuby1zb3VyY2VzXG4gICAqL1xuICByZWFkb25seSBub1NvdXJjZXM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJZ25vcmUgYHRvb2wudXYuc291cmNlc2AgZm9yIHRoZSBzcGVjaWZpZWQgcGFja2FnZXMuXG4gICAqXG4gICAqIEBzY2hlbWEgUGlwT3B0aW9ucyNuby1zb3VyY2VzLXBhY2thZ2VcbiAgICovXG4gIHJlYWRvbmx5IG5vU291cmNlc1BhY2thZ2U/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogSW5jbHVkZSBleHRyYXMgaW4gdGhlIG91dHB1dCBmaWxlLlxuICAgKlxuICAgKiBCeSBkZWZhdWx0LCB1diBzdHJpcHMgZXh0cmFzLCBhcyBhbnkgcGFja2FnZXMgcHVsbGVkIGluIGJ5IHRoZSBleHRyYXMgYXJlIGFscmVhZHkgaW5jbHVkZWRcbiAgICogYXMgZGVwZW5kZW5jaWVzIGluIHRoZSBvdXRwdXQgZmlsZSBkaXJlY3RseS4gRnVydGhlciwgb3V0cHV0IGZpbGVzIGdlbmVyYXRlZCB3aXRoXG4gICAqIGAtLW5vLXN0cmlwLWV4dHJhc2AgY2Fubm90IGJlIHVzZWQgYXMgY29uc3RyYWludHMgZmlsZXMgaW4gYGluc3RhbGxgIGFuZCBgc3luY2AgaW52b2NhdGlvbnMuXG4gICAqXG4gICAqIEBzY2hlbWEgUGlwT3B0aW9ucyNuby1zdHJpcC1leHRyYXNcbiAgICovXG4gIHJlYWRvbmx5IG5vU3RyaXBFeHRyYXM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJbmNsdWRlIGVudmlyb25tZW50IG1hcmtlcnMgaW4gdGhlIG91dHB1dCBmaWxlIGdlbmVyYXRlZCBieSBgdXYgcGlwIGNvbXBpbGVgLlxuICAgKlxuICAgKiBCeSBkZWZhdWx0LCB1diBzdHJpcHMgZW52aXJvbm1lbnQgbWFya2VycywgYXMgdGhlIHJlc29sdXRpb24gZ2VuZXJhdGVkIGJ5IGBjb21waWxlYCBpc1xuICAgKiBvbmx5IGd1YXJhbnRlZWQgdG8gYmUgY29ycmVjdCBmb3IgdGhlIHRhcmdldCBlbnZpcm9ubWVudC5cbiAgICpcbiAgICogQHNjaGVtYSBQaXBPcHRpb25zI25vLXN0cmlwLW1hcmtlcnNcbiAgICovXG4gIHJlYWRvbmx5IG5vU3RyaXBNYXJrZXJzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogT25seSB1c2UgcHJlLWJ1aWx0IHdoZWVsczsgZG9uJ3QgYnVpbGQgc291cmNlIGRpc3RyaWJ1dGlvbnMuXG4gICAqXG4gICAqIFdoZW4gZW5hYmxlZCwgdXYgd2lsbCByZXVzZSBjYWNoZWQgd2hlZWxzIGZyb20gcHJldmlvdXNseSBidWlsdCBzb3VyY2UgZGlzdHJpYnV0aW9ucywgYnV0XG4gICAqIG9wZXJhdGlvbnMgdGhhdCByZXF1aXJlIGJ1aWxkaW5nIGEgc291cmNlIGRpc3RyaWJ1dGlvbiBmb3IgdGhlIGdpdmVuIHBhY2thZ2VzIHdpbGwgZXhpdFxuICAgKiB3aXRoIGFuIGVycm9yLiB1diBtYXkgc3RpbGwgYnVpbGQgZWRpdGFibGUgcmVxdWlyZW1lbnRzLCBhbmQgdGhlaXIgYnVpbGQgYmFja2VuZHMgbWF5IHJ1blxuICAgKiBhcmJpdHJhcnkgUHl0aG9uIGNvZGUuXG4gICAqXG4gICAqIE11bHRpcGxlIHBhY2thZ2VzIG1heSBiZSBwcm92aWRlZC4gRGlzYWJsZSBiaW5hcmllcyBmb3IgYWxsIHBhY2thZ2VzIHdpdGggYDphbGw6YC5cbiAgICogQ2xlYXIgcHJldmlvdXNseSBzcGVjaWZpZWQgcGFja2FnZXMgd2l0aCBgOm5vbmU6YC5cbiAgICpcbiAgICogQHNjaGVtYSBQaXBPcHRpb25zI29ubHktYmluYXJ5XG4gICAqL1xuICByZWFkb25seSBvbmx5QmluYXJ5Pzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFdyaXRlIHRoZSByZXF1aXJlbWVudHMgZ2VuZXJhdGVkIGJ5IGB1diBwaXAgY29tcGlsZWAgdG8gdGhlIGdpdmVuIGByZXF1aXJlbWVudHMudHh0YCBmaWxlLlxuICAgKlxuICAgKiBJZiB0aGUgZmlsZSBhbHJlYWR5IGV4aXN0cywgdGhlIGV4aXN0aW5nIHZlcnNpb25zIHdpbGwgYmUgcHJlZmVycmVkIHdoZW4gcmVzb2x2aW5nXG4gICAqIGRlcGVuZGVuY2llcywgdW5sZXNzIGAtLXVwZ3JhZGVgIGlzIGFsc28gc3BlY2lmaWVkLlxuICAgKlxuICAgKiBAc2NoZW1hIFBpcE9wdGlvbnMjb3V0cHV0LWZpbGVcbiAgICovXG4gIHJlYWRvbmx5IG91dHB1dEZpbGU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEluc3RhbGwgcGFja2FnZXMgaW50byBgbGliYCwgYGJpbmAsIGFuZCBvdGhlciB0b3AtbGV2ZWwgZm9sZGVycyB1bmRlciB0aGUgc3BlY2lmaWVkXG4gICAqIGRpcmVjdG9yeSwgYXMgaWYgYSB2aXJ0dWFsIGVudmlyb25tZW50IHdlcmUgcHJlc2VudCBhdCB0aGF0IGxvY2F0aW9uLlxuICAgKlxuICAgKiBJbiBnZW5lcmFsLCBwcmVmZXIgdGhlIHVzZSBvZiBgLS1weXRob25gIHRvIGluc3RhbGwgaW50byBhbiBhbHRlcm5hdGUgZW52aXJvbm1lbnQsIGFzXG4gICAqIHNjcmlwdHMgYW5kIG90aGVyIGFydGlmYWN0cyBpbnN0YWxsZWQgdmlhIGAtLXByZWZpeGAgd2lsbCByZWZlcmVuY2UgdGhlIGluc3RhbGxpbmdcbiAgICogaW50ZXJwcmV0ZXIsIHJhdGhlciB0aGFuIGFueSBpbnRlcnByZXRlciBhZGRlZCB0byB0aGUgYC0tcHJlZml4YCBkaXJlY3RvcnksIHJlbmRlcmluZyB0aGVtXG4gICAqIG5vbi1wb3J0YWJsZS5cbiAgICpcbiAgICogQHNjaGVtYSBQaXBPcHRpb25zI3ByZWZpeFxuICAgKi9cbiAgcmVhZG9ubHkgcHJlZml4Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgc3RyYXRlZ3kgdG8gdXNlIHdoZW4gY29uc2lkZXJpbmcgcHJlLXJlbGVhc2UgdmVyc2lvbnMuXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIHV2IHdpbGwgYWNjZXB0IHByZS1yZWxlYXNlcyBmb3IgcGFja2FnZXMgdGhhdCBfb25seV8gcHVibGlzaCBwcmUtcmVsZWFzZXMsXG4gICAqIGFsb25nIHdpdGggZmlyc3QtcGFydHkgcmVxdWlyZW1lbnRzIHRoYXQgY29udGFpbiBhbiBleHBsaWNpdCBwcmUtcmVsZWFzZSBtYXJrZXIgaW4gdGhlXG4gICAqIGRlY2xhcmVkIHNwZWNpZmllcnMgKGBpZi1uZWNlc3Nhcnktb3ItZXhwbGljaXRgKS5cbiAgICpcbiAgICogQHNjaGVtYSBQaXBPcHRpb25zI3ByZXJlbGVhc2VcbiAgICovXG4gIHJlYWRvbmx5IHByZXJlbGVhc2U/OiBQcmVyZWxlYXNlTW9kZTtcblxuICAvKipcbiAgICogVGhlIFB5dGhvbiBpbnRlcnByZXRlciBpbnRvIHdoaWNoIHBhY2thZ2VzIHNob3VsZCBiZSBpbnN0YWxsZWQuXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIHV2IGluc3RhbGxzIGludG8gdGhlIHZpcnR1YWwgZW52aXJvbm1lbnQgaW4gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3Rvcnkgb3JcbiAgICogYW55IHBhcmVudCBkaXJlY3RvcnkuIFRoZSBgLS1weXRob25gIG9wdGlvbiBhbGxvd3MgeW91IHRvIHNwZWNpZnkgYSBkaWZmZXJlbnQgaW50ZXJwcmV0ZXIsXG4gICAqIHdoaWNoIGlzIGludGVuZGVkIGZvciB1c2UgaW4gY29udGludW91cyBpbnRlZ3JhdGlvbiAoQ0kpIGVudmlyb25tZW50cyBvciBvdGhlciBhdXRvbWF0ZWRcbiAgICogd29ya2Zsb3dzLlxuICAgKlxuICAgKiBTdXBwb3J0ZWQgZm9ybWF0czpcbiAgICogLSBgMy4xMGAgbG9va3MgZm9yIGFuIGluc3RhbGxlZCBQeXRob24gMy4xMCBpbiB0aGUgcmVnaXN0cnkgb24gV2luZG93cyAoc2VlXG4gICAqIGBweSAtLWxpc3QtcGF0aHNgKSwgb3IgYHB5dGhvbjMuMTBgIG9uIExpbnV4IGFuZCBtYWNPUy5cbiAgICogLSBgcHl0aG9uMy4xMGAgb3IgYHB5dGhvbi5leGVgIGxvb2tzIGZvciBhIGJpbmFyeSB3aXRoIHRoZSBnaXZlbiBuYW1lIGluIGBQQVRIYC5cbiAgICogLSBgL2hvbWUvZmVycmlzLy5sb2NhbC9iaW4vcHl0aG9uMy4xMGAgdXNlcyB0aGUgZXhhY3QgUHl0aG9uIGF0IHRoZSBnaXZlbiBwYXRoLlxuICAgKlxuICAgKiBAc2NoZW1hIFBpcE9wdGlvbnMjcHl0aG9uXG4gICAqL1xuICByZWFkb25seSBweXRob24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwbGF0Zm9ybSBmb3Igd2hpY2ggcmVxdWlyZW1lbnRzIHNob3VsZCBiZSByZXNvbHZlZC5cbiAgICpcbiAgICogUmVwcmVzZW50ZWQgYXMgYSBcInRhcmdldCB0cmlwbGVcIiwgYSBzdHJpbmcgdGhhdCBkZXNjcmliZXMgdGhlIHRhcmdldCBwbGF0Zm9ybSBpbiB0ZXJtcyBvZlxuICAgKiBpdHMgQ1BVLCB2ZW5kb3IsIGFuZCBvcGVyYXRpbmcgc3lzdGVtIG5hbWUsIGxpa2UgYHg4Nl82NC11bmtub3duLWxpbnV4LWdudWAgb3JcbiAgICogYGFhcmNoNjQtYXBwbGUtZGFyd2luYC5cbiAgICpcbiAgICogQHNjaGVtYSBQaXBPcHRpb25zI3B5dGhvbi1wbGF0Zm9ybVxuICAgKi9cbiAgcmVhZG9ubHkgcHl0aG9uUGxhdGZvcm0/OiBUYXJnZXRUcmlwbGU7XG5cbiAgLyoqXG4gICAqIFRoZSBtaW5pbXVtIFB5dGhvbiB2ZXJzaW9uIHRoYXQgc2hvdWxkIGJlIHN1cHBvcnRlZCBieSB0aGUgcmVzb2x2ZWQgcmVxdWlyZW1lbnRzIChlLmcuLFxuICAgKiBgMy44YCBvciBgMy44LjE3YCkuXG4gICAqXG4gICAqIElmIGEgcGF0Y2ggdmVyc2lvbiBpcyBvbWl0dGVkLCB0aGUgbWluaW11bSBwYXRjaCB2ZXJzaW9uIGlzIGFzc3VtZWQuIEZvciBleGFtcGxlLCBgMy44YCBpc1xuICAgKiBtYXBwZWQgdG8gYDMuOC4wYC5cbiAgICpcbiAgICogQHNjaGVtYSBQaXBPcHRpb25zI3B5dGhvbi12ZXJzaW9uXG4gICAqL1xuICByZWFkb25seSBweXRob25WZXJzaW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBSZWluc3RhbGwgYWxsIHBhY2thZ2VzLCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhleSdyZSBhbHJlYWR5IGluc3RhbGxlZC4gSW1wbGllcyBgcmVmcmVzaGAuXG4gICAqXG4gICAqIEBzY2hlbWEgUGlwT3B0aW9ucyNyZWluc3RhbGxcbiAgICovXG4gIHJlYWRvbmx5IHJlaW5zdGFsbD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFJlaW5zdGFsbCBhIHNwZWNpZmljIHBhY2thZ2UsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCdzIGFscmVhZHkgaW5zdGFsbGVkLiBJbXBsaWVzXG4gICAqIGByZWZyZXNoLXBhY2thZ2VgLlxuICAgKlxuICAgKiBAc2NoZW1hIFBpcE9wdGlvbnMjcmVpbnN0YWxsLXBhY2thZ2VcbiAgICovXG4gIHJlYWRvbmx5IHJlaW5zdGFsbFBhY2thZ2U/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogUmVxdWlyZSBhIG1hdGNoaW5nIGhhc2ggZm9yIGVhY2ggcmVxdWlyZW1lbnQuXG4gICAqXG4gICAqIEhhc2gtY2hlY2tpbmcgbW9kZSBpcyBhbGwgb3Igbm90aGluZy4gSWYgZW5hYmxlZCwgX2FsbF8gcmVxdWlyZW1lbnRzIG11c3QgYmUgcHJvdmlkZWRcbiAgICogd2l0aCBhIGNvcnJlc3BvbmRpbmcgaGFzaCBvciBzZXQgb2YgaGFzaGVzLiBBZGRpdGlvbmFsbHksIGlmIGVuYWJsZWQsIF9hbGxfIHJlcXVpcmVtZW50c1xuICAgKiBtdXN0IGVpdGhlciBiZSBwaW5uZWQgdG8gZXhhY3QgdmVyc2lvbnMgKGUuZy4sIGA9PTEuMC4wYCksIG9yIGJlIHNwZWNpZmllZCB2aWEgZGlyZWN0IFVSTC5cbiAgICpcbiAgICogSGFzaC1jaGVja2luZyBtb2RlIGludHJvZHVjZXMgYSBudW1iZXIgb2YgYWRkaXRpb25hbCBjb25zdHJhaW50czpcbiAgICpcbiAgICogLSBHaXQgZGVwZW5kZW5jaWVzIGFyZSBub3Qgc3VwcG9ydGVkLlxuICAgKiAtIEVkaXRhYmxlIGluc3RhbGxhdGlvbnMgYXJlIG5vdCBzdXBwb3J0ZWQuXG4gICAqIC0gTG9jYWwgZGVwZW5kZW5jaWVzIGFyZSBub3Qgc3VwcG9ydGVkLCB1bmxlc3MgdGhleSBwb2ludCB0byBhIHNwZWNpZmljIHdoZWVsIChgLndobGApIG9yXG4gICAqIHNvdXJjZSBhcmNoaXZlIChgLnppcGAsIGAudGFyLmd6YCksIGFzIG9wcG9zZWQgdG8gYSBkaXJlY3RvcnkuXG4gICAqXG4gICAqIEBzY2hlbWEgUGlwT3B0aW9ucyNyZXF1aXJlLWhhc2hlc1xuICAgKi9cbiAgcmVhZG9ubHkgcmVxdWlyZUhhc2hlcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBzdHJhdGVneSB0byB1c2Ugd2hlbiBzZWxlY3RpbmcgYmV0d2VlbiB0aGUgZGlmZmVyZW50IGNvbXBhdGlibGUgdmVyc2lvbnMgZm9yIGEgZ2l2ZW5cbiAgICogcGFja2FnZSByZXF1aXJlbWVudC5cbiAgICpcbiAgICogQnkgZGVmYXVsdCwgdXYgd2lsbCB1c2UgdGhlIGxhdGVzdCBjb21wYXRpYmxlIHZlcnNpb24gb2YgZWFjaCBwYWNrYWdlIChgaGlnaGVzdGApLlxuICAgKlxuICAgKiBAc2NoZW1hIFBpcE9wdGlvbnMjcmVzb2x1dGlvblxuICAgKi9cbiAgcmVhZG9ubHkgcmVzb2x1dGlvbj86IFJlc29sdXRpb25Nb2RlO1xuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSB0aGUgUHl0aG9uIGVudmlyb25tZW50LCB0byBkZXRlY3QgcGFja2FnZXMgd2l0aCBtaXNzaW5nIGRlcGVuZGVuY2llcyBhbmQgb3RoZXJcbiAgICogaXNzdWVzLlxuICAgKlxuICAgKiBAc2NoZW1hIFBpcE9wdGlvbnMjc3RyaWN0XG4gICAqL1xuICByZWFkb25seSBzdHJpY3Q/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJbnN0YWxsIHBhY2thZ2VzIGludG8gdGhlIHN5c3RlbSBQeXRob24gZW52aXJvbm1lbnQuXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIHV2IGluc3RhbGxzIGludG8gdGhlIHZpcnR1YWwgZW52aXJvbm1lbnQgaW4gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3Rvcnkgb3JcbiAgICogYW55IHBhcmVudCBkaXJlY3RvcnkuIFRoZSBgLS1zeXN0ZW1gIG9wdGlvbiBpbnN0cnVjdHMgdXYgdG8gaW5zdGVhZCB1c2UgdGhlIGZpcnN0IFB5dGhvblxuICAgKiBmb3VuZCBpbiB0aGUgc3lzdGVtIGBQQVRIYC5cbiAgICpcbiAgICogV0FSTklORzogYC0tc3lzdGVtYCBpcyBpbnRlbmRlZCBmb3IgdXNlIGluIGNvbnRpbnVvdXMgaW50ZWdyYXRpb24gKENJKSBlbnZpcm9ubWVudHMgYW5kXG4gICAqIHNob3VsZCBiZSB1c2VkIHdpdGggY2F1dGlvbiwgYXMgaXQgY2FuIG1vZGlmeSB0aGUgc3lzdGVtIFB5dGhvbiBpbnN0YWxsYXRpb24uXG4gICAqXG4gICAqIEBzY2hlbWEgUGlwT3B0aW9ucyNzeXN0ZW1cbiAgICovXG4gIHJlYWRvbmx5IHN5c3RlbT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEluc3RhbGwgcGFja2FnZXMgaW50byB0aGUgc3BlY2lmaWVkIGRpcmVjdG9yeSwgcmF0aGVyIHRoYW4gaW50byB0aGUgdmlydHVhbCBvciBzeXN0ZW0gUHl0aG9uXG4gICAqIGVudmlyb25tZW50LiBUaGUgcGFja2FnZXMgd2lsbCBiZSBpbnN0YWxsZWQgYXQgdGhlIHRvcC1sZXZlbCBvZiB0aGUgZGlyZWN0b3J5LlxuICAgKlxuICAgKiBAc2NoZW1hIFBpcE9wdGlvbnMjdGFyZ2V0XG4gICAqL1xuICByZWFkb25seSB0YXJnZXQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBiYWNrZW5kIHRvIHVzZSB3aGVuIGZldGNoaW5nIHBhY2thZ2VzIGluIHRoZSBQeVRvcmNoIGVjb3N5c3RlbS5cbiAgICpcbiAgICogV2hlbiBzZXQsIHV2IHdpbGwgaWdub3JlIHRoZSBjb25maWd1cmVkIGluZGV4IFVSTHMgZm9yIHBhY2thZ2VzIGluIHRoZSBQeVRvcmNoIGVjb3N5c3RlbSxcbiAgICogYW5kIHdpbGwgaW5zdGVhZCB1c2UgdGhlIGRlZmluZWQgYmFja2VuZC5cbiAgICpcbiAgICogRm9yIGV4YW1wbGUsIHdoZW4gc2V0IHRvIGBjcHVgLCB1diB3aWxsIHVzZSB0aGUgQ1BVLW9ubHkgUHlUb3JjaCBpbmRleDsgd2hlbiBzZXQgdG8gYGN1MTI2YCxcbiAgICogdXYgd2lsbCB1c2UgdGhlIFB5VG9yY2ggaW5kZXggZm9yIENVREEgMTIuNi5cbiAgICpcbiAgICogVGhlIGBhdXRvYCBtb2RlIHdpbGwgYXR0ZW1wdCB0byBkZXRlY3QgdGhlIGFwcHJvcHJpYXRlIFB5VG9yY2ggaW5kZXggYmFzZWQgb24gdGhlIGN1cnJlbnRseVxuICAgKiBpbnN0YWxsZWQgQ1VEQSBkcml2ZXJzLlxuICAgKlxuICAgKiBUaGlzIHNldHRpbmcgaXMgb25seSByZXNwZWN0ZWQgYnkgYHV2IHBpcGAgY29tbWFuZHMuXG4gICAqXG4gICAqIFRoaXMgb3B0aW9uIGlzIGluIHByZXZpZXcgYW5kIG1heSBjaGFuZ2UgaW4gYW55IGZ1dHVyZSByZWxlYXNlLlxuICAgKlxuICAgKiBAc2NoZW1hIFBpcE9wdGlvbnMjdG9yY2gtYmFja2VuZFxuICAgKi9cbiAgcmVhZG9ubHkgdG9yY2hCYWNrZW5kPzogVG9yY2hNb2RlO1xuXG4gIC8qKlxuICAgKiBQZXJmb3JtIGEgdW5pdmVyc2FsIHJlc29sdXRpb24sIGF0dGVtcHRpbmcgdG8gZ2VuZXJhdGUgYSBzaW5nbGUgYHJlcXVpcmVtZW50cy50eHRgIG91dHB1dFxuICAgKiBmaWxlIHRoYXQgaXMgY29tcGF0aWJsZSB3aXRoIGFsbCBvcGVyYXRpbmcgc3lzdGVtcywgYXJjaGl0ZWN0dXJlcywgYW5kIFB5dGhvblxuICAgKiBpbXBsZW1lbnRhdGlvbnMuXG4gICAqXG4gICAqIEluIHVuaXZlcnNhbCBtb2RlLCB0aGUgY3VycmVudCBQeXRob24gdmVyc2lvbiAob3IgdXNlci1wcm92aWRlZCBgLS1weXRob24tdmVyc2lvbmApIHdpbGwgYmVcbiAgICogdHJlYXRlZCBhcyBhIGxvd2VyIGJvdW5kLiBGb3IgZXhhbXBsZSwgYC0tdW5pdmVyc2FsIC0tcHl0aG9uLXZlcnNpb24gMy43YCB3b3VsZCBwcm9kdWNlIGFcbiAgICogdW5pdmVyc2FsIHJlc29sdXRpb24gZm9yIFB5dGhvbiAzLjcgYW5kIGxhdGVyLlxuICAgKlxuICAgKiBAc2NoZW1hIFBpcE9wdGlvbnMjdW5pdmVyc2FsXG4gICAqL1xuICByZWFkb25seSB1bml2ZXJzYWw/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBbGxvdyBwYWNrYWdlIHVwZ3JhZGVzLCBpZ25vcmluZyBwaW5uZWQgdmVyc2lvbnMgaW4gYW55IGV4aXN0aW5nIG91dHB1dCBmaWxlLlxuICAgKlxuICAgKiBAc2NoZW1hIFBpcE9wdGlvbnMjdXBncmFkZVxuICAgKi9cbiAgcmVhZG9ubHkgdXBncmFkZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEFsbG93IHVwZ3JhZGVzIGZvciBhIHNwZWNpZmljIHBhY2thZ2UsIGlnbm9yaW5nIHBpbm5lZCB2ZXJzaW9ucyBpbiBhbnkgZXhpc3Rpbmcgb3V0cHV0XG4gICAqIGZpbGUuXG4gICAqXG4gICAqIEFjY2VwdHMgYm90aCBzdGFuZGFsb25lIHBhY2thZ2UgbmFtZXMgKGBydWZmYCkgYW5kIHZlcnNpb24gc3BlY2lmaWVycyAoYHJ1ZmY8MC41LjBgKS5cbiAgICpcbiAgICogQHNjaGVtYSBQaXBPcHRpb25zI3VwZ3JhZGUtcGFja2FnZVxuICAgKi9cbiAgcmVhZG9ubHkgdXBncmFkZVBhY2thZ2U/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVmFsaWRhdGUgYW55IGhhc2hlcyBwcm92aWRlZCBpbiB0aGUgcmVxdWlyZW1lbnRzIGZpbGUuXG4gICAqXG4gICAqIFVubGlrZSBgLS1yZXF1aXJlLWhhc2hlc2AsIGAtLXZlcmlmeS1oYXNoZXNgIGRvZXMgbm90IHJlcXVpcmUgdGhhdCBhbGwgcmVxdWlyZW1lbnRzIGhhdmVcbiAgICogaGFzaGVzOyBpbnN0ZWFkLCBpdCB3aWxsIGxpbWl0IGl0c2VsZiB0byB2ZXJpZnlpbmcgdGhlIGhhc2hlcyBvZiB0aG9zZSByZXF1aXJlbWVudHMgdGhhdCBkb1xuICAgKiBpbmNsdWRlIHRoZW0uXG4gICAqXG4gICAqIEBzY2hlbWEgUGlwT3B0aW9ucyN2ZXJpZnktaGFzaGVzXG4gICAqL1xuICByZWFkb25seSB2ZXJpZnlIYXNoZXM/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdQaXBPcHRpb25zJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fUGlwT3B0aW9ucyhvYmo6IFBpcE9wdGlvbnMgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdhbGwtZXh0cmFzJzogb2JqLmFsbEV4dHJhcyxcbiAgICAnYWxsb3ctZW1wdHktcmVxdWlyZW1lbnRzJzogb2JqLmFsbG93RW1wdHlSZXF1aXJlbWVudHMsXG4gICAgJ2Fubm90YXRpb24tc3R5bGUnOiBvYmouYW5ub3RhdGlvblN0eWxlLFxuICAgICdicmVhay1zeXN0ZW0tcGFja2FnZXMnOiBvYmouYnJlYWtTeXN0ZW1QYWNrYWdlcyxcbiAgICAnY29tcGlsZS1ieXRlY29kZSc6IG9iai5jb21waWxlQnl0ZWNvZGUsXG4gICAgJ2NvbmZpZy1zZXR0aW5ncyc6ICgob2JqLmNvbmZpZ1NldHRpbmdzKSA9PT0gdW5kZWZpbmVkKSA/IHVuZGVmaW5lZCA6IChPYmplY3QuZW50cmllcyhvYmouY29uZmlnU2V0dGluZ3MpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSkpLFxuICAgICdjb25maWctc2V0dGluZ3MtcGFja2FnZSc6ICgob2JqLmNvbmZpZ1NldHRpbmdzUGFja2FnZSkgPT09IHVuZGVmaW5lZCkgPyB1bmRlZmluZWQgOiAoT2JqZWN0LmVudHJpZXMob2JqLmNvbmZpZ1NldHRpbmdzUGFja2FnZSkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06ICgoaVsxXSkgPT09IHVuZGVmaW5lZCkgPyB1bmRlZmluZWQgOiAoT2JqZWN0LmVudHJpZXMoaVsxXSkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KSkgfSksIHt9KSksXG4gICAgJ2N1c3RvbS1jb21waWxlLWNvbW1hbmQnOiBvYmouY3VzdG9tQ29tcGlsZUNvbW1hbmQsXG4gICAgJ2RlcGVuZGVuY3ktbWV0YWRhdGEnOiBvYmouZGVwZW5kZW5jeU1ldGFkYXRhPy5tYXAoeSA9PiB0b0pzb25fU3RhdGljTWV0YWRhdGEoeSkpLFxuICAgICdlbWl0LWJ1aWxkLW9wdGlvbnMnOiBvYmouZW1pdEJ1aWxkT3B0aW9ucyxcbiAgICAnZW1pdC1maW5kLWxpbmtzJzogb2JqLmVtaXRGaW5kTGlua3MsXG4gICAgJ2VtaXQtaW5kZXgtYW5ub3RhdGlvbic6IG9iai5lbWl0SW5kZXhBbm5vdGF0aW9uLFxuICAgICdlbWl0LWluZGV4LXVybCc6IG9iai5lbWl0SW5kZXhVcmwsXG4gICAgJ2VtaXQtbWFya2VyLWV4cHJlc3Npb24nOiBvYmouZW1pdE1hcmtlckV4cHJlc3Npb24sXG4gICAgJ2V4Y2x1ZGUtbmV3ZXInOiBvYmouZXhjbHVkZU5ld2VyPy52YWx1ZSxcbiAgICAnZXhjbHVkZS1uZXdlci1wYWNrYWdlJzogKChvYmouZXhjbHVkZU5ld2VyUGFja2FnZSkgPT09IHVuZGVmaW5lZCkgPyB1bmRlZmluZWQgOiAoT2JqZWN0LmVudHJpZXMob2JqLmV4Y2x1ZGVOZXdlclBhY2thZ2UpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdPy52YWx1ZSB9KSwge30pKSxcbiAgICAnZXh0cmEnOiBvYmouZXh0cmE/Lm1hcCh5ID0+IHkpLFxuICAgICdleHRyYS1idWlsZC1kZXBlbmRlbmNpZXMnOiAoKG9iai5leHRyYUJ1aWxkRGVwZW5kZW5jaWVzKSA9PT0gdW5kZWZpbmVkKSA/IHVuZGVmaW5lZCA6IChPYmplY3QuZW50cmllcyhvYmouZXh0cmFCdWlsZERlcGVuZGVuY2llcykucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0/Lm1hcCh5ID0+IHkpIH0pLCB7fSkpLFxuICAgICdleHRyYS1idWlsZC12YXJpYWJsZXMnOiAoKG9iai5leHRyYUJ1aWxkVmFyaWFibGVzKSA9PT0gdW5kZWZpbmVkKSA/IHVuZGVmaW5lZCA6IChPYmplY3QuZW50cmllcyhvYmouZXh0cmFCdWlsZFZhcmlhYmxlcykucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06ICgoaVsxXSkgPT09IHVuZGVmaW5lZCkgPyB1bmRlZmluZWQgOiAoT2JqZWN0LmVudHJpZXMoaVsxXSkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KSkgfSksIHt9KSksXG4gICAgJ2V4dHJhLWluZGV4LXVybCc6IG9iai5leHRyYUluZGV4VXJsPy5tYXAoeSA9PiB5KSxcbiAgICAnZmluZC1saW5rcyc6IG9iai5maW5kTGlua3M/Lm1hcCh5ID0+IHkpLFxuICAgICdmb3JrLXN0cmF0ZWd5Jzogb2JqLmZvcmtTdHJhdGVneSxcbiAgICAnZ2VuZXJhdGUtaGFzaGVzJzogb2JqLmdlbmVyYXRlSGFzaGVzLFxuICAgICdncm91cCc6IG9iai5ncm91cD8ubWFwKHkgPT4gdG9Kc29uX1BpcEdyb3VwTmFtZSh5KSksXG4gICAgJ2luZGV4LXN0cmF0ZWd5Jzogb2JqLmluZGV4U3RyYXRlZ3ksXG4gICAgJ2luZGV4LXVybCc6IG9iai5pbmRleFVybCxcbiAgICAna2V5cmluZy1wcm92aWRlcic6IG9iai5rZXlyaW5nUHJvdmlkZXIsXG4gICAgJ2xpbmstbW9kZSc6IG9iai5saW5rTW9kZSxcbiAgICAnbm8tYW5ub3RhdGUnOiBvYmoubm9Bbm5vdGF0ZSxcbiAgICAnbm8tYmluYXJ5Jzogb2JqLm5vQmluYXJ5Py5tYXAoeSA9PiB5KSxcbiAgICAnbm8tYnVpbGQnOiBvYmoubm9CdWlsZCxcbiAgICAnbm8tYnVpbGQtaXNvbGF0aW9uJzogb2JqLm5vQnVpbGRJc29sYXRpb24sXG4gICAgJ25vLWJ1aWxkLWlzb2xhdGlvbi1wYWNrYWdlJzogb2JqLm5vQnVpbGRJc29sYXRpb25QYWNrYWdlPy5tYXAoeSA9PiB5KSxcbiAgICAnbm8tZGVwcyc6IG9iai5ub0RlcHMsXG4gICAgJ25vLWVtaXQtcGFja2FnZSc6IG9iai5ub0VtaXRQYWNrYWdlPy5tYXAoeSA9PiB5KSxcbiAgICAnbm8tZXh0cmEnOiBvYmoubm9FeHRyYT8ubWFwKHkgPT4geSksXG4gICAgJ25vLWhlYWRlcic6IG9iai5ub0hlYWRlcixcbiAgICAnbm8taW5kZXgnOiBvYmoubm9JbmRleCxcbiAgICAnbm8tc291cmNlcyc6IG9iai5ub1NvdXJjZXMsXG4gICAgJ25vLXNvdXJjZXMtcGFja2FnZSc6IG9iai5ub1NvdXJjZXNQYWNrYWdlPy5tYXAoeSA9PiB5KSxcbiAgICAnbm8tc3RyaXAtZXh0cmFzJzogb2JqLm5vU3RyaXBFeHRyYXMsXG4gICAgJ25vLXN0cmlwLW1hcmtlcnMnOiBvYmoubm9TdHJpcE1hcmtlcnMsXG4gICAgJ29ubHktYmluYXJ5Jzogb2JqLm9ubHlCaW5hcnk/Lm1hcCh5ID0+IHkpLFxuICAgICdvdXRwdXQtZmlsZSc6IG9iai5vdXRwdXRGaWxlLFxuICAgICdwcmVmaXgnOiBvYmoucHJlZml4LFxuICAgICdwcmVyZWxlYXNlJzogb2JqLnByZXJlbGVhc2UsXG4gICAgJ3B5dGhvbic6IG9iai5weXRob24sXG4gICAgJ3B5dGhvbi1wbGF0Zm9ybSc6IG9iai5weXRob25QbGF0Zm9ybSxcbiAgICAncHl0aG9uLXZlcnNpb24nOiBvYmoucHl0aG9uVmVyc2lvbixcbiAgICAncmVpbnN0YWxsJzogb2JqLnJlaW5zdGFsbCxcbiAgICAncmVpbnN0YWxsLXBhY2thZ2UnOiBvYmoucmVpbnN0YWxsUGFja2FnZT8ubWFwKHkgPT4geSksXG4gICAgJ3JlcXVpcmUtaGFzaGVzJzogb2JqLnJlcXVpcmVIYXNoZXMsXG4gICAgJ3Jlc29sdXRpb24nOiBvYmoucmVzb2x1dGlvbixcbiAgICAnc3RyaWN0Jzogb2JqLnN0cmljdCxcbiAgICAnc3lzdGVtJzogb2JqLnN5c3RlbSxcbiAgICAndGFyZ2V0Jzogb2JqLnRhcmdldCxcbiAgICAndG9yY2gtYmFja2VuZCc6IG9iai50b3JjaEJhY2tlbmQsXG4gICAgJ3VuaXZlcnNhbCc6IG9iai51bml2ZXJzYWwsXG4gICAgJ3VwZ3JhZGUnOiBvYmoudXBncmFkZSxcbiAgICAndXBncmFkZS1wYWNrYWdlJzogb2JqLnVwZ3JhZGVQYWNrYWdlPy5tYXAoeSA9PiB5KSxcbiAgICAndmVyaWZ5LWhhc2hlcyc6IG9iai52ZXJpZnlIYXNoZXMsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBAc2NoZW1hIFByZXJlbGVhc2VNb2RlXG4gKi9cbmV4cG9ydCBlbnVtIFByZXJlbGVhc2VNb2RlIHtcbiAgLyoqIERpc2FsbG93IGFsbCBwcmUtcmVsZWFzZSB2ZXJzaW9ucy4gKGRpc2FsbG93KSAqL1xuICBESVNBTExPVyA9IFwiZGlzYWxsb3dcIixcbiAgLyoqIEFsbG93IGFsbCBwcmUtcmVsZWFzZSB2ZXJzaW9ucy4gKGFsbG93KSAqL1xuICBBTExPVyA9IFwiYWxsb3dcIixcbiAgLyoqIEFsbG93IHByZS1yZWxlYXNlIHZlcnNpb25zIGlmIGFsbCB2ZXJzaW9ucyBvZiBhIHBhY2thZ2UgYXJlIHByZS1yZWxlYXNlLiAoaWYtbmVjZXNzYXJ5KSAqL1xuICBJRl9IWVBIRU5fTkVDRVNTQVJZID0gXCJpZi1uZWNlc3NhcnlcIixcbiAgLyoqIEFsbG93IHByZS1yZWxlYXNlIHZlcnNpb25zIGZvciBmaXJzdC1wYXJ0eSBwYWNrYWdlcyB3aXRoIGV4cGxpY2l0IHByZS1yZWxlYXNlIG1hcmtlcnMgaW5cbnRoZWlyIHZlcnNpb24gcmVxdWlyZW1lbnRzLiAoZXhwbGljaXQpICovXG4gIEVYUExJQ0lUID0gXCJleHBsaWNpdFwiLFxuICAvKiogQWxsb3cgcHJlLXJlbGVhc2UgdmVyc2lvbnMgaWYgYWxsIHZlcnNpb25zIG9mIGEgcGFja2FnZSBhcmUgcHJlLXJlbGVhc2UsIG9yIGlmIHRoZSBwYWNrYWdlXG5oYXMgYW4gZXhwbGljaXQgcHJlLXJlbGVhc2UgbWFya2VyIGluIGl0cyB2ZXJzaW9uIHJlcXVpcmVtZW50cy4gKGlmLW5lY2Vzc2FyeS1vci1leHBsaWNpdCkgKi9cbiAgSUZfSFlQSEVOX05FQ0VTU0FSWV9IWVBIRU5fT1JfSFlQSEVOX0VYUExJQ0lUID0gXCJpZi1uZWNlc3Nhcnktb3ItZXhwbGljaXRcIixcbn1cblxuLyoqXG4gKiBAc2NoZW1hIFB5dGhvbkRvd25sb2Fkc1xuICovXG5leHBvcnQgZW51bSBQeXRob25Eb3dubG9hZHMge1xuICAvKiogQXV0b21hdGljYWxseSBkb3dubG9hZCBtYW5hZ2VkIFB5dGhvbiBpbnN0YWxsYXRpb25zIHdoZW4gbmVlZGVkLiAoYXV0b21hdGljKSAqL1xuICBBVVRPTUFUSUMgPSBcImF1dG9tYXRpY1wiLFxuICAvKiogRG8gbm90IGF1dG9tYXRpY2FsbHkgZG93bmxvYWQgbWFuYWdlZCBQeXRob24gaW5zdGFsbGF0aW9uczsgcmVxdWlyZSBleHBsaWNpdCBpbnN0YWxsYXRpb24uIChtYW51YWwpICovXG4gIE1BTlVBTCA9IFwibWFudWFsXCIsXG4gIC8qKiBEbyBub3QgZXZlciBhbGxvdyBQeXRob24gZG93bmxvYWRzLiAobmV2ZXIpICovXG4gIE5FVkVSID0gXCJuZXZlclwiLFxufVxuXG4vKipcbiAqIEBzY2hlbWEgUHl0aG9uUHJlZmVyZW5jZVxuICovXG5leHBvcnQgZW51bSBQeXRob25QcmVmZXJlbmNlIHtcbiAgLyoqIE9ubHkgdXNlIG1hbmFnZWQgUHl0aG9uIGluc3RhbGxhdGlvbnM7IG5ldmVyIHVzZSBzeXN0ZW0gUHl0aG9uIGluc3RhbGxhdGlvbnMuIChvbmx5LW1hbmFnZWQpICovXG4gIE9OTFlfSFlQSEVOX01BTkFHRUQgPSBcIm9ubHktbWFuYWdlZFwiLFxuICAvKiogUHJlZmVyIG1hbmFnZWQgUHl0aG9uIGluc3RhbGxhdGlvbnMgb3ZlciBzeXN0ZW0gUHl0aG9uIGluc3RhbGxhdGlvbnMuXG5cblN5c3RlbSBQeXRob24gaW5zdGFsbGF0aW9ucyBhcmUgc3RpbGwgcHJlZmVycmVkIG92ZXIgZG93bmxvYWRpbmcgbWFuYWdlZCBQeXRob24gdmVyc2lvbnMuXG5Vc2UgYG9ubHktbWFuYWdlZGAgdG8gYWx3YXlzIGZldGNoIGEgbWFuYWdlZCBQeXRob24gdmVyc2lvbi4gKG1hbmFnZWQpICovXG4gIE1BTkFHRUQgPSBcIm1hbmFnZWRcIixcbiAgLyoqIFByZWZlciBzeXN0ZW0gUHl0aG9uIGluc3RhbGxhdGlvbnMgb3ZlciBtYW5hZ2VkIFB5dGhvbiBpbnN0YWxsYXRpb25zLlxuXG5JZiBhIHN5c3RlbSBQeXRob24gaW5zdGFsbGF0aW9uIGNhbm5vdCBiZSBmb3VuZCwgYSBtYW5hZ2VkIFB5dGhvbiBpbnN0YWxsYXRpb24gY2FuIGJlIHVzZWQuIChzeXN0ZW0pICovXG4gIFNZU1RFTSA9IFwic3lzdGVtXCIsXG4gIC8qKiBPbmx5IHVzZSBzeXN0ZW0gUHl0aG9uIGluc3RhbGxhdGlvbnM7IG5ldmVyIHVzZSBtYW5hZ2VkIFB5dGhvbiBpbnN0YWxsYXRpb25zLiAob25seS1zeXN0ZW0pICovXG4gIE9OTFlfSFlQSEVOX1NZU1RFTSA9IFwib25seS1zeXN0ZW1cIixcbn1cblxuLyoqXG4gKiBAc2NoZW1hIFJlc29sdXRpb25Nb2RlXG4gKi9cbmV4cG9ydCBlbnVtIFJlc29sdXRpb25Nb2RlIHtcbiAgLyoqIFJlc29sdmUgdGhlIGhpZ2hlc3QgY29tcGF0aWJsZSB2ZXJzaW9uIG9mIGVhY2ggcGFja2FnZS4gKGhpZ2hlc3QpICovXG4gIEhJR0hFU1QgPSBcImhpZ2hlc3RcIixcbiAgLyoqIFJlc29sdmUgdGhlIGxvd2VzdCBjb21wYXRpYmxlIHZlcnNpb24gb2YgZWFjaCBwYWNrYWdlLiAobG93ZXN0KSAqL1xuICBMT1dFU1QgPSBcImxvd2VzdFwiLFxuICAvKiogUmVzb2x2ZSB0aGUgbG93ZXN0IGNvbXBhdGlibGUgdmVyc2lvbiBvZiBhbnkgZGlyZWN0IGRlcGVuZGVuY2llcywgYW5kIHRoZSBoaWdoZXN0XG5jb21wYXRpYmxlIHZlcnNpb24gb2YgYW55IHRyYW5zaXRpdmUgZGVwZW5kZW5jaWVzLiAobG93ZXN0LWRpcmVjdCkgKi9cbiAgTE9XRVNUX0hZUEhFTl9ESVJFQ1QgPSBcImxvd2VzdC1kaXJlY3RcIixcbn1cblxuLyoqXG4gKiBUaGUgc3RyYXRlZ3kgdG8gdXNlIHdoZW4gZGV0ZXJtaW5pbmcgdGhlIGFwcHJvcHJpYXRlIFB5VG9yY2ggaW5kZXguXG4gKlxuICogQHNjaGVtYSBUb3JjaE1vZGVcbiAqL1xuZXhwb3J0IGVudW0gVG9yY2hNb2RlIHtcbiAgLyoqIFNlbGVjdCB0aGUgYXBwcm9wcmlhdGUgUHlUb3JjaCBpbmRleCBiYXNlZCBvbiB0aGUgb3BlcmF0aW5nIHN5c3RlbSBhbmQgQ1VEQSBkcml2ZXIgdmVyc2lvbi4gKGF1dG8pICovXG4gIEFVVE8gPSBcImF1dG9cIixcbiAgLyoqIFVzZSB0aGUgQ1BVLW9ubHkgUHlUb3JjaCBpbmRleC4gKGNwdSkgKi9cbiAgQ1BVID0gXCJjcHVcIixcbiAgLyoqIFVzZSB0aGUgUHlUb3JjaCBpbmRleCBmb3IgQ1VEQSAxMy4yLiAoY3UxMzIpICovXG4gIENVMTMyID0gXCJjdTEzMlwiLFxuICAvKiogVXNlIHRoZSBQeVRvcmNoIGluZGV4IGZvciBDVURBIDEzLjAuIChjdTEzMCkgKi9cbiAgQ1UxMzAgPSBcImN1MTMwXCIsXG4gIC8qKiBVc2UgdGhlIFB5VG9yY2ggaW5kZXggZm9yIENVREEgMTIuOS4gKGN1MTI5KSAqL1xuICBDVTEyOSA9IFwiY3UxMjlcIixcbiAgLyoqIFVzZSB0aGUgUHlUb3JjaCBpbmRleCBmb3IgQ1VEQSAxMi44LiAoY3UxMjgpICovXG4gIENVMTI4ID0gXCJjdTEyOFwiLFxuICAvKiogVXNlIHRoZSBQeVRvcmNoIGluZGV4IGZvciBDVURBIDEyLjYuIChjdTEyNikgKi9cbiAgQ1UxMjYgPSBcImN1MTI2XCIsXG4gIC8qKiBVc2UgdGhlIFB5VG9yY2ggaW5kZXggZm9yIENVREEgMTIuNS4gKGN1MTI1KSAqL1xuICBDVTEyNSA9IFwiY3UxMjVcIixcbiAgLyoqIFVzZSB0aGUgUHlUb3JjaCBpbmRleCBmb3IgQ1VEQSAxMi40LiAoY3UxMjQpICovXG4gIENVMTI0ID0gXCJjdTEyNFwiLFxuICAvKiogVXNlIHRoZSBQeVRvcmNoIGluZGV4IGZvciBDVURBIDEyLjMuIChjdTEyMykgKi9cbiAgQ1UxMjMgPSBcImN1MTIzXCIsXG4gIC8qKiBVc2UgdGhlIFB5VG9yY2ggaW5kZXggZm9yIENVREEgMTIuMi4gKGN1MTIyKSAqL1xuICBDVTEyMiA9IFwiY3UxMjJcIixcbiAgLyoqIFVzZSB0aGUgUHlUb3JjaCBpbmRleCBmb3IgQ1VEQSAxMi4xLiAoY3UxMjEpICovXG4gIENVMTIxID0gXCJjdTEyMVwiLFxuICAvKiogVXNlIHRoZSBQeVRvcmNoIGluZGV4IGZvciBDVURBIDEyLjAuIChjdTEyMCkgKi9cbiAgQ1UxMjAgPSBcImN1MTIwXCIsXG4gIC8qKiBVc2UgdGhlIFB5VG9yY2ggaW5kZXggZm9yIENVREEgMTEuOC4gKGN1MTE4KSAqL1xuICBDVTExOCA9IFwiY3UxMThcIixcbiAgLyoqIFVzZSB0aGUgUHlUb3JjaCBpbmRleCBmb3IgQ1VEQSAxMS43LiAoY3UxMTcpICovXG4gIENVMTE3ID0gXCJjdTExN1wiLFxuICAvKiogVXNlIHRoZSBQeVRvcmNoIGluZGV4IGZvciBDVURBIDExLjYuIChjdTExNikgKi9cbiAgQ1UxMTYgPSBcImN1MTE2XCIsXG4gIC8qKiBVc2UgdGhlIFB5VG9yY2ggaW5kZXggZm9yIENVREEgMTEuNS4gKGN1MTE1KSAqL1xuICBDVTExNSA9IFwiY3UxMTVcIixcbiAgLyoqIFVzZSB0aGUgUHlUb3JjaCBpbmRleCBmb3IgQ1VEQSAxMS40LiAoY3UxMTQpICovXG4gIENVMTE0ID0gXCJjdTExNFwiLFxuICAvKiogVXNlIHRoZSBQeVRvcmNoIGluZGV4IGZvciBDVURBIDExLjMuIChjdTExMykgKi9cbiAgQ1UxMTMgPSBcImN1MTEzXCIsXG4gIC8qKiBVc2UgdGhlIFB5VG9yY2ggaW5kZXggZm9yIENVREEgMTEuMi4gKGN1MTEyKSAqL1xuICBDVTExMiA9IFwiY3UxMTJcIixcbiAgLyoqIFVzZSB0aGUgUHlUb3JjaCBpbmRleCBmb3IgQ1VEQSAxMS4xLiAoY3UxMTEpICovXG4gIENVMTExID0gXCJjdTExMVwiLFxuICAvKiogVXNlIHRoZSBQeVRvcmNoIGluZGV4IGZvciBDVURBIDExLjAuIChjdTExMCkgKi9cbiAgQ1UxMTAgPSBcImN1MTEwXCIsXG4gIC8qKiBVc2UgdGhlIFB5VG9yY2ggaW5kZXggZm9yIENVREEgMTAuMi4gKGN1MTAyKSAqL1xuICBDVTEwMiA9IFwiY3UxMDJcIixcbiAgLyoqIFVzZSB0aGUgUHlUb3JjaCBpbmRleCBmb3IgQ1VEQSAxMC4xLiAoY3UxMDEpICovXG4gIENVMTAxID0gXCJjdTEwMVwiLFxuICAvKiogVXNlIHRoZSBQeVRvcmNoIGluZGV4IGZvciBDVURBIDEwLjAuIChjdTEwMCkgKi9cbiAgQ1UxMDAgPSBcImN1MTAwXCIsXG4gIC8qKiBVc2UgdGhlIFB5VG9yY2ggaW5kZXggZm9yIENVREEgOS4yLiAoY3U5MikgKi9cbiAgQ1U5MiA9IFwiY3U5MlwiLFxuICAvKiogVXNlIHRoZSBQeVRvcmNoIGluZGV4IGZvciBDVURBIDkuMS4gKGN1OTEpICovXG4gIENVOTEgPSBcImN1OTFcIixcbiAgLyoqIFVzZSB0aGUgUHlUb3JjaCBpbmRleCBmb3IgQ1VEQSA5LjAuIChjdTkwKSAqL1xuICBDVTkwID0gXCJjdTkwXCIsXG4gIC8qKiBVc2UgdGhlIFB5VG9yY2ggaW5kZXggZm9yIENVREEgOC4wLiAoY3U4MCkgKi9cbiAgQ1U4MCA9IFwiY3U4MFwiLFxuICAvKiogVXNlIHRoZSBQeVRvcmNoIGluZGV4IGZvciBST0NtIDcuMi4gKHJvY203LjIpICovXG4gIFJPQ003XzIgPSBcInJvY203LjJcIixcbiAgLyoqIFVzZSB0aGUgUHlUb3JjaCBpbmRleCBmb3IgUk9DbSA3LjEuIChyb2NtNy4xKSAqL1xuICBST0NNN18xID0gXCJyb2NtNy4xXCIsXG4gIC8qKiBVc2UgdGhlIFB5VG9yY2ggaW5kZXggZm9yIFJPQ20gNy4wLiAocm9jbTcuMCkgKi9cbiAgUk9DTTdfMCA9IFwicm9jbTcuMFwiLFxuICAvKiogVXNlIHRoZSBQeVRvcmNoIGluZGV4IGZvciBST0NtIDYuNC4gKHJvY202LjQpICovXG4gIFJPQ002XzQgPSBcInJvY202LjRcIixcbiAgLyoqIFVzZSB0aGUgUHlUb3JjaCBpbmRleCBmb3IgUk9DbSA2LjMuIChyb2NtNi4zKSAqL1xuICBST0NNNl8zID0gXCJyb2NtNi4zXCIsXG4gIC8qKiBVc2UgdGhlIFB5VG9yY2ggaW5kZXggZm9yIFJPQ20gNi4yLjQuIChyb2NtNi4yLjQpICovXG4gIFJPQ002XzJfNCA9IFwicm9jbTYuMi40XCIsXG4gIC8qKiBVc2UgdGhlIFB5VG9yY2ggaW5kZXggZm9yIFJPQ20gNi4yLiAocm9jbTYuMikgKi9cbiAgUk9DTTZfMiA9IFwicm9jbTYuMlwiLFxuICAvKiogVXNlIHRoZSBQeVRvcmNoIGluZGV4IGZvciBST0NtIDYuMS4gKHJvY202LjEpICovXG4gIFJPQ002XzEgPSBcInJvY202LjFcIixcbiAgLyoqIFVzZSB0aGUgUHlUb3JjaCBpbmRleCBmb3IgUk9DbSA2LjAuIChyb2NtNi4wKSAqL1xuICBST0NNNl8wID0gXCJyb2NtNi4wXCIsXG4gIC8qKiBVc2UgdGhlIFB5VG9yY2ggaW5kZXggZm9yIFJPQ20gNS43LiAocm9jbTUuNykgKi9cbiAgUk9DTTVfNyA9IFwicm9jbTUuN1wiLFxuICAvKiogVXNlIHRoZSBQeVRvcmNoIGluZGV4IGZvciBST0NtIDUuNi4gKHJvY201LjYpICovXG4gIFJPQ001XzYgPSBcInJvY201LjZcIixcbiAgLyoqIFVzZSB0aGUgUHlUb3JjaCBpbmRleCBmb3IgUk9DbSA1LjUuIChyb2NtNS41KSAqL1xuICBST0NNNV81ID0gXCJyb2NtNS41XCIsXG4gIC8qKiBVc2UgdGhlIFB5VG9yY2ggaW5kZXggZm9yIFJPQ20gNS40LjIuIChyb2NtNS40LjIpICovXG4gIFJPQ001XzRfMiA9IFwicm9jbTUuNC4yXCIsXG4gIC8qKiBVc2UgdGhlIFB5VG9yY2ggaW5kZXggZm9yIFJPQ20gNS40LiAocm9jbTUuNCkgKi9cbiAgUk9DTTVfNCA9IFwicm9jbTUuNFwiLFxuICAvKiogVXNlIHRoZSBQeVRvcmNoIGluZGV4IGZvciBST0NtIDUuMy4gKHJvY201LjMpICovXG4gIFJPQ001XzMgPSBcInJvY201LjNcIixcbiAgLyoqIFVzZSB0aGUgUHlUb3JjaCBpbmRleCBmb3IgUk9DbSA1LjIuIChyb2NtNS4yKSAqL1xuICBST0NNNV8yID0gXCJyb2NtNS4yXCIsXG4gIC8qKiBVc2UgdGhlIFB5VG9yY2ggaW5kZXggZm9yIFJPQ20gNS4xLjEuIChyb2NtNS4xLjEpICovXG4gIFJPQ001XzFfMSA9IFwicm9jbTUuMS4xXCIsXG4gIC8qKiBVc2UgdGhlIFB5VG9yY2ggaW5kZXggZm9yIFJPQ20gNC4yLiAocm9jbTQuMikgKi9cbiAgUk9DTTRfMiA9IFwicm9jbTQuMlwiLFxuICAvKiogVXNlIHRoZSBQeVRvcmNoIGluZGV4IGZvciBST0NtIDQuMS4gKHJvY200LjEpICovXG4gIFJPQ000XzEgPSBcInJvY200LjFcIixcbiAgLyoqIFVzZSB0aGUgUHlUb3JjaCBpbmRleCBmb3IgUk9DbSA0LjAuMS4gKHJvY200LjAuMSkgKi9cbiAgUk9DTTRfMF8xID0gXCJyb2NtNC4wLjFcIixcbiAgLyoqIFVzZSB0aGUgUHlUb3JjaCBpbmRleCBmb3IgSW50ZWwgWFBVLiAoeHB1KSAqL1xuICBYUFUgPSBcInhwdVwiLFxufVxuXG4vKipcbiAqIEBzY2hlbWEgVHJ1c3RlZFB1Ymxpc2hpbmdcbiAqL1xuZXhwb3J0IGVudW0gVHJ1c3RlZFB1Ymxpc2hpbmcge1xuICAvKiogYWx3YXlzICovXG4gIEFMV0FZUyA9IFwiYWx3YXlzXCIsXG4gIC8qKiBuZXZlciAqL1xuICBORVZFUiA9IFwibmV2ZXJcIixcbiAgLyoqIEF0dGVtcHQgdHJ1c3RlZCBwdWJsaXNoaW5nIHdoZW4gd2UncmUgaW4gYSBzdXBwb3J0ZWQgZW52aXJvbm1lbnQsIGNvbnRpbnVlIGlmIHRoYXQgZmFpbHMuXG5cblN1cHBvcnRlZCBlbnZpcm9ubWVudHMgaW5jbHVkZSBHaXRIdWIgQWN0aW9ucyBhbmQgR2l0TGFiIENJL0NELiAoYXV0b21hdGljKSAqL1xuICBBVVRPTUFUSUMgPSBcImF1dG9tYXRpY1wiLFxufVxuXG4vKipcbiAqIEBzY2hlbWEgVG9vbFV2V29ya3NwYWNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVG9vbFV2V29ya3NwYWNlIHtcbiAgLyoqXG4gICAqIFBhY2thZ2VzIHRvIGV4Y2x1ZGUgYXMgd29ya3NwYWNlIG1lbWJlcnMuIElmIGEgcGFja2FnZSBtYXRjaGVzIGJvdGggYG1lbWJlcnNgIGFuZFxuICAgKiBgZXhjbHVkZWAsIGl0IHdpbGwgYmUgZXhjbHVkZWQuXG4gICAqXG4gICAqIFN1cHBvcnRzIGJvdGggZ2xvYnMgYW5kIGV4cGxpY2l0IHBhdGhzLlxuICAgKlxuICAgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgZ2xvYiBzeW50YXgsIHJlZmVyIHRvIHRoZSBbYGdsb2JgIGRvY3VtZW50YXRpb25dKGh0dHBzOi8vZG9jcy5ycy9nbG9iL2xhdGVzdC9nbG9iL3N0cnVjdC5QYXR0ZXJuLmh0bWwpLlxuICAgKlxuICAgKiBAc2NoZW1hIFRvb2xVdldvcmtzcGFjZSNleGNsdWRlXG4gICAqL1xuICByZWFkb25seSBleGNsdWRlPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFBhY2thZ2VzIHRvIGluY2x1ZGUgYXMgd29ya3NwYWNlIG1lbWJlcnMuXG4gICAqXG4gICAqIFN1cHBvcnRzIGJvdGggZ2xvYnMgYW5kIGV4cGxpY2l0IHBhdGhzLlxuICAgKlxuICAgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgZ2xvYiBzeW50YXgsIHJlZmVyIHRvIHRoZSBbYGdsb2JgIGRvY3VtZW50YXRpb25dKGh0dHBzOi8vZG9jcy5ycy9nbG9iL2xhdGVzdC9nbG9iL3N0cnVjdC5QYXR0ZXJuLmh0bWwpLlxuICAgKlxuICAgKiBAc2NoZW1hIFRvb2xVdldvcmtzcGFjZSNtZW1iZXJzXG4gICAqL1xuICByZWFkb25seSBtZW1iZXJzPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gb2JqZWN0IG9mIHR5cGUgJ1Rvb2xVdldvcmtzcGFjZScgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX1Rvb2xVdldvcmtzcGFjZShvYmo6IFRvb2xVdldvcmtzcGFjZSB8IHVuZGVmaW5lZCk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICBpZiAob2JqID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgJ2V4Y2x1ZGUnOiBvYmouZXhjbHVkZT8ubWFwKHkgPT4geSksXG4gICAgJ21lbWJlcnMnOiBvYmoubWVtYmVycz8ubWFwKHkgPT4geSksXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBEYXRhIGluY2x1ZGVzIGZvciB3aGVlbHMuXG4gKlxuICogU2VlIGBCdWlsZEJhY2tlbmRTZXR0aW5nczo6ZGF0YWAuXG4gKlxuICogQHNjaGVtYSBXaGVlbERhdGFJbmNsdWRlc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFdoZWVsRGF0YUluY2x1ZGVzIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgV2hlZWxEYXRhSW5jbHVkZXMjZGF0YVxuICAgKi9cbiAgcmVhZG9ubHkgZGF0YT86IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBXaGVlbERhdGFJbmNsdWRlcyNoZWFkZXJzXG4gICAqL1xuICByZWFkb25seSBoZWFkZXJzPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAc2NoZW1hIFdoZWVsRGF0YUluY2x1ZGVzI3BsYXRsaWJcbiAgICovXG4gIHJlYWRvbmx5IHBsYXRsaWI/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBzY2hlbWEgV2hlZWxEYXRhSW5jbHVkZXMjcHVyZWxpYlxuICAgKi9cbiAgcmVhZG9ubHkgcHVyZWxpYj86IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBXaGVlbERhdGFJbmNsdWRlcyNzY3JpcHRzXG4gICAqL1xuICByZWFkb25seSBzY3JpcHRzPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdXaGVlbERhdGFJbmNsdWRlcycgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX1doZWVsRGF0YUluY2x1ZGVzKG9iajogV2hlZWxEYXRhSW5jbHVkZXMgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdkYXRhJzogb2JqLmRhdGEsXG4gICAgJ2hlYWRlcnMnOiBvYmouaGVhZGVycyxcbiAgICAncGxhdGxpYic6IG9iai5wbGF0bGliLFxuICAgICdwdXJlbGliJzogb2JqLnB1cmVsaWIsXG4gICAgJ3NjcmlwdHMnOiBvYmouc2NyaXB0cyxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIFdoZW4gdG8gdXNlIGF1dGhlbnRpY2F0aW9uLlxuICpcbiAqIEBzY2hlbWEgQXV0aFBvbGljeVxuICovXG5leHBvcnQgZW51bSBBdXRoUG9saWN5IHtcbiAgLyoqIEF1dGhlbnRpY2F0ZSB3aGVuIG5lY2Vzc2FyeS5cblxuSWYgY3JlZGVudGlhbHMgYXJlIHByb3ZpZGVkLCB0aGV5IHdpbGwgYmUgdXNlZC4gT3RoZXJ3aXNlLCBhbiB1bmF1dGhlbnRpY2F0ZWQgcmVxdWVzdCB3aWxsXG5iZSBhdHRlbXB0ZWQgZmlyc3QuIElmIHRoZSByZXF1ZXN0IGZhaWxzLCB1diB3aWxsIHNlYXJjaCBmb3IgY3JlZGVudGlhbHMuIElmIGNyZWRlbnRpYWxzIGFyZVxuZm91bmQsIGFuIGF1dGhlbnRpY2F0ZWQgcmVxdWVzdCB3aWxsIGJlIGF0dGVtcHRlZC4gKGF1dG8pICovXG4gIEFVVE8gPSBcImF1dG9cIixcbiAgLyoqIEFsd2F5cyBhdXRoZW50aWNhdGUuXG5cbklmIGNyZWRlbnRpYWxzIGFyZSBub3QgcHJvdmlkZWQsIHV2IHdpbGwgZWFnZXJseSBzZWFyY2ggZm9yIGNyZWRlbnRpYWxzLiBJZiBjcmVkZW50aWFsc1xuY2Fubm90IGJlIGZvdW5kLCB1diB3aWxsIGVycm9yIGluc3RlYWQgb2YgYXR0ZW1wdGluZyBhbiB1bmF1dGhlbnRpY2F0ZWQgcmVxdWVzdC4gKGFsd2F5cykgKi9cbiAgQUxXQVlTID0gXCJhbHdheXNcIixcbiAgLyoqIE5ldmVyIGF1dGhlbnRpY2F0ZS5cblxuSWYgY3JlZGVudGlhbHMgYXJlIHByb3ZpZGVkLCB1diB3aWxsIGVycm9yLiB1diB3aWxsIG5vdCBzZWFyY2ggZm9yIGNyZWRlbnRpYWxzLiAobmV2ZXIpICovXG4gIE5FVkVSID0gXCJuZXZlclwiLFxufVxuXG4vKipcbiAqIENhY2hlIGNvbnRyb2wgY29uZmlndXJhdGlvbiBmb3IgYW4gaW5kZXguXG4gKlxuICogQHNjaGVtYSBJbmRleENhY2hlQ29udHJvbFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEluZGV4Q2FjaGVDb250cm9sIHtcbiAgLyoqXG4gICAqIENhY2hlIGNvbnRyb2wgaGVhZGVyIGZvciBTaW1wbGUgQVBJIHJlcXVlc3RzLlxuICAgKlxuICAgKiBAc2NoZW1hIEluZGV4Q2FjaGVDb250cm9sI2FwaVxuICAgKi9cbiAgcmVhZG9ubHkgYXBpPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDYWNoZSBjb250cm9sIGhlYWRlciBmb3IgZmlsZSBkb3dubG9hZHMuXG4gICAqXG4gICAqIEBzY2hlbWEgSW5kZXhDYWNoZUNvbnRyb2wjZmlsZXNcbiAgICovXG4gIHJlYWRvbmx5IGZpbGVzPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGFuIG9iamVjdCBvZiB0eXBlICdJbmRleENhY2hlQ29udHJvbCcgdG8gSlNPTiByZXByZXNlbnRhdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuLCBAc3R5bGlzdGljL21heC1sZW4sIHF1b3RlLXByb3BzLCBAc3R5bGlzdGljL3F1b3RlLXByb3BzICovXG5leHBvcnQgZnVuY3Rpb24gdG9Kc29uX0luZGV4Q2FjaGVDb250cm9sKG9iajogSW5kZXhDYWNoZUNvbnRyb2wgfCB1bmRlZmluZWQpOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgdW5kZWZpbmVkIHtcbiAgaWYgKG9iaiA9PT0gdW5kZWZpbmVkKSB7IHJldHVybiB1bmRlZmluZWQ7IH1cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgICdhcGknOiBvYmouYXBpLFxuICAgICdmaWxlcyc6IG9iai5maWxlcyxcbiAgfTtcbiAgLy8gZmlsdGVyIHVuZGVmaW5lZCB2YWx1ZXNcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHJlc3VsdCkucmVkdWNlKChyLCBpKSA9PiAoaVsxXSA9PT0gdW5kZWZpbmVkKSA/IHIgOiAoeyAuLi5yLCBbaVswXV06IGlbMV0gfSksIHt9KTtcbn1cbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiwgQHN0eWxpc3RpYy9tYXgtbGVuLCBxdW90ZS1wcm9wcywgQHN0eWxpc3RpYy9xdW90ZS1wcm9wcyAqL1xuXG4vKipcbiAqIEBzY2hlbWEgSW5kZXhGb3JtYXRcbiAqL1xuZXhwb3J0IGVudW0gSW5kZXhGb3JtYXQge1xuICAvKiogQSBQeVBJLXN0eWxlIGluZGV4IGltcGxlbWVudGluZyB0aGUgU2ltcGxlIFJlcG9zaXRvcnkgQVBJLiAoc2ltcGxlKSAqL1xuICBTSU1QTEUgPSBcInNpbXBsZVwiLFxuICAvKiogQSBgLS1maW5kLWxpbmtzYC1zdHlsZSBpbmRleCBjb250YWluaW5nIGEgZmxhdCBsaXN0IG9mIHdoZWVscyBhbmQgc291cmNlIGRpc3RyaWJ1dGlvbnMuIChmbGF0KSAqL1xuICBGTEFUID0gXCJmbGF0XCIsXG59XG5cbi8qKlxuICogSW5kaWNhdGUgdGhlIHN0eWxlIG9mIGFubm90YXRpb24gY29tbWVudHMsIHVzZWQgdG8gaW5kaWNhdGUgdGhlIGRlcGVuZGVuY2llcyB0aGF0IHJlcXVlc3RlZCBlYWNoXG4gKiBwYWNrYWdlLlxuICpcbiAqIEBzY2hlbWEgQW5ub3RhdGlvblN0eWxlXG4gKi9cbmV4cG9ydCBlbnVtIEFubm90YXRpb25TdHlsZSB7XG4gIC8qKiBSZW5kZXIgdGhlIGFubm90YXRpb25zIG9uIGEgc2luZ2xlLCBjb21tYS1zZXBhcmF0ZWQgbGluZS4gKGxpbmUpICovXG4gIExJTkUgPSBcImxpbmVcIixcbiAgLyoqIFJlbmRlciBlYWNoIGFubm90YXRpb24gb24gaXRzIG93biBsaW5lLiAoc3BsaXQpICovXG4gIFNQTElUID0gXCJzcGxpdFwiLFxufVxuXG4vKipcbiAqIFRoZSBwaXAtY29tcGF0aWJsZSB2YXJpYW50IG9mIGEgW2BHcm91cE5hbWVgXS5cbiAqXG4gKiBFaXRoZXIgPGdyb3VwbmFtZT4gb3IgPHBhdGg+Ojxncm91cG5hbWU+LlxuICogSWYgPHBhdGg+IGlzIG9taXR0ZWQgaXQgZGVmYXVsdHMgdG8gXCJweXByb2plY3QudG9tbFwiLlxuICpcbiAqIEBzY2hlbWEgUGlwR3JvdXBOYW1lXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGlwR3JvdXBOYW1lIHtcbiAgLyoqXG4gICAqIEBzY2hlbWEgUGlwR3JvdXBOYW1lI25hbWVcbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogQHNjaGVtYSBQaXBHcm91cE5hbWUjcGF0aFxuICAgKi9cbiAgcmVhZG9ubHkgcGF0aD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBvYmplY3Qgb2YgdHlwZSAnUGlwR3JvdXBOYW1lJyB0byBKU09OIHJlcHJlc2VudGF0aW9uLlxuICogQGludGVybmFsXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0pzb25fUGlwR3JvdXBOYW1lKG9iajogUGlwR3JvdXBOYW1lIHwgdW5kZWZpbmVkKTogUmVjb3JkPHN0cmluZywgYW55PiB8IHVuZGVmaW5lZCB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9XG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAnbmFtZSc6IG9iai5uYW1lLFxuICAgICdwYXRoJzogb2JqLnBhdGgsXG4gIH07XG4gIC8vIGZpbHRlciB1bmRlZmluZWQgdmFsdWVzXG4gIHJldHVybiBPYmplY3QuZW50cmllcyhyZXN1bHQpLnJlZHVjZSgociwgaSkgPT4gKGlbMV0gPT09IHVuZGVmaW5lZCkgPyByIDogKHsgLi4uciwgW2lbMF1dOiBpWzFdIH0pLCB7fSk7XG59XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4sIEBzdHlsaXN0aWMvbWF4LWxlbiwgcXVvdGUtcHJvcHMsIEBzdHlsaXN0aWMvcXVvdGUtcHJvcHMgKi9cblxuLyoqXG4gKiBUaGUgc3VwcG9ydGVkIHRhcmdldCB0cmlwbGVzLiBFYWNoIHRyaXBsZSBjb25zaXN0cyBvZiBhbiBhcmNoaXRlY3R1cmUsIHZlbmRvciwgYW5kIG9wZXJhdGluZ1xuICogc3lzdGVtLlxuICpcbiAqIFNlZTogPGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvbmlnaHRseS9ydXN0Yy9wbGF0Zm9ybS1zdXBwb3J0Lmh0bWw+XG4gKlxuICogQHNjaGVtYSBUYXJnZXRUcmlwbGVcbiAqL1xuZXhwb3J0IGVudW0gVGFyZ2V0VHJpcGxlIHtcbiAgLyoqIEFuIGFsaWFzIGZvciBgeDg2XzY0LXBjLXdpbmRvd3MtbXN2Y2AsIHRoZSBkZWZhdWx0IHRhcmdldCBmb3IgV2luZG93cy4gKHdpbmRvd3MpICovXG4gIFdJTkRPV1MgPSBcIndpbmRvd3NcIixcbiAgLyoqIEFuIGFsaWFzIGZvciBgeDg2XzY0LXVua25vd24tbGludXgtZ251YCwgdGhlIGRlZmF1bHQgdGFyZ2V0IGZvciBMaW51eC4gKGxpbnV4KSAqL1xuICBMSU5VWCA9IFwibGludXhcIixcbiAgLyoqIEFuIGFsaWFzIGZvciBgYWFyY2g2NC1hcHBsZS1kYXJ3aW5gLCB0aGUgZGVmYXVsdCB0YXJnZXQgZm9yIG1hY09TLiAobWFjb3MpICovXG4gIE1BQ09TID0gXCJtYWNvc1wiLFxuICAvKiogQSA2NC1iaXQgeDg2IFdpbmRvd3MgdGFyZ2V0LiAoeDg2XzY0LXBjLXdpbmRvd3MtbXN2YykgKi9cbiAgWDg2X1VOREVSU0NPUkVfNjRfSFlQSEVOX1BDX0hZUEhFTl9XSU5ET1dTX0hZUEhFTl9NU1ZDID0gXCJ4ODZfNjQtcGMtd2luZG93cy1tc3ZjXCIsXG4gIC8qKiBBbiBBUk02NCBXaW5kb3dzIHRhcmdldC4gKGFhcmNoNjQtcGMtd2luZG93cy1tc3ZjKSAqL1xuICBBQVJDSDY0X0hZUEhFTl9QQ19IWVBIRU5fV0lORE9XU19IWVBIRU5fTVNWQyA9IFwiYWFyY2g2NC1wYy13aW5kb3dzLW1zdmNcIixcbiAgLyoqIEEgMzItYml0IHg4NiBXaW5kb3dzIHRhcmdldC4gKGk2ODYtcGMtd2luZG93cy1tc3ZjKSAqL1xuICBJNjg2X0hZUEhFTl9QQ19IWVBIRU5fV0lORE9XU19IWVBIRU5fTVNWQyA9IFwiaTY4Ni1wYy13aW5kb3dzLW1zdmNcIixcbiAgLyoqIEFuIHg4NiBMaW51eCB0YXJnZXQuIEVxdWl2YWxlbnQgdG8gYHg4Nl82NC1tYW55bGludXhfMl8yOGAuICh4ODZfNjQtdW5rbm93bi1saW51eC1nbnUpICovXG4gIFg4Nl9VTkRFUlNDT1JFXzY0X0hZUEhFTl9VTktOT1dOX0hZUEhFTl9MSU5VWF9IWVBIRU5fR05VID0gXCJ4ODZfNjQtdW5rbm93bi1saW51eC1nbnVcIixcbiAgLyoqIEFuIEFSTS1iYXNlZCBtYWNPUyB0YXJnZXQsIGFzIHNlZW4gb24gQXBwbGUgU2lsaWNvbiBkZXZpY2VzXG5cbkJ5IGRlZmF1bHQsIGFzc3VtZXMgdGhlIGxlYXN0LXJlY2VudCwgbm9uLUVPTCBtYWNPUyB2ZXJzaW9uICgxMy4wKSwgYnV0IHJlc3BlY3RzXG50aGUgYE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVGAgZW52aXJvbm1lbnQgdmFyaWFibGUgaWYgc2V0LiAoYWFyY2g2NC1hcHBsZS1kYXJ3aW4pICovXG4gIEFBUkNINjRfSFlQSEVOX0FQUExFX0hZUEhFTl9EQVJXSU4gPSBcImFhcmNoNjQtYXBwbGUtZGFyd2luXCIsXG4gIC8qKiBBbiB4ODYgbWFjT1MgdGFyZ2V0LlxuXG5CeSBkZWZhdWx0LCBhc3N1bWVzIHRoZSBsZWFzdC1yZWNlbnQsIG5vbi1FT0wgbWFjT1MgdmVyc2lvbiAoMTMuMCksIGJ1dCByZXNwZWN0c1xudGhlIGBNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVRgIGVudmlyb25tZW50IHZhcmlhYmxlIGlmIHNldC4gKHg4Nl82NC1hcHBsZS1kYXJ3aW4pICovXG4gIFg4Nl9VTkRFUlNDT1JFXzY0X0hZUEhFTl9BUFBMRV9IWVBIRU5fREFSV0lOID0gXCJ4ODZfNjQtYXBwbGUtZGFyd2luXCIsXG4gIC8qKiBBbiBBUk02NCBMaW51eCB0YXJnZXQuIEVxdWl2YWxlbnQgdG8gYGFhcmNoNjQtbWFueWxpbnV4XzJfMjhgLiAoYWFyY2g2NC11bmtub3duLWxpbnV4LWdudSkgKi9cbiAgQUFSQ0g2NF9IWVBIRU5fVU5LTk9XTl9IWVBIRU5fTElOVVhfSFlQSEVOX0dOVSA9IFwiYWFyY2g2NC11bmtub3duLWxpbnV4LWdudVwiLFxuICAvKiogQW4gQVJNNjQgTGludXggdGFyZ2V0LiAoYWFyY2g2NC11bmtub3duLWxpbnV4LW11c2wpICovXG4gIEFBUkNINjRfSFlQSEVOX1VOS05PV05fSFlQSEVOX0xJTlVYX0hZUEhFTl9NVVNMID0gXCJhYXJjaDY0LXVua25vd24tbGludXgtbXVzbFwiLFxuICAvKiogQW4gYHg4Nl82NGAgTGludXggdGFyZ2V0LiAoeDg2XzY0LXVua25vd24tbGludXgtbXVzbCkgKi9cbiAgWDg2X1VOREVSU0NPUkVfNjRfSFlQSEVOX1VOS05PV05fSFlQSEVOX0xJTlVYX0hZUEhFTl9NVVNMID0gXCJ4ODZfNjQtdW5rbm93bi1saW51eC1tdXNsXCIsXG4gIC8qKiBBIFJJU0NWNjQgTGludXggdGFyZ2V0LiAocmlzY3Y2NC11bmtub3duLWxpbnV4KSAqL1xuICBSSVNDVjY0X0hZUEhFTl9VTktOT1dOX0hZUEhFTl9MSU5VWCA9IFwicmlzY3Y2NC11bmtub3duLWxpbnV4XCIsXG4gIC8qKiBBbiBgeDg2XzY0YCB0YXJnZXQgZm9yIHRoZSBgbWFueWxpbnV4MjAxNGAgcGxhdGZvcm0uIEVxdWl2YWxlbnQgdG8gYHg4Nl82NC1tYW55bGludXhfMl8xN2AuICh4ODZfNjQtbWFueWxpbnV4MjAxNCkgKi9cbiAgWDg2X1VOREVSU0NPUkVfNjRfSFlQSEVOX01BTllMSU5VWDIwMTQgPSBcIng4Nl82NC1tYW55bGludXgyMDE0XCIsXG4gIC8qKiBBbiBgeDg2XzY0YCB0YXJnZXQgZm9yIHRoZSBgbWFueWxpbnV4XzJfMTdgIHBsYXRmb3JtLiAoeDg2XzY0LW1hbnlsaW51eF8yXzE3KSAqL1xuICBYODZfVU5ERVJTQ09SRV82NF9IWVBIRU5fTUFOWUxJTlVYX1VOREVSU0NPUkVfMl9VTkRFUlNDT1JFXzE3ID0gXCJ4ODZfNjQtbWFueWxpbnV4XzJfMTdcIixcbiAgLyoqIEFuIGB4ODZfNjRgIHRhcmdldCBmb3IgdGhlIGBtYW55bGludXhfMl8yOGAgcGxhdGZvcm0uICh4ODZfNjQtbWFueWxpbnV4XzJfMjgpICovXG4gIFg4Nl9VTkRFUlNDT1JFXzY0X0hZUEhFTl9NQU5ZTElOVVhfVU5ERVJTQ09SRV8yX1VOREVSU0NPUkVfMjggPSBcIng4Nl82NC1tYW55bGludXhfMl8yOFwiLFxuICAvKiogQW4gYHg4Nl82NGAgdGFyZ2V0IGZvciB0aGUgYG1hbnlsaW51eF8yXzMxYCBwbGF0Zm9ybS4gKHg4Nl82NC1tYW55bGludXhfMl8zMSkgKi9cbiAgWDg2X1VOREVSU0NPUkVfNjRfSFlQSEVOX01BTllMSU5VWF9VTkRFUlNDT1JFXzJfVU5ERVJTQ09SRV8zMSA9IFwieDg2XzY0LW1hbnlsaW51eF8yXzMxXCIsXG4gIC8qKiBBbiBgeDg2XzY0YCB0YXJnZXQgZm9yIHRoZSBgbWFueWxpbnV4XzJfMzJgIHBsYXRmb3JtLiAoeDg2XzY0LW1hbnlsaW51eF8yXzMyKSAqL1xuICBYODZfVU5ERVJTQ09SRV82NF9IWVBIRU5fTUFOWUxJTlVYX1VOREVSU0NPUkVfMl9VTkRFUlNDT1JFXzMyID0gXCJ4ODZfNjQtbWFueWxpbnV4XzJfMzJcIixcbiAgLyoqIEFuIGB4ODZfNjRgIHRhcmdldCBmb3IgdGhlIGBtYW55bGludXhfMl8zM2AgcGxhdGZvcm0uICh4ODZfNjQtbWFueWxpbnV4XzJfMzMpICovXG4gIFg4Nl9VTkRFUlNDT1JFXzY0X0hZUEhFTl9NQU5ZTElOVVhfVU5ERVJTQ09SRV8yX1VOREVSU0NPUkVfMzMgPSBcIng4Nl82NC1tYW55bGludXhfMl8zM1wiLFxuICAvKiogQW4gYHg4Nl82NGAgdGFyZ2V0IGZvciB0aGUgYG1hbnlsaW51eF8yXzM0YCBwbGF0Zm9ybS4gKHg4Nl82NC1tYW55bGludXhfMl8zNCkgKi9cbiAgWDg2X1VOREVSU0NPUkVfNjRfSFlQSEVOX01BTllMSU5VWF9VTkRFUlNDT1JFXzJfVU5ERVJTQ09SRV8zNCA9IFwieDg2XzY0LW1hbnlsaW51eF8yXzM0XCIsXG4gIC8qKiBBbiBgeDg2XzY0YCB0YXJnZXQgZm9yIHRoZSBgbWFueWxpbnV4XzJfMzVgIHBsYXRmb3JtLiAoeDg2XzY0LW1hbnlsaW51eF8yXzM1KSAqL1xuICBYODZfVU5ERVJTQ09SRV82NF9IWVBIRU5fTUFOWUxJTlVYX1VOREVSU0NPUkVfMl9VTkRFUlNDT1JFXzM1ID0gXCJ4ODZfNjQtbWFueWxpbnV4XzJfMzVcIixcbiAgLyoqIEFuIGB4ODZfNjRgIHRhcmdldCBmb3IgdGhlIGBtYW55bGludXhfMl8zNmAgcGxhdGZvcm0uICh4ODZfNjQtbWFueWxpbnV4XzJfMzYpICovXG4gIFg4Nl9VTkRFUlNDT1JFXzY0X0hZUEhFTl9NQU5ZTElOVVhfVU5ERVJTQ09SRV8yX1VOREVSU0NPUkVfMzYgPSBcIng4Nl82NC1tYW55bGludXhfMl8zNlwiLFxuICAvKiogQW4gYHg4Nl82NGAgdGFyZ2V0IGZvciB0aGUgYG1hbnlsaW51eF8yXzM3YCBwbGF0Zm9ybS4gKHg4Nl82NC1tYW55bGludXhfMl8zNykgKi9cbiAgWDg2X1VOREVSU0NPUkVfNjRfSFlQSEVOX01BTllMSU5VWF9VTkRFUlNDT1JFXzJfVU5ERVJTQ09SRV8zNyA9IFwieDg2XzY0LW1hbnlsaW51eF8yXzM3XCIsXG4gIC8qKiBBbiBgeDg2XzY0YCB0YXJnZXQgZm9yIHRoZSBgbWFueWxpbnV4XzJfMzhgIHBsYXRmb3JtLiAoeDg2XzY0LW1hbnlsaW51eF8yXzM4KSAqL1xuICBYODZfVU5ERVJTQ09SRV82NF9IWVBIRU5fTUFOWUxJTlVYX1VOREVSU0NPUkVfMl9VTkRFUlNDT1JFXzM4ID0gXCJ4ODZfNjQtbWFueWxpbnV4XzJfMzhcIixcbiAgLyoqIEFuIGB4ODZfNjRgIHRhcmdldCBmb3IgdGhlIGBtYW55bGludXhfMl8zOWAgcGxhdGZvcm0uICh4ODZfNjQtbWFueWxpbnV4XzJfMzkpICovXG4gIFg4Nl9VTkRFUlNDT1JFXzY0X0hZUEhFTl9NQU5ZTElOVVhfVU5ERVJTQ09SRV8yX1VOREVSU0NPUkVfMzkgPSBcIng4Nl82NC1tYW55bGludXhfMl8zOVwiLFxuICAvKiogQW4gYHg4Nl82NGAgdGFyZ2V0IGZvciB0aGUgYG1hbnlsaW51eF8yXzQwYCBwbGF0Zm9ybS4gKHg4Nl82NC1tYW55bGludXhfMl80MCkgKi9cbiAgWDg2X1VOREVSU0NPUkVfNjRfSFlQSEVOX01BTllMSU5VWF9VTkRFUlNDT1JFXzJfVU5ERVJTQ09SRV80MCA9IFwieDg2XzY0LW1hbnlsaW51eF8yXzQwXCIsXG4gIC8qKiBBbiBBUk02NCB0YXJnZXQgZm9yIHRoZSBgbWFueWxpbnV4MjAxNGAgcGxhdGZvcm0uIEVxdWl2YWxlbnQgdG8gYGFhcmNoNjQtbWFueWxpbnV4XzJfMTdgLiAoYWFyY2g2NC1tYW55bGludXgyMDE0KSAqL1xuICBBQVJDSDY0X0hZUEhFTl9NQU5ZTElOVVgyMDE0ID0gXCJhYXJjaDY0LW1hbnlsaW51eDIwMTRcIixcbiAgLyoqIEFuIEFSTTY0IHRhcmdldCBmb3IgdGhlIGBtYW55bGludXhfMl8xN2AgcGxhdGZvcm0uIChhYXJjaDY0LW1hbnlsaW51eF8yXzE3KSAqL1xuICBBQVJDSDY0X0hZUEhFTl9NQU5ZTElOVVhfVU5ERVJTQ09SRV8yX1VOREVSU0NPUkVfMTcgPSBcImFhcmNoNjQtbWFueWxpbnV4XzJfMTdcIixcbiAgLyoqIEFuIEFSTTY0IHRhcmdldCBmb3IgdGhlIGBtYW55bGludXhfMl8yOGAgcGxhdGZvcm0uIChhYXJjaDY0LW1hbnlsaW51eF8yXzI4KSAqL1xuICBBQVJDSDY0X0hZUEhFTl9NQU5ZTElOVVhfVU5ERVJTQ09SRV8yX1VOREVSU0NPUkVfMjggPSBcImFhcmNoNjQtbWFueWxpbnV4XzJfMjhcIixcbiAgLyoqIEFuIEFSTTY0IHRhcmdldCBmb3IgdGhlIGBtYW55bGludXhfMl8zMWAgcGxhdGZvcm0uIChhYXJjaDY0LW1hbnlsaW51eF8yXzMxKSAqL1xuICBBQVJDSDY0X0hZUEhFTl9NQU5ZTElOVVhfVU5ERVJTQ09SRV8yX1VOREVSU0NPUkVfMzEgPSBcImFhcmNoNjQtbWFueWxpbnV4XzJfMzFcIixcbiAgLyoqIEFuIEFSTTY0IHRhcmdldCBmb3IgdGhlIGBtYW55bGludXhfMl8zMmAgcGxhdGZvcm0uIChhYXJjaDY0LW1hbnlsaW51eF8yXzMyKSAqL1xuICBBQVJDSDY0X0hZUEhFTl9NQU5ZTElOVVhfVU5ERVJTQ09SRV8yX1VOREVSU0NPUkVfMzIgPSBcImFhcmNoNjQtbWFueWxpbnV4XzJfMzJcIixcbiAgLyoqIEFuIEFSTTY0IHRhcmdldCBmb3IgdGhlIGBtYW55bGludXhfMl8zM2AgcGxhdGZvcm0uIChhYXJjaDY0LW1hbnlsaW51eF8yXzMzKSAqL1xuICBBQVJDSDY0X0hZUEhFTl9NQU5ZTElOVVhfVU5ERVJTQ09SRV8yX1VOREVSU0NPUkVfMzMgPSBcImFhcmNoNjQtbWFueWxpbnV4XzJfMzNcIixcbiAgLyoqIEFuIEFSTTY0IHRhcmdldCBmb3IgdGhlIGBtYW55bGludXhfMl8zNGAgcGxhdGZvcm0uIChhYXJjaDY0LW1hbnlsaW51eF8yXzM0KSAqL1xuICBBQVJDSDY0X0hZUEhFTl9NQU5ZTElOVVhfVU5ERVJTQ09SRV8yX1VOREVSU0NPUkVfMzQgPSBcImFhcmNoNjQtbWFueWxpbnV4XzJfMzRcIixcbiAgLyoqIEFuIEFSTTY0IHRhcmdldCBmb3IgdGhlIGBtYW55bGludXhfMl8zNWAgcGxhdGZvcm0uIChhYXJjaDY0LW1hbnlsaW51eF8yXzM1KSAqL1xuICBBQVJDSDY0X0hZUEhFTl9NQU5ZTElOVVhfVU5ERVJTQ09SRV8yX1VOREVSU0NPUkVfMzUgPSBcImFhcmNoNjQtbWFueWxpbnV4XzJfMzVcIixcbiAgLyoqIEFuIEFSTTY0IHRhcmdldCBmb3IgdGhlIGBtYW55bGludXhfMl8zNmAgcGxhdGZvcm0uIChhYXJjaDY0LW1hbnlsaW51eF8yXzM2KSAqL1xuICBBQVJDSDY0X0hZUEhFTl9NQU5ZTElOVVhfVU5ERVJTQ09SRV8yX1VOREVSU0NPUkVfMzYgPSBcImFhcmNoNjQtbWFueWxpbnV4XzJfMzZcIixcbiAgLyoqIEFuIEFSTTY0IHRhcmdldCBmb3IgdGhlIGBtYW55bGludXhfMl8zN2AgcGxhdGZvcm0uIChhYXJjaDY0LW1hbnlsaW51eF8yXzM3KSAqL1xuICBBQVJDSDY0X0hZUEhFTl9NQU5ZTElOVVhfVU5ERVJTQ09SRV8yX1VOREVSU0NPUkVfMzcgPSBcImFhcmNoNjQtbWFueWxpbnV4XzJfMzdcIixcbiAgLyoqIEFuIEFSTTY0IHRhcmdldCBmb3IgdGhlIGBtYW55bGludXhfMl8zOGAgcGxhdGZvcm0uIChhYXJjaDY0LW1hbnlsaW51eF8yXzM4KSAqL1xuICBBQVJDSDY0X0hZUEhFTl9NQU5ZTElOVVhfVU5ERVJTQ09SRV8yX1VOREVSU0NPUkVfMzggPSBcImFhcmNoNjQtbWFueWxpbnV4XzJfMzhcIixcbiAgLyoqIEFuIEFSTTY0IHRhcmdldCBmb3IgdGhlIGBtYW55bGludXhfMl8zOWAgcGxhdGZvcm0uIChhYXJjaDY0LW1hbnlsaW51eF8yXzM5KSAqL1xuICBBQVJDSDY0X0hZUEhFTl9NQU5ZTElOVVhfVU5ERVJTQ09SRV8yX1VOREVSU0NPUkVfMzkgPSBcImFhcmNoNjQtbWFueWxpbnV4XzJfMzlcIixcbiAgLyoqIEFuIEFSTTY0IHRhcmdldCBmb3IgdGhlIGBtYW55bGludXhfMl80MGAgcGxhdGZvcm0uIChhYXJjaDY0LW1hbnlsaW51eF8yXzQwKSAqL1xuICBBQVJDSDY0X0hZUEhFTl9NQU5ZTElOVVhfVU5ERVJTQ09SRV8yX1VOREVSU0NPUkVfNDAgPSBcImFhcmNoNjQtbWFueWxpbnV4XzJfNDBcIixcbiAgLyoqIEFuIEFSTTY0IEFuZHJvaWQgdGFyZ2V0LlxuXG5CeSBkZWZhdWx0IHVzZXMgQW5kcm9pZCBBUEkgbGV2ZWwgMjQsIGJ1dCByZXNwZWN0c1xudGhlIGBBTkRST0lEX0FQSV9MRVZFTGAgZW52aXJvbm1lbnQgdmFyaWFibGUgaWYgc2V0LiAoYWFyY2g2NC1saW51eC1hbmRyb2lkKSAqL1xuICBBQVJDSDY0X0hZUEhFTl9MSU5VWF9IWVBIRU5fQU5EUk9JRCA9IFwiYWFyY2g2NC1saW51eC1hbmRyb2lkXCIsXG4gIC8qKiBBbiBgeDg2XzY0YCBBbmRyb2lkIHRhcmdldC5cblxuQnkgZGVmYXVsdCB1c2VzIEFuZHJvaWQgQVBJIGxldmVsIDI0LCBidXQgcmVzcGVjdHNcbnRoZSBgQU5EUk9JRF9BUElfTEVWRUxgIGVudmlyb25tZW50IHZhcmlhYmxlIGlmIHNldC4gKHg4Nl82NC1saW51eC1hbmRyb2lkKSAqL1xuICBYODZfVU5ERVJTQ09SRV82NF9IWVBIRU5fTElOVVhfSFlQSEVOX0FORFJPSUQgPSBcIng4Nl82NC1saW51eC1hbmRyb2lkXCIsXG4gIC8qKiBBIHdhc20zMiB0YXJnZXQgdXNpbmcgdGhlIFB5b2RpZGUgMjAyNCBwbGF0Zm9ybS4gTWVhbnQgZm9yIHVzZSB3aXRoIFB5dGhvbiAzLjEyLlxuU2VlIDxodHRwczovL3B5b2RpZGUub3JnL2VuL3N0YWJsZS9kZXZlbG9wbWVudC9hYmkvMzEyLmh0bWw+ICh3YXNtMzItcHlvZGlkZTIwMjQpICovXG4gIFdBU00zMl9IWVBIRU5fUFlPRElERTIwMjQgPSBcIndhc20zMi1weW9kaWRlMjAyNFwiLFxuICAvKiogQSB3YXNtMzIgdGFyZ2V0IHVzaW5nIHRoZSBQeW9kaWRlIDIwMjUgcGxhdGZvcm0uIE1lYW50IGZvciB1c2Ugd2l0aCBQeXRob24gMy4xMy5cblNlZSA8aHR0cHM6Ly9weW9kaWRlLm9yZy9lbi9zdGFibGUvZGV2ZWxvcG1lbnQvYWJpLzMxMy5odG1sPiAod2FzbTMyLXB5b2RpZGUyMDI1KSAqL1xuICBXQVNNMzJfSFlQSEVOX1BZT0RJREUyMDI1ID0gXCJ3YXNtMzItcHlvZGlkZTIwMjVcIixcbiAgLyoqIEFuIEFSTTY0IHRhcmdldCBmb3IgaU9TIGRldmljZVxuXG5CeSBkZWZhdWx0LCBpT1MgMTMuMCBpcyB1c2VkLCBidXQgcmVzcGVjdHMgdGhlIGBJUEhPTkVPU19ERVBMT1lNRU5UX1RBUkdFVGBcbmVudmlyb25tZW50IHZhcmlhYmxlIGlmIHNldC4gKGFybTY0LWFwcGxlLWlvcykgKi9cbiAgQVJNNjRfSFlQSEVOX0FQUExFX0hZUEhFTl9JT1MgPSBcImFybTY0LWFwcGxlLWlvc1wiLFxuICAvKiogQW4gQVJNNjQgdGFyZ2V0IGZvciBpT1Mgc2ltdWxhdG9yXG5cbkJ5IGRlZmF1bHQsIGlPUyAxMy4wIGlzIHVzZWQsIGJ1dCByZXNwZWN0cyB0aGUgYElQSE9ORU9TX0RFUExPWU1FTlRfVEFSR0VUYFxuZW52aXJvbm1lbnQgdmFyaWFibGUgaWYgc2V0LiAoYXJtNjQtYXBwbGUtaW9zLXNpbXVsYXRvcikgKi9cbiAgQVJNNjRfSFlQSEVOX0FQUExFX0hZUEhFTl9JT1NfSFlQSEVOX1NJTVVMQVRPUiA9IFwiYXJtNjQtYXBwbGUtaW9zLXNpbXVsYXRvclwiLFxuICAvKiogQW4gYHg4Nl82NGAgdGFyZ2V0IGZvciBpT1Mgc2ltdWxhdG9yXG5cbkJ5IGRlZmF1bHQsIGlPUyAxMy4wIGlzIHVzZWQsIGJ1dCByZXNwZWN0cyB0aGUgYElQSE9ORU9TX0RFUExPWU1FTlRfVEFSR0VUYFxuZW52aXJvbm1lbnQgdmFyaWFibGUgaWYgc2V0LiAoeDg2XzY0LWFwcGxlLWlvcy1zaW11bGF0b3IpICovXG4gIFg4Nl9VTkRFUlNDT1JFXzY0X0hZUEhFTl9BUFBMRV9IWVBIRU5fSU9TX0hZUEhFTl9TSU1VTEFUT1IgPSBcIng4Nl82NC1hcHBsZS1pb3Mtc2ltdWxhdG9yXCIsXG59XG4iXX0=