cdktn 0.25.0-pre.2 → 0.25.0-pre.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.jsii +927 -107
- package/lib/annotations.js +4 -4
- package/lib/app.js +54 -5
- package/lib/aspect.js +3 -4
- package/lib/asset-hash.d.ts +75 -0
- package/lib/asset-hash.js +129 -0
- package/lib/assets.d.ts +168 -0
- package/lib/assets.js +128 -0
- package/lib/backends/azurerm-backend.js +4 -6
- package/lib/backends/cloud-backend.js +10 -10
- package/lib/backends/consul-backend.js +4 -6
- package/lib/backends/cos-backend.js +4 -6
- package/lib/backends/gcs-backend.js +4 -6
- package/lib/backends/http-backend.js +4 -6
- package/lib/backends/local-backend.js +38 -7
- package/lib/backends/oss-backend.js +4 -6
- package/lib/backends/pg-backend.js +4 -6
- package/lib/backends/remote-backend.js +8 -10
- package/lib/backends/s3-backend.js +4 -6
- package/lib/backends/swift-backend.js +4 -6
- package/lib/complex-computed-list.js +114 -65
- package/lib/errors.d.ts +6 -0
- package/lib/errors.js +24 -3
- package/lib/functions/provider-function.js +2 -4
- package/lib/functions/terraform-functions.generated.js +2 -4
- package/lib/ignore-strategy.d.ts +82 -0
- package/lib/ignore-strategy.js +29 -0
- package/lib/importable-resource.js +3 -4
- package/lib/index.d.ts +3 -0
- package/lib/index.js +27 -2
- package/lib/manifest.js +56 -14
- package/lib/private/fs.d.ts +74 -2
- package/lib/private/fs.js +129 -17
- package/lib/private/unique.js +35 -2
- package/lib/resource.js +3 -4
- package/lib/synthesize/synthesizer.js +43 -4
- package/lib/terraform-asset.d.ts +33 -2
- package/lib/terraform-asset.js +118 -34
- package/lib/terraform-backend.js +3 -4
- package/lib/terraform-count.js +3 -4
- package/lib/terraform-data-resource.js +12 -10
- package/lib/terraform-data-source.js +10 -4
- package/lib/terraform-dynamic-block.js +5 -2
- package/lib/terraform-dynamic-expression.js +4 -1
- package/lib/terraform-element.js +34 -6
- package/lib/terraform-ephemeral-resource.js +10 -4
- package/lib/terraform-functions.js +2 -4
- package/lib/terraform-hcl-module.js +3 -4
- package/lib/terraform-iterator.js +11 -12
- package/lib/terraform-local.js +3 -4
- package/lib/terraform-module-asset.js +45 -5
- package/lib/terraform-module.js +8 -4
- package/lib/terraform-operators.js +2 -4
- package/lib/terraform-output.js +7 -4
- package/lib/terraform-provider.js +5 -4
- package/lib/terraform-provisioner.js +2 -4
- package/lib/terraform-remote-state.js +5 -5
- package/lib/terraform-resource-targets.js +3 -7
- package/lib/terraform-resource.js +16 -5
- package/lib/terraform-stack.js +38 -38
- package/lib/terraform-variable.js +25 -22
- package/lib/testing/index.js +42 -8
- package/lib/testing/matchers.js +39 -6
- package/lib/tfExpression.js +25 -8
- package/lib/tokens/lazy.js +11 -7
- package/lib/tokens/private/dependency.js +2 -2
- package/lib/tokens/private/encoding.js +6 -1
- package/lib/tokens/private/intrinsic.js +6 -1
- package/lib/tokens/private/resolve.js +2 -5
- package/lib/tokens/private/token-map.js +4 -6
- package/lib/tokens/private/uniqueid.js +35 -2
- package/lib/tokens/resolvable.js +4 -6
- package/lib/tokens/string-fragments.js +6 -10
- package/lib/tokens/token.js +15 -18
- package/lib/upgrade-id-aspect.js +37 -6
- package/lib/validations/target-versions.js +39 -2
- package/lib/validations/validate-binary-version.js +39 -2
- package/lib/validations/validate-function-version-support.js +2 -1
- package/lib/validations/validate-provider-function-target-support.js +2 -1
- package/lib/validations/validate-provider-presence.js +10 -9
- package/lib/validations/validate-terraform-version.js +3 -1
- package/package.json +5 -5
- package/scripts/pack.mjs +57 -15
- package/lib/tsconfig.tsbuildinfo +0 -1
- package/tsconfig.json +0 -40
- package/tsconfig.test.json +0 -12
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var _a;
|
|
3
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
3
|
exports.FnGenerated = void 0;
|
|
5
4
|
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
@@ -12,6 +11,7 @@ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
|
12
11
|
const helpers_1 = require("./helpers");
|
|
13
12
|
// eslint-disable-next-line jsdoc/require-jsdoc
|
|
14
13
|
class FnGenerated {
|
|
14
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.FnGenerated", version: "0.25.0-pre.21" };
|
|
15
15
|
/**
|
|
16
16
|
* {@link https://developer.hashicorp.com/terraform/language/functions/abs abs} returns the absolute value of the given number. In other words, if the number is zero or positive then it is returned as-is, but if it is negative then it is multiplied by -1 to make it positive before returning it.
|
|
17
17
|
* @param {number} num
|
|
@@ -934,6 +934,4 @@ class FnGenerated {
|
|
|
934
934
|
}
|
|
935
935
|
}
|
|
936
936
|
exports.FnGenerated = FnGenerated;
|
|
937
|
-
_a = JSII_RTTI_SYMBOL_1;
|
|
938
|
-
FnGenerated[_a] = { fqn: "cdktn.FnGenerated", version: "0.25.0-pre.2" };
|
|
939
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVycmFmb3JtLWZ1bmN0aW9ucy5nZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZnVuY3Rpb25zL3RlcnJhZm9ybS1mdW5jdGlvbnMuZ2VuZXJhdGVkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsK0JBQStCO0FBQy9CLG1DQUFtQztBQUNuQzs7O0dBR0c7QUFDSCx1Q0FhbUI7QUFDbkIsK0NBQStDO0FBQy9DLE1BQWEsV0FBVztJQUN0Qjs7O09BR0c7SUFDSCxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQVc7UUFDcEIsT0FBTyxJQUFBLGtCQUFRLEVBQUMsSUFBQSwyQkFBaUIsRUFBQyxLQUFLLEVBQUUsQ0FBQyxzQkFBWSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFDRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsT0FBTyxDQUFDLElBQVk7UUFDekIsT0FBTyxJQUFBLGtCQUFRLEVBQUMsSUFBQSwyQkFBaUIsRUFBQyxTQUFTLEVBQUUsQ0FBQyxxQkFBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7SUFDRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsT0FBTyxDQUFDLElBQVc7UUFDeEIsT0FBTyxJQUFBLG1CQUFTLEVBQUMsSUFBQSwyQkFBaUIsRUFBQyxTQUFTLEVBQUUsQ0FBQyxJQUFBLGdCQUFNLEVBQUMsa0JBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFDRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsT0FBTyxDQUFDLElBQVc7UUFDeEIsT0FBTyxJQUFBLG1CQUFTLEVBQUMsSUFBQSwyQkFBaUIsRUFBQyxTQUFTLEVBQUUsQ0FBQyxJQUFBLGdCQUFNLEVBQUMsa0JBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFDRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsWUFBWSxDQUFDLEdBQVc7UUFDN0IsT0FBTyxJQUFBLGtCQUFRLEVBQUMsSUFBQSwyQkFBaUIsRUFBQyxjQUFjLEVBQUUsQ0FBQyxxQkFBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFDRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsWUFBWSxDQUFDLEdBQVc7UUFDN0IsT0FBTyxJQUFBLGtCQUFRLEVBQUMsSUFBQSwyQkFBaUIsRUFBQyxjQUFjLEVBQUUsQ0FBQyxxQkFBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFDRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsWUFBWSxDQUFDLEdBQVc7UUFDN0IsT0FBTyxJQUFBLGtCQUFRLEVBQUMsSUFBQSwyQkFBaUIsRUFBQyxjQUFjLEVBQUUsQ0FBQyxxQkFBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFDRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQVc7UUFDM0IsT0FBTyxJQUFBLGtCQUFRLEVBQUMsSUFBQSwyQkFBaUIsRUFBQyxZQUFZLEVBQUUsQ0FBQyxxQkFBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFDRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsWUFBWSxDQUFDLEdBQVc7UUFDN0IsT0FBTyxJQUFBLGtCQUFRLEVBQUMsSUFBQSwyQkFBaUIsRUFBQyxjQUFjLEVBQUUsQ0FBQyxxQkFBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFDRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsWUFBWSxDQUFDLEdBQVc7UUFDN0IsT0FBTyxJQUFBLGtCQUFRLEVBQUMsSUFBQSwyQkFBaUIsRUFBQyxjQUFjLEVBQUUsQ0FBQyxxQkFBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FB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OztPQUdHO0lBQ0gsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFXO1FBQzNCLE9BQU8sSUFBQSxlQUFLLEVBQUMsSUFBQSwyQkFBaUIsRUFBQyxZQUFZLEVBQUUsQ0FBQyxxQkFBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3BFLENBQUM7SUFDRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsVUFBVSxDQUFDLEtBQVU7UUFDMUIsT0FBTyxJQUFBLGtCQUFRLEVBQUMsSUFBQSwyQkFBaUIsRUFBQyxZQUFZLEVBQUUsQ0FBQyxrQkFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFDRDs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFjLEVBQUUsTUFBVztRQUN2QyxPQUFPLElBQUEsZUFBSyxFQUNWLElBQUEsMkJBQWlCLEVBQUMsUUFBUSxFQUFFLENBQUMsSUFBQSxnQkFBTSxFQUFDLGtCQUFRLENBQUMsRUFBRSxrQkFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQ3hFLENBQUM7SUFDSixDQUFDOztBQXBqQ0gsa0NBcWpDQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgSGFzaGlDb3JwLCBJbmNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNUEwtMi4wXG4vKlxuICogVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBieSB0b29scy9nZW5lcmF0ZS1mdW5jdGlvbi1iaW5kaW5ncy5cbiAqIFRvIHVwZGF0ZSB0aGlzIGZpbGUgZXhlY3V0ZSAncG5wbSBnZW5lcmF0ZS1mdW5jdGlvbi1iaW5kaW5ncycgaW4gdGhlIHJvb3Qgb2YgdGhlIHJlcG9zaXRvcnlcbiAqL1xuaW1wb3J0IHtcbiAgYW55VmFsdWUsXG4gIGFzQW55LFxuICBhc0Jvb2xlYW4sXG4gIGFzTGlzdCxcbiAgYXNOdW1iZXIsXG4gIGFzU3RyaW5nLFxuICBsaXN0T2YsXG4gIG1hcFZhbHVlLFxuICBudW1lcmljVmFsdWUsXG4gIHN0cmluZ1ZhbHVlLFxuICB0ZXJyYWZvcm1GdW5jdGlvbixcbiAgdmFyaWFkaWMsXG59IGZyb20gXCIuL2hlbHBlcnNcIjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG5leHBvcnQgY2xhc3MgRm5HZW5lcmF0ZWQge1xuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9hYnMgYWJzfSByZXR1cm5zIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiB0aGUgZ2l2ZW4gbnVtYmVyLiBJbiBvdGhlciB3b3JkcywgaWYgdGhlIG51bWJlciBpcyB6ZXJvIG9yIHBvc2l0aXZlIHRoZW4gaXQgaXMgcmV0dXJuZWQgYXMtaXMsIGJ1dCBpZiBpdCBpcyBuZWdhdGl2ZSB0aGVuIGl0IGlzIG11bHRpcGxpZWQgYnkgLTEgdG8gbWFrZSBpdCBwb3NpdGl2ZSBiZWZvcmUgcmV0dXJuaW5nIGl0LlxuICAgKiBAcGFyYW0ge251bWJlcn0gbnVtXG4gICAqL1xuICBzdGF0aWMgYWJzKG51bTogbnVtYmVyKSB7XG4gICAgcmV0dXJuIGFzTnVtYmVyKHRlcnJhZm9ybUZ1bmN0aW9uKFwiYWJzXCIsIFtudW1lcmljVmFsdWVdKShudW0pKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9hYnNwYXRoIGFic3BhdGh9IHRha2VzIGEgc3RyaW5nIGNvbnRhaW5pbmcgYSBmaWxlc3lzdGVtIHBhdGggYW5kIGNvbnZlcnRzIGl0IHRvIGFuIGFic29sdXRlIHBhdGguIFRoYXQgaXMsIGlmIHRoZSBwYXRoIGlzIG5vdCBhYnNvbHV0ZSwgaXQgd2lsbCBiZSBqb2luZWQgd2l0aCB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcbiAgICovXG4gIHN0YXRpYyBhYnNwYXRoKHBhdGg6IHN0cmluZykge1xuICAgIHJldHVybiBhc1N0cmluZyh0ZXJyYWZvcm1GdW5jdGlvbihcImFic3BhdGhcIiwgW3N0cmluZ1ZhbHVlXSkocGF0aCkpO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL2FsbHRydWUgYWxsdHJ1ZX0gcmV0dXJucyBgdHJ1ZWAgaWYgYWxsIGVsZW1lbnRzIGluIGEgZ2l2ZW4gY29sbGVjdGlvbiBhcmUgYHRydWVgIG9yIGBcInRydWVcImAuIEl0IGFsc28gcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGNvbGxlY3Rpb24gaXMgZW1wdHkuXG4gICAqIEBwYXJhbSB7QXJyYXk8YW55Pn0gbGlzdFxuICAgKi9cbiAgc3RhdGljIGFsbHRydWUobGlzdDogYW55W10pIHtcbiAgICByZXR1cm4gYXNCb29sZWFuKHRlcnJhZm9ybUZ1bmN0aW9uKFwiYWxsdHJ1ZVwiLCBbbGlzdE9mKGFueVZhbHVlKV0pKGxpc3QpKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9hbnl0cnVlIGFueXRydWV9IHJldHVybnMgYHRydWVgIGlmIGFueSBlbGVtZW50IGluIGEgZ2l2ZW4gY29sbGVjdGlvbiBpcyBgdHJ1ZWAgb3IgYFwidHJ1ZVwiYC4gSXQgYWxzbyByZXR1cm5zIGBmYWxzZWAgaWYgdGhlIGNvbGxlY3Rpb24gaXMgZW1wdHkuXG4gICAqIEBwYXJhbSB7QXJyYXk8YW55Pn0gbGlzdFxuICAgKi9cbiAgc3RhdGljIGFueXRydWUobGlzdDogYW55W10pIHtcbiAgICByZXR1cm4gYXNCb29sZWFuKHRlcnJhZm9ybUZ1bmN0aW9uKFwiYW55dHJ1ZVwiLCBbbGlzdE9mKGFueVZhbHVlKV0pKGxpc3QpKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9iYXNlNjRkZWNvZGUgYmFzZTY0ZGVjb2RlfSB0YWtlcyBhIHN0cmluZyBjb250YWluaW5nIGEgQmFzZTY0IGNoYXJhY3RlciBzZXF1ZW5jZSBhbmQgcmV0dXJucyB0aGUgb3JpZ2luYWwgc3RyaW5nLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gICAqL1xuICBzdGF0aWMgYmFzZTY0ZGVjb2RlKHN0cjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGFzU3RyaW5nKHRlcnJhZm9ybUZ1bmN0aW9uKFwiYmFzZTY0ZGVjb2RlXCIsIFtzdHJpbmdWYWx1ZV0pKHN0cikpO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL2Jhc2U2NGVuY29kZSBiYXNlNjRlbmNvZGV9IGFwcGxpZXMgQmFzZTY0IGVuY29kaW5nIHRvIGEgc3RyaW5nLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gICAqL1xuICBzdGF0aWMgYmFzZTY0ZW5jb2RlKHN0cjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGFzU3RyaW5nKHRlcnJhZm9ybUZ1bmN0aW9uKFwiYmFzZTY0ZW5jb2RlXCIsIFtzdHJpbmdWYWx1ZV0pKHN0cikpO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9vcGVudG9mdS5vcmcvZG9jcy9sYW5ndWFnZS9mdW5jdGlvbnMvYmFzZTY0Z3VuemlwIGJhc2U2NGd1bnppcH0gZGVjb2RlcyBhIEJhc2U2NC1lbmNvZGVkIHN0cmluZyBhbmQgdW5jb21wcmVzc2VzIHRoZSByZXN1bHQgd2l0aCBnemlwLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gICAqL1xuICBzdGF0aWMgYmFzZTY0Z3VuemlwKHN0cjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGFzU3RyaW5nKHRlcnJhZm9ybUZ1bmN0aW9uKFwiYmFzZTY0Z3VuemlwXCIsIFtzdHJpbmdWYWx1ZV0pKHN0cikpO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL2Jhc2U2NGd6aXAgYmFzZTY0Z3ppcH0gY29tcHJlc3NlcyBhIHN0cmluZyB3aXRoIGd6aXAgYW5kIHRoZW4gZW5jb2RlcyB0aGUgcmVzdWx0IGluIEJhc2U2NCBlbmNvZGluZy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKi9cbiAgc3RhdGljIGJhc2U2NGd6aXAoc3RyOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNTdHJpbmcodGVycmFmb3JtRnVuY3Rpb24oXCJiYXNlNjRnemlwXCIsIFtzdHJpbmdWYWx1ZV0pKHN0cikpO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL2Jhc2U2NHNoYTI1NiBiYXNlNjRzaGEyNTZ9IGNvbXB1dGVzIHRoZSBTSEEyNTYgaGFzaCBvZiBhIGdpdmVuIHN0cmluZyBhbmQgZW5jb2RlcyBpdCB3aXRoIEJhc2U2NC4gVGhpcyBpcyBub3QgZXF1aXZhbGVudCB0byBgYmFzZTY0ZW5jb2RlKHNoYTI1NihcInRlc3RcIikpYCBzaW5jZSBgc2hhMjU2KClgIHJldHVybnMgaGV4YWRlY2ltYWwgcmVwcmVzZW50YXRpb24uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAgICovXG4gIHN0YXRpYyBiYXNlNjRzaGEyNTYoc3RyOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNTdHJpbmcodGVycmFmb3JtRnVuY3Rpb24oXCJiYXNlNjRzaGEyNTZcIiwgW3N0cmluZ1ZhbHVlXSkoc3RyKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvYmFzZTY0c2hhNTEyIGJhc2U2NHNoYTUxMn0gY29tcHV0ZXMgdGhlIFNIQTUxMiBoYXNoIG9mIGEgZ2l2ZW4gc3RyaW5nIGFuZCBlbmNvZGVzIGl0IHdpdGggQmFzZTY0LiBUaGlzIGlzIG5vdCBlcXVpdmFsZW50IHRvIGBiYXNlNjRlbmNvZGUoc2hhNTEyKFwidGVzdFwiKSlgIHNpbmNlIGBzaGE1MTIoKWAgcmV0dXJucyBoZXhhZGVjaW1hbCByZXByZXNlbnRhdGlvbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKi9cbiAgc3RhdGljIGJhc2U2NHNoYTUxMihzdHI6IHN0cmluZykge1xuICAgIHJldHVybiBhc1N0cmluZyh0ZXJyYWZvcm1GdW5jdGlvbihcImJhc2U2NHNoYTUxMlwiLCBbc3RyaW5nVmFsdWVdKShzdHIpKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9iYXNlbmFtZSBiYXNlbmFtZX0gdGFrZXMgYSBzdHJpbmcgY29udGFpbmluZyBhIGZpbGVzeXN0ZW0gcGF0aCBhbmQgcmVtb3ZlcyBhbGwgZXhjZXB0IHRoZSBsYXN0IHBvcnRpb24gZnJvbSBpdC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcbiAgICovXG4gIHN0YXRpYyBiYXNlbmFtZShwYXRoOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNTdHJpbmcodGVycmFmb3JtRnVuY3Rpb24oXCJiYXNlbmFtZVwiLCBbc3RyaW5nVmFsdWVdKShwYXRoKSk7XG4gIH1cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL2JjcnlwdCBiY3J5cHR9IGNvbXB1dGVzIGEgaGFzaCBvZiB0aGUgZ2l2ZW4gc3RyaW5nIHVzaW5nIHRoZSBCbG93ZmlzaCBjaXBoZXIsIHJldHVybmluZyBhIHN0cmluZyBpbiBbdGhlIF9Nb2R1bGFyIENyeXB0IEZvcm1hdF9dKGh0dHBzOi8vcGFzc2xpYi5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvbW9kdWxhcl9jcnlwdF9mb3JtYXQuaHRtbCkgdXN1YWxseSBleHBlY3RlZCBpbiB0aGUgc2hhZG93IHBhc3N3b3JkIGZpbGUgb24gbWFueSBVbml4IHN5c3RlbXMuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAgICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBjb3N0XG4gICAqL1xuICBzdGF0aWMgX2JjcnlwdChzdHI6IHN0cmluZywgY29zdDogbnVtYmVyW10pIHtcbiAgICByZXR1cm4gYXNTdHJpbmcoXG4gICAgICB0ZXJyYWZvcm1GdW5jdGlvbihcImJjcnlwdFwiLCBbc3RyaW5nVmFsdWUsIHZhcmlhZGljKG51bWVyaWNWYWx1ZSldKShcbiAgICAgICAgc3RyLFxuICAgICAgICBjb3N0LFxuICAgICAgKSxcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL2NhbiBjYW59IGV2YWx1YXRlcyB0aGUgZ2l2ZW4gZXhwcmVzc2lvbiBhbmQgcmV0dXJucyBhIGJvb2xlYW4gdmFsdWUgaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBleHByZXNzaW9uIHByb2R1Y2VkIGEgcmVzdWx0IHdpdGhvdXQgYW55IGVycm9ycy5cbiAgICogQHBhcmFtIHthbnl9IGV4cHJlc3Npb25cbiAgICovXG4gIHN0YXRpYyBjYW4oZXhwcmVzc2lvbjogYW55KSB7XG4gICAgcmV0dXJuIGFzQm9vbGVhbih0ZXJyYWZvcm1GdW5jdGlvbihcImNhblwiLCBbYW55VmFsdWVdKShleHByZXNzaW9uKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvY2VpbCBjZWlsfSByZXR1cm5zIHRoZSBjbG9zZXN0IHdob2xlIG51bWJlciB0aGF0IGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgZ2l2ZW4gdmFsdWUsIHdoaWNoIG1heSBiZSBhIGZyYWN0aW9uLlxuICAgKiBAcGFyYW0ge251bWJlcn0gbnVtXG4gICAqL1xuICBzdGF0aWMgY2VpbChudW06IG51bWJlcikge1xuICAgIHJldHVybiBhc051bWJlcih0ZXJyYWZvcm1GdW5jdGlvbihcImNlaWxcIiwgW251bWVyaWNWYWx1ZV0pKG51bSkpO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL2Nob21wIGNob21wfSByZW1vdmVzIG5ld2xpbmUgY2hhcmFjdGVycyBhdCB0aGUgZW5kIG9mIGEgc3RyaW5nLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gICAqL1xuICBzdGF0aWMgY2hvbXAoc3RyOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNTdHJpbmcodGVycmFmb3JtRnVuY3Rpb24oXCJjaG9tcFwiLCBbc3RyaW5nVmFsdWVdKShzdHIpKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9jaHVua2xpc3QgY2h1bmtsaXN0fSBzcGxpdHMgYSBzaW5nbGUgbGlzdCBpbnRvIGZpeGVkLXNpemUgY2h1bmtzLCByZXR1cm5pbmcgYSBsaXN0IG9mIGxpc3RzLlxuICAgKiBAcGFyYW0ge0FycmF5PGFueT59IGxpc3RcbiAgICogQHBhcmFtIHtudW1iZXJ9IHNpemVcbiAgICovXG4gIHN0YXRpYyBjaHVua2xpc3QobGlzdDogYW55W10sIHNpemU6IG51bWJlcikge1xuICAgIHJldHVybiBhc0xpc3QoXG4gICAgICB0ZXJyYWZvcm1GdW5jdGlvbihcImNodW5rbGlzdFwiLCBbbGlzdE9mKGFueVZhbHVlKSwgbnVtZXJpY1ZhbHVlXSkoXG4gICAgICAgIGxpc3QsXG4gICAgICAgIHNpemUsXG4gICAgICApLFxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL29wZW50b2Z1Lm9yZy9kb2NzL2xhbmd1YWdlL2Z1bmN0aW9ucy9jaWRyY29udGFpbnMgY2lkcmNvbnRhaW5zfSBkZXRlcm1pbmVzIHdoZXRoZXIgYSBnaXZlbiBJUCBhZGRyZXNzIG9yIGFuIGFkZHJlc3MgcHJlZml4IGdpdmVuIGluIENJRFIgbm90YXRpb24gaXMgd2l0aGluIGEgZ2l2ZW4gSVAgbmV0d29yayBhZGRyZXNzIHByZWZpeC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGNvbnRhaW5pbmdfcHJlZml4XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjb250YWluZWRfaXBfb3JfcHJlZml4XG4gICAqL1xuICBzdGF0aWMgY2lkcmNvbnRhaW5zKFxuICAgIGNvbnRhaW5pbmdfcHJlZml4OiBzdHJpbmcsXG4gICAgY29udGFpbmVkX2lwX29yX3ByZWZpeDogc3RyaW5nLFxuICApIHtcbiAgICByZXR1cm4gYXNCb29sZWFuKFxuICAgICAgdGVycmFmb3JtRnVuY3Rpb24oXCJjaWRyY29udGFpbnNcIiwgW3N0cmluZ1ZhbHVlLCBzdHJpbmdWYWx1ZV0pKFxuICAgICAgICBjb250YWluaW5nX3ByZWZpeCxcbiAgICAgICAgY29udGFpbmVkX2lwX29yX3ByZWZpeCxcbiAgICAgICksXG4gICAgKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9jaWRyaG9zdCBjaWRyaG9zdH0gY2FsY3VsYXRlcyBhIGZ1bGwgaG9zdCBJUCBhZGRyZXNzIGZvciBhIGdpdmVuIGhvc3QgbnVtYmVyIHdpdGhpbiBhIGdpdmVuIElQIG5ldHdvcmsgYWRkcmVzcyBwcmVmaXguXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwcmVmaXhcbiAgICogQHBhcmFtIHtudW1iZXJ9IGhvc3RudW1cbiAgICovXG4gIHN0YXRpYyBjaWRyaG9zdChwcmVmaXg6IHN0cmluZywgaG9zdG51bTogbnVtYmVyKSB7XG4gICAgcmV0dXJuIGFzU3RyaW5nKFxuICAgICAgdGVycmFmb3JtRnVuY3Rpb24oXCJjaWRyaG9zdFwiLCBbc3RyaW5nVmFsdWUsIG51bWVyaWNWYWx1ZV0pKFxuICAgICAgICBwcmVmaXgsXG4gICAgICAgIGhvc3RudW0sXG4gICAgICApLFxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvY2lkcm5ldG1hc2sgY2lkcm5ldG1hc2t9IGNvbnZlcnRzIGFuIElQdjQgYWRkcmVzcyBwcmVmaXggZ2l2ZW4gaW4gQ0lEUiBub3RhdGlvbiBpbnRvIGEgc3VibmV0IG1hc2sgYWRkcmVzcy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHByZWZpeFxuICAgKi9cbiAgc3RhdGljIGNpZHJuZXRtYXNrKHByZWZpeDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGFzU3RyaW5nKHRlcnJhZm9ybUZ1bmN0aW9uKFwiY2lkcm5ldG1hc2tcIiwgW3N0cmluZ1ZhbHVlXSkocHJlZml4KSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvY2lkcnN1Ym5ldCBjaWRyc3VibmV0fSBjYWxjdWxhdGVzIGEgc3VibmV0IGFkZHJlc3Mgd2l0aGluIGdpdmVuIElQIG5ldHdvcmsgYWRkcmVzcyBwcmVmaXguXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwcmVmaXhcbiAgICogQHBhcmFtIHtudW1iZXJ9IG5ld2JpdHNcbiAgICogQHBhcmFtIHtudW1iZXJ9IG5ldG51bVxuICAgKi9cbiAgc3RhdGljIGNpZHJzdWJuZXQocHJlZml4OiBzdHJpbmcsIG5ld2JpdHM6IG51bWJlciwgbmV0bnVtOiBudW1iZXIpIHtcbiAgICByZXR1cm4gYXNTdHJpbmcoXG4gICAgICB0ZXJyYWZvcm1GdW5jdGlvbihcImNpZHJzdWJuZXRcIiwgW1xuICAgICAgICBzdHJpbmdWYWx1ZSxcbiAgICAgICAgbnVtZXJpY1ZhbHVlLFxuICAgICAgICBudW1lcmljVmFsdWUsXG4gICAgICBdKShwcmVmaXgsIG5ld2JpdHMsIG5ldG51bSksXG4gICAgKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9jaWRyc3VibmV0cyBjaWRyc3VibmV0c30gY2FsY3VsYXRlcyBhIHNlcXVlbmNlIG9mIGNvbnNlY3V0aXZlIElQIGFkZHJlc3MgcmFuZ2VzIHdpdGhpbiBhIHBhcnRpY3VsYXIgQ0lEUiBwcmVmaXguXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwcmVmaXhcbiAgICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBuZXdiaXRzXG4gICAqL1xuICBzdGF0aWMgY2lkcnN1Ym5ldHMocHJlZml4OiBzdHJpbmcsIG5ld2JpdHM6IG51bWJlcltdKSB7XG4gICAgcmV0dXJuIGFzTGlzdChcbiAgICAgIHRlcnJhZm9ybUZ1bmN0aW9uKFwiY2lkcnN1Ym5ldHNcIiwgW3N0cmluZ1ZhbHVlLCB2YXJpYWRpYyhudW1lcmljVmFsdWUpXSkoXG4gICAgICAgIHByZWZpeCxcbiAgICAgICAgbmV3Yml0cyxcbiAgICAgICksXG4gICAgKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9jb2FsZXNjZSBjb2FsZXNjZX0gdGFrZXMgYW55IG51bWJlciBvZiBhcmd1bWVudHMgYW5kIHJldHVybnMgdGhlIGZpcnN0IG9uZSB0aGF0IGlzbid0IG51bGwgb3IgYW4gZW1wdHkgc3RyaW5nLlxuICAgKiBAcGFyYW0ge0FycmF5PGFueT59IHZhbHNcbiAgICovXG4gIHN0YXRpYyBjb2FsZXNjZSh2YWxzOiBhbnlbXSkge1xuICAgIHJldHVybiBhc0FueSh0ZXJyYWZvcm1GdW5jdGlvbihcImNvYWxlc2NlXCIsIFt2YXJpYWRpYyhhbnlWYWx1ZSldKSh2YWxzKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvY29hbGVzY2VsaXN0IGNvYWxlc2NlbGlzdH0gdGFrZXMgYW55IG51bWJlciBvZiBsaXN0IGFyZ3VtZW50cyBhbmQgcmV0dXJucyB0aGUgZmlyc3Qgb25lIHRoYXQgaXNuJ3QgZW1wdHkuXG4gICAqIEBwYXJhbSB7QXJyYXk8YW55Pn0gdmFsc1xuICAgKi9cbiAgc3RhdGljIGNvYWxlc2NlbGlzdCh2YWxzOiBhbnlbXSkge1xuICAgIHJldHVybiBhc0FueSh0ZXJyYWZvcm1GdW5jdGlvbihcImNvYWxlc2NlbGlzdFwiLCBbdmFyaWFkaWMoYW55VmFsdWUpXSkodmFscykpO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL2NvbXBhY3QgY29tcGFjdH0gdGFrZXMgYSBsaXN0IG9mIHN0cmluZ3MgYW5kIHJldHVybnMgYSBuZXcgbGlzdCB3aXRoIGFueSBlbXB0eSBzdHJpbmcgZWxlbWVudHMgcmVtb3ZlZC5cbiAgICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSBsaXN0XG4gICAqL1xuICBzdGF0aWMgY29tcGFjdChsaXN0OiBzdHJpbmdbXSkge1xuICAgIHJldHVybiBhc0xpc3QodGVycmFmb3JtRnVuY3Rpb24oXCJjb21wYWN0XCIsIFtsaXN0T2YoYW55VmFsdWUpXSkobGlzdCkpO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL2NvbmNhdCBjb25jYXR9IHRha2VzIHR3byBvciBtb3JlIGxpc3RzIGFuZCBjb21iaW5lcyB0aGVtIGludG8gYSBzaW5nbGUgbGlzdC5cbiAgICogQHBhcmFtIHtBcnJheTxhbnk+fSBzZXFzXG4gICAqL1xuICBzdGF0aWMgY29uY2F0KHNlcXM6IGFueVtdKSB7XG4gICAgcmV0dXJuIGFzQW55KHRlcnJhZm9ybUZ1bmN0aW9uKFwiY29uY2F0XCIsIFt2YXJpYWRpYyhhbnlWYWx1ZSldKShzZXFzKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvY29udGFpbnMgY29udGFpbnN9IGRldGVybWluZXMgd2hldGhlciBhIGdpdmVuIGxpc3Qgb3Igc2V0IGNvbnRhaW5zIGEgZ2l2ZW4gc2luZ2xlIHZhbHVlIGFzIG9uZSBvZiBpdHMgZWxlbWVudHMuXG4gICAqIEBwYXJhbSB7YW55fSBsaXN0XG4gICAqIEBwYXJhbSB7YW55fSB2YWx1ZVxuICAgKi9cbiAgc3RhdGljIGNvbnRhaW5zKGxpc3Q6IGFueSwgdmFsdWU6IGFueSkge1xuICAgIHJldHVybiBhc0FueShcbiAgICAgIHRlcnJhZm9ybUZ1bmN0aW9uKFwiY29udGFpbnNcIiwgW2FueVZhbHVlLCBhbnlWYWx1ZV0pKGxpc3QsIHZhbHVlKSxcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL2NvbnZlcnQgY29udmVydH0gY29udmVydHMgYSB2YWx1ZSB0byB0aGUgZ2l2ZW4gdHlwZSBjb25zdHJhaW50LlxuICAgKiBAcGFyYW0ge2FueX0gdmFsdWVcbiAgICogQHBhcmFtIHthbnl9IHR5cGVcbiAgICovXG4gIHN0YXRpYyBjb252ZXJ0KHZhbHVlOiBhbnksIHR5cGU6IGFueSkge1xuICAgIHJldHVybiBhc0FueShcbiAgICAgIHRlcnJhZm9ybUZ1bmN0aW9uKFwiY29udmVydFwiLCBbYW55VmFsdWUsIGFueVZhbHVlXSkodmFsdWUsIHR5cGUpLFxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvY3N2ZGVjb2RlIGNzdmRlY29kZX0gZGVjb2RlcyBhIHN0cmluZyBjb250YWluaW5nIENTVi1mb3JtYXR0ZWQgZGF0YSBhbmQgcHJvZHVjZXMgYSBsaXN0IG9mIG1hcHMgcmVwcmVzZW50aW5nIHRoYXQgZGF0YS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKi9cbiAgc3RhdGljIGNzdmRlY29kZShzdHI6IHN0cmluZykge1xuICAgIHJldHVybiBhc0FueSh0ZXJyYWZvcm1GdW5jdGlvbihcImNzdmRlY29kZVwiLCBbc3RyaW5nVmFsdWVdKShzdHIpKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9kaXJuYW1lIGRpcm5hbWV9IHRha2VzIGEgc3RyaW5nIGNvbnRhaW5pbmcgYSBmaWxlc3lzdGVtIHBhdGggYW5kIHJlbW92ZXMgdGhlIGxhc3QgcG9ydGlvbiBmcm9tIGl0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuICAgKi9cbiAgc3RhdGljIGRpcm5hbWUocGF0aDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGFzU3RyaW5nKHRlcnJhZm9ybUZ1bmN0aW9uKFwiZGlybmFtZVwiLCBbc3RyaW5nVmFsdWVdKShwYXRoKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvZGlzdGluY3QgZGlzdGluY3R9IHRha2VzIGEgbGlzdCBhbmQgcmV0dXJucyBhIG5ldyBsaXN0IHdpdGggYW55IGR1cGxpY2F0ZSBlbGVtZW50cyByZW1vdmVkLlxuICAgKiBAcGFyYW0ge0FycmF5PGFueT59IGxpc3RcbiAgICovXG4gIHN0YXRpYyBkaXN0aW5jdChsaXN0OiBhbnlbXSkge1xuICAgIHJldHVybiBhc0xpc3QodGVycmFmb3JtRnVuY3Rpb24oXCJkaXN0aW5jdFwiLCBbbGlzdE9mKGFueVZhbHVlKV0pKGxpc3QpKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9lbGVtZW50IGVsZW1lbnR9IHJldHJpZXZlcyBhIHNpbmdsZSBlbGVtZW50IGZyb20gYSBsaXN0LlxuICAgKiBAcGFyYW0ge2FueX0gbGlzdFxuICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAgICovXG4gIHN0YXRpYyBlbGVtZW50KGxpc3Q6IGFueSwgaW5kZXg6IG51bWJlcikge1xuICAgIHJldHVybiBhc0FueShcbiAgICAgIHRlcnJhZm9ybUZ1bmN0aW9uKFwiZWxlbWVudFwiLCBbYW55VmFsdWUsIG51bWVyaWNWYWx1ZV0pKGxpc3QsIGluZGV4KSxcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL2VuZHN3aXRoIGVuZHN3aXRofSB0YWtlcyB0d28gdmFsdWVzOiBhIHN0cmluZyB0byBjaGVjayBhbmQgYSBzdWZmaXggc3RyaW5nLiBUaGUgZnVuY3Rpb24gcmV0dXJucyB0cnVlIGlmIHRoZSBmaXJzdCBzdHJpbmcgZW5kcyB3aXRoIHRoYXQgZXhhY3Qgc3VmZml4LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdWZmaXhcbiAgICovXG4gIHN0YXRpYyBlbmRzd2l0aChzdHI6IHN0cmluZywgc3VmZml4OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNCb29sZWFuKFxuICAgICAgdGVycmFmb3JtRnVuY3Rpb24oXCJlbmRzd2l0aFwiLCBbc3RyaW5nVmFsdWUsIHN0cmluZ1ZhbHVlXSkoc3RyLCBzdWZmaXgpLFxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvZXBoZW1lcmFsYXNudWxsIGVwaGVtZXJhbGFzbnVsbH0gdGFrZXMgYSB2YWx1ZSBvZiBhbnkgdHlwZSBhbmQgcmV0dXJucyBhIHNpbWlsYXIgdmFsdWUgb2YgdGhlIHNhbWUgdHlwZSB3aXRoIGFueSBlcGhlbWVyYWwgdmFsdWVzIHJlcGxhY2VkIHdpdGggbm9uLWVwaGVtZXJhbCBudWxsIHZhbHVlcyBhbmQgYWxsIG5vbi1lcGhlbWVyYWwgdmFsdWVzIHByZXNlcnZlZC5cbiAgICogQHBhcmFtIHthbnl9IHZhbHVlXG4gICAqL1xuICBzdGF0aWMgZXBoZW1lcmFsYXNudWxsKHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gYXNBbnkodGVycmFmb3JtRnVuY3Rpb24oXCJlcGhlbWVyYWxhc251bGxcIiwgW2FueVZhbHVlXSkodmFsdWUpKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9maWxlIGZpbGV9IHJlYWRzIHRoZSBjb250ZW50cyBvZiBhIGZpbGUgYXQgdGhlIGdpdmVuIHBhdGggYW5kIHJldHVybnMgdGhlbSBhcyBhIHN0cmluZy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcbiAgICovXG4gIHN0YXRpYyBmaWxlKHBhdGg6IHN0cmluZykge1xuICAgIHJldHVybiBhc1N0cmluZyh0ZXJyYWZvcm1GdW5jdGlvbihcImZpbGVcIiwgW3N0cmluZ1ZhbHVlXSkocGF0aCkpO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL2ZpbGViYXNlNjQgZmlsZWJhc2U2NH0gcmVhZHMgdGhlIGNvbnRlbnRzIG9mIGEgZmlsZSBhdCB0aGUgZ2l2ZW4gcGF0aCBhbmQgcmV0dXJucyB0aGVtIGFzIGEgYmFzZTY0LWVuY29kZWQgc3RyaW5nLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuICAgKi9cbiAgc3RhdGljIGZpbGViYXNlNjQocGF0aDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGFzU3RyaW5nKHRlcnJhZm9ybUZ1bmN0aW9uKFwiZmlsZWJhc2U2NFwiLCBbc3RyaW5nVmFsdWVdKShwYXRoKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvZmlsZWJhc2U2NHNoYTI1NiBmaWxlYmFzZTY0c2hhMjU2fSBpcyBhIHZhcmlhbnQgb2YgYGJhc2U2NHNoYTI1NmAgdGhhdCBoYXNoZXMgdGhlIGNvbnRlbnRzIG9mIGEgZ2l2ZW4gZmlsZSByYXRoZXIgdGhhbiBhIGxpdGVyYWwgc3RyaW5nLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuICAgKi9cbiAgc3RhdGljIGZpbGViYXNlNjRzaGEyNTYocGF0aDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGFzU3RyaW5nKHRlcnJhZm9ybUZ1bmN0aW9uKFwiZmlsZWJhc2U2NHNoYTI1NlwiLCBbc3RyaW5nVmFsdWVdKShwYXRoKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvZmlsZWJhc2U2NHNoYTUxMiBmaWxlYmFzZTY0c2hhNTEyfSBpcyBhIHZhcmlhbnQgb2YgYGJhc2U2NHNoYTUxMmAgdGhhdCBoYXNoZXMgdGhlIGNvbnRlbnRzIG9mIGEgZ2l2ZW4gZmlsZSByYXRoZXIgdGhhbiBhIGxpdGVyYWwgc3RyaW5nLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuICAgKi9cbiAgc3RhdGljIGZpbGViYXNlNjRzaGE1MTIocGF0aDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGFzU3RyaW5nKHRlcnJhZm9ybUZ1bmN0aW9uKFwiZmlsZWJhc2U2NHNoYTUxMlwiLCBbc3RyaW5nVmFsdWVdKShwYXRoKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvZmlsZWV4aXN0cyBmaWxlZXhpc3RzfSBkZXRlcm1pbmVzIHdoZXRoZXIgYSBmaWxlIGV4aXN0cyBhdCBhIGdpdmVuIHBhdGguXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG4gICAqL1xuICBzdGF0aWMgZmlsZWV4aXN0cyhwYXRoOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNCb29sZWFuKHRlcnJhZm9ybUZ1bmN0aW9uKFwiZmlsZWV4aXN0c1wiLCBbc3RyaW5nVmFsdWVdKShwYXRoKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvZmlsZW1kNSBmaWxlbWQ1fSBpcyBhIHZhcmlhbnQgb2YgYG1kNWAgdGhhdCBoYXNoZXMgdGhlIGNvbnRlbnRzIG9mIGEgZ2l2ZW4gZmlsZSByYXRoZXIgdGhhbiBhIGxpdGVyYWwgc3RyaW5nLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuICAgKi9cbiAgc3RhdGljIGZpbGVtZDUocGF0aDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGFzU3RyaW5nKHRlcnJhZm9ybUZ1bmN0aW9uKFwiZmlsZW1kNVwiLCBbc3RyaW5nVmFsdWVdKShwYXRoKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvZmlsZXNldCBmaWxlc2V0fSBlbnVtZXJhdGVzIGEgc2V0IG9mIHJlZ3VsYXIgZmlsZSBuYW1lcyBnaXZlbiBhIHBhdGggYW5kIHBhdHRlcm4uIFRoZSBwYXRoIGlzIGF1dG9tYXRpY2FsbHkgcmVtb3ZlZCBmcm9tIHRoZSByZXN1bHRpbmcgc2V0IG9mIGZpbGUgbmFtZXMgYW5kIGFueSByZXN1bHQgc3RpbGwgY29udGFpbmluZyBwYXRoIHNlcGFyYXRvcnMgYWx3YXlzIHJldHVybnMgZm9yd2FyZCBzbGFzaCAoYC9gKSBhcyB0aGUgcGF0aCBzZXBhcmF0b3IgZm9yIGNyb3NzLXN5c3RlbSBjb21wYXRpYmlsaXR5LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0dGVyblxuICAgKi9cbiAgc3RhdGljIGZpbGVzZXQocGF0aDogc3RyaW5nLCBwYXR0ZXJuOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNMaXN0KFxuICAgICAgdGVycmFmb3JtRnVuY3Rpb24oXCJmaWxlc2V0XCIsIFtzdHJpbmdWYWx1ZSwgc3RyaW5nVmFsdWVdKShwYXRoLCBwYXR0ZXJuKSxcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL2ZpbGVzaGExIGZpbGVzaGExfSBpcyBhIHZhcmlhbnQgb2YgYHNoYTFgIHRoYXQgaGFzaGVzIHRoZSBjb250ZW50cyBvZiBhIGdpdmVuIGZpbGUgcmF0aGVyIHRoYW4gYSBsaXRlcmFsIHN0cmluZy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcbiAgICovXG4gIHN0YXRpYyBmaWxlc2hhMShwYXRoOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNTdHJpbmcodGVycmFmb3JtRnVuY3Rpb24oXCJmaWxlc2hhMVwiLCBbc3RyaW5nVmFsdWVdKShwYXRoKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvZmlsZXNoYTI1NiBmaWxlc2hhMjU2fSBpcyBhIHZhcmlhbnQgb2YgYHNoYTI1NmAgdGhhdCBoYXNoZXMgdGhlIGNvbnRlbnRzIG9mIGEgZ2l2ZW4gZmlsZSByYXRoZXIgdGhhbiBhIGxpdGVyYWwgc3RyaW5nLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuICAgKi9cbiAgc3RhdGljIGZpbGVzaGEyNTYocGF0aDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGFzU3RyaW5nKHRlcnJhZm9ybUZ1bmN0aW9uKFwiZmlsZXNoYTI1NlwiLCBbc3RyaW5nVmFsdWVdKShwYXRoKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvZmlsZXNoYTUxMiBmaWxlc2hhNTEyfSBpcyBhIHZhcmlhbnQgb2YgYHNoYTUxMmAgdGhhdCBoYXNoZXMgdGhlIGNvbnRlbnRzIG9mIGEgZ2l2ZW4gZmlsZSByYXRoZXIgdGhhbiBhIGxpdGVyYWwgc3RyaW5nLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuICAgKi9cbiAgc3RhdGljIGZpbGVzaGE1MTIocGF0aDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGFzU3RyaW5nKHRlcnJhZm9ybUZ1bmN0aW9uKFwiZmlsZXNoYTUxMlwiLCBbc3RyaW5nVmFsdWVdKShwYXRoKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvZmxhdHRlbiBmbGF0dGVufSB0YWtlcyBhIGxpc3QgYW5kIHJlcGxhY2VzIGFueSBlbGVtZW50cyB0aGF0IGFyZSBsaXN0cyB3aXRoIGEgZmxhdHRlbmVkIHNlcXVlbmNlIG9mIHRoZSBsaXN0IGNvbnRlbnRzLlxuICAgKiBAcGFyYW0ge2FueX0gbGlzdFxuICAgKi9cbiAgc3RhdGljIGZsYXR0ZW4obGlzdDogYW55KSB7XG4gICAgcmV0dXJuIGFzQW55KHRlcnJhZm9ybUZ1bmN0aW9uKFwiZmxhdHRlblwiLCBbYW55VmFsdWVdKShsaXN0KSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvZmxvb3IgZmxvb3J9IHJldHVybnMgdGhlIGNsb3Nlc3Qgd2hvbGUgbnVtYmVyIHRoYXQgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBnaXZlbiB2YWx1ZSwgd2hpY2ggbWF5IGJlIGEgZnJhY3Rpb24uXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBudW1cbiAgICovXG4gIHN0YXRpYyBmbG9vcihudW06IG51bWJlcikge1xuICAgIHJldHVybiBhc051bWJlcih0ZXJyYWZvcm1GdW5jdGlvbihcImZsb29yXCIsIFtudW1lcmljVmFsdWVdKShudW0pKTtcbiAgfVxuICAvKipcbiAgICogVGhlIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvZm9ybWF0IGZvcm1hdH0gZnVuY3Rpb24gcHJvZHVjZXMgYSBzdHJpbmcgYnkgZm9ybWF0dGluZyBhIG51bWJlciBvZiBvdGhlciB2YWx1ZXMgYWNjb3JkaW5nIHRvIGEgc3BlY2lmaWNhdGlvbiBzdHJpbmcuIEl0IGlzIHNpbWlsYXIgdG8gdGhlIGBwcmludGZgIGZ1bmN0aW9uIGluIEMsIGFuZCBvdGhlciBzaW1pbGFyIGZ1bmN0aW9ucyBpbiBvdGhlciBwcm9ncmFtbWluZyBsYW5ndWFnZXMuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmb3JtYXRcbiAgICogQHBhcmFtIHtBcnJheTxhbnk+fSBhcmdzXG4gICAqL1xuICBzdGF0aWMgZm9ybWF0KGZvcm1hdDogc3RyaW5nLCBhcmdzOiBhbnlbXSkge1xuICAgIHJldHVybiBhc1N0cmluZyhcbiAgICAgIHRlcnJhZm9ybUZ1bmN0aW9uKFwiZm9ybWF0XCIsIFtzdHJpbmdWYWx1ZSwgdmFyaWFkaWMoYW55VmFsdWUpXSkoXG4gICAgICAgIGZvcm1hdCxcbiAgICAgICAgYXJncyxcbiAgICAgICksXG4gICAgKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9mb3JtYXRkYXRlIGZvcm1hdGRhdGV9IGNvbnZlcnRzIGEgdGltZXN0YW1wIGludG8gYSBkaWZmZXJlbnQgdGltZSBmb3JtYXQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmb3JtYXRcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRpbWVcbiAgICovXG4gIHN0YXRpYyBmb3JtYXRkYXRlKGZvcm1hdDogc3RyaW5nLCB0aW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNTdHJpbmcoXG4gICAgICB0ZXJyYWZvcm1GdW5jdGlvbihcImZvcm1hdGRhdGVcIiwgW3N0cmluZ1ZhbHVlLCBzdHJpbmdWYWx1ZV0pKGZvcm1hdCwgdGltZSksXG4gICAgKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9mb3JtYXRsaXN0IGZvcm1hdGxpc3R9IHByb2R1Y2VzIGEgbGlzdCBvZiBzdHJpbmdzIGJ5IGZvcm1hdHRpbmcgYSBudW1iZXIgb2Ygb3RoZXIgdmFsdWVzIGFjY29yZGluZyB0byBhIHNwZWNpZmljYXRpb24gc3RyaW5nLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZm9ybWF0XG4gICAqIEBwYXJhbSB7QXJyYXk8YW55Pn0gYXJnc1xuICAgKi9cbiAgc3RhdGljIGZvcm1hdGxpc3QoZm9ybWF0OiBzdHJpbmcsIGFyZ3M6IGFueVtdKSB7XG4gICAgcmV0dXJuIGFzTGlzdChcbiAgICAgIHRlcnJhZm9ybUZ1bmN0aW9uKFwiZm9ybWF0bGlzdFwiLCBbc3RyaW5nVmFsdWUsIHZhcmlhZGljKGFueVZhbHVlKV0pKFxuICAgICAgICBmb3JtYXQsXG4gICAgICAgIGFyZ3MsXG4gICAgICApLFxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvaW5kZW50IGluZGVudH0gYWRkcyBhIGdpdmVuIG51bWJlciBvZiBzcGFjZXMgdG8gdGhlIGJlZ2lubmluZ3Mgb2YgYWxsIGJ1dCB0aGUgZmlyc3QgbGluZSBpbiBhIGdpdmVuIG11bHRpLWxpbmUgc3RyaW5nLlxuICAgKiBAcGFyYW0ge251bWJlcn0gc3BhY2VzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAgICovXG4gIHN0YXRpYyBpbmRlbnQoc3BhY2VzOiBudW1iZXIsIHN0cjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGFzU3RyaW5nKFxuICAgICAgdGVycmFmb3JtRnVuY3Rpb24oXCJpbmRlbnRcIiwgW251bWVyaWNWYWx1ZSwgc3RyaW5nVmFsdWVdKShzcGFjZXMsIHN0ciksXG4gICAgKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9pbmRleCBpbmRleH0gZmluZHMgdGhlIGVsZW1lbnQgaW5kZXggZm9yIGEgZ2l2ZW4gdmFsdWUgaW4gYSBsaXN0LlxuICAgKiBAcGFyYW0ge2FueX0gbGlzdFxuICAgKiBAcGFyYW0ge2FueX0gdmFsdWVcbiAgICovXG4gIHN0YXRpYyBpbmRleChsaXN0OiBhbnksIHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gYXNBbnkodGVycmFmb3JtRnVuY3Rpb24oXCJpbmRleFwiLCBbYW55VmFsdWUsIGFueVZhbHVlXSkobGlzdCwgdmFsdWUpKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9pc3NlbnNpdGl2ZSBpc3NlbnNpdGl2ZX0gdGFrZXMgYSB2YWx1ZSBhbmQgcmV0dXJucyBhIGJvb2xlYW4gaW5kaWNhdGluZyBpZiB0aGUgdmFsdWUgaXMgc2Vuc2l0aXZlLlxuICAgKiBAcGFyYW0ge2FueX0gdmFsdWVcbiAgICovXG4gIHN0YXRpYyBpc3NlbnNpdGl2ZSh2YWx1ZTogYW55KSB7XG4gICAgcmV0dXJuIGFzQm9vbGVhbih0ZXJyYWZvcm1GdW5jdGlvbihcImlzc2Vuc2l0aXZlXCIsIFthbnlWYWx1ZV0pKHZhbHVlKSk7XG4gIH1cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL2pvaW4gam9pbn0gcHJvZHVjZXMgYSBzdHJpbmcgYnkgY29uY2F0ZW5hdGluZyB0b2dldGhlciBhbGwgZWxlbWVudHMgb2YgYSBnaXZlbiBsaXN0IG9mIHN0cmluZ3Mgd2l0aCB0aGUgZ2l2ZW4gZGVsaW1pdGVyLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2VwYXJhdG9yXG4gICAqIEBwYXJhbSB7QXJyYXk8QXJyYXk8c3RyaW5nPj59IGxpc3RzXG4gICAqL1xuICBzdGF0aWMgX2pvaW4oc2VwYXJhdG9yOiBzdHJpbmcsIGxpc3RzOiBzdHJpbmdbXVtdKSB7XG4gICAgcmV0dXJuIGFzU3RyaW5nKFxuICAgICAgdGVycmFmb3JtRnVuY3Rpb24oXCJqb2luXCIsIFtzdHJpbmdWYWx1ZSwgdmFyaWFkaWMobGlzdE9mKGFueVZhbHVlKSldKShcbiAgICAgICAgc2VwYXJhdG9yLFxuICAgICAgICBsaXN0cyxcbiAgICAgICksXG4gICAgKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9qc29uZGVjb2RlIGpzb25kZWNvZGV9IGludGVycHJldHMgYSBnaXZlbiBzdHJpbmcgYXMgSlNPTiwgcmV0dXJuaW5nIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIHJlc3VsdCBvZiBkZWNvZGluZyB0aGF0IHN0cmluZy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKi9cbiAgc3RhdGljIGpzb25kZWNvZGUoc3RyOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNBbnkodGVycmFmb3JtRnVuY3Rpb24oXCJqc29uZGVjb2RlXCIsIFtzdHJpbmdWYWx1ZV0pKHN0cikpO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL2pzb25lbmNvZGUganNvbmVuY29kZX0gZW5jb2RlcyBhIGdpdmVuIHZhbHVlIHRvIGEgc3RyaW5nIHVzaW5nIEpTT04gc3ludGF4LlxuICAgKiBAcGFyYW0ge2FueX0gdmFsXG4gICAqL1xuICBzdGF0aWMganNvbmVuY29kZSh2YWw6IGFueSkge1xuICAgIHJldHVybiBhc1N0cmluZyh0ZXJyYWZvcm1GdW5jdGlvbihcImpzb25lbmNvZGVcIiwgW2FueVZhbHVlXSkodmFsKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMva2V5cyBrZXlzfSB0YWtlcyBhIG1hcCBhbmQgcmV0dXJucyBhIGxpc3QgY29udGFpbmluZyB0aGUga2V5cyBmcm9tIHRoYXQgbWFwLlxuICAgKiBAcGFyYW0ge2FueX0gaW5wdXRNYXBcbiAgICovXG4gIHN0YXRpYyBrZXlzKGlucHV0TWFwOiBhbnkpIHtcbiAgICByZXR1cm4gYXNBbnkodGVycmFmb3JtRnVuY3Rpb24oXCJrZXlzXCIsIFthbnlWYWx1ZV0pKGlucHV0TWFwKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvbGVuZ3RoIGxlbmd0aH0gZGV0ZXJtaW5lcyB0aGUgbGVuZ3RoIG9mIGEgZ2l2ZW4gbGlzdCwgbWFwLCBvciBzdHJpbmcuXG4gICAqIEBwYXJhbSB7YW55fSB2YWx1ZVxuICAgKi9cbiAgc3RhdGljIGxlbmd0aE9mKHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gYXNOdW1iZXIodGVycmFmb3JtRnVuY3Rpb24oXCJsZW5ndGhcIiwgW2FueVZhbHVlXSkodmFsdWUpKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9sb2cgbG9nfSByZXR1cm5zIHRoZSBsb2dhcml0aG0gb2YgYSBnaXZlbiBudW1iZXIgaW4gYSBnaXZlbiBiYXNlLlxuICAgKiBAcGFyYW0ge251bWJlcn0gbnVtXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBiYXNlXG4gICAqL1xuICBzdGF0aWMgbG9nKG51bTogbnVtYmVyLCBiYXNlOiBudW1iZXIpIHtcbiAgICByZXR1cm4gYXNOdW1iZXIoXG4gICAgICB0ZXJyYWZvcm1GdW5jdGlvbihcImxvZ1wiLCBbbnVtZXJpY1ZhbHVlLCBudW1lcmljVmFsdWVdKShudW0sIGJhc2UpLFxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL2xvb2t1cCBsb29rdXB9IHJldHJpZXZlcyB0aGUgdmFsdWUgb2YgYSBzaW5nbGUgZWxlbWVudCBmcm9tIGEgbWFwLCBnaXZlbiBpdHMga2V5LiBJZiB0aGUgZ2l2ZW4ga2V5IGRvZXMgbm90IGV4aXN0LCB0aGUgZ2l2ZW4gZGVmYXVsdCB2YWx1ZSBpcyByZXR1cm5lZCBpbnN0ZWFkLlxuICAgKiBAcGFyYW0ge2FueX0gaW5wdXRNYXBcbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICAgKiBAcGFyYW0ge0FycmF5PGFueT59IGRlZmF1bHRWYWx1ZVxuICAgKi9cbiAgc3RhdGljIF9sb29rdXAoaW5wdXRNYXA6IGFueSwga2V5OiBzdHJpbmcsIGRlZmF1bHRWYWx1ZTogYW55W10pIHtcbiAgICByZXR1cm4gYXNBbnkoXG4gICAgICB0ZXJyYWZvcm1GdW5jdGlvbihcImxvb2t1cFwiLCBbYW55VmFsdWUsIHN0cmluZ1ZhbHVlLCB2YXJpYWRpYyhhbnlWYWx1ZSldKShcbiAgICAgICAgaW5wdXRNYXAsXG4gICAgICAgIGtleSxcbiAgICAgICAgZGVmYXVsdFZhbHVlLFxuICAgICAgKSxcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL2xvd2VyIGxvd2VyfSBjb252ZXJ0cyBhbGwgY2FzZWQgbGV0dGVycyBpbiB0aGUgZ2l2ZW4gc3RyaW5nIHRvIGxvd2VyY2FzZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKi9cbiAgc3RhdGljIGxvd2VyKHN0cjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGFzU3RyaW5nKHRlcnJhZm9ybUZ1bmN0aW9uKFwibG93ZXJcIiwgW3N0cmluZ1ZhbHVlXSkoc3RyKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvbWF0Y2hrZXlzIG1hdGNoa2V5c30gY29uc3RydWN0cyBhIG5ldyBsaXN0IGJ5IHRha2luZyBhIHN1YnNldCBvZiBlbGVtZW50cyBmcm9tIG9uZSBsaXN0IHdob3NlIGluZGV4ZXMgbWF0Y2ggdGhlIGNvcnJlc3BvbmRpbmcgaW5kZXhlcyBvZiB2YWx1ZXMgaW4gYW5vdGhlciBsaXN0LlxuICAgKiBAcGFyYW0ge0FycmF5PGFueT59IHZhbHVlc1xuICAgKiBAcGFyYW0ge0FycmF5PGFueT59IGtleXNcbiAgICogQHBhcmFtIHtBcnJheTxhbnk+fSBzZWFyY2hzZXRcbiAgICovXG4gIHN0YXRpYyBtYXRjaGtleXModmFsdWVzOiBhbnlbXSwga2V5czogYW55W10sIHNlYXJjaHNldDogYW55W10pIHtcbiAgICByZXR1cm4gYXNMaXN0KFxuICAgICAgdGVycmFmb3JtRnVuY3Rpb24oXCJtYXRjaGtleXNcIiwgW1xuICAgICAgICBsaXN0T2YoYW55VmFsdWUpLFxuICAgICAgICBsaXN0T2YoYW55VmFsdWUpLFxuICAgICAgICBsaXN0T2YoYW55VmFsdWUpLFxuICAgICAgXSkodmFsdWVzLCBrZXlzLCBzZWFyY2hzZXQpLFxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvbWF4IG1heH0gdGFrZXMgb25lIG9yIG1vcmUgbnVtYmVycyBhbmQgcmV0dXJucyB0aGUgZ3JlYXRlc3QgbnVtYmVyIGZyb20gdGhlIHNldC5cbiAgICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBudW1iZXJzXG4gICAqL1xuICBzdGF0aWMgbWF4KG51bWJlcnM6IG51bWJlcltdKSB7XG4gICAgcmV0dXJuIGFzTnVtYmVyKFxuICAgICAgdGVycmFmb3JtRnVuY3Rpb24oXCJtYXhcIiwgW3ZhcmlhZGljKG51bWVyaWNWYWx1ZSldKShudW1iZXJzKSxcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL21kNSBtZDV9IGNvbXB1dGVzIHRoZSBNRDUgaGFzaCBvZiBhIGdpdmVuIHN0cmluZyBhbmQgZW5jb2RlcyBpdCB3aXRoIGhleGFkZWNpbWFsIGRpZ2l0cy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKi9cbiAgc3RhdGljIG1kNShzdHI6IHN0cmluZykge1xuICAgIHJldHVybiBhc1N0cmluZyh0ZXJyYWZvcm1GdW5jdGlvbihcIm1kNVwiLCBbc3RyaW5nVmFsdWVdKShzdHIpKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9tZXJnZSBtZXJnZX0gdGFrZXMgYW4gYXJiaXRyYXJ5IG51bWJlciBvZiBtYXBzIG9yIG9iamVjdHMsIGFuZCByZXR1cm5zIGEgc2luZ2xlIG1hcCBvciBvYmplY3QgdGhhdCBjb250YWlucyBhIG1lcmdlZCBzZXQgb2YgZWxlbWVudHMgZnJvbSBhbGwgYXJndW1lbnRzLlxuICAgKiBAcGFyYW0ge0FycmF5PGFueT59IG1hcHNcbiAgICovXG4gIHN0YXRpYyBtZXJnZShtYXBzOiBhbnlbXSkge1xuICAgIHJldHVybiBhc0FueSh0ZXJyYWZvcm1GdW5jdGlvbihcIm1lcmdlXCIsIFt2YXJpYWRpYyhhbnlWYWx1ZSldKShtYXBzKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvbWluIG1pbn0gdGFrZXMgb25lIG9yIG1vcmUgbnVtYmVycyBhbmQgcmV0dXJucyB0aGUgc21hbGxlc3QgbnVtYmVyIGZyb20gdGhlIHNldC5cbiAgICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBudW1iZXJzXG4gICAqL1xuICBzdGF0aWMgbWluKG51bWJlcnM6IG51bWJlcltdKSB7XG4gICAgcmV0dXJuIGFzTnVtYmVyKFxuICAgICAgdGVycmFmb3JtRnVuY3Rpb24oXCJtaW5cIiwgW3ZhcmlhZGljKG51bWVyaWNWYWx1ZSldKShudW1iZXJzKSxcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL25vbnNlbnNpdGl2ZSBub25zZW5zaXRpdmV9IHRha2VzIGEgc2Vuc2l0aXZlIHZhbHVlIGFuZCByZXR1cm5zIGEgY29weSBvZiB0aGF0IHZhbHVlIHdpdGggdGhlIHNlbnNpdGl2ZSBtYXJraW5nIHJlbW92ZWQsIHRoZXJlYnkgZXhwb3NpbmcgdGhlIHNlbnNpdGl2ZSB2YWx1ZS5cbiAgICogQHBhcmFtIHthbnl9IHZhbHVlXG4gICAqL1xuICBzdGF0aWMgbm9uc2Vuc2l0aXZlKHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gYXNBbnkodGVycmFmb3JtRnVuY3Rpb24oXCJub25zZW5zaXRpdmVcIiwgW2FueVZhbHVlXSkodmFsdWUpKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9vbmUgb25lfSB0YWtlcyBhIGxpc3QsIHNldCwgb3IgdHVwbGUgdmFsdWUgd2l0aCBlaXRoZXIgemVybyBvciBvbmUgZWxlbWVudHMuIElmIHRoZSBjb2xsZWN0aW9uIGlzIGVtcHR5LCBgb25lYCByZXR1cm5zIGBudWxsYC4gT3RoZXJ3aXNlLCBgb25lYCByZXR1cm5zIHRoZSBmaXJzdCBlbGVtZW50LiBJZiB0aGVyZSBhcmUgdHdvIG9yIG1vcmUgZWxlbWVudHMgdGhlbiBgb25lYCB3aWxsIHJldHVybiBhbiBlcnJvci5cbiAgICogQHBhcmFtIHthbnl9IGxpc3RcbiAgICovXG4gIHN0YXRpYyBvbmUobGlzdDogYW55KSB7XG4gICAgcmV0dXJuIGFzQW55KHRlcnJhZm9ybUZ1bmN0aW9uKFwib25lXCIsIFthbnlWYWx1ZV0pKGxpc3QpKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9wYXJzZWludCBwYXJzZWludH0gcGFyc2VzIHRoZSBnaXZlbiBzdHJpbmcgYXMgYSByZXByZXNlbnRhdGlvbiBvZiBhbiBpbnRlZ2VyIGluIHRoZSBzcGVjaWZpZWQgYmFzZSBhbmQgcmV0dXJucyB0aGUgcmVzdWx0aW5nIG51bWJlci4gVGhlIGJhc2UgbXVzdCBiZSBiZXR3ZWVuIDIgYW5kIDYyIGluY2x1c2l2ZS5cbiAgICogQHBhcmFtIHthbnl9IG51bWJlclxuICAgKiBAcGFyYW0ge251bWJlcn0gYmFzZVxuICAgKi9cbiAgc3RhdGljIHBhcnNlaW50KG51bWJlcjogYW55LCBiYXNlOiBudW1iZXIpIHtcbiAgICByZXR1cm4gYXNBbnkoXG4gICAgICB0ZXJyYWZvcm1GdW5jdGlvbihcInBhcnNlaW50XCIsIFthbnlWYWx1ZSwgbnVtZXJpY1ZhbHVlXSkobnVtYmVyLCBiYXNlKSxcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL3BhdGhleHBhbmQgcGF0aGV4cGFuZH0gdGFrZXMgYSBmaWxlc3lzdGVtIHBhdGggdGhhdCBtaWdodCBiZWdpbiB3aXRoIGEgYH5gIHNlZ21lbnQsIGFuZCBpZiBzbyBpdCByZXBsYWNlcyB0aGF0IHNlZ21lbnQgd2l0aCB0aGUgY3VycmVudCB1c2VyJ3MgaG9tZSBkaXJlY3RvcnkgcGF0aC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcbiAgICovXG4gIHN0YXRpYyBwYXRoZXhwYW5kKHBhdGg6IHN0cmluZykge1xuICAgIHJldHVybiBhc1N0cmluZyh0ZXJyYWZvcm1GdW5jdGlvbihcInBhdGhleHBhbmRcIiwgW3N0cmluZ1ZhbHVlXSkocGF0aCkpO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL3BsYW50aW1lc3RhbXAgcGxhbnRpbWVzdGFtcH0gcmV0dXJucyBhIFVUQyB0aW1lc3RhbXAgc3RyaW5nIGluIFtSRkMgMzMzOV0oaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzMzMzkpIGZvcm1hdCwgZml4ZWQgdG8gYSBjb25zdGFudCB0aW1lIHJlcHJlc2VudGluZyB0aGUgdGltZSBvZiB0aGUgcGxhbi5cbiAgICovXG4gIHN0YXRpYyBwbGFudGltZXN0YW1wKCkge1xuICAgIHJldHVybiBhc1N0cmluZyh0ZXJyYWZvcm1GdW5jdGlvbihcInBsYW50aW1lc3RhbXBcIiwgW10pKCkpO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL3BvdyBwb3d9IGNhbGN1bGF0ZXMgYW4gZXhwb25lbnQsIGJ5IHJhaXNpbmcgaXRzIGZpcnN0IGFyZ3VtZW50IHRvIHRoZSBwb3dlciBvZiB0aGUgc2Vjb25kIGFyZ3VtZW50LlxuICAgKiBAcGFyYW0ge251bWJlcn0gbnVtXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBwb3dlclxuICAgKi9cbiAgc3RhdGljIHBvdyhudW06IG51bWJlciwgcG93ZXI6IG51bWJlcikge1xuICAgIHJldHVybiBhc051bWJlcihcbiAgICAgIHRlcnJhZm9ybUZ1bmN0aW9uKFwicG93XCIsIFtudW1lcmljVmFsdWUsIG51bWVyaWNWYWx1ZV0pKG51bSwgcG93ZXIpLFxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL3JhbmdlIHJhbmdlfSBnZW5lcmF0ZXMgYSBsaXN0IG9mIG51bWJlcnMgdXNpbmcgYSBzdGFydCB2YWx1ZSwgYSBsaW1pdCB2YWx1ZSwgYW5kIGEgc3RlcCB2YWx1ZS5cbiAgICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBwYXJhbXNcbiAgICovXG4gIHN0YXRpYyBfcmFuZ2UocGFyYW1zOiBudW1iZXJbXSkge1xuICAgIHJldHVybiBhc0xpc3QodGVycmFmb3JtRnVuY3Rpb24oXCJyYW5nZVwiLCBbdmFyaWFkaWMobnVtZXJpY1ZhbHVlKV0pKHBhcmFtcykpO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL3JlZ2V4IHJlZ2V4fSBhcHBsaWVzIGEgW3JlZ3VsYXIgZXhwcmVzc2lvbl0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUmVndWxhcl9leHByZXNzaW9uKSB0byBhIHN0cmluZyBhbmQgcmV0dXJucyB0aGUgbWF0Y2hpbmcgc3Vic3RyaW5ncy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhdHRlcm5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKi9cbiAgc3RhdGljIHJlZ2V4KHBhdHRlcm46IHN0cmluZywgc3RyOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNBbnkoXG4gICAgICB0ZXJyYWZvcm1GdW5jdGlvbihcInJlZ2V4XCIsIFtzdHJpbmdWYWx1ZSwgc3RyaW5nVmFsdWVdKShwYXR0ZXJuLCBzdHIpLFxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvcmVnZXhhbGwgcmVnZXhhbGx9IGFwcGxpZXMgYSBbcmVndWxhciBleHByZXNzaW9uXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9SZWd1bGFyX2V4cHJlc3Npb24pIHRvIGEgc3RyaW5nIGFuZCByZXR1cm5zIGEgbGlzdCBvZiBhbGwgbWF0Y2hlcy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhdHRlcm5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKi9cbiAgc3RhdGljIHJlZ2V4YWxsKHBhdHRlcm46IHN0cmluZywgc3RyOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNMaXN0KFxuICAgICAgdGVycmFmb3JtRnVuY3Rpb24oXCJyZWdleGFsbFwiLCBbc3RyaW5nVmFsdWUsIHN0cmluZ1ZhbHVlXSkocGF0dGVybiwgc3RyKSxcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL3JlcGxhY2UgcmVwbGFjZX0gc2VhcmNoZXMgYSBnaXZlbiBzdHJpbmcgZm9yIGFub3RoZXIgZ2l2ZW4gc3Vic3RyaW5nLCBhbmQgcmVwbGFjZXMgZWFjaCBvY2N1cnJlbmNlIHdpdGggYSBnaXZlbiByZXBsYWNlbWVudCBzdHJpbmcuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN1YnN0clxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVwbGFjZVxuICAgKi9cbiAgc3RhdGljIHJlcGxhY2Uoc3RyOiBzdHJpbmcsIHN1YnN0cjogc3RyaW5nLCByZXBsYWNlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNTdHJpbmcoXG4gICAgICB0ZXJyYWZvcm1GdW5jdGlvbihcInJlcGxhY2VcIiwgW3N0cmluZ1ZhbHVlLCBzdHJpbmdWYWx1ZSwgc3RyaW5nVmFsdWVdKShcbiAgICAgICAgc3RyLFxuICAgICAgICBzdWJzdHIsXG4gICAgICAgIHJlcGxhY2UsXG4gICAgICApLFxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvcmV2ZXJzZSByZXZlcnNlfSB0YWtlcyBhIHNlcXVlbmNlIGFuZCBwcm9kdWNlcyBhIG5ldyBzZXF1ZW5jZSBvZiB0aGUgc2FtZSBsZW5ndGggd2l0aCBhbGwgb2YgdGhlIHNhbWUgZWxlbWVudHMgYXMgdGhlIGdpdmVuIHNlcXVlbmNlIGJ1dCBpbiByZXZlcnNlIG9yZGVyLlxuICAgKiBAcGFyYW0ge2FueX0gbGlzdFxuICAgKi9cbiAgc3RhdGljIHJldmVyc2UobGlzdDogYW55KSB7XG4gICAgcmV0dXJuIGFzQW55KHRlcnJhZm9ybUZ1bmN0aW9uKFwicmV2ZXJzZVwiLCBbYW55VmFsdWVdKShsaXN0KSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvcnNhZGVjcnlwdCByc2FkZWNyeXB0fSBkZWNyeXB0cyBhbiBSU0EtZW5jcnlwdGVkIGNpcGhlcnRleHQsIHJldHVybmluZyB0aGUgY29ycmVzcG9uZGluZyBjbGVhcnRleHQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjaXBoZXJ0ZXh0XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwcml2YXRla2V5XG4gICAqL1xuICBzdGF0aWMgcnNhZGVjcnlwdChjaXBoZXJ0ZXh0OiBzdHJpbmcsIHByaXZhdGVrZXk6IHN0cmluZykge1xuICAgIHJldHVybiBhc1N0cmluZyhcbiAgICAgIHRlcnJhZm9ybUZ1bmN0aW9uKFwicnNhZGVjcnlwdFwiLCBbc3RyaW5nVmFsdWUsIHN0cmluZ1ZhbHVlXSkoXG4gICAgICAgIGNpcGhlcnRleHQsXG4gICAgICAgIHByaXZhdGVrZXksXG4gICAgICApLFxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvc2Vuc2l0aXZlIHNlbnNpdGl2ZX0gdGFrZXMgYW55IHZhbHVlIGFuZCByZXR1cm5zIGEgY29weSBvZiBpdCBtYXJrZWQgc28gdGhhdCBUZXJyYWZvcm0gd2lsbCB0cmVhdCBpdCBhcyBzZW5zaXRpdmUsIHdpdGggdGhlIHNhbWUgbWVhbmluZyBhbmQgYmVoYXZpb3IgYXMgZm9yIFtzZW5zaXRpdmUgaW5wdXQgdmFyaWFibGVzXSgvdGVycmFmb3JtL2xhbmd1YWdlL3ZhbHVlcy92YXJpYWJsZXMjc3VwcHJlc3NpbmctdmFsdWVzLWluLWNsaS1vdXRwdXQpLlxuICAgKiBAcGFyYW0ge2FueX0gdmFsdWVcbiAgICovXG4gIHN0YXRpYyBzZW5zaXRpdmUodmFsdWU6IGFueSkge1xuICAgIHJldHVybiBhc0FueSh0ZXJyYWZvcm1GdW5jdGlvbihcInNlbnNpdGl2ZVwiLCBbYW55VmFsdWVdKSh2YWx1ZSkpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9zZXRpbnRlcnNlY3Rpb24gc2V0aW50ZXJzZWN0aW9ufSBmdW5jdGlvbiB0YWtlcyBtdWx0aXBsZSBzZXRzIGFuZCBwcm9kdWNlcyBhIHNpbmdsZSBzZXQgY29udGFpbmluZyBvbmx5IHRoZSBlbGVtZW50cyB0aGF0IGFsbCBvZiB0aGUgZ2l2ZW4gc2V0cyBoYXZlIGluIGNvbW1vbi4gSW4gb3RoZXIgd29yZHMsIGl0IGNvbXB1dGVzIHRoZSBbaW50ZXJzZWN0aW9uXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JbnRlcnNlY3Rpb25fXFwoc2V0X3RoZW9yeVxcKSkgb2YgdGhlIHNldHMuXG4gICAqIEBwYXJhbSB7QXJyYXk8YW55Pn0gZmlyc3Rfc2V0XG4gICAqIEBwYXJhbSB7QXJyYXk8QXJyYXk8YW55Pj59IG90aGVyX3NldHNcbiAgICovXG4gIHN0YXRpYyBzZXRpbnRlcnNlY3Rpb24oZmlyc3Rfc2V0OiBhbnlbXSwgb3RoZXJfc2V0czogYW55W11bXSkge1xuICAgIHJldHVybiBhc0xpc3QoXG4gICAgICB0ZXJyYWZvcm1GdW5jdGlvbihcInNldGludGVyc2VjdGlvblwiLCBbXG4gICAgICAgIGxpc3RPZihhbnlWYWx1ZSksXG4gICAgICAgIHZhcmlhZGljKGxpc3RPZihhbnlWYWx1ZSkpLFxuICAgICAgXSkoZmlyc3Rfc2V0LCBvdGhlcl9zZXRzKSxcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiBUaGUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9zZXRwcm9kdWN0IHNldHByb2R1Y3R9IGZ1bmN0aW9uIGZpbmRzIGFsbCBvZiB0aGUgcG9zc2libGUgY29tYmluYXRpb25zIG9mIGVsZW1lbnRzIGZyb20gYWxsIG9mIHRoZSBnaXZlbiBzZXRzIGJ5IGNvbXB1dGluZyB0aGUgW0NhcnRlc2lhbiBwcm9kdWN0XShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9DYXJ0ZXNpYW5fcHJvZHVjdCkuXG4gICAqIEBwYXJhbSB7QXJyYXk8YW55Pn0gc2V0c1xuICAgKi9cbiAgc3RhdGljIHNldHByb2R1Y3Qoc2V0czogYW55W10pIHtcbiAgICByZXR1cm4gYXNBbnkodGVycmFmb3JtRnVuY3Rpb24oXCJzZXRwcm9kdWN0XCIsIFt2YXJpYWRpYyhhbnlWYWx1ZSldKShzZXRzKSk7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL3NldHN1YnRyYWN0IHNldHN1YnRyYWN0fSBmdW5jdGlvbiByZXR1cm5zIGEgbmV3IHNldCBjb250YWluaW5nIHRoZSBlbGVtZW50cyBmcm9tIHRoZSBmaXJzdCBzZXQgdGhhdCBhcmUgbm90IHByZXNlbnQgaW4gdGhlIHNlY29uZCBzZXQuIEluIG90aGVyIHdvcmRzLCBpdCBjb21wdXRlcyB0aGUgW3JlbGF0aXZlIGNvbXBsZW1lbnRdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NvbXBsZW1lbnRfXFwoc2V0X3RoZW9yeVxcKSNSZWxhdGl2ZV9jb21wbGVtZW50KSBvZiB0aGUgc2Vjb25kIHNldC5cbiAgICogQHBhcmFtIHtBcnJheTxhbnk+fSBhXG4gICAqIEBwYXJhbSB7QXJyYXk8YW55Pn0gYlxuICAgKi9cbiAgc3RhdGljIHNldHN1YnRyYWN0KGE6IGFueVtdLCBiOiBhbnlbXSkge1xuICAgIHJldHVybiBhc0xpc3QoXG4gICAgICB0ZXJyYWZvcm1GdW5jdGlvbihcInNldHN1YnRyYWN0XCIsIFtsaXN0T2YoYW55VmFsdWUpLCBsaXN0T2YoYW55VmFsdWUpXSkoXG4gICAgICAgIGEsXG4gICAgICAgIGIsXG4gICAgICApLFxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL3NldHVuaW9uIHNldHVuaW9ufSBmdW5jdGlvbiB0YWtlcyBtdWx0aXBsZSBzZXRzIGFuZCBwcm9kdWNlcyBhIHNpbmdsZSBzZXQgY29udGFpbmluZyB0aGUgZWxlbWVudHMgZnJvbSBhbGwgb2YgdGhlIGdpdmVuIHNldHMuIEluIG90aGVyIHdvcmRzLCBpdCBjb21wdXRlcyB0aGUgW3VuaW9uXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Vbmlvbl9cXChzZXRfdGhlb3J5XFwpKSBvZiB0aGUgc2V0cy5cbiAgICogQHBhcmFtIHtBcnJheTxhbnk+fSBmaXJzdF9zZXRcbiAgICogQHBhcmFtIHtBcnJheTxBcnJheTxhbnk+Pn0gb3RoZXJfc2V0c1xuICAgKi9cbiAgc3RhdGljIHNldHVuaW9uKGZpcnN0X3NldDogYW55W10sIG90aGVyX3NldHM6IGFueVtdW10pIHtcbiAgICByZXR1cm4gYXNMaXN0KFxuICAgICAgdGVycmFmb3JtRnVuY3Rpb24oXCJzZXR1bmlvblwiLCBbXG4gICAgICAgIGxpc3RPZihhbnlWYWx1ZSksXG4gICAgICAgIHZhcmlhZGljKGxpc3RPZihhbnlWYWx1ZSkpLFxuICAgICAgXSkoZmlyc3Rfc2V0LCBvdGhlcl9zZXRzKSxcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL3NoYTEgc2hhMX0gY29tcHV0ZXMgdGhlIFNIQTEgaGFzaCBvZiBhIGdpdmVuIHN0cmluZyBhbmQgZW5jb2RlcyBpdCB3aXRoIGhleGFkZWNpbWFsIGRpZ2l0cy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKi9cbiAgc3RhdGljIHNoYTEoc3RyOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNTdHJpbmcodGVycmFmb3JtRnVuY3Rpb24oXCJzaGExXCIsIFtzdHJpbmdWYWx1ZV0pKHN0cikpO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL3NoYTI1NiBzaGEyNTZ9IGNvbXB1dGVzIHRoZSBTSEEyNTYgaGFzaCBvZiBhIGdpdmVuIHN0cmluZyBhbmQgZW5jb2RlcyBpdCB3aXRoIGhleGFkZWNpbWFsIGRpZ2l0cy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKi9cbiAgc3RhdGljIHNoYTI1NihzdHI6IHN0cmluZykge1xuICAgIHJldHVybiBhc1N0cmluZyh0ZXJyYWZvcm1GdW5jdGlvbihcInNoYTI1NlwiLCBbc3RyaW5nVmFsdWVdKShzdHIpKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9zaGE1MTIgc2hhNTEyfSBjb21wdXRlcyB0aGUgU0hBNTEyIGhhc2ggb2YgYSBnaXZlbiBzdHJpbmcgYW5kIGVuY29kZXMgaXQgd2l0aCBoZXhhZGVjaW1hbCBkaWdpdHMuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAgICovXG4gIHN0YXRpYyBzaGE1MTIoc3RyOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNTdHJpbmcodGVycmFmb3JtRnVuY3Rpb24oXCJzaGE1MTJcIiwgW3N0cmluZ1ZhbHVlXSkoc3RyKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvc2lnbnVtIHNpZ251bX0gZGV0ZXJtaW5lcyB0aGUgc2lnbiBvZiBhIG51bWJlciwgcmV0dXJuaW5nIGEgbnVtYmVyIGJldHdlZW4gLTEgYW5kIDEgdG8gcmVwcmVzZW50IHRoZSBzaWduLlxuICAgKiBAcGFyYW0ge251bWJlcn0gbnVtXG4gICAqL1xuICBzdGF0aWMgc2lnbnVtKG51bTogbnVtYmVyKSB7XG4gICAgcmV0dXJuIGFzTnVtYmVyKHRlcnJhZm9ybUZ1bmN0aW9uKFwic2lnbnVtXCIsIFtudW1lcmljVmFsdWVdKShudW0pKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9zbGljZSBzbGljZX0gZXh0cmFjdHMgc29tZSBjb25zZWN1dGl2ZSBlbGVtZW50cyBmcm9tIHdpdGhpbiBhIGxpc3QuXG4gICAqIEBwYXJhbSB7YW55fSBsaXN0XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydF9pbmRleFxuICAgKiBAcGFyYW0ge251bWJlcn0gZW5kX2luZGV4XG4gICAqL1xuICBzdGF0aWMgc2xpY2UobGlzdDogYW55LCBzdGFydF9pbmRleDogbnVtYmVyLCBlbmRfaW5kZXg6IG51bWJlcikge1xuICAgIHJldHVybiBhc0FueShcbiAgICAgIHRlcnJhZm9ybUZ1bmN0aW9uKFwic2xpY2VcIiwgW2FueVZhbHVlLCBudW1lcmljVmFsdWUsIG51bWVyaWNWYWx1ZV0pKFxuICAgICAgICBsaXN0LFxuICAgICAgICBzdGFydF9pbmRleCxcbiAgICAgICAgZW5kX2luZGV4LFxuICAgICAgKSxcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL3NvcnQgc29ydH0gdGFrZXMgYSBsaXN0IG9mIHN0cmluZ3MgYW5kIHJldHVybnMgYSBuZXcgbGlzdCB3aXRoIHRob3NlIHN0cmluZ3Mgc29ydGVkIGxleGljb2dyYXBoaWNhbGx5LlxuICAgKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IGxpc3RcbiAgICovXG4gIHN0YXRpYyBzb3J0KGxpc3Q6IHN0cmluZ1tdKSB7XG4gICAgcmV0dXJuIGFzTGlzdCh0ZXJyYWZvcm1GdW5jdGlvbihcInNvcnRcIiwgW2xpc3RPZihhbnlWYWx1ZSldKShsaXN0KSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvc3BsaXQgc3BsaXR9IHByb2R1Y2VzIGEgbGlzdCBieSBkaXZpZGluZyBhIGdpdmVuIHN0cmluZyBhdCBhbGwgb2NjdXJyZW5jZXMgb2YgYSBnaXZlbiBzZXBhcmF0b3IuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzZXBhcmF0b3JcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKi9cbiAgc3RhdGljIHNwbGl0KHNlcGFyYXRvcjogc3RyaW5nLCBzdHI6IHN0cmluZykge1xuICAgIHJldHVybiBhc0xpc3QoXG4gICAgICB0ZXJyYWZvcm1GdW5jdGlvbihcInNwbGl0XCIsIFtzdHJpbmdWYWx1ZSwgc3RyaW5nVmFsdWVdKShzZXBhcmF0b3IsIHN0ciksXG4gICAgKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9zdGFydHN3aXRoIHN0YXJ0c3dpdGh9IHRha2VzIHR3byB2YWx1ZXM6IGEgc3RyaW5nIHRvIGNoZWNrIGFuZCBhIHByZWZpeCBzdHJpbmcuIFRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgaWYgdGhlIHN0cmluZyBiZWdpbnMgd2l0aCB0aGF0IGV4YWN0IHByZWZpeC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHJlZml4XG4gICAqL1xuICBzdGF0aWMgc3RhcnRzd2l0aChzdHI6IHN0cmluZywgcHJlZml4OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNCb29sZWFuKFxuICAgICAgdGVycmFmb3JtRnVuY3Rpb24oXCJzdGFydHN3aXRoXCIsIFtzdHJpbmdWYWx1ZSwgc3RyaW5nVmFsdWVdKShzdHIsIHByZWZpeCksXG4gICAgKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9zdHJjb250YWlucyBzdHJjb250YWluc30gdGFrZXMgdHdvIHZhbHVlczogYSBzdHJpbmcgdG8gY2hlY2sgYW5kIGFuIGV4cGVjdGVkIHN1YnN0cmluZy4gVGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBpZiB0aGUgc3RyaW5nIGhhcyB0aGUgc3Vic3RyaW5nIGNvbnRhaW5lZCB3aXRoaW4gaXQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN1YnN0clxuICAgKi9cbiAgc3RhdGljIHN0cmNvbnRhaW5zKHN0cjogc3RyaW5nLCBzdWJzdHI6IHN0cmluZykge1xuICAgIHJldHVybiBhc0Jvb2xlYW4oXG4gICAgICB0ZXJyYWZvcm1GdW5jdGlvbihcInN0cmNvbnRhaW5zXCIsIFtzdHJpbmdWYWx1ZSwgc3RyaW5nVmFsdWVdKShzdHIsIHN1YnN0ciksXG4gICAgKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9zdHJyZXYgc3RycmV2fSByZXZlcnNlcyB0aGUgY2hhcmFjdGVycyBpbiBhIHN0cmluZy4gTm90ZSB0aGF0IHRoZSBjaGFyYWN0ZXJzIGFyZSB0cmVhdGVkIGFzIF9Vbmljb2RlIGNoYXJhY3RlcnNfIChpbiB0ZWNobmljYWwgdGVybXMsIFVuaWNvZGUgW2dyYXBoZW1lIGNsdXN0ZXIgYm91bmRhcmllc10oaHR0cHM6Ly91bmljb2RlLm9yZy9yZXBvcnRzL3RyMjkvI0dyYXBoZW1lX0NsdXN0ZXJfQm91bmRhcmllcykgYXJlIHJlc3BlY3RlZCkuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAgICovXG4gIHN0YXRpYyBzdHJyZXYoc3RyOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNTdHJpbmcodGVycmFmb3JtRnVuY3Rpb24oXCJzdHJyZXZcIiwgW3N0cmluZ1ZhbHVlXSkoc3RyKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvc3Vic3RyIHN1YnN0cn0gZXh0cmFjdHMgYSBzdWJzdHJpbmcgZnJvbSBhIGdpdmVuIHN0cmluZyBieSBvZmZzZXQgYW5kIChtYXhpbXVtKSBsZW5ndGguXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldFxuICAgKiBAcGFyYW0ge251bWJlcn0gbGVuZ3RoXG4gICAqL1xuICBzdGF0aWMgc3Vic3RyKHN0cjogc3RyaW5nLCBvZmZzZXQ6IG51bWJlciwgbGVuZ3RoOiBudW1iZXIpIHtcbiAgICByZXR1cm4gYXNTdHJpbmcoXG4gICAgICB0ZXJyYWZvcm1GdW5jdGlvbihcInN1YnN0clwiLCBbc3RyaW5nVmFsdWUsIG51bWVyaWNWYWx1ZSwgbnVtZXJpY1ZhbHVlXSkoXG4gICAgICAgIHN0cixcbiAgICAgICAgb2Zmc2V0LFxuICAgICAgICBsZW5ndGgsXG4gICAgICApLFxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvc3VtIHN1bX0gdGFrZXMgYSBsaXN0IG9yIHNldCBvZiBudW1iZXJzIGFuZCByZXR1cm5zIHRoZSBzdW0gb2YgdGhvc2UgbnVtYmVycy5cbiAgICogQHBhcmFtIHthbnl9IGxpc3RcbiAgICovXG4gIHN0YXRpYyBzdW0obGlzdDogYW55KSB7XG4gICAgcmV0dXJuIGFzQW55KHRlcnJhZm9ybUZ1bmN0aW9uKFwic3VtXCIsIFthbnlWYWx1ZV0pKGxpc3QpKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy90ZW1wbGF0ZWZpbGUgdGVtcGxhdGVmaWxlfSByZWFkcyB0aGUgZmlsZSBhdCB0aGUgZ2l2ZW4gcGF0aCBhbmQgcmVuZGVycyBpdHMgY29udGVudCBhcyBhIHRlbXBsYXRlIHVzaW5nIGEgc3VwcGxpZWQgc2V0IG9mIHRlbXBsYXRlIHZhcmlhYmxlcy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcbiAgICogQHBhcmFtIHthbnl9IHZhcnNcbiAgICovXG4gIHN0YXRpYyB0ZW1wbGF0ZWZpbGUocGF0aDogc3RyaW5nLCB2YXJzOiBhbnkpIHtcbiAgICByZXR1cm4gYXNBbnkoXG4gICAgICB0ZXJyYWZvcm1GdW5jdGlvbihcInRlbXBsYXRlZmlsZVwiLCBbc3RyaW5nVmFsdWUsIGFueVZhbHVlXSkocGF0aCwgdmFycyksXG4gICAgKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy90ZW1wbGF0ZXN0cmluZyB0ZW1wbGF0ZXN0cmluZ30gdGFrZXMgYSBzdHJpbmcgZnJvbSBlbHNld2hlcmUgaW4gdGhlIG1vZHVsZSBhbmQgcmVuZGVycyBpdHMgY29udGVudCBhcyBhIHRlbXBsYXRlIHVzaW5nIGEgc3VwcGxpZWQgc2V0IG9mIHRlbXBsYXRlIHZhcmlhYmxlcy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHRlbXBsYXRlXG4gICAqIEBwYXJhbSB7YW55fSB2YXJzXG4gICAqL1xuICBzdGF0aWMgdGVtcGxhdGVzdHJpbmcodGVtcGxhdGU6IHN0cmluZywgdmFyczogYW55KSB7XG4gICAgcmV0dXJuIGFzU3RyaW5nKFxuICAgICAgdGVycmFmb3JtRnVuY3Rpb24oXCJ0ZW1wbGF0ZXN0cmluZ1wiLCBbc3RyaW5nVmFsdWUsIGFueVZhbHVlXSkoXG4gICAgICAgIHRlbXBsYXRlLFxuICAgICAgICB2YXJzLFxuICAgICAgKSxcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL3RleHRkZWNvZGViYXNlNjQgdGV4dGRlY29kZWJhc2U2NH0gZnVuY3Rpb24gZGVjb2RlcyBhIHN0cmluZyB0aGF0IHdhcyBwcmV2aW91c2x5IEJhc2U2NC1lbmNvZGVkLCBhbmQgdGhlbiBpbnRlcnByZXRzIHRoZSByZXN1bHQgYXMgY2hhcmFjdGVycyBpbiBhIHNwZWNpZmllZCBjaGFyYWN0ZXIgZW5jb2RpbmcuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IGVuY29kaW5nXG4gICAqL1xuICBzdGF0aWMgdGV4dGRlY29kZWJhc2U2NChzb3VyY2U6IHN0cmluZywgZW5jb2Rpbmc6IHN0cmluZykge1xuICAgIHJldHVybiBhc1N0cmluZyhcbiAgICAgIHRlcnJhZm9ybUZ1bmN0aW9uKFwidGV4dGRlY29kZWJhc2U2NFwiLCBbc3RyaW5nVmFsdWUsIHN0cmluZ1ZhbHVlXSkoXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgZW5jb2RpbmcsXG4gICAgICApLFxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvdGV4dGVuY29kZWJhc2U2NCB0ZXh0ZW5jb2RlYmFzZTY0fSBlbmNvZGVzIHRoZSB1bmljb2RlIGNoYXJhY3RlcnMgaW4gYSBnaXZlbiBzdHJpbmcgdXNpbmcgYSBzcGVjaWZpZWQgY2hhcmFjdGVyIGVuY29kaW5nLCByZXR1cm5pbmcgdGhlIHJlc3VsdCBiYXNlNjQgZW5jb2RlZCBiZWNhdXNlIFRlcnJhZm9ybSBsYW5ndWFnZSBzdHJpbmdzIGFyZSBhbHdheXMgc2VxdWVuY2VzIG9mIHVuaWNvZGUgY2hhcmFjdGVycy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKiBAcGFyYW0ge3N0cmluZ30gZW5jb2RpbmdcbiAgICovXG4gIHN0YXRpYyB0ZXh0ZW5jb2RlYmFzZTY0KHN0cjogc3RyaW5nLCBlbmNvZGluZzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGFzU3RyaW5nKFxuICAgICAgdGVycmFmb3JtRnVuY3Rpb24oXCJ0ZXh0ZW5jb2RlYmFzZTY0XCIsIFtzdHJpbmdWYWx1ZSwgc3RyaW5nVmFsdWVdKShcbiAgICAgICAgc3RyLFxuICAgICAgICBlbmNvZGluZyxcbiAgICAgICksXG4gICAgKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy90aW1lYWRkIHRpbWVhZGR9IGFkZHMgYSBkdXJhdGlvbiB0byBhIHRpbWVzdGFtcCwgcmV0dXJuaW5nIGEgbmV3IHRpbWVzdGFtcC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHRpbWVzdGFtcFxuICAgKiBAcGFyYW0ge3N0cmluZ30gZHVyYXRpb25cbiAgICovXG4gIHN0YXRpYyB0aW1lYWRkKHRpbWVzdGFtcDogc3RyaW5nLCBkdXJhdGlvbjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGFzU3RyaW5nKFxuICAgICAgdGVycmFmb3JtRnVuY3Rpb24oXCJ0aW1lYWRkXCIsIFtzdHJpbmdWYWx1ZSwgc3RyaW5nVmFsdWVdKShcbiAgICAgICAgdGltZXN0YW1wLFxuICAgICAgICBkdXJhdGlvbixcbiAgICAgICksXG4gICAgKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy90aW1lY21wIHRpbWVjbXB9IGNvbXBhcmVzIHR3byB0aW1lc3RhbXBzIGFuZCByZXR1cm5zIGEgbnVtYmVyIHRoYXQgcmVwcmVzZW50cyB0aGUgb3JkZXJpbmcgb2YgdGhlIGluc3RhbnRzIHRob3NlIHRpbWVzdGFtcHMgcmVwcmVzZW50LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGltZXN0YW1wX2FcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRpbWVzdGFtcF9iXG4gICAqL1xuICBzdGF0aWMgdGltZWNtcCh0aW1lc3RhbXBfYTogc3RyaW5nLCB0aW1lc3RhbXBfYjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGFzTnVtYmVyKFxuICAgICAgdGVycmFmb3JtRnVuY3Rpb24oXCJ0aW1lY21wXCIsIFtzdHJpbmdWYWx1ZSwgc3RyaW5nVmFsdWVdKShcbiAgICAgICAgdGltZXN0YW1wX2EsXG4gICAgICAgIHRpbWVzdGFtcF9iLFxuICAgICAgKSxcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL3RpbWVzdGFtcCB0aW1lc3RhbXB9IHJldHVybnMgYSBVVEMgdGltZXN0YW1wIHN0cmluZyBpbiBbUkZDIDMzMzldKGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzMzM5KSBmb3JtYXQuXG4gICAqL1xuICBzdGF0aWMgdGltZXN0YW1wKCkge1xuICAgIHJldHVybiBhc1N0cmluZyh0ZXJyYWZvcm1GdW5jdGlvbihcInRpbWVzdGFtcFwiLCBbXSkoKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvdGl0bGUgdGl0bGV9IGNvbnZlcnRzIHRoZSBmaXJzdCBsZXR0ZXIgb2YgZWFjaCB3b3JkIGluIHRoZSBnaXZlbiBzdHJpbmcgdG8gdXBwZXJjYXNlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gICAqL1xuICBzdGF0aWMgdGl0bGUoc3RyOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNTdHJpbmcodGVycmFmb3JtRnVuY3Rpb24oXCJ0aXRsZVwiLCBbc3RyaW5nVmFsdWVdKShzdHIpKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy90b2Jvb2wgdG9ib29sfSBjb252ZXJ0cyBpdHMgYXJndW1lbnQgdG8gYSBib29sZWFuIHZhbHVlLlxuICAgKiBAcGFyYW0ge2FueX0gdlxuICAgKi9cbiAgc3RhdGljIHRvYm9vbCh2OiBhbnkpIHtcbiAgICByZXR1cm4gYXNCb29sZWFuKHRlcnJhZm9ybUZ1bmN0aW9uKFwidG9ib29sXCIsIFthbnlWYWx1ZV0pKHYpKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy90b2xpc3QgdG9saXN0fSBjb252ZXJ0cyBpdHMgYXJndW1lbnQgdG8gYSBsaXN0IHZhbHVlLlxuICAgKiBAcGFyYW0ge2FueX0gdlxuICAgKi9cbiAgc3RhdGljIHRvbGlzdCh2OiBhbnkpIHtcbiAgICByZXR1cm4gYXNMaXN0KHRlcnJhZm9ybUZ1bmN0aW9uKFwidG9saXN0XCIsIFthbnlWYWx1ZV0pKHYpKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy90b21hcCB0b21hcH0gY29udmVydHMgaXRzIGFyZ3VtZW50IHRvIGEgbWFwIHZhbHVlLlxuICAgKiBAcGFyYW0ge2FueX0gdlxuICAgKi9cbiAgc3RhdGljIHRvbWFwKHY6IGFueSkge1xuICAgIHJldHVybiBhc0FueSh0ZXJyYWZvcm1GdW5jdGlvbihcInRvbWFwXCIsIFthbnlWYWx1ZV0pKHYpKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy90b251bWJlciB0b251bWJlcn0gY29udmVydHMgaXRzIGFyZ3VtZW50IHRvIGEgbnVtYmVyIHZhbHVlLlxuICAgKiBAcGFyYW0ge2FueX0gdlxuICAgKi9cbiAgc3RhdGljIHRvbnVtYmVyKHY6IGFueSkge1xuICAgIHJldHVybiBhc051bWJlcih0ZXJyYWZvcm1GdW5jdGlvbihcInRvbnVtYmVyXCIsIFthbnlWYWx1ZV0pKHYpKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy90b3NldCB0b3NldH0gY29udmVydHMgaXRzIGFyZ3VtZW50IHRvIGEgc2V0IHZhbHVlLlxuICAgKiBAcGFyYW0ge2FueX0gdlxuICAgKi9cbiAgc3RhdGljIHRvc2V0KHY6IGFueSkge1xuICAgIHJldHVybiBhc0xpc3QodGVycmFmb3JtRnVuY3Rpb24oXCJ0b3NldFwiLCBbYW55VmFsdWVdKSh2KSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvdG9zdHJpbmcgdG9zdHJpbmd9IGNvbnZlcnRzIGl0cyBhcmd1bWVudCB0byBhIHN0cmluZyB2YWx1ZS5cbiAgICogQHBhcmFtIHthbnl9IHZcbiAgICovXG4gIHN0YXRpYyB0b3N0cmluZyh2OiBhbnkpIHtcbiAgICByZXR1cm4gYXNTdHJpbmcodGVycmFmb3JtRnVuY3Rpb24oXCJ0b3N0cmluZ1wiLCBbYW55VmFsdWVdKSh2KSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvdHJhbnNwb3NlIHRyYW5zcG9zZX0gdGFrZXMgYSBtYXAgb2YgbGlzdHMgb2Ygc3RyaW5ncyBhbmQgc3dhcHMgdGhlIGtleXMgYW5kIHZhbHVlcyB0byBwcm9kdWNlIGEgbmV3IG1hcCBvZiBsaXN0cyBvZiBzdHJpbmdzLlxuICAgKiBAcGFyYW0ge09iamVjdDxzdHJpbmcsIEFycmF5PHN0cmluZz4+fSB2YWx1ZXNcbiAgICovXG4gIHN0YXRpYyB0cmFuc3Bvc2UodmFsdWVzOiBhbnkpIHtcbiAgICByZXR1cm4gYXNBbnkodGVycmFmb3JtRnVuY3Rpb24oXCJ0cmFuc3Bvc2VcIiwgW21hcFZhbHVlXSkodmFsdWVzKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvdHJpbSB0cmltfSByZW1vdmVzIHRoZSBzcGVjaWZpZWQgc2V0IG9mIGNoYXJhY3RlcnMgZnJvbSB0aGUgc3RhcnQgYW5kIGVuZCBvZiB0aGUgZ2l2ZW4gc3RyaW5nLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjdXRzZXRcbiAgICovXG4gIHN0YXRpYyB0cmltKHN0cjogc3RyaW5nLCBjdXRzZXQ6IHN0cmluZykge1xuICAgIHJldHVybiBhc1N0cmluZyhcbiAgICAgIHRlcnJhZm9ybUZ1bmN0aW9uKFwidHJpbVwiLCBbc3RyaW5nVmFsdWUsIHN0cmluZ1ZhbHVlXSkoc3RyLCBjdXRzZXQpLFxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvdHJpbXByZWZpeCB0cmltcHJlZml4fSByZW1vdmVzIHRoZSBzcGVjaWZpZWQgcHJlZml4IGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBnaXZlbiBzdHJpbmcuIElmIHRoZSBzdHJpbmcgZG9lcyBub3Qgc3RhcnQgd2l0aCB0aGUgcHJlZml4LCB0aGUgc3RyaW5nIGlzIHJldHVybmVkIHVuY2hhbmdlZC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHJlZml4XG4gICAqL1xuICBzdGF0aWMgdHJpbXByZWZpeChzdHI6IHN0cmluZywgcHJlZml4OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNTdHJpbmcoXG4gICAgICB0ZXJyYWZvcm1GdW5jdGlvbihcInRyaW1wcmVmaXhcIiwgW3N0cmluZ1ZhbHVlLCBzdHJpbmdWYWx1ZV0pKHN0ciwgcHJlZml4KSxcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL3RyaW1zcGFjZSB0cmltc3BhY2V9IHJlbW92ZXMgYW55IHNwYWNlIGNoYXJhY3RlcnMgZnJvbSB0aGUgc3RhcnQgYW5kIGVuZCBvZiB0aGUgZ2l2ZW4gc3RyaW5nLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gICAqL1xuICBzdGF0aWMgdHJpbXNwYWNlKHN0cjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGFzU3RyaW5nKHRlcnJhZm9ybUZ1bmN0aW9uKFwidHJpbXNwYWNlXCIsIFtzdHJpbmdWYWx1ZV0pKHN0cikpO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL3RyaW1zdWZmaXggdHJpbXN1ZmZpeH0gcmVtb3ZlcyB0aGUgc3BlY2lmaWVkIHN1ZmZpeCBmcm9tIHRoZSBlbmQgb2YgdGhlIGdpdmVuIHN0cmluZy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3VmZml4XG4gICAqL1xuICBzdGF0aWMgdHJpbXN1ZmZpeChzdHI6IHN0cmluZywgc3VmZml4OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNTdHJpbmcoXG4gICAgICB0ZXJyYWZvcm1GdW5jdGlvbihcInRyaW1zdWZmaXhcIiwgW3N0cmluZ1ZhbHVlLCBzdHJpbmdWYWx1ZV0pKHN0ciwgc3VmZml4KSxcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL3RyeSB0cnl9IGV2YWx1YXRlcyBhbGwgb2YgaXRzIGFyZ3VtZW50IGV4cHJlc3Npb25zIGluIHR1cm4gYW5kIHJldHVybnMgdGhlIHJlc3VsdCBvZiB0aGUgZmlyc3Qgb25lIHRoYXQgZG9lcyBub3QgcHJvZHVjZSBhbnkgZXJyb3JzLlxuICAgKiBAcGFyYW0ge0FycmF5PGFueT59IGV4cHJlc3Npb25zXG4gICAqL1xuICBzdGF0aWMgdHJ5KGV4cHJlc3Npb25zOiBhbnlbXSkge1xuICAgIHJldHVybiBhc0FueSh0ZXJyYWZvcm1GdW5jdGlvbihcInRyeVwiLCBbdmFyaWFkaWMoYW55VmFsdWUpXSkoZXhwcmVzc2lvbnMpKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy91cHBlciB1cHBlcn0gY29udmVydHMgYWxsIGNhc2VkIGxldHRlcnMgaW4gdGhlIGdpdmVuIHN0cmluZyB0byB1cHBlcmNhc2UuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAgICovXG4gIHN0YXRpYyB1cHBlcihzdHI6IHN0cmluZykge1xuICAgIHJldHVybiBhc1N0cmluZyh0ZXJyYWZvcm1GdW5jdGlvbihcInVwcGVyXCIsIFtzdHJpbmdWYWx1ZV0pKHN0cikpO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9vcGVudG9mdS5vcmcvZG9jcy9sYW5ndWFnZS9mdW5jdGlvbnMvdXJsZGVjb2RlIHVybGRlY29kZX0gYXBwbGllcyBVUkwgZGVjb2RpbmcgdG8gYSBnaXZlbiBlbmNvZGVkIHN0cmluZy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKi9cbiAgc3RhdGljIHVybGRlY29kZShzdHI6IHN0cmluZykge1xuICAgIHJldHVybiBhc1N0cmluZyh0ZXJyYWZvcm1GdW5jdGlvbihcInVybGRlY29kZVwiLCBbc3RyaW5nVmFsdWVdKShzdHIpKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy91cmxlbmNvZGUgdXJsZW5jb2RlfSBhcHBsaWVzIFVSTCBlbmNvZGluZyB0byBhIGdpdmVuIHN0cmluZy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKi9cbiAgc3RhdGljIHVybGVuY29kZShzdHI6IHN0cmluZykge1xuICAgIHJldHVybiBhc1N0cmluZyh0ZXJyYWZvcm1GdW5jdGlvbihcInVybGVuY29kZVwiLCBbc3RyaW5nVmFsdWVdKShzdHIpKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy91dWlkIHV1aWR9IGdlbmVyYXRlcyBhIHVuaXF1ZSBpZGVudGlmaWVyIHN0cmluZy5cbiAgICovXG4gIHN0YXRpYyB1dWlkKCkge1xuICAgIHJldHVybiBhc1N0cmluZyh0ZXJyYWZvcm1GdW5jdGlvbihcInV1aWRcIiwgW10pKCkpO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL3V1aWR2NSB1dWlkdjV9IGdlbmVyYXRlcyBhIF9uYW1lLWJhc2VkXyBVVUlELCBhcyBkZXNjcmliZWQgaW4gW1JGQyA0MTIyIHNlY3Rpb24gNC4zXShodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNDEyMiNzZWN0aW9uLTQuMyksIGFsc28ga25vd24gYXMgYSBcInZlcnNpb24gNVwiIFVVSUQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lc3BhY2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICovXG4gIHN0YXRpYyB1dWlkdjUobmFtZXNwYWNlOiBzdHJpbmcsIG5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiBhc1N0cmluZyhcbiAgICAgIHRlcnJhZm9ybUZ1bmN0aW9uKFwidXVpZHY1XCIsIFtzdHJpbmdWYWx1ZSwgc3RyaW5nVmFsdWVdKShuYW1lc3BhY2UsIG5hbWUpLFxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvdmFsdWVzIHZhbHVlc30gdGFrZXMgYSBtYXAgYW5kIHJldHVybnMgYSBsaXN0IGNvbnRhaW5pbmcgdGhlIHZhbHVlcyBvZiB0aGUgZWxlbWVudHMgaW4gdGhhdCBtYXAuXG4gICAqIEBwYXJhbSB7YW55fSBtYXBwaW5nXG4gICAqL1xuICBzdGF0aWMgdmFsdWVzKG1hcHBpbmc6IGFueSkge1xuICAgIHJldHVybiBhc0FueSh0ZXJyYWZvcm1GdW5jdGlvbihcInZhbHVlc1wiLCBbYW55VmFsdWVdKShtYXBwaW5nKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMveWFtbGRlY29kZSB5YW1sZGVjb2RlfSBwYXJzZXMgYSBzdHJpbmcgYXMgYSBzdWJzZXQgb2YgWUFNTCwgYW5kIHByb2R1Y2VzIGEgcmVwcmVzZW50YXRpb24gb2YgaXRzIHZhbHVlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3JjXG4gICAqL1xuICBzdGF0aWMgeWFtbGRlY29kZShzcmM6IHN0cmluZykge1xuICAgIHJldHVybiBhc0FueSh0ZXJyYWZvcm1GdW5jdGlvbihcInlhbWxkZWNvZGVcIiwgW3N0cmluZ1ZhbHVlXSkoc3JjKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMveWFtbGVuY29kZSB5YW1sZW5jb2RlfSBlbmNvZGVzIGEgZ2l2ZW4gdmFsdWUgdG8gYSBzdHJpbmcgdXNpbmcgW1lBTUwgMS4yXShodHRwczovL3lhbWwub3JnL3NwZWMvMS4yL3NwZWMuaHRtbCkgYmxvY2sgc3ludGF4LlxuICAgKiBAcGFyYW0ge2FueX0gdmFsdWVcbiAgICovXG4gIHN0YXRpYyB5YW1sZW5jb2RlKHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gYXNTdHJpbmcodGVycmFmb3JtRnVuY3Rpb24oXCJ5YW1sZW5jb2RlXCIsIFthbnlWYWx1ZV0pKHZhbHVlKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvemlwbWFwIHppcG1hcH0gY29uc3RydWN0cyBhIG1hcCBmcm9tIGEgbGlzdCBvZiBrZXlzIGFuZCBhIGNvcnJlc3BvbmRpbmcgbGlzdCBvZiB2YWx1ZXMuXG4gICAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0ga2V5c1xuICAgKiBAcGFyYW0ge2FueX0gdmFsdWVzXG4gICAqL1xuICBzdGF0aWMgemlwbWFwKGtleXM6IHN0cmluZ1tdLCB2YWx1ZXM6IGFueSkge1xuICAgIHJldHVybiBhc0FueShcbiAgICAgIHRlcnJhZm9ybUZ1bmN0aW9uKFwiemlwbWFwXCIsIFtsaXN0T2YoYW55VmFsdWUpLCBhbnlWYWx1ZV0pKGtleXMsIHZhbHVlcyksXG4gICAgKTtcbiAgfVxufVxuIl19
|
|
937
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVycmFmb3JtLWZ1bmN0aW9ucy5nZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZnVuY3Rpb25zL3RlcnJhZm9ybS1mdW5jdGlvbnMuZ2VuZXJhdGVkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSwrQkFBK0I7QUFDL0IsbUNBQW1DO0FBQ25DOzs7R0FHRztBQUNILHVDQWFtQjtBQUNuQiwrQ0FBK0M7QUFDL0MsTUFBYSxXQUFXOztJQUN0Qjs7O09BR0c7SUFDSCxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQVc7UUFDcEIsT0FBTyxJQUFBLGtCQUFRLEVBQUMsSUFBQSwyQkFBaUIsRUFBQyxLQUFLLEVBQUUsQ0FBQyxzQkFBWSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFDRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsT0FBTyxDQUFDLElBQVk7UUFDekIsT0FBTyxJQUFBLGtCQUFRLEVBQUMsSUFBQSwyQkFBaUIsRUFBQyxTQUFTLEVBQUUsQ0FBQyxxQkFBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7SUFDRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsT0FBTyxDQUFDLElBQVc7UUFDeEIsT0FBTyxJQUFBLG1CQUFTLEVBQUMsSUFBQSwyQkFBaUIsRUFBQyxTQUFTLEVBQUUsQ0FBQyxJQUFBLGdCQUFNLEVBQUMsa0JBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFDRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsT0FBTyxDQUFDLElBQVc7UUFDeEIsT0FBTyxJQUFBLG1CQUFTLEVBQUMsSUFBQSwyQkFBaUIsRUFBQyxTQUFTLEVBQUUsQ0FBQyxJQUFBLGdCQUFNLEVBQUMsa0JBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFDRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsWUFBWSxDQUFDLEdBQVc7UUFDN0IsT0FBTyxJQUFBLGtCQUFRLEVBQUMsSUFBQSwyQkFBaUIsRUFBQyxjQUFjLEVBQUUsQ0FBQyxxQkFBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFDRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsWUFBWSxDQUFDLEdBQVc7UUFDN0IsT0FBTyxJQUFBLGtCQUFRLEVBQUMsSUFBQSwyQkFBaUIsRUFBQyxjQUFjLEVBQUUsQ0FBQyxxQkFBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFDRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsWUFBWSxDQUFDLEdBQVc7UUFDN0IsT0FBTyxJQUFBLGtCQUFRLEVBQUMsSUFBQSwyQkFBaUIsRUFBQyxjQUFjLEVBQUUsQ0FBQyxxQkFBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFDRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQVc7UUFDM0IsT0FBTyxJQUFBLGtCQUFRLEVBQUMsSUFBQSwyQkFBaUIsRUFBQyxZQUFZLEVBQUUsQ0FBQyxxQkFBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFDRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsWUFBWSxDQUFDLEdBQVc7UUFDN0IsT0FBTyxJQUFBLGtCQUFRLEVBQUMsSUFBQSwyQkFBaUIsRUFBQyxjQUFjLEVBQUUsQ0FBQyxxQkFBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFDRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsWUFBWSxDQUFDLEdBQVc7UUFDN0IsT0FBTyxJQUFBLGtCQUFRLEVBQUMsSUFBQSwyQkFBaUIsRUFBQyxjQUFjLEVBQUUsQ0FBQyxxQkFBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FB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OztPQUdHO0lBQ0gsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFXO1FBQzNCLE9BQU8sSUFBQSxlQUFLLEVBQUMsSUFBQSwyQkFBaUIsRUFBQyxZQUFZLEVBQUUsQ0FBQyxxQkFBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3BFLENBQUM7SUFDRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsVUFBVSxDQUFDLEtBQVU7UUFDMUIsT0FBTyxJQUFBLGtCQUFRLEVBQUMsSUFBQSwyQkFBaUIsRUFBQyxZQUFZLEVBQUUsQ0FBQyxrQkFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFDRDs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFjLEVBQUUsTUFBVztRQUN2QyxPQUFPLElBQUEsZUFBSyxFQUNWLElBQUEsMkJBQWlCLEVBQUMsUUFBUSxFQUFFLENBQUMsSUFBQSxnQkFBTSxFQUFDLGtCQUFRLENBQUMsRUFBRSxrQkFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQ3hFLENBQUM7SUFDSixDQUFDOztBQXBqQ0gsa0NBcWpDQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCAoYykgSGFzaGlDb3JwLCBJbmNcbi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNUEwtMi4wXG4vKlxuICogVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBieSB0b29scy9nZW5lcmF0ZS1mdW5jdGlvbi1iaW5kaW5ncy5cbiAqIFRvIHVwZGF0ZSB0aGlzIGZpbGUgZXhlY3V0ZSAncG5wbSBnZW5lcmF0ZS1mdW5jdGlvbi1iaW5kaW5ncycgaW4gdGhlIHJvb3Qgb2YgdGhlIHJlcG9zaXRvcnlcbiAqL1xuaW1wb3J0IHtcbiAgYW55VmFsdWUsXG4gIGFzQW55LFxuICBhc0Jvb2xlYW4sXG4gIGFzTGlzdCxcbiAgYXNOdW1iZXIsXG4gIGFzU3RyaW5nLFxuICBsaXN0T2YsXG4gIG1hcFZhbHVlLFxuICBudW1lcmljVmFsdWUsXG4gIHN0cmluZ1ZhbHVlLFxuICB0ZXJyYWZvcm1GdW5jdGlvbixcbiAgdmFyaWFkaWMsXG59IGZyb20gXCIuL2hlbHBlcnNcIjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBqc2RvYy9yZXF1aXJlLWpzZG9jXG5leHBvcnQgY2xhc3MgRm5HZW5lcmF0ZWQge1xuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9hYnMgYWJzfSByZXR1cm5zIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiB0aGUgZ2l2ZW4gbnVtYmVyLiBJbiBvdGhlciB3b3JkcywgaWYgdGhlIG51bWJlciBpcyB6ZXJvIG9yIHBvc2l0aXZlIHRoZW4gaXQgaXMgcmV0dXJuZWQgYXMtaXMsIGJ1dCBpZiBpdCBpcyBuZWdhdGl2ZSB0aGVuIGl0IGlzIG11bHRpcGxpZWQgYnkgLTEgdG8gbWFrZSBpdCBwb3NpdGl2ZSBiZWZvcmUgcmV0dXJuaW5nIGl0LlxuICAgKiBAcGFyYW0ge251bWJlcn0gbnVtXG4gICAqL1xuICBzdGF0aWMgYWJzKG51bTogbnVtYmVyKSB7XG4gICAgcmV0dXJuIGFzTnVtYmVyKHRlcnJhZm9ybUZ1bmN0aW9uKFwiYWJzXCIsIFtudW1lcmljVmFsdWVdKShudW0pKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9hYnNwYXRoIGFic3BhdGh9IHRha2VzIGEgc3RyaW5nIGNvbnRhaW5pbmcgYSBmaWxlc3lzdGVtIHBhdGggYW5kIGNvbnZlcnRzIGl0IHRvIGFuIGFic29sdXRlIHBhdGguIFRoYXQgaXMsIGlmIHRoZSBwYXRoIGlzIG5vdCBhYnNvbHV0ZSwgaXQgd2lsbCBiZSBqb2luZWQgd2l0aCB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcbiAgICovXG4gIHN0YXRpYyBhYnNwYXRoKHBhdGg6IHN0cmluZykge1xuICAgIHJldHVybiBhc1N0cmluZyh0ZXJyYWZvcm1GdW5jdGlvbihcImFic3BhdGhcIiwgW3N0cmluZ1ZhbHVlXSkocGF0aCkpO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL2FsbHRydWUgYWxsdHJ1ZX0gcmV0dXJucyBgdHJ1ZWAgaWYgYWxsIGVsZW1lbnRzIGluIGEgZ2l2ZW4gY29sbGVjdGlvbiBhcmUgYHRydWVgIG9yIGBcInRydWVcImAuIEl0IGFsc28gcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGNvbGxlY3Rpb24gaXMgZW1wdHkuXG4gICAqIEBwYXJhbSB7QXJyYXk8YW55Pn0gbGlzdFxuICAgKi9cbiAgc3RhdGljIGFsbHRydWUobGlzdDogYW55W10pIHtcbiAgICByZXR1cm4gYXNCb29sZWFuKHRlcnJhZm9ybUZ1bmN0aW9uKFwiYWxsdHJ1ZVwiLCBbbGlzdE9mKGFueVZhbHVlKV0pKGxpc3QpKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9hbnl0cnVlIGFueXRydWV9IHJldHVybnMgYHRydWVgIGlmIGFueSBlbGVtZW50IGluIGEgZ2l2ZW4gY29sbGVjdGlvbiBpcyBgdHJ1ZWAgb3IgYFwidHJ1ZVwiYC4gSXQgYWxzbyByZXR1cm5zIGBmYWxzZWAgaWYgdGhlIGNvbGxlY3Rpb24gaXMgZW1wdHkuXG4gICAqIEBwYXJhbSB7QXJyYXk8YW55Pn0gbGlzdFxuICAgKi9cbiAgc3RhdGljIGFueXRydWUobGlzdDogYW55W10pIHtcbiAgICByZXR1cm4gYXNCb29sZWFuKHRlcnJhZm9ybUZ1bmN0aW9uKFwiYW55dHJ1ZVwiLCBbbGlzdE9mKGFueVZhbHVlKV0pKGxpc3QpKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9iYXNlNjRkZWNvZGUgYmFzZTY0ZGVjb2RlfSB0YWtlcyBhIHN0cmluZyBjb250YWluaW5nIGEgQmFzZTY0IGNoYXJhY3RlciBzZXF1ZW5jZSBhbmQgcmV0dXJucyB0aGUgb3JpZ2luYWwgc3RyaW5nLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gICAqL1xuICBzdGF0aWMgYmFzZTY0ZGVjb2RlKHN0cjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGFzU3RyaW5nKHRlcnJhZm9ybUZ1bmN0aW9uKFwiYmFzZTY0ZGVjb2RlXCIsIFtzdHJpbmdWYWx1ZV0pKHN0cikpO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL2Jhc2U2NGVuY29kZSBiYXNlNjRlbmNvZGV9IGFwcGxpZXMgQmFzZTY0IGVuY29kaW5nIHRvIGEgc3RyaW5nLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gICAqL1xuICBzdGF0aWMgYmFzZTY0ZW5jb2RlKHN0cjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGFzU3RyaW5nKHRlcnJhZm9ybUZ1bmN0aW9uKFwiYmFzZTY0ZW5jb2RlXCIsIFtzdHJpbmdWYWx1ZV0pKHN0cikpO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9vcGVudG9mdS5vcmcvZG9jcy9sYW5ndWFnZS9mdW5jdGlvbnMvYmFzZTY0Z3VuemlwIGJhc2U2NGd1bnppcH0gZGVjb2RlcyBhIEJhc2U2NC1lbmNvZGVkIHN0cmluZyBhbmQgdW5jb21wcmVzc2VzIHRoZSByZXN1bHQgd2l0aCBnemlwLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gICAqL1xuICBzdGF0aWMgYmFzZTY0Z3VuemlwKHN0cjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGFzU3RyaW5nKHRlcnJhZm9ybUZ1bmN0aW9uKFwiYmFzZTY0Z3VuemlwXCIsIFtzdHJpbmdWYWx1ZV0pKHN0cikpO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL2Jhc2U2NGd6aXAgYmFzZTY0Z3ppcH0gY29tcHJlc3NlcyBhIHN0cmluZyB3aXRoIGd6aXAgYW5kIHRoZW4gZW5jb2RlcyB0aGUgcmVzdWx0IGluIEJhc2U2NCBlbmNvZGluZy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKi9cbiAgc3RhdGljIGJhc2U2NGd6aXAoc3RyOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNTdHJpbmcodGVycmFmb3JtRnVuY3Rpb24oXCJiYXNlNjRnemlwXCIsIFtzdHJpbmdWYWx1ZV0pKHN0cikpO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL2Jhc2U2NHNoYTI1NiBiYXNlNjRzaGEyNTZ9IGNvbXB1dGVzIHRoZSBTSEEyNTYgaGFzaCBvZiBhIGdpdmVuIHN0cmluZyBhbmQgZW5jb2RlcyBpdCB3aXRoIEJhc2U2NC4gVGhpcyBpcyBub3QgZXF1aXZhbGVudCB0byBgYmFzZTY0ZW5jb2RlKHNoYTI1NihcInRlc3RcIikpYCBzaW5jZSBgc2hhMjU2KClgIHJldHVybnMgaGV4YWRlY2ltYWwgcmVwcmVzZW50YXRpb24uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAgICovXG4gIHN0YXRpYyBiYXNlNjRzaGEyNTYoc3RyOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNTdHJpbmcodGVycmFmb3JtRnVuY3Rpb24oXCJiYXNlNjRzaGEyNTZcIiwgW3N0cmluZ1ZhbHVlXSkoc3RyKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvYmFzZTY0c2hhNTEyIGJhc2U2NHNoYTUxMn0gY29tcHV0ZXMgdGhlIFNIQTUxMiBoYXNoIG9mIGEgZ2l2ZW4gc3RyaW5nIGFuZCBlbmNvZGVzIGl0IHdpdGggQmFzZTY0LiBUaGlzIGlzIG5vdCBlcXVpdmFsZW50IHRvIGBiYXNlNjRlbmNvZGUoc2hhNTEyKFwidGVzdFwiKSlgIHNpbmNlIGBzaGE1MTIoKWAgcmV0dXJucyBoZXhhZGVjaW1hbCByZXByZXNlbnRhdGlvbi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKi9cbiAgc3RhdGljIGJhc2U2NHNoYTUxMihzdHI6IHN0cmluZykge1xuICAgIHJldHVybiBhc1N0cmluZyh0ZXJyYWZvcm1GdW5jdGlvbihcImJhc2U2NHNoYTUxMlwiLCBbc3RyaW5nVmFsdWVdKShzdHIpKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9iYXNlbmFtZSBiYXNlbmFtZX0gdGFrZXMgYSBzdHJpbmcgY29udGFpbmluZyBhIGZpbGVzeXN0ZW0gcGF0aCBhbmQgcmVtb3ZlcyBhbGwgZXhjZXB0IHRoZSBsYXN0IHBvcnRpb24gZnJvbSBpdC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcbiAgICovXG4gIHN0YXRpYyBiYXNlbmFtZShwYXRoOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNTdHJpbmcodGVycmFmb3JtRnVuY3Rpb24oXCJiYXNlbmFtZVwiLCBbc3RyaW5nVmFsdWVdKShwYXRoKSk7XG4gIH1cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL2JjcnlwdCBiY3J5cHR9IGNvbXB1dGVzIGEgaGFzaCBvZiB0aGUgZ2l2ZW4gc3RyaW5nIHVzaW5nIHRoZSBCbG93ZmlzaCBjaXBoZXIsIHJldHVybmluZyBhIHN0cmluZyBpbiBbdGhlIF9Nb2R1bGFyIENyeXB0IEZvcm1hdF9dKGh0dHBzOi8vcGFzc2xpYi5yZWFkdGhlZG9jcy5pby9lbi9zdGFibGUvbW9kdWxhcl9jcnlwdF9mb3JtYXQuaHRtbCkgdXN1YWxseSBleHBlY3RlZCBpbiB0aGUgc2hhZG93IHBhc3N3b3JkIGZpbGUgb24gbWFueSBVbml4IHN5c3RlbXMuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAgICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBjb3N0XG4gICAqL1xuICBzdGF0aWMgX2JjcnlwdChzdHI6IHN0cmluZywgY29zdDogbnVtYmVyW10pIHtcbiAgICByZXR1cm4gYXNTdHJpbmcoXG4gICAgICB0ZXJyYWZvcm1GdW5jdGlvbihcImJjcnlwdFwiLCBbc3RyaW5nVmFsdWUsIHZhcmlhZGljKG51bWVyaWNWYWx1ZSldKShcbiAgICAgICAgc3RyLFxuICAgICAgICBjb3N0LFxuICAgICAgKSxcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL2NhbiBjYW59IGV2YWx1YXRlcyB0aGUgZ2l2ZW4gZXhwcmVzc2lvbiBhbmQgcmV0dXJucyBhIGJvb2xlYW4gdmFsdWUgaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBleHByZXNzaW9uIHByb2R1Y2VkIGEgcmVzdWx0IHdpdGhvdXQgYW55IGVycm9ycy5cbiAgICogQHBhcmFtIHthbnl9IGV4cHJlc3Npb25cbiAgICovXG4gIHN0YXRpYyBjYW4oZXhwcmVzc2lvbjogYW55KSB7XG4gICAgcmV0dXJuIGFzQm9vbGVhbih0ZXJyYWZvcm1GdW5jdGlvbihcImNhblwiLCBbYW55VmFsdWVdKShleHByZXNzaW9uKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvY2VpbCBjZWlsfSByZXR1cm5zIHRoZSBjbG9zZXN0IHdob2xlIG51bWJlciB0aGF0IGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgZ2l2ZW4gdmFsdWUsIHdoaWNoIG1heSBiZSBhIGZyYWN0aW9uLlxuICAgKiBAcGFyYW0ge251bWJlcn0gbnVtXG4gICAqL1xuICBzdGF0aWMgY2VpbChudW06IG51bWJlcikge1xuICAgIHJldHVybiBhc051bWJlcih0ZXJyYWZvcm1GdW5jdGlvbihcImNlaWxcIiwgW251bWVyaWNWYWx1ZV0pKG51bSkpO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL2Nob21wIGNob21wfSByZW1vdmVzIG5ld2xpbmUgY2hhcmFjdGVycyBhdCB0aGUgZW5kIG9mIGEgc3RyaW5nLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gICAqL1xuICBzdGF0aWMgY2hvbXAoc3RyOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNTdHJpbmcodGVycmFmb3JtRnVuY3Rpb24oXCJjaG9tcFwiLCBbc3RyaW5nVmFsdWVdKShzdHIpKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9jaHVua2xpc3QgY2h1bmtsaXN0fSBzcGxpdHMgYSBzaW5nbGUgbGlzdCBpbnRvIGZpeGVkLXNpemUgY2h1bmtzLCByZXR1cm5pbmcgYSBsaXN0IG9mIGxpc3RzLlxuICAgKiBAcGFyYW0ge0FycmF5PGFueT59IGxpc3RcbiAgICogQHBhcmFtIHtudW1iZXJ9IHNpemVcbiAgICovXG4gIHN0YXRpYyBjaHVua2xpc3QobGlzdDogYW55W10sIHNpemU6IG51bWJlcikge1xuICAgIHJldHVybiBhc0xpc3QoXG4gICAgICB0ZXJyYWZvcm1GdW5jdGlvbihcImNodW5rbGlzdFwiLCBbbGlzdE9mKGFueVZhbHVlKSwgbnVtZXJpY1ZhbHVlXSkoXG4gICAgICAgIGxpc3QsXG4gICAgICAgIHNpemUsXG4gICAgICApLFxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL29wZW50b2Z1Lm9yZy9kb2NzL2xhbmd1YWdlL2Z1bmN0aW9ucy9jaWRyY29udGFpbnMgY2lkcmNvbnRhaW5zfSBkZXRlcm1pbmVzIHdoZXRoZXIgYSBnaXZlbiBJUCBhZGRyZXNzIG9yIGFuIGFkZHJlc3MgcHJlZml4IGdpdmVuIGluIENJRFIgbm90YXRpb24gaXMgd2l0aGluIGEgZ2l2ZW4gSVAgbmV0d29yayBhZGRyZXNzIHByZWZpeC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGNvbnRhaW5pbmdfcHJlZml4XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjb250YWluZWRfaXBfb3JfcHJlZml4XG4gICAqL1xuICBzdGF0aWMgY2lkcmNvbnRhaW5zKFxuICAgIGNvbnRhaW5pbmdfcHJlZml4OiBzdHJpbmcsXG4gICAgY29udGFpbmVkX2lwX29yX3ByZWZpeDogc3RyaW5nLFxuICApIHtcbiAgICByZXR1cm4gYXNCb29sZWFuKFxuICAgICAgdGVycmFmb3JtRnVuY3Rpb24oXCJjaWRyY29udGFpbnNcIiwgW3N0cmluZ1ZhbHVlLCBzdHJpbmdWYWx1ZV0pKFxuICAgICAgICBjb250YWluaW5nX3ByZWZpeCxcbiAgICAgICAgY29udGFpbmVkX2lwX29yX3ByZWZpeCxcbiAgICAgICksXG4gICAgKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9jaWRyaG9zdCBjaWRyaG9zdH0gY2FsY3VsYXRlcyBhIGZ1bGwgaG9zdCBJUCBhZGRyZXNzIGZvciBhIGdpdmVuIGhvc3QgbnVtYmVyIHdpdGhpbiBhIGdpdmVuIElQIG5ldHdvcmsgYWRkcmVzcyBwcmVmaXguXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwcmVmaXhcbiAgICogQHBhcmFtIHtudW1iZXJ9IGhvc3RudW1cbiAgICovXG4gIHN0YXRpYyBjaWRyaG9zdChwcmVmaXg6IHN0cmluZywgaG9zdG51bTogbnVtYmVyKSB7XG4gICAgcmV0dXJuIGFzU3RyaW5nKFxuICAgICAgdGVycmFmb3JtRnVuY3Rpb24oXCJjaWRyaG9zdFwiLCBbc3RyaW5nVmFsdWUsIG51bWVyaWNWYWx1ZV0pKFxuICAgICAgICBwcmVmaXgsXG4gICAgICAgIGhvc3RudW0sXG4gICAgICApLFxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvY2lkcm5ldG1hc2sgY2lkcm5ldG1hc2t9IGNvbnZlcnRzIGFuIElQdjQgYWRkcmVzcyBwcmVmaXggZ2l2ZW4gaW4gQ0lEUiBub3RhdGlvbiBpbnRvIGEgc3VibmV0IG1hc2sgYWRkcmVzcy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHByZWZpeFxuICAgKi9cbiAgc3RhdGljIGNpZHJuZXRtYXNrKHByZWZpeDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGFzU3RyaW5nKHRlcnJhZm9ybUZ1bmN0aW9uKFwiY2lkcm5ldG1hc2tcIiwgW3N0cmluZ1ZhbHVlXSkocHJlZml4KSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvY2lkcnN1Ym5ldCBjaWRyc3VibmV0fSBjYWxjdWxhdGVzIGEgc3VibmV0IGFkZHJlc3Mgd2l0aGluIGdpdmVuIElQIG5ldHdvcmsgYWRkcmVzcyBwcmVmaXguXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwcmVmaXhcbiAgICogQHBhcmFtIHtudW1iZXJ9IG5ld2JpdHNcbiAgICogQHBhcmFtIHtudW1iZXJ9IG5ldG51bVxuICAgKi9cbiAgc3RhdGljIGNpZHJzdWJuZXQocHJlZml4OiBzdHJpbmcsIG5ld2JpdHM6IG51bWJlciwgbmV0bnVtOiBudW1iZXIpIHtcbiAgICByZXR1cm4gYXNTdHJpbmcoXG4gICAgICB0ZXJyYWZvcm1GdW5jdGlvbihcImNpZHJzdWJuZXRcIiwgW1xuICAgICAgICBzdHJpbmdWYWx1ZSxcbiAgICAgICAgbnVtZXJpY1ZhbHVlLFxuICAgICAgICBudW1lcmljVmFsdWUsXG4gICAgICBdKShwcmVmaXgsIG5ld2JpdHMsIG5ldG51bSksXG4gICAgKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9jaWRyc3VibmV0cyBjaWRyc3VibmV0c30gY2FsY3VsYXRlcyBhIHNlcXVlbmNlIG9mIGNvbnNlY3V0aXZlIElQIGFkZHJlc3MgcmFuZ2VzIHdpdGhpbiBhIHBhcnRpY3VsYXIgQ0lEUiBwcmVmaXguXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwcmVmaXhcbiAgICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBuZXdiaXRzXG4gICAqL1xuICBzdGF0aWMgY2lkcnN1Ym5ldHMocHJlZml4OiBzdHJpbmcsIG5ld2JpdHM6IG51bWJlcltdKSB7XG4gICAgcmV0dXJuIGFzTGlzdChcbiAgICAgIHRlcnJhZm9ybUZ1bmN0aW9uKFwiY2lkcnN1Ym5ldHNcIiwgW3N0cmluZ1ZhbHVlLCB2YXJpYWRpYyhudW1lcmljVmFsdWUpXSkoXG4gICAgICAgIHByZWZpeCxcbiAgICAgICAgbmV3Yml0cyxcbiAgICAgICksXG4gICAgKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9jb2FsZXNjZSBjb2FsZXNjZX0gdGFrZXMgYW55IG51bWJlciBvZiBhcmd1bWVudHMgYW5kIHJldHVybnMgdGhlIGZpcnN0IG9uZSB0aGF0IGlzbid0IG51bGwgb3IgYW4gZW1wdHkgc3RyaW5nLlxuICAgKiBAcGFyYW0ge0FycmF5PGFueT59IHZhbHNcbiAgICovXG4gIHN0YXRpYyBjb2FsZXNjZSh2YWxzOiBhbnlbXSkge1xuICAgIHJldHVybiBhc0FueSh0ZXJyYWZvcm1GdW5jdGlvbihcImNvYWxlc2NlXCIsIFt2YXJpYWRpYyhhbnlWYWx1ZSldKSh2YWxzKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvY29hbGVzY2VsaXN0IGNvYWxlc2NlbGlzdH0gdGFrZXMgYW55IG51bWJlciBvZiBsaXN0IGFyZ3VtZW50cyBhbmQgcmV0dXJucyB0aGUgZmlyc3Qgb25lIHRoYXQgaXNuJ3QgZW1wdHkuXG4gICAqIEBwYXJhbSB7QXJyYXk8YW55Pn0gdmFsc1xuICAgKi9cbiAgc3RhdGljIGNvYWxlc2NlbGlzdCh2YWxzOiBhbnlbXSkge1xuICAgIHJldHVybiBhc0FueSh0ZXJyYWZvcm1GdW5jdGlvbihcImNvYWxlc2NlbGlzdFwiLCBbdmFyaWFkaWMoYW55VmFsdWUpXSkodmFscykpO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL2NvbXBhY3QgY29tcGFjdH0gdGFrZXMgYSBsaXN0IG9mIHN0cmluZ3MgYW5kIHJldHVybnMgYSBuZXcgbGlzdCB3aXRoIGFueSBlbXB0eSBzdHJpbmcgZWxlbWVudHMgcmVtb3ZlZC5cbiAgICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSBsaXN0XG4gICAqL1xuICBzdGF0aWMgY29tcGFjdChsaXN0OiBzdHJpbmdbXSkge1xuICAgIHJldHVybiBhc0xpc3QodGVycmFmb3JtRnVuY3Rpb24oXCJjb21wYWN0XCIsIFtsaXN0T2YoYW55VmFsdWUpXSkobGlzdCkpO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL2NvbmNhdCBjb25jYXR9IHRha2VzIHR3byBvciBtb3JlIGxpc3RzIGFuZCBjb21iaW5lcyB0aGVtIGludG8gYSBzaW5nbGUgbGlzdC5cbiAgICogQHBhcmFtIHtBcnJheTxhbnk+fSBzZXFzXG4gICAqL1xuICBzdGF0aWMgY29uY2F0KHNlcXM6IGFueVtdKSB7XG4gICAgcmV0dXJuIGFzQW55KHRlcnJhZm9ybUZ1bmN0aW9uKFwiY29uY2F0XCIsIFt2YXJpYWRpYyhhbnlWYWx1ZSldKShzZXFzKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvY29udGFpbnMgY29udGFpbnN9IGRldGVybWluZXMgd2hldGhlciBhIGdpdmVuIGxpc3Qgb3Igc2V0IGNvbnRhaW5zIGEgZ2l2ZW4gc2luZ2xlIHZhbHVlIGFzIG9uZSBvZiBpdHMgZWxlbWVudHMuXG4gICAqIEBwYXJhbSB7YW55fSBsaXN0XG4gICAqIEBwYXJhbSB7YW55fSB2YWx1ZVxuICAgKi9cbiAgc3RhdGljIGNvbnRhaW5zKGxpc3Q6IGFueSwgdmFsdWU6IGFueSkge1xuICAgIHJldHVybiBhc0FueShcbiAgICAgIHRlcnJhZm9ybUZ1bmN0aW9uKFwiY29udGFpbnNcIiwgW2FueVZhbHVlLCBhbnlWYWx1ZV0pKGxpc3QsIHZhbHVlKSxcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL2NvbnZlcnQgY29udmVydH0gY29udmVydHMgYSB2YWx1ZSB0byB0aGUgZ2l2ZW4gdHlwZSBjb25zdHJhaW50LlxuICAgKiBAcGFyYW0ge2FueX0gdmFsdWVcbiAgICogQHBhcmFtIHthbnl9IHR5cGVcbiAgICovXG4gIHN0YXRpYyBjb252ZXJ0KHZhbHVlOiBhbnksIHR5cGU6IGFueSkge1xuICAgIHJldHVybiBhc0FueShcbiAgICAgIHRlcnJhZm9ybUZ1bmN0aW9uKFwiY29udmVydFwiLCBbYW55VmFsdWUsIGFueVZhbHVlXSkodmFsdWUsIHR5cGUpLFxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvY3N2ZGVjb2RlIGNzdmRlY29kZX0gZGVjb2RlcyBhIHN0cmluZyBjb250YWluaW5nIENTVi1mb3JtYXR0ZWQgZGF0YSBhbmQgcHJvZHVjZXMgYSBsaXN0IG9mIG1hcHMgcmVwcmVzZW50aW5nIHRoYXQgZGF0YS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKi9cbiAgc3RhdGljIGNzdmRlY29kZShzdHI6IHN0cmluZykge1xuICAgIHJldHVybiBhc0FueSh0ZXJyYWZvcm1GdW5jdGlvbihcImNzdmRlY29kZVwiLCBbc3RyaW5nVmFsdWVdKShzdHIpKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9kaXJuYW1lIGRpcm5hbWV9IHRha2VzIGEgc3RyaW5nIGNvbnRhaW5pbmcgYSBmaWxlc3lzdGVtIHBhdGggYW5kIHJlbW92ZXMgdGhlIGxhc3QgcG9ydGlvbiBmcm9tIGl0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuICAgKi9cbiAgc3RhdGljIGRpcm5hbWUocGF0aDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGFzU3RyaW5nKHRlcnJhZm9ybUZ1bmN0aW9uKFwiZGlybmFtZVwiLCBbc3RyaW5nVmFsdWVdKShwYXRoKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvZGlzdGluY3QgZGlzdGluY3R9IHRha2VzIGEgbGlzdCBhbmQgcmV0dXJucyBhIG5ldyBsaXN0IHdpdGggYW55IGR1cGxpY2F0ZSBlbGVtZW50cyByZW1vdmVkLlxuICAgKiBAcGFyYW0ge0FycmF5PGFueT59IGxpc3RcbiAgICovXG4gIHN0YXRpYyBkaXN0aW5jdChsaXN0OiBhbnlbXSkge1xuICAgIHJldHVybiBhc0xpc3QodGVycmFmb3JtRnVuY3Rpb24oXCJkaXN0aW5jdFwiLCBbbGlzdE9mKGFueVZhbHVlKV0pKGxpc3QpKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9lbGVtZW50IGVsZW1lbnR9IHJldHJpZXZlcyBhIHNpbmdsZSBlbGVtZW50IGZyb20gYSBsaXN0LlxuICAgKiBAcGFyYW0ge2FueX0gbGlzdFxuICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAgICovXG4gIHN0YXRpYyBlbGVtZW50KGxpc3Q6IGFueSwgaW5kZXg6IG51bWJlcikge1xuICAgIHJldHVybiBhc0FueShcbiAgICAgIHRlcnJhZm9ybUZ1bmN0aW9uKFwiZWxlbWVudFwiLCBbYW55VmFsdWUsIG51bWVyaWNWYWx1ZV0pKGxpc3QsIGluZGV4KSxcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL2VuZHN3aXRoIGVuZHN3aXRofSB0YWtlcyB0d28gdmFsdWVzOiBhIHN0cmluZyB0byBjaGVjayBhbmQgYSBzdWZmaXggc3RyaW5nLiBUaGUgZnVuY3Rpb24gcmV0dXJucyB0cnVlIGlmIHRoZSBmaXJzdCBzdHJpbmcgZW5kcyB3aXRoIHRoYXQgZXhhY3Qgc3VmZml4LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdWZmaXhcbiAgICovXG4gIHN0YXRpYyBlbmRzd2l0aChzdHI6IHN0cmluZywgc3VmZml4OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNCb29sZWFuKFxuICAgICAgdGVycmFmb3JtRnVuY3Rpb24oXCJlbmRzd2l0aFwiLCBbc3RyaW5nVmFsdWUsIHN0cmluZ1ZhbHVlXSkoc3RyLCBzdWZmaXgpLFxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvZXBoZW1lcmFsYXNudWxsIGVwaGVtZXJhbGFzbnVsbH0gdGFrZXMgYSB2YWx1ZSBvZiBhbnkgdHlwZSBhbmQgcmV0dXJucyBhIHNpbWlsYXIgdmFsdWUgb2YgdGhlIHNhbWUgdHlwZSB3aXRoIGFueSBlcGhlbWVyYWwgdmFsdWVzIHJlcGxhY2VkIHdpdGggbm9uLWVwaGVtZXJhbCBudWxsIHZhbHVlcyBhbmQgYWxsIG5vbi1lcGhlbWVyYWwgdmFsdWVzIHByZXNlcnZlZC5cbiAgICogQHBhcmFtIHthbnl9IHZhbHVlXG4gICAqL1xuICBzdGF0aWMgZXBoZW1lcmFsYXNudWxsKHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gYXNBbnkodGVycmFmb3JtRnVuY3Rpb24oXCJlcGhlbWVyYWxhc251bGxcIiwgW2FueVZhbHVlXSkodmFsdWUpKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9maWxlIGZpbGV9IHJlYWRzIHRoZSBjb250ZW50cyBvZiBhIGZpbGUgYXQgdGhlIGdpdmVuIHBhdGggYW5kIHJldHVybnMgdGhlbSBhcyBhIHN0cmluZy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcbiAgICovXG4gIHN0YXRpYyBmaWxlKHBhdGg6IHN0cmluZykge1xuICAgIHJldHVybiBhc1N0cmluZyh0ZXJyYWZvcm1GdW5jdGlvbihcImZpbGVcIiwgW3N0cmluZ1ZhbHVlXSkocGF0aCkpO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL2ZpbGViYXNlNjQgZmlsZWJhc2U2NH0gcmVhZHMgdGhlIGNvbnRlbnRzIG9mIGEgZmlsZSBhdCB0aGUgZ2l2ZW4gcGF0aCBhbmQgcmV0dXJucyB0aGVtIGFzIGEgYmFzZTY0LWVuY29kZWQgc3RyaW5nLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuICAgKi9cbiAgc3RhdGljIGZpbGViYXNlNjQocGF0aDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGFzU3RyaW5nKHRlcnJhZm9ybUZ1bmN0aW9uKFwiZmlsZWJhc2U2NFwiLCBbc3RyaW5nVmFsdWVdKShwYXRoKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvZmlsZWJhc2U2NHNoYTI1NiBmaWxlYmFzZTY0c2hhMjU2fSBpcyBhIHZhcmlhbnQgb2YgYGJhc2U2NHNoYTI1NmAgdGhhdCBoYXNoZXMgdGhlIGNvbnRlbnRzIG9mIGEgZ2l2ZW4gZmlsZSByYXRoZXIgdGhhbiBhIGxpdGVyYWwgc3RyaW5nLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuICAgKi9cbiAgc3RhdGljIGZpbGViYXNlNjRzaGEyNTYocGF0aDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGFzU3RyaW5nKHRlcnJhZm9ybUZ1bmN0aW9uKFwiZmlsZWJhc2U2NHNoYTI1NlwiLCBbc3RyaW5nVmFsdWVdKShwYXRoKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvZmlsZWJhc2U2NHNoYTUxMiBmaWxlYmFzZTY0c2hhNTEyfSBpcyBhIHZhcmlhbnQgb2YgYGJhc2U2NHNoYTUxMmAgdGhhdCBoYXNoZXMgdGhlIGNvbnRlbnRzIG9mIGEgZ2l2ZW4gZmlsZSByYXRoZXIgdGhhbiBhIGxpdGVyYWwgc3RyaW5nLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuICAgKi9cbiAgc3RhdGljIGZpbGViYXNlNjRzaGE1MTIocGF0aDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGFzU3RyaW5nKHRlcnJhZm9ybUZ1bmN0aW9uKFwiZmlsZWJhc2U2NHNoYTUxMlwiLCBbc3RyaW5nVmFsdWVdKShwYXRoKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvZmlsZWV4aXN0cyBmaWxlZXhpc3RzfSBkZXRlcm1pbmVzIHdoZXRoZXIgYSBmaWxlIGV4aXN0cyBhdCBhIGdpdmVuIHBhdGguXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG4gICAqL1xuICBzdGF0aWMgZmlsZWV4aXN0cyhwYXRoOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNCb29sZWFuKHRlcnJhZm9ybUZ1bmN0aW9uKFwiZmlsZWV4aXN0c1wiLCBbc3RyaW5nVmFsdWVdKShwYXRoKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvZmlsZW1kNSBmaWxlbWQ1fSBpcyBhIHZhcmlhbnQgb2YgYG1kNWAgdGhhdCBoYXNoZXMgdGhlIGNvbnRlbnRzIG9mIGEgZ2l2ZW4gZmlsZSByYXRoZXIgdGhhbiBhIGxpdGVyYWwgc3RyaW5nLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuICAgKi9cbiAgc3RhdGljIGZpbGVtZDUocGF0aDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGFzU3RyaW5nKHRlcnJhZm9ybUZ1bmN0aW9uKFwiZmlsZW1kNVwiLCBbc3RyaW5nVmFsdWVdKShwYXRoKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvZmlsZXNldCBmaWxlc2V0fSBlbnVtZXJhdGVzIGEgc2V0IG9mIHJlZ3VsYXIgZmlsZSBuYW1lcyBnaXZlbiBhIHBhdGggYW5kIHBhdHRlcm4uIFRoZSBwYXRoIGlzIGF1dG9tYXRpY2FsbHkgcmVtb3ZlZCBmcm9tIHRoZSByZXN1bHRpbmcgc2V0IG9mIGZpbGUgbmFtZXMgYW5kIGFueSByZXN1bHQgc3RpbGwgY29udGFpbmluZyBwYXRoIHNlcGFyYXRvcnMgYWx3YXlzIHJldHVybnMgZm9yd2FyZCBzbGFzaCAoYC9gKSBhcyB0aGUgcGF0aCBzZXBhcmF0b3IgZm9yIGNyb3NzLXN5c3RlbSBjb21wYXRpYmlsaXR5LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0dGVyblxuICAgKi9cbiAgc3RhdGljIGZpbGVzZXQocGF0aDogc3RyaW5nLCBwYXR0ZXJuOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNMaXN0KFxuICAgICAgdGVycmFmb3JtRnVuY3Rpb24oXCJmaWxlc2V0XCIsIFtzdHJpbmdWYWx1ZSwgc3RyaW5nVmFsdWVdKShwYXRoLCBwYXR0ZXJuKSxcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL2ZpbGVzaGExIGZpbGVzaGExfSBpcyBhIHZhcmlhbnQgb2YgYHNoYTFgIHRoYXQgaGFzaGVzIHRoZSBjb250ZW50cyBvZiBhIGdpdmVuIGZpbGUgcmF0aGVyIHRoYW4gYSBsaXRlcmFsIHN0cmluZy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcbiAgICovXG4gIHN0YXRpYyBmaWxlc2hhMShwYXRoOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNTdHJpbmcodGVycmFmb3JtRnVuY3Rpb24oXCJmaWxlc2hhMVwiLCBbc3RyaW5nVmFsdWVdKShwYXRoKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvZmlsZXNoYTI1NiBmaWxlc2hhMjU2fSBpcyBhIHZhcmlhbnQgb2YgYHNoYTI1NmAgdGhhdCBoYXNoZXMgdGhlIGNvbnRlbnRzIG9mIGEgZ2l2ZW4gZmlsZSByYXRoZXIgdGhhbiBhIGxpdGVyYWwgc3RyaW5nLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuICAgKi9cbiAgc3RhdGljIGZpbGVzaGEyNTYocGF0aDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGFzU3RyaW5nKHRlcnJhZm9ybUZ1bmN0aW9uKFwiZmlsZXNoYTI1NlwiLCBbc3RyaW5nVmFsdWVdKShwYXRoKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvZmlsZXNoYTUxMiBmaWxlc2hhNTEyfSBpcyBhIHZhcmlhbnQgb2YgYHNoYTUxMmAgdGhhdCBoYXNoZXMgdGhlIGNvbnRlbnRzIG9mIGEgZ2l2ZW4gZmlsZSByYXRoZXIgdGhhbiBhIGxpdGVyYWwgc3RyaW5nLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuICAgKi9cbiAgc3RhdGljIGZpbGVzaGE1MTIocGF0aDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGFzU3RyaW5nKHRlcnJhZm9ybUZ1bmN0aW9uKFwiZmlsZXNoYTUxMlwiLCBbc3RyaW5nVmFsdWVdKShwYXRoKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvZmxhdHRlbiBmbGF0dGVufSB0YWtlcyBhIGxpc3QgYW5kIHJlcGxhY2VzIGFueSBlbGVtZW50cyB0aGF0IGFyZSBsaXN0cyB3aXRoIGEgZmxhdHRlbmVkIHNlcXVlbmNlIG9mIHRoZSBsaXN0IGNvbnRlbnRzLlxuICAgKiBAcGFyYW0ge2FueX0gbGlzdFxuICAgKi9cbiAgc3RhdGljIGZsYXR0ZW4obGlzdDogYW55KSB7XG4gICAgcmV0dXJuIGFzQW55KHRlcnJhZm9ybUZ1bmN0aW9uKFwiZmxhdHRlblwiLCBbYW55VmFsdWVdKShsaXN0KSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvZmxvb3IgZmxvb3J9IHJldHVybnMgdGhlIGNsb3Nlc3Qgd2hvbGUgbnVtYmVyIHRoYXQgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBnaXZlbiB2YWx1ZSwgd2hpY2ggbWF5IGJlIGEgZnJhY3Rpb24uXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBudW1cbiAgICovXG4gIHN0YXRpYyBmbG9vcihudW06IG51bWJlcikge1xuICAgIHJldHVybiBhc051bWJlcih0ZXJyYWZvcm1GdW5jdGlvbihcImZsb29yXCIsIFtudW1lcmljVmFsdWVdKShudW0pKTtcbiAgfVxuICAvKipcbiAgICogVGhlIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvZm9ybWF0IGZvcm1hdH0gZnVuY3Rpb24gcHJvZHVjZXMgYSBzdHJpbmcgYnkgZm9ybWF0dGluZyBhIG51bWJlciBvZiBvdGhlciB2YWx1ZXMgYWNjb3JkaW5nIHRvIGEgc3BlY2lmaWNhdGlvbiBzdHJpbmcuIEl0IGlzIHNpbWlsYXIgdG8gdGhlIGBwcmludGZgIGZ1bmN0aW9uIGluIEMsIGFuZCBvdGhlciBzaW1pbGFyIGZ1bmN0aW9ucyBpbiBvdGhlciBwcm9ncmFtbWluZyBsYW5ndWFnZXMuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmb3JtYXRcbiAgICogQHBhcmFtIHtBcnJheTxhbnk+fSBhcmdzXG4gICAqL1xuICBzdGF0aWMgZm9ybWF0KGZvcm1hdDogc3RyaW5nLCBhcmdzOiBhbnlbXSkge1xuICAgIHJldHVybiBhc1N0cmluZyhcbiAgICAgIHRlcnJhZm9ybUZ1bmN0aW9uKFwiZm9ybWF0XCIsIFtzdHJpbmdWYWx1ZSwgdmFyaWFkaWMoYW55VmFsdWUpXSkoXG4gICAgICAgIGZvcm1hdCxcbiAgICAgICAgYXJncyxcbiAgICAgICksXG4gICAgKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9mb3JtYXRkYXRlIGZvcm1hdGRhdGV9IGNvbnZlcnRzIGEgdGltZXN0YW1wIGludG8gYSBkaWZmZXJlbnQgdGltZSBmb3JtYXQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmb3JtYXRcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRpbWVcbiAgICovXG4gIHN0YXRpYyBmb3JtYXRkYXRlKGZvcm1hdDogc3RyaW5nLCB0aW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNTdHJpbmcoXG4gICAgICB0ZXJyYWZvcm1GdW5jdGlvbihcImZvcm1hdGRhdGVcIiwgW3N0cmluZ1ZhbHVlLCBzdHJpbmdWYWx1ZV0pKGZvcm1hdCwgdGltZSksXG4gICAgKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9mb3JtYXRsaXN0IGZvcm1hdGxpc3R9IHByb2R1Y2VzIGEgbGlzdCBvZiBzdHJpbmdzIGJ5IGZvcm1hdHRpbmcgYSBudW1iZXIgb2Ygb3RoZXIgdmFsdWVzIGFjY29yZGluZyB0byBhIHNwZWNpZmljYXRpb24gc3RyaW5nLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZm9ybWF0XG4gICAqIEBwYXJhbSB7QXJyYXk8YW55Pn0gYXJnc1xuICAgKi9cbiAgc3RhdGljIGZvcm1hdGxpc3QoZm9ybWF0OiBzdHJpbmcsIGFyZ3M6IGFueVtdKSB7XG4gICAgcmV0dXJuIGFzTGlzdChcbiAgICAgIHRlcnJhZm9ybUZ1bmN0aW9uKFwiZm9ybWF0bGlzdFwiLCBbc3RyaW5nVmFsdWUsIHZhcmlhZGljKGFueVZhbHVlKV0pKFxuICAgICAgICBmb3JtYXQsXG4gICAgICAgIGFyZ3MsXG4gICAgICApLFxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvaW5kZW50IGluZGVudH0gYWRkcyBhIGdpdmVuIG51bWJlciBvZiBzcGFjZXMgdG8gdGhlIGJlZ2lubmluZ3Mgb2YgYWxsIGJ1dCB0aGUgZmlyc3QgbGluZSBpbiBhIGdpdmVuIG11bHRpLWxpbmUgc3RyaW5nLlxuICAgKiBAcGFyYW0ge251bWJlcn0gc3BhY2VzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAgICovXG4gIHN0YXRpYyBpbmRlbnQoc3BhY2VzOiBudW1iZXIsIHN0cjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGFzU3RyaW5nKFxuICAgICAgdGVycmFmb3JtRnVuY3Rpb24oXCJpbmRlbnRcIiwgW251bWVyaWNWYWx1ZSwgc3RyaW5nVmFsdWVdKShzcGFjZXMsIHN0ciksXG4gICAgKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9pbmRleCBpbmRleH0gZmluZHMgdGhlIGVsZW1lbnQgaW5kZXggZm9yIGEgZ2l2ZW4gdmFsdWUgaW4gYSBsaXN0LlxuICAgKiBAcGFyYW0ge2FueX0gbGlzdFxuICAgKiBAcGFyYW0ge2FueX0gdmFsdWVcbiAgICovXG4gIHN0YXRpYyBpbmRleChsaXN0OiBhbnksIHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gYXNBbnkodGVycmFmb3JtRnVuY3Rpb24oXCJpbmRleFwiLCBbYW55VmFsdWUsIGFueVZhbHVlXSkobGlzdCwgdmFsdWUpKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9pc3NlbnNpdGl2ZSBpc3NlbnNpdGl2ZX0gdGFrZXMgYSB2YWx1ZSBhbmQgcmV0dXJucyBhIGJvb2xlYW4gaW5kaWNhdGluZyBpZiB0aGUgdmFsdWUgaXMgc2Vuc2l0aXZlLlxuICAgKiBAcGFyYW0ge2FueX0gdmFsdWVcbiAgICovXG4gIHN0YXRpYyBpc3NlbnNpdGl2ZSh2YWx1ZTogYW55KSB7XG4gICAgcmV0dXJuIGFzQm9vbGVhbih0ZXJyYWZvcm1GdW5jdGlvbihcImlzc2Vuc2l0aXZlXCIsIFthbnlWYWx1ZV0pKHZhbHVlKSk7XG4gIH1cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL2pvaW4gam9pbn0gcHJvZHVjZXMgYSBzdHJpbmcgYnkgY29uY2F0ZW5hdGluZyB0b2dldGhlciBhbGwgZWxlbWVudHMgb2YgYSBnaXZlbiBsaXN0IG9mIHN0cmluZ3Mgd2l0aCB0aGUgZ2l2ZW4gZGVsaW1pdGVyLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2VwYXJhdG9yXG4gICAqIEBwYXJhbSB7QXJyYXk8QXJyYXk8c3RyaW5nPj59IGxpc3RzXG4gICAqL1xuICBzdGF0aWMgX2pvaW4oc2VwYXJhdG9yOiBzdHJpbmcsIGxpc3RzOiBzdHJpbmdbXVtdKSB7XG4gICAgcmV0dXJuIGFzU3RyaW5nKFxuICAgICAgdGVycmFmb3JtRnVuY3Rpb24oXCJqb2luXCIsIFtzdHJpbmdWYWx1ZSwgdmFyaWFkaWMobGlzdE9mKGFueVZhbHVlKSldKShcbiAgICAgICAgc2VwYXJhdG9yLFxuICAgICAgICBsaXN0cyxcbiAgICAgICksXG4gICAgKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9qc29uZGVjb2RlIGpzb25kZWNvZGV9IGludGVycHJldHMgYSBnaXZlbiBzdHJpbmcgYXMgSlNPTiwgcmV0dXJuaW5nIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIHJlc3VsdCBvZiBkZWNvZGluZyB0aGF0IHN0cmluZy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKi9cbiAgc3RhdGljIGpzb25kZWNvZGUoc3RyOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNBbnkodGVycmFmb3JtRnVuY3Rpb24oXCJqc29uZGVjb2RlXCIsIFtzdHJpbmdWYWx1ZV0pKHN0cikpO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL2pzb25lbmNvZGUganNvbmVuY29kZX0gZW5jb2RlcyBhIGdpdmVuIHZhbHVlIHRvIGEgc3RyaW5nIHVzaW5nIEpTT04gc3ludGF4LlxuICAgKiBAcGFyYW0ge2FueX0gdmFsXG4gICAqL1xuICBzdGF0aWMganNvbmVuY29kZSh2YWw6IGFueSkge1xuICAgIHJldHVybiBhc1N0cmluZyh0ZXJyYWZvcm1GdW5jdGlvbihcImpzb25lbmNvZGVcIiwgW2FueVZhbHVlXSkodmFsKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMva2V5cyBrZXlzfSB0YWtlcyBhIG1hcCBhbmQgcmV0dXJucyBhIGxpc3QgY29udGFpbmluZyB0aGUga2V5cyBmcm9tIHRoYXQgbWFwLlxuICAgKiBAcGFyYW0ge2FueX0gaW5wdXRNYXBcbiAgICovXG4gIHN0YXRpYyBrZXlzKGlucHV0TWFwOiBhbnkpIHtcbiAgICByZXR1cm4gYXNBbnkodGVycmFmb3JtRnVuY3Rpb24oXCJrZXlzXCIsIFthbnlWYWx1ZV0pKGlucHV0TWFwKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvbGVuZ3RoIGxlbmd0aH0gZGV0ZXJtaW5lcyB0aGUgbGVuZ3RoIG9mIGEgZ2l2ZW4gbGlzdCwgbWFwLCBvciBzdHJpbmcuXG4gICAqIEBwYXJhbSB7YW55fSB2YWx1ZVxuICAgKi9cbiAgc3RhdGljIGxlbmd0aE9mKHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gYXNOdW1iZXIodGVycmFmb3JtRnVuY3Rpb24oXCJsZW5ndGhcIiwgW2FueVZhbHVlXSkodmFsdWUpKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9sb2cgbG9nfSByZXR1cm5zIHRoZSBsb2dhcml0aG0gb2YgYSBnaXZlbiBudW1iZXIgaW4gYSBnaXZlbiBiYXNlLlxuICAgKiBAcGFyYW0ge251bWJlcn0gbnVtXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBiYXNlXG4gICAqL1xuICBzdGF0aWMgbG9nKG51bTogbnVtYmVyLCBiYXNlOiBudW1iZXIpIHtcbiAgICByZXR1cm4gYXNOdW1iZXIoXG4gICAgICB0ZXJyYWZvcm1GdW5jdGlvbihcImxvZ1wiLCBbbnVtZXJpY1ZhbHVlLCBudW1lcmljVmFsdWVdKShudW0sIGJhc2UpLFxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL2xvb2t1cCBsb29rdXB9IHJldHJpZXZlcyB0aGUgdmFsdWUgb2YgYSBzaW5nbGUgZWxlbWVudCBmcm9tIGEgbWFwLCBnaXZlbiBpdHMga2V5LiBJZiB0aGUgZ2l2ZW4ga2V5IGRvZXMgbm90IGV4aXN0LCB0aGUgZ2l2ZW4gZGVmYXVsdCB2YWx1ZSBpcyByZXR1cm5lZCBpbnN0ZWFkLlxuICAgKiBAcGFyYW0ge2FueX0gaW5wdXRNYXBcbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICAgKiBAcGFyYW0ge0FycmF5PGFueT59IGRlZmF1bHRWYWx1ZVxuICAgKi9cbiAgc3RhdGljIF9sb29rdXAoaW5wdXRNYXA6IGFueSwga2V5OiBzdHJpbmcsIGRlZmF1bHRWYWx1ZTogYW55W10pIHtcbiAgICByZXR1cm4gYXNBbnkoXG4gICAgICB0ZXJyYWZvcm1GdW5jdGlvbihcImxvb2t1cFwiLCBbYW55VmFsdWUsIHN0cmluZ1ZhbHVlLCB2YXJpYWRpYyhhbnlWYWx1ZSldKShcbiAgICAgICAgaW5wdXRNYXAsXG4gICAgICAgIGtleSxcbiAgICAgICAgZGVmYXVsdFZhbHVlLFxuICAgICAgKSxcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL2xvd2VyIGxvd2VyfSBjb252ZXJ0cyBhbGwgY2FzZWQgbGV0dGVycyBpbiB0aGUgZ2l2ZW4gc3RyaW5nIHRvIGxvd2VyY2FzZS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKi9cbiAgc3RhdGljIGxvd2VyKHN0cjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGFzU3RyaW5nKHRlcnJhZm9ybUZ1bmN0aW9uKFwibG93ZXJcIiwgW3N0cmluZ1ZhbHVlXSkoc3RyKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvbWF0Y2hrZXlzIG1hdGNoa2V5c30gY29uc3RydWN0cyBhIG5ldyBsaXN0IGJ5IHRha2luZyBhIHN1YnNldCBvZiBlbGVtZW50cyBmcm9tIG9uZSBsaXN0IHdob3NlIGluZGV4ZXMgbWF0Y2ggdGhlIGNvcnJlc3BvbmRpbmcgaW5kZXhlcyBvZiB2YWx1ZXMgaW4gYW5vdGhlciBsaXN0LlxuICAgKiBAcGFyYW0ge0FycmF5PGFueT59IHZhbHVlc1xuICAgKiBAcGFyYW0ge0FycmF5PGFueT59IGtleXNcbiAgICogQHBhcmFtIHtBcnJheTxhbnk+fSBzZWFyY2hzZXRcbiAgICovXG4gIHN0YXRpYyBtYXRjaGtleXModmFsdWVzOiBhbnlbXSwga2V5czogYW55W10sIHNlYXJjaHNldDogYW55W10pIHtcbiAgICByZXR1cm4gYXNMaXN0KFxuICAgICAgdGVycmFmb3JtRnVuY3Rpb24oXCJtYXRjaGtleXNcIiwgW1xuICAgICAgICBsaXN0T2YoYW55VmFsdWUpLFxuICAgICAgICBsaXN0T2YoYW55VmFsdWUpLFxuICAgICAgICBsaXN0T2YoYW55VmFsdWUpLFxuICAgICAgXSkodmFsdWVzLCBrZXlzLCBzZWFyY2hzZXQpLFxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvbWF4IG1heH0gdGFrZXMgb25lIG9yIG1vcmUgbnVtYmVycyBhbmQgcmV0dXJucyB0aGUgZ3JlYXRlc3QgbnVtYmVyIGZyb20gdGhlIHNldC5cbiAgICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBudW1iZXJzXG4gICAqL1xuICBzdGF0aWMgbWF4KG51bWJlcnM6IG51bWJlcltdKSB7XG4gICAgcmV0dXJuIGFzTnVtYmVyKFxuICAgICAgdGVycmFmb3JtRnVuY3Rpb24oXCJtYXhcIiwgW3ZhcmlhZGljKG51bWVyaWNWYWx1ZSldKShudW1iZXJzKSxcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL21kNSBtZDV9IGNvbXB1dGVzIHRoZSBNRDUgaGFzaCBvZiBhIGdpdmVuIHN0cmluZyBhbmQgZW5jb2RlcyBpdCB3aXRoIGhleGFkZWNpbWFsIGRpZ2l0cy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKi9cbiAgc3RhdGljIG1kNShzdHI6IHN0cmluZykge1xuICAgIHJldHVybiBhc1N0cmluZyh0ZXJyYWZvcm1GdW5jdGlvbihcIm1kNVwiLCBbc3RyaW5nVmFsdWVdKShzdHIpKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9tZXJnZSBtZXJnZX0gdGFrZXMgYW4gYXJiaXRyYXJ5IG51bWJlciBvZiBtYXBzIG9yIG9iamVjdHMsIGFuZCByZXR1cm5zIGEgc2luZ2xlIG1hcCBvciBvYmplY3QgdGhhdCBjb250YWlucyBhIG1lcmdlZCBzZXQgb2YgZWxlbWVudHMgZnJvbSBhbGwgYXJndW1lbnRzLlxuICAgKiBAcGFyYW0ge0FycmF5PGFueT59IG1hcHNcbiAgICovXG4gIHN0YXRpYyBtZXJnZShtYXBzOiBhbnlbXSkge1xuICAgIHJldHVybiBhc0FueSh0ZXJyYWZvcm1GdW5jdGlvbihcIm1lcmdlXCIsIFt2YXJpYWRpYyhhbnlWYWx1ZSldKShtYXBzKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvbWluIG1pbn0gdGFrZXMgb25lIG9yIG1vcmUgbnVtYmVycyBhbmQgcmV0dXJucyB0aGUgc21hbGxlc3QgbnVtYmVyIGZyb20gdGhlIHNldC5cbiAgICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBudW1iZXJzXG4gICAqL1xuICBzdGF0aWMgbWluKG51bWJlcnM6IG51bWJlcltdKSB7XG4gICAgcmV0dXJuIGFzTnVtYmVyKFxuICAgICAgdGVycmFmb3JtRnVuY3Rpb24oXCJtaW5cIiwgW3ZhcmlhZGljKG51bWVyaWNWYWx1ZSldKShudW1iZXJzKSxcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL25vbnNlbnNpdGl2ZSBub25zZW5zaXRpdmV9IHRha2VzIGEgc2Vuc2l0aXZlIHZhbHVlIGFuZCByZXR1cm5zIGEgY29weSBvZiB0aGF0IHZhbHVlIHdpdGggdGhlIHNlbnNpdGl2ZSBtYXJraW5nIHJlbW92ZWQsIHRoZXJlYnkgZXhwb3NpbmcgdGhlIHNlbnNpdGl2ZSB2YWx1ZS5cbiAgICogQHBhcmFtIHthbnl9IHZhbHVlXG4gICAqL1xuICBzdGF0aWMgbm9uc2Vuc2l0aXZlKHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gYXNBbnkodGVycmFmb3JtRnVuY3Rpb24oXCJub25zZW5zaXRpdmVcIiwgW2FueVZhbHVlXSkodmFsdWUpKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9vbmUgb25lfSB0YWtlcyBhIGxpc3QsIHNldCwgb3IgdHVwbGUgdmFsdWUgd2l0aCBlaXRoZXIgemVybyBvciBvbmUgZWxlbWVudHMuIElmIHRoZSBjb2xsZWN0aW9uIGlzIGVtcHR5LCBgb25lYCByZXR1cm5zIGBudWxsYC4gT3RoZXJ3aXNlLCBgb25lYCByZXR1cm5zIHRoZSBmaXJzdCBlbGVtZW50LiBJZiB0aGVyZSBhcmUgdHdvIG9yIG1vcmUgZWxlbWVudHMgdGhlbiBgb25lYCB3aWxsIHJldHVybiBhbiBlcnJvci5cbiAgICogQHBhcmFtIHthbnl9IGxpc3RcbiAgICovXG4gIHN0YXRpYyBvbmUobGlzdDogYW55KSB7XG4gICAgcmV0dXJuIGFzQW55KHRlcnJhZm9ybUZ1bmN0aW9uKFwib25lXCIsIFthbnlWYWx1ZV0pKGxpc3QpKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9wYXJzZWludCBwYXJzZWludH0gcGFyc2VzIHRoZSBnaXZlbiBzdHJpbmcgYXMgYSByZXByZXNlbnRhdGlvbiBvZiBhbiBpbnRlZ2VyIGluIHRoZSBzcGVjaWZpZWQgYmFzZSBhbmQgcmV0dXJucyB0aGUgcmVzdWx0aW5nIG51bWJlci4gVGhlIGJhc2UgbXVzdCBiZSBiZXR3ZWVuIDIgYW5kIDYyIGluY2x1c2l2ZS5cbiAgICogQHBhcmFtIHthbnl9IG51bWJlclxuICAgKiBAcGFyYW0ge251bWJlcn0gYmFzZVxuICAgKi9cbiAgc3RhdGljIHBhcnNlaW50KG51bWJlcjogYW55LCBiYXNlOiBudW1iZXIpIHtcbiAgICByZXR1cm4gYXNBbnkoXG4gICAgICB0ZXJyYWZvcm1GdW5jdGlvbihcInBhcnNlaW50XCIsIFthbnlWYWx1ZSwgbnVtZXJpY1ZhbHVlXSkobnVtYmVyLCBiYXNlKSxcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL3BhdGhleHBhbmQgcGF0aGV4cGFuZH0gdGFrZXMgYSBmaWxlc3lzdGVtIHBhdGggdGhhdCBtaWdodCBiZWdpbiB3aXRoIGEgYH5gIHNlZ21lbnQsIGFuZCBpZiBzbyBpdCByZXBsYWNlcyB0aGF0IHNlZ21lbnQgd2l0aCB0aGUgY3VycmVudCB1c2VyJ3MgaG9tZSBkaXJlY3RvcnkgcGF0aC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcbiAgICovXG4gIHN0YXRpYyBwYXRoZXhwYW5kKHBhdGg6IHN0cmluZykge1xuICAgIHJldHVybiBhc1N0cmluZyh0ZXJyYWZvcm1GdW5jdGlvbihcInBhdGhleHBhbmRcIiwgW3N0cmluZ1ZhbHVlXSkocGF0aCkpO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL3BsYW50aW1lc3RhbXAgcGxhbnRpbWVzdGFtcH0gcmV0dXJucyBhIFVUQyB0aW1lc3RhbXAgc3RyaW5nIGluIFtSRkMgMzMzOV0oaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzMzMzkpIGZvcm1hdCwgZml4ZWQgdG8gYSBjb25zdGFudCB0aW1lIHJlcHJlc2VudGluZyB0aGUgdGltZSBvZiB0aGUgcGxhbi5cbiAgICovXG4gIHN0YXRpYyBwbGFudGltZXN0YW1wKCkge1xuICAgIHJldHVybiBhc1N0cmluZyh0ZXJyYWZvcm1GdW5jdGlvbihcInBsYW50aW1lc3RhbXBcIiwgW10pKCkpO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL3BvdyBwb3d9IGNhbGN1bGF0ZXMgYW4gZXhwb25lbnQsIGJ5IHJhaXNpbmcgaXRzIGZpcnN0IGFyZ3VtZW50IHRvIHRoZSBwb3dlciBvZiB0aGUgc2Vjb25kIGFyZ3VtZW50LlxuICAgKiBAcGFyYW0ge251bWJlcn0gbnVtXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBwb3dlclxuICAgKi9cbiAgc3RhdGljIHBvdyhudW06IG51bWJlciwgcG93ZXI6IG51bWJlcikge1xuICAgIHJldHVybiBhc051bWJlcihcbiAgICAgIHRlcnJhZm9ybUZ1bmN0aW9uKFwicG93XCIsIFtudW1lcmljVmFsdWUsIG51bWVyaWNWYWx1ZV0pKG51bSwgcG93ZXIpLFxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL3JhbmdlIHJhbmdlfSBnZW5lcmF0ZXMgYSBsaXN0IG9mIG51bWJlcnMgdXNpbmcgYSBzdGFydCB2YWx1ZSwgYSBsaW1pdCB2YWx1ZSwgYW5kIGEgc3RlcCB2YWx1ZS5cbiAgICogQHBhcmFtIHtBcnJheTxudW1iZXI+fSBwYXJhbXNcbiAgICovXG4gIHN0YXRpYyBfcmFuZ2UocGFyYW1zOiBudW1iZXJbXSkge1xuICAgIHJldHVybiBhc0xpc3QodGVycmFmb3JtRnVuY3Rpb24oXCJyYW5nZVwiLCBbdmFyaWFkaWMobnVtZXJpY1ZhbHVlKV0pKHBhcmFtcykpO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL3JlZ2V4IHJlZ2V4fSBhcHBsaWVzIGEgW3JlZ3VsYXIgZXhwcmVzc2lvbl0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUmVndWxhcl9leHByZXNzaW9uKSB0byBhIHN0cmluZyBhbmQgcmV0dXJucyB0aGUgbWF0Y2hpbmcgc3Vic3RyaW5ncy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhdHRlcm5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKi9cbiAgc3RhdGljIHJlZ2V4KHBhdHRlcm46IHN0cmluZywgc3RyOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNBbnkoXG4gICAgICB0ZXJyYWZvcm1GdW5jdGlvbihcInJlZ2V4XCIsIFtzdHJpbmdWYWx1ZSwgc3RyaW5nVmFsdWVdKShwYXR0ZXJuLCBzdHIpLFxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvcmVnZXhhbGwgcmVnZXhhbGx9IGFwcGxpZXMgYSBbcmVndWxhciBleHByZXNzaW9uXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9SZWd1bGFyX2V4cHJlc3Npb24pIHRvIGEgc3RyaW5nIGFuZCByZXR1cm5zIGEgbGlzdCBvZiBhbGwgbWF0Y2hlcy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhdHRlcm5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKi9cbiAgc3RhdGljIHJlZ2V4YWxsKHBhdHRlcm46IHN0cmluZywgc3RyOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNMaXN0KFxuICAgICAgdGVycmFmb3JtRnVuY3Rpb24oXCJyZWdleGFsbFwiLCBbc3RyaW5nVmFsdWUsIHN0cmluZ1ZhbHVlXSkocGF0dGVybiwgc3RyKSxcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL3JlcGxhY2UgcmVwbGFjZX0gc2VhcmNoZXMgYSBnaXZlbiBzdHJpbmcgZm9yIGFub3RoZXIgZ2l2ZW4gc3Vic3RyaW5nLCBhbmQgcmVwbGFjZXMgZWFjaCBvY2N1cnJlbmNlIHdpdGggYSBnaXZlbiByZXBsYWNlbWVudCBzdHJpbmcuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN1YnN0clxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVwbGFjZVxuICAgKi9cbiAgc3RhdGljIHJlcGxhY2Uoc3RyOiBzdHJpbmcsIHN1YnN0cjogc3RyaW5nLCByZXBsYWNlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNTdHJpbmcoXG4gICAgICB0ZXJyYWZvcm1GdW5jdGlvbihcInJlcGxhY2VcIiwgW3N0cmluZ1ZhbHVlLCBzdHJpbmdWYWx1ZSwgc3RyaW5nVmFsdWVdKShcbiAgICAgICAgc3RyLFxuICAgICAgICBzdWJzdHIsXG4gICAgICAgIHJlcGxhY2UsXG4gICAgICApLFxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvcmV2ZXJzZSByZXZlcnNlfSB0YWtlcyBhIHNlcXVlbmNlIGFuZCBwcm9kdWNlcyBhIG5ldyBzZXF1ZW5jZSBvZiB0aGUgc2FtZSBsZW5ndGggd2l0aCBhbGwgb2YgdGhlIHNhbWUgZWxlbWVudHMgYXMgdGhlIGdpdmVuIHNlcXVlbmNlIGJ1dCBpbiByZXZlcnNlIG9yZGVyLlxuICAgKiBAcGFyYW0ge2FueX0gbGlzdFxuICAgKi9cbiAgc3RhdGljIHJldmVyc2UobGlzdDogYW55KSB7XG4gICAgcmV0dXJuIGFzQW55KHRlcnJhZm9ybUZ1bmN0aW9uKFwicmV2ZXJzZVwiLCBbYW55VmFsdWVdKShsaXN0KSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvcnNhZGVjcnlwdCByc2FkZWNyeXB0fSBkZWNyeXB0cyBhbiBSU0EtZW5jcnlwdGVkIGNpcGhlcnRleHQsIHJldHVybmluZyB0aGUgY29ycmVzcG9uZGluZyBjbGVhcnRleHQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjaXBoZXJ0ZXh0XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwcml2YXRla2V5XG4gICAqL1xuICBzdGF0aWMgcnNhZGVjcnlwdChjaXBoZXJ0ZXh0OiBzdHJpbmcsIHByaXZhdGVrZXk6IHN0cmluZykge1xuICAgIHJldHVybiBhc1N0cmluZyhcbiAgICAgIHRlcnJhZm9ybUZ1bmN0aW9uKFwicnNhZGVjcnlwdFwiLCBbc3RyaW5nVmFsdWUsIHN0cmluZ1ZhbHVlXSkoXG4gICAgICAgIGNpcGhlcnRleHQsXG4gICAgICAgIHByaXZhdGVrZXksXG4gICAgICApLFxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvc2Vuc2l0aXZlIHNlbnNpdGl2ZX0gdGFrZXMgYW55IHZhbHVlIGFuZCByZXR1cm5zIGEgY29weSBvZiBpdCBtYXJrZWQgc28gdGhhdCBUZXJyYWZvcm0gd2lsbCB0cmVhdCBpdCBhcyBzZW5zaXRpdmUsIHdpdGggdGhlIHNhbWUgbWVhbmluZyBhbmQgYmVoYXZpb3IgYXMgZm9yIFtzZW5zaXRpdmUgaW5wdXQgdmFyaWFibGVzXSgvdGVycmFmb3JtL2xhbmd1YWdlL3ZhbHVlcy92YXJpYWJsZXMjc3VwcHJlc3NpbmctdmFsdWVzLWluLWNsaS1vdXRwdXQpLlxuICAgKiBAcGFyYW0ge2FueX0gdmFsdWVcbiAgICovXG4gIHN0YXRpYyBzZW5zaXRpdmUodmFsdWU6IGFueSkge1xuICAgIHJldHVybiBhc0FueSh0ZXJyYWZvcm1GdW5jdGlvbihcInNlbnNpdGl2ZVwiLCBbYW55VmFsdWVdKSh2YWx1ZSkpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9zZXRpbnRlcnNlY3Rpb24gc2V0aW50ZXJzZWN0aW9ufSBmdW5jdGlvbiB0YWtlcyBtdWx0aXBsZSBzZXRzIGFuZCBwcm9kdWNlcyBhIHNpbmdsZSBzZXQgY29udGFpbmluZyBvbmx5IHRoZSBlbGVtZW50cyB0aGF0IGFsbCBvZiB0aGUgZ2l2ZW4gc2V0cyBoYXZlIGluIGNvbW1vbi4gSW4gb3RoZXIgd29yZHMsIGl0IGNvbXB1dGVzIHRoZSBbaW50ZXJzZWN0aW9uXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JbnRlcnNlY3Rpb25fXFwoc2V0X3RoZW9yeVxcKSkgb2YgdGhlIHNldHMuXG4gICAqIEBwYXJhbSB7QXJyYXk8YW55Pn0gZmlyc3Rfc2V0XG4gICAqIEBwYXJhbSB7QXJyYXk8QXJyYXk8YW55Pj59IG90aGVyX3NldHNcbiAgICovXG4gIHN0YXRpYyBzZXRpbnRlcnNlY3Rpb24oZmlyc3Rfc2V0OiBhbnlbXSwgb3RoZXJfc2V0czogYW55W11bXSkge1xuICAgIHJldHVybiBhc0xpc3QoXG4gICAgICB0ZXJyYWZvcm1GdW5jdGlvbihcInNldGludGVyc2VjdGlvblwiLCBbXG4gICAgICAgIGxpc3RPZihhbnlWYWx1ZSksXG4gICAgICAgIHZhcmlhZGljKGxpc3RPZihhbnlWYWx1ZSkpLFxuICAgICAgXSkoZmlyc3Rfc2V0LCBvdGhlcl9zZXRzKSxcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiBUaGUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9zZXRwcm9kdWN0IHNldHByb2R1Y3R9IGZ1bmN0aW9uIGZpbmRzIGFsbCBvZiB0aGUgcG9zc2libGUgY29tYmluYXRpb25zIG9mIGVsZW1lbnRzIGZyb20gYWxsIG9mIHRoZSBnaXZlbiBzZXRzIGJ5IGNvbXB1dGluZyB0aGUgW0NhcnRlc2lhbiBwcm9kdWN0XShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9DYXJ0ZXNpYW5fcHJvZHVjdCkuXG4gICAqIEBwYXJhbSB7QXJyYXk8YW55Pn0gc2V0c1xuICAgKi9cbiAgc3RhdGljIHNldHByb2R1Y3Qoc2V0czogYW55W10pIHtcbiAgICByZXR1cm4gYXNBbnkodGVycmFmb3JtRnVuY3Rpb24oXCJzZXRwcm9kdWN0XCIsIFt2YXJpYWRpYyhhbnlWYWx1ZSldKShzZXRzKSk7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL3NldHN1YnRyYWN0IHNldHN1YnRyYWN0fSBmdW5jdGlvbiByZXR1cm5zIGEgbmV3IHNldCBjb250YWluaW5nIHRoZSBlbGVtZW50cyBmcm9tIHRoZSBmaXJzdCBzZXQgdGhhdCBhcmUgbm90IHByZXNlbnQgaW4gdGhlIHNlY29uZCBzZXQuIEluIG90aGVyIHdvcmRzLCBpdCBjb21wdXRlcyB0aGUgW3JlbGF0aXZlIGNvbXBsZW1lbnRdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NvbXBsZW1lbnRfXFwoc2V0X3RoZW9yeVxcKSNSZWxhdGl2ZV9jb21wbGVtZW50KSBvZiB0aGUgc2Vjb25kIHNldC5cbiAgICogQHBhcmFtIHtBcnJheTxhbnk+fSBhXG4gICAqIEBwYXJhbSB7QXJyYXk8YW55Pn0gYlxuICAgKi9cbiAgc3RhdGljIHNldHN1YnRyYWN0KGE6IGFueVtdLCBiOiBhbnlbXSkge1xuICAgIHJldHVybiBhc0xpc3QoXG4gICAgICB0ZXJyYWZvcm1GdW5jdGlvbihcInNldHN1YnRyYWN0XCIsIFtsaXN0T2YoYW55VmFsdWUpLCBsaXN0T2YoYW55VmFsdWUpXSkoXG4gICAgICAgIGEsXG4gICAgICAgIGIsXG4gICAgICApLFxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIFRoZSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL3NldHVuaW9uIHNldHVuaW9ufSBmdW5jdGlvbiB0YWtlcyBtdWx0aXBsZSBzZXRzIGFuZCBwcm9kdWNlcyBhIHNpbmdsZSBzZXQgY29udGFpbmluZyB0aGUgZWxlbWVudHMgZnJvbSBhbGwgb2YgdGhlIGdpdmVuIHNldHMuIEluIG90aGVyIHdvcmRzLCBpdCBjb21wdXRlcyB0aGUgW3VuaW9uXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Vbmlvbl9cXChzZXRfdGhlb3J5XFwpKSBvZiB0aGUgc2V0cy5cbiAgICogQHBhcmFtIHtBcnJheTxhbnk+fSBmaXJzdF9zZXRcbiAgICogQHBhcmFtIHtBcnJheTxBcnJheTxhbnk+Pn0gb3RoZXJfc2V0c1xuICAgKi9cbiAgc3RhdGljIHNldHVuaW9uKGZpcnN0X3NldDogYW55W10sIG90aGVyX3NldHM6IGFueVtdW10pIHtcbiAgICByZXR1cm4gYXNMaXN0KFxuICAgICAgdGVycmFmb3JtRnVuY3Rpb24oXCJzZXR1bmlvblwiLCBbXG4gICAgICAgIGxpc3RPZihhbnlWYWx1ZSksXG4gICAgICAgIHZhcmlhZGljKGxpc3RPZihhbnlWYWx1ZSkpLFxuICAgICAgXSkoZmlyc3Rfc2V0LCBvdGhlcl9zZXRzKSxcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL3NoYTEgc2hhMX0gY29tcHV0ZXMgdGhlIFNIQTEgaGFzaCBvZiBhIGdpdmVuIHN0cmluZyBhbmQgZW5jb2RlcyBpdCB3aXRoIGhleGFkZWNpbWFsIGRpZ2l0cy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKi9cbiAgc3RhdGljIHNoYTEoc3RyOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNTdHJpbmcodGVycmFmb3JtRnVuY3Rpb24oXCJzaGExXCIsIFtzdHJpbmdWYWx1ZV0pKHN0cikpO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL3NoYTI1NiBzaGEyNTZ9IGNvbXB1dGVzIHRoZSBTSEEyNTYgaGFzaCBvZiBhIGdpdmVuIHN0cmluZyBhbmQgZW5jb2RlcyBpdCB3aXRoIGhleGFkZWNpbWFsIGRpZ2l0cy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKi9cbiAgc3RhdGljIHNoYTI1NihzdHI6IHN0cmluZykge1xuICAgIHJldHVybiBhc1N0cmluZyh0ZXJyYWZvcm1GdW5jdGlvbihcInNoYTI1NlwiLCBbc3RyaW5nVmFsdWVdKShzdHIpKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9zaGE1MTIgc2hhNTEyfSBjb21wdXRlcyB0aGUgU0hBNTEyIGhhc2ggb2YgYSBnaXZlbiBzdHJpbmcgYW5kIGVuY29kZXMgaXQgd2l0aCBoZXhhZGVjaW1hbCBkaWdpdHMuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAgICovXG4gIHN0YXRpYyBzaGE1MTIoc3RyOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNTdHJpbmcodGVycmFmb3JtRnVuY3Rpb24oXCJzaGE1MTJcIiwgW3N0cmluZ1ZhbHVlXSkoc3RyKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvc2lnbnVtIHNpZ251bX0gZGV0ZXJtaW5lcyB0aGUgc2lnbiBvZiBhIG51bWJlciwgcmV0dXJuaW5nIGEgbnVtYmVyIGJldHdlZW4gLTEgYW5kIDEgdG8gcmVwcmVzZW50IHRoZSBzaWduLlxuICAgKiBAcGFyYW0ge251bWJlcn0gbnVtXG4gICAqL1xuICBzdGF0aWMgc2lnbnVtKG51bTogbnVtYmVyKSB7XG4gICAgcmV0dXJuIGFzTnVtYmVyKHRlcnJhZm9ybUZ1bmN0aW9uKFwic2lnbnVtXCIsIFtudW1lcmljVmFsdWVdKShudW0pKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9zbGljZSBzbGljZX0gZXh0cmFjdHMgc29tZSBjb25zZWN1dGl2ZSBlbGVtZW50cyBmcm9tIHdpdGhpbiBhIGxpc3QuXG4gICAqIEBwYXJhbSB7YW55fSBsaXN0XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydF9pbmRleFxuICAgKiBAcGFyYW0ge251bWJlcn0gZW5kX2luZGV4XG4gICAqL1xuICBzdGF0aWMgc2xpY2UobGlzdDogYW55LCBzdGFydF9pbmRleDogbnVtYmVyLCBlbmRfaW5kZXg6IG51bWJlcikge1xuICAgIHJldHVybiBhc0FueShcbiAgICAgIHRlcnJhZm9ybUZ1bmN0aW9uKFwic2xpY2VcIiwgW2FueVZhbHVlLCBudW1lcmljVmFsdWUsIG51bWVyaWNWYWx1ZV0pKFxuICAgICAgICBsaXN0LFxuICAgICAgICBzdGFydF9pbmRleCxcbiAgICAgICAgZW5kX2luZGV4LFxuICAgICAgKSxcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL3NvcnQgc29ydH0gdGFrZXMgYSBsaXN0IG9mIHN0cmluZ3MgYW5kIHJldHVybnMgYSBuZXcgbGlzdCB3aXRoIHRob3NlIHN0cmluZ3Mgc29ydGVkIGxleGljb2dyYXBoaWNhbGx5LlxuICAgKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IGxpc3RcbiAgICovXG4gIHN0YXRpYyBzb3J0KGxpc3Q6IHN0cmluZ1tdKSB7XG4gICAgcmV0dXJuIGFzTGlzdCh0ZXJyYWZvcm1GdW5jdGlvbihcInNvcnRcIiwgW2xpc3RPZihhbnlWYWx1ZSldKShsaXN0KSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvc3BsaXQgc3BsaXR9IHByb2R1Y2VzIGEgbGlzdCBieSBkaXZpZGluZyBhIGdpdmVuIHN0cmluZyBhdCBhbGwgb2NjdXJyZW5jZXMgb2YgYSBnaXZlbiBzZXBhcmF0b3IuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzZXBhcmF0b3JcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKi9cbiAgc3RhdGljIHNwbGl0KHNlcGFyYXRvcjogc3RyaW5nLCBzdHI6IHN0cmluZykge1xuICAgIHJldHVybiBhc0xpc3QoXG4gICAgICB0ZXJyYWZvcm1GdW5jdGlvbihcInNwbGl0XCIsIFtzdHJpbmdWYWx1ZSwgc3RyaW5nVmFsdWVdKShzZXBhcmF0b3IsIHN0ciksXG4gICAgKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9zdGFydHN3aXRoIHN0YXJ0c3dpdGh9IHRha2VzIHR3byB2YWx1ZXM6IGEgc3RyaW5nIHRvIGNoZWNrIGFuZCBhIHByZWZpeCBzdHJpbmcuIFRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgaWYgdGhlIHN0cmluZyBiZWdpbnMgd2l0aCB0aGF0IGV4YWN0IHByZWZpeC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHJlZml4XG4gICAqL1xuICBzdGF0aWMgc3RhcnRzd2l0aChzdHI6IHN0cmluZywgcHJlZml4OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNCb29sZWFuKFxuICAgICAgdGVycmFmb3JtRnVuY3Rpb24oXCJzdGFydHN3aXRoXCIsIFtzdHJpbmdWYWx1ZSwgc3RyaW5nVmFsdWVdKShzdHIsIHByZWZpeCksXG4gICAgKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9zdHJjb250YWlucyBzdHJjb250YWluc30gdGFrZXMgdHdvIHZhbHVlczogYSBzdHJpbmcgdG8gY2hlY2sgYW5kIGFuIGV4cGVjdGVkIHN1YnN0cmluZy4gVGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBpZiB0aGUgc3RyaW5nIGhhcyB0aGUgc3Vic3RyaW5nIGNvbnRhaW5lZCB3aXRoaW4gaXQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN1YnN0clxuICAgKi9cbiAgc3RhdGljIHN0cmNvbnRhaW5zKHN0cjogc3RyaW5nLCBzdWJzdHI6IHN0cmluZykge1xuICAgIHJldHVybiBhc0Jvb2xlYW4oXG4gICAgICB0ZXJyYWZvcm1GdW5jdGlvbihcInN0cmNvbnRhaW5zXCIsIFtzdHJpbmdWYWx1ZSwgc3RyaW5nVmFsdWVdKShzdHIsIHN1YnN0ciksXG4gICAgKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy9zdHJyZXYgc3RycmV2fSByZXZlcnNlcyB0aGUgY2hhcmFjdGVycyBpbiBhIHN0cmluZy4gTm90ZSB0aGF0IHRoZSBjaGFyYWN0ZXJzIGFyZSB0cmVhdGVkIGFzIF9Vbmljb2RlIGNoYXJhY3RlcnNfIChpbiB0ZWNobmljYWwgdGVybXMsIFVuaWNvZGUgW2dyYXBoZW1lIGNsdXN0ZXIgYm91bmRhcmllc10oaHR0cHM6Ly91bmljb2RlLm9yZy9yZXBvcnRzL3RyMjkvI0dyYXBoZW1lX0NsdXN0ZXJfQm91bmRhcmllcykgYXJlIHJlc3BlY3RlZCkuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAgICovXG4gIHN0YXRpYyBzdHJyZXYoc3RyOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNTdHJpbmcodGVycmFmb3JtRnVuY3Rpb24oXCJzdHJyZXZcIiwgW3N0cmluZ1ZhbHVlXSkoc3RyKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvc3Vic3RyIHN1YnN0cn0gZXh0cmFjdHMgYSBzdWJzdHJpbmcgZnJvbSBhIGdpdmVuIHN0cmluZyBieSBvZmZzZXQgYW5kIChtYXhpbXVtKSBsZW5ndGguXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldFxuICAgKiBAcGFyYW0ge251bWJlcn0gbGVuZ3RoXG4gICAqL1xuICBzdGF0aWMgc3Vic3RyKHN0cjogc3RyaW5nLCBvZmZzZXQ6IG51bWJlciwgbGVuZ3RoOiBudW1iZXIpIHtcbiAgICByZXR1cm4gYXNTdHJpbmcoXG4gICAgICB0ZXJyYWZvcm1GdW5jdGlvbihcInN1YnN0clwiLCBbc3RyaW5nVmFsdWUsIG51bWVyaWNWYWx1ZSwgbnVtZXJpY1ZhbHVlXSkoXG4gICAgICAgIHN0cixcbiAgICAgICAgb2Zmc2V0LFxuICAgICAgICBsZW5ndGgsXG4gICAgICApLFxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvc3VtIHN1bX0gdGFrZXMgYSBsaXN0IG9yIHNldCBvZiBudW1iZXJzIGFuZCByZXR1cm5zIHRoZSBzdW0gb2YgdGhvc2UgbnVtYmVycy5cbiAgICogQHBhcmFtIHthbnl9IGxpc3RcbiAgICovXG4gIHN0YXRpYyBzdW0obGlzdDogYW55KSB7XG4gICAgcmV0dXJuIGFzQW55KHRlcnJhZm9ybUZ1bmN0aW9uKFwic3VtXCIsIFthbnlWYWx1ZV0pKGxpc3QpKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy90ZW1wbGF0ZWZpbGUgdGVtcGxhdGVmaWxlfSByZWFkcyB0aGUgZmlsZSBhdCB0aGUgZ2l2ZW4gcGF0aCBhbmQgcmVuZGVycyBpdHMgY29udGVudCBhcyBhIHRlbXBsYXRlIHVzaW5nIGEgc3VwcGxpZWQgc2V0IG9mIHRlbXBsYXRlIHZhcmlhYmxlcy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcbiAgICogQHBhcmFtIHthbnl9IHZhcnNcbiAgICovXG4gIHN0YXRpYyB0ZW1wbGF0ZWZpbGUocGF0aDogc3RyaW5nLCB2YXJzOiBhbnkpIHtcbiAgICByZXR1cm4gYXNBbnkoXG4gICAgICB0ZXJyYWZvcm1GdW5jdGlvbihcInRlbXBsYXRlZmlsZVwiLCBbc3RyaW5nVmFsdWUsIGFueVZhbHVlXSkocGF0aCwgdmFycyksXG4gICAgKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy90ZW1wbGF0ZXN0cmluZyB0ZW1wbGF0ZXN0cmluZ30gdGFrZXMgYSBzdHJpbmcgZnJvbSBlbHNld2hlcmUgaW4gdGhlIG1vZHVsZSBhbmQgcmVuZGVycyBpdHMgY29udGVudCBhcyBhIHRlbXBsYXRlIHVzaW5nIGEgc3VwcGxpZWQgc2V0IG9mIHRlbXBsYXRlIHZhcmlhYmxlcy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHRlbXBsYXRlXG4gICAqIEBwYXJhbSB7YW55fSB2YXJzXG4gICAqL1xuICBzdGF0aWMgdGVtcGxhdGVzdHJpbmcodGVtcGxhdGU6IHN0cmluZywgdmFyczogYW55KSB7XG4gICAgcmV0dXJuIGFzU3RyaW5nKFxuICAgICAgdGVycmFmb3JtRnVuY3Rpb24oXCJ0ZW1wbGF0ZXN0cmluZ1wiLCBbc3RyaW5nVmFsdWUsIGFueVZhbHVlXSkoXG4gICAgICAgIHRlbXBsYXRlLFxuICAgICAgICB2YXJzLFxuICAgICAgKSxcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL3RleHRkZWNvZGViYXNlNjQgdGV4dGRlY29kZWJhc2U2NH0gZnVuY3Rpb24gZGVjb2RlcyBhIHN0cmluZyB0aGF0IHdhcyBwcmV2aW91c2x5IEJhc2U2NC1lbmNvZGVkLCBhbmQgdGhlbiBpbnRlcnByZXRzIHRoZSByZXN1bHQgYXMgY2hhcmFjdGVycyBpbiBhIHNwZWNpZmllZCBjaGFyYWN0ZXIgZW5jb2RpbmcuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IGVuY29kaW5nXG4gICAqL1xuICBzdGF0aWMgdGV4dGRlY29kZWJhc2U2NChzb3VyY2U6IHN0cmluZywgZW5jb2Rpbmc6IHN0cmluZykge1xuICAgIHJldHVybiBhc1N0cmluZyhcbiAgICAgIHRlcnJhZm9ybUZ1bmN0aW9uKFwidGV4dGRlY29kZWJhc2U2NFwiLCBbc3RyaW5nVmFsdWUsIHN0cmluZ1ZhbHVlXSkoXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgZW5jb2RpbmcsXG4gICAgICApLFxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvdGV4dGVuY29kZWJhc2U2NCB0ZXh0ZW5jb2RlYmFzZTY0fSBlbmNvZGVzIHRoZSB1bmljb2RlIGNoYXJhY3RlcnMgaW4gYSBnaXZlbiBzdHJpbmcgdXNpbmcgYSBzcGVjaWZpZWQgY2hhcmFjdGVyIGVuY29kaW5nLCByZXR1cm5pbmcgdGhlIHJlc3VsdCBiYXNlNjQgZW5jb2RlZCBiZWNhdXNlIFRlcnJhZm9ybSBsYW5ndWFnZSBzdHJpbmdzIGFyZSBhbHdheXMgc2VxdWVuY2VzIG9mIHVuaWNvZGUgY2hhcmFjdGVycy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKiBAcGFyYW0ge3N0cmluZ30gZW5jb2RpbmdcbiAgICovXG4gIHN0YXRpYyB0ZXh0ZW5jb2RlYmFzZTY0KHN0cjogc3RyaW5nLCBlbmNvZGluZzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGFzU3RyaW5nKFxuICAgICAgdGVycmFmb3JtRnVuY3Rpb24oXCJ0ZXh0ZW5jb2RlYmFzZTY0XCIsIFtzdHJpbmdWYWx1ZSwgc3RyaW5nVmFsdWVdKShcbiAgICAgICAgc3RyLFxuICAgICAgICBlbmNvZGluZyxcbiAgICAgICksXG4gICAgKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy90aW1lYWRkIHRpbWVhZGR9IGFkZHMgYSBkdXJhdGlvbiB0byBhIHRpbWVzdGFtcCwgcmV0dXJuaW5nIGEgbmV3IHRpbWVzdGFtcC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHRpbWVzdGFtcFxuICAgKiBAcGFyYW0ge3N0cmluZ30gZHVyYXRpb25cbiAgICovXG4gIHN0YXRpYyB0aW1lYWRkKHRpbWVzdGFtcDogc3RyaW5nLCBkdXJhdGlvbjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGFzU3RyaW5nKFxuICAgICAgdGVycmFmb3JtRnVuY3Rpb24oXCJ0aW1lYWRkXCIsIFtzdHJpbmdWYWx1ZSwgc3RyaW5nVmFsdWVdKShcbiAgICAgICAgdGltZXN0YW1wLFxuICAgICAgICBkdXJhdGlvbixcbiAgICAgICksXG4gICAgKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy90aW1lY21wIHRpbWVjbXB9IGNvbXBhcmVzIHR3byB0aW1lc3RhbXBzIGFuZCByZXR1cm5zIGEgbnVtYmVyIHRoYXQgcmVwcmVzZW50cyB0aGUgb3JkZXJpbmcgb2YgdGhlIGluc3RhbnRzIHRob3NlIHRpbWVzdGFtcHMgcmVwcmVzZW50LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGltZXN0YW1wX2FcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRpbWVzdGFtcF9iXG4gICAqL1xuICBzdGF0aWMgdGltZWNtcCh0aW1lc3RhbXBfYTogc3RyaW5nLCB0aW1lc3RhbXBfYjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGFzTnVtYmVyKFxuICAgICAgdGVycmFmb3JtRnVuY3Rpb24oXCJ0aW1lY21wXCIsIFtzdHJpbmdWYWx1ZSwgc3RyaW5nVmFsdWVdKShcbiAgICAgICAgdGltZXN0YW1wX2EsXG4gICAgICAgIHRpbWVzdGFtcF9iLFxuICAgICAgKSxcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL3RpbWVzdGFtcCB0aW1lc3RhbXB9IHJldHVybnMgYSBVVEMgdGltZXN0YW1wIHN0cmluZyBpbiBbUkZDIDMzMzldKGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzMzM5KSBmb3JtYXQuXG4gICAqL1xuICBzdGF0aWMgdGltZXN0YW1wKCkge1xuICAgIHJldHVybiBhc1N0cmluZyh0ZXJyYWZvcm1GdW5jdGlvbihcInRpbWVzdGFtcFwiLCBbXSkoKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvdGl0bGUgdGl0bGV9IGNvbnZlcnRzIHRoZSBmaXJzdCBsZXR0ZXIgb2YgZWFjaCB3b3JkIGluIHRoZSBnaXZlbiBzdHJpbmcgdG8gdXBwZXJjYXNlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gICAqL1xuICBzdGF0aWMgdGl0bGUoc3RyOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNTdHJpbmcodGVycmFmb3JtRnVuY3Rpb24oXCJ0aXRsZVwiLCBbc3RyaW5nVmFsdWVdKShzdHIpKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy90b2Jvb2wgdG9ib29sfSBjb252ZXJ0cyBpdHMgYXJndW1lbnQgdG8gYSBib29sZWFuIHZhbHVlLlxuICAgKiBAcGFyYW0ge2FueX0gdlxuICAgKi9cbiAgc3RhdGljIHRvYm9vbCh2OiBhbnkpIHtcbiAgICByZXR1cm4gYXNCb29sZWFuKHRlcnJhZm9ybUZ1bmN0aW9uKFwidG9ib29sXCIsIFthbnlWYWx1ZV0pKHYpKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy90b2xpc3QgdG9saXN0fSBjb252ZXJ0cyBpdHMgYXJndW1lbnQgdG8gYSBsaXN0IHZhbHVlLlxuICAgKiBAcGFyYW0ge2FueX0gdlxuICAgKi9cbiAgc3RhdGljIHRvbGlzdCh2OiBhbnkpIHtcbiAgICByZXR1cm4gYXNMaXN0KHRlcnJhZm9ybUZ1bmN0aW9uKFwidG9saXN0XCIsIFthbnlWYWx1ZV0pKHYpKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy90b21hcCB0b21hcH0gY29udmVydHMgaXRzIGFyZ3VtZW50IHRvIGEgbWFwIHZhbHVlLlxuICAgKiBAcGFyYW0ge2FueX0gdlxuICAgKi9cbiAgc3RhdGljIHRvbWFwKHY6IGFueSkge1xuICAgIHJldHVybiBhc0FueSh0ZXJyYWZvcm1GdW5jdGlvbihcInRvbWFwXCIsIFthbnlWYWx1ZV0pKHYpKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy90b251bWJlciB0b251bWJlcn0gY29udmVydHMgaXRzIGFyZ3VtZW50IHRvIGEgbnVtYmVyIHZhbHVlLlxuICAgKiBAcGFyYW0ge2FueX0gdlxuICAgKi9cbiAgc3RhdGljIHRvbnVtYmVyKHY6IGFueSkge1xuICAgIHJldHVybiBhc051bWJlcih0ZXJyYWZvcm1GdW5jdGlvbihcInRvbnVtYmVyXCIsIFthbnlWYWx1ZV0pKHYpKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy90b3NldCB0b3NldH0gY29udmVydHMgaXRzIGFyZ3VtZW50IHRvIGEgc2V0IHZhbHVlLlxuICAgKiBAcGFyYW0ge2FueX0gdlxuICAgKi9cbiAgc3RhdGljIHRvc2V0KHY6IGFueSkge1xuICAgIHJldHVybiBhc0xpc3QodGVycmFmb3JtRnVuY3Rpb24oXCJ0b3NldFwiLCBbYW55VmFsdWVdKSh2KSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvdG9zdHJpbmcgdG9zdHJpbmd9IGNvbnZlcnRzIGl0cyBhcmd1bWVudCB0byBhIHN0cmluZyB2YWx1ZS5cbiAgICogQHBhcmFtIHthbnl9IHZcbiAgICovXG4gIHN0YXRpYyB0b3N0cmluZyh2OiBhbnkpIHtcbiAgICByZXR1cm4gYXNTdHJpbmcodGVycmFmb3JtRnVuY3Rpb24oXCJ0b3N0cmluZ1wiLCBbYW55VmFsdWVdKSh2KSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvdHJhbnNwb3NlIHRyYW5zcG9zZX0gdGFrZXMgYSBtYXAgb2YgbGlzdHMgb2Ygc3RyaW5ncyBhbmQgc3dhcHMgdGhlIGtleXMgYW5kIHZhbHVlcyB0byBwcm9kdWNlIGEgbmV3IG1hcCBvZiBsaXN0cyBvZiBzdHJpbmdzLlxuICAgKiBAcGFyYW0ge09iamVjdDxzdHJpbmcsIEFycmF5PHN0cmluZz4+fSB2YWx1ZXNcbiAgICovXG4gIHN0YXRpYyB0cmFuc3Bvc2UodmFsdWVzOiBhbnkpIHtcbiAgICByZXR1cm4gYXNBbnkodGVycmFmb3JtRnVuY3Rpb24oXCJ0cmFuc3Bvc2VcIiwgW21hcFZhbHVlXSkodmFsdWVzKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvdHJpbSB0cmltfSByZW1vdmVzIHRoZSBzcGVjaWZpZWQgc2V0IG9mIGNoYXJhY3RlcnMgZnJvbSB0aGUgc3RhcnQgYW5kIGVuZCBvZiB0aGUgZ2l2ZW4gc3RyaW5nLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjdXRzZXRcbiAgICovXG4gIHN0YXRpYyB0cmltKHN0cjogc3RyaW5nLCBjdXRzZXQ6IHN0cmluZykge1xuICAgIHJldHVybiBhc1N0cmluZyhcbiAgICAgIHRlcnJhZm9ybUZ1bmN0aW9uKFwidHJpbVwiLCBbc3RyaW5nVmFsdWUsIHN0cmluZ1ZhbHVlXSkoc3RyLCBjdXRzZXQpLFxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvdHJpbXByZWZpeCB0cmltcHJlZml4fSByZW1vdmVzIHRoZSBzcGVjaWZpZWQgcHJlZml4IGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBnaXZlbiBzdHJpbmcuIElmIHRoZSBzdHJpbmcgZG9lcyBub3Qgc3RhcnQgd2l0aCB0aGUgcHJlZml4LCB0aGUgc3RyaW5nIGlzIHJldHVybmVkIHVuY2hhbmdlZC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKiBAcGFyYW0ge3N0cmluZ30gcHJlZml4XG4gICAqL1xuICBzdGF0aWMgdHJpbXByZWZpeChzdHI6IHN0cmluZywgcHJlZml4OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNTdHJpbmcoXG4gICAgICB0ZXJyYWZvcm1GdW5jdGlvbihcInRyaW1wcmVmaXhcIiwgW3N0cmluZ1ZhbHVlLCBzdHJpbmdWYWx1ZV0pKHN0ciwgcHJlZml4KSxcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL3RyaW1zcGFjZSB0cmltc3BhY2V9IHJlbW92ZXMgYW55IHNwYWNlIGNoYXJhY3RlcnMgZnJvbSB0aGUgc3RhcnQgYW5kIGVuZCBvZiB0aGUgZ2l2ZW4gc3RyaW5nLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gICAqL1xuICBzdGF0aWMgdHJpbXNwYWNlKHN0cjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGFzU3RyaW5nKHRlcnJhZm9ybUZ1bmN0aW9uKFwidHJpbXNwYWNlXCIsIFtzdHJpbmdWYWx1ZV0pKHN0cikpO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL3RyaW1zdWZmaXggdHJpbXN1ZmZpeH0gcmVtb3ZlcyB0aGUgc3BlY2lmaWVkIHN1ZmZpeCBmcm9tIHRoZSBlbmQgb2YgdGhlIGdpdmVuIHN0cmluZy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3VmZml4XG4gICAqL1xuICBzdGF0aWMgdHJpbXN1ZmZpeChzdHI6IHN0cmluZywgc3VmZml4OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXNTdHJpbmcoXG4gICAgICB0ZXJyYWZvcm1GdW5jdGlvbihcInRyaW1zdWZmaXhcIiwgW3N0cmluZ1ZhbHVlLCBzdHJpbmdWYWx1ZV0pKHN0ciwgc3VmZml4KSxcbiAgICApO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL3RyeSB0cnl9IGV2YWx1YXRlcyBhbGwgb2YgaXRzIGFyZ3VtZW50IGV4cHJlc3Npb25zIGluIHR1cm4gYW5kIHJldHVybnMgdGhlIHJlc3VsdCBvZiB0aGUgZmlyc3Qgb25lIHRoYXQgZG9lcyBub3QgcHJvZHVjZSBhbnkgZXJyb3JzLlxuICAgKiBAcGFyYW0ge0FycmF5PGFueT59IGV4cHJlc3Npb25zXG4gICAqL1xuICBzdGF0aWMgdHJ5KGV4cHJlc3Npb25zOiBhbnlbXSkge1xuICAgIHJldHVybiBhc0FueSh0ZXJyYWZvcm1GdW5jdGlvbihcInRyeVwiLCBbdmFyaWFkaWMoYW55VmFsdWUpXSkoZXhwcmVzc2lvbnMpKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy91cHBlciB1cHBlcn0gY29udmVydHMgYWxsIGNhc2VkIGxldHRlcnMgaW4gdGhlIGdpdmVuIHN0cmluZyB0byB1cHBlcmNhc2UuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAgICovXG4gIHN0YXRpYyB1cHBlcihzdHI6IHN0cmluZykge1xuICAgIHJldHVybiBhc1N0cmluZyh0ZXJyYWZvcm1GdW5jdGlvbihcInVwcGVyXCIsIFtzdHJpbmdWYWx1ZV0pKHN0cikpO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9vcGVudG9mdS5vcmcvZG9jcy9sYW5ndWFnZS9mdW5jdGlvbnMvdXJsZGVjb2RlIHVybGRlY29kZX0gYXBwbGllcyBVUkwgZGVjb2RpbmcgdG8gYSBnaXZlbiBlbmNvZGVkIHN0cmluZy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKi9cbiAgc3RhdGljIHVybGRlY29kZShzdHI6IHN0cmluZykge1xuICAgIHJldHVybiBhc1N0cmluZyh0ZXJyYWZvcm1GdW5jdGlvbihcInVybGRlY29kZVwiLCBbc3RyaW5nVmFsdWVdKShzdHIpKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy91cmxlbmNvZGUgdXJsZW5jb2RlfSBhcHBsaWVzIFVSTCBlbmNvZGluZyB0byBhIGdpdmVuIHN0cmluZy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKi9cbiAgc3RhdGljIHVybGVuY29kZShzdHI6IHN0cmluZykge1xuICAgIHJldHVybiBhc1N0cmluZyh0ZXJyYWZvcm1GdW5jdGlvbihcInVybGVuY29kZVwiLCBbc3RyaW5nVmFsdWVdKShzdHIpKTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLmhhc2hpY29ycC5jb20vdGVycmFmb3JtL2xhbmd1YWdlL2Z1bmN0aW9ucy91dWlkIHV1aWR9IGdlbmVyYXRlcyBhIHVuaXF1ZSBpZGVudGlmaWVyIHN0cmluZy5cbiAgICovXG4gIHN0YXRpYyB1dWlkKCkge1xuICAgIHJldHVybiBhc1N0cmluZyh0ZXJyYWZvcm1GdW5jdGlvbihcInV1aWRcIiwgW10pKCkpO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIuaGFzaGljb3JwLmNvbS90ZXJyYWZvcm0vbGFuZ3VhZ2UvZnVuY3Rpb25zL3V1aWR2NSB1dWlkdjV9IGdlbmVyYXRlcyBhIF9uYW1lLWJhc2VkXyBVVUlELCBhcyBkZXNjcmliZWQgaW4gW1JGQyA0MTIyIHNlY3Rpb24gNC4zXShodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNDEyMiNzZWN0aW9uLTQuMyksIGFsc28ga25vd24gYXMgYSBcInZlcnNpb24gNVwiIFVVSUQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lc3BhY2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICovXG4gIHN0YXRpYyB1dWlkdjUobmFtZXNwYWNlOiBzdHJpbmcsIG5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiBhc1N0cmluZyhcbiAgICAgIHRlcnJhZm9ybUZ1bmN0aW9uKFwidXVpZHY1XCIsIFtzdHJpbmdWYWx1ZSwgc3RyaW5nVmFsdWVdKShuYW1lc3BhY2UsIG5hbWUpLFxuICAgICk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvdmFsdWVzIHZhbHVlc30gdGFrZXMgYSBtYXAgYW5kIHJldHVybnMgYSBsaXN0IGNvbnRhaW5pbmcgdGhlIHZhbHVlcyBvZiB0aGUgZWxlbWVudHMgaW4gdGhhdCBtYXAuXG4gICAqIEBwYXJhbSB7YW55fSBtYXBwaW5nXG4gICAqL1xuICBzdGF0aWMgdmFsdWVzKG1hcHBpbmc6IGFueSkge1xuICAgIHJldHVybiBhc0FueSh0ZXJyYWZvcm1GdW5jdGlvbihcInZhbHVlc1wiLCBbYW55VmFsdWVdKShtYXBwaW5nKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMveWFtbGRlY29kZSB5YW1sZGVjb2RlfSBwYXJzZXMgYSBzdHJpbmcgYXMgYSBzdWJzZXQgb2YgWUFNTCwgYW5kIHByb2R1Y2VzIGEgcmVwcmVzZW50YXRpb24gb2YgaXRzIHZhbHVlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3JjXG4gICAqL1xuICBzdGF0aWMgeWFtbGRlY29kZShzcmM6IHN0cmluZykge1xuICAgIHJldHVybiBhc0FueSh0ZXJyYWZvcm1GdW5jdGlvbihcInlhbWxkZWNvZGVcIiwgW3N0cmluZ1ZhbHVlXSkoc3JjKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMveWFtbGVuY29kZSB5YW1sZW5jb2RlfSBlbmNvZGVzIGEgZ2l2ZW4gdmFsdWUgdG8gYSBzdHJpbmcgdXNpbmcgW1lBTUwgMS4yXShodHRwczovL3lhbWwub3JnL3NwZWMvMS4yL3NwZWMuaHRtbCkgYmxvY2sgc3ludGF4LlxuICAgKiBAcGFyYW0ge2FueX0gdmFsdWVcbiAgICovXG4gIHN0YXRpYyB5YW1sZW5jb2RlKHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gYXNTdHJpbmcodGVycmFmb3JtRnVuY3Rpb24oXCJ5YW1sZW5jb2RlXCIsIFthbnlWYWx1ZV0pKHZhbHVlKSk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBodHRwczovL2RldmVsb3Blci5oYXNoaWNvcnAuY29tL3RlcnJhZm9ybS9sYW5ndWFnZS9mdW5jdGlvbnMvemlwbWFwIHppcG1hcH0gY29uc3RydWN0cyBhIG1hcCBmcm9tIGEgbGlzdCBvZiBrZXlzIGFuZCBhIGNvcnJlc3BvbmRpbmcgbGlzdCBvZiB2YWx1ZXMuXG4gICAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0ga2V5c1xuICAgKiBAcGFyYW0ge2FueX0gdmFsdWVzXG4gICAqL1xuICBzdGF0aWMgemlwbWFwKGtleXM6IHN0cmluZ1tdLCB2YWx1ZXM6IGFueSkge1xuICAgIHJldHVybiBhc0FueShcbiAgICAgIHRlcnJhZm9ybUZ1bmN0aW9uKFwiemlwbWFwXCIsIFtsaXN0T2YoYW55VmFsdWUpLCBhbnlWYWx1ZV0pKGtleXMsIHZhbHVlcyksXG4gICAgKTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A single entry presented to an {@link IIgnoreStrategy}.
|
|
3
|
+
*
|
|
4
|
+
* A struct rather than a positional `relativePath` string so the shape can
|
|
5
|
+
* evolve. `isDirectory` is carried from the outset because `.gitignore` /
|
|
6
|
+
* `.dockerignore` semantics turn on it: a `foo/` pattern matches a
|
|
7
|
+
* directory but not a file named `foo`, and a matcher cannot recover
|
|
8
|
+
* that distinction from the path text alone.
|
|
9
|
+
*/
|
|
10
|
+
export interface IgnoreQuery {
|
|
11
|
+
/**
|
|
12
|
+
* `/`-separated path relative to the asset root.
|
|
13
|
+
*/
|
|
14
|
+
readonly relativePath: string;
|
|
15
|
+
/**
|
|
16
|
+
* Whether this entry is a directory rather than a file or symlink.
|
|
17
|
+
*
|
|
18
|
+
* The tree walkers set this from `lstat`, so a strategy can honor
|
|
19
|
+
* directory-only patterns without stat-ing the path itself (which it has
|
|
20
|
+
* no root to resolve against). Excluding a directory also excludes
|
|
21
|
+
* everything below it, since the walkers stop descending once a directory
|
|
22
|
+
* is excluded.
|
|
23
|
+
*/
|
|
24
|
+
readonly isDirectory: boolean;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Decides whether a path relative to an asset root is excluded from staging
|
|
28
|
+
* and hashing.
|
|
29
|
+
*
|
|
30
|
+
* Core ships only the exact-path / `*.ext` / directory matcher used by
|
|
31
|
+
* `exclude` today (`ExcludeIgnoreStrategy`). Full glob, `.gitignore`, and
|
|
32
|
+
* `.dockerignore` parity can be implemented against this interface without
|
|
33
|
+
* core taking on a glob parser.
|
|
34
|
+
*/
|
|
35
|
+
export interface IIgnoreStrategy {
|
|
36
|
+
/**
|
|
37
|
+
* Whether the given entry should be excluded.
|
|
38
|
+
* @param query - the entry under consideration, see {@link IgnoreQuery}
|
|
39
|
+
*/
|
|
40
|
+
ignores(query: IgnoreQuery): boolean;
|
|
41
|
+
/**
|
|
42
|
+
* Whether excluding a directory also excludes everything beneath it.
|
|
43
|
+
*
|
|
44
|
+
* When `true` (the default), the walkers stop descending as soon as a
|
|
45
|
+
* directory is excluded — cheaper, and correct for a strategy whose
|
|
46
|
+
* patterns never re-include a path below an excluded parent.
|
|
47
|
+
*
|
|
48
|
+
* A strategy with negation patterns must set this to `false`:
|
|
49
|
+
* `.gitignore` / `.dockerignore` allow `node_modules` followed by
|
|
50
|
+
* `!node_modules/keep`, which is only reachable if the walk descends into
|
|
51
|
+
* the excluded `node_modules` and asks about `node_modules/keep`. The
|
|
52
|
+
* excluded directory entry itself is still omitted; only the descent
|
|
53
|
+
* changes. Opting out costs a full walk of excluded subtrees.
|
|
54
|
+
*
|
|
55
|
+
* @default true
|
|
56
|
+
*/
|
|
57
|
+
readonly pruneExcludedDirectories?: boolean;
|
|
58
|
+
/**
|
|
59
|
+
* A value identifying this strategy's exclusion behavior, suitable for
|
|
60
|
+
* folding into a cache key. Two strategies that return the same
|
|
61
|
+
* `cacheKey` must exclude the same paths.
|
|
62
|
+
*
|
|
63
|
+
* Callers such as `AssetStaging`'s result cache key on a JSON-serializable
|
|
64
|
+
* representation of their inputs, which a strategy instance is not. Omit
|
|
65
|
+
* this when the strategy's behavior can't be summarized this way; the
|
|
66
|
+
* caller then has to treat every call as uncacheable.
|
|
67
|
+
*
|
|
68
|
+
* @default - this strategy cannot be represented in a cache key
|
|
69
|
+
*/
|
|
70
|
+
readonly cacheKey?: string;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* The default ignore strategy: exact paths, `*.ext` suffixes, and
|
|
74
|
+
* directories (with everything inside them).
|
|
75
|
+
*/
|
|
76
|
+
export declare class ExcludeIgnoreStrategy implements IIgnoreStrategy {
|
|
77
|
+
private readonly matcher;
|
|
78
|
+
readonly cacheKey?: string;
|
|
79
|
+
readonly pruneExcludedDirectories?: boolean;
|
|
80
|
+
constructor(exclude: string[]);
|
|
81
|
+
ignores(query: IgnoreQuery): boolean;
|
|
82
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ExcludeIgnoreStrategy = void 0;
|
|
4
|
+
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
5
|
+
// Copyright (c) HashiCorp, Inc
|
|
6
|
+
// SPDX-License-Identifier: MPL-2.0
|
|
7
|
+
const fs_1 = require("./private/fs");
|
|
8
|
+
/**
|
|
9
|
+
* The default ignore strategy: exact paths, `*.ext` suffixes, and
|
|
10
|
+
* directories (with everything inside them).
|
|
11
|
+
*/
|
|
12
|
+
class ExcludeIgnoreStrategy {
|
|
13
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdktn.ExcludeIgnoreStrategy", version: "0.25.0-pre.21" };
|
|
14
|
+
matcher;
|
|
15
|
+
cacheKey;
|
|
16
|
+
// Undefined (the interface default) prunes excluded directories, which is
|
|
17
|
+
// correct here since the built-in patterns have no negation form.
|
|
18
|
+
pruneExcludedDirectories;
|
|
19
|
+
constructor(exclude) {
|
|
20
|
+
this.matcher = (0, fs_1.excludeMatcher)(exclude);
|
|
21
|
+
this.cacheKey = `exclude:${JSON.stringify(exclude)}`;
|
|
22
|
+
}
|
|
23
|
+
ignores(query) {
|
|
24
|
+
// Path-based matching only; `isDirectory` is unused.
|
|
25
|
+
return this.matcher(query.relativePath);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
exports.ExcludeIgnoreStrategy = ExcludeIgnoreStrategy;
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWdub3JlLXN0cmF0ZWd5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2lnbm9yZS1zdHJhdGVneS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsK0JBQStCO0FBQy9CLG1DQUFtQztBQUNuQyxxQ0FBOEM7QUE4RTlDOzs7R0FHRztBQUNILE1BQWEscUJBQXFCOztJQUNmLE9BQU8sQ0FBb0M7SUFFNUMsUUFBUSxDQUFVO0lBRWxDLDBFQUEwRTtJQUMxRSxrRUFBa0U7SUFDbEQsd0JBQXdCLENBQVc7SUFFbkQsWUFBWSxPQUFpQjtRQUMzQixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUEsbUJBQWMsRUFBQyxPQUFPLENBQUMsQ0FBQztRQUN2QyxJQUFJLENBQUMsUUFBUSxHQUFHLFdBQVcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO0lBQ3ZELENBQUM7SUFFTSxPQUFPLENBQUMsS0FBa0I7UUFDL0IscURBQXFEO1FBQ3JELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDMUMsQ0FBQzs7QUFqQkgsc0RBa0JDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSBIYXNoaUNvcnAsIEluY1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1QTC0yLjBcbmltcG9ydCB7IGV4Y2x1ZGVNYXRjaGVyIH0gZnJvbSBcIi4vcHJpdmF0ZS9mc1wiO1xuXG4vKipcbiAqIEEgc2luZ2xlIGVudHJ5IHByZXNlbnRlZCB0byBhbiB7QGxpbmsgSUlnbm9yZVN0cmF0ZWd5fS5cbiAqXG4gKiBBIHN0cnVjdCByYXRoZXIgdGhhbiBhIHBvc2l0aW9uYWwgYHJlbGF0aXZlUGF0aGAgc3RyaW5nIHNvIHRoZSBzaGFwZSBjYW5cbiAqIGV2b2x2ZS4gYGlzRGlyZWN0b3J5YCBpcyBjYXJyaWVkIGZyb20gdGhlIG91dHNldCBiZWNhdXNlIGAuZ2l0aWdub3JlYCAvXG4gKiBgLmRvY2tlcmlnbm9yZWAgc2VtYW50aWNzIHR1cm4gb24gaXQ6IGEgYGZvby9gIHBhdHRlcm4gbWF0Y2hlcyBhXG4gKiBkaXJlY3RvcnkgYnV0IG5vdCBhIGZpbGUgbmFtZWQgYGZvb2AsIGFuZCBhIG1hdGNoZXIgY2Fubm90IHJlY292ZXJcbiAqIHRoYXQgZGlzdGluY3Rpb24gZnJvbSB0aGUgcGF0aCB0ZXh0IGFsb25lLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElnbm9yZVF1ZXJ5IHtcbiAgLyoqXG4gICAqIGAvYC1zZXBhcmF0ZWQgcGF0aCByZWxhdGl2ZSB0byB0aGUgYXNzZXQgcm9vdC5cbiAgICovXG4gIHJlYWRvbmx5IHJlbGF0aXZlUGF0aDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoaXMgZW50cnkgaXMgYSBkaXJlY3RvcnkgcmF0aGVyIHRoYW4gYSBmaWxlIG9yIHN5bWxpbmsuXG4gICAqXG4gICAqIFRoZSB0cmVlIHdhbGtlcnMgc2V0IHRoaXMgZnJvbSBgbHN0YXRgLCBzbyBhIHN0cmF0ZWd5IGNhbiBob25vclxuICAgKiBkaXJlY3Rvcnktb25seSBwYXR0ZXJucyB3aXRob3V0IHN0YXQtaW5nIHRoZSBwYXRoIGl0c2VsZiAod2hpY2ggaXQgaGFzXG4gICAqIG5vIHJvb3QgdG8gcmVzb2x2ZSBhZ2FpbnN0KS4gRXhjbHVkaW5nIGEgZGlyZWN0b3J5IGFsc28gZXhjbHVkZXNcbiAgICogZXZlcnl0aGluZyBiZWxvdyBpdCwgc2luY2UgdGhlIHdhbGtlcnMgc3RvcCBkZXNjZW5kaW5nIG9uY2UgYSBkaXJlY3RvcnlcbiAgICogaXMgZXhjbHVkZWQuXG4gICAqL1xuICByZWFkb25seSBpc0RpcmVjdG9yeTogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBEZWNpZGVzIHdoZXRoZXIgYSBwYXRoIHJlbGF0aXZlIHRvIGFuIGFzc2V0IHJvb3QgaXMgZXhjbHVkZWQgZnJvbSBzdGFnaW5nXG4gKiBhbmQgaGFzaGluZy5cbiAqXG4gKiBDb3JlIHNoaXBzIG9ubHkgdGhlIGV4YWN0LXBhdGggLyBgKi5leHRgIC8gZGlyZWN0b3J5IG1hdGNoZXIgdXNlZCBieVxuICogYGV4Y2x1ZGVgIHRvZGF5IChgRXhjbHVkZUlnbm9yZVN0cmF0ZWd5YCkuIEZ1bGwgZ2xvYiwgYC5naXRpZ25vcmVgLCBhbmRcbiAqIGAuZG9ja2VyaWdub3JlYCBwYXJpdHkgY2FuIGJlIGltcGxlbWVudGVkIGFnYWluc3QgdGhpcyBpbnRlcmZhY2Ugd2l0aG91dFxuICogY29yZSB0YWtpbmcgb24gYSBnbG9iIHBhcnNlci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJSWdub3JlU3RyYXRlZ3kge1xuICAvKipcbiAgICogV2hldGhlciB0aGUgZ2l2ZW4gZW50cnkgc2hvdWxkIGJlIGV4Y2x1ZGVkLlxuICAgKiBAcGFyYW0gcXVlcnkgLSB0aGUgZW50cnkgdW5kZXIgY29uc2lkZXJhdGlvbiwgc2VlIHtAbGluayBJZ25vcmVRdWVyeX1cbiAgICovXG4gIGlnbm9yZXMocXVlcnk6IElnbm9yZVF1ZXJ5KTogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciBleGNsdWRpbmcgYSBkaXJlY3RvcnkgYWxzbyBleGNsdWRlcyBldmVyeXRoaW5nIGJlbmVhdGggaXQuXG4gICAqXG4gICAqIFdoZW4gYHRydWVgICh0aGUgZGVmYXVsdCksIHRoZSB3YWxrZXJzIHN0b3AgZGVzY2VuZGluZyBhcyBzb29uIGFzIGFcbiAgICogZGlyZWN0b3J5IGlzIGV4Y2x1ZGVkIOKAlCBjaGVhcGVyLCBhbmQgY29ycmVjdCBmb3IgYSBzdHJhdGVneSB3aG9zZVxuICAgKiBwYXR0ZXJucyBuZXZlciByZS1pbmNsdWRlIGEgcGF0aCBiZWxvdyBhbiBleGNsdWRlZCBwYXJlbnQuXG4gICAqXG4gICAqIEEgc3RyYXRlZ3kgd2l0aCBuZWdhdGlvbiBwYXR0ZXJucyBtdXN0IHNldCB0aGlzIHRvIGBmYWxzZWA6XG4gICAqIGAuZ2l0aWdub3JlYCAvIGAuZG9ja2VyaWdub3JlYCBhbGxvdyBgbm9kZV9tb2R1bGVzYCBmb2xsb3dlZCBieVxuICAgKiBgIW5vZGVfbW9kdWxlcy9rZWVwYCwgd2hpY2ggaXMgb25seSByZWFjaGFibGUgaWYgdGhlIHdhbGsgZGVzY2VuZHMgaW50b1xuICAgKiB0aGUgZXhjbHVkZWQgYG5vZGVfbW9kdWxlc2AgYW5kIGFza3MgYWJvdXQgYG5vZGVfbW9kdWxlcy9rZWVwYC4gVGhlXG4gICAqIGV4Y2x1ZGVkIGRpcmVjdG9yeSBlbnRyeSBpdHNlbGYgaXMgc3RpbGwgb21pdHRlZDsgb25seSB0aGUgZGVzY2VudFxuICAgKiBjaGFuZ2VzLiBPcHRpbmcgb3V0IGNvc3RzIGEgZnVsbCB3YWxrIG9mIGV4Y2x1ZGVkIHN1YnRyZWVzLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBwcnVuZUV4Y2x1ZGVkRGlyZWN0b3JpZXM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBIHZhbHVlIGlkZW50aWZ5aW5nIHRoaXMgc3RyYXRlZ3kncyBleGNsdXNpb24gYmVoYXZpb3IsIHN1aXRhYmxlIGZvclxuICAgKiBmb2xkaW5nIGludG8gYSBjYWNoZSBrZXkuIFR3byBzdHJhdGVnaWVzIHRoYXQgcmV0dXJuIHRoZSBzYW1lXG4gICAqIGBjYWNoZUtleWAgbXVzdCBleGNsdWRlIHRoZSBzYW1lIHBhdGhzLlxuICAgKlxuICAgKiBDYWxsZXJzIHN1Y2ggYXMgYEFzc2V0U3RhZ2luZ2AncyByZXN1bHQgY2FjaGUga2V5IG9uIGEgSlNPTi1zZXJpYWxpemFibGVcbiAgICogcmVwcmVzZW50YXRpb24gb2YgdGhlaXIgaW5wdXRzLCB3aGljaCBhIHN0cmF0ZWd5IGluc3RhbmNlIGlzIG5vdC4gT21pdFxuICAgKiB0aGlzIHdoZW4gdGhlIHN0cmF0ZWd5J3MgYmVoYXZpb3IgY2FuJ3QgYmUgc3VtbWFyaXplZCB0aGlzIHdheTsgdGhlXG4gICAqIGNhbGxlciB0aGVuIGhhcyB0byB0cmVhdCBldmVyeSBjYWxsIGFzIHVuY2FjaGVhYmxlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHRoaXMgc3RyYXRlZ3kgY2Fubm90IGJlIHJlcHJlc2VudGVkIGluIGEgY2FjaGUga2V5XG4gICAqL1xuICByZWFkb25seSBjYWNoZUtleT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgZGVmYXVsdCBpZ25vcmUgc3RyYXRlZ3k6IGV4YWN0IHBhdGhzLCBgKi5leHRgIHN1ZmZpeGVzLCBhbmRcbiAqIGRpcmVjdG9yaWVzICh3aXRoIGV2ZXJ5dGhpbmcgaW5zaWRlIHRoZW0pLlxuICovXG5leHBvcnQgY2xhc3MgRXhjbHVkZUlnbm9yZVN0cmF0ZWd5IGltcGxlbWVudHMgSUlnbm9yZVN0cmF0ZWd5IHtcbiAgcHJpdmF0ZSByZWFkb25seSBtYXRjaGVyOiAocmVsYXRpdmVQYXRoOiBzdHJpbmcpID0+IGJvb2xlYW47XG5cbiAgcHVibGljIHJlYWRvbmx5IGNhY2hlS2V5Pzogc3RyaW5nO1xuXG4gIC8vIFVuZGVmaW5lZCAodGhlIGludGVyZmFjZSBkZWZhdWx0KSBwcnVuZXMgZXhjbHVkZWQgZGlyZWN0b3JpZXMsIHdoaWNoIGlzXG4gIC8vIGNvcnJlY3QgaGVyZSBzaW5jZSB0aGUgYnVpbHQtaW4gcGF0dGVybnMgaGF2ZSBubyBuZWdhdGlvbiBmb3JtLlxuICBwdWJsaWMgcmVhZG9ubHkgcHJ1bmVFeGNsdWRlZERpcmVjdG9yaWVzPzogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3RvcihleGNsdWRlOiBzdHJpbmdbXSkge1xuICAgIHRoaXMubWF0Y2hlciA9IGV4Y2x1ZGVNYXRjaGVyKGV4Y2x1ZGUpO1xuICAgIHRoaXMuY2FjaGVLZXkgPSBgZXhjbHVkZToke0pTT04uc3RyaW5naWZ5KGV4Y2x1ZGUpfWA7XG4gIH1cblxuICBwdWJsaWMgaWdub3JlcyhxdWVyeTogSWdub3JlUXVlcnkpOiBib29sZWFuIHtcbiAgICAvLyBQYXRoLWJhc2VkIG1hdGNoaW5nIG9ubHk7IGBpc0RpcmVjdG9yeWAgaXMgdW51c2VkLlxuICAgIHJldHVybiB0aGlzLm1hdGNoZXIocXVlcnkucmVsYXRpdmVQYXRoKTtcbiAgfVxufVxuIl19
|